1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461 |
- (function webpackUniversalModuleDefinition(root, factory) {
- if(typeof exports === 'object' && typeof module === 'object')
- module.exports = factory();
- else if(typeof define === 'function' && define.amd)
- define([], factory);
- else if(typeof exports === 'object')
- exports["d3v4pp"] = factory();
- else
- root["d3v4pp"] = factory();
- })(this, () => {
- return /******/ (() => { // webpackBootstrap
- /******/ var __webpack_modules__ = ({
- /***/ "./node_modules/@remix-run/router/dist/router.js":
- /*!*******************************************************!*\
- !*** ./node_modules/@remix-run/router/dist/router.js ***!
- \*******************************************************/
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
- /* harmony export */ "AbortedDeferredError": () => (/* binding */ AbortedDeferredError),
- /* harmony export */ "Action": () => (/* binding */ Action),
- /* harmony export */ "ErrorResponse": () => (/* binding */ ErrorResponse),
- /* harmony export */ "IDLE_FETCHER": () => (/* binding */ IDLE_FETCHER),
- /* harmony export */ "IDLE_NAVIGATION": () => (/* binding */ IDLE_NAVIGATION),
- /* harmony export */ "UNSAFE_convertRoutesToDataRoutes": () => (/* binding */ convertRoutesToDataRoutes),
- /* harmony export */ "UNSAFE_getPathContributingMatches": () => (/* binding */ getPathContributingMatches),
- /* harmony export */ "createBrowserHistory": () => (/* binding */ createBrowserHistory),
- /* harmony export */ "createHashHistory": () => (/* binding */ createHashHistory),
- /* harmony export */ "createMemoryHistory": () => (/* binding */ createMemoryHistory),
- /* harmony export */ "createPath": () => (/* binding */ createPath),
- /* harmony export */ "createRouter": () => (/* binding */ createRouter),
- /* harmony export */ "defer": () => (/* binding */ defer),
- /* harmony export */ "generatePath": () => (/* binding */ generatePath),
- /* harmony export */ "getStaticContextFromError": () => (/* binding */ getStaticContextFromError),
- /* harmony export */ "getToPathname": () => (/* binding */ getToPathname),
- /* harmony export */ "invariant": () => (/* binding */ invariant),
- /* harmony export */ "isRouteErrorResponse": () => (/* binding */ isRouteErrorResponse),
- /* harmony export */ "joinPaths": () => (/* binding */ joinPaths),
- /* harmony export */ "json": () => (/* binding */ json),
- /* harmony export */ "matchPath": () => (/* binding */ matchPath),
- /* harmony export */ "matchRoutes": () => (/* binding */ matchRoutes),
- /* harmony export */ "normalizePathname": () => (/* binding */ normalizePathname),
- /* harmony export */ "parsePath": () => (/* binding */ parsePath),
- /* harmony export */ "redirect": () => (/* binding */ redirect),
- /* harmony export */ "resolvePath": () => (/* binding */ resolvePath),
- /* harmony export */ "resolveTo": () => (/* binding */ resolveTo),
- /* harmony export */ "stripBasename": () => (/* binding */ stripBasename),
- /* harmony export */ "unstable_createStaticHandler": () => (/* binding */ unstable_createStaticHandler),
- /* harmony export */ "warning": () => (/* binding */ warning)
- /* harmony export */ });
- /**
- * @remix-run/router v1.0.3
- *
- * Copyright (c) Remix Software Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE.md file in the root directory of this source tree.
- *
- * @license MIT
- */
- function _extends() {
- _extends = Object.assign ? Object.assign.bind() : function (target) {
- for (var i = 1; i < arguments.length; i++) {
- var source = arguments[i];
- for (var key in source) {
- if (Object.prototype.hasOwnProperty.call(source, key)) {
- target[key] = source[key];
- }
- }
- }
- return target;
- };
- return _extends.apply(this, arguments);
- }
- ////////////////////////////////////////////////////////////////////////////////
- //#region Types and Constants
- ////////////////////////////////////////////////////////////////////////////////
- /**
- * Actions represent the type of change to a location value.
- */
- var Action;
- (function (Action) {
- /**
- * A POP indicates a change to an arbitrary index in the history stack, such
- * as a back or forward navigation. It does not describe the direction of the
- * navigation, only that the current index changed.
- *
- * Note: This is the default action for newly created history objects.
- */
- Action["Pop"] = "POP";
- /**
- * A PUSH indicates a new entry being added to the history stack, such as when
- * a link is clicked and a new page loads. When this happens, all subsequent
- * entries in the stack are lost.
- */
- Action["Push"] = "PUSH";
- /**
- * A REPLACE indicates the entry at the current index in the history stack
- * being replaced by a new one.
- */
- Action["Replace"] = "REPLACE";
- })(Action || (Action = {}));
- const PopStateEventType = "popstate";
- /**
- * Memory history stores the current location in memory. It is designed for use
- * in stateful non-browser environments like tests and React Native.
- */
- function createMemoryHistory(options) {
- if (options === void 0) {
- options = {};
- }
- let {
- initialEntries = ["/"],
- initialIndex,
- v5Compat = false
- } = options;
- let entries; // Declare so we can access from createMemoryLocation
- entries = initialEntries.map((entry, index) => createMemoryLocation(entry, typeof entry === "string" ? null : entry.state, index === 0 ? "default" : undefined));
- let index = clampIndex(initialIndex == null ? entries.length - 1 : initialIndex);
- let action = Action.Pop;
- let listener = null;
- function clampIndex(n) {
- return Math.min(Math.max(n, 0), entries.length - 1);
- }
- function getCurrentLocation() {
- return entries[index];
- }
- function createMemoryLocation(to, state, key) {
- if (state === void 0) {
- state = null;
- }
- let location = createLocation(entries ? getCurrentLocation().pathname : "/", to, state, key);
- warning$1(location.pathname.charAt(0) === "/", "relative pathnames are not supported in memory history: " + JSON.stringify(to));
- return location;
- }
- let history = {
- get index() {
- return index;
- },
- get action() {
- return action;
- },
- get location() {
- return getCurrentLocation();
- },
- createHref(to) {
- return typeof to === "string" ? to : createPath(to);
- },
- encodeLocation(location) {
- return location;
- },
- push(to, state) {
- action = Action.Push;
- let nextLocation = createMemoryLocation(to, state);
- index += 1;
- entries.splice(index, entries.length, nextLocation);
- if (v5Compat && listener) {
- listener({
- action,
- location: nextLocation
- });
- }
- },
- replace(to, state) {
- action = Action.Replace;
- let nextLocation = createMemoryLocation(to, state);
- entries[index] = nextLocation;
- if (v5Compat && listener) {
- listener({
- action,
- location: nextLocation
- });
- }
- },
- go(delta) {
- action = Action.Pop;
- index = clampIndex(index + delta);
- if (listener) {
- listener({
- action,
- location: getCurrentLocation()
- });
- }
- },
- listen(fn) {
- listener = fn;
- return () => {
- listener = null;
- };
- }
- };
- return history;
- }
- /**
- * Browser history stores the location in regular URLs. This is the standard for
- * most web apps, but it requires some configuration on the server to ensure you
- * serve the same app at multiple URLs.
- *
- * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory
- */
- function createBrowserHistory(options) {
- if (options === void 0) {
- options = {};
- }
- function createBrowserLocation(window, globalHistory) {
- let {
- pathname,
- search,
- hash
- } = window.location;
- return createLocation("", {
- pathname,
- search,
- hash
- }, // state defaults to `null` because `window.history.state` does
- globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || "default");
- }
- function createBrowserHref(window, to) {
- return typeof to === "string" ? to : createPath(to);
- }
- return getUrlBasedHistory(createBrowserLocation, createBrowserHref, null, options);
- }
- /**
- * Hash history stores the location in window.location.hash. This makes it ideal
- * for situations where you don't want to send the location to the server for
- * some reason, either because you do cannot configure it or the URL space is
- * reserved for something else.
- *
- * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory
- */
- function createHashHistory(options) {
- if (options === void 0) {
- options = {};
- }
- function createHashLocation(window, globalHistory) {
- let {
- pathname = "/",
- search = "",
- hash = ""
- } = parsePath(window.location.hash.substr(1));
- return createLocation("", {
- pathname,
- search,
- hash
- }, // state defaults to `null` because `window.history.state` does
- globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || "default");
- }
- function createHashHref(window, to) {
- let base = window.document.querySelector("base");
- let href = "";
- if (base && base.getAttribute("href")) {
- let url = window.location.href;
- let hashIndex = url.indexOf("#");
- href = hashIndex === -1 ? url : url.slice(0, hashIndex);
- }
- return href + "#" + (typeof to === "string" ? to : createPath(to));
- }
- function validateHashLocation(location, to) {
- warning$1(location.pathname.charAt(0) === "/", "relative pathnames are not supported in hash history.push(" + JSON.stringify(to) + ")");
- }
- return getUrlBasedHistory(createHashLocation, createHashHref, validateHashLocation, options);
- } //#endregion
- ////////////////////////////////////////////////////////////////////////////////
- //#region UTILS
- ////////////////////////////////////////////////////////////////////////////////
- function warning$1(cond, message) {
- if (!cond) {
- // eslint-disable-next-line no-console
- if (typeof console !== "undefined") console.warn(message);
- try {
- // Welcome to debugging history!
- //
- // This error is thrown as a convenience so you can more easily
- // find the source for a warning that appears in the console by
- // enabling "pause on exceptions" in your JavaScript debugger.
- throw new Error(message); // eslint-disable-next-line no-empty
- } catch (e) {}
- }
- }
- function createKey() {
- return Math.random().toString(36).substr(2, 8);
- }
- /**
- * For browser-based histories, we combine the state and key into an object
- */
- function getHistoryState(location) {
- return {
- usr: location.state,
- key: location.key
- };
- }
- /**
- * Creates a Location object with a unique key from the given Path
- */
- function createLocation(current, to, state, key) {
- if (state === void 0) {
- state = null;
- }
- let location = _extends({
- pathname: typeof current === "string" ? current : current.pathname,
- search: "",
- hash: ""
- }, typeof to === "string" ? parsePath(to) : to, {
- state,
- // TODO: This could be cleaned up. push/replace should probably just take
- // full Locations now and avoid the need to run through this flow at all
- // But that's a pretty big refactor to the current test suite so going to
- // keep as is for the time being and just let any incoming keys take precedence
- key: to && to.key || key || createKey()
- });
- return location;
- }
- /**
- * Creates a string URL path from the given pathname, search, and hash components.
- */
- function createPath(_ref) {
- let {
- pathname = "/",
- search = "",
- hash = ""
- } = _ref;
- if (search && search !== "?") pathname += search.charAt(0) === "?" ? search : "?" + search;
- if (hash && hash !== "#") pathname += hash.charAt(0) === "#" ? hash : "#" + hash;
- return pathname;
- }
- /**
- * Parses a string URL path into its separate pathname, search, and hash components.
- */
- function parsePath(path) {
- let parsedPath = {};
- if (path) {
- let hashIndex = path.indexOf("#");
- if (hashIndex >= 0) {
- parsedPath.hash = path.substr(hashIndex);
- path = path.substr(0, hashIndex);
- }
- let searchIndex = path.indexOf("?");
- if (searchIndex >= 0) {
- parsedPath.search = path.substr(searchIndex);
- path = path.substr(0, searchIndex);
- }
- if (path) {
- parsedPath.pathname = path;
- }
- }
- return parsedPath;
- }
- function createURL(location) {
- // window.location.origin is "null" (the literal string value) in Firefox
- // under certain conditions, notably when serving from a local HTML file
- // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297
- let base = typeof window !== "undefined" && typeof window.location !== "undefined" && window.location.origin !== "null" ? window.location.origin : "unknown://unknown";
- let href = typeof location === "string" ? location : createPath(location);
- return new URL(href, base);
- }
- function getUrlBasedHistory(getLocation, createHref, validateLocation, options) {
- if (options === void 0) {
- options = {};
- }
- let {
- window = document.defaultView,
- v5Compat = false
- } = options;
- let globalHistory = window.history;
- let action = Action.Pop;
- let listener = null;
- function handlePop() {
- action = Action.Pop;
- if (listener) {
- listener({
- action,
- location: history.location
- });
- }
- }
- function push(to, state) {
- action = Action.Push;
- let location = createLocation(history.location, to, state);
- if (validateLocation) validateLocation(location, to);
- let historyState = getHistoryState(location);
- let url = history.createHref(location); // try...catch because iOS limits us to 100 pushState calls :/
- try {
- globalHistory.pushState(historyState, "", url);
- } catch (error) {
- // They are going to lose state here, but there is no real
- // way to warn them about it since the page will refresh...
- window.location.assign(url);
- }
- if (v5Compat && listener) {
- listener({
- action,
- location: history.location
- });
- }
- }
- function replace(to, state) {
- action = Action.Replace;
- let location = createLocation(history.location, to, state);
- if (validateLocation) validateLocation(location, to);
- let historyState = getHistoryState(location);
- let url = history.createHref(location);
- globalHistory.replaceState(historyState, "", url);
- if (v5Compat && listener) {
- listener({
- action,
- location: history.location
- });
- }
- }
- let history = {
- get action() {
- return action;
- },
- get location() {
- return getLocation(window, globalHistory);
- },
- listen(fn) {
- if (listener) {
- throw new Error("A history only accepts one active listener");
- }
- window.addEventListener(PopStateEventType, handlePop);
- listener = fn;
- return () => {
- window.removeEventListener(PopStateEventType, handlePop);
- listener = null;
- };
- },
- createHref(to) {
- return createHref(window, to);
- },
- encodeLocation(location) {
- // Encode a Location the same way window.location would
- let url = createURL(createPath(location));
- return _extends({}, location, {
- pathname: url.pathname,
- search: url.search,
- hash: url.hash
- });
- },
- push,
- replace,
- go(n) {
- return globalHistory.go(n);
- }
- };
- return history;
- } //#endregion
- var ResultType;
- (function (ResultType) {
- ResultType["data"] = "data";
- ResultType["deferred"] = "deferred";
- ResultType["redirect"] = "redirect";
- ResultType["error"] = "error";
- })(ResultType || (ResultType = {}));
- function isIndexRoute(route) {
- return route.index === true;
- } // Walk the route tree generating unique IDs where necessary so we are working
- // solely with AgnosticDataRouteObject's within the Router
- function convertRoutesToDataRoutes(routes, parentPath, allIds) {
- if (parentPath === void 0) {
- parentPath = [];
- }
- if (allIds === void 0) {
- allIds = new Set();
- }
- return routes.map((route, index) => {
- let treePath = [...parentPath, index];
- let id = typeof route.id === "string" ? route.id : treePath.join("-");
- invariant(route.index !== true || !route.children, "Cannot specify children on an index route");
- invariant(!allIds.has(id), "Found a route id collision on id \"" + id + "\". Route " + "id's must be globally unique within Data Router usages");
- allIds.add(id);
- if (isIndexRoute(route)) {
- let indexRoute = _extends({}, route, {
- id
- });
- return indexRoute;
- } else {
- let pathOrLayoutRoute = _extends({}, route, {
- id,
- children: route.children ? convertRoutesToDataRoutes(route.children, treePath, allIds) : undefined
- });
- return pathOrLayoutRoute;
- }
- });
- }
- /**
- * Matches the given routes to a location and returns the match data.
- *
- * @see https://reactrouter.com/docs/en/v6/utils/match-routes
- */
- function matchRoutes(routes, locationArg, basename) {
- if (basename === void 0) {
- basename = "/";
- }
- let location = typeof locationArg === "string" ? parsePath(locationArg) : locationArg;
- let pathname = stripBasename(location.pathname || "/", basename);
- if (pathname == null) {
- return null;
- }
- let branches = flattenRoutes(routes);
- rankRouteBranches(branches);
- let matches = null;
- for (let i = 0; matches == null && i < branches.length; ++i) {
- matches = matchRouteBranch(branches[i], // Incoming pathnames are generally encoded from either window.location
- // or from router.navigate, but we want to match against the unencoded
- // paths in the route definitions. Memory router locations won't be
- // encoded here but there also shouldn't be anything to decode so this
- // should be a safe operation. This avoids needing matchRoutes to be
- // history-aware.
- safelyDecodeURI(pathname));
- }
- return matches;
- }
- function flattenRoutes(routes, branches, parentsMeta, parentPath) {
- if (branches === void 0) {
- branches = [];
- }
- if (parentsMeta === void 0) {
- parentsMeta = [];
- }
- if (parentPath === void 0) {
- parentPath = "";
- }
- routes.forEach((route, index) => {
- let meta = {
- relativePath: route.path || "",
- caseSensitive: route.caseSensitive === true,
- childrenIndex: index,
- route
- };
- if (meta.relativePath.startsWith("/")) {
- invariant(meta.relativePath.startsWith(parentPath), "Absolute route path \"" + meta.relativePath + "\" nested under path " + ("\"" + parentPath + "\" is not valid. An absolute child route path ") + "must start with the combined path of all its parent routes.");
- meta.relativePath = meta.relativePath.slice(parentPath.length);
- }
- let path = joinPaths([parentPath, meta.relativePath]);
- let routesMeta = parentsMeta.concat(meta); // Add the children before adding this route to the array so we traverse the
- // route tree depth-first and child routes appear before their parents in
- // the "flattened" version.
- if (route.children && route.children.length > 0) {
- invariant( // Our types know better, but runtime JS may not!
- // @ts-expect-error
- route.index !== true, "Index routes must not have child routes. Please remove " + ("all child routes from route path \"" + path + "\"."));
- flattenRoutes(route.children, branches, routesMeta, path);
- } // Routes without a path shouldn't ever match by themselves unless they are
- // index routes, so don't add them to the list of possible branches.
- if (route.path == null && !route.index) {
- return;
- }
- branches.push({
- path,
- score: computeScore(path, route.index),
- routesMeta
- });
- });
- return branches;
- }
- function rankRouteBranches(branches) {
- branches.sort((a, b) => a.score !== b.score ? b.score - a.score // Higher score first
- : compareIndexes(a.routesMeta.map(meta => meta.childrenIndex), b.routesMeta.map(meta => meta.childrenIndex)));
- }
- const paramRe = /^:\w+$/;
- const dynamicSegmentValue = 3;
- const indexRouteValue = 2;
- const emptySegmentValue = 1;
- const staticSegmentValue = 10;
- const splatPenalty = -2;
- const isSplat = s => s === "*";
- function computeScore(path, index) {
- let segments = path.split("/");
- let initialScore = segments.length;
- if (segments.some(isSplat)) {
- initialScore += splatPenalty;
- }
- if (index) {
- initialScore += indexRouteValue;
- }
- return segments.filter(s => !isSplat(s)).reduce((score, segment) => score + (paramRe.test(segment) ? dynamicSegmentValue : segment === "" ? emptySegmentValue : staticSegmentValue), initialScore);
- }
- function compareIndexes(a, b) {
- let siblings = a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);
- return siblings ? // If two routes are siblings, we should try to match the earlier sibling
- // first. This allows people to have fine-grained control over the matching
- // behavior by simply putting routes with identical paths in the order they
- // want them tried.
- a[a.length - 1] - b[b.length - 1] : // Otherwise, it doesn't really make sense to rank non-siblings by index,
- // so they sort equally.
- 0;
- }
- function matchRouteBranch(branch, pathname) {
- let {
- routesMeta
- } = branch;
- let matchedParams = {};
- let matchedPathname = "/";
- let matches = [];
- for (let i = 0; i < routesMeta.length; ++i) {
- let meta = routesMeta[i];
- let end = i === routesMeta.length - 1;
- let remainingPathname = matchedPathname === "/" ? pathname : pathname.slice(matchedPathname.length) || "/";
- let match = matchPath({
- path: meta.relativePath,
- caseSensitive: meta.caseSensitive,
- end
- }, remainingPathname);
- if (!match) return null;
- Object.assign(matchedParams, match.params);
- let route = meta.route;
- matches.push({
- // TODO: Can this as be avoided?
- params: matchedParams,
- pathname: joinPaths([matchedPathname, match.pathname]),
- pathnameBase: normalizePathname(joinPaths([matchedPathname, match.pathnameBase])),
- route
- });
- if (match.pathnameBase !== "/") {
- matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);
- }
- }
- return matches;
- }
- /**
- * Returns a path with params interpolated.
- *
- * @see https://reactrouter.com/docs/en/v6/utils/generate-path
- */
- function generatePath(path, params) {
- if (params === void 0) {
- params = {};
- }
- return path.replace(/:(\w+)/g, (_, key) => {
- invariant(params[key] != null, "Missing \":" + key + "\" param");
- return params[key];
- }).replace(/(\/?)\*/, (_, prefix, __, str) => {
- const star = "*";
- if (params[star] == null) {
- // If no splat was provided, trim the trailing slash _unless_ it's
- // the entire path
- return str === "/*" ? "/" : "";
- } // Apply the splat
- return "" + prefix + params[star];
- });
- }
- /**
- * Performs pattern matching on a URL pathname and returns information about
- * the match.
- *
- * @see https://reactrouter.com/docs/en/v6/utils/match-path
- */
- function matchPath(pattern, pathname) {
- if (typeof pattern === "string") {
- pattern = {
- path: pattern,
- caseSensitive: false,
- end: true
- };
- }
- let [matcher, paramNames] = compilePath(pattern.path, pattern.caseSensitive, pattern.end);
- let match = pathname.match(matcher);
- if (!match) return null;
- let matchedPathname = match[0];
- let pathnameBase = matchedPathname.replace(/(.)\/+$/, "$1");
- let captureGroups = match.slice(1);
- let params = paramNames.reduce((memo, paramName, index) => {
- // We need to compute the pathnameBase here using the raw splat value
- // instead of using params["*"] later because it will be decoded then
- if (paramName === "*") {
- let splatValue = captureGroups[index] || "";
- pathnameBase = matchedPathname.slice(0, matchedPathname.length - splatValue.length).replace(/(.)\/+$/, "$1");
- }
- memo[paramName] = safelyDecodeURIComponent(captureGroups[index] || "", paramName);
- return memo;
- }, {});
- return {
- params,
- pathname: matchedPathname,
- pathnameBase,
- pattern
- };
- }
- function compilePath(path, caseSensitive, end) {
- if (caseSensitive === void 0) {
- caseSensitive = false;
- }
- if (end === void 0) {
- end = true;
- }
- warning(path === "*" || !path.endsWith("*") || path.endsWith("/*"), "Route path \"" + path + "\" will be treated as if it were " + ("\"" + path.replace(/\*$/, "/*") + "\" because the `*` character must ") + "always follow a `/` in the pattern. To get rid of this warning, " + ("please change the route path to \"" + path.replace(/\*$/, "/*") + "\"."));
- let paramNames = [];
- let regexpSource = "^" + path.replace(/\/*\*?$/, "") // Ignore trailing / and /*, we'll handle it below
- .replace(/^\/*/, "/") // Make sure it has a leading /
- .replace(/[\\.*+^$?{}|()[\]]/g, "\\$&") // Escape special regex chars
- .replace(/:(\w+)/g, (_, paramName) => {
- paramNames.push(paramName);
- return "([^\\/]+)";
- });
- if (path.endsWith("*")) {
- paramNames.push("*");
- regexpSource += path === "*" || path === "/*" ? "(.*)$" // Already matched the initial /, just match the rest
- : "(?:\\/(.+)|\\/*)$"; // Don't include the / in params["*"]
- } else if (end) {
- // When matching to the end, ignore trailing slashes
- regexpSource += "\\/*$";
- } else if (path !== "" && path !== "/") {
- // If our path is non-empty and contains anything beyond an initial slash,
- // then we have _some_ form of path in our regex so we should expect to
- // match only if we find the end of this path segment. Look for an optional
- // non-captured trailing slash (to match a portion of the URL) or the end
- // of the path (if we've matched to the end). We used to do this with a
- // word boundary but that gives false positives on routes like
- // /user-preferences since `-` counts as a word boundary.
- regexpSource += "(?:(?=\\/|$))";
- } else ;
- let matcher = new RegExp(regexpSource, caseSensitive ? undefined : "i");
- return [matcher, paramNames];
- }
- function safelyDecodeURI(value) {
- try {
- return decodeURI(value);
- } catch (error) {
- warning(false, "The URL path \"" + value + "\" could not be decoded because it is is a " + "malformed URL segment. This is probably due to a bad percent " + ("encoding (" + error + ")."));
- return value;
- }
- }
- function safelyDecodeURIComponent(value, paramName) {
- try {
- return decodeURIComponent(value);
- } catch (error) {
- warning(false, "The value for the URL param \"" + paramName + "\" will not be decoded because" + (" the string \"" + value + "\" is a malformed URL segment. This is probably") + (" due to a bad percent encoding (" + error + ")."));
- return value;
- }
- }
- /**
- * @private
- */
- function stripBasename(pathname, basename) {
- if (basename === "/") return pathname;
- if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {
- return null;
- } // We want to leave trailing slash behavior in the user's control, so if they
- // specify a basename with a trailing slash, we should support it
- let startIndex = basename.endsWith("/") ? basename.length - 1 : basename.length;
- let nextChar = pathname.charAt(startIndex);
- if (nextChar && nextChar !== "/") {
- // pathname does not start with basename/
- return null;
- }
- return pathname.slice(startIndex) || "/";
- }
- function invariant(value, message) {
- if (value === false || value === null || typeof value === "undefined") {
- throw new Error(message);
- }
- }
- /**
- * @private
- */
- function warning(cond, message) {
- if (!cond) {
- // eslint-disable-next-line no-console
- if (typeof console !== "undefined") console.warn(message);
- try {
- // Welcome to debugging React Router!
- //
- // This error is thrown as a convenience so you can more easily
- // find the source for a warning that appears in the console by
- // enabling "pause on exceptions" in your JavaScript debugger.
- throw new Error(message); // eslint-disable-next-line no-empty
- } catch (e) {}
- }
- }
- /**
- * Returns a resolved path object relative to the given pathname.
- *
- * @see https://reactrouter.com/docs/en/v6/utils/resolve-path
- */
- function resolvePath(to, fromPathname) {
- if (fromPathname === void 0) {
- fromPathname = "/";
- }
- let {
- pathname: toPathname,
- search = "",
- hash = ""
- } = typeof to === "string" ? parsePath(to) : to;
- let pathname = toPathname ? toPathname.startsWith("/") ? toPathname : resolvePathname(toPathname, fromPathname) : fromPathname;
- return {
- pathname,
- search: normalizeSearch(search),
- hash: normalizeHash(hash)
- };
- }
- function resolvePathname(relativePath, fromPathname) {
- let segments = fromPathname.replace(/\/+$/, "").split("/");
- let relativeSegments = relativePath.split("/");
- relativeSegments.forEach(segment => {
- if (segment === "..") {
- // Keep the root "" segment so the pathname starts at /
- if (segments.length > 1) segments.pop();
- } else if (segment !== ".") {
- segments.push(segment);
- }
- });
- return segments.length > 1 ? segments.join("/") : "/";
- }
- function getInvalidPathError(char, field, dest, path) {
- return "Cannot include a '" + char + "' character in a manually specified " + ("`to." + field + "` field [" + JSON.stringify(path) + "]. Please separate it out to the ") + ("`to." + dest + "` field. Alternatively you may provide the full path as ") + "a string in <Link to=\"...\"> and the router will parse it for you.";
- }
- /**
- * @private
- *
- * When processing relative navigation we want to ignore ancestor routes that
- * do not contribute to the path, such that index/pathless layout routes don't
- * interfere.
- *
- * For example, when moving a route element into an index route and/or a
- * pathless layout route, relative link behavior contained within should stay
- * the same. Both of the following examples should link back to the root:
- *
- * <Route path="/">
- * <Route path="accounts" element={<Link to=".."}>
- * </Route>
- *
- * <Route path="/">
- * <Route path="accounts">
- * <Route element={<AccountsLayout />}> // <-- Does not contribute
- * <Route index element={<Link to=".."} /> // <-- Does not contribute
- * </Route
- * </Route>
- * </Route>
- */
- function getPathContributingMatches(matches) {
- return matches.filter((match, index) => index === 0 || match.route.path && match.route.path.length > 0);
- }
- /**
- * @private
- */
- function resolveTo(toArg, routePathnames, locationPathname, isPathRelative) {
- if (isPathRelative === void 0) {
- isPathRelative = false;
- }
- let to;
- if (typeof toArg === "string") {
- to = parsePath(toArg);
- } else {
- to = _extends({}, toArg);
- invariant(!to.pathname || !to.pathname.includes("?"), getInvalidPathError("?", "pathname", "search", to));
- invariant(!to.pathname || !to.pathname.includes("#"), getInvalidPathError("#", "pathname", "hash", to));
- invariant(!to.search || !to.search.includes("#"), getInvalidPathError("#", "search", "hash", to));
- }
- let isEmptyPath = toArg === "" || to.pathname === "";
- let toPathname = isEmptyPath ? "/" : to.pathname;
- let from; // Routing is relative to the current pathname if explicitly requested.
- //
- // If a pathname is explicitly provided in `to`, it should be relative to the
- // route context. This is explained in `Note on `<Link to>` values` in our
- // migration guide from v5 as a means of disambiguation between `to` values
- // that begin with `/` and those that do not. However, this is problematic for
- // `to` values that do not provide a pathname. `to` can simply be a search or
- // hash string, in which case we should assume that the navigation is relative
- // to the current location's pathname and *not* the route pathname.
- if (isPathRelative || toPathname == null) {
- from = locationPathname;
- } else {
- let routePathnameIndex = routePathnames.length - 1;
- if (toPathname.startsWith("..")) {
- let toSegments = toPathname.split("/"); // Each leading .. segment means "go up one route" instead of "go up one
- // URL segment". This is a key difference from how <a href> works and a
- // major reason we call this a "to" value instead of a "href".
- while (toSegments[0] === "..") {
- toSegments.shift();
- routePathnameIndex -= 1;
- }
- to.pathname = toSegments.join("/");
- } // If there are more ".." segments than parent routes, resolve relative to
- // the root / URL.
- from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : "/";
- }
- let path = resolvePath(to, from); // Ensure the pathname has a trailing slash if the original "to" had one
- let hasExplicitTrailingSlash = toPathname && toPathname !== "/" && toPathname.endsWith("/"); // Or if this was a link to the current path which has a trailing slash
- let hasCurrentTrailingSlash = (isEmptyPath || toPathname === ".") && locationPathname.endsWith("/");
- if (!path.pathname.endsWith("/") && (hasExplicitTrailingSlash || hasCurrentTrailingSlash)) {
- path.pathname += "/";
- }
- return path;
- }
- /**
- * @private
- */
- function getToPathname(to) {
- // Empty strings should be treated the same as / paths
- return to === "" || to.pathname === "" ? "/" : typeof to === "string" ? parsePath(to).pathname : to.pathname;
- }
- /**
- * @private
- */
- const joinPaths = paths => paths.join("/").replace(/\/\/+/g, "/");
- /**
- * @private
- */
- const normalizePathname = pathname => pathname.replace(/\/+$/, "").replace(/^\/*/, "/");
- /**
- * @private
- */
- const normalizeSearch = search => !search || search === "?" ? "" : search.startsWith("?") ? search : "?" + search;
- /**
- * @private
- */
- const normalizeHash = hash => !hash || hash === "#" ? "" : hash.startsWith("#") ? hash : "#" + hash;
- /**
- * This is a shortcut for creating `application/json` responses. Converts `data`
- * to JSON and sets the `Content-Type` header.
- */
- const json = function json(data, init) {
- if (init === void 0) {
- init = {};
- }
- let responseInit = typeof init === "number" ? {
- status: init
- } : init;
- let headers = new Headers(responseInit.headers);
- if (!headers.has("Content-Type")) {
- headers.set("Content-Type", "application/json; charset=utf-8");
- }
- return new Response(JSON.stringify(data), _extends({}, responseInit, {
- headers
- }));
- };
- class AbortedDeferredError extends Error {}
- class DeferredData {
- constructor(data) {
- this.pendingKeys = new Set();
- this.subscriber = undefined;
- invariant(data && typeof data === "object" && !Array.isArray(data), "defer() only accepts plain objects"); // Set up an AbortController + Promise we can race against to exit early
- // cancellation
- let reject;
- this.abortPromise = new Promise((_, r) => reject = r);
- this.controller = new AbortController();
- let onAbort = () => reject(new AbortedDeferredError("Deferred data aborted"));
- this.unlistenAbortSignal = () => this.controller.signal.removeEventListener("abort", onAbort);
- this.controller.signal.addEventListener("abort", onAbort);
- this.data = Object.entries(data).reduce((acc, _ref) => {
- let [key, value] = _ref;
- return Object.assign(acc, {
- [key]: this.trackPromise(key, value)
- });
- }, {});
- }
- trackPromise(key, value) {
- if (!(value instanceof Promise)) {
- return value;
- }
- this.pendingKeys.add(key); // We store a little wrapper promise that will be extended with
- // _data/_error props upon resolve/reject
- let promise = Promise.race([value, this.abortPromise]).then(data => this.onSettle(promise, key, null, data), error => this.onSettle(promise, key, error)); // Register rejection listeners to avoid uncaught promise rejections on
- // errors or aborted deferred values
- promise.catch(() => {});
- Object.defineProperty(promise, "_tracked", {
- get: () => true
- });
- return promise;
- }
- onSettle(promise, key, error, data) {
- if (this.controller.signal.aborted && error instanceof AbortedDeferredError) {
- this.unlistenAbortSignal();
- Object.defineProperty(promise, "_error", {
- get: () => error
- });
- return Promise.reject(error);
- }
- this.pendingKeys.delete(key);
- if (this.done) {
- // Nothing left to abort!
- this.unlistenAbortSignal();
- }
- const subscriber = this.subscriber;
- if (error) {
- Object.defineProperty(promise, "_error", {
- get: () => error
- });
- subscriber && subscriber(false);
- return Promise.reject(error);
- }
- Object.defineProperty(promise, "_data", {
- get: () => data
- });
- subscriber && subscriber(false);
- return data;
- }
- subscribe(fn) {
- this.subscriber = fn;
- }
- cancel() {
- this.controller.abort();
- this.pendingKeys.forEach((v, k) => this.pendingKeys.delete(k));
- let subscriber = this.subscriber;
- subscriber && subscriber(true);
- }
- async resolveData(signal) {
- let aborted = false;
- if (!this.done) {
- let onAbort = () => this.cancel();
- signal.addEventListener("abort", onAbort);
- aborted = await new Promise(resolve => {
- this.subscribe(aborted => {
- signal.removeEventListener("abort", onAbort);
- if (aborted || this.done) {
- resolve(aborted);
- }
- });
- });
- }
- return aborted;
- }
- get done() {
- return this.pendingKeys.size === 0;
- }
- get unwrappedData() {
- invariant(this.data !== null && this.done, "Can only unwrap data on initialized and settled deferreds");
- return Object.entries(this.data).reduce((acc, _ref2) => {
- let [key, value] = _ref2;
- return Object.assign(acc, {
- [key]: unwrapTrackedPromise(value)
- });
- }, {});
- }
- }
- function isTrackedPromise(value) {
- return value instanceof Promise && value._tracked === true;
- }
- function unwrapTrackedPromise(value) {
- if (!isTrackedPromise(value)) {
- return value;
- }
- if (value._error) {
- throw value._error;
- }
- return value._data;
- }
- function defer(data) {
- return new DeferredData(data);
- }
- /**
- * A redirect response. Sets the status code and the `Location` header.
- * Defaults to "302 Found".
- */
- const redirect = function redirect(url, init) {
- if (init === void 0) {
- init = 302;
- }
- let responseInit = init;
- if (typeof responseInit === "number") {
- responseInit = {
- status: responseInit
- };
- } else if (typeof responseInit.status === "undefined") {
- responseInit.status = 302;
- }
- let headers = new Headers(responseInit.headers);
- headers.set("Location", url);
- return new Response(null, _extends({}, responseInit, {
- headers
- }));
- };
- /**
- * @private
- * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies
- */
- class ErrorResponse {
- constructor(status, statusText, data) {
- this.status = status;
- this.statusText = statusText || "";
- this.data = data;
- }
- }
- /**
- * Check if the given error is an ErrorResponse generated from a 4xx/5xx
- * Response throw from an action/loader
- */
- function isRouteErrorResponse(e) {
- return e instanceof ErrorResponse;
- }
- const IDLE_NAVIGATION = {
- state: "idle",
- location: undefined,
- formMethod: undefined,
- formAction: undefined,
- formEncType: undefined,
- formData: undefined
- };
- const IDLE_FETCHER = {
- state: "idle",
- data: undefined,
- formMethod: undefined,
- formAction: undefined,
- formEncType: undefined,
- formData: undefined
- };
- const isBrowser = typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined";
- const isServer = !isBrowser; //#endregion
- ////////////////////////////////////////////////////////////////////////////////
- //#region createRouter
- ////////////////////////////////////////////////////////////////////////////////
- /**
- * Create a router and listen to history POP navigations
- */
- function createRouter(init) {
- invariant(init.routes.length > 0, "You must provide a non-empty routes array to createRouter");
- let dataRoutes = convertRoutesToDataRoutes(init.routes); // Cleanup function for history
- let unlistenHistory = null; // Externally-provided functions to call on all state changes
- let subscribers = new Set(); // Externally-provided object to hold scroll restoration locations during routing
- let savedScrollPositions = null; // Externally-provided function to get scroll restoration keys
- let getScrollRestorationKey = null; // Externally-provided function to get current scroll position
- let getScrollPosition = null; // One-time flag to control the initial hydration scroll restoration. Because
- // we don't get the saved positions from <ScrollRestoration /> until _after_
- // the initial render, we need to manually trigger a separate updateState to
- // send along the restoreScrollPosition
- let initialScrollRestored = false;
- let initialMatches = matchRoutes(dataRoutes, init.history.location, init.basename);
- let initialErrors = null;
- if (initialMatches == null) {
- // If we do not match a user-provided-route, fall back to the root
- // to allow the error boundary to take over
- let {
- matches,
- route,
- error
- } = getNotFoundMatches(dataRoutes);
- initialMatches = matches;
- initialErrors = {
- [route.id]: error
- };
- }
- let initialized = !initialMatches.some(m => m.route.loader) || init.hydrationData != null;
- let router;
- let state = {
- historyAction: init.history.action,
- location: init.history.location,
- matches: initialMatches,
- initialized,
- navigation: IDLE_NAVIGATION,
- restoreScrollPosition: null,
- preventScrollReset: false,
- revalidation: "idle",
- loaderData: init.hydrationData && init.hydrationData.loaderData || {},
- actionData: init.hydrationData && init.hydrationData.actionData || null,
- errors: init.hydrationData && init.hydrationData.errors || initialErrors,
- fetchers: new Map()
- }; // -- Stateful internal variables to manage navigations --
- // Current navigation in progress (to be committed in completeNavigation)
- let pendingAction = Action.Pop; // Should the current navigation prevent the scroll reset if scroll cannot
- // be restored?
- let pendingPreventScrollReset = false; // AbortController for the active navigation
- let pendingNavigationController; // We use this to avoid touching history in completeNavigation if a
- // revalidation is entirely uninterrupted
- let isUninterruptedRevalidation = false; // Use this internal flag to force revalidation of all loaders:
- // - submissions (completed or interrupted)
- // - useRevalidate()
- // - X-Remix-Revalidate (from redirect)
- let isRevalidationRequired = false; // Use this internal array to capture routes that require revalidation due
- // to a cancelled deferred on action submission
- let cancelledDeferredRoutes = []; // Use this internal array to capture fetcher loads that were cancelled by an
- // action navigation and require revalidation
- let cancelledFetcherLoads = []; // AbortControllers for any in-flight fetchers
- let fetchControllers = new Map(); // Track loads based on the order in which they started
- let incrementingLoadId = 0; // Track the outstanding pending navigation data load to be compared against
- // the globally incrementing load when a fetcher load lands after a completed
- // navigation
- let pendingNavigationLoadId = -1; // Fetchers that triggered data reloads as a result of their actions
- let fetchReloadIds = new Map(); // Fetchers that triggered redirect navigations from their actions
- let fetchRedirectIds = new Set(); // Most recent href/match for fetcher.load calls for fetchers
- let fetchLoadMatches = new Map(); // Store DeferredData instances for active route matches. When a
- // route loader returns defer() we stick one in here. Then, when a nested
- // promise resolves we update loaderData. If a new navigation starts we
- // cancel active deferreds for eliminated routes.
- let activeDeferreds = new Map(); // Initialize the router, all side effects should be kicked off from here.
- // Implemented as a Fluent API for ease of:
- // let router = createRouter(init).initialize();
- function initialize() {
- // If history informs us of a POP navigation, start the navigation but do not update
- // state. We'll update our own state once the navigation completes
- unlistenHistory = init.history.listen(_ref => {
- let {
- action: historyAction,
- location
- } = _ref;
- return startNavigation(historyAction, location);
- }); // Kick off initial data load if needed. Use Pop to avoid modifying history
- if (!state.initialized) {
- startNavigation(Action.Pop, state.location);
- }
- return router;
- } // Clean up a router and it's side effects
- function dispose() {
- if (unlistenHistory) {
- unlistenHistory();
- }
- subscribers.clear();
- pendingNavigationController && pendingNavigationController.abort();
- state.fetchers.forEach((_, key) => deleteFetcher(key));
- } // Subscribe to state updates for the router
- function subscribe(fn) {
- subscribers.add(fn);
- return () => subscribers.delete(fn);
- } // Update our state and notify the calling context of the change
- function updateState(newState) {
- state = _extends({}, state, newState);
- subscribers.forEach(subscriber => subscriber(state));
- } // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION
- // and setting state.[historyAction/location/matches] to the new route.
- // - Location is a required param
- // - Navigation will always be set to IDLE_NAVIGATION
- // - Can pass any other state in newState
- function completeNavigation(location, newState) {
- var _state$navigation$for;
- // Deduce if we're in a loading/actionReload state:
- // - We have committed actionData in the store
- // - The current navigation was a submission
- // - We're past the submitting state and into the loading state
- // - The location we've finished loading is different from the submission
- // location, indicating we redirected from the action (avoids false
- // positives for loading/submissionRedirect when actionData returned
- // on a prior submission)
- let isActionReload = state.actionData != null && state.navigation.formMethod != null && state.navigation.state === "loading" && ((_state$navigation$for = state.navigation.formAction) == null ? void 0 : _state$navigation$for.split("?")[0]) === location.pathname; // Always preserve any existing loaderData from re-used routes
- let newLoaderData = newState.loaderData ? {
- loaderData: mergeLoaderData(state.loaderData, newState.loaderData, newState.matches || [])
- } : {};
- updateState(_extends({}, isActionReload ? {} : {
- actionData: null
- }, newState, newLoaderData, {
- historyAction: pendingAction,
- location,
- initialized: true,
- navigation: IDLE_NAVIGATION,
- revalidation: "idle",
- // Don't restore on submission navigations
- restoreScrollPosition: state.navigation.formData ? false : getSavedScrollPosition(location, newState.matches || state.matches),
- preventScrollReset: pendingPreventScrollReset
- }));
- if (isUninterruptedRevalidation) ; else if (pendingAction === Action.Pop) ; else if (pendingAction === Action.Push) {
- init.history.push(location, location.state);
- } else if (pendingAction === Action.Replace) {
- init.history.replace(location, location.state);
- } // Reset stateful navigation vars
- pendingAction = Action.Pop;
- pendingPreventScrollReset = false;
- isUninterruptedRevalidation = false;
- isRevalidationRequired = false;
- cancelledDeferredRoutes = [];
- cancelledFetcherLoads = [];
- } // Trigger a navigation event, which can either be a numerical POP or a PUSH
- // replace with an optional submission
- async function navigate(to, opts) {
- if (typeof to === "number") {
- init.history.go(to);
- return;
- }
- let {
- path,
- submission,
- error
- } = normalizeNavigateOptions(to, opts);
- let location = createLocation(state.location, path, opts && opts.state); // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded
- // URL from window.location, so we need to encode it here so the behavior
- // remains the same as POP and non-data-router usages. new URL() does all
- // the same encoding we'd get from a history.pushState/window.location read
- // without having to touch history
- location = init.history.encodeLocation(location);
- let historyAction = (opts && opts.replace) === true || submission != null ? Action.Replace : Action.Push;
- let preventScrollReset = opts && "preventScrollReset" in opts ? opts.preventScrollReset === true : undefined;
- return await startNavigation(historyAction, location, {
- submission,
- // Send through the formData serialization error if we have one so we can
- // render at the right error boundary after we match routes
- pendingError: error,
- preventScrollReset,
- replace: opts && opts.replace
- });
- } // Revalidate all current loaders. If a navigation is in progress or if this
- // is interrupted by a navigation, allow this to "succeed" by calling all
- // loaders during the next loader round
- function revalidate() {
- interruptActiveLoads();
- updateState({
- revalidation: "loading"
- }); // If we're currently submitting an action, we don't need to start a new
- // navigation, we'll just let the follow up loader execution call all loaders
- if (state.navigation.state === "submitting") {
- return;
- } // If we're currently in an idle state, start a new navigation for the current
- // action/location and mark it as uninterrupted, which will skip the history
- // update in completeNavigation
- if (state.navigation.state === "idle") {
- startNavigation(state.historyAction, state.location, {
- startUninterruptedRevalidation: true
- });
- return;
- } // Otherwise, if we're currently in a loading state, just start a new
- // navigation to the navigation.location but do not trigger an uninterrupted
- // revalidation so that history correctly updates once the navigation completes
- startNavigation(pendingAction || state.historyAction, state.navigation.location, {
- overrideNavigation: state.navigation
- });
- } // Start a navigation to the given action/location. Can optionally provide a
- // overrideNavigation which will override the normalLoad in the case of a redirect
- // navigation
- async function startNavigation(historyAction, location, opts) {
- // Abort any in-progress navigations and start a new one. Unset any ongoing
- // uninterrupted revalidations unless told otherwise, since we want this
- // new navigation to update history normally
- pendingNavigationController && pendingNavigationController.abort();
- pendingNavigationController = null;
- pendingAction = historyAction;
- isUninterruptedRevalidation = (opts && opts.startUninterruptedRevalidation) === true; // Save the current scroll position every time we start a new navigation,
- // and track whether we should reset scroll on completion
- saveScrollPosition(state.location, state.matches);
- pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;
- let loadingNavigation = opts && opts.overrideNavigation;
- let matches = matchRoutes(dataRoutes, location, init.basename); // Short circuit with a 404 on the root error boundary if we match nothing
- if (!matches) {
- let {
- matches: notFoundMatches,
- route,
- error
- } = getNotFoundMatches(dataRoutes); // Cancel all pending deferred on 404s since we don't keep any routes
- cancelActiveDeferreds();
- completeNavigation(location, {
- matches: notFoundMatches,
- loaderData: {},
- errors: {
- [route.id]: error
- }
- });
- return;
- } // Short circuit if it's only a hash change
- if (isHashChangeOnly(state.location, location)) {
- completeNavigation(location, {
- matches
- });
- return;
- } // Create a controller/Request for this navigation
- pendingNavigationController = new AbortController();
- let request = createRequest(location, pendingNavigationController.signal, opts && opts.submission);
- let pendingActionData;
- let pendingError;
- if (opts && opts.pendingError) {
- // If we have a pendingError, it means the user attempted a GET submission
- // with binary FormData so assign here and skip to handleLoaders. That
- // way we handle calling loaders above the boundary etc. It's not really
- // different from an actionError in that sense.
- pendingError = {
- [findNearestBoundary(matches).route.id]: opts.pendingError
- };
- } else if (opts && opts.submission) {
- // Call action if we received an action submission
- let actionOutput = await handleAction(request, location, opts.submission, matches, {
- replace: opts.replace
- });
- if (actionOutput.shortCircuited) {
- return;
- }
- pendingActionData = actionOutput.pendingActionData;
- pendingError = actionOutput.pendingActionError;
- let navigation = _extends({
- state: "loading",
- location
- }, opts.submission);
- loadingNavigation = navigation;
- } // Call loaders
- let {
- shortCircuited,
- loaderData,
- errors
- } = await handleLoaders(request, location, matches, loadingNavigation, opts && opts.submission, opts && opts.replace, pendingActionData, pendingError);
- if (shortCircuited) {
- return;
- } // Clean up now that the action/loaders have completed. Don't clean up if
- // we short circuited because pendingNavigationController will have already
- // been assigned to a new controller for the next navigation
- pendingNavigationController = null;
- completeNavigation(location, {
- matches,
- loaderData,
- errors
- });
- } // Call the action matched by the leaf route for this navigation and handle
- // redirects/errors
- async function handleAction(request, location, submission, matches, opts) {
- interruptActiveLoads(); // Put us in a submitting state
- let navigation = _extends({
- state: "submitting",
- location
- }, submission);
- updateState({
- navigation
- }); // Call our action and get the result
- let result;
- let actionMatch = getTargetMatch(matches, location);
- if (!actionMatch.route.action) {
- result = getMethodNotAllowedResult(location);
- } else {
- result = await callLoaderOrAction("action", request, actionMatch, matches, router.basename);
- if (request.signal.aborted) {
- return {
- shortCircuited: true
- };
- }
- }
- if (isRedirectResult(result)) {
- let redirectNavigation = _extends({
- state: "loading",
- location: createLocation(state.location, result.location)
- }, submission);
- await startRedirectNavigation(result, redirectNavigation, opts && opts.replace);
- return {
- shortCircuited: true
- };
- }
- if (isErrorResult(result)) {
- // Store off the pending error - we use it to determine which loaders
- // to call and will commit it when we complete the navigation
- let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id); // By default, all submissions are REPLACE navigations, but if the
- // action threw an error that'll be rendered in an errorElement, we fall
- // back to PUSH so that the user can use the back button to get back to
- // the pre-submission form location to try again
- if ((opts && opts.replace) !== true) {
- pendingAction = Action.Push;
- }
- return {
- pendingActionError: {
- [boundaryMatch.route.id]: result.error
- }
- };
- }
- if (isDeferredResult(result)) {
- throw new Error("defer() is not supported in actions");
- }
- return {
- pendingActionData: {
- [actionMatch.route.id]: result.data
- }
- };
- } // Call all applicable loaders for the given matches, handling redirects,
- // errors, etc.
- async function handleLoaders(request, location, matches, overrideNavigation, submission, replace, pendingActionData, pendingError) {
- // Figure out the right navigation we want to use for data loading
- let loadingNavigation = overrideNavigation;
- if (!loadingNavigation) {
- let navigation = {
- state: "loading",
- location,
- formMethod: undefined,
- formAction: undefined,
- formEncType: undefined,
- formData: undefined
- };
- loadingNavigation = navigation;
- }
- let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(state, matches, submission, location, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, pendingActionData, pendingError, fetchLoadMatches); // Cancel pending deferreds for no-longer-matched routes or routes we're
- // about to reload. Note that if this is an action reload we would have
- // already cancelled all pending deferreds so this would be a no-op
- cancelActiveDeferreds(routeId => !(matches && matches.some(m => m.route.id === routeId)) || matchesToLoad && matchesToLoad.some(m => m.route.id === routeId)); // Short circuit if we have no loaders to run
- if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {
- completeNavigation(location, {
- matches,
- loaderData: mergeLoaderData(state.loaderData, {}, matches),
- // Commit pending error if we're short circuiting
- errors: pendingError || null,
- actionData: pendingActionData || null
- });
- return {
- shortCircuited: true
- };
- } // If this is an uninterrupted revalidation, we remain in our current idle
- // state. If not, we need to switch to our loading state and load data,
- // preserving any new action data or existing action data (in the case of
- // a revalidation interrupting an actionReload)
- if (!isUninterruptedRevalidation) {
- revalidatingFetchers.forEach(_ref2 => {
- let [key] = _ref2;
- let fetcher = state.fetchers.get(key);
- let revalidatingFetcher = {
- state: "loading",
- data: fetcher && fetcher.data,
- formMethod: undefined,
- formAction: undefined,
- formEncType: undefined,
- formData: undefined
- };
- state.fetchers.set(key, revalidatingFetcher);
- });
- updateState(_extends({
- navigation: loadingNavigation,
- actionData: pendingActionData || state.actionData || null
- }, revalidatingFetchers.length > 0 ? {
- fetchers: new Map(state.fetchers)
- } : {}));
- }
- pendingNavigationLoadId = ++incrementingLoadId;
- revalidatingFetchers.forEach(_ref3 => {
- let [key] = _ref3;
- return fetchControllers.set(key, pendingNavigationController);
- });
- let {
- results,
- loaderResults,
- fetcherResults
- } = await callLoadersAndMaybeResolveData(state.matches, matches, matchesToLoad, revalidatingFetchers, request);
- if (request.signal.aborted) {
- return {
- shortCircuited: true
- };
- } // Clean up _after_ loaders have completed. Don't clean up if we short
- // circuited because fetchControllers would have been aborted and
- // reassigned to new controllers for the next navigation
- revalidatingFetchers.forEach(_ref4 => {
- let [key] = _ref4;
- return fetchControllers.delete(key);
- }); // If any loaders returned a redirect Response, start a new REPLACE navigation
- let redirect = findRedirect(results);
- if (redirect) {
- let redirectNavigation = getLoaderRedirect(state, redirect);
- await startRedirectNavigation(redirect, redirectNavigation, replace);
- return {
- shortCircuited: true
- };
- } // Process and commit output from loaders
- let {
- loaderData,
- errors
- } = processLoaderData(state, matches, matchesToLoad, loaderResults, pendingError, revalidatingFetchers, fetcherResults, activeDeferreds); // Wire up subscribers to update loaderData as promises settle
- activeDeferreds.forEach((deferredData, routeId) => {
- deferredData.subscribe(aborted => {
- // Note: No need to updateState here since the TrackedPromise on
- // loaderData is stable across resolve/reject
- // Remove this instance if we were aborted or if promises have settled
- if (aborted || deferredData.done) {
- activeDeferreds.delete(routeId);
- }
- });
- });
- markFetchRedirectsDone();
- let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);
- return _extends({
- loaderData,
- errors
- }, didAbortFetchLoads || revalidatingFetchers.length > 0 ? {
- fetchers: new Map(state.fetchers)
- } : {});
- }
- function getFetcher(key) {
- return state.fetchers.get(key) || IDLE_FETCHER;
- } // Trigger a fetcher load/submit for the given fetcher key
- function fetch(key, routeId, href, opts) {
- if (isServer) {
- throw new Error("router.fetch() was called during the server render, but it shouldn't be. " + "You are likely calling a useFetcher() method in the body of your component. " + "Try moving it to a useEffect or a callback.");
- }
- if (fetchControllers.has(key)) abortFetcher(key);
- let matches = matchRoutes(dataRoutes, href, init.basename);
- if (!matches) {
- setFetcherError(key, routeId, new ErrorResponse(404, "Not Found", null));
- return;
- }
- let {
- path,
- submission
- } = normalizeNavigateOptions(href, opts, true);
- let match = getTargetMatch(matches, path);
- if (submission) {
- handleFetcherAction(key, routeId, path, match, matches, submission);
- return;
- } // Store off the match so we can call it's shouldRevalidate on subsequent
- // revalidations
- fetchLoadMatches.set(key, [path, match, matches]);
- handleFetcherLoader(key, routeId, path, match, matches);
- } // Call the action for the matched fetcher.submit(), and then handle redirects,
- // errors, and revalidation
- async function handleFetcherAction(key, routeId, path, match, requestMatches, submission) {
- interruptActiveLoads();
- fetchLoadMatches.delete(key);
- if (!match.route.action) {
- let {
- error
- } = getMethodNotAllowedResult(path);
- setFetcherError(key, routeId, error);
- return;
- } // Put this fetcher into it's submitting state
- let existingFetcher = state.fetchers.get(key);
- let fetcher = _extends({
- state: "submitting"
- }, submission, {
- data: existingFetcher && existingFetcher.data
- });
- state.fetchers.set(key, fetcher);
- updateState({
- fetchers: new Map(state.fetchers)
- }); // Call the action for the fetcher
- let abortController = new AbortController();
- let fetchRequest = createRequest(path, abortController.signal, submission);
- fetchControllers.set(key, abortController);
- let actionResult = await callLoaderOrAction("action", fetchRequest, match, requestMatches, router.basename);
- if (fetchRequest.signal.aborted) {
- // We can delete this so long as we weren't aborted by ou our own fetcher
- // re-submit which would have put _new_ controller is in fetchControllers
- if (fetchControllers.get(key) === abortController) {
- fetchControllers.delete(key);
- }
- return;
- }
- if (isRedirectResult(actionResult)) {
- fetchControllers.delete(key);
- fetchRedirectIds.add(key);
- let loadingFetcher = _extends({
- state: "loading"
- }, submission, {
- data: undefined
- });
- state.fetchers.set(key, loadingFetcher);
- updateState({
- fetchers: new Map(state.fetchers)
- });
- let redirectNavigation = _extends({
- state: "loading",
- location: createLocation(state.location, actionResult.location)
- }, submission);
- await startRedirectNavigation(actionResult, redirectNavigation);
- return;
- } // Process any non-redirect errors thrown
- if (isErrorResult(actionResult)) {
- setFetcherError(key, routeId, actionResult.error);
- return;
- }
- if (isDeferredResult(actionResult)) {
- invariant(false, "defer() is not supported in actions");
- } // Start the data load for current matches, or the next location if we're
- // in the middle of a navigation
- let nextLocation = state.navigation.location || state.location;
- let revalidationRequest = createRequest(nextLocation, abortController.signal);
- let matches = state.navigation.state !== "idle" ? matchRoutes(dataRoutes, state.navigation.location, init.basename) : state.matches;
- invariant(matches, "Didn't find any matches after fetcher action");
- let loadId = ++incrementingLoadId;
- fetchReloadIds.set(key, loadId);
- let loadFetcher = _extends({
- state: "loading",
- data: actionResult.data
- }, submission);
- state.fetchers.set(key, loadFetcher);
- let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(state, matches, submission, nextLocation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, {
- [match.route.id]: actionResult.data
- }, undefined, // No need to send through errors since we short circuit above
- fetchLoadMatches); // Put all revalidating fetchers into the loading state, except for the
- // current fetcher which we want to keep in it's current loading state which
- // contains it's action submission info + action data
- revalidatingFetchers.filter(_ref5 => {
- let [staleKey] = _ref5;
- return staleKey !== key;
- }).forEach(_ref6 => {
- let [staleKey] = _ref6;
- let existingFetcher = state.fetchers.get(staleKey);
- let revalidatingFetcher = {
- state: "loading",
- data: existingFetcher && existingFetcher.data,
- formMethod: undefined,
- formAction: undefined,
- formEncType: undefined,
- formData: undefined
- };
- state.fetchers.set(staleKey, revalidatingFetcher);
- fetchControllers.set(staleKey, abortController);
- });
- updateState({
- fetchers: new Map(state.fetchers)
- });
- let {
- results,
- loaderResults,
- fetcherResults
- } = await callLoadersAndMaybeResolveData(state.matches, matches, matchesToLoad, revalidatingFetchers, revalidationRequest);
- if (abortController.signal.aborted) {
- return;
- }
- fetchReloadIds.delete(key);
- fetchControllers.delete(key);
- revalidatingFetchers.forEach(_ref7 => {
- let [staleKey] = _ref7;
- return fetchControllers.delete(staleKey);
- });
- let redirect = findRedirect(results);
- if (redirect) {
- let redirectNavigation = getLoaderRedirect(state, redirect);
- await startRedirectNavigation(redirect, redirectNavigation);
- return;
- } // Process and commit output from loaders
- let {
- loaderData,
- errors
- } = processLoaderData(state, state.matches, matchesToLoad, loaderResults, undefined, revalidatingFetchers, fetcherResults, activeDeferreds);
- let doneFetcher = {
- state: "idle",
- data: actionResult.data,
- formMethod: undefined,
- formAction: undefined,
- formEncType: undefined,
- formData: undefined
- };
- state.fetchers.set(key, doneFetcher);
- let didAbortFetchLoads = abortStaleFetchLoads(loadId); // If we are currently in a navigation loading state and this fetcher is
- // more recent than the navigation, we want the newer data so abort the
- // navigation and complete it with the fetcher data
- if (state.navigation.state === "loading" && loadId > pendingNavigationLoadId) {
- invariant(pendingAction, "Expected pending action");
- pendingNavigationController && pendingNavigationController.abort();
- completeNavigation(state.navigation.location, {
- matches,
- loaderData,
- errors,
- fetchers: new Map(state.fetchers)
- });
- } else {
- // otherwise just update with the fetcher data, preserving any existing
- // loaderData for loaders that did not need to reload. We have to
- // manually merge here since we aren't going through completeNavigation
- updateState(_extends({
- errors,
- loaderData: mergeLoaderData(state.loaderData, loaderData, matches)
- }, didAbortFetchLoads ? {
- fetchers: new Map(state.fetchers)
- } : {}));
- isRevalidationRequired = false;
- }
- } // Call the matched loader for fetcher.load(), handling redirects, errors, etc.
- async function handleFetcherLoader(key, routeId, path, match, matches) {
- let existingFetcher = state.fetchers.get(key); // Put this fetcher into it's loading state
- let loadingFetcher = {
- state: "loading",
- formMethod: undefined,
- formAction: undefined,
- formEncType: undefined,
- formData: undefined,
- data: existingFetcher && existingFetcher.data
- };
- state.fetchers.set(key, loadingFetcher);
- updateState({
- fetchers: new Map(state.fetchers)
- }); // Call the loader for this fetcher route match
- let abortController = new AbortController();
- let fetchRequest = createRequest(path, abortController.signal);
- fetchControllers.set(key, abortController);
- let result = await callLoaderOrAction("loader", fetchRequest, match, matches, router.basename); // Deferred isn't supported or fetcher loads, await everything and treat it
- // as a normal load. resolveDeferredData will return undefined if this
- // fetcher gets aborted, so we just leave result untouched and short circuit
- // below if that happens
- if (isDeferredResult(result)) {
- result = (await resolveDeferredData(result, fetchRequest.signal, true)) || result;
- } // We can delete this so long as we weren't aborted by ou our own fetcher
- // re-load which would have put _new_ controller is in fetchControllers
- if (fetchControllers.get(key) === abortController) {
- fetchControllers.delete(key);
- }
- if (fetchRequest.signal.aborted) {
- return;
- } // If the loader threw a redirect Response, start a new REPLACE navigation
- if (isRedirectResult(result)) {
- let redirectNavigation = getLoaderRedirect(state, result);
- await startRedirectNavigation(result, redirectNavigation);
- return;
- } // Process any non-redirect errors thrown
- if (isErrorResult(result)) {
- let boundaryMatch = findNearestBoundary(state.matches, routeId);
- state.fetchers.delete(key); // TODO: In remix, this would reset to IDLE_NAVIGATION if it was a catch -
- // do we need to behave any differently with our non-redirect errors?
- // What if it was a non-redirect Response?
- updateState({
- fetchers: new Map(state.fetchers),
- errors: {
- [boundaryMatch.route.id]: result.error
- }
- });
- return;
- }
- invariant(!isDeferredResult(result), "Unhandled fetcher deferred data"); // Put the fetcher back into an idle state
- let doneFetcher = {
- state: "idle",
- data: result.data,
- formMethod: undefined,
- formAction: undefined,
- formEncType: undefined,
- formData: undefined
- };
- state.fetchers.set(key, doneFetcher);
- updateState({
- fetchers: new Map(state.fetchers)
- });
- }
- /**
- * Utility function to handle redirects returned from an action or loader.
- * Normally, a redirect "replaces" the navigation that triggered it. So, for
- * example:
- *
- * - user is on /a
- * - user clicks a link to /b
- * - loader for /b redirects to /c
- *
- * In a non-JS app the browser would track the in-flight navigation to /b and
- * then replace it with /c when it encountered the redirect response. In
- * the end it would only ever update the URL bar with /c.
- *
- * In client-side routing using pushState/replaceState, we aim to emulate
- * this behavior and we also do not update history until the end of the
- * navigation (including processed redirects). This means that we never
- * actually touch history until we've processed redirects, so we just use
- * the history action from the original navigation (PUSH or REPLACE).
- */
- async function startRedirectNavigation(redirect, navigation, replace) {
- if (redirect.revalidate) {
- isRevalidationRequired = true;
- }
- invariant(navigation.location, "Expected a location on the redirect navigation"); // There's no need to abort on redirects, since we don't detect the
- // redirect until the action/loaders have settled
- pendingNavigationController = null;
- let redirectHistoryAction = replace === true ? Action.Replace : Action.Push;
- await startNavigation(redirectHistoryAction, navigation.location, {
- overrideNavigation: navigation
- });
- }
- async function callLoadersAndMaybeResolveData(currentMatches, matches, matchesToLoad, fetchersToLoad, request) {
- // Call all navigation loaders and revalidating fetcher loaders in parallel,
- // then slice off the results into separate arrays so we can handle them
- // accordingly
- let results = await Promise.all([...matchesToLoad.map(match => callLoaderOrAction("loader", request, match, matches, router.basename)), ...fetchersToLoad.map(_ref8 => {
- let [, href, match, fetchMatches] = _ref8;
- return callLoaderOrAction("loader", createRequest(href, request.signal), match, fetchMatches, router.basename);
- })]);
- let loaderResults = results.slice(0, matchesToLoad.length);
- let fetcherResults = results.slice(matchesToLoad.length);
- await Promise.all([resolveDeferredResults(currentMatches, matchesToLoad, loaderResults, request.signal, false, state.loaderData), resolveDeferredResults(currentMatches, fetchersToLoad.map(_ref9 => {
- let [,, match] = _ref9;
- return match;
- }), fetcherResults, request.signal, true)]);
- return {
- results,
- loaderResults,
- fetcherResults
- };
- }
- function interruptActiveLoads() {
- // Every interruption triggers a revalidation
- isRevalidationRequired = true; // Cancel pending route-level deferreds and mark cancelled routes for
- // revalidation
- cancelledDeferredRoutes.push(...cancelActiveDeferreds()); // Abort in-flight fetcher loads
- fetchLoadMatches.forEach((_, key) => {
- if (fetchControllers.has(key)) {
- cancelledFetcherLoads.push(key);
- abortFetcher(key);
- }
- });
- }
- function setFetcherError(key, routeId, error) {
- let boundaryMatch = findNearestBoundary(state.matches, routeId);
- deleteFetcher(key);
- updateState({
- errors: {
- [boundaryMatch.route.id]: error
- },
- fetchers: new Map(state.fetchers)
- });
- }
- function deleteFetcher(key) {
- if (fetchControllers.has(key)) abortFetcher(key);
- fetchLoadMatches.delete(key);
- fetchReloadIds.delete(key);
- fetchRedirectIds.delete(key);
- state.fetchers.delete(key);
- }
- function abortFetcher(key) {
- let controller = fetchControllers.get(key);
- invariant(controller, "Expected fetch controller: " + key);
- controller.abort();
- fetchControllers.delete(key);
- }
- function markFetchersDone(keys) {
- for (let key of keys) {
- let fetcher = getFetcher(key);
- let doneFetcher = {
- state: "idle",
- data: fetcher.data,
- formMethod: undefined,
- formAction: undefined,
- formEncType: undefined,
- formData: undefined
- };
- state.fetchers.set(key, doneFetcher);
- }
- }
- function markFetchRedirectsDone() {
- let doneKeys = [];
- for (let key of fetchRedirectIds) {
- let fetcher = state.fetchers.get(key);
- invariant(fetcher, "Expected fetcher: " + key);
- if (fetcher.state === "loading") {
- fetchRedirectIds.delete(key);
- doneKeys.push(key);
- }
- }
- markFetchersDone(doneKeys);
- }
- function abortStaleFetchLoads(landedId) {
- let yeetedKeys = [];
- for (let [key, id] of fetchReloadIds) {
- if (id < landedId) {
- let fetcher = state.fetchers.get(key);
- invariant(fetcher, "Expected fetcher: " + key);
- if (fetcher.state === "loading") {
- abortFetcher(key);
- fetchReloadIds.delete(key);
- yeetedKeys.push(key);
- }
- }
- }
- markFetchersDone(yeetedKeys);
- return yeetedKeys.length > 0;
- }
- function cancelActiveDeferreds(predicate) {
- let cancelledRouteIds = [];
- activeDeferreds.forEach((dfd, routeId) => {
- if (!predicate || predicate(routeId)) {
- // Cancel the deferred - but do not remove from activeDeferreds here -
- // we rely on the subscribers to do that so our tests can assert proper
- // cleanup via _internalActiveDeferreds
- dfd.cancel();
- cancelledRouteIds.push(routeId);
- activeDeferreds.delete(routeId);
- }
- });
- return cancelledRouteIds;
- } // Opt in to capturing and reporting scroll positions during navigations,
- // used by the <ScrollRestoration> component
- function enableScrollRestoration(positions, getPosition, getKey) {
- savedScrollPositions = positions;
- getScrollPosition = getPosition;
- getScrollRestorationKey = getKey || (location => location.key); // Perform initial hydration scroll restoration, since we miss the boat on
- // the initial updateState() because we've not yet rendered <ScrollRestoration/>
- // and therefore have no savedScrollPositions available
- if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {
- initialScrollRestored = true;
- let y = getSavedScrollPosition(state.location, state.matches);
- if (y != null) {
- updateState({
- restoreScrollPosition: y
- });
- }
- }
- return () => {
- savedScrollPositions = null;
- getScrollPosition = null;
- getScrollRestorationKey = null;
- };
- }
- function saveScrollPosition(location, matches) {
- if (savedScrollPositions && getScrollRestorationKey && getScrollPosition) {
- let userMatches = matches.map(m => createUseMatchesMatch(m, state.loaderData));
- let key = getScrollRestorationKey(location, userMatches) || location.key;
- savedScrollPositions[key] = getScrollPosition();
- }
- }
- function getSavedScrollPosition(location, matches) {
- if (savedScrollPositions && getScrollRestorationKey && getScrollPosition) {
- let userMatches = matches.map(m => createUseMatchesMatch(m, state.loaderData));
- let key = getScrollRestorationKey(location, userMatches) || location.key;
- let y = savedScrollPositions[key];
- if (typeof y === "number") {
- return y;
- }
- }
- return null;
- }
- router = {
- get basename() {
- return init.basename;
- },
- get state() {
- return state;
- },
- get routes() {
- return dataRoutes;
- },
- initialize,
- subscribe,
- enableScrollRestoration,
- navigate,
- fetch,
- revalidate,
- // Passthrough to history-aware createHref used by useHref so we get proper
- // hash-aware URLs in DOM paths
- createHref: to => init.history.createHref(to),
- getFetcher,
- deleteFetcher,
- dispose,
- _internalFetchControllers: fetchControllers,
- _internalActiveDeferreds: activeDeferreds
- };
- return router;
- } //#endregion
- ////////////////////////////////////////////////////////////////////////////////
- //#region createStaticHandler
- ////////////////////////////////////////////////////////////////////////////////
- const validActionMethods = new Set(["POST", "PUT", "PATCH", "DELETE"]);
- const validRequestMethods = new Set(["GET", "HEAD", ...validActionMethods]);
- function unstable_createStaticHandler(routes) {
- invariant(routes.length > 0, "You must provide a non-empty routes array to unstable_createStaticHandler");
- let dataRoutes = convertRoutesToDataRoutes(routes);
- /**
- * The query() method is intended for document requests, in which we want to
- * call an optional action and potentially multiple loaders for all nested
- * routes. It returns a StaticHandlerContext object, which is very similar
- * to the router state (location, loaderData, actionData, errors, etc.) and
- * also adds SSR-specific information such as the statusCode and headers
- * from action/loaders Responses.
- *
- * It _should_ never throw and should report all errors through the
- * returned context.errors object, properly associating errors to their error
- * boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be
- * used to emulate React error boundaries during SSr by performing a second
- * pass only down to the boundaryId.
- *
- * The one exception where we do not return a StaticHandlerContext is when a
- * redirect response is returned or thrown from any action/loader. We
- * propagate that out and return the raw Response so the HTTP server can
- * return it directly.
- */
- async function query(request) {
- let url = new URL(request.url);
- let location = createLocation("", createPath(url), null, "default");
- let matches = matchRoutes(dataRoutes, location);
- if (!validRequestMethods.has(request.method)) {
- let {
- matches: methodNotAllowedMatches,
- route,
- error
- } = getMethodNotAllowedMatches(dataRoutes);
- return {
- location,
- matches: methodNotAllowedMatches,
- loaderData: {},
- actionData: null,
- errors: {
- [route.id]: error
- },
- statusCode: error.status,
- loaderHeaders: {},
- actionHeaders: {}
- };
- } else if (!matches) {
- let {
- matches: notFoundMatches,
- route,
- error
- } = getNotFoundMatches(dataRoutes);
- return {
- location,
- matches: notFoundMatches,
- loaderData: {},
- actionData: null,
- errors: {
- [route.id]: error
- },
- statusCode: error.status,
- loaderHeaders: {},
- actionHeaders: {}
- };
- }
- let result = await queryImpl(request, location, matches);
- if (result instanceof Response) {
- return result;
- } // When returning StaticHandlerContext, we patch back in the location here
- // since we need it for React Context. But this helps keep our submit and
- // loadRouteData operating on a Request instead of a Location
- return _extends({
- location
- }, result);
- }
- /**
- * The queryRoute() method is intended for targeted route requests, either
- * for fetch ?_data requests or resource route requests. In this case, we
- * are only ever calling a single action or loader, and we are returning the
- * returned value directly. In most cases, this will be a Response returned
- * from the action/loader, but it may be a primitive or other value as well -
- * and in such cases the calling context should handle that accordingly.
- *
- * We do respect the throw/return differentiation, so if an action/loader
- * throws, then this method will throw the value. This is important so we
- * can do proper boundary identification in Remix where a thrown Response
- * must go to the Catch Boundary but a returned Response is happy-path.
- *
- * One thing to note is that any Router-initiated thrown Response (such as a
- * 404 or 405) will have a custom X-Remix-Router-Error: "yes" header on it
- * in order to differentiate from responses thrown from user actions/loaders.
- */
- async function queryRoute(request, routeId) {
- let url = new URL(request.url);
- let location = createLocation("", createPath(url), null, "default");
- let matches = matchRoutes(dataRoutes, location);
- if (!validRequestMethods.has(request.method)) {
- throw createRouterErrorResponse(null, {
- status: 405,
- statusText: "Method Not Allowed"
- });
- } else if (!matches) {
- throw createRouterErrorResponse(null, {
- status: 404,
- statusText: "Not Found"
- });
- }
- let match = routeId ? matches.find(m => m.route.id === routeId) : getTargetMatch(matches, location);
- if (!match) {
- throw createRouterErrorResponse(null, {
- status: 404,
- statusText: "Not Found"
- });
- }
- let result = await queryImpl(request, location, matches, match);
- if (result instanceof Response) {
- return result;
- }
- let error = result.errors ? Object.values(result.errors)[0] : undefined;
- if (error !== undefined) {
- // If we got back result.errors, that means the loader/action threw
- // _something_ that wasn't a Response, but it's not guaranteed/required
- // to be an `instanceof Error` either, so we have to use throw here to
- // preserve the "error" state outside of queryImpl.
- throw error;
- } // Pick off the right state value to return
- let routeData = [result.actionData, result.loaderData].find(v => v);
- return Object.values(routeData || {})[0];
- }
- async function queryImpl(request, location, matches, routeMatch) {
- invariant(request.signal, "query()/queryRoute() requests must contain an AbortController signal");
- try {
- if (validActionMethods.has(request.method)) {
- let result = await submit(request, matches, routeMatch || getTargetMatch(matches, location), routeMatch != null);
- return result;
- }
- let result = await loadRouteData(request, matches, routeMatch);
- return result instanceof Response ? result : _extends({}, result, {
- actionData: null,
- actionHeaders: {}
- });
- } catch (e) {
- // If the user threw/returned a Response in callLoaderOrAction, we throw
- // it to bail out and then return or throw here based on whether the user
- // returned or threw
- if (isQueryRouteResponse(e)) {
- if (e.type === ResultType.error && !isRedirectResponse(e.response)) {
- throw e.response;
- }
- return e.response;
- } // Redirects are always returned since they don't propagate to catch
- // boundaries
- if (isRedirectResponse(e)) {
- return e;
- }
- throw e;
- }
- }
- async function submit(request, matches, actionMatch, isRouteRequest) {
- let result;
- if (!actionMatch.route.action) {
- if (isRouteRequest) {
- throw createRouterErrorResponse(null, {
- status: 405,
- statusText: "Method Not Allowed"
- });
- }
- result = getMethodNotAllowedResult(request.url);
- } else {
- result = await callLoaderOrAction("action", request, actionMatch, matches, undefined, // Basename not currently supported in static handlers
- true, isRouteRequest);
- if (request.signal.aborted) {
- let method = isRouteRequest ? "queryRoute" : "query";
- throw new Error(method + "() call aborted");
- }
- }
- if (isRedirectResult(result)) {
- // Uhhhh - this should never happen, we should always throw these from
- // callLoaderOrAction, but the type narrowing here keeps TS happy and we
- // can get back on the "throw all redirect responses" train here should
- // this ever happen :/
- throw new Response(null, {
- status: result.status,
- headers: {
- Location: result.location
- }
- });
- }
- if (isDeferredResult(result)) {
- throw new Error("defer() is not supported in actions");
- }
- if (isRouteRequest) {
- // Note: This should only be non-Response values if we get here, since
- // isRouteRequest should throw any Response received in callLoaderOrAction
- if (isErrorResult(result)) {
- let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);
- return {
- matches: [actionMatch],
- loaderData: {},
- actionData: null,
- errors: {
- [boundaryMatch.route.id]: result.error
- },
- // Note: statusCode + headers are unused here since queryRoute will
- // return the raw Response or value
- statusCode: 500,
- loaderHeaders: {},
- actionHeaders: {}
- };
- }
- return {
- matches: [actionMatch],
- loaderData: {},
- actionData: {
- [actionMatch.route.id]: result.data
- },
- errors: null,
- // Note: statusCode + headers are unused here since queryRoute will
- // return the raw Response or value
- statusCode: 200,
- loaderHeaders: {},
- actionHeaders: {}
- };
- }
- if (isErrorResult(result)) {
- // Store off the pending error - we use it to determine which loaders
- // to call and will commit it when we complete the navigation
- let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);
- let context = await loadRouteData(request, matches, undefined, {
- [boundaryMatch.route.id]: result.error
- }); // action status codes take precedence over loader status codes
- return _extends({}, context, {
- statusCode: isRouteErrorResponse(result.error) ? result.error.status : 500,
- actionData: null,
- actionHeaders: _extends({}, result.headers ? {
- [actionMatch.route.id]: result.headers
- } : {})
- });
- }
- let context = await loadRouteData(request, matches);
- return _extends({}, context, result.statusCode ? {
- statusCode: result.statusCode
- } : {}, {
- actionData: {
- [actionMatch.route.id]: result.data
- },
- actionHeaders: _extends({}, result.headers ? {
- [actionMatch.route.id]: result.headers
- } : {})
- });
- }
- async function loadRouteData(request, matches, routeMatch, pendingActionError) {
- let isRouteRequest = routeMatch != null;
- let requestMatches = routeMatch ? [routeMatch] : getLoaderMatchesUntilBoundary(matches, Object.keys(pendingActionError || {})[0]);
- let matchesToLoad = requestMatches.filter(m => m.route.loader); // Short circuit if we have no loaders to run
- if (matchesToLoad.length === 0) {
- return {
- matches,
- loaderData: {},
- errors: pendingActionError || null,
- statusCode: 200,
- loaderHeaders: {}
- };
- }
- let results = await Promise.all([...matchesToLoad.map(match => callLoaderOrAction("loader", request, match, matches, undefined, // Basename not currently supported in static handlers
- true, isRouteRequest))]);
- if (request.signal.aborted) {
- let method = isRouteRequest ? "queryRoute" : "query";
- throw new Error(method + "() call aborted");
- } // Can't do anything with these without the Remix side of things, so just
- // cancel them for now
- results.forEach(result => {
- if (isDeferredResult(result)) {
- result.deferredData.cancel();
- }
- }); // Process and commit output from loaders
- let context = processRouteLoaderData(matches, matchesToLoad, results, pendingActionError);
- return _extends({}, context, {
- matches
- });
- }
- function createRouterErrorResponse(body, init) {
- return new Response(body, _extends({}, init, {
- headers: _extends({}, init.headers, {
- "X-Remix-Router-Error": "yes"
- })
- }));
- }
- return {
- dataRoutes,
- query,
- queryRoute
- };
- } //#endregion
- ////////////////////////////////////////////////////////////////////////////////
- //#region Helpers
- ////////////////////////////////////////////////////////////////////////////////
- /**
- * Given an existing StaticHandlerContext and an error thrown at render time,
- * provide an updated StaticHandlerContext suitable for a second SSR render
- */
- function getStaticContextFromError(routes, context, error) {
- let newContext = _extends({}, context, {
- statusCode: 500,
- errors: {
- [context._deepestRenderedBoundaryId || routes[0].id]: error
- }
- });
- return newContext;
- } // Normalize navigation options by converting formMethod=GET formData objects to
- // URLSearchParams so they behave identically to links with query params
- function normalizeNavigateOptions(to, opts, isFetcher) {
- if (isFetcher === void 0) {
- isFetcher = false;
- }
- let path = typeof to === "string" ? to : createPath(to); // Return location verbatim on non-submission navigations
- if (!opts || !("formMethod" in opts) && !("formData" in opts)) {
- return {
- path
- };
- } // Create a Submission on non-GET navigations
- if (opts.formMethod != null && opts.formMethod !== "get") {
- return {
- path,
- submission: {
- formMethod: opts.formMethod,
- formAction: stripHashFromPath(path),
- formEncType: opts && opts.formEncType || "application/x-www-form-urlencoded",
- formData: opts.formData
- }
- };
- } // No formData to flatten for GET submission
- if (!opts.formData) {
- return {
- path
- };
- } // Flatten submission onto URLSearchParams for GET submissions
- let parsedPath = parsePath(path);
- try {
- let searchParams = convertFormDataToSearchParams(opts.formData); // Since fetcher GET submissions only run a single loader (as opposed to
- // navigation GET submissions which run all loaders), we need to preserve
- // any incoming ?index params
- if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {
- searchParams.append("index", "");
- }
- parsedPath.search = "?" + searchParams;
- } catch (e) {
- return {
- path,
- error: new ErrorResponse(400, "Bad Request", "Cannot submit binary form data using GET")
- };
- }
- return {
- path: createPath(parsedPath)
- };
- }
- function getLoaderRedirect(state, redirect) {
- let {
- formMethod,
- formAction,
- formEncType,
- formData
- } = state.navigation;
- let navigation = {
- state: "loading",
- location: createLocation(state.location, redirect.location),
- formMethod: formMethod || undefined,
- formAction: formAction || undefined,
- formEncType: formEncType || undefined,
- formData: formData || undefined
- };
- return navigation;
- } // Filter out all routes below any caught error as they aren't going to
- // render so we don't need to load them
- function getLoaderMatchesUntilBoundary(matches, boundaryId) {
- let boundaryMatches = matches;
- if (boundaryId) {
- let index = matches.findIndex(m => m.route.id === boundaryId);
- if (index >= 0) {
- boundaryMatches = matches.slice(0, index);
- }
- }
- return boundaryMatches;
- }
- function getMatchesToLoad(state, matches, submission, location, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, pendingActionData, pendingError, fetchLoadMatches) {
- let actionResult = pendingError ? Object.values(pendingError)[0] : pendingActionData ? Object.values(pendingActionData)[0] : null; // Pick navigation matches that are net-new or qualify for revalidation
- let boundaryId = pendingError ? Object.keys(pendingError)[0] : undefined;
- let boundaryMatches = getLoaderMatchesUntilBoundary(matches, boundaryId);
- let navigationMatches = boundaryMatches.filter((match, index) => match.route.loader != null && (isNewLoader(state.loaderData, state.matches[index], match) || // If this route had a pending deferred cancelled it must be revalidated
- cancelledDeferredRoutes.some(id => id === match.route.id) || shouldRevalidateLoader(state.location, state.matches[index], submission, location, match, isRevalidationRequired, actionResult))); // Pick fetcher.loads that need to be revalidated
- let revalidatingFetchers = [];
- fetchLoadMatches && fetchLoadMatches.forEach((_ref10, key) => {
- let [href, match, fetchMatches] = _ref10;
- // This fetcher was cancelled from a prior action submission - force reload
- if (cancelledFetcherLoads.includes(key)) {
- revalidatingFetchers.push([key, href, match, fetchMatches]);
- } else if (isRevalidationRequired) {
- let shouldRevalidate = shouldRevalidateLoader(href, match, submission, href, match, isRevalidationRequired, actionResult);
- if (shouldRevalidate) {
- revalidatingFetchers.push([key, href, match, fetchMatches]);
- }
- }
- });
- return [navigationMatches, revalidatingFetchers];
- }
- function isNewLoader(currentLoaderData, currentMatch, match) {
- let isNew = // [a] -> [a, b]
- !currentMatch || // [a, b] -> [a, c]
- match.route.id !== currentMatch.route.id; // Handle the case that we don't have data for a re-used route, potentially
- // from a prior error or from a cancelled pending deferred
- let isMissingData = currentLoaderData[match.route.id] === undefined; // Always load if this is a net-new route or we don't yet have data
- return isNew || isMissingData;
- }
- function isNewRouteInstance(currentMatch, match) {
- let currentPath = currentMatch.route.path;
- return (// param change for this match, /users/123 -> /users/456
- currentMatch.pathname !== match.pathname || // splat param changed, which is not present in match.path
- // e.g. /files/images/avatar.jpg -> files/finances.xls
- currentPath && currentPath.endsWith("*") && currentMatch.params["*"] !== match.params["*"]
- );
- }
- function shouldRevalidateLoader(currentLocation, currentMatch, submission, location, match, isRevalidationRequired, actionResult) {
- let currentUrl = createURL(currentLocation);
- let currentParams = currentMatch.params;
- let nextUrl = createURL(location);
- let nextParams = match.params; // This is the default implementation as to when we revalidate. If the route
- // provides it's own implementation, then we give them full control but
- // provide this value so they can leverage it if needed after they check
- // their own specific use cases
- // Note that fetchers always provide the same current/next locations so the
- // URL-based checks here don't apply to fetcher shouldRevalidate calls
- let defaultShouldRevalidate = isNewRouteInstance(currentMatch, match) || // Clicked the same link, resubmitted a GET form
- currentUrl.toString() === nextUrl.toString() || // Search params affect all loaders
- currentUrl.search !== nextUrl.search || // Forced revalidation due to submission, useRevalidate, or X-Remix-Revalidate
- isRevalidationRequired;
- if (match.route.shouldRevalidate) {
- let routeChoice = match.route.shouldRevalidate(_extends({
- currentUrl,
- currentParams,
- nextUrl,
- nextParams
- }, submission, {
- actionResult,
- defaultShouldRevalidate
- }));
- if (typeof routeChoice === "boolean") {
- return routeChoice;
- }
- }
- return defaultShouldRevalidate;
- }
- async function callLoaderOrAction(type, request, match, matches, basename, isStaticRequest, isRouteRequest) {
- if (isStaticRequest === void 0) {
- isStaticRequest = false;
- }
- if (isRouteRequest === void 0) {
- isRouteRequest = false;
- }
- let resultType;
- let result; // Setup a promise we can race against so that abort signals short circuit
- let reject;
- let abortPromise = new Promise((_, r) => reject = r);
- let onReject = () => reject();
- request.signal.addEventListener("abort", onReject);
- try {
- let handler = match.route[type];
- invariant(handler, "Could not find the " + type + " to run on the \"" + match.route.id + "\" route");
- result = await Promise.race([handler({
- request,
- params: match.params
- }), abortPromise]);
- } catch (e) {
- resultType = ResultType.error;
- result = e;
- } finally {
- request.signal.removeEventListener("abort", onReject);
- }
- if (result instanceof Response) {
- let status = result.status; // Process redirects
- if (status >= 300 && status <= 399) {
- let location = result.headers.get("Location");
- invariant(location, "Redirects returned/thrown from loaders/actions must have a Location header"); // Support relative routing in redirects
- let activeMatches = matches.slice(0, matches.indexOf(match) + 1);
- let routePathnames = getPathContributingMatches(activeMatches).map(match => match.pathnameBase);
- let requestPath = createURL(request.url).pathname;
- let resolvedLocation = resolveTo(location, routePathnames, requestPath);
- invariant(createPath(resolvedLocation), "Unable to resolve redirect location: " + result.headers.get("Location")); // Prepend the basename to the redirect location if we have one
- if (basename) {
- let path = resolvedLocation.pathname;
- resolvedLocation.pathname = path === "/" ? basename : joinPaths([basename, path]);
- }
- location = createPath(resolvedLocation); // Don't process redirects in the router during static requests requests.
- // Instead, throw the Response and let the server handle it with an HTTP
- // redirect. We also update the Location header in place in this flow so
- // basename and relative routing is taken into account
- if (isStaticRequest) {
- result.headers.set("Location", location);
- throw result;
- }
- return {
- type: ResultType.redirect,
- status,
- location,
- revalidate: result.headers.get("X-Remix-Revalidate") !== null
- };
- } // For SSR single-route requests, we want to hand Responses back directly
- // without unwrapping. We do this with the QueryRouteResponse wrapper
- // interface so we can know whether it was returned or thrown
- if (isRouteRequest) {
- // eslint-disable-next-line no-throw-literal
- throw {
- type: resultType || ResultType.data,
- response: result
- };
- }
- let data;
- let contentType = result.headers.get("Content-Type");
- if (contentType && contentType.startsWith("application/json")) {
- data = await result.json();
- } else {
- data = await result.text();
- }
- if (resultType === ResultType.error) {
- return {
- type: resultType,
- error: new ErrorResponse(status, result.statusText, data),
- headers: result.headers
- };
- }
- return {
- type: ResultType.data,
- data,
- statusCode: result.status,
- headers: result.headers
- };
- }
- if (resultType === ResultType.error) {
- return {
- type: resultType,
- error: result
- };
- }
- if (result instanceof DeferredData) {
- return {
- type: ResultType.deferred,
- deferredData: result
- };
- }
- return {
- type: ResultType.data,
- data: result
- };
- }
- function createRequest(location, signal, submission) {
- let url = createURL(stripHashFromPath(location)).toString();
- let init = {
- signal
- };
- if (submission) {
- let {
- formMethod,
- formEncType,
- formData
- } = submission;
- init.method = formMethod.toUpperCase();
- init.body = formEncType === "application/x-www-form-urlencoded" ? convertFormDataToSearchParams(formData) : formData;
- } // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)
- return new Request(url, init);
- }
- function convertFormDataToSearchParams(formData) {
- let searchParams = new URLSearchParams();
- for (let [key, value] of formData.entries()) {
- invariant(typeof value === "string", 'File inputs are not supported with encType "application/x-www-form-urlencoded", ' + 'please use "multipart/form-data" instead.');
- searchParams.append(key, value);
- }
- return searchParams;
- }
- function processRouteLoaderData(matches, matchesToLoad, results, pendingError, activeDeferreds) {
- // Fill in loaderData/errors from our loaders
- let loaderData = {};
- let errors = null;
- let statusCode;
- let foundError = false;
- let loaderHeaders = {}; // Process loader results into state.loaderData/state.errors
- results.forEach((result, index) => {
- let id = matchesToLoad[index].route.id;
- invariant(!isRedirectResult(result), "Cannot handle redirect results in processLoaderData");
- if (isErrorResult(result)) {
- // Look upwards from the matched route for the closest ancestor
- // error boundary, defaulting to the root match
- let boundaryMatch = findNearestBoundary(matches, id);
- let error = result.error; // If we have a pending action error, we report it at the highest-route
- // that throws a loader error, and then clear it out to indicate that
- // it was consumed
- if (pendingError) {
- error = Object.values(pendingError)[0];
- pendingError = undefined;
- }
- errors = Object.assign(errors || {}, {
- [boundaryMatch.route.id]: error
- }); // Once we find our first (highest) error, we set the status code and
- // prevent deeper status codes from overriding
- if (!foundError) {
- foundError = true;
- statusCode = isRouteErrorResponse(result.error) ? result.error.status : 500;
- }
- if (result.headers) {
- loaderHeaders[id] = result.headers;
- }
- } else if (isDeferredResult(result)) {
- activeDeferreds && activeDeferreds.set(id, result.deferredData);
- loaderData[id] = result.deferredData.data; // TODO: Add statusCode/headers once we wire up streaming in Remix
- } else {
- loaderData[id] = result.data; // Error status codes always override success status codes, but if all
- // loaders are successful we take the deepest status code.
- if (result.statusCode != null && result.statusCode !== 200 && !foundError) {
- statusCode = result.statusCode;
- }
- if (result.headers) {
- loaderHeaders[id] = result.headers;
- }
- }
- }); // If we didn't consume the pending action error (i.e., all loaders
- // resolved), then consume it here
- if (pendingError) {
- errors = pendingError;
- }
- return {
- loaderData,
- errors,
- statusCode: statusCode || 200,
- loaderHeaders
- };
- }
- function processLoaderData(state, matches, matchesToLoad, results, pendingError, revalidatingFetchers, fetcherResults, activeDeferreds) {
- let {
- loaderData,
- errors
- } = processRouteLoaderData(matches, matchesToLoad, results, pendingError, activeDeferreds); // Process results from our revalidating fetchers
- for (let index = 0; index < revalidatingFetchers.length; index++) {
- let [key,, match] = revalidatingFetchers[index];
- invariant(fetcherResults !== undefined && fetcherResults[index] !== undefined, "Did not find corresponding fetcher result");
- let result = fetcherResults[index]; // Process fetcher non-redirect errors
- if (isErrorResult(result)) {
- let boundaryMatch = findNearestBoundary(state.matches, match.route.id);
- if (!(errors && errors[boundaryMatch.route.id])) {
- errors = _extends({}, errors, {
- [boundaryMatch.route.id]: result.error
- });
- }
- state.fetchers.delete(key);
- } else if (isRedirectResult(result)) {
- // Should never get here, redirects should get processed above, but we
- // keep this to type narrow to a success result in the else
- throw new Error("Unhandled fetcher revalidation redirect");
- } else if (isDeferredResult(result)) {
- // Should never get here, deferred data should be awaited for fetchers
- // in resolveDeferredResults
- throw new Error("Unhandled fetcher deferred data");
- } else {
- let doneFetcher = {
- state: "idle",
- data: result.data,
- formMethod: undefined,
- formAction: undefined,
- formEncType: undefined,
- formData: undefined
- };
- state.fetchers.set(key, doneFetcher);
- }
- }
- return {
- loaderData,
- errors
- };
- }
- function mergeLoaderData(loaderData, newLoaderData, matches) {
- let mergedLoaderData = _extends({}, newLoaderData);
- matches.forEach(match => {
- let id = match.route.id;
- if (newLoaderData[id] === undefined && loaderData[id] !== undefined) {
- mergedLoaderData[id] = loaderData[id];
- }
- });
- return mergedLoaderData;
- } // Find the nearest error boundary, looking upwards from the leaf route (or the
- // route specified by routeId) for the closest ancestor error boundary,
- // defaulting to the root match
- function findNearestBoundary(matches, routeId) {
- let eligibleMatches = routeId ? matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1) : [...matches];
- return eligibleMatches.reverse().find(m => m.route.hasErrorBoundary === true) || matches[0];
- }
- function getShortCircuitMatches(routes, status, statusText) {
- // Prefer a root layout route if present, otherwise shim in a route object
- let route = routes.find(r => r.index || !r.path || r.path === "/") || {
- id: "__shim-" + status + "-route__"
- };
- return {
- matches: [{
- params: {},
- pathname: "",
- pathnameBase: "",
- route
- }],
- route,
- error: new ErrorResponse(status, statusText, null)
- };
- }
- function getNotFoundMatches(routes) {
- return getShortCircuitMatches(routes, 404, "Not Found");
- }
- function getMethodNotAllowedMatches(routes) {
- return getShortCircuitMatches(routes, 405, "Method Not Allowed");
- }
- function getMethodNotAllowedResult(path) {
- let href = typeof path === "string" ? path : createPath(path);
- console.warn("You're trying to submit to a route that does not have an action. To " + "fix this, please add an `action` function to the route for " + ("[" + href + "]"));
- return {
- type: ResultType.error,
- error: new ErrorResponse(405, "Method Not Allowed", "")
- };
- } // Find any returned redirect errors, starting from the lowest match
- function findRedirect(results) {
- for (let i = results.length - 1; i >= 0; i--) {
- let result = results[i];
- if (isRedirectResult(result)) {
- return result;
- }
- }
- }
- function stripHashFromPath(path) {
- let parsedPath = typeof path === "string" ? parsePath(path) : path;
- return createPath(_extends({}, parsedPath, {
- hash: ""
- }));
- }
- function isHashChangeOnly(a, b) {
- return a.pathname === b.pathname && a.search === b.search && a.hash !== b.hash;
- }
- function isDeferredResult(result) {
- return result.type === ResultType.deferred;
- }
- function isErrorResult(result) {
- return result.type === ResultType.error;
- }
- function isRedirectResult(result) {
- return (result && result.type) === ResultType.redirect;
- }
- function isRedirectResponse(result) {
- if (!(result instanceof Response)) {
- return false;
- }
- let status = result.status;
- let location = result.headers.get("Location");
- return status >= 300 && status <= 399 && location != null;
- }
- function isQueryRouteResponse(obj) {
- return obj && obj.response instanceof Response && (obj.type === ResultType.data || ResultType.error);
- }
- async function resolveDeferredResults(currentMatches, matchesToLoad, results, signal, isFetcher, currentLoaderData) {
- for (let index = 0; index < results.length; index++) {
- let result = results[index];
- let match = matchesToLoad[index];
- let currentMatch = currentMatches.find(m => m.route.id === match.route.id);
- let isRevalidatingLoader = currentMatch != null && !isNewRouteInstance(currentMatch, match) && (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;
- if (isDeferredResult(result) && (isFetcher || isRevalidatingLoader)) {
- // Note: we do not have to touch activeDeferreds here since we race them
- // against the signal in resolveDeferredData and they'll get aborted
- // there if needed
- await resolveDeferredData(result, signal, isFetcher).then(result => {
- if (result) {
- results[index] = result || results[index];
- }
- });
- }
- }
- }
- async function resolveDeferredData(result, signal, unwrap) {
- if (unwrap === void 0) {
- unwrap = false;
- }
- let aborted = await result.deferredData.resolveData(signal);
- if (aborted) {
- return;
- }
- if (unwrap) {
- try {
- return {
- type: ResultType.data,
- data: result.deferredData.unwrappedData
- };
- } catch (e) {
- // Handle any TrackedPromise._error values encountered while unwrapping
- return {
- type: ResultType.error,
- error: e
- };
- }
- }
- return {
- type: ResultType.data,
- data: result.deferredData.data
- };
- }
- function hasNakedIndexQuery(search) {
- return new URLSearchParams(search).getAll("index").some(v => v === "");
- } // Note: This should match the format exported by useMatches, so if you change
- // this please also change that :) Eventually we'll DRY this up
- function createUseMatchesMatch(match, loaderData) {
- let {
- route,
- pathname,
- params
- } = match;
- return {
- id: route.id,
- pathname,
- params,
- data: loaderData[route.id],
- handle: route.handle
- };
- }
- function getTargetMatch(matches, location) {
- let search = typeof location === "string" ? parsePath(location).search : location.search;
- if (matches[matches.length - 1].route.index && hasNakedIndexQuery(search || "")) {
- // Return the leaf index route when index is present
- return matches[matches.length - 1];
- } // Otherwise grab the deepest "path contributing" match (ignoring index and
- // pathless layout routes)
- let pathMatches = getPathContributingMatches(matches);
- return pathMatches[pathMatches.length - 1];
- } //#endregion
- //# sourceMappingURL=router.js.map
- /***/ }),
- /***/ "./node_modules/autosize/dist/autosize.js":
- /*!************************************************!*\
- !*** ./node_modules/autosize/dist/autosize.js ***!
- \************************************************/
- /***/ (function(module, exports) {
- var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
- autosize 4.0.4
- license: MIT
- http://www.jacklmoore.com/autosize
- */
- (function (global, factory) {
- if (true) {
- !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
- __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
- (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
- __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
- } else { var mod; }
- })(this, function (module, exports) {
- 'use strict';
- var map = typeof Map === "function" ? new Map() : function () {
- var keys = [];
- var values = [];
- return {
- has: function has(key) {
- return keys.indexOf(key) > -1;
- },
- get: function get(key) {
- return values[keys.indexOf(key)];
- },
- set: function set(key, value) {
- if (keys.indexOf(key) === -1) {
- keys.push(key);
- values.push(value);
- }
- },
- delete: function _delete(key) {
- var index = keys.indexOf(key);
- if (index > -1) {
- keys.splice(index, 1);
- values.splice(index, 1);
- }
- }
- };
- }();
- var createEvent = function createEvent(name) {
- return new Event(name, { bubbles: true });
- };
- try {
- new Event('test');
- } catch (e) {
- // IE does not support `new Event()`
- createEvent = function createEvent(name) {
- var evt = document.createEvent('Event');
- evt.initEvent(name, true, false);
- return evt;
- };
- }
- function assign(ta) {
- if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || map.has(ta)) return;
- var heightOffset = null;
- var clientWidth = null;
- var cachedHeight = null;
- function init() {
- var style = window.getComputedStyle(ta, null);
- if (style.resize === 'vertical') {
- ta.style.resize = 'none';
- } else if (style.resize === 'both') {
- ta.style.resize = 'horizontal';
- }
- if (style.boxSizing === 'content-box') {
- heightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));
- } else {
- heightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);
- }
- // Fix when a textarea is not on document body and heightOffset is Not a Number
- if (isNaN(heightOffset)) {
- heightOffset = 0;
- }
- update();
- }
- function changeOverflow(value) {
- {
- // Chrome/Safari-specific fix:
- // When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space
- // made available by removing the scrollbar. The following forces the necessary text reflow.
- var width = ta.style.width;
- ta.style.width = '0px';
- // Force reflow:
- /* jshint ignore:start */
- ta.offsetWidth;
- /* jshint ignore:end */
- ta.style.width = width;
- }
- ta.style.overflowY = value;
- }
- function getParentOverflows(el) {
- var arr = [];
- while (el && el.parentNode && el.parentNode instanceof Element) {
- if (el.parentNode.scrollTop) {
- arr.push({
- node: el.parentNode,
- scrollTop: el.parentNode.scrollTop
- });
- }
- el = el.parentNode;
- }
- return arr;
- }
- function resize() {
- if (ta.scrollHeight === 0) {
- // If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.
- return;
- }
- var overflows = getParentOverflows(ta);
- var docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240)
- ta.style.height = '';
- ta.style.height = ta.scrollHeight + heightOffset + 'px';
- // used to check if an update is actually necessary on window.resize
- clientWidth = ta.clientWidth;
- // prevents scroll-position jumping
- overflows.forEach(function (el) {
- el.node.scrollTop = el.scrollTop;
- });
- if (docTop) {
- document.documentElement.scrollTop = docTop;
- }
- }
- function update() {
- resize();
- var styleHeight = Math.round(parseFloat(ta.style.height));
- var computed = window.getComputedStyle(ta, null);
- // Using offsetHeight as a replacement for computed.height in IE, because IE does not account use of border-box
- var actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(computed.height)) : ta.offsetHeight;
- // The actual height not matching the style height (set via the resize method) indicates that
- // the max-height has been exceeded, in which case the overflow should be allowed.
- if (actualHeight < styleHeight) {
- if (computed.overflowY === 'hidden') {
- changeOverflow('scroll');
- resize();
- actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;
- }
- } else {
- // Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands.
- if (computed.overflowY !== 'hidden') {
- changeOverflow('hidden');
- resize();
- actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;
- }
- }
- if (cachedHeight !== actualHeight) {
- cachedHeight = actualHeight;
- var evt = createEvent('autosize:resized');
- try {
- ta.dispatchEvent(evt);
- } catch (err) {
- // Firefox will throw an error on dispatchEvent for a detached element
- // https://bugzilla.mozilla.org/show_bug.cgi?id=889376
- }
- }
- }
- var pageResize = function pageResize() {
- if (ta.clientWidth !== clientWidth) {
- update();
- }
- };
- var destroy = function (style) {
- window.removeEventListener('resize', pageResize, false);
- ta.removeEventListener('input', update, false);
- ta.removeEventListener('keyup', update, false);
- ta.removeEventListener('autosize:destroy', destroy, false);
- ta.removeEventListener('autosize:update', update, false);
- Object.keys(style).forEach(function (key) {
- ta.style[key] = style[key];
- });
- map.delete(ta);
- }.bind(ta, {
- height: ta.style.height,
- resize: ta.style.resize,
- overflowY: ta.style.overflowY,
- overflowX: ta.style.overflowX,
- wordWrap: ta.style.wordWrap
- });
- ta.addEventListener('autosize:destroy', destroy, false);
- // IE9 does not fire onpropertychange or oninput for deletions,
- // so binding to onkeyup to catch most of those events.
- // There is no way that I know of to detect something like 'cut' in IE9.
- if ('onpropertychange' in ta && 'oninput' in ta) {
- ta.addEventListener('keyup', update, false);
- }
- window.addEventListener('resize', pageResize, false);
- ta.addEventListener('input', update, false);
- ta.addEventListener('autosize:update', update, false);
- ta.style.overflowX = 'hidden';
- ta.style.wordWrap = 'break-word';
- map.set(ta, {
- destroy: destroy,
- update: update
- });
- init();
- }
- function destroy(ta) {
- var methods = map.get(ta);
- if (methods) {
- methods.destroy();
- }
- }
- function update(ta) {
- var methods = map.get(ta);
- if (methods) {
- methods.update();
- }
- }
- var autosize = null;
- // Do nothing in Node.js environment and IE8 (or lower)
- if (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {
- autosize = function autosize(el) {
- return el;
- };
- autosize.destroy = function (el) {
- return el;
- };
- autosize.update = function (el) {
- return el;
- };
- } else {
- autosize = function autosize(el, options) {
- if (el) {
- Array.prototype.forEach.call(el.length ? el : [el], function (x) {
- return assign(x, options);
- });
- }
- return el;
- };
- autosize.destroy = function (el) {
- if (el) {
- Array.prototype.forEach.call(el.length ? el : [el], destroy);
- }
- return el;
- };
- autosize.update = function (el) {
- if (el) {
- Array.prototype.forEach.call(el.length ? el : [el], update);
- }
- return el;
- };
- }
- exports.default = autosize;
- module.exports = exports['default'];
- });
- /***/ }),
- /***/ "./node_modules/computed-style/dist/computedStyle.commonjs.js":
- /*!********************************************************************!*\
- !*** ./node_modules/computed-style/dist/computedStyle.commonjs.js ***!
- \********************************************************************/
- /***/ ((module) => {
- // DEV: We don't use var but favor parameters since these play nicer with minification
- function computedStyle(el, prop, getComputedStyle, style) {
- getComputedStyle = window.getComputedStyle;
- style =
- // If we have getComputedStyle
- getComputedStyle ?
- // Query it
- // TODO: From CSS-Query notes, we might need (node, null) for FF
- getComputedStyle(el) :
- // Otherwise, we are in IE and use currentStyle
- el.currentStyle;
- if (style) {
- return style
- [
- // Switch to camelCase for CSSOM
- // DEV: Grabbed from jQuery
- // https://github.com/jquery/jquery/blob/1.9-stable/src/css.js#L191-L194
- // https://github.com/jquery/jquery/blob/1.9-stable/src/core.js#L593-L597
- prop.replace(/-(\w)/gi, function (word, letter) {
- return letter.toUpperCase();
- })
- ];
- }
- }
- module.exports = computedStyle;
- /***/ }),
- /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./src/sass/d3v4pp.scss":
- /*!***************************************************************************************************************************************!*\
- !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./src/sass/d3v4pp.scss ***!
- \***************************************************************************************************************************************/
- /***/ ((module, __webpack_exports__, __webpack_require__) => {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
- /* harmony export */ });
- /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
- /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
- /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
- /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
- /* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/getUrl.js */ "./node_modules/css-loader/dist/runtime/getUrl.js");
- /* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__);
- // Imports
- var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! ./icons/assets/SweetIcons-Regular.eot */ "./src/sass/icons/assets/SweetIcons-Regular.eot"), __webpack_require__.b);
- var ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __webpack_require__(/*! ./icons/assets/SweetIcons-Regular.woff2 */ "./src/sass/icons/assets/SweetIcons-Regular.woff2"), __webpack_require__.b);
- var ___CSS_LOADER_URL_IMPORT_2___ = new URL(/* asset import */ __webpack_require__(/*! ./icons/assets/SweetIcons-Regular.woff */ "./src/sass/icons/assets/SweetIcons-Regular.woff"), __webpack_require__.b);
- var ___CSS_LOADER_URL_IMPORT_3___ = new URL(/* asset import */ __webpack_require__(/*! ./icons/assets/SweetIcons-Regular.ttf */ "./src/sass/icons/assets/SweetIcons-Regular.ttf"), __webpack_require__.b);
- var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
- ___CSS_LOADER_EXPORT___.push([module.id, "@import url(https://fonts.googleapis.com/css?family=Ubuntu);"]);
- var ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___);
- var ___CSS_LOADER_URL_REPLACEMENT_1___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___);
- var ___CSS_LOADER_URL_REPLACEMENT_2___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_2___);
- var ___CSS_LOADER_URL_REPLACEMENT_3___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_3___);
- // Module
- ___CSS_LOADER_EXPORT___.push([module.id, "@charset \"UTF-8\";\n@font-face {\n font-family: sweeticons;\n font-style: normal;\n font-weight: 400;\n src: url(" + ___CSS_LOADER_URL_REPLACEMENT_0___ + ");\n src: url(" + ___CSS_LOADER_URL_REPLACEMENT_1___ + ") format(\"woff2\"), url(" + ___CSS_LOADER_URL_REPLACEMENT_2___ + ") format(\"woff\"), url(" + ___CSS_LOADER_URL_REPLACEMENT_3___ + ") format(\"truetype\");\n}\n.s-icon,\n.s-icons,\n.sweet-icons,\n.sweet-icon {\n font-family: sweeticons, sans-serif;\n font-weight: normal;\n font-style: normal;\n font-size: 28px;\n line-height: 1;\n letter-spacing: normal;\n text-transform: none;\n display: inline-block;\n white-space: nowrap;\n word-wrap: normal;\n direction: ltr;\n -webkit-font-smoothing: antialiased;\n text-rendering: optimizeLegibility;\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-feature-settings: \"liga\";\n -moz-font-feature-settings: \"liga=1\";\n -moz-font-feature-settings: \"liga\";\n font-feature-settings: \"liga\";\n text-align: center;\n}\n\n.webo {\n background-color: #0062d6 !important;\n}\n\n.webo-text {\n color: #0062d6 !important;\n}\n\n.webo-waves .waves-ripple {\n background-color: #0062d6 !important;\n}\n\n.webo.second {\n background-color: #0077FA !important;\n}\n\n.webo-text.text-second {\n color: #0077FA !important;\n}\n\n.webo-waves.waves-second .waves-ripple {\n background-color: #0077FA !important;\n}\n\n.webo.third {\n background-color: #09bddd !important;\n}\n\n.webo-text.text-third {\n color: #09bddd !important;\n}\n\n.webo-waves.waves-third .waves-ripple {\n background-color: #09bddd !important;\n}\n\n.webo.fourth {\n background-color: #cbe7fe !important;\n}\n\n.webo-text.text-fourth {\n color: #cbe7fe !important;\n}\n\n.webo-waves.waves-fourth .waves-ripple {\n background-color: #cbe7fe !important;\n}\n\n.webo.lighten-5 {\n background-color: #bbdefb !important;\n}\n\n.webo-text.text-lighten-5 {\n color: #bbdefb !important;\n}\n\n.webo-waves.waves-lighten-5 .waves-ripple {\n background-color: #bbdefb !important;\n}\n\n.webo.lighten-4 {\n background-color: #42a5f5 !important;\n}\n\n.webo-text.text-lighten-4 {\n color: #42a5f5 !important;\n}\n\n.webo-waves.waves-lighten-4 .waves-ripple {\n background-color: #42a5f5 !important;\n}\n\n.webo.lighten-3 {\n background-color: #7986cb !important;\n}\n\n.webo-text.text-lighten-3 {\n color: #7986cb !important;\n}\n\n.webo-waves.waves-lighten-3 .waves-ripple {\n background-color: #7986cb !important;\n}\n\n.webo.lighten-2 {\n background-color: #512da8 !important;\n}\n\n.webo-text.text-lighten-2 {\n color: #512da8 !important;\n}\n\n.webo-waves.waves-lighten-2 .waves-ripple {\n background-color: #512da8 !important;\n}\n\n.webo.lighten-1 {\n background-color: #283593 !important;\n}\n\n.webo-text.text-lighten-1 {\n color: #283593 !important;\n}\n\n.webo-waves.waves-lighten-1 .waves-ripple {\n background-color: #283593 !important;\n}\n\n.webo.darken-1 {\n background-color: #d0181e !important;\n}\n\n.webo-text.text-darken-1 {\n color: #d0181e !important;\n}\n\n.webo-waves.waves-darken-1 .waves-ripple {\n background-color: #d0181e !important;\n}\n\n.webo.darken-2 {\n background-color: #b9151b !important;\n}\n\n.webo-text.text-darken-2 {\n color: #b9151b !important;\n}\n\n.webo-waves.waves-darken-2 .waves-ripple {\n background-color: #b9151b !important;\n}\n\n.webo.darken-3 {\n background-color: #a21318 !important;\n}\n\n.webo-text.text-darken-3 {\n color: #a21318 !important;\n}\n\n.webo-waves.waves-darken-3 .waves-ripple {\n background-color: #a21318 !important;\n}\n\n.webo.b- {\n background-color: #49ce5f !important;\n}\n\n.webo-text.text-b- {\n color: #49ce5f !important;\n}\n\n.webo-waves.waves-b- .waves-ripple {\n background-color: #49ce5f !important;\n}\n\n.webo.darken-4 {\n background-color: #8b1014 !important;\n}\n\n.webo-text.text-darken-4 {\n color: #8b1014 !important;\n}\n\n.webo-waves.waves-darken-4 .waves-ripple {\n background-color: #8b1014 !important;\n}\n\n.red {\n background-color: #f44336 !important;\n}\n\n.red-text {\n color: #f44336 !important;\n}\n\n.red-waves .waves-ripple {\n background-color: #f44336 !important;\n}\n\n.red.lighten-5 {\n background-color: #ffebee !important;\n}\n\n.red-text.text-lighten-5 {\n color: #ffebee !important;\n}\n\n.red-waves.waves-lighten-5 .waves-ripple {\n background-color: #ffebee !important;\n}\n\n.red.lighten-4 {\n background-color: #ffcdd2 !important;\n}\n\n.red-text.text-lighten-4 {\n color: #ffcdd2 !important;\n}\n\n.red-waves.waves-lighten-4 .waves-ripple {\n background-color: #ffcdd2 !important;\n}\n\n.red.lighten-3 {\n background-color: #ef9a9a !important;\n}\n\n.red-text.text-lighten-3 {\n color: #ef9a9a !important;\n}\n\n.red-waves.waves-lighten-3 .waves-ripple {\n background-color: #ef9a9a !important;\n}\n\n.red.lighten-2 {\n background-color: #e57373 !important;\n}\n\n.red-text.text-lighten-2 {\n color: #e57373 !important;\n}\n\n.red-waves.waves-lighten-2 .waves-ripple {\n background-color: #e57373 !important;\n}\n\n.red.lighten-1 {\n background-color: #ef5350 !important;\n}\n\n.red-text.text-lighten-1 {\n color: #ef5350 !important;\n}\n\n.red-waves.waves-lighten-1 .waves-ripple {\n background-color: #ef5350 !important;\n}\n\n.red.darken-1 {\n background-color: #e53935 !important;\n}\n\n.red-text.text-darken-1 {\n color: #e53935 !important;\n}\n\n.red-waves.waves-darken-1 .waves-ripple {\n background-color: #e53935 !important;\n}\n\n.red.darken-2 {\n background-color: #d32f2f !important;\n}\n\n.red-text.text-darken-2 {\n color: #d32f2f !important;\n}\n\n.red-waves.waves-darken-2 .waves-ripple {\n background-color: #d32f2f !important;\n}\n\n.red.darken-3 {\n background-color: #c62828 !important;\n}\n\n.red-text.text-darken-3 {\n color: #c62828 !important;\n}\n\n.red-waves.waves-darken-3 .waves-ripple {\n background-color: #c62828 !important;\n}\n\n.red.darken-4 {\n background-color: #b71c1c !important;\n}\n\n.red-text.text-darken-4 {\n color: #b71c1c !important;\n}\n\n.red-waves.waves-darken-4 .waves-ripple {\n background-color: #b71c1c !important;\n}\n\n.red.accent-1 {\n background-color: #ff8a80 !important;\n}\n\n.red-text.text-accent-1 {\n color: #ff8a80 !important;\n}\n\n.red-waves.waves-accent-1 .waves-ripple {\n background-color: #ff8a80 !important;\n}\n\n.red.accent-2 {\n background-color: #ff5252 !important;\n}\n\n.red-text.text-accent-2 {\n color: #ff5252 !important;\n}\n\n.red-waves.waves-accent-2 .waves-ripple {\n background-color: #ff5252 !important;\n}\n\n.red.accent-3 {\n background-color: #ff1744 !important;\n}\n\n.red-text.text-accent-3 {\n color: #ff1744 !important;\n}\n\n.red-waves.waves-accent-3 .waves-ripple {\n background-color: #ff1744 !important;\n}\n\n.red.accent-4 {\n background-color: #d50000 !important;\n}\n\n.red-text.text-accent-4 {\n color: #d50000 !important;\n}\n\n.red-waves.waves-accent-4 .waves-ripple {\n background-color: #d50000 !important;\n}\n\n.pink {\n background-color: #e91e63 !important;\n}\n\n.pink-text {\n color: #e91e63 !important;\n}\n\n.pink-waves .waves-ripple {\n background-color: #e91e63 !important;\n}\n\n.pink.lighten-5 {\n background-color: #fce4ec !important;\n}\n\n.pink-text.text-lighten-5 {\n color: #fce4ec !important;\n}\n\n.pink-waves.waves-lighten-5 .waves-ripple {\n background-color: #fce4ec !important;\n}\n\n.pink.lighten-4 {\n background-color: #f8bbd0 !important;\n}\n\n.pink-text.text-lighten-4 {\n color: #f8bbd0 !important;\n}\n\n.pink-waves.waves-lighten-4 .waves-ripple {\n background-color: #f8bbd0 !important;\n}\n\n.pink.lighten-3 {\n background-color: #f48fb1 !important;\n}\n\n.pink-text.text-lighten-3 {\n color: #f48fb1 !important;\n}\n\n.pink-waves.waves-lighten-3 .waves-ripple {\n background-color: #f48fb1 !important;\n}\n\n.pink.lighten-2 {\n background-color: #f06292 !important;\n}\n\n.pink-text.text-lighten-2 {\n color: #f06292 !important;\n}\n\n.pink-waves.waves-lighten-2 .waves-ripple {\n background-color: #f06292 !important;\n}\n\n.pink.lighten-1 {\n background-color: #ec407a !important;\n}\n\n.pink-text.text-lighten-1 {\n color: #ec407a !important;\n}\n\n.pink-waves.waves-lighten-1 .waves-ripple {\n background-color: #ec407a !important;\n}\n\n.pink.darken-1 {\n background-color: #d81b60 !important;\n}\n\n.pink-text.text-darken-1 {\n color: #d81b60 !important;\n}\n\n.pink-waves.waves-darken-1 .waves-ripple {\n background-color: #d81b60 !important;\n}\n\n.pink.darken-2 {\n background-color: #c2185b !important;\n}\n\n.pink-text.text-darken-2 {\n color: #c2185b !important;\n}\n\n.pink-waves.waves-darken-2 .waves-ripple {\n background-color: #c2185b !important;\n}\n\n.pink.darken-3 {\n background-color: #ad1457 !important;\n}\n\n.pink-text.text-darken-3 {\n color: #ad1457 !important;\n}\n\n.pink-waves.waves-darken-3 .waves-ripple {\n background-color: #ad1457 !important;\n}\n\n.pink.darken-4 {\n background-color: #880e4f !important;\n}\n\n.pink-text.text-darken-4 {\n color: #880e4f !important;\n}\n\n.pink-waves.waves-darken-4 .waves-ripple {\n background-color: #880e4f !important;\n}\n\n.pink.accent-1 {\n background-color: #ff80ab !important;\n}\n\n.pink-text.text-accent-1 {\n color: #ff80ab !important;\n}\n\n.pink-waves.waves-accent-1 .waves-ripple {\n background-color: #ff80ab !important;\n}\n\n.pink.accent-2 {\n background-color: #ff4081 !important;\n}\n\n.pink-text.text-accent-2 {\n color: #ff4081 !important;\n}\n\n.pink-waves.waves-accent-2 .waves-ripple {\n background-color: #ff4081 !important;\n}\n\n.pink.accent-3 {\n background-color: #f50057 !important;\n}\n\n.pink-text.text-accent-3 {\n color: #f50057 !important;\n}\n\n.pink-waves.waves-accent-3 .waves-ripple {\n background-color: #f50057 !important;\n}\n\n.pink.accent-4 {\n background-color: #c51162 !important;\n}\n\n.pink-text.text-accent-4 {\n color: #c51162 !important;\n}\n\n.pink-waves.waves-accent-4 .waves-ripple {\n background-color: #c51162 !important;\n}\n\n.purple {\n background-color: #9c27b0 !important;\n}\n\n.purple-text {\n color: #9c27b0 !important;\n}\n\n.purple-waves .waves-ripple {\n background-color: #9c27b0 !important;\n}\n\n.purple.lighten-5 {\n background-color: #f3e5f5 !important;\n}\n\n.purple-text.text-lighten-5 {\n color: #f3e5f5 !important;\n}\n\n.purple-waves.waves-lighten-5 .waves-ripple {\n background-color: #f3e5f5 !important;\n}\n\n.purple.lighten-4 {\n background-color: #e1bee7 !important;\n}\n\n.purple-text.text-lighten-4 {\n color: #e1bee7 !important;\n}\n\n.purple-waves.waves-lighten-4 .waves-ripple {\n background-color: #e1bee7 !important;\n}\n\n.purple.lighten-3 {\n background-color: #ce93d8 !important;\n}\n\n.purple-text.text-lighten-3 {\n color: #ce93d8 !important;\n}\n\n.purple-waves.waves-lighten-3 .waves-ripple {\n background-color: #ce93d8 !important;\n}\n\n.purple.lighten-2 {\n background-color: #ba68c8 !important;\n}\n\n.purple-text.text-lighten-2 {\n color: #ba68c8 !important;\n}\n\n.purple-waves.waves-lighten-2 .waves-ripple {\n background-color: #ba68c8 !important;\n}\n\n.purple.lighten-1 {\n background-color: #ab47bc !important;\n}\n\n.purple-text.text-lighten-1 {\n color: #ab47bc !important;\n}\n\n.purple-waves.waves-lighten-1 .waves-ripple {\n background-color: #ab47bc !important;\n}\n\n.purple.darken-1 {\n background-color: #8e24aa !important;\n}\n\n.purple-text.text-darken-1 {\n color: #8e24aa !important;\n}\n\n.purple-waves.waves-darken-1 .waves-ripple {\n background-color: #8e24aa !important;\n}\n\n.purple.darken-2 {\n background-color: #7b1fa2 !important;\n}\n\n.purple-text.text-darken-2 {\n color: #7b1fa2 !important;\n}\n\n.purple-waves.waves-darken-2 .waves-ripple {\n background-color: #7b1fa2 !important;\n}\n\n.purple.darken-3 {\n background-color: #6a1b9a !important;\n}\n\n.purple-text.text-darken-3 {\n color: #6a1b9a !important;\n}\n\n.purple-waves.waves-darken-3 .waves-ripple {\n background-color: #6a1b9a !important;\n}\n\n.purple.darken-4 {\n background-color: #4a148c !important;\n}\n\n.purple-text.text-darken-4 {\n color: #4a148c !important;\n}\n\n.purple-waves.waves-darken-4 .waves-ripple {\n background-color: #4a148c !important;\n}\n\n.purple.accent-1 {\n background-color: #ea80fc !important;\n}\n\n.purple-text.text-accent-1 {\n color: #ea80fc !important;\n}\n\n.purple-waves.waves-accent-1 .waves-ripple {\n background-color: #ea80fc !important;\n}\n\n.purple.accent-2 {\n background-color: #e040fb !important;\n}\n\n.purple-text.text-accent-2 {\n color: #e040fb !important;\n}\n\n.purple-waves.waves-accent-2 .waves-ripple {\n background-color: #e040fb !important;\n}\n\n.purple.accent-3 {\n background-color: #d500f9 !important;\n}\n\n.purple-text.text-accent-3 {\n color: #d500f9 !important;\n}\n\n.purple-waves.waves-accent-3 .waves-ripple {\n background-color: #d500f9 !important;\n}\n\n.purple.accent-4 {\n background-color: #aa00ff !important;\n}\n\n.purple-text.text-accent-4 {\n color: #aa00ff !important;\n}\n\n.purple-waves.waves-accent-4 .waves-ripple {\n background-color: #aa00ff !important;\n}\n\n.deep-purple {\n background-color: #673ab7 !important;\n}\n\n.deep-purple-text {\n color: #673ab7 !important;\n}\n\n.deep-purple-waves .waves-ripple {\n background-color: #673ab7 !important;\n}\n\n.deep-purple.lighten-5 {\n background-color: #ede7f6 !important;\n}\n\n.deep-purple-text.text-lighten-5 {\n color: #ede7f6 !important;\n}\n\n.deep-purple-waves.waves-lighten-5 .waves-ripple {\n background-color: #ede7f6 !important;\n}\n\n.deep-purple.lighten-4 {\n background-color: #d1c4e9 !important;\n}\n\n.deep-purple-text.text-lighten-4 {\n color: #d1c4e9 !important;\n}\n\n.deep-purple-waves.waves-lighten-4 .waves-ripple {\n background-color: #d1c4e9 !important;\n}\n\n.deep-purple.lighten-3 {\n background-color: #b39ddb !important;\n}\n\n.deep-purple-text.text-lighten-3 {\n color: #b39ddb !important;\n}\n\n.deep-purple-waves.waves-lighten-3 .waves-ripple {\n background-color: #b39ddb !important;\n}\n\n.deep-purple.lighten-2 {\n background-color: #9575cd !important;\n}\n\n.deep-purple-text.text-lighten-2 {\n color: #9575cd !important;\n}\n\n.deep-purple-waves.waves-lighten-2 .waves-ripple {\n background-color: #9575cd !important;\n}\n\n.deep-purple.lighten-1 {\n background-color: #7e57c2 !important;\n}\n\n.deep-purple-text.text-lighten-1 {\n color: #7e57c2 !important;\n}\n\n.deep-purple-waves.waves-lighten-1 .waves-ripple {\n background-color: #7e57c2 !important;\n}\n\n.deep-purple.darken-1 {\n background-color: #5e35b1 !important;\n}\n\n.deep-purple-text.text-darken-1 {\n color: #5e35b1 !important;\n}\n\n.deep-purple-waves.waves-darken-1 .waves-ripple {\n background-color: #5e35b1 !important;\n}\n\n.deep-purple.darken-2 {\n background-color: #512da8 !important;\n}\n\n.deep-purple-text.text-darken-2 {\n color: #512da8 !important;\n}\n\n.deep-purple-waves.waves-darken-2 .waves-ripple {\n background-color: #512da8 !important;\n}\n\n.deep-purple.darken-3 {\n background-color: #4527a0 !important;\n}\n\n.deep-purple-text.text-darken-3 {\n color: #4527a0 !important;\n}\n\n.deep-purple-waves.waves-darken-3 .waves-ripple {\n background-color: #4527a0 !important;\n}\n\n.deep-purple.darken-4 {\n background-color: #311b92 !important;\n}\n\n.deep-purple-text.text-darken-4 {\n color: #311b92 !important;\n}\n\n.deep-purple-waves.waves-darken-4 .waves-ripple {\n background-color: #311b92 !important;\n}\n\n.deep-purple.accent-1 {\n background-color: #b388ff !important;\n}\n\n.deep-purple-text.text-accent-1 {\n color: #b388ff !important;\n}\n\n.deep-purple-waves.waves-accent-1 .waves-ripple {\n background-color: #b388ff !important;\n}\n\n.deep-purple.accent-2 {\n background-color: #7c4dff !important;\n}\n\n.deep-purple-text.text-accent-2 {\n color: #7c4dff !important;\n}\n\n.deep-purple-waves.waves-accent-2 .waves-ripple {\n background-color: #7c4dff !important;\n}\n\n.deep-purple.accent-3 {\n background-color: #651fff !important;\n}\n\n.deep-purple-text.text-accent-3 {\n color: #651fff !important;\n}\n\n.deep-purple-waves.waves-accent-3 .waves-ripple {\n background-color: #651fff !important;\n}\n\n.deep-purple.accent-4 {\n background-color: #6200ea !important;\n}\n\n.deep-purple-text.text-accent-4 {\n color: #6200ea !important;\n}\n\n.deep-purple-waves.waves-accent-4 .waves-ripple {\n background-color: #6200ea !important;\n}\n\n.indigo {\n background-color: #3f51b5 !important;\n}\n\n.indigo-text {\n color: #3f51b5 !important;\n}\n\n.indigo-waves .waves-ripple {\n background-color: #3f51b5 !important;\n}\n\n.indigo.lighten-5 {\n background-color: #e8eaf6 !important;\n}\n\n.indigo-text.text-lighten-5 {\n color: #e8eaf6 !important;\n}\n\n.indigo-waves.waves-lighten-5 .waves-ripple {\n background-color: #e8eaf6 !important;\n}\n\n.indigo.lighten-4 {\n background-color: #c5cae9 !important;\n}\n\n.indigo-text.text-lighten-4 {\n color: #c5cae9 !important;\n}\n\n.indigo-waves.waves-lighten-4 .waves-ripple {\n background-color: #c5cae9 !important;\n}\n\n.indigo.lighten-3 {\n background-color: #9fa8da !important;\n}\n\n.indigo-text.text-lighten-3 {\n color: #9fa8da !important;\n}\n\n.indigo-waves.waves-lighten-3 .waves-ripple {\n background-color: #9fa8da !important;\n}\n\n.indigo.lighten-2 {\n background-color: #7986cb !important;\n}\n\n.indigo-text.text-lighten-2 {\n color: #7986cb !important;\n}\n\n.indigo-waves.waves-lighten-2 .waves-ripple {\n background-color: #7986cb !important;\n}\n\n.indigo.lighten-1 {\n background-color: #5c6bc0 !important;\n}\n\n.indigo-text.text-lighten-1 {\n color: #5c6bc0 !important;\n}\n\n.indigo-waves.waves-lighten-1 .waves-ripple {\n background-color: #5c6bc0 !important;\n}\n\n.indigo.darken-1 {\n background-color: #3949ab !important;\n}\n\n.indigo-text.text-darken-1 {\n color: #3949ab !important;\n}\n\n.indigo-waves.waves-darken-1 .waves-ripple {\n background-color: #3949ab !important;\n}\n\n.indigo.darken-2 {\n background-color: #303f9f !important;\n}\n\n.indigo-text.text-darken-2 {\n color: #303f9f !important;\n}\n\n.indigo-waves.waves-darken-2 .waves-ripple {\n background-color: #303f9f !important;\n}\n\n.indigo.darken-3 {\n background-color: #283593 !important;\n}\n\n.indigo-text.text-darken-3 {\n color: #283593 !important;\n}\n\n.indigo-waves.waves-darken-3 .waves-ripple {\n background-color: #283593 !important;\n}\n\n.indigo.darken-4 {\n background-color: #1a237e !important;\n}\n\n.indigo-text.text-darken-4 {\n color: #1a237e !important;\n}\n\n.indigo-waves.waves-darken-4 .waves-ripple {\n background-color: #1a237e !important;\n}\n\n.indigo.accent-1 {\n background-color: #8c9eff !important;\n}\n\n.indigo-text.text-accent-1 {\n color: #8c9eff !important;\n}\n\n.indigo-waves.waves-accent-1 .waves-ripple {\n background-color: #8c9eff !important;\n}\n\n.indigo.accent-2 {\n background-color: #536dfe !important;\n}\n\n.indigo-text.text-accent-2 {\n color: #536dfe !important;\n}\n\n.indigo-waves.waves-accent-2 .waves-ripple {\n background-color: #536dfe !important;\n}\n\n.indigo.accent-3 {\n background-color: #3d5afe !important;\n}\n\n.indigo-text.text-accent-3 {\n color: #3d5afe !important;\n}\n\n.indigo-waves.waves-accent-3 .waves-ripple {\n background-color: #3d5afe !important;\n}\n\n.indigo.accent-4 {\n background-color: #304ffe !important;\n}\n\n.indigo-text.text-accent-4 {\n color: #304ffe !important;\n}\n\n.indigo-waves.waves-accent-4 .waves-ripple {\n background-color: #304ffe !important;\n}\n\n.blue {\n background-color: #2196f3 !important;\n}\n\n.blue-text {\n color: #2196f3 !important;\n}\n\n.blue-waves .waves-ripple {\n background-color: #2196f3 !important;\n}\n\n.blue.lighten-5 {\n background-color: #e3f2fd !important;\n}\n\n.blue-text.text-lighten-5 {\n color: #e3f2fd !important;\n}\n\n.blue-waves.waves-lighten-5 .waves-ripple {\n background-color: #e3f2fd !important;\n}\n\n.blue.lighten-4 {\n background-color: #bbdefb !important;\n}\n\n.blue-text.text-lighten-4 {\n color: #bbdefb !important;\n}\n\n.blue-waves.waves-lighten-4 .waves-ripple {\n background-color: #bbdefb !important;\n}\n\n.blue.lighten-3 {\n background-color: #90caf9 !important;\n}\n\n.blue-text.text-lighten-3 {\n color: #90caf9 !important;\n}\n\n.blue-waves.waves-lighten-3 .waves-ripple {\n background-color: #90caf9 !important;\n}\n\n.blue.lighten-2 {\n background-color: #64b5f6 !important;\n}\n\n.blue-text.text-lighten-2 {\n color: #64b5f6 !important;\n}\n\n.blue-waves.waves-lighten-2 .waves-ripple {\n background-color: #64b5f6 !important;\n}\n\n.blue.lighten-1 {\n background-color: #42a5f5 !important;\n}\n\n.blue-text.text-lighten-1 {\n color: #42a5f5 !important;\n}\n\n.blue-waves.waves-lighten-1 .waves-ripple {\n background-color: #42a5f5 !important;\n}\n\n.blue.darken-1 {\n background-color: #1e88e5 !important;\n}\n\n.blue-text.text-darken-1 {\n color: #1e88e5 !important;\n}\n\n.blue-waves.waves-darken-1 .waves-ripple {\n background-color: #1e88e5 !important;\n}\n\n.blue.darken-2 {\n background-color: #1976d2 !important;\n}\n\n.blue-text.text-darken-2 {\n color: #1976d2 !important;\n}\n\n.blue-waves.waves-darken-2 .waves-ripple {\n background-color: #1976d2 !important;\n}\n\n.blue.darken-3 {\n background-color: #1565c0 !important;\n}\n\n.blue-text.text-darken-3 {\n color: #1565c0 !important;\n}\n\n.blue-waves.waves-darken-3 .waves-ripple {\n background-color: #1565c0 !important;\n}\n\n.blue.darken-4 {\n background-color: #0d47a1 !important;\n}\n\n.blue-text.text-darken-4 {\n color: #0d47a1 !important;\n}\n\n.blue-waves.waves-darken-4 .waves-ripple {\n background-color: #0d47a1 !important;\n}\n\n.blue.accent-1 {\n background-color: #82b1ff !important;\n}\n\n.blue-text.text-accent-1 {\n color: #82b1ff !important;\n}\n\n.blue-waves.waves-accent-1 .waves-ripple {\n background-color: #82b1ff !important;\n}\n\n.blue.accent-2 {\n background-color: #448aff !important;\n}\n\n.blue-text.text-accent-2 {\n color: #448aff !important;\n}\n\n.blue-waves.waves-accent-2 .waves-ripple {\n background-color: #448aff !important;\n}\n\n.blue.accent-3 {\n background-color: #2979ff !important;\n}\n\n.blue-text.text-accent-3 {\n color: #2979ff !important;\n}\n\n.blue-waves.waves-accent-3 .waves-ripple {\n background-color: #2979ff !important;\n}\n\n.blue.accent-4 {\n background-color: #2962ff !important;\n}\n\n.blue-text.text-accent-4 {\n color: #2962ff !important;\n}\n\n.blue-waves.waves-accent-4 .waves-ripple {\n background-color: #2962ff !important;\n}\n\n.light-blue {\n background-color: #03a9f4 !important;\n}\n\n.light-blue-text {\n color: #03a9f4 !important;\n}\n\n.light-blue-waves .waves-ripple {\n background-color: #03a9f4 !important;\n}\n\n.light-blue.lighten-5 {\n background-color: #e1f5fe !important;\n}\n\n.light-blue-text.text-lighten-5 {\n color: #e1f5fe !important;\n}\n\n.light-blue-waves.waves-lighten-5 .waves-ripple {\n background-color: #e1f5fe !important;\n}\n\n.light-blue.lighten-4 {\n background-color: #b3e5fc !important;\n}\n\n.light-blue-text.text-lighten-4 {\n color: #b3e5fc !important;\n}\n\n.light-blue-waves.waves-lighten-4 .waves-ripple {\n background-color: #b3e5fc !important;\n}\n\n.light-blue.lighten-3 {\n background-color: #81d4fa !important;\n}\n\n.light-blue-text.text-lighten-3 {\n color: #81d4fa !important;\n}\n\n.light-blue-waves.waves-lighten-3 .waves-ripple {\n background-color: #81d4fa !important;\n}\n\n.light-blue.lighten-2 {\n background-color: #4fc3f7 !important;\n}\n\n.light-blue-text.text-lighten-2 {\n color: #4fc3f7 !important;\n}\n\n.light-blue-waves.waves-lighten-2 .waves-ripple {\n background-color: #4fc3f7 !important;\n}\n\n.light-blue.lighten-1 {\n background-color: #29b6f6 !important;\n}\n\n.light-blue-text.text-lighten-1 {\n color: #29b6f6 !important;\n}\n\n.light-blue-waves.waves-lighten-1 .waves-ripple {\n background-color: #29b6f6 !important;\n}\n\n.light-blue.darken-1 {\n background-color: #039be5 !important;\n}\n\n.light-blue-text.text-darken-1 {\n color: #039be5 !important;\n}\n\n.light-blue-waves.waves-darken-1 .waves-ripple {\n background-color: #039be5 !important;\n}\n\n.light-blue.darken-2 {\n background-color: #0288d1 !important;\n}\n\n.light-blue-text.text-darken-2 {\n color: #0288d1 !important;\n}\n\n.light-blue-waves.waves-darken-2 .waves-ripple {\n background-color: #0288d1 !important;\n}\n\n.light-blue.darken-3 {\n background-color: #0277bd !important;\n}\n\n.light-blue-text.text-darken-3 {\n color: #0277bd !important;\n}\n\n.light-blue-waves.waves-darken-3 .waves-ripple {\n background-color: #0277bd !important;\n}\n\n.light-blue.darken-4 {\n background-color: #01579b !important;\n}\n\n.light-blue-text.text-darken-4 {\n color: #01579b !important;\n}\n\n.light-blue-waves.waves-darken-4 .waves-ripple {\n background-color: #01579b !important;\n}\n\n.light-blue.accent-1 {\n background-color: #80d8ff !important;\n}\n\n.light-blue-text.text-accent-1 {\n color: #80d8ff !important;\n}\n\n.light-blue-waves.waves-accent-1 .waves-ripple {\n background-color: #80d8ff !important;\n}\n\n.light-blue.accent-2 {\n background-color: #40c4ff !important;\n}\n\n.light-blue-text.text-accent-2 {\n color: #40c4ff !important;\n}\n\n.light-blue-waves.waves-accent-2 .waves-ripple {\n background-color: #40c4ff !important;\n}\n\n.light-blue.accent-3 {\n background-color: #00b0ff !important;\n}\n\n.light-blue-text.text-accent-3 {\n color: #00b0ff !important;\n}\n\n.light-blue-waves.waves-accent-3 .waves-ripple {\n background-color: #00b0ff !important;\n}\n\n.light-blue.accent-4 {\n background-color: #0091ea !important;\n}\n\n.light-blue-text.text-accent-4 {\n color: #0091ea !important;\n}\n\n.light-blue-waves.waves-accent-4 .waves-ripple {\n background-color: #0091ea !important;\n}\n\n.cyan {\n background-color: #00bcd4 !important;\n}\n\n.cyan-text {\n color: #00bcd4 !important;\n}\n\n.cyan-waves .waves-ripple {\n background-color: #00bcd4 !important;\n}\n\n.cyan.lighten-5 {\n background-color: #e0f7fa !important;\n}\n\n.cyan-text.text-lighten-5 {\n color: #e0f7fa !important;\n}\n\n.cyan-waves.waves-lighten-5 .waves-ripple {\n background-color: #e0f7fa !important;\n}\n\n.cyan.lighten-4 {\n background-color: #b2ebf2 !important;\n}\n\n.cyan-text.text-lighten-4 {\n color: #b2ebf2 !important;\n}\n\n.cyan-waves.waves-lighten-4 .waves-ripple {\n background-color: #b2ebf2 !important;\n}\n\n.cyan.lighten-3 {\n background-color: #80deea !important;\n}\n\n.cyan-text.text-lighten-3 {\n color: #80deea !important;\n}\n\n.cyan-waves.waves-lighten-3 .waves-ripple {\n background-color: #80deea !important;\n}\n\n.cyan.lighten-2 {\n background-color: #4dd0e1 !important;\n}\n\n.cyan-text.text-lighten-2 {\n color: #4dd0e1 !important;\n}\n\n.cyan-waves.waves-lighten-2 .waves-ripple {\n background-color: #4dd0e1 !important;\n}\n\n.cyan.lighten-1 {\n background-color: #26c6da !important;\n}\n\n.cyan-text.text-lighten-1 {\n color: #26c6da !important;\n}\n\n.cyan-waves.waves-lighten-1 .waves-ripple {\n background-color: #26c6da !important;\n}\n\n.cyan.darken-1 {\n background-color: #00acc1 !important;\n}\n\n.cyan-text.text-darken-1 {\n color: #00acc1 !important;\n}\n\n.cyan-waves.waves-darken-1 .waves-ripple {\n background-color: #00acc1 !important;\n}\n\n.cyan.darken-2 {\n background-color: #0097a7 !important;\n}\n\n.cyan-text.text-darken-2 {\n color: #0097a7 !important;\n}\n\n.cyan-waves.waves-darken-2 .waves-ripple {\n background-color: #0097a7 !important;\n}\n\n.cyan.darken-3 {\n background-color: #00838f !important;\n}\n\n.cyan-text.text-darken-3 {\n color: #00838f !important;\n}\n\n.cyan-waves.waves-darken-3 .waves-ripple {\n background-color: #00838f !important;\n}\n\n.cyan.darken-4 {\n background-color: #006064 !important;\n}\n\n.cyan-text.text-darken-4 {\n color: #006064 !important;\n}\n\n.cyan-waves.waves-darken-4 .waves-ripple {\n background-color: #006064 !important;\n}\n\n.cyan.accent-1 {\n background-color: #84ffff !important;\n}\n\n.cyan-text.text-accent-1 {\n color: #84ffff !important;\n}\n\n.cyan-waves.waves-accent-1 .waves-ripple {\n background-color: #84ffff !important;\n}\n\n.cyan.accent-2 {\n background-color: #18ffff !important;\n}\n\n.cyan-text.text-accent-2 {\n color: #18ffff !important;\n}\n\n.cyan-waves.waves-accent-2 .waves-ripple {\n background-color: #18ffff !important;\n}\n\n.cyan.accent-3 {\n background-color: #00e5ff !important;\n}\n\n.cyan-text.text-accent-3 {\n color: #00e5ff !important;\n}\n\n.cyan-waves.waves-accent-3 .waves-ripple {\n background-color: #00e5ff !important;\n}\n\n.cyan.accent-4 {\n background-color: #00b8d4 !important;\n}\n\n.cyan-text.text-accent-4 {\n color: #00b8d4 !important;\n}\n\n.cyan-waves.waves-accent-4 .waves-ripple {\n background-color: #00b8d4 !important;\n}\n\n.teal {\n background-color: #009688 !important;\n}\n\n.teal-text {\n color: #009688 !important;\n}\n\n.teal-waves .waves-ripple {\n background-color: #009688 !important;\n}\n\n.teal.lighten-5 {\n background-color: #e0f2f1 !important;\n}\n\n.teal-text.text-lighten-5 {\n color: #e0f2f1 !important;\n}\n\n.teal-waves.waves-lighten-5 .waves-ripple {\n background-color: #e0f2f1 !important;\n}\n\n.teal.lighten-4 {\n background-color: #b2dfdb !important;\n}\n\n.teal-text.text-lighten-4 {\n color: #b2dfdb !important;\n}\n\n.teal-waves.waves-lighten-4 .waves-ripple {\n background-color: #b2dfdb !important;\n}\n\n.teal.lighten-3 {\n background-color: #80cbc4 !important;\n}\n\n.teal-text.text-lighten-3 {\n color: #80cbc4 !important;\n}\n\n.teal-waves.waves-lighten-3 .waves-ripple {\n background-color: #80cbc4 !important;\n}\n\n.teal.lighten-2 {\n background-color: #4db6ac !important;\n}\n\n.teal-text.text-lighten-2 {\n color: #4db6ac !important;\n}\n\n.teal-waves.waves-lighten-2 .waves-ripple {\n background-color: #4db6ac !important;\n}\n\n.teal.lighten-1 {\n background-color: #26a69a !important;\n}\n\n.teal-text.text-lighten-1 {\n color: #26a69a !important;\n}\n\n.teal-waves.waves-lighten-1 .waves-ripple {\n background-color: #26a69a !important;\n}\n\n.teal.darken-1 {\n background-color: #00897b !important;\n}\n\n.teal-text.text-darken-1 {\n color: #00897b !important;\n}\n\n.teal-waves.waves-darken-1 .waves-ripple {\n background-color: #00897b !important;\n}\n\n.teal.darken-2 {\n background-color: #00796b !important;\n}\n\n.teal-text.text-darken-2 {\n color: #00796b !important;\n}\n\n.teal-waves.waves-darken-2 .waves-ripple {\n background-color: #00796b !important;\n}\n\n.teal.darken-3 {\n background-color: #00695c !important;\n}\n\n.teal-text.text-darken-3 {\n color: #00695c !important;\n}\n\n.teal-waves.waves-darken-3 .waves-ripple {\n background-color: #00695c !important;\n}\n\n.teal.darken-4 {\n background-color: #004d40 !important;\n}\n\n.teal-text.text-darken-4 {\n color: #004d40 !important;\n}\n\n.teal-waves.waves-darken-4 .waves-ripple {\n background-color: #004d40 !important;\n}\n\n.teal.accent-1 {\n background-color: #a7ffeb !important;\n}\n\n.teal-text.text-accent-1 {\n color: #a7ffeb !important;\n}\n\n.teal-waves.waves-accent-1 .waves-ripple {\n background-color: #a7ffeb !important;\n}\n\n.teal.accent-2 {\n background-color: #64ffda !important;\n}\n\n.teal-text.text-accent-2 {\n color: #64ffda !important;\n}\n\n.teal-waves.waves-accent-2 .waves-ripple {\n background-color: #64ffda !important;\n}\n\n.teal.accent-3 {\n background-color: #1de9b6 !important;\n}\n\n.teal-text.text-accent-3 {\n color: #1de9b6 !important;\n}\n\n.teal-waves.waves-accent-3 .waves-ripple {\n background-color: #1de9b6 !important;\n}\n\n.teal.accent-4 {\n background-color: #00bfa5 !important;\n}\n\n.teal-text.text-accent-4 {\n color: #00bfa5 !important;\n}\n\n.teal-waves.waves-accent-4 .waves-ripple {\n background-color: #00bfa5 !important;\n}\n\n.green {\n background-color: #4caf50 !important;\n}\n\n.green-text {\n color: #4caf50 !important;\n}\n\n.green-waves .waves-ripple {\n background-color: #4caf50 !important;\n}\n\n.green.lighten-5 {\n background-color: #e8f5e9 !important;\n}\n\n.green-text.text-lighten-5 {\n color: #e8f5e9 !important;\n}\n\n.green-waves.waves-lighten-5 .waves-ripple {\n background-color: #e8f5e9 !important;\n}\n\n.green.lighten-4 {\n background-color: #c8e6c9 !important;\n}\n\n.green-text.text-lighten-4 {\n color: #c8e6c9 !important;\n}\n\n.green-waves.waves-lighten-4 .waves-ripple {\n background-color: #c8e6c9 !important;\n}\n\n.green.lighten-3 {\n background-color: #a5d6a7 !important;\n}\n\n.green-text.text-lighten-3 {\n color: #a5d6a7 !important;\n}\n\n.green-waves.waves-lighten-3 .waves-ripple {\n background-color: #a5d6a7 !important;\n}\n\n.green.lighten-2 {\n background-color: #81c784 !important;\n}\n\n.green-text.text-lighten-2 {\n color: #81c784 !important;\n}\n\n.green-waves.waves-lighten-2 .waves-ripple {\n background-color: #81c784 !important;\n}\n\n.green.lighten-1 {\n background-color: #66bb6a !important;\n}\n\n.green-text.text-lighten-1 {\n color: #66bb6a !important;\n}\n\n.green-waves.waves-lighten-1 .waves-ripple {\n background-color: #66bb6a !important;\n}\n\n.green.darken-1 {\n background-color: #43a047 !important;\n}\n\n.green-text.text-darken-1 {\n color: #43a047 !important;\n}\n\n.green-waves.waves-darken-1 .waves-ripple {\n background-color: #43a047 !important;\n}\n\n.green.darken-2 {\n background-color: #388e3c !important;\n}\n\n.green-text.text-darken-2 {\n color: #388e3c !important;\n}\n\n.green-waves.waves-darken-2 .waves-ripple {\n background-color: #388e3c !important;\n}\n\n.green.darken-3 {\n background-color: #2e7d32 !important;\n}\n\n.green-text.text-darken-3 {\n color: #2e7d32 !important;\n}\n\n.green-waves.waves-darken-3 .waves-ripple {\n background-color: #2e7d32 !important;\n}\n\n.green.darken-4 {\n background-color: #1b5e20 !important;\n}\n\n.green-text.text-darken-4 {\n color: #1b5e20 !important;\n}\n\n.green-waves.waves-darken-4 .waves-ripple {\n background-color: #1b5e20 !important;\n}\n\n.green.accent-1 {\n background-color: #b9f6ca !important;\n}\n\n.green-text.text-accent-1 {\n color: #b9f6ca !important;\n}\n\n.green-waves.waves-accent-1 .waves-ripple {\n background-color: #b9f6ca !important;\n}\n\n.green.accent-2 {\n background-color: #69f0ae !important;\n}\n\n.green-text.text-accent-2 {\n color: #69f0ae !important;\n}\n\n.green-waves.waves-accent-2 .waves-ripple {\n background-color: #69f0ae !important;\n}\n\n.green.accent-3 {\n background-color: #00e676 !important;\n}\n\n.green-text.text-accent-3 {\n color: #00e676 !important;\n}\n\n.green-waves.waves-accent-3 .waves-ripple {\n background-color: #00e676 !important;\n}\n\n.green.accent-4 {\n background-color: #00c853 !important;\n}\n\n.green-text.text-accent-4 {\n color: #00c853 !important;\n}\n\n.green-waves.waves-accent-4 .waves-ripple {\n background-color: #00c853 !important;\n}\n\n.light-green {\n background-color: #8bc34a !important;\n}\n\n.light-green-text {\n color: #8bc34a !important;\n}\n\n.light-green-waves .waves-ripple {\n background-color: #8bc34a !important;\n}\n\n.light-green.lighten-5 {\n background-color: #f1f8e9 !important;\n}\n\n.light-green-text.text-lighten-5 {\n color: #f1f8e9 !important;\n}\n\n.light-green-waves.waves-lighten-5 .waves-ripple {\n background-color: #f1f8e9 !important;\n}\n\n.light-green.lighten-4 {\n background-color: #dcedc8 !important;\n}\n\n.light-green-text.text-lighten-4 {\n color: #dcedc8 !important;\n}\n\n.light-green-waves.waves-lighten-4 .waves-ripple {\n background-color: #dcedc8 !important;\n}\n\n.light-green.lighten-3 {\n background-color: #c5e1a5 !important;\n}\n\n.light-green-text.text-lighten-3 {\n color: #c5e1a5 !important;\n}\n\n.light-green-waves.waves-lighten-3 .waves-ripple {\n background-color: #c5e1a5 !important;\n}\n\n.light-green.lighten-2 {\n background-color: #aed581 !important;\n}\n\n.light-green-text.text-lighten-2 {\n color: #aed581 !important;\n}\n\n.light-green-waves.waves-lighten-2 .waves-ripple {\n background-color: #aed581 !important;\n}\n\n.light-green.lighten-1 {\n background-color: #9ccc65 !important;\n}\n\n.light-green-text.text-lighten-1 {\n color: #9ccc65 !important;\n}\n\n.light-green-waves.waves-lighten-1 .waves-ripple {\n background-color: #9ccc65 !important;\n}\n\n.light-green.darken-1 {\n background-color: #7cb342 !important;\n}\n\n.light-green-text.text-darken-1 {\n color: #7cb342 !important;\n}\n\n.light-green-waves.waves-darken-1 .waves-ripple {\n background-color: #7cb342 !important;\n}\n\n.light-green.darken-2 {\n background-color: #689f38 !important;\n}\n\n.light-green-text.text-darken-2 {\n color: #689f38 !important;\n}\n\n.light-green-waves.waves-darken-2 .waves-ripple {\n background-color: #689f38 !important;\n}\n\n.light-green.darken-3 {\n background-color: #558b2f !important;\n}\n\n.light-green-text.text-darken-3 {\n color: #558b2f !important;\n}\n\n.light-green-waves.waves-darken-3 .waves-ripple {\n background-color: #558b2f !important;\n}\n\n.light-green.darken-4 {\n background-color: #33691e !important;\n}\n\n.light-green-text.text-darken-4 {\n color: #33691e !important;\n}\n\n.light-green-waves.waves-darken-4 .waves-ripple {\n background-color: #33691e !important;\n}\n\n.light-green.accent-1 {\n background-color: #ccff90 !important;\n}\n\n.light-green-text.text-accent-1 {\n color: #ccff90 !important;\n}\n\n.light-green-waves.waves-accent-1 .waves-ripple {\n background-color: #ccff90 !important;\n}\n\n.light-green.accent-2 {\n background-color: #b2ff59 !important;\n}\n\n.light-green-text.text-accent-2 {\n color: #b2ff59 !important;\n}\n\n.light-green-waves.waves-accent-2 .waves-ripple {\n background-color: #b2ff59 !important;\n}\n\n.light-green.accent-3 {\n background-color: #76ff03 !important;\n}\n\n.light-green-text.text-accent-3 {\n color: #76ff03 !important;\n}\n\n.light-green-waves.waves-accent-3 .waves-ripple {\n background-color: #76ff03 !important;\n}\n\n.light-green.accent-4 {\n background-color: #64dd17 !important;\n}\n\n.light-green-text.text-accent-4 {\n color: #64dd17 !important;\n}\n\n.light-green-waves.waves-accent-4 .waves-ripple {\n background-color: #64dd17 !important;\n}\n\n.lime {\n background-color: #cddc39 !important;\n}\n\n.lime-text {\n color: #cddc39 !important;\n}\n\n.lime-waves .waves-ripple {\n background-color: #cddc39 !important;\n}\n\n.lime.lighten-5 {\n background-color: #f9fbe7 !important;\n}\n\n.lime-text.text-lighten-5 {\n color: #f9fbe7 !important;\n}\n\n.lime-waves.waves-lighten-5 .waves-ripple {\n background-color: #f9fbe7 !important;\n}\n\n.lime.lighten-4 {\n background-color: #f0f4c3 !important;\n}\n\n.lime-text.text-lighten-4 {\n color: #f0f4c3 !important;\n}\n\n.lime-waves.waves-lighten-4 .waves-ripple {\n background-color: #f0f4c3 !important;\n}\n\n.lime.lighten-3 {\n background-color: #e6ee9c !important;\n}\n\n.lime-text.text-lighten-3 {\n color: #e6ee9c !important;\n}\n\n.lime-waves.waves-lighten-3 .waves-ripple {\n background-color: #e6ee9c !important;\n}\n\n.lime.lighten-2 {\n background-color: #dce775 !important;\n}\n\n.lime-text.text-lighten-2 {\n color: #dce775 !important;\n}\n\n.lime-waves.waves-lighten-2 .waves-ripple {\n background-color: #dce775 !important;\n}\n\n.lime.lighten-1 {\n background-color: #d4e157 !important;\n}\n\n.lime-text.text-lighten-1 {\n color: #d4e157 !important;\n}\n\n.lime-waves.waves-lighten-1 .waves-ripple {\n background-color: #d4e157 !important;\n}\n\n.lime.darken-1 {\n background-color: #c0ca33 !important;\n}\n\n.lime-text.text-darken-1 {\n color: #c0ca33 !important;\n}\n\n.lime-waves.waves-darken-1 .waves-ripple {\n background-color: #c0ca33 !important;\n}\n\n.lime.darken-2 {\n background-color: #afb42b !important;\n}\n\n.lime-text.text-darken-2 {\n color: #afb42b !important;\n}\n\n.lime-waves.waves-darken-2 .waves-ripple {\n background-color: #afb42b !important;\n}\n\n.lime.darken-3 {\n background-color: #9e9d24 !important;\n}\n\n.lime-text.text-darken-3 {\n color: #9e9d24 !important;\n}\n\n.lime-waves.waves-darken-3 .waves-ripple {\n background-color: #9e9d24 !important;\n}\n\n.lime.darken-4 {\n background-color: #827717 !important;\n}\n\n.lime-text.text-darken-4 {\n color: #827717 !important;\n}\n\n.lime-waves.waves-darken-4 .waves-ripple {\n background-color: #827717 !important;\n}\n\n.lime.accent-1 {\n background-color: #f4ff81 !important;\n}\n\n.lime-text.text-accent-1 {\n color: #f4ff81 !important;\n}\n\n.lime-waves.waves-accent-1 .waves-ripple {\n background-color: #f4ff81 !important;\n}\n\n.lime.accent-2 {\n background-color: #eeff41 !important;\n}\n\n.lime-text.text-accent-2 {\n color: #eeff41 !important;\n}\n\n.lime-waves.waves-accent-2 .waves-ripple {\n background-color: #eeff41 !important;\n}\n\n.lime.accent-3 {\n background-color: #c6ff00 !important;\n}\n\n.lime-text.text-accent-3 {\n color: #c6ff00 !important;\n}\n\n.lime-waves.waves-accent-3 .waves-ripple {\n background-color: #c6ff00 !important;\n}\n\n.lime.accent-4 {\n background-color: #aeea00 !important;\n}\n\n.lime-text.text-accent-4 {\n color: #aeea00 !important;\n}\n\n.lime-waves.waves-accent-4 .waves-ripple {\n background-color: #aeea00 !important;\n}\n\n.yellow {\n background-color: #ffeb3b !important;\n}\n\n.yellow-text {\n color: #ffeb3b !important;\n}\n\n.yellow-waves .waves-ripple {\n background-color: #ffeb3b !important;\n}\n\n.yellow.lighten-5 {\n background-color: #fffde7 !important;\n}\n\n.yellow-text.text-lighten-5 {\n color: #fffde7 !important;\n}\n\n.yellow-waves.waves-lighten-5 .waves-ripple {\n background-color: #fffde7 !important;\n}\n\n.yellow.lighten-4 {\n background-color: #fff9c4 !important;\n}\n\n.yellow-text.text-lighten-4 {\n color: #fff9c4 !important;\n}\n\n.yellow-waves.waves-lighten-4 .waves-ripple {\n background-color: #fff9c4 !important;\n}\n\n.yellow.lighten-3 {\n background-color: #fff59d !important;\n}\n\n.yellow-text.text-lighten-3 {\n color: #fff59d !important;\n}\n\n.yellow-waves.waves-lighten-3 .waves-ripple {\n background-color: #fff59d !important;\n}\n\n.yellow.lighten-2 {\n background-color: #fff176 !important;\n}\n\n.yellow-text.text-lighten-2 {\n color: #fff176 !important;\n}\n\n.yellow-waves.waves-lighten-2 .waves-ripple {\n background-color: #fff176 !important;\n}\n\n.yellow.lighten-1 {\n background-color: #ffee58 !important;\n}\n\n.yellow-text.text-lighten-1 {\n color: #ffee58 !important;\n}\n\n.yellow-waves.waves-lighten-1 .waves-ripple {\n background-color: #ffee58 !important;\n}\n\n.yellow.darken-1 {\n background-color: #fdd835 !important;\n}\n\n.yellow-text.text-darken-1 {\n color: #fdd835 !important;\n}\n\n.yellow-waves.waves-darken-1 .waves-ripple {\n background-color: #fdd835 !important;\n}\n\n.yellow.darken-2 {\n background-color: #fbc02d !important;\n}\n\n.yellow-text.text-darken-2 {\n color: #fbc02d !important;\n}\n\n.yellow-waves.waves-darken-2 .waves-ripple {\n background-color: #fbc02d !important;\n}\n\n.yellow.darken-3 {\n background-color: #f9a825 !important;\n}\n\n.yellow-text.text-darken-3 {\n color: #f9a825 !important;\n}\n\n.yellow-waves.waves-darken-3 .waves-ripple {\n background-color: #f9a825 !important;\n}\n\n.yellow.darken-4 {\n background-color: #f57f17 !important;\n}\n\n.yellow-text.text-darken-4 {\n color: #f57f17 !important;\n}\n\n.yellow-waves.waves-darken-4 .waves-ripple {\n background-color: #f57f17 !important;\n}\n\n.yellow.accent-1 {\n background-color: #ffff8d !important;\n}\n\n.yellow-text.text-accent-1 {\n color: #ffff8d !important;\n}\n\n.yellow-waves.waves-accent-1 .waves-ripple {\n background-color: #ffff8d !important;\n}\n\n.yellow.accent-2 {\n background-color: #ffff00 !important;\n}\n\n.yellow-text.text-accent-2 {\n color: #ffff00 !important;\n}\n\n.yellow-waves.waves-accent-2 .waves-ripple {\n background-color: #ffff00 !important;\n}\n\n.yellow.accent-3 {\n background-color: #ffea00 !important;\n}\n\n.yellow-text.text-accent-3 {\n color: #ffea00 !important;\n}\n\n.yellow-waves.waves-accent-3 .waves-ripple {\n background-color: #ffea00 !important;\n}\n\n.yellow.accent-4 {\n background-color: #ffd600 !important;\n}\n\n.yellow-text.text-accent-4 {\n color: #ffd600 !important;\n}\n\n.yellow-waves.waves-accent-4 .waves-ripple {\n background-color: #ffd600 !important;\n}\n\n.amber {\n background-color: #ffc107 !important;\n}\n\n.amber-text {\n color: #ffc107 !important;\n}\n\n.amber-waves .waves-ripple {\n background-color: #ffc107 !important;\n}\n\n.amber.lighten-5 {\n background-color: #fff8e1 !important;\n}\n\n.amber-text.text-lighten-5 {\n color: #fff8e1 !important;\n}\n\n.amber-waves.waves-lighten-5 .waves-ripple {\n background-color: #fff8e1 !important;\n}\n\n.amber.lighten-4 {\n background-color: #ffecb3 !important;\n}\n\n.amber-text.text-lighten-4 {\n color: #ffecb3 !important;\n}\n\n.amber-waves.waves-lighten-4 .waves-ripple {\n background-color: #ffecb3 !important;\n}\n\n.amber.lighten-3 {\n background-color: #ffe082 !important;\n}\n\n.amber-text.text-lighten-3 {\n color: #ffe082 !important;\n}\n\n.amber-waves.waves-lighten-3 .waves-ripple {\n background-color: #ffe082 !important;\n}\n\n.amber.lighten-2 {\n background-color: #ffd54f !important;\n}\n\n.amber-text.text-lighten-2 {\n color: #ffd54f !important;\n}\n\n.amber-waves.waves-lighten-2 .waves-ripple {\n background-color: #ffd54f !important;\n}\n\n.amber.lighten-1 {\n background-color: #ffca28 !important;\n}\n\n.amber-text.text-lighten-1 {\n color: #ffca28 !important;\n}\n\n.amber-waves.waves-lighten-1 .waves-ripple {\n background-color: #ffca28 !important;\n}\n\n.amber.darken-1 {\n background-color: #ffb300 !important;\n}\n\n.amber-text.text-darken-1 {\n color: #ffb300 !important;\n}\n\n.amber-waves.waves-darken-1 .waves-ripple {\n background-color: #ffb300 !important;\n}\n\n.amber.darken-2 {\n background-color: #ffa000 !important;\n}\n\n.amber-text.text-darken-2 {\n color: #ffa000 !important;\n}\n\n.amber-waves.waves-darken-2 .waves-ripple {\n background-color: #ffa000 !important;\n}\n\n.amber.darken-3 {\n background-color: #ff8f00 !important;\n}\n\n.amber-text.text-darken-3 {\n color: #ff8f00 !important;\n}\n\n.amber-waves.waves-darken-3 .waves-ripple {\n background-color: #ff8f00 !important;\n}\n\n.amber.darken-4 {\n background-color: #ff6f00 !important;\n}\n\n.amber-text.text-darken-4 {\n color: #ff6f00 !important;\n}\n\n.amber-waves.waves-darken-4 .waves-ripple {\n background-color: #ff6f00 !important;\n}\n\n.amber.accent-1 {\n background-color: #ffe57f !important;\n}\n\n.amber-text.text-accent-1 {\n color: #ffe57f !important;\n}\n\n.amber-waves.waves-accent-1 .waves-ripple {\n background-color: #ffe57f !important;\n}\n\n.amber.accent-2 {\n background-color: #ffd740 !important;\n}\n\n.amber-text.text-accent-2 {\n color: #ffd740 !important;\n}\n\n.amber-waves.waves-accent-2 .waves-ripple {\n background-color: #ffd740 !important;\n}\n\n.amber.accent-3 {\n background-color: #ffc400 !important;\n}\n\n.amber-text.text-accent-3 {\n color: #ffc400 !important;\n}\n\n.amber-waves.waves-accent-3 .waves-ripple {\n background-color: #ffc400 !important;\n}\n\n.amber.accent-4 {\n background-color: #ffab00 !important;\n}\n\n.amber-text.text-accent-4 {\n color: #ffab00 !important;\n}\n\n.amber-waves.waves-accent-4 .waves-ripple {\n background-color: #ffab00 !important;\n}\n\n.orange {\n background-color: #ff9800 !important;\n}\n\n.orange-text {\n color: #ff9800 !important;\n}\n\n.orange-waves .waves-ripple {\n background-color: #ff9800 !important;\n}\n\n.orange.lighten-5 {\n background-color: #fff3e0 !important;\n}\n\n.orange-text.text-lighten-5 {\n color: #fff3e0 !important;\n}\n\n.orange-waves.waves-lighten-5 .waves-ripple {\n background-color: #fff3e0 !important;\n}\n\n.orange.lighten-4 {\n background-color: #ffe0b2 !important;\n}\n\n.orange-text.text-lighten-4 {\n color: #ffe0b2 !important;\n}\n\n.orange-waves.waves-lighten-4 .waves-ripple {\n background-color: #ffe0b2 !important;\n}\n\n.orange.lighten-3 {\n background-color: #ffcc80 !important;\n}\n\n.orange-text.text-lighten-3 {\n color: #ffcc80 !important;\n}\n\n.orange-waves.waves-lighten-3 .waves-ripple {\n background-color: #ffcc80 !important;\n}\n\n.orange.lighten-2 {\n background-color: #ffb74d !important;\n}\n\n.orange-text.text-lighten-2 {\n color: #ffb74d !important;\n}\n\n.orange-waves.waves-lighten-2 .waves-ripple {\n background-color: #ffb74d !important;\n}\n\n.orange.lighten-1 {\n background-color: #ffa726 !important;\n}\n\n.orange-text.text-lighten-1 {\n color: #ffa726 !important;\n}\n\n.orange-waves.waves-lighten-1 .waves-ripple {\n background-color: #ffa726 !important;\n}\n\n.orange.darken-1 {\n background-color: #fb8c00 !important;\n}\n\n.orange-text.text-darken-1 {\n color: #fb8c00 !important;\n}\n\n.orange-waves.waves-darken-1 .waves-ripple {\n background-color: #fb8c00 !important;\n}\n\n.orange.darken-2 {\n background-color: #f57c00 !important;\n}\n\n.orange-text.text-darken-2 {\n color: #f57c00 !important;\n}\n\n.orange-waves.waves-darken-2 .waves-ripple {\n background-color: #f57c00 !important;\n}\n\n.orange.darken-3 {\n background-color: #ef6c00 !important;\n}\n\n.orange-text.text-darken-3 {\n color: #ef6c00 !important;\n}\n\n.orange-waves.waves-darken-3 .waves-ripple {\n background-color: #ef6c00 !important;\n}\n\n.orange.darken-4 {\n background-color: #e65100 !important;\n}\n\n.orange-text.text-darken-4 {\n color: #e65100 !important;\n}\n\n.orange-waves.waves-darken-4 .waves-ripple {\n background-color: #e65100 !important;\n}\n\n.orange.accent-1 {\n background-color: #ffd180 !important;\n}\n\n.orange-text.text-accent-1 {\n color: #ffd180 !important;\n}\n\n.orange-waves.waves-accent-1 .waves-ripple {\n background-color: #ffd180 !important;\n}\n\n.orange.accent-2 {\n background-color: #ffab40 !important;\n}\n\n.orange-text.text-accent-2 {\n color: #ffab40 !important;\n}\n\n.orange-waves.waves-accent-2 .waves-ripple {\n background-color: #ffab40 !important;\n}\n\n.orange.accent-3 {\n background-color: #ff9100 !important;\n}\n\n.orange-text.text-accent-3 {\n color: #ff9100 !important;\n}\n\n.orange-waves.waves-accent-3 .waves-ripple {\n background-color: #ff9100 !important;\n}\n\n.orange.accent-4 {\n background-color: #ff6d00 !important;\n}\n\n.orange-text.text-accent-4 {\n color: #ff6d00 !important;\n}\n\n.orange-waves.waves-accent-4 .waves-ripple {\n background-color: #ff6d00 !important;\n}\n\n.deep-orange {\n background-color: #ff5722 !important;\n}\n\n.deep-orange-text {\n color: #ff5722 !important;\n}\n\n.deep-orange-waves .waves-ripple {\n background-color: #ff5722 !important;\n}\n\n.deep-orange.lighten-5 {\n background-color: #fbe9e7 !important;\n}\n\n.deep-orange-text.text-lighten-5 {\n color: #fbe9e7 !important;\n}\n\n.deep-orange-waves.waves-lighten-5 .waves-ripple {\n background-color: #fbe9e7 !important;\n}\n\n.deep-orange.lighten-4 {\n background-color: #ffccbc !important;\n}\n\n.deep-orange-text.text-lighten-4 {\n color: #ffccbc !important;\n}\n\n.deep-orange-waves.waves-lighten-4 .waves-ripple {\n background-color: #ffccbc !important;\n}\n\n.deep-orange.lighten-3 {\n background-color: #ffab91 !important;\n}\n\n.deep-orange-text.text-lighten-3 {\n color: #ffab91 !important;\n}\n\n.deep-orange-waves.waves-lighten-3 .waves-ripple {\n background-color: #ffab91 !important;\n}\n\n.deep-orange.lighten-2 {\n background-color: #ff8a65 !important;\n}\n\n.deep-orange-text.text-lighten-2 {\n color: #ff8a65 !important;\n}\n\n.deep-orange-waves.waves-lighten-2 .waves-ripple {\n background-color: #ff8a65 !important;\n}\n\n.deep-orange.lighten-1 {\n background-color: #ff7043 !important;\n}\n\n.deep-orange-text.text-lighten-1 {\n color: #ff7043 !important;\n}\n\n.deep-orange-waves.waves-lighten-1 .waves-ripple {\n background-color: #ff7043 !important;\n}\n\n.deep-orange.darken-1 {\n background-color: #f4511e !important;\n}\n\n.deep-orange-text.text-darken-1 {\n color: #f4511e !important;\n}\n\n.deep-orange-waves.waves-darken-1 .waves-ripple {\n background-color: #f4511e !important;\n}\n\n.deep-orange.darken-2 {\n background-color: #e64a19 !important;\n}\n\n.deep-orange-text.text-darken-2 {\n color: #e64a19 !important;\n}\n\n.deep-orange-waves.waves-darken-2 .waves-ripple {\n background-color: #e64a19 !important;\n}\n\n.deep-orange.darken-3 {\n background-color: #d84315 !important;\n}\n\n.deep-orange-text.text-darken-3 {\n color: #d84315 !important;\n}\n\n.deep-orange-waves.waves-darken-3 .waves-ripple {\n background-color: #d84315 !important;\n}\n\n.deep-orange.darken-4 {\n background-color: #bf360c !important;\n}\n\n.deep-orange-text.text-darken-4 {\n color: #bf360c !important;\n}\n\n.deep-orange-waves.waves-darken-4 .waves-ripple {\n background-color: #bf360c !important;\n}\n\n.deep-orange.accent-1 {\n background-color: #ff9e80 !important;\n}\n\n.deep-orange-text.text-accent-1 {\n color: #ff9e80 !important;\n}\n\n.deep-orange-waves.waves-accent-1 .waves-ripple {\n background-color: #ff9e80 !important;\n}\n\n.deep-orange.accent-2 {\n background-color: #ff6e40 !important;\n}\n\n.deep-orange-text.text-accent-2 {\n color: #ff6e40 !important;\n}\n\n.deep-orange-waves.waves-accent-2 .waves-ripple {\n background-color: #ff6e40 !important;\n}\n\n.deep-orange.accent-3 {\n background-color: #ff3d00 !important;\n}\n\n.deep-orange-text.text-accent-3 {\n color: #ff3d00 !important;\n}\n\n.deep-orange-waves.waves-accent-3 .waves-ripple {\n background-color: #ff3d00 !important;\n}\n\n.deep-orange.accent-4 {\n background-color: #dd2c00 !important;\n}\n\n.deep-orange-text.text-accent-4 {\n color: #dd2c00 !important;\n}\n\n.deep-orange-waves.waves-accent-4 .waves-ripple {\n background-color: #dd2c00 !important;\n}\n\n.brown {\n background-color: #795548 !important;\n}\n\n.brown-text {\n color: #795548 !important;\n}\n\n.brown-waves .waves-ripple {\n background-color: #795548 !important;\n}\n\n.brown.lighten-5 {\n background-color: #efebe9 !important;\n}\n\n.brown-text.text-lighten-5 {\n color: #efebe9 !important;\n}\n\n.brown-waves.waves-lighten-5 .waves-ripple {\n background-color: #efebe9 !important;\n}\n\n.brown.lighten-4 {\n background-color: #d7ccc8 !important;\n}\n\n.brown-text.text-lighten-4 {\n color: #d7ccc8 !important;\n}\n\n.brown-waves.waves-lighten-4 .waves-ripple {\n background-color: #d7ccc8 !important;\n}\n\n.brown.lighten-3 {\n background-color: #bcaaa4 !important;\n}\n\n.brown-text.text-lighten-3 {\n color: #bcaaa4 !important;\n}\n\n.brown-waves.waves-lighten-3 .waves-ripple {\n background-color: #bcaaa4 !important;\n}\n\n.brown.lighten-2 {\n background-color: #a1887f !important;\n}\n\n.brown-text.text-lighten-2 {\n color: #a1887f !important;\n}\n\n.brown-waves.waves-lighten-2 .waves-ripple {\n background-color: #a1887f !important;\n}\n\n.brown.lighten-1 {\n background-color: #8d6e63 !important;\n}\n\n.brown-text.text-lighten-1 {\n color: #8d6e63 !important;\n}\n\n.brown-waves.waves-lighten-1 .waves-ripple {\n background-color: #8d6e63 !important;\n}\n\n.brown.darken-1 {\n background-color: #6d4c41 !important;\n}\n\n.brown-text.text-darken-1 {\n color: #6d4c41 !important;\n}\n\n.brown-waves.waves-darken-1 .waves-ripple {\n background-color: #6d4c41 !important;\n}\n\n.brown.darken-2 {\n background-color: #5d4037 !important;\n}\n\n.brown-text.text-darken-2 {\n color: #5d4037 !important;\n}\n\n.brown-waves.waves-darken-2 .waves-ripple {\n background-color: #5d4037 !important;\n}\n\n.brown.darken-3 {\n background-color: #4e342e !important;\n}\n\n.brown-text.text-darken-3 {\n color: #4e342e !important;\n}\n\n.brown-waves.waves-darken-3 .waves-ripple {\n background-color: #4e342e !important;\n}\n\n.brown.darken-4 {\n background-color: #3e2723 !important;\n}\n\n.brown-text.text-darken-4 {\n color: #3e2723 !important;\n}\n\n.brown-waves.waves-darken-4 .waves-ripple {\n background-color: #3e2723 !important;\n}\n\n.blue-grey {\n background-color: #607d8b !important;\n}\n\n.blue-grey-text {\n color: #607d8b !important;\n}\n\n.blue-grey-waves .waves-ripple {\n background-color: #607d8b !important;\n}\n\n.blue-grey.lighten-5 {\n background-color: #eceff1 !important;\n}\n\n.blue-grey-text.text-lighten-5 {\n color: #eceff1 !important;\n}\n\n.blue-grey-waves.waves-lighten-5 .waves-ripple {\n background-color: #eceff1 !important;\n}\n\n.blue-grey.lighten-4 {\n background-color: #cfd8dc !important;\n}\n\n.blue-grey-text.text-lighten-4 {\n color: #cfd8dc !important;\n}\n\n.blue-grey-waves.waves-lighten-4 .waves-ripple {\n background-color: #cfd8dc !important;\n}\n\n.blue-grey.lighten-3 {\n background-color: #b0bec5 !important;\n}\n\n.blue-grey-text.text-lighten-3 {\n color: #b0bec5 !important;\n}\n\n.blue-grey-waves.waves-lighten-3 .waves-ripple {\n background-color: #b0bec5 !important;\n}\n\n.blue-grey.lighten-2 {\n background-color: #90a4ae !important;\n}\n\n.blue-grey-text.text-lighten-2 {\n color: #90a4ae !important;\n}\n\n.blue-grey-waves.waves-lighten-2 .waves-ripple {\n background-color: #90a4ae !important;\n}\n\n.blue-grey.lighten-1 {\n background-color: #78909c !important;\n}\n\n.blue-grey-text.text-lighten-1 {\n color: #78909c !important;\n}\n\n.blue-grey-waves.waves-lighten-1 .waves-ripple {\n background-color: #78909c !important;\n}\n\n.blue-grey.darken-1 {\n background-color: #546e7a !important;\n}\n\n.blue-grey-text.text-darken-1 {\n color: #546e7a !important;\n}\n\n.blue-grey-waves.waves-darken-1 .waves-ripple {\n background-color: #546e7a !important;\n}\n\n.blue-grey.darken-2 {\n background-color: #455a64 !important;\n}\n\n.blue-grey-text.text-darken-2 {\n color: #455a64 !important;\n}\n\n.blue-grey-waves.waves-darken-2 .waves-ripple {\n background-color: #455a64 !important;\n}\n\n.blue-grey.darken-3 {\n background-color: #37474f !important;\n}\n\n.blue-grey-text.text-darken-3 {\n color: #37474f !important;\n}\n\n.blue-grey-waves.waves-darken-3 .waves-ripple {\n background-color: #37474f !important;\n}\n\n.blue-grey.darken-4 {\n background-color: #263238 !important;\n}\n\n.blue-grey-text.text-darken-4 {\n color: #263238 !important;\n}\n\n.blue-grey-waves.waves-darken-4 .waves-ripple {\n background-color: #263238 !important;\n}\n\n.grey {\n background-color: #9e9e9e !important;\n}\n\n.grey-text {\n color: #9e9e9e !important;\n}\n\n.grey-waves .waves-ripple {\n background-color: #9e9e9e !important;\n}\n\n.grey.lighten-5 {\n background-color: #fafafa !important;\n}\n\n.grey-text.text-lighten-5 {\n color: #fafafa !important;\n}\n\n.grey-waves.waves-lighten-5 .waves-ripple {\n background-color: #fafafa !important;\n}\n\n.grey.lighten-4 {\n background-color: #f5f5f5 !important;\n}\n\n.grey-text.text-lighten-4 {\n color: #f5f5f5 !important;\n}\n\n.grey-waves.waves-lighten-4 .waves-ripple {\n background-color: #f5f5f5 !important;\n}\n\n.grey.lighten-3 {\n background-color: #eeeeee !important;\n}\n\n.grey-text.text-lighten-3 {\n color: #eeeeee !important;\n}\n\n.grey-waves.waves-lighten-3 .waves-ripple {\n background-color: #eeeeee !important;\n}\n\n.grey.lighten-2 {\n background-color: #e0e0e0 !important;\n}\n\n.grey-text.text-lighten-2 {\n color: #e0e0e0 !important;\n}\n\n.grey-waves.waves-lighten-2 .waves-ripple {\n background-color: #e0e0e0 !important;\n}\n\n.grey.lighten-1 {\n background-color: #bdbdbd !important;\n}\n\n.grey-text.text-lighten-1 {\n color: #bdbdbd !important;\n}\n\n.grey-waves.waves-lighten-1 .waves-ripple {\n background-color: #bdbdbd !important;\n}\n\n.grey.darken-1 {\n background-color: #757575 !important;\n}\n\n.grey-text.text-darken-1 {\n color: #757575 !important;\n}\n\n.grey-waves.waves-darken-1 .waves-ripple {\n background-color: #757575 !important;\n}\n\n.grey.darken-2 {\n background-color: #616161 !important;\n}\n\n.grey-text.text-darken-2 {\n color: #616161 !important;\n}\n\n.grey-waves.waves-darken-2 .waves-ripple {\n background-color: #616161 !important;\n}\n\n.grey.darken-3 {\n background-color: #424242 !important;\n}\n\n.grey-text.text-darken-3 {\n color: #424242 !important;\n}\n\n.grey-waves.waves-darken-3 .waves-ripple {\n background-color: #424242 !important;\n}\n\n.grey.darken-4 {\n background-color: #212121 !important;\n}\n\n.grey-text.text-darken-4 {\n color: #212121 !important;\n}\n\n.grey-waves.waves-darken-4 .waves-ripple {\n background-color: #212121 !important;\n}\n\n.black {\n background-color: #000000 !important;\n}\n\n.black-text {\n color: #000000 !important;\n}\n\n.white {\n background-color: #ffffff !important;\n}\n\n.white-text {\n color: #ffffff !important;\n}\n\n.transparent {\n background-color: transparent !important;\n}\n\n.transparent-text {\n color: transparent !important;\n}\n\n/**\n * prism.js Twilight theme\n * Based (more or less) on the Twilight theme originally of Textmate fame.\n * @author Remy Bach\n */\ncode[class*=language-],\npre[class*=language-] {\n color: white;\n background: none;\n font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace;\n text-align: left;\n text-shadow: 0 -0.1em 0.2em black;\n white-space: pre;\n word-spacing: normal;\n word-break: normal;\n word-wrap: normal;\n line-height: 1.5;\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4;\n -webkit-hyphens: none;\n -moz-hyphens: none;\n -ms-hyphens: none;\n hyphens: none;\n}\n\npre[class*=language-],\n:not(pre) > code[class*=language-] {\n background: hsl(0deg, 0%, 8%); /* #141414 */\n}\n\n/* Code blocks */\npre[class*=language-] {\n border-radius: 0.5em;\n border: 0.3em solid hsl(0deg, 0%, 33%); /* #282A2B */\n box-shadow: 1px 1px 0.5em black inset;\n margin: 0.5em 0;\n overflow: auto;\n padding: 1em;\n}\n\npre[class*=language-]::-moz-selection {\n /* Firefox */\n background: hsl(200deg, 4%, 16%); /* #282A2B */\n}\n\npre[class*=language-]::selection {\n /* Safari */\n background: hsl(200deg, 4%, 16%); /* #282A2B */\n}\n\n/* Text Selection colour */\npre[class*=language-]::-moz-selection, pre[class*=language-] ::-moz-selection,\ncode[class*=language-]::-moz-selection, code[class*=language-] ::-moz-selection {\n text-shadow: none;\n background: hsla(0deg, 0%, 93%, 0.15); /* #EDEDED */\n}\n\npre[class*=language-]::selection, pre[class*=language-] ::selection,\ncode[class*=language-]::selection, code[class*=language-] ::selection {\n text-shadow: none;\n background: hsla(0deg, 0%, 93%, 0.15); /* #EDEDED */\n}\n\n/* Inline code */\n:not(pre) > code[class*=language-] {\n border-radius: 0.3em;\n border: 0.13em solid hsl(0deg, 0%, 33%); /* #545454 */\n box-shadow: 1px 1px 0.3em -0.1em black inset;\n padding: 0.15em 0.2em 0.05em;\n white-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n color: hsl(0deg, 0%, 47%); /* #777777 */\n}\n\n.token.punctuation {\n opacity: 0.7;\n}\n\n.namespace {\n opacity: 0.7;\n}\n\n.token.tag,\n.token.boolean,\n.token.number,\n.token.deleted {\n color: hsl(14deg, 58%, 55%); /* #CF6A4C */\n}\n\n.token.keyword,\n.token.property,\n.token.selector,\n.token.constant,\n.token.symbol,\n.token.builtin {\n color: hsl(53deg, 89%, 79%); /* #F9EE98 */\n}\n\n.token.attr-name,\n.token.attr-value,\n.token.string,\n.token.char,\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string,\n.token.variable,\n.token.inserted {\n color: hsl(76deg, 21%, 52%); /* #8F9D6A */\n}\n\n.token.atrule {\n color: hsl(218deg, 22%, 55%); /* #7587A6 */\n}\n\n.token.regex,\n.token.important {\n color: hsl(42deg, 75%, 65%); /* #E9C062 */\n}\n\n.token.important,\n.token.bold {\n font-weight: bold;\n}\n\n.token.italic {\n font-style: italic;\n}\n\n.token.entity {\n cursor: help;\n}\n\npre[data-line] {\n padding: 1em 0 1em 3em;\n position: relative;\n}\n\n/* Markup */\n.language-markup .token.tag,\n.language-markup .token.attr-name,\n.language-markup .token.punctuation {\n color: hsl(33deg, 33%, 52%); /* #AC885B */\n}\n\n/* Make the tokens sit above the line highlight so the colours don't look faded. */\n.token {\n position: relative;\n z-index: 1;\n}\n\n.line-highlight {\n background: hsla(0deg, 0%, 33%, 0.25); /* #545454 */\n background: linear-gradient(to right, hsla(0deg, 0%, 33%, 0.1) 70%, hsla(0deg, 0%, 33%, 0)); /* #545454 */\n border-bottom: 1px dashed hsl(0deg, 0%, 33%); /* #545454 */\n border-top: 1px dashed hsl(0deg, 0%, 33%); /* #545454 */\n left: 0;\n line-height: inherit;\n margin-top: 0.75em; /* Same as .prism’s padding-top */\n padding: inherit 0;\n pointer-events: none;\n position: absolute;\n right: 0;\n white-space: pre;\n z-index: 0;\n}\n\n.line-highlight:before,\n.line-highlight[data-end]:after {\n background-color: hsl(215deg, 15%, 59%); /* #8794A6 */\n border-radius: 999px;\n box-shadow: 0 1px white;\n color: hsl(24deg, 20%, 95%); /* #F5F2F0 */\n content: attr(data-start);\n font: bold 65%/1.5 sans-serif;\n left: 0.6em;\n min-width: 1em;\n padding: 0 0.5em;\n position: absolute;\n text-align: center;\n text-shadow: none;\n top: 0.4em;\n vertical-align: 0.3em;\n}\n\n.line-highlight[data-end]:after {\n bottom: 0.4em;\n content: attr(data-end);\n top: auto;\n}\n\n.window {\n font-family: \"Ubuntu\", sans-serif;\n font-size: 17px;\n width: 600px;\n margin: 75px auto;\n background: #2c3e50;\n height: 350px;\n border-radius: 5px;\n display: relative;\n box-shadow: 10px 10px 10px #888888;\n}\n\n.afterclose {\n color: #34495e;\n display: none;\n text-align: center;\n}\n\n.open {\n color: #fff;\n padding: 15px;\n background: #2ecc71;\n border-radius: 4px;\n border: none;\n}\n\n.bash {\n width: 600px;\n background: #34495e;\n height: 310px;\n border-radius: 5px;\n top: 40px;\n display: absolute;\n color: #fff;\n text-align: left;\n}\n.bash .command::before {\n content: \"user@machine $ : \";\n color: #2ecc71;\n}\n.bash .resulta::before {\n content: \">>\";\n color: #2ecc71;\n}\n\n/* effected by controllers */\n.windowmax {\n width: 100%;\n margin: auto;\n background: #2c3e50;\n height: 1000px;\n border-radius: 5px;\n display: relative;\n}\n\n.windowmin {\n width: 300px;\n height: 45px;\n background: #2c3e50;\n border-radius: 5px;\n bottom: 0;\n position: fixed;\n}\n\n.bashmax {\n display: absolute;\n width: 100%;\n background: #34495e;\n height: 960px;\n border-radius: 5px;\n bottom: 0;\n color: #fff;\n}\n\n/* !--end--! */\n.buttons {\n width: 15px;\n height: 15px;\n border-radius: 50%;\n float: right;\n margin: 13px 4px;\n border: none;\n}\n\n.close {\n background: #e74c3c;\n}\n\n.maximize {\n background: #f1c40f;\n}\n\n.minimize {\n background: #2ecc71;\n}\n\n.result {\n display: none;\n}\n\n.controls {\n height: 40px;\n top: 0;\n}\n\n.title {\n color: #fff;\n font-weight: bold;\n padding: 10px;\n}\n\n.material-tooltip {\n padding: 10px 8px;\n font-size: 1rem;\n z-index: 2000;\n border-radius: 2px;\n color: #fff;\n min-height: 36px;\n line-height: 120%;\n opacity: 0;\n position: absolute;\n text-align: center;\n max-width: calc(100% - 4px);\n overflow: hidden;\n left: 0;\n top: 0;\n pointer-events: none;\n visibility: hidden;\n background-color: #323232;\n}\n\n.backdrop {\n position: absolute;\n opacity: 0;\n height: 7px;\n width: 14px;\n border-radius: 0 0 50% 50%;\n background-color: #323232;\n z-index: -1;\n transform-origin: 50% 0%;\n visibility: hidden;\n}\n\n.shadow-0 {\n box-shadow: none !important;\n}\n\n/* 2dp elevation modified*/\n.shadow-1, nav, .dropdown-content, .card, .card-panel, .btn-floating, .btn, .btn-small, .btn-large, .collapsible {\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2);\n}\n\n.shadow-1-half, .btn-floating:hover, .btn:hover, .btn-small:hover, .btn-large:hover {\n box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.14), 0 1px 7px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -1px rgba(0, 0, 0, 0.2);\n}\n\n/* 6dp elevation modified*/\n.shadow-2 {\n box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.3);\n}\n\n/* 12dp elevation modified*/\n.shadow-3 {\n box-shadow: 0 8px 17px 2px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2);\n}\n\n/* 16dp elevation */\n.shadow-4 {\n box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -7px rgba(0, 0, 0, 0.2);\n}\n\n/* 24dp elevation */\n.shadow-5, .modal {\n box-shadow: 0 24px 38px 3px rgba(0, 0, 0, 0.14), 0 9px 46px 8px rgba(0, 0, 0, 0.12), 0 11px 15px -7px rgba(0, 0, 0, 0.2);\n}\n\n/* 24dp elevation */\n.invert-shadow-5 {\n box-shadow: 38px 0 0 0 rgba(0, 0, 0, 0.14), 46px 0 0 0 rgba(0, 0, 0, 0.12), 15px 0 0 0 rgba(0, 0, 0, 0.2);\n}\n\n.hoverable {\n transition: box-shadow 0.25s;\n}\n.hoverable:hover {\n box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n}\n\n/*!\n * Waves v0.6.0\n * http://fian.my.id/Waves\n *\n * Copyright 2014 Alfiana E. Sibuea and other contributors\n * Released under the MIT license\n * https://github.com/fians/Waves/blob/master/LICENSE\n */\n.waves-effect {\n position: relative;\n cursor: pointer;\n display: inline-block;\n overflow: hidden;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n vertical-align: middle;\n z-index: 1;\n transition: 0.3s ease-out;\n}\n.waves-effect .waves-ripple {\n position: absolute;\n border-radius: 50%;\n width: 20px;\n height: 20px;\n margin-top: -10px;\n margin-left: -10px;\n opacity: 0;\n background: rgba(0, 0, 0, 0.2);\n transition: all 0.7s ease-out;\n transition-property: transform, opacity;\n transform: scale(0);\n pointer-events: none;\n}\n.waves-effect.waves-light .waves-ripple {\n background-color: rgba(255, 255, 255, 0.45);\n}\n.waves-effect.waves-red .waves-ripple {\n background-color: rgba(244, 67, 54, 0.7);\n}\n.waves-effect.waves-yellow .waves-ripple {\n background-color: rgba(255, 235, 59, 0.7);\n}\n.waves-effect.waves-orange .waves-ripple {\n background-color: rgba(255, 152, 0, 0.7);\n}\n.waves-effect.waves-purple .waves-ripple {\n background-color: rgba(156, 39, 176, 0.7);\n}\n.waves-effect.waves-green .waves-ripple {\n background-color: rgba(76, 175, 80, 0.7);\n}\n.waves-effect.waves-teal .waves-ripple {\n background-color: rgba(0, 150, 136, 0.7);\n}\n.waves-effect input[type=button], .waves-effect input[type=reset], .waves-effect input[type=submit] {\n border: 0;\n font-style: normal;\n font-size: inherit;\n text-transform: inherit;\n background: none;\n}\n.waves-effect img {\n position: relative;\n z-index: -1;\n}\n\n.waves-notransition {\n transition: none !important;\n}\n\n.waves-circle {\n transform: translateZ(0);\n -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%);\n}\n\n.waves-input-wrapper {\n border-radius: 0.2em;\n vertical-align: bottom;\n}\n.waves-input-wrapper .waves-button-input {\n position: relative;\n top: 0;\n left: 0;\n z-index: 1;\n}\n\n.waves-circle {\n text-align: center;\n width: 2.5em;\n height: 2.5em;\n line-height: 2.5em;\n border-radius: 50%;\n -webkit-mask-image: none;\n}\n\n.waves-block {\n display: block;\n}\n\n/* Firefox Bug: link not triggered */\n.waves-effect .waves-ripple {\n z-index: -1;\n}\n\n.modal {\n position: fixed;\n left: 0;\n right: 0;\n background-color: #fafafa;\n padding: 0;\n max-height: 70%;\n width: 55%;\n margin: auto;\n overflow-y: auto;\n border-radius: 2px;\n will-change: top, opacity;\n}\n.modal:focus {\n outline: none;\n}\n@media only screen and (max-width : 992px) {\n .modal {\n width: 80%;\n }\n}\n.modal h1, .modal h2, .modal h3, .modal h4 {\n margin-top: 0;\n}\n.modal .modal-content {\n padding: 24px;\n}\n.modal .modal-close {\n cursor: pointer;\n}\n.modal .modal-footer {\n border-radius: 0 0 2px 2px;\n background-color: #fafafa;\n padding: 4px 6px;\n height: 56px;\n width: 100%;\n text-align: right;\n}\n.modal .modal-footer .btn, .modal .modal-footer .btn-small, .modal .modal-footer .btn-large, .modal .modal-footer .btn-flat {\n margin: 6px 0;\n}\n.modal .modal-header {\n border-radius: 2px 2px 0 0;\n background-color: #fafafa;\n padding: 6px 4px;\n height: 56px;\n width: 100%;\n text-align: right;\n}\n.modal .modal-header .btn, .modal .modal-header .btn-small, .modal .modal-header .btn-large, .modal .modal-header .btn-flat {\n margin: 6px 0;\n}\n\n.modal-overlay {\n position: fixed;\n z-index: 999;\n top: -25%;\n left: 0;\n bottom: 0;\n right: 0;\n height: 125%;\n width: 100%;\n background: #000;\n display: none;\n will-change: opacity;\n}\n\n.modal.modal-fixed-footer {\n padding: 0;\n height: 70%;\n}\n.modal.modal-fixed-footer .modal-content {\n position: absolute;\n height: calc(100% - 56px);\n max-height: 100%;\n width: 100%;\n overflow-y: auto;\n}\n.modal.modal-fixed-footer .modal-footer {\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n position: absolute;\n bottom: 0;\n}\n\n.modal.bottom-sheet {\n top: auto;\n bottom: -100%;\n margin: 0;\n width: 100%;\n max-height: 45%;\n border-radius: 0;\n will-change: bottom, opacity;\n}\n\nhtml,\nbody,\n#root {\n margin: 0;\n height: 100%;\n}\n\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\n.noselect {\n -webkit-touch-callout: none; /* iOS Safari */\n -webkit-user-select: none; /* Safari */\n -khtml-user-select: none; /* Konqueror HTML */\n -moz-user-select: none; /* Old versions of Firefox */\n -ms-user-select: none; /* Internet Explorer/Edge */\n user-select: none;\n /* Non-prefixed version, currently\n supported by Chrome, Edge, Opera and Firefox */\n}\n\nul:not(.browser-default) {\n padding-left: 0;\n list-style-type: none;\n}\nul:not(.browser-default) > li {\n list-style-type: none;\n}\n\na {\n color: #039be5;\n text-decoration: none;\n -webkit-tap-highlight-color: transparent;\n}\n\n.w-100 {\n width: 100%;\n}\n\n.right-align {\n text-align: right;\n}\n\n.center-align {\n text-align: center;\n}\n\n.v-center {\n display: flex;\n align-items: center;\n}\n\n.mb1 {\n margin-bottom: 10px;\n}\n\n.collection {\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n border: 1px solid #e0e0e0;\n border-radius: 2px;\n overflow: hidden;\n position: relative;\n}\n.collection .collection-item {\n background-color: #fff;\n line-height: 1.5rem;\n padding: 10px 20px;\n margin: 0;\n border-bottom: 1px solid #e0e0e0;\n}\n.collection .collection-item.hover:hover {\n background-color: #ddd;\n}\n.collection .collection-item.avatar {\n min-height: 84px;\n padding-left: 72px;\n position: relative;\n}\n.collection .collection-item.avatar:not(.circle-clipper) > .circle,\n.collection .collection-item.avatar :not(.circle-clipper) > .circle {\n position: absolute;\n width: 42px;\n height: 42px;\n overflow: hidden;\n left: 15px;\n display: inline-block;\n vertical-align: middle;\n}\n.collection .collection-item.avatar i.circle {\n font-size: 18px;\n line-height: 42px;\n color: #fff;\n background-color: #999;\n text-align: center;\n}\n.collection .collection-item.avatar .title {\n font-size: 16px;\n}\n.collection .collection-item.avatar p {\n margin: 0;\n}\n.collection .collection-item.avatar .secondary-content {\n position: absolute;\n top: 16px;\n right: 16px;\n}\n.collection .collection-item:last-child {\n border-bottom: none;\n}\n.collection .collection-item.active {\n background-color: #26a69a;\n color: #eafaf9;\n}\n.collection .collection-item.active .secondary-content {\n color: #fff;\n}\n.collection a.collection-item {\n display: block;\n transition: 0.25s;\n color: #26a69a;\n}\n.collection a.collection-item:not(.active):hover {\n background-color: #ddd;\n}\n.collection.with-header .collection-header {\n background-color: #fff;\n border-bottom: 1px solid #e0e0e0;\n padding: 10px 20px;\n}\n.collection.with-header .collection-item {\n padding-left: 30px;\n}\n.collection.with-header .collection-item.avatar {\n padding-left: 72px;\n}\n\n.secondary-content {\n float: right;\n color: #26a69a;\n}\n\n.collapsible .collection {\n margin: 0;\n border: none;\n}\n\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 100vh;\n width: 100vw;\n padding: 20px 0 20px 0;\n background-color: rgba(0, 0, 0, 0.5);\n z-index: 999;\n display: flex;\n justify-content: center;\n}\n.modal-overlay .innerform {\n max-width: 650px;\n}\n.modal-overlay .innerform form {\n overflow: hidden;\n}\n\n/*********************\n Media Query Classes\n**********************/\n@media only screen and (max-width : 600px) {\n .hide-on-small-only, .hide-on-small-and-down {\n display: none !important;\n }\n}\n\n@media only screen and (max-width : 992px) {\n .hide-on-med-and-down {\n display: none !important;\n }\n}\n\n@media only screen and (min-width : 601px) {\n .hide-on-med-and-up {\n display: none !important;\n }\n}\n\n@media only screen and (min-width: 600px) and (max-width: 992px) {\n .hide-on-med-only {\n display: none !important;\n }\n}\n\n@media only screen and (min-width : 993px) {\n .hide-on-large-only {\n display: none !important;\n }\n}\n\n@media only screen and (min-width : 1201px) {\n .hide-on-extra-large-only {\n display: none !important;\n }\n}\n\n@media only screen and (min-width : 1201px) {\n .show-on-extra-large {\n display: block !important;\n }\n}\n\n@media only screen and (min-width : 993px) {\n .show-on-large {\n display: block !important;\n }\n}\n\n@media only screen and (min-width: 600px) and (max-width: 992px) {\n .show-on-medium {\n display: block !important;\n }\n}\n\n@media only screen and (max-width : 600px) {\n .show-on-small {\n display: block !important;\n }\n}\n\n@media only screen and (min-width : 601px) {\n .show-on-medium-and-up {\n display: block !important;\n }\n}\n\n@media only screen and (max-width : 992px) {\n .show-on-medium-and-down {\n display: block !important;\n }\n}\n\n@media only screen and (max-width : 600px) {\n .center-on-small-only {\n text-align: center;\n }\n}\n\n/*******************\n Utility Classes\n*******************/\n.hide {\n display: none !important;\n}\n\n.left-align {\n text-align: left;\n}\n\n.right-align {\n text-align: right;\n}\n\n.center, .center-align {\n text-align: center;\n}\n\n.left {\n float: left !important;\n}\n\n.right {\n float: right !important;\n}\n\n.no-select {\n user-select: none;\n}\n\n.circle {\n border-radius: 50%;\n}\n\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n.truncate {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.no-padding {\n padding: 0 !important;\n}\n\nspan.badge {\n min-width: 3rem;\n padding: 0 6px;\n margin-left: 14px;\n text-align: center;\n font-size: 1rem;\n line-height: 22px;\n height: 22px;\n color: #757575;\n float: right;\n box-sizing: border-box;\n}\nspan.badge.new {\n font-weight: 300;\n font-size: 0.8rem;\n color: #fff;\n background-color: #26a69a;\n border-radius: 2px;\n}\nspan.badge.new:after {\n content: \" new\";\n}\nspan.badge[data-badge-caption]::after {\n content: \" \" attr(data-badge-caption);\n}\n\nnav ul a span.badge {\n display: inline-block;\n float: none;\n margin-left: 4px;\n line-height: 22px;\n height: 22px;\n -webkit-font-smoothing: auto;\n}\n\n.collection-item span.badge {\n margin-top: calc(0.75rem - 11px);\n}\n\n.collapsible span.badge {\n margin-left: auto;\n}\n\n.sidenav span.badge {\n margin-top: 11.5px;\n}\n\ntable span.badge {\n display: inline-block;\n float: none;\n margin-left: auto;\n}\n\n.chip {\n display: inline-block;\n height: 32px;\n font-size: 13px;\n font-weight: 500;\n color: rgba(0, 0, 0, 0.6);\n line-height: 32px;\n padding: 0 12px;\n border-radius: 16px;\n background-color: #e4e4e4;\n margin-bottom: 5px;\n margin-right: 5px;\n}\n.chip:focus {\n outline: none;\n background-color: #26a69a;\n color: #fff;\n}\n.chip > img {\n float: left;\n margin: 0 8px 0 -12px;\n height: 32px;\n width: 32px;\n border-radius: 50%;\n}\n.chip .close {\n cursor: pointer;\n float: right;\n font-size: 16px;\n line-height: 32px;\n padding-left: 8px;\n}\n\n.chips {\n border: none;\n border-bottom: 1px solid #9e9e9e;\n box-shadow: none;\n margin: 0 0 8px 0;\n min-height: 45px;\n outline: none;\n transition: all 0.3s;\n}\n.chips.focus {\n border-bottom: 1px solid #26a69a;\n box-shadow: 0 1px 0 0 #26a69a;\n}\n.chips:hover {\n cursor: text;\n}\n.chips .input {\n background: none;\n border: 0;\n color: rgba(0, 0, 0, 0.6);\n display: inline-block;\n font-size: 16px;\n height: 56px;\n line-height: 32px;\n outline: 0;\n margin: 0;\n padding: 0 !important;\n width: 120px !important;\n}\n.chips .input:focus {\n border: 0 !important;\n box-shadow: none !important;\n}\n.chips .autocomplete-content {\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.prefix ~ .chips {\n margin-left: 3rem;\n width: 92%;\n width: calc(100% - 3rem);\n}\n\n.chips:empty ~ label {\n font-size: 0.8rem;\n transform: translateY(-140%);\n}\n\n.collapsible {\n border-top: 1px solid #ddd;\n border-right: 1px solid #ddd;\n border-left: 1px solid #ddd;\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n}\n\n.collapsible-header {\n display: flex;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n line-height: 1.5;\n padding: 1rem;\n background-color: #fff;\n border-bottom: 1px solid #ddd;\n}\n.collapsible-header:focus {\n outline: 0;\n}\n.collapsible-header i {\n width: 2rem;\n font-size: 1.6rem;\n display: inline-block;\n text-align: center;\n margin-right: 1rem;\n}\n\n.keyboard-focused .collapsible-header:focus {\n background-color: #eee;\n}\n\n.collapsible-body {\n display: none;\n border-bottom: 1px solid #ddd;\n box-sizing: border-box;\n padding: 2rem;\n}\n\n.sidenav .collapsible,\n.sidenav.fixed .collapsible {\n border: none;\n box-shadow: none;\n}\n.sidenav .collapsible li,\n.sidenav.fixed .collapsible li {\n padding: 0;\n}\n.sidenav .collapsible-header,\n.sidenav.fixed .collapsible-header {\n background-color: transparent;\n border: none;\n line-height: inherit;\n height: inherit;\n padding: 0 15px;\n}\n.sidenav .collapsible-header:hover,\n.sidenav.fixed .collapsible-header:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.sidenav .collapsible-header i,\n.sidenav.fixed .collapsible-header i {\n line-height: inherit;\n}\n.sidenav .collapsible-body,\n.sidenav.fixed .collapsible-body {\n border: 0;\n background-color: #fff;\n}\n.sidenav .collapsible-body li a,\n.sidenav.fixed .collapsible-body li a {\n padding: 0 22.5px 0 30px;\n}\n\n.collapsible.popout {\n border: none;\n box-shadow: none;\n}\n.collapsible.popout > li {\n box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);\n margin: 0 24px;\n transition: margin 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94);\n}\n.collapsible.popout > li.active {\n box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);\n margin: 16px 0;\n}\n\n.collection {\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n border: 1px solid #e0e0e0;\n border-radius: 2px;\n overflow: hidden;\n position: relative;\n}\n.collection .collection-item {\n background-color: #fff;\n line-height: 1.5rem;\n padding: 10px 20px;\n margin: 0;\n border-bottom: 1px solid #e0e0e0;\n}\n.collection .collection-item.avatar {\n min-height: 84px;\n padding-left: 72px;\n position: relative;\n}\n.collection .collection-item.avatar:not(.circle-clipper) > .circle,\n.collection .collection-item.avatar :not(.circle-clipper) > .circle {\n position: absolute;\n width: 42px;\n height: 42px;\n overflow: hidden;\n left: 15px;\n display: inline-block;\n vertical-align: middle;\n}\n.collection .collection-item.avatar i.circle {\n font-size: 18px;\n line-height: 42px;\n color: #fff;\n background-color: #999;\n text-align: center;\n}\n.collection .collection-item.avatar .title {\n font-size: 16px;\n}\n.collection .collection-item.avatar p {\n margin: 0;\n}\n.collection .collection-item.avatar .secondary-content {\n position: absolute;\n top: 16px;\n right: 16px;\n}\n.collection .collection-item:last-child {\n border-bottom: none;\n}\n.collection .collection-item.active {\n background-color: #26a69a;\n color: #eafaf9;\n}\n.collection .collection-item.active .secondary-content {\n color: #fff;\n}\n.collection a.collection-item {\n display: block;\n transition: 0.25s;\n color: #26a69a;\n}\n.collection a.collection-item:not(.active):hover {\n background-color: #ddd;\n}\n.collection.with-header .collection-header {\n background-color: #fff;\n border-bottom: 1px solid #e0e0e0;\n padding: 10px 20px;\n}\n.collection.with-header .collection-item {\n padding-left: 30px;\n}\n.collection.with-header .collection-item.avatar {\n padding-left: 72px;\n}\n.collection .secondary-content {\n float: right;\n color: #26a69a;\n}\n\nselect:focus {\n outline: 1px solid #c9f3ef;\n}\n\nbutton:focus {\n outline: none;\n background-color: #2ab7a9;\n}\n\nlabel {\n font-size: 0.8rem;\n color: #9e9e9e;\n}\n\n/* Text Inputs + Textarea\n ========================================================================== */\n/* Style Placeholders */\n::placeholder {\n color: #d1d1d1;\n}\n\n/* Text inputs */\ninput:not([type]),\ninput[type=text]:not(.browser-default),\ninput[type=password]:not(.browser-default),\ninput[type=email]:not(.browser-default),\ninput[type=url]:not(.browser-default),\ninput[type=time]:not(.browser-default),\ninput[type=date]:not(.browser-default),\ninput[type=datetime]:not(.browser-default),\ninput[type=datetime-local]:not(.browser-default),\ninput[type=tel]:not(.browser-default),\ninput[type=number]:not(.browser-default),\ninput[type=search]:not(.browser-default),\ntextarea.textarea {\n background-color: transparent;\n border: none;\n border-bottom: 1px solid #9e9e9e;\n border-radius: 0;\n outline: none;\n height: 56px;\n width: 100%;\n font-size: 16px;\n margin: 0 0 8px 0;\n padding: 0;\n box-shadow: none;\n box-sizing: content-box;\n transition: box-shadow 0.3s, border 0.3s;\n}\ninput:not([type]):disabled, input:not([type])[readonly=readonly],\ninput[type=text]:not(.browser-default):disabled,\ninput[type=text]:not(.browser-default)[readonly=readonly],\ninput[type=password]:not(.browser-default):disabled,\ninput[type=password]:not(.browser-default)[readonly=readonly],\ninput[type=email]:not(.browser-default):disabled,\ninput[type=email]:not(.browser-default)[readonly=readonly],\ninput[type=url]:not(.browser-default):disabled,\ninput[type=url]:not(.browser-default)[readonly=readonly],\ninput[type=time]:not(.browser-default):disabled,\ninput[type=time]:not(.browser-default)[readonly=readonly],\ninput[type=date]:not(.browser-default):disabled,\ninput[type=date]:not(.browser-default)[readonly=readonly],\ninput[type=datetime]:not(.browser-default):disabled,\ninput[type=datetime]:not(.browser-default)[readonly=readonly],\ninput[type=datetime-local]:not(.browser-default):disabled,\ninput[type=datetime-local]:not(.browser-default)[readonly=readonly],\ninput[type=tel]:not(.browser-default):disabled,\ninput[type=tel]:not(.browser-default)[readonly=readonly],\ninput[type=number]:not(.browser-default):disabled,\ninput[type=number]:not(.browser-default)[readonly=readonly],\ninput[type=search]:not(.browser-default):disabled,\ninput[type=search]:not(.browser-default)[readonly=readonly],\ntextarea.textarea:disabled,\ntextarea.textarea[readonly=readonly] {\n color: rgba(0, 0, 0, 0.42);\n border-bottom: 1px dotted rgba(0, 0, 0, 0.42);\n}\ninput:not([type]):disabled + label, input:not([type])[readonly=readonly] + label,\ninput[type=text]:not(.browser-default):disabled + label,\ninput[type=text]:not(.browser-default)[readonly=readonly] + label,\ninput[type=password]:not(.browser-default):disabled + label,\ninput[type=password]:not(.browser-default)[readonly=readonly] + label,\ninput[type=email]:not(.browser-default):disabled + label,\ninput[type=email]:not(.browser-default)[readonly=readonly] + label,\ninput[type=url]:not(.browser-default):disabled + label,\ninput[type=url]:not(.browser-default)[readonly=readonly] + label,\ninput[type=time]:not(.browser-default):disabled + label,\ninput[type=time]:not(.browser-default)[readonly=readonly] + label,\ninput[type=date]:not(.browser-default):disabled + label,\ninput[type=date]:not(.browser-default)[readonly=readonly] + label,\ninput[type=datetime]:not(.browser-default):disabled + label,\ninput[type=datetime]:not(.browser-default)[readonly=readonly] + label,\ninput[type=datetime-local]:not(.browser-default):disabled + label,\ninput[type=datetime-local]:not(.browser-default)[readonly=readonly] + label,\ninput[type=tel]:not(.browser-default):disabled + label,\ninput[type=tel]:not(.browser-default)[readonly=readonly] + label,\ninput[type=number]:not(.browser-default):disabled + label,\ninput[type=number]:not(.browser-default)[readonly=readonly] + label,\ninput[type=search]:not(.browser-default):disabled + label,\ninput[type=search]:not(.browser-default)[readonly=readonly] + label,\ntextarea.textarea:disabled + label,\ntextarea.textarea[readonly=readonly] + label {\n color: rgba(0, 0, 0, 0.42);\n}\ninput:not([type]):focus:not([readonly]),\ninput[type=text]:not(.browser-default):focus:not([readonly]),\ninput[type=password]:not(.browser-default):focus:not([readonly]),\ninput[type=email]:not(.browser-default):focus:not([readonly]),\ninput[type=url]:not(.browser-default):focus:not([readonly]),\ninput[type=time]:not(.browser-default):focus:not([readonly]),\ninput[type=date]:not(.browser-default):focus:not([readonly]),\ninput[type=datetime]:not(.browser-default):focus:not([readonly]),\ninput[type=datetime-local]:not(.browser-default):focus:not([readonly]),\ninput[type=tel]:not(.browser-default):focus:not([readonly]),\ninput[type=number]:not(.browser-default):focus:not([readonly]),\ninput[type=search]:not(.browser-default):focus:not([readonly]),\ntextarea.textarea:focus:not([readonly]) {\n border-bottom: 1px solid #26a69a;\n box-shadow: 0 1px 0 0 #26a69a;\n}\ninput:not([type]):focus:not([readonly]) + label,\ninput[type=text]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=password]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=email]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=url]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=time]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=date]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=datetime]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=datetime-local]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=tel]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=number]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=search]:not(.browser-default):focus:not([readonly]) + label,\ntextarea.textarea:focus:not([readonly]) + label {\n color: #26a69a;\n}\ninput:not([type]):focus.valid ~ label,\ninput[type=text]:not(.browser-default):focus.valid ~ label,\ninput[type=password]:not(.browser-default):focus.valid ~ label,\ninput[type=email]:not(.browser-default):focus.valid ~ label,\ninput[type=url]:not(.browser-default):focus.valid ~ label,\ninput[type=time]:not(.browser-default):focus.valid ~ label,\ninput[type=date]:not(.browser-default):focus.valid ~ label,\ninput[type=datetime]:not(.browser-default):focus.valid ~ label,\ninput[type=datetime-local]:not(.browser-default):focus.valid ~ label,\ninput[type=tel]:not(.browser-default):focus.valid ~ label,\ninput[type=number]:not(.browser-default):focus.valid ~ label,\ninput[type=search]:not(.browser-default):focus.valid ~ label,\ntextarea.textarea:focus.valid ~ label {\n color: #4caf50;\n}\ninput:not([type]):focus.invalid ~ label,\ninput[type=text]:not(.browser-default):focus.invalid ~ label,\ninput[type=password]:not(.browser-default):focus.invalid ~ label,\ninput[type=email]:not(.browser-default):focus.invalid ~ label,\ninput[type=url]:not(.browser-default):focus.invalid ~ label,\ninput[type=time]:not(.browser-default):focus.invalid ~ label,\ninput[type=date]:not(.browser-default):focus.invalid ~ label,\ninput[type=datetime]:not(.browser-default):focus.invalid ~ label,\ninput[type=datetime-local]:not(.browser-default):focus.invalid ~ label,\ninput[type=tel]:not(.browser-default):focus.invalid ~ label,\ninput[type=number]:not(.browser-default):focus.invalid ~ label,\ninput[type=search]:not(.browser-default):focus.invalid ~ label,\ntextarea.textarea:focus.invalid ~ label {\n color: #f44336;\n}\ninput:not([type]).validate + label,\ninput[type=text]:not(.browser-default).validate + label,\ninput[type=password]:not(.browser-default).validate + label,\ninput[type=email]:not(.browser-default).validate + label,\ninput[type=url]:not(.browser-default).validate + label,\ninput[type=time]:not(.browser-default).validate + label,\ninput[type=date]:not(.browser-default).validate + label,\ninput[type=datetime]:not(.browser-default).validate + label,\ninput[type=datetime-local]:not(.browser-default).validate + label,\ninput[type=tel]:not(.browser-default).validate + label,\ninput[type=number]:not(.browser-default).validate + label,\ninput[type=search]:not(.browser-default).validate + label,\ntextarea.textarea.validate + label {\n width: 100%;\n}\n/* Validation Sass Placeholders */\n.select-wrapper.valid > input.select-dropdown, input:not([type]).valid, input:not([type]):focus.valid,\ninput[type=text]:not(.browser-default).valid,\ninput[type=text]:not(.browser-default):focus.valid,\ninput[type=password]:not(.browser-default).valid,\ninput[type=password]:not(.browser-default):focus.valid,\ninput[type=email]:not(.browser-default).valid,\ninput[type=email]:not(.browser-default):focus.valid,\ninput[type=url]:not(.browser-default).valid,\ninput[type=url]:not(.browser-default):focus.valid,\ninput[type=time]:not(.browser-default).valid,\ninput[type=time]:not(.browser-default):focus.valid,\ninput[type=date]:not(.browser-default).valid,\ninput[type=date]:not(.browser-default):focus.valid,\ninput[type=datetime]:not(.browser-default).valid,\ninput[type=datetime]:not(.browser-default):focus.valid,\ninput[type=datetime-local]:not(.browser-default).valid,\ninput[type=datetime-local]:not(.browser-default):focus.valid,\ninput[type=tel]:not(.browser-default).valid,\ninput[type=tel]:not(.browser-default):focus.valid,\ninput[type=number]:not(.browser-default).valid,\ninput[type=number]:not(.browser-default):focus.valid,\ninput[type=search]:not(.browser-default).valid,\ninput[type=search]:not(.browser-default):focus.valid,\ntextarea.textarea.valid,\ntextarea.textarea:focus.valid {\n border-bottom: 1px solid #4caf50;\n box-shadow: 0 1px 0 0 #4caf50;\n}\n\n.select-wrapper.invalid > input.select-dropdown, .select-wrapper.invalid > input.select-dropdown:focus, input:not([type]).invalid, input:not([type]):focus.invalid,\ninput[type=text]:not(.browser-default).invalid,\ninput[type=text]:not(.browser-default):focus.invalid,\ninput[type=password]:not(.browser-default).invalid,\ninput[type=password]:not(.browser-default):focus.invalid,\ninput[type=email]:not(.browser-default).invalid,\ninput[type=email]:not(.browser-default):focus.invalid,\ninput[type=url]:not(.browser-default).invalid,\ninput[type=url]:not(.browser-default):focus.invalid,\ninput[type=time]:not(.browser-default).invalid,\ninput[type=time]:not(.browser-default):focus.invalid,\ninput[type=date]:not(.browser-default).invalid,\ninput[type=date]:not(.browser-default):focus.invalid,\ninput[type=datetime]:not(.browser-default).invalid,\ninput[type=datetime]:not(.browser-default):focus.invalid,\ninput[type=datetime-local]:not(.browser-default).invalid,\ninput[type=datetime-local]:not(.browser-default):focus.invalid,\ninput[type=tel]:not(.browser-default).invalid,\ninput[type=tel]:not(.browser-default):focus.invalid,\ninput[type=number]:not(.browser-default).invalid,\ninput[type=number]:not(.browser-default):focus.invalid,\ninput[type=search]:not(.browser-default).invalid,\ninput[type=search]:not(.browser-default):focus.invalid,\ntextarea.textarea.invalid,\ntextarea.textarea:focus.invalid {\n border-bottom: 1px solid #f44336;\n box-shadow: 0 1px 0 0 #f44336;\n}\n\n.select-wrapper.valid .helper-text[data-success], .select-wrapper.invalid ~ .helper-text[data-error], input:not([type]).valid ~ .helper-text[data-success], input:not([type]):focus.valid ~ .helper-text[data-success], input:not([type]).invalid ~ .helper-text[data-error], input:not([type]):focus.invalid ~ .helper-text[data-error],\ninput[type=text]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=text]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=text]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=text]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=password]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=password]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=password]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=password]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=email]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=email]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=email]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=email]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=url]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=url]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=url]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=url]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=time]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=time]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=time]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=time]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=date]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=date]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=date]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=date]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=datetime]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=datetime]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=datetime]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=datetime]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=datetime-local]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=datetime-local]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=datetime-local]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=datetime-local]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=tel]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=tel]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=tel]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=tel]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=number]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=number]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=number]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=number]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=search]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=search]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=search]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=search]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ntextarea.textarea.valid ~ .helper-text[data-success],\ntextarea.textarea:focus.valid ~ .helper-text[data-success],\ntextarea.textarea.invalid ~ .helper-text[data-error],\ntextarea.textarea:focus.invalid ~ .helper-text[data-error] {\n color: transparent;\n user-select: none;\n pointer-events: none;\n}\n\n.select-wrapper.valid ~ .helper-text:after, input:not([type]).valid ~ .helper-text:after, input:not([type]):focus.valid ~ .helper-text:after,\ninput[type=text]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=text]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=password]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=password]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=email]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=email]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=url]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=url]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=time]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=time]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=date]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=date]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=datetime]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=datetime]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=datetime-local]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=datetime-local]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=tel]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=tel]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=number]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=number]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=search]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=search]:not(.browser-default):focus.valid ~ .helper-text:after,\ntextarea.textarea.valid ~ .helper-text:after,\ntextarea.textarea:focus.valid ~ .helper-text:after {\n content: attr(data-success);\n color: #4caf50;\n}\n\n.select-wrapper.invalid ~ .helper-text:after, input:not([type]).invalid ~ .helper-text:after, input:not([type]):focus.invalid ~ .helper-text:after,\ninput[type=text]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=text]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=password]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=password]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=email]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=email]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=url]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=url]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=time]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=time]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=date]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=date]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=datetime]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=datetime]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=datetime-local]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=datetime-local]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=tel]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=tel]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=number]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=number]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=search]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=search]:not(.browser-default):focus.invalid ~ .helper-text:after,\ntextarea.textarea.invalid ~ .helper-text:after,\ntextarea.textarea:focus.invalid ~ .helper-text:after {\n content: attr(data-error);\n color: #f44336;\n}\n\n.select-wrapper + label:after, input:not([type]) + label:after,\ninput[type=text]:not(.browser-default) + label:after,\ninput[type=password]:not(.browser-default) + label:after,\ninput[type=email]:not(.browser-default) + label:after,\ninput[type=url]:not(.browser-default) + label:after,\ninput[type=time]:not(.browser-default) + label:after,\ninput[type=date]:not(.browser-default) + label:after,\ninput[type=datetime]:not(.browser-default) + label:after,\ninput[type=datetime-local]:not(.browser-default) + label:after,\ninput[type=tel]:not(.browser-default) + label:after,\ninput[type=number]:not(.browser-default) + label:after,\ninput[type=search]:not(.browser-default) + label:after,\ntextarea.textarea + label:after {\n display: block;\n content: \"\";\n position: absolute;\n top: 100%;\n left: 0;\n opacity: 0;\n transition: 0.2s opacity ease-out, 0.2s color ease-out;\n}\n\n.input-field {\n position: relative;\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\n.input-field.inline {\n display: inline-block;\n vertical-align: middle;\n margin-left: 5px;\n}\n.input-field.inline input,\n.input-field.inline .select-dropdown {\n margin-bottom: 1rem;\n}\n.input-field.col label {\n left: 0.5rem;\n}\n.input-field.col .prefix ~ label,\n.input-field.col .prefix ~ .validate ~ label {\n width: calc(100% - 3rem - 1rem);\n}\n.input-field > label {\n color: #9e9e9e;\n position: absolute;\n top: 0;\n left: 0;\n font-size: 1rem;\n cursor: text;\n transition: transform 0.2s ease-out, color 0.2s ease-out;\n transform-origin: 0% 100%;\n text-align: initial;\n transform: translateY(12px);\n}\n.input-field > label:not(.label-icon).active {\n transform: translateY(-14px) scale(0.8);\n transform-origin: 0 0;\n}\n.input-field > input[type]:-webkit-autofill:not(.browser-default):not([type=search]) + label, .input-field > input[type=date]:not(.browser-default) + label, .input-field > input[type=time]:not(.browser-default) + label {\n transform: translateY(-14px) scale(0.8);\n transform-origin: 0 0;\n}\n.input-field .helper-text {\n position: relative;\n min-height: 18px;\n display: block;\n font-size: 12px;\n color: rgba(0, 0, 0, 0.54);\n}\n.input-field .helper-text::after {\n opacity: 1;\n position: absolute;\n top: 0;\n left: 0;\n}\n.input-field .prefix {\n position: absolute;\n width: 56px;\n font-size: 2rem;\n transition: color 0.2s;\n}\n.input-field .prefix.active {\n color: #26a69a;\n}\n.input-field .prefix ~ input,\n.input-field .prefix ~ textarea,\n.input-field .prefix ~ label,\n.input-field .prefix ~ .validate ~ label,\n.input-field .prefix ~ .helper-text,\n.input-field .prefix ~ .autocomplete-content {\n margin-left: 3rem;\n width: 92%;\n width: calc(100% - 3rem);\n}\n.input-field .prefix ~ label {\n margin-left: 3rem;\n}\n@media only screen and (max-width : 992px) {\n .input-field .prefix ~ input {\n width: 86%;\n width: calc(100% - 3rem);\n }\n}\n@media only screen and (max-width : 600px) {\n .input-field .prefix ~ input {\n width: 80%;\n width: calc(100% - 3rem);\n }\n}\n\n/* Search Field */\n.input-field input[type=search] {\n display: block;\n line-height: inherit;\n transition: 0.3s background-color;\n}\n.nav-wrapper .input-field input[type=search] {\n height: inherit;\n padding-left: 4rem;\n width: calc(100% - 4rem);\n border: 0;\n box-shadow: none;\n}\n.input-field input[type=search]:focus:not(.browser-default) {\n background-color: #fff;\n border: 0;\n box-shadow: none;\n color: #444;\n}\n.input-field input[type=search]:focus:not(.browser-default) + label i, .input-field input[type=search]:focus:not(.browser-default) ~ .mdi-navigation-close, .input-field input[type=search]:focus:not(.browser-default) ~ .material-icons {\n color: #444;\n}\n.input-field input[type=search] + .label-icon {\n transform: none;\n left: 1rem;\n}\n.input-field input[type=search] ~ .mdi-navigation-close, .input-field input[type=search] ~ .material-icons {\n position: absolute;\n top: 0;\n right: 1rem;\n color: transparent;\n cursor: pointer;\n font-size: 2rem;\n transition: 0.3s color;\n}\n\n/* Textarea */\ntextarea {\n width: 100%;\n height: 56px;\n background-color: transparent;\n}\ntextarea.textarea {\n line-height: normal;\n overflow-y: hidden; /* prevents scroll bar flash */\n padding: 0.8rem 0 0.8rem 0; /* prevents text jump on Enter keypress */\n resize: none;\n min-height: 56px;\n box-sizing: border-box;\n}\n\n.hiddendiv {\n visibility: hidden;\n white-space: pre-wrap;\n word-wrap: break-word;\n overflow-wrap: break-word; /* future version of deprecated 'word-wrap' */\n padding-top: 1.2rem; /* prevents text jump on Enter keypress */\n position: absolute;\n top: 0;\n z-index: -1;\n}\n\n/* Autocomplete */\n.autocomplete-content li .highlight {\n color: #444;\n}\n.autocomplete-content li img {\n margin: 5px 15px;\n}\n\n/* Character Counter */\n.character-counter {\n min-height: 18px;\n}\n\n/* Radio Buttons\n ========================================================================== */\n[type=radio]:not(:checked),\n[type=radio]:checked {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n\n[type=radio]:not(:checked) + span,\n[type=radio]:checked + span {\n position: relative;\n padding-left: 35px;\n cursor: pointer;\n display: inline-block;\n height: 25px;\n line-height: 25px;\n font-size: 1rem;\n transition: 0.28s ease;\n user-select: none;\n}\n\n[type=radio] + span:before,\n[type=radio] + span:after {\n content: \"\";\n position: absolute;\n left: 0;\n top: 0;\n margin: 4px;\n width: 16px;\n height: 16px;\n z-index: 0;\n transition: 0.28s ease;\n}\n\n/* Unchecked styles */\n[type=radio]:not(:checked) + span:before,\n[type=radio]:not(:checked) + span:after,\n[type=radio]:checked + span:before,\n[type=radio]:checked + span:after,\n[type=radio].with-gap:checked + span:before,\n[type=radio].with-gap:checked + span:after {\n border-radius: 50%;\n}\n\n[type=radio]:not(:checked) + span:before,\n[type=radio]:not(:checked) + span:after {\n border: 2px solid #5a5a5a;\n}\n\n[type=radio]:not(:checked) + span:after {\n transform: scale(0);\n}\n\n/* Checked styles */\n[type=radio]:checked + span:before {\n border: 2px solid transparent;\n}\n\n[type=radio]:checked + span:after,\n[type=radio].with-gap:checked + span:before,\n[type=radio].with-gap:checked + span:after {\n border: 2px solid #26a69a;\n}\n\n[type=radio]:checked + span:after,\n[type=radio].with-gap:checked + span:after {\n background-color: #26a69a;\n}\n\n[type=radio]:checked + span:after {\n transform: scale(1.02);\n}\n\n/* Radio With gap */\n[type=radio].with-gap:checked + span:after {\n transform: scale(0.5);\n}\n\n/* Focused styles */\n[type=radio].tabbed:focus + span:before {\n box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1);\n}\n\n/* Disabled Radio With gap */\n[type=radio].with-gap:disabled:checked + span:before {\n border: 2px solid rgba(0, 0, 0, 0.42);\n}\n\n[type=radio].with-gap:disabled:checked + span:after {\n border: none;\n background-color: rgba(0, 0, 0, 0.42);\n}\n\n/* Disabled style */\n[type=radio]:disabled:not(:checked) + span:before,\n[type=radio]:disabled:checked + span:before {\n background-color: transparent;\n border-color: rgba(0, 0, 0, 0.42);\n}\n\n[type=radio]:disabled + span {\n color: rgba(0, 0, 0, 0.42);\n}\n\n[type=radio]:disabled:not(:checked) + span:before {\n border-color: rgba(0, 0, 0, 0.42);\n}\n\n[type=radio]:disabled:checked + span:after {\n background-color: rgba(0, 0, 0, 0.42);\n border-color: #949494;\n}\n\n/* Checkboxes\n ========================================================================== */\n/* Remove default checkbox */\n[type=checkbox]:not(:checked),\n[type=checkbox]:checked {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n\n[type=checkbox] {\n /* checkbox aspect */\n}\n[type=checkbox] + span:not(.lever) {\n position: relative;\n padding-left: 35px;\n cursor: pointer;\n display: inline-block;\n height: 25px;\n line-height: 25px;\n font-size: 1rem;\n user-select: none;\n}\n[type=checkbox] + span:not(.lever):before, [type=checkbox]:not(.filled-in) + span:not(.lever):after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n width: 18px;\n height: 18px;\n z-index: 0;\n border: 2px solid #5a5a5a;\n border-radius: 1px;\n margin-top: 3px;\n transition: 0.2s;\n}\n[type=checkbox]:not(.filled-in) + span:not(.lever):after {\n border: 0;\n transform: scale(0);\n}\n[type=checkbox]:not(:checked):disabled + span:not(.lever):before {\n border: none;\n background-color: rgba(0, 0, 0, 0.42);\n}\n[type=checkbox].tabbed:focus + span:not(.lever):after {\n transform: scale(1);\n border: 0;\n border-radius: 50%;\n box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1);\n background-color: rgba(0, 0, 0, 0.1);\n}\n\n[type=checkbox]:checked + span:not(.lever):before {\n top: -4px;\n left: -5px;\n width: 12px;\n height: 22px;\n border-top: 2px solid transparent;\n border-left: 2px solid transparent;\n border-right: 2px solid #26a69a;\n border-bottom: 2px solid #26a69a;\n transform: rotate(40deg);\n backface-visibility: hidden;\n transform-origin: 100% 100%;\n}\n[type=checkbox]:checked:disabled + span:before {\n border-right: 2px solid rgba(0, 0, 0, 0.42);\n border-bottom: 2px solid rgba(0, 0, 0, 0.42);\n}\n\n/* Indeterminate checkbox */\n[type=checkbox]:indeterminate + span:not(.lever):before {\n top: -11px;\n left: -12px;\n width: 10px;\n height: 22px;\n border-top: none;\n border-left: none;\n border-right: 2px solid #26a69a;\n border-bottom: none;\n transform: rotate(90deg);\n backface-visibility: hidden;\n transform-origin: 100% 100%;\n}\n[type=checkbox]:indeterminate:disabled + span:not(.lever):before {\n border-right: 2px solid rgba(0, 0, 0, 0.42);\n background-color: transparent;\n}\n\n[type=checkbox].filled-in + span:not(.lever):after {\n border-radius: 2px;\n}\n[type=checkbox].filled-in + span:not(.lever):before,\n[type=checkbox].filled-in + span:not(.lever):after {\n content: \"\";\n left: 0;\n position: absolute;\n /* .1s delay is for check animation */\n transition: border 0.25s, background-color 0.25s, width 0.2s 0.1s, height 0.2s 0.1s, top 0.2s 0.1s, left 0.2s 0.1s;\n z-index: 1;\n}\n[type=checkbox].filled-in:not(:checked) + span:not(.lever):before {\n width: 0;\n height: 0;\n border: 3px solid transparent;\n left: 6px;\n top: 10px;\n transform: rotateZ(37deg);\n transform-origin: 100% 100%;\n}\n[type=checkbox].filled-in:not(:checked) + span:not(.lever):after {\n height: 20px;\n width: 20px;\n background-color: transparent;\n border: 2px solid #5a5a5a;\n top: 0px;\n z-index: 0;\n}\n[type=checkbox].filled-in:checked + span:not(.lever):before {\n top: 0;\n left: 1px;\n width: 8px;\n height: 13px;\n border-top: 2px solid transparent;\n border-left: 2px solid transparent;\n border-right: 2px solid #fff;\n border-bottom: 2px solid #fff;\n transform: rotateZ(37deg);\n transform-origin: 100% 100%;\n}\n[type=checkbox].filled-in:checked + span:not(.lever):after {\n top: 0;\n width: 20px;\n height: 20px;\n border: 2px solid #26a69a;\n background-color: #26a69a;\n z-index: 0;\n}\n[type=checkbox].filled-in.tabbed:focus + span:not(.lever):after {\n border-radius: 2px;\n border-color: #5a5a5a;\n background-color: rgba(0, 0, 0, 0.1);\n}\n[type=checkbox].filled-in.tabbed:checked:focus + span:not(.lever):after {\n border-radius: 2px;\n background-color: #26a69a;\n border-color: #26a69a;\n}\n[type=checkbox].filled-in:disabled:not(:checked) + span:not(.lever):before {\n background-color: transparent;\n border: 2px solid transparent;\n}\n[type=checkbox].filled-in:disabled:not(:checked) + span:not(.lever):after {\n border-color: transparent;\n background-color: #949494;\n}\n[type=checkbox].filled-in:disabled:checked + span:not(.lever):before {\n background-color: transparent;\n}\n[type=checkbox].filled-in:disabled:checked + span:not(.lever):after {\n background-color: #949494;\n border-color: #949494;\n}\n\n/* Switch\n ========================================================================== */\n.switch,\n.switch * {\n -webkit-tap-highlight-color: transparent;\n user-select: none;\n}\n\n.switch label {\n cursor: pointer;\n}\n\n.switch label input[type=checkbox] {\n opacity: 0;\n width: 0;\n height: 0;\n}\n.switch label input[type=checkbox]:checked + .lever {\n background-color: #84c7c1;\n}\n.switch label input[type=checkbox]:checked + .lever:before, .switch label input[type=checkbox]:checked + .lever:after {\n left: 18px;\n}\n.switch label input[type=checkbox]:checked + .lever:after {\n background-color: #26a69a;\n}\n\n.switch label .lever {\n content: \"\";\n display: inline-block;\n position: relative;\n width: 36px;\n height: 14px;\n background-color: rgba(0, 0, 0, 0.38);\n border-radius: 15px;\n transition: background 0.3s ease;\n vertical-align: middle;\n margin: 0 16px;\n}\n.switch label .lever:before, .switch label .lever:after {\n content: \"\";\n position: absolute;\n display: inline-block;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n left: 0;\n top: -3px;\n transition: left 0.3s ease, background 0.3s ease, box-shadow 0.1s ease, transform 0.1s ease;\n}\n.switch label .lever:before {\n background-color: rgba(38, 166, 154, 0.15);\n}\n.switch label .lever:after {\n background-color: #F1F1F1;\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n\ninput[type=checkbox]:checked:not(:disabled) ~ .lever:active::before,\ninput[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::before {\n transform: scale(2.4);\n background-color: rgba(38, 166, 154, 0.15);\n}\n\ninput[type=checkbox]:not(:disabled) ~ .lever:active:before,\ninput[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::before {\n transform: scale(2.4);\n background-color: rgba(0, 0, 0, 0.08);\n}\n\n.switch input[type=checkbox][disabled] + .lever {\n cursor: default;\n background-color: rgba(0, 0, 0, 0.12);\n}\n\n.switch label input[type=checkbox][disabled] + .lever:after,\n.switch label input[type=checkbox][disabled]:checked + .lever:after {\n background-color: #949494;\n}\n\n/* Select Field\n ========================================================================== */\nselect {\n display: none;\n}\n\nselect.browser-default {\n display: block;\n}\n\nselect {\n background-color: rgba(255, 255, 255, 0.9);\n width: 100%;\n padding: 5px;\n border: 1px solid #f2f2f2;\n border-radius: 2px;\n height: 56px;\n}\n\n.select-label {\n position: absolute;\n}\n\n.select-wrapper {\n position: relative;\n}\n.select-wrapper.valid + label, .select-wrapper.invalid + label {\n width: 100%;\n pointer-events: none;\n}\n.select-wrapper input.select-dropdown {\n position: relative;\n cursor: pointer;\n background-color: transparent;\n border: none;\n border-bottom: 1px solid #9e9e9e;\n outline: none;\n height: 56px;\n line-height: 56px;\n width: 100%;\n font-size: 16px;\n margin: 0 0 8px 0;\n padding: 0;\n display: block;\n user-select: none;\n z-index: 1;\n}\n.select-wrapper input.select-dropdown:focus {\n border-bottom: 1px solid #26a69a;\n}\n.select-wrapper .caret {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n margin: auto 0;\n z-index: 0;\n fill: rgba(0, 0, 0, 0.87);\n}\n.select-wrapper + label {\n position: absolute;\n top: -26px;\n font-size: 0.8rem;\n}\n\nselect:disabled {\n color: rgba(0, 0, 0, 0.42);\n}\n\n.select-wrapper.disabled + label {\n color: rgba(0, 0, 0, 0.42);\n}\n.select-wrapper.disabled .caret {\n fill: rgba(0, 0, 0, 0.42);\n}\n\n.select-wrapper input.select-dropdown:disabled {\n color: rgba(0, 0, 0, 0.42);\n cursor: default;\n user-select: none;\n}\n\n.select-wrapper i {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.select-dropdown li.disabled,\n.select-dropdown li.disabled > span,\n.select-dropdown li.optgroup {\n color: rgba(0, 0, 0, 0.3);\n background-color: transparent;\n}\n\nbody.keyboard-focused .select-dropdown.dropdown-content li:focus {\n background-color: rgba(0, 0, 0, 0.08);\n}\n\n.select-dropdown.dropdown-content li:hover {\n background-color: rgba(0, 0, 0, 0.08);\n}\n.select-dropdown.dropdown-content li.selected {\n background-color: rgba(0, 0, 0, 0.03);\n}\n\n.prefix ~ .select-wrapper {\n margin-left: 3rem;\n width: 92%;\n width: calc(100% - 3rem);\n}\n\n.prefix ~ label {\n margin-left: 3rem;\n}\n\n.select-dropdown li img {\n margin: 5px 15px;\n float: right;\n}\n\n.select-dropdown li.optgroup.selected > span {\n color: rgba(0, 0, 0, 0.7);\n}\n.select-dropdown li.optgroup > span {\n color: rgba(0, 0, 0, 0.4);\n}\n.select-dropdown li.optgroup ~ li.optgroup-option {\n padding-left: 1rem;\n}\n\n/* File Input\n ========================================================================== */\n.file-field {\n position: relative;\n}\n.file-field .file-path-wrapper {\n overflow: hidden;\n padding-left: 10px;\n}\n.file-field input.file-path {\n width: 100%;\n}\n.file-field .btn, .file-field .btn-small, .file-field .btn-large {\n float: left;\n height: 56px;\n line-height: 56px;\n}\n.file-field span {\n cursor: pointer;\n}\n.file-field input[type=file] {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n margin: 0;\n padding: 0;\n font-size: 20px;\n cursor: pointer;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.file-field input[type=file]::-webkit-file-upload-button {\n display: none;\n}\n\n/* Range\n ========================================================================== */\n.range-field {\n position: relative;\n}\n\ninput[type=range],\ninput[type=range] + .thumb {\n cursor: pointer;\n}\n\ninput[type=range] {\n position: relative;\n background-color: transparent;\n border: none;\n outline: none;\n width: 100%;\n margin: 15px 0;\n padding: 0;\n}\ninput[type=range]:focus {\n outline: none;\n}\n\ninput[type=range] + .thumb {\n position: absolute;\n top: 10px;\n left: 0;\n border: none;\n height: 0;\n width: 0;\n border-radius: 50%;\n background-color: #26a69a;\n margin-left: 7px;\n transform-origin: 50% 50%;\n transform: rotate(-45deg);\n}\ninput[type=range] + .thumb .value {\n display: block;\n width: 30px;\n text-align: center;\n color: #26a69a;\n font-size: 0;\n transform: rotate(45deg);\n}\ninput[type=range] + .thumb.active {\n border-radius: 50% 50% 50% 0;\n}\ninput[type=range] + .thumb.active .value {\n color: #fff;\n margin-left: -1px;\n margin-top: 8px;\n font-size: 10px;\n}\n\ninput[type=range] {\n -webkit-appearance: none;\n}\n\ninput[type=range]::-webkit-slider-runnable-track {\n height: 3px;\n background: #c2c0c2;\n border: none;\n}\n\ninput[type=range]::-webkit-slider-thumb {\n border: none;\n height: 14px;\n width: 14px;\n border-radius: 50%;\n background: #26a69a;\n transition: box-shadow 0.3s;\n -webkit-appearance: none;\n background-color: #26a69a;\n transform-origin: 50% 50%;\n margin: -5px 0 0 0;\n}\n\n.keyboard-focused input[type=range]:focus:not(.active)::-webkit-slider-thumb {\n box-shadow: 0 0 0 10px rgba(38, 166, 154, 0.26);\n}\n\ninput[type=range] {\n /* fix for FF unable to apply focus style bug */\n border: 1px solid white;\n /*required for proper track sizing in FF*/\n}\n\ninput[type=range]::-moz-range-track {\n height: 3px;\n background: #c2c0c2;\n border: none;\n}\n\ninput[type=range]::-moz-focus-inner {\n border: 0;\n}\n\ninput[type=range]::-moz-range-thumb {\n border: none;\n height: 14px;\n width: 14px;\n border-radius: 50%;\n background: #26a69a;\n transition: box-shadow 0.3s;\n margin-top: -5px;\n}\n\ninput[type=range]:-moz-focusring {\n outline: 1px solid #fff;\n outline-offset: -1px;\n}\n\n.keyboard-focused input[type=range]:focus:not(.active)::-moz-range-thumb {\n box-shadow: 0 0 0 10px rgba(38, 166, 154, 0.26);\n}\n\ninput[type=range]::-ms-track {\n height: 3px;\n background: transparent;\n border-color: transparent;\n border-width: 6px 0;\n /*remove default tick marks*/\n color: transparent;\n}\n\ninput[type=range]::-ms-fill-lower {\n background: #777;\n}\n\ninput[type=range]::-ms-fill-upper {\n background: #ddd;\n}\n\ninput[type=range]::-ms-thumb {\n border: none;\n height: 14px;\n width: 14px;\n border-radius: 50%;\n background: #26a69a;\n transition: box-shadow 0.3s;\n}\n\n.keyboard-focused input[type=range]:focus:not(.active)::-ms-thumb {\n box-shadow: 0 0 0 10px rgba(38, 166, 154, 0.26);\n}\n\n.parallax {\n /* Set a specific height */\n min-height: 500px;\n /* Create the parallax scrolling effect */\n background-attachment: fixed;\n background-position: center;\n background-repeat: no-repeat;\n background-size: cover;\n}\n\n* {\n box-sizing: border-box;\n}\n\nbody {\n font-family: sans-serif;\n}\n\n.scene {\n width: 200px;\n height: 200px;\n border: 1px solid #CCC;\n margin: 80px;\n perspective: 400px;\n}\n\n.cube {\n width: 200px;\n height: 200px;\n position: relative;\n transform-style: preserve-3d;\n transform: translateZ(-400px);\n transition: transform 1s;\n}\n\n.cube.show-front {\n transform: translateZ(-10px) rotateY(0deg);\n}\n\n.cube.show-right {\n transform: translateZ(-10px) rotateY(-90deg);\n}\n\n.cube.show-back {\n transform: translateZ(-10px) rotateY(-180deg);\n}\n\n.cube.show-left {\n transform: translateZ(-10px) rotateY(90deg);\n}\n\n.cube.show-top {\n transform: translateZ(-10px) rotateX(-90deg);\n}\n\n.cube.show-bottom {\n transform: translateZ(-10px) rotateX(90deg);\n}\n\n.cube__face {\n position: absolute;\n width: 200px;\n height: 200px;\n border: 2px solid black;\n line-height: 200px;\n font-size: 40px;\n font-weight: bold;\n color: white;\n text-align: center;\n}\n\n.cube__face--front {\n background: hsla(0deg, 100%, 50%, 0.7);\n}\n\n.cube__face--right {\n background: hsla(60deg, 100%, 50%, 0.7);\n}\n\n.cube__face--back {\n background: hsla(120deg, 100%, 50%, 0.7);\n}\n\n.cube__face--left {\n background: hsla(180deg, 100%, 50%, 0.7);\n}\n\n.cube__face--top {\n background: hsla(240deg, 100%, 50%, 0.7);\n}\n\n.cube__face--bottom {\n background: hsla(300deg, 100%, 50%, 0.7);\n}\n\n.cube__face--front {\n transform: rotateY(0deg) translateZ(100px);\n}\n\n.cube__face--right {\n transform: rotateY(90deg) translateZ(100px);\n}\n\n.cube__face--back {\n transform: rotateY(180deg) translateZ(100px);\n}\n\n.cube__face--left {\n transform: rotateY(-90deg) translateZ(100px);\n}\n\n.cube__face--top {\n transform: rotateX(90deg) translateZ(100px);\n}\n\n.cube__face--bottom {\n transform: rotateX(-90deg) translateZ(100px);\n}\n\nlabel {\n margin-right: 10px;\n}\n\n.container {\n margin: 0 auto;\n max-width: 1280px;\n width: 90%;\n}\n\n@media only screen and (min-width : 601px) {\n .container {\n width: 85%;\n }\n}\n@media only screen and (min-width : 993px) {\n .container {\n width: 70%;\n }\n}\n.col .row {\n margin-left: -0.5rem;\n margin-right: -0.5rem;\n}\n\n.section {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.section.no-pad {\n padding: 0;\n}\n.section.no-pad-bot {\n padding-bottom: 0;\n}\n.section.no-pad-top {\n padding-top: 0;\n}\n\n.row {\n margin-left: auto;\n margin-right: auto;\n margin-bottom: 20px;\n}\n.row:after {\n content: \"\";\n display: table;\n clear: both;\n}\n.row .col {\n float: left;\n box-sizing: border-box;\n padding: 0 0.5rem;\n min-height: 1px;\n}\n.row .col[class*=push-], .row .col[class*=pull-] {\n position: relative;\n}\n.row .col.s1 {\n width: 8.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s2 {\n width: 16.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s3 {\n width: 25%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s4 {\n width: 33.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s5 {\n width: 41.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s6 {\n width: 50%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s7 {\n width: 58.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s8 {\n width: 66.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s9 {\n width: 75%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s10 {\n width: 83.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s11 {\n width: 91.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s12 {\n width: 100%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.offset-s1 {\n margin-left: 8.3333333333%;\n}\n.row .col.pull-s1 {\n right: 8.3333333333%;\n}\n.row .col.push-s1 {\n left: 8.3333333333%;\n}\n.row .col.offset-s2 {\n margin-left: 16.6666666667%;\n}\n.row .col.pull-s2 {\n right: 16.6666666667%;\n}\n.row .col.push-s2 {\n left: 16.6666666667%;\n}\n.row .col.offset-s3 {\n margin-left: 25%;\n}\n.row .col.pull-s3 {\n right: 25%;\n}\n.row .col.push-s3 {\n left: 25%;\n}\n.row .col.offset-s4 {\n margin-left: 33.3333333333%;\n}\n.row .col.pull-s4 {\n right: 33.3333333333%;\n}\n.row .col.push-s4 {\n left: 33.3333333333%;\n}\n.row .col.offset-s5 {\n margin-left: 41.6666666667%;\n}\n.row .col.pull-s5 {\n right: 41.6666666667%;\n}\n.row .col.push-s5 {\n left: 41.6666666667%;\n}\n.row .col.offset-s6 {\n margin-left: 50%;\n}\n.row .col.pull-s6 {\n right: 50%;\n}\n.row .col.push-s6 {\n left: 50%;\n}\n.row .col.offset-s7 {\n margin-left: 58.3333333333%;\n}\n.row .col.pull-s7 {\n right: 58.3333333333%;\n}\n.row .col.push-s7 {\n left: 58.3333333333%;\n}\n.row .col.offset-s8 {\n margin-left: 66.6666666667%;\n}\n.row .col.pull-s8 {\n right: 66.6666666667%;\n}\n.row .col.push-s8 {\n left: 66.6666666667%;\n}\n.row .col.offset-s9 {\n margin-left: 75%;\n}\n.row .col.pull-s9 {\n right: 75%;\n}\n.row .col.push-s9 {\n left: 75%;\n}\n.row .col.offset-s10 {\n margin-left: 83.3333333333%;\n}\n.row .col.pull-s10 {\n right: 83.3333333333%;\n}\n.row .col.push-s10 {\n left: 83.3333333333%;\n}\n.row .col.offset-s11 {\n margin-left: 91.6666666667%;\n}\n.row .col.pull-s11 {\n right: 91.6666666667%;\n}\n.row .col.push-s11 {\n left: 91.6666666667%;\n}\n.row .col.offset-s12 {\n margin-left: 100%;\n}\n.row .col.pull-s12 {\n right: 100%;\n}\n.row .col.push-s12 {\n left: 100%;\n}\n@media only screen and (min-width : 601px) {\n .row .col.m1 {\n width: 8.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m2 {\n width: 16.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m3 {\n width: 25%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m4 {\n width: 33.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m5 {\n width: 41.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m6 {\n width: 50%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m7 {\n width: 58.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m8 {\n width: 66.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m9 {\n width: 75%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m10 {\n width: 83.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m11 {\n width: 91.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m12 {\n width: 100%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.offset-m1 {\n margin-left: 8.3333333333%;\n }\n .row .col.pull-m1 {\n right: 8.3333333333%;\n }\n .row .col.push-m1 {\n left: 8.3333333333%;\n }\n .row .col.offset-m2 {\n margin-left: 16.6666666667%;\n }\n .row .col.pull-m2 {\n right: 16.6666666667%;\n }\n .row .col.push-m2 {\n left: 16.6666666667%;\n }\n .row .col.offset-m3 {\n margin-left: 25%;\n }\n .row .col.pull-m3 {\n right: 25%;\n }\n .row .col.push-m3 {\n left: 25%;\n }\n .row .col.offset-m4 {\n margin-left: 33.3333333333%;\n }\n .row .col.pull-m4 {\n right: 33.3333333333%;\n }\n .row .col.push-m4 {\n left: 33.3333333333%;\n }\n .row .col.offset-m5 {\n margin-left: 41.6666666667%;\n }\n .row .col.pull-m5 {\n right: 41.6666666667%;\n }\n .row .col.push-m5 {\n left: 41.6666666667%;\n }\n .row .col.offset-m6 {\n margin-left: 50%;\n }\n .row .col.pull-m6 {\n right: 50%;\n }\n .row .col.push-m6 {\n left: 50%;\n }\n .row .col.offset-m7 {\n margin-left: 58.3333333333%;\n }\n .row .col.pull-m7 {\n right: 58.3333333333%;\n }\n .row .col.push-m7 {\n left: 58.3333333333%;\n }\n .row .col.offset-m8 {\n margin-left: 66.6666666667%;\n }\n .row .col.pull-m8 {\n right: 66.6666666667%;\n }\n .row .col.push-m8 {\n left: 66.6666666667%;\n }\n .row .col.offset-m9 {\n margin-left: 75%;\n }\n .row .col.pull-m9 {\n right: 75%;\n }\n .row .col.push-m9 {\n left: 75%;\n }\n .row .col.offset-m10 {\n margin-left: 83.3333333333%;\n }\n .row .col.pull-m10 {\n right: 83.3333333333%;\n }\n .row .col.push-m10 {\n left: 83.3333333333%;\n }\n .row .col.offset-m11 {\n margin-left: 91.6666666667%;\n }\n .row .col.pull-m11 {\n right: 91.6666666667%;\n }\n .row .col.push-m11 {\n left: 91.6666666667%;\n }\n .row .col.offset-m12 {\n margin-left: 100%;\n }\n .row .col.pull-m12 {\n right: 100%;\n }\n .row .col.push-m12 {\n left: 100%;\n }\n}\n@media only screen and (min-width : 993px) {\n .row .col.l1 {\n width: 8.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l2 {\n width: 16.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l3 {\n width: 25%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l4 {\n width: 33.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l5 {\n width: 41.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l6 {\n width: 50%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l7 {\n width: 58.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l8 {\n width: 66.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l9 {\n width: 75%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l10 {\n width: 83.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l11 {\n width: 91.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l12 {\n width: 100%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.offset-l1 {\n margin-left: 8.3333333333%;\n }\n .row .col.pull-l1 {\n right: 8.3333333333%;\n }\n .row .col.push-l1 {\n left: 8.3333333333%;\n }\n .row .col.offset-l2 {\n margin-left: 16.6666666667%;\n }\n .row .col.pull-l2 {\n right: 16.6666666667%;\n }\n .row .col.push-l2 {\n left: 16.6666666667%;\n }\n .row .col.offset-l3 {\n margin-left: 25%;\n }\n .row .col.pull-l3 {\n right: 25%;\n }\n .row .col.push-l3 {\n left: 25%;\n }\n .row .col.offset-l4 {\n margin-left: 33.3333333333%;\n }\n .row .col.pull-l4 {\n right: 33.3333333333%;\n }\n .row .col.push-l4 {\n left: 33.3333333333%;\n }\n .row .col.offset-l5 {\n margin-left: 41.6666666667%;\n }\n .row .col.pull-l5 {\n right: 41.6666666667%;\n }\n .row .col.push-l5 {\n left: 41.6666666667%;\n }\n .row .col.offset-l6 {\n margin-left: 50%;\n }\n .row .col.pull-l6 {\n right: 50%;\n }\n .row .col.push-l6 {\n left: 50%;\n }\n .row .col.offset-l7 {\n margin-left: 58.3333333333%;\n }\n .row .col.pull-l7 {\n right: 58.3333333333%;\n }\n .row .col.push-l7 {\n left: 58.3333333333%;\n }\n .row .col.offset-l8 {\n margin-left: 66.6666666667%;\n }\n .row .col.pull-l8 {\n right: 66.6666666667%;\n }\n .row .col.push-l8 {\n left: 66.6666666667%;\n }\n .row .col.offset-l9 {\n margin-left: 75%;\n }\n .row .col.pull-l9 {\n right: 75%;\n }\n .row .col.push-l9 {\n left: 75%;\n }\n .row .col.offset-l10 {\n margin-left: 83.3333333333%;\n }\n .row .col.pull-l10 {\n right: 83.3333333333%;\n }\n .row .col.push-l10 {\n left: 83.3333333333%;\n }\n .row .col.offset-l11 {\n margin-left: 91.6666666667%;\n }\n .row .col.pull-l11 {\n right: 91.6666666667%;\n }\n .row .col.push-l11 {\n left: 91.6666666667%;\n }\n .row .col.offset-l12 {\n margin-left: 100%;\n }\n .row .col.pull-l12 {\n right: 100%;\n }\n .row .col.push-l12 {\n left: 100%;\n }\n}\n@media only screen and (min-width : 1201px) {\n .row .col.xl1 {\n width: 8.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl2 {\n width: 16.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl3 {\n width: 25%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl4 {\n width: 33.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl5 {\n width: 41.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl6 {\n width: 50%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl7 {\n width: 58.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl8 {\n width: 66.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl9 {\n width: 75%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl10 {\n width: 83.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl11 {\n width: 91.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl12 {\n width: 100%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.offset-xl1 {\n margin-left: 8.3333333333%;\n }\n .row .col.pull-xl1 {\n right: 8.3333333333%;\n }\n .row .col.push-xl1 {\n left: 8.3333333333%;\n }\n .row .col.offset-xl2 {\n margin-left: 16.6666666667%;\n }\n .row .col.pull-xl2 {\n right: 16.6666666667%;\n }\n .row .col.push-xl2 {\n left: 16.6666666667%;\n }\n .row .col.offset-xl3 {\n margin-left: 25%;\n }\n .row .col.pull-xl3 {\n right: 25%;\n }\n .row .col.push-xl3 {\n left: 25%;\n }\n .row .col.offset-xl4 {\n margin-left: 33.3333333333%;\n }\n .row .col.pull-xl4 {\n right: 33.3333333333%;\n }\n .row .col.push-xl4 {\n left: 33.3333333333%;\n }\n .row .col.offset-xl5 {\n margin-left: 41.6666666667%;\n }\n .row .col.pull-xl5 {\n right: 41.6666666667%;\n }\n .row .col.push-xl5 {\n left: 41.6666666667%;\n }\n .row .col.offset-xl6 {\n margin-left: 50%;\n }\n .row .col.pull-xl6 {\n right: 50%;\n }\n .row .col.push-xl6 {\n left: 50%;\n }\n .row .col.offset-xl7 {\n margin-left: 58.3333333333%;\n }\n .row .col.pull-xl7 {\n right: 58.3333333333%;\n }\n .row .col.push-xl7 {\n left: 58.3333333333%;\n }\n .row .col.offset-xl8 {\n margin-left: 66.6666666667%;\n }\n .row .col.pull-xl8 {\n right: 66.6666666667%;\n }\n .row .col.push-xl8 {\n left: 66.6666666667%;\n }\n .row .col.offset-xl9 {\n margin-left: 75%;\n }\n .row .col.pull-xl9 {\n right: 75%;\n }\n .row .col.push-xl9 {\n left: 75%;\n }\n .row .col.offset-xl10 {\n margin-left: 83.3333333333%;\n }\n .row .col.pull-xl10 {\n right: 83.3333333333%;\n }\n .row .col.push-xl10 {\n left: 83.3333333333%;\n }\n .row .col.offset-xl11 {\n margin-left: 91.6666666667%;\n }\n .row .col.pull-xl11 {\n right: 91.6666666667%;\n }\n .row .col.push-xl11 {\n left: 91.6666666667%;\n }\n .row .col.offset-xl12 {\n margin-left: 100%;\n }\n .row .col.pull-xl12 {\n right: 100%;\n }\n .row .col.push-xl12 {\n left: 100%;\n }\n}\n\n.sidenav {\n position: fixed;\n width: 300px;\n left: 0;\n top: 0;\n margin: 0;\n height: 100%;\n height: calc(100% + 60px);\n height: -moz-calc(100%);\n padding-bottom: 60px;\n background-color: #fff;\n z-index: 999;\n overflow-y: auto;\n will-change: transform;\n backface-visibility: hidden;\n transform: translateX(-105%);\n transition: transform 1s;\n}\n.sidenav.right-aligned {\n right: 0;\n left: auto;\n transform: translateX(100%);\n}\n.sidenav .collapsible {\n margin: 0;\n}\n.sidenav li {\n float: none;\n}\n.sidenav li .iconSideLink {\n display: flex;\n align-items: center;\n}\n.sidenav li .iconSideLink svg {\n stroke: rgba(0, 0, 0, 0.2);\n width: 30px;\n}\n.sidenav li.active {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.sidenav li.active svg {\n stroke: white !important;\n width: 30px;\n}\n.sidenav li.last {\n position: sticky;\n top: calc(100% - 45px - 35px);\n}\n.sidenav li > a {\n color: rgba(0, 0, 0, 0.87);\n display: flex;\n font-size: 14px;\n font-weight: 700;\n height: 45px;\n line-height: 45px;\n padding: 0 30px;\n}\n.sidenav li > a:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.sidenav li > a.btn, .sidenav li > a.btn-small, .sidenav li > a.btn-large, .sidenav li > a.btn-flat, .sidenav li > a.btn-floating {\n margin: 10px 15px;\n}\n.sidenav li > a.btn, .sidenav li > a.btn-small, .sidenav li > a.btn-large, .sidenav li > a.btn-floating {\n color: #fff;\n}\n.sidenav li > a.btn-flat {\n color: #343434;\n}\n.sidenav li > a.btn:hover, .sidenav li > a.btn-small:hover, .sidenav li > a.btn-large:hover {\n background-color: #414141;\n}\n.sidenav li > a.btn-floating:hover {\n background-color: #343434;\n}\n.sidenav li > a > i, .sidenav li > a > [class^=mdi-],\n.sidenav li > a li > a > [class*=mdi-], .sidenav li > a > i.s-icon {\n float: left;\n height: 45px;\n line-height: 45px;\n margin: 0 30px 0 0;\n width: 22.5px;\n color: rgba(0, 0, 0, 0.54);\n}\n.sidenav .divider {\n margin: 7.5px 0 0 0;\n}\n.sidenav .subheader {\n cursor: initial;\n pointer-events: none;\n color: rgba(0, 0, 0, 0.54);\n font-size: 14px;\n font-weight: 500;\n line-height: 45px;\n}\n.sidenav .subheader:hover {\n background-color: transparent;\n}\n.sidenav .user-view {\n position: relative;\n padding: 30px 30px 0;\n margin-bottom: 7.5px;\n}\n.sidenav .user-view > a {\n height: auto;\n padding: 0;\n}\n.sidenav .user-view > a:hover {\n background-color: transparent;\n}\n.sidenav .user-view .background {\n overflow: hidden;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n}\n.sidenav .user-view .circle,\n.sidenav .user-view .name,\n.sidenav .user-view .email {\n display: block;\n}\n.sidenav .user-view .circle {\n height: 64px;\n width: 64px;\n}\n.sidenav .user-view .name,\n.sidenav .user-view .email {\n font-size: 14px;\n line-height: 22.5px;\n}\n.sidenav .user-view .name {\n margin-top: 16px;\n font-weight: 500;\n}\n.sidenav .user-view .email {\n padding-bottom: 16px;\n font-weight: 400;\n}\n\n.drag-target {\n height: 100%;\n width: 10px;\n position: fixed;\n top: 0;\n z-index: 998;\n}\n.drag-target.right-aligned {\n right: 0;\n}\n\n.sidenav.sidenav-fixed {\n left: 0;\n transform: translateX(0);\n position: fixed;\n}\n.sidenav.sidenav-fixed.right-aligned {\n right: 0;\n left: auto;\n}\n\n@media only screen and (max-width : 992px) {\n .sidenav.sidenav-fixed {\n transform: translateX(-105%);\n }\n .sidenav.sidenav-fixed.right-aligned {\n transform: translateX(105%);\n }\n .sidenav > a {\n padding: 0 15px;\n }\n .sidenav .user-view {\n padding: 15px 15px 0;\n }\n}\n.sidenav .collapsible-body > ul:not(.collapsible) > li.active,\n.sidenav.sidenav-fixed .collapsible-body > ul:not(.collapsible) > li.active {\n background-color: #90caf9;\n}\n.sidenav .collapsible-body > ul:not(.collapsible) > li.active a,\n.sidenav.sidenav-fixed .collapsible-body > ul:not(.collapsible) > li.active a {\n color: #fff;\n}\n\n.sidenav .collapsible-body {\n padding: 0;\n}\n\n.sidenav-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n opacity: 0;\n height: 120vh;\n background-color: rgba(0, 0, 0, 0.5);\n z-index: 997;\n display: none;\n}\n\n.with-side-nav-open {\n padding-left: 300px;\n transition: padding 1s;\n}\n\n.btn, .btn-small, .btn-large,\n.btn-flat {\n border: none;\n border-radius: 2px;\n display: inline-block;\n height: 36px;\n line-height: 36px;\n padding: 0 16px;\n text-transform: uppercase;\n vertical-align: middle;\n -webkit-tap-highlight-color: transparent;\n}\n\n.btn.disabled,\n.btn-floating.disabled,\n.btn-large.disabled,\n.btn-small.disabled,\n.btn-flat.disabled,\n.btn:disabled,\n.btn-floating:disabled,\n.btn-large:disabled,\n.btn-small:disabled,\n.btn-flat:disabled,\n.btn[disabled],\n.btn-floating[disabled],\n.btn-large[disabled],\n.btn-small[disabled],\n.btn-flat[disabled] {\n pointer-events: none;\n background-color: #DFDFDF !important;\n box-shadow: none;\n color: #9F9F9F !important;\n cursor: default;\n}\n.btn.disabled:hover,\n.btn-floating.disabled:hover,\n.btn-large.disabled:hover,\n.btn-small.disabled:hover,\n.btn-flat.disabled:hover,\n.btn:disabled:hover,\n.btn-floating:disabled:hover,\n.btn-large:disabled:hover,\n.btn-small:disabled:hover,\n.btn-flat:disabled:hover,\n.btn[disabled]:hover,\n.btn-floating[disabled]:hover,\n.btn-large[disabled]:hover,\n.btn-small[disabled]:hover,\n.btn-flat[disabled]:hover {\n background-color: #DFDFDF !important;\n color: #9F9F9F !important;\n}\n\n.btn,\n.btn-small,\n.btn-large,\n.btn-floating,\n.btn-flat {\n font-size: 14px;\n outline: 0;\n}\n.btn i,\n.btn-floating i,\n.btn-large i,\n.btn-small i,\n.btn-flat i {\n font-size: 1.3rem;\n line-height: inherit;\n}\n\n.btn:focus, .btn-small:focus, .btn-large:focus,\n.btn-floating:focus {\n background-color: #1b1b1b;\n}\n\n.btn, .btn-small, .btn-large {\n text-decoration: none;\n color: #fff;\n background-color: #343434;\n text-align: center;\n letter-spacing: 0.5px;\n transition: background-color 0.2s ease-out;\n cursor: pointer;\n}\n.btn:hover, .btn-small:hover, .btn-large:hover {\n background-color: #414141;\n}\n\n.btn-floating {\n display: inline-block;\n color: #fff;\n position: relative;\n overflow: hidden;\n z-index: 1;\n width: 40px;\n height: 40px;\n line-height: 40px;\n padding: 0;\n background-color: #26a69a;\n border-radius: 50%;\n transition: background-color 0.3s;\n cursor: pointer;\n vertical-align: middle;\n}\n.btn-floating:hover {\n background-color: #26a69a;\n}\n.btn-floating:before {\n border-radius: 0;\n}\n.btn-floating.btn-large {\n width: 56px;\n height: 56px;\n padding: 0;\n}\n.btn-floating.btn-large.halfway-fab {\n bottom: 28px;\n}\n.btn-floating.btn-large i {\n line-height: 56px;\n}\n.btn-floating.btn-small {\n width: 32.4px;\n height: 32.4px;\n}\n.btn-floating.btn-small.halfway-fab {\n bottom: 16.2px;\n}\n.btn-floating.btn-small i {\n line-height: 32.4px;\n}\n.btn-floating.halfway-fab {\n position: absolute;\n right: 24px;\n bottom: 20px;\n}\n.btn-floating.halfway-fab.left {\n right: auto;\n left: 24px;\n}\n.btn-floating i {\n width: inherit;\n display: inline-block;\n text-align: center;\n color: #fff;\n font-size: 1.6rem;\n line-height: 40px;\n}\n\nbutton.btn-floating {\n border: none;\n}\n\n.fixed-action-btn {\n position: fixed;\n right: 23px;\n bottom: 23px;\n padding-top: 15px;\n margin-bottom: 0;\n z-index: 997;\n}\n.fixed-action-btn.active ul {\n visibility: visible;\n}\n.fixed-action-btn.direction-left, .fixed-action-btn.direction-right {\n padding: 0 0 0 15px;\n}\n.fixed-action-btn.direction-left ul, .fixed-action-btn.direction-right ul {\n text-align: right;\n right: 64px;\n top: 50%;\n transform: translateY(-50%);\n height: 100%;\n left: auto;\n /*width 100% only goes to width of button container */\n width: 500px;\n}\n.fixed-action-btn.direction-left ul li, .fixed-action-btn.direction-right ul li {\n display: inline-block;\n margin: 7.5px 15px 0 0;\n}\n.fixed-action-btn.direction-right {\n padding: 0 15px 0 0;\n}\n.fixed-action-btn.direction-right ul {\n text-align: left;\n direction: rtl;\n left: 64px;\n right: auto;\n}\n.fixed-action-btn.direction-right ul li {\n margin: 7.5px 0 0 15px;\n}\n.fixed-action-btn.direction-bottom {\n padding: 0 0 15px 0;\n}\n.fixed-action-btn.direction-bottom ul {\n top: 64px;\n bottom: auto;\n display: flex;\n flex-direction: column-reverse;\n}\n.fixed-action-btn.direction-bottom ul li {\n margin: 15px 0 0 0;\n}\n.fixed-action-btn.toolbar {\n padding: 0;\n height: 56px;\n}\n.fixed-action-btn.toolbar.active > a i {\n opacity: 0;\n}\n.fixed-action-btn.toolbar ul {\n display: flex;\n top: 0;\n bottom: 0;\n z-index: 1;\n}\n.fixed-action-btn.toolbar ul li {\n flex: 1;\n display: inline-block;\n margin: 0;\n height: 100%;\n transition: none;\n}\n.fixed-action-btn.toolbar ul li a {\n display: block;\n overflow: hidden;\n position: relative;\n width: 100%;\n height: 100%;\n background-color: transparent;\n box-shadow: none;\n color: #fff;\n line-height: 56px;\n z-index: 1;\n}\n.fixed-action-btn.toolbar ul li a i {\n line-height: inherit;\n}\n.fixed-action-btn ul {\n left: 0;\n right: 0;\n text-align: center;\n position: absolute;\n bottom: 64px;\n margin: 0;\n visibility: hidden;\n}\n.fixed-action-btn ul li {\n margin-bottom: 15px;\n}\n.fixed-action-btn ul a.btn-floating {\n opacity: 0;\n}\n.fixed-action-btn .fab-backdrop {\n position: absolute;\n top: 0;\n left: 0;\n z-index: -1;\n width: 40px;\n height: 40px;\n background-color: #26a69a;\n border-radius: 50%;\n transform: scale(0);\n}\n\n.btn-flat {\n box-shadow: none;\n background-color: transparent;\n color: #343434;\n cursor: pointer;\n transition: background-color 0.2s;\n}\n.btn-flat:focus, .btn-flat:hover {\n box-shadow: none;\n}\n.btn-flat:focus {\n background-color: rgba(0, 0, 0, 0.1);\n}\n.btn-flat.disabled, .btn-flat.btn-flat[disabled] {\n background-color: transparent !important;\n color: #b3b3b3 !important;\n cursor: default;\n}\n\n.btn-large {\n height: 54px;\n line-height: 54px;\n font-size: 15px;\n padding: 0 28px;\n}\n.btn-large i {\n font-size: 1.6rem;\n}\n\n.btn-small {\n height: 32.4px;\n line-height: 32.4px;\n font-size: 13px;\n}\n.btn-small i {\n font-size: 1.2rem;\n}\n\n.btn-block {\n display: block;\n}\n\n.communTabHeader, .tabs.activeTab-2 .tab-header-over2 .tab-header, .tabs.activeTab-2 .tab-header-over1 .tab-header, .tabs.activeTab-2 .tab-header-over0 .tab-header, .tabs.activeTab-1 .tab-header-over2 .tab-header, .tabs.activeTab-1 .tab-header-over1 .tab-header, .tabs.activeTab-1 .tab-header-over0 .tab-header, .tabs.activeTab-0 .tab-header-over2 .tab-header, .tabs.activeTab-0 .tab-header-over1 .tab-header, .tabs.activeTab-0 .tab-header-over0 .tab-header {\n height: 100px;\n padding: 40px;\n}\n\n.tabs {\n min-height: calc(100% - 150px);\n margin-top: 30px;\n padding: 0 !important;\n border-radius: 40px !important;\n}\n.tabs .innerpage {\n min-height: 70VH !important;\n}\n.tabs .tabs-header-overlay {\n display: flex;\n height: 100px;\n}\n.tabs.activeTab-0 .tab-header-over0 {\n flex: 1;\n background-color: #80c4fd;\n border-radius: 40px 0 0 0;\n}\n.tabs.activeTab-0 .tab-header-over0 .tab-header {\n background-color: #cbe7fe;\n border-radius: 40px 40px 0 0;\n}\n.tabs.activeTab-0 .tab-header-over1 {\n flex: 1;\n background: linear-gradient(0.25turn, #cbe7fe, #35a2fb);\n border-radius: 0 0 0 0;\n}\n.tabs.activeTab-0 .tab-header-over1 .tab-header {\n background-color: #80c4fd;\n border-radius: 0 40px 0 40px;\n}\n.tabs.activeTab-0 .tab-header-over2 {\n flex: 1;\n background-color: #80c4fd;\n border-radius: 0 40px 0 0;\n}\n.tabs.activeTab-0 .tab-header-over2 .tab-header {\n background-color: #35a2fb;\n border-radius: 0 40px 0 40px;\n}\n.tabs.activeTab-1 .tab-header-over0 {\n flex: 1;\n background-color: #cbe7fe;\n border-radius: 40px 0 0 0;\n}\n.tabs.activeTab-1 .tab-header-over0 .tab-header {\n background-color: #80c4fd;\n border-radius: 40px 0 40px 0;\n}\n.tabs.activeTab-1 .tab-header-over1 {\n flex: 1;\n background: linear-gradient(0.25turn, #80c4fd, #35a2fb);\n border-radius: 0 0 0 0;\n}\n.tabs.activeTab-1 .tab-header-over1 .tab-header {\n background-color: #cbe7fe;\n border-radius: 40px 40px 0 0;\n}\n.tabs.activeTab-1 .tab-header-over2 {\n flex: 1;\n background-color: #cbe7fe;\n border-radius: 0 40px 0 0;\n}\n.tabs.activeTab-1 .tab-header-over2 .tab-header {\n background-color: #35a2fb;\n border-radius: 0 40px 0 40px;\n}\n.tabs.activeTab-2 .tab-header-over0 {\n flex: 1;\n background-color: #35a2fb;\n border-radius: 40px 0 0 0;\n}\n.tabs.activeTab-2 .tab-header-over0 .tab-header {\n background-color: #80c4fd;\n border-radius: 40px 0 40px 0;\n}\n.tabs.activeTab-2 .tab-header-over1 {\n flex: 1;\n background: linear-gradient(0.25turn, #80c4fd, #cbe7fe);\n border-radius: 0 0 0 0;\n}\n.tabs.activeTab-2 .tab-header-over1 .tab-header {\n background-color: #35a2fb;\n border-radius: 40px 0 40px 0;\n}\n.tabs.activeTab-2 .tab-header-over2 {\n flex: 1;\n background-color: #35a2fb;\n border-radius: 0 40px 0 0;\n}\n.tabs.activeTab-2 .tab-header-over2 .tab-header {\n background-color: #cbe7fe;\n border-radius: 40px 40px 0 0;\n}\n.tabs .tab-content {\n background-color: #cbe7fe;\n padding: 10px;\n border-top: 0;\n min-height: 70vh;\n border-radius: 0 0 40px 40px;\n padding-bottom: 20px;\n}\n\n.loader-overlay {\n z-index: 999;\n position: absolute;\n height: 100vh;\n width: 100vw;\n top: 0;\n left: 0;\n background-color: rgba(102, 100, 100, 0.603);\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n}\n.loader-overlay .loader {\n border: 7px solid #f3f3f3; /* Light grey */\n border-top: 7px solid #2ea2cc; /* Blue */\n border-radius: 50%;\n width: 70px;\n height: 70px;\n animation: spin 2s linear infinite;\n}\n.loader-overlay .loader-text {\n margin-top: 20px;\n font-size: 25px;\n color: #2ea2cc;\n}\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.card-panel {\n transition: box-shadow 0.25s;\n padding: 24px;\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n border-radius: 2px;\n background-color: #fff;\n}\n\n.card {\n position: relative;\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n background-color: #fff;\n transition: box-shadow 0.25s;\n border-radius: 2px;\n}\n.card .card-title {\n font-size: 24px;\n font-weight: 300;\n}\n.card .card-title.activator {\n cursor: pointer;\n}\n.card.small, .card.medium, .card.large {\n position: relative;\n}\n.card.small .card-image, .card.medium .card-image, .card.large .card-image {\n max-height: 60%;\n overflow: hidden;\n}\n.card.small .card-image + .card-content, .card.medium .card-image + .card-content, .card.large .card-image + .card-content {\n max-height: 40%;\n}\n.card.small .card-content, .card.medium .card-content, .card.large .card-content {\n max-height: 100%;\n overflow: hidden;\n}\n.card.small .card-action, .card.medium .card-action, .card.large .card-action {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n}\n.card.small {\n height: 300px;\n}\n.card.medium {\n height: 400px;\n}\n.card.large {\n height: 500px;\n}\n.card.horizontal {\n display: flex;\n}\n.card.horizontal.small .card-image, .card.horizontal.medium .card-image, .card.horizontal.large .card-image {\n height: 100%;\n max-height: none;\n overflow: visible;\n}\n.card.horizontal.small .card-image img, .card.horizontal.medium .card-image img, .card.horizontal.large .card-image img {\n height: 100%;\n}\n.card.horizontal .card-image {\n max-width: 50%;\n}\n.card.horizontal .card-image img {\n border-radius: 2px 0 0 2px;\n max-width: 100%;\n width: auto;\n}\n.card.horizontal .card-stacked {\n display: flex;\n flex-direction: column;\n flex: 1;\n position: relative;\n}\n.card.horizontal .card-stacked .card-content {\n flex-grow: 1;\n}\n.card.sticky-action .card-action {\n z-index: 2;\n}\n.card.sticky-action .card-reveal {\n z-index: 1;\n padding-bottom: 64px;\n}\n.card .card-image {\n position: relative;\n}\n.card .card-image img {\n display: block;\n border-radius: 2px 2px 0 0;\n position: relative;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n width: 100%;\n}\n.card .card-image .card-title {\n color: #fff;\n position: absolute;\n bottom: 0;\n left: 0;\n max-width: 100%;\n padding: 24px;\n}\n.card .card-content {\n padding: 24px;\n border-radius: 0 0 2px 2px;\n}\n.card .card-content p {\n margin: 0;\n}\n.card .card-content .card-title {\n display: block;\n line-height: 32px;\n margin-bottom: 8px;\n}\n.card .card-content .card-title i {\n line-height: 32px;\n}\n.card .card-action {\n background-color: inherit;\n border-top: 1px solid rgba(160, 160, 160, 0.2);\n position: relative;\n padding: 16px 24px;\n}\n.card .card-action:last-child {\n border-radius: 0 0 2px 2px;\n}\n.card .card-action a:not(.btn):not(.btn-large):not(.btn-small):not(.btn-large):not(.btn-floating) {\n color: #ffab40;\n margin-right: 24px;\n transition: color 0.3s ease;\n text-transform: uppercase;\n}\n.card .card-action a:not(.btn):not(.btn-large):not(.btn-small):not(.btn-large):not(.btn-floating):hover {\n color: #ffd8a6;\n}\n.card .card-reveal {\n padding: 24px;\n position: absolute;\n background-color: #fff;\n width: 100%;\n overflow-y: auto;\n left: 0;\n top: 100%;\n height: 100%;\n z-index: 3;\n display: none;\n}\n.card .card-reveal .card-title {\n cursor: pointer;\n display: block;\n}\n\n/*\n @license\n Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n Code distributed by Google as part of the polymer project is also\n subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n/**************************/\n/* STYLES FOR THE SPINNER */\n/**************************/\n/*\n * Constants:\n * STROKEWIDTH = 3px\n * ARCSIZE = 270 degrees (amount of circle the arc takes up)\n * ARCTIME = 1333ms (time it takes to expand and contract arc)\n * ARCSTARTROT = 216 degrees (how much the start location of the arc\n * should rotate each time, 216 gives us a\n * 5 pointed star shape (it's 360/5 * 3).\n * For a 7 pointed star, we might do\n * 360/7 * 3 = 154.286)\n * CONTAINERWIDTH = 28px\n * SHRINK_TIME = 400ms\n */\n.preloader-wrapper {\n display: inline-block;\n position: relative;\n width: 50px;\n height: 50px;\n}\n.preloader-wrapper.small {\n width: 36px;\n height: 36px;\n}\n.preloader-wrapper.big {\n width: 64px;\n height: 64px;\n}\n.preloader-wrapper.active {\n /* duration: 360 * ARCTIME / (ARCSTARTROT + (360-ARCSIZE)) */\n -webkit-animation: container-rotate 1568ms linear infinite;\n animation: container-rotate 1568ms linear infinite;\n}\n\n@-webkit-keyframes container-rotate {\n to {\n -webkit-transform: rotate(360deg);\n }\n}\n@keyframes container-rotate {\n to {\n transform: rotate(360deg);\n }\n}\n.spinner-layer {\n position: absolute;\n width: 100%;\n height: 100%;\n opacity: 0;\n border-color: #26a69a;\n}\n\n.spinner-blue,\n.spinner-blue-only {\n border-color: #4285f4;\n}\n\n.spinner-red,\n.spinner-red-only {\n border-color: #db4437;\n}\n\n.spinner-yellow,\n.spinner-yellow-only {\n border-color: #f4b400;\n}\n\n.spinner-green,\n.spinner-green-only {\n border-color: #0f9d58;\n}\n\n/**\n * IMPORTANT NOTE ABOUT CSS ANIMATION PROPERTIES (keanulee):\n *\n * iOS Safari (tested on iOS 8.1) does not handle animation-delay very well - it doesn't\n * guarantee that the animation will start _exactly_ after that value. So we avoid using\n * animation-delay and instead set custom keyframes for each color (as redundant as it\n * seems).\n *\n * We write out each animation in full (instead of separating animation-name,\n * animation-duration, etc.) because under the polyfill, Safari does not recognize those\n * specific properties properly, treats them as -webkit-animation, and overrides the\n * other animation rules. See https://github.com/Polymer/platform/issues/53.\n */\n.active .spinner-layer.spinner-blue {\n /* durations: 4 * ARCTIME */\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.active .spinner-layer.spinner-red {\n /* durations: 4 * ARCTIME */\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.active .spinner-layer.spinner-yellow {\n /* durations: 4 * ARCTIME */\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.active .spinner-layer.spinner-green {\n /* durations: 4 * ARCTIME */\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.active .spinner-layer,\n.active .spinner-layer.spinner-blue-only,\n.active .spinner-layer.spinner-red-only,\n.active .spinner-layer.spinner-yellow-only,\n.active .spinner-layer.spinner-green-only {\n /* durations: 4 * ARCTIME */\n opacity: 1;\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n@-webkit-keyframes fill-unfill-rotate {\n 12.5% {\n -webkit-transform: rotate(135deg);\n } /* 0.5 * ARCSIZE */\n 25% {\n -webkit-transform: rotate(270deg);\n } /* 1 * ARCSIZE */\n 37.5% {\n -webkit-transform: rotate(405deg);\n } /* 1.5 * ARCSIZE */\n 50% {\n -webkit-transform: rotate(540deg);\n } /* 2 * ARCSIZE */\n 62.5% {\n -webkit-transform: rotate(675deg);\n } /* 2.5 * ARCSIZE */\n 75% {\n -webkit-transform: rotate(810deg);\n } /* 3 * ARCSIZE */\n 87.5% {\n -webkit-transform: rotate(945deg);\n } /* 3.5 * ARCSIZE */\n to {\n -webkit-transform: rotate(1080deg);\n } /* 4 * ARCSIZE */\n}\n@keyframes fill-unfill-rotate {\n 12.5% {\n transform: rotate(135deg);\n } /* 0.5 * ARCSIZE */\n 25% {\n transform: rotate(270deg);\n } /* 1 * ARCSIZE */\n 37.5% {\n transform: rotate(405deg);\n } /* 1.5 * ARCSIZE */\n 50% {\n transform: rotate(540deg);\n } /* 2 * ARCSIZE */\n 62.5% {\n transform: rotate(675deg);\n } /* 2.5 * ARCSIZE */\n 75% {\n transform: rotate(810deg);\n } /* 3 * ARCSIZE */\n 87.5% {\n transform: rotate(945deg);\n } /* 3.5 * ARCSIZE */\n to {\n transform: rotate(1080deg);\n } /* 4 * ARCSIZE */\n}\n@-webkit-keyframes blue-fade-in-out {\n from {\n opacity: 1;\n }\n 25% {\n opacity: 1;\n }\n 26% {\n opacity: 0;\n }\n 89% {\n opacity: 0;\n }\n 90% {\n opacity: 1;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes blue-fade-in-out {\n from {\n opacity: 1;\n }\n 25% {\n opacity: 1;\n }\n 26% {\n opacity: 0;\n }\n 89% {\n opacity: 0;\n }\n 90% {\n opacity: 1;\n }\n 100% {\n opacity: 1;\n }\n}\n@-webkit-keyframes red-fade-in-out {\n from {\n opacity: 0;\n }\n 15% {\n opacity: 0;\n }\n 25% {\n opacity: 1;\n }\n 50% {\n opacity: 1;\n }\n 51% {\n opacity: 0;\n }\n}\n@keyframes red-fade-in-out {\n from {\n opacity: 0;\n }\n 15% {\n opacity: 0;\n }\n 25% {\n opacity: 1;\n }\n 50% {\n opacity: 1;\n }\n 51% {\n opacity: 0;\n }\n}\n@-webkit-keyframes yellow-fade-in-out {\n from {\n opacity: 0;\n }\n 40% {\n opacity: 0;\n }\n 50% {\n opacity: 1;\n }\n 75% {\n opacity: 1;\n }\n 76% {\n opacity: 0;\n }\n}\n@keyframes yellow-fade-in-out {\n from {\n opacity: 0;\n }\n 40% {\n opacity: 0;\n }\n 50% {\n opacity: 1;\n }\n 75% {\n opacity: 1;\n }\n 76% {\n opacity: 0;\n }\n}\n@-webkit-keyframes green-fade-in-out {\n from {\n opacity: 0;\n }\n 65% {\n opacity: 0;\n }\n 75% {\n opacity: 1;\n }\n 90% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n@keyframes green-fade-in-out {\n from {\n opacity: 0;\n }\n 65% {\n opacity: 0;\n }\n 75% {\n opacity: 1;\n }\n 90% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n/**\n * Patch the gap that appear between the two adjacent div.circle-clipper while the\n * spinner is rotating (appears on Chrome 38, Safari 7.1, and IE 11).\n */\n.gap-patch {\n position: absolute;\n top: 0;\n left: 45%;\n width: 10%;\n height: 100%;\n overflow: hidden;\n border-color: inherit;\n}\n\n.gap-patch .circle {\n width: 1000%;\n left: -450%;\n}\n\n.circle-clipper {\n display: inline-block;\n position: relative;\n width: 50%;\n height: 100%;\n overflow: hidden;\n border-color: inherit;\n}\n.circle-clipper .circle {\n width: 200%;\n height: 100%;\n border-width: 3px; /* STROKEWIDTH */\n border-style: solid;\n border-color: inherit;\n border-bottom-color: transparent !important;\n border-radius: 50%;\n -webkit-animation: none;\n animation: none;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n}\n.circle-clipper.left .circle {\n left: 0;\n border-right-color: transparent !important;\n -webkit-transform: rotate(129deg);\n transform: rotate(129deg);\n}\n.circle-clipper.right .circle {\n left: -100%;\n border-left-color: transparent !important;\n -webkit-transform: rotate(-129deg);\n transform: rotate(-129deg);\n}\n\n.active .circle-clipper.left .circle {\n /* duration: ARCTIME */\n -webkit-animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.active .circle-clipper.right .circle {\n /* duration: ARCTIME */\n -webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n@-webkit-keyframes left-spin {\n from {\n -webkit-transform: rotate(130deg);\n }\n 50% {\n -webkit-transform: rotate(-5deg);\n }\n to {\n -webkit-transform: rotate(130deg);\n }\n}\n@keyframes left-spin {\n from {\n transform: rotate(130deg);\n }\n 50% {\n transform: rotate(-5deg);\n }\n to {\n transform: rotate(130deg);\n }\n}\n@-webkit-keyframes right-spin {\n from {\n -webkit-transform: rotate(-130deg);\n }\n 50% {\n -webkit-transform: rotate(5deg);\n }\n to {\n -webkit-transform: rotate(-130deg);\n }\n}\n@keyframes right-spin {\n from {\n transform: rotate(-130deg);\n }\n 50% {\n transform: rotate(5deg);\n }\n to {\n transform: rotate(-130deg);\n }\n}\n#spinnerContainer.cooldown {\n /* duration: SHRINK_TIME */\n -webkit-animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1);\n animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@-webkit-keyframes fade-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n@keyframes fade-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n.progress {\n position: relative;\n height: 4px;\n display: block;\n width: 100%;\n background-color: #acece6;\n border-radius: 2px;\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n overflow: hidden;\n}\n.progress .determinate {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n background-color: #26a69a;\n transition: width 0.3s linear;\n}\n.progress .indeterminate {\n background-color: #26a69a;\n}\n.progress .indeterminate:before {\n content: \"\";\n position: absolute;\n background-color: inherit;\n top: 0;\n left: 0;\n bottom: 0;\n will-change: left, right;\n animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;\n}\n.progress .indeterminate:after {\n content: \"\";\n position: absolute;\n background-color: inherit;\n top: 0;\n left: 0;\n bottom: 0;\n will-change: left, right;\n animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;\n animation-delay: 1.15s;\n}\n\n@keyframes indeterminate {\n 0% {\n left: -35%;\n right: 100%;\n }\n 60% {\n left: 100%;\n right: -90%;\n }\n 100% {\n left: 100%;\n right: -90%;\n }\n}\n@keyframes indeterminate-short {\n 0% {\n left: -200%;\n right: 100%;\n }\n 60% {\n left: 107%;\n right: -8%;\n }\n 100% {\n left: 107%;\n right: -8%;\n }\n}\n.flash-message {\n position: absolute;\n padding: 2px 10px;\n border-radius: 5px;\n z-index: 99999;\n right: 0;\n bottom: 0;\n font-size: 14px;\n}\n.flash-message.info {\n background-color: #beddbe;\n border: 1px solid #728f72;\n}\n.flash-message.warn {\n background-color: #f5e6d0;\n border: 1px solid #ea7d17;\n}\n.flash-message.error {\n background-color: #e5b2bc;\n border: 1px solid #e33257;\n}\n\n@keyframes messageIn {\n from {\n right: 80%;\n }\n to {\n right: 0;\n }\n}\n.pulse {\n overflow: visible;\n position: relative;\n}\n.pulse::before {\n content: \"\";\n display: block;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background-color: inherit;\n border-radius: inherit;\n transition: opacity 0.3s, transform 0.3s;\n animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;\n}\n\n@keyframes pulse-animation {\n 0% {\n opacity: 1;\n transform: scale(1);\n }\n 50% {\n opacity: 0;\n transform: scale(1.5);\n }\n 100% {\n opacity: 0;\n transform: scale(1.5);\n }\n}\n.dropdown-content {\n background-color: #fff;\n margin: 0;\n display: flow;\n min-width: 100px;\n overflow-y: auto;\n position: absolute;\n left: 0;\n top: 0;\n z-index: 9999;\n transform-origin: 0 0;\n}\n.dropdown-content:focus {\n outline: 0;\n}\n.dropdown-content li {\n clear: both;\n color: rgba(0, 0, 0, 0.87);\n cursor: pointer;\n min-height: 50px;\n line-height: 1.5rem;\n width: 100%;\n text-align: left;\n}\n.dropdown-content li:hover, .dropdown-content li.active {\n background-color: #eee;\n}\n.dropdown-content li:focus {\n outline: none;\n}\n.dropdown-content li.divider {\n min-height: 0;\n height: 1px;\n}\n.dropdown-content li > a, .dropdown-content li > span {\n font-size: 16px;\n color: #26a69a;\n display: block;\n line-height: 22px;\n padding: 14px 16px;\n}\n.dropdown-content li > span > label {\n top: 1px;\n left: 0;\n height: 18px;\n}\n.dropdown-content li > a > i {\n height: inherit;\n line-height: inherit;\n float: left;\n margin: 0 24px 0 0;\n width: 24px;\n}\n\nbody.keyboard-focused .dropdown-content li:focus {\n background-color: #dadada;\n}\n\n.input-field.col .dropdown-content [type=checkbox] + label {\n top: 1px;\n left: 0;\n height: 18px;\n transform: none;\n}\n\n.dropdown-trigger {\n cursor: pointer;\n}\n\nnav {\n color: #fff;\n background-color: #90caf9;\n width: 100%;\n height: 56px;\n line-height: 56px;\n}\nnav.nav-extended {\n height: auto;\n}\nnav.nav-extended .nav-wrapper {\n display: flex;\n align-items: center;\n min-height: 56px;\n height: auto;\n}\nnav.nav-extended .nav-content {\n position: relative;\n line-height: normal;\n}\nnav a {\n color: #fff;\n}\nnav i,\nnav [class^=mdi-], nav [class*=mdi-],\nnav i.s-icons {\n display: block;\n font-size: 24px;\n height: 56px;\n line-height: 56px;\n}\nnav .nav-wrapper {\n position: relative;\n height: 100%;\n}\n@media only screen and (min-width : 993px) {\n nav a.sidenav-trigger {\n display: none;\n }\n}\nnav .sidenav-trigger {\n float: left;\n position: relative;\n z-index: 1;\n height: 56px;\n margin: 0 18px;\n}\nnav .sidenav-trigger i {\n height: 56px;\n line-height: 56px;\n}\nnav .brand-logo {\n position: absolute;\n color: #fff;\n display: inline-block;\n font-size: 2.1rem;\n padding: 0;\n}\nnav .brand-logo img.circle {\n height: 32px;\n width: 32px;\n}\nnav .brand-logo.center {\n left: 50%;\n transform: translateX(-50%);\n}\n@media only screen and (max-width : 992px) {\n nav .brand-logo {\n left: 50%;\n transform: translateX(-50%);\n }\n nav .brand-logo.left, nav .brand-logo.right {\n padding: 0;\n transform: none;\n }\n nav .brand-logo.left {\n left: 0.5rem;\n }\n nav .brand-logo.right {\n right: 0.5rem;\n left: auto;\n }\n}\nnav .brand-logo.right {\n right: 0.5rem;\n padding: 0;\n}\nnav .brand-logo i,\nnav .brand-logo [class^=mdi-], nav .brand-logo [class*=mdi-],\nnav .brand-logo i.s-icons {\n float: left;\n margin-right: 15px;\n}\nnav .nav-title {\n display: inline-block;\n font-size: 32px;\n padding: 28px 0;\n}\nnav ul {\n margin: 0;\n}\nnav ul li {\n transition: background-color 0.3s;\n float: left;\n padding: 0;\n}\nnav ul li.active {\n background-color: rgba(0, 0, 0, 0.1);\n}\nnav ul a {\n transition: background-color 0.3s;\n font-size: 1rem;\n color: #fff;\n display: block;\n padding: 0 15px;\n cursor: pointer;\n}\nnav ul a.btn, nav ul a.btn-small, nav ul a.btn-large, nav ul a.btn-flat, nav ul a.btn-floating {\n margin-top: -2px;\n margin-left: 15px;\n margin-right: 15px;\n}\nnav ul a.btn > .material-icons, nav ul a.btn-small > .material-icons, nav ul a.btn-large > .material-icons, nav ul a.btn-flat > .material-icons, nav ul a.btn-floating > .material-icons {\n height: inherit;\n line-height: inherit;\n}\nnav ul a:hover {\n background-color: rgba(0, 0, 0, 0.1);\n}\nnav ul.left {\n float: left;\n}\nnav form {\n height: 100%;\n}\nnav .input-field {\n margin: 0;\n height: 100%;\n}\nnav .input-field input {\n height: 100%;\n font-size: 1.2rem;\n border: none;\n padding-left: 2rem;\n}\nnav .input-field input:focus, nav .input-field input[type=text]:valid, nav .input-field input[type=password]:valid, nav .input-field input[type=email]:valid, nav .input-field input[type=url]:valid, nav .input-field input[type=date]:valid {\n border: none;\n box-shadow: none;\n}\nnav .input-field label {\n top: 0;\n left: 0;\n}\nnav .input-field label i {\n color: rgba(255, 255, 255, 0.7);\n transition: color 0.3s;\n}\nnav .input-field label.active i {\n color: #fff;\n}\n\n.navbar-fixed {\n position: relative;\n height: 56px;\n z-index: 997;\n}\n.navbar-fixed nav {\n position: fixed;\n}\n\n@media only screen and (min-width : 601px) {\n nav.nav-extended .nav-wrapper {\n min-height: 64px;\n }\n nav, nav .nav-wrapper i, nav a.sidenav-trigger, nav a.sidenav-trigger i {\n height: 64px;\n line-height: 64px;\n }\n .navbar-fixed {\n height: 64px;\n }\n}", "",{"version":3,"sources":["webpack://./src/sass/d3v4pp.scss","webpack://./src/sass/icons/SweetcomIcons.scss","webpack://./src/sass/_colors.scss","webpack://./src/sass/_code-dark.scss","webpack://./src/sass/_terminal.scss","webpack://./src/sass/_tooltip.scss","webpack://./src/sass/_shadows.scss","webpack://./src/sass/_waves.scss","webpack://./src/sass/_modal.scss","webpack://./src/sass/_global.scss","webpack://./src/sass/_variables.scss","webpack://./src/sass/_badges.scss","webpack://./src/sass/_chips.scss","webpack://./src/sass/_collapsible.scss","webpack://./src/sass/_collection.scss","webpack://./src/sass/forms/_forms.scss","webpack://./src/sass/forms/_input-fields.scss","webpack://./src/sass/forms/_radio-buttons.scss","webpack://./src/sass/forms/_checkboxes.scss","webpack://./src/sass/forms/_switches.scss","webpack://./src/sass/forms/_select.scss","webpack://./src/sass/forms/_file-input.scss","webpack://./src/sass/forms/_range.scss","webpack://./src/sass/_paralax.scss","webpack://./src/sass/_cube.scss","webpack://./src/sass/_grid.scss","webpack://./src/sass/_sidenav.scss","webpack://./src/sass/_buttons.scss","webpack://./src/sass/_tabs.scss","webpack://./src/sass/_loader.scss","webpack://./src/sass/_cards.scss","webpack://./src/sass/_preloader.scss","webpack://./src/sass/_progress.scss","webpack://./src/sass/_flash-message.scss","webpack://./src/sass/_pulse.scss","webpack://./src/sass/_dropdown.scss","webpack://./src/sass/_navbar.scss"],"names":[],"mappings":"AAAA,gBAAgB;ACAhB;EACE,uBAAA;EACA,kBAAA;EACA,gBAAA;EACA,4CAAA;EACA,gLAAA;ADGF;ACKA;;;;EAIE,mCAAA;EACA,mBAAA;EACA,kBAAA;EACA,eAAA;EACA,cAAA;EACA,sBAAA;EACA,oBAAA;EACA,qBAAA;EACA,mBAAA;EACA,iBAAA;EACA,cAAA;EACA,mCAAA;EACA,kCAAA;EACA,kCAAA;EACA,qCAAA;EACA,oCAAA;EACA,kCAAA;EACA,6BAAA;EACA,kBAAA;ADHF;;AE3BM;EACE,oCAAA;AF8BR;;AE5BM;EACE,yBAAA;AF+BR;;AE7BM;EACE,oCAAA;AFgCR;;AE7BM;EACE,oCAAA;AFgCR;;AE9BM;EACE,yBAAA;AFiCR;;AE/BM;EACE,oCAAA;AFkCR;;AEzCM;EACE,oCAAA;AF4CR;;AE1CM;EACE,yBAAA;AF6CR;;AE3CM;EACE,oCAAA;AF8CR;;AErDM;EACE,oCAAA;AFwDR;;AEtDM;EACE,yBAAA;AFyDR;;AEvDM;EACE,oCAAA;AF0DR;;AEjEM;EACE,oCAAA;AFoER;;AElEM;EACE,yBAAA;AFqER;;AEnEM;EACE,oCAAA;AFsER;;AE7EM;EACE,oCAAA;AFgFR;;AE9EM;EACE,yBAAA;AFiFR;;AE/EM;EACE,oCAAA;AFkFR;;AEzFM;EACE,oCAAA;AF4FR;;AE1FM;EACE,yBAAA;AF6FR;;AE3FM;EACE,oCAAA;AF8FR;;AErGM;EACE,oCAAA;AFwGR;;AEtGM;EACE,yBAAA;AFyGR;;AEvGM;EACE,oCAAA;AF0GR;;AEjHM;EACE,oCAAA;AFoHR;;AElHM;EACE,yBAAA;AFqHR;;AEnHM;EACE,oCAAA;AFsHR;;AE7HM;EACE,oCAAA;AFgIR;;AE9HM;EACE,yBAAA;AFiIR;;AE/HM;EACE,oCAAA;AFkIR;;AEzIM;EACE,oCAAA;AF4IR;;AE1IM;EACE,yBAAA;AF6IR;;AE3IM;EACE,oCAAA;AF8IR;;AErJM;EACE,oCAAA;AFwJR;;AEtJM;EACE,yBAAA;AFyJR;;AEvJM;EACE,oCAAA;AF0JR;;AEjKM;EACE,oCAAA;AFoKR;;AElKM;EACE,yBAAA;AFqKR;;AEnKM;EACE,oCAAA;AFsKR;;AE7KM;EACE,oCAAA;AFgLR;;AE9KM;EACE,yBAAA;AFiLR;;AE/KM;EACE,oCAAA;AFkLR;;AEnMM;EACE,oCAAA;AFsMR;;AEpMM;EACE,yBAAA;AFuMR;;AErMM;EACE,oCAAA;AFwMR;;AErMM;EACE,oCAAA;AFwMR;;AEtMM;EACE,yBAAA;AFyMR;;AEvMM;EACE,oCAAA;AF0MR;;AEjNM;EACE,oCAAA;AFoNR;;AElNM;EACE,yBAAA;AFqNR;;AEnNM;EACE,oCAAA;AFsNR;;AE7NM;EACE,oCAAA;AFgOR;;AE9NM;EACE,yBAAA;AFiOR;;AE/NM;EACE,oCAAA;AFkOR;;AEzOM;EACE,oCAAA;AF4OR;;AE1OM;EACE,yBAAA;AF6OR;;AE3OM;EACE,oCAAA;AF8OR;;AErPM;EACE,oCAAA;AFwPR;;AEtPM;EACE,yBAAA;AFyPR;;AEvPM;EACE,oCAAA;AF0PR;;AEjQM;EACE,oCAAA;AFoQR;;AElQM;EACE,yBAAA;AFqQR;;AEnQM;EACE,oCAAA;AFsQR;;AE7QM;EACE,oCAAA;AFgRR;;AE9QM;EACE,yBAAA;AFiRR;;AE/QM;EACE,oCAAA;AFkRR;;AEzRM;EACE,oCAAA;AF4RR;;AE1RM;EACE,yBAAA;AF6RR;;AE3RM;EACE,oCAAA;AF8RR;;AErSM;EACE,oCAAA;AFwSR;;AEtSM;EACE,yBAAA;AFySR;;AEvSM;EACE,oCAAA;AF0SR;;AEjTM;EACE,oCAAA;AFoTR;;AElTM;EACE,yBAAA;AFqTR;;AEnTM;EACE,oCAAA;AFsTR;;AE7TM;EACE,oCAAA;AFgUR;;AE9TM;EACE,yBAAA;AFiUR;;AE/TM;EACE,oCAAA;AFkUR;;AEzUM;EACE,oCAAA;AF4UR;;AE1UM;EACE,yBAAA;AF6UR;;AE3UM;EACE,oCAAA;AF8UR;;AErVM;EACE,oCAAA;AFwVR;;AEtVM;EACE,yBAAA;AFyVR;;AEvVM;EACE,oCAAA;AF0VR;;AE3WM;EACE,oCAAA;AF8WR;;AE5WM;EACE,yBAAA;AF+WR;;AE7WM;EACE,oCAAA;AFgXR;;AE7WM;EACE,oCAAA;AFgXR;;AE9WM;EACE,yBAAA;AFiXR;;AE/WM;EACE,oCAAA;AFkXR;;AEzXM;EACE,oCAAA;AF4XR;;AE1XM;EACE,yBAAA;AF6XR;;AE3XM;EACE,oCAAA;AF8XR;;AErYM;EACE,oCAAA;AFwYR;;AEtYM;EACE,yBAAA;AFyYR;;AEvYM;EACE,oCAAA;AF0YR;;AEjZM;EACE,oCAAA;AFoZR;;AElZM;EACE,yBAAA;AFqZR;;AEnZM;EACE,oCAAA;AFsZR;;AE7ZM;EACE,oCAAA;AFgaR;;AE9ZM;EACE,yBAAA;AFiaR;;AE/ZM;EACE,oCAAA;AFkaR;;AEzaM;EACE,oCAAA;AF4aR;;AE1aM;EACE,yBAAA;AF6aR;;AE3aM;EACE,oCAAA;AF8aR;;AErbM;EACE,oCAAA;AFwbR;;AEtbM;EACE,yBAAA;AFybR;;AEvbM;EACE,oCAAA;AF0bR;;AEjcM;EACE,oCAAA;AFocR;;AElcM;EACE,yBAAA;AFqcR;;AEncM;EACE,oCAAA;AFscR;;AE7cM;EACE,oCAAA;AFgdR;;AE9cM;EACE,yBAAA;AFidR;;AE/cM;EACE,oCAAA;AFkdR;;AEzdM;EACE,oCAAA;AF4dR;;AE1dM;EACE,yBAAA;AF6dR;;AE3dM;EACE,oCAAA;AF8dR;;AEreM;EACE,oCAAA;AFweR;;AEteM;EACE,yBAAA;AFyeR;;AEveM;EACE,oCAAA;AF0eR;;AEjfM;EACE,oCAAA;AFofR;;AElfM;EACE,yBAAA;AFqfR;;AEnfM;EACE,oCAAA;AFsfR;;AE7fM;EACE,oCAAA;AFggBR;;AE9fM;EACE,yBAAA;AFigBR;;AE/fM;EACE,oCAAA;AFkgBR;;AEnhBM;EACE,oCAAA;AFshBR;;AEphBM;EACE,yBAAA;AFuhBR;;AErhBM;EACE,oCAAA;AFwhBR;;AErhBM;EACE,oCAAA;AFwhBR;;AEthBM;EACE,yBAAA;AFyhBR;;AEvhBM;EACE,oCAAA;AF0hBR;;AEjiBM;EACE,oCAAA;AFoiBR;;AEliBM;EACE,yBAAA;AFqiBR;;AEniBM;EACE,oCAAA;AFsiBR;;AE7iBM;EACE,oCAAA;AFgjBR;;AE9iBM;EACE,yBAAA;AFijBR;;AE/iBM;EACE,oCAAA;AFkjBR;;AEzjBM;EACE,oCAAA;AF4jBR;;AE1jBM;EACE,yBAAA;AF6jBR;;AE3jBM;EACE,oCAAA;AF8jBR;;AErkBM;EACE,oCAAA;AFwkBR;;AEtkBM;EACE,yBAAA;AFykBR;;AEvkBM;EACE,oCAAA;AF0kBR;;AEjlBM;EACE,oCAAA;AFolBR;;AEllBM;EACE,yBAAA;AFqlBR;;AEnlBM;EACE,oCAAA;AFslBR;;AE7lBM;EACE,oCAAA;AFgmBR;;AE9lBM;EACE,yBAAA;AFimBR;;AE/lBM;EACE,oCAAA;AFkmBR;;AEzmBM;EACE,oCAAA;AF4mBR;;AE1mBM;EACE,yBAAA;AF6mBR;;AE3mBM;EACE,oCAAA;AF8mBR;;AErnBM;EACE,oCAAA;AFwnBR;;AEtnBM;EACE,yBAAA;AFynBR;;AEvnBM;EACE,oCAAA;AF0nBR;;AEjoBM;EACE,oCAAA;AFooBR;;AEloBM;EACE,yBAAA;AFqoBR;;AEnoBM;EACE,oCAAA;AFsoBR;;AE7oBM;EACE,oCAAA;AFgpBR;;AE9oBM;EACE,yBAAA;AFipBR;;AE/oBM;EACE,oCAAA;AFkpBR;;AEzpBM;EACE,oCAAA;AF4pBR;;AE1pBM;EACE,yBAAA;AF6pBR;;AE3pBM;EACE,oCAAA;AF8pBR;;AErqBM;EACE,oCAAA;AFwqBR;;AEtqBM;EACE,yBAAA;AFyqBR;;AEvqBM;EACE,oCAAA;AF0qBR;;AE3rBM;EACE,oCAAA;AF8rBR;;AE5rBM;EACE,yBAAA;AF+rBR;;AE7rBM;EACE,oCAAA;AFgsBR;;AE7rBM;EACE,oCAAA;AFgsBR;;AE9rBM;EACE,yBAAA;AFisBR;;AE/rBM;EACE,oCAAA;AFksBR;;AEzsBM;EACE,oCAAA;AF4sBR;;AE1sBM;EACE,yBAAA;AF6sBR;;AE3sBM;EACE,oCAAA;AF8sBR;;AErtBM;EACE,oCAAA;AFwtBR;;AEttBM;EACE,yBAAA;AFytBR;;AEvtBM;EACE,oCAAA;AF0tBR;;AEjuBM;EACE,oCAAA;AFouBR;;AEluBM;EACE,yBAAA;AFquBR;;AEnuBM;EACE,oCAAA;AFsuBR;;AE7uBM;EACE,oCAAA;AFgvBR;;AE9uBM;EACE,yBAAA;AFivBR;;AE/uBM;EACE,oCAAA;AFkvBR;;AEzvBM;EACE,oCAAA;AF4vBR;;AE1vBM;EACE,yBAAA;AF6vBR;;AE3vBM;EACE,oCAAA;AF8vBR;;AErwBM;EACE,oCAAA;AFwwBR;;AEtwBM;EACE,yBAAA;AFywBR;;AEvwBM;EACE,oCAAA;AF0wBR;;AEjxBM;EACE,oCAAA;AFoxBR;;AElxBM;EACE,yBAAA;AFqxBR;;AEnxBM;EACE,oCAAA;AFsxBR;;AE7xBM;EACE,oCAAA;AFgyBR;;AE9xBM;EACE,yBAAA;AFiyBR;;AE/xBM;EACE,oCAAA;AFkyBR;;AEzyBM;EACE,oCAAA;AF4yBR;;AE1yBM;EACE,yBAAA;AF6yBR;;AE3yBM;EACE,oCAAA;AF8yBR;;AErzBM;EACE,oCAAA;AFwzBR;;AEtzBM;EACE,yBAAA;AFyzBR;;AEvzBM;EACE,oCAAA;AF0zBR;;AEj0BM;EACE,oCAAA;AFo0BR;;AEl0BM;EACE,yBAAA;AFq0BR;;AEn0BM;EACE,oCAAA;AFs0BR;;AE70BM;EACE,oCAAA;AFg1BR;;AE90BM;EACE,yBAAA;AFi1BR;;AE/0BM;EACE,oCAAA;AFk1BR;;AEn2BM;EACE,oCAAA;AFs2BR;;AEp2BM;EACE,yBAAA;AFu2BR;;AEr2BM;EACE,oCAAA;AFw2BR;;AEr2BM;EACE,oCAAA;AFw2BR;;AEt2BM;EACE,yBAAA;AFy2BR;;AEv2BM;EACE,oCAAA;AF02BR;;AEj3BM;EACE,oCAAA;AFo3BR;;AEl3BM;EACE,yBAAA;AFq3BR;;AEn3BM;EACE,oCAAA;AFs3BR;;AE73BM;EACE,oCAAA;AFg4BR;;AE93BM;EACE,yBAAA;AFi4BR;;AE/3BM;EACE,oCAAA;AFk4BR;;AEz4BM;EACE,oCAAA;AF44BR;;AE14BM;EACE,yBAAA;AF64BR;;AE34BM;EACE,oCAAA;AF84BR;;AEr5BM;EACE,oCAAA;AFw5BR;;AEt5BM;EACE,yBAAA;AFy5BR;;AEv5BM;EACE,oCAAA;AF05BR;;AEj6BM;EACE,oCAAA;AFo6BR;;AEl6BM;EACE,yBAAA;AFq6BR;;AEn6BM;EACE,oCAAA;AFs6BR;;AE76BM;EACE,oCAAA;AFg7BR;;AE96BM;EACE,yBAAA;AFi7BR;;AE/6BM;EACE,oCAAA;AFk7BR;;AEz7BM;EACE,oCAAA;AF47BR;;AE17BM;EACE,yBAAA;AF67BR;;AE37BM;EACE,oCAAA;AF87BR;;AEr8BM;EACE,oCAAA;AFw8BR;;AEt8BM;EACE,yBAAA;AFy8BR;;AEv8BM;EACE,oCAAA;AF08BR;;AEj9BM;EACE,oCAAA;AFo9BR;;AEl9BM;EACE,yBAAA;AFq9BR;;AEn9BM;EACE,oCAAA;AFs9BR;;AE79BM;EACE,oCAAA;AFg+BR;;AE99BM;EACE,yBAAA;AFi+BR;;AE/9BM;EACE,oCAAA;AFk+BR;;AEz+BM;EACE,oCAAA;AF4+BR;;AE1+BM;EACE,yBAAA;AF6+BR;;AE3+BM;EACE,oCAAA;AF8+BR;;AEr/BM;EACE,oCAAA;AFw/BR;;AEt/BM;EACE,yBAAA;AFy/BR;;AEv/BM;EACE,oCAAA;AF0/BR;;AE3gCM;EACE,oCAAA;AF8gCR;;AE5gCM;EACE,yBAAA;AF+gCR;;AE7gCM;EACE,oCAAA;AFghCR;;AE7gCM;EACE,oCAAA;AFghCR;;AE9gCM;EACE,yBAAA;AFihCR;;AE/gCM;EACE,oCAAA;AFkhCR;;AEzhCM;EACE,oCAAA;AF4hCR;;AE1hCM;EACE,yBAAA;AF6hCR;;AE3hCM;EACE,oCAAA;AF8hCR;;AEriCM;EACE,oCAAA;AFwiCR;;AEtiCM;EACE,yBAAA;AFyiCR;;AEviCM;EACE,oCAAA;AF0iCR;;AEjjCM;EACE,oCAAA;AFojCR;;AEljCM;EACE,yBAAA;AFqjCR;;AEnjCM;EACE,oCAAA;AFsjCR;;AE7jCM;EACE,oCAAA;AFgkCR;;AE9jCM;EACE,yBAAA;AFikCR;;AE/jCM;EACE,oCAAA;AFkkCR;;AEzkCM;EACE,oCAAA;AF4kCR;;AE1kCM;EACE,yBAAA;AF6kCR;;AE3kCM;EACE,oCAAA;AF8kCR;;AErlCM;EACE,oCAAA;AFwlCR;;AEtlCM;EACE,yBAAA;AFylCR;;AEvlCM;EACE,oCAAA;AF0lCR;;AEjmCM;EACE,oCAAA;AFomCR;;AElmCM;EACE,yBAAA;AFqmCR;;AEnmCM;EACE,oCAAA;AFsmCR;;AE7mCM;EACE,oCAAA;AFgnCR;;AE9mCM;EACE,yBAAA;AFinCR;;AE/mCM;EACE,oCAAA;AFknCR;;AEznCM;EACE,oCAAA;AF4nCR;;AE1nCM;EACE,yBAAA;AF6nCR;;AE3nCM;EACE,oCAAA;AF8nCR;;AEroCM;EACE,oCAAA;AFwoCR;;AEtoCM;EACE,yBAAA;AFyoCR;;AEvoCM;EACE,oCAAA;AF0oCR;;AEjpCM;EACE,oCAAA;AFopCR;;AElpCM;EACE,yBAAA;AFqpCR;;AEnpCM;EACE,oCAAA;AFspCR;;AE7pCM;EACE,oCAAA;AFgqCR;;AE9pCM;EACE,yBAAA;AFiqCR;;AE/pCM;EACE,oCAAA;AFkqCR;;AEnrCM;EACE,oCAAA;AFsrCR;;AEprCM;EACE,yBAAA;AFurCR;;AErrCM;EACE,oCAAA;AFwrCR;;AErrCM;EACE,oCAAA;AFwrCR;;AEtrCM;EACE,yBAAA;AFyrCR;;AEvrCM;EACE,oCAAA;AF0rCR;;AEjsCM;EACE,oCAAA;AFosCR;;AElsCM;EACE,yBAAA;AFqsCR;;AEnsCM;EACE,oCAAA;AFssCR;;AE7sCM;EACE,oCAAA;AFgtCR;;AE9sCM;EACE,yBAAA;AFitCR;;AE/sCM;EACE,oCAAA;AFktCR;;AEztCM;EACE,oCAAA;AF4tCR;;AE1tCM;EACE,yBAAA;AF6tCR;;AE3tCM;EACE,oCAAA;AF8tCR;;AEruCM;EACE,oCAAA;AFwuCR;;AEtuCM;EACE,yBAAA;AFyuCR;;AEvuCM;EACE,oCAAA;AF0uCR;;AEjvCM;EACE,oCAAA;AFovCR;;AElvCM;EACE,yBAAA;AFqvCR;;AEnvCM;EACE,oCAAA;AFsvCR;;AE7vCM;EACE,oCAAA;AFgwCR;;AE9vCM;EACE,yBAAA;AFiwCR;;AE/vCM;EACE,oCAAA;AFkwCR;;AEzwCM;EACE,oCAAA;AF4wCR;;AE1wCM;EACE,yBAAA;AF6wCR;;AE3wCM;EACE,oCAAA;AF8wCR;;AErxCM;EACE,oCAAA;AFwxCR;;AEtxCM;EACE,yBAAA;AFyxCR;;AEvxCM;EACE,oCAAA;AF0xCR;;AEjyCM;EACE,oCAAA;AFoyCR;;AElyCM;EACE,yBAAA;AFqyCR;;AEnyCM;EACE,oCAAA;AFsyCR;;AE7yCM;EACE,oCAAA;AFgzCR;;AE9yCM;EACE,yBAAA;AFizCR;;AE/yCM;EACE,oCAAA;AFkzCR;;AEzzCM;EACE,oCAAA;AF4zCR;;AE1zCM;EACE,yBAAA;AF6zCR;;AE3zCM;EACE,oCAAA;AF8zCR;;AEr0CM;EACE,oCAAA;AFw0CR;;AEt0CM;EACE,yBAAA;AFy0CR;;AEv0CM;EACE,oCAAA;AF00CR;;AE31CM;EACE,oCAAA;AF81CR;;AE51CM;EACE,yBAAA;AF+1CR;;AE71CM;EACE,oCAAA;AFg2CR;;AE71CM;EACE,oCAAA;AFg2CR;;AE91CM;EACE,yBAAA;AFi2CR;;AE/1CM;EACE,oCAAA;AFk2CR;;AEz2CM;EACE,oCAAA;AF42CR;;AE12CM;EACE,yBAAA;AF62CR;;AE32CM;EACE,oCAAA;AF82CR;;AEr3CM;EACE,oCAAA;AFw3CR;;AEt3CM;EACE,yBAAA;AFy3CR;;AEv3CM;EACE,oCAAA;AF03CR;;AEj4CM;EACE,oCAAA;AFo4CR;;AEl4CM;EACE,yBAAA;AFq4CR;;AEn4CM;EACE,oCAAA;AFs4CR;;AE74CM;EACE,oCAAA;AFg5CR;;AE94CM;EACE,yBAAA;AFi5CR;;AE/4CM;EACE,oCAAA;AFk5CR;;AEz5CM;EACE,oCAAA;AF45CR;;AE15CM;EACE,yBAAA;AF65CR;;AE35CM;EACE,oCAAA;AF85CR;;AEr6CM;EACE,oCAAA;AFw6CR;;AEt6CM;EACE,yBAAA;AFy6CR;;AEv6CM;EACE,oCAAA;AF06CR;;AEj7CM;EACE,oCAAA;AFo7CR;;AEl7CM;EACE,yBAAA;AFq7CR;;AEn7CM;EACE,oCAAA;AFs7CR;;AE77CM;EACE,oCAAA;AFg8CR;;AE97CM;EACE,yBAAA;AFi8CR;;AE/7CM;EACE,oCAAA;AFk8CR;;AEz8CM;EACE,oCAAA;AF48CR;;AE18CM;EACE,yBAAA;AF68CR;;AE38CM;EACE,oCAAA;AF88CR;;AEr9CM;EACE,oCAAA;AFw9CR;;AEt9CM;EACE,yBAAA;AFy9CR;;AEv9CM;EACE,oCAAA;AF09CR;;AEj+CM;EACE,oCAAA;AFo+CR;;AEl+CM;EACE,yBAAA;AFq+CR;;AEn+CM;EACE,oCAAA;AFs+CR;;AE7+CM;EACE,oCAAA;AFg/CR;;AE9+CM;EACE,yBAAA;AFi/CR;;AE/+CM;EACE,oCAAA;AFk/CR;;AEngDM;EACE,oCAAA;AFsgDR;;AEpgDM;EACE,yBAAA;AFugDR;;AErgDM;EACE,oCAAA;AFwgDR;;AErgDM;EACE,oCAAA;AFwgDR;;AEtgDM;EACE,yBAAA;AFygDR;;AEvgDM;EACE,oCAAA;AF0gDR;;AEjhDM;EACE,oCAAA;AFohDR;;AElhDM;EACE,yBAAA;AFqhDR;;AEnhDM;EACE,oCAAA;AFshDR;;AE7hDM;EACE,oCAAA;AFgiDR;;AE9hDM;EACE,yBAAA;AFiiDR;;AE/hDM;EACE,oCAAA;AFkiDR;;AEziDM;EACE,oCAAA;AF4iDR;;AE1iDM;EACE,yBAAA;AF6iDR;;AE3iDM;EACE,oCAAA;AF8iDR;;AErjDM;EACE,oCAAA;AFwjDR;;AEtjDM;EACE,yBAAA;AFyjDR;;AEvjDM;EACE,oCAAA;AF0jDR;;AEjkDM;EACE,oCAAA;AFokDR;;AElkDM;EACE,yBAAA;AFqkDR;;AEnkDM;EACE,oCAAA;AFskDR;;AE7kDM;EACE,oCAAA;AFglDR;;AE9kDM;EACE,yBAAA;AFilDR;;AE/kDM;EACE,oCAAA;AFklDR;;AEzlDM;EACE,oCAAA;AF4lDR;;AE1lDM;EACE,yBAAA;AF6lDR;;AE3lDM;EACE,oCAAA;AF8lDR;;AErmDM;EACE,oCAAA;AFwmDR;;AEtmDM;EACE,yBAAA;AFymDR;;AEvmDM;EACE,oCAAA;AF0mDR;;AEjnDM;EACE,oCAAA;AFonDR;;AElnDM;EACE,yBAAA;AFqnDR;;AEnnDM;EACE,oCAAA;AFsnDR;;AE7nDM;EACE,oCAAA;AFgoDR;;AE9nDM;EACE,yBAAA;AFioDR;;AE/nDM;EACE,oCAAA;AFkoDR;;AEzoDM;EACE,oCAAA;AF4oDR;;AE1oDM;EACE,yBAAA;AF6oDR;;AE3oDM;EACE,oCAAA;AF8oDR;;AErpDM;EACE,oCAAA;AFwpDR;;AEtpDM;EACE,yBAAA;AFypDR;;AEvpDM;EACE,oCAAA;AF0pDR;;AE3qDM;EACE,oCAAA;AF8qDR;;AE5qDM;EACE,yBAAA;AF+qDR;;AE7qDM;EACE,oCAAA;AFgrDR;;AE7qDM;EACE,oCAAA;AFgrDR;;AE9qDM;EACE,yBAAA;AFirDR;;AE/qDM;EACE,oCAAA;AFkrDR;;AEzrDM;EACE,oCAAA;AF4rDR;;AE1rDM;EACE,yBAAA;AF6rDR;;AE3rDM;EACE,oCAAA;AF8rDR;;AErsDM;EACE,oCAAA;AFwsDR;;AEtsDM;EACE,yBAAA;AFysDR;;AEvsDM;EACE,oCAAA;AF0sDR;;AEjtDM;EACE,oCAAA;AFotDR;;AEltDM;EACE,yBAAA;AFqtDR;;AEntDM;EACE,oCAAA;AFstDR;;AE7tDM;EACE,oCAAA;AFguDR;;AE9tDM;EACE,yBAAA;AFiuDR;;AE/tDM;EACE,oCAAA;AFkuDR;;AEzuDM;EACE,oCAAA;AF4uDR;;AE1uDM;EACE,yBAAA;AF6uDR;;AE3uDM;EACE,oCAAA;AF8uDR;;AErvDM;EACE,oCAAA;AFwvDR;;AEtvDM;EACE,yBAAA;AFyvDR;;AEvvDM;EACE,oCAAA;AF0vDR;;AEjwDM;EACE,oCAAA;AFowDR;;AElwDM;EACE,yBAAA;AFqwDR;;AEnwDM;EACE,oCAAA;AFswDR;;AE7wDM;EACE,oCAAA;AFgxDR;;AE9wDM;EACE,yBAAA;AFixDR;;AE/wDM;EACE,oCAAA;AFkxDR;;AEzxDM;EACE,oCAAA;AF4xDR;;AE1xDM;EACE,yBAAA;AF6xDR;;AE3xDM;EACE,oCAAA;AF8xDR;;AEryDM;EACE,oCAAA;AFwyDR;;AEtyDM;EACE,yBAAA;AFyyDR;;AEvyDM;EACE,oCAAA;AF0yDR;;AEjzDM;EACE,oCAAA;AFozDR;;AElzDM;EACE,yBAAA;AFqzDR;;AEnzDM;EACE,oCAAA;AFszDR;;AE7zDM;EACE,oCAAA;AFg0DR;;AE9zDM;EACE,yBAAA;AFi0DR;;AE/zDM;EACE,oCAAA;AFk0DR;;AEn1DM;EACE,oCAAA;AFs1DR;;AEp1DM;EACE,yBAAA;AFu1DR;;AEr1DM;EACE,oCAAA;AFw1DR;;AEr1DM;EACE,oCAAA;AFw1DR;;AEt1DM;EACE,yBAAA;AFy1DR;;AEv1DM;EACE,oCAAA;AF01DR;;AEj2DM;EACE,oCAAA;AFo2DR;;AEl2DM;EACE,yBAAA;AFq2DR;;AEn2DM;EACE,oCAAA;AFs2DR;;AE72DM;EACE,oCAAA;AFg3DR;;AE92DM;EACE,yBAAA;AFi3DR;;AE/2DM;EACE,oCAAA;AFk3DR;;AEz3DM;EACE,oCAAA;AF43DR;;AE13DM;EACE,yBAAA;AF63DR;;AE33DM;EACE,oCAAA;AF83DR;;AEr4DM;EACE,oCAAA;AFw4DR;;AEt4DM;EACE,yBAAA;AFy4DR;;AEv4DM;EACE,oCAAA;AF04DR;;AEj5DM;EACE,oCAAA;AFo5DR;;AEl5DM;EACE,yBAAA;AFq5DR;;AEn5DM;EACE,oCAAA;AFs5DR;;AE75DM;EACE,oCAAA;AFg6DR;;AE95DM;EACE,yBAAA;AFi6DR;;AE/5DM;EACE,oCAAA;AFk6DR;;AEz6DM;EACE,oCAAA;AF46DR;;AE16DM;EACE,yBAAA;AF66DR;;AE36DM;EACE,oCAAA;AF86DR;;AEr7DM;EACE,oCAAA;AFw7DR;;AEt7DM;EACE,yBAAA;AFy7DR;;AEv7DM;EACE,oCAAA;AF07DR;;AEj8DM;EACE,oCAAA;AFo8DR;;AEl8DM;EACE,yBAAA;AFq8DR;;AEn8DM;EACE,oCAAA;AFs8DR;;AE78DM;EACE,oCAAA;AFg9DR;;AE98DM;EACE,yBAAA;AFi9DR;;AE/8DM;EACE,oCAAA;AFk9DR;;AEz9DM;EACE,oCAAA;AF49DR;;AE19DM;EACE,yBAAA;AF69DR;;AE39DM;EACE,oCAAA;AF89DR;;AEr+DM;EACE,oCAAA;AFw+DR;;AEt+DM;EACE,yBAAA;AFy+DR;;AEv+DM;EACE,oCAAA;AF0+DR;;AE3/DM;EACE,oCAAA;AF8/DR;;AE5/DM;EACE,yBAAA;AF+/DR;;AE7/DM;EACE,oCAAA;AFggER;;AE7/DM;EACE,oCAAA;AFggER;;AE9/DM;EACE,yBAAA;AFigER;;AE//DM;EACE,oCAAA;AFkgER;;AEzgEM;EACE,oCAAA;AF4gER;;AE1gEM;EACE,yBAAA;AF6gER;;AE3gEM;EACE,oCAAA;AF8gER;;AErhEM;EACE,oCAAA;AFwhER;;AEthEM;EACE,yBAAA;AFyhER;;AEvhEM;EACE,oCAAA;AF0hER;;AEjiEM;EACE,oCAAA;AFoiER;;AEliEM;EACE,yBAAA;AFqiER;;AEniEM;EACE,oCAAA;AFsiER;;AE7iEM;EACE,oCAAA;AFgjER;;AE9iEM;EACE,yBAAA;AFijER;;AE/iEM;EACE,oCAAA;AFkjER;;AEzjEM;EACE,oCAAA;AF4jER;;AE1jEM;EACE,yBAAA;AF6jER;;AE3jEM;EACE,oCAAA;AF8jER;;AErkEM;EACE,oCAAA;AFwkER;;AEtkEM;EACE,yBAAA;AFykER;;AEvkEM;EACE,oCAAA;AF0kER;;AEjlEM;EACE,oCAAA;AFolER;;AEllEM;EACE,yBAAA;AFqlER;;AEnlEM;EACE,oCAAA;AFslER;;AE7lEM;EACE,oCAAA;AFgmER;;AE9lEM;EACE,yBAAA;AFimER;;AE/lEM;EACE,oCAAA;AFkmER;;AEzmEM;EACE,oCAAA;AF4mER;;AE1mEM;EACE,yBAAA;AF6mER;;AE3mEM;EACE,oCAAA;AF8mER;;AErnEM;EACE,oCAAA;AFwnER;;AEtnEM;EACE,yBAAA;AFynER;;AEvnEM;EACE,oCAAA;AF0nER;;AEjoEM;EACE,oCAAA;AFooER;;AEloEM;EACE,yBAAA;AFqoER;;AEnoEM;EACE,oCAAA;AFsoER;;AE7oEM;EACE,oCAAA;AFgpER;;AE9oEM;EACE,yBAAA;AFipER;;AE/oEM;EACE,oCAAA;AFkpER;;AEnqEM;EACE,oCAAA;AFsqER;;AEpqEM;EACE,yBAAA;AFuqER;;AErqEM;EACE,oCAAA;AFwqER;;AErqEM;EACE,oCAAA;AFwqER;;AEtqEM;EACE,yBAAA;AFyqER;;AEvqEM;EACE,oCAAA;AF0qER;;AEjrEM;EACE,oCAAA;AForER;;AElrEM;EACE,yBAAA;AFqrER;;AEnrEM;EACE,oCAAA;AFsrER;;AE7rEM;EACE,oCAAA;AFgsER;;AE9rEM;EACE,yBAAA;AFisER;;AE/rEM;EACE,oCAAA;AFksER;;AEzsEM;EACE,oCAAA;AF4sER;;AE1sEM;EACE,yBAAA;AF6sER;;AE3sEM;EACE,oCAAA;AF8sER;;AErtEM;EACE,oCAAA;AFwtER;;AEttEM;EACE,yBAAA;AFytER;;AEvtEM;EACE,oCAAA;AF0tER;;AEjuEM;EACE,oCAAA;AFouER;;AEluEM;EACE,yBAAA;AFquER;;AEnuEM;EACE,oCAAA;AFsuER;;AE7uEM;EACE,oCAAA;AFgvER;;AE9uEM;EACE,yBAAA;AFivER;;AE/uEM;EACE,oCAAA;AFkvER;;AEzvEM;EACE,oCAAA;AF4vER;;AE1vEM;EACE,yBAAA;AF6vER;;AE3vEM;EACE,oCAAA;AF8vER;;AErwEM;EACE,oCAAA;AFwwER;;AEtwEM;EACE,yBAAA;AFywER;;AEvwEM;EACE,oCAAA;AF0wER;;AEjxEM;EACE,oCAAA;AFoxER;;AElxEM;EACE,yBAAA;AFqxER;;AEnxEM;EACE,oCAAA;AFsxER;;AE7xEM;EACE,oCAAA;AFgyER;;AE9xEM;EACE,yBAAA;AFiyER;;AE/xEM;EACE,oCAAA;AFkyER;;AEzyEM;EACE,oCAAA;AF4yER;;AE1yEM;EACE,yBAAA;AF6yER;;AE3yEM;EACE,oCAAA;AF8yER;;AErzEM;EACE,oCAAA;AFwzER;;AEtzEM;EACE,yBAAA;AFyzER;;AEvzEM;EACE,oCAAA;AF0zER;;AE30EM;EACE,oCAAA;AF80ER;;AE50EM;EACE,yBAAA;AF+0ER;;AE70EM;EACE,oCAAA;AFg1ER;;AE70EM;EACE,oCAAA;AFg1ER;;AE90EM;EACE,yBAAA;AFi1ER;;AE/0EM;EACE,oCAAA;AFk1ER;;AEz1EM;EACE,oCAAA;AF41ER;;AE11EM;EACE,yBAAA;AF61ER;;AE31EM;EACE,oCAAA;AF81ER;;AEr2EM;EACE,oCAAA;AFw2ER;;AEt2EM;EACE,yBAAA;AFy2ER;;AEv2EM;EACE,oCAAA;AF02ER;;AEj3EM;EACE,oCAAA;AFo3ER;;AEl3EM;EACE,yBAAA;AFq3ER;;AEn3EM;EACE,oCAAA;AFs3ER;;AE73EM;EACE,oCAAA;AFg4ER;;AE93EM;EACE,yBAAA;AFi4ER;;AE/3EM;EACE,oCAAA;AFk4ER;;AEz4EM;EACE,oCAAA;AF44ER;;AE14EM;EACE,yBAAA;AF64ER;;AE34EM;EACE,oCAAA;AF84ER;;AEr5EM;EACE,oCAAA;AFw5ER;;AEt5EM;EACE,yBAAA;AFy5ER;;AEv5EM;EACE,oCAAA;AF05ER;;AEj6EM;EACE,oCAAA;AFo6ER;;AEl6EM;EACE,yBAAA;AFq6ER;;AEn6EM;EACE,oCAAA;AFs6ER;;AE76EM;EACE,oCAAA;AFg7ER;;AE96EM;EACE,yBAAA;AFi7ER;;AE/6EM;EACE,oCAAA;AFk7ER;;AEz7EM;EACE,oCAAA;AF47ER;;AE17EM;EACE,yBAAA;AF67ER;;AE37EM;EACE,oCAAA;AF87ER;;AEr8EM;EACE,oCAAA;AFw8ER;;AEt8EM;EACE,yBAAA;AFy8ER;;AEv8EM;EACE,oCAAA;AF08ER;;AEj9EM;EACE,oCAAA;AFo9ER;;AEl9EM;EACE,yBAAA;AFq9ER;;AEn9EM;EACE,oCAAA;AFs9ER;;AE79EM;EACE,oCAAA;AFg+ER;;AE99EM;EACE,yBAAA;AFi+ER;;AE/9EM;EACE,oCAAA;AFk+ER;;AEn/EM;EACE,oCAAA;AFs/ER;;AEp/EM;EACE,yBAAA;AFu/ER;;AEr/EM;EACE,oCAAA;AFw/ER;;AEr/EM;EACE,oCAAA;AFw/ER;;AEt/EM;EACE,yBAAA;AFy/ER;;AEv/EM;EACE,oCAAA;AF0/ER;;AEjgFM;EACE,oCAAA;AFogFR;;AElgFM;EACE,yBAAA;AFqgFR;;AEngFM;EACE,oCAAA;AFsgFR;;AE7gFM;EACE,oCAAA;AFghFR;;AE9gFM;EACE,yBAAA;AFihFR;;AE/gFM;EACE,oCAAA;AFkhFR;;AEzhFM;EACE,oCAAA;AF4hFR;;AE1hFM;EACE,yBAAA;AF6hFR;;AE3hFM;EACE,oCAAA;AF8hFR;;AEriFM;EACE,oCAAA;AFwiFR;;AEtiFM;EACE,yBAAA;AFyiFR;;AEviFM;EACE,oCAAA;AF0iFR;;AEjjFM;EACE,oCAAA;AFojFR;;AEljFM;EACE,yBAAA;AFqjFR;;AEnjFM;EACE,oCAAA;AFsjFR;;AE7jFM;EACE,oCAAA;AFgkFR;;AE9jFM;EACE,yBAAA;AFikFR;;AE/jFM;EACE,oCAAA;AFkkFR;;AEzkFM;EACE,oCAAA;AF4kFR;;AE1kFM;EACE,yBAAA;AF6kFR;;AE3kFM;EACE,oCAAA;AF8kFR;;AErlFM;EACE,oCAAA;AFwlFR;;AEtlFM;EACE,yBAAA;AFylFR;;AEvlFM;EACE,oCAAA;AF0lFR;;AEjmFM;EACE,oCAAA;AFomFR;;AElmFM;EACE,yBAAA;AFqmFR;;AEnmFM;EACE,oCAAA;AFsmFR;;AE7mFM;EACE,oCAAA;AFgnFR;;AE9mFM;EACE,yBAAA;AFinFR;;AE/mFM;EACE,oCAAA;AFknFR;;AEznFM;EACE,oCAAA;AF4nFR;;AE1nFM;EACE,yBAAA;AF6nFR;;AE3nFM;EACE,oCAAA;AF8nFR;;AEroFM;EACE,oCAAA;AFwoFR;;AEtoFM;EACE,yBAAA;AFyoFR;;AEvoFM;EACE,oCAAA;AF0oFR;;AE3pFM;EACE,oCAAA;AF8pFR;;AE5pFM;EACE,yBAAA;AF+pFR;;AE7pFM;EACE,oCAAA;AFgqFR;;AE7pFM;EACE,oCAAA;AFgqFR;;AE9pFM;EACE,yBAAA;AFiqFR;;AE/pFM;EACE,oCAAA;AFkqFR;;AEzqFM;EACE,oCAAA;AF4qFR;;AE1qFM;EACE,yBAAA;AF6qFR;;AE3qFM;EACE,oCAAA;AF8qFR;;AErrFM;EACE,oCAAA;AFwrFR;;AEtrFM;EACE,yBAAA;AFyrFR;;AEvrFM;EACE,oCAAA;AF0rFR;;AEjsFM;EACE,oCAAA;AFosFR;;AElsFM;EACE,yBAAA;AFqsFR;;AEnsFM;EACE,oCAAA;AFssFR;;AE7sFM;EACE,oCAAA;AFgtFR;;AE9sFM;EACE,yBAAA;AFitFR;;AE/sFM;EACE,oCAAA;AFktFR;;AEztFM;EACE,oCAAA;AF4tFR;;AE1tFM;EACE,yBAAA;AF6tFR;;AE3tFM;EACE,oCAAA;AF8tFR;;AEruFM;EACE,oCAAA;AFwuFR;;AEtuFM;EACE,yBAAA;AFyuFR;;AEvuFM;EACE,oCAAA;AF0uFR;;AEjvFM;EACE,oCAAA;AFovFR;;AElvFM;EACE,yBAAA;AFqvFR;;AEnvFM;EACE,oCAAA;AFsvFR;;AE7vFM;EACE,oCAAA;AFgwFR;;AE9vFM;EACE,yBAAA;AFiwFR;;AE/vFM;EACE,oCAAA;AFkwFR;;AEzwFM;EACE,oCAAA;AF4wFR;;AE1wFM;EACE,yBAAA;AF6wFR;;AE3wFM;EACE,oCAAA;AF8wFR;;AErxFM;EACE,oCAAA;AFwxFR;;AEtxFM;EACE,yBAAA;AFyxFR;;AEvxFM;EACE,oCAAA;AF0xFR;;AEjyFM;EACE,oCAAA;AFoyFR;;AElyFM;EACE,yBAAA;AFqyFR;;AEnyFM;EACE,oCAAA;AFsyFR;;AE7yFM;EACE,oCAAA;AFgzFR;;AE9yFM;EACE,yBAAA;AFizFR;;AE/yFM;EACE,oCAAA;AFkzFR;;AEn0FM;EACE,oCAAA;AFs0FR;;AEp0FM;EACE,yBAAA;AFu0FR;;AEr0FM;EACE,oCAAA;AFw0FR;;AEr0FM;EACE,oCAAA;AFw0FR;;AEt0FM;EACE,yBAAA;AFy0FR;;AEv0FM;EACE,oCAAA;AF00FR;;AEj1FM;EACE,oCAAA;AFo1FR;;AEl1FM;EACE,yBAAA;AFq1FR;;AEn1FM;EACE,oCAAA;AFs1FR;;AE71FM;EACE,oCAAA;AFg2FR;;AE91FM;EACE,yBAAA;AFi2FR;;AE/1FM;EACE,oCAAA;AFk2FR;;AEz2FM;EACE,oCAAA;AF42FR;;AE12FM;EACE,yBAAA;AF62FR;;AE32FM;EACE,oCAAA;AF82FR;;AEr3FM;EACE,oCAAA;AFw3FR;;AEt3FM;EACE,yBAAA;AFy3FR;;AEv3FM;EACE,oCAAA;AF03FR;;AEj4FM;EACE,oCAAA;AFo4FR;;AEl4FM;EACE,yBAAA;AFq4FR;;AEn4FM;EACE,oCAAA;AFs4FR;;AE74FM;EACE,oCAAA;AFg5FR;;AE94FM;EACE,yBAAA;AFi5FR;;AE/4FM;EACE,oCAAA;AFk5FR;;AEz5FM;EACE,oCAAA;AF45FR;;AE15FM;EACE,yBAAA;AF65FR;;AE35FM;EACE,oCAAA;AF85FR;;AEr6FM;EACE,oCAAA;AFw6FR;;AEt6FM;EACE,yBAAA;AFy6FR;;AEv6FM;EACE,oCAAA;AF06FR;;AE37FM;EACE,oCAAA;AF87FR;;AE57FM;EACE,yBAAA;AF+7FR;;AE77FM;EACE,oCAAA;AFg8FR;;AE77FM;EACE,oCAAA;AFg8FR;;AE97FM;EACE,yBAAA;AFi8FR;;AE/7FM;EACE,oCAAA;AFk8FR;;AEz8FM;EACE,oCAAA;AF48FR;;AE18FM;EACE,yBAAA;AF68FR;;AE38FM;EACE,oCAAA;AF88FR;;AEr9FM;EACE,oCAAA;AFw9FR;;AEt9FM;EACE,yBAAA;AFy9FR;;AEv9FM;EACE,oCAAA;AF09FR;;AEj+FM;EACE,oCAAA;AFo+FR;;AEl+FM;EACE,yBAAA;AFq+FR;;AEn+FM;EACE,oCAAA;AFs+FR;;AE7+FM;EACE,oCAAA;AFg/FR;;AE9+FM;EACE,yBAAA;AFi/FR;;AE/+FM;EACE,oCAAA;AFk/FR;;AEz/FM;EACE,oCAAA;AF4/FR;;AE1/FM;EACE,yBAAA;AF6/FR;;AE3/FM;EACE,oCAAA;AF8/FR;;AErgGM;EACE,oCAAA;AFwgGR;;AEtgGM;EACE,yBAAA;AFygGR;;AEvgGM;EACE,oCAAA;AF0gGR;;AEjhGM;EACE,oCAAA;AFohGR;;AElhGM;EACE,yBAAA;AFqhGR;;AEnhGM;EACE,oCAAA;AFshGR;;AE7hGM;EACE,oCAAA;AFgiGR;;AE9hGM;EACE,yBAAA;AFiiGR;;AE/hGM;EACE,oCAAA;AFkiGR;;AEnjGM;EACE,oCAAA;AFsjGR;;AEpjGM;EACE,yBAAA;AFujGR;;AErjGM;EACE,oCAAA;AFwjGR;;AErjGM;EACE,oCAAA;AFwjGR;;AEtjGM;EACE,yBAAA;AFyjGR;;AEvjGM;EACE,oCAAA;AF0jGR;;AEjkGM;EACE,oCAAA;AFokGR;;AElkGM;EACE,yBAAA;AFqkGR;;AEnkGM;EACE,oCAAA;A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","sourcesContent":["@charset \"UTF-8\";\n@import 'https://fonts.googleapis.com/css?family=Ubuntu';\n@font-face {\n font-family: sweeticons;\n font-style: normal;\n font-weight: 400;\n src: url(\"./icons/assets/SweetIcons-Regular.eot\");\n src: url(\"./icons/assets/SweetIcons-Regular.woff2\") format(\"woff2\"), url(\"./icons/assets/SweetIcons-Regular.woff\") format(\"woff\"), url(\"./icons/assets/SweetIcons-Regular.ttf\") format(\"truetype\");\n}\n.s-icon,\n.s-icons,\n.sweet-icons,\n.sweet-icon {\n font-family: sweeticons, sans-serif;\n font-weight: normal;\n font-style: normal;\n font-size: 28px;\n line-height: 1;\n letter-spacing: normal;\n text-transform: none;\n display: inline-block;\n white-space: nowrap;\n word-wrap: normal;\n direction: ltr;\n -webkit-font-smoothing: antialiased;\n text-rendering: optimizeLegibility;\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-feature-settings: \"liga\";\n -moz-font-feature-settings: \"liga=1\";\n -moz-font-feature-settings: \"liga\";\n font-feature-settings: \"liga\";\n text-align: center;\n}\n\n.webo {\n background-color: #0062d6 !important;\n}\n\n.webo-text {\n color: #0062d6 !important;\n}\n\n.webo-waves .waves-ripple {\n background-color: #0062d6 !important;\n}\n\n.webo.second {\n background-color: #0077FA !important;\n}\n\n.webo-text.text-second {\n color: #0077FA !important;\n}\n\n.webo-waves.waves-second .waves-ripple {\n background-color: #0077FA !important;\n}\n\n.webo.third {\n background-color: #09bddd !important;\n}\n\n.webo-text.text-third {\n color: #09bddd !important;\n}\n\n.webo-waves.waves-third .waves-ripple {\n background-color: #09bddd !important;\n}\n\n.webo.fourth {\n background-color: #cbe7fe !important;\n}\n\n.webo-text.text-fourth {\n color: #cbe7fe !important;\n}\n\n.webo-waves.waves-fourth .waves-ripple {\n background-color: #cbe7fe !important;\n}\n\n.webo.lighten-5 {\n background-color: #bbdefb !important;\n}\n\n.webo-text.text-lighten-5 {\n color: #bbdefb !important;\n}\n\n.webo-waves.waves-lighten-5 .waves-ripple {\n background-color: #bbdefb !important;\n}\n\n.webo.lighten-4 {\n background-color: #42a5f5 !important;\n}\n\n.webo-text.text-lighten-4 {\n color: #42a5f5 !important;\n}\n\n.webo-waves.waves-lighten-4 .waves-ripple {\n background-color: #42a5f5 !important;\n}\n\n.webo.lighten-3 {\n background-color: #7986cb !important;\n}\n\n.webo-text.text-lighten-3 {\n color: #7986cb !important;\n}\n\n.webo-waves.waves-lighten-3 .waves-ripple {\n background-color: #7986cb !important;\n}\n\n.webo.lighten-2 {\n background-color: #512da8 !important;\n}\n\n.webo-text.text-lighten-2 {\n color: #512da8 !important;\n}\n\n.webo-waves.waves-lighten-2 .waves-ripple {\n background-color: #512da8 !important;\n}\n\n.webo.lighten-1 {\n background-color: #283593 !important;\n}\n\n.webo-text.text-lighten-1 {\n color: #283593 !important;\n}\n\n.webo-waves.waves-lighten-1 .waves-ripple {\n background-color: #283593 !important;\n}\n\n.webo.darken-1 {\n background-color: #d0181e !important;\n}\n\n.webo-text.text-darken-1 {\n color: #d0181e !important;\n}\n\n.webo-waves.waves-darken-1 .waves-ripple {\n background-color: #d0181e !important;\n}\n\n.webo.darken-2 {\n background-color: #b9151b !important;\n}\n\n.webo-text.text-darken-2 {\n color: #b9151b !important;\n}\n\n.webo-waves.waves-darken-2 .waves-ripple {\n background-color: #b9151b !important;\n}\n\n.webo.darken-3 {\n background-color: #a21318 !important;\n}\n\n.webo-text.text-darken-3 {\n color: #a21318 !important;\n}\n\n.webo-waves.waves-darken-3 .waves-ripple {\n background-color: #a21318 !important;\n}\n\n.webo.b- {\n background-color: #49ce5f !important;\n}\n\n.webo-text.text-b- {\n color: #49ce5f !important;\n}\n\n.webo-waves.waves-b- .waves-ripple {\n background-color: #49ce5f !important;\n}\n\n.webo.darken-4 {\n background-color: #8b1014 !important;\n}\n\n.webo-text.text-darken-4 {\n color: #8b1014 !important;\n}\n\n.webo-waves.waves-darken-4 .waves-ripple {\n background-color: #8b1014 !important;\n}\n\n.red {\n background-color: #f44336 !important;\n}\n\n.red-text {\n color: #f44336 !important;\n}\n\n.red-waves .waves-ripple {\n background-color: #f44336 !important;\n}\n\n.red.lighten-5 {\n background-color: #ffebee !important;\n}\n\n.red-text.text-lighten-5 {\n color: #ffebee !important;\n}\n\n.red-waves.waves-lighten-5 .waves-ripple {\n background-color: #ffebee !important;\n}\n\n.red.lighten-4 {\n background-color: #ffcdd2 !important;\n}\n\n.red-text.text-lighten-4 {\n color: #ffcdd2 !important;\n}\n\n.red-waves.waves-lighten-4 .waves-ripple {\n background-color: #ffcdd2 !important;\n}\n\n.red.lighten-3 {\n background-color: #ef9a9a !important;\n}\n\n.red-text.text-lighten-3 {\n color: #ef9a9a !important;\n}\n\n.red-waves.waves-lighten-3 .waves-ripple {\n background-color: #ef9a9a !important;\n}\n\n.red.lighten-2 {\n background-color: #e57373 !important;\n}\n\n.red-text.text-lighten-2 {\n color: #e57373 !important;\n}\n\n.red-waves.waves-lighten-2 .waves-ripple {\n background-color: #e57373 !important;\n}\n\n.red.lighten-1 {\n background-color: #ef5350 !important;\n}\n\n.red-text.text-lighten-1 {\n color: #ef5350 !important;\n}\n\n.red-waves.waves-lighten-1 .waves-ripple {\n background-color: #ef5350 !important;\n}\n\n.red.darken-1 {\n background-color: #e53935 !important;\n}\n\n.red-text.text-darken-1 {\n color: #e53935 !important;\n}\n\n.red-waves.waves-darken-1 .waves-ripple {\n background-color: #e53935 !important;\n}\n\n.red.darken-2 {\n background-color: #d32f2f !important;\n}\n\n.red-text.text-darken-2 {\n color: #d32f2f !important;\n}\n\n.red-waves.waves-darken-2 .waves-ripple {\n background-color: #d32f2f !important;\n}\n\n.red.darken-3 {\n background-color: #c62828 !important;\n}\n\n.red-text.text-darken-3 {\n color: #c62828 !important;\n}\n\n.red-waves.waves-darken-3 .waves-ripple {\n background-color: #c62828 !important;\n}\n\n.red.darken-4 {\n background-color: #b71c1c !important;\n}\n\n.red-text.text-darken-4 {\n color: #b71c1c !important;\n}\n\n.red-waves.waves-darken-4 .waves-ripple {\n background-color: #b71c1c !important;\n}\n\n.red.accent-1 {\n background-color: #ff8a80 !important;\n}\n\n.red-text.text-accent-1 {\n color: #ff8a80 !important;\n}\n\n.red-waves.waves-accent-1 .waves-ripple {\n background-color: #ff8a80 !important;\n}\n\n.red.accent-2 {\n background-color: #ff5252 !important;\n}\n\n.red-text.text-accent-2 {\n color: #ff5252 !important;\n}\n\n.red-waves.waves-accent-2 .waves-ripple {\n background-color: #ff5252 !important;\n}\n\n.red.accent-3 {\n background-color: #ff1744 !important;\n}\n\n.red-text.text-accent-3 {\n color: #ff1744 !important;\n}\n\n.red-waves.waves-accent-3 .waves-ripple {\n background-color: #ff1744 !important;\n}\n\n.red.accent-4 {\n background-color: #d50000 !important;\n}\n\n.red-text.text-accent-4 {\n color: #d50000 !important;\n}\n\n.red-waves.waves-accent-4 .waves-ripple {\n background-color: #d50000 !important;\n}\n\n.pink {\n background-color: #e91e63 !important;\n}\n\n.pink-text {\n color: #e91e63 !important;\n}\n\n.pink-waves .waves-ripple {\n background-color: #e91e63 !important;\n}\n\n.pink.lighten-5 {\n background-color: #fce4ec !important;\n}\n\n.pink-text.text-lighten-5 {\n color: #fce4ec !important;\n}\n\n.pink-waves.waves-lighten-5 .waves-ripple {\n background-color: #fce4ec !important;\n}\n\n.pink.lighten-4 {\n background-color: #f8bbd0 !important;\n}\n\n.pink-text.text-lighten-4 {\n color: #f8bbd0 !important;\n}\n\n.pink-waves.waves-lighten-4 .waves-ripple {\n background-color: #f8bbd0 !important;\n}\n\n.pink.lighten-3 {\n background-color: #f48fb1 !important;\n}\n\n.pink-text.text-lighten-3 {\n color: #f48fb1 !important;\n}\n\n.pink-waves.waves-lighten-3 .waves-ripple {\n background-color: #f48fb1 !important;\n}\n\n.pink.lighten-2 {\n background-color: #f06292 !important;\n}\n\n.pink-text.text-lighten-2 {\n color: #f06292 !important;\n}\n\n.pink-waves.waves-lighten-2 .waves-ripple {\n background-color: #f06292 !important;\n}\n\n.pink.lighten-1 {\n background-color: #ec407a !important;\n}\n\n.pink-text.text-lighten-1 {\n color: #ec407a !important;\n}\n\n.pink-waves.waves-lighten-1 .waves-ripple {\n background-color: #ec407a !important;\n}\n\n.pink.darken-1 {\n background-color: #d81b60 !important;\n}\n\n.pink-text.text-darken-1 {\n color: #d81b60 !important;\n}\n\n.pink-waves.waves-darken-1 .waves-ripple {\n background-color: #d81b60 !important;\n}\n\n.pink.darken-2 {\n background-color: #c2185b !important;\n}\n\n.pink-text.text-darken-2 {\n color: #c2185b !important;\n}\n\n.pink-waves.waves-darken-2 .waves-ripple {\n background-color: #c2185b !important;\n}\n\n.pink.darken-3 {\n background-color: #ad1457 !important;\n}\n\n.pink-text.text-darken-3 {\n color: #ad1457 !important;\n}\n\n.pink-waves.waves-darken-3 .waves-ripple {\n background-color: #ad1457 !important;\n}\n\n.pink.darken-4 {\n background-color: #880e4f !important;\n}\n\n.pink-text.text-darken-4 {\n color: #880e4f !important;\n}\n\n.pink-waves.waves-darken-4 .waves-ripple {\n background-color: #880e4f !important;\n}\n\n.pink.accent-1 {\n background-color: #ff80ab !important;\n}\n\n.pink-text.text-accent-1 {\n color: #ff80ab !important;\n}\n\n.pink-waves.waves-accent-1 .waves-ripple {\n background-color: #ff80ab !important;\n}\n\n.pink.accent-2 {\n background-color: #ff4081 !important;\n}\n\n.pink-text.text-accent-2 {\n color: #ff4081 !important;\n}\n\n.pink-waves.waves-accent-2 .waves-ripple {\n background-color: #ff4081 !important;\n}\n\n.pink.accent-3 {\n background-color: #f50057 !important;\n}\n\n.pink-text.text-accent-3 {\n color: #f50057 !important;\n}\n\n.pink-waves.waves-accent-3 .waves-ripple {\n background-color: #f50057 !important;\n}\n\n.pink.accent-4 {\n background-color: #c51162 !important;\n}\n\n.pink-text.text-accent-4 {\n color: #c51162 !important;\n}\n\n.pink-waves.waves-accent-4 .waves-ripple {\n background-color: #c51162 !important;\n}\n\n.purple {\n background-color: #9c27b0 !important;\n}\n\n.purple-text {\n color: #9c27b0 !important;\n}\n\n.purple-waves .waves-ripple {\n background-color: #9c27b0 !important;\n}\n\n.purple.lighten-5 {\n background-color: #f3e5f5 !important;\n}\n\n.purple-text.text-lighten-5 {\n color: #f3e5f5 !important;\n}\n\n.purple-waves.waves-lighten-5 .waves-ripple {\n background-color: #f3e5f5 !important;\n}\n\n.purple.lighten-4 {\n background-color: #e1bee7 !important;\n}\n\n.purple-text.text-lighten-4 {\n color: #e1bee7 !important;\n}\n\n.purple-waves.waves-lighten-4 .waves-ripple {\n background-color: #e1bee7 !important;\n}\n\n.purple.lighten-3 {\n background-color: #ce93d8 !important;\n}\n\n.purple-text.text-lighten-3 {\n color: #ce93d8 !important;\n}\n\n.purple-waves.waves-lighten-3 .waves-ripple {\n background-color: #ce93d8 !important;\n}\n\n.purple.lighten-2 {\n background-color: #ba68c8 !important;\n}\n\n.purple-text.text-lighten-2 {\n color: #ba68c8 !important;\n}\n\n.purple-waves.waves-lighten-2 .waves-ripple {\n background-color: #ba68c8 !important;\n}\n\n.purple.lighten-1 {\n background-color: #ab47bc !important;\n}\n\n.purple-text.text-lighten-1 {\n color: #ab47bc !important;\n}\n\n.purple-waves.waves-lighten-1 .waves-ripple {\n background-color: #ab47bc !important;\n}\n\n.purple.darken-1 {\n background-color: #8e24aa !important;\n}\n\n.purple-text.text-darken-1 {\n color: #8e24aa !important;\n}\n\n.purple-waves.waves-darken-1 .waves-ripple {\n background-color: #8e24aa !important;\n}\n\n.purple.darken-2 {\n background-color: #7b1fa2 !important;\n}\n\n.purple-text.text-darken-2 {\n color: #7b1fa2 !important;\n}\n\n.purple-waves.waves-darken-2 .waves-ripple {\n background-color: #7b1fa2 !important;\n}\n\n.purple.darken-3 {\n background-color: #6a1b9a !important;\n}\n\n.purple-text.text-darken-3 {\n color: #6a1b9a !important;\n}\n\n.purple-waves.waves-darken-3 .waves-ripple {\n background-color: #6a1b9a !important;\n}\n\n.purple.darken-4 {\n background-color: #4a148c !important;\n}\n\n.purple-text.text-darken-4 {\n color: #4a148c !important;\n}\n\n.purple-waves.waves-darken-4 .waves-ripple {\n background-color: #4a148c !important;\n}\n\n.purple.accent-1 {\n background-color: #ea80fc !important;\n}\n\n.purple-text.text-accent-1 {\n color: #ea80fc !important;\n}\n\n.purple-waves.waves-accent-1 .waves-ripple {\n background-color: #ea80fc !important;\n}\n\n.purple.accent-2 {\n background-color: #e040fb !important;\n}\n\n.purple-text.text-accent-2 {\n color: #e040fb !important;\n}\n\n.purple-waves.waves-accent-2 .waves-ripple {\n background-color: #e040fb !important;\n}\n\n.purple.accent-3 {\n background-color: #d500f9 !important;\n}\n\n.purple-text.text-accent-3 {\n color: #d500f9 !important;\n}\n\n.purple-waves.waves-accent-3 .waves-ripple {\n background-color: #d500f9 !important;\n}\n\n.purple.accent-4 {\n background-color: #aa00ff !important;\n}\n\n.purple-text.text-accent-4 {\n color: #aa00ff !important;\n}\n\n.purple-waves.waves-accent-4 .waves-ripple {\n background-color: #aa00ff !important;\n}\n\n.deep-purple {\n background-color: #673ab7 !important;\n}\n\n.deep-purple-text {\n color: #673ab7 !important;\n}\n\n.deep-purple-waves .waves-ripple {\n background-color: #673ab7 !important;\n}\n\n.deep-purple.lighten-5 {\n background-color: #ede7f6 !important;\n}\n\n.deep-purple-text.text-lighten-5 {\n color: #ede7f6 !important;\n}\n\n.deep-purple-waves.waves-lighten-5 .waves-ripple {\n background-color: #ede7f6 !important;\n}\n\n.deep-purple.lighten-4 {\n background-color: #d1c4e9 !important;\n}\n\n.deep-purple-text.text-lighten-4 {\n color: #d1c4e9 !important;\n}\n\n.deep-purple-waves.waves-lighten-4 .waves-ripple {\n background-color: #d1c4e9 !important;\n}\n\n.deep-purple.lighten-3 {\n background-color: #b39ddb !important;\n}\n\n.deep-purple-text.text-lighten-3 {\n color: #b39ddb !important;\n}\n\n.deep-purple-waves.waves-lighten-3 .waves-ripple {\n background-color: #b39ddb !important;\n}\n\n.deep-purple.lighten-2 {\n background-color: #9575cd !important;\n}\n\n.deep-purple-text.text-lighten-2 {\n color: #9575cd !important;\n}\n\n.deep-purple-waves.waves-lighten-2 .waves-ripple {\n background-color: #9575cd !important;\n}\n\n.deep-purple.lighten-1 {\n background-color: #7e57c2 !important;\n}\n\n.deep-purple-text.text-lighten-1 {\n color: #7e57c2 !important;\n}\n\n.deep-purple-waves.waves-lighten-1 .waves-ripple {\n background-color: #7e57c2 !important;\n}\n\n.deep-purple.darken-1 {\n background-color: #5e35b1 !important;\n}\n\n.deep-purple-text.text-darken-1 {\n color: #5e35b1 !important;\n}\n\n.deep-purple-waves.waves-darken-1 .waves-ripple {\n background-color: #5e35b1 !important;\n}\n\n.deep-purple.darken-2 {\n background-color: #512da8 !important;\n}\n\n.deep-purple-text.text-darken-2 {\n color: #512da8 !important;\n}\n\n.deep-purple-waves.waves-darken-2 .waves-ripple {\n background-color: #512da8 !important;\n}\n\n.deep-purple.darken-3 {\n background-color: #4527a0 !important;\n}\n\n.deep-purple-text.text-darken-3 {\n color: #4527a0 !important;\n}\n\n.deep-purple-waves.waves-darken-3 .waves-ripple {\n background-color: #4527a0 !important;\n}\n\n.deep-purple.darken-4 {\n background-color: #311b92 !important;\n}\n\n.deep-purple-text.text-darken-4 {\n color: #311b92 !important;\n}\n\n.deep-purple-waves.waves-darken-4 .waves-ripple {\n background-color: #311b92 !important;\n}\n\n.deep-purple.accent-1 {\n background-color: #b388ff !important;\n}\n\n.deep-purple-text.text-accent-1 {\n color: #b388ff !important;\n}\n\n.deep-purple-waves.waves-accent-1 .waves-ripple {\n background-color: #b388ff !important;\n}\n\n.deep-purple.accent-2 {\n background-color: #7c4dff !important;\n}\n\n.deep-purple-text.text-accent-2 {\n color: #7c4dff !important;\n}\n\n.deep-purple-waves.waves-accent-2 .waves-ripple {\n background-color: #7c4dff !important;\n}\n\n.deep-purple.accent-3 {\n background-color: #651fff !important;\n}\n\n.deep-purple-text.text-accent-3 {\n color: #651fff !important;\n}\n\n.deep-purple-waves.waves-accent-3 .waves-ripple {\n background-color: #651fff !important;\n}\n\n.deep-purple.accent-4 {\n background-color: #6200ea !important;\n}\n\n.deep-purple-text.text-accent-4 {\n color: #6200ea !important;\n}\n\n.deep-purple-waves.waves-accent-4 .waves-ripple {\n background-color: #6200ea !important;\n}\n\n.indigo {\n background-color: #3f51b5 !important;\n}\n\n.indigo-text {\n color: #3f51b5 !important;\n}\n\n.indigo-waves .waves-ripple {\n background-color: #3f51b5 !important;\n}\n\n.indigo.lighten-5 {\n background-color: #e8eaf6 !important;\n}\n\n.indigo-text.text-lighten-5 {\n color: #e8eaf6 !important;\n}\n\n.indigo-waves.waves-lighten-5 .waves-ripple {\n background-color: #e8eaf6 !important;\n}\n\n.indigo.lighten-4 {\n background-color: #c5cae9 !important;\n}\n\n.indigo-text.text-lighten-4 {\n color: #c5cae9 !important;\n}\n\n.indigo-waves.waves-lighten-4 .waves-ripple {\n background-color: #c5cae9 !important;\n}\n\n.indigo.lighten-3 {\n background-color: #9fa8da !important;\n}\n\n.indigo-text.text-lighten-3 {\n color: #9fa8da !important;\n}\n\n.indigo-waves.waves-lighten-3 .waves-ripple {\n background-color: #9fa8da !important;\n}\n\n.indigo.lighten-2 {\n background-color: #7986cb !important;\n}\n\n.indigo-text.text-lighten-2 {\n color: #7986cb !important;\n}\n\n.indigo-waves.waves-lighten-2 .waves-ripple {\n background-color: #7986cb !important;\n}\n\n.indigo.lighten-1 {\n background-color: #5c6bc0 !important;\n}\n\n.indigo-text.text-lighten-1 {\n color: #5c6bc0 !important;\n}\n\n.indigo-waves.waves-lighten-1 .waves-ripple {\n background-color: #5c6bc0 !important;\n}\n\n.indigo.darken-1 {\n background-color: #3949ab !important;\n}\n\n.indigo-text.text-darken-1 {\n color: #3949ab !important;\n}\n\n.indigo-waves.waves-darken-1 .waves-ripple {\n background-color: #3949ab !important;\n}\n\n.indigo.darken-2 {\n background-color: #303f9f !important;\n}\n\n.indigo-text.text-darken-2 {\n color: #303f9f !important;\n}\n\n.indigo-waves.waves-darken-2 .waves-ripple {\n background-color: #303f9f !important;\n}\n\n.indigo.darken-3 {\n background-color: #283593 !important;\n}\n\n.indigo-text.text-darken-3 {\n color: #283593 !important;\n}\n\n.indigo-waves.waves-darken-3 .waves-ripple {\n background-color: #283593 !important;\n}\n\n.indigo.darken-4 {\n background-color: #1a237e !important;\n}\n\n.indigo-text.text-darken-4 {\n color: #1a237e !important;\n}\n\n.indigo-waves.waves-darken-4 .waves-ripple {\n background-color: #1a237e !important;\n}\n\n.indigo.accent-1 {\n background-color: #8c9eff !important;\n}\n\n.indigo-text.text-accent-1 {\n color: #8c9eff !important;\n}\n\n.indigo-waves.waves-accent-1 .waves-ripple {\n background-color: #8c9eff !important;\n}\n\n.indigo.accent-2 {\n background-color: #536dfe !important;\n}\n\n.indigo-text.text-accent-2 {\n color: #536dfe !important;\n}\n\n.indigo-waves.waves-accent-2 .waves-ripple {\n background-color: #536dfe !important;\n}\n\n.indigo.accent-3 {\n background-color: #3d5afe !important;\n}\n\n.indigo-text.text-accent-3 {\n color: #3d5afe !important;\n}\n\n.indigo-waves.waves-accent-3 .waves-ripple {\n background-color: #3d5afe !important;\n}\n\n.indigo.accent-4 {\n background-color: #304ffe !important;\n}\n\n.indigo-text.text-accent-4 {\n color: #304ffe !important;\n}\n\n.indigo-waves.waves-accent-4 .waves-ripple {\n background-color: #304ffe !important;\n}\n\n.blue {\n background-color: #2196f3 !important;\n}\n\n.blue-text {\n color: #2196f3 !important;\n}\n\n.blue-waves .waves-ripple {\n background-color: #2196f3 !important;\n}\n\n.blue.lighten-5 {\n background-color: #e3f2fd !important;\n}\n\n.blue-text.text-lighten-5 {\n color: #e3f2fd !important;\n}\n\n.blue-waves.waves-lighten-5 .waves-ripple {\n background-color: #e3f2fd !important;\n}\n\n.blue.lighten-4 {\n background-color: #bbdefb !important;\n}\n\n.blue-text.text-lighten-4 {\n color: #bbdefb !important;\n}\n\n.blue-waves.waves-lighten-4 .waves-ripple {\n background-color: #bbdefb !important;\n}\n\n.blue.lighten-3 {\n background-color: #90caf9 !important;\n}\n\n.blue-text.text-lighten-3 {\n color: #90caf9 !important;\n}\n\n.blue-waves.waves-lighten-3 .waves-ripple {\n background-color: #90caf9 !important;\n}\n\n.blue.lighten-2 {\n background-color: #64b5f6 !important;\n}\n\n.blue-text.text-lighten-2 {\n color: #64b5f6 !important;\n}\n\n.blue-waves.waves-lighten-2 .waves-ripple {\n background-color: #64b5f6 !important;\n}\n\n.blue.lighten-1 {\n background-color: #42a5f5 !important;\n}\n\n.blue-text.text-lighten-1 {\n color: #42a5f5 !important;\n}\n\n.blue-waves.waves-lighten-1 .waves-ripple {\n background-color: #42a5f5 !important;\n}\n\n.blue.darken-1 {\n background-color: #1e88e5 !important;\n}\n\n.blue-text.text-darken-1 {\n color: #1e88e5 !important;\n}\n\n.blue-waves.waves-darken-1 .waves-ripple {\n background-color: #1e88e5 !important;\n}\n\n.blue.darken-2 {\n background-color: #1976d2 !important;\n}\n\n.blue-text.text-darken-2 {\n color: #1976d2 !important;\n}\n\n.blue-waves.waves-darken-2 .waves-ripple {\n background-color: #1976d2 !important;\n}\n\n.blue.darken-3 {\n background-color: #1565c0 !important;\n}\n\n.blue-text.text-darken-3 {\n color: #1565c0 !important;\n}\n\n.blue-waves.waves-darken-3 .waves-ripple {\n background-color: #1565c0 !important;\n}\n\n.blue.darken-4 {\n background-color: #0d47a1 !important;\n}\n\n.blue-text.text-darken-4 {\n color: #0d47a1 !important;\n}\n\n.blue-waves.waves-darken-4 .waves-ripple {\n background-color: #0d47a1 !important;\n}\n\n.blue.accent-1 {\n background-color: #82b1ff !important;\n}\n\n.blue-text.text-accent-1 {\n color: #82b1ff !important;\n}\n\n.blue-waves.waves-accent-1 .waves-ripple {\n background-color: #82b1ff !important;\n}\n\n.blue.accent-2 {\n background-color: #448aff !important;\n}\n\n.blue-text.text-accent-2 {\n color: #448aff !important;\n}\n\n.blue-waves.waves-accent-2 .waves-ripple {\n background-color: #448aff !important;\n}\n\n.blue.accent-3 {\n background-color: #2979ff !important;\n}\n\n.blue-text.text-accent-3 {\n color: #2979ff !important;\n}\n\n.blue-waves.waves-accent-3 .waves-ripple {\n background-color: #2979ff !important;\n}\n\n.blue.accent-4 {\n background-color: #2962ff !important;\n}\n\n.blue-text.text-accent-4 {\n color: #2962ff !important;\n}\n\n.blue-waves.waves-accent-4 .waves-ripple {\n background-color: #2962ff !important;\n}\n\n.light-blue {\n background-color: #03a9f4 !important;\n}\n\n.light-blue-text {\n color: #03a9f4 !important;\n}\n\n.light-blue-waves .waves-ripple {\n background-color: #03a9f4 !important;\n}\n\n.light-blue.lighten-5 {\n background-color: #e1f5fe !important;\n}\n\n.light-blue-text.text-lighten-5 {\n color: #e1f5fe !important;\n}\n\n.light-blue-waves.waves-lighten-5 .waves-ripple {\n background-color: #e1f5fe !important;\n}\n\n.light-blue.lighten-4 {\n background-color: #b3e5fc !important;\n}\n\n.light-blue-text.text-lighten-4 {\n color: #b3e5fc !important;\n}\n\n.light-blue-waves.waves-lighten-4 .waves-ripple {\n background-color: #b3e5fc !important;\n}\n\n.light-blue.lighten-3 {\n background-color: #81d4fa !important;\n}\n\n.light-blue-text.text-lighten-3 {\n color: #81d4fa !important;\n}\n\n.light-blue-waves.waves-lighten-3 .waves-ripple {\n background-color: #81d4fa !important;\n}\n\n.light-blue.lighten-2 {\n background-color: #4fc3f7 !important;\n}\n\n.light-blue-text.text-lighten-2 {\n color: #4fc3f7 !important;\n}\n\n.light-blue-waves.waves-lighten-2 .waves-ripple {\n background-color: #4fc3f7 !important;\n}\n\n.light-blue.lighten-1 {\n background-color: #29b6f6 !important;\n}\n\n.light-blue-text.text-lighten-1 {\n color: #29b6f6 !important;\n}\n\n.light-blue-waves.waves-lighten-1 .waves-ripple {\n background-color: #29b6f6 !important;\n}\n\n.light-blue.darken-1 {\n background-color: #039be5 !important;\n}\n\n.light-blue-text.text-darken-1 {\n color: #039be5 !important;\n}\n\n.light-blue-waves.waves-darken-1 .waves-ripple {\n background-color: #039be5 !important;\n}\n\n.light-blue.darken-2 {\n background-color: #0288d1 !important;\n}\n\n.light-blue-text.text-darken-2 {\n color: #0288d1 !important;\n}\n\n.light-blue-waves.waves-darken-2 .waves-ripple {\n background-color: #0288d1 !important;\n}\n\n.light-blue.darken-3 {\n background-color: #0277bd !important;\n}\n\n.light-blue-text.text-darken-3 {\n color: #0277bd !important;\n}\n\n.light-blue-waves.waves-darken-3 .waves-ripple {\n background-color: #0277bd !important;\n}\n\n.light-blue.darken-4 {\n background-color: #01579b !important;\n}\n\n.light-blue-text.text-darken-4 {\n color: #01579b !important;\n}\n\n.light-blue-waves.waves-darken-4 .waves-ripple {\n background-color: #01579b !important;\n}\n\n.light-blue.accent-1 {\n background-color: #80d8ff !important;\n}\n\n.light-blue-text.text-accent-1 {\n color: #80d8ff !important;\n}\n\n.light-blue-waves.waves-accent-1 .waves-ripple {\n background-color: #80d8ff !important;\n}\n\n.light-blue.accent-2 {\n background-color: #40c4ff !important;\n}\n\n.light-blue-text.text-accent-2 {\n color: #40c4ff !important;\n}\n\n.light-blue-waves.waves-accent-2 .waves-ripple {\n background-color: #40c4ff !important;\n}\n\n.light-blue.accent-3 {\n background-color: #00b0ff !important;\n}\n\n.light-blue-text.text-accent-3 {\n color: #00b0ff !important;\n}\n\n.light-blue-waves.waves-accent-3 .waves-ripple {\n background-color: #00b0ff !important;\n}\n\n.light-blue.accent-4 {\n background-color: #0091ea !important;\n}\n\n.light-blue-text.text-accent-4 {\n color: #0091ea !important;\n}\n\n.light-blue-waves.waves-accent-4 .waves-ripple {\n background-color: #0091ea !important;\n}\n\n.cyan {\n background-color: #00bcd4 !important;\n}\n\n.cyan-text {\n color: #00bcd4 !important;\n}\n\n.cyan-waves .waves-ripple {\n background-color: #00bcd4 !important;\n}\n\n.cyan.lighten-5 {\n background-color: #e0f7fa !important;\n}\n\n.cyan-text.text-lighten-5 {\n color: #e0f7fa !important;\n}\n\n.cyan-waves.waves-lighten-5 .waves-ripple {\n background-color: #e0f7fa !important;\n}\n\n.cyan.lighten-4 {\n background-color: #b2ebf2 !important;\n}\n\n.cyan-text.text-lighten-4 {\n color: #b2ebf2 !important;\n}\n\n.cyan-waves.waves-lighten-4 .waves-ripple {\n background-color: #b2ebf2 !important;\n}\n\n.cyan.lighten-3 {\n background-color: #80deea !important;\n}\n\n.cyan-text.text-lighten-3 {\n color: #80deea !important;\n}\n\n.cyan-waves.waves-lighten-3 .waves-ripple {\n background-color: #80deea !important;\n}\n\n.cyan.lighten-2 {\n background-color: #4dd0e1 !important;\n}\n\n.cyan-text.text-lighten-2 {\n color: #4dd0e1 !important;\n}\n\n.cyan-waves.waves-lighten-2 .waves-ripple {\n background-color: #4dd0e1 !important;\n}\n\n.cyan.lighten-1 {\n background-color: #26c6da !important;\n}\n\n.cyan-text.text-lighten-1 {\n color: #26c6da !important;\n}\n\n.cyan-waves.waves-lighten-1 .waves-ripple {\n background-color: #26c6da !important;\n}\n\n.cyan.darken-1 {\n background-color: #00acc1 !important;\n}\n\n.cyan-text.text-darken-1 {\n color: #00acc1 !important;\n}\n\n.cyan-waves.waves-darken-1 .waves-ripple {\n background-color: #00acc1 !important;\n}\n\n.cyan.darken-2 {\n background-color: #0097a7 !important;\n}\n\n.cyan-text.text-darken-2 {\n color: #0097a7 !important;\n}\n\n.cyan-waves.waves-darken-2 .waves-ripple {\n background-color: #0097a7 !important;\n}\n\n.cyan.darken-3 {\n background-color: #00838f !important;\n}\n\n.cyan-text.text-darken-3 {\n color: #00838f !important;\n}\n\n.cyan-waves.waves-darken-3 .waves-ripple {\n background-color: #00838f !important;\n}\n\n.cyan.darken-4 {\n background-color: #006064 !important;\n}\n\n.cyan-text.text-darken-4 {\n color: #006064 !important;\n}\n\n.cyan-waves.waves-darken-4 .waves-ripple {\n background-color: #006064 !important;\n}\n\n.cyan.accent-1 {\n background-color: #84ffff !important;\n}\n\n.cyan-text.text-accent-1 {\n color: #84ffff !important;\n}\n\n.cyan-waves.waves-accent-1 .waves-ripple {\n background-color: #84ffff !important;\n}\n\n.cyan.accent-2 {\n background-color: #18ffff !important;\n}\n\n.cyan-text.text-accent-2 {\n color: #18ffff !important;\n}\n\n.cyan-waves.waves-accent-2 .waves-ripple {\n background-color: #18ffff !important;\n}\n\n.cyan.accent-3 {\n background-color: #00e5ff !important;\n}\n\n.cyan-text.text-accent-3 {\n color: #00e5ff !important;\n}\n\n.cyan-waves.waves-accent-3 .waves-ripple {\n background-color: #00e5ff !important;\n}\n\n.cyan.accent-4 {\n background-color: #00b8d4 !important;\n}\n\n.cyan-text.text-accent-4 {\n color: #00b8d4 !important;\n}\n\n.cyan-waves.waves-accent-4 .waves-ripple {\n background-color: #00b8d4 !important;\n}\n\n.teal {\n background-color: #009688 !important;\n}\n\n.teal-text {\n color: #009688 !important;\n}\n\n.teal-waves .waves-ripple {\n background-color: #009688 !important;\n}\n\n.teal.lighten-5 {\n background-color: #e0f2f1 !important;\n}\n\n.teal-text.text-lighten-5 {\n color: #e0f2f1 !important;\n}\n\n.teal-waves.waves-lighten-5 .waves-ripple {\n background-color: #e0f2f1 !important;\n}\n\n.teal.lighten-4 {\n background-color: #b2dfdb !important;\n}\n\n.teal-text.text-lighten-4 {\n color: #b2dfdb !important;\n}\n\n.teal-waves.waves-lighten-4 .waves-ripple {\n background-color: #b2dfdb !important;\n}\n\n.teal.lighten-3 {\n background-color: #80cbc4 !important;\n}\n\n.teal-text.text-lighten-3 {\n color: #80cbc4 !important;\n}\n\n.teal-waves.waves-lighten-3 .waves-ripple {\n background-color: #80cbc4 !important;\n}\n\n.teal.lighten-2 {\n background-color: #4db6ac !important;\n}\n\n.teal-text.text-lighten-2 {\n color: #4db6ac !important;\n}\n\n.teal-waves.waves-lighten-2 .waves-ripple {\n background-color: #4db6ac !important;\n}\n\n.teal.lighten-1 {\n background-color: #26a69a !important;\n}\n\n.teal-text.text-lighten-1 {\n color: #26a69a !important;\n}\n\n.teal-waves.waves-lighten-1 .waves-ripple {\n background-color: #26a69a !important;\n}\n\n.teal.darken-1 {\n background-color: #00897b !important;\n}\n\n.teal-text.text-darken-1 {\n color: #00897b !important;\n}\n\n.teal-waves.waves-darken-1 .waves-ripple {\n background-color: #00897b !important;\n}\n\n.teal.darken-2 {\n background-color: #00796b !important;\n}\n\n.teal-text.text-darken-2 {\n color: #00796b !important;\n}\n\n.teal-waves.waves-darken-2 .waves-ripple {\n background-color: #00796b !important;\n}\n\n.teal.darken-3 {\n background-color: #00695c !important;\n}\n\n.teal-text.text-darken-3 {\n color: #00695c !important;\n}\n\n.teal-waves.waves-darken-3 .waves-ripple {\n background-color: #00695c !important;\n}\n\n.teal.darken-4 {\n background-color: #004d40 !important;\n}\n\n.teal-text.text-darken-4 {\n color: #004d40 !important;\n}\n\n.teal-waves.waves-darken-4 .waves-ripple {\n background-color: #004d40 !important;\n}\n\n.teal.accent-1 {\n background-color: #a7ffeb !important;\n}\n\n.teal-text.text-accent-1 {\n color: #a7ffeb !important;\n}\n\n.teal-waves.waves-accent-1 .waves-ripple {\n background-color: #a7ffeb !important;\n}\n\n.teal.accent-2 {\n background-color: #64ffda !important;\n}\n\n.teal-text.text-accent-2 {\n color: #64ffda !important;\n}\n\n.teal-waves.waves-accent-2 .waves-ripple {\n background-color: #64ffda !important;\n}\n\n.teal.accent-3 {\n background-color: #1de9b6 !important;\n}\n\n.teal-text.text-accent-3 {\n color: #1de9b6 !important;\n}\n\n.teal-waves.waves-accent-3 .waves-ripple {\n background-color: #1de9b6 !important;\n}\n\n.teal.accent-4 {\n background-color: #00bfa5 !important;\n}\n\n.teal-text.text-accent-4 {\n color: #00bfa5 !important;\n}\n\n.teal-waves.waves-accent-4 .waves-ripple {\n background-color: #00bfa5 !important;\n}\n\n.green {\n background-color: #4caf50 !important;\n}\n\n.green-text {\n color: #4caf50 !important;\n}\n\n.green-waves .waves-ripple {\n background-color: #4caf50 !important;\n}\n\n.green.lighten-5 {\n background-color: #e8f5e9 !important;\n}\n\n.green-text.text-lighten-5 {\n color: #e8f5e9 !important;\n}\n\n.green-waves.waves-lighten-5 .waves-ripple {\n background-color: #e8f5e9 !important;\n}\n\n.green.lighten-4 {\n background-color: #c8e6c9 !important;\n}\n\n.green-text.text-lighten-4 {\n color: #c8e6c9 !important;\n}\n\n.green-waves.waves-lighten-4 .waves-ripple {\n background-color: #c8e6c9 !important;\n}\n\n.green.lighten-3 {\n background-color: #a5d6a7 !important;\n}\n\n.green-text.text-lighten-3 {\n color: #a5d6a7 !important;\n}\n\n.green-waves.waves-lighten-3 .waves-ripple {\n background-color: #a5d6a7 !important;\n}\n\n.green.lighten-2 {\n background-color: #81c784 !important;\n}\n\n.green-text.text-lighten-2 {\n color: #81c784 !important;\n}\n\n.green-waves.waves-lighten-2 .waves-ripple {\n background-color: #81c784 !important;\n}\n\n.green.lighten-1 {\n background-color: #66bb6a !important;\n}\n\n.green-text.text-lighten-1 {\n color: #66bb6a !important;\n}\n\n.green-waves.waves-lighten-1 .waves-ripple {\n background-color: #66bb6a !important;\n}\n\n.green.darken-1 {\n background-color: #43a047 !important;\n}\n\n.green-text.text-darken-1 {\n color: #43a047 !important;\n}\n\n.green-waves.waves-darken-1 .waves-ripple {\n background-color: #43a047 !important;\n}\n\n.green.darken-2 {\n background-color: #388e3c !important;\n}\n\n.green-text.text-darken-2 {\n color: #388e3c !important;\n}\n\n.green-waves.waves-darken-2 .waves-ripple {\n background-color: #388e3c !important;\n}\n\n.green.darken-3 {\n background-color: #2e7d32 !important;\n}\n\n.green-text.text-darken-3 {\n color: #2e7d32 !important;\n}\n\n.green-waves.waves-darken-3 .waves-ripple {\n background-color: #2e7d32 !important;\n}\n\n.green.darken-4 {\n background-color: #1b5e20 !important;\n}\n\n.green-text.text-darken-4 {\n color: #1b5e20 !important;\n}\n\n.green-waves.waves-darken-4 .waves-ripple {\n background-color: #1b5e20 !important;\n}\n\n.green.accent-1 {\n background-color: #b9f6ca !important;\n}\n\n.green-text.text-accent-1 {\n color: #b9f6ca !important;\n}\n\n.green-waves.waves-accent-1 .waves-ripple {\n background-color: #b9f6ca !important;\n}\n\n.green.accent-2 {\n background-color: #69f0ae !important;\n}\n\n.green-text.text-accent-2 {\n color: #69f0ae !important;\n}\n\n.green-waves.waves-accent-2 .waves-ripple {\n background-color: #69f0ae !important;\n}\n\n.green.accent-3 {\n background-color: #00e676 !important;\n}\n\n.green-text.text-accent-3 {\n color: #00e676 !important;\n}\n\n.green-waves.waves-accent-3 .waves-ripple {\n background-color: #00e676 !important;\n}\n\n.green.accent-4 {\n background-color: #00c853 !important;\n}\n\n.green-text.text-accent-4 {\n color: #00c853 !important;\n}\n\n.green-waves.waves-accent-4 .waves-ripple {\n background-color: #00c853 !important;\n}\n\n.light-green {\n background-color: #8bc34a !important;\n}\n\n.light-green-text {\n color: #8bc34a !important;\n}\n\n.light-green-waves .waves-ripple {\n background-color: #8bc34a !important;\n}\n\n.light-green.lighten-5 {\n background-color: #f1f8e9 !important;\n}\n\n.light-green-text.text-lighten-5 {\n color: #f1f8e9 !important;\n}\n\n.light-green-waves.waves-lighten-5 .waves-ripple {\n background-color: #f1f8e9 !important;\n}\n\n.light-green.lighten-4 {\n background-color: #dcedc8 !important;\n}\n\n.light-green-text.text-lighten-4 {\n color: #dcedc8 !important;\n}\n\n.light-green-waves.waves-lighten-4 .waves-ripple {\n background-color: #dcedc8 !important;\n}\n\n.light-green.lighten-3 {\n background-color: #c5e1a5 !important;\n}\n\n.light-green-text.text-lighten-3 {\n color: #c5e1a5 !important;\n}\n\n.light-green-waves.waves-lighten-3 .waves-ripple {\n background-color: #c5e1a5 !important;\n}\n\n.light-green.lighten-2 {\n background-color: #aed581 !important;\n}\n\n.light-green-text.text-lighten-2 {\n color: #aed581 !important;\n}\n\n.light-green-waves.waves-lighten-2 .waves-ripple {\n background-color: #aed581 !important;\n}\n\n.light-green.lighten-1 {\n background-color: #9ccc65 !important;\n}\n\n.light-green-text.text-lighten-1 {\n color: #9ccc65 !important;\n}\n\n.light-green-waves.waves-lighten-1 .waves-ripple {\n background-color: #9ccc65 !important;\n}\n\n.light-green.darken-1 {\n background-color: #7cb342 !important;\n}\n\n.light-green-text.text-darken-1 {\n color: #7cb342 !important;\n}\n\n.light-green-waves.waves-darken-1 .waves-ripple {\n background-color: #7cb342 !important;\n}\n\n.light-green.darken-2 {\n background-color: #689f38 !important;\n}\n\n.light-green-text.text-darken-2 {\n color: #689f38 !important;\n}\n\n.light-green-waves.waves-darken-2 .waves-ripple {\n background-color: #689f38 !important;\n}\n\n.light-green.darken-3 {\n background-color: #558b2f !important;\n}\n\n.light-green-text.text-darken-3 {\n color: #558b2f !important;\n}\n\n.light-green-waves.waves-darken-3 .waves-ripple {\n background-color: #558b2f !important;\n}\n\n.light-green.darken-4 {\n background-color: #33691e !important;\n}\n\n.light-green-text.text-darken-4 {\n color: #33691e !important;\n}\n\n.light-green-waves.waves-darken-4 .waves-ripple {\n background-color: #33691e !important;\n}\n\n.light-green.accent-1 {\n background-color: #ccff90 !important;\n}\n\n.light-green-text.text-accent-1 {\n color: #ccff90 !important;\n}\n\n.light-green-waves.waves-accent-1 .waves-ripple {\n background-color: #ccff90 !important;\n}\n\n.light-green.accent-2 {\n background-color: #b2ff59 !important;\n}\n\n.light-green-text.text-accent-2 {\n color: #b2ff59 !important;\n}\n\n.light-green-waves.waves-accent-2 .waves-ripple {\n background-color: #b2ff59 !important;\n}\n\n.light-green.accent-3 {\n background-color: #76ff03 !important;\n}\n\n.light-green-text.text-accent-3 {\n color: #76ff03 !important;\n}\n\n.light-green-waves.waves-accent-3 .waves-ripple {\n background-color: #76ff03 !important;\n}\n\n.light-green.accent-4 {\n background-color: #64dd17 !important;\n}\n\n.light-green-text.text-accent-4 {\n color: #64dd17 !important;\n}\n\n.light-green-waves.waves-accent-4 .waves-ripple {\n background-color: #64dd17 !important;\n}\n\n.lime {\n background-color: #cddc39 !important;\n}\n\n.lime-text {\n color: #cddc39 !important;\n}\n\n.lime-waves .waves-ripple {\n background-color: #cddc39 !important;\n}\n\n.lime.lighten-5 {\n background-color: #f9fbe7 !important;\n}\n\n.lime-text.text-lighten-5 {\n color: #f9fbe7 !important;\n}\n\n.lime-waves.waves-lighten-5 .waves-ripple {\n background-color: #f9fbe7 !important;\n}\n\n.lime.lighten-4 {\n background-color: #f0f4c3 !important;\n}\n\n.lime-text.text-lighten-4 {\n color: #f0f4c3 !important;\n}\n\n.lime-waves.waves-lighten-4 .waves-ripple {\n background-color: #f0f4c3 !important;\n}\n\n.lime.lighten-3 {\n background-color: #e6ee9c !important;\n}\n\n.lime-text.text-lighten-3 {\n color: #e6ee9c !important;\n}\n\n.lime-waves.waves-lighten-3 .waves-ripple {\n background-color: #e6ee9c !important;\n}\n\n.lime.lighten-2 {\n background-color: #dce775 !important;\n}\n\n.lime-text.text-lighten-2 {\n color: #dce775 !important;\n}\n\n.lime-waves.waves-lighten-2 .waves-ripple {\n background-color: #dce775 !important;\n}\n\n.lime.lighten-1 {\n background-color: #d4e157 !important;\n}\n\n.lime-text.text-lighten-1 {\n color: #d4e157 !important;\n}\n\n.lime-waves.waves-lighten-1 .waves-ripple {\n background-color: #d4e157 !important;\n}\n\n.lime.darken-1 {\n background-color: #c0ca33 !important;\n}\n\n.lime-text.text-darken-1 {\n color: #c0ca33 !important;\n}\n\n.lime-waves.waves-darken-1 .waves-ripple {\n background-color: #c0ca33 !important;\n}\n\n.lime.darken-2 {\n background-color: #afb42b !important;\n}\n\n.lime-text.text-darken-2 {\n color: #afb42b !important;\n}\n\n.lime-waves.waves-darken-2 .waves-ripple {\n background-color: #afb42b !important;\n}\n\n.lime.darken-3 {\n background-color: #9e9d24 !important;\n}\n\n.lime-text.text-darken-3 {\n color: #9e9d24 !important;\n}\n\n.lime-waves.waves-darken-3 .waves-ripple {\n background-color: #9e9d24 !important;\n}\n\n.lime.darken-4 {\n background-color: #827717 !important;\n}\n\n.lime-text.text-darken-4 {\n color: #827717 !important;\n}\n\n.lime-waves.waves-darken-4 .waves-ripple {\n background-color: #827717 !important;\n}\n\n.lime.accent-1 {\n background-color: #f4ff81 !important;\n}\n\n.lime-text.text-accent-1 {\n color: #f4ff81 !important;\n}\n\n.lime-waves.waves-accent-1 .waves-ripple {\n background-color: #f4ff81 !important;\n}\n\n.lime.accent-2 {\n background-color: #eeff41 !important;\n}\n\n.lime-text.text-accent-2 {\n color: #eeff41 !important;\n}\n\n.lime-waves.waves-accent-2 .waves-ripple {\n background-color: #eeff41 !important;\n}\n\n.lime.accent-3 {\n background-color: #c6ff00 !important;\n}\n\n.lime-text.text-accent-3 {\n color: #c6ff00 !important;\n}\n\n.lime-waves.waves-accent-3 .waves-ripple {\n background-color: #c6ff00 !important;\n}\n\n.lime.accent-4 {\n background-color: #aeea00 !important;\n}\n\n.lime-text.text-accent-4 {\n color: #aeea00 !important;\n}\n\n.lime-waves.waves-accent-4 .waves-ripple {\n background-color: #aeea00 !important;\n}\n\n.yellow {\n background-color: #ffeb3b !important;\n}\n\n.yellow-text {\n color: #ffeb3b !important;\n}\n\n.yellow-waves .waves-ripple {\n background-color: #ffeb3b !important;\n}\n\n.yellow.lighten-5 {\n background-color: #fffde7 !important;\n}\n\n.yellow-text.text-lighten-5 {\n color: #fffde7 !important;\n}\n\n.yellow-waves.waves-lighten-5 .waves-ripple {\n background-color: #fffde7 !important;\n}\n\n.yellow.lighten-4 {\n background-color: #fff9c4 !important;\n}\n\n.yellow-text.text-lighten-4 {\n color: #fff9c4 !important;\n}\n\n.yellow-waves.waves-lighten-4 .waves-ripple {\n background-color: #fff9c4 !important;\n}\n\n.yellow.lighten-3 {\n background-color: #fff59d !important;\n}\n\n.yellow-text.text-lighten-3 {\n color: #fff59d !important;\n}\n\n.yellow-waves.waves-lighten-3 .waves-ripple {\n background-color: #fff59d !important;\n}\n\n.yellow.lighten-2 {\n background-color: #fff176 !important;\n}\n\n.yellow-text.text-lighten-2 {\n color: #fff176 !important;\n}\n\n.yellow-waves.waves-lighten-2 .waves-ripple {\n background-color: #fff176 !important;\n}\n\n.yellow.lighten-1 {\n background-color: #ffee58 !important;\n}\n\n.yellow-text.text-lighten-1 {\n color: #ffee58 !important;\n}\n\n.yellow-waves.waves-lighten-1 .waves-ripple {\n background-color: #ffee58 !important;\n}\n\n.yellow.darken-1 {\n background-color: #fdd835 !important;\n}\n\n.yellow-text.text-darken-1 {\n color: #fdd835 !important;\n}\n\n.yellow-waves.waves-darken-1 .waves-ripple {\n background-color: #fdd835 !important;\n}\n\n.yellow.darken-2 {\n background-color: #fbc02d !important;\n}\n\n.yellow-text.text-darken-2 {\n color: #fbc02d !important;\n}\n\n.yellow-waves.waves-darken-2 .waves-ripple {\n background-color: #fbc02d !important;\n}\n\n.yellow.darken-3 {\n background-color: #f9a825 !important;\n}\n\n.yellow-text.text-darken-3 {\n color: #f9a825 !important;\n}\n\n.yellow-waves.waves-darken-3 .waves-ripple {\n background-color: #f9a825 !important;\n}\n\n.yellow.darken-4 {\n background-color: #f57f17 !important;\n}\n\n.yellow-text.text-darken-4 {\n color: #f57f17 !important;\n}\n\n.yellow-waves.waves-darken-4 .waves-ripple {\n background-color: #f57f17 !important;\n}\n\n.yellow.accent-1 {\n background-color: #ffff8d !important;\n}\n\n.yellow-text.text-accent-1 {\n color: #ffff8d !important;\n}\n\n.yellow-waves.waves-accent-1 .waves-ripple {\n background-color: #ffff8d !important;\n}\n\n.yellow.accent-2 {\n background-color: #ffff00 !important;\n}\n\n.yellow-text.text-accent-2 {\n color: #ffff00 !important;\n}\n\n.yellow-waves.waves-accent-2 .waves-ripple {\n background-color: #ffff00 !important;\n}\n\n.yellow.accent-3 {\n background-color: #ffea00 !important;\n}\n\n.yellow-text.text-accent-3 {\n color: #ffea00 !important;\n}\n\n.yellow-waves.waves-accent-3 .waves-ripple {\n background-color: #ffea00 !important;\n}\n\n.yellow.accent-4 {\n background-color: #ffd600 !important;\n}\n\n.yellow-text.text-accent-4 {\n color: #ffd600 !important;\n}\n\n.yellow-waves.waves-accent-4 .waves-ripple {\n background-color: #ffd600 !important;\n}\n\n.amber {\n background-color: #ffc107 !important;\n}\n\n.amber-text {\n color: #ffc107 !important;\n}\n\n.amber-waves .waves-ripple {\n background-color: #ffc107 !important;\n}\n\n.amber.lighten-5 {\n background-color: #fff8e1 !important;\n}\n\n.amber-text.text-lighten-5 {\n color: #fff8e1 !important;\n}\n\n.amber-waves.waves-lighten-5 .waves-ripple {\n background-color: #fff8e1 !important;\n}\n\n.amber.lighten-4 {\n background-color: #ffecb3 !important;\n}\n\n.amber-text.text-lighten-4 {\n color: #ffecb3 !important;\n}\n\n.amber-waves.waves-lighten-4 .waves-ripple {\n background-color: #ffecb3 !important;\n}\n\n.amber.lighten-3 {\n background-color: #ffe082 !important;\n}\n\n.amber-text.text-lighten-3 {\n color: #ffe082 !important;\n}\n\n.amber-waves.waves-lighten-3 .waves-ripple {\n background-color: #ffe082 !important;\n}\n\n.amber.lighten-2 {\n background-color: #ffd54f !important;\n}\n\n.amber-text.text-lighten-2 {\n color: #ffd54f !important;\n}\n\n.amber-waves.waves-lighten-2 .waves-ripple {\n background-color: #ffd54f !important;\n}\n\n.amber.lighten-1 {\n background-color: #ffca28 !important;\n}\n\n.amber-text.text-lighten-1 {\n color: #ffca28 !important;\n}\n\n.amber-waves.waves-lighten-1 .waves-ripple {\n background-color: #ffca28 !important;\n}\n\n.amber.darken-1 {\n background-color: #ffb300 !important;\n}\n\n.amber-text.text-darken-1 {\n color: #ffb300 !important;\n}\n\n.amber-waves.waves-darken-1 .waves-ripple {\n background-color: #ffb300 !important;\n}\n\n.amber.darken-2 {\n background-color: #ffa000 !important;\n}\n\n.amber-text.text-darken-2 {\n color: #ffa000 !important;\n}\n\n.amber-waves.waves-darken-2 .waves-ripple {\n background-color: #ffa000 !important;\n}\n\n.amber.darken-3 {\n background-color: #ff8f00 !important;\n}\n\n.amber-text.text-darken-3 {\n color: #ff8f00 !important;\n}\n\n.amber-waves.waves-darken-3 .waves-ripple {\n background-color: #ff8f00 !important;\n}\n\n.amber.darken-4 {\n background-color: #ff6f00 !important;\n}\n\n.amber-text.text-darken-4 {\n color: #ff6f00 !important;\n}\n\n.amber-waves.waves-darken-4 .waves-ripple {\n background-color: #ff6f00 !important;\n}\n\n.amber.accent-1 {\n background-color: #ffe57f !important;\n}\n\n.amber-text.text-accent-1 {\n color: #ffe57f !important;\n}\n\n.amber-waves.waves-accent-1 .waves-ripple {\n background-color: #ffe57f !important;\n}\n\n.amber.accent-2 {\n background-color: #ffd740 !important;\n}\n\n.amber-text.text-accent-2 {\n color: #ffd740 !important;\n}\n\n.amber-waves.waves-accent-2 .waves-ripple {\n background-color: #ffd740 !important;\n}\n\n.amber.accent-3 {\n background-color: #ffc400 !important;\n}\n\n.amber-text.text-accent-3 {\n color: #ffc400 !important;\n}\n\n.amber-waves.waves-accent-3 .waves-ripple {\n background-color: #ffc400 !important;\n}\n\n.amber.accent-4 {\n background-color: #ffab00 !important;\n}\n\n.amber-text.text-accent-4 {\n color: #ffab00 !important;\n}\n\n.amber-waves.waves-accent-4 .waves-ripple {\n background-color: #ffab00 !important;\n}\n\n.orange {\n background-color: #ff9800 !important;\n}\n\n.orange-text {\n color: #ff9800 !important;\n}\n\n.orange-waves .waves-ripple {\n background-color: #ff9800 !important;\n}\n\n.orange.lighten-5 {\n background-color: #fff3e0 !important;\n}\n\n.orange-text.text-lighten-5 {\n color: #fff3e0 !important;\n}\n\n.orange-waves.waves-lighten-5 .waves-ripple {\n background-color: #fff3e0 !important;\n}\n\n.orange.lighten-4 {\n background-color: #ffe0b2 !important;\n}\n\n.orange-text.text-lighten-4 {\n color: #ffe0b2 !important;\n}\n\n.orange-waves.waves-lighten-4 .waves-ripple {\n background-color: #ffe0b2 !important;\n}\n\n.orange.lighten-3 {\n background-color: #ffcc80 !important;\n}\n\n.orange-text.text-lighten-3 {\n color: #ffcc80 !important;\n}\n\n.orange-waves.waves-lighten-3 .waves-ripple {\n background-color: #ffcc80 !important;\n}\n\n.orange.lighten-2 {\n background-color: #ffb74d !important;\n}\n\n.orange-text.text-lighten-2 {\n color: #ffb74d !important;\n}\n\n.orange-waves.waves-lighten-2 .waves-ripple {\n background-color: #ffb74d !important;\n}\n\n.orange.lighten-1 {\n background-color: #ffa726 !important;\n}\n\n.orange-text.text-lighten-1 {\n color: #ffa726 !important;\n}\n\n.orange-waves.waves-lighten-1 .waves-ripple {\n background-color: #ffa726 !important;\n}\n\n.orange.darken-1 {\n background-color: #fb8c00 !important;\n}\n\n.orange-text.text-darken-1 {\n color: #fb8c00 !important;\n}\n\n.orange-waves.waves-darken-1 .waves-ripple {\n background-color: #fb8c00 !important;\n}\n\n.orange.darken-2 {\n background-color: #f57c00 !important;\n}\n\n.orange-text.text-darken-2 {\n color: #f57c00 !important;\n}\n\n.orange-waves.waves-darken-2 .waves-ripple {\n background-color: #f57c00 !important;\n}\n\n.orange.darken-3 {\n background-color: #ef6c00 !important;\n}\n\n.orange-text.text-darken-3 {\n color: #ef6c00 !important;\n}\n\n.orange-waves.waves-darken-3 .waves-ripple {\n background-color: #ef6c00 !important;\n}\n\n.orange.darken-4 {\n background-color: #e65100 !important;\n}\n\n.orange-text.text-darken-4 {\n color: #e65100 !important;\n}\n\n.orange-waves.waves-darken-4 .waves-ripple {\n background-color: #e65100 !important;\n}\n\n.orange.accent-1 {\n background-color: #ffd180 !important;\n}\n\n.orange-text.text-accent-1 {\n color: #ffd180 !important;\n}\n\n.orange-waves.waves-accent-1 .waves-ripple {\n background-color: #ffd180 !important;\n}\n\n.orange.accent-2 {\n background-color: #ffab40 !important;\n}\n\n.orange-text.text-accent-2 {\n color: #ffab40 !important;\n}\n\n.orange-waves.waves-accent-2 .waves-ripple {\n background-color: #ffab40 !important;\n}\n\n.orange.accent-3 {\n background-color: #ff9100 !important;\n}\n\n.orange-text.text-accent-3 {\n color: #ff9100 !important;\n}\n\n.orange-waves.waves-accent-3 .waves-ripple {\n background-color: #ff9100 !important;\n}\n\n.orange.accent-4 {\n background-color: #ff6d00 !important;\n}\n\n.orange-text.text-accent-4 {\n color: #ff6d00 !important;\n}\n\n.orange-waves.waves-accent-4 .waves-ripple {\n background-color: #ff6d00 !important;\n}\n\n.deep-orange {\n background-color: #ff5722 !important;\n}\n\n.deep-orange-text {\n color: #ff5722 !important;\n}\n\n.deep-orange-waves .waves-ripple {\n background-color: #ff5722 !important;\n}\n\n.deep-orange.lighten-5 {\n background-color: #fbe9e7 !important;\n}\n\n.deep-orange-text.text-lighten-5 {\n color: #fbe9e7 !important;\n}\n\n.deep-orange-waves.waves-lighten-5 .waves-ripple {\n background-color: #fbe9e7 !important;\n}\n\n.deep-orange.lighten-4 {\n background-color: #ffccbc !important;\n}\n\n.deep-orange-text.text-lighten-4 {\n color: #ffccbc !important;\n}\n\n.deep-orange-waves.waves-lighten-4 .waves-ripple {\n background-color: #ffccbc !important;\n}\n\n.deep-orange.lighten-3 {\n background-color: #ffab91 !important;\n}\n\n.deep-orange-text.text-lighten-3 {\n color: #ffab91 !important;\n}\n\n.deep-orange-waves.waves-lighten-3 .waves-ripple {\n background-color: #ffab91 !important;\n}\n\n.deep-orange.lighten-2 {\n background-color: #ff8a65 !important;\n}\n\n.deep-orange-text.text-lighten-2 {\n color: #ff8a65 !important;\n}\n\n.deep-orange-waves.waves-lighten-2 .waves-ripple {\n background-color: #ff8a65 !important;\n}\n\n.deep-orange.lighten-1 {\n background-color: #ff7043 !important;\n}\n\n.deep-orange-text.text-lighten-1 {\n color: #ff7043 !important;\n}\n\n.deep-orange-waves.waves-lighten-1 .waves-ripple {\n background-color: #ff7043 !important;\n}\n\n.deep-orange.darken-1 {\n background-color: #f4511e !important;\n}\n\n.deep-orange-text.text-darken-1 {\n color: #f4511e !important;\n}\n\n.deep-orange-waves.waves-darken-1 .waves-ripple {\n background-color: #f4511e !important;\n}\n\n.deep-orange.darken-2 {\n background-color: #e64a19 !important;\n}\n\n.deep-orange-text.text-darken-2 {\n color: #e64a19 !important;\n}\n\n.deep-orange-waves.waves-darken-2 .waves-ripple {\n background-color: #e64a19 !important;\n}\n\n.deep-orange.darken-3 {\n background-color: #d84315 !important;\n}\n\n.deep-orange-text.text-darken-3 {\n color: #d84315 !important;\n}\n\n.deep-orange-waves.waves-darken-3 .waves-ripple {\n background-color: #d84315 !important;\n}\n\n.deep-orange.darken-4 {\n background-color: #bf360c !important;\n}\n\n.deep-orange-text.text-darken-4 {\n color: #bf360c !important;\n}\n\n.deep-orange-waves.waves-darken-4 .waves-ripple {\n background-color: #bf360c !important;\n}\n\n.deep-orange.accent-1 {\n background-color: #ff9e80 !important;\n}\n\n.deep-orange-text.text-accent-1 {\n color: #ff9e80 !important;\n}\n\n.deep-orange-waves.waves-accent-1 .waves-ripple {\n background-color: #ff9e80 !important;\n}\n\n.deep-orange.accent-2 {\n background-color: #ff6e40 !important;\n}\n\n.deep-orange-text.text-accent-2 {\n color: #ff6e40 !important;\n}\n\n.deep-orange-waves.waves-accent-2 .waves-ripple {\n background-color: #ff6e40 !important;\n}\n\n.deep-orange.accent-3 {\n background-color: #ff3d00 !important;\n}\n\n.deep-orange-text.text-accent-3 {\n color: #ff3d00 !important;\n}\n\n.deep-orange-waves.waves-accent-3 .waves-ripple {\n background-color: #ff3d00 !important;\n}\n\n.deep-orange.accent-4 {\n background-color: #dd2c00 !important;\n}\n\n.deep-orange-text.text-accent-4 {\n color: #dd2c00 !important;\n}\n\n.deep-orange-waves.waves-accent-4 .waves-ripple {\n background-color: #dd2c00 !important;\n}\n\n.brown {\n background-color: #795548 !important;\n}\n\n.brown-text {\n color: #795548 !important;\n}\n\n.brown-waves .waves-ripple {\n background-color: #795548 !important;\n}\n\n.brown.lighten-5 {\n background-color: #efebe9 !important;\n}\n\n.brown-text.text-lighten-5 {\n color: #efebe9 !important;\n}\n\n.brown-waves.waves-lighten-5 .waves-ripple {\n background-color: #efebe9 !important;\n}\n\n.brown.lighten-4 {\n background-color: #d7ccc8 !important;\n}\n\n.brown-text.text-lighten-4 {\n color: #d7ccc8 !important;\n}\n\n.brown-waves.waves-lighten-4 .waves-ripple {\n background-color: #d7ccc8 !important;\n}\n\n.brown.lighten-3 {\n background-color: #bcaaa4 !important;\n}\n\n.brown-text.text-lighten-3 {\n color: #bcaaa4 !important;\n}\n\n.brown-waves.waves-lighten-3 .waves-ripple {\n background-color: #bcaaa4 !important;\n}\n\n.brown.lighten-2 {\n background-color: #a1887f !important;\n}\n\n.brown-text.text-lighten-2 {\n color: #a1887f !important;\n}\n\n.brown-waves.waves-lighten-2 .waves-ripple {\n background-color: #a1887f !important;\n}\n\n.brown.lighten-1 {\n background-color: #8d6e63 !important;\n}\n\n.brown-text.text-lighten-1 {\n color: #8d6e63 !important;\n}\n\n.brown-waves.waves-lighten-1 .waves-ripple {\n background-color: #8d6e63 !important;\n}\n\n.brown.darken-1 {\n background-color: #6d4c41 !important;\n}\n\n.brown-text.text-darken-1 {\n color: #6d4c41 !important;\n}\n\n.brown-waves.waves-darken-1 .waves-ripple {\n background-color: #6d4c41 !important;\n}\n\n.brown.darken-2 {\n background-color: #5d4037 !important;\n}\n\n.brown-text.text-darken-2 {\n color: #5d4037 !important;\n}\n\n.brown-waves.waves-darken-2 .waves-ripple {\n background-color: #5d4037 !important;\n}\n\n.brown.darken-3 {\n background-color: #4e342e !important;\n}\n\n.brown-text.text-darken-3 {\n color: #4e342e !important;\n}\n\n.brown-waves.waves-darken-3 .waves-ripple {\n background-color: #4e342e !important;\n}\n\n.brown.darken-4 {\n background-color: #3e2723 !important;\n}\n\n.brown-text.text-darken-4 {\n color: #3e2723 !important;\n}\n\n.brown-waves.waves-darken-4 .waves-ripple {\n background-color: #3e2723 !important;\n}\n\n.blue-grey {\n background-color: #607d8b !important;\n}\n\n.blue-grey-text {\n color: #607d8b !important;\n}\n\n.blue-grey-waves .waves-ripple {\n background-color: #607d8b !important;\n}\n\n.blue-grey.lighten-5 {\n background-color: #eceff1 !important;\n}\n\n.blue-grey-text.text-lighten-5 {\n color: #eceff1 !important;\n}\n\n.blue-grey-waves.waves-lighten-5 .waves-ripple {\n background-color: #eceff1 !important;\n}\n\n.blue-grey.lighten-4 {\n background-color: #cfd8dc !important;\n}\n\n.blue-grey-text.text-lighten-4 {\n color: #cfd8dc !important;\n}\n\n.blue-grey-waves.waves-lighten-4 .waves-ripple {\n background-color: #cfd8dc !important;\n}\n\n.blue-grey.lighten-3 {\n background-color: #b0bec5 !important;\n}\n\n.blue-grey-text.text-lighten-3 {\n color: #b0bec5 !important;\n}\n\n.blue-grey-waves.waves-lighten-3 .waves-ripple {\n background-color: #b0bec5 !important;\n}\n\n.blue-grey.lighten-2 {\n background-color: #90a4ae !important;\n}\n\n.blue-grey-text.text-lighten-2 {\n color: #90a4ae !important;\n}\n\n.blue-grey-waves.waves-lighten-2 .waves-ripple {\n background-color: #90a4ae !important;\n}\n\n.blue-grey.lighten-1 {\n background-color: #78909c !important;\n}\n\n.blue-grey-text.text-lighten-1 {\n color: #78909c !important;\n}\n\n.blue-grey-waves.waves-lighten-1 .waves-ripple {\n background-color: #78909c !important;\n}\n\n.blue-grey.darken-1 {\n background-color: #546e7a !important;\n}\n\n.blue-grey-text.text-darken-1 {\n color: #546e7a !important;\n}\n\n.blue-grey-waves.waves-darken-1 .waves-ripple {\n background-color: #546e7a !important;\n}\n\n.blue-grey.darken-2 {\n background-color: #455a64 !important;\n}\n\n.blue-grey-text.text-darken-2 {\n color: #455a64 !important;\n}\n\n.blue-grey-waves.waves-darken-2 .waves-ripple {\n background-color: #455a64 !important;\n}\n\n.blue-grey.darken-3 {\n background-color: #37474f !important;\n}\n\n.blue-grey-text.text-darken-3 {\n color: #37474f !important;\n}\n\n.blue-grey-waves.waves-darken-3 .waves-ripple {\n background-color: #37474f !important;\n}\n\n.blue-grey.darken-4 {\n background-color: #263238 !important;\n}\n\n.blue-grey-text.text-darken-4 {\n color: #263238 !important;\n}\n\n.blue-grey-waves.waves-darken-4 .waves-ripple {\n background-color: #263238 !important;\n}\n\n.grey {\n background-color: #9e9e9e !important;\n}\n\n.grey-text {\n color: #9e9e9e !important;\n}\n\n.grey-waves .waves-ripple {\n background-color: #9e9e9e !important;\n}\n\n.grey.lighten-5 {\n background-color: #fafafa !important;\n}\n\n.grey-text.text-lighten-5 {\n color: #fafafa !important;\n}\n\n.grey-waves.waves-lighten-5 .waves-ripple {\n background-color: #fafafa !important;\n}\n\n.grey.lighten-4 {\n background-color: #f5f5f5 !important;\n}\n\n.grey-text.text-lighten-4 {\n color: #f5f5f5 !important;\n}\n\n.grey-waves.waves-lighten-4 .waves-ripple {\n background-color: #f5f5f5 !important;\n}\n\n.grey.lighten-3 {\n background-color: #eeeeee !important;\n}\n\n.grey-text.text-lighten-3 {\n color: #eeeeee !important;\n}\n\n.grey-waves.waves-lighten-3 .waves-ripple {\n background-color: #eeeeee !important;\n}\n\n.grey.lighten-2 {\n background-color: #e0e0e0 !important;\n}\n\n.grey-text.text-lighten-2 {\n color: #e0e0e0 !important;\n}\n\n.grey-waves.waves-lighten-2 .waves-ripple {\n background-color: #e0e0e0 !important;\n}\n\n.grey.lighten-1 {\n background-color: #bdbdbd !important;\n}\n\n.grey-text.text-lighten-1 {\n color: #bdbdbd !important;\n}\n\n.grey-waves.waves-lighten-1 .waves-ripple {\n background-color: #bdbdbd !important;\n}\n\n.grey.darken-1 {\n background-color: #757575 !important;\n}\n\n.grey-text.text-darken-1 {\n color: #757575 !important;\n}\n\n.grey-waves.waves-darken-1 .waves-ripple {\n background-color: #757575 !important;\n}\n\n.grey.darken-2 {\n background-color: #616161 !important;\n}\n\n.grey-text.text-darken-2 {\n color: #616161 !important;\n}\n\n.grey-waves.waves-darken-2 .waves-ripple {\n background-color: #616161 !important;\n}\n\n.grey.darken-3 {\n background-color: #424242 !important;\n}\n\n.grey-text.text-darken-3 {\n color: #424242 !important;\n}\n\n.grey-waves.waves-darken-3 .waves-ripple {\n background-color: #424242 !important;\n}\n\n.grey.darken-4 {\n background-color: #212121 !important;\n}\n\n.grey-text.text-darken-4 {\n color: #212121 !important;\n}\n\n.grey-waves.waves-darken-4 .waves-ripple {\n background-color: #212121 !important;\n}\n\n.black {\n background-color: #000000 !important;\n}\n\n.black-text {\n color: #000000 !important;\n}\n\n.white {\n background-color: #ffffff !important;\n}\n\n.white-text {\n color: #ffffff !important;\n}\n\n.transparent {\n background-color: transparent !important;\n}\n\n.transparent-text {\n color: transparent !important;\n}\n\n/**\n * prism.js Twilight theme\n * Based (more or less) on the Twilight theme originally of Textmate fame.\n * @author Remy Bach\n */\ncode[class*=language-],\npre[class*=language-] {\n color: white;\n background: none;\n font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace;\n text-align: left;\n text-shadow: 0 -0.1em 0.2em black;\n white-space: pre;\n word-spacing: normal;\n word-break: normal;\n word-wrap: normal;\n line-height: 1.5;\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4;\n -webkit-hyphens: none;\n -moz-hyphens: none;\n -ms-hyphens: none;\n hyphens: none;\n}\n\npre[class*=language-],\n:not(pre) > code[class*=language-] {\n background: hsl(0deg, 0%, 8%); /* #141414 */\n}\n\n/* Code blocks */\npre[class*=language-] {\n border-radius: 0.5em;\n border: 0.3em solid hsl(0deg, 0%, 33%); /* #282A2B */\n box-shadow: 1px 1px 0.5em black inset;\n margin: 0.5em 0;\n overflow: auto;\n padding: 1em;\n}\n\npre[class*=language-]::-moz-selection {\n /* Firefox */\n background: hsl(200deg, 4%, 16%); /* #282A2B */\n}\n\npre[class*=language-]::selection {\n /* Safari */\n background: hsl(200deg, 4%, 16%); /* #282A2B */\n}\n\n/* Text Selection colour */\npre[class*=language-]::-moz-selection, pre[class*=language-] ::-moz-selection,\ncode[class*=language-]::-moz-selection, code[class*=language-] ::-moz-selection {\n text-shadow: none;\n background: hsla(0deg, 0%, 93%, 0.15); /* #EDEDED */\n}\n\npre[class*=language-]::selection, pre[class*=language-] ::selection,\ncode[class*=language-]::selection, code[class*=language-] ::selection {\n text-shadow: none;\n background: hsla(0deg, 0%, 93%, 0.15); /* #EDEDED */\n}\n\n/* Inline code */\n:not(pre) > code[class*=language-] {\n border-radius: 0.3em;\n border: 0.13em solid hsl(0deg, 0%, 33%); /* #545454 */\n box-shadow: 1px 1px 0.3em -0.1em black inset;\n padding: 0.15em 0.2em 0.05em;\n white-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n color: hsl(0deg, 0%, 47%); /* #777777 */\n}\n\n.token.punctuation {\n opacity: 0.7;\n}\n\n.namespace {\n opacity: 0.7;\n}\n\n.token.tag,\n.token.boolean,\n.token.number,\n.token.deleted {\n color: hsl(14deg, 58%, 55%); /* #CF6A4C */\n}\n\n.token.keyword,\n.token.property,\n.token.selector,\n.token.constant,\n.token.symbol,\n.token.builtin {\n color: hsl(53deg, 89%, 79%); /* #F9EE98 */\n}\n\n.token.attr-name,\n.token.attr-value,\n.token.string,\n.token.char,\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string,\n.token.variable,\n.token.inserted {\n color: hsl(76deg, 21%, 52%); /* #8F9D6A */\n}\n\n.token.atrule {\n color: hsl(218deg, 22%, 55%); /* #7587A6 */\n}\n\n.token.regex,\n.token.important {\n color: hsl(42deg, 75%, 65%); /* #E9C062 */\n}\n\n.token.important,\n.token.bold {\n font-weight: bold;\n}\n\n.token.italic {\n font-style: italic;\n}\n\n.token.entity {\n cursor: help;\n}\n\npre[data-line] {\n padding: 1em 0 1em 3em;\n position: relative;\n}\n\n/* Markup */\n.language-markup .token.tag,\n.language-markup .token.attr-name,\n.language-markup .token.punctuation {\n color: hsl(33deg, 33%, 52%); /* #AC885B */\n}\n\n/* Make the tokens sit above the line highlight so the colours don't look faded. */\n.token {\n position: relative;\n z-index: 1;\n}\n\n.line-highlight {\n background: hsla(0deg, 0%, 33%, 0.25); /* #545454 */\n background: linear-gradient(to right, hsla(0deg, 0%, 33%, 0.1) 70%, hsla(0deg, 0%, 33%, 0)); /* #545454 */\n border-bottom: 1px dashed hsl(0deg, 0%, 33%); /* #545454 */\n border-top: 1px dashed hsl(0deg, 0%, 33%); /* #545454 */\n left: 0;\n line-height: inherit;\n margin-top: 0.75em; /* Same as .prism’s padding-top */\n padding: inherit 0;\n pointer-events: none;\n position: absolute;\n right: 0;\n white-space: pre;\n z-index: 0;\n}\n\n.line-highlight:before,\n.line-highlight[data-end]:after {\n background-color: hsl(215deg, 15%, 59%); /* #8794A6 */\n border-radius: 999px;\n box-shadow: 0 1px white;\n color: hsl(24deg, 20%, 95%); /* #F5F2F0 */\n content: attr(data-start);\n font: bold 65%/1.5 sans-serif;\n left: 0.6em;\n min-width: 1em;\n padding: 0 0.5em;\n position: absolute;\n text-align: center;\n text-shadow: none;\n top: 0.4em;\n vertical-align: 0.3em;\n}\n\n.line-highlight[data-end]:after {\n bottom: 0.4em;\n content: attr(data-end);\n top: auto;\n}\n\n.window {\n font-family: \"Ubuntu\", sans-serif;\n font-size: 17px;\n width: 600px;\n margin: 75px auto;\n background: #2c3e50;\n height: 350px;\n border-radius: 5px;\n display: relative;\n box-shadow: 10px 10px 10px #888888;\n}\n\n.afterclose {\n color: #34495e;\n display: none;\n text-align: center;\n}\n\n.open {\n color: #fff;\n padding: 15px;\n background: #2ecc71;\n border-radius: 4px;\n border: none;\n}\n\n.bash {\n width: 600px;\n background: #34495e;\n height: 310px;\n border-radius: 5px;\n top: 40px;\n display: absolute;\n color: #fff;\n text-align: left;\n}\n.bash .command::before {\n content: \"user@machine $ : \";\n color: #2ecc71;\n}\n.bash .resulta::before {\n content: \">>\";\n color: #2ecc71;\n}\n\n/* effected by controllers */\n.windowmax {\n width: 100%;\n margin: auto;\n background: #2c3e50;\n height: 1000px;\n border-radius: 5px;\n display: relative;\n}\n\n.windowmin {\n width: 300px;\n height: 45px;\n background: #2c3e50;\n border-radius: 5px;\n bottom: 0;\n position: fixed;\n}\n\n.bashmax {\n display: absolute;\n width: 100%;\n background: #34495e;\n height: 960px;\n border-radius: 5px;\n bottom: 0;\n color: #fff;\n}\n\n/* !--end--! */\n.buttons {\n width: 15px;\n height: 15px;\n border-radius: 50%;\n float: right;\n margin: 13px 4px;\n border: none;\n}\n\n.close {\n background: #e74c3c;\n}\n\n.maximize {\n background: #f1c40f;\n}\n\n.minimize {\n background: #2ecc71;\n}\n\n.result {\n display: none;\n}\n\n.controls {\n height: 40px;\n top: 0;\n}\n\n.title {\n color: #fff;\n font-weight: bold;\n padding: 10px;\n}\n\n.material-tooltip {\n padding: 10px 8px;\n font-size: 1rem;\n z-index: 2000;\n border-radius: 2px;\n color: #fff;\n min-height: 36px;\n line-height: 120%;\n opacity: 0;\n position: absolute;\n text-align: center;\n max-width: calc(100% - 4px);\n overflow: hidden;\n left: 0;\n top: 0;\n pointer-events: none;\n visibility: hidden;\n background-color: #323232;\n}\n\n.backdrop {\n position: absolute;\n opacity: 0;\n height: 7px;\n width: 14px;\n border-radius: 0 0 50% 50%;\n background-color: #323232;\n z-index: -1;\n transform-origin: 50% 0%;\n visibility: hidden;\n}\n\n.shadow-0 {\n box-shadow: none !important;\n}\n\n/* 2dp elevation modified*/\n.shadow-1, nav, .dropdown-content, .card, .card-panel, .btn-floating, .btn, .btn-small, .btn-large, .collapsible {\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2);\n}\n\n.shadow-1-half, .btn-floating:hover, .btn:hover, .btn-small:hover, .btn-large:hover {\n box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.14), 0 1px 7px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -1px rgba(0, 0, 0, 0.2);\n}\n\n/* 6dp elevation modified*/\n.shadow-2 {\n box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.3);\n}\n\n/* 12dp elevation modified*/\n.shadow-3 {\n box-shadow: 0 8px 17px 2px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2);\n}\n\n/* 16dp elevation */\n.shadow-4 {\n box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -7px rgba(0, 0, 0, 0.2);\n}\n\n/* 24dp elevation */\n.shadow-5, .modal {\n box-shadow: 0 24px 38px 3px rgba(0, 0, 0, 0.14), 0 9px 46px 8px rgba(0, 0, 0, 0.12), 0 11px 15px -7px rgba(0, 0, 0, 0.2);\n}\n\n/* 24dp elevation */\n.invert-shadow-5 {\n box-shadow: 38px 0 0 0 rgba(0, 0, 0, 0.14), 46px 0 0 0 rgba(0, 0, 0, 0.12), 15px 0 0 0 rgba(0, 0, 0, 0.2);\n}\n\n.hoverable {\n transition: box-shadow 0.25s;\n}\n.hoverable:hover {\n box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n}\n\n/*!\n * Waves v0.6.0\n * http://fian.my.id/Waves\n *\n * Copyright 2014 Alfiana E. Sibuea and other contributors\n * Released under the MIT license\n * https://github.com/fians/Waves/blob/master/LICENSE\n */\n.waves-effect {\n position: relative;\n cursor: pointer;\n display: inline-block;\n overflow: hidden;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n vertical-align: middle;\n z-index: 1;\n transition: 0.3s ease-out;\n}\n.waves-effect .waves-ripple {\n position: absolute;\n border-radius: 50%;\n width: 20px;\n height: 20px;\n margin-top: -10px;\n margin-left: -10px;\n opacity: 0;\n background: rgba(0, 0, 0, 0.2);\n transition: all 0.7s ease-out;\n transition-property: transform, opacity;\n transform: scale(0);\n pointer-events: none;\n}\n.waves-effect.waves-light .waves-ripple {\n background-color: rgba(255, 255, 255, 0.45);\n}\n.waves-effect.waves-red .waves-ripple {\n background-color: rgba(244, 67, 54, 0.7);\n}\n.waves-effect.waves-yellow .waves-ripple {\n background-color: rgba(255, 235, 59, 0.7);\n}\n.waves-effect.waves-orange .waves-ripple {\n background-color: rgba(255, 152, 0, 0.7);\n}\n.waves-effect.waves-purple .waves-ripple {\n background-color: rgba(156, 39, 176, 0.7);\n}\n.waves-effect.waves-green .waves-ripple {\n background-color: rgba(76, 175, 80, 0.7);\n}\n.waves-effect.waves-teal .waves-ripple {\n background-color: rgba(0, 150, 136, 0.7);\n}\n.waves-effect input[type=button], .waves-effect input[type=reset], .waves-effect input[type=submit] {\n border: 0;\n font-style: normal;\n font-size: inherit;\n text-transform: inherit;\n background: none;\n}\n.waves-effect img {\n position: relative;\n z-index: -1;\n}\n\n.waves-notransition {\n transition: none !important;\n}\n\n.waves-circle {\n transform: translateZ(0);\n -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%);\n}\n\n.waves-input-wrapper {\n border-radius: 0.2em;\n vertical-align: bottom;\n}\n.waves-input-wrapper .waves-button-input {\n position: relative;\n top: 0;\n left: 0;\n z-index: 1;\n}\n\n.waves-circle {\n text-align: center;\n width: 2.5em;\n height: 2.5em;\n line-height: 2.5em;\n border-radius: 50%;\n -webkit-mask-image: none;\n}\n\n.waves-block {\n display: block;\n}\n\n/* Firefox Bug: link not triggered */\n.waves-effect .waves-ripple {\n z-index: -1;\n}\n\n.modal {\n position: fixed;\n left: 0;\n right: 0;\n background-color: #fafafa;\n padding: 0;\n max-height: 70%;\n width: 55%;\n margin: auto;\n overflow-y: auto;\n border-radius: 2px;\n will-change: top, opacity;\n}\n.modal:focus {\n outline: none;\n}\n@media only screen and (max-width : 992px) {\n .modal {\n width: 80%;\n }\n}\n.modal h1, .modal h2, .modal h3, .modal h4 {\n margin-top: 0;\n}\n.modal .modal-content {\n padding: 24px;\n}\n.modal .modal-close {\n cursor: pointer;\n}\n.modal .modal-footer {\n border-radius: 0 0 2px 2px;\n background-color: #fafafa;\n padding: 4px 6px;\n height: 56px;\n width: 100%;\n text-align: right;\n}\n.modal .modal-footer .btn, .modal .modal-footer .btn-small, .modal .modal-footer .btn-large, .modal .modal-footer .btn-flat {\n margin: 6px 0;\n}\n.modal .modal-header {\n border-radius: 2px 2px 0 0;\n background-color: #fafafa;\n padding: 6px 4px;\n height: 56px;\n width: 100%;\n text-align: right;\n}\n.modal .modal-header .btn, .modal .modal-header .btn-small, .modal .modal-header .btn-large, .modal .modal-header .btn-flat {\n margin: 6px 0;\n}\n\n.modal-overlay {\n position: fixed;\n z-index: 999;\n top: -25%;\n left: 0;\n bottom: 0;\n right: 0;\n height: 125%;\n width: 100%;\n background: #000;\n display: none;\n will-change: opacity;\n}\n\n.modal.modal-fixed-footer {\n padding: 0;\n height: 70%;\n}\n.modal.modal-fixed-footer .modal-content {\n position: absolute;\n height: calc(100% - 56px);\n max-height: 100%;\n width: 100%;\n overflow-y: auto;\n}\n.modal.modal-fixed-footer .modal-footer {\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n position: absolute;\n bottom: 0;\n}\n\n.modal.bottom-sheet {\n top: auto;\n bottom: -100%;\n margin: 0;\n width: 100%;\n max-height: 45%;\n border-radius: 0;\n will-change: bottom, opacity;\n}\n\nhtml,\nbody,\n#root {\n margin: 0;\n height: 100%;\n}\n\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\n.noselect {\n -webkit-touch-callout: none; /* iOS Safari */\n -webkit-user-select: none; /* Safari */\n -khtml-user-select: none; /* Konqueror HTML */\n -moz-user-select: none; /* Old versions of Firefox */\n -ms-user-select: none; /* Internet Explorer/Edge */\n user-select: none;\n /* Non-prefixed version, currently\n supported by Chrome, Edge, Opera and Firefox */\n}\n\nul:not(.browser-default) {\n padding-left: 0;\n list-style-type: none;\n}\nul:not(.browser-default) > li {\n list-style-type: none;\n}\n\na {\n color: #039be5;\n text-decoration: none;\n -webkit-tap-highlight-color: transparent;\n}\n\n.w-100 {\n width: 100%;\n}\n\n.right-align {\n text-align: right;\n}\n\n.center-align {\n text-align: center;\n}\n\n.v-center {\n display: flex;\n align-items: center;\n}\n\n.mb1 {\n margin-bottom: 10px;\n}\n\n.collection {\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n border: 1px solid #e0e0e0;\n border-radius: 2px;\n overflow: hidden;\n position: relative;\n}\n.collection .collection-item {\n background-color: #fff;\n line-height: 1.5rem;\n padding: 10px 20px;\n margin: 0;\n border-bottom: 1px solid #e0e0e0;\n}\n.collection .collection-item.hover:hover {\n background-color: #ddd;\n}\n.collection .collection-item.avatar {\n min-height: 84px;\n padding-left: 72px;\n position: relative;\n}\n.collection .collection-item.avatar:not(.circle-clipper) > .circle,\n.collection .collection-item.avatar :not(.circle-clipper) > .circle {\n position: absolute;\n width: 42px;\n height: 42px;\n overflow: hidden;\n left: 15px;\n display: inline-block;\n vertical-align: middle;\n}\n.collection .collection-item.avatar i.circle {\n font-size: 18px;\n line-height: 42px;\n color: #fff;\n background-color: #999;\n text-align: center;\n}\n.collection .collection-item.avatar .title {\n font-size: 16px;\n}\n.collection .collection-item.avatar p {\n margin: 0;\n}\n.collection .collection-item.avatar .secondary-content {\n position: absolute;\n top: 16px;\n right: 16px;\n}\n.collection .collection-item:last-child {\n border-bottom: none;\n}\n.collection .collection-item.active {\n background-color: #26a69a;\n color: #eafaf9;\n}\n.collection .collection-item.active .secondary-content {\n color: #fff;\n}\n.collection a.collection-item {\n display: block;\n transition: 0.25s;\n color: #26a69a;\n}\n.collection a.collection-item:not(.active):hover {\n background-color: #ddd;\n}\n.collection.with-header .collection-header {\n background-color: #fff;\n border-bottom: 1px solid #e0e0e0;\n padding: 10px 20px;\n}\n.collection.with-header .collection-item {\n padding-left: 30px;\n}\n.collection.with-header .collection-item.avatar {\n padding-left: 72px;\n}\n\n.secondary-content {\n float: right;\n color: #26a69a;\n}\n\n.collapsible .collection {\n margin: 0;\n border: none;\n}\n\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 100vh;\n width: 100vw;\n padding: 20px 0 20px 0;\n background-color: rgba(0, 0, 0, 0.5);\n z-index: 999;\n display: flex;\n justify-content: center;\n}\n.modal-overlay .innerform {\n max-width: 650px;\n}\n.modal-overlay .innerform form {\n overflow: hidden;\n}\n\n/*********************\n Media Query Classes\n**********************/\n@media only screen and (max-width : 600px) {\n .hide-on-small-only, .hide-on-small-and-down {\n display: none !important;\n }\n}\n\n@media only screen and (max-width : 992px) {\n .hide-on-med-and-down {\n display: none !important;\n }\n}\n\n@media only screen and (min-width : 601px) {\n .hide-on-med-and-up {\n display: none !important;\n }\n}\n\n@media only screen and (min-width: 600px) and (max-width: 992px) {\n .hide-on-med-only {\n display: none !important;\n }\n}\n\n@media only screen and (min-width : 993px) {\n .hide-on-large-only {\n display: none !important;\n }\n}\n\n@media only screen and (min-width : 1201px) {\n .hide-on-extra-large-only {\n display: none !important;\n }\n}\n\n@media only screen and (min-width : 1201px) {\n .show-on-extra-large {\n display: block !important;\n }\n}\n\n@media only screen and (min-width : 993px) {\n .show-on-large {\n display: block !important;\n }\n}\n\n@media only screen and (min-width: 600px) and (max-width: 992px) {\n .show-on-medium {\n display: block !important;\n }\n}\n\n@media only screen and (max-width : 600px) {\n .show-on-small {\n display: block !important;\n }\n}\n\n@media only screen and (min-width : 601px) {\n .show-on-medium-and-up {\n display: block !important;\n }\n}\n\n@media only screen and (max-width : 992px) {\n .show-on-medium-and-down {\n display: block !important;\n }\n}\n\n@media only screen and (max-width : 600px) {\n .center-on-small-only {\n text-align: center;\n }\n}\n\n/*******************\n Utility Classes\n*******************/\n.hide {\n display: none !important;\n}\n\n.left-align {\n text-align: left;\n}\n\n.right-align {\n text-align: right;\n}\n\n.center, .center-align {\n text-align: center;\n}\n\n.left {\n float: left !important;\n}\n\n.right {\n float: right !important;\n}\n\n.no-select {\n user-select: none;\n}\n\n.circle {\n border-radius: 50%;\n}\n\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n.truncate {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.no-padding {\n padding: 0 !important;\n}\n\nspan.badge {\n min-width: 3rem;\n padding: 0 6px;\n margin-left: 14px;\n text-align: center;\n font-size: 1rem;\n line-height: 22px;\n height: 22px;\n color: #757575;\n float: right;\n box-sizing: border-box;\n}\nspan.badge.new {\n font-weight: 300;\n font-size: 0.8rem;\n color: #fff;\n background-color: #26a69a;\n border-radius: 2px;\n}\nspan.badge.new:after {\n content: \" new\";\n}\nspan.badge[data-badge-caption]::after {\n content: \" \" attr(data-badge-caption);\n}\n\nnav ul a span.badge {\n display: inline-block;\n float: none;\n margin-left: 4px;\n line-height: 22px;\n height: 22px;\n -webkit-font-smoothing: auto;\n}\n\n.collection-item span.badge {\n margin-top: calc(0.75rem - 11px);\n}\n\n.collapsible span.badge {\n margin-left: auto;\n}\n\n.sidenav span.badge {\n margin-top: 11.5px;\n}\n\ntable span.badge {\n display: inline-block;\n float: none;\n margin-left: auto;\n}\n\n.chip {\n display: inline-block;\n height: 32px;\n font-size: 13px;\n font-weight: 500;\n color: rgba(0, 0, 0, 0.6);\n line-height: 32px;\n padding: 0 12px;\n border-radius: 16px;\n background-color: #e4e4e4;\n margin-bottom: 5px;\n margin-right: 5px;\n}\n.chip:focus {\n outline: none;\n background-color: #26a69a;\n color: #fff;\n}\n.chip > img {\n float: left;\n margin: 0 8px 0 -12px;\n height: 32px;\n width: 32px;\n border-radius: 50%;\n}\n.chip .close {\n cursor: pointer;\n float: right;\n font-size: 16px;\n line-height: 32px;\n padding-left: 8px;\n}\n\n.chips {\n border: none;\n border-bottom: 1px solid #9e9e9e;\n box-shadow: none;\n margin: 0 0 8px 0;\n min-height: 45px;\n outline: none;\n transition: all 0.3s;\n}\n.chips.focus {\n border-bottom: 1px solid #26a69a;\n box-shadow: 0 1px 0 0 #26a69a;\n}\n.chips:hover {\n cursor: text;\n}\n.chips .input {\n background: none;\n border: 0;\n color: rgba(0, 0, 0, 0.6);\n display: inline-block;\n font-size: 16px;\n height: 56px;\n line-height: 32px;\n outline: 0;\n margin: 0;\n padding: 0 !important;\n width: 120px !important;\n}\n.chips .input:focus {\n border: 0 !important;\n box-shadow: none !important;\n}\n.chips .autocomplete-content {\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.prefix ~ .chips {\n margin-left: 3rem;\n width: 92%;\n width: calc(100% - 3rem);\n}\n\n.chips:empty ~ label {\n font-size: 0.8rem;\n transform: translateY(-140%);\n}\n\n.collapsible {\n border-top: 1px solid #ddd;\n border-right: 1px solid #ddd;\n border-left: 1px solid #ddd;\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n}\n\n.collapsible-header {\n display: flex;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n line-height: 1.5;\n padding: 1rem;\n background-color: #fff;\n border-bottom: 1px solid #ddd;\n}\n.collapsible-header:focus {\n outline: 0;\n}\n.collapsible-header i {\n width: 2rem;\n font-size: 1.6rem;\n display: inline-block;\n text-align: center;\n margin-right: 1rem;\n}\n\n.keyboard-focused .collapsible-header:focus {\n background-color: #eee;\n}\n\n.collapsible-body {\n display: none;\n border-bottom: 1px solid #ddd;\n box-sizing: border-box;\n padding: 2rem;\n}\n\n.sidenav .collapsible,\n.sidenav.fixed .collapsible {\n border: none;\n box-shadow: none;\n}\n.sidenav .collapsible li,\n.sidenav.fixed .collapsible li {\n padding: 0;\n}\n.sidenav .collapsible-header,\n.sidenav.fixed .collapsible-header {\n background-color: transparent;\n border: none;\n line-height: inherit;\n height: inherit;\n padding: 0 15px;\n}\n.sidenav .collapsible-header:hover,\n.sidenav.fixed .collapsible-header:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.sidenav .collapsible-header i,\n.sidenav.fixed .collapsible-header i {\n line-height: inherit;\n}\n.sidenav .collapsible-body,\n.sidenav.fixed .collapsible-body {\n border: 0;\n background-color: #fff;\n}\n.sidenav .collapsible-body li a,\n.sidenav.fixed .collapsible-body li a {\n padding: 0 22.5px 0 30px;\n}\n\n.collapsible.popout {\n border: none;\n box-shadow: none;\n}\n.collapsible.popout > li {\n box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);\n margin: 0 24px;\n transition: margin 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94);\n}\n.collapsible.popout > li.active {\n box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);\n margin: 16px 0;\n}\n\n.collection {\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n border: 1px solid #e0e0e0;\n border-radius: 2px;\n overflow: hidden;\n position: relative;\n}\n.collection .collection-item {\n background-color: #fff;\n line-height: 1.5rem;\n padding: 10px 20px;\n margin: 0;\n border-bottom: 1px solid #e0e0e0;\n}\n.collection .collection-item.avatar {\n min-height: 84px;\n padding-left: 72px;\n position: relative;\n}\n.collection .collection-item.avatar:not(.circle-clipper) > .circle,\n.collection .collection-item.avatar :not(.circle-clipper) > .circle {\n position: absolute;\n width: 42px;\n height: 42px;\n overflow: hidden;\n left: 15px;\n display: inline-block;\n vertical-align: middle;\n}\n.collection .collection-item.avatar i.circle {\n font-size: 18px;\n line-height: 42px;\n color: #fff;\n background-color: #999;\n text-align: center;\n}\n.collection .collection-item.avatar .title {\n font-size: 16px;\n}\n.collection .collection-item.avatar p {\n margin: 0;\n}\n.collection .collection-item.avatar .secondary-content {\n position: absolute;\n top: 16px;\n right: 16px;\n}\n.collection .collection-item:last-child {\n border-bottom: none;\n}\n.collection .collection-item.active {\n background-color: #26a69a;\n color: #eafaf9;\n}\n.collection .collection-item.active .secondary-content {\n color: #fff;\n}\n.collection a.collection-item {\n display: block;\n transition: 0.25s;\n color: #26a69a;\n}\n.collection a.collection-item:not(.active):hover {\n background-color: #ddd;\n}\n.collection.with-header .collection-header {\n background-color: #fff;\n border-bottom: 1px solid #e0e0e0;\n padding: 10px 20px;\n}\n.collection.with-header .collection-item {\n padding-left: 30px;\n}\n.collection.with-header .collection-item.avatar {\n padding-left: 72px;\n}\n.collection .secondary-content {\n float: right;\n color: #26a69a;\n}\n\nselect:focus {\n outline: 1px solid #c9f3ef;\n}\n\nbutton:focus {\n outline: none;\n background-color: #2ab7a9;\n}\n\nlabel {\n font-size: 0.8rem;\n color: #9e9e9e;\n}\n\n/* Text Inputs + Textarea\n ========================================================================== */\n/* Style Placeholders */\n::placeholder {\n color: #d1d1d1;\n}\n\n/* Text inputs */\ninput:not([type]),\ninput[type=text]:not(.browser-default),\ninput[type=password]:not(.browser-default),\ninput[type=email]:not(.browser-default),\ninput[type=url]:not(.browser-default),\ninput[type=time]:not(.browser-default),\ninput[type=date]:not(.browser-default),\ninput[type=datetime]:not(.browser-default),\ninput[type=datetime-local]:not(.browser-default),\ninput[type=tel]:not(.browser-default),\ninput[type=number]:not(.browser-default),\ninput[type=search]:not(.browser-default),\ntextarea.textarea {\n background-color: transparent;\n border: none;\n border-bottom: 1px solid #9e9e9e;\n border-radius: 0;\n outline: none;\n height: 56px;\n width: 100%;\n font-size: 16px;\n margin: 0 0 8px 0;\n padding: 0;\n box-shadow: none;\n box-sizing: content-box;\n transition: box-shadow 0.3s, border 0.3s;\n}\ninput:not([type]):disabled, input:not([type])[readonly=readonly],\ninput[type=text]:not(.browser-default):disabled,\ninput[type=text]:not(.browser-default)[readonly=readonly],\ninput[type=password]:not(.browser-default):disabled,\ninput[type=password]:not(.browser-default)[readonly=readonly],\ninput[type=email]:not(.browser-default):disabled,\ninput[type=email]:not(.browser-default)[readonly=readonly],\ninput[type=url]:not(.browser-default):disabled,\ninput[type=url]:not(.browser-default)[readonly=readonly],\ninput[type=time]:not(.browser-default):disabled,\ninput[type=time]:not(.browser-default)[readonly=readonly],\ninput[type=date]:not(.browser-default):disabled,\ninput[type=date]:not(.browser-default)[readonly=readonly],\ninput[type=datetime]:not(.browser-default):disabled,\ninput[type=datetime]:not(.browser-default)[readonly=readonly],\ninput[type=datetime-local]:not(.browser-default):disabled,\ninput[type=datetime-local]:not(.browser-default)[readonly=readonly],\ninput[type=tel]:not(.browser-default):disabled,\ninput[type=tel]:not(.browser-default)[readonly=readonly],\ninput[type=number]:not(.browser-default):disabled,\ninput[type=number]:not(.browser-default)[readonly=readonly],\ninput[type=search]:not(.browser-default):disabled,\ninput[type=search]:not(.browser-default)[readonly=readonly],\ntextarea.textarea:disabled,\ntextarea.textarea[readonly=readonly] {\n color: rgba(0, 0, 0, 0.42);\n border-bottom: 1px dotted rgba(0, 0, 0, 0.42);\n}\ninput:not([type]):disabled + label, input:not([type])[readonly=readonly] + label,\ninput[type=text]:not(.browser-default):disabled + label,\ninput[type=text]:not(.browser-default)[readonly=readonly] + label,\ninput[type=password]:not(.browser-default):disabled + label,\ninput[type=password]:not(.browser-default)[readonly=readonly] + label,\ninput[type=email]:not(.browser-default):disabled + label,\ninput[type=email]:not(.browser-default)[readonly=readonly] + label,\ninput[type=url]:not(.browser-default):disabled + label,\ninput[type=url]:not(.browser-default)[readonly=readonly] + label,\ninput[type=time]:not(.browser-default):disabled + label,\ninput[type=time]:not(.browser-default)[readonly=readonly] + label,\ninput[type=date]:not(.browser-default):disabled + label,\ninput[type=date]:not(.browser-default)[readonly=readonly] + label,\ninput[type=datetime]:not(.browser-default):disabled + label,\ninput[type=datetime]:not(.browser-default)[readonly=readonly] + label,\ninput[type=datetime-local]:not(.browser-default):disabled + label,\ninput[type=datetime-local]:not(.browser-default)[readonly=readonly] + label,\ninput[type=tel]:not(.browser-default):disabled + label,\ninput[type=tel]:not(.browser-default)[readonly=readonly] + label,\ninput[type=number]:not(.browser-default):disabled + label,\ninput[type=number]:not(.browser-default)[readonly=readonly] + label,\ninput[type=search]:not(.browser-default):disabled + label,\ninput[type=search]:not(.browser-default)[readonly=readonly] + label,\ntextarea.textarea:disabled + label,\ntextarea.textarea[readonly=readonly] + label {\n color: rgba(0, 0, 0, 0.42);\n}\ninput:not([type]):focus:not([readonly]),\ninput[type=text]:not(.browser-default):focus:not([readonly]),\ninput[type=password]:not(.browser-default):focus:not([readonly]),\ninput[type=email]:not(.browser-default):focus:not([readonly]),\ninput[type=url]:not(.browser-default):focus:not([readonly]),\ninput[type=time]:not(.browser-default):focus:not([readonly]),\ninput[type=date]:not(.browser-default):focus:not([readonly]),\ninput[type=datetime]:not(.browser-default):focus:not([readonly]),\ninput[type=datetime-local]:not(.browser-default):focus:not([readonly]),\ninput[type=tel]:not(.browser-default):focus:not([readonly]),\ninput[type=number]:not(.browser-default):focus:not([readonly]),\ninput[type=search]:not(.browser-default):focus:not([readonly]),\ntextarea.textarea:focus:not([readonly]) {\n border-bottom: 1px solid #26a69a;\n box-shadow: 0 1px 0 0 #26a69a;\n}\ninput:not([type]):focus:not([readonly]) + label,\ninput[type=text]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=password]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=email]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=url]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=time]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=date]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=datetime]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=datetime-local]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=tel]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=number]:not(.browser-default):focus:not([readonly]) + label,\ninput[type=search]:not(.browser-default):focus:not([readonly]) + label,\ntextarea.textarea:focus:not([readonly]) + label {\n color: #26a69a;\n}\ninput:not([type]):focus.valid ~ label,\ninput[type=text]:not(.browser-default):focus.valid ~ label,\ninput[type=password]:not(.browser-default):focus.valid ~ label,\ninput[type=email]:not(.browser-default):focus.valid ~ label,\ninput[type=url]:not(.browser-default):focus.valid ~ label,\ninput[type=time]:not(.browser-default):focus.valid ~ label,\ninput[type=date]:not(.browser-default):focus.valid ~ label,\ninput[type=datetime]:not(.browser-default):focus.valid ~ label,\ninput[type=datetime-local]:not(.browser-default):focus.valid ~ label,\ninput[type=tel]:not(.browser-default):focus.valid ~ label,\ninput[type=number]:not(.browser-default):focus.valid ~ label,\ninput[type=search]:not(.browser-default):focus.valid ~ label,\ntextarea.textarea:focus.valid ~ label {\n color: #4caf50;\n}\ninput:not([type]):focus.invalid ~ label,\ninput[type=text]:not(.browser-default):focus.invalid ~ label,\ninput[type=password]:not(.browser-default):focus.invalid ~ label,\ninput[type=email]:not(.browser-default):focus.invalid ~ label,\ninput[type=url]:not(.browser-default):focus.invalid ~ label,\ninput[type=time]:not(.browser-default):focus.invalid ~ label,\ninput[type=date]:not(.browser-default):focus.invalid ~ label,\ninput[type=datetime]:not(.browser-default):focus.invalid ~ label,\ninput[type=datetime-local]:not(.browser-default):focus.invalid ~ label,\ninput[type=tel]:not(.browser-default):focus.invalid ~ label,\ninput[type=number]:not(.browser-default):focus.invalid ~ label,\ninput[type=search]:not(.browser-default):focus.invalid ~ label,\ntextarea.textarea:focus.invalid ~ label {\n color: #f44336;\n}\ninput:not([type]).validate + label,\ninput[type=text]:not(.browser-default).validate + label,\ninput[type=password]:not(.browser-default).validate + label,\ninput[type=email]:not(.browser-default).validate + label,\ninput[type=url]:not(.browser-default).validate + label,\ninput[type=time]:not(.browser-default).validate + label,\ninput[type=date]:not(.browser-default).validate + label,\ninput[type=datetime]:not(.browser-default).validate + label,\ninput[type=datetime-local]:not(.browser-default).validate + label,\ninput[type=tel]:not(.browser-default).validate + label,\ninput[type=number]:not(.browser-default).validate + label,\ninput[type=search]:not(.browser-default).validate + label,\ntextarea.textarea.validate + label {\n width: 100%;\n}\n/* Validation Sass Placeholders */\n.select-wrapper.valid > input.select-dropdown, input:not([type]).valid, input:not([type]):focus.valid,\ninput[type=text]:not(.browser-default).valid,\ninput[type=text]:not(.browser-default):focus.valid,\ninput[type=password]:not(.browser-default).valid,\ninput[type=password]:not(.browser-default):focus.valid,\ninput[type=email]:not(.browser-default).valid,\ninput[type=email]:not(.browser-default):focus.valid,\ninput[type=url]:not(.browser-default).valid,\ninput[type=url]:not(.browser-default):focus.valid,\ninput[type=time]:not(.browser-default).valid,\ninput[type=time]:not(.browser-default):focus.valid,\ninput[type=date]:not(.browser-default).valid,\ninput[type=date]:not(.browser-default):focus.valid,\ninput[type=datetime]:not(.browser-default).valid,\ninput[type=datetime]:not(.browser-default):focus.valid,\ninput[type=datetime-local]:not(.browser-default).valid,\ninput[type=datetime-local]:not(.browser-default):focus.valid,\ninput[type=tel]:not(.browser-default).valid,\ninput[type=tel]:not(.browser-default):focus.valid,\ninput[type=number]:not(.browser-default).valid,\ninput[type=number]:not(.browser-default):focus.valid,\ninput[type=search]:not(.browser-default).valid,\ninput[type=search]:not(.browser-default):focus.valid,\ntextarea.textarea.valid,\ntextarea.textarea:focus.valid {\n border-bottom: 1px solid #4caf50;\n box-shadow: 0 1px 0 0 #4caf50;\n}\n\n.select-wrapper.invalid > input.select-dropdown, .select-wrapper.invalid > input.select-dropdown:focus, input:not([type]).invalid, input:not([type]):focus.invalid,\ninput[type=text]:not(.browser-default).invalid,\ninput[type=text]:not(.browser-default):focus.invalid,\ninput[type=password]:not(.browser-default).invalid,\ninput[type=password]:not(.browser-default):focus.invalid,\ninput[type=email]:not(.browser-default).invalid,\ninput[type=email]:not(.browser-default):focus.invalid,\ninput[type=url]:not(.browser-default).invalid,\ninput[type=url]:not(.browser-default):focus.invalid,\ninput[type=time]:not(.browser-default).invalid,\ninput[type=time]:not(.browser-default):focus.invalid,\ninput[type=date]:not(.browser-default).invalid,\ninput[type=date]:not(.browser-default):focus.invalid,\ninput[type=datetime]:not(.browser-default).invalid,\ninput[type=datetime]:not(.browser-default):focus.invalid,\ninput[type=datetime-local]:not(.browser-default).invalid,\ninput[type=datetime-local]:not(.browser-default):focus.invalid,\ninput[type=tel]:not(.browser-default).invalid,\ninput[type=tel]:not(.browser-default):focus.invalid,\ninput[type=number]:not(.browser-default).invalid,\ninput[type=number]:not(.browser-default):focus.invalid,\ninput[type=search]:not(.browser-default).invalid,\ninput[type=search]:not(.browser-default):focus.invalid,\ntextarea.textarea.invalid,\ntextarea.textarea:focus.invalid {\n border-bottom: 1px solid #f44336;\n box-shadow: 0 1px 0 0 #f44336;\n}\n\n.select-wrapper.valid .helper-text[data-success], .select-wrapper.invalid ~ .helper-text[data-error], input:not([type]).valid ~ .helper-text[data-success], input:not([type]):focus.valid ~ .helper-text[data-success], input:not([type]).invalid ~ .helper-text[data-error], input:not([type]):focus.invalid ~ .helper-text[data-error],\ninput[type=text]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=text]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=text]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=text]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=password]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=password]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=password]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=password]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=email]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=email]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=email]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=email]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=url]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=url]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=url]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=url]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=time]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=time]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=time]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=time]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=date]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=date]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=date]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=date]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=datetime]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=datetime]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=datetime]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=datetime]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=datetime-local]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=datetime-local]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=datetime-local]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=datetime-local]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=tel]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=tel]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=tel]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=tel]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=number]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=number]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=number]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=number]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ninput[type=search]:not(.browser-default).valid ~ .helper-text[data-success],\ninput[type=search]:not(.browser-default):focus.valid ~ .helper-text[data-success],\ninput[type=search]:not(.browser-default).invalid ~ .helper-text[data-error],\ninput[type=search]:not(.browser-default):focus.invalid ~ .helper-text[data-error],\ntextarea.textarea.valid ~ .helper-text[data-success],\ntextarea.textarea:focus.valid ~ .helper-text[data-success],\ntextarea.textarea.invalid ~ .helper-text[data-error],\ntextarea.textarea:focus.invalid ~ .helper-text[data-error] {\n color: transparent;\n user-select: none;\n pointer-events: none;\n}\n\n.select-wrapper.valid ~ .helper-text:after, input:not([type]).valid ~ .helper-text:after, input:not([type]):focus.valid ~ .helper-text:after,\ninput[type=text]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=text]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=password]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=password]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=email]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=email]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=url]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=url]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=time]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=time]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=date]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=date]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=datetime]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=datetime]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=datetime-local]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=datetime-local]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=tel]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=tel]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=number]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=number]:not(.browser-default):focus.valid ~ .helper-text:after,\ninput[type=search]:not(.browser-default).valid ~ .helper-text:after,\ninput[type=search]:not(.browser-default):focus.valid ~ .helper-text:after,\ntextarea.textarea.valid ~ .helper-text:after,\ntextarea.textarea:focus.valid ~ .helper-text:after {\n content: attr(data-success);\n color: #4caf50;\n}\n\n.select-wrapper.invalid ~ .helper-text:after, input:not([type]).invalid ~ .helper-text:after, input:not([type]):focus.invalid ~ .helper-text:after,\ninput[type=text]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=text]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=password]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=password]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=email]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=email]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=url]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=url]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=time]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=time]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=date]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=date]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=datetime]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=datetime]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=datetime-local]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=datetime-local]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=tel]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=tel]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=number]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=number]:not(.browser-default):focus.invalid ~ .helper-text:after,\ninput[type=search]:not(.browser-default).invalid ~ .helper-text:after,\ninput[type=search]:not(.browser-default):focus.invalid ~ .helper-text:after,\ntextarea.textarea.invalid ~ .helper-text:after,\ntextarea.textarea:focus.invalid ~ .helper-text:after {\n content: attr(data-error);\n color: #f44336;\n}\n\n.select-wrapper + label:after, input:not([type]) + label:after,\ninput[type=text]:not(.browser-default) + label:after,\ninput[type=password]:not(.browser-default) + label:after,\ninput[type=email]:not(.browser-default) + label:after,\ninput[type=url]:not(.browser-default) + label:after,\ninput[type=time]:not(.browser-default) + label:after,\ninput[type=date]:not(.browser-default) + label:after,\ninput[type=datetime]:not(.browser-default) + label:after,\ninput[type=datetime-local]:not(.browser-default) + label:after,\ninput[type=tel]:not(.browser-default) + label:after,\ninput[type=number]:not(.browser-default) + label:after,\ninput[type=search]:not(.browser-default) + label:after,\ntextarea.textarea + label:after {\n display: block;\n content: \"\";\n position: absolute;\n top: 100%;\n left: 0;\n opacity: 0;\n transition: 0.2s opacity ease-out, 0.2s color ease-out;\n}\n\n.input-field {\n position: relative;\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\n.input-field.inline {\n display: inline-block;\n vertical-align: middle;\n margin-left: 5px;\n}\n.input-field.inline input,\n.input-field.inline .select-dropdown {\n margin-bottom: 1rem;\n}\n.input-field.col label {\n left: 0.5rem;\n}\n.input-field.col .prefix ~ label,\n.input-field.col .prefix ~ .validate ~ label {\n width: calc(100% - 3rem - 1rem);\n}\n.input-field > label {\n color: #9e9e9e;\n position: absolute;\n top: 0;\n left: 0;\n font-size: 1rem;\n cursor: text;\n transition: transform 0.2s ease-out, color 0.2s ease-out;\n transform-origin: 0% 100%;\n text-align: initial;\n transform: translateY(12px);\n}\n.input-field > label:not(.label-icon).active {\n transform: translateY(-14px) scale(0.8);\n transform-origin: 0 0;\n}\n.input-field > input[type]:-webkit-autofill:not(.browser-default):not([type=search]) + label, .input-field > input[type=date]:not(.browser-default) + label, .input-field > input[type=time]:not(.browser-default) + label {\n transform: translateY(-14px) scale(0.8);\n transform-origin: 0 0;\n}\n.input-field .helper-text {\n position: relative;\n min-height: 18px;\n display: block;\n font-size: 12px;\n color: rgba(0, 0, 0, 0.54);\n}\n.input-field .helper-text::after {\n opacity: 1;\n position: absolute;\n top: 0;\n left: 0;\n}\n.input-field .prefix {\n position: absolute;\n width: 56px;\n font-size: 2rem;\n transition: color 0.2s;\n}\n.input-field .prefix.active {\n color: #26a69a;\n}\n.input-field .prefix ~ input,\n.input-field .prefix ~ textarea,\n.input-field .prefix ~ label,\n.input-field .prefix ~ .validate ~ label,\n.input-field .prefix ~ .helper-text,\n.input-field .prefix ~ .autocomplete-content {\n margin-left: 3rem;\n width: 92%;\n width: calc(100% - 3rem);\n}\n.input-field .prefix ~ label {\n margin-left: 3rem;\n}\n@media only screen and (max-width : 992px) {\n .input-field .prefix ~ input {\n width: 86%;\n width: calc(100% - 3rem);\n }\n}\n@media only screen and (max-width : 600px) {\n .input-field .prefix ~ input {\n width: 80%;\n width: calc(100% - 3rem);\n }\n}\n\n/* Search Field */\n.input-field input[type=search] {\n display: block;\n line-height: inherit;\n transition: 0.3s background-color;\n}\n.nav-wrapper .input-field input[type=search] {\n height: inherit;\n padding-left: 4rem;\n width: calc(100% - 4rem);\n border: 0;\n box-shadow: none;\n}\n.input-field input[type=search]:focus:not(.browser-default) {\n background-color: #fff;\n border: 0;\n box-shadow: none;\n color: #444;\n}\n.input-field input[type=search]:focus:not(.browser-default) + label i, .input-field input[type=search]:focus:not(.browser-default) ~ .mdi-navigation-close, .input-field input[type=search]:focus:not(.browser-default) ~ .material-icons {\n color: #444;\n}\n.input-field input[type=search] + .label-icon {\n transform: none;\n left: 1rem;\n}\n.input-field input[type=search] ~ .mdi-navigation-close, .input-field input[type=search] ~ .material-icons {\n position: absolute;\n top: 0;\n right: 1rem;\n color: transparent;\n cursor: pointer;\n font-size: 2rem;\n transition: 0.3s color;\n}\n\n/* Textarea */\ntextarea {\n width: 100%;\n height: 56px;\n background-color: transparent;\n}\ntextarea.textarea {\n line-height: normal;\n overflow-y: hidden; /* prevents scroll bar flash */\n padding: 0.8rem 0 0.8rem 0; /* prevents text jump on Enter keypress */\n resize: none;\n min-height: 56px;\n box-sizing: border-box;\n}\n\n.hiddendiv {\n visibility: hidden;\n white-space: pre-wrap;\n word-wrap: break-word;\n overflow-wrap: break-word; /* future version of deprecated 'word-wrap' */\n padding-top: 1.2rem; /* prevents text jump on Enter keypress */\n position: absolute;\n top: 0;\n z-index: -1;\n}\n\n/* Autocomplete */\n.autocomplete-content li .highlight {\n color: #444;\n}\n.autocomplete-content li img {\n margin: 5px 15px;\n}\n\n/* Character Counter */\n.character-counter {\n min-height: 18px;\n}\n\n/* Radio Buttons\n ========================================================================== */\n[type=radio]:not(:checked),\n[type=radio]:checked {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n\n[type=radio]:not(:checked) + span,\n[type=radio]:checked + span {\n position: relative;\n padding-left: 35px;\n cursor: pointer;\n display: inline-block;\n height: 25px;\n line-height: 25px;\n font-size: 1rem;\n transition: 0.28s ease;\n user-select: none;\n}\n\n[type=radio] + span:before,\n[type=radio] + span:after {\n content: \"\";\n position: absolute;\n left: 0;\n top: 0;\n margin: 4px;\n width: 16px;\n height: 16px;\n z-index: 0;\n transition: 0.28s ease;\n}\n\n/* Unchecked styles */\n[type=radio]:not(:checked) + span:before,\n[type=radio]:not(:checked) + span:after,\n[type=radio]:checked + span:before,\n[type=radio]:checked + span:after,\n[type=radio].with-gap:checked + span:before,\n[type=radio].with-gap:checked + span:after {\n border-radius: 50%;\n}\n\n[type=radio]:not(:checked) + span:before,\n[type=radio]:not(:checked) + span:after {\n border: 2px solid #5a5a5a;\n}\n\n[type=radio]:not(:checked) + span:after {\n transform: scale(0);\n}\n\n/* Checked styles */\n[type=radio]:checked + span:before {\n border: 2px solid transparent;\n}\n\n[type=radio]:checked + span:after,\n[type=radio].with-gap:checked + span:before,\n[type=radio].with-gap:checked + span:after {\n border: 2px solid #26a69a;\n}\n\n[type=radio]:checked + span:after,\n[type=radio].with-gap:checked + span:after {\n background-color: #26a69a;\n}\n\n[type=radio]:checked + span:after {\n transform: scale(1.02);\n}\n\n/* Radio With gap */\n[type=radio].with-gap:checked + span:after {\n transform: scale(0.5);\n}\n\n/* Focused styles */\n[type=radio].tabbed:focus + span:before {\n box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1);\n}\n\n/* Disabled Radio With gap */\n[type=radio].with-gap:disabled:checked + span:before {\n border: 2px solid rgba(0, 0, 0, 0.42);\n}\n\n[type=radio].with-gap:disabled:checked + span:after {\n border: none;\n background-color: rgba(0, 0, 0, 0.42);\n}\n\n/* Disabled style */\n[type=radio]:disabled:not(:checked) + span:before,\n[type=radio]:disabled:checked + span:before {\n background-color: transparent;\n border-color: rgba(0, 0, 0, 0.42);\n}\n\n[type=radio]:disabled + span {\n color: rgba(0, 0, 0, 0.42);\n}\n\n[type=radio]:disabled:not(:checked) + span:before {\n border-color: rgba(0, 0, 0, 0.42);\n}\n\n[type=radio]:disabled:checked + span:after {\n background-color: rgba(0, 0, 0, 0.42);\n border-color: #949494;\n}\n\n/* Checkboxes\n ========================================================================== */\n/* Remove default checkbox */\n[type=checkbox]:not(:checked),\n[type=checkbox]:checked {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n\n[type=checkbox] {\n /* checkbox aspect */\n}\n[type=checkbox] + span:not(.lever) {\n position: relative;\n padding-left: 35px;\n cursor: pointer;\n display: inline-block;\n height: 25px;\n line-height: 25px;\n font-size: 1rem;\n user-select: none;\n}\n[type=checkbox] + span:not(.lever):before, [type=checkbox]:not(.filled-in) + span:not(.lever):after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n width: 18px;\n height: 18px;\n z-index: 0;\n border: 2px solid #5a5a5a;\n border-radius: 1px;\n margin-top: 3px;\n transition: 0.2s;\n}\n[type=checkbox]:not(.filled-in) + span:not(.lever):after {\n border: 0;\n transform: scale(0);\n}\n[type=checkbox]:not(:checked):disabled + span:not(.lever):before {\n border: none;\n background-color: rgba(0, 0, 0, 0.42);\n}\n[type=checkbox].tabbed:focus + span:not(.lever):after {\n transform: scale(1);\n border: 0;\n border-radius: 50%;\n box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1);\n background-color: rgba(0, 0, 0, 0.1);\n}\n\n[type=checkbox]:checked + span:not(.lever):before {\n top: -4px;\n left: -5px;\n width: 12px;\n height: 22px;\n border-top: 2px solid transparent;\n border-left: 2px solid transparent;\n border-right: 2px solid #26a69a;\n border-bottom: 2px solid #26a69a;\n transform: rotate(40deg);\n backface-visibility: hidden;\n transform-origin: 100% 100%;\n}\n[type=checkbox]:checked:disabled + span:before {\n border-right: 2px solid rgba(0, 0, 0, 0.42);\n border-bottom: 2px solid rgba(0, 0, 0, 0.42);\n}\n\n/* Indeterminate checkbox */\n[type=checkbox]:indeterminate + span:not(.lever):before {\n top: -11px;\n left: -12px;\n width: 10px;\n height: 22px;\n border-top: none;\n border-left: none;\n border-right: 2px solid #26a69a;\n border-bottom: none;\n transform: rotate(90deg);\n backface-visibility: hidden;\n transform-origin: 100% 100%;\n}\n[type=checkbox]:indeterminate:disabled + span:not(.lever):before {\n border-right: 2px solid rgba(0, 0, 0, 0.42);\n background-color: transparent;\n}\n\n[type=checkbox].filled-in + span:not(.lever):after {\n border-radius: 2px;\n}\n[type=checkbox].filled-in + span:not(.lever):before,\n[type=checkbox].filled-in + span:not(.lever):after {\n content: \"\";\n left: 0;\n position: absolute;\n /* .1s delay is for check animation */\n transition: border 0.25s, background-color 0.25s, width 0.2s 0.1s, height 0.2s 0.1s, top 0.2s 0.1s, left 0.2s 0.1s;\n z-index: 1;\n}\n[type=checkbox].filled-in:not(:checked) + span:not(.lever):before {\n width: 0;\n height: 0;\n border: 3px solid transparent;\n left: 6px;\n top: 10px;\n transform: rotateZ(37deg);\n transform-origin: 100% 100%;\n}\n[type=checkbox].filled-in:not(:checked) + span:not(.lever):after {\n height: 20px;\n width: 20px;\n background-color: transparent;\n border: 2px solid #5a5a5a;\n top: 0px;\n z-index: 0;\n}\n[type=checkbox].filled-in:checked + span:not(.lever):before {\n top: 0;\n left: 1px;\n width: 8px;\n height: 13px;\n border-top: 2px solid transparent;\n border-left: 2px solid transparent;\n border-right: 2px solid #fff;\n border-bottom: 2px solid #fff;\n transform: rotateZ(37deg);\n transform-origin: 100% 100%;\n}\n[type=checkbox].filled-in:checked + span:not(.lever):after {\n top: 0;\n width: 20px;\n height: 20px;\n border: 2px solid #26a69a;\n background-color: #26a69a;\n z-index: 0;\n}\n[type=checkbox].filled-in.tabbed:focus + span:not(.lever):after {\n border-radius: 2px;\n border-color: #5a5a5a;\n background-color: rgba(0, 0, 0, 0.1);\n}\n[type=checkbox].filled-in.tabbed:checked:focus + span:not(.lever):after {\n border-radius: 2px;\n background-color: #26a69a;\n border-color: #26a69a;\n}\n[type=checkbox].filled-in:disabled:not(:checked) + span:not(.lever):before {\n background-color: transparent;\n border: 2px solid transparent;\n}\n[type=checkbox].filled-in:disabled:not(:checked) + span:not(.lever):after {\n border-color: transparent;\n background-color: #949494;\n}\n[type=checkbox].filled-in:disabled:checked + span:not(.lever):before {\n background-color: transparent;\n}\n[type=checkbox].filled-in:disabled:checked + span:not(.lever):after {\n background-color: #949494;\n border-color: #949494;\n}\n\n/* Switch\n ========================================================================== */\n.switch,\n.switch * {\n -webkit-tap-highlight-color: transparent;\n user-select: none;\n}\n\n.switch label {\n cursor: pointer;\n}\n\n.switch label input[type=checkbox] {\n opacity: 0;\n width: 0;\n height: 0;\n}\n.switch label input[type=checkbox]:checked + .lever {\n background-color: #84c7c1;\n}\n.switch label input[type=checkbox]:checked + .lever:before, .switch label input[type=checkbox]:checked + .lever:after {\n left: 18px;\n}\n.switch label input[type=checkbox]:checked + .lever:after {\n background-color: #26a69a;\n}\n\n.switch label .lever {\n content: \"\";\n display: inline-block;\n position: relative;\n width: 36px;\n height: 14px;\n background-color: rgba(0, 0, 0, 0.38);\n border-radius: 15px;\n transition: background 0.3s ease;\n vertical-align: middle;\n margin: 0 16px;\n}\n.switch label .lever:before, .switch label .lever:after {\n content: \"\";\n position: absolute;\n display: inline-block;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n left: 0;\n top: -3px;\n transition: left 0.3s ease, background 0.3s ease, box-shadow 0.1s ease, transform 0.1s ease;\n}\n.switch label .lever:before {\n background-color: rgba(38, 166, 154, 0.15);\n}\n.switch label .lever:after {\n background-color: #F1F1F1;\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n\ninput[type=checkbox]:checked:not(:disabled) ~ .lever:active::before,\ninput[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::before {\n transform: scale(2.4);\n background-color: rgba(38, 166, 154, 0.15);\n}\n\ninput[type=checkbox]:not(:disabled) ~ .lever:active:before,\ninput[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::before {\n transform: scale(2.4);\n background-color: rgba(0, 0, 0, 0.08);\n}\n\n.switch input[type=checkbox][disabled] + .lever {\n cursor: default;\n background-color: rgba(0, 0, 0, 0.12);\n}\n\n.switch label input[type=checkbox][disabled] + .lever:after,\n.switch label input[type=checkbox][disabled]:checked + .lever:after {\n background-color: #949494;\n}\n\n/* Select Field\n ========================================================================== */\nselect {\n display: none;\n}\n\nselect.browser-default {\n display: block;\n}\n\nselect {\n background-color: rgba(255, 255, 255, 0.9);\n width: 100%;\n padding: 5px;\n border: 1px solid #f2f2f2;\n border-radius: 2px;\n height: 56px;\n}\n\n.select-label {\n position: absolute;\n}\n\n.select-wrapper {\n position: relative;\n}\n.select-wrapper.valid + label, .select-wrapper.invalid + label {\n width: 100%;\n pointer-events: none;\n}\n.select-wrapper input.select-dropdown {\n position: relative;\n cursor: pointer;\n background-color: transparent;\n border: none;\n border-bottom: 1px solid #9e9e9e;\n outline: none;\n height: 56px;\n line-height: 56px;\n width: 100%;\n font-size: 16px;\n margin: 0 0 8px 0;\n padding: 0;\n display: block;\n user-select: none;\n z-index: 1;\n}\n.select-wrapper input.select-dropdown:focus {\n border-bottom: 1px solid #26a69a;\n}\n.select-wrapper .caret {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n margin: auto 0;\n z-index: 0;\n fill: rgba(0, 0, 0, 0.87);\n}\n.select-wrapper + label {\n position: absolute;\n top: -26px;\n font-size: 0.8rem;\n}\n\nselect:disabled {\n color: rgba(0, 0, 0, 0.42);\n}\n\n.select-wrapper.disabled + label {\n color: rgba(0, 0, 0, 0.42);\n}\n.select-wrapper.disabled .caret {\n fill: rgba(0, 0, 0, 0.42);\n}\n\n.select-wrapper input.select-dropdown:disabled {\n color: rgba(0, 0, 0, 0.42);\n cursor: default;\n user-select: none;\n}\n\n.select-wrapper i {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.select-dropdown li.disabled,\n.select-dropdown li.disabled > span,\n.select-dropdown li.optgroup {\n color: rgba(0, 0, 0, 0.3);\n background-color: transparent;\n}\n\nbody.keyboard-focused .select-dropdown.dropdown-content li:focus {\n background-color: rgba(0, 0, 0, 0.08);\n}\n\n.select-dropdown.dropdown-content li:hover {\n background-color: rgba(0, 0, 0, 0.08);\n}\n.select-dropdown.dropdown-content li.selected {\n background-color: rgba(0, 0, 0, 0.03);\n}\n\n.prefix ~ .select-wrapper {\n margin-left: 3rem;\n width: 92%;\n width: calc(100% - 3rem);\n}\n\n.prefix ~ label {\n margin-left: 3rem;\n}\n\n.select-dropdown li img {\n margin: 5px 15px;\n float: right;\n}\n\n.select-dropdown li.optgroup.selected > span {\n color: rgba(0, 0, 0, 0.7);\n}\n.select-dropdown li.optgroup > span {\n color: rgba(0, 0, 0, 0.4);\n}\n.select-dropdown li.optgroup ~ li.optgroup-option {\n padding-left: 1rem;\n}\n\n/* File Input\n ========================================================================== */\n.file-field {\n position: relative;\n}\n.file-field .file-path-wrapper {\n overflow: hidden;\n padding-left: 10px;\n}\n.file-field input.file-path {\n width: 100%;\n}\n.file-field .btn, .file-field .btn-small, .file-field .btn-large {\n float: left;\n height: 56px;\n line-height: 56px;\n}\n.file-field span {\n cursor: pointer;\n}\n.file-field input[type=file] {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n margin: 0;\n padding: 0;\n font-size: 20px;\n cursor: pointer;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.file-field input[type=file]::-webkit-file-upload-button {\n display: none;\n}\n\n/* Range\n ========================================================================== */\n.range-field {\n position: relative;\n}\n\ninput[type=range],\ninput[type=range] + .thumb {\n cursor: pointer;\n}\n\ninput[type=range] {\n position: relative;\n background-color: transparent;\n border: none;\n outline: none;\n width: 100%;\n margin: 15px 0;\n padding: 0;\n}\ninput[type=range]:focus {\n outline: none;\n}\n\ninput[type=range] + .thumb {\n position: absolute;\n top: 10px;\n left: 0;\n border: none;\n height: 0;\n width: 0;\n border-radius: 50%;\n background-color: #26a69a;\n margin-left: 7px;\n transform-origin: 50% 50%;\n transform: rotate(-45deg);\n}\ninput[type=range] + .thumb .value {\n display: block;\n width: 30px;\n text-align: center;\n color: #26a69a;\n font-size: 0;\n transform: rotate(45deg);\n}\ninput[type=range] + .thumb.active {\n border-radius: 50% 50% 50% 0;\n}\ninput[type=range] + .thumb.active .value {\n color: #fff;\n margin-left: -1px;\n margin-top: 8px;\n font-size: 10px;\n}\n\ninput[type=range] {\n -webkit-appearance: none;\n}\n\ninput[type=range]::-webkit-slider-runnable-track {\n height: 3px;\n background: #c2c0c2;\n border: none;\n}\n\ninput[type=range]::-webkit-slider-thumb {\n border: none;\n height: 14px;\n width: 14px;\n border-radius: 50%;\n background: #26a69a;\n transition: box-shadow 0.3s;\n -webkit-appearance: none;\n background-color: #26a69a;\n transform-origin: 50% 50%;\n margin: -5px 0 0 0;\n}\n\n.keyboard-focused input[type=range]:focus:not(.active)::-webkit-slider-thumb {\n box-shadow: 0 0 0 10px rgba(38, 166, 154, 0.26);\n}\n\ninput[type=range] {\n /* fix for FF unable to apply focus style bug */\n border: 1px solid white;\n /*required for proper track sizing in FF*/\n}\n\ninput[type=range]::-moz-range-track {\n height: 3px;\n background: #c2c0c2;\n border: none;\n}\n\ninput[type=range]::-moz-focus-inner {\n border: 0;\n}\n\ninput[type=range]::-moz-range-thumb {\n border: none;\n height: 14px;\n width: 14px;\n border-radius: 50%;\n background: #26a69a;\n transition: box-shadow 0.3s;\n margin-top: -5px;\n}\n\ninput[type=range]:-moz-focusring {\n outline: 1px solid #fff;\n outline-offset: -1px;\n}\n\n.keyboard-focused input[type=range]:focus:not(.active)::-moz-range-thumb {\n box-shadow: 0 0 0 10px rgba(38, 166, 154, 0.26);\n}\n\ninput[type=range]::-ms-track {\n height: 3px;\n background: transparent;\n border-color: transparent;\n border-width: 6px 0;\n /*remove default tick marks*/\n color: transparent;\n}\n\ninput[type=range]::-ms-fill-lower {\n background: #777;\n}\n\ninput[type=range]::-ms-fill-upper {\n background: #ddd;\n}\n\ninput[type=range]::-ms-thumb {\n border: none;\n height: 14px;\n width: 14px;\n border-radius: 50%;\n background: #26a69a;\n transition: box-shadow 0.3s;\n}\n\n.keyboard-focused input[type=range]:focus:not(.active)::-ms-thumb {\n box-shadow: 0 0 0 10px rgba(38, 166, 154, 0.26);\n}\n\n.parallax {\n /* Set a specific height */\n min-height: 500px;\n /* Create the parallax scrolling effect */\n background-attachment: fixed;\n background-position: center;\n background-repeat: no-repeat;\n background-size: cover;\n}\n\n* {\n box-sizing: border-box;\n}\n\nbody {\n font-family: sans-serif;\n}\n\n.scene {\n width: 200px;\n height: 200px;\n border: 1px solid #CCC;\n margin: 80px;\n perspective: 400px;\n}\n\n.cube {\n width: 200px;\n height: 200px;\n position: relative;\n transform-style: preserve-3d;\n transform: translateZ(-400px);\n transition: transform 1s;\n}\n\n.cube.show-front {\n transform: translateZ(-10px) rotateY(0deg);\n}\n\n.cube.show-right {\n transform: translateZ(-10px) rotateY(-90deg);\n}\n\n.cube.show-back {\n transform: translateZ(-10px) rotateY(-180deg);\n}\n\n.cube.show-left {\n transform: translateZ(-10px) rotateY(90deg);\n}\n\n.cube.show-top {\n transform: translateZ(-10px) rotateX(-90deg);\n}\n\n.cube.show-bottom {\n transform: translateZ(-10px) rotateX(90deg);\n}\n\n.cube__face {\n position: absolute;\n width: 200px;\n height: 200px;\n border: 2px solid black;\n line-height: 200px;\n font-size: 40px;\n font-weight: bold;\n color: white;\n text-align: center;\n}\n\n.cube__face--front {\n background: hsla(0deg, 100%, 50%, 0.7);\n}\n\n.cube__face--right {\n background: hsla(60deg, 100%, 50%, 0.7);\n}\n\n.cube__face--back {\n background: hsla(120deg, 100%, 50%, 0.7);\n}\n\n.cube__face--left {\n background: hsla(180deg, 100%, 50%, 0.7);\n}\n\n.cube__face--top {\n background: hsla(240deg, 100%, 50%, 0.7);\n}\n\n.cube__face--bottom {\n background: hsla(300deg, 100%, 50%, 0.7);\n}\n\n.cube__face--front {\n transform: rotateY(0deg) translateZ(100px);\n}\n\n.cube__face--right {\n transform: rotateY(90deg) translateZ(100px);\n}\n\n.cube__face--back {\n transform: rotateY(180deg) translateZ(100px);\n}\n\n.cube__face--left {\n transform: rotateY(-90deg) translateZ(100px);\n}\n\n.cube__face--top {\n transform: rotateX(90deg) translateZ(100px);\n}\n\n.cube__face--bottom {\n transform: rotateX(-90deg) translateZ(100px);\n}\n\nlabel {\n margin-right: 10px;\n}\n\n.container {\n margin: 0 auto;\n max-width: 1280px;\n width: 90%;\n}\n\n@media only screen and (min-width : 601px) {\n .container {\n width: 85%;\n }\n}\n@media only screen and (min-width : 993px) {\n .container {\n width: 70%;\n }\n}\n.col .row {\n margin-left: -0.5rem;\n margin-right: -0.5rem;\n}\n\n.section {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.section.no-pad {\n padding: 0;\n}\n.section.no-pad-bot {\n padding-bottom: 0;\n}\n.section.no-pad-top {\n padding-top: 0;\n}\n\n.row {\n margin-left: auto;\n margin-right: auto;\n margin-bottom: 20px;\n}\n.row:after {\n content: \"\";\n display: table;\n clear: both;\n}\n.row .col {\n float: left;\n box-sizing: border-box;\n padding: 0 0.5rem;\n min-height: 1px;\n}\n.row .col[class*=push-], .row .col[class*=pull-] {\n position: relative;\n}\n.row .col.s1 {\n width: 8.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s2 {\n width: 16.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s3 {\n width: 25%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s4 {\n width: 33.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s5 {\n width: 41.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s6 {\n width: 50%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s7 {\n width: 58.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s8 {\n width: 66.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s9 {\n width: 75%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s10 {\n width: 83.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s11 {\n width: 91.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.s12 {\n width: 100%;\n margin-left: auto;\n left: auto;\n right: auto;\n}\n.row .col.offset-s1 {\n margin-left: 8.3333333333%;\n}\n.row .col.pull-s1 {\n right: 8.3333333333%;\n}\n.row .col.push-s1 {\n left: 8.3333333333%;\n}\n.row .col.offset-s2 {\n margin-left: 16.6666666667%;\n}\n.row .col.pull-s2 {\n right: 16.6666666667%;\n}\n.row .col.push-s2 {\n left: 16.6666666667%;\n}\n.row .col.offset-s3 {\n margin-left: 25%;\n}\n.row .col.pull-s3 {\n right: 25%;\n}\n.row .col.push-s3 {\n left: 25%;\n}\n.row .col.offset-s4 {\n margin-left: 33.3333333333%;\n}\n.row .col.pull-s4 {\n right: 33.3333333333%;\n}\n.row .col.push-s4 {\n left: 33.3333333333%;\n}\n.row .col.offset-s5 {\n margin-left: 41.6666666667%;\n}\n.row .col.pull-s5 {\n right: 41.6666666667%;\n}\n.row .col.push-s5 {\n left: 41.6666666667%;\n}\n.row .col.offset-s6 {\n margin-left: 50%;\n}\n.row .col.pull-s6 {\n right: 50%;\n}\n.row .col.push-s6 {\n left: 50%;\n}\n.row .col.offset-s7 {\n margin-left: 58.3333333333%;\n}\n.row .col.pull-s7 {\n right: 58.3333333333%;\n}\n.row .col.push-s7 {\n left: 58.3333333333%;\n}\n.row .col.offset-s8 {\n margin-left: 66.6666666667%;\n}\n.row .col.pull-s8 {\n right: 66.6666666667%;\n}\n.row .col.push-s8 {\n left: 66.6666666667%;\n}\n.row .col.offset-s9 {\n margin-left: 75%;\n}\n.row .col.pull-s9 {\n right: 75%;\n}\n.row .col.push-s9 {\n left: 75%;\n}\n.row .col.offset-s10 {\n margin-left: 83.3333333333%;\n}\n.row .col.pull-s10 {\n right: 83.3333333333%;\n}\n.row .col.push-s10 {\n left: 83.3333333333%;\n}\n.row .col.offset-s11 {\n margin-left: 91.6666666667%;\n}\n.row .col.pull-s11 {\n right: 91.6666666667%;\n}\n.row .col.push-s11 {\n left: 91.6666666667%;\n}\n.row .col.offset-s12 {\n margin-left: 100%;\n}\n.row .col.pull-s12 {\n right: 100%;\n}\n.row .col.push-s12 {\n left: 100%;\n}\n@media only screen and (min-width : 601px) {\n .row .col.m1 {\n width: 8.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m2 {\n width: 16.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m3 {\n width: 25%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m4 {\n width: 33.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m5 {\n width: 41.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m6 {\n width: 50%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m7 {\n width: 58.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m8 {\n width: 66.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m9 {\n width: 75%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m10 {\n width: 83.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m11 {\n width: 91.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.m12 {\n width: 100%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.offset-m1 {\n margin-left: 8.3333333333%;\n }\n .row .col.pull-m1 {\n right: 8.3333333333%;\n }\n .row .col.push-m1 {\n left: 8.3333333333%;\n }\n .row .col.offset-m2 {\n margin-left: 16.6666666667%;\n }\n .row .col.pull-m2 {\n right: 16.6666666667%;\n }\n .row .col.push-m2 {\n left: 16.6666666667%;\n }\n .row .col.offset-m3 {\n margin-left: 25%;\n }\n .row .col.pull-m3 {\n right: 25%;\n }\n .row .col.push-m3 {\n left: 25%;\n }\n .row .col.offset-m4 {\n margin-left: 33.3333333333%;\n }\n .row .col.pull-m4 {\n right: 33.3333333333%;\n }\n .row .col.push-m4 {\n left: 33.3333333333%;\n }\n .row .col.offset-m5 {\n margin-left: 41.6666666667%;\n }\n .row .col.pull-m5 {\n right: 41.6666666667%;\n }\n .row .col.push-m5 {\n left: 41.6666666667%;\n }\n .row .col.offset-m6 {\n margin-left: 50%;\n }\n .row .col.pull-m6 {\n right: 50%;\n }\n .row .col.push-m6 {\n left: 50%;\n }\n .row .col.offset-m7 {\n margin-left: 58.3333333333%;\n }\n .row .col.pull-m7 {\n right: 58.3333333333%;\n }\n .row .col.push-m7 {\n left: 58.3333333333%;\n }\n .row .col.offset-m8 {\n margin-left: 66.6666666667%;\n }\n .row .col.pull-m8 {\n right: 66.6666666667%;\n }\n .row .col.push-m8 {\n left: 66.6666666667%;\n }\n .row .col.offset-m9 {\n margin-left: 75%;\n }\n .row .col.pull-m9 {\n right: 75%;\n }\n .row .col.push-m9 {\n left: 75%;\n }\n .row .col.offset-m10 {\n margin-left: 83.3333333333%;\n }\n .row .col.pull-m10 {\n right: 83.3333333333%;\n }\n .row .col.push-m10 {\n left: 83.3333333333%;\n }\n .row .col.offset-m11 {\n margin-left: 91.6666666667%;\n }\n .row .col.pull-m11 {\n right: 91.6666666667%;\n }\n .row .col.push-m11 {\n left: 91.6666666667%;\n }\n .row .col.offset-m12 {\n margin-left: 100%;\n }\n .row .col.pull-m12 {\n right: 100%;\n }\n .row .col.push-m12 {\n left: 100%;\n }\n}\n@media only screen and (min-width : 993px) {\n .row .col.l1 {\n width: 8.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l2 {\n width: 16.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l3 {\n width: 25%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l4 {\n width: 33.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l5 {\n width: 41.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l6 {\n width: 50%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l7 {\n width: 58.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l8 {\n width: 66.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l9 {\n width: 75%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l10 {\n width: 83.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l11 {\n width: 91.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.l12 {\n width: 100%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.offset-l1 {\n margin-left: 8.3333333333%;\n }\n .row .col.pull-l1 {\n right: 8.3333333333%;\n }\n .row .col.push-l1 {\n left: 8.3333333333%;\n }\n .row .col.offset-l2 {\n margin-left: 16.6666666667%;\n }\n .row .col.pull-l2 {\n right: 16.6666666667%;\n }\n .row .col.push-l2 {\n left: 16.6666666667%;\n }\n .row .col.offset-l3 {\n margin-left: 25%;\n }\n .row .col.pull-l3 {\n right: 25%;\n }\n .row .col.push-l3 {\n left: 25%;\n }\n .row .col.offset-l4 {\n margin-left: 33.3333333333%;\n }\n .row .col.pull-l4 {\n right: 33.3333333333%;\n }\n .row .col.push-l4 {\n left: 33.3333333333%;\n }\n .row .col.offset-l5 {\n margin-left: 41.6666666667%;\n }\n .row .col.pull-l5 {\n right: 41.6666666667%;\n }\n .row .col.push-l5 {\n left: 41.6666666667%;\n }\n .row .col.offset-l6 {\n margin-left: 50%;\n }\n .row .col.pull-l6 {\n right: 50%;\n }\n .row .col.push-l6 {\n left: 50%;\n }\n .row .col.offset-l7 {\n margin-left: 58.3333333333%;\n }\n .row .col.pull-l7 {\n right: 58.3333333333%;\n }\n .row .col.push-l7 {\n left: 58.3333333333%;\n }\n .row .col.offset-l8 {\n margin-left: 66.6666666667%;\n }\n .row .col.pull-l8 {\n right: 66.6666666667%;\n }\n .row .col.push-l8 {\n left: 66.6666666667%;\n }\n .row .col.offset-l9 {\n margin-left: 75%;\n }\n .row .col.pull-l9 {\n right: 75%;\n }\n .row .col.push-l9 {\n left: 75%;\n }\n .row .col.offset-l10 {\n margin-left: 83.3333333333%;\n }\n .row .col.pull-l10 {\n right: 83.3333333333%;\n }\n .row .col.push-l10 {\n left: 83.3333333333%;\n }\n .row .col.offset-l11 {\n margin-left: 91.6666666667%;\n }\n .row .col.pull-l11 {\n right: 91.6666666667%;\n }\n .row .col.push-l11 {\n left: 91.6666666667%;\n }\n .row .col.offset-l12 {\n margin-left: 100%;\n }\n .row .col.pull-l12 {\n right: 100%;\n }\n .row .col.push-l12 {\n left: 100%;\n }\n}\n@media only screen and (min-width : 1201px) {\n .row .col.xl1 {\n width: 8.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl2 {\n width: 16.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl3 {\n width: 25%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl4 {\n width: 33.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl5 {\n width: 41.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl6 {\n width: 50%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl7 {\n width: 58.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl8 {\n width: 66.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl9 {\n width: 75%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl10 {\n width: 83.3333333333%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl11 {\n width: 91.6666666667%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.xl12 {\n width: 100%;\n margin-left: auto;\n left: auto;\n right: auto;\n }\n .row .col.offset-xl1 {\n margin-left: 8.3333333333%;\n }\n .row .col.pull-xl1 {\n right: 8.3333333333%;\n }\n .row .col.push-xl1 {\n left: 8.3333333333%;\n }\n .row .col.offset-xl2 {\n margin-left: 16.6666666667%;\n }\n .row .col.pull-xl2 {\n right: 16.6666666667%;\n }\n .row .col.push-xl2 {\n left: 16.6666666667%;\n }\n .row .col.offset-xl3 {\n margin-left: 25%;\n }\n .row .col.pull-xl3 {\n right: 25%;\n }\n .row .col.push-xl3 {\n left: 25%;\n }\n .row .col.offset-xl4 {\n margin-left: 33.3333333333%;\n }\n .row .col.pull-xl4 {\n right: 33.3333333333%;\n }\n .row .col.push-xl4 {\n left: 33.3333333333%;\n }\n .row .col.offset-xl5 {\n margin-left: 41.6666666667%;\n }\n .row .col.pull-xl5 {\n right: 41.6666666667%;\n }\n .row .col.push-xl5 {\n left: 41.6666666667%;\n }\n .row .col.offset-xl6 {\n margin-left: 50%;\n }\n .row .col.pull-xl6 {\n right: 50%;\n }\n .row .col.push-xl6 {\n left: 50%;\n }\n .row .col.offset-xl7 {\n margin-left: 58.3333333333%;\n }\n .row .col.pull-xl7 {\n right: 58.3333333333%;\n }\n .row .col.push-xl7 {\n left: 58.3333333333%;\n }\n .row .col.offset-xl8 {\n margin-left: 66.6666666667%;\n }\n .row .col.pull-xl8 {\n right: 66.6666666667%;\n }\n .row .col.push-xl8 {\n left: 66.6666666667%;\n }\n .row .col.offset-xl9 {\n margin-left: 75%;\n }\n .row .col.pull-xl9 {\n right: 75%;\n }\n .row .col.push-xl9 {\n left: 75%;\n }\n .row .col.offset-xl10 {\n margin-left: 83.3333333333%;\n }\n .row .col.pull-xl10 {\n right: 83.3333333333%;\n }\n .row .col.push-xl10 {\n left: 83.3333333333%;\n }\n .row .col.offset-xl11 {\n margin-left: 91.6666666667%;\n }\n .row .col.pull-xl11 {\n right: 91.6666666667%;\n }\n .row .col.push-xl11 {\n left: 91.6666666667%;\n }\n .row .col.offset-xl12 {\n margin-left: 100%;\n }\n .row .col.pull-xl12 {\n right: 100%;\n }\n .row .col.push-xl12 {\n left: 100%;\n }\n}\n\n.sidenav {\n position: fixed;\n width: 300px;\n left: 0;\n top: 0;\n margin: 0;\n height: 100%;\n height: calc(100% + 60px);\n height: -moz-calc(100%);\n padding-bottom: 60px;\n background-color: #fff;\n z-index: 999;\n overflow-y: auto;\n will-change: transform;\n backface-visibility: hidden;\n transform: translateX(-105%);\n transition: transform 1s;\n}\n.sidenav.right-aligned {\n right: 0;\n left: auto;\n transform: translateX(100%);\n}\n.sidenav .collapsible {\n margin: 0;\n}\n.sidenav li {\n float: none;\n}\n.sidenav li .iconSideLink {\n display: flex;\n align-items: center;\n}\n.sidenav li .iconSideLink svg {\n stroke: rgba(0, 0, 0, 0.2);\n width: 30px;\n}\n.sidenav li.active {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.sidenav li.active svg {\n stroke: white !important;\n width: 30px;\n}\n.sidenav li.last {\n position: sticky;\n top: calc(100% - 45px - 35px);\n}\n.sidenav li > a {\n color: rgba(0, 0, 0, 0.87);\n display: flex;\n font-size: 14px;\n font-weight: 700;\n height: 45px;\n line-height: 45px;\n padding: 0 30px;\n}\n.sidenav li > a:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.sidenav li > a.btn, .sidenav li > a.btn-small, .sidenav li > a.btn-large, .sidenav li > a.btn-flat, .sidenav li > a.btn-floating {\n margin: 10px 15px;\n}\n.sidenav li > a.btn, .sidenav li > a.btn-small, .sidenav li > a.btn-large, .sidenav li > a.btn-floating {\n color: #fff;\n}\n.sidenav li > a.btn-flat {\n color: #343434;\n}\n.sidenav li > a.btn:hover, .sidenav li > a.btn-small:hover, .sidenav li > a.btn-large:hover {\n background-color: #414141;\n}\n.sidenav li > a.btn-floating:hover {\n background-color: #343434;\n}\n.sidenav li > a > i, .sidenav li > a > [class^=mdi-],\n.sidenav li > a li > a > [class*=mdi-], .sidenav li > a > i.s-icon {\n float: left;\n height: 45px;\n line-height: 45px;\n margin: 0 30px 0 0;\n width: 22.5px;\n color: rgba(0, 0, 0, 0.54);\n}\n.sidenav .divider {\n margin: 7.5px 0 0 0;\n}\n.sidenav .subheader {\n cursor: initial;\n pointer-events: none;\n color: rgba(0, 0, 0, 0.54);\n font-size: 14px;\n font-weight: 500;\n line-height: 45px;\n}\n.sidenav .subheader:hover {\n background-color: transparent;\n}\n.sidenav .user-view {\n position: relative;\n padding: 30px 30px 0;\n margin-bottom: 7.5px;\n}\n.sidenav .user-view > a {\n height: auto;\n padding: 0;\n}\n.sidenav .user-view > a:hover {\n background-color: transparent;\n}\n.sidenav .user-view .background {\n overflow: hidden;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n}\n.sidenav .user-view .circle,\n.sidenav .user-view .name,\n.sidenav .user-view .email {\n display: block;\n}\n.sidenav .user-view .circle {\n height: 64px;\n width: 64px;\n}\n.sidenav .user-view .name,\n.sidenav .user-view .email {\n font-size: 14px;\n line-height: 22.5px;\n}\n.sidenav .user-view .name {\n margin-top: 16px;\n font-weight: 500;\n}\n.sidenav .user-view .email {\n padding-bottom: 16px;\n font-weight: 400;\n}\n\n.drag-target {\n height: 100%;\n width: 10px;\n position: fixed;\n top: 0;\n z-index: 998;\n}\n.drag-target.right-aligned {\n right: 0;\n}\n\n.sidenav.sidenav-fixed {\n left: 0;\n transform: translateX(0);\n position: fixed;\n}\n.sidenav.sidenav-fixed.right-aligned {\n right: 0;\n left: auto;\n}\n\n@media only screen and (max-width : 992px) {\n .sidenav.sidenav-fixed {\n transform: translateX(-105%);\n }\n .sidenav.sidenav-fixed.right-aligned {\n transform: translateX(105%);\n }\n .sidenav > a {\n padding: 0 15px;\n }\n .sidenav .user-view {\n padding: 15px 15px 0;\n }\n}\n.sidenav .collapsible-body > ul:not(.collapsible) > li.active,\n.sidenav.sidenav-fixed .collapsible-body > ul:not(.collapsible) > li.active {\n background-color: #90caf9;\n}\n.sidenav .collapsible-body > ul:not(.collapsible) > li.active a,\n.sidenav.sidenav-fixed .collapsible-body > ul:not(.collapsible) > li.active a {\n color: #fff;\n}\n\n.sidenav .collapsible-body {\n padding: 0;\n}\n\n.sidenav-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n opacity: 0;\n height: 120vh;\n background-color: rgba(0, 0, 0, 0.5);\n z-index: 997;\n display: none;\n}\n\n.with-side-nav-open {\n padding-left: 300px;\n transition: padding 1s;\n}\n\n.btn, .btn-small, .btn-large,\n.btn-flat {\n border: none;\n border-radius: 2px;\n display: inline-block;\n height: 36px;\n line-height: 36px;\n padding: 0 16px;\n text-transform: uppercase;\n vertical-align: middle;\n -webkit-tap-highlight-color: transparent;\n}\n\n.btn.disabled,\n.btn-floating.disabled,\n.btn-large.disabled,\n.btn-small.disabled,\n.btn-flat.disabled,\n.btn:disabled,\n.btn-floating:disabled,\n.btn-large:disabled,\n.btn-small:disabled,\n.btn-flat:disabled,\n.btn[disabled],\n.btn-floating[disabled],\n.btn-large[disabled],\n.btn-small[disabled],\n.btn-flat[disabled] {\n pointer-events: none;\n background-color: #DFDFDF !important;\n box-shadow: none;\n color: #9F9F9F !important;\n cursor: default;\n}\n.btn.disabled:hover,\n.btn-floating.disabled:hover,\n.btn-large.disabled:hover,\n.btn-small.disabled:hover,\n.btn-flat.disabled:hover,\n.btn:disabled:hover,\n.btn-floating:disabled:hover,\n.btn-large:disabled:hover,\n.btn-small:disabled:hover,\n.btn-flat:disabled:hover,\n.btn[disabled]:hover,\n.btn-floating[disabled]:hover,\n.btn-large[disabled]:hover,\n.btn-small[disabled]:hover,\n.btn-flat[disabled]:hover {\n background-color: #DFDFDF !important;\n color: #9F9F9F !important;\n}\n\n.btn,\n.btn-small,\n.btn-large,\n.btn-floating,\n.btn-flat {\n font-size: 14px;\n outline: 0;\n}\n.btn i,\n.btn-floating i,\n.btn-large i,\n.btn-small i,\n.btn-flat i {\n font-size: 1.3rem;\n line-height: inherit;\n}\n\n.btn:focus, .btn-small:focus, .btn-large:focus,\n.btn-floating:focus {\n background-color: #1b1b1b;\n}\n\n.btn, .btn-small, .btn-large {\n text-decoration: none;\n color: #fff;\n background-color: #343434;\n text-align: center;\n letter-spacing: 0.5px;\n transition: background-color 0.2s ease-out;\n cursor: pointer;\n}\n.btn:hover, .btn-small:hover, .btn-large:hover {\n background-color: #414141;\n}\n\n.btn-floating {\n display: inline-block;\n color: #fff;\n position: relative;\n overflow: hidden;\n z-index: 1;\n width: 40px;\n height: 40px;\n line-height: 40px;\n padding: 0;\n background-color: #26a69a;\n border-radius: 50%;\n transition: background-color 0.3s;\n cursor: pointer;\n vertical-align: middle;\n}\n.btn-floating:hover {\n background-color: #26a69a;\n}\n.btn-floating:before {\n border-radius: 0;\n}\n.btn-floating.btn-large {\n width: 56px;\n height: 56px;\n padding: 0;\n}\n.btn-floating.btn-large.halfway-fab {\n bottom: 28px;\n}\n.btn-floating.btn-large i {\n line-height: 56px;\n}\n.btn-floating.btn-small {\n width: 32.4px;\n height: 32.4px;\n}\n.btn-floating.btn-small.halfway-fab {\n bottom: 16.2px;\n}\n.btn-floating.btn-small i {\n line-height: 32.4px;\n}\n.btn-floating.halfway-fab {\n position: absolute;\n right: 24px;\n bottom: 20px;\n}\n.btn-floating.halfway-fab.left {\n right: auto;\n left: 24px;\n}\n.btn-floating i {\n width: inherit;\n display: inline-block;\n text-align: center;\n color: #fff;\n font-size: 1.6rem;\n line-height: 40px;\n}\n\nbutton.btn-floating {\n border: none;\n}\n\n.fixed-action-btn {\n position: fixed;\n right: 23px;\n bottom: 23px;\n padding-top: 15px;\n margin-bottom: 0;\n z-index: 997;\n}\n.fixed-action-btn.active ul {\n visibility: visible;\n}\n.fixed-action-btn.direction-left, .fixed-action-btn.direction-right {\n padding: 0 0 0 15px;\n}\n.fixed-action-btn.direction-left ul, .fixed-action-btn.direction-right ul {\n text-align: right;\n right: 64px;\n top: 50%;\n transform: translateY(-50%);\n height: 100%;\n left: auto;\n /*width 100% only goes to width of button container */\n width: 500px;\n}\n.fixed-action-btn.direction-left ul li, .fixed-action-btn.direction-right ul li {\n display: inline-block;\n margin: 7.5px 15px 0 0;\n}\n.fixed-action-btn.direction-right {\n padding: 0 15px 0 0;\n}\n.fixed-action-btn.direction-right ul {\n text-align: left;\n direction: rtl;\n left: 64px;\n right: auto;\n}\n.fixed-action-btn.direction-right ul li {\n margin: 7.5px 0 0 15px;\n}\n.fixed-action-btn.direction-bottom {\n padding: 0 0 15px 0;\n}\n.fixed-action-btn.direction-bottom ul {\n top: 64px;\n bottom: auto;\n display: flex;\n flex-direction: column-reverse;\n}\n.fixed-action-btn.direction-bottom ul li {\n margin: 15px 0 0 0;\n}\n.fixed-action-btn.toolbar {\n padding: 0;\n height: 56px;\n}\n.fixed-action-btn.toolbar.active > a i {\n opacity: 0;\n}\n.fixed-action-btn.toolbar ul {\n display: flex;\n top: 0;\n bottom: 0;\n z-index: 1;\n}\n.fixed-action-btn.toolbar ul li {\n flex: 1;\n display: inline-block;\n margin: 0;\n height: 100%;\n transition: none;\n}\n.fixed-action-btn.toolbar ul li a {\n display: block;\n overflow: hidden;\n position: relative;\n width: 100%;\n height: 100%;\n background-color: transparent;\n box-shadow: none;\n color: #fff;\n line-height: 56px;\n z-index: 1;\n}\n.fixed-action-btn.toolbar ul li a i {\n line-height: inherit;\n}\n.fixed-action-btn ul {\n left: 0;\n right: 0;\n text-align: center;\n position: absolute;\n bottom: 64px;\n margin: 0;\n visibility: hidden;\n}\n.fixed-action-btn ul li {\n margin-bottom: 15px;\n}\n.fixed-action-btn ul a.btn-floating {\n opacity: 0;\n}\n.fixed-action-btn .fab-backdrop {\n position: absolute;\n top: 0;\n left: 0;\n z-index: -1;\n width: 40px;\n height: 40px;\n background-color: #26a69a;\n border-radius: 50%;\n transform: scale(0);\n}\n\n.btn-flat {\n box-shadow: none;\n background-color: transparent;\n color: #343434;\n cursor: pointer;\n transition: background-color 0.2s;\n}\n.btn-flat:focus, .btn-flat:hover {\n box-shadow: none;\n}\n.btn-flat:focus {\n background-color: rgba(0, 0, 0, 0.1);\n}\n.btn-flat.disabled, .btn-flat.btn-flat[disabled] {\n background-color: transparent !important;\n color: #b3b3b3 !important;\n cursor: default;\n}\n\n.btn-large {\n height: 54px;\n line-height: 54px;\n font-size: 15px;\n padding: 0 28px;\n}\n.btn-large i {\n font-size: 1.6rem;\n}\n\n.btn-small {\n height: 32.4px;\n line-height: 32.4px;\n font-size: 13px;\n}\n.btn-small i {\n font-size: 1.2rem;\n}\n\n.btn-block {\n display: block;\n}\n\n.communTabHeader, .tabs.activeTab-2 .tab-header-over2 .tab-header, .tabs.activeTab-2 .tab-header-over1 .tab-header, .tabs.activeTab-2 .tab-header-over0 .tab-header, .tabs.activeTab-1 .tab-header-over2 .tab-header, .tabs.activeTab-1 .tab-header-over1 .tab-header, .tabs.activeTab-1 .tab-header-over0 .tab-header, .tabs.activeTab-0 .tab-header-over2 .tab-header, .tabs.activeTab-0 .tab-header-over1 .tab-header, .tabs.activeTab-0 .tab-header-over0 .tab-header {\n height: 100px;\n padding: 40px;\n}\n\n.tabs {\n min-height: calc(100% - 150px);\n margin-top: 30px;\n padding: 0 !important;\n border-radius: 40px !important;\n}\n.tabs .innerpage {\n min-height: 70VH !important;\n}\n.tabs .tabs-header-overlay {\n display: flex;\n height: 100px;\n}\n.tabs.activeTab-0 .tab-header-over0 {\n flex: 1;\n background-color: #80c4fd;\n border-radius: 40px 0 0 0;\n}\n.tabs.activeTab-0 .tab-header-over0 .tab-header {\n background-color: #cbe7fe;\n border-radius: 40px 40px 0 0;\n}\n.tabs.activeTab-0 .tab-header-over1 {\n flex: 1;\n background: linear-gradient(0.25turn, #cbe7fe, #35a2fb);\n border-radius: 0 0 0 0;\n}\n.tabs.activeTab-0 .tab-header-over1 .tab-header {\n background-color: #80c4fd;\n border-radius: 0 40px 0 40px;\n}\n.tabs.activeTab-0 .tab-header-over2 {\n flex: 1;\n background-color: #80c4fd;\n border-radius: 0 40px 0 0;\n}\n.tabs.activeTab-0 .tab-header-over2 .tab-header {\n background-color: #35a2fb;\n border-radius: 0 40px 0 40px;\n}\n.tabs.activeTab-1 .tab-header-over0 {\n flex: 1;\n background-color: #cbe7fe;\n border-radius: 40px 0 0 0;\n}\n.tabs.activeTab-1 .tab-header-over0 .tab-header {\n background-color: #80c4fd;\n border-radius: 40px 0 40px 0;\n}\n.tabs.activeTab-1 .tab-header-over1 {\n flex: 1;\n background: linear-gradient(0.25turn, #80c4fd, #35a2fb);\n border-radius: 0 0 0 0;\n}\n.tabs.activeTab-1 .tab-header-over1 .tab-header {\n background-color: #cbe7fe;\n border-radius: 40px 40px 0 0;\n}\n.tabs.activeTab-1 .tab-header-over2 {\n flex: 1;\n background-color: #cbe7fe;\n border-radius: 0 40px 0 0;\n}\n.tabs.activeTab-1 .tab-header-over2 .tab-header {\n background-color: #35a2fb;\n border-radius: 0 40px 0 40px;\n}\n.tabs.activeTab-2 .tab-header-over0 {\n flex: 1;\n background-color: #35a2fb;\n border-radius: 40px 0 0 0;\n}\n.tabs.activeTab-2 .tab-header-over0 .tab-header {\n background-color: #80c4fd;\n border-radius: 40px 0 40px 0;\n}\n.tabs.activeTab-2 .tab-header-over1 {\n flex: 1;\n background: linear-gradient(0.25turn, #80c4fd, #cbe7fe);\n border-radius: 0 0 0 0;\n}\n.tabs.activeTab-2 .tab-header-over1 .tab-header {\n background-color: #35a2fb;\n border-radius: 40px 0 40px 0;\n}\n.tabs.activeTab-2 .tab-header-over2 {\n flex: 1;\n background-color: #35a2fb;\n border-radius: 0 40px 0 0;\n}\n.tabs.activeTab-2 .tab-header-over2 .tab-header {\n background-color: #cbe7fe;\n border-radius: 40px 40px 0 0;\n}\n.tabs .tab-content {\n background-color: #cbe7fe;\n padding: 10px;\n border-top: 0;\n min-height: 70vh;\n border-radius: 0 0 40px 40px;\n padding-bottom: 20px;\n}\n\n.loader-overlay {\n z-index: 999;\n position: absolute;\n height: 100vh;\n width: 100vw;\n top: 0;\n left: 0;\n background-color: rgba(102, 100, 100, 0.603);\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n}\n.loader-overlay .loader {\n border: 7px solid #f3f3f3; /* Light grey */\n border-top: 7px solid #2ea2cc; /* Blue */\n border-radius: 50%;\n width: 70px;\n height: 70px;\n animation: spin 2s linear infinite;\n}\n.loader-overlay .loader-text {\n margin-top: 20px;\n font-size: 25px;\n color: #2ea2cc;\n}\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.card-panel {\n transition: box-shadow 0.25s;\n padding: 24px;\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n border-radius: 2px;\n background-color: #fff;\n}\n\n.card {\n position: relative;\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n background-color: #fff;\n transition: box-shadow 0.25s;\n border-radius: 2px;\n}\n.card .card-title {\n font-size: 24px;\n font-weight: 300;\n}\n.card .card-title.activator {\n cursor: pointer;\n}\n.card.small, .card.medium, .card.large {\n position: relative;\n}\n.card.small .card-image, .card.medium .card-image, .card.large .card-image {\n max-height: 60%;\n overflow: hidden;\n}\n.card.small .card-image + .card-content, .card.medium .card-image + .card-content, .card.large .card-image + .card-content {\n max-height: 40%;\n}\n.card.small .card-content, .card.medium .card-content, .card.large .card-content {\n max-height: 100%;\n overflow: hidden;\n}\n.card.small .card-action, .card.medium .card-action, .card.large .card-action {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n}\n.card.small {\n height: 300px;\n}\n.card.medium {\n height: 400px;\n}\n.card.large {\n height: 500px;\n}\n.card.horizontal {\n display: flex;\n}\n.card.horizontal.small .card-image, .card.horizontal.medium .card-image, .card.horizontal.large .card-image {\n height: 100%;\n max-height: none;\n overflow: visible;\n}\n.card.horizontal.small .card-image img, .card.horizontal.medium .card-image img, .card.horizontal.large .card-image img {\n height: 100%;\n}\n.card.horizontal .card-image {\n max-width: 50%;\n}\n.card.horizontal .card-image img {\n border-radius: 2px 0 0 2px;\n max-width: 100%;\n width: auto;\n}\n.card.horizontal .card-stacked {\n display: flex;\n flex-direction: column;\n flex: 1;\n position: relative;\n}\n.card.horizontal .card-stacked .card-content {\n flex-grow: 1;\n}\n.card.sticky-action .card-action {\n z-index: 2;\n}\n.card.sticky-action .card-reveal {\n z-index: 1;\n padding-bottom: 64px;\n}\n.card .card-image {\n position: relative;\n}\n.card .card-image img {\n display: block;\n border-radius: 2px 2px 0 0;\n position: relative;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n width: 100%;\n}\n.card .card-image .card-title {\n color: #fff;\n position: absolute;\n bottom: 0;\n left: 0;\n max-width: 100%;\n padding: 24px;\n}\n.card .card-content {\n padding: 24px;\n border-radius: 0 0 2px 2px;\n}\n.card .card-content p {\n margin: 0;\n}\n.card .card-content .card-title {\n display: block;\n line-height: 32px;\n margin-bottom: 8px;\n}\n.card .card-content .card-title i {\n line-height: 32px;\n}\n.card .card-action {\n background-color: inherit;\n border-top: 1px solid rgba(160, 160, 160, 0.2);\n position: relative;\n padding: 16px 24px;\n}\n.card .card-action:last-child {\n border-radius: 0 0 2px 2px;\n}\n.card .card-action a:not(.btn):not(.btn-large):not(.btn-small):not(.btn-large):not(.btn-floating) {\n color: #ffab40;\n margin-right: 24px;\n transition: color 0.3s ease;\n text-transform: uppercase;\n}\n.card .card-action a:not(.btn):not(.btn-large):not(.btn-small):not(.btn-large):not(.btn-floating):hover {\n color: #ffd8a6;\n}\n.card .card-reveal {\n padding: 24px;\n position: absolute;\n background-color: #fff;\n width: 100%;\n overflow-y: auto;\n left: 0;\n top: 100%;\n height: 100%;\n z-index: 3;\n display: none;\n}\n.card .card-reveal .card-title {\n cursor: pointer;\n display: block;\n}\n\n/*\n @license\n Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n Code distributed by Google as part of the polymer project is also\n subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n/**************************/\n/* STYLES FOR THE SPINNER */\n/**************************/\n/*\n * Constants:\n * STROKEWIDTH = 3px\n * ARCSIZE = 270 degrees (amount of circle the arc takes up)\n * ARCTIME = 1333ms (time it takes to expand and contract arc)\n * ARCSTARTROT = 216 degrees (how much the start location of the arc\n * should rotate each time, 216 gives us a\n * 5 pointed star shape (it's 360/5 * 3).\n * For a 7 pointed star, we might do\n * 360/7 * 3 = 154.286)\n * CONTAINERWIDTH = 28px\n * SHRINK_TIME = 400ms\n */\n.preloader-wrapper {\n display: inline-block;\n position: relative;\n width: 50px;\n height: 50px;\n}\n.preloader-wrapper.small {\n width: 36px;\n height: 36px;\n}\n.preloader-wrapper.big {\n width: 64px;\n height: 64px;\n}\n.preloader-wrapper.active {\n /* duration: 360 * ARCTIME / (ARCSTARTROT + (360-ARCSIZE)) */\n -webkit-animation: container-rotate 1568ms linear infinite;\n animation: container-rotate 1568ms linear infinite;\n}\n\n@-webkit-keyframes container-rotate {\n to {\n -webkit-transform: rotate(360deg);\n }\n}\n@keyframes container-rotate {\n to {\n transform: rotate(360deg);\n }\n}\n.spinner-layer {\n position: absolute;\n width: 100%;\n height: 100%;\n opacity: 0;\n border-color: #26a69a;\n}\n\n.spinner-blue,\n.spinner-blue-only {\n border-color: #4285f4;\n}\n\n.spinner-red,\n.spinner-red-only {\n border-color: #db4437;\n}\n\n.spinner-yellow,\n.spinner-yellow-only {\n border-color: #f4b400;\n}\n\n.spinner-green,\n.spinner-green-only {\n border-color: #0f9d58;\n}\n\n/**\n * IMPORTANT NOTE ABOUT CSS ANIMATION PROPERTIES (keanulee):\n *\n * iOS Safari (tested on iOS 8.1) does not handle animation-delay very well - it doesn't\n * guarantee that the animation will start _exactly_ after that value. So we avoid using\n * animation-delay and instead set custom keyframes for each color (as redundant as it\n * seems).\n *\n * We write out each animation in full (instead of separating animation-name,\n * animation-duration, etc.) because under the polyfill, Safari does not recognize those\n * specific properties properly, treats them as -webkit-animation, and overrides the\n * other animation rules. See https://github.com/Polymer/platform/issues/53.\n */\n.active .spinner-layer.spinner-blue {\n /* durations: 4 * ARCTIME */\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.active .spinner-layer.spinner-red {\n /* durations: 4 * ARCTIME */\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.active .spinner-layer.spinner-yellow {\n /* durations: 4 * ARCTIME */\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.active .spinner-layer.spinner-green {\n /* durations: 4 * ARCTIME */\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.active .spinner-layer,\n.active .spinner-layer.spinner-blue-only,\n.active .spinner-layer.spinner-red-only,\n.active .spinner-layer.spinner-yellow-only,\n.active .spinner-layer.spinner-green-only {\n /* durations: 4 * ARCTIME */\n opacity: 1;\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n@-webkit-keyframes fill-unfill-rotate {\n 12.5% {\n -webkit-transform: rotate(135deg);\n } /* 0.5 * ARCSIZE */\n 25% {\n -webkit-transform: rotate(270deg);\n } /* 1 * ARCSIZE */\n 37.5% {\n -webkit-transform: rotate(405deg);\n } /* 1.5 * ARCSIZE */\n 50% {\n -webkit-transform: rotate(540deg);\n } /* 2 * ARCSIZE */\n 62.5% {\n -webkit-transform: rotate(675deg);\n } /* 2.5 * ARCSIZE */\n 75% {\n -webkit-transform: rotate(810deg);\n } /* 3 * ARCSIZE */\n 87.5% {\n -webkit-transform: rotate(945deg);\n } /* 3.5 * ARCSIZE */\n to {\n -webkit-transform: rotate(1080deg);\n } /* 4 * ARCSIZE */\n}\n@keyframes fill-unfill-rotate {\n 12.5% {\n transform: rotate(135deg);\n } /* 0.5 * ARCSIZE */\n 25% {\n transform: rotate(270deg);\n } /* 1 * ARCSIZE */\n 37.5% {\n transform: rotate(405deg);\n } /* 1.5 * ARCSIZE */\n 50% {\n transform: rotate(540deg);\n } /* 2 * ARCSIZE */\n 62.5% {\n transform: rotate(675deg);\n } /* 2.5 * ARCSIZE */\n 75% {\n transform: rotate(810deg);\n } /* 3 * ARCSIZE */\n 87.5% {\n transform: rotate(945deg);\n } /* 3.5 * ARCSIZE */\n to {\n transform: rotate(1080deg);\n } /* 4 * ARCSIZE */\n}\n@-webkit-keyframes blue-fade-in-out {\n from {\n opacity: 1;\n }\n 25% {\n opacity: 1;\n }\n 26% {\n opacity: 0;\n }\n 89% {\n opacity: 0;\n }\n 90% {\n opacity: 1;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes blue-fade-in-out {\n from {\n opacity: 1;\n }\n 25% {\n opacity: 1;\n }\n 26% {\n opacity: 0;\n }\n 89% {\n opacity: 0;\n }\n 90% {\n opacity: 1;\n }\n 100% {\n opacity: 1;\n }\n}\n@-webkit-keyframes red-fade-in-out {\n from {\n opacity: 0;\n }\n 15% {\n opacity: 0;\n }\n 25% {\n opacity: 1;\n }\n 50% {\n opacity: 1;\n }\n 51% {\n opacity: 0;\n }\n}\n@keyframes red-fade-in-out {\n from {\n opacity: 0;\n }\n 15% {\n opacity: 0;\n }\n 25% {\n opacity: 1;\n }\n 50% {\n opacity: 1;\n }\n 51% {\n opacity: 0;\n }\n}\n@-webkit-keyframes yellow-fade-in-out {\n from {\n opacity: 0;\n }\n 40% {\n opacity: 0;\n }\n 50% {\n opacity: 1;\n }\n 75% {\n opacity: 1;\n }\n 76% {\n opacity: 0;\n }\n}\n@keyframes yellow-fade-in-out {\n from {\n opacity: 0;\n }\n 40% {\n opacity: 0;\n }\n 50% {\n opacity: 1;\n }\n 75% {\n opacity: 1;\n }\n 76% {\n opacity: 0;\n }\n}\n@-webkit-keyframes green-fade-in-out {\n from {\n opacity: 0;\n }\n 65% {\n opacity: 0;\n }\n 75% {\n opacity: 1;\n }\n 90% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n@keyframes green-fade-in-out {\n from {\n opacity: 0;\n }\n 65% {\n opacity: 0;\n }\n 75% {\n opacity: 1;\n }\n 90% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n/**\n * Patch the gap that appear between the two adjacent div.circle-clipper while the\n * spinner is rotating (appears on Chrome 38, Safari 7.1, and IE 11).\n */\n.gap-patch {\n position: absolute;\n top: 0;\n left: 45%;\n width: 10%;\n height: 100%;\n overflow: hidden;\n border-color: inherit;\n}\n\n.gap-patch .circle {\n width: 1000%;\n left: -450%;\n}\n\n.circle-clipper {\n display: inline-block;\n position: relative;\n width: 50%;\n height: 100%;\n overflow: hidden;\n border-color: inherit;\n}\n.circle-clipper .circle {\n width: 200%;\n height: 100%;\n border-width: 3px; /* STROKEWIDTH */\n border-style: solid;\n border-color: inherit;\n border-bottom-color: transparent !important;\n border-radius: 50%;\n -webkit-animation: none;\n animation: none;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n}\n.circle-clipper.left .circle {\n left: 0;\n border-right-color: transparent !important;\n -webkit-transform: rotate(129deg);\n transform: rotate(129deg);\n}\n.circle-clipper.right .circle {\n left: -100%;\n border-left-color: transparent !important;\n -webkit-transform: rotate(-129deg);\n transform: rotate(-129deg);\n}\n\n.active .circle-clipper.left .circle {\n /* duration: ARCTIME */\n -webkit-animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n.active .circle-clipper.right .circle {\n /* duration: ARCTIME */\n -webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;\n}\n\n@-webkit-keyframes left-spin {\n from {\n -webkit-transform: rotate(130deg);\n }\n 50% {\n -webkit-transform: rotate(-5deg);\n }\n to {\n -webkit-transform: rotate(130deg);\n }\n}\n@keyframes left-spin {\n from {\n transform: rotate(130deg);\n }\n 50% {\n transform: rotate(-5deg);\n }\n to {\n transform: rotate(130deg);\n }\n}\n@-webkit-keyframes right-spin {\n from {\n -webkit-transform: rotate(-130deg);\n }\n 50% {\n -webkit-transform: rotate(5deg);\n }\n to {\n -webkit-transform: rotate(-130deg);\n }\n}\n@keyframes right-spin {\n from {\n transform: rotate(-130deg);\n }\n 50% {\n transform: rotate(5deg);\n }\n to {\n transform: rotate(-130deg);\n }\n}\n#spinnerContainer.cooldown {\n /* duration: SHRINK_TIME */\n -webkit-animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1);\n animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@-webkit-keyframes fade-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n@keyframes fade-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n.progress {\n position: relative;\n height: 4px;\n display: block;\n width: 100%;\n background-color: #acece6;\n border-radius: 2px;\n margin: 0.3333333333rem 0 0.6666666667rem 0;\n overflow: hidden;\n}\n.progress .determinate {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n background-color: #26a69a;\n transition: width 0.3s linear;\n}\n.progress .indeterminate {\n background-color: #26a69a;\n}\n.progress .indeterminate:before {\n content: \"\";\n position: absolute;\n background-color: inherit;\n top: 0;\n left: 0;\n bottom: 0;\n will-change: left, right;\n animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;\n}\n.progress .indeterminate:after {\n content: \"\";\n position: absolute;\n background-color: inherit;\n top: 0;\n left: 0;\n bottom: 0;\n will-change: left, right;\n animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;\n animation-delay: 1.15s;\n}\n\n@keyframes indeterminate {\n 0% {\n left: -35%;\n right: 100%;\n }\n 60% {\n left: 100%;\n right: -90%;\n }\n 100% {\n left: 100%;\n right: -90%;\n }\n}\n@keyframes indeterminate-short {\n 0% {\n left: -200%;\n right: 100%;\n }\n 60% {\n left: 107%;\n right: -8%;\n }\n 100% {\n left: 107%;\n right: -8%;\n }\n}\n.flash-message {\n position: absolute;\n padding: 2px 10px;\n border-radius: 5px;\n z-index: 99999;\n right: 0;\n bottom: 0;\n font-size: 14px;\n}\n.flash-message.info {\n background-color: #beddbe;\n border: 1px solid #728f72;\n}\n.flash-message.warn {\n background-color: #f5e6d0;\n border: 1px solid #ea7d17;\n}\n.flash-message.error {\n background-color: #e5b2bc;\n border: 1px solid #e33257;\n}\n\n@keyframes messageIn {\n from {\n right: 80%;\n }\n to {\n right: 0;\n }\n}\n.pulse {\n overflow: visible;\n position: relative;\n}\n.pulse::before {\n content: \"\";\n display: block;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background-color: inherit;\n border-radius: inherit;\n transition: opacity 0.3s, transform 0.3s;\n animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;\n}\n\n@keyframes pulse-animation {\n 0% {\n opacity: 1;\n transform: scale(1);\n }\n 50% {\n opacity: 0;\n transform: scale(1.5);\n }\n 100% {\n opacity: 0;\n transform: scale(1.5);\n }\n}\n.dropdown-content {\n background-color: #fff;\n margin: 0;\n display: flow;\n min-width: 100px;\n overflow-y: auto;\n position: absolute;\n left: 0;\n top: 0;\n z-index: 9999;\n transform-origin: 0 0;\n}\n.dropdown-content:focus {\n outline: 0;\n}\n.dropdown-content li {\n clear: both;\n color: rgba(0, 0, 0, 0.87);\n cursor: pointer;\n min-height: 50px;\n line-height: 1.5rem;\n width: 100%;\n text-align: left;\n}\n.dropdown-content li:hover, .dropdown-content li.active {\n background-color: #eee;\n}\n.dropdown-content li:focus {\n outline: none;\n}\n.dropdown-content li.divider {\n min-height: 0;\n height: 1px;\n}\n.dropdown-content li > a, .dropdown-content li > span {\n font-size: 16px;\n color: #26a69a;\n display: block;\n line-height: 22px;\n padding: 14px 16px;\n}\n.dropdown-content li > span > label {\n top: 1px;\n left: 0;\n height: 18px;\n}\n.dropdown-content li > a > i {\n height: inherit;\n line-height: inherit;\n float: left;\n margin: 0 24px 0 0;\n width: 24px;\n}\n\nbody.keyboard-focused .dropdown-content li:focus {\n background-color: #dadada;\n}\n\n.input-field.col .dropdown-content [type=checkbox] + label {\n top: 1px;\n left: 0;\n height: 18px;\n transform: none;\n}\n\n.dropdown-trigger {\n cursor: pointer;\n}\n\nnav {\n color: #fff;\n background-color: #90caf9;\n width: 100%;\n height: 56px;\n line-height: 56px;\n}\nnav.nav-extended {\n height: auto;\n}\nnav.nav-extended .nav-wrapper {\n display: flex;\n align-items: center;\n min-height: 56px;\n height: auto;\n}\nnav.nav-extended .nav-content {\n position: relative;\n line-height: normal;\n}\nnav a {\n color: #fff;\n}\nnav i,\nnav [class^=mdi-], nav [class*=mdi-],\nnav i.s-icons {\n display: block;\n font-size: 24px;\n height: 56px;\n line-height: 56px;\n}\nnav .nav-wrapper {\n position: relative;\n height: 100%;\n}\n@media only screen and (min-width : 993px) {\n nav a.sidenav-trigger {\n display: none;\n }\n}\nnav .sidenav-trigger {\n float: left;\n position: relative;\n z-index: 1;\n height: 56px;\n margin: 0 18px;\n}\nnav .sidenav-trigger i {\n height: 56px;\n line-height: 56px;\n}\nnav .brand-logo {\n position: absolute;\n color: #fff;\n display: inline-block;\n font-size: 2.1rem;\n padding: 0;\n}\nnav .brand-logo img.circle {\n height: 32px;\n width: 32px;\n}\nnav .brand-logo.center {\n left: 50%;\n transform: translateX(-50%);\n}\n@media only screen and (max-width : 992px) {\n nav .brand-logo {\n left: 50%;\n transform: translateX(-50%);\n }\n nav .brand-logo.left, nav .brand-logo.right {\n padding: 0;\n transform: none;\n }\n nav .brand-logo.left {\n left: 0.5rem;\n }\n nav .brand-logo.right {\n right: 0.5rem;\n left: auto;\n }\n}\nnav .brand-logo.right {\n right: 0.5rem;\n padding: 0;\n}\nnav .brand-logo i,\nnav .brand-logo [class^=mdi-], nav .brand-logo [class*=mdi-],\nnav .brand-logo i.s-icons {\n float: left;\n margin-right: 15px;\n}\nnav .nav-title {\n display: inline-block;\n font-size: 32px;\n padding: 28px 0;\n}\nnav ul {\n margin: 0;\n}\nnav ul li {\n transition: background-color 0.3s;\n float: left;\n padding: 0;\n}\nnav ul li.active {\n background-color: rgba(0, 0, 0, 0.1);\n}\nnav ul a {\n transition: background-color 0.3s;\n font-size: 1rem;\n color: #fff;\n display: block;\n padding: 0 15px;\n cursor: pointer;\n}\nnav ul a.btn, nav ul a.btn-small, nav ul a.btn-large, nav ul a.btn-flat, nav ul a.btn-floating {\n margin-top: -2px;\n margin-left: 15px;\n margin-right: 15px;\n}\nnav ul a.btn > .material-icons, nav ul a.btn-small > .material-icons, nav ul a.btn-large > .material-icons, nav ul a.btn-flat > .material-icons, nav ul a.btn-floating > .material-icons {\n height: inherit;\n line-height: inherit;\n}\nnav ul a:hover {\n background-color: rgba(0, 0, 0, 0.1);\n}\nnav ul.left {\n float: left;\n}\nnav form {\n height: 100%;\n}\nnav .input-field {\n margin: 0;\n height: 100%;\n}\nnav .input-field input {\n height: 100%;\n font-size: 1.2rem;\n border: none;\n padding-left: 2rem;\n}\nnav .input-field input:focus, nav .input-field input[type=text]:valid, nav .input-field input[type=password]:valid, nav .input-field input[type=email]:valid, nav .input-field input[type=url]:valid, nav .input-field input[type=date]:valid {\n border: none;\n box-shadow: none;\n}\nnav .input-field label {\n top: 0;\n left: 0;\n}\nnav .input-field label i {\n color: rgba(255, 255, 255, 0.7);\n transition: color 0.3s;\n}\nnav .input-field label.active i {\n color: #fff;\n}\n\n.navbar-fixed {\n position: relative;\n height: 56px;\n z-index: 997;\n}\n.navbar-fixed nav {\n position: fixed;\n}\n\n@media only screen and (min-width : 601px) {\n nav.nav-extended .nav-wrapper {\n min-height: 64px;\n }\n nav, nav .nav-wrapper i, nav a.sidenav-trigger, nav a.sidenav-trigger i {\n height: 64px;\n line-height: 64px;\n }\n .navbar-fixed {\n height: 64px;\n }\n}","@font-face {\n font-family: sweeticons;\n font-style: normal;\n font-weight: 400;\n src: url(\"./icons/assets/SweetIcons-Regular.eot\");\n src: url(\"./icons/assets/SweetIcons-Regular.woff2\") format(\"woff2\"),\n url(\"./icons/assets/SweetIcons-Regular.woff\") format(\"woff\"),\n url(\"./icons/assets/SweetIcons-Regular.ttf\") format(\"truetype\");\n}\n\n\n\n\n.s-icon,\n.s-icons,\n.sweet-icons,\n.sweet-icon {\n font-family: sweeticons, sans-serif;\n font-weight: normal;\n font-style: normal;\n font-size: 28px;\n line-height: 1;\n letter-spacing: normal;\n text-transform: none;\n display: inline-block;\n white-space: nowrap;\n word-wrap: normal;\n direction: ltr;\n -webkit-font-smoothing: antialiased;\n text-rendering: optimizeLegibility;\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-feature-settings: \"liga\";\n -moz-font-feature-settings: \"liga=1\";\n -moz-font-feature-settings: \"liga\";\n font-feature-settings: \"liga\";\n text-align: center;\n}\n","@import \"./colorsVars\";\n\n@each $color_name, $color in $colors {\n @each $color_type, $color_value in $color {\n @if $color_type == \"base\" {\n .#{$color_name} {\n background-color: $color_value !important;\n }\n .#{$color_name}-text {\n color: $color_value !important;\n }\n .#{$color_name}-waves .waves-ripple {\n background-color: $color_value !important;\n }\n } @else {\n .#{$color_name}.#{$color_type} {\n background-color: $color_value !important;\n }\n .#{$color_name}-text.text-#{$color_type} {\n color: $color_value !important;\n }\n .#{$color_name}-waves.waves-#{$color_type} .waves-ripple {\n background-color: $color_value !important;\n }\n }\n }\n}\n\n// ShadeVars classes\n$shades: (\n \"black\": #000000,\n \"white\": #ffffff,\n \"transparent\": transparent\n);\n// Shade classes\n@each $color, $color_value in $shades {\n .#{$color} {\n background-color: $color_value !important;\n }\n .#{$color}-text {\n color: $color_value !important;\n }\n}\n\n\n\n// usage: color(\"name_of_color\", \"type_of_color\")\n// to avoid to repeating map-get($colors, ...)\n\n@function color($color, $type) {\n @if map-has-key($colors, $color) {\n $curr_color: map-get($colors, $color);\n @if map-has-key($curr_color, $type) {\n @return map-get($curr_color, $type);\n }\n }\n @warn \"Unknown `#{$color}` - `#{$type}` in $colors.\";\n @return null;\n}\n","/**\n * prism.js Twilight theme\n * Based (more or less) on the Twilight theme originally of Textmate fame.\n * @author Remy Bach\n */\n code[class*=\"language-\"],\n pre[class*=\"language-\"] {\n\t color: white;\n\t background: none;\n\t font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n\t text-align: left;\n\t text-shadow: 0 -.1em .2em black;\n\t white-space: pre;\n\t word-spacing: normal;\n\t word-break: normal;\n\t word-wrap: normal;\n\t line-height: 1.5;\n \n\t -moz-tab-size: 4;\n\t -o-tab-size: 4;\n\t tab-size: 4;\n \n\t -webkit-hyphens: none;\n\t -moz-hyphens: none;\n\t -ms-hyphens: none;\n\t hyphens: none;\n }\n \n pre[class*=\"language-\"],\n :not(pre) > code[class*=\"language-\"] {\n\t background: hsl(0, 0%, 8%); /* #141414 */\n }\n \n /* Code blocks */\n pre[class*=\"language-\"] {\n\t border-radius: .5em;\n\t border: .3em solid hsl(0, 0%, 33%); /* #282A2B */\n\t box-shadow: 1px 1px .5em black inset;\n\t margin: .5em 0;\n\t overflow: auto;\n\t padding: 1em;\n }\n \n pre[class*=\"language-\"]::-moz-selection {\n\t /* Firefox */\n\t background: hsl(200, 4%, 16%); /* #282A2B */\n }\n \n pre[class*=\"language-\"]::selection {\n\t /* Safari */\n\t background: hsl(200, 4%, 16%); /* #282A2B */\n }\n \n /* Text Selection colour */\n pre[class*=\"language-\"]::-moz-selection, pre[class*=\"language-\"] ::-moz-selection,\n code[class*=\"language-\"]::-moz-selection, code[class*=\"language-\"] ::-moz-selection {\n\t text-shadow: none;\n\t background: hsla(0, 0%, 93%, 0.15); /* #EDEDED */\n }\n \n pre[class*=\"language-\"]::selection, pre[class*=\"language-\"] ::selection,\n code[class*=\"language-\"]::selection, code[class*=\"language-\"] ::selection {\n\t text-shadow: none;\n\t background: hsla(0, 0%, 93%, 0.15); /* #EDEDED */\n }\n \n /* Inline code */\n :not(pre) > code[class*=\"language-\"] {\n\t border-radius: .3em;\n\t border: .13em solid hsl(0, 0%, 33%); /* #545454 */\n\t box-shadow: 1px 1px .3em -.1em black inset;\n\t padding: .15em .2em .05em;\n\t white-space: normal;\n }\n \n .token.comment,\n .token.prolog,\n .token.doctype,\n .token.cdata {\n\t color: hsl(0, 0%, 47%); /* #777777 */\n }\n \n .token.punctuation {\n\t opacity: .7;\n }\n \n .namespace {\n\t opacity: .7;\n }\n \n .token.tag,\n .token.boolean,\n .token.number,\n .token.deleted {\n\t color: hsl(14, 58%, 55%); /* #CF6A4C */\n }\n \n .token.keyword,\n .token.property,\n .token.selector,\n .token.constant,\n .token.symbol,\n .token.builtin {\n\t color: hsl(53, 89%, 79%); /* #F9EE98 */\n }\n \n .token.attr-name,\n .token.attr-value,\n .token.string,\n .token.char,\n .token.operator,\n .token.entity,\n .token.url,\n .language-css .token.string,\n .style .token.string,\n .token.variable,\n .token.inserted {\n\t color: hsl(76, 21%, 52%); /* #8F9D6A */\n }\n \n .token.atrule {\n\t color: hsl(218, 22%, 55%); /* #7587A6 */\n }\n \n .token.regex,\n .token.important {\n\t color: hsl(42, 75%, 65%); /* #E9C062 */\n }\n \n .token.important,\n .token.bold {\n\t font-weight: bold;\n }\n .token.italic {\n\t font-style: italic;\n }\n \n .token.entity {\n\t cursor: help;\n }\n \n pre[data-line] {\n\t padding: 1em 0 1em 3em;\n\t position: relative;\n }\n \n /* Markup */\n .language-markup .token.tag,\n .language-markup .token.attr-name,\n .language-markup .token.punctuation {\n\t color: hsl(33, 33%, 52%); /* #AC885B */\n }\n \n /* Make the tokens sit above the line highlight so the colours don't look faded. */\n .token {\n\t position: relative;\n\t z-index: 1;\n }\n \n .line-highlight {\n\t background: hsla(0, 0%, 33%, 0.25); /* #545454 */\n\t background: linear-gradient(to right, hsla(0, 0%, 33%, .1) 70%, hsla(0, 0%, 33%, 0)); /* #545454 */\n\t border-bottom: 1px dashed hsl(0, 0%, 33%); /* #545454 */\n\t border-top: 1px dashed hsl(0, 0%, 33%); /* #545454 */\n\t left: 0;\n\t line-height: inherit;\n\t margin-top: 0.75em; /* Same as .prism’s padding-top */\n\t padding: inherit 0;\n\t pointer-events: none;\n\t position: absolute;\n\t right: 0;\n\t white-space: pre;\n\t z-index: 0;\n }\n \n .line-highlight:before,\n .line-highlight[data-end]:after {\n\t background-color: hsl(215, 15%, 59%); /* #8794A6 */\n\t border-radius: 999px;\n\t box-shadow: 0 1px white;\n\t color: hsl(24, 20%, 95%); /* #F5F2F0 */\n\t content: attr(data-start);\n\t font: bold 65%/1.5 sans-serif;\n\t left: .6em;\n\t min-width: 1em;\n\t padding: 0 .5em;\n\t position: absolute;\n\t text-align: center;\n\t text-shadow: none;\n\t top: .4em;\n\t vertical-align: .3em;\n }\n \n .line-highlight[data-end]:after {\n\t bottom: .4em;\n\t content: attr(data-end);\n\t top: auto;\n }\n ","@import 'https://fonts.googleapis.com/css?family=Ubuntu';\n\n\n\n.window {\n font-family: 'Ubuntu', sans-serif; \n font-size : 17px ;\n width : 600px ; \n margin : 75px auto ; \n background : #2c3e50; \n height : 350px ; \n border-radius : 5px ;\n display : relative ; \n box-shadow: 10px 10px 10px #888888;\n}\n\n.afterclose {\n color : #34495e ; \n display: none ; \n text-align: center ; \n}\n\n.open {\n color : #fff ; \n padding : 15px ; \n background: #2ecc71 ; \n border-radius: 4px ; \n border: none ; \n}\n\n.bash {\n width : 600px ; \n background : #34495e; \n height : 310px ; \n border-radius : 5px ;\n top: 40px;\n display : absolute; \n color : #fff ;\n text-align: left;\n .command{\n &::before{\n content: \"user@machine $ : \";\n color: #2ecc71;\n }\n\n }\n .resulta{\n &::before{\n content: \">>\";\n color: #2ecc71;\n }\n\n }\n}\n\n/* effected by controllers */\n\n.windowmax {\n width : 100% ; \n margin : auto ; \n background : #2c3e50; \n height : 1000px; \n border-radius : 5px ;\n display : relative ; \n}\n\n.windowmin {\n width : 300px ; \n height : 45px ;\n background : #2c3e50; \n border-radius : 5px ; \n bottom : 0 ; \n position: fixed;\n}\n\n.bashmax {\n display : absolute ; \n width : 100% ; \n background : #34495e; \n height : 960px ; \n border-radius : 5px ;\n bottom: 0;\n color : #fff ;\n}\n\n/* !--end--! */\n\n.buttons {\n width : 15px ;\n height : 15px ; \n border-radius : 50% ;\n float : right ; \n margin : 13px 4px;\n border: none ; \n}\n\n.close {\n background : #e74c3c ;\n}\n\n.maximize{\n background : #f1c40f ;\n}\n\n.minimize{\n background : #2ecc71 ;\n}\n\n.result {\n display : none ;\n}\n\n.controls {\n height : 40px ; \n top : 0 ; \n}\n\n.title {\n color : #fff ; \n font-weight: bold ; \n padding : 10px;\n}\n",".material-tooltip {\n padding: 10px 8px;\n font-size: 1rem;\n z-index: 2000;\n border-radius: 2px;\n color: #fff;\n min-height: 36px;\n line-height: 120%;\n opacity: 0;\n position: absolute;\n text-align: center;\n max-width: calc(100% - 4px);\n overflow: hidden;\n left: 0;\n top: 0;\n pointer-events: none;\n visibility: hidden;\n background-color: #323232;\n}\n\n.backdrop {\n position: absolute;\n opacity: 0;\n height: 7px;\n width: 14px;\n border-radius: 0 0 50% 50%;\n background-color: #323232;\n z-index: -1;\n transform-origin: 50% 0%;\n visibility: hidden;\n}\n","// Z-levels\n.shadow-0 {\n box-shadow: none !important;\n}\n\n/* 2dp elevation modified*/\n.shadow-1 {\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),\n 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2);\n}\n.shadow-1-half {\n box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.14), 0 1px 7px 0 rgba(0, 0, 0, 0.12),\n 0 3px 1px -1px rgba(0, 0, 0, 0.2);\n}\n\n/* 6dp elevation modified*/\n.shadow-2 {\n box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12),\n 0 2px 4px -1px rgba(0, 0, 0, 0.3);\n}\n\n/* 12dp elevation modified*/\n.shadow-3 {\n box-shadow: 0 8px 17px 2px rgba(0, 0, 0, 0.14),\n 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2);\n}\n\n/* 16dp elevation */\n.shadow-4 {\n box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14),\n 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -7px rgba(0, 0, 0, 0.2);\n}\n\n/* 24dp elevation */\n.shadow-5 {\n box-shadow: 0 24px 38px 3px rgba(0, 0, 0, 0.14),\n 0 9px 46px 8px rgba(0, 0, 0, 0.12), 0 11px 15px -7px rgba(0, 0, 0, 0.2);\n}\n\n/* 24dp elevation */\n.invert-shadow-5 {\n box-shadow: \n 38px 0 0 0 rgba(0, 0, 0, 0.14),\n 46px 0 0 0 rgba(0, 0, 0, 0.12), \n 15px 0 0 0 rgba(0, 0, 0, 0.2);\n }\n\n.hoverable {\n transition: box-shadow 0.25s;\n\n &:hover {\n box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2),\n 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n }\n}\n","\n/*!\n * Waves v0.6.0\n * http://fian.my.id/Waves\n *\n * Copyright 2014 Alfiana E. Sibuea and other contributors\n * Released under the MIT license\n * https://github.com/fians/Waves/blob/master/LICENSE\n */\n\n\n.waves-effect {\n position: relative;\n cursor: pointer;\n display: inline-block;\n overflow: hidden;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n vertical-align: middle;\n z-index: 1;\n transition: .3s ease-out;\n\n .waves-ripple {\n position: absolute;\n border-radius: 50%;\n width: 20px;\n height: 20px;\n margin-top:-10px;\n margin-left:-10px;\n opacity: 0;\n\n background: rgba(0,0,0,0.2);\n transition: all 0.7s ease-out;\n transition-property: transform, opacity;\n transform: scale(0);\n pointer-events: none;\n }\n\n // Waves Colors\n &.waves-light .waves-ripple {\n background-color: rgba(255, 255, 255, 0.45);\n }\n &.waves-red .waves-ripple {\n background-color: rgba(244, 67, 54, .70);\n }\n &.waves-yellow .waves-ripple {\n background-color: rgba(255, 235, 59, .70);\n }\n &.waves-orange .waves-ripple {\n background-color: rgba(255, 152, 0, .70);\n }\n &.waves-purple .waves-ripple {\n background-color: rgba(156, 39, 176, 0.70);\n }\n &.waves-green .waves-ripple {\n background-color: rgba(76, 175, 80, 0.70);\n }\n &.waves-teal .waves-ripple {\n background-color: rgba(0, 150, 136, 0.70);\n }\n\n // Style input button bug.\n input[type=\"button\"], input[type=\"reset\"], input[type=\"submit\"] {\n border: 0;\n font-style: normal;\n font-size: inherit;\n text-transform: inherit;\n background: none;\n }\n\n img {\n position: relative;\n z-index: -1;\n }\n}\n\n.waves-notransition {\n transition: none #{\"!important\"};\n}\n\n.waves-circle {\n transform: translateZ(0);\n -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%);\n}\n\n.waves-input-wrapper {\n border-radius: 0.2em;\n vertical-align: bottom;\n\n .waves-button-input {\n position: relative;\n top: 0;\n left: 0;\n z-index: 1;\n }\n}\n\n.waves-circle {\n text-align: center;\n width: 2.5em;\n height: 2.5em;\n line-height: 2.5em;\n border-radius: 50%;\n -webkit-mask-image: none;\n}\n\n.waves-block {\n display: block;\n}\n\n/* Firefox Bug: link not triggered */\n.waves-effect .waves-ripple {\n z-index: -1;\n}",".modal {\n &:focus {\n outline: none;\n }\n\n @extend .shadow-5;\n\n //display: none;\n position: fixed;\n left: 0;\n right: 0;\n background-color: #fafafa;\n padding: 0;\n max-height: 70%;\n width: 55%;\n margin: auto;\n overflow-y: auto;\n\n border-radius: 2px;\n will-change: top, opacity;\n\n @media #{$medium-and-down} {\n width: 80%;\n }\n\n h1,h2,h3,h4 {\n margin-top: 0;\n }\n\n .modal-content {\n padding: 24px;\n }\n .modal-close {\n cursor: pointer;\n }\n\n .modal-footer {\n border-radius: 0 0 2px 2px;\n background-color: #fafafa;\n padding: 4px 6px;\n height: 56px;\n width: 100%;\n text-align: right;\n\n .btn, .btn-flat {\n margin: 6px 0;\n }\n }\n .modal-header {\n border-radius: 2px 2px 0 0 ;\n background-color: #fafafa;\n padding: 6px 4px;\n height: 56px;\n width: 100%;\n text-align: right;\n\n .btn, .btn-flat {\n margin: 6px 0;\n }\n }\n}\n.modal-overlay {\n position: fixed;\n z-index: 999;\n top: -25%;\n left: 0;\n bottom: 0;\n right: 0;\n height: 125%;\n width: 100%;\n background: #000;\n display: none;\n\n will-change: opacity;\n}\n\n// Modal with fixed action footer\n.modal.modal-fixed-footer {\n padding: 0;\n height: 70%;\n\n .modal-content {\n position: absolute;\n height: calc(100% - 56px);\n max-height: 100%;\n width: 100%;\n overflow-y: auto;\n }\n\n .modal-footer {\n border-top: 1px solid rgba(0,0,0,.1);\n position: absolute;\n bottom: 0;\n }\n}\n\n// Modal Bottom Sheet Style\n.modal.bottom-sheet {\n top: auto;\n bottom: -100%;\n margin: 0;\n width: 100%;\n max-height: 45%;\n border-radius: 0;\n will-change: bottom, opacity;\n}\n","html,\nbody,\n#root {\n margin: 0;\n height: 100%;\n}\n\n\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\n.noselect {\n -webkit-touch-callout: none; /* iOS Safari */\n -webkit-user-select: none; /* Safari */\n -khtml-user-select: none; /* Konqueror HTML */\n -moz-user-select: none; /* Old versions of Firefox */\n -ms-user-select: none; /* Internet Explorer/Edge */\n user-select: none;\n /* Non-prefixed version, currently\n supported by Chrome, Edge, Opera and Firefox */\n}\n\nul {\n &:not(.browser-default) {\n padding-left: 0;\n list-style-type: none;\n\n & > li {\n list-style-type: none;\n }\n }\n}\n\na {\n\tcolor: $link-color;\n\ttext-decoration: none;\n\n // Gets rid of tap active state\n -webkit-tap-highlight-color: transparent;\n}\n\n.w-100 {\n width: 100%;\n}\n\n.right-align {\n text-align: right;\n}\n.center-align{\n text-align: center;\n}\n\n.v-center {\n display: flex;\n align-items: center;\n}\n\n\n.mb1 {\n margin-bottom: 10px;\n}\n\n\n// Collections\n.collection {\n margin: $element-top-margin 0 $element-bottom-margin 0;\n border: 1px solid $collection-border-color;\n border-radius: 2px;\n overflow: hidden;\n position: relative;\n .collection-item {\n background-color: $collection-bg-color;\n line-height: $collection-line-height;\n padding: 10px 20px;\n margin: 0;\n border-bottom: 1px solid $collection-border-color;\n\n &.hover {\n &:hover {\n background-color: $collection-hover-bg-color;\n }\n }\n\n // Avatar Collection\n &.avatar {\n min-height: 84px;\n padding-left: 72px;\n position: relative;\n\n\n // Don't style circles inside preloader classes.\n &:not(.circle-clipper) > .circle,\n :not(.circle-clipper) > .circle {\n position: absolute;\n width: 42px;\n height: 42px;\n overflow: hidden;\n left: 15px;\n display: inline-block;\n vertical-align: middle;\n }\n\n i.circle {\n font-size: 18px;\n line-height: 42px;\n color: #fff;\n background-color: #999;\n text-align: center;\n }\n\n\n .title {\n font-size: 16px;\n }\n\n p {\n margin: 0;\n }\n\n .secondary-content {\n position: absolute;\n top: 16px;\n right: 16px;\n }\n\n }\n\n\n &:last-child {\n border-bottom: none;\n }\n\n &.active {\n background-color: $collection-active-bg-color;\n color: $collection-active-color;\n\n .secondary-content {\n color: #fff;\n }\n }\n }\n\n a.collection-item {\n display: block;\n transition: .25s;\n color: $collection-link-color;\n\n &:not(.active) {\n &:hover {\n background-color: $collection-hover-bg-color;\n }\n }\n }\n\n &.with-header {\n .collection-header {\n background-color: $collection-bg-color;\n border-bottom: 1px solid $collection-border-color;\n padding: 10px 20px;\n }\n\n .collection-item {\n padding-left: 30px;\n }\n\n .collection-item.avatar {\n padding-left: 72px;\n }\n }\n\n}\n\n// Made less specific to allow easier overriding\n.secondary-content {\n float: right;\n color: $secondary-color;\n}\n\n.collapsible .collection {\n margin: 0;\n border: none;\n}\n\n\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 100vh;\n width: 100vw;\n padding: 20px 0 20px 0;\n background-color: rgba(0, 0, 0, .5);\n z-index: 999;\n display: flex;\n justify-content: center;\n //align-items: center;\n .innerform{\n max-width: 650px;\n form{\n overflow: hidden;\n }\n }\n}\n\n\n\n\n\n\n\n\n\n\n\n/*********************\n Media Query Classes\n**********************/\n.hide-on-small-only, .hide-on-small-and-down {\n @media #{$small-and-down} {\n display: none !important;\n }\n}\n.hide-on-med-and-down {\n @media #{$medium-and-down} {\n display: none !important;\n }\n}\n.hide-on-med-and-up {\n @media #{$medium-and-up} {\n display: none !important;\n }\n}\n.hide-on-med-only {\n @media only screen and (min-width: $small-screen) and (max-width: $medium-screen) {\n display: none !important;\n }\n}\n.hide-on-large-only {\n @media #{$large-and-up} {\n display: none !important;\n }\n}\n.hide-on-extra-large-only {\n @media #{$extra-large-and-up} {\n display: none !important;\n }\n}\n.show-on-extra-large {\n @media #{$extra-large-and-up} {\n display: block !important;\n }\n}\n.show-on-large {\n @media #{$large-and-up} {\n display: block !important;\n }\n}\n.show-on-medium {\n @media only screen and (min-width: $small-screen) and (max-width: $medium-screen) {\n display: block !important;\n }\n}\n.show-on-small {\n @media #{$small-and-down} {\n display: block !important;\n }\n}\n.show-on-medium-and-up {\n @media #{$medium-and-up} {\n display: block !important;\n }\n}\n.show-on-medium-and-down {\n @media #{$medium-and-down} {\n display: block !important;\n }\n}\n\n\n// Center text on mobile\n.center-on-small-only {\n @media #{$small-and-down} {\n text-align: center;\n }\n}\n\n\n\n\n\n\n\n\n/*******************\n Utility Classes\n*******************/\n\n.hide {\n display: none !important;\n}\n\n// Text Align\n.left-align {\n text-align: left;\n}\n.right-align {\n text-align: right\n}\n.center, .center-align {\n text-align: center;\n}\n\n.left {\n float: left !important;\n}\n.right {\n float: right !important;\n}\n\n// No Text Select\n.no-select {\n user-select: none;\n}\n\n.circle {\n border-radius: 50%;\n}\n\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n.truncate {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.no-padding {\n padding: 0 !important;\n}\n","@use \"sass:math\";\n$primary-color: color(\"blue\", \"lighten-3\") !default;\n$primary-color-light: lighten($primary-color, 15%) !default;\n$primary-color-dark: darken($primary-color, 15%) !default;\n\n$secondary-color: color(\"teal\", \"lighten-1\") !default;\n$success-color: color(\"green\", \"base\") !default;\n$error-color: color(\"red\", \"base\") !default;\n$link-color: color(\"light-blue\", \"darken-1\") !default;\n\n\n\n// 2. Badges\n// ==========================================================================\n\n$badge-bg-color: $secondary-color !default;\n$badge-height: 22px !default;\n\n\n\n// 7. Chips\n// ==========================================================================\n\n$chip-bg-color: #e4e4e4 !default;\n$chip-border-color: #9e9e9e !default;\n$chip-selected-color: #26a69a !default;\n$chip-margin: 5px !default;\n\n\n// 16. Spinners | Loaders\n// ==========================================================================\n\n$spinner-default-color: $secondary-color !default;\n\n// 24. Progress Bar\n// ==========================================================================\n\n$progress-bar-color: $secondary-color !default;\n\n\n\n\n\n//inputs\n\n$input-height: 56px;\n\n// 6. Collapsible\n// ==========================================================================\n\n$collapsible-height: 3rem !default;\n$collapsible-line-height: $collapsible-height !default;\n$collapsible-header-color: #fff !default;\n$collapsible-border-color: #ddd !default;\n\n// 10. Forms\n// ==========================================================================\n\n// Text Inputs + Textarea\n$input-height: 3rem !default;\n$input-border-color: color(\"grey\", \"base\") !default;\n$input-border: 1px solid $input-border-color !default;\n$input-background: #fff !default;\n$input-error-color: $error-color !default;\n$input-success-color: $success-color !default;\n$input-focus-color: $secondary-color !default;\n$input-font-size: 16px !default;\n$input-margin-bottom: 8px;\n$input-margin: 0 0 $input-margin-bottom 0 !default;\n$input-padding: 0 !default;\n$label-font-size: .8rem !default;\n$input-disabled-color: rgba(0,0,0, .42) !default;\n$input-disabled-solid-color: #949494 !default;\n$input-disabled-border: 1px dotted $input-disabled-color !default;\n$input-invalid-border: 1px solid $input-error-color !default;\n$input-icon-size: 2rem;\n$placeholder-text-color: lighten($input-border-color, 20%) !default;\n\n// Radio Buttons\n$radio-fill-color: $secondary-color !default;\n$radio-empty-color: #5a5a5a !default;\n$radio-border: 2px solid $radio-fill-color !default;\n\n// Range\n$range-height: 14px !default;\n$range-width: 14px !default;\n$track-height: 3px !default;\n\n// Select\n$select-border: 1px solid #f2f2f2 !default;\n$select-background: rgba(255, 255, 255, 0.90) !default;\n$select-focus: 1px solid lighten($secondary-color, 47%) !default;\n$select-option-hover: rgba(0,0,0,.08) !default;\n$select-option-focus: rgba(0,0,0,.08) !default;\n$select-option-selected: rgba(0,0,0,.03) !default;\n$select-padding: 5px !default;\n$select-radius: 2px !default;\n$select-disabled-color: rgba(0,0,0,.3) !default;\n\n// Switches\n$switch-bg-color: $secondary-color !default;\n$switch-checked-lever-bg: desaturate(lighten($switch-bg-color, 25%), 25%) !default;\n$switch-unchecked-bg: #F1F1F1 !default;\n$switch-unchecked-lever-bg: rgba(0,0,0,.38) !default;\n$switch-radius: 15px !default;\n\n// 11. Global\n// ==========================================================================\n\n// Media Query Ranges\n$small-screen-up: 601px !default;\n$medium-screen-up: 993px !default;\n$large-screen-up: 1201px !default;\n$small-screen: 600px !default;\n$medium-screen: 992px !default;\n$large-screen: 1200px !default;\n\n$medium-and-up: \"only screen and (min-width : #{$small-screen-up})\" !default;\n$large-and-up: \"only screen and (min-width : #{$medium-screen-up})\" !default;\n$extra-large-and-up: \"only screen and (min-width : #{$large-screen-up})\" !default;\n$small-and-down: \"only screen and (max-width : #{$small-screen})\" !default;\n$medium-and-down: \"only screen and (max-width : #{$medium-screen})\" !default;\n$medium-only: \"only screen and (min-width : #{$small-screen-up}) and (max-width : #{$medium-screen})\" !default;\n\n\n\n// 12. Grid\n// ==========================================================================\n\n$num-cols: 12 !default;\n$gutter-width: 1rem !default;\n$element-top-margin: math.div($gutter-width, 3) !default;\n$element-bottom-margin: math.div($gutter-width * 2, 3) !default;\n\n// 13. Navigation Bar\n// ==========================================================================\n\n$navbar-height: 64px !default;\n$navbar-line-height: $navbar-height !default;\n$navbar-height-mobile: 56px !default;\n$navbar-line-height-mobile: $navbar-height-mobile !default;\n$navbar-font-size: 1rem !default;\n$navbar-font-color: #fff !default;\n$navbar-brand-font-size: 2.1rem !default;\n\n\n// 14. Side Navigation\n// ==========================================================================\n$button-raised-color: #fff !default;\n$button-flat-color: #343434 !default;\n$button-raised-background: #343434 !default;\n$primary-color:#343434 !default;\n\n\n \n$sidenav-width: 300px !default;\n$sidenav-font-size: 14px !default;\n$sidenav-font-color: rgba(0,0,0,.87) !default;\n$sidenav-bg-color: #fff !default;\n$sidenav-padding: 15px !default;\n$sidenav-item-height: 45px !default;\n$sidenav-line-height: $sidenav-item-height !default;\n\n\n\n\n\n\n// 3. Buttons\n// ==========================================================================\n\n$primary-color: green !default;\n$primary-color-light: lighten($primary-color, 15%) !default;\n$primary-color-dark: darken($primary-color, 15%) !default;\n$secondary-color: red !default;\n\n\n// Shared styles\n$button-border: none !default;\n$button-background-focus: lighten($secondary-color, 4%) !default;\n$button-font-size: 14px !default;\n$button-icon-font-size: 1.3rem !default;\n$button-height: 36px !default;\n$button-padding: 0 16px !default;\n$button-radius: 2px !default;\n\n// Disabled styles\n$button-disabled-background: #DFDFDF !default;\n$button-disabled-color: #9F9F9F !default;\n\n// Raised buttons\n$button-raised-background: $secondary-color !default;\n$button-raised-background-hover: lighten($button-raised-background, 5%) !default;\n$button-raised-color: #fff !default;\n\n// Large buttons\n$button-large-font-size: 15px !default;\n$button-large-icon-font-size: 1.6rem !default;\n$button-large-height: $button-height * 1.5 !default;\n$button-floating-large-size: 56px !default;\n\n// Small buttons\n$button-small-font-size: 13px !default;\n$button-small-icon-font-size: 1.2rem !default;\n$button-small-height: $button-height * .9 !default;\n$button-floating-small-size: $button-height * .9 !default;\n\n// Flat buttons\n$button-flat-color: #343434 !default;\n$button-flat-disabled-color: lighten(#999, 10%) !default;\n\n// Floating buttons\n$button-floating-background: $secondary-color !default;\n$button-floating-background-hover: $button-floating-background !default;\n$button-floating-color: #fff !default;\n$button-floating-size: 40px !default;\n$button-floating-radius: 50% !default;\n\n\n\n\n// 4. Cards\n// ==========================================================================\n\n$card-padding: 24px !default;\n$card-bg-color: #fff !default;\n$card-link-color: color(\"orange\", \"accent-2\") !default;\n$card-link-color-light: lighten($card-link-color, 20%) !default;\n\n\n\n\n\n\n// 23. Collections\n// ==========================================================================\n\n$collection-border-color: #e0e0e0 !default;\n$collection-bg-color: #fff !default;\n$collection-active-bg-color: $secondary-color !default;\n$collection-active-color: lighten($secondary-color, 55%) !default;\n$collection-hover-bg-color: #ddd !default;\n$collection-link-color: $secondary-color !default;\n$collection-line-height: 1.5rem !default;\n\n\n\n\n\n// 9. Dropdown\n// ==========================================================================\n\n$dropdown-bg-color: #fff !default;\n$dropdown-hover-bg-color: #eee !default;\n$dropdown-color: $secondary-color !default;\n$dropdown-item-height: 50px !default;\n\n\n$off-black: rgba(0, 0, 0, 0.87) !default;","// Badges\nspan.badge {\n min-width: 3rem;\n padding: 0 6px;\n margin-left: 14px;\n text-align: center;\n font-size: 1rem;\n line-height: $badge-height;\n height: $badge-height;\n color: color('grey', 'darken-1');\n float: right;\n box-sizing: border-box;\n\n &.new {\n font-weight: 300;\n font-size: 0.8rem;\n color: #fff;\n background-color: $badge-bg-color;\n border-radius: 2px;\n }\n\n &.new:after {\n content: \" new\";\n }\n\n &[data-badge-caption]::after {\n content: \" \" attr(data-badge-caption);\n }\n}\n\n// Special cases\nnav ul a span.badge {\n display: inline-block;\n float: none;\n margin-left: 4px;\n line-height: $badge-height;\n height: $badge-height;\n -webkit-font-smoothing: auto;\n}\n\n// Line height centering\n.collection-item span.badge {\n margin-top: calc(calc($collection-line-height / 2) - calc($badge-height / 2));\n}\n\n.collapsible span.badge {\n margin-left: auto;\n}\n\n.sidenav span.badge {\n margin-top: calc(calc($sidenav-line-height / 2) - calc($badge-height / 2));\n}\n\ntable span.badge {\n display: inline-block;\n float: none;\n margin-left: auto;\n}\n",".chip {\n &:focus {\n outline: none;\n background-color: $chip-selected-color;\n color: #fff;\n }\n\n display: inline-block;\n height: 32px;\n font-size: 13px;\n font-weight: 500;\n color: rgba(0,0,0,.6);\n line-height: 32px;\n padding: 0 12px;\n border-radius: 16px;\n background-color: $chip-bg-color;\n margin-bottom: $chip-margin;\n margin-right: $chip-margin;\n\n > img {\n float: left;\n margin: 0 8px 0 -12px;\n height: 32px;\n width: 32px;\n border-radius: 50%;\n }\n\n .close {\n cursor: pointer;\n float: right;\n font-size: 16px;\n line-height: 32px;\n padding-left: 8px;\n }\n}\n\n.chips {\n border: none;\n border-bottom: 1px solid $chip-border-color;\n box-shadow: none;\n margin: $input-margin;\n min-height: 45px;\n outline: none;\n transition: all .3s;\n\n &.focus {\n border-bottom: 1px solid $chip-selected-color;\n box-shadow: 0 1px 0 0 $chip-selected-color;\n }\n\n &:hover {\n cursor: text;\n }\n\n .input {\n background: none;\n border: 0;\n color: rgba(0,0,0,.6);\n display: inline-block;\n font-size: $input-font-size;\n height: $input-height;\n line-height: 32px;\n outline: 0;\n margin: 0;\n padding: 0 !important;\n width: 120px !important;\n }\n\n .input:focus {\n border: 0 !important;\n box-shadow: none !important;\n }\n\n // Autocomplete\n .autocomplete-content {\n margin-top: 0;\n margin-bottom: 0;\n }\n}\n\n// Form prefix\n.prefix ~ .chips {\n margin-left: 3rem;\n width: 92%;\n width: calc(100% - 3rem);\n}\n.chips:empty ~ label {\n font-size: 0.8rem;\n transform: translateY(-140%);\n}\n",".collapsible {\n border-top: 1px solid $collapsible-border-color;\n border-right: 1px solid $collapsible-border-color;\n border-left: 1px solid $collapsible-border-color;\n margin: $element-top-margin 0 $element-bottom-margin 0;\n @extend .shadow-1;\n}\n\n.collapsible-header {\n &:focus {\n outline: 0\n }\n\n display: flex;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n line-height: 1.5;\n padding: 1rem;\n background-color: $collapsible-header-color;\n border-bottom: 1px solid $collapsible-border-color;\n\n i {\n width: 2rem;\n font-size: 1.6rem;\n display: inline-block;\n text-align: center;\n margin-right: 1rem;\n }\n}\n.keyboard-focused .collapsible-header:focus {\n background-color: #eee;\n}\n\n.collapsible-body {\n display: none;\n border-bottom: 1px solid $collapsible-border-color;\n box-sizing: border-box;\n padding: 2rem;\n}\n\n// Sidenav collapsible styling\n.sidenav,\n.sidenav.fixed {\n\n .collapsible {\n border: none;\n box-shadow: none;\n\n li { padding: 0; }\n }\n\n .collapsible-header {\n background-color: transparent;\n border: none;\n line-height: inherit;\n height: inherit;\n padding: 0 $sidenav-padding;\n\n &:hover { background-color: rgba(0,0,0,.05); }\n i { line-height: inherit; }\n }\n\n .collapsible-body {\n border: 0;\n background-color: $collapsible-header-color;\n\n li a {\n padding: 0 (7.5px + $sidenav-padding)\n 0 (15px + $sidenav-padding);\n }\n }\n\n}\n\n// Popout Collapsible\n\n.collapsible.popout {\n border: none;\n box-shadow: none;\n > li {\n box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);\n // transform: scaleX(.92);\n margin: 0 24px;\n transition: margin .35s cubic-bezier(0.250, 0.460, 0.450, 0.940);\n }\n > li.active {\n box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);\n margin: 16px 0;\n // transform: scaleX(1);\n }\n}\n","// 23. Collections - variables\n// ==========================================================================\n\n$collection-border-color: #e0e0e0 !default;\n$collection-bg-color: #fff !default;\n$collection-active-bg-color: $secondary-color !default;\n$collection-active-color: lighten($secondary-color, 55%) !default;\n$collection-hover-bg-color: #ddd !default;\n$collection-link-color: $secondary-color !default;\n$collection-line-height: 1.5rem !default;\n// 23. Collections\n// ==========================================================================\n\n.collection {\n margin: $element-top-margin 0 $element-bottom-margin 0;\n border: 1px solid $collection-border-color;\n border-radius: 2px;\n overflow: hidden;\n position: relative;\n \n .collection-item {\n background-color: $collection-bg-color;\n line-height: $collection-line-height;\n padding: 10px 20px;\n margin: 0;\n border-bottom: 1px solid $collection-border-color;\n \n // Avatar Collection\n &.avatar {\n min-height: 84px;\n padding-left: 72px;\n position: relative;\n \n // Don't style circles inside preloader classes.\n &:not(.circle-clipper) > .circle,\n :not(.circle-clipper) > .circle {\n position: absolute;\n width: 42px;\n height: 42px;\n overflow: hidden;\n left: 15px;\n display: inline-block;\n vertical-align: middle;\n }\n i.circle {\n font-size: 18px;\n line-height: 42px;\n color: #fff;\n background-color: #999;\n text-align: center;\n }\n \n \n .title {\n font-size: 16px;\n }\n \n p {\n margin: 0;\n }\n \n .secondary-content {\n position: absolute;\n top: 16px;\n right: 16px;\n }\n \n }\n \n \n &:last-child {\n border-bottom: none;\n }\n \n &.active {\n background-color: $collection-active-bg-color;\n color: $collection-active-color;\n \n .secondary-content {\n color: #fff;\n }\n }\n }\n a.collection-item{\n display: block;\n transition: .25s;\n color: $collection-link-color;\n &:not(.active) {\n &:hover {\n background-color: $collection-hover-bg-color;\n }\n }\n }\n \n &.with-header {\n .collection-header {\n background-color: $collection-bg-color;\n border-bottom: 1px solid $collection-border-color;\n padding: 10px 20px;\n }\n .collection-item {\n padding-left: 30px;\n }\n .collection-item.avatar {\n padding-left: 72px;\n }\n }\n .secondary-content {\n float: right;\n color: $secondary-color;\n }\n }","// Remove Focus Boxes\nselect:focus {\n outline: $select-focus;\n}\n\nbutton:focus {\n outline: none;\n background-color: $button-background-focus;\n}\n\nlabel {\n font-size: $label-font-size;\n color: $input-border-color;\n}\n\n@import 'input-fields';\n@import 'radio-buttons';\n@import 'checkboxes';\n@import 'switches';\n@import 'select';\n@import 'file-input';\n@import 'range';\n","/* Text Inputs + Textarea\n ========================================================================== */\n\n/* Style Placeholders */\n@use \"sass:math\";\n::placeholder {\n color: $placeholder-text-color;\n}\n\n/* Text inputs */\n\ninput:not([type]),\ninput[type=text]:not(.browser-default),\ninput[type=password]:not(.browser-default),\ninput[type=email]:not(.browser-default),\ninput[type=url]:not(.browser-default),\ninput[type=time]:not(.browser-default),\ninput[type=date]:not(.browser-default),\ninput[type=datetime]:not(.browser-default),\ninput[type=datetime-local]:not(.browser-default),\ninput[type=tel]:not(.browser-default),\ninput[type=number]:not(.browser-default),\ninput[type=search]:not(.browser-default),\ntextarea.textarea {\n\n // General Styles\n background-color: transparent;\n border: none;\n border-bottom: $input-border;\n border-radius: 0;\n outline: none;\n height: $input-height;\n width: 100%;\n font-size: $input-font-size;\n margin: $input-margin;\n padding: $input-padding;\n box-shadow: none;\n box-sizing: content-box;\n transition: box-shadow .3s, border .3s;\n\n // Disabled input style\n &:disabled,\n &[readonly=\"readonly\"] {\n color: $input-disabled-color;\n border-bottom: $input-disabled-border;\n }\n\n // Disabled label style\n &:disabled+label,\n &[readonly=\"readonly\"]+label {\n color: $input-disabled-color;\n }\n\n // Focused input style\n &:focus:not([readonly]) {\n border-bottom: 1px solid $input-focus-color;\n box-shadow: 0 1px 0 0 $input-focus-color;\n }\n\n // Focused label style\n &:focus:not([readonly])+label {\n color: $input-focus-color;\n }\n\n // Hide helper text on data message\n &.valid ~ .helper-text[data-success],\n &:focus.valid ~ .helper-text[data-success],\n &.invalid ~ .helper-text[data-error],\n &:focus.invalid ~ .helper-text[data-error] {\n @extend %hidden-text;\n }\n\n // Valid Input Style\n &.valid,\n &:focus.valid {\n @extend %valid-input-style;\n }\n\n // Custom Success Message\n &.valid ~ .helper-text:after,\n &:focus.valid ~ .helper-text:after {\n @extend %custom-success-message;\n }\n &:focus.valid ~ label {\n color: $input-success-color;\n }\n\n // Invalid Input Style\n &.invalid,\n &:focus.invalid {\n @extend %invalid-input-style;\n }\n\n // Custom Error message\n &.invalid ~ .helper-text:after,\n &:focus.invalid ~ .helper-text:after {\n @extend %custom-error-message;\n }\n &:focus.invalid ~ label {\n color: $input-error-color;\n }\n\n // Full width label when using validate for error messages\n &.validate + label {\n width: 100%;\n }\n\n // Form Message Shared Styles\n & + label:after {\n @extend %input-after-style;\n }\n}\n\n\n/* Validation Sass Placeholders */\n%valid-input-style {\n border-bottom: 1px solid $input-success-color;\n box-shadow: 0 1px 0 0 $input-success-color;\n}\n%invalid-input-style {\n border-bottom: $input-invalid-border;\n box-shadow: 0 1px 0 0 $input-error-color;\n}\n%hidden-text {\n color: transparent;\n user-select: none;\n pointer-events: none;\n}\n%custom-success-message {\n content: attr(data-success);\n color: $input-success-color;\n}\n%custom-error-message {\n content: attr(data-error);\n color: $input-error-color;\n}\n%input-after-style {\n display: block;\n content: \"\";\n position: absolute;\n top: 100%;\n left: 0;\n opacity: 0;\n transition: .2s opacity ease-out, .2s color ease-out;\n}\n\n\n// Styling for input field wrapper\n.input-field {\n // Inline styles\n &.inline {\n display: inline-block;\n vertical-align: middle;\n margin-left: 5px;\n\n input,\n .select-dropdown {\n margin-bottom: 1rem;\n }\n }\n\n // Gutter spacing\n &.col {\n label {\n left: math.div($gutter-width, 2);\n }\n\n .prefix ~ label,\n .prefix ~ .validate ~ label {\n width: calc(100% - 3rem - #{$gutter-width});\n }\n }\n\n position: relative;\n margin-top: 1rem;\n margin-bottom: 1rem;\n\n & > label {\n color: $input-border-color;\n position: absolute;\n top: 0;\n left: 0;\n font-size: 1rem;\n cursor: text;\n transition: transform .2s ease-out, color .2s ease-out;\n transform-origin: 0% 100%;\n text-align: initial;\n transform: translateY(12px);\n\n &:not(.label-icon).active {\n transform: translateY(-14px) scale(.8);\n transform-origin: 0 0;\n }\n }\n\n // Autofill + date + time inputs\n & > input[type]:-webkit-autofill:not(.browser-default):not([type=\"search\"]) + label,\n & > input[type=date]:not(.browser-default) + label,\n & > input[type=time]:not(.browser-default) + label {\n transform: translateY(-14px) scale(.8);\n transform-origin: 0 0;\n }\n\n .helper-text {\n &::after {\n opacity: 1;\n position: absolute;\n top: 0;\n left: 0;\n }\n\n position: relative;\n min-height: 18px;\n display: block;\n font-size: 12px;\n color: rgba(0,0,0,.54);\n }\n\n // Prefix Icons\n .prefix {\n position: absolute;\n width: $input-height;\n font-size: $input-icon-size;\n transition: color .2s;\n // top: ($input-height - $input-icon-size) / 2;\n\n &.active { color: $input-focus-color; }\n }\n\n .prefix ~ input,\n .prefix ~ textarea,\n .prefix ~ label,\n .prefix ~ .validate ~ label,\n .prefix ~ .helper-text,\n .prefix ~ .autocomplete-content {\n margin-left: 3rem;\n width: 92%;\n width: calc(100% - 3rem);\n }\n\n .prefix ~ label { margin-left: 3rem; }\n\n @media #{$medium-and-down} {\n .prefix ~ input {\n width: 86%;\n width: calc(100% - 3rem);\n }\n }\n\n @media #{$small-and-down} {\n .prefix ~ input {\n width: 80%;\n width: calc(100% - 3rem);\n }\n }\n}\n\n\n/* Search Field */\n\n.input-field input[type=search] {\n display: block;\n line-height: inherit;\n transition: .3s background-color;\n\n .nav-wrapper & {\n height: inherit;\n padding-left: 4rem;\n width: calc(100% - 4rem);\n border: 0;\n box-shadow: none;\n }\n\n &:focus:not(.browser-default) {\n background-color: $input-background;\n border: 0;\n box-shadow: none;\n color: #444;\n\n & + label i,\n & ~ .mdi-navigation-close,\n & ~ .material-icons {\n color: #444;\n }\n }\n\n & + .label-icon {\n transform: none;\n left: 1rem;\n }\n\n & ~ .mdi-navigation-close,\n & ~ .material-icons {\n position: absolute;\n top: 0;\n right: 1rem;\n color: transparent;\n cursor: pointer;\n font-size: $input-icon-size;\n transition: .3s color;\n }\n}\n\n\n/* Textarea */\n\n// Default textarea\ntextarea {\n width: 100%;\n height: $input-height;\n background-color: transparent;\n\n &.textarea {\n line-height: normal;\n overflow-y: hidden; /* prevents scroll bar flash */\n padding: .8rem 0 .8rem 0; /* prevents text jump on Enter keypress */\n resize: none;\n min-height: $input-height;\n box-sizing: border-box;\n }\n}\n\n// For textarea autoresize\n\n.hiddendiv {\n visibility: hidden;\n white-space: pre-wrap;\n word-wrap: break-word;\n overflow-wrap: break-word; /* future version of deprecated 'word-wrap' */\n padding-top: 1.2rem; /* prevents text jump on Enter keypress */\n\n // Reduces repaints\n position: absolute;\n top: 0;\n z-index: -1;\n}\n\n\n/* Autocomplete */\n.autocomplete-content {\n li {\n .highlight { color: #444; }\n\n img {\n // height: $dropdown-item-height - 10;\n // width: $dropdown-item-height - 10;\n margin: 5px 15px;\n }\n }\n}\n\n/* Character Counter */\n.character-counter {\n min-height: 18px;\n}\n","/* Radio Buttons\n ========================================================================== */\n\n// Remove default Radio Buttons\n[type=\"radio\"]:not(:checked),\n[type=\"radio\"]:checked {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n\n[type=\"radio\"]:not(:checked) + span,\n[type=\"radio\"]:checked + span {\n position: relative;\n padding-left: 35px;\n cursor: pointer;\n display: inline-block;\n height: 25px;\n line-height: 25px;\n font-size: 1rem;\n transition: .28s ease;\n user-select: none;\n}\n\n[type=\"radio\"] + span:before,\n[type=\"radio\"] + span:after {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n margin: 4px;\n width: 16px;\n height: 16px;\n z-index: 0;\n transition: .28s ease;\n}\n\n/* Unchecked styles */\n[type=\"radio\"]:not(:checked) + span:before,\n[type=\"radio\"]:not(:checked) + span:after,\n[type=\"radio\"]:checked + span:before,\n[type=\"radio\"]:checked + span:after,\n[type=\"radio\"].with-gap:checked + span:before,\n[type=\"radio\"].with-gap:checked + span:after {\n border-radius: 50%;\n}\n\n[type=\"radio\"]:not(:checked) + span:before,\n[type=\"radio\"]:not(:checked) + span:after {\n border: 2px solid $radio-empty-color;\n}\n\n[type=\"radio\"]:not(:checked) + span:after {\n transform: scale(0);\n}\n\n/* Checked styles */\n[type=\"radio\"]:checked + span:before {\n border: 2px solid transparent;\n}\n\n[type=\"radio\"]:checked + span:after,\n[type=\"radio\"].with-gap:checked + span:before,\n[type=\"radio\"].with-gap:checked + span:after {\n border: $radio-border;\n}\n\n[type=\"radio\"]:checked + span:after,\n[type=\"radio\"].with-gap:checked + span:after {\n background-color: $radio-fill-color;\n}\n\n[type=\"radio\"]:checked + span:after {\n transform: scale(1.02);\n}\n\n/* Radio With gap */\n[type=\"radio\"].with-gap:checked + span:after {\n transform: scale(.5);\n}\n\n/* Focused styles */\n[type=\"radio\"].tabbed:focus + span:before {\n box-shadow: 0 0 0 10px rgba(0,0,0,.1);\n}\n\n/* Disabled Radio With gap */\n[type=\"radio\"].with-gap:disabled:checked + span:before {\n border: 2px solid $input-disabled-color;\n}\n\n[type=\"radio\"].with-gap:disabled:checked + span:after {\n border: none;\n background-color: $input-disabled-color;\n}\n\n/* Disabled style */\n[type=\"radio\"]:disabled:not(:checked) + span:before,\n[type=\"radio\"]:disabled:checked + span:before {\n background-color: transparent;\n border-color: $input-disabled-color;\n}\n\n[type=\"radio\"]:disabled + span {\n color: $input-disabled-color;\n}\n\n[type=\"radio\"]:disabled:not(:checked) + span:before {\n border-color: $input-disabled-color;\n}\n\n[type=\"radio\"]:disabled:checked + span:after {\n background-color: $input-disabled-color;\n border-color: $input-disabled-solid-color;\n}\n","/* Checkboxes\n ========================================================================== */\n\n/* Remove default checkbox */\n[type=\"checkbox\"]:not(:checked),\n[type=\"checkbox\"]:checked {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n\n// Checkbox Styles\n[type=\"checkbox\"] {\n // Text Label Style\n + span:not(.lever) {\n position: relative;\n padding-left: 35px;\n cursor: pointer;\n display: inline-block;\n height: 25px;\n line-height: 25px;\n font-size: 1rem;\n user-select: none;\n }\n\n /* checkbox aspect */\n + span:not(.lever):before,\n &:not(.filled-in) + span:not(.lever):after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 18px;\n height: 18px;\n z-index: 0;\n border: 2px solid $radio-empty-color;\n border-radius: 1px;\n margin-top: 3px;\n transition: .2s;\n }\n\n &:not(.filled-in) + span:not(.lever):after {\n border: 0;\n transform: scale(0);\n }\n\n &:not(:checked):disabled + span:not(.lever):before {\n border: none;\n background-color: $input-disabled-color;\n }\n\n // Focused styles\n &.tabbed:focus + span:not(.lever):after {\n transform: scale(1);\n border: 0;\n border-radius: 50%;\n box-shadow: 0 0 0 10px rgba(0,0,0,.1);\n background-color: rgba(0,0,0,.1);\n }\n}\n\n[type=\"checkbox\"]:checked {\n + span:not(.lever):before {\n top: -4px;\n left: -5px;\n width: 12px;\n height: 22px;\n border-top: 2px solid transparent;\n border-left: 2px solid transparent;\n border-right: $radio-border;\n border-bottom: $radio-border;\n transform: rotate(40deg);\n backface-visibility: hidden;\n transform-origin: 100% 100%;\n }\n\n &:disabled + span:before {\n border-right: 2px solid $input-disabled-color;\n border-bottom: 2px solid $input-disabled-color;\n }\n}\n\n/* Indeterminate checkbox */\n[type=\"checkbox\"]:indeterminate {\n + span:not(.lever):before {\n top: -11px;\n left: -12px;\n width: 10px;\n height: 22px;\n border-top: none;\n border-left: none;\n border-right: $radio-border;\n border-bottom: none;\n transform: rotate(90deg);\n backface-visibility: hidden;\n transform-origin: 100% 100%;\n }\n\n // Disabled indeterminate\n &:disabled + span:not(.lever):before {\n border-right: 2px solid $input-disabled-color;\n background-color: transparent;\n }\n}\n\n// Filled in Style\n[type=\"checkbox\"].filled-in {\n // General\n + span:not(.lever):after {\n border-radius: 2px;\n }\n\n + span:not(.lever):before,\n + span:not(.lever):after {\n content: '';\n left: 0;\n position: absolute;\n /* .1s delay is for check animation */\n transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s;\n z-index: 1;\n }\n\n // Unchecked style\n &:not(:checked) + span:not(.lever):before {\n width: 0;\n height: 0;\n border: 3px solid transparent;\n left: 6px;\n top: 10px;\n transform: rotateZ(37deg);\n transform-origin: 100% 100%;\n }\n\n &:not(:checked) + span:not(.lever):after {\n height: 20px;\n width: 20px;\n background-color: transparent;\n border: 2px solid $radio-empty-color;\n top: 0px;\n z-index: 0;\n }\n\n // Checked style\n &:checked {\n + span:not(.lever):before {\n top: 0;\n left: 1px;\n width: 8px;\n height: 13px;\n border-top: 2px solid transparent;\n border-left: 2px solid transparent;\n border-right: 2px solid $input-background;\n border-bottom: 2px solid $input-background;\n transform: rotateZ(37deg);\n transform-origin: 100% 100%;\n }\n\n + span:not(.lever):after {\n top: 0;\n width: 20px;\n height: 20px;\n border: 2px solid $secondary-color;\n background-color: $secondary-color;\n z-index: 0;\n }\n }\n\n // Focused styles\n &.tabbed:focus + span:not(.lever):after {\n border-radius: 2px;\n border-color: $radio-empty-color;\n background-color: rgba(0,0,0,.1);\n }\n\n &.tabbed:checked:focus + span:not(.lever):after {\n border-radius: 2px;\n background-color: $secondary-color;\n border-color: $secondary-color;\n }\n\n // Disabled style\n &:disabled:not(:checked) + span:not(.lever):before {\n background-color: transparent;\n border: 2px solid transparent;\n }\n\n &:disabled:not(:checked) + span:not(.lever):after {\n border-color: transparent;\n background-color: $input-disabled-solid-color;\n }\n\n &:disabled:checked + span:not(.lever):before {\n background-color: transparent;\n }\n\n &:disabled:checked + span:not(.lever):after {\n background-color: $input-disabled-solid-color;\n border-color: $input-disabled-solid-color;\n }\n}\n","/* Switch\n ========================================================================== */\n\n.switch,\n.switch * {\n -webkit-tap-highlight-color: transparent;\n user-select: none;\n}\n\n.switch label {\n cursor: pointer;\n}\n\n.switch label input[type=checkbox] {\n opacity: 0;\n width: 0;\n height: 0;\n\n &:checked + .lever {\n background-color: $switch-checked-lever-bg;\n\n &:before, &:after {\n left: 18px;\n }\n\n &:after {\n background-color: $switch-bg-color;\n }\n }\n}\n\n.switch label .lever {\n content: \"\";\n display: inline-block;\n position: relative;\n width: 36px;\n height: 14px;\n background-color: $switch-unchecked-lever-bg;\n border-radius: $switch-radius;\n //margin-right: 10px;\n transition: background 0.3s ease;\n vertical-align: middle;\n margin: 0 16px;\n\n &:before, &:after {\n content: \"\";\n position: absolute;\n display: inline-block;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n left: 0;\n top: -3px;\n transition: left 0.3s ease, background .3s ease, box-shadow 0.1s ease, transform .1s ease;\n }\n\n &:before {\n background-color: transparentize($switch-bg-color, .85);\n }\n\n &:after {\n background-color: $switch-unchecked-bg;\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n }\n}\n\n// Switch active style\ninput[type=checkbox]:checked:not(:disabled) ~ .lever:active::before,\ninput[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::before {\n transform: scale(2.4);\n background-color: transparentize($switch-bg-color, .85);\n}\n\ninput[type=checkbox]:not(:disabled) ~ .lever:active:before,\ninput[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::before {\n transform: scale(2.4);\n background-color: rgba(0,0,0,.08);\n}\n\n// Disabled Styles\n.switch input[type=checkbox][disabled] + .lever {\n cursor: default;\n background-color: rgba(0,0,0,.12);\n}\n\n.switch label input[type=checkbox][disabled] + .lever:after,\n.switch label input[type=checkbox][disabled]:checked + .lever:after {\n background-color: $input-disabled-solid-color;\n}\n","/* Select Field\n ========================================================================== */\n\nselect { display: none; }\nselect.browser-default { display: block; }\n\nselect {\n background-color: $select-background;\n width: 100%;\n padding: $select-padding;\n border: $select-border;\n border-radius: $select-radius;\n height: $input-height;\n}\n\n.select-label {\n position: absolute;\n}\n\n.select-wrapper {\n &.valid .helper-text[data-success],\n &.invalid ~ .helper-text[data-error] {\n @extend %hidden-text;\n }\n\n &.valid {\n & > input.select-dropdown {\n @extend %valid-input-style;\n }\n\n & ~ .helper-text:after {\n @extend %custom-success-message;\n }\n }\n\n &.invalid {\n & > input.select-dropdown,\n & > input.select-dropdown:focus {\n @extend %invalid-input-style;\n }\n\n & ~ .helper-text:after {\n @extend %custom-error-message;\n }\n }\n\n &.valid + label,\n &.invalid + label {\n width: 100%;\n pointer-events: none;\n }\n\n & + label:after {\n @extend %input-after-style;\n }\n\n position: relative;\n\n input.select-dropdown {\n &:focus {\n border-bottom: 1px solid $input-focus-color;\n }\n position: relative;\n cursor: pointer;\n background-color: transparent;\n border: none;\n border-bottom: $input-border;\n outline: none;\n height: $input-height;\n line-height: $input-height;\n width: 100%;\n font-size: $input-font-size;\n margin: $input-margin;\n padding: 0;\n display: block;\n user-select:none;\n z-index: 1;\n }\n\n .caret {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n margin: auto 0;\n z-index: 0;\n fill: rgba(0,0,0,.87);\n }\n\n & + label {\n position: absolute;\n top: -26px;\n font-size: $label-font-size;\n }\n}\n\n// Disabled styles\nselect:disabled {\n color: $input-disabled-color;\n}\n\n.select-wrapper.disabled {\n + label {\n color: $input-disabled-color;\n }\n .caret {\n fill: $input-disabled-color;\n }\n}\n\n.select-wrapper input.select-dropdown:disabled {\n color: $input-disabled-color;\n cursor: default;\n user-select: none;\n}\n\n.select-wrapper i {\n color: $select-disabled-color;\n}\n\n.select-dropdown li.disabled,\n.select-dropdown li.disabled > span,\n.select-dropdown li.optgroup {\n color: $select-disabled-color;\n background-color: transparent;\n}\n\nbody.keyboard-focused {\n .select-dropdown.dropdown-content li:focus {\n background-color: $select-option-focus;\n }\n}\n\n.select-dropdown.dropdown-content {\n li {\n &:hover {\n background-color: $select-option-hover;\n }\n\n &.selected {\n background-color: $select-option-selected;\n }\n }\n}\n\n// Prefix Icons\n.prefix ~ .select-wrapper {\n margin-left: 3rem;\n width: 92%;\n width: calc(100% - 3rem);\n}\n\n.prefix ~ label { margin-left: 3rem; }\n\n// Icons\n.select-dropdown li {\n img {\n // height: $dropdown-item-height - 10;\n // width: $dropdown-item-height - 10;\n margin: 5px 15px;\n float: right;\n }\n}\n\n// Optgroup styles\n.select-dropdown li.optgroup {\n // border-top: 1px solid $dropdown-hover-bg-color;\n\n &.selected > span {\n color: rgba(0, 0, 0, .7);\n }\n\n & > span {\n color: rgba(0, 0, 0, .4);\n }\n\n & ~ li.optgroup-option {\n padding-left: 1rem;\n }\n}\n","/* File Input\n ========================================================================== */\n\n.file-field {\n position: relative;\n\n .file-path-wrapper {\n overflow: hidden;\n padding-left: 10px;\n }\n\n input.file-path { width: 100%; }\n\n .btn {\n float: left;\n height: $input-height;\n line-height: $input-height;\n }\n\n span {\n cursor: pointer;\n }\n\n input[type=file] {\n\n // Needed to override webkit button\n &::-webkit-file-upload-button {\n display: none;\n }\n\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n margin: 0;\n padding: 0;\n font-size: 20px;\n cursor: pointer;\n opacity: 0;\n filter: alpha(opacity=0);\n }\n}\n","/* Range\n ========================================================================== */\n\n.range-field {\n position: relative;\n}\n\ninput[type=range],\ninput[type=range] + .thumb {\n // @extend .no-select;\n cursor: pointer;\n}\n\ninput[type=range] {\n position: relative;\n background-color: transparent;\n border: none;\n outline: none;\n width: 100%;\n margin: 15px 0;\n padding: 0;\n\n &:focus {\n outline: none;\n }\n}\n\ninput[type=range] + .thumb {\n position: absolute;\n top: 10px;\n left: 0;\n border: none;\n height: 0;\n width: 0;\n border-radius: 50%;\n background-color: $radio-fill-color;\n margin-left: 7px;\n\n transform-origin: 50% 50%;\n transform: rotate(-45deg);\n\n .value {\n display: block;\n width: 30px;\n text-align: center;\n color: $radio-fill-color;\n font-size: 0;\n transform: rotate(45deg);\n }\n\n &.active {\n border-radius: 50% 50% 50% 0;\n\n .value {\n color: $input-background;\n margin-left: -1px;\n margin-top: 8px;\n font-size: 10px;\n }\n }\n}\n\n// Shared\n@mixin range-track {\n height: $track-height;\n background: #c2c0c2;\n border: none;\n}\n\n@mixin range-thumb {\n border: none;\n height: $range-height;\n width: $range-width;\n border-radius: 50%;\n background: $radio-fill-color;\n transition: box-shadow .3s;\n}\n\n// WebKit\ninput[type=range] {\n -webkit-appearance: none;\n}\n\ninput[type=range]::-webkit-slider-runnable-track {\n @include range-track;\n}\n\ninput[type=range]::-webkit-slider-thumb {\n @include range-thumb;\n -webkit-appearance: none;\n background-color: $radio-fill-color;\n transform-origin: 50% 50%;\n margin: -5px 0 0 0;\n\n}\n\n.keyboard-focused input[type=range]:focus:not(.active)::-webkit-slider-thumb {\n box-shadow: 0 0 0 10px rgba($radio-fill-color, .26);\n}\n\n// FireFox\ninput[type=range] {\n /* fix for FF unable to apply focus style bug */\n border: 1px solid white;\n\n /*required for proper track sizing in FF*/\n}\n\ninput[type=range]::-moz-range-track {\n @include range-track;\n}\n\ninput[type=range]::-moz-focus-inner {\n border: 0;\n}\n\ninput[type=range]::-moz-range-thumb {\n @include range-thumb;\n margin-top: -5px;\n}\n\n// hide the outline behind the border\ninput[type=range]:-moz-focusring {\n outline: 1px solid #fff;\n outline-offset: -1px;\n}\n\n.keyboard-focused input[type=range]:focus:not(.active)::-moz-range-thumb {\n box-shadow: 0 0 0 10px rgba($radio-fill-color, .26);\n}\n\n// IE 10+\ninput[type=range]::-ms-track {\n height: $track-height;\n\n // remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead\n background: transparent;\n\n // leave room for the larger thumb to overflow with a transparent border */\n border-color: transparent;\n border-width: 6px 0;\n\n /*remove default tick marks*/\n color: transparent;\n}\n\ninput[type=range]::-ms-fill-lower {\n background: #777;\n}\n\ninput[type=range]::-ms-fill-upper {\n background: #ddd;\n}\n\ninput[type=range]::-ms-thumb {\n @include range-thumb;\n}\n\n.keyboard-focused input[type=range]:focus:not(.active)::-ms-thumb {\n box-shadow: 0 0 0 10px rgba($radio-fill-color, .26);\n}\n",".parallax {\n\n /* Set a specific height */\n min-height: 500px;\n\n /* Create the parallax scrolling effect */\n background-attachment: fixed;\n background-position: center;\n background-repeat: no-repeat;\n background-size: cover;\n}","$cube-height:200px;\n* { box-sizing: border-box; }\n\nbody { font-family: sans-serif; }\n\n.scene {\n width: $cube-height;\n height: $cube-height;\n border: 1px solid #CCC;\n margin: 80px;\n perspective: 400px;\n}\n\n.cube {\n width: $cube-height;\n height: $cube-height;\n position: relative;\n transform-style: preserve-3d;\n transform: translateZ(-400px);\n transition: transform 1s;\n}\n\n.cube.show-front { transform: translateZ(-10px) rotateY( 0deg); }\n.cube.show-right { transform: translateZ(-10px) rotateY( -90deg); }\n.cube.show-back { transform: translateZ(-10px) rotateY(-180deg); }\n.cube.show-left { transform: translateZ(-10px) rotateY( 90deg); }\n.cube.show-top { transform: translateZ(-10px) rotateX( -90deg); }\n.cube.show-bottom { transform: translateZ(-10px) rotateX( 90deg); }\n\n.cube__face {\n position: absolute;\n width: $cube-height;\n height: $cube-height;\n border: 2px solid black;\n line-height: $cube-height;\n font-size: 40px;\n font-weight: bold;\n color: white;\n text-align: center;\n}\n\n.cube__face--front { background: hsla( 0, 100%, 50%, 0.7); }\n.cube__face--right { background: hsla( 60, 100%, 50%, 0.7); }\n.cube__face--back { background: hsla(120, 100%, 50%, 0.7); }\n.cube__face--left { background: hsla(180, 100%, 50%, 0.7); }\n.cube__face--top { background: hsla(240, 100%, 50%, 0.7); }\n.cube__face--bottom { background: hsla(300, 100%, 50%, 0.7); }\n\n.cube__face--front { transform: rotateY( 0deg) translateZ(100px); }\n.cube__face--right { transform: rotateY( 90deg) translateZ(100px); }\n.cube__face--back { transform: rotateY(180deg) translateZ(100px); }\n.cube__face--left { transform: rotateY(-90deg) translateZ(100px); }\n.cube__face--top { transform: rotateX( 90deg) translateZ(100px); }\n.cube__face--bottom { transform: rotateX(-90deg) translateZ(100px); }\n\nlabel { margin-right: 10px; }","@use \"sass:math\";\n.container {\n margin: 0 auto;\n max-width: 1280px;\n width: 90%;\n}\n@media #{$medium-and-up} {\n .container {\n width: 85%;\n }\n}\n@media #{$large-and-up} {\n .container {\n width: 70%;\n }\n}\n.col .row {\n margin-left: math.div(-1 * $gutter-width , 2);\n margin-right: math.div(-1 * $gutter-width , 2);\n}\n\n.section {\n padding-top: 1rem;\n padding-bottom: 1rem;\n\n &.no-pad {\n padding: 0;\n }\n &.no-pad-bot {\n padding-bottom: 0;\n }\n &.no-pad-top {\n padding-top: 0;\n }\n}\n\n\n// Mixins to eliminate code repitition\n@mixin reset-offset {\n margin-left: auto;\n left: auto;\n right: auto;\n}\n@mixin grid-classes($size, $i, $perc) {\n &.offset-#{$size}#{$i} {\n margin-left: $perc;\n }\n &.pull-#{$size}#{$i} {\n right: $perc;\n }\n &.push-#{$size}#{$i} {\n left: $perc;\n }\n}\n\n\n.row {\n margin-left: auto;\n margin-right: auto;\n margin-bottom: 20px;\n\n // Clear floating children\n &:after {\n content: \"\";\n display: table;\n clear: both;\n }\n\n .col {\n float: left;\n box-sizing: border-box;\n padding: 0 math.div($gutter-width , 2);\n min-height: 1px;\n\n &[class*=\"push-\"],\n &[class*=\"pull-\"] {\n position: relative;\n }\n\n $i: 1;\n @while $i <= $num-cols {\n $perc: unquote(math.div(100 , math.div($num-cols , $i)) + \"%\");\n &.s#{$i} {\n width: $perc;\n @include reset-offset;\n }\n $i: $i + 1;\n }\n\n $i: 1;\n @while $i <= $num-cols {\n $perc: unquote(math.div(100 , math.div($num-cols , $i)) + \"%\");\n @include grid-classes(\"s\", $i, $perc);\n $i: $i + 1;\n }\n\n @media #{$medium-and-up} {\n\n $i: 1;\n @while $i <= $num-cols {\n $perc: unquote(math.div(100 , math.div($num-cols , $i)) + \"%\");\n &.m#{$i} {\n width: $perc;\n @include reset-offset;\n }\n $i: $i + 1\n }\n\n $i: 1;\n @while $i <= $num-cols {\n $perc: unquote(math.div(100 , math.div($num-cols , $i)) + \"%\");\n @include grid-classes(\"m\", $i, $perc);\n $i: $i + 1;\n }\n }\n\n @media #{$large-and-up} {\n\n $i: 1;\n @while $i <= $num-cols {\n $perc: unquote(math.div(100 , math.div($num-cols , $i)) + \"%\");\n &.l#{$i} {\n width: $perc;\n @include reset-offset;\n }\n $i: $i + 1;\n }\n\n $i: 1;\n @while $i <= $num-cols {\n $perc: unquote(math.div(100 , math.div($num-cols , $i)) + \"%\");\n @include grid-classes(\"l\", $i, $perc);\n $i: $i + 1;\n }\n }\n\n @media #{$extra-large-and-up} {\n\n $i: 1;\n @while $i <= $num-cols {\n $perc: unquote(math.div(100 , math.div($num-cols , $i)) + \"%\");\n &.xl#{$i} {\n width: $perc;\n @include reset-offset;\n }\n $i: $i + 1;\n }\n\n $i: 1;\n @while $i <= $num-cols {\n $perc: unquote(math.div(100 , math.div($num-cols , $i)) + \"%\");\n @include grid-classes(\"xl\", $i, $perc);\n $i: $i + 1;\n }\n }\n }\n}\n","@use \"sass:math\";\nsvg{\n //fill:red;\n}\n.sidenav {\n position: fixed;\n width: $sidenav-width;\n left: 0;\n top: 0;\n margin: 0;\n //transform: translateX(-100%);\n height: 100%;\n height: calc(100% + 60px);\n height: -moz-calc(100%); //Temporary Firefox Fix\n padding-bottom: 60px;\n background-color: $sidenav-bg-color;\n z-index: 999;\n overflow-y: auto;\n will-change: transform;\n backface-visibility: hidden;\n transform: translateX(-105%);\n transition: transform 1s;\n\n //@extend .shadow-1;\n\n // Right Align\n &.right-aligned {\n right: 0;\n //transform: translateX(105%);\n left: auto;\n transform: translateX(100%);\n }\n\n .collapsible {\n margin: 0;\n }\n\n\n li {\n float: none;\n //line-height: $sidenav-line-height;\n // margin: 15px 0;\n // height: 45px;\n .iconSideLink {\n display: flex;\n align-items: center;\n \n svg {\n //stroke:rgba(0, 0, 0, 0.2);\n // fill: white;\n stroke:rgba(0, 0, 0, 0.2);\n width: 30px;\n }\n \n }\n &.active {\n background-color: rgba(0, 0, 0, 0.05);\n svg {\n stroke: white!important;\n //fill: white!important;\n width: 30px;\n }\n }\n\n &.last {\n position: sticky;\n top: calc(100% - #{$sidenav-item-height} - 35px);\n }\n }\n\n li > a {\n color: $sidenav-font-color;\n display: flex;\n font-size: $sidenav-font-size;\n font-weight: 700;\n height: $sidenav-item-height;\n line-height: $sidenav-line-height;\n padding: 0 ($sidenav-padding * 2);\n\n &:hover {\n background-color: rgba(0, 0, 0, 0.05);\n }\n\n &.btn,\n &.btn-large,\n &.btn-flat,\n &.btn-floating {\n margin: 10px 15px;\n }\n\n &.btn,\n &.btn-large,\n &.btn-floating {\n color: $button-raised-color;\n }\n\n &.btn-flat {\n color: $button-flat-color;\n }\n\n &.btn:hover,\n &.btn-large:hover {\n background-color: lighten($button-raised-background, 5%);\n }\n\n &.btn-floating:hover {\n background-color: $button-raised-background;\n }\n\n & > i,\n & > [class^=\"mdi-\"],\n li > a > [class*=\"mdi-\"],\n & > i.s-icon {\n float: left;\n height: $sidenav-item-height;\n line-height: $sidenav-line-height;\n margin: 0 ($sidenav-padding * 2) 0 0;\n width: math.div($sidenav-item-height, 2);\n color: rgba(0, 0, 0, 0.54);\n }\n }\n\n .divider {\n margin: math.div($sidenav-padding, 2) 0 0 0;\n }\n\n .subheader {\n &:hover {\n background-color: transparent;\n }\n\n cursor: initial;\n pointer-events: none;\n color: rgba(0, 0, 0, 0.54);\n font-size: $sidenav-font-size;\n font-weight: 500;\n line-height: $sidenav-line-height;\n }\n\n .user-view {\n position: relative;\n padding: ($sidenav-padding * 2) ($sidenav-padding * 2) 0;\n margin-bottom: math.div($sidenav-padding, 2);\n\n & > a {\n &:hover {\n background-color: transparent;\n }\n\n height: auto;\n padding: 0;\n }\n\n .background {\n overflow: hidden;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n }\n\n .circle,\n .name,\n .email {\n display: block;\n }\n\n .circle {\n height: 64px;\n width: 64px;\n }\n\n .name,\n .email {\n font-size: $sidenav-font-size;\n line-height: math.div($sidenav-line-height, 2);\n }\n\n .name {\n margin-top: 16px;\n font-weight: 500;\n }\n\n .email {\n padding-bottom: 16px;\n font-weight: 400;\n }\n }\n}\n\n// Touch interaction\n.drag-target {\n // Right Align\n &.right-aligned {\n right: 0;\n }\n\n height: 100%;\n width: 10px;\n position: fixed;\n top: 0;\n z-index: 998;\n}\n\n// Fixed Sidenav shown\n.sidenav.sidenav-fixed {\n // Right Align\n &.right-aligned {\n right: 0;\n left: auto;\n }\n\n left: 0;\n transform: translateX(0);\n position: fixed;\n}\n\n// Fixed Sidenav hide on smaller\n@media #{$medium-and-down} {\n .sidenav {\n &.sidenav-fixed {\n transform: translateX(-105%);\n\n &.right-aligned {\n transform: translateX(105%);\n }\n }\n\n > a {\n padding: 0 $sidenav-padding;\n }\n\n .user-view {\n padding: $sidenav-padding $sidenav-padding 0;\n }\n }\n}\n\n.sidenav .collapsible-body > ul:not(.collapsible) > li.active,\n.sidenav.sidenav-fixed .collapsible-body > ul:not(.collapsible) > li.active {\n background-color: $primary-color;\n\n a {\n color: $sidenav-bg-color;\n }\n}\n\n.sidenav .collapsible-body {\n padding: 0;\n}\n\n.sidenav-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n opacity: 0;\n height: 120vh;\n background-color: rgba(0, 0, 0, 0.5);\n z-index: 997;\n display: none;\n}\n\n\n\n\n .with-side-nav-open{\n padding-left: 300px;\n transition: padding 1s;\n }\n","// shared styles\n\n.btn,\n.btn-flat {\n border: $button-border;\n border-radius: $button-radius;\n display: inline-block;\n height: $button-height;\n line-height: $button-height;\n padding: $button-padding;\n text-transform: uppercase;\n vertical-align: middle;\n -webkit-tap-highlight-color: transparent; // Gets rid of tap active state\n}\n\n// Disabled shared style\n.btn.disabled,\n.btn-floating.disabled,\n.btn-large.disabled,\n.btn-small.disabled,\n.btn-flat.disabled,\n.btn:disabled,\n.btn-floating:disabled,\n.btn-large:disabled,\n.btn-small:disabled,\n.btn-flat:disabled,\n.btn[disabled],\n.btn-floating[disabled],\n.btn-large[disabled],\n.btn-small[disabled],\n.btn-flat[disabled] {\n pointer-events: none;\n background-color: $button-disabled-background !important;\n box-shadow: none;\n color: $button-disabled-color !important;\n cursor: default;\n &:hover {\n background-color: $button-disabled-background !important;\n color: $button-disabled-color !important;\n }\n}\n\n// Shared icon styles\n.btn,\n.btn-floating,\n.btn-large,\n.btn-small,\n.btn-flat {\n font-size: $button-font-size;\n outline: 0;\n i {\n font-size: $button-icon-font-size;\n line-height: inherit;\n }\n}\n\n// Shared focus button style\n.btn,\n.btn-floating {\n &:focus {\n background-color: darken($button-raised-background, 10%);\n }\n}\n\n// Raised Button\n.btn {\n text-decoration: none;\n color: $button-raised-color;\n background-color: $button-raised-background;\n text-align: center;\n letter-spacing: .5px;\n @extend .shadow-1;\n transition: background-color .2s ease-out;\n cursor: pointer;\n &:hover {\n background-color: $button-raised-background-hover;\n @extend .shadow-1-half;\n }\n}\n\n// Floating button\n.btn-floating {\n &:hover {\n background-color: $button-floating-background-hover;\n @extend .shadow-1-half;\n }\n &:before {\n border-radius: 0;\n }\n &.btn-large {\n &.halfway-fab {\n bottom: calc($button-floating-large-size / 2);\n }\n width: $button-floating-large-size;\n height: $button-floating-large-size;\n padding: 0;\n i {\n line-height: $button-floating-large-size;\n }\n }\n\n &.btn-small {\n &.halfway-fab {\n bottom: calc($button-floating-small-size / 2);\n }\n width: $button-floating-small-size;\n height: $button-floating-small-size;\n i {\n line-height: $button-floating-small-size;\n }\n }\n\n &.halfway-fab {\n &.left {\n right: auto;\n left: 24px;\n }\n position: absolute;\n right: 24px;\n bottom: calc($button-floating-size / 2);\n }\n display: inline-block;\n color: $button-floating-color;\n position: relative;\n overflow: hidden;\n z-index: 1;\n width: $button-floating-size;\n height: $button-floating-size;\n line-height: $button-floating-size;\n padding: 0;\n background-color: $button-floating-background;\n border-radius: $button-floating-radius;\n @extend .shadow-1;\n transition: background-color .3s;\n cursor: pointer;\n vertical-align: middle;\n i {\n width: inherit;\n display: inline-block;\n text-align: center;\n color: $button-floating-color;\n font-size: $button-large-icon-font-size;\n line-height: $button-floating-size;\n }\n}\n\n// button fix\nbutton.btn-floating {\n border: $button-border;\n}\n\n// Fixed Action Button\n.fixed-action-btn {\n &.active {\n ul {\n visibility: visible;\n }\n }\n\n // Directions\n &.direction-left,\n &.direction-right {\n padding: 0 0 0 15px;\n ul {\n text-align: right;\n right: 64px;\n top: 50%;\n transform: translateY(-50%);\n height: 100%;\n left: auto;\n /*width 100% only goes to width of button container */\n width: 500px;\n li {\n display: inline-block;\n margin: 7.5px 15px 0 0;\n }\n }\n }\n &.direction-right {\n padding: 0 15px 0 0;\n ul {\n text-align: left;\n direction: rtl;\n left: 64px;\n right: auto;\n li {\n margin: 7.5px 0 0 15px;\n }\n }\n }\n &.direction-bottom {\n padding: 0 0 15px 0;\n ul {\n top: 64px;\n bottom: auto;\n display: flex;\n flex-direction: column-reverse;\n li {\n margin: 15px 0 0 0;\n }\n }\n }\n &.toolbar {\n &.active {\n &>a i {\n opacity: 0;\n }\n }\n padding: 0;\n height: $button-floating-large-size;\n ul {\n display: flex;\n top: 0;\n bottom: 0;\n z-index: 1;\n li {\n flex: 1;\n display: inline-block;\n margin: 0;\n height: 100%;\n transition: none;\n a {\n display: block;\n overflow: hidden;\n position: relative;\n width: 100%;\n height: 100%;\n background-color: transparent;\n box-shadow: none;\n color: #fff;\n line-height: $button-floating-large-size;\n z-index: 1;\n i {\n line-height: inherit;\n }\n }\n }\n }\n }\n position: fixed;\n right: 23px;\n bottom: 23px;\n padding-top: 15px;\n margin-bottom: 0;\n z-index: 997;\n ul {\n left: 0;\n right: 0;\n text-align: center;\n position: absolute;\n bottom: 64px;\n margin: 0;\n visibility: hidden;\n li {\n margin-bottom: 15px;\n }\n a.btn-floating {\n opacity: 0;\n }\n }\n .fab-backdrop {\n position: absolute;\n top: 0;\n left: 0;\n z-index: -1;\n width: $button-floating-size;\n height: $button-floating-size;\n background-color: $button-floating-background;\n border-radius: $button-floating-radius;\n transform: scale(0);\n }\n}\n\n// Flat button\n.btn-flat {\n box-shadow: none;\n background-color: transparent;\n color: $button-flat-color;\n cursor: pointer;\n transition: background-color .2s;\n &:focus,\n &:hover {\n box-shadow: none;\n }\n &:focus {\n background-color: rgba(0, 0, 0, .1);\n }\n &.disabled,\n &.btn-flat[disabled] {\n background-color: transparent !important;\n color: $button-flat-disabled-color !important;\n cursor: default;\n }\n}\n\n// Large button\n.btn-large {\n @extend .btn;\n height: $button-large-height;\n line-height: $button-large-height;\n font-size: $button-large-font-size;\n padding: 0 28px;\n\n i {\n font-size: $button-large-icon-font-size;\n }\n}\n\n// Small button\n.btn-small {\n @extend .btn;\n height: $button-small-height;\n line-height: $button-small-height;\n font-size: $button-small-font-size;\n i {\n font-size: $button-small-icon-font-size;\n }\n}\n\n// Block button\n.btn-block {\n display: block;\n}\n","$mainColor:#0062d6;\n$othermain:#034d82;\n$secondColor:#0077FA;\n$thirdColor:#09bddd;\n$forthColor:#cbe7fe;\n\n$tab1: $forthColor;\n$tab2: darken($forthColor,15%);\n$tab3: darken($forthColor,30%);\n\n.communTabHeader {\n height: 100px;\n padding: 40px;\n}\n\n.tabs {\n min-height: calc(100% - 150px);\n margin-top: 30px;\n padding:0!important;\n border-radius: 40px!important;\n.innerpage{\n min-height: 70VH!important;\n}\n .tabs-header-overlay {\n display: flex;\n height: 100px;\n }\n\n &.activeTab-0 {\n .tab-header-over0 {\n flex: 1;\n background-color: $tab2;\n border-radius: 40px 0 0 0;\n\n .tab-header {\n background-color: $tab1;\n border-radius: 40px 40px 0 0;\n @extend .communTabHeader;\n }\n }\n\n .tab-header-over1 {\n flex: 1;\n background: linear-gradient(0.25turn, $tab1, $tab3);\n border-radius: 0 0 0 0;\n\n .tab-header {\n background-color: $tab2;\n border-radius: 0 40px 0 40px;\n @extend .communTabHeader;\n }\n }\n\n .tab-header-over2 {\n flex: 1;\n background-color: $tab2;\n border-radius: 0 40px 0 0;\n\n .tab-header {\n background-color: $tab3;\n border-radius: 0 40px 0 40px;\n @extend .communTabHeader;\n }\n }\n }\n\n &.activeTab-1 {\n .tab-header-over0 {\n flex: 1;\n background-color: $tab1;\n //linear-gradient(0.25turn, $tab1, $tab1);\n //linear-gradient(0.25turn, $tab1, $tab1);\n border-radius: 40px 0 0 0;\n\n .tab-header {\n background-color: $tab2;\n // border-radius: 40px 40px 0 0;\n border-radius: 40px 0 40px 0;\n @extend .communTabHeader;\n }\n }\n\n .tab-header-over1 {\n flex: 1;\n background: linear-gradient(0.25turn, $tab2, $tab3);\n //$tab2;\n //border-radius: 40px 0 0;\n border-radius: 0 0 0 0;\n\n .tab-header {\n background-color: $tab1;\n border-radius: 40px 40px 0 0;\n @extend .communTabHeader;\n }\n }\n\n .tab-header-over2 {\n flex: 1;\n background-color: $tab1;\n border-radius: 0 40px 0 0;\n\n .tab-header {\n background-color: $tab3;\n border-radius: 0 40px 0 40px;\n @extend .communTabHeader;\n }\n }\n }\n\n\n &.activeTab-2 {\n .tab-header-over0 {\n flex: 1;\n background-color: $tab3;\n //linear-gradient(0.25turn, $tab1, $tab1);\n //linear-gradient(0.25turn, $tab1, $tab1);\n border-radius: 40px 0 0 0;\n\n .tab-header {\n background-color: $tab2;\n // border-radius: 40px 40px 0 0;\n border-radius: 40px 0 40px 0;\n @extend .communTabHeader;\n }\n }\n\n .tab-header-over1 {\n flex: 1;\n background: linear-gradient(0.25turn, $tab2, $tab1);\n //$tab2;\n //border-radius: 40px 0 0;\n border-radius: 0 0 0 0;\n\n .tab-header {\n background-color: $tab3;\n border-radius: 40px 0 40px 0;\n @extend .communTabHeader;\n }\n }\n\n .tab-header-over2 {\n flex: 1;\n background-color: $tab3;\n border-radius: 0 40px 0 0;\n\n .tab-header {\n background-color: $tab1;\n border-radius: 40px 40px 0 0;\n @extend .communTabHeader;\n }\n }\n }\n\n .tab-content {\n background-color: $tab1;\n padding: 10px;\n //border: 1px solid rgb(207, 205, 205);\n border-top: 0;\n min-height: 70vh;\n border-radius: 0 0 40px 40px;\n padding-bottom: 20px;\n \n }\n}\n\n// .tabs {\n// // display: flex;\n// // flex-direction: column;\n// .tabs-header-overlay {\n// display: flex;\n// height: 100px;\n\n// .tab-header-over {\n// flex: 1;\n// background-color: hotpink;\n// border-radius: 0 40px 0 0;\n// &.active {\n// background-color: rgb(155, 152, 153);\n// border-radius: 40px 0 0 0;\n// }\n// .tab-header {\n// &.active {\n// background-color: hotpink;\n// border-radius: 40px 40px 0 0;\n// }\n// border-radius: 0px 40px 0 40px;\n// padding: 40px;\n// background-color: rgb(155, 152, 153);\n// }\n// }\n// }\n\n// .tab-content {\n// background-color: hotpink;\n// padding: 10px;\n// border: 1px solid rgb(207, 205, 205);\n// border-top: 0;\n// }\n// }\n",".loader-overlay {\n z-index: 999;\n position: absolute;\n height: 100vh;\n width: 100vw;\n top: 0;\n left: 0;\n background-color: rgba(102, 100, 100, 0.603);\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n .loader {\n border: 7px solid #f3f3f3; /* Light grey */\n border-top: 7px solid #2ea2cc; /* Blue */\n border-radius: 50%;\n width: 70px;\n height: 70px;\n animation: spin 2s linear infinite;\n }\n .loader-text{\n margin-top: 20px;\n font-size: 25px;\n color: #2ea2cc;\n }\n\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n}\n","\n\n.card-panel {\n transition: box-shadow .25s;\n padding: $card-padding;\n margin: $element-top-margin 0 $element-bottom-margin 0;\n border-radius: 2px;\n @extend .shadow-1;\n background-color: $card-bg-color;\n}\n\n.card {\n position: relative;\n margin: $element-top-margin 0 $element-bottom-margin 0;\n background-color: $card-bg-color;\n transition: box-shadow .25s;\n border-radius: 2px;\n @extend .shadow-1;\n\n\n .card-title {\n font-size: 24px;\n font-weight: 300;\n &.activator {\n cursor: pointer;\n }\n }\n\n // Card Sizes\n &.small, &.medium, &.large {\n position: relative;\n\n .card-image {\n max-height: 60%;\n overflow: hidden;\n }\n .card-image + .card-content {\n max-height: 40%;\n }\n .card-content {\n max-height: 100%;\n overflow: hidden;\n }\n .card-action {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n }\n }\n\n &.small {\n height: 300px;\n }\n\n &.medium {\n height: 400px;\n }\n\n &.large {\n height: 500px;\n }\n\n // Horizontal Cards\n &.horizontal {\n &.small, &.medium, &.large {\n .card-image {\n height: 100%;\n max-height: none;\n overflow: visible;\n\n img {\n height: 100%;\n }\n }\n }\n\n display: flex;\n\n .card-image {\n max-width: 50%;\n img {\n border-radius: 2px 0 0 2px;\n max-width: 100%;\n width: auto;\n }\n }\n\n .card-stacked {\n display: flex;\n flex-direction: column;\n flex: 1;\n position: relative;\n\n .card-content {\n flex-grow: 1;\n }\n }\n }\n\n // Sticky Action Section\n &.sticky-action {\n .card-action {\n z-index: 2;\n }\n\n .card-reveal {\n z-index: 1;\n padding-bottom: 64px;\n }\n }\n\n\n\n\n .card-image {\n position: relative;\n\n // Image background for content\n img {\n display: block;\n border-radius: 2px 2px 0 0;\n position: relative;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n width: 100%;\n }\n\n .card-title {\n color: $card-bg-color;\n position: absolute;\n bottom: 0;\n left: 0;\n max-width: 100%;\n padding: $card-padding;\n }\n }\n\n .card-content {\n padding: $card-padding;\n border-radius: 0 0 2px 2px;\n\n p {\n margin: 0;\n }\n .card-title {\n display: block;\n line-height: 32px;\n margin-bottom: 8px;\n\n i {\n line-height: 32px;\n }\n }\n }\n\n .card-action {\n &:last-child {\n border-radius: 0 0 2px 2px;\n }\n background-color: inherit; // Use inherit to inherit color classes\n border-top: 1px solid rgba(160,160,160,.2);\n position: relative;\n padding: 16px $card-padding;\n\n a:not(.btn):not(.btn-large):not(.btn-floating) {\n color: $card-link-color;\n margin-right: $card-padding;\n transition: color .3s ease;\n text-transform: uppercase;\n\n &:hover { color: $card-link-color-light; }\n }\n }\n\n .card-reveal {\n padding: $card-padding;\n position: absolute;\n background-color: $card-bg-color;\n width: 100%;\n overflow-y: auto;\n left: 0;\n top: 100%;\n height: 100%;\n z-index: 3;\n display: none;\n\n .card-title {\n cursor: pointer;\n display: block;\n }\n }\n}\n","/*\r\n @license\r\n Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\r\n This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\r\n The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\r\n The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n Code distributed by Google as part of the polymer project is also\r\n subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\r\n */\r\n\r\n/**************************/\r\n/* STYLES FOR THE SPINNER */\r\n/**************************/\r\n\r\n/*\r\n * Constants:\r\n * STROKEWIDTH = 3px\r\n * ARCSIZE = 270 degrees (amount of circle the arc takes up)\r\n * ARCTIME = 1333ms (time it takes to expand and contract arc)\r\n * ARCSTARTROT = 216 degrees (how much the start location of the arc\r\n * should rotate each time, 216 gives us a\r\n * 5 pointed star shape (it's 360/5 * 3).\r\n * For a 7 pointed star, we might do\r\n * 360/7 * 3 = 154.286)\r\n * CONTAINERWIDTH = 28px\r\n * SHRINK_TIME = 400ms\r\n */\r\n\r\n\r\n.preloader-wrapper {\r\n display: inline-block;\r\n position: relative;\r\n width: 50px;\r\n height: 50px;\r\n\r\n &.small {\r\n width: 36px;\r\n height: 36px;\r\n }\r\n\r\n &.big {\r\n width: 64px;\r\n height: 64px;\r\n }\r\n\r\n &.active {\r\n /* duration: 360 * ARCTIME / (ARCSTARTROT + (360-ARCSIZE)) */\r\n -webkit-animation: container-rotate 1568ms linear infinite;\r\n animation: container-rotate 1568ms linear infinite;\r\n }\r\n}\r\n\r\n@-webkit-keyframes container-rotate {\r\n to { -webkit-transform: rotate(360deg) }\r\n}\r\n\r\n@keyframes container-rotate {\r\n to { transform: rotate(360deg) }\r\n}\r\n\r\n.spinner-layer {\r\n position: absolute;\r\n width: 100%;\r\n height: 100%;\r\n opacity: 0;\r\n border-color: $spinner-default-color;\r\n}\r\n\r\n.spinner-blue,\r\n.spinner-blue-only {\r\n border-color: #4285f4;\r\n}\r\n\r\n.spinner-red,\r\n.spinner-red-only {\r\n border-color: #db4437;\r\n}\r\n\r\n.spinner-yellow,\r\n.spinner-yellow-only {\r\n border-color: #f4b400;\r\n}\r\n\r\n.spinner-green,\r\n.spinner-green-only {\r\n border-color: #0f9d58;\r\n}\r\n\r\n/**\r\n * IMPORTANT NOTE ABOUT CSS ANIMATION PROPERTIES (keanulee):\r\n *\r\n * iOS Safari (tested on iOS 8.1) does not handle animation-delay very well - it doesn't\r\n * guarantee that the animation will start _exactly_ after that value. So we avoid using\r\n * animation-delay and instead set custom keyframes for each color (as redundant as it\r\n * seems).\r\n *\r\n * We write out each animation in full (instead of separating animation-name,\r\n * animation-duration, etc.) because under the polyfill, Safari does not recognize those\r\n * specific properties properly, treats them as -webkit-animation, and overrides the\r\n * other animation rules. See https://github.com/Polymer/platform/issues/53.\r\n */\r\n.active .spinner-layer.spinner-blue {\r\n /* durations: 4 * ARCTIME */\r\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n}\r\n\r\n.active .spinner-layer.spinner-red {\r\n /* durations: 4 * ARCTIME */\r\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n}\r\n\r\n.active .spinner-layer.spinner-yellow {\r\n /* durations: 4 * ARCTIME */\r\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n}\r\n\r\n.active .spinner-layer.spinner-green {\r\n /* durations: 4 * ARCTIME */\r\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n}\r\n\r\n.active .spinner-layer,\r\n.active .spinner-layer.spinner-blue-only,\r\n.active .spinner-layer.spinner-red-only,\r\n.active .spinner-layer.spinner-yellow-only,\r\n.active .spinner-layer.spinner-green-only {\r\n /* durations: 4 * ARCTIME */\r\n opacity: 1;\r\n -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n}\r\n\r\n@-webkit-keyframes fill-unfill-rotate {\r\n 12.5% { -webkit-transform: rotate(135deg); } /* 0.5 * ARCSIZE */\r\n 25% { -webkit-transform: rotate(270deg); } /* 1 * ARCSIZE */\r\n 37.5% { -webkit-transform: rotate(405deg); } /* 1.5 * ARCSIZE */\r\n 50% { -webkit-transform: rotate(540deg); } /* 2 * ARCSIZE */\r\n 62.5% { -webkit-transform: rotate(675deg); } /* 2.5 * ARCSIZE */\r\n 75% { -webkit-transform: rotate(810deg); } /* 3 * ARCSIZE */\r\n 87.5% { -webkit-transform: rotate(945deg); } /* 3.5 * ARCSIZE */\r\n to { -webkit-transform: rotate(1080deg); } /* 4 * ARCSIZE */\r\n}\r\n\r\n@keyframes fill-unfill-rotate {\r\n 12.5% { transform: rotate(135deg); } /* 0.5 * ARCSIZE */\r\n 25% { transform: rotate(270deg); } /* 1 * ARCSIZE */\r\n 37.5% { transform: rotate(405deg); } /* 1.5 * ARCSIZE */\r\n 50% { transform: rotate(540deg); } /* 2 * ARCSIZE */\r\n 62.5% { transform: rotate(675deg); } /* 2.5 * ARCSIZE */\r\n 75% { transform: rotate(810deg); } /* 3 * ARCSIZE */\r\n 87.5% { transform: rotate(945deg); } /* 3.5 * ARCSIZE */\r\n to { transform: rotate(1080deg); } /* 4 * ARCSIZE */\r\n}\r\n\r\n@-webkit-keyframes blue-fade-in-out {\r\n from { opacity: 1; }\r\n 25% { opacity: 1; }\r\n 26% { opacity: 0; }\r\n 89% { opacity: 0; }\r\n 90% { opacity: 1; }\r\n 100% { opacity: 1; }\r\n}\r\n\r\n@keyframes blue-fade-in-out {\r\n from { opacity: 1; }\r\n 25% { opacity: 1; }\r\n 26% { opacity: 0; }\r\n 89% { opacity: 0; }\r\n 90% { opacity: 1; }\r\n 100% { opacity: 1; }\r\n}\r\n\r\n@-webkit-keyframes red-fade-in-out {\r\n from { opacity: 0; }\r\n 15% { opacity: 0; }\r\n 25% { opacity: 1; }\r\n 50% { opacity: 1; }\r\n 51% { opacity: 0; }\r\n}\r\n\r\n@keyframes red-fade-in-out {\r\n from { opacity: 0; }\r\n 15% { opacity: 0; }\r\n 25% { opacity: 1; }\r\n 50% { opacity: 1; }\r\n 51% { opacity: 0; }\r\n}\r\n\r\n@-webkit-keyframes yellow-fade-in-out {\r\n from { opacity: 0; }\r\n 40% { opacity: 0; }\r\n 50% { opacity: 1; }\r\n 75% { opacity: 1; }\r\n 76% { opacity: 0; }\r\n}\r\n\r\n@keyframes yellow-fade-in-out {\r\n from { opacity: 0; }\r\n 40% { opacity: 0; }\r\n 50% { opacity: 1; }\r\n 75% { opacity: 1; }\r\n 76% { opacity: 0; }\r\n}\r\n\r\n@-webkit-keyframes green-fade-in-out {\r\n from { opacity: 0; }\r\n 65% { opacity: 0; }\r\n 75% { opacity: 1; }\r\n 90% { opacity: 1; }\r\n 100% { opacity: 0; }\r\n}\r\n\r\n@keyframes green-fade-in-out {\r\n from { opacity: 0; }\r\n 65% { opacity: 0; }\r\n 75% { opacity: 1; }\r\n 90% { opacity: 1; }\r\n 100% { opacity: 0; }\r\n}\r\n\r\n/**\r\n * Patch the gap that appear between the two adjacent div.circle-clipper while the\r\n * spinner is rotating (appears on Chrome 38, Safari 7.1, and IE 11).\r\n */\r\n.gap-patch {\r\n position: absolute;\r\n top: 0;\r\n left: 45%;\r\n width: 10%;\r\n height: 100%;\r\n overflow: hidden;\r\n border-color: inherit;\r\n}\r\n\r\n.gap-patch .circle {\r\n width: 1000%;\r\n left: -450%;\r\n}\r\n\r\n.circle-clipper {\r\n display: inline-block;\r\n position: relative;\r\n width: 50%;\r\n height: 100%;\r\n overflow: hidden;\r\n border-color: inherit;\r\n\r\n .circle {\r\n width: 200%;\r\n height: 100%;\r\n border-width: 3px; /* STROKEWIDTH */\r\n border-style: solid;\r\n border-color: inherit;\r\n border-bottom-color: transparent !important;\r\n border-radius: 50%;\r\n -webkit-animation: none;\r\n animation: none;\r\n position: absolute;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n }\r\n\r\n &.left .circle {\r\n left: 0;\r\n border-right-color: transparent !important;\r\n -webkit-transform: rotate(129deg);\r\n transform: rotate(129deg);\r\n }\r\n &.right .circle {\r\n left: -100%;\r\n border-left-color: transparent !important;\r\n -webkit-transform: rotate(-129deg);\r\n transform: rotate(-129deg);\r\n }\r\n}\r\n\r\n\r\n\r\n.active .circle-clipper.left .circle {\r\n /* duration: ARCTIME */\r\n -webkit-animation: left-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n animation: left-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n}\r\n\r\n.active .circle-clipper.right .circle {\r\n /* duration: ARCTIME */\r\n -webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n animation: right-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both;\r\n}\r\n\r\n@-webkit-keyframes left-spin {\r\n from { -webkit-transform: rotate(130deg); }\r\n 50% { -webkit-transform: rotate(-5deg); }\r\n to { -webkit-transform: rotate(130deg); }\r\n}\r\n\r\n@keyframes left-spin {\r\n from { transform: rotate(130deg); }\r\n 50% { transform: rotate(-5deg); }\r\n to { transform: rotate(130deg); }\r\n}\r\n\r\n@-webkit-keyframes right-spin {\r\n from { -webkit-transform: rotate(-130deg); }\r\n 50% { -webkit-transform: rotate(5deg); }\r\n to { -webkit-transform: rotate(-130deg); }\r\n}\r\n\r\n@keyframes right-spin {\r\n from { transform: rotate(-130deg); }\r\n 50% { transform: rotate(5deg); }\r\n to { transform: rotate(-130deg); }\r\n}\r\n\r\n#spinnerContainer.cooldown {\r\n /* duration: SHRINK_TIME */\r\n -webkit-animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0.0, 0.2, 1);\r\n animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0.0, 0.2, 1);\r\n}\r\n\r\n@-webkit-keyframes fade-out {\r\n from { opacity: 1; }\r\n to { opacity: 0; }\r\n}\r\n\r\n@keyframes fade-out {\r\n from { opacity: 1; }\r\n to { opacity: 0; }\r\n}\r\n","\r\n// Progress Bar\r\n.progress {\r\n position: relative;\r\n height: 4px;\r\n display: block;\r\n width: 100%;\r\n background-color: lighten($progress-bar-color, 40%);\r\n border-radius: 2px;\r\n margin: $element-top-margin 0 $element-bottom-margin 0;\r\n overflow: hidden;\r\n .determinate {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n bottom: 0;\r\n background-color: $progress-bar-color;\r\n transition: width .3s linear;\r\n }\r\n .indeterminate {\r\n background-color: $progress-bar-color;\r\n &:before {\r\n content: '';\r\n position: absolute;\r\n background-color: inherit;\r\n top: 0;\r\n left:0;\r\n bottom: 0;\r\n will-change: left, right;\r\n // Custom bezier\r\n animation: indeterminate 2.1s cubic-bezier(0.650, 0.815, 0.735, 0.395) infinite;\r\n\r\n }\r\n &:after {\r\n content: '';\r\n position: absolute;\r\n background-color: inherit;\r\n top: 0;\r\n left:0;\r\n bottom: 0;\r\n will-change: left, right;\r\n // Custom bezier\r\n animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.840, 0.440, 1.000) infinite;\r\n animation-delay: 1.15s;\r\n }\r\n }\r\n}\r\n@keyframes indeterminate {\r\n 0% {\r\n left: -35%;\r\n right:100%;\r\n }\r\n 60% {\r\n left: 100%;\r\n right: -90%;\r\n }\r\n 100% {\r\n left: 100%;\r\n right: -90%;\r\n }\r\n}\r\n\r\n@keyframes indeterminate-short {\r\n 0% {\r\n left: -200%;\r\n right: 100%;\r\n }\r\n 60% {\r\n left: 107%;\r\n right: -8%;\r\n }\r\n 100% {\r\n left: 107%;\r\n right: -8%;\r\n }\r\n}\r\n\r\n",".flash-message {\n position: absolute;\n padding: 2px 10px;\n border-radius: 5px;\n z-index: 99999;\n right: 0;\n bottom: 0;\n font-size: 14px;\n\n\n &.info {\n background-color: #beddbe;\n border: 1px solid #728f72;\n }\n\n &.warn {\n background-color: #f5e6d0;\n border: 1px solid #ea7d17;\n }\n &.error {\n background-color: #e5b2bc;\n border: 1px solid #e33257;\n }\n}\n\n@keyframes messageIn {\n from {\n right: 80%;\n }\n\n to {\n right: 0;\n\n }\n}",".pulse {\n &::before {\n content: '';\n display: block;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background-color: inherit;\n border-radius: inherit;\n transition: opacity .3s, transform .3s;\n animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;\n //z-index: -1;\n }\n\n overflow: visible;\n position: relative;\n}\n\n@keyframes pulse-animation {\n 0% {\n opacity: 1;\n transform: scale(1);\n }\n 50% {\n opacity: 0;\n transform: scale(1.5);\n }\n 100% {\n opacity: 0;\n transform: scale(1.5);\n }\n}\n",".dropdown-content {\n &:focus {\n outline: 0;\n }\n\n\n @extend .shadow-1;\n background-color: $dropdown-bg-color;\n margin: 0;\n display: flow;\n min-width: 100px;\n overflow-y: auto;\n //opacity: 0;\n position: absolute;\n left: 0;\n top: 0;\n z-index: 9999; // TODO: Check if this doesn't break other things\n transform-origin: 0 0;\n\n\n li {\n &:hover, &.active {\n background-color: $dropdown-hover-bg-color;\n }\n\n &:focus {\n outline: none;\n }\n\n &.divider {\n min-height: 0;\n height: 1px;\n }\n\n & > a, & > span {\n font-size: 16px;\n color: $dropdown-color;\n display: block;\n line-height: 22px;\n padding: calc(($dropdown-item-height - 22px) / 2) 16px;\n }\n\n & > span > label {\n top: 1px;\n left: 0;\n height: 18px;\n }\n\n // Icon alignment override\n & > a > i {\n height: inherit;\n line-height: inherit;\n float: left;\n margin: 0 24px 0 0;\n width: 24px;\n }\n\n\n clear: both;\n color: $off-black;\n cursor: pointer;\n min-height: $dropdown-item-height;\n line-height: 1.5rem;\n width: 100%;\n text-align: left;\n }\n}\n\nbody.keyboard-focused {\n .dropdown-content li:focus {\n background-color: darken($dropdown-hover-bg-color, 8%);\n }\n}\n\n// Input field specificity bugfix\n.input-field.col .dropdown-content [type=\"checkbox\"] + label {\n top: 1px;\n left: 0;\n height: 18px;\n transform: none;\n}\n\n.dropdown-trigger {\n cursor: pointer;\n}","nav {\n &.nav-extended {\n height: auto;\n\n .nav-wrapper {\n display: flex;\n align-items: center;\n min-height: $navbar-height-mobile;\n height: auto;\n }\n\n .nav-content {\n position: relative;\n line-height: normal;\n }\n }\n\n color: $navbar-font-color;\n @extend .shadow-1;\n background-color: $primary-color;\n width: 100%;\n height: $navbar-height-mobile;\n line-height: $navbar-line-height-mobile;\n\n a { color: $navbar-font-color; }\n\n i,\n [class^=\"mdi-\"], [class*=\"mdi-\"],\n i.s-icons {\n display: block;\n font-size: 24px;\n height: $navbar-height-mobile;\n line-height: $navbar-line-height-mobile;\n }\n\n .nav-wrapper {\n position: relative;\n height: 100%;\n }\n\n @media #{$large-and-up} {\n a.sidenav-trigger { display: none; }\n }\n\n\n // Collapse button\n .sidenav-trigger {\n float: left;\n position: relative;\n z-index: 1;\n height: $navbar-height-mobile;\n margin: 0 18px;\n\n i {\n height: $navbar-height-mobile;\n line-height: $navbar-line-height-mobile;\n }\n }\n\n\n // Logo\n .brand-logo {\n position: absolute;\n color: $navbar-font-color;\n display: inline-block;\n font-size: $navbar-brand-font-size;\n padding: 0;\n img.circle {\n height: 32px;\n width: 32px;\n }\n\n &.center {\n left: 50%;\n transform: translateX(-50%);\n }\n\n @media #{$medium-and-down} {\n left: 50%;\n transform: translateX(-50%);\n\n &.left, &.right {\n padding: 0;\n transform: none;\n }\n\n &.left { left: 0.5rem; }\n &.right {\n right: 0.5rem;\n left: auto;\n }\n }\n\n &.right {\n right: 0.5rem;\n padding: 0;\n }\n\n i,\n [class^=\"mdi-\"], [class*=\"mdi-\"],\n i.s-icons {\n float: left;\n margin-right: 15px;\n }\n }\n\n\n // Title\n .nav-title {\n display: inline-block;\n font-size: 32px;\n padding: 28px 0;\n }\n\n\n // Navbar Links\n ul {\n margin: 0;\n\n li {\n transition: background-color .3s;\n float: left;\n padding: 0;\n\n &.active {\n background-color: rgba(0,0,0,.1);\n }\n }\n a {\n transition: background-color .3s;\n font-size: $navbar-font-size;\n color: $navbar-font-color;\n display: block;\n padding: 0 15px;\n cursor: pointer;\n\n &.btn, &.btn-large, &.btn-flat, &.btn-floating {\n margin-top: -2px;\n margin-left: 15px;\n margin-right: 15px;\n\n & > .material-icons {\n height: inherit;\n line-height: inherit;\n }\n }\n\n &:hover {\n background-color: rgba(0,0,0,.1);\n }\n }\n\n &.left {\n float: left;\n }\n }\n\n // Navbar Search Form\n form {\n height: 100%;\n }\n\n .input-field {\n margin: 0;\n height: 100%;\n\n input {\n height: 100%;\n font-size: 1.2rem;\n border: none;\n padding-left: 2rem;\n\n &:focus, &[type=text]:valid, &[type=password]:valid,\n &[type=email]:valid, &[type=url]:valid, &[type=date]:valid {\n border: none;\n box-shadow: none;\n }\n }\n\n label {\n top: 0;\n left: 0;\n\n i {\n color: rgba(255,255,255,.7);\n transition: color .3s;\n }\n &.active i { color: $navbar-font-color; }\n }\n }\n}\n\n// Fixed Navbar\n.navbar-fixed {\n position: relative;\n height: $navbar-height-mobile;\n z-index: 997;\n\n nav {\n position: fixed;\n }\n}\n@media #{$medium-and-up} {\n nav.nav-extended .nav-wrapper {\n min-height: $navbar-height;\n }\n nav, nav .nav-wrapper i, nav a.sidenav-trigger, nav a.sidenav-trigger i {\n height: $navbar-height;\n line-height: $navbar-line-height;\n }\n .navbar-fixed {\n height: $navbar-height;\n }\n}\n"],"sourceRoot":""}]);
- // Exports
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
- /***/ }),
- /***/ "./node_modules/css-loader/dist/runtime/api.js":
- /*!*****************************************************!*\
- !*** ./node_modules/css-loader/dist/runtime/api.js ***!
- \*****************************************************/
- /***/ ((module) => {
- "use strict";
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
- module.exports = function (cssWithMappingToString) {
- var list = [];
- // return the list of modules as css string
- list.toString = function toString() {
- return this.map(function (item) {
- var content = "";
- var needLayer = typeof item[5] !== "undefined";
- if (item[4]) {
- content += "@supports (".concat(item[4], ") {");
- }
- if (item[2]) {
- content += "@media ".concat(item[2], " {");
- }
- if (needLayer) {
- content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");
- }
- content += cssWithMappingToString(item);
- if (needLayer) {
- content += "}";
- }
- if (item[2]) {
- content += "}";
- }
- if (item[4]) {
- content += "}";
- }
- return content;
- }).join("");
- };
- // import a list of modules into the list
- list.i = function i(modules, media, dedupe, supports, layer) {
- if (typeof modules === "string") {
- modules = [[null, modules, undefined]];
- }
- var alreadyImportedModules = {};
- if (dedupe) {
- for (var k = 0; k < this.length; k++) {
- var id = this[k][0];
- if (id != null) {
- alreadyImportedModules[id] = true;
- }
- }
- }
- for (var _k = 0; _k < modules.length; _k++) {
- var item = [].concat(modules[_k]);
- if (dedupe && alreadyImportedModules[item[0]]) {
- continue;
- }
- if (typeof layer !== "undefined") {
- if (typeof item[5] === "undefined") {
- item[5] = layer;
- } else {
- item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");
- item[5] = layer;
- }
- }
- if (media) {
- if (!item[2]) {
- item[2] = media;
- } else {
- item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");
- item[2] = media;
- }
- }
- if (supports) {
- if (!item[4]) {
- item[4] = "".concat(supports);
- } else {
- item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");
- item[4] = supports;
- }
- }
- list.push(item);
- }
- };
- return list;
- };
- /***/ }),
- /***/ "./node_modules/css-loader/dist/runtime/getUrl.js":
- /*!********************************************************!*\
- !*** ./node_modules/css-loader/dist/runtime/getUrl.js ***!
- \********************************************************/
- /***/ ((module) => {
- "use strict";
- module.exports = function (url, options) {
- if (!options) {
- options = {};
- }
- if (!url) {
- return url;
- }
- url = String(url.__esModule ? url.default : url);
- // If url is already wrapped in quotes, remove them
- if (/^['"].*['"]$/.test(url)) {
- url = url.slice(1, -1);
- }
- if (options.hash) {
- url += options.hash;
- }
- // Should url be wrapped?
- // See https://drafts.csswg.org/css-values-3/#urls
- if (/["'() \t\n]|(%20)/.test(url) || options.needQuotes) {
- return "\"".concat(url.replace(/"/g, '\\"').replace(/\n/g, "\\n"), "\"");
- }
- return url;
- };
- /***/ }),
- /***/ "./node_modules/css-loader/dist/runtime/sourceMaps.js":
- /*!************************************************************!*\
- !*** ./node_modules/css-loader/dist/runtime/sourceMaps.js ***!
- \************************************************************/
- /***/ ((module) => {
- "use strict";
- module.exports = function (item) {
- var content = item[1];
- var cssMapping = item[3];
- if (!cssMapping) {
- return content;
- }
- if (typeof btoa === "function") {
- var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));
- var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);
- var sourceMapping = "/*# ".concat(data, " */");
- var sourceURLs = cssMapping.sources.map(function (source) {
- return "/*# sourceURL=".concat(cssMapping.sourceRoot || "").concat(source, " */");
- });
- return [content].concat(sourceURLs).concat([sourceMapping]).join("\n");
- }
- return [content].join("\n");
- };
- /***/ }),
- /***/ "./node_modules/object-assign/index.js":
- /*!*********************************************!*\
- !*** ./node_modules/object-assign/index.js ***!
- \*********************************************/
- /***/ ((module) => {
- "use strict";
- /*
- object-assign
- (c) Sindre Sorhus
- @license MIT
- */
- /* eslint-disable no-unused-vars */
- var getOwnPropertySymbols = Object.getOwnPropertySymbols;
- var hasOwnProperty = Object.prototype.hasOwnProperty;
- var propIsEnumerable = Object.prototype.propertyIsEnumerable;
- function toObject(val) {
- if (val === null || val === undefined) {
- throw new TypeError('Object.assign cannot be called with null or undefined');
- }
- return Object(val);
- }
- function shouldUseNative() {
- try {
- if (!Object.assign) {
- return false;
- }
- // Detect buggy property enumeration order in older V8 versions.
- // https://bugs.chromium.org/p/v8/issues/detail?id=4118
- var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
- test1[5] = 'de';
- if (Object.getOwnPropertyNames(test1)[0] === '5') {
- return false;
- }
- // https://bugs.chromium.org/p/v8/issues/detail?id=3056
- var test2 = {};
- for (var i = 0; i < 10; i++) {
- test2['_' + String.fromCharCode(i)] = i;
- }
- var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
- return test2[n];
- });
- if (order2.join('') !== '0123456789') {
- return false;
- }
- // https://bugs.chromium.org/p/v8/issues/detail?id=3056
- var test3 = {};
- 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
- test3[letter] = letter;
- });
- if (Object.keys(Object.assign({}, test3)).join('') !==
- 'abcdefghijklmnopqrst') {
- return false;
- }
- return true;
- } catch (err) {
- // We don't expect any of the above to throw, but better to be safe.
- return false;
- }
- }
- module.exports = shouldUseNative() ? Object.assign : function (target, source) {
- var from;
- var to = toObject(target);
- var symbols;
- for (var s = 1; s < arguments.length; s++) {
- from = Object(arguments[s]);
- for (var key in from) {
- if (hasOwnProperty.call(from, key)) {
- to[key] = from[key];
- }
- }
- if (getOwnPropertySymbols) {
- symbols = getOwnPropertySymbols(from);
- for (var i = 0; i < symbols.length; i++) {
- if (propIsEnumerable.call(from, symbols[i])) {
- to[symbols[i]] = from[symbols[i]];
- }
- }
- }
- }
- return to;
- };
- /***/ }),
- /***/ "./node_modules/prop-types/checkPropTypes.js":
- /*!***************************************************!*\
- !*** ./node_modules/prop-types/checkPropTypes.js ***!
- \***************************************************/
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- /**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- var printWarning = function() {};
- if (true) {
- var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ "./node_modules/prop-types/lib/ReactPropTypesSecret.js");
- var loggedTypeFailures = {};
- var has = __webpack_require__(/*! ./lib/has */ "./node_modules/prop-types/lib/has.js");
- printWarning = function(text) {
- var message = 'Warning: ' + text;
- if (typeof console !== 'undefined') {
- console.error(message);
- }
- try {
- // --- Welcome to debugging React ---
- // This error was thrown as a convenience so that you can use this stack
- // to find the callsite that caused this warning to fire.
- throw new Error(message);
- } catch (x) { /**/ }
- };
- }
- /**
- * Assert that the values match with the type specs.
- * Error messages are memorized and will only be shown once.
- *
- * @param {object} typeSpecs Map of name to a ReactPropType
- * @param {object} values Runtime values that need to be type-checked
- * @param {string} location e.g. "prop", "context", "child context"
- * @param {string} componentName Name of the component for error messages.
- * @param {?Function} getStack Returns the component stack.
- * @private
- */
- function checkPropTypes(typeSpecs, values, location, componentName, getStack) {
- if (true) {
- for (var typeSpecName in typeSpecs) {
- if (has(typeSpecs, typeSpecName)) {
- var error;
- // Prop type validation may throw. In case they do, we don't want to
- // fail the render phase where it didn't fail before. So we log it.
- // After these have been cleaned up, we'll let them throw.
- try {
- // This is intentionally an invariant that gets caught. It's the same
- // behavior as without this statement except with a better message.
- if (typeof typeSpecs[typeSpecName] !== 'function') {
- var err = Error(
- (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +
- 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +
- 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'
- );
- err.name = 'Invariant Violation';
- throw err;
- }
- error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);
- } catch (ex) {
- error = ex;
- }
- if (error && !(error instanceof Error)) {
- printWarning(
- (componentName || 'React class') + ': type specification of ' +
- location + ' `' + typeSpecName + '` is invalid; the type checker ' +
- 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +
- 'You may have forgotten to pass an argument to the type checker ' +
- 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +
- 'shape all require an argument).'
- );
- }
- if (error instanceof Error && !(error.message in loggedTypeFailures)) {
- // Only monitor this failure once because there tends to be a lot of the
- // same error.
- loggedTypeFailures[error.message] = true;
- var stack = getStack ? getStack() : '';
- printWarning(
- 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')
- );
- }
- }
- }
- }
- }
- /**
- * Resets warning cache when testing.
- *
- * @private
- */
- checkPropTypes.resetWarningCache = function() {
- if (true) {
- loggedTypeFailures = {};
- }
- }
- module.exports = checkPropTypes;
- /***/ }),
- /***/ "./node_modules/prop-types/factoryWithTypeCheckers.js":
- /*!************************************************************!*\
- !*** ./node_modules/prop-types/factoryWithTypeCheckers.js ***!
- \************************************************************/
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- /**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- var ReactIs = __webpack_require__(/*! react-is */ "./node_modules/react-is/index.js");
- var assign = __webpack_require__(/*! object-assign */ "./node_modules/object-assign/index.js");
- var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ "./node_modules/prop-types/lib/ReactPropTypesSecret.js");
- var has = __webpack_require__(/*! ./lib/has */ "./node_modules/prop-types/lib/has.js");
- var checkPropTypes = __webpack_require__(/*! ./checkPropTypes */ "./node_modules/prop-types/checkPropTypes.js");
- var printWarning = function() {};
- if (true) {
- printWarning = function(text) {
- var message = 'Warning: ' + text;
- if (typeof console !== 'undefined') {
- console.error(message);
- }
- try {
- // --- Welcome to debugging React ---
- // This error was thrown as a convenience so that you can use this stack
- // to find the callsite that caused this warning to fire.
- throw new Error(message);
- } catch (x) {}
- };
- }
- function emptyFunctionThatReturnsNull() {
- return null;
- }
- module.exports = function(isValidElement, throwOnDirectAccess) {
- /* global Symbol */
- var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
- var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.
- /**
- * Returns the iterator method function contained on the iterable object.
- *
- * Be sure to invoke the function with the iterable as context:
- *
- * var iteratorFn = getIteratorFn(myIterable);
- * if (iteratorFn) {
- * var iterator = iteratorFn.call(myIterable);
- * ...
- * }
- *
- * @param {?object} maybeIterable
- * @return {?function}
- */
- function getIteratorFn(maybeIterable) {
- var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);
- if (typeof iteratorFn === 'function') {
- return iteratorFn;
- }
- }
- /**
- * Collection of methods that allow declaration and validation of props that are
- * supplied to React components. Example usage:
- *
- * var Props = require('ReactPropTypes');
- * var MyArticle = React.createClass({
- * propTypes: {
- * // An optional string prop named "description".
- * description: Props.string,
- *
- * // A required enum prop named "category".
- * category: Props.oneOf(['News','Photos']).isRequired,
- *
- * // A prop named "dialog" that requires an instance of Dialog.
- * dialog: Props.instanceOf(Dialog).isRequired
- * },
- * render: function() { ... }
- * });
- *
- * A more formal specification of how these methods are used:
- *
- * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
- * decl := ReactPropTypes.{type}(.isRequired)?
- *
- * Each and every declaration produces a function with the same signature. This
- * allows the creation of custom validation functions. For example:
- *
- * var MyLink = React.createClass({
- * propTypes: {
- * // An optional string or URI prop named "href".
- * href: function(props, propName, componentName) {
- * var propValue = props[propName];
- * if (propValue != null && typeof propValue !== 'string' &&
- * !(propValue instanceof URI)) {
- * return new Error(
- * 'Expected a string or an URI for ' + propName + ' in ' +
- * componentName
- * );
- * }
- * }
- * },
- * render: function() {...}
- * });
- *
- * @internal
- */
- var ANONYMOUS = '<<anonymous>>';
- // Important!
- // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.
- var ReactPropTypes = {
- array: createPrimitiveTypeChecker('array'),
- bigint: createPrimitiveTypeChecker('bigint'),
- bool: createPrimitiveTypeChecker('boolean'),
- func: createPrimitiveTypeChecker('function'),
- number: createPrimitiveTypeChecker('number'),
- object: createPrimitiveTypeChecker('object'),
- string: createPrimitiveTypeChecker('string'),
- symbol: createPrimitiveTypeChecker('symbol'),
- any: createAnyTypeChecker(),
- arrayOf: createArrayOfTypeChecker,
- element: createElementTypeChecker(),
- elementType: createElementTypeTypeChecker(),
- instanceOf: createInstanceTypeChecker,
- node: createNodeChecker(),
- objectOf: createObjectOfTypeChecker,
- oneOf: createEnumTypeChecker,
- oneOfType: createUnionTypeChecker,
- shape: createShapeTypeChecker,
- exact: createStrictShapeTypeChecker,
- };
- /**
- * inlined Object.is polyfill to avoid requiring consumers ship their own
- * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
- */
- /*eslint-disable no-self-compare*/
- function is(x, y) {
- // SameValue algorithm
- if (x === y) {
- // Steps 1-5, 7-10
- // Steps 6.b-6.e: +0 != -0
- return x !== 0 || 1 / x === 1 / y;
- } else {
- // Step 6.a: NaN == NaN
- return x !== x && y !== y;
- }
- }
- /*eslint-enable no-self-compare*/
- /**
- * We use an Error-like object for backward compatibility as people may call
- * PropTypes directly and inspect their output. However, we don't use real
- * Errors anymore. We don't inspect their stack anyway, and creating them
- * is prohibitively expensive if they are created too often, such as what
- * happens in oneOfType() for any type before the one that matched.
- */
- function PropTypeError(message, data) {
- this.message = message;
- this.data = data && typeof data === 'object' ? data: {};
- this.stack = '';
- }
- // Make `instanceof Error` still work for returned errors.
- PropTypeError.prototype = Error.prototype;
- function createChainableTypeChecker(validate) {
- if (true) {
- var manualPropTypeCallCache = {};
- var manualPropTypeWarningCount = 0;
- }
- function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {
- componentName = componentName || ANONYMOUS;
- propFullName = propFullName || propName;
- if (secret !== ReactPropTypesSecret) {
- if (throwOnDirectAccess) {
- // New behavior only for users of `prop-types` package
- var err = new Error(
- 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
- 'Use `PropTypes.checkPropTypes()` to call them. ' +
- 'Read more at http://fb.me/use-check-prop-types'
- );
- err.name = 'Invariant Violation';
- throw err;
- } else if ( true && typeof console !== 'undefined') {
- // Old behavior for people using React.PropTypes
- var cacheKey = componentName + ':' + propName;
- if (
- !manualPropTypeCallCache[cacheKey] &&
- // Avoid spamming the console because they are often not actionable except for lib authors
- manualPropTypeWarningCount < 3
- ) {
- printWarning(
- 'You are manually calling a React.PropTypes validation ' +
- 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +
- 'and will throw in the standalone `prop-types` package. ' +
- 'You may be seeing this warning due to a third-party PropTypes ' +
- 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'
- );
- manualPropTypeCallCache[cacheKey] = true;
- manualPropTypeWarningCount++;
- }
- }
- }
- if (props[propName] == null) {
- if (isRequired) {
- if (props[propName] === null) {
- return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));
- }
- return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));
- }
- return null;
- } else {
- return validate(props, propName, componentName, location, propFullName);
- }
- }
- var chainedCheckType = checkType.bind(null, false);
- chainedCheckType.isRequired = checkType.bind(null, true);
- return chainedCheckType;
- }
- function createPrimitiveTypeChecker(expectedType) {
- function validate(props, propName, componentName, location, propFullName, secret) {
- var propValue = props[propName];
- var propType = getPropType(propValue);
- if (propType !== expectedType) {
- // `propValue` being instance of, say, date/regexp, pass the 'object'
- // check, but we can offer a more precise error message here rather than
- // 'of type `object`'.
- var preciseType = getPreciseType(propValue);
- return new PropTypeError(
- 'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),
- {expectedType: expectedType}
- );
- }
- return null;
- }
- return createChainableTypeChecker(validate);
- }
- function createAnyTypeChecker() {
- return createChainableTypeChecker(emptyFunctionThatReturnsNull);
- }
- function createArrayOfTypeChecker(typeChecker) {
- function validate(props, propName, componentName, location, propFullName) {
- if (typeof typeChecker !== 'function') {
- return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');
- }
- var propValue = props[propName];
- if (!Array.isArray(propValue)) {
- var propType = getPropType(propValue);
- return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));
- }
- for (var i = 0; i < propValue.length; i++) {
- var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);
- if (error instanceof Error) {
- return error;
- }
- }
- return null;
- }
- return createChainableTypeChecker(validate);
- }
- function createElementTypeChecker() {
- function validate(props, propName, componentName, location, propFullName) {
- var propValue = props[propName];
- if (!isValidElement(propValue)) {
- var propType = getPropType(propValue);
- return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));
- }
- return null;
- }
- return createChainableTypeChecker(validate);
- }
- function createElementTypeTypeChecker() {
- function validate(props, propName, componentName, location, propFullName) {
- var propValue = props[propName];
- if (!ReactIs.isValidElementType(propValue)) {
- var propType = getPropType(propValue);
- return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));
- }
- return null;
- }
- return createChainableTypeChecker(validate);
- }
- function createInstanceTypeChecker(expectedClass) {
- function validate(props, propName, componentName, location, propFullName) {
- if (!(props[propName] instanceof expectedClass)) {
- var expectedClassName = expectedClass.name || ANONYMOUS;
- var actualClassName = getClassName(props[propName]);
- return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));
- }
- return null;
- }
- return createChainableTypeChecker(validate);
- }
- function createEnumTypeChecker(expectedValues) {
- if (!Array.isArray(expectedValues)) {
- if (true) {
- if (arguments.length > 1) {
- printWarning(
- 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +
- 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'
- );
- } else {
- printWarning('Invalid argument supplied to oneOf, expected an array.');
- }
- }
- return emptyFunctionThatReturnsNull;
- }
- function validate(props, propName, componentName, location, propFullName) {
- var propValue = props[propName];
- for (var i = 0; i < expectedValues.length; i++) {
- if (is(propValue, expectedValues[i])) {
- return null;
- }
- }
- var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {
- var type = getPreciseType(value);
- if (type === 'symbol') {
- return String(value);
- }
- return value;
- });
- return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));
- }
- return createChainableTypeChecker(validate);
- }
- function createObjectOfTypeChecker(typeChecker) {
- function validate(props, propName, componentName, location, propFullName) {
- if (typeof typeChecker !== 'function') {
- return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');
- }
- var propValue = props[propName];
- var propType = getPropType(propValue);
- if (propType !== 'object') {
- return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));
- }
- for (var key in propValue) {
- if (has(propValue, key)) {
- var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
- if (error instanceof Error) {
- return error;
- }
- }
- }
- return null;
- }
- return createChainableTypeChecker(validate);
- }
- function createUnionTypeChecker(arrayOfTypeCheckers) {
- if (!Array.isArray(arrayOfTypeCheckers)) {
- true ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : 0;
- return emptyFunctionThatReturnsNull;
- }
- for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
- var checker = arrayOfTypeCheckers[i];
- if (typeof checker !== 'function') {
- printWarning(
- 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +
- 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'
- );
- return emptyFunctionThatReturnsNull;
- }
- }
- function validate(props, propName, componentName, location, propFullName) {
- var expectedTypes = [];
- for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
- var checker = arrayOfTypeCheckers[i];
- var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);
- if (checkerResult == null) {
- return null;
- }
- if (checkerResult.data && has(checkerResult.data, 'expectedType')) {
- expectedTypes.push(checkerResult.data.expectedType);
- }
- }
- var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';
- return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));
- }
- return createChainableTypeChecker(validate);
- }
- function createNodeChecker() {
- function validate(props, propName, componentName, location, propFullName) {
- if (!isNode(props[propName])) {
- return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));
- }
- return null;
- }
- return createChainableTypeChecker(validate);
- }
- function invalidValidatorError(componentName, location, propFullName, key, type) {
- return new PropTypeError(
- (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +
- 'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'
- );
- }
- function createShapeTypeChecker(shapeTypes) {
- function validate(props, propName, componentName, location, propFullName) {
- var propValue = props[propName];
- var propType = getPropType(propValue);
- if (propType !== 'object') {
- return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
- }
- for (var key in shapeTypes) {
- var checker = shapeTypes[key];
- if (typeof checker !== 'function') {
- return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));
- }
- var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
- if (error) {
- return error;
- }
- }
- return null;
- }
- return createChainableTypeChecker(validate);
- }
- function createStrictShapeTypeChecker(shapeTypes) {
- function validate(props, propName, componentName, location, propFullName) {
- var propValue = props[propName];
- var propType = getPropType(propValue);
- if (propType !== 'object') {
- return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
- }
- // We need to check all keys in case some are required but missing from props.
- var allKeys = assign({}, props[propName], shapeTypes);
- for (var key in allKeys) {
- var checker = shapeTypes[key];
- if (has(shapeTypes, key) && typeof checker !== 'function') {
- return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));
- }
- if (!checker) {
- return new PropTypeError(
- 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +
- '\nBad object: ' + JSON.stringify(props[propName], null, ' ') +
- '\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')
- );
- }
- var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
- if (error) {
- return error;
- }
- }
- return null;
- }
- return createChainableTypeChecker(validate);
- }
- function isNode(propValue) {
- switch (typeof propValue) {
- case 'number':
- case 'string':
- case 'undefined':
- return true;
- case 'boolean':
- return !propValue;
- case 'object':
- if (Array.isArray(propValue)) {
- return propValue.every(isNode);
- }
- if (propValue === null || isValidElement(propValue)) {
- return true;
- }
- var iteratorFn = getIteratorFn(propValue);
- if (iteratorFn) {
- var iterator = iteratorFn.call(propValue);
- var step;
- if (iteratorFn !== propValue.entries) {
- while (!(step = iterator.next()).done) {
- if (!isNode(step.value)) {
- return false;
- }
- }
- } else {
- // Iterator will provide entry [k,v] tuples rather than values.
- while (!(step = iterator.next()).done) {
- var entry = step.value;
- if (entry) {
- if (!isNode(entry[1])) {
- return false;
- }
- }
- }
- }
- } else {
- return false;
- }
- return true;
- default:
- return false;
- }
- }
- function isSymbol(propType, propValue) {
- // Native Symbol.
- if (propType === 'symbol') {
- return true;
- }
- // falsy value can't be a Symbol
- if (!propValue) {
- return false;
- }
- // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
- if (propValue['@@toStringTag'] === 'Symbol') {
- return true;
- }
- // Fallback for non-spec compliant Symbols which are polyfilled.
- if (typeof Symbol === 'function' && propValue instanceof Symbol) {
- return true;
- }
- return false;
- }
- // Equivalent of `typeof` but with special handling for array and regexp.
- function getPropType(propValue) {
- var propType = typeof propValue;
- if (Array.isArray(propValue)) {
- return 'array';
- }
- if (propValue instanceof RegExp) {
- // Old webkits (at least until Android 4.0) return 'function' rather than
- // 'object' for typeof a RegExp. We'll normalize this here so that /bla/
- // passes PropTypes.object.
- return 'object';
- }
- if (isSymbol(propType, propValue)) {
- return 'symbol';
- }
- return propType;
- }
- // This handles more types than `getPropType`. Only used for error messages.
- // See `createPrimitiveTypeChecker`.
- function getPreciseType(propValue) {
- if (typeof propValue === 'undefined' || propValue === null) {
- return '' + propValue;
- }
- var propType = getPropType(propValue);
- if (propType === 'object') {
- if (propValue instanceof Date) {
- return 'date';
- } else if (propValue instanceof RegExp) {
- return 'regexp';
- }
- }
- return propType;
- }
- // Returns a string that is postfixed to a warning about an invalid type.
- // For example, "undefined" or "of type array"
- function getPostfixForTypeWarning(value) {
- var type = getPreciseType(value);
- switch (type) {
- case 'array':
- case 'object':
- return 'an ' + type;
- case 'boolean':
- case 'date':
- case 'regexp':
- return 'a ' + type;
- default:
- return type;
- }
- }
- // Returns class name of the object, if any.
- function getClassName(propValue) {
- if (!propValue.constructor || !propValue.constructor.name) {
- return ANONYMOUS;
- }
- return propValue.constructor.name;
- }
- ReactPropTypes.checkPropTypes = checkPropTypes;
- ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;
- ReactPropTypes.PropTypes = ReactPropTypes;
- return ReactPropTypes;
- };
- /***/ }),
- /***/ "./node_modules/prop-types/index.js":
- /*!******************************************!*\
- !*** ./node_modules/prop-types/index.js ***!
- \******************************************/
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- /**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- if (true) {
- var ReactIs = __webpack_require__(/*! react-is */ "./node_modules/react-is/index.js");
- // By explicitly using `prop-types` you are opting into new development behavior.
- // http://fb.me/prop-types-in-prod
- var throwOnDirectAccess = true;
- module.exports = __webpack_require__(/*! ./factoryWithTypeCheckers */ "./node_modules/prop-types/factoryWithTypeCheckers.js")(ReactIs.isElement, throwOnDirectAccess);
- } else {}
- /***/ }),
- /***/ "./node_modules/prop-types/lib/ReactPropTypesSecret.js":
- /*!*************************************************************!*\
- !*** ./node_modules/prop-types/lib/ReactPropTypesSecret.js ***!
- \*************************************************************/
- /***/ ((module) => {
- "use strict";
- /**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
- module.exports = ReactPropTypesSecret;
- /***/ }),
- /***/ "./node_modules/prop-types/lib/has.js":
- /*!********************************************!*\
- !*** ./node_modules/prop-types/lib/has.js ***!
- \********************************************/
- /***/ ((module) => {
- module.exports = Function.call.bind(Object.prototype.hasOwnProperty);
- /***/ }),
- /***/ "./node_modules/react-is/cjs/react-is.development.js":
- /*!***********************************************************!*\
- !*** ./node_modules/react-is/cjs/react-is.development.js ***!
- \***********************************************************/
- /***/ ((__unused_webpack_module, exports) => {
- "use strict";
- /** @license React v16.13.1
- * react-is.development.js
- *
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- if (true) {
- (function() {
- 'use strict';
- // The Symbol used to tag the ReactElement-like types. If there is no native Symbol
- // nor polyfill, then a plain number is used for performance.
- var hasSymbol = typeof Symbol === 'function' && Symbol.for;
- var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;
- var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;
- var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;
- var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;
- var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;
- var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;
- var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary
- // (unstable) APIs that have been removed. Can we remove the symbols?
- var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;
- var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;
- var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;
- var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;
- var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;
- var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;
- var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;
- var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;
- var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;
- var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;
- var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;
- function isValidElementType(type) {
- return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.
- type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);
- }
- function typeOf(object) {
- if (typeof object === 'object' && object !== null) {
- var $$typeof = object.$$typeof;
- switch ($$typeof) {
- case REACT_ELEMENT_TYPE:
- var type = object.type;
- switch (type) {
- case REACT_ASYNC_MODE_TYPE:
- case REACT_CONCURRENT_MODE_TYPE:
- case REACT_FRAGMENT_TYPE:
- case REACT_PROFILER_TYPE:
- case REACT_STRICT_MODE_TYPE:
- case REACT_SUSPENSE_TYPE:
- return type;
- default:
- var $$typeofType = type && type.$$typeof;
- switch ($$typeofType) {
- case REACT_CONTEXT_TYPE:
- case REACT_FORWARD_REF_TYPE:
- case REACT_LAZY_TYPE:
- case REACT_MEMO_TYPE:
- case REACT_PROVIDER_TYPE:
- return $$typeofType;
- default:
- return $$typeof;
- }
- }
- case REACT_PORTAL_TYPE:
- return $$typeof;
- }
- }
- return undefined;
- } // AsyncMode is deprecated along with isAsyncMode
- var AsyncMode = REACT_ASYNC_MODE_TYPE;
- var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;
- var ContextConsumer = REACT_CONTEXT_TYPE;
- var ContextProvider = REACT_PROVIDER_TYPE;
- var Element = REACT_ELEMENT_TYPE;
- var ForwardRef = REACT_FORWARD_REF_TYPE;
- var Fragment = REACT_FRAGMENT_TYPE;
- var Lazy = REACT_LAZY_TYPE;
- var Memo = REACT_MEMO_TYPE;
- var Portal = REACT_PORTAL_TYPE;
- var Profiler = REACT_PROFILER_TYPE;
- var StrictMode = REACT_STRICT_MODE_TYPE;
- var Suspense = REACT_SUSPENSE_TYPE;
- var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated
- function isAsyncMode(object) {
- {
- if (!hasWarnedAboutDeprecatedIsAsyncMode) {
- hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint
- console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');
- }
- }
- return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;
- }
- function isConcurrentMode(object) {
- return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;
- }
- function isContextConsumer(object) {
- return typeOf(object) === REACT_CONTEXT_TYPE;
- }
- function isContextProvider(object) {
- return typeOf(object) === REACT_PROVIDER_TYPE;
- }
- function isElement(object) {
- return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
- }
- function isForwardRef(object) {
- return typeOf(object) === REACT_FORWARD_REF_TYPE;
- }
- function isFragment(object) {
- return typeOf(object) === REACT_FRAGMENT_TYPE;
- }
- function isLazy(object) {
- return typeOf(object) === REACT_LAZY_TYPE;
- }
- function isMemo(object) {
- return typeOf(object) === REACT_MEMO_TYPE;
- }
- function isPortal(object) {
- return typeOf(object) === REACT_PORTAL_TYPE;
- }
- function isProfiler(object) {
- return typeOf(object) === REACT_PROFILER_TYPE;
- }
- function isStrictMode(object) {
- return typeOf(object) === REACT_STRICT_MODE_TYPE;
- }
- function isSuspense(object) {
- return typeOf(object) === REACT_SUSPENSE_TYPE;
- }
- exports.AsyncMode = AsyncMode;
- exports.ConcurrentMode = ConcurrentMode;
- exports.ContextConsumer = ContextConsumer;
- exports.ContextProvider = ContextProvider;
- exports.Element = Element;
- exports.ForwardRef = ForwardRef;
- exports.Fragment = Fragment;
- exports.Lazy = Lazy;
- exports.Memo = Memo;
- exports.Portal = Portal;
- exports.Profiler = Profiler;
- exports.StrictMode = StrictMode;
- exports.Suspense = Suspense;
- exports.isAsyncMode = isAsyncMode;
- exports.isConcurrentMode = isConcurrentMode;
- exports.isContextConsumer = isContextConsumer;
- exports.isContextProvider = isContextProvider;
- exports.isElement = isElement;
- exports.isForwardRef = isForwardRef;
- exports.isFragment = isFragment;
- exports.isLazy = isLazy;
- exports.isMemo = isMemo;
- exports.isPortal = isPortal;
- exports.isProfiler = isProfiler;
- exports.isStrictMode = isStrictMode;
- exports.isSuspense = isSuspense;
- exports.isValidElementType = isValidElementType;
- exports.typeOf = typeOf;
- })();
- }
- /***/ }),
- /***/ "./node_modules/react-is/index.js":
- /*!****************************************!*\
- !*** ./node_modules/react-is/index.js ***!
- \****************************************/
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- if (false) {} else {
- module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ "./node_modules/react-is/cjs/react-is.development.js");
- }
- /***/ }),
- /***/ "./node_modules/react-router-dom/dist/index.js":
- /*!*****************************************************!*\
- !*** ./node_modules/react-router-dom/dist/index.js ***!
- \*****************************************************/
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
- /* harmony export */ "AbortedDeferredError": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.AbortedDeferredError),
- /* harmony export */ "Await": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.Await),
- /* harmony export */ "BrowserRouter": () => (/* binding */ BrowserRouter),
- /* harmony export */ "Form": () => (/* binding */ Form),
- /* harmony export */ "HashRouter": () => (/* binding */ HashRouter),
- /* harmony export */ "Link": () => (/* binding */ Link),
- /* harmony export */ "MemoryRouter": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.MemoryRouter),
- /* harmony export */ "NavLink": () => (/* binding */ NavLink),
- /* harmony export */ "Navigate": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.Navigate),
- /* harmony export */ "NavigationType": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.Action),
- /* harmony export */ "Outlet": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.Outlet),
- /* harmony export */ "Route": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.Route),
- /* harmony export */ "Router": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.Router),
- /* harmony export */ "RouterProvider": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.RouterProvider),
- /* harmony export */ "Routes": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.Routes),
- /* harmony export */ "ScrollRestoration": () => (/* binding */ ScrollRestoration),
- /* harmony export */ "UNSAFE_DataRouterContext": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_DataRouterContext),
- /* harmony export */ "UNSAFE_DataRouterStateContext": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_DataRouterStateContext),
- /* harmony export */ "UNSAFE_DataStaticRouterContext": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_DataStaticRouterContext),
- /* harmony export */ "UNSAFE_LocationContext": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_LocationContext),
- /* harmony export */ "UNSAFE_NavigationContext": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_NavigationContext),
- /* harmony export */ "UNSAFE_RouteContext": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_RouteContext),
- /* harmony export */ "UNSAFE_enhanceManualRouteObjects": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_enhanceManualRouteObjects),
- /* harmony export */ "createBrowserRouter": () => (/* binding */ createBrowserRouter),
- /* harmony export */ "createHashRouter": () => (/* binding */ createHashRouter),
- /* harmony export */ "createMemoryRouter": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.createMemoryRouter),
- /* harmony export */ "createPath": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.createPath),
- /* harmony export */ "createRoutesFromChildren": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.createRoutesFromChildren),
- /* harmony export */ "createRoutesFromElements": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.createRoutesFromElements),
- /* harmony export */ "createSearchParams": () => (/* binding */ createSearchParams),
- /* harmony export */ "defer": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.defer),
- /* harmony export */ "generatePath": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.generatePath),
- /* harmony export */ "isRouteErrorResponse": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.isRouteErrorResponse),
- /* harmony export */ "json": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.json),
- /* harmony export */ "matchPath": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.matchPath),
- /* harmony export */ "matchRoutes": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.matchRoutes),
- /* harmony export */ "parsePath": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.parsePath),
- /* harmony export */ "redirect": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.redirect),
- /* harmony export */ "renderMatches": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.renderMatches),
- /* harmony export */ "resolvePath": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_1__.resolvePath),
- /* harmony export */ "unstable_HistoryRouter": () => (/* binding */ HistoryRouter),
- /* harmony export */ "useActionData": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useActionData),
- /* harmony export */ "useAsyncError": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useAsyncError),
- /* harmony export */ "useAsyncValue": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useAsyncValue),
- /* harmony export */ "useFetcher": () => (/* binding */ useFetcher),
- /* harmony export */ "useFetchers": () => (/* binding */ useFetchers),
- /* harmony export */ "useFormAction": () => (/* binding */ useFormAction),
- /* harmony export */ "useHref": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useHref),
- /* harmony export */ "useInRouterContext": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useInRouterContext),
- /* harmony export */ "useLinkClickHandler": () => (/* binding */ useLinkClickHandler),
- /* harmony export */ "useLoaderData": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useLoaderData),
- /* harmony export */ "useLocation": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useLocation),
- /* harmony export */ "useMatch": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useMatch),
- /* harmony export */ "useMatches": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useMatches),
- /* harmony export */ "useNavigate": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useNavigate),
- /* harmony export */ "useNavigation": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useNavigation),
- /* harmony export */ "useNavigationType": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useNavigationType),
- /* harmony export */ "useOutlet": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useOutlet),
- /* harmony export */ "useOutletContext": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useOutletContext),
- /* harmony export */ "useParams": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useParams),
- /* harmony export */ "useResolvedPath": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useResolvedPath),
- /* harmony export */ "useRevalidator": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useRevalidator),
- /* harmony export */ "useRouteError": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useRouteError),
- /* harmony export */ "useRouteLoaderData": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useRouteLoaderData),
- /* harmony export */ "useRoutes": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.useRoutes),
- /* harmony export */ "useSearchParams": () => (/* binding */ useSearchParams),
- /* harmony export */ "useSubmit": () => (/* binding */ useSubmit)
- /* harmony export */ });
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
- /* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router */ "./node_modules/react-router/dist/index.js");
- /* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @remix-run/router */ "./node_modules/@remix-run/router/dist/router.js");
- /**
- * React Router DOM v6.4.3
- *
- * Copyright (c) Remix Software Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE.md file in the root directory of this source tree.
- *
- * @license MIT
- */
- function _extends() {
- _extends = Object.assign ? Object.assign.bind() : function (target) {
- for (var i = 1; i < arguments.length; i++) {
- var source = arguments[i];
- for (var key in source) {
- if (Object.prototype.hasOwnProperty.call(source, key)) {
- target[key] = source[key];
- }
- }
- }
- return target;
- };
- return _extends.apply(this, arguments);
- }
- function _objectWithoutPropertiesLoose(source, excluded) {
- if (source == null) return {};
- var target = {};
- var sourceKeys = Object.keys(source);
- var key, i;
- for (i = 0; i < sourceKeys.length; i++) {
- key = sourceKeys[i];
- if (excluded.indexOf(key) >= 0) continue;
- target[key] = source[key];
- }
- return target;
- }
- const defaultMethod = "get";
- const defaultEncType = "application/x-www-form-urlencoded";
- function isHtmlElement(object) {
- return object != null && typeof object.tagName === "string";
- }
- function isButtonElement(object) {
- return isHtmlElement(object) && object.tagName.toLowerCase() === "button";
- }
- function isFormElement(object) {
- return isHtmlElement(object) && object.tagName.toLowerCase() === "form";
- }
- function isInputElement(object) {
- return isHtmlElement(object) && object.tagName.toLowerCase() === "input";
- }
- function isModifiedEvent(event) {
- return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);
- }
- function shouldProcessLinkClick(event, target) {
- return event.button === 0 && ( // Ignore everything but left clicks
- !target || target === "_self") && // Let browser handle "target=_blank" etc.
- !isModifiedEvent(event) // Ignore clicks with modifier keys
- ;
- }
- /**
- * Creates a URLSearchParams object using the given initializer.
- *
- * This is identical to `new URLSearchParams(init)` except it also
- * supports arrays as values in the object form of the initializer
- * instead of just strings. This is convenient when you need multiple
- * values for a given key, but don't want to use an array initializer.
- *
- * For example, instead of:
- *
- * let searchParams = new URLSearchParams([
- * ['sort', 'name'],
- * ['sort', 'price']
- * ]);
- *
- * you can do:
- *
- * let searchParams = createSearchParams({
- * sort: ['name', 'price']
- * });
- */
- function createSearchParams(init) {
- if (init === void 0) {
- init = "";
- }
- return new URLSearchParams(typeof init === "string" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo, key) => {
- let value = init[key];
- return memo.concat(Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]);
- }, []));
- }
- function getSearchParamsForLocation(locationSearch, defaultSearchParams) {
- let searchParams = createSearchParams(locationSearch);
- for (let key of defaultSearchParams.keys()) {
- if (!searchParams.has(key)) {
- defaultSearchParams.getAll(key).forEach(value => {
- searchParams.append(key, value);
- });
- }
- }
- return searchParams;
- }
- function getFormSubmissionInfo(target, defaultAction, options) {
- let method;
- let action;
- let encType;
- let formData;
- if (isFormElement(target)) {
- let submissionTrigger = options.submissionTrigger;
- method = options.method || target.getAttribute("method") || defaultMethod;
- action = options.action || target.getAttribute("action") || defaultAction;
- encType = options.encType || target.getAttribute("enctype") || defaultEncType;
- formData = new FormData(target);
- if (submissionTrigger && submissionTrigger.name) {
- formData.append(submissionTrigger.name, submissionTrigger.value);
- }
- } else if (isButtonElement(target) || isInputElement(target) && (target.type === "submit" || target.type === "image")) {
- let form = target.form;
- if (form == null) {
- throw new Error("Cannot submit a <button> or <input type=\"submit\"> without a <form>");
- } // <button>/<input type="submit"> may override attributes of <form>
- method = options.method || target.getAttribute("formmethod") || form.getAttribute("method") || defaultMethod;
- action = options.action || target.getAttribute("formaction") || form.getAttribute("action") || defaultAction;
- encType = options.encType || target.getAttribute("formenctype") || form.getAttribute("enctype") || defaultEncType;
- formData = new FormData(form); // Include name + value from a <button>, appending in case the button name
- // matches an existing input name
- if (target.name) {
- formData.append(target.name, target.value);
- }
- } else if (isHtmlElement(target)) {
- throw new Error("Cannot submit element that is not <form>, <button>, or " + "<input type=\"submit|image\">");
- } else {
- method = options.method || defaultMethod;
- action = options.action || defaultAction;
- encType = options.encType || defaultEncType;
- if (target instanceof FormData) {
- formData = target;
- } else {
- formData = new FormData();
- if (target instanceof URLSearchParams) {
- for (let [name, value] of target) {
- formData.append(name, value);
- }
- } else if (target != null) {
- for (let name of Object.keys(target)) {
- formData.append(name, target[name]);
- }
- }
- }
- }
- let {
- protocol,
- host
- } = window.location;
- let url = new URL(action, protocol + "//" + host);
- return {
- url,
- method,
- encType,
- formData
- };
- }
- const _excluded = ["onClick", "relative", "reloadDocument", "replace", "state", "target", "to", "preventScrollReset"],
- _excluded2 = ["aria-current", "caseSensitive", "className", "end", "style", "to", "children"],
- _excluded3 = ["reloadDocument", "replace", "method", "action", "onSubmit", "fetcherKey", "routeId", "relative"];
- //#region Routers
- ////////////////////////////////////////////////////////////////////////////////
- function createBrowserRouter(routes, opts) {
- var _window;
- return (0,react_router__WEBPACK_IMPORTED_MODULE_1__.createRouter)({
- basename: opts == null ? void 0 : opts.basename,
- history: (0,react_router__WEBPACK_IMPORTED_MODULE_1__.createBrowserHistory)({
- window: opts == null ? void 0 : opts.window
- }),
- hydrationData: (opts == null ? void 0 : opts.hydrationData) || ((_window = window) == null ? void 0 : _window.__staticRouterHydrationData),
- routes: (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_enhanceManualRouteObjects)(routes)
- }).initialize();
- }
- function createHashRouter(routes, opts) {
- var _window2;
- return (0,react_router__WEBPACK_IMPORTED_MODULE_1__.createRouter)({
- basename: opts == null ? void 0 : opts.basename,
- history: (0,react_router__WEBPACK_IMPORTED_MODULE_1__.createHashHistory)({
- window: opts == null ? void 0 : opts.window
- }),
- hydrationData: (opts == null ? void 0 : opts.hydrationData) || ((_window2 = window) == null ? void 0 : _window2.__staticRouterHydrationData),
- routes: (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_enhanceManualRouteObjects)(routes)
- }).initialize();
- }
- /**
- * A `<Router>` for use in web browsers. Provides the cleanest URLs.
- */
- function BrowserRouter(_ref) {
- let {
- basename,
- children,
- window
- } = _ref;
- let historyRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef();
- if (historyRef.current == null) {
- historyRef.current = (0,react_router__WEBPACK_IMPORTED_MODULE_1__.createBrowserHistory)({
- window,
- v5Compat: true
- });
- }
- let history = historyRef.current;
- let [state, setState] = react__WEBPACK_IMPORTED_MODULE_0__.useState({
- action: history.action,
- location: history.location
- });
- react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => history.listen(setState), [history]);
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router__WEBPACK_IMPORTED_MODULE_2__.Router, {
- basename: basename,
- children: children,
- location: state.location,
- navigationType: state.action,
- navigator: history
- });
- }
- /**
- * A `<Router>` for use in web browsers. Stores the location in the hash
- * portion of the URL so it is not sent to the server.
- */
- function HashRouter(_ref2) {
- let {
- basename,
- children,
- window
- } = _ref2;
- let historyRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef();
- if (historyRef.current == null) {
- historyRef.current = (0,react_router__WEBPACK_IMPORTED_MODULE_1__.createHashHistory)({
- window,
- v5Compat: true
- });
- }
- let history = historyRef.current;
- let [state, setState] = react__WEBPACK_IMPORTED_MODULE_0__.useState({
- action: history.action,
- location: history.location
- });
- react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => history.listen(setState), [history]);
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router__WEBPACK_IMPORTED_MODULE_2__.Router, {
- basename: basename,
- children: children,
- location: state.location,
- navigationType: state.action,
- navigator: history
- });
- }
- /**
- * A `<Router>` that accepts a pre-instantiated history object. It's important
- * to note that using your own history object is highly discouraged and may add
- * two versions of the history library to your bundles unless you use the same
- * version of the history library that React Router uses internally.
- */
- function HistoryRouter(_ref3) {
- let {
- basename,
- children,
- history
- } = _ref3;
- const [state, setState] = react__WEBPACK_IMPORTED_MODULE_0__.useState({
- action: history.action,
- location: history.location
- });
- react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => history.listen(setState), [history]);
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router__WEBPACK_IMPORTED_MODULE_2__.Router, {
- basename: basename,
- children: children,
- location: state.location,
- navigationType: state.action,
- navigator: history
- });
- }
- if (true) {
- HistoryRouter.displayName = "unstable_HistoryRouter";
- }
- /**
- * The public API for rendering a history-aware <a>.
- */
- const Link = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function LinkWithRef(_ref4, ref) {
- let {
- onClick,
- relative,
- reloadDocument,
- replace,
- state,
- target,
- to,
- preventScrollReset
- } = _ref4,
- rest = _objectWithoutPropertiesLoose(_ref4, _excluded);
- let href = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useHref)(to, {
- relative
- });
- let internalOnClick = useLinkClickHandler(to, {
- replace,
- state,
- target,
- preventScrollReset,
- relative
- });
- function handleClick(event) {
- if (onClick) onClick(event);
- if (!event.defaultPrevented) {
- internalOnClick(event);
- }
- }
- return (
- /*#__PURE__*/
- // eslint-disable-next-line jsx-a11y/anchor-has-content
- react__WEBPACK_IMPORTED_MODULE_0__.createElement("a", _extends({}, rest, {
- href: href,
- onClick: reloadDocument ? onClick : handleClick,
- ref: ref,
- target: target
- }))
- );
- });
- if (true) {
- Link.displayName = "Link";
- }
- /**
- * A <Link> wrapper that knows if it's "active" or not.
- */
- const NavLink = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function NavLinkWithRef(_ref5, ref) {
- let {
- "aria-current": ariaCurrentProp = "page",
- caseSensitive = false,
- className: classNameProp = "",
- end = false,
- style: styleProp,
- to,
- children
- } = _ref5,
- rest = _objectWithoutPropertiesLoose(_ref5, _excluded2);
- let path = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useResolvedPath)(to, {
- relative: rest.relative
- });
- let location = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useLocation)();
- let routerState = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_DataRouterStateContext);
- let toPathname = path.pathname;
- let locationPathname = location.pathname;
- let nextLocationPathname = routerState && routerState.navigation && routerState.navigation.location ? routerState.navigation.location.pathname : null;
- if (!caseSensitive) {
- locationPathname = locationPathname.toLowerCase();
- nextLocationPathname = nextLocationPathname ? nextLocationPathname.toLowerCase() : null;
- toPathname = toPathname.toLowerCase();
- }
- let isActive = locationPathname === toPathname || !end && locationPathname.startsWith(toPathname) && locationPathname.charAt(toPathname.length) === "/";
- let isPending = nextLocationPathname != null && (nextLocationPathname === toPathname || !end && nextLocationPathname.startsWith(toPathname) && nextLocationPathname.charAt(toPathname.length) === "/");
- let ariaCurrent = isActive ? ariaCurrentProp : undefined;
- let className;
- if (typeof classNameProp === "function") {
- className = classNameProp({
- isActive,
- isPending
- });
- } else {
- // If the className prop is not a function, we use a default `active`
- // class for <NavLink />s that are active. In v5 `active` was the default
- // value for `activeClassName`, but we are removing that API and can still
- // use the old default behavior for a cleaner upgrade path and keep the
- // simple styling rules working as they currently do.
- className = [classNameProp, isActive ? "active" : null, isPending ? "pending" : null].filter(Boolean).join(" ");
- }
- let style = typeof styleProp === "function" ? styleProp({
- isActive,
- isPending
- }) : styleProp;
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Link, _extends({}, rest, {
- "aria-current": ariaCurrent,
- className: className,
- ref: ref,
- style: style,
- to: to
- }), typeof children === "function" ? children({
- isActive,
- isPending
- }) : children);
- });
- if (true) {
- NavLink.displayName = "NavLink";
- }
- /**
- * A `@remix-run/router`-aware `<form>`. It behaves like a normal form except
- * that the interaction with the server is with `fetch` instead of new document
- * requests, allowing components to add nicer UX to the page as the form is
- * submitted and returns with data.
- */
- const Form = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, ref) => {
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(FormImpl, _extends({}, props, {
- ref: ref
- }));
- });
- if (true) {
- Form.displayName = "Form";
- }
- const FormImpl = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((_ref6, forwardedRef) => {
- let {
- reloadDocument,
- replace,
- method = defaultMethod,
- action,
- onSubmit,
- fetcherKey,
- routeId,
- relative
- } = _ref6,
- props = _objectWithoutPropertiesLoose(_ref6, _excluded3);
- let submit = useSubmitImpl(fetcherKey, routeId);
- let formMethod = method.toLowerCase() === "get" ? "get" : "post";
- let formAction = useFormAction(action, {
- relative
- });
- let submitHandler = event => {
- onSubmit && onSubmit(event);
- if (event.defaultPrevented) return;
- event.preventDefault();
- let submitter = event.nativeEvent.submitter;
- submit(submitter || event.currentTarget, {
- method,
- replace,
- relative
- });
- };
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("form", _extends({
- ref: forwardedRef,
- method: formMethod,
- action: formAction,
- onSubmit: reloadDocument ? onSubmit : submitHandler
- }, props));
- });
- if (true) {
- Form.displayName = "Form";
- }
- /**
- * This component will emulate the browser's scroll restoration on location
- * changes.
- */
- function ScrollRestoration(_ref7) {
- let {
- getKey,
- storageKey
- } = _ref7;
- useScrollRestoration({
- getKey,
- storageKey
- });
- return null;
- }
- if (true) {
- ScrollRestoration.displayName = "ScrollRestoration";
- } //#endregion
- ////////////////////////////////////////////////////////////////////////////////
- //#region Hooks
- ////////////////////////////////////////////////////////////////////////////////
- var DataRouterHook;
- (function (DataRouterHook) {
- DataRouterHook["UseScrollRestoration"] = "useScrollRestoration";
- DataRouterHook["UseSubmitImpl"] = "useSubmitImpl";
- DataRouterHook["UseFetcher"] = "useFetcher";
- })(DataRouterHook || (DataRouterHook = {}));
- var DataRouterStateHook;
- (function (DataRouterStateHook) {
- DataRouterStateHook["UseFetchers"] = "useFetchers";
- DataRouterStateHook["UseScrollRestoration"] = "useScrollRestoration";
- })(DataRouterStateHook || (DataRouterStateHook = {}));
- function getDataRouterConsoleError(hookName) {
- return hookName + " must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.";
- }
- function useDataRouterContext(hookName) {
- let ctx = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_DataRouterContext);
- !ctx ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_1__.invariant)(false, getDataRouterConsoleError(hookName)) : 0 : void 0;
- return ctx;
- }
- function useDataRouterState(hookName) {
- let state = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_DataRouterStateContext);
- !state ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_1__.invariant)(false, getDataRouterConsoleError(hookName)) : 0 : void 0;
- return state;
- }
- /**
- * Handles the click behavior for router `<Link>` components. This is useful if
- * you need to create custom `<Link>` components with the same click behavior we
- * use in our exported `<Link>`.
- */
- function useLinkClickHandler(to, _temp) {
- let {
- target,
- replace: replaceProp,
- state,
- preventScrollReset,
- relative
- } = _temp === void 0 ? {} : _temp;
- let navigate = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useNavigate)();
- let location = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useLocation)();
- let path = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useResolvedPath)(to, {
- relative
- });
- return react__WEBPACK_IMPORTED_MODULE_0__.useCallback(event => {
- if (shouldProcessLinkClick(event, target)) {
- event.preventDefault(); // If the URL hasn't changed, a regular <a> will do a replace instead of
- // a push, so do the same here unless the replace prop is explicitly set
- let replace = replaceProp !== undefined ? replaceProp : (0,react_router__WEBPACK_IMPORTED_MODULE_1__.createPath)(location) === (0,react_router__WEBPACK_IMPORTED_MODULE_1__.createPath)(path);
- navigate(to, {
- replace,
- state,
- preventScrollReset,
- relative
- });
- }
- }, [location, navigate, path, replaceProp, state, target, to, preventScrollReset, relative]);
- }
- /**
- * A convenient wrapper for reading and writing search parameters via the
- * URLSearchParams interface.
- */
- function useSearchParams(defaultInit) {
- true ? warning(typeof URLSearchParams !== "undefined", "You cannot use the `useSearchParams` hook in a browser that does not " + "support the URLSearchParams API. If you need to support Internet " + "Explorer 11, we recommend you load a polyfill such as " + "https://github.com/ungap/url-search-params\n\n" + "If you're unsure how to load polyfills, we recommend you check out " + "https://polyfill.io/v3/ which provides some recommendations about how " + "to load polyfills only for users that need them, instead of for every " + "user.") : 0;
- let defaultSearchParamsRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(createSearchParams(defaultInit));
- let location = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useLocation)();
- let searchParams = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => getSearchParamsForLocation(location.search, defaultSearchParamsRef.current), [location.search]);
- let navigate = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useNavigate)();
- let setSearchParams = react__WEBPACK_IMPORTED_MODULE_0__.useCallback((nextInit, navigateOptions) => {
- const newSearchParams = createSearchParams(typeof nextInit === "function" ? nextInit(searchParams) : nextInit);
- navigate("?" + newSearchParams, navigateOptions);
- }, [navigate, searchParams]);
- return [searchParams, setSearchParams];
- }
- /**
- * Returns a function that may be used to programmatically submit a form (or
- * some arbitrary data) to the server.
- */
- function useSubmit() {
- return useSubmitImpl();
- }
- function useSubmitImpl(fetcherKey, routeId) {
- let {
- router
- } = useDataRouterContext(DataRouterHook.UseSubmitImpl);
- let defaultAction = useFormAction();
- return react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function (target, options) {
- if (options === void 0) {
- options = {};
- }
- if (typeof document === "undefined") {
- throw new Error("You are calling submit during the server render. " + "Try calling submit within a `useEffect` or callback instead.");
- }
- let {
- method,
- encType,
- formData,
- url
- } = getFormSubmissionInfo(target, defaultAction, options);
- let href = url.pathname + url.search;
- let opts = {
- replace: options.replace,
- formData,
- formMethod: method,
- formEncType: encType
- };
- if (fetcherKey) {
- !(routeId != null) ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_1__.invariant)(false, "No routeId available for useFetcher()") : 0 : void 0;
- router.fetch(fetcherKey, routeId, href, opts);
- } else {
- router.navigate(href, opts);
- }
- }, [defaultAction, router, fetcherKey, routeId]);
- }
- function useFormAction(action, _temp2) {
- let {
- relative
- } = _temp2 === void 0 ? {} : _temp2;
- let {
- basename
- } = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_NavigationContext);
- let routeContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_RouteContext);
- !routeContext ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_1__.invariant)(false, "useFormAction must be used inside a RouteContext") : 0 : void 0;
- let [match] = routeContext.matches.slice(-1);
- let resolvedAction = action != null ? action : "."; // Shallow clone path so we can modify it below, otherwise we modify the
- // object referenced by useMemo inside useResolvedPath
- let path = _extends({}, (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useResolvedPath)(resolvedAction, {
- relative
- })); // Previously we set the default action to ".". The problem with this is that
- // `useResolvedPath(".")` excludes search params and the hash of the resolved
- // URL. This is the intended behavior of when "." is specifically provided as
- // the form action, but inconsistent w/ browsers when the action is omitted.
- // https://github.com/remix-run/remix/issues/927
- let location = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useLocation)();
- if (action == null) {
- // Safe to write to these directly here since if action was undefined, we
- // would have called useResolvedPath(".") which will never include a search
- // or hash
- path.search = location.search;
- path.hash = location.hash; // When grabbing search params from the URL, remove the automatically
- // inserted ?index param so we match the useResolvedPath search behavior
- // which would not include ?index
- if (match.route.index) {
- let params = new URLSearchParams(path.search);
- params.delete("index");
- path.search = params.toString() ? "?" + params.toString() : "";
- }
- }
- if ((!action || action === ".") && match.route.index) {
- path.search = path.search ? path.search.replace(/^\?/, "?index&") : "?index";
- } // If we're operating within a basename, prepend it to the pathname prior
- // to creating the form action. If this is a root navigation, then just use
- // the raw basename which allows the basename to have full control over the
- // presence of a trailing slash on root actions
- if (basename !== "/") {
- path.pathname = path.pathname === "/" ? basename : (0,react_router__WEBPACK_IMPORTED_MODULE_1__.joinPaths)([basename, path.pathname]);
- }
- return (0,react_router__WEBPACK_IMPORTED_MODULE_1__.createPath)(path);
- }
- function createFetcherForm(fetcherKey, routeId) {
- let FetcherForm = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, ref) => {
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(FormImpl, _extends({}, props, {
- ref: ref,
- fetcherKey: fetcherKey,
- routeId: routeId
- }));
- });
- if (true) {
- FetcherForm.displayName = "fetcher.Form";
- }
- return FetcherForm;
- }
- let fetcherId = 0;
- /**
- * Interacts with route loaders and actions without causing a navigation. Great
- * for any interaction that stays on the same page.
- */
- function useFetcher() {
- var _route$matches;
- let {
- router
- } = useDataRouterContext(DataRouterHook.UseFetcher);
- let route = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_RouteContext);
- !route ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_1__.invariant)(false, "useFetcher must be used inside a RouteContext") : 0 : void 0;
- let routeId = (_route$matches = route.matches[route.matches.length - 1]) == null ? void 0 : _route$matches.route.id;
- !(routeId != null) ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_1__.invariant)(false, "useFetcher can only be used on routes that contain a unique \"id\"") : 0 : void 0;
- let [fetcherKey] = react__WEBPACK_IMPORTED_MODULE_0__.useState(() => String(++fetcherId));
- let [Form] = react__WEBPACK_IMPORTED_MODULE_0__.useState(() => {
- !routeId ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_1__.invariant)(false, "No routeId available for fetcher.Form()") : 0 : void 0;
- return createFetcherForm(fetcherKey, routeId);
- });
- let [load] = react__WEBPACK_IMPORTED_MODULE_0__.useState(() => href => {
- !router ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_1__.invariant)(false, "No router available for fetcher.load()") : 0 : void 0;
- !routeId ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_1__.invariant)(false, "No routeId available for fetcher.load()") : 0 : void 0;
- router.fetch(fetcherKey, routeId, href);
- });
- let submit = useSubmitImpl(fetcherKey, routeId);
- let fetcher = router.getFetcher(fetcherKey);
- let fetcherWithComponents = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => _extends({
- Form,
- submit,
- load
- }, fetcher), [fetcher, Form, submit, load]);
- react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
- // Is this busted when the React team gets real weird and calls effects
- // twice on mount? We really just need to garbage collect here when this
- // fetcher is no longer around.
- return () => {
- if (!router) {
- console.warn("No fetcher available to clean up from useFetcher()");
- return;
- }
- router.deleteFetcher(fetcherKey);
- };
- }, [router, fetcherKey]);
- return fetcherWithComponents;
- }
- /**
- * Provides all fetchers currently on the page. Useful for layouts and parent
- * routes that need to provide pending/optimistic UI regarding the fetch.
- */
- function useFetchers() {
- let state = useDataRouterState(DataRouterStateHook.UseFetchers);
- return [...state.fetchers.values()];
- }
- const SCROLL_RESTORATION_STORAGE_KEY = "react-router-scroll-positions";
- let savedScrollPositions = {};
- /**
- * When rendered inside a RouterProvider, will restore scroll positions on navigations
- */
- function useScrollRestoration(_temp3) {
- let {
- getKey,
- storageKey
- } = _temp3 === void 0 ? {} : _temp3;
- let {
- router
- } = useDataRouterContext(DataRouterHook.UseScrollRestoration);
- let {
- restoreScrollPosition,
- preventScrollReset
- } = useDataRouterState(DataRouterStateHook.UseScrollRestoration);
- let location = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useLocation)();
- let matches = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useMatches)();
- let navigation = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.useNavigation)(); // Trigger manual scroll restoration while we're active
- react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
- window.history.scrollRestoration = "manual";
- return () => {
- window.history.scrollRestoration = "auto";
- };
- }, []); // Save positions on unload
- useBeforeUnload(react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => {
- if (navigation.state === "idle") {
- let key = (getKey ? getKey(location, matches) : null) || location.key;
- savedScrollPositions[key] = window.scrollY;
- }
- sessionStorage.setItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY, JSON.stringify(savedScrollPositions));
- window.history.scrollRestoration = "auto";
- }, [storageKey, getKey, navigation.state, location, matches])); // Read in any saved scroll locations
- react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => {
- try {
- let sessionPositions = sessionStorage.getItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY);
- if (sessionPositions) {
- savedScrollPositions = JSON.parse(sessionPositions);
- }
- } catch (e) {// no-op, use default empty object
- }
- }, [storageKey]); // Enable scroll restoration in the router
- react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => {
- let disableScrollRestoration = router == null ? void 0 : router.enableScrollRestoration(savedScrollPositions, () => window.scrollY, getKey);
- return () => disableScrollRestoration && disableScrollRestoration();
- }, [router, getKey]); // Restore scrolling when state.restoreScrollPosition changes
- react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => {
- // Explicit false means don't do anything (used for submissions)
- if (restoreScrollPosition === false) {
- return;
- } // been here before, scroll to it
- if (typeof restoreScrollPosition === "number") {
- window.scrollTo(0, restoreScrollPosition);
- return;
- } // try to scroll to the hash
- if (location.hash) {
- let el = document.getElementById(location.hash.slice(1));
- if (el) {
- el.scrollIntoView();
- return;
- }
- } // Opt out of scroll reset if this link requested it
- if (preventScrollReset === true) {
- return;
- } // otherwise go to the top on new locations
- window.scrollTo(0, 0);
- }, [location, restoreScrollPosition, preventScrollReset]);
- }
- function useBeforeUnload(callback) {
- react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
- window.addEventListener("beforeunload", callback);
- return () => {
- window.removeEventListener("beforeunload", callback);
- };
- }, [callback]);
- } //#endregion
- ////////////////////////////////////////////////////////////////////////////////
- //#region Utils
- ////////////////////////////////////////////////////////////////////////////////
- function warning(cond, message) {
- if (!cond) {
- // eslint-disable-next-line no-console
- if (typeof console !== "undefined") console.warn(message);
- try {
- // Welcome to debugging React Router!
- //
- // This error is thrown as a convenience so you can more easily
- // find the source for a warning that appears in the console by
- // enabling "pause on exceptions" in your JavaScript debugger.
- throw new Error(message); // eslint-disable-next-line no-empty
- } catch (e) {}
- }
- } //#endregion
- //# sourceMappingURL=index.js.map
- /***/ }),
- /***/ "./node_modules/react-router/dist/index.js":
- /*!*************************************************!*\
- !*** ./node_modules/react-router/dist/index.js ***!
- \*************************************************/
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
- "use strict";
- var react__WEBPACK_IMPORTED_MODULE_1___namespace_cache;
- __webpack_require__.r(__webpack_exports__);
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
- /* harmony export */ "AbortedDeferredError": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.AbortedDeferredError),
- /* harmony export */ "Await": () => (/* binding */ Await),
- /* harmony export */ "MemoryRouter": () => (/* binding */ MemoryRouter),
- /* harmony export */ "Navigate": () => (/* binding */ Navigate),
- /* harmony export */ "NavigationType": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.Action),
- /* harmony export */ "Outlet": () => (/* binding */ Outlet),
- /* harmony export */ "Route": () => (/* binding */ Route),
- /* harmony export */ "Router": () => (/* binding */ Router),
- /* harmony export */ "RouterProvider": () => (/* binding */ RouterProvider),
- /* harmony export */ "Routes": () => (/* binding */ Routes),
- /* harmony export */ "UNSAFE_DataRouterContext": () => (/* binding */ DataRouterContext),
- /* harmony export */ "UNSAFE_DataRouterStateContext": () => (/* binding */ DataRouterStateContext),
- /* harmony export */ "UNSAFE_DataStaticRouterContext": () => (/* binding */ DataStaticRouterContext),
- /* harmony export */ "UNSAFE_LocationContext": () => (/* binding */ LocationContext),
- /* harmony export */ "UNSAFE_NavigationContext": () => (/* binding */ NavigationContext),
- /* harmony export */ "UNSAFE_RouteContext": () => (/* binding */ RouteContext),
- /* harmony export */ "UNSAFE_enhanceManualRouteObjects": () => (/* binding */ enhanceManualRouteObjects),
- /* harmony export */ "createMemoryRouter": () => (/* binding */ createMemoryRouter),
- /* harmony export */ "createPath": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.createPath),
- /* harmony export */ "createRoutesFromChildren": () => (/* binding */ createRoutesFromChildren),
- /* harmony export */ "createRoutesFromElements": () => (/* binding */ createRoutesFromChildren),
- /* harmony export */ "defer": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.defer),
- /* harmony export */ "generatePath": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.generatePath),
- /* harmony export */ "isRouteErrorResponse": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.isRouteErrorResponse),
- /* harmony export */ "json": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.json),
- /* harmony export */ "matchPath": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.matchPath),
- /* harmony export */ "matchRoutes": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.matchRoutes),
- /* harmony export */ "parsePath": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.parsePath),
- /* harmony export */ "redirect": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.redirect),
- /* harmony export */ "renderMatches": () => (/* binding */ renderMatches),
- /* harmony export */ "resolvePath": () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.resolvePath),
- /* harmony export */ "useActionData": () => (/* binding */ useActionData),
- /* harmony export */ "useAsyncError": () => (/* binding */ useAsyncError),
- /* harmony export */ "useAsyncValue": () => (/* binding */ useAsyncValue),
- /* harmony export */ "useHref": () => (/* binding */ useHref),
- /* harmony export */ "useInRouterContext": () => (/* binding */ useInRouterContext),
- /* harmony export */ "useLoaderData": () => (/* binding */ useLoaderData),
- /* harmony export */ "useLocation": () => (/* binding */ useLocation),
- /* harmony export */ "useMatch": () => (/* binding */ useMatch),
- /* harmony export */ "useMatches": () => (/* binding */ useMatches),
- /* harmony export */ "useNavigate": () => (/* binding */ useNavigate),
- /* harmony export */ "useNavigation": () => (/* binding */ useNavigation),
- /* harmony export */ "useNavigationType": () => (/* binding */ useNavigationType),
- /* harmony export */ "useOutlet": () => (/* binding */ useOutlet),
- /* harmony export */ "useOutletContext": () => (/* binding */ useOutletContext),
- /* harmony export */ "useParams": () => (/* binding */ useParams),
- /* harmony export */ "useResolvedPath": () => (/* binding */ useResolvedPath),
- /* harmony export */ "useRevalidator": () => (/* binding */ useRevalidator),
- /* harmony export */ "useRouteError": () => (/* binding */ useRouteError),
- /* harmony export */ "useRouteLoaderData": () => (/* binding */ useRouteLoaderData),
- /* harmony export */ "useRoutes": () => (/* binding */ useRoutes)
- /* harmony export */ });
- /* harmony import */ var _remix_run_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @remix-run/router */ "./node_modules/@remix-run/router/dist/router.js");
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
- /**
- * React Router v6.4.3
- *
- * Copyright (c) Remix Software Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE.md file in the root directory of this source tree.
- *
- * @license MIT
- */
- function _extends() {
- _extends = Object.assign ? Object.assign.bind() : function (target) {
- for (var i = 1; i < arguments.length; i++) {
- var source = arguments[i];
- for (var key in source) {
- if (Object.prototype.hasOwnProperty.call(source, key)) {
- target[key] = source[key];
- }
- }
- }
- return target;
- };
- return _extends.apply(this, arguments);
- }
- /**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- /**
- * inlined Object.is polyfill to avoid requiring consumers ship their own
- * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
- */
- function isPolyfill(x, y) {
- return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare
- ;
- }
- const is = typeof Object.is === "function" ? Object.is : isPolyfill; // Intentionally not using named imports because Rollup uses dynamic
- // dispatch for CommonJS interop named imports.
- const {
- useState,
- useEffect,
- useLayoutEffect,
- useDebugValue
- } = /*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_1___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_1___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_1__, 2)));
- let didWarnOld18Alpha = false;
- let didWarnUncachedGetSnapshot = false; // Disclaimer: This shim breaks many of the rules of React, and only works
- // because of a very particular set of implementation details and assumptions
- // -- change any one of them and it will break. The most important assumption
- // is that updates are always synchronous, because concurrent rendering is
- // only available in versions of React that also have a built-in
- // useSyncExternalStore API. And we only use this shim when the built-in API
- // does not exist.
- //
- // Do not assume that the clever hacks used by this hook also work in general.
- // The point of this shim is to replace the need for hacks by other libraries.
- function useSyncExternalStore$2(subscribe, getSnapshot, // Note: The shim does not use getServerSnapshot, because pre-18 versions of
- // React do not expose a way to check if we're hydrating. So users of the shim
- // will need to track that themselves and return the correct value
- // from `getSnapshot`.
- getServerSnapshot) {
- if (true) {
- if (!didWarnOld18Alpha) {
- if ( false) {
- didWarnOld18Alpha = true;
- console.error("You are using an outdated, pre-release alpha of React 18 that " + "does not support useSyncExternalStore. The " + "use-sync-external-store shim will not work correctly. Upgrade " + "to a newer pre-release.");
- }
- }
- } // Read the current snapshot from the store on every render. Again, this
- // breaks the rules of React, and only works here because of specific
- // implementation details, most importantly that updates are
- // always synchronous.
- const value = getSnapshot();
- if (true) {
- if (!didWarnUncachedGetSnapshot) {
- const cachedValue = getSnapshot();
- if (!is(value, cachedValue)) {
- console.error("The result of getSnapshot should be cached to avoid an infinite loop");
- didWarnUncachedGetSnapshot = true;
- }
- }
- } // Because updates are synchronous, we don't queue them. Instead we force a
- // re-render whenever the subscribed state changes by updating an some
- // arbitrary useState hook. Then, during render, we call getSnapshot to read
- // the current value.
- //
- // Because we don't actually use the state returned by the useState hook, we
- // can save a bit of memory by storing other stuff in that slot.
- //
- // To implement the early bailout, we need to track some things on a mutable
- // object. Usually, we would put that in a useRef hook, but we can stash it in
- // our useState hook instead.
- //
- // To force a re-render, we call forceUpdate({inst}). That works because the
- // new object always fails an equality check.
- const [{
- inst
- }, forceUpdate] = useState({
- inst: {
- value,
- getSnapshot
- }
- }); // Track the latest getSnapshot function with a ref. This needs to be updated
- // in the layout phase so we can access it during the tearing check that
- // happens on subscribe.
- useLayoutEffect(() => {
- inst.value = value;
- inst.getSnapshot = getSnapshot; // Whenever getSnapshot or subscribe changes, we need to check in the
- // commit phase if there was an interleaved mutation. In concurrent mode
- // this can happen all the time, but even in synchronous mode, an earlier
- // effect may have mutated the store.
- if (checkIfSnapshotChanged(inst)) {
- // Force a re-render.
- forceUpdate({
- inst
- });
- } // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [subscribe, value, getSnapshot]);
- useEffect(() => {
- // Check for changes right before subscribing. Subsequent changes will be
- // detected in the subscription handler.
- if (checkIfSnapshotChanged(inst)) {
- // Force a re-render.
- forceUpdate({
- inst
- });
- }
- const handleStoreChange = () => {
- // TODO: Because there is no cross-renderer API for batching updates, it's
- // up to the consumer of this library to wrap their subscription event
- // with unstable_batchedUpdates. Should we try to detect when this isn't
- // the case and print a warning in development?
- // The store changed. Check if the snapshot changed since the last time we
- // read from the store.
- if (checkIfSnapshotChanged(inst)) {
- // Force a re-render.
- forceUpdate({
- inst
- });
- }
- }; // Subscribe to the store and return a clean-up function.
- return subscribe(handleStoreChange); // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [subscribe]);
- useDebugValue(value);
- return value;
- }
- function checkIfSnapshotChanged(inst) {
- const latestGetSnapshot = inst.getSnapshot;
- const prevValue = inst.value;
- try {
- const nextValue = latestGetSnapshot();
- return !is(prevValue, nextValue);
- } catch (error) {
- return true;
- }
- }
- /**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @flow
- */
- function useSyncExternalStore$1(subscribe, getSnapshot, getServerSnapshot) {
- // Note: The shim does not use getServerSnapshot, because pre-18 versions of
- // React do not expose a way to check if we're hydrating. So users of the shim
- // will need to track that themselves and return the correct value
- // from `getSnapshot`.
- return getSnapshot();
- }
- /**
- * Inlined into the react-router repo since use-sync-external-store does not
- * provide a UMD-compatible package, so we need this to be able to distribute
- * UMD react-router bundles
- */
- const canUseDOM = !!(typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined");
- const isServerEnvironment = !canUseDOM;
- const shim = isServerEnvironment ? useSyncExternalStore$1 : useSyncExternalStore$2;
- const useSyncExternalStore = false ? (module => module.useSyncExternalStore)(/*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_1___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_1___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_1__, 2)))) : shim;
- // Contexts for data routers
- const DataStaticRouterContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null);
- if (true) {
- DataStaticRouterContext.displayName = "DataStaticRouterContext";
- }
- const DataRouterContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null);
- if (true) {
- DataRouterContext.displayName = "DataRouter";
- }
- const DataRouterStateContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null);
- if (true) {
- DataRouterStateContext.displayName = "DataRouterState";
- }
- const AwaitContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null);
- if (true) {
- AwaitContext.displayName = "Await";
- }
- const NavigationContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null);
- if (true) {
- NavigationContext.displayName = "Navigation";
- }
- const LocationContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null);
- if (true) {
- LocationContext.displayName = "Location";
- }
- const RouteContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext({
- outlet: null,
- matches: []
- });
- if (true) {
- RouteContext.displayName = "Route";
- }
- const RouteErrorContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null);
- if (true) {
- RouteErrorContext.displayName = "RouteError";
- }
- /**
- * Returns the full href for the given "to" value. This is useful for building
- * custom links that are also accessible and preserve right-click behavior.
- *
- * @see https://reactrouter.com/docs/en/v6/hooks/use-href
- */
- function useHref(to, _temp) {
- let {
- relative
- } = _temp === void 0 ? {} : _temp;
- !useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, // TODO: This error is probably because they somehow have 2 versions of the
- // router loaded. We can help them understand how to avoid that.
- "useHref() may be used only in the context of a <Router> component.") : 0 : void 0;
- let {
- basename,
- navigator
- } = react__WEBPACK_IMPORTED_MODULE_1__.useContext(NavigationContext);
- let {
- hash,
- pathname,
- search
- } = useResolvedPath(to, {
- relative
- });
- let joinedPathname = pathname; // If we're operating within a basename, prepend it to the pathname prior
- // to creating the href. If this is a root navigation, then just use the raw
- // basename which allows the basename to have full control over the presence
- // of a trailing slash on root links
- if (basename !== "/") {
- joinedPathname = pathname === "/" ? basename : (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.joinPaths)([basename, pathname]);
- }
- return navigator.createHref({
- pathname: joinedPathname,
- search,
- hash
- });
- }
- /**
- * Returns true if this component is a descendant of a <Router>.
- *
- * @see https://reactrouter.com/docs/en/v6/hooks/use-in-router-context
- */
- function useInRouterContext() {
- return react__WEBPACK_IMPORTED_MODULE_1__.useContext(LocationContext) != null;
- }
- /**
- * Returns the current location object, which represents the current URL in web
- * browsers.
- *
- * Note: If you're using this it may mean you're doing some of your own
- * "routing" in your app, and we'd like to know what your use case is. We may
- * be able to provide something higher-level to better suit your needs.
- *
- * @see https://reactrouter.com/docs/en/v6/hooks/use-location
- */
- function useLocation() {
- !useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, // TODO: This error is probably because they somehow have 2 versions of the
- // router loaded. We can help them understand how to avoid that.
- "useLocation() may be used only in the context of a <Router> component.") : 0 : void 0;
- return react__WEBPACK_IMPORTED_MODULE_1__.useContext(LocationContext).location;
- }
- /**
- * Returns the current navigation action which describes how the router came to
- * the current location, either by a pop, push, or replace on the history stack.
- *
- * @see https://reactrouter.com/docs/en/v6/hooks/use-navigation-type
- */
- function useNavigationType() {
- return react__WEBPACK_IMPORTED_MODULE_1__.useContext(LocationContext).navigationType;
- }
- /**
- * Returns true if the URL for the given "to" value matches the current URL.
- * This is useful for components that need to know "active" state, e.g.
- * <NavLink>.
- *
- * @see https://reactrouter.com/docs/en/v6/hooks/use-match
- */
- function useMatch(pattern) {
- !useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, // TODO: This error is probably because they somehow have 2 versions of the
- // router loaded. We can help them understand how to avoid that.
- "useMatch() may be used only in the context of a <Router> component.") : 0 : void 0;
- let {
- pathname
- } = useLocation();
- return react__WEBPACK_IMPORTED_MODULE_1__.useMemo(() => (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.matchPath)(pattern, pathname), [pathname, pattern]);
- }
- /**
- * The interface for the navigate() function returned from useNavigate().
- */
- /**
- * Returns an imperative method for changing the location. Used by <Link>s, but
- * may also be used by other elements to change the location.
- *
- * @see https://reactrouter.com/docs/en/v6/hooks/use-navigate
- */
- function useNavigate() {
- !useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, // TODO: This error is probably because they somehow have 2 versions of the
- // router loaded. We can help them understand how to avoid that.
- "useNavigate() may be used only in the context of a <Router> component.") : 0 : void 0;
- let {
- basename,
- navigator
- } = react__WEBPACK_IMPORTED_MODULE_1__.useContext(NavigationContext);
- let {
- matches
- } = react__WEBPACK_IMPORTED_MODULE_1__.useContext(RouteContext);
- let {
- pathname: locationPathname
- } = useLocation();
- let routePathnamesJson = JSON.stringify((0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.UNSAFE_getPathContributingMatches)(matches).map(match => match.pathnameBase));
- let activeRef = react__WEBPACK_IMPORTED_MODULE_1__.useRef(false);
- react__WEBPACK_IMPORTED_MODULE_1__.useEffect(() => {
- activeRef.current = true;
- });
- let navigate = react__WEBPACK_IMPORTED_MODULE_1__.useCallback(function (to, options) {
- if (options === void 0) {
- options = {};
- }
- true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.warning)(activeRef.current, "You should call navigate() in a React.useEffect(), not when " + "your component is first rendered.") : 0;
- if (!activeRef.current) return;
- if (typeof to === "number") {
- navigator.go(to);
- return;
- }
- let path = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.resolveTo)(to, JSON.parse(routePathnamesJson), locationPathname, options.relative === "path"); // If we're operating within a basename, prepend it to the pathname prior
- // to handing off to history. If this is a root navigation, then we
- // navigate to the raw basename which allows the basename to have full
- // control over the presence of a trailing slash on root links
- if (basename !== "/") {
- path.pathname = path.pathname === "/" ? basename : (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.joinPaths)([basename, path.pathname]);
- }
- (!!options.replace ? navigator.replace : navigator.push)(path, options.state, options);
- }, [basename, navigator, routePathnamesJson, locationPathname]);
- return navigate;
- }
- const OutletContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null);
- /**
- * Returns the context (if provided) for the child route at this level of the route
- * hierarchy.
- * @see https://reactrouter.com/docs/en/v6/hooks/use-outlet-context
- */
- function useOutletContext() {
- return react__WEBPACK_IMPORTED_MODULE_1__.useContext(OutletContext);
- }
- /**
- * Returns the element for the child route at this level of the route
- * hierarchy. Used internally by <Outlet> to render child routes.
- *
- * @see https://reactrouter.com/docs/en/v6/hooks/use-outlet
- */
- function useOutlet(context) {
- let outlet = react__WEBPACK_IMPORTED_MODULE_1__.useContext(RouteContext).outlet;
- if (outlet) {
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(OutletContext.Provider, {
- value: context
- }, outlet);
- }
- return outlet;
- }
- /**
- * Returns an object of key/value pairs of the dynamic params from the current
- * URL that were matched by the route path.
- *
- * @see https://reactrouter.com/docs/en/v6/hooks/use-params
- */
- function useParams() {
- let {
- matches
- } = react__WEBPACK_IMPORTED_MODULE_1__.useContext(RouteContext);
- let routeMatch = matches[matches.length - 1];
- return routeMatch ? routeMatch.params : {};
- }
- /**
- * Resolves the pathname of the given `to` value against the current location.
- *
- * @see https://reactrouter.com/docs/en/v6/hooks/use-resolved-path
- */
- function useResolvedPath(to, _temp2) {
- let {
- relative
- } = _temp2 === void 0 ? {} : _temp2;
- let {
- matches
- } = react__WEBPACK_IMPORTED_MODULE_1__.useContext(RouteContext);
- let {
- pathname: locationPathname
- } = useLocation();
- let routePathnamesJson = JSON.stringify((0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.UNSAFE_getPathContributingMatches)(matches).map(match => match.pathnameBase));
- return react__WEBPACK_IMPORTED_MODULE_1__.useMemo(() => (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.resolveTo)(to, JSON.parse(routePathnamesJson), locationPathname, relative === "path"), [to, routePathnamesJson, locationPathname, relative]);
- }
- /**
- * Returns the element of the route that matched the current location, prepared
- * with the correct context to render the remainder of the route tree. Route
- * elements in the tree must render an <Outlet> to render their child route's
- * element.
- *
- * @see https://reactrouter.com/docs/en/v6/hooks/use-routes
- */
- function useRoutes(routes, locationArg) {
- !useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, // TODO: This error is probably because they somehow have 2 versions of the
- // router loaded. We can help them understand how to avoid that.
- "useRoutes() may be used only in the context of a <Router> component.") : 0 : void 0;
- let dataRouterStateContext = react__WEBPACK_IMPORTED_MODULE_1__.useContext(DataRouterStateContext);
- let {
- matches: parentMatches
- } = react__WEBPACK_IMPORTED_MODULE_1__.useContext(RouteContext);
- let routeMatch = parentMatches[parentMatches.length - 1];
- let parentParams = routeMatch ? routeMatch.params : {};
- let parentPathname = routeMatch ? routeMatch.pathname : "/";
- let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : "/";
- let parentRoute = routeMatch && routeMatch.route;
- if (true) {
- // You won't get a warning about 2 different <Routes> under a <Route>
- // without a trailing *, but this is a best-effort warning anyway since we
- // cannot even give the warning unless they land at the parent route.
- //
- // Example:
- //
- // <Routes>
- // {/* This route path MUST end with /* because otherwise
- // it will never match /blog/post/123 */}
- // <Route path="blog" element={<Blog />} />
- // <Route path="blog/feed" element={<BlogFeed />} />
- // </Routes>
- //
- // function Blog() {
- // return (
- // <Routes>
- // <Route path="post/:id" element={<Post />} />
- // </Routes>
- // );
- // }
- let parentPath = parentRoute && parentRoute.path || "";
- warningOnce(parentPathname, !parentRoute || parentPath.endsWith("*"), "You rendered descendant <Routes> (or called `useRoutes()`) at " + ("\"" + parentPathname + "\" (under <Route path=\"" + parentPath + "\">) but the ") + "parent route path has no trailing \"*\". This means if you navigate " + "deeper, the parent won't match anymore and therefore the child " + "routes will never render.\n\n" + ("Please change the parent <Route path=\"" + parentPath + "\"> to <Route ") + ("path=\"" + (parentPath === "/" ? "*" : parentPath + "/*") + "\">."));
- }
- let locationFromContext = useLocation();
- let location;
- if (locationArg) {
- var _parsedLocationArg$pa;
- let parsedLocationArg = typeof locationArg === "string" ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.parsePath)(locationArg) : locationArg;
- !(parentPathnameBase === "/" || ((_parsedLocationArg$pa = parsedLocationArg.pathname) == null ? void 0 : _parsedLocationArg$pa.startsWith(parentPathnameBase))) ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "When overriding the location using `<Routes location>` or `useRoutes(routes, location)`, " + "the location pathname must begin with the portion of the URL pathname that was " + ("matched by all parent routes. The current pathname base is \"" + parentPathnameBase + "\" ") + ("but pathname \"" + parsedLocationArg.pathname + "\" was given in the `location` prop.")) : 0 : void 0;
- location = parsedLocationArg;
- } else {
- location = locationFromContext;
- }
- let pathname = location.pathname || "/";
- let remainingPathname = parentPathnameBase === "/" ? pathname : pathname.slice(parentPathnameBase.length) || "/";
- let matches = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.matchRoutes)(routes, {
- pathname: remainingPathname
- });
- if (true) {
- true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.warning)(parentRoute || matches != null, "No routes matched location \"" + location.pathname + location.search + location.hash + "\" ") : 0;
- true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.warning)(matches == null || matches[matches.length - 1].route.element !== undefined, "Matched leaf route at location \"" + location.pathname + location.search + location.hash + "\" does not have an element. " + "This means it will render an <Outlet /> with a null value by default resulting in an \"empty\" page.") : 0;
- }
- let renderedMatches = _renderMatches(matches && matches.map(match => Object.assign({}, match, {
- params: Object.assign({}, parentParams, match.params),
- pathname: (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.joinPaths)([parentPathnameBase, match.pathname]),
- pathnameBase: match.pathnameBase === "/" ? parentPathnameBase : (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.joinPaths)([parentPathnameBase, match.pathnameBase])
- })), parentMatches, dataRouterStateContext || undefined); // When a user passes in a `locationArg`, the associated routes need to
- // be wrapped in a new `LocationContext.Provider` in order for `useLocation`
- // to use the scoped location instead of the global location.
- if (locationArg && renderedMatches) {
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(LocationContext.Provider, {
- value: {
- location: _extends({
- pathname: "/",
- search: "",
- hash: "",
- state: null,
- key: "default"
- }, location),
- navigationType: _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.Action.Pop
- }
- }, renderedMatches);
- }
- return renderedMatches;
- }
- function DefaultErrorElement() {
- let error = useRouteError();
- let message = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.isRouteErrorResponse)(error) ? error.status + " " + error.statusText : error instanceof Error ? error.message : JSON.stringify(error);
- let stack = error instanceof Error ? error.stack : null;
- let lightgrey = "rgba(200,200,200, 0.5)";
- let preStyles = {
- padding: "0.5rem",
- backgroundColor: lightgrey
- };
- let codeStyles = {
- padding: "2px 4px",
- backgroundColor: lightgrey
- };
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("h2", null, "Unhandled Thrown Error!"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("h3", {
- style: {
- fontStyle: "italic"
- }
- }, message), stack ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("pre", {
- style: preStyles
- }, stack) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("p", null, "\uD83D\uDCBF Hey developer \uD83D\uDC4B"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("p", null, "You can provide a way better UX than this when your app throws errors by providing your own\xA0", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("code", {
- style: codeStyles
- }, "errorElement"), " props on\xA0", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("code", {
- style: codeStyles
- }, "<Route>")));
- }
- class RenderErrorBoundary extends react__WEBPACK_IMPORTED_MODULE_1__.Component {
- constructor(props) {
- super(props);
- this.state = {
- location: props.location,
- error: props.error
- };
- }
- static getDerivedStateFromError(error) {
- return {
- error: error
- };
- }
- static getDerivedStateFromProps(props, state) {
- // When we get into an error state, the user will likely click "back" to the
- // previous page that didn't have an error. Because this wraps the entire
- // application, that will have no effect--the error page continues to display.
- // This gives us a mechanism to recover from the error when the location changes.
- //
- // Whether we're in an error state or not, we update the location in state
- // so that when we are in an error state, it gets reset when a new location
- // comes in and the user recovers from the error.
- if (state.location !== props.location) {
- return {
- error: props.error,
- location: props.location
- };
- } // If we're not changing locations, preserve the location but still surface
- // any new errors that may come through. We retain the existing error, we do
- // this because the error provided from the app state may be cleared without
- // the location changing.
- return {
- error: props.error || state.error,
- location: state.location
- };
- }
- componentDidCatch(error, errorInfo) {
- console.error("React Router caught the following error during render", error, errorInfo);
- }
- render() {
- return this.state.error ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(RouteErrorContext.Provider, {
- value: this.state.error,
- children: this.props.component
- }) : this.props.children;
- }
- }
- function RenderedRoute(_ref) {
- let {
- routeContext,
- match,
- children
- } = _ref;
- let dataStaticRouterContext = react__WEBPACK_IMPORTED_MODULE_1__.useContext(DataStaticRouterContext); // Track how deep we got in our render pass to emulate SSR componentDidCatch
- // in a DataStaticRouter
- if (dataStaticRouterContext && match.route.errorElement) {
- dataStaticRouterContext._deepestRenderedBoundaryId = match.route.id;
- }
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(RouteContext.Provider, {
- value: routeContext
- }, children);
- }
- function _renderMatches(matches, parentMatches, dataRouterState) {
- if (parentMatches === void 0) {
- parentMatches = [];
- }
- if (matches == null) {
- if (dataRouterState != null && dataRouterState.errors) {
- // Don't bail if we have data router errors so we can render them in the
- // boundary. Use the pre-matched (or shimmed) matches
- matches = dataRouterState.matches;
- } else {
- return null;
- }
- }
- let renderedMatches = matches; // If we have data errors, trim matches to the highest error boundary
- let errors = dataRouterState == null ? void 0 : dataRouterState.errors;
- if (errors != null) {
- let errorIndex = renderedMatches.findIndex(m => m.route.id && (errors == null ? void 0 : errors[m.route.id]));
- !(errorIndex >= 0) ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "Could not find a matching route for the current errors: " + errors) : 0 : void 0;
- renderedMatches = renderedMatches.slice(0, Math.min(renderedMatches.length, errorIndex + 1));
- }
- return renderedMatches.reduceRight((outlet, match, index) => {
- let error = match.route.id ? errors == null ? void 0 : errors[match.route.id] : null; // Only data routers handle errors
- let errorElement = dataRouterState ? match.route.errorElement || /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(DefaultErrorElement, null) : null;
- let getChildren = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(RenderedRoute, {
- match: match,
- routeContext: {
- outlet,
- matches: parentMatches.concat(renderedMatches.slice(0, index + 1))
- }
- }, error ? errorElement : match.route.element !== undefined ? match.route.element : outlet); // Only wrap in an error boundary within data router usages when we have an
- // errorElement on this route. Otherwise let it bubble up to an ancestor
- // errorElement
- return dataRouterState && (match.route.errorElement || index === 0) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(RenderErrorBoundary, {
- location: dataRouterState.location,
- component: errorElement,
- error: error,
- children: getChildren()
- }) : getChildren();
- }, null);
- }
- var DataRouterHook;
- (function (DataRouterHook) {
- DataRouterHook["UseRevalidator"] = "useRevalidator";
- })(DataRouterHook || (DataRouterHook = {}));
- var DataRouterStateHook;
- (function (DataRouterStateHook) {
- DataRouterStateHook["UseLoaderData"] = "useLoaderData";
- DataRouterStateHook["UseActionData"] = "useActionData";
- DataRouterStateHook["UseRouteError"] = "useRouteError";
- DataRouterStateHook["UseNavigation"] = "useNavigation";
- DataRouterStateHook["UseRouteLoaderData"] = "useRouteLoaderData";
- DataRouterStateHook["UseMatches"] = "useMatches";
- DataRouterStateHook["UseRevalidator"] = "useRevalidator";
- })(DataRouterStateHook || (DataRouterStateHook = {}));
- function getDataRouterConsoleError(hookName) {
- return hookName + " must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.";
- }
- function useDataRouterContext(hookName) {
- let ctx = react__WEBPACK_IMPORTED_MODULE_1__.useContext(DataRouterContext);
- !ctx ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, getDataRouterConsoleError(hookName)) : 0 : void 0;
- return ctx;
- }
- function useDataRouterState(hookName) {
- let state = react__WEBPACK_IMPORTED_MODULE_1__.useContext(DataRouterStateContext);
- !state ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, getDataRouterConsoleError(hookName)) : 0 : void 0;
- return state;
- }
- /**
- * Returns the current navigation, defaulting to an "idle" navigation when
- * no navigation is in progress
- */
- function useNavigation() {
- let state = useDataRouterState(DataRouterStateHook.UseNavigation);
- return state.navigation;
- }
- /**
- * Returns a revalidate function for manually triggering revalidation, as well
- * as the current state of any manual revalidations
- */
- function useRevalidator() {
- let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);
- let state = useDataRouterState(DataRouterStateHook.UseRevalidator);
- return {
- revalidate: dataRouterContext.router.revalidate,
- state: state.revalidation
- };
- }
- /**
- * Returns the active route matches, useful for accessing loaderData for
- * parent/child routes or the route "handle" property
- */
- function useMatches() {
- let {
- matches,
- loaderData
- } = useDataRouterState(DataRouterStateHook.UseMatches);
- return react__WEBPACK_IMPORTED_MODULE_1__.useMemo(() => matches.map(match => {
- let {
- pathname,
- params
- } = match; // Note: This structure matches that created by createUseMatchesMatch
- // in the @remix-run/router , so if you change this please also change
- // that :) Eventually we'll DRY this up
- return {
- id: match.route.id,
- pathname,
- params,
- data: loaderData[match.route.id],
- handle: match.route.handle
- };
- }), [matches, loaderData]);
- }
- /**
- * Returns the loader data for the nearest ancestor Route loader
- */
- function useLoaderData() {
- let state = useDataRouterState(DataRouterStateHook.UseLoaderData);
- let route = react__WEBPACK_IMPORTED_MODULE_1__.useContext(RouteContext);
- !route ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "useLoaderData must be used inside a RouteContext") : 0 : void 0;
- let thisRoute = route.matches[route.matches.length - 1];
- !thisRoute.route.id ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "useLoaderData can only be used on routes that contain a unique \"id\"") : 0 : void 0;
- return state.loaderData[thisRoute.route.id];
- }
- /**
- * Returns the loaderData for the given routeId
- */
- function useRouteLoaderData(routeId) {
- let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);
- return state.loaderData[routeId];
- }
- /**
- * Returns the action data for the nearest ancestor Route action
- */
- function useActionData() {
- let state = useDataRouterState(DataRouterStateHook.UseActionData);
- let route = react__WEBPACK_IMPORTED_MODULE_1__.useContext(RouteContext);
- !route ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "useActionData must be used inside a RouteContext") : 0 : void 0;
- return Object.values((state == null ? void 0 : state.actionData) || {})[0];
- }
- /**
- * Returns the nearest ancestor Route error, which could be a loader/action
- * error or a render error. This is intended to be called from your
- * errorElement to display a proper error message.
- */
- function useRouteError() {
- var _state$errors;
- let error = react__WEBPACK_IMPORTED_MODULE_1__.useContext(RouteErrorContext);
- let state = useDataRouterState(DataRouterStateHook.UseRouteError);
- let route = react__WEBPACK_IMPORTED_MODULE_1__.useContext(RouteContext);
- let thisRoute = route.matches[route.matches.length - 1]; // If this was a render error, we put it in a RouteError context inside
- // of RenderErrorBoundary
- if (error) {
- return error;
- }
- !route ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "useRouteError must be used inside a RouteContext") : 0 : void 0;
- !thisRoute.route.id ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "useRouteError can only be used on routes that contain a unique \"id\"") : 0 : void 0; // Otherwise look for errors from our data router state
- return (_state$errors = state.errors) == null ? void 0 : _state$errors[thisRoute.route.id];
- }
- /**
- * Returns the happy-path data from the nearest ancestor <Await /> value
- */
- function useAsyncValue() {
- let value = react__WEBPACK_IMPORTED_MODULE_1__.useContext(AwaitContext);
- return value == null ? void 0 : value._data;
- }
- /**
- * Returns the error from the nearest ancestor <Await /> value
- */
- function useAsyncError() {
- let value = react__WEBPACK_IMPORTED_MODULE_1__.useContext(AwaitContext);
- return value == null ? void 0 : value._error;
- }
- const alreadyWarned = {};
- function warningOnce(key, cond, message) {
- if (!cond && !alreadyWarned[key]) {
- alreadyWarned[key] = true;
- true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.warning)(false, message) : 0;
- }
- }
- /**
- * Given a Remix Router instance, render the appropriate UI
- */
- function RouterProvider(_ref) {
- let {
- fallbackElement,
- router
- } = _ref;
- // Sync router state to our component state to force re-renders
- let state = useSyncExternalStore(router.subscribe, () => router.state, // We have to provide this so React@18 doesn't complain during hydration,
- // but we pass our serialized hydration data into the router so state here
- // is already synced with what the server saw
- () => router.state);
- let navigator = react__WEBPACK_IMPORTED_MODULE_1__.useMemo(() => {
- return {
- createHref: router.createHref,
- go: n => router.navigate(n),
- push: (to, state, opts) => router.navigate(to, {
- state,
- preventScrollReset: opts == null ? void 0 : opts.preventScrollReset
- }),
- replace: (to, state, opts) => router.navigate(to, {
- replace: true,
- state,
- preventScrollReset: opts == null ? void 0 : opts.preventScrollReset
- })
- };
- }, [router]);
- let basename = router.basename || "/";
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(DataRouterContext.Provider, {
- value: {
- router,
- navigator,
- static: false,
- // Do we need this?
- basename
- }
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(DataRouterStateContext.Provider, {
- value: state
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(Router, {
- basename: router.basename,
- location: router.state.location,
- navigationType: router.state.historyAction,
- navigator: navigator
- }, router.state.initialized ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(Routes, null) : fallbackElement)));
- }
- /**
- * A <Router> that stores all entries in memory.
- *
- * @see https://reactrouter.com/docs/en/v6/routers/memory-router
- */
- function MemoryRouter(_ref2) {
- let {
- basename,
- children,
- initialEntries,
- initialIndex
- } = _ref2;
- let historyRef = react__WEBPACK_IMPORTED_MODULE_1__.useRef();
- if (historyRef.current == null) {
- historyRef.current = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.createMemoryHistory)({
- initialEntries,
- initialIndex,
- v5Compat: true
- });
- }
- let history = historyRef.current;
- let [state, setState] = react__WEBPACK_IMPORTED_MODULE_1__.useState({
- action: history.action,
- location: history.location
- });
- react__WEBPACK_IMPORTED_MODULE_1__.useLayoutEffect(() => history.listen(setState), [history]);
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(Router, {
- basename: basename,
- children: children,
- location: state.location,
- navigationType: state.action,
- navigator: history
- });
- }
- /**
- * Changes the current location.
- *
- * Note: This API is mostly useful in React.Component subclasses that are not
- * able to use hooks. In functional components, we recommend you use the
- * `useNavigate` hook instead.
- *
- * @see https://reactrouter.com/docs/en/v6/components/navigate
- */
- function Navigate(_ref3) {
- let {
- to,
- replace,
- state,
- relative
- } = _ref3;
- !useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, // TODO: This error is probably because they somehow have 2 versions of
- // the router loaded. We can help them understand how to avoid that.
- "<Navigate> may be used only in the context of a <Router> component.") : 0 : void 0;
- true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.warning)(!react__WEBPACK_IMPORTED_MODULE_1__.useContext(NavigationContext).static, "<Navigate> must not be used on the initial render in a <StaticRouter>. " + "This is a no-op, but you should modify your code so the <Navigate> is " + "only ever rendered in response to some user interaction or state change.") : 0;
- let dataRouterState = react__WEBPACK_IMPORTED_MODULE_1__.useContext(DataRouterStateContext);
- let navigate = useNavigate();
- react__WEBPACK_IMPORTED_MODULE_1__.useEffect(() => {
- // Avoid kicking off multiple navigations if we're in the middle of a
- // data-router navigation, since components get re-rendered when we enter
- // a submitting/loading state
- if (dataRouterState && dataRouterState.navigation.state !== "idle") {
- return;
- }
- navigate(to, {
- replace,
- state,
- relative
- });
- });
- return null;
- }
- /**
- * Renders the child route's element, if there is one.
- *
- * @see https://reactrouter.com/docs/en/v6/components/outlet
- */
- function Outlet(props) {
- return useOutlet(props.context);
- }
- /**
- * Declares an element that should be rendered at a certain URL path.
- *
- * @see https://reactrouter.com/docs/en/v6/components/route
- */
- function Route(_props) {
- true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "A <Route> is only ever to be used as the child of <Routes> element, " + "never rendered directly. Please wrap your <Route> in a <Routes>.") : 0 ;
- }
- /**
- * Provides location context for the rest of the app.
- *
- * Note: You usually won't render a <Router> directly. Instead, you'll render a
- * router that is more specific to your environment such as a <BrowserRouter>
- * in web browsers or a <StaticRouter> for server rendering.
- *
- * @see https://reactrouter.com/docs/en/v6/routers/router
- */
- function Router(_ref4) {
- let {
- basename: basenameProp = "/",
- children = null,
- location: locationProp,
- navigationType = _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.Action.Pop,
- navigator,
- static: staticProp = false
- } = _ref4;
- !!useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "You cannot render a <Router> inside another <Router>." + " You should never have more than one in your app.") : 0 : void 0; // Preserve trailing slashes on basename, so we can let the user control
- // the enforcement of trailing slashes throughout the app
- let basename = basenameProp.replace(/^\/*/, "/");
- let navigationContext = react__WEBPACK_IMPORTED_MODULE_1__.useMemo(() => ({
- basename,
- navigator,
- static: staticProp
- }), [basename, navigator, staticProp]);
- if (typeof locationProp === "string") {
- locationProp = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.parsePath)(locationProp);
- }
- let {
- pathname = "/",
- search = "",
- hash = "",
- state = null,
- key = "default"
- } = locationProp;
- let location = react__WEBPACK_IMPORTED_MODULE_1__.useMemo(() => {
- let trailingPathname = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.stripBasename)(pathname, basename);
- if (trailingPathname == null) {
- return null;
- }
- return {
- pathname: trailingPathname,
- search,
- hash,
- state,
- key
- };
- }, [basename, pathname, search, hash, state, key]);
- true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.warning)(location != null, "<Router basename=\"" + basename + "\"> is not able to match the URL " + ("\"" + pathname + search + hash + "\" because it does not start with the ") + "basename, so the <Router> won't render anything.") : 0;
- if (location == null) {
- return null;
- }
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(NavigationContext.Provider, {
- value: navigationContext
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(LocationContext.Provider, {
- children: children,
- value: {
- location,
- navigationType
- }
- }));
- }
- /**
- * A container for a nested tree of <Route> elements that renders the branch
- * that best matches the current location.
- *
- * @see https://reactrouter.com/docs/en/v6/components/routes
- */
- function Routes(_ref5) {
- let {
- children,
- location
- } = _ref5;
- let dataRouterContext = react__WEBPACK_IMPORTED_MODULE_1__.useContext(DataRouterContext); // When in a DataRouterContext _without_ children, we use the router routes
- // directly. If we have children, then we're in a descendant tree and we
- // need to use child routes.
- let routes = dataRouterContext && !children ? dataRouterContext.router.routes : createRoutesFromChildren(children);
- return useRoutes(routes, location);
- }
- /**
- * Component to use for rendering lazily loaded data from returning defer()
- * in a loader function
- */
- function Await(_ref6) {
- let {
- children,
- errorElement,
- resolve
- } = _ref6;
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(AwaitErrorBoundary, {
- resolve: resolve,
- errorElement: errorElement
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(ResolveAwait, null, children));
- }
- var AwaitRenderStatus;
- (function (AwaitRenderStatus) {
- AwaitRenderStatus[AwaitRenderStatus["pending"] = 0] = "pending";
- AwaitRenderStatus[AwaitRenderStatus["success"] = 1] = "success";
- AwaitRenderStatus[AwaitRenderStatus["error"] = 2] = "error";
- })(AwaitRenderStatus || (AwaitRenderStatus = {}));
- const neverSettledPromise = new Promise(() => {});
- class AwaitErrorBoundary extends react__WEBPACK_IMPORTED_MODULE_1__.Component {
- constructor(props) {
- super(props);
- this.state = {
- error: null
- };
- }
- static getDerivedStateFromError(error) {
- return {
- error
- };
- }
- componentDidCatch(error, errorInfo) {
- console.error("<Await> caught the following error during render", error, errorInfo);
- }
- render() {
- let {
- children,
- errorElement,
- resolve
- } = this.props;
- let promise = null;
- let status = AwaitRenderStatus.pending;
- if (!(resolve instanceof Promise)) {
- // Didn't get a promise - provide as a resolved promise
- status = AwaitRenderStatus.success;
- promise = Promise.resolve();
- Object.defineProperty(promise, "_tracked", {
- get: () => true
- });
- Object.defineProperty(promise, "_data", {
- get: () => resolve
- });
- } else if (this.state.error) {
- // Caught a render error, provide it as a rejected promise
- status = AwaitRenderStatus.error;
- let renderError = this.state.error;
- promise = Promise.reject().catch(() => {}); // Avoid unhandled rejection warnings
- Object.defineProperty(promise, "_tracked", {
- get: () => true
- });
- Object.defineProperty(promise, "_error", {
- get: () => renderError
- });
- } else if (resolve._tracked) {
- // Already tracked promise - check contents
- promise = resolve;
- status = promise._error !== undefined ? AwaitRenderStatus.error : promise._data !== undefined ? AwaitRenderStatus.success : AwaitRenderStatus.pending;
- } else {
- // Raw (untracked) promise - track it
- status = AwaitRenderStatus.pending;
- Object.defineProperty(resolve, "_tracked", {
- get: () => true
- });
- promise = resolve.then(data => Object.defineProperty(resolve, "_data", {
- get: () => data
- }), error => Object.defineProperty(resolve, "_error", {
- get: () => error
- }));
- }
- if (status === AwaitRenderStatus.error && promise._error instanceof _remix_run_router__WEBPACK_IMPORTED_MODULE_0__.AbortedDeferredError) {
- // Freeze the UI by throwing a never resolved promise
- throw neverSettledPromise;
- }
- if (status === AwaitRenderStatus.error && !errorElement) {
- // No errorElement, throw to the nearest route-level error boundary
- throw promise._error;
- }
- if (status === AwaitRenderStatus.error) {
- // Render via our errorElement
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(AwaitContext.Provider, {
- value: promise,
- children: errorElement
- });
- }
- if (status === AwaitRenderStatus.success) {
- // Render children with resolved value
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(AwaitContext.Provider, {
- value: promise,
- children: children
- });
- } // Throw to the suspense boundary
- throw promise;
- }
- }
- /**
- * @private
- * Indirection to leverage useAsyncValue for a render-prop API on <Await>
- */
- function ResolveAwait(_ref7) {
- let {
- children
- } = _ref7;
- let data = useAsyncValue();
- if (typeof children === "function") {
- return children(data);
- }
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, null, children);
- } ///////////////////////////////////////////////////////////////////////////////
- // UTILS
- ///////////////////////////////////////////////////////////////////////////////
- /**
- * Creates a route config from a React "children" object, which is usually
- * either a `<Route>` element or an array of them. Used internally by
- * `<Routes>` to create a route config from its children.
- *
- * @see https://reactrouter.com/docs/en/v6/utils/create-routes-from-children
- */
- function createRoutesFromChildren(children, parentPath) {
- if (parentPath === void 0) {
- parentPath = [];
- }
- let routes = [];
- react__WEBPACK_IMPORTED_MODULE_1__.Children.forEach(children, (element, index) => {
- if (! /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.isValidElement(element)) {
- // Ignore non-elements. This allows people to more easily inline
- // conditionals in their route config.
- return;
- }
- if (element.type === react__WEBPACK_IMPORTED_MODULE_1__.Fragment) {
- // Transparently support React.Fragment and its children.
- routes.push.apply(routes, createRoutesFromChildren(element.props.children, parentPath));
- return;
- }
- !(element.type === Route) ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "[" + (typeof element.type === "string" ? element.type : element.type.name) + "] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>") : 0 : void 0;
- !(!element.props.index || !element.props.children) ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.invariant)(false, "An index route cannot have child routes.") : 0 : void 0;
- let treePath = [...parentPath, index];
- let route = {
- id: element.props.id || treePath.join("-"),
- caseSensitive: element.props.caseSensitive,
- element: element.props.element,
- index: element.props.index,
- path: element.props.path,
- loader: element.props.loader,
- action: element.props.action,
- errorElement: element.props.errorElement,
- hasErrorBoundary: element.props.errorElement != null,
- shouldRevalidate: element.props.shouldRevalidate,
- handle: element.props.handle
- };
- if (element.props.children) {
- route.children = createRoutesFromChildren(element.props.children, treePath);
- }
- routes.push(route);
- });
- return routes;
- }
- /**
- * Renders the result of `matchRoutes()` into a React element.
- */
- function renderMatches(matches) {
- return _renderMatches(matches);
- }
- /**
- * @private
- * Walk the route tree and add hasErrorBoundary if it's not provided, so that
- * users providing manual route arrays can just specify errorElement
- */
- function enhanceManualRouteObjects(routes) {
- return routes.map(route => {
- let routeClone = _extends({}, route);
- if (routeClone.hasErrorBoundary == null) {
- routeClone.hasErrorBoundary = routeClone.errorElement != null;
- }
- if (routeClone.children) {
- routeClone.children = enhanceManualRouteObjects(routeClone.children);
- }
- return routeClone;
- });
- }
- function createMemoryRouter(routes, opts) {
- return (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.createRouter)({
- basename: opts == null ? void 0 : opts.basename,
- history: (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_0__.createMemoryHistory)({
- initialEntries: opts == null ? void 0 : opts.initialEntries,
- initialIndex: opts == null ? void 0 : opts.initialIndex
- }),
- hydrationData: opts == null ? void 0 : opts.hydrationData,
- routes: enhanceManualRouteObjects(routes)
- }).initialize();
- } ///////////////////////////////////////////////////////////////////////////////
- //# sourceMappingURL=index.js.map
- /***/ }),
- /***/ "./node_modules/react/cjs/react.development.js":
- /*!*****************************************************!*\
- !*** ./node_modules/react/cjs/react.development.js ***!
- \*****************************************************/
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
- "use strict";
- /** @license React v17.0.2
- * react.development.js
- *
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- if (true) {
- (function() {
- 'use strict';
- var _assign = __webpack_require__(/*! object-assign */ "./node_modules/object-assign/index.js");
- // TODO: this is special because it gets imported during build.
- var ReactVersion = '17.0.2';
- // ATTENTION
- // When adding new symbols to this file,
- // Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'
- // The Symbol used to tag the ReactElement-like types. If there is no native Symbol
- // nor polyfill, then a plain number is used for performance.
- var REACT_ELEMENT_TYPE = 0xeac7;
- var REACT_PORTAL_TYPE = 0xeaca;
- exports.Fragment = 0xeacb;
- exports.StrictMode = 0xeacc;
- exports.Profiler = 0xead2;
- var REACT_PROVIDER_TYPE = 0xeacd;
- var REACT_CONTEXT_TYPE = 0xeace;
- var REACT_FORWARD_REF_TYPE = 0xead0;
- exports.Suspense = 0xead1;
- var REACT_SUSPENSE_LIST_TYPE = 0xead8;
- var REACT_MEMO_TYPE = 0xead3;
- var REACT_LAZY_TYPE = 0xead4;
- var REACT_BLOCK_TYPE = 0xead9;
- var REACT_SERVER_BLOCK_TYPE = 0xeada;
- var REACT_FUNDAMENTAL_TYPE = 0xead5;
- var REACT_SCOPE_TYPE = 0xead7;
- var REACT_OPAQUE_ID_TYPE = 0xeae0;
- var REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1;
- var REACT_OFFSCREEN_TYPE = 0xeae2;
- var REACT_LEGACY_HIDDEN_TYPE = 0xeae3;
- if (typeof Symbol === 'function' && Symbol.for) {
- var symbolFor = Symbol.for;
- REACT_ELEMENT_TYPE = symbolFor('react.element');
- REACT_PORTAL_TYPE = symbolFor('react.portal');
- exports.Fragment = symbolFor('react.fragment');
- exports.StrictMode = symbolFor('react.strict_mode');
- exports.Profiler = symbolFor('react.profiler');
- REACT_PROVIDER_TYPE = symbolFor('react.provider');
- REACT_CONTEXT_TYPE = symbolFor('react.context');
- REACT_FORWARD_REF_TYPE = symbolFor('react.forward_ref');
- exports.Suspense = symbolFor('react.suspense');
- REACT_SUSPENSE_LIST_TYPE = symbolFor('react.suspense_list');
- REACT_MEMO_TYPE = symbolFor('react.memo');
- REACT_LAZY_TYPE = symbolFor('react.lazy');
- REACT_BLOCK_TYPE = symbolFor('react.block');
- REACT_SERVER_BLOCK_TYPE = symbolFor('react.server.block');
- REACT_FUNDAMENTAL_TYPE = symbolFor('react.fundamental');
- REACT_SCOPE_TYPE = symbolFor('react.scope');
- REACT_OPAQUE_ID_TYPE = symbolFor('react.opaque.id');
- REACT_DEBUG_TRACING_MODE_TYPE = symbolFor('react.debug_trace_mode');
- REACT_OFFSCREEN_TYPE = symbolFor('react.offscreen');
- REACT_LEGACY_HIDDEN_TYPE = symbolFor('react.legacy_hidden');
- }
- var MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
- var FAUX_ITERATOR_SYMBOL = '@@iterator';
- function getIteratorFn(maybeIterable) {
- if (maybeIterable === null || typeof maybeIterable !== 'object') {
- return null;
- }
- var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];
- if (typeof maybeIterator === 'function') {
- return maybeIterator;
- }
- return null;
- }
- /**
- * Keeps track of the current dispatcher.
- */
- var ReactCurrentDispatcher = {
- /**
- * @internal
- * @type {ReactComponent}
- */
- current: null
- };
- /**
- * Keeps track of the current batch's configuration such as how long an update
- * should suspend for if it needs to.
- */
- var ReactCurrentBatchConfig = {
- transition: 0
- };
- /**
- * Keeps track of the current owner.
- *
- * The current owner is the component who should own any components that are
- * currently being constructed.
- */
- var ReactCurrentOwner = {
- /**
- * @internal
- * @type {ReactComponent}
- */
- current: null
- };
- var ReactDebugCurrentFrame = {};
- var currentExtraStackFrame = null;
- function setExtraStackFrame(stack) {
- {
- currentExtraStackFrame = stack;
- }
- }
- {
- ReactDebugCurrentFrame.setExtraStackFrame = function (stack) {
- {
- currentExtraStackFrame = stack;
- }
- }; // Stack implementation injected by the current renderer.
- ReactDebugCurrentFrame.getCurrentStack = null;
- ReactDebugCurrentFrame.getStackAddendum = function () {
- var stack = ''; // Add an extra top frame while an element is being validated
- if (currentExtraStackFrame) {
- stack += currentExtraStackFrame;
- } // Delegate to the injected renderer-specific implementation
- var impl = ReactDebugCurrentFrame.getCurrentStack;
- if (impl) {
- stack += impl() || '';
- }
- return stack;
- };
- }
- /**
- * Used by act() to track whether you're inside an act() scope.
- */
- var IsSomeRendererActing = {
- current: false
- };
- var ReactSharedInternals = {
- ReactCurrentDispatcher: ReactCurrentDispatcher,
- ReactCurrentBatchConfig: ReactCurrentBatchConfig,
- ReactCurrentOwner: ReactCurrentOwner,
- IsSomeRendererActing: IsSomeRendererActing,
- // Used by renderers to avoid bundling object-assign twice in UMD bundles:
- assign: _assign
- };
- {
- ReactSharedInternals.ReactDebugCurrentFrame = ReactDebugCurrentFrame;
- }
- // by calls to these methods by a Babel plugin.
- //
- // In PROD (or in packages without access to React internals),
- // they are left as they are instead.
- function warn(format) {
- {
- for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
- args[_key - 1] = arguments[_key];
- }
- printWarning('warn', format, args);
- }
- }
- function error(format) {
- {
- for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
- args[_key2 - 1] = arguments[_key2];
- }
- printWarning('error', format, args);
- }
- }
- function printWarning(level, format, args) {
- // When changing this logic, you might want to also
- // update consoleWithStackDev.www.js as well.
- {
- var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
- var stack = ReactDebugCurrentFrame.getStackAddendum();
- if (stack !== '') {
- format += '%s';
- args = args.concat([stack]);
- }
- var argsWithFormat = args.map(function (item) {
- return '' + item;
- }); // Careful: RN currently depends on this prefix
- argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it
- // breaks IE9: https://github.com/facebook/react/issues/13610
- // eslint-disable-next-line react-internal/no-production-logging
- Function.prototype.apply.call(console[level], console, argsWithFormat);
- }
- }
- var didWarnStateUpdateForUnmountedComponent = {};
- function warnNoop(publicInstance, callerName) {
- {
- var _constructor = publicInstance.constructor;
- var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';
- var warningKey = componentName + "." + callerName;
- if (didWarnStateUpdateForUnmountedComponent[warningKey]) {
- return;
- }
- error("Can't call %s on a component that is not yet mounted. " + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName);
- didWarnStateUpdateForUnmountedComponent[warningKey] = true;
- }
- }
- /**
- * This is the abstract API for an update queue.
- */
- var ReactNoopUpdateQueue = {
- /**
- * Checks whether or not this composite component is mounted.
- * @param {ReactClass} publicInstance The instance we want to test.
- * @return {boolean} True if mounted, false otherwise.
- * @protected
- * @final
- */
- isMounted: function (publicInstance) {
- return false;
- },
- /**
- * Forces an update. This should only be invoked when it is known with
- * certainty that we are **not** in a DOM transaction.
- *
- * You may want to call this when you know that some deeper aspect of the
- * component's state has changed but `setState` was not called.
- *
- * This will not invoke `shouldComponentUpdate`, but it will invoke
- * `componentWillUpdate` and `componentDidUpdate`.
- *
- * @param {ReactClass} publicInstance The instance that should rerender.
- * @param {?function} callback Called after component is updated.
- * @param {?string} callerName name of the calling function in the public API.
- * @internal
- */
- enqueueForceUpdate: function (publicInstance, callback, callerName) {
- warnNoop(publicInstance, 'forceUpdate');
- },
- /**
- * Replaces all of the state. Always use this or `setState` to mutate state.
- * You should treat `this.state` as immutable.
- *
- * There is no guarantee that `this.state` will be immediately updated, so
- * accessing `this.state` after calling this method may return the old value.
- *
- * @param {ReactClass} publicInstance The instance that should rerender.
- * @param {object} completeState Next state.
- * @param {?function} callback Called after component is updated.
- * @param {?string} callerName name of the calling function in the public API.
- * @internal
- */
- enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {
- warnNoop(publicInstance, 'replaceState');
- },
- /**
- * Sets a subset of the state. This only exists because _pendingState is
- * internal. This provides a merging strategy that is not available to deep
- * properties which is confusing. TODO: Expose pendingState or don't use it
- * during the merge.
- *
- * @param {ReactClass} publicInstance The instance that should rerender.
- * @param {object} partialState Next partial state to be merged with state.
- * @param {?function} callback Called after component is updated.
- * @param {?string} Name of the calling function in the public API.
- * @internal
- */
- enqueueSetState: function (publicInstance, partialState, callback, callerName) {
- warnNoop(publicInstance, 'setState');
- }
- };
- var emptyObject = {};
- {
- Object.freeze(emptyObject);
- }
- /**
- * Base class helpers for the updating state of a component.
- */
- function Component(props, context, updater) {
- this.props = props;
- this.context = context; // If a component has string refs, we will assign a different object later.
- this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the
- // renderer.
- this.updater = updater || ReactNoopUpdateQueue;
- }
- Component.prototype.isReactComponent = {};
- /**
- * Sets a subset of the state. Always use this to mutate
- * state. You should treat `this.state` as immutable.
- *
- * There is no guarantee that `this.state` will be immediately updated, so
- * accessing `this.state` after calling this method may return the old value.
- *
- * There is no guarantee that calls to `setState` will run synchronously,
- * as they may eventually be batched together. You can provide an optional
- * callback that will be executed when the call to setState is actually
- * completed.
- *
- * When a function is provided to setState, it will be called at some point in
- * the future (not synchronously). It will be called with the up to date
- * component arguments (state, props, context). These values can be different
- * from this.* because your function may be called after receiveProps but before
- * shouldComponentUpdate, and this new state, props, and context will not yet be
- * assigned to this.
- *
- * @param {object|function} partialState Next partial state or function to
- * produce next partial state to be merged with current state.
- * @param {?function} callback Called after state is updated.
- * @final
- * @protected
- */
- Component.prototype.setState = function (partialState, callback) {
- if (!(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null)) {
- {
- throw Error( "setState(...): takes an object of state variables to update or a function which returns an object of state variables." );
- }
- }
- this.updater.enqueueSetState(this, partialState, callback, 'setState');
- };
- /**
- * Forces an update. This should only be invoked when it is known with
- * certainty that we are **not** in a DOM transaction.
- *
- * You may want to call this when you know that some deeper aspect of the
- * component's state has changed but `setState` was not called.
- *
- * This will not invoke `shouldComponentUpdate`, but it will invoke
- * `componentWillUpdate` and `componentDidUpdate`.
- *
- * @param {?function} callback Called after update is complete.
- * @final
- * @protected
- */
- Component.prototype.forceUpdate = function (callback) {
- this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');
- };
- /**
- * Deprecated APIs. These APIs used to exist on classic React classes but since
- * we would like to deprecate them, we're not going to move them over to this
- * modern base class. Instead, we define a getter that warns if it's accessed.
- */
- {
- var deprecatedAPIs = {
- isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],
- replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']
- };
- var defineDeprecationWarning = function (methodName, info) {
- Object.defineProperty(Component.prototype, methodName, {
- get: function () {
- warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);
- return undefined;
- }
- });
- };
- for (var fnName in deprecatedAPIs) {
- if (deprecatedAPIs.hasOwnProperty(fnName)) {
- defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);
- }
- }
- }
- function ComponentDummy() {}
- ComponentDummy.prototype = Component.prototype;
- /**
- * Convenience component with default shallow equality check for sCU.
- */
- function PureComponent(props, context, updater) {
- this.props = props;
- this.context = context; // If a component has string refs, we will assign a different object later.
- this.refs = emptyObject;
- this.updater = updater || ReactNoopUpdateQueue;
- }
- var pureComponentPrototype = PureComponent.prototype = new ComponentDummy();
- pureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods.
- _assign(pureComponentPrototype, Component.prototype);
- pureComponentPrototype.isPureReactComponent = true;
- // an immutable object with a single mutable value
- function createRef() {
- var refObject = {
- current: null
- };
- {
- Object.seal(refObject);
- }
- return refObject;
- }
- function getWrappedName(outerType, innerType, wrapperName) {
- var functionName = innerType.displayName || innerType.name || '';
- return outerType.displayName || (functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName);
- }
- function getContextName(type) {
- return type.displayName || 'Context';
- }
- function getComponentName(type) {
- if (type == null) {
- // Host root, text node or just invalid type.
- return null;
- }
- {
- if (typeof type.tag === 'number') {
- error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');
- }
- }
- if (typeof type === 'function') {
- return type.displayName || type.name || null;
- }
- if (typeof type === 'string') {
- return type;
- }
- switch (type) {
- case exports.Fragment:
- return 'Fragment';
- case REACT_PORTAL_TYPE:
- return 'Portal';
- case exports.Profiler:
- return 'Profiler';
- case exports.StrictMode:
- return 'StrictMode';
- case exports.Suspense:
- return 'Suspense';
- case REACT_SUSPENSE_LIST_TYPE:
- return 'SuspenseList';
- }
- if (typeof type === 'object') {
- switch (type.$$typeof) {
- case REACT_CONTEXT_TYPE:
- var context = type;
- return getContextName(context) + '.Consumer';
- case REACT_PROVIDER_TYPE:
- var provider = type;
- return getContextName(provider._context) + '.Provider';
- case REACT_FORWARD_REF_TYPE:
- return getWrappedName(type, type.render, 'ForwardRef');
- case REACT_MEMO_TYPE:
- return getComponentName(type.type);
- case REACT_BLOCK_TYPE:
- return getComponentName(type._render);
- case REACT_LAZY_TYPE:
- {
- var lazyComponent = type;
- var payload = lazyComponent._payload;
- var init = lazyComponent._init;
- try {
- return getComponentName(init(payload));
- } catch (x) {
- return null;
- }
- }
- }
- }
- return null;
- }
- var hasOwnProperty = Object.prototype.hasOwnProperty;
- var RESERVED_PROPS = {
- key: true,
- ref: true,
- __self: true,
- __source: true
- };
- var specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs;
- {
- didWarnAboutStringRefs = {};
- }
- function hasValidRef(config) {
- {
- if (hasOwnProperty.call(config, 'ref')) {
- var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;
- if (getter && getter.isReactWarning) {
- return false;
- }
- }
- }
- return config.ref !== undefined;
- }
- function hasValidKey(config) {
- {
- if (hasOwnProperty.call(config, 'key')) {
- var getter = Object.getOwnPropertyDescriptor(config, 'key').get;
- if (getter && getter.isReactWarning) {
- return false;
- }
- }
- }
- return config.key !== undefined;
- }
- function defineKeyPropWarningGetter(props, displayName) {
- var warnAboutAccessingKey = function () {
- {
- if (!specialPropKeyWarningShown) {
- specialPropKeyWarningShown = true;
- error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);
- }
- }
- };
- warnAboutAccessingKey.isReactWarning = true;
- Object.defineProperty(props, 'key', {
- get: warnAboutAccessingKey,
- configurable: true
- });
- }
- function defineRefPropWarningGetter(props, displayName) {
- var warnAboutAccessingRef = function () {
- {
- if (!specialPropRefWarningShown) {
- specialPropRefWarningShown = true;
- error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);
- }
- }
- };
- warnAboutAccessingRef.isReactWarning = true;
- Object.defineProperty(props, 'ref', {
- get: warnAboutAccessingRef,
- configurable: true
- });
- }
- function warnIfStringRefCannotBeAutoConverted(config) {
- {
- if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) {
- var componentName = getComponentName(ReactCurrentOwner.current.type);
- if (!didWarnAboutStringRefs[componentName]) {
- error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', componentName, config.ref);
- didWarnAboutStringRefs[componentName] = true;
- }
- }
- }
- }
- /**
- * Factory method to create a new React element. This no longer adheres to
- * the class pattern, so do not use new to call it. Also, instanceof check
- * will not work. Instead test $$typeof field against Symbol.for('react.element') to check
- * if something is a React Element.
- *
- * @param {*} type
- * @param {*} props
- * @param {*} key
- * @param {string|object} ref
- * @param {*} owner
- * @param {*} self A *temporary* helper to detect places where `this` is
- * different from the `owner` when React.createElement is called, so that we
- * can warn. We want to get rid of owner and replace string `ref`s with arrow
- * functions, and as long as `this` and owner are the same, there will be no
- * change in behavior.
- * @param {*} source An annotation object (added by a transpiler or otherwise)
- * indicating filename, line number, and/or other information.
- * @internal
- */
- var ReactElement = function (type, key, ref, self, source, owner, props) {
- var element = {
- // This tag allows us to uniquely identify this as a React Element
- $$typeof: REACT_ELEMENT_TYPE,
- // Built-in properties that belong on the element
- type: type,
- key: key,
- ref: ref,
- props: props,
- // Record the component responsible for creating this element.
- _owner: owner
- };
- {
- // The validation flag is currently mutative. We put it on
- // an external backing store so that we can freeze the whole object.
- // This can be replaced with a WeakMap once they are implemented in
- // commonly used development environments.
- element._store = {}; // To make comparing ReactElements easier for testing purposes, we make
- // the validation flag non-enumerable (where possible, which should
- // include every environment we run tests in), so the test framework
- // ignores it.
- Object.defineProperty(element._store, 'validated', {
- configurable: false,
- enumerable: false,
- writable: true,
- value: false
- }); // self and source are DEV only properties.
- Object.defineProperty(element, '_self', {
- configurable: false,
- enumerable: false,
- writable: false,
- value: self
- }); // Two elements created in two different places should be considered
- // equal for testing purposes and therefore we hide it from enumeration.
- Object.defineProperty(element, '_source', {
- configurable: false,
- enumerable: false,
- writable: false,
- value: source
- });
- if (Object.freeze) {
- Object.freeze(element.props);
- Object.freeze(element);
- }
- }
- return element;
- };
- /**
- * Create and return a new ReactElement of the given type.
- * See https://reactjs.org/docs/react-api.html#createelement
- */
- function createElement(type, config, children) {
- var propName; // Reserved names are extracted
- var props = {};
- var key = null;
- var ref = null;
- var self = null;
- var source = null;
- if (config != null) {
- if (hasValidRef(config)) {
- ref = config.ref;
- {
- warnIfStringRefCannotBeAutoConverted(config);
- }
- }
- if (hasValidKey(config)) {
- key = '' + config.key;
- }
- self = config.__self === undefined ? null : config.__self;
- source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object
- for (propName in config) {
- if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
- props[propName] = config[propName];
- }
- }
- } // Children can be more than one argument, and those are transferred onto
- // the newly allocated props object.
- var childrenLength = arguments.length - 2;
- if (childrenLength === 1) {
- props.children = children;
- } else if (childrenLength > 1) {
- var childArray = Array(childrenLength);
- for (var i = 0; i < childrenLength; i++) {
- childArray[i] = arguments[i + 2];
- }
- {
- if (Object.freeze) {
- Object.freeze(childArray);
- }
- }
- props.children = childArray;
- } // Resolve default props
- if (type && type.defaultProps) {
- var defaultProps = type.defaultProps;
- for (propName in defaultProps) {
- if (props[propName] === undefined) {
- props[propName] = defaultProps[propName];
- }
- }
- }
- {
- if (key || ref) {
- var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;
- if (key) {
- defineKeyPropWarningGetter(props, displayName);
- }
- if (ref) {
- defineRefPropWarningGetter(props, displayName);
- }
- }
- }
- return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
- }
- function cloneAndReplaceKey(oldElement, newKey) {
- var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);
- return newElement;
- }
- /**
- * Clone and return a new ReactElement using element as the starting point.
- * See https://reactjs.org/docs/react-api.html#cloneelement
- */
- function cloneElement(element, config, children) {
- if (!!(element === null || element === undefined)) {
- {
- throw Error( "React.cloneElement(...): The argument must be a React element, but you passed " + element + "." );
- }
- }
- var propName; // Original props are copied
- var props = _assign({}, element.props); // Reserved names are extracted
- var key = element.key;
- var ref = element.ref; // Self is preserved since the owner is preserved.
- var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a
- // transpiler, and the original source is probably a better indicator of the
- // true owner.
- var source = element._source; // Owner will be preserved, unless ref is overridden
- var owner = element._owner;
- if (config != null) {
- if (hasValidRef(config)) {
- // Silently steal the ref from the parent.
- ref = config.ref;
- owner = ReactCurrentOwner.current;
- }
- if (hasValidKey(config)) {
- key = '' + config.key;
- } // Remaining properties override existing props
- var defaultProps;
- if (element.type && element.type.defaultProps) {
- defaultProps = element.type.defaultProps;
- }
- for (propName in config) {
- if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
- if (config[propName] === undefined && defaultProps !== undefined) {
- // Resolve default props
- props[propName] = defaultProps[propName];
- } else {
- props[propName] = config[propName];
- }
- }
- }
- } // Children can be more than one argument, and those are transferred onto
- // the newly allocated props object.
- var childrenLength = arguments.length - 2;
- if (childrenLength === 1) {
- props.children = children;
- } else if (childrenLength > 1) {
- var childArray = Array(childrenLength);
- for (var i = 0; i < childrenLength; i++) {
- childArray[i] = arguments[i + 2];
- }
- props.children = childArray;
- }
- return ReactElement(element.type, key, ref, self, source, owner, props);
- }
- /**
- * Verifies the object is a ReactElement.
- * See https://reactjs.org/docs/react-api.html#isvalidelement
- * @param {?object} object
- * @return {boolean} True if `object` is a ReactElement.
- * @final
- */
- function isValidElement(object) {
- return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
- }
- var SEPARATOR = '.';
- var SUBSEPARATOR = ':';
- /**
- * Escape and wrap key so it is safe to use as a reactid
- *
- * @param {string} key to be escaped.
- * @return {string} the escaped key.
- */
- function escape(key) {
- var escapeRegex = /[=:]/g;
- var escaperLookup = {
- '=': '=0',
- ':': '=2'
- };
- var escapedString = key.replace(escapeRegex, function (match) {
- return escaperLookup[match];
- });
- return '$' + escapedString;
- }
- /**
- * TODO: Test that a single child and an array with one item have the same key
- * pattern.
- */
- var didWarnAboutMaps = false;
- var userProvidedKeyEscapeRegex = /\/+/g;
- function escapeUserProvidedKey(text) {
- return text.replace(userProvidedKeyEscapeRegex, '$&/');
- }
- /**
- * Generate a key string that identifies a element within a set.
- *
- * @param {*} element A element that could contain a manual key.
- * @param {number} index Index that is used if a manual key is not provided.
- * @return {string}
- */
- function getElementKey(element, index) {
- // Do some typechecking here since we call this blindly. We want to ensure
- // that we don't block potential future ES APIs.
- if (typeof element === 'object' && element !== null && element.key != null) {
- // Explicit key
- return escape('' + element.key);
- } // Implicit key determined by the index in the set
- return index.toString(36);
- }
- function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {
- var type = typeof children;
- if (type === 'undefined' || type === 'boolean') {
- // All of the above are perceived as null.
- children = null;
- }
- var invokeCallback = false;
- if (children === null) {
- invokeCallback = true;
- } else {
- switch (type) {
- case 'string':
- case 'number':
- invokeCallback = true;
- break;
- case 'object':
- switch (children.$$typeof) {
- case REACT_ELEMENT_TYPE:
- case REACT_PORTAL_TYPE:
- invokeCallback = true;
- }
- }
- }
- if (invokeCallback) {
- var _child = children;
- var mappedChild = callback(_child); // If it's the only child, treat the name as if it was wrapped in an array
- // so that it's consistent if the number of children grows:
- var childKey = nameSoFar === '' ? SEPARATOR + getElementKey(_child, 0) : nameSoFar;
- if (Array.isArray(mappedChild)) {
- var escapedChildKey = '';
- if (childKey != null) {
- escapedChildKey = escapeUserProvidedKey(childKey) + '/';
- }
- mapIntoArray(mappedChild, array, escapedChildKey, '', function (c) {
- return c;
- });
- } else if (mappedChild != null) {
- if (isValidElement(mappedChild)) {
- mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as
- // traverseAllChildren used to do for objects as children
- escapedPrefix + ( // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key
- mappedChild.key && (!_child || _child.key !== mappedChild.key) ? // $FlowFixMe Flow incorrectly thinks existing element's key can be a number
- escapeUserProvidedKey('' + mappedChild.key) + '/' : '') + childKey);
- }
- array.push(mappedChild);
- }
- return 1;
- }
- var child;
- var nextName;
- var subtreeCount = 0; // Count of children found in the current subtree.
- var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;
- if (Array.isArray(children)) {
- for (var i = 0; i < children.length; i++) {
- child = children[i];
- nextName = nextNamePrefix + getElementKey(child, i);
- subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback);
- }
- } else {
- var iteratorFn = getIteratorFn(children);
- if (typeof iteratorFn === 'function') {
- var iterableChildren = children;
- {
- // Warn about using Maps as children
- if (iteratorFn === iterableChildren.entries) {
- if (!didWarnAboutMaps) {
- warn('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.');
- }
- didWarnAboutMaps = true;
- }
- }
- var iterator = iteratorFn.call(iterableChildren);
- var step;
- var ii = 0;
- while (!(step = iterator.next()).done) {
- child = step.value;
- nextName = nextNamePrefix + getElementKey(child, ii++);
- subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback);
- }
- } else if (type === 'object') {
- var childrenString = '' + children;
- {
- {
- throw Error( "Objects are not valid as a React child (found: " + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + "). If you meant to render a collection of children, use an array instead." );
- }
- }
- }
- }
- return subtreeCount;
- }
- /**
- * Maps children that are typically specified as `props.children`.
- *
- * See https://reactjs.org/docs/react-api.html#reactchildrenmap
- *
- * The provided mapFunction(child, index) will be called for each
- * leaf child.
- *
- * @param {?*} children Children tree container.
- * @param {function(*, int)} func The map function.
- * @param {*} context Context for mapFunction.
- * @return {object} Object containing the ordered map of results.
- */
- function mapChildren(children, func, context) {
- if (children == null) {
- return children;
- }
- var result = [];
- var count = 0;
- mapIntoArray(children, result, '', '', function (child) {
- return func.call(context, child, count++);
- });
- return result;
- }
- /**
- * Count the number of children that are typically specified as
- * `props.children`.
- *
- * See https://reactjs.org/docs/react-api.html#reactchildrencount
- *
- * @param {?*} children Children tree container.
- * @return {number} The number of children.
- */
- function countChildren(children) {
- var n = 0;
- mapChildren(children, function () {
- n++; // Don't return anything
- });
- return n;
- }
- /**
- * Iterates through children that are typically specified as `props.children`.
- *
- * See https://reactjs.org/docs/react-api.html#reactchildrenforeach
- *
- * The provided forEachFunc(child, index) will be called for each
- * leaf child.
- *
- * @param {?*} children Children tree container.
- * @param {function(*, int)} forEachFunc
- * @param {*} forEachContext Context for forEachContext.
- */
- function forEachChildren(children, forEachFunc, forEachContext) {
- mapChildren(children, function () {
- forEachFunc.apply(this, arguments); // Don't return anything.
- }, forEachContext);
- }
- /**
- * Flatten a children object (typically specified as `props.children`) and
- * return an array with appropriately re-keyed children.
- *
- * See https://reactjs.org/docs/react-api.html#reactchildrentoarray
- */
- function toArray(children) {
- return mapChildren(children, function (child) {
- return child;
- }) || [];
- }
- /**
- * Returns the first child in a collection of children and verifies that there
- * is only one child in the collection.
- *
- * See https://reactjs.org/docs/react-api.html#reactchildrenonly
- *
- * The current implementation of this function assumes that a single child gets
- * passed without a wrapper, but the purpose of this helper function is to
- * abstract away the particular structure of children.
- *
- * @param {?object} children Child collection structure.
- * @return {ReactElement} The first and only `ReactElement` contained in the
- * structure.
- */
- function onlyChild(children) {
- if (!isValidElement(children)) {
- {
- throw Error( "React.Children.only expected to receive a single React element child." );
- }
- }
- return children;
- }
- function createContext(defaultValue, calculateChangedBits) {
- if (calculateChangedBits === undefined) {
- calculateChangedBits = null;
- } else {
- {
- if (calculateChangedBits !== null && typeof calculateChangedBits !== 'function') {
- error('createContext: Expected the optional second argument to be a ' + 'function. Instead received: %s', calculateChangedBits);
- }
- }
- }
- var context = {
- $$typeof: REACT_CONTEXT_TYPE,
- _calculateChangedBits: calculateChangedBits,
- // As a workaround to support multiple concurrent renderers, we categorize
- // some renderers as primary and others as secondary. We only expect
- // there to be two concurrent renderers at most: React Native (primary) and
- // Fabric (secondary); React DOM (primary) and React ART (secondary).
- // Secondary renderers store their context values on separate fields.
- _currentValue: defaultValue,
- _currentValue2: defaultValue,
- // Used to track how many concurrent renderers this context currently
- // supports within in a single renderer. Such as parallel server rendering.
- _threadCount: 0,
- // These are circular
- Provider: null,
- Consumer: null
- };
- context.Provider = {
- $$typeof: REACT_PROVIDER_TYPE,
- _context: context
- };
- var hasWarnedAboutUsingNestedContextConsumers = false;
- var hasWarnedAboutUsingConsumerProvider = false;
- var hasWarnedAboutDisplayNameOnConsumer = false;
- {
- // A separate object, but proxies back to the original context object for
- // backwards compatibility. It has a different $$typeof, so we can properly
- // warn for the incorrect usage of Context as a Consumer.
- var Consumer = {
- $$typeof: REACT_CONTEXT_TYPE,
- _context: context,
- _calculateChangedBits: context._calculateChangedBits
- }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here
- Object.defineProperties(Consumer, {
- Provider: {
- get: function () {
- if (!hasWarnedAboutUsingConsumerProvider) {
- hasWarnedAboutUsingConsumerProvider = true;
- error('Rendering <Context.Consumer.Provider> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Provider> instead?');
- }
- return context.Provider;
- },
- set: function (_Provider) {
- context.Provider = _Provider;
- }
- },
- _currentValue: {
- get: function () {
- return context._currentValue;
- },
- set: function (_currentValue) {
- context._currentValue = _currentValue;
- }
- },
- _currentValue2: {
- get: function () {
- return context._currentValue2;
- },
- set: function (_currentValue2) {
- context._currentValue2 = _currentValue2;
- }
- },
- _threadCount: {
- get: function () {
- return context._threadCount;
- },
- set: function (_threadCount) {
- context._threadCount = _threadCount;
- }
- },
- Consumer: {
- get: function () {
- if (!hasWarnedAboutUsingNestedContextConsumers) {
- hasWarnedAboutUsingNestedContextConsumers = true;
- error('Rendering <Context.Consumer.Consumer> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');
- }
- return context.Consumer;
- }
- },
- displayName: {
- get: function () {
- return context.displayName;
- },
- set: function (displayName) {
- if (!hasWarnedAboutDisplayNameOnConsumer) {
- warn('Setting `displayName` on Context.Consumer has no effect. ' + "You should set it directly on the context with Context.displayName = '%s'.", displayName);
- hasWarnedAboutDisplayNameOnConsumer = true;
- }
- }
- }
- }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty
- context.Consumer = Consumer;
- }
- {
- context._currentRenderer = null;
- context._currentRenderer2 = null;
- }
- return context;
- }
- var Uninitialized = -1;
- var Pending = 0;
- var Resolved = 1;
- var Rejected = 2;
- function lazyInitializer(payload) {
- if (payload._status === Uninitialized) {
- var ctor = payload._result;
- var thenable = ctor(); // Transition to the next state.
- var pending = payload;
- pending._status = Pending;
- pending._result = thenable;
- thenable.then(function (moduleObject) {
- if (payload._status === Pending) {
- var defaultExport = moduleObject.default;
- {
- if (defaultExport === undefined) {
- error('lazy: Expected the result of a dynamic import() call. ' + 'Instead received: %s\n\nYour code should look like: \n ' + // Break up imports to avoid accidentally parsing them as dependencies.
- 'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))", moduleObject);
- }
- } // Transition to the next state.
- var resolved = payload;
- resolved._status = Resolved;
- resolved._result = defaultExport;
- }
- }, function (error) {
- if (payload._status === Pending) {
- // Transition to the next state.
- var rejected = payload;
- rejected._status = Rejected;
- rejected._result = error;
- }
- });
- }
- if (payload._status === Resolved) {
- return payload._result;
- } else {
- throw payload._result;
- }
- }
- function lazy(ctor) {
- var payload = {
- // We use these fields to store the result.
- _status: -1,
- _result: ctor
- };
- var lazyType = {
- $$typeof: REACT_LAZY_TYPE,
- _payload: payload,
- _init: lazyInitializer
- };
- {
- // In production, this would just set it on the object.
- var defaultProps;
- var propTypes; // $FlowFixMe
- Object.defineProperties(lazyType, {
- defaultProps: {
- configurable: true,
- get: function () {
- return defaultProps;
- },
- set: function (newDefaultProps) {
- error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');
- defaultProps = newDefaultProps; // Match production behavior more closely:
- // $FlowFixMe
- Object.defineProperty(lazyType, 'defaultProps', {
- enumerable: true
- });
- }
- },
- propTypes: {
- configurable: true,
- get: function () {
- return propTypes;
- },
- set: function (newPropTypes) {
- error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');
- propTypes = newPropTypes; // Match production behavior more closely:
- // $FlowFixMe
- Object.defineProperty(lazyType, 'propTypes', {
- enumerable: true
- });
- }
- }
- });
- }
- return lazyType;
- }
- function forwardRef(render) {
- {
- if (render != null && render.$$typeof === REACT_MEMO_TYPE) {
- error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');
- } else if (typeof render !== 'function') {
- error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render);
- } else {
- if (render.length !== 0 && render.length !== 2) {
- error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.');
- }
- }
- if (render != null) {
- if (render.defaultProps != null || render.propTypes != null) {
- error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?');
- }
- }
- }
- var elementType = {
- $$typeof: REACT_FORWARD_REF_TYPE,
- render: render
- };
- {
- var ownName;
- Object.defineProperty(elementType, 'displayName', {
- enumerable: false,
- configurable: true,
- get: function () {
- return ownName;
- },
- set: function (name) {
- ownName = name;
- if (render.displayName == null) {
- render.displayName = name;
- }
- }
- });
- }
- return elementType;
- }
- // Filter certain DOM attributes (e.g. src, href) if their values are empty strings.
- var enableScopeAPI = false; // Experimental Create Event Handle API.
- function isValidElementType(type) {
- if (typeof type === 'string' || typeof type === 'function') {
- return true;
- } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).
- if (type === exports.Fragment || type === exports.Profiler || type === REACT_DEBUG_TRACING_MODE_TYPE || type === exports.StrictMode || type === exports.Suspense || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_LEGACY_HIDDEN_TYPE || enableScopeAPI ) {
- return true;
- }
- if (typeof type === 'object' && type !== null) {
- if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_BLOCK_TYPE || type[0] === REACT_SERVER_BLOCK_TYPE) {
- return true;
- }
- }
- return false;
- }
- function memo(type, compare) {
- {
- if (!isValidElementType(type)) {
- error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type);
- }
- }
- var elementType = {
- $$typeof: REACT_MEMO_TYPE,
- type: type,
- compare: compare === undefined ? null : compare
- };
- {
- var ownName;
- Object.defineProperty(elementType, 'displayName', {
- enumerable: false,
- configurable: true,
- get: function () {
- return ownName;
- },
- set: function (name) {
- ownName = name;
- if (type.displayName == null) {
- type.displayName = name;
- }
- }
- });
- }
- return elementType;
- }
- function resolveDispatcher() {
- var dispatcher = ReactCurrentDispatcher.current;
- if (!(dispatcher !== null)) {
- {
- throw Error( "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem." );
- }
- }
- return dispatcher;
- }
- function useContext(Context, unstable_observedBits) {
- var dispatcher = resolveDispatcher();
- {
- if (unstable_observedBits !== undefined) {
- error('useContext() second argument is reserved for future ' + 'use in React. Passing it is not supported. ' + 'You passed: %s.%s', unstable_observedBits, typeof unstable_observedBits === 'number' && Array.isArray(arguments[2]) ? '\n\nDid you call array.map(useContext)? ' + 'Calling Hooks inside a loop is not supported. ' + 'Learn more at https://reactjs.org/link/rules-of-hooks' : '');
- } // TODO: add a more generic warning for invalid values.
- if (Context._context !== undefined) {
- var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs
- // and nobody should be using this in existing code.
- if (realContext.Consumer === Context) {
- error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?');
- } else if (realContext.Provider === Context) {
- error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');
- }
- }
- }
- return dispatcher.useContext(Context, unstable_observedBits);
- }
- function useState(initialState) {
- var dispatcher = resolveDispatcher();
- return dispatcher.useState(initialState);
- }
- function useReducer(reducer, initialArg, init) {
- var dispatcher = resolveDispatcher();
- return dispatcher.useReducer(reducer, initialArg, init);
- }
- function useRef(initialValue) {
- var dispatcher = resolveDispatcher();
- return dispatcher.useRef(initialValue);
- }
- function useEffect(create, deps) {
- var dispatcher = resolveDispatcher();
- return dispatcher.useEffect(create, deps);
- }
- function useLayoutEffect(create, deps) {
- var dispatcher = resolveDispatcher();
- return dispatcher.useLayoutEffect(create, deps);
- }
- function useCallback(callback, deps) {
- var dispatcher = resolveDispatcher();
- return dispatcher.useCallback(callback, deps);
- }
- function useMemo(create, deps) {
- var dispatcher = resolveDispatcher();
- return dispatcher.useMemo(create, deps);
- }
- function useImperativeHandle(ref, create, deps) {
- var dispatcher = resolveDispatcher();
- return dispatcher.useImperativeHandle(ref, create, deps);
- }
- function useDebugValue(value, formatterFn) {
- {
- var dispatcher = resolveDispatcher();
- return dispatcher.useDebugValue(value, formatterFn);
- }
- }
- // Helpers to patch console.logs to avoid logging during side-effect free
- // replaying on render function. This currently only patches the object
- // lazily which won't cover if the log function was extracted eagerly.
- // We could also eagerly patch the method.
- var disabledDepth = 0;
- var prevLog;
- var prevInfo;
- var prevWarn;
- var prevError;
- var prevGroup;
- var prevGroupCollapsed;
- var prevGroupEnd;
- function disabledLog() {}
- disabledLog.__reactDisabledLog = true;
- function disableLogs() {
- {
- if (disabledDepth === 0) {
- /* eslint-disable react-internal/no-production-logging */
- prevLog = console.log;
- prevInfo = console.info;
- prevWarn = console.warn;
- prevError = console.error;
- prevGroup = console.group;
- prevGroupCollapsed = console.groupCollapsed;
- prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099
- var props = {
- configurable: true,
- enumerable: true,
- value: disabledLog,
- writable: true
- }; // $FlowFixMe Flow thinks console is immutable.
- Object.defineProperties(console, {
- info: props,
- log: props,
- warn: props,
- error: props,
- group: props,
- groupCollapsed: props,
- groupEnd: props
- });
- /* eslint-enable react-internal/no-production-logging */
- }
- disabledDepth++;
- }
- }
- function reenableLogs() {
- {
- disabledDepth--;
- if (disabledDepth === 0) {
- /* eslint-disable react-internal/no-production-logging */
- var props = {
- configurable: true,
- enumerable: true,
- writable: true
- }; // $FlowFixMe Flow thinks console is immutable.
- Object.defineProperties(console, {
- log: _assign({}, props, {
- value: prevLog
- }),
- info: _assign({}, props, {
- value: prevInfo
- }),
- warn: _assign({}, props, {
- value: prevWarn
- }),
- error: _assign({}, props, {
- value: prevError
- }),
- group: _assign({}, props, {
- value: prevGroup
- }),
- groupCollapsed: _assign({}, props, {
- value: prevGroupCollapsed
- }),
- groupEnd: _assign({}, props, {
- value: prevGroupEnd
- })
- });
- /* eslint-enable react-internal/no-production-logging */
- }
- if (disabledDepth < 0) {
- error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');
- }
- }
- }
- var ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher;
- var prefix;
- function describeBuiltInComponentFrame(name, source, ownerFn) {
- {
- if (prefix === undefined) {
- // Extract the VM specific prefix used by each line.
- try {
- throw Error();
- } catch (x) {
- var match = x.stack.trim().match(/\n( *(at )?)/);
- prefix = match && match[1] || '';
- }
- } // We use the prefix to ensure our stacks line up with native stack frames.
- return '\n' + prefix + name;
- }
- }
- var reentry = false;
- var componentFrameCache;
- {
- var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;
- componentFrameCache = new PossiblyWeakMap();
- }
- function describeNativeComponentFrame(fn, construct) {
- // If something asked for a stack inside a fake render, it should get ignored.
- if (!fn || reentry) {
- return '';
- }
- {
- var frame = componentFrameCache.get(fn);
- if (frame !== undefined) {
- return frame;
- }
- }
- var control;
- reentry = true;
- var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.
- Error.prepareStackTrace = undefined;
- var previousDispatcher;
- {
- previousDispatcher = ReactCurrentDispatcher$1.current; // Set the dispatcher in DEV because this might be call in the render function
- // for warnings.
- ReactCurrentDispatcher$1.current = null;
- disableLogs();
- }
- try {
- // This should throw.
- if (construct) {
- // Something should be setting the props in the constructor.
- var Fake = function () {
- throw Error();
- }; // $FlowFixMe
- Object.defineProperty(Fake.prototype, 'props', {
- set: function () {
- // We use a throwing setter instead of frozen or non-writable props
- // because that won't throw in a non-strict mode function.
- throw Error();
- }
- });
- if (typeof Reflect === 'object' && Reflect.construct) {
- // We construct a different control for this case to include any extra
- // frames added by the construct call.
- try {
- Reflect.construct(Fake, []);
- } catch (x) {
- control = x;
- }
- Reflect.construct(fn, [], Fake);
- } else {
- try {
- Fake.call();
- } catch (x) {
- control = x;
- }
- fn.call(Fake.prototype);
- }
- } else {
- try {
- throw Error();
- } catch (x) {
- control = x;
- }
- fn();
- }
- } catch (sample) {
- // This is inlined manually because closure doesn't do it for us.
- if (sample && control && typeof sample.stack === 'string') {
- // This extracts the first frame from the sample that isn't also in the control.
- // Skipping one frame that we assume is the frame that calls the two.
- var sampleLines = sample.stack.split('\n');
- var controlLines = control.stack.split('\n');
- var s = sampleLines.length - 1;
- var c = controlLines.length - 1;
- while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {
- // We expect at least one stack frame to be shared.
- // Typically this will be the root most one. However, stack frames may be
- // cut off due to maximum stack limits. In this case, one maybe cut off
- // earlier than the other. We assume that the sample is longer or the same
- // and there for cut off earlier. So we should find the root most frame in
- // the sample somewhere in the control.
- c--;
- }
- for (; s >= 1 && c >= 0; s--, c--) {
- // Next we find the first one that isn't the same which should be the
- // frame that called our sample function and the control.
- if (sampleLines[s] !== controlLines[c]) {
- // In V8, the first line is describing the message but other VMs don't.
- // If we're about to return the first line, and the control is also on the same
- // line, that's a pretty good indicator that our sample threw at same line as
- // the control. I.e. before we entered the sample frame. So we ignore this result.
- // This can happen if you passed a class to function component, or non-function.
- if (s !== 1 || c !== 1) {
- do {
- s--;
- c--; // We may still have similar intermediate frames from the construct call.
- // The next one that isn't the same should be our match though.
- if (c < 0 || sampleLines[s] !== controlLines[c]) {
- // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier.
- var _frame = '\n' + sampleLines[s].replace(' at new ', ' at ');
- {
- if (typeof fn === 'function') {
- componentFrameCache.set(fn, _frame);
- }
- } // Return the line we found.
- return _frame;
- }
- } while (s >= 1 && c >= 0);
- }
- break;
- }
- }
- }
- } finally {
- reentry = false;
- {
- ReactCurrentDispatcher$1.current = previousDispatcher;
- reenableLogs();
- }
- Error.prepareStackTrace = previousPrepareStackTrace;
- } // Fallback to just using the name if we couldn't make it throw.
- var name = fn ? fn.displayName || fn.name : '';
- var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';
- {
- if (typeof fn === 'function') {
- componentFrameCache.set(fn, syntheticFrame);
- }
- }
- return syntheticFrame;
- }
- function describeFunctionComponentFrame(fn, source, ownerFn) {
- {
- return describeNativeComponentFrame(fn, false);
- }
- }
- function shouldConstruct(Component) {
- var prototype = Component.prototype;
- return !!(prototype && prototype.isReactComponent);
- }
- function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {
- if (type == null) {
- return '';
- }
- if (typeof type === 'function') {
- {
- return describeNativeComponentFrame(type, shouldConstruct(type));
- }
- }
- if (typeof type === 'string') {
- return describeBuiltInComponentFrame(type);
- }
- switch (type) {
- case exports.Suspense:
- return describeBuiltInComponentFrame('Suspense');
- case REACT_SUSPENSE_LIST_TYPE:
- return describeBuiltInComponentFrame('SuspenseList');
- }
- if (typeof type === 'object') {
- switch (type.$$typeof) {
- case REACT_FORWARD_REF_TYPE:
- return describeFunctionComponentFrame(type.render);
- case REACT_MEMO_TYPE:
- // Memo may contain any component type so we recursively resolve it.
- return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);
- case REACT_BLOCK_TYPE:
- return describeFunctionComponentFrame(type._render);
- case REACT_LAZY_TYPE:
- {
- var lazyComponent = type;
- var payload = lazyComponent._payload;
- var init = lazyComponent._init;
- try {
- // Lazy may contain any component type so we recursively resolve it.
- return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);
- } catch (x) {}
- }
- }
- }
- return '';
- }
- var loggedTypeFailures = {};
- var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;
- function setCurrentlyValidatingElement(element) {
- {
- if (element) {
- var owner = element._owner;
- var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
- ReactDebugCurrentFrame$1.setExtraStackFrame(stack);
- } else {
- ReactDebugCurrentFrame$1.setExtraStackFrame(null);
- }
- }
- }
- function checkPropTypes(typeSpecs, values, location, componentName, element) {
- {
- // $FlowFixMe This is okay but Flow doesn't know it.
- var has = Function.call.bind(Object.prototype.hasOwnProperty);
- for (var typeSpecName in typeSpecs) {
- if (has(typeSpecs, typeSpecName)) {
- var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to
- // fail the render phase where it didn't fail before. So we log it.
- // After these have been cleaned up, we'll let them throw.
- try {
- // This is intentionally an invariant that gets caught. It's the same
- // behavior as without this statement except with a better message.
- if (typeof typeSpecs[typeSpecName] !== 'function') {
- var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');
- err.name = 'Invariant Violation';
- throw err;
- }
- error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');
- } catch (ex) {
- error$1 = ex;
- }
- if (error$1 && !(error$1 instanceof Error)) {
- setCurrentlyValidatingElement(element);
- error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);
- setCurrentlyValidatingElement(null);
- }
- if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {
- // Only monitor this failure once because there tends to be a lot of the
- // same error.
- loggedTypeFailures[error$1.message] = true;
- setCurrentlyValidatingElement(element);
- error('Failed %s type: %s', location, error$1.message);
- setCurrentlyValidatingElement(null);
- }
- }
- }
- }
- }
- function setCurrentlyValidatingElement$1(element) {
- {
- if (element) {
- var owner = element._owner;
- var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
- setExtraStackFrame(stack);
- } else {
- setExtraStackFrame(null);
- }
- }
- }
- var propTypesMisspellWarningShown;
- {
- propTypesMisspellWarningShown = false;
- }
- function getDeclarationErrorAddendum() {
- if (ReactCurrentOwner.current) {
- var name = getComponentName(ReactCurrentOwner.current.type);
- if (name) {
- return '\n\nCheck the render method of `' + name + '`.';
- }
- }
- return '';
- }
- function getSourceInfoErrorAddendum(source) {
- if (source !== undefined) {
- var fileName = source.fileName.replace(/^.*[\\\/]/, '');
- var lineNumber = source.lineNumber;
- return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.';
- }
- return '';
- }
- function getSourceInfoErrorAddendumForProps(elementProps) {
- if (elementProps !== null && elementProps !== undefined) {
- return getSourceInfoErrorAddendum(elementProps.__source);
- }
- return '';
- }
- /**
- * Warn if there's no key explicitly set on dynamic arrays of children or
- * object keys are not valid. This allows us to keep track of children between
- * updates.
- */
- var ownerHasKeyUseWarning = {};
- function getCurrentComponentErrorInfo(parentType) {
- var info = getDeclarationErrorAddendum();
- if (!info) {
- var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;
- if (parentName) {
- info = "\n\nCheck the top-level render call using <" + parentName + ">.";
- }
- }
- return info;
- }
- /**
- * Warn if the element doesn't have an explicit key assigned to it.
- * This element is in an array. The array could grow and shrink or be
- * reordered. All children that haven't already been validated are required to
- * have a "key" property assigned to it. Error statuses are cached so a warning
- * will only be shown once.
- *
- * @internal
- * @param {ReactElement} element Element that requires a key.
- * @param {*} parentType element's parent's type.
- */
- function validateExplicitKey(element, parentType) {
- if (!element._store || element._store.validated || element.key != null) {
- return;
- }
- element._store.validated = true;
- var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);
- if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {
- return;
- }
- ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a
- // property, it may be the creator of the child that's responsible for
- // assigning it a key.
- var childOwner = '';
- if (element && element._owner && element._owner !== ReactCurrentOwner.current) {
- // Give the component that originally created this child.
- childOwner = " It was passed a child from " + getComponentName(element._owner.type) + ".";
- }
- {
- setCurrentlyValidatingElement$1(element);
- error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);
- setCurrentlyValidatingElement$1(null);
- }
- }
- /**
- * Ensure that every element either is passed in a static location, in an
- * array with an explicit keys property defined, or in an object literal
- * with valid key property.
- *
- * @internal
- * @param {ReactNode} node Statically passed child of any type.
- * @param {*} parentType node's parent's type.
- */
- function validateChildKeys(node, parentType) {
- if (typeof node !== 'object') {
- return;
- }
- if (Array.isArray(node)) {
- for (var i = 0; i < node.length; i++) {
- var child = node[i];
- if (isValidElement(child)) {
- validateExplicitKey(child, parentType);
- }
- }
- } else if (isValidElement(node)) {
- // This element was passed in a valid location.
- if (node._store) {
- node._store.validated = true;
- }
- } else if (node) {
- var iteratorFn = getIteratorFn(node);
- if (typeof iteratorFn === 'function') {
- // Entry iterators used to provide implicit keys,
- // but now we print a separate warning for them later.
- if (iteratorFn !== node.entries) {
- var iterator = iteratorFn.call(node);
- var step;
- while (!(step = iterator.next()).done) {
- if (isValidElement(step.value)) {
- validateExplicitKey(step.value, parentType);
- }
- }
- }
- }
- }
- }
- /**
- * Given an element, validate that its props follow the propTypes definition,
- * provided by the type.
- *
- * @param {ReactElement} element
- */
- function validatePropTypes(element) {
- {
- var type = element.type;
- if (type === null || type === undefined || typeof type === 'string') {
- return;
- }
- var propTypes;
- if (typeof type === 'function') {
- propTypes = type.propTypes;
- } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.
- // Inner props are checked in the reconciler.
- type.$$typeof === REACT_MEMO_TYPE)) {
- propTypes = type.propTypes;
- } else {
- return;
- }
- if (propTypes) {
- // Intentionally inside to avoid triggering lazy initializers:
- var name = getComponentName(type);
- checkPropTypes(propTypes, element.props, 'prop', name, element);
- } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {
- propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:
- var _name = getComponentName(type);
- error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');
- }
- if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {
- error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');
- }
- }
- }
- /**
- * Given a fragment, validate that it can only be provided with fragment props
- * @param {ReactElement} fragment
- */
- function validateFragmentProps(fragment) {
- {
- var keys = Object.keys(fragment.props);
- for (var i = 0; i < keys.length; i++) {
- var key = keys[i];
- if (key !== 'children' && key !== 'key') {
- setCurrentlyValidatingElement$1(fragment);
- error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);
- setCurrentlyValidatingElement$1(null);
- break;
- }
- }
- if (fragment.ref !== null) {
- setCurrentlyValidatingElement$1(fragment);
- error('Invalid attribute `ref` supplied to `React.Fragment`.');
- setCurrentlyValidatingElement$1(null);
- }
- }
- }
- function createElementWithValidation(type, props, children) {
- var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to
- // succeed and there will likely be errors in render.
- if (!validType) {
- var info = '';
- if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {
- info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports.";
- }
- var sourceInfo = getSourceInfoErrorAddendumForProps(props);
- if (sourceInfo) {
- info += sourceInfo;
- } else {
- info += getDeclarationErrorAddendum();
- }
- var typeString;
- if (type === null) {
- typeString = 'null';
- } else if (Array.isArray(type)) {
- typeString = 'array';
- } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {
- typeString = "<" + (getComponentName(type.type) || 'Unknown') + " />";
- info = ' Did you accidentally export a JSX literal instead of a component?';
- } else {
- typeString = typeof type;
- }
- {
- error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);
- }
- }
- var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used.
- // TODO: Drop this when these are no longer allowed as the type argument.
- if (element == null) {
- return element;
- } // Skip key warning if the type isn't valid since our key validation logic
- // doesn't expect a non-string/function type and can throw confusing errors.
- // We don't want exception behavior to differ between dev and prod.
- // (Rendering will throw with a helpful message and as soon as the type is
- // fixed, the key warnings will appear.)
- if (validType) {
- for (var i = 2; i < arguments.length; i++) {
- validateChildKeys(arguments[i], type);
- }
- }
- if (type === exports.Fragment) {
- validateFragmentProps(element);
- } else {
- validatePropTypes(element);
- }
- return element;
- }
- var didWarnAboutDeprecatedCreateFactory = false;
- function createFactoryWithValidation(type) {
- var validatedFactory = createElementWithValidation.bind(null, type);
- validatedFactory.type = type;
- {
- if (!didWarnAboutDeprecatedCreateFactory) {
- didWarnAboutDeprecatedCreateFactory = true;
- warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.');
- } // Legacy hook: remove it
- Object.defineProperty(validatedFactory, 'type', {
- enumerable: false,
- get: function () {
- warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');
- Object.defineProperty(this, 'type', {
- value: type
- });
- return type;
- }
- });
- }
- return validatedFactory;
- }
- function cloneElementWithValidation(element, props, children) {
- var newElement = cloneElement.apply(this, arguments);
- for (var i = 2; i < arguments.length; i++) {
- validateChildKeys(arguments[i], newElement.type);
- }
- validatePropTypes(newElement);
- return newElement;
- }
- {
- try {
- var frozenObject = Object.freeze({});
- /* eslint-disable no-new */
- new Map([[frozenObject, null]]);
- new Set([frozenObject]);
- /* eslint-enable no-new */
- } catch (e) {
- }
- }
- var createElement$1 = createElementWithValidation ;
- var cloneElement$1 = cloneElementWithValidation ;
- var createFactory = createFactoryWithValidation ;
- var Children = {
- map: mapChildren,
- forEach: forEachChildren,
- count: countChildren,
- toArray: toArray,
- only: onlyChild
- };
- exports.Children = Children;
- exports.Component = Component;
- exports.PureComponent = PureComponent;
- exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals;
- exports.cloneElement = cloneElement$1;
- exports.createContext = createContext;
- exports.createElement = createElement$1;
- exports.createFactory = createFactory;
- exports.createRef = createRef;
- exports.forwardRef = forwardRef;
- exports.isValidElement = isValidElement;
- exports.lazy = lazy;
- exports.memo = memo;
- exports.useCallback = useCallback;
- exports.useContext = useContext;
- exports.useDebugValue = useDebugValue;
- exports.useEffect = useEffect;
- exports.useImperativeHandle = useImperativeHandle;
- exports.useLayoutEffect = useLayoutEffect;
- exports.useMemo = useMemo;
- exports.useReducer = useReducer;
- exports.useRef = useRef;
- exports.useState = useState;
- exports.version = ReactVersion;
- })();
- }
- /***/ }),
- /***/ "./node_modules/react/index.js":
- /*!*************************************!*\
- !*** ./node_modules/react/index.js ***!
- \*************************************/
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- if (false) {} else {
- module.exports = __webpack_require__(/*! ./cjs/react.development.js */ "./node_modules/react/cjs/react.development.js");
- }
- /***/ }),
- /***/ "./src/sass/d3v4pp.scss":
- /*!******************************!*\
- !*** ./src/sass/d3v4pp.scss ***!
- \******************************/
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
- /* harmony export */ });
- /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
- /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
- /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
- /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
- /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
- /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
- /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
- /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
- /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
- /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
- /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
- /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
- /* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_1_use_2_d3v4pp_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./d3v4pp.scss */ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./src/sass/d3v4pp.scss");
-
-
-
-
-
-
-
-
-
- var options = {};
- options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
- options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
- options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
-
- options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
- options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
- var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_1_use_2_d3v4pp_scss__WEBPACK_IMPORTED_MODULE_6__["default"], options);
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_1_use_2_d3v4pp_scss__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_1_use_2_d3v4pp_scss__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_1_use_2_d3v4pp_scss__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
- /***/ }),
- /***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":
- /*!****************************************************************************!*\
- !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
- \****************************************************************************/
- /***/ ((module) => {
- "use strict";
- var stylesInDOM = [];
- function getIndexByIdentifier(identifier) {
- var result = -1;
- for (var i = 0; i < stylesInDOM.length; i++) {
- if (stylesInDOM[i].identifier === identifier) {
- result = i;
- break;
- }
- }
- return result;
- }
- function modulesToDom(list, options) {
- var idCountMap = {};
- var identifiers = [];
- for (var i = 0; i < list.length; i++) {
- var item = list[i];
- var id = options.base ? item[0] + options.base : item[0];
- var count = idCountMap[id] || 0;
- var identifier = "".concat(id, " ").concat(count);
- idCountMap[id] = count + 1;
- var indexByIdentifier = getIndexByIdentifier(identifier);
- var obj = {
- css: item[1],
- media: item[2],
- sourceMap: item[3],
- supports: item[4],
- layer: item[5]
- };
- if (indexByIdentifier !== -1) {
- stylesInDOM[indexByIdentifier].references++;
- stylesInDOM[indexByIdentifier].updater(obj);
- } else {
- var updater = addElementStyle(obj, options);
- options.byIndex = i;
- stylesInDOM.splice(i, 0, {
- identifier: identifier,
- updater: updater,
- references: 1
- });
- }
- identifiers.push(identifier);
- }
- return identifiers;
- }
- function addElementStyle(obj, options) {
- var api = options.domAPI(options);
- api.update(obj);
- var updater = function updater(newObj) {
- if (newObj) {
- if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {
- return;
- }
- api.update(obj = newObj);
- } else {
- api.remove();
- }
- };
- return updater;
- }
- module.exports = function (list, options) {
- options = options || {};
- list = list || [];
- var lastIdentifiers = modulesToDom(list, options);
- return function update(newList) {
- newList = newList || [];
- for (var i = 0; i < lastIdentifiers.length; i++) {
- var identifier = lastIdentifiers[i];
- var index = getIndexByIdentifier(identifier);
- stylesInDOM[index].references--;
- }
- var newLastIdentifiers = modulesToDom(newList, options);
- for (var _i = 0; _i < lastIdentifiers.length; _i++) {
- var _identifier = lastIdentifiers[_i];
- var _index = getIndexByIdentifier(_identifier);
- if (stylesInDOM[_index].references === 0) {
- stylesInDOM[_index].updater();
- stylesInDOM.splice(_index, 1);
- }
- }
- lastIdentifiers = newLastIdentifiers;
- };
- };
- /***/ }),
- /***/ "./node_modules/style-loader/dist/runtime/insertBySelector.js":
- /*!********************************************************************!*\
- !*** ./node_modules/style-loader/dist/runtime/insertBySelector.js ***!
- \********************************************************************/
- /***/ ((module) => {
- "use strict";
- var memo = {};
- /* istanbul ignore next */
- function getTarget(target) {
- if (typeof memo[target] === "undefined") {
- var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself
- if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
- try {
- // This will throw an exception if access to iframe is blocked
- // due to cross-origin restrictions
- styleTarget = styleTarget.contentDocument.head;
- } catch (e) {
- // istanbul ignore next
- styleTarget = null;
- }
- }
- memo[target] = styleTarget;
- }
- return memo[target];
- }
- /* istanbul ignore next */
- function insertBySelector(insert, style) {
- var target = getTarget(insert);
- if (!target) {
- throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
- }
- target.appendChild(style);
- }
- module.exports = insertBySelector;
- /***/ }),
- /***/ "./node_modules/style-loader/dist/runtime/insertStyleElement.js":
- /*!**********************************************************************!*\
- !*** ./node_modules/style-loader/dist/runtime/insertStyleElement.js ***!
- \**********************************************************************/
- /***/ ((module) => {
- "use strict";
- /* istanbul ignore next */
- function insertStyleElement(options) {
- var element = document.createElement("style");
- options.setAttributes(element, options.attributes);
- options.insert(element, options.options);
- return element;
- }
- module.exports = insertStyleElement;
- /***/ }),
- /***/ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js":
- /*!**********************************************************************************!*\
- !*** ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***!
- \**********************************************************************************/
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- /* istanbul ignore next */
- function setAttributesWithoutAttributes(styleElement) {
- var nonce = true ? __webpack_require__.nc : 0;
- if (nonce) {
- styleElement.setAttribute("nonce", nonce);
- }
- }
- module.exports = setAttributesWithoutAttributes;
- /***/ }),
- /***/ "./node_modules/style-loader/dist/runtime/styleDomAPI.js":
- /*!***************************************************************!*\
- !*** ./node_modules/style-loader/dist/runtime/styleDomAPI.js ***!
- \***************************************************************/
- /***/ ((module) => {
- "use strict";
- /* istanbul ignore next */
- function apply(styleElement, options, obj) {
- var css = "";
- if (obj.supports) {
- css += "@supports (".concat(obj.supports, ") {");
- }
- if (obj.media) {
- css += "@media ".concat(obj.media, " {");
- }
- var needLayer = typeof obj.layer !== "undefined";
- if (needLayer) {
- css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {");
- }
- css += obj.css;
- if (needLayer) {
- css += "}";
- }
- if (obj.media) {
- css += "}";
- }
- if (obj.supports) {
- css += "}";
- }
- var sourceMap = obj.sourceMap;
- if (sourceMap && typeof btoa !== "undefined") {
- css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
- } // For old IE
- /* istanbul ignore if */
- options.styleTagTransform(css, styleElement, options.options);
- }
- function removeStyleElement(styleElement) {
- // istanbul ignore if
- if (styleElement.parentNode === null) {
- return false;
- }
- styleElement.parentNode.removeChild(styleElement);
- }
- /* istanbul ignore next */
- function domAPI(options) {
- var styleElement = options.insertStyleElement(options);
- return {
- update: function update(obj) {
- apply(styleElement, options, obj);
- },
- remove: function remove() {
- removeStyleElement(styleElement);
- }
- };
- }
- module.exports = domAPI;
- /***/ }),
- /***/ "./node_modules/style-loader/dist/runtime/styleTagTransform.js":
- /*!*********************************************************************!*\
- !*** ./node_modules/style-loader/dist/runtime/styleTagTransform.js ***!
- \*********************************************************************/
- /***/ ((module) => {
- "use strict";
- /* istanbul ignore next */
- function styleTagTransform(css, styleElement) {
- if (styleElement.styleSheet) {
- styleElement.styleSheet.cssText = css;
- } else {
- while (styleElement.firstChild) {
- styleElement.removeChild(styleElement.firstChild);
- }
- styleElement.appendChild(document.createTextNode(css));
- }
- }
- module.exports = styleTagTransform;
- /***/ }),
- /***/ "./src/cmps/badge/Badge.tsx":
- /*!**********************************!*\
- !*** ./src/cmps/badge/Badge.tsx ***!
- \**********************************/
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- var __assign = (this && this.__assign) || function () {
- __assign = Object.assign || function(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.Badge = void 0;
- var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
- var Badge = /** @class */ (function (_super) {
- __extends(Badge, _super);
- function Badge() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- Badge.prototype.render = function () {
- return React.createElement("span", __assign({}, this.props, { className: 'badge ' + this.props.className }));
- };
- return Badge;
- }(React.Component));
- exports.Badge = Badge;
- /***/ }),
- /***/ "./src/cmps/button/Button.tsx":
- /*!************************************!*\
- !*** ./src/cmps/button/Button.tsx ***!
- \************************************/
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- var __assign = (this && this.__assign) || function () {
- __assign = Object.assign || function(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.Button = void 0;
- var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
- var Waves_1 = __webpack_require__(/*! ./Waves */ "./src/cmps/button/Waves.js");
- var Button = /** @class */ (function (_super) {
- __extends(Button, _super);
- function Button(props) {
- var _this = _super.call(this, props) || this;
- _this.el = null;
- return _this;
- }
- /**
- * Initialisation of the wave effect after the component did mount
- */
- Button.prototype.componentDidMount = function () {
- if (this.el) {
- new Waves_1.default(this.el, { duration: 950 });
- }
- };
- Button.prototype.render = function () {
- var _this = this;
- var className = "btn waves-effect ";
- // if (this.props.model == "circle") {
- // className += "btn-floating ";
- // }
- // if (this.props.size == "large") {
- // className += "btn-large ";
- // }
- // if (this.props.size == "small") {
- // className += "btn-small ";
- // }
- return (React.createElement("a", __assign({}, this.props, { ref: function (el) {
- _this.el = el;
- }, className: className + this.props.className })));
- };
- return Button;
- }(React.Component));
- exports.Button = Button;
- /***/ }),
- /***/ "./src/cmps/button/Waves.js":
- /*!**********************************!*\
- !*** ./src/cmps/button/Waves.js ***!
- \**********************************/
- /***/ ((__unused_webpack_module, exports) => {
- "use strict";
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- var Waves = /** @class */ (function () {
- function Waves(cmp, options) {
- var _this = this;
- this.el = cmp;
- this.options = options || {};
- //Wrap input inside <i> tag
- this.wrapInput();
- if ('ontouchstart' in window) {
- this.el.addEventListener('touchstart', function (e) {
- _this.triggerEffect.bind(_this)(e);
- }, false);
- }
- this.el.addEventListener('mousedown', function (e) {
- _this.triggerEffect.bind(_this)(e);
- }, false);
- }
- Waves.prototype.showEffect = function (e) {
- // Disable right click
- if (e.button === 2) {
- return false;
- }
- // Create ripple
- var ripple = document.createElement('div');
- ripple.className = 'waves-ripple';
- this.el.appendChild(ripple);
- this.ripple = ripple;
- // Get click coordinate and element witdh
- var pos = this.offset();
- var relativeY = (e.pageY - pos.top);
- var relativeX = (e.pageX - pos.left);
- var scale = 'scale(' + ((this.el.clientWidth / 100) * 10) + ')';
- // Support for touch devices
- if ('touches' in e) {
- relativeY = (e.touches[0].pageY - pos.top);
- relativeX = (e.touches[0].pageX - pos.left);
- }
- // Attach data to element
- this.ripple.setAttribute('data-hold', Date.now());
- this.ripple.setAttribute('data-scale', scale);
- this.ripple.setAttribute('data-x', relativeX);
- this.ripple.setAttribute('data-y', relativeY);
- // Set ripple position
- var rippleStyle = {
- 'top': relativeY + 'px',
- 'left': relativeX + 'px'
- };
- //this.ripple.className = this.ripple.className + ' waves-notransition';
- this.ripple.setAttribute('style', this.convertStyle(rippleStyle));
- this.ripple.className = this.ripple.className.replace('waves-notransition', '');
- // Scale the ripple
- rippleStyle['-webkit-transform'] = scale;
- rippleStyle['-moz-transform'] = scale;
- rippleStyle['-ms-transform'] = scale;
- rippleStyle['-o-transform'] = scale;
- rippleStyle.transform = scale;
- rippleStyle.opacity = '1';
- rippleStyle['-webkit-transition-duration'] = 2 * this.options.duration / 3 + 'ms';
- rippleStyle['-moz-transition-duration'] = 2 * this.options.duration / 3 + 'ms';
- rippleStyle['-o-transition-duration'] = 2 * this.options.duration / 3 + 'ms';
- rippleStyle['transition-duration'] = 2 * this.options.duration / 3 + 'ms';
- rippleStyle['-webkit-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
- rippleStyle['-moz-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
- rippleStyle['-o-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
- rippleStyle['transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
- this.ripple.setAttribute('style', this.convertStyle(rippleStyle));
- };
- Waves.prototype.hideEffect = function (e) {
- //Effect.hide
- var ripple = this.el.lastElementChild;
- if (ripple && ripple.classList.contains("waves-ripple")) {
- var relativeX = ripple.getAttribute('data-x');
- var relativeY = ripple.getAttribute('data-y');
- var scale = ripple.getAttribute('data-scale');
- // Get delay beetween mousedown and mouse leave
- var diff = Date.now() - Number(ripple.getAttribute('data-hold'));
- var delay = this.options.duration / 2 - diff;
- if (delay < 0) {
- delay = 0;
- }
- var me = this;
- // Fade out ripple after delay
- setTimeout(function () {
- var style = {
- 'top': relativeY + 'px',
- 'left': relativeX + 'px',
- 'opacity': '0',
- // Duration
- '-webkit-transition-duration': me.options.duration / 3 + 'ms',
- '-moz-transition-duration': me.options.duration / 3 + 'ms',
- '-o-transition-duration': me.options.duration / 3 + 'ms',
- 'transition-duration': me.options.duration / 3 + 'ms',
- '-webkit-transform': scale,
- '-moz-transform': scale,
- '-ms-transform': scale,
- '-o-transform': scale,
- 'transform': scale,
- };
- ripple.setAttribute('style', me.convertStyle(style));
- setTimeout(function () {
- try {
- me.el.removeChild(ripple);
- }
- catch (e) {
- return false;
- }
- }, me.options.duration);
- }, delay);
- }
- };
- Waves.prototype.wrapInput = function () {
- var el = this.el;
- if (el.tagName.toLowerCase() === 'input') {
- var parent = el.parentNode;
- // If input already have parent just pass through
- if (parent.tagName.toLowerCase() === 'i' && parent.className.indexOf('waves-effect') !== -1) {
- return;
- }
- // Put element class and style to the specified parent
- var wrapper = document.createElement('i');
- wrapper.className = el.className + ' waves-input-wrapper';
- var elementStyle = el.getAttribute('style');
- if (!elementStyle) {
- elementStyle = '';
- }
- wrapper.setAttribute('style', elementStyle);
- el.className = 'waves-button-input';
- el.removeAttribute('style');
- // Put element as child
- parent.replaceChild(wrapper, el);
- wrapper.appendChild(el);
- }
- };
- Waves.prototype.triggerEffect = function (e) {
- var _this = this;
- this.showEffect(e);
- if ('ontouchstart' in window) {
- this.el.addEventListener('touchend', function (e) {
- _this.hideEffect.bind(_this)(e);
- }, false);
- this.el.addEventListener('touchcancel', function (e) {
- _this.hideEffect.bind(_this)(e);
- }, false);
- }
- this.el.addEventListener('mouseup', function (e) {
- _this.hideEffect.bind(_this)(e);
- }, false);
- this.el.addEventListener('mouseleave', function (e) {
- _this.hideEffect.bind(_this)(e);
- }, false);
- this.el.addEventListener('dragend', function (e) {
- _this.hideEffect.bind(_this)(e);
- }, false);
- };
- Waves.prototype.isWindow = function (obj) {
- return obj !== null && obj === obj.window;
- };
- Waves.prototype.getWindow = function (elem) {
- return this.isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView;
- };
- Waves.prototype.offset = function () {
- var docElem, win, box = { top: 0, left: 0 }, doc = this.el && this.el.ownerDocument;
- docElem = doc.documentElement;
- if (typeof this.el.getBoundingClientRect !== typeof undefined) {
- box = this.el.getBoundingClientRect();
- }
- win = this.getWindow(doc);
- return {
- top: box.top + win.pageYOffset - docElem.clientTop,
- left: box.left + win.pageXOffset - docElem.clientLeft
- };
- };
- Waves.prototype.convertStyle = function (obj) {
- var style = '';
- for (var a in obj) {
- if (obj.hasOwnProperty(a)) {
- style += (a + ':' + obj[a] + ';');
- }
- }
- return style;
- };
- return Waves;
- }());
- exports["default"] = Waves;
- /***/ }),
- /***/ "./src/cmps/card/Card.tsx":
- /*!********************************!*\
- !*** ./src/cmps/card/Card.tsx ***!
- \********************************/
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- var __assign = (this && this.__assign) || function () {
- __assign = Object.assign || function(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.CardAction = exports.CardTitle = exports.CardContent = exports.Card = void 0;
- var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
- var Card = /** @class */ (function (_super) {
- __extends(Card, _super);
- function Card() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- Card.prototype.render = function () {
- return React.createElement("div", __assign({}, this.props, { className: "card " + this.props.className }));
- };
- return Card;
- }(React.Component));
- exports.Card = Card;
- var CardContent = /** @class */ (function (_super) {
- __extends(CardContent, _super);
- function CardContent() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- CardContent.prototype.render = function () {
- return (React.createElement("div", __assign({}, this.props, { className: "card-content " + this.props.className })));
- };
- return CardContent;
- }(React.Component));
- exports.CardContent = CardContent;
- var CardTitle = /** @class */ (function (_super) {
- __extends(CardTitle, _super);
- function CardTitle() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- CardTitle.prototype.render = function () {
- return (React.createElement("span", __assign({}, this.props, { className: "card-title " + this.props.className })));
- };
- return CardTitle;
- }(React.Component));
- exports.CardTitle = CardTitle;
- var CardAction = /** @class */ (function (_super) {
- __extends(CardAction, _super);
- function CardAction() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- CardAction.prototype.render = function () {
- return (React.createElement("div", __assign({}, this.props, { className: "card-action " + this.props.className })));
- };
- return CardAction;
- }(React.Component));
- exports.CardAction = CardAction;
- /***/ }),
- /***/ "./src/cmps/chip/Chip.tsx":
- /*!********************************!*\
- !*** ./src/cmps/chip/Chip.tsx ***!
- \********************************/
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- var __assign = (this && this.__assign) || function () {
- __assign = Object.assign || function(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.Chip = void 0;
- var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
- var Chip = /** @class */ (function (_super) {
- __extends(Chip, _super);
- function Chip() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- Chip.prototype.render = function () { return React.createElement("div", __assign({}, this.props, { className: 'chip ' + this.props.className })); };
- return Chip;
- }(React.Component));
- exports.Chip = Chip;
- exports["default"] = Chip;
- /***/ }),
- /***/ "./src/cmps/collapsible/Collapsible.tsx":
- /*!**********************************************!*\
- !*** ./src/cmps/collapsible/Collapsible.tsx ***!
- \**********************************************/
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- var __assign = (this && this.__assign) || function () {
- __assign = Object.assign || function(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.CollapsTrigger = exports.CollapsBody = exports.Collapsible = void 0;
- var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
- var Icon_1 = __webpack_require__(/*! ../icons/Icon */ "./src/cmps/icons/Icon.tsx");
- var Collapsible = /** @class */ (function (_super) {
- __extends(Collapsible, _super);
- function Collapsible() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- Collapsible.prototype.render = function () {
- return (React.createElement("ul", __assign({}, this.props, { className: "collapsible " + this.props.className })));
- };
- return Collapsible;
- }(React.Component));
- exports.Collapsible = Collapsible;
- var CollapsBody = /** @class */ (function (_super) {
- __extends(CollapsBody, _super);
- function CollapsBody() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.el = null;
- return _this;
- }
- CollapsBody.prototype.render = function () {
- var _this = this;
- return (React.createElement("div", __assign({}, this.props, { ref: function (ref) {
- _this.el = ref;
- }, className: "collapsible-body " + this.props.className })));
- };
- return CollapsBody;
- }(React.Component));
- exports.CollapsBody = CollapsBody;
- var CollapsTrigger = /** @class */ (function (_super) {
- __extends(CollapsTrigger, _super);
- function CollapsTrigger() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.state = {
- isOpen: false
- };
- _this.el = null;
- return _this;
- }
- CollapsTrigger.prototype.componentDidMount = function () {
- // new Waves(this.el, { duration: 1050 });
- };
- CollapsTrigger.prototype.showHideBody = function (e) {
- if (this.isOpen()) {
- this.collapse(e);
- }
- else {
- this.expand(e);
- }
- };
- CollapsTrigger.prototype.collapse = function (e) {
- e.stopPropagation();
- var collapsible = this.findCollapsible.bind(this)();
- if (collapsible) {
- var bodyEl = collapsible.querySelector(".collapsible-body");
- if (bodyEl) {
- bodyEl.style.display = 'none';
- this.setState({
- isOpen: false
- });
- }
- }
- };
- CollapsTrigger.prototype.findCollapsible = function () {
- var parentEl = this.el && this.el.parentElement;
- if (parentEl && !parentEl.classList.contains("collapsible")) {
- parentEl = parentEl && parentEl.parentElement;
- }
- return parentEl;
- };
- CollapsTrigger.prototype.expand = function (e) {
- e.stopPropagation();
- var collapsible = this.findCollapsible.bind(this)();
- if (collapsible) {
- var bodyEl = collapsible.querySelector(".collapsible-body");
- if (bodyEl) {
- bodyEl.style.display = 'block';
- this.setState({
- isOpen: true
- });
- }
- }
- };
- CollapsTrigger.prototype.isOpen = function () {
- return this.state.isOpen;
- };
- CollapsTrigger.prototype.render = function () {
- var _this = this;
- var icon = (this.state.isOpen == true) ? React.createElement(Icon_1.Icon, { style: { float: "right" } }, "chevron_down") :
- React.createElement(Icon_1.Icon, { style: { float: "right" } }, "chevron_right");
- return (React.createElement("div", __assign({}, this.props, { ref: function (ref) {
- _this.el = ref;
- }, className: "collapsible-header " + this.props.className, onClick: function (e) { return _this.showHideBody.bind(_this)(e); } }),
- icon,
- this.props.children));
- };
- return CollapsTrigger;
- }(React.Component));
- exports.CollapsTrigger = CollapsTrigger;
- /***/ }),
- /***/ "./src/cmps/collections/Collection.tsx":
- /*!*********************************************!*\
- !*** ./src/cmps/collections/Collection.tsx ***!
- \*********************************************/
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- var __assign = (this && this.__assign) || function () {
- __assign = Object.assign || function(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.CollectionItem = exports.Collection = void 0;
- var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
- var Collection = /** @class */ (function (_super) {
- __extends(Collection, _super);
- function Collection() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- Collection.prototype.render = function () {
- var _this = this;
- var className = this.props.className;
- return React.createElement("ul", __assign({}, this.props, { ref: function (r) { return _this.el = r; }, className: "collection " + (className || "") }));
- };
- return Collection;
- }(React.Component));
- exports.Collection = Collection;
- var CollectionItem = /** @class */ (function (_super) {
- __extends(CollectionItem, _super);
- function CollectionItem() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- CollectionItem.prototype.render = function () {
- var _this = this;
- var className = this.props.className;
- return React.createElement("li", __assign({}, this.props, { ref: function (r) { return _this.el = r; }, className: "collection-item " + (className || "") }));
- };
- return CollectionItem;
- }(React.Component));
- exports.CollectionItem = CollectionItem;
- /***/ }),
- /***/ "./src/cmps/forms/Field.tsx":
- /*!**********************************!*\
- !*** ./src/cmps/forms/Field.tsx ***!
- \**********************************/
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- var __assign = (this && this.__assign) || function () {
- __assign = Object.assign || function(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.Field = void 0;
- var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
- // @ts-ignore
- var V = __webpack_require__(/*! ./rex */ "./src/cmps/forms/rex.tsx");
- var Field = /** @class */ (function (_super) {
- __extends(Field, _super);
- function Field(props) {
- var _this = _super.call(this, props) || this;
- _this.state = {
- labelClassName: '',
- focusCount: 0,
- errmsg: ""
- };
- _this.id = _this.uuidv4();
- return _this;
- }
- Field.prototype.getDefaults = function () {
- return {
- placeholder: '',
- id: Date.now(),
- className: 'validate',
- label: 'Text',
- type: 'text',
- icon: 'account_circle'
- };
- };
- Field.prototype.getValue = function () {
- return this.el && this.el.value;
- };
- Field.prototype.setValue = function (val) {
- if (this.el) {
- this.el.value = val;
- if (val !== "") {
- this.label && this.label.classList.add('active');
- }
- }
- };
- Field.prototype.isValid = function () {
- return this.validate(true);
- };
- Field.prototype.onBlur = function (e) {
- e.stopPropagation();
- e.preventDefault();
- if (this.label && ((this.props.placeholder !== '') || (this.el && this.el.value !== ""))) {
- if (!this.label.classList.contains("active")) {
- this.label.classList.add('active');
- }
- }
- else {
- this.label && this.label.classList.remove('active');
- }
- if (this.props.onBlur && typeof this.props.onBlur === "function") {
- this.props.onBlur(e);
- }
- this.validate(true);
- this.setState({ focusCount: this.state.focusCount + 1 });
- };
- Field.prototype.onFocus = function (e) {
- if (this.label && !this.label.classList.contains("active")) {
- this.label.classList.add('active');
- }
- if (this.props.onFocus && typeof this.props.onFocus === "function") {
- this.props.onFocus(e);
- }
- };
- Field.prototype.validate = function (blure) {
- if (blure === void 0) { blure = false; }
- if (blure) {
- this.setState({ focusCount: this.state.focusCount + 1 });
- }
- if (this.state.focusCount > 0 || blure) {
- var _a = this.props, min = _a.min, max = _a.max, required = _a.required, vtype = _a.vtype, vtypeMsg = _a.vtypeMsg;
- if (this.el && this.el.value && this.el.value !== '') {
- var length_1 = this.el.value.length;
- if (min && max && (length_1 < min || length_1 > max)) {
- this.setState({ errmsg: min != max ? "doit avoir une longeur comprise entre ".concat(min, " et ").concat(max, ".") : "doit avoir une longeur de ".concat(min, " caract\u00E8res") });
- this.el.classList.remove('valid');
- this.el.classList.add('invalid');
- this.makeInValid();
- return false;
- }
- else if (!min && max && length_1 > max) {
- this.setState({ errmsg: "doit avoir une longeur maximal de ".concat(max, ".") });
- this.el.classList.remove('valid');
- this.el.classList.add('invalid');
- this.makeInValid();
- return false;
- }
- else if (min && !max && length_1 < min) {
- this.setState({ errmsg: "doit avoir une longeur minimal de ".concat(min, ".") });
- this.el.classList.remove('valid');
- this.el.classList.add('invalid');
- this.makeInValid();
- return false;
- }
- else if (vtype && !V[vtype].test(this.el.value)) {
- this.setState({ errmsg: vtypeMsg || "Doit \u00EAtre un ".concat(vtype, " valide.") });
- this.el.classList.remove('valid');
- this.el.classList.add('invalid');
- this.makeInValid();
- return false;
- }
- else {
- this.setState({ errmsg: "" });
- this.el.classList.remove('invalid');
- this.el.classList.add('valid');
- return true;
- }
- }
- else {
- if (required) {
- this.setState({ errmsg: "Ne peu pas etre vide." });
- this.makeInValid();
- return false;
- }
- else {
- this.setState({ errmsg: "" });
- this.makeValid();
- //this.el.classList.add('valid');
- return true;
- }
- }
- }
- return false;
- };
- Field.prototype.makeInValid = function () {
- if (this.el) {
- this.el.classList.remove('valid');
- this.el.classList.add('invalid');
- }
- };
- Field.prototype.makeValid = function () {
- if (this.el) {
- this.el.classList.add('valid');
- this.el.classList.remove('invalid');
- }
- };
- Field.prototype.componentDidMount = function () {
- if (this.label && ((this.props.placeholder !== '') || (this.el && this.el.value !== ""))) {
- this.label.classList.add('active');
- this.setState({
- labelClassName: 'active'
- });
- }
- };
- Field.prototype.onKeyUp = function (e) {
- if (e && "Enter" === e.key && this.props.onEnterKey) {
- e.preventDefault();
- e.stopPropagation();
- this.props.onEnterKey(e, this);
- }
- this.validate();
- };
- Field.prototype.uuidv4 = function () {
- // @ts-ignore
- return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, function (c) {
- return (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16);
- });
- };
- Field.prototype.getErrorView = function () {
- if (this.state.errmsg != null && this.state.errmsg !== "") {
- return React.createElement("div", { className: "helper-text" }, this.state.errmsg);
- }
- };
- Field.prototype.render = function () {
- var _this = this;
- var props = __assign({}, this.props);
- // @ts-ignore
- delete props.vtypeMsg;
- // @ts-ignore
- delete props.onEnterKey;
- return React.createElement("div", { className: "input-field" },
- React.createElement("label", { ref: function (ref) { return (_this.label = ref); }, htmlFor: this.id, className: this.state.labelClassName }, this.props.label + (this.props.required === true ? ' *' : '')),
- React.createElement("input", __assign({}, props, { ref: function (ref) {
- _this.el = ref;
- }, value: this.props.value || '', onChange: this.props.onChange || (function () {
- }), onFocus: function (e) { return _this.onFocus.bind(_this)(e); }, type: this.props.type || "text", onBlur: function (e) { return _this.onBlur.bind(_this)(e); }, onKeyUp: function (e) { return _this.onKeyUp.bind(_this)(e); }, id: this.id, className: "validate " + this.props.className })),
- this.getErrorView());
- };
- return Field;
- }(React.Component));
- exports.Field = Field;
- /***/ }),
- /***/ "./src/cmps/forms/Textarea.tsx":
- /*!*************************************!*\
- !*** ./src/cmps/forms/Textarea.tsx ***!
- \*************************************/
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- var __assign = (this && this.__assign) || function () {
- __assign = Object.assign || function(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- var __rest = (this && this.__rest) || function (s, e) {
- var t = {};
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
- t[p] = s[p];
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
- t[p[i]] = s[p[i]];
- }
- return t;
- };
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.TextareaAutosize = void 0;
- var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
- var PropTypes = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js");
- var autosize = __webpack_require__(/*! autosize */ "./node_modules/autosize/dist/autosize.js");
- var line_height_1 = __webpack_require__(/*! ./line-height */ "./src/cmps/forms/line-height.tsx");
- var getLineHeight = line_height_1.default;
- var RESIZED = "autosize:resized";
- /**
- * A light replacement for built-in textarea component
- * which automaticaly adjusts its height to match the content
- */
- var TextareaAutosizeClass = /** @class */ (function (_super) {
- __extends(TextareaAutosizeClass, _super);
- function TextareaAutosizeClass() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.state = {
- lineHeight: null
- };
- _this.textarea = null;
- _this.onResize = function (e) {
- if (_this.props.onResize) {
- _this.props.onResize(e);
- }
- };
- _this.updateLineHeight = function () {
- if (_this.textarea) {
- _this.setState({
- lineHeight: getLineHeight(_this.textarea)
- });
- }
- };
- _this.onChange = function (e) {
- var onChange = _this.props.onChange;
- _this.currentValue = e.currentTarget.value;
- onChange && onChange(e);
- };
- return _this;
- }
- TextareaAutosizeClass.prototype.componentDidMount = function () {
- var _this = this;
- var _a = this.props, maxRows = _a.maxRows, async = _a.async;
- if (typeof maxRows === "number") {
- this.updateLineHeight();
- }
- if (typeof maxRows === "number" || async) {
- /*
- the defer is needed to:
- - force "autosize" to activate the scrollbar when this.props.maxRows is passed
- - support StyledComponents (see #71)
- */
- setTimeout(
- // @ts-ignore
- function () { return _this.textarea && autosize(_this.textarea); });
- }
- else {
- // @ts-ignore
- this.textarea && autosize(this.textarea);
- }
- if (this.textarea) {
- this.textarea.addEventListener(RESIZED, this.onResize);
- }
- };
- TextareaAutosizeClass.prototype.componentWillUnmount = function () {
- if (this.textarea) {
- this.textarea.removeEventListener(RESIZED, this.onResize);
- autosize.destroy(this.textarea);
- }
- };
- TextareaAutosizeClass.prototype.render = function () {
- var _this = this;
- var _a = this, _b = _a.props, onResize = _b.onResize, maxRows = _b.maxRows, onChange = _b.onChange, style = _b.style, innerRef = _b.innerRef, children = _b.children, props = __rest(_b, ["onResize", "maxRows", "onChange", "style", "innerRef", "children"]), lineHeight = _a.state.lineHeight;
- var maxHeight = maxRows && lineHeight ? lineHeight * maxRows : null;
- return (React.createElement("textarea", __assign({}, props, { onChange: this.onChange, className: "textarea " + (this.props.className || ""), style: maxHeight ? __assign(__assign({}, style), { maxHeight: maxHeight }) : style, ref: function (element) {
- _this.textarea = element;
- if (typeof _this.props.innerRef === 'function') {
- _this.props.innerRef(element);
- }
- else if (_this.props.innerRef) {
- _this.props.innerRef.current = element;
- }
- } }), children));
- };
- TextareaAutosizeClass.prototype.componentDidUpdate = function () {
- this.textarea && autosize.update(this.textarea);
- };
- TextareaAutosizeClass.defaultProps = {
- rows: 1,
- async: false
- };
- TextareaAutosizeClass.propTypes = {
- rows: PropTypes.number,
- maxRows: PropTypes.number,
- onResize: PropTypes.func,
- innerRef: PropTypes.any,
- async: PropTypes.bool
- };
- return TextareaAutosizeClass;
- }(React.Component));
- exports.TextareaAutosize = React.forwardRef(function (props, ref) {
- return React.createElement(TextareaAutosizeClass, __assign({}, props, { innerRef: ref }));
- });
- /***/ }),
- /***/ "./src/cmps/forms/line-height.tsx":
- /*!****************************************!*\
- !*** ./src/cmps/forms/line-height.tsx ***!
- \****************************************/
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
- "use strict";
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- // Load in dependencies
- var computedStyle = __webpack_require__(/*! computed-style */ "./node_modules/computed-style/dist/computedStyle.commonjs.js");
- /**
- * Calculate the `line-height` of a given node
- * @param {HTMLElement} node Element to calculate line height of. Must be in the DOM.
- * @returns {Number} `line-height` of the element in pixels
- */
- function lineHeight(node) {
- // Grab the line-height via style
- var lnHeightStr = computedStyle(node, 'line-height');
- var lnHeight = parseFloat(lnHeightStr);
- // If the lineHeight did not contain a unit (i.e. it was numeric), convert it to ems (e.g. '2.3' === '2.3em')
- if (lnHeightStr === lnHeight + '') {
- // Save the old lineHeight style and update the em unit to the element
- var _lnHeightStyle = node.style.lineHeight;
- node.style.lineHeight = lnHeightStr + 'em';
- // Calculate the em based height
- lnHeightStr = computedStyle(node, 'line-height');
- lnHeight = parseFloat(lnHeightStr);
- // Revert the lineHeight style
- if (_lnHeightStyle) {
- node.style.lineHeight = _lnHeightStyle;
- }
- else {
- //delete node.style.lineHeight;
- }
- }
- // If the lineHeight is in `pt`, convert it to pixels (4px for 3pt)
- // DEV: `em` units are converted to `pt` in IE6
- // Conversion ratio from https://developer.mozilla.org/en-US/docs/Web/CSS/length
- if (lnHeightStr.indexOf('pt') !== -1) {
- lnHeight *= 4;
- lnHeight /= 3;
- // Otherwise, if the lineHeight is in `mm`, convert it to pixels (96px for 25.4mm)
- }
- else if (lnHeightStr.indexOf('mm') !== -1) {
- lnHeight *= 96;
- lnHeight /= 25.4;
- // Otherwise, if the lineHeight is in `cm`, convert it to pixels (96px for 2.54cm)
- }
- else if (lnHeightStr.indexOf('cm') !== -1) {
- lnHeight *= 96;
- lnHeight /= 2.54;
- // Otherwise, if the lineHeight is in `in`, convert it to pixels (96px for 1in)
- }
- else if (lnHeightStr.indexOf('in') !== -1) {
- lnHeight *= 96;
- // Otherwise, if the lineHeight is in `pc`, convert it to pixels (12pt for 1pc)
- }
- else if (lnHeightStr.indexOf('pc') !== -1) {
- lnHeight *= 16;
- }
- // Continue our computation
- lnHeight = Math.round(lnHeight);
- // If the line-height is "normal", calculate by font-size
- if (lnHeightStr === 'normal') {
- // Create a temporary node
- var nodeName = node.nodeName;
- var _node = document.createElement(nodeName);
- _node.innerHTML = ' ';
- // If we have a text area, reset it to only 1 row
- // https://github.com/twolfson/line-height/issues/4
- if (nodeName.toUpperCase() === 'TEXTAREA') {
- _node.setAttribute('rows', '1');
- }
- // Set the font-size of the element
- var fontSizeStr = computedStyle(node, 'font-size');
- _node.style.fontSize = fontSizeStr;
- // Remove default padding/border which can affect offset height
- // https://github.com/twolfson/line-height/issues/4
- // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight
- _node.style.padding = '0px';
- _node.style.border = '0px';
- // Append it to the body
- var body = document.body;
- body.appendChild(_node);
- // Assume the line height of the element is the height
- var height = _node.offsetHeight;
- lnHeight = height;
- // Remove our child from the DOM
- body.removeChild(_node);
- }
- // Return the calculated height
- return lnHeight;
- }
- exports["default"] = lineHeight;
- /***/ }),
- /***/ "./src/cmps/forms/rex.tsx":
- /*!********************************!*\
- !*** ./src/cmps/forms/rex.tsx ***!
- \********************************/
- /***/ ((module) => {
- "use strict";
- module.exports = {
- "num": /^[0-9]+$/,
- "numeric": /^[0-9]+$/,
- "alpha": /^[a-zA-Z_]+$/,
- "alphabetic": /^[a-zA-Z_]+$/,
- "alphanum": /^[a-zA-Z0-9_]+$/,
- "alphanumeric": /^[a-zA-Z0-9_]+$/,
- "email": /^(")?(?:[^\."\s])(?:(?:[\.])?(?:[\w\-!#$%&'*+/=?^_`{|}~]))*\1@(\w[\-\w]*\.){1,5}([A-Za-z]){2,6}$/,
- "url": /(((^https?)|(^ftp)):\/\/((([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*)|(localhost|LOCALHOST))\/?)/i,
- "ipAddress": /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,
- "phone": /^(?:(?:\+|00)33|0)\s*[1-9](?:\d{2}){4}$/,
- "codePost": /^(((?!(96|97|98|99|00)))[0-9]{5})$|(2A|2B|2a|2b)[0-9]{3}$|(971|972|973|974|975|976)[0-9]{2}$/,
- "codePostal": /^(((?!(96|97|98|99|00)))[0-9]{5})$|(2A|2B|2a|2b)[0-9]{3}$|(971|972|973|974|975|976)[0-9]{2}$/,
- "time": /^([1-9]|1[0-9]):([0-5][0-9])(\s[a|p]m)$/,
- "price": /^\d+(\.\d{2})?$/,
- "prix": /^\d+(\.\d{2})?$/,
- "date": /^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/,
- "tva": /^(5\.5|10|20)$/,
- "password": /(?=^.{8,}$)(?=.*\d)(?=.*[!@#$%^&*]+)(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/,
- "motDePasse": /(?=^.{8,}$)(?=.*\d)(?=.*[!@#$%^&*]+)(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/,
- "matricule": /(^\d{1,4}[A-Za-z]{1,4}\d{1,2}$)|(^[A-Za-z]{1,2}\s*\d{1,3}\s*[A-Za-z]{1,2})$/,
- "tvaIntercom": /^(FR)([0-9]{11}$)/,
- "iban": /^FR\d{12}[A-Z0-9]{11}\d{2}$/,
- "timeMask": /[\d\s:amp]/i,
- 'numMask': /[0-9]/i,
- 'alphaMask': /[a-z_]/i,
- 'alphanumMask': /[a-z0-9_]/i,
- 'emailMask': /[\w.\-@'"!#$%&'*+/=?^_`{|}~]/i,
- 'urlMask': /[a-z0-9_]/i,
- 'ipAddressMask': /[\d\.]/i,
- "phoneMask": /[0-9\+]/i,
- "codePostMask": /[0-9ABab]/i,
- 'passwordMask': /[\w.\-@'"!#$%&'*+/=?^_`{|}~]/i,
- };
- /***/ }),
- /***/ "./src/cmps/icons/Icon.tsx":
- /*!*********************************!*\
- !*** ./src/cmps/icons/Icon.tsx ***!
- \*********************************/
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- var __assign = (this && this.__assign) || function () {
- __assign = Object.assign || function(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.Icon = void 0;
- var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
- var Icon = /** @class */ (function (_super) {
- __extends(Icon, _super);
- function Icon() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- Icon.prototype.render = function () {
- return React.createElement("span", __assign({}, this.props, { className: "s-icon " + this.props.className }));
- };
- return Icon;
- }(React.Component));
- exports.Icon = Icon;
- /***/ }),
- /***/ "./src/cmps/layouts/Layouts.tsx":
- /*!**************************************!*\
- !*** ./src/cmps/layouts/Layouts.tsx ***!
- \**************************************/
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- var __assign = (this && this.__assign) || function () {
- __assign = Object.assign || function(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.Overlay = exports.Divider = exports.Parallax = exports.Row = exports.Col = void 0;
- var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
- var Col = /** @class */ (function (_super) {
- __extends(Col, _super);
- function Col() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.el = null;
- return _this;
- }
- Col.prototype.render = function () {
- var _this = this;
- return (React.createElement("div", __assign({}, this.props, { ref: function (ref) { return _this.el = ref; }, className: "col " + this.props.className })));
- };
- return Col;
- }(React.Component));
- exports.Col = Col;
- var Row = /** @class */ (function (_super) {
- __extends(Row, _super);
- function Row() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.el = null;
- return _this;
- }
- Row.prototype.render = function () {
- var _this = this;
- return (React.createElement("div", __assign({}, this.props, { ref: function (ref) { return _this.el = ref; }, className: "row " + this.props.className })));
- };
- return Row;
- }(React.Component));
- exports.Row = Row;
- var Parallax = /** @class */ (function (_super) {
- __extends(Parallax, _super);
- function Parallax() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- Parallax.prototype.render = function () {
- var st = __assign({}, this.props.style);
- st.backgroundImage = "url(" + this.props.src + ")";
- return React.createElement("div", { className: "parallax", style: st }, this.props.children);
- };
- return Parallax;
- }(React.Component));
- exports.Parallax = Parallax;
- var Divider = /** @class */ (function (_super) {
- __extends(Divider, _super);
- function Divider() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- Divider.prototype.render = function () {
- return (React.createElement("div", { className: "divider" }));
- };
- return Divider;
- }(React.Component));
- exports.Divider = Divider;
- var Overlay = /** @class */ (function (_super) {
- __extends(Overlay, _super);
- function Overlay() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.state = {
- visible: false
- };
- _this.el = null;
- return _this;
- }
- Overlay.prototype.show = function () {
- this.setState({
- visible: true
- });
- };
- Overlay.prototype.open = function () {
- return this.show();
- };
- Overlay.prototype.isVisible = function () {
- return this.state.visible;
- };
- Overlay.prototype.hide = function () {
- this.setState({
- visible: false
- });
- };
- Overlay.prototype.close = function () {
- return this.hide();
- };
- Overlay.prototype.render = function () {
- var _this = this;
- if (this.state.visible) {
- return (React.createElement("div", __assign({ ref: function (ref) {
- _this.el = ref;
- } }, this.props, { className: "modal-overlay " + this.props.className })));
- }
- return null;
- };
- return Overlay;
- }(React.Component));
- exports.Overlay = Overlay;
- /***/ }),
- /***/ "./src/cmps/modal/Modal.tsx":
- /*!**********************************!*\
- !*** ./src/cmps/modal/Modal.tsx ***!
- \**********************************/
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- var __assign = (this && this.__assign) || function () {
- __assign = Object.assign || function(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.ModalHeader = exports.ModalFooter = exports.ModalContent = exports.Modal = void 0;
- var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
- var Modal = /** @class */ (function (_super) {
- __extends(Modal, _super);
- function Modal() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.state = {
- isOpen: false
- };
- return _this;
- }
- Modal.prototype.open = function () {
- this.setState({
- isOpen: true
- });
- };
- Modal.prototype.close = function () {
- this.setState({
- isOpen: false
- });
- };
- Modal.prototype.show = function () {
- return this.open();
- };
- Modal.prototype.hide = function () {
- return this.close();
- };
- Modal.prototype.render = function () {
- if (this.state.isOpen) {
- return (React.createElement("div", { className: "modal-overlay" },
- React.createElement("div", __assign({}, this.props, { className: "modal " + (this.props.className || "") }))));
- }
- return null;
- };
- return Modal;
- }(React.Component));
- exports.Modal = Modal;
- var ModalContent = /** @class */ (function (_super) {
- __extends(ModalContent, _super);
- function ModalContent() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- ModalContent.prototype.render = function () {
- return (React.createElement("div", __assign({}, this.props, { className: "modal-content " + (this.props.className || "") })));
- };
- return ModalContent;
- }(React.Component));
- exports.ModalContent = ModalContent;
- var ModalFooter = /** @class */ (function (_super) {
- __extends(ModalFooter, _super);
- function ModalFooter() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- ModalFooter.prototype.render = function () {
- return (React.createElement("div", __assign({}, this.props, { className: "modal-footer " + (this.props.className || "") })));
- };
- return ModalFooter;
- }(React.Component));
- exports.ModalFooter = ModalFooter;
- var ModalHeader = /** @class */ (function (_super) {
- __extends(ModalHeader, _super);
- function ModalHeader() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- ModalHeader.prototype.render = function () {
- return (React.createElement("div", __assign({}, this.props, { className: "modal-header " + (this.props.className || "") })));
- };
- return ModalHeader;
- }(React.Component));
- exports.ModalHeader = ModalHeader;
- /***/ }),
- /***/ "./src/cmps/navigation/NavBar.tsx":
- /*!****************************************!*\
- !*** ./src/cmps/navigation/NavBar.tsx ***!
- \****************************************/
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- var __assign = (this && this.__assign) || function () {
- __assign = Object.assign || function(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.NavBarBrand = exports.NavBarItem = exports.NavBarGroup = exports.NavBar = void 0;
- var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
- var NavBar = /** @class */ (function (_super) {
- __extends(NavBar, _super);
- function NavBar() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- NavBar.prototype.render = function () {
- return React.createElement("nav", null,
- React.createElement("div", __assign({}, this.props, { className: "nav-wrapper" })));
- };
- return NavBar;
- }(React.Component));
- exports.NavBar = NavBar;
- var NavBarGroup = /** @class */ (function (_super) {
- __extends(NavBarGroup, _super);
- function NavBarGroup() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- NavBarGroup.prototype.render = function () {
- return React.createElement("ul", __assign({}, this.props, { className: "right hide-on-med-and-down ·" + (this.props.className || "") }));
- };
- return NavBarGroup;
- }(React.Component));
- exports.NavBarGroup = NavBarGroup;
- var NavBarItem = /** @class */ (function (_super) {
- __extends(NavBarItem, _super);
- function NavBarItem() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- NavBarItem.prototype.render = function () {
- return React.createElement("li", __assign({}, this.props));
- };
- return NavBarItem;
- }(React.Component));
- exports.NavBarItem = NavBarItem;
- var NavBarBrand = /** @class */ (function (_super) {
- __extends(NavBarBrand, _super);
- function NavBarBrand() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- NavBarBrand.prototype.render = function () {
- return React.createElement("a", __assign({}, this.props, { className: "brand-logo" }));
- };
- return NavBarBrand;
- }(React.Component));
- exports.NavBarBrand = NavBarBrand;
- /***/ }),
- /***/ "./src/cmps/navigation/Navigation.tsx":
- /*!********************************************!*\
- !*** ./src/cmps/navigation/Navigation.tsx ***!
- \********************************************/
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.Navigation = void 0;
- var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
- var NavBar_1 = __webpack_require__(/*! ./NavBar */ "./src/cmps/navigation/NavBar.tsx");
- var SideNav_1 = __webpack_require__(/*! ./SideNav */ "./src/cmps/navigation/SideNav.tsx");
- var Navigation = /** @class */ (function (_super) {
- __extends(Navigation, _super);
- function Navigation(props) {
- return _super.call(this, props) || this;
- }
- Navigation.prototype.componentDidMount = function () {
- // console.log(this.navbar);
- // console.log(this.sidenav);
- };
- Navigation.prototype.render = function () {
- var _this = this;
- return React.createElement(React.Fragment, null,
- React.createElement(NavBar_1.NavBar, { ref: function (ref) {
- _this.navbar = ref;
- } },
- React.createElement("a", { className: "sidenav-trigger", onClick: function (e) {
- e.stopPropagation();
- _this.sidenav && _this.sidenav.toggle();
- } },
- React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", style: { width: "20px" }, fill: "white", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: "2" },
- React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 6h16M4 12h16M4 18h16" }))),
- React.createElement(NavBar_1.NavBarBrand, null,
- React.createElement("img", { src: this.props.logo || "https://statics.d3v4pp.fr/logo.png", className: "circle", alt: "Brand" })),
- React.createElement(NavBar_1.NavBarGroup, null, this.props.routes && this.props.routes.map(function (route, i) {
- return React.createElement(NavBar_1.NavBarItem, { key: i }, route.element);
- }))),
- React.createElement(SideNav_1.SideNav, { ref: function (ref) {
- _this.sidenav = ref;
- } },
- React.createElement(SideNav_1.SideNavUser, { username: 'ayoub hassani', email: 'ayoub@d3v4pp.fr', src: "https://statics.d3v4pp.fr/logo.png", bg_src: "https://imgs.search.brave.com/yX0vgamsYEbsOU9XlyPGUM8DdmqxXpAKyzBM4s3wolA/rs:fit:1200:1030:1/g:ce/aHR0cHM6Ly93d3cu/YXZpYXNpbS5jb20v/d3AtY29udGVudC91/cGxvYWRzL2F2aWFz/aW0taW1hZ2UtbnVh/Z2VzLmpwZw" }),
- this.props.routes && this.props.routes.map(function (route, i) {
- return React.createElement(SideNav_1.SideNavEl, { onClick: function () { return _this.sidenav && _this.sidenav.hide(); }, key: i }, route.element);
- })));
- };
- return Navigation;
- }(React.Component));
- exports.Navigation = Navigation;
- /***/ }),
- /***/ "./src/cmps/navigation/SideNav.tsx":
- /*!*****************************************!*\
- !*** ./src/cmps/navigation/SideNav.tsx ***!
- \*****************************************/
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- var __assign = (this && this.__assign) || function () {
- __assign = Object.assign || function(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.SideNavEl = exports.SideNavUser = exports.SideNav = void 0;
- var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
- var SideNav = /** @class */ (function (_super) {
- __extends(SideNav, _super);
- function SideNav() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.state = {
- open: false,
- };
- return _this;
- }
- SideNav.prototype.open = function () {
- this.setState({ open: true });
- };
- SideNav.prototype.toggle = function () {
- this.setState({ open: !this.state.open });
- };
- SideNav.prototype.hide = function () {
- this.setState({ open: false });
- };
- SideNav.prototype.render = function () {
- return React.createElement("ul", __assign({}, this.props, { className: "sidenav " + (this.props.className || ""), style: { transform: this.state.open ? "translateX(0)" : "translateX(-105%)" } }));
- };
- return SideNav;
- }(React.Component));
- exports.SideNav = SideNav;
- var SideNavUser = /** @class */ (function (_super) {
- __extends(SideNavUser, _super);
- function SideNavUser() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- SideNavUser.prototype.render = function () {
- return React.createElement("li", __assign({}, this.props),
- React.createElement("div", { className: "user-view" },
- React.createElement("div", { className: "background" },
- React.createElement("img", { src: this.props.bg_src })),
- React.createElement("a", null,
- React.createElement("img", { className: "circle", src: this.props.src })),
- React.createElement("a", null,
- React.createElement("span", { className: "black-text name" }, this.props.username)),
- React.createElement("a", null,
- React.createElement("span", { className: "black-text email" }, this.props.email))));
- };
- return SideNavUser;
- }(React.Component));
- exports.SideNavUser = SideNavUser;
- var SideNavEl = /** @class */ (function (_super) {
- __extends(SideNavEl, _super);
- function SideNavEl() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- SideNavEl.prototype.render = function () {
- return React.createElement("li", __assign({}, this.props));
- };
- return SideNavEl;
- }(React.Component));
- exports.SideNavEl = SideNavEl;
- /***/ }),
- /***/ "./src/cmps/progress/Progress.tsx":
- /*!****************************************!*\
- !*** ./src/cmps/progress/Progress.tsx ***!
- \****************************************/
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- var __assign = (this && this.__assign) || function () {
- __assign = Object.assign || function(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.Preloader = exports.Progress = void 0;
- var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
- var Progress = /** @class */ (function (_super) {
- __extends(Progress, _super);
- function Progress() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- Progress.prototype.render = function () {
- return React.createElement("div", __assign({}, this.props, { className: (this.props.className || "") + " progress" }),
- React.createElement("div", { className: this.props.value ? "determinate" : "indeterminate", style: { width: this.props.value + "%" } }));
- };
- return Progress;
- }(React.Component));
- exports.Progress = Progress;
- var Preloader = /** @class */ (function (_super) {
- __extends(Preloader, _super);
- function Preloader() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- Preloader.prototype.render = function () {
- var s = this.props.size == "big" ? "big" : this.props.size == "small" ? "small" : "";
- var ca = this.props.color ? this.props.color.split(",") : ['blue'];
- if (ca.length === 1) {
- return React.createElement("div", { className: "preloader-wrapper " + s + " active" },
- React.createElement("div", { className: "spinner-layer spinner-" + ca[0] + "-only" },
- React.createElement("div", { className: "circle-clipper right" },
- React.createElement("div", { className: "circle" })),
- React.createElement("div", { className: "gap-patch" },
- React.createElement("div", { className: "circle" })),
- React.createElement("div", { className: "circle-clipper left" },
- React.createElement("div", { className: "circle" }))));
- }
- else {
- return React.createElement("div", { className: "preloader-wrapper " + s + " active" }, ca.map(function (scolor) {
- return React.createElement("div", { className: "spinner-layer spinner-" + scolor },
- React.createElement("div", { className: "circle-clipper left" },
- React.createElement("div", { className: "circle" })),
- React.createElement("div", { className: "gap-patch" },
- React.createElement("div", { className: "circle" })),
- React.createElement("div", { className: "circle-clipper right" },
- React.createElement("div", { className: "circle" })));
- }));
- }
- };
- return Preloader;
- }(React.Component));
- exports.Preloader = Preloader;
- /***/ }),
- /***/ "./src/ux/auth/Login.tsx":
- /*!*******************************!*\
- !*** ./src/ux/auth/Login.tsx ***!
- \*******************************/
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.Login = void 0;
- var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
- var Field_1 = __webpack_require__(/*! ../../cmps/forms/Field */ "./src/cmps/forms/Field.tsx");
- //
- // export function Login ({onLogin, onLoginError, className, checkUrl}: LoginProps) {
- // let emailF: { isValid: () => any; }, passF: { isValid: () => any; };
- // let [emailOk, setEmailOk] = useState(false)
- // let [user, setUser] = useState({
- // password: "",
- // email: ""
- // });
- // let next = () => {
- // if (emailF && emailF.isValid()) {
- // if (checkUrl) {
- // fetch(checkUrl, {
- // method: "POST",
- // headers: {
- // 'Accept': 'application/json',
- // 'Content-Type': 'application/json'
- // },
- // body: JSON.stringify(user)
- // }).then(r => r.json()).then(json => {
- // if (json.success) {
- // setEmailOk(true);
- // } else {
- // onLoginError && onLoginError(json);
- // }
- // }).catch(error => {
- // onLoginError && onLoginError(error);
- // })
- // } else {
- // setEmailOk(true);
- // }
- // }
- // }
- // let login = () => {
- // if (emailF && emailF.isValid() && passF && passF.isValid()) {
- // onLogin && onLogin(user)
- //
- // }
- // }
- // let getPasswordView = () => {
- // if (emailOk) {
- // return <><Field
- // ref={(r: FieldRef | null | any) => {
- // passF = r;
- // }}
- // value={user.password}
- // onChange={(e) => {
- // let u = {...user};
- // // @ts-ignore
- // u.password = e.target.value;
- // setUser(u);
- // }}
- // autoFocus={true}
- // required={true}
- // label={"Password"}
- // type={"password"}
- // vtype={"password"}
- // vtypeMsg={'Need to be a valid Password'}
- // onEnterKey={login}/>
- // </>;
- // } else {
- // return null;
- // }
- // }
- //
- // let getLoginView = () => {
- // if (!emailOk) {
- // return <><Field
- // autoFocus={true}
- // required={true}
- // ref={(r: FieldRef | null | any) => {
- // emailF = r;
- // }}
- // value={user.email}
- // onChange={(e) => {
- // let u = {...user};
- // // @ts-ignore
- // u.email = e.target.value;
- // setUser(u);
- // }}
- // label={"Email"}
- // type={"email"}
- // vtype={"email"}
- // vtypeMsg={'Need to be a valid email'}
- // onEnterKey={next}/>
- // </>;
- // } else {
- // return null;
- // }
- //
- // }
- // return <div
- // ref={el => {
- // el = el;
- // }}
- // className={(className || "") + " login"}
- // >
- // {getLoginView()}
- // {getPasswordView()}
- // </div>
- // }
- var Login = /** @class */ (function (_super) {
- __extends(Login, _super);
- function Login(props) {
- var _this = _super.call(this, props) || this;
- _this.state = {
- emailOk: false,
- email: "",
- password: "",
- passOK: false
- };
- return _this;
- }
- Login.prototype.next = function () {
- var _this = this;
- if (this.emailF && this.emailF.isValid()) {
- if (this.props.checkUrl) {
- fetch(this.props.checkUrl, {
- method: "POST",
- headers: {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json'
- },
- body: JSON.stringify({ email: this.state.email, })
- }).then(function (r) { return r.json(); }).then(function (json) {
- if (json.success) {
- _this.setState({ emailOk: true });
- }
- else {
- _this.props.onLoginError && _this.props.onLoginError(json);
- }
- }).catch(function (error) {
- _this.props.onLoginError && _this.props.onLoginError(error);
- });
- }
- else {
- this.setState({ emailOk: true });
- }
- }
- };
- Login.prototype.login = function () {
- if (this.state.emailOk && this.passwordF && this.passwordF.isValid()) {
- this.props.onLogin && this.props.onLogin({
- email: this.state.email,
- password: this.state.password
- });
- }
- };
- Login.prototype.getLoginView = function () {
- var _this = this;
- if (!this.state.emailOk) {
- return React.createElement(React.Fragment, null,
- React.createElement(Field_1.Field, { autoFocus: true, required: true, ref: function (r) {
- _this.emailF = r;
- }, value: this.state.email, onChange: function (e) {
- // @ts-ignore
- _this.setState({ email: e.target.value });
- }, label: "Email", type: "email", vtype: "email", vtypeMsg: 'Need to be a valid email', onEnterKey: this.next.bind(this) }));
- }
- else {
- return null;
- }
- };
- Login.prototype.getPasswordView = function () {
- var _this = this;
- if (this.state.emailOk) {
- return React.createElement(React.Fragment, null,
- React.createElement(Field_1.Field, { ref: function (r) {
- _this.passwordF = r;
- }, value: this.state.password, onChange: function (e) {
- // @ts-ignore
- _this.setState({ password: e.target.value });
- }, autoFocus: true, required: true, label: "Password", type: "password", vtype: "password", vtypeMsg: 'Need to be a valid Password', onEnterKey: this.login.bind(this) }));
- }
- else {
- return null;
- }
- };
- Login.prototype.render = function () {
- var _this = this;
- return (React.createElement("div", { ref: function (el) {
- _this.el = el;
- }, className: (this.props.className || "") + " login" },
- this.getLoginView(),
- this.getPasswordView()));
- };
- return Login;
- }(React.Component));
- exports.Login = Login;
- /***/ }),
- /***/ "./src/ux/index.ts":
- /*!*************************!*\
- !*** ./src/ux/index.ts ***!
- \*************************/
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
- "use strict";
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.Login = void 0;
- var Login_1 = __webpack_require__(/*! ./auth/Login */ "./src/ux/auth/Login.tsx");
- Object.defineProperty(exports, "Login", ({ enumerable: true, get: function () { return Login_1.Login; } }));
- /***/ }),
- /***/ "./src/sass/icons/assets/SweetIcons-Regular.eot":
- /*!******************************************************!*\
- !*** ./src/sass/icons/assets/SweetIcons-Regular.eot ***!
- \******************************************************/
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- module.exports = __webpack_require__.p + "assets/SweetIcons-Regular.eot";
- /***/ }),
- /***/ "./src/sass/icons/assets/SweetIcons-Regular.ttf":
- /*!******************************************************!*\
- !*** ./src/sass/icons/assets/SweetIcons-Regular.ttf ***!
- \******************************************************/
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- module.exports = __webpack_require__.p + "assets/SweetIcons-Regular.ttf";
- /***/ }),
- /***/ "./src/sass/icons/assets/SweetIcons-Regular.woff":
- /*!*******************************************************!*\
- !*** ./src/sass/icons/assets/SweetIcons-Regular.woff ***!
- \*******************************************************/
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- module.exports = __webpack_require__.p + "assets/SweetIcons-Regular.woff";
- /***/ }),
- /***/ "./src/sass/icons/assets/SweetIcons-Regular.woff2":
- /*!********************************************************!*\
- !*** ./src/sass/icons/assets/SweetIcons-Regular.woff2 ***!
- \********************************************************/
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- module.exports = __webpack_require__.p + "assets/SweetIcons-Regular.woff2";
- /***/ })
- /******/ });
- /************************************************************************/
- /******/ // The module cache
- /******/ var __webpack_module_cache__ = {};
- /******/
- /******/ // The require function
- /******/ function __webpack_require__(moduleId) {
- /******/ // Check if module is in cache
- /******/ var cachedModule = __webpack_module_cache__[moduleId];
- /******/ if (cachedModule !== undefined) {
- /******/ return cachedModule.exports;
- /******/ }
- /******/ // Create a new module (and put it into the cache)
- /******/ var module = __webpack_module_cache__[moduleId] = {
- /******/ id: moduleId,
- /******/ // no module.loaded needed
- /******/ exports: {}
- /******/ };
- /******/
- /******/ // Execute the module function
- /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
- /******/
- /******/ // Return the exports of the module
- /******/ return module.exports;
- /******/ }
- /******/
- /******/ // expose the modules object (__webpack_modules__)
- /******/ __webpack_require__.m = __webpack_modules__;
- /******/
- /************************************************************************/
- /******/ /* webpack/runtime/compat get default export */
- /******/ (() => {
- /******/ // getDefaultExport function for compatibility with non-harmony modules
- /******/ __webpack_require__.n = (module) => {
- /******/ var getter = module && module.__esModule ?
- /******/ () => (module['default']) :
- /******/ () => (module);
- /******/ __webpack_require__.d(getter, { a: getter });
- /******/ return getter;
- /******/ };
- /******/ })();
- /******/
- /******/ /* webpack/runtime/create fake namespace object */
- /******/ (() => {
- /******/ var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);
- /******/ var leafPrototypes;
- /******/ // create a fake namespace object
- /******/ // mode & 1: value is a module id, require it
- /******/ // mode & 2: merge all properties of value into the ns
- /******/ // mode & 4: return value when already ns object
- /******/ // mode & 16: return value when it's Promise-like
- /******/ // mode & 8|1: behave like require
- /******/ __webpack_require__.t = function(value, mode) {
- /******/ if(mode & 1) value = this(value);
- /******/ if(mode & 8) return value;
- /******/ if(typeof value === 'object' && value) {
- /******/ if((mode & 4) && value.__esModule) return value;
- /******/ if((mode & 16) && typeof value.then === 'function') return value;
- /******/ }
- /******/ var ns = Object.create(null);
- /******/ __webpack_require__.r(ns);
- /******/ var def = {};
- /******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];
- /******/ for(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {
- /******/ Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));
- /******/ }
- /******/ def['default'] = () => (value);
- /******/ __webpack_require__.d(ns, def);
- /******/ return ns;
- /******/ };
- /******/ })();
- /******/
- /******/ /* webpack/runtime/define property getters */
- /******/ (() => {
- /******/ // define getter functions for harmony exports
- /******/ __webpack_require__.d = (exports, definition) => {
- /******/ for(var key in definition) {
- /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
- /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
- /******/ }
- /******/ }
- /******/ };
- /******/ })();
- /******/
- /******/ /* webpack/runtime/hasOwnProperty shorthand */
- /******/ (() => {
- /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
- /******/ })();
- /******/
- /******/ /* webpack/runtime/make namespace object */
- /******/ (() => {
- /******/ // define __esModule on exports
- /******/ __webpack_require__.r = (exports) => {
- /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
- /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
- /******/ }
- /******/ Object.defineProperty(exports, '__esModule', { value: true });
- /******/ };
- /******/ })();
- /******/
- /******/ /* webpack/runtime/publicPath */
- /******/ (() => {
- /******/ __webpack_require__.p = "/";
- /******/ })();
- /******/
- /******/ /* webpack/runtime/jsonp chunk loading */
- /******/ (() => {
- /******/ __webpack_require__.b = document.baseURI || self.location.href;
- /******/
- /******/ // object to store loaded and loading chunks
- /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
- /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
- /******/ var installedChunks = {
- /******/ "main": 0
- /******/ };
- /******/
- /******/ // no chunk on demand loading
- /******/
- /******/ // no prefetching
- /******/
- /******/ // no preloaded
- /******/
- /******/ // no HMR
- /******/
- /******/ // no HMR manifest
- /******/
- /******/ // no on chunks loaded
- /******/
- /******/ // no jsonp function
- /******/ })();
- /******/
- /******/ /* webpack/runtime/nonce */
- /******/ (() => {
- /******/ __webpack_require__.nc = undefined;
- /******/ })();
- /******/
- /************************************************************************/
- var __webpack_exports__ = {};
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
- (() => {
- "use strict";
- var exports = __webpack_exports__;
- /*!**********************!*\
- !*** ./src/index.ts ***!
- \**********************/
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.Login = exports.Router = exports.ModalHeader = exports.ModalFooter = exports.ModalContent = exports.Modal = exports.Preloader = exports.Progress = exports.SideNavUser = exports.SideNavEl = exports.SideNav = exports.Navigation = exports.NavBarBrand = exports.NavBarItem = exports.NavBarGroup = exports.NavBar = exports.CardAction = exports.CardTitle = exports.CardContent = exports.Card = exports.CollapsBody = exports.Collapsible = exports.CollapsTrigger = exports.Parallax = exports.Divider = exports.Overlay = exports.Col = exports.Row = exports.Icon = exports.Chip = exports.Badge = exports.Button = exports.CollectionItem = exports.Collection = exports.Field = exports.Textarea = void 0;
- __webpack_require__(/*! ./sass/d3v4pp.scss */ "./src/sass/d3v4pp.scss");
- var Textarea_1 = __webpack_require__(/*! ./cmps/forms/Textarea */ "./src/cmps/forms/Textarea.tsx");
- Object.defineProperty(exports, "Textarea", ({ enumerable: true, get: function () { return Textarea_1.TextareaAutosize; } }));
- var Field_1 = __webpack_require__(/*! ./cmps/forms/Field */ "./src/cmps/forms/Field.tsx");
- Object.defineProperty(exports, "Field", ({ enumerable: true, get: function () { return Field_1.Field; } }));
- var Collection_1 = __webpack_require__(/*! ./cmps/collections/Collection */ "./src/cmps/collections/Collection.tsx");
- Object.defineProperty(exports, "Collection", ({ enumerable: true, get: function () { return Collection_1.Collection; } }));
- Object.defineProperty(exports, "CollectionItem", ({ enumerable: true, get: function () { return Collection_1.CollectionItem; } }));
- var Button_1 = __webpack_require__(/*! ./cmps/button/Button */ "./src/cmps/button/Button.tsx");
- Object.defineProperty(exports, "Button", ({ enumerable: true, get: function () { return Button_1.Button; } }));
- var Badge_1 = __webpack_require__(/*! ./cmps/badge/Badge */ "./src/cmps/badge/Badge.tsx");
- Object.defineProperty(exports, "Badge", ({ enumerable: true, get: function () { return Badge_1.Badge; } }));
- var Chip_1 = __webpack_require__(/*! ./cmps/chip/Chip */ "./src/cmps/chip/Chip.tsx");
- Object.defineProperty(exports, "Chip", ({ enumerable: true, get: function () { return Chip_1.Chip; } }));
- var Icon_1 = __webpack_require__(/*! ./cmps/icons/Icon */ "./src/cmps/icons/Icon.tsx");
- Object.defineProperty(exports, "Icon", ({ enumerable: true, get: function () { return Icon_1.Icon; } }));
- var Layouts_1 = __webpack_require__(/*! ./cmps/layouts/Layouts */ "./src/cmps/layouts/Layouts.tsx");
- Object.defineProperty(exports, "Row", ({ enumerable: true, get: function () { return Layouts_1.Row; } }));
- Object.defineProperty(exports, "Col", ({ enumerable: true, get: function () { return Layouts_1.Col; } }));
- Object.defineProperty(exports, "Overlay", ({ enumerable: true, get: function () { return Layouts_1.Overlay; } }));
- Object.defineProperty(exports, "Divider", ({ enumerable: true, get: function () { return Layouts_1.Divider; } }));
- Object.defineProperty(exports, "Parallax", ({ enumerable: true, get: function () { return Layouts_1.Parallax; } }));
- var Collapsible_1 = __webpack_require__(/*! ./cmps/collapsible/Collapsible */ "./src/cmps/collapsible/Collapsible.tsx");
- Object.defineProperty(exports, "CollapsTrigger", ({ enumerable: true, get: function () { return Collapsible_1.CollapsTrigger; } }));
- Object.defineProperty(exports, "Collapsible", ({ enumerable: true, get: function () { return Collapsible_1.Collapsible; } }));
- Object.defineProperty(exports, "CollapsBody", ({ enumerable: true, get: function () { return Collapsible_1.CollapsBody; } }));
- var Card_1 = __webpack_require__(/*! ./cmps/card/Card */ "./src/cmps/card/Card.tsx");
- Object.defineProperty(exports, "Card", ({ enumerable: true, get: function () { return Card_1.Card; } }));
- Object.defineProperty(exports, "CardContent", ({ enumerable: true, get: function () { return Card_1.CardContent; } }));
- Object.defineProperty(exports, "CardTitle", ({ enumerable: true, get: function () { return Card_1.CardTitle; } }));
- Object.defineProperty(exports, "CardAction", ({ enumerable: true, get: function () { return Card_1.CardAction; } }));
- var NavBar_1 = __webpack_require__(/*! ./cmps/navigation/NavBar */ "./src/cmps/navigation/NavBar.tsx");
- Object.defineProperty(exports, "NavBar", ({ enumerable: true, get: function () { return NavBar_1.NavBar; } }));
- Object.defineProperty(exports, "NavBarGroup", ({ enumerable: true, get: function () { return NavBar_1.NavBarGroup; } }));
- Object.defineProperty(exports, "NavBarItem", ({ enumerable: true, get: function () { return NavBar_1.NavBarItem; } }));
- Object.defineProperty(exports, "NavBarBrand", ({ enumerable: true, get: function () { return NavBar_1.NavBarBrand; } }));
- var Navigation_1 = __webpack_require__(/*! ./cmps/navigation/Navigation */ "./src/cmps/navigation/Navigation.tsx");
- Object.defineProperty(exports, "Navigation", ({ enumerable: true, get: function () { return Navigation_1.Navigation; } }));
- var SideNav_1 = __webpack_require__(/*! ./cmps/navigation/SideNav */ "./src/cmps/navigation/SideNav.tsx");
- Object.defineProperty(exports, "SideNav", ({ enumerable: true, get: function () { return SideNav_1.SideNav; } }));
- Object.defineProperty(exports, "SideNavEl", ({ enumerable: true, get: function () { return SideNav_1.SideNavEl; } }));
- Object.defineProperty(exports, "SideNavUser", ({ enumerable: true, get: function () { return SideNav_1.SideNavUser; } }));
- var Progress_1 = __webpack_require__(/*! ./cmps/progress/Progress */ "./src/cmps/progress/Progress.tsx");
- Object.defineProperty(exports, "Progress", ({ enumerable: true, get: function () { return Progress_1.Progress; } }));
- Object.defineProperty(exports, "Preloader", ({ enumerable: true, get: function () { return Progress_1.Preloader; } }));
- var Modal_1 = __webpack_require__(/*! ./cmps/modal/Modal */ "./src/cmps/modal/Modal.tsx");
- Object.defineProperty(exports, "Modal", ({ enumerable: true, get: function () { return Modal_1.Modal; } }));
- Object.defineProperty(exports, "ModalContent", ({ enumerable: true, get: function () { return Modal_1.ModalContent; } }));
- Object.defineProperty(exports, "ModalFooter", ({ enumerable: true, get: function () { return Modal_1.ModalFooter; } }));
- Object.defineProperty(exports, "ModalHeader", ({ enumerable: true, get: function () { return Modal_1.ModalHeader; } }));
- exports.Router = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js");
- ////////ux
- var ux_1 = __webpack_require__(/*! ./ux */ "./src/ux/index.ts");
- Object.defineProperty(exports, "Login", ({ enumerable: true, get: function () { return ux_1.Login; } }));
- })();
- /******/ return __webpack_exports__;
- /******/ })()
- ;
- });
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isc0JBQXNCO0FBQzFDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQyx3QkFBd0I7O0FBRXpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1QztBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLGdDQUFnQzs7QUFFakM7QUFDQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBLE9BQU87O0FBRVA7QUFDQSxNQUFNO0FBQ04seUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0Isd0NBQXdDO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0NBQStDO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLHVCQUF1QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHLElBQUk7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0IsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNGQUFzRjtBQUN0Rjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DOztBQUVBLDhEQUE4RDs7QUFFOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQSxvRUFBb0U7QUFDcEU7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7O0FBR0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FB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Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsOEJBQThCLDhCQUE4QixHQUFHLDhDQUE4Qyx5Q0FBeUMsR0FBRyxpQkFBaUIseUNBQXlDLEdBQUcsc0JBQXNCLDhCQUE4QixHQUFHLHFDQUFxQyx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywwQkFBMEIseUNBQXlDLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLG9EQUFvRCx5Q0FBeUMsR0FBRywwQkFBMEIseUNBQXlDLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLG9EQUFvRCx5Q0FBeUMsR0FBRywwQkFBMEIseUNBQXlDLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLG9EQUFvRCx5Q0FBeUMsR0FBRywwQkFBMEIseUNBQXlDLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLG9EQUFvRCx5Q0FBeUMsR0FBRywwQkFBMEIseUNBQXlDLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLG9EQUFvRCx5Q0FBeUMsR0FBRywwQkFBMEIseUNBQXlDLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLG9EQUFvRCx5Q0FBeUMsR0FBRywwQkFBMEIseUNBQXlDLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLG9EQUFvRCx5Q0FBeUMsR0FBRywwQkFBMEIseUNBQXlDLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLG9EQUFvRCx5Q0FBeUMsR0FBRyxXQUFXLHlDQUF5QyxHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRywrQkFBK0IseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4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a0IseUNBQXlDLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHNDQUFzQyx5Q0FBeUMsR0FBRyw0QkFBNEIseUNBQXlDLEdBQUcsc0NBQXNDLDhCQUE4QixHQUFHLHNEQUFzRCx5Q0FBeUMsR0FBRyw0QkFBNEIseUNBQXlDLEdBQUcsc0NBQXNDLDhCQUE4QixHQUFHLHNEQUFzRCx5Q0FBeUMsR0FBRyw0QkFBNEIseUNBQXlDLEdBQUcsc0NBQXNDLDhCQUE4QixHQUFHLHNEQUFzRCx5Q0FBeUMsR0FBRyw0QkFBNEIseUNBQXlDLEdBQUcsc0NBQXNDLDhCQUE4QixHQUFHLHNEQUFzRCx5Q0FBeUMsR0FBRyw0QkFBNEIseUNBQXlDLEdBQUcsc0NBQXNDLDhCQUE4QixHQUFHLHNEQUFzRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRywyQkFBMkIseUNBQXlDLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLHFEQUFxRCx5Q0FBeUMsR0FBRyxXQUFXLHlDQUF5QyxHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRywrQkFBK0IseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsb0JBQW9CLHlDQUF5QyxHQUFHLDhCQUE4Qiw4QkFBOEIsR0FBRyw4Q0FBOEMseUNBQXlDLEdBQUcsYUFBYSx5Q0FBeUMsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsaUNBQWlDLHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLFlBQVkseUNBQXlDLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGdDQUFnQyx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsK0JBQStCLDhCQUE4QixHQUFHLCtDQUErQyx5Q0FBeUMsR0FBRyxhQUFhLHlDQUF5QyxHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxpQ0FBaUMseUNBQXlDLEdBQUcsdUJBQXVCLHlDQUF5QyxHQUFHLGlDQUFpQyw4QkFBOEIsR0FBRyxpREFBaUQseUNBQXlDLEdBQUcsdUJBQXVCLHlDQUF5QyxHQUFHLGlDQUFpQyw4QkFBOEIsR0FBRyxpREFBaUQseUNBQXlDLEdBQUcsdUJBQXVCLHlDQUF5QyxHQUFHLGlDQUFpQyw4QkFBOEIsR0FBRyxpREFBaUQseUNBQXlDLEdBQUcsdUJBQXVCLHlDQUF5QyxHQUFHLGlDQUFpQyw4QkFBOEIsR0FBRyxpREFBaUQseUNBQXlDLEdBQUcsdUJBQXVCLHlDQUF5QyxHQUFHLGlDQUFpQyw4QkFBOEIsR0FBRyxpREFBaUQseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsa0JBQWtCLHlDQUF5QyxHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyxzQ0FBc0MseUNBQXlDLEdBQUcsNEJBQTRCLHlDQUF5QyxHQUFHLHNDQUFzQyw4QkFBOEIsR0FBRyxzREFBc0QseUNBQXlDLEdBQUcsNEJBQTRCLHlDQUF5QyxHQUFHLHNDQUFzQyw4QkFBOEIsR0FBRyxzREFBc0QseUNBQXlDLEdBQUcsNEJBQTRCLHlDQUF5QyxHQUFHLHNDQUFzQyw4QkFBOEIsR0FBRyxzREFBc0QseUNBQXlDLEdBQUcsNEJBQTRCLHlDQUF5QyxHQUFHLHNDQUFzQyw4QkFBOEIsR0FBRyxzREFBc0QseUNBQXlDLEdBQUcsNEJBQTRCLHlDQUF5QyxHQUFHLHNDQUFzQyw4QkFBOEIsR0FBRyxzREFBc0QseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlDQUF5QyxHQUFHLHFDQUFxQyw4QkFBOEIsR0FBRyxxREFBcUQseUNBQXlDLEdBQUcsMkJBQTJCLHlD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QkFBNEIsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUsseUJBQXlCLHVCQUF1QixLQUFLLHVCQUF1QixpQkFBaUIsS0FBSyx1QkFBdUIsZ0JBQWdCLEtBQUsseUJBQXlCLGtDQUFrQyxLQUFLLHVCQUF1Qiw0QkFBNEIsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUsseUJBQXlCLGtDQUFrQyxLQUFLLHVCQUF1Qiw0QkFBNEIsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUsseUJBQXlCLHVCQUF1QixLQUFLLHVCQUF1QixpQkFBaUIsS0FBSyx1QkFBdUIsZ0JBQWdCLEtBQUsseUJBQXlCLGtDQUFrQyxLQUFLLHVCQUF1Qiw0QkFBNEIsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUsseUJBQXlCLGtDQUFrQyxLQUFLLHVCQUF1Qiw0QkFBNEIsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUsseUJBQXlCLHVCQUF1QixLQUFLLHVCQUF1QixpQkFBaUIsS0FBSyx1QkFBdUIsZ0JBQWdCLEtBQUssMEJBQTBCLGtDQUFrQyxLQUFLLHdCQUF3Qiw0QkFBNEIsS0FBSyx3QkFBd0IsMkJBQTJCLEtBQUssMEJBQTBCLGtDQUFrQyxLQUFLLHdCQUF3Qiw0QkFBNEIsS0FBSyx3QkFBd0IsMkJBQTJCLEtBQUssMEJBQTBCLHdCQUF3QixLQUFLLHdCQUF3QixrQkFBa0IsS0FBSyx3QkFBd0IsaUJBQWlCLEtBQUssR0FBRyw4Q0FBOEMsa0JBQWtCLDJCQUEyQix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLGtCQUFrQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxrQkFBa0IsaUJBQWlCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssa0JBQWtCLDRCQUE0Qix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLGtCQUFrQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxrQkFBa0IsaUJBQWlCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssa0JBQWtCLDRCQUE0Qix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLGtCQUFrQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxrQkFBa0IsaUJBQWlCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssbUJBQW1CLDRCQUE0Qix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLG1CQUFtQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxtQkFBbUIsa0JBQWtCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUsseUJBQXlCLGlDQUFpQyxLQUFLLHVCQUF1QiwyQkFBMkIsS0FBSyx1QkFBdUIsMEJBQTBCLEtBQUsseUJBQXlCLGtDQUFrQyxLQUFLLHVCQUF1Qiw0QkFBNEIsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUsseUJBQXlCLHVCQUF1QixLQUFLLHVCQUF1QixpQkFBaUIsS0FBSyx1QkFBdUIsZ0JBQWdCLEtBQUsseUJBQXlCLGtDQUFrQyxLQUFLLHVCQUF1Qiw0QkFBNEIsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUsseUJBQXlCLGtDQUFrQyxLQUFLLHVCQUF1Qiw0QkFBNEIsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUsseUJBQXlCLHVCQUF1QixLQUFLLHVCQUF1QixpQkFBaUIsS0FBSyx1QkFBdUIsZ0JBQWdCLEtBQUsseUJBQXlCLGtDQUFrQyxLQUFLLHVCQUF1Qiw0QkFBNEIsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUsseUJBQXlCLGtDQUFrQyxLQUFLLHVCQUF1Qiw0QkFBNEIsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUsseUJBQXlCLHVCQUF1QixLQUFLLHVCQUF1QixpQkFBaUIsS0FBSyx1QkFBdUIsZ0JBQWdCLEtBQUssMEJBQTBCLGtDQUFrQyxLQUFLLHdCQUF3Qiw0QkFBNEIsS0FBSyx3QkFBd0IsMkJBQTJCLEtBQUssMEJBQTBCLGtDQUFrQyxLQUFLLHdCQUF3Qiw0QkFBNEIsS0FBSyx3QkFBd0IsMkJBQTJCLEtBQUssMEJBQTBCLHdCQUF3QixLQUFLLHdCQUF3QixrQkFBa0IsS0FBSyx3QkFBd0IsaUJBQWlCLEtBQUssR0FBRywrQ0FBK0MsbUJBQW1CLDJCQUEyQix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLG1CQUFtQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxtQkFBbUIsaUJBQWlCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssbUJBQW1CLDRCQUE0Qix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLG1CQUFtQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxtQkFBbUIsaUJBQWlCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssbUJBQW1CLDRCQUE0Qix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLG1CQUFtQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxtQkFBbUIsaUJBQWlCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssb0JBQW9CLDRCQUE0Qix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLG9CQUFvQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxvQkFBb0Isa0JBQWtCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssMEJBQTBCLGlDQUFpQyxLQUFLLHdCQUF3QiwyQkFBMkIsS0FBSyx3QkFBd0IsMEJBQTBCLEtBQUssMEJBQTBCLGtDQUFrQyxLQUFLLHdCQUF3Qiw0QkFBNEIsS0FBSyx3QkFBd0IsMkJBQTJCLEtBQUssMEJBQTBCLHVCQUF1QixLQUFLLHdCQUF3QixpQkFBaUIsS0FBSyx3QkFBd0IsZ0JBQWdCLEtBQUssMEJBQTBCLGtDQUFrQyxLQUFLLHdCQUF3Qiw0QkFBNEIsS0FBSyx3QkFBd0IsMkJBQTJCLEtBQUssMEJBQTBCLGtDQUFrQyxLQUFLLHdCQUF3Qiw0QkFBNEIsS0FBSyx3QkFBd0IsMkJBQTJCLEtBQUssMEJBQTBCLHVCQUF1QixLQUFLLHdCQUF3QixpQkFBaUIsS0FBSyx3QkFBd0IsZ0JBQWdCLEtBQUssMEJBQTBCLGtDQUFrQyxLQUFLLHdCQUF3Qiw0QkFBNEIsS0FBSyx3QkFBd0IsMkJBQTJCLEtBQUssMEJBQTBCLGtDQUFrQyxLQUFLLHdCQUF3Qiw0QkFBNEIs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V0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxPQUFPLE1BQU0sV0FBVyxRQUFRLE1BQU0sV0FBVyxRQUFRLE1BQU0sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLFVBQVUsS0FBSyxNQUFNLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxVQUFVLFVBQVUsV0FBVyxXQUFXLFdBQVcsVUFBVSxRQUFRLFFBQVEscUJBQXFCLFFBQVEsYUFBYSxLQUFLLFdBQVcscUJBQXFCLFdBQVcsVUFBVSxVQUFVLFVBQVUsUUFBUSxPQUFPLFVBQVUscUJBQXFCLFFBQVEsT0FBTyxVQUFVLHFCQUFxQixRQUFRLGFBQWEsTUFBTSxXQUFXLHFCQUFxQixRQUFRLFFBQVEsV0FBVyxxQkFBcUIsUUFBUSxhQUFhLEtBQUssV0FBVyxxQkFBcUIsV0FBVyxXQUFXLFdBQVcsUUFBUSxVQUFVLHFCQUFxQixRQUFRLE9BQU8sVUFBVSxRQUFRLE9BQU8sVUFBVSxRQUFRLFVBQVUscUJBQXFCLFFBQVEsWUFBWSxxQkFBcUIsUUFBUSxpQkFBaUIscUJBQXFCLFFBQVEsT0FBTyxxQkFBcUIsUUFBUSxRQUFRLHFCQUFxQixRQUFRLFFBQVEsV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sVUFBVSxRQUFRLE9BQU8sV0FBVyxXQUFXLFFBQVEsWUFBWSxPQUFPLHFCQUFxQixRQUFRLGFBQWEsS0FBSyxXQUFXLFVBQVUsUUFBUSxPQUFPLHFCQUFxQixxQkFBcUIscUJBQXFCLHFCQUFxQixVQUFVLFdBQVcsc0JBQXNCLFdBQVcsV0FBVyxXQUFXLFVBQVUsV0FBVyxVQUFVLFFBQVEsUUFBUSxxQkFBcUIsV0FBVyxXQUFXLHFCQUFxQixXQUFXLFdBQVcsVUFBVSxVQUFVLFdBQVcsV0FBVyxXQUFXLFdBQVcsVUFBVSxXQUFXLFFBQVEsT0FBTyxVQUFVLFdBQVcsVUFBVSxRQUFRLE9BQU8sV0FBVyxVQUFVLFVBQVUsV0FBVyxXQUFXLFVBQVUsV0FBVyxXQUFXLFdBQVcsUUFBUSxPQUFPLFVBQVUsVUFBVSxXQUFXLFFBQVEsT0FBTyxVQUFVLFVBQVUsV0FBVyxXQUFXLFVBQVUsUUFBUSxPQUFPLFVBQVUsV0FBVyxVQUFVLFdBQVcsVUFBVSxXQUFXLFVBQVUsV0FBVyxPQUFPLE9BQU8sV0FBVyxVQUFVLE9BQU8sT0FBTyxVQUFVLFVBQVUsUUFBUSxhQUFhLEtBQUssVUFBVSxVQUFVLFdBQVcsVUFBVSxXQUFXLFdBQVcsUUFBUSxPQUFPLFVBQVUsVUFBVSxXQUFXLFdBQVcsVUFBVSxVQUFVLFFBQVEsT0FBTyxXQUFXLFVBQVUsV0FBVyxVQUFVLFdBQVcsVUFBVSxVQUFVLFFBQVEsWUFBWSxLQUFLLFVBQVUsVUFBVSxXQUFXLFVBQVUsV0FBVyxVQUFVLFFBQVEsT0FBTyxXQUFXLFFBQVEsT0FBTyxXQUFXLFFBQVEsT0FBTyxXQUFXLFFBQVEsT0FBTyxVQUFVLFFBQVEsT0FBTyxVQUFVLFVBQVUsUUFBUSxPQUFPLFVBQVUsV0FBVyxVQUFVLFFBQVEsT0FBTyxXQUFXLFVBQVUsVUFBVSxXQUFXLFVBQVUsV0FBVyxXQUFXLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxVQUFVLFVBQVUsV0FBVyxXQUFXLFdBQVcsUUFBUSxPQUFPLFdBQVcsVUFBVSxVQUFVLFVBQVUsV0FBVyxXQUFXLFVBQVUsV0FBVyxXQUFXLFFBQVEsT0FBTyxXQUFXLFFBQVEsYUFBYSxLQUFLLFdBQVcsUUFBUSxPQUFPLFdBQVcsUUFBUSxhQUFhLEtBQUssV0FBVyxRQUFRLGFBQWEsS0FBSyxXQUFXLFFBQVEsYUFBYSxLQUFLLFdBQVcsUUFBUSxhQUFhLEtBQUssV0FBVyxRQUFRLGFBQWEsS0FBSyxXQUFXLFFBQVEsT0FBTyxXQUFXLE9BQU8sT0FBTyxXQUFXLFFBQVEsYUFBYSxLQUFLLEtBQUssV0FBVyxVQUFVLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxVQUFVLFdBQVcsT0FBTyxPQUFPLFdBQVcsV0FBVyxVQUFVLFVBQVUsV0FBVyxXQUFXLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxVQUFVLFdBQVcsV0FBVyxXQUFXLFdBQVcsT0FBTyxPQUFPLFdBQVcsVUFBVSxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxXQUFXLFFBQVEsT0FBTyxXQUFXLFdBQVcsT0FBTyxPQUFPLFdBQVcsVUFBVSxVQUFVLFVBQVUsUUFBUSxPQUFPLFdBQVcsVUFBVSxVQUFVLFdBQVcsV0FBVyxXQUFXLFFBQVEsT0FBTyxVQUFVLFFBQVEsYUFBYSxLQUFLLFVBQVUsUUFBUSxPQUFPLFVBQVUsVUFBVSxVQUFVLFdBQVcsVUFBVSxVQUFVLFVBQVUsVUFBVSxXQUFXLFdBQVcsV0FBVyxPQUFPLE9BQU8sVUFBVSxPQUFPLE9BQU8sTUFBTSxXQUFXLE9BQU8sS0FBSyxPQUFPLFVBQVUsT0FBTyxPQUFPLFVBQVUsT0FBTyxPQUFPLFVBQVUsT0FBTyxPQUFPLFdBQVcsV0FBVyxXQUFXLFVBQVUsVUFBVSxXQUFXLE9BQU8sT0FBTyxVQUFVLE9BQU8sT0FBTyxXQUFXLFdBQVcsV0FBVyxVQUFVLFVBQVUsV0FBVyxPQUFPLE9BQU8sVUFBVSxRQUFRLE9BQU8sVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFdBQVcsVUFBVSxXQUFXLFFBQVEsT0FBTyxVQUFVLFVBQVUsT0FBTyxPQUFPLFdBQVcsV0FBVyxXQUFXLFVBQVUsV0FBVyxPQUFPLE9BQU8sV0FBVyxXQUFXLFVBQVUsUUFBUSxPQUFPLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxXQUFXLFdBQVcsUUFBUSxTQUFTLFVBQVUsVUFBVSxRQUFRLE9BQU8sVUFBVSxVQUFVLFdBQVcsUUFBUSxPQUFPLHFCQUFxQixxQkFBcUIsc0JBQXNCLHNCQUFzQixzQkFBc0IsV0FBVyxLQUFLLE1BQU0sUUFBUSxPQUFPLFVBQVUsV0FBVyxPQUFPLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxZQUFZLFdBQVcsUUFBUSxPQUFPLFVBQVUsUUFBUSxPQUFPLFdBQVcsUUFBUSxPQUFPLFdBQVcsUUFBUSxPQUFPLFVBQVUsV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLE9BQU8sT0FBTyxhQUFhLGVBQWUsYUFBYSxVQUFVLFdBQVcsT0FBTyxPQUFPLGFBQWEsUUFBUSxPQUFPLFdBQVcsV0FBVyxXQUFXLE9BQU8sUUFBUSxXQUFXLFVBQVUsVUFBVSxXQUFXLFVBQVUsV0FBVyxXQUFXLE9BQU8sT0FBTyxVQUFVLFdBQVcsVUFBVSxXQUFXLFdBQVcsT0FBTyxPQUFPLFVBQVUsT0FBTyxPQUFPLFVBQVUsT0FBTyxPQUFPLFdBQVcsVUFBVSxVQUFVLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxZQUFZLGFBQWEsUUFBUSxPQUFPLFVBQVUsT0FBTyxPQUFPLFVBQVUsV0FBVyxXQUFXLFFBQVEsT0FBTyxhQUFhLFFBQVEsT0FBTyxhQUFhLGFBQWEsV0FBVyxPQUFPLE9BQU8sV0FBVyxPQUFPLE9BQU8sV0FBVyxRQUFRLE9BQU8sVUFBVSxZQUFZLFNBQVMsT0FBTyxVQUFVLFVBQVUsUUFBUSxPQUFPLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxVQUFVLFVBQVUsV0FBVyxPQUFPLE9BQU8sV0FBVyxPQUFPLE9BQU8sV0FBVyxRQUFRLFFBQVEsTUFBTSxLQUFLLEtBQUssV0FBVyxPQUFPLE1BQU0sT0FBTyxLQUFLLFdBQVcsT0FBTyxNQUFNLE9BQU8sS0FBSyxXQUFXLE9BQU8sTUFBTSxPQUFPLEtBQUssV0FBVyxPQUFPLE1BQU0sT0FBTyxLQUFLLFdBQVcsT0FBTyxNQUFNLE9BQU8sS0FBSyxXQUFXLE9BQU8sTUFBTSxPQUFPLEtBQUssV0FBVyxPQUFPLE1BQU0sT0FBTyxLQUFLLFdBQVcsT0FBTyxNQUFNLE9BQU8sS0FBSyxXQUFXLE9BQU8sTUFBTSxPQUFPLEtBQUssV0FBVyxPQUFPLE1BQU0sT0FBTyxLQUFLLFdBQVcsT0FBTyxNQUFNLE9BQU8sS0FBSyxXQUFXLE9BQU8sTUFBTSxPQUFPLEtBQUssV0FBVyxPQUFPLE1BQU0sUUFBUSxNQUFNLEtBQUssV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLE9BQU8sVUFBVSxXQUFXLFdBQVcsUUFBUSxPQUFPLFVBQVUsV0FBVyxXQUFXLFdBQVcsUUFBUSxPQUFPLFdBQVcsUUFBUSxPQUFPLFVBQVUsVUFBVSxXQUFXLFdBQVcsVUFBVSxXQUFXLFVBQVUsVUFBVSxVQUFVLFdBQVcsT0FBTyxPQUFPLFdBQVcsV0FBVyxVQUFVLFdBQVcsV0FBVyxPQUFPLE9BQU8sVUFBVSxPQUFPLE9BQU8sV0FBVyxRQUFRLE9BQU8sV0FBVyxVQUFVLFdBQVcsWUFBWSxZQUFZLFlBQVksUUFBUSxPQUFPLFdBQVcsUUFBUSxPQUFPLFdBQVcsUUFBUSxPQUFPLFdBQVcsUUFBUSxPQUFPLFdBQVcsVUFBVSxXQUFXLFFBQVEsT0FBTyxXQUFXLFVBQVUsVUFBVSxXQUFXLFdBQVcsV0FBVyxVQUFVLFdBQVcsV0FBVyxXQUFXLFdBQVcsT0FBTyxPQUFPLFVBQVUsYUFBYSxZQUFZLE9BQU8sT0FBTyxVQUFVLFdBQVcsVUFBVSxVQUFVLFdBQVcsT0FBTyxPQUFPLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxRQUFRLE9BQU8sVUFBVSxXQUFXLFdBQVcsWUFBWSxZQUFZLFVBQVUsV0FBVyxPQUFPLE9BQU8sV0FBVyxXQUFXLE9BQU8sT0FBTyxVQUFVLE9BQU8sT0FBTyxXQUFXLFVBQVUsV0FBVyxXQUFXLFVBQVUsVUFBVSxZQUFZLFVBQVUsVUFBVSxXQUFXLFdBQVcsT0FBTyxPQUFPLFdBQVcsV0FBVyxPQUFPLE9BQU8sVUFBVSxXQUFXLFFBQVEsT0FBTyxXQUFXLFVBQVUsV0FBVyxRQUFRLE9BQU8sV0FBVyxXQUFXLFFBQVEsT0FBTyxXQUFXLFdBQVcsV0FBVyxXQUFXLFFBQVEsT0FBTyxVQUFVLFVBQVUsV0FBVyxXQUFXLFVBQVUsYUFBYSxhQUFhLE9BQU8sT0FBTyxVQUFVLE9BQU8sT0FBTyxVQUFVLFdBQVcsV0FBVyxXQUFXLFdBQVcsUUFBUSxPQUFPLFdBQVcsUUFBUSxPQUFPLFVBQVUsV0FBVyxXQUFXLFVBQVUsUUFBUSxRQUFRLFVBQVUsV0FBVyxPQUFPLFFBQVEsVUFBVSxPQUFPLFFBQVEsV0FBVyxVQUFVLFdBQVcsVUFBVSxVQUFVLE9BQU8sUUFBUSxXQUFXLE9BQU8sUUFBUSxXQUFXLE9BQU8sUUFBUSxVQUFVLFlBQVksUUFBUSxRQUFRLFdBQVcsUUFBUSxPQUFPLFVBQVUsV0FBVyxPQUFPLE9BQU8sV0FBVyxVQUFVLFdBQVcsT0FBTyxPQUFPLFdBQVcsVUFBVSxRQUFRLE9BQU8sV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLE9BQU8sT0FBTyxhQUFhLGVBQWUsYUFBYSxVQUFVLFdBQVcsT0FBTyxPQUFPLFdBQVcsV0FBVyxXQUFXLE9BQU8sUUFBUSxXQUFXLFVBQVUsVUFBVSxXQUFXLFVBQVUsV0FBVyxXQUFXLE9BQU8sT0FBTyxVQUFVLFdBQVcsVUFBVSxXQUFXLFdBQVcsT0FBTyxPQUFPLFVBQVUsT0FBTyxPQUFPLFVBQVUsT0FBTyxPQUFPLFdBQVcsVUFBVSxVQUFVLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxZQUFZLGFBQWEsUUFBUSxPQUFPLFVBQVUsT0FBTyxPQUFPLFVBQVUsV0FBVyxXQUFXLFFBQVEsT0FBTyxhQUFhLFFBQVEsT0FBTyxZQUFZLFlBQVksV0FBVyxPQUFPLE9BQU8sV0FBVyxPQUFPLE9BQU8sV0FBVyxPQUFPLE9BQU8sVUFBVSxXQUFXLFNBQVMsT0FBTyxZQUFZLFFBQVEsT0FBTyxVQUFVLGFBQWEsU0FBUyxPQUFPLGFBQWEsY0FBYyxTQUFTLFFBQVEsTUFBTSxXQUFXLEtBQUssWUFBWSxTQUFTLGNBQWMsaUJBQWlCLFdBQVcsVUFBVSxZQUFZLFlBQVksVUFBVSxVQUFVLFVBQVUsWUFBWSxjQUFjLFlBQVksWUFBWSxXQUFXLFdBQVcsUUFBUSxnQ0FBZ0MsYUFBYSxlQUFlLFFBQVEsZ0NBQWdDLGFBQWEsUUFBUSxvQkFBb0IsV0FBVyxXQUFXLFFBQVEsb0JBQW9CLFdBQVcsUUFBUSxvQkFBb0IsV0FBVyxRQUFRLG9CQUFvQixXQUFXLE9BQU8sb0JBQW9CLFVBQVUsUUFBUSxjQUFjLDZCQUE2QixXQUFXLFdBQVcsU0FBUyxnQ0FBZ0MsYUFBYSxhQUFhLFNBQVMsd0RBQXdELFdBQVcsV0FBVyxXQUFXLFNBQVMsZ0NBQWdDLFdBQVcsV0FBVyxTQUFTLGdDQUFnQyxXQUFXLFdBQVcsUUFBUSxvQkFBb0IsVUFBVSxVQUFVLFdBQVcsVUFBVSxVQUFVLFVBQVUsV0FBVyxTQUFTLFFBQVEsWUFBWSxXQUFXLFdBQVcsUUFBUSxRQUFRLFdBQVcsV0FBVyxXQUFXLFFBQVEsU0FBUyxXQUFXLFFBQVEsUUFBUSxVQUFVLFFBQVEsU0FBUyxXQUFXLFFBQVEsUUFBUSxZQUFZLGFBQWEsVUFBVSxVQUFVLFVBQVUsVUFBVSxXQUFXLFdBQVcsV0FBVyxXQUFXLFFBQVEsUUFBUSxXQUFXLFdBQVcsUUFBUSxRQUFRLFdBQVcsV0FBVyxRQUFRLFFBQVEsV0FBVyxXQUFXLFVBQVUsVUFBVSxXQUFXLFFBQVEsUUFBUSxVQUFVLFdBQVcsVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFdBQVcsWUFBWSxZQUFZLFFBQVEsUUFBUSxXQUFXLFFBQVEsYUFBYSxXQUFXLFVBQVUsV0FBVyxRQUFRLFFBQVEsWUFBWSxTQUFTLFFBQVEsS0FBSyxVQUFVLFdBQVcsUUFBUSxLQUFLLFFBQVEsS0FBSyxVQUFVLFdBQVcsUUFBUSxNQUFNLGNBQWMsS0FBSyxVQUFVLFdBQVcsV0FBVyxRQUFRLFFBQVEsVUFBVSxXQUFXLFdBQVcsVUFBVSxXQUFXLFFBQVEsUUFBUSxZQUFZLFdBQVcsV0FBVyxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsVUFBVSxVQUFVLFdBQVcsVUFBVSxXQUFXLFlBQVksU0FBUyxhQUFhLEtBQUssVUFBVSxXQUFXLFlBQVksUUFBUSxRQUFRLFdBQVcsc0JBQXNCLHNCQUFzQixVQUFVLFlBQVksWUFBWSxTQUFTLFFBQVEsV0FBVyxXQUFXLFdBQVcsc0JBQXNCLHNCQUFzQixXQUFXLFVBQVUsVUFBVSxTQUFTLGNBQWMsS0FBSyxVQUFVLFNBQVMsUUFBUSxXQUFXLFNBQVMsY0FBYyxLQUFLLFdBQVcsU0FBUyxRQUFRLE1BQU0sTUFBTSxXQUFXLFVBQVUsV0FBVyxTQUFTLFNBQVMsV0FBVyxXQUFXLFVBQVUsV0FBVyxVQUFVLFdBQVcsVUFBVSxXQUFXLFdBQVcsU0FBUyxTQUFTLFVBQVUsV0FBVyxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxXQUFXLFNBQVMsY0FBYyxVQUFVLFdBQVcsU0FBUyxTQUFTLFdBQVcsU0FBUyxRQUFRLFdBQVcsU0FBUyxjQUFjLEtBQUssV0FBVyxTQUFTLFVBQVUsWUFBWSxRQUFRLFNBQVMsYUFBYSxTQUFTLFFBQVEsV0FBVyxTQUFTLGNBQWMsS0FBSyxXQUFXLFNBQVMsY0FBYyxLQUFLLFdBQVcsU0FBUyxjQUFjLEtBQUssV0FBVyxTQUFTLFFBQVEsVUFBVSxhQUFhLFNBQVMsY0FBYyxNQUFNLFdBQVcsYUFBYSxTQUFTLFFBQVEsYUFBYSxTQUFTLFFBQVEsYUFBYSxTQUFTLFFBQVEsYUFBYSxlQUFlLFNBQVMsUUFBUSxNQUFNLFdBQVcsTUFBTSxXQUFXLFVBQVUsV0FBVyxTQUFTLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxXQUFXLFVBQVUsV0FBVyxVQUFVLFdBQVcsVUFBVSxXQUFXLFFBQVEsUUFBUSxVQUFVLFdBQVcsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxVQUFVLFdBQVcsUUFBUSxRQUFRLFVBQVUsV0FBVyxRQUFRLFFBQVEsVUFBVSxhQUFhLFFBQVEsUUFBUSxXQUFXLFVBQVUsV0FBVyxXQUFXLFdBQVcsU0FBUyxRQUFRLFVBQVUsVUFBVSxVQUFVLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxRQUFRLFFBQVEsV0FBVyxXQUFXLFNBQVMsY0FBYyxLQUFLLFVBQVUsVUFBVSxVQUFVLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxRQUFRLFFBQVEsV0FBVyxXQUFXLFNBQVMsUUFBUSxXQUFXLFFBQVEsU0FBUyxVQUFVLFVBQVUsV0FBVyxXQUFXLFdBQVcsVUFBVSxRQUFRLFFBQVEsVUFBVSxVQUFVLFdBQVcsVUFBVSxVQUFVLFdBQVcsV0FBVyxRQUFRLFFBQVEsVUFBVSxVQUFVLFdBQVcsV0FBVyxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsVUFBVSxVQUFVLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsUUFBUSxRQUFRLFVBQVUsVUFBVSxVQUFVLFdBQVcsWUFBWSxXQUFXLFFBQVEsUUFBUSxXQUFXLGFBQWEsYUFBYSxRQUFRLFFBQVEsV0FBVyxZQUFZLGFBQWEsUUFBUSxRQUFRLFdBQVcsV0FBVyxRQUFRLFFBQVEsV0FBVyxhQUFhLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxhQUFhLGVBQWUsU0FBUyxRQUFRLE1BQU0sTUFBTSxXQUFXLFdBQVcsU0FBUyxRQUFRLFVBQVUsU0FBUyxRQUFRLFVBQVUsVUFBVSxVQUFVLFFBQVEsUUFBUSxhQUFhLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxZQUFZLFNBQVMsUUFBUSxVQUFVLFdBQVcsV0FBVyxVQUFVLFVBQVUsYUFBYSxjQUFjLFlBQVksV0FBVyxVQUFVLFFBQVEsUUFBUSxVQUFVLFdBQVcsV0FBVyxVQUFVLFVBQVUsV0FBVyxVQUFVLFVBQVUsV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsYUFBYSxhQUFhLFNBQVMsU0FBUyxXQUFXLFdBQVcsU0FBUyxTQUFTLFdBQVcsV0FBVyxTQUFTLFFBQVEsVUFBVSxXQUFXLFNBQVMsU0FBUyxZQUFZLFNBQVMsUUFBUSxNQUFNLEtBQUssVUFBVSxTQUFTLFFBQVEsV0FBVyxVQUFVLFFBQVEsYUFBYSxZQUFZLFdBQVcsYUFBYSxhQUFhLFlBQVksUUFBUSxRQUFRLFdBQVcsU0FBUyxRQUFRLFlBQVksUUFBUSxRQUFRLFVBQVUsV0FBVyxRQUFRLFFBQVEsV0FBVyxVQUFVLFdBQVcsVUFBVSxXQUFXLFVBQVUsV0FBVyxhQUFhLFdBQVcsVUFBVSxXQUFXLFVBQVUsVUFBVSxXQUFXLFVBQVUsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFdBQVcsUUFBUSxRQUFRLFdBQVcsVUFBVSxZQUFZLFNBQVMsUUFBUSxhQUFhLFNBQVMsUUFBUSxhQUFhLFFBQVEsUUFBUSxhQUFhLFNBQVMsUUFBUSxhQUFhLFlBQVksV0FBVyxTQUFTLFFBQVEsYUFBYSxTQUFTLFVBQVUsYUFBYSxhQUFhLFNBQVMsUUFBUSxhQUFhLFNBQVMsUUFBUSxhQUFhLFFBQVEsUUFBUSxhQUFhLFNBQVMsUUFBUSxXQUFXLFVBQVUsV0FBVyxTQUFTLFFBQVEsWUFBWSxVQUFVLFFBQVEsV0FBVyxVQUFVLFNBQVMsUUFBUSxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxXQUFXLFNBQVMsUUFBUSxNQUFNLEtBQUssV0FBVyxRQUFRLFFBQVEsV0FBVyxXQUFXLFFBQVEsUUFBUSxXQUFXLFNBQVMsUUFBUSxVQUFVLFdBQVcsYUFBYSxPQUFPLFFBQVEsVUFBVSxRQUFRLFFBQVEsV0FBVyxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFdBQVcsUUFBUSxRQUFRLFVBQVUsU0FBUyxRQUFRLE1BQU0sS0FBSyxXQUFXLFNBQVMsU0FBUyxVQUFVLFNBQVMsUUFBUSxXQUFXLFdBQVcsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFFBQVEsUUFBUSxVQUFVLFNBQVMsUUFBUSxXQUFXLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxXQUFXLGFBQWEsYUFBYSxXQUFXLFdBQVcsUUFBUSxRQUFRLFVBQVUsVUFBVSxXQUFXLFdBQVcsV0FBVyxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxVQUFVLFdBQVcsVUFBVSxVQUFVLFNBQVMsUUFBUSxXQUFXLFNBQVMsUUFBUSxZQUFZLFlBQVksVUFBVSxTQUFTLFFBQVEsV0FBVyxVQUFVLFVBQVUsV0FBVyxhQUFhLGFBQWEsV0FBVyxhQUFhLGFBQWEsV0FBVyxTQUFTLFFBQVEsV0FBVyxTQUFTLFFBQVEsV0FBVyxXQUFXLFdBQVcsU0FBUyxRQUFRLFlBQVksWUFBWSxVQUFVLFNBQVMsUUFBUSxVQUFVLFNBQVMsUUFBUSxXQUFXLFVBQVUsVUFBVSxXQUFXLGFBQWEsYUFBYSxZQUFZLFNBQVMsUUFBUSxXQUFXLFdBQVcsU0FBUyxRQUFRLFdBQVcsU0FBUyxRQUFRLFdBQVcsWUFBWSxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVMsUUFBUSxXQUFXLFNBQVMsUUFBUSxXQUFXLFNBQVMsUUFBUSxXQUFXLFVBQVUsVUFBVSxXQUFXLGFBQWEsYUFBYSxTQUFTLFFBQVEsV0FBVyxTQUFTLFFBQVEsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTLFFBQVEsV0FBVyxTQUFTLFFBQVEsV0FBVyxTQUFTLFFBQVEsVUFBVSxVQUFVLFdBQVcsVUFBVSxXQUFXLFNBQVMsUUFBUSxVQUFVLFVBQVUsWUFBWSxXQUFXLFdBQVcsV0FBVyxTQUFTLFFBQVEsWUFBWSxVQUFVLFFBQVEsWUFBWSxVQUFVLFFBQVEsWUFBWSxVQUFVLFFBQVEsWUFBWSxVQUFVLFFBQVEsWUFBWSxVQUFVLFFBQVEsWUFBWSxVQUFVLFFBQVEsV0FBVyxXQUFXLFlBQVksWUFBWSxZQUFZLFdBQVcsV0FBVyxVQUFVLFdBQVcsU0FBUyxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxRQUFRLFdBQVcsU0FBUyxRQUFRLFVBQVUsV0FBVyxVQUFVLFNBQVMsUUFBUSxLQUFLLFVBQVUsUUFBUSxLQUFLLFFBQVEsS0FBSyxVQUFVLFFBQVEsS0FBSyxRQUFRLFdBQVcsV0FBVyxTQUFTLFFBQVEsV0FBVyxXQUFXLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxVQUFVLFNBQVMsUUFBUSxXQUFXLFdBQVcsV0FBVyxRQUFRLFFBQVEsVUFBVSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsV0FBVyxXQUFXLFVBQVUsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLEtBQUssV0FBVyxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsV0FBVyxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsV0FBVyxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsV0FBVyxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsV0FBVyxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsV0FBVyxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsV0FBVyxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsV0FBVyxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxZQUFZLFVBQVUsVUFBVSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLEtBQUssUUFBUSxLQUFLLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsWUFBWSxVQUFVLFVBQVUsUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxLQUFLLFFBQVEsS0FBSyxXQUFXLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxVQUFVLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxVQUFVLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxVQUFVLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxVQUFVLFlBQVksVUFBVSxVQUFVLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsTUFBTSxRQUFRLFVBQVUsWUFBWSxZQUFZLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxXQUFXLGNBQWMsYUFBYSxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsUUFBUSxRQUFRLFVBQVUsVUFBVSxXQUFXLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFdBQVcsUUFBUSxRQUFRLFdBQVcsVUFBVSxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxVQUFVLFFBQVEsUUFBUSxXQUFXLFdBQVcsUUFBUSxRQUFRLGNBQWMsYUFBYSxhQUFhLGNBQWMsYUFBYSxpQkFBaUIsYUFBYSxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsYUFBYSxRQUFRLFFBQVEsWUFBWSxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsY0FBYyxRQUFRLFNBQVMsVUFBVSxhQUFhLGlCQUFpQixjQUFjLFVBQVUsV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsVUFBVSxXQUFXLFdBQVcsYUFBYSxjQUFjLGNBQWMsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsV0FBVyxXQUFXLFFBQVEsUUFBUSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsV0FBVyxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsUUFBUSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsVUFBVSxRQUFRLFNBQVMsWUFBWSxhQUFhLFFBQVEsUUFBUSxXQUFXLFdBQVcsUUFBUSxRQUFRLFdBQVcsV0FBVyxTQUFTLFFBQVEsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFFBQVEsUUFBUSxVQUFVLFNBQVMsUUFBUSxVQUFVLFdBQVcsVUFBVSxRQUFRLFFBQVEsVUFBVSxVQUFVLFNBQVMsUUFBUSxLQUFLLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFdBQVcsUUFBUSxLQUFLLFNBQVMsYUFBYSxRQUFRLFNBQVMsWUFBWSxTQUFTLFFBQVEsVUFBVSxTQUFTLFFBQVEsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsV0FBVyxVQUFVLFVBQVUsU0FBUyxRQUFRLFdBQVcsV0FBVyxTQUFTLFNBQVMsWUFBWSxlQUFlLGFBQWEsWUFBWSxlQUFlLGNBQWMsYUFBYSxXQUFXLFdBQVcsU0FBUyxzQkFBc0IsV0FBVyxXQUFXLFdBQVcsV0FBVyxVQUFVLFFBQVEsc0JBQXNCLFdBQVcsV0FBVyxTQUFTLFlBQVksYUFBYSxhQUFhLFFBQVEsWUFBWSxjQUFjLGNBQWMsU0FBUyxTQUFTLFdBQVcsU0FBUyxRQUFRLFdBQVcsYUFBYSxpQkFBaUIsY0FBYyxXQUFXLFdBQVcsVUFBVSxRQUFRLFFBQVEsY0FBYyxTQUFTLFFBQVEsWUFBWSxhQUFhLGNBQWMsV0FBVyxVQUFVLGFBQWEsZ0JBQWdCLGlCQUFpQixhQUFhLGNBQWMsaUJBQWlCLGNBQWMsVUFBVSxXQUFXLFFBQVEsUUFBUSxhQUFhLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxhQUFhLGdCQUFnQixhQUFhLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxjQUFjLFFBQVEsUUFBUSxhQUFhLGdCQUFnQixRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsY0FBYyxRQUFRLFFBQVEsV0FBVyxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxXQUFXLFdBQVcsYUFBYSxpQkFBaUIsaUJBQWlCLFNBQVMsUUFBUSxZQUFZLFNBQVMsUUFBUSxXQUFXLFVBQVUsVUFBVSxXQUFXLFdBQVcsVUFBVSxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxVQUFVLFVBQVUsV0FBVyxVQUFVLFVBQVUsV0FBVyxVQUFVLFFBQVEsUUFBUSxXQUFXLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsVUFBVSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFVBQVUsVUFBVSxVQUFVLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFVBQVUsWUFBWSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxVQUFVLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxXQUFXLFVBQVUsVUFBVSxXQUFXLFFBQVEsUUFBUSxVQUFVLFdBQVcsV0FBVyxVQUFVLFVBQVUsV0FBVyxXQUFXLFVBQVUsY0FBYyxhQUFhLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxVQUFVLFVBQVUsV0FBVyxXQUFXLFVBQVUsVUFBVSxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxXQUFXLFVBQVUsVUFBVSxVQUFVLGFBQWEsZ0JBQWdCLGdCQUFnQixnQkFBZ0IsY0FBYyxTQUFTLFFBQVEsV0FBVyxXQUFXLGFBQWEsYUFBYSxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxXQUFXLFdBQVcsVUFBVSxTQUFTLFFBQVEsYUFBYSxpQkFBaUIsZ0JBQWdCLGFBQWEsUUFBUSxRQUFRLGNBQWMsU0FBUyxRQUFRLGFBQWEsaUJBQWlCLGdCQUFnQixRQUFRLFFBQVEsY0FBYyxTQUFTLFFBQVEsVUFBVSxTQUFTLFFBQVEsVUFBVSxVQUFVLFNBQVMsUUFBUSxXQUFXLFdBQVcsV0FBVyxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsWUFBWSxZQUFZLFFBQVEsUUFBUSxZQUFZLFlBQVksUUFBUSxRQUFRLFVBQVUsV0FBVyxXQUFXLFFBQVEsUUFBUSxZQUFZLFlBQVksUUFBUSxRQUFRLFVBQVUsWUFBWSxZQUFZLFFBQVEsUUFBUSxZQUFZLFlBQVksUUFBUSxRQUFRLFVBQVUsWUFBWSxZQUFZLFFBQVEsUUFBUSxZQUFZLFlBQVksUUFBUSxRQUFRLFVBQVUsV0FBVyxXQUFXLFFBQVEsUUFBUSxZQUFZLFlBQVksUUFBUSxRQUFRLFVBQVUsWUFBWSxZQUFZLFFBQVEsUUFBUSxZQUFZLFlBQVksUUFBUSxRQUFRLFVBQVUsWUFBWSxZQUFZLFFBQVEsUUFBUSxZQUFZLFlBQVksUUFBUSxRQUFRLFVBQVUsV0FBVyxXQUFXLFFBQVEsUUFBUSxZQUFZLFlBQVksUUFBUSxRQUFRLFVBQVUsWUFBWSxZQUFZLFFBQVEsUUFBUSxZQUFZLFlBQVksUUFBUSxRQUFRLFlBQVksV0FBVyxVQUFVLFdBQVcsV0FBVyxXQUFXLFNBQVMsUUFBUSxVQUFVLFdBQVcsVUFBVSxVQUFVLFVBQVUsVUFBVSxXQUFXLFVBQVUsV0FBVyxXQUFXLFdBQVcsUUFBUSxRQUFRLHFCQUFxQixxQkFBcUIsV0FBVyxVQUFVLFVBQVUsV0FBVyxRQUFRLFFBQVEsV0FBVyxVQUFVLFVBQVUsUUFBUSxRQUFRLEtBQUssV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLE1BQU0sUUFBUSxXQUFXLFlBQVksYUFBYSxXQUFXLGFBQWEsU0FBUyxRQUFRLFdBQVcsV0FBVyxhQUFhLGFBQWEsV0FBVyxRQUFRLFFBQVEsVUFBVSxXQUFXLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxVQUFVLFdBQVcsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFdBQVcsV0FBVyxRQUFRLFFBQVEsV0FBVyxVQUFVLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxXQUFXLFdBQVcsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFdBQVcsVUFBVSxVQUFVLFFBQVEsUUFBUSxVQUFVLFdBQVcsVUFBVSxXQUFXLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFVBQVUsV0FBVyxXQUFXLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxRQUFRLFFBQVEsWUFBWSxhQUFhLFVBQVUsVUFBVSxVQUFVLFlBQVksT0FBTyxRQUFRLFlBQVksYUFBYSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxXQUFXLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsV0FBVyxXQUFXLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFlBQVksZUFBZSxhQUFhLFdBQVcsUUFBUSxRQUFRLFlBQVksUUFBUSxRQUFRLFlBQVksYUFBYSxhQUFhLFlBQVksV0FBVyxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsVUFBVSxTQUFTLGVBQWUsS0FBSyxXQUFXLFdBQVcsV0FBVyxnQkFBZ0IsS0FBSyxLQUFLLFdBQVcsV0FBVyxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFdBQVcsV0FBVyxTQUFTLFFBQVEsS0FBSyxXQUFXLFFBQVEsS0FBSyxRQUFRLEtBQUssV0FBVyxRQUFRLEtBQUssUUFBUSxXQUFXLFVBQVUsVUFBVSxVQUFVLGNBQWMsU0FBUyxTQUFTLFdBQVcsU0FBUyxTQUFTLFdBQVcsU0FBUyxTQUFTLFdBQVcsU0FBUyxTQUFTLFdBQVcsU0FBUyxtQkFBbUIsS0FBSyxLQUFLLFdBQVcsV0FBVyxXQUFXLFNBQVMsUUFBUSxXQUFXLFdBQVcsV0FBVyxTQUFTLFFBQVEsV0FBVyxXQUFXLFdBQVcsU0FBUyxRQUFRLFdBQVcsV0FBVyxXQUFXLFNBQVMsWUFBWSxXQUFXLFVBQVUsV0FBVyxXQUFXLFNBQVMsUUFBUSxLQUFLLFdBQVcsdUJBQXVCLE1BQU0sV0FBVyx1QkFBdUIsTUFBTSxXQUFXLHVCQUF1QixNQUFNLFdBQVcsdUJBQXVCLE1BQU0sV0FBVyx1QkFBdUIsTUFBTSxXQUFXLHVCQUF1QixNQUFNLFdBQVcsdUJBQXVCLE1BQU0sV0FBVyx1QkFBdUIsU0FBUyxRQUFRLEtBQUssV0FBVyx1QkFBdUIsTUFBTSxXQUFXLHVCQUF1QixNQUFNLFdBQVcsdUJBQXVCLE1BQU0sV0FBVyx1QkFBdUIsTUFBTSxXQUFXLHVCQUF1QixNQUFNLFdBQVcsdUJBQXVCLE1BQU0sV0FBVyx1QkFBdUIsTUFBTSxXQUFXLHVCQUF1QixTQUFTLFFBQVEsS0FBSyxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLEtBQUssVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLEtBQUssUUFBUSxLQUFLLFVBQVUsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFVBQVUsUUFBUSxLQUFLLFFBQVEsS0FBSyxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLEtBQUssVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLEtBQUssUUFBUSxLQUFLLFVBQVUsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFVBQVUsUUFBUSxLQUFLLFFBQVEsS0FBSyxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLEtBQUssVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLEtBQUssVUFBVSxLQUFLLEtBQUssV0FBVyxVQUFVLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxTQUFTLFFBQVEsVUFBVSxVQUFVLFNBQVMsUUFBUSxXQUFXLFdBQVcsVUFBVSxVQUFVLFdBQVcsV0FBVyxRQUFRLFFBQVEsVUFBVSxVQUFVLHNCQUFzQixXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsVUFBVSxXQUFXLFVBQVUsVUFBVSxVQUFVLFFBQVEsUUFBUSxVQUFVLFdBQVcsV0FBVyxXQUFXLFFBQVEsUUFBUSxVQUFVLFdBQVcsV0FBVyxXQUFXLFNBQVMsUUFBUSxXQUFXLFdBQVcsV0FBVyxTQUFTLFFBQVEsV0FBVyxXQUFXLFdBQVcsU0FBUyxRQUFRLEtBQUssV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLEtBQUssUUFBUSxLQUFLLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsUUFBUSxLQUFLLFFBQVEsS0FBSyxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsS0FBSyxRQUFRLEtBQUssV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLFFBQVEsV0FBVyxRQUFRLEtBQUssUUFBUSxXQUFXLFdBQVcsV0FBVyxTQUFTLFFBQVEsS0FBSyxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLEtBQUssVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLEtBQUssUUFBUSxXQUFXLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxXQUFXLFdBQVcsUUFBUSxRQUFRLFdBQVcsVUFBVSxVQUFVLFVBQVUsWUFBWSxZQUFZLFFBQVEsUUFBUSxZQUFZLFFBQVEsUUFBUSxVQUFVLFdBQVcsV0FBVyxVQUFVLFVBQVUsVUFBVSxXQUFXLFdBQVcsUUFBUSxRQUFRLFVBQVUsV0FBVyxXQUFXLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxXQUFXLFNBQVMsUUFBUSxLQUFLLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxVQUFVLFFBQVEsUUFBUSxVQUFVLFVBQVUsUUFBUSxLQUFLLFFBQVEsS0FBSyxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxVQUFVLFFBQVEsS0FBSyxRQUFRLFdBQVcsV0FBVyxXQUFXLFVBQVUsVUFBVSxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsV0FBVyxRQUFRLFFBQVEsV0FBVyxXQUFXLFFBQVEsUUFBUSxXQUFXLFdBQVcsU0FBUyxRQUFRLEtBQUssVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLEtBQUssUUFBUSxZQUFZLFdBQVcsUUFBUSxRQUFRLFVBQVUsVUFBVSxXQUFXLFVBQVUsVUFBVSxVQUFVLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTLFFBQVEsS0FBSyxVQUFVLFdBQVcsUUFBUSxRQUFRLFVBQVUsV0FBVyxRQUFRLFFBQVEsVUFBVSxXQUFXLFFBQVEsS0FBSyxRQUFRLGNBQWMsYUFBYSxVQUFVLFdBQVcsV0FBVyxXQUFXLFVBQVUsVUFBVSxVQUFVLFdBQVcsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFdBQVcsYUFBYSxZQUFZLGNBQWMsY0FBYyxVQUFVLFdBQVcsUUFBUSxRQUFRLGNBQWMsUUFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxZQUFZLFlBQVksV0FBVyxXQUFXLFFBQVEsUUFBUSxVQUFVLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxXQUFXLFVBQVUsV0FBVyxVQUFVLFNBQVMsUUFBUSxXQUFXLFNBQVMsUUFBUSxVQUFVLFVBQVUsVUFBVSxVQUFVLFNBQVMsUUFBUSxVQUFVLFNBQVMsUUFBUSxjQUFjLGdCQUFnQixZQUFZLGFBQWEsaUJBQWlCLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFdBQVcsY0FBYyxhQUFhLFFBQVEsUUFBUSxXQUFXLFdBQVcsUUFBUSxRQUFRLFlBQVksUUFBUSxVQUFVLFVBQVUsVUFBVSxhQUFhLGlCQUFpQixRQUFRLFFBQVEsV0FBVyxVQUFVLFFBQVEsUUFBUSxLQUFLLFdBQVcsU0FBUyxLQUFLLFFBQVEsVUFBVSxXQUFXLFVBQVUsYUFBYSxhQUFhLFFBQVEsUUFBUSxhQUFhLGlCQUFpQixRQUFRLFFBQVEsV0FBVyxhQUFhLGNBQWMsY0FBYyxhQUFhLFFBQVEsUUFBUSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsV0FBVyxRQUFRLFFBQVEsTUFBTSxXQUFXLFdBQVcsUUFBUSxRQUFRLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsVUFBVSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsVUFBVSxRQUFRLFVBQVUsVUFBVSxXQUFXLFFBQVEsUUFBUSxXQUFXLFVBQVUsVUFBVSxRQUFRLFFBQVEsVUFBVSxRQUFRLFFBQVEsV0FBVyxVQUFVLFVBQVUsUUFBUSxRQUFRLFdBQVcsUUFBUSxRQUFRLFdBQVcsV0FBVyxZQUFZLFdBQVcsVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFdBQVcsV0FBVyxRQUFRLFFBQVEsVUFBVSxXQUFXLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFFBQVEsUUFBUSxVQUFVLFVBQVUsUUFBUSxRQUFRLFVBQVUsV0FBVyxVQUFVLFdBQVcsUUFBUSxRQUFRLFVBQVUsV0FBVyxRQUFRLFFBQVEsVUFBVSxVQUFVLFFBQVEsUUFBUSxXQUFXLFdB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QXNELHlDQUF5QyxHQUFHLDRCQUE0Qix5Q0FBeUMsR0FBRyxzQ0FBc0MsOEJBQThCLEdBQUcsc0RBQXNELHlDQUF5QyxHQUFHLDRCQUE0Qix5Q0FBeUMsR0FBRyxzQ0FBc0MsOEJBQThCLEdBQUcsc0RBQXNELHlDQUF5QyxHQUFHLDRCQUE0Qix5Q0FBeUMsR0FBRyxzQ0FBc0MsOEJBQThCLEdBQUcsc0RBQXNELHlDQUF5QyxHQUFHLDRCQUE0Qix5Q0FBeUMsR0FBRyxzQ0FBc0MsOEJBQThCLEdBQUcsc0RBQXNELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLGFBQWEseUNBQXlDLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGlDQUFpQyx5Q0FBeUMsR0FBRyx1QkFBdUIseUNBQXlDLEdBQUcsaUNBQWlDLDhCQUE4QixHQUFHLGlEQUFpRCx5Q0FBeUMsR0FBRyx1QkFBdUIseUNBQXlDLEdBQUcsaUNBQWlDLDhCQUE4QixHQUFHLGlEQUFpRCx5Q0FBeUMsR0FBRyx1QkFBdUIseUNBQXlDLEdBQUcsaUNBQWlDLDhCQUE4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QUcsaUNBQWlDLDhCQUE4QixHQUFHLGlEQUFpRCx5Q0FBeUMsR0FBRyx1QkFBdUIseUNBQXlDLEdBQUcsaUNBQWlDLDhCQUE4QixHQUFHLGlEQUFpRCx5Q0FBeUMsR0FBRyx1QkFBdUIseUNBQXlDLEdBQUcsaUNBQWlDLDhCQUE4QixHQUFHLGlEQUFpRCx5Q0FBeUMsR0FBRyx1QkFBdUIseUNBQXlDLEdBQUcsaUNBQWlDLDhCQUE4QixHQUFHLGlEQUFpRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxzQkFBc0IseUNBQXlDLEdBQUcsZ0NBQWdDLDhCQUE4QixHQUFHLGdEQUFnRCx5Q0FBeUMsR0FBRyxZQUFZLHlDQUF5QyxHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxnQ0FBZ0MseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcsc0JBQXNCLHlDQUF5QyxHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnREFBZ0QseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcscUJBQXFCLHlDQUF5QyxHQUFHLCtCQUErQiw4QkFBOEIsR0FBRywrQ0FBK0MseUNBQXlDLEdBQUcsYUFBYSx5Q0FBeUMsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsaUNBQWlDLHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHVCQUF1Qix5Q0FBeUMsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsaURBQWlELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLHNCQUFzQix5Q0FBeUMsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsZ0RBQWdELHlDQUF5QyxHQUFHLGtCQUFrQix5Q0FBeUMsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsc0NBQXNDLHlDQUF5QyxHQUFHLDRCQUE0Qix5Q0FBeUMsR0FBRyxzQ0FBc0MsOEJBQThCLEdBQUcsc0RBQXNELHlDQUF5QyxHQUFHLDRCQUE0Qix5Q0FBeUMsR0FBRyxzQ0FBc0MsOEJBQThCLEdBQUcsc0RBQXNELHlDQUF5QyxHQUFHLDRCQUE0Qix5Q0FBeUMsR0FBRyxzQ0FBc0MsOEJBQThCLEdBQUcsc0RBQXNELHlDQUF5QyxHQUFHLDRCQUE0Qix5Q0FBeUMsR0FBRyxzQ0FBc0MsOEJBQThCLEdBQUcsc0RBQXNELHlDQUF5QyxHQUFHLDRCQUE0Qix5Q0FBeUMsR0FBRyxzQ0FBc0MsOEJBQThCLEdBQUcsc0RBQXNELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURBQXFELHlDQUF5QyxHQUFHLDJCQUEyQix5Q0FBeUMsR0FBRyxxQ0FBcUMsOEJBQThCLEdBQUcscURB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LGlCQUFpQix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLGtCQUFrQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxrQkFBa0IsNEJBQTRCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssa0JBQWtCLGlCQUFpQix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLG1CQUFtQiw0QkFBNEIsd0JBQXdCLGlCQUFpQixrQkFBa0IsS0FBSyxtQkFBbUIsNEJBQTRCLHdCQUF3QixpQkFBaUIsa0JBQWtCLEtBQUssbUJBQW1CLGtCQUFrQix3QkFBd0IsaUJBQWlCLGtCQUFrQixLQUFLLHlCQUF5QixpQ0FBaUMsS0FBSyx1QkFBdUIsMkJBQTJCLEtBQUssdUJBQXVCLDBCQUEwQixLQUFLLHlCQUF5QixrQ0FBa0MsS0FBSyx1QkFBdUIsNEJBQTRCLEtBQUssdUJBQXVCLDJCQUEyQixLQUFLLHlCQUF5Qix1QkFBdUIsS0FBSyx1QkFBdUIsaUJBQWlCLEtBQUssdUJBQXVCLGdCQUFnQixLQUFLLHlCQUF5QixrQ0FBa0MsS0FBSyx1QkFBdUIsNEJBQTRCLEtBQUssdUJBQXVCLDJCQUEyQixLQUFLLHlCQUF5QixrQ0FBa0MsS0FBSyx1QkFBdUIsNEJBQTRCLEtBQUssdUJBQXVCLDJCQUEyQixLQUFLLHlCQUF5Qix1QkFBdUIsS0FBSyx1QkFBdUIsaUJBQWlCLEtBQUssdUJBQXVCLGdCQUFnQixLQUFLLHlCQUF5QixrQ0FBa0MsS0FBSyx1QkFBdUIsNEJBQTRCLEtBQUssdUJBQXVCLDJCQUEyQixLQUFLLHlCQUF5QixrQ0FBa0MsS0FBSyx1QkFBdUIsNEJBQTRCLEtBQUssdUJBQXVCLDJCQUEyQixLQUFLLHlCQUF5Qix1QkFBdUIsS0FBSyx1QkFBdUIsaUJBQWlCLEtBQUssdUJBQXVCLGdCQUFnQixLQUFLLDBCQUEwQixrQ0FBa0MsS0FBSyx3QkFBd0IsNEJBQTRCLEtBQUssd0JBQXdCLDJCQUEyQixLQUFLLDBCQUEwQixrQ0FBa0MsS0FBSyx3QkFBd0IsNEJBQTRCLEtBQUssd0JBQXdCLDJCQUEyQixLQUFL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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsOEJBQThCO0FBQzlCLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixLQUFLO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsNEJBQTRCO0FBQzVCLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLElBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsU0FBUyxLQUFxQztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHNCQUFzQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsSUFBcUM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0IsMkJBQTJCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsV0FBVyxHQUFHO0FBQ2QsV0FBVyxHQUFHO0FBQ2QsV0FBVyxlQUFlO0FBQzFCLFdBQVcsR0FBRztBQUNkLFdBQVcsR0FBRztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2Q7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQSxvQ0FBb0M7QUFDcEM7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSw0QkFBNEI7O0FBRTVCO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQSwwQ0FBMEM7QUFDMUM7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0EsU0FBUztBQUNULHdCQUF3QjtBQUN4QjtBQUNBLFNBQVM7QUFDVCx3QkFBd0I7QUFDeEI7QUFDQSxTQUFTO0FBQ1QseUJBQXlCO0FBQ3pCO0FBQ0EsU0FBUztBQUNULHlCQUF5QjtBQUN6QjtBQUNBLFNBQVM7QUFDVCxrQ0FBa0M7QUFDbEM7QUFDQSxTQUFTO0FBQ1QsNEJBQTRCO0FBQzVCO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMkRBQTJEOztBQUUzRDtBQUNBOztBQUVBO0FBQ0EsMkRBQTJEO0FBQzNEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLGtCQUFrQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7O0FBR2xCO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJOzs7QUFHSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QywrQkFBK0IsRUFBQztBQUNsSCw2Q0FBNEMsRUFBRSxxQ0FBcUMsZ0NBQWdDLEVBQUM7QUFDcEgsY0FBYyxtQkFBTyxDQUFDLHNEQUFvQjtBQUMxQyx5Q0FBd0MsRUFBRSxxQ0FBcUMseUJBQXlCLEVBQUM7QUFDekcsZ0RBQStDLEVBQUUscUNBQXFDLGdDQUFnQyxFQUFDO0FBQ3ZILCtDQUE4QyxFQUFFLHFDQUFxQywrQkFBK0IsRUFBQztBQUNySCwrQ0FBOEMsRUFBRSxxQ0FBcUMsK0JBQStCLEVBQUM7QUFDckgsNkdBQTRDO0FBQzVDO0FBQ0EsV0FBVyxtQkFBTyxDQUFDLCtCQUFNO0FBQ3pCLHlDQUF3QyxFQUFFLHFDQUFxQyxzQkFBc0IsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2QzdjRwcC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vbm9kZV9tb2R1bGVzL0ByZW1peC1ydW4vcm91dGVyL2Rpc3Qvcm91dGVyLmpzIiwid2VicGFjazovL2QzdjRwcC8uL25vZGVfbW9kdWxlcy9hdXRvc2l6ZS9kaXN0L2F1dG9zaXplLmpzIiwid2VicGFjazovL2QzdjRwcC8uL25vZGVfbW9kdWxlcy9jb21wdXRlZC1zdHlsZS9kaXN0L2NvbXB1dGVkU3R5bGUuY29tbW9uanMuanMiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vc3JjL3Nhc3MvZDN2NHBwLnNjc3MiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvZ2V0VXJsLmpzIiwid2VicGFjazovL2QzdjRwcC8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzIiwid2VicGFjazovL2QzdjRwcC8uL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwid2VicGFjazovL2QzdjRwcC8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwid2VicGFjazovL2QzdjRwcC8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzIiwid2VicGFjazovL2QzdjRwcC8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovL2QzdjRwcC8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvaGFzLmpzIiwid2VicGFjazovL2QzdjRwcC8uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwid2VicGFjazovL2QzdjRwcC8uL25vZGVfbW9kdWxlcy9yZWFjdC1yb3V0ZXItZG9tL2Rpc3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJvdXRlci9kaXN0L2luZGV4LmpzIiwid2VicGFjazovL2QzdjRwcC8uL25vZGVfbW9kdWxlcy9yZWFjdC9janMvcmVhY3QuZGV2ZWxvcG1lbnQuanMiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiwid2VicGFjazovL2QzdjRwcC8uL3NyYy9zYXNzL2QzdjRwcC5zY3NzPzU0NTgiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzIiwid2VicGFjazovL2QzdjRwcC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanMiLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzIiwid2VicGFjazovL2QzdjRwcC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qcyIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qcyIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9zcmMvY21wcy9iYWRnZS9CYWRnZS50c3giLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vc3JjL2NtcHMvYnV0dG9uL0J1dHRvbi50c3giLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vc3JjL2NtcHMvYnV0dG9uL1dhdmVzLmpzIiwid2VicGFjazovL2QzdjRwcC8uL3NyYy9jbXBzL2NhcmQvQ2FyZC50c3giLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vc3JjL2NtcHMvY2hpcC9DaGlwLnRzeCIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9zcmMvY21wcy9jb2xsYXBzaWJsZS9Db2xsYXBzaWJsZS50c3giLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vc3JjL2NtcHMvY29sbGVjdGlvbnMvQ29sbGVjdGlvbi50c3giLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vc3JjL2NtcHMvZm9ybXMvRmllbGQudHN4Iiwid2VicGFjazovL2QzdjRwcC8uL3NyYy9jbXBzL2Zvcm1zL1RleHRhcmVhLnRzeCIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9zcmMvY21wcy9mb3Jtcy9saW5lLWhlaWdodC50c3giLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vc3JjL2NtcHMvZm9ybXMvcmV4LnRzeCIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9zcmMvY21wcy9pY29ucy9JY29uLnRzeCIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9zcmMvY21wcy9sYXlvdXRzL0xheW91dHMudHN4Iiwid2VicGFjazovL2QzdjRwcC8uL3NyYy9jbXBzL21vZGFsL01vZGFsLnRzeCIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9zcmMvY21wcy9uYXZpZ2F0aW9uL05hdkJhci50c3giLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vc3JjL2NtcHMvbmF2aWdhdGlvbi9OYXZpZ2F0aW9uLnRzeCIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9zcmMvY21wcy9uYXZpZ2F0aW9uL1NpZGVOYXYudHN4Iiwid2VicGFjazovL2QzdjRwcC8uL3NyYy9jbXBzL3Byb2dyZXNzL1Byb2dyZXNzLnRzeCIsIndlYnBhY2s6Ly9kM3Y0cHAvLi9zcmMvdXgvYXV0aC9Mb2dpbi50c3giLCJ3ZWJwYWNrOi8vZDN2NHBwLy4vc3JjL3V4L2luZGV4LnRzIiwid2VicGFjazovL2QzdjRwcC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9kM3Y0cHAvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vZDN2NHBwL3dlYnBhY2svcnVudGltZS9jcmVhdGUgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL2QzdjRwcC93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vZDN2NHBwL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vZDN2NHBwL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vZDN2NHBwL3dlYnBhY2svcnVudGltZS9wdWJsaWNQYXRoIiwid2VicGFjazovL2QzdjRwcC93ZWJwYWNrL3J1bnRpbWUvanNvbnAgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9kM3Y0cHAvd2VicGFjay9ydW50aW1lL25vbmNlIiwid2VicGFjazovL2QzdjRwcC8uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJkM3Y0cHBcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wiZDN2NHBwXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgKCkgPT4ge1xucmV0dXJuICIsIi8qKlxuICogQHJlbWl4LXJ1bi9yb3V0ZXIgdjEuMC4zXG4gKlxuICogQ29weXJpZ2h0IChjKSBSZW1peCBTb2Z0d2FyZSBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFLm1kIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cbmZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vI3JlZ2lvbiBUeXBlcyBhbmQgQ29uc3RhbnRzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIEFjdGlvbnMgcmVwcmVzZW50IHRoZSB0eXBlIG9mIGNoYW5nZSB0byBhIGxvY2F0aW9uIHZhbHVlLlxuICovXG52YXIgQWN0aW9uO1xuXG4oZnVuY3Rpb24gKEFjdGlvbikge1xuICAvKipcbiAgICogQSBQT1AgaW5kaWNhdGVzIGEgY2hhbmdlIHRvIGFuIGFyYml0cmFyeSBpbmRleCBpbiB0aGUgaGlzdG9yeSBzdGFjaywgc3VjaFxuICAgKiBhcyBhIGJhY2sgb3IgZm9yd2FyZCBuYXZpZ2F0aW9uLiBJdCBkb2VzIG5vdCBkZXNjcmliZSB0aGUgZGlyZWN0aW9uIG9mIHRoZVxuICAgKiBuYXZpZ2F0aW9uLCBvbmx5IHRoYXQgdGhlIGN1cnJlbnQgaW5kZXggY2hhbmdlZC5cbiAgICpcbiAgICogTm90ZTogVGhpcyBpcyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIG5ld2x5IGNyZWF0ZWQgaGlzdG9yeSBvYmplY3RzLlxuICAgKi9cbiAgQWN0aW9uW1wiUG9wXCJdID0gXCJQT1BcIjtcbiAgLyoqXG4gICAqIEEgUFVTSCBpbmRpY2F0ZXMgYSBuZXcgZW50cnkgYmVpbmcgYWRkZWQgdG8gdGhlIGhpc3Rvcnkgc3RhY2ssIHN1Y2ggYXMgd2hlblxuICAgKiBhIGxpbmsgaXMgY2xpY2tlZCBhbmQgYSBuZXcgcGFnZSBsb2Fkcy4gV2hlbiB0aGlzIGhhcHBlbnMsIGFsbCBzdWJzZXF1ZW50XG4gICAqIGVudHJpZXMgaW4gdGhlIHN0YWNrIGFyZSBsb3N0LlxuICAgKi9cblxuICBBY3Rpb25bXCJQdXNoXCJdID0gXCJQVVNIXCI7XG4gIC8qKlxuICAgKiBBIFJFUExBQ0UgaW5kaWNhdGVzIHRoZSBlbnRyeSBhdCB0aGUgY3VycmVudCBpbmRleCBpbiB0aGUgaGlzdG9yeSBzdGFja1xuICAgKiBiZWluZyByZXBsYWNlZCBieSBhIG5ldyBvbmUuXG4gICAqL1xuXG4gIEFjdGlvbltcIlJlcGxhY2VcIl0gPSBcIlJFUExBQ0VcIjtcbn0pKEFjdGlvbiB8fCAoQWN0aW9uID0ge30pKTtcblxuY29uc3QgUG9wU3RhdGVFdmVudFR5cGUgPSBcInBvcHN0YXRlXCI7XG4vKipcbiAqIE1lbW9yeSBoaXN0b3J5IHN0b3JlcyB0aGUgY3VycmVudCBsb2NhdGlvbiBpbiBtZW1vcnkuIEl0IGlzIGRlc2lnbmVkIGZvciB1c2VcbiAqIGluIHN0YXRlZnVsIG5vbi1icm93c2VyIGVudmlyb25tZW50cyBsaWtlIHRlc3RzIGFuZCBSZWFjdCBOYXRpdmUuXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlTWVtb3J5SGlzdG9yeShvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBsZXQge1xuICAgIGluaXRpYWxFbnRyaWVzID0gW1wiL1wiXSxcbiAgICBpbml0aWFsSW5kZXgsXG4gICAgdjVDb21wYXQgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgbGV0IGVudHJpZXM7IC8vIERlY2xhcmUgc28gd2UgY2FuIGFjY2VzcyBmcm9tIGNyZWF0ZU1lbW9yeUxvY2F0aW9uXG5cbiAgZW50cmllcyA9IGluaXRpYWxFbnRyaWVzLm1hcCgoZW50cnksIGluZGV4KSA9PiBjcmVhdGVNZW1vcnlMb2NhdGlvbihlbnRyeSwgdHlwZW9mIGVudHJ5ID09PSBcInN0cmluZ1wiID8gbnVsbCA6IGVudHJ5LnN0YXRlLCBpbmRleCA9PT0gMCA/IFwiZGVmYXVsdFwiIDogdW5kZWZpbmVkKSk7XG4gIGxldCBpbmRleCA9IGNsYW1wSW5kZXgoaW5pdGlhbEluZGV4ID09IG51bGwgPyBlbnRyaWVzLmxlbmd0aCAtIDEgOiBpbml0aWFsSW5kZXgpO1xuICBsZXQgYWN0aW9uID0gQWN0aW9uLlBvcDtcbiAgbGV0IGxpc3RlbmVyID0gbnVsbDtcblxuICBmdW5jdGlvbiBjbGFtcEluZGV4KG4pIHtcbiAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobiwgMCksIGVudHJpZXMubGVuZ3RoIC0gMSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDdXJyZW50TG9jYXRpb24oKSB7XG4gICAgcmV0dXJuIGVudHJpZXNbaW5kZXhdO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTWVtb3J5TG9jYXRpb24odG8sIHN0YXRlLCBrZXkpIHtcbiAgICBpZiAoc3RhdGUgPT09IHZvaWQgMCkge1xuICAgICAgc3RhdGUgPSBudWxsO1xuICAgIH1cblxuICAgIGxldCBsb2NhdGlvbiA9IGNyZWF0ZUxvY2F0aW9uKGVudHJpZXMgPyBnZXRDdXJyZW50TG9jYXRpb24oKS5wYXRobmFtZSA6IFwiL1wiLCB0bywgc3RhdGUsIGtleSk7XG4gICAgd2FybmluZyQxKGxvY2F0aW9uLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gXCIvXCIsIFwicmVsYXRpdmUgcGF0aG5hbWVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIG1lbW9yeSBoaXN0b3J5OiBcIiArIEpTT04uc3RyaW5naWZ5KHRvKSk7XG4gICAgcmV0dXJuIGxvY2F0aW9uO1xuICB9XG5cbiAgbGV0IGhpc3RvcnkgPSB7XG4gICAgZ2V0IGluZGV4KCkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH0sXG5cbiAgICBnZXQgYWN0aW9uKCkge1xuICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICB9LFxuXG4gICAgZ2V0IGxvY2F0aW9uKCkge1xuICAgICAgcmV0dXJuIGdldEN1cnJlbnRMb2NhdGlvbigpO1xuICAgIH0sXG5cbiAgICBjcmVhdGVIcmVmKHRvKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHRvID09PSBcInN0cmluZ1wiID8gdG8gOiBjcmVhdGVQYXRoKHRvKTtcbiAgICB9LFxuXG4gICAgZW5jb2RlTG9jYXRpb24obG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBsb2NhdGlvbjtcbiAgICB9LFxuXG4gICAgcHVzaCh0bywgc3RhdGUpIHtcbiAgICAgIGFjdGlvbiA9IEFjdGlvbi5QdXNoO1xuICAgICAgbGV0IG5leHRMb2NhdGlvbiA9IGNyZWF0ZU1lbW9yeUxvY2F0aW9uKHRvLCBzdGF0ZSk7XG4gICAgICBpbmRleCArPSAxO1xuICAgICAgZW50cmllcy5zcGxpY2UoaW5kZXgsIGVudHJpZXMubGVuZ3RoLCBuZXh0TG9jYXRpb24pO1xuXG4gICAgICBpZiAodjVDb21wYXQgJiYgbGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXIoe1xuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBsb2NhdGlvbjogbmV4dExvY2F0aW9uXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXBsYWNlKHRvLCBzdGF0ZSkge1xuICAgICAgYWN0aW9uID0gQWN0aW9uLlJlcGxhY2U7XG4gICAgICBsZXQgbmV4dExvY2F0aW9uID0gY3JlYXRlTWVtb3J5TG9jYXRpb24odG8sIHN0YXRlKTtcbiAgICAgIGVudHJpZXNbaW5kZXhdID0gbmV4dExvY2F0aW9uO1xuXG4gICAgICBpZiAodjVDb21wYXQgJiYgbGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXIoe1xuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBsb2NhdGlvbjogbmV4dExvY2F0aW9uXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBnbyhkZWx0YSkge1xuICAgICAgYWN0aW9uID0gQWN0aW9uLlBvcDtcbiAgICAgIGluZGV4ID0gY2xhbXBJbmRleChpbmRleCArIGRlbHRhKTtcblxuICAgICAgaWYgKGxpc3RlbmVyKSB7XG4gICAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgbG9jYXRpb246IGdldEN1cnJlbnRMb2NhdGlvbigpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBsaXN0ZW4oZm4pIHtcbiAgICAgIGxpc3RlbmVyID0gZm47XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBsaXN0ZW5lciA9IG51bGw7XG4gICAgICB9O1xuICAgIH1cblxuICB9O1xuICByZXR1cm4gaGlzdG9yeTtcbn1cbi8qKlxuICogQnJvd3NlciBoaXN0b3J5IHN0b3JlcyB0aGUgbG9jYXRpb24gaW4gcmVndWxhciBVUkxzLiBUaGlzIGlzIHRoZSBzdGFuZGFyZCBmb3JcbiAqIG1vc3Qgd2ViIGFwcHMsIGJ1dCBpdCByZXF1aXJlcyBzb21lIGNvbmZpZ3VyYXRpb24gb24gdGhlIHNlcnZlciB0byBlbnN1cmUgeW91XG4gKiBzZXJ2ZSB0aGUgc2FtZSBhcHAgYXQgbXVsdGlwbGUgVVJMcy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZW1peC1ydW4vaGlzdG9yeS90cmVlL21haW4vZG9jcy9hcGktcmVmZXJlbmNlLm1kI2NyZWF0ZWJyb3dzZXJoaXN0b3J5XG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlQnJvd3Nlckhpc3Rvcnkob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQnJvd3NlckxvY2F0aW9uKHdpbmRvdywgZ2xvYmFsSGlzdG9yeSkge1xuICAgIGxldCB7XG4gICAgICBwYXRobmFtZSxcbiAgICAgIHNlYXJjaCxcbiAgICAgIGhhc2hcbiAgICB9ID0gd2luZG93LmxvY2F0aW9uO1xuICAgIHJldHVybiBjcmVhdGVMb2NhdGlvbihcIlwiLCB7XG4gICAgICBwYXRobmFtZSxcbiAgICAgIHNlYXJjaCxcbiAgICAgIGhhc2hcbiAgICB9LCAvLyBzdGF0ZSBkZWZhdWx0cyB0byBgbnVsbGAgYmVjYXVzZSBgd2luZG93Lmhpc3Rvcnkuc3RhdGVgIGRvZXNcbiAgICBnbG9iYWxIaXN0b3J5LnN0YXRlICYmIGdsb2JhbEhpc3Rvcnkuc3RhdGUudXNyIHx8IG51bGwsIGdsb2JhbEhpc3Rvcnkuc3RhdGUgJiYgZ2xvYmFsSGlzdG9yeS5zdGF0ZS5rZXkgfHwgXCJkZWZhdWx0XCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQnJvd3NlckhyZWYod2luZG93LCB0bykge1xuICAgIHJldHVybiB0eXBlb2YgdG8gPT09IFwic3RyaW5nXCIgPyB0byA6IGNyZWF0ZVBhdGgodG8pO1xuICB9XG5cbiAgcmV0dXJuIGdldFVybEJhc2VkSGlzdG9yeShjcmVhdGVCcm93c2VyTG9jYXRpb24sIGNyZWF0ZUJyb3dzZXJIcmVmLCBudWxsLCBvcHRpb25zKTtcbn1cbi8qKlxuICogSGFzaCBoaXN0b3J5IHN0b3JlcyB0aGUgbG9jYXRpb24gaW4gd2luZG93LmxvY2F0aW9uLmhhc2guIFRoaXMgbWFrZXMgaXQgaWRlYWxcbiAqIGZvciBzaXR1YXRpb25zIHdoZXJlIHlvdSBkb24ndCB3YW50IHRvIHNlbmQgdGhlIGxvY2F0aW9uIHRvIHRoZSBzZXJ2ZXIgZm9yXG4gKiBzb21lIHJlYXNvbiwgZWl0aGVyIGJlY2F1c2UgeW91IGRvIGNhbm5vdCBjb25maWd1cmUgaXQgb3IgdGhlIFVSTCBzcGFjZSBpc1xuICogcmVzZXJ2ZWQgZm9yIHNvbWV0aGluZyBlbHNlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlbWl4LXJ1bi9oaXN0b3J5L3RyZWUvbWFpbi9kb2NzL2FwaS1yZWZlcmVuY2UubWQjY3JlYXRlaGFzaGhpc3RvcnlcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVIYXNoSGlzdG9yeShvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVIYXNoTG9jYXRpb24od2luZG93LCBnbG9iYWxIaXN0b3J5KSB7XG4gICAgbGV0IHtcbiAgICAgIHBhdGhuYW1lID0gXCIvXCIsXG4gICAgICBzZWFyY2ggPSBcIlwiLFxuICAgICAgaGFzaCA9IFwiXCJcbiAgICB9ID0gcGFyc2VQYXRoKHdpbmRvdy5sb2NhdGlvbi5oYXNoLnN1YnN0cigxKSk7XG4gICAgcmV0dXJuIGNyZWF0ZUxvY2F0aW9uKFwiXCIsIHtcbiAgICAgIHBhdGhuYW1lLFxuICAgICAgc2VhcmNoLFxuICAgICAgaGFzaFxuICAgIH0sIC8vIHN0YXRlIGRlZmF1bHRzIHRvIGBudWxsYCBiZWNhdXNlIGB3aW5kb3cuaGlzdG9yeS5zdGF0ZWAgZG9lc1xuICAgIGdsb2JhbEhpc3Rvcnkuc3RhdGUgJiYgZ2xvYmFsSGlzdG9yeS5zdGF0ZS51c3IgfHwgbnVsbCwgZ2xvYmFsSGlzdG9yeS5zdGF0ZSAmJiBnbG9iYWxIaXN0b3J5LnN0YXRlLmtleSB8fCBcImRlZmF1bHRcIik7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVIYXNoSHJlZih3aW5kb3csIHRvKSB7XG4gICAgbGV0IGJhc2UgPSB3aW5kb3cuZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJhc2VcIik7XG4gICAgbGV0IGhyZWYgPSBcIlwiO1xuXG4gICAgaWYgKGJhc2UgJiYgYmFzZS5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpKSB7XG4gICAgICBsZXQgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICBsZXQgaGFzaEluZGV4ID0gdXJsLmluZGV4T2YoXCIjXCIpO1xuICAgICAgaHJlZiA9IGhhc2hJbmRleCA9PT0gLTEgPyB1cmwgOiB1cmwuc2xpY2UoMCwgaGFzaEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaHJlZiArIFwiI1wiICsgKHR5cGVvZiB0byA9PT0gXCJzdHJpbmdcIiA/IHRvIDogY3JlYXRlUGF0aCh0bykpO1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRhdGVIYXNoTG9jYXRpb24obG9jYXRpb24sIHRvKSB7XG4gICAgd2FybmluZyQxKGxvY2F0aW9uLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gXCIvXCIsIFwicmVsYXRpdmUgcGF0aG5hbWVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGhhc2ggaGlzdG9yeS5wdXNoKFwiICsgSlNPTi5zdHJpbmdpZnkodG8pICsgXCIpXCIpO1xuICB9XG5cbiAgcmV0dXJuIGdldFVybEJhc2VkSGlzdG9yeShjcmVhdGVIYXNoTG9jYXRpb24sIGNyZWF0ZUhhc2hIcmVmLCB2YWxpZGF0ZUhhc2hMb2NhdGlvbiwgb3B0aW9ucyk7XG59IC8vI2VuZHJlZ2lvblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vI3JlZ2lvbiBVVElMU1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gd2FybmluZyQxKGNvbmQsIG1lc3NhZ2UpIHtcbiAgaWYgKCFjb25kKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIpIGNvbnNvbGUud2FybihtZXNzYWdlKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBXZWxjb21lIHRvIGRlYnVnZ2luZyBoaXN0b3J5IVxuICAgICAgLy9cbiAgICAgIC8vIFRoaXMgZXJyb3IgaXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28geW91IGNhbiBtb3JlIGVhc2lseVxuICAgICAgLy8gZmluZCB0aGUgc291cmNlIGZvciBhIHdhcm5pbmcgdGhhdCBhcHBlYXJzIGluIHRoZSBjb25zb2xlIGJ5XG4gICAgICAvLyBlbmFibGluZyBcInBhdXNlIG9uIGV4Y2VwdGlvbnNcIiBpbiB5b3VyIEphdmFTY3JpcHQgZGVidWdnZXIuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlS2V5KCkge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDgpO1xufVxuLyoqXG4gKiBGb3IgYnJvd3Nlci1iYXNlZCBoaXN0b3JpZXMsIHdlIGNvbWJpbmUgdGhlIHN0YXRlIGFuZCBrZXkgaW50byBhbiBvYmplY3RcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEhpc3RvcnlTdGF0ZShsb2NhdGlvbikge1xuICByZXR1cm4ge1xuICAgIHVzcjogbG9jYXRpb24uc3RhdGUsXG4gICAga2V5OiBsb2NhdGlvbi5rZXlcbiAgfTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIExvY2F0aW9uIG9iamVjdCB3aXRoIGEgdW5pcXVlIGtleSBmcm9tIHRoZSBnaXZlbiBQYXRoXG4gKi9cblxuXG5mdW5jdGlvbiBjcmVhdGVMb2NhdGlvbihjdXJyZW50LCB0bywgc3RhdGUsIGtleSkge1xuICBpZiAoc3RhdGUgPT09IHZvaWQgMCkge1xuICAgIHN0YXRlID0gbnVsbDtcbiAgfVxuXG4gIGxldCBsb2NhdGlvbiA9IF9leHRlbmRzKHtcbiAgICBwYXRobmFtZTogdHlwZW9mIGN1cnJlbnQgPT09IFwic3RyaW5nXCIgPyBjdXJyZW50IDogY3VycmVudC5wYXRobmFtZSxcbiAgICBzZWFyY2g6IFwiXCIsXG4gICAgaGFzaDogXCJcIlxuICB9LCB0eXBlb2YgdG8gPT09IFwic3RyaW5nXCIgPyBwYXJzZVBhdGgodG8pIDogdG8sIHtcbiAgICBzdGF0ZSxcbiAgICAvLyBUT0RPOiBUaGlzIGNvdWxkIGJlIGNsZWFuZWQgdXAuICBwdXNoL3JlcGxhY2Ugc2hvdWxkIHByb2JhYmx5IGp1c3QgdGFrZVxuICAgIC8vIGZ1bGwgTG9jYXRpb25zIG5vdyBhbmQgYXZvaWQgdGhlIG5lZWQgdG8gcnVuIHRocm91Z2ggdGhpcyBmbG93IGF0IGFsbFxuICAgIC8vIEJ1dCB0aGF0J3MgYSBwcmV0dHkgYmlnIHJlZmFjdG9yIHRvIHRoZSBjdXJyZW50IHRlc3Qgc3VpdGUgc28gZ29pbmcgdG9cbiAgICAvLyBrZWVwIGFzIGlzIGZvciB0aGUgdGltZSBiZWluZyBhbmQganVzdCBsZXQgYW55IGluY29taW5nIGtleXMgdGFrZSBwcmVjZWRlbmNlXG4gICAga2V5OiB0byAmJiB0by5rZXkgfHwga2V5IHx8IGNyZWF0ZUtleSgpXG4gIH0pO1xuXG4gIHJldHVybiBsb2NhdGlvbjtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHN0cmluZyBVUkwgcGF0aCBmcm9tIHRoZSBnaXZlbiBwYXRobmFtZSwgc2VhcmNoLCBhbmQgaGFzaCBjb21wb25lbnRzLlxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZVBhdGgoX3JlZikge1xuICBsZXQge1xuICAgIHBhdGhuYW1lID0gXCIvXCIsXG4gICAgc2VhcmNoID0gXCJcIixcbiAgICBoYXNoID0gXCJcIlxuICB9ID0gX3JlZjtcbiAgaWYgKHNlYXJjaCAmJiBzZWFyY2ggIT09IFwiP1wiKSBwYXRobmFtZSArPSBzZWFyY2guY2hhckF0KDApID09PSBcIj9cIiA/IHNlYXJjaCA6IFwiP1wiICsgc2VhcmNoO1xuICBpZiAoaGFzaCAmJiBoYXNoICE9PSBcIiNcIikgcGF0aG5hbWUgKz0gaGFzaC5jaGFyQXQoMCkgPT09IFwiI1wiID8gaGFzaCA6IFwiI1wiICsgaGFzaDtcbiAgcmV0dXJuIHBhdGhuYW1lO1xufVxuLyoqXG4gKiBQYXJzZXMgYSBzdHJpbmcgVVJMIHBhdGggaW50byBpdHMgc2VwYXJhdGUgcGF0aG5hbWUsIHNlYXJjaCwgYW5kIGhhc2ggY29tcG9uZW50cy5cbiAqL1xuXG5mdW5jdGlvbiBwYXJzZVBhdGgocGF0aCkge1xuICBsZXQgcGFyc2VkUGF0aCA9IHt9O1xuXG4gIGlmIChwYXRoKSB7XG4gICAgbGV0IGhhc2hJbmRleCA9IHBhdGguaW5kZXhPZihcIiNcIik7XG5cbiAgICBpZiAoaGFzaEluZGV4ID49IDApIHtcbiAgICAgIHBhcnNlZFBhdGguaGFzaCA9IHBhdGguc3Vic3RyKGhhc2hJbmRleCk7XG4gICAgICBwYXRoID0gcGF0aC5zdWJzdHIoMCwgaGFzaEluZGV4KTtcbiAgICB9XG5cbiAgICBsZXQgc2VhcmNoSW5kZXggPSBwYXRoLmluZGV4T2YoXCI/XCIpO1xuXG4gICAgaWYgKHNlYXJjaEluZGV4ID49IDApIHtcbiAgICAgIHBhcnNlZFBhdGguc2VhcmNoID0gcGF0aC5zdWJzdHIoc2VhcmNoSW5kZXgpO1xuICAgICAgcGF0aCA9IHBhdGguc3Vic3RyKDAsIHNlYXJjaEluZGV4KTtcbiAgICB9XG5cbiAgICBpZiAocGF0aCkge1xuICAgICAgcGFyc2VkUGF0aC5wYXRobmFtZSA9IHBhdGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnNlZFBhdGg7XG59XG5mdW5jdGlvbiBjcmVhdGVVUkwobG9jYXRpb24pIHtcbiAgLy8gd2luZG93LmxvY2F0aW9uLm9yaWdpbiBpcyBcIm51bGxcIiAodGhlIGxpdGVyYWwgc3RyaW5nIHZhbHVlKSBpbiBGaXJlZm94XG4gIC8vIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywgbm90YWJseSB3aGVuIHNlcnZpbmcgZnJvbSBhIGxvY2FsIEhUTUwgZmlsZVxuICAvLyBTZWUgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc4Mjk3XG4gIGxldCBiYXNlID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmxvY2F0aW9uICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gIT09IFwibnVsbFwiID8gd2luZG93LmxvY2F0aW9uLm9yaWdpbiA6IFwidW5rbm93bjovL3Vua25vd25cIjtcbiAgbGV0IGhyZWYgPSB0eXBlb2YgbG9jYXRpb24gPT09IFwic3RyaW5nXCIgPyBsb2NhdGlvbiA6IGNyZWF0ZVBhdGgobG9jYXRpb24pO1xuICByZXR1cm4gbmV3IFVSTChocmVmLCBiYXNlKTtcbn1cblxuZnVuY3Rpb24gZ2V0VXJsQmFzZWRIaXN0b3J5KGdldExvY2F0aW9uLCBjcmVhdGVIcmVmLCB2YWxpZGF0ZUxvY2F0aW9uLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBsZXQge1xuICAgIHdpbmRvdyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3LFxuICAgIHY1Q29tcGF0ID0gZmFsc2VcbiAgfSA9IG9wdGlvbnM7XG4gIGxldCBnbG9iYWxIaXN0b3J5ID0gd2luZG93Lmhpc3Rvcnk7XG4gIGxldCBhY3Rpb24gPSBBY3Rpb24uUG9wO1xuICBsZXQgbGlzdGVuZXIgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVBvcCgpIHtcbiAgICBhY3Rpb24gPSBBY3Rpb24uUG9wO1xuXG4gICAgaWYgKGxpc3RlbmVyKSB7XG4gICAgICBsaXN0ZW5lcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgbG9jYXRpb246IGhpc3RvcnkubG9jYXRpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHB1c2godG8sIHN0YXRlKSB7XG4gICAgYWN0aW9uID0gQWN0aW9uLlB1c2g7XG4gICAgbGV0IGxvY2F0aW9uID0gY3JlYXRlTG9jYXRpb24oaGlzdG9yeS5sb2NhdGlvbiwgdG8sIHN0YXRlKTtcbiAgICBpZiAodmFsaWRhdGVMb2NhdGlvbikgdmFsaWRhdGVMb2NhdGlvbihsb2NhdGlvbiwgdG8pO1xuICAgIGxldCBoaXN0b3J5U3RhdGUgPSBnZXRIaXN0b3J5U3RhdGUobG9jYXRpb24pO1xuICAgIGxldCB1cmwgPSBoaXN0b3J5LmNyZWF0ZUhyZWYobG9jYXRpb24pOyAvLyB0cnkuLi5jYXRjaCBiZWNhdXNlIGlPUyBsaW1pdHMgdXMgdG8gMTAwIHB1c2hTdGF0ZSBjYWxscyA6L1xuXG4gICAgdHJ5IHtcbiAgICAgIGdsb2JhbEhpc3RvcnkucHVzaFN0YXRlKGhpc3RvcnlTdGF0ZSwgXCJcIiwgdXJsKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gVGhleSBhcmUgZ29pbmcgdG8gbG9zZSBzdGF0ZSBoZXJlLCBidXQgdGhlcmUgaXMgbm8gcmVhbFxuICAgICAgLy8gd2F5IHRvIHdhcm4gdGhlbSBhYm91dCBpdCBzaW5jZSB0aGUgcGFnZSB3aWxsIHJlZnJlc2guLi5cbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsKTtcbiAgICB9XG5cbiAgICBpZiAodjVDb21wYXQgJiYgbGlzdGVuZXIpIHtcbiAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBsb2NhdGlvbjogaGlzdG9yeS5sb2NhdGlvblxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVwbGFjZSh0bywgc3RhdGUpIHtcbiAgICBhY3Rpb24gPSBBY3Rpb24uUmVwbGFjZTtcbiAgICBsZXQgbG9jYXRpb24gPSBjcmVhdGVMb2NhdGlvbihoaXN0b3J5LmxvY2F0aW9uLCB0bywgc3RhdGUpO1xuICAgIGlmICh2YWxpZGF0ZUxvY2F0aW9uKSB2YWxpZGF0ZUxvY2F0aW9uKGxvY2F0aW9uLCB0byk7XG4gICAgbGV0IGhpc3RvcnlTdGF0ZSA9IGdldEhpc3RvcnlTdGF0ZShsb2NhdGlvbik7XG4gICAgbGV0IHVybCA9IGhpc3RvcnkuY3JlYXRlSHJlZihsb2NhdGlvbik7XG4gICAgZ2xvYmFsSGlzdG9yeS5yZXBsYWNlU3RhdGUoaGlzdG9yeVN0YXRlLCBcIlwiLCB1cmwpO1xuXG4gICAgaWYgKHY1Q29tcGF0ICYmIGxpc3RlbmVyKSB7XG4gICAgICBsaXN0ZW5lcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgbG9jYXRpb246IGhpc3RvcnkubG9jYXRpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxldCBoaXN0b3J5ID0ge1xuICAgIGdldCBhY3Rpb24oKSB7XG4gICAgICByZXR1cm4gYWN0aW9uO1xuICAgIH0sXG5cbiAgICBnZXQgbG9jYXRpb24oKSB7XG4gICAgICByZXR1cm4gZ2V0TG9jYXRpb24od2luZG93LCBnbG9iYWxIaXN0b3J5KTtcbiAgICB9LFxuXG4gICAgbGlzdGVuKGZuKSB7XG4gICAgICBpZiAobGlzdGVuZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBoaXN0b3J5IG9ubHkgYWNjZXB0cyBvbmUgYWN0aXZlIGxpc3RlbmVyXCIpO1xuICAgICAgfVxuXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihQb3BTdGF0ZUV2ZW50VHlwZSwgaGFuZGxlUG9wKTtcbiAgICAgIGxpc3RlbmVyID0gZm47XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihQb3BTdGF0ZUV2ZW50VHlwZSwgaGFuZGxlUG9wKTtcbiAgICAgICAgbGlzdGVuZXIgPSBudWxsO1xuICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSHJlZih0bykge1xuICAgICAgcmV0dXJuIGNyZWF0ZUhyZWYod2luZG93LCB0byk7XG4gICAgfSxcblxuICAgIGVuY29kZUxvY2F0aW9uKGxvY2F0aW9uKSB7XG4gICAgICAvLyBFbmNvZGUgYSBMb2NhdGlvbiB0aGUgc2FtZSB3YXkgd2luZG93LmxvY2F0aW9uIHdvdWxkXG4gICAgICBsZXQgdXJsID0gY3JlYXRlVVJMKGNyZWF0ZVBhdGgobG9jYXRpb24pKTtcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgbG9jYXRpb24sIHtcbiAgICAgICAgcGF0aG5hbWU6IHVybC5wYXRobmFtZSxcbiAgICAgICAgc2VhcmNoOiB1cmwuc2VhcmNoLFxuICAgICAgICBoYXNoOiB1cmwuaGFzaFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIHB1c2gsXG4gICAgcmVwbGFjZSxcblxuICAgIGdvKG4pIHtcbiAgICAgIHJldHVybiBnbG9iYWxIaXN0b3J5LmdvKG4pO1xuICAgIH1cblxuICB9O1xuICByZXR1cm4gaGlzdG9yeTtcbn0gLy8jZW5kcmVnaW9uXG5cbnZhciBSZXN1bHRUeXBlO1xuXG4oZnVuY3Rpb24gKFJlc3VsdFR5cGUpIHtcbiAgUmVzdWx0VHlwZVtcImRhdGFcIl0gPSBcImRhdGFcIjtcbiAgUmVzdWx0VHlwZVtcImRlZmVycmVkXCJdID0gXCJkZWZlcnJlZFwiO1xuICBSZXN1bHRUeXBlW1wicmVkaXJlY3RcIl0gPSBcInJlZGlyZWN0XCI7XG4gIFJlc3VsdFR5cGVbXCJlcnJvclwiXSA9IFwiZXJyb3JcIjtcbn0pKFJlc3VsdFR5cGUgfHwgKFJlc3VsdFR5cGUgPSB7fSkpO1xuXG5mdW5jdGlvbiBpc0luZGV4Um91dGUocm91dGUpIHtcbiAgcmV0dXJuIHJvdXRlLmluZGV4ID09PSB0cnVlO1xufSAvLyBXYWxrIHRoZSByb3V0ZSB0cmVlIGdlbmVyYXRpbmcgdW5pcXVlIElEcyB3aGVyZSBuZWNlc3Nhcnkgc28gd2UgYXJlIHdvcmtpbmdcbi8vIHNvbGVseSB3aXRoIEFnbm9zdGljRGF0YVJvdXRlT2JqZWN0J3Mgd2l0aGluIHRoZSBSb3V0ZXJcblxuXG5mdW5jdGlvbiBjb252ZXJ0Um91dGVzVG9EYXRhUm91dGVzKHJvdXRlcywgcGFyZW50UGF0aCwgYWxsSWRzKSB7XG4gIGlmIChwYXJlbnRQYXRoID09PSB2b2lkIDApIHtcbiAgICBwYXJlbnRQYXRoID0gW107XG4gIH1cblxuICBpZiAoYWxsSWRzID09PSB2b2lkIDApIHtcbiAgICBhbGxJZHMgPSBuZXcgU2V0KCk7XG4gIH1cblxuICByZXR1cm4gcm91dGVzLm1hcCgocm91dGUsIGluZGV4KSA9PiB7XG4gICAgbGV0IHRyZWVQYXRoID0gWy4uLnBhcmVudFBhdGgsIGluZGV4XTtcbiAgICBsZXQgaWQgPSB0eXBlb2Ygcm91dGUuaWQgPT09IFwic3RyaW5nXCIgPyByb3V0ZS5pZCA6IHRyZWVQYXRoLmpvaW4oXCItXCIpO1xuICAgIGludmFyaWFudChyb3V0ZS5pbmRleCAhPT0gdHJ1ZSB8fCAhcm91dGUuY2hpbGRyZW4sIFwiQ2Fubm90IHNwZWNpZnkgY2hpbGRyZW4gb24gYW4gaW5kZXggcm91dGVcIik7XG4gICAgaW52YXJpYW50KCFhbGxJZHMuaGFzKGlkKSwgXCJGb3VuZCBhIHJvdXRlIGlkIGNvbGxpc2lvbiBvbiBpZCBcXFwiXCIgKyBpZCArIFwiXFxcIi4gIFJvdXRlIFwiICsgXCJpZCdzIG11c3QgYmUgZ2xvYmFsbHkgdW5pcXVlIHdpdGhpbiBEYXRhIFJvdXRlciB1c2FnZXNcIik7XG4gICAgYWxsSWRzLmFkZChpZCk7XG5cbiAgICBpZiAoaXNJbmRleFJvdXRlKHJvdXRlKSkge1xuICAgICAgbGV0IGluZGV4Um91dGUgPSBfZXh0ZW5kcyh7fSwgcm91dGUsIHtcbiAgICAgICAgaWRcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gaW5kZXhSb3V0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHBhdGhPckxheW91dFJvdXRlID0gX2V4dGVuZHMoe30sIHJvdXRlLCB7XG4gICAgICAgIGlkLFxuICAgICAgICBjaGlsZHJlbjogcm91dGUuY2hpbGRyZW4gPyBjb252ZXJ0Um91dGVzVG9EYXRhUm91dGVzKHJvdXRlLmNoaWxkcmVuLCB0cmVlUGF0aCwgYWxsSWRzKSA6IHVuZGVmaW5lZFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBwYXRoT3JMYXlvdXRSb3V0ZTtcbiAgICB9XG4gIH0pO1xufVxuLyoqXG4gKiBNYXRjaGVzIHRoZSBnaXZlbiByb3V0ZXMgdG8gYSBsb2NhdGlvbiBhbmQgcmV0dXJucyB0aGUgbWF0Y2ggZGF0YS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvdXRpbHMvbWF0Y2gtcm91dGVzXG4gKi9cblxuZnVuY3Rpb24gbWF0Y2hSb3V0ZXMocm91dGVzLCBsb2NhdGlvbkFyZywgYmFzZW5hbWUpIHtcbiAgaWYgKGJhc2VuYW1lID09PSB2b2lkIDApIHtcbiAgICBiYXNlbmFtZSA9IFwiL1wiO1xuICB9XG5cbiAgbGV0IGxvY2F0aW9uID0gdHlwZW9mIGxvY2F0aW9uQXJnID09PSBcInN0cmluZ1wiID8gcGFyc2VQYXRoKGxvY2F0aW9uQXJnKSA6IGxvY2F0aW9uQXJnO1xuICBsZXQgcGF0aG5hbWUgPSBzdHJpcEJhc2VuYW1lKGxvY2F0aW9uLnBhdGhuYW1lIHx8IFwiL1wiLCBiYXNlbmFtZSk7XG5cbiAgaWYgKHBhdGhuYW1lID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBicmFuY2hlcyA9IGZsYXR0ZW5Sb3V0ZXMocm91dGVzKTtcbiAgcmFua1JvdXRlQnJhbmNoZXMoYnJhbmNoZXMpO1xuICBsZXQgbWF0Y2hlcyA9IG51bGw7XG5cbiAgZm9yIChsZXQgaSA9IDA7IG1hdGNoZXMgPT0gbnVsbCAmJiBpIDwgYnJhbmNoZXMubGVuZ3RoOyArK2kpIHtcbiAgICBtYXRjaGVzID0gbWF0Y2hSb3V0ZUJyYW5jaChicmFuY2hlc1tpXSwgLy8gSW5jb21pbmcgcGF0aG5hbWVzIGFyZSBnZW5lcmFsbHkgZW5jb2RlZCBmcm9tIGVpdGhlciB3aW5kb3cubG9jYXRpb25cbiAgICAvLyBvciBmcm9tIHJvdXRlci5uYXZpZ2F0ZSwgYnV0IHdlIHdhbnQgdG8gbWF0Y2ggYWdhaW5zdCB0aGUgdW5lbmNvZGVkXG4gICAgLy8gcGF0aHMgaW4gdGhlIHJvdXRlIGRlZmluaXRpb25zLiAgTWVtb3J5IHJvdXRlciBsb2NhdGlvbnMgd29uJ3QgYmVcbiAgICAvLyBlbmNvZGVkIGhlcmUgYnV0IHRoZXJlIGFsc28gc2hvdWxkbid0IGJlIGFueXRoaW5nIHRvIGRlY29kZSBzbyB0aGlzXG4gICAgLy8gc2hvdWxkIGJlIGEgc2FmZSBvcGVyYXRpb24uICBUaGlzIGF2b2lkcyBuZWVkaW5nIG1hdGNoUm91dGVzIHRvIGJlXG4gICAgLy8gaGlzdG9yeS1hd2FyZS5cbiAgICBzYWZlbHlEZWNvZGVVUkkocGF0aG5hbWUpKTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBmbGF0dGVuUm91dGVzKHJvdXRlcywgYnJhbmNoZXMsIHBhcmVudHNNZXRhLCBwYXJlbnRQYXRoKSB7XG4gIGlmIChicmFuY2hlcyA9PT0gdm9pZCAwKSB7XG4gICAgYnJhbmNoZXMgPSBbXTtcbiAgfVxuXG4gIGlmIChwYXJlbnRzTWV0YSA9PT0gdm9pZCAwKSB7XG4gICAgcGFyZW50c01ldGEgPSBbXTtcbiAgfVxuXG4gIGlmIChwYXJlbnRQYXRoID09PSB2b2lkIDApIHtcbiAgICBwYXJlbnRQYXRoID0gXCJcIjtcbiAgfVxuXG4gIHJvdXRlcy5mb3JFYWNoKChyb3V0ZSwgaW5kZXgpID0+IHtcbiAgICBsZXQgbWV0YSA9IHtcbiAgICAgIHJlbGF0aXZlUGF0aDogcm91dGUucGF0aCB8fCBcIlwiLFxuICAgICAgY2FzZVNlbnNpdGl2ZTogcm91dGUuY2FzZVNlbnNpdGl2ZSA9PT0gdHJ1ZSxcbiAgICAgIGNoaWxkcmVuSW5kZXg6IGluZGV4LFxuICAgICAgcm91dGVcbiAgICB9O1xuXG4gICAgaWYgKG1ldGEucmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICBpbnZhcmlhbnQobWV0YS5yZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChwYXJlbnRQYXRoKSwgXCJBYnNvbHV0ZSByb3V0ZSBwYXRoIFxcXCJcIiArIG1ldGEucmVsYXRpdmVQYXRoICsgXCJcXFwiIG5lc3RlZCB1bmRlciBwYXRoIFwiICsgKFwiXFxcIlwiICsgcGFyZW50UGF0aCArIFwiXFxcIiBpcyBub3QgdmFsaWQuIEFuIGFic29sdXRlIGNoaWxkIHJvdXRlIHBhdGggXCIpICsgXCJtdXN0IHN0YXJ0IHdpdGggdGhlIGNvbWJpbmVkIHBhdGggb2YgYWxsIGl0cyBwYXJlbnQgcm91dGVzLlwiKTtcbiAgICAgIG1ldGEucmVsYXRpdmVQYXRoID0gbWV0YS5yZWxhdGl2ZVBhdGguc2xpY2UocGFyZW50UGF0aC5sZW5ndGgpO1xuICAgIH1cblxuICAgIGxldCBwYXRoID0gam9pblBhdGhzKFtwYXJlbnRQYXRoLCBtZXRhLnJlbGF0aXZlUGF0aF0pO1xuICAgIGxldCByb3V0ZXNNZXRhID0gcGFyZW50c01ldGEuY29uY2F0KG1ldGEpOyAvLyBBZGQgdGhlIGNoaWxkcmVuIGJlZm9yZSBhZGRpbmcgdGhpcyByb3V0ZSB0byB0aGUgYXJyYXkgc28gd2UgdHJhdmVyc2UgdGhlXG4gICAgLy8gcm91dGUgdHJlZSBkZXB0aC1maXJzdCBhbmQgY2hpbGQgcm91dGVzIGFwcGVhciBiZWZvcmUgdGhlaXIgcGFyZW50cyBpblxuICAgIC8vIHRoZSBcImZsYXR0ZW5lZFwiIHZlcnNpb24uXG5cbiAgICBpZiAocm91dGUuY2hpbGRyZW4gJiYgcm91dGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgaW52YXJpYW50KCAvLyBPdXIgdHlwZXMga25vdyBiZXR0ZXIsIGJ1dCBydW50aW1lIEpTIG1heSBub3QhXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICByb3V0ZS5pbmRleCAhPT0gdHJ1ZSwgXCJJbmRleCByb3V0ZXMgbXVzdCBub3QgaGF2ZSBjaGlsZCByb3V0ZXMuIFBsZWFzZSByZW1vdmUgXCIgKyAoXCJhbGwgY2hpbGQgcm91dGVzIGZyb20gcm91dGUgcGF0aCBcXFwiXCIgKyBwYXRoICsgXCJcXFwiLlwiKSk7XG4gICAgICBmbGF0dGVuUm91dGVzKHJvdXRlLmNoaWxkcmVuLCBicmFuY2hlcywgcm91dGVzTWV0YSwgcGF0aCk7XG4gICAgfSAvLyBSb3V0ZXMgd2l0aG91dCBhIHBhdGggc2hvdWxkbid0IGV2ZXIgbWF0Y2ggYnkgdGhlbXNlbHZlcyB1bmxlc3MgdGhleSBhcmVcbiAgICAvLyBpbmRleCByb3V0ZXMsIHNvIGRvbid0IGFkZCB0aGVtIHRvIHRoZSBsaXN0IG9mIHBvc3NpYmxlIGJyYW5jaGVzLlxuXG5cbiAgICBpZiAocm91dGUucGF0aCA9PSBudWxsICYmICFyb3V0ZS5pbmRleCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGJyYW5jaGVzLnB1c2goe1xuICAgICAgcGF0aCxcbiAgICAgIHNjb3JlOiBjb21wdXRlU2NvcmUocGF0aCwgcm91dGUuaW5kZXgpLFxuICAgICAgcm91dGVzTWV0YVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGJyYW5jaGVzO1xufVxuXG5mdW5jdGlvbiByYW5rUm91dGVCcmFuY2hlcyhicmFuY2hlcykge1xuICBicmFuY2hlcy5zb3J0KChhLCBiKSA9PiBhLnNjb3JlICE9PSBiLnNjb3JlID8gYi5zY29yZSAtIGEuc2NvcmUgLy8gSGlnaGVyIHNjb3JlIGZpcnN0XG4gIDogY29tcGFyZUluZGV4ZXMoYS5yb3V0ZXNNZXRhLm1hcChtZXRhID0+IG1ldGEuY2hpbGRyZW5JbmRleCksIGIucm91dGVzTWV0YS5tYXAobWV0YSA9PiBtZXRhLmNoaWxkcmVuSW5kZXgpKSk7XG59XG5cbmNvbnN0IHBhcmFtUmUgPSAvXjpcXHcrJC87XG5jb25zdCBkeW5hbWljU2VnbWVudFZhbHVlID0gMztcbmNvbnN0IGluZGV4Um91dGVWYWx1ZSA9IDI7XG5jb25zdCBlbXB0eVNlZ21lbnRWYWx1ZSA9IDE7XG5jb25zdCBzdGF0aWNTZWdtZW50VmFsdWUgPSAxMDtcbmNvbnN0IHNwbGF0UGVuYWx0eSA9IC0yO1xuXG5jb25zdCBpc1NwbGF0ID0gcyA9PiBzID09PSBcIipcIjtcblxuZnVuY3Rpb24gY29tcHV0ZVNjb3JlKHBhdGgsIGluZGV4KSB7XG4gIGxldCBzZWdtZW50cyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuICBsZXQgaW5pdGlhbFNjb3JlID0gc2VnbWVudHMubGVuZ3RoO1xuXG4gIGlmIChzZWdtZW50cy5zb21lKGlzU3BsYXQpKSB7XG4gICAgaW5pdGlhbFNjb3JlICs9IHNwbGF0UGVuYWx0eTtcbiAgfVxuXG4gIGlmIChpbmRleCkge1xuICAgIGluaXRpYWxTY29yZSArPSBpbmRleFJvdXRlVmFsdWU7XG4gIH1cblxuICByZXR1cm4gc2VnbWVudHMuZmlsdGVyKHMgPT4gIWlzU3BsYXQocykpLnJlZHVjZSgoc2NvcmUsIHNlZ21lbnQpID0+IHNjb3JlICsgKHBhcmFtUmUudGVzdChzZWdtZW50KSA/IGR5bmFtaWNTZWdtZW50VmFsdWUgOiBzZWdtZW50ID09PSBcIlwiID8gZW1wdHlTZWdtZW50VmFsdWUgOiBzdGF0aWNTZWdtZW50VmFsdWUpLCBpbml0aWFsU2NvcmUpO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlSW5kZXhlcyhhLCBiKSB7XG4gIGxldCBzaWJsaW5ncyA9IGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJiBhLnNsaWNlKDAsIC0xKS5ldmVyeSgobiwgaSkgPT4gbiA9PT0gYltpXSk7XG4gIHJldHVybiBzaWJsaW5ncyA/IC8vIElmIHR3byByb3V0ZXMgYXJlIHNpYmxpbmdzLCB3ZSBzaG91bGQgdHJ5IHRvIG1hdGNoIHRoZSBlYXJsaWVyIHNpYmxpbmdcbiAgLy8gZmlyc3QuIFRoaXMgYWxsb3dzIHBlb3BsZSB0byBoYXZlIGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgdGhlIG1hdGNoaW5nXG4gIC8vIGJlaGF2aW9yIGJ5IHNpbXBseSBwdXR0aW5nIHJvdXRlcyB3aXRoIGlkZW50aWNhbCBwYXRocyBpbiB0aGUgb3JkZXIgdGhleVxuICAvLyB3YW50IHRoZW0gdHJpZWQuXG4gIGFbYS5sZW5ndGggLSAxXSAtIGJbYi5sZW5ndGggLSAxXSA6IC8vIE90aGVyd2lzZSwgaXQgZG9lc24ndCByZWFsbHkgbWFrZSBzZW5zZSB0byByYW5rIG5vbi1zaWJsaW5ncyBieSBpbmRleCxcbiAgLy8gc28gdGhleSBzb3J0IGVxdWFsbHkuXG4gIDA7XG59XG5cbmZ1bmN0aW9uIG1hdGNoUm91dGVCcmFuY2goYnJhbmNoLCBwYXRobmFtZSkge1xuICBsZXQge1xuICAgIHJvdXRlc01ldGFcbiAgfSA9IGJyYW5jaDtcbiAgbGV0IG1hdGNoZWRQYXJhbXMgPSB7fTtcbiAgbGV0IG1hdGNoZWRQYXRobmFtZSA9IFwiL1wiO1xuICBsZXQgbWF0Y2hlcyA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm91dGVzTWV0YS5sZW5ndGg7ICsraSkge1xuICAgIGxldCBtZXRhID0gcm91dGVzTWV0YVtpXTtcbiAgICBsZXQgZW5kID0gaSA9PT0gcm91dGVzTWV0YS5sZW5ndGggLSAxO1xuICAgIGxldCByZW1haW5pbmdQYXRobmFtZSA9IG1hdGNoZWRQYXRobmFtZSA9PT0gXCIvXCIgPyBwYXRobmFtZSA6IHBhdGhuYW1lLnNsaWNlKG1hdGNoZWRQYXRobmFtZS5sZW5ndGgpIHx8IFwiL1wiO1xuICAgIGxldCBtYXRjaCA9IG1hdGNoUGF0aCh7XG4gICAgICBwYXRoOiBtZXRhLnJlbGF0aXZlUGF0aCxcbiAgICAgIGNhc2VTZW5zaXRpdmU6IG1ldGEuY2FzZVNlbnNpdGl2ZSxcbiAgICAgIGVuZFxuICAgIH0sIHJlbWFpbmluZ1BhdGhuYW1lKTtcbiAgICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDtcbiAgICBPYmplY3QuYXNzaWduKG1hdGNoZWRQYXJhbXMsIG1hdGNoLnBhcmFtcyk7XG4gICAgbGV0IHJvdXRlID0gbWV0YS5yb3V0ZTtcbiAgICBtYXRjaGVzLnB1c2goe1xuICAgICAgLy8gVE9ETzogQ2FuIHRoaXMgYXMgYmUgYXZvaWRlZD9cbiAgICAgIHBhcmFtczogbWF0Y2hlZFBhcmFtcyxcbiAgICAgIHBhdGhuYW1lOiBqb2luUGF0aHMoW21hdGNoZWRQYXRobmFtZSwgbWF0Y2gucGF0aG5hbWVdKSxcbiAgICAgIHBhdGhuYW1lQmFzZTogbm9ybWFsaXplUGF0aG5hbWUoam9pblBhdGhzKFttYXRjaGVkUGF0aG5hbWUsIG1hdGNoLnBhdGhuYW1lQmFzZV0pKSxcbiAgICAgIHJvdXRlXG4gICAgfSk7XG5cbiAgICBpZiAobWF0Y2gucGF0aG5hbWVCYXNlICE9PSBcIi9cIikge1xuICAgICAgbWF0Y2hlZFBhdGhuYW1lID0gam9pblBhdGhzKFttYXRjaGVkUGF0aG5hbWUsIG1hdGNoLnBhdGhuYW1lQmFzZV0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYXRjaGVzO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgcGF0aCB3aXRoIHBhcmFtcyBpbnRlcnBvbGF0ZWQuXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9kb2NzL2VuL3Y2L3V0aWxzL2dlbmVyYXRlLXBhdGhcbiAqL1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlUGF0aChwYXRoLCBwYXJhbXMpIHtcbiAgaWYgKHBhcmFtcyA9PT0gdm9pZCAwKSB7XG4gICAgcGFyYW1zID0ge307XG4gIH1cblxuICByZXR1cm4gcGF0aC5yZXBsYWNlKC86KFxcdyspL2csIChfLCBrZXkpID0+IHtcbiAgICBpbnZhcmlhbnQocGFyYW1zW2tleV0gIT0gbnVsbCwgXCJNaXNzaW5nIFxcXCI6XCIgKyBrZXkgKyBcIlxcXCIgcGFyYW1cIik7XG4gICAgcmV0dXJuIHBhcmFtc1trZXldO1xuICB9KS5yZXBsYWNlKC8oXFwvPylcXCovLCAoXywgcHJlZml4LCBfXywgc3RyKSA9PiB7XG4gICAgY29uc3Qgc3RhciA9IFwiKlwiO1xuXG4gICAgaWYgKHBhcmFtc1tzdGFyXSA9PSBudWxsKSB7XG4gICAgICAvLyBJZiBubyBzcGxhdCB3YXMgcHJvdmlkZWQsIHRyaW0gdGhlIHRyYWlsaW5nIHNsYXNoIF91bmxlc3NfIGl0J3NcbiAgICAgIC8vIHRoZSBlbnRpcmUgcGF0aFxuICAgICAgcmV0dXJuIHN0ciA9PT0gXCIvKlwiID8gXCIvXCIgOiBcIlwiO1xuICAgIH0gLy8gQXBwbHkgdGhlIHNwbGF0XG5cblxuICAgIHJldHVybiBcIlwiICsgcHJlZml4ICsgcGFyYW1zW3N0YXJdO1xuICB9KTtcbn1cbi8qKlxuICogUGVyZm9ybXMgcGF0dGVybiBtYXRjaGluZyBvbiBhIFVSTCBwYXRobmFtZSBhbmQgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dFxuICogdGhlIG1hdGNoLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni91dGlscy9tYXRjaC1wYXRoXG4gKi9cblxuZnVuY3Rpb24gbWF0Y2hQYXRoKHBhdHRlcm4sIHBhdGhuYW1lKSB7XG4gIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gXCJzdHJpbmdcIikge1xuICAgIHBhdHRlcm4gPSB7XG4gICAgICBwYXRoOiBwYXR0ZXJuLFxuICAgICAgY2FzZVNlbnNpdGl2ZTogZmFsc2UsXG4gICAgICBlbmQ6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgbGV0IFttYXRjaGVyLCBwYXJhbU5hbWVzXSA9IGNvbXBpbGVQYXRoKHBhdHRlcm4ucGF0aCwgcGF0dGVybi5jYXNlU2Vuc2l0aXZlLCBwYXR0ZXJuLmVuZCk7XG4gIGxldCBtYXRjaCA9IHBhdGhuYW1lLm1hdGNoKG1hdGNoZXIpO1xuICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDtcbiAgbGV0IG1hdGNoZWRQYXRobmFtZSA9IG1hdGNoWzBdO1xuICBsZXQgcGF0aG5hbWVCYXNlID0gbWF0Y2hlZFBhdGhuYW1lLnJlcGxhY2UoLyguKVxcLyskLywgXCIkMVwiKTtcbiAgbGV0IGNhcHR1cmVHcm91cHMgPSBtYXRjaC5zbGljZSgxKTtcbiAgbGV0IHBhcmFtcyA9IHBhcmFtTmFtZXMucmVkdWNlKChtZW1vLCBwYXJhbU5hbWUsIGluZGV4KSA9PiB7XG4gICAgLy8gV2UgbmVlZCB0byBjb21wdXRlIHRoZSBwYXRobmFtZUJhc2UgaGVyZSB1c2luZyB0aGUgcmF3IHNwbGF0IHZhbHVlXG4gICAgLy8gaW5zdGVhZCBvZiB1c2luZyBwYXJhbXNbXCIqXCJdIGxhdGVyIGJlY2F1c2UgaXQgd2lsbCBiZSBkZWNvZGVkIHRoZW5cbiAgICBpZiAocGFyYW1OYW1lID09PSBcIipcIikge1xuICAgICAgbGV0IHNwbGF0VmFsdWUgPSBjYXB0dXJlR3JvdXBzW2luZGV4XSB8fCBcIlwiO1xuICAgICAgcGF0aG5hbWVCYXNlID0gbWF0Y2hlZFBhdGhuYW1lLnNsaWNlKDAsIG1hdGNoZWRQYXRobmFtZS5sZW5ndGggLSBzcGxhdFZhbHVlLmxlbmd0aCkucmVwbGFjZSgvKC4pXFwvKyQvLCBcIiQxXCIpO1xuICAgIH1cblxuICAgIG1lbW9bcGFyYW1OYW1lXSA9IHNhZmVseURlY29kZVVSSUNvbXBvbmVudChjYXB0dXJlR3JvdXBzW2luZGV4XSB8fCBcIlwiLCBwYXJhbU5hbWUpO1xuICAgIHJldHVybiBtZW1vO1xuICB9LCB7fSk7XG4gIHJldHVybiB7XG4gICAgcGFyYW1zLFxuICAgIHBhdGhuYW1lOiBtYXRjaGVkUGF0aG5hbWUsXG4gICAgcGF0aG5hbWVCYXNlLFxuICAgIHBhdHRlcm5cbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcGlsZVBhdGgocGF0aCwgY2FzZVNlbnNpdGl2ZSwgZW5kKSB7XG4gIGlmIChjYXNlU2Vuc2l0aXZlID09PSB2b2lkIDApIHtcbiAgICBjYXNlU2Vuc2l0aXZlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoZW5kID09PSB2b2lkIDApIHtcbiAgICBlbmQgPSB0cnVlO1xuICB9XG5cbiAgd2FybmluZyhwYXRoID09PSBcIipcIiB8fCAhcGF0aC5lbmRzV2l0aChcIipcIikgfHwgcGF0aC5lbmRzV2l0aChcIi8qXCIpLCBcIlJvdXRlIHBhdGggXFxcIlwiICsgcGF0aCArIFwiXFxcIiB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgaXQgd2VyZSBcIiArIChcIlxcXCJcIiArIHBhdGgucmVwbGFjZSgvXFwqJC8sIFwiLypcIikgKyBcIlxcXCIgYmVjYXVzZSB0aGUgYCpgIGNoYXJhY3RlciBtdXN0IFwiKSArIFwiYWx3YXlzIGZvbGxvdyBhIGAvYCBpbiB0aGUgcGF0dGVybi4gVG8gZ2V0IHJpZCBvZiB0aGlzIHdhcm5pbmcsIFwiICsgKFwicGxlYXNlIGNoYW5nZSB0aGUgcm91dGUgcGF0aCB0byBcXFwiXCIgKyBwYXRoLnJlcGxhY2UoL1xcKiQvLCBcIi8qXCIpICsgXCJcXFwiLlwiKSk7XG4gIGxldCBwYXJhbU5hbWVzID0gW107XG4gIGxldCByZWdleHBTb3VyY2UgPSBcIl5cIiArIHBhdGgucmVwbGFjZSgvXFwvKlxcKj8kLywgXCJcIikgLy8gSWdub3JlIHRyYWlsaW5nIC8gYW5kIC8qLCB3ZSdsbCBoYW5kbGUgaXQgYmVsb3dcbiAgLnJlcGxhY2UoL15cXC8qLywgXCIvXCIpIC8vIE1ha2Ugc3VyZSBpdCBoYXMgYSBsZWFkaW5nIC9cbiAgLnJlcGxhY2UoL1tcXFxcLiorXiQ/e318KClbXFxdXS9nLCBcIlxcXFwkJlwiKSAvLyBFc2NhcGUgc3BlY2lhbCByZWdleCBjaGFyc1xuICAucmVwbGFjZSgvOihcXHcrKS9nLCAoXywgcGFyYW1OYW1lKSA9PiB7XG4gICAgcGFyYW1OYW1lcy5wdXNoKHBhcmFtTmFtZSk7XG4gICAgcmV0dXJuIFwiKFteXFxcXC9dKylcIjtcbiAgfSk7XG5cbiAgaWYgKHBhdGguZW5kc1dpdGgoXCIqXCIpKSB7XG4gICAgcGFyYW1OYW1lcy5wdXNoKFwiKlwiKTtcbiAgICByZWdleHBTb3VyY2UgKz0gcGF0aCA9PT0gXCIqXCIgfHwgcGF0aCA9PT0gXCIvKlwiID8gXCIoLiopJFwiIC8vIEFscmVhZHkgbWF0Y2hlZCB0aGUgaW5pdGlhbCAvLCBqdXN0IG1hdGNoIHRoZSByZXN0XG4gICAgOiBcIig/OlxcXFwvKC4rKXxcXFxcLyopJFwiOyAvLyBEb24ndCBpbmNsdWRlIHRoZSAvIGluIHBhcmFtc1tcIipcIl1cbiAgfSBlbHNlIGlmIChlbmQpIHtcbiAgICAvLyBXaGVuIG1hdGNoaW5nIHRvIHRoZSBlbmQsIGlnbm9yZSB0cmFpbGluZyBzbGFzaGVzXG4gICAgcmVnZXhwU291cmNlICs9IFwiXFxcXC8qJFwiO1xuICB9IGVsc2UgaWYgKHBhdGggIT09IFwiXCIgJiYgcGF0aCAhPT0gXCIvXCIpIHtcbiAgICAvLyBJZiBvdXIgcGF0aCBpcyBub24tZW1wdHkgYW5kIGNvbnRhaW5zIGFueXRoaW5nIGJleW9uZCBhbiBpbml0aWFsIHNsYXNoLFxuICAgIC8vIHRoZW4gd2UgaGF2ZSBfc29tZV8gZm9ybSBvZiBwYXRoIGluIG91ciByZWdleCBzbyB3ZSBzaG91bGQgZXhwZWN0IHRvXG4gICAgLy8gbWF0Y2ggb25seSBpZiB3ZSBmaW5kIHRoZSBlbmQgb2YgdGhpcyBwYXRoIHNlZ21lbnQuICBMb29rIGZvciBhbiBvcHRpb25hbFxuICAgIC8vIG5vbi1jYXB0dXJlZCB0cmFpbGluZyBzbGFzaCAodG8gbWF0Y2ggYSBwb3J0aW9uIG9mIHRoZSBVUkwpIG9yIHRoZSBlbmRcbiAgICAvLyBvZiB0aGUgcGF0aCAoaWYgd2UndmUgbWF0Y2hlZCB0byB0aGUgZW5kKS4gIFdlIHVzZWQgdG8gZG8gdGhpcyB3aXRoIGFcbiAgICAvLyB3b3JkIGJvdW5kYXJ5IGJ1dCB0aGF0IGdpdmVzIGZhbHNlIHBvc2l0aXZlcyBvbiByb3V0ZXMgbGlrZVxuICAgIC8vIC91c2VyLXByZWZlcmVuY2VzIHNpbmNlIGAtYCBjb3VudHMgYXMgYSB3b3JkIGJvdW5kYXJ5LlxuICAgIHJlZ2V4cFNvdXJjZSArPSBcIig/Oig/PVxcXFwvfCQpKVwiO1xuICB9IGVsc2UgO1xuXG4gIGxldCBtYXRjaGVyID0gbmV3IFJlZ0V4cChyZWdleHBTb3VyY2UsIGNhc2VTZW5zaXRpdmUgPyB1bmRlZmluZWQgOiBcImlcIik7XG4gIHJldHVybiBbbWF0Y2hlciwgcGFyYW1OYW1lc107XG59XG5cbmZ1bmN0aW9uIHNhZmVseURlY29kZVVSSSh2YWx1ZSkge1xuICB0cnkge1xuICAgIHJldHVybiBkZWNvZGVVUkkodmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHdhcm5pbmcoZmFsc2UsIFwiVGhlIFVSTCBwYXRoIFxcXCJcIiArIHZhbHVlICsgXCJcXFwiIGNvdWxkIG5vdCBiZSBkZWNvZGVkIGJlY2F1c2UgaXQgaXMgaXMgYSBcIiArIFwibWFsZm9ybWVkIFVSTCBzZWdtZW50LiBUaGlzIGlzIHByb2JhYmx5IGR1ZSB0byBhIGJhZCBwZXJjZW50IFwiICsgKFwiZW5jb2RpbmcgKFwiICsgZXJyb3IgKyBcIikuXCIpKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FmZWx5RGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlLCBwYXJhbU5hbWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB3YXJuaW5nKGZhbHNlLCBcIlRoZSB2YWx1ZSBmb3IgdGhlIFVSTCBwYXJhbSBcXFwiXCIgKyBwYXJhbU5hbWUgKyBcIlxcXCIgd2lsbCBub3QgYmUgZGVjb2RlZCBiZWNhdXNlXCIgKyAoXCIgdGhlIHN0cmluZyBcXFwiXCIgKyB2YWx1ZSArIFwiXFxcIiBpcyBhIG1hbGZvcm1lZCBVUkwgc2VnbWVudC4gVGhpcyBpcyBwcm9iYWJseVwiKSArIChcIiBkdWUgdG8gYSBiYWQgcGVyY2VudCBlbmNvZGluZyAoXCIgKyBlcnJvciArIFwiKS5cIikpO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gc3RyaXBCYXNlbmFtZShwYXRobmFtZSwgYmFzZW5hbWUpIHtcbiAgaWYgKGJhc2VuYW1lID09PSBcIi9cIikgcmV0dXJuIHBhdGhuYW1lO1xuXG4gIGlmICghcGF0aG5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGJhc2VuYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gV2Ugd2FudCB0byBsZWF2ZSB0cmFpbGluZyBzbGFzaCBiZWhhdmlvciBpbiB0aGUgdXNlcidzIGNvbnRyb2wsIHNvIGlmIHRoZXlcbiAgLy8gc3BlY2lmeSBhIGJhc2VuYW1lIHdpdGggYSB0cmFpbGluZyBzbGFzaCwgd2Ugc2hvdWxkIHN1cHBvcnQgaXRcblxuXG4gIGxldCBzdGFydEluZGV4ID0gYmFzZW5hbWUuZW5kc1dpdGgoXCIvXCIpID8gYmFzZW5hbWUubGVuZ3RoIC0gMSA6IGJhc2VuYW1lLmxlbmd0aDtcbiAgbGV0IG5leHRDaGFyID0gcGF0aG5hbWUuY2hhckF0KHN0YXJ0SW5kZXgpO1xuXG4gIGlmIChuZXh0Q2hhciAmJiBuZXh0Q2hhciAhPT0gXCIvXCIpIHtcbiAgICAvLyBwYXRobmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIGJhc2VuYW1lL1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHBhdGhuYW1lLnNsaWNlKHN0YXJ0SW5kZXgpIHx8IFwiL1wiO1xufVxuZnVuY3Rpb24gaW52YXJpYW50KHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gd2FybmluZyhjb25kLCBtZXNzYWdlKSB7XG4gIGlmICghY29uZCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiKSBjb25zb2xlLndhcm4obWVzc2FnZSk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgUm91dGVyIVxuICAgICAgLy9cbiAgICAgIC8vIFRoaXMgZXJyb3IgaXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28geW91IGNhbiBtb3JlIGVhc2lseVxuICAgICAgLy8gZmluZCB0aGUgc291cmNlIGZvciBhIHdhcm5pbmcgdGhhdCBhcHBlYXJzIGluIHRoZSBjb25zb2xlIGJ5XG4gICAgICAvLyBlbmFibGluZyBcInBhdXNlIG9uIGV4Y2VwdGlvbnNcIiBpbiB5b3VyIEphdmFTY3JpcHQgZGVidWdnZXIuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbn1cbi8qKlxuICogUmV0dXJucyBhIHJlc29sdmVkIHBhdGggb2JqZWN0IHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBwYXRobmFtZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvdXRpbHMvcmVzb2x2ZS1wYXRoXG4gKi9cblxuZnVuY3Rpb24gcmVzb2x2ZVBhdGgodG8sIGZyb21QYXRobmFtZSkge1xuICBpZiAoZnJvbVBhdGhuYW1lID09PSB2b2lkIDApIHtcbiAgICBmcm9tUGF0aG5hbWUgPSBcIi9cIjtcbiAgfVxuXG4gIGxldCB7XG4gICAgcGF0aG5hbWU6IHRvUGF0aG5hbWUsXG4gICAgc2VhcmNoID0gXCJcIixcbiAgICBoYXNoID0gXCJcIlxuICB9ID0gdHlwZW9mIHRvID09PSBcInN0cmluZ1wiID8gcGFyc2VQYXRoKHRvKSA6IHRvO1xuICBsZXQgcGF0aG5hbWUgPSB0b1BhdGhuYW1lID8gdG9QYXRobmFtZS5zdGFydHNXaXRoKFwiL1wiKSA/IHRvUGF0aG5hbWUgOiByZXNvbHZlUGF0aG5hbWUodG9QYXRobmFtZSwgZnJvbVBhdGhuYW1lKSA6IGZyb21QYXRobmFtZTtcbiAgcmV0dXJuIHtcbiAgICBwYXRobmFtZSxcbiAgICBzZWFyY2g6IG5vcm1hbGl6ZVNlYXJjaChzZWFyY2gpLFxuICAgIGhhc2g6IG5vcm1hbGl6ZUhhc2goaGFzaClcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVBhdGhuYW1lKHJlbGF0aXZlUGF0aCwgZnJvbVBhdGhuYW1lKSB7XG4gIGxldCBzZWdtZW50cyA9IGZyb21QYXRobmFtZS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpLnNwbGl0KFwiL1wiKTtcbiAgbGV0IHJlbGF0aXZlU2VnbWVudHMgPSByZWxhdGl2ZVBhdGguc3BsaXQoXCIvXCIpO1xuICByZWxhdGl2ZVNlZ21lbnRzLmZvckVhY2goc2VnbWVudCA9PiB7XG4gICAgaWYgKHNlZ21lbnQgPT09IFwiLi5cIikge1xuICAgICAgLy8gS2VlcCB0aGUgcm9vdCBcIlwiIHNlZ21lbnQgc28gdGhlIHBhdGhuYW1lIHN0YXJ0cyBhdCAvXG4gICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID4gMSkgc2VnbWVudHMucG9wKCk7XG4gICAgfSBlbHNlIGlmIChzZWdtZW50ICE9PSBcIi5cIikge1xuICAgICAgc2VnbWVudHMucHVzaChzZWdtZW50KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc2VnbWVudHMubGVuZ3RoID4gMSA/IHNlZ21lbnRzLmpvaW4oXCIvXCIpIDogXCIvXCI7XG59XG5cbmZ1bmN0aW9uIGdldEludmFsaWRQYXRoRXJyb3IoY2hhciwgZmllbGQsIGRlc3QsIHBhdGgpIHtcbiAgcmV0dXJuIFwiQ2Fubm90IGluY2x1ZGUgYSAnXCIgKyBjaGFyICsgXCInIGNoYXJhY3RlciBpbiBhIG1hbnVhbGx5IHNwZWNpZmllZCBcIiArIChcImB0by5cIiArIGZpZWxkICsgXCJgIGZpZWxkIFtcIiArIEpTT04uc3RyaW5naWZ5KHBhdGgpICsgXCJdLiAgUGxlYXNlIHNlcGFyYXRlIGl0IG91dCB0byB0aGUgXCIpICsgKFwiYHRvLlwiICsgZGVzdCArIFwiYCBmaWVsZC4gQWx0ZXJuYXRpdmVseSB5b3UgbWF5IHByb3ZpZGUgdGhlIGZ1bGwgcGF0aCBhcyBcIikgKyBcImEgc3RyaW5nIGluIDxMaW5rIHRvPVxcXCIuLi5cXFwiPiBhbmQgdGhlIHJvdXRlciB3aWxsIHBhcnNlIGl0IGZvciB5b3UuXCI7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKlxuICogV2hlbiBwcm9jZXNzaW5nIHJlbGF0aXZlIG5hdmlnYXRpb24gd2Ugd2FudCB0byBpZ25vcmUgYW5jZXN0b3Igcm91dGVzIHRoYXRcbiAqIGRvIG5vdCBjb250cmlidXRlIHRvIHRoZSBwYXRoLCBzdWNoIHRoYXQgaW5kZXgvcGF0aGxlc3MgbGF5b3V0IHJvdXRlcyBkb24ndFxuICogaW50ZXJmZXJlLlxuICpcbiAqIEZvciBleGFtcGxlLCB3aGVuIG1vdmluZyBhIHJvdXRlIGVsZW1lbnQgaW50byBhbiBpbmRleCByb3V0ZSBhbmQvb3IgYVxuICogcGF0aGxlc3MgbGF5b3V0IHJvdXRlLCByZWxhdGl2ZSBsaW5rIGJlaGF2aW9yIGNvbnRhaW5lZCB3aXRoaW4gc2hvdWxkIHN0YXlcbiAqIHRoZSBzYW1lLiAgQm90aCBvZiB0aGUgZm9sbG93aW5nIGV4YW1wbGVzIHNob3VsZCBsaW5rIGJhY2sgdG8gdGhlIHJvb3Q6XG4gKlxuICogICA8Um91dGUgcGF0aD1cIi9cIj5cbiAqICAgICA8Um91dGUgcGF0aD1cImFjY291bnRzXCIgZWxlbWVudD17PExpbmsgdG89XCIuLlwifT5cbiAqICAgPC9Sb3V0ZT5cbiAqXG4gKiAgIDxSb3V0ZSBwYXRoPVwiL1wiPlxuICogICAgIDxSb3V0ZSBwYXRoPVwiYWNjb3VudHNcIj5cbiAqICAgICAgIDxSb3V0ZSBlbGVtZW50PXs8QWNjb3VudHNMYXlvdXQgLz59PiAgICAgICAvLyA8LS0gRG9lcyBub3QgY29udHJpYnV0ZVxuICogICAgICAgICA8Um91dGUgaW5kZXggZWxlbWVudD17PExpbmsgdG89XCIuLlwifSAvPiAgLy8gPC0tIERvZXMgbm90IGNvbnRyaWJ1dGVcbiAqICAgICAgIDwvUm91dGVcbiAqICAgICA8L1JvdXRlPlxuICogICA8L1JvdXRlPlxuICovXG5cblxuZnVuY3Rpb24gZ2V0UGF0aENvbnRyaWJ1dGluZ01hdGNoZXMobWF0Y2hlcykge1xuICByZXR1cm4gbWF0Y2hlcy5maWx0ZXIoKG1hdGNoLCBpbmRleCkgPT4gaW5kZXggPT09IDAgfHwgbWF0Y2gucm91dGUucGF0aCAmJiBtYXRjaC5yb3V0ZS5wYXRoLmxlbmd0aCA+IDApO1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHJlc29sdmVUbyh0b0FyZywgcm91dGVQYXRobmFtZXMsIGxvY2F0aW9uUGF0aG5hbWUsIGlzUGF0aFJlbGF0aXZlKSB7XG4gIGlmIChpc1BhdGhSZWxhdGl2ZSA9PT0gdm9pZCAwKSB7XG4gICAgaXNQYXRoUmVsYXRpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIGxldCB0bztcblxuICBpZiAodHlwZW9mIHRvQXJnID09PSBcInN0cmluZ1wiKSB7XG4gICAgdG8gPSBwYXJzZVBhdGgodG9BcmcpO1xuICB9IGVsc2Uge1xuICAgIHRvID0gX2V4dGVuZHMoe30sIHRvQXJnKTtcbiAgICBpbnZhcmlhbnQoIXRvLnBhdGhuYW1lIHx8ICF0by5wYXRobmFtZS5pbmNsdWRlcyhcIj9cIiksIGdldEludmFsaWRQYXRoRXJyb3IoXCI/XCIsIFwicGF0aG5hbWVcIiwgXCJzZWFyY2hcIiwgdG8pKTtcbiAgICBpbnZhcmlhbnQoIXRvLnBhdGhuYW1lIHx8ICF0by5wYXRobmFtZS5pbmNsdWRlcyhcIiNcIiksIGdldEludmFsaWRQYXRoRXJyb3IoXCIjXCIsIFwicGF0aG5hbWVcIiwgXCJoYXNoXCIsIHRvKSk7XG4gICAgaW52YXJpYW50KCF0by5zZWFyY2ggfHwgIXRvLnNlYXJjaC5pbmNsdWRlcyhcIiNcIiksIGdldEludmFsaWRQYXRoRXJyb3IoXCIjXCIsIFwic2VhcmNoXCIsIFwiaGFzaFwiLCB0bykpO1xuICB9XG5cbiAgbGV0IGlzRW1wdHlQYXRoID0gdG9BcmcgPT09IFwiXCIgfHwgdG8ucGF0aG5hbWUgPT09IFwiXCI7XG4gIGxldCB0b1BhdGhuYW1lID0gaXNFbXB0eVBhdGggPyBcIi9cIiA6IHRvLnBhdGhuYW1lO1xuICBsZXQgZnJvbTsgLy8gUm91dGluZyBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwYXRobmFtZSBpZiBleHBsaWNpdGx5IHJlcXVlc3RlZC5cbiAgLy9cbiAgLy8gSWYgYSBwYXRobmFtZSBpcyBleHBsaWNpdGx5IHByb3ZpZGVkIGluIGB0b2AsIGl0IHNob3VsZCBiZSByZWxhdGl2ZSB0byB0aGVcbiAgLy8gcm91dGUgY29udGV4dC4gVGhpcyBpcyBleHBsYWluZWQgaW4gYE5vdGUgb24gYDxMaW5rIHRvPmAgdmFsdWVzYCBpbiBvdXJcbiAgLy8gbWlncmF0aW9uIGd1aWRlIGZyb20gdjUgYXMgYSBtZWFucyBvZiBkaXNhbWJpZ3VhdGlvbiBiZXR3ZWVuIGB0b2AgdmFsdWVzXG4gIC8vIHRoYXQgYmVnaW4gd2l0aCBgL2AgYW5kIHRob3NlIHRoYXQgZG8gbm90LiBIb3dldmVyLCB0aGlzIGlzIHByb2JsZW1hdGljIGZvclxuICAvLyBgdG9gIHZhbHVlcyB0aGF0IGRvIG5vdCBwcm92aWRlIGEgcGF0aG5hbWUuIGB0b2AgY2FuIHNpbXBseSBiZSBhIHNlYXJjaCBvclxuICAvLyBoYXNoIHN0cmluZywgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQgYXNzdW1lIHRoYXQgdGhlIG5hdmlnYXRpb24gaXMgcmVsYXRpdmVcbiAgLy8gdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24ncyBwYXRobmFtZSBhbmQgKm5vdCogdGhlIHJvdXRlIHBhdGhuYW1lLlxuXG4gIGlmIChpc1BhdGhSZWxhdGl2ZSB8fCB0b1BhdGhuYW1lID09IG51bGwpIHtcbiAgICBmcm9tID0gbG9jYXRpb25QYXRobmFtZTtcbiAgfSBlbHNlIHtcbiAgICBsZXQgcm91dGVQYXRobmFtZUluZGV4ID0gcm91dGVQYXRobmFtZXMubGVuZ3RoIC0gMTtcblxuICAgIGlmICh0b1BhdGhuYW1lLnN0YXJ0c1dpdGgoXCIuLlwiKSkge1xuICAgICAgbGV0IHRvU2VnbWVudHMgPSB0b1BhdGhuYW1lLnNwbGl0KFwiL1wiKTsgLy8gRWFjaCBsZWFkaW5nIC4uIHNlZ21lbnQgbWVhbnMgXCJnbyB1cCBvbmUgcm91dGVcIiBpbnN0ZWFkIG9mIFwiZ28gdXAgb25lXG4gICAgICAvLyBVUkwgc2VnbWVudFwiLiAgVGhpcyBpcyBhIGtleSBkaWZmZXJlbmNlIGZyb20gaG93IDxhIGhyZWY+IHdvcmtzIGFuZCBhXG4gICAgICAvLyBtYWpvciByZWFzb24gd2UgY2FsbCB0aGlzIGEgXCJ0b1wiIHZhbHVlIGluc3RlYWQgb2YgYSBcImhyZWZcIi5cblxuICAgICAgd2hpbGUgKHRvU2VnbWVudHNbMF0gPT09IFwiLi5cIikge1xuICAgICAgICB0b1NlZ21lbnRzLnNoaWZ0KCk7XG4gICAgICAgIHJvdXRlUGF0aG5hbWVJbmRleCAtPSAxO1xuICAgICAgfVxuXG4gICAgICB0by5wYXRobmFtZSA9IHRvU2VnbWVudHMuam9pbihcIi9cIik7XG4gICAgfSAvLyBJZiB0aGVyZSBhcmUgbW9yZSBcIi4uXCIgc2VnbWVudHMgdGhhbiBwYXJlbnQgcm91dGVzLCByZXNvbHZlIHJlbGF0aXZlIHRvXG4gICAgLy8gdGhlIHJvb3QgLyBVUkwuXG5cblxuICAgIGZyb20gPSByb3V0ZVBhdGhuYW1lSW5kZXggPj0gMCA/IHJvdXRlUGF0aG5hbWVzW3JvdXRlUGF0aG5hbWVJbmRleF0gOiBcIi9cIjtcbiAgfVxuXG4gIGxldCBwYXRoID0gcmVzb2x2ZVBhdGgodG8sIGZyb20pOyAvLyBFbnN1cmUgdGhlIHBhdGhuYW1lIGhhcyBhIHRyYWlsaW5nIHNsYXNoIGlmIHRoZSBvcmlnaW5hbCBcInRvXCIgaGFkIG9uZVxuXG4gIGxldCBoYXNFeHBsaWNpdFRyYWlsaW5nU2xhc2ggPSB0b1BhdGhuYW1lICYmIHRvUGF0aG5hbWUgIT09IFwiL1wiICYmIHRvUGF0aG5hbWUuZW5kc1dpdGgoXCIvXCIpOyAvLyBPciBpZiB0aGlzIHdhcyBhIGxpbmsgdG8gdGhlIGN1cnJlbnQgcGF0aCB3aGljaCBoYXMgYSB0cmFpbGluZyBzbGFzaFxuXG4gIGxldCBoYXNDdXJyZW50VHJhaWxpbmdTbGFzaCA9IChpc0VtcHR5UGF0aCB8fCB0b1BhdGhuYW1lID09PSBcIi5cIikgJiYgbG9jYXRpb25QYXRobmFtZS5lbmRzV2l0aChcIi9cIik7XG5cbiAgaWYgKCFwYXRoLnBhdGhuYW1lLmVuZHNXaXRoKFwiL1wiKSAmJiAoaGFzRXhwbGljaXRUcmFpbGluZ1NsYXNoIHx8IGhhc0N1cnJlbnRUcmFpbGluZ1NsYXNoKSkge1xuICAgIHBhdGgucGF0aG5hbWUgKz0gXCIvXCI7XG4gIH1cblxuICByZXR1cm4gcGF0aDtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRUb1BhdGhuYW1lKHRvKSB7XG4gIC8vIEVtcHR5IHN0cmluZ3Mgc2hvdWxkIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgLyBwYXRoc1xuICByZXR1cm4gdG8gPT09IFwiXCIgfHwgdG8ucGF0aG5hbWUgPT09IFwiXCIgPyBcIi9cIiA6IHR5cGVvZiB0byA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlUGF0aCh0bykucGF0aG5hbWUgOiB0by5wYXRobmFtZTtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5jb25zdCBqb2luUGF0aHMgPSBwYXRocyA9PiBwYXRocy5qb2luKFwiL1wiKS5yZXBsYWNlKC9cXC9cXC8rL2csIFwiL1wiKTtcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5jb25zdCBub3JtYWxpemVQYXRobmFtZSA9IHBhdGhuYW1lID0+IHBhdGhuYW1lLnJlcGxhY2UoL1xcLyskLywgXCJcIikucmVwbGFjZSgvXlxcLyovLCBcIi9cIik7XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuY29uc3Qgbm9ybWFsaXplU2VhcmNoID0gc2VhcmNoID0+ICFzZWFyY2ggfHwgc2VhcmNoID09PSBcIj9cIiA/IFwiXCIgOiBzZWFyY2guc3RhcnRzV2l0aChcIj9cIikgPyBzZWFyY2ggOiBcIj9cIiArIHNlYXJjaDtcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5jb25zdCBub3JtYWxpemVIYXNoID0gaGFzaCA9PiAhaGFzaCB8fCBoYXNoID09PSBcIiNcIiA/IFwiXCIgOiBoYXNoLnN0YXJ0c1dpdGgoXCIjXCIpID8gaGFzaCA6IFwiI1wiICsgaGFzaDtcbi8qKlxuICogVGhpcyBpcyBhIHNob3J0Y3V0IGZvciBjcmVhdGluZyBgYXBwbGljYXRpb24vanNvbmAgcmVzcG9uc2VzLiBDb252ZXJ0cyBgZGF0YWBcbiAqIHRvIEpTT04gYW5kIHNldHMgdGhlIGBDb250ZW50LVR5cGVgIGhlYWRlci5cbiAqL1xuXG5jb25zdCBqc29uID0gZnVuY3Rpb24ganNvbihkYXRhLCBpbml0KSB7XG4gIGlmIChpbml0ID09PSB2b2lkIDApIHtcbiAgICBpbml0ID0ge307XG4gIH1cblxuICBsZXQgcmVzcG9uc2VJbml0ID0gdHlwZW9mIGluaXQgPT09IFwibnVtYmVyXCIgPyB7XG4gICAgc3RhdHVzOiBpbml0XG4gIH0gOiBpbml0O1xuICBsZXQgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHJlc3BvbnNlSW5pdC5oZWFkZXJzKTtcblxuICBpZiAoIWhlYWRlcnMuaGFzKFwiQ29udGVudC1UeXBlXCIpKSB7XG4gICAgaGVhZGVycy5zZXQoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeShkYXRhKSwgX2V4dGVuZHMoe30sIHJlc3BvbnNlSW5pdCwge1xuICAgIGhlYWRlcnNcbiAgfSkpO1xufTtcbmNsYXNzIEFib3J0ZWREZWZlcnJlZEVycm9yIGV4dGVuZHMgRXJyb3Ige31cbmNsYXNzIERlZmVycmVkRGF0YSB7XG4gIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICB0aGlzLnBlbmRpbmdLZXlzID0gbmV3IFNldCgpO1xuICAgIHRoaXMuc3Vic2NyaWJlciA9IHVuZGVmaW5lZDtcbiAgICBpbnZhcmlhbnQoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShkYXRhKSwgXCJkZWZlcigpIG9ubHkgYWNjZXB0cyBwbGFpbiBvYmplY3RzXCIpOyAvLyBTZXQgdXAgYW4gQWJvcnRDb250cm9sbGVyICsgUHJvbWlzZSB3ZSBjYW4gcmFjZSBhZ2FpbnN0IHRvIGV4aXQgZWFybHlcbiAgICAvLyBjYW5jZWxsYXRpb25cblxuICAgIGxldCByZWplY3Q7XG4gICAgdGhpcy5hYm9ydFByb21pc2UgPSBuZXcgUHJvbWlzZSgoXywgcikgPT4gcmVqZWN0ID0gcik7XG4gICAgdGhpcy5jb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgbGV0IG9uQWJvcnQgPSAoKSA9PiByZWplY3QobmV3IEFib3J0ZWREZWZlcnJlZEVycm9yKFwiRGVmZXJyZWQgZGF0YSBhYm9ydGVkXCIpKTtcblxuICAgIHRoaXMudW5saXN0ZW5BYm9ydFNpZ25hbCA9ICgpID0+IHRoaXMuY29udHJvbGxlci5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuXG4gICAgdGhpcy5jb250cm9sbGVyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG4gICAgdGhpcy5kYXRhID0gT2JqZWN0LmVudHJpZXMoZGF0YSkucmVkdWNlKChhY2MsIF9yZWYpID0+IHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBfcmVmO1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYWNjLCB7XG4gICAgICAgIFtrZXldOiB0aGlzLnRyYWNrUHJvbWlzZShrZXksIHZhbHVlKVxuICAgICAgfSk7XG4gICAgfSwge30pO1xuICB9XG5cbiAgdHJhY2tQcm9taXNlKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nS2V5cy5hZGQoa2V5KTsgLy8gV2Ugc3RvcmUgYSBsaXR0bGUgd3JhcHBlciBwcm9taXNlIHRoYXQgd2lsbCBiZSBleHRlbmRlZCB3aXRoXG4gICAgLy8gX2RhdGEvX2Vycm9yIHByb3BzIHVwb24gcmVzb2x2ZS9yZWplY3RcblxuICAgIGxldCBwcm9taXNlID0gUHJvbWlzZS5yYWNlKFt2YWx1ZSwgdGhpcy5hYm9ydFByb21pc2VdKS50aGVuKGRhdGEgPT4gdGhpcy5vblNldHRsZShwcm9taXNlLCBrZXksIG51bGwsIGRhdGEpLCBlcnJvciA9PiB0aGlzLm9uU2V0dGxlKHByb21pc2UsIGtleSwgZXJyb3IpKTsgLy8gUmVnaXN0ZXIgcmVqZWN0aW9uIGxpc3RlbmVycyB0byBhdm9pZCB1bmNhdWdodCBwcm9taXNlIHJlamVjdGlvbnMgb25cbiAgICAvLyBlcnJvcnMgb3IgYWJvcnRlZCBkZWZlcnJlZCB2YWx1ZXNcblxuICAgIHByb21pc2UuY2F0Y2goKCkgPT4ge30pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9taXNlLCBcIl90cmFja2VkXCIsIHtcbiAgICAgIGdldDogKCkgPT4gdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgb25TZXR0bGUocHJvbWlzZSwga2V5LCBlcnJvciwgZGF0YSkge1xuICAgIGlmICh0aGlzLmNvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQgJiYgZXJyb3IgaW5zdGFuY2VvZiBBYm9ydGVkRGVmZXJyZWRFcnJvcikge1xuICAgICAgdGhpcy51bmxpc3RlbkFib3J0U2lnbmFsKCk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvbWlzZSwgXCJfZXJyb3JcIiwge1xuICAgICAgICBnZXQ6ICgpID0+IGVycm9yXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nS2V5cy5kZWxldGUoa2V5KTtcblxuICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgIC8vIE5vdGhpbmcgbGVmdCB0byBhYm9ydCFcbiAgICAgIHRoaXMudW5saXN0ZW5BYm9ydFNpZ25hbCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YnNjcmliZXIgPSB0aGlzLnN1YnNjcmliZXI7XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9taXNlLCBcIl9lcnJvclwiLCB7XG4gICAgICAgIGdldDogKCkgPT4gZXJyb3JcbiAgICAgIH0pO1xuICAgICAgc3Vic2NyaWJlciAmJiBzdWJzY3JpYmVyKGZhbHNlKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb21pc2UsIFwiX2RhdGFcIiwge1xuICAgICAgZ2V0OiAoKSA9PiBkYXRhXG4gICAgfSk7XG4gICAgc3Vic2NyaWJlciAmJiBzdWJzY3JpYmVyKGZhbHNlKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHN1YnNjcmliZShmbikge1xuICAgIHRoaXMuc3Vic2NyaWJlciA9IGZuO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuY29udHJvbGxlci5hYm9ydCgpO1xuICAgIHRoaXMucGVuZGluZ0tleXMuZm9yRWFjaCgodiwgaykgPT4gdGhpcy5wZW5kaW5nS2V5cy5kZWxldGUoaykpO1xuICAgIGxldCBzdWJzY3JpYmVyID0gdGhpcy5zdWJzY3JpYmVyO1xuICAgIHN1YnNjcmliZXIgJiYgc3Vic2NyaWJlcih0cnVlKTtcbiAgfVxuXG4gIGFzeW5jIHJlc29sdmVEYXRhKHNpZ25hbCkge1xuICAgIGxldCBhYm9ydGVkID0gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMuZG9uZSkge1xuICAgICAgbGV0IG9uQWJvcnQgPSAoKSA9PiB0aGlzLmNhbmNlbCgpO1xuXG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgICAgYWJvcnRlZCA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0aGlzLnN1YnNjcmliZShhYm9ydGVkID0+IHtcbiAgICAgICAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuXG4gICAgICAgICAgaWYgKGFib3J0ZWQgfHwgdGhpcy5kb25lKSB7XG4gICAgICAgICAgICByZXNvbHZlKGFib3J0ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWJvcnRlZDtcbiAgfVxuXG4gIGdldCBkb25lKCkge1xuICAgIHJldHVybiB0aGlzLnBlbmRpbmdLZXlzLnNpemUgPT09IDA7XG4gIH1cblxuICBnZXQgdW53cmFwcGVkRGF0YSgpIHtcbiAgICBpbnZhcmlhbnQodGhpcy5kYXRhICE9PSBudWxsICYmIHRoaXMuZG9uZSwgXCJDYW4gb25seSB1bndyYXAgZGF0YSBvbiBpbml0aWFsaXplZCBhbmQgc2V0dGxlZCBkZWZlcnJlZHNcIik7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuZGF0YSkucmVkdWNlKChhY2MsIF9yZWYyKSA9PiB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gX3JlZjI7XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhY2MsIHtcbiAgICAgICAgW2tleV06IHVud3JhcFRyYWNrZWRQcm9taXNlKHZhbHVlKVxuICAgICAgfSk7XG4gICAgfSwge30pO1xuICB9XG5cbn1cblxuZnVuY3Rpb24gaXNUcmFja2VkUHJvbWlzZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlICYmIHZhbHVlLl90cmFja2VkID09PSB0cnVlO1xufVxuXG5mdW5jdGlvbiB1bndyYXBUcmFja2VkUHJvbWlzZSh2YWx1ZSkge1xuICBpZiAoIWlzVHJhY2tlZFByb21pc2UodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgaWYgKHZhbHVlLl9lcnJvcikge1xuICAgIHRocm93IHZhbHVlLl9lcnJvcjtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZS5fZGF0YTtcbn1cblxuZnVuY3Rpb24gZGVmZXIoZGF0YSkge1xuICByZXR1cm4gbmV3IERlZmVycmVkRGF0YShkYXRhKTtcbn1cbi8qKlxuICogQSByZWRpcmVjdCByZXNwb25zZS4gU2V0cyB0aGUgc3RhdHVzIGNvZGUgYW5kIHRoZSBgTG9jYXRpb25gIGhlYWRlci5cbiAqIERlZmF1bHRzIHRvIFwiMzAyIEZvdW5kXCIuXG4gKi9cblxuY29uc3QgcmVkaXJlY3QgPSBmdW5jdGlvbiByZWRpcmVjdCh1cmwsIGluaXQpIHtcbiAgaWYgKGluaXQgPT09IHZvaWQgMCkge1xuICAgIGluaXQgPSAzMDI7XG4gIH1cblxuICBsZXQgcmVzcG9uc2VJbml0ID0gaW5pdDtcblxuICBpZiAodHlwZW9mIHJlc3BvbnNlSW5pdCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJlc3BvbnNlSW5pdCA9IHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2VJbml0XG4gICAgfTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcmVzcG9uc2VJbml0LnN0YXR1cyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlSW5pdC5zdGF0dXMgPSAzMDI7XG4gIH1cblxuICBsZXQgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHJlc3BvbnNlSW5pdC5oZWFkZXJzKTtcbiAgaGVhZGVycy5zZXQoXCJMb2NhdGlvblwiLCB1cmwpO1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIF9leHRlbmRzKHt9LCByZXNwb25zZUluaXQsIHtcbiAgICBoZWFkZXJzXG4gIH0pKTtcbn07XG4vKipcbiAqIEBwcml2YXRlXG4gKiBVdGlsaXR5IGNsYXNzIHdlIHVzZSB0byBob2xkIGF1dG8tdW53cmFwcGVkIDR4eC81eHggUmVzcG9uc2UgYm9kaWVzXG4gKi9cblxuY2xhc3MgRXJyb3JSZXNwb25zZSB7XG4gIGNvbnN0cnVjdG9yKHN0YXR1cywgc3RhdHVzVGV4dCwgZGF0YSkge1xuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgIHRoaXMuc3RhdHVzVGV4dCA9IHN0YXR1c1RleHQgfHwgXCJcIjtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG5cbn1cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIGVycm9yIGlzIGFuIEVycm9yUmVzcG9uc2UgZ2VuZXJhdGVkIGZyb20gYSA0eHgvNXh4XG4gKiBSZXNwb25zZSB0aHJvdyBmcm9tIGFuIGFjdGlvbi9sb2FkZXJcbiAqL1xuXG5mdW5jdGlvbiBpc1JvdXRlRXJyb3JSZXNwb25zZShlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZTtcbn1cblxuY29uc3QgSURMRV9OQVZJR0FUSU9OID0ge1xuICBzdGF0ZTogXCJpZGxlXCIsXG4gIGxvY2F0aW9uOiB1bmRlZmluZWQsXG4gIGZvcm1NZXRob2Q6IHVuZGVmaW5lZCxcbiAgZm9ybUFjdGlvbjogdW5kZWZpbmVkLFxuICBmb3JtRW5jVHlwZTogdW5kZWZpbmVkLFxuICBmb3JtRGF0YTogdW5kZWZpbmVkXG59O1xuY29uc3QgSURMRV9GRVRDSEVSID0ge1xuICBzdGF0ZTogXCJpZGxlXCIsXG4gIGRhdGE6IHVuZGVmaW5lZCxcbiAgZm9ybU1ldGhvZDogdW5kZWZpbmVkLFxuICBmb3JtQWN0aW9uOiB1bmRlZmluZWQsXG4gIGZvcm1FbmNUeXBlOiB1bmRlZmluZWQsXG4gIGZvcm1EYXRhOiB1bmRlZmluZWRcbn07XG5jb25zdCBpc0Jyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50ICE9PSBcInVuZGVmaW5lZFwiO1xuY29uc3QgaXNTZXJ2ZXIgPSAhaXNCcm93c2VyOyAvLyNlbmRyZWdpb25cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyNyZWdpb24gY3JlYXRlUm91dGVyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIENyZWF0ZSBhIHJvdXRlciBhbmQgbGlzdGVuIHRvIGhpc3RvcnkgUE9QIG5hdmlnYXRpb25zXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlUm91dGVyKGluaXQpIHtcbiAgaW52YXJpYW50KGluaXQucm91dGVzLmxlbmd0aCA+IDAsIFwiWW91IG11c3QgcHJvdmlkZSBhIG5vbi1lbXB0eSByb3V0ZXMgYXJyYXkgdG8gY3JlYXRlUm91dGVyXCIpO1xuICBsZXQgZGF0YVJvdXRlcyA9IGNvbnZlcnRSb3V0ZXNUb0RhdGFSb3V0ZXMoaW5pdC5yb3V0ZXMpOyAvLyBDbGVhbnVwIGZ1bmN0aW9uIGZvciBoaXN0b3J5XG5cbiAgbGV0IHVubGlzdGVuSGlzdG9yeSA9IG51bGw7IC8vIEV4dGVybmFsbHktcHJvdmlkZWQgZnVuY3Rpb25zIHRvIGNhbGwgb24gYWxsIHN0YXRlIGNoYW5nZXNcblxuICBsZXQgc3Vic2NyaWJlcnMgPSBuZXcgU2V0KCk7IC8vIEV4dGVybmFsbHktcHJvdmlkZWQgb2JqZWN0IHRvIGhvbGQgc2Nyb2xsIHJlc3RvcmF0aW9uIGxvY2F0aW9ucyBkdXJpbmcgcm91dGluZ1xuXG4gIGxldCBzYXZlZFNjcm9sbFBvc2l0aW9ucyA9IG51bGw7IC8vIEV4dGVybmFsbHktcHJvdmlkZWQgZnVuY3Rpb24gdG8gZ2V0IHNjcm9sbCByZXN0b3JhdGlvbiBrZXlzXG5cbiAgbGV0IGdldFNjcm9sbFJlc3RvcmF0aW9uS2V5ID0gbnVsbDsgLy8gRXh0ZXJuYWxseS1wcm92aWRlZCBmdW5jdGlvbiB0byBnZXQgY3VycmVudCBzY3JvbGwgcG9zaXRpb25cblxuICBsZXQgZ2V0U2Nyb2xsUG9zaXRpb24gPSBudWxsOyAvLyBPbmUtdGltZSBmbGFnIHRvIGNvbnRyb2wgdGhlIGluaXRpYWwgaHlkcmF0aW9uIHNjcm9sbCByZXN0b3JhdGlvbi4gIEJlY2F1c2VcbiAgLy8gd2UgZG9uJ3QgZ2V0IHRoZSBzYXZlZCBwb3NpdGlvbnMgZnJvbSA8U2Nyb2xsUmVzdG9yYXRpb24gLz4gdW50aWwgX2FmdGVyX1xuICAvLyB0aGUgaW5pdGlhbCByZW5kZXIsIHdlIG5lZWQgdG8gbWFudWFsbHkgdHJpZ2dlciBhIHNlcGFyYXRlIHVwZGF0ZVN0YXRlIHRvXG4gIC8vIHNlbmQgYWxvbmcgdGhlIHJlc3RvcmVTY3JvbGxQb3NpdGlvblxuXG4gIGxldCBpbml0aWFsU2Nyb2xsUmVzdG9yZWQgPSBmYWxzZTtcbiAgbGV0IGluaXRpYWxNYXRjaGVzID0gbWF0Y2hSb3V0ZXMoZGF0YVJvdXRlcywgaW5pdC5oaXN0b3J5LmxvY2F0aW9uLCBpbml0LmJhc2VuYW1lKTtcbiAgbGV0IGluaXRpYWxFcnJvcnMgPSBudWxsO1xuXG4gIGlmIChpbml0aWFsTWF0Y2hlcyA9PSBudWxsKSB7XG4gICAgLy8gSWYgd2UgZG8gbm90IG1hdGNoIGEgdXNlci1wcm92aWRlZC1yb3V0ZSwgZmFsbCBiYWNrIHRvIHRoZSByb290XG4gICAgLy8gdG8gYWxsb3cgdGhlIGVycm9yIGJvdW5kYXJ5IHRvIHRha2Ugb3ZlclxuICAgIGxldCB7XG4gICAgICBtYXRjaGVzLFxuICAgICAgcm91dGUsXG4gICAgICBlcnJvclxuICAgIH0gPSBnZXROb3RGb3VuZE1hdGNoZXMoZGF0YVJvdXRlcyk7XG4gICAgaW5pdGlhbE1hdGNoZXMgPSBtYXRjaGVzO1xuICAgIGluaXRpYWxFcnJvcnMgPSB7XG4gICAgICBbcm91dGUuaWRdOiBlcnJvclxuICAgIH07XG4gIH1cblxuICBsZXQgaW5pdGlhbGl6ZWQgPSAhaW5pdGlhbE1hdGNoZXMuc29tZShtID0+IG0ucm91dGUubG9hZGVyKSB8fCBpbml0Lmh5ZHJhdGlvbkRhdGEgIT0gbnVsbDtcbiAgbGV0IHJvdXRlcjtcbiAgbGV0IHN0YXRlID0ge1xuICAgIGhpc3RvcnlBY3Rpb246IGluaXQuaGlzdG9yeS5hY3Rpb24sXG4gICAgbG9jYXRpb246IGluaXQuaGlzdG9yeS5sb2NhdGlvbixcbiAgICBtYXRjaGVzOiBpbml0aWFsTWF0Y2hlcyxcbiAgICBpbml0aWFsaXplZCxcbiAgICBuYXZpZ2F0aW9uOiBJRExFX05BVklHQVRJT04sXG4gICAgcmVzdG9yZVNjcm9sbFBvc2l0aW9uOiBudWxsLFxuICAgIHByZXZlbnRTY3JvbGxSZXNldDogZmFsc2UsXG4gICAgcmV2YWxpZGF0aW9uOiBcImlkbGVcIixcbiAgICBsb2FkZXJEYXRhOiBpbml0Lmh5ZHJhdGlvbkRhdGEgJiYgaW5pdC5oeWRyYXRpb25EYXRhLmxvYWRlckRhdGEgfHwge30sXG4gICAgYWN0aW9uRGF0YTogaW5pdC5oeWRyYXRpb25EYXRhICYmIGluaXQuaHlkcmF0aW9uRGF0YS5hY3Rpb25EYXRhIHx8IG51bGwsXG4gICAgZXJyb3JzOiBpbml0Lmh5ZHJhdGlvbkRhdGEgJiYgaW5pdC5oeWRyYXRpb25EYXRhLmVycm9ycyB8fCBpbml0aWFsRXJyb3JzLFxuICAgIGZldGNoZXJzOiBuZXcgTWFwKClcbiAgfTsgLy8gLS0gU3RhdGVmdWwgaW50ZXJuYWwgdmFyaWFibGVzIHRvIG1hbmFnZSBuYXZpZ2F0aW9ucyAtLVxuICAvLyBDdXJyZW50IG5hdmlnYXRpb24gaW4gcHJvZ3Jlc3MgKHRvIGJlIGNvbW1pdHRlZCBpbiBjb21wbGV0ZU5hdmlnYXRpb24pXG5cbiAgbGV0IHBlbmRpbmdBY3Rpb24gPSBBY3Rpb24uUG9wOyAvLyBTaG91bGQgdGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBwcmV2ZW50IHRoZSBzY3JvbGwgcmVzZXQgaWYgc2Nyb2xsIGNhbm5vdFxuICAvLyBiZSByZXN0b3JlZD9cblxuICBsZXQgcGVuZGluZ1ByZXZlbnRTY3JvbGxSZXNldCA9IGZhbHNlOyAvLyBBYm9ydENvbnRyb2xsZXIgZm9yIHRoZSBhY3RpdmUgbmF2aWdhdGlvblxuXG4gIGxldCBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXI7IC8vIFdlIHVzZSB0aGlzIHRvIGF2b2lkIHRvdWNoaW5nIGhpc3RvcnkgaW4gY29tcGxldGVOYXZpZ2F0aW9uIGlmIGFcbiAgLy8gcmV2YWxpZGF0aW9uIGlzIGVudGlyZWx5IHVuaW50ZXJydXB0ZWRcblxuICBsZXQgaXNVbmludGVycnVwdGVkUmV2YWxpZGF0aW9uID0gZmFsc2U7IC8vIFVzZSB0aGlzIGludGVybmFsIGZsYWcgdG8gZm9yY2UgcmV2YWxpZGF0aW9uIG9mIGFsbCBsb2FkZXJzOlxuICAvLyAgLSBzdWJtaXNzaW9ucyAoY29tcGxldGVkIG9yIGludGVycnVwdGVkKVxuICAvLyAgLSB1c2VSZXZhbGlkYXRlKClcbiAgLy8gIC0gWC1SZW1peC1SZXZhbGlkYXRlIChmcm9tIHJlZGlyZWN0KVxuXG4gIGxldCBpc1JldmFsaWRhdGlvblJlcXVpcmVkID0gZmFsc2U7IC8vIFVzZSB0aGlzIGludGVybmFsIGFycmF5IHRvIGNhcHR1cmUgcm91dGVzIHRoYXQgcmVxdWlyZSByZXZhbGlkYXRpb24gZHVlXG4gIC8vIHRvIGEgY2FuY2VsbGVkIGRlZmVycmVkIG9uIGFjdGlvbiBzdWJtaXNzaW9uXG5cbiAgbGV0IGNhbmNlbGxlZERlZmVycmVkUm91dGVzID0gW107IC8vIFVzZSB0aGlzIGludGVybmFsIGFycmF5IHRvIGNhcHR1cmUgZmV0Y2hlciBsb2FkcyB0aGF0IHdlcmUgY2FuY2VsbGVkIGJ5IGFuXG4gIC8vIGFjdGlvbiBuYXZpZ2F0aW9uIGFuZCByZXF1aXJlIHJldmFsaWRhdGlvblxuXG4gIGxldCBjYW5jZWxsZWRGZXRjaGVyTG9hZHMgPSBbXTsgLy8gQWJvcnRDb250cm9sbGVycyBmb3IgYW55IGluLWZsaWdodCBmZXRjaGVyc1xuXG4gIGxldCBmZXRjaENvbnRyb2xsZXJzID0gbmV3IE1hcCgpOyAvLyBUcmFjayBsb2FkcyBiYXNlZCBvbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBzdGFydGVkXG5cbiAgbGV0IGluY3JlbWVudGluZ0xvYWRJZCA9IDA7IC8vIFRyYWNrIHRoZSBvdXRzdGFuZGluZyBwZW5kaW5nIG5hdmlnYXRpb24gZGF0YSBsb2FkIHRvIGJlIGNvbXBhcmVkIGFnYWluc3RcbiAgLy8gdGhlIGdsb2JhbGx5IGluY3JlbWVudGluZyBsb2FkIHdoZW4gYSBmZXRjaGVyIGxvYWQgbGFuZHMgYWZ0ZXIgYSBjb21wbGV0ZWRcbiAgLy8gbmF2aWdhdGlvblxuXG4gIGxldCBwZW5kaW5nTmF2aWdhdGlvbkxvYWRJZCA9IC0xOyAvLyBGZXRjaGVycyB0aGF0IHRyaWdnZXJlZCBkYXRhIHJlbG9hZHMgYXMgYSByZXN1bHQgb2YgdGhlaXIgYWN0aW9uc1xuXG4gIGxldCBmZXRjaFJlbG9hZElkcyA9IG5ldyBNYXAoKTsgLy8gRmV0Y2hlcnMgdGhhdCB0cmlnZ2VyZWQgcmVkaXJlY3QgbmF2aWdhdGlvbnMgZnJvbSB0aGVpciBhY3Rpb25zXG5cbiAgbGV0IGZldGNoUmVkaXJlY3RJZHMgPSBuZXcgU2V0KCk7IC8vIE1vc3QgcmVjZW50IGhyZWYvbWF0Y2ggZm9yIGZldGNoZXIubG9hZCBjYWxscyBmb3IgZmV0Y2hlcnNcblxuICBsZXQgZmV0Y2hMb2FkTWF0Y2hlcyA9IG5ldyBNYXAoKTsgLy8gU3RvcmUgRGVmZXJyZWREYXRhIGluc3RhbmNlcyBmb3IgYWN0aXZlIHJvdXRlIG1hdGNoZXMuICBXaGVuIGFcbiAgLy8gcm91dGUgbG9hZGVyIHJldHVybnMgZGVmZXIoKSB3ZSBzdGljayBvbmUgaW4gaGVyZS4gIFRoZW4sIHdoZW4gYSBuZXN0ZWRcbiAgLy8gcHJvbWlzZSByZXNvbHZlcyB3ZSB1cGRhdGUgbG9hZGVyRGF0YS4gIElmIGEgbmV3IG5hdmlnYXRpb24gc3RhcnRzIHdlXG4gIC8vIGNhbmNlbCBhY3RpdmUgZGVmZXJyZWRzIGZvciBlbGltaW5hdGVkIHJvdXRlcy5cblxuICBsZXQgYWN0aXZlRGVmZXJyZWRzID0gbmV3IE1hcCgpOyAvLyBJbml0aWFsaXplIHRoZSByb3V0ZXIsIGFsbCBzaWRlIGVmZmVjdHMgc2hvdWxkIGJlIGtpY2tlZCBvZmYgZnJvbSBoZXJlLlxuICAvLyBJbXBsZW1lbnRlZCBhcyBhIEZsdWVudCBBUEkgZm9yIGVhc2Ugb2Y6XG4gIC8vICAgbGV0IHJvdXRlciA9IGNyZWF0ZVJvdXRlcihpbml0KS5pbml0aWFsaXplKCk7XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICAvLyBJZiBoaXN0b3J5IGluZm9ybXMgdXMgb2YgYSBQT1AgbmF2aWdhdGlvbiwgc3RhcnQgdGhlIG5hdmlnYXRpb24gYnV0IGRvIG5vdCB1cGRhdGVcbiAgICAvLyBzdGF0ZS4gIFdlJ2xsIHVwZGF0ZSBvdXIgb3duIHN0YXRlIG9uY2UgdGhlIG5hdmlnYXRpb24gY29tcGxldGVzXG4gICAgdW5saXN0ZW5IaXN0b3J5ID0gaW5pdC5oaXN0b3J5Lmxpc3RlbihfcmVmID0+IHtcbiAgICAgIGxldCB7XG4gICAgICAgIGFjdGlvbjogaGlzdG9yeUFjdGlvbixcbiAgICAgICAgbG9jYXRpb25cbiAgICAgIH0gPSBfcmVmO1xuICAgICAgcmV0dXJuIHN0YXJ0TmF2aWdhdGlvbihoaXN0b3J5QWN0aW9uLCBsb2NhdGlvbik7XG4gICAgfSk7IC8vIEtpY2sgb2ZmIGluaXRpYWwgZGF0YSBsb2FkIGlmIG5lZWRlZC4gIFVzZSBQb3AgdG8gYXZvaWQgbW9kaWZ5aW5nIGhpc3RvcnlcblxuICAgIGlmICghc3RhdGUuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHN0YXJ0TmF2aWdhdGlvbihBY3Rpb24uUG9wLCBzdGF0ZS5sb2NhdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvdXRlcjtcbiAgfSAvLyBDbGVhbiB1cCBhIHJvdXRlciBhbmQgaXQncyBzaWRlIGVmZmVjdHNcblxuXG4gIGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgaWYgKHVubGlzdGVuSGlzdG9yeSkge1xuICAgICAgdW5saXN0ZW5IaXN0b3J5KCk7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlcnMuY2xlYXIoKTtcbiAgICBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIgJiYgcGVuZGluZ05hdmlnYXRpb25Db250cm9sbGVyLmFib3J0KCk7XG4gICAgc3RhdGUuZmV0Y2hlcnMuZm9yRWFjaCgoXywga2V5KSA9PiBkZWxldGVGZXRjaGVyKGtleSkpO1xuICB9IC8vIFN1YnNjcmliZSB0byBzdGF0ZSB1cGRhdGVzIGZvciB0aGUgcm91dGVyXG5cblxuICBmdW5jdGlvbiBzdWJzY3JpYmUoZm4pIHtcbiAgICBzdWJzY3JpYmVycy5hZGQoZm4pO1xuICAgIHJldHVybiAoKSA9PiBzdWJzY3JpYmVycy5kZWxldGUoZm4pO1xuICB9IC8vIFVwZGF0ZSBvdXIgc3RhdGUgYW5kIG5vdGlmeSB0aGUgY2FsbGluZyBjb250ZXh0IG9mIHRoZSBjaGFuZ2VcblxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVN0YXRlKG5ld1N0YXRlKSB7XG4gICAgc3RhdGUgPSBfZXh0ZW5kcyh7fSwgc3RhdGUsIG5ld1N0YXRlKTtcbiAgICBzdWJzY3JpYmVycy5mb3JFYWNoKHN1YnNjcmliZXIgPT4gc3Vic2NyaWJlcihzdGF0ZSkpO1xuICB9IC8vIENvbXBsZXRlIGEgbmF2aWdhdGlvbiByZXR1cm5pbmcgdGhlIHN0YXRlLm5hdmlnYXRpb24gYmFjayB0byB0aGUgSURMRV9OQVZJR0FUSU9OXG4gIC8vIGFuZCBzZXR0aW5nIHN0YXRlLltoaXN0b3J5QWN0aW9uL2xvY2F0aW9uL21hdGNoZXNdIHRvIHRoZSBuZXcgcm91dGUuXG4gIC8vIC0gTG9jYXRpb24gaXMgYSByZXF1aXJlZCBwYXJhbVxuICAvLyAtIE5hdmlnYXRpb24gd2lsbCBhbHdheXMgYmUgc2V0IHRvIElETEVfTkFWSUdBVElPTlxuICAvLyAtIENhbiBwYXNzIGFueSBvdGhlciBzdGF0ZSBpbiBuZXdTdGF0ZVxuXG5cbiAgZnVuY3Rpb24gY29tcGxldGVOYXZpZ2F0aW9uKGxvY2F0aW9uLCBuZXdTdGF0ZSkge1xuICAgIHZhciBfc3RhdGUkbmF2aWdhdGlvbiRmb3I7XG5cbiAgICAvLyBEZWR1Y2UgaWYgd2UncmUgaW4gYSBsb2FkaW5nL2FjdGlvblJlbG9hZCBzdGF0ZTpcbiAgICAvLyAtIFdlIGhhdmUgY29tbWl0dGVkIGFjdGlvbkRhdGEgaW4gdGhlIHN0b3JlXG4gICAgLy8gLSBUaGUgY3VycmVudCBuYXZpZ2F0aW9uIHdhcyBhIHN1Ym1pc3Npb25cbiAgICAvLyAtIFdlJ3JlIHBhc3QgdGhlIHN1Ym1pdHRpbmcgc3RhdGUgYW5kIGludG8gdGhlIGxvYWRpbmcgc3RhdGVcbiAgICAvLyAtIFRoZSBsb2NhdGlvbiB3ZSd2ZSBmaW5pc2hlZCBsb2FkaW5nIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBzdWJtaXNzaW9uXG4gICAgLy8gICBsb2NhdGlvbiwgaW5kaWNhdGluZyB3ZSByZWRpcmVjdGVkIGZyb20gdGhlIGFjdGlvbiAoYXZvaWRzIGZhbHNlXG4gICAgLy8gICBwb3NpdGl2ZXMgZm9yIGxvYWRpbmcvc3VibWlzc2lvblJlZGlyZWN0IHdoZW4gYWN0aW9uRGF0YSByZXR1cm5lZFxuICAgIC8vICAgb24gYSBwcmlvciBzdWJtaXNzaW9uKVxuICAgIGxldCBpc0FjdGlvblJlbG9hZCA9IHN0YXRlLmFjdGlvbkRhdGEgIT0gbnVsbCAmJiBzdGF0ZS5uYXZpZ2F0aW9uLmZvcm1NZXRob2QgIT0gbnVsbCAmJiBzdGF0ZS5uYXZpZ2F0aW9uLnN0YXRlID09PSBcImxvYWRpbmdcIiAmJiAoKF9zdGF0ZSRuYXZpZ2F0aW9uJGZvciA9IHN0YXRlLm5hdmlnYXRpb24uZm9ybUFjdGlvbikgPT0gbnVsbCA/IHZvaWQgMCA6IF9zdGF0ZSRuYXZpZ2F0aW9uJGZvci5zcGxpdChcIj9cIilbMF0pID09PSBsb2NhdGlvbi5wYXRobmFtZTsgLy8gQWx3YXlzIHByZXNlcnZlIGFueSBleGlzdGluZyBsb2FkZXJEYXRhIGZyb20gcmUtdXNlZCByb3V0ZXNcblxuICAgIGxldCBuZXdMb2FkZXJEYXRhID0gbmV3U3RhdGUubG9hZGVyRGF0YSA/IHtcbiAgICAgIGxvYWRlckRhdGE6IG1lcmdlTG9hZGVyRGF0YShzdGF0ZS5sb2FkZXJEYXRhLCBuZXdTdGF0ZS5sb2FkZXJEYXRhLCBuZXdTdGF0ZS5tYXRjaGVzIHx8IFtdKVxuICAgIH0gOiB7fTtcbiAgICB1cGRhdGVTdGF0ZShfZXh0ZW5kcyh7fSwgaXNBY3Rpb25SZWxvYWQgPyB7fSA6IHtcbiAgICAgIGFjdGlvbkRhdGE6IG51bGxcbiAgICB9LCBuZXdTdGF0ZSwgbmV3TG9hZGVyRGF0YSwge1xuICAgICAgaGlzdG9yeUFjdGlvbjogcGVuZGluZ0FjdGlvbixcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgaW5pdGlhbGl6ZWQ6IHRydWUsXG4gICAgICBuYXZpZ2F0aW9uOiBJRExFX05BVklHQVRJT04sXG4gICAgICByZXZhbGlkYXRpb246IFwiaWRsZVwiLFxuICAgICAgLy8gRG9uJ3QgcmVzdG9yZSBvbiBzdWJtaXNzaW9uIG5hdmlnYXRpb25zXG4gICAgICByZXN0b3JlU2Nyb2xsUG9zaXRpb246IHN0YXRlLm5hdmlnYXRpb24uZm9ybURhdGEgPyBmYWxzZSA6IGdldFNhdmVkU2Nyb2xsUG9zaXRpb24obG9jYXRpb24sIG5ld1N0YXRlLm1hdGNoZXMgfHwgc3RhdGUubWF0Y2hlcyksXG4gICAgICBwcmV2ZW50U2Nyb2xsUmVzZXQ6IHBlbmRpbmdQcmV2ZW50U2Nyb2xsUmVzZXRcbiAgICB9KSk7XG5cbiAgICBpZiAoaXNVbmludGVycnVwdGVkUmV2YWxpZGF0aW9uKSA7IGVsc2UgaWYgKHBlbmRpbmdBY3Rpb24gPT09IEFjdGlvbi5Qb3ApIDsgZWxzZSBpZiAocGVuZGluZ0FjdGlvbiA9PT0gQWN0aW9uLlB1c2gpIHtcbiAgICAgIGluaXQuaGlzdG9yeS5wdXNoKGxvY2F0aW9uLCBsb2NhdGlvbi5zdGF0ZSk7XG4gICAgfSBlbHNlIGlmIChwZW5kaW5nQWN0aW9uID09PSBBY3Rpb24uUmVwbGFjZSkge1xuICAgICAgaW5pdC5oaXN0b3J5LnJlcGxhY2UobG9jYXRpb24sIGxvY2F0aW9uLnN0YXRlKTtcbiAgICB9IC8vIFJlc2V0IHN0YXRlZnVsIG5hdmlnYXRpb24gdmFyc1xuXG5cbiAgICBwZW5kaW5nQWN0aW9uID0gQWN0aW9uLlBvcDtcbiAgICBwZW5kaW5nUHJldmVudFNjcm9sbFJlc2V0ID0gZmFsc2U7XG4gICAgaXNVbmludGVycnVwdGVkUmV2YWxpZGF0aW9uID0gZmFsc2U7XG4gICAgaXNSZXZhbGlkYXRpb25SZXF1aXJlZCA9IGZhbHNlO1xuICAgIGNhbmNlbGxlZERlZmVycmVkUm91dGVzID0gW107XG4gICAgY2FuY2VsbGVkRmV0Y2hlckxvYWRzID0gW107XG4gIH0gLy8gVHJpZ2dlciBhIG5hdmlnYXRpb24gZXZlbnQsIHdoaWNoIGNhbiBlaXRoZXIgYmUgYSBudW1lcmljYWwgUE9QIG9yIGEgUFVTSFxuICAvLyByZXBsYWNlIHdpdGggYW4gb3B0aW9uYWwgc3VibWlzc2lvblxuXG5cbiAgYXN5bmMgZnVuY3Rpb24gbmF2aWdhdGUodG8sIG9wdHMpIHtcbiAgICBpZiAodHlwZW9mIHRvID09PSBcIm51bWJlclwiKSB7XG4gICAgICBpbml0Lmhpc3RvcnkuZ28odG8pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCB7XG4gICAgICBwYXRoLFxuICAgICAgc3VibWlzc2lvbixcbiAgICAgIGVycm9yXG4gICAgfSA9IG5vcm1hbGl6ZU5hdmlnYXRlT3B0aW9ucyh0bywgb3B0cyk7XG4gICAgbGV0IGxvY2F0aW9uID0gY3JlYXRlTG9jYXRpb24oc3RhdGUubG9jYXRpb24sIHBhdGgsIG9wdHMgJiYgb3B0cy5zdGF0ZSk7IC8vIFdoZW4gdXNpbmcgbmF2aWdhdGUgYXMgYSBQVVNIL1JFUExBQ0Ugd2UgYXJlbid0IHJlYWRpbmcgYW4gYWxyZWFkeS1lbmNvZGVkXG4gICAgLy8gVVJMIGZyb20gd2luZG93LmxvY2F0aW9uLCBzbyB3ZSBuZWVkIHRvIGVuY29kZSBpdCBoZXJlIHNvIHRoZSBiZWhhdmlvclxuICAgIC8vIHJlbWFpbnMgdGhlIHNhbWUgYXMgUE9QIGFuZCBub24tZGF0YS1yb3V0ZXIgdXNhZ2VzLiAgbmV3IFVSTCgpIGRvZXMgYWxsXG4gICAgLy8gdGhlIHNhbWUgZW5jb2Rpbmcgd2UnZCBnZXQgZnJvbSBhIGhpc3RvcnkucHVzaFN0YXRlL3dpbmRvdy5sb2NhdGlvbiByZWFkXG4gICAgLy8gd2l0aG91dCBoYXZpbmcgdG8gdG91Y2ggaGlzdG9yeVxuXG4gICAgbG9jYXRpb24gPSBpbml0Lmhpc3RvcnkuZW5jb2RlTG9jYXRpb24obG9jYXRpb24pO1xuICAgIGxldCBoaXN0b3J5QWN0aW9uID0gKG9wdHMgJiYgb3B0cy5yZXBsYWNlKSA9PT0gdHJ1ZSB8fCBzdWJtaXNzaW9uICE9IG51bGwgPyBBY3Rpb24uUmVwbGFjZSA6IEFjdGlvbi5QdXNoO1xuICAgIGxldCBwcmV2ZW50U2Nyb2xsUmVzZXQgPSBvcHRzICYmIFwicHJldmVudFNjcm9sbFJlc2V0XCIgaW4gb3B0cyA/IG9wdHMucHJldmVudFNjcm9sbFJlc2V0ID09PSB0cnVlIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBhd2FpdCBzdGFydE5hdmlnYXRpb24oaGlzdG9yeUFjdGlvbiwgbG9jYXRpb24sIHtcbiAgICAgIHN1Ym1pc3Npb24sXG4gICAgICAvLyBTZW5kIHRocm91Z2ggdGhlIGZvcm1EYXRhIHNlcmlhbGl6YXRpb24gZXJyb3IgaWYgd2UgaGF2ZSBvbmUgc28gd2UgY2FuXG4gICAgICAvLyByZW5kZXIgYXQgdGhlIHJpZ2h0IGVycm9yIGJvdW5kYXJ5IGFmdGVyIHdlIG1hdGNoIHJvdXRlc1xuICAgICAgcGVuZGluZ0Vycm9yOiBlcnJvcixcbiAgICAgIHByZXZlbnRTY3JvbGxSZXNldCxcbiAgICAgIHJlcGxhY2U6IG9wdHMgJiYgb3B0cy5yZXBsYWNlXG4gICAgfSk7XG4gIH0gLy8gUmV2YWxpZGF0ZSBhbGwgY3VycmVudCBsb2FkZXJzLiAgSWYgYSBuYXZpZ2F0aW9uIGlzIGluIHByb2dyZXNzIG9yIGlmIHRoaXNcbiAgLy8gaXMgaW50ZXJydXB0ZWQgYnkgYSBuYXZpZ2F0aW9uLCBhbGxvdyB0aGlzIHRvIFwic3VjY2VlZFwiIGJ5IGNhbGxpbmcgYWxsXG4gIC8vIGxvYWRlcnMgZHVyaW5nIHRoZSBuZXh0IGxvYWRlciByb3VuZFxuXG5cbiAgZnVuY3Rpb24gcmV2YWxpZGF0ZSgpIHtcbiAgICBpbnRlcnJ1cHRBY3RpdmVMb2FkcygpO1xuICAgIHVwZGF0ZVN0YXRlKHtcbiAgICAgIHJldmFsaWRhdGlvbjogXCJsb2FkaW5nXCJcbiAgICB9KTsgLy8gSWYgd2UncmUgY3VycmVudGx5IHN1Ym1pdHRpbmcgYW4gYWN0aW9uLCB3ZSBkb24ndCBuZWVkIHRvIHN0YXJ0IGEgbmV3XG4gICAgLy8gbmF2aWdhdGlvbiwgd2UnbGwganVzdCBsZXQgdGhlIGZvbGxvdyB1cCBsb2FkZXIgZXhlY3V0aW9uIGNhbGwgYWxsIGxvYWRlcnNcblxuICAgIGlmIChzdGF0ZS5uYXZpZ2F0aW9uLnN0YXRlID09PSBcInN1Ym1pdHRpbmdcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgd2UncmUgY3VycmVudGx5IGluIGFuIGlkbGUgc3RhdGUsIHN0YXJ0IGEgbmV3IG5hdmlnYXRpb24gZm9yIHRoZSBjdXJyZW50XG4gICAgLy8gYWN0aW9uL2xvY2F0aW9uIGFuZCBtYXJrIGl0IGFzIHVuaW50ZXJydXB0ZWQsIHdoaWNoIHdpbGwgc2tpcCB0aGUgaGlzdG9yeVxuICAgIC8vIHVwZGF0ZSBpbiBjb21wbGV0ZU5hdmlnYXRpb25cblxuXG4gICAgaWYgKHN0YXRlLm5hdmlnYXRpb24uc3RhdGUgPT09IFwiaWRsZVwiKSB7XG4gICAgICBzdGFydE5hdmlnYXRpb24oc3RhdGUuaGlzdG9yeUFjdGlvbiwgc3RhdGUubG9jYXRpb24sIHtcbiAgICAgICAgc3RhcnRVbmludGVycnVwdGVkUmV2YWxpZGF0aW9uOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIE90aGVyd2lzZSwgaWYgd2UncmUgY3VycmVudGx5IGluIGEgbG9hZGluZyBzdGF0ZSwganVzdCBzdGFydCBhIG5ld1xuICAgIC8vIG5hdmlnYXRpb24gdG8gdGhlIG5hdmlnYXRpb24ubG9jYXRpb24gYnV0IGRvIG5vdCB0cmlnZ2VyIGFuIHVuaW50ZXJydXB0ZWRcbiAgICAvLyByZXZhbGlkYXRpb24gc28gdGhhdCBoaXN0b3J5IGNvcnJlY3RseSB1cGRhdGVzIG9uY2UgdGhlIG5hdmlnYXRpb24gY29tcGxldGVzXG5cblxuICAgIHN0YXJ0TmF2aWdhdGlvbihwZW5kaW5nQWN0aW9uIHx8IHN0YXRlLmhpc3RvcnlBY3Rpb24sIHN0YXRlLm5hdmlnYXRpb24ubG9jYXRpb24sIHtcbiAgICAgIG92ZXJyaWRlTmF2aWdhdGlvbjogc3RhdGUubmF2aWdhdGlvblxuICAgIH0pO1xuICB9IC8vIFN0YXJ0IGEgbmF2aWdhdGlvbiB0byB0aGUgZ2l2ZW4gYWN0aW9uL2xvY2F0aW9uLiAgQ2FuIG9wdGlvbmFsbHkgcHJvdmlkZSBhXG4gIC8vIG92ZXJyaWRlTmF2aWdhdGlvbiB3aGljaCB3aWxsIG92ZXJyaWRlIHRoZSBub3JtYWxMb2FkIGluIHRoZSBjYXNlIG9mIGEgcmVkaXJlY3RcbiAgLy8gbmF2aWdhdGlvblxuXG5cbiAgYXN5bmMgZnVuY3Rpb24gc3RhcnROYXZpZ2F0aW9uKGhpc3RvcnlBY3Rpb24sIGxvY2F0aW9uLCBvcHRzKSB7XG4gICAgLy8gQWJvcnQgYW55IGluLXByb2dyZXNzIG5hdmlnYXRpb25zIGFuZCBzdGFydCBhIG5ldyBvbmUuIFVuc2V0IGFueSBvbmdvaW5nXG4gICAgLy8gdW5pbnRlcnJ1cHRlZCByZXZhbGlkYXRpb25zIHVubGVzcyB0b2xkIG90aGVyd2lzZSwgc2luY2Ugd2Ugd2FudCB0aGlzXG4gICAgLy8gbmV3IG5hdmlnYXRpb24gdG8gdXBkYXRlIGhpc3Rvcnkgbm9ybWFsbHlcbiAgICBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIgJiYgcGVuZGluZ05hdmlnYXRpb25Db250cm9sbGVyLmFib3J0KCk7XG4gICAgcGVuZGluZ05hdmlnYXRpb25Db250cm9sbGVyID0gbnVsbDtcbiAgICBwZW5kaW5nQWN0aW9uID0gaGlzdG9yeUFjdGlvbjtcbiAgICBpc1VuaW50ZXJydXB0ZWRSZXZhbGlkYXRpb24gPSAob3B0cyAmJiBvcHRzLnN0YXJ0VW5pbnRlcnJ1cHRlZFJldmFsaWRhdGlvbikgPT09IHRydWU7IC8vIFNhdmUgdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIGV2ZXJ5IHRpbWUgd2Ugc3RhcnQgYSBuZXcgbmF2aWdhdGlvbixcbiAgICAvLyBhbmQgdHJhY2sgd2hldGhlciB3ZSBzaG91bGQgcmVzZXQgc2Nyb2xsIG9uIGNvbXBsZXRpb25cblxuICAgIHNhdmVTY3JvbGxQb3NpdGlvbihzdGF0ZS5sb2NhdGlvbiwgc3RhdGUubWF0Y2hlcyk7XG4gICAgcGVuZGluZ1ByZXZlbnRTY3JvbGxSZXNldCA9IChvcHRzICYmIG9wdHMucHJldmVudFNjcm9sbFJlc2V0KSA9PT0gdHJ1ZTtcbiAgICBsZXQgbG9hZGluZ05hdmlnYXRpb24gPSBvcHRzICYmIG9wdHMub3ZlcnJpZGVOYXZpZ2F0aW9uO1xuICAgIGxldCBtYXRjaGVzID0gbWF0Y2hSb3V0ZXMoZGF0YVJvdXRlcywgbG9jYXRpb24sIGluaXQuYmFzZW5hbWUpOyAvLyBTaG9ydCBjaXJjdWl0IHdpdGggYSA0MDQgb24gdGhlIHJvb3QgZXJyb3IgYm91bmRhcnkgaWYgd2UgbWF0Y2ggbm90aGluZ1xuXG4gICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICBsZXQge1xuICAgICAgICBtYXRjaGVzOiBub3RGb3VuZE1hdGNoZXMsXG4gICAgICAgIHJvdXRlLFxuICAgICAgICBlcnJvclxuICAgICAgfSA9IGdldE5vdEZvdW5kTWF0Y2hlcyhkYXRhUm91dGVzKTsgLy8gQ2FuY2VsIGFsbCBwZW5kaW5nIGRlZmVycmVkIG9uIDQwNHMgc2luY2Ugd2UgZG9uJ3Qga2VlcCBhbnkgcm91dGVzXG5cbiAgICAgIGNhbmNlbEFjdGl2ZURlZmVycmVkcygpO1xuICAgICAgY29tcGxldGVOYXZpZ2F0aW9uKGxvY2F0aW9uLCB7XG4gICAgICAgIG1hdGNoZXM6IG5vdEZvdW5kTWF0Y2hlcyxcbiAgICAgICAgbG9hZGVyRGF0YToge30sXG4gICAgICAgIGVycm9yczoge1xuICAgICAgICAgIFtyb3V0ZS5pZF06IGVycm9yXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gU2hvcnQgY2lyY3VpdCBpZiBpdCdzIG9ubHkgYSBoYXNoIGNoYW5nZVxuXG5cbiAgICBpZiAoaXNIYXNoQ2hhbmdlT25seShzdGF0ZS5sb2NhdGlvbiwgbG9jYXRpb24pKSB7XG4gICAgICBjb21wbGV0ZU5hdmlnYXRpb24obG9jYXRpb24sIHtcbiAgICAgICAgbWF0Y2hlc1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBDcmVhdGUgYSBjb250cm9sbGVyL1JlcXVlc3QgZm9yIHRoaXMgbmF2aWdhdGlvblxuXG5cbiAgICBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgbGV0IHJlcXVlc3QgPSBjcmVhdGVSZXF1ZXN0KGxvY2F0aW9uLCBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIuc2lnbmFsLCBvcHRzICYmIG9wdHMuc3VibWlzc2lvbik7XG4gICAgbGV0IHBlbmRpbmdBY3Rpb25EYXRhO1xuICAgIGxldCBwZW5kaW5nRXJyb3I7XG5cbiAgICBpZiAob3B0cyAmJiBvcHRzLnBlbmRpbmdFcnJvcikge1xuICAgICAgLy8gSWYgd2UgaGF2ZSBhIHBlbmRpbmdFcnJvciwgaXQgbWVhbnMgdGhlIHVzZXIgYXR0ZW1wdGVkIGEgR0VUIHN1Ym1pc3Npb25cbiAgICAgIC8vIHdpdGggYmluYXJ5IEZvcm1EYXRhIHNvIGFzc2lnbiBoZXJlIGFuZCBza2lwIHRvIGhhbmRsZUxvYWRlcnMuICBUaGF0XG4gICAgICAvLyB3YXkgd2UgaGFuZGxlIGNhbGxpbmcgbG9hZGVycyBhYm92ZSB0aGUgYm91bmRhcnkgZXRjLiAgSXQncyBub3QgcmVhbGx5XG4gICAgICAvLyBkaWZmZXJlbnQgZnJvbSBhbiBhY3Rpb25FcnJvciBpbiB0aGF0IHNlbnNlLlxuICAgICAgcGVuZGluZ0Vycm9yID0ge1xuICAgICAgICBbZmluZE5lYXJlc3RCb3VuZGFyeShtYXRjaGVzKS5yb3V0ZS5pZF06IG9wdHMucGVuZGluZ0Vycm9yXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAob3B0cyAmJiBvcHRzLnN1Ym1pc3Npb24pIHtcbiAgICAgIC8vIENhbGwgYWN0aW9uIGlmIHdlIHJlY2VpdmVkIGFuIGFjdGlvbiBzdWJtaXNzaW9uXG4gICAgICBsZXQgYWN0aW9uT3V0cHV0ID0gYXdhaXQgaGFuZGxlQWN0aW9uKHJlcXVlc3QsIGxvY2F0aW9uLCBvcHRzLnN1Ym1pc3Npb24sIG1hdGNoZXMsIHtcbiAgICAgICAgcmVwbGFjZTogb3B0cy5yZXBsYWNlXG4gICAgICB9KTtcblxuICAgICAgaWYgKGFjdGlvbk91dHB1dC5zaG9ydENpcmN1aXRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHBlbmRpbmdBY3Rpb25EYXRhID0gYWN0aW9uT3V0cHV0LnBlbmRpbmdBY3Rpb25EYXRhO1xuICAgICAgcGVuZGluZ0Vycm9yID0gYWN0aW9uT3V0cHV0LnBlbmRpbmdBY3Rpb25FcnJvcjtcblxuICAgICAgbGV0IG5hdmlnYXRpb24gPSBfZXh0ZW5kcyh7XG4gICAgICAgIHN0YXRlOiBcImxvYWRpbmdcIixcbiAgICAgICAgbG9jYXRpb25cbiAgICAgIH0sIG9wdHMuc3VibWlzc2lvbik7XG5cbiAgICAgIGxvYWRpbmdOYXZpZ2F0aW9uID0gbmF2aWdhdGlvbjtcbiAgICB9IC8vIENhbGwgbG9hZGVyc1xuXG5cbiAgICBsZXQge1xuICAgICAgc2hvcnRDaXJjdWl0ZWQsXG4gICAgICBsb2FkZXJEYXRhLFxuICAgICAgZXJyb3JzXG4gICAgfSA9IGF3YWl0IGhhbmRsZUxvYWRlcnMocmVxdWVzdCwgbG9jYXRpb24sIG1hdGNoZXMsIGxvYWRpbmdOYXZpZ2F0aW9uLCBvcHRzICYmIG9wdHMuc3VibWlzc2lvbiwgb3B0cyAmJiBvcHRzLnJlcGxhY2UsIHBlbmRpbmdBY3Rpb25EYXRhLCBwZW5kaW5nRXJyb3IpO1xuXG4gICAgaWYgKHNob3J0Q2lyY3VpdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBDbGVhbiB1cCBub3cgdGhhdCB0aGUgYWN0aW9uL2xvYWRlcnMgaGF2ZSBjb21wbGV0ZWQuICBEb24ndCBjbGVhbiB1cCBpZlxuICAgIC8vIHdlIHNob3J0IGNpcmN1aXRlZCBiZWNhdXNlIHBlbmRpbmdOYXZpZ2F0aW9uQ29udHJvbGxlciB3aWxsIGhhdmUgYWxyZWFkeVxuICAgIC8vIGJlZW4gYXNzaWduZWQgdG8gYSBuZXcgY29udHJvbGxlciBmb3IgdGhlIG5leHQgbmF2aWdhdGlvblxuXG5cbiAgICBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIgPSBudWxsO1xuICAgIGNvbXBsZXRlTmF2aWdhdGlvbihsb2NhdGlvbiwge1xuICAgICAgbWF0Y2hlcyxcbiAgICAgIGxvYWRlckRhdGEsXG4gICAgICBlcnJvcnNcbiAgICB9KTtcbiAgfSAvLyBDYWxsIHRoZSBhY3Rpb24gbWF0Y2hlZCBieSB0aGUgbGVhZiByb3V0ZSBmb3IgdGhpcyBuYXZpZ2F0aW9uIGFuZCBoYW5kbGVcbiAgLy8gcmVkaXJlY3RzL2Vycm9yc1xuXG5cbiAgYXN5bmMgZnVuY3Rpb24gaGFuZGxlQWN0aW9uKHJlcXVlc3QsIGxvY2F0aW9uLCBzdWJtaXNzaW9uLCBtYXRjaGVzLCBvcHRzKSB7XG4gICAgaW50ZXJydXB0QWN0aXZlTG9hZHMoKTsgLy8gUHV0IHVzIGluIGEgc3VibWl0dGluZyBzdGF0ZVxuXG4gICAgbGV0IG5hdmlnYXRpb24gPSBfZXh0ZW5kcyh7XG4gICAgICBzdGF0ZTogXCJzdWJtaXR0aW5nXCIsXG4gICAgICBsb2NhdGlvblxuICAgIH0sIHN1Ym1pc3Npb24pO1xuXG4gICAgdXBkYXRlU3RhdGUoe1xuICAgICAgbmF2aWdhdGlvblxuICAgIH0pOyAvLyBDYWxsIG91ciBhY3Rpb24gYW5kIGdldCB0aGUgcmVzdWx0XG5cbiAgICBsZXQgcmVzdWx0O1xuICAgIGxldCBhY3Rpb25NYXRjaCA9IGdldFRhcmdldE1hdGNoKG1hdGNoZXMsIGxvY2F0aW9uKTtcblxuICAgIGlmICghYWN0aW9uTWF0Y2gucm91dGUuYWN0aW9uKSB7XG4gICAgICByZXN1bHQgPSBnZXRNZXRob2ROb3RBbGxvd2VkUmVzdWx0KGxvY2F0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gYXdhaXQgY2FsbExvYWRlck9yQWN0aW9uKFwiYWN0aW9uXCIsIHJlcXVlc3QsIGFjdGlvbk1hdGNoLCBtYXRjaGVzLCByb3V0ZXIuYmFzZW5hbWUpO1xuXG4gICAgICBpZiAocmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNob3J0Q2lyY3VpdGVkOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzUmVkaXJlY3RSZXN1bHQocmVzdWx0KSkge1xuICAgICAgbGV0IHJlZGlyZWN0TmF2aWdhdGlvbiA9IF9leHRlbmRzKHtcbiAgICAgICAgc3RhdGU6IFwibG9hZGluZ1wiLFxuICAgICAgICBsb2NhdGlvbjogY3JlYXRlTG9jYXRpb24oc3RhdGUubG9jYXRpb24sIHJlc3VsdC5sb2NhdGlvbilcbiAgICAgIH0sIHN1Ym1pc3Npb24pO1xuXG4gICAgICBhd2FpdCBzdGFydFJlZGlyZWN0TmF2aWdhdGlvbihyZXN1bHQsIHJlZGlyZWN0TmF2aWdhdGlvbiwgb3B0cyAmJiBvcHRzLnJlcGxhY2UpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2hvcnRDaXJjdWl0ZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGlzRXJyb3JSZXN1bHQocmVzdWx0KSkge1xuICAgICAgLy8gU3RvcmUgb2ZmIHRoZSBwZW5kaW5nIGVycm9yIC0gd2UgdXNlIGl0IHRvIGRldGVybWluZSB3aGljaCBsb2FkZXJzXG4gICAgICAvLyB0byBjYWxsIGFuZCB3aWxsIGNvbW1pdCBpdCB3aGVuIHdlIGNvbXBsZXRlIHRoZSBuYXZpZ2F0aW9uXG4gICAgICBsZXQgYm91bmRhcnlNYXRjaCA9IGZpbmROZWFyZXN0Qm91bmRhcnkobWF0Y2hlcywgYWN0aW9uTWF0Y2gucm91dGUuaWQpOyAvLyBCeSBkZWZhdWx0LCBhbGwgc3VibWlzc2lvbnMgYXJlIFJFUExBQ0UgbmF2aWdhdGlvbnMsIGJ1dCBpZiB0aGVcbiAgICAgIC8vIGFjdGlvbiB0aHJldyBhbiBlcnJvciB0aGF0J2xsIGJlIHJlbmRlcmVkIGluIGFuIGVycm9yRWxlbWVudCwgd2UgZmFsbFxuICAgICAgLy8gYmFjayB0byBQVVNIIHNvIHRoYXQgdGhlIHVzZXIgY2FuIHVzZSB0aGUgYmFjayBidXR0b24gdG8gZ2V0IGJhY2sgdG9cbiAgICAgIC8vIHRoZSBwcmUtc3VibWlzc2lvbiBmb3JtIGxvY2F0aW9uIHRvIHRyeSBhZ2FpblxuXG4gICAgICBpZiAoKG9wdHMgJiYgb3B0cy5yZXBsYWNlKSAhPT0gdHJ1ZSkge1xuICAgICAgICBwZW5kaW5nQWN0aW9uID0gQWN0aW9uLlB1c2g7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBlbmRpbmdBY3Rpb25FcnJvcjoge1xuICAgICAgICAgIFtib3VuZGFyeU1hdGNoLnJvdXRlLmlkXTogcmVzdWx0LmVycm9yXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGlzRGVmZXJyZWRSZXN1bHQocmVzdWx0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGVmZXIoKSBpcyBub3Qgc3VwcG9ydGVkIGluIGFjdGlvbnNcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBlbmRpbmdBY3Rpb25EYXRhOiB7XG4gICAgICAgIFthY3Rpb25NYXRjaC5yb3V0ZS5pZF06IHJlc3VsdC5kYXRhXG4gICAgICB9XG4gICAgfTtcbiAgfSAvLyBDYWxsIGFsbCBhcHBsaWNhYmxlIGxvYWRlcnMgZm9yIHRoZSBnaXZlbiBtYXRjaGVzLCBoYW5kbGluZyByZWRpcmVjdHMsXG4gIC8vIGVycm9ycywgZXRjLlxuXG5cbiAgYXN5bmMgZnVuY3Rpb24gaGFuZGxlTG9hZGVycyhyZXF1ZXN0LCBsb2NhdGlvbiwgbWF0Y2hlcywgb3ZlcnJpZGVOYXZpZ2F0aW9uLCBzdWJtaXNzaW9uLCByZXBsYWNlLCBwZW5kaW5nQWN0aW9uRGF0YSwgcGVuZGluZ0Vycm9yKSB7XG4gICAgLy8gRmlndXJlIG91dCB0aGUgcmlnaHQgbmF2aWdhdGlvbiB3ZSB3YW50IHRvIHVzZSBmb3IgZGF0YSBsb2FkaW5nXG4gICAgbGV0IGxvYWRpbmdOYXZpZ2F0aW9uID0gb3ZlcnJpZGVOYXZpZ2F0aW9uO1xuXG4gICAgaWYgKCFsb2FkaW5nTmF2aWdhdGlvbikge1xuICAgICAgbGV0IG5hdmlnYXRpb24gPSB7XG4gICAgICAgIHN0YXRlOiBcImxvYWRpbmdcIixcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIGZvcm1NZXRob2Q6IHVuZGVmaW5lZCxcbiAgICAgICAgZm9ybUFjdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICBmb3JtRW5jVHlwZTogdW5kZWZpbmVkLFxuICAgICAgICBmb3JtRGF0YTogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgbG9hZGluZ05hdmlnYXRpb24gPSBuYXZpZ2F0aW9uO1xuICAgIH1cblxuICAgIGxldCBbbWF0Y2hlc1RvTG9hZCwgcmV2YWxpZGF0aW5nRmV0Y2hlcnNdID0gZ2V0TWF0Y2hlc1RvTG9hZChzdGF0ZSwgbWF0Y2hlcywgc3VibWlzc2lvbiwgbG9jYXRpb24sIGlzUmV2YWxpZGF0aW9uUmVxdWlyZWQsIGNhbmNlbGxlZERlZmVycmVkUm91dGVzLCBjYW5jZWxsZWRGZXRjaGVyTG9hZHMsIHBlbmRpbmdBY3Rpb25EYXRhLCBwZW5kaW5nRXJyb3IsIGZldGNoTG9hZE1hdGNoZXMpOyAvLyBDYW5jZWwgcGVuZGluZyBkZWZlcnJlZHMgZm9yIG5vLWxvbmdlci1tYXRjaGVkIHJvdXRlcyBvciByb3V0ZXMgd2UncmVcbiAgICAvLyBhYm91dCB0byByZWxvYWQuICBOb3RlIHRoYXQgaWYgdGhpcyBpcyBhbiBhY3Rpb24gcmVsb2FkIHdlIHdvdWxkIGhhdmVcbiAgICAvLyBhbHJlYWR5IGNhbmNlbGxlZCBhbGwgcGVuZGluZyBkZWZlcnJlZHMgc28gdGhpcyB3b3VsZCBiZSBhIG5vLW9wXG5cbiAgICBjYW5jZWxBY3RpdmVEZWZlcnJlZHMocm91dGVJZCA9PiAhKG1hdGNoZXMgJiYgbWF0Y2hlcy5zb21lKG0gPT4gbS5yb3V0ZS5pZCA9PT0gcm91dGVJZCkpIHx8IG1hdGNoZXNUb0xvYWQgJiYgbWF0Y2hlc1RvTG9hZC5zb21lKG0gPT4gbS5yb3V0ZS5pZCA9PT0gcm91dGVJZCkpOyAvLyBTaG9ydCBjaXJjdWl0IGlmIHdlIGhhdmUgbm8gbG9hZGVycyB0byBydW5cblxuICAgIGlmIChtYXRjaGVzVG9Mb2FkLmxlbmd0aCA9PT0gMCAmJiByZXZhbGlkYXRpbmdGZXRjaGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbXBsZXRlTmF2aWdhdGlvbihsb2NhdGlvbiwge1xuICAgICAgICBtYXRjaGVzLFxuICAgICAgICBsb2FkZXJEYXRhOiBtZXJnZUxvYWRlckRhdGEoc3RhdGUubG9hZGVyRGF0YSwge30sIG1hdGNoZXMpLFxuICAgICAgICAvLyBDb21taXQgcGVuZGluZyBlcnJvciBpZiB3ZSdyZSBzaG9ydCBjaXJjdWl0aW5nXG4gICAgICAgIGVycm9yczogcGVuZGluZ0Vycm9yIHx8IG51bGwsXG4gICAgICAgIGFjdGlvbkRhdGE6IHBlbmRpbmdBY3Rpb25EYXRhIHx8IG51bGxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2hvcnRDaXJjdWl0ZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfSAvLyBJZiB0aGlzIGlzIGFuIHVuaW50ZXJydXB0ZWQgcmV2YWxpZGF0aW9uLCB3ZSByZW1haW4gaW4gb3VyIGN1cnJlbnQgaWRsZVxuICAgIC8vIHN0YXRlLiAgSWYgbm90LCB3ZSBuZWVkIHRvIHN3aXRjaCB0byBvdXIgbG9hZGluZyBzdGF0ZSBhbmQgbG9hZCBkYXRhLFxuICAgIC8vIHByZXNlcnZpbmcgYW55IG5ldyBhY3Rpb24gZGF0YSBvciBleGlzdGluZyBhY3Rpb24gZGF0YSAoaW4gdGhlIGNhc2Ugb2ZcbiAgICAvLyBhIHJldmFsaWRhdGlvbiBpbnRlcnJ1cHRpbmcgYW4gYWN0aW9uUmVsb2FkKVxuXG5cbiAgICBpZiAoIWlzVW5pbnRlcnJ1cHRlZFJldmFsaWRhdGlvbikge1xuICAgICAgcmV2YWxpZGF0aW5nRmV0Y2hlcnMuZm9yRWFjaChfcmVmMiA9PiB7XG4gICAgICAgIGxldCBba2V5XSA9IF9yZWYyO1xuICAgICAgICBsZXQgZmV0Y2hlciA9IHN0YXRlLmZldGNoZXJzLmdldChrZXkpO1xuICAgICAgICBsZXQgcmV2YWxpZGF0aW5nRmV0Y2hlciA9IHtcbiAgICAgICAgICBzdGF0ZTogXCJsb2FkaW5nXCIsXG4gICAgICAgICAgZGF0YTogZmV0Y2hlciAmJiBmZXRjaGVyLmRhdGEsXG4gICAgICAgICAgZm9ybU1ldGhvZDogdW5kZWZpbmVkLFxuICAgICAgICAgIGZvcm1BY3Rpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICBmb3JtRW5jVHlwZTogdW5kZWZpbmVkLFxuICAgICAgICAgIGZvcm1EYXRhOiB1bmRlZmluZWRcbiAgICAgICAgfTtcbiAgICAgICAgc3RhdGUuZmV0Y2hlcnMuc2V0KGtleSwgcmV2YWxpZGF0aW5nRmV0Y2hlcik7XG4gICAgICB9KTtcbiAgICAgIHVwZGF0ZVN0YXRlKF9leHRlbmRzKHtcbiAgICAgICAgbmF2aWdhdGlvbjogbG9hZGluZ05hdmlnYXRpb24sXG4gICAgICAgIGFjdGlvbkRhdGE6IHBlbmRpbmdBY3Rpb25EYXRhIHx8IHN0YXRlLmFjdGlvbkRhdGEgfHwgbnVsbFxuICAgICAgfSwgcmV2YWxpZGF0aW5nRmV0Y2hlcnMubGVuZ3RoID4gMCA/IHtcbiAgICAgICAgZmV0Y2hlcnM6IG5ldyBNYXAoc3RhdGUuZmV0Y2hlcnMpXG4gICAgICB9IDoge30pKTtcbiAgICB9XG5cbiAgICBwZW5kaW5nTmF2aWdhdGlvbkxvYWRJZCA9ICsraW5jcmVtZW50aW5nTG9hZElkO1xuICAgIHJldmFsaWRhdGluZ0ZldGNoZXJzLmZvckVhY2goX3JlZjMgPT4ge1xuICAgICAgbGV0IFtrZXldID0gX3JlZjM7XG4gICAgICByZXR1cm4gZmV0Y2hDb250cm9sbGVycy5zZXQoa2V5LCBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIpO1xuICAgIH0pO1xuICAgIGxldCB7XG4gICAgICByZXN1bHRzLFxuICAgICAgbG9hZGVyUmVzdWx0cyxcbiAgICAgIGZldGNoZXJSZXN1bHRzXG4gICAgfSA9IGF3YWl0IGNhbGxMb2FkZXJzQW5kTWF5YmVSZXNvbHZlRGF0YShzdGF0ZS5tYXRjaGVzLCBtYXRjaGVzLCBtYXRjaGVzVG9Mb2FkLCByZXZhbGlkYXRpbmdGZXRjaGVycywgcmVxdWVzdCk7XG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2hvcnRDaXJjdWl0ZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfSAvLyBDbGVhbiB1cCBfYWZ0ZXJfIGxvYWRlcnMgaGF2ZSBjb21wbGV0ZWQuICBEb24ndCBjbGVhbiB1cCBpZiB3ZSBzaG9ydFxuICAgIC8vIGNpcmN1aXRlZCBiZWNhdXNlIGZldGNoQ29udHJvbGxlcnMgd291bGQgaGF2ZSBiZWVuIGFib3J0ZWQgYW5kXG4gICAgLy8gcmVhc3NpZ25lZCB0byBuZXcgY29udHJvbGxlcnMgZm9yIHRoZSBuZXh0IG5hdmlnYXRpb25cblxuXG4gICAgcmV2YWxpZGF0aW5nRmV0Y2hlcnMuZm9yRWFjaChfcmVmNCA9PiB7XG4gICAgICBsZXQgW2tleV0gPSBfcmVmNDtcbiAgICAgIHJldHVybiBmZXRjaENvbnRyb2xsZXJzLmRlbGV0ZShrZXkpO1xuICAgIH0pOyAvLyBJZiBhbnkgbG9hZGVycyByZXR1cm5lZCBhIHJlZGlyZWN0IFJlc3BvbnNlLCBzdGFydCBhIG5ldyBSRVBMQUNFIG5hdmlnYXRpb25cblxuICAgIGxldCByZWRpcmVjdCA9IGZpbmRSZWRpcmVjdChyZXN1bHRzKTtcblxuICAgIGlmIChyZWRpcmVjdCkge1xuICAgICAgbGV0IHJlZGlyZWN0TmF2aWdhdGlvbiA9IGdldExvYWRlclJlZGlyZWN0KHN0YXRlLCByZWRpcmVjdCk7XG4gICAgICBhd2FpdCBzdGFydFJlZGlyZWN0TmF2aWdhdGlvbihyZWRpcmVjdCwgcmVkaXJlY3ROYXZpZ2F0aW9uLCByZXBsYWNlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNob3J0Q2lyY3VpdGVkOiB0cnVlXG4gICAgICB9O1xuICAgIH0gLy8gUHJvY2VzcyBhbmQgY29tbWl0IG91dHB1dCBmcm9tIGxvYWRlcnNcblxuXG4gICAgbGV0IHtcbiAgICAgIGxvYWRlckRhdGEsXG4gICAgICBlcnJvcnNcbiAgICB9ID0gcHJvY2Vzc0xvYWRlckRhdGEoc3RhdGUsIG1hdGNoZXMsIG1hdGNoZXNUb0xvYWQsIGxvYWRlclJlc3VsdHMsIHBlbmRpbmdFcnJvciwgcmV2YWxpZGF0aW5nRmV0Y2hlcnMsIGZldGNoZXJSZXN1bHRzLCBhY3RpdmVEZWZlcnJlZHMpOyAvLyBXaXJlIHVwIHN1YnNjcmliZXJzIHRvIHVwZGF0ZSBsb2FkZXJEYXRhIGFzIHByb21pc2VzIHNldHRsZVxuXG4gICAgYWN0aXZlRGVmZXJyZWRzLmZvckVhY2goKGRlZmVycmVkRGF0YSwgcm91dGVJZCkgPT4ge1xuICAgICAgZGVmZXJyZWREYXRhLnN1YnNjcmliZShhYm9ydGVkID0+IHtcbiAgICAgICAgLy8gTm90ZTogTm8gbmVlZCB0byB1cGRhdGVTdGF0ZSBoZXJlIHNpbmNlIHRoZSBUcmFja2VkUHJvbWlzZSBvblxuICAgICAgICAvLyBsb2FkZXJEYXRhIGlzIHN0YWJsZSBhY3Jvc3MgcmVzb2x2ZS9yZWplY3RcbiAgICAgICAgLy8gUmVtb3ZlIHRoaXMgaW5zdGFuY2UgaWYgd2Ugd2VyZSBhYm9ydGVkIG9yIGlmIHByb21pc2VzIGhhdmUgc2V0dGxlZFxuICAgICAgICBpZiAoYWJvcnRlZCB8fCBkZWZlcnJlZERhdGEuZG9uZSkge1xuICAgICAgICAgIGFjdGl2ZURlZmVycmVkcy5kZWxldGUocm91dGVJZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIG1hcmtGZXRjaFJlZGlyZWN0c0RvbmUoKTtcbiAgICBsZXQgZGlkQWJvcnRGZXRjaExvYWRzID0gYWJvcnRTdGFsZUZldGNoTG9hZHMocGVuZGluZ05hdmlnYXRpb25Mb2FkSWQpO1xuICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICBsb2FkZXJEYXRhLFxuICAgICAgZXJyb3JzXG4gICAgfSwgZGlkQWJvcnRGZXRjaExvYWRzIHx8IHJldmFsaWRhdGluZ0ZldGNoZXJzLmxlbmd0aCA+IDAgPyB7XG4gICAgICBmZXRjaGVyczogbmV3IE1hcChzdGF0ZS5mZXRjaGVycylcbiAgICB9IDoge30pO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RmV0Y2hlcihrZXkpIHtcbiAgICByZXR1cm4gc3RhdGUuZmV0Y2hlcnMuZ2V0KGtleSkgfHwgSURMRV9GRVRDSEVSO1xuICB9IC8vIFRyaWdnZXIgYSBmZXRjaGVyIGxvYWQvc3VibWl0IGZvciB0aGUgZ2l2ZW4gZmV0Y2hlciBrZXlcblxuXG4gIGZ1bmN0aW9uIGZldGNoKGtleSwgcm91dGVJZCwgaHJlZiwgb3B0cykge1xuICAgIGlmIChpc1NlcnZlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicm91dGVyLmZldGNoKCkgd2FzIGNhbGxlZCBkdXJpbmcgdGhlIHNlcnZlciByZW5kZXIsIGJ1dCBpdCBzaG91bGRuJ3QgYmUuIFwiICsgXCJZb3UgYXJlIGxpa2VseSBjYWxsaW5nIGEgdXNlRmV0Y2hlcigpIG1ldGhvZCBpbiB0aGUgYm9keSBvZiB5b3VyIGNvbXBvbmVudC4gXCIgKyBcIlRyeSBtb3ZpbmcgaXQgdG8gYSB1c2VFZmZlY3Qgb3IgYSBjYWxsYmFjay5cIik7XG4gICAgfVxuXG4gICAgaWYgKGZldGNoQ29udHJvbGxlcnMuaGFzKGtleSkpIGFib3J0RmV0Y2hlcihrZXkpO1xuICAgIGxldCBtYXRjaGVzID0gbWF0Y2hSb3V0ZXMoZGF0YVJvdXRlcywgaHJlZiwgaW5pdC5iYXNlbmFtZSk7XG5cbiAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgIHNldEZldGNoZXJFcnJvcihrZXksIHJvdXRlSWQsIG5ldyBFcnJvclJlc3BvbnNlKDQwNCwgXCJOb3QgRm91bmRcIiwgbnVsbCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCB7XG4gICAgICBwYXRoLFxuICAgICAgc3VibWlzc2lvblxuICAgIH0gPSBub3JtYWxpemVOYXZpZ2F0ZU9wdGlvbnMoaHJlZiwgb3B0cywgdHJ1ZSk7XG4gICAgbGV0IG1hdGNoID0gZ2V0VGFyZ2V0TWF0Y2gobWF0Y2hlcywgcGF0aCk7XG5cbiAgICBpZiAoc3VibWlzc2lvbikge1xuICAgICAgaGFuZGxlRmV0Y2hlckFjdGlvbihrZXksIHJvdXRlSWQsIHBhdGgsIG1hdGNoLCBtYXRjaGVzLCBzdWJtaXNzaW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFN0b3JlIG9mZiB0aGUgbWF0Y2ggc28gd2UgY2FuIGNhbGwgaXQncyBzaG91bGRSZXZhbGlkYXRlIG9uIHN1YnNlcXVlbnRcbiAgICAvLyByZXZhbGlkYXRpb25zXG5cblxuICAgIGZldGNoTG9hZE1hdGNoZXMuc2V0KGtleSwgW3BhdGgsIG1hdGNoLCBtYXRjaGVzXSk7XG4gICAgaGFuZGxlRmV0Y2hlckxvYWRlcihrZXksIHJvdXRlSWQsIHBhdGgsIG1hdGNoLCBtYXRjaGVzKTtcbiAgfSAvLyBDYWxsIHRoZSBhY3Rpb24gZm9yIHRoZSBtYXRjaGVkIGZldGNoZXIuc3VibWl0KCksIGFuZCB0aGVuIGhhbmRsZSByZWRpcmVjdHMsXG4gIC8vIGVycm9ycywgYW5kIHJldmFsaWRhdGlvblxuXG5cbiAgYXN5bmMgZnVuY3Rpb24gaGFuZGxlRmV0Y2hlckFjdGlvbihrZXksIHJvdXRlSWQsIHBhdGgsIG1hdGNoLCByZXF1ZXN0TWF0Y2hlcywgc3VibWlzc2lvbikge1xuICAgIGludGVycnVwdEFjdGl2ZUxvYWRzKCk7XG4gICAgZmV0Y2hMb2FkTWF0Y2hlcy5kZWxldGUoa2V5KTtcblxuICAgIGlmICghbWF0Y2gucm91dGUuYWN0aW9uKSB7XG4gICAgICBsZXQge1xuICAgICAgICBlcnJvclxuICAgICAgfSA9IGdldE1ldGhvZE5vdEFsbG93ZWRSZXN1bHQocGF0aCk7XG4gICAgICBzZXRGZXRjaGVyRXJyb3Ioa2V5LCByb3V0ZUlkLCBlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBQdXQgdGhpcyBmZXRjaGVyIGludG8gaXQncyBzdWJtaXR0aW5nIHN0YXRlXG5cblxuICAgIGxldCBleGlzdGluZ0ZldGNoZXIgPSBzdGF0ZS5mZXRjaGVycy5nZXQoa2V5KTtcblxuICAgIGxldCBmZXRjaGVyID0gX2V4dGVuZHMoe1xuICAgICAgc3RhdGU6IFwic3VibWl0dGluZ1wiXG4gICAgfSwgc3VibWlzc2lvbiwge1xuICAgICAgZGF0YTogZXhpc3RpbmdGZXRjaGVyICYmIGV4aXN0aW5nRmV0Y2hlci5kYXRhXG4gICAgfSk7XG5cbiAgICBzdGF0ZS5mZXRjaGVycy5zZXQoa2V5LCBmZXRjaGVyKTtcbiAgICB1cGRhdGVTdGF0ZSh7XG4gICAgICBmZXRjaGVyczogbmV3IE1hcChzdGF0ZS5mZXRjaGVycylcbiAgICB9KTsgLy8gQ2FsbCB0aGUgYWN0aW9uIGZvciB0aGUgZmV0Y2hlclxuXG4gICAgbGV0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBsZXQgZmV0Y2hSZXF1ZXN0ID0gY3JlYXRlUmVxdWVzdChwYXRoLCBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLCBzdWJtaXNzaW9uKTtcbiAgICBmZXRjaENvbnRyb2xsZXJzLnNldChrZXksIGFib3J0Q29udHJvbGxlcik7XG4gICAgbGV0IGFjdGlvblJlc3VsdCA9IGF3YWl0IGNhbGxMb2FkZXJPckFjdGlvbihcImFjdGlvblwiLCBmZXRjaFJlcXVlc3QsIG1hdGNoLCByZXF1ZXN0TWF0Y2hlcywgcm91dGVyLmJhc2VuYW1lKTtcblxuICAgIGlmIChmZXRjaFJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIC8vIFdlIGNhbiBkZWxldGUgdGhpcyBzbyBsb25nIGFzIHdlIHdlcmVuJ3QgYWJvcnRlZCBieSBvdSBvdXIgb3duIGZldGNoZXJcbiAgICAgIC8vIHJlLXN1Ym1pdCB3aGljaCB3b3VsZCBoYXZlIHB1dCBfbmV3XyBjb250cm9sbGVyIGlzIGluIGZldGNoQ29udHJvbGxlcnNcbiAgICAgIGlmIChmZXRjaENvbnRyb2xsZXJzLmdldChrZXkpID09PSBhYm9ydENvbnRyb2xsZXIpIHtcbiAgICAgICAgZmV0Y2hDb250cm9sbGVycy5kZWxldGUoa2V5KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc1JlZGlyZWN0UmVzdWx0KGFjdGlvblJlc3VsdCkpIHtcbiAgICAgIGZldGNoQ29udHJvbGxlcnMuZGVsZXRlKGtleSk7XG4gICAgICBmZXRjaFJlZGlyZWN0SWRzLmFkZChrZXkpO1xuXG4gICAgICBsZXQgbG9hZGluZ0ZldGNoZXIgPSBfZXh0ZW5kcyh7XG4gICAgICAgIHN0YXRlOiBcImxvYWRpbmdcIlxuICAgICAgfSwgc3VibWlzc2lvbiwge1xuICAgICAgICBkYXRhOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuXG4gICAgICBzdGF0ZS5mZXRjaGVycy5zZXQoa2V5LCBsb2FkaW5nRmV0Y2hlcik7XG4gICAgICB1cGRhdGVTdGF0ZSh7XG4gICAgICAgIGZldGNoZXJzOiBuZXcgTWFwKHN0YXRlLmZldGNoZXJzKVxuICAgICAgfSk7XG5cbiAgICAgIGxldCByZWRpcmVjdE5hdmlnYXRpb24gPSBfZXh0ZW5kcyh7XG4gICAgICAgIHN0YXRlOiBcImxvYWRpbmdcIixcbiAgICAgICAgbG9jYXRpb246IGNyZWF0ZUxvY2F0aW9uKHN0YXRlLmxvY2F0aW9uLCBhY3Rpb25SZXN1bHQubG9jYXRpb24pXG4gICAgICB9LCBzdWJtaXNzaW9uKTtcblxuICAgICAgYXdhaXQgc3RhcnRSZWRpcmVjdE5hdmlnYXRpb24oYWN0aW9uUmVzdWx0LCByZWRpcmVjdE5hdmlnYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gUHJvY2VzcyBhbnkgbm9uLXJlZGlyZWN0IGVycm9ycyB0aHJvd25cblxuXG4gICAgaWYgKGlzRXJyb3JSZXN1bHQoYWN0aW9uUmVzdWx0KSkge1xuICAgICAgc2V0RmV0Y2hlckVycm9yKGtleSwgcm91dGVJZCwgYWN0aW9uUmVzdWx0LmVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNEZWZlcnJlZFJlc3VsdChhY3Rpb25SZXN1bHQpKSB7XG4gICAgICBpbnZhcmlhbnQoZmFsc2UsIFwiZGVmZXIoKSBpcyBub3Qgc3VwcG9ydGVkIGluIGFjdGlvbnNcIik7XG4gICAgfSAvLyBTdGFydCB0aGUgZGF0YSBsb2FkIGZvciBjdXJyZW50IG1hdGNoZXMsIG9yIHRoZSBuZXh0IGxvY2F0aW9uIGlmIHdlJ3JlXG4gICAgLy8gaW4gdGhlIG1pZGRsZSBvZiBhIG5hdmlnYXRpb25cblxuXG4gICAgbGV0IG5leHRMb2NhdGlvbiA9IHN0YXRlLm5hdmlnYXRpb24ubG9jYXRpb24gfHwgc3RhdGUubG9jYXRpb247XG4gICAgbGV0IHJldmFsaWRhdGlvblJlcXVlc3QgPSBjcmVhdGVSZXF1ZXN0KG5leHRMb2NhdGlvbiwgYWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAgbGV0IG1hdGNoZXMgPSBzdGF0ZS5uYXZpZ2F0aW9uLnN0YXRlICE9PSBcImlkbGVcIiA/IG1hdGNoUm91dGVzKGRhdGFSb3V0ZXMsIHN0YXRlLm5hdmlnYXRpb24ubG9jYXRpb24sIGluaXQuYmFzZW5hbWUpIDogc3RhdGUubWF0Y2hlcztcbiAgICBpbnZhcmlhbnQobWF0Y2hlcywgXCJEaWRuJ3QgZmluZCBhbnkgbWF0Y2hlcyBhZnRlciBmZXRjaGVyIGFjdGlvblwiKTtcbiAgICBsZXQgbG9hZElkID0gKytpbmNyZW1lbnRpbmdMb2FkSWQ7XG4gICAgZmV0Y2hSZWxvYWRJZHMuc2V0KGtleSwgbG9hZElkKTtcblxuICAgIGxldCBsb2FkRmV0Y2hlciA9IF9leHRlbmRzKHtcbiAgICAgIHN0YXRlOiBcImxvYWRpbmdcIixcbiAgICAgIGRhdGE6IGFjdGlvblJlc3VsdC5kYXRhXG4gICAgfSwgc3VibWlzc2lvbik7XG5cbiAgICBzdGF0ZS5mZXRjaGVycy5zZXQoa2V5LCBsb2FkRmV0Y2hlcik7XG4gICAgbGV0IFttYXRjaGVzVG9Mb2FkLCByZXZhbGlkYXRpbmdGZXRjaGVyc10gPSBnZXRNYXRjaGVzVG9Mb2FkKHN0YXRlLCBtYXRjaGVzLCBzdWJtaXNzaW9uLCBuZXh0TG9jYXRpb24sIGlzUmV2YWxpZGF0aW9uUmVxdWlyZWQsIGNhbmNlbGxlZERlZmVycmVkUm91dGVzLCBjYW5jZWxsZWRGZXRjaGVyTG9hZHMsIHtcbiAgICAgIFttYXRjaC5yb3V0ZS5pZF06IGFjdGlvblJlc3VsdC5kYXRhXG4gICAgfSwgdW5kZWZpbmVkLCAvLyBObyBuZWVkIHRvIHNlbmQgdGhyb3VnaCBlcnJvcnMgc2luY2Ugd2Ugc2hvcnQgY2lyY3VpdCBhYm92ZVxuICAgIGZldGNoTG9hZE1hdGNoZXMpOyAvLyBQdXQgYWxsIHJldmFsaWRhdGluZyBmZXRjaGVycyBpbnRvIHRoZSBsb2FkaW5nIHN0YXRlLCBleGNlcHQgZm9yIHRoZVxuICAgIC8vIGN1cnJlbnQgZmV0Y2hlciB3aGljaCB3ZSB3YW50IHRvIGtlZXAgaW4gaXQncyBjdXJyZW50IGxvYWRpbmcgc3RhdGUgd2hpY2hcbiAgICAvLyBjb250YWlucyBpdCdzIGFjdGlvbiBzdWJtaXNzaW9uIGluZm8gKyBhY3Rpb24gZGF0YVxuXG4gICAgcmV2YWxpZGF0aW5nRmV0Y2hlcnMuZmlsdGVyKF9yZWY1ID0+IHtcbiAgICAgIGxldCBbc3RhbGVLZXldID0gX3JlZjU7XG4gICAgICByZXR1cm4gc3RhbGVLZXkgIT09IGtleTtcbiAgICB9KS5mb3JFYWNoKF9yZWY2ID0+IHtcbiAgICAgIGxldCBbc3RhbGVLZXldID0gX3JlZjY7XG4gICAgICBsZXQgZXhpc3RpbmdGZXRjaGVyID0gc3RhdGUuZmV0Y2hlcnMuZ2V0KHN0YWxlS2V5KTtcbiAgICAgIGxldCByZXZhbGlkYXRpbmdGZXRjaGVyID0ge1xuICAgICAgICBzdGF0ZTogXCJsb2FkaW5nXCIsXG4gICAgICAgIGRhdGE6IGV4aXN0aW5nRmV0Y2hlciAmJiBleGlzdGluZ0ZldGNoZXIuZGF0YSxcbiAgICAgICAgZm9ybU1ldGhvZDogdW5kZWZpbmVkLFxuICAgICAgICBmb3JtQWN0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgIGZvcm1FbmNUeXBlOiB1bmRlZmluZWQsXG4gICAgICAgIGZvcm1EYXRhOiB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgICBzdGF0ZS5mZXRjaGVycy5zZXQoc3RhbGVLZXksIHJldmFsaWRhdGluZ0ZldGNoZXIpO1xuICAgICAgZmV0Y2hDb250cm9sbGVycy5zZXQoc3RhbGVLZXksIGFib3J0Q29udHJvbGxlcik7XG4gICAgfSk7XG4gICAgdXBkYXRlU3RhdGUoe1xuICAgICAgZmV0Y2hlcnM6IG5ldyBNYXAoc3RhdGUuZmV0Y2hlcnMpXG4gICAgfSk7XG4gICAgbGV0IHtcbiAgICAgIHJlc3VsdHMsXG4gICAgICBsb2FkZXJSZXN1bHRzLFxuICAgICAgZmV0Y2hlclJlc3VsdHNcbiAgICB9ID0gYXdhaXQgY2FsbExvYWRlcnNBbmRNYXliZVJlc29sdmVEYXRhKHN0YXRlLm1hdGNoZXMsIG1hdGNoZXMsIG1hdGNoZXNUb0xvYWQsIHJldmFsaWRhdGluZ0ZldGNoZXJzLCByZXZhbGlkYXRpb25SZXF1ZXN0KTtcblxuICAgIGlmIChhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmZXRjaFJlbG9hZElkcy5kZWxldGUoa2V5KTtcbiAgICBmZXRjaENvbnRyb2xsZXJzLmRlbGV0ZShrZXkpO1xuICAgIHJldmFsaWRhdGluZ0ZldGNoZXJzLmZvckVhY2goX3JlZjcgPT4ge1xuICAgICAgbGV0IFtzdGFsZUtleV0gPSBfcmVmNztcbiAgICAgIHJldHVybiBmZXRjaENvbnRyb2xsZXJzLmRlbGV0ZShzdGFsZUtleSk7XG4gICAgfSk7XG4gICAgbGV0IHJlZGlyZWN0ID0gZmluZFJlZGlyZWN0KHJlc3VsdHMpO1xuXG4gICAgaWYgKHJlZGlyZWN0KSB7XG4gICAgICBsZXQgcmVkaXJlY3ROYXZpZ2F0aW9uID0gZ2V0TG9hZGVyUmVkaXJlY3Qoc3RhdGUsIHJlZGlyZWN0KTtcbiAgICAgIGF3YWl0IHN0YXJ0UmVkaXJlY3ROYXZpZ2F0aW9uKHJlZGlyZWN0LCByZWRpcmVjdE5hdmlnYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gUHJvY2VzcyBhbmQgY29tbWl0IG91dHB1dCBmcm9tIGxvYWRlcnNcblxuXG4gICAgbGV0IHtcbiAgICAgIGxvYWRlckRhdGEsXG4gICAgICBlcnJvcnNcbiAgICB9ID0gcHJvY2Vzc0xvYWRlckRhdGEoc3RhdGUsIHN0YXRlLm1hdGNoZXMsIG1hdGNoZXNUb0xvYWQsIGxvYWRlclJlc3VsdHMsIHVuZGVmaW5lZCwgcmV2YWxpZGF0aW5nRmV0Y2hlcnMsIGZldGNoZXJSZXN1bHRzLCBhY3RpdmVEZWZlcnJlZHMpO1xuICAgIGxldCBkb25lRmV0Y2hlciA9IHtcbiAgICAgIHN0YXRlOiBcImlkbGVcIixcbiAgICAgIGRhdGE6IGFjdGlvblJlc3VsdC5kYXRhLFxuICAgICAgZm9ybU1ldGhvZDogdW5kZWZpbmVkLFxuICAgICAgZm9ybUFjdGlvbjogdW5kZWZpbmVkLFxuICAgICAgZm9ybUVuY1R5cGU6IHVuZGVmaW5lZCxcbiAgICAgIGZvcm1EYXRhOiB1bmRlZmluZWRcbiAgICB9O1xuICAgIHN0YXRlLmZldGNoZXJzLnNldChrZXksIGRvbmVGZXRjaGVyKTtcbiAgICBsZXQgZGlkQWJvcnRGZXRjaExvYWRzID0gYWJvcnRTdGFsZUZldGNoTG9hZHMobG9hZElkKTsgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBpbiBhIG5hdmlnYXRpb24gbG9hZGluZyBzdGF0ZSBhbmQgdGhpcyBmZXRjaGVyIGlzXG4gICAgLy8gbW9yZSByZWNlbnQgdGhhbiB0aGUgbmF2aWdhdGlvbiwgd2Ugd2FudCB0aGUgbmV3ZXIgZGF0YSBzbyBhYm9ydCB0aGVcbiAgICAvLyBuYXZpZ2F0aW9uIGFuZCBjb21wbGV0ZSBpdCB3aXRoIHRoZSBmZXRjaGVyIGRhdGFcblxuICAgIGlmIChzdGF0ZS5uYXZpZ2F0aW9uLnN0YXRlID09PSBcImxvYWRpbmdcIiAmJiBsb2FkSWQgPiBwZW5kaW5nTmF2aWdhdGlvbkxvYWRJZCkge1xuICAgICAgaW52YXJpYW50KHBlbmRpbmdBY3Rpb24sIFwiRXhwZWN0ZWQgcGVuZGluZyBhY3Rpb25cIik7XG4gICAgICBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIgJiYgcGVuZGluZ05hdmlnYXRpb25Db250cm9sbGVyLmFib3J0KCk7XG4gICAgICBjb21wbGV0ZU5hdmlnYXRpb24oc3RhdGUubmF2aWdhdGlvbi5sb2NhdGlvbiwge1xuICAgICAgICBtYXRjaGVzLFxuICAgICAgICBsb2FkZXJEYXRhLFxuICAgICAgICBlcnJvcnMsXG4gICAgICAgIGZldGNoZXJzOiBuZXcgTWFwKHN0YXRlLmZldGNoZXJzKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG90aGVyd2lzZSBqdXN0IHVwZGF0ZSB3aXRoIHRoZSBmZXRjaGVyIGRhdGEsIHByZXNlcnZpbmcgYW55IGV4aXN0aW5nXG4gICAgICAvLyBsb2FkZXJEYXRhIGZvciBsb2FkZXJzIHRoYXQgZGlkIG5vdCBuZWVkIHRvIHJlbG9hZC4gIFdlIGhhdmUgdG9cbiAgICAgIC8vIG1hbnVhbGx5IG1lcmdlIGhlcmUgc2luY2Ugd2UgYXJlbid0IGdvaW5nIHRocm91Z2ggY29tcGxldGVOYXZpZ2F0aW9uXG4gICAgICB1cGRhdGVTdGF0ZShfZXh0ZW5kcyh7XG4gICAgICAgIGVycm9ycyxcbiAgICAgICAgbG9hZGVyRGF0YTogbWVyZ2VMb2FkZXJEYXRhKHN0YXRlLmxvYWRlckRhdGEsIGxvYWRlckRhdGEsIG1hdGNoZXMpXG4gICAgICB9LCBkaWRBYm9ydEZldGNoTG9hZHMgPyB7XG4gICAgICAgIGZldGNoZXJzOiBuZXcgTWFwKHN0YXRlLmZldGNoZXJzKVxuICAgICAgfSA6IHt9KSk7XG4gICAgICBpc1JldmFsaWRhdGlvblJlcXVpcmVkID0gZmFsc2U7XG4gICAgfVxuICB9IC8vIENhbGwgdGhlIG1hdGNoZWQgbG9hZGVyIGZvciBmZXRjaGVyLmxvYWQoKSwgaGFuZGxpbmcgcmVkaXJlY3RzLCBlcnJvcnMsIGV0Yy5cblxuXG4gIGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUZldGNoZXJMb2FkZXIoa2V5LCByb3V0ZUlkLCBwYXRoLCBtYXRjaCwgbWF0Y2hlcykge1xuICAgIGxldCBleGlzdGluZ0ZldGNoZXIgPSBzdGF0ZS5mZXRjaGVycy5nZXQoa2V5KTsgLy8gUHV0IHRoaXMgZmV0Y2hlciBpbnRvIGl0J3MgbG9hZGluZyBzdGF0ZVxuXG4gICAgbGV0IGxvYWRpbmdGZXRjaGVyID0ge1xuICAgICAgc3RhdGU6IFwibG9hZGluZ1wiLFxuICAgICAgZm9ybU1ldGhvZDogdW5kZWZpbmVkLFxuICAgICAgZm9ybUFjdGlvbjogdW5kZWZpbmVkLFxuICAgICAgZm9ybUVuY1R5cGU6IHVuZGVmaW5lZCxcbiAgICAgIGZvcm1EYXRhOiB1bmRlZmluZWQsXG4gICAgICBkYXRhOiBleGlzdGluZ0ZldGNoZXIgJiYgZXhpc3RpbmdGZXRjaGVyLmRhdGFcbiAgICB9O1xuICAgIHN0YXRlLmZldGNoZXJzLnNldChrZXksIGxvYWRpbmdGZXRjaGVyKTtcbiAgICB1cGRhdGVTdGF0ZSh7XG4gICAgICBmZXRjaGVyczogbmV3IE1hcChzdGF0ZS5mZXRjaGVycylcbiAgICB9KTsgLy8gQ2FsbCB0aGUgbG9hZGVyIGZvciB0aGlzIGZldGNoZXIgcm91dGUgbWF0Y2hcblxuICAgIGxldCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgbGV0IGZldGNoUmVxdWVzdCA9IGNyZWF0ZVJlcXVlc3QocGF0aCwgYWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAgZmV0Y2hDb250cm9sbGVycy5zZXQoa2V5LCBhYm9ydENvbnRyb2xsZXIpO1xuICAgIGxldCByZXN1bHQgPSBhd2FpdCBjYWxsTG9hZGVyT3JBY3Rpb24oXCJsb2FkZXJcIiwgZmV0Y2hSZXF1ZXN0LCBtYXRjaCwgbWF0Y2hlcywgcm91dGVyLmJhc2VuYW1lKTsgLy8gRGVmZXJyZWQgaXNuJ3Qgc3VwcG9ydGVkIG9yIGZldGNoZXIgbG9hZHMsIGF3YWl0IGV2ZXJ5dGhpbmcgYW5kIHRyZWF0IGl0XG4gICAgLy8gYXMgYSBub3JtYWwgbG9hZC4gIHJlc29sdmVEZWZlcnJlZERhdGEgd2lsbCByZXR1cm4gdW5kZWZpbmVkIGlmIHRoaXNcbiAgICAvLyBmZXRjaGVyIGdldHMgYWJvcnRlZCwgc28gd2UganVzdCBsZWF2ZSByZXN1bHQgdW50b3VjaGVkIGFuZCBzaG9ydCBjaXJjdWl0XG4gICAgLy8gYmVsb3cgaWYgdGhhdCBoYXBwZW5zXG5cbiAgICBpZiAoaXNEZWZlcnJlZFJlc3VsdChyZXN1bHQpKSB7XG4gICAgICByZXN1bHQgPSAoYXdhaXQgcmVzb2x2ZURlZmVycmVkRGF0YShyZXN1bHQsIGZldGNoUmVxdWVzdC5zaWduYWwsIHRydWUpKSB8fCByZXN1bHQ7XG4gICAgfSAvLyBXZSBjYW4gZGVsZXRlIHRoaXMgc28gbG9uZyBhcyB3ZSB3ZXJlbid0IGFib3J0ZWQgYnkgb3Ugb3VyIG93biBmZXRjaGVyXG4gICAgLy8gcmUtbG9hZCB3aGljaCB3b3VsZCBoYXZlIHB1dCBfbmV3XyBjb250cm9sbGVyIGlzIGluIGZldGNoQ29udHJvbGxlcnNcblxuXG4gICAgaWYgKGZldGNoQ29udHJvbGxlcnMuZ2V0KGtleSkgPT09IGFib3J0Q29udHJvbGxlcikge1xuICAgICAgZmV0Y2hDb250cm9sbGVycy5kZWxldGUoa2V5KTtcbiAgICB9XG5cbiAgICBpZiAoZmV0Y2hSZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB0aGUgbG9hZGVyIHRocmV3IGEgcmVkaXJlY3QgUmVzcG9uc2UsIHN0YXJ0IGEgbmV3IFJFUExBQ0UgbmF2aWdhdGlvblxuXG5cbiAgICBpZiAoaXNSZWRpcmVjdFJlc3VsdChyZXN1bHQpKSB7XG4gICAgICBsZXQgcmVkaXJlY3ROYXZpZ2F0aW9uID0gZ2V0TG9hZGVyUmVkaXJlY3Qoc3RhdGUsIHJlc3VsdCk7XG4gICAgICBhd2FpdCBzdGFydFJlZGlyZWN0TmF2aWdhdGlvbihyZXN1bHQsIHJlZGlyZWN0TmF2aWdhdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBQcm9jZXNzIGFueSBub24tcmVkaXJlY3QgZXJyb3JzIHRocm93blxuXG5cbiAgICBpZiAoaXNFcnJvclJlc3VsdChyZXN1bHQpKSB7XG4gICAgICBsZXQgYm91bmRhcnlNYXRjaCA9IGZpbmROZWFyZXN0Qm91bmRhcnkoc3RhdGUubWF0Y2hlcywgcm91dGVJZCk7XG4gICAgICBzdGF0ZS5mZXRjaGVycy5kZWxldGUoa2V5KTsgLy8gVE9ETzogSW4gcmVtaXgsIHRoaXMgd291bGQgcmVzZXQgdG8gSURMRV9OQVZJR0FUSU9OIGlmIGl0IHdhcyBhIGNhdGNoIC1cbiAgICAgIC8vIGRvIHdlIG5lZWQgdG8gYmVoYXZlIGFueSBkaWZmZXJlbnRseSB3aXRoIG91ciBub24tcmVkaXJlY3QgZXJyb3JzP1xuICAgICAgLy8gV2hhdCBpZiBpdCB3YXMgYSBub24tcmVkaXJlY3QgUmVzcG9uc2U/XG5cbiAgICAgIHVwZGF0ZVN0YXRlKHtcbiAgICAgICAgZmV0Y2hlcnM6IG5ldyBNYXAoc3RhdGUuZmV0Y2hlcnMpLFxuICAgICAgICBlcnJvcnM6IHtcbiAgICAgICAgICBbYm91bmRhcnlNYXRjaC5yb3V0ZS5pZF06IHJlc3VsdC5lcnJvclxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpbnZhcmlhbnQoIWlzRGVmZXJyZWRSZXN1bHQocmVzdWx0KSwgXCJVbmhhbmRsZWQgZmV0Y2hlciBkZWZlcnJlZCBkYXRhXCIpOyAvLyBQdXQgdGhlIGZldGNoZXIgYmFjayBpbnRvIGFuIGlkbGUgc3RhdGVcblxuICAgIGxldCBkb25lRmV0Y2hlciA9IHtcbiAgICAgIHN0YXRlOiBcImlkbGVcIixcbiAgICAgIGRhdGE6IHJlc3VsdC5kYXRhLFxuICAgICAgZm9ybU1ldGhvZDogdW5kZWZpbmVkLFxuICAgICAgZm9ybUFjdGlvbjogdW5kZWZpbmVkLFxuICAgICAgZm9ybUVuY1R5cGU6IHVuZGVmaW5lZCxcbiAgICAgIGZvcm1EYXRhOiB1bmRlZmluZWRcbiAgICB9O1xuICAgIHN0YXRlLmZldGNoZXJzLnNldChrZXksIGRvbmVGZXRjaGVyKTtcbiAgICB1cGRhdGVTdGF0ZSh7XG4gICAgICBmZXRjaGVyczogbmV3IE1hcChzdGF0ZS5mZXRjaGVycylcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogVXRpbGl0eSBmdW5jdGlvbiB0byBoYW5kbGUgcmVkaXJlY3RzIHJldHVybmVkIGZyb20gYW4gYWN0aW9uIG9yIGxvYWRlci5cbiAgICogTm9ybWFsbHksIGEgcmVkaXJlY3QgXCJyZXBsYWNlc1wiIHRoZSBuYXZpZ2F0aW9uIHRoYXQgdHJpZ2dlcmVkIGl0LiAgU28sIGZvclxuICAgKiBleGFtcGxlOlxuICAgKlxuICAgKiAgLSB1c2VyIGlzIG9uIC9hXG4gICAqICAtIHVzZXIgY2xpY2tzIGEgbGluayB0byAvYlxuICAgKiAgLSBsb2FkZXIgZm9yIC9iIHJlZGlyZWN0cyB0byAvY1xuICAgKlxuICAgKiBJbiBhIG5vbi1KUyBhcHAgdGhlIGJyb3dzZXIgd291bGQgdHJhY2sgdGhlIGluLWZsaWdodCBuYXZpZ2F0aW9uIHRvIC9iIGFuZFxuICAgKiB0aGVuIHJlcGxhY2UgaXQgd2l0aCAvYyB3aGVuIGl0IGVuY291bnRlcmVkIHRoZSByZWRpcmVjdCByZXNwb25zZS4gIEluXG4gICAqIHRoZSBlbmQgaXQgd291bGQgb25seSBldmVyIHVwZGF0ZSB0aGUgVVJMIGJhciB3aXRoIC9jLlxuICAgKlxuICAgKiBJbiBjbGllbnQtc2lkZSByb3V0aW5nIHVzaW5nIHB1c2hTdGF0ZS9yZXBsYWNlU3RhdGUsIHdlIGFpbSB0byBlbXVsYXRlXG4gICAqIHRoaXMgYmVoYXZpb3IgYW5kIHdlIGFsc28gZG8gbm90IHVwZGF0ZSBoaXN0b3J5IHVudGlsIHRoZSBlbmQgb2YgdGhlXG4gICAqIG5hdmlnYXRpb24gKGluY2x1ZGluZyBwcm9jZXNzZWQgcmVkaXJlY3RzKS4gIFRoaXMgbWVhbnMgdGhhdCB3ZSBuZXZlclxuICAgKiBhY3R1YWxseSB0b3VjaCBoaXN0b3J5IHVudGlsIHdlJ3ZlIHByb2Nlc3NlZCByZWRpcmVjdHMsIHNvIHdlIGp1c3QgdXNlXG4gICAqIHRoZSBoaXN0b3J5IGFjdGlvbiBmcm9tIHRoZSBvcmlnaW5hbCBuYXZpZ2F0aW9uIChQVVNIIG9yIFJFUExBQ0UpLlxuICAgKi9cblxuXG4gIGFzeW5jIGZ1bmN0aW9uIHN0YXJ0UmVkaXJlY3ROYXZpZ2F0aW9uKHJlZGlyZWN0LCBuYXZpZ2F0aW9uLCByZXBsYWNlKSB7XG4gICAgaWYgKHJlZGlyZWN0LnJldmFsaWRhdGUpIHtcbiAgICAgIGlzUmV2YWxpZGF0aW9uUmVxdWlyZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGludmFyaWFudChuYXZpZ2F0aW9uLmxvY2F0aW9uLCBcIkV4cGVjdGVkIGEgbG9jYXRpb24gb24gdGhlIHJlZGlyZWN0IG5hdmlnYXRpb25cIik7IC8vIFRoZXJlJ3Mgbm8gbmVlZCB0byBhYm9ydCBvbiByZWRpcmVjdHMsIHNpbmNlIHdlIGRvbid0IGRldGVjdCB0aGVcbiAgICAvLyByZWRpcmVjdCB1bnRpbCB0aGUgYWN0aW9uL2xvYWRlcnMgaGF2ZSBzZXR0bGVkXG5cbiAgICBwZW5kaW5nTmF2aWdhdGlvbkNvbnRyb2xsZXIgPSBudWxsO1xuICAgIGxldCByZWRpcmVjdEhpc3RvcnlBY3Rpb24gPSByZXBsYWNlID09PSB0cnVlID8gQWN0aW9uLlJlcGxhY2UgOiBBY3Rpb24uUHVzaDtcbiAgICBhd2FpdCBzdGFydE5hdmlnYXRpb24ocmVkaXJlY3RIaXN0b3J5QWN0aW9uLCBuYXZpZ2F0aW9uLmxvY2F0aW9uLCB7XG4gICAgICBvdmVycmlkZU5hdmlnYXRpb246IG5hdmlnYXRpb25cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGNhbGxMb2FkZXJzQW5kTWF5YmVSZXNvbHZlRGF0YShjdXJyZW50TWF0Y2hlcywgbWF0Y2hlcywgbWF0Y2hlc1RvTG9hZCwgZmV0Y2hlcnNUb0xvYWQsIHJlcXVlc3QpIHtcbiAgICAvLyBDYWxsIGFsbCBuYXZpZ2F0aW9uIGxvYWRlcnMgYW5kIHJldmFsaWRhdGluZyBmZXRjaGVyIGxvYWRlcnMgaW4gcGFyYWxsZWwsXG4gICAgLy8gdGhlbiBzbGljZSBvZmYgdGhlIHJlc3VsdHMgaW50byBzZXBhcmF0ZSBhcnJheXMgc28gd2UgY2FuIGhhbmRsZSB0aGVtXG4gICAgLy8gYWNjb3JkaW5nbHlcbiAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFsuLi5tYXRjaGVzVG9Mb2FkLm1hcChtYXRjaCA9PiBjYWxsTG9hZGVyT3JBY3Rpb24oXCJsb2FkZXJcIiwgcmVxdWVzdCwgbWF0Y2gsIG1hdGNoZXMsIHJvdXRlci5iYXNlbmFtZSkpLCAuLi5mZXRjaGVyc1RvTG9hZC5tYXAoX3JlZjggPT4ge1xuICAgICAgbGV0IFssIGhyZWYsIG1hdGNoLCBmZXRjaE1hdGNoZXNdID0gX3JlZjg7XG4gICAgICByZXR1cm4gY2FsbExvYWRlck9yQWN0aW9uKFwibG9hZGVyXCIsIGNyZWF0ZVJlcXVlc3QoaHJlZiwgcmVxdWVzdC5zaWduYWwpLCBtYXRjaCwgZmV0Y2hNYXRjaGVzLCByb3V0ZXIuYmFzZW5hbWUpO1xuICAgIH0pXSk7XG4gICAgbGV0IGxvYWRlclJlc3VsdHMgPSByZXN1bHRzLnNsaWNlKDAsIG1hdGNoZXNUb0xvYWQubGVuZ3RoKTtcbiAgICBsZXQgZmV0Y2hlclJlc3VsdHMgPSByZXN1bHRzLnNsaWNlKG1hdGNoZXNUb0xvYWQubGVuZ3RoKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbcmVzb2x2ZURlZmVycmVkUmVzdWx0cyhjdXJyZW50TWF0Y2hlcywgbWF0Y2hlc1RvTG9hZCwgbG9hZGVyUmVzdWx0cywgcmVxdWVzdC5zaWduYWwsIGZhbHNlLCBzdGF0ZS5sb2FkZXJEYXRhKSwgcmVzb2x2ZURlZmVycmVkUmVzdWx0cyhjdXJyZW50TWF0Y2hlcywgZmV0Y2hlcnNUb0xvYWQubWFwKF9yZWY5ID0+IHtcbiAgICAgIGxldCBbLCwgbWF0Y2hdID0gX3JlZjk7XG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSksIGZldGNoZXJSZXN1bHRzLCByZXF1ZXN0LnNpZ25hbCwgdHJ1ZSldKTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdWx0cyxcbiAgICAgIGxvYWRlclJlc3VsdHMsXG4gICAgICBmZXRjaGVyUmVzdWx0c1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBpbnRlcnJ1cHRBY3RpdmVMb2FkcygpIHtcbiAgICAvLyBFdmVyeSBpbnRlcnJ1cHRpb24gdHJpZ2dlcnMgYSByZXZhbGlkYXRpb25cbiAgICBpc1JldmFsaWRhdGlvblJlcXVpcmVkID0gdHJ1ZTsgLy8gQ2FuY2VsIHBlbmRpbmcgcm91dGUtbGV2ZWwgZGVmZXJyZWRzIGFuZCBtYXJrIGNhbmNlbGxlZCByb3V0ZXMgZm9yXG4gICAgLy8gcmV2YWxpZGF0aW9uXG5cbiAgICBjYW5jZWxsZWREZWZlcnJlZFJvdXRlcy5wdXNoKC4uLmNhbmNlbEFjdGl2ZURlZmVycmVkcygpKTsgLy8gQWJvcnQgaW4tZmxpZ2h0IGZldGNoZXIgbG9hZHNcblxuICAgIGZldGNoTG9hZE1hdGNoZXMuZm9yRWFjaCgoXywga2V5KSA9PiB7XG4gICAgICBpZiAoZmV0Y2hDb250cm9sbGVycy5oYXMoa2V5KSkge1xuICAgICAgICBjYW5jZWxsZWRGZXRjaGVyTG9hZHMucHVzaChrZXkpO1xuICAgICAgICBhYm9ydEZldGNoZXIoa2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldEZldGNoZXJFcnJvcihrZXksIHJvdXRlSWQsIGVycm9yKSB7XG4gICAgbGV0IGJvdW5kYXJ5TWF0Y2ggPSBmaW5kTmVhcmVzdEJvdW5kYXJ5KHN0YXRlLm1hdGNoZXMsIHJvdXRlSWQpO1xuICAgIGRlbGV0ZUZldGNoZXIoa2V5KTtcbiAgICB1cGRhdGVTdGF0ZSh7XG4gICAgICBlcnJvcnM6IHtcbiAgICAgICAgW2JvdW5kYXJ5TWF0Y2gucm91dGUuaWRdOiBlcnJvclxuICAgICAgfSxcbiAgICAgIGZldGNoZXJzOiBuZXcgTWFwKHN0YXRlLmZldGNoZXJzKVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVsZXRlRmV0Y2hlcihrZXkpIHtcbiAgICBpZiAoZmV0Y2hDb250cm9sbGVycy5oYXMoa2V5KSkgYWJvcnRGZXRjaGVyKGtleSk7XG4gICAgZmV0Y2hMb2FkTWF0Y2hlcy5kZWxldGUoa2V5KTtcbiAgICBmZXRjaFJlbG9hZElkcy5kZWxldGUoa2V5KTtcbiAgICBmZXRjaFJlZGlyZWN0SWRzLmRlbGV0ZShrZXkpO1xuICAgIHN0YXRlLmZldGNoZXJzLmRlbGV0ZShrZXkpO1xuICB9XG5cbiAgZnVuY3Rpb24gYWJvcnRGZXRjaGVyKGtleSkge1xuICAgIGxldCBjb250cm9sbGVyID0gZmV0Y2hDb250cm9sbGVycy5nZXQoa2V5KTtcbiAgICBpbnZhcmlhbnQoY29udHJvbGxlciwgXCJFeHBlY3RlZCBmZXRjaCBjb250cm9sbGVyOiBcIiArIGtleSk7XG4gICAgY29udHJvbGxlci5hYm9ydCgpO1xuICAgIGZldGNoQ29udHJvbGxlcnMuZGVsZXRlKGtleSk7XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrRmV0Y2hlcnNEb25lKGtleXMpIHtcbiAgICBmb3IgKGxldCBrZXkgb2Yga2V5cykge1xuICAgICAgbGV0IGZldGNoZXIgPSBnZXRGZXRjaGVyKGtleSk7XG4gICAgICBsZXQgZG9uZUZldGNoZXIgPSB7XG4gICAgICAgIHN0YXRlOiBcImlkbGVcIixcbiAgICAgICAgZGF0YTogZmV0Y2hlci5kYXRhLFxuICAgICAgICBmb3JtTWV0aG9kOiB1bmRlZmluZWQsXG4gICAgICAgIGZvcm1BY3Rpb246IHVuZGVmaW5lZCxcbiAgICAgICAgZm9ybUVuY1R5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgZm9ybURhdGE6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICAgIHN0YXRlLmZldGNoZXJzLnNldChrZXksIGRvbmVGZXRjaGVyKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrRmV0Y2hSZWRpcmVjdHNEb25lKCkge1xuICAgIGxldCBkb25lS2V5cyA9IFtdO1xuXG4gICAgZm9yIChsZXQga2V5IG9mIGZldGNoUmVkaXJlY3RJZHMpIHtcbiAgICAgIGxldCBmZXRjaGVyID0gc3RhdGUuZmV0Y2hlcnMuZ2V0KGtleSk7XG4gICAgICBpbnZhcmlhbnQoZmV0Y2hlciwgXCJFeHBlY3RlZCBmZXRjaGVyOiBcIiArIGtleSk7XG5cbiAgICAgIGlmIChmZXRjaGVyLnN0YXRlID09PSBcImxvYWRpbmdcIikge1xuICAgICAgICBmZXRjaFJlZGlyZWN0SWRzLmRlbGV0ZShrZXkpO1xuICAgICAgICBkb25lS2V5cy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWFya0ZldGNoZXJzRG9uZShkb25lS2V5cyk7XG4gIH1cblxuICBmdW5jdGlvbiBhYm9ydFN0YWxlRmV0Y2hMb2FkcyhsYW5kZWRJZCkge1xuICAgIGxldCB5ZWV0ZWRLZXlzID0gW107XG5cbiAgICBmb3IgKGxldCBba2V5LCBpZF0gb2YgZmV0Y2hSZWxvYWRJZHMpIHtcbiAgICAgIGlmIChpZCA8IGxhbmRlZElkKSB7XG4gICAgICAgIGxldCBmZXRjaGVyID0gc3RhdGUuZmV0Y2hlcnMuZ2V0KGtleSk7XG4gICAgICAgIGludmFyaWFudChmZXRjaGVyLCBcIkV4cGVjdGVkIGZldGNoZXI6IFwiICsga2V5KTtcblxuICAgICAgICBpZiAoZmV0Y2hlci5zdGF0ZSA9PT0gXCJsb2FkaW5nXCIpIHtcbiAgICAgICAgICBhYm9ydEZldGNoZXIoa2V5KTtcbiAgICAgICAgICBmZXRjaFJlbG9hZElkcy5kZWxldGUoa2V5KTtcbiAgICAgICAgICB5ZWV0ZWRLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIG1hcmtGZXRjaGVyc0RvbmUoeWVldGVkS2V5cyk7XG4gICAgcmV0dXJuIHllZXRlZEtleXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbEFjdGl2ZURlZmVycmVkcyhwcmVkaWNhdGUpIHtcbiAgICBsZXQgY2FuY2VsbGVkUm91dGVJZHMgPSBbXTtcbiAgICBhY3RpdmVEZWZlcnJlZHMuZm9yRWFjaCgoZGZkLCByb3V0ZUlkKSA9PiB7XG4gICAgICBpZiAoIXByZWRpY2F0ZSB8fCBwcmVkaWNhdGUocm91dGVJZCkpIHtcbiAgICAgICAgLy8gQ2FuY2VsIHRoZSBkZWZlcnJlZCAtIGJ1dCBkbyBub3QgcmVtb3ZlIGZyb20gYWN0aXZlRGVmZXJyZWRzIGhlcmUgLVxuICAgICAgICAvLyB3ZSByZWx5IG9uIHRoZSBzdWJzY3JpYmVycyB0byBkbyB0aGF0IHNvIG91ciB0ZXN0cyBjYW4gYXNzZXJ0IHByb3BlclxuICAgICAgICAvLyBjbGVhbnVwIHZpYSBfaW50ZXJuYWxBY3RpdmVEZWZlcnJlZHNcbiAgICAgICAgZGZkLmNhbmNlbCgpO1xuICAgICAgICBjYW5jZWxsZWRSb3V0ZUlkcy5wdXNoKHJvdXRlSWQpO1xuICAgICAgICBhY3RpdmVEZWZlcnJlZHMuZGVsZXRlKHJvdXRlSWQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjYW5jZWxsZWRSb3V0ZUlkcztcbiAgfSAvLyBPcHQgaW4gdG8gY2FwdHVyaW5nIGFuZCByZXBvcnRpbmcgc2Nyb2xsIHBvc2l0aW9ucyBkdXJpbmcgbmF2aWdhdGlvbnMsXG4gIC8vIHVzZWQgYnkgdGhlIDxTY3JvbGxSZXN0b3JhdGlvbj4gY29tcG9uZW50XG5cblxuICBmdW5jdGlvbiBlbmFibGVTY3JvbGxSZXN0b3JhdGlvbihwb3NpdGlvbnMsIGdldFBvc2l0aW9uLCBnZXRLZXkpIHtcbiAgICBzYXZlZFNjcm9sbFBvc2l0aW9ucyA9IHBvc2l0aW9ucztcbiAgICBnZXRTY3JvbGxQb3NpdGlvbiA9IGdldFBvc2l0aW9uO1xuXG4gICAgZ2V0U2Nyb2xsUmVzdG9yYXRpb25LZXkgPSBnZXRLZXkgfHwgKGxvY2F0aW9uID0+IGxvY2F0aW9uLmtleSk7IC8vIFBlcmZvcm0gaW5pdGlhbCBoeWRyYXRpb24gc2Nyb2xsIHJlc3RvcmF0aW9uLCBzaW5jZSB3ZSBtaXNzIHRoZSBib2F0IG9uXG4gICAgLy8gdGhlIGluaXRpYWwgdXBkYXRlU3RhdGUoKSBiZWNhdXNlIHdlJ3ZlIG5vdCB5ZXQgcmVuZGVyZWQgPFNjcm9sbFJlc3RvcmF0aW9uLz5cbiAgICAvLyBhbmQgdGhlcmVmb3JlIGhhdmUgbm8gc2F2ZWRTY3JvbGxQb3NpdGlvbnMgYXZhaWxhYmxlXG5cblxuICAgIGlmICghaW5pdGlhbFNjcm9sbFJlc3RvcmVkICYmIHN0YXRlLm5hdmlnYXRpb24gPT09IElETEVfTkFWSUdBVElPTikge1xuICAgICAgaW5pdGlhbFNjcm9sbFJlc3RvcmVkID0gdHJ1ZTtcbiAgICAgIGxldCB5ID0gZ2V0U2F2ZWRTY3JvbGxQb3NpdGlvbihzdGF0ZS5sb2NhdGlvbiwgc3RhdGUubWF0Y2hlcyk7XG5cbiAgICAgIGlmICh5ICE9IG51bGwpIHtcbiAgICAgICAgdXBkYXRlU3RhdGUoe1xuICAgICAgICAgIHJlc3RvcmVTY3JvbGxQb3NpdGlvbjogeVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgc2F2ZWRTY3JvbGxQb3NpdGlvbnMgPSBudWxsO1xuICAgICAgZ2V0U2Nyb2xsUG9zaXRpb24gPSBudWxsO1xuICAgICAgZ2V0U2Nyb2xsUmVzdG9yYXRpb25LZXkgPSBudWxsO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzYXZlU2Nyb2xsUG9zaXRpb24obG9jYXRpb24sIG1hdGNoZXMpIHtcbiAgICBpZiAoc2F2ZWRTY3JvbGxQb3NpdGlvbnMgJiYgZ2V0U2Nyb2xsUmVzdG9yYXRpb25LZXkgJiYgZ2V0U2Nyb2xsUG9zaXRpb24pIHtcbiAgICAgIGxldCB1c2VyTWF0Y2hlcyA9IG1hdGNoZXMubWFwKG0gPT4gY3JlYXRlVXNlTWF0Y2hlc01hdGNoKG0sIHN0YXRlLmxvYWRlckRhdGEpKTtcbiAgICAgIGxldCBrZXkgPSBnZXRTY3JvbGxSZXN0b3JhdGlvbktleShsb2NhdGlvbiwgdXNlck1hdGNoZXMpIHx8IGxvY2F0aW9uLmtleTtcbiAgICAgIHNhdmVkU2Nyb2xsUG9zaXRpb25zW2tleV0gPSBnZXRTY3JvbGxQb3NpdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNhdmVkU2Nyb2xsUG9zaXRpb24obG9jYXRpb24sIG1hdGNoZXMpIHtcbiAgICBpZiAoc2F2ZWRTY3JvbGxQb3NpdGlvbnMgJiYgZ2V0U2Nyb2xsUmVzdG9yYXRpb25LZXkgJiYgZ2V0U2Nyb2xsUG9zaXRpb24pIHtcbiAgICAgIGxldCB1c2VyTWF0Y2hlcyA9IG1hdGNoZXMubWFwKG0gPT4gY3JlYXRlVXNlTWF0Y2hlc01hdGNoKG0sIHN0YXRlLmxvYWRlckRhdGEpKTtcbiAgICAgIGxldCBrZXkgPSBnZXRTY3JvbGxSZXN0b3JhdGlvbktleShsb2NhdGlvbiwgdXNlck1hdGNoZXMpIHx8IGxvY2F0aW9uLmtleTtcbiAgICAgIGxldCB5ID0gc2F2ZWRTY3JvbGxQb3NpdGlvbnNba2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB5ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiB5O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcm91dGVyID0ge1xuICAgIGdldCBiYXNlbmFtZSgpIHtcbiAgICAgIHJldHVybiBpbml0LmJhc2VuYW1lO1xuICAgIH0sXG5cbiAgICBnZXQgc3RhdGUoKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfSxcblxuICAgIGdldCByb3V0ZXMoKSB7XG4gICAgICByZXR1cm4gZGF0YVJvdXRlcztcbiAgICB9LFxuXG4gICAgaW5pdGlhbGl6ZSxcbiAgICBzdWJzY3JpYmUsXG4gICAgZW5hYmxlU2Nyb2xsUmVzdG9yYXRpb24sXG4gICAgbmF2aWdhdGUsXG4gICAgZmV0Y2gsXG4gICAgcmV2YWxpZGF0ZSxcbiAgICAvLyBQYXNzdGhyb3VnaCB0byBoaXN0b3J5LWF3YXJlIGNyZWF0ZUhyZWYgdXNlZCBieSB1c2VIcmVmIHNvIHdlIGdldCBwcm9wZXJcbiAgICAvLyBoYXNoLWF3YXJlIFVSTHMgaW4gRE9NIHBhdGhzXG4gICAgY3JlYXRlSHJlZjogdG8gPT4gaW5pdC5oaXN0b3J5LmNyZWF0ZUhyZWYodG8pLFxuICAgIGdldEZldGNoZXIsXG4gICAgZGVsZXRlRmV0Y2hlcixcbiAgICBkaXNwb3NlLFxuICAgIF9pbnRlcm5hbEZldGNoQ29udHJvbGxlcnM6IGZldGNoQ29udHJvbGxlcnMsXG4gICAgX2ludGVybmFsQWN0aXZlRGVmZXJyZWRzOiBhY3RpdmVEZWZlcnJlZHNcbiAgfTtcbiAgcmV0dXJuIHJvdXRlcjtcbn0gLy8jZW5kcmVnaW9uXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8jcmVnaW9uIGNyZWF0ZVN0YXRpY0hhbmRsZXJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmNvbnN0IHZhbGlkQWN0aW9uTWV0aG9kcyA9IG5ldyBTZXQoW1wiUE9TVFwiLCBcIlBVVFwiLCBcIlBBVENIXCIsIFwiREVMRVRFXCJdKTtcbmNvbnN0IHZhbGlkUmVxdWVzdE1ldGhvZHMgPSBuZXcgU2V0KFtcIkdFVFwiLCBcIkhFQURcIiwgLi4udmFsaWRBY3Rpb25NZXRob2RzXSk7XG5mdW5jdGlvbiB1bnN0YWJsZV9jcmVhdGVTdGF0aWNIYW5kbGVyKHJvdXRlcykge1xuICBpbnZhcmlhbnQocm91dGVzLmxlbmd0aCA+IDAsIFwiWW91IG11c3QgcHJvdmlkZSBhIG5vbi1lbXB0eSByb3V0ZXMgYXJyYXkgdG8gdW5zdGFibGVfY3JlYXRlU3RhdGljSGFuZGxlclwiKTtcbiAgbGV0IGRhdGFSb3V0ZXMgPSBjb252ZXJ0Um91dGVzVG9EYXRhUm91dGVzKHJvdXRlcyk7XG4gIC8qKlxuICAgKiBUaGUgcXVlcnkoKSBtZXRob2QgaXMgaW50ZW5kZWQgZm9yIGRvY3VtZW50IHJlcXVlc3RzLCBpbiB3aGljaCB3ZSB3YW50IHRvXG4gICAqIGNhbGwgYW4gb3B0aW9uYWwgYWN0aW9uIGFuZCBwb3RlbnRpYWxseSBtdWx0aXBsZSBsb2FkZXJzIGZvciBhbGwgbmVzdGVkXG4gICAqIHJvdXRlcy4gIEl0IHJldHVybnMgYSBTdGF0aWNIYW5kbGVyQ29udGV4dCBvYmplY3QsIHdoaWNoIGlzIHZlcnkgc2ltaWxhclxuICAgKiB0byB0aGUgcm91dGVyIHN0YXRlIChsb2NhdGlvbiwgbG9hZGVyRGF0YSwgYWN0aW9uRGF0YSwgZXJyb3JzLCBldGMuKSBhbmRcbiAgICogYWxzbyBhZGRzIFNTUi1zcGVjaWZpYyBpbmZvcm1hdGlvbiBzdWNoIGFzIHRoZSBzdGF0dXNDb2RlIGFuZCBoZWFkZXJzXG4gICAqIGZyb20gYWN0aW9uL2xvYWRlcnMgUmVzcG9uc2VzLlxuICAgKlxuICAgKiBJdCBfc2hvdWxkXyBuZXZlciB0aHJvdyBhbmQgc2hvdWxkIHJlcG9ydCBhbGwgZXJyb3JzIHRocm91Z2ggdGhlXG4gICAqIHJldHVybmVkIGNvbnRleHQuZXJyb3JzIG9iamVjdCwgcHJvcGVybHkgYXNzb2NpYXRpbmcgZXJyb3JzIHRvIHRoZWlyIGVycm9yXG4gICAqIGJvdW5kYXJ5LiAgQWRkaXRpb25hbGx5LCBpdCB0cmFja3MgX2RlZXBlc3RSZW5kZXJlZEJvdW5kYXJ5SWQgd2hpY2ggY2FuIGJlXG4gICAqIHVzZWQgdG8gZW11bGF0ZSBSZWFjdCBlcnJvciBib3VuZGFyaWVzIGR1cmluZyBTU3IgYnkgcGVyZm9ybWluZyBhIHNlY29uZFxuICAgKiBwYXNzIG9ubHkgZG93biB0byB0aGUgYm91bmRhcnlJZC5cbiAgICpcbiAgICogVGhlIG9uZSBleGNlcHRpb24gd2hlcmUgd2UgZG8gbm90IHJldHVybiBhIFN0YXRpY0hhbmRsZXJDb250ZXh0IGlzIHdoZW4gYVxuICAgKiByZWRpcmVjdCByZXNwb25zZSBpcyByZXR1cm5lZCBvciB0aHJvd24gZnJvbSBhbnkgYWN0aW9uL2xvYWRlci4gIFdlXG4gICAqIHByb3BhZ2F0ZSB0aGF0IG91dCBhbmQgcmV0dXJuIHRoZSByYXcgUmVzcG9uc2Ugc28gdGhlIEhUVFAgc2VydmVyIGNhblxuICAgKiByZXR1cm4gaXQgZGlyZWN0bHkuXG4gICAqL1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHF1ZXJ5KHJlcXVlc3QpIHtcbiAgICBsZXQgdXJsID0gbmV3IFVSTChyZXF1ZXN0LnVybCk7XG4gICAgbGV0IGxvY2F0aW9uID0gY3JlYXRlTG9jYXRpb24oXCJcIiwgY3JlYXRlUGF0aCh1cmwpLCBudWxsLCBcImRlZmF1bHRcIik7XG4gICAgbGV0IG1hdGNoZXMgPSBtYXRjaFJvdXRlcyhkYXRhUm91dGVzLCBsb2NhdGlvbik7XG5cbiAgICBpZiAoIXZhbGlkUmVxdWVzdE1ldGhvZHMuaGFzKHJlcXVlc3QubWV0aG9kKSkge1xuICAgICAgbGV0IHtcbiAgICAgICAgbWF0Y2hlczogbWV0aG9kTm90QWxsb3dlZE1hdGNoZXMsXG4gICAgICAgIHJvdXRlLFxuICAgICAgICBlcnJvclxuICAgICAgfSA9IGdldE1ldGhvZE5vdEFsbG93ZWRNYXRjaGVzKGRhdGFSb3V0ZXMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIG1hdGNoZXM6IG1ldGhvZE5vdEFsbG93ZWRNYXRjaGVzLFxuICAgICAgICBsb2FkZXJEYXRhOiB7fSxcbiAgICAgICAgYWN0aW9uRGF0YTogbnVsbCxcbiAgICAgICAgZXJyb3JzOiB7XG4gICAgICAgICAgW3JvdXRlLmlkXTogZXJyb3JcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdHVzQ29kZTogZXJyb3Iuc3RhdHVzLFxuICAgICAgICBsb2FkZXJIZWFkZXJzOiB7fSxcbiAgICAgICAgYWN0aW9uSGVhZGVyczoge31cbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICghbWF0Y2hlcykge1xuICAgICAgbGV0IHtcbiAgICAgICAgbWF0Y2hlczogbm90Rm91bmRNYXRjaGVzLFxuICAgICAgICByb3V0ZSxcbiAgICAgICAgZXJyb3JcbiAgICAgIH0gPSBnZXROb3RGb3VuZE1hdGNoZXMoZGF0YVJvdXRlcyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgbWF0Y2hlczogbm90Rm91bmRNYXRjaGVzLFxuICAgICAgICBsb2FkZXJEYXRhOiB7fSxcbiAgICAgICAgYWN0aW9uRGF0YTogbnVsbCxcbiAgICAgICAgZXJyb3JzOiB7XG4gICAgICAgICAgW3JvdXRlLmlkXTogZXJyb3JcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdHVzQ29kZTogZXJyb3Iuc3RhdHVzLFxuICAgICAgICBsb2FkZXJIZWFkZXJzOiB7fSxcbiAgICAgICAgYWN0aW9uSGVhZGVyczoge31cbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5SW1wbChyZXF1ZXN0LCBsb2NhdGlvbiwgbWF0Y2hlcyk7XG5cbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSAvLyBXaGVuIHJldHVybmluZyBTdGF0aWNIYW5kbGVyQ29udGV4dCwgd2UgcGF0Y2ggYmFjayBpbiB0aGUgbG9jYXRpb24gaGVyZVxuICAgIC8vIHNpbmNlIHdlIG5lZWQgaXQgZm9yIFJlYWN0IENvbnRleHQuICBCdXQgdGhpcyBoZWxwcyBrZWVwIG91ciBzdWJtaXQgYW5kXG4gICAgLy8gbG9hZFJvdXRlRGF0YSBvcGVyYXRpbmcgb24gYSBSZXF1ZXN0IGluc3RlYWQgb2YgYSBMb2NhdGlvblxuXG5cbiAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgbG9jYXRpb25cbiAgICB9LCByZXN1bHQpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgcXVlcnlSb3V0ZSgpIG1ldGhvZCBpcyBpbnRlbmRlZCBmb3IgdGFyZ2V0ZWQgcm91dGUgcmVxdWVzdHMsIGVpdGhlclxuICAgKiBmb3IgZmV0Y2ggP19kYXRhIHJlcXVlc3RzIG9yIHJlc291cmNlIHJvdXRlIHJlcXVlc3RzLiAgSW4gdGhpcyBjYXNlLCB3ZVxuICAgKiBhcmUgb25seSBldmVyIGNhbGxpbmcgYSBzaW5nbGUgYWN0aW9uIG9yIGxvYWRlciwgYW5kIHdlIGFyZSByZXR1cm5pbmcgdGhlXG4gICAqIHJldHVybmVkIHZhbHVlIGRpcmVjdGx5LiAgSW4gbW9zdCBjYXNlcywgdGhpcyB3aWxsIGJlIGEgUmVzcG9uc2UgcmV0dXJuZWRcbiAgICogZnJvbSB0aGUgYWN0aW9uL2xvYWRlciwgYnV0IGl0IG1heSBiZSBhIHByaW1pdGl2ZSBvciBvdGhlciB2YWx1ZSBhcyB3ZWxsIC1cbiAgICogYW5kIGluIHN1Y2ggY2FzZXMgdGhlIGNhbGxpbmcgY29udGV4dCBzaG91bGQgaGFuZGxlIHRoYXQgYWNjb3JkaW5nbHkuXG4gICAqXG4gICAqIFdlIGRvIHJlc3BlY3QgdGhlIHRocm93L3JldHVybiBkaWZmZXJlbnRpYXRpb24sIHNvIGlmIGFuIGFjdGlvbi9sb2FkZXJcbiAgICogdGhyb3dzLCB0aGVuIHRoaXMgbWV0aG9kIHdpbGwgdGhyb3cgdGhlIHZhbHVlLiAgVGhpcyBpcyBpbXBvcnRhbnQgc28gd2VcbiAgICogY2FuIGRvIHByb3BlciBib3VuZGFyeSBpZGVudGlmaWNhdGlvbiBpbiBSZW1peCB3aGVyZSBhIHRocm93biBSZXNwb25zZVxuICAgKiBtdXN0IGdvIHRvIHRoZSBDYXRjaCBCb3VuZGFyeSBidXQgYSByZXR1cm5lZCBSZXNwb25zZSBpcyBoYXBweS1wYXRoLlxuICAgKlxuICAgKiBPbmUgdGhpbmcgdG8gbm90ZSBpcyB0aGF0IGFueSBSb3V0ZXItaW5pdGlhdGVkIHRocm93biBSZXNwb25zZSAoc3VjaCBhcyBhXG4gICAqIDQwNCBvciA0MDUpIHdpbGwgaGF2ZSBhIGN1c3RvbSBYLVJlbWl4LVJvdXRlci1FcnJvcjogXCJ5ZXNcIiBoZWFkZXIgb24gaXRcbiAgICogaW4gb3JkZXIgdG8gZGlmZmVyZW50aWF0ZSBmcm9tIHJlc3BvbnNlcyB0aHJvd24gZnJvbSB1c2VyIGFjdGlvbnMvbG9hZGVycy5cbiAgICovXG5cblxuICBhc3luYyBmdW5jdGlvbiBxdWVyeVJvdXRlKHJlcXVlc3QsIHJvdXRlSWQpIHtcbiAgICBsZXQgdXJsID0gbmV3IFVSTChyZXF1ZXN0LnVybCk7XG4gICAgbGV0IGxvY2F0aW9uID0gY3JlYXRlTG9jYXRpb24oXCJcIiwgY3JlYXRlUGF0aCh1cmwpLCBudWxsLCBcImRlZmF1bHRcIik7XG4gICAgbGV0IG1hdGNoZXMgPSBtYXRjaFJvdXRlcyhkYXRhUm91dGVzLCBsb2NhdGlvbik7XG5cbiAgICBpZiAoIXZhbGlkUmVxdWVzdE1ldGhvZHMuaGFzKHJlcXVlc3QubWV0aG9kKSkge1xuICAgICAgdGhyb3cgY3JlYXRlUm91dGVyRXJyb3JSZXNwb25zZShudWxsLCB7XG4gICAgICAgIHN0YXR1czogNDA1LFxuICAgICAgICBzdGF0dXNUZXh0OiBcIk1ldGhvZCBOb3QgQWxsb3dlZFwiXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFtYXRjaGVzKSB7XG4gICAgICB0aHJvdyBjcmVhdGVSb3V0ZXJFcnJvclJlc3BvbnNlKG51bGwsIHtcbiAgICAgICAgc3RhdHVzOiA0MDQsXG4gICAgICAgIHN0YXR1c1RleHQ6IFwiTm90IEZvdW5kXCJcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBtYXRjaCA9IHJvdXRlSWQgPyBtYXRjaGVzLmZpbmQobSA9PiBtLnJvdXRlLmlkID09PSByb3V0ZUlkKSA6IGdldFRhcmdldE1hdGNoKG1hdGNoZXMsIGxvY2F0aW9uKTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IGNyZWF0ZVJvdXRlckVycm9yUmVzcG9uc2UobnVsbCwge1xuICAgICAgICBzdGF0dXM6IDQwNCxcbiAgICAgICAgc3RhdHVzVGV4dDogXCJOb3QgRm91bmRcIlxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5SW1wbChyZXF1ZXN0LCBsb2NhdGlvbiwgbWF0Y2hlcywgbWF0Y2gpO1xuXG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGxldCBlcnJvciA9IHJlc3VsdC5lcnJvcnMgPyBPYmplY3QudmFsdWVzKHJlc3VsdC5lcnJvcnMpWzBdIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIElmIHdlIGdvdCBiYWNrIHJlc3VsdC5lcnJvcnMsIHRoYXQgbWVhbnMgdGhlIGxvYWRlci9hY3Rpb24gdGhyZXdcbiAgICAgIC8vIF9zb21ldGhpbmdfIHRoYXQgd2Fzbid0IGEgUmVzcG9uc2UsIGJ1dCBpdCdzIG5vdCBndWFyYW50ZWVkL3JlcXVpcmVkXG4gICAgICAvLyB0byBiZSBhbiBgaW5zdGFuY2VvZiBFcnJvcmAgZWl0aGVyLCBzbyB3ZSBoYXZlIHRvIHVzZSB0aHJvdyBoZXJlIHRvXG4gICAgICAvLyBwcmVzZXJ2ZSB0aGUgXCJlcnJvclwiIHN0YXRlIG91dHNpZGUgb2YgcXVlcnlJbXBsLlxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSAvLyBQaWNrIG9mZiB0aGUgcmlnaHQgc3RhdGUgdmFsdWUgdG8gcmV0dXJuXG5cblxuICAgIGxldCByb3V0ZURhdGEgPSBbcmVzdWx0LmFjdGlvbkRhdGEsIHJlc3VsdC5sb2FkZXJEYXRhXS5maW5kKHYgPT4gdik7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMocm91dGVEYXRhIHx8IHt9KVswXTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHF1ZXJ5SW1wbChyZXF1ZXN0LCBsb2NhdGlvbiwgbWF0Y2hlcywgcm91dGVNYXRjaCkge1xuICAgIGludmFyaWFudChyZXF1ZXN0LnNpZ25hbCwgXCJxdWVyeSgpL3F1ZXJ5Um91dGUoKSByZXF1ZXN0cyBtdXN0IGNvbnRhaW4gYW4gQWJvcnRDb250cm9sbGVyIHNpZ25hbFwiKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAodmFsaWRBY3Rpb25NZXRob2RzLmhhcyhyZXF1ZXN0Lm1ldGhvZCkpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHN1Ym1pdChyZXF1ZXN0LCBtYXRjaGVzLCByb3V0ZU1hdGNoIHx8IGdldFRhcmdldE1hdGNoKG1hdGNoZXMsIGxvY2F0aW9uKSwgcm91dGVNYXRjaCAhPSBudWxsKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGxvYWRSb3V0ZURhdGEocmVxdWVzdCwgbWF0Y2hlcywgcm91dGVNYXRjaCk7XG4gICAgICByZXR1cm4gcmVzdWx0IGluc3RhbmNlb2YgUmVzcG9uc2UgPyByZXN1bHQgOiBfZXh0ZW5kcyh7fSwgcmVzdWx0LCB7XG4gICAgICAgIGFjdGlvbkRhdGE6IG51bGwsXG4gICAgICAgIGFjdGlvbkhlYWRlcnM6IHt9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBJZiB0aGUgdXNlciB0aHJldy9yZXR1cm5lZCBhIFJlc3BvbnNlIGluIGNhbGxMb2FkZXJPckFjdGlvbiwgd2UgdGhyb3dcbiAgICAgIC8vIGl0IHRvIGJhaWwgb3V0IGFuZCB0aGVuIHJldHVybiBvciB0aHJvdyBoZXJlIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHVzZXJcbiAgICAgIC8vIHJldHVybmVkIG9yIHRocmV3XG4gICAgICBpZiAoaXNRdWVyeVJvdXRlUmVzcG9uc2UoZSkpIHtcbiAgICAgICAgaWYgKGUudHlwZSA9PT0gUmVzdWx0VHlwZS5lcnJvciAmJiAhaXNSZWRpcmVjdFJlc3BvbnNlKGUucmVzcG9uc2UpKSB7XG4gICAgICAgICAgdGhyb3cgZS5yZXNwb25zZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlLnJlc3BvbnNlO1xuICAgICAgfSAvLyBSZWRpcmVjdHMgYXJlIGFsd2F5cyByZXR1cm5lZCBzaW5jZSB0aGV5IGRvbid0IHByb3BhZ2F0ZSB0byBjYXRjaFxuICAgICAgLy8gYm91bmRhcmllc1xuXG5cbiAgICAgIGlmIChpc1JlZGlyZWN0UmVzcG9uc2UoZSkpIHtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgICB9XG5cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3VibWl0KHJlcXVlc3QsIG1hdGNoZXMsIGFjdGlvbk1hdGNoLCBpc1JvdXRlUmVxdWVzdCkge1xuICAgIGxldCByZXN1bHQ7XG5cbiAgICBpZiAoIWFjdGlvbk1hdGNoLnJvdXRlLmFjdGlvbikge1xuICAgICAgaWYgKGlzUm91dGVSZXF1ZXN0KSB7XG4gICAgICAgIHRocm93IGNyZWF0ZVJvdXRlckVycm9yUmVzcG9uc2UobnVsbCwge1xuICAgICAgICAgIHN0YXR1czogNDA1LFxuICAgICAgICAgIHN0YXR1c1RleHQ6IFwiTWV0aG9kIE5vdCBBbGxvd2VkXCJcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdCA9IGdldE1ldGhvZE5vdEFsbG93ZWRSZXN1bHQocmVxdWVzdC51cmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCBjYWxsTG9hZGVyT3JBY3Rpb24oXCJhY3Rpb25cIiwgcmVxdWVzdCwgYWN0aW9uTWF0Y2gsIG1hdGNoZXMsIHVuZGVmaW5lZCwgLy8gQmFzZW5hbWUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgaW4gc3RhdGljIGhhbmRsZXJzXG4gICAgICB0cnVlLCBpc1JvdXRlUmVxdWVzdCk7XG5cbiAgICAgIGlmIChyZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGxldCBtZXRob2QgPSBpc1JvdXRlUmVxdWVzdCA/IFwicXVlcnlSb3V0ZVwiIDogXCJxdWVyeVwiO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWV0aG9kICsgXCIoKSBjYWxsIGFib3J0ZWRcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzUmVkaXJlY3RSZXN1bHQocmVzdWx0KSkge1xuICAgICAgLy8gVWhoaGggLSB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIHdlIHNob3VsZCBhbHdheXMgdGhyb3cgdGhlc2UgZnJvbVxuICAgICAgLy8gY2FsbExvYWRlck9yQWN0aW9uLCBidXQgdGhlIHR5cGUgbmFycm93aW5nIGhlcmUga2VlcHMgVFMgaGFwcHkgYW5kIHdlXG4gICAgICAvLyBjYW4gZ2V0IGJhY2sgb24gdGhlIFwidGhyb3cgYWxsIHJlZGlyZWN0IHJlc3BvbnNlc1wiIHRyYWluIGhlcmUgc2hvdWxkXG4gICAgICAvLyB0aGlzIGV2ZXIgaGFwcGVuIDovXG4gICAgICB0aHJvdyBuZXcgUmVzcG9uc2UobnVsbCwge1xuICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBMb2NhdGlvbjogcmVzdWx0LmxvY2F0aW9uXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpc0RlZmVycmVkUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImRlZmVyKCkgaXMgbm90IHN1cHBvcnRlZCBpbiBhY3Rpb25zXCIpO1xuICAgIH1cblxuICAgIGlmIChpc1JvdXRlUmVxdWVzdCkge1xuICAgICAgLy8gTm90ZTogVGhpcyBzaG91bGQgb25seSBiZSBub24tUmVzcG9uc2UgdmFsdWVzIGlmIHdlIGdldCBoZXJlLCBzaW5jZVxuICAgICAgLy8gaXNSb3V0ZVJlcXVlc3Qgc2hvdWxkIHRocm93IGFueSBSZXNwb25zZSByZWNlaXZlZCBpbiBjYWxsTG9hZGVyT3JBY3Rpb25cbiAgICAgIGlmIChpc0Vycm9yUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgICAgbGV0IGJvdW5kYXJ5TWF0Y2ggPSBmaW5kTmVhcmVzdEJvdW5kYXJ5KG1hdGNoZXMsIGFjdGlvbk1hdGNoLnJvdXRlLmlkKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtYXRjaGVzOiBbYWN0aW9uTWF0Y2hdLFxuICAgICAgICAgIGxvYWRlckRhdGE6IHt9LFxuICAgICAgICAgIGFjdGlvbkRhdGE6IG51bGwsXG4gICAgICAgICAgZXJyb3JzOiB7XG4gICAgICAgICAgICBbYm91bmRhcnlNYXRjaC5yb3V0ZS5pZF06IHJlc3VsdC5lcnJvclxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gTm90ZTogc3RhdHVzQ29kZSArIGhlYWRlcnMgYXJlIHVudXNlZCBoZXJlIHNpbmNlIHF1ZXJ5Um91dGUgd2lsbFxuICAgICAgICAgIC8vIHJldHVybiB0aGUgcmF3IFJlc3BvbnNlIG9yIHZhbHVlXG4gICAgICAgICAgc3RhdHVzQ29kZTogNTAwLFxuICAgICAgICAgIGxvYWRlckhlYWRlcnM6IHt9LFxuICAgICAgICAgIGFjdGlvbkhlYWRlcnM6IHt9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1hdGNoZXM6IFthY3Rpb25NYXRjaF0sXG4gICAgICAgIGxvYWRlckRhdGE6IHt9LFxuICAgICAgICBhY3Rpb25EYXRhOiB7XG4gICAgICAgICAgW2FjdGlvbk1hdGNoLnJvdXRlLmlkXTogcmVzdWx0LmRhdGFcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3JzOiBudWxsLFxuICAgICAgICAvLyBOb3RlOiBzdGF0dXNDb2RlICsgaGVhZGVycyBhcmUgdW51c2VkIGhlcmUgc2luY2UgcXVlcnlSb3V0ZSB3aWxsXG4gICAgICAgIC8vIHJldHVybiB0aGUgcmF3IFJlc3BvbnNlIG9yIHZhbHVlXG4gICAgICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgICAgbG9hZGVySGVhZGVyczoge30sXG4gICAgICAgIGFjdGlvbkhlYWRlcnM6IHt9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpc0Vycm9yUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIC8vIFN0b3JlIG9mZiB0aGUgcGVuZGluZyBlcnJvciAtIHdlIHVzZSBpdCB0byBkZXRlcm1pbmUgd2hpY2ggbG9hZGVyc1xuICAgICAgLy8gdG8gY2FsbCBhbmQgd2lsbCBjb21taXQgaXQgd2hlbiB3ZSBjb21wbGV0ZSB0aGUgbmF2aWdhdGlvblxuICAgICAgbGV0IGJvdW5kYXJ5TWF0Y2ggPSBmaW5kTmVhcmVzdEJvdW5kYXJ5KG1hdGNoZXMsIGFjdGlvbk1hdGNoLnJvdXRlLmlkKTtcbiAgICAgIGxldCBjb250ZXh0ID0gYXdhaXQgbG9hZFJvdXRlRGF0YShyZXF1ZXN0LCBtYXRjaGVzLCB1bmRlZmluZWQsIHtcbiAgICAgICAgW2JvdW5kYXJ5TWF0Y2gucm91dGUuaWRdOiByZXN1bHQuZXJyb3JcbiAgICAgIH0pOyAvLyBhY3Rpb24gc3RhdHVzIGNvZGVzIHRha2UgcHJlY2VkZW5jZSBvdmVyIGxvYWRlciBzdGF0dXMgY29kZXNcblxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBjb250ZXh0LCB7XG4gICAgICAgIHN0YXR1c0NvZGU6IGlzUm91dGVFcnJvclJlc3BvbnNlKHJlc3VsdC5lcnJvcikgPyByZXN1bHQuZXJyb3Iuc3RhdHVzIDogNTAwLFxuICAgICAgICBhY3Rpb25EYXRhOiBudWxsLFxuICAgICAgICBhY3Rpb25IZWFkZXJzOiBfZXh0ZW5kcyh7fSwgcmVzdWx0LmhlYWRlcnMgPyB7XG4gICAgICAgICAgW2FjdGlvbk1hdGNoLnJvdXRlLmlkXTogcmVzdWx0LmhlYWRlcnNcbiAgICAgICAgfSA6IHt9KVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IGNvbnRleHQgPSBhd2FpdCBsb2FkUm91dGVEYXRhKHJlcXVlc3QsIG1hdGNoZXMpO1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgY29udGV4dCwgcmVzdWx0LnN0YXR1c0NvZGUgPyB7XG4gICAgICBzdGF0dXNDb2RlOiByZXN1bHQuc3RhdHVzQ29kZVxuICAgIH0gOiB7fSwge1xuICAgICAgYWN0aW9uRGF0YToge1xuICAgICAgICBbYWN0aW9uTWF0Y2gucm91dGUuaWRdOiByZXN1bHQuZGF0YVxuICAgICAgfSxcbiAgICAgIGFjdGlvbkhlYWRlcnM6IF9leHRlbmRzKHt9LCByZXN1bHQuaGVhZGVycyA/IHtcbiAgICAgICAgW2FjdGlvbk1hdGNoLnJvdXRlLmlkXTogcmVzdWx0LmhlYWRlcnNcbiAgICAgIH0gOiB7fSlcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGxvYWRSb3V0ZURhdGEocmVxdWVzdCwgbWF0Y2hlcywgcm91dGVNYXRjaCwgcGVuZGluZ0FjdGlvbkVycm9yKSB7XG4gICAgbGV0IGlzUm91dGVSZXF1ZXN0ID0gcm91dGVNYXRjaCAhPSBudWxsO1xuICAgIGxldCByZXF1ZXN0TWF0Y2hlcyA9IHJvdXRlTWF0Y2ggPyBbcm91dGVNYXRjaF0gOiBnZXRMb2FkZXJNYXRjaGVzVW50aWxCb3VuZGFyeShtYXRjaGVzLCBPYmplY3Qua2V5cyhwZW5kaW5nQWN0aW9uRXJyb3IgfHwge30pWzBdKTtcbiAgICBsZXQgbWF0Y2hlc1RvTG9hZCA9IHJlcXVlc3RNYXRjaGVzLmZpbHRlcihtID0+IG0ucm91dGUubG9hZGVyKTsgLy8gU2hvcnQgY2lyY3VpdCBpZiB3ZSBoYXZlIG5vIGxvYWRlcnMgdG8gcnVuXG5cbiAgICBpZiAobWF0Y2hlc1RvTG9hZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1hdGNoZXMsXG4gICAgICAgIGxvYWRlckRhdGE6IHt9LFxuICAgICAgICBlcnJvcnM6IHBlbmRpbmdBY3Rpb25FcnJvciB8fCBudWxsLFxuICAgICAgICBzdGF0dXNDb2RlOiAyMDAsXG4gICAgICAgIGxvYWRlckhlYWRlcnM6IHt9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoWy4uLm1hdGNoZXNUb0xvYWQubWFwKG1hdGNoID0+IGNhbGxMb2FkZXJPckFjdGlvbihcImxvYWRlclwiLCByZXF1ZXN0LCBtYXRjaCwgbWF0Y2hlcywgdW5kZWZpbmVkLCAvLyBCYXNlbmFtZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBpbiBzdGF0aWMgaGFuZGxlcnNcbiAgICB0cnVlLCBpc1JvdXRlUmVxdWVzdCkpXSk7XG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgbGV0IG1ldGhvZCA9IGlzUm91dGVSZXF1ZXN0ID8gXCJxdWVyeVJvdXRlXCIgOiBcInF1ZXJ5XCI7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWV0aG9kICsgXCIoKSBjYWxsIGFib3J0ZWRcIik7XG4gICAgfSAvLyBDYW4ndCBkbyBhbnl0aGluZyB3aXRoIHRoZXNlIHdpdGhvdXQgdGhlIFJlbWl4IHNpZGUgb2YgdGhpbmdzLCBzbyBqdXN0XG4gICAgLy8gY2FuY2VsIHRoZW0gZm9yIG5vd1xuXG5cbiAgICByZXN1bHRzLmZvckVhY2gocmVzdWx0ID0+IHtcbiAgICAgIGlmIChpc0RlZmVycmVkUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgICAgcmVzdWx0LmRlZmVycmVkRGF0YS5jYW5jZWwoKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gUHJvY2VzcyBhbmQgY29tbWl0IG91dHB1dCBmcm9tIGxvYWRlcnNcblxuICAgIGxldCBjb250ZXh0ID0gcHJvY2Vzc1JvdXRlTG9hZGVyRGF0YShtYXRjaGVzLCBtYXRjaGVzVG9Mb2FkLCByZXN1bHRzLCBwZW5kaW5nQWN0aW9uRXJyb3IpO1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgY29udGV4dCwge1xuICAgICAgbWF0Y2hlc1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUm91dGVyRXJyb3JSZXNwb25zZShib2R5LCBpbml0KSB7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShib2R5LCBfZXh0ZW5kcyh7fSwgaW5pdCwge1xuICAgICAgaGVhZGVyczogX2V4dGVuZHMoe30sIGluaXQuaGVhZGVycywge1xuICAgICAgICBcIlgtUmVtaXgtUm91dGVyLUVycm9yXCI6IFwieWVzXCJcbiAgICAgIH0pXG4gICAgfSkpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkYXRhUm91dGVzLFxuICAgIHF1ZXJ5LFxuICAgIHF1ZXJ5Um91dGVcbiAgfTtcbn0gLy8jZW5kcmVnaW9uXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8jcmVnaW9uIEhlbHBlcnNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogR2l2ZW4gYW4gZXhpc3RpbmcgU3RhdGljSGFuZGxlckNvbnRleHQgYW5kIGFuIGVycm9yIHRocm93biBhdCByZW5kZXIgdGltZSxcbiAqIHByb3ZpZGUgYW4gdXBkYXRlZCBTdGF0aWNIYW5kbGVyQ29udGV4dCBzdWl0YWJsZSBmb3IgYSBzZWNvbmQgU1NSIHJlbmRlclxuICovXG5cbmZ1bmN0aW9uIGdldFN0YXRpY0NvbnRleHRGcm9tRXJyb3Iocm91dGVzLCBjb250ZXh0LCBlcnJvcikge1xuICBsZXQgbmV3Q29udGV4dCA9IF9leHRlbmRzKHt9LCBjb250ZXh0LCB7XG4gICAgc3RhdHVzQ29kZTogNTAwLFxuICAgIGVycm9yczoge1xuICAgICAgW2NvbnRleHQuX2RlZXBlc3RSZW5kZXJlZEJvdW5kYXJ5SWQgfHwgcm91dGVzWzBdLmlkXTogZXJyb3JcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBuZXdDb250ZXh0O1xufSAvLyBOb3JtYWxpemUgbmF2aWdhdGlvbiBvcHRpb25zIGJ5IGNvbnZlcnRpbmcgZm9ybU1ldGhvZD1HRVQgZm9ybURhdGEgb2JqZWN0cyB0b1xuLy8gVVJMU2VhcmNoUGFyYW1zIHNvIHRoZXkgYmVoYXZlIGlkZW50aWNhbGx5IHRvIGxpbmtzIHdpdGggcXVlcnkgcGFyYW1zXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hdmlnYXRlT3B0aW9ucyh0bywgb3B0cywgaXNGZXRjaGVyKSB7XG4gIGlmIChpc0ZldGNoZXIgPT09IHZvaWQgMCkge1xuICAgIGlzRmV0Y2hlciA9IGZhbHNlO1xuICB9XG5cbiAgbGV0IHBhdGggPSB0eXBlb2YgdG8gPT09IFwic3RyaW5nXCIgPyB0byA6IGNyZWF0ZVBhdGgodG8pOyAvLyBSZXR1cm4gbG9jYXRpb24gdmVyYmF0aW0gb24gbm9uLXN1Ym1pc3Npb24gbmF2aWdhdGlvbnNcblxuICBpZiAoIW9wdHMgfHwgIShcImZvcm1NZXRob2RcIiBpbiBvcHRzKSAmJiAhKFwiZm9ybURhdGFcIiBpbiBvcHRzKSkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXRoXG4gICAgfTtcbiAgfSAvLyBDcmVhdGUgYSBTdWJtaXNzaW9uIG9uIG5vbi1HRVQgbmF2aWdhdGlvbnNcblxuXG4gIGlmIChvcHRzLmZvcm1NZXRob2QgIT0gbnVsbCAmJiBvcHRzLmZvcm1NZXRob2QgIT09IFwiZ2V0XCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF0aCxcbiAgICAgIHN1Ym1pc3Npb246IHtcbiAgICAgICAgZm9ybU1ldGhvZDogb3B0cy5mb3JtTWV0aG9kLFxuICAgICAgICBmb3JtQWN0aW9uOiBzdHJpcEhhc2hGcm9tUGF0aChwYXRoKSxcbiAgICAgICAgZm9ybUVuY1R5cGU6IG9wdHMgJiYgb3B0cy5mb3JtRW5jVHlwZSB8fCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLFxuICAgICAgICBmb3JtRGF0YTogb3B0cy5mb3JtRGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gLy8gTm8gZm9ybURhdGEgdG8gZmxhdHRlbiBmb3IgR0VUIHN1Ym1pc3Npb25cblxuXG4gIGlmICghb3B0cy5mb3JtRGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXRoXG4gICAgfTtcbiAgfSAvLyBGbGF0dGVuIHN1Ym1pc3Npb24gb250byBVUkxTZWFyY2hQYXJhbXMgZm9yIEdFVCBzdWJtaXNzaW9uc1xuXG5cbiAgbGV0IHBhcnNlZFBhdGggPSBwYXJzZVBhdGgocGF0aCk7XG5cbiAgdHJ5IHtcbiAgICBsZXQgc2VhcmNoUGFyYW1zID0gY29udmVydEZvcm1EYXRhVG9TZWFyY2hQYXJhbXMob3B0cy5mb3JtRGF0YSk7IC8vIFNpbmNlIGZldGNoZXIgR0VUIHN1Ym1pc3Npb25zIG9ubHkgcnVuIGEgc2luZ2xlIGxvYWRlciAoYXMgb3Bwb3NlZCB0b1xuICAgIC8vIG5hdmlnYXRpb24gR0VUIHN1Ym1pc3Npb25zIHdoaWNoIHJ1biBhbGwgbG9hZGVycyksIHdlIG5lZWQgdG8gcHJlc2VydmVcbiAgICAvLyBhbnkgaW5jb21pbmcgP2luZGV4IHBhcmFtc1xuXG4gICAgaWYgKGlzRmV0Y2hlciAmJiBwYXJzZWRQYXRoLnNlYXJjaCAmJiBoYXNOYWtlZEluZGV4UXVlcnkocGFyc2VkUGF0aC5zZWFyY2gpKSB7XG4gICAgICBzZWFyY2hQYXJhbXMuYXBwZW5kKFwiaW5kZXhcIiwgXCJcIik7XG4gICAgfVxuXG4gICAgcGFyc2VkUGF0aC5zZWFyY2ggPSBcIj9cIiArIHNlYXJjaFBhcmFtcztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXRoLFxuICAgICAgZXJyb3I6IG5ldyBFcnJvclJlc3BvbnNlKDQwMCwgXCJCYWQgUmVxdWVzdFwiLCBcIkNhbm5vdCBzdWJtaXQgYmluYXJ5IGZvcm0gZGF0YSB1c2luZyBHRVRcIilcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBjcmVhdGVQYXRoKHBhcnNlZFBhdGgpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldExvYWRlclJlZGlyZWN0KHN0YXRlLCByZWRpcmVjdCkge1xuICBsZXQge1xuICAgIGZvcm1NZXRob2QsXG4gICAgZm9ybUFjdGlvbixcbiAgICBmb3JtRW5jVHlwZSxcbiAgICBmb3JtRGF0YVxuICB9ID0gc3RhdGUubmF2aWdhdGlvbjtcbiAgbGV0IG5hdmlnYXRpb24gPSB7XG4gICAgc3RhdGU6IFwibG9hZGluZ1wiLFxuICAgIGxvY2F0aW9uOiBjcmVhdGVMb2NhdGlvbihzdGF0ZS5sb2NhdGlvbiwgcmVkaXJlY3QubG9jYXRpb24pLFxuICAgIGZvcm1NZXRob2Q6IGZvcm1NZXRob2QgfHwgdW5kZWZpbmVkLFxuICAgIGZvcm1BY3Rpb246IGZvcm1BY3Rpb24gfHwgdW5kZWZpbmVkLFxuICAgIGZvcm1FbmNUeXBlOiBmb3JtRW5jVHlwZSB8fCB1bmRlZmluZWQsXG4gICAgZm9ybURhdGE6IGZvcm1EYXRhIHx8IHVuZGVmaW5lZFxuICB9O1xuICByZXR1cm4gbmF2aWdhdGlvbjtcbn0gLy8gRmlsdGVyIG91dCBhbGwgcm91dGVzIGJlbG93IGFueSBjYXVnaHQgZXJyb3IgYXMgdGhleSBhcmVuJ3QgZ29pbmcgdG9cbi8vIHJlbmRlciBzbyB3ZSBkb24ndCBuZWVkIHRvIGxvYWQgdGhlbVxuXG5cbmZ1bmN0aW9uIGdldExvYWRlck1hdGNoZXNVbnRpbEJvdW5kYXJ5KG1hdGNoZXMsIGJvdW5kYXJ5SWQpIHtcbiAgbGV0IGJvdW5kYXJ5TWF0Y2hlcyA9IG1hdGNoZXM7XG5cbiAgaWYgKGJvdW5kYXJ5SWQpIHtcbiAgICBsZXQgaW5kZXggPSBtYXRjaGVzLmZpbmRJbmRleChtID0+IG0ucm91dGUuaWQgPT09IGJvdW5kYXJ5SWQpO1xuXG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIGJvdW5kYXJ5TWF0Y2hlcyA9IG1hdGNoZXMuc2xpY2UoMCwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBib3VuZGFyeU1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIGdldE1hdGNoZXNUb0xvYWQoc3RhdGUsIG1hdGNoZXMsIHN1Ym1pc3Npb24sIGxvY2F0aW9uLCBpc1JldmFsaWRhdGlvblJlcXVpcmVkLCBjYW5jZWxsZWREZWZlcnJlZFJvdXRlcywgY2FuY2VsbGVkRmV0Y2hlckxvYWRzLCBwZW5kaW5nQWN0aW9uRGF0YSwgcGVuZGluZ0Vycm9yLCBmZXRjaExvYWRNYXRjaGVzKSB7XG4gIGxldCBhY3Rpb25SZXN1bHQgPSBwZW5kaW5nRXJyb3IgPyBPYmplY3QudmFsdWVzKHBlbmRpbmdFcnJvcilbMF0gOiBwZW5kaW5nQWN0aW9uRGF0YSA/IE9iamVjdC52YWx1ZXMocGVuZGluZ0FjdGlvbkRhdGEpWzBdIDogbnVsbDsgLy8gUGljayBuYXZpZ2F0aW9uIG1hdGNoZXMgdGhhdCBhcmUgbmV0LW5ldyBvciBxdWFsaWZ5IGZvciByZXZhbGlkYXRpb25cblxuICBsZXQgYm91bmRhcnlJZCA9IHBlbmRpbmdFcnJvciA/IE9iamVjdC5rZXlzKHBlbmRpbmdFcnJvcilbMF0gOiB1bmRlZmluZWQ7XG4gIGxldCBib3VuZGFyeU1hdGNoZXMgPSBnZXRMb2FkZXJNYXRjaGVzVW50aWxCb3VuZGFyeShtYXRjaGVzLCBib3VuZGFyeUlkKTtcbiAgbGV0IG5hdmlnYXRpb25NYXRjaGVzID0gYm91bmRhcnlNYXRjaGVzLmZpbHRlcigobWF0Y2gsIGluZGV4KSA9PiBtYXRjaC5yb3V0ZS5sb2FkZXIgIT0gbnVsbCAmJiAoaXNOZXdMb2FkZXIoc3RhdGUubG9hZGVyRGF0YSwgc3RhdGUubWF0Y2hlc1tpbmRleF0sIG1hdGNoKSB8fCAvLyBJZiB0aGlzIHJvdXRlIGhhZCBhIHBlbmRpbmcgZGVmZXJyZWQgY2FuY2VsbGVkIGl0IG11c3QgYmUgcmV2YWxpZGF0ZWRcbiAgY2FuY2VsbGVkRGVmZXJyZWRSb3V0ZXMuc29tZShpZCA9PiBpZCA9PT0gbWF0Y2gucm91dGUuaWQpIHx8IHNob3VsZFJldmFsaWRhdGVMb2FkZXIoc3RhdGUubG9jYXRpb24sIHN0YXRlLm1hdGNoZXNbaW5kZXhdLCBzdWJtaXNzaW9uLCBsb2NhdGlvbiwgbWF0Y2gsIGlzUmV2YWxpZGF0aW9uUmVxdWlyZWQsIGFjdGlvblJlc3VsdCkpKTsgLy8gUGljayBmZXRjaGVyLmxvYWRzIHRoYXQgbmVlZCB0byBiZSByZXZhbGlkYXRlZFxuXG4gIGxldCByZXZhbGlkYXRpbmdGZXRjaGVycyA9IFtdO1xuICBmZXRjaExvYWRNYXRjaGVzICYmIGZldGNoTG9hZE1hdGNoZXMuZm9yRWFjaCgoX3JlZjEwLCBrZXkpID0+IHtcbiAgICBsZXQgW2hyZWYsIG1hdGNoLCBmZXRjaE1hdGNoZXNdID0gX3JlZjEwO1xuXG4gICAgLy8gVGhpcyBmZXRjaGVyIHdhcyBjYW5jZWxsZWQgZnJvbSBhIHByaW9yIGFjdGlvbiBzdWJtaXNzaW9uIC0gZm9yY2UgcmVsb2FkXG4gICAgaWYgKGNhbmNlbGxlZEZldGNoZXJMb2Fkcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXZhbGlkYXRpbmdGZXRjaGVycy5wdXNoKFtrZXksIGhyZWYsIG1hdGNoLCBmZXRjaE1hdGNoZXNdKTtcbiAgICB9IGVsc2UgaWYgKGlzUmV2YWxpZGF0aW9uUmVxdWlyZWQpIHtcbiAgICAgIGxldCBzaG91bGRSZXZhbGlkYXRlID0gc2hvdWxkUmV2YWxpZGF0ZUxvYWRlcihocmVmLCBtYXRjaCwgc3VibWlzc2lvbiwgaHJlZiwgbWF0Y2gsIGlzUmV2YWxpZGF0aW9uUmVxdWlyZWQsIGFjdGlvblJlc3VsdCk7XG5cbiAgICAgIGlmIChzaG91bGRSZXZhbGlkYXRlKSB7XG4gICAgICAgIHJldmFsaWRhdGluZ0ZldGNoZXJzLnB1c2goW2tleSwgaHJlZiwgbWF0Y2gsIGZldGNoTWF0Y2hlc10pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBbbmF2aWdhdGlvbk1hdGNoZXMsIHJldmFsaWRhdGluZ0ZldGNoZXJzXTtcbn1cblxuZnVuY3Rpb24gaXNOZXdMb2FkZXIoY3VycmVudExvYWRlckRhdGEsIGN1cnJlbnRNYXRjaCwgbWF0Y2gpIHtcbiAgbGV0IGlzTmV3ID0gLy8gW2FdIC0+IFthLCBiXVxuICAhY3VycmVudE1hdGNoIHx8IC8vIFthLCBiXSAtPiBbYSwgY11cbiAgbWF0Y2gucm91dGUuaWQgIT09IGN1cnJlbnRNYXRjaC5yb3V0ZS5pZDsgLy8gSGFuZGxlIHRoZSBjYXNlIHRoYXQgd2UgZG9uJ3QgaGF2ZSBkYXRhIGZvciBhIHJlLXVzZWQgcm91dGUsIHBvdGVudGlhbGx5XG4gIC8vIGZyb20gYSBwcmlvciBlcnJvciBvciBmcm9tIGEgY2FuY2VsbGVkIHBlbmRpbmcgZGVmZXJyZWRcblxuICBsZXQgaXNNaXNzaW5nRGF0YSA9IGN1cnJlbnRMb2FkZXJEYXRhW21hdGNoLnJvdXRlLmlkXSA9PT0gdW5kZWZpbmVkOyAvLyBBbHdheXMgbG9hZCBpZiB0aGlzIGlzIGEgbmV0LW5ldyByb3V0ZSBvciB3ZSBkb24ndCB5ZXQgaGF2ZSBkYXRhXG5cbiAgcmV0dXJuIGlzTmV3IHx8IGlzTWlzc2luZ0RhdGE7XG59XG5cbmZ1bmN0aW9uIGlzTmV3Um91dGVJbnN0YW5jZShjdXJyZW50TWF0Y2gsIG1hdGNoKSB7XG4gIGxldCBjdXJyZW50UGF0aCA9IGN1cnJlbnRNYXRjaC5yb3V0ZS5wYXRoO1xuICByZXR1cm4gKC8vIHBhcmFtIGNoYW5nZSBmb3IgdGhpcyBtYXRjaCwgL3VzZXJzLzEyMyAtPiAvdXNlcnMvNDU2XG4gICAgY3VycmVudE1hdGNoLnBhdGhuYW1lICE9PSBtYXRjaC5wYXRobmFtZSB8fCAvLyBzcGxhdCBwYXJhbSBjaGFuZ2VkLCB3aGljaCBpcyBub3QgcHJlc2VudCBpbiBtYXRjaC5wYXRoXG4gICAgLy8gZS5nLiAvZmlsZXMvaW1hZ2VzL2F2YXRhci5qcGcgLT4gZmlsZXMvZmluYW5jZXMueGxzXG4gICAgY3VycmVudFBhdGggJiYgY3VycmVudFBhdGguZW5kc1dpdGgoXCIqXCIpICYmIGN1cnJlbnRNYXRjaC5wYXJhbXNbXCIqXCJdICE9PSBtYXRjaC5wYXJhbXNbXCIqXCJdXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFJldmFsaWRhdGVMb2FkZXIoY3VycmVudExvY2F0aW9uLCBjdXJyZW50TWF0Y2gsIHN1Ym1pc3Npb24sIGxvY2F0aW9uLCBtYXRjaCwgaXNSZXZhbGlkYXRpb25SZXF1aXJlZCwgYWN0aW9uUmVzdWx0KSB7XG4gIGxldCBjdXJyZW50VXJsID0gY3JlYXRlVVJMKGN1cnJlbnRMb2NhdGlvbik7XG4gIGxldCBjdXJyZW50UGFyYW1zID0gY3VycmVudE1hdGNoLnBhcmFtcztcbiAgbGV0IG5leHRVcmwgPSBjcmVhdGVVUkwobG9jYXRpb24pO1xuICBsZXQgbmV4dFBhcmFtcyA9IG1hdGNoLnBhcmFtczsgLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBhcyB0byB3aGVuIHdlIHJldmFsaWRhdGUuICBJZiB0aGUgcm91dGVcbiAgLy8gcHJvdmlkZXMgaXQncyBvd24gaW1wbGVtZW50YXRpb24sIHRoZW4gd2UgZ2l2ZSB0aGVtIGZ1bGwgY29udHJvbCBidXRcbiAgLy8gcHJvdmlkZSB0aGlzIHZhbHVlIHNvIHRoZXkgY2FuIGxldmVyYWdlIGl0IGlmIG5lZWRlZCBhZnRlciB0aGV5IGNoZWNrXG4gIC8vIHRoZWlyIG93biBzcGVjaWZpYyB1c2UgY2FzZXNcbiAgLy8gTm90ZSB0aGF0IGZldGNoZXJzIGFsd2F5cyBwcm92aWRlIHRoZSBzYW1lIGN1cnJlbnQvbmV4dCBsb2NhdGlvbnMgc28gdGhlXG4gIC8vIFVSTC1iYXNlZCBjaGVja3MgaGVyZSBkb24ndCBhcHBseSB0byBmZXRjaGVyIHNob3VsZFJldmFsaWRhdGUgY2FsbHNcblxuICBsZXQgZGVmYXVsdFNob3VsZFJldmFsaWRhdGUgPSBpc05ld1JvdXRlSW5zdGFuY2UoY3VycmVudE1hdGNoLCBtYXRjaCkgfHwgLy8gQ2xpY2tlZCB0aGUgc2FtZSBsaW5rLCByZXN1Ym1pdHRlZCBhIEdFVCBmb3JtXG4gIGN1cnJlbnRVcmwudG9TdHJpbmcoKSA9PT0gbmV4dFVybC50b1N0cmluZygpIHx8IC8vIFNlYXJjaCBwYXJhbXMgYWZmZWN0IGFsbCBsb2FkZXJzXG4gIGN1cnJlbnRVcmwuc2VhcmNoICE9PSBuZXh0VXJsLnNlYXJjaCB8fCAvLyBGb3JjZWQgcmV2YWxpZGF0aW9uIGR1ZSB0byBzdWJtaXNzaW9uLCB1c2VSZXZhbGlkYXRlLCBvciBYLVJlbWl4LVJldmFsaWRhdGVcbiAgaXNSZXZhbGlkYXRpb25SZXF1aXJlZDtcblxuICBpZiAobWF0Y2gucm91dGUuc2hvdWxkUmV2YWxpZGF0ZSkge1xuICAgIGxldCByb3V0ZUNob2ljZSA9IG1hdGNoLnJvdXRlLnNob3VsZFJldmFsaWRhdGUoX2V4dGVuZHMoe1xuICAgICAgY3VycmVudFVybCxcbiAgICAgIGN1cnJlbnRQYXJhbXMsXG4gICAgICBuZXh0VXJsLFxuICAgICAgbmV4dFBhcmFtc1xuICAgIH0sIHN1Ym1pc3Npb24sIHtcbiAgICAgIGFjdGlvblJlc3VsdCxcbiAgICAgIGRlZmF1bHRTaG91bGRSZXZhbGlkYXRlXG4gICAgfSkpO1xuXG4gICAgaWYgKHR5cGVvZiByb3V0ZUNob2ljZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiByb3V0ZUNob2ljZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdFNob3VsZFJldmFsaWRhdGU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNhbGxMb2FkZXJPckFjdGlvbih0eXBlLCByZXF1ZXN0LCBtYXRjaCwgbWF0Y2hlcywgYmFzZW5hbWUsIGlzU3RhdGljUmVxdWVzdCwgaXNSb3V0ZVJlcXVlc3QpIHtcbiAgaWYgKGlzU3RhdGljUmVxdWVzdCA9PT0gdm9pZCAwKSB7XG4gICAgaXNTdGF0aWNSZXF1ZXN0ID0gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNSb3V0ZVJlcXVlc3QgPT09IHZvaWQgMCkge1xuICAgIGlzUm91dGVSZXF1ZXN0ID0gZmFsc2U7XG4gIH1cblxuICBsZXQgcmVzdWx0VHlwZTtcbiAgbGV0IHJlc3VsdDsgLy8gU2V0dXAgYSBwcm9taXNlIHdlIGNhbiByYWNlIGFnYWluc3Qgc28gdGhhdCBhYm9ydCBzaWduYWxzIHNob3J0IGNpcmN1aXRcblxuICBsZXQgcmVqZWN0O1xuICBsZXQgYWJvcnRQcm9taXNlID0gbmV3IFByb21pc2UoKF8sIHIpID0+IHJlamVjdCA9IHIpO1xuXG4gIGxldCBvblJlamVjdCA9ICgpID0+IHJlamVjdCgpO1xuXG4gIHJlcXVlc3Quc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvblJlamVjdCk7XG5cbiAgdHJ5IHtcbiAgICBsZXQgaGFuZGxlciA9IG1hdGNoLnJvdXRlW3R5cGVdO1xuICAgIGludmFyaWFudChoYW5kbGVyLCBcIkNvdWxkIG5vdCBmaW5kIHRoZSBcIiArIHR5cGUgKyBcIiB0byBydW4gb24gdGhlIFxcXCJcIiArIG1hdGNoLnJvdXRlLmlkICsgXCJcXFwiIHJvdXRlXCIpO1xuICAgIHJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbaGFuZGxlcih7XG4gICAgICByZXF1ZXN0LFxuICAgICAgcGFyYW1zOiBtYXRjaC5wYXJhbXNcbiAgICB9KSwgYWJvcnRQcm9taXNlXSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5lcnJvcjtcbiAgICByZXN1bHQgPSBlO1xuICB9IGZpbmFsbHkge1xuICAgIHJlcXVlc3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvblJlamVjdCk7XG4gIH1cblxuICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUmVzcG9uc2UpIHtcbiAgICBsZXQgc3RhdHVzID0gcmVzdWx0LnN0YXR1czsgLy8gUHJvY2VzcyByZWRpcmVjdHNcblxuICAgIGlmIChzdGF0dXMgPj0gMzAwICYmIHN0YXR1cyA8PSAzOTkpIHtcbiAgICAgIGxldCBsb2NhdGlvbiA9IHJlc3VsdC5oZWFkZXJzLmdldChcIkxvY2F0aW9uXCIpO1xuICAgICAgaW52YXJpYW50KGxvY2F0aW9uLCBcIlJlZGlyZWN0cyByZXR1cm5lZC90aHJvd24gZnJvbSBsb2FkZXJzL2FjdGlvbnMgbXVzdCBoYXZlIGEgTG9jYXRpb24gaGVhZGVyXCIpOyAvLyBTdXBwb3J0IHJlbGF0aXZlIHJvdXRpbmcgaW4gcmVkaXJlY3RzXG5cbiAgICAgIGxldCBhY3RpdmVNYXRjaGVzID0gbWF0Y2hlcy5zbGljZSgwLCBtYXRjaGVzLmluZGV4T2YobWF0Y2gpICsgMSk7XG4gICAgICBsZXQgcm91dGVQYXRobmFtZXMgPSBnZXRQYXRoQ29udHJpYnV0aW5nTWF0Y2hlcyhhY3RpdmVNYXRjaGVzKS5tYXAobWF0Y2ggPT4gbWF0Y2gucGF0aG5hbWVCYXNlKTtcbiAgICAgIGxldCByZXF1ZXN0UGF0aCA9IGNyZWF0ZVVSTChyZXF1ZXN0LnVybCkucGF0aG5hbWU7XG4gICAgICBsZXQgcmVzb2x2ZWRMb2NhdGlvbiA9IHJlc29sdmVUbyhsb2NhdGlvbiwgcm91dGVQYXRobmFtZXMsIHJlcXVlc3RQYXRoKTtcbiAgICAgIGludmFyaWFudChjcmVhdGVQYXRoKHJlc29sdmVkTG9jYXRpb24pLCBcIlVuYWJsZSB0byByZXNvbHZlIHJlZGlyZWN0IGxvY2F0aW9uOiBcIiArIHJlc3VsdC5oZWFkZXJzLmdldChcIkxvY2F0aW9uXCIpKTsgLy8gUHJlcGVuZCB0aGUgYmFzZW5hbWUgdG8gdGhlIHJlZGlyZWN0IGxvY2F0aW9uIGlmIHdlIGhhdmUgb25lXG5cbiAgICAgIGlmIChiYXNlbmFtZSkge1xuICAgICAgICBsZXQgcGF0aCA9IHJlc29sdmVkTG9jYXRpb24ucGF0aG5hbWU7XG4gICAgICAgIHJlc29sdmVkTG9jYXRpb24ucGF0aG5hbWUgPSBwYXRoID09PSBcIi9cIiA/IGJhc2VuYW1lIDogam9pblBhdGhzKFtiYXNlbmFtZSwgcGF0aF0pO1xuICAgICAgfVxuXG4gICAgICBsb2NhdGlvbiA9IGNyZWF0ZVBhdGgocmVzb2x2ZWRMb2NhdGlvbik7IC8vIERvbid0IHByb2Nlc3MgcmVkaXJlY3RzIGluIHRoZSByb3V0ZXIgZHVyaW5nIHN0YXRpYyByZXF1ZXN0cyByZXF1ZXN0cy5cbiAgICAgIC8vIEluc3RlYWQsIHRocm93IHRoZSBSZXNwb25zZSBhbmQgbGV0IHRoZSBzZXJ2ZXIgaGFuZGxlIGl0IHdpdGggYW4gSFRUUFxuICAgICAgLy8gcmVkaXJlY3QuICBXZSBhbHNvIHVwZGF0ZSB0aGUgTG9jYXRpb24gaGVhZGVyIGluIHBsYWNlIGluIHRoaXMgZmxvdyBzb1xuICAgICAgLy8gYmFzZW5hbWUgYW5kIHJlbGF0aXZlIHJvdXRpbmcgaXMgdGFrZW4gaW50byBhY2NvdW50XG5cbiAgICAgIGlmIChpc1N0YXRpY1JlcXVlc3QpIHtcbiAgICAgICAgcmVzdWx0LmhlYWRlcnMuc2V0KFwiTG9jYXRpb25cIiwgbG9jYXRpb24pO1xuICAgICAgICB0aHJvdyByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFJlc3VsdFR5cGUucmVkaXJlY3QsXG4gICAgICAgIHN0YXR1cyxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHJldmFsaWRhdGU6IHJlc3VsdC5oZWFkZXJzLmdldChcIlgtUmVtaXgtUmV2YWxpZGF0ZVwiKSAhPT0gbnVsbFxuICAgICAgfTtcbiAgICB9IC8vIEZvciBTU1Igc2luZ2xlLXJvdXRlIHJlcXVlc3RzLCB3ZSB3YW50IHRvIGhhbmQgUmVzcG9uc2VzIGJhY2sgZGlyZWN0bHlcbiAgICAvLyB3aXRob3V0IHVud3JhcHBpbmcuICBXZSBkbyB0aGlzIHdpdGggdGhlIFF1ZXJ5Um91dGVSZXNwb25zZSB3cmFwcGVyXG4gICAgLy8gaW50ZXJmYWNlIHNvIHdlIGNhbiBrbm93IHdoZXRoZXIgaXQgd2FzIHJldHVybmVkIG9yIHRocm93blxuXG5cbiAgICBpZiAoaXNSb3V0ZVJlcXVlc3QpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gICAgICB0aHJvdyB7XG4gICAgICAgIHR5cGU6IHJlc3VsdFR5cGUgfHwgUmVzdWx0VHlwZS5kYXRhLFxuICAgICAgICByZXNwb25zZTogcmVzdWx0XG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCBkYXRhO1xuICAgIGxldCBjb250ZW50VHlwZSA9IHJlc3VsdC5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKTtcblxuICAgIGlmIChjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5zdGFydHNXaXRoKFwiYXBwbGljYXRpb24vanNvblwiKSkge1xuICAgICAgZGF0YSA9IGF3YWl0IHJlc3VsdC5qc29uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSBhd2FpdCByZXN1bHQudGV4dCgpO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLmVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiByZXN1bHRUeXBlLFxuICAgICAgICBlcnJvcjogbmV3IEVycm9yUmVzcG9uc2Uoc3RhdHVzLCByZXN1bHQuc3RhdHVzVGV4dCwgZGF0YSksXG4gICAgICAgIGhlYWRlcnM6IHJlc3VsdC5oZWFkZXJzXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBSZXN1bHRUeXBlLmRhdGEsXG4gICAgICBkYXRhLFxuICAgICAgc3RhdHVzQ29kZTogcmVzdWx0LnN0YXR1cyxcbiAgICAgIGhlYWRlcnM6IHJlc3VsdC5oZWFkZXJzXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLmVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHJlc3VsdFR5cGUsXG4gICAgICBlcnJvcjogcmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBEZWZlcnJlZERhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogUmVzdWx0VHlwZS5kZWZlcnJlZCxcbiAgICAgIGRlZmVycmVkRGF0YTogcmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogUmVzdWx0VHlwZS5kYXRhLFxuICAgIGRhdGE6IHJlc3VsdFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXF1ZXN0KGxvY2F0aW9uLCBzaWduYWwsIHN1Ym1pc3Npb24pIHtcbiAgbGV0IHVybCA9IGNyZWF0ZVVSTChzdHJpcEhhc2hGcm9tUGF0aChsb2NhdGlvbikpLnRvU3RyaW5nKCk7XG4gIGxldCBpbml0ID0ge1xuICAgIHNpZ25hbFxuICB9O1xuXG4gIGlmIChzdWJtaXNzaW9uKSB7XG4gICAgbGV0IHtcbiAgICAgIGZvcm1NZXRob2QsXG4gICAgICBmb3JtRW5jVHlwZSxcbiAgICAgIGZvcm1EYXRhXG4gICAgfSA9IHN1Ym1pc3Npb247XG4gICAgaW5pdC5tZXRob2QgPSBmb3JtTWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gICAgaW5pdC5ib2R5ID0gZm9ybUVuY1R5cGUgPT09IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgPyBjb252ZXJ0Rm9ybURhdGFUb1NlYXJjaFBhcmFtcyhmb3JtRGF0YSkgOiBmb3JtRGF0YTtcbiAgfSAvLyBDb250ZW50LVR5cGUgaXMgaW5mZXJyZWQgKGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdClcblxuXG4gIHJldHVybiBuZXcgUmVxdWVzdCh1cmwsIGluaXQpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0Rm9ybURhdGFUb1NlYXJjaFBhcmFtcyhmb3JtRGF0YSkge1xuICBsZXQgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpIHtcbiAgICBpbnZhcmlhbnQodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiLCAnRmlsZSBpbnB1dHMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBlbmNUeXBlIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIsICcgKyAncGxlYXNlIHVzZSBcIm11bHRpcGFydC9mb3JtLWRhdGFcIiBpbnN0ZWFkLicpO1xuICAgIHNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gc2VhcmNoUGFyYW1zO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzUm91dGVMb2FkZXJEYXRhKG1hdGNoZXMsIG1hdGNoZXNUb0xvYWQsIHJlc3VsdHMsIHBlbmRpbmdFcnJvciwgYWN0aXZlRGVmZXJyZWRzKSB7XG4gIC8vIEZpbGwgaW4gbG9hZGVyRGF0YS9lcnJvcnMgZnJvbSBvdXIgbG9hZGVyc1xuICBsZXQgbG9hZGVyRGF0YSA9IHt9O1xuICBsZXQgZXJyb3JzID0gbnVsbDtcbiAgbGV0IHN0YXR1c0NvZGU7XG4gIGxldCBmb3VuZEVycm9yID0gZmFsc2U7XG4gIGxldCBsb2FkZXJIZWFkZXJzID0ge307IC8vIFByb2Nlc3MgbG9hZGVyIHJlc3VsdHMgaW50byBzdGF0ZS5sb2FkZXJEYXRhL3N0YXRlLmVycm9yc1xuXG4gIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0LCBpbmRleCkgPT4ge1xuICAgIGxldCBpZCA9IG1hdGNoZXNUb0xvYWRbaW5kZXhdLnJvdXRlLmlkO1xuICAgIGludmFyaWFudCghaXNSZWRpcmVjdFJlc3VsdChyZXN1bHQpLCBcIkNhbm5vdCBoYW5kbGUgcmVkaXJlY3QgcmVzdWx0cyBpbiBwcm9jZXNzTG9hZGVyRGF0YVwiKTtcblxuICAgIGlmIChpc0Vycm9yUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIC8vIExvb2sgdXB3YXJkcyBmcm9tIHRoZSBtYXRjaGVkIHJvdXRlIGZvciB0aGUgY2xvc2VzdCBhbmNlc3RvclxuICAgICAgLy8gZXJyb3IgYm91bmRhcnksIGRlZmF1bHRpbmcgdG8gdGhlIHJvb3QgbWF0Y2hcbiAgICAgIGxldCBib3VuZGFyeU1hdGNoID0gZmluZE5lYXJlc3RCb3VuZGFyeShtYXRjaGVzLCBpZCk7XG4gICAgICBsZXQgZXJyb3IgPSByZXN1bHQuZXJyb3I7IC8vIElmIHdlIGhhdmUgYSBwZW5kaW5nIGFjdGlvbiBlcnJvciwgd2UgcmVwb3J0IGl0IGF0IHRoZSBoaWdoZXN0LXJvdXRlXG4gICAgICAvLyB0aGF0IHRocm93cyBhIGxvYWRlciBlcnJvciwgYW5kIHRoZW4gY2xlYXIgaXQgb3V0IHRvIGluZGljYXRlIHRoYXRcbiAgICAgIC8vIGl0IHdhcyBjb25zdW1lZFxuXG4gICAgICBpZiAocGVuZGluZ0Vycm9yKSB7XG4gICAgICAgIGVycm9yID0gT2JqZWN0LnZhbHVlcyhwZW5kaW5nRXJyb3IpWzBdO1xuICAgICAgICBwZW5kaW5nRXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGVycm9ycyA9IE9iamVjdC5hc3NpZ24oZXJyb3JzIHx8IHt9LCB7XG4gICAgICAgIFtib3VuZGFyeU1hdGNoLnJvdXRlLmlkXTogZXJyb3JcbiAgICAgIH0pOyAvLyBPbmNlIHdlIGZpbmQgb3VyIGZpcnN0IChoaWdoZXN0KSBlcnJvciwgd2Ugc2V0IHRoZSBzdGF0dXMgY29kZSBhbmRcbiAgICAgIC8vIHByZXZlbnQgZGVlcGVyIHN0YXR1cyBjb2RlcyBmcm9tIG92ZXJyaWRpbmdcblxuICAgICAgaWYgKCFmb3VuZEVycm9yKSB7XG4gICAgICAgIGZvdW5kRXJyb3IgPSB0cnVlO1xuICAgICAgICBzdGF0dXNDb2RlID0gaXNSb3V0ZUVycm9yUmVzcG9uc2UocmVzdWx0LmVycm9yKSA/IHJlc3VsdC5lcnJvci5zdGF0dXMgOiA1MDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQuaGVhZGVycykge1xuICAgICAgICBsb2FkZXJIZWFkZXJzW2lkXSA9IHJlc3VsdC5oZWFkZXJzO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNEZWZlcnJlZFJlc3VsdChyZXN1bHQpKSB7XG4gICAgICBhY3RpdmVEZWZlcnJlZHMgJiYgYWN0aXZlRGVmZXJyZWRzLnNldChpZCwgcmVzdWx0LmRlZmVycmVkRGF0YSk7XG4gICAgICBsb2FkZXJEYXRhW2lkXSA9IHJlc3VsdC5kZWZlcnJlZERhdGEuZGF0YTsgLy8gVE9ETzogQWRkIHN0YXR1c0NvZGUvaGVhZGVycyBvbmNlIHdlIHdpcmUgdXAgc3RyZWFtaW5nIGluIFJlbWl4XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvYWRlckRhdGFbaWRdID0gcmVzdWx0LmRhdGE7IC8vIEVycm9yIHN0YXR1cyBjb2RlcyBhbHdheXMgb3ZlcnJpZGUgc3VjY2VzcyBzdGF0dXMgY29kZXMsIGJ1dCBpZiBhbGxcbiAgICAgIC8vIGxvYWRlcnMgYXJlIHN1Y2Nlc3NmdWwgd2UgdGFrZSB0aGUgZGVlcGVzdCBzdGF0dXMgY29kZS5cblxuICAgICAgaWYgKHJlc3VsdC5zdGF0dXNDb2RlICE9IG51bGwgJiYgcmVzdWx0LnN0YXR1c0NvZGUgIT09IDIwMCAmJiAhZm91bmRFcnJvcikge1xuICAgICAgICBzdGF0dXNDb2RlID0gcmVzdWx0LnN0YXR1c0NvZGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQuaGVhZGVycykge1xuICAgICAgICBsb2FkZXJIZWFkZXJzW2lkXSA9IHJlc3VsdC5oZWFkZXJzO1xuICAgICAgfVxuICAgIH1cbiAgfSk7IC8vIElmIHdlIGRpZG4ndCBjb25zdW1lIHRoZSBwZW5kaW5nIGFjdGlvbiBlcnJvciAoaS5lLiwgYWxsIGxvYWRlcnNcbiAgLy8gcmVzb2x2ZWQpLCB0aGVuIGNvbnN1bWUgaXQgaGVyZVxuXG4gIGlmIChwZW5kaW5nRXJyb3IpIHtcbiAgICBlcnJvcnMgPSBwZW5kaW5nRXJyb3I7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxvYWRlckRhdGEsXG4gICAgZXJyb3JzLFxuICAgIHN0YXR1c0NvZGU6IHN0YXR1c0NvZGUgfHwgMjAwLFxuICAgIGxvYWRlckhlYWRlcnNcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0xvYWRlckRhdGEoc3RhdGUsIG1hdGNoZXMsIG1hdGNoZXNUb0xvYWQsIHJlc3VsdHMsIHBlbmRpbmdFcnJvciwgcmV2YWxpZGF0aW5nRmV0Y2hlcnMsIGZldGNoZXJSZXN1bHRzLCBhY3RpdmVEZWZlcnJlZHMpIHtcbiAgbGV0IHtcbiAgICBsb2FkZXJEYXRhLFxuICAgIGVycm9yc1xuICB9ID0gcHJvY2Vzc1JvdXRlTG9hZGVyRGF0YShtYXRjaGVzLCBtYXRjaGVzVG9Mb2FkLCByZXN1bHRzLCBwZW5kaW5nRXJyb3IsIGFjdGl2ZURlZmVycmVkcyk7IC8vIFByb2Nlc3MgcmVzdWx0cyBmcm9tIG91ciByZXZhbGlkYXRpbmcgZmV0Y2hlcnNcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcmV2YWxpZGF0aW5nRmV0Y2hlcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgbGV0IFtrZXksLCBtYXRjaF0gPSByZXZhbGlkYXRpbmdGZXRjaGVyc1tpbmRleF07XG4gICAgaW52YXJpYW50KGZldGNoZXJSZXN1bHRzICE9PSB1bmRlZmluZWQgJiYgZmV0Y2hlclJlc3VsdHNbaW5kZXhdICE9PSB1bmRlZmluZWQsIFwiRGlkIG5vdCBmaW5kIGNvcnJlc3BvbmRpbmcgZmV0Y2hlciByZXN1bHRcIik7XG4gICAgbGV0IHJlc3VsdCA9IGZldGNoZXJSZXN1bHRzW2luZGV4XTsgLy8gUHJvY2VzcyBmZXRjaGVyIG5vbi1yZWRpcmVjdCBlcnJvcnNcblxuICAgIGlmIChpc0Vycm9yUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIGxldCBib3VuZGFyeU1hdGNoID0gZmluZE5lYXJlc3RCb3VuZGFyeShzdGF0ZS5tYXRjaGVzLCBtYXRjaC5yb3V0ZS5pZCk7XG5cbiAgICAgIGlmICghKGVycm9ycyAmJiBlcnJvcnNbYm91bmRhcnlNYXRjaC5yb3V0ZS5pZF0pKSB7XG4gICAgICAgIGVycm9ycyA9IF9leHRlbmRzKHt9LCBlcnJvcnMsIHtcbiAgICAgICAgICBbYm91bmRhcnlNYXRjaC5yb3V0ZS5pZF06IHJlc3VsdC5lcnJvclxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgc3RhdGUuZmV0Y2hlcnMuZGVsZXRlKGtleSk7XG4gICAgfSBlbHNlIGlmIChpc1JlZGlyZWN0UmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIC8vIFNob3VsZCBuZXZlciBnZXQgaGVyZSwgcmVkaXJlY3RzIHNob3VsZCBnZXQgcHJvY2Vzc2VkIGFib3ZlLCBidXQgd2VcbiAgICAgIC8vIGtlZXAgdGhpcyB0byB0eXBlIG5hcnJvdyB0byBhIHN1Y2Nlc3MgcmVzdWx0IGluIHRoZSBlbHNlXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmhhbmRsZWQgZmV0Y2hlciByZXZhbGlkYXRpb24gcmVkaXJlY3RcIik7XG4gICAgfSBlbHNlIGlmIChpc0RlZmVycmVkUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgIC8vIFNob3VsZCBuZXZlciBnZXQgaGVyZSwgZGVmZXJyZWQgZGF0YSBzaG91bGQgYmUgYXdhaXRlZCBmb3IgZmV0Y2hlcnNcbiAgICAgIC8vIGluIHJlc29sdmVEZWZlcnJlZFJlc3VsdHNcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCBmZXRjaGVyIGRlZmVycmVkIGRhdGFcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBkb25lRmV0Y2hlciA9IHtcbiAgICAgICAgc3RhdGU6IFwiaWRsZVwiLFxuICAgICAgICBkYXRhOiByZXN1bHQuZGF0YSxcbiAgICAgICAgZm9ybU1ldGhvZDogdW5kZWZpbmVkLFxuICAgICAgICBmb3JtQWN0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgIGZvcm1FbmNUeXBlOiB1bmRlZmluZWQsXG4gICAgICAgIGZvcm1EYXRhOiB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgICBzdGF0ZS5mZXRjaGVycy5zZXQoa2V5LCBkb25lRmV0Y2hlcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsb2FkZXJEYXRhLFxuICAgIGVycm9yc1xuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZUxvYWRlckRhdGEobG9hZGVyRGF0YSwgbmV3TG9hZGVyRGF0YSwgbWF0Y2hlcykge1xuICBsZXQgbWVyZ2VkTG9hZGVyRGF0YSA9IF9leHRlbmRzKHt9LCBuZXdMb2FkZXJEYXRhKTtcblxuICBtYXRjaGVzLmZvckVhY2gobWF0Y2ggPT4ge1xuICAgIGxldCBpZCA9IG1hdGNoLnJvdXRlLmlkO1xuXG4gICAgaWYgKG5ld0xvYWRlckRhdGFbaWRdID09PSB1bmRlZmluZWQgJiYgbG9hZGVyRGF0YVtpZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgbWVyZ2VkTG9hZGVyRGF0YVtpZF0gPSBsb2FkZXJEYXRhW2lkXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbWVyZ2VkTG9hZGVyRGF0YTtcbn0gLy8gRmluZCB0aGUgbmVhcmVzdCBlcnJvciBib3VuZGFyeSwgbG9va2luZyB1cHdhcmRzIGZyb20gdGhlIGxlYWYgcm91dGUgKG9yIHRoZVxuLy8gcm91dGUgc3BlY2lmaWVkIGJ5IHJvdXRlSWQpIGZvciB0aGUgY2xvc2VzdCBhbmNlc3RvciBlcnJvciBib3VuZGFyeSxcbi8vIGRlZmF1bHRpbmcgdG8gdGhlIHJvb3QgbWF0Y2hcblxuXG5mdW5jdGlvbiBmaW5kTmVhcmVzdEJvdW5kYXJ5KG1hdGNoZXMsIHJvdXRlSWQpIHtcbiAgbGV0IGVsaWdpYmxlTWF0Y2hlcyA9IHJvdXRlSWQgPyBtYXRjaGVzLnNsaWNlKDAsIG1hdGNoZXMuZmluZEluZGV4KG0gPT4gbS5yb3V0ZS5pZCA9PT0gcm91dGVJZCkgKyAxKSA6IFsuLi5tYXRjaGVzXTtcbiAgcmV0dXJuIGVsaWdpYmxlTWF0Y2hlcy5yZXZlcnNlKCkuZmluZChtID0+IG0ucm91dGUuaGFzRXJyb3JCb3VuZGFyeSA9PT0gdHJ1ZSkgfHwgbWF0Y2hlc1swXTtcbn1cblxuZnVuY3Rpb24gZ2V0U2hvcnRDaXJjdWl0TWF0Y2hlcyhyb3V0ZXMsIHN0YXR1cywgc3RhdHVzVGV4dCkge1xuICAvLyBQcmVmZXIgYSByb290IGxheW91dCByb3V0ZSBpZiBwcmVzZW50LCBvdGhlcndpc2Ugc2hpbSBpbiBhIHJvdXRlIG9iamVjdFxuICBsZXQgcm91dGUgPSByb3V0ZXMuZmluZChyID0+IHIuaW5kZXggfHwgIXIucGF0aCB8fCByLnBhdGggPT09IFwiL1wiKSB8fCB7XG4gICAgaWQ6IFwiX19zaGltLVwiICsgc3RhdHVzICsgXCItcm91dGVfX1wiXG4gIH07XG4gIHJldHVybiB7XG4gICAgbWF0Y2hlczogW3tcbiAgICAgIHBhcmFtczoge30sXG4gICAgICBwYXRobmFtZTogXCJcIixcbiAgICAgIHBhdGhuYW1lQmFzZTogXCJcIixcbiAgICAgIHJvdXRlXG4gICAgfV0sXG4gICAgcm91dGUsXG4gICAgZXJyb3I6IG5ldyBFcnJvclJlc3BvbnNlKHN0YXR1cywgc3RhdHVzVGV4dCwgbnVsbClcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Tm90Rm91bmRNYXRjaGVzKHJvdXRlcykge1xuICByZXR1cm4gZ2V0U2hvcnRDaXJjdWl0TWF0Y2hlcyhyb3V0ZXMsIDQwNCwgXCJOb3QgRm91bmRcIik7XG59XG5cbmZ1bmN0aW9uIGdldE1ldGhvZE5vdEFsbG93ZWRNYXRjaGVzKHJvdXRlcykge1xuICByZXR1cm4gZ2V0U2hvcnRDaXJjdWl0TWF0Y2hlcyhyb3V0ZXMsIDQwNSwgXCJNZXRob2QgTm90IEFsbG93ZWRcIik7XG59XG5cbmZ1bmN0aW9uIGdldE1ldGhvZE5vdEFsbG93ZWRSZXN1bHQocGF0aCkge1xuICBsZXQgaHJlZiA9IHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiID8gcGF0aCA6IGNyZWF0ZVBhdGgocGF0aCk7XG4gIGNvbnNvbGUud2FybihcIllvdSdyZSB0cnlpbmcgdG8gc3VibWl0IHRvIGEgcm91dGUgdGhhdCBkb2VzIG5vdCBoYXZlIGFuIGFjdGlvbi4gIFRvIFwiICsgXCJmaXggdGhpcywgcGxlYXNlIGFkZCBhbiBgYWN0aW9uYCBmdW5jdGlvbiB0byB0aGUgcm91dGUgZm9yIFwiICsgKFwiW1wiICsgaHJlZiArIFwiXVwiKSk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogUmVzdWx0VHlwZS5lcnJvcixcbiAgICBlcnJvcjogbmV3IEVycm9yUmVzcG9uc2UoNDA1LCBcIk1ldGhvZCBOb3QgQWxsb3dlZFwiLCBcIlwiKVxuICB9O1xufSAvLyBGaW5kIGFueSByZXR1cm5lZCByZWRpcmVjdCBlcnJvcnMsIHN0YXJ0aW5nIGZyb20gdGhlIGxvd2VzdCBtYXRjaFxuXG5cbmZ1bmN0aW9uIGZpbmRSZWRpcmVjdChyZXN1bHRzKSB7XG4gIGZvciAobGV0IGkgPSByZXN1bHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgbGV0IHJlc3VsdCA9IHJlc3VsdHNbaV07XG5cbiAgICBpZiAoaXNSZWRpcmVjdFJlc3VsdChyZXN1bHQpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJpcEhhc2hGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXJzZWRQYXRoID0gdHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIgPyBwYXJzZVBhdGgocGF0aCkgOiBwYXRoO1xuICByZXR1cm4gY3JlYXRlUGF0aChfZXh0ZW5kcyh7fSwgcGFyc2VkUGF0aCwge1xuICAgIGhhc2g6IFwiXCJcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBpc0hhc2hDaGFuZ2VPbmx5KGEsIGIpIHtcbiAgcmV0dXJuIGEucGF0aG5hbWUgPT09IGIucGF0aG5hbWUgJiYgYS5zZWFyY2ggPT09IGIuc2VhcmNoICYmIGEuaGFzaCAhPT0gYi5oYXNoO1xufVxuXG5mdW5jdGlvbiBpc0RlZmVycmVkUmVzdWx0KHJlc3VsdCkge1xuICByZXR1cm4gcmVzdWx0LnR5cGUgPT09IFJlc3VsdFR5cGUuZGVmZXJyZWQ7XG59XG5cbmZ1bmN0aW9uIGlzRXJyb3JSZXN1bHQocmVzdWx0KSB7XG4gIHJldHVybiByZXN1bHQudHlwZSA9PT0gUmVzdWx0VHlwZS5lcnJvcjtcbn1cblxuZnVuY3Rpb24gaXNSZWRpcmVjdFJlc3VsdChyZXN1bHQpIHtcbiAgcmV0dXJuIChyZXN1bHQgJiYgcmVzdWx0LnR5cGUpID09PSBSZXN1bHRUeXBlLnJlZGlyZWN0O1xufVxuXG5mdW5jdGlvbiBpc1JlZGlyZWN0UmVzcG9uc2UocmVzdWx0KSB7XG4gIGlmICghKHJlc3VsdCBpbnN0YW5jZW9mIFJlc3BvbnNlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCBzdGF0dXMgPSByZXN1bHQuc3RhdHVzO1xuICBsZXQgbG9jYXRpb24gPSByZXN1bHQuaGVhZGVycy5nZXQoXCJMb2NhdGlvblwiKTtcbiAgcmV0dXJuIHN0YXR1cyA+PSAzMDAgJiYgc3RhdHVzIDw9IDM5OSAmJiBsb2NhdGlvbiAhPSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc1F1ZXJ5Um91dGVSZXNwb25zZShvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmoucmVzcG9uc2UgaW5zdGFuY2VvZiBSZXNwb25zZSAmJiAob2JqLnR5cGUgPT09IFJlc3VsdFR5cGUuZGF0YSB8fCBSZXN1bHRUeXBlLmVycm9yKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZURlZmVycmVkUmVzdWx0cyhjdXJyZW50TWF0Y2hlcywgbWF0Y2hlc1RvTG9hZCwgcmVzdWx0cywgc2lnbmFsLCBpc0ZldGNoZXIsIGN1cnJlbnRMb2FkZXJEYXRhKSB7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCByZXN1bHRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGxldCByZXN1bHQgPSByZXN1bHRzW2luZGV4XTtcbiAgICBsZXQgbWF0Y2ggPSBtYXRjaGVzVG9Mb2FkW2luZGV4XTtcbiAgICBsZXQgY3VycmVudE1hdGNoID0gY3VycmVudE1hdGNoZXMuZmluZChtID0+IG0ucm91dGUuaWQgPT09IG1hdGNoLnJvdXRlLmlkKTtcbiAgICBsZXQgaXNSZXZhbGlkYXRpbmdMb2FkZXIgPSBjdXJyZW50TWF0Y2ggIT0gbnVsbCAmJiAhaXNOZXdSb3V0ZUluc3RhbmNlKGN1cnJlbnRNYXRjaCwgbWF0Y2gpICYmIChjdXJyZW50TG9hZGVyRGF0YSAmJiBjdXJyZW50TG9hZGVyRGF0YVttYXRjaC5yb3V0ZS5pZF0pICE9PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNEZWZlcnJlZFJlc3VsdChyZXN1bHQpICYmIChpc0ZldGNoZXIgfHwgaXNSZXZhbGlkYXRpbmdMb2FkZXIpKSB7XG4gICAgICAvLyBOb3RlOiB3ZSBkbyBub3QgaGF2ZSB0byB0b3VjaCBhY3RpdmVEZWZlcnJlZHMgaGVyZSBzaW5jZSB3ZSByYWNlIHRoZW1cbiAgICAgIC8vIGFnYWluc3QgdGhlIHNpZ25hbCBpbiByZXNvbHZlRGVmZXJyZWREYXRhIGFuZCB0aGV5J2xsIGdldCBhYm9ydGVkXG4gICAgICAvLyB0aGVyZSBpZiBuZWVkZWRcbiAgICAgIGF3YWl0IHJlc29sdmVEZWZlcnJlZERhdGEocmVzdWx0LCBzaWduYWwsIGlzRmV0Y2hlcikudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0c1tpbmRleF0gPSByZXN1bHQgfHwgcmVzdWx0c1tpbmRleF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlRGVmZXJyZWREYXRhKHJlc3VsdCwgc2lnbmFsLCB1bndyYXApIHtcbiAgaWYgKHVud3JhcCA9PT0gdm9pZCAwKSB7XG4gICAgdW53cmFwID0gZmFsc2U7XG4gIH1cblxuICBsZXQgYWJvcnRlZCA9IGF3YWl0IHJlc3VsdC5kZWZlcnJlZERhdGEucmVzb2x2ZURhdGEoc2lnbmFsKTtcblxuICBpZiAoYWJvcnRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh1bndyYXApIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogUmVzdWx0VHlwZS5kYXRhLFxuICAgICAgICBkYXRhOiByZXN1bHQuZGVmZXJyZWREYXRhLnVud3JhcHBlZERhdGFcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gSGFuZGxlIGFueSBUcmFja2VkUHJvbWlzZS5fZXJyb3IgdmFsdWVzIGVuY291bnRlcmVkIHdoaWxlIHVud3JhcHBpbmdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFJlc3VsdFR5cGUuZXJyb3IsXG4gICAgICAgIGVycm9yOiBlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogUmVzdWx0VHlwZS5kYXRhLFxuICAgIGRhdGE6IHJlc3VsdC5kZWZlcnJlZERhdGEuZGF0YVxuICB9O1xufVxuXG5mdW5jdGlvbiBoYXNOYWtlZEluZGV4UXVlcnkoc2VhcmNoKSB7XG4gIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKHNlYXJjaCkuZ2V0QWxsKFwiaW5kZXhcIikuc29tZSh2ID0+IHYgPT09IFwiXCIpO1xufSAvLyBOb3RlOiBUaGlzIHNob3VsZCBtYXRjaCB0aGUgZm9ybWF0IGV4cG9ydGVkIGJ5IHVzZU1hdGNoZXMsIHNvIGlmIHlvdSBjaGFuZ2Vcbi8vIHRoaXMgcGxlYXNlIGFsc28gY2hhbmdlIHRoYXQgOikgIEV2ZW50dWFsbHkgd2UnbGwgRFJZIHRoaXMgdXBcblxuXG5mdW5jdGlvbiBjcmVhdGVVc2VNYXRjaGVzTWF0Y2gobWF0Y2gsIGxvYWRlckRhdGEpIHtcbiAgbGV0IHtcbiAgICByb3V0ZSxcbiAgICBwYXRobmFtZSxcbiAgICBwYXJhbXNcbiAgfSA9IG1hdGNoO1xuICByZXR1cm4ge1xuICAgIGlkOiByb3V0ZS5pZCxcbiAgICBwYXRobmFtZSxcbiAgICBwYXJhbXMsXG4gICAgZGF0YTogbG9hZGVyRGF0YVtyb3V0ZS5pZF0sXG4gICAgaGFuZGxlOiByb3V0ZS5oYW5kbGVcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0TWF0Y2gobWF0Y2hlcywgbG9jYXRpb24pIHtcbiAgbGV0IHNlYXJjaCA9IHR5cGVvZiBsb2NhdGlvbiA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlUGF0aChsb2NhdGlvbikuc2VhcmNoIDogbG9jYXRpb24uc2VhcmNoO1xuXG4gIGlmIChtYXRjaGVzW21hdGNoZXMubGVuZ3RoIC0gMV0ucm91dGUuaW5kZXggJiYgaGFzTmFrZWRJbmRleFF1ZXJ5KHNlYXJjaCB8fCBcIlwiKSkge1xuICAgIC8vIFJldHVybiB0aGUgbGVhZiBpbmRleCByb3V0ZSB3aGVuIGluZGV4IGlzIHByZXNlbnRcbiAgICByZXR1cm4gbWF0Y2hlc1ttYXRjaGVzLmxlbmd0aCAtIDFdO1xuICB9IC8vIE90aGVyd2lzZSBncmFiIHRoZSBkZWVwZXN0IFwicGF0aCBjb250cmlidXRpbmdcIiBtYXRjaCAoaWdub3JpbmcgaW5kZXggYW5kXG4gIC8vIHBhdGhsZXNzIGxheW91dCByb3V0ZXMpXG5cblxuICBsZXQgcGF0aE1hdGNoZXMgPSBnZXRQYXRoQ29udHJpYnV0aW5nTWF0Y2hlcyhtYXRjaGVzKTtcbiAgcmV0dXJuIHBhdGhNYXRjaGVzW3BhdGhNYXRjaGVzLmxlbmd0aCAtIDFdO1xufSAvLyNlbmRyZWdpb25cblxuZXhwb3J0IHsgQWJvcnRlZERlZmVycmVkRXJyb3IsIEFjdGlvbiwgRXJyb3JSZXNwb25zZSwgSURMRV9GRVRDSEVSLCBJRExFX05BVklHQVRJT04sIGNvbnZlcnRSb3V0ZXNUb0RhdGFSb3V0ZXMgYXMgVU5TQUZFX2NvbnZlcnRSb3V0ZXNUb0RhdGFSb3V0ZXMsIGdldFBhdGhDb250cmlidXRpbmdNYXRjaGVzIGFzIFVOU0FGRV9nZXRQYXRoQ29udHJpYnV0aW5nTWF0Y2hlcywgY3JlYXRlQnJvd3Nlckhpc3RvcnksIGNyZWF0ZUhhc2hIaXN0b3J5LCBjcmVhdGVNZW1vcnlIaXN0b3J5LCBjcmVhdGVQYXRoLCBjcmVhdGVSb3V0ZXIsIGRlZmVyLCBnZW5lcmF0ZVBhdGgsIGdldFN0YXRpY0NvbnRleHRGcm9tRXJyb3IsIGdldFRvUGF0aG5hbWUsIGludmFyaWFudCwgaXNSb3V0ZUVycm9yUmVzcG9uc2UsIGpvaW5QYXRocywganNvbiwgbWF0Y2hQYXRoLCBtYXRjaFJvdXRlcywgbm9ybWFsaXplUGF0aG5hbWUsIHBhcnNlUGF0aCwgcmVkaXJlY3QsIHJlc29sdmVQYXRoLCByZXNvbHZlVG8sIHN0cmlwQmFzZW5hbWUsIHVuc3RhYmxlX2NyZWF0ZVN0YXRpY0hhbmRsZXIsIHdhcm5pbmcgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJvdXRlci5qcy5tYXBcbiIsIi8qIVxuXHRhdXRvc2l6ZSA0LjAuNFxuXHRsaWNlbnNlOiBNSVRcblx0aHR0cDovL3d3dy5qYWNrbG1vb3JlLmNvbS9hdXRvc2l6ZVxuKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdGRlZmluZShbJ21vZHVsZScsICdleHBvcnRzJ10sIGZhY3RvcnkpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0ZmFjdG9yeShtb2R1bGUsIGV4cG9ydHMpO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBtb2QgPSB7XG5cdFx0XHRleHBvcnRzOiB7fVxuXHRcdH07XG5cdFx0ZmFjdG9yeShtb2QsIG1vZC5leHBvcnRzKTtcblx0XHRnbG9iYWwuYXV0b3NpemUgPSBtb2QuZXhwb3J0cztcblx0fVxufSkodGhpcywgZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cykge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIG1hcCA9IHR5cGVvZiBNYXAgPT09IFwiZnVuY3Rpb25cIiA/IG5ldyBNYXAoKSA6IGZ1bmN0aW9uICgpIHtcblx0XHR2YXIga2V5cyA9IFtdO1xuXHRcdHZhciB2YWx1ZXMgPSBbXTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcblx0XHRcdFx0cmV0dXJuIGtleXMuaW5kZXhPZihrZXkpID4gLTE7XG5cdFx0XHR9LFxuXHRcdFx0Z2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZXNba2V5cy5pbmRleE9mKGtleSldO1xuXHRcdFx0fSxcblx0XHRcdHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcblx0XHRcdFx0aWYgKGtleXMuaW5kZXhPZihrZXkpID09PSAtMSkge1xuXHRcdFx0XHRcdGtleXMucHVzaChrZXkpO1xuXHRcdFx0XHRcdHZhbHVlcy5wdXNoKHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlbGV0ZTogZnVuY3Rpb24gX2RlbGV0ZShrZXkpIHtcblx0XHRcdFx0dmFyIGluZGV4ID0ga2V5cy5pbmRleE9mKGtleSk7XG5cdFx0XHRcdGlmIChpbmRleCA+IC0xKSB7XG5cdFx0XHRcdFx0a2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRcdHZhbHVlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fSgpO1xuXG5cdHZhciBjcmVhdGVFdmVudCA9IGZ1bmN0aW9uIGNyZWF0ZUV2ZW50KG5hbWUpIHtcblx0XHRyZXR1cm4gbmV3IEV2ZW50KG5hbWUsIHsgYnViYmxlczogdHJ1ZSB9KTtcblx0fTtcblx0dHJ5IHtcblx0XHRuZXcgRXZlbnQoJ3Rlc3QnKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIElFIGRvZXMgbm90IHN1cHBvcnQgYG5ldyBFdmVudCgpYFxuXHRcdGNyZWF0ZUV2ZW50ID0gZnVuY3Rpb24gY3JlYXRlRXZlbnQobmFtZSkge1xuXHRcdFx0dmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuXHRcdFx0ZXZ0LmluaXRFdmVudChuYW1lLCB0cnVlLCBmYWxzZSk7XG5cdFx0XHRyZXR1cm4gZXZ0O1xuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBhc3NpZ24odGEpIHtcblx0XHRpZiAoIXRhIHx8ICF0YS5ub2RlTmFtZSB8fCB0YS5ub2RlTmFtZSAhPT0gJ1RFWFRBUkVBJyB8fCBtYXAuaGFzKHRhKSkgcmV0dXJuO1xuXG5cdFx0dmFyIGhlaWdodE9mZnNldCA9IG51bGw7XG5cdFx0dmFyIGNsaWVudFdpZHRoID0gbnVsbDtcblx0XHR2YXIgY2FjaGVkSGVpZ2h0ID0gbnVsbDtcblxuXHRcdGZ1bmN0aW9uIGluaXQoKSB7XG5cdFx0XHR2YXIgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0YSwgbnVsbCk7XG5cblx0XHRcdGlmIChzdHlsZS5yZXNpemUgPT09ICd2ZXJ0aWNhbCcpIHtcblx0XHRcdFx0dGEuc3R5bGUucmVzaXplID0gJ25vbmUnO1xuXHRcdFx0fSBlbHNlIGlmIChzdHlsZS5yZXNpemUgPT09ICdib3RoJykge1xuXHRcdFx0XHR0YS5zdHlsZS5yZXNpemUgPSAnaG9yaXpvbnRhbCc7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzdHlsZS5ib3hTaXppbmcgPT09ICdjb250ZW50LWJveCcpIHtcblx0XHRcdFx0aGVpZ2h0T2Zmc2V0ID0gLShwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdUb3ApICsgcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nQm90dG9tKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoZWlnaHRPZmZzZXQgPSBwYXJzZUZsb2F0KHN0eWxlLmJvcmRlclRvcFdpZHRoKSArIHBhcnNlRmxvYXQoc3R5bGUuYm9yZGVyQm90dG9tV2lkdGgpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gRml4IHdoZW4gYSB0ZXh0YXJlYSBpcyBub3Qgb24gZG9jdW1lbnQgYm9keSBhbmQgaGVpZ2h0T2Zmc2V0IGlzIE5vdCBhIE51bWJlclxuXHRcdFx0aWYgKGlzTmFOKGhlaWdodE9mZnNldCkpIHtcblx0XHRcdFx0aGVpZ2h0T2Zmc2V0ID0gMDtcblx0XHRcdH1cblxuXHRcdFx0dXBkYXRlKCk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gY2hhbmdlT3ZlcmZsb3codmFsdWUpIHtcblx0XHRcdHtcblx0XHRcdFx0Ly8gQ2hyb21lL1NhZmFyaS1zcGVjaWZpYyBmaXg6XG5cdFx0XHRcdC8vIFdoZW4gdGhlIHRleHRhcmVhIHktb3ZlcmZsb3cgaXMgaGlkZGVuLCBDaHJvbWUvU2FmYXJpIGRvIG5vdCByZWZsb3cgdGhlIHRleHQgdG8gYWNjb3VudCBmb3IgdGhlIHNwYWNlXG5cdFx0XHRcdC8vIG1hZGUgYXZhaWxhYmxlIGJ5IHJlbW92aW5nIHRoZSBzY3JvbGxiYXIuIFRoZSBmb2xsb3dpbmcgZm9yY2VzIHRoZSBuZWNlc3NhcnkgdGV4dCByZWZsb3cuXG5cdFx0XHRcdHZhciB3aWR0aCA9IHRhLnN0eWxlLndpZHRoO1xuXHRcdFx0XHR0YS5zdHlsZS53aWR0aCA9ICcwcHgnO1xuXHRcdFx0XHQvLyBGb3JjZSByZWZsb3c6XG5cdFx0XHRcdC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cblx0XHRcdFx0dGEub2Zmc2V0V2lkdGg7XG5cdFx0XHRcdC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cdFx0XHRcdHRhLnN0eWxlLndpZHRoID0gd2lkdGg7XG5cdFx0XHR9XG5cblx0XHRcdHRhLnN0eWxlLm92ZXJmbG93WSA9IHZhbHVlO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldFBhcmVudE92ZXJmbG93cyhlbCkge1xuXHRcdFx0dmFyIGFyciA9IFtdO1xuXG5cdFx0XHR3aGlsZSAoZWwgJiYgZWwucGFyZW50Tm9kZSAmJiBlbC5wYXJlbnROb2RlIGluc3RhbmNlb2YgRWxlbWVudCkge1xuXHRcdFx0XHRpZiAoZWwucGFyZW50Tm9kZS5zY3JvbGxUb3ApIHtcblx0XHRcdFx0XHRhcnIucHVzaCh7XG5cdFx0XHRcdFx0XHRub2RlOiBlbC5wYXJlbnROb2RlLFxuXHRcdFx0XHRcdFx0c2Nyb2xsVG9wOiBlbC5wYXJlbnROb2RlLnNjcm9sbFRvcFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsID0gZWwucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGFycjtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiByZXNpemUoKSB7XG5cdFx0XHRpZiAodGEuc2Nyb2xsSGVpZ2h0ID09PSAwKSB7XG5cdFx0XHRcdC8vIElmIHRoZSBzY3JvbGxIZWlnaHQgaXMgMCwgdGhlbiB0aGUgZWxlbWVudCBwcm9iYWJseSBoYXMgZGlzcGxheTpub25lIG9yIGlzIGRldGFjaGVkIGZyb20gdGhlIERPTS5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgb3ZlcmZsb3dzID0gZ2V0UGFyZW50T3ZlcmZsb3dzKHRhKTtcblx0XHRcdHZhciBkb2NUb3AgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDsgLy8gTmVlZGVkIGZvciBNb2JpbGUgSUUgKHRpY2tldCAjMjQwKVxuXG5cdFx0XHR0YS5zdHlsZS5oZWlnaHQgPSAnJztcblx0XHRcdHRhLnN0eWxlLmhlaWdodCA9IHRhLnNjcm9sbEhlaWdodCArIGhlaWdodE9mZnNldCArICdweCc7XG5cblx0XHRcdC8vIHVzZWQgdG8gY2hlY2sgaWYgYW4gdXBkYXRlIGlzIGFjdHVhbGx5IG5lY2Vzc2FyeSBvbiB3aW5kb3cucmVzaXplXG5cdFx0XHRjbGllbnRXaWR0aCA9IHRhLmNsaWVudFdpZHRoO1xuXG5cdFx0XHQvLyBwcmV2ZW50cyBzY3JvbGwtcG9zaXRpb24ganVtcGluZ1xuXHRcdFx0b3ZlcmZsb3dzLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7XG5cdFx0XHRcdGVsLm5vZGUuc2Nyb2xsVG9wID0gZWwuc2Nyb2xsVG9wO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChkb2NUb3ApIHtcblx0XHRcdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA9IGRvY1RvcDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmdW5jdGlvbiB1cGRhdGUoKSB7XG5cdFx0XHRyZXNpemUoKTtcblxuXHRcdFx0dmFyIHN0eWxlSGVpZ2h0ID0gTWF0aC5yb3VuZChwYXJzZUZsb2F0KHRhLnN0eWxlLmhlaWdodCkpO1xuXHRcdFx0dmFyIGNvbXB1dGVkID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGEsIG51bGwpO1xuXG5cdFx0XHQvLyBVc2luZyBvZmZzZXRIZWlnaHQgYXMgYSByZXBsYWNlbWVudCBmb3IgY29tcHV0ZWQuaGVpZ2h0IGluIElFLCBiZWNhdXNlIElFIGRvZXMgbm90IGFjY291bnQgdXNlIG9mIGJvcmRlci1ib3hcblx0XHRcdHZhciBhY3R1YWxIZWlnaHQgPSBjb21wdXRlZC5ib3hTaXppbmcgPT09ICdjb250ZW50LWJveCcgPyBNYXRoLnJvdW5kKHBhcnNlRmxvYXQoY29tcHV0ZWQuaGVpZ2h0KSkgOiB0YS5vZmZzZXRIZWlnaHQ7XG5cblx0XHRcdC8vIFRoZSBhY3R1YWwgaGVpZ2h0IG5vdCBtYXRjaGluZyB0aGUgc3R5bGUgaGVpZ2h0IChzZXQgdmlhIHRoZSByZXNpemUgbWV0aG9kKSBpbmRpY2F0ZXMgdGhhdCBcblx0XHRcdC8vIHRoZSBtYXgtaGVpZ2h0IGhhcyBiZWVuIGV4Y2VlZGVkLCBpbiB3aGljaCBjYXNlIHRoZSBvdmVyZmxvdyBzaG91bGQgYmUgYWxsb3dlZC5cblx0XHRcdGlmIChhY3R1YWxIZWlnaHQgPCBzdHlsZUhlaWdodCkge1xuXHRcdFx0XHRpZiAoY29tcHV0ZWQub3ZlcmZsb3dZID09PSAnaGlkZGVuJykge1xuXHRcdFx0XHRcdGNoYW5nZU92ZXJmbG93KCdzY3JvbGwnKTtcblx0XHRcdFx0XHRyZXNpemUoKTtcblx0XHRcdFx0XHRhY3R1YWxIZWlnaHQgPSBjb21wdXRlZC5ib3hTaXppbmcgPT09ICdjb250ZW50LWJveCcgPyBNYXRoLnJvdW5kKHBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUodGEsIG51bGwpLmhlaWdodCkpIDogdGEub2Zmc2V0SGVpZ2h0O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBOb3JtYWxseSBrZWVwIG92ZXJmbG93IHNldCB0byBoaWRkZW4sIHRvIGF2b2lkIGZsYXNoIG9mIHNjcm9sbGJhciBhcyB0aGUgdGV4dGFyZWEgZXhwYW5kcy5cblx0XHRcdFx0aWYgKGNvbXB1dGVkLm92ZXJmbG93WSAhPT0gJ2hpZGRlbicpIHtcblx0XHRcdFx0XHRjaGFuZ2VPdmVyZmxvdygnaGlkZGVuJyk7XG5cdFx0XHRcdFx0cmVzaXplKCk7XG5cdFx0XHRcdFx0YWN0dWFsSGVpZ2h0ID0gY29tcHV0ZWQuYm94U2l6aW5nID09PSAnY29udGVudC1ib3gnID8gTWF0aC5yb3VuZChwYXJzZUZsb2F0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRhLCBudWxsKS5oZWlnaHQpKSA6IHRhLm9mZnNldEhlaWdodDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY2FjaGVkSGVpZ2h0ICE9PSBhY3R1YWxIZWlnaHQpIHtcblx0XHRcdFx0Y2FjaGVkSGVpZ2h0ID0gYWN0dWFsSGVpZ2h0O1xuXHRcdFx0XHR2YXIgZXZ0ID0gY3JlYXRlRXZlbnQoJ2F1dG9zaXplOnJlc2l6ZWQnKTtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR0YS5kaXNwYXRjaEV2ZW50KGV2dCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdC8vIEZpcmVmb3ggd2lsbCB0aHJvdyBhbiBlcnJvciBvbiBkaXNwYXRjaEV2ZW50IGZvciBhIGRldGFjaGVkIGVsZW1lbnRcblx0XHRcdFx0XHQvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD04ODkzNzZcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBwYWdlUmVzaXplID0gZnVuY3Rpb24gcGFnZVJlc2l6ZSgpIHtcblx0XHRcdGlmICh0YS5jbGllbnRXaWR0aCAhPT0gY2xpZW50V2lkdGgpIHtcblx0XHRcdFx0dXBkYXRlKCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHZhciBkZXN0cm95ID0gZnVuY3Rpb24gKHN0eWxlKSB7XG5cdFx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgcGFnZVJlc2l6ZSwgZmFsc2UpO1xuXHRcdFx0dGEucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB1cGRhdGUsIGZhbHNlKTtcblx0XHRcdHRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdXBkYXRlLCBmYWxzZSk7XG5cdFx0XHR0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdhdXRvc2l6ZTpkZXN0cm95JywgZGVzdHJveSwgZmFsc2UpO1xuXHRcdFx0dGEucmVtb3ZlRXZlbnRMaXN0ZW5lcignYXV0b3NpemU6dXBkYXRlJywgdXBkYXRlLCBmYWxzZSk7XG5cblx0XHRcdE9iamVjdC5rZXlzKHN0eWxlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdFx0dGEuc3R5bGVba2V5XSA9IHN0eWxlW2tleV07XG5cdFx0XHR9KTtcblxuXHRcdFx0bWFwLmRlbGV0ZSh0YSk7XG5cdFx0fS5iaW5kKHRhLCB7XG5cdFx0XHRoZWlnaHQ6IHRhLnN0eWxlLmhlaWdodCxcblx0XHRcdHJlc2l6ZTogdGEuc3R5bGUucmVzaXplLFxuXHRcdFx0b3ZlcmZsb3dZOiB0YS5zdHlsZS5vdmVyZmxvd1ksXG5cdFx0XHRvdmVyZmxvd1g6IHRhLnN0eWxlLm92ZXJmbG93WCxcblx0XHRcdHdvcmRXcmFwOiB0YS5zdHlsZS53b3JkV3JhcFxuXHRcdH0pO1xuXG5cdFx0dGEuYWRkRXZlbnRMaXN0ZW5lcignYXV0b3NpemU6ZGVzdHJveScsIGRlc3Ryb3ksIGZhbHNlKTtcblxuXHRcdC8vIElFOSBkb2VzIG5vdCBmaXJlIG9ucHJvcGVydHljaGFuZ2Ugb3Igb25pbnB1dCBmb3IgZGVsZXRpb25zLFxuXHRcdC8vIHNvIGJpbmRpbmcgdG8gb25rZXl1cCB0byBjYXRjaCBtb3N0IG9mIHRob3NlIGV2ZW50cy5cblx0XHQvLyBUaGVyZSBpcyBubyB3YXkgdGhhdCBJIGtub3cgb2YgdG8gZGV0ZWN0IHNvbWV0aGluZyBsaWtlICdjdXQnIGluIElFOS5cblx0XHRpZiAoJ29ucHJvcGVydHljaGFuZ2UnIGluIHRhICYmICdvbmlucHV0JyBpbiB0YSkge1xuXHRcdFx0dGEuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB1cGRhdGUsIGZhbHNlKTtcblx0XHR9XG5cblx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgcGFnZVJlc2l6ZSwgZmFsc2UpO1xuXHRcdHRhLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgdXBkYXRlLCBmYWxzZSk7XG5cdFx0dGEuYWRkRXZlbnRMaXN0ZW5lcignYXV0b3NpemU6dXBkYXRlJywgdXBkYXRlLCBmYWxzZSk7XG5cdFx0dGEuc3R5bGUub3ZlcmZsb3dYID0gJ2hpZGRlbic7XG5cdFx0dGEuc3R5bGUud29yZFdyYXAgPSAnYnJlYWstd29yZCc7XG5cblx0XHRtYXAuc2V0KHRhLCB7XG5cdFx0XHRkZXN0cm95OiBkZXN0cm95LFxuXHRcdFx0dXBkYXRlOiB1cGRhdGVcblx0XHR9KTtcblxuXHRcdGluaXQoKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGRlc3Ryb3kodGEpIHtcblx0XHR2YXIgbWV0aG9kcyA9IG1hcC5nZXQodGEpO1xuXHRcdGlmIChtZXRob2RzKSB7XG5cdFx0XHRtZXRob2RzLmRlc3Ryb3koKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiB1cGRhdGUodGEpIHtcblx0XHR2YXIgbWV0aG9kcyA9IG1hcC5nZXQodGEpO1xuXHRcdGlmIChtZXRob2RzKSB7XG5cdFx0XHRtZXRob2RzLnVwZGF0ZSgpO1xuXHRcdH1cblx0fVxuXG5cdHZhciBhdXRvc2l6ZSA9IG51bGw7XG5cblx0Ly8gRG8gbm90aGluZyBpbiBOb2RlLmpzIGVudmlyb25tZW50IGFuZCBJRTggKG9yIGxvd2VyKVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0YXV0b3NpemUgPSBmdW5jdGlvbiBhdXRvc2l6ZShlbCkge1xuXHRcdFx0cmV0dXJuIGVsO1xuXHRcdH07XG5cdFx0YXV0b3NpemUuZGVzdHJveSA9IGZ1bmN0aW9uIChlbCkge1xuXHRcdFx0cmV0dXJuIGVsO1xuXHRcdH07XG5cdFx0YXV0b3NpemUudXBkYXRlID0gZnVuY3Rpb24gKGVsKSB7XG5cdFx0XHRyZXR1cm4gZWw7XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRhdXRvc2l6ZSA9IGZ1bmN0aW9uIGF1dG9zaXplKGVsLCBvcHRpb25zKSB7XG5cdFx0XHRpZiAoZWwpIHtcblx0XHRcdFx0QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlbC5sZW5ndGggPyBlbCA6IFtlbF0sIGZ1bmN0aW9uICh4KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGFzc2lnbih4LCBvcHRpb25zKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZWw7XG5cdFx0fTtcblx0XHRhdXRvc2l6ZS5kZXN0cm95ID0gZnVuY3Rpb24gKGVsKSB7XG5cdFx0XHRpZiAoZWwpIHtcblx0XHRcdFx0QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlbC5sZW5ndGggPyBlbCA6IFtlbF0sIGRlc3Ryb3kpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGVsO1xuXHRcdH07XG5cdFx0YXV0b3NpemUudXBkYXRlID0gZnVuY3Rpb24gKGVsKSB7XG5cdFx0XHRpZiAoZWwpIHtcblx0XHRcdFx0QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlbC5sZW5ndGggPyBlbCA6IFtlbF0sIHVwZGF0ZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZWw7XG5cdFx0fTtcblx0fVxuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IGF1dG9zaXplO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcbn0pOyIsIi8vIERFVjogV2UgZG9uJ3QgdXNlIHZhciBidXQgZmF2b3IgcGFyYW1ldGVycyBzaW5jZSB0aGVzZSBwbGF5IG5pY2VyIHdpdGggbWluaWZpY2F0aW9uXG5mdW5jdGlvbiBjb21wdXRlZFN0eWxlKGVsLCBwcm9wLCBnZXRDb21wdXRlZFN0eWxlLCBzdHlsZSkge1xuICBnZXRDb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGU7XG4gIHN0eWxlID1cbiAgICAgIC8vIElmIHdlIGhhdmUgZ2V0Q29tcHV0ZWRTdHlsZVxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZSA/XG4gICAgICAgIC8vIFF1ZXJ5IGl0XG4gICAgICAgIC8vIFRPRE86IEZyb20gQ1NTLVF1ZXJ5IG5vdGVzLCB3ZSBtaWdodCBuZWVkIChub2RlLCBudWxsKSBmb3IgRkZcbiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShlbCkgOlxuXG4gICAgICAvLyBPdGhlcndpc2UsIHdlIGFyZSBpbiBJRSBhbmQgdXNlIGN1cnJlbnRTdHlsZVxuICAgICAgICBlbC5jdXJyZW50U3R5bGU7XG4gIGlmIChzdHlsZSkge1xuICAgIHJldHVybiBzdHlsZVxuICAgIFtcbiAgICAgIC8vIFN3aXRjaCB0byBjYW1lbENhc2UgZm9yIENTU09NXG4gICAgICAvLyBERVY6IEdyYWJiZWQgZnJvbSBqUXVlcnlcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L2Jsb2IvMS45LXN0YWJsZS9zcmMvY3NzLmpzI0wxOTEtTDE5NFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvYmxvYi8xLjktc3RhYmxlL3NyYy9jb3JlLmpzI0w1OTMtTDU5N1xuICAgICAgcHJvcC5yZXBsYWNlKC8tKFxcdykvZ2ksIGZ1bmN0aW9uICh3b3JkLCBsZXR0ZXIpIHtcbiAgICAgICAgcmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xuICAgICAgfSlcbiAgICBdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcHV0ZWRTdHlsZTtcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9nZXRVcmwuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMF9fXyA9IG5ldyBVUkwoXCIuL2ljb25zL2Fzc2V0cy9Td2VldEljb25zLVJlZ3VsYXIuZW90XCIsIGltcG9ydC5tZXRhLnVybCk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzFfX18gPSBuZXcgVVJMKFwiLi9pY29ucy9hc3NldHMvU3dlZXRJY29ucy1SZWd1bGFyLndvZmYyXCIsIGltcG9ydC5tZXRhLnVybCk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzJfX18gPSBuZXcgVVJMKFwiLi9pY29ucy9hc3NldHMvU3dlZXRJY29ucy1SZWd1bGFyLndvZmZcIiwgaW1wb3J0Lm1ldGEudXJsKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfM19fXyA9IG5ldyBVUkwoXCIuL2ljb25zL2Fzc2V0cy9Td2VldEljb25zLVJlZ3VsYXIudHRmXCIsIGltcG9ydC5tZXRhLnVybCk7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiQGltcG9ydCB1cmwoaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PVVidW50dSk7XCJdKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMF9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMV9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzFfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzJfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8yX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8zX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfM19fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCJAY2hhcnNldCBcXFwiVVRGLThcXFwiO1xcbkBmb250LWZhY2Uge1xcbiAgZm9udC1mYW1pbHk6IHN3ZWV0aWNvbnM7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgc3JjOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fICsgXCIpO1xcbiAgc3JjOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fICsgXCIpIGZvcm1hdChcXFwid29mZjJcXFwiKSwgdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMl9fXyArIFwiKSBmb3JtYXQoXFxcIndvZmZcXFwiKSwgdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfM19fXyArIFwiKSBmb3JtYXQoXFxcInRydWV0eXBlXFxcIik7XFxufVxcbi5zLWljb24sXFxuLnMtaWNvbnMsXFxuLnN3ZWV0LWljb25zLFxcbi5zd2VldC1pY29uIHtcXG4gIGZvbnQtZmFtaWx5OiBzd2VldGljb25zLCBzYW5zLXNlcmlmO1xcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIGZvbnQtc2l6ZTogMjhweDtcXG4gIGxpbmUtaGVpZ2h0OiAxO1xcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIHdvcmQtd3JhcDogbm9ybWFsO1xcbiAgZGlyZWN0aW9uOiBsdHI7XFxuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcXG4gIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XFxuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xcbiAgLXdlYmtpdC1mb250LWZlYXR1cmUtc2V0dGluZ3M6IFxcXCJsaWdhXFxcIjtcXG4gIC1tb3otZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcXFwibGlnYT0xXFxcIjtcXG4gIC1tb3otZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcXFwibGlnYVxcXCI7XFxuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IFxcXCJsaWdhXFxcIjtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLndlYm8ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNjJkNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby10ZXh0IHtcXG4gIGNvbG9yOiAjMDA2MmQ2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNjJkNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby5zZWNvbmQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNzdGQSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby10ZXh0LnRleHQtc2Vjb25kIHtcXG4gIGNvbG9yOiAjMDA3N0ZBICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXdhdmVzLndhdmVzLXNlY29uZCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDc3RkEgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8udGhpcmQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzA5YmRkZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby10ZXh0LnRleHQtdGhpcmQge1xcbiAgY29sb3I6ICMwOWJkZGQgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8td2F2ZXMud2F2ZXMtdGhpcmQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDliZGRkICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLmZvdXJ0aCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2JlN2ZlICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXRleHQudGV4dC1mb3VydGgge1xcbiAgY29sb3I6ICNjYmU3ZmUgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8td2F2ZXMud2F2ZXMtZm91cnRoIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NiZTdmZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JiZGVmYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjYmJkZWZiICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiYmRlZmIgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8ubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0MmE1ZjUgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8tdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogIzQyYTVmNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby13YXZlcy53YXZlcy1saWdodGVuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDJhNWY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzk4NmNiICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICM3OTg2Y2IgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8td2F2ZXMud2F2ZXMtbGlnaHRlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc5ODZjYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzUxMmRhOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjNTEyZGE4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1MTJkYTggIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8ubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyODM1OTMgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8tdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogIzI4MzU5MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby13YXZlcy53YXZlcy1saWdodGVuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjgzNTkzICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkMDE4MWUgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8tdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjZDAxODFlICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXdhdmVzLndhdmVzLWRhcmtlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QwMTgxZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjkxNTFiICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogI2I5MTUxYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby13YXZlcy53YXZlcy1kYXJrZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiOTE1MWIgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8uZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2EyMTMxOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICNhMjEzMTggIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8td2F2ZXMud2F2ZXMtZGFya2VuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTIxMzE4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLmItIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0OWNlNWYgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8tdGV4dC50ZXh0LWItIHtcXG4gIGNvbG9yOiAjNDljZTVmICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXdhdmVzLndhdmVzLWItIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ5Y2U1ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGIxMDE0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogIzhiMTAxNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby13YXZlcy53YXZlcy1kYXJrZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4YjEwMTQgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjQ0MzM2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtdGV4dCB7XFxuICBjb2xvcjogI2Y0NDMzNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y0NDMzNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlYmVlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2ZmZWJlZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmViZWUgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmY2RkMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNmZmNkZDIgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC13YXZlcy53YXZlcy1saWdodGVuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjZGQyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZjlhOWEgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjZWY5YTlhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtd2F2ZXMud2F2ZXMtbGlnaHRlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VmOWE5YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTU3MzczICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogI2U1NzM3MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNTczNzMgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VmNTM1MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICNlZjUzNTAgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC13YXZlcy53YXZlcy1saWdodGVuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWY1MzUwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQuZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U1MzkzNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogI2U1MzkzNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXdhdmVzLndhdmVzLWRhcmtlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U1MzkzNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkMzJmMmYgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICNkMzJmMmYgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC13YXZlcy53YXZlcy1kYXJrZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkMzJmMmYgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzYyODI4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjYzYyODI4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtd2F2ZXMud2F2ZXMtZGFya2VuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzYyODI4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQuZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2I3MWMxYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogI2I3MWMxYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2I3MWMxYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjhhODAgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC10ZXh0LnRleHQtYWNjZW50LTEge1xcbiAgY29sb3I6ICNmZjhhODAgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC13YXZlcy53YXZlcy1hY2NlbnQtMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjhhODAgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY1MjUyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtdGV4dC50ZXh0LWFjY2VudC0yIHtcXG4gIGNvbG9yOiAjZmY1MjUyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtd2F2ZXMud2F2ZXMtYWNjZW50LTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY1MjUyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQuYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmMTc0NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXRleHQudGV4dC1hY2NlbnQtMyB7XFxuICBjb2xvcjogI2ZmMTc0NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXdhdmVzLndhdmVzLWFjY2VudC0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmMTc0NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkNTAwMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC10ZXh0LnRleHQtYWNjZW50LTQge1xcbiAgY29sb3I6ICNkNTAwMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC13YXZlcy53YXZlcy1hY2NlbnQtNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkNTAwMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmsge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5MWU2MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay10ZXh0IHtcXG4gIGNvbG9yOiAjZTkxZTYzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5MWU2MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZTRlYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZmNlNGVjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2U0ZWMgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmsubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGJiZDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2Y4YmJkMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay13YXZlcy53YXZlcy1saWdodGVuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhiYmQwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjQ4ZmIxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICNmNDhmYjEgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstd2F2ZXMud2F2ZXMtbGlnaHRlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y0OGZiMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwNjI5MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjZjA2MjkyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMDYyOTIgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmsubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlYzQwN2EgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogI2VjNDA3YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay13YXZlcy53YXZlcy1saWdodGVuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWM0MDdhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkODFiNjAgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjZDgxYjYwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXdhdmVzLndhdmVzLWRhcmtlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q4MWI2MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzIxODViICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogI2MyMTg1YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay13YXZlcy53YXZlcy1kYXJrZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjMjE4NWIgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmsuZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FkMTQ1NyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICNhZDE0NTcgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstd2F2ZXMud2F2ZXMtZGFya2VuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWQxNDU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4ODBlNGYgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjODgwZTRmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzg4MGU0ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay5hY2NlbnQtMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY4MGFiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXRleHQudGV4dC1hY2NlbnQtMSB7XFxuICBjb2xvcjogI2ZmODBhYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay13YXZlcy53YXZlcy1hY2NlbnQtMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjgwYWIgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmsuYWNjZW50LTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNDA4MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay10ZXh0LnRleHQtYWNjZW50LTIge1xcbiAgY29sb3I6ICNmZjQwODEgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstd2F2ZXMud2F2ZXMtYWNjZW50LTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY0MDgxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLmFjY2VudC0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNTAwNTcgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstdGV4dC50ZXh0LWFjY2VudC0zIHtcXG4gIGNvbG9yOiAjZjUwMDU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXdhdmVzLndhdmVzLWFjY2VudC0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1MDA1NyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay5hY2NlbnQtNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzUxMTYyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXRleHQudGV4dC1hY2NlbnQtNCB7XFxuICBjb2xvcjogI2M1MTE2MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay13YXZlcy53YXZlcy1hY2NlbnQtNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjNTExNjIgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWMyN2IwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtdGV4dCB7XFxuICBjb2xvcjogIzljMjdiMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzljMjdiMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNlNWY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2YzZTVmNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmM2U1ZjUgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UxYmVlNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNlMWJlZTcgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS13YXZlcy53YXZlcy1saWdodGVuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTFiZWU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjZTkzZDggIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjY2U5M2Q4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtd2F2ZXMud2F2ZXMtbGlnaHRlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NlOTNkOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmE2OGM4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogI2JhNjhjOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiYTY4YzggIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FiNDdiYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICNhYjQ3YmMgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS13YXZlcy53YXZlcy1saWdodGVuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWI0N2JjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUuZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzhlMjRhYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogIzhlMjRhYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXdhdmVzLndhdmVzLWRhcmtlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzhlMjRhYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3YjFmYTIgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICM3YjFmYTIgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS13YXZlcy53YXZlcy1kYXJrZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3YjFmYTIgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmExYjlhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjNmExYjlhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtd2F2ZXMud2F2ZXMtZGFya2VuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmExYjlhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUuZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRhMTQ4YyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogIzRhMTQ4YyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRhMTQ4YyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlYTgwZmMgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS10ZXh0LnRleHQtYWNjZW50LTEge1xcbiAgY29sb3I6ICNlYTgwZmMgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS13YXZlcy53YXZlcy1hY2NlbnQtMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlYTgwZmMgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTA0MGZiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtdGV4dC50ZXh0LWFjY2VudC0yIHtcXG4gIGNvbG9yOiAjZTA0MGZiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtd2F2ZXMud2F2ZXMtYWNjZW50LTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTA0MGZiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUuYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q1MDBmOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXRleHQudGV4dC1hY2NlbnQtMyB7XFxuICBjb2xvcjogI2Q1MDBmOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXdhdmVzLndhdmVzLWFjY2VudC0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q1MDBmOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhYTAwZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS10ZXh0LnRleHQtYWNjZW50LTQge1xcbiAgY29sb3I6ICNhYTAwZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS13YXZlcy53YXZlcy1hY2NlbnQtNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhYTAwZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2NzNhYjcgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXRleHQge1xcbiAgY29sb3I6ICM2NzNhYjcgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY3M2FiNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZGU3ZjYgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNlZGU3ZjYgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZGU3ZjYgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDFjNGU5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjZDFjNGU5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS13YXZlcy53YXZlcy1saWdodGVuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDFjNGU5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IzOWRkYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogI2IzOWRkYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtd2F2ZXMud2F2ZXMtbGlnaHRlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IzOWRkYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5NTc1Y2QgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICM5NTc1Y2QgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5NTc1Y2QgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjN2U1N2MyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjN2U1N2MyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS13YXZlcy53YXZlcy1saWdodGVuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjN2U1N2MyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWUzNWIxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICM1ZTM1YjEgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXdhdmVzLndhdmVzLWRhcmtlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVlMzViMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUuZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzUxMmRhOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjNTEyZGE4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS13YXZlcy53YXZlcy1kYXJrZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1MTJkYTggIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0NTI3YTAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogIzQ1MjdhMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtd2F2ZXMud2F2ZXMtZGFya2VuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDUyN2EwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzExYjkyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICMzMTFiOTIgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMxMWI5MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUuYWNjZW50LTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IzODhmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjYjM4OGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS13YXZlcy53YXZlcy1hY2NlbnQtMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMzg4ZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLmFjY2VudC0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3YzRkZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogIzdjNGRmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtd2F2ZXMud2F2ZXMtYWNjZW50LTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjN2M0ZGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS5hY2NlbnQtMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjUxZmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICM2NTFmZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXdhdmVzLndhdmVzLWFjY2VudC0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY1MWZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUuYWNjZW50LTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzYyMDBlYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjNjIwMGVhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS13YXZlcy53YXZlcy1hY2NlbnQtNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2MjAwZWEgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnbyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2Y1MWI1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28tdGV4dCB7XFxuICBjb2xvcjogIzNmNTFiNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzNmNTFiNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZThlYWY2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28tdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2U4ZWFmNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOGVhZjYgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M1Y2FlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNjNWNhZTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby13YXZlcy53YXZlcy1saWdodGVuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzVjYWU5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28ubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5ZmE4ZGEgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjOWZhOGRhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28td2F2ZXMud2F2ZXMtbGlnaHRlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzlmYThkYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzk4NmNiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28tdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogIzc5ODZjYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3OTg2Y2IgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVjNmJjMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICM1YzZiYzAgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby13YXZlcy53YXZlcy1saWdodGVuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWM2YmMwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28uZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM5NDlhYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogIzM5NDlhYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXdhdmVzLndhdmVzLWRhcmtlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM5NDlhYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzMDNmOWYgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICMzMDNmOWYgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby13YXZlcy53YXZlcy1kYXJrZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzMDNmOWYgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjgzNTkzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28tdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjMjgzNTkzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28td2F2ZXMud2F2ZXMtZGFya2VuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjgzNTkzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28uZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFhMjM3ZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogIzFhMjM3ZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFhMjM3ZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4YzllZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby10ZXh0LnRleHQtYWNjZW50LTEge1xcbiAgY29sb3I6ICM4YzllZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby13YXZlcy53YXZlcy1hY2NlbnQtMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4YzllZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTM2ZGZlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28tdGV4dC50ZXh0LWFjY2VudC0yIHtcXG4gIGNvbG9yOiAjNTM2ZGZlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28td2F2ZXMud2F2ZXMtYWNjZW50LTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTM2ZGZlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28uYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzNkNWFmZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXRleHQudGV4dC1hY2NlbnQtMyB7XFxuICBjb2xvcjogIzNkNWFmZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXdhdmVzLndhdmVzLWFjY2VudC0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzNkNWFmZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzMDRmZmUgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby10ZXh0LnRleHQtYWNjZW50LTQge1xcbiAgY29sb3I6ICMzMDRmZmUgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby13YXZlcy53YXZlcy1hY2NlbnQtNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzMDRmZmUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIxOTZmMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS10ZXh0IHtcXG4gIGNvbG9yOiAjMjE5NmYzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIxOTZmMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UzZjJmZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZTNmMmZkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlM2YyZmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiYmRlZmIgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2JiZGVmYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS13YXZlcy53YXZlcy1saWdodGVuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmJkZWZiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTBjYWY5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICM5MGNhZjkgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtd2F2ZXMud2F2ZXMtbGlnaHRlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzkwY2FmOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY0YjVmNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjNjRiNWY2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2NGI1ZjYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0MmE1ZjUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogIzQyYTVmNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS13YXZlcy53YXZlcy1saWdodGVuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDJhNWY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxZTg4ZTUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjMWU4OGU1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXdhdmVzLndhdmVzLWRhcmtlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFlODhlNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTk3NmQyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogIzE5NzZkMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS13YXZlcy53YXZlcy1kYXJrZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxOTc2ZDIgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUuZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE1NjVjMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICMxNTY1YzAgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtd2F2ZXMud2F2ZXMtZGFya2VuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTU2NWMwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwZDQ3YTEgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjMGQ0N2ExICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzBkNDdhMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS5hY2NlbnQtMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODJiMWZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXRleHQudGV4dC1hY2NlbnQtMSB7XFxuICBjb2xvcjogIzgyYjFmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS13YXZlcy53YXZlcy1hY2NlbnQtMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MmIxZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUuYWNjZW50LTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0OGFmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS10ZXh0LnRleHQtYWNjZW50LTIge1xcbiAgY29sb3I6ICM0NDhhZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtd2F2ZXMud2F2ZXMtYWNjZW50LTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ4YWZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLmFjY2VudC0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyOTc5ZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtdGV4dC50ZXh0LWFjY2VudC0zIHtcXG4gIGNvbG9yOiAjMjk3OWZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXdhdmVzLndhdmVzLWFjY2VudC0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI5NzlmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS5hY2NlbnQtNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjk2MmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXRleHQudGV4dC1hY2NlbnQtNCB7XFxuICBjb2xvcjogIzI5NjJmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS13YXZlcy53YXZlcy1hY2NlbnQtNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyOTYyZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAzYTlmNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS10ZXh0IHtcXG4gIGNvbG9yOiAjMDNhOWY0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAzYTlmNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UxZjVmZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZTFmNWZlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMWY1ZmUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiM2U1ZmMgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2IzZTVmYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS13YXZlcy53YXZlcy1saWdodGVuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjNlNWZjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODFkNGZhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICM4MWQ0ZmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtd2F2ZXMud2F2ZXMtbGlnaHRlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgxZDRmYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRmYzNmNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjNGZjM2Y3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0ZmMzZjcgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyOWI2ZjYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogIzI5YjZmNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS13YXZlcy53YXZlcy1saWdodGVuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjliNmY2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMzliZTUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjMDM5YmU1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXdhdmVzLndhdmVzLWRhcmtlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAzOWJlNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDI4OGQxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogIzAyODhkMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS13YXZlcy53YXZlcy1kYXJrZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMjg4ZDEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUuZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAyNzdiZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICMwMjc3YmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtd2F2ZXMud2F2ZXMtZGFya2VuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDI3N2JkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMTU3OWIgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjMDE1NzliICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAxNTc5YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS5hY2NlbnQtMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODBkOGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXRleHQudGV4dC1hY2NlbnQtMSB7XFxuICBjb2xvcjogIzgwZDhmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS13YXZlcy53YXZlcy1hY2NlbnQtMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MGQ4ZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUuYWNjZW50LTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQwYzRmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS10ZXh0LnRleHQtYWNjZW50LTIge1xcbiAgY29sb3I6ICM0MGM0ZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtd2F2ZXMud2F2ZXMtYWNjZW50LTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDBjNGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLmFjY2VudC0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGIwZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtdGV4dC50ZXh0LWFjY2VudC0zIHtcXG4gIGNvbG9yOiAjMDBiMGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXdhdmVzLndhdmVzLWFjY2VudC0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYjBmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS5hY2NlbnQtNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA5MWVhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXRleHQudGV4dC1hY2NlbnQtNCB7XFxuICBjb2xvcjogIzAwOTFlYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS13YXZlcy53YXZlcy1hY2NlbnQtNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDkxZWEgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYmNkNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi10ZXh0IHtcXG4gIGNvbG9yOiAjMDBiY2Q0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYmNkNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UwZjdmYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZTBmN2ZhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMGY3ZmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4ubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMmViZjIgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4tdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2IyZWJmMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi13YXZlcy53YXZlcy1saWdodGVuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjJlYmYyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODBkZWVhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICM4MGRlZWEgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4td2F2ZXMud2F2ZXMtbGlnaHRlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgwZGVlYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRkZDBlMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjNGRkMGUxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0ZGQwZTEgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4ubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmM2ZGEgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4tdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogIzI2YzZkYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi13YXZlcy53YXZlcy1saWdodGVuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZjNmRhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGFjYzEgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4tdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjMDBhY2MxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXdhdmVzLndhdmVzLWRhcmtlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYWNjMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA5N2E3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogIzAwOTdhNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi13YXZlcy53YXZlcy1kYXJrZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDk3YTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4uZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwODM4ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICMwMDgzOGYgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4td2F2ZXMud2F2ZXMtZGFya2VuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4MzhmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDYwNjQgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4tdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjMDA2MDY0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNjA2NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi5hY2NlbnQtMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODRmZmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXRleHQudGV4dC1hY2NlbnQtMSB7XFxuICBjb2xvcjogIzg0ZmZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi13YXZlcy53YXZlcy1hY2NlbnQtMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4NGZmZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4uYWNjZW50LTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE4ZmZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi10ZXh0LnRleHQtYWNjZW50LTIge1xcbiAgY29sb3I6ICMxOGZmZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4td2F2ZXMud2F2ZXMtYWNjZW50LTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMThmZmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLmFjY2VudC0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGU1ZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4tdGV4dC50ZXh0LWFjY2VudC0zIHtcXG4gIGNvbG9yOiAjMDBlNWZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXdhdmVzLndhdmVzLWFjY2VudC0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwZTVmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi5hY2NlbnQtNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBiOGQ0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXRleHQudGV4dC1hY2NlbnQtNCB7XFxuICBjb2xvcjogIzAwYjhkNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi13YXZlcy53YXZlcy1hY2NlbnQtNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGI4ZDQgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwOTY4OCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC10ZXh0IHtcXG4gIGNvbG9yOiAjMDA5Njg4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwOTY4OCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UwZjJmMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZTBmMmYxICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMGYyZjEgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMmRmZGIgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2IyZGZkYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC13YXZlcy53YXZlcy1saWdodGVuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjJkZmRiICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODBjYmM0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICM4MGNiYzQgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtd2F2ZXMud2F2ZXMtbGlnaHRlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgwY2JjNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRkYjZhYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjNGRiNmFjICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0ZGI2YWMgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmE2OWEgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogIzI2YTY5YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC13YXZlcy53YXZlcy1saWdodGVuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDg5N2IgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjMDA4OTdiICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXdhdmVzLndhdmVzLWRhcmtlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwODk3YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3OTZiICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogIzAwNzk2YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC13YXZlcy53YXZlcy1kYXJrZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDc5NmIgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwuZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNjk1YyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICMwMDY5NWMgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtd2F2ZXMud2F2ZXMtZGFya2VuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2OTVjICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDRkNDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjMDA0ZDQwICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNGQ0MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC5hY2NlbnQtMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTdmZmViICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXRleHQudGV4dC1hY2NlbnQtMSB7XFxuICBjb2xvcjogI2E3ZmZlYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC13YXZlcy53YXZlcy1hY2NlbnQtMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhN2ZmZWIgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwuYWNjZW50LTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY0ZmZkYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC10ZXh0LnRleHQtYWNjZW50LTIge1xcbiAgY29sb3I6ICM2NGZmZGEgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtd2F2ZXMud2F2ZXMtYWNjZW50LTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjRmZmRhICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLmFjY2VudC0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxZGU5YjYgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtdGV4dC50ZXh0LWFjY2VudC0zIHtcXG4gIGNvbG9yOiAjMWRlOWI2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXdhdmVzLndhdmVzLWFjY2VudC0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFkZTliNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC5hY2NlbnQtNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBiZmE1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXRleHQudGV4dC1hY2NlbnQtNCB7XFxuICBjb2xvcjogIzAwYmZhNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC13YXZlcy53YXZlcy1hY2NlbnQtNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGJmYTUgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0Y2FmNTAgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXRleHQge1xcbiAgY29sb3I6ICM0Y2FmNTAgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRjYWY1MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4ubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOGY1ZTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNlOGY1ZTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOGY1ZTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzhlNmM5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjYzhlNmM5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi13YXZlcy53YXZlcy1saWdodGVuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzhlNmM5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2E1ZDZhNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4tdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogI2E1ZDZhNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4td2F2ZXMud2F2ZXMtbGlnaHRlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2E1ZDZhNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4ubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MWM3ODQgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICM4MWM3ODQgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MWM3ODQgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjZiYjZhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjNjZiYjZhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi13YXZlcy53YXZlcy1saWdodGVuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjZiYjZhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDNhMDQ3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICM0M2EwNDcgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXdhdmVzLndhdmVzLWRhcmtlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQzYTA0NyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4uZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM4OGUzYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4tdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjMzg4ZTNjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi13YXZlcy53YXZlcy1kYXJrZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzODhlM2MgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyZTdkMzIgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogIzJlN2QzMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4td2F2ZXMud2F2ZXMtZGFya2VuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmU3ZDMyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWI1ZTIwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICMxYjVlMjAgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFiNWUyMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4uYWNjZW50LTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2I5ZjZjYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4tdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjYjlmNmNhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi13YXZlcy53YXZlcy1hY2NlbnQtMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiOWY2Y2EgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLmFjY2VudC0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2OWYwYWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogIzY5ZjBhZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4td2F2ZXMud2F2ZXMtYWNjZW50LTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjlmMGFlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi5hY2NlbnQtMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBlNjc2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICMwMGU2NzYgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXdhdmVzLndhdmVzLWFjY2VudC0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwZTY3NiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4uYWNjZW50LTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYzg1MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4tdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjMDBjODUzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi13YXZlcy53YXZlcy1hY2NlbnQtNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGM4NTMgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4YmMzNGEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXRleHQge1xcbiAgY29sb3I6ICM4YmMzNGEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzhiYzM0YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4ubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMWY4ZTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNmMWY4ZTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMWY4ZTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGNlZGM4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjZGNlZGM4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi13YXZlcy53YXZlcy1saWdodGVuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGNlZGM4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M1ZTFhNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4tdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogI2M1ZTFhNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4td2F2ZXMud2F2ZXMtbGlnaHRlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M1ZTFhNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4ubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZWQ1ODEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICNhZWQ1ODEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZWQ1ODEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWNjYzY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjOWNjYzY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi13YXZlcy53YXZlcy1saWdodGVuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWNjYzY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjN2NiMzQyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICM3Y2IzNDIgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXdhdmVzLndhdmVzLWRhcmtlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzdjYjM0MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4uZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY4OWYzOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4tdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjNjg5ZjM4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi13YXZlcy53YXZlcy1kYXJrZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2ODlmMzggIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1NThiMmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogIzU1OGIyZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4td2F2ZXMud2F2ZXMtZGFya2VuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTU4YjJmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM2OTFlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICMzMzY5MWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzNjkxZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4uYWNjZW50LTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NjZmY5MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4tdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjY2NmZjkwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi13YXZlcy53YXZlcy1hY2NlbnQtMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjY2ZmOTAgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLmFjY2VudC0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMmZmNTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogI2IyZmY1OSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4td2F2ZXMud2F2ZXMtYWNjZW50LTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjJmZjU5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi5hY2NlbnQtMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzZmZjAzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICM3NmZmMDMgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXdhdmVzLndhdmVzLWFjY2VudC0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc2ZmYwMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4uYWNjZW50LTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY0ZGQxNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4tdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjNjRkZDE3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi13YXZlcy53YXZlcy1hY2NlbnQtNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2NGRkMTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NkZGMzOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS10ZXh0IHtcXG4gIGNvbG9yOiAjY2RkYzM5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NkZGMzOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y5ZmJlNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZjlmYmU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmOWZiZTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGY0YzMgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2YwZjRjMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS13YXZlcy53YXZlcy1saWdodGVuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmNGMzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlZTljICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICNlNmVlOWMgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtd2F2ZXMud2F2ZXMtbGlnaHRlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZWU5YyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RjZTc3NSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjZGNlNzc1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkY2U3NzUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkNGUxNTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogI2Q0ZTE1NyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS13YXZlcy53YXZlcy1saWdodGVuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDRlMTU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjMGNhMzMgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjYzBjYTMzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXdhdmVzLndhdmVzLWRhcmtlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2MwY2EzMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWZiNDJiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogI2FmYjQyYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS13YXZlcy53YXZlcy1kYXJrZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZmI0MmIgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUuZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzllOWQyNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICM5ZTlkMjQgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtd2F2ZXMud2F2ZXMtZGFya2VuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWU5ZDI0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4Mjc3MTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjODI3NzE3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgyNzcxNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS5hY2NlbnQtMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRmZjgxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXRleHQudGV4dC1hY2NlbnQtMSB7XFxuICBjb2xvcjogI2Y0ZmY4MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS13YXZlcy53YXZlcy1hY2NlbnQtMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNGZmODEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUuYWNjZW50LTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZmY0MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS10ZXh0LnRleHQtYWNjZW50LTIge1xcbiAgY29sb3I6ICNlZWZmNDEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtd2F2ZXMud2F2ZXMtYWNjZW50LTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVmZjQxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLmFjY2VudC0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjNmZmMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtdGV4dC50ZXh0LWFjY2VudC0zIHtcXG4gIGNvbG9yOiAjYzZmZjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXdhdmVzLndhdmVzLWFjY2VudC0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M2ZmYwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS5hY2NlbnQtNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWVlYTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXRleHQudGV4dC1hY2NlbnQtNCB7XFxuICBjb2xvcjogI2FlZWEwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS13YXZlcy53YXZlcy1hY2NlbnQtNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZWVhMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlYjNiICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctdGV4dCB7XFxuICBjb2xvcjogI2ZmZWIzYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZWIzYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZGU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2ZmZmRlNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXdhdmVzLndhdmVzLWxpZ2h0ZW4tNSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZkZTcgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjljNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNmZmY5YzQgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy13YXZlcy53YXZlcy1saWdodGVuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOWM0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3cubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY1OWQgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjZmZmNTlkICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctd2F2ZXMud2F2ZXMtbGlnaHRlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjU5ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmMTc2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogI2ZmZjE3NiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXdhdmVzLndhdmVzLWxpZ2h0ZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmYxNzYgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZWU1OCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICNmZmVlNTggIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy13YXZlcy53YXZlcy1saWdodGVuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlZTU4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3cuZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZkZDgzNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogI2ZkZDgzNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXdhdmVzLndhdmVzLWRhcmtlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZkZDgzNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmYmMwMmQgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICNmYmMwMmQgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy13YXZlcy53YXZlcy1kYXJrZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmYmMwMmQgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlhODI1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjZjlhODI1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctd2F2ZXMud2F2ZXMtZGFya2VuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlhODI1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3cuZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1N2YxNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogI2Y1N2YxNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1N2YxNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmOGQgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy10ZXh0LnRleHQtYWNjZW50LTEge1xcbiAgY29sb3I6ICNmZmZmOGQgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy13YXZlcy53YXZlcy1hY2NlbnQtMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmOGQgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctdGV4dC50ZXh0LWFjY2VudC0yIHtcXG4gIGNvbG9yOiAjZmZmZjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctd2F2ZXMud2F2ZXMtYWNjZW50LTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3cuYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZWEwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXRleHQudGV4dC1hY2NlbnQtMyB7XFxuICBjb2xvcjogI2ZmZWEwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXdhdmVzLndhdmVzLWFjY2VudC0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZWEwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmQ2MDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy10ZXh0LnRleHQtYWNjZW50LTQge1xcbiAgY29sb3I6ICNmZmQ2MDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy13YXZlcy53YXZlcy1hY2NlbnQtNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmQ2MDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmMxMDcgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXRleHQge1xcbiAgY29sb3I6ICNmZmMxMDcgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYzEwNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXIubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY4ZTEgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNmZmY4ZTEgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY4ZTEgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlY2IzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjZmZlY2IzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci13YXZlcy53YXZlcy1saWdodGVuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlY2IzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZTA4MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogI2ZmZTA4MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItd2F2ZXMud2F2ZXMtbGlnaHRlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZTA4MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXIubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmQ1NGYgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICNmZmQ1NGYgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmQ1NGYgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjYTI4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjZmZjYTI4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci13YXZlcy53YXZlcy1saWdodGVuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjYTI4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZiMzAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICNmZmIzMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXdhdmVzLndhdmVzLWRhcmtlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYjMwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXIuZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYTAwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjZmZhMDAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci13YXZlcy53YXZlcy1kYXJrZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmEwMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjhmMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogI2ZmOGYwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItd2F2ZXMud2F2ZXMtZGFya2VuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY4ZjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY2ZjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICNmZjZmMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNmYwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXIuYWNjZW50LTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZTU3ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjZmZlNTdmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci13YXZlcy53YXZlcy1hY2NlbnQtMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmU1N2YgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLmFjY2VudC0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmQ3NDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogI2ZmZDc0MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItd2F2ZXMud2F2ZXMtYWNjZW50LTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZkNzQwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci5hY2NlbnQtMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjNDAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICNmZmM0MDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXdhdmVzLndhdmVzLWFjY2VudC0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYzQwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXIuYWNjZW50LTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYWIwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjZmZhYjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci13YXZlcy53YXZlcy1hY2NlbnQtNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmFiMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY5ODAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UtdGV4dCB7XFxuICBjb2xvcjogI2ZmOTgwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmOTgwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmM2UwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UtdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2ZmZjNlMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmYzZTAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZTBiMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNmZmUwYjIgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS13YXZlcy53YXZlcy1saWdodGVuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlMGIyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmNjODAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjZmZjYzgwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2Utd2F2ZXMud2F2ZXMtbGlnaHRlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmY2M4MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZiNzRkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UtdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogI2ZmYjc0ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmI3NGQgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYTcyNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICNmZmE3MjYgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS13YXZlcy53YXZlcy1saWdodGVuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhNzI2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UuZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZiOGMwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogI2ZiOGMwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXdhdmVzLndhdmVzLWRhcmtlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZiOGMwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNTdjMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICNmNTdjMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS13YXZlcy53YXZlcy1kYXJrZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNTdjMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWY2YzAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UtdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjZWY2YzAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2Utd2F2ZXMud2F2ZXMtZGFya2VuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWY2YzAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UuZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2NTEwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogI2U2NTEwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2NTEwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmQxODAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS10ZXh0LnRleHQtYWNjZW50LTEge1xcbiAgY29sb3I6ICNmZmQxODAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS13YXZlcy53YXZlcy1hY2NlbnQtMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmQxODAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhYjQwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UtdGV4dC50ZXh0LWFjY2VudC0yIHtcXG4gIGNvbG9yOiAjZmZhYjQwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2Utd2F2ZXMud2F2ZXMtYWNjZW50LTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhYjQwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UuYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmOTEwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXRleHQudGV4dC1hY2NlbnQtMyB7XFxuICBjb2xvcjogI2ZmOTEwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXdhdmVzLndhdmVzLWFjY2VudC0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmOTEwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjZkMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS10ZXh0LnRleHQtYWNjZW50LTQge1xcbiAgY29sb3I6ICNmZjZkMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS13YXZlcy53YXZlcy1hY2NlbnQtNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjZkMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjU3MjIgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXRleHQge1xcbiAgY29sb3I6ICNmZjU3MjIgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNTcyMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmYmU5ZTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNmYmU5ZTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmYmU5ZTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjY2JjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjZmZjY2JjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS13YXZlcy53YXZlcy1saWdodGVuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjY2JjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYWI5MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UtdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogI2ZmYWI5MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Utd2F2ZXMud2F2ZXMtbGlnaHRlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYWI5MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjhhNjUgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICNmZjhhNjUgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjhhNjUgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3MDQzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjZmY3MDQzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS13YXZlcy53YXZlcy1saWdodGVuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3MDQzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjQ1MTFlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICNmNDUxMWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXdhdmVzLndhdmVzLWRhcmtlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y0NTExZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UuZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2NGExOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UtdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjZTY0YTE5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS13YXZlcy53YXZlcy1kYXJrZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNjRhMTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkODQzMTUgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogI2Q4NDMxNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Utd2F2ZXMud2F2ZXMtZGFya2VuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDg0MzE1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmYzNjBjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICNiZjM2MGMgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JmMzYwYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UuYWNjZW50LTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmOWU4MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UtdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjZmY5ZTgwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS13YXZlcy53YXZlcy1hY2NlbnQtMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjllODAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLmFjY2VudC0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjZlNDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogI2ZmNmU0MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Utd2F2ZXMud2F2ZXMtYWNjZW50LTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY2ZTQwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS5hY2NlbnQtMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmYzZDAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICNmZjNkMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXdhdmVzLndhdmVzLWFjY2VudC0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmM2QwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UuYWNjZW50LTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RkMmMwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UtdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjZGQyYzAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS13YXZlcy53YXZlcy1hY2NlbnQtNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkZDJjMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3OTU1NDggIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXRleHQge1xcbiAgY29sb3I6ICM3OTU1NDggIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc5NTU0OCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24ubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZmViZTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNlZmViZTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZmViZTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDdjY2M4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjZDdjY2M4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi13YXZlcy53YXZlcy1saWdodGVuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDdjY2M4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JjYWFhNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24tdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogI2JjYWFhNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24td2F2ZXMud2F2ZXMtbGlnaHRlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JjYWFhNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24ubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhMTg4N2YgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICNhMTg4N2YgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhMTg4N2YgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGQ2ZTYzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjOGQ2ZTYzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi13YXZlcy53YXZlcy1saWdodGVuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGQ2ZTYzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmQ0YzQxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICM2ZDRjNDEgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXdhdmVzLndhdmVzLWRhcmtlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzZkNGM0MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24uZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVkNDAzNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24tdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjNWQ0MDM3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi13YXZlcy53YXZlcy1kYXJrZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1ZDQwMzcgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0ZTM0MmUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogIzRlMzQyZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24td2F2ZXMud2F2ZXMtZGFya2VuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGUzNDJlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2UyNzIzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICMzZTI3MjMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzNlMjcyMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2MDdkOGIgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS10ZXh0IHtcXG4gIGNvbG9yOiAjNjA3ZDhiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjA3ZDhiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXkubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VmZjEgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZWNlZmYxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWZmMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2ZkOGRjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2NmZDhkYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjZmQ4ZGMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IwYmVjNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICNiMGJlYzUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjBiZWM1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXkubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5MGE0YWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjOTBhNGFlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzkwYTRhZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzg5MDljICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogIzc4OTA5YyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3ODkwOWMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTQ2ZTdhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjNTQ2ZTdhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTQ2ZTdhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXkuZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ1NWE2NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogIzQ1NWE2NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ1NWE2NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzNzQ3NGYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICMzNzQ3NGYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzNzQ3NGYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjYzMjM4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjMjYzMjM4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjYzMjM4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5ZTllOWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktdGV4dCB7XFxuICBjb2xvcjogIzllOWU5ZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS13YXZlcyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5ZTllOWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXkubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2ZhZmFmYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS13YXZlcy53YXZlcy1saWdodGVuLTUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNmNWY1ZjUgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktd2F2ZXMud2F2ZXMtbGlnaHRlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjZWVlZWVlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXdhdmVzLndhdmVzLWxpZ2h0ZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXkubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTAgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogI2UwZTBlMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS13YXZlcy53YXZlcy1saWdodGVuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmRiZGJkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICNiZGJkYmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktd2F2ZXMud2F2ZXMtbGlnaHRlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JkYmRiZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzU3NTc1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogIzc1NzU3NSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS13YXZlcy53YXZlcy1kYXJrZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3NTc1NzUgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXkuZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzYxNjE2MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICM2MTYxNjEgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktd2F2ZXMud2F2ZXMtZGFya2VuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjE2MTYxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0MjQyNDIgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjNDI0MjQyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXdhdmVzLndhdmVzLWRhcmtlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQyNDI0MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEyMTIxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogIzIxMjEyMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS13YXZlcy53YXZlcy1kYXJrZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyMTIxMjEgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsYWNrIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsYWNrLXRleHQge1xcbiAgY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLndoaXRlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLndoaXRlLXRleHQge1xcbiAgY29sb3I6ICNmZmZmZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLnRyYW5zcGFyZW50IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50cmFuc3BhcmVudC10ZXh0IHtcXG4gIGNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcbn1cXG5cXG4vKipcXG4gKiBwcmlzbS5qcyBUd2lsaWdodCB0aGVtZVxcbiAqIEJhc2VkIChtb3JlIG9yIGxlc3MpIG9uIHRoZSBUd2lsaWdodCB0aGVtZSBvcmlnaW5hbGx5IG9mIFRleHRtYXRlIGZhbWUuXFxuICogQGF1dGhvciBSZW15IEJhY2hcXG4gKi9cXG5jb2RlW2NsYXNzKj1sYW5ndWFnZS1dLFxcbnByZVtjbGFzcyo9bGFuZ3VhZ2UtXSB7XFxuICBjb2xvcjogd2hpdGU7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgZm9udC1mYW1pbHk6IENvbnNvbGFzLCBNb25hY28sIFxcXCJBbmRhbGUgTW9ub1xcXCIsIFxcXCJVYnVudHUgTW9ub1xcXCIsIG1vbm9zcGFjZTtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICB0ZXh0LXNoYWRvdzogMCAtMC4xZW0gMC4yZW0gYmxhY2s7XFxuICB3aGl0ZS1zcGFjZTogcHJlO1xcbiAgd29yZC1zcGFjaW5nOiBub3JtYWw7XFxuICB3b3JkLWJyZWFrOiBub3JtYWw7XFxuICB3b3JkLXdyYXA6IG5vcm1hbDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICAtbW96LXRhYi1zaXplOiA0O1xcbiAgLW8tdGFiLXNpemU6IDQ7XFxuICB0YWItc2l6ZTogNDtcXG4gIC13ZWJraXQtaHlwaGVuczogbm9uZTtcXG4gIC1tb3otaHlwaGVuczogbm9uZTtcXG4gIC1tcy1oeXBoZW5zOiBub25lO1xcbiAgaHlwaGVuczogbm9uZTtcXG59XFxuXFxucHJlW2NsYXNzKj1sYW5ndWFnZS1dLFxcbjpub3QocHJlKSA+IGNvZGVbY2xhc3MqPWxhbmd1YWdlLV0ge1xcbiAgYmFja2dyb3VuZDogaHNsKDBkZWcsIDAlLCA4JSk7IC8qICMxNDE0MTQgKi9cXG59XFxuXFxuLyogQ29kZSBibG9ja3MgKi9cXG5wcmVbY2xhc3MqPWxhbmd1YWdlLV0ge1xcbiAgYm9yZGVyLXJhZGl1czogMC41ZW07XFxuICBib3JkZXI6IDAuM2VtIHNvbGlkIGhzbCgwZGVnLCAwJSwgMzMlKTsgLyogIzI4MkEyQiAqL1xcbiAgYm94LXNoYWRvdzogMXB4IDFweCAwLjVlbSBibGFjayBpbnNldDtcXG4gIG1hcmdpbjogMC41ZW0gMDtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbiAgcGFkZGluZzogMWVtO1xcbn1cXG5cXG5wcmVbY2xhc3MqPWxhbmd1YWdlLV06Oi1tb3otc2VsZWN0aW9uIHtcXG4gIC8qIEZpcmVmb3ggKi9cXG4gIGJhY2tncm91bmQ6IGhzbCgyMDBkZWcsIDQlLCAxNiUpOyAvKiAjMjgyQTJCICovXFxufVxcblxcbnByZVtjbGFzcyo9bGFuZ3VhZ2UtXTo6c2VsZWN0aW9uIHtcXG4gIC8qIFNhZmFyaSAqL1xcbiAgYmFja2dyb3VuZDogaHNsKDIwMGRlZywgNCUsIDE2JSk7IC8qICMyODJBMkIgKi9cXG59XFxuXFxuLyogVGV4dCBTZWxlY3Rpb24gY29sb3VyICovXFxucHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotbW96LXNlbGVjdGlvbiwgcHJlW2NsYXNzKj1sYW5ndWFnZS1dIDo6LW1vei1zZWxlY3Rpb24sXFxuY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXTo6LW1vei1zZWxlY3Rpb24sIGNvZGVbY2xhc3MqPWxhbmd1YWdlLV0gOjotbW96LXNlbGVjdGlvbiB7XFxuICB0ZXh0LXNoYWRvdzogbm9uZTtcXG4gIGJhY2tncm91bmQ6IGhzbGEoMGRlZywgMCUsIDkzJSwgMC4xNSk7IC8qICNFREVERUQgKi9cXG59XFxuXFxucHJlW2NsYXNzKj1sYW5ndWFnZS1dOjpzZWxlY3Rpb24sIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXSA6OnNlbGVjdGlvbixcXG5jb2RlW2NsYXNzKj1sYW5ndWFnZS1dOjpzZWxlY3Rpb24sIGNvZGVbY2xhc3MqPWxhbmd1YWdlLV0gOjpzZWxlY3Rpb24ge1xcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XFxuICBiYWNrZ3JvdW5kOiBoc2xhKDBkZWcsIDAlLCA5MyUsIDAuMTUpOyAvKiAjRURFREVEICovXFxufVxcblxcbi8qIElubGluZSBjb2RlICovXFxuOm5vdChwcmUpID4gY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXSB7XFxuICBib3JkZXItcmFkaXVzOiAwLjNlbTtcXG4gIGJvcmRlcjogMC4xM2VtIHNvbGlkIGhzbCgwZGVnLCAwJSwgMzMlKTsgLyogIzU0NTQ1NCAqL1xcbiAgYm94LXNoYWRvdzogMXB4IDFweCAwLjNlbSAtMC4xZW0gYmxhY2sgaW5zZXQ7XFxuICBwYWRkaW5nOiAwLjE1ZW0gMC4yZW0gMC4wNWVtO1xcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcXG59XFxuXFxuLnRva2VuLmNvbW1lbnQsXFxuLnRva2VuLnByb2xvZyxcXG4udG9rZW4uZG9jdHlwZSxcXG4udG9rZW4uY2RhdGEge1xcbiAgY29sb3I6IGhzbCgwZGVnLCAwJSwgNDclKTsgLyogIzc3Nzc3NyAqL1xcbn1cXG5cXG4udG9rZW4ucHVuY3R1YXRpb24ge1xcbiAgb3BhY2l0eTogMC43O1xcbn1cXG5cXG4ubmFtZXNwYWNlIHtcXG4gIG9wYWNpdHk6IDAuNztcXG59XFxuXFxuLnRva2VuLnRhZyxcXG4udG9rZW4uYm9vbGVhbixcXG4udG9rZW4ubnVtYmVyLFxcbi50b2tlbi5kZWxldGVkIHtcXG4gIGNvbG9yOiBoc2woMTRkZWcsIDU4JSwgNTUlKTsgLyogI0NGNkE0QyAqL1xcbn1cXG5cXG4udG9rZW4ua2V5d29yZCxcXG4udG9rZW4ucHJvcGVydHksXFxuLnRva2VuLnNlbGVjdG9yLFxcbi50b2tlbi5jb25zdGFudCxcXG4udG9rZW4uc3ltYm9sLFxcbi50b2tlbi5idWlsdGluIHtcXG4gIGNvbG9yOiBoc2woNTNkZWcsIDg5JSwgNzklKTsgLyogI0Y5RUU5OCAqL1xcbn1cXG5cXG4udG9rZW4uYXR0ci1uYW1lLFxcbi50b2tlbi5hdHRyLXZhbHVlLFxcbi50b2tlbi5zdHJpbmcsXFxuLnRva2VuLmNoYXIsXFxuLnRva2VuLm9wZXJhdG9yLFxcbi50b2tlbi5lbnRpdHksXFxuLnRva2VuLnVybCxcXG4ubGFuZ3VhZ2UtY3NzIC50b2tlbi5zdHJpbmcsXFxuLnN0eWxlIC50b2tlbi5zdHJpbmcsXFxuLnRva2VuLnZhcmlhYmxlLFxcbi50b2tlbi5pbnNlcnRlZCB7XFxuICBjb2xvcjogaHNsKDc2ZGVnLCAyMSUsIDUyJSk7IC8qICM4RjlENkEgKi9cXG59XFxuXFxuLnRva2VuLmF0cnVsZSB7XFxuICBjb2xvcjogaHNsKDIxOGRlZywgMjIlLCA1NSUpOyAvKiAjNzU4N0E2ICovXFxufVxcblxcbi50b2tlbi5yZWdleCxcXG4udG9rZW4uaW1wb3J0YW50IHtcXG4gIGNvbG9yOiBoc2woNDJkZWcsIDc1JSwgNjUlKTsgLyogI0U5QzA2MiAqL1xcbn1cXG5cXG4udG9rZW4uaW1wb3J0YW50LFxcbi50b2tlbi5ib2xkIHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG5cXG4udG9rZW4uaXRhbGljIHtcXG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcXG59XFxuXFxuLnRva2VuLmVudGl0eSB7XFxuICBjdXJzb3I6IGhlbHA7XFxufVxcblxcbnByZVtkYXRhLWxpbmVdIHtcXG4gIHBhZGRpbmc6IDFlbSAwIDFlbSAzZW07XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi8qIE1hcmt1cCAqL1xcbi5sYW5ndWFnZS1tYXJrdXAgLnRva2VuLnRhZyxcXG4ubGFuZ3VhZ2UtbWFya3VwIC50b2tlbi5hdHRyLW5hbWUsXFxuLmxhbmd1YWdlLW1hcmt1cCAudG9rZW4ucHVuY3R1YXRpb24ge1xcbiAgY29sb3I6IGhzbCgzM2RlZywgMzMlLCA1MiUpOyAvKiAjQUM4ODVCICovXFxufVxcblxcbi8qIE1ha2UgdGhlIHRva2VucyBzaXQgYWJvdmUgdGhlIGxpbmUgaGlnaGxpZ2h0IHNvIHRoZSBjb2xvdXJzIGRvbid0IGxvb2sgZmFkZWQuICovXFxuLnRva2VuIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHotaW5kZXg6IDE7XFxufVxcblxcbi5saW5lLWhpZ2hsaWdodCB7XFxuICBiYWNrZ3JvdW5kOiBoc2xhKDBkZWcsIDAlLCAzMyUsIDAuMjUpOyAvKiAjNTQ1NDU0ICovXFxuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIGhzbGEoMGRlZywgMCUsIDMzJSwgMC4xKSA3MCUsIGhzbGEoMGRlZywgMCUsIDMzJSwgMCkpOyAvKiAjNTQ1NDU0ICovXFxuICBib3JkZXItYm90dG9tOiAxcHggZGFzaGVkIGhzbCgwZGVnLCAwJSwgMzMlKTsgLyogIzU0NTQ1NCAqL1xcbiAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCBoc2woMGRlZywgMCUsIDMzJSk7IC8qICM1NDU0NTQgKi9cXG4gIGxlZnQ6IDA7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIG1hcmdpbi10b3A6IDAuNzVlbTsgLyogU2FtZSBhcyAucHJpc23igJlzIHBhZGRpbmctdG9wICovXFxuICBwYWRkaW5nOiBpbmhlcml0IDA7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAwO1xcbiAgd2hpdGUtc3BhY2U6IHByZTtcXG4gIHotaW5kZXg6IDA7XFxufVxcblxcbi5saW5lLWhpZ2hsaWdodDpiZWZvcmUsXFxuLmxpbmUtaGlnaGxpZ2h0W2RhdGEtZW5kXTphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2woMjE1ZGVnLCAxNSUsIDU5JSk7IC8qICM4Nzk0QTYgKi9cXG4gIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xcbiAgYm94LXNoYWRvdzogMCAxcHggd2hpdGU7XFxuICBjb2xvcjogaHNsKDI0ZGVnLCAyMCUsIDk1JSk7IC8qICNGNUYyRjAgKi9cXG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zdGFydCk7XFxuICBmb250OiBib2xkIDY1JS8xLjUgc2Fucy1zZXJpZjtcXG4gIGxlZnQ6IDAuNmVtO1xcbiAgbWluLXdpZHRoOiAxZW07XFxuICBwYWRkaW5nOiAwIDAuNWVtO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XFxuICB0b3A6IDAuNGVtO1xcbiAgdmVydGljYWwtYWxpZ246IDAuM2VtO1xcbn1cXG5cXG4ubGluZS1oaWdobGlnaHRbZGF0YS1lbmRdOmFmdGVyIHtcXG4gIGJvdHRvbTogMC40ZW07XFxuICBjb250ZW50OiBhdHRyKGRhdGEtZW5kKTtcXG4gIHRvcDogYXV0bztcXG59XFxuXFxuLndpbmRvdyB7XFxuICBmb250LWZhbWlseTogXFxcIlVidW50dVxcXCIsIHNhbnMtc2VyaWY7XFxuICBmb250LXNpemU6IDE3cHg7XFxuICB3aWR0aDogNjAwcHg7XFxuICBtYXJnaW46IDc1cHggYXV0bztcXG4gIGJhY2tncm91bmQ6ICMyYzNlNTA7XFxuICBoZWlnaHQ6IDM1MHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xcbiAgZGlzcGxheTogcmVsYXRpdmU7XFxuICBib3gtc2hhZG93OiAxMHB4IDEwcHggMTBweCAjODg4ODg4O1xcbn1cXG5cXG4uYWZ0ZXJjbG9zZSB7XFxuICBjb2xvcjogIzM0NDk1ZTtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi5vcGVuIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgcGFkZGluZzogMTVweDtcXG4gIGJhY2tncm91bmQ6ICMyZWNjNzE7XFxuICBib3JkZXItcmFkaXVzOiA0cHg7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcblxcbi5iYXNoIHtcXG4gIHdpZHRoOiA2MDBweDtcXG4gIGJhY2tncm91bmQ6ICMzNDQ5NWU7XFxuICBoZWlnaHQ6IDMxMHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xcbiAgdG9wOiA0MHB4O1xcbiAgZGlzcGxheTogYWJzb2x1dGU7XFxuICBjb2xvcjogI2ZmZjtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxufVxcbi5iYXNoIC5jb21tYW5kOjpiZWZvcmUge1xcbiAgY29udGVudDogXFxcInVzZXJAbWFjaGluZSAkIDogXFxcIjtcXG4gIGNvbG9yOiAjMmVjYzcxO1xcbn1cXG4uYmFzaCAucmVzdWx0YTo6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCI+PlxcXCI7XFxuICBjb2xvcjogIzJlY2M3MTtcXG59XFxuXFxuLyogZWZmZWN0ZWQgYnkgY29udHJvbGxlcnMgKi9cXG4ud2luZG93bWF4IHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luOiBhdXRvO1xcbiAgYmFja2dyb3VuZDogIzJjM2U1MDtcXG4gIGhlaWdodDogMTAwMHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xcbiAgZGlzcGxheTogcmVsYXRpdmU7XFxufVxcblxcbi53aW5kb3dtaW4ge1xcbiAgd2lkdGg6IDMwMHB4O1xcbiAgaGVpZ2h0OiA0NXB4O1xcbiAgYmFja2dyb3VuZDogIzJjM2U1MDtcXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcXG4gIGJvdHRvbTogMDtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG59XFxuXFxuLmJhc2htYXgge1xcbiAgZGlzcGxheTogYWJzb2x1dGU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGJhY2tncm91bmQ6ICMzNDQ5NWU7XFxuICBoZWlnaHQ6IDk2MHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xcbiAgYm90dG9tOiAwO1xcbiAgY29sb3I6ICNmZmY7XFxufVxcblxcbi8qICEtLWVuZC0tISAqL1xcbi5idXR0b25zIHtcXG4gIHdpZHRoOiAxNXB4O1xcbiAgaGVpZ2h0OiAxNXB4O1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgZmxvYXQ6IHJpZ2h0O1xcbiAgbWFyZ2luOiAxM3B4IDRweDtcXG4gIGJvcmRlcjogbm9uZTtcXG59XFxuXFxuLmNsb3NlIHtcXG4gIGJhY2tncm91bmQ6ICNlNzRjM2M7XFxufVxcblxcbi5tYXhpbWl6ZSB7XFxuICBiYWNrZ3JvdW5kOiAjZjFjNDBmO1xcbn1cXG5cXG4ubWluaW1pemUge1xcbiAgYmFja2dyb3VuZDogIzJlY2M3MTtcXG59XFxuXFxuLnJlc3VsdCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4uY29udHJvbHMge1xcbiAgaGVpZ2h0OiA0MHB4O1xcbiAgdG9wOiAwO1xcbn1cXG5cXG4udGl0bGUge1xcbiAgY29sb3I6ICNmZmY7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG4gIHBhZGRpbmc6IDEwcHg7XFxufVxcblxcbi5tYXRlcmlhbC10b29sdGlwIHtcXG4gIHBhZGRpbmc6IDEwcHggOHB4O1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgei1pbmRleDogMjAwMDtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgbWluLWhlaWdodDogMzZweDtcXG4gIGxpbmUtaGVpZ2h0OiAxMjAlO1xcbiAgb3BhY2l0eTogMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG1heC13aWR0aDogY2FsYygxMDAlIC0gNHB4KTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzIzMjMyO1xcbn1cXG5cXG4uYmFja2Ryb3Age1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgb3BhY2l0eTogMDtcXG4gIGhlaWdodDogN3B4O1xcbiAgd2lkdGg6IDE0cHg7XFxuICBib3JkZXItcmFkaXVzOiAwIDAgNTAlIDUwJTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzMjMyMzI7XFxuICB6LWluZGV4OiAtMTtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDUwJSAwJTtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuXFxuLnNoYWRvdy0wIHtcXG4gIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuXFxuLyogMmRwIGVsZXZhdGlvbiBtb2RpZmllZCovXFxuLnNoYWRvdy0xLCBuYXYsIC5kcm9wZG93bi1jb250ZW50LCAuY2FyZCwgLmNhcmQtcGFuZWwsIC5idG4tZmxvYXRpbmcsIC5idG4sIC5idG4tc21hbGwsIC5idG4tbGFyZ2UsIC5jb2xsYXBzaWJsZSB7XFxuICBib3gtc2hhZG93OiAwIDJweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMik7XFxufVxcblxcbi5zaGFkb3ctMS1oYWxmLCAuYnRuLWZsb2F0aW5nOmhvdmVyLCAuYnRuOmhvdmVyLCAuYnRuLXNtYWxsOmhvdmVyLCAuYnRuLWxhcmdlOmhvdmVyIHtcXG4gIGJveC1zaGFkb3c6IDAgM3B4IDNweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMXB4IDdweCAwIHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgM3B4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcXG59XFxuXFxuLyogNmRwIGVsZXZhdGlvbiBtb2RpZmllZCovXFxuLnNoYWRvdy0yIHtcXG4gIGJveC1zaGFkb3c6IDAgNHB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMXB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMyk7XFxufVxcblxcbi8qIDEyZHAgZWxldmF0aW9uIG1vZGlmaWVkKi9cXG4uc2hhZG93LTMge1xcbiAgYm94LXNoYWRvdzogMCA4cHggMTdweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKSwgMCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xcbn1cXG5cXG4vKiAxNmRwIGVsZXZhdGlvbiAqL1xcbi5zaGFkb3ctNCB7XFxuICBib3gtc2hhZG93OiAwIDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKSwgMCA4cHggMTBweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKTtcXG59XFxuXFxuLyogMjRkcCBlbGV2YXRpb24gKi9cXG4uc2hhZG93LTUsIC5tb2RhbCB7XFxuICBib3gtc2hhZG93OiAwIDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKSwgMCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMik7XFxufVxcblxcbi8qIDI0ZHAgZWxldmF0aW9uICovXFxuLmludmVydC1zaGFkb3ctNSB7XFxuICBib3gtc2hhZG93OiAzOHB4IDAgMCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDQ2cHggMCAwIDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwgMTVweCAwIDAgMCByZ2JhKDAsIDAsIDAsIDAuMik7XFxufVxcblxcbi5ob3ZlcmFibGUge1xcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjI1cztcXG59XFxuLmhvdmVyYWJsZTpob3ZlciB7XFxuICBib3gtc2hhZG93OiAwIDhweCAxN3B4IDAgcmdiYSgwLCAwLCAwLCAwLjIpLCAwIDZweCAyMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE5KTtcXG59XFxuXFxuLyohXFxuICogV2F2ZXMgdjAuNi4wXFxuICogaHR0cDovL2ZpYW4ubXkuaWQvV2F2ZXNcXG4gKlxcbiAqIENvcHlyaWdodCAyMDE0IEFsZmlhbmEgRS4gU2lidWVhIGFuZCBvdGhlciBjb250cmlidXRvcnNcXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmlhbnMvV2F2ZXMvYmxvYi9tYXN0ZXIvTElDRU5TRVxcbiAqL1xcbi53YXZlcy1lZmZlY3Qge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICB6LWluZGV4OiAxO1xcbiAgdHJhbnNpdGlvbjogMC4zcyBlYXNlLW91dDtcXG59XFxuLndhdmVzLWVmZmVjdCAud2F2ZXMtcmlwcGxlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIHdpZHRoOiAyMHB4O1xcbiAgaGVpZ2h0OiAyMHB4O1xcbiAgbWFyZ2luLXRvcDogLTEwcHg7XFxuICBtYXJnaW4tbGVmdDogLTEwcHg7XFxuICBvcGFjaXR5OiAwO1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpO1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuN3MgZWFzZS1vdXQ7XFxuICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm0sIG9wYWNpdHk7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi53YXZlcy1lZmZlY3Qud2F2ZXMtbGlnaHQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDUpO1xcbn1cXG4ud2F2ZXMtZWZmZWN0LndhdmVzLXJlZCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjQ0LCA2NywgNTQsIDAuNyk7XFxufVxcbi53YXZlcy1lZmZlY3Qud2F2ZXMteWVsbG93IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDIzNSwgNTksIDAuNyk7XFxufVxcbi53YXZlcy1lZmZlY3Qud2F2ZXMtb3JhbmdlIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDE1MiwgMCwgMC43KTtcXG59XFxuLndhdmVzLWVmZmVjdC53YXZlcy1wdXJwbGUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE1NiwgMzksIDE3NiwgMC43KTtcXG59XFxuLndhdmVzLWVmZmVjdC53YXZlcy1ncmVlbiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNzYsIDE3NSwgODAsIDAuNyk7XFxufVxcbi53YXZlcy1lZmZlY3Qud2F2ZXMtdGVhbCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTUwLCAxMzYsIDAuNyk7XFxufVxcbi53YXZlcy1lZmZlY3QgaW5wdXRbdHlwZT1idXR0b25dLCAud2F2ZXMtZWZmZWN0IGlucHV0W3R5cGU9cmVzZXRdLCAud2F2ZXMtZWZmZWN0IGlucHV0W3R5cGU9c3VibWl0XSB7XFxuICBib3JkZXI6IDA7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBmb250LXNpemU6IGluaGVyaXQ7XFxuICB0ZXh0LXRyYW5zZm9ybTogaW5oZXJpdDtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxufVxcbi53YXZlcy1lZmZlY3QgaW1nIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHotaW5kZXg6IC0xO1xcbn1cXG5cXG4ud2F2ZXMtbm90cmFuc2l0aW9uIHtcXG4gIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDtcXG59XFxuXFxuLndhdmVzLWNpcmNsZSB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7XFxuICAtd2Via2l0LW1hc2staW1hZ2U6IC13ZWJraXQtcmFkaWFsLWdyYWRpZW50KGNpcmNsZSwgd2hpdGUgMTAwJSwgYmxhY2sgMTAwJSk7XFxufVxcblxcbi53YXZlcy1pbnB1dC13cmFwcGVyIHtcXG4gIGJvcmRlci1yYWRpdXM6IDAuMmVtO1xcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcXG59XFxuLndhdmVzLWlucHV0LXdyYXBwZXIgLndhdmVzLWJ1dHRvbi1pbnB1dCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgei1pbmRleDogMTtcXG59XFxuXFxuLndhdmVzLWNpcmNsZSB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB3aWR0aDogMi41ZW07XFxuICBoZWlnaHQ6IDIuNWVtO1xcbiAgbGluZS1oZWlnaHQ6IDIuNWVtO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgLXdlYmtpdC1tYXNrLWltYWdlOiBub25lO1xcbn1cXG5cXG4ud2F2ZXMtYmxvY2sge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi8qIEZpcmVmb3ggQnVnOiBsaW5rIG5vdCB0cmlnZ2VyZWQgKi9cXG4ud2F2ZXMtZWZmZWN0IC53YXZlcy1yaXBwbGUge1xcbiAgei1pbmRleDogLTE7XFxufVxcblxcbi5tb2RhbCB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xcbiAgcGFkZGluZzogMDtcXG4gIG1heC1oZWlnaHQ6IDcwJTtcXG4gIHdpZHRoOiA1NSU7XFxuICBtYXJnaW46IGF1dG87XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgd2lsbC1jaGFuZ2U6IHRvcCwgb3BhY2l0eTtcXG59XFxuLm1vZGFsOmZvY3VzIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aCA6IDk5MnB4KSB7XFxuICAubW9kYWwge1xcbiAgICB3aWR0aDogODAlO1xcbiAgfVxcbn1cXG4ubW9kYWwgaDEsIC5tb2RhbCBoMiwgLm1vZGFsIGgzLCAubW9kYWwgaDQge1xcbiAgbWFyZ2luLXRvcDogMDtcXG59XFxuLm1vZGFsIC5tb2RhbC1jb250ZW50IHtcXG4gIHBhZGRpbmc6IDI0cHg7XFxufVxcbi5tb2RhbCAubW9kYWwtY2xvc2Uge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4ubW9kYWwgLm1vZGFsLWZvb3RlciB7XFxuICBib3JkZXItcmFkaXVzOiAwIDAgMnB4IDJweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XFxuICBwYWRkaW5nOiA0cHggNnB4O1xcbiAgaGVpZ2h0OiA1NnB4O1xcbiAgd2lkdGg6IDEwMCU7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuLm1vZGFsIC5tb2RhbC1mb290ZXIgLmJ0biwgLm1vZGFsIC5tb2RhbC1mb290ZXIgLmJ0bi1zbWFsbCwgLm1vZGFsIC5tb2RhbC1mb290ZXIgLmJ0bi1sYXJnZSwgLm1vZGFsIC5tb2RhbC1mb290ZXIgLmJ0bi1mbGF0IHtcXG4gIG1hcmdpbjogNnB4IDA7XFxufVxcbi5tb2RhbCAubW9kYWwtaGVhZGVyIHtcXG4gIGJvcmRlci1yYWRpdXM6IDJweCAycHggMCAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcXG4gIHBhZGRpbmc6IDZweCA0cHg7XFxuICBoZWlnaHQ6IDU2cHg7XFxuICB3aWR0aDogMTAwJTtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbn1cXG4ubW9kYWwgLm1vZGFsLWhlYWRlciAuYnRuLCAubW9kYWwgLm1vZGFsLWhlYWRlciAuYnRuLXNtYWxsLCAubW9kYWwgLm1vZGFsLWhlYWRlciAuYnRuLWxhcmdlLCAubW9kYWwgLm1vZGFsLWhlYWRlciAuYnRuLWZsYXQge1xcbiAgbWFyZ2luOiA2cHggMDtcXG59XFxuXFxuLm1vZGFsLW92ZXJsYXkge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgei1pbmRleDogOTk5O1xcbiAgdG9wOiAtMjUlO1xcbiAgbGVmdDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgaGVpZ2h0OiAxMjUlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBiYWNrZ3JvdW5kOiAjMDAwO1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIHdpbGwtY2hhbmdlOiBvcGFjaXR5O1xcbn1cXG5cXG4ubW9kYWwubW9kYWwtZml4ZWQtZm9vdGVyIHtcXG4gIHBhZGRpbmc6IDA7XFxuICBoZWlnaHQ6IDcwJTtcXG59XFxuLm1vZGFsLm1vZGFsLWZpeGVkLWZvb3RlciAubW9kYWwtY29udGVudCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDU2cHgpO1xcbiAgbWF4LWhlaWdodDogMTAwJTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgb3ZlcmZsb3cteTogYXV0bztcXG59XFxuLm1vZGFsLm1vZGFsLWZpeGVkLWZvb3RlciAubW9kYWwtZm9vdGVyIHtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDA7XFxufVxcblxcbi5tb2RhbC5ib3R0b20tc2hlZXQge1xcbiAgdG9wOiBhdXRvO1xcbiAgYm90dG9tOiAtMTAwJTtcXG4gIG1hcmdpbjogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWF4LWhlaWdodDogNDUlO1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIHdpbGwtY2hhbmdlOiBib3R0b20sIG9wYWNpdHk7XFxufVxcblxcbmh0bWwsXFxuYm9keSxcXG4jcm9vdCB7XFxuICBtYXJnaW46IDA7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcblxcbioge1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcblxcbi5ub3NlbGVjdCB7XFxuICAtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7IC8qIGlPUyBTYWZhcmkgKi9cXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7IC8qIFNhZmFyaSAqL1xcbiAgLWtodG1sLXVzZXItc2VsZWN0OiBub25lOyAvKiBLb25xdWVyb3IgSFRNTCAqL1xcbiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsgLyogT2xkIHZlcnNpb25zIG9mIEZpcmVmb3ggKi9cXG4gIC1tcy11c2VyLXNlbGVjdDogbm9uZTsgLyogSW50ZXJuZXQgRXhwbG9yZXIvRWRnZSAqL1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAvKiBOb24tcHJlZml4ZWQgdmVyc2lvbiwgY3VycmVudGx5XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgYnkgQ2hyb21lLCBFZGdlLCBPcGVyYSBhbmQgRmlyZWZveCAqL1xcbn1cXG5cXG51bDpub3QoLmJyb3dzZXItZGVmYXVsdCkge1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbn1cXG51bDpub3QoLmJyb3dzZXItZGVmYXVsdCkgPiBsaSB7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxufVxcblxcbmEge1xcbiAgY29sb3I6ICMwMzliZTU7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4udy0xMDAge1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcblxcbi5yaWdodC1hbGlnbiB7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuXFxuLmNlbnRlci1hbGlnbiB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi52LWNlbnRlciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLm1iMSB7XFxuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xcbn1cXG5cXG4uY29sbGVjdGlvbiB7XFxuICBtYXJnaW46IDAuMzMzMzMzMzMzM3JlbSAwIDAuNjY2NjY2NjY2N3JlbSAwO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XFxuICBwYWRkaW5nOiAxMHB4IDIwcHg7XFxuICBtYXJnaW46IDA7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2UwZTBlMDtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5ob3Zlcjpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkO1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmF2YXRhciB7XFxuICBtaW4taGVpZ2h0OiA4NHB4O1xcbiAgcGFkZGluZy1sZWZ0OiA3MnB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmF2YXRhcjpub3QoLmNpcmNsZS1jbGlwcGVyKSA+IC5jaXJjbGUsXFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hdmF0YXIgOm5vdCguY2lyY2xlLWNsaXBwZXIpID4gLmNpcmNsZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogNDJweDtcXG4gIGhlaWdodDogNDJweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBsZWZ0OiAxNXB4O1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hdmF0YXIgaS5jaXJjbGUge1xcbiAgZm9udC1zaXplOiAxOHB4O1xcbiAgbGluZS1oZWlnaHQ6IDQycHg7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5OTk7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyIC50aXRsZSB7XFxuICBmb250LXNpemU6IDE2cHg7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyIHAge1xcbiAgbWFyZ2luOiAwO1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmF2YXRhciAuc2Vjb25kYXJ5LWNvbnRlbnQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxNnB4O1xcbiAgcmlnaHQ6IDE2cHg7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW06bGFzdC1jaGlsZCB7XFxuICBib3JkZXItYm90dG9tOiBub25lO1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbiAgY29sb3I6ICNlYWZhZjk7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYWN0aXZlIC5zZWNvbmRhcnktY29udGVudCB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLmNvbGxlY3Rpb24gYS5jb2xsZWN0aW9uLWl0ZW0ge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB0cmFuc2l0aW9uOiAwLjI1cztcXG4gIGNvbG9yOiAjMjZhNjlhO1xcbn1cXG4uY29sbGVjdGlvbiBhLmNvbGxlY3Rpb24taXRlbTpub3QoLmFjdGl2ZSk6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDtcXG59XFxuLmNvbGxlY3Rpb24ud2l0aC1oZWFkZXIgLmNvbGxlY3Rpb24taGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2UwZTBlMDtcXG4gIHBhZGRpbmc6IDEwcHggMjBweDtcXG59XFxuLmNvbGxlY3Rpb24ud2l0aC1oZWFkZXIgLmNvbGxlY3Rpb24taXRlbSB7XFxuICBwYWRkaW5nLWxlZnQ6IDMwcHg7XFxufVxcbi5jb2xsZWN0aW9uLndpdGgtaGVhZGVyIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyIHtcXG4gIHBhZGRpbmctbGVmdDogNzJweDtcXG59XFxuXFxuLnNlY29uZGFyeS1jb250ZW50IHtcXG4gIGZsb2F0OiByaWdodDtcXG4gIGNvbG9yOiAjMjZhNjlhO1xcbn1cXG5cXG4uY29sbGFwc2libGUgLmNvbGxlY3Rpb24ge1xcbiAgbWFyZ2luOiAwO1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG5cXG4ubW9kYWwtb3ZlcmxheSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBoZWlnaHQ6IDEwMHZoO1xcbiAgd2lkdGg6IDEwMHZ3O1xcbiAgcGFkZGluZzogMjBweCAwIDIwcHggMDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcXG4gIHotaW5kZXg6IDk5OTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuLm1vZGFsLW92ZXJsYXkgLmlubmVyZm9ybSB7XFxuICBtYXgtd2lkdGg6IDY1MHB4O1xcbn1cXG4ubW9kYWwtb3ZlcmxheSAuaW5uZXJmb3JtIGZvcm0ge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKlxcbiAgTWVkaWEgUXVlcnkgQ2xhc3Nlc1xcbioqKioqKioqKioqKioqKioqKioqKiovXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoIDogNjAwcHgpIHtcXG4gIC5oaWRlLW9uLXNtYWxsLW9ubHksIC5oaWRlLW9uLXNtYWxsLWFuZC1kb3duIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGggOiA5OTJweCkge1xcbiAgLmhpZGUtb24tbWVkLWFuZC1kb3duIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiA2MDFweCkge1xcbiAgLmhpZGUtb24tbWVkLWFuZC11cCB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDk5MnB4KSB7XFxuICAuaGlkZS1vbi1tZWQtb25seSB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoIDogOTkzcHgpIHtcXG4gIC5oaWRlLW9uLWxhcmdlLW9ubHkge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6IDEyMDFweCkge1xcbiAgLmhpZGUtb24tZXh0cmEtbGFyZ2Utb25seSB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoIDogMTIwMXB4KSB7XFxuICAuc2hvdy1vbi1leHRyYS1sYXJnZSB7XFxuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6IDk5M3B4KSB7XFxuICAuc2hvdy1vbi1sYXJnZSB7XFxuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA5OTJweCkge1xcbiAgLnNob3ctb24tbWVkaXVtIHtcXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoIDogNjAwcHgpIHtcXG4gIC5zaG93LW9uLXNtYWxsIHtcXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoIDogNjAxcHgpIHtcXG4gIC5zaG93LW9uLW1lZGl1bS1hbmQtdXAge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGggOiA5OTJweCkge1xcbiAgLnNob3ctb24tbWVkaXVtLWFuZC1kb3duIHtcXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoIDogNjAwcHgpIHtcXG4gIC5jZW50ZXItb24tc21hbGwtb25seSB7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIH1cXG59XFxuXFxuLyoqKioqKioqKioqKioqKioqKipcXG4gIFV0aWxpdHkgQ2xhc3Nlc1xcbioqKioqKioqKioqKioqKioqKiovXFxuLmhpZGUge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGVmdC1hbGlnbiB7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbn1cXG5cXG4ucmlnaHQtYWxpZ24ge1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxufVxcblxcbi5jZW50ZXIsIC5jZW50ZXItYWxpZ24ge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG4ubGVmdCB7XFxuICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmlnaHQge1xcbiAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5uby1zZWxlY3Qge1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcbi5jaXJjbGUge1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbn1cXG5cXG4uY2VudGVyLWJsb2NrIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBtYXJnaW4tcmlnaHQ6IGF1dG87XFxufVxcblxcbi50cnVuY2F0ZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxufVxcblxcbi5uby1wYWRkaW5nIHtcXG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuc3Bhbi5iYWRnZSB7XFxuICBtaW4td2lkdGg6IDNyZW07XFxuICBwYWRkaW5nOiAwIDZweDtcXG4gIG1hcmdpbi1sZWZ0OiAxNHB4O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgbGluZS1oZWlnaHQ6IDIycHg7XFxuICBoZWlnaHQ6IDIycHg7XFxuICBjb2xvcjogIzc1NzU3NTtcXG4gIGZsb2F0OiByaWdodDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcbnNwYW4uYmFkZ2UubmV3IHtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxuICBmb250LXNpemU6IDAuOHJlbTtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YTY5YTtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG59XFxuc3Bhbi5iYWRnZS5uZXc6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIiBuZXdcXFwiO1xcbn1cXG5zcGFuLmJhZGdlW2RhdGEtYmFkZ2UtY2FwdGlvbl06OmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCIgXFxcIiBhdHRyKGRhdGEtYmFkZ2UtY2FwdGlvbik7XFxufVxcblxcbm5hdiB1bCBhIHNwYW4uYmFkZ2Uge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZmxvYXQ6IG5vbmU7XFxuICBtYXJnaW4tbGVmdDogNHB4O1xcbiAgbGluZS1oZWlnaHQ6IDIycHg7XFxuICBoZWlnaHQ6IDIycHg7XFxuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhdXRvO1xcbn1cXG5cXG4uY29sbGVjdGlvbi1pdGVtIHNwYW4uYmFkZ2Uge1xcbiAgbWFyZ2luLXRvcDogY2FsYygwLjc1cmVtIC0gMTFweCk7XFxufVxcblxcbi5jb2xsYXBzaWJsZSBzcGFuLmJhZGdlIHtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG5cXG4uc2lkZW5hdiBzcGFuLmJhZGdlIHtcXG4gIG1hcmdpbi10b3A6IDExLjVweDtcXG59XFxuXFxudGFibGUgc3Bhbi5iYWRnZSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBmbG9hdDogbm9uZTtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG5cXG4uY2hpcCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBoZWlnaHQ6IDMycHg7XFxuICBmb250LXNpemU6IDEzcHg7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC42KTtcXG4gIGxpbmUtaGVpZ2h0OiAzMnB4O1xcbiAgcGFkZGluZzogMCAxMnB4O1xcbiAgYm9yZGVyLXJhZGl1czogMTZweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNGU0ZTQ7XFxuICBtYXJnaW4tYm90dG9tOiA1cHg7XFxuICBtYXJnaW4tcmlnaHQ6IDVweDtcXG59XFxuLmNoaXA6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmE2OWE7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLmNoaXAgPiBpbWcge1xcbiAgZmxvYXQ6IGxlZnQ7XFxuICBtYXJnaW46IDAgOHB4IDAgLTEycHg7XFxuICBoZWlnaHQ6IDMycHg7XFxuICB3aWR0aDogMzJweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG59XFxuLmNoaXAgLmNsb3NlIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGZsb2F0OiByaWdodDtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG4gIGxpbmUtaGVpZ2h0OiAzMnB4O1xcbiAgcGFkZGluZy1sZWZ0OiA4cHg7XFxufVxcblxcbi5jaGlwcyB7XFxuICBib3JkZXI6IG5vbmU7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzllOWU5ZTtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBtYXJnaW46IDAgMCA4cHggMDtcXG4gIG1pbi1oZWlnaHQ6IDQ1cHg7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3M7XFxufVxcbi5jaGlwcy5mb2N1cyB7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzI2YTY5YTtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDAgMCAjMjZhNjlhO1xcbn1cXG4uY2hpcHM6aG92ZXIge1xcbiAgY3Vyc29yOiB0ZXh0O1xcbn1cXG4uY2hpcHMgLmlucHV0IHtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxuICBib3JkZXI6IDA7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjYpO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgaGVpZ2h0OiA1NnB4O1xcbiAgbGluZS1oZWlnaHQ6IDMycHg7XFxuICBvdXRsaW5lOiAwO1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xcbiAgd2lkdGg6IDEyMHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5jaGlwcyAuaW5wdXQ6Zm9jdXMge1xcbiAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XFxuICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbi5jaGlwcyAuYXV0b2NvbXBsZXRlLWNvbnRlbnQge1xcbiAgbWFyZ2luLXRvcDogMDtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcblxcbi5wcmVmaXggfiAuY2hpcHMge1xcbiAgbWFyZ2luLWxlZnQ6IDNyZW07XFxuICB3aWR0aDogOTIlO1xcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDNyZW0pO1xcbn1cXG5cXG4uY2hpcHM6ZW1wdHkgfiBsYWJlbCB7XFxuICBmb250LXNpemU6IDAuOHJlbTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTQwJSk7XFxufVxcblxcbi5jb2xsYXBzaWJsZSB7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcXG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQ7XFxuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkZGQ7XFxuICBtYXJnaW46IDAuMzMzMzMzMzMzM3JlbSAwIDAuNjY2NjY2NjY2N3JlbSAwO1xcbn1cXG5cXG4uY29sbGFwc2libGUtaGVhZGVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gIHBhZGRpbmc6IDFyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XFxufVxcbi5jb2xsYXBzaWJsZS1oZWFkZXI6Zm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG59XFxuLmNvbGxhcHNpYmxlLWhlYWRlciBpIHtcXG4gIHdpZHRoOiAycmVtO1xcbiAgZm9udC1zaXplOiAxLjZyZW07XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBtYXJnaW4tcmlnaHQ6IDFyZW07XFxufVxcblxcbi5rZXlib2FyZC1mb2N1c2VkIC5jb2xsYXBzaWJsZS1oZWFkZXI6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTtcXG59XFxuXFxuLmNvbGxhcHNpYmxlLWJvZHkge1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIHBhZGRpbmc6IDJyZW07XFxufVxcblxcbi5zaWRlbmF2IC5jb2xsYXBzaWJsZSxcXG4uc2lkZW5hdi5maXhlZCAuY29sbGFwc2libGUge1xcbiAgYm9yZGVyOiBub25lO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuLnNpZGVuYXYgLmNvbGxhcHNpYmxlIGxpLFxcbi5zaWRlbmF2LmZpeGVkIC5jb2xsYXBzaWJsZSBsaSB7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG4uc2lkZW5hdiAuY29sbGFwc2libGUtaGVhZGVyLFxcbi5zaWRlbmF2LmZpeGVkIC5jb2xsYXBzaWJsZS1oZWFkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IG5vbmU7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIGhlaWdodDogaW5oZXJpdDtcXG4gIHBhZGRpbmc6IDAgMTVweDtcXG59XFxuLnNpZGVuYXYgLmNvbGxhcHNpYmxlLWhlYWRlcjpob3ZlcixcXG4uc2lkZW5hdi5maXhlZCAuY29sbGFwc2libGUtaGVhZGVyOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxufVxcbi5zaWRlbmF2IC5jb2xsYXBzaWJsZS1oZWFkZXIgaSxcXG4uc2lkZW5hdi5maXhlZCAuY29sbGFwc2libGUtaGVhZGVyIGkge1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxufVxcbi5zaWRlbmF2IC5jb2xsYXBzaWJsZS1ib2R5LFxcbi5zaWRlbmF2LmZpeGVkIC5jb2xsYXBzaWJsZS1ib2R5IHtcXG4gIGJvcmRlcjogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxufVxcbi5zaWRlbmF2IC5jb2xsYXBzaWJsZS1ib2R5IGxpIGEsXFxuLnNpZGVuYXYuZml4ZWQgLmNvbGxhcHNpYmxlLWJvZHkgbGkgYSB7XFxuICBwYWRkaW5nOiAwIDIyLjVweCAwIDMwcHg7XFxufVxcblxcbi5jb2xsYXBzaWJsZS5wb3BvdXQge1xcbiAgYm9yZGVyOiBub25lO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuLmNvbGxhcHNpYmxlLnBvcG91dCA+IGxpIHtcXG4gIGJveC1zaGFkb3c6IDAgMnB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4xNiksIDAgMnB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xcbiAgbWFyZ2luOiAwIDI0cHg7XFxuICB0cmFuc2l0aW9uOiBtYXJnaW4gMC4zNXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuNDYsIDAuNDUsIDAuOTQpO1xcbn1cXG4uY29sbGFwc2libGUucG9wb3V0ID4gbGkuYWN0aXZlIHtcXG4gIGJveC1zaGFkb3c6IDAgNXB4IDExcHggMCByZ2JhKDAsIDAsIDAsIDAuMTgpLCAwIDRweCAxNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE1KTtcXG4gIG1hcmdpbjogMTZweCAwO1xcbn1cXG5cXG4uY29sbGVjdGlvbiB7XFxuICBtYXJnaW46IDAuMzMzMzMzMzMzM3JlbSAwIDAuNjY2NjY2NjY2N3JlbSAwO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XFxuICBwYWRkaW5nOiAxMHB4IDIwcHg7XFxuICBtYXJnaW46IDA7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2UwZTBlMDtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hdmF0YXIge1xcbiAgbWluLWhlaWdodDogODRweDtcXG4gIHBhZGRpbmctbGVmdDogNzJweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hdmF0YXI6bm90KC5jaXJjbGUtY2xpcHBlcikgPiAuY2lyY2xlLFxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyIDpub3QoLmNpcmNsZS1jbGlwcGVyKSA+IC5jaXJjbGUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDQycHg7XFxuICBoZWlnaHQ6IDQycHg7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgbGVmdDogMTVweDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyIGkuY2lyY2xlIHtcXG4gIGZvbnQtc2l6ZTogMThweDtcXG4gIGxpbmUtaGVpZ2h0OiA0MnB4O1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTk5O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmF2YXRhciAudGl0bGUge1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmF2YXRhciBwIHtcXG4gIG1hcmdpbjogMDtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hdmF0YXIgLnNlY29uZGFyeS1jb250ZW50IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMTZweDtcXG4gIHJpZ2h0OiAxNnB4O1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtOmxhc3QtY2hpbGQge1xcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hY3RpdmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YTY5YTtcXG4gIGNvbG9yOiAjZWFmYWY5O1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmFjdGl2ZSAuc2Vjb25kYXJ5LWNvbnRlbnQge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi5jb2xsZWN0aW9uIGEuY29sbGVjdGlvbi1pdGVtIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgdHJhbnNpdGlvbjogMC4yNXM7XFxuICBjb2xvcjogIzI2YTY5YTtcXG59XFxuLmNvbGxlY3Rpb24gYS5jb2xsZWN0aW9uLWl0ZW06bm90KC5hY3RpdmUpOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkZGQ7XFxufVxcbi5jb2xsZWN0aW9uLndpdGgtaGVhZGVyIC5jb2xsZWN0aW9uLWhlYWRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlMGUwZTA7XFxuICBwYWRkaW5nOiAxMHB4IDIwcHg7XFxufVxcbi5jb2xsZWN0aW9uLndpdGgtaGVhZGVyIC5jb2xsZWN0aW9uLWl0ZW0ge1xcbiAgcGFkZGluZy1sZWZ0OiAzMHB4O1xcbn1cXG4uY29sbGVjdGlvbi53aXRoLWhlYWRlciAuY29sbGVjdGlvbi1pdGVtLmF2YXRhciB7XFxuICBwYWRkaW5nLWxlZnQ6IDcycHg7XFxufVxcbi5jb2xsZWN0aW9uIC5zZWNvbmRhcnktY29udGVudCB7XFxuICBmbG9hdDogcmlnaHQ7XFxuICBjb2xvcjogIzI2YTY5YTtcXG59XFxuXFxuc2VsZWN0OmZvY3VzIHtcXG4gIG91dGxpbmU6IDFweCBzb2xpZCAjYzlmM2VmO1xcbn1cXG5cXG5idXR0b246Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyYWI3YTk7XFxufVxcblxcbmxhYmVsIHtcXG4gIGZvbnQtc2l6ZTogMC44cmVtO1xcbiAgY29sb3I6ICM5ZTllOWU7XFxufVxcblxcbi8qIFRleHQgSW5wdXRzICsgVGV4dGFyZWFcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcbi8qIFN0eWxlIFBsYWNlaG9sZGVycyAqL1xcbjo6cGxhY2Vob2xkZXIge1xcbiAgY29sb3I6ICNkMWQxZDE7XFxufVxcblxcbi8qIFRleHQgaW5wdXRzICovXFxuaW5wdXQ6bm90KFt0eXBlXSksXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxudGV4dGFyZWEudGV4dGFyZWEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IG5vbmU7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzllOWU5ZTtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgaGVpZ2h0OiA1NnB4O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICBtYXJnaW46IDAgMCA4cHggMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuM3MsIGJvcmRlciAwLjNzO1xcbn1cXG5pbnB1dDpub3QoW3R5cGVdKTpkaXNhYmxlZCwgaW5wdXQ6bm90KFt0eXBlXSlbcmVhZG9ubHk9cmVhZG9ubHldLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSxcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0sXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0sXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0sXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0sXFxudGV4dGFyZWEudGV4dGFyZWE6ZGlzYWJsZWQsXFxudGV4dGFyZWEudGV4dGFyZWFbcmVhZG9ubHk9cmVhZG9ubHldIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbn1cXG5pbnB1dDpub3QoW3R5cGVdKTpkaXNhYmxlZCArIGxhYmVsLCBpbnB1dDpub3QoW3R5cGVdKVtyZWFkb25seT1yZWFkb25seV0gKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCArIGxhYmVsLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSArIGxhYmVsLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCArIGxhYmVsLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0gKyBsYWJlbCxcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldICsgbGFiZWwsXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCArIGxhYmVsLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldICsgbGFiZWwsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0gKyBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0gKyBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldICsgbGFiZWwsXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCArIGxhYmVsLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCArIGxhYmVsLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCArIGxhYmVsLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldICsgbGFiZWwsXFxudGV4dGFyZWEudGV4dGFyZWE6ZGlzYWJsZWQgKyBsYWJlbCxcXG50ZXh0YXJlYS50ZXh0YXJlYVtyZWFkb25seT1yZWFkb25seV0gKyBsYWJlbCB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG59XFxuaW5wdXQ6bm90KFt0eXBlXSk6Zm9jdXM6bm90KFtyZWFkb25seV0pLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSksXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSksXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSksXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSksXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSksXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSksXFxudGV4dGFyZWEudGV4dGFyZWE6Zm9jdXM6bm90KFtyZWFkb25seV0pIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMjZhNjlhO1xcbiAgYm94LXNoYWRvdzogMCAxcHggMCAwICMyNmE2OWE7XFxufVxcbmlucHV0Om5vdChbdHlwZV0pOmZvY3VzOm5vdChbcmVhZG9ubHldKSArIGxhYmVsLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSArIGxhYmVsLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSkgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pICsgbGFiZWwsXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSkgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSkgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSkgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSArIGxhYmVsLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSkgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSArIGxhYmVsLFxcbnRleHRhcmVhLnRleHRhcmVhOmZvY3VzOm5vdChbcmVhZG9ubHldKSArIGxhYmVsIHtcXG4gIGNvbG9yOiAjMjZhNjlhO1xcbn1cXG5pbnB1dDpub3QoW3R5cGVdKTpmb2N1cy52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiBsYWJlbCxcXG50ZXh0YXJlYS50ZXh0YXJlYTpmb2N1cy52YWxpZCB+IGxhYmVsIHtcXG4gIGNvbG9yOiAjNGNhZjUwO1xcbn1cXG5pbnB1dDpub3QoW3R5cGVdKTpmb2N1cy5pbnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiBsYWJlbCxcXG50ZXh0YXJlYS50ZXh0YXJlYTpmb2N1cy5pbnZhbGlkIH4gbGFiZWwge1xcbiAgY29sb3I6ICNmNDQzMzY7XFxufVxcbmlucHV0Om5vdChbdHlwZV0pLnZhbGlkYXRlICsgbGFiZWwsXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWRhdGUgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWRhdGUgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWRhdGUgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkYXRlICsgbGFiZWwsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWRhdGUgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZGF0ZSArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZGF0ZSArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZGF0ZSArIGxhYmVsLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWRhdGUgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkYXRlICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZGF0ZSArIGxhYmVsLFxcbnRleHRhcmVhLnRleHRhcmVhLnZhbGlkYXRlICsgbGFiZWwge1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcbi8qIFZhbGlkYXRpb24gU2FzcyBQbGFjZWhvbGRlcnMgKi9cXG4uc2VsZWN0LXdyYXBwZXIudmFsaWQgPiBpbnB1dC5zZWxlY3QtZHJvcGRvd24sIGlucHV0Om5vdChbdHlwZV0pLnZhbGlkLCBpbnB1dDpub3QoW3R5cGVdKTpmb2N1cy52YWxpZCxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCxcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQsXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQsXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQsXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCxcXG50ZXh0YXJlYS50ZXh0YXJlYS52YWxpZCxcXG50ZXh0YXJlYS50ZXh0YXJlYTpmb2N1cy52YWxpZCB7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzRjYWY1MDtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDAgMCAjNGNhZjUwO1xcbn1cXG5cXG4uc2VsZWN0LXdyYXBwZXIuaW52YWxpZCA+IGlucHV0LnNlbGVjdC1kcm9wZG93biwgLnNlbGVjdC13cmFwcGVyLmludmFsaWQgPiBpbnB1dC5zZWxlY3QtZHJvcGRvd246Zm9jdXMsIGlucHV0Om5vdChbdHlwZV0pLmludmFsaWQsIGlucHV0Om5vdChbdHlwZV0pOmZvY3VzLmludmFsaWQsXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQsXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCxcXG50ZXh0YXJlYS50ZXh0YXJlYS5pbnZhbGlkLFxcbnRleHRhcmVhLnRleHRhcmVhOmZvY3VzLmludmFsaWQge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmNDQzMzY7XFxuICBib3gtc2hhZG93OiAwIDFweCAwIDAgI2Y0NDMzNjtcXG59XFxuXFxuLnNlbGVjdC13cmFwcGVyLnZhbGlkIC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLCAuc2VsZWN0LXdyYXBwZXIuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSwgaW5wdXQ6bm90KFt0eXBlXSkudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSwgaW5wdXQ6bm90KFt0eXBlXSk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSwgaW5wdXQ6bm90KFt0eXBlXSkuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSwgaW5wdXQ6bm90KFt0eXBlXSk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxudGV4dGFyZWEudGV4dGFyZWEudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG50ZXh0YXJlYS50ZXh0YXJlYTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbnRleHRhcmVhLnRleHRhcmVhLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxudGV4dGFyZWEudGV4dGFyZWE6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSB7XFxuICBjb2xvcjogdHJhbnNwYXJlbnQ7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5cXG4uc2VsZWN0LXdyYXBwZXIudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsIGlucHV0Om5vdChbdHlwZV0pLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLCBpbnB1dDpub3QoW3R5cGVdKTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG50ZXh0YXJlYS50ZXh0YXJlYS52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG50ZXh0YXJlYS50ZXh0YXJlYTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlciB7XFxuICBjb250ZW50OiBhdHRyKGRhdGEtc3VjY2Vzcyk7XFxuICBjb2xvcjogIzRjYWY1MDtcXG59XFxuXFxuLnNlbGVjdC13cmFwcGVyLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsIGlucHV0Om5vdChbdHlwZV0pLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsIGlucHV0Om5vdChbdHlwZV0pOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG50ZXh0YXJlYS50ZXh0YXJlYS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbnRleHRhcmVhLnRleHRhcmVhOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIge1xcbiAgY29udGVudDogYXR0cihkYXRhLWVycm9yKTtcXG4gIGNvbG9yOiAjZjQ0MzM2O1xcbn1cXG5cXG4uc2VsZWN0LXdyYXBwZXIgKyBsYWJlbDphZnRlciwgaW5wdXQ6bm90KFt0eXBlXSkgKyBsYWJlbDphZnRlcixcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSArIGxhYmVsOmFmdGVyLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSArIGxhYmVsOmFmdGVyLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSArIGxhYmVsOmFmdGVyLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkgKyBsYWJlbDphZnRlcixcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSArIGxhYmVsOmFmdGVyLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpICsgbGFiZWw6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpICsgbGFiZWw6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpICsgbGFiZWw6YWZ0ZXIsXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSArIGxhYmVsOmFmdGVyLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCkgKyBsYWJlbDphZnRlcixcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpICsgbGFiZWw6YWZ0ZXIsXFxudGV4dGFyZWEudGV4dGFyZWEgKyBsYWJlbDphZnRlciB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxMDAlO1xcbiAgbGVmdDogMDtcXG4gIG9wYWNpdHk6IDA7XFxuICB0cmFuc2l0aW9uOiAwLjJzIG9wYWNpdHkgZWFzZS1vdXQsIDAuMnMgY29sb3IgZWFzZS1vdXQ7XFxufVxcblxcbi5pbnB1dC1maWVsZCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBtYXJnaW4tdG9wOiAxcmVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG59XFxuLmlucHV0LWZpZWxkLmlubGluZSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgbWFyZ2luLWxlZnQ6IDVweDtcXG59XFxuLmlucHV0LWZpZWxkLmlubGluZSBpbnB1dCxcXG4uaW5wdXQtZmllbGQuaW5saW5lIC5zZWxlY3QtZHJvcGRvd24ge1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG59XFxuLmlucHV0LWZpZWxkLmNvbCBsYWJlbCB7XFxuICBsZWZ0OiAwLjVyZW07XFxufVxcbi5pbnB1dC1maWVsZC5jb2wgLnByZWZpeCB+IGxhYmVsLFxcbi5pbnB1dC1maWVsZC5jb2wgLnByZWZpeCB+IC52YWxpZGF0ZSB+IGxhYmVsIHtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSAzcmVtIC0gMXJlbSk7XFxufVxcbi5pbnB1dC1maWVsZCA+IGxhYmVsIHtcXG4gIGNvbG9yOiAjOWU5ZTllO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIGN1cnNvcjogdGV4dDtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGVhc2Utb3V0LCBjb2xvciAwLjJzIGVhc2Utb3V0O1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogMCUgMTAwJTtcXG4gIHRleHQtYWxpZ246IGluaXRpYWw7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTJweCk7XFxufVxcbi5pbnB1dC1maWVsZCA+IGxhYmVsOm5vdCgubGFiZWwtaWNvbikuYWN0aXZlIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTRweCkgc2NhbGUoMC44KTtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcXG59XFxuLmlucHV0LWZpZWxkID4gaW5wdXRbdHlwZV06LXdlYmtpdC1hdXRvZmlsbDpub3QoLmJyb3dzZXItZGVmYXVsdCk6bm90KFt0eXBlPXNlYXJjaF0pICsgbGFiZWwsIC5pbnB1dC1maWVsZCA+IGlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpICsgbGFiZWwsIC5pbnB1dC1maWVsZCA+IGlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpICsgbGFiZWwge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xNHB4KSBzY2FsZSgwLjgpO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xcbn1cXG4uaW5wdXQtZmllbGQgLmhlbHBlci10ZXh0IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG1pbi1oZWlnaHQ6IDE4cHg7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNTQpO1xcbn1cXG4uaW5wdXQtZmllbGQgLmhlbHBlci10ZXh0OjphZnRlciB7XFxuICBvcGFjaXR5OiAxO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG59XFxuLmlucHV0LWZpZWxkIC5wcmVmaXgge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDU2cHg7XFxuICBmb250LXNpemU6IDJyZW07XFxuICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzO1xcbn1cXG4uaW5wdXQtZmllbGQgLnByZWZpeC5hY3RpdmUge1xcbiAgY29sb3I6ICMyNmE2OWE7XFxufVxcbi5pbnB1dC1maWVsZCAucHJlZml4IH4gaW5wdXQsXFxuLmlucHV0LWZpZWxkIC5wcmVmaXggfiB0ZXh0YXJlYSxcXG4uaW5wdXQtZmllbGQgLnByZWZpeCB+IGxhYmVsLFxcbi5pbnB1dC1maWVsZCAucHJlZml4IH4gLnZhbGlkYXRlIH4gbGFiZWwsXFxuLmlucHV0LWZpZWxkIC5wcmVmaXggfiAuaGVscGVyLXRleHQsXFxuLmlucHV0LWZpZWxkIC5wcmVmaXggfiAuYXV0b2NvbXBsZXRlLWNvbnRlbnQge1xcbiAgbWFyZ2luLWxlZnQ6IDNyZW07XFxuICB3aWR0aDogOTIlO1xcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDNyZW0pO1xcbn1cXG4uaW5wdXQtZmllbGQgLnByZWZpeCB+IGxhYmVsIHtcXG4gIG1hcmdpbi1sZWZ0OiAzcmVtO1xcbn1cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGggOiA5OTJweCkge1xcbiAgLmlucHV0LWZpZWxkIC5wcmVmaXggfiBpbnB1dCB7XFxuICAgIHdpZHRoOiA4NiU7XFxuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAzcmVtKTtcXG4gIH1cXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoIDogNjAwcHgpIHtcXG4gIC5pbnB1dC1maWVsZCAucHJlZml4IH4gaW5wdXQge1xcbiAgICB3aWR0aDogODAlO1xcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gM3JlbSk7XFxuICB9XFxufVxcblxcbi8qIFNlYXJjaCBGaWVsZCAqL1xcbi5pbnB1dC1maWVsZCBpbnB1dFt0eXBlPXNlYXJjaF0ge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIHRyYW5zaXRpb246IDAuM3MgYmFja2dyb3VuZC1jb2xvcjtcXG59XFxuLm5hdi13cmFwcGVyIC5pbnB1dC1maWVsZCBpbnB1dFt0eXBlPXNlYXJjaF0ge1xcbiAgaGVpZ2h0OiBpbmhlcml0O1xcbiAgcGFkZGluZy1sZWZ0OiA0cmVtO1xcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDRyZW0pO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuLmlucHV0LWZpZWxkIGlucHV0W3R5cGU9c2VhcmNoXTpmb2N1czpub3QoLmJyb3dzZXItZGVmYXVsdCkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlcjogMDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogIzQ0NDtcXG59XFxuLmlucHV0LWZpZWxkIGlucHV0W3R5cGU9c2VhcmNoXTpmb2N1czpub3QoLmJyb3dzZXItZGVmYXVsdCkgKyBsYWJlbCBpLCAuaW5wdXQtZmllbGQgaW5wdXRbdHlwZT1zZWFyY2hdOmZvY3VzOm5vdCguYnJvd3Nlci1kZWZhdWx0KSB+IC5tZGktbmF2aWdhdGlvbi1jbG9zZSwgLmlucHV0LWZpZWxkIGlucHV0W3R5cGU9c2VhcmNoXTpmb2N1czpub3QoLmJyb3dzZXItZGVmYXVsdCkgfiAubWF0ZXJpYWwtaWNvbnMge1xcbiAgY29sb3I6ICM0NDQ7XFxufVxcbi5pbnB1dC1maWVsZCBpbnB1dFt0eXBlPXNlYXJjaF0gKyAubGFiZWwtaWNvbiB7XFxuICB0cmFuc2Zvcm06IG5vbmU7XFxuICBsZWZ0OiAxcmVtO1xcbn1cXG4uaW5wdXQtZmllbGQgaW5wdXRbdHlwZT1zZWFyY2hdIH4gLm1kaS1uYXZpZ2F0aW9uLWNsb3NlLCAuaW5wdXQtZmllbGQgaW5wdXRbdHlwZT1zZWFyY2hdIH4gLm1hdGVyaWFsLWljb25zIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAxcmVtO1xcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZm9udC1zaXplOiAycmVtO1xcbiAgdHJhbnNpdGlvbjogMC4zcyBjb2xvcjtcXG59XFxuXFxuLyogVGV4dGFyZWEgKi9cXG50ZXh0YXJlYSB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogNTZweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG50ZXh0YXJlYS50ZXh0YXJlYSB7XFxuICBsaW5lLWhlaWdodDogbm9ybWFsO1xcbiAgb3ZlcmZsb3cteTogaGlkZGVuOyAvKiBwcmV2ZW50cyBzY3JvbGwgYmFyIGZsYXNoICovXFxuICBwYWRkaW5nOiAwLjhyZW0gMCAwLjhyZW0gMDsgLyogcHJldmVudHMgdGV4dCBqdW1wIG9uIEVudGVyIGtleXByZXNzICovXFxuICByZXNpemU6IG5vbmU7XFxuICBtaW4taGVpZ2h0OiA1NnB4O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuLmhpZGRlbmRpdiB7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XFxuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XFxuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkOyAvKiBmdXR1cmUgdmVyc2lvbiBvZiBkZXByZWNhdGVkICd3b3JkLXdyYXAnICovXFxuICBwYWRkaW5nLXRvcDogMS4ycmVtOyAvKiBwcmV2ZW50cyB0ZXh0IGp1bXAgb24gRW50ZXIga2V5cHJlc3MgKi9cXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHotaW5kZXg6IC0xO1xcbn1cXG5cXG4vKiBBdXRvY29tcGxldGUgKi9cXG4uYXV0b2NvbXBsZXRlLWNvbnRlbnQgbGkgLmhpZ2hsaWdodCB7XFxuICBjb2xvcjogIzQ0NDtcXG59XFxuLmF1dG9jb21wbGV0ZS1jb250ZW50IGxpIGltZyB7XFxuICBtYXJnaW46IDVweCAxNXB4O1xcbn1cXG5cXG4vKiBDaGFyYWN0ZXIgQ291bnRlciAqL1xcbi5jaGFyYWN0ZXItY291bnRlciB7XFxuICBtaW4taGVpZ2h0OiAxOHB4O1xcbn1cXG5cXG4vKiBSYWRpbyBCdXR0b25zXFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cXG5bdHlwZT1yYWRpb106bm90KDpjaGVja2VkKSxcXG5bdHlwZT1yYWRpb106Y2hlY2tlZCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBvcGFjaXR5OiAwO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcblt0eXBlPXJhZGlvXTpub3QoOmNoZWNrZWQpICsgc3BhbixcXG5bdHlwZT1yYWRpb106Y2hlY2tlZCArIHNwYW4ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgcGFkZGluZy1sZWZ0OiAzNXB4O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgaGVpZ2h0OiAyNXB4O1xcbiAgbGluZS1oZWlnaHQ6IDI1cHg7XFxuICBmb250LXNpemU6IDFyZW07XFxuICB0cmFuc2l0aW9uOiAwLjI4cyBlYXNlO1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcblt0eXBlPXJhZGlvXSArIHNwYW46YmVmb3JlLFxcblt0eXBlPXJhZGlvXSArIHNwYW46YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbiAgbWFyZ2luOiA0cHg7XFxuICB3aWR0aDogMTZweDtcXG4gIGhlaWdodDogMTZweDtcXG4gIHotaW5kZXg6IDA7XFxuICB0cmFuc2l0aW9uOiAwLjI4cyBlYXNlO1xcbn1cXG5cXG4vKiBVbmNoZWNrZWQgc3R5bGVzICovXFxuW3R5cGU9cmFkaW9dOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOmJlZm9yZSxcXG5bdHlwZT1yYWRpb106bm90KDpjaGVja2VkKSArIHNwYW46YWZ0ZXIsXFxuW3R5cGU9cmFkaW9dOmNoZWNrZWQgKyBzcGFuOmJlZm9yZSxcXG5bdHlwZT1yYWRpb106Y2hlY2tlZCArIHNwYW46YWZ0ZXIsXFxuW3R5cGU9cmFkaW9dLndpdGgtZ2FwOmNoZWNrZWQgKyBzcGFuOmJlZm9yZSxcXG5bdHlwZT1yYWRpb10ud2l0aC1nYXA6Y2hlY2tlZCArIHNwYW46YWZ0ZXIge1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbn1cXG5cXG5bdHlwZT1yYWRpb106bm90KDpjaGVja2VkKSArIHNwYW46YmVmb3JlLFxcblt0eXBlPXJhZGlvXTpub3QoOmNoZWNrZWQpICsgc3BhbjphZnRlciB7XFxuICBib3JkZXI6IDJweCBzb2xpZCAjNWE1YTVhO1xcbn1cXG5cXG5bdHlwZT1yYWRpb106bm90KDpjaGVja2VkKSArIHNwYW46YWZ0ZXIge1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcXG59XFxuXFxuLyogQ2hlY2tlZCBzdHlsZXMgKi9cXG5bdHlwZT1yYWRpb106Y2hlY2tlZCArIHNwYW46YmVmb3JlIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG5bdHlwZT1yYWRpb106Y2hlY2tlZCArIHNwYW46YWZ0ZXIsXFxuW3R5cGU9cmFkaW9dLndpdGgtZ2FwOmNoZWNrZWQgKyBzcGFuOmJlZm9yZSxcXG5bdHlwZT1yYWRpb10ud2l0aC1nYXA6Y2hlY2tlZCArIHNwYW46YWZ0ZXIge1xcbiAgYm9yZGVyOiAycHggc29saWQgIzI2YTY5YTtcXG59XFxuXFxuW3R5cGU9cmFkaW9dOmNoZWNrZWQgKyBzcGFuOmFmdGVyLFxcblt0eXBlPXJhZGlvXS53aXRoLWdhcDpjaGVja2VkICsgc3BhbjphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbn1cXG5cXG5bdHlwZT1yYWRpb106Y2hlY2tlZCArIHNwYW46YWZ0ZXIge1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgxLjAyKTtcXG59XFxuXFxuLyogUmFkaW8gV2l0aCBnYXAgKi9cXG5bdHlwZT1yYWRpb10ud2l0aC1nYXA6Y2hlY2tlZCArIHNwYW46YWZ0ZXIge1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjUpO1xcbn1cXG5cXG4vKiBGb2N1c2VkIHN0eWxlcyAqL1xcblt0eXBlPXJhZGlvXS50YWJiZWQ6Zm9jdXMgKyBzcGFuOmJlZm9yZSB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcXG59XFxuXFxuLyogRGlzYWJsZWQgUmFkaW8gV2l0aCBnYXAgKi9cXG5bdHlwZT1yYWRpb10ud2l0aC1nYXA6ZGlzYWJsZWQ6Y2hlY2tlZCArIHNwYW46YmVmb3JlIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC40Mik7XFxufVxcblxcblt0eXBlPXJhZGlvXS53aXRoLWdhcDpkaXNhYmxlZDpjaGVja2VkICsgc3BhbjphZnRlciB7XFxuICBib3JkZXI6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbn1cXG5cXG4vKiBEaXNhYmxlZCBzdHlsZSAqL1xcblt0eXBlPXJhZGlvXTpkaXNhYmxlZDpub3QoOmNoZWNrZWQpICsgc3BhbjpiZWZvcmUsXFxuW3R5cGU9cmFkaW9dOmRpc2FibGVkOmNoZWNrZWQgKyBzcGFuOmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG59XFxuXFxuW3R5cGU9cmFkaW9dOmRpc2FibGVkICsgc3BhbiB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG59XFxuXFxuW3R5cGU9cmFkaW9dOmRpc2FibGVkOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOmJlZm9yZSB7XFxuICBib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40Mik7XFxufVxcblxcblt0eXBlPXJhZGlvXTpkaXNhYmxlZDpjaGVja2VkICsgc3BhbjphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbiAgYm9yZGVyLWNvbG9yOiAjOTQ5NDk0O1xcbn1cXG5cXG4vKiBDaGVja2JveGVzXFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cXG4vKiBSZW1vdmUgZGVmYXVsdCBjaGVja2JveCAqL1xcblt0eXBlPWNoZWNrYm94XTpub3QoOmNoZWNrZWQpLFxcblt0eXBlPWNoZWNrYm94XTpjaGVja2VkIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIG9wYWNpdHk6IDA7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuW3R5cGU9Y2hlY2tib3hdIHtcXG4gIC8qIGNoZWNrYm94IGFzcGVjdCAqL1xcbn1cXG5bdHlwZT1jaGVja2JveF0gKyBzcGFuOm5vdCgubGV2ZXIpIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHBhZGRpbmctbGVmdDogMzVweDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGhlaWdodDogMjVweDtcXG4gIGxpbmUtaGVpZ2h0OiAyNXB4O1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblt0eXBlPWNoZWNrYm94XSArIHNwYW46bm90KC5sZXZlcik6YmVmb3JlLCBbdHlwZT1jaGVja2JveF06bm90KC5maWxsZWQtaW4pICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMThweDtcXG4gIGhlaWdodDogMThweDtcXG4gIHotaW5kZXg6IDA7XFxuICBib3JkZXI6IDJweCBzb2xpZCAjNWE1YTVhO1xcbiAgYm9yZGVyLXJhZGl1czogMXB4O1xcbiAgbWFyZ2luLXRvcDogM3B4O1xcbiAgdHJhbnNpdGlvbjogMC4ycztcXG59XFxuW3R5cGU9Y2hlY2tib3hdOm5vdCguZmlsbGVkLWluKSArIHNwYW46bm90KC5sZXZlcik6YWZ0ZXIge1xcbiAgYm9yZGVyOiAwO1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcXG59XFxuW3R5cGU9Y2hlY2tib3hdOm5vdCg6Y2hlY2tlZCk6ZGlzYWJsZWQgKyBzcGFuOm5vdCgubGV2ZXIpOmJlZm9yZSB7XFxuICBib3JkZXI6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbn1cXG5bdHlwZT1jaGVja2JveF0udGFiYmVkOmZvY3VzICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMTBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSk7XFxufVxcblxcblt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgc3Bhbjpub3QoLmxldmVyKTpiZWZvcmUge1xcbiAgdG9wOiAtNHB4O1xcbiAgbGVmdDogLTVweDtcXG4gIHdpZHRoOiAxMnB4O1xcbiAgaGVpZ2h0OiAyMnB4O1xcbiAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICMyNmE2OWE7XFxuICBib3JkZXItYm90dG9tOiAycHggc29saWQgIzI2YTY5YTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDQwZGVnKTtcXG4gIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDEwMCUgMTAwJTtcXG59XFxuW3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6ZGlzYWJsZWQgKyBzcGFuOmJlZm9yZSB7XFxuICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC40Mik7XFxufVxcblxcbi8qIEluZGV0ZXJtaW5hdGUgY2hlY2tib3ggKi9cXG5bdHlwZT1jaGVja2JveF06aW5kZXRlcm1pbmF0ZSArIHNwYW46bm90KC5sZXZlcik6YmVmb3JlIHtcXG4gIHRvcDogLTExcHg7XFxuICBsZWZ0OiAtMTJweDtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgaGVpZ2h0OiAyMnB4O1xcbiAgYm9yZGVyLXRvcDogbm9uZTtcXG4gIGJvcmRlci1sZWZ0OiBub25lO1xcbiAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgIzI2YTY5YTtcXG4gIGJvcmRlci1ib3R0b206IG5vbmU7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XFxuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiAxMDAlIDEwMCU7XFxufVxcblt0eXBlPWNoZWNrYm94XTppbmRldGVybWluYXRlOmRpc2FibGVkICsgc3Bhbjpub3QoLmxldmVyKTpiZWZvcmUge1xcbiAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG5bdHlwZT1jaGVja2JveF0uZmlsbGVkLWluICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxufVxcblt0eXBlPWNoZWNrYm94XS5maWxsZWQtaW4gKyBzcGFuOm5vdCgubGV2ZXIpOmJlZm9yZSxcXG5bdHlwZT1jaGVja2JveF0uZmlsbGVkLWluICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGxlZnQ6IDA7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAvKiAuMXMgZGVsYXkgaXMgZm9yIGNoZWNrIGFuaW1hdGlvbiAqL1xcbiAgdHJhbnNpdGlvbjogYm9yZGVyIDAuMjVzLCBiYWNrZ3JvdW5kLWNvbG9yIDAuMjVzLCB3aWR0aCAwLjJzIDAuMXMsIGhlaWdodCAwLjJzIDAuMXMsIHRvcCAwLjJzIDAuMXMsIGxlZnQgMC4ycyAwLjFzO1xcbiAgei1pbmRleDogMTtcXG59XFxuW3R5cGU9Y2hlY2tib3hdLmZpbGxlZC1pbjpub3QoOmNoZWNrZWQpICsgc3Bhbjpub3QoLmxldmVyKTpiZWZvcmUge1xcbiAgd2lkdGg6IDA7XFxuICBoZWlnaHQ6IDA7XFxuICBib3JkZXI6IDNweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGxlZnQ6IDZweDtcXG4gIHRvcDogMTBweDtcXG4gIHRyYW5zZm9ybTogcm90YXRlWigzN2RlZyk7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiAxMDAlIDEwMCU7XFxufVxcblt0eXBlPWNoZWNrYm94XS5maWxsZWQtaW46bm90KDpjaGVja2VkKSArIHNwYW46bm90KC5sZXZlcik6YWZ0ZXIge1xcbiAgaGVpZ2h0OiAyMHB4O1xcbiAgd2lkdGg6IDIwcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMnB4IHNvbGlkICM1YTVhNWE7XFxuICB0b3A6IDBweDtcXG4gIHotaW5kZXg6IDA7XFxufVxcblt0eXBlPWNoZWNrYm94XS5maWxsZWQtaW46Y2hlY2tlZCArIHNwYW46bm90KC5sZXZlcik6YmVmb3JlIHtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDFweDtcXG4gIHdpZHRoOiA4cHg7XFxuICBoZWlnaHQ6IDEzcHg7XFxuICBib3JkZXItdG9wOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItbGVmdDogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgI2ZmZjtcXG4gIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZmZmO1xcbiAgdHJhbnNmb3JtOiByb3RhdGVaKDM3ZGVnKTtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDEwMCUgMTAwJTtcXG59XFxuW3R5cGU9Y2hlY2tib3hdLmZpbGxlZC1pbjpjaGVja2VkICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxuICB0b3A6IDA7XFxuICB3aWR0aDogMjBweDtcXG4gIGhlaWdodDogMjBweDtcXG4gIGJvcmRlcjogMnB4IHNvbGlkICMyNmE2OWE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbiAgei1pbmRleDogMDtcXG59XFxuW3R5cGU9Y2hlY2tib3hdLmZpbGxlZC1pbi50YWJiZWQ6Zm9jdXMgKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIGJvcmRlci1jb2xvcjogIzVhNWE1YTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKTtcXG59XFxuW3R5cGU9Y2hlY2tib3hdLmZpbGxlZC1pbi50YWJiZWQ6Y2hlY2tlZDpmb2N1cyArIHNwYW46bm90KC5sZXZlcik6YWZ0ZXIge1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YTY5YTtcXG4gIGJvcmRlci1jb2xvcjogIzI2YTY5YTtcXG59XFxuW3R5cGU9Y2hlY2tib3hdLmZpbGxlZC1pbjpkaXNhYmxlZDpub3QoOmNoZWNrZWQpICsgc3Bhbjpub3QoLmxldmVyKTpiZWZvcmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuW3R5cGU9Y2hlY2tib3hdLmZpbGxlZC1pbjpkaXNhYmxlZDpub3QoOmNoZWNrZWQpICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzk0OTQ5NDtcXG59XFxuW3R5cGU9Y2hlY2tib3hdLmZpbGxlZC1pbjpkaXNhYmxlZDpjaGVja2VkICsgc3Bhbjpub3QoLmxldmVyKTpiZWZvcmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblt0eXBlPWNoZWNrYm94XS5maWxsZWQtaW46ZGlzYWJsZWQ6Y2hlY2tlZCArIHNwYW46bm90KC5sZXZlcik6YWZ0ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzk0OTQ5NDtcXG4gIGJvcmRlci1jb2xvcjogIzk0OTQ5NDtcXG59XFxuXFxuLyogU3dpdGNoXFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cXG4uc3dpdGNoLFxcbi5zd2l0Y2ggKiB7XFxuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcbi5zd2l0Y2ggbGFiZWwge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uc3dpdGNoIGxhYmVsIGlucHV0W3R5cGU9Y2hlY2tib3hdIHtcXG4gIG9wYWNpdHk6IDA7XFxuICB3aWR0aDogMDtcXG4gIGhlaWdodDogMDtcXG59XFxuLnN3aXRjaCBsYWJlbCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmxldmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4NGM3YzE7XFxufVxcbi5zd2l0Y2ggbGFiZWwgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIC5sZXZlcjpiZWZvcmUsIC5zd2l0Y2ggbGFiZWwgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIC5sZXZlcjphZnRlciB7XFxuICBsZWZ0OiAxOHB4O1xcbn1cXG4uc3dpdGNoIGxhYmVsIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyAubGV2ZXI6YWZ0ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YTY5YTtcXG59XFxuXFxuLnN3aXRjaCBsYWJlbCAubGV2ZXIge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMzZweDtcXG4gIGhlaWdodDogMTRweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zOCk7XFxuICBib3JkZXItcmFkaXVzOiAxNXB4O1xcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjNzIGVhc2U7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgbWFyZ2luOiAwIDE2cHg7XFxufVxcbi5zd2l0Y2ggbGFiZWwgLmxldmVyOmJlZm9yZSwgLnN3aXRjaCBsYWJlbCAubGV2ZXI6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogMjBweDtcXG4gIGhlaWdodDogMjBweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGxlZnQ6IDA7XFxuICB0b3A6IC0zcHg7XFxuICB0cmFuc2l0aW9uOiBsZWZ0IDAuM3MgZWFzZSwgYmFja2dyb3VuZCAwLjNzIGVhc2UsIGJveC1zaGFkb3cgMC4xcyBlYXNlLCB0cmFuc2Zvcm0gMC4xcyBlYXNlO1xcbn1cXG4uc3dpdGNoIGxhYmVsIC5sZXZlcjpiZWZvcmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgzOCwgMTY2LCAxNTQsIDAuMTUpO1xcbn1cXG4uc3dpdGNoIGxhYmVsIC5sZXZlcjphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjFGMUYxO1xcbiAgYm94LXNoYWRvdzogMHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcXG59XFxuXFxuaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpub3QoOmRpc2FibGVkKSB+IC5sZXZlcjphY3RpdmU6OmJlZm9yZSxcXG5pbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOm5vdCg6ZGlzYWJsZWQpLnRhYmJlZDpmb2N1cyB+IC5sZXZlcjo6YmVmb3JlIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMi40KTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMzgsIDE2NiwgMTU0LCAwLjE1KTtcXG59XFxuXFxuaW5wdXRbdHlwZT1jaGVja2JveF06bm90KDpkaXNhYmxlZCkgfiAubGV2ZXI6YWN0aXZlOmJlZm9yZSxcXG5pbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKS50YWJiZWQ6Zm9jdXMgfiAubGV2ZXI6OmJlZm9yZSB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDIuNCk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDgpO1xcbn1cXG5cXG4uc3dpdGNoIGlucHV0W3R5cGU9Y2hlY2tib3hdW2Rpc2FibGVkXSArIC5sZXZlciB7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMTIpO1xcbn1cXG5cXG4uc3dpdGNoIGxhYmVsIGlucHV0W3R5cGU9Y2hlY2tib3hdW2Rpc2FibGVkXSArIC5sZXZlcjphZnRlcixcXG4uc3dpdGNoIGxhYmVsIGlucHV0W3R5cGU9Y2hlY2tib3hdW2Rpc2FibGVkXTpjaGVja2VkICsgLmxldmVyOmFmdGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5NDk0OTQ7XFxufVxcblxcbi8qIFNlbGVjdCBGaWVsZFxcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXFxuc2VsZWN0IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbnNlbGVjdC5icm93c2VyLWRlZmF1bHQge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbnNlbGVjdCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IDVweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNmMmYyZjI7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBoZWlnaHQ6IDU2cHg7XFxufVxcblxcbi5zZWxlY3QtbGFiZWwge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbn1cXG5cXG4uc2VsZWN0LXdyYXBwZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uc2VsZWN0LXdyYXBwZXIudmFsaWQgKyBsYWJlbCwgLnNlbGVjdC13cmFwcGVyLmludmFsaWQgKyBsYWJlbCB7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG4uc2VsZWN0LXdyYXBwZXIgaW5wdXQuc2VsZWN0LWRyb3Bkb3duIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiBub25lO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM5ZTllOWU7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgaGVpZ2h0OiA1NnB4O1xcbiAgbGluZS1oZWlnaHQ6IDU2cHg7XFxuICB3aWR0aDogMTAwJTtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG4gIG1hcmdpbjogMCAwIDhweCAwO1xcbiAgcGFkZGluZzogMDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICB6LWluZGV4OiAxO1xcbn1cXG4uc2VsZWN0LXdyYXBwZXIgaW5wdXQuc2VsZWN0LWRyb3Bkb3duOmZvY3VzIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMjZhNjlhO1xcbn1cXG4uc2VsZWN0LXdyYXBwZXIgLmNhcmV0IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbWFyZ2luOiBhdXRvIDA7XFxuICB6LWluZGV4OiAwO1xcbiAgZmlsbDogcmdiYSgwLCAwLCAwLCAwLjg3KTtcXG59XFxuLnNlbGVjdC13cmFwcGVyICsgbGFiZWwge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAtMjZweDtcXG4gIGZvbnQtc2l6ZTogMC44cmVtO1xcbn1cXG5cXG5zZWxlY3Q6ZGlzYWJsZWQge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40Mik7XFxufVxcblxcbi5zZWxlY3Qtd3JhcHBlci5kaXNhYmxlZCArIGxhYmVsIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbn1cXG4uc2VsZWN0LXdyYXBwZXIuZGlzYWJsZWQgLmNhcmV0IHtcXG4gIGZpbGw6IHJnYmEoMCwgMCwgMCwgMC40Mik7XFxufVxcblxcbi5zZWxlY3Qtd3JhcHBlciBpbnB1dC5zZWxlY3QtZHJvcGRvd246ZGlzYWJsZWQge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40Mik7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLnNlbGVjdC13cmFwcGVyIGkge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zKTtcXG59XFxuXFxuLnNlbGVjdC1kcm9wZG93biBsaS5kaXNhYmxlZCxcXG4uc2VsZWN0LWRyb3Bkb3duIGxpLmRpc2FibGVkID4gc3BhbixcXG4uc2VsZWN0LWRyb3Bkb3duIGxpLm9wdGdyb3VwIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMyk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuYm9keS5rZXlib2FyZC1mb2N1c2VkIC5zZWxlY3QtZHJvcGRvd24uZHJvcGRvd24tY29udGVudCBsaTpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDgpO1xcbn1cXG5cXG4uc2VsZWN0LWRyb3Bkb3duLmRyb3Bkb3duLWNvbnRlbnQgbGk6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA4KTtcXG59XFxuLnNlbGVjdC1kcm9wZG93bi5kcm9wZG93bi1jb250ZW50IGxpLnNlbGVjdGVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wMyk7XFxufVxcblxcbi5wcmVmaXggfiAuc2VsZWN0LXdyYXBwZXIge1xcbiAgbWFyZ2luLWxlZnQ6IDNyZW07XFxuICB3aWR0aDogOTIlO1xcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDNyZW0pO1xcbn1cXG5cXG4ucHJlZml4IH4gbGFiZWwge1xcbiAgbWFyZ2luLWxlZnQ6IDNyZW07XFxufVxcblxcbi5zZWxlY3QtZHJvcGRvd24gbGkgaW1nIHtcXG4gIG1hcmdpbjogNXB4IDE1cHg7XFxuICBmbG9hdDogcmlnaHQ7XFxufVxcblxcbi5zZWxlY3QtZHJvcGRvd24gbGkub3B0Z3JvdXAuc2VsZWN0ZWQgPiBzcGFuIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNyk7XFxufVxcbi5zZWxlY3QtZHJvcGRvd24gbGkub3B0Z3JvdXAgPiBzcGFuIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNCk7XFxufVxcbi5zZWxlY3QtZHJvcGRvd24gbGkub3B0Z3JvdXAgfiBsaS5vcHRncm91cC1vcHRpb24ge1xcbiAgcGFkZGluZy1sZWZ0OiAxcmVtO1xcbn1cXG5cXG4vKiBGaWxlIElucHV0XFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cXG4uZmlsZS1maWVsZCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5maWxlLWZpZWxkIC5maWxlLXBhdGgtd3JhcHBlciB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgcGFkZGluZy1sZWZ0OiAxMHB4O1xcbn1cXG4uZmlsZS1maWVsZCBpbnB1dC5maWxlLXBhdGgge1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcbi5maWxlLWZpZWxkIC5idG4sIC5maWxlLWZpZWxkIC5idG4tc21hbGwsIC5maWxlLWZpZWxkIC5idG4tbGFyZ2Uge1xcbiAgZmxvYXQ6IGxlZnQ7XFxuICBoZWlnaHQ6IDU2cHg7XFxuICBsaW5lLWhlaWdodDogNTZweDtcXG59XFxuLmZpbGUtZmllbGQgc3BhbiB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5maWxlLWZpZWxkIGlucHV0W3R5cGU9ZmlsZV0ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBsZWZ0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgZm9udC1zaXplOiAyMHB4O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgb3BhY2l0eTogMDtcXG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT0wKTtcXG59XFxuLmZpbGUtZmllbGQgaW5wdXRbdHlwZT1maWxlXTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24ge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLyogUmFuZ2VcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcbi5yYW5nZS1maWVsZCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdLFxcbmlucHV0W3R5cGU9cmFuZ2VdICsgLnRodW1iIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV0ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IG5vbmU7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXJnaW46IDE1cHggMDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcbmlucHV0W3R5cGU9cmFuZ2VdOmZvY3VzIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdICsgLnRodW1iIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMTBweDtcXG4gIGxlZnQ6IDA7XFxuICBib3JkZXI6IG5vbmU7XFxuICBoZWlnaHQ6IDA7XFxuICB3aWR0aDogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmE2OWE7XFxuICBtYXJnaW4tbGVmdDogN3B4O1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDUwJTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XFxufVxcbmlucHV0W3R5cGU9cmFuZ2VdICsgLnRodW1iIC52YWx1ZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAzMHB4O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgY29sb3I6ICMyNmE2OWE7XFxuICBmb250LXNpemU6IDA7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XFxufVxcbmlucHV0W3R5cGU9cmFuZ2VdICsgLnRodW1iLmFjdGl2ZSB7XFxuICBib3JkZXItcmFkaXVzOiA1MCUgNTAlIDUwJSAwO1xcbn1cXG5pbnB1dFt0eXBlPXJhbmdlXSArIC50aHVtYi5hY3RpdmUgLnZhbHVlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XFxuICBtYXJnaW4tdG9wOiA4cHg7XFxuICBmb250LXNpemU6IDEwcHg7XFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV06Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrIHtcXG4gIGhlaWdodDogM3B4O1xcbiAgYmFja2dyb3VuZDogI2MyYzBjMjtcXG4gIGJvcmRlcjogbm9uZTtcXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV06Oi13ZWJraXQtc2xpZGVyLXRodW1iIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGhlaWdodDogMTRweDtcXG4gIHdpZHRoOiAxNHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYmFja2dyb3VuZDogIzI2YTY5YTtcXG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4zcztcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmE2OWE7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgNTAlO1xcbiAgbWFyZ2luOiAtNXB4IDAgMCAwO1xcbn1cXG5cXG4ua2V5Ym9hcmQtZm9jdXNlZCBpbnB1dFt0eXBlPXJhbmdlXTpmb2N1czpub3QoLmFjdGl2ZSk6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDEwcHggcmdiYSgzOCwgMTY2LCAxNTQsIDAuMjYpO1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXSB7XFxuICAvKiBmaXggZm9yIEZGIHVuYWJsZSB0byBhcHBseSBmb2N1cyBzdHlsZSBidWcgICovXFxuICBib3JkZXI6IDFweCBzb2xpZCB3aGl0ZTtcXG4gIC8qcmVxdWlyZWQgZm9yIHByb3BlciB0cmFjayBzaXppbmcgaW4gRkYqL1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXTo6LW1vei1yYW5nZS10cmFjayB7XFxuICBoZWlnaHQ6IDNweDtcXG4gIGJhY2tncm91bmQ6ICNjMmMwYzI7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdOjotbW96LWZvY3VzLWlubmVyIHtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV06Oi1tb3otcmFuZ2UtdGh1bWIge1xcbiAgYm9yZGVyOiBub25lO1xcbiAgaGVpZ2h0OiAxNHB4O1xcbiAgd2lkdGg6IDE0cHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBiYWNrZ3JvdW5kOiAjMjZhNjlhO1xcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjNzO1xcbiAgbWFyZ2luLXRvcDogLTVweDtcXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV06LW1vei1mb2N1c3Jpbmcge1xcbiAgb3V0bGluZTogMXB4IHNvbGlkICNmZmY7XFxuICBvdXRsaW5lLW9mZnNldDogLTFweDtcXG59XFxuXFxuLmtleWJvYXJkLWZvY3VzZWQgaW5wdXRbdHlwZT1yYW5nZV06Zm9jdXM6bm90KC5hY3RpdmUpOjotbW96LXJhbmdlLXRodW1iIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDEwcHggcmdiYSgzOCwgMTY2LCAxNTQsIDAuMjYpO1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRyYWNrIHtcXG4gIGhlaWdodDogM3B4O1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXdpZHRoOiA2cHggMDtcXG4gIC8qcmVtb3ZlIGRlZmF1bHQgdGljayBtYXJrcyovXFxuICBjb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmlsbC1sb3dlciB7XFxuICBiYWNrZ3JvdW5kOiAjNzc3O1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXTo6LW1zLWZpbGwtdXBwZXIge1xcbiAgYmFja2dyb3VuZDogI2RkZDtcXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10aHVtYiB7XFxuICBib3JkZXI6IG5vbmU7XFxuICBoZWlnaHQ6IDE0cHg7XFxuICB3aWR0aDogMTRweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJhY2tncm91bmQ6ICMyNmE2OWE7XFxuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuM3M7XFxufVxcblxcbi5rZXlib2FyZC1mb2N1c2VkIGlucHV0W3R5cGU9cmFuZ2VdOmZvY3VzOm5vdCguYWN0aXZlKTo6LW1zLXRodW1iIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDEwcHggcmdiYSgzOCwgMTY2LCAxNTQsIDAuMjYpO1xcbn1cXG5cXG4ucGFyYWxsYXgge1xcbiAgLyogU2V0IGEgc3BlY2lmaWMgaGVpZ2h0ICovXFxuICBtaW4taGVpZ2h0OiA1MDBweDtcXG4gIC8qIENyZWF0ZSB0aGUgcGFyYWxsYXggc2Nyb2xsaW5nIGVmZmVjdCAqL1xcbiAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xcbn1cXG5cXG4qIHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcblxcbmJvZHkge1xcbiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7XFxufVxcblxcbi5zY2VuZSB7XFxuICB3aWR0aDogMjAwcHg7XFxuICBoZWlnaHQ6IDIwMHB4O1xcbiAgYm9yZGVyOiAxcHggc29saWQgI0NDQztcXG4gIG1hcmdpbjogODBweDtcXG4gIHBlcnNwZWN0aXZlOiA0MDBweDtcXG59XFxuXFxuLmN1YmUge1xcbiAgd2lkdGg6IDIwMHB4O1xcbiAgaGVpZ2h0OiAyMDBweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Q7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooLTQwMHB4KTtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxcztcXG59XFxuXFxuLmN1YmUuc2hvdy1mcm9udCB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooLTEwcHgpIHJvdGF0ZVkoMGRlZyk7XFxufVxcblxcbi5jdWJlLnNob3ctcmlnaHQge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKC0xMHB4KSByb3RhdGVZKC05MGRlZyk7XFxufVxcblxcbi5jdWJlLnNob3ctYmFjayB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooLTEwcHgpIHJvdGF0ZVkoLTE4MGRlZyk7XFxufVxcblxcbi5jdWJlLnNob3ctbGVmdCB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooLTEwcHgpIHJvdGF0ZVkoOTBkZWcpO1xcbn1cXG5cXG4uY3ViZS5zaG93LXRvcCB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooLTEwcHgpIHJvdGF0ZVgoLTkwZGVnKTtcXG59XFxuXFxuLmN1YmUuc2hvdy1ib3R0b20ge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKC0xMHB4KSByb3RhdGVYKDkwZGVnKTtcXG59XFxuXFxuLmN1YmVfX2ZhY2Uge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDIwMHB4O1xcbiAgaGVpZ2h0OiAyMDBweDtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIGJsYWNrO1xcbiAgbGluZS1oZWlnaHQ6IDIwMHB4O1xcbiAgZm9udC1zaXplOiA0MHB4O1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICBjb2xvcjogd2hpdGU7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi5jdWJlX19mYWNlLS1mcm9udCB7XFxuICBiYWNrZ3JvdW5kOiBoc2xhKDBkZWcsIDEwMCUsIDUwJSwgMC43KTtcXG59XFxuXFxuLmN1YmVfX2ZhY2UtLXJpZ2h0IHtcXG4gIGJhY2tncm91bmQ6IGhzbGEoNjBkZWcsIDEwMCUsIDUwJSwgMC43KTtcXG59XFxuXFxuLmN1YmVfX2ZhY2UtLWJhY2sge1xcbiAgYmFja2dyb3VuZDogaHNsYSgxMjBkZWcsIDEwMCUsIDUwJSwgMC43KTtcXG59XFxuXFxuLmN1YmVfX2ZhY2UtLWxlZnQge1xcbiAgYmFja2dyb3VuZDogaHNsYSgxODBkZWcsIDEwMCUsIDUwJSwgMC43KTtcXG59XFxuXFxuLmN1YmVfX2ZhY2UtLXRvcCB7XFxuICBiYWNrZ3JvdW5kOiBoc2xhKDI0MGRlZywgMTAwJSwgNTAlLCAwLjcpO1xcbn1cXG5cXG4uY3ViZV9fZmFjZS0tYm90dG9tIHtcXG4gIGJhY2tncm91bmQ6IGhzbGEoMzAwZGVnLCAxMDAlLCA1MCUsIDAuNyk7XFxufVxcblxcbi5jdWJlX19mYWNlLS1mcm9udCB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZVkoMGRlZykgdHJhbnNsYXRlWigxMDBweCk7XFxufVxcblxcbi5jdWJlX19mYWNlLS1yaWdodCB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZVkoOTBkZWcpIHRyYW5zbGF0ZVooMTAwcHgpO1xcbn1cXG5cXG4uY3ViZV9fZmFjZS0tYmFjayB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZVkoMTgwZGVnKSB0cmFuc2xhdGVaKDEwMHB4KTtcXG59XFxuXFxuLmN1YmVfX2ZhY2UtLWxlZnQge1xcbiAgdHJhbnNmb3JtOiByb3RhdGVZKC05MGRlZykgdHJhbnNsYXRlWigxMDBweCk7XFxufVxcblxcbi5jdWJlX19mYWNlLS10b3Age1xcbiAgdHJhbnNmb3JtOiByb3RhdGVYKDkwZGVnKSB0cmFuc2xhdGVaKDEwMHB4KTtcXG59XFxuXFxuLmN1YmVfX2ZhY2UtLWJvdHRvbSB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZVgoLTkwZGVnKSB0cmFuc2xhdGVaKDEwMHB4KTtcXG59XFxuXFxubGFiZWwge1xcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xcbn1cXG5cXG4uY29udGFpbmVyIHtcXG4gIG1hcmdpbjogMCBhdXRvO1xcbiAgbWF4LXdpZHRoOiAxMjgwcHg7XFxuICB3aWR0aDogOTAlO1xcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiA2MDFweCkge1xcbiAgLmNvbnRhaW5lciB7XFxuICAgIHdpZHRoOiA4NSU7XFxuICB9XFxufVxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6IDk5M3B4KSB7XFxuICAuY29udGFpbmVyIHtcXG4gICAgd2lkdGg6IDcwJTtcXG4gIH1cXG59XFxuLmNvbCAucm93IHtcXG4gIG1hcmdpbi1sZWZ0OiAtMC41cmVtO1xcbiAgbWFyZ2luLXJpZ2h0OiAtMC41cmVtO1xcbn1cXG5cXG4uc2VjdGlvbiB7XFxuICBwYWRkaW5nLXRvcDogMXJlbTtcXG4gIHBhZGRpbmctYm90dG9tOiAxcmVtO1xcbn1cXG4uc2VjdGlvbi5uby1wYWQge1xcbiAgcGFkZGluZzogMDtcXG59XFxuLnNlY3Rpb24ubm8tcGFkLWJvdCB7XFxuICBwYWRkaW5nLWJvdHRvbTogMDtcXG59XFxuLnNlY3Rpb24ubm8tcGFkLXRvcCB7XFxuICBwYWRkaW5nLXRvcDogMDtcXG59XFxuXFxuLnJvdyB7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIG1hcmdpbi1yaWdodDogYXV0bztcXG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XFxufVxcbi5yb3c6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBkaXNwbGF5OiB0YWJsZTtcXG4gIGNsZWFyOiBib3RoO1xcbn1cXG4ucm93IC5jb2wge1xcbiAgZmxvYXQ6IGxlZnQ7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgcGFkZGluZzogMCAwLjVyZW07XFxuICBtaW4taGVpZ2h0OiAxcHg7XFxufVxcbi5yb3cgLmNvbFtjbGFzcyo9cHVzaC1dLCAucm93IC5jb2xbY2xhc3MqPXB1bGwtXSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5yb3cgLmNvbC5zMSB7XFxuICB3aWR0aDogOC4zMzMzMzMzMzMzJTtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbGVmdDogYXV0bztcXG4gIHJpZ2h0OiBhdXRvO1xcbn1cXG4ucm93IC5jb2wuczIge1xcbiAgd2lkdGg6IDE2LjY2NjY2NjY2NjclO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBsZWZ0OiBhdXRvO1xcbiAgcmlnaHQ6IGF1dG87XFxufVxcbi5yb3cgLmNvbC5zMyB7XFxuICB3aWR0aDogMjUlO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBsZWZ0OiBhdXRvO1xcbiAgcmlnaHQ6IGF1dG87XFxufVxcbi5yb3cgLmNvbC5zNCB7XFxuICB3aWR0aDogMzMuMzMzMzMzMzMzMyU7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogYXV0bztcXG59XFxuLnJvdyAuY29sLnM1IHtcXG4gIHdpZHRoOiA0MS42NjY2NjY2NjY3JTtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbGVmdDogYXV0bztcXG4gIHJpZ2h0OiBhdXRvO1xcbn1cXG4ucm93IC5jb2wuczYge1xcbiAgd2lkdGg6IDUwJTtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbGVmdDogYXV0bztcXG4gIHJpZ2h0OiBhdXRvO1xcbn1cXG4ucm93IC5jb2wuczcge1xcbiAgd2lkdGg6IDU4LjMzMzMzMzMzMzMlO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBsZWZ0OiBhdXRvO1xcbiAgcmlnaHQ6IGF1dG87XFxufVxcbi5yb3cgLmNvbC5zOCB7XFxuICB3aWR0aDogNjYuNjY2NjY2NjY2NyU7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogYXV0bztcXG59XFxuLnJvdyAuY29sLnM5IHtcXG4gIHdpZHRoOiA3NSU7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogYXV0bztcXG59XFxuLnJvdyAuY29sLnMxMCB7XFxuICB3aWR0aDogODMuMzMzMzMzMzMzMyU7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogYXV0bztcXG59XFxuLnJvdyAuY29sLnMxMSB7XFxuICB3aWR0aDogOTEuNjY2NjY2NjY2NyU7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogYXV0bztcXG59XFxuLnJvdyAuY29sLnMxMiB7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbGVmdDogYXV0bztcXG4gIHJpZ2h0OiBhdXRvO1xcbn1cXG4ucm93IC5jb2wub2Zmc2V0LXMxIHtcXG4gIG1hcmdpbi1sZWZ0OiA4LjMzMzMzMzMzMzMlO1xcbn1cXG4ucm93IC5jb2wucHVsbC1zMSB7XFxuICByaWdodDogOC4zMzMzMzMzMzMzJTtcXG59XFxuLnJvdyAuY29sLnB1c2gtczEge1xcbiAgbGVmdDogOC4zMzMzMzMzMzMzJTtcXG59XFxuLnJvdyAuY29sLm9mZnNldC1zMiB7XFxuICBtYXJnaW4tbGVmdDogMTYuNjY2NjY2NjY2NyU7XFxufVxcbi5yb3cgLmNvbC5wdWxsLXMyIHtcXG4gIHJpZ2h0OiAxNi42NjY2NjY2NjY3JTtcXG59XFxuLnJvdyAuY29sLnB1c2gtczIge1xcbiAgbGVmdDogMTYuNjY2NjY2NjY2NyU7XFxufVxcbi5yb3cgLmNvbC5vZmZzZXQtczMge1xcbiAgbWFyZ2luLWxlZnQ6IDI1JTtcXG59XFxuLnJvdyAuY29sLnB1bGwtczMge1xcbiAgcmlnaHQ6IDI1JTtcXG59XFxuLnJvdyAuY29sLnB1c2gtczMge1xcbiAgbGVmdDogMjUlO1xcbn1cXG4ucm93IC5jb2wub2Zmc2V0LXM0IHtcXG4gIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMzMzMzJTtcXG59XFxuLnJvdyAuY29sLnB1bGwtczQge1xcbiAgcmlnaHQ6IDMzLjMzMzMzMzMzMzMlO1xcbn1cXG4ucm93IC5jb2wucHVzaC1zNCB7XFxuICBsZWZ0OiAzMy4zMzMzMzMzMzMzJTtcXG59XFxuLnJvdyAuY29sLm9mZnNldC1zNSB7XFxuICBtYXJnaW4tbGVmdDogNDEuNjY2NjY2NjY2NyU7XFxufVxcbi5yb3cgLmNvbC5wdWxsLXM1IHtcXG4gIHJpZ2h0OiA0MS42NjY2NjY2NjY3JTtcXG59XFxuLnJvdyAuY29sLnB1c2gtczUge1xcbiAgbGVmdDogNDEuNjY2NjY2NjY2NyU7XFxufVxcbi5yb3cgLmNvbC5vZmZzZXQtczYge1xcbiAgbWFyZ2luLWxlZnQ6IDUwJTtcXG59XFxuLnJvdyAuY29sLnB1bGwtczYge1xcbiAgcmlnaHQ6IDUwJTtcXG59XFxuLnJvdyAuY29sLnB1c2gtczYge1xcbiAgbGVmdDogNTAlO1xcbn1cXG4ucm93IC5jb2wub2Zmc2V0LXM3IHtcXG4gIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMzMzJTtcXG59XFxuLnJvdyAuY29sLnB1bGwtczcge1xcbiAgcmlnaHQ6IDU4LjMzMzMzMzMzMzMlO1xcbn1cXG4ucm93IC5jb2wucHVzaC1zNyB7XFxuICBsZWZ0OiA1OC4zMzMzMzMzMzMzJTtcXG59XFxuLnJvdyAuY29sLm9mZnNldC1zOCB7XFxuICBtYXJnaW4tbGVmdDogNjYuNjY2NjY2NjY2NyU7XFxufVxcbi5yb3cgLmNvbC5wdWxsLXM4IHtcXG4gIHJpZ2h0OiA2Ni42NjY2NjY2NjY3JTtcXG59XFxuLnJvdyAuY29sLnB1c2gtczgge1xcbiAgbGVmdDogNjYuNjY2NjY2NjY2NyU7XFxufVxcbi5yb3cgLmNvbC5vZmZzZXQtczkge1xcbiAgbWFyZ2luLWxlZnQ6IDc1JTtcXG59XFxuLnJvdyAuY29sLnB1bGwtczkge1xcbiAgcmlnaHQ6IDc1JTtcXG59XFxuLnJvdyAuY29sLnB1c2gtczkge1xcbiAgbGVmdDogNzUlO1xcbn1cXG4ucm93IC5jb2wub2Zmc2V0LXMxMCB7XFxuICBtYXJnaW4tbGVmdDogODMuMzMzMzMzMzMzMyU7XFxufVxcbi5yb3cgLmNvbC5wdWxsLXMxMCB7XFxuICByaWdodDogODMuMzMzMzMzMzMzMyU7XFxufVxcbi5yb3cgLmNvbC5wdXNoLXMxMCB7XFxuICBsZWZ0OiA4My4zMzMzMzMzMzMzJTtcXG59XFxuLnJvdyAuY29sLm9mZnNldC1zMTEge1xcbiAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NjY2NjclO1xcbn1cXG4ucm93IC5jb2wucHVsbC1zMTEge1xcbiAgcmlnaHQ6IDkxLjY2NjY2NjY2NjclO1xcbn1cXG4ucm93IC5jb2wucHVzaC1zMTEge1xcbiAgbGVmdDogOTEuNjY2NjY2NjY2NyU7XFxufVxcbi5yb3cgLmNvbC5vZmZzZXQtczEyIHtcXG4gIG1hcmdpbi1sZWZ0OiAxMDAlO1xcbn1cXG4ucm93IC5jb2wucHVsbC1zMTIge1xcbiAgcmlnaHQ6IDEwMCU7XFxufVxcbi5yb3cgLmNvbC5wdXNoLXMxMiB7XFxuICBsZWZ0OiAxMDAlO1xcbn1cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiA2MDFweCkge1xcbiAgLnJvdyAuY29sLm0xIHtcXG4gICAgd2lkdGg6IDguMzMzMzMzMzMzMyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5tMiB7XFxuICAgIHdpZHRoOiAxNi42NjY2NjY2NjY3JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLm0zIHtcXG4gICAgd2lkdGg6IDI1JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLm00IHtcXG4gICAgd2lkdGg6IDMzLjMzMzMzMzMzMzMlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubTUge1xcbiAgICB3aWR0aDogNDEuNjY2NjY2NjY2NyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5tNiB7XFxuICAgIHdpZHRoOiA1MCU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5tNyB7XFxuICAgIHdpZHRoOiA1OC4zMzMzMzMzMzMzJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLm04IHtcXG4gICAgd2lkdGg6IDY2LjY2NjY2NjY2NjclO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubTkge1xcbiAgICB3aWR0aDogNzUlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubTEwIHtcXG4gICAgd2lkdGg6IDgzLjMzMzMzMzMzMzMlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubTExIHtcXG4gICAgd2lkdGg6IDkxLjY2NjY2NjY2NjclO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubTEyIHtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbTEge1xcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLW0xIHtcXG4gICAgcmlnaHQ6IDguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1tMSB7XFxuICAgIGxlZnQ6IDguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LW0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbTIge1xcbiAgICByaWdodDogMTYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1tMiB7XFxuICAgIGxlZnQ6IDE2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1tMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyNSU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1tMyB7XFxuICAgIHJpZ2h0OiAyNSU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1tMyB7XFxuICAgIGxlZnQ6IDI1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbTQge1xcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1tNCB7XFxuICAgIHJpZ2h0OiAzMy4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLW00IHtcXG4gICAgbGVmdDogMzMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LW01IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbTUge1xcbiAgICByaWdodDogNDEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1tNSB7XFxuICAgIGxlZnQ6IDQxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1tNiB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1tNiB7XFxuICAgIHJpZ2h0OiA1MCU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1tNiB7XFxuICAgIGxlZnQ6IDUwJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbTcge1xcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1tNyB7XFxuICAgIHJpZ2h0OiA1OC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLW03IHtcXG4gICAgbGVmdDogNTguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LW04IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbTgge1xcbiAgICByaWdodDogNjYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1tOCB7XFxuICAgIGxlZnQ6IDY2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1tOSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA3NSU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1tOSB7XFxuICAgIHJpZ2h0OiA3NSU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1tOSB7XFxuICAgIGxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbTEwIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbTEwIHtcXG4gICAgcmlnaHQ6IDgzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbTEwIHtcXG4gICAgbGVmdDogODMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LW0xMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLW0xMSB7XFxuICAgIHJpZ2h0OiA5MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLW0xMSB7XFxuICAgIGxlZnQ6IDkxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1tMTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTAwJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLW0xMiB7XFxuICAgIHJpZ2h0OiAxMDAlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbTEyIHtcXG4gICAgbGVmdDogMTAwJTtcXG4gIH1cXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoIDogOTkzcHgpIHtcXG4gIC5yb3cgLmNvbC5sMSB7XFxuICAgIHdpZHRoOiA4LjMzMzMzMzMzMzMlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubDIge1xcbiAgICB3aWR0aDogMTYuNjY2NjY2NjY2NyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5sMyB7XFxuICAgIHdpZHRoOiAyNSU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5sNCB7XFxuICAgIHdpZHRoOiAzMy4zMzMzMzMzMzMzJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLmw1IHtcXG4gICAgd2lkdGg6IDQxLjY2NjY2NjY2NjclO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubDYge1xcbiAgICB3aWR0aDogNTAlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubDcge1xcbiAgICB3aWR0aDogNTguMzMzMzMzMzMzMyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5sOCB7XFxuICAgIHdpZHRoOiA2Ni42NjY2NjY2NjY3JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLmw5IHtcXG4gICAgd2lkdGg6IDc1JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLmwxMCB7XFxuICAgIHdpZHRoOiA4My4zMzMzMzMzMzMzJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLmwxMSB7XFxuICAgIHdpZHRoOiA5MS42NjY2NjY2NjY3JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLmwxMiB7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LWwxIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1sMSB7XFxuICAgIHJpZ2h0OiA4LjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbDEge1xcbiAgICBsZWZ0OiA4LjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1sMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLWwyIHtcXG4gICAgcmlnaHQ6IDE2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbDIge1xcbiAgICBsZWZ0OiAxNi42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbDMge1xcbiAgICBtYXJnaW4tbGVmdDogMjUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbDMge1xcbiAgICByaWdodDogMjUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbDMge1xcbiAgICBsZWZ0OiAyNSU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LWw0IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbDQge1xcbiAgICByaWdodDogMzMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1sNCB7XFxuICAgIGxlZnQ6IDMzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1sNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLWw1IHtcXG4gICAgcmlnaHQ6IDQxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbDUge1xcbiAgICBsZWZ0OiA0MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbDYge1xcbiAgICBtYXJnaW4tbGVmdDogNTAlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbDYge1xcbiAgICByaWdodDogNTAlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbDYge1xcbiAgICBsZWZ0OiA1MCU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LWw3IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbDcge1xcbiAgICByaWdodDogNTguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1sNyB7XFxuICAgIGxlZnQ6IDU4LjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1sOCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLWw4IHtcXG4gICAgcmlnaHQ6IDY2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbDgge1xcbiAgICBsZWZ0OiA2Ni42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbDkge1xcbiAgICBtYXJnaW4tbGVmdDogNzUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbDkge1xcbiAgICByaWdodDogNzUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbDkge1xcbiAgICBsZWZ0OiA3NSU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LWwxMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLWwxMCB7XFxuICAgIHJpZ2h0OiA4My4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLWwxMCB7XFxuICAgIGxlZnQ6IDgzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1sMTEge1xcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1sMTEge1xcbiAgICByaWdodDogOTEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1sMTEge1xcbiAgICBsZWZ0OiA5MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbDEyIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDEwMCU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1sMTIge1xcbiAgICByaWdodDogMTAwJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLWwxMiB7XFxuICAgIGxlZnQ6IDEwMCU7XFxuICB9XFxufVxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6IDEyMDFweCkge1xcbiAgLnJvdyAuY29sLnhsMSB7XFxuICAgIHdpZHRoOiA4LjMzMzMzMzMzMzMlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wueGwyIHtcXG4gICAgd2lkdGg6IDE2LjY2NjY2NjY2NjclO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wueGwzIHtcXG4gICAgd2lkdGg6IDI1JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLnhsNCB7XFxuICAgIHdpZHRoOiAzMy4zMzMzMzMzMzMzJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLnhsNSB7XFxuICAgIHdpZHRoOiA0MS42NjY2NjY2NjY3JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLnhsNiB7XFxuICAgIHdpZHRoOiA1MCU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC54bDcge1xcbiAgICB3aWR0aDogNTguMzMzMzMzMzMzMyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC54bDgge1xcbiAgICB3aWR0aDogNjYuNjY2NjY2NjY2NyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC54bDkge1xcbiAgICB3aWR0aDogNzUlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wueGwxMCB7XFxuICAgIHdpZHRoOiA4My4zMzMzMzMzMzMzJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLnhsMTEge1xcbiAgICB3aWR0aDogOTEuNjY2NjY2NjY2NyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC54bDEyIHtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQteGwxIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC14bDEge1xcbiAgICByaWdodDogOC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLXhsMSB7XFxuICAgIGxlZnQ6IDguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LXhsMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLXhsMiB7XFxuICAgIHJpZ2h0OiAxNi42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLXhsMiB7XFxuICAgIGxlZnQ6IDE2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC14bDMge1xcbiAgICBtYXJnaW4tbGVmdDogMjUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwteGwzIHtcXG4gICAgcmlnaHQ6IDI1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLXhsMyB7XFxuICAgIGxlZnQ6IDI1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQteGw0IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwteGw0IHtcXG4gICAgcmlnaHQ6IDMzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gteGw0IHtcXG4gICAgbGVmdDogMzMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LXhsNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLXhsNSB7XFxuICAgIHJpZ2h0OiA0MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLXhsNSB7XFxuICAgIGxlZnQ6IDQxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC14bDYge1xcbiAgICBtYXJnaW4tbGVmdDogNTAlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwteGw2IHtcXG4gICAgcmlnaHQ6IDUwJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLXhsNiB7XFxuICAgIGxlZnQ6IDUwJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQteGw3IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwteGw3IHtcXG4gICAgcmlnaHQ6IDU4LjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gteGw3IHtcXG4gICAgbGVmdDogNTguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LXhsOCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLXhsOCB7XFxuICAgIHJpZ2h0OiA2Ni42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLXhsOCB7XFxuICAgIGxlZnQ6IDY2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC14bDkge1xcbiAgICBtYXJnaW4tbGVmdDogNzUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwteGw5IHtcXG4gICAgcmlnaHQ6IDc1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLXhsOSB7XFxuICAgIGxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQteGwxMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLXhsMTAge1xcbiAgICByaWdodDogODMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC14bDEwIHtcXG4gICAgbGVmdDogODMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LXhsMTEge1xcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC14bDExIHtcXG4gICAgcmlnaHQ6IDkxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gteGwxMSB7XFxuICAgIGxlZnQ6IDkxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC14bDEyIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDEwMCU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC14bDEyIHtcXG4gICAgcmlnaHQ6IDEwMCU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC14bDEyIHtcXG4gICAgbGVmdDogMTAwJTtcXG4gIH1cXG59XFxuXFxuLnNpZGVuYXYge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgd2lkdGg6IDMwMHB4O1xcbiAgbGVmdDogMDtcXG4gIHRvcDogMDtcXG4gIG1hcmdpbjogMDtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGhlaWdodDogY2FsYygxMDAlICsgNjBweCk7XFxuICBoZWlnaHQ6IC1tb3otY2FsYygxMDAlKTtcXG4gIHBhZGRpbmctYm90dG9tOiA2MHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIHotaW5kZXg6IDk5OTtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxuICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1xcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDUlKTtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxcztcXG59XFxuLnNpZGVuYXYucmlnaHQtYWxpZ25lZCB7XFxuICByaWdodDogMDtcXG4gIGxlZnQ6IGF1dG87XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XFxufVxcbi5zaWRlbmF2IC5jb2xsYXBzaWJsZSB7XFxuICBtYXJnaW46IDA7XFxufVxcbi5zaWRlbmF2IGxpIHtcXG4gIGZsb2F0OiBub25lO1xcbn1cXG4uc2lkZW5hdiBsaSAuaWNvblNpZGVMaW5rIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG4uc2lkZW5hdiBsaSAuaWNvblNpZGVMaW5rIHN2ZyB7XFxuICBzdHJva2U6IHJnYmEoMCwgMCwgMCwgMC4yKTtcXG4gIHdpZHRoOiAzMHB4O1xcbn1cXG4uc2lkZW5hdiBsaS5hY3RpdmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG59XFxuLnNpZGVuYXYgbGkuYWN0aXZlIHN2ZyB7XFxuICBzdHJva2U6IHdoaXRlICFpbXBvcnRhbnQ7XFxuICB3aWR0aDogMzBweDtcXG59XFxuLnNpZGVuYXYgbGkubGFzdCB7XFxuICBwb3NpdGlvbjogc3RpY2t5O1xcbiAgdG9wOiBjYWxjKDEwMCUgLSA0NXB4IC0gMzVweCk7XFxufVxcbi5zaWRlbmF2IGxpID4gYSB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjg3KTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBmb250LXdlaWdodDogNzAwO1xcbiAgaGVpZ2h0OiA0NXB4O1xcbiAgbGluZS1oZWlnaHQ6IDQ1cHg7XFxuICBwYWRkaW5nOiAwIDMwcHg7XFxufVxcbi5zaWRlbmF2IGxpID4gYTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xcbn1cXG4uc2lkZW5hdiBsaSA+IGEuYnRuLCAuc2lkZW5hdiBsaSA+IGEuYnRuLXNtYWxsLCAuc2lkZW5hdiBsaSA+IGEuYnRuLWxhcmdlLCAuc2lkZW5hdiBsaSA+IGEuYnRuLWZsYXQsIC5zaWRlbmF2IGxpID4gYS5idG4tZmxvYXRpbmcge1xcbiAgbWFyZ2luOiAxMHB4IDE1cHg7XFxufVxcbi5zaWRlbmF2IGxpID4gYS5idG4sIC5zaWRlbmF2IGxpID4gYS5idG4tc21hbGwsIC5zaWRlbmF2IGxpID4gYS5idG4tbGFyZ2UsIC5zaWRlbmF2IGxpID4gYS5idG4tZmxvYXRpbmcge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi5zaWRlbmF2IGxpID4gYS5idG4tZmxhdCB7XFxuICBjb2xvcjogIzM0MzQzNDtcXG59XFxuLnNpZGVuYXYgbGkgPiBhLmJ0bjpob3ZlciwgLnNpZGVuYXYgbGkgPiBhLmJ0bi1zbWFsbDpob3ZlciwgLnNpZGVuYXYgbGkgPiBhLmJ0bi1sYXJnZTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDE0MTQxO1xcbn1cXG4uc2lkZW5hdiBsaSA+IGEuYnRuLWZsb2F0aW5nOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzNDM0MzQ7XFxufVxcbi5zaWRlbmF2IGxpID4gYSA+IGksIC5zaWRlbmF2IGxpID4gYSA+IFtjbGFzc149bWRpLV0sXFxuLnNpZGVuYXYgbGkgPiBhIGxpID4gYSA+IFtjbGFzcyo9bWRpLV0sIC5zaWRlbmF2IGxpID4gYSA+IGkucy1pY29uIHtcXG4gIGZsb2F0OiBsZWZ0O1xcbiAgaGVpZ2h0OiA0NXB4O1xcbiAgbGluZS1oZWlnaHQ6IDQ1cHg7XFxuICBtYXJnaW46IDAgMzBweCAwIDA7XFxuICB3aWR0aDogMjIuNXB4O1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41NCk7XFxufVxcbi5zaWRlbmF2IC5kaXZpZGVyIHtcXG4gIG1hcmdpbjogNy41cHggMCAwIDA7XFxufVxcbi5zaWRlbmF2IC5zdWJoZWFkZXIge1xcbiAgY3Vyc29yOiBpbml0aWFsO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjU0KTtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBsaW5lLWhlaWdodDogNDVweDtcXG59XFxuLnNpZGVuYXYgLnN1YmhlYWRlcjpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuLnNpZGVuYXYgLnVzZXItdmlldyB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBwYWRkaW5nOiAzMHB4IDMwcHggMDtcXG4gIG1hcmdpbi1ib3R0b206IDcuNXB4O1xcbn1cXG4uc2lkZW5hdiAudXNlci12aWV3ID4gYSB7XFxuICBoZWlnaHQ6IGF1dG87XFxuICBwYWRkaW5nOiAwO1xcbn1cXG4uc2lkZW5hdiAudXNlci12aWV3ID4gYTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuLnNpZGVuYXYgLnVzZXItdmlldyAuYmFja2dyb3VuZCB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgei1pbmRleDogLTE7XFxufVxcbi5zaWRlbmF2IC51c2VyLXZpZXcgLmNpcmNsZSxcXG4uc2lkZW5hdiAudXNlci12aWV3IC5uYW1lLFxcbi5zaWRlbmF2IC51c2VyLXZpZXcgLmVtYWlsIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG4uc2lkZW5hdiAudXNlci12aWV3IC5jaXJjbGUge1xcbiAgaGVpZ2h0OiA2NHB4O1xcbiAgd2lkdGg6IDY0cHg7XFxufVxcbi5zaWRlbmF2IC51c2VyLXZpZXcgLm5hbWUsXFxuLnNpZGVuYXYgLnVzZXItdmlldyAuZW1haWwge1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgbGluZS1oZWlnaHQ6IDIyLjVweDtcXG59XFxuLnNpZGVuYXYgLnVzZXItdmlldyAubmFtZSB7XFxuICBtYXJnaW4tdG9wOiAxNnB4O1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG59XFxuLnNpZGVuYXYgLnVzZXItdmlldyAuZW1haWwge1xcbiAgcGFkZGluZy1ib3R0b206IDE2cHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG5cXG4uZHJhZy10YXJnZXQge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgd2lkdGg6IDEwcHg7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB0b3A6IDA7XFxuICB6LWluZGV4OiA5OTg7XFxufVxcbi5kcmFnLXRhcmdldC5yaWdodC1hbGlnbmVkIHtcXG4gIHJpZ2h0OiAwO1xcbn1cXG5cXG4uc2lkZW5hdi5zaWRlbmF2LWZpeGVkIHtcXG4gIGxlZnQ6IDA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxufVxcbi5zaWRlbmF2LnNpZGVuYXYtZml4ZWQucmlnaHQtYWxpZ25lZCB7XFxuICByaWdodDogMDtcXG4gIGxlZnQ6IGF1dG87XFxufVxcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aCA6IDk5MnB4KSB7XFxuICAuc2lkZW5hdi5zaWRlbmF2LWZpeGVkIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDUlKTtcXG4gIH1cXG4gIC5zaWRlbmF2LnNpZGVuYXYtZml4ZWQucmlnaHQtYWxpZ25lZCB7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDUlKTtcXG4gIH1cXG4gIC5zaWRlbmF2ID4gYSB7XFxuICAgIHBhZGRpbmc6IDAgMTVweDtcXG4gIH1cXG4gIC5zaWRlbmF2IC51c2VyLXZpZXcge1xcbiAgICBwYWRkaW5nOiAxNXB4IDE1cHggMDtcXG4gIH1cXG59XFxuLnNpZGVuYXYgLmNvbGxhcHNpYmxlLWJvZHkgPiB1bDpub3QoLmNvbGxhcHNpYmxlKSA+IGxpLmFjdGl2ZSxcXG4uc2lkZW5hdi5zaWRlbmF2LWZpeGVkIC5jb2xsYXBzaWJsZS1ib2R5ID4gdWw6bm90KC5jb2xsYXBzaWJsZSkgPiBsaS5hY3RpdmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzkwY2FmOTtcXG59XFxuLnNpZGVuYXYgLmNvbGxhcHNpYmxlLWJvZHkgPiB1bDpub3QoLmNvbGxhcHNpYmxlKSA+IGxpLmFjdGl2ZSBhLFxcbi5zaWRlbmF2LnNpZGVuYXYtZml4ZWQgLmNvbGxhcHNpYmxlLWJvZHkgPiB1bDpub3QoLmNvbGxhcHNpYmxlKSA+IGxpLmFjdGl2ZSBhIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG5cXG4uc2lkZW5hdiAuY29sbGFwc2libGUtYm9keSB7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG4uc2lkZW5hdi1vdmVybGF5IHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIG9wYWNpdHk6IDA7XFxuICBoZWlnaHQ6IDEyMHZoO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xcbiAgei1pbmRleDogOTk3O1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLndpdGgtc2lkZS1uYXYtb3BlbiB7XFxuICBwYWRkaW5nLWxlZnQ6IDMwMHB4O1xcbiAgdHJhbnNpdGlvbjogcGFkZGluZyAxcztcXG59XFxuXFxuLmJ0biwgLmJ0bi1zbWFsbCwgLmJ0bi1sYXJnZSxcXG4uYnRuLWZsYXQge1xcbiAgYm9yZGVyOiBub25lO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgaGVpZ2h0OiAzNnB4O1xcbiAgbGluZS1oZWlnaHQ6IDM2cHg7XFxuICBwYWRkaW5nOiAwIDE2cHg7XFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5idG4uZGlzYWJsZWQsXFxuLmJ0bi1mbG9hdGluZy5kaXNhYmxlZCxcXG4uYnRuLWxhcmdlLmRpc2FibGVkLFxcbi5idG4tc21hbGwuZGlzYWJsZWQsXFxuLmJ0bi1mbGF0LmRpc2FibGVkLFxcbi5idG46ZGlzYWJsZWQsXFxuLmJ0bi1mbG9hdGluZzpkaXNhYmxlZCxcXG4uYnRuLWxhcmdlOmRpc2FibGVkLFxcbi5idG4tc21hbGw6ZGlzYWJsZWQsXFxuLmJ0bi1mbGF0OmRpc2FibGVkLFxcbi5idG5bZGlzYWJsZWRdLFxcbi5idG4tZmxvYXRpbmdbZGlzYWJsZWRdLFxcbi5idG4tbGFyZ2VbZGlzYWJsZWRdLFxcbi5idG4tc21hbGxbZGlzYWJsZWRdLFxcbi5idG4tZmxhdFtkaXNhYmxlZF0ge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjREZERkRGICFpbXBvcnRhbnQ7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICM5RjlGOUYgIWltcG9ydGFudDtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuLmJ0bi5kaXNhYmxlZDpob3ZlcixcXG4uYnRuLWZsb2F0aW5nLmRpc2FibGVkOmhvdmVyLFxcbi5idG4tbGFyZ2UuZGlzYWJsZWQ6aG92ZXIsXFxuLmJ0bi1zbWFsbC5kaXNhYmxlZDpob3ZlcixcXG4uYnRuLWZsYXQuZGlzYWJsZWQ6aG92ZXIsXFxuLmJ0bjpkaXNhYmxlZDpob3ZlcixcXG4uYnRuLWZsb2F0aW5nOmRpc2FibGVkOmhvdmVyLFxcbi5idG4tbGFyZ2U6ZGlzYWJsZWQ6aG92ZXIsXFxuLmJ0bi1zbWFsbDpkaXNhYmxlZDpob3ZlcixcXG4uYnRuLWZsYXQ6ZGlzYWJsZWQ6aG92ZXIsXFxuLmJ0bltkaXNhYmxlZF06aG92ZXIsXFxuLmJ0bi1mbG9hdGluZ1tkaXNhYmxlZF06aG92ZXIsXFxuLmJ0bi1sYXJnZVtkaXNhYmxlZF06aG92ZXIsXFxuLmJ0bi1zbWFsbFtkaXNhYmxlZF06aG92ZXIsXFxuLmJ0bi1mbGF0W2Rpc2FibGVkXTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjREZERkRGICFpbXBvcnRhbnQ7XFxuICBjb2xvcjogIzlGOUY5RiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnRuLFxcbi5idG4tc21hbGwsXFxuLmJ0bi1sYXJnZSxcXG4uYnRuLWZsb2F0aW5nLFxcbi5idG4tZmxhdCB7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4uYnRuIGksXFxuLmJ0bi1mbG9hdGluZyBpLFxcbi5idG4tbGFyZ2UgaSxcXG4uYnRuLXNtYWxsIGksXFxuLmJ0bi1mbGF0IGkge1xcbiAgZm9udC1zaXplOiAxLjNyZW07XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG59XFxuXFxuLmJ0bjpmb2N1cywgLmJ0bi1zbWFsbDpmb2N1cywgLmJ0bi1sYXJnZTpmb2N1cyxcXG4uYnRuLWZsb2F0aW5nOmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxYjFiMWI7XFxufVxcblxcbi5idG4sIC5idG4tc21hbGwsIC5idG4tbGFyZ2Uge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzQzNDM0O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4O1xcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzIGVhc2Utb3V0O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4uYnRuOmhvdmVyLCAuYnRuLXNtYWxsOmhvdmVyLCAuYnRuLWxhcmdlOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0MTQxNDE7XFxufVxcblxcbi5idG4tZmxvYXRpbmcge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgY29sb3I6ICNmZmY7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgei1pbmRleDogMTtcXG4gIHdpZHRoOiA0MHB4O1xcbiAgaGVpZ2h0OiA0MHB4O1xcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XFxuICBwYWRkaW5nOiAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YTY5YTtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcztcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxufVxcbi5idG4tZmxvYXRpbmc6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YTY5YTtcXG59XFxuLmJ0bi1mbG9hdGluZzpiZWZvcmUge1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG59XFxuLmJ0bi1mbG9hdGluZy5idG4tbGFyZ2Uge1xcbiAgd2lkdGg6IDU2cHg7XFxuICBoZWlnaHQ6IDU2cHg7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG4uYnRuLWZsb2F0aW5nLmJ0bi1sYXJnZS5oYWxmd2F5LWZhYiB7XFxuICBib3R0b206IDI4cHg7XFxufVxcbi5idG4tZmxvYXRpbmcuYnRuLWxhcmdlIGkge1xcbiAgbGluZS1oZWlnaHQ6IDU2cHg7XFxufVxcbi5idG4tZmxvYXRpbmcuYnRuLXNtYWxsIHtcXG4gIHdpZHRoOiAzMi40cHg7XFxuICBoZWlnaHQ6IDMyLjRweDtcXG59XFxuLmJ0bi1mbG9hdGluZy5idG4tc21hbGwuaGFsZndheS1mYWIge1xcbiAgYm90dG9tOiAxNi4ycHg7XFxufVxcbi5idG4tZmxvYXRpbmcuYnRuLXNtYWxsIGkge1xcbiAgbGluZS1oZWlnaHQ6IDMyLjRweDtcXG59XFxuLmJ0bi1mbG9hdGluZy5oYWxmd2F5LWZhYiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMjRweDtcXG4gIGJvdHRvbTogMjBweDtcXG59XFxuLmJ0bi1mbG9hdGluZy5oYWxmd2F5LWZhYi5sZWZ0IHtcXG4gIHJpZ2h0OiBhdXRvO1xcbiAgbGVmdDogMjRweDtcXG59XFxuLmJ0bi1mbG9hdGluZyBpIHtcXG4gIHdpZHRoOiBpbmhlcml0O1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgY29sb3I6ICNmZmY7XFxuICBmb250LXNpemU6IDEuNnJlbTtcXG4gIGxpbmUtaGVpZ2h0OiA0MHB4O1xcbn1cXG5cXG5idXR0b24uYnRuLWZsb2F0aW5nIHtcXG4gIGJvcmRlcjogbm9uZTtcXG59XFxuXFxuLmZpeGVkLWFjdGlvbi1idG4ge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgcmlnaHQ6IDIzcHg7XFxuICBib3R0b206IDIzcHg7XFxuICBwYWRkaW5nLXRvcDogMTVweDtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICB6LWluZGV4OiA5OTc7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLmFjdGl2ZSB1bCB7XFxuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0bi5kaXJlY3Rpb24tbGVmdCwgLmZpeGVkLWFjdGlvbi1idG4uZGlyZWN0aW9uLXJpZ2h0IHtcXG4gIHBhZGRpbmc6IDAgMCAwIDE1cHg7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLmRpcmVjdGlvbi1sZWZ0IHVsLCAuZml4ZWQtYWN0aW9uLWJ0bi5kaXJlY3Rpb24tcmlnaHQgdWwge1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxuICByaWdodDogNjRweDtcXG4gIHRvcDogNTAlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgbGVmdDogYXV0bztcXG4gIC8qd2lkdGggMTAwJSBvbmx5IGdvZXMgdG8gd2lkdGggb2YgYnV0dG9uIGNvbnRhaW5lciAqL1xcbiAgd2lkdGg6IDUwMHB4O1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0bi5kaXJlY3Rpb24tbGVmdCB1bCBsaSwgLmZpeGVkLWFjdGlvbi1idG4uZGlyZWN0aW9uLXJpZ2h0IHVsIGxpIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbjogNy41cHggMTVweCAwIDA7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLmRpcmVjdGlvbi1yaWdodCB7XFxuICBwYWRkaW5nOiAwIDE1cHggMCAwO1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0bi5kaXJlY3Rpb24tcmlnaHQgdWwge1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG4gIGRpcmVjdGlvbjogcnRsO1xcbiAgbGVmdDogNjRweDtcXG4gIHJpZ2h0OiBhdXRvO1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0bi5kaXJlY3Rpb24tcmlnaHQgdWwgbGkge1xcbiAgbWFyZ2luOiA3LjVweCAwIDAgMTVweDtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4uZGlyZWN0aW9uLWJvdHRvbSB7XFxuICBwYWRkaW5nOiAwIDAgMTVweCAwO1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0bi5kaXJlY3Rpb24tYm90dG9tIHVsIHtcXG4gIHRvcDogNjRweDtcXG4gIGJvdHRvbTogYXV0bztcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLmRpcmVjdGlvbi1ib3R0b20gdWwgbGkge1xcbiAgbWFyZ2luOiAxNXB4IDAgMCAwO1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0bi50b29sYmFyIHtcXG4gIHBhZGRpbmc6IDA7XFxuICBoZWlnaHQ6IDU2cHg7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLnRvb2xiYXIuYWN0aXZlID4gYSBpIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLnRvb2xiYXIgdWwge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIHotaW5kZXg6IDE7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLnRvb2xiYXIgdWwgbGkge1xcbiAgZmxleDogMTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbjogMDtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHRyYW5zaXRpb246IG5vbmU7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLnRvb2xiYXIgdWwgbGkgYSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgbGluZS1oZWlnaHQ6IDU2cHg7XFxuICB6LWluZGV4OiAxO1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0bi50b29sYmFyIHVsIGxpIGEgaSB7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4gdWwge1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiA2NHB4O1xcbiAgbWFyZ2luOiAwO1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0biB1bCBsaSB7XFxuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0biB1bCBhLmJ0bi1mbG9hdGluZyB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0biAuZmFiLWJhY2tkcm9wIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAtMTtcXG4gIHdpZHRoOiA0MHB4O1xcbiAgaGVpZ2h0OiA0MHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YTY5YTtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxufVxcblxcbi5idG4tZmxhdCB7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBjb2xvcjogIzM0MzQzNDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4ycztcXG59XFxuLmJ0bi1mbGF0OmZvY3VzLCAuYnRuLWZsYXQ6aG92ZXIge1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuLmJ0bi1mbGF0OmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKTtcXG59XFxuLmJ0bi1mbGF0LmRpc2FibGVkLCAuYnRuLWZsYXQuYnRuLWZsYXRbZGlzYWJsZWRdIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxuICBjb2xvcjogI2IzYjNiMyAhaW1wb3J0YW50O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbn1cXG5cXG4uYnRuLWxhcmdlIHtcXG4gIGhlaWdodDogNTRweDtcXG4gIGxpbmUtaGVpZ2h0OiA1NHB4O1xcbiAgZm9udC1zaXplOiAxNXB4O1xcbiAgcGFkZGluZzogMCAyOHB4O1xcbn1cXG4uYnRuLWxhcmdlIGkge1xcbiAgZm9udC1zaXplOiAxLjZyZW07XFxufVxcblxcbi5idG4tc21hbGwge1xcbiAgaGVpZ2h0OiAzMi40cHg7XFxuICBsaW5lLWhlaWdodDogMzIuNHB4O1xcbiAgZm9udC1zaXplOiAxM3B4O1xcbn1cXG4uYnRuLXNtYWxsIGkge1xcbiAgZm9udC1zaXplOiAxLjJyZW07XFxufVxcblxcbi5idG4tYmxvY2sge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi5jb21tdW5UYWJIZWFkZXIsIC50YWJzLmFjdGl2ZVRhYi0yIC50YWItaGVhZGVyLW92ZXIyIC50YWItaGVhZGVyLCAudGFicy5hY3RpdmVUYWItMiAudGFiLWhlYWRlci1vdmVyMSAudGFiLWhlYWRlciwgLnRhYnMuYWN0aXZlVGFiLTIgLnRhYi1oZWFkZXItb3ZlcjAgLnRhYi1oZWFkZXIsIC50YWJzLmFjdGl2ZVRhYi0xIC50YWItaGVhZGVyLW92ZXIyIC50YWItaGVhZGVyLCAudGFicy5hY3RpdmVUYWItMSAudGFiLWhlYWRlci1vdmVyMSAudGFiLWhlYWRlciwgLnRhYnMuYWN0aXZlVGFiLTEgLnRhYi1oZWFkZXItb3ZlcjAgLnRhYi1oZWFkZXIsIC50YWJzLmFjdGl2ZVRhYi0wIC50YWItaGVhZGVyLW92ZXIyIC50YWItaGVhZGVyLCAudGFicy5hY3RpdmVUYWItMCAudGFiLWhlYWRlci1vdmVyMSAudGFiLWhlYWRlciwgLnRhYnMuYWN0aXZlVGFiLTAgLnRhYi1oZWFkZXItb3ZlcjAgLnRhYi1oZWFkZXIge1xcbiAgaGVpZ2h0OiAxMDBweDtcXG4gIHBhZGRpbmc6IDQwcHg7XFxufVxcblxcbi50YWJzIHtcXG4gIG1pbi1oZWlnaHQ6IGNhbGMoMTAwJSAtIDE1MHB4KTtcXG4gIG1hcmdpbi10b3A6IDMwcHg7XFxuICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxuICBib3JkZXItcmFkaXVzOiA0MHB4ICFpbXBvcnRhbnQ7XFxufVxcbi50YWJzIC5pbm5lcnBhZ2Uge1xcbiAgbWluLWhlaWdodDogNzBWSCAhaW1wb3J0YW50O1xcbn1cXG4udGFicyAudGFicy1oZWFkZXItb3ZlcmxheSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiAxMDBweDtcXG59XFxuLnRhYnMuYWN0aXZlVGFiLTAgLnRhYi1oZWFkZXItb3ZlcjAge1xcbiAgZmxleDogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MGM0ZmQ7XFxuICBib3JkZXItcmFkaXVzOiA0MHB4IDAgMCAwO1xcbn1cXG4udGFicy5hY3RpdmVUYWItMCAudGFiLWhlYWRlci1vdmVyMCAudGFiLWhlYWRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2JlN2ZlO1xcbiAgYm9yZGVyLXJhZGl1czogNDBweCA0MHB4IDAgMDtcXG59XFxuLnRhYnMuYWN0aXZlVGFiLTAgLnRhYi1oZWFkZXItb3ZlcjEge1xcbiAgZmxleDogMTtcXG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgwLjI1dHVybiwgI2NiZTdmZSwgIzM1YTJmYik7XFxuICBib3JkZXItcmFkaXVzOiAwIDAgMCAwO1xcbn1cXG4udGFicy5hY3RpdmVUYWItMCAudGFiLWhlYWRlci1vdmVyMSAudGFiLWhlYWRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODBjNGZkO1xcbiAgYm9yZGVyLXJhZGl1czogMCA0MHB4IDAgNDBweDtcXG59XFxuLnRhYnMuYWN0aXZlVGFiLTAgLnRhYi1oZWFkZXItb3ZlcjIge1xcbiAgZmxleDogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MGM0ZmQ7XFxuICBib3JkZXItcmFkaXVzOiAwIDQwcHggMCAwO1xcbn1cXG4udGFicy5hY3RpdmVUYWItMCAudGFiLWhlYWRlci1vdmVyMiAudGFiLWhlYWRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzVhMmZiO1xcbiAgYm9yZGVyLXJhZGl1czogMCA0MHB4IDAgNDBweDtcXG59XFxuLnRhYnMuYWN0aXZlVGFiLTEgLnRhYi1oZWFkZXItb3ZlcjAge1xcbiAgZmxleDogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjYmU3ZmU7XFxuICBib3JkZXItcmFkaXVzOiA0MHB4IDAgMCAwO1xcbn1cXG4udGFicy5hY3RpdmVUYWItMSAudGFiLWhlYWRlci1vdmVyMCAudGFiLWhlYWRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODBjNGZkO1xcbiAgYm9yZGVyLXJhZGl1czogNDBweCAwIDQwcHggMDtcXG59XFxuLnRhYnMuYWN0aXZlVGFiLTEgLnRhYi1oZWFkZXItb3ZlcjEge1xcbiAgZmxleDogMTtcXG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgwLjI1dHVybiwgIzgwYzRmZCwgIzM1YTJmYik7XFxuICBib3JkZXItcmFkaXVzOiAwIDAgMCAwO1xcbn1cXG4udGFicy5hY3RpdmVUYWItMSAudGFiLWhlYWRlci1vdmVyMSAudGFiLWhlYWRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2JlN2ZlO1xcbiAgYm9yZGVyLXJhZGl1czogNDBweCA0MHB4IDAgMDtcXG59XFxuLnRhYnMuYWN0aXZlVGFiLTEgLnRhYi1oZWFkZXItb3ZlcjIge1xcbiAgZmxleDogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjYmU3ZmU7XFxuICBib3JkZXItcmFkaXVzOiAwIDQwcHggMCAwO1xcbn1cXG4udGFicy5hY3RpdmVUYWItMSAudGFiLWhlYWRlci1vdmVyMiAudGFiLWhlYWRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzVhMmZiO1xcbiAgYm9yZGVyLXJhZGl1czogMCA0MHB4IDAgNDBweDtcXG59XFxuLnRhYnMuYWN0aXZlVGFiLTIgLnRhYi1oZWFkZXItb3ZlcjAge1xcbiAgZmxleDogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzNWEyZmI7XFxuICBib3JkZXItcmFkaXVzOiA0MHB4IDAgMCAwO1xcbn1cXG4udGFicy5hY3RpdmVUYWItMiAudGFiLWhlYWRlci1vdmVyMCAudGFiLWhlYWRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODBjNGZkO1xcbiAgYm9yZGVyLXJhZGl1czogNDBweCAwIDQwcHggMDtcXG59XFxuLnRhYnMuYWN0aXZlVGFiLTIgLnRhYi1oZWFkZXItb3ZlcjEge1xcbiAgZmxleDogMTtcXG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgwLjI1dHVybiwgIzgwYzRmZCwgI2NiZTdmZSk7XFxuICBib3JkZXItcmFkaXVzOiAwIDAgMCAwO1xcbn1cXG4udGFicy5hY3RpdmVUYWItMiAudGFiLWhlYWRlci1vdmVyMSAudGFiLWhlYWRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzVhMmZiO1xcbiAgYm9yZGVyLXJhZGl1czogNDBweCAwIDQwcHggMDtcXG59XFxuLnRhYnMuYWN0aXZlVGFiLTIgLnRhYi1oZWFkZXItb3ZlcjIge1xcbiAgZmxleDogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzNWEyZmI7XFxuICBib3JkZXItcmFkaXVzOiAwIDQwcHggMCAwO1xcbn1cXG4udGFicy5hY3RpdmVUYWItMiAudGFiLWhlYWRlci1vdmVyMiAudGFiLWhlYWRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2JlN2ZlO1xcbiAgYm9yZGVyLXJhZGl1czogNDBweCA0MHB4IDAgMDtcXG59XFxuLnRhYnMgLnRhYi1jb250ZW50IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjYmU3ZmU7XFxuICBwYWRkaW5nOiAxMHB4O1xcbiAgYm9yZGVyLXRvcDogMDtcXG4gIG1pbi1oZWlnaHQ6IDcwdmg7XFxuICBib3JkZXItcmFkaXVzOiAwIDAgNDBweCA0MHB4O1xcbiAgcGFkZGluZy1ib3R0b206IDIwcHg7XFxufVxcblxcbi5sb2FkZXItb3ZlcmxheSB7XFxuICB6LWluZGV4OiA5OTk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBoZWlnaHQ6IDEwMHZoO1xcbiAgd2lkdGg6IDEwMHZ3O1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTAyLCAxMDAsIDEwMCwgMC42MDMpO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxufVxcbi5sb2FkZXItb3ZlcmxheSAubG9hZGVyIHtcXG4gIGJvcmRlcjogN3B4IHNvbGlkICNmM2YzZjM7IC8qIExpZ2h0IGdyZXkgKi9cXG4gIGJvcmRlci10b3A6IDdweCBzb2xpZCAjMmVhMmNjOyAvKiBCbHVlICovXFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICB3aWR0aDogNzBweDtcXG4gIGhlaWdodDogNzBweDtcXG4gIGFuaW1hdGlvbjogc3BpbiAycyBsaW5lYXIgaW5maW5pdGU7XFxufVxcbi5sb2FkZXItb3ZlcmxheSAubG9hZGVyLXRleHQge1xcbiAgbWFyZ2luLXRvcDogMjBweDtcXG4gIGZvbnQtc2l6ZTogMjVweDtcXG4gIGNvbG9yOiAjMmVhMmNjO1xcbn1cXG5Aa2V5ZnJhbWVzIHNwaW4ge1xcbiAgMCUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xcbiAgfVxcbn1cXG5cXG4uY2FyZC1wYW5lbCB7XFxuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuMjVzO1xcbiAgcGFkZGluZzogMjRweDtcXG4gIG1hcmdpbjogMC4zMzMzMzMzMzMzcmVtIDAgMC42NjY2NjY2NjY3cmVtIDA7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbn1cXG5cXG4uY2FyZCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBtYXJnaW46IDAuMzMzMzMzMzMzM3JlbSAwIDAuNjY2NjY2NjY2N3JlbSAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4yNXM7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxufVxcbi5jYXJkIC5jYXJkLXRpdGxlIHtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxufVxcbi5jYXJkIC5jYXJkLXRpdGxlLmFjdGl2YXRvciB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5jYXJkLnNtYWxsLCAuY2FyZC5tZWRpdW0sIC5jYXJkLmxhcmdlIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLmNhcmQuc21hbGwgLmNhcmQtaW1hZ2UsIC5jYXJkLm1lZGl1bSAuY2FyZC1pbWFnZSwgLmNhcmQubGFyZ2UgLmNhcmQtaW1hZ2Uge1xcbiAgbWF4LWhlaWdodDogNjAlO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLmNhcmQuc21hbGwgLmNhcmQtaW1hZ2UgKyAuY2FyZC1jb250ZW50LCAuY2FyZC5tZWRpdW0gLmNhcmQtaW1hZ2UgKyAuY2FyZC1jb250ZW50LCAuY2FyZC5sYXJnZSAuY2FyZC1pbWFnZSArIC5jYXJkLWNvbnRlbnQge1xcbiAgbWF4LWhlaWdodDogNDAlO1xcbn1cXG4uY2FyZC5zbWFsbCAuY2FyZC1jb250ZW50LCAuY2FyZC5tZWRpdW0gLmNhcmQtY29udGVudCwgLmNhcmQubGFyZ2UgLmNhcmQtY29udGVudCB7XFxuICBtYXgtaGVpZ2h0OiAxMDAlO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLmNhcmQuc21hbGwgLmNhcmQtYWN0aW9uLCAuY2FyZC5tZWRpdW0gLmNhcmQtYWN0aW9uLCAuY2FyZC5sYXJnZSAuY2FyZC1hY3Rpb24ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbn1cXG4uY2FyZC5zbWFsbCB7XFxuICBoZWlnaHQ6IDMwMHB4O1xcbn1cXG4uY2FyZC5tZWRpdW0ge1xcbiAgaGVpZ2h0OiA0MDBweDtcXG59XFxuLmNhcmQubGFyZ2Uge1xcbiAgaGVpZ2h0OiA1MDBweDtcXG59XFxuLmNhcmQuaG9yaXpvbnRhbCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG4uY2FyZC5ob3Jpem9udGFsLnNtYWxsIC5jYXJkLWltYWdlLCAuY2FyZC5ob3Jpem9udGFsLm1lZGl1bSAuY2FyZC1pbWFnZSwgLmNhcmQuaG9yaXpvbnRhbC5sYXJnZSAuY2FyZC1pbWFnZSB7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBtYXgtaGVpZ2h0OiBub25lO1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxufVxcbi5jYXJkLmhvcml6b250YWwuc21hbGwgLmNhcmQtaW1hZ2UgaW1nLCAuY2FyZC5ob3Jpem9udGFsLm1lZGl1bSAuY2FyZC1pbWFnZSBpbWcsIC5jYXJkLmhvcml6b250YWwubGFyZ2UgLmNhcmQtaW1hZ2UgaW1nIHtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLmNhcmQuaG9yaXpvbnRhbCAuY2FyZC1pbWFnZSB7XFxuICBtYXgtd2lkdGg6IDUwJTtcXG59XFxuLmNhcmQuaG9yaXpvbnRhbCAuY2FyZC1pbWFnZSBpbWcge1xcbiAgYm9yZGVyLXJhZGl1czogMnB4IDAgMCAycHg7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICB3aWR0aDogYXV0bztcXG59XFxuLmNhcmQuaG9yaXpvbnRhbCAuY2FyZC1zdGFja2VkIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleDogMTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLmNhcmQuaG9yaXpvbnRhbCAuY2FyZC1zdGFja2VkIC5jYXJkLWNvbnRlbnQge1xcbiAgZmxleC1ncm93OiAxO1xcbn1cXG4uY2FyZC5zdGlja3ktYWN0aW9uIC5jYXJkLWFjdGlvbiB7XFxuICB6LWluZGV4OiAyO1xcbn1cXG4uY2FyZC5zdGlja3ktYWN0aW9uIC5jYXJkLXJldmVhbCB7XFxuICB6LWluZGV4OiAxO1xcbiAgcGFkZGluZy1ib3R0b206IDY0cHg7XFxufVxcbi5jYXJkIC5jYXJkLWltYWdlIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLmNhcmQgLmNhcmQtaW1hZ2UgaW1nIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4IDJweCAwIDA7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLmNhcmQgLmNhcmQtaW1hZ2UgLmNhcmQtdGl0bGUge1xcbiAgY29sb3I6ICNmZmY7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgcGFkZGluZzogMjRweDtcXG59XFxuLmNhcmQgLmNhcmQtY29udGVudCB7XFxuICBwYWRkaW5nOiAyNHB4O1xcbiAgYm9yZGVyLXJhZGl1czogMCAwIDJweCAycHg7XFxufVxcbi5jYXJkIC5jYXJkLWNvbnRlbnQgcCB7XFxuICBtYXJnaW46IDA7XFxufVxcbi5jYXJkIC5jYXJkLWNvbnRlbnQgLmNhcmQtdGl0bGUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBsaW5lLWhlaWdodDogMzJweDtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG59XFxuLmNhcmQgLmNhcmQtY29udGVudCAuY2FyZC10aXRsZSBpIHtcXG4gIGxpbmUtaGVpZ2h0OiAzMnB4O1xcbn1cXG4uY2FyZCAuY2FyZC1hY3Rpb24ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDE2MCwgMTYwLCAxNjAsIDAuMik7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBwYWRkaW5nOiAxNnB4IDI0cHg7XFxufVxcbi5jYXJkIC5jYXJkLWFjdGlvbjpsYXN0LWNoaWxkIHtcXG4gIGJvcmRlci1yYWRpdXM6IDAgMCAycHggMnB4O1xcbn1cXG4uY2FyZCAuY2FyZC1hY3Rpb24gYTpub3QoLmJ0bik6bm90KC5idG4tbGFyZ2UpOm5vdCguYnRuLXNtYWxsKTpub3QoLmJ0bi1sYXJnZSk6bm90KC5idG4tZmxvYXRpbmcpIHtcXG4gIGNvbG9yOiAjZmZhYjQwO1xcbiAgbWFyZ2luLXJpZ2h0OiAyNHB4O1xcbiAgdHJhbnNpdGlvbjogY29sb3IgMC4zcyBlYXNlO1xcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcXG59XFxuLmNhcmQgLmNhcmQtYWN0aW9uIGE6bm90KC5idG4pOm5vdCguYnRuLWxhcmdlKTpub3QoLmJ0bi1zbWFsbCk6bm90KC5idG4tbGFyZ2UpOm5vdCguYnRuLWZsb2F0aW5nKTpob3ZlciB7XFxuICBjb2xvcjogI2ZmZDhhNjtcXG59XFxuLmNhcmQgLmNhcmQtcmV2ZWFsIHtcXG4gIHBhZGRpbmc6IDI0cHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgbGVmdDogMDtcXG4gIHRvcDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHotaW5kZXg6IDM7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4uY2FyZCAuY2FyZC1yZXZlYWwgLmNhcmQtdGl0bGUge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi8qXFxuICAgIEBsaWNlbnNlXFxuICAgIENvcHlyaWdodCAoYykgMjAxNCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXFxuICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcXG4gICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcXG4gICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XFxuICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXFxuICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XFxuICovXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qIFNUWUxFUyBGT1IgVEhFIFNQSU5ORVIgKi9cXG4vKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLypcXG4gKiBDb25zdGFudHM6XFxuICogICAgICBTVFJPS0VXSURUSCA9IDNweFxcbiAqICAgICAgQVJDU0laRSAgICAgPSAyNzAgZGVncmVlcyAoYW1vdW50IG9mIGNpcmNsZSB0aGUgYXJjIHRha2VzIHVwKVxcbiAqICAgICAgQVJDVElNRSAgICAgPSAxMzMzbXMgKHRpbWUgaXQgdGFrZXMgdG8gZXhwYW5kIGFuZCBjb250cmFjdCBhcmMpXFxuICogICAgICBBUkNTVEFSVFJPVCA9IDIxNiBkZWdyZWVzIChob3cgbXVjaCB0aGUgc3RhcnQgbG9jYXRpb24gb2YgdGhlIGFyY1xcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgcm90YXRlIGVhY2ggdGltZSwgMjE2IGdpdmVzIHVzIGFcXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSBwb2ludGVkIHN0YXIgc2hhcGUgKGl0J3MgMzYwLzUgKiAzKS5cXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGEgNyBwb2ludGVkIHN0YXIsIHdlIG1pZ2h0IGRvXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2MC83ICogMyA9IDE1NC4yODYpXFxuICogICAgICBDT05UQUlORVJXSURUSCA9IDI4cHhcXG4gKiAgICAgIFNIUklOS19USU1FID0gNDAwbXNcXG4gKi9cXG4ucHJlbG9hZGVyLXdyYXBwZXIge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDUwcHg7XFxuICBoZWlnaHQ6IDUwcHg7XFxufVxcbi5wcmVsb2FkZXItd3JhcHBlci5zbWFsbCB7XFxuICB3aWR0aDogMzZweDtcXG4gIGhlaWdodDogMzZweDtcXG59XFxuLnByZWxvYWRlci13cmFwcGVyLmJpZyB7XFxuICB3aWR0aDogNjRweDtcXG4gIGhlaWdodDogNjRweDtcXG59XFxuLnByZWxvYWRlci13cmFwcGVyLmFjdGl2ZSB7XFxuICAvKiBkdXJhdGlvbjogMzYwICogQVJDVElNRSAvIChBUkNTVEFSVFJPVCArICgzNjAtQVJDU0laRSkpICovXFxuICAtd2Via2l0LWFuaW1hdGlvbjogY29udGFpbmVyLXJvdGF0ZSAxNTY4bXMgbGluZWFyIGluZmluaXRlO1xcbiAgYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIDE1NjhtcyBsaW5lYXIgaW5maW5pdGU7XFxufVxcblxcbkAtd2Via2l0LWtleWZyYW1lcyBjb250YWluZXItcm90YXRlIHtcXG4gIHRvIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIGNvbnRhaW5lci1yb3RhdGUge1xcbiAgdG8ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xcbiAgfVxcbn1cXG4uc3Bpbm5lci1sYXllciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG9wYWNpdHk6IDA7XFxuICBib3JkZXItY29sb3I6ICMyNmE2OWE7XFxufVxcblxcbi5zcGlubmVyLWJsdWUsXFxuLnNwaW5uZXItYmx1ZS1vbmx5IHtcXG4gIGJvcmRlci1jb2xvcjogIzQyODVmNDtcXG59XFxuXFxuLnNwaW5uZXItcmVkLFxcbi5zcGlubmVyLXJlZC1vbmx5IHtcXG4gIGJvcmRlci1jb2xvcjogI2RiNDQzNztcXG59XFxuXFxuLnNwaW5uZXIteWVsbG93LFxcbi5zcGlubmVyLXllbGxvdy1vbmx5IHtcXG4gIGJvcmRlci1jb2xvcjogI2Y0YjQwMDtcXG59XFxuXFxuLnNwaW5uZXItZ3JlZW4sXFxuLnNwaW5uZXItZ3JlZW4tb25seSB7XFxuICBib3JkZXItY29sb3I6ICMwZjlkNTg7XFxufVxcblxcbi8qKlxcbiAqIElNUE9SVEFOVCBOT1RFIEFCT1VUIENTUyBBTklNQVRJT04gUFJPUEVSVElFUyAoa2VhbnVsZWUpOlxcbiAqXFxuICogaU9TIFNhZmFyaSAodGVzdGVkIG9uIGlPUyA4LjEpIGRvZXMgbm90IGhhbmRsZSBhbmltYXRpb24tZGVsYXkgdmVyeSB3ZWxsIC0gaXQgZG9lc24ndFxcbiAqIGd1YXJhbnRlZSB0aGF0IHRoZSBhbmltYXRpb24gd2lsbCBzdGFydCBfZXhhY3RseV8gYWZ0ZXIgdGhhdCB2YWx1ZS4gU28gd2UgYXZvaWQgdXNpbmdcXG4gKiBhbmltYXRpb24tZGVsYXkgYW5kIGluc3RlYWQgc2V0IGN1c3RvbSBrZXlmcmFtZXMgZm9yIGVhY2ggY29sb3IgKGFzIHJlZHVuZGFudCBhcyBpdFxcbiAqIHNlZW1zKS5cXG4gKlxcbiAqIFdlIHdyaXRlIG91dCBlYWNoIGFuaW1hdGlvbiBpbiBmdWxsIChpbnN0ZWFkIG9mIHNlcGFyYXRpbmcgYW5pbWF0aW9uLW5hbWUsXFxuICogYW5pbWF0aW9uLWR1cmF0aW9uLCBldGMuKSBiZWNhdXNlIHVuZGVyIHRoZSBwb2x5ZmlsbCwgU2FmYXJpIGRvZXMgbm90IHJlY29nbml6ZSB0aG9zZVxcbiAqIHNwZWNpZmljIHByb3BlcnRpZXMgcHJvcGVybHksIHRyZWF0cyB0aGVtIGFzIC13ZWJraXQtYW5pbWF0aW9uLCBhbmQgb3ZlcnJpZGVzIHRoZVxcbiAqIG90aGVyIGFuaW1hdGlvbiBydWxlcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9Qb2x5bWVyL3BsYXRmb3JtL2lzc3Vlcy81My5cXG4gKi9cXG4uYWN0aXZlIC5zcGlubmVyLWxheWVyLnNwaW5uZXItYmx1ZSB7XFxuICAvKiBkdXJhdGlvbnM6IDQgKiBBUkNUSU1FICovXFxuICAtd2Via2l0LWFuaW1hdGlvbjogZmlsbC11bmZpbGwtcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGgsIGJsdWUtZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXG4gIGFuaW1hdGlvbjogZmlsbC11bmZpbGwtcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGgsIGJsdWUtZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXG59XFxuXFxuLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5zcGlubmVyLXJlZCB7XFxuICAvKiBkdXJhdGlvbnM6IDQgKiBBUkNUSU1FICovXFxuICAtd2Via2l0LWFuaW1hdGlvbjogZmlsbC11bmZpbGwtcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGgsIHJlZC1mYWRlLWluLW91dCA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcbiAgYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aCwgcmVkLWZhZGUtaW4tb3V0IDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxufVxcblxcbi5hY3RpdmUgLnNwaW5uZXItbGF5ZXIuc3Bpbm5lci15ZWxsb3cge1xcbiAgLyogZHVyYXRpb25zOiA0ICogQVJDVElNRSAqL1xcbiAgLXdlYmtpdC1hbmltYXRpb246IGZpbGwtdW5maWxsLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoLCB5ZWxsb3ctZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXG4gIGFuaW1hdGlvbjogZmlsbC11bmZpbGwtcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGgsIHllbGxvdy1mYWRlLWluLW91dCA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcbn1cXG5cXG4uYWN0aXZlIC5zcGlubmVyLWxheWVyLnNwaW5uZXItZ3JlZW4ge1xcbiAgLyogZHVyYXRpb25zOiA0ICogQVJDVElNRSAqL1xcbiAgLXdlYmtpdC1hbmltYXRpb246IGZpbGwtdW5maWxsLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoLCBncmVlbi1mYWRlLWluLW91dCA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcbiAgYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aCwgZ3JlZW4tZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXG59XFxuXFxuLmFjdGl2ZSAuc3Bpbm5lci1sYXllcixcXG4uYWN0aXZlIC5zcGlubmVyLWxheWVyLnNwaW5uZXItYmx1ZS1vbmx5LFxcbi5hY3RpdmUgLnNwaW5uZXItbGF5ZXIuc3Bpbm5lci1yZWQtb25seSxcXG4uYWN0aXZlIC5zcGlubmVyLWxheWVyLnNwaW5uZXIteWVsbG93LW9ubHksXFxuLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5zcGlubmVyLWdyZWVuLW9ubHkge1xcbiAgLyogZHVyYXRpb25zOiA0ICogQVJDVElNRSAqL1xcbiAgb3BhY2l0eTogMTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXG4gIGFuaW1hdGlvbjogZmlsbC11bmZpbGwtcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxufVxcblxcbkAtd2Via2l0LWtleWZyYW1lcyBmaWxsLXVuZmlsbC1yb3RhdGUge1xcbiAgMTIuNSUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzNWRlZyk7XFxuICB9IC8qIDAuNSAqIEFSQ1NJWkUgKi9cXG4gIDI1JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcXG4gIH0gLyogMSAgICogQVJDU0laRSAqL1xcbiAgMzcuNSUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQwNWRlZyk7XFxuICB9IC8qIDEuNSAqIEFSQ1NJWkUgKi9cXG4gIDUwJSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNTQwZGVnKTtcXG4gIH0gLyogMiAgICogQVJDU0laRSAqL1xcbiAgNjIuNSUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDY3NWRlZyk7XFxuICB9IC8qIDIuNSAqIEFSQ1NJWkUgKi9cXG4gIDc1JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoODEwZGVnKTtcXG4gIH0gLyogMyAgICogQVJDU0laRSAqL1xcbiAgODcuNSUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDk0NWRlZyk7XFxuICB9IC8qIDMuNSAqIEFSQ1NJWkUgKi9cXG4gIHRvIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMDgwZGVnKTtcXG4gIH0gLyogNCAgICogQVJDU0laRSAqL1xcbn1cXG5Aa2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7XFxuICAxMi41JSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDEzNWRlZyk7XFxuICB9IC8qIDAuNSAqIEFSQ1NJWkUgKi9cXG4gIDI1JSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7XFxuICB9IC8qIDEgICAqIEFSQ1NJWkUgKi9cXG4gIDM3LjUlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNDA1ZGVnKTtcXG4gIH0gLyogMS41ICogQVJDU0laRSAqL1xcbiAgNTAlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNTQwZGVnKTtcXG4gIH0gLyogMiAgICogQVJDU0laRSAqL1xcbiAgNjIuNSUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg2NzVkZWcpO1xcbiAgfSAvKiAyLjUgKiBBUkNTSVpFICovXFxuICA3NSUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg4MTBkZWcpO1xcbiAgfSAvKiAzICAgKiBBUkNTSVpFICovXFxuICA4Ny41JSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDk0NWRlZyk7XFxuICB9IC8qIDMuNSAqIEFSQ1NJWkUgKi9cXG4gIHRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMTA4MGRlZyk7XFxuICB9IC8qIDQgICAqIEFSQ1NJWkUgKi9cXG59XFxuQC13ZWJraXQta2V5ZnJhbWVzIGJsdWUtZmFkZS1pbi1vdXQge1xcbiAgZnJvbSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICAyNSUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgMjYlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG4gIDg5JSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICA5MCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgYmx1ZS1mYWRlLWluLW91dCB7XFxuICBmcm9tIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDI1JSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICAyNiUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgODklIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG4gIDkwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG59XFxuQC13ZWJraXQta2V5ZnJhbWVzIHJlZC1mYWRlLWluLW91dCB7XFxuICBmcm9tIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG4gIDE1JSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICAyNSUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDUxJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcmVkLWZhZGUtaW4tb3V0IHtcXG4gIGZyb20ge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgMTUlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG4gIDI1JSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICA1MCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgNTElIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG59XFxuQC13ZWJraXQta2V5ZnJhbWVzIHllbGxvdy1mYWRlLWluLW91dCB7XFxuICBmcm9tIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG4gIDQwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICA1MCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgNzUlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDc2JSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgeWVsbG93LWZhZGUtaW4tb3V0IHtcXG4gIGZyb20ge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgNDAlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICA3NSUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgNzYlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG59XFxuQC13ZWJraXQta2V5ZnJhbWVzIGdyZWVuLWZhZGUtaW4tb3V0IHtcXG4gIGZyb20ge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgNjUlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG4gIDc1JSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICA5MCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgZ3JlZW4tZmFkZS1pbi1vdXQge1xcbiAgZnJvbSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICA2NSUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgNzUlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDkwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG59XFxuLyoqXFxuICogUGF0Y2ggdGhlIGdhcCB0aGF0IGFwcGVhciBiZXR3ZWVuIHRoZSB0d28gYWRqYWNlbnQgZGl2LmNpcmNsZS1jbGlwcGVyIHdoaWxlIHRoZVxcbiAqIHNwaW5uZXIgaXMgcm90YXRpbmcgKGFwcGVhcnMgb24gQ2hyb21lIDM4LCBTYWZhcmkgNy4xLCBhbmQgSUUgMTEpLlxcbiAqL1xcbi5nYXAtcGF0Y2gge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogNDUlO1xcbiAgd2lkdGg6IDEwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBib3JkZXItY29sb3I6IGluaGVyaXQ7XFxufVxcblxcbi5nYXAtcGF0Y2ggLmNpcmNsZSB7XFxuICB3aWR0aDogMTAwMCU7XFxuICBsZWZ0OiAtNDUwJTtcXG59XFxuXFxuLmNpcmNsZS1jbGlwcGVyIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiA1MCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgYm9yZGVyLWNvbG9yOiBpbmhlcml0O1xcbn1cXG4uY2lyY2xlLWNsaXBwZXIgLmNpcmNsZSB7XFxuICB3aWR0aDogMjAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGJvcmRlci13aWR0aDogM3B4OyAvKiBTVFJPS0VXSURUSCAqL1xcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcXG4gIGJvcmRlci1jb2xvcjogaW5oZXJpdDtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogbm9uZTtcXG4gIGFuaW1hdGlvbjogbm9uZTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbn1cXG4uY2lyY2xlLWNsaXBwZXIubGVmdCAuY2lyY2xlIHtcXG4gIGxlZnQ6IDA7XFxuICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEyOWRlZyk7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgxMjlkZWcpO1xcbn1cXG4uY2lyY2xlLWNsaXBwZXIucmlnaHQgLmNpcmNsZSB7XFxuICBsZWZ0OiAtMTAwJTtcXG4gIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMTI5ZGVnKTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpO1xcbn1cXG5cXG4uYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5sZWZ0IC5jaXJjbGUge1xcbiAgLyogZHVyYXRpb246IEFSQ1RJTUUgKi9cXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBsZWZ0LXNwaW4gMTMzM21zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXG4gIGFuaW1hdGlvbjogbGVmdC1zcGluIDEzMzNtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxufVxcblxcbi5hY3RpdmUgLmNpcmNsZS1jbGlwcGVyLnJpZ2h0IC5jaXJjbGUge1xcbiAgLyogZHVyYXRpb246IEFSQ1RJTUUgKi9cXG4gIC13ZWJraXQtYW5pbWF0aW9uOiByaWdodC1zcGluIDEzMzNtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxuICBhbmltYXRpb246IHJpZ2h0LXNwaW4gMTMzM21zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXG59XFxuXFxuQC13ZWJraXQta2V5ZnJhbWVzIGxlZnQtc3BpbiB7XFxuICBmcm9tIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZyk7XFxuICB9XFxuICB0byB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBsZWZ0LXNwaW4ge1xcbiAgZnJvbSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDEzMGRlZyk7XFxuICB9XFxuICA1MCUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZyk7XFxuICB9XFxuICB0byB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDEzMGRlZyk7XFxuICB9XFxufVxcbkAtd2Via2l0LWtleWZyYW1lcyByaWdodC1zcGluIHtcXG4gIGZyb20ge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg1ZGVnKTtcXG4gIH1cXG4gIHRvIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMTMwZGVnKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyByaWdodC1zcGluIHtcXG4gIGZyb20ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTMwZGVnKTtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDVkZWcpO1xcbiAgfVxcbiAgdG8ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTMwZGVnKTtcXG4gIH1cXG59XFxuI3NwaW5uZXJDb250YWluZXIuY29vbGRvd24ge1xcbiAgLyogZHVyYXRpb246IFNIUklOS19USU1FICovXFxuICAtd2Via2l0LWFuaW1hdGlvbjogY29udGFpbmVyLXJvdGF0ZSAxNTY4bXMgbGluZWFyIGluZmluaXRlLCBmYWRlLW91dCA0MDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO1xcbiAgYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIDE1NjhtcyBsaW5lYXIgaW5maW5pdGUsIGZhZGUtb3V0IDQwMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7XFxufVxcblxcbkAtd2Via2l0LWtleWZyYW1lcyBmYWRlLW91dCB7XFxuICBmcm9tIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIHRvIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBmYWRlLW91dCB7XFxuICBmcm9tIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIHRvIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG59XFxuLnByb2dyZXNzIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGhlaWdodDogNHB4O1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhY2VjZTY7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBtYXJnaW46IDAuMzMzMzMzMzMzM3JlbSAwIDAuNjY2NjY2NjY2N3JlbSAwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLnByb2dyZXNzIC5kZXRlcm1pbmF0ZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YTY5YTtcXG4gIHRyYW5zaXRpb246IHdpZHRoIDAuM3MgbGluZWFyO1xcbn1cXG4ucHJvZ3Jlc3MgLmluZGV0ZXJtaW5hdGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YTY5YTtcXG59XFxuLnByb2dyZXNzIC5pbmRldGVybWluYXRlOmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgd2lsbC1jaGFuZ2U6IGxlZnQsIHJpZ2h0O1xcbiAgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlIDIuMXMgY3ViaWMtYmV6aWVyKDAuNjUsIDAuODE1LCAwLjczNSwgMC4zOTUpIGluZmluaXRlO1xcbn1cXG4ucHJvZ3Jlc3MgLmluZGV0ZXJtaW5hdGU6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIHdpbGwtY2hhbmdlOiBsZWZ0LCByaWdodDtcXG4gIGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZS1zaG9ydCAyLjFzIGN1YmljLWJlemllcigwLjE2NSwgMC44NCwgMC40NCwgMSkgaW5maW5pdGU7XFxuICBhbmltYXRpb24tZGVsYXk6IDEuMTVzO1xcbn1cXG5cXG5Aa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUge1xcbiAgMCUge1xcbiAgICBsZWZ0OiAtMzUlO1xcbiAgICByaWdodDogMTAwJTtcXG4gIH1cXG4gIDYwJSB7XFxuICAgIGxlZnQ6IDEwMCU7XFxuICAgIHJpZ2h0OiAtOTAlO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIGxlZnQ6IDEwMCU7XFxuICAgIHJpZ2h0OiAtOTAlO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc2hvcnQge1xcbiAgMCUge1xcbiAgICBsZWZ0OiAtMjAwJTtcXG4gICAgcmlnaHQ6IDEwMCU7XFxuICB9XFxuICA2MCUge1xcbiAgICBsZWZ0OiAxMDclO1xcbiAgICByaWdodDogLTglO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIGxlZnQ6IDEwNyU7XFxuICAgIHJpZ2h0OiAtOCU7XFxuICB9XFxufVxcbi5mbGFzaC1tZXNzYWdlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHBhZGRpbmc6IDJweCAxMHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xcbiAgei1pbmRleDogOTk5OTk7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG59XFxuLmZsYXNoLW1lc3NhZ2UuaW5mbyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmVkZGJlO1xcbiAgYm9yZGVyOiAxcHggc29saWQgIzcyOGY3MjtcXG59XFxuLmZsYXNoLW1lc3NhZ2Uud2FybiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVlNmQwO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2VhN2QxNztcXG59XFxuLmZsYXNoLW1lc3NhZ2UuZXJyb3Ige1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U1YjJiYztcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNlMzMyNTc7XFxufVxcblxcbkBrZXlmcmFtZXMgbWVzc2FnZUluIHtcXG4gIGZyb20ge1xcbiAgICByaWdodDogODAlO1xcbiAgfVxcbiAgdG8ge1xcbiAgICByaWdodDogMDtcXG4gIH1cXG59XFxuLnB1bHNlIHtcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4ucHVsc2U6OmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcXG4gIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XFxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MsIHRyYW5zZm9ybSAwLjNzO1xcbiAgYW5pbWF0aW9uOiBwdWxzZS1hbmltYXRpb24gMXMgY3ViaWMtYmV6aWVyKDAuMjQsIDAsIDAuMzgsIDEpIGluZmluaXRlO1xcbn1cXG5cXG5Aa2V5ZnJhbWVzIHB1bHNlLWFuaW1hdGlvbiB7XFxuICAwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxuICB9XFxuICA1MCUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNSk7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjUpO1xcbiAgfVxcbn1cXG4uZHJvcGRvd24tY29udGVudCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgbWFyZ2luOiAwO1xcbiAgZGlzcGxheTogZmxvdztcXG4gIG1pbi13aWR0aDogMTAwcHg7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMDtcXG4gIHRvcDogMDtcXG4gIHotaW5kZXg6IDk5OTk7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XFxufVxcbi5kcm9wZG93bi1jb250ZW50OmZvY3VzIHtcXG4gIG91dGxpbmU6IDA7XFxufVxcbi5kcm9wZG93bi1jb250ZW50IGxpIHtcXG4gIGNsZWFyOiBib3RoO1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44Nyk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBtaW4taGVpZ2h0OiA1MHB4O1xcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuLmRyb3Bkb3duLWNvbnRlbnQgbGk6aG92ZXIsIC5kcm9wZG93bi1jb250ZW50IGxpLmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO1xcbn1cXG4uZHJvcGRvd24tY29udGVudCBsaTpmb2N1cyB7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG4uZHJvcGRvd24tY29udGVudCBsaS5kaXZpZGVyIHtcXG4gIG1pbi1oZWlnaHQ6IDA7XFxuICBoZWlnaHQ6IDFweDtcXG59XFxuLmRyb3Bkb3duLWNvbnRlbnQgbGkgPiBhLCAuZHJvcGRvd24tY29udGVudCBsaSA+IHNwYW4ge1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgY29sb3I6ICMyNmE2OWE7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGxpbmUtaGVpZ2h0OiAyMnB4O1xcbiAgcGFkZGluZzogMTRweCAxNnB4O1xcbn1cXG4uZHJvcGRvd24tY29udGVudCBsaSA+IHNwYW4gPiBsYWJlbCB7XFxuICB0b3A6IDFweDtcXG4gIGxlZnQ6IDA7XFxuICBoZWlnaHQ6IDE4cHg7XFxufVxcbi5kcm9wZG93bi1jb250ZW50IGxpID4gYSA+IGkge1xcbiAgaGVpZ2h0OiBpbmhlcml0O1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICBmbG9hdDogbGVmdDtcXG4gIG1hcmdpbjogMCAyNHB4IDAgMDtcXG4gIHdpZHRoOiAyNHB4O1xcbn1cXG5cXG5ib2R5LmtleWJvYXJkLWZvY3VzZWQgLmRyb3Bkb3duLWNvbnRlbnQgbGk6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RhZGFkYTtcXG59XFxuXFxuLmlucHV0LWZpZWxkLmNvbCAuZHJvcGRvd24tY29udGVudCBbdHlwZT1jaGVja2JveF0gKyBsYWJlbCB7XFxuICB0b3A6IDFweDtcXG4gIGxlZnQ6IDA7XFxuICBoZWlnaHQ6IDE4cHg7XFxuICB0cmFuc2Zvcm06IG5vbmU7XFxufVxcblxcbi5kcm9wZG93bi10cmlnZ2VyIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxubmF2IHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzkwY2FmOTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiA1NnB4O1xcbiAgbGluZS1oZWlnaHQ6IDU2cHg7XFxufVxcbm5hdi5uYXYtZXh0ZW5kZWQge1xcbiAgaGVpZ2h0OiBhdXRvO1xcbn1cXG5uYXYubmF2LWV4dGVuZGVkIC5uYXYtd3JhcHBlciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIG1pbi1oZWlnaHQ6IDU2cHg7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcbm5hdi5uYXYtZXh0ZW5kZWQgLm5hdi1jb250ZW50IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XFxufVxcbm5hdiBhIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG5uYXYgaSxcXG5uYXYgW2NsYXNzXj1tZGktXSwgbmF2IFtjbGFzcyo9bWRpLV0sXFxubmF2IGkucy1pY29ucyB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG4gIGhlaWdodDogNTZweDtcXG4gIGxpbmUtaGVpZ2h0OiA1NnB4O1xcbn1cXG5uYXYgLm5hdi13cmFwcGVyIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoIDogOTkzcHgpIHtcXG4gIG5hdiBhLnNpZGVuYXYtdHJpZ2dlciB7XFxuICAgIGRpc3BsYXk6IG5vbmU7XFxuICB9XFxufVxcbm5hdiAuc2lkZW5hdi10cmlnZ2VyIHtcXG4gIGZsb2F0OiBsZWZ0O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgei1pbmRleDogMTtcXG4gIGhlaWdodDogNTZweDtcXG4gIG1hcmdpbjogMCAxOHB4O1xcbn1cXG5uYXYgLnNpZGVuYXYtdHJpZ2dlciBpIHtcXG4gIGhlaWdodDogNTZweDtcXG4gIGxpbmUtaGVpZ2h0OiA1NnB4O1xcbn1cXG5uYXYgLmJyYW5kLWxvZ28ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgY29sb3I6ICNmZmY7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBmb250LXNpemU6IDIuMXJlbTtcXG4gIHBhZGRpbmc6IDA7XFxufVxcbm5hdiAuYnJhbmQtbG9nbyBpbWcuY2lyY2xlIHtcXG4gIGhlaWdodDogMzJweDtcXG4gIHdpZHRoOiAzMnB4O1xcbn1cXG5uYXYgLmJyYW5kLWxvZ28uY2VudGVyIHtcXG4gIGxlZnQ6IDUwJTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoIDogOTkycHgpIHtcXG4gIG5hdiAuYnJhbmQtbG9nbyB7XFxuICAgIGxlZnQ6IDUwJTtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xcbiAgfVxcbiAgbmF2IC5icmFuZC1sb2dvLmxlZnQsIG5hdiAuYnJhbmQtbG9nby5yaWdodCB7XFxuICAgIHBhZGRpbmc6IDA7XFxuICAgIHRyYW5zZm9ybTogbm9uZTtcXG4gIH1cXG4gIG5hdiAuYnJhbmQtbG9nby5sZWZ0IHtcXG4gICAgbGVmdDogMC41cmVtO1xcbiAgfVxcbiAgbmF2IC5icmFuZC1sb2dvLnJpZ2h0IHtcXG4gICAgcmlnaHQ6IDAuNXJlbTtcXG4gICAgbGVmdDogYXV0bztcXG4gIH1cXG59XFxubmF2IC5icmFuZC1sb2dvLnJpZ2h0IHtcXG4gIHJpZ2h0OiAwLjVyZW07XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5uYXYgLmJyYW5kLWxvZ28gaSxcXG5uYXYgLmJyYW5kLWxvZ28gW2NsYXNzXj1tZGktXSwgbmF2IC5icmFuZC1sb2dvIFtjbGFzcyo9bWRpLV0sXFxubmF2IC5icmFuZC1sb2dvIGkucy1pY29ucyB7XFxuICBmbG9hdDogbGVmdDtcXG4gIG1hcmdpbi1yaWdodDogMTVweDtcXG59XFxubmF2IC5uYXYtdGl0bGUge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZm9udC1zaXplOiAzMnB4O1xcbiAgcGFkZGluZzogMjhweCAwO1xcbn1cXG5uYXYgdWwge1xcbiAgbWFyZ2luOiAwO1xcbn1cXG5uYXYgdWwgbGkge1xcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzO1xcbiAgZmxvYXQ6IGxlZnQ7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5uYXYgdWwgbGkuYWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKTtcXG59XFxubmF2IHVsIGEge1xcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzO1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgY29sb3I6ICNmZmY7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBhZGRpbmc6IDAgMTVweDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxubmF2IHVsIGEuYnRuLCBuYXYgdWwgYS5idG4tc21hbGwsIG5hdiB1bCBhLmJ0bi1sYXJnZSwgbmF2IHVsIGEuYnRuLWZsYXQsIG5hdiB1bCBhLmJ0bi1mbG9hdGluZyB7XFxuICBtYXJnaW4tdG9wOiAtMnB4O1xcbiAgbWFyZ2luLWxlZnQ6IDE1cHg7XFxuICBtYXJnaW4tcmlnaHQ6IDE1cHg7XFxufVxcbm5hdiB1bCBhLmJ0biA+IC5tYXRlcmlhbC1pY29ucywgbmF2IHVsIGEuYnRuLXNtYWxsID4gLm1hdGVyaWFsLWljb25zLCBuYXYgdWwgYS5idG4tbGFyZ2UgPiAubWF0ZXJpYWwtaWNvbnMsIG5hdiB1bCBhLmJ0bi1mbGF0ID4gLm1hdGVyaWFsLWljb25zLCBuYXYgdWwgYS5idG4tZmxvYXRpbmcgPiAubWF0ZXJpYWwtaWNvbnMge1xcbiAgaGVpZ2h0OiBpbmhlcml0O1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxufVxcbm5hdiB1bCBhOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKTtcXG59XFxubmF2IHVsLmxlZnQge1xcbiAgZmxvYXQ6IGxlZnQ7XFxufVxcbm5hdiBmb3JtIHtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxubmF2IC5pbnB1dC1maWVsZCB7XFxuICBtYXJnaW46IDA7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcbm5hdiAuaW5wdXQtZmllbGQgaW5wdXQge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgZm9udC1zaXplOiAxLjJyZW07XFxuICBib3JkZXI6IG5vbmU7XFxuICBwYWRkaW5nLWxlZnQ6IDJyZW07XFxufVxcbm5hdiAuaW5wdXQtZmllbGQgaW5wdXQ6Zm9jdXMsIG5hdiAuaW5wdXQtZmllbGQgaW5wdXRbdHlwZT10ZXh0XTp2YWxpZCwgbmF2IC5pbnB1dC1maWVsZCBpbnB1dFt0eXBlPXBhc3N3b3JkXTp2YWxpZCwgbmF2IC5pbnB1dC1maWVsZCBpbnB1dFt0eXBlPWVtYWlsXTp2YWxpZCwgbmF2IC5pbnB1dC1maWVsZCBpbnB1dFt0eXBlPXVybF06dmFsaWQsIG5hdiAuaW5wdXQtZmllbGQgaW5wdXRbdHlwZT1kYXRlXTp2YWxpZCB7XFxuICBib3JkZXI6IG5vbmU7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG5uYXYgLmlucHV0LWZpZWxkIGxhYmVsIHtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxufVxcbm5hdiAuaW5wdXQtZmllbGQgbGFiZWwgaSB7XFxuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xcbiAgdHJhbnNpdGlvbjogY29sb3IgMC4zcztcXG59XFxubmF2IC5pbnB1dC1maWVsZCBsYWJlbC5hY3RpdmUgaSB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuXFxuLm5hdmJhci1maXhlZCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBoZWlnaHQ6IDU2cHg7XFxuICB6LWluZGV4OiA5OTc7XFxufVxcbi5uYXZiYXItZml4ZWQgbmF2IHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoIDogNjAxcHgpIHtcXG4gIG5hdi5uYXYtZXh0ZW5kZWQgLm5hdi13cmFwcGVyIHtcXG4gICAgbWluLWhlaWdodDogNjRweDtcXG4gIH1cXG4gIG5hdiwgbmF2IC5uYXYtd3JhcHBlciBpLCBuYXYgYS5zaWRlbmF2LXRyaWdnZXIsIG5hdiBhLnNpZGVuYXYtdHJpZ2dlciBpIHtcXG4gICAgaGVpZ2h0OiA2NHB4O1xcbiAgICBsaW5lLWhlaWdodDogNjRweDtcXG4gIH1cXG4gIC5uYXZiYXItZml4ZWQge1xcbiAgICBoZWlnaHQ6IDY0cHg7XFxuICB9XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL2QzdjRwcC5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9pY29ucy9Td2VldGNvbUljb25zLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL19jb2xvcnMuc2Nzc1wiLFwid2VicGFjazovLy4vc3JjL3Nhc3MvX2NvZGUtZGFyay5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9fdGVybWluYWwuc2Nzc1wiLFwid2VicGFjazovLy4vc3JjL3Nhc3MvX3Rvb2x0aXAuc2Nzc1wiLFwid2VicGFjazovLy4vc3JjL3Nhc3MvX3NoYWRvd3Muc2Nzc1wiLFwid2VicGFjazovLy4vc3JjL3Nhc3MvX3dhdmVzLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL19tb2RhbC5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9fZ2xvYmFsLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL192YXJpYWJsZXMuc2Nzc1wiLFwid2VicGFjazovLy4vc3JjL3Nhc3MvX2JhZGdlcy5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9fY2hpcHMuc2Nzc1wiLFwid2VicGFjazovLy4vc3JjL3Nhc3MvX2NvbGxhcHNpYmxlLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL19jb2xsZWN0aW9uLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL2Zvcm1zL19mb3Jtcy5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9mb3Jtcy9faW5wdXQtZmllbGRzLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL2Zvcm1zL19yYWRpby1idXR0b25zLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL2Zvcm1zL19jaGVja2JveGVzLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL2Zvcm1zL19zd2l0Y2hlcy5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9mb3Jtcy9fc2VsZWN0LnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL2Zvcm1zL19maWxlLWlucHV0LnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL2Zvcm1zL19yYW5nZS5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9fcGFyYWxheC5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9fY3ViZS5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9fZ3JpZC5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9fc2lkZW5hdi5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9fYnV0dG9ucy5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9fdGFicy5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9fbG9hZGVyLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL19jYXJkcy5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9fcHJlbG9hZGVyLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL19wcm9ncmVzcy5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9fZmxhc2gtbWVzc2FnZS5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9zcmMvc2Fzcy9fcHVsc2Uuc2Nzc1wiLFwid2VicGFjazovLy4vc3JjL3Nhc3MvX2Ryb3Bkb3duLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zYXNzL19uYXZiYXIuc2Nzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQSxnQkFBZ0I7QUNBaEI7RUFDRSx1QkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSw0Q0FBQTtFQUNBLGdMQUFBO0FER0Y7QUNLQTs7OztFQUlFLG1DQUFBO0VBQ0EsbUJBQUE7RUFDQSxrQkFBQTtFQUNBLGVBQUE7RUFDQSxjQUFBO0VBQ0Esc0JBQUE7RUFDQSxvQkFBQTtFQUNBLHFCQUFBO0VBQ0EsbUJBQUE7RUFDQSxpQkFBQTtFQUNBLGNBQUE7RUFDQSxtQ0FBQTtFQUNBLGtDQUFBO0VBQ0Esa0NBQUE7RUFDQSxxQ0FBQTtFQUNBLG9DQUFBO0VBQ0Esa0NBQUE7RUFDQSw2QkFBQTtFQUNBLGtCQUFBO0FESEY7O0FFM0JNO0VBQ0Usb0NBQUE7QUY4QlI7O0FFNUJNO0VBQ0UseUJBQUE7QUYrQlI7O0FFN0JNO0VBQ0Usb0NBQUE7QUZnQ1I7O0FFN0JNO0VBQ0Usb0NBQUE7QUZnQ1I7O0FFOUJNO0VBQ0UseUJBQUE7QUZpQ1I7O0FFL0JNO0VBQ0Usb0NBQUE7QUZrQ1I7O0FFekNNO0VBQ0Usb0NBQUE7QUY0Q1I7O0FFMUNNO0VBQ0UseUJBQUE7QUY2Q1I7O0FFM0NNO0VBQ0Usb0NBQUE7QUY4Q1I7O0FFckRNO0VBQ0Usb0NBQUE7QUZ3RFI7O0FFdERNO0VBQ0UseUJBQUE7QUZ5RFI7O0FFdkRNO0VBQ0Usb0NBQUE7QUYwRFI7O0FFakVNO0VBQ0Usb0NBQUE7QUZvRVI7O0FFbEVNO0VBQ0UseUJBQUE7QUZxRVI7O0FFbkVNO0VBQ0Usb0NBQUE7QUZzRVI7O0FFN0VNO0VBQ0Usb0NBQUE7QUZnRlI7O0FFOUVNO0VBQ0UseUJBQUE7QUZpRlI7O0FFL0VNO0VBQ0Usb0NBQUE7QUZrRlI7O0FFekZNO0VBQ0Usb0NBQUE7QUY0RlI7O0FFMUZNO0VBQ0UseUJBQUE7QUY2RlI7O0FFM0ZNO0VBQ0Usb0NBQUE7QUY4RlI7O0FFckdNO0VBQ0Usb0NBQUE7QUZ3R1I7O0FFdEdNO0VBQ0UseUJBQUE7QUZ5R1I7O0FFdkdNO0VBQ0Usb0NBQUE7QUYwR1I7O0FFakhNO0VBQ0Usb0NBQUE7QUZvSFI7O0FFbEhNO0VBQ0UseUJBQUE7QUZxSFI7O0FFbkhNO0VBQ0Usb0NBQUE7QUZzSFI7O0FFN0hNO0VBQ0Usb0NBQUE7QUZnSVI7O0FFOUhNO0VBQ0UseUJBQUE7QUZpSVI7O0FFL0hNO0VBQ0Usb0NBQUE7QUZrSVI7O0FFeklNO0VBQ0Usb0NBQUE7QUY0SVI7O0FFMUlNO0VBQ0UseUJBQUE7QUY2SVI7O0FFM0lNO0VBQ0Usb0NBQUE7QUY4SVI7O0FFckpNO0VBQ0Usb0NBQUE7QUZ3SlI7O0FFdEpNO0VBQ0UseUJBQUE7QUZ5SlI7O0FFdkpNO0VBQ0Usb0NBQUE7QUYwSlI7O0FFaktNO0VBQ0Usb0NBQUE7QUZvS1I7O0FFbEtNO0VBQ0UseUJBQUE7QUZxS1I7O0FFbktNO0VBQ0Usb0NBQUE7QUZzS1I7O0FFN0tNO0VBQ0Usb0NBQUE7QUZnTFI7O0FFOUtNO0VBQ0UseUJBQUE7QUZpTFI7O0FFL0tNO0VBQ0Usb0NBQUE7QUZrTFI7O0FFbk1NO0VBQ0Usb0NBQUE7QUZzTVI7O0FFcE1NO0VBQ0UseUJBQUE7QUZ1TVI7O0FFck1NO0VBQ0Usb0NBQUE7QUZ3TVI7O0FFck1NO0VBQ0Usb0NBQUE7QUZ3TVI7O0FFdE1NO0VBQ0UseUJBQUE7QUZ5TVI7O0FFdk1NO0VBQ0Usb0NBQUE7QUYwTVI7O0FFak5NO0VBQ0Usb0NBQUE7QUZvTlI7O0FFbE5NO0VBQ0UseUJBQUE7QUZxTlI7O0FFbk5NO0VBQ0Usb0NBQUE7QUZzTlI7O0FFN05NO0VBQ0Usb0NBQUE7QUZnT1I7O0FFOU5NO0VBQ0UseUJBQUE7QUZpT1I7O0FFL05NO0VBQ0Usb0NBQUE7QUZrT1I7O0FFek9NO0VBQ0Usb0NBQUE7QUY0T1I7O0FFMU9NO0VBQ0UseUJBQUE7QUY2T1I7O0FFM09NO0VBQ0Usb0NBQUE7QUY4T1I7O0FFclBNO0VBQ0Usb0NBQUE7QUZ3UFI7O0FFdFBNO0VBQ0UseUJBQUE7QUZ5UFI7O0FFdlBNO0VBQ0Usb0NBQUE7QUYwUFI7O0FFalFNO0VBQ0Usb0NBQUE7QUZvUVI7O0FFbFFNO0VBQ0UseUJBQUE7QUZxUVI7O0FFblFNO0VBQ0Usb0NBQUE7QUZzUVI7O0FFN1FNO0VBQ0Usb0NBQUE7QUZnUlI7O0FFOVFNO0VBQ0UseUJBQUE7QUZpUlI7O0FFL1FNO0VBQ0Usb0NBQUE7QUZrUlI7O0FFelJNO0VBQ0Usb0NBQUE7QUY0UlI7O0FFMVJNO0VBQ0UseUJBQUE7QUY2UlI7O0FFM1JNO0VBQ0Usb0NBQUE7QUY4UlI7O0FFclNNO0VBQ0Usb0NBQUE7QUZ3U1I7O0FFdFNNO0VBQ0UseUJBQUE7QUZ5U1I7O0FFdlNNO0VBQ0Usb0NBQUE7QUYwU1I7O0FFalRNO0VBQ0Usb0NBQUE7QUZvVFI7O0FFbFRNO0VBQ0UseUJBQUE7QUZxVFI7O0FFblRNO0VBQ0Usb0NBQUE7QUZzVFI7O0FFN1RNO0VBQ0Usb0NBQUE7QUZnVVI7O0FFOVRNO0VBQ0UseUJBQUE7QUZpVVI7O0FFL1RNO0VBQ0Usb0NBQUE7QUZrVVI7O0FFelVNO0VBQ0Usb0NBQUE7QUY0VVI7O0FFMVVNO0VBQ0UseUJBQUE7QUY2VVI7O0FFM1VNO0VBQ0Usb0NBQUE7QUY4VVI7O0FFclZNO0VBQ0Usb0NBQUE7QUZ3VlI7O0FFdFZNO0VBQ0UseUJBQUE7QUZ5VlI7O0FFdlZNO0VBQ0Usb0NBQUE7QUYwVlI7O0FFM1dNO0VBQ0Usb0NBQUE7QUY4V1I7O0FFNVdNO0VBQ0UseUJBQUE7QUYrV1I7O0FFN1dNO0VBQ0Usb0NBQUE7QUZnWFI7O0FFN1dNO0VBQ0Usb0NBQUE7QUZnWFI7O0FFOVdNO0VBQ0UseUJBQUE7QUZpWFI7O0FFL1dNO0VBQ0Usb0NBQUE7QUZrWFI7O0FFelhNO0VBQ0Usb0NBQUE7QUY0WFI7O0FFMVhNO0VBQ0UseUJBQUE7QUY2WFI7O0FFM1hNO0VBQ0Usb0NBQUE7QUY4WFI7O0FFcllNO0VBQ0Usb0NBQUE7QUZ3WVI7O0FFdFlNO0VBQ0UseUJBQUE7QUZ5WVI7O0FFdllNO0VBQ0Usb0NBQUE7QUYwWVI7O0FFalpNO0VBQ0Usb0NBQUE7QUZvWlI7O0FFbFpNO0VBQ0UseUJBQUE7QUZxWlI7O0FFblpNO0VBQ0Usb0NBQUE7QUZzWlI7O0FFN1pNO0VBQ0Usb0NBQUE7QUZnYVI7O0FFOVpNO0VBQ0UseUJBQUE7QUZpYVI7O0FFL1pNO0VBQ0Usb0NBQUE7QUZrYVI7O0FFemFNO0VBQ0Usb0NBQUE7QUY0YVI7O0FFMWFNO0VBQ0UseUJBQUE7QUY2YVI7O0FFM2FNO0VBQ0Usb0NBQUE7QUY4YVI7O0FFcmJNO0VBQ0Usb0NBQUE7QUZ3YlI7O0FFdGJNO0VBQ0UseUJBQUE7QUZ5YlI7O0FFdmJNO0VBQ0Usb0NBQUE7QUYwYlI7O0FFamNNO0VBQ0Usb0NBQUE7QUZvY1I7O0FFbGNNO0VBQ0UseUJBQUE7QUZxY1I7O0FFbmNNO0VBQ0Usb0NBQUE7QUZzY1I7O0FFN2NNO0VBQ0Usb0NBQUE7QUZnZFI7O0FFOWNNO0VBQ0UseUJBQUE7QUZpZFI7O0FFL2NNO0VBQ0Usb0NBQUE7QUZrZFI7O0FFemRNO0VBQ0Usb0NBQUE7QUY0ZFI7O0FFMWRNO0VBQ0UseUJBQUE7QUY2ZFI7O0FFM2RNO0VBQ0Usb0NBQUE7QUY4ZFI7O0FFcmVNO0VBQ0Usb0NBQUE7QUZ3ZVI7O0FFdGVNO0VBQ0UseUJBQUE7QUZ5ZVI7O0FFdmVNO0VBQ0Usb0NBQUE7QUYwZVI7O0FFamZNO0VBQ0Usb0NBQUE7QUZvZlI7O0FFbGZNO0VBQ0UseUJBQUE7QUZxZlI7O0FFbmZNO0VBQ0Usb0NBQUE7QUZzZlI7O0FFN2ZNO0VBQ0Usb0NBQUE7QUZnZ0JSOztBRTlmTTtFQUNFLHlCQUFBO0FGaWdCUjs7QUUvZk07RUFDRSxvQ0FBQTtBRmtnQlI7O0FFbmhCTTtFQUNFLG9DQUFBO0FGc2hCUjs7QUVwaEJNO0VBQ0UseUJBQUE7QUZ1aEJSOztBRXJoQk07RUFDRSxvQ0FBQTtBRndoQlI7O0FFcmhCTTtFQUNFLG9DQUFBO0FGd2hCUjs7QUV0aEJNO0VBQ0UseUJBQUE7QUZ5aEJSOztBRXZoQk07RUFDRSxvQ0FBQTtBRjBoQlI7O0FFamlCTTtFQUNFLG9DQUFBO0FGb2lCUjs7QUVsaUJNO0VBQ0UseUJBQUE7QUZxaUJSOztBRW5pQk07RUFDRSxvQ0FBQTtBRnNpQlI7O0FFN2lCTTtFQUNFLG9DQUFBO0FGZ2pCUjs7QUU5aUJNO0VBQ0UseUJBQUE7QUZpakJSOztBRS9pQk07RUFDRSxvQ0FBQTtBRmtqQlI7O0FFempCTTtFQUNFLG9DQUFBO0FGNGpCUjs7QUUxakJNO0VBQ0UseUJBQUE7QUY2akJSOztBRTNqQk07RUFDRSxvQ0FBQTtBRjhqQlI7O0FFcmtCTTtFQUNFLG9DQUFBO0FGd2tCUjs7QUV0a0JNO0VBQ0UseUJBQUE7QUZ5a0JSOztBRXZrQk07RUFDRSxvQ0FBQTtBRjBrQlI7O0FFamxCTTtFQUNFLG9DQUFBO0FGb2xCUjs7QUVsbEJNO0VBQ0UseUJBQUE7QUZxbEJSOztBRW5sQk07RUFDRSxvQ0FBQTtBRnNsQlI7O0FFN2xCTTtFQUNFLG9DQUFBO0FGZ21CUjs7QUU5bEJNO0VBQ0UseUJBQUE7QUZpbUJSOztBRS9sQk07RUFDRSxvQ0FBQTtBRmttQlI7O0FFem1CTTtFQUNFLG9DQUFBO0FGNG1CUjs7QUUxbUJNO0VBQ0UseUJBQUE7QUY2bUJSOztBRTNtQk07RUFDRSxvQ0FBQTtBRjhtQlI7O0FFcm5CTTtFQUNFLG9DQUFBO0FGd25CUjs7QUV0bkJNO0VBQ0UseUJBQUE7QUZ5bkJSOztBRXZuQk07RUFDRSxvQ0FBQTtBRjBuQlI7O0FFam9CTTtFQUNFLG9DQUFBO0FGb29CUjs7QUVsb0JNO0VBQ0UseUJBQUE7QUZxb0JSOztBRW5vQk07RUFDRSxvQ0FBQTtBRnNvQlI7O0FFN29CTTtFQUNFLG9DQUFBO0FGZ3BCUjs7QUU5b0JNO0VBQ0UseUJBQUE7QUZpcEJSOztBRS9vQk07RUFDRSxvQ0FBQTtBRmtwQlI7O0FFenBCTTtFQUNFLG9DQUFBO0FGNHBCUjs7QUUxcEJNO0VBQ0UseUJBQUE7QUY2cEJSOztBRTNwQk07RUFDRSxvQ0FBQTtBRjhwQlI7O0FFcnFCTTtFQUNFLG9DQUFBO0FGd3FCUjs7QUV0cUJNO0VBQ0UseUJBQUE7QUZ5cUJSOztBRXZxQk07RUFDRSxvQ0FBQTtBRjBxQlI7O0FFM3JCTTtFQUNFLG9DQUFBO0FGOHJCUjs7QUU1ckJNO0VBQ0UseUJBQUE7QUYrckJSOztBRTdyQk07RUFDRSxvQ0FBQTtBRmdzQlI7O0FFN3JCTTtFQUNFLG9DQUFBO0FGZ3NCUjs7QUU5ckJNO0VBQ0UseUJBQUE7QUZpc0JSOztBRS9yQk07RUFDRSxvQ0FBQTtBRmtzQlI7O0FFenNCTTtFQUNFLG9DQUFBO0FGNHNCUjs7QUUxc0JNO0VBQ0UseUJBQUE7QUY2c0JSOztBRTNzQk07RUFDRSxvQ0FBQTtBRjhzQlI7O0FFcnRCTTtFQUNFLG9DQUFBO0FGd3RCUjs7QUV0dEJNO0VBQ0UseUJBQUE7QUZ5dEJSOztBRXZ0Qk07RUFDRSxvQ0FBQTtBRjB0QlI7O0FFanVCTTtFQUNFLG9DQUFBO0FGb3VCUjs7QUVsdUJNO0VBQ0UseUJBQUE7QUZxdUJSOztBRW51Qk07RUFDRSxvQ0FBQTtBRnN1QlI7O0FFN3VCTTtFQUNFLG9DQUFBO0FGZ3ZCUjs7QUU5dUJNO0VBQ0UseUJBQUE7QUZpdkJSOztBRS91Qk07RUFDRSxvQ0FBQTtBRmt2QlI7O0FFenZCTTtFQUNFLG9DQUFBO0FGNHZCUjs7QUUxdkJNO0VBQ0UseUJBQUE7QUY2dkJSOztBRTN2Qk07RUFDRSxvQ0FBQTtBRjh2QlI7O0FFcndCTTtFQUNFLG9DQUFBO0FGd3dCUjs7QUV0d0JNO0VBQ0UseUJBQUE7QUZ5d0JSOztBRXZ3Qk07RUFDRSxvQ0FBQTtBRjB3QlI7O0FFanhCTTtFQUNFLG9DQUFBO0FGb3hCUjs7QUVseEJNO0VBQ0UseUJBQUE7QUZxeEJSOztBRW54Qk07RUFDRSxvQ0FBQTtBRnN4QlI7O0FFN3hCTTtFQUNFLG9DQUFBO0FGZ3lCUjs7QUU5eEJNO0VBQ0UseUJBQUE7QUZpeUJSOztBRS94Qk07RUFDRSxvQ0FBQTtBRmt5QlI7O0FFenlCTTtFQUNFLG9DQUFBO0FGNHlCUjs7QUUxeUJNO0VBQ0UseUJBQUE7QUY2eUJSOztBRTN5Qk07RUFDRSxvQ0FBQTtBRjh5QlI7O0FFcnpCTTtFQUNFLG9DQUFBO0FGd3pCUjs7QUV0ekJNO0VBQ0UseUJBQUE7QUZ5ekJSOztBRXZ6Qk07RUFDRSxvQ0FBQTtBRjB6QlI7O0FFajBCTTtFQUNFLG9DQUFBO0FGbzBCUjs7QUVsMEJNO0VBQ0UseUJBQUE7QUZxMEJSOztBRW4wQk07RUFDRSxvQ0FBQTtBRnMwQlI7O0FFNzBCTTtFQUNFLG9DQUFBO0FGZzFCUjs7QUU5MEJNO0VBQ0UseUJBQUE7QUZpMUJSOztBRS8wQk07RUFDRSxvQ0FBQTtBRmsxQlI7O0FFbjJCTTtFQUNFLG9DQUFBO0FGczJCUjs7QUVwMkJNO0VBQ0UseUJBQUE7QUZ1MkJSOztBRXIyQk07RUFDRSxvQ0FBQTtBRncyQlI7O0FFcjJCTTtFQUNFLG9DQUFBO0FGdzJCUjs7QUV0MkJNO0VBQ0UseUJBQUE7QUZ5MkJSOztBRXYyQk07RUFDRSxvQ0FBQTtBRjAyQlI7O0FFajNCTTtFQUNFLG9DQUFBO0FGbzNCUjs7QUVsM0JNO0VBQ0UseUJBQUE7QUZxM0JSOztBRW4zQk07RUFDRSxvQ0FBQTtBRnMzQlI7O0FFNzNCTTtFQUNFLG9DQUFBO0FGZzRCUjs7QUU5M0JNO0VBQ0UseUJBQUE7QUZpNEJSOztBRS8zQk07RUFDRSxvQ0FBQTtBRms0QlI7O0FFejRCTTtFQUNFLG9DQUFBO0FGNDRCUjs7QUUxNEJNO0VBQ0UseUJBQUE7QUY2NEJSOztBRTM0Qk07RUFDRSxvQ0FBQTtBRjg0QlI7O0FFcjVCTTtFQUNFLG9DQUFBO0FGdzVCUjs7QUV0NUJNO0VBQ0UseUJBQUE7QUZ5NUJSOztBRXY1Qk07RUFDRSxvQ0FBQTtBRjA1QlI7O0FFajZCTTtFQUNFLG9DQUFBO0FGbzZCUjs7QUVsNkJNO0VBQ0UseUJBQUE7QUZxNkJSOztBRW42Qk07RUFDRSxvQ0FBQTtBRnM2QlI7O0FFNzZCTTtFQUNFLG9DQUFBO0FGZzdCUjs7QUU5NkJNO0VBQ0UseUJBQUE7QUZpN0JSOztBRS82Qk07RUFDRSxvQ0FBQTtBRms3QlI7O0FFejdCTTtFQUNFLG9DQUFBO0FGNDdCUjs7QUUxN0JNO0VBQ0UseUJBQUE7QUY2N0JSOztBRTM3Qk07RUFDRSxvQ0FBQTtBRjg3QlI7O0FFcjhCTTtFQUNFLG9DQUFBO0FGdzhCUjs7QUV0OEJNO0VBQ0UseUJBQUE7QUZ5OEJSOztBRXY4Qk07RUFDRSxvQ0FBQTtBRjA4QlI7O0FFajlCTTtFQUNFLG9DQUFBO0FGbzlCUjs7QUVsOUJNO0VBQ0UseUJBQUE7QUZxOUJSOztBRW45Qk07RUFDRSxvQ0FBQTtBRnM5QlI7O0FFNzlCTTtFQUNFLG9DQUFBO0FGZytCUjs7QUU5OUJNO0VBQ0UseUJBQUE7QUZpK0JSOztBRS85Qk07RUFDRSxvQ0FBQTtBRmsrQlI7O0FFeitCTTtFQUNFLG9DQUFBO0FGNCtCUjs7QUUxK0JNO0VBQ0UseUJBQUE7QUY2K0JSOztBRTMrQk07RUFDRSxvQ0FBQTtBRjgrQlI7O0FFci9CTTtFQUNFLG9DQUFBO0FGdy9CUjs7QUV0L0JNO0VBQ0UseUJBQUE7QUZ5L0JSOztBRXYvQk07RUFDRSxvQ0FBQTtBRjAvQlI7O0FFM2dDTTtFQUNFLG9DQUFBO0FGOGdDUjs7QUU1Z0NNO0VBQ0UseUJBQUE7QUYrZ0NSOztBRTdnQ007RUFDRSxvQ0FBQTtBRmdoQ1I7O0FFN2dDTTtFQUNFLG9DQUFBO0FGZ2hDUjs7QUU5Z0NNO0VBQ0UseUJBQUE7QUZpaENSOztBRS9nQ007RUFDRSxvQ0FBQTtBRmtoQ1I7O0FFemhDTTtFQUNFLG9DQUFBO0FGNGhDUjs7QUUxaENNO0VBQ0UseUJBQUE7QUY2aENSOztBRTNoQ007RUFDRSxvQ0FBQTtBRjhoQ1I7O0FFcmlDTTtFQUNFLG9DQUFBO0FGd2lDUjs7QUV0aUNNO0VBQ0UseUJBQUE7QUZ5aUNSOztBRXZpQ007RUFDRSxvQ0FBQTtBRjBpQ1I7O0FFampDTTtFQUNFLG9DQUFBO0FGb2pDUjs7QUVsakNNO0VBQ0UseUJBQUE7QUZxakNSOztBRW5qQ007RUFDRSxvQ0FBQTtBRnNqQ1I7O0FFN2pDTTtFQUNFLG9DQUFBO0FGZ2tDUjs7QUU5akNNO0VBQ0UseUJBQUE7QUZpa0NSOztBRS9qQ007RUFDRSxvQ0FBQTtBRmtrQ1I7O0FFemtDTTtFQUNFLG9DQUFBO0FGNGtDUjs7QUUxa0NNO0VBQ0UseUJBQUE7QUY2a0NSOztBRTNrQ007RUFDRSxvQ0FBQTtBRjhrQ1I7O0FFcmxDTTtFQUNFLG9DQUFBO0FGd2xDUjs7QUV0bENNO0VBQ0UseUJBQUE7QUZ5bENSOztBRXZsQ007RUFDRSxvQ0FBQTtBRjBsQ1I7O0FFam1DTTtFQUNFLG9DQUFBO0FGb21DUjs7QUVsbUNNO0VBQ0UseUJBQUE7QUZxbUNSOztBRW5tQ007RUFDRSxvQ0FBQTtBRnNtQ1I7O0FFN21DTTtFQUNFLG9DQUFBO0FGZ25DUjs7QUU5bUNNO0VBQ0UseUJBQUE7QUZpbkNSOztBRS9tQ007RUFDRSxvQ0FBQTtBRmtuQ1I7O0FFem5DTTtFQUNFLG9DQUFBO0FGNG5DUjs7QUUxbkNNO0VBQ0UseUJBQUE7QUY2bkNSOztBRTNuQ007RUFDRSxvQ0FBQTtBRjhuQ1I7O0FFcm9DTTtFQUNFLG9DQUFBO0FGd29DUjs7QUV0b0NNO0VBQ0UseUJBQUE7QUZ5b0NSOztBRXZvQ007RUFDRSxvQ0FBQTtBRjBvQ1I7O0FFanBDTTtFQUNFLG9DQUFBO0FGb3BDUjs7QUVscENNO0VBQ0UseUJBQUE7QUZxcENSOztBRW5wQ007RUFDRSxvQ0FBQTtBRnNwQ1I7O0FFN3BDTTtFQUNFLG9DQUFBO0FGZ3FDUjs7QUU5cENNO0VBQ0UseUJBQUE7QUZpcUNSOztBRS9wQ007RUFDRSxvQ0FBQTtBRmtxQ1I7O0FFbnJDTTtFQUNFLG9DQUFBO0FGc3JDUjs7QUVwckNNO0VBQ0UseUJBQUE7QUZ1ckNSOztBRXJyQ007RUFDRSxvQ0FBQTtBRndyQ1I7O0FFcnJDTTtFQUNFLG9DQUFBO0FGd3JDUjs7QUV0ckNNO0VBQ0UseUJBQUE7QUZ5ckNSOztBRXZyQ007RUFDRSxvQ0FBQTtBRjByQ1I7O0FFanNDTTtFQUNFLG9DQUFBO0FGb3NDUjs7QUVsc0NNO0VBQ0UseUJBQUE7QUZxc0NSOztBRW5zQ007RUFDRSxvQ0FBQTtBRnNzQ1I7O0FFN3NDTTtFQUNFLG9DQUFBO0FGZ3RDUjs7QUU5c0NNO0VBQ0UseUJBQUE7QUZpdENSOztBRS9zQ007RUFDRSxvQ0FBQTtBRmt0Q1I7O0FFenRDTTtFQUNFLG9DQUFBO0FGNHRDUjs7QUUxdENNO0VBQ0UseUJBQUE7QUY2dENSOztBRTN0Q007RUFDRSxvQ0FBQTtBRjh0Q1I7O0FFcnVDTTtFQUNFLG9DQUFBO0FGd3VDUjs7QUV0dUNNO0VBQ0UseUJBQUE7QUZ5dUNSOztBRXZ1Q007RUFDRSxvQ0FBQTtBRjB1Q1I7O0FFanZDTTtFQUNFLG9DQUFBO0FGb3ZDUjs7QUVsdkNNO0VBQ0UseUJBQUE7QUZxdkNSOztBRW52Q007RUFDRSxvQ0FBQTtBRnN2Q1I7O0FFN3ZDTTtFQUNFLG9DQUFBO0FGZ3dDUjs7QUU5dkNNO0VBQ0UseUJBQUE7QUZpd0NSOztBRS92Q007RUFDRSxvQ0FBQTtBRmt3Q1I7O0FFendDTTtFQUNFLG9DQUFBO0FGNHdDUjs7QUUxd0NNO0VBQ0UseUJBQUE7QUY2d0NSOztBRTN3Q007RUFDRSxvQ0FBQTtBRjh3Q1I7O0FFcnhDTTtFQUNFLG9DQUFBO0FGd3hDUjs7QUV0eENNO0VBQ0UseUJBQUE7QUZ5eENSOztBRXZ4Q007RUFDRSxvQ0FBQTtBRjB4Q1I7O0FFanlDTTtFQUNFLG9DQUFBO0FGb3lDUjs7QUVseUNNO0VBQ0UseUJBQUE7QUZxeUNSOztBRW55Q007RUFDRSxvQ0FBQTtBRnN5Q1I7O0FFN3lDTTtFQUNFLG9DQUFBO0FGZ3pDUjs7QUU5eUNNO0VBQ0UseUJBQUE7QUZpekNSOztBRS95Q007RUFDRSxvQ0FBQTtBRmt6Q1I7O0FFenpDTTtFQUNFLG9DQUFBO0FGNHpDUjs7QUUxekNNO0VBQ0UseUJBQUE7QUY2ekNSOztBRTN6Q007RUFDRSxvQ0FBQTtBRjh6Q1I7O0FFcjBDTTtFQUNFLG9DQUFBO0FGdzBDUjs7QUV0MENNO0VBQ0UseUJBQUE7QUZ5MENSOztBRXYwQ007RUFDRSxvQ0FBQTtBRjAwQ1I7O0FFMzFDTTtFQUNFLG9DQUFBO0FGODFDUjs7QUU1MUNNO0VBQ0UseUJBQUE7QUYrMUNSOztBRTcxQ007RUFDRSxvQ0FBQTtBRmcyQ1I7O0FFNzFDTTtFQUNFLG9DQUFBO0FGZzJDUjs7QUU5MUNNO0VBQ0UseUJBQUE7QUZpMkNSOztBRS8xQ007RUFDRSxvQ0FBQTtBRmsyQ1I7O0FFejJDTTtFQUNFLG9DQUFBO0FGNDJDUjs7QUUxMkNNO0VBQ0UseUJBQUE7QUY2MkNSOztBRTMyQ007RUFDRSxvQ0FBQTtBRjgyQ1I7O0FFcjNDTTtFQUNFLG9DQUFBO0FGdzNDUjs7QUV0M0NNO0VBQ0UseUJBQUE7QUZ5M0NSOztBRXYzQ007RUFDRSxvQ0FBQTtBRjAzQ1I7O0FFajRDTTtFQUNFLG9DQUFBO0FGbzRDUjs7QUVsNENNO0VBQ0UseUJBQUE7QUZxNENSOztBRW40Q007RUFDRSxvQ0FBQTtBRnM0Q1I7O0FFNzRDTTtFQUNFLG9DQUFBO0FGZzVDUjs7QUU5NENNO0VBQ0UseUJBQUE7QUZpNUNSOztBRS80Q007RUFDRSxvQ0FBQTtBRms1Q1I7O0FFejVDTTtFQUNFLG9DQUFBO0FGNDVDUjs7QUUxNUNNO0VBQ0UseUJBQUE7QUY2NUNSOztBRTM1Q007RUFDRSxvQ0FBQTtBRjg1Q1I7O0FFcjZDTTtFQUNFLG9DQUFBO0FGdzZDUjs7QUV0NkNNO0VBQ0UseUJBQUE7QUZ5NkNSOztBRXY2Q007RUFDRSxvQ0FBQTtBRjA2Q1I7O0FFajdDTTtFQUNFLG9DQUFBO0FGbzdDUjs7QUVsN0NNO0VBQ0UseUJBQUE7QUZxN0NSOztBRW43Q007RUFDRSxvQ0FBQTtBRnM3Q1I7O0FFNzdDTTtFQUNFLG9DQUFBO0FGZzhDUjs7QUU5N0NNO0VBQ0UseUJBQUE7QUZpOENSOztBRS83Q007RUFDRSxvQ0FBQTtBRms4Q1I7O0FFejhDTTtFQUNFLG9DQUFBO0FGNDhDUjs7QUUxOENNO0VBQ0UseUJBQUE7QUY2OENSOztBRTM4Q007RUFDRSxvQ0FBQTtBRjg4Q1I7O0FFcjlDTTtFQUNFLG9DQUFBO0FGdzlDUjs7QUV0OUNNO0VBQ0UseUJBQUE7QUZ5OUNSOztBRXY5Q007RUFDRSxvQ0FBQTtBRjA5Q1I7O0FFaitDTTtFQUNFLG9DQUFBO0FGbytDUjs7QUVsK0NNO0VBQ0UseUJBQUE7QUZxK0NSOztBRW4rQ007RUFDRSxvQ0FBQTtBRnMrQ1I7O0FFNytDTTtFQUNFLG9DQUFBO0FGZy9DUjs7QUU5K0NNO0VBQ0UseUJBQUE7QUZpL0NSOztBRS8rQ007RUFDRSxvQ0FBQTtBRmsvQ1I7O0FFbmdETTtFQUNFLG9DQUFBO0FGc2dEUjs7QUVwZ0RNO0VBQ0UseUJBQUE7QUZ1Z0RSOztBRXJnRE07RUFDRSxvQ0FBQTtBRndnRFI7O0FFcmdETTtFQUNFLG9DQUFBO0FGd2dEUjs7QUV0Z0RNO0VBQ0UseUJBQUE7QUZ5Z0RSOztBRXZnRE07RUFDRSxvQ0FBQTtBRjBnRFI7O0FFamhETTtFQUNFLG9DQUFBO0FGb2hEUjs7QUVsaERNO0VBQ0UseUJBQUE7QUZxaERSOztBRW5oRE07RUFDRSxvQ0FBQTtBRnNoRFI7O0FFN2hETTtFQUNFLG9DQUFBO0FGZ2lEUjs7QUU5aERNO0VBQ0UseUJBQUE7QUZpaURSOztBRS9oRE07RUFDRSxvQ0FBQTtBRmtpRFI7O0FFemlETTtFQUNFLG9DQUFBO0FGNGlEUjs7QUUxaURNO0VBQ0UseUJBQUE7QUY2aURSOztBRTNpRE07RUFDRSxvQ0FBQTtBRjhpRFI7O0FFcmpETTtFQUNFLG9DQUFBO0FGd2pEUjs7QUV0akRNO0VBQ0UseUJBQUE7QUZ5akRSOztBRXZqRE07RUFDRSxvQ0FBQTtBRjBqRFI7O0FFamtETTtFQUNFLG9DQUFBO0FGb2tEUjs7QUVsa0RNO0VBQ0UseUJBQUE7QUZxa0RSOztBRW5rRE07RUFDRSxvQ0FBQTtBRnNrRFI7O0FFN2tETTtFQUNFLG9DQUFBO0FGZ2xEUjs7QUU5a0RNO0VBQ0UseUJBQUE7QUZpbERSOztBRS9rRE07RUFDRSxvQ0FBQTtBRmtsRFI7O0FFemxETTtFQUNFLG9DQUFBO0FGNGxEUjs7QUUxbERNO0VBQ0UseUJBQUE7QUY2bERSOztBRTNsRE07RUFDRSxvQ0FBQTtBRjhsRFI7O0FFcm1ETTtFQUNFLG9DQUFBO0FGd21EUjs7QUV0bURNO0VBQ0UseUJBQUE7QUZ5bURSOztBRXZtRE07RUFDRSxvQ0FBQTtBRjBtRFI7O0FFam5ETTtFQUNFLG9DQUFBO0FGb25EUjs7QUVsbkRNO0VBQ0UseUJBQUE7QUZxbkRSOztBRW5uRE07RUFDRSxvQ0FBQTtBRnNuRFI7O0FFN25ETTtFQUNFLG9DQUFBO0FGZ29EUjs7QUU5bkRNO0VBQ0UseUJBQUE7QUZpb0RSOztBRS9uRE07RUFDRSxvQ0FBQTtBRmtvRFI7O0FFem9ETTtFQUNFLG9DQUFBO0FGNG9EUjs7QUUxb0RNO0VBQ0UseUJBQUE7QUY2b0RSOztBRTNvRE07RUFDRSxvQ0FBQTtBRjhvRFI7O0FFcnBETTtFQUNFLG9DQUFBO0FGd3BEUjs7QUV0cERNO0VBQ0UseUJBQUE7QUZ5cERSOztBRXZwRE07RUFDRSxvQ0FBQTtBRjBwRFI7O0FFM3FETTtFQUNFLG9DQUFBO0FGOHFEUjs7QUU1cURNO0VBQ0UseUJBQUE7QUYrcURSOztBRTdxRE07RUFDRSxvQ0FBQTtBRmdyRFI7O0FFN3FETTtFQUNFLG9DQUFBO0FGZ3JEUjs7QUU5cURNO0VBQ0UseUJBQUE7QUZpckRSOztBRS9xRE07RUFDRSxvQ0FBQTtBRmtyRFI7O0FFenJETTtFQUNFLG9DQUFBO0FGNHJEUjs7QUUxckRNO0VBQ0UseUJBQUE7QUY2ckRSOztBRTNyRE07RUFDRSxvQ0FBQTtBRjhyRFI7O0FFcnNETTtFQUNFLG9DQUFBO0FGd3NEUjs7QUV0c0RNO0VBQ0UseUJBQUE7QUZ5c0RSOztBRXZzRE07RUFDRSxvQ0FBQTtBRjBzRFI7O0FFanRETTtFQUNFLG9DQUFBO0FGb3REUjs7QUVsdERNO0VBQ0UseUJBQUE7QUZxdERSOztBRW50RE07RUFDRSxvQ0FBQTtBRnN0RFI7O0FFN3RETTtFQUNFLG9DQUFBO0FGZ3VEUjs7QUU5dERNO0VBQ0UseUJBQUE7QUZpdURSOztBRS90RE07RUFDRSxvQ0FBQTtBRmt1RFI7O0FFenVETTtFQUNFLG9DQUFBO0FGNHVEUjs7QUUxdURNO0VBQ0UseUJBQUE7QUY2dURSOztBRTN1RE07RUFDRSxvQ0FBQTtBRjh1RFI7O0FFcnZETTtFQUNFLG9DQUFBO0FGd3ZEUjs7QUV0dkRNO0VBQ0UseUJBQUE7QUZ5dkRSOztBRXZ2RE07RUFDRSxvQ0FBQTtBRjB2RFI7O0FFandETTtFQUNFLG9DQUFBO0FGb3dEUjs7QUVsd0RNO0VBQ0UseUJBQUE7QUZxd0RSOztBRW53RE07RUFDRSxvQ0FBQTtBRnN3RFI7O0FFN3dETTtFQUNFLG9DQUFBO0FGZ3hEUjs7QUU5d0RNO0VBQ0UseUJBQUE7QUZpeERSOztBRS93RE07RUFDRSxvQ0FBQTtBRmt4RFI7O0FFenhETTtFQUNFLG9DQUFBO0FGNHhEUjs7QUUxeERNO0VBQ0UseUJBQUE7QUY2eERSOztBRTN4RE07RUFDRSxvQ0FBQTtBRjh4RFI7O0FFcnlETTtFQUNFLG9DQUFBO0FGd3lEUjs7QUV0eURNO0VBQ0UseUJBQUE7QUZ5eURSOztBRXZ5RE07RUFDRSxvQ0FBQTtBRjB5RFI7O0FFanpETTtFQUNFLG9DQUFBO0FGb3pEUjs7QUVsekRNO0VBQ0UseUJBQUE7QUZxekRSOztBRW56RE07RUFDRSxvQ0FBQTtBRnN6RFI7O0FFN3pETTtFQUNFLG9DQUFBO0FGZzBEUjs7QUU5ekRNO0VBQ0UseUJBQUE7QUZpMERSOztBRS96RE07RUFDRSxvQ0FBQTtBRmswRFI7O0FFbjFETTtFQUNFLG9DQUFBO0FGczFEUjs7QUVwMURNO0VBQ0UseUJBQUE7QUZ1MURSOztBRXIxRE07RUFDRSxvQ0FBQTtBRncxRFI7O0FFcjFETTtFQUNFLG9DQUFBO0FGdzFEUjs7QUV0MURNO0VBQ0UseUJBQUE7QUZ5MURSOztBRXYxRE07RUFDRSxvQ0FBQTtBRjAxRFI7O0FFajJETTtFQUNFLG9DQUFBO0FGbzJEUjs7QUVsMkRNO0VBQ0UseUJBQUE7QUZxMkRSOztBRW4yRE07RUFDRSxvQ0FBQTtBRnMyRFI7O0FFNzJETTtFQUNFLG9DQUFBO0FGZzNEUjs7QUU5MkRNO0VBQ0UseUJBQUE7QUZpM0RSOztBRS8yRE07RUFDRSxvQ0FBQTtBRmszRFI7O0FFejNETTtFQUNFLG9DQUFBO0FGNDNEUjs7QUUxM0RNO0VBQ0UseUJBQUE7QUY2M0RSOztBRTMzRE07RUFDRSxvQ0FBQTtBRjgzRFI7O0FFcjRETTtFQUNFLG9DQUFBO0FGdzREUjs7QUV0NERNO0VBQ0UseUJBQUE7QUZ5NERSOztBRXY0RE07RUFDRSxvQ0FBQTtBRjA0RFI7O0FFajVETTtFQUNFLG9DQUFBO0FGbzVEUjs7QUVsNURNO0VBQ0UseUJBQUE7QUZxNURSOztBRW41RE07RUFDRSxvQ0FBQTtBRnM1RFI7O0FFNzVETTtFQUNFLG9DQUFBO0FGZzZEUjs7QUU5NURNO0VBQ0UseUJBQUE7QUZpNkRSOztBRS81RE07RUFDRSxvQ0FBQTtBRms2RFI7O0FFejZETTtFQUNFLG9DQUFBO0FGNDZEUjs7QUUxNkRNO0VBQ0UseUJBQUE7QUY2NkRSOztBRTM2RE07RUFDRSxvQ0FBQTtBRjg2RFI7O0FFcjdETTtFQUNFLG9DQUFBO0FGdzdEUjs7QUV0N0RNO0VBQ0UseUJBQUE7QUZ5N0RSOztBRXY3RE07RUFDRSxvQ0FBQTtBRjA3RFI7O0FFajhETTtFQUNFLG9DQUFBO0FGbzhEUjs7QUVsOERNO0VBQ0UseUJBQUE7QUZxOERSOztBRW44RE07RUFDRSxvQ0FBQTtBRnM4RFI7O0FFNzhETTtFQUNFLG9DQUFBO0FGZzlEUjs7QUU5OERNO0VBQ0UseUJBQUE7QUZpOURSOztBRS84RE07RUFDRSxvQ0FBQTtBRms5RFI7O0FFejlETTtFQUNFLG9DQUFBO0FGNDlEUjs7QUUxOURNO0VBQ0UseUJBQUE7QUY2OURSOztBRTM5RE07RUFDRSxvQ0FBQTtBRjg5RFI7O0FFcitETTtFQUNFLG9DQUFBO0FGdytEUjs7QUV0K0RNO0VBQ0UseUJBQUE7QUZ5K0RSOztBRXYrRE07RUFDRSxvQ0FBQTtBRjArRFI7O0FFMy9ETTtFQUNFLG9DQUFBO0FGOC9EUjs7QUU1L0RNO0VBQ0UseUJBQUE7QUYrL0RSOztBRTcvRE07RUFDRSxvQ0FBQTtBRmdnRVI7O0FFNy9ETTtFQUNFLG9DQUFBO0FGZ2dFUjs7QUU5L0RNO0VBQ0UseUJBQUE7QUZpZ0VSOztBRS8vRE07RUFDRSxvQ0FBQTtBRmtnRVI7O0FFemdFTTtFQUNFLG9DQUFBO0FGNGdFUjs7QUUxZ0VNO0VBQ0UseUJBQUE7QUY2Z0VSOztBRTNnRU07RUFDRSxvQ0FBQTtBRjhnRVI7O0FFcmhFTTtFQUNFLG9DQUFBO0FGd2hFUjs7QUV0aEVNO0VBQ0UseUJBQUE7QUZ5aEVSOztBRXZoRU07RUFDRSxvQ0FBQTtBRjBoRVI7O0FFamlFTTtFQUNFLG9DQUFBO0FGb2lFUjs7QUVsaUVNO0VBQ0UseUJBQUE7QUZxaUVSOztBRW5pRU07RUFDRSxvQ0FBQTtBRnNpRVI7O0FFN2lFTTtFQUNFLG9DQUFBO0FGZ2pFUjs7QUU5aUVNO0VBQ0UseUJBQUE7QUZpakVSOztBRS9pRU07RUFDRSxvQ0FBQTtBRmtqRVI7O0FFempFTTtFQUNFLG9DQUFBO0FGNGpFUjs7QUUxakVNO0VBQ0UseUJBQUE7QUY2akVSOztBRTNqRU07RUFDRSxvQ0FBQTtBRjhqRVI7O0FFcmtFTTtFQUNFLG9DQUFBO0FGd2tFUjs7QUV0a0VNO0VBQ0UseUJBQUE7QUZ5a0VSOztBRXZrRU07RUFDRSxvQ0FBQTtBRjBrRVI7O0FFamxFTTtFQUNFLG9DQUFBO0FGb2xFUjs7QUVsbEVNO0VBQ0UseUJBQUE7QUZxbEVSOztBRW5sRU07RUFDRSxvQ0FBQTtBRnNsRVI7O0FFN2xFTTtFQUNFLG9DQUFBO0FGZ21FUjs7QUU5bEVNO0VBQ0UseUJBQUE7QUZpbUVSOztBRS9sRU07RUFDRSxvQ0FBQTtBRmttRVI7O0FFem1FTTtFQUNFLG9DQUFBO0FGNG1FUjs7QUUxbUVNO0VBQ0UseUJBQUE7QUY2bUVSOztBRTNtRU07RUFDRSxvQ0FBQTtBRjhtRVI7O0FFcm5FTTtFQUNFLG9DQUFBO0FGd25FUjs7QUV0bkVNO0VBQ0UseUJBQUE7QUZ5bkVSOztBRXZuRU07RUFDRSxvQ0FBQTtBRjBuRVI7O0FFam9FTTtFQUNFLG9DQUFBO0FGb29FUjs7QUVsb0VNO0VBQ0UseUJBQUE7QUZxb0VSOztBRW5vRU07RUFDRSxvQ0FBQTtBRnNvRVI7O0FFN29FTTtFQUNFLG9DQUFBO0FGZ3BFUjs7QUU5b0VNO0VBQ0UseUJBQUE7QUZpcEVSOztBRS9vRU07RUFDRSxvQ0FBQTtBRmtwRVI7O0FFbnFFTTtFQUNFLG9DQUFBO0FGc3FFUjs7QUVwcUVNO0VBQ0UseUJBQUE7QUZ1cUVSOztBRXJxRU07RUFDRSxvQ0FBQTtBRndxRVI7O0FFcnFFTTtFQUNFLG9DQUFBO0FGd3FFUjs7QUV0cUVNO0VBQ0UseUJBQUE7QUZ5cUVSOztBRXZxRU07RUFDRSxvQ0FBQTtBRjBxRVI7O0FFanJFTTtFQUNFLG9DQUFBO0FGb3JFUjs7QUVsckVNO0VBQ0UseUJBQUE7QUZxckVSOztBRW5yRU07RUFDRSxvQ0FBQTtBRnNyRVI7O0FFN3JFTTtFQUNFLG9DQUFBO0FGZ3NFUjs7QUU5ckVNO0VBQ0UseUJBQUE7QUZpc0VSOztBRS9yRU07RUFDRSxvQ0FBQTtBRmtzRVI7O0FFenNFTTtFQUNFLG9DQUFBO0FGNHNFUjs7QUUxc0VNO0VBQ0UseUJBQUE7QUY2c0VSOztBRTNzRU07RUFDRSxvQ0FBQTtBRjhzRVI7O0FFcnRFTTtFQUNFLG9DQUFBO0FGd3RFUjs7QUV0dEVNO0VBQ0UseUJBQUE7QUZ5dEVSOztBRXZ0RU07RUFDRSxvQ0FBQTtBRjB0RVI7O0FFanVFTTtFQUNFLG9DQUFBO0FGb3VFUjs7QUVsdUVNO0VBQ0UseUJBQUE7QUZxdUVSOztBRW51RU07RUFDRSxvQ0FBQTtBRnN1RVI7O0FFN3VFTTtFQUNFLG9DQUFBO0FGZ3ZFUjs7QUU5dUVNO0VBQ0UseUJBQUE7QUZpdkVSOztBRS91RU07RUFDRSxvQ0FBQTtBRmt2RVI7O0FFenZFTTtFQUNFLG9DQUFBO0FGNHZFUjs7QUUxdkVNO0VBQ0UseUJBQUE7QUY2dkVSOztBRTN2RU07RUFDRSxvQ0FBQTtBRjh2RVI7O0FFcndFTTtFQUNFLG9DQUFBO0FGd3dFUjs7QUV0d0VNO0VBQ0UseUJBQUE7QUZ5d0VSOztBRXZ3RU07RUFDRSxvQ0FBQTtBRjB3RVI7O0FFanhFTTtFQUNFLG9DQUFBO0FGb3hFUjs7QUVseEVNO0VBQ0UseUJBQUE7QUZxeEVSOztBRW54RU07RUFDRSxvQ0FBQTtBRnN4RVI7O0FFN3hFTTtFQUNFLG9DQUFBO0FGZ3lFUjs7QUU5eEVNO0VBQ0UseUJBQUE7QUZpeUVSOztBRS94RU07RUFDRSxvQ0FBQTtBRmt5RVI7O0FFenlFTTtFQUNFLG9DQUFBO0FGNHlFUjs7QUUxeUVNO0VBQ0UseUJBQUE7QUY2eUVSOztBRTN5RU07RUFDRSxvQ0FBQTtBRjh5RVI7O0FFcnpFTTtFQUNFLG9DQUFBO0FGd3pFUjs7QUV0ekVNO0VBQ0UseUJBQUE7QUZ5ekVSOztBRXZ6RU07RUFDRSxvQ0FBQTtBRjB6RVI7O0FFMzBFTTtFQUNFLG9DQUFBO0FGODBFUjs7QUU1MEVNO0VBQ0UseUJBQUE7QUYrMEVSOztBRTcwRU07RUFDRSxvQ0FBQTtBRmcxRVI7O0FFNzBFTTtFQUNFLG9DQUFBO0FGZzFFUjs7QUU5MEVNO0VBQ0UseUJBQUE7QUZpMUVSOztBRS8wRU07RUFDRSxvQ0FBQTtBRmsxRVI7O0FFejFFTTtFQUNFLG9DQUFBO0FGNDFFUjs7QUUxMUVNO0VBQ0UseUJBQUE7QUY2MUVSOztBRTMxRU07RUFDRSxvQ0FBQTtBRjgxRVI7O0FFcjJFTTtFQUNFLG9DQUFBO0FGdzJFUjs7QUV0MkVNO0VBQ0UseUJBQUE7QUZ5MkVSOztBRXYyRU07RUFDRSxvQ0FBQTtBRjAyRVI7O0FFajNFTTtFQUNFLG9DQUFBO0FGbzNFUjs7QUVsM0VNO0VBQ0UseUJBQUE7QUZxM0VSOztBRW4zRU07RUFDRSxvQ0FBQTtBRnMzRVI7O0FFNzNFTTtFQUNFLG9DQUFBO0FGZzRFUjs7QUU5M0VNO0VBQ0UseUJBQUE7QUZpNEVSOztBRS8zRU07RUFDRSxvQ0FBQTtBRms0RVI7O0FFejRFTTtFQUNFLG9DQUFBO0FGNDRFUjs7QUUxNEVNO0VBQ0UseUJBQUE7QUY2NEVSOztBRTM0RU07RUFDRSxvQ0FBQTtBRjg0RVI7O0FFcjVFTTtFQUNFLG9DQUFBO0FGdzVFUjs7QUV0NUVNO0VBQ0UseUJBQUE7QUZ5NUVSOztBRXY1RU07RUFDRSxvQ0FBQTtBRjA1RVI7O0FFajZFTTtFQUNFLG9DQUFBO0FGbzZFUjs7QUVsNkVNO0VBQ0UseUJBQUE7QUZxNkVSOztBRW42RU07RUFDRSxvQ0FBQTtBRnM2RVI7O0FFNzZFTTtFQUNFLG9DQUFBO0FGZzdFUjs7QUU5NkVNO0VBQ0UseUJBQUE7QUZpN0VSOztBRS82RU07RUFDRSxvQ0FBQTtBRms3RVI7O0FFejdFTTtFQUNFLG9DQUFBO0FGNDdFUjs7QUUxN0VNO0VBQ0UseUJBQUE7QUY2N0VSOztBRTM3RU07RUFDRSxvQ0FBQTtBRjg3RVI7O0FFcjhFTTtFQUNFLG9DQUFBO0FGdzhFUjs7QUV0OEVNO0VBQ0UseUJBQUE7QUZ5OEVSOztBRXY4RU07RUFDRSxvQ0FBQTtBRjA4RVI7O0FFajlFTTtFQUNFLG9DQUFBO0FGbzlFUjs7QUVsOUVNO0VBQ0UseUJBQUE7QUZxOUVSOztBRW45RU07RUFDRSxvQ0FBQTtBRnM5RVI7O0FFNzlFTTtFQUNFLG9DQUFBO0FGZytFUjs7QUU5OUVNO0VBQ0UseUJBQUE7QUZpK0VSOztBRS85RU07RUFDRSxvQ0FBQTtBRmsrRVI7O0FFbi9FTTtFQUNFLG9DQUFBO0FGcy9FUjs7QUVwL0VNO0VBQ0UseUJBQUE7QUZ1L0VSOztBRXIvRU07RUFDRSxvQ0FBQTtBRncvRVI7O0FFci9FTTtFQUNFLG9DQUFBO0FGdy9FUjs7QUV0L0VNO0VBQ0UseUJBQUE7QUZ5L0VSOztBRXYvRU07RUFDRSxvQ0FBQTtBRjAvRVI7O0FFamdGTTtFQUNFLG9DQUFBO0FGb2dGUjs7QUVsZ0ZNO0VBQ0UseUJBQUE7QUZxZ0ZSOztBRW5nRk07RUFDRSxvQ0FBQTtBRnNnRlI7O0FFN2dGTTtFQUNFLG9DQUFBO0FGZ2hGUjs7QUU5Z0ZNO0VBQ0UseUJBQUE7QUZpaEZSOztBRS9nRk07RUFDRSxvQ0FBQTtBRmtoRlI7O0FFemhGTTtFQUNFLG9DQUFBO0FGNGhGUjs7QUUxaEZNO0VBQ0UseUJBQUE7QUY2aEZSOztBRTNoRk07RUFDRSxvQ0FBQTtBRjhoRlI7O0FFcmlGTTtFQUNFLG9DQUFBO0FGd2lGUjs7QUV0aUZNO0VBQ0UseUJBQUE7QUZ5aUZSOztBRXZpRk07RUFDRSxvQ0FBQTtBRjBpRlI7O0FFampGTTtFQUNFLG9DQUFBO0FGb2pGUjs7QUVsakZNO0VBQ0UseUJBQUE7QUZxakZSOztBRW5qRk07RUFDRSxvQ0FBQTtBRnNqRlI7O0FFN2pGTTtFQUNFLG9DQUFBO0FGZ2tGUjs7QUU5akZNO0VBQ0UseUJBQUE7QUZpa0ZSOztBRS9qRk07RUFDRSxvQ0FBQTtBRmtrRlI7O0FFemtGTTtFQUNFLG9DQUFBO0FGNGtGUjs7QUUxa0ZNO0VBQ0UseUJBQUE7QUY2a0ZSOztBRTNrRk07RUFDRSxvQ0FBQTtBRjhrRlI7O0FFcmxGTTtFQUNFLG9DQUFBO0FGd2xGUjs7QUV0bEZNO0VBQ0UseUJBQUE7QUZ5bEZSOztBRXZsRk07RUFDRSxvQ0FBQTtBRjBsRlI7O0FFam1GTTtFQUNFLG9DQUFBO0FGb21GUjs7QUVsbUZNO0VBQ0UseUJBQUE7QUZxbUZSOztBRW5tRk07RUFDRSxvQ0FBQTtBRnNtRlI7O0FFN21GTTtFQUNFLG9DQUFBO0FGZ25GUjs7QUU5bUZNO0VBQ0UseUJBQUE7QUZpbkZSOztBRS9tRk07RUFDRSxvQ0FBQTtBRmtuRlI7O0FFem5GTTtFQUNFLG9DQUFBO0FGNG5GUjs7QUUxbkZNO0VBQ0UseUJBQUE7QUY2bkZSOztBRTNuRk07RUFDRSxvQ0FBQTtBRjhuRlI7O0FFcm9GTTtFQUNFLG9DQUFBO0FGd29GUjs7QUV0b0ZNO0VBQ0UseUJBQUE7QUZ5b0ZSOztBRXZvRk07RUFDRSxvQ0FBQTtBRjBvRlI7O0FFM3BGTTtFQUNFLG9DQUFBO0FGOHBGUjs7QUU1cEZNO0VBQ0UseUJBQUE7QUYrcEZSOztBRTdwRk07RUFDRSxvQ0FBQTtBRmdxRlI7O0FFN3BGTTtFQUNFLG9DQUFBO0FGZ3FGUjs7QUU5cEZNO0VBQ0UseUJBQUE7QUZpcUZSOztBRS9wRk07RUFDRSxvQ0FBQTtBRmtxRlI7O0FFenFGTTtFQUNFLG9DQUFBO0FGNHFGUjs7QUUxcUZNO0VBQ0UseUJBQUE7QUY2cUZSOztBRTNxRk07RUFDRSxvQ0FBQTtBRjhxRlI7O0FFcnJGTTtFQUNFLG9DQUFBO0FGd3JGUjs7QUV0ckZNO0VBQ0UseUJBQUE7QUZ5ckZSOztBRXZyRk07RUFDRSxvQ0FBQTtBRjByRlI7O0FFanNGTTtFQUNFLG9DQUFBO0FGb3NGUjs7QUVsc0ZNO0VBQ0UseUJBQUE7QUZxc0ZSOztBRW5zRk07RUFDRSxvQ0FBQTtBRnNzRlI7O0FFN3NGTTtFQUNFLG9DQUFBO0FGZ3RGUjs7QUU5c0ZNO0VBQ0UseUJBQUE7QUZpdEZSOztBRS9zRk07RUFDRSxvQ0FBQTtBRmt0RlI7O0FFenRGTTtFQUNFLG9DQUFBO0FGNHRGUjs7QUUxdEZNO0VBQ0UseUJBQUE7QUY2dEZSOztBRTN0Rk07RUFDRSxvQ0FBQTtBRjh0RlI7O0FFcnVGTTtFQUNFLG9DQUFBO0FGd3VGUjs7QUV0dUZNO0VBQ0UseUJBQUE7QUZ5dUZSOztBRXZ1Rk07RUFDRSxvQ0FBQTtBRjB1RlI7O0FFanZGTTtFQUNFLG9DQUFBO0FGb3ZGUjs7QUVsdkZNO0VBQ0UseUJBQUE7QUZxdkZSOztBRW52Rk07RUFDRSxvQ0FBQTtBRnN2RlI7O0FFN3ZGTTtFQUNFLG9DQUFBO0FGZ3dGUjs7QUU5dkZNO0VBQ0UseUJBQUE7QUZpd0ZSOztBRS92Rk07RUFDRSxvQ0FBQTtBRmt3RlI7O0FFendGTTtFQUNFLG9DQUFBO0FGNHdGUjs7QUUxd0ZNO0VBQ0UseUJBQUE7QUY2d0ZSOztBRTN3Rk07RUFDRSxvQ0FBQTtBRjh3RlI7O0FFcnhGTTtFQUNFLG9DQUFBO0FGd3hGUjs7QUV0eEZNO0VBQ0UseUJBQUE7QUZ5eEZSOztBRXZ4Rk07RUFDRSxvQ0FBQTtBRjB4RlI7O0FFanlGTTtFQUNFLG9DQUFBO0FGb3lGUjs7QUVseUZNO0VBQ0UseUJBQUE7QUZxeUZSOztBRW55Rk07RUFDRSxvQ0FBQTtBRnN5RlI7O0FFN3lGTTtFQUNFLG9DQUFBO0FGZ3pGUjs7QUU5eUZNO0VBQ0UseUJBQUE7QUZpekZSOztBRS95Rk07RUFDRSxvQ0FBQTtBRmt6RlI7O0FFbjBGTTtFQUNFLG9DQUFBO0FGczBGUjs7QUVwMEZNO0VBQ0UseUJBQUE7QUZ1MEZSOztBRXIwRk07RUFDRSxvQ0FBQTtBRncwRlI7O0FFcjBGTTtFQUNFLG9DQUFBO0FGdzBGUjs7QUV0MEZNO0VBQ0UseUJBQUE7QUZ5MEZSOztBRXYwRk07RUFDRSxvQ0FBQTtBRjAwRlI7O0FFajFGTTtFQUNFLG9DQUFBO0FGbzFGUjs7QUVsMUZNO0VBQ0UseUJBQUE7QUZxMUZSOztBRW4xRk07RUFDRSxvQ0FBQTtBRnMxRlI7O0FFNzFGTTtFQUNFLG9DQUFBO0FGZzJGUjs7QUU5MUZNO0VBQ0UseUJBQUE7QUZpMkZSOztBRS8xRk07RUFDRSxvQ0FBQTtBRmsyRlI7O0FFejJGTTtFQUNFLG9DQUFBO0FGNDJGUjs7QUUxMkZNO0VBQ0UseUJBQUE7QUY2MkZSOztBRTMyRk07RUFDRSxvQ0FBQTtBRjgyRlI7O0FFcjNGTTtFQUNFLG9DQUFBO0FGdzNGUjs7QUV0M0ZNO0VBQ0UseUJBQUE7QUZ5M0ZSOztBRXYzRk07RUFDRSxvQ0FBQTtBRjAzRlI7O0FFajRGTTtFQUNFLG9DQUFBO0FGbzRGUjs7QUVsNEZNO0VBQ0UseUJBQUE7QUZxNEZSOztBRW40Rk07RUFDRSxvQ0FBQTtBRnM0RlI7O0FFNzRGTTtFQUNFLG9DQUFBO0FGZzVGUjs7QUU5NEZNO0VBQ0UseUJBQUE7QUZpNUZSOztBRS80Rk07RUFDRSxvQ0FBQTtBRms1RlI7O0FFejVGTTtFQUNFLG9DQUFBO0FGNDVGUjs7QUUxNUZNO0VBQ0UseUJBQUE7QUY2NUZSOztBRTM1Rk07RUFDRSxvQ0FBQTtBRjg1RlI7O0FFcjZGTTtFQUNFLG9DQUFBO0FGdzZGUjs7QUV0NkZNO0VBQ0UseUJBQUE7QUZ5NkZSOztBRXY2Rk07RUFDRSxvQ0FBQTtBRjA2RlI7O0FFMzdGTTtFQUNFLG9DQUFBO0FGODdGUjs7QUU1N0ZNO0VBQ0UseUJBQUE7QUYrN0ZSOztBRTc3Rk07RUFDRSxvQ0FBQTtBRmc4RlI7O0FFNzdGTTtFQUNFLG9DQUFBO0FGZzhGUjs7QUU5N0ZNO0VBQ0UseUJBQUE7QUZpOEZSOztBRS83Rk07RUFDRSxvQ0FBQTtBRms4RlI7O0FFejhGTTtFQUNFLG9DQUFBO0FGNDhGUjs7QUUxOEZNO0VBQ0UseUJBQUE7QUY2OEZSOztBRTM4Rk07RUFDRSxvQ0FBQTtBRjg4RlI7O0FFcjlGTTtFQUNFLG9DQUFBO0FGdzlGUjs7QUV0OUZNO0VBQ0UseUJBQUE7QUZ5OUZSOztBRXY5Rk07RUFDRSxvQ0FBQTtBRjA5RlI7O0FFaitGTTtFQUNFLG9DQUFBO0FGbytGUjs7QUVsK0ZNO0VBQ0UseUJBQUE7QUZxK0ZSOztBRW4rRk07RUFDRSxvQ0FBQTtBRnMrRlI7O0FFNytGTTtFQUNFLG9DQUFBO0FGZy9GUjs7QUU5K0ZNO0VBQ0UseUJBQUE7QUZpL0ZSOztBRS8rRk07RUFDRSxvQ0FBQTtBRmsvRlI7O0FFei9GTTtFQUNFLG9DQUFBO0FGNC9GUjs7QUUxL0ZNO0VBQ0UseUJBQUE7QUY2L0ZSOztBRTMvRk07RUFDRSxvQ0FBQTtBRjgvRlI7O0FFcmdHTTtFQUNFLG9DQUFBO0FGd2dHUjs7QUV0Z0dNO0VBQ0UseUJBQUE7QUZ5Z0dSOztBRXZnR007RUFDRSxvQ0FBQTtBRjBnR1I7O0FFamhHTTtFQUNFLG9DQUFBO0FGb2hHUjs7QUVsaEdNO0VBQ0UseUJBQUE7QUZxaEdSOztBRW5oR007RUFDRSxvQ0FBQTtBRnNoR1I7O0FFN2hHTTtFQUNFLG9DQUFBO0FGZ2lHUjs7QUU5aEdNO0VBQ0UseUJBQUE7QUZpaUdSOztBRS9oR007RUFDRSxvQ0FBQTtBRmtpR1I7O0FFbmpHTTtFQUNFLG9DQUFBO0FGc2pHUjs7QUVwakdNO0VBQ0UseUJBQUE7QUZ1akdSOztBRXJqR007RUFDRSxvQ0FBQTtBRndqR1I7O0FFcmpHTTtFQUNFLG9DQUFBO0FGd2pHUjs7QUV0akdNO0VBQ0UseUJBQUE7QUZ5akdSOztBRXZqR007RUFDRSxvQ0FBQTtBRjBqR1I7O0FFamtHTTtFQUNFLG9DQUFBO0FGb2tHUjs7QUVsa0dNO0VBQ0UseUJBQUE7QUZxa0dSOztBRW5rR007RUFDRSxvQ0FBQTtBRnNrR1I7O0FFN2tHTTtFQUNFLG9DQUFBO0FGZ2xHUjs7QUU5a0dNO0VBQ0UseUJBQUE7QUZpbEdSOztBRS9rR007RUFDRSxvQ0FBQTtBRmtsR1I7O0FFemxHTTtFQUNFLG9DQUFBO0FGNGxHUjs7QUUxbEdNO0VBQ0UseUJBQUE7QUY2bEdSOztBRTNsR007RUFDRSxvQ0FBQTtBRjhsR1I7O0FFcm1HTTtFQUNFLG9DQUFBO0FGd21HUjs7QUV0bUdNO0VBQ0UseUJBQUE7QUZ5bUdSOztBRXZtR007RUFDRSxvQ0FBQTtBRjBtR1I7O0FFam5HTTtFQUNFLG9DQUFBO0FGb25HUjs7QUVsbkdNO0VBQ0UseUJBQUE7QUZxbkdSOztBRW5uR007RUFDRSxvQ0FBQTtBRnNuR1I7O0FFN25HTTtFQUNFLG9DQUFBO0FGZ29HUjs7QUU5bkdNO0VBQ0UseUJBQUE7QUZpb0dSOztBRS9uR007RUFDRSxvQ0FBQTtBRmtvR1I7O0FFem9HTTtFQUNFLG9DQUFBO0FGNG9HUjs7QUUxb0dNO0VBQ0UseUJBQUE7QUY2b0dSOztBRTNvR007RUFDRSxvQ0FBQTtBRjhvR1I7O0FFcnBHTTtFQUNFLG9DQUFBO0FGd3BHUjs7QUV0cEdNO0VBQ0UseUJBQUE7QUZ5cEdSOztBRXZwR007RUFDRSxvQ0FBQTtBRjBwR1I7O0FFNW9HRTtFQUNFLG9DQUFBO0FGK29HSjs7QUU3b0dFO0VBQ0UseUJBQUE7QUZncEdKOztBRXBwR0U7RUFDRSxvQ0FBQTtBRnVwR0o7O0FFcnBHRTtFQUNFLHlC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QXBDMDJQTjtBb0NwMlBFO0VBQ0UscUJBQUE7RUFDQSxlQUFBO0VBQ0EsZUFBQTtBcENzMlBKO0FvQ2oyUEU7RUFDRSxTQUFBO0FwQ20yUEo7QW9DajJQSTtFQUNFLGlDQUFBO0VBQ0EsV0FBQTtFQUNBLFVBQUE7QXBDbTJQTjtBb0NqMlBNO0VBQ0Usb0NBQUE7QXBDbTJQUjtBb0NoMlBJO0VBQ0UsaUNBQUE7RUFDQSxlMUJXYTtFMEJWYixXMUJXYztFMEJWZCxjQUFBO0VBQ0EsZUFBQTtFQUNBLGVBQUE7QXBDazJQTjtBb0NoMlBNO0VBQ0UsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLGtCQUFBO0FwQ2syUFI7QW9DaDJQUTtFQUNFLGVBQUE7RUFDQSxvQkFBQTtBcENrMlBWO0FvQzkxUE07RUFDRSxvQ0FBQTtBcENnMlBSO0FvQzUxUEk7RUFDRSxXQUFBO0FwQzgxUE47QW9DejFQRTtFQUNFLFlBQUE7QXBDMjFQSjtBb0N4MVBFO0VBQ0UsU0FBQTtFQUNBLFlBQUE7QXBDMDFQSjtBb0N4MVBJO0VBQ0UsWUFBQTtFQUNBLGlCQUFBO0VBQ0EsWUFBQTtFQUNBLGtCQUFBO0FwQzAxUE47QW9DeDFQTTtFQUVFLFlBQUE7RUFDQSxnQkFBQTtBcEN5MVBSO0FvQ3IxUEk7RUFDRSxNQUFBO0VBQ0EsT0FBQTtBcEN1MVBOO0FvQ3IxUE07RUFDRSwrQkFBQTtFQUNBLHNCQUFBO0FwQ3UxUFI7QW9DcjFQTTtFQUFhLFcxQjdDQztBVnE0UHBCOztBb0NsMVBBO0VBQ0Usa0JBQUE7RUFDQSxZMUJ4RHFCO0UwQnlEckIsWUFBQTtBcENxMVBGO0FvQ24xUEU7RUFDRSxlQUFBO0FwQ3ExUEo7O0FvQ2wxUEE7RUFDRTtJQUNFLGdCMUJuRVk7RVZ3NVBkO0VvQ24xUEE7SUFDRSxZMUJ0RVk7STBCdUVaLGlCMUJ2RVk7RVY0NVBkO0VvQ24xUEE7SUFDRSxZMUIxRVk7RVYrNVBkO0FBQ0ZcIixcInNvdXJjZXNDb250ZW50XCI6W1wiQGNoYXJzZXQgXFxcIlVURi04XFxcIjtcXG5AaW1wb3J0ICdodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9VWJ1bnR1JztcXG5AZm9udC1mYWNlIHtcXG4gIGZvbnQtZmFtaWx5OiBzd2VldGljb25zO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIHNyYzogdXJsKFxcXCIuL2ljb25zL2Fzc2V0cy9Td2VldEljb25zLVJlZ3VsYXIuZW90XFxcIik7XFxuICBzcmM6IHVybChcXFwiLi9pY29ucy9hc3NldHMvU3dlZXRJY29ucy1SZWd1bGFyLndvZmYyXFxcIikgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpLCB1cmwoXFxcIi4vaWNvbnMvYXNzZXRzL1N3ZWV0SWNvbnMtUmVndWxhci53b2ZmXFxcIikgZm9ybWF0KFxcXCJ3b2ZmXFxcIiksIHVybChcXFwiLi9pY29ucy9hc3NldHMvU3dlZXRJY29ucy1SZWd1bGFyLnR0ZlxcXCIpIGZvcm1hdChcXFwidHJ1ZXR5cGVcXFwiKTtcXG59XFxuLnMtaWNvbixcXG4ucy1pY29ucyxcXG4uc3dlZXQtaWNvbnMsXFxuLnN3ZWV0LWljb24ge1xcbiAgZm9udC1mYW1pbHk6IHN3ZWV0aWNvbnMsIHNhbnMtc2VyaWY7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC1zaXplOiAyOHB4O1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgd29yZC13cmFwOiBub3JtYWw7XFxuICBkaXJlY3Rpb246IGx0cjtcXG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xcbiAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTtcXG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XFxuICAtd2Via2l0LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogXFxcImxpZ2FcXFwiO1xcbiAgLW1vei1mb250LWZlYXR1cmUtc2V0dGluZ3M6IFxcXCJsaWdhPTFcXFwiO1xcbiAgLW1vei1mb250LWZlYXR1cmUtc2V0dGluZ3M6IFxcXCJsaWdhXFxcIjtcXG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogXFxcImxpZ2FcXFwiO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG4ud2VibyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2MmQ2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXRleHQge1xcbiAgY29sb3I6ICMwMDYyZDYgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8td2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2MmQ2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLnNlY29uZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3N0ZBICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXRleHQudGV4dC1zZWNvbmQge1xcbiAgY29sb3I6ICMwMDc3RkEgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8td2F2ZXMud2F2ZXMtc2Vjb25kIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNzdGQSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby50aGlyZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDliZGRkICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXRleHQudGV4dC10aGlyZCB7XFxuICBjb2xvcjogIzA5YmRkZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby13YXZlcy53YXZlcy10aGlyZCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwOWJkZGQgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8uZm91cnRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjYmU3ZmUgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8tdGV4dC50ZXh0LWZvdXJ0aCB7XFxuICBjb2xvcjogI2NiZTdmZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby13YXZlcy53YXZlcy1mb3VydGggLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2JlN2ZlICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmJkZWZiICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNiYmRlZmIgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8td2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JiZGVmYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQyYTVmNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjNDJhNWY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0MmE1ZjUgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8ubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3OTg2Y2IgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8tdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogIzc5ODZjYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzk4NmNiICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTEyZGE4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICM1MTJkYTggIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8td2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzUxMmRhOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI4MzU5MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjMjgzNTkzICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyODM1OTMgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8uZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QwMTgxZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICNkMDE4MWUgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8td2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDAxODFlICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiOTE1MWIgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8tdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjYjkxNTFiICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2I5MTUxYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTIxMzE4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogI2EyMTMxOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhMjEzMTggIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8uYi0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ5Y2U1ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2Viby10ZXh0LnRleHQtYi0ge1xcbiAgY29sb3I6ICM0OWNlNWYgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8td2F2ZXMud2F2ZXMtYi0gLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDljZTVmICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4YjEwMTQgIWltcG9ydGFudDtcXG59XFxuXFxuLndlYm8tdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjOGIxMDE0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi53ZWJvLXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzhiMTAxNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNDQzMzYgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC10ZXh0IHtcXG4gIGNvbG9yOiAjZjQ0MzM2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjQ0MzM2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmViZWUgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZmZlYmVlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZWJlZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjZGQyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2ZmY2RkMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmNkZDIgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VmOWE5YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICNlZjlhOWEgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWY5YTlhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNTczNzMgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjZTU3MzczICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U1NzM3MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWY1MzUwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogI2VmNTM1MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZjUzNTAgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUzOTM1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjZTUzOTM1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUzOTM1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQuZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QzMmYyZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogI2QzMmYyZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QzMmYyZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjNjI4MjggIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICNjNjI4MjggIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjNjI4MjggIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjcxYzFjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjYjcxYzFjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjcxYzFjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQuYWNjZW50LTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmOGE4MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXRleHQudGV4dC1hY2NlbnQtMSB7XFxuICBjb2xvcjogI2ZmOGE4MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmOGE4MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLmFjY2VudC0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjUyNTIgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC10ZXh0LnRleHQtYWNjZW50LTIge1xcbiAgY29sb3I6ICNmZjUyNTIgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjUyNTIgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlZC5hY2NlbnQtMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmYxNzQ0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtdGV4dC50ZXh0LWFjY2VudC0zIHtcXG4gIGNvbG9yOiAjZmYxNzQ0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQtd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmYxNzQ0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWQuYWNjZW50LTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q1MDAwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXRleHQudGV4dC1hY2NlbnQtNCB7XFxuICBjb2xvcjogI2Q1MDAwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVkLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q1MDAwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluayB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTkxZTYzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXRleHQge1xcbiAgY29sb3I6ICNlOTFlNjMgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTkxZTYzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNlNGVjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNmY2U0ZWMgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZTRlYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4YmJkMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjZjhiYmQwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGJiZDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmsubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNDhmYjEgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogI2Y0OGZiMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjQ4ZmIxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjA2MjkyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICNmMDYyOTIgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwNjI5MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjNDA3YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjZWM0MDdhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlYzQwN2EgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmsuZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q4MWI2MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICNkODFiNjAgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDgxYjYwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjMjE4NWIgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjYzIxODViICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2MyMTg1YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWQxNDU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogI2FkMTQ1NyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZDE0NTcgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmsuZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzg4MGU0ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICM4ODBlNGYgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODgwZTRmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjgwYWIgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjZmY4MGFiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmODBhYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY0MDgxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogI2ZmNDA4MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjQwODEgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmsuYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1MDA1NyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGluay10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICNmNTAwNTcgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjUwMDU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjNTExNjIgIWltcG9ydGFudDtcXG59XFxuXFxuLnBpbmstdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjYzUxMTYyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5waW5rLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M1MTE2MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5YzI3YjAgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS10ZXh0IHtcXG4gIGNvbG9yOiAjOWMyN2IwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWMyN2IwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmM2U1ZjUgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZjNlNWY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YzZTVmNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTFiZWU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2UxYmVlNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMWJlZTcgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NlOTNkOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICNjZTkzZDggIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2U5M2Q4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiYTY4YzggIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjYmE2OGM4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JhNjhjOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWI0N2JjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogI2FiNDdiYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhYjQ3YmMgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGUyNGFhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjOGUyNGFhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGUyNGFhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUuZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzdiMWZhMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogIzdiMWZhMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzdiMWZhMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2YTFiOWEgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICM2YTFiOWEgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2YTFiOWEgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGExNDhjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjNGExNDhjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGExNDhjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUuYWNjZW50LTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VhODBmYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXRleHQudGV4dC1hY2NlbnQtMSB7XFxuICBjb2xvcjogI2VhODBmYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VhODBmYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLmFjY2VudC0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMDQwZmIgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS10ZXh0LnRleHQtYWNjZW50LTIge1xcbiAgY29sb3I6ICNlMDQwZmIgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMDQwZmIgIWltcG9ydGFudDtcXG59XFxuXFxuLnB1cnBsZS5hY2NlbnQtMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDUwMGY5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtdGV4dC50ZXh0LWFjY2VudC0zIHtcXG4gIGNvbG9yOiAjZDUwMGY5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUtd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDUwMGY5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdXJwbGUuYWNjZW50LTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FhMDBmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXRleHQudGV4dC1hY2NlbnQtNCB7XFxuICBjb2xvcjogI2FhMDBmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHVycGxlLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FhMDBmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY3M2FiNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtdGV4dCB7XFxuICBjb2xvcjogIzY3M2FiNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjczYWI3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VkZTdmNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2VkZTdmNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VkZTdmNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkMWM0ZTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNkMWM0ZTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkMWM0ZTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjM5ZGRiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjYjM5ZGRiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjM5ZGRiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzk1NzVjZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogIzk1NzVjZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzk1NzVjZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3ZTU3YzIgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICM3ZTU3YzIgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3ZTU3YzIgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1ZTM1YjEgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogIzVlMzViMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWUzNWIxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTEyZGE4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICM1MTJkYTggIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzUxMmRhOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUuZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ1MjdhMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjNDUyN2EwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0NTI3YTAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzMTFiOTIgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogIzMxMWI5MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzExYjkyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS5hY2NlbnQtMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjM4OGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS10ZXh0LnRleHQtYWNjZW50LTEge1xcbiAgY29sb3I6ICNiMzg4ZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IzODhmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUuYWNjZW50LTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzdjNGRmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtdGV4dC50ZXh0LWFjY2VudC0yIHtcXG4gIGNvbG9yOiAjN2M0ZGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3YzRkZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLmFjY2VudC0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2NTFmZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXRleHQudGV4dC1hY2NlbnQtMyB7XFxuICBjb2xvcjogIzY1MWZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1wdXJwbGUtd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjUxZmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS5hY2NlbnQtNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjIwMGVhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLXB1cnBsZS10ZXh0LnRleHQtYWNjZW50LTQge1xcbiAgY29sb3I6ICM2MjAwZWEgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtcHVycGxlLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzYyMDBlYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzZjUxYjUgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby10ZXh0IHtcXG4gIGNvbG9yOiAjM2Y1MWI1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28td2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2Y1MWI1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28ubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOGVhZjYgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZThlYWY2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28td2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U4ZWFmNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzVjYWU5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28tdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2M1Y2FlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjNWNhZTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzlmYThkYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICM5ZmE4ZGEgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWZhOGRhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28ubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3OTg2Y2IgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjNzk4NmNiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28td2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc5ODZjYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWM2YmMwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28tdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogIzVjNmJjMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1YzZiYzAgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzk0OWFiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28tdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjMzk0OWFiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28td2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzk0OWFiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28uZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMwM2Y5ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogIzMwM2Y5ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMwM2Y5ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyODM1OTMgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICMyODM1OTMgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyODM1OTMgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWEyMzdlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28tdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjMWEyMzdlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28td2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWEyMzdlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28uYWNjZW50LTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzhjOWVmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXRleHQudGV4dC1hY2NlbnQtMSB7XFxuICBjb2xvcjogIzhjOWVmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzhjOWVmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLmFjY2VudC0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1MzZkZmUgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby10ZXh0LnRleHQtYWNjZW50LTIge1xcbiAgY29sb3I6ICM1MzZkZmUgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1MzZkZmUgIWltcG9ydGFudDtcXG59XFxuXFxuLmluZGlnby5hY2NlbnQtMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2Q1YWZlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28tdGV4dC50ZXh0LWFjY2VudC0zIHtcXG4gIGNvbG9yOiAjM2Q1YWZlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28td2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2Q1YWZlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5pbmRpZ28uYWNjZW50LTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMwNGZmZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXRleHQudGV4dC1hY2NlbnQtNCB7XFxuICBjb2xvcjogIzMwNGZmZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaW5kaWdvLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMwNGZmZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjE5NmYzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXRleHQge1xcbiAgY29sb3I6ICMyMTk2ZjMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjE5NmYzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNmMmZkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNlM2YyZmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UzZjJmZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JiZGVmYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjYmJkZWZiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiYmRlZmIgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5MGNhZjkgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogIzkwY2FmOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTBjYWY5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjRiNWY2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICM2NGI1ZjYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY0YjVmNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQyYTVmNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjNDJhNWY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0MmE1ZjUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUuZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFlODhlNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICMxZTg4ZTUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWU4OGU1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxOTc2ZDIgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjMTk3NmQyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE5NzZkMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTU2NWMwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogIzE1NjVjMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxNTY1YzAgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUuZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzBkNDdhMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICMwZDQ3YTEgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMGQ0N2ExICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MmIxZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjODJiMWZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgyYjFmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ4YWZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogIzQ0OGFmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0NDhhZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUuYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI5NzlmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICMyOTc5ZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjk3OWZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyOTYyZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjMjk2MmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI5NjJmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDNhOWY0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXRleHQge1xcbiAgY29sb3I6ICMwM2E5ZjQgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDNhOWY0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTFmNWZlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNlMWY1ZmUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UxZjVmZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IzZTVmYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjYjNlNWZjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiM2U1ZmMgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MWQ0ZmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogIzgxZDRmYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODFkNGZhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGZjM2Y3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICM0ZmMzZjcgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRmYzNmNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI5YjZmNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjMjliNmY2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyOWI2ZjYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUuZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAzOWJlNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICMwMzliZTUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDM5YmU1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMjg4ZDEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjMDI4OGQxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAyODhkMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDI3N2JkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogIzAyNzdiZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMjc3YmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUuZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAxNTc5YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICMwMTU3OWIgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDE1NzliICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MGQ4ZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjODBkOGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgwZDhmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDBjNGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogIzQwYzRmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0MGM0ZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUuYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYjBmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtYmx1ZS10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICMwMGIwZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBiMGZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDkxZWEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWJsdWUtdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjMDA5MWVhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ibHVlLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwOTFlYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBiY2Q0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXRleHQge1xcbiAgY29sb3I6ICMwMGJjZDQgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4td2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBiY2Q0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBmN2ZhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNlMGY3ZmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4td2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UwZjdmYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IyZWJmMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjYjJlYmYyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMmViZjIgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4ubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MGRlZWEgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4tdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogIzgwZGVlYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODBkZWVhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGRkMGUxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICM0ZGQwZTEgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4td2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRkZDBlMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YzZkYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjMjZjNmRhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmM2ZGEgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4uZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYWNjMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICMwMGFjYzEgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4td2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBhY2MxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDk3YTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4tdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjMDA5N2E3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwOTdhNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4MzhmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogIzAwODM4ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDgzOGYgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4uZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNjA2NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICMwMDYwNjQgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4td2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2MDY0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4NGZmZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4tdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjODRmZmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzg0ZmZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMThmZmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogIzE4ZmZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxOGZmZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4uYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwZTVmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY3lhbi10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICMwMGU1ZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4td2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBlNWZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGI4ZDQgIWltcG9ydGFudDtcXG59XFxuXFxuLmN5YW4tdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjMDBiOGQ0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jeWFuLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYjhkNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA5Njg4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXRleHQge1xcbiAgY29sb3I6ICMwMDk2ODggIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA5Njg4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBmMmYxICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNlMGYyZjEgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UwZjJmMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IyZGZkYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjYjJkZmRiICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMmRmZGIgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MGNiYzQgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogIzgwY2JjNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODBjYmM0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGRiNmFjICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICM0ZGI2YWMgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRkYjZhYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YTY5YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjMjZhNjlhICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmE2OWEgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwuZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwODk3YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICMwMDg5N2IgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4OTdiICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDc5NmIgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjMDA3OTZiICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNzk2YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2OTVjICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogIzAwNjk1YyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDY5NWMgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwuZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNGQ0MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICMwMDRkNDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA0ZDQwICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhN2ZmZWIgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjYTdmZmViICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2E3ZmZlYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjRmZmRhICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogIzY0ZmZkYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2NGZmZGEgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwuYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFkZTliNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGVhbC10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICMxZGU5YjYgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWRlOWI2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGJmYTUgIWltcG9ydGFudDtcXG59XFxuXFxuLnRlYWwtdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjMDBiZmE1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZWFsLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYmZhNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRjYWY1MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4tdGV4dCB7XFxuICBjb2xvcjogIzRjYWY1MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4td2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGNhZjUwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U4ZjVlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4tdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2U4ZjVlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4td2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U4ZjVlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4ubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjOGU2YzkgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNjOGU2YzkgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjOGU2YzkgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTVkNmE3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjYTVkNmE3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTVkNmE3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgxYzc4NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4tdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogIzgxYzc4NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4td2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgxYzc4NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4ubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2NmJiNmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICM2NmJiNmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2NmJiNmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0M2EwNDcgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogIzQzYTA0NyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4td2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDNhMDQ3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzg4ZTNjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICMzODhlM2MgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM4OGUzYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4uZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzJlN2QzMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4tdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjMmU3ZDMyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyZTdkMzIgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxYjVlMjAgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogIzFiNWUyMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4td2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWI1ZTIwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi5hY2NlbnQtMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjlmNmNhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi10ZXh0LnRleHQtYWNjZW50LTEge1xcbiAgY29sb3I6ICNiOWY2Y2EgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2I5ZjZjYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4uYWNjZW50LTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY5ZjBhZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4tdGV4dC50ZXh0LWFjY2VudC0yIHtcXG4gIGNvbG9yOiAjNjlmMGFlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2OWYwYWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLmFjY2VudC0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGU2NzYgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXRleHQudGV4dC1hY2NlbnQtMyB7XFxuICBjb2xvcjogIzAwZTY3NiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JlZW4td2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBlNjc2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi5hY2NlbnQtNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBjODUzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmVlbi10ZXh0LnRleHQtYWNjZW50LTQge1xcbiAgY29sb3I6ICMwMGM4NTMgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZWVuLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYzg1MyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzhiYzM0YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4tdGV4dCB7XFxuICBjb2xvcjogIzhiYzM0YSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4td2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGJjMzRhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjhlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4tdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2YxZjhlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4td2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjhlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4ubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkY2VkYzggIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNkY2VkYzggIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkY2VkYzggIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzVlMWE1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjYzVlMWE1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzVlMWE1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FlZDU4MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4tdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogI2FlZDU4MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4td2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FlZDU4MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4ubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5Y2NjNjUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICM5Y2NjNjUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5Y2NjNjUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3Y2IzNDIgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogIzdjYjM0MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4td2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjN2NiMzQyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjg5ZjM4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICM2ODlmMzggIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY4OWYzOCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4uZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzU1OGIyZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4tdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjNTU4YjJmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1NThiMmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzY5MWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogIzMzNjkxZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4td2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM2OTFlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi5hY2NlbnQtMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NmZjkwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi10ZXh0LnRleHQtYWNjZW50LTEge1xcbiAgY29sb3I6ICNjY2ZmOTAgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NjZmY5MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4uYWNjZW50LTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IyZmY1OSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4tdGV4dC50ZXh0LWFjY2VudC0yIHtcXG4gIGNvbG9yOiAjYjJmZjU5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMmZmNTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLmFjY2VudC0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3NmZmMDMgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXRleHQudGV4dC1hY2NlbnQtMyB7XFxuICBjb2xvcjogIzc2ZmYwMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlnaHQtZ3JlZW4td2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzZmZjAzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi5hY2NlbnQtNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjRkZDE3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saWdodC1ncmVlbi10ZXh0LnRleHQtYWNjZW50LTQge1xcbiAgY29sb3I6ICM2NGRkMTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpZ2h0LWdyZWVuLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY0ZGQxNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2RkYzM5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXRleHQge1xcbiAgY29sb3I6ICNjZGRjMzkgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2RkYzM5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLmxpZ2h0ZW4tNSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmYmU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNmOWZiZTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y5ZmJlNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS5saWdodGVuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjRjMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjZjBmNGMzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGY0YzMgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUubGlnaHRlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNmVlOWMgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogI2U2ZWU5YyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlZTljICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLmxpZ2h0ZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGNlNzc1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICNkY2U3NzUgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RjZTc3NSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS5saWdodGVuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q0ZTE1NyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjZDRlMTU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkNGUxNTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUuZGFya2VuLTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2MwY2EzMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICNjMGNhMzMgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzBjYTMzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLmRhcmtlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZmI0MmIgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjYWZiNDJiICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FmYjQyYiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS5kYXJrZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWU5ZDI0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogIzllOWQyNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5ZTlkMjQgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUuZGFya2VuLTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgyNzcxNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICM4Mjc3MTcgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODI3NzE3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLmFjY2VudC0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNGZmODEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtdGV4dC50ZXh0LWFjY2VudC0xIHtcXG4gIGNvbG9yOiAjZjRmZjgxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZmY4MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS5hY2NlbnQtMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVmZjQxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXRleHQudGV4dC1hY2NlbnQtMiB7XFxuICBjb2xvcjogI2VlZmY0MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWZmNDEgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUuYWNjZW50LTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M2ZmYwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGltZS10ZXh0LnRleHQtYWNjZW50LTMge1xcbiAgY29sb3I6ICNjNmZmMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzZmZjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLmFjY2VudC00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZWVhMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmxpbWUtdGV4dC50ZXh0LWFjY2VudC00IHtcXG4gIGNvbG9yOiAjYWVlYTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saW1lLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FlZWEwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmViM2IgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy10ZXh0IHtcXG4gIGNvbG9yOiAjZmZlYjNiICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlYjNiICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3cubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZkZTcgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZmZmZGU3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmRlNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOWM0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2ZmZjljNCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY5YzQgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjU5ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICNmZmY1OWQgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmNTlkICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3cubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmYxNzYgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjZmZmMTc2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjE3NiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlZTU4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogI2ZmZWU1OCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmVlNTggIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmRkODM1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjZmRkODM1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmRkODM1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3cuZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZiYzAyZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogI2ZiYzAyZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZiYzAyZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmOWE4MjUgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICNmOWE4MjUgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmOWE4MjUgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjU3ZjE3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjZjU3ZjE3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjU3ZjE3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3cuYWNjZW50LTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmY4ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXRleHQudGV4dC1hY2NlbnQtMSB7XFxuICBjb2xvcjogI2ZmZmY4ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmY4ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LmFjY2VudC0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy10ZXh0LnRleHQtYWNjZW50LTIge1xcbiAgY29sb3I6ICNmZmZmMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnllbGxvdy5hY2NlbnQtMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlYTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctdGV4dC50ZXh0LWFjY2VudC0zIHtcXG4gIGNvbG9yOiAjZmZlYTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3ctd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlYTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi55ZWxsb3cuYWNjZW50LTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDYwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXRleHQudGV4dC1hY2NlbnQtNCB7XFxuICBjb2xvcjogI2ZmZDYwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ueWVsbG93LXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDYwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYzEwNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItdGV4dCB7XFxuICBjb2xvcjogI2ZmYzEwNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjMTA3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjhlMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2ZmZjhlMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjhlMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXIubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmVjYjMgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNmZmVjYjMgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmVjYjMgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlMDgyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjZmZlMDgyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlMDgyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDU0ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogI2ZmZDU0ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDU0ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXIubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmNhMjggIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICNmZmNhMjggIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmNhMjggIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmIzMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogI2ZmYjMwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZiMzAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhMDAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICNmZmEwMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYTAwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXIuZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmOGYwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjZmY4ZjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjhmMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjZmMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogI2ZmNmYwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY2ZjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci5hY2NlbnQtMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlNTdmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci10ZXh0LnRleHQtYWNjZW50LTEge1xcbiAgY29sb3I6ICNmZmU1N2YgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZTU3ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXIuYWNjZW50LTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDc0MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItdGV4dC50ZXh0LWFjY2VudC0yIHtcXG4gIGNvbG9yOiAjZmZkNzQwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmQ3NDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLmFjY2VudC0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmM0MDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXRleHQudGV4dC1hY2NlbnQtMyB7XFxuICBjb2xvcjogI2ZmYzQwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYW1iZXItd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjNDAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci5hY2NlbnQtNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhYjAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbWJlci10ZXh0LnRleHQtYWNjZW50LTQge1xcbiAgY29sb3I6ICNmZmFiMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmFtYmVyLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYWIwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjk4MDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS10ZXh0IHtcXG4gIGNvbG9yOiAjZmY5ODAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2Utd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY5ODAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UubGlnaHRlbi01IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmYzZTAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZmZmM2UwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2Utd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjNlMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLmxpZ2h0ZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlMGIyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UtdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2ZmZTBiMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmUwYjIgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS5saWdodGVuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmY2M4MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICNmZmNjODAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjYzgwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UubGlnaHRlbi0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmI3NGQgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjZmZiNzRkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2Utd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYjc0ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLmxpZ2h0ZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhNzI2ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UtdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogI2ZmYTcyNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmE3MjYgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS5kYXJrZW4tMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmI4YzAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UtdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjZmI4YzAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2Utd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmI4YzAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UuZGFya2VuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1N2MwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogI2Y1N2MwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1N2MwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLmRhcmtlbi0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZjZjMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICNlZjZjMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZjZjMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS5kYXJrZW4tNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTY1MTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UtdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjZTY1MTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2Utd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTY1MTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UuYWNjZW50LTEge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDE4MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXRleHQudGV4dC1hY2NlbnQtMSB7XFxuICBjb2xvcjogI2ZmZDE4MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDE4MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLmFjY2VudC0yIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmFiNDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS10ZXh0LnRleHQtYWNjZW50LTIge1xcbiAgY29sb3I6ICNmZmFiNDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmFiNDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm9yYW5nZS5hY2NlbnQtMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY5MTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UtdGV4dC50ZXh0LWFjY2VudC0zIHtcXG4gIGNvbG9yOiAjZmY5MTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2Utd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY5MTAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5vcmFuZ2UuYWNjZW50LTQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNmQwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXRleHQudGV4dC1hY2NlbnQtNCB7XFxuICBjb2xvcjogI2ZmNmQwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3JhbmdlLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNmQwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Uge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNTcyMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UtdGV4dCB7XFxuICBjb2xvcjogI2ZmNTcyMiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Utd2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY1NzIyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZiZTllNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UtdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2ZiZTllNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Utd2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZiZTllNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmNjYmMgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNmZmNjYmMgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmNjYmMgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhYjkxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjZmZhYjkxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhYjkxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmOGE2NSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UtdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogI2ZmOGE2NSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Utd2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmOGE2NSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjcwNDMgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICNmZjcwNDMgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjcwNDMgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNDUxMWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogI2Y0NTExZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Utd2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjQ1MTFlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTY0YTE5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICNlNjRhMTkgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2NGExOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UuZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q4NDMxNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UtdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjZDg0MzE1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkODQzMTUgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiZjM2MGMgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogI2JmMzYwYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Utd2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmYzNjBjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS5hY2NlbnQtMSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY5ZTgwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS10ZXh0LnRleHQtYWNjZW50LTEge1xcbiAgY29sb3I6ICNmZjllODAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXdhdmVzLndhdmVzLWFjY2VudC0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmOWU4MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UuYWNjZW50LTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNmU0MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2UtdGV4dC50ZXh0LWFjY2VudC0yIHtcXG4gIGNvbG9yOiAjZmY2ZTQwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS13YXZlcy53YXZlcy1hY2NlbnQtMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjZlNDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLmFjY2VudC0zIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjNkMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXRleHQudGV4dC1hY2NlbnQtMyB7XFxuICBjb2xvcjogI2ZmM2QwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGVlcC1vcmFuZ2Utd2F2ZXMud2F2ZXMtYWNjZW50LTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmYzZDAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS5hY2NlbnQtNCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGQyYzAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kZWVwLW9yYW5nZS10ZXh0LnRleHQtYWNjZW50LTQge1xcbiAgY29sb3I6ICNkZDJjMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRlZXAtb3JhbmdlLXdhdmVzLndhdmVzLWFjY2VudC00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RkMmMwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc5NTU0OCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24tdGV4dCB7XFxuICBjb2xvcjogIzc5NTU0OCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24td2F2ZXMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzk1NTQ4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VmZWJlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24tdGV4dC50ZXh0LWxpZ2h0ZW4tNSB7XFxuICBjb2xvcjogI2VmZWJlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24td2F2ZXMud2F2ZXMtbGlnaHRlbi01IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VmZWJlOSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24ubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkN2NjYzggIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXRleHQudGV4dC1saWdodGVuLTQge1xcbiAgY29sb3I6ICNkN2NjYzggIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXdhdmVzLndhdmVzLWxpZ2h0ZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkN2NjYzggIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmNhYWE0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi10ZXh0LnRleHQtbGlnaHRlbi0zIHtcXG4gIGNvbG9yOiAjYmNhYWE0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi13YXZlcy53YXZlcy1saWdodGVuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmNhYWE0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ExODg3ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24tdGV4dC50ZXh0LWxpZ2h0ZW4tMiB7XFxuICBjb2xvcjogI2ExODg3ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24td2F2ZXMud2F2ZXMtbGlnaHRlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ExODg3ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24ubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4ZDZlNjMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXRleHQudGV4dC1saWdodGVuLTEge1xcbiAgY29sb3I6ICM4ZDZlNjMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXdhdmVzLndhdmVzLWxpZ2h0ZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4ZDZlNjMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2ZDRjNDEgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXRleHQudGV4dC1kYXJrZW4tMSB7XFxuICBjb2xvcjogIzZkNGM0MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24td2F2ZXMud2F2ZXMtZGFya2VuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmQ0YzQxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWQ0MDM3ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi10ZXh0LnRleHQtZGFya2VuLTIge1xcbiAgY29sb3I6ICM1ZDQwMzcgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXdhdmVzLndhdmVzLWRhcmtlbi0yIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVkNDAzNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24uZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRlMzQyZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24tdGV4dC50ZXh0LWRhcmtlbi0zIHtcXG4gIGNvbG9yOiAjNGUzNDJlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5icm93bi13YXZlcy53YXZlcy1kYXJrZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0ZTM0MmUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzZTI3MjMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJyb3duLXRleHQudGV4dC1kYXJrZW4tNCB7XFxuICBjb2xvcjogIzNlMjcyMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYnJvd24td2F2ZXMud2F2ZXMtZGFya2VuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2UyNzIzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzYwN2Q4YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXRleHQge1xcbiAgY29sb3I6ICM2MDdkOGIgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS13YXZlcyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2MDdkOGIgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWZmMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXRleHQudGV4dC1saWdodGVuLTUge1xcbiAgY29sb3I6ICNlY2VmZjEgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS13YXZlcy53YXZlcy1saWdodGVuLTUgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlZmYxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXkubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjZmQ4ZGMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS10ZXh0LnRleHQtbGlnaHRlbi00IHtcXG4gIGNvbG9yOiAjY2ZkOGRjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktd2F2ZXMud2F2ZXMtbGlnaHRlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NmZDhkYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjBiZWM1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktdGV4dC50ZXh0LWxpZ2h0ZW4tMyB7XFxuICBjb2xvcjogI2IwYmVjNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXdhdmVzLndhdmVzLWxpZ2h0ZW4tMyAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMGJlYzUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzkwYTRhZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXRleHQudGV4dC1saWdodGVuLTIge1xcbiAgY29sb3I6ICM5MGE0YWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS13YXZlcy53YXZlcy1saWdodGVuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTBhNGFlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXkubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3ODkwOWMgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS10ZXh0LnRleHQtbGlnaHRlbi0xIHtcXG4gIGNvbG9yOiAjNzg5MDljICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktd2F2ZXMud2F2ZXMtbGlnaHRlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc4OTA5YyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1NDZlN2EgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS10ZXh0LnRleHQtZGFya2VuLTEge1xcbiAgY29sb3I6ICM1NDZlN2EgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS13YXZlcy53YXZlcy1kYXJrZW4tMSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1NDZlN2EgIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDU1YTY0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktdGV4dC50ZXh0LWRhcmtlbi0yIHtcXG4gIGNvbG9yOiAjNDU1YTY0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXktd2F2ZXMud2F2ZXMtZGFya2VuLTIgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDU1YTY0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ibHVlLWdyZXkuZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM3NDc0ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXRleHQudGV4dC1kYXJrZW4tMyB7XFxuICBjb2xvcjogIzM3NDc0ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LXdhdmVzLndhdmVzLWRhcmtlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM3NDc0ZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmx1ZS1ncmV5LmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNjMyMzggIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS10ZXh0LnRleHQtZGFya2VuLTQge1xcbiAgY29sb3I6ICMyNjMyMzggIWltcG9ydGFudDtcXG59XFxuXFxuLmJsdWUtZ3JleS13YXZlcy53YXZlcy1kYXJrZW4tNCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNjMyMzggIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzllOWU5ZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS10ZXh0IHtcXG4gIGNvbG9yOiAjOWU5ZTllICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzllOWU5ZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS5saWdodGVuLTUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS10ZXh0LnRleHQtbGlnaHRlbi01IHtcXG4gIGNvbG9yOiAjZmFmYWZhICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXdhdmVzLndhdmVzLWxpZ2h0ZW4tNSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXkubGlnaHRlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjUgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktdGV4dC50ZXh0LWxpZ2h0ZW4tNCB7XFxuICBjb2xvcjogI2Y1ZjVmNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS13YXZlcy53YXZlcy1saWdodGVuLTQgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LmxpZ2h0ZW4tMyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXRleHQudGV4dC1saWdodGVuLTMge1xcbiAgY29sb3I6ICNlZWVlZWUgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktd2F2ZXMud2F2ZXMtbGlnaHRlbi0zIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS5saWdodGVuLTIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS10ZXh0LnRleHQtbGlnaHRlbi0yIHtcXG4gIGNvbG9yOiAjZTBlMGUwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXdhdmVzLndhdmVzLWxpZ2h0ZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTAgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXkubGlnaHRlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiZGJkYmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktdGV4dC50ZXh0LWxpZ2h0ZW4tMSB7XFxuICBjb2xvcjogI2JkYmRiZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS13YXZlcy53YXZlcy1saWdodGVuLTEgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmRiZGJkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LmRhcmtlbi0xIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3NTc1NzUgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktdGV4dC50ZXh0LWRhcmtlbi0xIHtcXG4gIGNvbG9yOiAjNzU3NTc1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXdhdmVzLndhdmVzLWRhcmtlbi0xIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc1NzU3NSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS5kYXJrZW4tMiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjE2MTYxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXRleHQudGV4dC1kYXJrZW4tMiB7XFxuICBjb2xvcjogIzYxNjE2MSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS13YXZlcy53YXZlcy1kYXJrZW4tMiAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM2MTYxNjEgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXkuZGFya2VuLTMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQyNDI0MiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3JleS10ZXh0LnRleHQtZGFya2VuLTMge1xcbiAgY29sb3I6ICM0MjQyNDIgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktd2F2ZXMud2F2ZXMtZGFya2VuLTMgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDI0MjQyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LmRhcmtlbi00IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyMTIxMjEgIWltcG9ydGFudDtcXG59XFxuXFxuLmdyZXktdGV4dC50ZXh0LWRhcmtlbi00IHtcXG4gIGNvbG9yOiAjMjEyMTIxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ncmV5LXdhdmVzLndhdmVzLWRhcmtlbi00IC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIxMjEyMSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmxhY2sge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmxhY2stdGV4dCB7XFxuICBjb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2hpdGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2hpdGUtdGV4dCB7XFxuICBjb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udHJhbnNwYXJlbnQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcXG59XFxuXFxuLnRyYW5zcGFyZW50LXRleHQge1xcbiAgY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxufVxcblxcbi8qKlxcbiAqIHByaXNtLmpzIFR3aWxpZ2h0IHRoZW1lXFxuICogQmFzZWQgKG1vcmUgb3IgbGVzcykgb24gdGhlIFR3aWxpZ2h0IHRoZW1lIG9yaWdpbmFsbHkgb2YgVGV4dG1hdGUgZmFtZS5cXG4gKiBAYXV0aG9yIFJlbXkgQmFjaFxcbiAqL1xcbmNvZGVbY2xhc3MqPWxhbmd1YWdlLV0sXFxucHJlW2NsYXNzKj1sYW5ndWFnZS1dIHtcXG4gIGNvbG9yOiB3aGl0ZTtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxuICBmb250LWZhbWlseTogQ29uc29sYXMsIE1vbmFjbywgXFxcIkFuZGFsZSBNb25vXFxcIiwgXFxcIlVidW50dSBNb25vXFxcIiwgbW9ub3NwYWNlO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG4gIHRleHQtc2hhZG93OiAwIC0wLjFlbSAwLjJlbSBibGFjaztcXG4gIHdoaXRlLXNwYWNlOiBwcmU7XFxuICB3b3JkLXNwYWNpbmc6IG5vcm1hbDtcXG4gIHdvcmQtYnJlYWs6IG5vcm1hbDtcXG4gIHdvcmQtd3JhcDogbm9ybWFsO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gIC1tb3otdGFiLXNpemU6IDQ7XFxuICAtby10YWItc2l6ZTogNDtcXG4gIHRhYi1zaXplOiA0O1xcbiAgLXdlYmtpdC1oeXBoZW5zOiBub25lO1xcbiAgLW1vei1oeXBoZW5zOiBub25lO1xcbiAgLW1zLWh5cGhlbnM6IG5vbmU7XFxuICBoeXBoZW5zOiBub25lO1xcbn1cXG5cXG5wcmVbY2xhc3MqPWxhbmd1YWdlLV0sXFxuOm5vdChwcmUpID4gY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXSB7XFxuICBiYWNrZ3JvdW5kOiBoc2woMGRlZywgMCUsIDglKTsgLyogIzE0MTQxNCAqL1xcbn1cXG5cXG4vKiBDb2RlIGJsb2NrcyAqL1xcbnByZVtjbGFzcyo9bGFuZ3VhZ2UtXSB7XFxuICBib3JkZXItcmFkaXVzOiAwLjVlbTtcXG4gIGJvcmRlcjogMC4zZW0gc29saWQgaHNsKDBkZWcsIDAlLCAzMyUpOyAvKiAjMjgyQTJCICovXFxuICBib3gtc2hhZG93OiAxcHggMXB4IDAuNWVtIGJsYWNrIGluc2V0O1xcbiAgbWFyZ2luOiAwLjVlbSAwO1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICBwYWRkaW5nOiAxZW07XFxufVxcblxcbnByZVtjbGFzcyo9bGFuZ3VhZ2UtXTo6LW1vei1zZWxlY3Rpb24ge1xcbiAgLyogRmlyZWZveCAqL1xcbiAgYmFja2dyb3VuZDogaHNsKDIwMGRlZywgNCUsIDE2JSk7IC8qICMyODJBMkIgKi9cXG59XFxuXFxucHJlW2NsYXNzKj1sYW5ndWFnZS1dOjpzZWxlY3Rpb24ge1xcbiAgLyogU2FmYXJpICovXFxuICBiYWNrZ3JvdW5kOiBoc2woMjAwZGVnLCA0JSwgMTYlKTsgLyogIzI4MkEyQiAqL1xcbn1cXG5cXG4vKiBUZXh0IFNlbGVjdGlvbiBjb2xvdXIgKi9cXG5wcmVbY2xhc3MqPWxhbmd1YWdlLV06Oi1tb3otc2VsZWN0aW9uLCBwcmVbY2xhc3MqPWxhbmd1YWdlLV0gOjotbW96LXNlbGVjdGlvbixcXG5jb2RlW2NsYXNzKj1sYW5ndWFnZS1dOjotbW96LXNlbGVjdGlvbiwgY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXSA6Oi1tb3otc2VsZWN0aW9uIHtcXG4gIHRleHQtc2hhZG93OiBub25lO1xcbiAgYmFja2dyb3VuZDogaHNsYSgwZGVnLCAwJSwgOTMlLCAwLjE1KTsgLyogI0VERURFRCAqL1xcbn1cXG5cXG5wcmVbY2xhc3MqPWxhbmd1YWdlLV06OnNlbGVjdGlvbiwgcHJlW2NsYXNzKj1sYW5ndWFnZS1dIDo6c2VsZWN0aW9uLFxcbmNvZGVbY2xhc3MqPWxhbmd1YWdlLV06OnNlbGVjdGlvbiwgY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXSA6OnNlbGVjdGlvbiB7XFxuICB0ZXh0LXNoYWRvdzogbm9uZTtcXG4gIGJhY2tncm91bmQ6IGhzbGEoMGRlZywgMCUsIDkzJSwgMC4xNSk7IC8qICNFREVERUQgKi9cXG59XFxuXFxuLyogSW5saW5lIGNvZGUgKi9cXG46bm90KHByZSkgPiBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dIHtcXG4gIGJvcmRlci1yYWRpdXM6IDAuM2VtO1xcbiAgYm9yZGVyOiAwLjEzZW0gc29saWQgaHNsKDBkZWcsIDAlLCAzMyUpOyAvKiAjNTQ1NDU0ICovXFxuICBib3gtc2hhZG93OiAxcHggMXB4IDAuM2VtIC0wLjFlbSBibGFjayBpbnNldDtcXG4gIHBhZGRpbmc6IDAuMTVlbSAwLjJlbSAwLjA1ZW07XFxuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xcbn1cXG5cXG4udG9rZW4uY29tbWVudCxcXG4udG9rZW4ucHJvbG9nLFxcbi50b2tlbi5kb2N0eXBlLFxcbi50b2tlbi5jZGF0YSB7XFxuICBjb2xvcjogaHNsKDBkZWcsIDAlLCA0NyUpOyAvKiAjNzc3Nzc3ICovXFxufVxcblxcbi50b2tlbi5wdW5jdHVhdGlvbiB7XFxuICBvcGFjaXR5OiAwLjc7XFxufVxcblxcbi5uYW1lc3BhY2Uge1xcbiAgb3BhY2l0eTogMC43O1xcbn1cXG5cXG4udG9rZW4udGFnLFxcbi50b2tlbi5ib29sZWFuLFxcbi50b2tlbi5udW1iZXIsXFxuLnRva2VuLmRlbGV0ZWQge1xcbiAgY29sb3I6IGhzbCgxNGRlZywgNTglLCA1NSUpOyAvKiAjQ0Y2QTRDICovXFxufVxcblxcbi50b2tlbi5rZXl3b3JkLFxcbi50b2tlbi5wcm9wZXJ0eSxcXG4udG9rZW4uc2VsZWN0b3IsXFxuLnRva2VuLmNvbnN0YW50LFxcbi50b2tlbi5zeW1ib2wsXFxuLnRva2VuLmJ1aWx0aW4ge1xcbiAgY29sb3I6IGhzbCg1M2RlZywgODklLCA3OSUpOyAvKiAjRjlFRTk4ICovXFxufVxcblxcbi50b2tlbi5hdHRyLW5hbWUsXFxuLnRva2VuLmF0dHItdmFsdWUsXFxuLnRva2VuLnN0cmluZyxcXG4udG9rZW4uY2hhcixcXG4udG9rZW4ub3BlcmF0b3IsXFxuLnRva2VuLmVudGl0eSxcXG4udG9rZW4udXJsLFxcbi5sYW5ndWFnZS1jc3MgLnRva2VuLnN0cmluZyxcXG4uc3R5bGUgLnRva2VuLnN0cmluZyxcXG4udG9rZW4udmFyaWFibGUsXFxuLnRva2VuLmluc2VydGVkIHtcXG4gIGNvbG9yOiBoc2woNzZkZWcsIDIxJSwgNTIlKTsgLyogIzhGOUQ2QSAqL1xcbn1cXG5cXG4udG9rZW4uYXRydWxlIHtcXG4gIGNvbG9yOiBoc2woMjE4ZGVnLCAyMiUsIDU1JSk7IC8qICM3NTg3QTYgKi9cXG59XFxuXFxuLnRva2VuLnJlZ2V4LFxcbi50b2tlbi5pbXBvcnRhbnQge1xcbiAgY29sb3I6IGhzbCg0MmRlZywgNzUlLCA2NSUpOyAvKiAjRTlDMDYyICovXFxufVxcblxcbi50b2tlbi5pbXBvcnRhbnQsXFxuLnRva2VuLmJvbGQge1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxufVxcblxcbi50b2tlbi5pdGFsaWMge1xcbiAgZm9udC1zdHlsZTogaXRhbGljO1xcbn1cXG5cXG4udG9rZW4uZW50aXR5IHtcXG4gIGN1cnNvcjogaGVscDtcXG59XFxuXFxucHJlW2RhdGEtbGluZV0ge1xcbiAgcGFkZGluZzogMWVtIDAgMWVtIDNlbTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuLyogTWFya3VwICovXFxuLmxhbmd1YWdlLW1hcmt1cCAudG9rZW4udGFnLFxcbi5sYW5ndWFnZS1tYXJrdXAgLnRva2VuLmF0dHItbmFtZSxcXG4ubGFuZ3VhZ2UtbWFya3VwIC50b2tlbi5wdW5jdHVhdGlvbiB7XFxuICBjb2xvcjogaHNsKDMzZGVnLCAzMyUsIDUyJSk7IC8qICNBQzg4NUIgKi9cXG59XFxuXFxuLyogTWFrZSB0aGUgdG9rZW5zIHNpdCBhYm92ZSB0aGUgbGluZSBoaWdobGlnaHQgc28gdGhlIGNvbG91cnMgZG9uJ3QgbG9vayBmYWRlZC4gKi9cXG4udG9rZW4ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgei1pbmRleDogMTtcXG59XFxuXFxuLmxpbmUtaGlnaGxpZ2h0IHtcXG4gIGJhY2tncm91bmQ6IGhzbGEoMGRlZywgMCUsIDMzJSwgMC4yNSk7IC8qICM1NDU0NTQgKi9cXG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgaHNsYSgwZGVnLCAwJSwgMzMlLCAwLjEpIDcwJSwgaHNsYSgwZGVnLCAwJSwgMzMlLCAwKSk7IC8qICM1NDU0NTQgKi9cXG4gIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgaHNsKDBkZWcsIDAlLCAzMyUpOyAvKiAjNTQ1NDU0ICovXFxuICBib3JkZXItdG9wOiAxcHggZGFzaGVkIGhzbCgwZGVnLCAwJSwgMzMlKTsgLyogIzU0NTQ1NCAqL1xcbiAgbGVmdDogMDtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgbWFyZ2luLXRvcDogMC43NWVtOyAvKiBTYW1lIGFzIC5wcmlzbeKAmXMgcGFkZGluZy10b3AgKi9cXG4gIHBhZGRpbmc6IGluaGVyaXQgMDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDA7XFxuICB3aGl0ZS1zcGFjZTogcHJlO1xcbiAgei1pbmRleDogMDtcXG59XFxuXFxuLmxpbmUtaGlnaGxpZ2h0OmJlZm9yZSxcXG4ubGluZS1oaWdobGlnaHRbZGF0YS1lbmRdOmFmdGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IGhzbCgyMTVkZWcsIDE1JSwgNTklKTsgLyogIzg3OTRBNiAqL1xcbiAgYm9yZGVyLXJhZGl1czogOTk5cHg7XFxuICBib3gtc2hhZG93OiAwIDFweCB3aGl0ZTtcXG4gIGNvbG9yOiBoc2woMjRkZWcsIDIwJSwgOTUlKTsgLyogI0Y1RjJGMCAqL1xcbiAgY29udGVudDogYXR0cihkYXRhLXN0YXJ0KTtcXG4gIGZvbnQ6IGJvbGQgNjUlLzEuNSBzYW5zLXNlcmlmO1xcbiAgbGVmdDogMC42ZW07XFxuICBtaW4td2lkdGg6IDFlbTtcXG4gIHBhZGRpbmc6IDAgMC41ZW07XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB0ZXh0LXNoYWRvdzogbm9uZTtcXG4gIHRvcDogMC40ZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogMC4zZW07XFxufVxcblxcbi5saW5lLWhpZ2hsaWdodFtkYXRhLWVuZF06YWZ0ZXIge1xcbiAgYm90dG9tOiAwLjRlbTtcXG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1lbmQpO1xcbiAgdG9wOiBhdXRvO1xcbn1cXG5cXG4ud2luZG93IHtcXG4gIGZvbnQtZmFtaWx5OiBcXFwiVWJ1bnR1XFxcIiwgc2Fucy1zZXJpZjtcXG4gIGZvbnQtc2l6ZTogMTdweDtcXG4gIHdpZHRoOiA2MDBweDtcXG4gIG1hcmdpbjogNzVweCBhdXRvO1xcbiAgYmFja2dyb3VuZDogIzJjM2U1MDtcXG4gIGhlaWdodDogMzUwcHg7XFxuICBib3JkZXItcmFkaXVzOiA1cHg7XFxuICBkaXNwbGF5OiByZWxhdGl2ZTtcXG4gIGJveC1zaGFkb3c6IDEwcHggMTBweCAxMHB4ICM4ODg4ODg7XFxufVxcblxcbi5hZnRlcmNsb3NlIHtcXG4gIGNvbG9yOiAjMzQ0OTVlO1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLm9wZW4ge1xcbiAgY29sb3I6ICNmZmY7XFxuICBwYWRkaW5nOiAxNXB4O1xcbiAgYmFja2dyb3VuZDogIzJlY2M3MTtcXG4gIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gIGJvcmRlcjogbm9uZTtcXG59XFxuXFxuLmJhc2gge1xcbiAgd2lkdGg6IDYwMHB4O1xcbiAgYmFja2dyb3VuZDogIzM0NDk1ZTtcXG4gIGhlaWdodDogMzEwcHg7XFxuICBib3JkZXItcmFkaXVzOiA1cHg7XFxuICB0b3A6IDQwcHg7XFxuICBkaXNwbGF5OiBhYnNvbHV0ZTtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuLmJhc2ggLmNvbW1hbmQ6OmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwidXNlckBtYWNoaW5lICQgOiBcXFwiO1xcbiAgY29sb3I6ICMyZWNjNzE7XFxufVxcbi5iYXNoIC5yZXN1bHRhOjpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIj4+XFxcIjtcXG4gIGNvbG9yOiAjMmVjYzcxO1xcbn1cXG5cXG4vKiBlZmZlY3RlZCBieSBjb250cm9sbGVycyAqL1xcbi53aW5kb3dtYXgge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXJnaW46IGF1dG87XFxuICBiYWNrZ3JvdW5kOiAjMmMzZTUwO1xcbiAgaGVpZ2h0OiAxMDAwcHg7XFxuICBib3JkZXItcmFkaXVzOiA1cHg7XFxuICBkaXNwbGF5OiByZWxhdGl2ZTtcXG59XFxuXFxuLndpbmRvd21pbiB7XFxuICB3aWR0aDogMzAwcHg7XFxuICBoZWlnaHQ6IDQ1cHg7XFxuICBiYWNrZ3JvdW5kOiAjMmMzZTUwO1xcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xcbiAgYm90dG9tOiAwO1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbn1cXG5cXG4uYmFzaG1heCB7XFxuICBkaXNwbGF5OiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYmFja2dyb3VuZDogIzM0NDk1ZTtcXG4gIGhlaWdodDogOTYwcHg7XFxuICBib3JkZXItcmFkaXVzOiA1cHg7XFxuICBib3R0b206IDA7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuXFxuLyogIS0tZW5kLS0hICovXFxuLmJ1dHRvbnMge1xcbiAgd2lkdGg6IDE1cHg7XFxuICBoZWlnaHQ6IDE1cHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBmbG9hdDogcmlnaHQ7XFxuICBtYXJnaW46IDEzcHggNHB4O1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG5cXG4uY2xvc2Uge1xcbiAgYmFja2dyb3VuZDogI2U3NGMzYztcXG59XFxuXFxuLm1heGltaXplIHtcXG4gIGJhY2tncm91bmQ6ICNmMWM0MGY7XFxufVxcblxcbi5taW5pbWl6ZSB7XFxuICBiYWNrZ3JvdW5kOiAjMmVjYzcxO1xcbn1cXG5cXG4ucmVzdWx0IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5jb250cm9scyB7XFxuICBoZWlnaHQ6IDQwcHg7XFxuICB0b3A6IDA7XFxufVxcblxcbi50aXRsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgcGFkZGluZzogMTBweDtcXG59XFxuXFxuLm1hdGVyaWFsLXRvb2x0aXAge1xcbiAgcGFkZGluZzogMTBweCA4cHg7XFxuICBmb250LXNpemU6IDFyZW07XFxuICB6LWluZGV4OiAyMDAwO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgY29sb3I6ICNmZmY7XFxuICBtaW4taGVpZ2h0OiAzNnB4O1xcbiAgbGluZS1oZWlnaHQ6IDEyMCU7XFxuICBvcGFjaXR5OiAwO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSA0cHgpO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGxlZnQ6IDA7XFxuICB0b3A6IDA7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzMjMyMzI7XFxufVxcblxcbi5iYWNrZHJvcCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBvcGFjaXR5OiAwO1xcbiAgaGVpZ2h0OiA3cHg7XFxuICB3aWR0aDogMTRweDtcXG4gIGJvcmRlci1yYWRpdXM6IDAgMCA1MCUgNTAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMyMzIzMjtcXG4gIHotaW5kZXg6IC0xO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDAlO1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbn1cXG5cXG4uc2hhZG93LTAge1xcbiAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4vKiAyZHAgZWxldmF0aW9uIG1vZGlmaWVkKi9cXG4uc2hhZG93LTEsIG5hdiwgLmRyb3Bkb3duLWNvbnRlbnQsIC5jYXJkLCAuY2FyZC1wYW5lbCwgLmJ0bi1mbG9hdGluZywgLmJ0biwgLmJ0bi1zbWFsbCwgLmJ0bi1sYXJnZSwgLmNvbGxhcHNpYmxlIHtcXG4gIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgMXB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4yKTtcXG59XFxuXFxuLnNoYWRvdy0xLWhhbGYsIC5idG4tZmxvYXRpbmc6aG92ZXIsIC5idG46aG92ZXIsIC5idG4tc21hbGw6aG92ZXIsIC5idG4tbGFyZ2U6aG92ZXIge1xcbiAgYm94LXNoYWRvdzogMCAzcHggM3B4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwgMCAxcHggN3B4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwgMCAzcHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xcbn1cXG5cXG4vKiA2ZHAgZWxldmF0aW9uIG1vZGlmaWVkKi9cXG4uc2hhZG93LTIge1xcbiAgYm94LXNoYWRvdzogMCA0cHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwgMCAxcHggMTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4zKTtcXG59XFxuXFxuLyogMTJkcCBlbGV2YXRpb24gbW9kaWZpZWQqL1xcbi5zaGFkb3ctMyB7XFxuICBib3gtc2hhZG93OiAwIDhweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMik7XFxufVxcblxcbi8qIDE2ZHAgZWxldmF0aW9uICovXFxuLnNoYWRvdy00IHtcXG4gIGJveC1zaGFkb3c6IDAgMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDhweCAxMHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpO1xcbn1cXG5cXG4vKiAyNGRwIGVsZXZhdGlvbiAqL1xcbi5zaGFkb3ctNSwgLm1vZGFsIHtcXG4gIGJveC1zaGFkb3c6IDAgMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKTtcXG59XFxuXFxuLyogMjRkcCBlbGV2YXRpb24gKi9cXG4uaW52ZXJ0LXNoYWRvdy01IHtcXG4gIGJveC1zaGFkb3c6IDM4cHggMCAwIDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwgNDZweCAwIDAgMCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAxNXB4IDAgMCAwIHJnYmEoMCwgMCwgMCwgMC4yKTtcXG59XFxuXFxuLmhvdmVyYWJsZSB7XFxuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuMjVzO1xcbn1cXG4uaG92ZXJhYmxlOmhvdmVyIHtcXG4gIGJveC1zaGFkb3c6IDAgOHB4IDE3cHggMCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgNnB4IDIwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTkpO1xcbn1cXG5cXG4vKiFcXG4gKiBXYXZlcyB2MC42LjBcXG4gKiBodHRwOi8vZmlhbi5teS5pZC9XYXZlc1xcbiAqXFxuICogQ29weXJpZ2h0IDIwMTQgQWxmaWFuYSBFLiBTaWJ1ZWEgYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9maWFucy9XYXZlcy9ibG9iL21hc3Rlci9MSUNFTlNFXFxuICovXFxuLndhdmVzLWVmZmVjdCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIHotaW5kZXg6IDE7XFxuICB0cmFuc2l0aW9uOiAwLjNzIGVhc2Utb3V0O1xcbn1cXG4ud2F2ZXMtZWZmZWN0IC53YXZlcy1yaXBwbGUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgd2lkdGg6IDIwcHg7XFxuICBoZWlnaHQ6IDIwcHg7XFxuICBtYXJnaW4tdG9wOiAtMTBweDtcXG4gIG1hcmdpbi1sZWZ0OiAtMTBweDtcXG4gIG9wYWNpdHk6IDA7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC43cyBlYXNlLW91dDtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgb3BhY2l0eTtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLndhdmVzLWVmZmVjdC53YXZlcy1saWdodCAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40NSk7XFxufVxcbi53YXZlcy1lZmZlY3Qud2F2ZXMtcmVkIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC43KTtcXG59XFxuLndhdmVzLWVmZmVjdC53YXZlcy15ZWxsb3cgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjM1LCA1OSwgMC43KTtcXG59XFxuLndhdmVzLWVmZmVjdC53YXZlcy1vcmFuZ2UgLndhdmVzLXJpcHBsZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMTUyLCAwLCAwLjcpO1xcbn1cXG4ud2F2ZXMtZWZmZWN0LndhdmVzLXB1cnBsZSAud2F2ZXMtcmlwcGxlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTU2LCAzOSwgMTc2LCAwLjcpO1xcbn1cXG4ud2F2ZXMtZWZmZWN0LndhdmVzLWdyZWVuIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg3NiwgMTc1LCA4MCwgMC43KTtcXG59XFxuLndhdmVzLWVmZmVjdC53YXZlcy10ZWFsIC53YXZlcy1yaXBwbGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAxNTAsIDEzNiwgMC43KTtcXG59XFxuLndhdmVzLWVmZmVjdCBpbnB1dFt0eXBlPWJ1dHRvbl0sIC53YXZlcy1lZmZlY3QgaW5wdXRbdHlwZT1yZXNldF0sIC53YXZlcy1lZmZlY3QgaW5wdXRbdHlwZT1zdWJtaXRdIHtcXG4gIGJvcmRlcjogMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gIHRleHQtdHJhbnNmb3JtOiBpbmhlcml0O1xcbiAgYmFja2dyb3VuZDogbm9uZTtcXG59XFxuLndhdmVzLWVmZmVjdCBpbWcge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgei1pbmRleDogLTE7XFxufVxcblxcbi53YXZlcy1ub3RyYW5zaXRpb24ge1xcbiAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ud2F2ZXMtY2lyY2xlIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTtcXG4gIC13ZWJraXQtbWFzay1pbWFnZTogLXdlYmtpdC1yYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCB3aGl0ZSAxMDAlLCBibGFjayAxMDAlKTtcXG59XFxuXFxuLndhdmVzLWlucHV0LXdyYXBwZXIge1xcbiAgYm9yZGVyLXJhZGl1czogMC4yZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xcbn1cXG4ud2F2ZXMtaW5wdXQtd3JhcHBlciAud2F2ZXMtYnV0dG9uLWlucHV0IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAxO1xcbn1cXG5cXG4ud2F2ZXMtY2lyY2xlIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHdpZHRoOiAyLjVlbTtcXG4gIGhlaWdodDogMi41ZW07XFxuICBsaW5lLWhlaWdodDogMi41ZW07XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAtd2Via2l0LW1hc2staW1hZ2U6IG5vbmU7XFxufVxcblxcbi53YXZlcy1ibG9jayB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLyogRmlyZWZveCBCdWc6IGxpbmsgbm90IHRyaWdnZXJlZCAqL1xcbi53YXZlcy1lZmZlY3QgLndhdmVzLXJpcHBsZSB7XFxuICB6LWluZGV4OiAtMTtcXG59XFxuXFxuLm1vZGFsIHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWF4LWhlaWdodDogNzAlO1xcbiAgd2lkdGg6IDU1JTtcXG4gIG1hcmdpbjogYXV0bztcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICB3aWxsLWNoYW5nZTogdG9wLCBvcGFjaXR5O1xcbn1cXG4ubW9kYWw6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoIDogOTkycHgpIHtcXG4gIC5tb2RhbCB7XFxuICAgIHdpZHRoOiA4MCU7XFxuICB9XFxufVxcbi5tb2RhbCBoMSwgLm1vZGFsIGgyLCAubW9kYWwgaDMsIC5tb2RhbCBoNCB7XFxuICBtYXJnaW4tdG9wOiAwO1xcbn1cXG4ubW9kYWwgLm1vZGFsLWNvbnRlbnQge1xcbiAgcGFkZGluZzogMjRweDtcXG59XFxuLm1vZGFsIC5tb2RhbC1jbG9zZSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5tb2RhbCAubW9kYWwtZm9vdGVyIHtcXG4gIGJvcmRlci1yYWRpdXM6IDAgMCAycHggMnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcXG4gIHBhZGRpbmc6IDRweCA2cHg7XFxuICBoZWlnaHQ6IDU2cHg7XFxuICB3aWR0aDogMTAwJTtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbn1cXG4ubW9kYWwgLm1vZGFsLWZvb3RlciAuYnRuLCAubW9kYWwgLm1vZGFsLWZvb3RlciAuYnRuLXNtYWxsLCAubW9kYWwgLm1vZGFsLWZvb3RlciAuYnRuLWxhcmdlLCAubW9kYWwgLm1vZGFsLWZvb3RlciAuYnRuLWZsYXQge1xcbiAgbWFyZ2luOiA2cHggMDtcXG59XFxuLm1vZGFsIC5tb2RhbC1oZWFkZXIge1xcbiAgYm9yZGVyLXJhZGl1czogMnB4IDJweCAwIDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xcbiAgcGFkZGluZzogNnB4IDRweDtcXG4gIGhlaWdodDogNTZweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxufVxcbi5tb2RhbCAubW9kYWwtaGVhZGVyIC5idG4sIC5tb2RhbCAubW9kYWwtaGVhZGVyIC5idG4tc21hbGwsIC5tb2RhbCAubW9kYWwtaGVhZGVyIC5idG4tbGFyZ2UsIC5tb2RhbCAubW9kYWwtaGVhZGVyIC5idG4tZmxhdCB7XFxuICBtYXJnaW46IDZweCAwO1xcbn1cXG5cXG4ubW9kYWwtb3ZlcmxheSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB6LWluZGV4OiA5OTk7XFxuICB0b3A6IC0yNSU7XFxuICBsZWZ0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBoZWlnaHQ6IDEyNSU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGJhY2tncm91bmQ6ICMwMDA7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgd2lsbC1jaGFuZ2U6IG9wYWNpdHk7XFxufVxcblxcbi5tb2RhbC5tb2RhbC1maXhlZC1mb290ZXIge1xcbiAgcGFkZGluZzogMDtcXG4gIGhlaWdodDogNzAlO1xcbn1cXG4ubW9kYWwubW9kYWwtZml4ZWQtZm9vdGVyIC5tb2RhbC1jb250ZW50IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGhlaWdodDogY2FsYygxMDAlIC0gNTZweCk7XFxuICBtYXgtaGVpZ2h0OiAxMDAlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbn1cXG4ubW9kYWwubW9kYWwtZml4ZWQtZm9vdGVyIC5tb2RhbC1mb290ZXIge1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogMDtcXG59XFxuXFxuLm1vZGFsLmJvdHRvbS1zaGVldCB7XFxuICB0b3A6IGF1dG87XFxuICBib3R0b206IC0xMDAlO1xcbiAgbWFyZ2luOiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXgtaGVpZ2h0OiA0NSU7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbiAgd2lsbC1jaGFuZ2U6IGJvdHRvbSwgb3BhY2l0eTtcXG59XFxuXFxuaHRtbCxcXG5ib2R5LFxcbiNyb290IHtcXG4gIG1hcmdpbjogMDtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuXFxuKiB7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuLm5vc2VsZWN0IHtcXG4gIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTsgLyogaU9TIFNhZmFyaSAqL1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsgLyogU2FmYXJpICovXFxuICAta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7IC8qIEtvbnF1ZXJvciBIVE1MICovXFxuICAtbW96LXVzZXItc2VsZWN0OiBub25lOyAvKiBPbGQgdmVyc2lvbnMgb2YgRmlyZWZveCAqL1xcbiAgLW1zLXVzZXItc2VsZWN0OiBub25lOyAvKiBJbnRlcm5ldCBFeHBsb3Jlci9FZGdlICovXFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIC8qIE5vbi1wcmVmaXhlZCB2ZXJzaW9uLCBjdXJyZW50bHlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBieSBDaHJvbWUsIEVkZ2UsIE9wZXJhIGFuZCBGaXJlZm94ICovXFxufVxcblxcbnVsOm5vdCguYnJvd3Nlci1kZWZhdWx0KSB7XFxuICBwYWRkaW5nLWxlZnQ6IDA7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxufVxcbnVsOm5vdCguYnJvd3Nlci1kZWZhdWx0KSA+IGxpIHtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG59XFxuXFxuYSB7XFxuICBjb2xvcjogIzAzOWJlNTtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi53LTEwMCB7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuXFxuLnJpZ2h0LWFsaWduIHtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbn1cXG5cXG4uY2VudGVyLWFsaWduIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLnYtY2VudGVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4ubWIxIHtcXG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XFxufVxcblxcbi5jb2xsZWN0aW9uIHtcXG4gIG1hcmdpbjogMC4zMzMzMzMzMzMzcmVtIDAgMC42NjY2NjY2NjY3cmVtIDA7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcXG4gIHBhZGRpbmc6IDEwcHggMjBweDtcXG4gIG1hcmdpbjogMDtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBlMGUwO1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmhvdmVyOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkZGQ7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyIHtcXG4gIG1pbi1oZWlnaHQ6IDg0cHg7XFxuICBwYWRkaW5nLWxlZnQ6IDcycHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyOm5vdCguY2lyY2xlLWNsaXBwZXIpID4gLmNpcmNsZSxcXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmF2YXRhciA6bm90KC5jaXJjbGUtY2xpcHBlcikgPiAuY2lyY2xlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiA0MnB4O1xcbiAgaGVpZ2h0OiA0MnB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGxlZnQ6IDE1cHg7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmF2YXRhciBpLmNpcmNsZSB7XFxuICBmb250LXNpemU6IDE4cHg7XFxuICBsaW5lLWhlaWdodDogNDJweDtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzk5OTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hdmF0YXIgLnRpdGxlIHtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hdmF0YXIgcCB7XFxuICBtYXJnaW46IDA7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyIC5zZWNvbmRhcnktY29udGVudCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDE2cHg7XFxuICByaWdodDogMTZweDtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbTpsYXN0LWNoaWxkIHtcXG4gIGJvcmRlci1ib3R0b206IG5vbmU7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmE2OWE7XFxuICBjb2xvcjogI2VhZmFmOTtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hY3RpdmUgLnNlY29uZGFyeS1jb250ZW50IHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4uY29sbGVjdGlvbiBhLmNvbGxlY3Rpb24taXRlbSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHRyYW5zaXRpb246IDAuMjVzO1xcbiAgY29sb3I6ICMyNmE2OWE7XFxufVxcbi5jb2xsZWN0aW9uIGEuY29sbGVjdGlvbi1pdGVtOm5vdCguYWN0aXZlKTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkO1xcbn1cXG4uY29sbGVjdGlvbi53aXRoLWhlYWRlciAuY29sbGVjdGlvbi1oZWFkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBlMGUwO1xcbiAgcGFkZGluZzogMTBweCAyMHB4O1xcbn1cXG4uY29sbGVjdGlvbi53aXRoLWhlYWRlciAuY29sbGVjdGlvbi1pdGVtIHtcXG4gIHBhZGRpbmctbGVmdDogMzBweDtcXG59XFxuLmNvbGxlY3Rpb24ud2l0aC1oZWFkZXIgLmNvbGxlY3Rpb24taXRlbS5hdmF0YXIge1xcbiAgcGFkZGluZy1sZWZ0OiA3MnB4O1xcbn1cXG5cXG4uc2Vjb25kYXJ5LWNvbnRlbnQge1xcbiAgZmxvYXQ6IHJpZ2h0O1xcbiAgY29sb3I6ICMyNmE2OWE7XFxufVxcblxcbi5jb2xsYXBzaWJsZSAuY29sbGVjdGlvbiB7XFxuICBtYXJnaW46IDA7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcblxcbi5tb2RhbC1vdmVybGF5IHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIGhlaWdodDogMTAwdmg7XFxuICB3aWR0aDogMTAwdnc7XFxuICBwYWRkaW5nOiAyMHB4IDAgMjBweCAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xcbiAgei1pbmRleDogOTk5O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG4ubW9kYWwtb3ZlcmxheSAuaW5uZXJmb3JtIHtcXG4gIG1heC13aWR0aDogNjUwcHg7XFxufVxcbi5tb2RhbC1vdmVybGF5IC5pbm5lcmZvcm0gZm9ybSB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4vKioqKioqKioqKioqKioqKioqKioqXFxuICBNZWRpYSBRdWVyeSBDbGFzc2VzXFxuKioqKioqKioqKioqKioqKioqKioqKi9cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGggOiA2MDBweCkge1xcbiAgLmhpZGUtb24tc21hbGwtb25seSwgLmhpZGUtb24tc21hbGwtYW5kLWRvd24ge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aCA6IDk5MnB4KSB7XFxuICAuaGlkZS1vbi1tZWQtYW5kLWRvd24ge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6IDYwMXB4KSB7XFxuICAuaGlkZS1vbi1tZWQtYW5kLXVwIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYwMHB4KSBhbmQgKG1heC13aWR0aDogOTkycHgpIHtcXG4gIC5oaWRlLW9uLW1lZC1vbmx5IHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiA5OTNweCkge1xcbiAgLmhpZGUtb24tbGFyZ2Utb25seSB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoIDogMTIwMXB4KSB7XFxuICAuaGlkZS1vbi1leHRyYS1sYXJnZS1vbmx5IHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiAxMjAxcHgpIHtcXG4gIC5zaG93LW9uLWV4dHJhLWxhcmdlIHtcXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoIDogOTkzcHgpIHtcXG4gIC5zaG93LW9uLWxhcmdlIHtcXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDk5MnB4KSB7XFxuICAuc2hvdy1vbi1tZWRpdW0ge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGggOiA2MDBweCkge1xcbiAgLnNob3ctb24tc21hbGwge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiA2MDFweCkge1xcbiAgLnNob3ctb24tbWVkaXVtLWFuZC11cCB7XFxuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aCA6IDk5MnB4KSB7XFxuICAuc2hvdy1vbi1tZWRpdW0tYW5kLWRvd24ge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGggOiA2MDBweCkge1xcbiAgLmNlbnRlci1vbi1zbWFsbC1vbmx5IHtcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgfVxcbn1cXG5cXG4vKioqKioqKioqKioqKioqKioqKlxcbiAgVXRpbGl0eSBDbGFzc2VzXFxuKioqKioqKioqKioqKioqKioqKi9cXG4uaGlkZSB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcblxcbi5sZWZ0LWFsaWduIHtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxufVxcblxcbi5yaWdodC1hbGlnbiB7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuXFxuLmNlbnRlciwgLmNlbnRlci1hbGlnbiB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi5sZWZ0IHtcXG4gIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yaWdodCB7XFxuICBmbG9hdDogcmlnaHQgIWltcG9ydGFudDtcXG59XFxuXFxuLm5vLXNlbGVjdCB7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLmNpcmNsZSB7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcblxcbi5jZW50ZXItYmxvY2sge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIG1hcmdpbi1yaWdodDogYXV0bztcXG59XFxuXFxuLnRydW5jYXRlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG59XFxuXFxuLm5vLXBhZGRpbmcge1xcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG5zcGFuLmJhZGdlIHtcXG4gIG1pbi13aWR0aDogM3JlbTtcXG4gIHBhZGRpbmc6IDAgNnB4O1xcbiAgbWFyZ2luLWxlZnQ6IDE0cHg7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBmb250LXNpemU6IDFyZW07XFxuICBsaW5lLWhlaWdodDogMjJweDtcXG4gIGhlaWdodDogMjJweDtcXG4gIGNvbG9yOiAjNzU3NTc1O1xcbiAgZmxvYXQ6IHJpZ2h0O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuc3Bhbi5iYWRnZS5uZXcge1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGZvbnQtc2l6ZTogMC44cmVtO1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbn1cXG5zcGFuLmJhZGdlLm5ldzphZnRlciB7XFxuICBjb250ZW50OiBcXFwiIG5ld1xcXCI7XFxufVxcbnNwYW4uYmFkZ2VbZGF0YS1iYWRnZS1jYXB0aW9uXTo6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIiBcXFwiIGF0dHIoZGF0YS1iYWRnZS1jYXB0aW9uKTtcXG59XFxuXFxubmF2IHVsIGEgc3Bhbi5iYWRnZSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBmbG9hdDogbm9uZTtcXG4gIG1hcmdpbi1sZWZ0OiA0cHg7XFxuICBsaW5lLWhlaWdodDogMjJweDtcXG4gIGhlaWdodDogMjJweDtcXG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGF1dG87XFxufVxcblxcbi5jb2xsZWN0aW9uLWl0ZW0gc3Bhbi5iYWRnZSB7XFxuICBtYXJnaW4tdG9wOiBjYWxjKDAuNzVyZW0gLSAxMXB4KTtcXG59XFxuXFxuLmNvbGxhcHNpYmxlIHNwYW4uYmFkZ2Uge1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcblxcbi5zaWRlbmF2IHNwYW4uYmFkZ2Uge1xcbiAgbWFyZ2luLXRvcDogMTEuNXB4O1xcbn1cXG5cXG50YWJsZSBzcGFuLmJhZGdlIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGZsb2F0OiBub25lO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcblxcbi5jaGlwIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGhlaWdodDogMzJweDtcXG4gIGZvbnQtc2l6ZTogMTNweDtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjYpO1xcbiAgbGluZS1oZWlnaHQ6IDMycHg7XFxuICBwYWRkaW5nOiAwIDEycHg7XFxuICBib3JkZXItcmFkaXVzOiAxNnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U0ZTRlNDtcXG4gIG1hcmdpbi1ib3R0b206IDVweDtcXG4gIG1hcmdpbi1yaWdodDogNXB4O1xcbn1cXG4uY2hpcDpmb2N1cyB7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YTY5YTtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4uY2hpcCA+IGltZyB7XFxuICBmbG9hdDogbGVmdDtcXG4gIG1hcmdpbjogMCA4cHggMCAtMTJweDtcXG4gIGhlaWdodDogMzJweDtcXG4gIHdpZHRoOiAzMnB4O1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbn1cXG4uY2hpcCAuY2xvc2Uge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZmxvYXQ6IHJpZ2h0O1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgbGluZS1oZWlnaHQ6IDMycHg7XFxuICBwYWRkaW5nLWxlZnQ6IDhweDtcXG59XFxuXFxuLmNoaXBzIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjOWU5ZTllO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIG1hcmdpbjogMCAwIDhweCAwO1xcbiAgbWluLWhlaWdodDogNDVweDtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4zcztcXG59XFxuLmNoaXBzLmZvY3VzIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMjZhNjlhO1xcbiAgYm94LXNoYWRvdzogMCAxcHggMCAwICMyNmE2OWE7XFxufVxcbi5jaGlwczpob3ZlciB7XFxuICBjdXJzb3I6IHRleHQ7XFxufVxcbi5jaGlwcyAuaW5wdXQge1xcbiAgYmFja2dyb3VuZDogbm9uZTtcXG4gIGJvcmRlcjogMDtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNik7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICBoZWlnaHQ6IDU2cHg7XFxuICBsaW5lLWhlaWdodDogMzJweDtcXG4gIG91dGxpbmU6IDA7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxuICB3aWR0aDogMTIwcHggIWltcG9ydGFudDtcXG59XFxuLmNoaXBzIC5pbnB1dDpmb2N1cyB7XFxuICBib3JkZXI6IDAgIWltcG9ydGFudDtcXG4gIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuLmNoaXBzIC5hdXRvY29tcGxldGUtY29udGVudCB7XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG59XFxuXFxuLnByZWZpeCB+IC5jaGlwcyB7XFxuICBtYXJnaW4tbGVmdDogM3JlbTtcXG4gIHdpZHRoOiA5MiU7XFxuICB3aWR0aDogY2FsYygxMDAlIC0gM3JlbSk7XFxufVxcblxcbi5jaGlwczplbXB0eSB+IGxhYmVsIHtcXG4gIGZvbnQtc2l6ZTogMC44cmVtO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xNDAlKTtcXG59XFxuXFxuLmNvbGxhcHNpYmxlIHtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2RkZDtcXG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2RkZDtcXG4gIG1hcmdpbjogMC4zMzMzMzMzMzMzcmVtIDAgMC42NjY2NjY2NjY3cmVtIDA7XFxufVxcblxcbi5jb2xsYXBzaWJsZS1oZWFkZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgcGFkZGluZzogMXJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcXG59XFxuLmNvbGxhcHNpYmxlLWhlYWRlcjpmb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4uY29sbGFwc2libGUtaGVhZGVyIGkge1xcbiAgd2lkdGg6IDJyZW07XFxuICBmb250LXNpemU6IDEuNnJlbTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG1hcmdpbi1yaWdodDogMXJlbTtcXG59XFxuXFxuLmtleWJvYXJkLWZvY3VzZWQgLmNvbGxhcHNpYmxlLWhlYWRlcjpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO1xcbn1cXG5cXG4uY29sbGFwc2libGUtYm9keSB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgcGFkZGluZzogMnJlbTtcXG59XFxuXFxuLnNpZGVuYXYgLmNvbGxhcHNpYmxlLFxcbi5zaWRlbmF2LmZpeGVkIC5jb2xsYXBzaWJsZSB7XFxuICBib3JkZXI6IG5vbmU7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG4uc2lkZW5hdiAuY29sbGFwc2libGUgbGksXFxuLnNpZGVuYXYuZml4ZWQgLmNvbGxhcHNpYmxlIGxpIHtcXG4gIHBhZGRpbmc6IDA7XFxufVxcbi5zaWRlbmF2IC5jb2xsYXBzaWJsZS1oZWFkZXIsXFxuLnNpZGVuYXYuZml4ZWQgLmNvbGxhcHNpYmxlLWhlYWRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgaGVpZ2h0OiBpbmhlcml0O1xcbiAgcGFkZGluZzogMCAxNXB4O1xcbn1cXG4uc2lkZW5hdiAuY29sbGFwc2libGUtaGVhZGVyOmhvdmVyLFxcbi5zaWRlbmF2LmZpeGVkIC5jb2xsYXBzaWJsZS1oZWFkZXI6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG59XFxuLnNpZGVuYXYgLmNvbGxhcHNpYmxlLWhlYWRlciBpLFxcbi5zaWRlbmF2LmZpeGVkIC5jb2xsYXBzaWJsZS1oZWFkZXIgaSB7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG59XFxuLnNpZGVuYXYgLmNvbGxhcHNpYmxlLWJvZHksXFxuLnNpZGVuYXYuZml4ZWQgLmNvbGxhcHNpYmxlLWJvZHkge1xcbiAgYm9yZGVyOiAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG59XFxuLnNpZGVuYXYgLmNvbGxhcHNpYmxlLWJvZHkgbGkgYSxcXG4uc2lkZW5hdi5maXhlZCAuY29sbGFwc2libGUtYm9keSBsaSBhIHtcXG4gIHBhZGRpbmc6IDAgMjIuNXB4IDAgMzBweDtcXG59XFxuXFxuLmNvbGxhcHNpYmxlLnBvcG91dCB7XFxuICBib3JkZXI6IG5vbmU7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG4uY29sbGFwc2libGUucG9wb3V0ID4gbGkge1xcbiAgYm94LXNoYWRvdzogMCAycHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE2KSwgMCAycHggMTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xMik7XFxuICBtYXJnaW46IDAgMjRweDtcXG4gIHRyYW5zaXRpb246IG1hcmdpbiAwLjM1cyBjdWJpYy1iZXppZXIoMC4yNSwgMC40NiwgMC40NSwgMC45NCk7XFxufVxcbi5jb2xsYXBzaWJsZS5wb3BvdXQgPiBsaS5hY3RpdmUge1xcbiAgYm94LXNoYWRvdzogMCA1cHggMTFweCAwIHJnYmEoMCwgMCwgMCwgMC4xOCksIDAgNHB4IDE1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xcbiAgbWFyZ2luOiAxNnB4IDA7XFxufVxcblxcbi5jb2xsZWN0aW9uIHtcXG4gIG1hcmdpbjogMC4zMzMzMzMzMzMzcmVtIDAgMC42NjY2NjY2NjY3cmVtIDA7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcXG4gIHBhZGRpbmc6IDEwcHggMjBweDtcXG4gIG1hcmdpbjogMDtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBlMGUwO1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmF2YXRhciB7XFxuICBtaW4taGVpZ2h0OiA4NHB4O1xcbiAgcGFkZGluZy1sZWZ0OiA3MnB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmF2YXRhcjpub3QoLmNpcmNsZS1jbGlwcGVyKSA+IC5jaXJjbGUsXFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hdmF0YXIgOm5vdCguY2lyY2xlLWNsaXBwZXIpID4gLmNpcmNsZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogNDJweDtcXG4gIGhlaWdodDogNDJweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBsZWZ0OiAxNXB4O1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuLmNvbGxlY3Rpb24gLmNvbGxlY3Rpb24taXRlbS5hdmF0YXIgaS5jaXJjbGUge1xcbiAgZm9udC1zaXplOiAxOHB4O1xcbiAgbGluZS1oZWlnaHQ6IDQycHg7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5OTk7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyIC50aXRsZSB7XFxuICBmb250LXNpemU6IDE2cHg7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyIHAge1xcbiAgbWFyZ2luOiAwO1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmF2YXRhciAuc2Vjb25kYXJ5LWNvbnRlbnQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxNnB4O1xcbiAgcmlnaHQ6IDE2cHg7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW06bGFzdC1jaGlsZCB7XFxuICBib3JkZXItYm90dG9tOiBub25lO1xcbn1cXG4uY29sbGVjdGlvbiAuY29sbGVjdGlvbi1pdGVtLmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbiAgY29sb3I6ICNlYWZhZjk7XFxufVxcbi5jb2xsZWN0aW9uIC5jb2xsZWN0aW9uLWl0ZW0uYWN0aXZlIC5zZWNvbmRhcnktY29udGVudCB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLmNvbGxlY3Rpb24gYS5jb2xsZWN0aW9uLWl0ZW0ge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB0cmFuc2l0aW9uOiAwLjI1cztcXG4gIGNvbG9yOiAjMjZhNjlhO1xcbn1cXG4uY29sbGVjdGlvbiBhLmNvbGxlY3Rpb24taXRlbTpub3QoLmFjdGl2ZSk6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDtcXG59XFxuLmNvbGxlY3Rpb24ud2l0aC1oZWFkZXIgLmNvbGxlY3Rpb24taGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2UwZTBlMDtcXG4gIHBhZGRpbmc6IDEwcHggMjBweDtcXG59XFxuLmNvbGxlY3Rpb24ud2l0aC1oZWFkZXIgLmNvbGxlY3Rpb24taXRlbSB7XFxuICBwYWRkaW5nLWxlZnQ6IDMwcHg7XFxufVxcbi5jb2xsZWN0aW9uLndpdGgtaGVhZGVyIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyIHtcXG4gIHBhZGRpbmctbGVmdDogNzJweDtcXG59XFxuLmNvbGxlY3Rpb24gLnNlY29uZGFyeS1jb250ZW50IHtcXG4gIGZsb2F0OiByaWdodDtcXG4gIGNvbG9yOiAjMjZhNjlhO1xcbn1cXG5cXG5zZWxlY3Q6Zm9jdXMge1xcbiAgb3V0bGluZTogMXB4IHNvbGlkICNjOWYzZWY7XFxufVxcblxcbmJ1dHRvbjpmb2N1cyB7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzJhYjdhOTtcXG59XFxuXFxubGFiZWwge1xcbiAgZm9udC1zaXplOiAwLjhyZW07XFxuICBjb2xvcjogIzllOWU5ZTtcXG59XFxuXFxuLyogVGV4dCBJbnB1dHMgKyBUZXh0YXJlYVxcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXFxuLyogU3R5bGUgUGxhY2Vob2xkZXJzICovXFxuOjpwbGFjZWhvbGRlciB7XFxuICBjb2xvcjogI2QxZDFkMTtcXG59XFxuXFxuLyogVGV4dCBpbnB1dHMgKi9cXG5pbnB1dDpub3QoW3R5cGVdKSxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXG50ZXh0YXJlYS50ZXh0YXJlYSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjOWU5ZTllO1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBoZWlnaHQ6IDU2cHg7XFxuICB3aWR0aDogMTAwJTtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG4gIG1hcmdpbjogMCAwIDhweCAwO1xcbiAgcGFkZGluZzogMDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcXG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4zcywgYm9yZGVyIDAuM3M7XFxufVxcbmlucHV0Om5vdChbdHlwZV0pOmRpc2FibGVkLCBpbnB1dDpub3QoW3R5cGVdKVtyZWFkb25seT1yZWFkb25seV0sXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQsXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCxcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQsXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0sXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQsXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6ZGlzYWJsZWQsXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0sXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSxcXG50ZXh0YXJlYS50ZXh0YXJlYTpkaXNhYmxlZCxcXG50ZXh0YXJlYS50ZXh0YXJlYVtyZWFkb25seT1yZWFkb25seV0ge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40Mik7XFxuICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkIHJnYmEoMCwgMCwgMCwgMC40Mik7XFxufVxcbmlucHV0Om5vdChbdHlwZV0pOmRpc2FibGVkICsgbGFiZWwsIGlucHV0Om5vdChbdHlwZV0pW3JlYWRvbmx5PXJlYWRvbmx5XSArIGxhYmVsLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkICsgbGFiZWwsXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0gKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkICsgbGFiZWwsXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0gKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCArIGxhYmVsLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdClbcmVhZG9ubHk9cmVhZG9ubHldICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpW3JlYWRvbmx5PXJlYWRvbmx5XSArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpkaXNhYmxlZCArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0gKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkICsgbGFiZWwsXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0gKyBsYWJlbCxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0gKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpOmRpc2FibGVkICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KVtyZWFkb25seT1yZWFkb25seV0gKyBsYWJlbCxcXG50ZXh0YXJlYS50ZXh0YXJlYTpkaXNhYmxlZCArIGxhYmVsLFxcbnRleHRhcmVhLnRleHRhcmVhW3JlYWRvbmx5PXJlYWRvbmx5XSArIGxhYmVsIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbn1cXG5pbnB1dDpub3QoW3R5cGVdKTpmb2N1czpub3QoW3JlYWRvbmx5XSksXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSksXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSksXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSksXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSxcXG50ZXh0YXJlYS50ZXh0YXJlYTpmb2N1czpub3QoW3JlYWRvbmx5XSkge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMyNmE2OWE7XFxuICBib3gtc2hhZG93OiAwIDFweCAwIDAgIzI2YTY5YTtcXG59XFxuaW5wdXQ6bm90KFt0eXBlXSk6Zm9jdXM6bm90KFtyZWFkb25seV0pICsgbGFiZWwsXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSkgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSArIGxhYmVsLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSkgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pICsgbGFiZWwsXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1czpub3QoW3JlYWRvbmx5XSkgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzOm5vdChbcmVhZG9ubHldKSArIGxhYmVsLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXM6bm90KFtyZWFkb25seV0pICsgbGFiZWwsXFxudGV4dGFyZWEudGV4dGFyZWE6Zm9jdXM6bm90KFtyZWFkb25seV0pICsgbGFiZWwge1xcbiAgY29sb3I6ICMyNmE2OWE7XFxufVxcbmlucHV0Om5vdChbdHlwZV0pOmZvY3VzLnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IGxhYmVsLFxcbnRleHRhcmVhLnRleHRhcmVhOmZvY3VzLnZhbGlkIH4gbGFiZWwge1xcbiAgY29sb3I6ICM0Y2FmNTA7XFxufVxcbmlucHV0Om5vdChbdHlwZV0pOmZvY3VzLmludmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPWVtYWlsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiBsYWJlbCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IGxhYmVsLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IGxhYmVsLFxcbnRleHRhcmVhLnRleHRhcmVhOmZvY3VzLmludmFsaWQgfiBsYWJlbCB7XFxuICBjb2xvcjogI2Y0NDMzNjtcXG59XFxuaW5wdXQ6bm90KFt0eXBlXSkudmFsaWRhdGUgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZGF0ZSArIGxhYmVsLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZGF0ZSArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZGF0ZSArIGxhYmVsLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWRhdGUgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZGF0ZSArIGxhYmVsLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkYXRlICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkYXRlICsgbGFiZWwsXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkYXRlICsgbGFiZWwsXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZGF0ZSArIGxhYmVsLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWRhdGUgKyBsYWJlbCxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkYXRlICsgbGFiZWwsXFxudGV4dGFyZWEudGV4dGFyZWEudmFsaWRhdGUgKyBsYWJlbCB7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLyogVmFsaWRhdGlvbiBTYXNzIFBsYWNlaG9sZGVycyAqL1xcbi5zZWxlY3Qtd3JhcHBlci52YWxpZCA+IGlucHV0LnNlbGVjdC1kcm9wZG93biwgaW5wdXQ6bm90KFt0eXBlXSkudmFsaWQsIGlucHV0Om5vdChbdHlwZV0pOmZvY3VzLnZhbGlkLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQsXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQsXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkLFxcbnRleHRhcmVhLnRleHRhcmVhLnZhbGlkLFxcbnRleHRhcmVhLnRleHRhcmVhOmZvY3VzLnZhbGlkIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNGNhZjUwO1xcbiAgYm94LXNoYWRvdzogMCAxcHggMCAwICM0Y2FmNTA7XFxufVxcblxcbi5zZWxlY3Qtd3JhcHBlci5pbnZhbGlkID4gaW5wdXQuc2VsZWN0LWRyb3Bkb3duLCAuc2VsZWN0LXdyYXBwZXIuaW52YWxpZCA+IGlucHV0LnNlbGVjdC1kcm9wZG93bjpmb2N1cywgaW5wdXQ6bm90KFt0eXBlXSkuaW52YWxpZCwgaW5wdXQ6bm90KFt0eXBlXSk6Zm9jdXMuaW52YWxpZCxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQsXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQsXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkLFxcbnRleHRhcmVhLnRleHRhcmVhLmludmFsaWQsXFxudGV4dGFyZWEudGV4dGFyZWE6Zm9jdXMuaW52YWxpZCB7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2Y0NDMzNjtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDAgMCAjZjQ0MzM2O1xcbn1cXG5cXG4uc2VsZWN0LXdyYXBwZXIudmFsaWQgLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sIC5zZWxlY3Qtd3JhcHBlci5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLCBpbnB1dDpub3QoW3R5cGVdKS52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLCBpbnB1dDpub3QoW3R5cGVdKTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLCBpbnB1dDpub3QoW3R5cGVdKS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLCBpbnB1dDpub3QoW3R5cGVdKTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT10ZXh0XTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9ZGF0ZV06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG50ZXh0YXJlYS50ZXh0YXJlYS52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLXN1Y2Nlc3NdLFxcbnRleHRhcmVhLnRleHRhcmVhOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxudGV4dGFyZWEudGV4dGFyZWEuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSxcXG50ZXh0YXJlYS50ZXh0YXJlYTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtZXJyb3JdIHtcXG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5zZWxlY3Qtd3JhcHBlci52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlciwgaW5wdXQ6bm90KFt0eXBlXSkudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsIGlucHV0Om5vdChbdHlwZV0pOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9cGFzc3dvcmRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZW1haWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXVybF06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT10ZWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPW51bWJlcl06bm90KC5icm93c2VyLWRlZmF1bHQpLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbnRleHRhcmVhLnRleHRhcmVhLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbnRleHRhcmVhLnRleHRhcmVhOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyIHtcXG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zdWNjZXNzKTtcXG4gIGNvbG9yOiAjNGNhZjUwO1xcbn1cXG5cXG4uc2VsZWN0LXdyYXBwZXIuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlciwgaW5wdXQ6bm90KFt0eXBlXSkuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlciwgaW5wdXQ6bm90KFt0eXBlXSk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPWRhdGVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9dGVsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KS5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCk6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG5pbnB1dFt0eXBlPXNlYXJjaF06bm90KC5icm93c2VyLWRlZmF1bHQpLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpmb2N1cy5pbnZhbGlkIH4gLmhlbHBlci10ZXh0OmFmdGVyLFxcbnRleHRhcmVhLnRleHRhcmVhLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxudGV4dGFyZWEudGV4dGFyZWE6Zm9jdXMuaW52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlciB7XFxuICBjb250ZW50OiBhdHRyKGRhdGEtZXJyb3IpO1xcbiAgY29sb3I6ICNmNDQzMzY7XFxufVxcblxcbi5zZWxlY3Qtd3JhcHBlciArIGxhYmVsOmFmdGVyLCBpbnB1dDpub3QoW3R5cGVdKSArIGxhYmVsOmFmdGVyLFxcbmlucHV0W3R5cGU9dGV4dF06bm90KC5icm93c2VyLWRlZmF1bHQpICsgbGFiZWw6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1wYXNzd29yZF06bm90KC5icm93c2VyLWRlZmF1bHQpICsgbGFiZWw6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpICsgbGFiZWw6YWZ0ZXIsXFxuaW5wdXRbdHlwZT11cmxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSArIGxhYmVsOmFmdGVyLFxcbmlucHV0W3R5cGU9dGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpICsgbGFiZWw6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCkgKyBsYWJlbDphZnRlcixcXG5pbnB1dFt0eXBlPWRhdGV0aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkgKyBsYWJlbDphZnRlcixcXG5pbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXTpub3QoLmJyb3dzZXItZGVmYXVsdCkgKyBsYWJlbDphZnRlcixcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpICsgbGFiZWw6YWZ0ZXIsXFxuaW5wdXRbdHlwZT1udW1iZXJdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSArIGxhYmVsOmFmdGVyLFxcbmlucHV0W3R5cGU9c2VhcmNoXTpub3QoLmJyb3dzZXItZGVmYXVsdCkgKyBsYWJlbDphZnRlcixcXG50ZXh0YXJlYS50ZXh0YXJlYSArIGxhYmVsOmFmdGVyIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDEwMCU7XFxuICBsZWZ0OiAwO1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zaXRpb246IDAuMnMgb3BhY2l0eSBlYXNlLW91dCwgMC4ycyBjb2xvciBlYXNlLW91dDtcXG59XFxuXFxuLmlucHV0LWZpZWxkIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG1hcmdpbi10b3A6IDFyZW07XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbn1cXG4uaW5wdXQtZmllbGQuaW5saW5lIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICBtYXJnaW4tbGVmdDogNXB4O1xcbn1cXG4uaW5wdXQtZmllbGQuaW5saW5lIGlucHV0LFxcbi5pbnB1dC1maWVsZC5pbmxpbmUgLnNlbGVjdC1kcm9wZG93biB7XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbn1cXG4uaW5wdXQtZmllbGQuY29sIGxhYmVsIHtcXG4gIGxlZnQ6IDAuNXJlbTtcXG59XFxuLmlucHV0LWZpZWxkLmNvbCAucHJlZml4IH4gbGFiZWwsXFxuLmlucHV0LWZpZWxkLmNvbCAucHJlZml4IH4gLnZhbGlkYXRlIH4gbGFiZWwge1xcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDNyZW0gLSAxcmVtKTtcXG59XFxuLmlucHV0LWZpZWxkID4gbGFiZWwge1xcbiAgY29sb3I6ICM5ZTllOWU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgY3Vyc29yOiB0ZXh0O1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZS1vdXQsIGNvbG9yIDAuMnMgZWFzZS1vdXQ7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiAwJSAxMDAlO1xcbiAgdGV4dC1hbGlnbjogaW5pdGlhbDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMnB4KTtcXG59XFxuLmlucHV0LWZpZWxkID4gbGFiZWw6bm90KC5sYWJlbC1pY29uKS5hY3RpdmUge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xNHB4KSBzY2FsZSgwLjgpO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xcbn1cXG4uaW5wdXQtZmllbGQgPiBpbnB1dFt0eXBlXTotd2Via2l0LWF1dG9maWxsOm5vdCguYnJvd3Nlci1kZWZhdWx0KTpub3QoW3R5cGU9c2VhcmNoXSkgKyBsYWJlbCwgLmlucHV0LWZpZWxkID4gaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCkgKyBsYWJlbCwgLmlucHV0LWZpZWxkID4gaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCkgKyBsYWJlbCB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTE0cHgpIHNjYWxlKDAuOCk7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XFxufVxcbi5pbnB1dC1maWVsZCAuaGVscGVyLXRleHQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgbWluLWhlaWdodDogMThweDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41NCk7XFxufVxcbi5pbnB1dC1maWVsZCAuaGVscGVyLXRleHQ6OmFmdGVyIHtcXG4gIG9wYWNpdHk6IDE7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbn1cXG4uaW5wdXQtZmllbGQgLnByZWZpeCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogNTZweDtcXG4gIGZvbnQtc2l6ZTogMnJlbTtcXG4gIHRyYW5zaXRpb246IGNvbG9yIDAuMnM7XFxufVxcbi5pbnB1dC1maWVsZCAucHJlZml4LmFjdGl2ZSB7XFxuICBjb2xvcjogIzI2YTY5YTtcXG59XFxuLmlucHV0LWZpZWxkIC5wcmVmaXggfiBpbnB1dCxcXG4uaW5wdXQtZmllbGQgLnByZWZpeCB+IHRleHRhcmVhLFxcbi5pbnB1dC1maWVsZCAucHJlZml4IH4gbGFiZWwsXFxuLmlucHV0LWZpZWxkIC5wcmVmaXggfiAudmFsaWRhdGUgfiBsYWJlbCxcXG4uaW5wdXQtZmllbGQgLnByZWZpeCB+IC5oZWxwZXItdGV4dCxcXG4uaW5wdXQtZmllbGQgLnByZWZpeCB+IC5hdXRvY29tcGxldGUtY29udGVudCB7XFxuICBtYXJnaW4tbGVmdDogM3JlbTtcXG4gIHdpZHRoOiA5MiU7XFxuICB3aWR0aDogY2FsYygxMDAlIC0gM3JlbSk7XFxufVxcbi5pbnB1dC1maWVsZCAucHJlZml4IH4gbGFiZWwge1xcbiAgbWFyZ2luLWxlZnQ6IDNyZW07XFxufVxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aCA6IDk5MnB4KSB7XFxuICAuaW5wdXQtZmllbGQgLnByZWZpeCB+IGlucHV0IHtcXG4gICAgd2lkdGg6IDg2JTtcXG4gICAgd2lkdGg6IGNhbGMoMTAwJSAtIDNyZW0pO1xcbiAgfVxcbn1cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGggOiA2MDBweCkge1xcbiAgLmlucHV0LWZpZWxkIC5wcmVmaXggfiBpbnB1dCB7XFxuICAgIHdpZHRoOiA4MCU7XFxuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAzcmVtKTtcXG4gIH1cXG59XFxuXFxuLyogU2VhcmNoIEZpZWxkICovXFxuLmlucHV0LWZpZWxkIGlucHV0W3R5cGU9c2VhcmNoXSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgdHJhbnNpdGlvbjogMC4zcyBiYWNrZ3JvdW5kLWNvbG9yO1xcbn1cXG4ubmF2LXdyYXBwZXIgLmlucHV0LWZpZWxkIGlucHV0W3R5cGU9c2VhcmNoXSB7XFxuICBoZWlnaHQ6IGluaGVyaXQ7XFxuICBwYWRkaW5nLWxlZnQ6IDRyZW07XFxuICB3aWR0aDogY2FsYygxMDAlIC0gNHJlbSk7XFxuICBib3JkZXI6IDA7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG4uaW5wdXQtZmllbGQgaW5wdXRbdHlwZT1zZWFyY2hdOmZvY3VzOm5vdCguYnJvd3Nlci1kZWZhdWx0KSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGNvbG9yOiAjNDQ0O1xcbn1cXG4uaW5wdXQtZmllbGQgaW5wdXRbdHlwZT1zZWFyY2hdOmZvY3VzOm5vdCguYnJvd3Nlci1kZWZhdWx0KSArIGxhYmVsIGksIC5pbnB1dC1maWVsZCBpbnB1dFt0eXBlPXNlYXJjaF06Zm9jdXM6bm90KC5icm93c2VyLWRlZmF1bHQpIH4gLm1kaS1uYXZpZ2F0aW9uLWNsb3NlLCAuaW5wdXQtZmllbGQgaW5wdXRbdHlwZT1zZWFyY2hdOmZvY3VzOm5vdCguYnJvd3Nlci1kZWZhdWx0KSB+IC5tYXRlcmlhbC1pY29ucyB7XFxuICBjb2xvcjogIzQ0NDtcXG59XFxuLmlucHV0LWZpZWxkIGlucHV0W3R5cGU9c2VhcmNoXSArIC5sYWJlbC1pY29uIHtcXG4gIHRyYW5zZm9ybTogbm9uZTtcXG4gIGxlZnQ6IDFyZW07XFxufVxcbi5pbnB1dC1maWVsZCBpbnB1dFt0eXBlPXNlYXJjaF0gfiAubWRpLW5hdmlnYXRpb24tY2xvc2UsIC5pbnB1dC1maWVsZCBpbnB1dFt0eXBlPXNlYXJjaF0gfiAubWF0ZXJpYWwtaWNvbnMge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDFyZW07XFxuICBjb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBmb250LXNpemU6IDJyZW07XFxuICB0cmFuc2l0aW9uOiAwLjNzIGNvbG9yO1xcbn1cXG5cXG4vKiBUZXh0YXJlYSAqL1xcbnRleHRhcmVhIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiA1NnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcbnRleHRhcmVhLnRleHRhcmVhIHtcXG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XFxuICBvdmVyZmxvdy15OiBoaWRkZW47IC8qIHByZXZlbnRzIHNjcm9sbCBiYXIgZmxhc2ggKi9cXG4gIHBhZGRpbmc6IDAuOHJlbSAwIDAuOHJlbSAwOyAvKiBwcmV2ZW50cyB0ZXh0IGp1bXAgb24gRW50ZXIga2V5cHJlc3MgKi9cXG4gIHJlc2l6ZTogbm9uZTtcXG4gIG1pbi1oZWlnaHQ6IDU2cHg7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG5cXG4uaGlkZGVuZGl2IHtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcXG4gIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7IC8qIGZ1dHVyZSB2ZXJzaW9uIG9mIGRlcHJlY2F0ZWQgJ3dvcmQtd3JhcCcgKi9cXG4gIHBhZGRpbmctdG9wOiAxLjJyZW07IC8qIHByZXZlbnRzIHRleHQganVtcCBvbiBFbnRlciBrZXlwcmVzcyAqL1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgei1pbmRleDogLTE7XFxufVxcblxcbi8qIEF1dG9jb21wbGV0ZSAqL1xcbi5hdXRvY29tcGxldGUtY29udGVudCBsaSAuaGlnaGxpZ2h0IHtcXG4gIGNvbG9yOiAjNDQ0O1xcbn1cXG4uYXV0b2NvbXBsZXRlLWNvbnRlbnQgbGkgaW1nIHtcXG4gIG1hcmdpbjogNXB4IDE1cHg7XFxufVxcblxcbi8qIENoYXJhY3RlciBDb3VudGVyICovXFxuLmNoYXJhY3Rlci1jb3VudGVyIHtcXG4gIG1pbi1oZWlnaHQ6IDE4cHg7XFxufVxcblxcbi8qIFJhZGlvIEJ1dHRvbnNcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcblt0eXBlPXJhZGlvXTpub3QoOmNoZWNrZWQpLFxcblt0eXBlPXJhZGlvXTpjaGVja2VkIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIG9wYWNpdHk6IDA7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuW3R5cGU9cmFkaW9dOm5vdCg6Y2hlY2tlZCkgKyBzcGFuLFxcblt0eXBlPXJhZGlvXTpjaGVja2VkICsgc3BhbiB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBwYWRkaW5nLWxlZnQ6IDM1cHg7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBoZWlnaHQ6IDI1cHg7XFxuICBsaW5lLWhlaWdodDogMjVweDtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIHRyYW5zaXRpb246IDAuMjhzIGVhc2U7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuW3R5cGU9cmFkaW9dICsgc3BhbjpiZWZvcmUsXFxuW3R5cGU9cmFkaW9dICsgc3BhbjphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDA7XFxuICB0b3A6IDA7XFxuICBtYXJnaW46IDRweDtcXG4gIHdpZHRoOiAxNnB4O1xcbiAgaGVpZ2h0OiAxNnB4O1xcbiAgei1pbmRleDogMDtcXG4gIHRyYW5zaXRpb246IDAuMjhzIGVhc2U7XFxufVxcblxcbi8qIFVuY2hlY2tlZCBzdHlsZXMgKi9cXG5bdHlwZT1yYWRpb106bm90KDpjaGVja2VkKSArIHNwYW46YmVmb3JlLFxcblt0eXBlPXJhZGlvXTpub3QoOmNoZWNrZWQpICsgc3BhbjphZnRlcixcXG5bdHlwZT1yYWRpb106Y2hlY2tlZCArIHNwYW46YmVmb3JlLFxcblt0eXBlPXJhZGlvXTpjaGVja2VkICsgc3BhbjphZnRlcixcXG5bdHlwZT1yYWRpb10ud2l0aC1nYXA6Y2hlY2tlZCArIHNwYW46YmVmb3JlLFxcblt0eXBlPXJhZGlvXS53aXRoLWdhcDpjaGVja2VkICsgc3BhbjphZnRlciB7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcblxcblt0eXBlPXJhZGlvXTpub3QoOmNoZWNrZWQpICsgc3BhbjpiZWZvcmUsXFxuW3R5cGU9cmFkaW9dOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOmFmdGVyIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkICM1YTVhNWE7XFxufVxcblxcblt0eXBlPXJhZGlvXTpub3QoOmNoZWNrZWQpICsgc3BhbjphZnRlciB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDApO1xcbn1cXG5cXG4vKiBDaGVja2VkIHN0eWxlcyAqL1xcblt0eXBlPXJhZGlvXTpjaGVja2VkICsgc3BhbjpiZWZvcmUge1xcbiAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcblt0eXBlPXJhZGlvXTpjaGVja2VkICsgc3BhbjphZnRlcixcXG5bdHlwZT1yYWRpb10ud2l0aC1nYXA6Y2hlY2tlZCArIHNwYW46YmVmb3JlLFxcblt0eXBlPXJhZGlvXS53aXRoLWdhcDpjaGVja2VkICsgc3BhbjphZnRlciB7XFxuICBib3JkZXI6IDJweCBzb2xpZCAjMjZhNjlhO1xcbn1cXG5cXG5bdHlwZT1yYWRpb106Y2hlY2tlZCArIHNwYW46YWZ0ZXIsXFxuW3R5cGU9cmFkaW9dLndpdGgtZ2FwOmNoZWNrZWQgKyBzcGFuOmFmdGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmE2OWE7XFxufVxcblxcblt0eXBlPXJhZGlvXTpjaGVja2VkICsgc3BhbjphZnRlciB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDEuMDIpO1xcbn1cXG5cXG4vKiBSYWRpbyBXaXRoIGdhcCAqL1xcblt0eXBlPXJhZGlvXS53aXRoLWdhcDpjaGVja2VkICsgc3BhbjphZnRlciB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDAuNSk7XFxufVxcblxcbi8qIEZvY3VzZWQgc3R5bGVzICovXFxuW3R5cGU9cmFkaW9dLnRhYmJlZDpmb2N1cyArIHNwYW46YmVmb3JlIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xcbn1cXG5cXG4vKiBEaXNhYmxlZCBSYWRpbyBXaXRoIGdhcCAqL1xcblt0eXBlPXJhZGlvXS53aXRoLWdhcDpkaXNhYmxlZDpjaGVja2VkICsgc3BhbjpiZWZvcmUge1xcbiAgYm9yZGVyOiAycHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG59XFxuXFxuW3R5cGU9cmFkaW9dLndpdGgtZ2FwOmRpc2FibGVkOmNoZWNrZWQgKyBzcGFuOmFmdGVyIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40Mik7XFxufVxcblxcbi8qIERpc2FibGVkIHN0eWxlICovXFxuW3R5cGU9cmFkaW9dOmRpc2FibGVkOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOmJlZm9yZSxcXG5bdHlwZT1yYWRpb106ZGlzYWJsZWQ6Y2hlY2tlZCArIHNwYW46YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbn1cXG5cXG5bdHlwZT1yYWRpb106ZGlzYWJsZWQgKyBzcGFuIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbn1cXG5cXG5bdHlwZT1yYWRpb106ZGlzYWJsZWQ6bm90KDpjaGVja2VkKSArIHNwYW46YmVmb3JlIHtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG59XFxuXFxuW3R5cGU9cmFkaW9dOmRpc2FibGVkOmNoZWNrZWQgKyBzcGFuOmFmdGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40Mik7XFxuICBib3JkZXItY29sb3I6ICM5NDk0OTQ7XFxufVxcblxcbi8qIENoZWNrYm94ZXNcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcbi8qIFJlbW92ZSBkZWZhdWx0IGNoZWNrYm94ICovXFxuW3R5cGU9Y2hlY2tib3hdOm5vdCg6Y2hlY2tlZCksXFxuW3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgb3BhY2l0eTogMDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5cXG5bdHlwZT1jaGVja2JveF0ge1xcbiAgLyogY2hlY2tib3ggYXNwZWN0ICovXFxufVxcblt0eXBlPWNoZWNrYm94XSArIHNwYW46bm90KC5sZXZlcikge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgcGFkZGluZy1sZWZ0OiAzNXB4O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgaGVpZ2h0OiAyNXB4O1xcbiAgbGluZS1oZWlnaHQ6IDI1cHg7XFxuICBmb250LXNpemU6IDFyZW07XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuW3R5cGU9Y2hlY2tib3hdICsgc3Bhbjpub3QoLmxldmVyKTpiZWZvcmUsIFt0eXBlPWNoZWNrYm94XTpub3QoLmZpbGxlZC1pbikgKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiAxOHB4O1xcbiAgaGVpZ2h0OiAxOHB4O1xcbiAgei1pbmRleDogMDtcXG4gIGJvcmRlcjogMnB4IHNvbGlkICM1YTVhNWE7XFxuICBib3JkZXItcmFkaXVzOiAxcHg7XFxuICBtYXJnaW4tdG9wOiAzcHg7XFxuICB0cmFuc2l0aW9uOiAwLjJzO1xcbn1cXG5bdHlwZT1jaGVja2JveF06bm90KC5maWxsZWQtaW4pICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxuICBib3JkZXI6IDA7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDApO1xcbn1cXG5bdHlwZT1jaGVja2JveF06bm90KDpjaGVja2VkKTpkaXNhYmxlZCArIHNwYW46bm90KC5sZXZlcik6YmVmb3JlIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40Mik7XFxufVxcblt0eXBlPWNoZWNrYm94XS50YWJiZWQ6Zm9jdXMgKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxuICBib3JkZXI6IDA7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKTtcXG59XFxuXFxuW3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyBzcGFuOm5vdCgubGV2ZXIpOmJlZm9yZSB7XFxuICB0b3A6IC00cHg7XFxuICBsZWZ0OiAtNXB4O1xcbiAgd2lkdGg6IDEycHg7XFxuICBoZWlnaHQ6IDIycHg7XFxuICBib3JkZXItdG9wOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItbGVmdDogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgIzI2YTY5YTtcXG4gIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjMjZhNjlhO1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoNDBkZWcpO1xcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogMTAwJSAxMDAlO1xcbn1cXG5bdHlwZT1jaGVja2JveF06Y2hlY2tlZDpkaXNhYmxlZCArIHNwYW46YmVmb3JlIHtcXG4gIGJvcmRlci1yaWdodDogMnB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC40Mik7XFxuICBib3JkZXItYm90dG9tOiAycHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG59XFxuXFxuLyogSW5kZXRlcm1pbmF0ZSBjaGVja2JveCAqL1xcblt0eXBlPWNoZWNrYm94XTppbmRldGVybWluYXRlICsgc3Bhbjpub3QoLmxldmVyKTpiZWZvcmUge1xcbiAgdG9wOiAtMTFweDtcXG4gIGxlZnQ6IC0xMnB4O1xcbiAgd2lkdGg6IDEwcHg7XFxuICBoZWlnaHQ6IDIycHg7XFxuICBib3JkZXItdG9wOiBub25lO1xcbiAgYm9yZGVyLWxlZnQ6IG5vbmU7XFxuICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjMjZhNjlhO1xcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcXG4gIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDEwMCUgMTAwJTtcXG59XFxuW3R5cGU9Y2hlY2tib3hdOmluZGV0ZXJtaW5hdGU6ZGlzYWJsZWQgKyBzcGFuOm5vdCgubGV2ZXIpOmJlZm9yZSB7XFxuICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcblt0eXBlPWNoZWNrYm94XS5maWxsZWQtaW4gKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG59XFxuW3R5cGU9Y2hlY2tib3hdLmZpbGxlZC1pbiArIHNwYW46bm90KC5sZXZlcik6YmVmb3JlLFxcblt0eXBlPWNoZWNrYm94XS5maWxsZWQtaW4gKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgbGVmdDogMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIC8qIC4xcyBkZWxheSBpcyBmb3IgY2hlY2sgYW5pbWF0aW9uICovXFxuICB0cmFuc2l0aW9uOiBib3JkZXIgMC4yNXMsIGJhY2tncm91bmQtY29sb3IgMC4yNXMsIHdpZHRoIDAuMnMgMC4xcywgaGVpZ2h0IDAuMnMgMC4xcywgdG9wIDAuMnMgMC4xcywgbGVmdCAwLjJzIDAuMXM7XFxuICB6LWluZGV4OiAxO1xcbn1cXG5bdHlwZT1jaGVja2JveF0uZmlsbGVkLWluOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOm5vdCgubGV2ZXIpOmJlZm9yZSB7XFxuICB3aWR0aDogMDtcXG4gIGhlaWdodDogMDtcXG4gIGJvcmRlcjogM3B4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgbGVmdDogNnB4O1xcbiAgdG9wOiAxMHB4O1xcbiAgdHJhbnNmb3JtOiByb3RhdGVaKDM3ZGVnKTtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDEwMCUgMTAwJTtcXG59XFxuW3R5cGU9Y2hlY2tib3hdLmZpbGxlZC1pbjpub3QoOmNoZWNrZWQpICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxuICBoZWlnaHQ6IDIwcHg7XFxuICB3aWR0aDogMjBweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiAycHggc29saWQgIzVhNWE1YTtcXG4gIHRvcDogMHB4O1xcbiAgei1pbmRleDogMDtcXG59XFxuW3R5cGU9Y2hlY2tib3hdLmZpbGxlZC1pbjpjaGVja2VkICsgc3Bhbjpub3QoLmxldmVyKTpiZWZvcmUge1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMXB4O1xcbiAgd2lkdGg6IDhweDtcXG4gIGhlaWdodDogMTNweDtcXG4gIGJvcmRlci10b3A6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1sZWZ0OiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjZmZmO1xcbiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNmZmY7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZVooMzdkZWcpO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogMTAwJSAxMDAlO1xcbn1cXG5bdHlwZT1jaGVja2JveF0uZmlsbGVkLWluOmNoZWNrZWQgKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXG4gIHRvcDogMDtcXG4gIHdpZHRoOiAyMHB4O1xcbiAgaGVpZ2h0OiAyMHB4O1xcbiAgYm9yZGVyOiAycHggc29saWQgIzI2YTY5YTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNmE2OWE7XFxuICB6LWluZGV4OiAwO1xcbn1cXG5bdHlwZT1jaGVja2JveF0uZmlsbGVkLWluLnRhYmJlZDpmb2N1cyArIHNwYW46bm90KC5sZXZlcik6YWZ0ZXIge1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgYm9yZGVyLWNvbG9yOiAjNWE1YTVhO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpO1xcbn1cXG5bdHlwZT1jaGVja2JveF0uZmlsbGVkLWluLnRhYmJlZDpjaGVja2VkOmZvY3VzICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbiAgYm9yZGVyLWNvbG9yOiAjMjZhNjlhO1xcbn1cXG5bdHlwZT1jaGVja2JveF0uZmlsbGVkLWluOmRpc2FibGVkOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOm5vdCgubGV2ZXIpOmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5bdHlwZT1jaGVja2JveF0uZmlsbGVkLWluOmRpc2FibGVkOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTQ5NDk0O1xcbn1cXG5bdHlwZT1jaGVja2JveF0uZmlsbGVkLWluOmRpc2FibGVkOmNoZWNrZWQgKyBzcGFuOm5vdCgubGV2ZXIpOmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuW3R5cGU9Y2hlY2tib3hdLmZpbGxlZC1pbjpkaXNhYmxlZDpjaGVja2VkICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTQ5NDk0O1xcbiAgYm9yZGVyLWNvbG9yOiAjOTQ5NDk0O1xcbn1cXG5cXG4vKiBTd2l0Y2hcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcbi5zd2l0Y2gsXFxuLnN3aXRjaCAqIHtcXG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLnN3aXRjaCBsYWJlbCB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5zd2l0Y2ggbGFiZWwgaW5wdXRbdHlwZT1jaGVja2JveF0ge1xcbiAgb3BhY2l0eTogMDtcXG4gIHdpZHRoOiAwO1xcbiAgaGVpZ2h0OiAwO1xcbn1cXG4uc3dpdGNoIGxhYmVsIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyAubGV2ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzg0YzdjMTtcXG59XFxuLnN3aXRjaCBsYWJlbCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmxldmVyOmJlZm9yZSwgLnN3aXRjaCBsYWJlbCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmxldmVyOmFmdGVyIHtcXG4gIGxlZnQ6IDE4cHg7XFxufVxcbi5zd2l0Y2ggbGFiZWwgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIC5sZXZlcjphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbn1cXG5cXG4uc3dpdGNoIGxhYmVsIC5sZXZlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiAzNnB4O1xcbiAgaGVpZ2h0OiAxNHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjM4KTtcXG4gIGJvcmRlci1yYWRpdXM6IDE1cHg7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuM3MgZWFzZTtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICBtYXJnaW46IDAgMTZweDtcXG59XFxuLnN3aXRjaCBsYWJlbCAubGV2ZXI6YmVmb3JlLCAuc3dpdGNoIGxhYmVsIC5sZXZlcjphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiAyMHB4O1xcbiAgaGVpZ2h0OiAyMHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgbGVmdDogMDtcXG4gIHRvcDogLTNweDtcXG4gIHRyYW5zaXRpb246IGxlZnQgMC4zcyBlYXNlLCBiYWNrZ3JvdW5kIDAuM3MgZWFzZSwgYm94LXNoYWRvdyAwLjFzIGVhc2UsIHRyYW5zZm9ybSAwLjFzIGVhc2U7XFxufVxcbi5zd2l0Y2ggbGFiZWwgLmxldmVyOmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDM4LCAxNjYsIDE1NCwgMC4xNSk7XFxufVxcbi5zd2l0Y2ggbGFiZWwgLmxldmVyOmFmdGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNGMUYxRjE7XFxuICBib3gtc2hhZG93OiAwcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xcbn1cXG5cXG5pbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOm5vdCg6ZGlzYWJsZWQpIH4gLmxldmVyOmFjdGl2ZTo6YmVmb3JlLFxcbmlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6bm90KDpkaXNhYmxlZCkudGFiYmVkOmZvY3VzIH4gLmxldmVyOjpiZWZvcmUge1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgyLjQpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgzOCwgMTY2LCAxNTQsIDAuMTUpO1xcbn1cXG5cXG5pbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKSB+IC5sZXZlcjphY3RpdmU6YmVmb3JlLFxcbmlucHV0W3R5cGU9Y2hlY2tib3hdOm5vdCg6ZGlzYWJsZWQpLnRhYmJlZDpmb2N1cyB+IC5sZXZlcjo6YmVmb3JlIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMi40KTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wOCk7XFxufVxcblxcbi5zd2l0Y2ggaW5wdXRbdHlwZT1jaGVja2JveF1bZGlzYWJsZWRdICsgLmxldmVyIHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xMik7XFxufVxcblxcbi5zd2l0Y2ggbGFiZWwgaW5wdXRbdHlwZT1jaGVja2JveF1bZGlzYWJsZWRdICsgLmxldmVyOmFmdGVyLFxcbi5zd2l0Y2ggbGFiZWwgaW5wdXRbdHlwZT1jaGVja2JveF1bZGlzYWJsZWRdOmNoZWNrZWQgKyAubGV2ZXI6YWZ0ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzk0OTQ5NDtcXG59XFxuXFxuLyogU2VsZWN0IEZpZWxkXFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cXG5zZWxlY3Qge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuc2VsZWN0LmJyb3dzZXItZGVmYXVsdCB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuc2VsZWN0IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcGFkZGluZzogNXB4O1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2YyZjJmMjtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIGhlaWdodDogNTZweDtcXG59XFxuXFxuLnNlbGVjdC1sYWJlbCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcblxcbi5zZWxlY3Qtd3JhcHBlciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5zZWxlY3Qtd3JhcHBlci52YWxpZCArIGxhYmVsLCAuc2VsZWN0LXdyYXBwZXIuaW52YWxpZCArIGxhYmVsIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi5zZWxlY3Qtd3JhcHBlciBpbnB1dC5zZWxlY3QtZHJvcGRvd24ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IG5vbmU7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzllOWU5ZTtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBoZWlnaHQ6IDU2cHg7XFxuICBsaW5lLWhlaWdodDogNTZweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgbWFyZ2luOiAwIDAgOHB4IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIHotaW5kZXg6IDE7XFxufVxcbi5zZWxlY3Qtd3JhcHBlciBpbnB1dC5zZWxlY3QtZHJvcGRvd246Zm9jdXMge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMyNmE2OWE7XFxufVxcbi5zZWxlY3Qtd3JhcHBlciAuY2FyZXQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDA7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICBtYXJnaW46IGF1dG8gMDtcXG4gIHotaW5kZXg6IDA7XFxuICBmaWxsOiByZ2JhKDAsIDAsIDAsIDAuODcpO1xcbn1cXG4uc2VsZWN0LXdyYXBwZXIgKyBsYWJlbCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IC0yNnB4O1xcbiAgZm9udC1zaXplOiAwLjhyZW07XFxufVxcblxcbnNlbGVjdDpkaXNhYmxlZCB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG59XFxuXFxuLnNlbGVjdC13cmFwcGVyLmRpc2FibGVkICsgbGFiZWwge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40Mik7XFxufVxcbi5zZWxlY3Qtd3JhcHBlci5kaXNhYmxlZCAuY2FyZXQge1xcbiAgZmlsbDogcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG59XFxuXFxuLnNlbGVjdC13cmFwcGVyIGlucHV0LnNlbGVjdC1kcm9wZG93bjpkaXNhYmxlZCB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQyKTtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4uc2VsZWN0LXdyYXBwZXIgaSB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjMpO1xcbn1cXG5cXG4uc2VsZWN0LWRyb3Bkb3duIGxpLmRpc2FibGVkLFxcbi5zZWxlY3QtZHJvcGRvd24gbGkuZGlzYWJsZWQgPiBzcGFuLFxcbi5zZWxlY3QtZHJvcGRvd24gbGkub3B0Z3JvdXAge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG5ib2R5LmtleWJvYXJkLWZvY3VzZWQgLnNlbGVjdC1kcm9wZG93bi5kcm9wZG93bi1jb250ZW50IGxpOmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wOCk7XFxufVxcblxcbi5zZWxlY3QtZHJvcGRvd24uZHJvcGRvd24tY29udGVudCBsaTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDgpO1xcbn1cXG4uc2VsZWN0LWRyb3Bkb3duLmRyb3Bkb3duLWNvbnRlbnQgbGkuc2VsZWN0ZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjAzKTtcXG59XFxuXFxuLnByZWZpeCB+IC5zZWxlY3Qtd3JhcHBlciB7XFxuICBtYXJnaW4tbGVmdDogM3JlbTtcXG4gIHdpZHRoOiA5MiU7XFxuICB3aWR0aDogY2FsYygxMDAlIC0gM3JlbSk7XFxufVxcblxcbi5wcmVmaXggfiBsYWJlbCB7XFxuICBtYXJnaW4tbGVmdDogM3JlbTtcXG59XFxuXFxuLnNlbGVjdC1kcm9wZG93biBsaSBpbWcge1xcbiAgbWFyZ2luOiA1cHggMTVweDtcXG4gIGZsb2F0OiByaWdodDtcXG59XFxuXFxuLnNlbGVjdC1kcm9wZG93biBsaS5vcHRncm91cC5zZWxlY3RlZCA+IHNwYW4ge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC43KTtcXG59XFxuLnNlbGVjdC1kcm9wZG93biBsaS5vcHRncm91cCA+IHNwYW4ge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40KTtcXG59XFxuLnNlbGVjdC1kcm9wZG93biBsaS5vcHRncm91cCB+IGxpLm9wdGdyb3VwLW9wdGlvbiB7XFxuICBwYWRkaW5nLWxlZnQ6IDFyZW07XFxufVxcblxcbi8qIEZpbGUgSW5wdXRcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcbi5maWxlLWZpZWxkIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLmZpbGUtZmllbGQgLmZpbGUtcGF0aC13cmFwcGVyIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwYWRkaW5nLWxlZnQ6IDEwcHg7XFxufVxcbi5maWxlLWZpZWxkIGlucHV0LmZpbGUtcGF0aCB7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLmZpbGUtZmllbGQgLmJ0biwgLmZpbGUtZmllbGQgLmJ0bi1zbWFsbCwgLmZpbGUtZmllbGQgLmJ0bi1sYXJnZSB7XFxuICBmbG9hdDogbGVmdDtcXG4gIGhlaWdodDogNTZweDtcXG4gIGxpbmUtaGVpZ2h0OiA1NnB4O1xcbn1cXG4uZmlsZS1maWVsZCBzcGFuIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLmZpbGUtZmllbGQgaW5wdXRbdHlwZT1maWxlXSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGxlZnQ6IDA7XFxuICBib3R0b206IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBmb250LXNpemU6IDIwcHg7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBvcGFjaXR5OiAwO1xcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTApO1xcbn1cXG4uZmlsZS1maWVsZCBpbnB1dFt0eXBlPWZpbGVdOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4vKiBSYW5nZVxcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXFxuLnJhbmdlLWZpZWxkIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV0sXFxuaW5wdXRbdHlwZT1yYW5nZV0gKyAudGh1bWIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbjogMTVweCAwO1xcbiAgcGFkZGluZzogMDtcXG59XFxuaW5wdXRbdHlwZT1yYW5nZV06Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV0gKyAudGh1bWIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxMHB4O1xcbiAgbGVmdDogMDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGhlaWdodDogMDtcXG4gIHdpZHRoOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YTY5YTtcXG4gIG1hcmdpbi1sZWZ0OiA3cHg7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgNTAlO1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTtcXG59XFxuaW5wdXRbdHlwZT1yYW5nZV0gKyAudGh1bWIgLnZhbHVlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDMwcHg7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBjb2xvcjogIzI2YTY5YTtcXG4gIGZvbnQtc2l6ZTogMDtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXG59XFxuaW5wdXRbdHlwZT1yYW5nZV0gKyAudGh1bWIuYWN0aXZlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJSA1MCUgNTAlIDA7XFxufVxcbmlucHV0W3R5cGU9cmFuZ2VdICsgLnRodW1iLmFjdGl2ZSAudmFsdWUge1xcbiAgY29sb3I6ICNmZmY7XFxuICBtYXJnaW4tbGVmdDogLTFweDtcXG4gIG1hcmdpbi10b3A6IDhweDtcXG4gIGZvbnQtc2l6ZTogMTBweDtcXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV0ge1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2sge1xcbiAgaGVpZ2h0OiAzcHg7XFxuICBiYWNrZ3JvdW5kOiAjYzJjMGMyO1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXTo6LXdlYmtpdC1zbGlkZXItdGh1bWIge1xcbiAgYm9yZGVyOiBub25lO1xcbiAgaGVpZ2h0OiAxNHB4O1xcbiAgd2lkdGg6IDE0cHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBiYWNrZ3JvdW5kOiAjMjZhNjlhO1xcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjNzO1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2YTY5YTtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDUwJSA1MCU7XFxuICBtYXJnaW46IC01cHggMCAwIDA7XFxufVxcblxcbi5rZXlib2FyZC1mb2N1c2VkIGlucHV0W3R5cGU9cmFuZ2VdOmZvY3VzOm5vdCguYWN0aXZlKTo6LXdlYmtpdC1zbGlkZXItdGh1bWIge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMTBweCByZ2JhKDM4LCAxNjYsIDE1NCwgMC4yNik7XFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdIHtcXG4gIC8qIGZpeCBmb3IgRkYgdW5hYmxlIHRvIGFwcGx5IGZvY3VzIHN0eWxlIGJ1ZyAgKi9cXG4gIGJvcmRlcjogMXB4IHNvbGlkIHdoaXRlO1xcbiAgLypyZXF1aXJlZCBmb3IgcHJvcGVyIHRyYWNrIHNpemluZyBpbiBGRiovXFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdOjotbW96LXJhbmdlLXRyYWNrIHtcXG4gIGhlaWdodDogM3B4O1xcbiAgYmFja2dyb3VuZDogI2MyYzBjMjtcXG4gIGJvcmRlcjogbm9uZTtcXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV06Oi1tb3otZm9jdXMtaW5uZXIge1xcbiAgYm9yZGVyOiAwO1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXTo6LW1vei1yYW5nZS10aHVtYiB7XFxuICBib3JkZXI6IG5vbmU7XFxuICBoZWlnaHQ6IDE0cHg7XFxuICB3aWR0aDogMTRweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJhY2tncm91bmQ6ICMyNmE2OWE7XFxuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuM3M7XFxuICBtYXJnaW4tdG9wOiAtNXB4O1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXTotbW96LWZvY3VzcmluZyB7XFxuICBvdXRsaW5lOiAxcHggc29saWQgI2ZmZjtcXG4gIG91dGxpbmUtb2Zmc2V0OiAtMXB4O1xcbn1cXG5cXG4ua2V5Ym9hcmQtZm9jdXNlZCBpbnB1dFt0eXBlPXJhbmdlXTpmb2N1czpub3QoLmFjdGl2ZSk6Oi1tb3otcmFuZ2UtdGh1bWIge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMTBweCByZ2JhKDM4LCAxNjYsIDE1NCwgMC4yNik7XFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdHJhY2sge1xcbiAgaGVpZ2h0OiAzcHg7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItd2lkdGg6IDZweCAwO1xcbiAgLypyZW1vdmUgZGVmYXVsdCB0aWNrIG1hcmtzKi9cXG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy1maWxsLWxvd2VyIHtcXG4gIGJhY2tncm91bmQ6ICM3Nzc7XFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmlsbC11cHBlciB7XFxuICBiYWNrZ3JvdW5kOiAjZGRkO1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1iIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGhlaWdodDogMTRweDtcXG4gIHdpZHRoOiAxNHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYmFja2dyb3VuZDogIzI2YTY5YTtcXG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4zcztcXG59XFxuXFxuLmtleWJvYXJkLWZvY3VzZWQgaW5wdXRbdHlwZT1yYW5nZV06Zm9jdXM6bm90KC5hY3RpdmUpOjotbXMtdGh1bWIge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMTBweCByZ2JhKDM4LCAxNjYsIDE1NCwgMC4yNik7XFxufVxcblxcbi5wYXJhbGxheCB7XFxuICAvKiBTZXQgYSBzcGVjaWZpYyBoZWlnaHQgKi9cXG4gIG1pbi1oZWlnaHQ6IDUwMHB4O1xcbiAgLyogQ3JlYXRlIHRoZSBwYXJhbGxheCBzY3JvbGxpbmcgZWZmZWN0ICovXFxuICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkO1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XFxufVxcblxcbioge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuYm9keSB7XFxuICBmb250LWZhbWlseTogc2Fucy1zZXJpZjtcXG59XFxuXFxuLnNjZW5lIHtcXG4gIHdpZHRoOiAyMDBweDtcXG4gIGhlaWdodDogMjAwcHg7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjQ0NDO1xcbiAgbWFyZ2luOiA4MHB4O1xcbiAgcGVyc3BlY3RpdmU6IDQwMHB4O1xcbn1cXG5cXG4uY3ViZSB7XFxuICB3aWR0aDogMjAwcHg7XFxuICBoZWlnaHQ6IDIwMHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdHJhbnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWigtNDAwcHgpO1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDFzO1xcbn1cXG5cXG4uY3ViZS5zaG93LWZyb250IHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWigtMTBweCkgcm90YXRlWSgwZGVnKTtcXG59XFxuXFxuLmN1YmUuc2hvdy1yaWdodCB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooLTEwcHgpIHJvdGF0ZVkoLTkwZGVnKTtcXG59XFxuXFxuLmN1YmUuc2hvdy1iYWNrIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWigtMTBweCkgcm90YXRlWSgtMTgwZGVnKTtcXG59XFxuXFxuLmN1YmUuc2hvdy1sZWZ0IHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWigtMTBweCkgcm90YXRlWSg5MGRlZyk7XFxufVxcblxcbi5jdWJlLnNob3ctdG9wIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWigtMTBweCkgcm90YXRlWCgtOTBkZWcpO1xcbn1cXG5cXG4uY3ViZS5zaG93LWJvdHRvbSB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooLTEwcHgpIHJvdGF0ZVgoOTBkZWcpO1xcbn1cXG5cXG4uY3ViZV9fZmFjZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMjAwcHg7XFxuICBoZWlnaHQ6IDIwMHB4O1xcbiAgYm9yZGVyOiAycHggc29saWQgYmxhY2s7XFxuICBsaW5lLWhlaWdodDogMjAwcHg7XFxuICBmb250LXNpemU6IDQwcHg7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG4gIGNvbG9yOiB3aGl0ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLmN1YmVfX2ZhY2UtLWZyb250IHtcXG4gIGJhY2tncm91bmQ6IGhzbGEoMGRlZywgMTAwJSwgNTAlLCAwLjcpO1xcbn1cXG5cXG4uY3ViZV9fZmFjZS0tcmlnaHQge1xcbiAgYmFja2dyb3VuZDogaHNsYSg2MGRlZywgMTAwJSwgNTAlLCAwLjcpO1xcbn1cXG5cXG4uY3ViZV9fZmFjZS0tYmFjayB7XFxuICBiYWNrZ3JvdW5kOiBoc2xhKDEyMGRlZywgMTAwJSwgNTAlLCAwLjcpO1xcbn1cXG5cXG4uY3ViZV9fZmFjZS0tbGVmdCB7XFxuICBiYWNrZ3JvdW5kOiBoc2xhKDE4MGRlZywgMTAwJSwgNTAlLCAwLjcpO1xcbn1cXG5cXG4uY3ViZV9fZmFjZS0tdG9wIHtcXG4gIGJhY2tncm91bmQ6IGhzbGEoMjQwZGVnLCAxMDAlLCA1MCUsIDAuNyk7XFxufVxcblxcbi5jdWJlX19mYWNlLS1ib3R0b20ge1xcbiAgYmFja2dyb3VuZDogaHNsYSgzMDBkZWcsIDEwMCUsIDUwJSwgMC43KTtcXG59XFxuXFxuLmN1YmVfX2ZhY2UtLWZyb250IHtcXG4gIHRyYW5zZm9ybTogcm90YXRlWSgwZGVnKSB0cmFuc2xhdGVaKDEwMHB4KTtcXG59XFxuXFxuLmN1YmVfX2ZhY2UtLXJpZ2h0IHtcXG4gIHRyYW5zZm9ybTogcm90YXRlWSg5MGRlZykgdHJhbnNsYXRlWigxMDBweCk7XFxufVxcblxcbi5jdWJlX19mYWNlLS1iYWNrIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlWSgxODBkZWcpIHRyYW5zbGF0ZVooMTAwcHgpO1xcbn1cXG5cXG4uY3ViZV9fZmFjZS0tbGVmdCB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZVkoLTkwZGVnKSB0cmFuc2xhdGVaKDEwMHB4KTtcXG59XFxuXFxuLmN1YmVfX2ZhY2UtLXRvcCB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZVgoOTBkZWcpIHRyYW5zbGF0ZVooMTAwcHgpO1xcbn1cXG5cXG4uY3ViZV9fZmFjZS0tYm90dG9tIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlWCgtOTBkZWcpIHRyYW5zbGF0ZVooMTAwcHgpO1xcbn1cXG5cXG5sYWJlbCB7XFxuICBtYXJnaW4tcmlnaHQ6IDEwcHg7XFxufVxcblxcbi5jb250YWluZXIge1xcbiAgbWFyZ2luOiAwIGF1dG87XFxuICBtYXgtd2lkdGg6IDEyODBweDtcXG4gIHdpZHRoOiA5MCU7XFxufVxcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6IDYwMXB4KSB7XFxuICAuY29udGFpbmVyIHtcXG4gICAgd2lkdGg6IDg1JTtcXG4gIH1cXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoIDogOTkzcHgpIHtcXG4gIC5jb250YWluZXIge1xcbiAgICB3aWR0aDogNzAlO1xcbiAgfVxcbn1cXG4uY29sIC5yb3cge1xcbiAgbWFyZ2luLWxlZnQ6IC0wLjVyZW07XFxuICBtYXJnaW4tcmlnaHQ6IC0wLjVyZW07XFxufVxcblxcbi5zZWN0aW9uIHtcXG4gIHBhZGRpbmctdG9wOiAxcmVtO1xcbiAgcGFkZGluZy1ib3R0b206IDFyZW07XFxufVxcbi5zZWN0aW9uLm5vLXBhZCB7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG4uc2VjdGlvbi5uby1wYWQtYm90IHtcXG4gIHBhZGRpbmctYm90dG9tOiAwO1xcbn1cXG4uc2VjdGlvbi5uby1wYWQtdG9wIHtcXG4gIHBhZGRpbmctdG9wOiAwO1xcbn1cXG5cXG4ucm93IHtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcXG59XFxuLnJvdzphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGRpc3BsYXk6IHRhYmxlO1xcbiAgY2xlYXI6IGJvdGg7XFxufVxcbi5yb3cgLmNvbCB7XFxuICBmbG9hdDogbGVmdDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBwYWRkaW5nOiAwIDAuNXJlbTtcXG4gIG1pbi1oZWlnaHQ6IDFweDtcXG59XFxuLnJvdyAuY29sW2NsYXNzKj1wdXNoLV0sIC5yb3cgLmNvbFtjbGFzcyo9cHVsbC1dIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnJvdyAuY29sLnMxIHtcXG4gIHdpZHRoOiA4LjMzMzMzMzMzMzMlO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBsZWZ0OiBhdXRvO1xcbiAgcmlnaHQ6IGF1dG87XFxufVxcbi5yb3cgLmNvbC5zMiB7XFxuICB3aWR0aDogMTYuNjY2NjY2NjY2NyU7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogYXV0bztcXG59XFxuLnJvdyAuY29sLnMzIHtcXG4gIHdpZHRoOiAyNSU7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogYXV0bztcXG59XFxuLnJvdyAuY29sLnM0IHtcXG4gIHdpZHRoOiAzMy4zMzMzMzMzMzMzJTtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbGVmdDogYXV0bztcXG4gIHJpZ2h0OiBhdXRvO1xcbn1cXG4ucm93IC5jb2wuczUge1xcbiAgd2lkdGg6IDQxLjY2NjY2NjY2NjclO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBsZWZ0OiBhdXRvO1xcbiAgcmlnaHQ6IGF1dG87XFxufVxcbi5yb3cgLmNvbC5zNiB7XFxuICB3aWR0aDogNTAlO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBsZWZ0OiBhdXRvO1xcbiAgcmlnaHQ6IGF1dG87XFxufVxcbi5yb3cgLmNvbC5zNyB7XFxuICB3aWR0aDogNTguMzMzMzMzMzMzMyU7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogYXV0bztcXG59XFxuLnJvdyAuY29sLnM4IHtcXG4gIHdpZHRoOiA2Ni42NjY2NjY2NjY3JTtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbGVmdDogYXV0bztcXG4gIHJpZ2h0OiBhdXRvO1xcbn1cXG4ucm93IC5jb2wuczkge1xcbiAgd2lkdGg6IDc1JTtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbGVmdDogYXV0bztcXG4gIHJpZ2h0OiBhdXRvO1xcbn1cXG4ucm93IC5jb2wuczEwIHtcXG4gIHdpZHRoOiA4My4zMzMzMzMzMzMzJTtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbGVmdDogYXV0bztcXG4gIHJpZ2h0OiBhdXRvO1xcbn1cXG4ucm93IC5jb2wuczExIHtcXG4gIHdpZHRoOiA5MS42NjY2NjY2NjY3JTtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbGVmdDogYXV0bztcXG4gIHJpZ2h0OiBhdXRvO1xcbn1cXG4ucm93IC5jb2wuczEyIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBsZWZ0OiBhdXRvO1xcbiAgcmlnaHQ6IGF1dG87XFxufVxcbi5yb3cgLmNvbC5vZmZzZXQtczEge1xcbiAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMzMyU7XFxufVxcbi5yb3cgLmNvbC5wdWxsLXMxIHtcXG4gIHJpZ2h0OiA4LjMzMzMzMzMzMzMlO1xcbn1cXG4ucm93IC5jb2wucHVzaC1zMSB7XFxuICBsZWZ0OiA4LjMzMzMzMzMzMzMlO1xcbn1cXG4ucm93IC5jb2wub2Zmc2V0LXMyIHtcXG4gIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjY2NjY3JTtcXG59XFxuLnJvdyAuY29sLnB1bGwtczIge1xcbiAgcmlnaHQ6IDE2LjY2NjY2NjY2NjclO1xcbn1cXG4ucm93IC5jb2wucHVzaC1zMiB7XFxuICBsZWZ0OiAxNi42NjY2NjY2NjY3JTtcXG59XFxuLnJvdyAuY29sLm9mZnNldC1zMyB7XFxuICBtYXJnaW4tbGVmdDogMjUlO1xcbn1cXG4ucm93IC5jb2wucHVsbC1zMyB7XFxuICByaWdodDogMjUlO1xcbn1cXG4ucm93IC5jb2wucHVzaC1zMyB7XFxuICBsZWZ0OiAyNSU7XFxufVxcbi5yb3cgLmNvbC5vZmZzZXQtczQge1xcbiAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMzMzMzMlO1xcbn1cXG4ucm93IC5jb2wucHVsbC1zNCB7XFxuICByaWdodDogMzMuMzMzMzMzMzMzMyU7XFxufVxcbi5yb3cgLmNvbC5wdXNoLXM0IHtcXG4gIGxlZnQ6IDMzLjMzMzMzMzMzMzMlO1xcbn1cXG4ucm93IC5jb2wub2Zmc2V0LXM1IHtcXG4gIG1hcmdpbi1sZWZ0OiA0MS42NjY2NjY2NjY3JTtcXG59XFxuLnJvdyAuY29sLnB1bGwtczUge1xcbiAgcmlnaHQ6IDQxLjY2NjY2NjY2NjclO1xcbn1cXG4ucm93IC5jb2wucHVzaC1zNSB7XFxuICBsZWZ0OiA0MS42NjY2NjY2NjY3JTtcXG59XFxuLnJvdyAuY29sLm9mZnNldC1zNiB7XFxuICBtYXJnaW4tbGVmdDogNTAlO1xcbn1cXG4ucm93IC5jb2wucHVsbC1zNiB7XFxuICByaWdodDogNTAlO1xcbn1cXG4ucm93IC5jb2wucHVzaC1zNiB7XFxuICBsZWZ0OiA1MCU7XFxufVxcbi5yb3cgLmNvbC5vZmZzZXQtczcge1xcbiAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMzMzMzMlO1xcbn1cXG4ucm93IC5jb2wucHVsbC1zNyB7XFxuICByaWdodDogNTguMzMzMzMzMzMzMyU7XFxufVxcbi5yb3cgLmNvbC5wdXNoLXM3IHtcXG4gIGxlZnQ6IDU4LjMzMzMzMzMzMzMlO1xcbn1cXG4ucm93IC5jb2wub2Zmc2V0LXM4IHtcXG4gIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjY2NjY3JTtcXG59XFxuLnJvdyAuY29sLnB1bGwtczgge1xcbiAgcmlnaHQ6IDY2LjY2NjY2NjY2NjclO1xcbn1cXG4ucm93IC5jb2wucHVzaC1zOCB7XFxuICBsZWZ0OiA2Ni42NjY2NjY2NjY3JTtcXG59XFxuLnJvdyAuY29sLm9mZnNldC1zOSB7XFxuICBtYXJnaW4tbGVmdDogNzUlO1xcbn1cXG4ucm93IC5jb2wucHVsbC1zOSB7XFxuICByaWdodDogNzUlO1xcbn1cXG4ucm93IC5jb2wucHVzaC1zOSB7XFxuICBsZWZ0OiA3NSU7XFxufVxcbi5yb3cgLmNvbC5vZmZzZXQtczEwIHtcXG4gIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMzMzMzJTtcXG59XFxuLnJvdyAuY29sLnB1bGwtczEwIHtcXG4gIHJpZ2h0OiA4My4zMzMzMzMzMzMzJTtcXG59XFxuLnJvdyAuY29sLnB1c2gtczEwIHtcXG4gIGxlZnQ6IDgzLjMzMzMzMzMzMzMlO1xcbn1cXG4ucm93IC5jb2wub2Zmc2V0LXMxMSB7XFxuICBtYXJnaW4tbGVmdDogOTEuNjY2NjY2NjY2NyU7XFxufVxcbi5yb3cgLmNvbC5wdWxsLXMxMSB7XFxuICByaWdodDogOTEuNjY2NjY2NjY2NyU7XFxufVxcbi5yb3cgLmNvbC5wdXNoLXMxMSB7XFxuICBsZWZ0OiA5MS42NjY2NjY2NjY3JTtcXG59XFxuLnJvdyAuY29sLm9mZnNldC1zMTIge1xcbiAgbWFyZ2luLWxlZnQ6IDEwMCU7XFxufVxcbi5yb3cgLmNvbC5wdWxsLXMxMiB7XFxuICByaWdodDogMTAwJTtcXG59XFxuLnJvdyAuY29sLnB1c2gtczEyIHtcXG4gIGxlZnQ6IDEwMCU7XFxufVxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6IDYwMXB4KSB7XFxuICAucm93IC5jb2wubTEge1xcbiAgICB3aWR0aDogOC4zMzMzMzMzMzMzJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLm0yIHtcXG4gICAgd2lkdGg6IDE2LjY2NjY2NjY2NjclO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubTMge1xcbiAgICB3aWR0aDogMjUlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubTQge1xcbiAgICB3aWR0aDogMzMuMzMzMzMzMzMzMyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5tNSB7XFxuICAgIHdpZHRoOiA0MS42NjY2NjY2NjY3JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLm02IHtcXG4gICAgd2lkdGg6IDUwJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLm03IHtcXG4gICAgd2lkdGg6IDU4LjMzMzMzMzMzMzMlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubTgge1xcbiAgICB3aWR0aDogNjYuNjY2NjY2NjY2NyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5tOSB7XFxuICAgIHdpZHRoOiA3NSU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5tMTAge1xcbiAgICB3aWR0aDogODMuMzMzMzMzMzMzMyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5tMTEge1xcbiAgICB3aWR0aDogOTEuNjY2NjY2NjY2NyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5tMTIge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1tMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbTEge1xcbiAgICByaWdodDogOC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLW0xIHtcXG4gICAgbGVmdDogOC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1tMiB7XFxuICAgIHJpZ2h0OiAxNi42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLW0yIHtcXG4gICAgbGVmdDogMTYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LW0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLW0zIHtcXG4gICAgcmlnaHQ6IDI1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLW0zIHtcXG4gICAgbGVmdDogMjUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1tNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLW00IHtcXG4gICAgcmlnaHQ6IDMzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbTQge1xcbiAgICBsZWZ0OiAzMy4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbTUge1xcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1tNSB7XFxuICAgIHJpZ2h0OiA0MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLW01IHtcXG4gICAgbGVmdDogNDEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LW02IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDUwJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLW02IHtcXG4gICAgcmlnaHQ6IDUwJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLW02IHtcXG4gICAgbGVmdDogNTAlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1tNyB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLW03IHtcXG4gICAgcmlnaHQ6IDU4LjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbTcge1xcbiAgICBsZWZ0OiA1OC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbTgge1xcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1tOCB7XFxuICAgIHJpZ2h0OiA2Ni42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLW04IHtcXG4gICAgbGVmdDogNjYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LW05IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLW05IHtcXG4gICAgcmlnaHQ6IDc1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLW05IHtcXG4gICAgbGVmdDogNzUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1tMTAge1xcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1tMTAge1xcbiAgICByaWdodDogODMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1tMTAge1xcbiAgICBsZWZ0OiA4My4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbTExIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbTExIHtcXG4gICAgcmlnaHQ6IDkxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbTExIHtcXG4gICAgbGVmdDogOTEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LW0xMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxMDAlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbTEyIHtcXG4gICAgcmlnaHQ6IDEwMCU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1tMTIge1xcbiAgICBsZWZ0OiAxMDAlO1xcbiAgfVxcbn1cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiA5OTNweCkge1xcbiAgLnJvdyAuY29sLmwxIHtcXG4gICAgd2lkdGg6IDguMzMzMzMzMzMzMyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5sMiB7XFxuICAgIHdpZHRoOiAxNi42NjY2NjY2NjY3JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLmwzIHtcXG4gICAgd2lkdGg6IDI1JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLmw0IHtcXG4gICAgd2lkdGg6IDMzLjMzMzMzMzMzMzMlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubDUge1xcbiAgICB3aWR0aDogNDEuNjY2NjY2NjY2NyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5sNiB7XFxuICAgIHdpZHRoOiA1MCU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5sNyB7XFxuICAgIHdpZHRoOiA1OC4zMzMzMzMzMzMzJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLmw4IHtcXG4gICAgd2lkdGg6IDY2LjY2NjY2NjY2NjclO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubDkge1xcbiAgICB3aWR0aDogNzUlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubDEwIHtcXG4gICAgd2lkdGg6IDgzLjMzMzMzMzMzMzMlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubDExIHtcXG4gICAgd2lkdGg6IDkxLjY2NjY2NjY2NjclO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wubDEyIHtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbDEge1xcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLWwxIHtcXG4gICAgcmlnaHQ6IDguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1sMSB7XFxuICAgIGxlZnQ6IDguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LWwyIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbDIge1xcbiAgICByaWdodDogMTYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1sMiB7XFxuICAgIGxlZnQ6IDE2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1sMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyNSU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1sMyB7XFxuICAgIHJpZ2h0OiAyNSU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1sMyB7XFxuICAgIGxlZnQ6IDI1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbDQge1xcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1sNCB7XFxuICAgIHJpZ2h0OiAzMy4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLWw0IHtcXG4gICAgbGVmdDogMzMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LWw1IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbDUge1xcbiAgICByaWdodDogNDEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1sNSB7XFxuICAgIGxlZnQ6IDQxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1sNiB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1sNiB7XFxuICAgIHJpZ2h0OiA1MCU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1sNiB7XFxuICAgIGxlZnQ6IDUwJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbDcge1xcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1sNyB7XFxuICAgIHJpZ2h0OiA1OC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLWw3IHtcXG4gICAgbGVmdDogNTguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LWw4IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbDgge1xcbiAgICByaWdodDogNjYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1sOCB7XFxuICAgIGxlZnQ6IDY2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1sOSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA3NSU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC1sOSB7XFxuICAgIHJpZ2h0OiA3NSU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC1sOSB7XFxuICAgIGxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQtbDEwIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwtbDEwIHtcXG4gICAgcmlnaHQ6IDgzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbDEwIHtcXG4gICAgbGVmdDogODMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LWwxMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLWwxMSB7XFxuICAgIHJpZ2h0OiA5MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLWwxMSB7XFxuICAgIGxlZnQ6IDkxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC1sMTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTAwJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLWwxMiB7XFxuICAgIHJpZ2h0OiAxMDAlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gtbDEyIHtcXG4gICAgbGVmdDogMTAwJTtcXG4gIH1cXG59XFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoIDogMTIwMXB4KSB7XFxuICAucm93IC5jb2wueGwxIHtcXG4gICAgd2lkdGg6IDguMzMzMzMzMzMzMyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC54bDIge1xcbiAgICB3aWR0aDogMTYuNjY2NjY2NjY2NyU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC54bDMge1xcbiAgICB3aWR0aDogMjUlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wueGw0IHtcXG4gICAgd2lkdGg6IDMzLjMzMzMzMzMzMzMlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wueGw1IHtcXG4gICAgd2lkdGg6IDQxLjY2NjY2NjY2NjclO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wueGw2IHtcXG4gICAgd2lkdGg6IDUwJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLnhsNyB7XFxuICAgIHdpZHRoOiA1OC4zMzMzMzMzMzMzJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLnhsOCB7XFxuICAgIHdpZHRoOiA2Ni42NjY2NjY2NjY3JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLnhsOSB7XFxuICAgIHdpZHRoOiA3NSU7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgICByaWdodDogYXV0bztcXG4gIH1cXG4gIC5yb3cgLmNvbC54bDEwIHtcXG4gICAgd2lkdGg6IDgzLjMzMzMzMzMzMzMlO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbGVmdDogYXV0bztcXG4gICAgcmlnaHQ6IGF1dG87XFxuICB9XFxuICAucm93IC5jb2wueGwxMSB7XFxuICAgIHdpZHRoOiA5MS42NjY2NjY2NjY3JTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLnhsMTIge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIGxlZnQ6IGF1dG87XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC14bDEge1xcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLXhsMSB7XFxuICAgIHJpZ2h0OiA4LjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gteGwxIHtcXG4gICAgbGVmdDogOC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQteGwyIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwteGwyIHtcXG4gICAgcmlnaHQ6IDE2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gteGwyIHtcXG4gICAgbGVmdDogMTYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LXhsMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyNSU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC14bDMge1xcbiAgICByaWdodDogMjUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gteGwzIHtcXG4gICAgbGVmdDogMjUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC14bDQge1xcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC14bDQge1xcbiAgICByaWdodDogMzMuMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC14bDQge1xcbiAgICBsZWZ0OiAzMy4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQteGw1IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwteGw1IHtcXG4gICAgcmlnaHQ6IDQxLjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gteGw1IHtcXG4gICAgbGVmdDogNDEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LXhsNiB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC14bDYge1xcbiAgICByaWdodDogNTAlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gteGw2IHtcXG4gICAgbGVmdDogNTAlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC14bDcge1xcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC14bDcge1xcbiAgICByaWdodDogNTguMzMzMzMzMzMzMyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC14bDcge1xcbiAgICBsZWZ0OiA1OC4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQteGw4IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwteGw4IHtcXG4gICAgcmlnaHQ6IDY2LjY2NjY2NjY2NjclO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gteGw4IHtcXG4gICAgbGVmdDogNjYuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LXhsOSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA3NSU7XFxuICB9XFxuICAucm93IC5jb2wucHVsbC14bDkge1xcbiAgICByaWdodDogNzUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1c2gteGw5IHtcXG4gICAgbGVmdDogNzUlO1xcbiAgfVxcbiAgLnJvdyAuY29sLm9mZnNldC14bDEwIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzMzMlO1xcbiAgfVxcbiAgLnJvdyAuY29sLnB1bGwteGwxMCB7XFxuICAgIHJpZ2h0OiA4My4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLXhsMTAge1xcbiAgICBsZWZ0OiA4My4zMzMzMzMzMzMzJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5vZmZzZXQteGwxMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NjY3JTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLXhsMTEge1xcbiAgICByaWdodDogOTEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wucHVzaC14bDExIHtcXG4gICAgbGVmdDogOTEuNjY2NjY2NjY2NyU7XFxuICB9XFxuICAucm93IC5jb2wub2Zmc2V0LXhsMTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTAwJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdWxsLXhsMTIge1xcbiAgICByaWdodDogMTAwJTtcXG4gIH1cXG4gIC5yb3cgLmNvbC5wdXNoLXhsMTIge1xcbiAgICBsZWZ0OiAxMDAlO1xcbiAgfVxcbn1cXG5cXG4uc2lkZW5hdiB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB3aWR0aDogMzAwcHg7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbiAgbWFyZ2luOiAwO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgKyA2MHB4KTtcXG4gIGhlaWdodDogLW1vei1jYWxjKDEwMCUpO1xcbiAgcGFkZGluZy1ib3R0b206IDYwcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgei1pbmRleDogOTk5O1xcbiAgb3ZlcmZsb3cteTogYXV0bztcXG4gIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XFxuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwNSUpO1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDFzO1xcbn1cXG4uc2lkZW5hdi5yaWdodC1hbGlnbmVkIHtcXG4gIHJpZ2h0OiAwO1xcbiAgbGVmdDogYXV0bztcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcXG59XFxuLnNpZGVuYXYgLmNvbGxhcHNpYmxlIHtcXG4gIG1hcmdpbjogMDtcXG59XFxuLnNpZGVuYXYgbGkge1xcbiAgZmxvYXQ6IG5vbmU7XFxufVxcbi5zaWRlbmF2IGxpIC5pY29uU2lkZUxpbmsge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcbi5zaWRlbmF2IGxpIC5pY29uU2lkZUxpbmsgc3ZnIHtcXG4gIHN0cm9rZTogcmdiYSgwLCAwLCAwLCAwLjIpO1xcbiAgd2lkdGg6IDMwcHg7XFxufVxcbi5zaWRlbmF2IGxpLmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xcbn1cXG4uc2lkZW5hdiBsaS5hY3RpdmUgc3ZnIHtcXG4gIHN0cm9rZTogd2hpdGUgIWltcG9ydGFudDtcXG4gIHdpZHRoOiAzMHB4O1xcbn1cXG4uc2lkZW5hdiBsaS5sYXN0IHtcXG4gIHBvc2l0aW9uOiBzdGlja3k7XFxuICB0b3A6IGNhbGMoMTAwJSAtIDQ1cHggLSAzNXB4KTtcXG59XFxuLnNpZGVuYXYgbGkgPiBhIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuODcpO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICBoZWlnaHQ6IDQ1cHg7XFxuICBsaW5lLWhlaWdodDogNDVweDtcXG4gIHBhZGRpbmc6IDAgMzBweDtcXG59XFxuLnNpZGVuYXYgbGkgPiBhOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxufVxcbi5zaWRlbmF2IGxpID4gYS5idG4sIC5zaWRlbmF2IGxpID4gYS5idG4tc21hbGwsIC5zaWRlbmF2IGxpID4gYS5idG4tbGFyZ2UsIC5zaWRlbmF2IGxpID4gYS5idG4tZmxhdCwgLnNpZGVuYXYgbGkgPiBhLmJ0bi1mbG9hdGluZyB7XFxuICBtYXJnaW46IDEwcHggMTVweDtcXG59XFxuLnNpZGVuYXYgbGkgPiBhLmJ0biwgLnNpZGVuYXYgbGkgPiBhLmJ0bi1zbWFsbCwgLnNpZGVuYXYgbGkgPiBhLmJ0bi1sYXJnZSwgLnNpZGVuYXYgbGkgPiBhLmJ0bi1mbG9hdGluZyB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnNpZGVuYXYgbGkgPiBhLmJ0bi1mbGF0IHtcXG4gIGNvbG9yOiAjMzQzNDM0O1xcbn1cXG4uc2lkZW5hdiBsaSA+IGEuYnRuOmhvdmVyLCAuc2lkZW5hdiBsaSA+IGEuYnRuLXNtYWxsOmhvdmVyLCAuc2lkZW5hdiBsaSA+IGEuYnRuLWxhcmdlOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0MTQxNDE7XFxufVxcbi5zaWRlbmF2IGxpID4gYS5idG4tZmxvYXRpbmc6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0MzQzNDtcXG59XFxuLnNpZGVuYXYgbGkgPiBhID4gaSwgLnNpZGVuYXYgbGkgPiBhID4gW2NsYXNzXj1tZGktXSxcXG4uc2lkZW5hdiBsaSA+IGEgbGkgPiBhID4gW2NsYXNzKj1tZGktXSwgLnNpZGVuYXYgbGkgPiBhID4gaS5zLWljb24ge1xcbiAgZmxvYXQ6IGxlZnQ7XFxuICBoZWlnaHQ6IDQ1cHg7XFxuICBsaW5lLWhlaWdodDogNDVweDtcXG4gIG1hcmdpbjogMCAzMHB4IDAgMDtcXG4gIHdpZHRoOiAyMi41cHg7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjU0KTtcXG59XFxuLnNpZGVuYXYgLmRpdmlkZXIge1xcbiAgbWFyZ2luOiA3LjVweCAwIDAgMDtcXG59XFxuLnNpZGVuYXYgLnN1YmhlYWRlciB7XFxuICBjdXJzb3I6IGluaXRpYWw7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNTQpO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIGxpbmUtaGVpZ2h0OiA0NXB4O1xcbn1cXG4uc2lkZW5hdiAuc3ViaGVhZGVyOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG4uc2lkZW5hdiAudXNlci12aWV3IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHBhZGRpbmc6IDMwcHggMzBweCAwO1xcbiAgbWFyZ2luLWJvdHRvbTogNy41cHg7XFxufVxcbi5zaWRlbmF2IC51c2VyLXZpZXcgPiBhIHtcXG4gIGhlaWdodDogYXV0bztcXG4gIHBhZGRpbmc6IDA7XFxufVxcbi5zaWRlbmF2IC51c2VyLXZpZXcgPiBhOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG4uc2lkZW5hdiAudXNlci12aWV3IC5iYWNrZ3JvdW5kIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAtMTtcXG59XFxuLnNpZGVuYXYgLnVzZXItdmlldyAuY2lyY2xlLFxcbi5zaWRlbmF2IC51c2VyLXZpZXcgLm5hbWUsXFxuLnNpZGVuYXYgLnVzZXItdmlldyAuZW1haWwge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcbi5zaWRlbmF2IC51c2VyLXZpZXcgLmNpcmNsZSB7XFxuICBoZWlnaHQ6IDY0cHg7XFxuICB3aWR0aDogNjRweDtcXG59XFxuLnNpZGVuYXYgLnVzZXItdmlldyAubmFtZSxcXG4uc2lkZW5hdiAudXNlci12aWV3IC5lbWFpbCB7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBsaW5lLWhlaWdodDogMjIuNXB4O1xcbn1cXG4uc2lkZW5hdiAudXNlci12aWV3IC5uYW1lIHtcXG4gIG1hcmdpbi10b3A6IDE2cHg7XFxuICBmb250LXdlaWdodDogNTAwO1xcbn1cXG4uc2lkZW5hdiAudXNlci12aWV3IC5lbWFpbCB7XFxuICBwYWRkaW5nLWJvdHRvbTogMTZweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxufVxcblxcbi5kcmFnLXRhcmdldCB7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogMTBweDtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHRvcDogMDtcXG4gIHotaW5kZXg6IDk5ODtcXG59XFxuLmRyYWctdGFyZ2V0LnJpZ2h0LWFsaWduZWQge1xcbiAgcmlnaHQ6IDA7XFxufVxcblxcbi5zaWRlbmF2LnNpZGVuYXYtZml4ZWQge1xcbiAgbGVmdDogMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG59XFxuLnNpZGVuYXYuc2lkZW5hdi1maXhlZC5yaWdodC1hbGlnbmVkIHtcXG4gIHJpZ2h0OiAwO1xcbiAgbGVmdDogYXV0bztcXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoIDogOTkycHgpIHtcXG4gIC5zaWRlbmF2LnNpZGVuYXYtZml4ZWQge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwNSUpO1xcbiAgfVxcbiAgLnNpZGVuYXYuc2lkZW5hdi1maXhlZC5yaWdodC1hbGlnbmVkIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwNSUpO1xcbiAgfVxcbiAgLnNpZGVuYXYgPiBhIHtcXG4gICAgcGFkZGluZzogMCAxNXB4O1xcbiAgfVxcbiAgLnNpZGVuYXYgLnVzZXItdmlldyB7XFxuICAgIHBhZGRpbmc6IDE1cHggMTVweCAwO1xcbiAgfVxcbn1cXG4uc2lkZW5hdiAuY29sbGFwc2libGUtYm9keSA+IHVsOm5vdCguY29sbGFwc2libGUpID4gbGkuYWN0aXZlLFxcbi5zaWRlbmF2LnNpZGVuYXYtZml4ZWQgLmNvbGxhcHNpYmxlLWJvZHkgPiB1bDpub3QoLmNvbGxhcHNpYmxlKSA+IGxpLmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTBjYWY5O1xcbn1cXG4uc2lkZW5hdiAuY29sbGFwc2libGUtYm9keSA+IHVsOm5vdCguY29sbGFwc2libGUpID4gbGkuYWN0aXZlIGEsXFxuLnNpZGVuYXYuc2lkZW5hdi1maXhlZCAuY29sbGFwc2libGUtYm9keSA+IHVsOm5vdCguY29sbGFwc2libGUpID4gbGkuYWN0aXZlIGEge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcblxcbi5zaWRlbmF2IC5jb2xsYXBzaWJsZS1ib2R5IHtcXG4gIHBhZGRpbmc6IDA7XFxufVxcblxcbi5zaWRlbmF2LW92ZXJsYXkge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgb3BhY2l0eTogMDtcXG4gIGhlaWdodDogMTIwdmg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XFxuICB6LWluZGV4OiA5OTc7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4ud2l0aC1zaWRlLW5hdi1vcGVuIHtcXG4gIHBhZGRpbmctbGVmdDogMzAwcHg7XFxuICB0cmFuc2l0aW9uOiBwYWRkaW5nIDFzO1xcbn1cXG5cXG4uYnRuLCAuYnRuLXNtYWxsLCAuYnRuLWxhcmdlLFxcbi5idG4tZmxhdCB7XFxuICBib3JkZXI6IG5vbmU7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBoZWlnaHQ6IDM2cHg7XFxuICBsaW5lLWhlaWdodDogMzZweDtcXG4gIHBhZGRpbmc6IDAgMTZweDtcXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmJ0bi5kaXNhYmxlZCxcXG4uYnRuLWZsb2F0aW5nLmRpc2FibGVkLFxcbi5idG4tbGFyZ2UuZGlzYWJsZWQsXFxuLmJ0bi1zbWFsbC5kaXNhYmxlZCxcXG4uYnRuLWZsYXQuZGlzYWJsZWQsXFxuLmJ0bjpkaXNhYmxlZCxcXG4uYnRuLWZsb2F0aW5nOmRpc2FibGVkLFxcbi5idG4tbGFyZ2U6ZGlzYWJsZWQsXFxuLmJ0bi1zbWFsbDpkaXNhYmxlZCxcXG4uYnRuLWZsYXQ6ZGlzYWJsZWQsXFxuLmJ0bltkaXNhYmxlZF0sXFxuLmJ0bi1mbG9hdGluZ1tkaXNhYmxlZF0sXFxuLmJ0bi1sYXJnZVtkaXNhYmxlZF0sXFxuLmJ0bi1zbWFsbFtkaXNhYmxlZF0sXFxuLmJ0bi1mbGF0W2Rpc2FibGVkXSB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNERkRGREYgIWltcG9ydGFudDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogIzlGOUY5RiAhaW1wb3J0YW50O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbn1cXG4uYnRuLmRpc2FibGVkOmhvdmVyLFxcbi5idG4tZmxvYXRpbmcuZGlzYWJsZWQ6aG92ZXIsXFxuLmJ0bi1sYXJnZS5kaXNhYmxlZDpob3ZlcixcXG4uYnRuLXNtYWxsLmRpc2FibGVkOmhvdmVyLFxcbi5idG4tZmxhdC5kaXNhYmxlZDpob3ZlcixcXG4uYnRuOmRpc2FibGVkOmhvdmVyLFxcbi5idG4tZmxvYXRpbmc6ZGlzYWJsZWQ6aG92ZXIsXFxuLmJ0bi1sYXJnZTpkaXNhYmxlZDpob3ZlcixcXG4uYnRuLXNtYWxsOmRpc2FibGVkOmhvdmVyLFxcbi5idG4tZmxhdDpkaXNhYmxlZDpob3ZlcixcXG4uYnRuW2Rpc2FibGVkXTpob3ZlcixcXG4uYnRuLWZsb2F0aW5nW2Rpc2FibGVkXTpob3ZlcixcXG4uYnRuLWxhcmdlW2Rpc2FibGVkXTpob3ZlcixcXG4uYnRuLXNtYWxsW2Rpc2FibGVkXTpob3ZlcixcXG4uYnRuLWZsYXRbZGlzYWJsZWRdOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNERkRGREYgIWltcG9ydGFudDtcXG4gIGNvbG9yOiAjOUY5RjlGICFpbXBvcnRhbnQ7XFxufVxcblxcbi5idG4sXFxuLmJ0bi1zbWFsbCxcXG4uYnRuLWxhcmdlLFxcbi5idG4tZmxvYXRpbmcsXFxuLmJ0bi1mbGF0IHtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIG91dGxpbmU6IDA7XFxufVxcbi5idG4gaSxcXG4uYnRuLWZsb2F0aW5nIGksXFxuLmJ0bi1sYXJnZSBpLFxcbi5idG4tc21hbGwgaSxcXG4uYnRuLWZsYXQgaSB7XFxuICBmb250LXNpemU6IDEuM3JlbTtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbn1cXG5cXG4uYnRuOmZvY3VzLCAuYnRuLXNtYWxsOmZvY3VzLCAuYnRuLWxhcmdlOmZvY3VzLFxcbi5idG4tZmxvYXRpbmc6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFiMWIxYjtcXG59XFxuXFxuLmJ0biwgLmJ0bi1zbWFsbCwgLmJ0bi1sYXJnZSB7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzNDM0MzQ7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBsZXR0ZXItc3BhY2luZzogMC41cHg7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMnMgZWFzZS1vdXQ7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5idG46aG92ZXIsIC5idG4tc21hbGw6aG92ZXIsIC5idG4tbGFyZ2U6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQxNDE0MTtcXG59XFxuXFxuLmJ0bi1mbG9hdGluZyB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBjb2xvcjogI2ZmZjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB6LWluZGV4OiAxO1xcbiAgd2lkdGg6IDQwcHg7XFxuICBoZWlnaHQ6IDQwcHg7XFxuICBsaW5lLWhlaWdodDogNDBweDtcXG4gIHBhZGRpbmc6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuLmJ0bi1mbG9hdGluZzpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbn1cXG4uYnRuLWZsb2F0aW5nOmJlZm9yZSB7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbn1cXG4uYnRuLWZsb2F0aW5nLmJ0bi1sYXJnZSB7XFxuICB3aWR0aDogNTZweDtcXG4gIGhlaWdodDogNTZweDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcbi5idG4tZmxvYXRpbmcuYnRuLWxhcmdlLmhhbGZ3YXktZmFiIHtcXG4gIGJvdHRvbTogMjhweDtcXG59XFxuLmJ0bi1mbG9hdGluZy5idG4tbGFyZ2UgaSB7XFxuICBsaW5lLWhlaWdodDogNTZweDtcXG59XFxuLmJ0bi1mbG9hdGluZy5idG4tc21hbGwge1xcbiAgd2lkdGg6IDMyLjRweDtcXG4gIGhlaWdodDogMzIuNHB4O1xcbn1cXG4uYnRuLWZsb2F0aW5nLmJ0bi1zbWFsbC5oYWxmd2F5LWZhYiB7XFxuICBib3R0b206IDE2LjJweDtcXG59XFxuLmJ0bi1mbG9hdGluZy5idG4tc21hbGwgaSB7XFxuICBsaW5lLWhlaWdodDogMzIuNHB4O1xcbn1cXG4uYnRuLWZsb2F0aW5nLmhhbGZ3YXktZmFiIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAyNHB4O1xcbiAgYm90dG9tOiAyMHB4O1xcbn1cXG4uYnRuLWZsb2F0aW5nLmhhbGZ3YXktZmFiLmxlZnQge1xcbiAgcmlnaHQ6IGF1dG87XFxuICBsZWZ0OiAyNHB4O1xcbn1cXG4uYnRuLWZsb2F0aW5nIGkge1xcbiAgd2lkdGg6IGluaGVyaXQ7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGZvbnQtc2l6ZTogMS42cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XFxufVxcblxcbmJ1dHRvbi5idG4tZmxvYXRpbmcge1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG5cXG4uZml4ZWQtYWN0aW9uLWJ0biB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICByaWdodDogMjNweDtcXG4gIGJvdHRvbTogMjNweDtcXG4gIHBhZGRpbmctdG9wOiAxNXB4O1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIHotaW5kZXg6IDk5NztcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4uYWN0aXZlIHVsIHtcXG4gIHZpc2liaWxpdHk6IHZpc2libGU7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLmRpcmVjdGlvbi1sZWZ0LCAuZml4ZWQtYWN0aW9uLWJ0bi5kaXJlY3Rpb24tcmlnaHQge1xcbiAgcGFkZGluZzogMCAwIDAgMTVweDtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4uZGlyZWN0aW9uLWxlZnQgdWwsIC5maXhlZC1hY3Rpb24tYnRuLmRpcmVjdGlvbi1yaWdodCB1bCB7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG4gIHJpZ2h0OiA2NHB4O1xcbiAgdG9wOiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBsZWZ0OiBhdXRvO1xcbiAgLyp3aWR0aCAxMDAlIG9ubHkgZ29lcyB0byB3aWR0aCBvZiBidXR0b24gY29udGFpbmVyICovXFxuICB3aWR0aDogNTAwcHg7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLmRpcmVjdGlvbi1sZWZ0IHVsIGxpLCAuZml4ZWQtYWN0aW9uLWJ0bi5kaXJlY3Rpb24tcmlnaHQgdWwgbGkge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luOiA3LjVweCAxNXB4IDAgMDtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4uZGlyZWN0aW9uLXJpZ2h0IHtcXG4gIHBhZGRpbmc6IDAgMTVweCAwIDA7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLmRpcmVjdGlvbi1yaWdodCB1bCB7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgZGlyZWN0aW9uOiBydGw7XFxuICBsZWZ0OiA2NHB4O1xcbiAgcmlnaHQ6IGF1dG87XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLmRpcmVjdGlvbi1yaWdodCB1bCBsaSB7XFxuICBtYXJnaW46IDcuNXB4IDAgMCAxNXB4O1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0bi5kaXJlY3Rpb24tYm90dG9tIHtcXG4gIHBhZGRpbmc6IDAgMCAxNXB4IDA7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLmRpcmVjdGlvbi1ib3R0b20gdWwge1xcbiAgdG9wOiA2NHB4O1xcbiAgYm90dG9tOiBhdXRvO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4uZGlyZWN0aW9uLWJvdHRvbSB1bCBsaSB7XFxuICBtYXJnaW46IDE1cHggMCAwIDA7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLnRvb2xiYXIge1xcbiAgcGFkZGluZzogMDtcXG4gIGhlaWdodDogNTZweDtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4udG9vbGJhci5hY3RpdmUgPiBhIGkge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4udG9vbGJhciB1bCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgei1pbmRleDogMTtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4udG9vbGJhciB1bCBsaSB7XFxuICBmbGV4OiAxO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luOiAwO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgdHJhbnNpdGlvbjogbm9uZTtcXG59XFxuLmZpeGVkLWFjdGlvbi1idG4udG9vbGJhciB1bCBsaSBhIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICNmZmY7XFxuICBsaW5lLWhlaWdodDogNTZweDtcXG4gIHotaW5kZXg6IDE7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuLnRvb2xiYXIgdWwgbGkgYSBpIHtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbn1cXG4uZml4ZWQtYWN0aW9uLWJ0biB1bCB7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDY0cHg7XFxuICBtYXJnaW46IDA7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuIHVsIGxpIHtcXG4gIG1hcmdpbi1ib3R0b206IDE1cHg7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuIHVsIGEuYnRuLWZsb2F0aW5nIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi5maXhlZC1hY3Rpb24tYnRuIC5mYWItYmFja2Ryb3Age1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHotaW5kZXg6IC0xO1xcbiAgd2lkdGg6IDQwcHg7XFxuICBoZWlnaHQ6IDQwcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcXG59XFxuXFxuLmJ0bi1mbGF0IHtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGNvbG9yOiAjMzQzNDM0O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzO1xcbn1cXG4uYnRuLWZsYXQ6Zm9jdXMsIC5idG4tZmxhdDpob3ZlciB7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG4uYnRuLWZsYXQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpO1xcbn1cXG4uYnRuLWZsYXQuZGlzYWJsZWQsIC5idG4tZmxhdC5idG4tZmxhdFtkaXNhYmxlZF0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcXG4gIGNvbG9yOiAjYjNiM2IzICFpbXBvcnRhbnQ7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxufVxcblxcbi5idG4tbGFyZ2Uge1xcbiAgaGVpZ2h0OiA1NHB4O1xcbiAgbGluZS1oZWlnaHQ6IDU0cHg7XFxuICBmb250LXNpemU6IDE1cHg7XFxuICBwYWRkaW5nOiAwIDI4cHg7XFxufVxcbi5idG4tbGFyZ2UgaSB7XFxuICBmb250LXNpemU6IDEuNnJlbTtcXG59XFxuXFxuLmJ0bi1zbWFsbCB7XFxuICBoZWlnaHQ6IDMyLjRweDtcXG4gIGxpbmUtaGVpZ2h0OiAzMi40cHg7XFxuICBmb250LXNpemU6IDEzcHg7XFxufVxcbi5idG4tc21hbGwgaSB7XFxuICBmb250LXNpemU6IDEuMnJlbTtcXG59XFxuXFxuLmJ0bi1ibG9jayB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLmNvbW11blRhYkhlYWRlciwgLnRhYnMuYWN0aXZlVGFiLTIgLnRhYi1oZWFkZXItb3ZlcjIgLnRhYi1oZWFkZXIsIC50YWJzLmFjdGl2ZVRhYi0yIC50YWItaGVhZGVyLW92ZXIxIC50YWItaGVhZGVyLCAudGFicy5hY3RpdmVUYWItMiAudGFiLWhlYWRlci1vdmVyMCAudGFiLWhlYWRlciwgLnRhYnMuYWN0aXZlVGFiLTEgLnRhYi1oZWFkZXItb3ZlcjIgLnRhYi1oZWFkZXIsIC50YWJzLmFjdGl2ZVRhYi0xIC50YWItaGVhZGVyLW92ZXIxIC50YWItaGVhZGVyLCAudGFicy5hY3RpdmVUYWItMSAudGFiLWhlYWRlci1vdmVyMCAudGFiLWhlYWRlciwgLnRhYnMuYWN0aXZlVGFiLTAgLnRhYi1oZWFkZXItb3ZlcjIgLnRhYi1oZWFkZXIsIC50YWJzLmFjdGl2ZVRhYi0wIC50YWItaGVhZGVyLW92ZXIxIC50YWItaGVhZGVyLCAudGFicy5hY3RpdmVUYWItMCAudGFiLWhlYWRlci1vdmVyMCAudGFiLWhlYWRlciB7XFxuICBoZWlnaHQ6IDEwMHB4O1xcbiAgcGFkZGluZzogNDBweDtcXG59XFxuXFxuLnRhYnMge1xcbiAgbWluLWhlaWdodDogY2FsYygxMDAlIC0gMTUwcHgpO1xcbiAgbWFyZ2luLXRvcDogMzBweDtcXG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcXG4gIGJvcmRlci1yYWRpdXM6IDQwcHggIWltcG9ydGFudDtcXG59XFxuLnRhYnMgLmlubmVycGFnZSB7XFxuICBtaW4taGVpZ2h0OiA3MFZIICFpbXBvcnRhbnQ7XFxufVxcbi50YWJzIC50YWJzLWhlYWRlci1vdmVybGF5IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBoZWlnaHQ6IDEwMHB4O1xcbn1cXG4udGFicy5hY3RpdmVUYWItMCAudGFiLWhlYWRlci1vdmVyMCB7XFxuICBmbGV4OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgwYzRmZDtcXG4gIGJvcmRlci1yYWRpdXM6IDQwcHggMCAwIDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0wIC50YWItaGVhZGVyLW92ZXIwIC50YWItaGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjYmU3ZmU7XFxuICBib3JkZXItcmFkaXVzOiA0MHB4IDQwcHggMCAwO1xcbn1cXG4udGFicy5hY3RpdmVUYWItMCAudGFiLWhlYWRlci1vdmVyMSB7XFxuICBmbGV4OiAxO1xcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDAuMjV0dXJuLCAjY2JlN2ZlLCAjMzVhMmZiKTtcXG4gIGJvcmRlci1yYWRpdXM6IDAgMCAwIDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0wIC50YWItaGVhZGVyLW92ZXIxIC50YWItaGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MGM0ZmQ7XFxuICBib3JkZXItcmFkaXVzOiAwIDQwcHggMCA0MHB4O1xcbn1cXG4udGFicy5hY3RpdmVUYWItMCAudGFiLWhlYWRlci1vdmVyMiB7XFxuICBmbGV4OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgwYzRmZDtcXG4gIGJvcmRlci1yYWRpdXM6IDAgNDBweCAwIDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0wIC50YWItaGVhZGVyLW92ZXIyIC50YWItaGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzNWEyZmI7XFxuICBib3JkZXItcmFkaXVzOiAwIDQwcHggMCA0MHB4O1xcbn1cXG4udGFicy5hY3RpdmVUYWItMSAudGFiLWhlYWRlci1vdmVyMCB7XFxuICBmbGV4OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NiZTdmZTtcXG4gIGJvcmRlci1yYWRpdXM6IDQwcHggMCAwIDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0xIC50YWItaGVhZGVyLW92ZXIwIC50YWItaGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MGM0ZmQ7XFxuICBib3JkZXItcmFkaXVzOiA0MHB4IDAgNDBweCAwO1xcbn1cXG4udGFicy5hY3RpdmVUYWItMSAudGFiLWhlYWRlci1vdmVyMSB7XFxuICBmbGV4OiAxO1xcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDAuMjV0dXJuLCAjODBjNGZkLCAjMzVhMmZiKTtcXG4gIGJvcmRlci1yYWRpdXM6IDAgMCAwIDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0xIC50YWItaGVhZGVyLW92ZXIxIC50YWItaGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjYmU3ZmU7XFxuICBib3JkZXItcmFkaXVzOiA0MHB4IDQwcHggMCAwO1xcbn1cXG4udGFicy5hY3RpdmVUYWItMSAudGFiLWhlYWRlci1vdmVyMiB7XFxuICBmbGV4OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NiZTdmZTtcXG4gIGJvcmRlci1yYWRpdXM6IDAgNDBweCAwIDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0xIC50YWItaGVhZGVyLW92ZXIyIC50YWItaGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzNWEyZmI7XFxuICBib3JkZXItcmFkaXVzOiAwIDQwcHggMCA0MHB4O1xcbn1cXG4udGFicy5hY3RpdmVUYWItMiAudGFiLWhlYWRlci1vdmVyMCB7XFxuICBmbGV4OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM1YTJmYjtcXG4gIGJvcmRlci1yYWRpdXM6IDQwcHggMCAwIDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0yIC50YWItaGVhZGVyLW92ZXIwIC50YWItaGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MGM0ZmQ7XFxuICBib3JkZXItcmFkaXVzOiA0MHB4IDAgNDBweCAwO1xcbn1cXG4udGFicy5hY3RpdmVUYWItMiAudGFiLWhlYWRlci1vdmVyMSB7XFxuICBmbGV4OiAxO1xcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDAuMjV0dXJuLCAjODBjNGZkLCAjY2JlN2ZlKTtcXG4gIGJvcmRlci1yYWRpdXM6IDAgMCAwIDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0yIC50YWItaGVhZGVyLW92ZXIxIC50YWItaGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzNWEyZmI7XFxuICBib3JkZXItcmFkaXVzOiA0MHB4IDAgNDBweCAwO1xcbn1cXG4udGFicy5hY3RpdmVUYWItMiAudGFiLWhlYWRlci1vdmVyMiB7XFxuICBmbGV4OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM1YTJmYjtcXG4gIGJvcmRlci1yYWRpdXM6IDAgNDBweCAwIDA7XFxufVxcbi50YWJzLmFjdGl2ZVRhYi0yIC50YWItaGVhZGVyLW92ZXIyIC50YWItaGVhZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjYmU3ZmU7XFxuICBib3JkZXItcmFkaXVzOiA0MHB4IDQwcHggMCAwO1xcbn1cXG4udGFicyAudGFiLWNvbnRlbnQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NiZTdmZTtcXG4gIHBhZGRpbmc6IDEwcHg7XFxuICBib3JkZXItdG9wOiAwO1xcbiAgbWluLWhlaWdodDogNzB2aDtcXG4gIGJvcmRlci1yYWRpdXM6IDAgMCA0MHB4IDQwcHg7XFxuICBwYWRkaW5nLWJvdHRvbTogMjBweDtcXG59XFxuXFxuLmxvYWRlci1vdmVybGF5IHtcXG4gIHotaW5kZXg6IDk5OTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGhlaWdodDogMTAwdmg7XFxuICB3aWR0aDogMTAwdnc7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDIsIDEwMCwgMTAwLCAwLjYwMyk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG59XFxuLmxvYWRlci1vdmVybGF5IC5sb2FkZXIge1xcbiAgYm9yZGVyOiA3cHggc29saWQgI2YzZjNmMzsgLyogTGlnaHQgZ3JleSAqL1xcbiAgYm9yZGVyLXRvcDogN3B4IHNvbGlkICMyZWEyY2M7IC8qIEJsdWUgKi9cXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIHdpZHRoOiA3MHB4O1xcbiAgaGVpZ2h0OiA3MHB4O1xcbiAgYW5pbWF0aW9uOiBzcGluIDJzIGxpbmVhciBpbmZpbml0ZTtcXG59XFxuLmxvYWRlci1vdmVybGF5IC5sb2FkZXItdGV4dCB7XFxuICBtYXJnaW4tdG9wOiAyMHB4O1xcbiAgZm9udC1zaXplOiAyNXB4O1xcbiAgY29sb3I6ICMyZWEyY2M7XFxufVxcbkBrZXlmcmFtZXMgc3BpbiB7XFxuICAwJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcblxcbi5jYXJkLXBhbmVsIHtcXG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4yNXM7XFxuICBwYWRkaW5nOiAyNHB4O1xcbiAgbWFyZ2luOiAwLjMzMzMzMzMzMzNyZW0gMCAwLjY2NjY2NjY2NjdyZW0gMDtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxufVxcblxcbi5jYXJkIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG1hcmdpbjogMC4zMzMzMzMzMzMzcmVtIDAgMC42NjY2NjY2NjY3cmVtIDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjI1cztcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG59XFxuLmNhcmQgLmNhcmQtdGl0bGUge1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG59XFxuLmNhcmQgLmNhcmQtdGl0bGUuYWN0aXZhdG9yIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLmNhcmQuc21hbGwsIC5jYXJkLm1lZGl1bSwgLmNhcmQubGFyZ2Uge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uY2FyZC5zbWFsbCAuY2FyZC1pbWFnZSwgLmNhcmQubWVkaXVtIC5jYXJkLWltYWdlLCAuY2FyZC5sYXJnZSAuY2FyZC1pbWFnZSB7XFxuICBtYXgtaGVpZ2h0OiA2MCU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4uY2FyZC5zbWFsbCAuY2FyZC1pbWFnZSArIC5jYXJkLWNvbnRlbnQsIC5jYXJkLm1lZGl1bSAuY2FyZC1pbWFnZSArIC5jYXJkLWNvbnRlbnQsIC5jYXJkLmxhcmdlIC5jYXJkLWltYWdlICsgLmNhcmQtY29udGVudCB7XFxuICBtYXgtaGVpZ2h0OiA0MCU7XFxufVxcbi5jYXJkLnNtYWxsIC5jYXJkLWNvbnRlbnQsIC5jYXJkLm1lZGl1bSAuY2FyZC1jb250ZW50LCAuY2FyZC5sYXJnZSAuY2FyZC1jb250ZW50IHtcXG4gIG1heC1oZWlnaHQ6IDEwMCU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4uY2FyZC5zbWFsbCAuY2FyZC1hY3Rpb24sIC5jYXJkLm1lZGl1bSAuY2FyZC1hY3Rpb24sIC5jYXJkLmxhcmdlIC5jYXJkLWFjdGlvbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxufVxcbi5jYXJkLnNtYWxsIHtcXG4gIGhlaWdodDogMzAwcHg7XFxufVxcbi5jYXJkLm1lZGl1bSB7XFxuICBoZWlnaHQ6IDQwMHB4O1xcbn1cXG4uY2FyZC5sYXJnZSB7XFxuICBoZWlnaHQ6IDUwMHB4O1xcbn1cXG4uY2FyZC5ob3Jpem9udGFsIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi5jYXJkLmhvcml6b250YWwuc21hbGwgLmNhcmQtaW1hZ2UsIC5jYXJkLmhvcml6b250YWwubWVkaXVtIC5jYXJkLWltYWdlLCAuY2FyZC5ob3Jpem9udGFsLmxhcmdlIC5jYXJkLWltYWdlIHtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG1heC1oZWlnaHQ6IG5vbmU7XFxuICBvdmVyZmxvdzogdmlzaWJsZTtcXG59XFxuLmNhcmQuaG9yaXpvbnRhbC5zbWFsbCAuY2FyZC1pbWFnZSBpbWcsIC5jYXJkLmhvcml6b250YWwubWVkaXVtIC5jYXJkLWltYWdlIGltZywgLmNhcmQuaG9yaXpvbnRhbC5sYXJnZSAuY2FyZC1pbWFnZSBpbWcge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG4uY2FyZC5ob3Jpem9udGFsIC5jYXJkLWltYWdlIHtcXG4gIG1heC13aWR0aDogNTAlO1xcbn1cXG4uY2FyZC5ob3Jpem9udGFsIC5jYXJkLWltYWdlIGltZyB7XFxuICBib3JkZXItcmFkaXVzOiAycHggMCAwIDJweDtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIHdpZHRoOiBhdXRvO1xcbn1cXG4uY2FyZC5ob3Jpem9udGFsIC5jYXJkLXN0YWNrZWQge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4OiAxO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uY2FyZC5ob3Jpem9udGFsIC5jYXJkLXN0YWNrZWQgLmNhcmQtY29udGVudCB7XFxuICBmbGV4LWdyb3c6IDE7XFxufVxcbi5jYXJkLnN0aWNreS1hY3Rpb24gLmNhcmQtYWN0aW9uIHtcXG4gIHotaW5kZXg6IDI7XFxufVxcbi5jYXJkLnN0aWNreS1hY3Rpb24gLmNhcmQtcmV2ZWFsIHtcXG4gIHotaW5kZXg6IDE7XFxuICBwYWRkaW5nLWJvdHRvbTogNjRweDtcXG59XFxuLmNhcmQgLmNhcmQtaW1hZ2Uge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uY2FyZCAuY2FyZC1pbWFnZSBpbWcge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBib3JkZXItcmFkaXVzOiAycHggMnB4IDAgMDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4uY2FyZCAuY2FyZC1pbWFnZSAuY2FyZC10aXRsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAyNHB4O1xcbn1cXG4uY2FyZCAuY2FyZC1jb250ZW50IHtcXG4gIHBhZGRpbmc6IDI0cHg7XFxuICBib3JkZXItcmFkaXVzOiAwIDAgMnB4IDJweDtcXG59XFxuLmNhcmQgLmNhcmQtY29udGVudCBwIHtcXG4gIG1hcmdpbjogMDtcXG59XFxuLmNhcmQgLmNhcmQtY29udGVudCAuY2FyZC10aXRsZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGxpbmUtaGVpZ2h0OiAzMnB4O1xcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbn1cXG4uY2FyZCAuY2FyZC1jb250ZW50IC5jYXJkLXRpdGxlIGkge1xcbiAgbGluZS1oZWlnaHQ6IDMycHg7XFxufVxcbi5jYXJkIC5jYXJkLWFjdGlvbiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMTYwLCAxNjAsIDE2MCwgMC4yKTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHBhZGRpbmc6IDE2cHggMjRweDtcXG59XFxuLmNhcmQgLmNhcmQtYWN0aW9uOmxhc3QtY2hpbGQge1xcbiAgYm9yZGVyLXJhZGl1czogMCAwIDJweCAycHg7XFxufVxcbi5jYXJkIC5jYXJkLWFjdGlvbiBhOm5vdCguYnRuKTpub3QoLmJ0bi1sYXJnZSk6bm90KC5idG4tc21hbGwpOm5vdCguYnRuLWxhcmdlKTpub3QoLmJ0bi1mbG9hdGluZykge1xcbiAgY29sb3I6ICNmZmFiNDA7XFxuICBtYXJnaW4tcmlnaHQ6IDI0cHg7XFxuICB0cmFuc2l0aW9uOiBjb2xvciAwLjNzIGVhc2U7XFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcbn1cXG4uY2FyZCAuY2FyZC1hY3Rpb24gYTpub3QoLmJ0bik6bm90KC5idG4tbGFyZ2UpOm5vdCguYnRuLXNtYWxsKTpub3QoLmJ0bi1sYXJnZSk6bm90KC5idG4tZmxvYXRpbmcpOmhvdmVyIHtcXG4gIGNvbG9yOiAjZmZkOGE2O1xcbn1cXG4uY2FyZCAuY2FyZC1yZXZlYWwge1xcbiAgcGFkZGluZzogMjRweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICB3aWR0aDogMTAwJTtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgei1pbmRleDogMztcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5jYXJkIC5jYXJkLXJldmVhbCAuY2FyZC10aXRsZSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLypcXG4gICAgQGxpY2Vuc2VcXG4gICAgQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cXG4gICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxcbiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxcbiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcXG4gICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cXG4gICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcXG4gKi9cXG4vKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyogU1RZTEVTIEZPUiBUSEUgU1BJTk5FUiAqL1xcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKlxcbiAqIENvbnN0YW50czpcXG4gKiAgICAgIFNUUk9LRVdJRFRIID0gM3B4XFxuICogICAgICBBUkNTSVpFICAgICA9IDI3MCBkZWdyZWVzIChhbW91bnQgb2YgY2lyY2xlIHRoZSBhcmMgdGFrZXMgdXApXFxuICogICAgICBBUkNUSU1FICAgICA9IDEzMzNtcyAodGltZSBpdCB0YWtlcyB0byBleHBhbmQgYW5kIGNvbnRyYWN0IGFyYylcXG4gKiAgICAgIEFSQ1NUQVJUUk9UID0gMjE2IGRlZ3JlZXMgKGhvdyBtdWNoIHRoZSBzdGFydCBsb2NhdGlvbiBvZiB0aGUgYXJjXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCByb3RhdGUgZWFjaCB0aW1lLCAyMTYgZ2l2ZXMgdXMgYVxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1IHBvaW50ZWQgc3RhciBzaGFwZSAoaXQncyAzNjAvNSAqIDMpLlxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYSA3IHBvaW50ZWQgc3Rhciwgd2UgbWlnaHQgZG9cXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzYwLzcgKiAzID0gMTU0LjI4NilcXG4gKiAgICAgIENPTlRBSU5FUldJRFRIID0gMjhweFxcbiAqICAgICAgU0hSSU5LX1RJTUUgPSA0MDBtc1xcbiAqL1xcbi5wcmVsb2FkZXItd3JhcHBlciB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogNTBweDtcXG4gIGhlaWdodDogNTBweDtcXG59XFxuLnByZWxvYWRlci13cmFwcGVyLnNtYWxsIHtcXG4gIHdpZHRoOiAzNnB4O1xcbiAgaGVpZ2h0OiAzNnB4O1xcbn1cXG4ucHJlbG9hZGVyLXdyYXBwZXIuYmlnIHtcXG4gIHdpZHRoOiA2NHB4O1xcbiAgaGVpZ2h0OiA2NHB4O1xcbn1cXG4ucHJlbG9hZGVyLXdyYXBwZXIuYWN0aXZlIHtcXG4gIC8qIGR1cmF0aW9uOiAzNjAgKiBBUkNUSU1FIC8gKEFSQ1NUQVJUUk9UICsgKDM2MC1BUkNTSVpFKSkgKi9cXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIDE1NjhtcyBsaW5lYXIgaW5maW5pdGU7XFxuICBhbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgMTU2OG1zIGxpbmVhciBpbmZpbml0ZTtcXG59XFxuXFxuQC13ZWJraXQta2V5ZnJhbWVzIGNvbnRhaW5lci1yb3RhdGUge1xcbiAgdG8ge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgY29udGFpbmVyLXJvdGF0ZSB7XFxuICB0byB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcbi5zcGlubmVyLWxheWVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgb3BhY2l0eTogMDtcXG4gIGJvcmRlci1jb2xvcjogIzI2YTY5YTtcXG59XFxuXFxuLnNwaW5uZXItYmx1ZSxcXG4uc3Bpbm5lci1ibHVlLW9ubHkge1xcbiAgYm9yZGVyLWNvbG9yOiAjNDI4NWY0O1xcbn1cXG5cXG4uc3Bpbm5lci1yZWQsXFxuLnNwaW5uZXItcmVkLW9ubHkge1xcbiAgYm9yZGVyLWNvbG9yOiAjZGI0NDM3O1xcbn1cXG5cXG4uc3Bpbm5lci15ZWxsb3csXFxuLnNwaW5uZXIteWVsbG93LW9ubHkge1xcbiAgYm9yZGVyLWNvbG9yOiAjZjRiNDAwO1xcbn1cXG5cXG4uc3Bpbm5lci1ncmVlbixcXG4uc3Bpbm5lci1ncmVlbi1vbmx5IHtcXG4gIGJvcmRlci1jb2xvcjogIzBmOWQ1ODtcXG59XFxuXFxuLyoqXFxuICogSU1QT1JUQU5UIE5PVEUgQUJPVVQgQ1NTIEFOSU1BVElPTiBQUk9QRVJUSUVTIChrZWFudWxlZSk6XFxuICpcXG4gKiBpT1MgU2FmYXJpICh0ZXN0ZWQgb24gaU9TIDguMSkgZG9lcyBub3QgaGFuZGxlIGFuaW1hdGlvbi1kZWxheSB2ZXJ5IHdlbGwgLSBpdCBkb2Vzbid0XFxuICogZ3VhcmFudGVlIHRoYXQgdGhlIGFuaW1hdGlvbiB3aWxsIHN0YXJ0IF9leGFjdGx5XyBhZnRlciB0aGF0IHZhbHVlLiBTbyB3ZSBhdm9pZCB1c2luZ1xcbiAqIGFuaW1hdGlvbi1kZWxheSBhbmQgaW5zdGVhZCBzZXQgY3VzdG9tIGtleWZyYW1lcyBmb3IgZWFjaCBjb2xvciAoYXMgcmVkdW5kYW50IGFzIGl0XFxuICogc2VlbXMpLlxcbiAqXFxuICogV2Ugd3JpdGUgb3V0IGVhY2ggYW5pbWF0aW9uIGluIGZ1bGwgKGluc3RlYWQgb2Ygc2VwYXJhdGluZyBhbmltYXRpb24tbmFtZSxcXG4gKiBhbmltYXRpb24tZHVyYXRpb24sIGV0Yy4pIGJlY2F1c2UgdW5kZXIgdGhlIHBvbHlmaWxsLCBTYWZhcmkgZG9lcyBub3QgcmVjb2duaXplIHRob3NlXFxuICogc3BlY2lmaWMgcHJvcGVydGllcyBwcm9wZXJseSwgdHJlYXRzIHRoZW0gYXMgLXdlYmtpdC1hbmltYXRpb24sIGFuZCBvdmVycmlkZXMgdGhlXFxuICogb3RoZXIgYW5pbWF0aW9uIHJ1bGVzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL1BvbHltZXIvcGxhdGZvcm0vaXNzdWVzLzUzLlxcbiAqL1xcbi5hY3RpdmUgLnNwaW5uZXItbGF5ZXIuc3Bpbm5lci1ibHVlIHtcXG4gIC8qIGR1cmF0aW9uczogNCAqIEFSQ1RJTUUgKi9cXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aCwgYmx1ZS1mYWRlLWluLW91dCA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcbiAgYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aCwgYmx1ZS1mYWRlLWluLW91dCA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcbn1cXG5cXG4uYWN0aXZlIC5zcGlubmVyLWxheWVyLnNwaW5uZXItcmVkIHtcXG4gIC8qIGR1cmF0aW9uczogNCAqIEFSQ1RJTUUgKi9cXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aCwgcmVkLWZhZGUtaW4tb3V0IDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxuICBhbmltYXRpb246IGZpbGwtdW5maWxsLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoLCByZWQtZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXG59XFxuXFxuLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5zcGlubmVyLXllbGxvdyB7XFxuICAvKiBkdXJhdGlvbnM6IDQgKiBBUkNUSU1FICovXFxuICAtd2Via2l0LWFuaW1hdGlvbjogZmlsbC11bmZpbGwtcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGgsIHllbGxvdy1mYWRlLWluLW91dCA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcbiAgYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aCwgeWVsbG93LWZhZGUtaW4tb3V0IDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxufVxcblxcbi5hY3RpdmUgLnNwaW5uZXItbGF5ZXIuc3Bpbm5lci1ncmVlbiB7XFxuICAvKiBkdXJhdGlvbnM6IDQgKiBBUkNUSU1FICovXFxuICAtd2Via2l0LWFuaW1hdGlvbjogZmlsbC11bmZpbGwtcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGgsIGdyZWVuLWZhZGUtaW4tb3V0IDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxuICBhbmltYXRpb246IGZpbGwtdW5maWxsLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoLCBncmVlbi1mYWRlLWluLW91dCA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcbn1cXG5cXG4uYWN0aXZlIC5zcGlubmVyLWxheWVyLFxcbi5hY3RpdmUgLnNwaW5uZXItbGF5ZXIuc3Bpbm5lci1ibHVlLW9ubHksXFxuLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5zcGlubmVyLXJlZC1vbmx5LFxcbi5hY3RpdmUgLnNwaW5uZXItbGF5ZXIuc3Bpbm5lci15ZWxsb3ctb25seSxcXG4uYWN0aXZlIC5zcGlubmVyLWxheWVyLnNwaW5uZXItZ3JlZW4tb25seSB7XFxuICAvKiBkdXJhdGlvbnM6IDQgKiBBUkNUSU1FICovXFxuICBvcGFjaXR5OiAxO1xcbiAgLXdlYmtpdC1hbmltYXRpb246IGZpbGwtdW5maWxsLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcbiAgYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXG59XFxuXFxuQC13ZWJraXQta2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7XFxuICAxMi41JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTM1ZGVnKTtcXG4gIH0gLyogMC41ICogQVJDU0laRSAqL1xcbiAgMjUlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpO1xcbiAgfSAvKiAxICAgKiBBUkNTSVpFICovXFxuICAzNy41JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNDA1ZGVnKTtcXG4gIH0gLyogMS41ICogQVJDU0laRSAqL1xcbiAgNTAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg1NDBkZWcpO1xcbiAgfSAvKiAyICAgKiBBUkNTSVpFICovXFxuICA2Mi41JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNjc1ZGVnKTtcXG4gIH0gLyogMi41ICogQVJDU0laRSAqL1xcbiAgNzUlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg4MTBkZWcpO1xcbiAgfSAvKiAzICAgKiBBUkNTSVpFICovXFxuICA4Ny41JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoOTQ1ZGVnKTtcXG4gIH0gLyogMy41ICogQVJDU0laRSAqL1xcbiAgdG8ge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEwODBkZWcpO1xcbiAgfSAvKiA0ICAgKiBBUkNTSVpFICovXFxufVxcbkBrZXlmcmFtZXMgZmlsbC11bmZpbGwtcm90YXRlIHtcXG4gIDEyLjUlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMTM1ZGVnKTtcXG4gIH0gLyogMC41ICogQVJDU0laRSAqL1xcbiAgMjUlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcXG4gIH0gLyogMSAgICogQVJDU0laRSAqL1xcbiAgMzcuNSUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0MDVkZWcpO1xcbiAgfSAvKiAxLjUgKiBBUkNTSVpFICovXFxuICA1MCUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg1NDBkZWcpO1xcbiAgfSAvKiAyICAgKiBBUkNTSVpFICovXFxuICA2Mi41JSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDY3NWRlZyk7XFxuICB9IC8qIDIuNSAqIEFSQ1NJWkUgKi9cXG4gIDc1JSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDgxMGRlZyk7XFxuICB9IC8qIDMgICAqIEFSQ1NJWkUgKi9cXG4gIDg3LjUlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoOTQ1ZGVnKTtcXG4gIH0gLyogMy41ICogQVJDU0laRSAqL1xcbiAgdG8ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMDgwZGVnKTtcXG4gIH0gLyogNCAgICogQVJDU0laRSAqL1xcbn1cXG5ALXdlYmtpdC1rZXlmcmFtZXMgYmx1ZS1mYWRlLWluLW91dCB7XFxuICBmcm9tIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDI1JSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICAyNiUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgODklIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG4gIDkwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBibHVlLWZhZGUtaW4tb3V0IHtcXG4gIGZyb20ge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgMjUlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDI2JSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICA4OSUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgOTAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbn1cXG5ALXdlYmtpdC1rZXlmcmFtZXMgcmVkLWZhZGUtaW4tb3V0IHtcXG4gIGZyb20ge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgMTUlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG4gIDI1JSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICA1MCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgNTElIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyByZWQtZmFkZS1pbi1vdXQge1xcbiAgZnJvbSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICAxNSUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgMjUlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICA1MSUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbn1cXG5ALXdlYmtpdC1rZXlmcmFtZXMgeWVsbG93LWZhZGUtaW4tb3V0IHtcXG4gIGZyb20ge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgNDAlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICA3NSUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgNzYlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyB5ZWxsb3ctZmFkZS1pbi1vdXQge1xcbiAgZnJvbSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICA0MCUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDc1JSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICA3NiUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbn1cXG5ALXdlYmtpdC1rZXlmcmFtZXMgZ3JlZW4tZmFkZS1pbi1vdXQge1xcbiAgZnJvbSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICA2NSUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgNzUlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDkwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBncmVlbi1mYWRlLWluLW91dCB7XFxuICBmcm9tIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gIH1cXG4gIDY1JSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICB9XFxuICA3NSUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgOTAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbn1cXG4vKipcXG4gKiBQYXRjaCB0aGUgZ2FwIHRoYXQgYXBwZWFyIGJldHdlZW4gdGhlIHR3byBhZGphY2VudCBkaXYuY2lyY2xlLWNsaXBwZXIgd2hpbGUgdGhlXFxuICogc3Bpbm5lciBpcyByb3RhdGluZyAoYXBwZWFycyBvbiBDaHJvbWUgMzgsIFNhZmFyaSA3LjEsIGFuZCBJRSAxMSkuXFxuICovXFxuLmdhcC1wYXRjaCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiA0NSU7XFxuICB3aWR0aDogMTAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGJvcmRlci1jb2xvcjogaW5oZXJpdDtcXG59XFxuXFxuLmdhcC1wYXRjaCAuY2lyY2xlIHtcXG4gIHdpZHRoOiAxMDAwJTtcXG4gIGxlZnQ6IC00NTAlO1xcbn1cXG5cXG4uY2lyY2xlLWNsaXBwZXIge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDUwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBib3JkZXItY29sb3I6IGluaGVyaXQ7XFxufVxcbi5jaXJjbGUtY2xpcHBlciAuY2lyY2xlIHtcXG4gIHdpZHRoOiAyMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgYm9yZGVyLXdpZHRoOiAzcHg7IC8qIFNUUk9LRVdJRFRIICovXFxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbiAgYm9yZGVyLWNvbG9yOiBpbmhlcml0O1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBub25lO1xcbiAgYW5pbWF0aW9uOiBub25lO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7XFxufVxcbi5jaXJjbGUtY2xpcHBlci5sZWZ0IC5jaXJjbGUge1xcbiAgbGVmdDogMDtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTI5ZGVnKTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDEyOWRlZyk7XFxufVxcbi5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHtcXG4gIGxlZnQ6IC0xMDAlO1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpO1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoLTEyOWRlZyk7XFxufVxcblxcbi5hY3RpdmUgLmNpcmNsZS1jbGlwcGVyLmxlZnQgLmNpcmNsZSB7XFxuICAvKiBkdXJhdGlvbjogQVJDVElNRSAqL1xcbiAgLXdlYmtpdC1hbmltYXRpb246IGxlZnQtc3BpbiAxMzMzbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcbiAgYW5pbWF0aW9uOiBsZWZ0LXNwaW4gMTMzM21zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXG59XFxuXFxuLmFjdGl2ZSAuY2lyY2xlLWNsaXBwZXIucmlnaHQgLmNpcmNsZSB7XFxuICAvKiBkdXJhdGlvbjogQVJDVElNRSAqL1xcbiAgLXdlYmtpdC1hbmltYXRpb246IHJpZ2h0LXNwaW4gMTMzM21zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXG4gIGFuaW1hdGlvbjogcmlnaHQtc3BpbiAxMzMzbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcbn1cXG5cXG5ALXdlYmtpdC1rZXlmcmFtZXMgbGVmdC1zcGluIHtcXG4gIGZyb20ge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzMGRlZyk7XFxuICB9XFxuICA1MCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC01ZGVnKTtcXG4gIH1cXG4gIHRvIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIGxlZnQtc3BpbiB7XFxuICBmcm9tIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKTtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKC01ZGVnKTtcXG4gIH1cXG4gIHRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKTtcXG4gIH1cXG59XFxuQC13ZWJraXQta2V5ZnJhbWVzIHJpZ2h0LXNwaW4ge1xcbiAgZnJvbSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZyk7XFxuICB9XFxuICA1MCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDVkZWcpO1xcbiAgfVxcbiAgdG8ge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHJpZ2h0LXNwaW4ge1xcbiAgZnJvbSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNWRlZyk7XFxuICB9XFxuICB0byB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpO1xcbiAgfVxcbn1cXG4jc3Bpbm5lckNvbnRhaW5lci5jb29sZG93biB7XFxuICAvKiBkdXJhdGlvbjogU0hSSU5LX1RJTUUgKi9cXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIDE1NjhtcyBsaW5lYXIgaW5maW5pdGUsIGZhZGUtb3V0IDQwMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7XFxuICBhbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgMTU2OG1zIGxpbmVhciBpbmZpbml0ZSwgZmFkZS1vdXQgNDAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtcXG59XFxuXFxuQC13ZWJraXQta2V5ZnJhbWVzIGZhZGUtb3V0IHtcXG4gIGZyb20ge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgdG8ge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIGZhZGUtb3V0IHtcXG4gIGZyb20ge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbiAgdG8ge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbn1cXG4ucHJvZ3Jlc3Mge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgaGVpZ2h0OiA0cHg7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FjZWNlNjtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIG1hcmdpbjogMC4zMzMzMzMzMzMzcmVtIDAgMC42NjY2NjY2NjY3cmVtIDA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4ucHJvZ3Jlc3MgLmRldGVybWluYXRlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICBib3R0b206IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbiAgdHJhbnNpdGlvbjogd2lkdGggMC4zcyBsaW5lYXI7XFxufVxcbi5wcm9ncmVzcyAuaW5kZXRlcm1pbmF0ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZhNjlhO1xcbn1cXG4ucHJvZ3Jlc3MgLmluZGV0ZXJtaW5hdGU6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICBib3R0b206IDA7XFxuICB3aWxsLWNoYW5nZTogbGVmdCwgcmlnaHQ7XFxuICBhbmltYXRpb246IGluZGV0ZXJtaW5hdGUgMi4xcyBjdWJpYy1iZXppZXIoMC42NSwgMC44MTUsIDAuNzM1LCAwLjM5NSkgaW5maW5pdGU7XFxufVxcbi5wcm9ncmVzcyAuaW5kZXRlcm1pbmF0ZTphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgd2lsbC1jaGFuZ2U6IGxlZnQsIHJpZ2h0O1xcbiAgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNob3J0IDIuMXMgY3ViaWMtYmV6aWVyKDAuMTY1LCAwLjg0LCAwLjQ0LCAxKSBpbmZpbml0ZTtcXG4gIGFuaW1hdGlvbi1kZWxheTogMS4xNXM7XFxufVxcblxcbkBrZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZSB7XFxuICAwJSB7XFxuICAgIGxlZnQ6IC0zNSU7XFxuICAgIHJpZ2h0OiAxMDAlO1xcbiAgfVxcbiAgNjAlIHtcXG4gICAgbGVmdDogMTAwJTtcXG4gICAgcmlnaHQ6IC05MCU7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgbGVmdDogMTAwJTtcXG4gICAgcmlnaHQ6IC05MCU7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZS1zaG9ydCB7XFxuICAwJSB7XFxuICAgIGxlZnQ6IC0yMDAlO1xcbiAgICByaWdodDogMTAwJTtcXG4gIH1cXG4gIDYwJSB7XFxuICAgIGxlZnQ6IDEwNyU7XFxuICAgIHJpZ2h0OiAtOCU7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgbGVmdDogMTA3JTtcXG4gICAgcmlnaHQ6IC04JTtcXG4gIH1cXG59XFxuLmZsYXNoLW1lc3NhZ2Uge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcGFkZGluZzogMnB4IDEwcHg7XFxuICBib3JkZXItcmFkaXVzOiA1cHg7XFxuICB6LWluZGV4OiA5OTk5OTtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbn1cXG4uZmxhc2gtbWVzc2FnZS5pbmZvIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiZWRkYmU7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjNzI4ZjcyO1xcbn1cXG4uZmxhc2gtbWVzc2FnZS53YXJuIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWU2ZDA7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZWE3ZDE3O1xcbn1cXG4uZmxhc2gtbWVzc2FnZS5lcnJvciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTViMmJjO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2UzMzI1NztcXG59XFxuXFxuQGtleWZyYW1lcyBtZXNzYWdlSW4ge1xcbiAgZnJvbSB7XFxuICAgIHJpZ2h0OiA4MCU7XFxuICB9XFxuICB0byB7XFxuICAgIHJpZ2h0OiAwO1xcbiAgfVxcbn1cXG4ucHVsc2Uge1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5wdWxzZTo6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcywgdHJhbnNmb3JtIDAuM3M7XFxuICBhbmltYXRpb246IHB1bHNlLWFuaW1hdGlvbiAxcyBjdWJpYy1iZXppZXIoMC4yNCwgMCwgMC4zOCwgMSkgaW5maW5pdGU7XFxufVxcblxcbkBrZXlmcmFtZXMgcHVsc2UtYW5pbWF0aW9uIHtcXG4gIDAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMS41KTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNSk7XFxuICB9XFxufVxcbi5kcm9wZG93bi1jb250ZW50IHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBtYXJnaW46IDA7XFxuICBkaXNwbGF5OiBmbG93O1xcbiAgbWluLXdpZHRoOiAxMDBweDtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbiAgei1pbmRleDogOTk5OTtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcXG59XFxuLmRyb3Bkb3duLWNvbnRlbnQ6Zm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG59XFxuLmRyb3Bkb3duLWNvbnRlbnQgbGkge1xcbiAgY2xlYXI6IGJvdGg7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjg3KTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIG1pbi1oZWlnaHQ6IDUwcHg7XFxuICBsaW5lLWhlaWdodDogMS41cmVtO1xcbiAgd2lkdGg6IDEwMCU7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbn1cXG4uZHJvcGRvd24tY29udGVudCBsaTpob3ZlciwgLmRyb3Bkb3duLWNvbnRlbnQgbGkuYWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWU7XFxufVxcbi5kcm9wZG93bi1jb250ZW50IGxpOmZvY3VzIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcbi5kcm9wZG93bi1jb250ZW50IGxpLmRpdmlkZXIge1xcbiAgbWluLWhlaWdodDogMDtcXG4gIGhlaWdodDogMXB4O1xcbn1cXG4uZHJvcGRvd24tY29udGVudCBsaSA+IGEsIC5kcm9wZG93bi1jb250ZW50IGxpID4gc3BhbiB7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICBjb2xvcjogIzI2YTY5YTtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgbGluZS1oZWlnaHQ6IDIycHg7XFxuICBwYWRkaW5nOiAxNHB4IDE2cHg7XFxufVxcbi5kcm9wZG93bi1jb250ZW50IGxpID4gc3BhbiA+IGxhYmVsIHtcXG4gIHRvcDogMXB4O1xcbiAgbGVmdDogMDtcXG4gIGhlaWdodDogMThweDtcXG59XFxuLmRyb3Bkb3duLWNvbnRlbnQgbGkgPiBhID4gaSB7XFxuICBoZWlnaHQ6IGluaGVyaXQ7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIGZsb2F0OiBsZWZ0O1xcbiAgbWFyZ2luOiAwIDI0cHggMCAwO1xcbiAgd2lkdGg6IDI0cHg7XFxufVxcblxcbmJvZHkua2V5Ym9hcmQtZm9jdXNlZCAuZHJvcGRvd24tY29udGVudCBsaTpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGFkYWRhO1xcbn1cXG5cXG4uaW5wdXQtZmllbGQuY29sIC5kcm9wZG93bi1jb250ZW50IFt0eXBlPWNoZWNrYm94XSArIGxhYmVsIHtcXG4gIHRvcDogMXB4O1xcbiAgbGVmdDogMDtcXG4gIGhlaWdodDogMThweDtcXG4gIHRyYW5zZm9ybTogbm9uZTtcXG59XFxuXFxuLmRyb3Bkb3duLXRyaWdnZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG5uYXYge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTBjYWY5O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDU2cHg7XFxuICBsaW5lLWhlaWdodDogNTZweDtcXG59XFxubmF2Lm5hdi1leHRlbmRlZCB7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcbm5hdi5uYXYtZXh0ZW5kZWQgLm5hdi13cmFwcGVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgbWluLWhlaWdodDogNTZweDtcXG4gIGhlaWdodDogYXV0bztcXG59XFxubmF2Lm5hdi1leHRlbmRlZCAubmF2LWNvbnRlbnQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcXG59XFxubmF2IGEge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbm5hdiBpLFxcbm5hdiBbY2xhc3NePW1kaS1dLCBuYXYgW2NsYXNzKj1tZGktXSxcXG5uYXYgaS5zLWljb25zIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbiAgaGVpZ2h0OiA1NnB4O1xcbiAgbGluZS1oZWlnaHQ6IDU2cHg7XFxufVxcbm5hdiAubmF2LXdyYXBwZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiA5OTNweCkge1xcbiAgbmF2IGEuc2lkZW5hdi10cmlnZ2VyIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG59XFxubmF2IC5zaWRlbmF2LXRyaWdnZXIge1xcbiAgZmxvYXQ6IGxlZnQ7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB6LWluZGV4OiAxO1xcbiAgaGVpZ2h0OiA1NnB4O1xcbiAgbWFyZ2luOiAwIDE4cHg7XFxufVxcbm5hdiAuc2lkZW5hdi10cmlnZ2VyIGkge1xcbiAgaGVpZ2h0OiA1NnB4O1xcbiAgbGluZS1oZWlnaHQ6IDU2cHg7XFxufVxcbm5hdiAuYnJhbmQtbG9nbyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGZvbnQtc2l6ZTogMi4xcmVtO1xcbiAgcGFkZGluZzogMDtcXG59XFxubmF2IC5icmFuZC1sb2dvIGltZy5jaXJjbGUge1xcbiAgaGVpZ2h0OiAzMnB4O1xcbiAgd2lkdGg6IDMycHg7XFxufVxcbm5hdiAuYnJhbmQtbG9nby5jZW50ZXIge1xcbiAgbGVmdDogNTAlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xcbn1cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGggOiA5OTJweCkge1xcbiAgbmF2IC5icmFuZC1sb2dvIHtcXG4gICAgbGVmdDogNTAlO1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XFxuICB9XFxuICBuYXYgLmJyYW5kLWxvZ28ubGVmdCwgbmF2IC5icmFuZC1sb2dvLnJpZ2h0IHtcXG4gICAgcGFkZGluZzogMDtcXG4gICAgdHJhbnNmb3JtOiBub25lO1xcbiAgfVxcbiAgbmF2IC5icmFuZC1sb2dvLmxlZnQge1xcbiAgICBsZWZ0OiAwLjVyZW07XFxuICB9XFxuICBuYXYgLmJyYW5kLWxvZ28ucmlnaHQge1xcbiAgICByaWdodDogMC41cmVtO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgfVxcbn1cXG5uYXYgLmJyYW5kLWxvZ28ucmlnaHQge1xcbiAgcmlnaHQ6IDAuNXJlbTtcXG4gIHBhZGRpbmc6IDA7XFxufVxcbm5hdiAuYnJhbmQtbG9nbyBpLFxcbm5hdiAuYnJhbmQtbG9nbyBbY2xhc3NePW1kaS1dLCBuYXYgLmJyYW5kLWxvZ28gW2NsYXNzKj1tZGktXSxcXG5uYXYgLmJyYW5kLWxvZ28gaS5zLWljb25zIHtcXG4gIGZsb2F0OiBsZWZ0O1xcbiAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xcbn1cXG5uYXYgLm5hdi10aXRsZSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBmb250LXNpemU6IDMycHg7XFxuICBwYWRkaW5nOiAyOHB4IDA7XFxufVxcbm5hdiB1bCB7XFxuICBtYXJnaW46IDA7XFxufVxcbm5hdiB1bCBsaSB7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XFxuICBmbG9hdDogbGVmdDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcbm5hdiB1bCBsaS5hY3RpdmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpO1xcbn1cXG5uYXYgdWwgYSB7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XFxuICBmb250LXNpemU6IDFyZW07XFxuICBjb2xvcjogI2ZmZjtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgcGFkZGluZzogMCAxNXB4O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5uYXYgdWwgYS5idG4sIG5hdiB1bCBhLmJ0bi1zbWFsbCwgbmF2IHVsIGEuYnRuLWxhcmdlLCBuYXYgdWwgYS5idG4tZmxhdCwgbmF2IHVsIGEuYnRuLWZsb2F0aW5nIHtcXG4gIG1hcmdpbi10b3A6IC0ycHg7XFxuICBtYXJnaW4tbGVmdDogMTVweDtcXG4gIG1hcmdpbi1yaWdodDogMTVweDtcXG59XFxubmF2IHVsIGEuYnRuID4gLm1hdGVyaWFsLWljb25zLCBuYXYgdWwgYS5idG4tc21hbGwgPiAubWF0ZXJpYWwtaWNvbnMsIG5hdiB1bCBhLmJ0bi1sYXJnZSA+IC5tYXRlcmlhbC1pY29ucywgbmF2IHVsIGEuYnRuLWZsYXQgPiAubWF0ZXJpYWwtaWNvbnMsIG5hdiB1bCBhLmJ0bi1mbG9hdGluZyA+IC5tYXRlcmlhbC1pY29ucyB7XFxuICBoZWlnaHQ6IGluaGVyaXQ7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG59XFxubmF2IHVsIGE6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpO1xcbn1cXG5uYXYgdWwubGVmdCB7XFxuICBmbG9hdDogbGVmdDtcXG59XFxubmF2IGZvcm0ge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5uYXYgLmlucHV0LWZpZWxkIHtcXG4gIG1hcmdpbjogMDtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxubmF2IC5pbnB1dC1maWVsZCBpbnB1dCB7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBmb250LXNpemU6IDEuMnJlbTtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIHBhZGRpbmctbGVmdDogMnJlbTtcXG59XFxubmF2IC5pbnB1dC1maWVsZCBpbnB1dDpmb2N1cywgbmF2IC5pbnB1dC1maWVsZCBpbnB1dFt0eXBlPXRleHRdOnZhbGlkLCBuYXYgLmlucHV0LWZpZWxkIGlucHV0W3R5cGU9cGFzc3dvcmRdOnZhbGlkLCBuYXYgLmlucHV0LWZpZWxkIGlucHV0W3R5cGU9ZW1haWxdOnZhbGlkLCBuYXYgLmlucHV0LWZpZWxkIGlucHV0W3R5cGU9dXJsXTp2YWxpZCwgbmF2IC5pbnB1dC1maWVsZCBpbnB1dFt0eXBlPWRhdGVdOnZhbGlkIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxufVxcbm5hdiAuaW5wdXQtZmllbGQgbGFiZWwge1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG59XFxubmF2IC5pbnB1dC1maWVsZCBsYWJlbCBpIHtcXG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XFxuICB0cmFuc2l0aW9uOiBjb2xvciAwLjNzO1xcbn1cXG5uYXYgLmlucHV0LWZpZWxkIGxhYmVsLmFjdGl2ZSBpIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG5cXG4ubmF2YmFyLWZpeGVkIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGhlaWdodDogNTZweDtcXG4gIHotaW5kZXg6IDk5NztcXG59XFxuLm5hdmJhci1maXhlZCBuYXYge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiA2MDFweCkge1xcbiAgbmF2Lm5hdi1leHRlbmRlZCAubmF2LXdyYXBwZXIge1xcbiAgICBtaW4taGVpZ2h0OiA2NHB4O1xcbiAgfVxcbiAgbmF2LCBuYXYgLm5hdi13cmFwcGVyIGksIG5hdiBhLnNpZGVuYXYtdHJpZ2dlciwgbmF2IGEuc2lkZW5hdi10cmlnZ2VyIGkge1xcbiAgICBoZWlnaHQ6IDY0cHg7XFxuICAgIGxpbmUtaGVpZ2h0OiA2NHB4O1xcbiAgfVxcbiAgLm5hdmJhci1maXhlZCB7XFxuICAgIGhlaWdodDogNjRweDtcXG4gIH1cXG59XCIsXCJAZm9udC1mYWNlIHtcXG4gIGZvbnQtZmFtaWx5OiBzd2VldGljb25zO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIHNyYzogdXJsKFxcXCIuL2ljb25zL2Fzc2V0cy9Td2VldEljb25zLVJlZ3VsYXIuZW90XFxcIik7XFxuICBzcmM6IHVybChcXFwiLi9pY29ucy9hc3NldHMvU3dlZXRJY29ucy1SZWd1bGFyLndvZmYyXFxcIikgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpLFxcbiAgdXJsKFxcXCIuL2ljb25zL2Fzc2V0cy9Td2VldEljb25zLVJlZ3VsYXIud29mZlxcXCIpIGZvcm1hdChcXFwid29mZlxcXCIpLFxcbiAgdXJsKFxcXCIuL2ljb25zL2Fzc2V0cy9Td2VldEljb25zLVJlZ3VsYXIudHRmXFxcIikgZm9ybWF0KFxcXCJ0cnVldHlwZVxcXCIpO1xcbn1cXG5cXG5cXG5cXG5cXG4ucy1pY29uLFxcbi5zLWljb25zLFxcbi5zd2VldC1pY29ucyxcXG4uc3dlZXQtaWNvbiB7XFxuICBmb250LWZhbWlseTogc3dlZXRpY29ucywgc2Fucy1zZXJpZjtcXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBmb250LXNpemU6IDI4cHg7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICB3b3JkLXdyYXA6IG5vcm1hbDtcXG4gIGRpcmVjdGlvbjogbHRyO1xcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XFxuICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcXG4gIC13ZWJraXQtZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcXFwibGlnYVxcXCI7XFxuICAtbW96LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogXFxcImxpZ2E9MVxcXCI7XFxuICAtbW96LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogXFxcImxpZ2FcXFwiO1xcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcXFwibGlnYVxcXCI7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblwiLFwiQGltcG9ydCBcXFwiLi9jb2xvcnNWYXJzXFxcIjtcXG5cXG5AZWFjaCAkY29sb3JfbmFtZSwgJGNvbG9yIGluICRjb2xvcnMge1xcbiAgQGVhY2ggJGNvbG9yX3R5cGUsICRjb2xvcl92YWx1ZSBpbiAkY29sb3Ige1xcbiAgICBAaWYgJGNvbG9yX3R5cGUgPT0gXFxcImJhc2VcXFwiIHtcXG4gICAgICAuI3skY29sb3JfbmFtZX0ge1xcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yX3ZhbHVlICFpbXBvcnRhbnQ7XFxuICAgICAgfVxcbiAgICAgIC4jeyRjb2xvcl9uYW1lfS10ZXh0IHtcXG4gICAgICAgIGNvbG9yOiAkY29sb3JfdmFsdWUgIWltcG9ydGFudDtcXG4gICAgICB9XFxuICAgICAgLiN7JGNvbG9yX25hbWV9LXdhdmVzIC53YXZlcy1yaXBwbGUge1xcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yX3ZhbHVlICFpbXBvcnRhbnQ7XFxuICAgICAgfVxcbiAgICB9IEBlbHNlIHtcXG4gICAgICAuI3skY29sb3JfbmFtZX0uI3skY29sb3JfdHlwZX0ge1xcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yX3ZhbHVlICFpbXBvcnRhbnQ7XFxuICAgICAgfVxcbiAgICAgIC4jeyRjb2xvcl9uYW1lfS10ZXh0LnRleHQtI3skY29sb3JfdHlwZX0ge1xcbiAgICAgICAgY29sb3I6ICRjb2xvcl92YWx1ZSAhaW1wb3J0YW50O1xcbiAgICAgIH1cXG4gICAgICAuI3skY29sb3JfbmFtZX0td2F2ZXMud2F2ZXMtI3skY29sb3JfdHlwZX0gLndhdmVzLXJpcHBsZSB7XFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3JfdmFsdWUgIWltcG9ydGFudDtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG59XFxuXFxuLy8gU2hhZGVWYXJzIGNsYXNzZXNcXG4kc2hhZGVzOiAoXFxuICBcXFwiYmxhY2tcXFwiOiAjMDAwMDAwLFxcbiAgXFxcIndoaXRlXFxcIjogI2ZmZmZmZixcXG4gIFxcXCJ0cmFuc3BhcmVudFxcXCI6IHRyYW5zcGFyZW50XFxuKTtcXG4vLyBTaGFkZSBjbGFzc2VzXFxuQGVhY2ggJGNvbG9yLCAkY29sb3JfdmFsdWUgaW4gJHNoYWRlcyB7XFxuICAuI3skY29sb3J9IHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yX3ZhbHVlICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuI3skY29sb3J9LXRleHQge1xcbiAgICBjb2xvcjogJGNvbG9yX3ZhbHVlICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcblxcblxcbi8vIHVzYWdlOiBjb2xvcihcXFwibmFtZV9vZl9jb2xvclxcXCIsIFxcXCJ0eXBlX29mX2NvbG9yXFxcIilcXG4vLyB0byBhdm9pZCB0byByZXBlYXRpbmcgbWFwLWdldCgkY29sb3JzLCAuLi4pXFxuXFxuQGZ1bmN0aW9uIGNvbG9yKCRjb2xvciwgJHR5cGUpIHtcXG4gIEBpZiBtYXAtaGFzLWtleSgkY29sb3JzLCAkY29sb3IpIHtcXG4gICAgJGN1cnJfY29sb3I6IG1hcC1nZXQoJGNvbG9ycywgJGNvbG9yKTtcXG4gICAgQGlmIG1hcC1oYXMta2V5KCRjdXJyX2NvbG9yLCAkdHlwZSkge1xcbiAgICAgIEByZXR1cm4gbWFwLWdldCgkY3Vycl9jb2xvciwgJHR5cGUpO1xcbiAgICB9XFxuICB9XFxuICBAd2FybiBcXFwiVW5rbm93biBgI3skY29sb3J9YCAtIGAjeyR0eXBlfWAgaW4gJGNvbG9ycy5cXFwiO1xcbiAgQHJldHVybiBudWxsO1xcbn1cXG5cIixcIi8qKlxcbiAqIHByaXNtLmpzIFR3aWxpZ2h0IHRoZW1lXFxuICogQmFzZWQgKG1vcmUgb3IgbGVzcykgb24gdGhlIFR3aWxpZ2h0IHRoZW1lIG9yaWdpbmFsbHkgb2YgVGV4dG1hdGUgZmFtZS5cXG4gKiBAYXV0aG9yIFJlbXkgQmFjaFxcbiAqL1xcbiBjb2RlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl0sXFxuIHByZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdIHtcXG5cXHQgY29sb3I6IHdoaXRlO1xcblxcdCBiYWNrZ3JvdW5kOiBub25lO1xcblxcdCBmb250LWZhbWlseTogQ29uc29sYXMsIE1vbmFjbywgJ0FuZGFsZSBNb25vJywgJ1VidW50dSBNb25vJywgbW9ub3NwYWNlO1xcblxcdCB0ZXh0LWFsaWduOiBsZWZ0O1xcblxcdCB0ZXh0LXNoYWRvdzogMCAtLjFlbSAuMmVtIGJsYWNrO1xcblxcdCB3aGl0ZS1zcGFjZTogcHJlO1xcblxcdCB3b3JkLXNwYWNpbmc6IG5vcm1hbDtcXG5cXHQgd29yZC1icmVhazogbm9ybWFsO1xcblxcdCB3b3JkLXdyYXA6IG5vcm1hbDtcXG5cXHQgbGluZS1oZWlnaHQ6IDEuNTtcXG4gXFxuXFx0IC1tb3otdGFiLXNpemU6IDQ7XFxuXFx0IC1vLXRhYi1zaXplOiA0O1xcblxcdCB0YWItc2l6ZTogNDtcXG4gXFxuXFx0IC13ZWJraXQtaHlwaGVuczogbm9uZTtcXG5cXHQgLW1vei1oeXBoZW5zOiBub25lO1xcblxcdCAtbXMtaHlwaGVuczogbm9uZTtcXG5cXHQgaHlwaGVuczogbm9uZTtcXG4gfVxcbiBcXG4gcHJlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl0sXFxuIDpub3QocHJlKSA+IGNvZGVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSB7XFxuXFx0IGJhY2tncm91bmQ6IGhzbCgwLCAwJSwgOCUpOyAvKiAjMTQxNDE0ICovXFxuIH1cXG4gXFxuIC8qIENvZGUgYmxvY2tzICovXFxuIHByZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdIHtcXG5cXHQgYm9yZGVyLXJhZGl1czogLjVlbTtcXG5cXHQgYm9yZGVyOiAuM2VtIHNvbGlkIGhzbCgwLCAwJSwgMzMlKTsgLyogIzI4MkEyQiAqL1xcblxcdCBib3gtc2hhZG93OiAxcHggMXB4IC41ZW0gYmxhY2sgaW5zZXQ7XFxuXFx0IG1hcmdpbjogLjVlbSAwO1xcblxcdCBvdmVyZmxvdzogYXV0bztcXG5cXHQgcGFkZGluZzogMWVtO1xcbiB9XFxuIFxcbiBwcmVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXTo6LW1vei1zZWxlY3Rpb24ge1xcblxcdCAvKiBGaXJlZm94ICovXFxuXFx0IGJhY2tncm91bmQ6IGhzbCgyMDAsIDQlLCAxNiUpOyAvKiAjMjgyQTJCICovXFxuIH1cXG4gXFxuIHByZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdOjpzZWxlY3Rpb24ge1xcblxcdCAvKiBTYWZhcmkgKi9cXG5cXHQgYmFja2dyb3VuZDogaHNsKDIwMCwgNCUsIDE2JSk7IC8qICMyODJBMkIgKi9cXG4gfVxcbiBcXG4gLyogVGV4dCBTZWxlY3Rpb24gY29sb3VyICovXFxuIHByZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdOjotbW96LXNlbGVjdGlvbiwgcHJlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl0gOjotbW96LXNlbGVjdGlvbixcXG4gY29kZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdOjotbW96LXNlbGVjdGlvbiwgY29kZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdIDo6LW1vei1zZWxlY3Rpb24ge1xcblxcdCB0ZXh0LXNoYWRvdzogbm9uZTtcXG5cXHQgYmFja2dyb3VuZDogaHNsYSgwLCAwJSwgOTMlLCAwLjE1KTsgLyogI0VERURFRCAqL1xcbiB9XFxuIFxcbiBwcmVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXTo6c2VsZWN0aW9uLCBwcmVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSA6OnNlbGVjdGlvbixcXG4gY29kZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdOjpzZWxlY3Rpb24sIGNvZGVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSA6OnNlbGVjdGlvbiB7XFxuXFx0IHRleHQtc2hhZG93OiBub25lO1xcblxcdCBiYWNrZ3JvdW5kOiBoc2xhKDAsIDAlLCA5MyUsIDAuMTUpOyAvKiAjRURFREVEICovXFxuIH1cXG4gXFxuIC8qIElubGluZSBjb2RlICovXFxuIDpub3QocHJlKSA+IGNvZGVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSB7XFxuXFx0IGJvcmRlci1yYWRpdXM6IC4zZW07XFxuXFx0IGJvcmRlcjogLjEzZW0gc29saWQgaHNsKDAsIDAlLCAzMyUpOyAvKiAjNTQ1NDU0ICovXFxuXFx0IGJveC1zaGFkb3c6IDFweCAxcHggLjNlbSAtLjFlbSBibGFjayBpbnNldDtcXG5cXHQgcGFkZGluZzogLjE1ZW0gLjJlbSAuMDVlbTtcXG5cXHQgd2hpdGUtc3BhY2U6IG5vcm1hbDtcXG4gfVxcbiBcXG4gLnRva2VuLmNvbW1lbnQsXFxuIC50b2tlbi5wcm9sb2csXFxuIC50b2tlbi5kb2N0eXBlLFxcbiAudG9rZW4uY2RhdGEge1xcblxcdCBjb2xvcjogaHNsKDAsIDAlLCA0NyUpOyAvKiAjNzc3Nzc3ICovXFxuIH1cXG4gXFxuIC50b2tlbi5wdW5jdHVhdGlvbiB7XFxuXFx0IG9wYWNpdHk6IC43O1xcbiB9XFxuIFxcbiAubmFtZXNwYWNlIHtcXG5cXHQgb3BhY2l0eTogLjc7XFxuIH1cXG4gXFxuIC50b2tlbi50YWcsXFxuIC50b2tlbi5ib29sZWFuLFxcbiAudG9rZW4ubnVtYmVyLFxcbiAudG9rZW4uZGVsZXRlZCB7XFxuXFx0IGNvbG9yOiBoc2woMTQsIDU4JSwgNTUlKTsgLyogI0NGNkE0QyAqL1xcbiB9XFxuIFxcbiAudG9rZW4ua2V5d29yZCxcXG4gLnRva2VuLnByb3BlcnR5LFxcbiAudG9rZW4uc2VsZWN0b3IsXFxuIC50b2tlbi5jb25zdGFudCxcXG4gLnRva2VuLnN5bWJvbCxcXG4gLnRva2VuLmJ1aWx0aW4ge1xcblxcdCBjb2xvcjogaHNsKDUzLCA4OSUsIDc5JSk7IC8qICNGOUVFOTggKi9cXG4gfVxcbiBcXG4gLnRva2VuLmF0dHItbmFtZSxcXG4gLnRva2VuLmF0dHItdmFsdWUsXFxuIC50b2tlbi5zdHJpbmcsXFxuIC50b2tlbi5jaGFyLFxcbiAudG9rZW4ub3BlcmF0b3IsXFxuIC50b2tlbi5lbnRpdHksXFxuIC50b2tlbi51cmwsXFxuIC5sYW5ndWFnZS1jc3MgLnRva2VuLnN0cmluZyxcXG4gLnN0eWxlIC50b2tlbi5zdHJpbmcsXFxuIC50b2tlbi52YXJpYWJsZSxcXG4gLnRva2VuLmluc2VydGVkIHtcXG5cXHQgY29sb3I6IGhzbCg3NiwgMjElLCA1MiUpOyAvKiAjOEY5RDZBICovXFxuIH1cXG4gXFxuIC50b2tlbi5hdHJ1bGUge1xcblxcdCBjb2xvcjogaHNsKDIxOCwgMjIlLCA1NSUpOyAvKiAjNzU4N0E2ICovXFxuIH1cXG4gXFxuIC50b2tlbi5yZWdleCxcXG4gLnRva2VuLmltcG9ydGFudCB7XFxuXFx0IGNvbG9yOiBoc2woNDIsIDc1JSwgNjUlKTsgLyogI0U5QzA2MiAqL1xcbiB9XFxuIFxcbiAudG9rZW4uaW1wb3J0YW50LFxcbiAudG9rZW4uYm9sZCB7XFxuXFx0IGZvbnQtd2VpZ2h0OiBib2xkO1xcbiB9XFxuIC50b2tlbi5pdGFsaWMge1xcblxcdCBmb250LXN0eWxlOiBpdGFsaWM7XFxuIH1cXG4gXFxuIC50b2tlbi5lbnRpdHkge1xcblxcdCBjdXJzb3I6IGhlbHA7XFxuIH1cXG4gXFxuIHByZVtkYXRhLWxpbmVdIHtcXG5cXHQgcGFkZGluZzogMWVtIDAgMWVtIDNlbTtcXG5cXHQgcG9zaXRpb246IHJlbGF0aXZlO1xcbiB9XFxuIFxcbiAvKiBNYXJrdXAgKi9cXG4gLmxhbmd1YWdlLW1hcmt1cCAudG9rZW4udGFnLFxcbiAubGFuZ3VhZ2UtbWFya3VwIC50b2tlbi5hdHRyLW5hbWUsXFxuIC5sYW5ndWFnZS1tYXJrdXAgLnRva2VuLnB1bmN0dWF0aW9uIHtcXG5cXHQgY29sb3I6IGhzbCgzMywgMzMlLCA1MiUpOyAvKiAjQUM4ODVCICovXFxuIH1cXG4gXFxuIC8qIE1ha2UgdGhlIHRva2VucyBzaXQgYWJvdmUgdGhlIGxpbmUgaGlnaGxpZ2h0IHNvIHRoZSBjb2xvdXJzIGRvbid0IGxvb2sgZmFkZWQuICovXFxuIC50b2tlbiB7XFxuXFx0IHBvc2l0aW9uOiByZWxhdGl2ZTtcXG5cXHQgei1pbmRleDogMTtcXG4gfVxcbiBcXG4gLmxpbmUtaGlnaGxpZ2h0IHtcXG5cXHQgYmFja2dyb3VuZDogaHNsYSgwLCAwJSwgMzMlLCAwLjI1KTsgLyogIzU0NTQ1NCAqL1xcblxcdCBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIGhzbGEoMCwgMCUsIDMzJSwgLjEpIDcwJSwgaHNsYSgwLCAwJSwgMzMlLCAwKSk7IC8qICM1NDU0NTQgKi9cXG5cXHQgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCBoc2woMCwgMCUsIDMzJSk7IC8qICM1NDU0NTQgKi9cXG5cXHQgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCBoc2woMCwgMCUsIDMzJSk7IC8qICM1NDU0NTQgKi9cXG5cXHQgbGVmdDogMDtcXG5cXHQgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuXFx0IG1hcmdpbi10b3A6IDAuNzVlbTsgLyogU2FtZSBhcyAucHJpc23igJlzIHBhZGRpbmctdG9wICovXFxuXFx0IHBhZGRpbmc6IGluaGVyaXQgMDtcXG5cXHQgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuXFx0IHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG5cXHQgcmlnaHQ6IDA7XFxuXFx0IHdoaXRlLXNwYWNlOiBwcmU7XFxuXFx0IHotaW5kZXg6IDA7XFxuIH1cXG4gXFxuIC5saW5lLWhpZ2hsaWdodDpiZWZvcmUsXFxuIC5saW5lLWhpZ2hsaWdodFtkYXRhLWVuZF06YWZ0ZXIge1xcblxcdCBiYWNrZ3JvdW5kLWNvbG9yOiBoc2woMjE1LCAxNSUsIDU5JSk7IC8qICM4Nzk0QTYgKi9cXG5cXHQgYm9yZGVyLXJhZGl1czogOTk5cHg7XFxuXFx0IGJveC1zaGFkb3c6IDAgMXB4IHdoaXRlO1xcblxcdCBjb2xvcjogaHNsKDI0LCAyMCUsIDk1JSk7IC8qICNGNUYyRjAgKi9cXG5cXHQgY29udGVudDogYXR0cihkYXRhLXN0YXJ0KTtcXG5cXHQgZm9udDogYm9sZCA2NSUvMS41IHNhbnMtc2VyaWY7XFxuXFx0IGxlZnQ6IC42ZW07XFxuXFx0IG1pbi13aWR0aDogMWVtO1xcblxcdCBwYWRkaW5nOiAwIC41ZW07XFxuXFx0IHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG5cXHQgdGV4dC1hbGlnbjogY2VudGVyO1xcblxcdCB0ZXh0LXNoYWRvdzogbm9uZTtcXG5cXHQgdG9wOiAuNGVtO1xcblxcdCB2ZXJ0aWNhbC1hbGlnbjogLjNlbTtcXG4gfVxcbiBcXG4gLmxpbmUtaGlnaGxpZ2h0W2RhdGEtZW5kXTphZnRlciB7XFxuXFx0IGJvdHRvbTogLjRlbTtcXG5cXHQgY29udGVudDogYXR0cihkYXRhLWVuZCk7XFxuXFx0IHRvcDogYXV0bztcXG4gfVxcbiBcIixcIkBpbXBvcnQgJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1VYnVudHUnO1xcblxcblxcblxcbi53aW5kb3cge1xcbiAgZm9udC1mYW1pbHk6ICdVYnVudHUnLCBzYW5zLXNlcmlmOyBcXG4gIGZvbnQtc2l6ZSA6IDE3cHggO1xcbiAgd2lkdGggOiA2MDBweCA7IFxcbiAgbWFyZ2luIDogNzVweCBhdXRvIDsgXFxuICBiYWNrZ3JvdW5kIDogIzJjM2U1MDsgXFxuICBoZWlnaHQgOiAzNTBweCA7IFxcbiAgYm9yZGVyLXJhZGl1cyA6IDVweCA7XFxuICBkaXNwbGF5IDogcmVsYXRpdmUgOyBcXG4gICBib3gtc2hhZG93OiAxMHB4IDEwcHggMTBweCAgIzg4ODg4ODtcXG59XFxuXFxuLmFmdGVyY2xvc2Uge1xcbiAgICBjb2xvciA6ICMzNDQ5NWUgOyBcXG4gICAgZGlzcGxheTogbm9uZSAgOyBcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyICA7IFxcbn1cXG5cXG4ub3BlbiB7XFxuICAgIGNvbG9yIDogI2ZmZiA7IFxcbiAgICBwYWRkaW5nIDogMTVweCA7IFxcbiAgICBiYWNrZ3JvdW5kOiAjMmVjYzcxIDsgXFxuICAgIGJvcmRlci1yYWRpdXM6IDRweCA7IFxcbiAgICBib3JkZXI6IG5vbmUgOyBcXG59XFxuXFxuLmJhc2gge1xcbiAgd2lkdGggOiA2MDBweCA7IFxcbiAgYmFja2dyb3VuZCA6ICMzNDQ5NWU7IFxcbiAgaGVpZ2h0IDogMzEwcHggOyBcXG4gIGJvcmRlci1yYWRpdXMgOiA1cHggO1xcbiAgdG9wOiA0MHB4O1xcbiAgZGlzcGxheSA6IGFic29sdXRlOyBcXG4gIGNvbG9yIDogI2ZmZiA7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgLmNvbW1hbmR7XFxuICAgICY6OmJlZm9yZXtcXG4gICAgICAgIGNvbnRlbnQ6IFxcXCJ1c2VyQG1hY2hpbmUgJCA6IFxcXCI7XFxuICAgICAgICBjb2xvcjogIzJlY2M3MTtcXG4gICAgfVxcblxcbiAgfVxcbiAgLnJlc3VsdGF7XFxuICAgICY6OmJlZm9yZXtcXG4gICAgICAgIGNvbnRlbnQ6IFxcXCI+PlxcXCI7XFxuICAgICAgICBjb2xvcjogIzJlY2M3MTtcXG4gICAgfVxcblxcbiAgfVxcbn1cXG5cXG4vKiBlZmZlY3RlZCBieSBjb250cm9sbGVycyAqL1xcblxcbi53aW5kb3dtYXgge1xcbiAgd2lkdGggOiAxMDAlIDsgXFxuICBtYXJnaW4gOiBhdXRvIDsgXFxuICBiYWNrZ3JvdW5kIDogIzJjM2U1MDsgXFxuICBoZWlnaHQgOiAxMDAwcHg7IFxcbiAgYm9yZGVyLXJhZGl1cyA6IDVweCA7XFxuICBkaXNwbGF5IDogcmVsYXRpdmUgOyBcXG59XFxuXFxuLndpbmRvd21pbiB7XFxuICB3aWR0aCA6IDMwMHB4IDsgXFxuICBoZWlnaHQgOiA0NXB4IDtcXG4gIGJhY2tncm91bmQgOiAjMmMzZTUwOyBcXG4gIGJvcmRlci1yYWRpdXMgOiA1cHggOyBcXG4gIGJvdHRvbSA6IDAgOyBcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG59XFxuXFxuLmJhc2htYXgge1xcbiAgZGlzcGxheSA6IGFic29sdXRlIDsgXFxuICB3aWR0aCA6IDEwMCUgOyBcXG4gIGJhY2tncm91bmQgOiAjMzQ0OTVlOyBcXG4gIGhlaWdodCA6IDk2MHB4IDsgXFxuICBib3JkZXItcmFkaXVzIDogNXB4IDtcXG4gIGJvdHRvbTogMDtcXG4gIGNvbG9yIDogI2ZmZiA7XFxufVxcblxcbi8qICEtLWVuZC0tISAqL1xcblxcbi5idXR0b25zIHtcXG4gIHdpZHRoIDogMTVweCA7XFxuICBoZWlnaHQgOiAxNXB4IDsgXFxuICBib3JkZXItcmFkaXVzIDogNTAlIDtcXG4gIGZsb2F0IDogcmlnaHQgOyBcXG4gIG1hcmdpbiA6IDEzcHggNHB4O1xcbiAgYm9yZGVyOiBub25lIDsgXFxufVxcblxcbi5jbG9zZSB7XFxuICBiYWNrZ3JvdW5kIDogI2U3NGMzYyA7XFxufVxcblxcbi5tYXhpbWl6ZXtcXG4gIGJhY2tncm91bmQgOiAjZjFjNDBmIDtcXG59XFxuXFxuLm1pbmltaXple1xcbiAgYmFja2dyb3VuZCA6ICMyZWNjNzEgO1xcbn1cXG5cXG4ucmVzdWx0IHtcXG4gIGRpc3BsYXkgOiBub25lIDtcXG59XFxuXFxuLmNvbnRyb2xzIHtcXG4gIGhlaWdodCA6IDQwcHggOyBcXG4gIHRvcCA6IDAgOyBcXG59XFxuXFxuLnRpdGxlIHtcXG4gICAgY29sb3IgOiAjZmZmIDsgXFxuICAgIGZvbnQtd2VpZ2h0OiBib2xkIDsgXFxuICAgIHBhZGRpbmcgOiAxMHB4O1xcbn1cXG5cIixcIi5tYXRlcmlhbC10b29sdGlwIHtcXG4gIHBhZGRpbmc6IDEwcHggOHB4O1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgei1pbmRleDogMjAwMDtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgbWluLWhlaWdodDogMzZweDtcXG4gIGxpbmUtaGVpZ2h0OiAxMjAlO1xcbiAgb3BhY2l0eTogMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG1heC13aWR0aDogY2FsYygxMDAlIC0gNHB4KTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzIzMjMyO1xcbn1cXG5cXG4uYmFja2Ryb3Age1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgb3BhY2l0eTogMDtcXG4gIGhlaWdodDogN3B4O1xcbiAgd2lkdGg6IDE0cHg7XFxuICBib3JkZXItcmFkaXVzOiAwIDAgNTAlIDUwJTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzMjMyMzI7XFxuICB6LWluZGV4OiAtMTtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDUwJSAwJTtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuXCIsXCIvLyBaLWxldmVsc1xcbi5zaGFkb3ctMCB7XFxuICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XFxufVxcblxcbi8qIDJkcCBlbGV2YXRpb24gbW9kaWZpZWQqL1xcbi5zaGFkb3ctMSB7XFxuICBib3gtc2hhZG93OiAwIDJweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLFxcbiAgICAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMik7XFxufVxcbi5zaGFkb3ctMS1oYWxmIHtcXG4gIGJveC1zaGFkb3c6IDAgM3B4IDNweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMXB4IDdweCAwIHJnYmEoMCwgMCwgMCwgMC4xMiksXFxuICAgIDAgM3B4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcXG59XFxuXFxuLyogNmRwIGVsZXZhdGlvbiBtb2RpZmllZCovXFxuLnNoYWRvdy0yIHtcXG4gIGJveC1zaGFkb3c6IDAgNHB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMXB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLFxcbiAgICAwIDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMyk7XFxufVxcblxcbi8qIDEyZHAgZWxldmF0aW9uIG1vZGlmaWVkKi9cXG4uc2hhZG93LTMge1xcbiAgYm94LXNoYWRvdzogMCA4cHggMTdweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSxcXG4gICAgMCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKSwgMCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xcbn1cXG5cXG4vKiAxNmRwIGVsZXZhdGlvbiAqL1xcbi5zaGFkb3ctNCB7XFxuICBib3gtc2hhZG93OiAwIDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSxcXG4gICAgMCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKSwgMCA4cHggMTBweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKTtcXG59XFxuXFxuLyogMjRkcCBlbGV2YXRpb24gKi9cXG4uc2hhZG93LTUge1xcbiAgYm94LXNoYWRvdzogMCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksXFxuICAgIDAgOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpO1xcbn1cXG5cXG4vKiAyNGRwIGVsZXZhdGlvbiAqL1xcbi5pbnZlcnQtc2hhZG93LTUge1xcbiAgICBib3gtc2hhZG93OiBcXG4gICAgMzhweCAwIDAgMCByZ2JhKDAsIDAsIDAsIDAuMTQpLFxcbiAgICA0NnB4IDAgMCAwIHJnYmEoMCwgMCwgMCwgMC4xMiksIFxcbiAgICAxNXB4IDAgMCAwIHJnYmEoMCwgMCwgMCwgMC4yKTtcXG4gIH1cXG5cXG4uaG92ZXJhYmxlIHtcXG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4yNXM7XFxuXFxuICAmOmhvdmVyIHtcXG4gICAgYm94LXNoYWRvdzogMCA4cHggMTdweCAwIHJnYmEoMCwgMCwgMCwgMC4yKSxcXG4gICAgICAwIDZweCAyMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE5KTtcXG4gIH1cXG59XFxuXCIsXCJcXG4vKiFcXG4gKiBXYXZlcyB2MC42LjBcXG4gKiBodHRwOi8vZmlhbi5teS5pZC9XYXZlc1xcbiAqXFxuICogQ29weXJpZ2h0IDIwMTQgQWxmaWFuYSBFLiBTaWJ1ZWEgYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9maWFucy9XYXZlcy9ibG9iL21hc3Rlci9MSUNFTlNFXFxuICovXFxuXFxuXFxuLndhdmVzLWVmZmVjdCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIHotaW5kZXg6IDE7XFxuICB0cmFuc2l0aW9uOiAuM3MgZWFzZS1vdXQ7XFxuXFxuICAud2F2ZXMtcmlwcGxlIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAgIHdpZHRoOiAyMHB4O1xcbiAgICBoZWlnaHQ6IDIwcHg7XFxuICAgIG1hcmdpbi10b3A6LTEwcHg7XFxuICAgIG1hcmdpbi1sZWZ0Oi0xMHB4O1xcbiAgICBvcGFjaXR5OiAwO1xcblxcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMik7XFxuICAgIHRyYW5zaXRpb246IGFsbCAwLjdzIGVhc2Utb3V0O1xcbiAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm0sIG9wYWNpdHk7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgfVxcblxcbiAgLy8gV2F2ZXMgQ29sb3JzXFxuICAmLndhdmVzLWxpZ2h0IC53YXZlcy1yaXBwbGUge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDUpO1xcbiAgfVxcbiAgJi53YXZlcy1yZWQgLndhdmVzLXJpcHBsZSB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjQ0LCA2NywgNTQsIC43MCk7XFxuICB9XFxuICAmLndhdmVzLXllbGxvdyAud2F2ZXMtcmlwcGxlIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDIzNSwgNTksIC43MCk7XFxuICB9XFxuICAmLndhdmVzLW9yYW5nZSAud2F2ZXMtcmlwcGxlIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDE1MiwgMCwgLjcwKTtcXG4gIH1cXG4gICYud2F2ZXMtcHVycGxlIC53YXZlcy1yaXBwbGUge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE1NiwgMzksIDE3NiwgMC43MCk7XFxuICB9XFxuICAmLndhdmVzLWdyZWVuIC53YXZlcy1yaXBwbGUge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDc2LCAxNzUsIDgwLCAwLjcwKTtcXG4gIH1cXG4gICYud2F2ZXMtdGVhbCAud2F2ZXMtcmlwcGxlIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAxNTAsIDEzNiwgMC43MCk7XFxuICB9XFxuXFxuICAvLyBTdHlsZSBpbnB1dCBidXR0b24gYnVnLlxcbiAgaW5wdXRbdHlwZT1cXFwiYnV0dG9uXFxcIl0sIGlucHV0W3R5cGU9XFxcInJlc2V0XFxcIl0sIGlucHV0W3R5cGU9XFxcInN1Ym1pdFxcXCJdIHtcXG4gICAgYm9yZGVyOiAwO1xcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XFxuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gICAgdGV4dC10cmFuc2Zvcm06IGluaGVyaXQ7XFxuICAgIGJhY2tncm91bmQ6IG5vbmU7XFxuICB9XFxuXFxuICBpbWcge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIHotaW5kZXg6IC0xO1xcbiAgfVxcbn1cXG5cXG4ud2F2ZXMtbm90cmFuc2l0aW9uIHtcXG4gIHRyYW5zaXRpb246IG5vbmUgI3tcXFwiIWltcG9ydGFudFxcXCJ9O1xcbn1cXG5cXG4ud2F2ZXMtY2lyY2xlIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTtcXG4gIC13ZWJraXQtbWFzay1pbWFnZTogLXdlYmtpdC1yYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCB3aGl0ZSAxMDAlLCBibGFjayAxMDAlKTtcXG59XFxuXFxuLndhdmVzLWlucHV0LXdyYXBwZXIge1xcbiAgYm9yZGVyLXJhZGl1czogMC4yZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xcblxcbiAgLndhdmVzLWJ1dHRvbi1pbnB1dCB7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgdG9wOiAwO1xcbiAgICBsZWZ0OiAwO1xcbiAgICB6LWluZGV4OiAxO1xcbiAgfVxcbn1cXG5cXG4ud2F2ZXMtY2lyY2xlIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHdpZHRoOiAyLjVlbTtcXG4gIGhlaWdodDogMi41ZW07XFxuICBsaW5lLWhlaWdodDogMi41ZW07XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAtd2Via2l0LW1hc2staW1hZ2U6IG5vbmU7XFxufVxcblxcbi53YXZlcy1ibG9jayB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLyogRmlyZWZveCBCdWc6IGxpbmsgbm90IHRyaWdnZXJlZCAqL1xcbi53YXZlcy1lZmZlY3QgLndhdmVzLXJpcHBsZSB7XFxuICB6LWluZGV4OiAtMTtcXG59XCIsXCIubW9kYWwge1xcbiAgJjpmb2N1cyB7XFxuICAgIG91dGxpbmU6IG5vbmU7XFxuICB9XFxuXFxuICBAZXh0ZW5kIC5zaGFkb3ctNTtcXG5cXG4gIC8vZGlzcGxheTogbm9uZTtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWF4LWhlaWdodDogNzAlO1xcbiAgd2lkdGg6IDU1JTtcXG4gIG1hcmdpbjogYXV0bztcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxuXFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICB3aWxsLWNoYW5nZTogdG9wLCBvcGFjaXR5O1xcblxcbiAgQG1lZGlhICN7JG1lZGl1bS1hbmQtZG93bn0ge1xcbiAgIHdpZHRoOiA4MCU7XFxuICB9XFxuXFxuICBoMSxoMixoMyxoNCB7XFxuICAgIG1hcmdpbi10b3A6IDA7XFxuICB9XFxuXFxuICAubW9kYWwtY29udGVudCB7XFxuICAgIHBhZGRpbmc6IDI0cHg7XFxuICB9XFxuICAubW9kYWwtY2xvc2Uge1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICB9XFxuXFxuICAubW9kYWwtZm9vdGVyIHtcXG4gICAgYm9yZGVyLXJhZGl1czogMCAwIDJweCAycHg7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XFxuICAgIHBhZGRpbmc6IDRweCA2cHg7XFxuICAgIGhlaWdodDogNTZweDtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xcblxcbiAgICAuYnRuLCAuYnRuLWZsYXQge1xcbiAgICAgIG1hcmdpbjogNnB4IDA7XFxuICAgIH1cXG4gIH1cXG4gIC5tb2RhbC1oZWFkZXIge1xcbiAgICBib3JkZXItcmFkaXVzOiAycHggMnB4IDAgMCA7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XFxuICAgIHBhZGRpbmc6IDZweCA0cHg7XFxuICAgIGhlaWdodDogNTZweDtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xcblxcbiAgICAuYnRuLCAuYnRuLWZsYXQge1xcbiAgICAgIG1hcmdpbjogNnB4IDA7XFxuICAgIH1cXG4gIH1cXG59XFxuLm1vZGFsLW92ZXJsYXkge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgei1pbmRleDogOTk5O1xcbiAgdG9wOiAtMjUlO1xcbiAgbGVmdDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgaGVpZ2h0OiAxMjUlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBiYWNrZ3JvdW5kOiAjMDAwO1xcbiAgZGlzcGxheTogbm9uZTtcXG5cXG4gIHdpbGwtY2hhbmdlOiBvcGFjaXR5O1xcbn1cXG5cXG4vLyBNb2RhbCB3aXRoIGZpeGVkIGFjdGlvbiBmb290ZXJcXG4ubW9kYWwubW9kYWwtZml4ZWQtZm9vdGVyIHtcXG4gIHBhZGRpbmc6IDA7XFxuICBoZWlnaHQ6IDcwJTtcXG5cXG4gIC5tb2RhbC1jb250ZW50IHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDU2cHgpO1xcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgb3ZlcmZsb3cteTogYXV0bztcXG4gIH1cXG5cXG4gIC5tb2RhbC1mb290ZXIge1xcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLDAsMCwuMSk7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgYm90dG9tOiAwO1xcbiAgfVxcbn1cXG5cXG4vLyBNb2RhbCBCb3R0b20gU2hlZXQgU3R5bGVcXG4ubW9kYWwuYm90dG9tLXNoZWV0IHtcXG4gIHRvcDogYXV0bztcXG4gIGJvdHRvbTogLTEwMCU7XFxuICBtYXJnaW46IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1heC1oZWlnaHQ6IDQ1JTtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxuICB3aWxsLWNoYW5nZTogYm90dG9tLCBvcGFjaXR5O1xcbn1cXG5cIixcImh0bWwsXFxuYm9keSxcXG4jcm9vdCB7XFxuICBtYXJnaW46IDA7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcblxcblxcbioge1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcblxcbi5ub3NlbGVjdCB7XFxuICAtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7IC8qIGlPUyBTYWZhcmkgKi9cXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7IC8qIFNhZmFyaSAqL1xcbiAgLWtodG1sLXVzZXItc2VsZWN0OiBub25lOyAvKiBLb25xdWVyb3IgSFRNTCAqL1xcbiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsgLyogT2xkIHZlcnNpb25zIG9mIEZpcmVmb3ggKi9cXG4gIC1tcy11c2VyLXNlbGVjdDogbm9uZTsgLyogSW50ZXJuZXQgRXhwbG9yZXIvRWRnZSAqL1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAvKiBOb24tcHJlZml4ZWQgdmVyc2lvbiwgY3VycmVudGx5XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgYnkgQ2hyb21lLCBFZGdlLCBPcGVyYSBhbmQgRmlyZWZveCAqL1xcbn1cXG5cXG51bCB7XFxuICAmOm5vdCguYnJvd3Nlci1kZWZhdWx0KSB7XFxuICAgIHBhZGRpbmctbGVmdDogMDtcXG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcblxcbiAgICAmID4gbGkge1xcbiAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG4gICAgfVxcbiAgfVxcbn1cXG5cXG5hIHtcXG5cXHRjb2xvcjogJGxpbmstY29sb3I7XFxuXFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xcblxcbiAgLy8gR2V0cyByaWQgb2YgdGFwIGFjdGl2ZSBzdGF0ZVxcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnctMTAwIHtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cXG4ucmlnaHQtYWxpZ24ge1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxufVxcbi5jZW50ZXItYWxpZ257XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi52LWNlbnRlciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuXFxuLm1iMSB7XFxuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xcbn1cXG5cXG5cXG4vLyBDb2xsZWN0aW9uc1xcbi5jb2xsZWN0aW9uIHtcXG4gIG1hcmdpbjogJGVsZW1lbnQtdG9wLW1hcmdpbiAwICRlbGVtZW50LWJvdHRvbS1tYXJnaW4gMDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICRjb2xsZWN0aW9uLWJvcmRlci1jb2xvcjtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAuY29sbGVjdGlvbi1pdGVtIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbGxlY3Rpb24tYmctY29sb3I7XFxuICAgIGxpbmUtaGVpZ2h0OiAkY29sbGVjdGlvbi1saW5lLWhlaWdodDtcXG4gICAgcGFkZGluZzogMTBweCAyMHB4O1xcbiAgICBtYXJnaW46IDA7XFxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkY29sbGVjdGlvbi1ib3JkZXItY29sb3I7XFxuXFxuICAgICYuaG92ZXIge1xcbiAgICAgICY6aG92ZXIge1xcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbGxlY3Rpb24taG92ZXItYmctY29sb3I7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIC8vIEF2YXRhciBDb2xsZWN0aW9uXFxuICAgICYuYXZhdGFyIHtcXG4gICAgICBtaW4taGVpZ2h0OiA4NHB4O1xcbiAgICAgIHBhZGRpbmctbGVmdDogNzJweDtcXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuXFxuXFxuICAgICAgLy8gRG9uJ3Qgc3R5bGUgY2lyY2xlcyBpbnNpZGUgcHJlbG9hZGVyIGNsYXNzZXMuXFxuICAgICAgJjpub3QoLmNpcmNsZS1jbGlwcGVyKSA+IC5jaXJjbGUsXFxuICAgICAgOm5vdCguY2lyY2xlLWNsaXBwZXIpID4gLmNpcmNsZSB7XFxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICB3aWR0aDogNDJweDtcXG4gICAgICAgIGhlaWdodDogNDJweDtcXG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgICAgICBsZWZ0OiAxNXB4O1xcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gICAgICB9XFxuXFxuICAgICAgaS5jaXJjbGUge1xcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xcbiAgICAgICAgbGluZS1oZWlnaHQ6IDQycHg7XFxuICAgICAgICBjb2xvcjogI2ZmZjtcXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM5OTk7XFxuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgICAgfVxcblxcblxcbiAgICAgIC50aXRsZSB7XFxuICAgICAgICBmb250LXNpemU6IDE2cHg7XFxuICAgICAgfVxcblxcbiAgICAgIHAge1xcbiAgICAgICAgbWFyZ2luOiAwO1xcbiAgICAgIH1cXG5cXG4gICAgICAuc2Vjb25kYXJ5LWNvbnRlbnQge1xcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgdG9wOiAxNnB4O1xcbiAgICAgICAgcmlnaHQ6IDE2cHg7XFxuICAgICAgfVxcblxcbiAgICB9XFxuXFxuXFxuICAgICY6bGFzdC1jaGlsZCB7XFxuICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcXG4gICAgfVxcblxcbiAgICAmLmFjdGl2ZSB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbGxlY3Rpb24tYWN0aXZlLWJnLWNvbG9yO1xcbiAgICAgIGNvbG9yOiAkY29sbGVjdGlvbi1hY3RpdmUtY29sb3I7XFxuXFxuICAgICAgLnNlY29uZGFyeS1jb250ZW50IHtcXG4gICAgICAgIGNvbG9yOiAjZmZmO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblxcbiAgYS5jb2xsZWN0aW9uLWl0ZW0ge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgdHJhbnNpdGlvbjogLjI1cztcXG4gICAgY29sb3I6ICRjb2xsZWN0aW9uLWxpbmstY29sb3I7XFxuXFxuICAgICY6bm90KC5hY3RpdmUpIHtcXG4gICAgICAmOmhvdmVyIHtcXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xsZWN0aW9uLWhvdmVyLWJnLWNvbG9yO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblxcbiAgJi53aXRoLWhlYWRlciB7XFxuICAgIC5jb2xsZWN0aW9uLWhlYWRlciB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbGxlY3Rpb24tYmctY29sb3I7XFxuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRjb2xsZWN0aW9uLWJvcmRlci1jb2xvcjtcXG4gICAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XFxuICAgIH1cXG5cXG4gICAgLmNvbGxlY3Rpb24taXRlbSB7XFxuICAgICAgcGFkZGluZy1sZWZ0OiAzMHB4O1xcbiAgICB9XFxuXFxuICAgIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyIHtcXG4gICAgICBwYWRkaW5nLWxlZnQ6IDcycHg7XFxuICAgIH1cXG4gIH1cXG5cXG59XFxuXFxuLy8gTWFkZSBsZXNzIHNwZWNpZmljIHRvIGFsbG93IGVhc2llciBvdmVycmlkaW5nXFxuLnNlY29uZGFyeS1jb250ZW50IHtcXG4gIGZsb2F0OiByaWdodDtcXG4gIGNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yO1xcbn1cXG5cXG4uY29sbGFwc2libGUgLmNvbGxlY3Rpb24ge1xcbiAgbWFyZ2luOiAwO1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG5cXG5cXG4ubW9kYWwtb3ZlcmxheSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBoZWlnaHQ6IDEwMHZoO1xcbiAgd2lkdGg6IDEwMHZ3O1xcbiAgcGFkZGluZzogMjBweCAwIDIwcHggMDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgLjUpO1xcbiAgei1pbmRleDogOTk5O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgLy9hbGlnbi1pdGVtczogY2VudGVyO1xcbiAgLmlubmVyZm9ybXtcXG4gICAgbWF4LXdpZHRoOiA2NTBweDtcXG4gICAgZm9ybXtcXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICB9XFxuICB9XFxufVxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcbi8qKioqKioqKioqKioqKioqKioqKipcXG4gIE1lZGlhIFF1ZXJ5IENsYXNzZXNcXG4qKioqKioqKioqKioqKioqKioqKioqL1xcbi5oaWRlLW9uLXNtYWxsLW9ubHksIC5oaWRlLW9uLXNtYWxsLWFuZC1kb3duIHtcXG4gIEBtZWRpYSAjeyRzbWFsbC1hbmQtZG93bn0ge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcbi5oaWRlLW9uLW1lZC1hbmQtZG93biB7XFxuICBAbWVkaWEgI3skbWVkaXVtLWFuZC1kb3dufSB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuLmhpZGUtb24tbWVkLWFuZC11cCB7XFxuICBAbWVkaWEgI3skbWVkaXVtLWFuZC11cH0ge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcbi5oaWRlLW9uLW1lZC1vbmx5IHtcXG4gIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJHNtYWxsLXNjcmVlbikgYW5kIChtYXgtd2lkdGg6ICRtZWRpdW0tc2NyZWVuKSB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuLmhpZGUtb24tbGFyZ2Utb25seSB7XFxuICBAbWVkaWEgI3skbGFyZ2UtYW5kLXVwfSB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuLmhpZGUtb24tZXh0cmEtbGFyZ2Utb25seSB7XFxuICBAbWVkaWEgI3skZXh0cmEtbGFyZ2UtYW5kLXVwfSB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuLnNob3ctb24tZXh0cmEtbGFyZ2Uge1xcbiAgQG1lZGlhICN7JGV4dHJhLWxhcmdlLWFuZC11cH0ge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG4uc2hvdy1vbi1sYXJnZSB7XFxuICBAbWVkaWEgI3skbGFyZ2UtYW5kLXVwfSB7XFxuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcbi5zaG93LW9uLW1lZGl1bSB7XFxuICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRzbWFsbC1zY3JlZW4pIGFuZCAobWF4LXdpZHRoOiAkbWVkaXVtLXNjcmVlbikge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG4uc2hvdy1vbi1zbWFsbCB7XFxuICBAbWVkaWEgI3skc21hbGwtYW5kLWRvd259IHtcXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuLnNob3ctb24tbWVkaXVtLWFuZC11cCB7XFxuICBAbWVkaWEgI3skbWVkaXVtLWFuZC11cH0ge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG4uc2hvdy1vbi1tZWRpdW0tYW5kLWRvd24ge1xcbiAgQG1lZGlhICN7JG1lZGl1bS1hbmQtZG93bn0ge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5cXG4vLyBDZW50ZXIgdGV4dCBvbiBtb2JpbGVcXG4uY2VudGVyLW9uLXNtYWxsLW9ubHkge1xcbiAgQG1lZGlhICN7JHNtYWxsLWFuZC1kb3dufSB7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIH1cXG59XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqKioqKioqKioqKioqKioqKipcXG4gIFV0aWxpdHkgQ2xhc3Nlc1xcbioqKioqKioqKioqKioqKioqKiovXFxuXFxuLmhpZGUge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4vLyBUZXh0IEFsaWduXFxuLmxlZnQtYWxpZ24ge1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuLnJpZ2h0LWFsaWduIHtcXG4gIHRleHQtYWxpZ246IHJpZ2h0XFxufVxcbi5jZW50ZXIsIC5jZW50ZXItYWxpZ24ge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG4ubGVmdCB7XFxuICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xcbn1cXG4ucmlnaHQge1xcbiAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi8vIE5vIFRleHQgU2VsZWN0XFxuLm5vLXNlbGVjdCB7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLmNpcmNsZSB7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcblxcbi5jZW50ZXItYmxvY2sge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIG1hcmdpbi1yaWdodDogYXV0bztcXG59XFxuXFxuLnRydW5jYXRlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG59XFxuXFxuLm5vLXBhZGRpbmcge1xcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xcbn1cXG5cIixcIkB1c2UgXFxcInNhc3M6bWF0aFxcXCI7XFxuJHByaW1hcnktY29sb3I6IGNvbG9yKFxcXCJibHVlXFxcIiwgXFxcImxpZ2h0ZW4tM1xcXCIpICFkZWZhdWx0O1xcbiRwcmltYXJ5LWNvbG9yLWxpZ2h0OiBsaWdodGVuKCRwcmltYXJ5LWNvbG9yLCAxNSUpICFkZWZhdWx0O1xcbiRwcmltYXJ5LWNvbG9yLWRhcms6IGRhcmtlbigkcHJpbWFyeS1jb2xvciwgMTUlKSAhZGVmYXVsdDtcXG5cXG4kc2Vjb25kYXJ5LWNvbG9yOiBjb2xvcihcXFwidGVhbFxcXCIsIFxcXCJsaWdodGVuLTFcXFwiKSAhZGVmYXVsdDtcXG4kc3VjY2Vzcy1jb2xvcjogY29sb3IoXFxcImdyZWVuXFxcIiwgXFxcImJhc2VcXFwiKSAhZGVmYXVsdDtcXG4kZXJyb3ItY29sb3I6IGNvbG9yKFxcXCJyZWRcXFwiLCBcXFwiYmFzZVxcXCIpICFkZWZhdWx0O1xcbiRsaW5rLWNvbG9yOiBjb2xvcihcXFwibGlnaHQtYmx1ZVxcXCIsIFxcXCJkYXJrZW4tMVxcXCIpICFkZWZhdWx0O1xcblxcblxcblxcbi8vIDIuIEJhZGdlc1xcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuXFxuJGJhZGdlLWJnLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yICFkZWZhdWx0O1xcbiRiYWRnZS1oZWlnaHQ6IDIycHggIWRlZmF1bHQ7XFxuXFxuXFxuXFxuLy8gNy4gQ2hpcHNcXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcblxcbiRjaGlwLWJnLWNvbG9yOiAjZTRlNGU0ICFkZWZhdWx0O1xcbiRjaGlwLWJvcmRlci1jb2xvcjogIzllOWU5ZSAhZGVmYXVsdDtcXG4kY2hpcC1zZWxlY3RlZC1jb2xvcjogIzI2YTY5YSAhZGVmYXVsdDtcXG4kY2hpcC1tYXJnaW46IDVweCAhZGVmYXVsdDtcXG5cXG5cXG4vLyAxNi4gU3Bpbm5lcnMgfCBMb2FkZXJzXFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG5cXG4kc3Bpbm5lci1kZWZhdWx0LWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yICFkZWZhdWx0O1xcblxcbi8vIDI0LiBQcm9ncmVzcyBCYXJcXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcblxcbiRwcm9ncmVzcy1iYXItY29sb3I6ICRzZWNvbmRhcnktY29sb3IgIWRlZmF1bHQ7XFxuXFxuXFxuXFxuXFxuXFxuLy9pbnB1dHNcXG5cXG4kaW5wdXQtaGVpZ2h0OiA1NnB4O1xcblxcbi8vIDYuIENvbGxhcHNpYmxlXFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG5cXG4kY29sbGFwc2libGUtaGVpZ2h0OiAzcmVtICFkZWZhdWx0O1xcbiRjb2xsYXBzaWJsZS1saW5lLWhlaWdodDogJGNvbGxhcHNpYmxlLWhlaWdodCAhZGVmYXVsdDtcXG4kY29sbGFwc2libGUtaGVhZGVyLWNvbG9yOiAjZmZmICFkZWZhdWx0O1xcbiRjb2xsYXBzaWJsZS1ib3JkZXItY29sb3I6ICNkZGQgIWRlZmF1bHQ7XFxuXFxuLy8gMTAuIEZvcm1zXFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG5cXG4vLyBUZXh0IElucHV0cyArIFRleHRhcmVhXFxuJGlucHV0LWhlaWdodDogM3JlbSAhZGVmYXVsdDtcXG4kaW5wdXQtYm9yZGVyLWNvbG9yOiBjb2xvcihcXFwiZ3JleVxcXCIsIFxcXCJiYXNlXFxcIikgIWRlZmF1bHQ7XFxuJGlucHV0LWJvcmRlcjogMXB4IHNvbGlkICRpbnB1dC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuJGlucHV0LWJhY2tncm91bmQ6ICNmZmYgIWRlZmF1bHQ7XFxuJGlucHV0LWVycm9yLWNvbG9yOiAkZXJyb3ItY29sb3IgIWRlZmF1bHQ7XFxuJGlucHV0LXN1Y2Nlc3MtY29sb3I6ICRzdWNjZXNzLWNvbG9yICFkZWZhdWx0O1xcbiRpbnB1dC1mb2N1cy1jb2xvcjogJHNlY29uZGFyeS1jb2xvciAhZGVmYXVsdDtcXG4kaW5wdXQtZm9udC1zaXplOiAxNnB4ICFkZWZhdWx0O1xcbiRpbnB1dC1tYXJnaW4tYm90dG9tOiA4cHg7XFxuJGlucHV0LW1hcmdpbjogMCAwICRpbnB1dC1tYXJnaW4tYm90dG9tIDAgIWRlZmF1bHQ7XFxuJGlucHV0LXBhZGRpbmc6IDAgIWRlZmF1bHQ7XFxuJGxhYmVsLWZvbnQtc2l6ZTogLjhyZW0gIWRlZmF1bHQ7XFxuJGlucHV0LWRpc2FibGVkLWNvbG9yOiByZ2JhKDAsMCwwLCAuNDIpICFkZWZhdWx0O1xcbiRpbnB1dC1kaXNhYmxlZC1zb2xpZC1jb2xvcjogIzk0OTQ5NCAhZGVmYXVsdDtcXG4kaW5wdXQtZGlzYWJsZWQtYm9yZGVyOiAxcHggZG90dGVkICRpbnB1dC1kaXNhYmxlZC1jb2xvciAhZGVmYXVsdDtcXG4kaW5wdXQtaW52YWxpZC1ib3JkZXI6IDFweCBzb2xpZCAkaW5wdXQtZXJyb3ItY29sb3IgIWRlZmF1bHQ7XFxuJGlucHV0LWljb24tc2l6ZTogMnJlbTtcXG4kcGxhY2Vob2xkZXItdGV4dC1jb2xvcjogbGlnaHRlbigkaW5wdXQtYm9yZGVyLWNvbG9yLCAyMCUpICFkZWZhdWx0O1xcblxcbi8vIFJhZGlvIEJ1dHRvbnNcXG4kcmFkaW8tZmlsbC1jb2xvcjogJHNlY29uZGFyeS1jb2xvciAhZGVmYXVsdDtcXG4kcmFkaW8tZW1wdHktY29sb3I6ICM1YTVhNWEgIWRlZmF1bHQ7XFxuJHJhZGlvLWJvcmRlcjogMnB4IHNvbGlkICRyYWRpby1maWxsLWNvbG9yICFkZWZhdWx0O1xcblxcbi8vIFJhbmdlXFxuJHJhbmdlLWhlaWdodDogMTRweCAhZGVmYXVsdDtcXG4kcmFuZ2Utd2lkdGg6IDE0cHggIWRlZmF1bHQ7XFxuJHRyYWNrLWhlaWdodDogM3B4ICFkZWZhdWx0O1xcblxcbi8vIFNlbGVjdFxcbiRzZWxlY3QtYm9yZGVyOiAxcHggc29saWQgI2YyZjJmMiAhZGVmYXVsdDtcXG4kc2VsZWN0LWJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45MCkgIWRlZmF1bHQ7XFxuJHNlbGVjdC1mb2N1czogMXB4IHNvbGlkIGxpZ2h0ZW4oJHNlY29uZGFyeS1jb2xvciwgNDclKSAhZGVmYXVsdDtcXG4kc2VsZWN0LW9wdGlvbi1ob3ZlcjogcmdiYSgwLDAsMCwuMDgpICFkZWZhdWx0O1xcbiRzZWxlY3Qtb3B0aW9uLWZvY3VzOiByZ2JhKDAsMCwwLC4wOCkgIWRlZmF1bHQ7XFxuJHNlbGVjdC1vcHRpb24tc2VsZWN0ZWQ6IHJnYmEoMCwwLDAsLjAzKSAhZGVmYXVsdDtcXG4kc2VsZWN0LXBhZGRpbmc6IDVweCAhZGVmYXVsdDtcXG4kc2VsZWN0LXJhZGl1czogMnB4ICFkZWZhdWx0O1xcbiRzZWxlY3QtZGlzYWJsZWQtY29sb3I6IHJnYmEoMCwwLDAsLjMpICFkZWZhdWx0O1xcblxcbi8vIFN3aXRjaGVzXFxuJHN3aXRjaC1iZy1jb2xvcjogJHNlY29uZGFyeS1jb2xvciAhZGVmYXVsdDtcXG4kc3dpdGNoLWNoZWNrZWQtbGV2ZXItYmc6IGRlc2F0dXJhdGUobGlnaHRlbigkc3dpdGNoLWJnLWNvbG9yLCAyNSUpLCAyNSUpICFkZWZhdWx0O1xcbiRzd2l0Y2gtdW5jaGVja2VkLWJnOiAjRjFGMUYxICFkZWZhdWx0O1xcbiRzd2l0Y2gtdW5jaGVja2VkLWxldmVyLWJnOiByZ2JhKDAsMCwwLC4zOCkgIWRlZmF1bHQ7XFxuJHN3aXRjaC1yYWRpdXM6IDE1cHggIWRlZmF1bHQ7XFxuXFxuLy8gMTEuIEdsb2JhbFxcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuXFxuLy8gTWVkaWEgUXVlcnkgUmFuZ2VzXFxuJHNtYWxsLXNjcmVlbi11cDogNjAxcHggIWRlZmF1bHQ7XFxuJG1lZGl1bS1zY3JlZW4tdXA6IDk5M3B4ICFkZWZhdWx0O1xcbiRsYXJnZS1zY3JlZW4tdXA6IDEyMDFweCAhZGVmYXVsdDtcXG4kc21hbGwtc2NyZWVuOiA2MDBweCAhZGVmYXVsdDtcXG4kbWVkaXVtLXNjcmVlbjogOTkycHggIWRlZmF1bHQ7XFxuJGxhcmdlLXNjcmVlbjogMTIwMHB4ICFkZWZhdWx0O1xcblxcbiRtZWRpdW0tYW5kLXVwOiBcXFwib25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiAjeyRzbWFsbC1zY3JlZW4tdXB9KVxcXCIgIWRlZmF1bHQ7XFxuJGxhcmdlLWFuZC11cDogXFxcIm9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoIDogI3skbWVkaXVtLXNjcmVlbi11cH0pXFxcIiAhZGVmYXVsdDtcXG4kZXh0cmEtbGFyZ2UtYW5kLXVwOiBcXFwib25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiAjeyRsYXJnZS1zY3JlZW4tdXB9KVxcXCIgIWRlZmF1bHQ7XFxuJHNtYWxsLWFuZC1kb3duOiBcXFwib25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGggOiAjeyRzbWFsbC1zY3JlZW59KVxcXCIgIWRlZmF1bHQ7XFxuJG1lZGl1bS1hbmQtZG93bjogXFxcIm9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoIDogI3skbWVkaXVtLXNjcmVlbn0pXFxcIiAhZGVmYXVsdDtcXG4kbWVkaXVtLW9ubHk6IFxcXCJvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6ICN7JHNtYWxsLXNjcmVlbi11cH0pIGFuZCAobWF4LXdpZHRoIDogI3skbWVkaXVtLXNjcmVlbn0pXFxcIiAhZGVmYXVsdDtcXG5cXG5cXG5cXG4vLyAxMi4gR3JpZFxcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuXFxuJG51bS1jb2xzOiAxMiAhZGVmYXVsdDtcXG4kZ3V0dGVyLXdpZHRoOiAxcmVtICFkZWZhdWx0O1xcbiRlbGVtZW50LXRvcC1tYXJnaW46IG1hdGguZGl2KCRndXR0ZXItd2lkdGgsIDMpICFkZWZhdWx0O1xcbiRlbGVtZW50LWJvdHRvbS1tYXJnaW46IG1hdGguZGl2KCRndXR0ZXItd2lkdGggKiAyLCAzKSAhZGVmYXVsdDtcXG5cXG4vLyAxMy4gTmF2aWdhdGlvbiBCYXJcXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcblxcbiRuYXZiYXItaGVpZ2h0OiA2NHB4ICFkZWZhdWx0O1xcbiRuYXZiYXItbGluZS1oZWlnaHQ6ICRuYXZiYXItaGVpZ2h0ICFkZWZhdWx0O1xcbiRuYXZiYXItaGVpZ2h0LW1vYmlsZTogNTZweCAhZGVmYXVsdDtcXG4kbmF2YmFyLWxpbmUtaGVpZ2h0LW1vYmlsZTogJG5hdmJhci1oZWlnaHQtbW9iaWxlICFkZWZhdWx0O1xcbiRuYXZiYXItZm9udC1zaXplOiAxcmVtICFkZWZhdWx0O1xcbiRuYXZiYXItZm9udC1jb2xvcjogI2ZmZiAhZGVmYXVsdDtcXG4kbmF2YmFyLWJyYW5kLWZvbnQtc2l6ZTogMi4xcmVtICFkZWZhdWx0O1xcblxcblxcbi8vIDE0LiBTaWRlIE5hdmlnYXRpb25cXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiRidXR0b24tcmFpc2VkLWNvbG9yOiAjZmZmICFkZWZhdWx0O1xcbiRidXR0b24tZmxhdC1jb2xvcjogIzM0MzQzNCAhZGVmYXVsdDtcXG4kYnV0dG9uLXJhaXNlZC1iYWNrZ3JvdW5kOiAjMzQzNDM0ICFkZWZhdWx0O1xcbiRwcmltYXJ5LWNvbG9yOiMzNDM0MzQgIWRlZmF1bHQ7XFxuXFxuXFxuIFxcbiRzaWRlbmF2LXdpZHRoOiAzMDBweCAhZGVmYXVsdDtcXG4kc2lkZW5hdi1mb250LXNpemU6IDE0cHggIWRlZmF1bHQ7XFxuJHNpZGVuYXYtZm9udC1jb2xvcjogcmdiYSgwLDAsMCwuODcpICFkZWZhdWx0O1xcbiRzaWRlbmF2LWJnLWNvbG9yOiAjZmZmICFkZWZhdWx0O1xcbiRzaWRlbmF2LXBhZGRpbmc6IDE1cHggIWRlZmF1bHQ7XFxuJHNpZGVuYXYtaXRlbS1oZWlnaHQ6IDQ1cHggIWRlZmF1bHQ7XFxuJHNpZGVuYXYtbGluZS1oZWlnaHQ6ICRzaWRlbmF2LWl0ZW0taGVpZ2h0ICFkZWZhdWx0O1xcblxcblxcblxcblxcblxcblxcbi8vIDMuIEJ1dHRvbnNcXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcblxcbiRwcmltYXJ5LWNvbG9yOiBncmVlbiAhZGVmYXVsdDtcXG4kcHJpbWFyeS1jb2xvci1saWdodDogbGlnaHRlbigkcHJpbWFyeS1jb2xvciwgMTUlKSAhZGVmYXVsdDtcXG4kcHJpbWFyeS1jb2xvci1kYXJrOiBkYXJrZW4oJHByaW1hcnktY29sb3IsIDE1JSkgIWRlZmF1bHQ7XFxuJHNlY29uZGFyeS1jb2xvcjogcmVkICFkZWZhdWx0O1xcblxcblxcbi8vIFNoYXJlZCBzdHlsZXNcXG4kYnV0dG9uLWJvcmRlcjogbm9uZSAhZGVmYXVsdDtcXG4kYnV0dG9uLWJhY2tncm91bmQtZm9jdXM6IGxpZ2h0ZW4oJHNlY29uZGFyeS1jb2xvciwgNCUpICFkZWZhdWx0O1xcbiRidXR0b24tZm9udC1zaXplOiAxNHB4ICFkZWZhdWx0O1xcbiRidXR0b24taWNvbi1mb250LXNpemU6IDEuM3JlbSAhZGVmYXVsdDtcXG4kYnV0dG9uLWhlaWdodDogMzZweCAhZGVmYXVsdDtcXG4kYnV0dG9uLXBhZGRpbmc6IDAgMTZweCAhZGVmYXVsdDtcXG4kYnV0dG9uLXJhZGl1czogMnB4ICFkZWZhdWx0O1xcblxcbi8vIERpc2FibGVkIHN0eWxlc1xcbiRidXR0b24tZGlzYWJsZWQtYmFja2dyb3VuZDogI0RGREZERiAhZGVmYXVsdDtcXG4kYnV0dG9uLWRpc2FibGVkLWNvbG9yOiAjOUY5RjlGICFkZWZhdWx0O1xcblxcbi8vIFJhaXNlZCBidXR0b25zXFxuJGJ1dHRvbi1yYWlzZWQtYmFja2dyb3VuZDogJHNlY29uZGFyeS1jb2xvciAhZGVmYXVsdDtcXG4kYnV0dG9uLXJhaXNlZC1iYWNrZ3JvdW5kLWhvdmVyOiBsaWdodGVuKCRidXR0b24tcmFpc2VkLWJhY2tncm91bmQsIDUlKSAhZGVmYXVsdDtcXG4kYnV0dG9uLXJhaXNlZC1jb2xvcjogI2ZmZiAhZGVmYXVsdDtcXG5cXG4vLyBMYXJnZSBidXR0b25zXFxuJGJ1dHRvbi1sYXJnZS1mb250LXNpemU6IDE1cHggIWRlZmF1bHQ7XFxuJGJ1dHRvbi1sYXJnZS1pY29uLWZvbnQtc2l6ZTogMS42cmVtICFkZWZhdWx0O1xcbiRidXR0b24tbGFyZ2UtaGVpZ2h0OiAkYnV0dG9uLWhlaWdodCAqIDEuNSAhZGVmYXVsdDtcXG4kYnV0dG9uLWZsb2F0aW5nLWxhcmdlLXNpemU6IDU2cHggIWRlZmF1bHQ7XFxuXFxuLy8gU21hbGwgYnV0dG9uc1xcbiRidXR0b24tc21hbGwtZm9udC1zaXplOiAxM3B4ICFkZWZhdWx0O1xcbiRidXR0b24tc21hbGwtaWNvbi1mb250LXNpemU6IDEuMnJlbSAhZGVmYXVsdDtcXG4kYnV0dG9uLXNtYWxsLWhlaWdodDogJGJ1dHRvbi1oZWlnaHQgKiAuOSAhZGVmYXVsdDtcXG4kYnV0dG9uLWZsb2F0aW5nLXNtYWxsLXNpemU6ICRidXR0b24taGVpZ2h0ICogLjkgIWRlZmF1bHQ7XFxuXFxuLy8gRmxhdCBidXR0b25zXFxuJGJ1dHRvbi1mbGF0LWNvbG9yOiAjMzQzNDM0ICFkZWZhdWx0O1xcbiRidXR0b24tZmxhdC1kaXNhYmxlZC1jb2xvcjogbGlnaHRlbigjOTk5LCAxMCUpICFkZWZhdWx0O1xcblxcbi8vIEZsb2F0aW5nIGJ1dHRvbnNcXG4kYnV0dG9uLWZsb2F0aW5nLWJhY2tncm91bmQ6ICRzZWNvbmRhcnktY29sb3IgIWRlZmF1bHQ7XFxuJGJ1dHRvbi1mbG9hdGluZy1iYWNrZ3JvdW5kLWhvdmVyOiAkYnV0dG9uLWZsb2F0aW5nLWJhY2tncm91bmQgIWRlZmF1bHQ7XFxuJGJ1dHRvbi1mbG9hdGluZy1jb2xvcjogI2ZmZiAhZGVmYXVsdDtcXG4kYnV0dG9uLWZsb2F0aW5nLXNpemU6IDQwcHggIWRlZmF1bHQ7XFxuJGJ1dHRvbi1mbG9hdGluZy1yYWRpdXM6IDUwJSAhZGVmYXVsdDtcXG5cXG5cXG5cXG5cXG4vLyA0LiBDYXJkc1xcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuXFxuJGNhcmQtcGFkZGluZzogMjRweCAhZGVmYXVsdDtcXG4kY2FyZC1iZy1jb2xvcjogI2ZmZiAhZGVmYXVsdDtcXG4kY2FyZC1saW5rLWNvbG9yOiBjb2xvcihcXFwib3JhbmdlXFxcIiwgXFxcImFjY2VudC0yXFxcIikgIWRlZmF1bHQ7XFxuJGNhcmQtbGluay1jb2xvci1saWdodDogbGlnaHRlbigkY2FyZC1saW5rLWNvbG9yLCAyMCUpICFkZWZhdWx0O1xcblxcblxcblxcblxcblxcblxcbi8vIDIzLiBDb2xsZWN0aW9uc1xcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuXFxuJGNvbGxlY3Rpb24tYm9yZGVyLWNvbG9yOiAjZTBlMGUwICFkZWZhdWx0O1xcbiRjb2xsZWN0aW9uLWJnLWNvbG9yOiAjZmZmICFkZWZhdWx0O1xcbiRjb2xsZWN0aW9uLWFjdGl2ZS1iZy1jb2xvcjogJHNlY29uZGFyeS1jb2xvciAhZGVmYXVsdDtcXG4kY29sbGVjdGlvbi1hY3RpdmUtY29sb3I6IGxpZ2h0ZW4oJHNlY29uZGFyeS1jb2xvciwgNTUlKSAhZGVmYXVsdDtcXG4kY29sbGVjdGlvbi1ob3Zlci1iZy1jb2xvcjogI2RkZCAhZGVmYXVsdDtcXG4kY29sbGVjdGlvbi1saW5rLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yICFkZWZhdWx0O1xcbiRjb2xsZWN0aW9uLWxpbmUtaGVpZ2h0OiAxLjVyZW0gIWRlZmF1bHQ7XFxuXFxuXFxuXFxuXFxuXFxuLy8gOS4gRHJvcGRvd25cXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcblxcbiRkcm9wZG93bi1iZy1jb2xvcjogI2ZmZiAhZGVmYXVsdDtcXG4kZHJvcGRvd24taG92ZXItYmctY29sb3I6ICNlZWUgIWRlZmF1bHQ7XFxuJGRyb3Bkb3duLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yICFkZWZhdWx0O1xcbiRkcm9wZG93bi1pdGVtLWhlaWdodDogNTBweCAhZGVmYXVsdDtcXG5cXG5cXG4kb2ZmLWJsYWNrOiByZ2JhKDAsIDAsIDAsIDAuODcpICFkZWZhdWx0O1wiLFwiLy8gQmFkZ2VzXFxuc3Bhbi5iYWRnZSB7XFxuICBtaW4td2lkdGg6IDNyZW07XFxuICBwYWRkaW5nOiAwIDZweDtcXG4gIG1hcmdpbi1sZWZ0OiAxNHB4O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgbGluZS1oZWlnaHQ6ICRiYWRnZS1oZWlnaHQ7XFxuICBoZWlnaHQ6ICRiYWRnZS1oZWlnaHQ7XFxuICBjb2xvcjogY29sb3IoJ2dyZXknLCAnZGFya2VuLTEnKTtcXG4gIGZsb2F0OiByaWdodDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuXFxuICAmLm5ldyB7XFxuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XFxuICAgIGZvbnQtc2l6ZTogMC44cmVtO1xcbiAgICBjb2xvcjogI2ZmZjtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhZGdlLWJnLWNvbG9yO1xcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XFxuICB9XFxuXFxuICAmLm5ldzphZnRlciB7XFxuICAgIGNvbnRlbnQ6IFxcXCIgbmV3XFxcIjtcXG4gIH1cXG5cXG4gICZbZGF0YS1iYWRnZS1jYXB0aW9uXTo6YWZ0ZXIge1xcbiAgICBjb250ZW50OiBcXFwiIFxcXCIgYXR0cihkYXRhLWJhZGdlLWNhcHRpb24pO1xcbiAgfVxcbn1cXG5cXG4vLyBTcGVjaWFsIGNhc2VzXFxubmF2IHVsIGEgc3Bhbi5iYWRnZSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBmbG9hdDogbm9uZTtcXG4gIG1hcmdpbi1sZWZ0OiA0cHg7XFxuICBsaW5lLWhlaWdodDogJGJhZGdlLWhlaWdodDtcXG4gIGhlaWdodDogJGJhZGdlLWhlaWdodDtcXG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGF1dG87XFxufVxcblxcbi8vIExpbmUgaGVpZ2h0IGNlbnRlcmluZ1xcbi5jb2xsZWN0aW9uLWl0ZW0gc3Bhbi5iYWRnZSB7XFxuICBtYXJnaW4tdG9wOiBjYWxjKGNhbGMoJGNvbGxlY3Rpb24tbGluZS1oZWlnaHQgLyAyKSAtIGNhbGMoJGJhZGdlLWhlaWdodCAvIDIpKTtcXG59XFxuXFxuLmNvbGxhcHNpYmxlIHNwYW4uYmFkZ2Uge1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcblxcbi5zaWRlbmF2IHNwYW4uYmFkZ2Uge1xcbiAgbWFyZ2luLXRvcDogY2FsYyhjYWxjKCRzaWRlbmF2LWxpbmUtaGVpZ2h0IC8gMikgLSBjYWxjKCRiYWRnZS1oZWlnaHQgLyAyKSk7XFxufVxcblxcbnRhYmxlIHNwYW4uYmFkZ2Uge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZmxvYXQ6IG5vbmU7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuXCIsXCIuY2hpcCB7XFxuICAmOmZvY3VzIHtcXG4gICAgb3V0bGluZTogbm9uZTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNoaXAtc2VsZWN0ZWQtY29sb3I7XFxuICAgIGNvbG9yOiAjZmZmO1xcbiAgfVxcblxcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgaGVpZ2h0OiAzMnB4O1xcbiAgZm9udC1zaXplOiAxM3B4O1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIGNvbG9yOiByZ2JhKDAsMCwwLC42KTtcXG4gIGxpbmUtaGVpZ2h0OiAzMnB4O1xcbiAgcGFkZGluZzogMCAxMnB4O1xcbiAgYm9yZGVyLXJhZGl1czogMTZweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICRjaGlwLWJnLWNvbG9yO1xcbiAgbWFyZ2luLWJvdHRvbTogJGNoaXAtbWFyZ2luO1xcbiAgbWFyZ2luLXJpZ2h0OiAkY2hpcC1tYXJnaW47XFxuXFxuICA+IGltZyB7XFxuICAgIGZsb2F0OiBsZWZ0O1xcbiAgICBtYXJnaW46IDAgOHB4IDAgLTEycHg7XFxuICAgIGhlaWdodDogMzJweDtcXG4gICAgd2lkdGg6IDMycHg7XFxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIH1cXG5cXG4gIC5jbG9zZSB7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgZmxvYXQ6IHJpZ2h0O1xcbiAgICBmb250LXNpemU6IDE2cHg7XFxuICAgIGxpbmUtaGVpZ2h0OiAzMnB4O1xcbiAgICBwYWRkaW5nLWxlZnQ6IDhweDtcXG4gIH1cXG59XFxuXFxuLmNoaXBzIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkY2hpcC1ib3JkZXItY29sb3I7XFxuICBib3gtc2hhZG93OiBub25lO1xcbiAgbWFyZ2luOiAkaW5wdXQtbWFyZ2luO1xcbiAgbWluLWhlaWdodDogNDVweDtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICB0cmFuc2l0aW9uOiBhbGwgLjNzO1xcblxcbiAgJi5mb2N1cyB7XFxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkY2hpcC1zZWxlY3RlZC1jb2xvcjtcXG4gICAgYm94LXNoYWRvdzogMCAxcHggMCAwICRjaGlwLXNlbGVjdGVkLWNvbG9yO1xcbiAgfVxcblxcbiAgJjpob3ZlciB7XFxuICAgIGN1cnNvcjogdGV4dDtcXG4gIH1cXG5cXG4gIC5pbnB1dCB7XFxuICAgIGJhY2tncm91bmQ6IG5vbmU7XFxuICAgIGJvcmRlcjogMDtcXG4gICAgY29sb3I6IHJnYmEoMCwwLDAsLjYpO1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIGZvbnQtc2l6ZTogJGlucHV0LWZvbnQtc2l6ZTtcXG4gICAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xcbiAgICBsaW5lLWhlaWdodDogMzJweDtcXG4gICAgb3V0bGluZTogMDtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxuICAgIHdpZHRoOiAxMjBweCAhaW1wb3J0YW50O1xcbiAgfVxcblxcbiAgLmlucHV0OmZvY3VzIHtcXG4gICAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XFxuICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG5cXG4gIC8vIEF1dG9jb21wbGV0ZVxcbiAgLmF1dG9jb21wbGV0ZS1jb250ZW50IHtcXG4gICAgbWFyZ2luLXRvcDogMDtcXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIH1cXG59XFxuXFxuLy8gRm9ybSBwcmVmaXhcXG4ucHJlZml4IH4gLmNoaXBzIHtcXG4gIG1hcmdpbi1sZWZ0OiAzcmVtO1xcbiAgd2lkdGg6IDkyJTtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSAzcmVtKTtcXG59XFxuLmNoaXBzOmVtcHR5IH4gbGFiZWwgIHtcXG4gIGZvbnQtc2l6ZTogMC44cmVtO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xNDAlKTtcXG59XFxuXCIsXCIuY29sbGFwc2libGUge1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICRjb2xsYXBzaWJsZS1ib3JkZXItY29sb3I7XFxuICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAkY29sbGFwc2libGUtYm9yZGVyLWNvbG9yO1xcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAkY29sbGFwc2libGUtYm9yZGVyLWNvbG9yO1xcbiAgbWFyZ2luOiAkZWxlbWVudC10b3AtbWFyZ2luIDAgJGVsZW1lbnQtYm90dG9tLW1hcmdpbiAwO1xcbiAgQGV4dGVuZCAuc2hhZG93LTE7XFxufVxcblxcbi5jb2xsYXBzaWJsZS1oZWFkZXIge1xcbiAgJjpmb2N1cyB7XFxuICAgIG91dGxpbmU6IDBcXG4gIH1cXG5cXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gIHBhZGRpbmc6IDFyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sbGFwc2libGUtaGVhZGVyLWNvbG9yO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRjb2xsYXBzaWJsZS1ib3JkZXItY29sb3I7XFxuXFxuICBpIHtcXG4gICAgd2lkdGg6IDJyZW07XFxuICAgIGZvbnQtc2l6ZTogMS42cmVtO1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gICAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xcbiAgfVxcbn1cXG4ua2V5Ym9hcmQtZm9jdXNlZCAuY29sbGFwc2libGUtaGVhZGVyOmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWU7XFxufVxcblxcbi5jb2xsYXBzaWJsZS1ib2R5IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGNvbGxhcHNpYmxlLWJvcmRlci1jb2xvcjtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBwYWRkaW5nOiAycmVtO1xcbn1cXG5cXG4vLyBTaWRlbmF2IGNvbGxhcHNpYmxlIHN0eWxpbmdcXG4uc2lkZW5hdixcXG4uc2lkZW5hdi5maXhlZCB7XFxuXFxuICAuY29sbGFwc2libGUge1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIGJveC1zaGFkb3c6IG5vbmU7XFxuXFxuICAgIGxpIHsgcGFkZGluZzogMDsgfVxcbiAgfVxcblxcbiAgLmNvbGxhcHNpYmxlLWhlYWRlciB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgICBoZWlnaHQ6IGluaGVyaXQ7XFxuICAgIHBhZGRpbmc6IDAgJHNpZGVuYXYtcGFkZGluZztcXG5cXG4gICAgJjpob3ZlciB7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwwLDAsLjA1KTsgfVxcbiAgICBpIHsgbGluZS1oZWlnaHQ6IGluaGVyaXQ7IH1cXG4gIH1cXG5cXG4gIC5jb2xsYXBzaWJsZS1ib2R5IHtcXG4gICAgYm9yZGVyOiAwO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sbGFwc2libGUtaGVhZGVyLWNvbG9yO1xcblxcbiAgICBsaSBhIHtcXG4gICAgICBwYWRkaW5nOiAwICg3LjVweCArICRzaWRlbmF2LXBhZGRpbmcpXFxuICAgICAgICAgICAgICAgMCAoMTVweCArICRzaWRlbmF2LXBhZGRpbmcpO1xcbiAgICB9XFxuICB9XFxuXFxufVxcblxcbi8vIFBvcG91dCBDb2xsYXBzaWJsZVxcblxcbi5jb2xsYXBzaWJsZS5wb3BvdXQge1xcbiAgYm9yZGVyOiBub25lO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gID4gbGkge1xcbiAgICBib3gtc2hhZG93OiAwIDJweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTYpLCAwIDJweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKTtcXG4gICAgLy8gdHJhbnNmb3JtOiBzY2FsZVgoLjkyKTtcXG4gICAgbWFyZ2luOiAwIDI0cHg7XFxuICAgIHRyYW5zaXRpb246IG1hcmdpbiAuMzVzIGN1YmljLWJlemllcigwLjI1MCwgMC40NjAsIDAuNDUwLCAwLjk0MCk7XFxuICB9XFxuICA+IGxpLmFjdGl2ZSB7XFxuICAgIGJveC1zaGFkb3c6IDAgNXB4IDExcHggMCByZ2JhKDAsIDAsIDAsIDAuMTgpLCAwIDRweCAxNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE1KTtcXG4gICAgbWFyZ2luOiAxNnB4IDA7XFxuICAgIC8vIHRyYW5zZm9ybTogc2NhbGVYKDEpO1xcbiAgfVxcbn1cXG5cIixcIi8vIDIzLiBDb2xsZWN0aW9ucyAtIHZhcmlhYmxlc1xcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuXFxuJGNvbGxlY3Rpb24tYm9yZGVyLWNvbG9yOiAjZTBlMGUwICFkZWZhdWx0O1xcbiRjb2xsZWN0aW9uLWJnLWNvbG9yOiAjZmZmICFkZWZhdWx0O1xcbiRjb2xsZWN0aW9uLWFjdGl2ZS1iZy1jb2xvcjogJHNlY29uZGFyeS1jb2xvciAhZGVmYXVsdDtcXG4kY29sbGVjdGlvbi1hY3RpdmUtY29sb3I6IGxpZ2h0ZW4oJHNlY29uZGFyeS1jb2xvciwgNTUlKSAhZGVmYXVsdDtcXG4kY29sbGVjdGlvbi1ob3Zlci1iZy1jb2xvcjogI2RkZCAhZGVmYXVsdDtcXG4kY29sbGVjdGlvbi1saW5rLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yICFkZWZhdWx0O1xcbiRjb2xsZWN0aW9uLWxpbmUtaGVpZ2h0OiAxLjVyZW0gIWRlZmF1bHQ7XFxuLy8gMjMuIENvbGxlY3Rpb25zXFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG5cXG4uY29sbGVjdGlvbiB7XFxuICAgIG1hcmdpbjogJGVsZW1lbnQtdG9wLW1hcmdpbiAwICRlbGVtZW50LWJvdHRvbS1tYXJnaW4gMDtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgJGNvbGxlY3Rpb24tYm9yZGVyLWNvbG9yO1xcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIFxcbiAgICAuY29sbGVjdGlvbi1pdGVtIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sbGVjdGlvbi1iZy1jb2xvcjtcXG4gICAgICBsaW5lLWhlaWdodDogJGNvbGxlY3Rpb24tbGluZS1oZWlnaHQ7XFxuICAgICAgcGFkZGluZzogMTBweCAyMHB4O1xcbiAgICAgIG1hcmdpbjogMDtcXG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGNvbGxlY3Rpb24tYm9yZGVyLWNvbG9yO1xcbiAgXFxuICAgICAgLy8gQXZhdGFyIENvbGxlY3Rpb25cXG4gICAgICAmLmF2YXRhciB7XFxuICAgICAgICBtaW4taGVpZ2h0OiA4NHB4O1xcbiAgICAgICAgcGFkZGluZy1sZWZ0OiA3MnB4O1xcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgXFxuICAgICAgICAvLyBEb24ndCBzdHlsZSBjaXJjbGVzIGluc2lkZSBwcmVsb2FkZXIgY2xhc3Nlcy5cXG4gICAgICAgICY6bm90KC5jaXJjbGUtY2xpcHBlcikgPiAuY2lyY2xlLFxcbiAgICAgICAgOm5vdCguY2lyY2xlLWNsaXBwZXIpID4gLmNpcmNsZSB7XFxuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgICAgd2lkdGg6IDQycHg7XFxuICAgICAgICAgIGhlaWdodDogNDJweDtcXG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgICAgICAgbGVmdDogMTVweDtcXG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgICAgICAgfVxcbiAgICAgICAgaS5jaXJjbGUge1xcbiAgICAgICAgICBmb250LXNpemU6IDE4cHg7XFxuICAgICAgICAgIGxpbmUtaGVpZ2h0OiA0MnB4O1xcbiAgICAgICAgICBjb2xvcjogI2ZmZjtcXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzk5OTtcXG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICAgICAgfVxcbiAgXFxuICBcXG4gICAgICAgIC50aXRsZSB7XFxuICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcXG4gICAgICAgIH1cXG4gIFxcbiAgICAgICAgcCB7XFxuICAgICAgICAgIG1hcmdpbjogMDtcXG4gICAgICAgIH1cXG4gIFxcbiAgICAgICAgLnNlY29uZGFyeS1jb250ZW50IHtcXG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgICB0b3A6IDE2cHg7XFxuICAgICAgICAgIHJpZ2h0OiAxNnB4O1xcbiAgICAgICAgfVxcbiAgXFxuICAgICAgfVxcbiAgXFxuICBcXG4gICAgICAmOmxhc3QtY2hpbGQge1xcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcXG4gICAgICB9XFxuICBcXG4gICAgICAmLmFjdGl2ZSB7XFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sbGVjdGlvbi1hY3RpdmUtYmctY29sb3I7XFxuICAgICAgICBjb2xvcjogJGNvbGxlY3Rpb24tYWN0aXZlLWNvbG9yO1xcbiAgXFxuICAgICAgICAuc2Vjb25kYXJ5LWNvbnRlbnQge1xcbiAgICAgICAgICBjb2xvcjogI2ZmZjtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gICAgYS5jb2xsZWN0aW9uLWl0ZW17XFxuICAgICAgZGlzcGxheTogYmxvY2s7XFxuICAgICAgdHJhbnNpdGlvbjogLjI1cztcXG4gICAgICBjb2xvcjogJGNvbGxlY3Rpb24tbGluay1jb2xvcjtcXG4gICAgICAmOm5vdCguYWN0aXZlKSB7XFxuICAgICAgICAmOmhvdmVyIHtcXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbGxlY3Rpb24taG92ZXItYmctY29sb3I7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICBcXG4gICAgJi53aXRoLWhlYWRlciB7XFxuICAgICAgLmNvbGxlY3Rpb24taGVhZGVyIHtcXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xsZWN0aW9uLWJnLWNvbG9yO1xcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRjb2xsZWN0aW9uLWJvcmRlci1jb2xvcjtcXG4gICAgICAgIHBhZGRpbmc6IDEwcHggMjBweDtcXG4gICAgICB9XFxuICAgICAgLmNvbGxlY3Rpb24taXRlbSB7XFxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDMwcHg7XFxuICAgICAgfVxcbiAgICAgIC5jb2xsZWN0aW9uLWl0ZW0uYXZhdGFyIHtcXG4gICAgICAgIHBhZGRpbmctbGVmdDogNzJweDtcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLnNlY29uZGFyeS1jb250ZW50IHtcXG4gICAgICBmbG9hdDogcmlnaHQ7XFxuICAgICAgY29sb3I6ICRzZWNvbmRhcnktY29sb3I7XFxuICAgIH1cXG4gIH1cIixcIi8vIFJlbW92ZSBGb2N1cyBCb3hlc1xcbnNlbGVjdDpmb2N1cyB7XFxuICBvdXRsaW5lOiAkc2VsZWN0LWZvY3VzO1xcbn1cXG5cXG5idXR0b246Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICRidXR0b24tYmFja2dyb3VuZC1mb2N1cztcXG59XFxuXFxubGFiZWwge1xcbiAgZm9udC1zaXplOiAkbGFiZWwtZm9udC1zaXplO1xcbiAgY29sb3I6ICRpbnB1dC1ib3JkZXItY29sb3I7XFxufVxcblxcbkBpbXBvcnQgJ2lucHV0LWZpZWxkcyc7XFxuQGltcG9ydCAncmFkaW8tYnV0dG9ucyc7XFxuQGltcG9ydCAnY2hlY2tib3hlcyc7XFxuQGltcG9ydCAnc3dpdGNoZXMnO1xcbkBpbXBvcnQgJ3NlbGVjdCc7XFxuQGltcG9ydCAnZmlsZS1pbnB1dCc7XFxuQGltcG9ydCAncmFuZ2UnO1xcblwiLFwiLyogVGV4dCBJbnB1dHMgKyBUZXh0YXJlYVxcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXFxuXFxuLyogU3R5bGUgUGxhY2Vob2xkZXJzICovXFxuQHVzZSBcXFwic2FzczptYXRoXFxcIjtcXG46OnBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiAkcGxhY2Vob2xkZXItdGV4dC1jb2xvcjtcXG59XFxuXFxuLyogVGV4dCBpbnB1dHMgKi9cXG5cXG5pbnB1dDpub3QoW3R5cGVdKSxcXG5pbnB1dFt0eXBlPXRleHRdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXG5pbnB1dFt0eXBlPXBhc3N3b3JkXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxuaW5wdXRbdHlwZT1lbWFpbF06bm90KC5icm93c2VyLWRlZmF1bHQpLFxcbmlucHV0W3R5cGU9dXJsXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxuaW5wdXRbdHlwZT10aW1lXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxuaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxuaW5wdXRbdHlwZT1kYXRldGltZV06bm90KC5icm93c2VyLWRlZmF1bHQpLFxcbmlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXG5pbnB1dFt0eXBlPXRlbF06bm90KC5icm93c2VyLWRlZmF1bHQpLFxcbmlucHV0W3R5cGU9bnVtYmVyXTpub3QoLmJyb3dzZXItZGVmYXVsdCksXFxuaW5wdXRbdHlwZT1zZWFyY2hdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSxcXG50ZXh0YXJlYS50ZXh0YXJlYSB7XFxuXFxuICAvLyBHZW5lcmFsIFN0eWxlc1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IG5vbmU7XFxuICBib3JkZXItYm90dG9tOiAkaW5wdXQtYm9yZGVyO1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XFxuICB3aWR0aDogMTAwJTtcXG4gIGZvbnQtc2l6ZTogJGlucHV0LWZvbnQtc2l6ZTtcXG4gIG1hcmdpbjogJGlucHV0LW1hcmdpbjtcXG4gIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAuM3MsIGJvcmRlciAuM3M7XFxuXFxuICAvLyBEaXNhYmxlZCBpbnB1dCBzdHlsZVxcbiAgJjpkaXNhYmxlZCxcXG4gICZbcmVhZG9ubHk9XFxcInJlYWRvbmx5XFxcIl0ge1xcbiAgICBjb2xvcjogJGlucHV0LWRpc2FibGVkLWNvbG9yO1xcbiAgICBib3JkZXItYm90dG9tOiAkaW5wdXQtZGlzYWJsZWQtYm9yZGVyO1xcbiAgfVxcblxcbiAgLy8gRGlzYWJsZWQgbGFiZWwgc3R5bGVcXG4gICY6ZGlzYWJsZWQrbGFiZWwsXFxuICAmW3JlYWRvbmx5PVxcXCJyZWFkb25seVxcXCJdK2xhYmVsIHtcXG4gICAgY29sb3I6ICRpbnB1dC1kaXNhYmxlZC1jb2xvcjtcXG4gIH1cXG5cXG4gIC8vIEZvY3VzZWQgaW5wdXQgc3R5bGVcXG4gICY6Zm9jdXM6bm90KFtyZWFkb25seV0pIHtcXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRpbnB1dC1mb2N1cy1jb2xvcjtcXG4gICAgYm94LXNoYWRvdzogMCAxcHggMCAwICRpbnB1dC1mb2N1cy1jb2xvcjtcXG4gIH1cXG5cXG4gIC8vIEZvY3VzZWQgbGFiZWwgc3R5bGVcXG4gICY6Zm9jdXM6bm90KFtyZWFkb25seV0pK2xhYmVsIHtcXG4gICAgY29sb3I6ICRpbnB1dC1mb2N1cy1jb2xvcjtcXG4gIH1cXG5cXG4gIC8vIEhpZGUgaGVscGVyIHRleHQgb24gZGF0YSBtZXNzYWdlXFxuICAmLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuICAmOmZvY3VzLnZhbGlkIH4gLmhlbHBlci10ZXh0W2RhdGEtc3VjY2Vzc10sXFxuICAmLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0sXFxuICAmOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHRbZGF0YS1lcnJvcl0ge1xcbiAgICBAZXh0ZW5kICVoaWRkZW4tdGV4dDtcXG4gIH1cXG5cXG4gIC8vIFZhbGlkIElucHV0IFN0eWxlXFxuICAmLnZhbGlkLFxcbiAgJjpmb2N1cy52YWxpZCB7XFxuICAgIEBleHRlbmQgJXZhbGlkLWlucHV0LXN0eWxlO1xcbiAgfVxcblxcbiAgLy8gQ3VzdG9tIFN1Y2Nlc3MgTWVzc2FnZVxcbiAgJi52YWxpZCB+IC5oZWxwZXItdGV4dDphZnRlcixcXG4gICY6Zm9jdXMudmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIge1xcbiAgICBAZXh0ZW5kICVjdXN0b20tc3VjY2Vzcy1tZXNzYWdlO1xcbiAgfVxcbiAgJjpmb2N1cy52YWxpZCB+IGxhYmVsIHtcXG4gICAgY29sb3I6ICRpbnB1dC1zdWNjZXNzLWNvbG9yO1xcbiAgfVxcblxcbiAgLy8gSW52YWxpZCBJbnB1dCBTdHlsZVxcbiAgJi5pbnZhbGlkLFxcbiAgJjpmb2N1cy5pbnZhbGlkIHtcXG4gICAgQGV4dGVuZCAlaW52YWxpZC1pbnB1dC1zdHlsZTtcXG4gIH1cXG5cXG4gIC8vIEN1c3RvbSBFcnJvciBtZXNzYWdlXFxuICAmLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIsXFxuICAmOmZvY3VzLmludmFsaWQgfiAuaGVscGVyLXRleHQ6YWZ0ZXIge1xcbiAgICBAZXh0ZW5kICVjdXN0b20tZXJyb3ItbWVzc2FnZTtcXG4gIH1cXG4gICY6Zm9jdXMuaW52YWxpZCB+IGxhYmVsIHtcXG4gICAgY29sb3I6ICRpbnB1dC1lcnJvci1jb2xvcjtcXG4gIH1cXG5cXG4gIC8vIEZ1bGwgd2lkdGggbGFiZWwgd2hlbiB1c2luZyB2YWxpZGF0ZSBmb3IgZXJyb3IgbWVzc2FnZXNcXG4gICYudmFsaWRhdGUgKyBsYWJlbCB7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgfVxcblxcbiAgLy8gRm9ybSBNZXNzYWdlIFNoYXJlZCBTdHlsZXNcXG4gICYgKyBsYWJlbDphZnRlciB7XFxuICAgIEBleHRlbmQgJWlucHV0LWFmdGVyLXN0eWxlO1xcbiAgfVxcbn1cXG5cXG5cXG4vKiBWYWxpZGF0aW9uIFNhc3MgUGxhY2Vob2xkZXJzICovXFxuJXZhbGlkLWlucHV0LXN0eWxlIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkaW5wdXQtc3VjY2Vzcy1jb2xvcjtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDAgMCAkaW5wdXQtc3VjY2Vzcy1jb2xvcjtcXG59XFxuJWludmFsaWQtaW5wdXQtc3R5bGUge1xcbiAgYm9yZGVyLWJvdHRvbTogJGlucHV0LWludmFsaWQtYm9yZGVyO1xcbiAgYm94LXNoYWRvdzogMCAxcHggMCAwICRpbnB1dC1lcnJvci1jb2xvcjtcXG59XFxuJWhpZGRlbi10ZXh0IHtcXG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbiVjdXN0b20tc3VjY2Vzcy1tZXNzYWdlIHtcXG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zdWNjZXNzKTtcXG4gIGNvbG9yOiAkaW5wdXQtc3VjY2Vzcy1jb2xvcjtcXG59XFxuJWN1c3RvbS1lcnJvci1tZXNzYWdlIHtcXG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1lcnJvcik7XFxuICBjb2xvcjogJGlucHV0LWVycm9yLWNvbG9yO1xcbn1cXG4laW5wdXQtYWZ0ZXItc3R5bGUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMTAwJTtcXG4gIGxlZnQ6IDA7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNpdGlvbjogLjJzIG9wYWNpdHkgZWFzZS1vdXQsIC4ycyBjb2xvciBlYXNlLW91dDtcXG59XFxuXFxuXFxuLy8gU3R5bGluZyBmb3IgaW5wdXQgZmllbGQgd3JhcHBlclxcbi5pbnB1dC1maWVsZCB7XFxuICAvLyBJbmxpbmUgc3R5bGVzXFxuICAmLmlubGluZSB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gICAgbWFyZ2luLWxlZnQ6IDVweDtcXG5cXG4gICAgaW5wdXQsXFxuICAgIC5zZWxlY3QtZHJvcGRvd24ge1xcbiAgICAgIG1hcmdpbi1ib3R0b206IDFyZW07XFxuICAgIH1cXG4gIH1cXG5cXG4gIC8vIEd1dHRlciBzcGFjaW5nXFxuICAmLmNvbCB7XFxuICAgIGxhYmVsIHtcXG4gICAgICBsZWZ0OiBtYXRoLmRpdigkZ3V0dGVyLXdpZHRoLCAyKTtcXG4gICAgfVxcblxcbiAgICAucHJlZml4IH4gbGFiZWwsXFxuICAgIC5wcmVmaXggfiAudmFsaWRhdGUgfiBsYWJlbCB7XFxuICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDNyZW0gLSAjeyRndXR0ZXItd2lkdGh9KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgbWFyZ2luLXRvcDogMXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IDFyZW07XFxuXFxuICAmID4gbGFiZWwge1xcbiAgICBjb2xvcjogJGlucHV0LWJvcmRlci1jb2xvcjtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB0b3A6IDA7XFxuICAgIGxlZnQ6IDA7XFxuICAgIGZvbnQtc2l6ZTogMXJlbTtcXG4gICAgY3Vyc29yOiB0ZXh0O1xcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjJzIGVhc2Utb3V0LCBjb2xvciAuMnMgZWFzZS1vdXQ7XFxuICAgIHRyYW5zZm9ybS1vcmlnaW46IDAlIDEwMCU7XFxuICAgIHRleHQtYWxpZ246IGluaXRpYWw7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMnB4KTtcXG5cXG4gICAgJjpub3QoLmxhYmVsLWljb24pLmFjdGl2ZSB7XFxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xNHB4KSBzY2FsZSguOCk7XFxuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xcbiAgICB9XFxuICB9XFxuXFxuICAvLyBBdXRvZmlsbCArIGRhdGUgKyB0aW1lIGlucHV0c1xcbiAgJiA+IGlucHV0W3R5cGVdOi13ZWJraXQtYXV0b2ZpbGw6bm90KC5icm93c2VyLWRlZmF1bHQpOm5vdChbdHlwZT1cXFwic2VhcmNoXFxcIl0pICsgbGFiZWwsXFxuICAmID4gaW5wdXRbdHlwZT1kYXRlXTpub3QoLmJyb3dzZXItZGVmYXVsdCkgKyBsYWJlbCxcXG4gICYgPiBpbnB1dFt0eXBlPXRpbWVdOm5vdCguYnJvd3Nlci1kZWZhdWx0KSArIGxhYmVsIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xNHB4KSBzY2FsZSguOCk7XFxuICAgIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcXG4gIH1cXG5cXG4gIC5oZWxwZXItdGV4dCB7XFxuICAgICY6OmFmdGVyIHtcXG4gICAgICBvcGFjaXR5OiAxO1xcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICB0b3A6IDA7XFxuICAgICAgbGVmdDogMDtcXG4gICAgfVxcblxcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIG1pbi1oZWlnaHQ6IDE4cHg7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICBmb250LXNpemU6IDEycHg7XFxuICAgIGNvbG9yOiByZ2JhKDAsMCwwLC41NCk7XFxuICB9XFxuXFxuICAvLyBQcmVmaXggSWNvbnNcXG4gIC5wcmVmaXgge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHdpZHRoOiAkaW5wdXQtaGVpZ2h0O1xcbiAgICBmb250LXNpemU6ICRpbnB1dC1pY29uLXNpemU7XFxuICAgIHRyYW5zaXRpb246IGNvbG9yIC4ycztcXG4gICAvLyB0b3A6ICgkaW5wdXQtaGVpZ2h0IC0gJGlucHV0LWljb24tc2l6ZSkgLyAyO1xcblxcbiAgICAmLmFjdGl2ZSB7IGNvbG9yOiAkaW5wdXQtZm9jdXMtY29sb3I7IH1cXG4gIH1cXG5cXG4gIC5wcmVmaXggfiBpbnB1dCxcXG4gIC5wcmVmaXggfiB0ZXh0YXJlYSxcXG4gIC5wcmVmaXggfiBsYWJlbCxcXG4gIC5wcmVmaXggfiAudmFsaWRhdGUgfiBsYWJlbCxcXG4gIC5wcmVmaXggfiAuaGVscGVyLXRleHQsXFxuICAucHJlZml4IH4gLmF1dG9jb21wbGV0ZS1jb250ZW50IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDNyZW07XFxuICAgIHdpZHRoOiA5MiU7XFxuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAzcmVtKTtcXG4gIH1cXG5cXG4gIC5wcmVmaXggfiBsYWJlbCB7IG1hcmdpbi1sZWZ0OiAzcmVtOyB9XFxuXFxuICBAbWVkaWEgI3skbWVkaXVtLWFuZC1kb3dufSB7XFxuICAgIC5wcmVmaXggfiBpbnB1dCB7XFxuICAgICAgd2lkdGg6IDg2JTtcXG4gICAgICB3aWR0aDogY2FsYygxMDAlIC0gM3JlbSk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIEBtZWRpYSAjeyRzbWFsbC1hbmQtZG93bn0ge1xcbiAgICAucHJlZml4IH4gaW5wdXQge1xcbiAgICAgIHdpZHRoOiA4MCU7XFxuICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDNyZW0pO1xcbiAgICB9XFxuICB9XFxufVxcblxcblxcbi8qIFNlYXJjaCBGaWVsZCAqL1xcblxcbi5pbnB1dC1maWVsZCBpbnB1dFt0eXBlPXNlYXJjaF0ge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIHRyYW5zaXRpb246IC4zcyBiYWNrZ3JvdW5kLWNvbG9yO1xcblxcbiAgLm5hdi13cmFwcGVyICYge1xcbiAgICBoZWlnaHQ6IGluaGVyaXQ7XFxuICAgIHBhZGRpbmctbGVmdDogNHJlbTtcXG4gICAgd2lkdGg6IGNhbGMoMTAwJSAtIDRyZW0pO1xcbiAgICBib3JkZXI6IDA7XFxuICAgIGJveC1zaGFkb3c6IG5vbmU7XFxuICB9XFxuXFxuICAmOmZvY3VzOm5vdCguYnJvd3Nlci1kZWZhdWx0KSB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICRpbnB1dC1iYWNrZ3JvdW5kO1xcbiAgICBib3JkZXI6IDA7XFxuICAgIGJveC1zaGFkb3c6IG5vbmU7XFxuICAgIGNvbG9yOiAjNDQ0O1xcblxcbiAgICAmICsgbGFiZWwgaSxcXG4gICAgJiB+IC5tZGktbmF2aWdhdGlvbi1jbG9zZSxcXG4gICAgJiB+IC5tYXRlcmlhbC1pY29ucyB7XFxuICAgICAgY29sb3I6ICM0NDQ7XFxuICAgIH1cXG4gIH1cXG5cXG4gICYgKyAubGFiZWwtaWNvbiB7XFxuICAgIHRyYW5zZm9ybTogbm9uZTtcXG4gICAgbGVmdDogMXJlbTtcXG4gIH1cXG5cXG4gICYgfiAubWRpLW5hdmlnYXRpb24tY2xvc2UsXFxuICAmIH4gLm1hdGVyaWFsLWljb25zIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB0b3A6IDA7XFxuICAgIHJpZ2h0OiAxcmVtO1xcbiAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgZm9udC1zaXplOiAkaW5wdXQtaWNvbi1zaXplO1xcbiAgICB0cmFuc2l0aW9uOiAuM3MgY29sb3I7XFxuICB9XFxufVxcblxcblxcbi8qIFRleHRhcmVhICovXFxuXFxuLy8gRGVmYXVsdCB0ZXh0YXJlYVxcbnRleHRhcmVhIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuXFxuICAmLnRleHRhcmVhIHtcXG4gICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcXG4gICAgb3ZlcmZsb3cteTogaGlkZGVuOyAvKiBwcmV2ZW50cyBzY3JvbGwgYmFyIGZsYXNoICovXFxuICAgIHBhZGRpbmc6IC44cmVtIDAgLjhyZW0gMDsgLyogcHJldmVudHMgdGV4dCBqdW1wIG9uIEVudGVyIGtleXByZXNzICovXFxuICAgIHJlc2l6ZTogbm9uZTtcXG4gICAgbWluLWhlaWdodDogJGlucHV0LWhlaWdodDtcXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIH1cXG59XFxuXFxuLy8gRm9yIHRleHRhcmVhIGF1dG9yZXNpemVcXG5cXG4uaGlkZGVuZGl2IHtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcXG4gIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7IC8qIGZ1dHVyZSB2ZXJzaW9uIG9mIGRlcHJlY2F0ZWQgJ3dvcmQtd3JhcCcgKi9cXG4gIHBhZGRpbmctdG9wOiAxLjJyZW07IC8qIHByZXZlbnRzIHRleHQganVtcCBvbiBFbnRlciBrZXlwcmVzcyAqL1xcblxcbiAgLy8gUmVkdWNlcyByZXBhaW50c1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgei1pbmRleDogLTE7XFxufVxcblxcblxcbi8qIEF1dG9jb21wbGV0ZSAqL1xcbi5hdXRvY29tcGxldGUtY29udGVudCB7XFxuICBsaSB7XFxuICAgIC5oaWdobGlnaHQgeyBjb2xvcjogIzQ0NDsgfVxcblxcbiAgICBpbWcge1xcbiAgICAgIC8vIGhlaWdodDogJGRyb3Bkb3duLWl0ZW0taGVpZ2h0IC0gMTA7XFxuICAgICAgLy8gd2lkdGg6ICRkcm9wZG93bi1pdGVtLWhlaWdodCAtIDEwO1xcbiAgICAgIG1hcmdpbjogNXB4IDE1cHg7XFxuICAgIH1cXG4gIH1cXG59XFxuXFxuLyogQ2hhcmFjdGVyIENvdW50ZXIgKi9cXG4uY2hhcmFjdGVyLWNvdW50ZXIge1xcbiAgbWluLWhlaWdodDogMThweDtcXG59XFxuXCIsXCIvKiBSYWRpbyBCdXR0b25zXFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cXG5cXG4vLyBSZW1vdmUgZGVmYXVsdCBSYWRpbyBCdXR0b25zXFxuW3R5cGU9XFxcInJhZGlvXFxcIl06bm90KDpjaGVja2VkKSxcXG5bdHlwZT1cXFwicmFkaW9cXFwiXTpjaGVja2VkIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIG9wYWNpdHk6IDA7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuW3R5cGU9XFxcInJhZGlvXFxcIl06bm90KDpjaGVja2VkKSArIHNwYW4sXFxuW3R5cGU9XFxcInJhZGlvXFxcIl06Y2hlY2tlZCArIHNwYW4ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgcGFkZGluZy1sZWZ0OiAzNXB4O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgaGVpZ2h0OiAyNXB4O1xcbiAgbGluZS1oZWlnaHQ6IDI1cHg7XFxuICBmb250LXNpemU6IDFyZW07XFxuICB0cmFuc2l0aW9uOiAuMjhzIGVhc2U7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuW3R5cGU9XFxcInJhZGlvXFxcIl0gKyBzcGFuOmJlZm9yZSxcXG5bdHlwZT1cXFwicmFkaW9cXFwiXSArIHNwYW46YWZ0ZXIge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbiAgbWFyZ2luOiA0cHg7XFxuICB3aWR0aDogMTZweDtcXG4gIGhlaWdodDogMTZweDtcXG4gIHotaW5kZXg6IDA7XFxuICB0cmFuc2l0aW9uOiAuMjhzIGVhc2U7XFxufVxcblxcbi8qIFVuY2hlY2tlZCBzdHlsZXMgKi9cXG5bdHlwZT1cXFwicmFkaW9cXFwiXTpub3QoOmNoZWNrZWQpICsgc3BhbjpiZWZvcmUsXFxuW3R5cGU9XFxcInJhZGlvXFxcIl06bm90KDpjaGVja2VkKSArIHNwYW46YWZ0ZXIsXFxuW3R5cGU9XFxcInJhZGlvXFxcIl06Y2hlY2tlZCArIHNwYW46YmVmb3JlLFxcblt0eXBlPVxcXCJyYWRpb1xcXCJdOmNoZWNrZWQgKyBzcGFuOmFmdGVyLFxcblt0eXBlPVxcXCJyYWRpb1xcXCJdLndpdGgtZ2FwOmNoZWNrZWQgKyBzcGFuOmJlZm9yZSxcXG5bdHlwZT1cXFwicmFkaW9cXFwiXS53aXRoLWdhcDpjaGVja2VkICsgc3BhbjphZnRlciB7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcblxcblt0eXBlPVxcXCJyYWRpb1xcXCJdOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOmJlZm9yZSxcXG5bdHlwZT1cXFwicmFkaW9cXFwiXTpub3QoOmNoZWNrZWQpICsgc3BhbjphZnRlciB7XFxuICBib3JkZXI6IDJweCBzb2xpZCAkcmFkaW8tZW1wdHktY29sb3I7XFxufVxcblxcblt0eXBlPVxcXCJyYWRpb1xcXCJdOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOmFmdGVyIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxufVxcblxcbi8qIENoZWNrZWQgc3R5bGVzICovXFxuW3R5cGU9XFxcInJhZGlvXFxcIl06Y2hlY2tlZCArIHNwYW46YmVmb3JlIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG5bdHlwZT1cXFwicmFkaW9cXFwiXTpjaGVja2VkICsgc3BhbjphZnRlcixcXG5bdHlwZT1cXFwicmFkaW9cXFwiXS53aXRoLWdhcDpjaGVja2VkICsgc3BhbjpiZWZvcmUsXFxuW3R5cGU9XFxcInJhZGlvXFxcIl0ud2l0aC1nYXA6Y2hlY2tlZCArIHNwYW46YWZ0ZXIge1xcbiAgYm9yZGVyOiAkcmFkaW8tYm9yZGVyO1xcbn1cXG5cXG5bdHlwZT1cXFwicmFkaW9cXFwiXTpjaGVja2VkICsgc3BhbjphZnRlcixcXG5bdHlwZT1cXFwicmFkaW9cXFwiXS53aXRoLWdhcDpjaGVja2VkICsgc3BhbjphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmFkaW8tZmlsbC1jb2xvcjtcXG59XFxuXFxuW3R5cGU9XFxcInJhZGlvXFxcIl06Y2hlY2tlZCArIHNwYW46YWZ0ZXIge1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgxLjAyKTtcXG59XFxuXFxuLyogUmFkaW8gV2l0aCBnYXAgKi9cXG5bdHlwZT1cXFwicmFkaW9cXFwiXS53aXRoLWdhcDpjaGVja2VkICsgc3BhbjphZnRlciB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKC41KTtcXG59XFxuXFxuLyogRm9jdXNlZCBzdHlsZXMgKi9cXG5bdHlwZT1cXFwicmFkaW9cXFwiXS50YWJiZWQ6Zm9jdXMgKyBzcGFuOmJlZm9yZSB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxMHB4IHJnYmEoMCwwLDAsLjEpO1xcbn1cXG5cXG4vKiBEaXNhYmxlZCBSYWRpbyBXaXRoIGdhcCAqL1xcblt0eXBlPVxcXCJyYWRpb1xcXCJdLndpdGgtZ2FwOmRpc2FibGVkOmNoZWNrZWQgKyBzcGFuOmJlZm9yZSB7XFxuICBib3JkZXI6IDJweCBzb2xpZCAkaW5wdXQtZGlzYWJsZWQtY29sb3I7XFxufVxcblxcblt0eXBlPVxcXCJyYWRpb1xcXCJdLndpdGgtZ2FwOmRpc2FibGVkOmNoZWNrZWQgKyBzcGFuOmFmdGVyIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICRpbnB1dC1kaXNhYmxlZC1jb2xvcjtcXG59XFxuXFxuLyogRGlzYWJsZWQgc3R5bGUgKi9cXG5bdHlwZT1cXFwicmFkaW9cXFwiXTpkaXNhYmxlZDpub3QoOmNoZWNrZWQpICsgc3BhbjpiZWZvcmUsXFxuW3R5cGU9XFxcInJhZGlvXFxcIl06ZGlzYWJsZWQ6Y2hlY2tlZCArIHNwYW46YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWNvbG9yOiAkaW5wdXQtZGlzYWJsZWQtY29sb3I7XFxufVxcblxcblt0eXBlPVxcXCJyYWRpb1xcXCJdOmRpc2FibGVkICsgc3BhbiB7XFxuICBjb2xvcjogJGlucHV0LWRpc2FibGVkLWNvbG9yO1xcbn1cXG5cXG5bdHlwZT1cXFwicmFkaW9cXFwiXTpkaXNhYmxlZDpub3QoOmNoZWNrZWQpICsgc3BhbjpiZWZvcmUge1xcbiAgYm9yZGVyLWNvbG9yOiAkaW5wdXQtZGlzYWJsZWQtY29sb3I7XFxufVxcblxcblt0eXBlPVxcXCJyYWRpb1xcXCJdOmRpc2FibGVkOmNoZWNrZWQgKyBzcGFuOmFmdGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICRpbnB1dC1kaXNhYmxlZC1jb2xvcjtcXG4gIGJvcmRlci1jb2xvcjogJGlucHV0LWRpc2FibGVkLXNvbGlkLWNvbG9yO1xcbn1cXG5cIixcIi8qIENoZWNrYm94ZXNcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcblxcbi8qIFJlbW92ZSBkZWZhdWx0IGNoZWNrYm94ICovXFxuW3R5cGU9XFxcImNoZWNrYm94XFxcIl06bm90KDpjaGVja2VkKSxcXG5bdHlwZT1cXFwiY2hlY2tib3hcXFwiXTpjaGVja2VkIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIG9wYWNpdHk6IDA7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLy8gQ2hlY2tib3ggU3R5bGVzXFxuW3R5cGU9XFxcImNoZWNrYm94XFxcIl0ge1xcbiAgLy8gVGV4dCBMYWJlbCBTdHlsZVxcbiAgKyBzcGFuOm5vdCgubGV2ZXIpIHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDM1cHg7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICBoZWlnaHQ6IDI1cHg7XFxuICAgIGxpbmUtaGVpZ2h0OiAyNXB4O1xcbiAgICBmb250LXNpemU6IDFyZW07XFxuICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgfVxcblxcbiAgLyogY2hlY2tib3ggYXNwZWN0ICovXFxuICArIHNwYW46bm90KC5sZXZlcik6YmVmb3JlLFxcbiAgJjpub3QoLmZpbGxlZC1pbikgKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXG4gICAgY29udGVudDogJyc7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgdG9wOiAwO1xcbiAgICBsZWZ0OiAwO1xcbiAgICB3aWR0aDogMThweDtcXG4gICAgaGVpZ2h0OiAxOHB4O1xcbiAgICB6LWluZGV4OiAwO1xcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkcmFkaW8tZW1wdHktY29sb3I7XFxuICAgIGJvcmRlci1yYWRpdXM6IDFweDtcXG4gICAgbWFyZ2luLXRvcDogM3B4O1xcbiAgICB0cmFuc2l0aW9uOiAuMnM7XFxuICB9XFxuXFxuICAmOm5vdCguZmlsbGVkLWluKSArIHNwYW46bm90KC5sZXZlcik6YWZ0ZXIge1xcbiAgICBib3JkZXI6IDA7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICB9XFxuXFxuICAmOm5vdCg6Y2hlY2tlZCk6ZGlzYWJsZWQgKyBzcGFuOm5vdCgubGV2ZXIpOmJlZm9yZSB7XFxuICAgIGJvcmRlcjogbm9uZTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWRpc2FibGVkLWNvbG9yO1xcbiAgfVxcblxcbiAgLy8gRm9jdXNlZCBzdHlsZXNcXG4gICYudGFiYmVkOmZvY3VzICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxuICAgIGJvcmRlcjogMDtcXG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgICBib3gtc2hhZG93OiAwIDAgMCAxMHB4IHJnYmEoMCwwLDAsLjEpO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsMCwwLC4xKTtcXG4gIH1cXG59XFxuXFxuW3R5cGU9XFxcImNoZWNrYm94XFxcIl06Y2hlY2tlZCB7XFxuICArIHNwYW46bm90KC5sZXZlcik6YmVmb3JlIHtcXG4gICAgdG9wOiAtNHB4O1xcbiAgICBsZWZ0OiAtNXB4O1xcbiAgICB3aWR0aDogMTJweDtcXG4gICAgaGVpZ2h0OiAyMnB4O1xcbiAgICBib3JkZXItdG9wOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICAgIGJvcmRlci1yaWdodDogJHJhZGlvLWJvcmRlcjtcXG4gICAgYm9yZGVyLWJvdHRvbTogJHJhZGlvLWJvcmRlcjtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNDBkZWcpO1xcbiAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XFxuICAgIHRyYW5zZm9ybS1vcmlnaW46IDEwMCUgMTAwJTtcXG4gIH1cXG5cXG4gICY6ZGlzYWJsZWQgKyBzcGFuOmJlZm9yZSB7XFxuICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICRpbnB1dC1kaXNhYmxlZC1jb2xvcjtcXG4gICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICRpbnB1dC1kaXNhYmxlZC1jb2xvcjtcXG4gIH1cXG59XFxuXFxuLyogSW5kZXRlcm1pbmF0ZSBjaGVja2JveCAqL1xcblt0eXBlPVxcXCJjaGVja2JveFxcXCJdOmluZGV0ZXJtaW5hdGUge1xcbiAgKyBzcGFuOm5vdCgubGV2ZXIpOmJlZm9yZSB7XFxuICAgIHRvcDogLTExcHg7XFxuICAgIGxlZnQ6IC0xMnB4O1xcbiAgICB3aWR0aDogMTBweDtcXG4gICAgaGVpZ2h0OiAyMnB4O1xcbiAgICBib3JkZXItdG9wOiBub25lO1xcbiAgICBib3JkZXItbGVmdDogbm9uZTtcXG4gICAgYm9yZGVyLXJpZ2h0OiAkcmFkaW8tYm9yZGVyO1xcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XFxuICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXG4gICAgdHJhbnNmb3JtLW9yaWdpbjogMTAwJSAxMDAlO1xcbiAgfVxcblxcbiAgLy8gRGlzYWJsZWQgaW5kZXRlcm1pbmF0ZVxcbiAgJjpkaXNhYmxlZCArIHNwYW46bm90KC5sZXZlcik6YmVmb3JlIHtcXG4gICAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgJGlucHV0LWRpc2FibGVkLWNvbG9yO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIH1cXG59XFxuXFxuLy8gRmlsbGVkIGluIFN0eWxlXFxuW3R5cGU9XFxcImNoZWNrYm94XFxcIl0uZmlsbGVkLWluIHtcXG4gIC8vIEdlbmVyYWxcXG4gICsgc3Bhbjpub3QoLmxldmVyKTphZnRlciB7XFxuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIH1cXG5cXG4gICsgc3Bhbjpub3QoLmxldmVyKTpiZWZvcmUsXFxuICArIHNwYW46bm90KC5sZXZlcik6YWZ0ZXIge1xcbiAgICBjb250ZW50OiAnJztcXG4gICAgbGVmdDogMDtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAvKiAuMXMgZGVsYXkgaXMgZm9yIGNoZWNrIGFuaW1hdGlvbiAqL1xcbiAgICB0cmFuc2l0aW9uOiBib3JkZXIgLjI1cywgYmFja2dyb3VuZC1jb2xvciAuMjVzLCB3aWR0aCAuMjBzIC4xcywgaGVpZ2h0IC4yMHMgLjFzLCB0b3AgLjIwcyAuMXMsIGxlZnQgLjIwcyAuMXM7XFxuICAgIHotaW5kZXg6IDE7XFxuICB9XFxuXFxuICAvLyBVbmNoZWNrZWQgc3R5bGVcXG4gICY6bm90KDpjaGVja2VkKSArIHNwYW46bm90KC5sZXZlcik6YmVmb3JlIHtcXG4gICAgd2lkdGg6IDA7XFxuICAgIGhlaWdodDogMDtcXG4gICAgYm9yZGVyOiAzcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICAgIGxlZnQ6IDZweDtcXG4gICAgdG9wOiAxMHB4O1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZVooMzdkZWcpO1xcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiAxMDAlIDEwMCU7XFxuICB9XFxuXFxuICAmOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXG4gICAgaGVpZ2h0OiAyMHB4O1xcbiAgICB3aWR0aDogMjBweDtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICAgIGJvcmRlcjogMnB4IHNvbGlkICRyYWRpby1lbXB0eS1jb2xvcjtcXG4gICAgdG9wOiAwcHg7XFxuICAgIHotaW5kZXg6IDA7XFxuICB9XFxuXFxuICAvLyBDaGVja2VkIHN0eWxlXFxuICAmOmNoZWNrZWQge1xcbiAgICArIHNwYW46bm90KC5sZXZlcik6YmVmb3JlIHtcXG4gICAgICB0b3A6IDA7XFxuICAgICAgbGVmdDogMXB4O1xcbiAgICAgIHdpZHRoOiA4cHg7XFxuICAgICAgaGVpZ2h0OiAxM3B4O1xcbiAgICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gICAgICBib3JkZXItbGVmdDogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICRpbnB1dC1iYWNrZ3JvdW5kO1xcbiAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAkaW5wdXQtYmFja2dyb3VuZDtcXG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZVooMzdkZWcpO1xcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDEwMCUgMTAwJTtcXG4gICAgfVxcblxcbiAgICArIHNwYW46bm90KC5sZXZlcik6YWZ0ZXIge1xcbiAgICAgIHRvcDogMDtcXG4gICAgICB3aWR0aDogMjBweDtcXG4gICAgICBoZWlnaHQ6IDIwcHg7XFxuICAgICAgYm9yZGVyOiAycHggc29saWQgJHNlY29uZGFyeS1jb2xvcjtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yO1xcbiAgICAgIHotaW5kZXg6IDA7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC8vIEZvY3VzZWQgc3R5bGVzXFxuICAmLnRhYmJlZDpmb2N1cyArIHNwYW46bm90KC5sZXZlcik6YWZ0ZXIge1xcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XFxuICAgIGJvcmRlci1jb2xvcjogJHJhZGlvLWVtcHR5LWNvbG9yO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsMCwwLC4xKTtcXG4gIH1cXG5cXG4gICYudGFiYmVkOmNoZWNrZWQ6Zm9jdXMgKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yO1xcbiAgICBib3JkZXItY29sb3I6ICRzZWNvbmRhcnktY29sb3I7XFxuICB9XFxuXFxuICAvLyBEaXNhYmxlZCBzdHlsZVxcbiAgJjpkaXNhYmxlZDpub3QoOmNoZWNrZWQpICsgc3Bhbjpub3QoLmxldmVyKTpiZWZvcmUge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gICAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICB9XFxuXFxuICAmOmRpc2FibGVkOm5vdCg6Y2hlY2tlZCkgKyBzcGFuOm5vdCgubGV2ZXIpOmFmdGVyIHtcXG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWRpc2FibGVkLXNvbGlkLWNvbG9yO1xcbiAgfVxcblxcbiAgJjpkaXNhYmxlZDpjaGVja2VkICsgc3Bhbjpub3QoLmxldmVyKTpiZWZvcmUge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIH1cXG5cXG4gICY6ZGlzYWJsZWQ6Y2hlY2tlZCArIHNwYW46bm90KC5sZXZlcik6YWZ0ZXIge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXQtZGlzYWJsZWQtc29saWQtY29sb3I7XFxuICAgIGJvcmRlci1jb2xvcjogJGlucHV0LWRpc2FibGVkLXNvbGlkLWNvbG9yO1xcbiAgfVxcbn1cXG5cIixcIi8qIFN3aXRjaFxcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXFxuXFxuLnN3aXRjaCxcXG4uc3dpdGNoICoge1xcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4uc3dpdGNoIGxhYmVsIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnN3aXRjaCBsYWJlbCBpbnB1dFt0eXBlPWNoZWNrYm94XSB7XFxuICBvcGFjaXR5OiAwO1xcbiAgd2lkdGg6IDA7XFxuICBoZWlnaHQ6IDA7XFxuXFxuICAmOmNoZWNrZWQgKyAubGV2ZXIge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc3dpdGNoLWNoZWNrZWQtbGV2ZXItYmc7XFxuXFxuICAgICY6YmVmb3JlLCAmOmFmdGVyIHtcXG4gICAgICBsZWZ0OiAxOHB4O1xcbiAgICB9XFxuXFxuICAgICY6YWZ0ZXIge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzd2l0Y2gtYmctY29sb3I7XFxuICAgIH1cXG4gIH1cXG59XFxuXFxuLnN3aXRjaCBsYWJlbCAubGV2ZXIge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMzZweDtcXG4gIGhlaWdodDogMTRweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICRzd2l0Y2gtdW5jaGVja2VkLWxldmVyLWJnO1xcbiAgYm9yZGVyLXJhZGl1czogJHN3aXRjaC1yYWRpdXM7XFxuICAvL21hcmdpbi1yaWdodDogMTBweDtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4zcyBlYXNlO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIG1hcmdpbjogMCAxNnB4O1xcblxcbiAgJjpiZWZvcmUsICY6YWZ0ZXIge1xcbiAgICBjb250ZW50OiBcXFwiXFxcIjtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIHdpZHRoOiAyMHB4O1xcbiAgICBoZWlnaHQ6IDIwcHg7XFxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gICAgbGVmdDogMDtcXG4gICAgdG9wOiAtM3B4O1xcbiAgICB0cmFuc2l0aW9uOiBsZWZ0IDAuM3MgZWFzZSwgYmFja2dyb3VuZCAuM3MgZWFzZSwgYm94LXNoYWRvdyAwLjFzIGVhc2UsIHRyYW5zZm9ybSAuMXMgZWFzZTtcXG4gIH1cXG5cXG4gICY6YmVmb3JlIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnRpemUoJHN3aXRjaC1iZy1jb2xvciwgLjg1KTtcXG4gIH1cXG5cXG4gICY6YWZ0ZXIge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc3dpdGNoLXVuY2hlY2tlZC1iZztcXG4gICAgYm94LXNoYWRvdzogMHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcXG4gIH1cXG59XFxuXFxuLy8gU3dpdGNoIGFjdGl2ZSBzdHlsZVxcbmlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6bm90KDpkaXNhYmxlZCkgfiAubGV2ZXI6YWN0aXZlOjpiZWZvcmUsXFxuaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpub3QoOmRpc2FibGVkKS50YWJiZWQ6Zm9jdXMgfiAubGV2ZXI6OmJlZm9yZSB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDIuNCk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudGl6ZSgkc3dpdGNoLWJnLWNvbG9yLCAuODUpO1xcbn1cXG5cXG5pbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKSB+IC5sZXZlcjphY3RpdmU6YmVmb3JlLFxcbmlucHV0W3R5cGU9Y2hlY2tib3hdOm5vdCg6ZGlzYWJsZWQpLnRhYmJlZDpmb2N1cyB+IC5sZXZlcjo6YmVmb3JlIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMi40KTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwwLDAsLjA4KTtcXG59XFxuXFxuLy8gRGlzYWJsZWQgU3R5bGVzXFxuLnN3aXRjaCBpbnB1dFt0eXBlPWNoZWNrYm94XVtkaXNhYmxlZF0gKyAubGV2ZXIge1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLDAsMCwuMTIpO1xcbn1cXG5cXG4uc3dpdGNoIGxhYmVsIGlucHV0W3R5cGU9Y2hlY2tib3hdW2Rpc2FibGVkXSArIC5sZXZlcjphZnRlcixcXG4uc3dpdGNoIGxhYmVsIGlucHV0W3R5cGU9Y2hlY2tib3hdW2Rpc2FibGVkXTpjaGVja2VkICsgLmxldmVyOmFmdGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICRpbnB1dC1kaXNhYmxlZC1zb2xpZC1jb2xvcjtcXG59XFxuXCIsXCIvKiBTZWxlY3QgRmllbGRcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcblxcbnNlbGVjdCB7IGRpc3BsYXk6IG5vbmU7IH1cXG5zZWxlY3QuYnJvd3Nlci1kZWZhdWx0IHsgZGlzcGxheTogYmxvY2s7IH1cXG5cXG5zZWxlY3Qge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdC1iYWNrZ3JvdW5kO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAkc2VsZWN0LXBhZGRpbmc7XFxuICBib3JkZXI6ICRzZWxlY3QtYm9yZGVyO1xcbiAgYm9yZGVyLXJhZGl1czogJHNlbGVjdC1yYWRpdXM7XFxuICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XFxufVxcblxcbi5zZWxlY3QtbGFiZWwge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbn1cXG5cXG4uc2VsZWN0LXdyYXBwZXIge1xcbiAgJi52YWxpZCAuaGVscGVyLXRleHRbZGF0YS1zdWNjZXNzXSxcXG4gICYuaW52YWxpZCB+IC5oZWxwZXItdGV4dFtkYXRhLWVycm9yXSB7XFxuICAgIEBleHRlbmQgJWhpZGRlbi10ZXh0O1xcbiAgfVxcblxcbiAgJi52YWxpZCB7XFxuICAgICYgPiBpbnB1dC5zZWxlY3QtZHJvcGRvd24ge1xcbiAgICAgIEBleHRlbmQgJXZhbGlkLWlucHV0LXN0eWxlO1xcbiAgICB9XFxuXFxuICAgICYgfiAuaGVscGVyLXRleHQ6YWZ0ZXIge1xcbiAgICAgIEBleHRlbmQgJWN1c3RvbS1zdWNjZXNzLW1lc3NhZ2U7XFxuICAgIH1cXG4gIH1cXG5cXG4gICYuaW52YWxpZCB7XFxuICAgICYgPiBpbnB1dC5zZWxlY3QtZHJvcGRvd24sXFxuICAgICYgPiBpbnB1dC5zZWxlY3QtZHJvcGRvd246Zm9jdXMge1xcbiAgICAgIEBleHRlbmQgJWludmFsaWQtaW5wdXQtc3R5bGU7XFxuICAgIH1cXG5cXG4gICAgJiB+IC5oZWxwZXItdGV4dDphZnRlciB7XFxuICAgICAgQGV4dGVuZCAlY3VzdG9tLWVycm9yLW1lc3NhZ2U7XFxuICAgIH1cXG4gIH1cXG5cXG4gICYudmFsaWQgKyBsYWJlbCxcXG4gICYuaW52YWxpZCArIGxhYmVsIHtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgfVxcblxcbiAgJiArIGxhYmVsOmFmdGVyIHtcXG4gICAgQGV4dGVuZCAlaW5wdXQtYWZ0ZXItc3R5bGU7XFxuICB9XFxuXFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuXFxuICBpbnB1dC5zZWxlY3QtZHJvcGRvd24ge1xcbiAgICAmOmZvY3VzIHtcXG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGlucHV0LWZvY3VzLWNvbG9yO1xcbiAgICB9XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gICAgYm9yZGVyOiBub25lO1xcbiAgICBib3JkZXItYm90dG9tOiAkaW5wdXQtYm9yZGVyO1xcbiAgICBvdXRsaW5lOiBub25lO1xcbiAgICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XFxuICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgZm9udC1zaXplOiAkaW5wdXQtZm9udC1zaXplO1xcbiAgICBtYXJnaW46ICRpbnB1dC1tYXJnaW47XFxuICAgIHBhZGRpbmc6IDA7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICB1c2VyLXNlbGVjdDpub25lO1xcbiAgICB6LWluZGV4OiAxO1xcbiAgfVxcblxcbiAgLmNhcmV0IHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICByaWdodDogMDtcXG4gICAgdG9wOiAwO1xcbiAgICBib3R0b206IDA7XFxuICAgIG1hcmdpbjogYXV0byAwO1xcbiAgICB6LWluZGV4OiAwO1xcbiAgICBmaWxsOiByZ2JhKDAsMCwwLC44Nyk7XFxuICB9XFxuXFxuICAmICsgbGFiZWwge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHRvcDogLTI2cHg7XFxuICAgIGZvbnQtc2l6ZTogJGxhYmVsLWZvbnQtc2l6ZTtcXG4gIH1cXG59XFxuXFxuLy8gRGlzYWJsZWQgc3R5bGVzXFxuc2VsZWN0OmRpc2FibGVkIHtcXG4gIGNvbG9yOiAkaW5wdXQtZGlzYWJsZWQtY29sb3I7XFxufVxcblxcbi5zZWxlY3Qtd3JhcHBlci5kaXNhYmxlZCB7XFxuICArIGxhYmVsIHtcXG4gICAgY29sb3I6ICRpbnB1dC1kaXNhYmxlZC1jb2xvcjtcXG4gIH1cXG4gIC5jYXJldCB7XFxuICAgIGZpbGw6ICRpbnB1dC1kaXNhYmxlZC1jb2xvcjtcXG4gIH1cXG59XFxuXFxuLnNlbGVjdC13cmFwcGVyIGlucHV0LnNlbGVjdC1kcm9wZG93bjpkaXNhYmxlZCB7XFxuICBjb2xvcjogJGlucHV0LWRpc2FibGVkLWNvbG9yO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcbi5zZWxlY3Qtd3JhcHBlciBpIHtcXG4gIGNvbG9yOiAkc2VsZWN0LWRpc2FibGVkLWNvbG9yO1xcbn1cXG5cXG4uc2VsZWN0LWRyb3Bkb3duIGxpLmRpc2FibGVkLFxcbi5zZWxlY3QtZHJvcGRvd24gbGkuZGlzYWJsZWQgPiBzcGFuLFxcbi5zZWxlY3QtZHJvcGRvd24gbGkub3B0Z3JvdXAge1xcbiAgY29sb3I6ICRzZWxlY3QtZGlzYWJsZWQtY29sb3I7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuYm9keS5rZXlib2FyZC1mb2N1c2VkIHtcXG4gIC5zZWxlY3QtZHJvcGRvd24uZHJvcGRvd24tY29udGVudCBsaTpmb2N1cyB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3Qtb3B0aW9uLWZvY3VzO1xcbiAgfVxcbn1cXG5cXG4uc2VsZWN0LWRyb3Bkb3duLmRyb3Bkb3duLWNvbnRlbnQge1xcbiAgbGkge1xcbiAgICAmOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0LW9wdGlvbi1ob3ZlcjtcXG4gICAgfVxcblxcbiAgICAmLnNlbGVjdGVkIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0LW9wdGlvbi1zZWxlY3RlZDtcXG4gICAgfVxcbiAgfVxcbn1cXG5cXG4vLyBQcmVmaXggSWNvbnNcXG4ucHJlZml4IH4gLnNlbGVjdC13cmFwcGVyIHtcXG4gIG1hcmdpbi1sZWZ0OiAzcmVtO1xcbiAgd2lkdGg6IDkyJTtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSAzcmVtKTtcXG59XFxuXFxuLnByZWZpeCB+IGxhYmVsIHsgbWFyZ2luLWxlZnQ6IDNyZW07IH1cXG5cXG4vLyBJY29uc1xcbi5zZWxlY3QtZHJvcGRvd24gbGkge1xcbiAgaW1nIHtcXG4gICAgLy8gaGVpZ2h0OiAkZHJvcGRvd24taXRlbS1oZWlnaHQgLSAxMDtcXG4gICAgLy8gd2lkdGg6ICRkcm9wZG93bi1pdGVtLWhlaWdodCAtIDEwO1xcbiAgICBtYXJnaW46IDVweCAxNXB4O1xcbiAgICBmbG9hdDogcmlnaHQ7XFxuICB9XFxufVxcblxcbi8vIE9wdGdyb3VwIHN0eWxlc1xcbi5zZWxlY3QtZHJvcGRvd24gbGkub3B0Z3JvdXAge1xcbiAgLy8gYm9yZGVyLXRvcDogMXB4IHNvbGlkICRkcm9wZG93bi1ob3Zlci1iZy1jb2xvcjtcXG5cXG4gICYuc2VsZWN0ZWQgPiBzcGFuIHtcXG4gICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgLjcpO1xcbiAgfVxcblxcbiAgJiA+IHNwYW4ge1xcbiAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAuNCk7XFxuICB9XFxuXFxuICAmIH4gbGkub3B0Z3JvdXAtb3B0aW9uIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAxcmVtO1xcbiAgfVxcbn1cXG5cIixcIi8qIEZpbGUgSW5wdXRcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcblxcbi5maWxlLWZpZWxkIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG5cXG4gIC5maWxlLXBhdGgtd3JhcHBlciB7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIHBhZGRpbmctbGVmdDogMTBweDtcXG4gIH1cXG5cXG4gIGlucHV0LmZpbGUtcGF0aCB7IHdpZHRoOiAxMDAlOyB9XFxuXFxuICAuYnRuIHtcXG4gICAgZmxvYXQ6IGxlZnQ7XFxuICAgIGhlaWdodDogJGlucHV0LWhlaWdodDtcXG4gICAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XFxuICB9XFxuXFxuICBzcGFuIHtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgfVxcblxcbiAgaW5wdXRbdHlwZT1maWxlXSB7XFxuXFxuICAgIC8vIE5lZWRlZCB0byBvdmVycmlkZSB3ZWJraXQgYnV0dG9uXFxuICAgICY6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHtcXG4gICAgICBkaXNwbGF5OiBub25lO1xcbiAgICB9XFxuXFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgdG9wOiAwO1xcbiAgICByaWdodDogMDtcXG4gICAgbGVmdDogMDtcXG4gICAgYm90dG9tOiAwO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgICBmb250LXNpemU6IDIwcHg7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTApO1xcbiAgfVxcbn1cXG5cIixcIi8qIFJhbmdlXFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cXG5cXG4ucmFuZ2UtZmllbGQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXSxcXG5pbnB1dFt0eXBlPXJhbmdlXSArIC50aHVtYiB7XFxuICAvLyBAZXh0ZW5kIC5uby1zZWxlY3Q7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiBub25lO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luOiAxNXB4IDA7XFxuICBwYWRkaW5nOiAwO1xcblxcbiAgJjpmb2N1cyB7XFxuICAgIG91dGxpbmU6IG5vbmU7XFxuICB9XFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdICsgLnRodW1iIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMTBweDtcXG4gIGxlZnQ6IDA7XFxuICBib3JkZXI6IG5vbmU7XFxuICBoZWlnaHQ6IDA7XFxuICB3aWR0aDogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICRyYWRpby1maWxsLWNvbG9yO1xcbiAgbWFyZ2luLWxlZnQ6IDdweDtcXG5cXG4gIHRyYW5zZm9ybS1vcmlnaW46IDUwJSA1MCU7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpO1xcblxcbiAgLnZhbHVlIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIHdpZHRoOiAzMHB4O1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgIGNvbG9yOiAkcmFkaW8tZmlsbC1jb2xvcjtcXG4gICAgZm9udC1zaXplOiAwO1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XFxuICB9XFxuXFxuICAmLmFjdGl2ZSB7XFxuICAgIGJvcmRlci1yYWRpdXM6IDUwJSA1MCUgNTAlIDA7XFxuXFxuICAgIC52YWx1ZSB7XFxuICAgICAgY29sb3I6ICRpbnB1dC1iYWNrZ3JvdW5kO1xcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xcbiAgICAgIG1hcmdpbi10b3A6IDhweDtcXG4gICAgICBmb250LXNpemU6IDEwcHg7XFxuICAgIH1cXG4gIH1cXG59XFxuXFxuLy8gU2hhcmVkXFxuQG1peGluIHJhbmdlLXRyYWNrIHtcXG4gIGhlaWdodDogJHRyYWNrLWhlaWdodDtcXG4gIGJhY2tncm91bmQ6ICNjMmMwYzI7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcblxcbkBtaXhpbiByYW5nZS10aHVtYiB7XFxuICBib3JkZXI6IG5vbmU7XFxuICBoZWlnaHQ6ICRyYW5nZS1oZWlnaHQ7XFxuICB3aWR0aDogJHJhbmdlLXdpZHRoO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYmFja2dyb3VuZDogJHJhZGlvLWZpbGwtY29sb3I7XFxuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IC4zcztcXG59XFxuXFxuLy8gV2ViS2l0XFxuaW5wdXRbdHlwZT1yYW5nZV0ge1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2sge1xcbiAgQGluY2x1ZGUgcmFuZ2UtdHJhY2s7XFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdOjotd2Via2l0LXNsaWRlci10aHVtYiB7XFxuICBAaW5jbHVkZSByYW5nZS10aHVtYjtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICRyYWRpby1maWxsLWNvbG9yO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDUwJTtcXG4gIG1hcmdpbjogLTVweCAwIDAgMDtcXG5cXG59XFxuXFxuLmtleWJvYXJkLWZvY3VzZWQgaW5wdXRbdHlwZT1yYW5nZV06Zm9jdXM6bm90KC5hY3RpdmUpOjotd2Via2l0LXNsaWRlci10aHVtYiB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxMHB4IHJnYmEoJHJhZGlvLWZpbGwtY29sb3IsIC4yNik7XFxufVxcblxcbi8vIEZpcmVGb3hcXG5pbnB1dFt0eXBlPXJhbmdlXSB7XFxuICAvKiBmaXggZm9yIEZGIHVuYWJsZSB0byBhcHBseSBmb2N1cyBzdHlsZSBidWcgICovXFxuICBib3JkZXI6IDFweCBzb2xpZCB3aGl0ZTtcXG5cXG4gIC8qcmVxdWlyZWQgZm9yIHByb3BlciB0cmFjayBzaXppbmcgaW4gRkYqL1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXTo6LW1vei1yYW5nZS10cmFjayB7XFxuICBAaW5jbHVkZSByYW5nZS10cmFjaztcXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV06Oi1tb3otZm9jdXMtaW5uZXIge1xcbiAgYm9yZGVyOiAwO1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXTo6LW1vei1yYW5nZS10aHVtYiB7XFxuICBAaW5jbHVkZSByYW5nZS10aHVtYjtcXG4gIG1hcmdpbi10b3A6IC01cHg7XFxufVxcblxcbi8vIGhpZGUgdGhlIG91dGxpbmUgYmVoaW5kIHRoZSBib3JkZXJcXG5pbnB1dFt0eXBlPXJhbmdlXTotbW96LWZvY3VzcmluZyB7XFxuICBvdXRsaW5lOiAxcHggc29saWQgI2ZmZjtcXG4gIG91dGxpbmUtb2Zmc2V0OiAtMXB4O1xcbn1cXG5cXG4ua2V5Ym9hcmQtZm9jdXNlZCBpbnB1dFt0eXBlPXJhbmdlXTpmb2N1czpub3QoLmFjdGl2ZSk6Oi1tb3otcmFuZ2UtdGh1bWIge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMTBweCByZ2JhKCRyYWRpby1maWxsLWNvbG9yLCAuMjYpO1xcbn1cXG5cXG4vLyBJRSAxMCtcXG5pbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRyYWNrIHtcXG4gIGhlaWdodDogJHRyYWNrLWhlaWdodDtcXG5cXG4gIC8vIHJlbW92ZSBiZyBjb2xvdXIgZnJvbSB0aGUgdHJhY2ssIHdlJ2xsIHVzZSBtcy1maWxsLWxvd2VyIGFuZCBtcy1maWxsLXVwcGVyIGluc3RlYWRcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcblxcbiAgLy8gbGVhdmUgcm9vbSBmb3IgdGhlIGxhcmdlciB0aHVtYiB0byBvdmVyZmxvdyB3aXRoIGEgdHJhbnNwYXJlbnQgYm9yZGVyICovXFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXdpZHRoOiA2cHggMDtcXG5cXG4gIC8qcmVtb3ZlIGRlZmF1bHQgdGljayBtYXJrcyovXFxuICBjb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbmlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmlsbC1sb3dlciB7XFxuICBiYWNrZ3JvdW5kOiAjNzc3O1xcbn1cXG5cXG5pbnB1dFt0eXBlPXJhbmdlXTo6LW1zLWZpbGwtdXBwZXIge1xcbiAgYmFja2dyb3VuZDogI2RkZDtcXG59XFxuXFxuaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10aHVtYiB7XFxuICBAaW5jbHVkZSByYW5nZS10aHVtYjtcXG59XFxuXFxuLmtleWJvYXJkLWZvY3VzZWQgaW5wdXRbdHlwZT1yYW5nZV06Zm9jdXM6bm90KC5hY3RpdmUpOjotbXMtdGh1bWIge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMTBweCByZ2JhKCRyYWRpby1maWxsLWNvbG9yLCAuMjYpO1xcbn1cXG5cIixcIi5wYXJhbGxheCB7XFxuXFxuICAvKiBTZXQgYSBzcGVjaWZpYyBoZWlnaHQgKi9cXG4gIG1pbi1oZWlnaHQ6IDUwMHB4O1xcblxcbiAgLyogQ3JlYXRlIHRoZSBwYXJhbGxheCBzY3JvbGxpbmcgZWZmZWN0ICovXFxuICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkO1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XFxufVwiLFwiJGN1YmUtaGVpZ2h0OjIwMHB4O1xcbiogeyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XFxuXFxuYm9keSB7IGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyB9XFxuXFxuLnNjZW5lIHtcXG4gIHdpZHRoOiAkY3ViZS1oZWlnaHQ7XFxuICBoZWlnaHQ6ICRjdWJlLWhlaWdodDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNDQ0M7XFxuICBtYXJnaW46IDgwcHg7XFxuICBwZXJzcGVjdGl2ZTogNDAwcHg7XFxufVxcblxcbi5jdWJlIHtcXG4gIHdpZHRoOiAkY3ViZS1oZWlnaHQ7XFxuICBoZWlnaHQ6ICRjdWJlLWhlaWdodDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Q7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooLTQwMHB4KTtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxcztcXG59XFxuXFxuLmN1YmUuc2hvdy1mcm9udCAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooLTEwcHgpIHJvdGF0ZVkoICAgMGRlZyk7IH1cXG4uY3ViZS5zaG93LXJpZ2h0ICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWigtMTBweCkgcm90YXRlWSggLTkwZGVnKTsgfVxcbi5jdWJlLnNob3ctYmFjayAgIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKC0xMHB4KSByb3RhdGVZKC0xODBkZWcpOyB9XFxuLmN1YmUuc2hvdy1sZWZ0ICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooLTEwcHgpIHJvdGF0ZVkoICA5MGRlZyk7IH1cXG4uY3ViZS5zaG93LXRvcCAgICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWigtMTBweCkgcm90YXRlWCggLTkwZGVnKTsgfVxcbi5jdWJlLnNob3ctYm90dG9tIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKC0xMHB4KSByb3RhdGVYKCAgOTBkZWcpOyB9XFxuXFxuLmN1YmVfX2ZhY2Uge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6ICRjdWJlLWhlaWdodDtcXG4gIGhlaWdodDogJGN1YmUtaGVpZ2h0O1xcbiAgYm9yZGVyOiAycHggc29saWQgYmxhY2s7XFxuICBsaW5lLWhlaWdodDogJGN1YmUtaGVpZ2h0O1xcbiAgZm9udC1zaXplOiA0MHB4O1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICBjb2xvcjogd2hpdGU7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi5jdWJlX19mYWNlLS1mcm9udCAgeyBiYWNrZ3JvdW5kOiBoc2xhKCAgMCwgMTAwJSwgNTAlLCAwLjcpOyB9XFxuLmN1YmVfX2ZhY2UtLXJpZ2h0ICB7IGJhY2tncm91bmQ6IGhzbGEoIDYwLCAxMDAlLCA1MCUsIDAuNyk7IH1cXG4uY3ViZV9fZmFjZS0tYmFjayAgIHsgYmFja2dyb3VuZDogaHNsYSgxMjAsIDEwMCUsIDUwJSwgMC43KTsgfVxcbi5jdWJlX19mYWNlLS1sZWZ0ICAgeyBiYWNrZ3JvdW5kOiBoc2xhKDE4MCwgMTAwJSwgNTAlLCAwLjcpOyB9XFxuLmN1YmVfX2ZhY2UtLXRvcCAgICB7IGJhY2tncm91bmQ6IGhzbGEoMjQwLCAxMDAlLCA1MCUsIDAuNyk7IH1cXG4uY3ViZV9fZmFjZS0tYm90dG9tIHsgYmFja2dyb3VuZDogaHNsYSgzMDAsIDEwMCUsIDUwJSwgMC43KTsgfVxcblxcbi5jdWJlX19mYWNlLS1mcm9udCAgeyB0cmFuc2Zvcm06IHJvdGF0ZVkoICAwZGVnKSB0cmFuc2xhdGVaKDEwMHB4KTsgfVxcbi5jdWJlX19mYWNlLS1yaWdodCAgeyB0cmFuc2Zvcm06IHJvdGF0ZVkoIDkwZGVnKSB0cmFuc2xhdGVaKDEwMHB4KTsgfVxcbi5jdWJlX19mYWNlLS1iYWNrICAgeyB0cmFuc2Zvcm06IHJvdGF0ZVkoMTgwZGVnKSB0cmFuc2xhdGVaKDEwMHB4KTsgfVxcbi5jdWJlX19mYWNlLS1sZWZ0ICAgeyB0cmFuc2Zvcm06IHJvdGF0ZVkoLTkwZGVnKSB0cmFuc2xhdGVaKDEwMHB4KTsgfVxcbi5jdWJlX19mYWNlLS10b3AgICAgeyB0cmFuc2Zvcm06IHJvdGF0ZVgoIDkwZGVnKSB0cmFuc2xhdGVaKDEwMHB4KTsgfVxcbi5jdWJlX19mYWNlLS1ib3R0b20geyB0cmFuc2Zvcm06IHJvdGF0ZVgoLTkwZGVnKSB0cmFuc2xhdGVaKDEwMHB4KTsgfVxcblxcbmxhYmVsIHsgbWFyZ2luLXJpZ2h0OiAxMHB4OyB9XCIsXCJAdXNlIFxcXCJzYXNzOm1hdGhcXFwiO1xcbi5jb250YWluZXIge1xcbiAgbWFyZ2luOiAwIGF1dG87XFxuICBtYXgtd2lkdGg6IDEyODBweDtcXG4gIHdpZHRoOiA5MCU7XFxufVxcbkBtZWRpYSAjeyRtZWRpdW0tYW5kLXVwfSB7XFxuICAuY29udGFpbmVyIHtcXG4gICAgd2lkdGg6IDg1JTtcXG4gIH1cXG59XFxuQG1lZGlhICN7JGxhcmdlLWFuZC11cH0ge1xcbiAgLmNvbnRhaW5lciB7XFxuICAgIHdpZHRoOiA3MCU7XFxuICB9XFxufVxcbi5jb2wgLnJvdyB7XFxuICBtYXJnaW4tbGVmdDogbWF0aC5kaXYoLTEgKiAkZ3V0dGVyLXdpZHRoICwgMik7XFxuICBtYXJnaW4tcmlnaHQ6IG1hdGguZGl2KC0xICogJGd1dHRlci13aWR0aCAsIDIpO1xcbn1cXG5cXG4uc2VjdGlvbiB7XFxuICBwYWRkaW5nLXRvcDogMXJlbTtcXG4gIHBhZGRpbmctYm90dG9tOiAxcmVtO1xcblxcbiAgJi5uby1wYWQge1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgfVxcbiAgJi5uby1wYWQtYm90IHtcXG4gICAgcGFkZGluZy1ib3R0b206IDA7XFxuICB9XFxuICAmLm5vLXBhZC10b3Age1xcbiAgICBwYWRkaW5nLXRvcDogMDtcXG4gIH1cXG59XFxuXFxuXFxuLy8gTWl4aW5zIHRvIGVsaW1pbmF0ZSBjb2RlIHJlcGl0aXRpb25cXG5AbWl4aW4gcmVzZXQtb2Zmc2V0IHtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbGVmdDogYXV0bztcXG4gIHJpZ2h0OiBhdXRvO1xcbn1cXG5AbWl4aW4gZ3JpZC1jbGFzc2VzKCRzaXplLCAkaSwgJHBlcmMpIHtcXG4gICYub2Zmc2V0LSN7JHNpemV9I3skaX0ge1xcbiAgICBtYXJnaW4tbGVmdDogJHBlcmM7XFxuICB9XFxuICAmLnB1bGwtI3skc2l6ZX0jeyRpfSB7XFxuICAgIHJpZ2h0OiAkcGVyYztcXG4gIH1cXG4gICYucHVzaC0jeyRzaXplfSN7JGl9IHtcXG4gICAgbGVmdDogJHBlcmM7XFxuICB9XFxufVxcblxcblxcbi5yb3cge1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICBtYXJnaW4tcmlnaHQ6IGF1dG87XFxuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xcblxcbiAgLy8gQ2xlYXIgZmxvYXRpbmcgY2hpbGRyZW5cXG4gICY6YWZ0ZXIge1xcbiAgICBjb250ZW50OiBcXFwiXFxcIjtcXG4gICAgZGlzcGxheTogdGFibGU7XFxuICAgIGNsZWFyOiBib3RoO1xcbiAgfVxcblxcbiAgLmNvbCB7XFxuICAgIGZsb2F0OiBsZWZ0O1xcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICBwYWRkaW5nOiAwIG1hdGguZGl2KCRndXR0ZXItd2lkdGggLCAyKTtcXG4gICAgbWluLWhlaWdodDogMXB4O1xcblxcbiAgICAmW2NsYXNzKj1cXFwicHVzaC1cXFwiXSxcXG4gICAgJltjbGFzcyo9XFxcInB1bGwtXFxcIl0ge1xcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgfVxcblxcbiAgICAkaTogMTtcXG4gICAgQHdoaWxlICRpIDw9ICRudW0tY29scyB7XFxuICAgICAgJHBlcmM6IHVucXVvdGUobWF0aC5kaXYoMTAwICwgbWF0aC5kaXYoJG51bS1jb2xzICwgJGkpKSArIFxcXCIlXFxcIik7XFxuICAgICAgJi5zI3skaX0ge1xcbiAgICAgICAgd2lkdGg6ICRwZXJjO1xcbiAgICAgICAgQGluY2x1ZGUgcmVzZXQtb2Zmc2V0O1xcbiAgICAgIH1cXG4gICAgICAkaTogJGkgKyAxO1xcbiAgICB9XFxuXFxuICAgICRpOiAxO1xcbiAgICBAd2hpbGUgJGkgPD0gJG51bS1jb2xzIHtcXG4gICAgICAkcGVyYzogdW5xdW90ZShtYXRoLmRpdigxMDAgLCBtYXRoLmRpdigkbnVtLWNvbHMgLCAkaSkpICsgXFxcIiVcXFwiKTtcXG4gICAgICBAaW5jbHVkZSBncmlkLWNsYXNzZXMoXFxcInNcXFwiLCAkaSwgJHBlcmMpO1xcbiAgICAgICRpOiAkaSArIDE7XFxuICAgIH1cXG5cXG4gICAgQG1lZGlhICN7JG1lZGl1bS1hbmQtdXB9IHtcXG5cXG4gICAgICAkaTogMTtcXG4gICAgICBAd2hpbGUgJGkgPD0gJG51bS1jb2xzIHtcXG4gICAgICAgICRwZXJjOiB1bnF1b3RlKG1hdGguZGl2KDEwMCAsIG1hdGguZGl2KCRudW0tY29scyAsICRpKSkgKyBcXFwiJVxcXCIpO1xcbiAgICAgICAgJi5tI3skaX0ge1xcbiAgICAgICAgICB3aWR0aDogJHBlcmM7XFxuICAgICAgICAgIEBpbmNsdWRlIHJlc2V0LW9mZnNldDtcXG4gICAgICAgIH1cXG4gICAgICAgICRpOiAkaSArIDFcXG4gICAgICB9XFxuXFxuICAgICAgJGk6IDE7XFxuICAgICAgQHdoaWxlICRpIDw9ICRudW0tY29scyB7XFxuICAgICAgICAkcGVyYzogdW5xdW90ZShtYXRoLmRpdigxMDAgLCBtYXRoLmRpdigkbnVtLWNvbHMgLCAkaSkpICsgXFxcIiVcXFwiKTtcXG4gICAgICAgIEBpbmNsdWRlIGdyaWQtY2xhc3NlcyhcXFwibVxcXCIsICRpLCAkcGVyYyk7XFxuICAgICAgICAkaTogJGkgKyAxO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBAbWVkaWEgI3skbGFyZ2UtYW5kLXVwfSB7XFxuXFxuICAgICAgJGk6IDE7XFxuICAgICAgQHdoaWxlICRpIDw9ICRudW0tY29scyB7XFxuICAgICAgICAkcGVyYzogdW5xdW90ZShtYXRoLmRpdigxMDAgLCBtYXRoLmRpdigkbnVtLWNvbHMgLCAkaSkpICsgXFxcIiVcXFwiKTtcXG4gICAgICAgICYubCN7JGl9IHtcXG4gICAgICAgICAgd2lkdGg6ICRwZXJjO1xcbiAgICAgICAgICBAaW5jbHVkZSByZXNldC1vZmZzZXQ7XFxuICAgICAgICB9XFxuICAgICAgICAkaTogJGkgKyAxO1xcbiAgICAgIH1cXG5cXG4gICAgICAkaTogMTtcXG4gICAgICBAd2hpbGUgJGkgPD0gJG51bS1jb2xzIHtcXG4gICAgICAgICRwZXJjOiB1bnF1b3RlKG1hdGguZGl2KDEwMCAsIG1hdGguZGl2KCRudW0tY29scyAsICRpKSkgKyBcXFwiJVxcXCIpO1xcbiAgICAgICAgQGluY2x1ZGUgZ3JpZC1jbGFzc2VzKFxcXCJsXFxcIiwgJGksICRwZXJjKTtcXG4gICAgICAgICRpOiAkaSArIDE7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIEBtZWRpYSAjeyRleHRyYS1sYXJnZS1hbmQtdXB9IHtcXG5cXG4gICAgICAkaTogMTtcXG4gICAgICBAd2hpbGUgJGkgPD0gJG51bS1jb2xzIHtcXG4gICAgICAgICRwZXJjOiB1bnF1b3RlKG1hdGguZGl2KDEwMCAsIG1hdGguZGl2KCRudW0tY29scyAsICRpKSkgKyBcXFwiJVxcXCIpO1xcbiAgICAgICAgJi54bCN7JGl9IHtcXG4gICAgICAgICAgd2lkdGg6ICRwZXJjO1xcbiAgICAgICAgICBAaW5jbHVkZSByZXNldC1vZmZzZXQ7XFxuICAgICAgICB9XFxuICAgICAgICAkaTogJGkgKyAxO1xcbiAgICAgIH1cXG5cXG4gICAgICAkaTogMTtcXG4gICAgICBAd2hpbGUgJGkgPD0gJG51bS1jb2xzIHtcXG4gICAgICAgICRwZXJjOiB1bnF1b3RlKG1hdGguZGl2KDEwMCAsIG1hdGguZGl2KCRudW0tY29scyAsICRpKSkgKyBcXFwiJVxcXCIpO1xcbiAgICAgICAgQGluY2x1ZGUgZ3JpZC1jbGFzc2VzKFxcXCJ4bFxcXCIsICRpLCAkcGVyYyk7XFxuICAgICAgICAkaTogJGkgKyAxO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcbn1cXG5cIixcIkB1c2UgXFxcInNhc3M6bWF0aFxcXCI7XFxuc3Zne1xcbiAgLy9maWxsOnJlZDtcXG59XFxuLnNpZGVuYXYge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgd2lkdGg6ICRzaWRlbmF2LXdpZHRoO1xcbiAgbGVmdDogMDtcXG4gIHRvcDogMDtcXG4gIG1hcmdpbjogMDtcXG4gIC8vdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGhlaWdodDogY2FsYygxMDAlICsgNjBweCk7XFxuICBoZWlnaHQ6IC1tb3otY2FsYygxMDAlKTsgLy9UZW1wb3JhcnkgRmlyZWZveCBGaXhcXG4gIHBhZGRpbmctYm90dG9tOiA2MHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogJHNpZGVuYXYtYmctY29sb3I7XFxuICB6LWluZGV4OiA5OTk7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcXG4gIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTA1JSk7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMXM7XFxuXFxuICAvL0BleHRlbmQgLnNoYWRvdy0xO1xcblxcbiAgLy8gUmlnaHQgQWxpZ25cXG4gICYucmlnaHQtYWxpZ25lZCB7XFxuICAgIHJpZ2h0OiAwO1xcbiAgICAvL3RyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDUlKTtcXG4gICAgbGVmdDogYXV0bztcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xcbiAgfVxcblxcbiAgLmNvbGxhcHNpYmxlIHtcXG4gICAgbWFyZ2luOiAwO1xcbiAgfVxcblxcblxcbiAgbGkge1xcbiAgICBmbG9hdDogbm9uZTtcXG4gICAgIC8vbGluZS1oZWlnaHQ6ICRzaWRlbmF2LWxpbmUtaGVpZ2h0O1xcbiAgICAvLyBtYXJnaW46IDE1cHggMDtcXG4gICAvLyBoZWlnaHQ6IDQ1cHg7XFxuICAgIC5pY29uU2lkZUxpbmsge1xcbiAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIFxcbiAgICAgICAgc3ZnIHtcXG4gICAgICAgICAgIC8vc3Ryb2tlOnJnYmEoMCwgMCwgMCwgMC4yKTtcXG4gICAgICAgICAgLy8gZmlsbDogd2hpdGU7XFxuICAgICAgICAgIHN0cm9rZTpyZ2JhKDAsIDAsIDAsIDAuMik7XFxuICAgICAgICAgICB3aWR0aDogMzBweDtcXG4gICAgICAgIH1cXG4gIFxcbiAgICB9XFxuICAgICYuYWN0aXZlIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xcbiAgICAgIHN2ZyB7XFxuICAgICAgICBzdHJva2U6IHdoaXRlIWltcG9ydGFudDtcXG4gICAgICAgIC8vZmlsbDogd2hpdGUhaW1wb3J0YW50O1xcbiAgICAgICAgd2lkdGg6IDMwcHg7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgICYubGFzdCB7XFxuICAgICAgcG9zaXRpb246IHN0aWNreTtcXG4gICAgICB0b3A6IGNhbGMoMTAwJSAtICN7JHNpZGVuYXYtaXRlbS1oZWlnaHR9IC0gMzVweCk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIGxpID4gYSB7XFxuICAgIGNvbG9yOiAkc2lkZW5hdi1mb250LWNvbG9yO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmb250LXNpemU6ICRzaWRlbmF2LWZvbnQtc2l6ZTtcXG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcXG4gICAgaGVpZ2h0OiAkc2lkZW5hdi1pdGVtLWhlaWdodDtcXG4gICAgbGluZS1oZWlnaHQ6ICRzaWRlbmF2LWxpbmUtaGVpZ2h0O1xcbiAgICBwYWRkaW5nOiAwICgkc2lkZW5hdi1wYWRkaW5nICogMik7XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxuICAgIH1cXG5cXG4gICAgJi5idG4sXFxuICAgICYuYnRuLWxhcmdlLFxcbiAgICAmLmJ0bi1mbGF0LFxcbiAgICAmLmJ0bi1mbG9hdGluZyB7XFxuICAgICAgbWFyZ2luOiAxMHB4IDE1cHg7XFxuICAgIH1cXG5cXG4gICAgJi5idG4sXFxuICAgICYuYnRuLWxhcmdlLFxcbiAgICAmLmJ0bi1mbG9hdGluZyB7XFxuICAgICAgY29sb3I6ICRidXR0b24tcmFpc2VkLWNvbG9yO1xcbiAgICB9XFxuXFxuICAgICYuYnRuLWZsYXQge1xcbiAgICAgIGNvbG9yOiAkYnV0dG9uLWZsYXQtY29sb3I7XFxuICAgIH1cXG5cXG4gICAgJi5idG46aG92ZXIsXFxuICAgICYuYnRuLWxhcmdlOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKCRidXR0b24tcmFpc2VkLWJhY2tncm91bmQsIDUlKTtcXG4gICAgfVxcblxcbiAgICAmLmJ0bi1mbG9hdGluZzpob3ZlciB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJ1dHRvbi1yYWlzZWQtYmFja2dyb3VuZDtcXG4gICAgfVxcblxcbiAgICAmID4gaSxcXG4gICAgJiA+IFtjbGFzc149XFxcIm1kaS1cXFwiXSxcXG4gICAgbGkgPiBhID4gW2NsYXNzKj1cXFwibWRpLVxcXCJdLFxcbiAgICAmID4gaS5zLWljb24ge1xcbiAgICAgIGZsb2F0OiBsZWZ0O1xcbiAgICAgIGhlaWdodDogJHNpZGVuYXYtaXRlbS1oZWlnaHQ7XFxuICAgICAgbGluZS1oZWlnaHQ6ICRzaWRlbmF2LWxpbmUtaGVpZ2h0O1xcbiAgICAgIG1hcmdpbjogMCAoJHNpZGVuYXYtcGFkZGluZyAqIDIpIDAgMDtcXG4gICAgICB3aWR0aDogbWF0aC5kaXYoJHNpZGVuYXYtaXRlbS1oZWlnaHQsIDIpO1xcbiAgICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNTQpO1xcbiAgICB9XFxuICB9XFxuXFxuICAuZGl2aWRlciB7XFxuICAgIG1hcmdpbjogbWF0aC5kaXYoJHNpZGVuYXYtcGFkZGluZywgMikgMCAwIDA7XFxuICB9XFxuXFxuICAuc3ViaGVhZGVyIHtcXG4gICAgJjpob3ZlciB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICAgIH1cXG5cXG4gICAgY3Vyc29yOiBpbml0aWFsO1xcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41NCk7XFxuICAgIGZvbnQtc2l6ZTogJHNpZGVuYXYtZm9udC1zaXplO1xcbiAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICBsaW5lLWhlaWdodDogJHNpZGVuYXYtbGluZS1oZWlnaHQ7XFxuICB9XFxuXFxuICAudXNlci12aWV3IHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICBwYWRkaW5nOiAoJHNpZGVuYXYtcGFkZGluZyAqIDIpICgkc2lkZW5hdi1wYWRkaW5nICogMikgMDtcXG4gICAgbWFyZ2luLWJvdHRvbTogbWF0aC5kaXYoJHNpZGVuYXYtcGFkZGluZywgMik7XFxuXFxuICAgICYgPiBhIHtcXG4gICAgICAmOmhvdmVyIHtcXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgICAgIH1cXG5cXG4gICAgICBoZWlnaHQ6IGF1dG87XFxuICAgICAgcGFkZGluZzogMDtcXG4gICAgfVxcblxcbiAgICAuYmFja2dyb3VuZCB7XFxuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgdG9wOiAwO1xcbiAgICAgIHJpZ2h0OiAwO1xcbiAgICAgIGJvdHRvbTogMDtcXG4gICAgICBsZWZ0OiAwO1xcbiAgICAgIHotaW5kZXg6IC0xO1xcbiAgICB9XFxuXFxuICAgIC5jaXJjbGUsXFxuICAgIC5uYW1lLFxcbiAgICAuZW1haWwge1xcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICB9XFxuXFxuICAgIC5jaXJjbGUge1xcbiAgICAgIGhlaWdodDogNjRweDtcXG4gICAgICB3aWR0aDogNjRweDtcXG4gICAgfVxcblxcbiAgICAubmFtZSxcXG4gICAgLmVtYWlsIHtcXG4gICAgICBmb250LXNpemU6ICRzaWRlbmF2LWZvbnQtc2l6ZTtcXG4gICAgICBsaW5lLWhlaWdodDogbWF0aC5kaXYoJHNpZGVuYXYtbGluZS1oZWlnaHQsIDIpO1xcbiAgICB9XFxuXFxuICAgIC5uYW1lIHtcXG4gICAgICBtYXJnaW4tdG9wOiAxNnB4O1xcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgIH1cXG5cXG4gICAgLmVtYWlsIHtcXG4gICAgICBwYWRkaW5nLWJvdHRvbTogMTZweDtcXG4gICAgICBmb250LXdlaWdodDogNDAwO1xcbiAgICB9XFxuICB9XFxufVxcblxcbi8vIFRvdWNoIGludGVyYWN0aW9uXFxuLmRyYWctdGFyZ2V0IHtcXG4gIC8vIFJpZ2h0IEFsaWduXFxuICAmLnJpZ2h0LWFsaWduZWQge1xcbiAgICByaWdodDogMDtcXG4gIH1cXG5cXG4gIGhlaWdodDogMTAwJTtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgdG9wOiAwO1xcbiAgei1pbmRleDogOTk4O1xcbn1cXG5cXG4vLyBGaXhlZCBTaWRlbmF2IHNob3duXFxuLnNpZGVuYXYuc2lkZW5hdi1maXhlZCB7XFxuICAvLyBSaWdodCBBbGlnblxcbiAgJi5yaWdodC1hbGlnbmVkIHtcXG4gICAgcmlnaHQ6IDA7XFxuICAgIGxlZnQ6IGF1dG87XFxuICB9XFxuXFxuICBsZWZ0OiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbn1cXG5cXG4vLyBGaXhlZCBTaWRlbmF2IGhpZGUgb24gc21hbGxlclxcbkBtZWRpYSAjeyRtZWRpdW0tYW5kLWRvd259IHtcXG4gIC5zaWRlbmF2IHtcXG4gICAgJi5zaWRlbmF2LWZpeGVkIHtcXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwNSUpO1xcblxcbiAgICAgICYucmlnaHQtYWxpZ25lZCB7XFxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTA1JSk7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgID4gYSB7XFxuICAgICAgcGFkZGluZzogMCAkc2lkZW5hdi1wYWRkaW5nO1xcbiAgICB9XFxuXFxuICAgIC51c2VyLXZpZXcge1xcbiAgICAgIHBhZGRpbmc6ICRzaWRlbmF2LXBhZGRpbmcgJHNpZGVuYXYtcGFkZGluZyAwO1xcbiAgICB9XFxuICB9XFxufVxcblxcbi5zaWRlbmF2IC5jb2xsYXBzaWJsZS1ib2R5ID4gdWw6bm90KC5jb2xsYXBzaWJsZSkgPiBsaS5hY3RpdmUsXFxuLnNpZGVuYXYuc2lkZW5hdi1maXhlZCAuY29sbGFwc2libGUtYm9keSA+IHVsOm5vdCguY29sbGFwc2libGUpID4gbGkuYWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5LWNvbG9yO1xcblxcbiAgYSB7XFxuICAgIGNvbG9yOiAkc2lkZW5hdi1iZy1jb2xvcjtcXG4gIH1cXG59XFxuXFxuLnNpZGVuYXYgLmNvbGxhcHNpYmxlLWJvZHkge1xcbiAgcGFkZGluZzogMDtcXG59XFxuXFxuLnNpZGVuYXYtb3ZlcmxheSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBvcGFjaXR5OiAwO1xcbiAgaGVpZ2h0OiAxMjB2aDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcXG4gIHotaW5kZXg6IDk5NztcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcblxcblxcblxcbiAgLndpdGgtc2lkZS1uYXYtb3BlbntcXG4gICAgcGFkZGluZy1sZWZ0OiAzMDBweDtcXG4gICAgdHJhbnNpdGlvbjogcGFkZGluZyAxcztcXG4gIH1cXG5cIixcIi8vIHNoYXJlZCBzdHlsZXNcXG5cXG4uYnRuLFxcbi5idG4tZmxhdCB7XFxuICBib3JkZXI6ICRidXR0b24tYm9yZGVyO1xcbiAgYm9yZGVyLXJhZGl1czogJGJ1dHRvbi1yYWRpdXM7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBoZWlnaHQ6ICRidXR0b24taGVpZ2h0O1xcbiAgbGluZS1oZWlnaHQ6ICRidXR0b24taGVpZ2h0O1xcbiAgcGFkZGluZzogJGJ1dHRvbi1wYWRkaW5nO1xcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OyAvLyBHZXRzIHJpZCBvZiB0YXAgYWN0aXZlIHN0YXRlXFxufVxcblxcbi8vIERpc2FibGVkIHNoYXJlZCBzdHlsZVxcbi5idG4uZGlzYWJsZWQsXFxuLmJ0bi1mbG9hdGluZy5kaXNhYmxlZCxcXG4uYnRuLWxhcmdlLmRpc2FibGVkLFxcbi5idG4tc21hbGwuZGlzYWJsZWQsXFxuLmJ0bi1mbGF0LmRpc2FibGVkLFxcbi5idG46ZGlzYWJsZWQsXFxuLmJ0bi1mbG9hdGluZzpkaXNhYmxlZCxcXG4uYnRuLWxhcmdlOmRpc2FibGVkLFxcbi5idG4tc21hbGw6ZGlzYWJsZWQsXFxuLmJ0bi1mbGF0OmRpc2FibGVkLFxcbi5idG5bZGlzYWJsZWRdLFxcbi5idG4tZmxvYXRpbmdbZGlzYWJsZWRdLFxcbi5idG4tbGFyZ2VbZGlzYWJsZWRdLFxcbi5idG4tc21hbGxbZGlzYWJsZWRdLFxcbi5idG4tZmxhdFtkaXNhYmxlZF0ge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYnV0dG9uLWRpc2FibGVkLWJhY2tncm91bmQgIWltcG9ydGFudDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogJGJ1dHRvbi1kaXNhYmxlZC1jb2xvciAhaW1wb3J0YW50O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgJjpob3ZlciB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICRidXR0b24tZGlzYWJsZWQtYmFja2dyb3VuZCAhaW1wb3J0YW50O1xcbiAgICBjb2xvcjogJGJ1dHRvbi1kaXNhYmxlZC1jb2xvciAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG4vLyBTaGFyZWQgaWNvbiBzdHlsZXNcXG4uYnRuLFxcbi5idG4tZmxvYXRpbmcsXFxuLmJ0bi1sYXJnZSxcXG4uYnRuLXNtYWxsLFxcbi5idG4tZmxhdCB7XFxuICBmb250LXNpemU6ICRidXR0b24tZm9udC1zaXplO1xcbiAgb3V0bGluZTogMDtcXG4gIGkge1xcbiAgICBmb250LXNpemU6ICRidXR0b24taWNvbi1mb250LXNpemU7XFxuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgfVxcbn1cXG5cXG4vLyBTaGFyZWQgZm9jdXMgYnV0dG9uIHN0eWxlXFxuLmJ0bixcXG4uYnRuLWZsb2F0aW5nIHtcXG4gICY6Zm9jdXMge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGJ1dHRvbi1yYWlzZWQtYmFja2dyb3VuZCwgMTAlKTtcXG4gIH1cXG59XFxuXFxuLy8gUmFpc2VkIEJ1dHRvblxcbi5idG4ge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgY29sb3I6ICRidXR0b24tcmFpc2VkLWNvbG9yO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJ1dHRvbi1yYWlzZWQtYmFja2dyb3VuZDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIGxldHRlci1zcGFjaW5nOiAuNXB4O1xcbiAgQGV4dGVuZCAuc2hhZG93LTE7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIC4ycyBlYXNlLW91dDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gICY6aG92ZXIge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYnV0dG9uLXJhaXNlZC1iYWNrZ3JvdW5kLWhvdmVyO1xcbiAgICBAZXh0ZW5kIC5zaGFkb3ctMS1oYWxmO1xcbiAgfVxcbn1cXG5cXG4vLyBGbG9hdGluZyBidXR0b25cXG4uYnRuLWZsb2F0aW5nIHtcXG4gICY6aG92ZXIge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYnV0dG9uLWZsb2F0aW5nLWJhY2tncm91bmQtaG92ZXI7XFxuICAgIEBleHRlbmQgLnNoYWRvdy0xLWhhbGY7XFxuICB9XFxuICAmOmJlZm9yZSB7XFxuICAgIGJvcmRlci1yYWRpdXM6IDA7XFxuICB9XFxuICAmLmJ0bi1sYXJnZSB7XFxuICAgICYuaGFsZndheS1mYWIge1xcbiAgICAgIGJvdHRvbTogY2FsYygkYnV0dG9uLWZsb2F0aW5nLWxhcmdlLXNpemUgLyAyKTtcXG4gICAgfVxcbiAgICB3aWR0aDogJGJ1dHRvbi1mbG9hdGluZy1sYXJnZS1zaXplO1xcbiAgICBoZWlnaHQ6ICRidXR0b24tZmxvYXRpbmctbGFyZ2Utc2l6ZTtcXG4gICAgcGFkZGluZzogMDtcXG4gICAgaSB7XFxuICAgICAgbGluZS1oZWlnaHQ6ICRidXR0b24tZmxvYXRpbmctbGFyZ2Utc2l6ZTtcXG4gICAgfVxcbiAgfVxcblxcbiAgJi5idG4tc21hbGwge1xcbiAgICAmLmhhbGZ3YXktZmFiIHtcXG4gICAgICBib3R0b206IGNhbGMoJGJ1dHRvbi1mbG9hdGluZy1zbWFsbC1zaXplIC8gMik7XFxuICAgIH1cXG4gICAgd2lkdGg6ICRidXR0b24tZmxvYXRpbmctc21hbGwtc2l6ZTtcXG4gICAgaGVpZ2h0OiAkYnV0dG9uLWZsb2F0aW5nLXNtYWxsLXNpemU7XFxuICAgIGkge1xcbiAgICAgIGxpbmUtaGVpZ2h0OiAkYnV0dG9uLWZsb2F0aW5nLXNtYWxsLXNpemU7XFxuICAgIH1cXG4gIH1cXG5cXG4gICYuaGFsZndheS1mYWIge1xcbiAgICAmLmxlZnQge1xcbiAgICAgIHJpZ2h0OiBhdXRvO1xcbiAgICAgIGxlZnQ6IDI0cHg7XFxuICAgIH1cXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICByaWdodDogMjRweDtcXG4gICAgYm90dG9tOiBjYWxjKCRidXR0b24tZmxvYXRpbmctc2l6ZSAvIDIpO1xcbiAgfVxcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgY29sb3I6ICRidXR0b24tZmxvYXRpbmctY29sb3I7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgei1pbmRleDogMTtcXG4gIHdpZHRoOiAkYnV0dG9uLWZsb2F0aW5nLXNpemU7XFxuICBoZWlnaHQ6ICRidXR0b24tZmxvYXRpbmctc2l6ZTtcXG4gIGxpbmUtaGVpZ2h0OiAkYnV0dG9uLWZsb2F0aW5nLXNpemU7XFxuICBwYWRkaW5nOiAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJ1dHRvbi1mbG9hdGluZy1iYWNrZ3JvdW5kO1xcbiAgYm9yZGVyLXJhZGl1czogJGJ1dHRvbi1mbG9hdGluZy1yYWRpdXM7XFxuICBAZXh0ZW5kIC5zaGFkb3ctMTtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgLjNzO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIGkge1xcbiAgICB3aWR0aDogaW5oZXJpdDtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgIGNvbG9yOiAkYnV0dG9uLWZsb2F0aW5nLWNvbG9yO1xcbiAgICBmb250LXNpemU6ICRidXR0b24tbGFyZ2UtaWNvbi1mb250LXNpemU7XFxuICAgIGxpbmUtaGVpZ2h0OiAkYnV0dG9uLWZsb2F0aW5nLXNpemU7XFxuICB9XFxufVxcblxcbi8vIGJ1dHRvbiBmaXhcXG5idXR0b24uYnRuLWZsb2F0aW5nIHtcXG4gIGJvcmRlcjogJGJ1dHRvbi1ib3JkZXI7XFxufVxcblxcbi8vIEZpeGVkIEFjdGlvbiBCdXR0b25cXG4uZml4ZWQtYWN0aW9uLWJ0biB7XFxuICAmLmFjdGl2ZSB7XFxuICAgIHVsIHtcXG4gICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xcbiAgICB9XFxuICB9XFxuXFxuICAvLyBEaXJlY3Rpb25zXFxuICAmLmRpcmVjdGlvbi1sZWZ0LFxcbiAgJi5kaXJlY3Rpb24tcmlnaHQge1xcbiAgICBwYWRkaW5nOiAwIDAgMCAxNXB4O1xcbiAgICB1bCB7XFxuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XFxuICAgICAgcmlnaHQ6IDY0cHg7XFxuICAgICAgdG9wOiA1MCU7XFxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xcbiAgICAgIGhlaWdodDogMTAwJTtcXG4gICAgICBsZWZ0OiBhdXRvO1xcbiAgICAgIC8qd2lkdGggMTAwJSBvbmx5IGdvZXMgdG8gd2lkdGggb2YgYnV0dG9uIGNvbnRhaW5lciAqL1xcbiAgICAgIHdpZHRoOiA1MDBweDtcXG4gICAgICBsaSB7XFxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgICAgICBtYXJnaW46IDcuNXB4IDE1cHggMCAwO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcbiAgJi5kaXJlY3Rpb24tcmlnaHQge1xcbiAgICBwYWRkaW5nOiAwIDE1cHggMCAwO1xcbiAgICB1bCB7XFxuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcXG4gICAgICBkaXJlY3Rpb246IHJ0bDtcXG4gICAgICBsZWZ0OiA2NHB4O1xcbiAgICAgIHJpZ2h0OiBhdXRvO1xcbiAgICAgIGxpIHtcXG4gICAgICAgIG1hcmdpbjogNy41cHggMCAwIDE1cHg7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuICAmLmRpcmVjdGlvbi1ib3R0b20ge1xcbiAgICBwYWRkaW5nOiAwIDAgMTVweCAwO1xcbiAgICB1bCB7XFxuICAgICAgdG9wOiA2NHB4O1xcbiAgICAgIGJvdHRvbTogYXV0bztcXG4gICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcXG4gICAgICBsaSB7XFxuICAgICAgICBtYXJnaW46IDE1cHggMCAwIDA7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuICAmLnRvb2xiYXIge1xcbiAgICAmLmFjdGl2ZSB7XFxuICAgICAgJj5hIGkge1xcbiAgICAgICAgb3BhY2l0eTogMDtcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcGFkZGluZzogMDtcXG4gICAgaGVpZ2h0OiAkYnV0dG9uLWZsb2F0aW5nLWxhcmdlLXNpemU7XFxuICAgIHVsIHtcXG4gICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgIHRvcDogMDtcXG4gICAgICBib3R0b206IDA7XFxuICAgICAgei1pbmRleDogMTtcXG4gICAgICBsaSB7XFxuICAgICAgICBmbGV4OiAxO1xcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICAgICAgbWFyZ2luOiAwO1xcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xcbiAgICAgICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gICAgICAgIGEge1xcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICAgICAgICB3aWR0aDogMTAwJTtcXG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcXG4gICAgICAgICAgY29sb3I6ICNmZmY7XFxuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAkYnV0dG9uLWZsb2F0aW5nLWxhcmdlLXNpemU7XFxuICAgICAgICAgIHotaW5kZXg6IDE7XFxuICAgICAgICAgIGkge1xcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICByaWdodDogMjNweDtcXG4gIGJvdHRvbTogMjNweDtcXG4gIHBhZGRpbmctdG9wOiAxNXB4O1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIHotaW5kZXg6IDk5NztcXG4gIHVsIHtcXG4gICAgbGVmdDogMDtcXG4gICAgcmlnaHQ6IDA7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBib3R0b206IDY0cHg7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgICBsaSB7XFxuICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDtcXG4gICAgfVxcbiAgICBhLmJ0bi1mbG9hdGluZyB7XFxuICAgICAgb3BhY2l0eTogMDtcXG4gICAgfVxcbiAgfVxcbiAgLmZhYi1iYWNrZHJvcCB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgdG9wOiAwO1xcbiAgICBsZWZ0OiAwO1xcbiAgICB6LWluZGV4OiAtMTtcXG4gICAgd2lkdGg6ICRidXR0b24tZmxvYXRpbmctc2l6ZTtcXG4gICAgaGVpZ2h0OiAkYnV0dG9uLWZsb2F0aW5nLXNpemU7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICRidXR0b24tZmxvYXRpbmctYmFja2dyb3VuZDtcXG4gICAgYm9yZGVyLXJhZGl1czogJGJ1dHRvbi1mbG9hdGluZy1yYWRpdXM7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICB9XFxufVxcblxcbi8vIEZsYXQgYnV0dG9uXFxuLmJ0bi1mbGF0IHtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGNvbG9yOiAkYnV0dG9uLWZsYXQtY29sb3I7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIC4ycztcXG4gICY6Zm9jdXMsXFxuICAmOmhvdmVyIHtcXG4gICAgYm94LXNoYWRvdzogbm9uZTtcXG4gIH1cXG4gICY6Zm9jdXMge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIC4xKTtcXG4gIH1cXG4gICYuZGlzYWJsZWQsXFxuICAmLmJ0bi1mbGF0W2Rpc2FibGVkXSAge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcbiAgICBjb2xvcjogJGJ1dHRvbi1mbGF0LWRpc2FibGVkLWNvbG9yICFpbXBvcnRhbnQ7XFxuICAgIGN1cnNvcjogZGVmYXVsdDtcXG4gIH1cXG59XFxuXFxuLy8gTGFyZ2UgYnV0dG9uXFxuLmJ0bi1sYXJnZSB7XFxuICBAZXh0ZW5kIC5idG47XFxuICBoZWlnaHQ6ICRidXR0b24tbGFyZ2UtaGVpZ2h0O1xcbiAgbGluZS1oZWlnaHQ6ICRidXR0b24tbGFyZ2UtaGVpZ2h0O1xcbiAgZm9udC1zaXplOiAkYnV0dG9uLWxhcmdlLWZvbnQtc2l6ZTtcXG4gIHBhZGRpbmc6IDAgMjhweDtcXG5cXG4gIGkge1xcbiAgICBmb250LXNpemU6ICRidXR0b24tbGFyZ2UtaWNvbi1mb250LXNpemU7XFxuICB9XFxufVxcblxcbi8vIFNtYWxsIGJ1dHRvblxcbi5idG4tc21hbGwge1xcbiAgQGV4dGVuZCAuYnRuO1xcbiAgaGVpZ2h0OiAkYnV0dG9uLXNtYWxsLWhlaWdodDtcXG4gIGxpbmUtaGVpZ2h0OiAkYnV0dG9uLXNtYWxsLWhlaWdodDtcXG4gIGZvbnQtc2l6ZTogJGJ1dHRvbi1zbWFsbC1mb250LXNpemU7XFxuICBpIHtcXG4gICAgZm9udC1zaXplOiAkYnV0dG9uLXNtYWxsLWljb24tZm9udC1zaXplO1xcbiAgfVxcbn1cXG5cXG4vLyBCbG9jayBidXR0b25cXG4uYnRuLWJsb2NrIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cIixcIiRtYWluQ29sb3I6IzAwNjJkNjtcXG4kb3RoZXJtYWluOiMwMzRkODI7XFxuJHNlY29uZENvbG9yOiMwMDc3RkE7XFxuJHRoaXJkQ29sb3I6IzA5YmRkZDtcXG4kZm9ydGhDb2xvcjojY2JlN2ZlO1xcblxcbiR0YWIxOiAkZm9ydGhDb2xvcjtcXG4kdGFiMjogZGFya2VuKCRmb3J0aENvbG9yLDE1JSk7XFxuJHRhYjM6IGRhcmtlbigkZm9ydGhDb2xvciwzMCUpO1xcblxcbi5jb21tdW5UYWJIZWFkZXIge1xcbiAgaGVpZ2h0OiAxMDBweDtcXG4gIHBhZGRpbmc6IDQwcHg7XFxufVxcblxcbi50YWJzIHtcXG4gIG1pbi1oZWlnaHQ6IGNhbGMoMTAwJSAtIDE1MHB4KTtcXG4gIG1hcmdpbi10b3A6IDMwcHg7XFxuICBwYWRkaW5nOjAhaW1wb3J0YW50O1xcbiAgYm9yZGVyLXJhZGl1czogNDBweCFpbXBvcnRhbnQ7XFxuLmlubmVycGFnZXtcXG4gIG1pbi1oZWlnaHQ6IDcwVkghaW1wb3J0YW50O1xcbn1cXG4gIC50YWJzLWhlYWRlci1vdmVybGF5IHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgaGVpZ2h0OiAxMDBweDtcXG4gIH1cXG5cXG4gICYuYWN0aXZlVGFiLTAge1xcbiAgICAudGFiLWhlYWRlci1vdmVyMCB7XFxuICAgICAgZmxleDogMTtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFiMjtcXG4gICAgICBib3JkZXItcmFkaXVzOiA0MHB4IDAgMCAwO1xcblxcbiAgICAgIC50YWItaGVhZGVyIHtcXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWIxO1xcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNDBweCA0MHB4IDAgMDtcXG4gICAgICAgIEBleHRlbmQgLmNvbW11blRhYkhlYWRlcjtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgLnRhYi1oZWFkZXItb3ZlcjEge1xcbiAgICAgIGZsZXg6IDE7XFxuICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDAuMjV0dXJuLCAkdGFiMSwgJHRhYjMpO1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCAwIDA7XFxuXFxuICAgICAgLnRhYi1oZWFkZXIge1xcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYjI7XFxuICAgICAgICBib3JkZXItcmFkaXVzOiAwIDQwcHggMCA0MHB4O1xcbiAgICAgICAgQGV4dGVuZCAuY29tbXVuVGFiSGVhZGVyO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICAudGFiLWhlYWRlci1vdmVyMiB7XFxuICAgICAgZmxleDogMTtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFiMjtcXG4gICAgICBib3JkZXItcmFkaXVzOiAwIDQwcHggMCAwO1xcblxcbiAgICAgIC50YWItaGVhZGVyIHtcXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWIzO1xcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMCA0MHB4IDAgNDBweDtcXG4gICAgICAgIEBleHRlbmQgLmNvbW11blRhYkhlYWRlcjtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cXG4gICYuYWN0aXZlVGFiLTEge1xcbiAgICAudGFiLWhlYWRlci1vdmVyMCB7XFxuICAgICAgZmxleDogMTtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFiMTtcXG4gICAgICAvL2xpbmVhci1ncmFkaWVudCgwLjI1dHVybiwgJHRhYjEsICR0YWIxKTtcXG4gICAgICAvL2xpbmVhci1ncmFkaWVudCgwLjI1dHVybiwgJHRhYjEsICR0YWIxKTtcXG4gICAgICBib3JkZXItcmFkaXVzOiA0MHB4IDAgMCAwO1xcblxcbiAgICAgIC50YWItaGVhZGVyIHtcXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWIyO1xcbiAgICAgICAgLy8gYm9yZGVyLXJhZGl1czogNDBweCA0MHB4IDAgMDtcXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDQwcHggMCA0MHB4IDA7XFxuICAgICAgICBAZXh0ZW5kIC5jb21tdW5UYWJIZWFkZXI7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIC50YWItaGVhZGVyLW92ZXIxIHtcXG4gICAgICBmbGV4OiAxO1xcbiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgwLjI1dHVybiwgJHRhYjIsICR0YWIzKTtcXG4gICAgICAvLyR0YWIyO1xcbiAgICAgIC8vYm9yZGVyLXJhZGl1czogNDBweCAgMCAwO1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCAwIDA7XFxuXFxuICAgICAgLnRhYi1oZWFkZXIge1xcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYjE7XFxuICAgICAgICBib3JkZXItcmFkaXVzOiA0MHB4IDQwcHggMCAwO1xcbiAgICAgICAgQGV4dGVuZCAuY29tbXVuVGFiSGVhZGVyO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICAudGFiLWhlYWRlci1vdmVyMiB7XFxuICAgICAgZmxleDogMTtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFiMTtcXG4gICAgICBib3JkZXItcmFkaXVzOiAwIDQwcHggMCAwO1xcblxcbiAgICAgIC50YWItaGVhZGVyIHtcXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWIzO1xcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMCA0MHB4IDAgNDBweDtcXG4gICAgICAgIEBleHRlbmQgLmNvbW11blRhYkhlYWRlcjtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cXG5cXG4gICYuYWN0aXZlVGFiLTIge1xcbiAgICAudGFiLWhlYWRlci1vdmVyMCB7XFxuICAgICAgZmxleDogMTtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFiMztcXG4gICAgICAvL2xpbmVhci1ncmFkaWVudCgwLjI1dHVybiwgJHRhYjEsICR0YWIxKTtcXG4gICAgICAvL2xpbmVhci1ncmFkaWVudCgwLjI1dHVybiwgJHRhYjEsICR0YWIxKTtcXG4gICAgICBib3JkZXItcmFkaXVzOiA0MHB4IDAgMCAwO1xcblxcbiAgICAgIC50YWItaGVhZGVyIHtcXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWIyO1xcbiAgICAgICAgLy8gYm9yZGVyLXJhZGl1czogNDBweCA0MHB4IDAgMDtcXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDQwcHggMCA0MHB4IDA7XFxuICAgICAgICBAZXh0ZW5kIC5jb21tdW5UYWJIZWFkZXI7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIC50YWItaGVhZGVyLW92ZXIxIHtcXG4gICAgICBmbGV4OiAxO1xcbiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgwLjI1dHVybiwgJHRhYjIsICR0YWIxKTtcXG4gICAgICAvLyR0YWIyO1xcbiAgICAgIC8vYm9yZGVyLXJhZGl1czogNDBweCAgMCAwO1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCAwIDA7XFxuXFxuICAgICAgLnRhYi1oZWFkZXIge1xcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYjM7XFxuICAgICAgICBib3JkZXItcmFkaXVzOiA0MHB4IDAgNDBweCAwO1xcbiAgICAgICAgQGV4dGVuZCAuY29tbXVuVGFiSGVhZGVyO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICAudGFiLWhlYWRlci1vdmVyMiB7XFxuICAgICAgZmxleDogMTtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFiMztcXG4gICAgICBib3JkZXItcmFkaXVzOiAwIDQwcHggMCAwO1xcblxcbiAgICAgIC50YWItaGVhZGVyIHtcXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWIxO1xcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNDBweCA0MHB4IDAgMDtcXG4gICAgICAgIEBleHRlbmQgLmNvbW11blRhYkhlYWRlcjtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cXG4gIC50YWItY29udGVudCB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWIxO1xcbiAgICBwYWRkaW5nOiAxMHB4O1xcbiAgICAvL2JvcmRlcjogMXB4IHNvbGlkIHJnYigyMDcsIDIwNSwgMjA1KTtcXG4gICAgYm9yZGVyLXRvcDogMDtcXG4gICAgbWluLWhlaWdodDogNzB2aDtcXG4gICAgYm9yZGVyLXJhZGl1czogMCAwIDQwcHggNDBweDtcXG4gICAgcGFkZGluZy1ib3R0b206IDIwcHg7XFxuIFxcbiAgfVxcbn1cXG5cXG4vLyAudGFicyB7XFxuLy8gICAgIC8vIGRpc3BsYXk6IGZsZXg7XFxuLy8gICAgIC8vIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuLy8gICAgIC50YWJzLWhlYWRlci1vdmVybGF5IHtcXG4vLyAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuLy8gICAgICAgICBoZWlnaHQ6IDEwMHB4O1xcblxcbi8vICAgICAgICAgLnRhYi1oZWFkZXItb3ZlciB7XFxuLy8gICAgICAgICAgICAgZmxleDogMTtcXG4vLyAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBob3RwaW5rO1xcbi8vICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgNDBweCAwIDA7XFxuLy8gICAgICAgICAgICAgJi5hY3RpdmUge1xcbi8vICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTU1LCAxNTIsIDE1Myk7XFxuLy8gICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDQwcHggMCAwIDA7XFxuLy8gICAgICAgICAgICAgfVxcbi8vICAgICAgICAgICAgIC50YWItaGVhZGVyIHtcXG4vLyAgICAgICAgICAgICAgICAgJi5hY3RpdmUge1xcbi8vICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaG90cGluaztcXG4vLyAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDQwcHggNDBweCAwIDA7XFxuLy8gICAgICAgICAgICAgICAgIH1cXG4vLyAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMHB4IDQwcHggMCA0MHB4O1xcbi8vICAgICAgICAgICAgICAgICBwYWRkaW5nOiA0MHB4O1xcbi8vICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTU1LCAxNTIsIDE1Myk7XFxuLy8gICAgICAgICAgICAgfVxcbi8vICAgICAgICAgfVxcbi8vICAgICB9XFxuXFxuLy8gICAgIC50YWItY29udGVudCB7XFxuLy8gICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBob3RwaW5rO1xcbi8vICAgICAgICAgcGFkZGluZzogMTBweDtcXG4vLyAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYigyMDcsIDIwNSwgMjA1KTtcXG4vLyAgICAgICAgIGJvcmRlci10b3A6IDA7XFxuLy8gICAgIH1cXG4vLyB9XFxuXCIsXCIubG9hZGVyLW92ZXJsYXkge1xcbiAgICB6LWluZGV4OiA5OTk7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgaGVpZ2h0OiAxMDB2aDtcXG4gICAgd2lkdGg6IDEwMHZ3O1xcbiAgICB0b3A6IDA7XFxuICAgIGxlZnQ6IDA7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTAyLCAxMDAsIDEwMCwgMC42MDMpO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgLmxvYWRlciB7XFxuICAgICAgICBib3JkZXI6IDdweCBzb2xpZCAjZjNmM2YzOyAvKiBMaWdodCBncmV5ICovXFxuICAgICAgICBib3JkZXItdG9wOiA3cHggc29saWQgIzJlYTJjYzsgLyogQmx1ZSAqL1xcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgICAgICAgd2lkdGg6IDcwcHg7XFxuICAgICAgICBoZWlnaHQ6IDcwcHg7XFxuICAgICAgICBhbmltYXRpb246IHNwaW4gMnMgbGluZWFyIGluZmluaXRlO1xcbiAgICB9XFxuICAgIC5sb2FkZXItdGV4dHtcXG4gICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XFxuICAgICAgICBmb250LXNpemU6IDI1cHg7XFxuICAgICAgICBjb2xvcjogIzJlYTJjYztcXG4gICAgfVxcblxcbiAgICBAa2V5ZnJhbWVzIHNwaW4ge1xcbiAgICAgICAgMCUge1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xcbiAgICAgICAgfVxcbiAgICAgICAgMTAwJSB7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cIixcIlxcblxcbi5jYXJkLXBhbmVsIHtcXG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgLjI1cztcXG4gIHBhZGRpbmc6ICRjYXJkLXBhZGRpbmc7XFxuICBtYXJnaW46ICRlbGVtZW50LXRvcC1tYXJnaW4gMCAkZWxlbWVudC1ib3R0b20tbWFyZ2luIDA7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBAZXh0ZW5kIC5zaGFkb3ctMTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICRjYXJkLWJnLWNvbG9yO1xcbn1cXG5cXG4uY2FyZCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBtYXJnaW46ICRlbGVtZW50LXRvcC1tYXJnaW4gMCAkZWxlbWVudC1ib3R0b20tbWFyZ2luIDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2FyZC1iZy1jb2xvcjtcXG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgLjI1cztcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIEBleHRlbmQgLnNoYWRvdy0xO1xcblxcblxcbiAgLmNhcmQtdGl0bGUge1xcbiAgICBmb250LXNpemU6IDI0cHg7XFxuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XFxuICAgICYuYWN0aXZhdG9yIHtcXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC8vIENhcmQgU2l6ZXNcXG4gICYuc21hbGwsICYubWVkaXVtLCAmLmxhcmdlIHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcblxcbiAgICAuY2FyZC1pbWFnZSB7XFxuICAgICAgbWF4LWhlaWdodDogNjAlO1xcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIH1cXG4gICAgLmNhcmQtaW1hZ2UgKyAuY2FyZC1jb250ZW50IHtcXG4gICAgICBtYXgtaGVpZ2h0OiA0MCU7XFxuICAgIH1cXG4gICAgLmNhcmQtY29udGVudCB7XFxuICAgICAgbWF4LWhlaWdodDogMTAwJTtcXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICB9XFxuICAgIC5jYXJkLWFjdGlvbiB7XFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgIGJvdHRvbTogMDtcXG4gICAgICBsZWZ0OiAwO1xcbiAgICAgIHJpZ2h0OiAwO1xcbiAgICB9XFxuICB9XFxuXFxuICAmLnNtYWxsIHtcXG4gICAgaGVpZ2h0OiAzMDBweDtcXG4gIH1cXG5cXG4gICYubWVkaXVtIHtcXG4gICAgaGVpZ2h0OiA0MDBweDtcXG4gIH1cXG5cXG4gICYubGFyZ2Uge1xcbiAgICBoZWlnaHQ6IDUwMHB4O1xcbiAgfVxcblxcbiAgLy8gSG9yaXpvbnRhbCBDYXJkc1xcbiAgJi5ob3Jpem9udGFsIHtcXG4gICAgJi5zbWFsbCwgJi5tZWRpdW0sICYubGFyZ2Uge1xcbiAgICAgIC5jYXJkLWltYWdlIHtcXG4gICAgICAgIGhlaWdodDogMTAwJTtcXG4gICAgICAgIG1heC1oZWlnaHQ6IG5vbmU7XFxuICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcXG5cXG4gICAgICAgIGltZyB7XFxuICAgICAgICAgIGhlaWdodDogMTAwJTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgZGlzcGxheTogZmxleDtcXG5cXG4gICAgLmNhcmQtaW1hZ2Uge1xcbiAgICAgIG1heC13aWR0aDogNTAlO1xcbiAgICAgIGltZyB7XFxuICAgICAgICBib3JkZXItcmFkaXVzOiAycHggMCAwIDJweDtcXG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcXG4gICAgICAgIHdpZHRoOiBhdXRvO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICAuY2FyZC1zdGFja2VkIHtcXG4gICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgICAgZmxleDogMTtcXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuXFxuICAgICAgLmNhcmQtY29udGVudCB7XFxuICAgICAgICBmbGV4LWdyb3c6IDE7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXFxuICAvLyBTdGlja3kgQWN0aW9uIFNlY3Rpb25cXG4gICYuc3RpY2t5LWFjdGlvbiB7XFxuICAgIC5jYXJkLWFjdGlvbiB7XFxuICAgICAgei1pbmRleDogMjtcXG4gICAgfVxcblxcbiAgICAuY2FyZC1yZXZlYWwge1xcbiAgICAgIHotaW5kZXg6IDE7XFxuICAgICAgcGFkZGluZy1ib3R0b206IDY0cHg7XFxuICAgIH1cXG4gIH1cXG5cXG5cXG5cXG5cXG4gIC5jYXJkLWltYWdlIHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcblxcbiAgICAvLyBJbWFnZSBiYWNrZ3JvdW5kIGZvciBjb250ZW50XFxuICAgIGltZyB7XFxuICAgICAgZGlzcGxheTogYmxvY2s7XFxuICAgICAgYm9yZGVyLXJhZGl1czogMnB4IDJweCAwIDA7XFxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICAgIGxlZnQ6IDA7XFxuICAgICAgcmlnaHQ6IDA7XFxuICAgICAgdG9wOiAwO1xcbiAgICAgIGJvdHRvbTogMDtcXG4gICAgICB3aWR0aDogMTAwJTtcXG4gICAgfVxcblxcbiAgICAuY2FyZC10aXRsZSB7XFxuICAgICAgY29sb3I6ICRjYXJkLWJnLWNvbG9yO1xcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICBib3R0b206IDA7XFxuICAgICAgbGVmdDogMDtcXG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICAgICAgcGFkZGluZzogJGNhcmQtcGFkZGluZztcXG4gICAgfVxcbiAgfVxcblxcbiAgLmNhcmQtY29udGVudCB7XFxuICAgIHBhZGRpbmc6ICRjYXJkLXBhZGRpbmc7XFxuICAgIGJvcmRlci1yYWRpdXM6IDAgMCAycHggMnB4O1xcblxcbiAgICBwIHtcXG4gICAgICBtYXJnaW46IDA7XFxuICAgIH1cXG4gICAgLmNhcmQtdGl0bGUge1xcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4O1xcbiAgICAgIG1hcmdpbi1ib3R0b206IDhweDtcXG5cXG4gICAgICBpIHtcXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4O1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblxcbiAgLmNhcmQtYWN0aW9uIHtcXG4gICAgJjpsYXN0LWNoaWxkIHtcXG4gICAgICBib3JkZXItcmFkaXVzOiAwIDAgMnB4IDJweDtcXG4gICAgfVxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OyAvLyBVc2UgaW5oZXJpdCB0byBpbmhlcml0IGNvbG9yIGNsYXNzZXNcXG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMTYwLDE2MCwxNjAsLjIpO1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIHBhZGRpbmc6IDE2cHggJGNhcmQtcGFkZGluZztcXG5cXG4gICAgYTpub3QoLmJ0bik6bm90KC5idG4tbGFyZ2UpOm5vdCguYnRuLWZsb2F0aW5nKSB7XFxuICAgICAgY29sb3I6ICRjYXJkLWxpbmstY29sb3I7XFxuICAgICAgbWFyZ2luLXJpZ2h0OiAkY2FyZC1wYWRkaW5nO1xcbiAgICAgIHRyYW5zaXRpb246IGNvbG9yIC4zcyBlYXNlO1xcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XFxuXFxuICAgICAgJjpob3ZlciB7IGNvbG9yOiAkY2FyZC1saW5rLWNvbG9yLWxpZ2h0OyB9XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5jYXJkLXJldmVhbCB7XFxuICAgIHBhZGRpbmc6ICRjYXJkLXBhZGRpbmc7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNhcmQtYmctY29sb3I7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgICBsZWZ0OiAwO1xcbiAgICB0b3A6IDEwMCU7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgei1pbmRleDogMztcXG4gICAgZGlzcGxheTogbm9uZTtcXG5cXG4gICAgLmNhcmQtdGl0bGUge1xcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgfVxcbiAgfVxcbn1cXG5cIixcIi8qXFxyXFxuICAgIEBsaWNlbnNlXFxyXFxuICAgIENvcHlyaWdodCAoYykgMjAxNCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXFxyXFxuICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcXHJcXG4gICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcXHJcXG4gICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XFxyXFxuICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXFxyXFxuICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XFxyXFxuICovXFxyXFxuXFxyXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqL1xcclxcbi8qIFNUWUxFUyBGT1IgVEhFIFNQSU5ORVIgKi9cXHJcXG4vKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxyXFxuXFxyXFxuLypcXHJcXG4gKiBDb25zdGFudHM6XFxyXFxuICogICAgICBTVFJPS0VXSURUSCA9IDNweFxcclxcbiAqICAgICAgQVJDU0laRSAgICAgPSAyNzAgZGVncmVlcyAoYW1vdW50IG9mIGNpcmNsZSB0aGUgYXJjIHRha2VzIHVwKVxcclxcbiAqICAgICAgQVJDVElNRSAgICAgPSAxMzMzbXMgKHRpbWUgaXQgdGFrZXMgdG8gZXhwYW5kIGFuZCBjb250cmFjdCBhcmMpXFxyXFxuICogICAgICBBUkNTVEFSVFJPVCA9IDIxNiBkZWdyZWVzIChob3cgbXVjaCB0aGUgc3RhcnQgbG9jYXRpb24gb2YgdGhlIGFyY1xcclxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgcm90YXRlIGVhY2ggdGltZSwgMjE2IGdpdmVzIHVzIGFcXHJcXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSBwb2ludGVkIHN0YXIgc2hhcGUgKGl0J3MgMzYwLzUgKiAzKS5cXHJcXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGEgNyBwb2ludGVkIHN0YXIsIHdlIG1pZ2h0IGRvXFxyXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2MC83ICogMyA9IDE1NC4yODYpXFxyXFxuICogICAgICBDT05UQUlORVJXSURUSCA9IDI4cHhcXHJcXG4gKiAgICAgIFNIUklOS19USU1FID0gNDAwbXNcXHJcXG4gKi9cXHJcXG5cXHJcXG5cXHJcXG4ucHJlbG9hZGVyLXdyYXBwZXIge1xcclxcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcclxcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcbiAgd2lkdGg6IDUwcHg7XFxyXFxuICBoZWlnaHQ6IDUwcHg7XFxyXFxuXFxyXFxuICAmLnNtYWxsIHtcXHJcXG4gICAgd2lkdGg6IDM2cHg7XFxyXFxuICAgIGhlaWdodDogMzZweDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gICYuYmlnIHtcXHJcXG4gICAgd2lkdGg6IDY0cHg7XFxyXFxuICAgIGhlaWdodDogNjRweDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gICYuYWN0aXZlIHtcXHJcXG4gICAgLyogZHVyYXRpb246IDM2MCAqIEFSQ1RJTUUgLyAoQVJDU1RBUlRST1QgKyAoMzYwLUFSQ1NJWkUpKSAqL1xcclxcbiAgICAtd2Via2l0LWFuaW1hdGlvbjogY29udGFpbmVyLXJvdGF0ZSAxNTY4bXMgbGluZWFyIGluZmluaXRlO1xcclxcbiAgICBhbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgMTU2OG1zIGxpbmVhciBpbmZpbml0ZTtcXHJcXG4gIH1cXHJcXG59XFxyXFxuXFxyXFxuQC13ZWJraXQta2V5ZnJhbWVzIGNvbnRhaW5lci1yb3RhdGUge1xcclxcbiAgdG8geyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZykgfVxcclxcbn1cXHJcXG5cXHJcXG5Aa2V5ZnJhbWVzIGNvbnRhaW5lci1yb3RhdGUge1xcclxcbiAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIH1cXHJcXG59XFxyXFxuXFxyXFxuLnNwaW5uZXItbGF5ZXIge1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxuICBoZWlnaHQ6IDEwMCU7XFxyXFxuICBvcGFjaXR5OiAwO1xcclxcbiAgYm9yZGVyLWNvbG9yOiAkc3Bpbm5lci1kZWZhdWx0LWNvbG9yO1xcclxcbn1cXHJcXG5cXHJcXG4uc3Bpbm5lci1ibHVlLFxcclxcbi5zcGlubmVyLWJsdWUtb25seSB7XFxyXFxuICBib3JkZXItY29sb3I6ICM0Mjg1ZjQ7XFxyXFxufVxcclxcblxcclxcbi5zcGlubmVyLXJlZCxcXHJcXG4uc3Bpbm5lci1yZWQtb25seSB7XFxyXFxuICBib3JkZXItY29sb3I6ICNkYjQ0Mzc7XFxyXFxufVxcclxcblxcclxcbi5zcGlubmVyLXllbGxvdyxcXHJcXG4uc3Bpbm5lci15ZWxsb3ctb25seSB7XFxyXFxuICBib3JkZXItY29sb3I6ICNmNGI0MDA7XFxyXFxufVxcclxcblxcclxcbi5zcGlubmVyLWdyZWVuLFxcclxcbi5zcGlubmVyLWdyZWVuLW9ubHkge1xcclxcbiAgYm9yZGVyLWNvbG9yOiAjMGY5ZDU4O1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBJTVBPUlRBTlQgTk9URSBBQk9VVCBDU1MgQU5JTUFUSU9OIFBST1BFUlRJRVMgKGtlYW51bGVlKTpcXHJcXG4gKlxcclxcbiAqIGlPUyBTYWZhcmkgKHRlc3RlZCBvbiBpT1MgOC4xKSBkb2VzIG5vdCBoYW5kbGUgYW5pbWF0aW9uLWRlbGF5IHZlcnkgd2VsbCAtIGl0IGRvZXNuJ3RcXHJcXG4gKiBndWFyYW50ZWUgdGhhdCB0aGUgYW5pbWF0aW9uIHdpbGwgc3RhcnQgX2V4YWN0bHlfIGFmdGVyIHRoYXQgdmFsdWUuIFNvIHdlIGF2b2lkIHVzaW5nXFxyXFxuICogYW5pbWF0aW9uLWRlbGF5IGFuZCBpbnN0ZWFkIHNldCBjdXN0b20ga2V5ZnJhbWVzIGZvciBlYWNoIGNvbG9yIChhcyByZWR1bmRhbnQgYXMgaXRcXHJcXG4gKiBzZWVtcykuXFxyXFxuICpcXHJcXG4gKiBXZSB3cml0ZSBvdXQgZWFjaCBhbmltYXRpb24gaW4gZnVsbCAoaW5zdGVhZCBvZiBzZXBhcmF0aW5nIGFuaW1hdGlvbi1uYW1lLFxcclxcbiAqIGFuaW1hdGlvbi1kdXJhdGlvbiwgZXRjLikgYmVjYXVzZSB1bmRlciB0aGUgcG9seWZpbGwsIFNhZmFyaSBkb2VzIG5vdCByZWNvZ25pemUgdGhvc2VcXHJcXG4gKiBzcGVjaWZpYyBwcm9wZXJ0aWVzIHByb3Blcmx5LCB0cmVhdHMgdGhlbSBhcyAtd2Via2l0LWFuaW1hdGlvbiwgYW5kIG92ZXJyaWRlcyB0aGVcXHJcXG4gKiBvdGhlciBhbmltYXRpb24gcnVsZXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vUG9seW1lci9wbGF0Zm9ybS9pc3N1ZXMvNTMuXFxyXFxuICovXFxyXFxuLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5zcGlubmVyLWJsdWUge1xcclxcbiAgLyogZHVyYXRpb25zOiA0ICogQVJDVElNRSAqL1xcclxcbiAgLXdlYmtpdC1hbmltYXRpb246IGZpbGwtdW5maWxsLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpIGluZmluaXRlIGJvdGgsIGJsdWUtZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcclxcbiAgYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoLCBibHVlLWZhZGUtaW4tb3V0IDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXHJcXG59XFxyXFxuXFxyXFxuLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5zcGlubmVyLXJlZCB7XFxyXFxuICAvKiBkdXJhdGlvbnM6IDQgKiBBUkNUSU1FICovXFxyXFxuICAtd2Via2l0LWFuaW1hdGlvbjogZmlsbC11bmZpbGwtcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSkgaW5maW5pdGUgYm90aCwgcmVkLWZhZGUtaW4tb3V0IDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXHJcXG4gIGFuaW1hdGlvbjogZmlsbC11bmZpbGwtcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSkgaW5maW5pdGUgYm90aCwgcmVkLWZhZGUtaW4tb3V0IDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXHJcXG59XFxyXFxuXFxyXFxuLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5zcGlubmVyLXllbGxvdyB7XFxyXFxuICAvKiBkdXJhdGlvbnM6IDQgKiBBUkNUSU1FICovXFxyXFxuICAtd2Via2l0LWFuaW1hdGlvbjogZmlsbC11bmZpbGwtcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSkgaW5maW5pdGUgYm90aCwgeWVsbG93LWZhZGUtaW4tb3V0IDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXHJcXG4gIGFuaW1hdGlvbjogZmlsbC11bmZpbGwtcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSkgaW5maW5pdGUgYm90aCwgeWVsbG93LWZhZGUtaW4tb3V0IDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXHJcXG59XFxyXFxuXFxyXFxuLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5zcGlubmVyLWdyZWVuIHtcXHJcXG4gIC8qIGR1cmF0aW9uczogNCAqIEFSQ1RJTUUgKi9cXHJcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoLCBncmVlbi1mYWRlLWluLW91dCA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxyXFxuICBhbmltYXRpb246IGZpbGwtdW5maWxsLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpIGluZmluaXRlIGJvdGgsIGdyZWVuLWZhZGUtaW4tb3V0IDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSkgaW5maW5pdGUgYm90aDtcXHJcXG59XFxyXFxuXFxyXFxuLmFjdGl2ZSAuc3Bpbm5lci1sYXllcixcXHJcXG4uYWN0aXZlIC5zcGlubmVyLWxheWVyLnNwaW5uZXItYmx1ZS1vbmx5LFxcclxcbi5hY3RpdmUgLnNwaW5uZXItbGF5ZXIuc3Bpbm5lci1yZWQtb25seSxcXHJcXG4uYWN0aXZlIC5zcGlubmVyLWxheWVyLnNwaW5uZXIteWVsbG93LW9ubHksXFxyXFxuLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5zcGlubmVyLWdyZWVuLW9ubHkge1xcclxcbiAgLyogZHVyYXRpb25zOiA0ICogQVJDVElNRSAqL1xcclxcbiAgb3BhY2l0eTogMTtcXHJcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcclxcbiAgYW5pbWF0aW9uOiBmaWxsLXVuZmlsbC1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcclxcbn1cXHJcXG5cXHJcXG5ALXdlYmtpdC1rZXlmcmFtZXMgZmlsbC11bmZpbGwtcm90YXRlIHtcXHJcXG4gIDEyLjUlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpOyAgfSAvKiAwLjUgKiBBUkNTSVpFICovXFxyXFxuICAyNSUgICB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsgIH0gLyogMSAgICogQVJDU0laRSAqL1xcclxcbiAgMzcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQwNWRlZyk7ICB9IC8qIDEuNSAqIEFSQ1NJWkUgKi9cXHJcXG4gIDUwJSAgIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg1NDBkZWcpOyAgfSAvKiAyICAgKiBBUkNTSVpFICovXFxyXFxuICA2Mi41JSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNjc1ZGVnKTsgIH0gLyogMi41ICogQVJDU0laRSAqL1xcclxcbiAgNzUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDgxMGRlZyk7ICB9IC8qIDMgICAqIEFSQ1NJWkUgKi9cXHJcXG4gIDg3LjUlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg5NDVkZWcpOyAgfSAvKiAzLjUgKiBBUkNTSVpFICovXFxyXFxuICB0byAgICB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTA4MGRlZyk7IH0gLyogNCAgICogQVJDU0laRSAqL1xcclxcbn1cXHJcXG5cXHJcXG5Aa2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7XFxyXFxuICAxMi41JSB7IHRyYW5zZm9ybTogcm90YXRlKDEzNWRlZyk7ICB9IC8qIDAuNSAqIEFSQ1NJWkUgKi9cXHJcXG4gIDI1JSAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsgIH0gLyogMSAgICogQVJDU0laRSAqL1xcclxcbiAgMzcuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSg0MDVkZWcpOyAgfSAvKiAxLjUgKiBBUkNTSVpFICovXFxyXFxuICA1MCUgICB7IHRyYW5zZm9ybTogcm90YXRlKDU0MGRlZyk7ICB9IC8qIDIgICAqIEFSQ1NJWkUgKi9cXHJcXG4gIDYyLjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoNjc1ZGVnKTsgIH0gLyogMi41ICogQVJDU0laRSAqL1xcclxcbiAgNzUlICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSg4MTBkZWcpOyAgfSAvKiAzICAgKiBBUkNTSVpFICovXFxyXFxuICA4Ny41JSB7IHRyYW5zZm9ybTogcm90YXRlKDk0NWRlZyk7ICB9IC8qIDMuNSAqIEFSQ1NJWkUgKi9cXHJcXG4gIHRvICAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMTA4MGRlZyk7IH0gLyogNCAgICogQVJDU0laRSAqL1xcclxcbn1cXHJcXG5cXHJcXG5ALXdlYmtpdC1rZXlmcmFtZXMgYmx1ZS1mYWRlLWluLW91dCB7XFxyXFxuICBmcm9tIHsgb3BhY2l0eTogMTsgfVxcclxcbiAgMjUlIHsgb3BhY2l0eTogMTsgfVxcclxcbiAgMjYlIHsgb3BhY2l0eTogMDsgfVxcclxcbiAgODklIHsgb3BhY2l0eTogMDsgfVxcclxcbiAgOTAlIHsgb3BhY2l0eTogMTsgfVxcclxcbiAgMTAwJSB7IG9wYWNpdHk6IDE7IH1cXHJcXG59XFxyXFxuXFxyXFxuQGtleWZyYW1lcyBibHVlLWZhZGUtaW4tb3V0IHtcXHJcXG4gIGZyb20geyBvcGFjaXR5OiAxOyB9XFxyXFxuICAyNSUgeyBvcGFjaXR5OiAxOyB9XFxyXFxuICAyNiUgeyBvcGFjaXR5OiAwOyB9XFxyXFxuICA4OSUgeyBvcGFjaXR5OiAwOyB9XFxyXFxuICA5MCUgeyBvcGFjaXR5OiAxOyB9XFxyXFxuICAxMDAlIHsgb3BhY2l0eTogMTsgfVxcclxcbn1cXHJcXG5cXHJcXG5ALXdlYmtpdC1rZXlmcmFtZXMgcmVkLWZhZGUtaW4tb3V0IHtcXHJcXG4gIGZyb20geyBvcGFjaXR5OiAwOyB9XFxyXFxuICAxNSUgeyBvcGFjaXR5OiAwOyB9XFxyXFxuICAyNSUgeyBvcGFjaXR5OiAxOyB9XFxyXFxuICA1MCUgeyBvcGFjaXR5OiAxOyB9XFxyXFxuICA1MSUgeyBvcGFjaXR5OiAwOyB9XFxyXFxufVxcclxcblxcclxcbkBrZXlmcmFtZXMgcmVkLWZhZGUtaW4tb3V0IHtcXHJcXG4gIGZyb20geyBvcGFjaXR5OiAwOyB9XFxyXFxuICAxNSUgeyBvcGFjaXR5OiAwOyB9XFxyXFxuICAyNSUgeyBvcGFjaXR5OiAxOyB9XFxyXFxuICA1MCUgeyBvcGFjaXR5OiAxOyB9XFxyXFxuICA1MSUgeyBvcGFjaXR5OiAwOyB9XFxyXFxufVxcclxcblxcclxcbkAtd2Via2l0LWtleWZyYW1lcyB5ZWxsb3ctZmFkZS1pbi1vdXQge1xcclxcbiAgZnJvbSB7IG9wYWNpdHk6IDA7IH1cXHJcXG4gIDQwJSB7IG9wYWNpdHk6IDA7IH1cXHJcXG4gIDUwJSB7IG9wYWNpdHk6IDE7IH1cXHJcXG4gIDc1JSB7IG9wYWNpdHk6IDE7IH1cXHJcXG4gIDc2JSB7IG9wYWNpdHk6IDA7IH1cXHJcXG59XFxyXFxuXFxyXFxuQGtleWZyYW1lcyB5ZWxsb3ctZmFkZS1pbi1vdXQge1xcclxcbiAgZnJvbSB7IG9wYWNpdHk6IDA7IH1cXHJcXG4gIDQwJSB7IG9wYWNpdHk6IDA7IH1cXHJcXG4gIDUwJSB7IG9wYWNpdHk6IDE7IH1cXHJcXG4gIDc1JSB7IG9wYWNpdHk6IDE7IH1cXHJcXG4gIDc2JSB7IG9wYWNpdHk6IDA7IH1cXHJcXG59XFxyXFxuXFxyXFxuQC13ZWJraXQta2V5ZnJhbWVzIGdyZWVuLWZhZGUtaW4tb3V0IHtcXHJcXG4gIGZyb20geyBvcGFjaXR5OiAwOyB9XFxyXFxuICA2NSUgeyBvcGFjaXR5OiAwOyB9XFxyXFxuICA3NSUgeyBvcGFjaXR5OiAxOyB9XFxyXFxuICA5MCUgeyBvcGFjaXR5OiAxOyB9XFxyXFxuICAxMDAlIHsgb3BhY2l0eTogMDsgfVxcclxcbn1cXHJcXG5cXHJcXG5Aa2V5ZnJhbWVzIGdyZWVuLWZhZGUtaW4tb3V0IHtcXHJcXG4gIGZyb20geyBvcGFjaXR5OiAwOyB9XFxyXFxuICA2NSUgeyBvcGFjaXR5OiAwOyB9XFxyXFxuICA3NSUgeyBvcGFjaXR5OiAxOyB9XFxyXFxuICA5MCUgeyBvcGFjaXR5OiAxOyB9XFxyXFxuICAxMDAlIHsgb3BhY2l0eTogMDsgfVxcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBQYXRjaCB0aGUgZ2FwIHRoYXQgYXBwZWFyIGJldHdlZW4gdGhlIHR3byBhZGphY2VudCBkaXYuY2lyY2xlLWNsaXBwZXIgd2hpbGUgdGhlXFxyXFxuICogc3Bpbm5lciBpcyByb3RhdGluZyAoYXBwZWFycyBvbiBDaHJvbWUgMzgsIFNhZmFyaSA3LjEsIGFuZCBJRSAxMSkuXFxyXFxuICovXFxyXFxuLmdhcC1wYXRjaCB7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICB0b3A6IDA7XFxyXFxuICBsZWZ0OiA0NSU7XFxyXFxuICB3aWR0aDogMTAlO1xcclxcbiAgaGVpZ2h0OiAxMDAlO1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gIGJvcmRlci1jb2xvcjogaW5oZXJpdDtcXHJcXG59XFxyXFxuXFxyXFxuLmdhcC1wYXRjaCAuY2lyY2xlIHtcXHJcXG4gIHdpZHRoOiAxMDAwJTtcXHJcXG4gIGxlZnQ6IC00NTAlO1xcclxcbn1cXHJcXG5cXHJcXG4uY2lyY2xlLWNsaXBwZXIge1xcclxcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcclxcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcbiAgd2lkdGg6IDUwJTtcXHJcXG4gIGhlaWdodDogMTAwJTtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICBib3JkZXItY29sb3I6IGluaGVyaXQ7XFxyXFxuXFxyXFxuICAuY2lyY2xlIHtcXHJcXG4gICAgd2lkdGg6IDIwMCU7XFxyXFxuICAgIGhlaWdodDogMTAwJTtcXHJcXG4gICAgYm9yZGVyLXdpZHRoOiAzcHg7IC8qIFNUUk9LRVdJRFRIICovXFxyXFxuICAgIGJvcmRlci1zdHlsZTogc29saWQ7XFxyXFxuICAgIGJvcmRlci1jb2xvcjogaW5oZXJpdDtcXHJcXG4gICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcXHJcXG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xcclxcbiAgICAtd2Via2l0LWFuaW1hdGlvbjogbm9uZTtcXHJcXG4gICAgYW5pbWF0aW9uOiBub25lO1xcclxcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICAgIHRvcDogMDtcXHJcXG4gICAgcmlnaHQ6IDA7XFxyXFxuICAgIGJvdHRvbTogMDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gICYubGVmdCAuY2lyY2xlIHtcXHJcXG4gICAgbGVmdDogMDtcXHJcXG4gICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcclxcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEyOWRlZyk7XFxyXFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDEyOWRlZyk7XFxyXFxuICB9XFxyXFxuICAmLnJpZ2h0IC5jaXJjbGUge1xcclxcbiAgICBsZWZ0OiAtMTAwJTtcXHJcXG4gICAgYm9yZGVyLWxlZnQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxyXFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEyOWRlZyk7XFxyXFxuICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpO1xcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG4uYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5sZWZ0IC5jaXJjbGUge1xcclxcbiAgLyogZHVyYXRpb246IEFSQ1RJTUUgKi9cXHJcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBsZWZ0LXNwaW4gMTMzM21zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcclxcbiAgYW5pbWF0aW9uOiBsZWZ0LXNwaW4gMTMzM21zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcclxcbn1cXHJcXG5cXHJcXG4uYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHtcXHJcXG4gIC8qIGR1cmF0aW9uOiBBUkNUSU1FICovXFxyXFxuICAtd2Via2l0LWFuaW1hdGlvbjogcmlnaHQtc3BpbiAxMzMzbXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpIGluZmluaXRlIGJvdGg7XFxyXFxuICBhbmltYXRpb246IHJpZ2h0LXNwaW4gMTMzM21zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoO1xcclxcbn1cXHJcXG5cXHJcXG5ALXdlYmtpdC1rZXlmcmFtZXMgbGVmdC1zcGluIHtcXHJcXG4gIGZyb20geyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzMGRlZyk7IH1cXHJcXG4gIDUwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTVkZWcpOyB9XFxyXFxuICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKTsgfVxcclxcbn1cXHJcXG5cXHJcXG5Aa2V5ZnJhbWVzIGxlZnQtc3BpbiB7XFxyXFxuICBmcm9tIHsgdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKTsgfVxcclxcbiAgNTAlIHsgdHJhbnNmb3JtOiByb3RhdGUoLTVkZWcpOyB9XFxyXFxuICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDEzMGRlZyk7IH1cXHJcXG59XFxyXFxuXFxyXFxuQC13ZWJraXQta2V5ZnJhbWVzIHJpZ2h0LXNwaW4ge1xcclxcbiAgZnJvbSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZyk7IH1cXHJcXG4gIDUwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNWRlZyk7IH1cXHJcXG4gIHRvIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMTMwZGVnKTsgfVxcclxcbn1cXHJcXG5cXHJcXG5Aa2V5ZnJhbWVzIHJpZ2h0LXNwaW4ge1xcclxcbiAgZnJvbSB7IHRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpOyB9XFxyXFxuICA1MCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSg1ZGVnKTsgfVxcclxcbiAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgtMTMwZGVnKTsgfVxcclxcbn1cXHJcXG5cXHJcXG4jc3Bpbm5lckNvbnRhaW5lci5jb29sZG93biB7XFxyXFxuICAvKiBkdXJhdGlvbjogU0hSSU5LX1RJTUUgKi9cXHJcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIDE1NjhtcyBsaW5lYXIgaW5maW5pdGUsIGZhZGUtb3V0IDQwMG1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTtcXHJcXG4gIGFuaW1hdGlvbjogY29udGFpbmVyLXJvdGF0ZSAxNTY4bXMgbGluZWFyIGluZmluaXRlLCBmYWRlLW91dCA0MDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7XFxyXFxufVxcclxcblxcclxcbkAtd2Via2l0LWtleWZyYW1lcyBmYWRlLW91dCB7XFxyXFxuICBmcm9tIHsgb3BhY2l0eTogMTsgfVxcclxcbiAgdG8geyBvcGFjaXR5OiAwOyB9XFxyXFxufVxcclxcblxcclxcbkBrZXlmcmFtZXMgZmFkZS1vdXQge1xcclxcbiAgZnJvbSB7IG9wYWNpdHk6IDE7IH1cXHJcXG4gIHRvIHsgb3BhY2l0eTogMDsgfVxcclxcbn1cXHJcXG5cIixcIlxcclxcbi8vIFByb2dyZXNzIEJhclxcclxcbi5wcm9ncmVzcyB7XFxyXFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICBoZWlnaHQ6IDRweDtcXHJcXG4gIGRpc3BsYXk6IGJsb2NrO1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKCRwcm9ncmVzcy1iYXItY29sb3IsIDQwJSk7XFxyXFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxyXFxuICBtYXJnaW46ICRlbGVtZW50LXRvcC1tYXJnaW4gMCAkZWxlbWVudC1ib3R0b20tbWFyZ2luIDA7XFxyXFxuICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbiAgLmRldGVybWluYXRlIHtcXHJcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgICB0b3A6IDA7XFxyXFxuICAgIGxlZnQ6IDA7XFxyXFxuICAgIGJvdHRvbTogMDtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHByb2dyZXNzLWJhci1jb2xvcjtcXHJcXG4gICAgdHJhbnNpdGlvbjogd2lkdGggLjNzIGxpbmVhcjtcXHJcXG4gIH1cXHJcXG4gIC5pbmRldGVybWluYXRlIHtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHByb2dyZXNzLWJhci1jb2xvcjtcXHJcXG4gICAgJjpiZWZvcmUge1xcclxcbiAgICAgIGNvbnRlbnQ6ICcnO1xcclxcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xcclxcbiAgICAgIHRvcDogMDtcXHJcXG4gICAgICBsZWZ0OjA7XFxyXFxuICAgICAgYm90dG9tOiAwO1xcclxcbiAgICAgIHdpbGwtY2hhbmdlOiBsZWZ0LCByaWdodDtcXHJcXG4gICAgICAvLyBDdXN0b20gYmV6aWVyXFxyXFxuICAgICAgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlIDIuMXMgY3ViaWMtYmV6aWVyKDAuNjUwLCAwLjgxNSwgMC43MzUsIDAuMzk1KSBpbmZpbml0ZTtcXHJcXG5cXHJcXG4gICAgfVxcclxcbiAgICAmOmFmdGVyIHtcXHJcXG4gICAgICBjb250ZW50OiAnJztcXHJcXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcXHJcXG4gICAgICB0b3A6IDA7XFxyXFxuICAgICAgbGVmdDowO1xcclxcbiAgICAgIGJvdHRvbTogMDtcXHJcXG4gICAgICB3aWxsLWNoYW5nZTogbGVmdCwgcmlnaHQ7XFxyXFxuICAgICAgLy8gQ3VzdG9tIGJlemllclxcclxcbiAgICAgIGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZS1zaG9ydCAyLjFzIGN1YmljLWJlemllcigwLjE2NSwgMC44NDAsIDAuNDQwLCAxLjAwMCkgaW5maW5pdGU7XFxyXFxuICAgICAgYW5pbWF0aW9uLWRlbGF5OiAxLjE1cztcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcbn1cXHJcXG5Aa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUge1xcclxcbiAgMCUge1xcclxcbiAgICBsZWZ0OiAtMzUlO1xcclxcbiAgICByaWdodDoxMDAlO1xcclxcbiAgfVxcclxcbiAgNjAlIHtcXHJcXG4gICAgbGVmdDogMTAwJTtcXHJcXG4gICAgcmlnaHQ6IC05MCU7XFxyXFxuICB9XFxyXFxuICAxMDAlIHtcXHJcXG4gICAgbGVmdDogMTAwJTtcXHJcXG4gICAgcmlnaHQ6IC05MCU7XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcbkBrZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZS1zaG9ydCB7XFxyXFxuICAwJSB7XFxyXFxuICAgIGxlZnQ6IC0yMDAlO1xcclxcbiAgICByaWdodDogMTAwJTtcXHJcXG4gIH1cXHJcXG4gIDYwJSB7XFxyXFxuICAgIGxlZnQ6IDEwNyU7XFxyXFxuICAgIHJpZ2h0OiAtOCU7XFxyXFxuICB9XFxyXFxuICAxMDAlIHtcXHJcXG4gICAgbGVmdDogMTA3JTtcXHJcXG4gICAgcmlnaHQ6IC04JTtcXHJcXG4gIH1cXHJcXG59XFxyXFxuXFxyXFxuXCIsXCIuZmxhc2gtbWVzc2FnZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBwYWRkaW5nOiAycHggMTBweDtcXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcXG4gIHotaW5kZXg6IDk5OTk5O1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxuXFxuXFxuICAmLmluZm8ge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmVkZGJlO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjNzI4ZjcyO1xcbiAgfVxcblxcbiAgJi53YXJuIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZTZkMDtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgI2VhN2QxNztcXG4gIH1cXG4gICYuZXJyb3Ige1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTViMmJjO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTMzMjU3O1xcbiAgfVxcbn1cXG5cXG5Aa2V5ZnJhbWVzIG1lc3NhZ2VJbiB7XFxuICBmcm9tIHtcXG4gICAgcmlnaHQ6IDgwJTtcXG4gIH1cXG5cXG4gIHRvIHtcXG4gICAgcmlnaHQ6IDA7XFxuXFxuICB9XFxufVwiLFwiLnB1bHNlIHtcXG4gICY6OmJlZm9yZSB7XFxuICAgIGNvbnRlbnQ6ICcnO1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICB0b3A6IDA7XFxuICAgIGxlZnQ6IDA7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XFxuICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XFxuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgLjNzLCB0cmFuc2Zvcm0gLjNzO1xcbiAgICBhbmltYXRpb246IHB1bHNlLWFuaW1hdGlvbiAxcyBjdWJpYy1iZXppZXIoMC4yNCwgMCwgMC4zOCwgMSkgaW5maW5pdGU7XFxuICAgIC8vei1pbmRleDogLTE7XFxuICB9XFxuXFxuICBvdmVyZmxvdzogdmlzaWJsZTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuQGtleWZyYW1lcyBwdWxzZS1hbmltYXRpb24ge1xcbiAgMCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjUpO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMS41KTtcXG4gIH1cXG59XFxuXCIsXCIuZHJvcGRvd24tY29udGVudCB7XFxuICAmOmZvY3VzIHtcXG4gICAgb3V0bGluZTogMDtcXG4gIH1cXG5cXG5cXG4gIEBleHRlbmQgLnNoYWRvdy0xO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogJGRyb3Bkb3duLWJnLWNvbG9yO1xcbiAgbWFyZ2luOiAwO1xcbiAgZGlzcGxheTogZmxvdztcXG4gIG1pbi13aWR0aDogMTAwcHg7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgLy9vcGFjaXR5OiAwO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMDtcXG4gIHRvcDogMDtcXG4gIHotaW5kZXg6IDk5OTk7IC8vIFRPRE86IENoZWNrIGlmIHRoaXMgZG9lc24ndCBicmVhayBvdGhlciB0aGluZ3NcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcXG5cXG5cXG4gIGxpIHtcXG4gICAgJjpob3ZlciwgJi5hY3RpdmUge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRkcm9wZG93bi1ob3Zlci1iZy1jb2xvcjtcXG4gICAgfVxcblxcbiAgICAmOmZvY3VzIHtcXG4gICAgICBvdXRsaW5lOiBub25lO1xcbiAgICB9XFxuXFxuICAgICYuZGl2aWRlciB7XFxuICAgICAgbWluLWhlaWdodDogMDtcXG4gICAgICBoZWlnaHQ6IDFweDtcXG4gICAgfVxcblxcbiAgICAmID4gYSwgJiA+IHNwYW4ge1xcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcXG4gICAgICBjb2xvcjogJGRyb3Bkb3duLWNvbG9yO1xcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xcbiAgICAgIHBhZGRpbmc6IGNhbGMoKCRkcm9wZG93bi1pdGVtLWhlaWdodCAtIDIycHgpIC8gMikgMTZweDtcXG4gICAgfVxcblxcbiAgICAmID4gc3BhbiA+IGxhYmVsIHtcXG4gICAgICB0b3A6IDFweDtcXG4gICAgICBsZWZ0OiAwO1xcbiAgICAgIGhlaWdodDogMThweDtcXG4gICAgfVxcblxcbiAgICAvLyBJY29uIGFsaWdubWVudCBvdmVycmlkZVxcbiAgICAmID4gYSA+IGkge1xcbiAgICAgIGhlaWdodDogaW5oZXJpdDtcXG4gICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gICAgICBmbG9hdDogbGVmdDtcXG4gICAgICBtYXJnaW46IDAgMjRweCAwIDA7XFxuICAgICAgd2lkdGg6IDI0cHg7XFxuICAgIH1cXG5cXG5cXG4gICAgY2xlYXI6IGJvdGg7XFxuICAgIGNvbG9yOiAkb2ZmLWJsYWNrO1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIG1pbi1oZWlnaHQ6ICRkcm9wZG93bi1pdGVtLWhlaWdodDtcXG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIHRleHQtYWxpZ246IGxlZnQ7XFxuICB9XFxufVxcblxcbmJvZHkua2V5Ym9hcmQtZm9jdXNlZCB7XFxuICAuZHJvcGRvd24tY29udGVudCBsaTpmb2N1cyB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkZHJvcGRvd24taG92ZXItYmctY29sb3IsIDglKTtcXG4gIH1cXG59XFxuXFxuLy8gSW5wdXQgZmllbGQgc3BlY2lmaWNpdHkgYnVnZml4XFxuLmlucHV0LWZpZWxkLmNvbCAuZHJvcGRvd24tY29udGVudCBbdHlwZT1cXFwiY2hlY2tib3hcXFwiXSArIGxhYmVsIHtcXG4gIHRvcDogMXB4O1xcbiAgbGVmdDogMDtcXG4gIGhlaWdodDogMThweDtcXG4gIHRyYW5zZm9ybTogbm9uZTtcXG59XFxuXFxuLmRyb3Bkb3duLXRyaWdnZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cIixcIm5hdiB7XFxuICAmLm5hdi1leHRlbmRlZCB7XFxuICAgIGhlaWdodDogYXV0bztcXG5cXG4gICAgLm5hdi13cmFwcGVyIHtcXG4gICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAgbWluLWhlaWdodDogJG5hdmJhci1oZWlnaHQtbW9iaWxlO1xcbiAgICAgIGhlaWdodDogYXV0bztcXG4gICAgfVxcblxcbiAgICAubmF2LWNvbnRlbnQge1xcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xcbiAgICB9XFxuICB9XFxuXFxuICBjb2xvcjogJG5hdmJhci1mb250LWNvbG9yO1xcbiAgQGV4dGVuZCAuc2hhZG93LTE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAkbmF2YmFyLWhlaWdodC1tb2JpbGU7XFxuICBsaW5lLWhlaWdodDogJG5hdmJhci1saW5lLWhlaWdodC1tb2JpbGU7XFxuXFxuICBhIHsgY29sb3I6ICRuYXZiYXItZm9udC1jb2xvcjsgfVxcblxcbiAgaSxcXG4gIFtjbGFzc149XFxcIm1kaS1cXFwiXSwgW2NsYXNzKj1cXFwibWRpLVxcXCJdLFxcbiAgaS5zLWljb25zIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIGZvbnQtc2l6ZTogMjRweDtcXG4gICAgaGVpZ2h0OiAkbmF2YmFyLWhlaWdodC1tb2JpbGU7XFxuICAgIGxpbmUtaGVpZ2h0OiAkbmF2YmFyLWxpbmUtaGVpZ2h0LW1vYmlsZTtcXG4gIH1cXG5cXG4gIC5uYXYtd3JhcHBlciB7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgfVxcblxcbiAgQG1lZGlhICN7JGxhcmdlLWFuZC11cH0ge1xcbiAgICBhLnNpZGVuYXYtdHJpZ2dlciB7IGRpc3BsYXk6IG5vbmU7IH1cXG4gIH1cXG5cXG5cXG4gIC8vIENvbGxhcHNlIGJ1dHRvblxcbiAgLnNpZGVuYXYtdHJpZ2dlciB7XFxuICAgIGZsb2F0OiBsZWZ0O1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIHotaW5kZXg6IDE7XFxuICAgIGhlaWdodDogJG5hdmJhci1oZWlnaHQtbW9iaWxlO1xcbiAgICBtYXJnaW46IDAgMThweDtcXG5cXG4gICAgaSB7XFxuICAgICAgaGVpZ2h0OiAkbmF2YmFyLWhlaWdodC1tb2JpbGU7XFxuICAgICAgbGluZS1oZWlnaHQ6ICRuYXZiYXItbGluZS1oZWlnaHQtbW9iaWxlO1xcbiAgICB9XFxuICB9XFxuXFxuXFxuICAvLyBMb2dvXFxuICAuYnJhbmQtbG9nbyB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgY29sb3I6ICRuYXZiYXItZm9udC1jb2xvcjtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICBmb250LXNpemU6ICRuYXZiYXItYnJhbmQtZm9udC1zaXplO1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgICBpbWcuY2lyY2xlIHtcXG4gICAgICBoZWlnaHQ6IDMycHg7XFxuICAgICAgd2lkdGg6IDMycHg7XFxuICAgIH1cXG5cXG4gICAgJi5jZW50ZXIge1xcbiAgICAgIGxlZnQ6IDUwJTtcXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XFxuICAgIH1cXG5cXG4gICAgQG1lZGlhICN7JG1lZGl1bS1hbmQtZG93bn0ge1xcbiAgICAgIGxlZnQ6IDUwJTtcXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XFxuXFxuICAgICAgJi5sZWZ0LCAmLnJpZ2h0IHtcXG4gICAgICAgIHBhZGRpbmc6IDA7XFxuICAgICAgICB0cmFuc2Zvcm06IG5vbmU7XFxuICAgICAgfVxcblxcbiAgICAgICYubGVmdCB7IGxlZnQ6IDAuNXJlbTsgfVxcbiAgICAgICYucmlnaHQge1xcbiAgICAgICAgcmlnaHQ6IDAuNXJlbTtcXG4gICAgICAgIGxlZnQ6IGF1dG87XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgICYucmlnaHQge1xcbiAgICAgIHJpZ2h0OiAwLjVyZW07XFxuICAgICAgcGFkZGluZzogMDtcXG4gICAgfVxcblxcbiAgICBpLFxcbiAgICBbY2xhc3NePVxcXCJtZGktXFxcIl0sIFtjbGFzcyo9XFxcIm1kaS1cXFwiXSxcXG4gICAgaS5zLWljb25zIHtcXG4gICAgICBmbG9hdDogbGVmdDtcXG4gICAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7XFxuICAgIH1cXG4gIH1cXG5cXG5cXG4gIC8vIFRpdGxlXFxuICAubmF2LXRpdGxlIHtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICBmb250LXNpemU6IDMycHg7XFxuICAgIHBhZGRpbmc6IDI4cHggMDtcXG4gIH1cXG5cXG5cXG4gIC8vIE5hdmJhciBMaW5rc1xcbiAgdWwge1xcbiAgICBtYXJnaW46IDA7XFxuXFxuICAgIGxpIHtcXG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIC4zcztcXG4gICAgICBmbG9hdDogbGVmdDtcXG4gICAgICBwYWRkaW5nOiAwO1xcblxcbiAgICAgICYuYWN0aXZlIHtcXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwwLDAsLjEpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgICBhIHtcXG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIC4zcztcXG4gICAgICBmb250LXNpemU6ICRuYXZiYXItZm9udC1zaXplO1xcbiAgICAgIGNvbG9yOiAkbmF2YmFyLWZvbnQtY29sb3I7XFxuICAgICAgZGlzcGxheTogYmxvY2s7XFxuICAgICAgcGFkZGluZzogMCAxNXB4O1xcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG5cXG4gICAgICAmLmJ0biwgJi5idG4tbGFyZ2UsICYuYnRuLWZsYXQsICYuYnRuLWZsb2F0aW5nIHtcXG4gICAgICAgIG1hcmdpbi10b3A6IC0ycHg7XFxuICAgICAgICBtYXJnaW4tbGVmdDogMTVweDtcXG4gICAgICAgIG1hcmdpbi1yaWdodDogMTVweDtcXG5cXG4gICAgICAgICYgPiAubWF0ZXJpYWwtaWNvbnMge1xcbiAgICAgICAgICBoZWlnaHQ6IGluaGVyaXQ7XFxuICAgICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG5cXG4gICAgICAmOmhvdmVyIHtcXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwwLDAsLjEpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICAmLmxlZnQge1xcbiAgICAgIGZsb2F0OiBsZWZ0O1xcbiAgICB9XFxuICB9XFxuXFxuICAvLyBOYXZiYXIgU2VhcmNoIEZvcm1cXG4gIGZvcm0ge1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICB9XFxuXFxuICAuaW5wdXQtZmllbGQge1xcbiAgICBtYXJnaW46IDA7XFxuICAgIGhlaWdodDogMTAwJTtcXG5cXG4gICAgaW5wdXQge1xcbiAgICAgIGhlaWdodDogMTAwJTtcXG4gICAgICBmb250LXNpemU6IDEuMnJlbTtcXG4gICAgICBib3JkZXI6IG5vbmU7XFxuICAgICAgcGFkZGluZy1sZWZ0OiAycmVtO1xcblxcbiAgICAgICY6Zm9jdXMsICZbdHlwZT10ZXh0XTp2YWxpZCwgJlt0eXBlPXBhc3N3b3JkXTp2YWxpZCxcXG4gICAgICAmW3R5cGU9ZW1haWxdOnZhbGlkLCAmW3R5cGU9dXJsXTp2YWxpZCwgJlt0eXBlPWRhdGVdOnZhbGlkIHtcXG4gICAgICAgIGJvcmRlcjogbm9uZTtcXG4gICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGxhYmVsIHtcXG4gICAgICB0b3A6IDA7XFxuICAgICAgbGVmdDogMDtcXG5cXG4gICAgICBpIHtcXG4gICAgICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LC43KTtcXG4gICAgICAgIHRyYW5zaXRpb246IGNvbG9yIC4zcztcXG4gICAgICB9XFxuICAgICAgJi5hY3RpdmUgaSB7IGNvbG9yOiAkbmF2YmFyLWZvbnQtY29sb3I7IH1cXG4gICAgfVxcbiAgfVxcbn1cXG5cXG4vLyBGaXhlZCBOYXZiYXJcXG4ubmF2YmFyLWZpeGVkIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGhlaWdodDogJG5hdmJhci1oZWlnaHQtbW9iaWxlO1xcbiAgei1pbmRleDogOTk3O1xcblxcbiAgbmF2IHtcXG4gICAgcG9zaXRpb246IGZpeGVkO1xcbiAgfVxcbn1cXG5AbWVkaWEgI3skbWVkaXVtLWFuZC11cH0ge1xcbiAgbmF2Lm5hdi1leHRlbmRlZCAubmF2LXdyYXBwZXIge1xcbiAgICBtaW4taGVpZ2h0OiAkbmF2YmFyLWhlaWdodDtcXG4gIH1cXG4gIG5hdiwgbmF2IC5uYXYtd3JhcHBlciBpLCBuYXYgYS5zaWRlbmF2LXRyaWdnZXIsIG5hdiBhLnNpZGVuYXYtdHJpZ2dlciBpIHtcXG4gICAgaGVpZ2h0OiAkbmF2YmFyLWhlaWdodDtcXG4gICAgbGluZS1oZWlnaHQ6ICRuYXZiYXItbGluZS1oZWlnaHQ7XFxuICB9XFxuICAubmF2YmFyLWZpeGVkIHtcXG4gICAgaGVpZ2h0OiAkbmF2YmFyLWhlaWdodDtcXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzV2l0aE1hcHBpbmdUb1N0cmluZykge1xuICB2YXIgbGlzdCA9IFtdO1xuXG4gIC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcbiAgbGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgICAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBpdGVtWzVdICE9PSBcInVuZGVmaW5lZFwiO1xuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpO1xuICAgICAgfVxuICAgICAgY29udGVudCArPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9O1xuXG4gIC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG4gIGxpc3QuaSA9IGZ1bmN0aW9uIGkobW9kdWxlcywgbWVkaWEsIGRlZHVwZSwgc3VwcG9ydHMsIGxheWVyKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCB1bmRlZmluZWRdXTtcbiAgICB9XG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRoaXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIGlkID0gdGhpc1trXVswXTtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgX2sgPSAwOyBfayA8IG1vZHVsZXMubGVuZ3RoOyBfaysrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19rXSk7XG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGxheWVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbVs1XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG1lZGlhKSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdXBwb3J0cykge1xuICAgICAgICBpZiAoIWl0ZW1bNF0pIHtcbiAgICAgICAgICBpdGVtWzRdID0gXCJcIi5jb25jYXQoc3VwcG9ydHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs0XSA9IHN1cHBvcnRzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gbGlzdDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHVybCA9IFN0cmluZyh1cmwuX19lc01vZHVsZSA/IHVybC5kZWZhdWx0IDogdXJsKTtcblxuICAvLyBJZiB1cmwgaXMgYWxyZWFkeSB3cmFwcGVkIGluIHF1b3RlcywgcmVtb3ZlIHRoZW1cbiAgaWYgKC9eWydcIl0uKlsnXCJdJC8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gdXJsLnNsaWNlKDEsIC0xKTtcbiAgfVxuICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgdXJsICs9IG9wdGlvbnMuaGFzaDtcbiAgfVxuXG4gIC8vIFNob3VsZCB1cmwgYmUgd3JhcHBlZD9cbiAgLy8gU2VlIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTMvI3VybHNcbiAgaWYgKC9bXCInKCkgXFx0XFxuXXwoJTIwKS8udGVzdCh1cmwpIHx8IG9wdGlvbnMubmVlZFF1b3Rlcykge1xuICAgIHJldHVybiBcIlxcXCJcIi5jb25jYXQodXJsLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKS5yZXBsYWNlKC9cXG4vZywgXCJcXFxcblwiKSwgXCJcXFwiXCIpO1xuICB9XG4gIHJldHVybiB1cmw7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXTtcbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgdmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdCB8fCBcIlwiKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07IiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbiAgdmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9saWIvaGFzJyk7XG5cbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHsgLyoqLyB9XG4gIH07XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxuICAgICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgICAgICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICtcbiAgICAgICAgICAgICAgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJyArXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICcgKyB0eXBlb2YgZXJyb3IgKyAnLiAnICtcbiAgICAgICAgICAgICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xuICAgICAgICAgICAgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcblxuICAgICAgICAgIHZhciBzdGFjayA9IGdldFN0YWNrID8gZ2V0U3RhY2soKSA6ICcnO1xuXG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ZhaWxlZCAnICsgbG9jYXRpb24gKyAnIHR5cGU6ICcgKyBlcnJvci5tZXNzYWdlICsgKHN0YWNrICE9IG51bGwgPyBzdGFjayA6ICcnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNldHMgd2FybmluZyBjYWNoZSB3aGVuIHRlc3RpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrUHJvcFR5cGVzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9saWIvaGFzJyk7XG52YXIgY2hlY2tQcm9wVHlwZXMgPSByZXF1aXJlKCcuL2NoZWNrUHJvcFR5cGVzJyk7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gICAqXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICAgKlxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICAgKiAgICAgICAuLi5cbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gICAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAgICpcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAgICogICAgIH0sXG4gICAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gICAqXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxuICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAgICpcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7XG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAgICogICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAqICAgICAgICAgICk7XG4gICAqICAgICAgICB9XG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAgICogIH0pO1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcbiAgICBiaWdpbnQ6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdiaWdpbnQnKSxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxuXG4gICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcbiAgICBlbGVtZW50VHlwZTogY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpLFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcbiAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcixcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcixcbiAgICBleGFjdDogY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcixcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSwgZGF0YSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5kYXRhID0gZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhOiB7fTtcbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cbiAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLlxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcblxuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUgPSB7fTtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA9IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuXG4gICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAgICAgICAgIC8vIE5ldyBiZWhhdmlvciBvbmx5IGZvciB1c2VycyBvZiBgcHJvcC10eXBlc2AgcGFja2FnZVxuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAnVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gT2xkIGJlaGF2aW9yIGZvciBwZW9wbGUgdXNpbmcgUmVhY3QuUHJvcFR5cGVzXG4gICAgICAgICAgdmFyIGNhY2hlS2V5ID0gY29tcG9uZW50TmFtZSArICc6JyArIHByb3BOYW1lO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gJiZcbiAgICAgICAgICAgIC8vIEF2b2lkIHNwYW1taW5nIHRoZSBjb25zb2xlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gbm90IGFjdGlvbmFibGUgZXhjZXB0IGZvciBsaWIgYXV0aG9yc1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBwcm9wIG9uIGAnICsgY29tcG9uZW50TmFtZSArICdgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAgICdZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIGEgdGhpcmQtcGFydHkgUHJvcFR5cGVzICcgK1xuICAgICAgICAgICAgICAnbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAnZm9yIGRldGFpbHMuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSA9IHRydWU7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLicpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGFpbmVkQ2hlY2tUeXBlID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgZmFsc2UpO1xuICAgIGNoYWluZWRDaGVja1R5cGUuaXNSZXF1aXJlZCA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIHRydWUpO1xuXG4gICAgcmV0dXJuIGNoYWluZWRDaGVja1R5cGU7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcihleHBlY3RlZFR5cGUpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09IGV4cGVjdGVkVHlwZSkge1xuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcbiAgICAgICAgLy8gY2hlY2ssIGJ1dCB3ZSBjYW4gb2ZmZXIgYSBtb3JlIHByZWNpc2UgZXJyb3IgbWVzc2FnZSBoZXJlIHJhdGhlciB0aGFuXG4gICAgICAgIC8vICdvZiB0eXBlIGBvYmplY3RgJy5cbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcmVjaXNlVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnYCcgKyBleHBlY3RlZFR5cGUgKyAnYC4nKSxcbiAgICAgICAgICB7ZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGV9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghUmVhY3RJcy5pc1ZhbGlkRWxlbWVudFR5cGUocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQgdHlwZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXksIGdvdCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLiAnICtcbiAgICAgICAgICAgICdBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHdyaXRlIG9uZU9mKHgsIHksIHopIGluc3RlYWQgb2Ygb25lT2YoW3gsIHksIHpdKS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFZhbHVlcywgZnVuY3Rpb24gcmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgU3RyaW5nKHByb3BWYWx1ZSkgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgb25lIG9mICcgKyB2YWx1ZXNTdHJpbmcgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wVmFsdWUpIHtcbiAgICAgICAgaWYgKGhhcyhwcm9wVmFsdWUsIGtleSkpIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgY2hlY2sgZnVuY3Rpb25zLCBidXQgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkICcgKyBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcoY2hlY2tlcikgKyAnIGF0IGluZGV4ICcgKyBpICsgJy4nXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIGV4cGVjdGVkVHlwZXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICAgIHZhciBjaGVja2VyUmVzdWx0ID0gY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGNoZWNrZXJSZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja2VyUmVzdWx0LmRhdGEgJiYgaGFzKGNoZWNrZXJSZXN1bHQuZGF0YSwgJ2V4cGVjdGVkVHlwZScpKSB7XG4gICAgICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGNoZWNrZXJSZXN1bHQuZGF0YS5leHBlY3RlZFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgPSAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPiAwKSA/ICcsIGV4cGVjdGVkIG9uZSBvZiB0eXBlIFsnICsgZXhwZWN0ZWRUeXBlcy5qb2luKCcsICcpICsgJ10nOiAnJztcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AnICsgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIHR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHByb3BGdWxsTmFtZSArICcuJyArIGtleSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZSArICdgLidcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCBnZXRQcmVjaXNlVHlwZShjaGVja2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBhbGwga2V5cyBpbiBjYXNlIHNvbWUgYXJlIHJlcXVpcmVkIGJ1dCBtaXNzaW5nIGZyb20gcHJvcHMuXG4gICAgICB2YXIgYWxsS2V5cyA9IGFzc2lnbih7fSwgcHJvcHNbcHJvcE5hbWVdLCBzaGFwZVR5cGVzKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoaGFzKHNoYXBlVHlwZXMsIGtleSkgJiYgdHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgZ2V0UHJlY2lzZVR5cGUoY2hlY2tlcikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAgICdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBrZXkgYCcgKyBrZXkgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nICtcbiAgICAgICAgICAgICdcXG5CYWQgb2JqZWN0OiAnICsgSlNPTi5zdHJpbmdpZnkocHJvcHNbcHJvcE5hbWVdLCBudWxsLCAnICAnKSArXG4gICAgICAgICAgICAnXFxuVmFsaWQga2V5czogJyArIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHNoYXBlVHlwZXMpLCBudWxsLCAnICAnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc05vZGUocHJvcFZhbHVlKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFZhbHVlID09PSBudWxsIHx8IGlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihwcm9wVmFsdWUpO1xuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChwcm9wVmFsdWUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzTm9kZShzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy5cbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcbiAgICAvLyBOYXRpdmUgU3ltYm9sLlxuICAgIGlmIChwcm9wVHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZhbHN5IHZhbHVlIGNhbid0IGJlIGEgU3ltYm9sXG4gICAgaWYgKCFwcm9wVmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddID09PSAnU3ltYm9sJ1xuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIGZvciBub24tc3BlYyBjb21wbGlhbnQgU3ltYm9scyB3aGljaCBhcmUgcG9seWZpbGxlZC5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cbiAgZnVuY3Rpb24gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKSB7XG4gICAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgLy8gT2xkIHdlYmtpdHMgKGF0IGxlYXN0IHVudGlsIEFuZHJvaWQgNC4wKSByZXR1cm4gJ2Z1bmN0aW9uJyByYXRoZXIgdGhhblxuICAgICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cbiAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ3N5bWJvbCc7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cbiAgLy8gU2VlIGBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcmAuXG4gIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJyArIHByb3BWYWx1ZTtcbiAgICB9XG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAocHJvcFR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gJ2RhdGUnO1xuICAgICAgfSBlbHNlIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuICdyZWdleHAnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcG9zdGZpeGVkIHRvIGEgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIHR5cGUuXG4gIC8vIEZvciBleGFtcGxlLCBcInVuZGVmaW5lZFwiIG9yIFwib2YgdHlwZSBhcnJheVwiXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuICdhbiAnICsgdHlwZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxuICBmdW5jdGlvbiBnZXRDbGFzc05hbWUocHJvcFZhbHVlKSB7XG4gICAgaWYgKCFwcm9wVmFsdWUuY29uc3RydWN0b3IgfHwgIXByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7XG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cblxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGNoZWNrUHJvcFR5cGVzO1xuICBSZWFjdFByb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlO1xuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cblxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJykgOiAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50JykgOiAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJykgOiAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJykgOiAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJykgOiAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpIDogMHhlYWNlOyAvLyBUT0RPOiBXZSBkb24ndCB1c2UgQXN5bmNNb2RlIG9yIENvbmN1cnJlbnRNb2RlIGFueW1vcmUuIFRoZXkgd2VyZSB0ZW1wb3Jhcnlcbi8vICh1bnN0YWJsZSkgQVBJcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkLiBDYW4gd2UgcmVtb3ZlIHRoZSBzeW1ib2xzP1xuXG52YXIgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYXN5bmNfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29uY3VycmVudF9tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJykgOiAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJykgOiAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpIDogMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKSA6IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5JykgOiAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmJsb2NrJykgOiAweGVhZDk7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJykgOiAweGVhZDU7XG52YXIgUkVBQ1RfUkVTUE9OREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5yZXNwb25kZXInKSA6IDB4ZWFkNjtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc2NvcGUnKSA6IDB4ZWFkNztcblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCAvLyBOb3RlOiBpdHMgdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgaWYgaXQncyBhIHBvbHlmaWxsLlxuICB0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUkVTUE9OREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfU0NPUEVfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFKTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YXIgJCR0eXBlb2ZUeXBlID0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59IC8vIEFzeW5jTW9kZSBpcyBkZXByZWNhdGVkIGFsb25nIHdpdGggaXNBc3luY01vZGVcblxudmFyIEFzeW5jTW9kZSA9IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbnZhciBDb25jdXJyZW50TW9kZSA9IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xudmFyIENvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSBSRUFDVF9QUk9WSURFUl9UWVBFO1xudmFyIEVsZW1lbnQgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG52YXIgRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG52YXIgRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xudmFyIExhenkgPSBSRUFDVF9MQVpZX1RZUEU7XG52YXIgTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbnZhciBQb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcbnZhciBQcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG52YXIgU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG52YXIgU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7IC8vIEFzeW5jTW9kZSBzaG91bGQgYmUgZGVwcmVjYXRlZFxuXG5mdW5jdGlvbiBpc0FzeW5jTW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxNysuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSS4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHx8IHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0Q29uc3VtZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xufVxuZnVuY3Rpb24gaXNGcmFnbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNMYXp5KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0xBWllfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTWVtbyhvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9NRU1PX1RZUEU7XG59XG5mdW5jdGlvbiBpc1BvcnRhbChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QT1JUQUxfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUHJvZmlsZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3RyaWN0TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xufVxuXG5leHBvcnRzLkFzeW5jTW9kZSA9IEFzeW5jTW9kZTtcbmV4cG9ydHMuQ29uY3VycmVudE1vZGUgPSBDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuICB9KSgpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCIvKipcbiAqIFJlYWN0IFJvdXRlciBET00gdjYuNC4zXG4gKlxuICogQ29weXJpZ2h0IChjKSBSZW1peCBTb2Z0d2FyZSBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFLm1kIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFVOU0FGRV9lbmhhbmNlTWFudWFsUm91dGVPYmplY3RzLCBSb3V0ZXIsIHVzZUhyZWYsIHVzZVJlc29sdmVkUGF0aCwgdXNlTG9jYXRpb24sIFVOU0FGRV9EYXRhUm91dGVyU3RhdGVDb250ZXh0LCB1c2VOYXZpZ2F0ZSwgY3JlYXRlUGF0aCwgVU5TQUZFX05hdmlnYXRpb25Db250ZXh0LCBVTlNBRkVfUm91dGVDb250ZXh0LCB1c2VNYXRjaGVzLCB1c2VOYXZpZ2F0aW9uLCBVTlNBRkVfRGF0YVJvdXRlckNvbnRleHQgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuZXhwb3J0IHsgQWJvcnRlZERlZmVycmVkRXJyb3IsIEF3YWl0LCBNZW1vcnlSb3V0ZXIsIE5hdmlnYXRlLCBOYXZpZ2F0aW9uVHlwZSwgT3V0bGV0LCBSb3V0ZSwgUm91dGVyLCBSb3V0ZXJQcm92aWRlciwgUm91dGVzLCBVTlNBRkVfRGF0YVJvdXRlckNvbnRleHQsIFVOU0FGRV9EYXRhUm91dGVyU3RhdGVDb250ZXh0LCBVTlNBRkVfRGF0YVN0YXRpY1JvdXRlckNvbnRleHQsIFVOU0FGRV9Mb2NhdGlvbkNvbnRleHQsIFVOU0FGRV9OYXZpZ2F0aW9uQ29udGV4dCwgVU5TQUZFX1JvdXRlQ29udGV4dCwgVU5TQUZFX2VuaGFuY2VNYW51YWxSb3V0ZU9iamVjdHMsIGNyZWF0ZU1lbW9yeVJvdXRlciwgY3JlYXRlUGF0aCwgY3JlYXRlUm91dGVzRnJvbUNoaWxkcmVuLCBjcmVhdGVSb3V0ZXNGcm9tRWxlbWVudHMsIGRlZmVyLCBnZW5lcmF0ZVBhdGgsIGlzUm91dGVFcnJvclJlc3BvbnNlLCBqc29uLCBtYXRjaFBhdGgsIG1hdGNoUm91dGVzLCBwYXJzZVBhdGgsIHJlZGlyZWN0LCByZW5kZXJNYXRjaGVzLCByZXNvbHZlUGF0aCwgdXNlQWN0aW9uRGF0YSwgdXNlQXN5bmNFcnJvciwgdXNlQXN5bmNWYWx1ZSwgdXNlSHJlZiwgdXNlSW5Sb3V0ZXJDb250ZXh0LCB1c2VMb2FkZXJEYXRhLCB1c2VMb2NhdGlvbiwgdXNlTWF0Y2gsIHVzZU1hdGNoZXMsIHVzZU5hdmlnYXRlLCB1c2VOYXZpZ2F0aW9uLCB1c2VOYXZpZ2F0aW9uVHlwZSwgdXNlT3V0bGV0LCB1c2VPdXRsZXRDb250ZXh0LCB1c2VQYXJhbXMsIHVzZVJlc29sdmVkUGF0aCwgdXNlUmV2YWxpZGF0b3IsIHVzZVJvdXRlRXJyb3IsIHVzZVJvdXRlTG9hZGVyRGF0YSwgdXNlUm91dGVzIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcbmltcG9ydCB7IGNyZWF0ZVJvdXRlciwgY3JlYXRlQnJvd3Nlckhpc3RvcnksIGNyZWF0ZUhhc2hIaXN0b3J5LCBpbnZhcmlhbnQsIGpvaW5QYXRocyB9IGZyb20gJ0ByZW1peC1ydW4vcm91dGVyJztcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuY29uc3QgZGVmYXVsdE1ldGhvZCA9IFwiZ2V0XCI7XG5jb25zdCBkZWZhdWx0RW5jVHlwZSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCI7XG5mdW5jdGlvbiBpc0h0bWxFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgdHlwZW9mIG9iamVjdC50YWdOYW1lID09PSBcInN0cmluZ1wiO1xufVxuZnVuY3Rpb24gaXNCdXR0b25FbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gaXNIdG1sRWxlbWVudChvYmplY3QpICYmIG9iamVjdC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiYnV0dG9uXCI7XG59XG5mdW5jdGlvbiBpc0Zvcm1FbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gaXNIdG1sRWxlbWVudChvYmplY3QpICYmIG9iamVjdC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiZm9ybVwiO1xufVxuZnVuY3Rpb24gaXNJbnB1dEVsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiBpc0h0bWxFbGVtZW50KG9iamVjdCkgJiYgb2JqZWN0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiO1xufVxuXG5mdW5jdGlvbiBpc01vZGlmaWVkRXZlbnQoZXZlbnQpIHtcbiAgcmV0dXJuICEhKGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRQcm9jZXNzTGlua0NsaWNrKGV2ZW50LCB0YXJnZXQpIHtcbiAgcmV0dXJuIGV2ZW50LmJ1dHRvbiA9PT0gMCAmJiAoIC8vIElnbm9yZSBldmVyeXRoaW5nIGJ1dCBsZWZ0IGNsaWNrc1xuICAhdGFyZ2V0IHx8IHRhcmdldCA9PT0gXCJfc2VsZlwiKSAmJiAvLyBMZXQgYnJvd3NlciBoYW5kbGUgXCJ0YXJnZXQ9X2JsYW5rXCIgZXRjLlxuICAhaXNNb2RpZmllZEV2ZW50KGV2ZW50KSAvLyBJZ25vcmUgY2xpY2tzIHdpdGggbW9kaWZpZXIga2V5c1xuICA7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0IHVzaW5nIHRoZSBnaXZlbiBpbml0aWFsaXplci5cbiAqXG4gKiBUaGlzIGlzIGlkZW50aWNhbCB0byBgbmV3IFVSTFNlYXJjaFBhcmFtcyhpbml0KWAgZXhjZXB0IGl0IGFsc29cbiAqIHN1cHBvcnRzIGFycmF5cyBhcyB2YWx1ZXMgaW4gdGhlIG9iamVjdCBmb3JtIG9mIHRoZSBpbml0aWFsaXplclxuICogaW5zdGVhZCBvZiBqdXN0IHN0cmluZ3MuIFRoaXMgaXMgY29udmVuaWVudCB3aGVuIHlvdSBuZWVkIG11bHRpcGxlXG4gKiB2YWx1ZXMgZm9yIGEgZ2l2ZW4ga2V5LCBidXQgZG9uJ3Qgd2FudCB0byB1c2UgYW4gYXJyYXkgaW5pdGlhbGl6ZXIuXG4gKlxuICogRm9yIGV4YW1wbGUsIGluc3RlYWQgb2Y6XG4gKlxuICogICBsZXQgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhbXG4gKiAgICAgWydzb3J0JywgJ25hbWUnXSxcbiAqICAgICBbJ3NvcnQnLCAncHJpY2UnXVxuICogICBdKTtcbiAqXG4gKiB5b3UgY2FuIGRvOlxuICpcbiAqICAgbGV0IHNlYXJjaFBhcmFtcyA9IGNyZWF0ZVNlYXJjaFBhcmFtcyh7XG4gKiAgICAgc29ydDogWyduYW1lJywgJ3ByaWNlJ11cbiAqICAgfSk7XG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlU2VhcmNoUGFyYW1zKGluaXQpIHtcbiAgaWYgKGluaXQgPT09IHZvaWQgMCkge1xuICAgIGluaXQgPSBcIlwiO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXModHlwZW9mIGluaXQgPT09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheShpbml0KSB8fCBpbml0IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zID8gaW5pdCA6IE9iamVjdC5rZXlzKGluaXQpLnJlZHVjZSgobWVtbywga2V5KSA9PiB7XG4gICAgbGV0IHZhbHVlID0gaW5pdFtrZXldO1xuICAgIHJldHVybiBtZW1vLmNvbmNhdChBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcCh2ID0+IFtrZXksIHZdKSA6IFtba2V5LCB2YWx1ZV1dKTtcbiAgfSwgW10pKTtcbn1cbmZ1bmN0aW9uIGdldFNlYXJjaFBhcmFtc0ZvckxvY2F0aW9uKGxvY2F0aW9uU2VhcmNoLCBkZWZhdWx0U2VhcmNoUGFyYW1zKSB7XG4gIGxldCBzZWFyY2hQYXJhbXMgPSBjcmVhdGVTZWFyY2hQYXJhbXMobG9jYXRpb25TZWFyY2gpO1xuXG4gIGZvciAobGV0IGtleSBvZiBkZWZhdWx0U2VhcmNoUGFyYW1zLmtleXMoKSkge1xuICAgIGlmICghc2VhcmNoUGFyYW1zLmhhcyhrZXkpKSB7XG4gICAgICBkZWZhdWx0U2VhcmNoUGFyYW1zLmdldEFsbChrZXkpLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICBzZWFyY2hQYXJhbXMuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNlYXJjaFBhcmFtcztcbn1cbmZ1bmN0aW9uIGdldEZvcm1TdWJtaXNzaW9uSW5mbyh0YXJnZXQsIGRlZmF1bHRBY3Rpb24sIG9wdGlvbnMpIHtcbiAgbGV0IG1ldGhvZDtcbiAgbGV0IGFjdGlvbjtcbiAgbGV0IGVuY1R5cGU7XG4gIGxldCBmb3JtRGF0YTtcblxuICBpZiAoaXNGb3JtRWxlbWVudCh0YXJnZXQpKSB7XG4gICAgbGV0IHN1Ym1pc3Npb25UcmlnZ2VyID0gb3B0aW9ucy5zdWJtaXNzaW9uVHJpZ2dlcjtcbiAgICBtZXRob2QgPSBvcHRpb25zLm1ldGhvZCB8fCB0YXJnZXQuZ2V0QXR0cmlidXRlKFwibWV0aG9kXCIpIHx8IGRlZmF1bHRNZXRob2Q7XG4gICAgYWN0aW9uID0gb3B0aW9ucy5hY3Rpb24gfHwgdGFyZ2V0LmdldEF0dHJpYnV0ZShcImFjdGlvblwiKSB8fCBkZWZhdWx0QWN0aW9uO1xuICAgIGVuY1R5cGUgPSBvcHRpb25zLmVuY1R5cGUgfHwgdGFyZ2V0LmdldEF0dHJpYnV0ZShcImVuY3R5cGVcIikgfHwgZGVmYXVsdEVuY1R5cGU7XG4gICAgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEodGFyZ2V0KTtcblxuICAgIGlmIChzdWJtaXNzaW9uVHJpZ2dlciAmJiBzdWJtaXNzaW9uVHJpZ2dlci5uYW1lKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoc3VibWlzc2lvblRyaWdnZXIubmFtZSwgc3VibWlzc2lvblRyaWdnZXIudmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0J1dHRvbkVsZW1lbnQodGFyZ2V0KSB8fCBpc0lucHV0RWxlbWVudCh0YXJnZXQpICYmICh0YXJnZXQudHlwZSA9PT0gXCJzdWJtaXRcIiB8fCB0YXJnZXQudHlwZSA9PT0gXCJpbWFnZVwiKSkge1xuICAgIGxldCBmb3JtID0gdGFyZ2V0LmZvcm07XG5cbiAgICBpZiAoZm9ybSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgc3VibWl0IGEgPGJ1dHRvbj4gb3IgPGlucHV0IHR5cGU9XFxcInN1Ym1pdFxcXCI+IHdpdGhvdXQgYSA8Zm9ybT5cIik7XG4gICAgfSAvLyA8YnV0dG9uPi88aW5wdXQgdHlwZT1cInN1Ym1pdFwiPiBtYXkgb3ZlcnJpZGUgYXR0cmlidXRlcyBvZiA8Zm9ybT5cblxuXG4gICAgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QgfHwgdGFyZ2V0LmdldEF0dHJpYnV0ZShcImZvcm1tZXRob2RcIikgfHwgZm9ybS5nZXRBdHRyaWJ1dGUoXCJtZXRob2RcIikgfHwgZGVmYXVsdE1ldGhvZDtcbiAgICBhY3Rpb24gPSBvcHRpb25zLmFjdGlvbiB8fCB0YXJnZXQuZ2V0QXR0cmlidXRlKFwiZm9ybWFjdGlvblwiKSB8fCBmb3JtLmdldEF0dHJpYnV0ZShcImFjdGlvblwiKSB8fCBkZWZhdWx0QWN0aW9uO1xuICAgIGVuY1R5cGUgPSBvcHRpb25zLmVuY1R5cGUgfHwgdGFyZ2V0LmdldEF0dHJpYnV0ZShcImZvcm1lbmN0eXBlXCIpIHx8IGZvcm0uZ2V0QXR0cmlidXRlKFwiZW5jdHlwZVwiKSB8fCBkZWZhdWx0RW5jVHlwZTtcbiAgICBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShmb3JtKTsgLy8gSW5jbHVkZSBuYW1lICsgdmFsdWUgZnJvbSBhIDxidXR0b24+LCBhcHBlbmRpbmcgaW4gY2FzZSB0aGUgYnV0dG9uIG5hbWVcbiAgICAvLyBtYXRjaGVzIGFuIGV4aXN0aW5nIGlucHV0IG5hbWVcblxuICAgIGlmICh0YXJnZXQubmFtZSkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKHRhcmdldC5uYW1lLCB0YXJnZXQudmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0h0bWxFbGVtZW50KHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgc3VibWl0IGVsZW1lbnQgdGhhdCBpcyBub3QgPGZvcm0+LCA8YnV0dG9uPiwgb3IgXCIgKyBcIjxpbnB1dCB0eXBlPVxcXCJzdWJtaXR8aW1hZ2VcXFwiPlwiKTtcbiAgfSBlbHNlIHtcbiAgICBtZXRob2QgPSBvcHRpb25zLm1ldGhvZCB8fCBkZWZhdWx0TWV0aG9kO1xuICAgIGFjdGlvbiA9IG9wdGlvbnMuYWN0aW9uIHx8IGRlZmF1bHRBY3Rpb247XG4gICAgZW5jVHlwZSA9IG9wdGlvbnMuZW5jVHlwZSB8fCBkZWZhdWx0RW5jVHlwZTtcblxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgZm9ybURhdGEgPSB0YXJnZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpIHtcbiAgICAgICAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiB0YXJnZXQpIHtcbiAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRhcmdldCAhPSBudWxsKSB7XG4gICAgICAgIGZvciAobGV0IG5hbWUgb2YgT2JqZWN0LmtleXModGFyZ2V0KSkge1xuICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChuYW1lLCB0YXJnZXRbbmFtZV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHtcbiAgICBwcm90b2NvbCxcbiAgICBob3N0XG4gIH0gPSB3aW5kb3cubG9jYXRpb247XG4gIGxldCB1cmwgPSBuZXcgVVJMKGFjdGlvbiwgcHJvdG9jb2wgKyBcIi8vXCIgKyBob3N0KTtcbiAgcmV0dXJuIHtcbiAgICB1cmwsXG4gICAgbWV0aG9kLFxuICAgIGVuY1R5cGUsXG4gICAgZm9ybURhdGFcbiAgfTtcbn1cblxuY29uc3QgX2V4Y2x1ZGVkID0gW1wib25DbGlja1wiLCBcInJlbGF0aXZlXCIsIFwicmVsb2FkRG9jdW1lbnRcIiwgXCJyZXBsYWNlXCIsIFwic3RhdGVcIiwgXCJ0YXJnZXRcIiwgXCJ0b1wiLCBcInByZXZlbnRTY3JvbGxSZXNldFwiXSxcbiAgICAgIF9leGNsdWRlZDIgPSBbXCJhcmlhLWN1cnJlbnRcIiwgXCJjYXNlU2Vuc2l0aXZlXCIsIFwiY2xhc3NOYW1lXCIsIFwiZW5kXCIsIFwic3R5bGVcIiwgXCJ0b1wiLCBcImNoaWxkcmVuXCJdLFxuICAgICAgX2V4Y2x1ZGVkMyA9IFtcInJlbG9hZERvY3VtZW50XCIsIFwicmVwbGFjZVwiLCBcIm1ldGhvZFwiLCBcImFjdGlvblwiLCBcIm9uU3VibWl0XCIsIFwiZmV0Y2hlcktleVwiLCBcInJvdXRlSWRcIiwgXCJyZWxhdGl2ZVwiXTtcbi8vI3JlZ2lvbiBSb3V0ZXJzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBjcmVhdGVCcm93c2VyUm91dGVyKHJvdXRlcywgb3B0cykge1xuICB2YXIgX3dpbmRvdztcblxuICByZXR1cm4gY3JlYXRlUm91dGVyKHtcbiAgICBiYXNlbmFtZTogb3B0cyA9PSBudWxsID8gdm9pZCAwIDogb3B0cy5iYXNlbmFtZSxcbiAgICBoaXN0b3J5OiBjcmVhdGVCcm93c2VySGlzdG9yeSh7XG4gICAgICB3aW5kb3c6IG9wdHMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdHMud2luZG93XG4gICAgfSksXG4gICAgaHlkcmF0aW9uRGF0YTogKG9wdHMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdHMuaHlkcmF0aW9uRGF0YSkgfHwgKChfd2luZG93ID0gd2luZG93KSA9PSBudWxsID8gdm9pZCAwIDogX3dpbmRvdy5fX3N0YXRpY1JvdXRlckh5ZHJhdGlvbkRhdGEpLFxuICAgIHJvdXRlczogVU5TQUZFX2VuaGFuY2VNYW51YWxSb3V0ZU9iamVjdHMocm91dGVzKVxuICB9KS5pbml0aWFsaXplKCk7XG59XG5mdW5jdGlvbiBjcmVhdGVIYXNoUm91dGVyKHJvdXRlcywgb3B0cykge1xuICB2YXIgX3dpbmRvdzI7XG5cbiAgcmV0dXJuIGNyZWF0ZVJvdXRlcih7XG4gICAgYmFzZW5hbWU6IG9wdHMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdHMuYmFzZW5hbWUsXG4gICAgaGlzdG9yeTogY3JlYXRlSGFzaEhpc3Rvcnkoe1xuICAgICAgd2luZG93OiBvcHRzID09IG51bGwgPyB2b2lkIDAgOiBvcHRzLndpbmRvd1xuICAgIH0pLFxuICAgIGh5ZHJhdGlvbkRhdGE6IChvcHRzID09IG51bGwgPyB2b2lkIDAgOiBvcHRzLmh5ZHJhdGlvbkRhdGEpIHx8ICgoX3dpbmRvdzIgPSB3aW5kb3cpID09IG51bGwgPyB2b2lkIDAgOiBfd2luZG93Mi5fX3N0YXRpY1JvdXRlckh5ZHJhdGlvbkRhdGEpLFxuICAgIHJvdXRlczogVU5TQUZFX2VuaGFuY2VNYW51YWxSb3V0ZU9iamVjdHMocm91dGVzKVxuICB9KS5pbml0aWFsaXplKCk7XG59XG4vKipcbiAqIEEgYDxSb3V0ZXI+YCBmb3IgdXNlIGluIHdlYiBicm93c2Vycy4gUHJvdmlkZXMgdGhlIGNsZWFuZXN0IFVSTHMuXG4gKi9cblxuZnVuY3Rpb24gQnJvd3NlclJvdXRlcihfcmVmKSB7XG4gIGxldCB7XG4gICAgYmFzZW5hbWUsXG4gICAgY2hpbGRyZW4sXG4gICAgd2luZG93XG4gIH0gPSBfcmVmO1xuICBsZXQgaGlzdG9yeVJlZiA9IFJlYWN0LnVzZVJlZigpO1xuXG4gIGlmIChoaXN0b3J5UmVmLmN1cnJlbnQgPT0gbnVsbCkge1xuICAgIGhpc3RvcnlSZWYuY3VycmVudCA9IGNyZWF0ZUJyb3dzZXJIaXN0b3J5KHtcbiAgICAgIHdpbmRvdyxcbiAgICAgIHY1Q29tcGF0OiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICBsZXQgaGlzdG9yeSA9IGhpc3RvcnlSZWYuY3VycmVudDtcbiAgbGV0IFtzdGF0ZSwgc2V0U3RhdGVdID0gUmVhY3QudXNlU3RhdGUoe1xuICAgIGFjdGlvbjogaGlzdG9yeS5hY3Rpb24sXG4gICAgbG9jYXRpb246IGhpc3RvcnkubG9jYXRpb25cbiAgfSk7XG4gIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKSA9PiBoaXN0b3J5Lmxpc3RlbihzZXRTdGF0ZSksIFtoaXN0b3J5XSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZXIsIHtcbiAgICBiYXNlbmFtZTogYmFzZW5hbWUsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIGxvY2F0aW9uOiBzdGF0ZS5sb2NhdGlvbixcbiAgICBuYXZpZ2F0aW9uVHlwZTogc3RhdGUuYWN0aW9uLFxuICAgIG5hdmlnYXRvcjogaGlzdG9yeVxuICB9KTtcbn1cbi8qKlxuICogQSBgPFJvdXRlcj5gIGZvciB1c2UgaW4gd2ViIGJyb3dzZXJzLiBTdG9yZXMgdGhlIGxvY2F0aW9uIGluIHRoZSBoYXNoXG4gKiBwb3J0aW9uIG9mIHRoZSBVUkwgc28gaXQgaXMgbm90IHNlbnQgdG8gdGhlIHNlcnZlci5cbiAqL1xuXG5mdW5jdGlvbiBIYXNoUm91dGVyKF9yZWYyKSB7XG4gIGxldCB7XG4gICAgYmFzZW5hbWUsXG4gICAgY2hpbGRyZW4sXG4gICAgd2luZG93XG4gIH0gPSBfcmVmMjtcbiAgbGV0IGhpc3RvcnlSZWYgPSBSZWFjdC51c2VSZWYoKTtcblxuICBpZiAoaGlzdG9yeVJlZi5jdXJyZW50ID09IG51bGwpIHtcbiAgICBoaXN0b3J5UmVmLmN1cnJlbnQgPSBjcmVhdGVIYXNoSGlzdG9yeSh7XG4gICAgICB3aW5kb3csXG4gICAgICB2NUNvbXBhdDogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgbGV0IGhpc3RvcnkgPSBoaXN0b3J5UmVmLmN1cnJlbnQ7XG4gIGxldCBbc3RhdGUsIHNldFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKHtcbiAgICBhY3Rpb246IGhpc3RvcnkuYWN0aW9uLFxuICAgIGxvY2F0aW9uOiBoaXN0b3J5LmxvY2F0aW9uXG4gIH0pO1xuICBSZWFjdC51c2VMYXlvdXRFZmZlY3QoKCkgPT4gaGlzdG9yeS5saXN0ZW4oc2V0U3RhdGUpLCBbaGlzdG9yeV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVyLCB7XG4gICAgYmFzZW5hbWU6IGJhc2VuYW1lLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBsb2NhdGlvbjogc3RhdGUubG9jYXRpb24sXG4gICAgbmF2aWdhdGlvblR5cGU6IHN0YXRlLmFjdGlvbixcbiAgICBuYXZpZ2F0b3I6IGhpc3RvcnlcbiAgfSk7XG59XG4vKipcbiAqIEEgYDxSb3V0ZXI+YCB0aGF0IGFjY2VwdHMgYSBwcmUtaW5zdGFudGlhdGVkIGhpc3Rvcnkgb2JqZWN0LiBJdCdzIGltcG9ydGFudFxuICogdG8gbm90ZSB0aGF0IHVzaW5nIHlvdXIgb3duIGhpc3Rvcnkgb2JqZWN0IGlzIGhpZ2hseSBkaXNjb3VyYWdlZCBhbmQgbWF5IGFkZFxuICogdHdvIHZlcnNpb25zIG9mIHRoZSBoaXN0b3J5IGxpYnJhcnkgdG8geW91ciBidW5kbGVzIHVubGVzcyB5b3UgdXNlIHRoZSBzYW1lXG4gKiB2ZXJzaW9uIG9mIHRoZSBoaXN0b3J5IGxpYnJhcnkgdGhhdCBSZWFjdCBSb3V0ZXIgdXNlcyBpbnRlcm5hbGx5LlxuICovXG5cbmZ1bmN0aW9uIEhpc3RvcnlSb3V0ZXIoX3JlZjMpIHtcbiAgbGV0IHtcbiAgICBiYXNlbmFtZSxcbiAgICBjaGlsZHJlbixcbiAgICBoaXN0b3J5XG4gIH0gPSBfcmVmMztcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgYWN0aW9uOiBoaXN0b3J5LmFjdGlvbixcbiAgICBsb2NhdGlvbjogaGlzdG9yeS5sb2NhdGlvblxuICB9KTtcbiAgUmVhY3QudXNlTGF5b3V0RWZmZWN0KCgpID0+IGhpc3RvcnkubGlzdGVuKHNldFN0YXRlKSwgW2hpc3RvcnldKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlciwge1xuICAgIGJhc2VuYW1lOiBiYXNlbmFtZSxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgbG9jYXRpb246IHN0YXRlLmxvY2F0aW9uLFxuICAgIG5hdmlnYXRpb25UeXBlOiBzdGF0ZS5hY3Rpb24sXG4gICAgbmF2aWdhdG9yOiBoaXN0b3J5XG4gIH0pO1xufVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIEhpc3RvcnlSb3V0ZXIuZGlzcGxheU5hbWUgPSBcInVuc3RhYmxlX0hpc3RvcnlSb3V0ZXJcIjtcbn1cbi8qKlxuICogVGhlIHB1YmxpYyBBUEkgZm9yIHJlbmRlcmluZyBhIGhpc3RvcnktYXdhcmUgPGE+LlxuICovXG5cbmNvbnN0IExpbmsgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBMaW5rV2l0aFJlZihfcmVmNCwgcmVmKSB7XG4gIGxldCB7XG4gICAgb25DbGljayxcbiAgICByZWxhdGl2ZSxcbiAgICByZWxvYWREb2N1bWVudCxcbiAgICByZXBsYWNlLFxuICAgIHN0YXRlLFxuICAgIHRhcmdldCxcbiAgICB0byxcbiAgICBwcmV2ZW50U2Nyb2xsUmVzZXRcbiAgfSA9IF9yZWY0LFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWY0LCBfZXhjbHVkZWQpO1xuXG4gIGxldCBocmVmID0gdXNlSHJlZih0bywge1xuICAgIHJlbGF0aXZlXG4gIH0pO1xuICBsZXQgaW50ZXJuYWxPbkNsaWNrID0gdXNlTGlua0NsaWNrSGFuZGxlcih0bywge1xuICAgIHJlcGxhY2UsXG4gICAgc3RhdGUsXG4gICAgdGFyZ2V0LFxuICAgIHByZXZlbnRTY3JvbGxSZXNldCxcbiAgICByZWxhdGl2ZVxuICB9KTtcblxuICBmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCkge1xuICAgIGlmIChvbkNsaWNrKSBvbkNsaWNrKGV2ZW50KTtcblxuICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgaW50ZXJuYWxPbkNsaWNrKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIC8qI19fUFVSRV9fKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganN4LWExMXkvYW5jaG9yLWhhcy1jb250ZW50XG4gICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgX2V4dGVuZHMoe30sIHJlc3QsIHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICBvbkNsaWNrOiByZWxvYWREb2N1bWVudCA/IG9uQ2xpY2sgOiBoYW5kbGVDbGljayxcbiAgICAgIHJlZjogcmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXRcbiAgICB9KSlcbiAgKTtcbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIExpbmsuZGlzcGxheU5hbWUgPSBcIkxpbmtcIjtcbn1cbi8qKlxuICogQSA8TGluaz4gd3JhcHBlciB0aGF0IGtub3dzIGlmIGl0J3MgXCJhY3RpdmVcIiBvciBub3QuXG4gKi9cblxuXG5jb25zdCBOYXZMaW5rID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTmF2TGlua1dpdGhSZWYoX3JlZjUsIHJlZikge1xuICBsZXQge1xuICAgIFwiYXJpYS1jdXJyZW50XCI6IGFyaWFDdXJyZW50UHJvcCA9IFwicGFnZVwiLFxuICAgIGNhc2VTZW5zaXRpdmUgPSBmYWxzZSxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVByb3AgPSBcIlwiLFxuICAgIGVuZCA9IGZhbHNlLFxuICAgIHN0eWxlOiBzdHlsZVByb3AsXG4gICAgdG8sXG4gICAgY2hpbGRyZW5cbiAgfSA9IF9yZWY1LFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWY1LCBfZXhjbHVkZWQyKTtcblxuICBsZXQgcGF0aCA9IHVzZVJlc29sdmVkUGF0aCh0bywge1xuICAgIHJlbGF0aXZlOiByZXN0LnJlbGF0aXZlXG4gIH0pO1xuICBsZXQgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuICBsZXQgcm91dGVyU3RhdGUgPSBSZWFjdC51c2VDb250ZXh0KFVOU0FGRV9EYXRhUm91dGVyU3RhdGVDb250ZXh0KTtcbiAgbGV0IHRvUGF0aG5hbWUgPSBwYXRoLnBhdGhuYW1lO1xuICBsZXQgbG9jYXRpb25QYXRobmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xuICBsZXQgbmV4dExvY2F0aW9uUGF0aG5hbWUgPSByb3V0ZXJTdGF0ZSAmJiByb3V0ZXJTdGF0ZS5uYXZpZ2F0aW9uICYmIHJvdXRlclN0YXRlLm5hdmlnYXRpb24ubG9jYXRpb24gPyByb3V0ZXJTdGF0ZS5uYXZpZ2F0aW9uLmxvY2F0aW9uLnBhdGhuYW1lIDogbnVsbDtcblxuICBpZiAoIWNhc2VTZW5zaXRpdmUpIHtcbiAgICBsb2NhdGlvblBhdGhuYW1lID0gbG9jYXRpb25QYXRobmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIG5leHRMb2NhdGlvblBhdGhuYW1lID0gbmV4dExvY2F0aW9uUGF0aG5hbWUgPyBuZXh0TG9jYXRpb25QYXRobmFtZS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbiAgICB0b1BhdGhuYW1lID0gdG9QYXRobmFtZS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgbGV0IGlzQWN0aXZlID0gbG9jYXRpb25QYXRobmFtZSA9PT0gdG9QYXRobmFtZSB8fCAhZW5kICYmIGxvY2F0aW9uUGF0aG5hbWUuc3RhcnRzV2l0aCh0b1BhdGhuYW1lKSAmJiBsb2NhdGlvblBhdGhuYW1lLmNoYXJBdCh0b1BhdGhuYW1lLmxlbmd0aCkgPT09IFwiL1wiO1xuICBsZXQgaXNQZW5kaW5nID0gbmV4dExvY2F0aW9uUGF0aG5hbWUgIT0gbnVsbCAmJiAobmV4dExvY2F0aW9uUGF0aG5hbWUgPT09IHRvUGF0aG5hbWUgfHwgIWVuZCAmJiBuZXh0TG9jYXRpb25QYXRobmFtZS5zdGFydHNXaXRoKHRvUGF0aG5hbWUpICYmIG5leHRMb2NhdGlvblBhdGhuYW1lLmNoYXJBdCh0b1BhdGhuYW1lLmxlbmd0aCkgPT09IFwiL1wiKTtcbiAgbGV0IGFyaWFDdXJyZW50ID0gaXNBY3RpdmUgPyBhcmlhQ3VycmVudFByb3AgOiB1bmRlZmluZWQ7XG4gIGxldCBjbGFzc05hbWU7XG5cbiAgaWYgKHR5cGVvZiBjbGFzc05hbWVQcm9wID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWVQcm9wKHtcbiAgICAgIGlzQWN0aXZlLFxuICAgICAgaXNQZW5kaW5nXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgdGhlIGNsYXNzTmFtZSBwcm9wIGlzIG5vdCBhIGZ1bmN0aW9uLCB3ZSB1c2UgYSBkZWZhdWx0IGBhY3RpdmVgXG4gICAgLy8gY2xhc3MgZm9yIDxOYXZMaW5rIC8+cyB0aGF0IGFyZSBhY3RpdmUuIEluIHY1IGBhY3RpdmVgIHdhcyB0aGUgZGVmYXVsdFxuICAgIC8vIHZhbHVlIGZvciBgYWN0aXZlQ2xhc3NOYW1lYCwgYnV0IHdlIGFyZSByZW1vdmluZyB0aGF0IEFQSSBhbmQgY2FuIHN0aWxsXG4gICAgLy8gdXNlIHRoZSBvbGQgZGVmYXVsdCBiZWhhdmlvciBmb3IgYSBjbGVhbmVyIHVwZ3JhZGUgcGF0aCBhbmQga2VlcCB0aGVcbiAgICAvLyBzaW1wbGUgc3R5bGluZyBydWxlcyB3b3JraW5nIGFzIHRoZXkgY3VycmVudGx5IGRvLlxuICAgIGNsYXNzTmFtZSA9IFtjbGFzc05hbWVQcm9wLCBpc0FjdGl2ZSA/IFwiYWN0aXZlXCIgOiBudWxsLCBpc1BlbmRpbmcgPyBcInBlbmRpbmdcIiA6IG51bGxdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcbiAgfVxuXG4gIGxldCBzdHlsZSA9IHR5cGVvZiBzdHlsZVByb3AgPT09IFwiZnVuY3Rpb25cIiA/IHN0eWxlUHJvcCh7XG4gICAgaXNBY3RpdmUsXG4gICAgaXNQZW5kaW5nXG4gIH0pIDogc3R5bGVQcm9wO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTGluaywgX2V4dGVuZHMoe30sIHJlc3QsIHtcbiAgICBcImFyaWEtY3VycmVudFwiOiBhcmlhQ3VycmVudCxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICByZWY6IHJlZixcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgdG86IHRvXG4gIH0pLCB0eXBlb2YgY2hpbGRyZW4gPT09IFwiZnVuY3Rpb25cIiA/IGNoaWxkcmVuKHtcbiAgICBpc0FjdGl2ZSxcbiAgICBpc1BlbmRpbmdcbiAgfSkgOiBjaGlsZHJlbik7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICBOYXZMaW5rLmRpc3BsYXlOYW1lID0gXCJOYXZMaW5rXCI7XG59XG4vKipcbiAqIEEgYEByZW1peC1ydW4vcm91dGVyYC1hd2FyZSBgPGZvcm0+YC4gSXQgYmVoYXZlcyBsaWtlIGEgbm9ybWFsIGZvcm0gZXhjZXB0XG4gKiB0aGF0IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzZXJ2ZXIgaXMgd2l0aCBgZmV0Y2hgIGluc3RlYWQgb2YgbmV3IGRvY3VtZW50XG4gKiByZXF1ZXN0cywgYWxsb3dpbmcgY29tcG9uZW50cyB0byBhZGQgbmljZXIgVVggdG8gdGhlIHBhZ2UgYXMgdGhlIGZvcm0gaXNcbiAqIHN1Ym1pdHRlZCBhbmQgcmV0dXJucyB3aXRoIGRhdGEuXG4gKi9cblxuXG5jb25zdCBGb3JtID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZvcm1JbXBsLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICByZWY6IHJlZlxuICB9KSk7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICBGb3JtLmRpc3BsYXlOYW1lID0gXCJGb3JtXCI7XG59XG5cbmNvbnN0IEZvcm1JbXBsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoKF9yZWY2LCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgbGV0IHtcbiAgICByZWxvYWREb2N1bWVudCxcbiAgICByZXBsYWNlLFxuICAgIG1ldGhvZCA9IGRlZmF1bHRNZXRob2QsXG4gICAgYWN0aW9uLFxuICAgIG9uU3VibWl0LFxuICAgIGZldGNoZXJLZXksXG4gICAgcm91dGVJZCxcbiAgICByZWxhdGl2ZVxuICB9ID0gX3JlZjYsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWY2LCBfZXhjbHVkZWQzKTtcblxuICBsZXQgc3VibWl0ID0gdXNlU3VibWl0SW1wbChmZXRjaGVyS2V5LCByb3V0ZUlkKTtcbiAgbGV0IGZvcm1NZXRob2QgPSBtZXRob2QudG9Mb3dlckNhc2UoKSA9PT0gXCJnZXRcIiA/IFwiZ2V0XCIgOiBcInBvc3RcIjtcbiAgbGV0IGZvcm1BY3Rpb24gPSB1c2VGb3JtQWN0aW9uKGFjdGlvbiwge1xuICAgIHJlbGF0aXZlXG4gIH0pO1xuXG4gIGxldCBzdWJtaXRIYW5kbGVyID0gZXZlbnQgPT4ge1xuICAgIG9uU3VibWl0ICYmIG9uU3VibWl0KGV2ZW50KTtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgbGV0IHN1Ym1pdHRlciA9IGV2ZW50Lm5hdGl2ZUV2ZW50LnN1Ym1pdHRlcjtcbiAgICBzdWJtaXQoc3VibWl0dGVyIHx8IGV2ZW50LmN1cnJlbnRUYXJnZXQsIHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHJlcGxhY2UsXG4gICAgICByZWxhdGl2ZVxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImZvcm1cIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogZm9yd2FyZGVkUmVmLFxuICAgIG1ldGhvZDogZm9ybU1ldGhvZCxcbiAgICBhY3Rpb246IGZvcm1BY3Rpb24sXG4gICAgb25TdWJtaXQ6IHJlbG9hZERvY3VtZW50ID8gb25TdWJtaXQgOiBzdWJtaXRIYW5kbGVyXG4gIH0sIHByb3BzKSk7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICBGb3JtLmRpc3BsYXlOYW1lID0gXCJGb3JtXCI7XG59XG4vKipcbiAqIFRoaXMgY29tcG9uZW50IHdpbGwgZW11bGF0ZSB0aGUgYnJvd3NlcidzIHNjcm9sbCByZXN0b3JhdGlvbiBvbiBsb2NhdGlvblxuICogY2hhbmdlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIFNjcm9sbFJlc3RvcmF0aW9uKF9yZWY3KSB7XG4gIGxldCB7XG4gICAgZ2V0S2V5LFxuICAgIHN0b3JhZ2VLZXlcbiAgfSA9IF9yZWY3O1xuICB1c2VTY3JvbGxSZXN0b3JhdGlvbih7XG4gICAgZ2V0S2V5LFxuICAgIHN0b3JhZ2VLZXlcbiAgfSk7XG4gIHJldHVybiBudWxsO1xufVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIFNjcm9sbFJlc3RvcmF0aW9uLmRpc3BsYXlOYW1lID0gXCJTY3JvbGxSZXN0b3JhdGlvblwiO1xufSAvLyNlbmRyZWdpb25cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyNyZWdpb24gSG9va3Ncbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxudmFyIERhdGFSb3V0ZXJIb29rO1xuXG4oZnVuY3Rpb24gKERhdGFSb3V0ZXJIb29rKSB7XG4gIERhdGFSb3V0ZXJIb29rW1wiVXNlU2Nyb2xsUmVzdG9yYXRpb25cIl0gPSBcInVzZVNjcm9sbFJlc3RvcmF0aW9uXCI7XG4gIERhdGFSb3V0ZXJIb29rW1wiVXNlU3VibWl0SW1wbFwiXSA9IFwidXNlU3VibWl0SW1wbFwiO1xuICBEYXRhUm91dGVySG9va1tcIlVzZUZldGNoZXJcIl0gPSBcInVzZUZldGNoZXJcIjtcbn0pKERhdGFSb3V0ZXJIb29rIHx8IChEYXRhUm91dGVySG9vayA9IHt9KSk7XG5cbnZhciBEYXRhUm91dGVyU3RhdGVIb29rO1xuXG4oZnVuY3Rpb24gKERhdGFSb3V0ZXJTdGF0ZUhvb2spIHtcbiAgRGF0YVJvdXRlclN0YXRlSG9va1tcIlVzZUZldGNoZXJzXCJdID0gXCJ1c2VGZXRjaGVyc1wiO1xuICBEYXRhUm91dGVyU3RhdGVIb29rW1wiVXNlU2Nyb2xsUmVzdG9yYXRpb25cIl0gPSBcInVzZVNjcm9sbFJlc3RvcmF0aW9uXCI7XG59KShEYXRhUm91dGVyU3RhdGVIb29rIHx8IChEYXRhUm91dGVyU3RhdGVIb29rID0ge30pKTtcblxuZnVuY3Rpb24gZ2V0RGF0YVJvdXRlckNvbnNvbGVFcnJvcihob29rTmFtZSkge1xuICByZXR1cm4gaG9va05hbWUgKyBcIiBtdXN0IGJlIHVzZWQgd2l0aGluIGEgZGF0YSByb3V0ZXIuICBTZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZW4vbWFpbi9yb3V0ZXJzL3BpY2tpbmctYS1yb3V0ZXIuXCI7XG59XG5cbmZ1bmN0aW9uIHVzZURhdGFSb3V0ZXJDb250ZXh0KGhvb2tOYW1lKSB7XG4gIGxldCBjdHggPSBSZWFjdC51c2VDb250ZXh0KFVOU0FGRV9EYXRhUm91dGVyQ29udGV4dCk7XG4gICFjdHggPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIGdldERhdGFSb3V0ZXJDb25zb2xlRXJyb3IoaG9va05hbWUpKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIHJldHVybiBjdHg7XG59XG5cbmZ1bmN0aW9uIHVzZURhdGFSb3V0ZXJTdGF0ZShob29rTmFtZSkge1xuICBsZXQgc3RhdGUgPSBSZWFjdC51c2VDb250ZXh0KFVOU0FGRV9EYXRhUm91dGVyU3RhdGVDb250ZXh0KTtcbiAgIXN0YXRlID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBnZXREYXRhUm91dGVyQ29uc29sZUVycm9yKGhvb2tOYW1lKSkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICByZXR1cm4gc3RhdGU7XG59XG4vKipcbiAqIEhhbmRsZXMgdGhlIGNsaWNrIGJlaGF2aW9yIGZvciByb3V0ZXIgYDxMaW5rPmAgY29tcG9uZW50cy4gVGhpcyBpcyB1c2VmdWwgaWZcbiAqIHlvdSBuZWVkIHRvIGNyZWF0ZSBjdXN0b20gYDxMaW5rPmAgY29tcG9uZW50cyB3aXRoIHRoZSBzYW1lIGNsaWNrIGJlaGF2aW9yIHdlXG4gKiB1c2UgaW4gb3VyIGV4cG9ydGVkIGA8TGluaz5gLlxuICovXG5cblxuZnVuY3Rpb24gdXNlTGlua0NsaWNrSGFuZGxlcih0bywgX3RlbXApIHtcbiAgbGV0IHtcbiAgICB0YXJnZXQsXG4gICAgcmVwbGFjZTogcmVwbGFjZVByb3AsXG4gICAgc3RhdGUsXG4gICAgcHJldmVudFNjcm9sbFJlc2V0LFxuICAgIHJlbGF0aXZlXG4gIH0gPSBfdGVtcCA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDtcbiAgbGV0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcbiAgbGV0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgbGV0IHBhdGggPSB1c2VSZXNvbHZlZFBhdGgodG8sIHtcbiAgICByZWxhdGl2ZVxuICB9KTtcbiAgcmV0dXJuIFJlYWN0LnVzZUNhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICBpZiAoc2hvdWxkUHJvY2Vzc0xpbmtDbGljayhldmVudCwgdGFyZ2V0KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gSWYgdGhlIFVSTCBoYXNuJ3QgY2hhbmdlZCwgYSByZWd1bGFyIDxhPiB3aWxsIGRvIGEgcmVwbGFjZSBpbnN0ZWFkIG9mXG4gICAgICAvLyBhIHB1c2gsIHNvIGRvIHRoZSBzYW1lIGhlcmUgdW5sZXNzIHRoZSByZXBsYWNlIHByb3AgaXMgZXhwbGljaXRseSBzZXRcblxuICAgICAgbGV0IHJlcGxhY2UgPSByZXBsYWNlUHJvcCAhPT0gdW5kZWZpbmVkID8gcmVwbGFjZVByb3AgOiBjcmVhdGVQYXRoKGxvY2F0aW9uKSA9PT0gY3JlYXRlUGF0aChwYXRoKTtcbiAgICAgIG5hdmlnYXRlKHRvLCB7XG4gICAgICAgIHJlcGxhY2UsXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBwcmV2ZW50U2Nyb2xsUmVzZXQsXG4gICAgICAgIHJlbGF0aXZlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtsb2NhdGlvbiwgbmF2aWdhdGUsIHBhdGgsIHJlcGxhY2VQcm9wLCBzdGF0ZSwgdGFyZ2V0LCB0bywgcHJldmVudFNjcm9sbFJlc2V0LCByZWxhdGl2ZV0pO1xufVxuLyoqXG4gKiBBIGNvbnZlbmllbnQgd3JhcHBlciBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBzZWFyY2ggcGFyYW1ldGVycyB2aWEgdGhlXG4gKiBVUkxTZWFyY2hQYXJhbXMgaW50ZXJmYWNlLlxuICovXG5cbmZ1bmN0aW9uIHVzZVNlYXJjaFBhcmFtcyhkZWZhdWx0SW5pdCkge1xuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09IFwidW5kZWZpbmVkXCIsIFwiWW91IGNhbm5vdCB1c2UgdGhlIGB1c2VTZWFyY2hQYXJhbXNgIGhvb2sgaW4gYSBicm93c2VyIHRoYXQgZG9lcyBub3QgXCIgKyBcInN1cHBvcnQgdGhlIFVSTFNlYXJjaFBhcmFtcyBBUEkuIElmIHlvdSBuZWVkIHRvIHN1cHBvcnQgSW50ZXJuZXQgXCIgKyBcIkV4cGxvcmVyIDExLCB3ZSByZWNvbW1lbmQgeW91IGxvYWQgYSBwb2x5ZmlsbCBzdWNoIGFzIFwiICsgXCJodHRwczovL2dpdGh1Yi5jb20vdW5nYXAvdXJsLXNlYXJjaC1wYXJhbXNcXG5cXG5cIiArIFwiSWYgeW91J3JlIHVuc3VyZSBob3cgdG8gbG9hZCBwb2x5ZmlsbHMsIHdlIHJlY29tbWVuZCB5b3UgY2hlY2sgb3V0IFwiICsgXCJodHRwczovL3BvbHlmaWxsLmlvL3YzLyB3aGljaCBwcm92aWRlcyBzb21lIHJlY29tbWVuZGF0aW9ucyBhYm91dCBob3cgXCIgKyBcInRvIGxvYWQgcG9seWZpbGxzIG9ubHkgZm9yIHVzZXJzIHRoYXQgbmVlZCB0aGVtLCBpbnN0ZWFkIG9mIGZvciBldmVyeSBcIiArIFwidXNlci5cIikgOiB2b2lkIDA7XG4gIGxldCBkZWZhdWx0U2VhcmNoUGFyYW1zUmVmID0gUmVhY3QudXNlUmVmKGNyZWF0ZVNlYXJjaFBhcmFtcyhkZWZhdWx0SW5pdCkpO1xuICBsZXQgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuICBsZXQgc2VhcmNoUGFyYW1zID0gUmVhY3QudXNlTWVtbygoKSA9PiBnZXRTZWFyY2hQYXJhbXNGb3JMb2NhdGlvbihsb2NhdGlvbi5zZWFyY2gsIGRlZmF1bHRTZWFyY2hQYXJhbXNSZWYuY3VycmVudCksIFtsb2NhdGlvbi5zZWFyY2hdKTtcbiAgbGV0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcbiAgbGV0IHNldFNlYXJjaFBhcmFtcyA9IFJlYWN0LnVzZUNhbGxiYWNrKChuZXh0SW5pdCwgbmF2aWdhdGVPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgbmV3U2VhcmNoUGFyYW1zID0gY3JlYXRlU2VhcmNoUGFyYW1zKHR5cGVvZiBuZXh0SW5pdCA9PT0gXCJmdW5jdGlvblwiID8gbmV4dEluaXQoc2VhcmNoUGFyYW1zKSA6IG5leHRJbml0KTtcbiAgICBuYXZpZ2F0ZShcIj9cIiArIG5ld1NlYXJjaFBhcmFtcywgbmF2aWdhdGVPcHRpb25zKTtcbiAgfSwgW25hdmlnYXRlLCBzZWFyY2hQYXJhbXNdKTtcbiAgcmV0dXJuIFtzZWFyY2hQYXJhbXMsIHNldFNlYXJjaFBhcmFtc107XG59XG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIHByb2dyYW1tYXRpY2FsbHkgc3VibWl0IGEgZm9ybSAob3JcbiAqIHNvbWUgYXJiaXRyYXJ5IGRhdGEpIHRvIHRoZSBzZXJ2ZXIuXG4gKi9cblxuZnVuY3Rpb24gdXNlU3VibWl0KCkge1xuICByZXR1cm4gdXNlU3VibWl0SW1wbCgpO1xufVxuXG5mdW5jdGlvbiB1c2VTdWJtaXRJbXBsKGZldGNoZXJLZXksIHJvdXRlSWQpIHtcbiAgbGV0IHtcbiAgICByb3V0ZXJcbiAgfSA9IHVzZURhdGFSb3V0ZXJDb250ZXh0KERhdGFSb3V0ZXJIb29rLlVzZVN1Ym1pdEltcGwpO1xuICBsZXQgZGVmYXVsdEFjdGlvbiA9IHVzZUZvcm1BY3Rpb24oKTtcbiAgcmV0dXJuIFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uICh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IGFyZSBjYWxsaW5nIHN1Ym1pdCBkdXJpbmcgdGhlIHNlcnZlciByZW5kZXIuIFwiICsgXCJUcnkgY2FsbGluZyBzdWJtaXQgd2l0aGluIGEgYHVzZUVmZmVjdGAgb3IgY2FsbGJhY2sgaW5zdGVhZC5cIik7XG4gICAgfVxuXG4gICAgbGV0IHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIGVuY1R5cGUsXG4gICAgICBmb3JtRGF0YSxcbiAgICAgIHVybFxuICAgIH0gPSBnZXRGb3JtU3VibWlzc2lvbkluZm8odGFyZ2V0LCBkZWZhdWx0QWN0aW9uLCBvcHRpb25zKTtcbiAgICBsZXQgaHJlZiA9IHVybC5wYXRobmFtZSArIHVybC5zZWFyY2g7XG4gICAgbGV0IG9wdHMgPSB7XG4gICAgICByZXBsYWNlOiBvcHRpb25zLnJlcGxhY2UsXG4gICAgICBmb3JtRGF0YSxcbiAgICAgIGZvcm1NZXRob2Q6IG1ldGhvZCxcbiAgICAgIGZvcm1FbmNUeXBlOiBlbmNUeXBlXG4gICAgfTtcblxuICAgIGlmIChmZXRjaGVyS2V5KSB7XG4gICAgICAhKHJvdXRlSWQgIT0gbnVsbCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiTm8gcm91dGVJZCBhdmFpbGFibGUgZm9yIHVzZUZldGNoZXIoKVwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgICByb3V0ZXIuZmV0Y2goZmV0Y2hlcktleSwgcm91dGVJZCwgaHJlZiwgb3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvdXRlci5uYXZpZ2F0ZShocmVmLCBvcHRzKTtcbiAgICB9XG4gIH0sIFtkZWZhdWx0QWN0aW9uLCByb3V0ZXIsIGZldGNoZXJLZXksIHJvdXRlSWRdKTtcbn1cblxuZnVuY3Rpb24gdXNlRm9ybUFjdGlvbihhY3Rpb24sIF90ZW1wMikge1xuICBsZXQge1xuICAgIHJlbGF0aXZlXG4gIH0gPSBfdGVtcDIgPT09IHZvaWQgMCA/IHt9IDogX3RlbXAyO1xuICBsZXQge1xuICAgIGJhc2VuYW1lXG4gIH0gPSBSZWFjdC51c2VDb250ZXh0KFVOU0FGRV9OYXZpZ2F0aW9uQ29udGV4dCk7XG4gIGxldCByb3V0ZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFVOU0FGRV9Sb3V0ZUNvbnRleHQpO1xuICAhcm91dGVDb250ZXh0ID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcInVzZUZvcm1BY3Rpb24gbXVzdCBiZSB1c2VkIGluc2lkZSBhIFJvdXRlQ29udGV4dFwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIGxldCBbbWF0Y2hdID0gcm91dGVDb250ZXh0Lm1hdGNoZXMuc2xpY2UoLTEpO1xuICBsZXQgcmVzb2x2ZWRBY3Rpb24gPSBhY3Rpb24gIT0gbnVsbCA/IGFjdGlvbiA6IFwiLlwiOyAvLyBTaGFsbG93IGNsb25lIHBhdGggc28gd2UgY2FuIG1vZGlmeSBpdCBiZWxvdywgb3RoZXJ3aXNlIHdlIG1vZGlmeSB0aGVcbiAgLy8gb2JqZWN0IHJlZmVyZW5jZWQgYnkgdXNlTWVtbyBpbnNpZGUgdXNlUmVzb2x2ZWRQYXRoXG5cbiAgbGV0IHBhdGggPSBfZXh0ZW5kcyh7fSwgdXNlUmVzb2x2ZWRQYXRoKHJlc29sdmVkQWN0aW9uLCB7XG4gICAgcmVsYXRpdmVcbiAgfSkpOyAvLyBQcmV2aW91c2x5IHdlIHNldCB0aGUgZGVmYXVsdCBhY3Rpb24gdG8gXCIuXCIuIFRoZSBwcm9ibGVtIHdpdGggdGhpcyBpcyB0aGF0XG4gIC8vIGB1c2VSZXNvbHZlZFBhdGgoXCIuXCIpYCBleGNsdWRlcyBzZWFyY2ggcGFyYW1zIGFuZCB0aGUgaGFzaCBvZiB0aGUgcmVzb2x2ZWRcbiAgLy8gVVJMLiBUaGlzIGlzIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBvZiB3aGVuIFwiLlwiIGlzIHNwZWNpZmljYWxseSBwcm92aWRlZCBhc1xuICAvLyB0aGUgZm9ybSBhY3Rpb24sIGJ1dCBpbmNvbnNpc3RlbnQgdy8gYnJvd3NlcnMgd2hlbiB0aGUgYWN0aW9uIGlzIG9taXR0ZWQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yZW1peC1ydW4vcmVtaXgvaXNzdWVzLzkyN1xuXG5cbiAgbGV0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcblxuICBpZiAoYWN0aW9uID09IG51bGwpIHtcbiAgICAvLyBTYWZlIHRvIHdyaXRlIHRvIHRoZXNlIGRpcmVjdGx5IGhlcmUgc2luY2UgaWYgYWN0aW9uIHdhcyB1bmRlZmluZWQsIHdlXG4gICAgLy8gd291bGQgaGF2ZSBjYWxsZWQgdXNlUmVzb2x2ZWRQYXRoKFwiLlwiKSB3aGljaCB3aWxsIG5ldmVyIGluY2x1ZGUgYSBzZWFyY2hcbiAgICAvLyBvciBoYXNoXG4gICAgcGF0aC5zZWFyY2ggPSBsb2NhdGlvbi5zZWFyY2g7XG4gICAgcGF0aC5oYXNoID0gbG9jYXRpb24uaGFzaDsgLy8gV2hlbiBncmFiYmluZyBzZWFyY2ggcGFyYW1zIGZyb20gdGhlIFVSTCwgcmVtb3ZlIHRoZSBhdXRvbWF0aWNhbGx5XG4gICAgLy8gaW5zZXJ0ZWQgP2luZGV4IHBhcmFtIHNvIHdlIG1hdGNoIHRoZSB1c2VSZXNvbHZlZFBhdGggc2VhcmNoIGJlaGF2aW9yXG4gICAgLy8gd2hpY2ggd291bGQgbm90IGluY2x1ZGUgP2luZGV4XG5cbiAgICBpZiAobWF0Y2gucm91dGUuaW5kZXgpIHtcbiAgICAgIGxldCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhdGguc2VhcmNoKTtcbiAgICAgIHBhcmFtcy5kZWxldGUoXCJpbmRleFwiKTtcbiAgICAgIHBhdGguc2VhcmNoID0gcGFyYW1zLnRvU3RyaW5nKCkgPyBcIj9cIiArIHBhcmFtcy50b1N0cmluZygpIDogXCJcIjtcbiAgICB9XG4gIH1cblxuICBpZiAoKCFhY3Rpb24gfHwgYWN0aW9uID09PSBcIi5cIikgJiYgbWF0Y2gucm91dGUuaW5kZXgpIHtcbiAgICBwYXRoLnNlYXJjaCA9IHBhdGguc2VhcmNoID8gcGF0aC5zZWFyY2gucmVwbGFjZSgvXlxcPy8sIFwiP2luZGV4JlwiKSA6IFwiP2luZGV4XCI7XG4gIH0gLy8gSWYgd2UncmUgb3BlcmF0aW5nIHdpdGhpbiBhIGJhc2VuYW1lLCBwcmVwZW5kIGl0IHRvIHRoZSBwYXRobmFtZSBwcmlvclxuICAvLyB0byBjcmVhdGluZyB0aGUgZm9ybSBhY3Rpb24uICBJZiB0aGlzIGlzIGEgcm9vdCBuYXZpZ2F0aW9uLCB0aGVuIGp1c3QgdXNlXG4gIC8vIHRoZSByYXcgYmFzZW5hbWUgd2hpY2ggYWxsb3dzIHRoZSBiYXNlbmFtZSB0byBoYXZlIGZ1bGwgY29udHJvbCBvdmVyIHRoZVxuICAvLyBwcmVzZW5jZSBvZiBhIHRyYWlsaW5nIHNsYXNoIG9uIHJvb3QgYWN0aW9uc1xuXG5cbiAgaWYgKGJhc2VuYW1lICE9PSBcIi9cIikge1xuICAgIHBhdGgucGF0aG5hbWUgPSBwYXRoLnBhdGhuYW1lID09PSBcIi9cIiA/IGJhc2VuYW1lIDogam9pblBhdGhzKFtiYXNlbmFtZSwgcGF0aC5wYXRobmFtZV0pO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZVBhdGgocGF0aCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZldGNoZXJGb3JtKGZldGNoZXJLZXksIHJvdXRlSWQpIHtcbiAgbGV0IEZldGNoZXJGb3JtID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRm9ybUltcGwsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgcmVmOiByZWYsXG4gICAgICBmZXRjaGVyS2V5OiBmZXRjaGVyS2V5LFxuICAgICAgcm91dGVJZDogcm91dGVJZFxuICAgIH0pKTtcbiAgfSk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIEZldGNoZXJGb3JtLmRpc3BsYXlOYW1lID0gXCJmZXRjaGVyLkZvcm1cIjtcbiAgfVxuXG4gIHJldHVybiBGZXRjaGVyRm9ybTtcbn1cblxubGV0IGZldGNoZXJJZCA9IDA7XG4vKipcbiAqIEludGVyYWN0cyB3aXRoIHJvdXRlIGxvYWRlcnMgYW5kIGFjdGlvbnMgd2l0aG91dCBjYXVzaW5nIGEgbmF2aWdhdGlvbi4gR3JlYXRcbiAqIGZvciBhbnkgaW50ZXJhY3Rpb24gdGhhdCBzdGF5cyBvbiB0aGUgc2FtZSBwYWdlLlxuICovXG5cbmZ1bmN0aW9uIHVzZUZldGNoZXIoKSB7XG4gIHZhciBfcm91dGUkbWF0Y2hlcztcblxuICBsZXQge1xuICAgIHJvdXRlclxuICB9ID0gdXNlRGF0YVJvdXRlckNvbnRleHQoRGF0YVJvdXRlckhvb2suVXNlRmV0Y2hlcik7XG4gIGxldCByb3V0ZSA9IFJlYWN0LnVzZUNvbnRleHQoVU5TQUZFX1JvdXRlQ29udGV4dCk7XG4gICFyb3V0ZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJ1c2VGZXRjaGVyIG11c3QgYmUgdXNlZCBpbnNpZGUgYSBSb3V0ZUNvbnRleHRcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICBsZXQgcm91dGVJZCA9IChfcm91dGUkbWF0Y2hlcyA9IHJvdXRlLm1hdGNoZXNbcm91dGUubWF0Y2hlcy5sZW5ndGggLSAxXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9yb3V0ZSRtYXRjaGVzLnJvdXRlLmlkO1xuICAhKHJvdXRlSWQgIT0gbnVsbCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwidXNlRmV0Y2hlciBjYW4gb25seSBiZSB1c2VkIG9uIHJvdXRlcyB0aGF0IGNvbnRhaW4gYSB1bmlxdWUgXFxcImlkXFxcIlwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIGxldCBbZmV0Y2hlcktleV0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiBTdHJpbmcoKytmZXRjaGVySWQpKTtcbiAgbGV0IFtGb3JtXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHtcbiAgICAhcm91dGVJZCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJObyByb3V0ZUlkIGF2YWlsYWJsZSBmb3IgZmV0Y2hlci5Gb3JtKClcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgIHJldHVybiBjcmVhdGVGZXRjaGVyRm9ybShmZXRjaGVyS2V5LCByb3V0ZUlkKTtcbiAgfSk7XG4gIGxldCBbbG9hZF0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiBocmVmID0+IHtcbiAgICAhcm91dGVyID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIk5vIHJvdXRlciBhdmFpbGFibGUgZm9yIGZldGNoZXIubG9hZCgpXCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICAhcm91dGVJZCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJObyByb3V0ZUlkIGF2YWlsYWJsZSBmb3IgZmV0Y2hlci5sb2FkKClcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgIHJvdXRlci5mZXRjaChmZXRjaGVyS2V5LCByb3V0ZUlkLCBocmVmKTtcbiAgfSk7XG4gIGxldCBzdWJtaXQgPSB1c2VTdWJtaXRJbXBsKGZldGNoZXJLZXksIHJvdXRlSWQpO1xuICBsZXQgZmV0Y2hlciA9IHJvdXRlci5nZXRGZXRjaGVyKGZldGNoZXJLZXkpO1xuICBsZXQgZmV0Y2hlcldpdGhDb21wb25lbnRzID0gUmVhY3QudXNlTWVtbygoKSA9PiBfZXh0ZW5kcyh7XG4gICAgRm9ybSxcbiAgICBzdWJtaXQsXG4gICAgbG9hZFxuICB9LCBmZXRjaGVyKSwgW2ZldGNoZXIsIEZvcm0sIHN1Ym1pdCwgbG9hZF0pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIElzIHRoaXMgYnVzdGVkIHdoZW4gdGhlIFJlYWN0IHRlYW0gZ2V0cyByZWFsIHdlaXJkIGFuZCBjYWxscyBlZmZlY3RzXG4gICAgLy8gdHdpY2Ugb24gbW91bnQ/ICBXZSByZWFsbHkganVzdCBuZWVkIHRvIGdhcmJhZ2UgY29sbGVjdCBoZXJlIHdoZW4gdGhpc1xuICAgIC8vIGZldGNoZXIgaXMgbm8gbG9uZ2VyIGFyb3VuZC5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKCFyb3V0ZXIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiTm8gZmV0Y2hlciBhdmFpbGFibGUgdG8gY2xlYW4gdXAgZnJvbSB1c2VGZXRjaGVyKClcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcm91dGVyLmRlbGV0ZUZldGNoZXIoZmV0Y2hlcktleSk7XG4gICAgfTtcbiAgfSwgW3JvdXRlciwgZmV0Y2hlcktleV0pO1xuICByZXR1cm4gZmV0Y2hlcldpdGhDb21wb25lbnRzO1xufVxuLyoqXG4gKiBQcm92aWRlcyBhbGwgZmV0Y2hlcnMgY3VycmVudGx5IG9uIHRoZSBwYWdlLiBVc2VmdWwgZm9yIGxheW91dHMgYW5kIHBhcmVudFxuICogcm91dGVzIHRoYXQgbmVlZCB0byBwcm92aWRlIHBlbmRpbmcvb3B0aW1pc3RpYyBVSSByZWdhcmRpbmcgdGhlIGZldGNoLlxuICovXG5cbmZ1bmN0aW9uIHVzZUZldGNoZXJzKCkge1xuICBsZXQgc3RhdGUgPSB1c2VEYXRhUm91dGVyU3RhdGUoRGF0YVJvdXRlclN0YXRlSG9vay5Vc2VGZXRjaGVycyk7XG4gIHJldHVybiBbLi4uc3RhdGUuZmV0Y2hlcnMudmFsdWVzKCldO1xufVxuY29uc3QgU0NST0xMX1JFU1RPUkFUSU9OX1NUT1JBR0VfS0VZID0gXCJyZWFjdC1yb3V0ZXItc2Nyb2xsLXBvc2l0aW9uc1wiO1xubGV0IHNhdmVkU2Nyb2xsUG9zaXRpb25zID0ge307XG4vKipcbiAqIFdoZW4gcmVuZGVyZWQgaW5zaWRlIGEgUm91dGVyUHJvdmlkZXIsIHdpbGwgcmVzdG9yZSBzY3JvbGwgcG9zaXRpb25zIG9uIG5hdmlnYXRpb25zXG4gKi9cblxuZnVuY3Rpb24gdXNlU2Nyb2xsUmVzdG9yYXRpb24oX3RlbXAzKSB7XG4gIGxldCB7XG4gICAgZ2V0S2V5LFxuICAgIHN0b3JhZ2VLZXlcbiAgfSA9IF90ZW1wMyA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDM7XG4gIGxldCB7XG4gICAgcm91dGVyXG4gIH0gPSB1c2VEYXRhUm91dGVyQ29udGV4dChEYXRhUm91dGVySG9vay5Vc2VTY3JvbGxSZXN0b3JhdGlvbik7XG4gIGxldCB7XG4gICAgcmVzdG9yZVNjcm9sbFBvc2l0aW9uLFxuICAgIHByZXZlbnRTY3JvbGxSZXNldFxuICB9ID0gdXNlRGF0YVJvdXRlclN0YXRlKERhdGFSb3V0ZXJTdGF0ZUhvb2suVXNlU2Nyb2xsUmVzdG9yYXRpb24pO1xuICBsZXQgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuICBsZXQgbWF0Y2hlcyA9IHVzZU1hdGNoZXMoKTtcbiAgbGV0IG5hdmlnYXRpb24gPSB1c2VOYXZpZ2F0aW9uKCk7IC8vIFRyaWdnZXIgbWFudWFsIHNjcm9sbCByZXN0b3JhdGlvbiB3aGlsZSB3ZSdyZSBhY3RpdmVcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHdpbmRvdy5oaXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uID0gXCJtYW51YWxcIjtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93Lmhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb24gPSBcImF1dG9cIjtcbiAgICB9O1xuICB9LCBbXSk7IC8vIFNhdmUgcG9zaXRpb25zIG9uIHVubG9hZFxuXG4gIHVzZUJlZm9yZVVubG9hZChSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG5hdmlnYXRpb24uc3RhdGUgPT09IFwiaWRsZVwiKSB7XG4gICAgICBsZXQga2V5ID0gKGdldEtleSA/IGdldEtleShsb2NhdGlvbiwgbWF0Y2hlcykgOiBudWxsKSB8fCBsb2NhdGlvbi5rZXk7XG4gICAgICBzYXZlZFNjcm9sbFBvc2l0aW9uc1trZXldID0gd2luZG93LnNjcm9sbFk7XG4gICAgfVxuXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShzdG9yYWdlS2V5IHx8IFNDUk9MTF9SRVNUT1JBVElPTl9TVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoc2F2ZWRTY3JvbGxQb3NpdGlvbnMpKTtcbiAgICB3aW5kb3cuaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbiA9IFwiYXV0b1wiO1xuICB9LCBbc3RvcmFnZUtleSwgZ2V0S2V5LCBuYXZpZ2F0aW9uLnN0YXRlLCBsb2NhdGlvbiwgbWF0Y2hlc10pKTsgLy8gUmVhZCBpbiBhbnkgc2F2ZWQgc2Nyb2xsIGxvY2F0aW9uc1xuXG4gIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBzZXNzaW9uUG9zaXRpb25zID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShzdG9yYWdlS2V5IHx8IFNDUk9MTF9SRVNUT1JBVElPTl9TVE9SQUdFX0tFWSk7XG5cbiAgICAgIGlmIChzZXNzaW9uUG9zaXRpb25zKSB7XG4gICAgICAgIHNhdmVkU2Nyb2xsUG9zaXRpb25zID0gSlNPTi5wYXJzZShzZXNzaW9uUG9zaXRpb25zKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7Ly8gbm8tb3AsIHVzZSBkZWZhdWx0IGVtcHR5IG9iamVjdFxuICAgIH1cbiAgfSwgW3N0b3JhZ2VLZXldKTsgLy8gRW5hYmxlIHNjcm9sbCByZXN0b3JhdGlvbiBpbiB0aGUgcm91dGVyXG5cbiAgUmVhY3QudXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBsZXQgZGlzYWJsZVNjcm9sbFJlc3RvcmF0aW9uID0gcm91dGVyID09IG51bGwgPyB2b2lkIDAgOiByb3V0ZXIuZW5hYmxlU2Nyb2xsUmVzdG9yYXRpb24oc2F2ZWRTY3JvbGxQb3NpdGlvbnMsICgpID0+IHdpbmRvdy5zY3JvbGxZLCBnZXRLZXkpO1xuICAgIHJldHVybiAoKSA9PiBkaXNhYmxlU2Nyb2xsUmVzdG9yYXRpb24gJiYgZGlzYWJsZVNjcm9sbFJlc3RvcmF0aW9uKCk7XG4gIH0sIFtyb3V0ZXIsIGdldEtleV0pOyAvLyBSZXN0b3JlIHNjcm9sbGluZyB3aGVuIHN0YXRlLnJlc3RvcmVTY3JvbGxQb3NpdGlvbiBjaGFuZ2VzXG5cbiAgUmVhY3QudXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAvLyBFeHBsaWNpdCBmYWxzZSBtZWFucyBkb24ndCBkbyBhbnl0aGluZyAodXNlZCBmb3Igc3VibWlzc2lvbnMpXG4gICAgaWYgKHJlc3RvcmVTY3JvbGxQb3NpdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGJlZW4gaGVyZSBiZWZvcmUsIHNjcm9sbCB0byBpdFxuXG5cbiAgICBpZiAodHlwZW9mIHJlc3RvcmVTY3JvbGxQb3NpdGlvbiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgd2luZG93LnNjcm9sbFRvKDAsIHJlc3RvcmVTY3JvbGxQb3NpdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyB0cnkgdG8gc2Nyb2xsIHRvIHRoZSBoYXNoXG5cblxuICAgIGlmIChsb2NhdGlvbi5oYXNoKSB7XG4gICAgICBsZXQgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChsb2NhdGlvbi5oYXNoLnNsaWNlKDEpKTtcblxuICAgICAgaWYgKGVsKSB7XG4gICAgICAgIGVsLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IC8vIE9wdCBvdXQgb2Ygc2Nyb2xsIHJlc2V0IGlmIHRoaXMgbGluayByZXF1ZXN0ZWQgaXRcblxuXG4gICAgaWYgKHByZXZlbnRTY3JvbGxSZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gb3RoZXJ3aXNlIGdvIHRvIHRoZSB0b3Agb24gbmV3IGxvY2F0aW9uc1xuXG5cbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gIH0sIFtsb2NhdGlvbiwgcmVzdG9yZVNjcm9sbFBvc2l0aW9uLCBwcmV2ZW50U2Nyb2xsUmVzZXRdKTtcbn1cblxuZnVuY3Rpb24gdXNlQmVmb3JlVW5sb2FkKGNhbGxiYWNrKSB7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgY2FsbGJhY2spO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgfSwgW2NhbGxiYWNrXSk7XG59IC8vI2VuZHJlZ2lvblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vI3JlZ2lvbiBVdGlsc1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG5mdW5jdGlvbiB3YXJuaW5nKGNvbmQsIG1lc3NhZ2UpIHtcbiAgaWYgKCFjb25kKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIpIGNvbnNvbGUud2FybihtZXNzYWdlKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCBSb3V0ZXIhXG4gICAgICAvL1xuICAgICAgLy8gVGhpcyBlcnJvciBpcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB5b3UgY2FuIG1vcmUgZWFzaWx5XG4gICAgICAvLyBmaW5kIHRoZSBzb3VyY2UgZm9yIGEgd2FybmluZyB0aGF0IGFwcGVhcnMgaW4gdGhlIGNvbnNvbGUgYnlcbiAgICAgIC8vIGVuYWJsaW5nIFwicGF1c2Ugb24gZXhjZXB0aW9uc1wiIGluIHlvdXIgSmF2YVNjcmlwdCBkZWJ1Z2dlci5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxufSAvLyNlbmRyZWdpb25cblxuZXhwb3J0IHsgQnJvd3NlclJvdXRlciwgRm9ybSwgSGFzaFJvdXRlciwgTGluaywgTmF2TGluaywgU2Nyb2xsUmVzdG9yYXRpb24sIGNyZWF0ZUJyb3dzZXJSb3V0ZXIsIGNyZWF0ZUhhc2hSb3V0ZXIsIGNyZWF0ZVNlYXJjaFBhcmFtcywgSGlzdG9yeVJvdXRlciBhcyB1bnN0YWJsZV9IaXN0b3J5Um91dGVyLCB1c2VGZXRjaGVyLCB1c2VGZXRjaGVycywgdXNlRm9ybUFjdGlvbiwgdXNlTGlua0NsaWNrSGFuZGxlciwgdXNlU2VhcmNoUGFyYW1zLCB1c2VTdWJtaXQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwiLyoqXG4gKiBSZWFjdCBSb3V0ZXIgdjYuNC4zXG4gKlxuICogQ29weXJpZ2h0IChjKSBSZW1peCBTb2Z0d2FyZSBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFLm1kIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cbmltcG9ydCB7IGludmFyaWFudCwgam9pblBhdGhzLCBtYXRjaFBhdGgsIFVOU0FGRV9nZXRQYXRoQ29udHJpYnV0aW5nTWF0Y2hlcywgd2FybmluZywgcmVzb2x2ZVRvLCBwYXJzZVBhdGgsIG1hdGNoUm91dGVzLCBBY3Rpb24sIGlzUm91dGVFcnJvclJlc3BvbnNlLCBjcmVhdGVNZW1vcnlIaXN0b3J5LCBzdHJpcEJhc2VuYW1lLCBBYm9ydGVkRGVmZXJyZWRFcnJvciwgY3JlYXRlUm91dGVyIH0gZnJvbSAnQHJlbWl4LXJ1bi9yb3V0ZXInO1xuZXhwb3J0IHsgQWJvcnRlZERlZmVycmVkRXJyb3IsIEFjdGlvbiBhcyBOYXZpZ2F0aW9uVHlwZSwgY3JlYXRlUGF0aCwgZGVmZXIsIGdlbmVyYXRlUGF0aCwgaXNSb3V0ZUVycm9yUmVzcG9uc2UsIGpzb24sIG1hdGNoUGF0aCwgbWF0Y2hSb3V0ZXMsIHBhcnNlUGF0aCwgcmVkaXJlY3QsIHJlc29sdmVQYXRoIH0gZnJvbSAnQHJlbWl4LXJ1bi9yb3V0ZXInO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbi8qKlxuICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gKi9cblxuZnVuY3Rpb24gaXNQb2x5ZmlsbCh4LCB5KSB7XG4gIHJldHVybiB4ID09PSB5ICYmICh4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSkgfHwgeCAhPT0geCAmJiB5ICE9PSB5IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIDtcbn1cblxuY29uc3QgaXMgPSB0eXBlb2YgT2JqZWN0LmlzID09PSBcImZ1bmN0aW9uXCIgPyBPYmplY3QuaXMgOiBpc1BvbHlmaWxsOyAvLyBJbnRlbnRpb25hbGx5IG5vdCB1c2luZyBuYW1lZCBpbXBvcnRzIGJlY2F1c2UgUm9sbHVwIHVzZXMgZHluYW1pY1xuLy8gZGlzcGF0Y2ggZm9yIENvbW1vbkpTIGludGVyb3AgbmFtZWQgaW1wb3J0cy5cblxuY29uc3Qge1xuICB1c2VTdGF0ZSxcbiAgdXNlRWZmZWN0LFxuICB1c2VMYXlvdXRFZmZlY3QsXG4gIHVzZURlYnVnVmFsdWVcbn0gPSBSZWFjdDtcbmxldCBkaWRXYXJuT2xkMThBbHBoYSA9IGZhbHNlO1xubGV0IGRpZFdhcm5VbmNhY2hlZEdldFNuYXBzaG90ID0gZmFsc2U7IC8vIERpc2NsYWltZXI6IFRoaXMgc2hpbSBicmVha3MgbWFueSBvZiB0aGUgcnVsZXMgb2YgUmVhY3QsIGFuZCBvbmx5IHdvcmtzXG4vLyBiZWNhdXNlIG9mIGEgdmVyeSBwYXJ0aWN1bGFyIHNldCBvZiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCBhc3N1bXB0aW9uc1xuLy8gLS0gY2hhbmdlIGFueSBvbmUgb2YgdGhlbSBhbmQgaXQgd2lsbCBicmVhay4gVGhlIG1vc3QgaW1wb3J0YW50IGFzc3VtcHRpb25cbi8vIGlzIHRoYXQgdXBkYXRlcyBhcmUgYWx3YXlzIHN5bmNocm9ub3VzLCBiZWNhdXNlIGNvbmN1cnJlbnQgcmVuZGVyaW5nIGlzXG4vLyBvbmx5IGF2YWlsYWJsZSBpbiB2ZXJzaW9ucyBvZiBSZWFjdCB0aGF0IGFsc28gaGF2ZSBhIGJ1aWx0LWluXG4vLyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSBBUEkuIEFuZCB3ZSBvbmx5IHVzZSB0aGlzIHNoaW0gd2hlbiB0aGUgYnVpbHQtaW4gQVBJXG4vLyBkb2VzIG5vdCBleGlzdC5cbi8vXG4vLyBEbyBub3QgYXNzdW1lIHRoYXQgdGhlIGNsZXZlciBoYWNrcyB1c2VkIGJ5IHRoaXMgaG9vayBhbHNvIHdvcmsgaW4gZ2VuZXJhbC5cbi8vIFRoZSBwb2ludCBvZiB0aGlzIHNoaW0gaXMgdG8gcmVwbGFjZSB0aGUgbmVlZCBmb3IgaGFja3MgYnkgb3RoZXIgbGlicmFyaWVzLlxuXG5mdW5jdGlvbiB1c2VTeW5jRXh0ZXJuYWxTdG9yZSQyKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIC8vIE5vdGU6IFRoZSBzaGltIGRvZXMgbm90IHVzZSBnZXRTZXJ2ZXJTbmFwc2hvdCwgYmVjYXVzZSBwcmUtMTggdmVyc2lvbnMgb2Zcbi8vIFJlYWN0IGRvIG5vdCBleHBvc2UgYSB3YXkgdG8gY2hlY2sgaWYgd2UncmUgaHlkcmF0aW5nLiBTbyB1c2VycyBvZiB0aGUgc2hpbVxuLy8gd2lsbCBuZWVkIHRvIHRyYWNrIHRoYXQgdGhlbXNlbHZlcyBhbmQgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlXG4vLyBmcm9tIGBnZXRTbmFwc2hvdGAuXG5nZXRTZXJ2ZXJTbmFwc2hvdCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgaWYgKCFkaWRXYXJuT2xkMThBbHBoYSkge1xuICAgICAgaWYgKFwic3RhcnRUcmFuc2l0aW9uXCIgaW4gUmVhY3QpIHtcbiAgICAgICAgZGlkV2Fybk9sZDE4QWxwaGEgPSB0cnVlO1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiWW91IGFyZSB1c2luZyBhbiBvdXRkYXRlZCwgcHJlLXJlbGVhc2UgYWxwaGEgb2YgUmVhY3QgMTggdGhhdCBcIiArIFwiZG9lcyBub3Qgc3VwcG9ydCB1c2VTeW5jRXh0ZXJuYWxTdG9yZS4gVGhlIFwiICsgXCJ1c2Utc3luYy1leHRlcm5hbC1zdG9yZSBzaGltIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5LiBVcGdyYWRlIFwiICsgXCJ0byBhIG5ld2VyIHByZS1yZWxlYXNlLlwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gUmVhZCB0aGUgY3VycmVudCBzbmFwc2hvdCBmcm9tIHRoZSBzdG9yZSBvbiBldmVyeSByZW5kZXIuIEFnYWluLCB0aGlzXG4gIC8vIGJyZWFrcyB0aGUgcnVsZXMgb2YgUmVhY3QsIGFuZCBvbmx5IHdvcmtzIGhlcmUgYmVjYXVzZSBvZiBzcGVjaWZpY1xuICAvLyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBtb3N0IGltcG9ydGFudGx5IHRoYXQgdXBkYXRlcyBhcmVcbiAgLy8gYWx3YXlzIHN5bmNocm9ub3VzLlxuXG5cbiAgY29uc3QgdmFsdWUgPSBnZXRTbmFwc2hvdCgpO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBpZiAoIWRpZFdhcm5VbmNhY2hlZEdldFNuYXBzaG90KSB7XG4gICAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IGdldFNuYXBzaG90KCk7XG5cbiAgICAgIGlmICghaXModmFsdWUsIGNhY2hlZFZhbHVlKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIHJlc3VsdCBvZiBnZXRTbmFwc2hvdCBzaG91bGQgYmUgY2FjaGVkIHRvIGF2b2lkIGFuIGluZmluaXRlIGxvb3BcIik7XG4gICAgICAgIGRpZFdhcm5VbmNhY2hlZEdldFNuYXBzaG90ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQmVjYXVzZSB1cGRhdGVzIGFyZSBzeW5jaHJvbm91cywgd2UgZG9uJ3QgcXVldWUgdGhlbS4gSW5zdGVhZCB3ZSBmb3JjZSBhXG4gIC8vIHJlLXJlbmRlciB3aGVuZXZlciB0aGUgc3Vic2NyaWJlZCBzdGF0ZSBjaGFuZ2VzIGJ5IHVwZGF0aW5nIGFuIHNvbWVcbiAgLy8gYXJiaXRyYXJ5IHVzZVN0YXRlIGhvb2suIFRoZW4sIGR1cmluZyByZW5kZXIsIHdlIGNhbGwgZ2V0U25hcHNob3QgdG8gcmVhZFxuICAvLyB0aGUgY3VycmVudCB2YWx1ZS5cbiAgLy9cbiAgLy8gQmVjYXVzZSB3ZSBkb24ndCBhY3R1YWxseSB1c2UgdGhlIHN0YXRlIHJldHVybmVkIGJ5IHRoZSB1c2VTdGF0ZSBob29rLCB3ZVxuICAvLyBjYW4gc2F2ZSBhIGJpdCBvZiBtZW1vcnkgYnkgc3RvcmluZyBvdGhlciBzdHVmZiBpbiB0aGF0IHNsb3QuXG4gIC8vXG4gIC8vIFRvIGltcGxlbWVudCB0aGUgZWFybHkgYmFpbG91dCwgd2UgbmVlZCB0byB0cmFjayBzb21lIHRoaW5ncyBvbiBhIG11dGFibGVcbiAgLy8gb2JqZWN0LiBVc3VhbGx5LCB3ZSB3b3VsZCBwdXQgdGhhdCBpbiBhIHVzZVJlZiBob29rLCBidXQgd2UgY2FuIHN0YXNoIGl0IGluXG4gIC8vIG91ciB1c2VTdGF0ZSBob29rIGluc3RlYWQuXG4gIC8vXG4gIC8vIFRvIGZvcmNlIGEgcmUtcmVuZGVyLCB3ZSBjYWxsIGZvcmNlVXBkYXRlKHtpbnN0fSkuIFRoYXQgd29ya3MgYmVjYXVzZSB0aGVcbiAgLy8gbmV3IG9iamVjdCBhbHdheXMgZmFpbHMgYW4gZXF1YWxpdHkgY2hlY2suXG5cblxuICBjb25zdCBbe1xuICAgIGluc3RcbiAgfSwgZm9yY2VVcGRhdGVdID0gdXNlU3RhdGUoe1xuICAgIGluc3Q6IHtcbiAgICAgIHZhbHVlLFxuICAgICAgZ2V0U25hcHNob3RcbiAgICB9XG4gIH0pOyAvLyBUcmFjayB0aGUgbGF0ZXN0IGdldFNuYXBzaG90IGZ1bmN0aW9uIHdpdGggYSByZWYuIFRoaXMgbmVlZHMgdG8gYmUgdXBkYXRlZFxuICAvLyBpbiB0aGUgbGF5b3V0IHBoYXNlIHNvIHdlIGNhbiBhY2Nlc3MgaXQgZHVyaW5nIHRoZSB0ZWFyaW5nIGNoZWNrIHRoYXRcbiAgLy8gaGFwcGVucyBvbiBzdWJzY3JpYmUuXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpbnN0LnZhbHVlID0gdmFsdWU7XG4gICAgaW5zdC5nZXRTbmFwc2hvdCA9IGdldFNuYXBzaG90OyAvLyBXaGVuZXZlciBnZXRTbmFwc2hvdCBvciBzdWJzY3JpYmUgY2hhbmdlcywgd2UgbmVlZCB0byBjaGVjayBpbiB0aGVcbiAgICAvLyBjb21taXQgcGhhc2UgaWYgdGhlcmUgd2FzIGFuIGludGVybGVhdmVkIG11dGF0aW9uLiBJbiBjb25jdXJyZW50IG1vZGVcbiAgICAvLyB0aGlzIGNhbiBoYXBwZW4gYWxsIHRoZSB0aW1lLCBidXQgZXZlbiBpbiBzeW5jaHJvbm91cyBtb2RlLCBhbiBlYXJsaWVyXG4gICAgLy8gZWZmZWN0IG1heSBoYXZlIG11dGF0ZWQgdGhlIHN0b3JlLlxuXG4gICAgaWYgKGNoZWNrSWZTbmFwc2hvdENoYW5nZWQoaW5zdCkpIHtcbiAgICAgIC8vIEZvcmNlIGEgcmUtcmVuZGVyLlxuICAgICAgZm9yY2VVcGRhdGUoe1xuICAgICAgICBpbnN0XG4gICAgICB9KTtcbiAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcblxuICB9LCBbc3Vic2NyaWJlLCB2YWx1ZSwgZ2V0U25hcHNob3RdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBDaGVjayBmb3IgY2hhbmdlcyByaWdodCBiZWZvcmUgc3Vic2NyaWJpbmcuIFN1YnNlcXVlbnQgY2hhbmdlcyB3aWxsIGJlXG4gICAgLy8gZGV0ZWN0ZWQgaW4gdGhlIHN1YnNjcmlwdGlvbiBoYW5kbGVyLlxuICAgIGlmIChjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpKSB7XG4gICAgICAvLyBGb3JjZSBhIHJlLXJlbmRlci5cbiAgICAgIGZvcmNlVXBkYXRlKHtcbiAgICAgICAgaW5zdFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlU3RvcmVDaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAvLyBUT0RPOiBCZWNhdXNlIHRoZXJlIGlzIG5vIGNyb3NzLXJlbmRlcmVyIEFQSSBmb3IgYmF0Y2hpbmcgdXBkYXRlcywgaXQnc1xuICAgICAgLy8gdXAgdG8gdGhlIGNvbnN1bWVyIG9mIHRoaXMgbGlicmFyeSB0byB3cmFwIHRoZWlyIHN1YnNjcmlwdGlvbiBldmVudFxuICAgICAgLy8gd2l0aCB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcy4gU2hvdWxkIHdlIHRyeSB0byBkZXRlY3Qgd2hlbiB0aGlzIGlzbid0XG4gICAgICAvLyB0aGUgY2FzZSBhbmQgcHJpbnQgYSB3YXJuaW5nIGluIGRldmVsb3BtZW50P1xuICAgICAgLy8gVGhlIHN0b3JlIGNoYW5nZWQuIENoZWNrIGlmIHRoZSBzbmFwc2hvdCBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2VcbiAgICAgIC8vIHJlYWQgZnJvbSB0aGUgc3RvcmUuXG4gICAgICBpZiAoY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSkge1xuICAgICAgICAvLyBGb3JjZSBhIHJlLXJlbmRlci5cbiAgICAgICAgZm9yY2VVcGRhdGUoe1xuICAgICAgICAgIGluc3RcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTsgLy8gU3Vic2NyaWJlIHRvIHRoZSBzdG9yZSBhbmQgcmV0dXJuIGEgY2xlYW4tdXAgZnVuY3Rpb24uXG5cblxuICAgIHJldHVybiBzdWJzY3JpYmUoaGFuZGxlU3RvcmVDaGFuZ2UpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtzdWJzY3JpYmVdKTtcbiAgdXNlRGVidWdWYWx1ZSh2YWx1ZSk7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSB7XG4gIGNvbnN0IGxhdGVzdEdldFNuYXBzaG90ID0gaW5zdC5nZXRTbmFwc2hvdDtcbiAgY29uc3QgcHJldlZhbHVlID0gaW5zdC52YWx1ZTtcblxuICB0cnkge1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IGxhdGVzdEdldFNuYXBzaG90KCk7XG4gICAgcmV0dXJuICFpcyhwcmV2VmFsdWUsIG5leHRWYWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICovXG5mdW5jdGlvbiB1c2VTeW5jRXh0ZXJuYWxTdG9yZSQxKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KSB7XG4gIC8vIE5vdGU6IFRoZSBzaGltIGRvZXMgbm90IHVzZSBnZXRTZXJ2ZXJTbmFwc2hvdCwgYmVjYXVzZSBwcmUtMTggdmVyc2lvbnMgb2ZcbiAgLy8gUmVhY3QgZG8gbm90IGV4cG9zZSBhIHdheSB0byBjaGVjayBpZiB3ZSdyZSBoeWRyYXRpbmcuIFNvIHVzZXJzIG9mIHRoZSBzaGltXG4gIC8vIHdpbGwgbmVlZCB0byB0cmFjayB0aGF0IHRoZW1zZWx2ZXMgYW5kIHJldHVybiB0aGUgY29ycmVjdCB2YWx1ZVxuICAvLyBmcm9tIGBnZXRTbmFwc2hvdGAuXG4gIHJldHVybiBnZXRTbmFwc2hvdCgpO1xufVxuXG4vKipcbiAqIElubGluZWQgaW50byB0aGUgcmVhY3Qtcm91dGVyIHJlcG8gc2luY2UgdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUgZG9lcyBub3RcbiAqIHByb3ZpZGUgYSBVTUQtY29tcGF0aWJsZSBwYWNrYWdlLCBzbyB3ZSBuZWVkIHRoaXMgdG8gYmUgYWJsZSB0byBkaXN0cmlidXRlXG4gKiBVTUQgcmVhY3Qtcm91dGVyIGJ1bmRsZXNcbiAqL1xuY29uc3QgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIik7XG5jb25zdCBpc1NlcnZlckVudmlyb25tZW50ID0gIWNhblVzZURPTTtcbmNvbnN0IHNoaW0gPSBpc1NlcnZlckVudmlyb25tZW50ID8gdXNlU3luY0V4dGVybmFsU3RvcmUkMSA6IHVzZVN5bmNFeHRlcm5hbFN0b3JlJDI7XG5jb25zdCB1c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IFwidXNlU3luY0V4dGVybmFsU3RvcmVcIiBpbiBSZWFjdCA/IChtb2R1bGUgPT4gbW9kdWxlLnVzZVN5bmNFeHRlcm5hbFN0b3JlKShSZWFjdCkgOiBzaGltO1xuXG4vLyBDb250ZXh0cyBmb3IgZGF0YSByb3V0ZXJzXG5jb25zdCBEYXRhU3RhdGljUm91dGVyQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIERhdGFTdGF0aWNSb3V0ZXJDb250ZXh0LmRpc3BsYXlOYW1lID0gXCJEYXRhU3RhdGljUm91dGVyQ29udGV4dFwiO1xufVxuXG5jb25zdCBEYXRhUm91dGVyQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIERhdGFSb3V0ZXJDb250ZXh0LmRpc3BsYXlOYW1lID0gXCJEYXRhUm91dGVyXCI7XG59XG5cbmNvbnN0IERhdGFSb3V0ZXJTdGF0ZUNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICBEYXRhUm91dGVyU3RhdGVDb250ZXh0LmRpc3BsYXlOYW1lID0gXCJEYXRhUm91dGVyU3RhdGVcIjtcbn1cblxuY29uc3QgQXdhaXRDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgQXdhaXRDb250ZXh0LmRpc3BsYXlOYW1lID0gXCJBd2FpdFwiO1xufVxuXG5jb25zdCBOYXZpZ2F0aW9uQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIE5hdmlnYXRpb25Db250ZXh0LmRpc3BsYXlOYW1lID0gXCJOYXZpZ2F0aW9uXCI7XG59XG5cbmNvbnN0IExvY2F0aW9uQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIExvY2F0aW9uQ29udGV4dC5kaXNwbGF5TmFtZSA9IFwiTG9jYXRpb25cIjtcbn1cblxuY29uc3QgUm91dGVDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoe1xuICBvdXRsZXQ6IG51bGwsXG4gIG1hdGNoZXM6IFtdXG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICBSb3V0ZUNvbnRleHQuZGlzcGxheU5hbWUgPSBcIlJvdXRlXCI7XG59XG5cbmNvbnN0IFJvdXRlRXJyb3JDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgUm91dGVFcnJvckNvbnRleHQuZGlzcGxheU5hbWUgPSBcIlJvdXRlRXJyb3JcIjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSBnaXZlbiBcInRvXCIgdmFsdWUuIFRoaXMgaXMgdXNlZnVsIGZvciBidWlsZGluZ1xuICogY3VzdG9tIGxpbmtzIHRoYXQgYXJlIGFsc28gYWNjZXNzaWJsZSBhbmQgcHJlc2VydmUgcmlnaHQtY2xpY2sgYmVoYXZpb3IuXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9kb2NzL2VuL3Y2L2hvb2tzL3VzZS1ocmVmXG4gKi9cblxuZnVuY3Rpb24gdXNlSHJlZih0bywgX3RlbXApIHtcbiAgbGV0IHtcbiAgICByZWxhdGl2ZVxuICB9ID0gX3RlbXAgPT09IHZvaWQgMCA/IHt9IDogX3RlbXA7XG4gICF1c2VJblJvdXRlckNvbnRleHQoKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgLy8gVE9ETzogVGhpcyBlcnJvciBpcyBwcm9iYWJseSBiZWNhdXNlIHRoZXkgc29tZWhvdyBoYXZlIDIgdmVyc2lvbnMgb2YgdGhlXG4gIC8vIHJvdXRlciBsb2FkZWQuIFdlIGNhbiBoZWxwIHRoZW0gdW5kZXJzdGFuZCBob3cgdG8gYXZvaWQgdGhhdC5cbiAgXCJ1c2VIcmVmKCkgbWF5IGJlIHVzZWQgb25seSBpbiB0aGUgY29udGV4dCBvZiBhIDxSb3V0ZXI+IGNvbXBvbmVudC5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICBsZXQge1xuICAgIGJhc2VuYW1lLFxuICAgIG5hdmlnYXRvclxuICB9ID0gUmVhY3QudXNlQ29udGV4dChOYXZpZ2F0aW9uQ29udGV4dCk7XG4gIGxldCB7XG4gICAgaGFzaCxcbiAgICBwYXRobmFtZSxcbiAgICBzZWFyY2hcbiAgfSA9IHVzZVJlc29sdmVkUGF0aCh0bywge1xuICAgIHJlbGF0aXZlXG4gIH0pO1xuICBsZXQgam9pbmVkUGF0aG5hbWUgPSBwYXRobmFtZTsgLy8gSWYgd2UncmUgb3BlcmF0aW5nIHdpdGhpbiBhIGJhc2VuYW1lLCBwcmVwZW5kIGl0IHRvIHRoZSBwYXRobmFtZSBwcmlvclxuICAvLyB0byBjcmVhdGluZyB0aGUgaHJlZi4gIElmIHRoaXMgaXMgYSByb290IG5hdmlnYXRpb24sIHRoZW4ganVzdCB1c2UgdGhlIHJhd1xuICAvLyBiYXNlbmFtZSB3aGljaCBhbGxvd3MgdGhlIGJhc2VuYW1lIHRvIGhhdmUgZnVsbCBjb250cm9sIG92ZXIgdGhlIHByZXNlbmNlXG4gIC8vIG9mIGEgdHJhaWxpbmcgc2xhc2ggb24gcm9vdCBsaW5rc1xuXG4gIGlmIChiYXNlbmFtZSAhPT0gXCIvXCIpIHtcbiAgICBqb2luZWRQYXRobmFtZSA9IHBhdGhuYW1lID09PSBcIi9cIiA/IGJhc2VuYW1lIDogam9pblBhdGhzKFtiYXNlbmFtZSwgcGF0aG5hbWVdKTtcbiAgfVxuXG4gIHJldHVybiBuYXZpZ2F0b3IuY3JlYXRlSHJlZih7XG4gICAgcGF0aG5hbWU6IGpvaW5lZFBhdGhuYW1lLFxuICAgIHNlYXJjaCxcbiAgICBoYXNoXG4gIH0pO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBjb21wb25lbnQgaXMgYSBkZXNjZW5kYW50IG9mIGEgPFJvdXRlcj4uXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9kb2NzL2VuL3Y2L2hvb2tzL3VzZS1pbi1yb3V0ZXItY29udGV4dFxuICovXG5cbmZ1bmN0aW9uIHVzZUluUm91dGVyQ29udGV4dCgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoTG9jYXRpb25Db250ZXh0KSAhPSBudWxsO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IGxvY2F0aW9uIG9iamVjdCwgd2hpY2ggcmVwcmVzZW50cyB0aGUgY3VycmVudCBVUkwgaW4gd2ViXG4gKiBicm93c2Vycy5cbiAqXG4gKiBOb3RlOiBJZiB5b3UncmUgdXNpbmcgdGhpcyBpdCBtYXkgbWVhbiB5b3UncmUgZG9pbmcgc29tZSBvZiB5b3VyIG93blxuICogXCJyb3V0aW5nXCIgaW4geW91ciBhcHAsIGFuZCB3ZSdkIGxpa2UgdG8ga25vdyB3aGF0IHlvdXIgdXNlIGNhc2UgaXMuIFdlIG1heVxuICogYmUgYWJsZSB0byBwcm92aWRlIHNvbWV0aGluZyBoaWdoZXItbGV2ZWwgdG8gYmV0dGVyIHN1aXQgeW91ciBuZWVkcy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLWxvY2F0aW9uXG4gKi9cblxuZnVuY3Rpb24gdXNlTG9jYXRpb24oKSB7XG4gICF1c2VJblJvdXRlckNvbnRleHQoKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgLy8gVE9ETzogVGhpcyBlcnJvciBpcyBwcm9iYWJseSBiZWNhdXNlIHRoZXkgc29tZWhvdyBoYXZlIDIgdmVyc2lvbnMgb2YgdGhlXG4gIC8vIHJvdXRlciBsb2FkZWQuIFdlIGNhbiBoZWxwIHRoZW0gdW5kZXJzdGFuZCBob3cgdG8gYXZvaWQgdGhhdC5cbiAgXCJ1c2VMb2NhdGlvbigpIG1heSBiZSB1c2VkIG9ubHkgaW4gdGhlIGNvbnRleHQgb2YgYSA8Um91dGVyPiBjb21wb25lbnQuXCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoTG9jYXRpb25Db250ZXh0KS5sb2NhdGlvbjtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBuYXZpZ2F0aW9uIGFjdGlvbiB3aGljaCBkZXNjcmliZXMgaG93IHRoZSByb3V0ZXIgY2FtZSB0b1xuICogdGhlIGN1cnJlbnQgbG9jYXRpb24sIGVpdGhlciBieSBhIHBvcCwgcHVzaCwgb3IgcmVwbGFjZSBvbiB0aGUgaGlzdG9yeSBzdGFjay5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLW5hdmlnYXRpb24tdHlwZVxuICovXG5cbmZ1bmN0aW9uIHVzZU5hdmlnYXRpb25UeXBlKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChMb2NhdGlvbkNvbnRleHQpLm5hdmlnYXRpb25UeXBlO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIFVSTCBmb3IgdGhlIGdpdmVuIFwidG9cIiB2YWx1ZSBtYXRjaGVzIHRoZSBjdXJyZW50IFVSTC5cbiAqIFRoaXMgaXMgdXNlZnVsIGZvciBjb21wb25lbnRzIHRoYXQgbmVlZCB0byBrbm93IFwiYWN0aXZlXCIgc3RhdGUsIGUuZy5cbiAqIDxOYXZMaW5rPi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLW1hdGNoXG4gKi9cblxuZnVuY3Rpb24gdXNlTWF0Y2gocGF0dGVybikge1xuICAhdXNlSW5Sb3V0ZXJDb250ZXh0KCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIC8vIFRPRE86IFRoaXMgZXJyb3IgaXMgcHJvYmFibHkgYmVjYXVzZSB0aGV5IHNvbWVob3cgaGF2ZSAyIHZlcnNpb25zIG9mIHRoZVxuICAvLyByb3V0ZXIgbG9hZGVkLiBXZSBjYW4gaGVscCB0aGVtIHVuZGVyc3RhbmQgaG93IHRvIGF2b2lkIHRoYXQuXG4gIFwidXNlTWF0Y2goKSBtYXkgYmUgdXNlZCBvbmx5IGluIHRoZSBjb250ZXh0IG9mIGEgPFJvdXRlcj4gY29tcG9uZW50LlwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIGxldCB7XG4gICAgcGF0aG5hbWVcbiAgfSA9IHVzZUxvY2F0aW9uKCk7XG4gIHJldHVybiBSZWFjdC51c2VNZW1vKCgpID0+IG1hdGNoUGF0aChwYXR0ZXJuLCBwYXRobmFtZSksIFtwYXRobmFtZSwgcGF0dGVybl0pO1xufVxuLyoqXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgbmF2aWdhdGUoKSBmdW5jdGlvbiByZXR1cm5lZCBmcm9tIHVzZU5hdmlnYXRlKCkuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGltcGVyYXRpdmUgbWV0aG9kIGZvciBjaGFuZ2luZyB0aGUgbG9jYXRpb24uIFVzZWQgYnkgPExpbms+cywgYnV0XG4gKiBtYXkgYWxzbyBiZSB1c2VkIGJ5IG90aGVyIGVsZW1lbnRzIHRvIGNoYW5nZSB0aGUgbG9jYXRpb24uXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9kb2NzL2VuL3Y2L2hvb2tzL3VzZS1uYXZpZ2F0ZVxuICovXG5mdW5jdGlvbiB1c2VOYXZpZ2F0ZSgpIHtcbiAgIXVzZUluUm91dGVyQ29udGV4dCgpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAvLyBUT0RPOiBUaGlzIGVycm9yIGlzIHByb2JhYmx5IGJlY2F1c2UgdGhleSBzb21laG93IGhhdmUgMiB2ZXJzaW9ucyBvZiB0aGVcbiAgLy8gcm91dGVyIGxvYWRlZC4gV2UgY2FuIGhlbHAgdGhlbSB1bmRlcnN0YW5kIGhvdyB0byBhdm9pZCB0aGF0LlxuICBcInVzZU5hdmlnYXRlKCkgbWF5IGJlIHVzZWQgb25seSBpbiB0aGUgY29udGV4dCBvZiBhIDxSb3V0ZXI+IGNvbXBvbmVudC5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICBsZXQge1xuICAgIGJhc2VuYW1lLFxuICAgIG5hdmlnYXRvclxuICB9ID0gUmVhY3QudXNlQ29udGV4dChOYXZpZ2F0aW9uQ29udGV4dCk7XG4gIGxldCB7XG4gICAgbWF0Y2hlc1xuICB9ID0gUmVhY3QudXNlQ29udGV4dChSb3V0ZUNvbnRleHQpO1xuICBsZXQge1xuICAgIHBhdGhuYW1lOiBsb2NhdGlvblBhdGhuYW1lXG4gIH0gPSB1c2VMb2NhdGlvbigpO1xuICBsZXQgcm91dGVQYXRobmFtZXNKc29uID0gSlNPTi5zdHJpbmdpZnkoVU5TQUZFX2dldFBhdGhDb250cmlidXRpbmdNYXRjaGVzKG1hdGNoZXMpLm1hcChtYXRjaCA9PiBtYXRjaC5wYXRobmFtZUJhc2UpKTtcbiAgbGV0IGFjdGl2ZVJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWN0aXZlUmVmLmN1cnJlbnQgPSB0cnVlO1xuICB9KTtcbiAgbGV0IG5hdmlnYXRlID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKHRvLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoYWN0aXZlUmVmLmN1cnJlbnQsIFwiWW91IHNob3VsZCBjYWxsIG5hdmlnYXRlKCkgaW4gYSBSZWFjdC51c2VFZmZlY3QoKSwgbm90IHdoZW4gXCIgKyBcInlvdXIgY29tcG9uZW50IGlzIGZpcnN0IHJlbmRlcmVkLlwiKSA6IHZvaWQgMDtcbiAgICBpZiAoIWFjdGl2ZVJlZi5jdXJyZW50KSByZXR1cm47XG5cbiAgICBpZiAodHlwZW9mIHRvID09PSBcIm51bWJlclwiKSB7XG4gICAgICBuYXZpZ2F0b3IuZ28odG8pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBwYXRoID0gcmVzb2x2ZVRvKHRvLCBKU09OLnBhcnNlKHJvdXRlUGF0aG5hbWVzSnNvbiksIGxvY2F0aW9uUGF0aG5hbWUsIG9wdGlvbnMucmVsYXRpdmUgPT09IFwicGF0aFwiKTsgLy8gSWYgd2UncmUgb3BlcmF0aW5nIHdpdGhpbiBhIGJhc2VuYW1lLCBwcmVwZW5kIGl0IHRvIHRoZSBwYXRobmFtZSBwcmlvclxuICAgIC8vIHRvIGhhbmRpbmcgb2ZmIHRvIGhpc3RvcnkuICBJZiB0aGlzIGlzIGEgcm9vdCBuYXZpZ2F0aW9uLCB0aGVuIHdlXG4gICAgLy8gbmF2aWdhdGUgdG8gdGhlIHJhdyBiYXNlbmFtZSB3aGljaCBhbGxvd3MgdGhlIGJhc2VuYW1lIHRvIGhhdmUgZnVsbFxuICAgIC8vIGNvbnRyb2wgb3ZlciB0aGUgcHJlc2VuY2Ugb2YgYSB0cmFpbGluZyBzbGFzaCBvbiByb290IGxpbmtzXG5cbiAgICBpZiAoYmFzZW5hbWUgIT09IFwiL1wiKSB7XG4gICAgICBwYXRoLnBhdGhuYW1lID0gcGF0aC5wYXRobmFtZSA9PT0gXCIvXCIgPyBiYXNlbmFtZSA6IGpvaW5QYXRocyhbYmFzZW5hbWUsIHBhdGgucGF0aG5hbWVdKTtcbiAgICB9XG5cbiAgICAoISFvcHRpb25zLnJlcGxhY2UgPyBuYXZpZ2F0b3IucmVwbGFjZSA6IG5hdmlnYXRvci5wdXNoKShwYXRoLCBvcHRpb25zLnN0YXRlLCBvcHRpb25zKTtcbiAgfSwgW2Jhc2VuYW1lLCBuYXZpZ2F0b3IsIHJvdXRlUGF0aG5hbWVzSnNvbiwgbG9jYXRpb25QYXRobmFtZV0pO1xuICByZXR1cm4gbmF2aWdhdGU7XG59XG5jb25zdCBPdXRsZXRDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG4vKipcbiAqIFJldHVybnMgdGhlIGNvbnRleHQgKGlmIHByb3ZpZGVkKSBmb3IgdGhlIGNoaWxkIHJvdXRlIGF0IHRoaXMgbGV2ZWwgb2YgdGhlIHJvdXRlXG4gKiBoaWVyYXJjaHkuXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLW91dGxldC1jb250ZXh0XG4gKi9cblxuZnVuY3Rpb24gdXNlT3V0bGV0Q29udGV4dCgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoT3V0bGV0Q29udGV4dCk7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGVsZW1lbnQgZm9yIHRoZSBjaGlsZCByb3V0ZSBhdCB0aGlzIGxldmVsIG9mIHRoZSByb3V0ZVxuICogaGllcmFyY2h5LiBVc2VkIGludGVybmFsbHkgYnkgPE91dGxldD4gdG8gcmVuZGVyIGNoaWxkIHJvdXRlcy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLW91dGxldFxuICovXG5cbmZ1bmN0aW9uIHVzZU91dGxldChjb250ZXh0KSB7XG4gIGxldCBvdXRsZXQgPSBSZWFjdC51c2VDb250ZXh0KFJvdXRlQ29udGV4dCkub3V0bGV0O1xuXG4gIGlmIChvdXRsZXQpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoT3V0bGV0Q29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IGNvbnRleHRcbiAgICB9LCBvdXRsZXQpO1xuICB9XG5cbiAgcmV0dXJuIG91dGxldDtcbn1cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3Qgb2Yga2V5L3ZhbHVlIHBhaXJzIG9mIHRoZSBkeW5hbWljIHBhcmFtcyBmcm9tIHRoZSBjdXJyZW50XG4gKiBVUkwgdGhhdCB3ZXJlIG1hdGNoZWQgYnkgdGhlIHJvdXRlIHBhdGguXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9kb2NzL2VuL3Y2L2hvb2tzL3VzZS1wYXJhbXNcbiAqL1xuXG5mdW5jdGlvbiB1c2VQYXJhbXMoKSB7XG4gIGxldCB7XG4gICAgbWF0Y2hlc1xuICB9ID0gUmVhY3QudXNlQ29udGV4dChSb3V0ZUNvbnRleHQpO1xuICBsZXQgcm91dGVNYXRjaCA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXTtcbiAgcmV0dXJuIHJvdXRlTWF0Y2ggPyByb3V0ZU1hdGNoLnBhcmFtcyA6IHt9O1xufVxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgcGF0aG5hbWUgb2YgdGhlIGdpdmVuIGB0b2AgdmFsdWUgYWdhaW5zdCB0aGUgY3VycmVudCBsb2NhdGlvbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvaG9va3MvdXNlLXJlc29sdmVkLXBhdGhcbiAqL1xuXG5mdW5jdGlvbiB1c2VSZXNvbHZlZFBhdGgodG8sIF90ZW1wMikge1xuICBsZXQge1xuICAgIHJlbGF0aXZlXG4gIH0gPSBfdGVtcDIgPT09IHZvaWQgMCA/IHt9IDogX3RlbXAyO1xuICBsZXQge1xuICAgIG1hdGNoZXNcbiAgfSA9IFJlYWN0LnVzZUNvbnRleHQoUm91dGVDb250ZXh0KTtcbiAgbGV0IHtcbiAgICBwYXRobmFtZTogbG9jYXRpb25QYXRobmFtZVxuICB9ID0gdXNlTG9jYXRpb24oKTtcbiAgbGV0IHJvdXRlUGF0aG5hbWVzSnNvbiA9IEpTT04uc3RyaW5naWZ5KFVOU0FGRV9nZXRQYXRoQ29udHJpYnV0aW5nTWF0Y2hlcyhtYXRjaGVzKS5tYXAobWF0Y2ggPT4gbWF0Y2gucGF0aG5hbWVCYXNlKSk7XG4gIHJldHVybiBSZWFjdC51c2VNZW1vKCgpID0+IHJlc29sdmVUbyh0bywgSlNPTi5wYXJzZShyb3V0ZVBhdGhuYW1lc0pzb24pLCBsb2NhdGlvblBhdGhuYW1lLCByZWxhdGl2ZSA9PT0gXCJwYXRoXCIpLCBbdG8sIHJvdXRlUGF0aG5hbWVzSnNvbiwgbG9jYXRpb25QYXRobmFtZSwgcmVsYXRpdmVdKTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgZWxlbWVudCBvZiB0aGUgcm91dGUgdGhhdCBtYXRjaGVkIHRoZSBjdXJyZW50IGxvY2F0aW9uLCBwcmVwYXJlZFxuICogd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0IHRvIHJlbmRlciB0aGUgcmVtYWluZGVyIG9mIHRoZSByb3V0ZSB0cmVlLiBSb3V0ZVxuICogZWxlbWVudHMgaW4gdGhlIHRyZWUgbXVzdCByZW5kZXIgYW4gPE91dGxldD4gdG8gcmVuZGVyIHRoZWlyIGNoaWxkIHJvdXRlJ3NcbiAqIGVsZW1lbnQuXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9kb2NzL2VuL3Y2L2hvb2tzL3VzZS1yb3V0ZXNcbiAqL1xuXG5mdW5jdGlvbiB1c2VSb3V0ZXMocm91dGVzLCBsb2NhdGlvbkFyZykge1xuICAhdXNlSW5Sb3V0ZXJDb250ZXh0KCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIC8vIFRPRE86IFRoaXMgZXJyb3IgaXMgcHJvYmFibHkgYmVjYXVzZSB0aGV5IHNvbWVob3cgaGF2ZSAyIHZlcnNpb25zIG9mIHRoZVxuICAvLyByb3V0ZXIgbG9hZGVkLiBXZSBjYW4gaGVscCB0aGVtIHVuZGVyc3RhbmQgaG93IHRvIGF2b2lkIHRoYXQuXG4gIFwidXNlUm91dGVzKCkgbWF5IGJlIHVzZWQgb25seSBpbiB0aGUgY29udGV4dCBvZiBhIDxSb3V0ZXI+IGNvbXBvbmVudC5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICBsZXQgZGF0YVJvdXRlclN0YXRlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoRGF0YVJvdXRlclN0YXRlQ29udGV4dCk7XG4gIGxldCB7XG4gICAgbWF0Y2hlczogcGFyZW50TWF0Y2hlc1xuICB9ID0gUmVhY3QudXNlQ29udGV4dChSb3V0ZUNvbnRleHQpO1xuICBsZXQgcm91dGVNYXRjaCA9IHBhcmVudE1hdGNoZXNbcGFyZW50TWF0Y2hlcy5sZW5ndGggLSAxXTtcbiAgbGV0IHBhcmVudFBhcmFtcyA9IHJvdXRlTWF0Y2ggPyByb3V0ZU1hdGNoLnBhcmFtcyA6IHt9O1xuICBsZXQgcGFyZW50UGF0aG5hbWUgPSByb3V0ZU1hdGNoID8gcm91dGVNYXRjaC5wYXRobmFtZSA6IFwiL1wiO1xuICBsZXQgcGFyZW50UGF0aG5hbWVCYXNlID0gcm91dGVNYXRjaCA/IHJvdXRlTWF0Y2gucGF0aG5hbWVCYXNlIDogXCIvXCI7XG4gIGxldCBwYXJlbnRSb3V0ZSA9IHJvdXRlTWF0Y2ggJiYgcm91dGVNYXRjaC5yb3V0ZTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgLy8gWW91IHdvbid0IGdldCBhIHdhcm5pbmcgYWJvdXQgMiBkaWZmZXJlbnQgPFJvdXRlcz4gdW5kZXIgYSA8Um91dGU+XG4gICAgLy8gd2l0aG91dCBhIHRyYWlsaW5nICosIGJ1dCB0aGlzIGlzIGEgYmVzdC1lZmZvcnQgd2FybmluZyBhbnl3YXkgc2luY2Ugd2VcbiAgICAvLyBjYW5ub3QgZXZlbiBnaXZlIHRoZSB3YXJuaW5nIHVubGVzcyB0aGV5IGxhbmQgYXQgdGhlIHBhcmVudCByb3V0ZS5cbiAgICAvL1xuICAgIC8vIEV4YW1wbGU6XG4gICAgLy9cbiAgICAvLyA8Um91dGVzPlxuICAgIC8vICAgey8qIFRoaXMgcm91dGUgcGF0aCBNVVNUIGVuZCB3aXRoIC8qIGJlY2F1c2Ugb3RoZXJ3aXNlXG4gICAgLy8gICAgICAgaXQgd2lsbCBuZXZlciBtYXRjaCAvYmxvZy9wb3N0LzEyMyAqL31cbiAgICAvLyAgIDxSb3V0ZSBwYXRoPVwiYmxvZ1wiIGVsZW1lbnQ9ezxCbG9nIC8+fSAvPlxuICAgIC8vICAgPFJvdXRlIHBhdGg9XCJibG9nL2ZlZWRcIiBlbGVtZW50PXs8QmxvZ0ZlZWQgLz59IC8+XG4gICAgLy8gPC9Sb3V0ZXM+XG4gICAgLy9cbiAgICAvLyBmdW5jdGlvbiBCbG9nKCkge1xuICAgIC8vICAgcmV0dXJuIChcbiAgICAvLyAgICAgPFJvdXRlcz5cbiAgICAvLyAgICAgICA8Um91dGUgcGF0aD1cInBvc3QvOmlkXCIgZWxlbWVudD17PFBvc3QgLz59IC8+XG4gICAgLy8gICAgIDwvUm91dGVzPlxuICAgIC8vICAgKTtcbiAgICAvLyB9XG4gICAgbGV0IHBhcmVudFBhdGggPSBwYXJlbnRSb3V0ZSAmJiBwYXJlbnRSb3V0ZS5wYXRoIHx8IFwiXCI7XG4gICAgd2FybmluZ09uY2UocGFyZW50UGF0aG5hbWUsICFwYXJlbnRSb3V0ZSB8fCBwYXJlbnRQYXRoLmVuZHNXaXRoKFwiKlwiKSwgXCJZb3UgcmVuZGVyZWQgZGVzY2VuZGFudCA8Um91dGVzPiAob3IgY2FsbGVkIGB1c2VSb3V0ZXMoKWApIGF0IFwiICsgKFwiXFxcIlwiICsgcGFyZW50UGF0aG5hbWUgKyBcIlxcXCIgKHVuZGVyIDxSb3V0ZSBwYXRoPVxcXCJcIiArIHBhcmVudFBhdGggKyBcIlxcXCI+KSBidXQgdGhlIFwiKSArIFwicGFyZW50IHJvdXRlIHBhdGggaGFzIG5vIHRyYWlsaW5nIFxcXCIqXFxcIi4gVGhpcyBtZWFucyBpZiB5b3UgbmF2aWdhdGUgXCIgKyBcImRlZXBlciwgdGhlIHBhcmVudCB3b24ndCBtYXRjaCBhbnltb3JlIGFuZCB0aGVyZWZvcmUgdGhlIGNoaWxkIFwiICsgXCJyb3V0ZXMgd2lsbCBuZXZlciByZW5kZXIuXFxuXFxuXCIgKyAoXCJQbGVhc2UgY2hhbmdlIHRoZSBwYXJlbnQgPFJvdXRlIHBhdGg9XFxcIlwiICsgcGFyZW50UGF0aCArIFwiXFxcIj4gdG8gPFJvdXRlIFwiKSArIChcInBhdGg9XFxcIlwiICsgKHBhcmVudFBhdGggPT09IFwiL1wiID8gXCIqXCIgOiBwYXJlbnRQYXRoICsgXCIvKlwiKSArIFwiXFxcIj4uXCIpKTtcbiAgfVxuXG4gIGxldCBsb2NhdGlvbkZyb21Db250ZXh0ID0gdXNlTG9jYXRpb24oKTtcbiAgbGV0IGxvY2F0aW9uO1xuXG4gIGlmIChsb2NhdGlvbkFyZykge1xuICAgIHZhciBfcGFyc2VkTG9jYXRpb25BcmckcGE7XG5cbiAgICBsZXQgcGFyc2VkTG9jYXRpb25BcmcgPSB0eXBlb2YgbG9jYXRpb25BcmcgPT09IFwic3RyaW5nXCIgPyBwYXJzZVBhdGgobG9jYXRpb25BcmcpIDogbG9jYXRpb25Bcmc7XG4gICAgIShwYXJlbnRQYXRobmFtZUJhc2UgPT09IFwiL1wiIHx8ICgoX3BhcnNlZExvY2F0aW9uQXJnJHBhID0gcGFyc2VkTG9jYXRpb25BcmcucGF0aG5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBfcGFyc2VkTG9jYXRpb25BcmckcGEuc3RhcnRzV2l0aChwYXJlbnRQYXRobmFtZUJhc2UpKSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiV2hlbiBvdmVycmlkaW5nIHRoZSBsb2NhdGlvbiB1c2luZyBgPFJvdXRlcyBsb2NhdGlvbj5gIG9yIGB1c2VSb3V0ZXMocm91dGVzLCBsb2NhdGlvbilgLCBcIiArIFwidGhlIGxvY2F0aW9uIHBhdGhuYW1lIG11c3QgYmVnaW4gd2l0aCB0aGUgcG9ydGlvbiBvZiB0aGUgVVJMIHBhdGhuYW1lIHRoYXQgd2FzIFwiICsgKFwibWF0Y2hlZCBieSBhbGwgcGFyZW50IHJvdXRlcy4gVGhlIGN1cnJlbnQgcGF0aG5hbWUgYmFzZSBpcyBcXFwiXCIgKyBwYXJlbnRQYXRobmFtZUJhc2UgKyBcIlxcXCIgXCIpICsgKFwiYnV0IHBhdGhuYW1lIFxcXCJcIiArIHBhcnNlZExvY2F0aW9uQXJnLnBhdGhuYW1lICsgXCJcXFwiIHdhcyBnaXZlbiBpbiB0aGUgYGxvY2F0aW9uYCBwcm9wLlwiKSkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgIGxvY2F0aW9uID0gcGFyc2VkTG9jYXRpb25Bcmc7XG4gIH0gZWxzZSB7XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbkZyb21Db250ZXh0O1xuICB9XG5cbiAgbGV0IHBhdGhuYW1lID0gbG9jYXRpb24ucGF0aG5hbWUgfHwgXCIvXCI7XG4gIGxldCByZW1haW5pbmdQYXRobmFtZSA9IHBhcmVudFBhdGhuYW1lQmFzZSA9PT0gXCIvXCIgPyBwYXRobmFtZSA6IHBhdGhuYW1lLnNsaWNlKHBhcmVudFBhdGhuYW1lQmFzZS5sZW5ndGgpIHx8IFwiL1wiO1xuICBsZXQgbWF0Y2hlcyA9IG1hdGNoUm91dGVzKHJvdXRlcywge1xuICAgIHBhdGhuYW1lOiByZW1haW5pbmdQYXRobmFtZVxuICB9KTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyhwYXJlbnRSb3V0ZSB8fCBtYXRjaGVzICE9IG51bGwsIFwiTm8gcm91dGVzIG1hdGNoZWQgbG9jYXRpb24gXFxcIlwiICsgbG9jYXRpb24ucGF0aG5hbWUgKyBsb2NhdGlvbi5zZWFyY2ggKyBsb2NhdGlvbi5oYXNoICsgXCJcXFwiIFwiKSA6IHZvaWQgMDtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKG1hdGNoZXMgPT0gbnVsbCB8fCBtYXRjaGVzW21hdGNoZXMubGVuZ3RoIC0gMV0ucm91dGUuZWxlbWVudCAhPT0gdW5kZWZpbmVkLCBcIk1hdGNoZWQgbGVhZiByb3V0ZSBhdCBsb2NhdGlvbiBcXFwiXCIgKyBsb2NhdGlvbi5wYXRobmFtZSArIGxvY2F0aW9uLnNlYXJjaCArIGxvY2F0aW9uLmhhc2ggKyBcIlxcXCIgZG9lcyBub3QgaGF2ZSBhbiBlbGVtZW50LiBcIiArIFwiVGhpcyBtZWFucyBpdCB3aWxsIHJlbmRlciBhbiA8T3V0bGV0IC8+IHdpdGggYSBudWxsIHZhbHVlIGJ5IGRlZmF1bHQgcmVzdWx0aW5nIGluIGFuIFxcXCJlbXB0eVxcXCIgcGFnZS5cIikgOiB2b2lkIDA7XG4gIH1cblxuICBsZXQgcmVuZGVyZWRNYXRjaGVzID0gX3JlbmRlck1hdGNoZXMobWF0Y2hlcyAmJiBtYXRjaGVzLm1hcChtYXRjaCA9PiBPYmplY3QuYXNzaWduKHt9LCBtYXRjaCwge1xuICAgIHBhcmFtczogT2JqZWN0LmFzc2lnbih7fSwgcGFyZW50UGFyYW1zLCBtYXRjaC5wYXJhbXMpLFxuICAgIHBhdGhuYW1lOiBqb2luUGF0aHMoW3BhcmVudFBhdGhuYW1lQmFzZSwgbWF0Y2gucGF0aG5hbWVdKSxcbiAgICBwYXRobmFtZUJhc2U6IG1hdGNoLnBhdGhuYW1lQmFzZSA9PT0gXCIvXCIgPyBwYXJlbnRQYXRobmFtZUJhc2UgOiBqb2luUGF0aHMoW3BhcmVudFBhdGhuYW1lQmFzZSwgbWF0Y2gucGF0aG5hbWVCYXNlXSlcbiAgfSkpLCBwYXJlbnRNYXRjaGVzLCBkYXRhUm91dGVyU3RhdGVDb250ZXh0IHx8IHVuZGVmaW5lZCk7IC8vIFdoZW4gYSB1c2VyIHBhc3NlcyBpbiBhIGBsb2NhdGlvbkFyZ2AsIHRoZSBhc3NvY2lhdGVkIHJvdXRlcyBuZWVkIHRvXG4gIC8vIGJlIHdyYXBwZWQgaW4gYSBuZXcgYExvY2F0aW9uQ29udGV4dC5Qcm92aWRlcmAgaW4gb3JkZXIgZm9yIGB1c2VMb2NhdGlvbmBcbiAgLy8gdG8gdXNlIHRoZSBzY29wZWQgbG9jYXRpb24gaW5zdGVhZCBvZiB0aGUgZ2xvYmFsIGxvY2F0aW9uLlxuXG5cbiAgaWYgKGxvY2F0aW9uQXJnICYmIHJlbmRlcmVkTWF0Y2hlcykge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMb2NhdGlvbkNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGxvY2F0aW9uOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgcGF0aG5hbWU6IFwiL1wiLFxuICAgICAgICAgIHNlYXJjaDogXCJcIixcbiAgICAgICAgICBoYXNoOiBcIlwiLFxuICAgICAgICAgIHN0YXRlOiBudWxsLFxuICAgICAgICAgIGtleTogXCJkZWZhdWx0XCJcbiAgICAgICAgfSwgbG9jYXRpb24pLFxuICAgICAgICBuYXZpZ2F0aW9uVHlwZTogQWN0aW9uLlBvcFxuICAgICAgfVxuICAgIH0sIHJlbmRlcmVkTWF0Y2hlcyk7XG4gIH1cblxuICByZXR1cm4gcmVuZGVyZWRNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBEZWZhdWx0RXJyb3JFbGVtZW50KCkge1xuICBsZXQgZXJyb3IgPSB1c2VSb3V0ZUVycm9yKCk7XG4gIGxldCBtZXNzYWdlID0gaXNSb3V0ZUVycm9yUmVzcG9uc2UoZXJyb3IpID8gZXJyb3Iuc3RhdHVzICsgXCIgXCIgKyBlcnJvci5zdGF0dXNUZXh0IDogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBKU09OLnN0cmluZ2lmeShlcnJvcik7XG4gIGxldCBzdGFjayA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5zdGFjayA6IG51bGw7XG4gIGxldCBsaWdodGdyZXkgPSBcInJnYmEoMjAwLDIwMCwyMDAsIDAuNSlcIjtcbiAgbGV0IHByZVN0eWxlcyA9IHtcbiAgICBwYWRkaW5nOiBcIjAuNXJlbVwiLFxuICAgIGJhY2tncm91bmRDb2xvcjogbGlnaHRncmV5XG4gIH07XG4gIGxldCBjb2RlU3R5bGVzID0ge1xuICAgIHBhZGRpbmc6IFwiMnB4IDRweFwiLFxuICAgIGJhY2tncm91bmRDb2xvcjogbGlnaHRncmV5XG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoMlwiLCBudWxsLCBcIlVuaGFuZGxlZCBUaHJvd24gRXJyb3IhXCIpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImgzXCIsIHtcbiAgICBzdHlsZToge1xuICAgICAgZm9udFN0eWxlOiBcIml0YWxpY1wiXG4gICAgfVxuICB9LCBtZXNzYWdlKSwgc3RhY2sgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInByZVwiLCB7XG4gICAgc3R5bGU6IHByZVN0eWxlc1xuICB9LCBzdGFjaykgOiBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBcIiwgbnVsbCwgXCJcXHVEODNEXFx1RENCRiBIZXkgZGV2ZWxvcGVyIFxcdUQ4M0RcXHVEQzRCXCIpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBcIiwgbnVsbCwgXCJZb3UgY2FuIHByb3ZpZGUgYSB3YXkgYmV0dGVyIFVYIHRoYW4gdGhpcyB3aGVuIHlvdXIgYXBwIHRocm93cyBlcnJvcnMgYnkgcHJvdmlkaW5nIHlvdXIgb3duXFx4QTBcIiwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjb2RlXCIsIHtcbiAgICBzdHlsZTogY29kZVN0eWxlc1xuICB9LCBcImVycm9yRWxlbWVudFwiKSwgXCIgcHJvcHMgb25cXHhBMFwiLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNvZGVcIiwge1xuICAgIHN0eWxlOiBjb2RlU3R5bGVzXG4gIH0sIFwiPFJvdXRlPlwiKSkpO1xufVxuXG5jbGFzcyBSZW5kZXJFcnJvckJvdW5kYXJ5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGxvY2F0aW9uOiBwcm9wcy5sb2NhdGlvbixcbiAgICAgIGVycm9yOiBwcm9wcy5lcnJvclxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiBlcnJvclxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHByb3BzLCBzdGF0ZSkge1xuICAgIC8vIFdoZW4gd2UgZ2V0IGludG8gYW4gZXJyb3Igc3RhdGUsIHRoZSB1c2VyIHdpbGwgbGlrZWx5IGNsaWNrIFwiYmFja1wiIHRvIHRoZVxuICAgIC8vIHByZXZpb3VzIHBhZ2UgdGhhdCBkaWRuJ3QgaGF2ZSBhbiBlcnJvci4gQmVjYXVzZSB0aGlzIHdyYXBzIHRoZSBlbnRpcmVcbiAgICAvLyBhcHBsaWNhdGlvbiwgdGhhdCB3aWxsIGhhdmUgbm8gZWZmZWN0LS10aGUgZXJyb3IgcGFnZSBjb250aW51ZXMgdG8gZGlzcGxheS5cbiAgICAvLyBUaGlzIGdpdmVzIHVzIGEgbWVjaGFuaXNtIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3Igd2hlbiB0aGUgbG9jYXRpb24gY2hhbmdlcy5cbiAgICAvL1xuICAgIC8vIFdoZXRoZXIgd2UncmUgaW4gYW4gZXJyb3Igc3RhdGUgb3Igbm90LCB3ZSB1cGRhdGUgdGhlIGxvY2F0aW9uIGluIHN0YXRlXG4gICAgLy8gc28gdGhhdCB3aGVuIHdlIGFyZSBpbiBhbiBlcnJvciBzdGF0ZSwgaXQgZ2V0cyByZXNldCB3aGVuIGEgbmV3IGxvY2F0aW9uXG4gICAgLy8gY29tZXMgaW4gYW5kIHRoZSB1c2VyIHJlY292ZXJzIGZyb20gdGhlIGVycm9yLlxuICAgIGlmIChzdGF0ZS5sb2NhdGlvbiAhPT0gcHJvcHMubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVycm9yOiBwcm9wcy5lcnJvcixcbiAgICAgICAgbG9jYXRpb246IHByb3BzLmxvY2F0aW9uXG4gICAgICB9O1xuICAgIH0gLy8gSWYgd2UncmUgbm90IGNoYW5naW5nIGxvY2F0aW9ucywgcHJlc2VydmUgdGhlIGxvY2F0aW9uIGJ1dCBzdGlsbCBzdXJmYWNlXG4gICAgLy8gYW55IG5ldyBlcnJvcnMgdGhhdCBtYXkgY29tZSB0aHJvdWdoLiBXZSByZXRhaW4gdGhlIGV4aXN0aW5nIGVycm9yLCB3ZSBkb1xuICAgIC8vIHRoaXMgYmVjYXVzZSB0aGUgZXJyb3IgcHJvdmlkZWQgZnJvbSB0aGUgYXBwIHN0YXRlIG1heSBiZSBjbGVhcmVkIHdpdGhvdXRcbiAgICAvLyB0aGUgbG9jYXRpb24gY2hhbmdpbmcuXG5cblxuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogcHJvcHMuZXJyb3IgfHwgc3RhdGUuZXJyb3IsXG4gICAgICBsb2NhdGlvbjogc3RhdGUubG9jYXRpb25cbiAgICB9O1xuICB9XG5cbiAgY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IsIGVycm9ySW5mbykge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJSZWFjdCBSb3V0ZXIgY2F1Z2h0IHRoZSBmb2xsb3dpbmcgZXJyb3IgZHVyaW5nIHJlbmRlclwiLCBlcnJvciwgZXJyb3JJbmZvKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5lcnJvciA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlRXJyb3JDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogdGhpcy5zdGF0ZS5lcnJvcixcbiAgICAgIGNoaWxkcmVuOiB0aGlzLnByb3BzLmNvbXBvbmVudFxuICAgIH0pIDogdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgfVxuXG59XG5cbmZ1bmN0aW9uIFJlbmRlcmVkUm91dGUoX3JlZikge1xuICBsZXQge1xuICAgIHJvdXRlQ29udGV4dCxcbiAgICBtYXRjaCxcbiAgICBjaGlsZHJlblxuICB9ID0gX3JlZjtcbiAgbGV0IGRhdGFTdGF0aWNSb3V0ZXJDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChEYXRhU3RhdGljUm91dGVyQ29udGV4dCk7IC8vIFRyYWNrIGhvdyBkZWVwIHdlIGdvdCBpbiBvdXIgcmVuZGVyIHBhc3MgdG8gZW11bGF0ZSBTU1IgY29tcG9uZW50RGlkQ2F0Y2hcbiAgLy8gaW4gYSBEYXRhU3RhdGljUm91dGVyXG5cbiAgaWYgKGRhdGFTdGF0aWNSb3V0ZXJDb250ZXh0ICYmIG1hdGNoLnJvdXRlLmVycm9yRWxlbWVudCkge1xuICAgIGRhdGFTdGF0aWNSb3V0ZXJDb250ZXh0Ll9kZWVwZXN0UmVuZGVyZWRCb3VuZGFyeUlkID0gbWF0Y2gucm91dGUuaWQ7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHJvdXRlQ29udGV4dFxuICB9LCBjaGlsZHJlbik7XG59XG5cbmZ1bmN0aW9uIF9yZW5kZXJNYXRjaGVzKG1hdGNoZXMsIHBhcmVudE1hdGNoZXMsIGRhdGFSb3V0ZXJTdGF0ZSkge1xuICBpZiAocGFyZW50TWF0Y2hlcyA9PT0gdm9pZCAwKSB7XG4gICAgcGFyZW50TWF0Y2hlcyA9IFtdO1xuICB9XG5cbiAgaWYgKG1hdGNoZXMgPT0gbnVsbCkge1xuICAgIGlmIChkYXRhUm91dGVyU3RhdGUgIT0gbnVsbCAmJiBkYXRhUm91dGVyU3RhdGUuZXJyb3JzKSB7XG4gICAgICAvLyBEb24ndCBiYWlsIGlmIHdlIGhhdmUgZGF0YSByb3V0ZXIgZXJyb3JzIHNvIHdlIGNhbiByZW5kZXIgdGhlbSBpbiB0aGVcbiAgICAgIC8vIGJvdW5kYXJ5LiAgVXNlIHRoZSBwcmUtbWF0Y2hlZCAob3Igc2hpbW1lZCkgbWF0Y2hlc1xuICAgICAgbWF0Y2hlcyA9IGRhdGFSb3V0ZXJTdGF0ZS5tYXRjaGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBsZXQgcmVuZGVyZWRNYXRjaGVzID0gbWF0Y2hlczsgLy8gSWYgd2UgaGF2ZSBkYXRhIGVycm9ycywgdHJpbSBtYXRjaGVzIHRvIHRoZSBoaWdoZXN0IGVycm9yIGJvdW5kYXJ5XG5cbiAgbGV0IGVycm9ycyA9IGRhdGFSb3V0ZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogZGF0YVJvdXRlclN0YXRlLmVycm9ycztcblxuICBpZiAoZXJyb3JzICE9IG51bGwpIHtcbiAgICBsZXQgZXJyb3JJbmRleCA9IHJlbmRlcmVkTWF0Y2hlcy5maW5kSW5kZXgobSA9PiBtLnJvdXRlLmlkICYmIChlcnJvcnMgPT0gbnVsbCA/IHZvaWQgMCA6IGVycm9yc1ttLnJvdXRlLmlkXSkpO1xuICAgICEoZXJyb3JJbmRleCA+PSAwKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJDb3VsZCBub3QgZmluZCBhIG1hdGNoaW5nIHJvdXRlIGZvciB0aGUgY3VycmVudCBlcnJvcnM6IFwiICsgZXJyb3JzKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgcmVuZGVyZWRNYXRjaGVzID0gcmVuZGVyZWRNYXRjaGVzLnNsaWNlKDAsIE1hdGgubWluKHJlbmRlcmVkTWF0Y2hlcy5sZW5ndGgsIGVycm9ySW5kZXggKyAxKSk7XG4gIH1cblxuICByZXR1cm4gcmVuZGVyZWRNYXRjaGVzLnJlZHVjZVJpZ2h0KChvdXRsZXQsIG1hdGNoLCBpbmRleCkgPT4ge1xuICAgIGxldCBlcnJvciA9IG1hdGNoLnJvdXRlLmlkID8gZXJyb3JzID09IG51bGwgPyB2b2lkIDAgOiBlcnJvcnNbbWF0Y2gucm91dGUuaWRdIDogbnVsbDsgLy8gT25seSBkYXRhIHJvdXRlcnMgaGFuZGxlIGVycm9yc1xuXG4gICAgbGV0IGVycm9yRWxlbWVudCA9IGRhdGFSb3V0ZXJTdGF0ZSA/IG1hdGNoLnJvdXRlLmVycm9yRWxlbWVudCB8fCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEZWZhdWx0RXJyb3JFbGVtZW50LCBudWxsKSA6IG51bGw7XG5cbiAgICBsZXQgZ2V0Q2hpbGRyZW4gPSAoKSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZW5kZXJlZFJvdXRlLCB7XG4gICAgICBtYXRjaDogbWF0Y2gsXG4gICAgICByb3V0ZUNvbnRleHQ6IHtcbiAgICAgICAgb3V0bGV0LFxuICAgICAgICBtYXRjaGVzOiBwYXJlbnRNYXRjaGVzLmNvbmNhdChyZW5kZXJlZE1hdGNoZXMuc2xpY2UoMCwgaW5kZXggKyAxKSlcbiAgICAgIH1cbiAgICB9LCBlcnJvciA/IGVycm9yRWxlbWVudCA6IG1hdGNoLnJvdXRlLmVsZW1lbnQgIT09IHVuZGVmaW5lZCA/IG1hdGNoLnJvdXRlLmVsZW1lbnQgOiBvdXRsZXQpOyAvLyBPbmx5IHdyYXAgaW4gYW4gZXJyb3IgYm91bmRhcnkgd2l0aGluIGRhdGEgcm91dGVyIHVzYWdlcyB3aGVuIHdlIGhhdmUgYW5cbiAgICAvLyBlcnJvckVsZW1lbnQgb24gdGhpcyByb3V0ZS4gIE90aGVyd2lzZSBsZXQgaXQgYnViYmxlIHVwIHRvIGFuIGFuY2VzdG9yXG4gICAgLy8gZXJyb3JFbGVtZW50XG5cblxuICAgIHJldHVybiBkYXRhUm91dGVyU3RhdGUgJiYgKG1hdGNoLnJvdXRlLmVycm9yRWxlbWVudCB8fCBpbmRleCA9PT0gMCkgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZW5kZXJFcnJvckJvdW5kYXJ5LCB7XG4gICAgICBsb2NhdGlvbjogZGF0YVJvdXRlclN0YXRlLmxvY2F0aW9uLFxuICAgICAgY29tcG9uZW50OiBlcnJvckVsZW1lbnQsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgICBjaGlsZHJlbjogZ2V0Q2hpbGRyZW4oKVxuICAgIH0pIDogZ2V0Q2hpbGRyZW4oKTtcbiAgfSwgbnVsbCk7XG59XG52YXIgRGF0YVJvdXRlckhvb2s7XG5cbihmdW5jdGlvbiAoRGF0YVJvdXRlckhvb2spIHtcbiAgRGF0YVJvdXRlckhvb2tbXCJVc2VSZXZhbGlkYXRvclwiXSA9IFwidXNlUmV2YWxpZGF0b3JcIjtcbn0pKERhdGFSb3V0ZXJIb29rIHx8IChEYXRhUm91dGVySG9vayA9IHt9KSk7XG5cbnZhciBEYXRhUm91dGVyU3RhdGVIb29rO1xuXG4oZnVuY3Rpb24gKERhdGFSb3V0ZXJTdGF0ZUhvb2spIHtcbiAgRGF0YVJvdXRlclN0YXRlSG9va1tcIlVzZUxvYWRlckRhdGFcIl0gPSBcInVzZUxvYWRlckRhdGFcIjtcbiAgRGF0YVJvdXRlclN0YXRlSG9va1tcIlVzZUFjdGlvbkRhdGFcIl0gPSBcInVzZUFjdGlvbkRhdGFcIjtcbiAgRGF0YVJvdXRlclN0YXRlSG9va1tcIlVzZVJvdXRlRXJyb3JcIl0gPSBcInVzZVJvdXRlRXJyb3JcIjtcbiAgRGF0YVJvdXRlclN0YXRlSG9va1tcIlVzZU5hdmlnYXRpb25cIl0gPSBcInVzZU5hdmlnYXRpb25cIjtcbiAgRGF0YVJvdXRlclN0YXRlSG9va1tcIlVzZVJvdXRlTG9hZGVyRGF0YVwiXSA9IFwidXNlUm91dGVMb2FkZXJEYXRhXCI7XG4gIERhdGFSb3V0ZXJTdGF0ZUhvb2tbXCJVc2VNYXRjaGVzXCJdID0gXCJ1c2VNYXRjaGVzXCI7XG4gIERhdGFSb3V0ZXJTdGF0ZUhvb2tbXCJVc2VSZXZhbGlkYXRvclwiXSA9IFwidXNlUmV2YWxpZGF0b3JcIjtcbn0pKERhdGFSb3V0ZXJTdGF0ZUhvb2sgfHwgKERhdGFSb3V0ZXJTdGF0ZUhvb2sgPSB7fSkpO1xuXG5mdW5jdGlvbiBnZXREYXRhUm91dGVyQ29uc29sZUVycm9yKGhvb2tOYW1lKSB7XG4gIHJldHVybiBob29rTmFtZSArIFwiIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBkYXRhIHJvdXRlci4gIFNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9lbi9tYWluL3JvdXRlcnMvcGlja2luZy1hLXJvdXRlci5cIjtcbn1cblxuZnVuY3Rpb24gdXNlRGF0YVJvdXRlckNvbnRleHQoaG9va05hbWUpIHtcbiAgbGV0IGN0eCA9IFJlYWN0LnVzZUNvbnRleHQoRGF0YVJvdXRlckNvbnRleHQpO1xuICAhY3R4ID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBnZXREYXRhUm91dGVyQ29uc29sZUVycm9yKGhvb2tOYW1lKSkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICByZXR1cm4gY3R4O1xufVxuXG5mdW5jdGlvbiB1c2VEYXRhUm91dGVyU3RhdGUoaG9va05hbWUpIHtcbiAgbGV0IHN0YXRlID0gUmVhY3QudXNlQ29udGV4dChEYXRhUm91dGVyU3RhdGVDb250ZXh0KTtcbiAgIXN0YXRlID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBnZXREYXRhUm91dGVyQ29uc29sZUVycm9yKGhvb2tOYW1lKSkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICByZXR1cm4gc3RhdGU7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGN1cnJlbnQgbmF2aWdhdGlvbiwgZGVmYXVsdGluZyB0byBhbiBcImlkbGVcIiBuYXZpZ2F0aW9uIHdoZW5cbiAqIG5vIG5hdmlnYXRpb24gaXMgaW4gcHJvZ3Jlc3NcbiAqL1xuXG5cbmZ1bmN0aW9uIHVzZU5hdmlnYXRpb24oKSB7XG4gIGxldCBzdGF0ZSA9IHVzZURhdGFSb3V0ZXJTdGF0ZShEYXRhUm91dGVyU3RhdGVIb29rLlVzZU5hdmlnYXRpb24pO1xuICByZXR1cm4gc3RhdGUubmF2aWdhdGlvbjtcbn1cbi8qKlxuICogUmV0dXJucyBhIHJldmFsaWRhdGUgZnVuY3Rpb24gZm9yIG1hbnVhbGx5IHRyaWdnZXJpbmcgcmV2YWxpZGF0aW9uLCBhcyB3ZWxsXG4gKiBhcyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbnkgbWFudWFsIHJldmFsaWRhdGlvbnNcbiAqL1xuXG5mdW5jdGlvbiB1c2VSZXZhbGlkYXRvcigpIHtcbiAgbGV0IGRhdGFSb3V0ZXJDb250ZXh0ID0gdXNlRGF0YVJvdXRlckNvbnRleHQoRGF0YVJvdXRlckhvb2suVXNlUmV2YWxpZGF0b3IpO1xuICBsZXQgc3RhdGUgPSB1c2VEYXRhUm91dGVyU3RhdGUoRGF0YVJvdXRlclN0YXRlSG9vay5Vc2VSZXZhbGlkYXRvcik7XG4gIHJldHVybiB7XG4gICAgcmV2YWxpZGF0ZTogZGF0YVJvdXRlckNvbnRleHQucm91dGVyLnJldmFsaWRhdGUsXG4gICAgc3RhdGU6IHN0YXRlLnJldmFsaWRhdGlvblxuICB9O1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhY3RpdmUgcm91dGUgbWF0Y2hlcywgdXNlZnVsIGZvciBhY2Nlc3NpbmcgbG9hZGVyRGF0YSBmb3JcbiAqIHBhcmVudC9jaGlsZCByb3V0ZXMgb3IgdGhlIHJvdXRlIFwiaGFuZGxlXCIgcHJvcGVydHlcbiAqL1xuXG5mdW5jdGlvbiB1c2VNYXRjaGVzKCkge1xuICBsZXQge1xuICAgIG1hdGNoZXMsXG4gICAgbG9hZGVyRGF0YVxuICB9ID0gdXNlRGF0YVJvdXRlclN0YXRlKERhdGFSb3V0ZXJTdGF0ZUhvb2suVXNlTWF0Y2hlcyk7XG4gIHJldHVybiBSZWFjdC51c2VNZW1vKCgpID0+IG1hdGNoZXMubWFwKG1hdGNoID0+IHtcbiAgICBsZXQge1xuICAgICAgcGF0aG5hbWUsXG4gICAgICBwYXJhbXNcbiAgICB9ID0gbWF0Y2g7IC8vIE5vdGU6IFRoaXMgc3RydWN0dXJlIG1hdGNoZXMgdGhhdCBjcmVhdGVkIGJ5IGNyZWF0ZVVzZU1hdGNoZXNNYXRjaFxuICAgIC8vIGluIHRoZSBAcmVtaXgtcnVuL3JvdXRlciAsIHNvIGlmIHlvdSBjaGFuZ2UgdGhpcyBwbGVhc2UgYWxzbyBjaGFuZ2VcbiAgICAvLyB0aGF0IDopICBFdmVudHVhbGx5IHdlJ2xsIERSWSB0aGlzIHVwXG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IG1hdGNoLnJvdXRlLmlkLFxuICAgICAgcGF0aG5hbWUsXG4gICAgICBwYXJhbXMsXG4gICAgICBkYXRhOiBsb2FkZXJEYXRhW21hdGNoLnJvdXRlLmlkXSxcbiAgICAgIGhhbmRsZTogbWF0Y2gucm91dGUuaGFuZGxlXG4gICAgfTtcbiAgfSksIFttYXRjaGVzLCBsb2FkZXJEYXRhXSk7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGxvYWRlciBkYXRhIGZvciB0aGUgbmVhcmVzdCBhbmNlc3RvciBSb3V0ZSBsb2FkZXJcbiAqL1xuXG5mdW5jdGlvbiB1c2VMb2FkZXJEYXRhKCkge1xuICBsZXQgc3RhdGUgPSB1c2VEYXRhUm91dGVyU3RhdGUoRGF0YVJvdXRlclN0YXRlSG9vay5Vc2VMb2FkZXJEYXRhKTtcbiAgbGV0IHJvdXRlID0gUmVhY3QudXNlQ29udGV4dChSb3V0ZUNvbnRleHQpO1xuICAhcm91dGUgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwidXNlTG9hZGVyRGF0YSBtdXN0IGJlIHVzZWQgaW5zaWRlIGEgUm91dGVDb250ZXh0XCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgbGV0IHRoaXNSb3V0ZSA9IHJvdXRlLm1hdGNoZXNbcm91dGUubWF0Y2hlcy5sZW5ndGggLSAxXTtcbiAgIXRoaXNSb3V0ZS5yb3V0ZS5pZCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJ1c2VMb2FkZXJEYXRhIGNhbiBvbmx5IGJlIHVzZWQgb24gcm91dGVzIHRoYXQgY29udGFpbiBhIHVuaXF1ZSBcXFwiaWRcXFwiXCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgcmV0dXJuIHN0YXRlLmxvYWRlckRhdGFbdGhpc1JvdXRlLnJvdXRlLmlkXTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgbG9hZGVyRGF0YSBmb3IgdGhlIGdpdmVuIHJvdXRlSWRcbiAqL1xuXG5mdW5jdGlvbiB1c2VSb3V0ZUxvYWRlckRhdGEocm91dGVJZCkge1xuICBsZXQgc3RhdGUgPSB1c2VEYXRhUm91dGVyU3RhdGUoRGF0YVJvdXRlclN0YXRlSG9vay5Vc2VSb3V0ZUxvYWRlckRhdGEpO1xuICByZXR1cm4gc3RhdGUubG9hZGVyRGF0YVtyb3V0ZUlkXTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgYWN0aW9uIGRhdGEgZm9yIHRoZSBuZWFyZXN0IGFuY2VzdG9yIFJvdXRlIGFjdGlvblxuICovXG5cbmZ1bmN0aW9uIHVzZUFjdGlvbkRhdGEoKSB7XG4gIGxldCBzdGF0ZSA9IHVzZURhdGFSb3V0ZXJTdGF0ZShEYXRhUm91dGVyU3RhdGVIb29rLlVzZUFjdGlvbkRhdGEpO1xuICBsZXQgcm91dGUgPSBSZWFjdC51c2VDb250ZXh0KFJvdXRlQ29udGV4dCk7XG4gICFyb3V0ZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJ1c2VBY3Rpb25EYXRhIG11c3QgYmUgdXNlZCBpbnNpZGUgYSBSb3V0ZUNvbnRleHRcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcygoc3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IHN0YXRlLmFjdGlvbkRhdGEpIHx8IHt9KVswXTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgbmVhcmVzdCBhbmNlc3RvciBSb3V0ZSBlcnJvciwgd2hpY2ggY291bGQgYmUgYSBsb2FkZXIvYWN0aW9uXG4gKiBlcnJvciBvciBhIHJlbmRlciBlcnJvci4gIFRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20geW91clxuICogZXJyb3JFbGVtZW50IHRvIGRpc3BsYXkgYSBwcm9wZXIgZXJyb3IgbWVzc2FnZS5cbiAqL1xuXG5mdW5jdGlvbiB1c2VSb3V0ZUVycm9yKCkge1xuICB2YXIgX3N0YXRlJGVycm9ycztcblxuICBsZXQgZXJyb3IgPSBSZWFjdC51c2VDb250ZXh0KFJvdXRlRXJyb3JDb250ZXh0KTtcbiAgbGV0IHN0YXRlID0gdXNlRGF0YVJvdXRlclN0YXRlKERhdGFSb3V0ZXJTdGF0ZUhvb2suVXNlUm91dGVFcnJvcik7XG4gIGxldCByb3V0ZSA9IFJlYWN0LnVzZUNvbnRleHQoUm91dGVDb250ZXh0KTtcbiAgbGV0IHRoaXNSb3V0ZSA9IHJvdXRlLm1hdGNoZXNbcm91dGUubWF0Y2hlcy5sZW5ndGggLSAxXTsgLy8gSWYgdGhpcyB3YXMgYSByZW5kZXIgZXJyb3IsIHdlIHB1dCBpdCBpbiBhIFJvdXRlRXJyb3IgY29udGV4dCBpbnNpZGVcbiAgLy8gb2YgUmVuZGVyRXJyb3JCb3VuZGFyeVxuXG4gIGlmIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvcjtcbiAgfVxuXG4gICFyb3V0ZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJ1c2VSb3V0ZUVycm9yIG11c3QgYmUgdXNlZCBpbnNpZGUgYSBSb3V0ZUNvbnRleHRcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAhdGhpc1JvdXRlLnJvdXRlLmlkID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcInVzZVJvdXRlRXJyb3IgY2FuIG9ubHkgYmUgdXNlZCBvbiByb3V0ZXMgdGhhdCBjb250YWluIGEgdW5pcXVlIFxcXCJpZFxcXCJcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwOyAvLyBPdGhlcndpc2UgbG9vayBmb3IgZXJyb3JzIGZyb20gb3VyIGRhdGEgcm91dGVyIHN0YXRlXG5cbiAgcmV0dXJuIChfc3RhdGUkZXJyb3JzID0gc3RhdGUuZXJyb3JzKSA9PSBudWxsID8gdm9pZCAwIDogX3N0YXRlJGVycm9yc1t0aGlzUm91dGUucm91dGUuaWRdO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBoYXBweS1wYXRoIGRhdGEgZnJvbSB0aGUgbmVhcmVzdCBhbmNlc3RvciA8QXdhaXQgLz4gdmFsdWVcbiAqL1xuXG5mdW5jdGlvbiB1c2VBc3luY1ZhbHVlKCkge1xuICBsZXQgdmFsdWUgPSBSZWFjdC51c2VDb250ZXh0KEF3YWl0Q29udGV4dCk7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWUuX2RhdGE7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGVycm9yIGZyb20gdGhlIG5lYXJlc3QgYW5jZXN0b3IgPEF3YWl0IC8+IHZhbHVlXG4gKi9cblxuZnVuY3Rpb24gdXNlQXN5bmNFcnJvcigpIHtcbiAgbGV0IHZhbHVlID0gUmVhY3QudXNlQ29udGV4dChBd2FpdENvbnRleHQpO1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlLl9lcnJvcjtcbn1cbmNvbnN0IGFscmVhZHlXYXJuZWQgPSB7fTtcblxuZnVuY3Rpb24gd2FybmluZ09uY2Uoa2V5LCBjb25kLCBtZXNzYWdlKSB7XG4gIGlmICghY29uZCAmJiAhYWxyZWFkeVdhcm5lZFtrZXldKSB7XG4gICAgYWxyZWFkeVdhcm5lZFtrZXldID0gdHJ1ZTtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKGZhbHNlLCBtZXNzYWdlKSA6IHZvaWQgMDtcbiAgfVxufVxuXG4vKipcbiAqIEdpdmVuIGEgUmVtaXggUm91dGVyIGluc3RhbmNlLCByZW5kZXIgdGhlIGFwcHJvcHJpYXRlIFVJXG4gKi9cbmZ1bmN0aW9uIFJvdXRlclByb3ZpZGVyKF9yZWYpIHtcbiAgbGV0IHtcbiAgICBmYWxsYmFja0VsZW1lbnQsXG4gICAgcm91dGVyXG4gIH0gPSBfcmVmO1xuICAvLyBTeW5jIHJvdXRlciBzdGF0ZSB0byBvdXIgY29tcG9uZW50IHN0YXRlIHRvIGZvcmNlIHJlLXJlbmRlcnNcbiAgbGV0IHN0YXRlID0gdXNlU3luY0V4dGVybmFsU3RvcmUocm91dGVyLnN1YnNjcmliZSwgKCkgPT4gcm91dGVyLnN0YXRlLCAvLyBXZSBoYXZlIHRvIHByb3ZpZGUgdGhpcyBzbyBSZWFjdEAxOCBkb2Vzbid0IGNvbXBsYWluIGR1cmluZyBoeWRyYXRpb24sXG4gIC8vIGJ1dCB3ZSBwYXNzIG91ciBzZXJpYWxpemVkIGh5ZHJhdGlvbiBkYXRhIGludG8gdGhlIHJvdXRlciBzbyBzdGF0ZSBoZXJlXG4gIC8vIGlzIGFscmVhZHkgc3luY2VkIHdpdGggd2hhdCB0aGUgc2VydmVyIHNhd1xuICAoKSA9PiByb3V0ZXIuc3RhdGUpO1xuICBsZXQgbmF2aWdhdG9yID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0ZUhyZWY6IHJvdXRlci5jcmVhdGVIcmVmLFxuICAgICAgZ286IG4gPT4gcm91dGVyLm5hdmlnYXRlKG4pLFxuICAgICAgcHVzaDogKHRvLCBzdGF0ZSwgb3B0cykgPT4gcm91dGVyLm5hdmlnYXRlKHRvLCB7XG4gICAgICAgIHN0YXRlLFxuICAgICAgICBwcmV2ZW50U2Nyb2xsUmVzZXQ6IG9wdHMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdHMucHJldmVudFNjcm9sbFJlc2V0XG4gICAgICB9KSxcbiAgICAgIHJlcGxhY2U6ICh0bywgc3RhdGUsIG9wdHMpID0+IHJvdXRlci5uYXZpZ2F0ZSh0bywge1xuICAgICAgICByZXBsYWNlOiB0cnVlLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgcHJldmVudFNjcm9sbFJlc2V0OiBvcHRzID09IG51bGwgPyB2b2lkIDAgOiBvcHRzLnByZXZlbnRTY3JvbGxSZXNldFxuICAgICAgfSlcbiAgICB9O1xuICB9LCBbcm91dGVyXSk7XG4gIGxldCBiYXNlbmFtZSA9IHJvdXRlci5iYXNlbmFtZSB8fCBcIi9cIjtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERhdGFSb3V0ZXJDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHtcbiAgICAgIHJvdXRlcixcbiAgICAgIG5hdmlnYXRvcixcbiAgICAgIHN0YXRpYzogZmFsc2UsXG4gICAgICAvLyBEbyB3ZSBuZWVkIHRoaXM/XG4gICAgICBiYXNlbmFtZVxuICAgIH1cbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRGF0YVJvdXRlclN0YXRlQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBzdGF0ZVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZXIsIHtcbiAgICBiYXNlbmFtZTogcm91dGVyLmJhc2VuYW1lLFxuICAgIGxvY2F0aW9uOiByb3V0ZXIuc3RhdGUubG9jYXRpb24sXG4gICAgbmF2aWdhdGlvblR5cGU6IHJvdXRlci5zdGF0ZS5oaXN0b3J5QWN0aW9uLFxuICAgIG5hdmlnYXRvcjogbmF2aWdhdG9yXG4gIH0sIHJvdXRlci5zdGF0ZS5pbml0aWFsaXplZCA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlcywgbnVsbCkgOiBmYWxsYmFja0VsZW1lbnQpKSk7XG59XG5cbi8qKlxuICogQSA8Um91dGVyPiB0aGF0IHN0b3JlcyBhbGwgZW50cmllcyBpbiBtZW1vcnkuXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9kb2NzL2VuL3Y2L3JvdXRlcnMvbWVtb3J5LXJvdXRlclxuICovXG5mdW5jdGlvbiBNZW1vcnlSb3V0ZXIoX3JlZjIpIHtcbiAgbGV0IHtcbiAgICBiYXNlbmFtZSxcbiAgICBjaGlsZHJlbixcbiAgICBpbml0aWFsRW50cmllcyxcbiAgICBpbml0aWFsSW5kZXhcbiAgfSA9IF9yZWYyO1xuICBsZXQgaGlzdG9yeVJlZiA9IFJlYWN0LnVzZVJlZigpO1xuXG4gIGlmIChoaXN0b3J5UmVmLmN1cnJlbnQgPT0gbnVsbCkge1xuICAgIGhpc3RvcnlSZWYuY3VycmVudCA9IGNyZWF0ZU1lbW9yeUhpc3Rvcnkoe1xuICAgICAgaW5pdGlhbEVudHJpZXMsXG4gICAgICBpbml0aWFsSW5kZXgsXG4gICAgICB2NUNvbXBhdDogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgbGV0IGhpc3RvcnkgPSBoaXN0b3J5UmVmLmN1cnJlbnQ7XG4gIGxldCBbc3RhdGUsIHNldFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKHtcbiAgICBhY3Rpb246IGhpc3RvcnkuYWN0aW9uLFxuICAgIGxvY2F0aW9uOiBoaXN0b3J5LmxvY2F0aW9uXG4gIH0pO1xuICBSZWFjdC51c2VMYXlvdXRFZmZlY3QoKCkgPT4gaGlzdG9yeS5saXN0ZW4oc2V0U3RhdGUpLCBbaGlzdG9yeV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVyLCB7XG4gICAgYmFzZW5hbWU6IGJhc2VuYW1lLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBsb2NhdGlvbjogc3RhdGUubG9jYXRpb24sXG4gICAgbmF2aWdhdGlvblR5cGU6IHN0YXRlLmFjdGlvbixcbiAgICBuYXZpZ2F0b3I6IGhpc3RvcnlcbiAgfSk7XG59XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCBsb2NhdGlvbi5cbiAqXG4gKiBOb3RlOiBUaGlzIEFQSSBpcyBtb3N0bHkgdXNlZnVsIGluIFJlYWN0LkNvbXBvbmVudCBzdWJjbGFzc2VzIHRoYXQgYXJlIG5vdFxuICogYWJsZSB0byB1c2UgaG9va3MuIEluIGZ1bmN0aW9uYWwgY29tcG9uZW50cywgd2UgcmVjb21tZW5kIHlvdSB1c2UgdGhlXG4gKiBgdXNlTmF2aWdhdGVgIGhvb2sgaW5zdGVhZC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvY29tcG9uZW50cy9uYXZpZ2F0ZVxuICovXG5mdW5jdGlvbiBOYXZpZ2F0ZShfcmVmMykge1xuICBsZXQge1xuICAgIHRvLFxuICAgIHJlcGxhY2UsXG4gICAgc3RhdGUsXG4gICAgcmVsYXRpdmVcbiAgfSA9IF9yZWYzO1xuICAhdXNlSW5Sb3V0ZXJDb250ZXh0KCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIC8vIFRPRE86IFRoaXMgZXJyb3IgaXMgcHJvYmFibHkgYmVjYXVzZSB0aGV5IHNvbWVob3cgaGF2ZSAyIHZlcnNpb25zIG9mXG4gIC8vIHRoZSByb3V0ZXIgbG9hZGVkLiBXZSBjYW4gaGVscCB0aGVtIHVuZGVyc3RhbmQgaG93IHRvIGF2b2lkIHRoYXQuXG4gIFwiPE5hdmlnYXRlPiBtYXkgYmUgdXNlZCBvbmx5IGluIHRoZSBjb250ZXh0IG9mIGEgPFJvdXRlcj4gY29tcG9uZW50LlwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoIVJlYWN0LnVzZUNvbnRleHQoTmF2aWdhdGlvbkNvbnRleHQpLnN0YXRpYywgXCI8TmF2aWdhdGU+IG11c3Qgbm90IGJlIHVzZWQgb24gdGhlIGluaXRpYWwgcmVuZGVyIGluIGEgPFN0YXRpY1JvdXRlcj4uIFwiICsgXCJUaGlzIGlzIGEgbm8tb3AsIGJ1dCB5b3Ugc2hvdWxkIG1vZGlmeSB5b3VyIGNvZGUgc28gdGhlIDxOYXZpZ2F0ZT4gaXMgXCIgKyBcIm9ubHkgZXZlciByZW5kZXJlZCBpbiByZXNwb25zZSB0byBzb21lIHVzZXIgaW50ZXJhY3Rpb24gb3Igc3RhdGUgY2hhbmdlLlwiKSA6IHZvaWQgMDtcbiAgbGV0IGRhdGFSb3V0ZXJTdGF0ZSA9IFJlYWN0LnVzZUNvbnRleHQoRGF0YVJvdXRlclN0YXRlQ29udGV4dCk7XG4gIGxldCBuYXZpZ2F0ZSA9IHVzZU5hdmlnYXRlKCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gQXZvaWQga2lja2luZyBvZmYgbXVsdGlwbGUgbmF2aWdhdGlvbnMgaWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhXG4gICAgLy8gZGF0YS1yb3V0ZXIgbmF2aWdhdGlvbiwgc2luY2UgY29tcG9uZW50cyBnZXQgcmUtcmVuZGVyZWQgd2hlbiB3ZSBlbnRlclxuICAgIC8vIGEgc3VibWl0dGluZy9sb2FkaW5nIHN0YXRlXG4gICAgaWYgKGRhdGFSb3V0ZXJTdGF0ZSAmJiBkYXRhUm91dGVyU3RhdGUubmF2aWdhdGlvbi5zdGF0ZSAhPT0gXCJpZGxlXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBuYXZpZ2F0ZSh0bywge1xuICAgICAgcmVwbGFjZSxcbiAgICAgIHN0YXRlLFxuICAgICAgcmVsYXRpdmVcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNoaWxkIHJvdXRlJ3MgZWxlbWVudCwgaWYgdGhlcmUgaXMgb25lLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vZG9jcy9lbi92Ni9jb21wb25lbnRzL291dGxldFxuICovXG5mdW5jdGlvbiBPdXRsZXQocHJvcHMpIHtcbiAgcmV0dXJuIHVzZU91dGxldChwcm9wcy5jb250ZXh0KTtcbn1cblxuLyoqXG4gKiBEZWNsYXJlcyBhbiBlbGVtZW50IHRoYXQgc2hvdWxkIGJlIHJlbmRlcmVkIGF0IGEgY2VydGFpbiBVUkwgcGF0aC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvY29tcG9uZW50cy9yb3V0ZVxuICovXG5mdW5jdGlvbiBSb3V0ZShfcHJvcHMpIHtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIkEgPFJvdXRlPiBpcyBvbmx5IGV2ZXIgdG8gYmUgdXNlZCBhcyB0aGUgY2hpbGQgb2YgPFJvdXRlcz4gZWxlbWVudCwgXCIgKyBcIm5ldmVyIHJlbmRlcmVkIGRpcmVjdGx5LiBQbGVhc2Ugd3JhcCB5b3VyIDxSb3V0ZT4gaW4gYSA8Um91dGVzPi5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBsb2NhdGlvbiBjb250ZXh0IGZvciB0aGUgcmVzdCBvZiB0aGUgYXBwLlxuICpcbiAqIE5vdGU6IFlvdSB1c3VhbGx5IHdvbid0IHJlbmRlciBhIDxSb3V0ZXI+IGRpcmVjdGx5LiBJbnN0ZWFkLCB5b3UnbGwgcmVuZGVyIGFcbiAqIHJvdXRlciB0aGF0IGlzIG1vcmUgc3BlY2lmaWMgdG8geW91ciBlbnZpcm9ubWVudCBzdWNoIGFzIGEgPEJyb3dzZXJSb3V0ZXI+XG4gKiBpbiB3ZWIgYnJvd3NlcnMgb3IgYSA8U3RhdGljUm91dGVyPiBmb3Igc2VydmVyIHJlbmRlcmluZy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvcm91dGVycy9yb3V0ZXJcbiAqL1xuZnVuY3Rpb24gUm91dGVyKF9yZWY0KSB7XG4gIGxldCB7XG4gICAgYmFzZW5hbWU6IGJhc2VuYW1lUHJvcCA9IFwiL1wiLFxuICAgIGNoaWxkcmVuID0gbnVsbCxcbiAgICBsb2NhdGlvbjogbG9jYXRpb25Qcm9wLFxuICAgIG5hdmlnYXRpb25UeXBlID0gQWN0aW9uLlBvcCxcbiAgICBuYXZpZ2F0b3IsXG4gICAgc3RhdGljOiBzdGF0aWNQcm9wID0gZmFsc2VcbiAgfSA9IF9yZWY0O1xuICAhIXVzZUluUm91dGVyQ29udGV4dCgpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIllvdSBjYW5ub3QgcmVuZGVyIGEgPFJvdXRlcj4gaW5zaWRlIGFub3RoZXIgPFJvdXRlcj4uXCIgKyBcIiBZb3Ugc2hvdWxkIG5ldmVyIGhhdmUgbW9yZSB0aGFuIG9uZSBpbiB5b3VyIGFwcC5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwOyAvLyBQcmVzZXJ2ZSB0cmFpbGluZyBzbGFzaGVzIG9uIGJhc2VuYW1lLCBzbyB3ZSBjYW4gbGV0IHRoZSB1c2VyIGNvbnRyb2xcbiAgLy8gdGhlIGVuZm9yY2VtZW50IG9mIHRyYWlsaW5nIHNsYXNoZXMgdGhyb3VnaG91dCB0aGUgYXBwXG5cbiAgbGV0IGJhc2VuYW1lID0gYmFzZW5hbWVQcm9wLnJlcGxhY2UoL15cXC8qLywgXCIvXCIpO1xuICBsZXQgbmF2aWdhdGlvbkNvbnRleHQgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgYmFzZW5hbWUsXG4gICAgbmF2aWdhdG9yLFxuICAgIHN0YXRpYzogc3RhdGljUHJvcFxuICB9KSwgW2Jhc2VuYW1lLCBuYXZpZ2F0b3IsIHN0YXRpY1Byb3BdKTtcblxuICBpZiAodHlwZW9mIGxvY2F0aW9uUHJvcCA9PT0gXCJzdHJpbmdcIikge1xuICAgIGxvY2F0aW9uUHJvcCA9IHBhcnNlUGF0aChsb2NhdGlvblByb3ApO1xuICB9XG5cbiAgbGV0IHtcbiAgICBwYXRobmFtZSA9IFwiL1wiLFxuICAgIHNlYXJjaCA9IFwiXCIsXG4gICAgaGFzaCA9IFwiXCIsXG4gICAgc3RhdGUgPSBudWxsLFxuICAgIGtleSA9IFwiZGVmYXVsdFwiXG4gIH0gPSBsb2NhdGlvblByb3A7XG4gIGxldCBsb2NhdGlvbiA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCB0cmFpbGluZ1BhdGhuYW1lID0gc3RyaXBCYXNlbmFtZShwYXRobmFtZSwgYmFzZW5hbWUpO1xuXG4gICAgaWYgKHRyYWlsaW5nUGF0aG5hbWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGhuYW1lOiB0cmFpbGluZ1BhdGhuYW1lLFxuICAgICAgc2VhcmNoLFxuICAgICAgaGFzaCxcbiAgICAgIHN0YXRlLFxuICAgICAga2V5XG4gICAgfTtcbiAgfSwgW2Jhc2VuYW1lLCBwYXRobmFtZSwgc2VhcmNoLCBoYXNoLCBzdGF0ZSwga2V5XSk7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcobG9jYXRpb24gIT0gbnVsbCwgXCI8Um91dGVyIGJhc2VuYW1lPVxcXCJcIiArIGJhc2VuYW1lICsgXCJcXFwiPiBpcyBub3QgYWJsZSB0byBtYXRjaCB0aGUgVVJMIFwiICsgKFwiXFxcIlwiICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoICsgXCJcXFwiIGJlY2F1c2UgaXQgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgXCIpICsgXCJiYXNlbmFtZSwgc28gdGhlIDxSb3V0ZXI+IHdvbid0IHJlbmRlciBhbnl0aGluZy5cIikgOiB2b2lkIDA7XG5cbiAgaWYgKGxvY2F0aW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChOYXZpZ2F0aW9uQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBuYXZpZ2F0aW9uQ29udGV4dFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMb2NhdGlvbkNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgdmFsdWU6IHtcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgbmF2aWdhdGlvblR5cGVcbiAgICB9XG4gIH0pKTtcbn1cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3IgYSBuZXN0ZWQgdHJlZSBvZiA8Um91dGU+IGVsZW1lbnRzIHRoYXQgcmVuZGVycyB0aGUgYnJhbmNoXG4gKiB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgY3VycmVudCBsb2NhdGlvbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Ryb3V0ZXIuY29tL2RvY3MvZW4vdjYvY29tcG9uZW50cy9yb3V0ZXNcbiAqL1xuZnVuY3Rpb24gUm91dGVzKF9yZWY1KSB7XG4gIGxldCB7XG4gICAgY2hpbGRyZW4sXG4gICAgbG9jYXRpb25cbiAgfSA9IF9yZWY1O1xuICBsZXQgZGF0YVJvdXRlckNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KERhdGFSb3V0ZXJDb250ZXh0KTsgLy8gV2hlbiBpbiBhIERhdGFSb3V0ZXJDb250ZXh0IF93aXRob3V0XyBjaGlsZHJlbiwgd2UgdXNlIHRoZSByb3V0ZXIgcm91dGVzXG4gIC8vIGRpcmVjdGx5LiAgSWYgd2UgaGF2ZSBjaGlsZHJlbiwgdGhlbiB3ZSdyZSBpbiBhIGRlc2NlbmRhbnQgdHJlZSBhbmQgd2VcbiAgLy8gbmVlZCB0byB1c2UgY2hpbGQgcm91dGVzLlxuXG4gIGxldCByb3V0ZXMgPSBkYXRhUm91dGVyQ29udGV4dCAmJiAhY2hpbGRyZW4gPyBkYXRhUm91dGVyQ29udGV4dC5yb3V0ZXIucm91dGVzIDogY3JlYXRlUm91dGVzRnJvbUNoaWxkcmVuKGNoaWxkcmVuKTtcbiAgcmV0dXJuIHVzZVJvdXRlcyhyb3V0ZXMsIGxvY2F0aW9uKTtcbn1cblxuLyoqXG4gKiBDb21wb25lbnQgdG8gdXNlIGZvciByZW5kZXJpbmcgbGF6aWx5IGxvYWRlZCBkYXRhIGZyb20gcmV0dXJuaW5nIGRlZmVyKClcbiAqIGluIGEgbG9hZGVyIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIEF3YWl0KF9yZWY2KSB7XG4gIGxldCB7XG4gICAgY2hpbGRyZW4sXG4gICAgZXJyb3JFbGVtZW50LFxuICAgIHJlc29sdmVcbiAgfSA9IF9yZWY2O1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQXdhaXRFcnJvckJvdW5kYXJ5LCB7XG4gICAgcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICBlcnJvckVsZW1lbnQ6IGVycm9yRWxlbWVudFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZXNvbHZlQXdhaXQsIG51bGwsIGNoaWxkcmVuKSk7XG59XG52YXIgQXdhaXRSZW5kZXJTdGF0dXM7XG5cbihmdW5jdGlvbiAoQXdhaXRSZW5kZXJTdGF0dXMpIHtcbiAgQXdhaXRSZW5kZXJTdGF0dXNbQXdhaXRSZW5kZXJTdGF0dXNbXCJwZW5kaW5nXCJdID0gMF0gPSBcInBlbmRpbmdcIjtcbiAgQXdhaXRSZW5kZXJTdGF0dXNbQXdhaXRSZW5kZXJTdGF0dXNbXCJzdWNjZXNzXCJdID0gMV0gPSBcInN1Y2Nlc3NcIjtcbiAgQXdhaXRSZW5kZXJTdGF0dXNbQXdhaXRSZW5kZXJTdGF0dXNbXCJlcnJvclwiXSA9IDJdID0gXCJlcnJvclwiO1xufSkoQXdhaXRSZW5kZXJTdGF0dXMgfHwgKEF3YWl0UmVuZGVyU3RhdHVzID0ge30pKTtcblxuY29uc3QgbmV2ZXJTZXR0bGVkUHJvbWlzZSA9IG5ldyBQcm9taXNlKCgpID0+IHt9KTtcblxuY2xhc3MgQXdhaXRFcnJvckJvdW5kYXJ5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3JcbiAgICB9O1xuICB9XG5cbiAgY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IsIGVycm9ySW5mbykge1xuICAgIGNvbnNvbGUuZXJyb3IoXCI8QXdhaXQ+IGNhdWdodCB0aGUgZm9sbG93aW5nIGVycm9yIGR1cmluZyByZW5kZXJcIiwgZXJyb3IsIGVycm9ySW5mbyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgbGV0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZXJyb3JFbGVtZW50LFxuICAgICAgcmVzb2x2ZVxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGxldCBwcm9taXNlID0gbnVsbDtcbiAgICBsZXQgc3RhdHVzID0gQXdhaXRSZW5kZXJTdGF0dXMucGVuZGluZztcblxuICAgIGlmICghKHJlc29sdmUgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgICAgLy8gRGlkbid0IGdldCBhIHByb21pc2UgLSBwcm92aWRlIGFzIGEgcmVzb2x2ZWQgcHJvbWlzZVxuICAgICAgc3RhdHVzID0gQXdhaXRSZW5kZXJTdGF0dXMuc3VjY2VzcztcbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9taXNlLCBcIl90cmFja2VkXCIsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB0cnVlXG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9taXNlLCBcIl9kYXRhXCIsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUuZXJyb3IpIHtcbiAgICAgIC8vIENhdWdodCBhIHJlbmRlciBlcnJvciwgcHJvdmlkZSBpdCBhcyBhIHJlamVjdGVkIHByb21pc2VcbiAgICAgIHN0YXR1cyA9IEF3YWl0UmVuZGVyU3RhdHVzLmVycm9yO1xuICAgICAgbGV0IHJlbmRlckVycm9yID0gdGhpcy5zdGF0ZS5lcnJvcjtcbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlamVjdCgpLmNhdGNoKCgpID0+IHt9KTsgLy8gQXZvaWQgdW5oYW5kbGVkIHJlamVjdGlvbiB3YXJuaW5nc1xuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvbWlzZSwgXCJfdHJhY2tlZFwiLCB7XG4gICAgICAgIGdldDogKCkgPT4gdHJ1ZVxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvbWlzZSwgXCJfZXJyb3JcIiwge1xuICAgICAgICBnZXQ6ICgpID0+IHJlbmRlckVycm9yXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHJlc29sdmUuX3RyYWNrZWQpIHtcbiAgICAgIC8vIEFscmVhZHkgdHJhY2tlZCBwcm9taXNlIC0gY2hlY2sgY29udGVudHNcbiAgICAgIHByb21pc2UgPSByZXNvbHZlO1xuICAgICAgc3RhdHVzID0gcHJvbWlzZS5fZXJyb3IgIT09IHVuZGVmaW5lZCA/IEF3YWl0UmVuZGVyU3RhdHVzLmVycm9yIDogcHJvbWlzZS5fZGF0YSAhPT0gdW5kZWZpbmVkID8gQXdhaXRSZW5kZXJTdGF0dXMuc3VjY2VzcyA6IEF3YWl0UmVuZGVyU3RhdHVzLnBlbmRpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJhdyAodW50cmFja2VkKSBwcm9taXNlIC0gdHJhY2sgaXRcbiAgICAgIHN0YXR1cyA9IEF3YWl0UmVuZGVyU3RhdHVzLnBlbmRpbmc7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzb2x2ZSwgXCJfdHJhY2tlZFwiLCB7XG4gICAgICAgIGdldDogKCkgPT4gdHJ1ZVxuICAgICAgfSk7XG4gICAgICBwcm9taXNlID0gcmVzb2x2ZS50aGVuKGRhdGEgPT4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc29sdmUsIFwiX2RhdGFcIiwge1xuICAgICAgICBnZXQ6ICgpID0+IGRhdGFcbiAgICAgIH0pLCBlcnJvciA9PiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzb2x2ZSwgXCJfZXJyb3JcIiwge1xuICAgICAgICBnZXQ6ICgpID0+IGVycm9yXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cyA9PT0gQXdhaXRSZW5kZXJTdGF0dXMuZXJyb3IgJiYgcHJvbWlzZS5fZXJyb3IgaW5zdGFuY2VvZiBBYm9ydGVkRGVmZXJyZWRFcnJvcikge1xuICAgICAgLy8gRnJlZXplIHRoZSBVSSBieSB0aHJvd2luZyBhIG5ldmVyIHJlc29sdmVkIHByb21pc2VcbiAgICAgIHRocm93IG5ldmVyU2V0dGxlZFByb21pc2U7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cyA9PT0gQXdhaXRSZW5kZXJTdGF0dXMuZXJyb3IgJiYgIWVycm9yRWxlbWVudCkge1xuICAgICAgLy8gTm8gZXJyb3JFbGVtZW50LCB0aHJvdyB0byB0aGUgbmVhcmVzdCByb3V0ZS1sZXZlbCBlcnJvciBib3VuZGFyeVxuICAgICAgdGhyb3cgcHJvbWlzZS5fZXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cyA9PT0gQXdhaXRSZW5kZXJTdGF0dXMuZXJyb3IpIHtcbiAgICAgIC8vIFJlbmRlciB2aWEgb3VyIGVycm9yRWxlbWVudFxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEF3YWl0Q29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogcHJvbWlzZSxcbiAgICAgICAgY2hpbGRyZW46IGVycm9yRWxlbWVudFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cyA9PT0gQXdhaXRSZW5kZXJTdGF0dXMuc3VjY2Vzcykge1xuICAgICAgLy8gUmVuZGVyIGNoaWxkcmVuIHdpdGggcmVzb2x2ZWQgdmFsdWVcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBd2FpdENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IHByb21pc2UsXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgfSk7XG4gICAgfSAvLyBUaHJvdyB0byB0aGUgc3VzcGVuc2UgYm91bmRhcnlcblxuXG4gICAgdGhyb3cgcHJvbWlzZTtcbiAgfVxuXG59XG4vKipcbiAqIEBwcml2YXRlXG4gKiBJbmRpcmVjdGlvbiB0byBsZXZlcmFnZSB1c2VBc3luY1ZhbHVlIGZvciBhIHJlbmRlci1wcm9wIEFQSSBvbiA8QXdhaXQ+XG4gKi9cblxuXG5mdW5jdGlvbiBSZXNvbHZlQXdhaXQoX3JlZjcpIHtcbiAgbGV0IHtcbiAgICBjaGlsZHJlblxuICB9ID0gX3JlZjc7XG4gIGxldCBkYXRhID0gdXNlQXN5bmNWYWx1ZSgpO1xuXG4gIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBjaGlsZHJlbihkYXRhKTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY2hpbGRyZW4pO1xufSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBVVElMU1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIENyZWF0ZXMgYSByb3V0ZSBjb25maWcgZnJvbSBhIFJlYWN0IFwiY2hpbGRyZW5cIiBvYmplY3QsIHdoaWNoIGlzIHVzdWFsbHlcbiAqIGVpdGhlciBhIGA8Um91dGU+YCBlbGVtZW50IG9yIGFuIGFycmF5IG9mIHRoZW0uIFVzZWQgaW50ZXJuYWxseSBieVxuICogYDxSb3V0ZXM+YCB0byBjcmVhdGUgYSByb3V0ZSBjb25maWcgZnJvbSBpdHMgY2hpbGRyZW4uXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0cm91dGVyLmNvbS9kb2NzL2VuL3Y2L3V0aWxzL2NyZWF0ZS1yb3V0ZXMtZnJvbS1jaGlsZHJlblxuICovXG5cblxuZnVuY3Rpb24gY3JlYXRlUm91dGVzRnJvbUNoaWxkcmVuKGNoaWxkcmVuLCBwYXJlbnRQYXRoKSB7XG4gIGlmIChwYXJlbnRQYXRoID09PSB2b2lkIDApIHtcbiAgICBwYXJlbnRQYXRoID0gW107XG4gIH1cblxuICBsZXQgcm91dGVzID0gW107XG4gIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGlmICghIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgLy8gSWdub3JlIG5vbi1lbGVtZW50cy4gVGhpcyBhbGxvd3MgcGVvcGxlIHRvIG1vcmUgZWFzaWx5IGlubGluZVxuICAgICAgLy8gY29uZGl0aW9uYWxzIGluIHRoZWlyIHJvdXRlIGNvbmZpZy5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBSZWFjdC5GcmFnbWVudCkge1xuICAgICAgLy8gVHJhbnNwYXJlbnRseSBzdXBwb3J0IFJlYWN0LkZyYWdtZW50IGFuZCBpdHMgY2hpbGRyZW4uXG4gICAgICByb3V0ZXMucHVzaC5hcHBseShyb3V0ZXMsIGNyZWF0ZVJvdXRlc0Zyb21DaGlsZHJlbihlbGVtZW50LnByb3BzLmNoaWxkcmVuLCBwYXJlbnRQYXRoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgIShlbGVtZW50LnR5cGUgPT09IFJvdXRlKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJbXCIgKyAodHlwZW9mIGVsZW1lbnQudHlwZSA9PT0gXCJzdHJpbmdcIiA/IGVsZW1lbnQudHlwZSA6IGVsZW1lbnQudHlwZS5uYW1lKSArIFwiXSBpcyBub3QgYSA8Um91dGU+IGNvbXBvbmVudC4gQWxsIGNvbXBvbmVudCBjaGlsZHJlbiBvZiA8Um91dGVzPiBtdXN0IGJlIGEgPFJvdXRlPiBvciA8UmVhY3QuRnJhZ21lbnQ+XCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICAhKCFlbGVtZW50LnByb3BzLmluZGV4IHx8ICFlbGVtZW50LnByb3BzLmNoaWxkcmVuKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJBbiBpbmRleCByb3V0ZSBjYW5ub3QgaGF2ZSBjaGlsZCByb3V0ZXMuXCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBsZXQgdHJlZVBhdGggPSBbLi4ucGFyZW50UGF0aCwgaW5kZXhdO1xuICAgIGxldCByb3V0ZSA9IHtcbiAgICAgIGlkOiBlbGVtZW50LnByb3BzLmlkIHx8IHRyZWVQYXRoLmpvaW4oXCItXCIpLFxuICAgICAgY2FzZVNlbnNpdGl2ZTogZWxlbWVudC5wcm9wcy5jYXNlU2Vuc2l0aXZlLFxuICAgICAgZWxlbWVudDogZWxlbWVudC5wcm9wcy5lbGVtZW50LFxuICAgICAgaW5kZXg6IGVsZW1lbnQucHJvcHMuaW5kZXgsXG4gICAgICBwYXRoOiBlbGVtZW50LnByb3BzLnBhdGgsXG4gICAgICBsb2FkZXI6IGVsZW1lbnQucHJvcHMubG9hZGVyLFxuICAgICAgYWN0aW9uOiBlbGVtZW50LnByb3BzLmFjdGlvbixcbiAgICAgIGVycm9yRWxlbWVudDogZWxlbWVudC5wcm9wcy5lcnJvckVsZW1lbnQsXG4gICAgICBoYXNFcnJvckJvdW5kYXJ5OiBlbGVtZW50LnByb3BzLmVycm9yRWxlbWVudCAhPSBudWxsLFxuICAgICAgc2hvdWxkUmV2YWxpZGF0ZTogZWxlbWVudC5wcm9wcy5zaG91bGRSZXZhbGlkYXRlLFxuICAgICAgaGFuZGxlOiBlbGVtZW50LnByb3BzLmhhbmRsZVxuICAgIH07XG5cbiAgICBpZiAoZWxlbWVudC5wcm9wcy5jaGlsZHJlbikge1xuICAgICAgcm91dGUuY2hpbGRyZW4gPSBjcmVhdGVSb3V0ZXNGcm9tQ2hpbGRyZW4oZWxlbWVudC5wcm9wcy5jaGlsZHJlbiwgdHJlZVBhdGgpO1xuICAgIH1cblxuICAgIHJvdXRlcy5wdXNoKHJvdXRlKTtcbiAgfSk7XG4gIHJldHVybiByb3V0ZXM7XG59XG4vKipcbiAqIFJlbmRlcnMgdGhlIHJlc3VsdCBvZiBgbWF0Y2hSb3V0ZXMoKWAgaW50byBhIFJlYWN0IGVsZW1lbnQuXG4gKi9cblxuZnVuY3Rpb24gcmVuZGVyTWF0Y2hlcyhtYXRjaGVzKSB7XG4gIHJldHVybiBfcmVuZGVyTWF0Y2hlcyhtYXRjaGVzKTtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqIFdhbGsgdGhlIHJvdXRlIHRyZWUgYW5kIGFkZCBoYXNFcnJvckJvdW5kYXJ5IGlmIGl0J3Mgbm90IHByb3ZpZGVkLCBzbyB0aGF0XG4gKiB1c2VycyBwcm92aWRpbmcgbWFudWFsIHJvdXRlIGFycmF5cyBjYW4ganVzdCBzcGVjaWZ5IGVycm9yRWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGVuaGFuY2VNYW51YWxSb3V0ZU9iamVjdHMocm91dGVzKSB7XG4gIHJldHVybiByb3V0ZXMubWFwKHJvdXRlID0+IHtcbiAgICBsZXQgcm91dGVDbG9uZSA9IF9leHRlbmRzKHt9LCByb3V0ZSk7XG5cbiAgICBpZiAocm91dGVDbG9uZS5oYXNFcnJvckJvdW5kYXJ5ID09IG51bGwpIHtcbiAgICAgIHJvdXRlQ2xvbmUuaGFzRXJyb3JCb3VuZGFyeSA9IHJvdXRlQ2xvbmUuZXJyb3JFbGVtZW50ICE9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHJvdXRlQ2xvbmUuY2hpbGRyZW4pIHtcbiAgICAgIHJvdXRlQ2xvbmUuY2hpbGRyZW4gPSBlbmhhbmNlTWFudWFsUm91dGVPYmplY3RzKHJvdXRlQ2xvbmUuY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIHJldHVybiByb3V0ZUNsb25lO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTWVtb3J5Um91dGVyKHJvdXRlcywgb3B0cykge1xuICByZXR1cm4gY3JlYXRlUm91dGVyKHtcbiAgICBiYXNlbmFtZTogb3B0cyA9PSBudWxsID8gdm9pZCAwIDogb3B0cy5iYXNlbmFtZSxcbiAgICBoaXN0b3J5OiBjcmVhdGVNZW1vcnlIaXN0b3J5KHtcbiAgICAgIGluaXRpYWxFbnRyaWVzOiBvcHRzID09IG51bGwgPyB2b2lkIDAgOiBvcHRzLmluaXRpYWxFbnRyaWVzLFxuICAgICAgaW5pdGlhbEluZGV4OiBvcHRzID09IG51bGwgPyB2b2lkIDAgOiBvcHRzLmluaXRpYWxJbmRleFxuICAgIH0pLFxuICAgIGh5ZHJhdGlvbkRhdGE6IG9wdHMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdHMuaHlkcmF0aW9uRGF0YSxcbiAgICByb3V0ZXM6IGVuaGFuY2VNYW51YWxSb3V0ZU9iamVjdHMocm91dGVzKVxuICB9KS5pbml0aWFsaXplKCk7XG59IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZXhwb3J0IHsgQXdhaXQsIE1lbW9yeVJvdXRlciwgTmF2aWdhdGUsIE91dGxldCwgUm91dGUsIFJvdXRlciwgUm91dGVyUHJvdmlkZXIsIFJvdXRlcywgRGF0YVJvdXRlckNvbnRleHQgYXMgVU5TQUZFX0RhdGFSb3V0ZXJDb250ZXh0LCBEYXRhUm91dGVyU3RhdGVDb250ZXh0IGFzIFVOU0FGRV9EYXRhUm91dGVyU3RhdGVDb250ZXh0LCBEYXRhU3RhdGljUm91dGVyQ29udGV4dCBhcyBVTlNBRkVfRGF0YVN0YXRpY1JvdXRlckNvbnRleHQsIExvY2F0aW9uQ29udGV4dCBhcyBVTlNBRkVfTG9jYXRpb25Db250ZXh0LCBOYXZpZ2F0aW9uQ29udGV4dCBhcyBVTlNBRkVfTmF2aWdhdGlvbkNvbnRleHQsIFJvdXRlQ29udGV4dCBhcyBVTlNBRkVfUm91dGVDb250ZXh0LCBlbmhhbmNlTWFudWFsUm91dGVPYmplY3RzIGFzIFVOU0FGRV9lbmhhbmNlTWFudWFsUm91dGVPYmplY3RzLCBjcmVhdGVNZW1vcnlSb3V0ZXIsIGNyZWF0ZVJvdXRlc0Zyb21DaGlsZHJlbiwgY3JlYXRlUm91dGVzRnJvbUNoaWxkcmVuIGFzIGNyZWF0ZVJvdXRlc0Zyb21FbGVtZW50cywgcmVuZGVyTWF0Y2hlcywgdXNlQWN0aW9uRGF0YSwgdXNlQXN5bmNFcnJvciwgdXNlQXN5bmNWYWx1ZSwgdXNlSHJlZiwgdXNlSW5Sb3V0ZXJDb250ZXh0LCB1c2VMb2FkZXJEYXRhLCB1c2VMb2NhdGlvbiwgdXNlTWF0Y2gsIHVzZU1hdGNoZXMsIHVzZU5hdmlnYXRlLCB1c2VOYXZpZ2F0aW9uLCB1c2VOYXZpZ2F0aW9uVHlwZSwgdXNlT3V0bGV0LCB1c2VPdXRsZXRDb250ZXh0LCB1c2VQYXJhbXMsIHVzZVJlc29sdmVkUGF0aCwgdXNlUmV2YWxpZGF0b3IsIHVzZVJvdXRlRXJyb3IsIHVzZVJvdXRlTG9hZGVyRGF0YSwgdXNlUm91dGVzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBUT0RPOiB0aGlzIGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBnZXRzIGltcG9ydGVkIGR1cmluZyBidWlsZC5cbnZhciBSZWFjdFZlcnNpb24gPSAnMTcuMC4yJztcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IDB4ZWFjYTtcbmV4cG9ydHMuRnJhZ21lbnQgPSAweGVhY2I7XG5leHBvcnRzLlN0cmljdE1vZGUgPSAweGVhY2M7XG5leHBvcnRzLlByb2ZpbGVyID0gMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gMHhlYWNlO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSAweGVhZDA7XG5leHBvcnRzLlN1c3BlbnNlID0gMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSAweGVhZDk7XG52YXIgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSAweGVhZGE7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IDB4ZWFkNTtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gMHhlYWQ3O1xudmFyIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gMHhlYWUwO1xudmFyIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gMHhlYWUxO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gMHhlYWUyO1xudmFyIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IDB4ZWFlMztcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcikge1xuICB2YXIgc3ltYm9sRm9yID0gU3ltYm9sLmZvcjtcbiAgUkVBQ1RfRUxFTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5lbGVtZW50Jyk7XG4gIFJFQUNUX1BPUlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wb3J0YWwnKTtcbiAgZXhwb3J0cy5GcmFnbWVudCA9IHN5bWJvbEZvcigncmVhY3QuZnJhZ21lbnQnKTtcbiAgZXhwb3J0cy5TdHJpY3RNb2RlID0gc3ltYm9sRm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xuICBleHBvcnRzLlByb2ZpbGVyID0gc3ltYm9sRm9yKCdyZWFjdC5wcm9maWxlcicpO1xuICBSRUFDVF9QUk9WSURFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm92aWRlcicpO1xuICBSRUFDVF9DT05URVhUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmNvbnRleHQnKTtcbiAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbiAgZXhwb3J0cy5TdXNwZW5zZSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2UnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG4gIFJFQUNUX01FTU9fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubWVtbycpO1xuICBSRUFDVF9MQVpZX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxhenknKTtcbiAgUkVBQ1RfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuYmxvY2snKTtcbiAgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNlcnZlci5ibG9jaycpO1xuICBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpO1xuICBSRUFDVF9TQ09QRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zY29wZScpO1xuICBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub3BhcXVlLmlkJyk7XG4gIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5kZWJ1Z190cmFjZV9tb2RlJyk7XG4gIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbiAgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sZWdhY3lfaGlkZGVuJyk7XG59XG5cbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IGRpc3BhdGNoZXIuXG4gKi9cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgYmF0Y2gncyBjb25maWd1cmF0aW9uIHN1Y2ggYXMgaG93IGxvbmcgYW4gdXBkYXRlXG4gKiBzaG91bGQgc3VzcGVuZCBmb3IgaWYgaXQgbmVlZHMgdG8uXG4gKi9cbnZhciBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyA9IHtcbiAgdHJhbnNpdGlvbjogMFxufTtcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBvd25lci5cbiAqXG4gKiBUaGUgY3VycmVudCBvd25lciBpcyB0aGUgY29tcG9uZW50IHdobyBzaG91bGQgb3duIGFueSBjb21wb25lbnRzIHRoYXQgYXJlXG4gKiBjdXJyZW50bHkgYmVpbmcgY29uc3RydWN0ZWQuXG4gKi9cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAdHlwZSB7UmVhY3RDb21wb25lbnR9XG4gICAqL1xuICBjdXJyZW50OiBudWxsXG59O1xuXG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IHt9O1xudmFyIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBudWxsO1xuZnVuY3Rpb24gc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKSB7XG4gIHtcbiAgICBjdXJyZW50RXh0cmFTdGFja0ZyYW1lID0gc3RhY2s7XG4gIH1cbn1cblxue1xuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZSA9IGZ1bmN0aW9uIChzdGFjaykge1xuICAgIHtcbiAgICAgIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBzdGFjaztcbiAgICB9XG4gIH07IC8vIFN0YWNrIGltcGxlbWVudGF0aW9uIGluamVjdGVkIGJ5IHRoZSBjdXJyZW50IHJlbmRlcmVyLlxuXG5cbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRDdXJyZW50U3RhY2sgPSBudWxsO1xuXG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3RhY2sgPSAnJzsgLy8gQWRkIGFuIGV4dHJhIHRvcCBmcmFtZSB3aGlsZSBhbiBlbGVtZW50IGlzIGJlaW5nIHZhbGlkYXRlZFxuXG4gICAgaWYgKGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUpIHtcbiAgICAgIHN0YWNrICs9IGN1cnJlbnRFeHRyYVN0YWNrRnJhbWU7XG4gICAgfSAvLyBEZWxlZ2F0ZSB0byB0aGUgaW5qZWN0ZWQgcmVuZGVyZXItc3BlY2lmaWMgaW1wbGVtZW50YXRpb25cblxuXG4gICAgdmFyIGltcGwgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjaztcblxuICAgIGlmIChpbXBsKSB7XG4gICAgICBzdGFjayArPSBpbXBsKCkgfHwgJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9O1xufVxuXG4vKipcbiAqIFVzZWQgYnkgYWN0KCkgdG8gdHJhY2sgd2hldGhlciB5b3UncmUgaW5zaWRlIGFuIGFjdCgpIHNjb3BlLlxuICovXG52YXIgSXNTb21lUmVuZGVyZXJBY3RpbmcgPSB7XG4gIGN1cnJlbnQ6IGZhbHNlXG59O1xuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSB7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXI6IFJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOiBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxcbiAgUmVhY3RDdXJyZW50T3duZXI6IFJlYWN0Q3VycmVudE93bmVyLFxuICBJc1NvbWVSZW5kZXJlckFjdGluZzogSXNTb21lUmVuZGVyZXJBY3RpbmcsXG4gIC8vIFVzZWQgYnkgcmVuZGVyZXJzIHRvIGF2b2lkIGJ1bmRsaW5nIG9iamVjdC1hc3NpZ24gdHdpY2UgaW4gVU1EIGJ1bmRsZXM6XG4gIGFzc2lnbjogX2Fzc2lnblxufTtcblxue1xuICBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbn1cblxuLy8gYnkgY2FsbHMgdG8gdGhlc2UgbWV0aG9kcyBieSBhIEJhYmVsIHBsdWdpbi5cbi8vXG4vLyBJbiBQUk9EIChvciBpbiBwYWNrYWdlcyB3aXRob3V0IGFjY2VzcyB0byBSZWFjdCBpbnRlcm5hbHMpLFxuLy8gdGhleSBhcmUgbGVmdCBhcyB0aGV5IGFyZSBpbnN0ZWFkLlxuXG5mdW5jdGlvbiB3YXJuKGZvcm1hdCkge1xuICB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcHJpbnRXYXJuaW5nKCd3YXJuJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludFdhcm5pbmcobGV2ZWwsIGZvcm1hdCwgYXJncykge1xuICAvLyBXaGVuIGNoYW5naW5nIHRoaXMgbG9naWMsIHlvdSBtaWdodCB3YW50IHRvIGFsc29cbiAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXG4gIHtcbiAgICB2YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gICAgdmFyIHN0YWNrID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKCk7XG5cbiAgICBpZiAoc3RhY2sgIT09ICcnKSB7XG4gICAgICBmb3JtYXQgKz0gJyVzJztcbiAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcbiAgICB9XG5cbiAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuICcnICsgaXRlbTtcbiAgICB9KTsgLy8gQ2FyZWZ1bDogUk4gY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcmVmaXhcblxuICAgIGFyZ3NXaXRoRm9ybWF0LnVuc2hpZnQoJ1dhcm5pbmc6ICcgKyBmb3JtYXQpOyAvLyBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBzcHJlYWQgKG9yIC5hcHBseSkgZGlyZWN0bHkgYmVjYXVzZSBpdFxuICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG5cbiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlW2xldmVsXSwgY29uc29sZSwgYXJnc1dpdGhGb3JtYXQpO1xuICB9XG59XG5cbnZhciBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgPSB7fTtcblxuZnVuY3Rpb24gd2Fybk5vb3AocHVibGljSW5zdGFuY2UsIGNhbGxlck5hbWUpIHtcbiAge1xuICAgIHZhciBfY29uc3RydWN0b3IgPSBwdWJsaWNJbnN0YW5jZS5jb25zdHJ1Y3RvcjtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IF9jb25zdHJ1Y3RvciAmJiAoX2NvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IF9jb25zdHJ1Y3Rvci5uYW1lKSB8fCAnUmVhY3RDbGFzcyc7XG4gICAgdmFyIHdhcm5pbmdLZXkgPSBjb21wb25lbnROYW1lICsgXCIuXCIgKyBjYWxsZXJOYW1lO1xuXG4gICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVycm9yKFwiQ2FuJ3QgY2FsbCAlcyBvbiBhIGNvbXBvbmVudCB0aGF0IGlzIG5vdCB5ZXQgbW91bnRlZC4gXCIgKyAnVGhpcyBpcyBhIG5vLW9wLCBidXQgaXQgbWlnaHQgaW5kaWNhdGUgYSBidWcgaW4geW91ciBhcHBsaWNhdGlvbi4gJyArICdJbnN0ZWFkLCBhc3NpZ24gdG8gYHRoaXMuc3RhdGVgIGRpcmVjdGx5IG9yIGRlZmluZSBhIGBzdGF0ZSA9IHt9O2AgJyArICdjbGFzcyBwcm9wZXJ0eSB3aXRoIHRoZSBkZXNpcmVkIHN0YXRlIGluIHRoZSAlcyBjb21wb25lbnQuJywgY2FsbGVyTmFtZSwgY29tcG9uZW50TmFtZSk7XG5cbiAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnRbd2FybmluZ0tleV0gPSB0cnVlO1xuICB9XG59XG4vKipcbiAqIFRoaXMgaXMgdGhlIGFic3RyYWN0IEFQSSBmb3IgYW4gdXBkYXRlIHF1ZXVlLlxuICovXG5cblxudmFyIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlID0ge1xuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9zaXRlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB3ZSB3YW50IHRvIHRlc3QuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgbW91bnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBmaW5hbFxuICAgKi9cbiAgaXNNb3VudGVkOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGhcbiAgICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0aGVcbiAgICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gICAqXG4gICAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRDb21wb25lbnRVcGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2VcbiAgICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gY2FsbGVyTmFtZSBuYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnZm9yY2VVcGRhdGUnKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVwbGFjZXMgYWxsIG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIG9yIGBzZXRTdGF0ZWAgdG8gbXV0YXRlIHN0YXRlLlxuICAgKiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuXG4gICAqXG4gICAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvXG4gICAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29tcGxldGVTdGF0ZSBOZXh0IHN0YXRlLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIGNvbXBvbmVudCBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IGNhbGxlck5hbWUgbmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNvbXBsZXRlU3RhdGUsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdyZXBsYWNlU3RhdGUnKTtcbiAgfSxcblxuICAvKipcbiAgICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBfcGVuZGluZ1N0YXRlIGlzXG4gICAqIGludGVybmFsLiBUaGlzIHByb3ZpZGVzIGEgbWVyZ2luZyBzdHJhdGVneSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgdG8gZGVlcFxuICAgKiBwcm9wZXJ0aWVzIHdoaWNoIGlzIGNvbmZ1c2luZy4gVE9ETzogRXhwb3NlIHBlbmRpbmdTdGF0ZSBvciBkb24ndCB1c2UgaXRcbiAgICogZHVyaW5nIHRoZSBtZXJnZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdlZCB3aXRoIHN0YXRlLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIGNvbXBvbmVudCBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IE5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3NldFN0YXRlJyk7XG4gIH1cbn07XG5cbnZhciBlbXB0eU9iamVjdCA9IHt9O1xuXG57XG4gIE9iamVjdC5mcmVlemUoZW1wdHlPYmplY3QpO1xufVxuLyoqXG4gKiBCYXNlIGNsYXNzIGhlbHBlcnMgZm9yIHRoZSB1cGRhdGluZyBzdGF0ZSBvZiBhIGNvbXBvbmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIENvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7IC8vIElmIGEgY29tcG9uZW50IGhhcyBzdHJpbmcgcmVmcywgd2Ugd2lsbCBhc3NpZ24gYSBkaWZmZXJlbnQgb2JqZWN0IGxhdGVyLlxuXG4gIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0OyAvLyBXZSBpbml0aWFsaXplIHRoZSBkZWZhdWx0IHVwZGF0ZXIgYnV0IHRoZSByZWFsIG9uZSBnZXRzIGluamVjdGVkIGJ5IHRoZVxuICAvLyByZW5kZXJlci5cblxuICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xufVxuXG5Db21wb25lbnQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQgPSB7fTtcbi8qKlxuICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyB0byBtdXRhdGVcbiAqIHN0YXRlLiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuXG4gKlxuICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuXG4gKlxuICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgY2FsbHMgdG8gYHNldFN0YXRlYCB3aWxsIHJ1biBzeW5jaHJvbm91c2x5LFxuICogYXMgdGhleSBtYXkgZXZlbnR1YWxseSBiZSBiYXRjaGVkIHRvZ2V0aGVyLiAgWW91IGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsXG4gKiBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgY2FsbCB0byBzZXRTdGF0ZSBpcyBhY3R1YWxseVxuICogY29tcGxldGVkLlxuICpcbiAqIFdoZW4gYSBmdW5jdGlvbiBpcyBwcm92aWRlZCB0byBzZXRTdGF0ZSwgaXQgd2lsbCBiZSBjYWxsZWQgYXQgc29tZSBwb2ludCBpblxuICogdGhlIGZ1dHVyZSAobm90IHN5bmNocm9ub3VzbHkpLiBJdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSB1cCB0byBkYXRlXG4gKiBjb21wb25lbnQgYXJndW1lbnRzIChzdGF0ZSwgcHJvcHMsIGNvbnRleHQpLiBUaGVzZSB2YWx1ZXMgY2FuIGJlIGRpZmZlcmVudFxuICogZnJvbSB0aGlzLiogYmVjYXVzZSB5b3VyIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYWZ0ZXIgcmVjZWl2ZVByb3BzIGJ1dCBiZWZvcmVcbiAqIHNob3VsZENvbXBvbmVudFVwZGF0ZSwgYW5kIHRoaXMgbmV3IHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgd2lsbCBub3QgeWV0IGJlXG4gKiBhc3NpZ25lZCB0byB0aGlzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fGZ1bmN0aW9ufSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIG9yIGZ1bmN0aW9uIHRvXG4gKiAgICAgICAgcHJvZHVjZSBuZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggY3VycmVudCBzdGF0ZS5cbiAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5cbkNvbXBvbmVudC5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAocGFydGlhbFN0YXRlLCBjYWxsYmFjaykge1xuICBpZiAoISh0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnZnVuY3Rpb24nIHx8IHBhcnRpYWxTdGF0ZSA9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcInNldFN0YXRlKC4uLik6IHRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLCBwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrLCAnc2V0U3RhdGUnKTtcbn07XG4vKipcbiAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGhcbiAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLlxuICpcbiAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0aGVcbiAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLlxuICpcbiAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRDb21wb25lbnRVcGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2VcbiAqIGBjb21wb25lbnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuXG4gKlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciB1cGRhdGUgaXMgY29tcGxldGUuXG4gKiBAZmluYWxcbiAqIEBwcm90ZWN0ZWRcbiAqL1xuXG5cbkNvbXBvbmVudC5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgdGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLCBjYWxsYmFjaywgJ2ZvcmNlVXBkYXRlJyk7XG59O1xuLyoqXG4gKiBEZXByZWNhdGVkIEFQSXMuIFRoZXNlIEFQSXMgdXNlZCB0byBleGlzdCBvbiBjbGFzc2ljIFJlYWN0IGNsYXNzZXMgYnV0IHNpbmNlXG4gKiB3ZSB3b3VsZCBsaWtlIHRvIGRlcHJlY2F0ZSB0aGVtLCB3ZSdyZSBub3QgZ29pbmcgdG8gbW92ZSB0aGVtIG92ZXIgdG8gdGhpc1xuICogbW9kZXJuIGJhc2UgY2xhc3MuIEluc3RlYWQsIHdlIGRlZmluZSBhIGdldHRlciB0aGF0IHdhcm5zIGlmIGl0J3MgYWNjZXNzZWQuXG4gKi9cblxuXG57XG4gIHZhciBkZXByZWNhdGVkQVBJcyA9IHtcbiAgICBpc01vdW50ZWQ6IFsnaXNNb3VudGVkJywgJ0luc3RlYWQsIG1ha2Ugc3VyZSB0byBjbGVhbiB1cCBzdWJzY3JpcHRpb25zIGFuZCBwZW5kaW5nIHJlcXVlc3RzIGluICcgKyAnY29tcG9uZW50V2lsbFVubW91bnQgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuJ10sXG4gICAgcmVwbGFjZVN0YXRlOiBbJ3JlcGxhY2VTdGF0ZScsICdSZWZhY3RvciB5b3VyIGNvZGUgdG8gdXNlIHNldFN0YXRlIGluc3RlYWQgKHNlZSAnICsgJ2h0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMzIzNikuJ11cbiAgfTtcblxuICB2YXIgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nID0gZnVuY3Rpb24gKG1ldGhvZE5hbWUsIGluZm8pIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29tcG9uZW50LnByb3RvdHlwZSwgbWV0aG9kTmFtZSwge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhcm4oJyVzKC4uLikgaXMgZGVwcmVjYXRlZCBpbiBwbGFpbiBKYXZhU2NyaXB0IFJlYWN0IGNsYXNzZXMuICVzJywgaW5mb1swXSwgaW5mb1sxXSk7XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBmb3IgKHZhciBmbk5hbWUgaW4gZGVwcmVjYXRlZEFQSXMpIHtcbiAgICBpZiAoZGVwcmVjYXRlZEFQSXMuaGFzT3duUHJvcGVydHkoZm5OYW1lKSkge1xuICAgICAgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nKGZuTmFtZSwgZGVwcmVjYXRlZEFQSXNbZm5OYW1lXSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIENvbXBvbmVudER1bW15KCkge31cblxuQ29tcG9uZW50RHVtbXkucHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbi8qKlxuICogQ29udmVuaWVuY2UgY29tcG9uZW50IHdpdGggZGVmYXVsdCBzaGFsbG93IGVxdWFsaXR5IGNoZWNrIGZvciBzQ1UuXG4gKi9cblxuZnVuY3Rpb24gUHVyZUNvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7IC8vIElmIGEgY29tcG9uZW50IGhhcyBzdHJpbmcgcmVmcywgd2Ugd2lsbCBhc3NpZ24gYSBkaWZmZXJlbnQgb2JqZWN0IGxhdGVyLlxuXG4gIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0O1xuICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xufVxuXG52YXIgcHVyZUNvbXBvbmVudFByb3RvdHlwZSA9IFB1cmVDb21wb25lbnQucHJvdG90eXBlID0gbmV3IENvbXBvbmVudER1bW15KCk7XG5wdXJlQ29tcG9uZW50UHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHVyZUNvbXBvbmVudDsgLy8gQXZvaWQgYW4gZXh0cmEgcHJvdG90eXBlIGp1bXAgZm9yIHRoZXNlIG1ldGhvZHMuXG5cbl9hc3NpZ24ocHVyZUNvbXBvbmVudFByb3RvdHlwZSwgQ29tcG9uZW50LnByb3RvdHlwZSk7XG5cbnB1cmVDb21wb25lbnRQcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgPSB0cnVlO1xuXG4vLyBhbiBpbW11dGFibGUgb2JqZWN0IHdpdGggYSBzaW5nbGUgbXV0YWJsZSB2YWx1ZVxuZnVuY3Rpb24gY3JlYXRlUmVmKCkge1xuICB2YXIgcmVmT2JqZWN0ID0ge1xuICAgIGN1cnJlbnQ6IG51bGxcbiAgfTtcblxuICB7XG4gICAgT2JqZWN0LnNlYWwocmVmT2JqZWN0KTtcbiAgfVxuXG4gIHJldHVybiByZWZPYmplY3Q7XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lIHx8IChmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyBcIihcIiArIGZ1bmN0aW9uTmFtZSArIFwiKVwiIDogd3JhcHBlck5hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0Jztcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB7XG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAvLyBIb3N0IHJvb3QsIHRleHQgbm9kZSBvciBqdXN0IGludmFsaWQgdHlwZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIGV4cG9ydHMuRnJhZ21lbnQ6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG5cbiAgICBjYXNlIGV4cG9ydHMuUHJvZmlsZXI6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgZXhwb3J0cy5TdHJpY3RNb2RlOlxuICAgICAgcmV0dXJuICdTdHJpY3RNb2RlJztcblxuICAgIGNhc2UgZXhwb3J0cy5TdXNwZW5zZTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2UnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlTGlzdCc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUoY29udGV4dCkgKyAnLkNvbnN1bWVyJztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS50eXBlKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLl9yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKGluaXQocGF5bG9hZCkpO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIFJFU0VSVkVEX1BST1BTID0ge1xuICBrZXk6IHRydWUsXG4gIHJlZjogdHJ1ZSxcbiAgX19zZWxmOiB0cnVlLFxuICBfX3NvdXJjZTogdHJ1ZVxufTtcbnZhciBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biwgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24sIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG5cbntcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmcyA9IHt9O1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZFJlZihjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ3JlZicpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdyZWYnKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLnJlZiAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2tleScpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdrZXknKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLmtleSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ0tleSA9IGZ1bmN0aW9uICgpIHtcbiAgICB7XG4gICAgICBpZiAoIXNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXM6IGBrZXlgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHdhcm5BYm91dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2tleScsIHtcbiAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ0tleSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkge1xuICAgIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYHJlZmAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgd2FybkFib3V0QWNjZXNzaW5nUmVmLmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAncmVmJywge1xuICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nUmVmLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZykge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmID09PSAnc3RyaW5nJyAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ICYmIGNvbmZpZy5fX3NlbGYgJiYgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC5zdGF0ZU5vZGUgIT09IGNvbmZpZy5fX3NlbGYpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoJ0NvbXBvbmVudCBcIiVzXCIgY29udGFpbnMgdGhlIHN0cmluZyByZWYgXCIlc1wiLiAnICsgJ1N1cHBvcnQgZm9yIHN0cmluZyByZWZzIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiAnICsgJ1RoaXMgY2FzZSBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gYW4gYXJyb3cgZnVuY3Rpb24uICcgKyAnV2UgYXNrIHlvdSB0byBtYW51YWxseSBmaXggdGhpcyBjYXNlIGJ5IHVzaW5nIHVzZVJlZigpIG9yIGNyZWF0ZVJlZigpIGluc3RlYWQuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmJywgY29tcG9uZW50TmFtZSwgY29uZmlnLnJlZik7XG5cbiAgICAgICAgZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIG5ldyBSZWFjdCBlbGVtZW50LiBUaGlzIG5vIGxvbmdlciBhZGhlcmVzIHRvXG4gKiB0aGUgY2xhc3MgcGF0dGVybiwgc28gZG8gbm90IHVzZSBuZXcgdG8gY2FsbCBpdC4gQWxzbywgaW5zdGFuY2VvZiBjaGVja1xuICogd2lsbCBub3Qgd29yay4gSW5zdGVhZCB0ZXN0ICQkdHlwZW9mIGZpZWxkIGFnYWluc3QgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIHRvIGNoZWNrXG4gKiBpZiBzb21ldGhpbmcgaXMgYSBSZWFjdCBFbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7Kn0gdHlwZVxuICogQHBhcmFtIHsqfSBwcm9wc1xuICogQHBhcmFtIHsqfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gcmVmXG4gKiBAcGFyYW0geyp9IG93bmVyXG4gKiBAcGFyYW0geyp9IHNlbGYgQSAqdGVtcG9yYXJ5KiBoZWxwZXIgdG8gZGV0ZWN0IHBsYWNlcyB3aGVyZSBgdGhpc2AgaXNcbiAqIGRpZmZlcmVudCBmcm9tIHRoZSBgb3duZXJgIHdoZW4gUmVhY3QuY3JlYXRlRWxlbWVudCBpcyBjYWxsZWQsIHNvIHRoYXQgd2VcbiAqIGNhbiB3YXJuLiBXZSB3YW50IHRvIGdldCByaWQgb2Ygb3duZXIgYW5kIHJlcGxhY2Ugc3RyaW5nIGByZWZgcyB3aXRoIGFycm93XG4gKiBmdW5jdGlvbnMsIGFuZCBhcyBsb25nIGFzIGB0aGlzYCBhbmQgb3duZXIgYXJlIHRoZSBzYW1lLCB0aGVyZSB3aWxsIGJlIG5vXG4gKiBjaGFuZ2UgaW4gYmVoYXZpb3IuXG4gKiBAcGFyYW0geyp9IHNvdXJjZSBBbiBhbm5vdGF0aW9uIG9iamVjdCAoYWRkZWQgYnkgYSB0cmFuc3BpbGVyIG9yIG90aGVyd2lzZSlcbiAqIGluZGljYXRpbmcgZmlsZW5hbWUsIGxpbmUgbnVtYmVyLCBhbmQvb3Igb3RoZXIgaW5mb3JtYXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuXG5cbnZhciBSZWFjdEVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7XG4gIHZhciBlbGVtZW50ID0ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93cyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudFxuICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgLy8gQnVpbHQtaW4gcHJvcGVydGllcyB0aGF0IGJlbG9uZyBvbiB0aGUgZWxlbWVudFxuICAgIHR5cGU6IHR5cGUsXG4gICAga2V5OiBrZXksXG4gICAgcmVmOiByZWYsXG4gICAgcHJvcHM6IHByb3BzLFxuICAgIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGlzIGVsZW1lbnQuXG4gICAgX293bmVyOiBvd25lclxuICB9O1xuXG4gIHtcbiAgICAvLyBUaGUgdmFsaWRhdGlvbiBmbGFnIGlzIGN1cnJlbnRseSBtdXRhdGl2ZS4gV2UgcHV0IGl0IG9uXG4gICAgLy8gYW4gZXh0ZXJuYWwgYmFja2luZyBzdG9yZSBzbyB0aGF0IHdlIGNhbiBmcmVlemUgdGhlIHdob2xlIG9iamVjdC5cbiAgICAvLyBUaGlzIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgV2Vha01hcCBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIGluXG4gICAgLy8gY29tbW9ubHkgdXNlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMuXG4gICAgZWxlbWVudC5fc3RvcmUgPSB7fTsgLy8gVG8gbWFrZSBjb21wYXJpbmcgUmVhY3RFbGVtZW50cyBlYXNpZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHdlIG1ha2VcbiAgICAvLyB0aGUgdmFsaWRhdGlvbiBmbGFnIG5vbi1lbnVtZXJhYmxlICh3aGVyZSBwb3NzaWJsZSwgd2hpY2ggc2hvdWxkXG4gICAgLy8gaW5jbHVkZSBldmVyeSBlbnZpcm9ubWVudCB3ZSBydW4gdGVzdHMgaW4pLCBzbyB0aGUgdGVzdCBmcmFtZXdvcmtcbiAgICAvLyBpZ25vcmVzIGl0LlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQuX3N0b3JlLCAndmFsaWRhdGVkJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogZmFsc2VcbiAgICB9KTsgLy8gc2VsZiBhbmQgc291cmNlIGFyZSBERVYgb25seSBwcm9wZXJ0aWVzLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc2VsZicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzZWxmXG4gICAgfSk7IC8vIFR3byBlbGVtZW50cyBjcmVhdGVkIGluIHR3byBkaWZmZXJlbnQgcGxhY2VzIHNob3VsZCBiZSBjb25zaWRlcmVkXG4gICAgLy8gZXF1YWwgZm9yIHRlc3RpbmcgcHVycG9zZXMgYW5kIHRoZXJlZm9yZSB3ZSBoaWRlIGl0IGZyb20gZW51bWVyYXRpb24uXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zb3VyY2UnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc291cmNlXG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50LnByb3BzKTtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuLyoqXG4gKiBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgb2YgdGhlIGdpdmVuIHR5cGUuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2NyZWF0ZWVsZW1lbnRcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIGNvbmZpZywgY2hpbGRyZW4pIHtcbiAgdmFyIHByb3BOYW1lOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cbiAgdmFyIHByb3BzID0ge307XG4gIHZhciBrZXkgPSBudWxsO1xuICB2YXIgcmVmID0gbnVsbDtcbiAgdmFyIHNlbGYgPSBudWxsO1xuICB2YXIgc291cmNlID0gbnVsbDtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgcmVmID0gY29uZmlnLnJlZjtcblxuICAgICAge1xuICAgICAgICB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH1cblxuICAgIHNlbGYgPSBjb25maWcuX19zZWxmID09PSB1bmRlZmluZWQgPyBudWxsIDogY29uZmlnLl9fc2VsZjtcbiAgICBzb3VyY2UgPSBjb25maWcuX19zb3VyY2UgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zb3VyY2U7IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG5cblxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcblxuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkQXJyYXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfSAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcblxuXG4gIGlmICh0eXBlICYmIHR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAoa2V5IHx8IHJlZikge1xuICAgICAgdmFyIGRpc3BsYXlOYW1lID0gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgPyB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCAnVW5rbm93bicgOiB0eXBlO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQsIHByb3BzKTtcbn1cbmZ1bmN0aW9uIGNsb25lQW5kUmVwbGFjZUtleShvbGRFbGVtZW50LCBuZXdLZXkpIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQob2xkRWxlbWVudC50eXBlLCBuZXdLZXksIG9sZEVsZW1lbnQucmVmLCBvbGRFbGVtZW50Ll9zZWxmLCBvbGRFbGVtZW50Ll9zb3VyY2UsIG9sZEVsZW1lbnQuX293bmVyLCBvbGRFbGVtZW50LnByb3BzKTtcbiAgcmV0dXJuIG5ld0VsZW1lbnQ7XG59XG4vKipcbiAqIENsb25lIGFuZCByZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IHVzaW5nIGVsZW1lbnQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNjbG9uZWVsZW1lbnRcbiAqL1xuXG5mdW5jdGlvbiBjbG9uZUVsZW1lbnQoZWxlbWVudCwgY29uZmlnLCBjaGlsZHJlbikge1xuICBpZiAoISEoZWxlbWVudCA9PT0gbnVsbCB8fCBlbGVtZW50ID09PSB1bmRlZmluZWQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3QuY2xvbmVFbGVtZW50KC4uLik6IFRoZSBhcmd1bWVudCBtdXN0IGJlIGEgUmVhY3QgZWxlbWVudCwgYnV0IHlvdSBwYXNzZWQgXCIgKyBlbGVtZW50ICsgXCIuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcHJvcE5hbWU7IC8vIE9yaWdpbmFsIHByb3BzIGFyZSBjb3BpZWRcblxuICB2YXIgcHJvcHMgPSBfYXNzaWduKHt9LCBlbGVtZW50LnByb3BzKTsgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuXG5cbiAgdmFyIGtleSA9IGVsZW1lbnQua2V5O1xuICB2YXIgcmVmID0gZWxlbWVudC5yZWY7IC8vIFNlbGYgaXMgcHJlc2VydmVkIHNpbmNlIHRoZSBvd25lciBpcyBwcmVzZXJ2ZWQuXG5cbiAgdmFyIHNlbGYgPSBlbGVtZW50Ll9zZWxmOyAvLyBTb3VyY2UgaXMgcHJlc2VydmVkIHNpbmNlIGNsb25lRWxlbWVudCBpcyB1bmxpa2VseSB0byBiZSB0YXJnZXRlZCBieSBhXG4gIC8vIHRyYW5zcGlsZXIsIGFuZCB0aGUgb3JpZ2luYWwgc291cmNlIGlzIHByb2JhYmx5IGEgYmV0dGVyIGluZGljYXRvciBvZiB0aGVcbiAgLy8gdHJ1ZSBvd25lci5cblxuICB2YXIgc291cmNlID0gZWxlbWVudC5fc291cmNlOyAvLyBPd25lciB3aWxsIGJlIHByZXNlcnZlZCwgdW5sZXNzIHJlZiBpcyBvdmVycmlkZGVuXG5cbiAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIC8vIFNpbGVudGx5IHN0ZWFsIHRoZSByZWYgZnJvbSB0aGUgcGFyZW50LlxuICAgICAgcmVmID0gY29uZmlnLnJlZjtcbiAgICAgIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH0gLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgb3ZlcnJpZGUgZXhpc3RpbmcgcHJvcHNcblxuXG4gICAgdmFyIGRlZmF1bHRQcm9wcztcblxuICAgIGlmIChlbGVtZW50LnR5cGUgJiYgZWxlbWVudC50eXBlLmRlZmF1bHRQcm9wcykge1xuICAgICAgZGVmYXVsdFByb3BzID0gZWxlbWVudC50eXBlLmRlZmF1bHRQcm9wcztcbiAgICB9XG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBpZiAoY29uZmlnW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkICYmIGRlZmF1bHRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG5cblxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcblxuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG5cbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7XG4gIH1cblxuICByZXR1cm4gUmVhY3RFbGVtZW50KGVsZW1lbnQudHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKTtcbn1cbi8qKlxuICogVmVyaWZpZXMgdGhlIG9iamVjdCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjaXN2YWxpZGVsZW1lbnRcbiAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgUmVhY3RFbGVtZW50LlxuICogQGZpbmFsXG4gKi9cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5cbnZhciBTRVBBUkFUT1IgPSAnLic7XG52YXIgU1VCU0VQQVJBVE9SID0gJzonO1xuLyoqXG4gKiBFc2NhcGUgYW5kIHdyYXAga2V5IHNvIGl0IGlzIHNhZmUgdG8gdXNlIGFzIGEgcmVhY3RpZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgdG8gYmUgZXNjYXBlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGVzY2FwZWQga2V5LlxuICovXG5cbmZ1bmN0aW9uIGVzY2FwZShrZXkpIHtcbiAgdmFyIGVzY2FwZVJlZ2V4ID0gL1s9Ol0vZztcbiAgdmFyIGVzY2FwZXJMb29rdXAgPSB7XG4gICAgJz0nOiAnPTAnLFxuICAgICc6JzogJz0yJ1xuICB9O1xuICB2YXIgZXNjYXBlZFN0cmluZyA9IGtleS5yZXBsYWNlKGVzY2FwZVJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICByZXR1cm4gZXNjYXBlckxvb2t1cFttYXRjaF07XG4gIH0pO1xuICByZXR1cm4gJyQnICsgZXNjYXBlZFN0cmluZztcbn1cbi8qKlxuICogVE9ETzogVGVzdCB0aGF0IGEgc2luZ2xlIGNoaWxkIGFuZCBhbiBhcnJheSB3aXRoIG9uZSBpdGVtIGhhdmUgdGhlIHNhbWUga2V5XG4gKiBwYXR0ZXJuLlxuICovXG5cblxudmFyIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxzZTtcbnZhciB1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCA9IC9cXC8rL2c7XG5cbmZ1bmN0aW9uIGVzY2FwZVVzZXJQcm92aWRlZEtleSh0ZXh0KSB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2UodXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsICckJi8nKTtcbn1cbi8qKlxuICogR2VuZXJhdGUgYSBrZXkgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyBhIGVsZW1lbnQgd2l0aGluIGEgc2V0LlxuICpcbiAqIEBwYXJhbSB7Kn0gZWxlbWVudCBBIGVsZW1lbnQgdGhhdCBjb3VsZCBjb250YWluIGEgbWFudWFsIGtleS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCB0aGF0IGlzIHVzZWQgaWYgYSBtYW51YWwga2V5IGlzIG5vdCBwcm92aWRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRLZXkoZWxlbWVudCwgaW5kZXgpIHtcbiAgLy8gRG8gc29tZSB0eXBlY2hlY2tpbmcgaGVyZSBzaW5jZSB3ZSBjYWxsIHRoaXMgYmxpbmRseS4gV2Ugd2FudCB0byBlbnN1cmVcbiAgLy8gdGhhdCB3ZSBkb24ndCBibG9jayBwb3RlbnRpYWwgZnV0dXJlIEVTIEFQSXMuXG4gIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ29iamVjdCcgJiYgZWxlbWVudCAhPT0gbnVsbCAmJiBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgLy8gRXhwbGljaXQga2V5XG4gICAgcmV0dXJuIGVzY2FwZSgnJyArIGVsZW1lbnQua2V5KTtcbiAgfSAvLyBJbXBsaWNpdCBrZXkgZGV0ZXJtaW5lZCBieSB0aGUgaW5kZXggaW4gdGhlIHNldFxuXG5cbiAgcmV0dXJuIGluZGV4LnRvU3RyaW5nKDM2KTtcbn1cblxuZnVuY3Rpb24gbWFwSW50b0FycmF5KGNoaWxkcmVuLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmFtZVNvRmFyLCBjYWxsYmFjaykge1xuICB2YXIgdHlwZSA9IHR5cGVvZiBjaGlsZHJlbjtcblxuICBpZiAodHlwZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgLy8gQWxsIG9mIHRoZSBhYm92ZSBhcmUgcGVyY2VpdmVkIGFzIG51bGwuXG4gICAgY2hpbGRyZW4gPSBudWxsO1xuICB9XG5cbiAgdmFyIGludm9rZUNhbGxiYWNrID0gZmFsc2U7XG5cbiAgaWYgKGNoaWxkcmVuID09PSBudWxsKSB7XG4gICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIGludm9rZUNhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHN3aXRjaCAoY2hpbGRyZW4uJCR0eXBlb2YpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICB9XG4gIH1cblxuICBpZiAoaW52b2tlQ2FsbGJhY2spIHtcbiAgICB2YXIgX2NoaWxkID0gY2hpbGRyZW47XG4gICAgdmFyIG1hcHBlZENoaWxkID0gY2FsbGJhY2soX2NoaWxkKTsgLy8gSWYgaXQncyB0aGUgb25seSBjaGlsZCwgdHJlYXQgdGhlIG5hbWUgYXMgaWYgaXQgd2FzIHdyYXBwZWQgaW4gYW4gYXJyYXlcbiAgICAvLyBzbyB0aGF0IGl0J3MgY29uc2lzdGVudCBpZiB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGdyb3dzOlxuXG4gICAgdmFyIGNoaWxkS2V5ID0gbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiArIGdldEVsZW1lbnRLZXkoX2NoaWxkLCAwKSA6IG5hbWVTb0ZhcjtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG1hcHBlZENoaWxkKSkge1xuICAgICAgdmFyIGVzY2FwZWRDaGlsZEtleSA9ICcnO1xuXG4gICAgICBpZiAoY2hpbGRLZXkgIT0gbnVsbCkge1xuICAgICAgICBlc2NhcGVkQ2hpbGRLZXkgPSBlc2NhcGVVc2VyUHJvdmlkZWRLZXkoY2hpbGRLZXkpICsgJy8nO1xuICAgICAgfVxuXG4gICAgICBtYXBJbnRvQXJyYXkobWFwcGVkQ2hpbGQsIGFycmF5LCBlc2NhcGVkQ2hpbGRLZXksICcnLCBmdW5jdGlvbiAoYykge1xuICAgICAgICByZXR1cm4gYztcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAobWFwcGVkQ2hpbGQgIT0gbnVsbCkge1xuICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KG1hcHBlZENoaWxkKSkge1xuICAgICAgICBtYXBwZWRDaGlsZCA9IGNsb25lQW5kUmVwbGFjZUtleShtYXBwZWRDaGlsZCwgLy8gS2VlcCBib3RoIHRoZSAobWFwcGVkKSBhbmQgb2xkIGtleXMgaWYgdGhleSBkaWZmZXIsIGp1c3QgYXNcbiAgICAgICAgLy8gdHJhdmVyc2VBbGxDaGlsZHJlbiB1c2VkIHRvIGRvIGZvciBvYmplY3RzIGFzIGNoaWxkcmVuXG4gICAgICAgIGVzY2FwZWRQcmVmaXggKyAoIC8vICRGbG93Rml4TWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgUmVhY3QuUG9ydGFsIGRvZXNuJ3QgaGF2ZSBhIGtleVxuICAgICAgICBtYXBwZWRDaGlsZC5rZXkgJiYgKCFfY2hpbGQgfHwgX2NoaWxkLmtleSAhPT0gbWFwcGVkQ2hpbGQua2V5KSA/IC8vICRGbG93Rml4TWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgZXhpc3RpbmcgZWxlbWVudCdzIGtleSBjYW4gYmUgYSBudW1iZXJcbiAgICAgICAgZXNjYXBlVXNlclByb3ZpZGVkS2V5KCcnICsgbWFwcGVkQ2hpbGQua2V5KSArICcvJyA6ICcnKSArIGNoaWxkS2V5KTtcbiAgICAgIH1cblxuICAgICAgYXJyYXkucHVzaChtYXBwZWRDaGlsZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICB2YXIgY2hpbGQ7XG4gIHZhciBuZXh0TmFtZTtcbiAgdmFyIHN1YnRyZWVDb3VudCA9IDA7IC8vIENvdW50IG9mIGNoaWxkcmVuIGZvdW5kIGluIHRoZSBjdXJyZW50IHN1YnRyZWUuXG5cbiAgdmFyIG5leHROYW1lUHJlZml4ID0gbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiA6IG5hbWVTb0ZhciArIFNVQlNFUEFSQVRPUjtcblxuICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldEVsZW1lbnRLZXkoY2hpbGQsIGkpO1xuICAgICAgc3VidHJlZUNvdW50ICs9IG1hcEludG9BcnJheShjaGlsZCwgYXJyYXksIGVzY2FwZWRQcmVmaXgsIG5leHROYW1lLCBjYWxsYmFjayk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihjaGlsZHJlbik7XG5cbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBpdGVyYWJsZUNoaWxkcmVuID0gY2hpbGRyZW47XG5cbiAgICAgIHtcbiAgICAgICAgLy8gV2FybiBhYm91dCB1c2luZyBNYXBzIGFzIGNoaWxkcmVuXG4gICAgICAgIGlmIChpdGVyYXRvckZuID09PSBpdGVyYWJsZUNoaWxkcmVuLmVudHJpZXMpIHtcbiAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dE1hcHMpIHtcbiAgICAgICAgICAgIHdhcm4oJ1VzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMgbm90IHN1cHBvcnRlZC4gJyArICdVc2UgYW4gYXJyYXkgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRpZFdhcm5BYm91dE1hcHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChpdGVyYWJsZUNoaWxkcmVuKTtcbiAgICAgIHZhciBzdGVwO1xuICAgICAgdmFyIGlpID0gMDtcblxuICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICBjaGlsZCA9IHN0ZXAudmFsdWU7XG4gICAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBnZXRFbGVtZW50S2V5KGNoaWxkLCBpaSsrKTtcbiAgICAgICAgc3VidHJlZUNvdW50ICs9IG1hcEludG9BcnJheShjaGlsZCwgYXJyYXksIGVzY2FwZWRQcmVmaXgsIG5leHROYW1lLCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGNoaWxkcmVuU3RyaW5nID0gJycgKyBjaGlsZHJlbjtcblxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiBcIiArIChjaGlsZHJlblN0cmluZyA9PT0gJ1tvYmplY3QgT2JqZWN0XScgPyAnb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5qb2luKCcsICcpICsgJ30nIDogY2hpbGRyZW5TdHJpbmcpICsgXCIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdWJ0cmVlQ291bnQ7XG59XG5cbi8qKlxuICogTWFwcyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVubWFwXG4gKlxuICogVGhlIHByb3ZpZGVkIG1hcEZ1bmN0aW9uKGNoaWxkLCBpbmRleCkgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2hcbiAqIGxlYWYgY2hpbGQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCosIGludCl9IGZ1bmMgVGhlIG1hcCBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBDb250ZXh0IGZvciBtYXBGdW5jdGlvbi5cbiAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yZGVyZWQgbWFwIG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jLCBjb250ZXh0KSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgY291bnQgPSAwO1xuICBtYXBJbnRvQXJyYXkoY2hpbGRyZW4sIHJlc3VsdCwgJycsICcnLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBjb3VudCsrKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIENvdW50IHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhc1xuICogYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5jb3VudFxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuLlxuICovXG5cblxuZnVuY3Rpb24gY291bnRDaGlsZHJlbihjaGlsZHJlbikge1xuICB2YXIgbiA9IDA7XG4gIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoKSB7XG4gICAgbisrOyAvLyBEb24ndCByZXR1cm4gYW55dGhpbmdcbiAgfSk7XG4gIHJldHVybiBuO1xufVxuXG4vKipcbiAqIEl0ZXJhdGVzIHRocm91Z2ggY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbmZvcmVhY2hcbiAqXG4gKiBUaGUgcHJvdmlkZWQgZm9yRWFjaEZ1bmMoY2hpbGQsIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaFxuICogbGVhZiBjaGlsZC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZm9yRWFjaEZ1bmNcbiAqIEBwYXJhbSB7Kn0gZm9yRWFjaENvbnRleHQgQ29udGV4dCBmb3IgZm9yRWFjaENvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2hDaGlsZHJlbihjaGlsZHJlbiwgZm9yRWFjaEZ1bmMsIGZvckVhY2hDb250ZXh0KSB7XG4gIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yRWFjaEZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gRG9uJ3QgcmV0dXJuIGFueXRoaW5nLlxuICB9LCBmb3JFYWNoQ29udGV4dCk7XG59XG4vKipcbiAqIEZsYXR0ZW4gYSBjaGlsZHJlbiBvYmplY3QgKHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYCkgYW5kXG4gKiByZXR1cm4gYW4gYXJyYXkgd2l0aCBhcHByb3ByaWF0ZWx5IHJlLWtleWVkIGNoaWxkcmVuLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbnRvYXJyYXlcbiAqL1xuXG5cbmZ1bmN0aW9uIHRvQXJyYXkoY2hpbGRyZW4pIHtcbiAgcmV0dXJuIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH0pIHx8IFtdO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBpbiBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4gYW5kIHZlcmlmaWVzIHRoYXQgdGhlcmVcbiAqIGlzIG9ubHkgb25lIGNoaWxkIGluIHRoZSBjb2xsZWN0aW9uLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbm9ubHlcbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBhIHNpbmdsZSBjaGlsZCBnZXRzXG4gKiBwYXNzZWQgd2l0aG91dCBhIHdyYXBwZXIsIGJ1dCB0aGUgcHVycG9zZSBvZiB0aGlzIGhlbHBlciBmdW5jdGlvbiBpcyB0b1xuICogYWJzdHJhY3QgYXdheSB0aGUgcGFydGljdWxhciBzdHJ1Y3R1cmUgb2YgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBjaGlsZHJlbiBDaGlsZCBjb2xsZWN0aW9uIHN0cnVjdHVyZS5cbiAqIEByZXR1cm4ge1JlYWN0RWxlbWVudH0gVGhlIGZpcnN0IGFuZCBvbmx5IGBSZWFjdEVsZW1lbnRgIGNvbnRhaW5lZCBpbiB0aGVcbiAqIHN0cnVjdHVyZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIG9ubHlDaGlsZChjaGlsZHJlbikge1xuICBpZiAoIWlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0KGRlZmF1bHRWYWx1ZSwgY2FsY3VsYXRlQ2hhbmdlZEJpdHMpIHtcbiAgaWYgKGNhbGN1bGF0ZUNoYW5nZWRCaXRzID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxjdWxhdGVDaGFuZ2VkQml0cyA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAgaWYgKGNhbGN1bGF0ZUNoYW5nZWRCaXRzICE9PSBudWxsICYmIHR5cGVvZiBjYWxjdWxhdGVDaGFuZ2VkQml0cyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcignY3JlYXRlQ29udGV4dDogRXhwZWN0ZWQgdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzJywgY2FsY3VsYXRlQ2hhbmdlZEJpdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBjYWxjdWxhdGVDaGFuZ2VkQml0cyxcbiAgICAvLyBBcyBhIHdvcmthcm91bmQgdG8gc3VwcG9ydCBtdWx0aXBsZSBjb25jdXJyZW50IHJlbmRlcmVycywgd2UgY2F0ZWdvcml6ZVxuICAgIC8vIHNvbWUgcmVuZGVyZXJzIGFzIHByaW1hcnkgYW5kIG90aGVycyBhcyBzZWNvbmRhcnkuIFdlIG9ubHkgZXhwZWN0XG4gICAgLy8gdGhlcmUgdG8gYmUgdHdvIGNvbmN1cnJlbnQgcmVuZGVyZXJzIGF0IG1vc3Q6IFJlYWN0IE5hdGl2ZSAocHJpbWFyeSkgYW5kXG4gICAgLy8gRmFicmljIChzZWNvbmRhcnkpOyBSZWFjdCBET00gKHByaW1hcnkpIGFuZCBSZWFjdCBBUlQgKHNlY29uZGFyeSkuXG4gICAgLy8gU2Vjb25kYXJ5IHJlbmRlcmVycyBzdG9yZSB0aGVpciBjb250ZXh0IHZhbHVlcyBvbiBzZXBhcmF0ZSBmaWVsZHMuXG4gICAgX2N1cnJlbnRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgIF9jdXJyZW50VmFsdWUyOiBkZWZhdWx0VmFsdWUsXG4gICAgLy8gVXNlZCB0byB0cmFjayBob3cgbWFueSBjb25jdXJyZW50IHJlbmRlcmVycyB0aGlzIGNvbnRleHQgY3VycmVudGx5XG4gICAgLy8gc3VwcG9ydHMgd2l0aGluIGluIGEgc2luZ2xlIHJlbmRlcmVyLiBTdWNoIGFzIHBhcmFsbGVsIHNlcnZlciByZW5kZXJpbmcuXG4gICAgX3RocmVhZENvdW50OiAwLFxuICAgIC8vIFRoZXNlIGFyZSBjaXJjdWxhclxuICAgIFByb3ZpZGVyOiBudWxsLFxuICAgIENvbnN1bWVyOiBudWxsXG4gIH07XG4gIGNvbnRleHQuUHJvdmlkZXIgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX1BST1ZJREVSX1RZUEUsXG4gICAgX2NvbnRleHQ6IGNvbnRleHRcbiAgfTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzID0gZmFsc2U7XG4gIHZhciBoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlciA9IGZhbHNlO1xuICB2YXIgaGFzV2FybmVkQWJvdXREaXNwbGF5TmFtZU9uQ29uc3VtZXIgPSBmYWxzZTtcblxuICB7XG4gICAgLy8gQSBzZXBhcmF0ZSBvYmplY3QsIGJ1dCBwcm94aWVzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNvbnRleHQgb2JqZWN0IGZvclxuICAgIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBJdCBoYXMgYSBkaWZmZXJlbnQgJCR0eXBlb2YsIHNvIHdlIGNhbiBwcm9wZXJseVxuICAgIC8vIHdhcm4gZm9yIHRoZSBpbmNvcnJlY3QgdXNhZ2Ugb2YgQ29udGV4dCBhcyBhIENvbnN1bWVyLlxuICAgIHZhciBDb25zdW1lciA9IHtcbiAgICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgICBfY29udGV4dDogY29udGV4dCxcbiAgICAgIF9jYWxjdWxhdGVDaGFuZ2VkQml0czogY29udGV4dC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHNcbiAgICB9OyAvLyAkRmxvd0ZpeE1lOiBGbG93IGNvbXBsYWlucyBhYm91dCBub3Qgc2V0dGluZyBhIHZhbHVlLCB3aGljaCBpcyBpbnRlbnRpb25hbCBoZXJlXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb25zdW1lciwge1xuICAgICAgUHJvdmlkZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlcikge1xuICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnN1bWVyUHJvdmlkZXIgPSB0cnVlO1xuXG4gICAgICAgICAgICBlcnJvcignUmVuZGVyaW5nIDxDb250ZXh0LkNvbnN1bWVyLlByb3ZpZGVyPiBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gcmVuZGVyIDxDb250ZXh0LlByb3ZpZGVyPiBpbnN0ZWFkPycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250ZXh0LlByb3ZpZGVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfUHJvdmlkZXIpIHtcbiAgICAgICAgICBjb250ZXh0LlByb3ZpZGVyID0gX1Byb3ZpZGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX2N1cnJlbnRWYWx1ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5fY3VycmVudFZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gX2N1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF9jdXJyZW50VmFsdWUyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9jdXJyZW50VmFsdWUyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfY3VycmVudFZhbHVlMikge1xuICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTIgPSBfY3VycmVudFZhbHVlMjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF90aHJlYWRDb3VudDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5fdGhyZWFkQ291bnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF90aHJlYWRDb3VudCkge1xuICAgICAgICAgIGNvbnRleHQuX3RocmVhZENvdW50ID0gX3RocmVhZENvdW50O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgQ29uc3VtZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycykge1xuICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMgPSB0cnVlO1xuXG4gICAgICAgICAgICBlcnJvcignUmVuZGVyaW5nIDxDb250ZXh0LkNvbnN1bWVyLkNvbnN1bWVyPiBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gcmVuZGVyIDxDb250ZXh0LkNvbnN1bWVyPiBpbnN0ZWFkPycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250ZXh0LkNvbnN1bWVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGlzcGxheU5hbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuZGlzcGxheU5hbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGRpc3BsYXlOYW1lKSB7XG4gICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lcikge1xuICAgICAgICAgICAgd2FybignU2V0dGluZyBgZGlzcGxheU5hbWVgIG9uIENvbnRleHQuQ29uc3VtZXIgaGFzIG5vIGVmZmVjdC4gJyArIFwiWW91IHNob3VsZCBzZXQgaXQgZGlyZWN0bHkgb24gdGhlIGNvbnRleHQgd2l0aCBDb250ZXh0LmRpc3BsYXlOYW1lID0gJyVzJy5cIiwgZGlzcGxheU5hbWUpO1xuXG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7IC8vICRGbG93Rml4TWU6IEZsb3cgY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgcHJvcGVydGllcyBiZWNhdXNlIGl0IGRvZXNuJ3QgdW5kZXJzdGFuZCBkZWZpbmVQcm9wZXJ0eVxuXG4gICAgY29udGV4dC5Db25zdW1lciA9IENvbnN1bWVyO1xuICB9XG5cbiAge1xuICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciA9IG51bGw7XG4gICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyMiA9IG51bGw7XG4gIH1cblxuICByZXR1cm4gY29udGV4dDtcbn1cblxudmFyIFVuaW5pdGlhbGl6ZWQgPSAtMTtcbnZhciBQZW5kaW5nID0gMDtcbnZhciBSZXNvbHZlZCA9IDE7XG52YXIgUmVqZWN0ZWQgPSAyO1xuXG5mdW5jdGlvbiBsYXp5SW5pdGlhbGl6ZXIocGF5bG9hZCkge1xuICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBVbmluaXRpYWxpemVkKSB7XG4gICAgdmFyIGN0b3IgPSBwYXlsb2FkLl9yZXN1bHQ7XG4gICAgdmFyIHRoZW5hYmxlID0gY3RvcigpOyAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuXG4gICAgdmFyIHBlbmRpbmcgPSBwYXlsb2FkO1xuICAgIHBlbmRpbmcuX3N0YXR1cyA9IFBlbmRpbmc7XG4gICAgcGVuZGluZy5fcmVzdWx0ID0gdGhlbmFibGU7XG4gICAgdGhlbmFibGUudGhlbihmdW5jdGlvbiAobW9kdWxlT2JqZWN0KSB7XG4gICAgICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBQZW5kaW5nKSB7XG4gICAgICAgIHZhciBkZWZhdWx0RXhwb3J0ID0gbW9kdWxlT2JqZWN0LmRlZmF1bHQ7XG5cbiAgICAgICAge1xuICAgICAgICAgIGlmIChkZWZhdWx0RXhwb3J0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVycm9yKCdsYXp5OiBFeHBlY3RlZCB0aGUgcmVzdWx0IG9mIGEgZHluYW1pYyBpbXBvcnQoKSBjYWxsLiAnICsgJ0luc3RlYWQgcmVjZWl2ZWQ6ICVzXFxuXFxuWW91ciBjb2RlIHNob3VsZCBsb29rIGxpa2U6IFxcbiAgJyArIC8vIEJyZWFrIHVwIGltcG9ydHMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgICAgICAnY29uc3QgTXlDb21wb25lbnQgPSBsYXp5KCgpID0+IGltcCcgKyBcIm9ydCgnLi9NeUNvbXBvbmVudCcpKVwiLCBtb2R1bGVPYmplY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuXG5cbiAgICAgICAgdmFyIHJlc29sdmVkID0gcGF5bG9hZDtcbiAgICAgICAgcmVzb2x2ZWQuX3N0YXR1cyA9IFJlc29sdmVkO1xuICAgICAgICByZXNvbHZlZC5fcmVzdWx0ID0gZGVmYXVsdEV4cG9ydDtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFBlbmRpbmcpIHtcbiAgICAgICAgLy8gVHJhbnNpdGlvbiB0byB0aGUgbmV4dCBzdGF0ZS5cbiAgICAgICAgdmFyIHJlamVjdGVkID0gcGF5bG9hZDtcbiAgICAgICAgcmVqZWN0ZWQuX3N0YXR1cyA9IFJlamVjdGVkO1xuICAgICAgICByZWplY3RlZC5fcmVzdWx0ID0gZXJyb3I7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBSZXNvbHZlZCkge1xuICAgIHJldHVybiBwYXlsb2FkLl9yZXN1bHQ7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgcGF5bG9hZC5fcmVzdWx0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGxhenkoY3Rvcikge1xuICB2YXIgcGF5bG9hZCA9IHtcbiAgICAvLyBXZSB1c2UgdGhlc2UgZmllbGRzIHRvIHN0b3JlIHRoZSByZXN1bHQuXG4gICAgX3N0YXR1czogLTEsXG4gICAgX3Jlc3VsdDogY3RvclxuICB9O1xuICB2YXIgbGF6eVR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0xBWllfVFlQRSxcbiAgICBfcGF5bG9hZDogcGF5bG9hZCxcbiAgICBfaW5pdDogbGF6eUluaXRpYWxpemVyXG4gIH07XG5cbiAge1xuICAgIC8vIEluIHByb2R1Y3Rpb24sIHRoaXMgd291bGQganVzdCBzZXQgaXQgb24gdGhlIG9iamVjdC5cbiAgICB2YXIgZGVmYXVsdFByb3BzO1xuICAgIHZhciBwcm9wVHlwZXM7IC8vICRGbG93Rml4TWVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxhenlUeXBlLCB7XG4gICAgICBkZWZhdWx0UHJvcHM6IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZGVmYXVsdFByb3BzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdEZWZhdWx0UHJvcHMpIHtcbiAgICAgICAgICBlcnJvcignUmVhY3QubGF6eSguLi4pOiBJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIGFzc2lnbiBgZGVmYXVsdFByb3BzYCB0byAnICsgJ2EgbGF6eSBjb21wb25lbnQgaW1wb3J0LiBFaXRoZXIgc3BlY2lmeSB0aGVtIHdoZXJlIHRoZSBjb21wb25lbnQgJyArICdpcyBkZWZpbmVkLCBvciBjcmVhdGUgYSB3cmFwcGluZyBjb21wb25lbnQgYXJvdW5kIGl0LicpO1xuXG4gICAgICAgICAgZGVmYXVsdFByb3BzID0gbmV3RGVmYXVsdFByb3BzOyAvLyBNYXRjaCBwcm9kdWN0aW9uIGJlaGF2aW9yIG1vcmUgY2xvc2VseTpcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobGF6eVR5cGUsICdkZWZhdWx0UHJvcHMnLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwcm9wVHlwZXM6IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gcHJvcFR5cGVzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQcm9wVHlwZXMpIHtcbiAgICAgICAgICBlcnJvcignUmVhY3QubGF6eSguLi4pOiBJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIGFzc2lnbiBgcHJvcFR5cGVzYCB0byAnICsgJ2EgbGF6eSBjb21wb25lbnQgaW1wb3J0LiBFaXRoZXIgc3BlY2lmeSB0aGVtIHdoZXJlIHRoZSBjb21wb25lbnQgJyArICdpcyBkZWZpbmVkLCBvciBjcmVhdGUgYSB3cmFwcGluZyBjb21wb25lbnQgYXJvdW5kIGl0LicpO1xuXG4gICAgICAgICAgcHJvcFR5cGVzID0gbmV3UHJvcFR5cGVzOyAvLyBNYXRjaCBwcm9kdWN0aW9uIGJlaGF2aW9yIG1vcmUgY2xvc2VseTpcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobGF6eVR5cGUsICdwcm9wVHlwZXMnLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsYXp5VHlwZTtcbn1cblxuZnVuY3Rpb24gZm9yd2FyZFJlZihyZW5kZXIpIHtcbiAge1xuICAgIGlmIChyZW5kZXIgIT0gbnVsbCAmJiByZW5kZXIuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVxdWlyZXMgYSByZW5kZXIgZnVuY3Rpb24gYnV0IHJlY2VpdmVkIGEgYG1lbW9gICcgKyAnY29tcG9uZW50LiBJbnN0ZWFkIG9mIGZvcndhcmRSZWYobWVtbyguLi4pKSwgdXNlICcgKyAnbWVtbyhmb3J3YXJkUmVmKC4uLikpLicpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlbmRlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVxdWlyZXMgYSByZW5kZXIgZnVuY3Rpb24gYnV0IHdhcyBnaXZlbiAlcy4nLCByZW5kZXIgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgcmVuZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHJlbmRlci5sZW5ndGggIT09IDAgJiYgcmVuZGVyLmxlbmd0aCAhPT0gMikge1xuICAgICAgICBlcnJvcignZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGFjY2VwdCBleGFjdGx5IHR3byBwYXJhbWV0ZXJzOiBwcm9wcyBhbmQgcmVmLiAlcycsIHJlbmRlci5sZW5ndGggPT09IDEgPyAnRGlkIHlvdSBmb3JnZXQgdG8gdXNlIHRoZSByZWYgcGFyYW1ldGVyPycgOiAnQW55IGFkZGl0aW9uYWwgcGFyYW1ldGVyIHdpbGwgYmUgdW5kZWZpbmVkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZW5kZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHJlbmRlci5kZWZhdWx0UHJvcHMgIT0gbnVsbCB8fCByZW5kZXIucHJvcFR5cGVzICE9IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVuZGVyIGZ1bmN0aW9ucyBkbyBub3Qgc3VwcG9ydCBwcm9wVHlwZXMgb3IgZGVmYXVsdFByb3BzLiAnICsgJ0RpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgYSBSZWFjdCBjb21wb25lbnQ/Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGVsZW1lbnRUeXBlID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFLFxuICAgIHJlbmRlcjogcmVuZGVyXG4gIH07XG5cbiAge1xuICAgIHZhciBvd25OYW1lO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgJ2Rpc3BsYXlOYW1lJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG93bk5hbWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBvd25OYW1lID0gbmFtZTtcblxuICAgICAgICBpZiAocmVuZGVyLmRpc3BsYXlOYW1lID09IG51bGwpIHtcbiAgICAgICAgICByZW5kZXIuZGlzcGxheU5hbWUgPSBuYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudFR5cGU7XG59XG5cbi8vIEZpbHRlciBjZXJ0YWluIERPTSBhdHRyaWJ1dGVzIChlLmcuIHNyYywgaHJlZikgaWYgdGhlaXIgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzLlxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gTm90ZTogdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgKGUuZy4gaWYgaXQncyBhIHBvbHlmaWxsKS5cblxuXG4gIGlmICh0eXBlID09PSBleHBvcnRzLkZyYWdtZW50IHx8IHR5cGUgPT09IGV4cG9ydHMuUHJvZmlsZXIgfHwgdHlwZSA9PT0gUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgfHwgdHlwZSA9PT0gZXhwb3J0cy5TdHJpY3RNb2RlIHx8IHR5cGUgPT09IGV4cG9ydHMuU3VzcGVuc2UgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFIHx8IHR5cGVbMF0gPT09IFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG1lbW8odHlwZSwgY29tcGFyZSkge1xuICB7XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkpIHtcbiAgICAgIGVycm9yKCdtZW1vOiBUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIGNvbXBvbmVudC4gSW5zdGVhZCAnICsgJ3JlY2VpdmVkOiAlcycsIHR5cGUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgdHlwZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGVsZW1lbnRUeXBlID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9NRU1PX1RZUEUsXG4gICAgdHlwZTogdHlwZSxcbiAgICBjb21wYXJlOiBjb21wYXJlID09PSB1bmRlZmluZWQgPyBudWxsIDogY29tcGFyZVxuICB9O1xuXG4gIHtcbiAgICB2YXIgb3duTmFtZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudFR5cGUsICdkaXNwbGF5TmFtZScsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvd25OYW1lO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgb3duTmFtZSA9IG5hbWU7XG5cbiAgICAgICAgaWYgKHR5cGUuZGlzcGxheU5hbWUgPT0gbnVsbCkge1xuICAgICAgICAgIHR5cGUuZGlzcGxheU5hbWUgPSBuYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudFR5cGU7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVEaXNwYXRjaGVyKCkge1xuICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDtcblxuICBpZiAoIShkaXNwYXRjaGVyICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgaG9vayBjYWxsLiBIb29rcyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIG9mIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gY29tcG9uZW50LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG4yLiBZb3UgbWlnaHQgYmUgYnJlYWtpbmcgdGhlIFJ1bGVzIG9mIEhvb2tzXFxuMy4gWW91IG1pZ2h0IGhhdmUgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0IGluIHRoZSBzYW1lIGFwcFxcblNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1ob29rLWNhbGwgZm9yIHRpcHMgYWJvdXQgaG93IHRvIGRlYnVnIGFuZCBmaXggdGhpcyBwcm9ibGVtLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRpc3BhdGNoZXI7XG59XG5cbmZ1bmN0aW9uIHVzZUNvbnRleHQoQ29udGV4dCwgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcblxuICB7XG4gICAgaWYgKHVuc3RhYmxlX29ic2VydmVkQml0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvcigndXNlQ29udGV4dCgpIHNlY29uZCBhcmd1bWVudCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlICcgKyAndXNlIGluIFJlYWN0LiBQYXNzaW5nIGl0IGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnWW91IHBhc3NlZDogJXMuJXMnLCB1bnN0YWJsZV9vYnNlcnZlZEJpdHMsIHR5cGVvZiB1bnN0YWJsZV9vYnNlcnZlZEJpdHMgPT09ICdudW1iZXInICYmIEFycmF5LmlzQXJyYXkoYXJndW1lbnRzWzJdKSA/ICdcXG5cXG5EaWQgeW91IGNhbGwgYXJyYXkubWFwKHVzZUNvbnRleHQpPyAnICsgJ0NhbGxpbmcgSG9va3MgaW5zaWRlIGEgbG9vcCBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0xlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3J1bGVzLW9mLWhvb2tzJyA6ICcnKTtcbiAgICB9IC8vIFRPRE86IGFkZCBhIG1vcmUgZ2VuZXJpYyB3YXJuaW5nIGZvciBpbnZhbGlkIHZhbHVlcy5cblxuXG4gICAgaWYgKENvbnRleHQuX2NvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHJlYWxDb250ZXh0ID0gQ29udGV4dC5fY29udGV4dDsgLy8gRG9uJ3QgZGVkdXBsaWNhdGUgYmVjYXVzZSB0aGlzIGxlZ2l0aW1hdGVseSBjYXVzZXMgYnVnc1xuICAgICAgLy8gYW5kIG5vYm9keSBzaG91bGQgYmUgdXNpbmcgdGhpcyBpbiBleGlzdGluZyBjb2RlLlxuXG4gICAgICBpZiAocmVhbENvbnRleHQuQ29uc3VtZXIgPT09IENvbnRleHQpIHtcbiAgICAgICAgZXJyb3IoJ0NhbGxpbmcgdXNlQ29udGV4dChDb250ZXh0LkNvbnN1bWVyKSBpcyBub3Qgc3VwcG9ydGVkLCBtYXkgY2F1c2UgYnVncywgYW5kIHdpbGwgYmUgJyArICdyZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byBjYWxsIHVzZUNvbnRleHQoQ29udGV4dCkgaW5zdGVhZD8nKTtcbiAgICAgIH0gZWxzZSBpZiAocmVhbENvbnRleHQuUHJvdmlkZXIgPT09IENvbnRleHQpIHtcbiAgICAgICAgZXJyb3IoJ0NhbGxpbmcgdXNlQ29udGV4dChDb250ZXh0LlByb3ZpZGVyKSBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIHVzZUNvbnRleHQoQ29udGV4dCkgaW5zdGVhZD8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlzcGF0Y2hlci51c2VDb250ZXh0KENvbnRleHQsIHVuc3RhYmxlX29ic2VydmVkQml0cyk7XG59XG5mdW5jdGlvbiB1c2VTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VTdGF0ZShpbml0aWFsU3RhdGUpO1xufVxuZnVuY3Rpb24gdXNlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbn1cbmZ1bmN0aW9uIHVzZVJlZihpbml0aWFsVmFsdWUpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VSZWYoaW5pdGlhbFZhbHVlKTtcbn1cbmZ1bmN0aW9uIHVzZUVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlTWVtbyhjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VNZW1vKGNyZWF0ZSwgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VEZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICB7XG4gICAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICAgIHJldHVybiBkaXNwYXRjaGVyLnVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKTtcbiAgfVxufVxuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICB7XG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBkaXNhYmxlZERlcHRoKys7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAge1xuICAgIGRpc2FibGVkRGVwdGgtLTtcblxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBsb2c6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgIH0pLFxuICAgICAgICB3YXJuOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2V2FyblxuICAgICAgICB9KSxcbiAgICAgICAgZXJyb3I6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBFbmQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcbnZhciBwcmVmaXg7XG5mdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRXh0cmFjdCB0aGUgVk0gc3BlY2lmaWMgcHJlZml4IHVzZWQgYnkgZWFjaCBsaW5lLlxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgdmFyIG1hdGNoID0geC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtcbiAgICAgICAgcHJlZml4ID0gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG4gICAgICB9XG4gICAgfSAvLyBXZSB1c2UgdGhlIHByZWZpeCB0byBlbnN1cmUgb3VyIHN0YWNrcyBsaW5lIHVwIHdpdGggbmF0aXZlIHN0YWNrIGZyYW1lcy5cblxuXG4gICAgcmV0dXJuICdcXG4nICsgcHJlZml4ICsgbmFtZTtcbiAgfVxufVxudmFyIHJlZW50cnkgPSBmYWxzZTtcbnZhciBjb21wb25lbnRGcmFtZUNhY2hlO1xuXG57XG4gIHZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG4gIGNvbXBvbmVudEZyYW1lQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRyb2w7XG4gIHJlZW50cnkgPSB0cnVlO1xuICB2YXIgcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlOyAvLyAkRmxvd0ZpeE1lIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7IC8vIFNldCB0aGUgZGlzcGF0Y2hlciBpbiBERVYgYmVjYXVzZSB0aGlzIG1pZ2h0IGJlIGNhbGwgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxuICAgIC8vIGZvciB3YXJuaW5ncy5cblxuICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gbnVsbDtcbiAgICBkaXNhYmxlTG9ncygpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUaGlzIHNob3VsZCB0aHJvdy5cbiAgICBpZiAoY29uc3RydWN0KSB7XG4gICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfTsgLy8gJEZsb3dGaXhNZVxuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBXZSB1c2UgYSB0aHJvd2luZyBzZXR0ZXIgaW5zdGVhZCBvZiBmcm96ZW4gb3Igbm9uLXdyaXRhYmxlIHByb3BzXG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XG4gICAgICAgIC8vIFdlIGNvbnN0cnVjdCBhIGRpZmZlcmVudCBjb250cm9sIGZvciB0aGlzIGNhc2UgdG8gaW5jbHVkZSBhbnkgZXh0cmFcbiAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICB9XG5cbiAgICAgIGZuKCk7XG4gICAgfVxuICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAvLyBUaGlzIGlzIGlubGluZWQgbWFudWFsbHkgYmVjYXVzZSBjbG9zdXJlIGRvZXNuJ3QgZG8gaXQgZm9yIHVzLlxuICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiB0eXBlb2Ygc2FtcGxlLnN0YWNrID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVGhpcyBleHRyYWN0cyB0aGUgZmlyc3QgZnJhbWUgZnJvbSB0aGUgc2FtcGxlIHRoYXQgaXNuJ3QgYWxzbyBpbiB0aGUgY29udHJvbC5cbiAgICAgIC8vIFNraXBwaW5nIG9uZSBmcmFtZSB0aGF0IHdlIGFzc3VtZSBpcyB0aGUgZnJhbWUgdGhhdCBjYWxscyB0aGUgdHdvLlxuICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBzID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChzID49IDEgJiYgYyA+PSAwICYmIHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgLy8gV2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBzdGFjayBmcmFtZSB0byBiZSBzaGFyZWQuXG4gICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgLy8gY3V0IG9mZiBkdWUgdG8gbWF4aW11bSBzdGFjayBsaW1pdHMuIEluIHRoaXMgY2FzZSwgb25lIG1heWJlIGN1dCBvZmZcbiAgICAgICAgLy8gZWFybGllciB0aGFuIHRoZSBvdGhlci4gV2UgYXNzdW1lIHRoYXQgdGhlIHNhbXBsZSBpcyBsb25nZXIgb3IgdGhlIHNhbWVcbiAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgLy8gdGhlIHNhbXBsZSBzb21ld2hlcmUgaW4gdGhlIGNvbnRyb2wuXG4gICAgICAgIGMtLTtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBfZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gUmV0dXJuIHRoZSBsaW5lIHdlIGZvdW5kLlxuXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2ZyYW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzID49IDEgJiYgYyA+PSAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICByZWVudHJ5ID0gZmFsc2U7XG5cbiAgICB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZpb3VzRGlzcGF0Y2hlcjtcbiAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgIH1cblxuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZTtcbiAgfSAvLyBGYWxsYmFjayB0byBqdXN0IHVzaW5nIHRoZSBuYW1lIGlmIHdlIGNvdWxkbid0IG1ha2UgaXQgdGhyb3cuXG5cblxuICB2YXIgbmFtZSA9IGZuID8gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSA6ICcnO1xuICB2YXIgc3ludGhldGljRnJhbWUgPSBuYW1lID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkgOiAnJztcblxuICB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIHN5bnRoZXRpY0ZyYW1lKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ludGhldGljRnJhbWU7XG59XG5mdW5jdGlvbiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZm4sIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIHNvdXJjZSwgb3duZXJGbikge1xuXG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB7XG4gICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSh0eXBlLCBzaG91bGRDb25zdHJ1Y3QodHlwZSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUodHlwZSk7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIGV4cG9ydHMuU3VzcGVuc2U6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgLy8gTWVtbyBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLnR5cGUsIHNvdXJjZSwgb3duZXJGbik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLl9yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIExhenkgbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGluaXQocGF5bG9hZCksIHNvdXJjZSwgb3duZXJGbik7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxudmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50KSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgaXMgb2theSBidXQgRmxvdyBkb2Vzbid0IGtub3cgaXQuXG4gICAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvciQxID0gdm9pZCAwOyAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICsgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yJDEgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCcpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yJDEgPSBleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxICYmICEoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMnICsgJyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IkMSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yJDEubWVzc2FnZV0gPSB0cnVlO1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJ0ZhaWxlZCAlcyB0eXBlOiAlcycsIGxvY2F0aW9uLCBlcnJvciQxLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd247XG5cbntcbiAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBuYW1lICsgJ2AuJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHNvdXJjZSkge1xuICBpZiAoc291cmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZmlsZU5hbWUgPSBzb3VyY2UuZmlsZU5hbWUucmVwbGFjZSgvXi4qW1xcXFxcXC9dLywgJycpO1xuICAgIHZhciBsaW5lTnVtYmVyID0gc291cmNlLmxpbmVOdW1iZXI7XG4gICAgcmV0dXJuICdcXG5cXG5DaGVjayB5b3VyIGNvZGUgYXQgJyArIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICcuJztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW1Gb3JQcm9wcyhlbGVtZW50UHJvcHMpIHtcbiAgaWYgKGVsZW1lbnRQcm9wcyAhPT0gbnVsbCAmJiBlbGVtZW50UHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShlbGVtZW50UHJvcHMuX19zb3VyY2UpO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuLyoqXG4gKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gKiBvYmplY3Qga2V5cyBhcmUgbm90IHZhbGlkLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW5cbiAqIHVwZGF0ZXMuXG4gKi9cblxuXG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSkge1xuICB2YXIgaW5mbyA9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuXG4gIGlmICghaW5mbykge1xuICAgIHZhciBwYXJlbnROYW1lID0gdHlwZW9mIHBhcmVudFR5cGUgPT09ICdzdHJpbmcnID8gcGFyZW50VHlwZSA6IHBhcmVudFR5cGUuZGlzcGxheU5hbWUgfHwgcGFyZW50VHlwZS5uYW1lO1xuXG4gICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgIGluZm8gPSBcIlxcblxcbkNoZWNrIHRoZSB0b3AtbGV2ZWwgcmVuZGVyIGNhbGwgdXNpbmcgPFwiICsgcGFyZW50TmFtZSArIFwiPi5cIjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaW5mbztcbn1cbi8qKlxuICogV2FybiBpZiB0aGUgZWxlbWVudCBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQga2V5IGFzc2lnbmVkIHRvIGl0LlxuICogVGhpcyBlbGVtZW50IGlzIGluIGFuIGFycmF5LiBUaGUgYXJyYXkgY291bGQgZ3JvdyBhbmQgc2hyaW5rIG9yIGJlXG4gKiByZW9yZGVyZWQuIEFsbCBjaGlsZHJlbiB0aGF0IGhhdmVuJ3QgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBhcmUgcmVxdWlyZWQgdG9cbiAqIGhhdmUgYSBcImtleVwiIHByb3BlcnR5IGFzc2lnbmVkIHRvIGl0LiBFcnJvciBzdGF0dXNlcyBhcmUgY2FjaGVkIHNvIGEgd2FybmluZ1xuICogd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBFbGVtZW50IHRoYXQgcmVxdWlyZXMgYSBrZXkuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgZWxlbWVudCdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4cGxpY2l0S2V5KGVsZW1lbnQsIHBhcmVudFR5cGUpIHtcbiAgaWYgKCFlbGVtZW50Ll9zdG9yZSB8fCBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgfHwgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gIHZhciBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvID0gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKTtcblxuICBpZiAob3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTsgLy8gVXN1YWxseSB0aGUgY3VycmVudCBvd25lciBpcyB0aGUgb2ZmZW5kZXIsIGJ1dCBpZiBpdCBhY2NlcHRzIGNoaWxkcmVuIGFzIGFcbiAgLy8gcHJvcGVydHksIGl0IG1heSBiZSB0aGUgY3JlYXRvciBvZiB0aGUgY2hpbGQgdGhhdCdzIHJlc3BvbnNpYmxlIGZvclxuICAvLyBhc3NpZ25pbmcgaXQgYSBrZXkuXG5cbiAgdmFyIGNoaWxkT3duZXIgPSAnJztcblxuICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9vd25lciAhPT0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgIC8vIEdpdmUgdGhlIGNvbXBvbmVudCB0aGF0IG9yaWdpbmFsbHkgY3JlYXRlZCB0aGlzIGNoaWxkLlxuICAgIGNoaWxkT3duZXIgPSBcIiBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSBcIiArIGdldENvbXBvbmVudE5hbWUoZWxlbWVudC5fb3duZXIudHlwZSkgKyBcIi5cIjtcbiAgfVxuXG4gIHtcbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpO1xuXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4nICsgJyVzJXMgU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJywgY3VycmVudENvbXBvbmVudEVycm9ySW5mbywgY2hpbGRPd25lcik7XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICB9XG59XG4vKipcbiAqIEVuc3VyZSB0aGF0IGV2ZXJ5IGVsZW1lbnQgZWl0aGVyIGlzIHBhc3NlZCBpbiBhIHN0YXRpYyBsb2NhdGlvbiwgaW4gYW5cbiAqIGFycmF5IHdpdGggYW4gZXhwbGljaXQga2V5cyBwcm9wZXJ0eSBkZWZpbmVkLCBvciBpbiBhbiBvYmplY3QgbGl0ZXJhbFxuICogd2l0aCB2YWxpZCBrZXkgcHJvcGVydHkuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0Tm9kZX0gbm9kZSBTdGF0aWNhbGx5IHBhc3NlZCBjaGlsZCBvZiBhbnkgdHlwZS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBub2RlJ3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRLZXlzKG5vZGUsIHBhcmVudFR5cGUpIHtcbiAgaWYgKHR5cGVvZiBub2RlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSBub2RlW2ldO1xuXG4gICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgIC8vIFRoaXMgZWxlbWVudCB3YXMgcGFzc2VkIGluIGEgdmFsaWQgbG9jYXRpb24uXG4gICAgaWYgKG5vZGUuX3N0b3JlKSB7XG4gICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIGlmIChub2RlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5vZGUpO1xuXG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBFbnRyeSBpdGVyYXRvcnMgdXNlZCB0byBwcm92aWRlIGltcGxpY2l0IGtleXMsXG4gICAgICAvLyBidXQgbm93IHdlIHByaW50IGEgc2VwYXJhdGUgd2FybmluZyBmb3IgdGhlbSBsYXRlci5cbiAgICAgIGlmIChpdGVyYXRvckZuICE9PSBub2RlLmVudHJpZXMpIHtcbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpO1xuICAgICAgICB2YXIgc3RlcDtcblxuICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KHN0ZXAudmFsdWUsIHBhcmVudFR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhbiBlbGVtZW50LCB2YWxpZGF0ZSB0aGF0IGl0cyBwcm9wcyBmb2xsb3cgdGhlIHByb3BUeXBlcyBkZWZpbml0aW9uLFxuICogcHJvdmlkZWQgYnkgdGhlIHR5cGUuXG4gKlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpIHtcbiAge1xuICAgIHZhciB0eXBlID0gZWxlbWVudC50eXBlO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwgfHwgdHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwcm9wVHlwZXM7XG5cbiAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IC8vIE5vdGU6IE1lbW8gb25seSBjaGVja3Mgb3V0ZXIgcHJvcHMgaGVyZS5cbiAgICAvLyBJbm5lciBwcm9wcyBhcmUgY2hlY2tlZCBpbiB0aGUgcmVjb25jaWxlci5cbiAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUpKSB7XG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm9wVHlwZXMpIHtcbiAgICAgIC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSk7XG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm9wVHlwZXMsIGVsZW1lbnQucHJvcHMsICdwcm9wJywgbmFtZSwgZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmICh0eXBlLlByb3BUeXBlcyAhPT0gdW5kZWZpbmVkICYmICFwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bikge1xuICAgICAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSB0cnVlOyAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuXG4gICAgICB2YXIgX25hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpO1xuXG4gICAgICBlcnJvcignQ29tcG9uZW50ICVzIGRlY2xhcmVkIGBQcm9wVHlwZXNgIGluc3RlYWQgb2YgYHByb3BUeXBlc2AuIERpZCB5b3UgbWlzc3BlbGwgdGhlIHByb3BlcnR5IGFzc2lnbm1lbnQ/JywgX25hbWUgfHwgJ1Vua25vd24nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHR5cGUuZ2V0RGVmYXVsdFByb3BzID09PSAnZnVuY3Rpb24nICYmICF0eXBlLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCkge1xuICAgICAgZXJyb3IoJ2dldERlZmF1bHRQcm9wcyBpcyBvbmx5IHVzZWQgb24gY2xhc3NpYyBSZWFjdC5jcmVhdGVDbGFzcyAnICsgJ2RlZmluaXRpb25zLiBVc2UgYSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgYGRlZmF1bHRQcm9wc2AgaW5zdGVhZC4nKTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYSBmcmFnbWVudCwgdmFsaWRhdGUgdGhhdCBpdCBjYW4gb25seSBiZSBwcm92aWRlZCB3aXRoIGZyYWdtZW50IHByb3BzXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZnJhZ21lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhmcmFnbWVudCkge1xuICB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhmcmFnbWVudC5wcm9wcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoa2V5ICE9PSAnY2hpbGRyZW4nICYmIGtleSAhPT0gJ2tleScpIHtcbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgcHJvcCBgJXNgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuICcgKyAnUmVhY3QuRnJhZ21lbnQgY2FuIG9ubHkgaGF2ZSBga2V5YCBhbmQgYGNoaWxkcmVuYCBwcm9wcy4nLCBrZXkpO1xuXG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmcmFnbWVudC5yZWYgIT09IG51bGwpIHtcbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZnJhZ21lbnQpO1xuXG4gICAgICBlcnJvcignSW52YWxpZCBhdHRyaWJ1dGUgYHJlZmAgc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4nKTtcblxuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgdmFyIHZhbGlkVHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKTsgLy8gV2Ugd2FybiBpbiB0aGlzIGNhc2UgYnV0IGRvbid0IHRocm93LiBXZSBleHBlY3QgdGhlIGVsZW1lbnQgY3JlYXRpb24gdG9cbiAgLy8gc3VjY2VlZCBhbmQgdGhlcmUgd2lsbCBsaWtlbHkgYmUgZXJyb3JzIGluIHJlbmRlci5cblxuICBpZiAoIXZhbGlkVHlwZSkge1xuICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlSW5mbyA9IGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtRm9yUHJvcHMocHJvcHMpO1xuXG4gICAgaWYgKHNvdXJjZUluZm8pIHtcbiAgICAgIGluZm8gKz0gc291cmNlSW5mbztcbiAgICB9IGVsc2Uge1xuICAgICAgaW5mbyArPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcbiAgICB9XG5cbiAgICB2YXIgdHlwZVN0cmluZztcblxuICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJ251bGwnO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgdHlwZVN0cmluZyA9ICdhcnJheSc7XG4gICAgfSBlbHNlIGlmICh0eXBlICE9PSB1bmRlZmluZWQgJiYgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7XG4gICAgICB0eXBlU3RyaW5nID0gXCI8XCIgKyAoZ2V0Q29tcG9uZW50TmFtZSh0eXBlLnR5cGUpIHx8ICdVbmtub3duJykgKyBcIiAvPlwiO1xuICAgICAgaW5mbyA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgZXhwb3J0IGEgSlNYIGxpdGVyYWwgaW5zdGVhZCBvZiBhIGNvbXBvbmVudD8nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eXBlU3RyaW5nID0gdHlwZW9mIHR5cGU7XG4gICAgfVxuXG4gICAge1xuICAgICAgZXJyb3IoJ1JlYWN0LmNyZWF0ZUVsZW1lbnQ6IHR5cGUgaXMgaW52YWxpZCAtLSBleHBlY3RlZCBhIHN0cmluZyAoZm9yICcgKyAnYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSAnICsgJ2NvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzJywgdHlwZVN0cmluZywgaW5mbyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IC8vIFRoZSByZXN1bHQgY2FuIGJlIG51bGxpc2ggaWYgYSBtb2NrIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIHVzZWQuXG4gIC8vIFRPRE86IERyb3AgdGhpcyB3aGVuIHRoZXNlIGFyZSBubyBsb25nZXIgYWxsb3dlZCBhcyB0aGUgdHlwZSBhcmd1bWVudC5cblxuICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0gLy8gU2tpcCBrZXkgd2FybmluZyBpZiB0aGUgdHlwZSBpc24ndCB2YWxpZCBzaW5jZSBvdXIga2V5IHZhbGlkYXRpb24gbG9naWNcbiAgLy8gZG9lc24ndCBleHBlY3QgYSBub24tc3RyaW5nL2Z1bmN0aW9uIHR5cGUgYW5kIGNhbiB0aHJvdyBjb25mdXNpbmcgZXJyb3JzLlxuICAvLyBXZSBkb24ndCB3YW50IGV4Y2VwdGlvbiBiZWhhdmlvciB0byBkaWZmZXIgYmV0d2VlbiBkZXYgYW5kIHByb2QuXG4gIC8vIChSZW5kZXJpbmcgd2lsbCB0aHJvdyB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlIGFuZCBhcyBzb29uIGFzIHRoZSB0eXBlIGlzXG4gIC8vIGZpeGVkLCB0aGUga2V5IHdhcm5pbmdzIHdpbGwgYXBwZWFyLilcblxuXG4gIGlmICh2YWxpZFR5cGUpIHtcbiAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCB0eXBlKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZSA9PT0gZXhwb3J0cy5GcmFnbWVudCkge1xuICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50KTtcbiAgfSBlbHNlIHtcbiAgICB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxudmFyIGRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5ID0gZmFsc2U7XG5mdW5jdGlvbiBjcmVhdGVGYWN0b3J5V2l0aFZhbGlkYXRpb24odHlwZSkge1xuICB2YXIgdmFsaWRhdGVkRmFjdG9yeSA9IGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbi5iaW5kKG51bGwsIHR5cGUpO1xuICB2YWxpZGF0ZWRGYWN0b3J5LnR5cGUgPSB0eXBlO1xuXG4gIHtcbiAgICBpZiAoIWRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5KSB7XG4gICAgICBkaWRXYXJuQWJvdXREZXByZWNhdGVkQ3JlYXRlRmFjdG9yeSA9IHRydWU7XG5cbiAgICAgIHdhcm4oJ1JlYWN0LmNyZWF0ZUZhY3RvcnkoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBDb25zaWRlciB1c2luZyBKU1ggJyArICdvciB1c2UgUmVhY3QuY3JlYXRlRWxlbWVudCgpIGRpcmVjdGx5IGluc3RlYWQuJyk7XG4gICAgfSAvLyBMZWdhY3kgaG9vazogcmVtb3ZlIGl0XG5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWxpZGF0ZWRGYWN0b3J5LCAndHlwZScsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhcm4oJ0ZhY3RvcnkudHlwZSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdGhlIGNsYXNzIGRpcmVjdGx5ICcgKyAnYmVmb3JlIHBhc3NpbmcgaXQgdG8gY3JlYXRlRmFjdG9yeS4nKTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3R5cGUnLCB7XG4gICAgICAgICAgdmFsdWU6IHR5cGVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlZEZhY3Rvcnk7XG59XG5mdW5jdGlvbiBjbG9uZUVsZW1lbnRXaXRoVmFsaWRhdGlvbihlbGVtZW50LCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBjbG9uZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGFyZ3VtZW50c1tpXSwgbmV3RWxlbWVudC50eXBlKTtcbiAgfVxuXG4gIHZhbGlkYXRlUHJvcFR5cGVzKG5ld0VsZW1lbnQpO1xuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cblxue1xuXG4gIHRyeSB7XG4gICAgdmFyIGZyb3plbk9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xuXG4gICAgbmV3IE1hcChbW2Zyb3plbk9iamVjdCwgbnVsbF1dKTtcbiAgICBuZXcgU2V0KFtmcm96ZW5PYmplY3RdKTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLW5ldyAqL1xuICB9IGNhdGNoIChlKSB7XG4gIH1cbn1cblxudmFyIGNyZWF0ZUVsZW1lbnQkMSA9ICBjcmVhdGVFbGVtZW50V2l0aFZhbGlkYXRpb24gO1xudmFyIGNsb25lRWxlbWVudCQxID0gIGNsb25lRWxlbWVudFdpdGhWYWxpZGF0aW9uIDtcbnZhciBjcmVhdGVGYWN0b3J5ID0gIGNyZWF0ZUZhY3RvcnlXaXRoVmFsaWRhdGlvbiA7XG52YXIgQ2hpbGRyZW4gPSB7XG4gIG1hcDogbWFwQ2hpbGRyZW4sXG4gIGZvckVhY2g6IGZvckVhY2hDaGlsZHJlbixcbiAgY291bnQ6IGNvdW50Q2hpbGRyZW4sXG4gIHRvQXJyYXk6IHRvQXJyYXksXG4gIG9ubHk6IG9ubHlDaGlsZFxufTtcblxuZXhwb3J0cy5DaGlsZHJlbiA9IENoaWxkcmVuO1xuZXhwb3J0cy5Db21wb25lbnQgPSBDb21wb25lbnQ7XG5leHBvcnRzLlB1cmVDb21wb25lbnQgPSBQdXJlQ29tcG9uZW50O1xuZXhwb3J0cy5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzO1xuZXhwb3J0cy5jbG9uZUVsZW1lbnQgPSBjbG9uZUVsZW1lbnQkMTtcbmV4cG9ydHMuY3JlYXRlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ7XG5leHBvcnRzLmNyZWF0ZUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50JDE7XG5leHBvcnRzLmNyZWF0ZUZhY3RvcnkgPSBjcmVhdGVGYWN0b3J5O1xuZXhwb3J0cy5jcmVhdGVSZWYgPSBjcmVhdGVSZWY7XG5leHBvcnRzLmZvcndhcmRSZWYgPSBmb3J3YXJkUmVmO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudCA9IGlzVmFsaWRFbGVtZW50O1xuZXhwb3J0cy5sYXp5ID0gbGF6eTtcbmV4cG9ydHMubWVtbyA9IG1lbW87XG5leHBvcnRzLnVzZUNhbGxiYWNrID0gdXNlQ2FsbGJhY2s7XG5leHBvcnRzLnVzZUNvbnRleHQgPSB1c2VDb250ZXh0O1xuZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlID0gdXNlRGVidWdWYWx1ZTtcbmV4cG9ydHMudXNlRWZmZWN0ID0gdXNlRWZmZWN0O1xuZXhwb3J0cy51c2VJbXBlcmF0aXZlSGFuZGxlID0gdXNlSW1wZXJhdGl2ZUhhbmRsZTtcbmV4cG9ydHMudXNlTGF5b3V0RWZmZWN0ID0gdXNlTGF5b3V0RWZmZWN0O1xuZXhwb3J0cy51c2VNZW1vID0gdXNlTWVtbztcbmV4cG9ydHMudXNlUmVkdWNlciA9IHVzZVJlZHVjZXI7XG5leHBvcnRzLnVzZVJlZiA9IHVzZVJlZjtcbmV4cG9ydHMudXNlU3RhdGUgPSB1c2VTdGF0ZTtcbmV4cG9ydHMudmVyc2lvbiA9IFJlYWN0VmVyc2lvbjtcbiAgfSkoKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P3J1bGVTZXRbMV0ucnVsZXNbMV0udXNlWzJdIS4vZDN2NHBwLnNjc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcblxuICAgICAgb3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbiAgICBcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P3J1bGVTZXRbMV0ucnVsZXNbMV0udXNlWzJdIS4vZDN2NHBwLnNjc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHN0eWxlc0luRE9NID0gW107XG5cbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5ET00ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5ET01baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleEJ5SWRlbnRpZmllciA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXSxcbiAgICAgIHN1cHBvcnRzOiBpdGVtWzRdLFxuICAgICAgbGF5ZXI6IGl0ZW1bNV1cbiAgICB9O1xuXG4gICAgaWYgKGluZGV4QnlJZGVudGlmaWVyICE9PSAtMSkge1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnJlZmVyZW5jZXMrKztcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS51cGRhdGVyKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB1cGRhdGVyID0gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLmJ5SW5kZXggPSBpO1xuICAgICAgc3R5bGVzSW5ET00uc3BsaWNlKGksIDAsIHtcbiAgICAgICAgaWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgICAgdXBkYXRlcjogdXBkYXRlcixcbiAgICAgICAgcmVmZXJlbmNlczogMVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWRlbnRpZmllcnMucHVzaChpZGVudGlmaWVyKTtcbiAgfVxuXG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cblxuZnVuY3Rpb24gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucykge1xuICB2YXIgYXBpID0gb3B0aW9ucy5kb21BUEkob3B0aW9ucyk7XG4gIGFwaS51cGRhdGUob2JqKTtcblxuICB2YXIgdXBkYXRlciA9IGZ1bmN0aW9uIHVwZGF0ZXIobmV3T2JqKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiYgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiYgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCAmJiBuZXdPYmouc3VwcG9ydHMgPT09IG9iai5zdXBwb3J0cyAmJiBuZXdPYmoubGF5ZXIgPT09IG9iai5sYXllcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFwaS51cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbW92ZSgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gdXBkYXRlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGlzdCA9IGxpc3QgfHwgW107XG4gIHZhciBsYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUobmV3TGlzdCkge1xuICAgIG5ld0xpc3QgPSBuZXdMaXN0IHx8IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cblxuICAgIHZhciBuZXdMYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obmV3TGlzdCwgb3B0aW9ucyk7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9pZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW19pXTtcblxuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHN0eWxlc0luRE9NW19pbmRleF0ucmVmZXJlbmNlcyA9PT0gMCkge1xuICAgICAgICBzdHlsZXNJbkRPTVtfaW5kZXhdLnVwZGF0ZXIoKTtcblxuICAgICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoX2luZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgbWVtbyA9IHt9O1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cbmZ1bmN0aW9uIGdldFRhcmdldCh0YXJnZXQpIHtcbiAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7IC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG5cbiAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gIH1cblxuICByZXR1cm4gbWVtb1t0YXJnZXRdO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxuZnVuY3Rpb24gaW5zZXJ0QnlTZWxlY3RvcihpbnNlcnQsIHN0eWxlKSB7XG4gIHZhciB0YXJnZXQgPSBnZXRUYXJnZXQoaW5zZXJ0KTtcblxuICBpZiAoIXRhcmdldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gIH1cblxuICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydEJ5U2VsZWN0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gIG9wdGlvbnMuc2V0QXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLmF0dHJpYnV0ZXMpO1xuICBvcHRpb25zLmluc2VydChlbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xuICByZXR1cm4gZWxlbWVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzKHN0eWxlRWxlbWVudCkge1xuICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09IFwidW5kZWZpbmVkXCIgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG5cbiAgaWYgKG5vbmNlKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIG5vbmNlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlczsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gXCJcIjtcblxuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQob2JqLnN1cHBvcnRzLCBcIikge1wiKTtcbiAgfVxuXG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJAbWVkaWEgXCIuY29uY2F0KG9iai5tZWRpYSwgXCIge1wiKTtcbiAgfVxuXG4gIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2Ygb2JqLmxheWVyICE9PSBcInVuZGVmaW5lZFwiO1xuXG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJAbGF5ZXJcIi5jb25jYXQob2JqLmxheWVyLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQob2JqLmxheWVyKSA6IFwiXCIsIFwiIHtcIik7XG4gIH1cblxuICBjc3MgKz0gb2JqLmNzcztcblxuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuICBpZiAoc291cmNlTWFwICYmIHR5cGVvZiBidG9hICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH0gLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuXG4gIG9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZUVsZW1lbnQucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudCk7XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG5mdW5jdGlvbiBkb21BUEkob3B0aW9ucykge1xuICB2YXIgc3R5bGVFbGVtZW50ID0gb3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG4gIHJldHVybiB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUob2JqKSB7XG4gICAgICBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaik7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkb21BUEk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQpIHtcbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R5bGVUYWdUcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmFkZ2UgPSB2b2lkIDA7XG52YXIgUmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgQmFkZ2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJhZGdlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEJhZGdlKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEJhZGdlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBfX2Fzc2lnbih7fSwgdGhpcy5wcm9wcywgeyBjbGFzc05hbWU6ICdiYWRnZSAnICsgdGhpcy5wcm9wcy5jbGFzc05hbWUgfSkpO1xuICAgIH07XG4gICAgcmV0dXJuIEJhZGdlO1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuQmFkZ2UgPSBCYWRnZTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJ1dHRvbiA9IHZvaWQgMDtcbnZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbnZhciBXYXZlc18xID0gcmVxdWlyZShcIi4vV2F2ZXNcIik7XG52YXIgQnV0dG9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhCdXR0b24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQnV0dG9uKHByb3BzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5lbCA9IG51bGw7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGlzYXRpb24gb2YgdGhlIHdhdmUgZWZmZWN0IGFmdGVyIHRoZSBjb21wb25lbnQgZGlkIG1vdW50XG4gICAgICovXG4gICAgQnV0dG9uLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuZWwpIHtcbiAgICAgICAgICAgIG5ldyBXYXZlc18xLmRlZmF1bHQodGhpcy5lbCwgeyBkdXJhdGlvbjogOTUwIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBCdXR0b24ucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGNsYXNzTmFtZSA9IFwiYnRuIHdhdmVzLWVmZmVjdCBcIjtcbiAgICAgICAgLy8gaWYgKHRoaXMucHJvcHMubW9kZWwgPT0gXCJjaXJjbGVcIikge1xuICAgICAgICAvLyAgIGNsYXNzTmFtZSArPSBcImJ0bi1mbG9hdGluZyBcIjtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBpZiAodGhpcy5wcm9wcy5zaXplID09IFwibGFyZ2VcIikge1xuICAgICAgICAvLyAgIGNsYXNzTmFtZSArPSBcImJ0bi1sYXJnZSBcIjtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBpZiAodGhpcy5wcm9wcy5zaXplID09IFwic21hbGxcIikge1xuICAgICAgICAvLyAgIGNsYXNzTmFtZSArPSBcImJ0bi1zbWFsbCBcIjtcbiAgICAgICAgLy8gfVxuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIF9fYXNzaWduKHt9LCB0aGlzLnByb3BzLCB7IHJlZjogZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuZWwgPSBlbDtcbiAgICAgICAgICAgIH0sIGNsYXNzTmFtZTogY2xhc3NOYW1lICsgdGhpcy5wcm9wcy5jbGFzc05hbWUgfSkpKTtcbiAgICB9O1xuICAgIHJldHVybiBCdXR0b247XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5CdXR0b24gPSBCdXR0b247XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBXYXZlcyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBXYXZlcyhjbXAsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy5lbCA9IGNtcDtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgLy9XcmFwIGlucHV0IGluc2lkZSA8aT4gdGFnXG4gICAgICAgIHRoaXMud3JhcElucHV0KCk7XG4gICAgICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cpIHtcbiAgICAgICAgICAgIHRoaXMuZWwuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMudHJpZ2dlckVmZmVjdC5iaW5kKF90aGlzKShlKTtcbiAgICAgICAgICAgIH0sIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBfdGhpcy50cmlnZ2VyRWZmZWN0LmJpbmQoX3RoaXMpKGUpO1xuICAgICAgICB9LCBmYWxzZSk7XG4gICAgfVxuICAgIFdhdmVzLnByb3RvdHlwZS5zaG93RWZmZWN0ID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgLy8gRGlzYWJsZSByaWdodCBjbGlja1xuICAgICAgICBpZiAoZS5idXR0b24gPT09IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDcmVhdGUgcmlwcGxlXG4gICAgICAgIHZhciByaXBwbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgcmlwcGxlLmNsYXNzTmFtZSA9ICd3YXZlcy1yaXBwbGUnO1xuICAgICAgICB0aGlzLmVsLmFwcGVuZENoaWxkKHJpcHBsZSk7XG4gICAgICAgIHRoaXMucmlwcGxlID0gcmlwcGxlO1xuICAgICAgICAvLyBHZXQgY2xpY2sgY29vcmRpbmF0ZSBhbmQgZWxlbWVudCB3aXRkaFxuICAgICAgICB2YXIgcG9zID0gdGhpcy5vZmZzZXQoKTtcbiAgICAgICAgdmFyIHJlbGF0aXZlWSA9IChlLnBhZ2VZIC0gcG9zLnRvcCk7XG4gICAgICAgIHZhciByZWxhdGl2ZVggPSAoZS5wYWdlWCAtIHBvcy5sZWZ0KTtcbiAgICAgICAgdmFyIHNjYWxlID0gJ3NjYWxlKCcgKyAoKHRoaXMuZWwuY2xpZW50V2lkdGggLyAxMDApICogMTApICsgJyknO1xuICAgICAgICAvLyBTdXBwb3J0IGZvciB0b3VjaCBkZXZpY2VzXG4gICAgICAgIGlmICgndG91Y2hlcycgaW4gZSkge1xuICAgICAgICAgICAgcmVsYXRpdmVZID0gKGUudG91Y2hlc1swXS5wYWdlWSAtIHBvcy50b3ApO1xuICAgICAgICAgICAgcmVsYXRpdmVYID0gKGUudG91Y2hlc1swXS5wYWdlWCAtIHBvcy5sZWZ0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBdHRhY2ggZGF0YSB0byBlbGVtZW50XG4gICAgICAgIHRoaXMucmlwcGxlLnNldEF0dHJpYnV0ZSgnZGF0YS1ob2xkJywgRGF0ZS5ub3coKSk7XG4gICAgICAgIHRoaXMucmlwcGxlLnNldEF0dHJpYnV0ZSgnZGF0YS1zY2FsZScsIHNjYWxlKTtcbiAgICAgICAgdGhpcy5yaXBwbGUuc2V0QXR0cmlidXRlKCdkYXRhLXgnLCByZWxhdGl2ZVgpO1xuICAgICAgICB0aGlzLnJpcHBsZS5zZXRBdHRyaWJ1dGUoJ2RhdGEteScsIHJlbGF0aXZlWSk7XG4gICAgICAgIC8vIFNldCByaXBwbGUgcG9zaXRpb25cbiAgICAgICAgdmFyIHJpcHBsZVN0eWxlID0ge1xuICAgICAgICAgICAgJ3RvcCc6IHJlbGF0aXZlWSArICdweCcsXG4gICAgICAgICAgICAnbGVmdCc6IHJlbGF0aXZlWCArICdweCdcbiAgICAgICAgfTtcbiAgICAgICAgLy90aGlzLnJpcHBsZS5jbGFzc05hbWUgPSAgdGhpcy5yaXBwbGUuY2xhc3NOYW1lICsgJyB3YXZlcy1ub3RyYW5zaXRpb24nO1xuICAgICAgICB0aGlzLnJpcHBsZS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgdGhpcy5jb252ZXJ0U3R5bGUocmlwcGxlU3R5bGUpKTtcbiAgICAgICAgdGhpcy5yaXBwbGUuY2xhc3NOYW1lID0gdGhpcy5yaXBwbGUuY2xhc3NOYW1lLnJlcGxhY2UoJ3dhdmVzLW5vdHJhbnNpdGlvbicsICcnKTtcbiAgICAgICAgLy8gU2NhbGUgdGhlIHJpcHBsZVxuICAgICAgICByaXBwbGVTdHlsZVsnLXdlYmtpdC10cmFuc2Zvcm0nXSA9IHNjYWxlO1xuICAgICAgICByaXBwbGVTdHlsZVsnLW1vei10cmFuc2Zvcm0nXSA9IHNjYWxlO1xuICAgICAgICByaXBwbGVTdHlsZVsnLW1zLXRyYW5zZm9ybSddID0gc2NhbGU7XG4gICAgICAgIHJpcHBsZVN0eWxlWyctby10cmFuc2Zvcm0nXSA9IHNjYWxlO1xuICAgICAgICByaXBwbGVTdHlsZS50cmFuc2Zvcm0gPSBzY2FsZTtcbiAgICAgICAgcmlwcGxlU3R5bGUub3BhY2l0eSA9ICcxJztcbiAgICAgICAgcmlwcGxlU3R5bGVbJy13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbiddID0gMiAqIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAvIDMgKyAnbXMnO1xuICAgICAgICByaXBwbGVTdHlsZVsnLW1vei10cmFuc2l0aW9uLWR1cmF0aW9uJ10gPSAyICogdGhpcy5vcHRpb25zLmR1cmF0aW9uIC8gMyArICdtcyc7XG4gICAgICAgIHJpcHBsZVN0eWxlWyctby10cmFuc2l0aW9uLWR1cmF0aW9uJ10gPSAyICogdGhpcy5vcHRpb25zLmR1cmF0aW9uIC8gMyArICdtcyc7XG4gICAgICAgIHJpcHBsZVN0eWxlWyd0cmFuc2l0aW9uLWR1cmF0aW9uJ10gPSAyICogdGhpcy5vcHRpb25zLmR1cmF0aW9uIC8gMyArICdtcyc7XG4gICAgICAgIHJpcHBsZVN0eWxlWyctd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uJ10gPSAnY3ViaWMtYmV6aWVyKDAuMjUwLCAwLjQ2MCwgMC40NTAsIDAuOTQwKSc7XG4gICAgICAgIHJpcHBsZVN0eWxlWyctbW96LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uJ10gPSAnY3ViaWMtYmV6aWVyKDAuMjUwLCAwLjQ2MCwgMC40NTAsIDAuOTQwKSc7XG4gICAgICAgIHJpcHBsZVN0eWxlWyctby10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiddID0gJ2N1YmljLWJlemllcigwLjI1MCwgMC40NjAsIDAuNDUwLCAwLjk0MCknO1xuICAgICAgICByaXBwbGVTdHlsZVsndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nXSA9ICdjdWJpYy1iZXppZXIoMC4yNTAsIDAuNDYwLCAwLjQ1MCwgMC45NDApJztcbiAgICAgICAgdGhpcy5yaXBwbGUuc2V0QXR0cmlidXRlKCdzdHlsZScsIHRoaXMuY29udmVydFN0eWxlKHJpcHBsZVN0eWxlKSk7XG4gICAgfTtcbiAgICBXYXZlcy5wcm90b3R5cGUuaGlkZUVmZmVjdCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIC8vRWZmZWN0LmhpZGVcbiAgICAgICAgdmFyIHJpcHBsZSA9IHRoaXMuZWwubGFzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgaWYgKHJpcHBsZSAmJiByaXBwbGUuY2xhc3NMaXN0LmNvbnRhaW5zKFwid2F2ZXMtcmlwcGxlXCIpKSB7XG4gICAgICAgICAgICB2YXIgcmVsYXRpdmVYID0gcmlwcGxlLmdldEF0dHJpYnV0ZSgnZGF0YS14Jyk7XG4gICAgICAgICAgICB2YXIgcmVsYXRpdmVZID0gcmlwcGxlLmdldEF0dHJpYnV0ZSgnZGF0YS15Jyk7XG4gICAgICAgICAgICB2YXIgc2NhbGUgPSByaXBwbGUuZ2V0QXR0cmlidXRlKCdkYXRhLXNjYWxlJyk7XG4gICAgICAgICAgICAvLyBHZXQgZGVsYXkgYmVldHdlZW4gbW91c2Vkb3duIGFuZCBtb3VzZSBsZWF2ZVxuICAgICAgICAgICAgdmFyIGRpZmYgPSBEYXRlLm5vdygpIC0gTnVtYmVyKHJpcHBsZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtaG9sZCcpKTtcbiAgICAgICAgICAgIHZhciBkZWxheSA9IHRoaXMub3B0aW9ucy5kdXJhdGlvbiAvIDIgLSBkaWZmO1xuICAgICAgICAgICAgaWYgKGRlbGF5IDwgMCkge1xuICAgICAgICAgICAgICAgIGRlbGF5ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBtZSA9IHRoaXM7XG4gICAgICAgICAgICAvLyBGYWRlIG91dCByaXBwbGUgYWZ0ZXIgZGVsYXlcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBzdHlsZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgJ3RvcCc6IHJlbGF0aXZlWSArICdweCcsXG4gICAgICAgICAgICAgICAgICAgICdsZWZ0JzogcmVsYXRpdmVYICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgJ29wYWNpdHknOiAnMCcsXG4gICAgICAgICAgICAgICAgICAgIC8vIER1cmF0aW9uXG4gICAgICAgICAgICAgICAgICAgICctd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb24nOiBtZS5vcHRpb25zLmR1cmF0aW9uIC8gMyArICdtcycsXG4gICAgICAgICAgICAgICAgICAgICctbW96LXRyYW5zaXRpb24tZHVyYXRpb24nOiBtZS5vcHRpb25zLmR1cmF0aW9uIC8gMyArICdtcycsXG4gICAgICAgICAgICAgICAgICAgICctby10cmFuc2l0aW9uLWR1cmF0aW9uJzogbWUub3B0aW9ucy5kdXJhdGlvbiAvIDMgKyAnbXMnLFxuICAgICAgICAgICAgICAgICAgICAndHJhbnNpdGlvbi1kdXJhdGlvbic6IG1lLm9wdGlvbnMuZHVyYXRpb24gLyAzICsgJ21zJyxcbiAgICAgICAgICAgICAgICAgICAgJy13ZWJraXQtdHJhbnNmb3JtJzogc2NhbGUsXG4gICAgICAgICAgICAgICAgICAgICctbW96LXRyYW5zZm9ybSc6IHNjYWxlLFxuICAgICAgICAgICAgICAgICAgICAnLW1zLXRyYW5zZm9ybSc6IHNjYWxlLFxuICAgICAgICAgICAgICAgICAgICAnLW8tdHJhbnNmb3JtJzogc2NhbGUsXG4gICAgICAgICAgICAgICAgICAgICd0cmFuc2Zvcm0nOiBzY2FsZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJpcHBsZS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgbWUuY29udmVydFN0eWxlKHN0eWxlKSk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZS5lbC5yZW1vdmVDaGlsZChyaXBwbGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBtZS5vcHRpb25zLmR1cmF0aW9uKTtcbiAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgV2F2ZXMucHJvdG90eXBlLndyYXBJbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVsID0gdGhpcy5lbDtcbiAgICAgICAgaWYgKGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0Jykge1xuICAgICAgICAgICAgdmFyIHBhcmVudCA9IGVsLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAvLyBJZiBpbnB1dCBhbHJlYWR5IGhhdmUgcGFyZW50IGp1c3QgcGFzcyB0aHJvdWdoXG4gICAgICAgICAgICBpZiAocGFyZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2knICYmIHBhcmVudC5jbGFzc05hbWUuaW5kZXhPZignd2F2ZXMtZWZmZWN0JykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUHV0IGVsZW1lbnQgY2xhc3MgYW5kIHN0eWxlIHRvIHRoZSBzcGVjaWZpZWQgcGFyZW50XG4gICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKTtcbiAgICAgICAgICAgIHdyYXBwZXIuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lICsgJyB3YXZlcy1pbnB1dC13cmFwcGVyJztcbiAgICAgICAgICAgIHZhciBlbGVtZW50U3R5bGUgPSBlbC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJyk7XG4gICAgICAgICAgICBpZiAoIWVsZW1lbnRTdHlsZSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgZWxlbWVudFN0eWxlKTtcbiAgICAgICAgICAgIGVsLmNsYXNzTmFtZSA9ICd3YXZlcy1idXR0b24taW5wdXQnO1xuICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgICAgICAgLy8gUHV0IGVsZW1lbnQgYXMgY2hpbGRcbiAgICAgICAgICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQod3JhcHBlciwgZWwpO1xuICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChlbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFdhdmVzLnByb3RvdHlwZS50cmlnZ2VyRWZmZWN0ID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy5zaG93RWZmZWN0KGUpO1xuICAgICAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gd2luZG93KSB7XG4gICAgICAgICAgICB0aGlzLmVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oaWRlRWZmZWN0LmJpbmQoX3RoaXMpKGUpO1xuICAgICAgICAgICAgfSwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5lbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaGlkZUVmZmVjdC5iaW5kKF90aGlzKShlKTtcbiAgICAgICAgICAgIH0sIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgX3RoaXMuaGlkZUVmZmVjdC5iaW5kKF90aGlzKShlKTtcbiAgICAgICAgfSwgZmFsc2UpO1xuICAgICAgICB0aGlzLmVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgX3RoaXMuaGlkZUVmZmVjdC5iaW5kKF90aGlzKShlKTtcbiAgICAgICAgfSwgZmFsc2UpO1xuICAgICAgICB0aGlzLmVsLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgX3RoaXMuaGlkZUVmZmVjdC5iaW5kKF90aGlzKShlKTtcbiAgICAgICAgfSwgZmFsc2UpO1xuICAgIH07XG4gICAgV2F2ZXMucHJvdG90eXBlLmlzV2luZG93ID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIG9iaiA9PT0gb2JqLndpbmRvdztcbiAgICB9O1xuICAgIFdhdmVzLnByb3RvdHlwZS5nZXRXaW5kb3cgPSBmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1dpbmRvdyhlbGVtKSA/IGVsZW0gOiBlbGVtLm5vZGVUeXBlID09PSA5ICYmIGVsZW0uZGVmYXVsdFZpZXc7XG4gICAgfTtcbiAgICBXYXZlcy5wcm90b3R5cGUub2Zmc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZG9jRWxlbSwgd2luLCBib3ggPSB7IHRvcDogMCwgbGVmdDogMCB9LCBkb2MgPSB0aGlzLmVsICYmIHRoaXMuZWwub3duZXJEb2N1bWVudDtcbiAgICAgICAgZG9jRWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgIT09IHR5cGVvZiB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGJveCA9IHRoaXMuZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgd2luID0gdGhpcy5nZXRXaW5kb3coZG9jKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvcDogYm94LnRvcCArIHdpbi5wYWdlWU9mZnNldCAtIGRvY0VsZW0uY2xpZW50VG9wLFxuICAgICAgICAgICAgbGVmdDogYm94LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXQgLSBkb2NFbGVtLmNsaWVudExlZnRcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIFdhdmVzLnByb3RvdHlwZS5jb252ZXJ0U3R5bGUgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBzdHlsZSA9ICcnO1xuICAgICAgICBmb3IgKHZhciBhIGluIG9iaikge1xuICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShhKSkge1xuICAgICAgICAgICAgICAgIHN0eWxlICs9IChhICsgJzonICsgb2JqW2FdICsgJzsnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgfTtcbiAgICByZXR1cm4gV2F2ZXM7XG59KCkpO1xuZXhwb3J0cy5kZWZhdWx0ID0gV2F2ZXM7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5DYXJkQWN0aW9uID0gZXhwb3J0cy5DYXJkVGl0bGUgPSBleHBvcnRzLkNhcmRDb250ZW50ID0gZXhwb3J0cy5DYXJkID0gdm9pZCAwO1xudmFyIFJlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xudmFyIENhcmQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKENhcmQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ2FyZCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBDYXJkLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9fYXNzaWduKHt9LCB0aGlzLnByb3BzLCB7IGNsYXNzTmFtZTogXCJjYXJkIFwiICsgdGhpcy5wcm9wcy5jbGFzc05hbWUgfSkpO1xuICAgIH07XG4gICAgcmV0dXJuIENhcmQ7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5DYXJkID0gQ2FyZDtcbnZhciBDYXJkQ29udGVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ2FyZENvbnRlbnQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ2FyZENvbnRlbnQoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgQ2FyZENvbnRlbnQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9fYXNzaWduKHt9LCB0aGlzLnByb3BzLCB7IGNsYXNzTmFtZTogXCJjYXJkLWNvbnRlbnQgXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSB9KSkpO1xuICAgIH07XG4gICAgcmV0dXJuIENhcmRDb250ZW50O1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuQ2FyZENvbnRlbnQgPSBDYXJkQ29udGVudDtcbnZhciBDYXJkVGl0bGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKENhcmRUaXRsZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDYXJkVGl0bGUoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgQ2FyZFRpdGxlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMsIHsgY2xhc3NOYW1lOiBcImNhcmQtdGl0bGUgXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSB9KSkpO1xuICAgIH07XG4gICAgcmV0dXJuIENhcmRUaXRsZTtcbn0oUmVhY3QuQ29tcG9uZW50KSk7XG5leHBvcnRzLkNhcmRUaXRsZSA9IENhcmRUaXRsZTtcbnZhciBDYXJkQWN0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDYXJkQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENhcmRBY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgQ2FyZEFjdGlvbi5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMsIHsgY2xhc3NOYW1lOiBcImNhcmQtYWN0aW9uICBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lIH0pKSk7XG4gICAgfTtcbiAgICByZXR1cm4gQ2FyZEFjdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KSk7XG5leHBvcnRzLkNhcmRBY3Rpb24gPSBDYXJkQWN0aW9uO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ2hpcCA9IHZvaWQgMDtcbnZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbnZhciBDaGlwID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDaGlwLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENoaXAoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgQ2hpcC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfX2Fzc2lnbih7fSwgdGhpcy5wcm9wcywgeyBjbGFzc05hbWU6ICdjaGlwICcgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSB9KSk7IH07XG4gICAgcmV0dXJuIENoaXA7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5DaGlwID0gQ2hpcDtcbmV4cG9ydHMuZGVmYXVsdCA9IENoaXA7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db2xsYXBzVHJpZ2dlciA9IGV4cG9ydHMuQ29sbGFwc0JvZHkgPSBleHBvcnRzLkNvbGxhcHNpYmxlID0gdm9pZCAwO1xudmFyIFJlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xudmFyIEljb25fMSA9IHJlcXVpcmUoXCIuLi9pY29ucy9JY29uXCIpO1xudmFyIENvbGxhcHNpYmxlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDb2xsYXBzaWJsZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDb2xsYXBzaWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBDb2xsYXBzaWJsZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCBfX2Fzc2lnbih7fSwgdGhpcy5wcm9wcywgeyBjbGFzc05hbWU6IFwiY29sbGFwc2libGUgXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSB9KSkpO1xuICAgIH07XG4gICAgcmV0dXJuIENvbGxhcHNpYmxlO1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuQ29sbGFwc2libGUgPSBDb2xsYXBzaWJsZTtcbnZhciBDb2xsYXBzQm9keSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ29sbGFwc0JvZHksIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ29sbGFwc0JvZHkoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5lbCA9IG51bGw7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQ29sbGFwc0JvZHkucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9fYXNzaWduKHt9LCB0aGlzLnByb3BzLCB7IHJlZjogZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgICAgIF90aGlzLmVsID0gcmVmO1xuICAgICAgICAgICAgfSwgY2xhc3NOYW1lOiBcImNvbGxhcHNpYmxlLWJvZHkgXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSB9KSkpO1xuICAgIH07XG4gICAgcmV0dXJuIENvbGxhcHNCb2R5O1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuQ29sbGFwc0JvZHkgPSBDb2xsYXBzQm9keTtcbnZhciBDb2xsYXBzVHJpZ2dlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ29sbGFwc1RyaWdnZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ29sbGFwc1RyaWdnZXIoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGlzT3BlbjogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMuZWwgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIENvbGxhcHNUcmlnZ2VyLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gIG5ldyBXYXZlcyh0aGlzLmVsLCB7IGR1cmF0aW9uOiAxMDUwIH0pO1xuICAgIH07XG4gICAgQ29sbGFwc1RyaWdnZXIucHJvdG90eXBlLnNob3dIaWRlQm9keSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbGxhcHNlKGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5leHBhbmQoZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbGxhcHNUcmlnZ2VyLnByb3RvdHlwZS5jb2xsYXBzZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHZhciBjb2xsYXBzaWJsZSA9IHRoaXMuZmluZENvbGxhcHNpYmxlLmJpbmQodGhpcykoKTtcbiAgICAgICAgaWYgKGNvbGxhcHNpYmxlKSB7XG4gICAgICAgICAgICB2YXIgYm9keUVsID0gY29sbGFwc2libGUucXVlcnlTZWxlY3RvcihcIi5jb2xsYXBzaWJsZS1ib2R5XCIpO1xuICAgICAgICAgICAgaWYgKGJvZHlFbCkge1xuICAgICAgICAgICAgICAgIGJvZHlFbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICBpc09wZW46IGZhbHNlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbGxhcHNUcmlnZ2VyLnByb3RvdHlwZS5maW5kQ29sbGFwc2libGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYXJlbnRFbCA9IHRoaXMuZWwgJiYgdGhpcy5lbC5wYXJlbnRFbGVtZW50O1xuICAgICAgICBpZiAocGFyZW50RWwgJiYgIXBhcmVudEVsLmNsYXNzTGlzdC5jb250YWlucyhcImNvbGxhcHNpYmxlXCIpKSB7XG4gICAgICAgICAgICBwYXJlbnRFbCA9IHBhcmVudEVsICYmIHBhcmVudEVsLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmVudEVsO1xuICAgIH07XG4gICAgQ29sbGFwc1RyaWdnZXIucHJvdG90eXBlLmV4cGFuZCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHZhciBjb2xsYXBzaWJsZSA9IHRoaXMuZmluZENvbGxhcHNpYmxlLmJpbmQodGhpcykoKTtcbiAgICAgICAgaWYgKGNvbGxhcHNpYmxlKSB7XG4gICAgICAgICAgICB2YXIgYm9keUVsID0gY29sbGFwc2libGUucXVlcnlTZWxlY3RvcihcIi5jb2xsYXBzaWJsZS1ib2R5XCIpO1xuICAgICAgICAgICAgaWYgKGJvZHlFbCkge1xuICAgICAgICAgICAgICAgIGJvZHlFbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgaXNPcGVuOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbGxhcHNUcmlnZ2VyLnByb3RvdHlwZS5pc09wZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmlzT3BlbjtcbiAgICB9O1xuICAgIENvbGxhcHNUcmlnZ2VyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBpY29uID0gKHRoaXMuc3RhdGUuaXNPcGVuID09IHRydWUpID8gUmVhY3QuY3JlYXRlRWxlbWVudChJY29uXzEuSWNvbiwgeyBzdHlsZTogeyBmbG9hdDogXCJyaWdodFwiIH0gfSwgXCJjaGV2cm9uX2Rvd25cIikgOlxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChJY29uXzEuSWNvbiwgeyBzdHlsZTogeyBmbG9hdDogXCJyaWdodFwiIH0gfSwgXCJjaGV2cm9uX3JpZ2h0XCIpO1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMsIHsgcmVmOiBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuZWwgPSByZWY7XG4gICAgICAgICAgICB9LCBjbGFzc05hbWU6IFwiY29sbGFwc2libGUtaGVhZGVyIFwiICsgdGhpcy5wcm9wcy5jbGFzc05hbWUsIG9uQ2xpY2s6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBfdGhpcy5zaG93SGlkZUJvZHkuYmluZChfdGhpcykoZSk7IH0gfSksXG4gICAgICAgICAgICBpY29uLFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlbikpO1xuICAgIH07XG4gICAgcmV0dXJuIENvbGxhcHNUcmlnZ2VyO1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuQ29sbGFwc1RyaWdnZXIgPSBDb2xsYXBzVHJpZ2dlcjtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvbGxlY3Rpb25JdGVtID0gZXhwb3J0cy5Db2xsZWN0aW9uID0gdm9pZCAwO1xudmFyIFJlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xudmFyIENvbGxlY3Rpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKENvbGxlY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ29sbGVjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBDb2xsZWN0aW9uLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBjbGFzc05hbWUgPSB0aGlzLnByb3BzLmNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCBfX2Fzc2lnbih7fSwgdGhpcy5wcm9wcywgeyByZWY6IGZ1bmN0aW9uIChyKSB7IHJldHVybiBfdGhpcy5lbCA9IHI7IH0sIGNsYXNzTmFtZTogXCJjb2xsZWN0aW9uIFwiICsgKGNsYXNzTmFtZSB8fCBcIlwiKSB9KSk7XG4gICAgfTtcbiAgICByZXR1cm4gQ29sbGVjdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KSk7XG5leHBvcnRzLkNvbGxlY3Rpb24gPSBDb2xsZWN0aW9uO1xudmFyIENvbGxlY3Rpb25JdGVtID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDb2xsZWN0aW9uSXRlbSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDb2xsZWN0aW9uSXRlbSgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBDb2xsZWN0aW9uSXRlbS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5wcm9wcy5jbGFzc05hbWU7XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMsIHsgcmVmOiBmdW5jdGlvbiAocikgeyByZXR1cm4gX3RoaXMuZWwgPSByOyB9LCBjbGFzc05hbWU6IFwiY29sbGVjdGlvbi1pdGVtIFwiICsgKGNsYXNzTmFtZSB8fCBcIlwiKSB9KSk7XG4gICAgfTtcbiAgICByZXR1cm4gQ29sbGVjdGlvbkl0ZW07XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5Db2xsZWN0aW9uSXRlbSA9IENvbGxlY3Rpb25JdGVtO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRmllbGQgPSB2b2lkIDA7XG52YXIgUmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG4vLyBAdHMtaWdub3JlXG52YXIgViA9IHJlcXVpcmUoXCIuL3JleFwiKTtcbnZhciBGaWVsZCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRmllbGQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRmllbGQocHJvcHMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgbGFiZWxDbGFzc05hbWU6ICcnLFxuICAgICAgICAgICAgZm9jdXNDb3VudDogMCxcbiAgICAgICAgICAgIGVycm1zZzogXCJcIlxuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5pZCA9IF90aGlzLnV1aWR2NCgpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEZpZWxkLnByb3RvdHlwZS5nZXREZWZhdWx0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgICAgIGlkOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFsaWRhdGUnLFxuICAgICAgICAgICAgbGFiZWw6ICdUZXh0JyxcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGljb246ICdhY2NvdW50X2NpcmNsZSdcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIEZpZWxkLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWwgJiYgdGhpcy5lbC52YWx1ZTtcbiAgICB9O1xuICAgIEZpZWxkLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMuZWwpIHtcbiAgICAgICAgICAgIHRoaXMuZWwudmFsdWUgPSB2YWw7XG4gICAgICAgICAgICBpZiAodmFsICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbCAmJiB0aGlzLmxhYmVsLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBGaWVsZC5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUodHJ1ZSk7XG4gICAgfTtcbiAgICBGaWVsZC5wcm90b3R5cGUub25CbHVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5sYWJlbCAmJiAoKHRoaXMucHJvcHMucGxhY2Vob2xkZXIgIT09ICcnKSB8fCAodGhpcy5lbCAmJiB0aGlzLmVsLnZhbHVlICE9PSBcIlwiKSkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5sYWJlbC5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sYWJlbCAmJiB0aGlzLmxhYmVsLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uQmx1ciAmJiB0eXBlb2YgdGhpcy5wcm9wcy5vbkJsdXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkJsdXIoZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWxpZGF0ZSh0cnVlKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGZvY3VzQ291bnQ6IHRoaXMuc3RhdGUuZm9jdXNDb3VudCArIDEgfSk7XG4gICAgfTtcbiAgICBGaWVsZC5wcm90b3R5cGUub25Gb2N1cyA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmICh0aGlzLmxhYmVsICYmICF0aGlzLmxhYmVsLmNsYXNzTGlzdC5jb250YWlucyhcImFjdGl2ZVwiKSkge1xuICAgICAgICAgICAgdGhpcy5sYWJlbC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkZvY3VzICYmIHR5cGVvZiB0aGlzLnByb3BzLm9uRm9jdXMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkZvY3VzKGUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBGaWVsZC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiAoYmx1cmUpIHtcbiAgICAgICAgaWYgKGJsdXJlID09PSB2b2lkIDApIHsgYmx1cmUgPSBmYWxzZTsgfVxuICAgICAgICBpZiAoYmx1cmUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBmb2N1c0NvdW50OiB0aGlzLnN0YXRlLmZvY3VzQ291bnQgKyAxIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmZvY3VzQ291bnQgPiAwIHx8IGJsdXJlKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLnByb3BzLCBtaW4gPSBfYS5taW4sIG1heCA9IF9hLm1heCwgcmVxdWlyZWQgPSBfYS5yZXF1aXJlZCwgdnR5cGUgPSBfYS52dHlwZSwgdnR5cGVNc2cgPSBfYS52dHlwZU1zZztcbiAgICAgICAgICAgIGlmICh0aGlzLmVsICYmIHRoaXMuZWwudmFsdWUgJiYgdGhpcy5lbC52YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoXzEgPSB0aGlzLmVsLnZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAobWluICYmIG1heCAmJiAobGVuZ3RoXzEgPCBtaW4gfHwgbGVuZ3RoXzEgPiBtYXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBlcnJtc2c6IG1pbiAhPSBtYXggPyBcImRvaXQgYXZvaXIgdW5lIGxvbmdldXIgY29tcHJpc2UgZW50cmUgXCIuY29uY2F0KG1pbiwgXCIgZXQgXCIpLmNvbmNhdChtYXgsIFwiLlwiKSA6IFwiZG9pdCBhdm9pciB1bmUgbG9uZ2V1ciBkZSBcIi5jb25jYXQobWluLCBcIiBjYXJhY3RcXHUwMEU4cmVzXCIpIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsLmNsYXNzTGlzdC5yZW1vdmUoJ3ZhbGlkJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWwuY2xhc3NMaXN0LmFkZCgnaW52YWxpZCcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1ha2VJblZhbGlkKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIW1pbiAmJiBtYXggJiYgbGVuZ3RoXzEgPiBtYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVycm1zZzogXCJkb2l0IGF2b2lyIHVuZSBsb25nZXVyIG1heGltYWwgZGUgXCIuY29uY2F0KG1heCwgXCIuXCIpIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsLmNsYXNzTGlzdC5yZW1vdmUoJ3ZhbGlkJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWwuY2xhc3NMaXN0LmFkZCgnaW52YWxpZCcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1ha2VJblZhbGlkKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobWluICYmICFtYXggJiYgbGVuZ3RoXzEgPCBtaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVycm1zZzogXCJkb2l0IGF2b2lyIHVuZSBsb25nZXVyIG1pbmltYWwgZGUgXCIuY29uY2F0KG1pbiwgXCIuXCIpIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsLmNsYXNzTGlzdC5yZW1vdmUoJ3ZhbGlkJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWwuY2xhc3NMaXN0LmFkZCgnaW52YWxpZCcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1ha2VJblZhbGlkKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodnR5cGUgJiYgIVZbdnR5cGVdLnRlc3QodGhpcy5lbC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVycm1zZzogdnR5cGVNc2cgfHwgXCJEb2l0IFxcdTAwRUF0cmUgdW4gXCIuY29uY2F0KHZ0eXBlLCBcIiB2YWxpZGUuXCIpIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsLmNsYXNzTGlzdC5yZW1vdmUoJ3ZhbGlkJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWwuY2xhc3NMaXN0LmFkZCgnaW52YWxpZCcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1ha2VJblZhbGlkKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBlcnJtc2c6IFwiXCIgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWwuY2xhc3NMaXN0LnJlbW92ZSgnaW52YWxpZCcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsLmNsYXNzTGlzdC5hZGQoJ3ZhbGlkJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZXJybXNnOiBcIk5lIHBldSBwYXMgZXRyZSB2aWRlLlwiIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1ha2VJblZhbGlkKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBlcnJtc2c6IFwiXCIgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFrZVZhbGlkKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5lbC5jbGFzc0xpc3QuYWRkKCd2YWxpZCcpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgRmllbGQucHJvdG90eXBlLm1ha2VJblZhbGlkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5lbCkge1xuICAgICAgICAgICAgdGhpcy5lbC5jbGFzc0xpc3QucmVtb3ZlKCd2YWxpZCcpO1xuICAgICAgICAgICAgdGhpcy5lbC5jbGFzc0xpc3QuYWRkKCdpbnZhbGlkJyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEZpZWxkLnByb3RvdHlwZS5tYWtlVmFsaWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmVsKSB7XG4gICAgICAgICAgICB0aGlzLmVsLmNsYXNzTGlzdC5hZGQoJ3ZhbGlkJyk7XG4gICAgICAgICAgICB0aGlzLmVsLmNsYXNzTGlzdC5yZW1vdmUoJ2ludmFsaWQnKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRmllbGQucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5sYWJlbCAmJiAoKHRoaXMucHJvcHMucGxhY2Vob2xkZXIgIT09ICcnKSB8fCAodGhpcy5lbCAmJiB0aGlzLmVsLnZhbHVlICE9PSBcIlwiKSkpIHtcbiAgICAgICAgICAgIHRoaXMubGFiZWwuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBsYWJlbENsYXNzTmFtZTogJ2FjdGl2ZSdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBGaWVsZC5wcm90b3R5cGUub25LZXlVcCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmIChlICYmIFwiRW50ZXJcIiA9PT0gZS5rZXkgJiYgdGhpcy5wcm9wcy5vbkVudGVyS2V5KSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkVudGVyS2V5KGUsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICB9O1xuICAgIEZpZWxkLnByb3RvdHlwZS51dWlkdjQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcmV0dXJuIChbMWU3XSArIC0xZTMgKyAtNGUzICsgLThlMyArIC0xZTExKS5yZXBsYWNlKC9bMDE4XS9nLCBmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgcmV0dXJuIChjIF4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgxKSlbMF0gJiAxNSA+PiBjIC8gNCkudG9TdHJpbmcoMTYpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEZpZWxkLnByb3RvdHlwZS5nZXRFcnJvclZpZXcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmVycm1zZyAhPSBudWxsICYmIHRoaXMuc3RhdGUuZXJybXNnICE9PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJoZWxwZXItdGV4dFwiIH0sIHRoaXMuc3RhdGUuZXJybXNnKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRmllbGQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHByb3BzID0gX19hc3NpZ24oe30sIHRoaXMucHJvcHMpO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGRlbGV0ZSBwcm9wcy52dHlwZU1zZztcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBkZWxldGUgcHJvcHMub25FbnRlcktleTtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiaW5wdXQtZmllbGRcIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHsgcmVmOiBmdW5jdGlvbiAocmVmKSB7IHJldHVybiAoX3RoaXMubGFiZWwgPSByZWYpOyB9LCBodG1sRm9yOiB0aGlzLmlkLCBjbGFzc05hbWU6IHRoaXMuc3RhdGUubGFiZWxDbGFzc05hbWUgfSwgdGhpcy5wcm9wcy5sYWJlbCArICh0aGlzLnByb3BzLnJlcXVpcmVkID09PSB0cnVlID8gJyAqJyA6ICcnKSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgX19hc3NpZ24oe30sIHByb3BzLCB7IHJlZjogZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5lbCA9IHJlZjtcbiAgICAgICAgICAgICAgICB9LCB2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZSB8fCAnJywgb25DaGFuZ2U6IHRoaXMucHJvcHMub25DaGFuZ2UgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB9KSwgb25Gb2N1czogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIF90aGlzLm9uRm9jdXMuYmluZChfdGhpcykoZSk7IH0sIHR5cGU6IHRoaXMucHJvcHMudHlwZSB8fCBcInRleHRcIiwgb25CbHVyOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gX3RoaXMub25CbHVyLmJpbmQoX3RoaXMpKGUpOyB9LCBvbktleVVwOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gX3RoaXMub25LZXlVcC5iaW5kKF90aGlzKShlKTsgfSwgaWQ6IHRoaXMuaWQsIGNsYXNzTmFtZTogXCJ2YWxpZGF0ZSBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lIH0pKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0RXJyb3JWaWV3KCkpO1xuICAgIH07XG4gICAgcmV0dXJuIEZpZWxkO1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuRmllbGQgPSBGaWVsZDtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRleHRhcmVhQXV0b3NpemUgPSB2b2lkIDA7XG52YXIgUmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgUHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG52YXIgYXV0b3NpemUgPSByZXF1aXJlKFwiYXV0b3NpemVcIik7XG52YXIgbGluZV9oZWlnaHRfMSA9IHJlcXVpcmUoXCIuL2xpbmUtaGVpZ2h0XCIpO1xudmFyIGdldExpbmVIZWlnaHQgPSBsaW5lX2hlaWdodF8xLmRlZmF1bHQ7XG52YXIgUkVTSVpFRCA9IFwiYXV0b3NpemU6cmVzaXplZFwiO1xuLyoqXG4gKiBBIGxpZ2h0IHJlcGxhY2VtZW50IGZvciBidWlsdC1pbiB0ZXh0YXJlYSBjb21wb25lbnRcbiAqIHdoaWNoIGF1dG9tYXRpY2FseSBhZGp1c3RzIGl0cyBoZWlnaHQgdG8gbWF0Y2ggdGhlIGNvbnRlbnRcbiAqL1xudmFyIFRleHRhcmVhQXV0b3NpemVDbGFzcyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVGV4dGFyZWFBdXRvc2l6ZUNsYXNzLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRleHRhcmVhQXV0b3NpemVDbGFzcygpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgbGluZUhlaWdodDogbnVsbFxuICAgICAgICB9O1xuICAgICAgICBfdGhpcy50ZXh0YXJlYSA9IG51bGw7XG4gICAgICAgIF90aGlzLm9uUmVzaXplID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5vblJlc2l6ZSkge1xuICAgICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uUmVzaXplKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBfdGhpcy51cGRhdGVMaW5lSGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKF90aGlzLnRleHRhcmVhKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBnZXRMaW5lSGVpZ2h0KF90aGlzLnRleHRhcmVhKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICB2YXIgb25DaGFuZ2UgPSBfdGhpcy5wcm9wcy5vbkNoYW5nZTtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRWYWx1ZSA9IGUuY3VycmVudFRhcmdldC52YWx1ZTtcbiAgICAgICAgICAgIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKGUpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRleHRhcmVhQXV0b3NpemVDbGFzcy5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHRoaXMucHJvcHMsIG1heFJvd3MgPSBfYS5tYXhSb3dzLCBhc3luYyA9IF9hLmFzeW5jO1xuICAgICAgICBpZiAodHlwZW9mIG1heFJvd3MgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGluZUhlaWdodCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbWF4Um93cyA9PT0gXCJudW1iZXJcIiB8fCBhc3luYykge1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgdGhlIGRlZmVyIGlzIG5lZWRlZCB0bzpcbiAgICAgICAgICAgICAgICAtIGZvcmNlIFwiYXV0b3NpemVcIiB0byBhY3RpdmF0ZSB0aGUgc2Nyb2xsYmFyIHdoZW4gdGhpcy5wcm9wcy5tYXhSb3dzIGlzIHBhc3NlZFxuICAgICAgICAgICAgICAgIC0gc3VwcG9ydCBTdHlsZWRDb21wb25lbnRzIChzZWUgIzcxKVxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy50ZXh0YXJlYSAmJiBhdXRvc2l6ZShfdGhpcy50ZXh0YXJlYSk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgdGhpcy50ZXh0YXJlYSAmJiBhdXRvc2l6ZSh0aGlzLnRleHRhcmVhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50ZXh0YXJlYSkge1xuICAgICAgICAgICAgdGhpcy50ZXh0YXJlYS5hZGRFdmVudExpc3RlbmVyKFJFU0laRUQsIHRoaXMub25SZXNpemUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBUZXh0YXJlYUF1dG9zaXplQ2xhc3MucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy50ZXh0YXJlYSkge1xuICAgICAgICAgICAgdGhpcy50ZXh0YXJlYS5yZW1vdmVFdmVudExpc3RlbmVyKFJFU0laRUQsIHRoaXMub25SZXNpemUpO1xuICAgICAgICAgICAgYXV0b3NpemUuZGVzdHJveSh0aGlzLnRleHRhcmVhKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVGV4dGFyZWFBdXRvc2l6ZUNsYXNzLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIF9iID0gX2EucHJvcHMsIG9uUmVzaXplID0gX2Iub25SZXNpemUsIG1heFJvd3MgPSBfYi5tYXhSb3dzLCBvbkNoYW5nZSA9IF9iLm9uQ2hhbmdlLCBzdHlsZSA9IF9iLnN0eWxlLCBpbm5lclJlZiA9IF9iLmlubmVyUmVmLCBjaGlsZHJlbiA9IF9iLmNoaWxkcmVuLCBwcm9wcyA9IF9fcmVzdChfYiwgW1wib25SZXNpemVcIiwgXCJtYXhSb3dzXCIsIFwib25DaGFuZ2VcIiwgXCJzdHlsZVwiLCBcImlubmVyUmVmXCIsIFwiY2hpbGRyZW5cIl0pLCBsaW5lSGVpZ2h0ID0gX2Euc3RhdGUubGluZUhlaWdodDtcbiAgICAgICAgdmFyIG1heEhlaWdodCA9IG1heFJvd3MgJiYgbGluZUhlaWdodCA/IGxpbmVIZWlnaHQgKiBtYXhSb3dzIDogbnVsbDtcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIiwgX19hc3NpZ24oe30sIHByb3BzLCB7IG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBjbGFzc05hbWU6IFwidGV4dGFyZWEgXCIgKyAodGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIiksIHN0eWxlOiBtYXhIZWlnaHQgPyBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgc3R5bGUpLCB7IG1heEhlaWdodDogbWF4SGVpZ2h0IH0pIDogc3R5bGUsIHJlZjogZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy50ZXh0YXJlYSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBfdGhpcy5wcm9wcy5pbm5lclJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5pbm5lclJlZihlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoX3RoaXMucHJvcHMuaW5uZXJSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMucHJvcHMuaW5uZXJSZWYuY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB9KSwgY2hpbGRyZW4pKTtcbiAgICB9O1xuICAgIFRleHRhcmVhQXV0b3NpemVDbGFzcy5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnRleHRhcmVhICYmIGF1dG9zaXplLnVwZGF0ZSh0aGlzLnRleHRhcmVhKTtcbiAgICB9O1xuICAgIFRleHRhcmVhQXV0b3NpemVDbGFzcy5kZWZhdWx0UHJvcHMgPSB7XG4gICAgICAgIHJvd3M6IDEsXG4gICAgICAgIGFzeW5jOiBmYWxzZVxuICAgIH07XG4gICAgVGV4dGFyZWFBdXRvc2l6ZUNsYXNzLnByb3BUeXBlcyA9IHtcbiAgICAgICAgcm93czogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgbWF4Um93czogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgb25SZXNpemU6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBpbm5lclJlZjogUHJvcFR5cGVzLmFueSxcbiAgICAgICAgYXN5bmM6IFByb3BUeXBlcy5ib29sXG4gICAgfTtcbiAgICByZXR1cm4gVGV4dGFyZWFBdXRvc2l6ZUNsYXNzO1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuVGV4dGFyZWFBdXRvc2l6ZSA9IFJlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0YXJlYUF1dG9zaXplQ2xhc3MsIF9fYXNzaWduKHt9LCBwcm9wcywgeyBpbm5lclJlZjogcmVmIH0pKTtcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyBMb2FkIGluIGRlcGVuZGVuY2llc1xudmFyIGNvbXB1dGVkU3R5bGUgPSByZXF1aXJlKCdjb21wdXRlZC1zdHlsZScpO1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIGBsaW5lLWhlaWdodGAgb2YgYSBnaXZlbiBub2RlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIEVsZW1lbnQgdG8gY2FsY3VsYXRlIGxpbmUgaGVpZ2h0IG9mLiBNdXN0IGJlIGluIHRoZSBET00uXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBgbGluZS1oZWlnaHRgIG9mIHRoZSBlbGVtZW50IGluIHBpeGVsc1xuICovXG5mdW5jdGlvbiBsaW5lSGVpZ2h0KG5vZGUpIHtcbiAgICAvLyBHcmFiIHRoZSBsaW5lLWhlaWdodCB2aWEgc3R5bGVcbiAgICB2YXIgbG5IZWlnaHRTdHIgPSBjb21wdXRlZFN0eWxlKG5vZGUsICdsaW5lLWhlaWdodCcpO1xuICAgIHZhciBsbkhlaWdodCA9IHBhcnNlRmxvYXQobG5IZWlnaHRTdHIpO1xuICAgIC8vIElmIHRoZSBsaW5lSGVpZ2h0IGRpZCBub3QgY29udGFpbiBhIHVuaXQgKGkuZS4gaXQgd2FzIG51bWVyaWMpLCBjb252ZXJ0IGl0IHRvIGVtcyAoZS5nLiAnMi4zJyA9PT0gJzIuM2VtJylcbiAgICBpZiAobG5IZWlnaHRTdHIgPT09IGxuSGVpZ2h0ICsgJycpIHtcbiAgICAgICAgLy8gU2F2ZSB0aGUgb2xkIGxpbmVIZWlnaHQgc3R5bGUgYW5kIHVwZGF0ZSB0aGUgZW0gdW5pdCB0byB0aGUgZWxlbWVudFxuICAgICAgICB2YXIgX2xuSGVpZ2h0U3R5bGUgPSBub2RlLnN0eWxlLmxpbmVIZWlnaHQ7XG4gICAgICAgIG5vZGUuc3R5bGUubGluZUhlaWdodCA9IGxuSGVpZ2h0U3RyICsgJ2VtJztcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBlbSBiYXNlZCBoZWlnaHRcbiAgICAgICAgbG5IZWlnaHRTdHIgPSBjb21wdXRlZFN0eWxlKG5vZGUsICdsaW5lLWhlaWdodCcpO1xuICAgICAgICBsbkhlaWdodCA9IHBhcnNlRmxvYXQobG5IZWlnaHRTdHIpO1xuICAgICAgICAvLyBSZXZlcnQgdGhlIGxpbmVIZWlnaHQgc3R5bGVcbiAgICAgICAgaWYgKF9sbkhlaWdodFN0eWxlKSB7XG4gICAgICAgICAgICBub2RlLnN0eWxlLmxpbmVIZWlnaHQgPSBfbG5IZWlnaHRTdHlsZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vZGVsZXRlIG5vZGUuc3R5bGUubGluZUhlaWdodDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB0aGUgbGluZUhlaWdodCBpcyBpbiBgcHRgLCBjb252ZXJ0IGl0IHRvIHBpeGVscyAoNHB4IGZvciAzcHQpXG4gICAgLy8gREVWOiBgZW1gIHVuaXRzIGFyZSBjb252ZXJ0ZWQgdG8gYHB0YCBpbiBJRTZcbiAgICAvLyBDb252ZXJzaW9uIHJhdGlvIGZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2xlbmd0aFxuICAgIGlmIChsbkhlaWdodFN0ci5pbmRleE9mKCdwdCcpICE9PSAtMSkge1xuICAgICAgICBsbkhlaWdodCAqPSA0O1xuICAgICAgICBsbkhlaWdodCAvPSAzO1xuICAgICAgICAvLyBPdGhlcndpc2UsIGlmIHRoZSBsaW5lSGVpZ2h0IGlzIGluIGBtbWAsIGNvbnZlcnQgaXQgdG8gcGl4ZWxzICg5NnB4IGZvciAyNS40bW0pXG4gICAgfVxuICAgIGVsc2UgaWYgKGxuSGVpZ2h0U3RyLmluZGV4T2YoJ21tJykgIT09IC0xKSB7XG4gICAgICAgIGxuSGVpZ2h0ICo9IDk2O1xuICAgICAgICBsbkhlaWdodCAvPSAyNS40O1xuICAgICAgICAvLyBPdGhlcndpc2UsIGlmIHRoZSBsaW5lSGVpZ2h0IGlzIGluIGBjbWAsIGNvbnZlcnQgaXQgdG8gcGl4ZWxzICg5NnB4IGZvciAyLjU0Y20pXG4gICAgfVxuICAgIGVsc2UgaWYgKGxuSGVpZ2h0U3RyLmluZGV4T2YoJ2NtJykgIT09IC0xKSB7XG4gICAgICAgIGxuSGVpZ2h0ICo9IDk2O1xuICAgICAgICBsbkhlaWdodCAvPSAyLjU0O1xuICAgICAgICAvLyBPdGhlcndpc2UsIGlmIHRoZSBsaW5lSGVpZ2h0IGlzIGluIGBpbmAsIGNvbnZlcnQgaXQgdG8gcGl4ZWxzICg5NnB4IGZvciAxaW4pXG4gICAgfVxuICAgIGVsc2UgaWYgKGxuSGVpZ2h0U3RyLmluZGV4T2YoJ2luJykgIT09IC0xKSB7XG4gICAgICAgIGxuSGVpZ2h0ICo9IDk2O1xuICAgICAgICAvLyBPdGhlcndpc2UsIGlmIHRoZSBsaW5lSGVpZ2h0IGlzIGluIGBwY2AsIGNvbnZlcnQgaXQgdG8gcGl4ZWxzICgxMnB0IGZvciAxcGMpXG4gICAgfVxuICAgIGVsc2UgaWYgKGxuSGVpZ2h0U3RyLmluZGV4T2YoJ3BjJykgIT09IC0xKSB7XG4gICAgICAgIGxuSGVpZ2h0ICo9IDE2O1xuICAgIH1cbiAgICAvLyBDb250aW51ZSBvdXIgY29tcHV0YXRpb25cbiAgICBsbkhlaWdodCA9IE1hdGgucm91bmQobG5IZWlnaHQpO1xuICAgIC8vIElmIHRoZSBsaW5lLWhlaWdodCBpcyBcIm5vcm1hbFwiLCBjYWxjdWxhdGUgYnkgZm9udC1zaXplXG4gICAgaWYgKGxuSGVpZ2h0U3RyID09PSAnbm9ybWFsJykge1xuICAgICAgICAvLyBDcmVhdGUgYSB0ZW1wb3Jhcnkgbm9kZVxuICAgICAgICB2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuICAgICAgICB2YXIgX25vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5vZGVOYW1lKTtcbiAgICAgICAgX25vZGUuaW5uZXJIVE1MID0gJyZuYnNwOyc7XG4gICAgICAgIC8vIElmIHdlIGhhdmUgYSB0ZXh0IGFyZWEsIHJlc2V0IGl0IHRvIG9ubHkgMSByb3dcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3R3b2xmc29uL2xpbmUtaGVpZ2h0L2lzc3Vlcy80XG4gICAgICAgIGlmIChub2RlTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnVEVYVEFSRUEnKSB7XG4gICAgICAgICAgICBfbm9kZS5zZXRBdHRyaWJ1dGUoJ3Jvd3MnLCAnMScpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNldCB0aGUgZm9udC1zaXplIG9mIHRoZSBlbGVtZW50XG4gICAgICAgIHZhciBmb250U2l6ZVN0ciA9IGNvbXB1dGVkU3R5bGUobm9kZSwgJ2ZvbnQtc2l6ZScpO1xuICAgICAgICBfbm9kZS5zdHlsZS5mb250U2l6ZSA9IGZvbnRTaXplU3RyO1xuICAgICAgICAvLyBSZW1vdmUgZGVmYXVsdCBwYWRkaW5nL2JvcmRlciB3aGljaCBjYW4gYWZmZWN0IG9mZnNldCBoZWlnaHRcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3R3b2xmc29uL2xpbmUtaGVpZ2h0L2lzc3Vlcy80XG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9vZmZzZXRIZWlnaHRcbiAgICAgICAgX25vZGUuc3R5bGUucGFkZGluZyA9ICcwcHgnO1xuICAgICAgICBfbm9kZS5zdHlsZS5ib3JkZXIgPSAnMHB4JztcbiAgICAgICAgLy8gQXBwZW5kIGl0IHRvIHRoZSBib2R5XG4gICAgICAgIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgICAgICAgYm9keS5hcHBlbmRDaGlsZChfbm9kZSk7XG4gICAgICAgIC8vIEFzc3VtZSB0aGUgbGluZSBoZWlnaHQgb2YgdGhlIGVsZW1lbnQgaXMgdGhlIGhlaWdodFxuICAgICAgICB2YXIgaGVpZ2h0ID0gX25vZGUub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBsbkhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgLy8gUmVtb3ZlIG91ciBjaGlsZCBmcm9tIHRoZSBET01cbiAgICAgICAgYm9keS5yZW1vdmVDaGlsZChfbm9kZSk7XG4gICAgfVxuICAgIC8vIFJldHVybiB0aGUgY2FsY3VsYXRlZCBoZWlnaHRcbiAgICByZXR1cm4gbG5IZWlnaHQ7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBsaW5lSGVpZ2h0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBcIm51bVwiOiAvXlswLTldKyQvLFxuICAgIFwibnVtZXJpY1wiOiAvXlswLTldKyQvLFxuICAgIFwiYWxwaGFcIjogL15bYS16QS1aX10rJC8sXG4gICAgXCJhbHBoYWJldGljXCI6IC9eW2EtekEtWl9dKyQvLFxuICAgIFwiYWxwaGFudW1cIjogL15bYS16QS1aMC05X10rJC8sXG4gICAgXCJhbHBoYW51bWVyaWNcIjogL15bYS16QS1aMC05X10rJC8sXG4gICAgXCJlbWFpbFwiOiAvXihcIik/KD86W15cXC5cIlxcc10pKD86KD86W1xcLl0pPyg/OltcXHdcXC0hIyQlJicqKy89P15fYHt8fX5dKSkqXFwxQChcXHdbXFwtXFx3XSpcXC4pezEsNX0oW0EtWmEtel0pezIsNn0kLyxcbiAgICBcInVybFwiOiAvKCgoXmh0dHBzPyl8KF5mdHApKTpcXC9cXC8oKChbXFwtXFx3XStcXC4pK1xcd3syLDN9KFxcL1slXFwtXFx3XSsoXFwuXFx3ezIsfSk/KSooKFtcXHdcXC1cXC5cXD9cXFxcXFwvK0AmIztgfj0lIV0qKShcXC5cXHd7Mix9KT8pKil8KGxvY2FsaG9zdHxMT0NBTEhPU1QpKVxcLz8pL2ksXG4gICAgXCJpcEFkZHJlc3NcIjogL15cXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfSQvLFxuICAgIFwicGhvbmVcIjogL14oPzooPzpcXCt8MDApMzN8MClcXHMqWzEtOV0oPzpcXGR7Mn0pezR9JC8sXG4gICAgXCJjb2RlUG9zdFwiOiAvXigoKD8hKDk2fDk3fDk4fDk5fDAwKSkpWzAtOV17NX0pJHwoMkF8MkJ8MmF8MmIpWzAtOV17M30kfCg5NzF8OTcyfDk3M3w5NzR8OTc1fDk3NilbMC05XXsyfSQvLFxuICAgIFwiY29kZVBvc3RhbFwiOiAvXigoKD8hKDk2fDk3fDk4fDk5fDAwKSkpWzAtOV17NX0pJHwoMkF8MkJ8MmF8MmIpWzAtOV17M30kfCg5NzF8OTcyfDk3M3w5NzR8OTc1fDk3NilbMC05XXsyfSQvLFxuICAgIFwidGltZVwiOiAvXihbMS05XXwxWzAtOV0pOihbMC01XVswLTldKShcXHNbYXxwXW0pJC8sXG4gICAgXCJwcmljZVwiOiAvXlxcZCsoXFwuXFxkezJ9KT8kLyxcbiAgICBcInByaXhcIjogL15cXGQrKFxcLlxcZHsyfSk/JC8sXG4gICAgXCJkYXRlXCI6IC9eKDA/WzEtOV18WzEyXVswLTldfDNbMDFdKVtcXC9cXC1dKDA/WzEtOV18MVswMTJdKVtcXC9cXC1dXFxkezR9JC8sXG4gICAgXCJ0dmFcIjogL14oNVxcLjV8MTB8MjApJC8sXG4gICAgXCJwYXNzd29yZFwiOiAvKD89Xi57OCx9JCkoPz0uKlxcZCkoPz0uKlshQCMkJV4mKl0rKSg/IVsuXFxuXSkoPz0uKltBLVpdKSg/PS4qW2Etel0pLiokLyxcbiAgICBcIm1vdERlUGFzc2VcIjogLyg/PV4uezgsfSQpKD89LipcXGQpKD89LipbIUAjJCVeJipdKykoPyFbLlxcbl0pKD89LipbQS1aXSkoPz0uKlthLXpdKS4qJC8sXG4gICAgXCJtYXRyaWN1bGVcIjogLyheXFxkezEsNH1bQS1aYS16XXsxLDR9XFxkezEsMn0kKXwoXltBLVphLXpdezEsMn1cXHMqXFxkezEsM31cXHMqW0EtWmEtel17MSwyfSkkLyxcbiAgICBcInR2YUludGVyY29tXCI6IC9eKEZSKShbMC05XXsxMX0kKS8sXG4gICAgXCJpYmFuXCI6IC9eRlJcXGR7MTJ9W0EtWjAtOV17MTF9XFxkezJ9JC8sXG4gICAgXCJ0aW1lTWFza1wiOiAvW1xcZFxcczphbXBdL2ksXG4gICAgJ251bU1hc2snOiAvWzAtOV0vaSxcbiAgICAnYWxwaGFNYXNrJzogL1thLXpfXS9pLFxuICAgICdhbHBoYW51bU1hc2snOiAvW2EtejAtOV9dL2ksXG4gICAgJ2VtYWlsTWFzayc6IC9bXFx3LlxcLUAnXCIhIyQlJicqKy89P15fYHt8fX5dL2ksXG4gICAgJ3VybE1hc2snOiAvW2EtejAtOV9dL2ksXG4gICAgJ2lwQWRkcmVzc01hc2snOiAvW1xcZFxcLl0vaSxcbiAgICBcInBob25lTWFza1wiOiAvWzAtOVxcK10vaSxcbiAgICBcImNvZGVQb3N0TWFza1wiOiAvWzAtOUFCYWJdL2ksXG4gICAgJ3Bhc3N3b3JkTWFzayc6IC9bXFx3LlxcLUAnXCIhIyQlJicqKy89P15fYHt8fX5dL2ksXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSWNvbiA9IHZvaWQgMDtcbnZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbnZhciBJY29uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhJY29uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEljb24oKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgSWNvbi5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMsIHsgY2xhc3NOYW1lOiBcInMtaWNvbiBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lIH0pKTtcbiAgICB9O1xuICAgIHJldHVybiBJY29uO1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuSWNvbiA9IEljb247XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PdmVybGF5ID0gZXhwb3J0cy5EaXZpZGVyID0gZXhwb3J0cy5QYXJhbGxheCA9IGV4cG9ydHMuUm93ID0gZXhwb3J0cy5Db2wgPSB2b2lkIDA7XG52YXIgUmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgQ29sID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDb2wsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ29sKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZWwgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIENvbC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMsIHsgcmVmOiBmdW5jdGlvbiAocmVmKSB7IHJldHVybiBfdGhpcy5lbCA9IHJlZjsgfSwgY2xhc3NOYW1lOiBcImNvbCBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lIH0pKSk7XG4gICAgfTtcbiAgICByZXR1cm4gQ29sO1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuQ29sID0gQ29sO1xudmFyIFJvdyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUm93LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFJvdygpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmVsID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBSb3cucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9fYXNzaWduKHt9LCB0aGlzLnByb3BzLCB7IHJlZjogZnVuY3Rpb24gKHJlZikgeyByZXR1cm4gX3RoaXMuZWwgPSByZWY7IH0sIGNsYXNzTmFtZTogXCJyb3cgXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSB9KSkpO1xuICAgIH07XG4gICAgcmV0dXJuIFJvdztcbn0oUmVhY3QuQ29tcG9uZW50KSk7XG5leHBvcnRzLlJvdyA9IFJvdztcbnZhciBQYXJhbGxheCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUGFyYWxsYXgsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUGFyYWxsYXgoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgUGFyYWxsYXgucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHN0ID0gX19hc3NpZ24oe30sIHRoaXMucHJvcHMuc3R5bGUpO1xuICAgICAgICBzdC5iYWNrZ3JvdW5kSW1hZ2UgPSBcInVybChcIiArIHRoaXMucHJvcHMuc3JjICsgXCIpXCI7XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInBhcmFsbGF4XCIsIHN0eWxlOiBzdCB9LCB0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgICB9O1xuICAgIHJldHVybiBQYXJhbGxheDtcbn0oUmVhY3QuQ29tcG9uZW50KSk7XG5leHBvcnRzLlBhcmFsbGF4ID0gUGFyYWxsYXg7XG52YXIgRGl2aWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRGl2aWRlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBEaXZpZGVyKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIERpdmlkZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImRpdmlkZXJcIiB9KSk7XG4gICAgfTtcbiAgICByZXR1cm4gRGl2aWRlcjtcbn0oUmVhY3QuQ29tcG9uZW50KSk7XG5leHBvcnRzLkRpdmlkZXIgPSBEaXZpZGVyO1xudmFyIE92ZXJsYXkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE92ZXJsYXksIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gT3ZlcmxheSgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmlzaWJsZTogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMuZWwgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE92ZXJsYXkucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE92ZXJsYXkucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3coKTtcbiAgICB9O1xuICAgIE92ZXJsYXkucHJvdG90eXBlLmlzVmlzaWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUudmlzaWJsZTtcbiAgICB9O1xuICAgIE92ZXJsYXkucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdmlzaWJsZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPdmVybGF5LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGlkZSgpO1xuICAgIH07XG4gICAgT3ZlcmxheS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS52aXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX19hc3NpZ24oeyByZWY6IGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZWwgPSByZWY7XG4gICAgICAgICAgICAgICAgfSB9LCB0aGlzLnByb3BzLCB7IGNsYXNzTmFtZTogXCJtb2RhbC1vdmVybGF5IFwiICsgdGhpcy5wcm9wcy5jbGFzc05hbWUgfSkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiBPdmVybGF5O1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuT3ZlcmxheSA9IE92ZXJsYXk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Nb2RhbEhlYWRlciA9IGV4cG9ydHMuTW9kYWxGb290ZXIgPSBleHBvcnRzLk1vZGFsQ29udGVudCA9IGV4cG9ydHMuTW9kYWwgPSB2b2lkIDA7XG52YXIgUmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgTW9kYWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE1vZGFsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE1vZGFsKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBpc09wZW46IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgTW9kYWwucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaXNPcGVuOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgTW9kYWwucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGlzT3BlbjogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBNb2RhbC5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbigpO1xuICAgIH07XG4gICAgTW9kYWwucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsb3NlKCk7XG4gICAgfTtcbiAgICBNb2RhbC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5pc09wZW4pIHtcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJtb2RhbC1vdmVybGF5XCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9fYXNzaWduKHt9LCB0aGlzLnByb3BzLCB7IGNsYXNzTmFtZTogXCJtb2RhbCBcIiArICh0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwiKSB9KSkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiBNb2RhbDtcbn0oUmVhY3QuQ29tcG9uZW50KSk7XG5leHBvcnRzLk1vZGFsID0gTW9kYWw7XG52YXIgTW9kYWxDb250ZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhNb2RhbENvbnRlbnQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTW9kYWxDb250ZW50KCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIE1vZGFsQ29udGVudC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMsIHsgY2xhc3NOYW1lOiBcIm1vZGFsLWNvbnRlbnQgXCIgKyAodGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIikgfSkpKTtcbiAgICB9O1xuICAgIHJldHVybiBNb2RhbENvbnRlbnQ7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5Nb2RhbENvbnRlbnQgPSBNb2RhbENvbnRlbnQ7XG52YXIgTW9kYWxGb290ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE1vZGFsRm9vdGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE1vZGFsRm9vdGVyKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIE1vZGFsRm9vdGVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfX2Fzc2lnbih7fSwgdGhpcy5wcm9wcywgeyBjbGFzc05hbWU6IFwibW9kYWwtZm9vdGVyIFwiICsgKHRoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCIpIH0pKSk7XG4gICAgfTtcbiAgICByZXR1cm4gTW9kYWxGb290ZXI7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5Nb2RhbEZvb3RlciA9IE1vZGFsRm9vdGVyO1xudmFyIE1vZGFsSGVhZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhNb2RhbEhlYWRlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBNb2RhbEhlYWRlcigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBNb2RhbEhlYWRlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMsIHsgY2xhc3NOYW1lOiBcIm1vZGFsLWhlYWRlciBcIiArICh0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwiKSB9KSkpO1xuICAgIH07XG4gICAgcmV0dXJuIE1vZGFsSGVhZGVyO1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuTW9kYWxIZWFkZXIgPSBNb2RhbEhlYWRlcjtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk5hdkJhckJyYW5kID0gZXhwb3J0cy5OYXZCYXJJdGVtID0gZXhwb3J0cy5OYXZCYXJHcm91cCA9IGV4cG9ydHMuTmF2QmFyID0gdm9pZCAwO1xudmFyIFJlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xudmFyIE5hdkJhciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoTmF2QmFyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE5hdkJhcigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBOYXZCYXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJuYXZcIiwgbnVsbCxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMsIHsgY2xhc3NOYW1lOiBcIm5hdi13cmFwcGVyXCIgfSkpKTtcbiAgICB9O1xuICAgIHJldHVybiBOYXZCYXI7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5OYXZCYXIgPSBOYXZCYXI7XG52YXIgTmF2QmFyR3JvdXAgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE5hdkJhckdyb3VwLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE5hdkJhckdyb3VwKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIE5hdkJhckdyb3VwLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMsIHsgY2xhc3NOYW1lOiBcInJpZ2h0IGhpZGUtb24tbWVkLWFuZC1kb3duIMK3XCIgKyAodGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIikgfSkpO1xuICAgIH07XG4gICAgcmV0dXJuIE5hdkJhckdyb3VwO1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuTmF2QmFyR3JvdXAgPSBOYXZCYXJHcm91cDtcbnZhciBOYXZCYXJJdGVtID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhOYXZCYXJJdGVtLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE5hdkJhckl0ZW0oKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgTmF2QmFySXRlbS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIF9fYXNzaWduKHt9LCB0aGlzLnByb3BzKSk7XG4gICAgfTtcbiAgICByZXR1cm4gTmF2QmFySXRlbTtcbn0oUmVhY3QuQ29tcG9uZW50KSk7XG5leHBvcnRzLk5hdkJhckl0ZW0gPSBOYXZCYXJJdGVtO1xudmFyIE5hdkJhckJyYW5kID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhOYXZCYXJCcmFuZCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBOYXZCYXJCcmFuZCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBOYXZCYXJCcmFuZC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMsIHsgY2xhc3NOYW1lOiBcImJyYW5kLWxvZ29cIiB9KSk7XG4gICAgfTtcbiAgICByZXR1cm4gTmF2QmFyQnJhbmQ7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5OYXZCYXJCcmFuZCA9IE5hdkJhckJyYW5kO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5OYXZpZ2F0aW9uID0gdm9pZCAwO1xudmFyIFJlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xudmFyIE5hdkJhcl8xID0gcmVxdWlyZShcIi4vTmF2QmFyXCIpO1xudmFyIFNpZGVOYXZfMSA9IHJlcXVpcmUoXCIuL1NpZGVOYXZcIik7XG52YXIgTmF2aWdhdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoTmF2aWdhdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBOYXZpZ2F0aW9uKHByb3BzKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcbiAgICB9XG4gICAgTmF2aWdhdGlvbi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMubmF2YmFyKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5zaWRlbmF2KTtcbiAgICB9O1xuICAgIE5hdmlnYXRpb24ucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KE5hdkJhcl8xLk5hdkJhciwgeyByZWY6IGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMubmF2YmFyID0gcmVmO1xuICAgICAgICAgICAgICAgIH0gfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCB7IGNsYXNzTmFtZTogXCJzaWRlbmF2LXRyaWdnZXJcIiwgb25DbGljazogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5zaWRlbmF2ICYmIF90aGlzLnNpZGVuYXYudG9nZ2xlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gfSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7IHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHN0eWxlOiB7IHdpZHRoOiBcIjIwcHhcIiB9LCBmaWxsOiBcIndoaXRlXCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIHN0cm9rZTogXCJjdXJyZW50Q29sb3JcIiwgc3Ryb2tlV2lkdGg6IFwiMlwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7IHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIiwgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIiwgZDogXCJNNCA2aDE2TTQgMTJoMTZNNCAxOGgxNlwiIH0pKSksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChOYXZCYXJfMS5OYXZCYXJCcmFuZCwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7IHNyYzogdGhpcy5wcm9wcy5sb2dvIHx8IFwiaHR0cHM6Ly9zdGF0aWNzLmQzdjRwcC5mci9sb2dvLnBuZ1wiLCBjbGFzc05hbWU6IFwiY2lyY2xlXCIsIGFsdDogXCJCcmFuZFwiIH0pKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KE5hdkJhcl8xLk5hdkJhckdyb3VwLCBudWxsLCB0aGlzLnByb3BzLnJvdXRlcyAmJiB0aGlzLnByb3BzLnJvdXRlcy5tYXAoZnVuY3Rpb24gKHJvdXRlLCBpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KE5hdkJhcl8xLk5hdkJhckl0ZW0sIHsga2V5OiBpIH0sIHJvdXRlLmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH0pKSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFNpZGVOYXZfMS5TaWRlTmF2LCB7IHJlZjogZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5zaWRlbmF2ID0gcmVmO1xuICAgICAgICAgICAgICAgIH0gfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFNpZGVOYXZfMS5TaWRlTmF2VXNlciwgeyB1c2VybmFtZTogJ2F5b3ViIGhhc3NhbmknLCBlbWFpbDogJ2F5b3ViQGQzdjRwcC5mcicsIHNyYzogXCJodHRwczovL3N0YXRpY3MuZDN2NHBwLmZyL2xvZ28ucG5nXCIsIGJnX3NyYzogXCJodHRwczovL2ltZ3Muc2VhcmNoLmJyYXZlLmNvbS95WDB2Z2Ftc1lFYnNPVTlYbHlQR1VNOERkbXF4WHBBS3l6Qk00czN3b2xBL3JzOmZpdDoxMjAwOjEwMzA6MS9nOmNlL2FIUjBjSE02THk5M2QzY3UvWVhacFlYTnBiUzVqYjIwdi9kM0F0WTI5dWRHVnVkQzkxL2NHeHZZV1J6TDJGMmFXRnovYVcwdGFXMWhaMlV0Ym5WaC9aMlZ6TG1wd1p3XCIgfSksXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5yb3V0ZXMgJiYgdGhpcy5wcm9wcy5yb3V0ZXMubWFwKGZ1bmN0aW9uIChyb3V0ZSwgaSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlTmF2XzEuU2lkZU5hdkVsLCB7IG9uQ2xpY2s6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLnNpZGVuYXYgJiYgX3RoaXMuc2lkZW5hdi5oaWRlKCk7IH0sIGtleTogaSB9LCByb3V0ZS5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9KSkpO1xuICAgIH07XG4gICAgcmV0dXJuIE5hdmlnYXRpb247XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5OYXZpZ2F0aW9uID0gTmF2aWdhdGlvbjtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNpZGVOYXZFbCA9IGV4cG9ydHMuU2lkZU5hdlVzZXIgPSBleHBvcnRzLlNpZGVOYXYgPSB2b2lkIDA7XG52YXIgUmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgU2lkZU5hdiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU2lkZU5hdiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTaWRlTmF2KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTaWRlTmF2LnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgb3BlbjogdHJ1ZSB9KTtcbiAgICB9O1xuICAgIFNpZGVOYXYucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IG9wZW46ICF0aGlzLnN0YXRlLm9wZW4gfSk7XG4gICAgfTtcbiAgICBTaWRlTmF2LnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgb3BlbjogZmFsc2UgfSk7XG4gICAgfTtcbiAgICBTaWRlTmF2LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMsIHsgY2xhc3NOYW1lOiBcInNpZGVuYXYgXCIgKyAodGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIiksIHN0eWxlOiB7IHRyYW5zZm9ybTogdGhpcy5zdGF0ZS5vcGVuID8gXCJ0cmFuc2xhdGVYKDApXCIgOiBcInRyYW5zbGF0ZVgoLTEwNSUpXCIgfSB9KSk7XG4gICAgfTtcbiAgICByZXR1cm4gU2lkZU5hdjtcbn0oUmVhY3QuQ29tcG9uZW50KSk7XG5leHBvcnRzLlNpZGVOYXYgPSBTaWRlTmF2O1xudmFyIFNpZGVOYXZVc2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTaWRlTmF2VXNlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTaWRlTmF2VXNlcigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBTaWRlTmF2VXNlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIF9fYXNzaWduKHt9LCB0aGlzLnByb3BzKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwidXNlci12aWV3XCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImJhY2tncm91bmRcIiB9LFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHsgc3JjOiB0aGlzLnByb3BzLmJnX3NyYyB9KSksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7IGNsYXNzTmFtZTogXCJjaXJjbGVcIiwgc3JjOiB0aGlzLnByb3BzLnNyYyB9KSksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwiYmxhY2stdGV4dCBuYW1lXCIgfSwgdGhpcy5wcm9wcy51c2VybmFtZSkpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcImJsYWNrLXRleHQgZW1haWxcIiB9LCB0aGlzLnByb3BzLmVtYWlsKSkpKTtcbiAgICB9O1xuICAgIHJldHVybiBTaWRlTmF2VXNlcjtcbn0oUmVhY3QuQ29tcG9uZW50KSk7XG5leHBvcnRzLlNpZGVOYXZVc2VyID0gU2lkZU5hdlVzZXI7XG52YXIgU2lkZU5hdkVsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTaWRlTmF2RWwsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2lkZU5hdkVsKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIFNpZGVOYXZFbC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIF9fYXNzaWduKHt9LCB0aGlzLnByb3BzKSk7XG4gICAgfTtcbiAgICByZXR1cm4gU2lkZU5hdkVsO1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuU2lkZU5hdkVsID0gU2lkZU5hdkVsO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUHJlbG9hZGVyID0gZXhwb3J0cy5Qcm9ncmVzcyA9IHZvaWQgMDtcbnZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbnZhciBQcm9ncmVzcyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUHJvZ3Jlc3MsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUHJvZ3Jlc3MoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgUHJvZ3Jlc3MucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX19hc3NpZ24oe30sIHRoaXMucHJvcHMsIHsgY2xhc3NOYW1lOiAodGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIikgKyBcIiBwcm9ncmVzc1wiIH0pLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogdGhpcy5wcm9wcy52YWx1ZSA/IFwiZGV0ZXJtaW5hdGVcIiA6IFwiaW5kZXRlcm1pbmF0ZVwiLCBzdHlsZTogeyB3aWR0aDogdGhpcy5wcm9wcy52YWx1ZSArIFwiJVwiIH0gfSkpO1xuICAgIH07XG4gICAgcmV0dXJuIFByb2dyZXNzO1xufShSZWFjdC5Db21wb25lbnQpKTtcbmV4cG9ydHMuUHJvZ3Jlc3MgPSBQcm9ncmVzcztcbnZhciBQcmVsb2FkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFByZWxvYWRlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBQcmVsb2FkZXIoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgUHJlbG9hZGVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzID0gdGhpcy5wcm9wcy5zaXplID09IFwiYmlnXCIgPyBcImJpZ1wiIDogdGhpcy5wcm9wcy5zaXplID09IFwic21hbGxcIiA/IFwic21hbGxcIiA6IFwiXCI7XG4gICAgICAgIHZhciBjYSA9IHRoaXMucHJvcHMuY29sb3IgPyB0aGlzLnByb3BzLmNvbG9yLnNwbGl0KFwiLFwiKSA6IFsnYmx1ZSddO1xuICAgICAgICBpZiAoY2EubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJwcmVsb2FkZXItd3JhcHBlciBcIiArIHMgKyBcIiBhY3RpdmVcIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwic3Bpbm5lci1sYXllciBzcGlubmVyLVwiICsgY2FbMF0gKyBcIi1vbmx5XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjaXJjbGUtY2xpcHBlciByaWdodFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImNpcmNsZVwiIH0pKSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJnYXAtcGF0Y2hcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjaXJjbGVcIiB9KSksXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiY2lyY2xlLWNsaXBwZXIgbGVmdFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImNpcmNsZVwiIH0pKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicHJlbG9hZGVyLXdyYXBwZXIgXCIgKyBzICsgXCIgYWN0aXZlXCIgfSwgY2EubWFwKGZ1bmN0aW9uIChzY29sb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJzcGlubmVyLWxheWVyIHNwaW5uZXItXCIgKyBzY29sb3IgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjaXJjbGUtY2xpcHBlciBsZWZ0XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiY2lyY2xlXCIgfSkpLFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImdhcC1wYXRjaFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImNpcmNsZVwiIH0pKSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjaXJjbGUtY2xpcHBlciByaWdodFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImNpcmNsZVwiIH0pKSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBQcmVsb2FkZXI7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5QcmVsb2FkZXIgPSBQcmVsb2FkZXI7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxvZ2luID0gdm9pZCAwO1xudmFyIFJlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xudmFyIEZpZWxkXzEgPSByZXF1aXJlKFwiLi4vLi4vY21wcy9mb3Jtcy9GaWVsZFwiKTtcbi8vXG4vLyBleHBvcnQgZnVuY3Rpb24gTG9naW4gKHtvbkxvZ2luLCBvbkxvZ2luRXJyb3IsIGNsYXNzTmFtZSwgY2hlY2tVcmx9OiBMb2dpblByb3BzKSAge1xuLy8gICAgIGxldCBlbWFpbEY6IHsgaXNWYWxpZDogKCkgPT4gYW55OyB9LCBwYXNzRjogeyBpc1ZhbGlkOiAoKSA9PiBhbnk7IH07XG4vLyAgICAgbGV0IFtlbWFpbE9rLCBzZXRFbWFpbE9rXSA9IHVzZVN0YXRlKGZhbHNlKVxuLy8gICAgIGxldCBbdXNlciwgc2V0VXNlcl0gPSB1c2VTdGF0ZSh7XG4vLyAgICAgICAgIHBhc3N3b3JkOiBcIlwiLFxuLy8gICAgICAgICBlbWFpbDogXCJcIlxuLy8gICAgIH0pO1xuLy8gICAgIGxldCBuZXh0ID0gKCkgPT4ge1xuLy8gICAgICAgICBpZiAoZW1haWxGICYmIGVtYWlsRi5pc1ZhbGlkKCkpIHtcbi8vICAgICAgICAgICAgIGlmIChjaGVja1VybCkge1xuLy8gICAgICAgICAgICAgICAgIGZldGNoKGNoZWNrVXJsLCB7XG4vLyAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4vLyAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4vLyAgICAgICAgICAgICAgICAgICAgIH0sXG4vLyAgICAgICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHVzZXIpXG4vLyAgICAgICAgICAgICAgICAgfSkudGhlbihyID0+IHIuanNvbigpKS50aGVuKGpzb24gPT4ge1xuLy8gICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5zdWNjZXNzKSB7XG4vLyAgICAgICAgICAgICAgICAgICAgICAgICBzZXRFbWFpbE9rKHRydWUpO1xuLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgb25Mb2dpbkVycm9yICYmIG9uTG9naW5FcnJvcihqc29uKTtcbi8vICAgICAgICAgICAgICAgICAgICAgfVxuLy8gICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbi8vICAgICAgICAgICAgICAgICAgICAgb25Mb2dpbkVycm9yICYmIG9uTG9naW5FcnJvcihlcnJvcik7XG4vLyAgICAgICAgICAgICAgICAgfSlcbi8vICAgICAgICAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgICAgICAgICAgc2V0RW1haWxPayh0cnVlKTtcbi8vICAgICAgICAgICAgIH1cbi8vICAgICAgICAgfVxuLy8gICAgIH1cbi8vICAgICBsZXQgbG9naW4gPSAoKSA9PiB7XG4vLyAgICAgICAgIGlmIChlbWFpbEYgJiYgZW1haWxGLmlzVmFsaWQoKSAmJiBwYXNzRiAmJiBwYXNzRi5pc1ZhbGlkKCkpIHtcbi8vICAgICAgICAgICAgIG9uTG9naW4gJiYgb25Mb2dpbih1c2VyKVxuLy9cbi8vICAgICAgICAgfVxuLy8gICAgIH1cbi8vICAgICBsZXQgZ2V0UGFzc3dvcmRWaWV3ID0gKCkgPT4ge1xuLy8gICAgICAgICBpZiAoZW1haWxPaykge1xuLy8gICAgICAgICAgICAgcmV0dXJuIDw+PEZpZWxkXG4vLyAgICAgICAgICAgICAgICAgcmVmPXsocjogRmllbGRSZWYgfCBudWxsIHwgYW55KSA9PiB7XG4vLyAgICAgICAgICAgICAgICAgICAgIHBhc3NGID0gcjtcbi8vICAgICAgICAgICAgICAgICB9fVxuLy8gICAgICAgICAgICAgICAgIHZhbHVlPXt1c2VyLnBhc3N3b3JkfVxuLy8gICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xuLy8gICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IHsuLi51c2VyfTtcbi8vICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuLy8gICAgICAgICAgICAgICAgICAgICB1LnBhc3N3b3JkID0gZS50YXJnZXQudmFsdWU7XG4vLyAgICAgICAgICAgICAgICAgICAgIHNldFVzZXIodSk7XG4vLyAgICAgICAgICAgICAgICAgfX1cbi8vICAgICAgICAgICAgICAgICBhdXRvRm9jdXM9e3RydWV9XG4vLyAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9e3RydWV9XG4vLyAgICAgICAgICAgICAgICAgbGFiZWw9e1wiUGFzc3dvcmRcIn1cbi8vICAgICAgICAgICAgICAgICB0eXBlPXtcInBhc3N3b3JkXCJ9XG4vLyAgICAgICAgICAgICAgICAgdnR5cGU9e1wicGFzc3dvcmRcIn1cbi8vICAgICAgICAgICAgICAgICB2dHlwZU1zZz17J05lZWQgdG8gYmUgYSB2YWxpZCBQYXNzd29yZCd9XG4vLyAgICAgICAgICAgICAgICAgb25FbnRlcktleT17bG9naW59Lz5cbi8vICAgICAgICAgICAgIDwvPjtcbi8vICAgICAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgICAgIHJldHVybiBudWxsO1xuLy8gICAgICAgICB9XG4vLyAgICAgfVxuLy9cbi8vICAgICBsZXQgZ2V0TG9naW5WaWV3ID0gKCkgPT4ge1xuLy8gICAgICAgICBpZiAoIWVtYWlsT2spIHtcbi8vICAgICAgICAgICAgIHJldHVybiA8PjxGaWVsZFxuLy8gICAgICAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbi8vICAgICAgICAgICAgICAgICByZXF1aXJlZD17dHJ1ZX1cbi8vICAgICAgICAgICAgICAgICByZWY9eyhyOiBGaWVsZFJlZiB8IG51bGwgfCBhbnkpID0+IHtcbi8vICAgICAgICAgICAgICAgICAgICAgZW1haWxGID0gcjtcbi8vICAgICAgICAgICAgICAgICB9fVxuLy8gICAgICAgICAgICAgICAgIHZhbHVlPXt1c2VyLmVtYWlsfVxuLy8gICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xuLy8gICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IHsuLi51c2VyfTtcbi8vICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuLy8gICAgICAgICAgICAgICAgICAgICB1LmVtYWlsID0gZS50YXJnZXQudmFsdWU7XG4vLyAgICAgICAgICAgICAgICAgICAgIHNldFVzZXIodSk7XG4vLyAgICAgICAgICAgICAgICAgfX1cbi8vICAgICAgICAgICAgICAgICBsYWJlbD17XCJFbWFpbFwifVxuLy8gICAgICAgICAgICAgICAgIHR5cGU9e1wiZW1haWxcIn1cbi8vICAgICAgICAgICAgICAgICB2dHlwZT17XCJlbWFpbFwifVxuLy8gICAgICAgICAgICAgICAgIHZ0eXBlTXNnPXsnTmVlZCB0byBiZSBhIHZhbGlkIGVtYWlsJ31cbi8vICAgICAgICAgICAgICAgICBvbkVudGVyS2V5PXtuZXh0fS8+XG4vLyAgICAgICAgICAgICA8Lz47XG4vLyAgICAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbi8vICAgICAgICAgfVxuLy9cbi8vICAgICB9XG4vLyAgICAgcmV0dXJuIDxkaXZcbi8vICAgICAgICAgcmVmPXtlbCA9PiB7XG4vLyAgICAgICAgICAgICBlbCA9IGVsO1xuLy8gICAgICAgICB9fVxuLy8gICAgICAgICBjbGFzc05hbWU9eyhjbGFzc05hbWUgfHwgXCJcIikgKyBcIiBsb2dpblwifVxuLy8gICAgID5cbi8vICAgICAgICAge2dldExvZ2luVmlldygpfVxuLy8gICAgICAgICB7Z2V0UGFzc3dvcmRWaWV3KCl9XG4vLyAgICAgPC9kaXY+XG4vLyB9XG52YXIgTG9naW4gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKExvZ2luLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIExvZ2luKHByb3BzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGVtYWlsT2s6IGZhbHNlLFxuICAgICAgICAgICAgZW1haWw6IFwiXCIsXG4gICAgICAgICAgICBwYXNzd29yZDogXCJcIixcbiAgICAgICAgICAgIHBhc3NPSzogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBMb2dpbi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHRoaXMuZW1haWxGICYmIHRoaXMuZW1haWxGLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuY2hlY2tVcmwpIHtcbiAgICAgICAgICAgICAgICBmZXRjaCh0aGlzLnByb3BzLmNoZWNrVXJsLCB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZW1haWw6IHRoaXMuc3RhdGUuZW1haWwsIH0pXG4gICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocikgeyByZXR1cm4gci5qc29uKCk7IH0pLnRoZW4oZnVuY3Rpb24gKGpzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuc2V0U3RhdGUoeyBlbWFpbE9rOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25Mb2dpbkVycm9yICYmIF90aGlzLnByb3BzLm9uTG9naW5FcnJvcihqc29uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5vbkxvZ2luRXJyb3IgJiYgX3RoaXMucHJvcHMub25Mb2dpbkVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBlbWFpbE9rOiB0cnVlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBMb2dpbi5wcm90b3R5cGUubG9naW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmVtYWlsT2sgJiYgdGhpcy5wYXNzd29yZEYgJiYgdGhpcy5wYXNzd29yZEYuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uTG9naW4gJiYgdGhpcy5wcm9wcy5vbkxvZ2luKHtcbiAgICAgICAgICAgICAgICBlbWFpbDogdGhpcy5zdGF0ZS5lbWFpbCxcbiAgICAgICAgICAgICAgICBwYXNzd29yZDogdGhpcy5zdGF0ZS5wYXNzd29yZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIExvZ2luLnByb3RvdHlwZS5nZXRMb2dpblZpZXcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5lbWFpbE9rKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEZpZWxkXzEuRmllbGQsIHsgYXV0b0ZvY3VzOiB0cnVlLCByZXF1aXJlZDogdHJ1ZSwgcmVmOiBmdW5jdGlvbiAocikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuZW1haWxGID0gcjtcbiAgICAgICAgICAgICAgICAgICAgfSwgdmFsdWU6IHRoaXMuc3RhdGUuZW1haWwsIG9uQ2hhbmdlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuc2V0U3RhdGUoeyBlbWFpbDogZS50YXJnZXQudmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGxhYmVsOiBcIkVtYWlsXCIsIHR5cGU6IFwiZW1haWxcIiwgdnR5cGU6IFwiZW1haWxcIiwgdnR5cGVNc2c6ICdOZWVkIHRvIGJlIGEgdmFsaWQgZW1haWwnLCBvbkVudGVyS2V5OiB0aGlzLm5leHQuYmluZCh0aGlzKSB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTG9naW4ucHJvdG90eXBlLmdldFBhc3N3b3JkVmlldyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuZW1haWxPaykge1xuICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChGaWVsZF8xLkZpZWxkLCB7IHJlZjogZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnBhc3N3b3JkRiA9IHI7XG4gICAgICAgICAgICAgICAgICAgIH0sIHZhbHVlOiB0aGlzLnN0YXRlLnBhc3N3b3JkLCBvbkNoYW5nZTogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHsgcGFzc3dvcmQ6IGUudGFyZ2V0LnZhbHVlIH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCBhdXRvRm9jdXM6IHRydWUsIHJlcXVpcmVkOiB0cnVlLCBsYWJlbDogXCJQYXNzd29yZFwiLCB0eXBlOiBcInBhc3N3b3JkXCIsIHZ0eXBlOiBcInBhc3N3b3JkXCIsIHZ0eXBlTXNnOiAnTmVlZCB0byBiZSBhIHZhbGlkIFBhc3N3b3JkJywgb25FbnRlcktleTogdGhpcy5sb2dpbi5iaW5kKHRoaXMpIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBMb2dpbi5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyByZWY6IGZ1bmN0aW9uIChlbCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmVsID0gZWw7XG4gICAgICAgICAgICB9LCBjbGFzc05hbWU6ICh0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwiKSArIFwiIGxvZ2luXCIgfSxcbiAgICAgICAgICAgIHRoaXMuZ2V0TG9naW5WaWV3KCksXG4gICAgICAgICAgICB0aGlzLmdldFBhc3N3b3JkVmlldygpKSk7XG4gICAgfTtcbiAgICByZXR1cm4gTG9naW47XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0cy5Mb2dpbiA9IExvZ2luO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxvZ2luID0gdm9pZCAwO1xudmFyIExvZ2luXzEgPSByZXF1aXJlKFwiLi9hdXRoL0xvZ2luXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTG9naW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIExvZ2luXzEuTG9naW47IH0gfSk7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuLy8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbl9fd2VicGFja19yZXF1aXJlX18ubSA9IF9fd2VicGFja19tb2R1bGVzX187XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwidmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mID8gKG9iaikgPT4gKE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopKSA6IChvYmopID0+IChvYmouX19wcm90b19fKTtcbnZhciBsZWFmUHJvdG90eXBlcztcbi8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLy8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLy8gbW9kZSAmIDE2OiByZXR1cm4gdmFsdWUgd2hlbiBpdCdzIFByb21pc2UtbGlrZVxuLy8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuX193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcblx0aWYobW9kZSAmIDEpIHZhbHVlID0gdGhpcyh2YWx1ZSk7XG5cdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG5cdGlmKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUpIHtcblx0XHRpZigobW9kZSAmIDQpICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcblx0XHRpZigobW9kZSAmIDE2KSAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHZhbHVlO1xuXHR9XG5cdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG5cdHZhciBkZWYgPSB7fTtcblx0bGVhZlByb3RvdHlwZXMgPSBsZWFmUHJvdG90eXBlcyB8fCBbbnVsbCwgZ2V0UHJvdG8oe30pLCBnZXRQcm90byhbXSksIGdldFByb3RvKGdldFByb3RvKV07XG5cdGZvcih2YXIgY3VycmVudCA9IG1vZGUgJiAyICYmIHZhbHVlOyB0eXBlb2YgY3VycmVudCA9PSAnb2JqZWN0JyAmJiAhfmxlYWZQcm90b3R5cGVzLmluZGV4T2YoY3VycmVudCk7IGN1cnJlbnQgPSBnZXRQcm90byhjdXJyZW50KSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGN1cnJlbnQpLmZvckVhY2goKGtleSkgPT4gKGRlZltrZXldID0gKCkgPT4gKHZhbHVlW2tleV0pKSk7XG5cdH1cblx0ZGVmWydkZWZhdWx0J10gPSAoKSA9PiAodmFsdWUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGRlZik7XG5cdHJldHVybiBucztcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL1wiOyIsIl9fd2VicGFja19yZXF1aXJlX18uYiA9IGRvY3VtZW50LmJhc2VVUkkgfHwgc2VsZi5sb2NhdGlvbi5ocmVmO1xuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGFuZCBsb2FkaW5nIGNodW5rc1xuLy8gdW5kZWZpbmVkID0gY2h1bmsgbm90IGxvYWRlZCwgbnVsbCA9IGNodW5rIHByZWxvYWRlZC9wcmVmZXRjaGVkXG4vLyBbcmVzb2x2ZSwgcmVqZWN0LCBQcm9taXNlXSA9IGNodW5rIGxvYWRpbmcsIDAgPSBjaHVuayBsb2FkZWRcbnZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG5cdFwibWFpblwiOiAwXG59O1xuXG4vLyBubyBjaHVuayBvbiBkZW1hbmQgbG9hZGluZ1xuXG4vLyBubyBwcmVmZXRjaGluZ1xuXG4vLyBubyBwcmVsb2FkZWRcblxuLy8gbm8gSE1SXG5cbi8vIG5vIEhNUiBtYW5pZmVzdFxuXG4vLyBubyBvbiBjaHVua3MgbG9hZGVkXG5cbi8vIG5vIGpzb25wIGZ1bmN0aW9uIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5uYyA9IHVuZGVmaW5lZDsiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTG9naW4gPSBleHBvcnRzLlJvdXRlciA9IGV4cG9ydHMuTW9kYWxIZWFkZXIgPSBleHBvcnRzLk1vZGFsRm9vdGVyID0gZXhwb3J0cy5Nb2RhbENvbnRlbnQgPSBleHBvcnRzLk1vZGFsID0gZXhwb3J0cy5QcmVsb2FkZXIgPSBleHBvcnRzLlByb2dyZXNzID0gZXhwb3J0cy5TaWRlTmF2VXNlciA9IGV4cG9ydHMuU2lkZU5hdkVsID0gZXhwb3J0cy5TaWRlTmF2ID0gZXhwb3J0cy5OYXZpZ2F0aW9uID0gZXhwb3J0cy5OYXZCYXJCcmFuZCA9IGV4cG9ydHMuTmF2QmFySXRlbSA9IGV4cG9ydHMuTmF2QmFyR3JvdXAgPSBleHBvcnRzLk5hdkJhciA9IGV4cG9ydHMuQ2FyZEFjdGlvbiA9IGV4cG9ydHMuQ2FyZFRpdGxlID0gZXhwb3J0cy5DYXJkQ29udGVudCA9IGV4cG9ydHMuQ2FyZCA9IGV4cG9ydHMuQ29sbGFwc0JvZHkgPSBleHBvcnRzLkNvbGxhcHNpYmxlID0gZXhwb3J0cy5Db2xsYXBzVHJpZ2dlciA9IGV4cG9ydHMuUGFyYWxsYXggPSBleHBvcnRzLkRpdmlkZXIgPSBleHBvcnRzLk92ZXJsYXkgPSBleHBvcnRzLkNvbCA9IGV4cG9ydHMuUm93ID0gZXhwb3J0cy5JY29uID0gZXhwb3J0cy5DaGlwID0gZXhwb3J0cy5CYWRnZSA9IGV4cG9ydHMuQnV0dG9uID0gZXhwb3J0cy5Db2xsZWN0aW9uSXRlbSA9IGV4cG9ydHMuQ29sbGVjdGlvbiA9IGV4cG9ydHMuRmllbGQgPSBleHBvcnRzLlRleHRhcmVhID0gdm9pZCAwO1xucmVxdWlyZShcIi4vc2Fzcy9kM3Y0cHAuc2Nzc1wiKTtcbnZhciBUZXh0YXJlYV8xID0gcmVxdWlyZShcIi4vY21wcy9mb3Jtcy9UZXh0YXJlYVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRleHRhcmVhXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBUZXh0YXJlYV8xLlRleHRhcmVhQXV0b3NpemU7IH0gfSk7XG52YXIgRmllbGRfMSA9IHJlcXVpcmUoXCIuL2NtcHMvZm9ybXMvRmllbGRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGaWVsZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gRmllbGRfMS5GaWVsZDsgfSB9KTtcbnZhciBDb2xsZWN0aW9uXzEgPSByZXF1aXJlKFwiLi9jbXBzL2NvbGxlY3Rpb25zL0NvbGxlY3Rpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb2xsZWN0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBDb2xsZWN0aW9uXzEuQ29sbGVjdGlvbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbGxlY3Rpb25JdGVtXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBDb2xsZWN0aW9uXzEuQ29sbGVjdGlvbkl0ZW07IH0gfSk7XG52YXIgQnV0dG9uXzEgPSByZXF1aXJlKFwiLi9jbXBzL2J1dHRvbi9CdXR0b25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCdXR0b25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJ1dHRvbl8xLkJ1dHRvbjsgfSB9KTtcbnZhciBCYWRnZV8xID0gcmVxdWlyZShcIi4vY21wcy9iYWRnZS9CYWRnZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkJhZGdlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBCYWRnZV8xLkJhZGdlOyB9IH0pO1xudmFyIENoaXBfMSA9IHJlcXVpcmUoXCIuL2NtcHMvY2hpcC9DaGlwXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ2hpcFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQ2hpcF8xLkNoaXA7IH0gfSk7XG52YXIgSWNvbl8xID0gcmVxdWlyZShcIi4vY21wcy9pY29ucy9JY29uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSWNvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gSWNvbl8xLkljb247IH0gfSk7XG52YXIgTGF5b3V0c18xID0gcmVxdWlyZShcIi4vY21wcy9sYXlvdXRzL0xheW91dHNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSb3dcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIExheW91dHNfMS5Sb3c7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb2xcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIExheW91dHNfMS5Db2w7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPdmVybGF5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBMYXlvdXRzXzEuT3ZlcmxheTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkRpdmlkZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIExheW91dHNfMS5EaXZpZGVyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGFyYWxsYXhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIExheW91dHNfMS5QYXJhbGxheDsgfSB9KTtcbnZhciBDb2xsYXBzaWJsZV8xID0gcmVxdWlyZShcIi4vY21wcy9jb2xsYXBzaWJsZS9Db2xsYXBzaWJsZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbGxhcHNUcmlnZ2VyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBDb2xsYXBzaWJsZV8xLkNvbGxhcHNUcmlnZ2VyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29sbGFwc2libGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIENvbGxhcHNpYmxlXzEuQ29sbGFwc2libGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb2xsYXBzQm9keVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQ29sbGFwc2libGVfMS5Db2xsYXBzQm9keTsgfSB9KTtcbnZhciBDYXJkXzEgPSByZXF1aXJlKFwiLi9jbXBzL2NhcmQvQ2FyZFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNhcmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIENhcmRfMS5DYXJkOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ2FyZENvbnRlbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIENhcmRfMS5DYXJkQ29udGVudDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNhcmRUaXRsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQ2FyZF8xLkNhcmRUaXRsZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNhcmRBY3Rpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIENhcmRfMS5DYXJkQWN0aW9uOyB9IH0pO1xudmFyIE5hdkJhcl8xID0gcmVxdWlyZShcIi4vY21wcy9uYXZpZ2F0aW9uL05hdkJhclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hdkJhclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTmF2QmFyXzEuTmF2QmFyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTmF2QmFyR3JvdXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5hdkJhcl8xLk5hdkJhckdyb3VwOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTmF2QmFySXRlbVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTmF2QmFyXzEuTmF2QmFySXRlbTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hdkJhckJyYW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBOYXZCYXJfMS5OYXZCYXJCcmFuZDsgfSB9KTtcbnZhciBOYXZpZ2F0aW9uXzEgPSByZXF1aXJlKFwiLi9jbXBzL25hdmlnYXRpb24vTmF2aWdhdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hdmlnYXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5hdmlnYXRpb25fMS5OYXZpZ2F0aW9uOyB9IH0pO1xudmFyIFNpZGVOYXZfMSA9IHJlcXVpcmUoXCIuL2NtcHMvbmF2aWdhdGlvbi9TaWRlTmF2XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2lkZU5hdlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU2lkZU5hdl8xLlNpZGVOYXY7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTaWRlTmF2RWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFNpZGVOYXZfMS5TaWRlTmF2RWw7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTaWRlTmF2VXNlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU2lkZU5hdl8xLlNpZGVOYXZVc2VyOyB9IH0pO1xudmFyIFByb2dyZXNzXzEgPSByZXF1aXJlKFwiLi9jbXBzL3Byb2dyZXNzL1Byb2dyZXNzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUHJvZ3Jlc3NcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFByb2dyZXNzXzEuUHJvZ3Jlc3M7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQcmVsb2FkZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFByb2dyZXNzXzEuUHJlbG9hZGVyOyB9IH0pO1xudmFyIE1vZGFsXzEgPSByZXF1aXJlKFwiLi9jbXBzL21vZGFsL01vZGFsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTW9kYWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE1vZGFsXzEuTW9kYWw7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNb2RhbENvbnRlbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE1vZGFsXzEuTW9kYWxDb250ZW50OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTW9kYWxGb290ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE1vZGFsXzEuTW9kYWxGb290ZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNb2RhbEhlYWRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTW9kYWxfMS5Nb2RhbEhlYWRlcjsgfSB9KTtcbmV4cG9ydHMuUm91dGVyID0gcmVxdWlyZShcInJlYWN0LXJvdXRlci1kb21cIik7XG4vLy8vLy8vL3V4XG52YXIgdXhfMSA9IHJlcXVpcmUoXCIuL3V4XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTG9naW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHV4XzEuTG9naW47IH0gfSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=
|