Content-Type: multipart/related; start=; boundary=----------wlJHlK1FkFIr8aHsgcKgnd Content-Location: http://webcache.googleusercontent.com/search?q=cache:OIrMqazcotkJ:www.participa2014.cat/resultats/+&cd=3&hl=es&ct=clnk&gl=es Subject: =?utf-8?Q?Participa2014.=20Proc=C3=A9s=20de=20participaci=C3=B3=20ciutadana.?= MIME-Version: 1.0 ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=search.htm Content-Type: text/html; charset=UTF-8; name=search.htm Content-ID: Content-Location: http://webcache.googleusercontent.com/search?q=cache:OIrMqazcotkJ:www.participa2014.cat/resultats/+&cd=3&hl=es&ct=clnk&gl=es Content-Transfer-Encoding: Quoted-Printable
Esta es la versi=C3=B3n en cach=C3=A9 de http://www.participa2014.cat/resultats/ de Google. = Se trata de una captura de pantalla de la p=C3=A1gina tal como esta se m= ostraba el 10 Nov 2014 03:57:08 GMT. Es posible que la p=C3=A1gina haya sufrido modificaciones durante este tiemp= o. M=C3=A1s informaci=C3=B3n
Sugerencia: para encontrar = r=C3=A1pidamente tu t=C3=A9rmino de b=C3=BAsqueda en esta p=C3=A1gina, p= ulsa Ctrl+F o =E2=8C=98-F (Mac) y utiliza la barra de b=C3= =BAsqueda.

Versi=C3=B3n de solo texto
 
Participa2014. Procés de participació ciutadana.</= title> <!-- !CSS --> <link href=3D"../css/oocss.css" rel=3D"stylesheet"> <link href=3D"../css/theme.css" rel=3D"stylesheet"> <link href=3D"../css/style.css" rel=3D"stylesheet"> <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media= queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// = --> <!--[if lt IE 9]> <script src=3D"../js/html5shiv.js"></script> <script src=3D"../js/respond.min.js"></script> <script src=3D"../js/selectivizr.js"></script> <link rel=3D"stylesheet" type=3D"text/css" media=3D"print" href=3D"../= css/style-ie-print.css"/> <link rel=3D"stylesheet" type=3D"text/css" href=3D"../css/style-ie.css= "/> <![endif]--> </head> <body > <!-- onload=3D"filtreMunicipis(0);document.forms.frm.municipi.fo= cus();iniciaPagina();"> --> <!-- !navbar --> <header class=3D"sticky"> <nav role=3D"navigation"> <div class=3D"container"> <div id=3D"imatgeCap" class=3D"nav-header"> <a target=3D"_blank" href=3D"http://web.gencat.cat/" title=3D"Gener= alitat de Catalunya" class=3D"navbar-brand logo"><img src=3D"../assets/i= mg/NG_logo_generalitat.png"></a> </div> <ul id=3D"menu-main" class=3D"languages nav-right"> <li class=3D"hide"><a href=3D"../ca/escr-tot.html">ca</a></li> <li style=3D"width:25px;"><a href=3D"../es/escr-tot.html">es</a></l= i> <li style=3D"width:30px;"><a href=3D"../en/escr-tot.html">en</a></l= i> </ul> = <ul class=3D"external_links nav-right"> <li><a href=3D"http://www.participa2014.cat/" target=3D"_blank"><s= trong>Participa2014</strong>.cat</a></li> <li><a href=3D"http://govern.cat/" target=3D"_blank"><str= ong>govern</strong>.cat</a></li> <li><a href=3D"http://president.cat/" target=3D"_blank"><= strong>president</strong>.cat</a></li> <li><a href=3D"http://gencat.cat/" target=3D"_blank"><str= ong>gencat</strong>.cat</a></li> </ul> </div> </nav> </header> <!-- !main content --> <div class=3D"page-wrapper ptn"> <div class=3D"col-md-12" style=3D"text-align:center;background-color:#f= ff;"> <a href=3D"escr-tot.html"> <img alt=3D"9N 2014 Tu participes Tu decideixes" src=3D"../assets/img= /9Nparticipes.gif"> </a> </div> <div class=3D"row"> <div class=3D"col-md-2"> = <ul class=3D"menu-niv-0" > <li><a href=3D"escr-tot.html"><img src=3D"../assets/img/menu0_bullet.= gif" /> <font color=3D'#C00000'>Inici</font></a></li> <li><a href=3D"escr-tot-resum.html"><img src=3D"../assets/img/menu0_b= ullet.gif" /> Catalunya</a></li> <li><a href=3D"#" onclick=3D"toggle_menu('submenuVegueries'); r= eturn false;"><img src=3D"../assets/img/menu0_bullet.gif" /> Vegueries<= /a> <ul id=3D'submenuVegueries' class=3D'menu-niv-1' style=3D'display:= none'><li><a href=3D'escr-veg-2.html'>Barcelona</a></li><li><a href=3D'e= scr-veg-4.html'>Girona</a></li><li><a href=3D'escr-veg-5.html'>Lleida</a= ></li><li><a href=3D'escr-veg-6.html'>Tarragona</a></li><li><a href=3D'e= scr-veg-7.html'>Terres de l'Ebre</a></li><li><a href=3D'escr-veg-3.html'= >Catalunya Central</a></li><li><a href=3D'escr-veg-1.html'>Alt Pirineu i= Aran</a></li></ul> </li> <li><a href=3D"#" onclick=3D"toggle_menu('submenuComarques'); r= eturn false;"><img src=3D"../assets/img/menu0_bullet.gif" /> Comarques<= /a> <ul id=3D'submenuComarques' class=3D'menu-niv-1' style=3D'display:n= one'><li><a href=3D'escr-com-1.html'>Alt Camp</a></li><li><a href=3D'esc= r-com-2.html'>Alt Empord=C3=A0</a></li><li><a href=3D'escr-com-3.html'>A= lt Pened=C3=A8s</a></li><li><a href=3D'escr-com-4.html'>Alt Urgell</a></= li><li><a href=3D'escr-com-5.html'>Alta Ribagor=C3=A7a</a></li><li><a hr= ef=3D'escr-com-6.html'>Anoia</a></li><li><a href=3D'escr-com-7.html'>Bag= es</a></li><li><a href=3D'escr-com-8.html'>Baix Camp</a></li><li><a href= =3D'escr-com-9.html'>Baix Ebre</a></li><li><a href=3D'escr-com-10.html'>= Baix Empord=C3=A0</a></li><li><a href=3D'escr-com-11.html'>Baix Llobrega= t</a></li><li><a href=3D'escr-com-12.html'>Baix Pened=C3=A8s</a></li><li= ><a href=3D'escr-com-13.html'>Barcelon=C3=A8s</a></li><li><a href=3D'esc= r-com-14.html'>Bergued=C3=A0</a></li><li><a href=3D'escr-com-15.html'>Ce= rdanya</a></li><li><a href=3D'escr-com-16.html'>Conca de Barber=C3=A0</a= ></li><li><a href=3D'escr-com-17.html'>Garraf</a></li><li><a href=3D'esc= r-com-18.html'>Garrigues</a></li><li><a href=3D'escr-com-19.html'>Garrot= xa</a></li><li><a href=3D'escr-com-20.html'>Giron=C3=A8s</a></li><li><a = href=3D'escr-com-21.html'>Maresme</a></li><li><a href=3D'escr-com-22.htm= l'>Montsi=C3=A0</a></li><li><a href=3D'escr-com-23.html'>Noguera</a></li= ><li><a href=3D'escr-com-24.html'>Osona</a></li><li><a href=3D'escr-com-= 25.html'>Pallars Juss=C3=A0</a></li><li><a href=3D'escr-com-26.html'>Pal= lars Sobir=C3=A0</a></li><li><a href=3D'escr-com-27.html'>Pla d'Urgell</= a></li><li><a href=3D'escr-com-28.html'>Pla de l'Estany</a></li><li><a h= ref=3D'escr-com-29.html'>Priorat</a></li><li><a href=3D'escr-com-30.html= '>Ribera d'Ebre</a></li><li><a href=3D'escr-com-31.html'>Ripoll=C3=A8s</= a></li><li><a href=3D'escr-com-32.html'>Segarra</a></li><li><a href=3D'e= scr-com-33.html'>Segri=C3=A0</a></li><li><a href=3D'escr-com-34.html'>Se= lva</a></li><li><a href=3D'escr-com-35.html'>Solson=C3=A8s</a></li><li><= a href=3D'escr-com-36.html'>Tarragon=C3=A8s</a></li><li><a href=3D'escr-= com-37.html'>Terra Alta</a></li><li><a href=3D'escr-com-38.html'>Urgell<= /a></li><li><a href=3D'escr-com-39.html'>Val d'Aran</a></li><li><a href=3D= 'escr-com-40.html'>Vall=C3=A8s Occidental</a></li><li><a href=3D'escr-co= m-41.html'>Vall=C3=A8s Oriental</a></li></ul> </li> <li><a href=3D"#" onclick=3D"toggle_menu('comarquesCmb'); retur= n false;"><img src=3D"../assets/img/menu0_bullet.gif" /> Municipis</a> <div> <select id=3D"comarquesCmb" class=3D"menu-niv-1" name=3D"comarqu= es" = style=3D"margin-top:10px; float: right; display:none; font-weight: = normal;" onchange=3D"canviComarca(this.value,'submenuMunicipis');return fals= e;"> <option value=3D"0">-- comarca --</option> = <option value=3D"1">Alt Camp</option> = <option value=3D"2">Alt Empordà</option> = <option value=3D"3">Alt Penedès</option> = <option value=3D"4">Alt Urgell</option> = <option value=3D"5">Alta Ribagorça</option> = <option value=3D"6">Anoia</option> = <option value=3D"7">Bages</option> = <option value=3D"8">Baix Camp</option> = <option value=3D"9">Baix Ebre</option> = <option value=3D"10">Baix Empordà</option> = <option value=3D"11">Baix Llobregat</option> = <option value=3D"12">Baix Penedès</option> = <option value=3D"13">Barcelonès</option> = <option value=3D"14">Berguedà</option> = <option value=3D"15">Cerdanya</option> = <option value=3D"16">Conca de Barberà</option> = <option value=3D"17">Garraf</option> = <option value=3D"18">Garrigues</option> = <option value=3D"19">Garrotxa</option> = <option value=3D"20">Gironès</option> = <option value=3D"21">Maresme</option> = <option value=3D"22">Montsià</option> = <option value=3D"23">Noguera</option> = <option value=3D"24">Osona</option> = <option value=3D"25">Pallars Jussà</option> = <option value=3D"26">Pallars Sobirà</option> = <option value=3D"28">Pla de l'Estany</option> = <option value=3D"27">Pla d'Urgell</option> = <option value=3D"29">Priorat</option> = <option value=3D"30">Ribera d'Ebre</option> = <option value=3D"31">Ripollès</option> = <option value=3D"32">Segarra</option> = <option value=3D"33">Segrià</option> = <option value=3D"34">Selva</option> = <option value=3D"35">Solsonès</option> = <option value=3D"36">Tarragonès</option> = <option value=3D"37">Terra Alta</option> = <option value=3D"38">Urgell</option> = <option value=3D"39">Val d'Aran</option> = <option value=3D"40">Vallès Occidental</option> = = <option value=3D"41">Vallès Oriental</option> = </select> = </div> <ul id=3D"submenuMunicipis" class=3D"menu-niv-1" style=3D"= display:none;top:-30px;"> <li>...</li> </ul> </li> </ul> </div> <div class=3D"col-md-10"> <form class=3D"form-block" role=3D"form" name=3D"frm" onsubmit=3D"retu= rn false;"> <div id=3D"paginaNoImprimible"> <div class=3D"bg-color-light-grey"> <div class=3D"participants" > <strong>2.220.669</strong> Participants </div> </div> = <div id=3D"titol_dinamic" class=3D"bg-color-light-grey" style=3D"hei= ght:43px; font-size: 18px; text-align: center; font-weight: bold; paddin= g-top: 10px;"> </div> <div class=3D"bg-color-light-grey" style=3D"background-color:#fff;">= = <br/> <div class=3D"titol-grafic" style=3D"margin: auto;"> <strong>Resultats del procés participatiu</strong> </div> <div style=3D"margin: auto;"> <div class=3D"row"> <div class=3D"col-md-8"> <img alt=3D"" src=3D"../graphs/catalunyaBar1-tot.jpg" /> </div> <div class=3D"col-md-4"> <ul class=3D"categories-graphs"> <li><img alt=3D"" src=3D"../assets/img/si_si.png" /> &nbs= p;Sí - Sí</li> <li><img alt=3D"" src=3D"../assets/img/si_no.png" /> &nbs= p;Sí - No</li> = <li><img alt=3D"" src=3D"../assets/img/si_blanc.png" /> &= nbsp;Sí - En blanc </li> <li><img alt=3D"" src=3D"../assets/img/no.png" />  N= o </li> <li><img alt=3D"" src=3D"../assets/img/blanc.png" /> &nbs= p;En blanc</li> <li><img alt=3D"" src=3D"../assets/img/altres.png" /> &nb= sp;Altres</li> </ul> </div> </div> </div> = <br/> <div class=3D"titol-grafic" style=3D"margin: auto;"> <strong>Resultats per pregunta</strong> </div> <br /> <div style=3D"background-color:#ffffff;"> <div class=3D"row"> <div class=3D"col-md-5"> <table style=3D"align:center;"> <tr> <td align=3D"center" colspan=3D"2"> <strong>Vol que Catalunya esdevingui un Estat?</strong> </td> </tr> <tr> <td align=3D"right"> <ul class=3D"categories-graphs"> <li><img alt=3D"" src=3D"../assets/img/si.png" />  S= í</li> <li><img alt=3D"" src=3D"../assets/img/no.png" />  No= </li> <li><img alt=3D"" src=3D"../assets/img/blanc.png" />  = ;En blanc</li> <li><img alt=3D"" src=3D"../assets/img/altres.png" /> &nbs= p;Altres</li> </ul> </td> <td align=3D"center" valign=3D"bottom"> <img alt=3D"" src=3D"../graphs/catalunyaPie1-tot.jpg" /> </td> </tr> </table> </div> <div class=3D"col-md-5"> <table style=3D"align:center;"> <tr> <td align=3D"center" colspan=3D"2"> <strong>En cas afirmatiu, vol que aquest Estat sigui independen= t?</strong> </td> </tr> = <tr> = <td align=3D"center" valign=3D"bottom" style=3D"height:245px"> = <img alt=3D"" src=3D"../graphs/catalunyaPie2-tot.jpg" /> </td> <td align=3D"left"> <ul class=3D"categories-graphs"> <li><img alt=3D"" src=3D"../assets/img/si_si.png" />  = ;Sí - Sí</li> <li><img alt=3D"" src=3D"../assets/img/si_no.png" />  = ;Sí - No</li> <li><img alt=3D"" src=3D"../assets/img/si_blanc.png" /> &n= bsp;Sí - En blanc </li> </ul> </td> </tr> </table> </div> <div class=3D"col-md-2"></div> </div> </div> </div> </div> <div class=3D"col-md-12" style=3D"background-color:#fff;height: 50px"= > </div> </form> </div> </div> <div class=3D"fons_footer"> <footer class=3D"container center-block shadowBox2"> <div class=3D"row" > <div class=3D"col-md-2"> </div> <div class=3D"col-md-3"> <ul class=3D"list-group"> <li class=3D"peu-list-group-item-titol"> <p class=3D"title_list">Mapa web</p> </li> <li class=3D"peu-list-group-item bullet"> <a href=3D"http://www.participa2014.cat/InscripcioVoluntaris/inde= x.html" title=3D"Fes-te voluntari"><img src=3D"../assets/img/NG_ico_list= .png" /> Fes-te'n voluntari</a> </li> <li class=3D"peu-list-group-item bullet"> <a href=3D"http://www.participa2014.cat/com-puc-participar.html" = title=3D"On votar?"><img src=3D"../assets/img/NG_ico_list.png" /> Com h= i puc participar?</a> </li> <li class=3D"peu-list-group-item bullet" > <a href=3D"http://www.participa2014.cat/on-puc-participar.html" t= itle=3D"On puc participar?"><img src=3D"../assets/img/NG_ico_list.png" = /> On puc participar-hi?</a> </li> <li class=3D"peu-list-group-item bullet"> <a title=3D"Contacte" href=3D"http://www.participa2014.cat/contac= te.html"><img src=3D"../assets/img/NG_ico_list.png" /> Contacte</a> </li> </ul> </div> <div class=3D"col-md-3"> <ul class=3D"list-group"> <li class=3D"peu-list-group-item-titol"> <p class=3D"title_list">Altres webs del Govern</p> </li> <li class=3D"peu-list-group-item bullet"> <a target=3D"_blank" href=3D"http://www.govern.cat/" title=3D"gov= ern.cat"><img src=3D"../assets/img/NG_ico_list.png" /> govern.cat</a> </li> <li class=3D"peu-list-group-item bullet"> <a target=3D"_blank" href=3D"http://www.president.cat/" title=3D"= president.cat"><img src=3D"../assets/img/NG_ico_list.png" /> president.= cat</a> </li> <li class=3D"peu-list-group-item bullet"> <a target=3D"_blank" href=3D"http://www.gencat.cat/" title=3D"gen= cat.cat"><img src=3D"../assets/img/NG_ico_list.png" /> gencat.cat</a> </li> <li class=3D"peu-list-group-item bullet"> <a target=3D"_blank" href=3D"http://transparencia.gencat.cat" tit= le=3D"transparencia.cat"><img src=3D"../assets/img/NG_ico_list.png" /> = transparencia.cat</a> </li> </ul> </div> = <div class=3D"col-md-3"> <ul class=3D"list-group"> <li class=3D"peu-list-group-item-titol"> <p class=3D"title_list">Si tens dubtes:</p> </li> <li class=3D"peu-list-group-item"> <a class=3D"012" href=3D"http://web.gencat.cat/ca/contacte/telefo= ns/" target=3D"_blank" title=3D"012"> <img src=3D"../assets/img/footer_012.png" alt=3D"012"> </a> </li> </ul> </div> = <div class=3D"col-md-2"> </div> = </div> = <div class=3D"row" > <div class=3D"col-md-1"> </div> = <div class=3D"col-md-10" style=3D"border-bottom: 1px solid #CCCCCC;"= > </div> <div class=3D"col-md-1"> </div> </div> = <div class=3D"row" > <br /> <div class=3D"col-md-1"> </div> = <div class=3D"col-md-1"> <a accesskey=3D"5" title=3D"www.gencat.cat" href=3D"http://www.genc= at.cat/"> <img src=3D"../assets/img/logo_generalitat_gris.png" title=3D"= www.gencat.cat" alt=3D"www.gencat.cat" width=3D"101" height=3D"27"></a> </div> <div class=3D"col-md-9 avis_legal"> <p><a title=3D"Avis legal" href=3D"http://web.gencat.cat/ca/ajuda/a= vis_legal/" target=3D"_blank">Avís legal</a>: La ©Generalitat de Catalunya permet la reutilit= zació dels continguts i de les dades sempre que se citi la font i la data d'= actualització, que no es desnaturalitzi la informació i que no e= s contradigui amb una llicència específica.</p>. </div> <div class=3D"col-md-1"> </div> = </div> </footer> </div> </div> <!-- !JavaScript --> <script src=3D"/js/titol.js?201411100115"></script> <script src=3D"../js/jquery.js"></script> <script src=3D"../js/bootstrap.js"></script> <script src=3D"../js/oocss.min.js"></script> <script src=3D"../js/typeahead-0.10.5.js"></script> <script src=3D"../js/resultats.js"></script> <script src=3D"../js/webtrends2.js" type=3D"text/javascript"></script> <script type=3D"text/javascript"> var _tag =3D new WebTrends(); _tag.dcsid=3D"dcs222km11h659bw86srop7ny_9e4o"; _tag.dcsGetId(); </script> <script type=3D"text/javascript"> _tag.DCSext.wt_departament=3D"Governacio i Relacions Institucionals"; _tag.DCSext.wt_web1=3D"Participa 2014"; _tag.DCSext.wt_web2=3D""; _tag.DCSext.wt_web3=3D""; _tag.WT.cg_n=3D""; _tag.WT.cg_s=3D""; _tag.DCSext.subcontent1=3D""; _tag.DCSext.subcontent2=3D""; _tag.DCSext.subcontent3=3D""; _tag.DCSext.subcontent4=3D""; _tag.dcsCollect(); </script> <script type=3D"text/javascript"> document.getElementById("titol_dinamic").innerHTML =3D titol_ca; </script> <noscript> <img alt=3D"" name=3D"DCSIMG" width=3D"1" height=3D"1" src=3D"//statse= .webtrendslive.com/dcs222km11h659bw86srop7ny_9e4o/njs.gif?dcsuri=3D/noja= vascript&WT.js=3DNo&WT.tv=3D8.0.2"/> </noscript> </body> </html> ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=oocss.css Content-Type: text/css; name=oocss.css Content-Location: http://www.participa2014.cat/resultats/dades/css/oocss.css Content-Transfer-Encoding: 8bit /* SOOCSS Library - v0.4 */ /*! * Collection of styles for the SOOCSS HTML objects library * Bootstrap version v3.1.0 (http://getbootstrap.com) * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome */ @font-face { font-family: 'OpenSansRegular'; src: url('../assets/fonts//OpenSans-Regular-webfont.eot'); src: local('☺'), url('../assets/fonts//OpenSans-Regular-webfont.woff') format('woff'), url('../assets/fonts//OpenSans-Regular-webfont.ttf') format('truetype'), url('../assets/fonts//OpenSans-Regular-webfont.svg') format('svg'); font-weight: normal; font-style: normal; } /*! normalize.css v3.0.0 | MIT License | git.io/normalize */ html { font-family: sans-serif; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; } body { margin: 0; } article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; } audio, canvas, progress, video { display: inline-block; vertical-align: baseline; } audio:not([controls]) { display: none; height: 0; } [hidden], template { display: none; } a { background: transparent; } a:active, a:hover { outline: 0; } abbr[title] { border-bottom: 1px dotted; } b, strong { font-weight: bold; } dfn { font-style: italic; } h1 { font-size: 2em; margin: 0.67em 0; } mark { background: #ff0; color: #000; } small { font-size: 80%; } sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sup { top: -0.5em; } sub { bottom: -0.25em; } img { border: 0; } svg:not(:root) { overflow: hidden; } figure { margin: 1em 40px; } hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; } pre { overflow: auto; } code, kbd, pre, samp { font-family: monospace, monospace; font-size: 1em; } button, input, optgroup, select, textarea { color: inherit; font: inherit; margin: 0; } button { overflow: visible; } button, select { text-transform: none; } button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; cursor: pointer; } button[disabled], html input[disabled] { cursor: default; } button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } input { line-height: normal; } input[type="checkbox"], input[type="radio"] { box-sizing: border-box; padding: 0; } input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { height: auto; } input[type="search"] { -webkit-appearance: textfield; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; } input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } legend { border: 0; padding: 0; } textarea { overflow: auto; } optgroup { font-weight: bold; } table { border-collapse: collapse; border-spacing: 0; } td, th { padding: 0; } @media print { * { text-shadow: none !important; color: #000 !important; background: transparent !important; box-shadow: none !important; } a, a:visited { text-decoration: underline; } a[href]:after { content: " (" attr(href) ")"; } abbr[title]:after { content: " (" attr(title) ")"; } a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } thead { display: table-header-group; } tr, img { page-break-inside: avoid; } img { max-width: 100% !important; } p, h2, h3 { orphans: 3; widows: 3; } h2, h3 { page-break-after: avoid; } select { background: #fff !important; } .navbar { display: none; } .table td, .table th { background-color: #fff !important; } .btn > .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px solid #000; } .table { border-collapse: collapse !important; } .table-bordered th, .table-bordered td { border: 1px solid #ddd !important; } } .fsxs { font-size: 0.786em !important; } .fss { font-size: 0.857em !important; } .fsn { font-size: 1em !important; } .fsm { font-size: 1.286em !important; } .fsl { font-size: 1.714em !important; } .fsxl { font-size: 2.143em !important; } .fsxxl { font-size: 3.429em !important; } .fsxxxl { font-size: 4.286em !important; } @media (min-width: 768px) { .fsxs-sm { font-size: 0.786em !important; } .fss-sm { font-size: 0.857em !important; } .fsn-sm { font-size: 1em !important; } .fsm-sm { font-size: 1.286em !important; } .fsl-sm { font-size: 1.714em !important; } .fsxl-sm { font-size: 2.143em !important; } .fsxxl-sm { font-size: 3.429em !important; } .fsxxxl-sm { font-size: 4.286em !important; } } @media (min-width: 992px) { .fsxs-md { font-size: 0.786em !important; } .fss-md { font-size: 0.857em !important; } .fsn-md { font-size: 1em !important; } .fsm-md { font-size: 1.286em !important; } .fsl-md { font-size: 1.714em !important; } .fsxl-md { font-size: 2.143em !important; } .fsxxl-md { font-size: 3.429em !important; } .fsxxxl-md { font-size: 4.286em !important; } } @media (min-width: 1200px) { .fsxs-lg { font-size: 0.786em !important; } .fss-lg { font-size: 0.857em !important; } .fsn-lg { font-size: 1em !important; } .fsm-lg { font-size: 1.286em !important; } .fsl-lg { font-size: 1.714em !important; } .fsxl-lg { font-size: 2.143em !important; } .fsxxl-lg { font-size: 3.429em !important; } .fsxxxl-lg { font-size: 4.286em !important; } } h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { font-family: inherit; font-weight: 500; line-height: 1.1; color: inherit; } h1 small, h2 small, h3 small, h4 small, h5 small, h6 small, .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small, h1 .small, h2 .small, h3 .small, h4 .small, h5 .small, h6 .small, .h1 .small, .h2 .small, .h3 .small, .h4 .small, .h5 .small, .h6 .small { font-weight: normal; line-height: 1; color: #999999; } h1, .h1, h2, .h2, h3, .h3 { margin-top: 20px; margin-bottom: 10px; } h1 small, .h1 small, h2 small, .h2 small, h3 small, .h3 small, h1 .small, .h1 .small, h2 .small, .h2 .small, h3 .small, .h3 .small { font-size: 65%; } h4, .h4, h5, .h5, h6, .h6 { margin-top: 10px; margin-bottom: 10px; } h4 small, .h4 small, h5 small, .h5 small, h6 small, .h6 small, h4 .small, .h4 .small, h5 .small, .h5 .small, h6 .small, .h6 .small { font-size: 75%; } h1, .h1 { font-size: 2.143em; } h2, .h2 { font-size: 1.429em; } h3, .h3 { font-size: 1.286em; } h4, .h4 { font-size: 1.143em; } h5, .h5 { font-size: 1em; } h6, .h6 { font-size: 0.857em; } p { margin: 0 0 10px; } .lead { margin-bottom: 20px; font-size: 1em; font-weight: 200; line-height: 1.4; } @media (min-width: 768px) { .lead { font-size: 1.5em; } } small, .small { font-size: 85%; } cite { font-style: normal; } .text-left { text-align: left; } .text-right { text-align: right; } .text-center { text-align: center; } .text-justify { text-align: justify; } .text-uppercase { text-transform: uppercase; } .text-lowercase { text-transform: lowercase; } .text-capitalize { text-transform: capitalize; } .text-muted { color: #5a5a5a; } .text-white { color: #fff; } .text-black { color: #000; } .text-primary { color: #c25252; } a.text-primary:hover { color: #a63b3b; } .text-secondary { color: #987000; } a.text-secondary:hover { color: #654a00; } .text-success { color: #3c763d; } a.text-success:hover { color: #2b542c; } .text-info { color: #31708f; } a.text-info:hover { color: #245269; } .text-warning { color: #8a6d3b; } a.text-warning:hover { color: #66512c; } .text-danger { color: #a94442; } a.text-danger:hover { color: #843534; } .bg-primary { color: #fff; background-color: #c25252; } a.bg-primary:hover { background-color: #a63b3b; } .bg-secondary { color: #fff; background-color: #987000; } a.bg-secondary:hover { background-color: #654a00; } .bg-success { background-color: #dff0d8; } a.bg-success:hover { background-color: #c1e2b3; } .bg-info { background-color: #d9edf7; } a.bg-info:hover { background-color: #afd9ee; } .bg-warning { background-color: #fcf8e3; } a.bg-warning:hover { background-color: #f7ecb5; } .bg-danger { background-color: #f2dede; } a.bg-danger:hover { background-color: #e4b9b9; } .page-header { padding-bottom: 9px; margin: 40px 0 20px; border-bottom: 1px solid #eeeeee; } ul, ol { margin-top: 0; margin-bottom: 10px; } ul ul, ol ul, ul ol, ol ol { margin-bottom: 0; } .list-unstyled { padding-left: 0; list-style: none; } .list-inline { padding-left: 0; list-style: none; margin-left: -5px; } .list-inline > li { display: inline-block; padding-left: 5px; padding-right: 5px; } dl { margin-top: 0; margin-bottom: 20px; } dt, dd { line-height: 1.42857143; } dt { font-weight: bold; } dd { margin-left: 0; } @media (min-width: 768px) { .dl-horizontal dt { float: left; width: 160px; clear: left; text-align: right; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .dl-horizontal dd { margin-left: 180px; } } .dl-faq { counter-reset: item1; } .dl-faq dt { font-size: 1.286em; } .dl-faq dt:before { counter-increment: item1; content: counter(item1) ". "; } .dl-faq dd { margin-bottom: 15px; } abbr[title], abbr[data-original-title] { cursor: help; border-bottom: 1px dotted #999999; } .initialism { font-size: 90%; text-transform: uppercase; } blockquote { padding: 10px 20px; margin: 0 0 20px; font-size: 17.5px; border-left: 5px solid #eeeeee; } blockquote p:last-child, blockquote ul:last-child, blockquote ol:last-child { margin-bottom: 0; } blockquote footer, blockquote small, blockquote .small { display: block; font-size: 80%; line-height: 1.42857143; color: #999999; } blockquote footer:before, blockquote small:before, blockquote .small:before { content: '\2014 \00A0'; } .blockquote-reverse, blockquote.pull-right { padding-right: 15px; padding-left: 0; border-right: 5px solid #eeeeee; border-left: 0; text-align: right; } .blockquote-reverse footer:before, blockquote.pull-right footer:before, .blockquote-reverse small:before, blockquote.pull-right small:before, .blockquote-reverse .small:before, blockquote.pull-right .small:before { content: ''; } .blockquote-reverse footer:after, blockquote.pull-right footer:after, .blockquote-reverse small:after, blockquote.pull-right small:after, .blockquote-reverse .small:after, blockquote.pull-right .small:after { content: '\00A0 \2014'; } blockquote:before, blockquote:after { content: ""; } address { margin-bottom: 20px; font-style: normal; line-height: 1.42857143; } .is-contrast h1, .is-contrast h2, .is-contrast h3, .is-contrast h4, .is-contrast h5, .is-contrast h6, .is-contrast .h1, .is-contrast .h2, .is-contrast .h3, .is-contrast .h4, .is-contrast .h5, .is-contrast .h6 { color: #fff; } .is-contrast a { color: #fff; text-decoration: underline; } .is-contrast a:active, .is-contrast a:focus, .is-contrast a:hover { color: #fff; text-decoration: none; } .is-contrast .text-muted { color: #999; } .is-contrast .text-primary, .is-contrast .text-secondary, .is-contrast .text-success, .is-contrast .text-info, .is-contrast .text-warning, .is-contrast .text-danger { color: #fff; } .is-contrast .bg-primary, .is-contrast .bg-secondary, .is-contrast .bg-success, .is-contrast .bg-info, .is-contrast .bg-warning, .is-contrast .bg-danger { background: #fff; color: #000; } .btn { display: inline-block; margin-bottom: 0; font-weight: normal; text-align: center; text-decoration: none; vertical-align: middle; cursor: pointer; background-image: none; border: 1px solid transparent; white-space: nowrap; padding: 6px 12px; font-size: 14px; line-height: 1.42857143; border-radius: 4px; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .btn:focus, .btn:active:focus, .btn.active:focus { outline: thin dotted; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } .btn:hover, .btn:focus { color: #333333; text-decoration: none; } .btn:active, .btn.active { outline: 0; background-image: none; -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } .btn.disabled, .btn[disabled], fieldset[disabled] .btn { cursor: not-allowed; pointer-events: none; opacity: 0.65; filter: alpha(opacity=65); -webkit-box-shadow: none; box-shadow: none; } .btn-default { color: #333333; background-color: #ffffff; border-color: #cccccc; } .btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default { color: #333333; background-color: #ebebeb; border-color: #adadad; } .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default { background-image: none; } .btn-default.disabled, .btn-default[disabled], fieldset[disabled] .btn-default, .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, .btn-default.disabled:active, .btn-default[disabled]:active, fieldset[disabled] .btn-default:active, .btn-default.disabled.active, .btn-default[disabled].active, fieldset[disabled] .btn-default.active { background-color: #ffffff; border-color: #cccccc; } .btn-default .badge { color: #ffffff; background-color: #333333; } .btn-primary { color: #ffffff; background-color: #c25252; border-color: #b94141; } .btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary { color: #ffffff; background-color: #ae3d3d; border-color: #8c3131; } .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary { background-image: none; } .btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active { background-color: #c25252; border-color: #b94141; } .btn-primary .badge { color: #c25252; background-color: #ffffff; } .btn-secondary { color: #ffffff; background-color: #987000; border-color: #7f5d00; } .btn-secondary:hover, .btn-secondary:focus, .btn-secondary:active, .btn-secondary.active, .open .dropdown-toggle.btn-secondary { color: #ffffff; background-color: #6f5200; border-color: #413000; } .btn-secondary:active, .btn-secondary.active, .open .dropdown-toggle.btn-secondary { background-image: none; } .btn-secondary.disabled, .btn-secondary[disabled], fieldset[disabled] .btn-secondary, .btn-secondary.disabled:hover, .btn-secondary[disabled]:hover, fieldset[disabled] .btn-secondary:hover, .btn-secondary.disabled:focus, .btn-secondary[disabled]:focus, fieldset[disabled] .btn-secondary:focus, .btn-secondary.disabled:active, .btn-secondary[disabled]:active, fieldset[disabled] .btn-secondary:active, .btn-secondary.disabled.active, .btn-secondary[disabled].active, fieldset[disabled] .btn-secondary.active { background-color: #987000; border-color: #7f5d00; } .btn-secondary .badge { color: #987000; background-color: #ffffff; } .btn-success { color: #000000; background-color: #5cb85c; border-color: #4cae4c; } .btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success { color: #000000; background-color: #47a447; border-color: #398439; } .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success { background-image: none; } .btn-success.disabled, .btn-success[disabled], fieldset[disabled] .btn-success, .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled:active, .btn-success[disabled]:active, fieldset[disabled] .btn-success:active, .btn-success.disabled.active, .btn-success[disabled].active, fieldset[disabled] .btn-success.active { background-color: #5cb85c; border-color: #4cae4c; } .btn-success .badge { color: #5cb85c; background-color: #000000; } .btn-info { color: #ffffff; background-color: #1b809e; border-color: #176e88; } .btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info { color: #ffffff; background-color: #15647b; border-color: #0e4454; } .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info { background-image: none; } .btn-info.disabled, .btn-info[disabled], fieldset[disabled] .btn-info, .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, .btn-info.disabled:active, .btn-info[disabled]:active, fieldset[disabled] .btn-info:active, .btn-info.disabled.active, .btn-info[disabled].active, fieldset[disabled] .btn-info.active { background-color: #1b809e; border-color: #176e88; } .btn-info .badge { color: #1b809e; background-color: #ffffff; } .btn-warning { color: #ffffff; background-color: #aa6708; border-color: #925807; } .btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning { color: #ffffff; background-color: #834f06; border-color: #573504; } .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning { background-image: none; } .btn-warning.disabled, .btn-warning[disabled], fieldset[disabled] .btn-warning, .btn-warning.disabled:hover, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, .btn-warning.disabled:active, .btn-warning[disabled]:active, fieldset[disabled] .btn-warning:active, .btn-warning.disabled.active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning.active { background-color: #aa6708; border-color: #925807; } .btn-warning .badge { color: #aa6708; background-color: #ffffff; } .btn-danger { color: #ffffff; background-color: #ce4844; border-color: #c53834; } .btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger { color: #ffffff; background-color: #b93430; border-color: #942a27; } .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger { background-image: none; } .btn-danger.disabled, .btn-danger[disabled], fieldset[disabled] .btn-danger, .btn-danger.disabled:hover, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, .btn-danger.disabled:active, .btn-danger[disabled]:active, fieldset[disabled] .btn-danger:active, .btn-danger.disabled.active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger.active { background-color: #ce4844; border-color: #c53834; } .btn-danger .badge { color: #ce4844; background-color: #ffffff; } .btn-link { color: #333333; font-weight: normal; cursor: pointer; border-radius: 0; vertical-align: inherit; text-decoration: underline; } .btn-link, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link { background-color: transparent; -webkit-box-shadow: none; box-shadow: none; } .btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active { border-color: transparent; } .btn-link:hover, .btn-link:focus { color: #0d0d0d; text-decoration: none; background-color: transparent; } .btn-link[disabled]:hover, fieldset[disabled] .btn-link:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:focus { color: #999999; text-decoration: none; } .btn-icon { color: #333333; font-weight: normal; cursor: pointer; border-radius: 0; vertical-align: inherit; text-decoration: underline; } .btn-icon, .btn-icon:active, .btn-icon[disabled], fieldset[disabled] .btn-icon { background-color: transparent; -webkit-box-shadow: none; box-shadow: none; } .btn-icon, .btn-icon:hover, .btn-icon:focus, .btn-icon:active { border-color: transparent; } .btn-icon:hover, .btn-icon:focus { color: #0d0d0d; text-decoration: none; background-color: transparent; } .btn-icon[disabled]:hover, fieldset[disabled] .btn-icon:hover, .btn-icon[disabled]:focus, fieldset[disabled] .btn-icon:focus { color: #999999; text-decoration: none; } .btn-lg, .btn-group-lg > .btn { padding: 10px 16px; font-size: 18px; line-height: 1.33; border-radius: 6px; } .btn-sm, .btn-group-sm > .btn { padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px; } .btn-xs, .btn-group-xs > .btn { padding: 1px 5px; font-size: 12px; line-height: 1.5; border-radius: 3px; } .btn-block { display: block; width: 100%; padding-left: 0; padding-right: 0; } .btn-block + .btn-block { margin-top: 5px; } input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block { width: 100%; } .is-contrast .btn { color: #000; background-color: #fff; border: 1px solid #fff; } .is-contrast .btn:hover { color: #fff; background-color: #000; } .is-contrast .btn.btn-link, .is-contrast .btn.btn-icon { color: #fff; border: none; background-color: transparent; text-decoration: underline; } .is-contrast .btn.btn-link:hover, .is-contrast .btn.btn-icon:hover { color: #fff; background-color: transparent; text-decoration: none; } .is-contrast .btn[disabled] { color: #000; background-color: #fff; text-decoration: line-through; opacity: 0.8; filter: alpha(opacity=80); } fieldset { padding: 0; margin: 0; border: 0; min-width: 0; } legend { display: block; width: 100%; padding: 0; margin-bottom: 20px; font-size: 1.5em; line-height: inherit; color: #333333; border: 0; } label { display: inline-block; margin-bottom: 5px; font-weight: normal; } input[type="search"] { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } input[type="radio"], input[type="checkbox"] { margin: 4px 0 0; margin-top: 1px \9; /* IE8-9 */ line-height: normal; } input[type="file"] { display: block; } input[type="range"] { display: block; width: 100%; } select[multiple], select[size] { height: auto; } input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus { outline: thin dotted; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } output { display: block; padding-top: 7px; font-size: 1em; line-height: 1.42857143; color: #5a5a5a; } .form-control { display: block; width: 100%; height: 34px; padding: 6px 12px; font-size: 1em; line-height: 1.42857143; color: #5a5a5a; background-color: #ffffff; background-image: none; border: 1px solid #cccccc; border-radius: 4px; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; min-width: 65px; } .form-control:focus { border-color: #66afe9; outline: 0; -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); } .form-control::-moz-placeholder { color: #999999; opacity: 1; } .form-control:-ms-input-placeholder { color: #999999; } .form-control::-webkit-input-placeholder { color: #999999; } .form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { cursor: not-allowed; background-color: #eeeeee; opacity: 1; } textarea.form-control { height: auto; max-width: 100%; } input[type="search"] { -webkit-appearance: none; } input[type="date"] { line-height: 34px; } .form-block .input-file:before, .form-horizontal .input-file:before, .form-inline .input-file:before, .input-file:before, .form-block .input-file:after, .form-horizontal .input-file:after, .form-inline .input-file:after, .input-file:after { content: " "; display: table; } .form-block .input-file:after, .form-horizontal .input-file:after, .form-inline .input-file:after, .input-file:after { clear: both; } .form-block .input-file:before, .form-horizontal .input-file:before, .form-inline .input-file:before, .input-file:before, .form-block .input-file:after, .form-horizontal .input-file:after, .form-inline .input-file:after, .input-file:after { content: " "; display: table; } .form-block .input-file:after, .form-horizontal .input-file:after, .form-inline .input-file:after, .input-file:after { clear: both; } .form-block .input-file .form-control, .form-horizontal .input-file .form-control, .form-inline .input-file .form-control, .input-file .form-control { float: left; width: 200px; font-style: italic; font-size: 1em; border-top-right-radius: 0; border-bottom-right-radius: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #5a5a5a; } .form-block .input-file .btn, .form-horizontal .input-file .btn, .form-inline .input-file .btn, .input-file .btn { position: relative; float: left; border-top-left-radius: 0; border-bottom-left-radius: 0; overflow: hidden; } .form-block .input-file .btn [type=file], .form-horizontal .input-file .btn [type=file], .form-inline .input-file .btn [type=file], .input-file .btn [type=file] { position: absolute; z-index: 0; top: 0; right: 0; height: 100%; font-size: 100em; opacity: 0; filter: alpha(opacity=0); -ms-filter: "alpha(opacity=0)"; -khtml-opacity: 0; -moz-opacity: 0; cursor: pointer; } .form-group { margin-bottom: 15px; } .radio, .checkbox { display: block; min-height: 20px; margin-top: 10px; margin-bottom: 10px; padding-left: 20px; } .radio label, .checkbox label { display: inline; font-weight: normal; cursor: pointer; } .radio input[type="radio"], .radio-inline input[type="radio"], .checkbox input[type="checkbox"], .checkbox-inline input[type="checkbox"] { float: left; margin-left: -20px; } .radio + .radio, .checkbox + .checkbox { margin-top: -5px; } .radio-inline, .checkbox-inline { display: inline-block; padding-left: 20px; margin-bottom: 0; vertical-align: middle; font-weight: normal; cursor: pointer; } .radio-inline label, .checkbox-inline label { margin-bottom: 0; font-weight: normal; } .radio-inline + .radio-inline, .checkbox-inline + .checkbox-inline { margin-top: 0; margin-left: 10px; } input[type="radio"][disabled], input[type="checkbox"][disabled], .radio[disabled], .radio-inline[disabled], .checkbox[disabled], .checkbox-inline[disabled], fieldset[disabled] input[type="radio"], fieldset[disabled] input[type="checkbox"], fieldset[disabled] .radio, fieldset[disabled] .radio-inline, fieldset[disabled] .checkbox, fieldset[disabled] .checkbox-inline { cursor: not-allowed; } .input-sm { height: 30px; padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px; } select.input-sm { height: 30px; line-height: 30px; } textarea.input-sm, select[multiple].input-sm { height: auto; } .input-lg { height: 46px; padding: 10px 16px; font-size: 18px; line-height: 1.33; border-radius: 6px; } select.input-lg { height: 46px; line-height: 46px; } textarea.input-lg, select[multiple].input-lg { height: auto; } .has-feedback { position: relative; } .has-feedback .form-control { padding-right: 42.5px; } .has-feedback .form-control-feedback { position: absolute; top: 25px; right: 0; display: block; width: 34px; height: 34px; line-height: 34px; text-align: center; } .has-success .help-block, .has-success .control-label, .has-success .radio, .has-success .checkbox, .has-success .radio-inline, .has-success .checkbox-inline { color: #3c763d; } .has-success .form-control { border-color: #3c763d; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } .has-success .form-control:focus { border-color: #2b542c; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; } .has-success .input-group-addon { color: #3c763d; border-color: #3c763d; background-color: #dff0d8; } .has-success .form-control-feedback { color: #3c763d; } .has-warning .help-block, .has-warning .control-label, .has-warning .radio, .has-warning .checkbox, .has-warning .radio-inline, .has-warning .checkbox-inline { color: #8a6d3b; } .has-warning .form-control { border-color: #8a6d3b; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } .has-warning .form-control:focus { border-color: #66512c; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; } .has-warning .input-group-addon { color: #8a6d3b; border-color: #8a6d3b; background-color: #fcf8e3; } .has-warning .form-control-feedback { color: #8a6d3b; } .has-error .help-block, .has-error .control-label, .has-error .radio, .has-error .checkbox, .has-error .radio-inline, .has-error .checkbox-inline { color: #a94442; } .has-error .form-control { border-color: #a94442; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } .has-error .form-control:focus { border-color: #843534; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; } .has-error .input-group-addon { color: #a94442; border-color: #a94442; background-color: #f2dede; } .has-error .form-control-feedback { color: #a94442; } .form-control-static { margin-bottom: 0; } .help-block { display: block; margin-top: 5px; margin-bottom: 10px; color: #737373; } @media (min-width: 768px) { .form-inline .form-group { display: inline-block; margin-bottom: 0; vertical-align: middle; } .form-inline .form-control { display: inline-block; width: auto; vertical-align: middle; } .form-inline .input-group > .form-control { width: 100%; } .form-inline .control-label { margin-bottom: 0; vertical-align: middle; font-weight: bold; } .form-inline .radio, .form-inline .checkbox { display: inline-block; margin-top: 0; margin-bottom: 0; padding-left: 0; vertical-align: middle; } .form-inline .radio input[type="radio"], .form-inline .checkbox input[type="checkbox"] { margin: 4px 8px 0 0; } .form-inline .radio label, .form-inline .checkbox label { float: right; margin: 0; } .form-inline .has-feedback .form-control-feedback { top: 0; } } .form-horizontal .control-label { font-weight: normal; } .form-horizontal .control-label, .form-horizontal .radio, .form-horizontal .checkbox, .form-horizontal .radio-inline, .form-horizontal .checkbox-inline { margin-top: 0; margin-bottom: 0; padding-top: 7px; } .form-horizontal .radio, .form-horizontal .checkbox { min-height: 27px; } .form-horizontal .form-group { margin-left: -15px; margin-right: -15px; } .form-horizontal .form-control-static { padding-top: 7px; } @media (min-width: 768px) { .form-horizontal .control-label { text-align: right; } } .form-horizontal .has-feedback .form-control-feedback { top: 0; right: 15px; } .form-block .form-group:before, .form-block .form-group:after { content: " "; display: table; } .form-block .form-group:after { clear: both; } .form-block .form-group:before, .form-block .form-group:after { content: " "; display: table; } .form-block .form-group:after { clear: both; } .form-block .control-label { display: block; font-weight: normal; font-size: 1.15em; } .form-group.disabled input, .form-group.disabled select { border-color: #ccc; background: #eee; } table { max-width: 100%; background-color: transparent; } th { text-align: left; } .table { width: 100%; margin-bottom: 20px; } .table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td { padding: 8px; line-height: 1.42857143; vertical-align: top; border-top: 1px solid #dddddd; } .table > thead > tr > th { vertical-align: bottom; border-bottom: 2px solid #dddddd; } .table > caption + thead > tr:first-child > th, .table > colgroup + thead > tr:first-child > th, .table > thead:first-child > tr:first-child > th, .table > caption + thead > tr:first-child > td, .table > colgroup + thead > tr:first-child > td, .table > thead:first-child > tr:first-child > td { border-top: 0; } .table > tbody + tbody { border-top: 2px solid #dddddd; } .table .table { background-color: #ffffff; } .table-condensed > thead > tr > th, .table-condensed > tbody > tr > th, .table-condensed > tfoot > tr > th, .table-condensed > thead > tr > td, .table-condensed > tbody > tr > td, .table-condensed > tfoot > tr > td { padding: 5px; } .table-bordered { border: 1px solid #dddddd; } .table-bordered > thead > tr > th, .table-bordered > tbody > tr > th, .table-bordered > tfoot > tr > th, .table-bordered > thead > tr > td, .table-bordered > tbody > tr > td, .table-bordered > tfoot > tr > td { border: 1px solid #dddddd; } .table-bordered > thead > tr > th, .table-bordered > thead > tr > td { border-bottom-width: 2px; } .table-striped > tbody > tr:nth-child(odd) > td, .table-striped > tbody > tr:nth-child(odd) > th { background-color: #f9f9f9; } .table-hover > tbody > tr:hover > td, .table-hover > tbody > tr:hover > th { background-color: #f5f5f5; } table col[class*="col-"] { position: static; float: none; display: table-column; } table td[class*="col-"], table th[class*="col-"] { position: static; float: none; display: table-cell; } .table > thead > tr > td.active, .table > tbody > tr > td.active, .table > tfoot > tr > td.active, .table > thead > tr > th.active, .table > tbody > tr > th.active, .table > tfoot > tr > th.active, .table > thead > tr.active > td, .table > tbody > tr.active > td, .table > tfoot > tr.active > td, .table > thead > tr.active > th, .table > tbody > tr.active > th, .table > tfoot > tr.active > th { background-color: #f5f5f5; } .table-hover > tbody > tr > td.active:hover, .table-hover > tbody > tr > th.active:hover, .table-hover > tbody > tr.active:hover > td, .table-hover > tbody > tr.active:hover > th { background-color: #e8e8e8; } .table > thead > tr > td.success, .table > tbody > tr > td.success, .table > tfoot > tr > td.success, .table > thead > tr > th.success, .table > tbody > tr > th.success, .table > tfoot > tr > th.success, .table > thead > tr.success > td, .table > tbody > tr.success > td, .table > tfoot > tr.success > td, .table > thead > tr.success > th, .table > tbody > tr.success > th, .table > tfoot > tr.success > th { background-color: #dff0d8; } .table-hover > tbody > tr > td.success:hover, .table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td, .table-hover > tbody > tr.success:hover > th { background-color: #d0e9c6; } .table > thead > tr > td.info, .table > tbody > tr > td.info, .table > tfoot > tr > td.info, .table > thead > tr > th.info, .table > tbody > tr > th.info, .table > tfoot > tr > th.info, .table > thead > tr.info > td, .table > tbody > tr.info > td, .table > tfoot > tr.info > td, .table > thead > tr.info > th, .table > tbody > tr.info > th, .table > tfoot > tr.info > th { background-color: #d9edf7; } .table-hover > tbody > tr > td.info:hover, .table-hover > tbody > tr > th.info:hover, .table-hover > tbody > tr.info:hover > td, .table-hover > tbody > tr.info:hover > th { background-color: #c4e3f3; } .table > thead > tr > td.warning, .table > tbody > tr > td.warning, .table > tfoot > tr > td.warning, .table > thead > tr > th.warning, .table > tbody > tr > th.warning, .table > tfoot > tr > th.warning, .table > thead > tr.warning > td, .table > tbody > tr.warning > td, .table > tfoot > tr.warning > td, .table > thead > tr.warning > th, .table > tbody > tr.warning > th, .table > tfoot > tr.warning > th { background-color: #fcf8e3; } .table-hover > tbody > tr > td.warning:hover, .table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td, .table-hover > tbody > tr.warning:hover > th { background-color: #faf2cc; } .table > thead > tr > td.danger, .table > tbody > tr > td.danger, .table > tfoot > tr > td.danger, .table > thead > tr > th.danger, .table > tbody > tr > th.danger, .table > tfoot > tr > th.danger, .table > thead > tr.danger > td, .table > tbody > tr.danger > td, .table > tfoot > tr.danger > td, .table > thead > tr.danger > th, .table > tbody > tr.danger > th, .table > tfoot > tr.danger > th { background-color: #f2dede; } .table-hover > tbody > tr > td.danger:hover, .table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr.danger:hover > th { background-color: #ebcccc; } @media (max-width: 767px) { .table-responsive { width: 100%; margin-bottom: 15px; overflow-y: hidden; overflow-x: scroll; -ms-overflow-style: -ms-autohiding-scrollbar; border: 1px solid #dddddd; -webkit-overflow-scrolling: touch; } .table-responsive > .table { margin-bottom: 0; } .table-responsive > .table > thead > tr > th, .table-responsive > .table > tbody > tr > th, .table-responsive > .table > tfoot > tr > th, .table-responsive > .table > thead > tr > td, .table-responsive > .table > tbody > tr > td, .table-responsive > .table > tfoot > tr > td { white-space: nowrap; } .table-responsive > .table-bordered { border: 0; } .table-responsive > .table-bordered > thead > tr > th:first-child, .table-responsive > .table-bordered > tbody > tr > th:first-child, .table-responsive > .table-bordered > tfoot > tr > th:first-child, .table-responsive > .table-bordered > thead > tr > td:first-child, .table-responsive > .table-bordered > tbody > tr > td:first-child, .table-responsive > .table-bordered > tfoot > tr > td:first-child { border-left: 0; } .table-responsive > .table-bordered > thead > tr > th:last-child, .table-responsive > .table-bordered > tbody > tr > th:last-child, .table-responsive > .table-bordered > tfoot > tr > th:last-child, .table-responsive > .table-bordered > thead > tr > td:last-child, .table-responsive > .table-bordered > tbody > tr > td:last-child, .table-responsive > .table-bordered > tfoot > tr > td:last-child { border-right: 0; } .table-responsive > .table-bordered > tbody > tr:last-child > th, .table-responsive > .table-bordered > tfoot > tr:last-child > th, .table-responsive > .table-bordered > tbody > tr:last-child > td, .table-responsive > .table-bordered > tfoot > tr:last-child > td { border-bottom: 0; } } code, kbd, pre, samp { font-family: Menlo, Monaco, Consolas, "Courier New", monospace; } code { padding: 2px 4px; font-size: 90%; color: #c7254e; background-color: #f9f2f4; white-space: nowrap; border-radius: 4px; } kbd { padding: 2px 4px; font-size: 90%; color: #ffffff; background-color: #333333; border-radius: 3px; box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); } pre { display: block; padding: 9.5px; margin: 0 0 10px; font-size: 13px; line-height: 1.42857143; word-break: break-all; word-wrap: break-word; color: #333333; background-color: #f5f5f5; border: 1px solid #cccccc; border-radius: 4px; } pre code { padding: 0; font-size: inherit; color: inherit; white-space: pre-wrap; background-color: transparent; border-radius: 0; } .pre-scrollable { max-height: 340px; overflow-y: scroll; } * { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } *:before, *:after { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } html { font-size: 62.5%; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } body { font-family: "OpenSansRegular", Helvetica, Arial, sans-serif; font-size: 14px; /*line-height: 1.42857143;*/ color: #333333; background-color: #f5f5f5; transition: font-size 0.3s; } input, button, select, textarea { font-family: inherit; font-size: inherit; line-height: inherit; } html, body { height: 100%; min-width: 320px; } .page-wrapper { /*min-height: 100%;*/ height: auto; margin: 0 auto -51px; /*padding: 30px 0 71px;*/ } .header-fixed + .page-wrapper { padding: 81px 0 71px; } .page-footer { height: 51px; } a { color: #333333; /*text-decoration: none;*/ } a:hover, a:focus { color: #0d0d0d; text-decoration: underline; } a:focus { outline: thin dotted; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } figure { margin: 0; } img { vertical-align: middle; } .img-responsive, .thumbnail > img, .thumbnail a > img, .carousel-inner > .item > img, .carousel-inner > .item > a > img { display: block; max-width: 100%; height: auto; } .img-rounded { border-radius: 6px; } .img-thumbnail { padding: 4px; line-height: 1.42857143; background-color: #ffffff; border: 1px solid #dddddd; border-radius: 4px; -webkit-transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out; display: inline-block; max-width: 100%; height: auto; } .img-circle { border-radius: 50%; } hr { margin-top: 20px; margin-bottom: 20px; border: 0; border-top: 1px solid #eeeeee; } .sr-only { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0, 0, 0, 0); border: 0; } .is-text-medium { font-size: 16px; } .is-text-large { font-size: 18px; } .is-contrast { color: #fff; background-color: #000; } .container, .container-xs { margin-right: auto; margin-left: auto; padding-left: 15px; padding-right: 15px; } @media (min-width: 768px) { .container, .container-xs { width: 750px; } } @media (min-width: 992px) { .container, .container-xs { width: 970px; } } @media (min-width: 1200px) { .container, .container-xs { width: 1170px; } } .container-sm { margin-right: auto; margin-left: auto; padding-left: 15px; padding-right: 15px; width: 750px; } @media (min-width: 992px) { .container-sm { width: 970px; } } @media (min-width: 1200px) { .container-sm { width: 1170px; } } .container-md { margin-right: auto; margin-left: auto; padding-left: 15px; padding-right: 15px; width: 970px; } @media (min-width: 1200px) { .container-md { width: 1170px; } } .container-lg { margin-right: auto; margin-left: auto; padding-left: 15px; padding-right: 15px; width: 1170px; } .container-fluid { margin-right: auto; margin-left: auto; padding-left: 15px; padding-right: 15px; } .row { margin-left: -15px; margin-right: -15px; } .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { position: relative; min-height: 1px; padding-left: 15px; padding-right: 15px; } .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { float: left; } .col-xs-12 { width: 100%; } .col-xs-11 { width: 91.66666667%; } .col-xs-10 { width: 83.33333333%; } .col-xs-9 { width: 75%; } .col-xs-8 { width: 66.66666667%; } .col-xs-7 { width: 58.33333333%; } .col-xs-6 { width: 50%; } .col-xs-5 { width: 41.66666667%; } .col-xs-4 { width: 33.33333333%; } .col-xs-3 { width: 25%; } .col-xs-2 { width: 16.66666667%; } .col-xs-1 { width: 8.33333333%; } .col-xs-pull-12 { right: 100%; } .col-xs-pull-11 { right: 91.66666667%; } .col-xs-pull-10 { right: 83.33333333%; } .col-xs-pull-9 { right: 75%; } .col-xs-pull-8 { right: 66.66666667%; } .col-xs-pull-7 { right: 58.33333333%; } .col-xs-pull-6 { right: 50%; } .col-xs-pull-5 { right: 41.66666667%; } .col-xs-pull-4 { right: 33.33333333%; } .col-xs-pull-3 { right: 25%; } .col-xs-pull-2 { right: 16.66666667%; } .col-xs-pull-1 { right: 8.33333333%; } .col-xs-pull-0 { right: 0%; } .col-xs-push-12 { left: 100%; } .col-xs-push-11 { left: 91.66666667%; } .col-xs-push-10 { left: 83.33333333%; } .col-xs-push-9 { left: 75%; } .col-xs-push-8 { left: 66.66666667%; } .col-xs-push-7 { left: 58.33333333%; } .col-xs-push-6 { left: 50%; } .col-xs-push-5 { left: 41.66666667%; } .col-xs-push-4 { left: 33.33333333%; } .col-xs-push-3 { left: 25%; } .col-xs-push-2 { left: 16.66666667%; } .col-xs-push-1 { left: 8.33333333%; } .col-xs-push-0 { left: 0%; } .col-xs-offset-12 { margin-left: 100%; } .col-xs-offset-11 { margin-left: 91.66666667%; } .col-xs-offset-10 { margin-left: 83.33333333%; } .col-xs-offset-9 { margin-left: 75%; } .col-xs-offset-8 { margin-left: 66.66666667%; } .col-xs-offset-7 { margin-left: 58.33333333%; } .col-xs-offset-6 { margin-left: 50%; } .col-xs-offset-5 { margin-left: 41.66666667%; } .col-xs-offset-4 { margin-left: 33.33333333%; } .col-xs-offset-3 { margin-left: 25%; } .col-xs-offset-2 { margin-left: 16.66666667%; } .col-xs-offset-1 { margin-left: 8.33333333%; } .col-xs-offset-0 { margin-left: 0%; } @media (min-width: 768px) { .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { float: left; } .col-sm-12 { width: 100%; } .col-sm-11 { width: 91.66666667%; } .col-sm-10 { width: 83.33333333%; } .col-sm-9 { width: 75%; } .col-sm-8 { width: 66.66666667%; } .col-sm-7 { width: 58.33333333%; } .col-sm-6 { width: 50%; } .col-sm-5 { width: 41.66666667%; } .col-sm-4 { width: 33.33333333%; } .col-sm-3 { width: 25%; } .col-sm-2 { width: 16.66666667%; } .col-sm-1 { width: 8.33333333%; } .col-sm-pull-12 { right: 100%; } .col-sm-pull-11 { right: 91.66666667%; } .col-sm-pull-10 { right: 83.33333333%; } .col-sm-pull-9 { right: 75%; } .col-sm-pull-8 { right: 66.66666667%; } .col-sm-pull-7 { right: 58.33333333%; } .col-sm-pull-6 { right: 50%; } .col-sm-pull-5 { right: 41.66666667%; } .col-sm-pull-4 { right: 33.33333333%; } .col-sm-pull-3 { right: 25%; } .col-sm-pull-2 { right: 16.66666667%; } .col-sm-pull-1 { right: 8.33333333%; } .col-sm-pull-0 { right: 0%; } .col-sm-push-12 { left: 100%; } .col-sm-push-11 { left: 91.66666667%; } .col-sm-push-10 { left: 83.33333333%; } .col-sm-push-9 { left: 75%; } .col-sm-push-8 { left: 66.66666667%; } .col-sm-push-7 { left: 58.33333333%; } .col-sm-push-6 { left: 50%; } .col-sm-push-5 { left: 41.66666667%; } .col-sm-push-4 { left: 33.33333333%; } .col-sm-push-3 { left: 25%; } .col-sm-push-2 { left: 16.66666667%; } .col-sm-push-1 { left: 8.33333333%; } .col-sm-push-0 { left: 0%; } .col-sm-offset-12 { margin-left: 100%; } .col-sm-offset-11 { margin-left: 91.66666667%; } .col-sm-offset-10 { margin-left: 83.33333333%; } .col-sm-offset-9 { margin-left: 75%; } .col-sm-offset-8 { margin-left: 66.66666667%; } .col-sm-offset-7 { margin-left: 58.33333333%; } .col-sm-offset-6 { margin-left: 50%; } .col-sm-offset-5 { margin-left: 41.66666667%; } .col-sm-offset-4 { margin-left: 33.33333333%; } .col-sm-offset-3 { margin-left: 25%; } .col-sm-offset-2 { margin-left: 16.66666667%; } .col-sm-offset-1 { margin-left: 8.33333333%; } .col-sm-offset-0 { margin-left: 0%; } } @media (min-width: 992px) { .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { float: left; } .col-md-12 { width: 100%; } .col-md-11 { width: 91.66666667%; } .col-md-10 { width: 83.33333333%; } .col-md-9 { width: 75%; } .col-md-8 { width: 66.66666667%; } .col-md-7 { width: 58.33333333%; } .col-md-6 { width: 50%; } .col-md-5 { width: 41.66666667%; } .col-md-4 { width: 33.33333333%; } .col-md-3 { width: 25%; } .col-md-2 { width: 16.66666667%; } .col-md-1 { width: 8.33333333%; } .col-md-pull-12 { right: 100%; } .col-md-pull-11 { right: 91.66666667%; } .col-md-pull-10 { right: 83.33333333%; } .col-md-pull-9 { right: 75%; } .col-md-pull-8 { right: 66.66666667%; } .col-md-pull-7 { right: 58.33333333%; } .col-md-pull-6 { right: 50%; } .col-md-pull-5 { right: 41.66666667%; } .col-md-pull-4 { right: 33.33333333%; } .col-md-pull-3 { right: 25%; } .col-md-pull-2 { right: 16.66666667%; } .col-md-pull-1 { right: 8.33333333%; } .col-md-pull-0 { right: 0%; } .col-md-push-12 { left: 100%; } .col-md-push-11 { left: 91.66666667%; } .col-md-push-10 { left: 83.33333333%; } .col-md-push-9 { left: 75%; } .col-md-push-8 { left: 66.66666667%; } .col-md-push-7 { left: 58.33333333%; } .col-md-push-6 { left: 50%; } .col-md-push-5 { left: 41.66666667%; } .col-md-push-4 { left: 33.33333333%; } .col-md-push-3 { left: 25%; } .col-md-push-2 { left: 16.66666667%; } .col-md-push-1 { left: 8.33333333%; } .col-md-push-0 { left: 0%; } .col-md-offset-12 { margin-left: 100%; } .col-md-offset-11 { margin-left: 91.66666667%; } .col-md-offset-10 { margin-left: 83.33333333%; } .col-md-offset-9 { margin-left: 75%; } .col-md-offset-8 { margin-left: 66.66666667%; } .col-md-offset-7 { margin-left: 58.33333333%; } .col-md-offset-6 { margin-left: 50%; } .col-md-offset-5 { margin-left: 41.66666667%; } .col-md-offset-4 { margin-left: 33.33333333%; } .col-md-offset-3 { margin-left: 25%; } .col-md-offset-2 { margin-left: 16.66666667%; } .col-md-offset-1 { margin-left: 8.33333333%; } .col-md-offset-0 { margin-left: 0%; } } @media (min-width: 1200px) { .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { float: left; } .col-lg-12 { width: 100%; } .col-lg-11 { width: 91.66666667%; } .col-lg-10 { width: 83.33333333%; } .col-lg-9 { width: 75%; } .col-lg-8 { width: 66.66666667%; } .col-lg-7 { width: 58.33333333%; } .col-lg-6 { width: 50%; } .col-lg-5 { width: 41.66666667%; } .col-lg-4 { width: 33.33333333%; } .col-lg-3 { width: 25%; } .col-lg-2 { width: 16.66666667%; } .col-lg-1 { width: 8.33333333%; } .col-lg-pull-12 { right: 100%; } .col-lg-pull-11 { right: 91.66666667%; } .col-lg-pull-10 { right: 83.33333333%; } .col-lg-pull-9 { right: 75%; } .col-lg-pull-8 { right: 66.66666667%; } .col-lg-pull-7 { right: 58.33333333%; } .col-lg-pull-6 { right: 50%; } .col-lg-pull-5 { right: 41.66666667%; } .col-lg-pull-4 { right: 33.33333333%; } .col-lg-pull-3 { right: 25%; } .col-lg-pull-2 { right: 16.66666667%; } .col-lg-pull-1 { right: 8.33333333%; } .col-lg-pull-0 { right: 0%; } .col-lg-push-12 { left: 100%; } .col-lg-push-11 { left: 91.66666667%; } .col-lg-push-10 { left: 83.33333333%; } .col-lg-push-9 { left: 75%; } .col-lg-push-8 { left: 66.66666667%; } .col-lg-push-7 { left: 58.33333333%; } .col-lg-push-6 { left: 50%; } .col-lg-push-5 { left: 41.66666667%; } .col-lg-push-4 { left: 33.33333333%; } .col-lg-push-3 { left: 25%; } .col-lg-push-2 { left: 16.66666667%; } .col-lg-push-1 { left: 8.33333333%; } .col-lg-push-0 { left: 0%; } .col-lg-offset-12 { margin-left: 100%; } .col-lg-offset-11 { margin-left: 91.66666667%; } .col-lg-offset-10 { margin-left: 83.33333333%; } .col-lg-offset-9 { margin-left: 75%; } .col-lg-offset-8 { margin-left: 66.66666667%; } .col-lg-offset-7 { margin-left: 58.33333333%; } .col-lg-offset-6 { margin-left: 50%; } .col-lg-offset-5 { margin-left: 41.66666667%; } .col-lg-offset-4 { margin-left: 33.33333333%; } .col-lg-offset-3 { margin-left: 25%; } .col-lg-offset-2 { margin-left: 16.66666667%; } .col-lg-offset-1 { margin-left: 8.33333333%; } .col-lg-offset-0 { margin-left: 0%; } } [dir="rtl"] .col-xs-1, [dir="rtl"] .col-xs-2, [dir="rtl"] .col-xs-3, [dir="rtl"] .col-xs-4, [dir="rtl"] .col-xs-5, [dir="rtl"] .col-xs-6, [dir="rtl"] .col-xs-7, [dir="rtl"] .col-xs-8, [dir="rtl"] .col-xs-9, [dir="rtl"] .col-xs-10, [dir="rtl"] .col-xs-11, [dir="rtl"] .col-xs-12 { float: right; } [dir="rtl"] .col-xs-12 { width: 100%; } [dir="rtl"] .col-xs-11 { width: 91.66666667%; } [dir="rtl"] .col-xs-10 { width: 83.33333333%; } [dir="rtl"] .col-xs-9 { width: 75%; } [dir="rtl"] .col-xs-8 { width: 66.66666667%; } [dir="rtl"] .col-xs-7 { width: 58.33333333%; } [dir="rtl"] .col-xs-6 { width: 50%; } [dir="rtl"] .col-xs-5 { width: 41.66666667%; } [dir="rtl"] .col-xs-4 { width: 33.33333333%; } [dir="rtl"] .col-xs-3 { width: 25%; } [dir="rtl"] .col-xs-2 { width: 16.66666667%; } [dir="rtl"] .col-xs-1 { width: 8.33333333%; } [dir="rtl"] .col-xs-pull-12 { left: 100%; right: auto; } [dir="rtl"] .col-xs-pull-11 { left: 91.66666667%; right: auto; } [dir="rtl"] .col-xs-pull-10 { left: 83.33333333%; right: auto; } [dir="rtl"] .col-xs-pull-9 { left: 75%; right: auto; } [dir="rtl"] .col-xs-pull-8 { left: 66.66666667%; right: auto; } [dir="rtl"] .col-xs-pull-7 { left: 58.33333333%; right: auto; } [dir="rtl"] .col-xs-pull-6 { left: 50%; right: auto; } [dir="rtl"] .col-xs-pull-5 { left: 41.66666667%; right: auto; } [dir="rtl"] .col-xs-pull-4 { left: 33.33333333%; right: auto; } [dir="rtl"] .col-xs-pull-3 { left: 25%; right: auto; } [dir="rtl"] .col-xs-pull-2 { left: 16.66666667%; right: auto; } [dir="rtl"] .col-xs-pull-1 { left: 8.33333333%; right: auto; } [dir="rtl"] .col-xs-pull-0 { left: 0%; right: auto; } [dir="rtl"] .col-xs-push-12 { right: 100%; left: auto; } [dir="rtl"] .col-xs-push-11 { right: 91.66666667%; left: auto; } [dir="rtl"] .col-xs-push-10 { right: 83.33333333%; left: auto; } [dir="rtl"] .col-xs-push-9 { right: 75%; left: auto; } [dir="rtl"] .col-xs-push-8 { right: 66.66666667%; left: auto; } [dir="rtl"] .col-xs-push-7 { right: 58.33333333%; left: auto; } [dir="rtl"] .col-xs-push-6 { right: 50%; left: auto; } [dir="rtl"] .col-xs-push-5 { right: 41.66666667%; left: auto; } [dir="rtl"] .col-xs-push-4 { right: 33.33333333%; left: auto; } [dir="rtl"] .col-xs-push-3 { right: 25%; left: auto; } [dir="rtl"] .col-xs-push-2 { right: 16.66666667%; left: auto; } [dir="rtl"] .col-xs-push-1 { right: 8.33333333%; left: auto; } [dir="rtl"] .col-xs-push-0 { right: 0%; left: auto; } [dir="rtl"] .col-xs-offset-12 { margin-right: 100%; margin-left: 0; } [dir="rtl"] .col-xs-offset-11 { margin-right: 91.66666667%; margin-left: 0; } [dir="rtl"] .col-xs-offset-10 { margin-right: 83.33333333%; margin-left: 0; } [dir="rtl"] .col-xs-offset-9 { margin-right: 75%; margin-left: 0; } [dir="rtl"] .col-xs-offset-8 { margin-right: 66.66666667%; margin-left: 0; } [dir="rtl"] .col-xs-offset-7 { margin-right: 58.33333333%; margin-left: 0; } [dir="rtl"] .col-xs-offset-6 { margin-right: 50%; margin-left: 0; } [dir="rtl"] .col-xs-offset-5 { margin-right: 41.66666667%; margin-left: 0; } [dir="rtl"] .col-xs-offset-4 { margin-right: 33.33333333%; margin-left: 0; } [dir="rtl"] .col-xs-offset-3 { margin-right: 25%; margin-left: 0; } [dir="rtl"] .col-xs-offset-2 { margin-right: 16.66666667%; margin-left: 0; } [dir="rtl"] .col-xs-offset-1 { margin-right: 8.33333333%; margin-left: 0; } [dir="rtl"] .col-xs-offset-0 { margin-right: 0%; margin-left: 0; } @media (min-width: 768px) { [dir="rtl"] .col-sm-1, [dir="rtl"] .col-sm-2, [dir="rtl"] .col-sm-3, [dir="rtl"] .col-sm-4, [dir="rtl"] .col-sm-5, [dir="rtl"] .col-sm-6, [dir="rtl"] .col-sm-7, [dir="rtl"] .col-sm-8, [dir="rtl"] .col-sm-9, [dir="rtl"] .col-sm-10, [dir="rtl"] .col-sm-11, [dir="rtl"] .col-sm-12 { float: right; } [dir="rtl"] .col-sm-12 { width: 100%; } [dir="rtl"] .col-sm-11 { width: 91.66666667%; } [dir="rtl"] .col-sm-10 { width: 83.33333333%; } [dir="rtl"] .col-sm-9 { width: 75%; } [dir="rtl"] .col-sm-8 { width: 66.66666667%; } [dir="rtl"] .col-sm-7 { width: 58.33333333%; } [dir="rtl"] .col-sm-6 { width: 50%; } [dir="rtl"] .col-sm-5 { width: 41.66666667%; } [dir="rtl"] .col-sm-4 { width: 33.33333333%; } [dir="rtl"] .col-sm-3 { width: 25%; } [dir="rtl"] .col-sm-2 { width: 16.66666667%; } [dir="rtl"] .col-sm-1 { width: 8.33333333%; } [dir="rtl"] .col-sm-pull-12 { left: 100%; right: auto; } [dir="rtl"] .col-sm-pull-11 { left: 91.66666667%; right: auto; } [dir="rtl"] .col-sm-pull-10 { left: 83.33333333%; right: auto; } [dir="rtl"] .col-sm-pull-9 { left: 75%; right: auto; } [dir="rtl"] .col-sm-pull-8 { left: 66.66666667%; right: auto; } [dir="rtl"] .col-sm-pull-7 { left: 58.33333333%; right: auto; } [dir="rtl"] .col-sm-pull-6 { left: 50%; right: auto; } [dir="rtl"] .col-sm-pull-5 { left: 41.66666667%; right: auto; } [dir="rtl"] .col-sm-pull-4 { left: 33.33333333%; right: auto; } [dir="rtl"] .col-sm-pull-3 { left: 25%; right: auto; } [dir="rtl"] .col-sm-pull-2 { left: 16.66666667%; right: auto; } [dir="rtl"] .col-sm-pull-1 { left: 8.33333333%; right: auto; } [dir="rtl"] .col-sm-pull-0 { left: 0%; right: auto; } [dir="rtl"] .col-sm-push-12 { right: 100%; left: auto; } [dir="rtl"] .col-sm-push-11 { right: 91.66666667%; left: auto; } [dir="rtl"] .col-sm-push-10 { right: 83.33333333%; left: auto; } [dir="rtl"] .col-sm-push-9 { right: 75%; left: auto; } [dir="rtl"] .col-sm-push-8 { right: 66.66666667%; left: auto; } [dir="rtl"] .col-sm-push-7 { right: 58.33333333%; left: auto; } [dir="rtl"] .col-sm-push-6 { right: 50%; left: auto; } [dir="rtl"] .col-sm-push-5 { right: 41.66666667%; left: auto; } [dir="rtl"] .col-sm-push-4 { right: 33.33333333%; left: auto; } [dir="rtl"] .col-sm-push-3 { right: 25%; left: auto; } [dir="rtl"] .col-sm-push-2 { right: 16.66666667%; left: auto; } [dir="rtl"] .col-sm-push-1 { right: 8.33333333%; left: auto; } [dir="rtl"] .col-sm-push-0 { right: 0%; left: auto; } [dir="rtl"] .col-sm-offset-12 { margin-right: 100%; margin-left: 0; } [dir="rtl"] .col-sm-offset-11 { margin-right: 91.66666667%; margin-left: 0; } [dir="rtl"] .col-sm-offset-10 { margin-right: 83.33333333%; margin-left: 0; } [dir="rtl"] .col-sm-offset-9 { margin-right: 75%; margin-left: 0; } [dir="rtl"] .col-sm-offset-8 { margin-right: 66.66666667%; margin-left: 0; } [dir="rtl"] .col-sm-offset-7 { margin-right: 58.33333333%; margin-left: 0; } [dir="rtl"] .col-sm-offset-6 { margin-right: 50%; margin-left: 0; } [dir="rtl"] .col-sm-offset-5 { margin-right: 41.66666667%; margin-left: 0; } [dir="rtl"] .col-sm-offset-4 { margin-right: 33.33333333%; margin-left: 0; } [dir="rtl"] .col-sm-offset-3 { margin-right: 25%; margin-left: 0; } [dir="rtl"] .col-sm-offset-2 { margin-right: 16.66666667%; margin-left: 0; } [dir="rtl"] .col-sm-offset-1 { margin-right: 8.33333333%; margin-left: 0; } [dir="rtl"] .col-sm-offset-0 { margin-right: 0%; margin-left: 0; } } @media (min-width: 992px) { [dir="rtl"] .col-md-1, [dir="rtl"] .col-md-2, [dir="rtl"] .col-md-3, [dir="rtl"] .col-md-4, [dir="rtl"] .col-md-5, [dir="rtl"] .col-md-6, [dir="rtl"] .col-md-7, [dir="rtl"] .col-md-8, [dir="rtl"] .col-md-9, [dir="rtl"] .col-md-10, [dir="rtl"] .col-md-11, [dir="rtl"] .col-md-12 { float: right; } [dir="rtl"] .col-md-12 { width: 100%; } [dir="rtl"] .col-md-11 { width: 91.66666667%; } [dir="rtl"] .col-md-10 { width: 83.33333333%; } [dir="rtl"] .col-md-9 { width: 75%; } [dir="rtl"] .col-md-8 { width: 66.66666667%; } [dir="rtl"] .col-md-7 { width: 58.33333333%; } [dir="rtl"] .col-md-6 { width: 50%; } [dir="rtl"] .col-md-5 { width: 41.66666667%; } [dir="rtl"] .col-md-4 { width: 33.33333333%; } [dir="rtl"] .col-md-3 { width: 25%; } [dir="rtl"] .col-md-2 { width: 16.66666667%; } [dir="rtl"] .col-md-1 { width: 8.33333333%; } [dir="rtl"] .col-md-pull-12 { left: 100%; right: auto; } [dir="rtl"] .col-md-pull-11 { left: 91.66666667%; right: auto; } [dir="rtl"] .col-md-pull-10 { left: 83.33333333%; right: auto; } [dir="rtl"] .col-md-pull-9 { left: 75%; right: auto; } [dir="rtl"] .col-md-pull-8 { left: 66.66666667%; right: auto; } [dir="rtl"] .col-md-pull-7 { left: 58.33333333%; right: auto; } [dir="rtl"] .col-md-pull-6 { left: 50%; right: auto; } [dir="rtl"] .col-md-pull-5 { left: 41.66666667%; right: auto; } [dir="rtl"] .col-md-pull-4 { left: 33.33333333%; right: auto; } [dir="rtl"] .col-md-pull-3 { left: 25%; right: auto; } [dir="rtl"] .col-md-pull-2 { left: 16.66666667%; right: auto; } [dir="rtl"] .col-md-pull-1 { left: 8.33333333%; right: auto; } [dir="rtl"] .col-md-pull-0 { left: 0%; right: auto; } [dir="rtl"] .col-md-push-12 { right: 100%; left: auto; } [dir="rtl"] .col-md-push-11 { right: 91.66666667%; left: auto; } [dir="rtl"] .col-md-push-10 { right: 83.33333333%; left: auto; } [dir="rtl"] .col-md-push-9 { right: 75%; left: auto; } [dir="rtl"] .col-md-push-8 { right: 66.66666667%; left: auto; } [dir="rtl"] .col-md-push-7 { right: 58.33333333%; left: auto; } [dir="rtl"] .col-md-push-6 { right: 50%; left: auto; } [dir="rtl"] .col-md-push-5 { right: 41.66666667%; left: auto; } [dir="rtl"] .col-md-push-4 { right: 33.33333333%; left: auto; } [dir="rtl"] .col-md-push-3 { right: 25%; left: auto; } [dir="rtl"] .col-md-push-2 { right: 16.66666667%; left: auto; } [dir="rtl"] .col-md-push-1 { right: 8.33333333%; left: auto; } [dir="rtl"] .col-md-push-0 { right: 0%; left: auto; } [dir="rtl"] .col-md-offset-12 { margin-right: 100%; margin-left: 0; } [dir="rtl"] .col-md-offset-11 { margin-right: 91.66666667%; margin-left: 0; } [dir="rtl"] .col-md-offset-10 { margin-right: 83.33333333%; margin-left: 0; } [dir="rtl"] .col-md-offset-9 { margin-right: 75%; margin-left: 0; } [dir="rtl"] .col-md-offset-8 { margin-right: 66.66666667%; margin-left: 0; } [dir="rtl"] .col-md-offset-7 { margin-right: 58.33333333%; margin-left: 0; } [dir="rtl"] .col-md-offset-6 { margin-right: 50%; margin-left: 0; } [dir="rtl"] .col-md-offset-5 { margin-right: 41.66666667%; margin-left: 0; } [dir="rtl"] .col-md-offset-4 { margin-right: 33.33333333%; margin-left: 0; } [dir="rtl"] .col-md-offset-3 { margin-right: 25%; margin-left: 0; } [dir="rtl"] .col-md-offset-2 { margin-right: 16.66666667%; margin-left: 0; } [dir="rtl"] .col-md-offset-1 { margin-right: 8.33333333%; margin-left: 0; } [dir="rtl"] .col-md-offset-0 { margin-right: 0%; margin-left: 0; } } @media (min-width: 1200px) { [dir="rtl"] .col-lg-1, [dir="rtl"] .col-lg-2, [dir="rtl"] .col-lg-3, [dir="rtl"] .col-lg-4, [dir="rtl"] .col-lg-5, [dir="rtl"] .col-lg-6, [dir="rtl"] .col-lg-7, [dir="rtl"] .col-lg-8, [dir="rtl"] .col-lg-9, [dir="rtl"] .col-lg-10, [dir="rtl"] .col-lg-11, [dir="rtl"] .col-lg-12 { float: right; } [dir="rtl"] .col-lg-12 { width: 100%; } [dir="rtl"] .col-lg-11 { width: 91.66666667%; } [dir="rtl"] .col-lg-10 { width: 83.33333333%; } [dir="rtl"] .col-lg-9 { width: 75%; } [dir="rtl"] .col-lg-8 { width: 66.66666667%; } [dir="rtl"] .col-lg-7 { width: 58.33333333%; } [dir="rtl"] .col-lg-6 { width: 50%; } [dir="rtl"] .col-lg-5 { width: 41.66666667%; } [dir="rtl"] .col-lg-4 { width: 33.33333333%; } [dir="rtl"] .col-lg-3 { width: 25%; } [dir="rtl"] .col-lg-2 { width: 16.66666667%; } [dir="rtl"] .col-lg-1 { width: 8.33333333%; } [dir="rtl"] .col-lg-pull-12 { left: 100%; right: auto; } [dir="rtl"] .col-lg-pull-11 { left: 91.66666667%; right: auto; } [dir="rtl"] .col-lg-pull-10 { left: 83.33333333%; right: auto; } [dir="rtl"] .col-lg-pull-9 { left: 75%; right: auto; } [dir="rtl"] .col-lg-pull-8 { left: 66.66666667%; right: auto; } [dir="rtl"] .col-lg-pull-7 { left: 58.33333333%; right: auto; } [dir="rtl"] .col-lg-pull-6 { left: 50%; right: auto; } [dir="rtl"] .col-lg-pull-5 { left: 41.66666667%; right: auto; } [dir="rtl"] .col-lg-pull-4 { left: 33.33333333%; right: auto; } [dir="rtl"] .col-lg-pull-3 { left: 25%; right: auto; } [dir="rtl"] .col-lg-pull-2 { left: 16.66666667%; right: auto; } [dir="rtl"] .col-lg-pull-1 { left: 8.33333333%; right: auto; } [dir="rtl"] .col-lg-pull-0 { left: 0%; right: auto; } [dir="rtl"] .col-lg-push-12 { right: 100%; left: auto; } [dir="rtl"] .col-lg-push-11 { right: 91.66666667%; left: auto; } [dir="rtl"] .col-lg-push-10 { right: 83.33333333%; left: auto; } [dir="rtl"] .col-lg-push-9 { right: 75%; left: auto; } [dir="rtl"] .col-lg-push-8 { right: 66.66666667%; left: auto; } [dir="rtl"] .col-lg-push-7 { right: 58.33333333%; left: auto; } [dir="rtl"] .col-lg-push-6 { right: 50%; left: auto; } [dir="rtl"] .col-lg-push-5 { right: 41.66666667%; left: auto; } [dir="rtl"] .col-lg-push-4 { right: 33.33333333%; left: auto; } [dir="rtl"] .col-lg-push-3 { right: 25%; left: auto; } [dir="rtl"] .col-lg-push-2 { right: 16.66666667%; left: auto; } [dir="rtl"] .col-lg-push-1 { right: 8.33333333%; left: auto; } [dir="rtl"] .col-lg-push-0 { right: 0%; left: auto; } [dir="rtl"] .col-lg-offset-12 { margin-right: 100%; margin-left: 0; } [dir="rtl"] .col-lg-offset-11 { margin-right: 91.66666667%; margin-left: 0; } [dir="rtl"] .col-lg-offset-10 { margin-right: 83.33333333%; margin-left: 0; } [dir="rtl"] .col-lg-offset-9 { margin-right: 75%; margin-left: 0; } [dir="rtl"] .col-lg-offset-8 { margin-right: 66.66666667%; margin-left: 0; } [dir="rtl"] .col-lg-offset-7 { margin-right: 58.33333333%; margin-left: 0; } [dir="rtl"] .col-lg-offset-6 { margin-right: 50%; margin-left: 0; } [dir="rtl"] .col-lg-offset-5 { margin-right: 41.66666667%; margin-left: 0; } [dir="rtl"] .col-lg-offset-4 { margin-right: 33.33333333%; margin-left: 0; } [dir="rtl"] .col-lg-offset-3 { margin-right: 25%; margin-left: 0; } [dir="rtl"] .col-lg-offset-2 { margin-right: 16.66666667%; margin-left: 0; } [dir="rtl"] .col-lg-offset-1 { margin-right: 8.33333333%; margin-left: 0; } [dir="rtl"] .col-lg-offset-0 { margin-right: 0%; margin-left: 0; } } [dir="rtl"] .w-row > [class^="w-"] { float: right; } .fade { opacity: 0; -webkit-transition: opacity 0.15s linear; transition: opacity 0.15s linear; } .fade.in { opacity: 1; } .collapse { display: none; } .collapse.in { display: block; } .collapsing { position: relative; height: 0; overflow: hidden; -webkit-transition: height 0.35s ease; transition: height 0.35s ease; } @font-face { font-family: 'Glyphicons Halflings'; src: url('../assets/fonts/glyphicons-halflings-regular.eot'); src: url('../assets/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../assets/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../assets/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../assets/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); } .glyphicon { position: relative; top: 1px; display: inline-block; font-family: 'Glyphicons Halflings'; font-style: normal; font-weight: normal; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .glyphicon-asterisk:before { content: "\2a"; } .glyphicon-plus:before { content: "\2b"; } .glyphicon-euro:before { content: "\20ac"; } .glyphicon-minus:before { content: "\2212"; } .glyphicon-cloud:before { content: "\2601"; } .glyphicon-envelope:before { content: "\2709"; } .glyphicon-pencil:before { content: "\270f"; } .glyphicon-glass:before { content: "\e001"; } .glyphicon-music:before { content: "\e002"; } .glyphicon-search:before { content: "\e003"; } .glyphicon-heart:before { content: "\e005"; } .glyphicon-star:before { content: "\e006"; } .glyphicon-star-empty:before { content: "\e007"; } .glyphicon-user:before { content: "\e008"; } .glyphicon-film:before { content: "\e009"; } .glyphicon-th-large:before { content: "\e010"; } .glyphicon-th:before { content: "\e011"; } .glyphicon-th-list:before { content: "\e012"; } .glyphicon-ok:before { content: "\e013"; } .glyphicon-remove:before { content: "\e014"; } .glyphicon-zoom-in:before { content: "\e015"; } .glyphicon-zoom-out:before { content: "\e016"; } .glyphicon-off:before { content: "\e017"; } .glyphicon-signal:before { content: "\e018"; } .glyphicon-cog:before { content: "\e019"; } .glyphicon-trash:before { content: "\e020"; } .glyphicon-home:before { content: "\e021"; } .glyphicon-file:before { content: "\e022"; } .glyphicon-time:before { content: "\e023"; } .glyphicon-road:before { content: "\e024"; } .glyphicon-download-alt:before { content: "\e025"; } .glyphicon-download:before { content: "\e026"; } .glyphicon-upload:before { content: "\e027"; } .glyphicon-inbox:before { content: "\e028"; } .glyphicon-play-circle:before { content: "\e029"; } .glyphicon-repeat:before { content: "\e030"; } .glyphicon-refresh:before { content: "\e031"; } .glyphicon-list-alt:before { content: "\e032"; } .glyphicon-lock:before { content: "\e033"; } .glyphicon-flag:before { content: "\e034"; } .glyphicon-headphones:before { content: "\e035"; } .glyphicon-volume-off:before { content: "\e036"; } .glyphicon-volume-down:before { content: "\e037"; } .glyphicon-volume-up:before { content: "\e038"; } .glyphicon-qrcode:before { content: "\e039"; } .glyphicon-barcode:before { content: "\e040"; } .glyphicon-tag:before { content: "\e041"; } .glyphicon-tags:before { content: "\e042"; } .glyphicon-book:before { content: "\e043"; } .glyphicon-bookmark:before { content: "\e044"; } .glyphicon-print:before { content: "\e045"; } .glyphicon-camera:before { content: "\e046"; } .glyphicon-font:before { content: "\e047"; } .glyphicon-bold:before { content: "\e048"; } .glyphicon-italic:before { content: "\e049"; } .glyphicon-text-height:before { content: "\e050"; } .glyphicon-text-width:before { content: "\e051"; } .glyphicon-align-left:before { content: "\e052"; } .glyphicon-align-center:before { content: "\e053"; } .glyphicon-align-right:before { content: "\e054"; } .glyphicon-align-justify:before { content: "\e055"; } .glyphicon-list:before { content: "\e056"; } .glyphicon-indent-left:before { content: "\e057"; } .glyphicon-indent-right:before { content: "\e058"; } .glyphicon-facetime-video:before { content: "\e059"; } .glyphicon-picture:before { content: "\e060"; } .glyphicon-map-marker:before { content: "\e062"; } .glyphicon-adjust:before { content: "\e063"; } .glyphicon-tint:before { content: "\e064"; } .glyphicon-edit:before { content: "\e065"; } .glyphicon-share:before { content: "\e066"; } .glyphicon-check:before { content: "\e067"; } .glyphicon-move:before { content: "\e068"; } .glyphicon-step-backward:before { content: "\e069"; } .glyphicon-fast-backward:before { content: "\e070"; } .glyphicon-backward:before { content: "\e071"; } .glyphicon-play:before { content: "\e072"; } .glyphicon-pause:before { content: "\e073"; } .glyphicon-stop:before { content: "\e074"; } .glyphicon-forward:before { content: "\e075"; } .glyphicon-fast-forward:before { content: "\e076"; } .glyphicon-step-forward:before { content: "\e077"; } .glyphicon-eject:before { content: "\e078"; } .glyphicon-chevron-left:before { content: "\e079"; } .glyphicon-chevron-right:before { content: "\e080"; } .glyphicon-plus-sign:before { content: "\e081"; } .glyphicon-minus-sign:before { content: "\e082"; } .glyphicon-remove-sign:before { content: "\e083"; } .glyphicon-ok-sign:before { content: "\e084"; } .glyphicon-question-sign:before { content: "\e085"; } .glyphicon-info-sign:before { content: "\e086"; } .glyphicon-screenshot:before { content: "\e087"; } .glyphicon-remove-circle:before { content: "\e088"; } .glyphicon-ok-circle:before { content: "\e089"; } .glyphicon-ban-circle:before { content: "\e090"; } .glyphicon-arrow-left:before { content: "\e091"; } .glyphicon-arrow-right:before { content: "\e092"; } .glyphicon-arrow-up:before { content: "\e093"; } .glyphicon-arrow-down:before { content: "\e094"; } .glyphicon-share-alt:before { content: "\e095"; } .glyphicon-resize-full:before { content: "\e096"; } .glyphicon-resize-small:before { content: "\e097"; } .glyphicon-exclamation-sign:before { content: "\e101"; } .glyphicon-gift:before { content: "\e102"; } .glyphicon-leaf:before { content: "\e103"; } .glyphicon-fire:before { content: "\e104"; } .glyphicon-eye-open:before { content: "\e105"; } .glyphicon-eye-close:before { content: "\e106"; } .glyphicon-warning-sign:before { content: "\e107"; } .glyphicon-plane:before { content: "\e108"; } .glyphicon-calendar:before { content: "\e109"; } .glyphicon-random:before { content: "\e110"; } .glyphicon-comment:before { content: "\e111"; } .glyphicon-magnet:before { content: "\e112"; } .glyphicon-chevron-up:before { content: "\e113"; } .glyphicon-chevron-down:before { content: "\e114"; } .glyphicon-retweet:before { content: "\e115"; } .glyphicon-shopping-cart:before { content: "\e116"; } .glyphicon-folder-close:before { content: "\e117"; } .glyphicon-folder-open:before { content: "\e118"; } .glyphicon-resize-vertical:before { content: "\e119"; } .glyphicon-resize-horizontal:before { content: "\e120"; } .glyphicon-hdd:before { content: "\e121"; } .glyphicon-bullhorn:before { content: "\e122"; } .glyphicon-bell:before { content: "\e123"; } .glyphicon-certificate:before { content: "\e124"; } .glyphicon-thumbs-up:before { content: "\e125"; } .glyphicon-thumbs-down:before { content: "\e126"; } .glyphicon-hand-right:before { content: "\e127"; } .glyphicon-hand-left:before { content: "\e128"; } .glyphicon-hand-up:before { content: "\e129"; } .glyphicon-hand-down:before { content: "\e130"; } .glyphicon-circle-arrow-right:before { content: "\e131"; } .glyphicon-circle-arrow-left:before { content: "\e132"; } .glyphicon-circle-arrow-up:before { content: "\e133"; } .glyphicon-circle-arrow-down:before { content: "\e134"; } .glyphicon-globe:before { content: "\e135"; } .glyphicon-wrench:before { content: "\e136"; } .glyphicon-tasks:before { content: "\e137"; } .glyphicon-filter:before { content: "\e138"; } .glyphicon-briefcase:before { content: "\e139"; } .glyphicon-fullscreen:before { content: "\e140"; } .glyphicon-dashboard:before { content: "\e141"; } .glyphicon-paperclip:before { content: "\e142"; } .glyphicon-heart-empty:before { content: "\e143"; } .glyphicon-link:before { content: "\e144"; } .glyphicon-phone:before { content: "\e145"; } .glyphicon-pushpin:before { content: "\e146"; } .glyphicon-usd:before { content: "\e148"; } .glyphicon-gbp:before { content: "\e149"; } .glyphicon-sort:before { content: "\e150"; } .glyphicon-sort-by-alphabet:before { content: "\e151"; } .glyphicon-sort-by-alphabet-alt:before { content: "\e152"; } .glyphicon-sort-by-order:before { content: "\e153"; } .glyphicon-sort-by-order-alt:before { content: "\e154"; } .glyphicon-sort-by-attributes:before { content: "\e155"; } .glyphicon-sort-by-attributes-alt:before { content: "\e156"; } .glyphicon-unchecked:before { content: "\e157"; } .glyphicon-expand:before { content: "\e158"; } .glyphicon-collapse-down:before { content: "\e159"; } .glyphicon-collapse-up:before { content: "\e160"; } .glyphicon-log-in:before { content: "\e161"; } .glyphicon-flash:before { content: "\e162"; } .glyphicon-log-out:before { content: "\e163"; } .glyphicon-new-window:before { content: "\e164"; } .glyphicon-record:before { content: "\e165"; } .glyphicon-save:before { content: "\e166"; } .glyphicon-open:before { content: "\e167"; } .glyphicon-saved:before { content: "\e168"; } .glyphicon-import:before { content: "\e169"; } .glyphicon-export:before { content: "\e170"; } .glyphicon-send:before { content: "\e171"; } .glyphicon-floppy-disk:before { content: "\e172"; } .glyphicon-floppy-saved:before { content: "\e173"; } .glyphicon-floppy-remove:before { content: "\e174"; } .glyphicon-floppy-save:before { content: "\e175"; } .glyphicon-floppy-open:before { content: "\e176"; } .glyphicon-credit-card:before { content: "\e177"; } .glyphicon-transfer:before { content: "\e178"; } .glyphicon-cutlery:before { content: "\e179"; } .glyphicon-header:before { content: "\e180"; } .glyphicon-compressed:before { content: "\e181"; } .glyphicon-earphone:before { content: "\e182"; } .glyphicon-phone-alt:before { content: "\e183"; } .glyphicon-tower:before { content: "\e184"; } .glyphicon-stats:before { content: "\e185"; } .glyphicon-sd-video:before { content: "\e186"; } .glyphicon-hd-video:before { content: "\e187"; } .glyphicon-subtitles:before { content: "\e188"; } .glyphicon-sound-stereo:before { content: "\e189"; } .glyphicon-sound-dolby:before { content: "\e190"; } .glyphicon-sound-5-1:before { content: "\e191"; } .glyphicon-sound-6-1:before { content: "\e192"; } .glyphicon-sound-7-1:before { content: "\e193"; } .glyphicon-copyright-mark:before { content: "\e194"; } .glyphicon-registration-mark:before { content: "\e195"; } .glyphicon-cloud-download:before { content: "\e197"; } .glyphicon-cloud-upload:before { content: "\e198"; } .glyphicon-tree-conifer:before { content: "\e199"; } .glyphicon-tree-deciduous:before { content: "\e200"; } .caret { display: inline-block; width: 0; height: 0; margin-left: 2px; vertical-align: middle; border-top: 4px solid; border-right: 4px solid transparent; border-left: 4px solid transparent; } .dropdown { position: relative; } .dropdown-toggle:focus { outline: 0; } .dropdown-menu { position: absolute; top: 100%; left: 0; z-index: 1000; display: none; float: left; min-width: 160px; padding: 5px 0; margin: 2px 0 0; list-style: none; font-size: 14px; background-color: #ffffff; border: 1px solid #cccccc; border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 4px; -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); background-clip: padding-box; } .dropdown-menu.pull-right { right: 0; left: auto; } .dropdown-menu .divider { height: 1px; margin: 9px 0; overflow: hidden; background-color: #e5e5e5; } .dropdown-menu > li > a { display: block; padding: 3px 20px; clear: both; font-weight: normal; line-height: 1.42857143; color: #333333; white-space: nowrap; } .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { text-decoration: none; color: #262626; background-color: #f5f5f5; } .dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { color: #ffffff; text-decoration: none; outline: 0; background-color: #c25252; } .dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { color: #999999; } .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { text-decoration: none; background-color: transparent; background-image: none; filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); cursor: not-allowed; } .open > .dropdown-menu { display: block; } .open > a { outline: 0; } .dropdown-menu-right { left: auto; right: 0; } .dropdown-menu-left { left: 0; right: auto; } .dropdown-header { display: block; padding: 3px 20px; font-size: 12px; line-height: 1.42857143; color: #999999; } .dropdown-backdrop { position: fixed; left: 0; right: 0; bottom: 0; top: 0; z-index: 990; } .pull-right > .dropdown-menu { right: 0; left: auto; } .dropup .caret, .navbar-fixed-bottom .dropdown .caret { border-top: 0; border-bottom: 4px solid; content: ""; } .dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { top: auto; bottom: 100%; margin-bottom: 1px; } @media (min-width: 768px) { .navbar-right .dropdown-menu { left: auto; right: 0; } .navbar-right .dropdown-menu-left { left: 0; right: auto; } } .btn-group, .btn-group-vertical { position: relative; display: inline-block; vertical-align: middle; } .btn-group > .btn, .btn-group-vertical > .btn { position: relative; float: left; } .btn-group > .btn:hover, .btn-group-vertical > .btn:hover, .btn-group > .btn:focus, .btn-group-vertical > .btn:focus, .btn-group > .btn:active, .btn-group-vertical > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn.active { z-index: 2; } .btn-group > .btn:focus, .btn-group-vertical > .btn:focus { outline: none; } .btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group { margin-left: -1px; } .btn-toolbar { margin-left: -5px; } .btn-toolbar .btn-group, .btn-toolbar .input-group { float: left; } .btn-toolbar > .btn, .btn-toolbar > .btn-group, .btn-toolbar > .input-group { margin-left: 5px; } .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { border-radius: 0; } .btn-group > .btn:first-child { margin-left: 0; } .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { border-bottom-right-radius: 0; border-top-right-radius: 0; } .btn-group > .btn:last-child:not(:first-child), .btn-group > .dropdown-toggle:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; } .btn-group > .btn-group { float: left; } .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { border-radius: 0; } .btn-group > .btn-group:first-child > .btn:last-child, .btn-group > .btn-group:first-child > .dropdown-toggle { border-bottom-right-radius: 0; border-top-right-radius: 0; } .btn-group > .btn-group:last-child > .btn:first-child { border-bottom-left-radius: 0; border-top-left-radius: 0; } .btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { outline: 0; } .btn-group > .btn + .dropdown-toggle { padding-left: 8px; padding-right: 8px; } .btn-group > .btn-lg + .dropdown-toggle { padding-left: 12px; padding-right: 12px; } .btn-group.open .dropdown-toggle { -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } .btn-group.open .dropdown-toggle.btn-link { -webkit-box-shadow: none; box-shadow: none; } .btn .caret { margin-left: 0; } .btn-lg .caret { border-width: 5px 5px 0; border-bottom-width: 0; } .dropup .btn-lg .caret { border-width: 0 5px 5px; } .btn-group-vertical > .btn, .btn-group-vertical > .btn-group, .btn-group-vertical > .btn-group > .btn { display: block; float: none; width: 100%; max-width: 100%; } .btn-group-vertical > .btn-group > .btn { float: none; } .btn-group-vertical > .btn + .btn, .btn-group-vertical > .btn + .btn-group, .btn-group-vertical > .btn-group + .btn, .btn-group-vertical > .btn-group + .btn-group { margin-top: -1px; margin-left: 0; } .btn-group-vertical > .btn:not(:first-child):not(:last-child) { border-radius: 0; } .btn-group-vertical > .btn:first-child:not(:last-child) { border-top-right-radius: 4px; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .btn-group-vertical > .btn:last-child:not(:first-child) { border-bottom-left-radius: 4px; border-top-right-radius: 0; border-top-left-radius: 0; } .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { border-radius: 0; } .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { border-top-right-radius: 0; border-top-left-radius: 0; } .btn-group-justified { display: table; width: 100%; table-layout: fixed; border-collapse: separate; } .btn-group-justified > .btn, .btn-group-justified > .btn-group { float: none; display: table-cell; width: 1%; } .btn-group-justified > .btn-group .btn { width: 100%; } [data-toggle="buttons"] > .btn > input[type="radio"], [data-toggle="buttons"] > .btn > input[type="checkbox"] { display: none; } .input-group { position: relative; display: table; border-collapse: separate; } .input-group[class*="col-"] { float: none; padding-left: 0; padding-right: 0; } .input-group .form-control { position: relative; z-index: 2; float: left; width: 100%; margin-bottom: 0; } .input-group-lg > .form-control, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .btn { height: 46px; padding: 10px 16px; font-size: 18px; line-height: 1.33; border-radius: 6px; } select.input-group-lg > .form-control, select.input-group-lg > .input-group-addon, select.input-group-lg > .input-group-btn > .btn { height: 46px; line-height: 46px; } textarea.input-group-lg > .form-control, textarea.input-group-lg > .input-group-addon, textarea.input-group-lg > .input-group-btn > .btn, select[multiple].input-group-lg > .form-control, select[multiple].input-group-lg > .input-group-addon, select[multiple].input-group-lg > .input-group-btn > .btn { height: auto; } .input-group-sm > .form-control, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .btn { height: 30px; padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px; } select.input-group-sm > .form-control, select.input-group-sm > .input-group-addon, select.input-group-sm > .input-group-btn > .btn { height: 30px; line-height: 30px; } textarea.input-group-sm > .form-control, textarea.input-group-sm > .input-group-addon, textarea.input-group-sm > .input-group-btn > .btn, select[multiple].input-group-sm > .form-control, select[multiple].input-group-sm > .input-group-addon, select[multiple].input-group-sm > .input-group-btn > .btn { height: auto; } .input-group-addon, .input-group-btn, .input-group .form-control { display: table-cell; } .input-group-addon:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child), .input-group .form-control:not(:first-child):not(:last-child) { border-radius: 0; } .input-group-addon, .input-group-btn { width: 1%; white-space: nowrap; vertical-align: middle; } .input-group-addon { padding: 6px 12px; font-size: 14px; font-weight: normal; line-height: 1; color: #5a5a5a; text-align: center; background-color: #eeeeee; border: 1px solid #cccccc; border-radius: 4px; } .input-group-addon.input-sm { padding: 5px 10px; font-size: 12px; border-radius: 3px; } .input-group-addon.input-lg { padding: 10px 16px; font-size: 18px; border-radius: 6px; } .input-group-addon input[type="radio"], .input-group-addon input[type="checkbox"] { margin-top: 0; } .input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group > .btn, .input-group-btn:first-child > .dropdown-toggle, .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), .input-group-btn:last-child > .btn-group:not(:last-child) > .btn { border-bottom-right-radius: 0; border-top-right-radius: 0; } .input-group-addon:first-child { border-right: 0; } .input-group .form-control:last-child, .input-group-addon:last-child, .input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group > .btn, .input-group-btn:last-child > .dropdown-toggle, .input-group-btn:first-child > .btn:not(:first-child), .input-group-btn:first-child > .btn-group:not(:first-child) > .btn { border-bottom-left-radius: 0; border-top-left-radius: 0; } .input-group-addon:last-child { border-left: 0; } .input-group-btn { position: relative; font-size: 0; white-space: nowrap; } .input-group-btn > .btn { position: relative; } .input-group-btn > .btn + .btn { margin-left: -1px; } .input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active { z-index: 2; } .input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group { margin-right: -1px; } .input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group { margin-left: -1px; } .nav { margin-bottom: 0; padding-left: 0; list-style: none; } .nav > li { position: relative; display: block; } .nav > li > a { position: relative; display: block; padding: 10px 15px; } .nav > li > a:hover, .nav > li > a:focus { text-decoration: none; background-color: #eeeeee; } .nav > li.disabled > a { color: #999999; } .nav > li.disabled > a:hover, .nav > li.disabled > a:focus { color: #999999; text-decoration: none; background-color: transparent; cursor: not-allowed; } .nav .open > a, .nav .open > a:hover, .nav .open > a:focus { background-color: #eeeeee; border-color: #333333; } .nav .nav-divider { height: 1px; margin: 9px 0; overflow: hidden; background-color: #e5e5e5; } .nav > li > a > img { max-width: none; } .nav-tabs { border-bottom: 1px solid #dddddd; } .nav-tabs > li { float: left; margin-bottom: -1px; } .nav-tabs > li > a { margin-right: 2px; line-height: 1.42857143; border: 1px solid transparent; border-radius: 4px 4px 0 0; } .nav-tabs > li > a:hover { border-color: #eeeeee #eeeeee #dddddd; } .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { color: #5a5a5a; background-color: #ffffff; border: 1px solid #dddddd; border-bottom-color: transparent; cursor: default; } .nav-tabs.nav-justified { width: 100%; border-bottom: 0; } .nav-tabs.nav-justified > li { float: none; } .nav-tabs.nav-justified > li > a { text-align: center; margin-bottom: 5px; } .nav-tabs.nav-justified > .dropdown .dropdown-menu { top: auto; left: auto; } @media (min-width: 768px) { .nav-tabs.nav-justified > li { display: table-cell; width: 1%; } .nav-tabs.nav-justified > li > a { margin-bottom: 0; } } .nav-tabs.nav-justified > li > a { margin-right: 0; border-radius: 4px; } .nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus { border: 1px solid #dddddd; } @media (min-width: 768px) { .nav-tabs.nav-justified > li > a { border-bottom: 1px solid #dddddd; border-radius: 4px 4px 0 0; } .nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus { border-bottom-color: #ffffff; } } .nav-pills > li { float: left; } .nav-pills > li > a { border-radius: 4px; } .nav-pills > li + li { margin-left: 2px; } .nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus { color: #ffffff; background-color: #c25252; } .nav-stacked > li { float: none; } .nav-stacked > li + li { margin-top: 2px; margin-left: 0; } .nav-justified { width: 100%; } .nav-justified > li { float: none; } .nav-justified > li > a { text-align: center; margin-bottom: 5px; } .nav-justified > .dropdown .dropdown-menu { top: auto; left: auto; } @media (min-width: 768px) { .nav-justified > li { display: table-cell; width: 1%; } .nav-justified > li > a { margin-bottom: 0; } } .nav-tabs-justified { border-bottom: 0; } .nav-tabs-justified > li > a { margin-right: 0; border-radius: 4px; } .nav-tabs-justified > .active > a, .nav-tabs-justified > .active > a:hover, .nav-tabs-justified > .active > a:focus { border: 1px solid #dddddd; } @media (min-width: 768px) { .nav-tabs-justified > li > a { border-bottom: 1px solid #dddddd; border-radius: 4px 4px 0 0; } .nav-tabs-justified > .active > a, .nav-tabs-justified > .active > a:hover, .nav-tabs-justified > .active > a:focus { border-bottom-color: #ffffff; } } .tab-content > .tab-pane { display: none; } .tab-content > .active { display: block; } .nav-tabs .dropdown-menu { margin-top: -1px; border-top-right-radius: 0; border-top-left-radius: 0; } .navbar { position: relative; min-height: 50px; margin-bottom: 20px; border: 1px solid transparent; } @media (min-width: 768px) { .navbar { border-radius: 4px; } } @media (min-width: 768px) { .navbar-header { float: left; } } .navbar-collapse { max-height: 340px; overflow-x: visible; padding-right: 15px; padding-left: 15px; border-top: 1px solid transparent; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); -webkit-overflow-scrolling: touch; } .navbar-collapse.in { overflow-y: auto; } @media (min-width: 768px) { .navbar-collapse { width: auto; border-top: 0; box-shadow: none; } .navbar-collapse.collapse { display: block !important; height: auto !important; padding-bottom: 0; overflow: visible !important; } .navbar-collapse.in { overflow-y: visible; } .navbar-fixed-top .navbar-collapse, .navbar-static-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { padding-left: 0; padding-right: 0; } } .container > .navbar-header, .container-fluid > .navbar-header, .container > .navbar-collapse, .container-fluid > .navbar-collapse { margin-right: -15px; margin-left: -15px; } @media (min-width: 768px) { .container > .navbar-header, .container-fluid > .navbar-header, .container > .navbar-collapse, .container-fluid > .navbar-collapse { margin-right: 0; margin-left: 0; } } .navbar-static-top { z-index: 1000; border-width: 0 0 1px; } @media (min-width: 768px) { .navbar-static-top { border-radius: 0; } } .navbar-fixed-top, .navbar-fixed-bottom { position: fixed; right: 0; left: 0; z-index: 1030; } @media (min-width: 768px) { .navbar-fixed-top, .navbar-fixed-bottom { border-radius: 0; } } .navbar-fixed-top { top: 0; border-width: 0 0 1px; } .navbar-fixed-bottom { bottom: 0; margin-bottom: 0; border-width: 1px 0 0; } .navbar-brand { float: left; padding: 15px 15px; font-size: 18px; line-height: 20px; height: 50px; } .navbar-brand:hover, .navbar-brand:focus { text-decoration: none; } @media (min-width: 768px) { .navbar > .container .navbar-brand, .navbar > .container-fluid .navbar-brand { margin-left: -15px; } } .navbar-toggle { position: relative; float: right; margin-right: 15px; padding: 9px 10px; margin-top: 8px; margin-bottom: 8px; background-color: transparent; background-image: none; border: 1px solid transparent; border-radius: 4px; } .navbar-toggle:focus { outline: none; } .navbar-toggle .icon-bar { display: block; width: 22px; height: 2px; border-radius: 1px; } .navbar-toggle .icon-bar + .icon-bar { margin-top: 4px; } @media (min-width: 768px) { .navbar-toggle { display: none; } } .navbar-nav { margin: 7.5px -15px; } .navbar-nav > li > a { padding-top: 10px; padding-bottom: 10px; line-height: 20px; } @media (max-width: 767px) { .navbar-nav .open .dropdown-menu { position: static; float: none; width: auto; margin-top: 0; background-color: transparent; border: 0; box-shadow: none; } .navbar-nav .open .dropdown-menu > li > a, .navbar-nav .open .dropdown-menu .dropdown-header { padding: 5px 15px 5px 25px; } .navbar-nav .open .dropdown-menu > li > a { line-height: 20px; } .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus { background-image: none; } } @media (min-width: 768px) { .navbar-nav { float: left; margin: 0; } .navbar-nav > li { float: left; } .navbar-nav > li > a { padding-top: 15px; padding-bottom: 15px; } .navbar-nav.navbar-right:last-child { margin-right: -15px; } } @media (min-width: 768px) { .navbar-left { float: left; float: left !important; } .navbar-right { float: right; float: right !important; } } .navbar-form { margin-left: -15px; margin-right: -15px; padding: 10px 15px; border-top: 1px solid transparent; border-bottom: 1px solid transparent; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); margin-top: 8px; margin-bottom: 8px; } @media (min-width: 768px) { .navbar-form .form-group { display: inline-block; margin-bottom: 0; vertical-align: middle; } .navbar-form .form-control { display: inline-block; width: auto; vertical-align: middle; } .navbar-form .input-group > .form-control { width: 100%; } .navbar-form .control-label { margin-bottom: 0; vertical-align: middle; font-weight: bold; } .navbar-form .radio, .navbar-form .checkbox { display: inline-block; margin-top: 0; margin-bottom: 0; padding-left: 0; vertical-align: middle; } .navbar-form .radio input[type="radio"], .navbar-form .checkbox input[type="checkbox"] { margin: 4px 8px 0 0; } .navbar-form .radio label, .navbar-form .checkbox label { float: right; margin: 0; } .navbar-form .has-feedback .form-control-feedback { top: 0; } } @media (max-width: 767px) { .navbar-form .form-group { margin-bottom: 5px; } } @media (min-width: 768px) { .navbar-form { width: auto; border: 0; margin-left: 0; margin-right: 0; padding-top: 0; padding-bottom: 0; -webkit-box-shadow: none; box-shadow: none; } .navbar-form.navbar-right:last-child { margin-right: -15px; } } .navbar-nav > li > .dropdown-menu { margin-top: 0; border-top-right-radius: 0; border-top-left-radius: 0; } .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .navbar-btn { margin-top: 8px; margin-bottom: 8px; } .navbar-btn.btn-sm { margin-top: 10px; margin-bottom: 10px; } .navbar-btn.btn-xs { margin-top: 14px; margin-bottom: 14px; } .navbar-text { margin-top: 15px; margin-bottom: 15px; } @media (min-width: 768px) { .navbar-text { float: left; margin-left: 15px; margin-right: 15px; } .navbar-text.navbar-right:last-child { margin-right: 0; } } .navbar-default { background-color: #f8f8f8; border-color: #e7e7e7; } .navbar-default .navbar-brand { color: #777777; } .navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus { color: #5e5e5e; background-color: transparent; } .navbar-default .navbar-text { color: #777777; } .navbar-default .navbar-nav > li > a { color: #777777; } .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus { color: #333333; background-color: transparent; } .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus { color: #555555; background-color: #e7e7e7; } .navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus { color: #cccccc; background-color: transparent; } .navbar-default .navbar-toggle { border-color: #dddddd; } .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { background-color: #dddddd; } .navbar-default .navbar-toggle .icon-bar { background-color: #888888; } .navbar-default .navbar-collapse, .navbar-default .navbar-form { border-color: #e7e7e7; } .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus { background-color: #e7e7e7; color: #555555; } @media (max-width: 767px) { .navbar-default .navbar-nav .open .dropdown-menu > li > a { color: #777777; } .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { color: #333333; background-color: transparent; } .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { color: #555555; background-color: #e7e7e7; } .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { color: #cccccc; background-color: transparent; } } .navbar-default .navbar-link { color: #777777; } .navbar-default .navbar-link:hover { color: #333333; } .navbar-inverse { background-color: #222222; border-color: #080808; } .navbar-inverse .navbar-brand { color: #999999; } .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus { color: #ffffff; background-color: transparent; } .navbar-inverse .navbar-text { color: #999999; } .navbar-inverse .navbar-nav > li > a { color: #999999; } .navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus { color: #ffffff; background-color: transparent; } .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus { color: #ffffff; background-color: #080808; } .navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus { color: #444444; background-color: transparent; } .navbar-inverse .navbar-toggle { border-color: #333333; } .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { background-color: #333333; } .navbar-inverse .navbar-toggle .icon-bar { background-color: #ffffff; } .navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form { border-color: #101010; } .navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus { background-color: #080808; color: #ffffff; } @media (max-width: 767px) { .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { border-color: #080808; } .navbar-inverse .navbar-nav .open .dropdown-menu .divider { background-color: #080808; } .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { color: #999999; } .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { color: #ffffff; background-color: transparent; } .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { color: #ffffff; background-color: #080808; } .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { color: #444444; background-color: transparent; } } .navbar-inverse .navbar-link { color: #999999; } .navbar-inverse .navbar-link:hover { color: #ffffff; } .pagination { display: inline-block; padding-left: 0; margin: 20px 0; border-radius: 4px; } .pagination > li { display: inline; } .pagination > li > a, .pagination > li > span { position: relative; float: left; padding: 6px 12px; line-height: 1.42857143; text-decoration: none; color: #333333; background-color: #ffffff; border: 1px solid #dddddd; margin-left: -1px; } .pagination > li:first-child > a, .pagination > li:first-child > span { margin-left: 0; border-bottom-left-radius: 4px; border-top-left-radius: 4px; } .pagination > li:last-child > a, .pagination > li:last-child > span { border-bottom-right-radius: 4px; border-top-right-radius: 4px; } .pagination > li > a:hover, .pagination > li > span:hover, .pagination > li > a:focus, .pagination > li > span:focus { color: #0d0d0d; background-color: #eeeeee; border-color: #dddddd; } .pagination > .active > a, .pagination > .active > span, .pagination > .active > a:hover, .pagination > .active > span:hover, .pagination > .active > a:focus, .pagination > .active > span:focus { z-index: 2; color: #ffffff; background-color: #c25252; border-color: #c25252; cursor: default; } .pagination > .disabled > span, .pagination > .disabled > span:hover, .pagination > .disabled > span:focus, .pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:focus { color: #999999; background-color: #ffffff; border-color: #dddddd; cursor: not-allowed; } .pagination-lg > li > a, .pagination-lg > li > span { padding: 10px 16px; font-size: 18px; } .pagination-lg > li:first-child > a, .pagination-lg > li:first-child > span { border-bottom-left-radius: 6px; border-top-left-radius: 6px; } .pagination-lg > li:last-child > a, .pagination-lg > li:last-child > span { border-bottom-right-radius: 6px; border-top-right-radius: 6px; } .pagination-sm > li > a, .pagination-sm > li > span { padding: 5px 10px; font-size: 12px; } .pagination-sm > li:first-child > a, .pagination-sm > li:first-child > span { border-bottom-left-radius: 3px; border-top-left-radius: 3px; } .pagination-sm > li:last-child > a, .pagination-sm > li:last-child > span { border-bottom-right-radius: 3px; border-top-right-radius: 3px; } .pager { padding-left: 0; margin: 20px 0; list-style: none; text-align: center; } .pager li { display: inline; } .pager li > a, .pager li > span { display: inline-block; padding: 5px 14px; background-color: #ffffff; border: 1px solid #dddddd; border-radius: 15px; } .pager li > a:hover, .pager li > a:focus { text-decoration: none; background-color: #eeeeee; } .pager .next > a, .pager .next > span { float: right; } .pager .previous > a, .pager .previous > span { float: left; } .pager .disabled > a, .pager .disabled > a:hover, .pager .disabled > a:focus, .pager .disabled > span { color: #999999; background-color: #ffffff; cursor: not-allowed; } .label { display: inline; padding: .2em .6em .3em; font-size: 75%; font-weight: bold; line-height: 1; color: #ffffff; text-align: center; white-space: nowrap; vertical-align: baseline; border-radius: .25em; } .label[href]:hover, .label[href]:focus { color: #ffffff; text-decoration: none; cursor: pointer; } .label:empty { display: none; } .btn .label { position: relative; top: -1px; } .label-default { background-color: #999999; } .label-default[href]:hover, .label-default[href]:focus { background-color: #808080; } .label-primary { background-color: #c25252; } .label-primary[href]:hover, .label-primary[href]:focus { background-color: #a63b3b; } .label-success { background-color: #5cb85c; } .label-success[href]:hover, .label-success[href]:focus { background-color: #449d44; } .label-info { background-color: #1b809e; } .label-info[href]:hover, .label-info[href]:focus { background-color: #145d72; } .label-warning { background-color: #aa6708; } .label-warning[href]:hover, .label-warning[href]:focus { background-color: #794906; } .label-danger { background-color: #ce4844; } .label-danger[href]:hover, .label-danger[href]:focus { background-color: #b1322e; } .badge { display: inline-block; min-width: 10px; padding: 3px 7px; font-size: 12px; font-weight: bold; color: #ffffff; line-height: 1; vertical-align: baseline; white-space: nowrap; text-align: center; background-color: #999999; border-radius: 10px; } .badge:empty { display: none; } .btn .badge { position: relative; top: -1px; } .btn-xs .badge { top: 0; padding: 1px 5px; } a.badge:hover, a.badge:focus { color: #ffffff; text-decoration: none; cursor: pointer; } a.list-group-item.active > .badge, .nav-pills > .active > a > .badge { color: #333333; background-color: #ffffff; } .nav-pills > li > a > .badge { margin-left: 3px; } .jumbotron { padding: 30px; margin-bottom: 30px; color: inherit; background-color: #eeeeee; } .jumbotron h1, .jumbotron .h1 { color: inherit; } .jumbotron p { margin-bottom: 15px; font-size: 21px; font-weight: 200; } .container .jumbotron { border-radius: 6px; } .jumbotron .container { max-width: 100%; } @media screen and (min-width: 768px) { .jumbotron { padding-top: 48px; padding-bottom: 48px; } .container .jumbotron { padding-left: 60px; padding-right: 60px; } .jumbotron h1, .jumbotron .h1 { font-size: 63px; } } .thumbnail { display: block; padding: 4px; margin-bottom: 20px; line-height: 1.42857143; background-color: #ffffff; border: 1px solid #dddddd; border-radius: 4px; -webkit-transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out; } .thumbnail > img, .thumbnail a > img { margin-left: auto; margin-right: auto; } a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active { border-color: #333333; } .thumbnail .caption { padding: 9px; color: #333333; } @-webkit-keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } } @keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } } .progress { overflow: hidden; height: 20px; margin-bottom: 20px; background-color: #f5f5f5; border-radius: 4px; -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); } .progress-bar { float: left; width: 0%; height: 100%; font-size: 12px; line-height: 20px; color: #ffffff; text-align: center; background-color: #c25252; -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); -webkit-transition: width 0.6s ease; transition: width 0.6s ease; } .progress-striped .progress-bar { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-size: 40px 40px; } .progress.active .progress-bar { -webkit-animation: progress-bar-stripes 2s linear infinite; animation: progress-bar-stripes 2s linear infinite; } .progress-bar-success { background-color: #5cb85c; } .progress-striped .progress-bar-success { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } .progress-bar-info { background-color: #1b809e; } .progress-striped .progress-bar-info { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } .progress-bar-warning { background-color: #aa6708; } .progress-striped .progress-bar-warning { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } .progress-bar-danger { background-color: #ce4844; } .progress-striped .progress-bar-danger { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } .media, .media-body { overflow: hidden; zoom: 1; } .media, .media .media { margin-top: 15px; } .media:first-child { margin-top: 0; } .media-object { display: block; } .media-heading { margin: 0 0 5px; } .media > .pull-left { margin-right: 10px; } .media > .pull-right { margin-left: 10px; } .media-list { padding-left: 0; list-style: none; } .list-group { margin-bottom: 20px; padding-left: 0; } .list-group-item { position: relative; display: block; padding: 10px 15px; margin-bottom: -1px; background-color: #ffffff; border: 1px solid #dddddd; } .list-group-item:first-child { border-top-right-radius: 4px; border-top-left-radius: 4px; } .list-group-item:last-child { margin-bottom: 0; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; } .list-group-item > .badge { float: right; } .list-group-item > .badge + .badge { margin-right: 5px; } a.list-group-item { color: #555555; } a.list-group-item .list-group-item-heading { color: #333333; } a.list-group-item:hover, a.list-group-item:focus { text-decoration: none; background-color: #f5f5f5; } a.list-group-item.active, a.list-group-item.active:hover, a.list-group-item.active:focus { z-index: 2; color: #ffffff; background-color: #c25252; border-color: #c25252; } a.list-group-item.active .list-group-item-heading, a.list-group-item.active:hover .list-group-item-heading, a.list-group-item.active:focus .list-group-item-heading { color: inherit; } a.list-group-item.active .list-group-item-text, a.list-group-item.active:hover .list-group-item-text, a.list-group-item.active:focus .list-group-item-text { color: #f7e9e9; } .list-group-item-success { color: #3c763d; background-color: #dff0d8; } a.list-group-item-success { color: #3c763d; } a.list-group-item-success .list-group-item-heading { color: inherit; } a.list-group-item-success:hover, a.list-group-item-success:focus { color: #3c763d; background-color: #d0e9c6; } a.list-group-item-success.active, a.list-group-item-success.active:hover, a.list-group-item-success.active:focus { color: #fff; background-color: #3c763d; border-color: #3c763d; } .list-group-item-info { color: #31708f; background-color: #d9edf7; } a.list-group-item-info { color: #31708f; } a.list-group-item-info .list-group-item-heading { color: inherit; } a.list-group-item-info:hover, a.list-group-item-info:focus { color: #31708f; background-color: #c4e3f3; } a.list-group-item-info.active, a.list-group-item-info.active:hover, a.list-group-item-info.active:focus { color: #fff; background-color: #31708f; border-color: #31708f; } .list-group-item-warning { color: #8a6d3b; background-color: #fcf8e3; } a.list-group-item-warning { color: #8a6d3b; } a.list-group-item-warning .list-group-item-heading { color: inherit; } a.list-group-item-warning:hover, a.list-group-item-warning:focus { color: #8a6d3b; background-color: #faf2cc; } a.list-group-item-warning.active, a.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus { color: #fff; background-color: #8a6d3b; border-color: #8a6d3b; } .list-group-item-danger { color: #a94442; background-color: #f2dede; } a.list-group-item-danger { color: #a94442; } a.list-group-item-danger .list-group-item-heading { color: inherit; } a.list-group-item-danger:hover, a.list-group-item-danger:focus { color: #a94442; background-color: #ebcccc; } a.list-group-item-danger.active, a.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus { color: #fff; background-color: #a94442; border-color: #a94442; } .list-group-item-heading { margin-top: 0; margin-bottom: 5px; } .list-group-item-text { margin-bottom: 0; line-height: 1.3; } .panel { margin-bottom: 20px; background-color: #ffffff; border: 1px solid transparent; border-radius: 4px; -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); } .panel-body { padding: 15px; } .panel-heading { padding: 10px 15px; border-bottom: 1px solid transparent; border-top-right-radius: 3px; border-top-left-radius: 3px; } .panel-heading > .dropdown .dropdown-toggle { color: inherit; } .panel-title { margin-top: 0; margin-bottom: 0; font-size: 16px; color: inherit; } .panel-title > a { color: inherit; } .panel-footer { padding: 10px 15px; background-color: #f5f5f5; border-top: 1px solid #dddddd; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; } .panel > .list-group { margin-bottom: 0; } .panel > .list-group .list-group-item { border-width: 1px 0; border-radius: 0; } .panel > .list-group:first-child .list-group-item:first-child { border-top: 0; border-top-right-radius: 3px; border-top-left-radius: 3px; } .panel > .list-group:last-child .list-group-item:last-child { border-bottom: 0; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; } .panel-heading + .list-group .list-group-item:first-child { border-top-width: 0; } .panel > .table, .panel > .table-responsive > .table { margin-bottom: 0; } .panel > .table:first-child, .panel > .table-responsive:first-child > .table:first-child { border-top-right-radius: 3px; border-top-left-radius: 3px; } .panel > .table:first-child > thead:first-child > tr:first-child td:first-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, .panel > .table:first-child > thead:first-child > tr:first-child th:first-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { border-top-left-radius: 3px; } .panel > .table:first-child > thead:first-child > tr:first-child td:last-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, .panel > .table:first-child > thead:first-child > tr:first-child th:last-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { border-top-right-radius: 3px; } .panel > .table:last-child, .panel > .table-responsive:last-child > .table:last-child { border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; } .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { border-bottom-left-radius: 3px; } .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { border-bottom-right-radius: 3px; } .panel > .panel-body + .table, .panel > .panel-body + .table-responsive { border-top: 1px solid #dddddd; } .panel > .table > tbody:first-child > tr:first-child th, .panel > .table > tbody:first-child > tr:first-child td { border-top: 0; } .panel > .table-bordered, .panel > .table-responsive > .table-bordered { border: 0; } .panel > .table-bordered > thead > tr > th:first-child, .panel > .table-responsive > .table-bordered > thead > tr > th:first-child, .panel > .table-bordered > tbody > tr > th:first-child, .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, .panel > .table-bordered > tfoot > tr > th:first-child, .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, .panel > .table-bordered > thead > tr > td:first-child, .panel > .table-responsive > .table-bordered > thead > tr > td:first-child, .panel > .table-bordered > tbody > tr > td:first-child, .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, .panel > .table-bordered > tfoot > tr > td:first-child, .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { border-left: 0; } .panel > .table-bordered > thead > tr > th:last-child, .panel > .table-responsive > .table-bordered > thead > tr > th:last-child, .panel > .table-bordered > tbody > tr > th:last-child, .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, .panel > .table-bordered > tfoot > tr > th:last-child, .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, .panel > .table-bordered > thead > tr > td:last-child, .panel > .table-responsive > .table-bordered > thead > tr > td:last-child, .panel > .table-bordered > tbody > tr > td:last-child, .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, .panel > .table-bordered > tfoot > tr > td:last-child, .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { border-right: 0; } .panel > .table-bordered > thead > tr:first-child > td, .panel > .table-responsive > .table-bordered > thead > tr:first-child > td, .panel > .table-bordered > tbody > tr:first-child > td, .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, .panel > .table-bordered > thead > tr:first-child > th, .panel > .table-responsive > .table-bordered > thead > tr:first-child > th, .panel > .table-bordered > tbody > tr:first-child > th, .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { border-bottom: 0; } .panel > .table-bordered > tbody > tr:last-child > td, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, .panel > .table-bordered > tfoot > tr:last-child > td, .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, .panel > .table-bordered > tbody > tr:last-child > th, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, .panel > .table-bordered > tfoot > tr:last-child > th, .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { border-bottom: 0; } .panel > .table-responsive { border: 0; margin-bottom: 0; } .panel-group { margin-bottom: 20px; } .panel-group .panel { margin-bottom: 0; border-radius: 4px; overflow: hidden; } .panel-group .panel + .panel { margin-top: 5px; } .panel-group .panel-heading { border-bottom: 0; } .panel-group .panel-heading + .panel-collapse .panel-body { border-top: 1px solid #dddddd; } .panel-group .panel-footer { border-top: 0; } .panel-group .panel-footer + .panel-collapse .panel-body { border-bottom: 1px solid #dddddd; } .panel-default { border-color: #dddddd; } .panel-default > .panel-heading { color: #333333; background-color: #f5f5f5; border-color: #dddddd; } .panel-default > .panel-heading + .panel-collapse .panel-body { border-top-color: #dddddd; } .panel-default > .panel-footer + .panel-collapse .panel-body { border-bottom-color: #dddddd; } .panel-primary { border-color: #c25252; } .panel-primary > .panel-heading { color: #ffffff; background-color: #c25252; border-color: #c25252; } .panel-primary > .panel-heading + .panel-collapse .panel-body { border-top-color: #c25252; } .panel-primary > .panel-footer + .panel-collapse .panel-body { border-bottom-color: #c25252; } .panel-success { border-color: #d6e9c6; } .panel-success > .panel-heading { color: #3c763d; background-color: #dff0d8; border-color: #d6e9c6; } .panel-success > .panel-heading + .panel-collapse .panel-body { border-top-color: #d6e9c6; } .panel-success > .panel-footer + .panel-collapse .panel-body { border-bottom-color: #d6e9c6; } .panel-info { border-color: #bce8f1; } .panel-info > .panel-heading { color: #31708f; background-color: #d9edf7; border-color: #bce8f1; } .panel-info > .panel-heading + .panel-collapse .panel-body { border-top-color: #bce8f1; } .panel-info > .panel-footer + .panel-collapse .panel-body { border-bottom-color: #bce8f1; } .panel-warning { border-color: #faebcc; } .panel-warning > .panel-heading { color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc; } .panel-warning > .panel-heading + .panel-collapse .panel-body { border-top-color: #faebcc; } .panel-warning > .panel-footer + .panel-collapse .panel-body { border-bottom-color: #faebcc; } .panel-danger { border-color: #ebccd1; } .panel-danger > .panel-heading { color: #a94442; background-color: #f2dede; border-color: #ebccd1; } .panel-danger > .panel-heading + .panel-collapse .panel-body { border-top-color: #ebccd1; } .panel-danger > .panel-footer + .panel-collapse .panel-body { border-bottom-color: #ebccd1; } .well { min-height: 20px; padding: 19px; margin-bottom: 20px; background-color: #f5f5f5; border: 1px solid #e3e3e3; border-radius: 4px; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); } .well blockquote { border-color: #ddd; border-color: rgba(0, 0, 0, 0.15); } .well-lg { padding: 24px; border-radius: 6px; } .well-sm { padding: 9px; border-radius: 3px; } header nav { background-color: #333333; } header nav a { color: #333333; text-decoration: none; } header nav .navbar-brand { padding-left: 0; /*height: auto !important;*/ } header nav .nav-right { float: right; margin: 0; } header nav .nav-right > li { position: relative; display: inline-block; vertical-align: middle; margin-left: 5px; } header nav .nav-right > li:first-child { margin-left: 0; } header nav .nav-right > li a { padding-left: 10px; padding-right: 10px; display: block; height: 51px; line-height: 51px; } .page-footer { padding: 10px 0; background-color: #f3f4f5; color: #333333; border-top: 1px solid #d4d4d7; } .waimenu { margin-right: auto; margin-left: auto; padding-left: 15px; padding-right: 15px; position: relative; z-index: 1090; } @media (min-width: 768px) { .waimenu { width: 750px; } } @media (min-width: 992px) { .waimenu { width: 970px; } } @media (min-width: 1200px) { .waimenu { width: 1170px; } } .waimenu > .navbar-header, .waimenu > .navbar-collapse { margin-right: -15px; margin-left: -15px; } @media (min-width: 768px) { .waimenu > .navbar-header, .waimenu > .navbar-collapse { margin-right: 0; margin-left: 0; } } .waimenu a, .waimenu a:link, .waimenu a:visited { position: absolute; top: 5px; left: -9999px; } .waimenu a:focus, .waimenu a:active { left: 0; } .alert { padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; } .alert h4 { margin-top: 0; color: inherit; } .alert .alert-link { font-weight: bold; } .alert > p, .alert > ul { margin-bottom: 0; } .alert > p + p { margin-top: 5px; } .alert-dismissable { padding-right: 35px; } .alert-dismissable .close { position: relative; top: -2px; right: -21px; color: inherit; } .alert-success { background-color: #dff0d8; border-color: #d6e9c6; color: #3c763d; } .alert-success hr { border-top-color: #c9e2b3; } .alert-success .alert-link { color: #2b542c; } .alert-info { background-color: #d9edf7; border-color: #bce8f1; color: #31708f; } .alert-info hr { border-top-color: #a6e1ec; } .alert-info .alert-link { color: #245269; } .alert-warning { background-color: #fcf8e3; border-color: #faebcc; color: #8a6d3b; } .alert-warning hr { border-top-color: #f7e1b5; } .alert-warning .alert-link { color: #66512c; } .alert-danger { background-color: #f2dede; border-color: #ebccd1; color: #a94442; } .alert-danger hr { border-top-color: #e4b9c0; } .alert-danger .alert-link { color: #843534; } .is-contrast .alert { background-color: #ffffff; border-color: #000000; color: #000000; border-style: dashed; } .is-contrast .alert hr { border-top-color: #000000; } .is-contrast .alert .alert-link { color: #000000; } .close { float: right; font-size: 21px; font-weight: bold; line-height: 1; color: #000000; text-shadow: 0 1px 0 #ffffff; opacity: 0.5; filter: alpha(opacity=50); } .close:hover, .close:focus { color: #000000; text-decoration: none; cursor: pointer; opacity: 0.8; filter: alpha(opacity=80); } button.close { padding: 0; cursor: pointer; background: transparent; border: 0; -webkit-appearance: none; } .breadcrumb { padding: 8px 15px; margin-bottom: 20px; list-style: none; background-color: transparent; border-radius: 4px; } .breadcrumb > li { display: inline-block; } .breadcrumb > li + li:before { content: ">\00a0"; padding: 0 5px; color: #333333; } .breadcrumb > .active { color: #333333; } .is-contrast .breadcrumb > li:before, .is-contrast .breadcrumb > .active { color: #fff; } ul.languages { margin-top: 15px !important; padding-left: 0 !important; } ul.languages li a { background: #ccc; border-radius: 50%; display: inline; float: right; position: relative; line-height: 13px !important; height: 25px !important; padding: 5px !important; color: #333; margin-left:50px; } ul.languages li a:hover { text-decoration: none; background: #FFF; } .modal-open { overflow: hidden; } .modal { display: none; overflow: auto; overflow-y: scroll; position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1050; -webkit-overflow-scrolling: touch; outline: 0; } .modal.fade .modal-dialog { -webkit-transform: translate(0, -25%); -ms-transform: translate(0, -25%); transform: translate(0, -25%); -webkit-transition: -webkit-transform 0.3s ease-out; -moz-transition: -moz-transform 0.3s ease-out; -o-transition: -o-transform 0.3s ease-out; transition: transform 0.3s ease-out; } .modal.in .modal-dialog { -webkit-transform: translate(0, 0); -ms-transform: translate(0, 0); transform: translate(0, 0); } .modal-dialog { position: relative; width: auto; margin: 10px; } .modal-content { position: relative; background-color: #ffffff; border: 1px solid #999999; border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 6px; -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); background-clip: padding-box; outline: none; } .modal-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1040; background-color: #000000; } .modal-backdrop.fade { opacity: 0; filter: alpha(opacity=0); } .modal-backdrop.in { opacity: 0.5; filter: alpha(opacity=50); } .modal-header { padding: 15px; border-bottom: 1px solid #e5e5e5; min-height: 16.42857143px; } .modal-header .close { margin-top: -2px; } .modal-title { margin: 0; line-height: 1.42857143; } .modal-body { position: relative; padding: 20px; } .modal-footer { margin-top: 15px; padding: 19px 20px 20px; text-align: right; border-top: 1px solid #e5e5e5; } .modal-footer .btn + .btn { margin-left: 5px; margin-bottom: 0; } .modal-footer .btn-group .btn + .btn { margin-left: -1px; } .modal-footer .btn-block + .btn-block { margin-left: 0; } @media (min-width: 768px) { .modal-dialog { width: 600px; margin: 30px auto; } .modal-content { -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); } .modal-sm { width: 300px; } } @media (min-width: 992px) { .modal-lg { width: 900px; } } .tooltip { position: absolute; z-index: 1030; display: block; visibility: visible; font-size: 12px; line-height: 1.4; opacity: 0; filter: alpha(opacity=0); } .tooltip.in { opacity: 0.9; filter: alpha(opacity=90); } .tooltip.top { margin-top: -3px; padding: 5px 0; } .tooltip.right { margin-left: 3px; padding: 0 5px; } .tooltip.bottom { margin-top: 3px; padding: 5px 0; } .tooltip.left { margin-left: -3px; padding: 0 5px; } .tooltip-inner { max-width: 200px; padding: 3px 8px; color: #ffffff; text-align: center; text-decoration: none; background-color: #000000; border-radius: 4px; } .tooltip-arrow { position: absolute; width: 0; height: 0; border-color: transparent; border-style: solid; } .tooltip.top .tooltip-arrow { bottom: 0; left: 50%; margin-left: -5px; border-width: 5px 5px 0; border-top-color: #000000; } .tooltip.top-left .tooltip-arrow { bottom: 0; left: 5px; border-width: 5px 5px 0; border-top-color: #000000; } .tooltip.top-right .tooltip-arrow { bottom: 0; right: 5px; border-width: 5px 5px 0; border-top-color: #000000; } .tooltip.right .tooltip-arrow { top: 50%; left: 0; margin-top: -5px; border-width: 5px 5px 5px 0; border-right-color: #000000; } .tooltip.left .tooltip-arrow { top: 50%; right: 0; margin-top: -5px; border-width: 5px 0 5px 5px; border-left-color: #000000; } .tooltip.bottom .tooltip-arrow { top: 0; left: 50%; margin-left: -5px; border-width: 0 5px 5px; border-bottom-color: #000000; } .tooltip.bottom-left .tooltip-arrow { top: 0; left: 5px; border-width: 0 5px 5px; border-bottom-color: #000000; } .tooltip.bottom-right .tooltip-arrow { top: 0; right: 5px; border-width: 0 5px 5px; border-bottom-color: #000000; } .popover { position: absolute; top: 0; left: 0; z-index: 1010; display: none; max-width: 276px; padding: 1px; text-align: left; background-color: #ffffff; background-clip: padding-box; border: 1px solid #cccccc; border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 6px; -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); white-space: normal; } .popover.top { margin-top: -10px; } .popover.right { margin-left: 10px; } .popover.bottom { margin-top: 10px; } .popover.left { margin-left: -10px; } .popover-title { margin: 0; padding: 8px 14px; font-size: 14px; font-weight: normal; line-height: 18px; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; border-radius: 5px 5px 0 0; } .popover-content { padding: 9px 14px; } .popover > .arrow, .popover > .arrow:after { position: absolute; display: block; width: 0; height: 0; border-color: transparent; border-style: solid; } .popover > .arrow { border-width: 11px; } .popover > .arrow:after { border-width: 10px; content: ""; } .popover.top > .arrow { left: 50%; margin-left: -11px; border-bottom-width: 0; border-top-color: #999999; border-top-color: rgba(0, 0, 0, 0.25); bottom: -11px; } .popover.top > .arrow:after { content: " "; bottom: 1px; margin-left: -10px; border-bottom-width: 0; border-top-color: #ffffff; } .popover.right > .arrow { top: 50%; left: -11px; margin-top: -11px; border-left-width: 0; border-right-color: #999999; border-right-color: rgba(0, 0, 0, 0.25); } .popover.right > .arrow:after { content: " "; left: 1px; bottom: -10px; border-left-width: 0; border-right-color: #ffffff; } .popover.bottom > .arrow { left: 50%; margin-left: -11px; border-top-width: 0; border-bottom-color: #999999; border-bottom-color: rgba(0, 0, 0, 0.25); top: -11px; } .popover.bottom > .arrow:after { content: " "; top: 1px; margin-left: -10px; border-top-width: 0; border-bottom-color: #ffffff; } .popover.left > .arrow { top: 50%; right: -11px; margin-top: -11px; border-right-width: 0; border-left-color: #999999; border-left-color: rgba(0, 0, 0, 0.25); } .popover.left > .arrow:after { content: " "; right: 1px; border-right-width: 0; border-left-color: #ffffff; bottom: -10px; } .carousel { position: relative; } .carousel-inner { position: relative; overflow: hidden; width: 100%; } .carousel-inner > .item { display: none; position: relative; -webkit-transition: 0.6s ease-in-out left; transition: 0.6s ease-in-out left; } .carousel-inner > .item > img, .carousel-inner > .item > a > img { line-height: 1; } .carousel-inner > .active, .carousel-inner > .next, .carousel-inner > .prev { display: block; } .carousel-inner > .active { left: 0; } .carousel-inner > .next, .carousel-inner > .prev { position: absolute; top: 0; width: 100%; } .carousel-inner > .next { left: 100%; } .carousel-inner > .prev { left: -100%; } .carousel-inner > .next.left, .carousel-inner > .prev.right { left: 0; } .carousel-inner > .active.left { left: -100%; } .carousel-inner > .active.right { left: 100%; } .carousel-control { position: absolute; top: 0; left: 0; bottom: 0; width: 15%; opacity: 0.5; filter: alpha(opacity=50); font-size: 20px; color: #ffffff; text-align: center; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); } .carousel-control.left { background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0%), color-stop(rgba(0, 0, 0, 0.0001) 100%)); background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); } .carousel-control.right { left: auto; right: 0; background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0%), color-stop(rgba(0, 0, 0, 0.5) 100%)); background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); } .carousel-control:hover, .carousel-control:focus { outline: none; color: #ffffff; text-decoration: none; opacity: 0.9; filter: alpha(opacity=90); } .carousel-control .icon-prev, .carousel-control .icon-next, .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right { position: absolute; top: 50%; z-index: 5; display: inline-block; } .carousel-control .icon-prev, .carousel-control .glyphicon-chevron-left { left: 50%; } .carousel-control .icon-next, .carousel-control .glyphicon-chevron-right { right: 50%; } .carousel-control .icon-prev, .carousel-control .icon-next { width: 20px; height: 20px; margin-top: -10px; margin-left: -10px; font-family: serif; } .carousel-control .icon-prev:before { content: '\2039'; } .carousel-control .icon-next:before { content: '\203a'; } .carousel-indicators { position: absolute; bottom: 10px; left: 50%; z-index: 15; width: 60%; margin-left: -30%; padding-left: 0; list-style: none; text-align: center; } .carousel-indicators li { display: inline-block; width: 10px; height: 10px; margin: 1px; text-indent: -999px; border: 1px solid #ffffff; border-radius: 10px; cursor: pointer; background-color: #000 \9; background-color: rgba(0, 0, 0, 0); } .carousel-indicators .active { margin: 0; width: 12px; height: 12px; background-color: #ffffff; } .carousel-caption { position: absolute; left: 15%; right: 15%; bottom: 20px; z-index: 10; padding-top: 20px; padding-bottom: 20px; color: #ffffff; text-align: center; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); } .carousel-caption .btn { text-shadow: none; } @media screen and (min-width: 768px) { .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right, .carousel-control .icon-prev, .carousel-control .icon-next { width: 30px; height: 30px; margin-top: -15px; margin-left: -15px; font-size: 30px; } .carousel-caption { left: 20%; right: 20%; padding-bottom: 30px; } .carousel-indicators { bottom: 20px; } } .back-to-top { position: fixed; right: 0; bottom: 50px; width: 60px; height: 60px; background: #333; color: #fff; text-align: center; font-size: 0.65em; } .back-to-top i { display: block; padding-top: 10px; padding-bottom: 10px; font-size: 2em; } .back-to-top:hover { color: #fff; text-decoration: none; background: #666; cursor: pointer; } .filtered-search .form-control { border-right: 0; } .filtered-search .filtered-search-filters { position: relative; } .filtered-search .filtered-search-filters .btn { border-left-style: dotted; border-radius: 0; } .filtered-search .filtered-search-filters .filtered-search-filters-list { position: absolute; right: 0; z-index: 1000; font-size: 14px; background-color: #fff; border-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.15); list-style: none; padding: 0; } .filtered-search .filtered-search-filters .filtered-search-filters-list li { padding: 0 12px; } .is-contrast .filtered-search .btn, .is-contrast .filtered-search .btn:focus, .is-contrast .filtered-search .btn:active { border-left: 1px solid #000; } .is-contrast .filtered-search .filtered-search-filters-list { color: #000; } .modal-side-right.fade .modal-dialog { -webkit-transform: translate(25%, 0); -ms-transform: translate(25%, 0); transform: translate(25%, 0); } .modal-side-right.in .modal-dialog { -webkit-transform: translate(0, 0); -ms-transform: translate(0, 0); transform: translate(0, 0); } .modal-side-right .modal-content { float: right; } .modal-side-left.fade .modal-dialog { -webkit-transform: translate(-25%, 0); -ms-transform: translate(-25%, 0); transform: translate(-25%, 0); } .modal-side-left.in .modal-dialog { -webkit-transform: translate(0, 0); -ms-transform: translate(0, 0); transform: translate(0, 0); } .modal-side-left .modal-content { float: left; } .modal-side-left, .modal-side-right { overflow: hidden; } .modal-side-left .modal-dialog, .modal-side-right .modal-dialog { width: 100%; height: 100%; padding: 51px 0 0 0; margin-top: 0; } .modal-side-left .modal-content, .modal-side-right .modal-content { width: 240px; height: 100%; border-radius: 0; } .modal-side-left .modal-content .modal-body, .modal-side-right .modal-content .modal-body { overflow: scroll; height: 100%; } @media (min-width: 768px) { .modal-side-left .modal-content, .modal-side-right .modal-content { width: 300px; } } .nav-side-left { left: 0; opacity: 0; -webkit-transform: translate(-300px, 0); -ms-transform: translate(-300px, 0); transform: translate(-300px, 0); transition: all 0.3s ease-in-out; } .nav-side-right { right: 0; opacity: 0; -webkit-transform: translate(300px, 0); -ms-transform: translate(300px, 0); transform: translate(300px, 0); transition: all 0.3s ease-in-out; } .nav-side { position: fixed; top: 0; width: 300px; height: 100%; z-index: 1030; } .nav-side .nav-side-header { padding: 15px; display: table; width: 100%; color: #fff; } .nav-side .nav-side-header > * { display: table-cell; vertical-align: middle; padding-right: 15px; } .nav-side .nav-side-header .nav-side-close { text-align: right; color: #666; } .nav-side .nav-side-header .nav-side-close:hover { cursor: pointer; color: #fff; } .nav-side .nav-side-current a { font-weight: bold; } .nav-side .nav-side-current a, .nav-side .nav-side-current-parent a { color: #fff; } .nav-side.in { -webkit-transform: translate(0, 0); -ms-transform: translate(0, 0); transform: translate(0, 0); opacity: 1; } .nav-side ul { list-style: none; padding: 0; } .nav-side > ul > li a { display: block; line-height: 38px; } .nav-side > ul > li > div { position: relative; } .nav-side > ul > li > div > i { position: absolute; right: 0; top: 0; padding: 19px 33px 15px; } .nav-side > ul > li > div > a { padding: 5px 15px; margin-right: 75px; } .nav-side > ul > li ul li > a { padding-left: 50px; } #sticky-header { /*position: fixed;*/ top: 0; width: 100%; z-index: 101; background: #fff; box-shadow: 0px 0px 8px rgba(150, 150, 150, 0.7); } #sticky-header #sticky-header-container { display: none; } @media (min-width: 768px) { #sticky-header #sticky-header-container { display: block; } } /* FONT PATH * -------------------------- */ @font-face { font-family: 'FontAwesome'; src: url('../assets/fonts/fontawesome-webfont.eot?v=4.2.0'); src: url('../assets/fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'), url('../assets/fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'), url('../assets/fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'), url('../assets/fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg'); font-weight: normal; font-style: normal; } .fa { display: inline-block; font: normal normal normal 14px/1 FontAwesome; font-size: inherit; text-rendering: auto; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* makes the font 33% larger relative to the icon container */ .fa-lg { font-size: 1.33333333em; line-height: 0.75em; vertical-align: -15%; } .fa-2x { font-size: 2em; } .fa-3x { font-size: 3em; } .fa-4x { font-size: 4em; } .fa-5x { font-size: 5em; } .fa-fw { width: 1.28571429em; text-align: center; } .fa-ul { padding-left: 0; margin-left: 2.14285714em; list-style-type: none; } .fa-ul > li { position: relative; } .fa-li { position: absolute; left: -2.14285714em; width: 2.14285714em; top: 0.14285714em; text-align: center; } .fa-li.fa-lg { left: -1.85714286em; } .fa-border { padding: .2em .25em .15em; border: solid 0.08em #eeeeee; border-radius: .1em; } .pull-right { float: right; } .pull-left { float: left; } .fa.pull-left { margin-right: .3em; } .fa.pull-right { margin-left: .3em; } .fa-spin { -webkit-animation: fa-spin 2s infinite linear; animation: fa-spin 2s infinite linear; } @-webkit-keyframes fa-spin { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(359deg); transform: rotate(359deg); } } @keyframes fa-spin { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(359deg); transform: rotate(359deg); } } .fa-rotate-90 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); -webkit-transform: rotate(90deg); -ms-transform: rotate(90deg); transform: rotate(90deg); } .fa-rotate-180 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); -webkit-transform: rotate(180deg); -ms-transform: rotate(180deg); transform: rotate(180deg); } .fa-rotate-270 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); -webkit-transform: rotate(270deg); -ms-transform: rotate(270deg); transform: rotate(270deg); } .fa-flip-horizontal { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); -webkit-transform: scale(-1, 1); -ms-transform: scale(-1, 1); transform: scale(-1, 1); } .fa-flip-vertical { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); -webkit-transform: scale(1, -1); -ms-transform: scale(1, -1); transform: scale(1, -1); } :root .fa-rotate-90, :root .fa-rotate-180, :root .fa-rotate-270, :root .fa-flip-horizontal, :root .fa-flip-vertical { filter: none; } .fa-stack { position: relative; display: inline-block; width: 2em; height: 2em; line-height: 2em; vertical-align: middle; } .fa-stack-1x, .fa-stack-2x { position: absolute; left: 0; width: 100%; text-align: center; } .fa-stack-1x { line-height: inherit; } .fa-stack-2x { font-size: 2em; } .fa-inverse { color: #ffffff; } /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen readers do not read off random characters that represent icons */ .fa-glass:before { content: "\f000"; } .fa-music:before { content: "\f001"; } .fa-search:before { content: "\f002"; } .fa-envelope-o:before { content: "\f003"; } .fa-heart:before { content: "\f004"; } .fa-star:before { content: "\f005"; } .fa-star-o:before { content: "\f006"; } .fa-user:before { content: "\f007"; } .fa-film:before { content: "\f008"; } .fa-th-large:before { content: "\f009"; } .fa-th:before { content: "\f00a"; } .fa-th-list:before { content: "\f00b"; } .fa-check:before { content: "\f00c"; } .fa-remove:before, .fa-close:before, .fa-times:before { content: "\f00d"; } .fa-search-plus:before { content: "\f00e"; } .fa-search-minus:before { content: "\f010"; } .fa-power-off:before { content: "\f011"; } .fa-signal:before { content: "\f012"; } .fa-gear:before, .fa-cog:before { content: "\f013"; } .fa-trash-o:before { content: "\f014"; } .fa-home:before { content: "\f015"; } .fa-file-o:before { content: "\f016"; } .fa-clock-o:before { content: "\f017"; } .fa-road:before { content: "\f018"; } .fa-download:before { content: "\f019"; } .fa-arrow-circle-o-down:before { content: "\f01a"; } .fa-arrow-circle-o-up:before { content: "\f01b"; } .fa-inbox:before { content: "\f01c"; } .fa-play-circle-o:before { content: "\f01d"; } .fa-rotate-right:before, .fa-repeat:before { content: "\f01e"; } .fa-refresh:before { content: "\f021"; } .fa-list-alt:before { content: "\f022"; } .fa-lock:before { content: "\f023"; } .fa-flag:before { content: "\f024"; } .fa-headphones:before { content: "\f025"; } .fa-volume-off:before { content: "\f026"; } .fa-volume-down:before { content: "\f027"; } .fa-volume-up:before { content: "\f028"; } .fa-qrcode:before { content: "\f029"; } .fa-barcode:before { content: "\f02a"; } .fa-tag:before { content: "\f02b"; } .fa-tags:before { content: "\f02c"; } .fa-book:before { content: "\f02d"; } .fa-bookmark:before { content: "\f02e"; } .fa-print:before { content: "\f02f"; } .fa-camera:before { content: "\f030"; } .fa-font:before { content: "\f031"; } .fa-bold:before { content: "\f032"; } .fa-italic:before { content: "\f033"; } .fa-text-height:before { content: "\f034"; } .fa-text-width:before { content: "\f035"; } .fa-align-left:before { content: "\f036"; } .fa-align-center:before { content: "\f037"; } .fa-align-right:before { content: "\f038"; } .fa-align-justify:before { content: "\f039"; } .fa-list:before { content: "\f03a"; } .fa-dedent:before, .fa-outdent:before { content: "\f03b"; } .fa-indent:before { content: "\f03c"; } .fa-video-camera:before { content: "\f03d"; } .fa-photo:before, .fa-image:before, .fa-picture-o:before { content: "\f03e"; } .fa-pencil:before { content: "\f040"; } .fa-map-marker:before { content: "\f041"; } .fa-adjust:before { content: "\f042"; } .fa-tint:before { content: "\f043"; } .fa-edit:before, .fa-pencil-square-o:before { content: "\f044"; } .fa-share-square-o:before { content: "\f045"; } .fa-check-square-o:before { content: "\f046"; } .fa-arrows:before { content: "\f047"; } .fa-step-backward:before { content: "\f048"; } .fa-fast-backward:before { content: "\f049"; } .fa-backward:before { content: "\f04a"; } .fa-play:before { content: "\f04b"; } .fa-pause:before { content: "\f04c"; } .fa-stop:before { content: "\f04d"; } .fa-forward:before { content: "\f04e"; } .fa-fast-forward:before { content: "\f050"; } .fa-step-forward:before { content: "\f051"; } .fa-eject:before { content: "\f052"; } .fa-chevron-left:before { content: "\f053"; } .fa-chevron-right:before { content: "\f054"; } .fa-plus-circle:before { content: "\f055"; } .fa-minus-circle:before { content: "\f056"; } .fa-times-circle:before { content: "\f057"; } .fa-check-circle:before { content: "\f058"; } .fa-question-circle:before { content: "\f059"; } .fa-info-circle:before { content: "\f05a"; } .fa-crosshairs:before { content: "\f05b"; } .fa-times-circle-o:before { content: "\f05c"; } .fa-check-circle-o:before { content: "\f05d"; } .fa-ban:before { content: "\f05e"; } .fa-arrow-left:before { content: "\f060"; } .fa-arrow-right:before { content: "\f061"; } .fa-arrow-up:before { content: "\f062"; } .fa-arrow-down:before { content: "\f063"; } .fa-mail-forward:before, .fa-share:before { content: "\f064"; } .fa-expand:before { content: "\f065"; } .fa-compress:before { content: "\f066"; } .fa-plus:before { content: "\f067"; } .fa-minus:before { content: "\f068"; } .fa-asterisk:before { content: "\f069"; } .fa-exclamation-circle:before { content: "\f06a"; } .fa-gift:before { content: "\f06b"; } .fa-leaf:before { content: "\f06c"; } .fa-fire:before { content: "\f06d"; } .fa-eye:before { content: "\f06e"; } .fa-eye-slash:before { content: "\f070"; } .fa-warning:before, .fa-exclamation-triangle:before { content: "\f071"; } .fa-plane:before { content: "\f072"; } .fa-calendar:before { content: "\f073"; } .fa-random:before { content: "\f074"; } .fa-comment:before { content: "\f075"; } .fa-magnet:before { content: "\f076"; } .fa-chevron-up:before { content: "\f077"; } .fa-chevron-down:before { content: "\f078"; } .fa-retweet:before { content: "\f079"; } .fa-shopping-cart:before { content: "\f07a"; } .fa-folder:before { content: "\f07b"; } .fa-folder-open:before { content: "\f07c"; } .fa-arrows-v:before { content: "\f07d"; } .fa-arrows-h:before { content: "\f07e"; } .fa-bar-chart-o:before, .fa-bar-chart:before { content: "\f080"; } .fa-twitter-square:before { content: "\f081"; } .fa-facebook-square:before { content: "\f082"; } .fa-camera-retro:before { content: "\f083"; } .fa-key:before { content: "\f084"; } .fa-gears:before, .fa-cogs:before { content: "\f085"; } .fa-comments:before { content: "\f086"; } .fa-thumbs-o-up:before { content: "\f087"; } .fa-thumbs-o-down:before { content: "\f088"; } .fa-star-half:before { content: "\f089"; } .fa-heart-o:before { content: "\f08a"; } .fa-sign-out:before { content: "\f08b"; } .fa-linkedin-square:before { content: "\f08c"; } .fa-thumb-tack:before { content: "\f08d"; } .fa-external-link:before { content: "\f08e"; } .fa-sign-in:before { content: "\f090"; } .fa-trophy:before { content: "\f091"; } .fa-github-square:before { content: "\f092"; } .fa-upload:before { content: "\f093"; } .fa-lemon-o:before { content: "\f094"; } .fa-phone:before { content: "\f095"; } .fa-square-o:before { content: "\f096"; } .fa-bookmark-o:before { content: "\f097"; } .fa-phone-square:before { content: "\f098"; } .fa-twitter:before { content: "\f099"; } .fa-facebook:before { content: "\f09a"; } .fa-github:before { content: "\f09b"; } .fa-unlock:before { content: "\f09c"; } .fa-credit-card:before { content: "\f09d"; } .fa-rss:before { content: "\f09e"; } .fa-hdd-o:before { content: "\f0a0"; } .fa-bullhorn:before { content: "\f0a1"; } .fa-bell:before { content: "\f0f3"; } .fa-certificate:before { content: "\f0a3"; } .fa-hand-o-right:before { content: "\f0a4"; } .fa-hand-o-left:before { content: "\f0a5"; } .fa-hand-o-up:before { content: "\f0a6"; } .fa-hand-o-down:before { content: "\f0a7"; } .fa-arrow-circle-left:before { content: "\f0a8"; } .fa-arrow-circle-right:before { content: "\f0a9"; } .fa-arrow-circle-up:before { content: "\f0aa"; } .fa-arrow-circle-down:before { content: "\f0ab"; } .fa-globe:before { content: "\f0ac"; } .fa-wrench:before { content: "\f0ad"; } .fa-tasks:before { content: "\f0ae"; } .fa-filter:before { content: "\f0b0"; } .fa-briefcase:before { content: "\f0b1"; } .fa-arrows-alt:before { content: "\f0b2"; } .fa-group:before, .fa-users:before { content: "\f0c0"; } .fa-chain:before, .fa-link:before { content: "\f0c1"; } .fa-cloud:before { content: "\f0c2"; } .fa-flask:before { content: "\f0c3"; } .fa-cut:before, .fa-scissors:before { content: "\f0c4"; } .fa-copy:before, .fa-files-o:before { content: "\f0c5"; } .fa-paperclip:before { content: "\f0c6"; } .fa-save:before, .fa-floppy-o:before { content: "\f0c7"; } .fa-square:before { content: "\f0c8"; } .fa-navicon:before, .fa-reorder:before, .fa-bars:before { content: "\f0c9"; } .fa-list-ul:before { content: "\f0ca"; } .fa-list-ol:before { content: "\f0cb"; } .fa-strikethrough:before { content: "\f0cc"; } .fa-underline:before { content: "\f0cd"; } .fa-table:before { content: "\f0ce"; } .fa-magic:before { content: "\f0d0"; } .fa-truck:before { content: "\f0d1"; } .fa-pinterest:before { content: "\f0d2"; } .fa-pinterest-square:before { content: "\f0d3"; } .fa-google-plus-square:before { content: "\f0d4"; } .fa-google-plus:before { content: "\f0d5"; } .fa-money:before { content: "\f0d6"; } .fa-caret-down:before { content: "\f0d7"; } .fa-caret-up:before { content: "\f0d8"; } .fa-caret-left:before { content: "\f0d9"; } .fa-caret-right:before { content: "\f0da"; } .fa-columns:before { content: "\f0db"; } .fa-unsorted:before, .fa-sort:before { content: "\f0dc"; } .fa-sort-down:before, .fa-sort-desc:before { content: "\f0dd"; } .fa-sort-up:before, .fa-sort-asc:before { content: "\f0de"; } .fa-envelope:before { content: "\f0e0"; } .fa-linkedin:before { content: "\f0e1"; } .fa-rotate-left:before, .fa-undo:before { content: "\f0e2"; } .fa-legal:before, .fa-gavel:before { content: "\f0e3"; } .fa-dashboard:before, .fa-tachometer:before { content: "\f0e4"; } .fa-comment-o:before { content: "\f0e5"; } .fa-comments-o:before { content: "\f0e6"; } .fa-flash:before, .fa-bolt:before { content: "\f0e7"; } .fa-sitemap:before { content: "\f0e8"; } .fa-umbrella:before { content: "\f0e9"; } .fa-paste:before, .fa-clipboard:before { content: "\f0ea"; } .fa-lightbulb-o:before { content: "\f0eb"; } .fa-exchange:before { content: "\f0ec"; } .fa-cloud-download:before { content: "\f0ed"; } .fa-cloud-upload:before { content: "\f0ee"; } .fa-user-md:before { content: "\f0f0"; } .fa-stethoscope:before { content: "\f0f1"; } .fa-suitcase:before { content: "\f0f2"; } .fa-bell-o:before { content: "\f0a2"; } .fa-coffee:before { content: "\f0f4"; } .fa-cutlery:before { content: "\f0f5"; } .fa-file-text-o:before { content: "\f0f6"; } .fa-building-o:before { content: "\f0f7"; } .fa-hospital-o:before { content: "\f0f8"; } .fa-ambulance:before { content: "\f0f9"; } .fa-medkit:before { content: "\f0fa"; } .fa-fighter-jet:before { content: "\f0fb"; } .fa-beer:before { content: "\f0fc"; } .fa-h-square:before { content: "\f0fd"; } .fa-plus-square:before { content: "\f0fe"; } .fa-angle-double-left:before { content: "\f100"; } .fa-angle-double-right:before { content: "\f101"; } .fa-angle-double-up:before { content: "\f102"; } .fa-angle-double-down:before { content: "\f103"; } .fa-angle-left:before { content: "\f104"; } .fa-angle-right:before { content: "\f105"; } .fa-angle-up:before { content: "\f106"; } .fa-angle-down:before { content: "\f107"; } .fa-desktop:before { content: "\f108"; } .fa-laptop:before { content: "\f109"; } .fa-tablet:before { content: "\f10a"; } .fa-mobile-phone:before, .fa-mobile:before { content: "\f10b"; } .fa-circle-o:before { content: "\f10c"; } .fa-quote-left:before { content: "\f10d"; } .fa-quote-right:before { content: "\f10e"; } .fa-spinner:before { content: "\f110"; } .fa-circle:before { content: "\f111"; } .fa-mail-reply:before, .fa-reply:before { content: "\f112"; } .fa-github-alt:before { content: "\f113"; } .fa-folder-o:before { content: "\f114"; } .fa-folder-open-o:before { content: "\f115"; } .fa-smile-o:before { content: "\f118"; } .fa-frown-o:before { content: "\f119"; } .fa-meh-o:before { content: "\f11a"; } .fa-gamepad:before { content: "\f11b"; } .fa-keyboard-o:before { content: "\f11c"; } .fa-flag-o:before { content: "\f11d"; } .fa-flag-checkered:before { content: "\f11e"; } .fa-terminal:before { content: "\f120"; } .fa-code:before { content: "\f121"; } .fa-mail-reply-all:before, .fa-reply-all:before { content: "\f122"; } .fa-star-half-empty:before, .fa-star-half-full:before, .fa-star-half-o:before { content: "\f123"; } .fa-location-arrow:before { content: "\f124"; } .fa-crop:before { content: "\f125"; } .fa-code-fork:before { content: "\f126"; } .fa-unlink:before, .fa-chain-broken:before { content: "\f127"; } .fa-question:before { content: "\f128"; } .fa-info:before { content: "\f129"; } .fa-exclamation:before { content: "\f12a"; } .fa-superscript:before { content: "\f12b"; } .fa-subscript:before { content: "\f12c"; } .fa-eraser:before { content: "\f12d"; } .fa-puzzle-piece:before { content: "\f12e"; } .fa-microphone:before { content: "\f130"; } .fa-microphone-slash:before { content: "\f131"; } .fa-shield:before { content: "\f132"; } .fa-calendar-o:before { content: "\f133"; } .fa-fire-extinguisher:before { content: "\f134"; } .fa-rocket:before { content: "\f135"; } .fa-maxcdn:before { content: "\f136"; } .fa-chevron-circle-left:before { content: "\f137"; } .fa-chevron-circle-right:before { content: "\f138"; } .fa-chevron-circle-up:before { content: "\f139"; } .fa-chevron-circle-down:before { content: "\f13a"; } .fa-html5:before { content: "\f13b"; } .fa-css3:before { content: "\f13c"; } .fa-anchor:before { content: "\f13d"; } .fa-unlock-alt:before { content: "\f13e"; } .fa-bullseye:before { content: "\f140"; } .fa-ellipsis-h:before { content: "\f141"; } .fa-ellipsis-v:before { content: "\f142"; } .fa-rss-square:before { content: "\f143"; } .fa-play-circle:before { content: "\f144"; } .fa-ticket:before { content: "\f145"; } .fa-minus-square:before { content: "\f146"; } .fa-minus-square-o:before { content: "\f147"; } .fa-level-up:before { content: "\f148"; } .fa-level-down:before { content: "\f149"; } .fa-check-square:before { content: "\f14a"; } .fa-pencil-square:before { content: "\f14b"; } .fa-external-link-square:before { content: "\f14c"; } .fa-share-square:before { content: "\f14d"; } .fa-compass:before { content: "\f14e"; } .fa-toggle-down:before, .fa-caret-square-o-down:before { content: "\f150"; } .fa-toggle-up:before, .fa-caret-square-o-up:before { content: "\f151"; } .fa-toggle-right:before, .fa-caret-square-o-right:before { content: "\f152"; } .fa-euro:before, .fa-eur:before { content: "\f153"; } .fa-gbp:before { content: "\f154"; } .fa-dollar:before, .fa-usd:before { content: "\f155"; } .fa-rupee:before, .fa-inr:before { content: "\f156"; } .fa-cny:before, .fa-rmb:before, .fa-yen:before, .fa-jpy:before { content: "\f157"; } .fa-ruble:before, .fa-rouble:before, .fa-rub:before { content: "\f158"; } .fa-won:before, .fa-krw:before { content: "\f159"; } .fa-bitcoin:before, .fa-btc:before { content: "\f15a"; } .fa-file:before { content: "\f15b"; } .fa-file-text:before { content: "\f15c"; } .fa-sort-alpha-asc:before { content: "\f15d"; } .fa-sort-alpha-desc:before { content: "\f15e"; } .fa-sort-amount-asc:before { content: "\f160"; } .fa-sort-amount-desc:before { content: "\f161"; } .fa-sort-numeric-asc:before { content: "\f162"; } .fa-sort-numeric-desc:before { content: "\f163"; } .fa-thumbs-up:before { content: "\f164"; } .fa-thumbs-down:before { content: "\f165"; } .fa-youtube-square:before { content: "\f166"; } .fa-youtube:before { content: "\f167"; } .fa-xing:before { content: "\f168"; } .fa-xing-square:before { content: "\f169"; } .fa-youtube-play:before { content: "\f16a"; } .fa-dropbox:before { content: "\f16b"; } .fa-stack-overflow:before { content: "\f16c"; } .fa-instagram:before { content: "\f16d"; } .fa-flickr:before { content: "\f16e"; } .fa-adn:before { content: "\f170"; } .fa-bitbucket:before { content: "\f171"; } .fa-bitbucket-square:before { content: "\f172"; } .fa-tumblr:before { content: "\f173"; } .fa-tumblr-square:before { content: "\f174"; } .fa-long-arrow-down:before { content: "\f175"; } .fa-long-arrow-up:before { content: "\f176"; } .fa-long-arrow-left:before { content: "\f177"; } .fa-long-arrow-right:before { content: "\f178"; } .fa-apple:before { content: "\f179"; } .fa-windows:before { content: "\f17a"; } .fa-android:before { content: "\f17b"; } .fa-linux:before { content: "\f17c"; } .fa-dribbble:before { content: "\f17d"; } .fa-skype:before { content: "\f17e"; } .fa-foursquare:before { content: "\f180"; } .fa-trello:before { content: "\f181"; } .fa-female:before { content: "\f182"; } .fa-male:before { content: "\f183"; } .fa-gittip:before { content: "\f184"; } .fa-sun-o:before { content: "\f185"; } .fa-moon-o:before { content: "\f186"; } .fa-archive:before { content: "\f187"; } .fa-bug:before { content: "\f188"; } .fa-vk:before { content: "\f189"; } .fa-weibo:before { content: "\f18a"; } .fa-renren:before { content: "\f18b"; } .fa-pagelines:before { content: "\f18c"; } .fa-stack-exchange:before { content: "\f18d"; } .fa-arrow-circle-o-right:before { content: "\f18e"; } .fa-arrow-circle-o-left:before { content: "\f190"; } .fa-toggle-left:before, .fa-caret-square-o-left:before { content: "\f191"; } .fa-dot-circle-o:before { content: "\f192"; } .fa-wheelchair:before { content: "\f193"; } .fa-vimeo-square:before { content: "\f194"; } .fa-turkish-lira:before, .fa-try:before { content: "\f195"; } .fa-plus-square-o:before { content: "\f196"; } .fa-space-shuttle:before { content: "\f197"; } .fa-slack:before { content: "\f198"; } .fa-envelope-square:before { content: "\f199"; } .fa-wordpress:before { content: "\f19a"; } .fa-openid:before { content: "\f19b"; } .fa-institution:before, .fa-bank:before, .fa-university:before { content: "\f19c"; } .fa-mortar-board:before, .fa-graduation-cap:before { content: "\f19d"; } .fa-yahoo:before { content: "\f19e"; } .fa-google:before { content: "\f1a0"; } .fa-reddit:before { content: "\f1a1"; } .fa-reddit-square:before { content: "\f1a2"; } .fa-stumbleupon-circle:before { content: "\f1a3"; } .fa-stumbleupon:before { content: "\f1a4"; } .fa-delicious:before { content: "\f1a5"; } .fa-digg:before { content: "\f1a6"; } .fa-pied-piper:before { content: "\f1a7"; } .fa-pied-piper-alt:before { content: "\f1a8"; } .fa-drupal:before { content: "\f1a9"; } .fa-joomla:before { content: "\f1aa"; } .fa-language:before { content: "\f1ab"; } .fa-fax:before { content: "\f1ac"; } .fa-building:before { content: "\f1ad"; } .fa-child:before { content: "\f1ae"; } .fa-paw:before { content: "\f1b0"; } .fa-spoon:before { content: "\f1b1"; } .fa-cube:before { content: "\f1b2"; } .fa-cubes:before { content: "\f1b3"; } .fa-behance:before { content: "\f1b4"; } .fa-behance-square:before { content: "\f1b5"; } .fa-steam:before { content: "\f1b6"; } .fa-steam-square:before { content: "\f1b7"; } .fa-recycle:before { content: "\f1b8"; } .fa-automobile:before, .fa-car:before { content: "\f1b9"; } .fa-cab:before, .fa-taxi:before { content: "\f1ba"; } .fa-tree:before { content: "\f1bb"; } .fa-spotify:before { content: "\f1bc"; } .fa-deviantart:before { content: "\f1bd"; } .fa-soundcloud:before { content: "\f1be"; } .fa-database:before { content: "\f1c0"; } .fa-file-pdf-o:before { content: "\f1c1"; } .fa-file-word-o:before { content: "\f1c2"; } .fa-file-excel-o:before { content: "\f1c3"; } .fa-file-powerpoint-o:before { content: "\f1c4"; } .fa-file-photo-o:before, .fa-file-picture-o:before, .fa-file-image-o:before { content: "\f1c5"; } .fa-file-zip-o:before, .fa-file-archive-o:before { content: "\f1c6"; } .fa-file-sound-o:before, .fa-file-audio-o:before { content: "\f1c7"; } .fa-file-movie-o:before, .fa-file-video-o:before { content: "\f1c8"; } .fa-file-code-o:before { content: "\f1c9"; } .fa-vine:before { content: "\f1ca"; } .fa-codepen:before { content: "\f1cb"; } .fa-jsfiddle:before { content: "\f1cc"; } .fa-life-bouy:before, .fa-life-buoy:before, .fa-life-saver:before, .fa-support:before, .fa-life-ring:before { content: "\f1cd"; } .fa-circle-o-notch:before { content: "\f1ce"; } .fa-ra:before, .fa-rebel:before { content: "\f1d0"; } .fa-ge:before, .fa-empire:before { content: "\f1d1"; } .fa-git-square:before { content: "\f1d2"; } .fa-git:before { content: "\f1d3"; } .fa-hacker-news:before { content: "\f1d4"; } .fa-tencent-weibo:before { content: "\f1d5"; } .fa-qq:before { content: "\f1d6"; } .fa-wechat:before, .fa-weixin:before { content: "\f1d7"; } .fa-send:before, .fa-paper-plane:before { content: "\f1d8"; } .fa-send-o:before, .fa-paper-plane-o:before { content: "\f1d9"; } .fa-history:before { content: "\f1da"; } .fa-circle-thin:before { content: "\f1db"; } .fa-header:before { content: "\f1dc"; } .fa-paragraph:before { content: "\f1dd"; } .fa-sliders:before { content: "\f1de"; } .fa-share-alt:before { content: "\f1e0"; } .fa-share-alt-square:before { content: "\f1e1"; } .fa-bomb:before { content: "\f1e2"; } .fa-soccer-ball-o:before, .fa-futbol-o:before { content: "\f1e3"; } .fa-tty:before { content: "\f1e4"; } .fa-binoculars:before { content: "\f1e5"; } .fa-plug:before { content: "\f1e6"; } .fa-slideshare:before { content: "\f1e7"; } .fa-twitch:before { content: "\f1e8"; } .fa-yelp:before { content: "\f1e9"; } .fa-newspaper-o:before { content: "\f1ea"; } .fa-wifi:before { content: "\f1eb"; } .fa-calculator:before { content: "\f1ec"; } .fa-paypal:before { content: "\f1ed"; } .fa-google-wallet:before { content: "\f1ee"; } .fa-cc-visa:before { content: "\f1f0"; } .fa-cc-mastercard:before { content: "\f1f1"; } .fa-cc-discover:before { content: "\f1f2"; } .fa-cc-amex:before { content: "\f1f3"; } .fa-cc-paypal:before { content: "\f1f4"; } .fa-cc-stripe:before { content: "\f1f5"; } .fa-bell-slash:before { content: "\f1f6"; } .fa-bell-slash-o:before { content: "\f1f7"; } .fa-trash:before { content: "\f1f8"; } .fa-copyright:before { content: "\f1f9"; } .fa-at:before { content: "\f1fa"; } .fa-eyedropper:before { content: "\f1fb"; } .fa-paint-brush:before { content: "\f1fc"; } .fa-birthday-cake:before { content: "\f1fd"; } .fa-area-chart:before { content: "\f1fe"; } .fa-pie-chart:before { content: "\f200"; } .fa-line-chart:before { content: "\f201"; } .fa-lastfm:before { content: "\f202"; } .fa-lastfm-square:before { content: "\f203"; } .fa-toggle-off:before { content: "\f204"; } .fa-toggle-on:before { content: "\f205"; } .fa-bicycle:before { content: "\f206"; } .fa-bus:before { content: "\f207"; } .fa-ioxhost:before { content: "\f208"; } .fa-angellist:before { content: "\f209"; } .fa-cc:before { content: "\f20a"; } .fa-shekel:before, .fa-sheqel:before, .fa-ils:before { content: "\f20b"; } .fa-meanpath:before { content: "\f20c"; } .w-row { width: 100%; } .w-row:before, .w-row:after { content: " "; display: table; } .w-row:after { clear: both; } .w-row:before, .w-row:after { content: " "; display: table; } .w-row:after { clear: both; } .w-row > [class^="w-"] { float: left; } .w-100 { width: 100%; } .w-95 { width: 95%; } .w-90 { width: 90%; } .w-85 { width: 85%; } .w-80 { width: 80%; } .w-75 { width: 75%; } .w-70 { width: 70%; } .w-65 { width: 65%; } .w-60 { width: 60%; } .w-55 { width: 55%; } .w-50 { width: 50%; } .w-45 { width: 45%; } .w-40 { width: 40%; } .w-35 { width: 35%; } .w-30 { width: 30%; } .w-25 { width: 25%; } .w-20 { width: 20%; } .w-15 { width: 15%; } .w-10 { width: 10%; } .w-5 { width: 5%; } .w-33 { width: 33.33333333%; } .w-66 { width: 66.66666667%; } @media (min-width: 768px) { .w-sm-100 { width: 100%; } .w-sm-95 { width: 95%; } .w-sm-90 { width: 90%; } .w-sm-85 { width: 85%; } .w-sm-80 { width: 80%; } .w-sm-75 { width: 75%; } .w-sm-70 { width: 70%; } .w-sm-65 { width: 65%; } .w-sm-60 { width: 60%; } .w-sm-55 { width: 55%; } .w-sm-50 { width: 50%; } .w-sm-45 { width: 45%; } .w-sm-40 { width: 40%; } .w-sm-35 { width: 35%; } .w-sm-30 { width: 30%; } .w-sm-25 { width: 25%; } .w-sm-20 { width: 20%; } .w-sm-15 { width: 15%; } .w-sm-10 { width: 10%; } .w-sm-5 { width: 5%; } .w-sm-33 { width: 33.33333333%; } .w-sm-66 { width: 66.66666667%; } } @media (min-width: 992px) { .w-md-100 { width: 100%; } .w-md-95 { width: 95%; } .w-md-90 { width: 90%; } .w-md-85 { width: 85%; } .w-md-80 { width: 80%; } .w-md-75 { width: 75%; } .w-md-70 { width: 70%; } .w-md-65 { width: 65%; } .w-md-60 { width: 60%; } .w-md-55 { width: 55%; } .w-md-50 { width: 50%; } .w-md-45 { width: 45%; } .w-md-40 { width: 40%; } .w-md-35 { width: 35%; } .w-md-30 { width: 30%; } .w-md-25 { width: 25%; } .w-md-20 { width: 20%; } .w-md-15 { width: 15%; } .w-md-10 { width: 10%; } .w-md-5 { width: 5%; } .w-md-33 { width: 33.33333333%; } .w-md-66 { width: 66.66666667%; } } @media (min-width: 1200px) { .w-lg-100 { width: 100%; } .w-lg-95 { width: 95%; } .w-lg-90 { width: 90%; } .w-lg-85 { width: 85%; } .w-lg-80 { width: 80%; } .w-lg-75 { width: 75%; } .w-lg-70 { width: 70%; } .w-lg-65 { width: 65%; } .w-lg-60 { width: 60%; } .w-lg-55 { width: 55%; } .w-lg-50 { width: 50%; } .w-lg-45 { width: 45%; } .w-lg-40 { width: 40%; } .w-lg-35 { width: 35%; } .w-lg-30 { width: 30%; } .w-lg-25 { width: 25%; } .w-lg-20 { width: 20%; } .w-lg-15 { width: 15%; } .w-lg-10 { width: 10%; } .w-lg-5 { width: 5%; } .w-lg-33 { width: 33.33333333%; } .w-lg-66 { width: 66.66666667%; } } .w-auto { width: auto; } @-ms-viewport { width: device-width; } .visible-xs, .visible-sm, .visible-md, .visible-lg { display: none !important; } @media (max-width: 767px) { .visible-xs { display: block !important; } table.visible-xs { display: table; } tr.visible-xs { display: table-row !important; } th.visible-xs, td.visible-xs { display: table-cell !important; } } @media (min-width: 768px) and (max-width: 991px) { .visible-sm { display: block !important; } table.visible-sm { display: table; } tr.visible-sm { display: table-row !important; } th.visible-sm, td.visible-sm { display: table-cell !important; } } @media (min-width: 992px) and (max-width: 1199px) { .visible-md { display: block !important; } table.visible-md { display: table; } tr.visible-md { display: table-row !important; } th.visible-md, td.visible-md { display: table-cell !important; } } @media (min-width: 1200px) { .visible-lg { display: block !important; } table.visible-lg { display: table; } tr.visible-lg { display: table-row !important; } th.visible-lg, td.visible-lg { display: table-cell !important; } } @media (max-width: 767px) { .hidden-xs { display: none !important; } } @media (min-width: 768px) and (max-width: 991px) { .hidden-sm { display: none !important; } } @media (min-width: 992px) and (max-width: 1199px) { .hidden-md { display: none !important; } } @media (min-width: 1200px) { .hidden-lg { display: none !important; } } .visible-print { display: none !important; } @media print { .visible-print { display: block !important; } table.visible-print { display: table; } tr.visible-print { display: table-row !important; } th.visible-print, td.visible-print { display: table-cell !important; } } @media print { .hidden-print { display: none !important; } } .clearfix:before, .clearfix:after, .form-horizontal .form-group:before, .form-horizontal .form-group:after, .container:before, .container:after, .container-xs:before, .container-xs:after, .container-sm:before, .container-sm:after, .container-md:before, .container-md:after, .container-lg:before, .container-lg:after, .container-fluid:before, .container-fluid:after, .row:before, .row:after, .btn-toolbar:before, .btn-toolbar:after, .btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after, .nav:before, .nav:after, .navbar:before, .navbar:after, .navbar-header:before, .navbar-header:after, .navbar-collapse:before, .navbar-collapse:after, .pager:before, .pager:after, .panel-body:before, .panel-body:after, .waimenu:before, .waimenu:after, .modal-footer:before, .modal-footer:after { content: " "; display: table; } .clearfix:after, .form-horizontal .form-group:after, .container:after, .container-xs:after, .container-sm:after, .container-md:after, .container-lg:after, .container-fluid:after, .row:after, .btn-toolbar:after, .btn-group-vertical > .btn-group:after, .nav:after, .navbar:after, .navbar-header:after, .navbar-collapse:after, .pager:after, .panel-body:after, .waimenu:after, .modal-footer:after { clear: both; } .center-block { display: block; margin-left: auto; margin-right: auto; } .pull-right { float: right !important; } .pull-left { float: left !important; } .pull-none { float: none !important; } .relative { position: relative !important; } .bottom, .top, .left, .right { position: absolute !important; } .top { top: 0 !important; } .right { right: 0 !important; } .bottom { bottom: 0 !important; } .left { left: 0 !important; } .v-middle { vertical-align: middle; } .hide, .hidden { display: none !important; visibility: hidden !important; } .show, .d-block { display: block !important; } .invisible { visibility: hidden; } .text-hide { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .d-inline { display: inline !important; } .d-inline-block { display: inline-block !important; } .d-table { display: table !important; } .d-table-row { display: table-row !important; } .d-table-cell { display: table-cell !important; } @media (min-width: 768px) { .hide-sm { display: none !important; visibility: hidden !important; } .show-sm, .d-block-sm { display: block !important; } .invisible-sm { visibility: hidden; } .text-hide-sm { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .d-inline-sm { display: inline !important; } .d-inline-block-sm { display: inline-block !important; } .d-table-sm { display: table !important; } .d-table-row-sm { display: table-row !important; } .d-table-cell-sm { display: table-cell !important; } } @media (min-width: 992px) { .hide-md { display: none !important; visibility: hidden !important; } .show-md, .d-block-md { display: block !important; } .invisible-md { visibility: hidden; } .text-hide-md { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .d-inline-md { display: inline !important; } .d-inline-block-md { display: inline-block !important; } .d-table-md { display: table !important; } .d-table-row-md { display: table-row !important; } .d-table-cell-md { display: table-cell !important; } } @media (min-width: 1200px) { .hide-lg { display: none !important; visibility: hidden !important; } .show-lg, .d-block-lg { display: block !important; } .invisible-lg { visibility: hidden; } .text-hide-lg { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .d-inline-lg { display: inline !important; } .d-inline-block-lg { display: inline-block !important; } .d-table-lg { display: table !important; } .d-table-row-lg { display: table-row !important; } .d-table-cell-lg { display: table-cell !important; } } .v-top, .v-middle, .v-bottom { display: block; font-size: 0; } .v-top > *, .v-middle > *, .v-bottom > * { display: inline-block; font-size: 14px; } .v-top > * { vertical-align: top; } .v-middle > * { vertical-align: middle; } .v-bottom > * { vertical-align: bottom; } .is-text-medium .v-top > *, .is-text-medium .v-middle > *, .is-text-medium .v-bottom > * { font-size: 15.96px; } .is-text-large .v-top > *, .is-text-large .v-middle > *, .is-text-large .v-bottom > * { font-size: 17.5px; } .ptn, .pvn, .pan { padding-top: 0 !important; } .pts, .pvs, .pas { padding-top: 7px !important; } .ptm, .pvm, .pam { padding-top: 15px !important; } .ptl, .pvl, .pal { padding-top: 30px !important; } .ptxl, .pvxl, .paxl { padding-top: 60px !important; } .prn, .phn, .pan { padding-right: 0 !important; } .prs, .phs, .pas { padding-right: 7px !important; } .prm, .phm, .pam { padding-right: 15px !important; } .prl, .phl, .pal { padding-right: 30px !important; } .prxl, .phxl, .paxl { padding-right: 60px !important; } .pbn, .pvn, .pan { padding-bottom: 0 !important; } .pbs, .pvs, .pas { padding-bottom: 7px !important; } .pbm, .pvm, .pam { padding-bottom: 15px !important; } .pbl, .pvl, .pal { padding-bottom: 30px !important; } .pbxl, .pvxl, .paxl { padding-bottom: 60px !important; } .pln, .phn, .pan { padding-left: 0 !important; } .pls, .phs, .pas { padding-left: 7px !important; } .plm, .phm, .pam { padding-left: 15px !important; } .pll, .phl, .pal { padding-left: 30px !important; } .plxl, .phxl, .paxl { padding-left: 60px !important; } .mtn, .mvn, .man { margin-top: 0 !important; } .mts, .mvs, .mas { margin-top: 7px !important; } .mtm, .mvm, .mam { margin-top: 15px !important; } .mtl, .mvl, .mal { margin-top: 30px !important; } .mtxl, .mvxl, .maxl { margin-top: 60px !important; } .mrn, .mhn, .man { margin-right: 0 !important; } .mrs, .mhs, .mas { margin-right: 7px !important; } .mrm, .mhm, .mam { margin-right: 15px !important; } .mrl, .mhl, .mal { margin-right: 30px !important; } .mrxl, .mhxl, .maxl { margin-right: 60px !important; } .mbn, .mvn, .man { margin-bottom: 0 !important; } .mbs, .mvs, .mas { margin-bottom: 7px !important; } .mbm, .mvm, .mam { margin-bottom: 15px !important; } .mbl, .mvl, .mal { margin-bottom: 30px !important; } .mbxl, .mvxl, .maxl { margin-bottom: 60px !important; } .mln, .mhn, .man { margin-left: 0 !important; } .mls, .mhs, .mas { margin-left: 7px !important; } .mlm, .mhm, .mam { margin-left: 15px !important; } .mll, .mhl, .mal { margin-left: 30px !important; } .mlxl, .mhxl, .maxl { margin-left: 60px !important; } @media (min-width: 768px) { .ptn-sm, .pvn-sm, .pan-sm { padding-top: 0 !important; } .pts-sm, .pvs-sm, .pas-sm { padding-top: 7px !important; } .ptm-sm, .pvm-sm, .pam-sm { padding-top: 15px !important; } .ptl-sm, .pvl-sm, .pal-sm { padding-top: 30px !important; } .ptxl-sm, .pvxl-sm, .paxl-sm { padding-top: 60px !important; } .prn-sm, .phn-sm, .pan-sm { padding-right: 0 !important; } .prs-sm, .phs-sm, .pas-sm { padding-right: 7px !important; } .prm-sm, .phm-sm, .pam-sm { padding-right: 15px !important; } .prl-sm, .phl-sm, .pal-sm { padding-right: 30px !important; } .prxl-sm, .phxl-sm, .paxl-sm { padding-right: 60px !important; } .pbn-sm, .pvn-sm, .pan-sm { padding-bottom: 0 !important; } .pbs-sm, .pvs-sm, .pas-sm { padding-bottom: 7px !important; } .pbm-sm, .pvm-sm, .pam-sm { padding-bottom: 15px !important; } .pbl-sm, .pvl-sm, .pal-sm { padding-bottom: 30px !important; } .pbxl-sm, .pvxl-sm, .paxl-sm { padding-bottom: 60px !important; } .pln-sm, .phn-sm, .pan-sm { padding-left: 0 !important; } .pls-sm, .phs-sm, .pas-sm { padding-left: 7px !important; } .plm-sm, .phm-sm, .pam-sm { padding-left: 15px !important; } .pll-sm, .phl-sm, .pal-sm { padding-left: 30px !important; } .plxl-sm, .phxl-sm, .paxl-sm { padding-left: 60px !important; } .mtn-sm, .mvn-sm, .man-sm { margin-top: 0 !important; } .mts-sm, .mvs-sm, .mas-sm { margin-top: 7px !important; } .mtm-sm, .mvm-sm, .mam-sm { margin-top: 15px !important; } .mtl-sm, .mvl-sm, .mal-sm { margin-top: 30px !important; } .mtxl-sm, .mvxl-sm, .maxl-sm { margin-top: 60px !important; } .mrn-sm, .mhn-sm, .man-sm { margin-right: 0 !important; } .mrs-sm, .mhs-sm, .mas-sm { margin-right: 7px !important; } .mrm-sm, .mhm-sm, .mam-sm { margin-right: 15px !important; } .mrl-sm, .mhl-sm, .mal-sm { margin-right: 30px !important; } .mrxl-sm, .mhxl-sm, .maxl-sm { margin-right: 60px !important; } .mbn-sm, .mvn-sm, .man-sm { margin-bottom: 0 !important; } .mbs-sm, .mvs-sm, .mas-sm { margin-bottom: 7px !important; } .mbm-sm, .mvm-sm, .mam-sm { margin-bottom: 15px !important; } .mbl-sm, .mvl-sm, .mal-sm { margin-bottom: 30px !important; } .mbxl-sm, .mvxl-sm, .maxl-sm { margin-bottom: 60px !important; } .mln-sm, .mhn-sm, .man-sm { margin-left: 0 !important; } .mls-sm, .mhs-sm, .mas-sm { margin-left: 7px !important; } .mlm-sm, .mhm-sm, .mam-sm { margin-left: 15px !important; } .mll-sm, .mhl-sm, .mal-sm { margin-left: 30px !important; } .mlxl-sm, .mhxl-sm, .maxl-sm { margin-left: 60px !important; } } @media (min-width: 992px) { .ptn-md, .pvn-md, .pan-md { padding-top: 0 !important; } .pts-md, .pvs-md, .pas-md { padding-top: 15px !important; } .ptm-md, .pvm-md, .pam-md { padding-top: 15px !important; } .ptl-md, .pvl-md, .pal-md { padding-top: 30px !important; } .ptxl-md, .pvxl-md, .paxl-md { padding-top: 60px !important; } .prn-md, .phn-md, .pan-md { padding-right: 0 !important; } .prs-md, .phs-md, .pas-md { padding-right: 15px !important; } .prm-md, .phm-md, .pam-md { padding-right: 15px !important; } .prl-md, .phl-md, .pal-md { padding-right: 30px !important; } .prxl-md, .phxl-md, .paxl-md { padding-right: 60px !important; } .pbn-md, .pvn-md, .pan-md { padding-bottom: 0 !important; } .pbs-md, .pvs-md, .pas-md { padding-bottom: 15px !important; } .pbm-md, .pvm-md, .pam-md { padding-bottom: 15px !important; } .pbl-md, .pvl-md, .pal-md { padding-bottom: 30px !important; } .pbxl-md, .pvxl-md, .paxl-md { padding-bottom: 60px !important; } .pln-md, .phn-md, .pan-md { padding-left: 0 !important; } .pls-md, .phs-md, .pas-md { padding-left: 15px !important; } .plm-md, .phm-md, .pam-md { padding-left: 15px !important; } .pll-md, .phl-md, .pal-md { padding-left: 30px !important; } .plxl-md, .phxl-md, .paxl-md { padding-left: 60px !important; } .mtn-md, .mvn-md, .man-md { margin-top: 0 !important; } .mts-md, .mvs-md, .mas-md { margin-top: 15px !important; } .mtm-md, .mvm-md, .mam-md { margin-top: 15px !important; } .mtl-md, .mvl-md, .mal-md { margin-top: 30px !important; } .mtxl-md, .mvxl-md, .maxl-md { margin-top: 60px !important; } .mrn-md, .mhn-md, .man-md { margin-right: 0 !important; } .mrs-md, .mhs-md, .mas-md { margin-right: 15px !important; } .mrm-md, .mhm-md, .mam-md { margin-right: 15px !important; } .mrl-md, .mhl-md, .mal-md { margin-right: 30px !important; } .mrxl-md, .mhxl-md, .maxl-md { margin-right: 60px !important; } .mbn-md, .mvn-md, .man-md { margin-bottom: 0 !important; } .mbs-md, .mvs-md, .mas-md { margin-bottom: 15px !important; } .mbm-md, .mvm-md, .mam-md { margin-bottom: 15px !important; } .mbl-md, .mvl-md, .mal-md { margin-bottom: 30px !important; } .mbxl-md, .mvxl-md, .maxl-md { margin-bottom: 60px !important; } .mln-md, .mhn-md, .man-md { margin-left: 0 !important; } .mls-md, .mhs-md, .mas-md { margin-left: 15px !important; } .mlm-md, .mhm-md, .mam-md { margin-left: 15px !important; } .mll-md, .mhl-md, .mal-md { margin-left: 30px !important; } .mlxl-md, .mhxl-md, .maxl-md { margin-left: 60px !important; } } @media (min-width: 1200px) { .ptn-lg, .pvn-lg, .pan-lg { padding-top: 0 !important; } .pts-lg, .pvs-lg, .pas-lg { padding-top: 30px !important; } .ptm-lg, .pvm-lg, .pam-lg { padding-top: 30px !important; } .ptl-lg, .pvl-lg, .pal-lg { padding-top: 30px !important; } .ptxl-lg, .pvxl-lg, .paxl-lg { padding-top: 60px !important; } .prn-lg, .phn-lg, .pan-lg { padding-right: 0 !important; } .prs-lg, .phs-lg, .pas-lg { padding-right: 30px !important; } .prm-lg, .phm-lg, .pam-lg { padding-right: 30px !important; } .prl-lg, .phl-lg, .pal-lg { padding-right: 30px !important; } .prxl-lg, .phxl-lg, .paxl-lg { padding-right: 60px !important; } .pbn-lg, .pvn-lg, .pan-lg { padding-bottom: 0 !important; } .pbs-lg, .pvs-lg, .pas-lg { padding-bottom: 30px !important; } .pbm-lg, .pvm-lg, .pam-lg { padding-bottom: 30px !important; } .pbl-lg, .pvl-lg, .pal-lg { padding-bottom: 30px !important; } .pbxl-lg, .pvxl-lg, .paxl-lg { padding-bottom: 60px !important; } .pln-lg, .phn-lg, .pan-lg { padding-left: 0 !important; } .pls-lg, .phs-lg, .pas-lg { padding-left: 30px !important; } .plm-lg, .phm-lg, .pam-lg { padding-left: 30px !important; } .pll-lg, .phl-lg, .pal-lg { padding-left: 30px !important; } .plxl-lg, .phxl-lg, .paxl-lg { padding-left: 60px !important; } .mtn-lg, .mvn-lg, .man-lg { margin-top: 0 !important; } .mts-lg, .mvs-lg, .mas-lg { margin-top: 30px !important; } .mtm-lg, .mvm-lg, .mam-lg { margin-top: 30px !important; } .mtl-lg, .mvl-lg, .mal-lg { margin-top: 30px !important; } .mtxl-lg, .mvxl-lg, .maxl-lg { margin-top: 60px !important; } .mrn-lg, .mhn-lg, .man-lg { margin-right: 0 !important; } .mrs-lg, .mhs-lg, .mas-lg { margin-right: 30px !important; } .mrm-lg, .mhm-lg, .mam-lg { margin-right: 30px !important; } .mrl-lg, .mhl-lg, .mal-lg { margin-right: 30px !important; } .mrxl-lg, .mhxl-lg, .maxl-lg { margin-right: 60px !important; } .mbn-lg, .mvn-lg, .man-lg { margin-bottom: 0 !important; } .mbs-lg, .mvs-lg, .mas-lg { margin-bottom: 30px !important; } .mbm-lg, .mvm-lg, .mam-lg { margin-bottom: 30px !important; } .mbl-lg, .mvl-lg, .mal-lg { margin-bottom: 30px !important; } .mbxl-lg, .mvxl-lg, .maxl-lg { margin-bottom: 60px !important; } .mln-lg, .mhn-lg, .man-lg { margin-left: 0 !important; } .mls-lg, .mhs-lg, .mas-lg { margin-left: 30px !important; } .mlm-lg, .mhm-lg, .mam-lg { margin-left: 30px !important; } .mll-lg, .mhl-lg, .mal-lg { margin-left: 30px !important; } .mlxl-lg, .mhxl-lg, .maxl-lg { margin-left: 60px !important; } } .bap, .bvp, .bhp, .btp, .brp, .bbp, .blp { border-color: #c25252; } .bas, .bvs, .bhs, .bts, .brs, .bbs, .bls { border-color: #987000; } .bab, .bvb, .bhb, .btb, .brb, .bbb, .blb { border-color: #000; } .baw, .bvw, .bhw, .btw, .brw, .bbw, .blw { border-color: #fff; } .btp, .bvp, .bap { border-top-width: 1px; border-top-style: solid; } .bts, .bvs, .bas { border-top-width: 1px; border-top-style: solid; } .btb, .bvb, .bab { border-top-width: 1px; border-top-style: solid; } .btw, .bvw, .baw { border-top-width: 1px; border-top-style: solid; } .brp, .bhp, .bap { border-right-width: 1px; border-right-style: solid; } .brs, .bhs, .bas { border-right-width: 1px; border-right-style: solid; } .brb, .bhb, .bab { border-right-width: 1px; border-right-style: solid; } .brw, .bhw, .baw { border-right-width: 1px; border-right-style: solid; } .bbp, .bvp, .bap { border-bottom-width: 1px; border-bottom-style: solid; } .bbs, .bvs, .bas { border-bottom-width: 1px; border-bottom-style: solid; } .bbb, .bvb, .bab { border-bottom-width: 1px; border-bottom-style: solid; } .bbw, .bvw, .baw { border-bottom-width: 1px; border-bottom-style: solid; } .blp, .bhp, .bap { border-left-width: 1px; border-left-style: solid; } .bls, .bhs, .bas { border-left-width: 1px; border-left-style: solid; } .blb, .bhb, .bab { border-left-width: 1px; border-left-style: solid; } .blw, .bhw, .baw { border-left-width: 1px; border-left-style: solid; } .break-word { width: 100%; word-wrap: break-word !important; } .break-ellipsis { width: 100%; overflow: hidden !important; text-overflow: ellipsis !important; } .break-reset { white-space: normal !important; word-break: normal !important; } .affix { position: fixed; } .color-light-grey { color: #666; } .bg-color-light-grey { background: #f5f5f5; } /*# sourceMappingURL=oocss.css.map */ ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=theme.css Content-Type: text/css; name=theme.css Content-Location: http://www.participa2014.cat/resultats/dades/css/theme.css Content-Transfer-Encoding: 8bit /* SOOCSS Library - v0.2.20140331222352 */ /*! * Collection of theme modifications for SOOCSS HTML objects library * Bootstrap version v3.1.0 (http://getbootstrap.com) * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome */ @font-face { font-family: 'OpenSansRegular'; src: url('../assets/fonts//OpenSans-Regular-webfont.eot'); src: local('☺'), url('../assets/fonts//OpenSans-Regular-webfont.woff') format('woff'), url('../assets/fonts//OpenSans-Regular-webfont.ttf') format('truetype'), url('../assets/fonts//OpenSans-Regular-webfont.svg') format('svg'); font-weight: normal; font-style: normal; } .nav-side { background: #1f1f1f; } .nav-side .nav-side-header { background: #161616; height: 50px; } .nav-side ul > li ul { background: 2b 2b 2b; } .nav-side ul > li ul li a:hover { background: #302f2f; } .nav-side ul > li > div { border-bottom: 1px solid #000000; } .nav-side ul > li > div a:hover { background: #302f2f; } .nav-side ul > li > div > i { color: #cccccc; } .nav-side ul > li > div > i:hover { background: #302f2f; color: #ffffff; cursor: pointer; } .nav-side a { color: #cccccc; text-decoration: none; } .nav-side a:hover { color: #ffffff; } /*# sourceMappingURL=theme.css.map */ ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=style.css Content-Type: text/css; name=style.css Content-Location: http://www.participa2014.cat/resultats/dades/css/style.css Content-Transfer-Encoding: 8bit /* TITOLS */ .participants { text-align: center; color: #000000; font-size: 18px; } .participants strong { font-size: 72px; color: #bf0000; } .titol-grafic { font-size: 20px; color: #000000; } .titol-ambit { color: #C00000; font-size: 18px; } .titol-taula { color: #C00000; font-size: 14px; display: block; } /* CATEGORIES RESPOSTES */ .categories-graphs { position: relative; font-size: 18px; display: block; margin-top: 10px; color: #333; } .categories-graphs li { position: relative; padding: 0 0px; list-style-type: none; line-height: 40px; text-align: left; white-space: nowrap; } /* TAULA RESULTATS */ .resultat-taula { display:block; margin-top: 10px; margin-bottom: 10px; } /* NAVEGACIO PESTANYES */ .pestanyes { text-align: right; list-style: none; margin: 0; padding: 0; line-height: 24px; position: relative; } .pestanyes li { margin: 0 10px; padding: 0 10px; border: 1px solid #AAA; background: #ECECEC; display: inline-block; border-top-left-radius: 6px; border-top-right-radius: 6px; } .pestanyes li.titulo { margin: 0 0px; padding: 0 0px; display: inline-block; float:left; border: 0px; background: #ffffff; border-top-left-radius: 0px; border-top-right-radius: 0px; color: #C00000; font-size: 20px; } .pestanyes li.selected { background: #C00000; color: #ffffff; } .pestanyes:after { position: absolute; content: ""; width: 100%; bottom: 0; left: 0; border-bottom: 1px solid #C00000; z-index: 1; } .pestanyes li a:link { text-decoration: none; } .pestanyes li a:visited { text-decoration: none; } .pestanyes li a:hover { text-decoration: none; } .pestanyes li a:active { text-decoration: none; } /* PEU PAGINA */ .peu-list-group-item-titol { position: relative; font-size: 24px; display: block; margin-bottom: -1px; color: #333; } .peu-list-group-item { margin-bottom: -1px; position: relative; padding: 0 0px; list-style-type: none; } .peu-list-group-item.bullet { margin-top: 0.25em; } .peu-list-group-item.bullet { list-style-type: none; border: medium none; border-radius: 0; margin-top: 0.35em; padding: 0; } footer .avis_legal p { color: #999; display: table; font-size: 0.688em; padding-left: 40px; width: 75%; } .list-group li a:link { text-decoration: none; } .list-group li a:visited { text-decoration: none; } .list-group li a:hover { text-decoration: none; } .list-group ti a:active { text-decoration: none; } /* MENU */ .menu-niv-0 { position: relative; font-size: 18px; display: block; margin-bottom: -1px; color: #333; } .menu-niv-0 li { margin-bottom: -1px; position: relative; padding: 0 0px; list-style-type: none; padding-left: 10px; border-bottom: 1px solid #CCCCCC; line-height: 2.4em; font-weight: bold; } .menu-niv-0 li selected { color: #C00000; } .menu-niv-0 li a:active { text-decoration: none; } .menu-niv-0 li a:link { text-decoration: none; } .menu-niv-0 li a:visited { text-decoration: none; } .menu-niv-0 li a:hover { text-decoration: none; } .menu-niv-1 { position: relative; font-size: 12px; display: block; margin-bottom: -1px; color: #333; white-space: nowrap; } .menu-niv-1 li { margin-bottom: -1px; position: relative; padding: 0 0px; list-style-type: none; text-align:right; line-height: 16px; border-bottom: 0px; font-weight: normal; } .menu-niv-1 li selected { color: #C00000; } .menu-niv-1 li a:active { text-decoration: none; } .menu-niv-1 li a:link { text-decoration: none; } .menu-niv-1 li a:visited { text-decoration: none; } .menu-niv-1 li a:hover { text-decoration: none; } /* Grid */ .show-grid { margin-bottom: 15px; } .show-grid [class^="col-"], .show-grid [class^="w-"] { padding-top: 10px; padding-bottom: 10px; background-color: #eee; border: 1px solid #ddd; background-color: rgba(180,180,180,.2); border: 1px solid rgba(86,61,124,.2); } .show-grid.show-space [class^="col-"]:after, .show-grid.show-space [class^="w-"]:after { display: block; content: ''; margin-top: -20px; padding-top: 20px; background-color: rgba(86,61,124,.15); } /* General example box */ .example { position: relative; padding: 55px 15px 15px; margin: 0 0 15px; border: 1px solid #ccc; border-radius: 5px; } .example:after { content: "Example"; position: absolute; top: 0; left: 0; padding: 10px 15px; font-size: 12px; font-weight: 700; color: #ccc; text-transform: uppercase; letter-spacing: 1px; width: 100%; background: #f9f9f9; border-bottom: 1px solid #ccc; border-top-left-radius: 5px; border-top-right-radius: 5px; } .example.is-contrast:after { content: "Example is-contrast"; background: #333; color: #999; border-bottom: 1px solid #fff; } .example.is-text-medium:after { content: "Example is-text-medium"; } .example.is-text-large:after { content: "Example is-text-large"; } /* Code box */ .snippet-container { position: relative; } .snippet-wrap:after { content: "Code"; position: absolute; top: 0; left: 0; padding: 10px 15px; font-size: 12px; font-weight: 700; color: #ccc; text-transform: uppercase; letter-spacing: 1px; width: 100%; background: #f9f9f9; border: 1px solid #ccc; border-top-left-radius: 5px; border-top-right-radius: 5px; } .sh_zellner.snippet-wrap { padding-top: 38px; } .snippet-wrap pre.sh_sourceCode { border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; } .sh_zellner .sh_sourceCode { background-color: #f9f9f9 !important; } .sh_zellner .sh_sourceCode .sh_keyword { color: #4b6980; } .sh_zellner .sh_sourceCode .sh_type { color: #6b02bd !important; } .sh_zellner .sh_sourceCode .sh_string { color: #a0292f !important; } .sh_zellner .sh_sourceCode .sh_comment { color: #737373 !important; } .sh_zellner .sh_sourceCode .sh_value { color: #a3282e !important; } .sh_zellner .sh_sourceCode .sh_url { color: #737373 !important; } /* Typography examples */ .doc-text-sizes > * { line-height: 42px; } .is-text-medium .doc-text-sizes > *, .is-text-large .doc-text-sizes > * { line-height: 80px; } /* Code examples */ .cm { color: #999; } .k { color: #006699; } .nt { color: #2f6f9f; } .na { color: #4f9fcf; } .s { color: #d44950; } /* log md box */ .log-box { border: 1px solid #eee; max-height: 250px; padding: 15px; overflow-x: hidden; overflow-y: auto; font-size: 0.857em; } .log-box h3, .log-box h4, .log-box h5, .log-box h6 { font-size: 1.083em; } /* responsive-utilities */ .responsive-utilities td.is-visible { text-align: center; color: #174b18; background-color: #dff0d8!important; } .responsive-utilities td.is-hidden { text-align: center; color: #5f5f5f; background-color: #f9f9f9!important; } .twitter-typeahead{ width:100%; } .tt-query { -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } .tt-hint { color: #999 } .tt-dropdown-menu { width: 100%; margin-top: 0px; padding: 8px 0; text-align: left; background-color: #fff; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, 0.2); -webkit-border-radius: 8px; -moz-border-radius: 8px; border-radius: 8px; -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2); -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2); box-shadow: 0 5px 10px rgba(0,0,0,.2); overflow-y:auto; max-height:300px; } .tt-suggestion { padding: 3px 20px; /* font-size: 18px; */ line-height: 24px; } .tt-suggestion.tt-cursor { color: #fff; background-color: #0097cf; } .tt-suggestion p { margin: 0; } #mask{ position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: #f5f5f5; display: none; z-index: 10000; } #popupTaula, #popup{ margin: 0; cursor: pointer; position: fixed; z-index: 10001; display: none; top:0; left:0; transform: none; padding:0px; overflow: auto; width:100%; height:100%; background-color:transparent; } #popupTaulaInterior{ margin:0; width: 810px; height: auto; min-height: 550px; background-color:#ffffff; border: 1px solid #333; } #popupInterior{ margin:0; width: 520px; height: auto; background-color:#ffffff; border: 1px solid #333; } footer { /*position: fixed;*/ bottom: 0; display:inline-block; width: 100%; background-color: #f5f5f5; border-top:1px solid #e3e3e3; padding-top:5px; padding-bottom:5px; padding-left: 19px; padding-right: 19px; color: #333333; font-family: "OpenSansRegular",Helvetica,Arial,sans-serif; font-size: 12px; } header .column ul.external_links li a, header .column ul.external_links li a:hover{ background:none; width:auto; font-size:1em} header .column ul.external_links li a:hover{ color:#fff} header ul.idioma{ float:right; margin-top:0.5em } header ul.external_links{ float:right; margin-top:0.5em } header ul.external_links li{ border-left:1px solid #717171} header ul.external_links li:first-child{ border:none;} header ul.external_links li a{ outline: medium none; padding: 0.25em; background: none repeat scroll 0 0 rgba(0, 0, 0, 0); font-size: 1em; width: auto; border-radius: 100%; color: #fff; display: inline; float: left; font-weight: normal; height: 2em; line-height: 1.25em; margin-left: 0.5em; margin-top: 8px; position: relative; text-align: center; font-size:16px; } fieldset{ width:100%; } header nav a.logo { /*background: url("../assets/img/NG_logo_generalitat.png") no-repeat scroll 0 0 rgba(0, 0, 0, 0);*/ height: 55px; margin: 0 0 5px 0; /*text-indent: -555em;*/ width: 200px; } #centrePopup{ max-width: 100%; width:auto; border: 1px solid; margin: 40px; font-size: 25px; } #divBenvingut{ font-size:30px; } #carregant_mun{ display: none; } @media print { #butTancaTaula, #butImprimir, #butonsTaules, #paginaNoImprimible, #imatgeCap, ul, footer{ display:none; } #popupTaulaInterior{ overflow: none; width:100%; height:auto; } } /*@media handheld{ #popup,#popupTaula { max-width: 800px; margin: 10px auto; border: 1px solid #333; background-color: #ffffff; cursor: pointer; padding: 10px; position: fixed; z-index: 10001; top:50%; left:50%; transform: translate(-50%, -50%); display: none; } #popupTaula table{ min-width:100%!important; } #centrePopup{ font-size:14px!important; } #divBenvingut{ font-size:18px; } }*/ ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=NG_logo_generalitat.png Content-Type: image/png; name=NG_logo_generalitat.png Content-Location: http://www.participa2014.cat/resultats/dades/assets/img/NG_logo_generalitat.png Content-Transfer-Encoding: Base64 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 ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=9Nparticipes.gif Content-Type: image/gif; name=9Nparticipes.gif Content-Location: http://www.participa2014.cat/resultats/dades/assets/img/9Nparticipes.gif Content-Transfer-Encoding: Base64 R0lGODlhsQB6AOYAADw5KvPy8ZmWjl1aTs7MyHt5brW1rktIOuLh34uJf2tpXPz8 +6WkncC/u9rY1lJQQ0dCM+3s6qupo3FtY5ORiFlVSdXU0IOCd0NBMru5tcXEv0pK QmRiV52clHZzat/e3bCvqUlFOOfm5WRiVcfGwpGOhUE9MKGel1tYS25rYczMzPf3 99jX1e/v7omGfbi3snJwZL28tn17cf///2llWo2Mg1JSSmFdUnp2bIF+dMW9vYWE epyUlNLRzq2spd7d2aOgmlFNQcvJxbKwq5WUi+vq6OXk4f/3962lnD87LPT08u/3 709LPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78i IGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxu czp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4w LWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPgog ICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIv MjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjph Ym91dD0iIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2Rj L2VsZW1lbnRzLzEuMS8iPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL2dpZjwv ZGM6Zm9ybWF0PgogICAgICAgICA8ZGM6dGl0bGU+CiAgICAgICAgICAgIDxyZGY6 QWx0PgogICAgICAgICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQi PkltcHJpbWlyPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkFsdD4KICAgICAg ICAgPC9kYzp0aXRsZT4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxy ZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnht cD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4bXA6 TWV0YWRhdGFEYXRlPjIwMTQtMTAtMTZUMTg6MzE6MjgrMDI6MDA8L3htcDpNZXRh ZGF0YURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE0LTEwLTE2VDE4 OjA3OjM3WjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0 ZT4yMDE0LTEwLTE2VDE4OjMwOjAzKzAyOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAg ICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBGaXJld29ya3MgQ1M1IDExLjAu MC40ODQgV2luZG93czwveG1wOkNyZWF0b3JUb29sPgogICAgICA8L3JkZjpEZXNj cmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAg ICAgICAgICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu MC9tbS8iCiAgICAgICAgICAgIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUu Y29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIgogICAgICAgICAgICB4bWxu czpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291 cmNlRXZlbnQjIj4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDpG ODdGMTE3NDA3MjA2ODExOTE1REZGMUY1ODYxREVERDwveG1wTU06SW5zdGFuY2VJ RD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDpGNzdGMTE3NDA3 MjA2ODExOTE1REZGMUY1ODYxREVERDwveG1wTU06RG9jdW1lbnRJRD4KICAgICAg ICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD51dWlkOjVEMjA4OTI0OTNCRkRC MTE5MTRBODU5MEQzMTUwOEM4PC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAg ICAgICAgIDx4bXBNTTpSZW5kaXRpb25DbGFzcz5wcm9vZjpwZGY8L3htcE1NOlJl bmRpdGlvbkNsYXNzPgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBh cnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJ RD54bXAuaWlkOkY3N0YxMTc0MDcyMDY4MTE5MTVERkYxRjU4NjFERUREPC9zdFJl ZjppbnN0YW5jZUlEPgogICAgICAgICAgICA8c3RSZWY6ZG9jdW1lbnRJRD54bXAu ZGlkOkY3N0YxMTc0MDcyMDY4MTE5MTVERkYxRjU4NjFERUREPC9zdFJlZjpkb2N1 bWVudElEPgogICAgICAgICAgICA8c3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPnV1 aWQ6NUQyMDg5MjQ5M0JGREIxMTkxNEE4NTkwRDMxNTA4Qzg8L3N0UmVmOm9yaWdp bmFsRG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOnJlbmRpdGlvbkNsYXNz PnByb29mOnBkZjwvc3RSZWY6cmVuZGl0aW9uQ2xhc3M+CiAgICAgICAgIDwveG1w TU06RGVyaXZlZEZyb20+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAg ICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VU eXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+ c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omlu c3RhbmNlSUQ+eG1wLmlpZDpGQTdGMTE3NDA3MjA2ODExODcxRkIzM0VCRjMzRkZB NDwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Ondo ZW4+MjAxNC0xMC0xNlQxODoyOTo1NyswMjowMDwvc3RFdnQ6d2hlbj4KICAgICAg ICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgSWxsdXN0cmF0 b3IgQ1M1LjE8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAg IDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAg IDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9 IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZl ZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFu Y2VJRD54bXAuaWlkOkZCN0YxMTc0MDcyMDY4MTE4NzFGQjMzRUJGMzNGRkE0PC9z dEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4y MDE0LTEwLTE2VDE4OjMwOjAzKzAyOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAg ICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBJbGx1c3RyYXRvciBD UzUuMTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0 RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9y ZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVz b3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNvbnZlcnRl ZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6cGFyYW1l dGVycz5mcm9tIGFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQgdG8gYXBwbGljYXRpb24v dm5kLmFkb2JlLnBob3Rvc2hvcDwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAg ICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNl VHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9u PnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpp bnN0YW5jZUlEPnhtcC5paWQ6Rjc3RjExNzQwNzIwNjgxMTkxNURGRjFGNTg2MURF REQ8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3 aGVuPjIwMTQtMTAtMTZUMTg6MzE6MjgrMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAg ICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hv cCBDUzUuMSBNYWNpbnRvc2g8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAg ICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAg ICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpw YXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFj dGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAg PHN0RXZ0OnBhcmFtZXRlcnM+ZnJvbSBhcHBsaWNhdGlvbi9wb3N0c2NyaXB0IHRv IGltYWdlL2pwZWc8L3N0RXZ0OnBhcmFtZXRlcnM+CiAgICAgICAgICAgICAgIDwv cmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJl c291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5kZXJpdmVk PC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpwYXJhbWV0 ZXJzPmNvbnZlcnRlZCBmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3No b3AgdG8gaW1hZ2UvanBlZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAg ICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlw ZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNh dmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0 YW5jZUlEPnhtcC5paWQ6Rjg3RjExNzQwNzIwNjgxMTkxNURGRjFGNTg2MURFREQ8 L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVu PjIwMTQtMTAtMTZUMTg6MzE6MjgrMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAg ICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBD UzUuMSBNYWNpbnRvc2g8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAg ICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAg ICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAg IDwveG1wTU06SGlzdG9yeT4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAg IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5z OmlsbHVzdHJhdG9yPSJodHRwOi8vbnMuYWRvYmUuY29tL2lsbHVzdHJhdG9yLzEu MC8iPgogICAgICAgICA8aWxsdXN0cmF0b3I6U3RhcnR1cFByb2ZpbGU+UHJpbnQ8 L2lsbHVzdHJhdG9yOlN0YXJ0dXBQcm9maWxlPgogICAgICA8L3JkZjpEZXNjcmlw dGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAg ICAgICAgeG1sbnM6eG1wVFBnPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv dC9wZy8iCiAgICAgICAgICAgIHhtbG5zOnN0RGltPSJodHRwOi8vbnMuYWRvYmUu Y29tL3hhcC8xLjAvc1R5cGUvRGltZW5zaW9ucyMiCiAgICAgICAgICAgIHhtbG5z OnhtcEc9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9nLyI+CiAgICAgICAg IDx4bXBUUGc6SGFzVmlzaWJsZU92ZXJwcmludD5GYWxzZTwveG1wVFBnOkhhc1Zp c2libGVPdmVycHJpbnQ+CiAgICAgICAgIDx4bXBUUGc6SGFzVmlzaWJsZVRyYW5z cGFyZW5jeT5GYWxzZTwveG1wVFBnOkhhc1Zpc2libGVUcmFuc3BhcmVuY3k+CiAg ICAgICAgIDx4bXBUUGc6TlBhZ2VzPjE8L3htcFRQZzpOUGFnZXM+CiAgICAgICAg IDx4bXBUUGc6TWF4UGFnZVNpemUgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgog ICAgICAgICAgICA8c3REaW06dz4yOTYuOTk5OTU5PC9zdERpbTp3PgogICAgICAg ICAgICA8c3REaW06aD4yMTAuMDAxNjUyPC9zdERpbTpoPgogICAgICAgICAgICA8 c3REaW06dW5pdD5NaWxsaW1ldGVyczwvc3REaW06dW5pdD4KICAgICAgICAgPC94 bXBUUGc6TWF4UGFnZVNpemU+CiAgICAgICAgIDx4bXBUUGc6UGxhdGVOYW1lcz4K ICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+Q3lh bjwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpPk1hZ2VudGE8L3JkZjps aT4KICAgICAgICAgICAgICAgPHJkZjpsaT5ZZWxsb3c8L3JkZjpsaT4KICAgICAg ICAgICAgICAgPHJkZjpsaT5CbGFjazwvcmRmOmxpPgogICAgICAgICAgICA8L3Jk ZjpTZXE+CiAgICAgICAgIDwveG1wVFBnOlBsYXRlTmFtZXM+CiAgICAgICAgIDx4 bXBUUGc6U3dhdGNoR3JvdXBzPgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAg ICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAg ICAgICAgICAgICAgIDx4bXBHOmdyb3VwTmFtZT5HcnVwbyBkZSBtdWVzdHJhcyBw b3IgZGVmZWN0bzwveG1wRzpncm91cE5hbWU+CiAgICAgICAgICAgICAgICAgIDx4 bXBHOmdyb3VwVHlwZT4wPC94bXBHOmdyb3VwVHlwZT4KICAgICAgICAgICAgICAg ICAgPHhtcEc6Q29sb3JhbnRzPgogICAgICAgICAgICAgICAgICAgICA8cmRmOlNl cT4KICAgICAgICAgICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBl PSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnN3 YXRjaE5hbWU+QmxhbmNvPC94bXBHOnN3YXRjaE5hbWU+CiAgICAgICAgICAgICAg ICAgICAgICAgICAgIDx4bXBHOm1vZGU+UkdCPC94bXBHOm1vZGU+CiAgICAgICAg ICAgICAgICAgICAgICAgICAgIDx4bXBHOnR5cGU+UFJPQ0VTUzwveG1wRzp0eXBl PgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpyZWQ+MjU1PC94bXBH OnJlZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6Z3JlZW4+MjU1 PC94bXBHOmdyZWVuPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpi bHVlPjI1NTwveG1wRzpibHVlPgogICAgICAgICAgICAgICAgICAgICAgICA8L3Jk ZjpsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VU eXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBH OnN3YXRjaE5hbWU+TmVncm88L3htcEc6c3dhdGNoTmFtZT4KICAgICAgICAgICAg ICAgICAgICAgICAgICAgPHhtcEc6bW9kZT5SR0I8L3htcEc6bW9kZT4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgPHhtcEc6dHlwZT5QUk9DRVNTPC94bXBHOnR5 cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnJlZD4yOTwveG1w RzpyZWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOmdyZWVuPjI5 PC94bXBHOmdyZWVuPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpi bHVlPjI3PC94bXBHOmJsdWU+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcmRm OmxpPgogICAgICAgICAgICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5 cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6 c3dhdGNoTmFtZT5Sb2pvIENNWUs8L3htcEc6c3dhdGNoTmFtZT4KICAgICAgICAg ICAgICAgICAgICAgICAgICAgPHhtcEc6bW9kZT5SR0I8L3htcEc6bW9kZT4KICAg ICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6dHlwZT5QUk9DRVNTPC94bXBH OnR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnJlZD4yMjc8 L3htcEc6cmVkPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpncmVl bj42PC94bXBHOmdyZWVuPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1w RzpibHVlPjE5PC94bXBHOmJsdWU+CiAgICAgICAgICAgICAgICAgICAgICAgIDwv cmRmOmxpPgogICAgICAgICAgICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJz ZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHht cEc6c3dhdGNoTmFtZT5BbWFyaWxsbyBDTVlLPC94bXBHOnN3YXRjaE5hbWU+CiAg ICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOm1vZGU+UkdCPC94bXBHOm1v ZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnR5cGU+UFJPQ0VT UzwveG1wRzp0eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpy ZWQ+MjU1PC94bXBHOnJlZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHht cEc6Z3JlZW4+MjM3PC94bXBHOmdyZWVuPgogICAgICAgICAgICAgICAgICAgICAg ICAgICA8eG1wRzpibHVlPjA8L3htcEc6Ymx1ZT4KICAgICAgICAgICAgICAgICAg ICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZGY6bGkg cmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICAgICAg ICAgICA8eG1wRzpzd2F0Y2hOYW1lPlZlcmRlIENNWUs8L3htcEc6c3dhdGNoTmFt ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6bW9kZT5SR0I8L3ht cEc6bW9kZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6dHlwZT5Q Uk9DRVNTPC94bXBHOnR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4 bXBHOnJlZD4wPC94bXBHOnJlZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAg PHhtcEc6Z3JlZW4+MTUwPC94bXBHOmdyZWVuPgogICAgICAgICAgICAgICAgICAg ICAgICAgICA8eG1wRzpibHVlPjY0PC94bXBHOmJsdWU+CiAgICAgICAgICAgICAg ICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICAgICAgICAgICA8cmRm OmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAg ICAgICAgICAgPHhtcEc6c3dhdGNoTmFtZT5DaWFuIENNWUs8L3htcEc6c3dhdGNo TmFtZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6bW9kZT5SR0I8 L3htcEc6bW9kZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6dHlw ZT5QUk9DRVNTPC94bXBHOnR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAg IDx4bXBHOnJlZD4wPC94bXBHOnJlZD4KICAgICAgICAgICAgICAgICAgICAgICAg ICAgPHhtcEc6Z3JlZW4+MTU5PC94bXBHOmdyZWVuPgogICAgICAgICAgICAgICAg ICAgICAgICAgICA8eG1wRzpibHVlPjIyNzwveG1wRzpibHVlPgogICAgICAgICAg ICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgICAgICAgICAg PHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAg ICAgICAgICAgICAgIDx4bXBHOnN3YXRjaE5hbWU+QXp1bCBDTVlLPC94bXBHOnN3 YXRjaE5hbWU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOm1vZGU+ UkdCPC94bXBHOm1vZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBH OnR5cGU+UFJPQ0VTUzwveG1wRzp0eXBlPgogICAgICAgICAgICAgICAgICAgICAg ICAgICA8eG1wRzpyZWQ+NDk8L3htcEc6cmVkPgogICAgICAgICAgICAgICAgICAg ICAgICAgICA8eG1wRzpncmVlbj4zOTwveG1wRzpncmVlbj4KICAgICAgICAgICAg ICAgICAgICAgICAgICAgPHhtcEc6Ymx1ZT4xMzE8L3htcEc6Ymx1ZT4KICAgICAg ICAgICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgICAgICAg ICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAg ICAgICAgICAgICAgICAgICA8eG1wRzpzd2F0Y2hOYW1lPk1hZ2VudGEgQ01ZSzwv eG1wRzpzd2F0Y2hOYW1lPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1w Rzptb2RlPlJHQjwveG1wRzptb2RlPgogICAgICAgICAgICAgICAgICAgICAgICAg ICA8eG1wRzp0eXBlPlBST0NFU1M8L3htcEc6dHlwZT4KICAgICAgICAgICAgICAg ICAgICAgICAgICAgPHhtcEc6cmVkPjIzMDwveG1wRzpyZWQ+CiAgICAgICAgICAg ICAgICAgICAgICAgICAgIDx4bXBHOmdyZWVuPjA8L3htcEc6Z3JlZW4+CiAgICAg ICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOmJsdWU+MTI2PC94bXBHOmJsdWU+ CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAg ICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAg ICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6c3dhdGNoTmFtZT5DPTE1IE09 MTAwIFk9OTAgSz0xMDwveG1wRzpzd2F0Y2hOYW1lPgogICAgICAgICAgICAgICAg ICAgICAgICAgICA8eG1wRzptb2RlPlJHQjwveG1wRzptb2RlPgogICAgICAgICAg ICAgICAgICAgICAgICAgICA8eG1wRzp0eXBlPlBST0NFU1M8L3htcEc6dHlwZT4K ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6cmVkPjE5MDwveG1wRzpy ZWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOmdyZWVuPjIyPC94 bXBHOmdyZWVuPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpibHVl PjM0PC94bXBHOmJsdWU+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcmRmOmxp PgogICAgICAgICAgICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9 IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6c3dh dGNoTmFtZT5DPTAgTT05MCBZPTg1IEs9MDwveG1wRzpzd2F0Y2hOYW1lPgogICAg ICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzptb2RlPlJHQjwveG1wRzptb2Rl PgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzp0eXBlPlBST0NFU1M8 L3htcEc6dHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6cmVk PjIzMDwveG1wRzpyZWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBH OmdyZWVuPjUxPC94bXBHOmdyZWVuPgogICAgICAgICAgICAgICAgICAgICAgICAg ICA8eG1wRzpibHVlPjQyPC94bXBHOmJsdWU+CiAgICAgICAgICAgICAgICAgICAg ICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICAgICAgICAgICA8cmRmOmxpIHJk ZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgICAgICAg ICAgPHhtcEc6c3dhdGNoTmFtZT5DPTAgTT04MCBZPTk1IEs9MDwveG1wRzpzd2F0 Y2hOYW1lPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzptb2RlPlJH QjwveG1wRzptb2RlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzp0 eXBlPlBST0NFU1M8L3htcEc6dHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAg ICAgPHhtcEc6cmVkPjIzMzwveG1wRzpyZWQ+CiAgICAgICAgICAgICAgICAgICAg ICAgICAgIDx4bXBHOmdyZWVuPjc4PC94bXBHOmdyZWVuPgogICAgICAgICAgICAg ICAgICAgICAgICAgICA8eG1wRzpibHVlPjI3PC94bXBHOmJsdWU+CiAgICAgICAg ICAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICAgICAgICAg ICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAg ICAgICAgICAgICAgICAgPHhtcEc6c3dhdGNoTmFtZT5DPTAgTT01MCBZPTEwMCBL PTA8L3htcEc6c3dhdGNoTmFtZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAg PHhtcEc6bW9kZT5SR0I8L3htcEc6bW9kZT4KICAgICAgICAgICAgICAgICAgICAg ICAgICAgPHhtcEc6dHlwZT5QUk9DRVNTPC94bXBHOnR5cGU+CiAgICAgICAgICAg ICAgICAgICAgICAgICAgIDx4bXBHOnJlZD4yNDM8L3htcEc6cmVkPgogICAgICAg ICAgICAgICAgICAgICAgICAgICA8eG1wRzpncmVlbj4xNDY8L3htcEc6Z3JlZW4+ CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOmJsdWU+MDwveG1wRzpi bHVlPgogICAgICAgICAgICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAg ICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+ CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnN3YXRjaE5hbWU+Qz0w IE09MzUgWT04NSBLPTA8L3htcEc6c3dhdGNoTmFtZT4KICAgICAgICAgICAgICAg ICAgICAgICAgICAgPHhtcEc6bW9kZT5SR0I8L3htcEc6bW9kZT4KICAgICAgICAg ICAgICAgICAgICAgICAgICAgPHhtcEc6dHlwZT5QUk9DRVNTPC94bXBHOnR5cGU+ CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnJlZD4yNDk8L3htcEc6 cmVkPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpncmVlbj4xNzg8 L3htcEc6Z3JlZW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOmJs dWU+NTE8L3htcEc6Ymx1ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9yZGY6 bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlw ZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpz d2F0Y2hOYW1lPkM9NSBNPTAgWT05MCBLPTA8L3htcEc6c3dhdGNoTmFtZT4KICAg ICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6bW9kZT5SR0I8L3htcEc6bW9k ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6dHlwZT5QUk9DRVNT PC94bXBHOnR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnJl ZD4yNTI8L3htcEc6cmVkPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1w RzpncmVlbj4yMzQ8L3htcEc6Z3JlZW4+CiAgICAgICAgICAgICAgICAgICAgICAg ICAgIDx4bXBHOmJsdWU+MTY8L3htcEc6Ymx1ZT4KICAgICAgICAgICAgICAgICAg ICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZGY6bGkg cmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICAgICAg ICAgICA8eG1wRzpzd2F0Y2hOYW1lPkM9MjAgTT0wIFk9MTAwIEs9MDwveG1wRzpz d2F0Y2hOYW1lPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzptb2Rl PlJHQjwveG1wRzptb2RlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1w Rzp0eXBlPlBST0NFU1M8L3htcEc6dHlwZT4KICAgICAgICAgICAgICAgICAgICAg ICAgICAgPHhtcEc6cmVkPjIyMjwveG1wRzpyZWQ+CiAgICAgICAgICAgICAgICAg ICAgICAgICAgIDx4bXBHOmdyZWVuPjIyMDwveG1wRzpncmVlbj4KICAgICAgICAg ICAgICAgICAgICAgICAgICAgPHhtcEc6Ymx1ZT4wPC94bXBHOmJsdWU+CiAgICAg ICAgICAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICAgICAg ICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAg ICAgICAgICAgICAgICAgICAgPHhtcEc6c3dhdGNoTmFtZT5DPTUwIE09MCBZPTEw MCBLPTA8L3htcEc6c3dhdGNoTmFtZT4KICAgICAgICAgICAgICAgICAgICAgICAg ICAgPHhtcEc6bW9kZT5SR0I8L3htcEc6bW9kZT4KICAgICAgICAgICAgICAgICAg ICAgICAgICAgPHhtcEc6dHlwZT5QUk9DRVNTPC94bXBHOnR5cGU+CiAgICAgICAg ICAgICAgICAgICAgICAgICAgIDx4bXBHOnJlZD4xNDk8L3htcEc6cmVkPgogICAg ICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpncmVlbj4xOTM8L3htcEc6Z3Jl ZW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOmJsdWU+MzE8L3ht cEc6Ymx1ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAg ICAgICAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3Vy Y2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpzd2F0Y2hOYW1l PkM9NzUgTT0wIFk9MTAwIEs9MDwveG1wRzpzd2F0Y2hOYW1lPgogICAgICAgICAg ICAgICAgICAgICAgICAgICA8eG1wRzptb2RlPlJHQjwveG1wRzptb2RlPgogICAg ICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzp0eXBlPlBST0NFU1M8L3htcEc6 dHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6cmVkPjU4PC94 bXBHOnJlZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6Z3JlZW4+ MTcwPC94bXBHOmdyZWVuPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1w RzpibHVlPjUzPC94bXBHOmJsdWU+CiAgICAgICAgICAgICAgICAgICAgICAgIDwv cmRmOmxpPgogICAgICAgICAgICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJz ZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHht cEc6c3dhdGNoTmFtZT5DPTg1IE09MTAgWT0xMDAgSz0xMDwveG1wRzpzd2F0Y2hO YW1lPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzptb2RlPlJHQjwv eG1wRzptb2RlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzp0eXBl PlBST0NFU1M8L3htcEc6dHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAg PHhtcEc6cmVkPjA8L3htcEc6cmVkPgogICAgICAgICAgICAgICAgICAgICAgICAg ICA8eG1wRzpncmVlbj4xNDE8L3htcEc6Z3JlZW4+CiAgICAgICAgICAgICAgICAg ICAgICAgICAgIDx4bXBHOmJsdWU+NTQ8L3htcEc6Ymx1ZT4KICAgICAgICAgICAg ICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxy ZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAg ICAgICAgICAgICA8eG1wRzpzd2F0Y2hOYW1lPkM9OTAgTT0zMCBZPTk1IEs9MzA8 L3htcEc6c3dhdGNoTmFtZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHht cEc6bW9kZT5SR0I8L3htcEc6bW9kZT4KICAgICAgICAgICAgICAgICAgICAgICAg ICAgPHhtcEc6dHlwZT5QUk9DRVNTPC94bXBHOnR5cGU+CiAgICAgICAgICAgICAg ICAgICAgICAgICAgIDx4bXBHOnJlZD4wPC94bXBHOnJlZD4KICAgICAgICAgICAg ICAgICAgICAgICAgICAgPHhtcEc6Z3JlZW4+MTAyPC94bXBHOmdyZWVuPgogICAg ICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpibHVlPjUxPC94bXBHOmJsdWU+ CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAg ICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAg ICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6c3dhdGNoTmFtZT5DPTc1IE09 MCBZPTc1IEs9MDwveG1wRzpzd2F0Y2hOYW1lPgogICAgICAgICAgICAgICAgICAg ICAgICAgICA8eG1wRzptb2RlPlJHQjwveG1wRzptb2RlPgogICAgICAgICAgICAg ICAgICAgICAgICAgICA8eG1wRzp0eXBlPlBST0NFU1M8L3htcEc6dHlwZT4KICAg ICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6cmVkPjQ3PC94bXBHOnJlZD4K ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6Z3JlZW4+MTcyPC94bXBH OmdyZWVuPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpibHVlPjEw MjwveG1wRzpibHVlPgogICAgICAgICAgICAgICAgICAgICAgICA8L3JkZjpsaT4K ICAgICAgICAgICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJS ZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnN3YXRj aE5hbWU+Qz04MCBNPTEwIFk9NDUgSz0wPC94bXBHOnN3YXRjaE5hbWU+CiAgICAg ICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOm1vZGU+UkdCPC94bXBHOm1vZGU+ CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnR5cGU+UFJPQ0VTUzwv eG1wRzp0eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpyZWQ+ MDwveG1wRzpyZWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOmdy ZWVuPjE2MTwveG1wRzpncmVlbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAg PHhtcEc6Ymx1ZT4xNTQ8L3htcEc6Ymx1ZT4KICAgICAgICAgICAgICAgICAgICAg ICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZGY6bGkgcmRm OnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICAgICAgICAg ICA8eG1wRzpzd2F0Y2hOYW1lPkM9NzAgTT0xNSBZPTAgSz0wPC94bXBHOnN3YXRj aE5hbWU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOm1vZGU+UkdC PC94bXBHOm1vZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnR5 cGU+UFJPQ0VTUzwveG1wRzp0eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAg ICA8eG1wRzpyZWQ+NTQ8L3htcEc6cmVkPgogICAgICAgICAgICAgICAgICAgICAg ICAgICA8eG1wRzpncmVlbj4xNjk8L3htcEc6Z3JlZW4+CiAgICAgICAgICAgICAg ICAgICAgICAgICAgIDx4bXBHOmJsdWU+MjI1PC94bXBHOmJsdWU+CiAgICAgICAg ICAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICAgICAgICAg ICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAg ICAgICAgICAgICAgICAgPHhtcEc6c3dhdGNoTmFtZT5DPTg1IE09NTAgWT0wIEs9 MDwveG1wRzpzd2F0Y2hOYW1lPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8 eG1wRzptb2RlPlJHQjwveG1wRzptb2RlPgogICAgICAgICAgICAgICAgICAgICAg ICAgICA8eG1wRzp0eXBlPlBST0NFU1M8L3htcEc6dHlwZT4KICAgICAgICAgICAg ICAgICAgICAgICAgICAgPHhtcEc6cmVkPjI5PC94bXBHOnJlZD4KICAgICAgICAg ICAgICAgICAgICAgICAgICAgPHhtcEc6Z3JlZW4+MTEzPC94bXBHOmdyZWVuPgog ICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpibHVlPjE4NDwveG1wRzpi bHVlPgogICAgICAgICAgICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAg ICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+ CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnN3YXRjaE5hbWU+Qz0x MDAgTT05NSBZPTUgSz0wPC94bXBHOnN3YXRjaE5hbWU+CiAgICAgICAgICAgICAg ICAgICAgICAgICAgIDx4bXBHOm1vZGU+UkdCPC94bXBHOm1vZGU+CiAgICAgICAg ICAgICAgICAgICAgICAgICAgIDx4bXBHOnR5cGU+UFJPQ0VTUzwveG1wRzp0eXBl PgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpyZWQ+NDU8L3htcEc6 cmVkPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpncmVlbj40Njwv eG1wRzpncmVlbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6Ymx1 ZT4xMzE8L3htcEc6Ymx1ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9yZGY6 bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlw ZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpz d2F0Y2hOYW1lPkM9MTAwIE09MTAwIFk9MjUgSz0yNTwveG1wRzpzd2F0Y2hOYW1l PgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzptb2RlPlJHQjwveG1w Rzptb2RlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzp0eXBlPlBS T0NFU1M8L3htcEc6dHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHht cEc6cmVkPjQxPC94bXBHOnJlZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAg PHhtcEc6Z3JlZW4+MzU8L3htcEc6Z3JlZW4+CiAgICAgICAgICAgICAgICAgICAg ICAgICAgIDx4bXBHOmJsdWU+OTI8L3htcEc6Ymx1ZT4KICAgICAgICAgICAgICAg ICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZGY6 bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICAg ICAgICAgICA8eG1wRzpzd2F0Y2hOYW1lPkM9NzUgTT0xMDAgWT0wIEs9MDwveG1w Rzpzd2F0Y2hOYW1lPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpt b2RlPlJHQjwveG1wRzptb2RlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8 eG1wRzp0eXBlPlBST0NFU1M8L3htcEc6dHlwZT4KICAgICAgICAgICAgICAgICAg ICAgICAgICAgPHhtcEc6cmVkPjEwMjwveG1wRzpyZWQ+CiAgICAgICAgICAgICAg ICAgICAgICAgICAgIDx4bXBHOmdyZWVuPjM2PC94bXBHOmdyZWVuPgogICAgICAg ICAgICAgICAgICAgICAgICAgICA8eG1wRzpibHVlPjEzMTwveG1wRzpibHVlPgog ICAgICAgICAgICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAg ICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAg ICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnN3YXRjaE5hbWU+Qz01MCBNPTEw MCBZPTAgSz0wPC94bXBHOnN3YXRjaE5hbWU+CiAgICAgICAgICAgICAgICAgICAg ICAgICAgIDx4bXBHOm1vZGU+UkdCPC94bXBHOm1vZGU+CiAgICAgICAgICAgICAg ICAgICAgICAgICAgIDx4bXBHOnR5cGU+UFJPQ0VTUzwveG1wRzp0eXBlPgogICAg ICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpyZWQ+MTQ5PC94bXBHOnJlZD4K ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6Z3JlZW4+Mjc8L3htcEc6 Z3JlZW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOmJsdWU+MTI5 PC94bXBHOmJsdWU+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcmRmOmxpPgog ICAgICAgICAgICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJl c291cmNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6c3dhdGNo TmFtZT5DPTM1IE09MTAwIFk9MzUgSz0xMDwveG1wRzpzd2F0Y2hOYW1lPgogICAg ICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzptb2RlPlJHQjwveG1wRzptb2Rl PgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzp0eXBlPlBST0NFU1M8 L3htcEc6dHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6cmVk PjE2MzwveG1wRzpyZWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBH OmdyZWVuPjI1PC94bXBHOmdyZWVuPgogICAgICAgICAgICAgICAgICAgICAgICAg ICA8eG1wRzpibHVlPjkxPC94bXBHOmJsdWU+CiAgICAgICAgICAgICAgICAgICAg ICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICAgICAgICAgICA8cmRmOmxpIHJk ZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgICAgICAg ICAgPHhtcEc6c3dhdGNoTmFtZT5DPTEwIE09MTAwIFk9NTAgSz0wPC94bXBHOnN3 YXRjaE5hbWU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOm1vZGU+ UkdCPC94bXBHOm1vZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBH OnR5cGU+UFJPQ0VTUzwveG1wRzp0eXBlPgogICAgICAgICAgICAgICAgICAgICAg ICAgICA8eG1wRzpyZWQ+MjE0PC94bXBHOnJlZD4KICAgICAgICAgICAgICAgICAg ICAgICAgICAgPHhtcEc6Z3JlZW4+MTE8L3htcEc6Z3JlZW4+CiAgICAgICAgICAg ICAgICAgICAgICAgICAgIDx4bXBHOmJsdWU+ODI8L3htcEc6Ymx1ZT4KICAgICAg ICAgICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgICAgICAg ICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAg ICAgICAgICAgICAgICAgICA8eG1wRzpzd2F0Y2hOYW1lPkM9MCBNPTk1IFk9MjAg Sz0wPC94bXBHOnN3YXRjaE5hbWU+CiAgICAgICAgICAgICAgICAgICAgICAgICAg IDx4bXBHOm1vZGU+UkdCPC94bXBHOm1vZGU+CiAgICAgICAgICAgICAgICAgICAg ICAgICAgIDx4bXBHOnR5cGU+UFJPQ0VTUzwveG1wRzp0eXBlPgogICAgICAgICAg ICAgICAgICAgICAgICAgICA8eG1wRzpyZWQ+MjMxPC94bXBHOnJlZD4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgPHhtcEc6Z3JlZW4+Mjk8L3htcEc6Z3JlZW4+ CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOmJsdWU+MTE1PC94bXBH OmJsdWU+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAg ICAgICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNl Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6c3dhdGNoTmFtZT5D PTI1IE09MjUgWT00MCBLPTA8L3htcEc6c3dhdGNoTmFtZT4KICAgICAgICAgICAg ICAgICAgICAgICAgICAgPHhtcEc6bW9kZT5SR0I8L3htcEc6bW9kZT4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgPHhtcEc6dHlwZT5QUk9DRVNTPC94bXBHOnR5 cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnJlZD4yMDM8L3ht cEc6cmVkPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpncmVlbj4x ODc8L3htcEc6Z3JlZW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBH OmJsdWU+MTYwPC94bXBHOmJsdWU+CiAgICAgICAgICAgICAgICAgICAgICAgIDwv cmRmOmxpPgogICAgICAgICAgICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJz ZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHht cEc6c3dhdGNoTmFtZT5DPTQwIE09NDUgWT01MCBLPTU8L3htcEc6c3dhdGNoTmFt ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6bW9kZT5SR0I8L3ht cEc6bW9kZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6dHlwZT5Q Uk9DRVNTPC94bXBHOnR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4 bXBHOnJlZD4xNjQ8L3htcEc6cmVkPgogICAgICAgICAgICAgICAgICAgICAgICAg ICA8eG1wRzpncmVlbj4xMzg8L3htcEc6Z3JlZW4+CiAgICAgICAgICAgICAgICAg ICAgICAgICAgIDx4bXBHOmJsdWU+MTIzPC94bXBHOmJsdWU+CiAgICAgICAgICAg ICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICAgICAgICAgICA8 cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAg ICAgICAgICAgICAgPHhtcEc6c3dhdGNoTmFtZT5DPTUwIE09NTAgWT02MCBLPTI1 PC94bXBHOnN3YXRjaE5hbWU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4 bXBHOm1vZGU+UkdCPC94bXBHOm1vZGU+CiAgICAgICAgICAgICAgICAgICAgICAg ICAgIDx4bXBHOnR5cGU+UFJPQ0VTUzwveG1wRzp0eXBlPgogICAgICAgICAgICAg ICAgICAgICAgICAgICA8eG1wRzpyZWQ+MTIzPC94bXBHOnJlZD4KICAgICAgICAg ICAgICAgICAgICAgICAgICAgPHhtcEc6Z3JlZW4+MTA2PC94bXBHOmdyZWVuPgog ICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpibHVlPjg4PC94bXBHOmJs dWU+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAg ICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4K ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6c3dhdGNoTmFtZT5DPTU1 IE09NjAgWT02NSBLPTQwPC94bXBHOnN3YXRjaE5hbWU+CiAgICAgICAgICAgICAg ICAgICAgICAgICAgIDx4bXBHOm1vZGU+UkdCPC94bXBHOm1vZGU+CiAgICAgICAg ICAgICAgICAgICAgICAgICAgIDx4bXBHOnR5cGU+UFJPQ0VTUzwveG1wRzp0eXBl PgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpyZWQ+OTk8L3htcEc6 cmVkPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpncmVlbj43ODwv eG1wRzpncmVlbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6Ymx1 ZT42NjwveG1wRzpibHVlPgogICAgICAgICAgICAgICAgICAgICAgICA8L3JkZjps aT4KICAgICAgICAgICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBl PSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnN3 YXRjaE5hbWU+Qz0yNSBNPTQwIFk9NjUgSz0wPC94bXBHOnN3YXRjaE5hbWU+CiAg ICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOm1vZGU+UkdCPC94bXBHOm1v ZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnR5cGU+UFJPQ0VT UzwveG1wRzp0eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpy ZWQ+MjAyPC94bXBHOnJlZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHht cEc6Z3JlZW4+MTU4PC94bXBHOmdyZWVuPgogICAgICAgICAgICAgICAgICAgICAg ICAgICA8eG1wRzpibHVlPjEwMzwveG1wRzpibHVlPgogICAgICAgICAgICAgICAg ICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPHJkZjps aSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgICAg ICAgICAgIDx4bXBHOnN3YXRjaE5hbWU+Qz0zMCBNPTUwIFk9NzUgSz0xMDwveG1w Rzpzd2F0Y2hOYW1lPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpt b2RlPlJHQjwveG1wRzptb2RlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8 eG1wRzp0eXBlPlBST0NFU1M8L3htcEc6dHlwZT4KICAgICAgICAgICAgICAgICAg ICAgICAgICAgPHhtcEc6cmVkPjE3NzwveG1wRzpyZWQ+CiAgICAgICAgICAgICAg ICAgICAgICAgICAgIDx4bXBHOmdyZWVuPjEyNzwveG1wRzpncmVlbj4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgPHhtcEc6Ymx1ZT43NDwveG1wRzpibHVlPgog ICAgICAgICAgICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAg ICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAg ICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnN3YXRjaE5hbWU+Qz0zNSBNPTYw IFk9ODAgSz0yNTwveG1wRzpzd2F0Y2hOYW1lPgogICAgICAgICAgICAgICAgICAg ICAgICAgICA8eG1wRzptb2RlPlJHQjwveG1wRzptb2RlPgogICAgICAgICAgICAg ICAgICAgICAgICAgICA8eG1wRzp0eXBlPlBST0NFU1M8L3htcEc6dHlwZT4KICAg ICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6cmVkPjE0NzwveG1wRzpyZWQ+ CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOmdyZWVuPjk2PC94bXBH OmdyZWVuPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpibHVlPjU1 PC94bXBHOmJsdWU+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcmRmOmxpPgog ICAgICAgICAgICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJl c291cmNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6c3dhdGNo TmFtZT5DPTQwIE09NjUgWT05MCBLPTM1PC94bXBHOnN3YXRjaE5hbWU+CiAgICAg ICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOm1vZGU+UkdCPC94bXBHOm1vZGU+ CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnR5cGU+UFJPQ0VTUzwv eG1wRzp0eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpyZWQ+ MTI1PC94bXBHOnJlZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6 Z3JlZW4+Nzg8L3htcEc6Z3JlZW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAg IDx4bXBHOmJsdWU+MzY8L3htcEc6Ymx1ZT4KICAgICAgICAgICAgICAgICAgICAg ICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZGY6bGkgcmRm OnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICAgICAgICAg ICA8eG1wRzpzd2F0Y2hOYW1lPkM9NDAgTT03MCBZPTEwMCBLPTUwPC94bXBHOnN3 YXRjaE5hbWU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOm1vZGU+ UkdCPC94bXBHOm1vZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBH OnR5cGU+UFJPQ0VTUzwveG1wRzp0eXBlPgogICAgICAgICAgICAgICAgICAgICAg ICAgICA8eG1wRzpyZWQ+MTA0PC94bXBHOnJlZD4KICAgICAgICAgICAgICAgICAg ICAgICAgICAgPHhtcEc6Z3JlZW4+NjA8L3htcEc6Z3JlZW4+CiAgICAgICAgICAg ICAgICAgICAgICAgICAgIDx4bXBHOmJsdWU+MTc8L3htcEc6Ymx1ZT4KICAgICAg ICAgICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgICAgICAg ICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAg ICAgICAgICAgICAgICAgICA8eG1wRzpzd2F0Y2hOYW1lPkM9NTAgTT03MCBZPTgw IEs9NzA8L3htcEc6c3dhdGNoTmFtZT4KICAgICAgICAgICAgICAgICAgICAgICAg ICAgPHhtcEc6bW9kZT5SR0I8L3htcEc6bW9kZT4KICAgICAgICAgICAgICAgICAg ICAgICAgICAgPHhtcEc6dHlwZT5QUk9DRVNTPC94bXBHOnR5cGU+CiAgICAgICAg ICAgICAgICAgICAgICAgICAgIDx4bXBHOnJlZD42NzwveG1wRzpyZWQ+CiAgICAg ICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOmdyZWVuPjQxPC94bXBHOmdyZWVu PgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpibHVlPjI0PC94bXBH OmJsdWU+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAg ICAgICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgICAgICAgICAgIDwveG1w RzpDb2xvcmFudHM+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAg ICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAg ICAgICAgICAgPHhtcEc6Z3JvdXBOYW1lPkdyaXNlczwveG1wRzpncm91cE5hbWU+ CiAgICAgICAgICAgICAgICAgIDx4bXBHOmdyb3VwVHlwZT4xPC94bXBHOmdyb3Vw VHlwZT4KICAgICAgICAgICAgICAgICAgPHhtcEc6Q29sb3JhbnRzPgogICAgICAg ICAgICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgICAgICAgICAg PHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAg ICAgICAgICAgICAgIDx4bXBHOnN3YXRjaE5hbWU+Qz0wIE09MCBZPTAgSz0xMDA8 L3htcEc6c3dhdGNoTmFtZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHht cEc6bW9kZT5SR0I8L3htcEc6bW9kZT4KICAgICAgICAgICAgICAgICAgICAgICAg ICAgPHhtcEc6dHlwZT5QUk9DRVNTPC94bXBHOnR5cGU+CiAgICAgICAgICAgICAg ICAgICAgICAgICAgIDx4bXBHOnJlZD4yOTwveG1wRzpyZWQ+CiAgICAgICAgICAg ICAgICAgICAgICAgICAgIDx4bXBHOmdyZWVuPjI5PC94bXBHOmdyZWVuPgogICAg ICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpibHVlPjI3PC94bXBHOmJsdWU+ CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAg ICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAg ICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6c3dhdGNoTmFtZT5DPTAgTT0w IFk9MCBLPTkwPC94bXBHOnN3YXRjaE5hbWU+CiAgICAgICAgICAgICAgICAgICAg ICAgICAgIDx4bXBHOm1vZGU+UkdCPC94bXBHOm1vZGU+CiAgICAgICAgICAgICAg ICAgICAgICAgICAgIDx4bXBHOnR5cGU+UFJPQ0VTUzwveG1wRzp0eXBlPgogICAg ICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpyZWQ+NjA8L3htcEc6cmVkPgog ICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpncmVlbj42MDwveG1wRzpn cmVlbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6Ymx1ZT41OTwv eG1wRzpibHVlPgogICAgICAgICAgICAgICAgICAgICAgICA8L3JkZjpsaT4KICAg ICAgICAgICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNv dXJjZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnN3YXRjaE5h bWU+Qz0wIE09MCBZPTAgSz04MDwveG1wRzpzd2F0Y2hOYW1lPgogICAgICAgICAg ICAgICAgICAgICAgICAgICA8eG1wRzptb2RlPlJHQjwveG1wRzptb2RlPgogICAg ICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzp0eXBlPlBST0NFU1M8L3htcEc6 dHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6cmVkPjg3PC94 bXBHOnJlZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6Z3JlZW4+ ODc8L3htcEc6Z3JlZW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBH OmJsdWU+ODY8L3htcEc6Ymx1ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9y ZGY6bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNl VHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1w Rzpzd2F0Y2hOYW1lPkM9MCBNPTAgWT0wIEs9NzA8L3htcEc6c3dhdGNoTmFtZT4K ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6bW9kZT5SR0I8L3htcEc6 bW9kZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6dHlwZT5QUk9D RVNTPC94bXBHOnR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBH OnJlZD4xMTI8L3htcEc6cmVkPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8 eG1wRzpncmVlbj4xMTE8L3htcEc6Z3JlZW4+CiAgICAgICAgICAgICAgICAgICAg ICAgICAgIDx4bXBHOmJsdWU+MTExPC94bXBHOmJsdWU+CiAgICAgICAgICAgICAg ICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICAgICAgICAgICA8cmRm OmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAg ICAgICAgICAgPHhtcEc6c3dhdGNoTmFtZT5DPTAgTT0wIFk9MCBLPTYwPC94bXBH OnN3YXRjaE5hbWU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOm1v ZGU+UkdCPC94bXBHOm1vZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4 bXBHOnR5cGU+UFJPQ0VTUzwveG1wRzp0eXBlPgogICAgICAgICAgICAgICAgICAg ICAgICAgICA8eG1wRzpyZWQ+MTM1PC94bXBHOnJlZD4KICAgICAgICAgICAgICAg ICAgICAgICAgICAgPHhtcEc6Z3JlZW4+MTM1PC94bXBHOmdyZWVuPgogICAgICAg ICAgICAgICAgICAgICAgICAgICA8eG1wRzpibHVlPjEzNTwveG1wRzpibHVlPgog ICAgICAgICAgICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAg ICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAg ICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnN3YXRjaE5hbWU+Qz0wIE09MCBZ PTAgSz01MDwveG1wRzpzd2F0Y2hOYW1lPgogICAgICAgICAgICAgICAgICAgICAg ICAgICA8eG1wRzptb2RlPlJHQjwveG1wRzptb2RlPgogICAgICAgICAgICAgICAg ICAgICAgICAgICA8eG1wRzp0eXBlPlBST0NFU1M8L3htcEc6dHlwZT4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgPHhtcEc6cmVkPjE1NzwveG1wRzpyZWQ+CiAg ICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOmdyZWVuPjE1NzwveG1wRzpn cmVlbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6Ymx1ZT4xNTY8 L3htcEc6Ymx1ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAg ICAgICAgICAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVz b3VyY2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpzd2F0Y2hO YW1lPkM9MCBNPTAgWT0wIEs9NDA8L3htcEc6c3dhdGNoTmFtZT4KICAgICAgICAg ICAgICAgICAgICAgICAgICAgPHhtcEc6bW9kZT5SR0I8L3htcEc6bW9kZT4KICAg ICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6dHlwZT5QUk9DRVNTPC94bXBH OnR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnJlZD4xNzg8 L3htcEc6cmVkPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpncmVl bj4xNzg8L3htcEc6Z3JlZW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4 bXBHOmJsdWU+MTc4PC94bXBHOmJsdWU+CiAgICAgICAgICAgICAgICAgICAgICAg IDwvcmRmOmxpPgogICAgICAgICAgICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpw YXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAg PHhtcEc6c3dhdGNoTmFtZT5DPTAgTT0wIFk9MCBLPTMwPC94bXBHOnN3YXRjaE5h bWU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOm1vZGU+UkdCPC94 bXBHOm1vZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnR5cGU+ UFJPQ0VTUzwveG1wRzp0eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8 eG1wRzpyZWQ+MTk4PC94bXBHOnJlZD4KICAgICAgICAgICAgICAgICAgICAgICAg ICAgPHhtcEc6Z3JlZW4+MTk4PC94bXBHOmdyZWVuPgogICAgICAgICAgICAgICAg ICAgICAgICAgICA8eG1wRzpibHVlPjE5ODwveG1wRzpibHVlPgogICAgICAgICAg ICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgICAgICAgICAg PHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAg ICAgICAgICAgICAgIDx4bXBHOnN3YXRjaE5hbWU+Qz0wIE09MCBZPTAgSz0yMDwv eG1wRzpzd2F0Y2hOYW1lPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1w Rzptb2RlPlJHQjwveG1wRzptb2RlPgogICAgICAgICAgICAgICAgICAgICAgICAg ICA8eG1wRzp0eXBlPlBST0NFU1M8L3htcEc6dHlwZT4KICAgICAgICAgICAgICAg ICAgICAgICAgICAgPHhtcEc6cmVkPjIxODwveG1wRzpyZWQ+CiAgICAgICAgICAg ICAgICAgICAgICAgICAgIDx4bXBHOmdyZWVuPjIxODwveG1wRzpncmVlbj4KICAg ICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6Ymx1ZT4yMTg8L3htcEc6Ymx1 ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAg ICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgog ICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpzd2F0Y2hOYW1lPkM9MCBN PTAgWT0wIEs9MTA8L3htcEc6c3dhdGNoTmFtZT4KICAgICAgICAgICAgICAgICAg ICAgICAgICAgPHhtcEc6bW9kZT5SR0I8L3htcEc6bW9kZT4KICAgICAgICAgICAg ICAgICAgICAgICAgICAgPHhtcEc6dHlwZT5QUk9DRVNTPC94bXBHOnR5cGU+CiAg ICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnJlZD4yMzc8L3htcEc6cmVk PgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpncmVlbj4yMzc8L3ht cEc6Z3JlZW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOmJsdWU+ MjM3PC94bXBHOmJsdWU+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcmRmOmxp PgogICAgICAgICAgICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9 IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6c3dh dGNoTmFtZT5DPTAgTT0wIFk9MCBLPTU8L3htcEc6c3dhdGNoTmFtZT4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgPHhtcEc6bW9kZT5SR0I8L3htcEc6bW9kZT4K ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6dHlwZT5QUk9DRVNTPC94 bXBHOnR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnJlZD4y NDY8L3htcEc6cmVkPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpn cmVlbj4yNDY8L3htcEc6Z3JlZW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAg IDx4bXBHOmJsdWU+MjQ2PC94bXBHOmJsdWU+CiAgICAgICAgICAgICAgICAgICAg ICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICAgICAgICA8L3JkZjpTZXE+CiAg ICAgICAgICAgICAgICAgIDwveG1wRzpDb2xvcmFudHM+CiAgICAgICAgICAgICAg IDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9 IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHhtcEc6Z3JvdXBOYW1lPkJy aWxsYW50ZTwveG1wRzpncm91cE5hbWU+CiAgICAgICAgICAgICAgICAgIDx4bXBH Omdyb3VwVHlwZT4xPC94bXBHOmdyb3VwVHlwZT4KICAgICAgICAgICAgICAgICAg PHhtcEc6Q29sb3JhbnRzPgogICAgICAgICAgICAgICAgICAgICA8cmRmOlNlcT4K ICAgICAgICAgICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJS ZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnN3YXRj aE5hbWU+Qz0wIE09MTAwIFk9MTAwIEs9MDwveG1wRzpzd2F0Y2hOYW1lPgogICAg ICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzptb2RlPlJHQjwveG1wRzptb2Rl PgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzp0eXBlPlBST0NFU1M8 L3htcEc6dHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6cmVk PjIyNzwveG1wRzpyZWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBH OmdyZWVuPjY8L3htcEc6Z3JlZW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAg IDx4bXBHOmJsdWU+MTk8L3htcEc6Ymx1ZT4KICAgICAgICAgICAgICAgICAgICAg ICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZGY6bGkgcmRm OnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICAgICAgICAg ICA8eG1wRzpzd2F0Y2hOYW1lPkM9MCBNPTc1IFk9MTAwIEs9MDwveG1wRzpzd2F0 Y2hOYW1lPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzptb2RlPlJH QjwveG1wRzptb2RlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzp0 eXBlPlBST0NFU1M8L3htcEc6dHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAg ICAgPHhtcEc6cmVkPjIzNDwveG1wRzpyZWQ+CiAgICAgICAgICAgICAgICAgICAg ICAgICAgIDx4bXBHOmdyZWVuPjkxPC94bXBHOmdyZWVuPgogICAgICAgICAgICAg ICAgICAgICAgICAgICA8eG1wRzpibHVlPjEyPC94bXBHOmJsdWU+CiAgICAgICAg ICAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICAgICAgICAg ICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAg ICAgICAgICAgICAgICAgPHhtcEc6c3dhdGNoTmFtZT5DPTAgTT0xMCBZPTk1IEs9 MDwveG1wRzpzd2F0Y2hOYW1lPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8 eG1wRzptb2RlPlJHQjwveG1wRzptb2RlPgogICAgICAgICAgICAgICAgICAgICAg ICAgICA8eG1wRzp0eXBlPlBST0NFU1M8L3htcEc6dHlwZT4KICAgICAgICAgICAg ICAgICAgICAgICAgICAgPHhtcEc6cmVkPjI1NTwveG1wRzpyZWQ+CiAgICAgICAg ICAgICAgICAgICAgICAgICAgIDx4bXBHOmdyZWVuPjIyMjwveG1wRzpncmVlbj4K ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6Ymx1ZT4wPC94bXBHOmJs dWU+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAg ICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4K ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6c3dhdGNoTmFtZT5DPTg1 IE09MTAgWT0xMDAgSz0wPC94bXBHOnN3YXRjaE5hbWU+CiAgICAgICAgICAgICAg ICAgICAgICAgICAgIDx4bXBHOm1vZGU+UkdCPC94bXBHOm1vZGU+CiAgICAgICAg ICAgICAgICAgICAgICAgICAgIDx4bXBHOnR5cGU+UFJPQ0VTUzwveG1wRzp0eXBl PgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpyZWQ+MDwveG1wRzpy ZWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOmdyZWVuPjE1Mjwv eG1wRzpncmVlbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhtcEc6Ymx1 ZT41ODwveG1wRzpibHVlPgogICAgICAgICAgICAgICAgICAgICAgICA8L3JkZjps aT4KICAgICAgICAgICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBl PSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnN3 YXRjaE5hbWU+Qz0xMDAgTT05MCBZPTAgSz0wPC94bXBHOnN3YXRjaE5hbWU+CiAg ICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOm1vZGU+UkdCPC94bXBHOm1v ZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOnR5cGU+UFJPQ0VT UzwveG1wRzp0eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1wRzpy ZWQ+Mzk8L3htcEc6cmVkPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8eG1w RzpncmVlbj41MjwveG1wRzpncmVlbj4KICAgICAgICAgICAgICAgICAgICAgICAg ICAgPHhtcEc6Ymx1ZT4xMzk8L3htcEc6Ymx1ZT4KICAgICAgICAgICAgICAgICAg ICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZGY6bGkg cmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICAgICAg ICAgICA8eG1wRzpzd2F0Y2hOYW1lPkM9NjAgTT05MCBZPTAgSz0wPC94bXBHOnN3 YXRjaE5hbWU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBHOm1vZGU+ UkdCPC94bXBHOm1vZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bXBH OnR5cGU+UFJPQ0VTUzwveG1wRzp0eXBlPgogICAgICAgICAgICAgICAgICAgICAg ICAgICA8eG1wRzpyZWQ+MTMwPC94bXBHOnJlZD4KICAgICAgICAgICAgICAgICAg ICAgICAgICAgPHhtcEc6Z3JlZW4+NTQ8L3htcEc6Z3JlZW4+CiAgICAgICAgICAg ICAgICAgICAgICAgICAgIDx4bXBHOmJsdWU+MTQwPC94bXBHOmJsdWU+CiAgICAg ICAgICAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICAgICAg ICA8L3JkZjpTZXE+CiAgICAgICAgICAgICAgICAgIDwveG1wRzpDb2xvcmFudHM+ CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+ CiAgICAgICAgIDwveG1wVFBnOlN3YXRjaEdyb3Vwcz4KICAgICAgPC9yZGY6RGVz Y3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAg ICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4z LyI+CiAgICAgICAgIDxwZGY6UHJvZHVjZXI+QWRvYmUgUERGIGxpYnJhcnkgOS45 MDwvcGRmOlByb2R1Y2VyPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAg PHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6 cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIj4K ICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9y TW9kZT4KICAgICAgICAgPHBob3Rvc2hvcDpJQ0NQcm9maWxlPkFkb2JlIFJHQiAo MTk5OCk8L3Bob3Rvc2hvcDpJQ0NQcm9maWxlPgogICAgICA8L3JkZjpEZXNjcmlw dGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0i dyI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV 1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6al pKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1 dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZF RENCQUA/Pj08ADo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYV FBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAAHAP8ALAAAAACxAHoAAAf/gDOCg4SF hoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1 tre4ubq7vL2+v8DBwsPExcbHyMmWKysLys+YBB4eFtDWlA0YGCTX3ZANECHc3qkR PS8SDCAaHyuKC0Ui8iJFzolK8/LuhuDiiis/GoAA0cDBPkcrHAgEkcFCgEkritSr BK+IEk8/BHA4AEGbNhs4Mlw8RGBAhZMVBhhQBATlySGH+o0ztEBDgQcQckII4iHG wUQ1ceCEYGLnBAMjHRlJgOKGg0oaBgyYmWkFCBTadGo1EULGj5gdPWK4YSRRDRNi gYD1Z2jFCSYm/0wEQYGCCQauJVr863AA7YMbN3AWdRHBkQYa2g4QoLSiQBIORTat 6BACg9bLOU1wYMEPMwQB9gyd1cpgLVVBC4DkvMGAhTwLQAZoo/CTUOqcI3z8kPjh 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 ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=menu0_bullet.gif Content-Type: image/gif; name=menu0_bullet.gif Content-Location: http://www.participa2014.cat/resultats/dades/assets/img/menu0_bullet.gif Content-Transfer-Encoding: Base64 R0lGODlhBQAJAIAAAE1NTf///yH5BAEAAAEALAAAAAAFAAkAAAIMRB5gp9v2YlJs JRQKADs= ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=catalunyaBar1-tot.jpg Content-Type: image/jpeg; name=catalunyaBar1-tot.jpg Content-Location: http://www.participa2014.cat/resultats/dades/graphs/catalunyaBar1-tot.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUE BAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQIC AgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgr/wAARCAEsAlgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEA AAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6 Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZ mqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx 8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hp anN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE xcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9 /KKKKACiiigAooooAKKK+WLD9sz456h/wUrvv2TU0PwzH4Rsb1bZopdIu1v5rU6D HqJ1OPUzcfY3kW7kWzbSBCbtYmW+LiAgEA+p6K+Zv+Cen7Z3xO/aqF3/AMLR0bw9 bf2x8NvCfxJ8Jf8ACPWtxD9m8P8AiP8AtL7DZXfnSyebew/2XN5s0flxv5qbYk2n Of44/al/aP8AgJ46+O3xD+JvjLwF4v8Ahf8AB/4Z6r4pvdP8M+BL3StW0+7SNr+z 0uW+l1a8hvJl06GR5yLW2IN1ZSqgWYxqAfVNFfAes/8ABS39p7wX4f8AA/juObwl 498My+PbnTvi3r3h/wCDviPR08H20U+iK2nzw3d3LPbTrZX+o6mmoXCJBdxWNvbw 2wlvreRvqv8AZF+PN1+0p8K5/i1Jrfhee2vddu4tP0zw1qkV7Jo0ETCMWOoTwzSx NqCFWaeOPasDyeR+8MJnlAPUaKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACsS4+JXw6tLh7S78f6JFLE5SWKTVYVZGBwQQWyCD2rbr8ifjn/y W3xj/wBjVqH/AKUyV+XeJ/iHX8PsHhq1LDqt7WUlZycbWSfRO+5+j+HPAlHjrF4i jUrul7OKd1FSvdtdWux+rP8AwtL4Zf8ARRdB/wDBvD/8VXii/s0fsyL+1W37V5+P t+bw+If+EjHhA+JrD+xRr/8AYf8AYH9rhPK+0faP7K/0TZ5/kbfn8nzP3lfnPRX4 5/xMrmH/AELY/wDgx/8AyB+sf8S+YH/oYS/8Fr/5I/Rf4A/s2/s7fs06fqtn8Lf2 k9Thl1CfR7azvL7XtKuJNK0HS7hpbPw7ah7bYmnIk13AN6vcrHezFbhZRFLH0mmf Cn9l23+F/j/4ReIvH2n69pPxP1PW7vxp/bOv2zS6gup745bctHsxFHbGO0iGNywW 8SlnZS7fmJRR/wATK5h/0LY/+DH/APIB/wAS+YH/AKGEv/Ba/wDkj9Evhl+y/wDs 3eAJ7K/8SftJ6v41vI/GTeLdavfF3iXTXbX9bSztLKzvr1LW3gjkeztrG2jt0RUj VokmdJJ445k0f2LP2ev2W/2Evhfe/Cf4Q/F86hp99qcF3JceIvEVnNOi2+m2Wl2l uphSJfLgsNOsrdSVMjiDfK8srySN+blFH/EyuYf9C2P/AIMf/wAgH/EvmB/6GEv/ AAWv/kj9g/8AhaXwy/6KLoP/AIN4f/iqvaJ4p8MeJfN/4RzxHYah5G3zvsV4kvl5 zjdtJxnBxn0NfjdXf/A39tzxh+xx/an/AAingvTdY/4SPyPtH9ozSJ5P2fzNu3Ye c+ec5/uivreBfHDGcYcVYfKJ4KNNVef3lNtrlhKe3Kt+W2/U+X4z8HcLwrw1XzSG MlUdPl91wSvzTjDfme3NfbofrDRRRX9Dn4QFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAV+RPxz/wCS2+Mf+xq1D/0pkr9dq/In45/8lt8Y/wDY1ah/6UyV /M/0lP8AkU5f/jn/AOko/oX6Pv8AyNMd/gh/6UzlaKKK/kc/qMKKKKACiiigArkf in/y4f8AbX/2Suurkfin/wAuH/bX/wBkr9U8E/8Ak52A/wC4v/pmofmvi/8A8m7x v/cP/wBPUz9zqKKK/vw/iEKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig Ar8ifjn/AMlt8Y/9jVqH/pTJX67V+RPxz/5Lb4x/7GrUP/SmSv5n+kp/yKcv/wAc /wD0lH9C/R9/5GmO/wAEP/SmcrRRRX8jn9RhRRRQAUUUUAFcj8U/+XD/ALa/+yV1 1cj8U/8Alw/7a/8Aslfqngn/AMnOwH/cX/0zUPzXxf8A+Td43/uH/wCnqZ+51FFF f34fxCFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV+RPxz/AOS2+Mf+ xq1D/wBKZK/XavyJ+Of/ACW3xj/2NWof+lMlfzP9JT/kU5f/AI5/+ko/oX6Pv/I0 x3+CH/pTOVooor+Rz+owooooAKKKKACuR+Kf/Lh/21/9krrq5H4p/wDLh/21/wDZ K/VPBP8A5OdgP+4v/pmofmvi/wD8m7xv/cP/ANPUz9zqKKK/vw/iEKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAr8ifjn/yW3xj/wBjVqH/AKUyV+u1fkT8 c/8AktvjH/satQ/9KZK/mf6Sn/Ipy/8Axz/9JR/Qv0ff+Rpjv8EP/SmcrRRRX8jn 9RhRRRQAUUUUAFcj8U/+XD/tr/7JXXVyPxT/AOXD/tr/AOyV+qeCf/JzsB/3F/8A TNQ/NfF//k3eN/7h/wDp6mfudRRRX9+H8QhRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFfkT8c/+S2+Mf8AsatQ/wDSmSv12r8ifjn/AMlt8Y/9jVqH/pTJ X8z/AElP+RTl/wDjn/6Sj+hfo+/8jTHf4If+lM5Wiiiv5HP6jCiiigAooooAK5H4 p/8ALh/21/8AZK66uR+Kf/Lh/wBtf/ZK/VPBP/k52A/7i/8Apmofmvi//wAm7xv/ AHD/APT1M/c6iiiv78P4hCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA K/In45/8lt8Y/wDY1ah/6UyV+u1fkT8c/wDktvjH/satQ/8ASmSv5n+kp/yKcv8A 8c//AElH9C/R9/5GmO/wQ/8ASmcrRRRX8jn9RhRRRQAUUUUAFcj8U/8Alw/7a/8A slddXI/FP/lw/wC2v/slfqngn/yc7Af9xf8A0zUPzXxf/wCTd43/ALh/+nqZ+51F FFf34fxCFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV+RPxz/5Lb4x/ 7GrUP/SmSv12r8ifjn/yW3xj/wBjVqH/AKUyV/M/0lP+RTl/+Of/AKSj+hfo+/8A I0x3+CH/AKUzlaKKK/kc/qMKKKKACiiigArkfin/AMuH/bX/ANkrrq5H4p/8uH/b X/2Sv1TwT/5OdgP+4v8A6ZqH5r4v/wDJu8b/ANw//T1M/c6iiiv78P4hCiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAK/In45/8AJbfGP/Y1ah/6UyV+u1fk T8c/+S2+Mf8AsatQ/wDSmSv5n+kp/wAinL/8c/8A0lH9C/R9/wCRpjv8EP8A0pnK 0UUV/I5/UYUUUUAFFFFABXI/FP8A5cP+2v8A7JXXVyPxT/5cP+2v/slfqngn/wAn OwH/AHF/9M1D818X/wDk3eN/7h/+nqZ+51FFFf34fxCFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAV+RPxz/wCS2+Mf+xq1D/0pkr9dq/In45/8lt8Y/wDY 1ah/6UyV/M/0lP8AkU5f/jn/AOko/oX6Pv8AyNMd/gh/6UzlaKKK/kc/qMKKKKAC iiigArkfin/y4f8AbX/2Suurkfin/wAuH/bX/wBkr9U8E/8Ak52A/wC4v/pmofmv i/8A8m7xv/cP/wBPUz9zqKKK/vw/iEKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAr8ifjn/AMlt8Y/9jVqH/pTJX67V+RPxz/5Lb4x/7GrUP/SmSv5n+kp/ yKcv/wAc/wD0lH9C/R9/5GmO/wAEP/SmcrRRRX8jn9RhRRRQAUUUUAFcj8U/+XD/ ALa/+yV11cj8U/8Alw/7a/8Aslfqngn/AMnOwH/cX/0zUPzXxf8A+Td43/uH/wCn qZ+51FFFf34fxCFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV+RPxz/ AOS2+Mf+xq1D/wBKZK/XavyJ+Of/ACW3xj/2NWof+lMlfzP9JT/kU5f/AI5/+ko/ oX6Pv/I0x3+CH/pTOVooor+Rz+owooooAKKKKACuR+Kf/Lh/21/9krrq5H4p/wDL h/21/wDZK/VPBP8A5OdgP+4v/pmofmvi/wD8m7xv/cP/ANPUz9zqKKK/vw/iEKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAr8ifjn/yW3xj/wBjVqH/AKUy V+u1fkT8c/8AktvjH/satQ/9KZK/mf6Sn/Ipy/8Axz/9JR/Qv0ff+Rpjv8EP/Smc rRRRX8jn9RhRRRQAUUUUAFcj8U/+XD/tr/7JXXVyPxT/AOXD/tr/AOyV+qeCf/Jz sB/3F/8ATNQ/NfF//k3eN/7h/wDp6mfudRRRX9+H8QhRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFfkT8c/+S2+Mf8AsatQ/wDSmSv12r8ifjn/AMlt8Y/9 jVqH/pTJX8z/AElP+RTl/wDjn/6Sj+hfo+/8jTHf4If+lM5Wiiiv5HP6jCiiigAo oooAK5H4p/8ALh/21/8AZK66uR+Kf/Lh/wBtf/ZK/VPBP/k52A/7i/8Apmofmvi/ /wAm7xv/AHD/APT1M/c6iiiv78P4hCiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAK/In45/8lt8Y/wDY1ah/6UyV+u1fkT8c/wDktvjH/satQ/8ASmSv5n+k p/yKcv8A8c//AElH9C/R9/5GmO/wQ/8ASmcrRRRX8jn9RhRRRQAUUUUAFcj8U/8A lw/7a/8AslddXI/FP/lw/wC2v/slfqngn/yc7Af9xf8A0zUPzXxf/wCTd43/ALh/ +nqZ+51FFFf34fxCFFFFAHKfFr44/Cb4FWOhaj8W/HNnocXifxXp3hnw+bvcTf6t fziC0tI1UEtJJIcDjAAZmIVWIzPH37T/AMDPhh8WvDXwN8ceOPsXifxb/wAgWwGm 3MsZyxSPz5442htPNkDRw+e8fnyK0cW9wVHn3/BSbw/8XfFX7P8AoOjfBT4FeIPi Dq9t8YPAut3WjeHNS0m1mhsNI8TadrV3MX1S9tITmHTpIUVZCzTTwghY/Mlj4f8A as/Zl+OnxB/a5tfEXgXwVJqHhjxmfhp/bniRNWtoY/DA8HeLb3xFJ5sMkizT/bku 1tY/ISTa8ZMuxMMQD3n45/tP/Az9m06EPjR44/sf/hI9R+x6Vt025ussNu+aX7PG /wBnto96eZczbIIvMTzJF3rnmvij+3t+zR8E/ibdfCr4ta54r8PXlpY3l5NreqfD PX4tBMNrpcuq3LJrRsf7Nk8uzgnkYLcEgxPHjzFKV43/AMFGP2fv2hf2ltNS++FP we1R5fEnws+Inwk1Kzvtb023k0aDX7nTIYfErn7SyS2kcekGcQxs12Y72IGBJBLF H6h40+DPiD4tfFL4q+K/jj8IT4j8JWvgOTwh4I8Ii8tWbxDY3lmtxrEi75kSI3cj W9gFuHi2/wBms+Ujn3uAdh8Nf2tPgD8XrPwnd/D3xxNfP42OpjQLKTRL23uz/Z0r wX/2m3mhSax+zzobeX7SkXlzskDYlkRG9Hr4M/ZW/Y6/bN/ZV/bC8G3XhDS7ZPhp r/h+S4+JBXV7fUYtOuJG126l09bvUHfVrmVL660maO4Vil1Jc67dXe2We2RPvOgA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA 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 ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=si_si.png Content-Type: image/png; name=si_si.png Content-Location: http://www.participa2014.cat/resultats/dades/assets/img/si_si.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAkAAAAKCAIAAADpZ+PpAAAAAXNSR0IArs4c6QAA AARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAASSURBVChTY/hf z4QLjVy5eiYAMmCHAcT5KtEAAAAASUVORK5CYII= ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=si_no.png Content-Type: image/png; name=si_no.png Content-Location: http://www.participa2014.cat/resultats/dades/assets/img/si_no.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAkAAAAKCAIAAADpZ+PpAAAAAXNSR0IArs4c6QAA AARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAATSURBVChTY4g6 cRUXGrlyJ64CAJCCsNczWAOtAAAAAElFTkSuQmCC ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=si_blanc.png Content-Type: image/png; name=si_blanc.png Content-Location: http://www.participa2014.cat/resultats/dades/assets/img/si_blanc.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAIAAABv85FHAAAAAXNSR0IArs4c6QAA AARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAASSURBVBhXY7iR mYkLDW+5zEwAf2WGyyYSzc4AAAAASUVORK5CYII= ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=no.png Content-Type: image/png; name=no.png Content-Location: http://www.participa2014.cat/resultats/dades/assets/img/no.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAIAAABv85FHAAAAAXNSR0IArs4c6QAA AARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAnSURBVBhXdcex CQAADMOw/P9UPisdawwFLcr05ZNPPvnkk08++adZokuMzm0mnKkAAAAASUVORK5C YII= ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=blanc.png Content-Type: image/png; name=blanc.png Content-Location: http://www.participa2014.cat/resultats/dades/assets/img/blanc.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAkAAAAKCAIAAADpZ+PpAAAAAXNSR0IArs4c6QAA AARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAASSURBVChTY8hI jsCFRq5ccgQA/JlmTw2qZ9EAAAAASUVORK5CYII= ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=altres.png Content-Type: image/png; name=altres.png Content-Location: http://www.participa2014.cat/resultats/dades/assets/img/altres.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAIAAABv85FHAAAAAXNSR0IArs4c6QAA AARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAASSURBVBhXY5i6 KgkXGt5yq5IABYyD8qk+4P8AAAAASUVORK5CYII= ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=si.png Content-Type: image/png; name=si.png Content-Location: http://www.participa2014.cat/resultats/dades/assets/img/si.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAoAAAAJCAIAAACExCpEAAAAAXNSR0IArs4c6QAA AARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAATSURBVChTY5iw ZjoeNDKl10wHAHrppC8XV+KVAAAAAElFTkSuQmCC ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=catalunyaPie1-tot.jpg Content-Type: image/jpeg; name=catalunyaPie1-tot.jpg Content-Location: http://www.participa2014.cat/resultats/dades/graphs/catalunyaPie1-tot.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUE BAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQIC AgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgr/wAARCAD6APoDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEA AAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6 Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZ mqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx 8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hp anN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE xcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9 /KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKyvF3jjwh4C0w6 x4y8R2mm2/Ox7qYKZCBnai9Xb/ZUEn0rxvxr+3T4Zsna1+HXg271YgkC91GQ2cBH ZlUq0rc9mRPrXzXEXGPC3CVD2ucYynQT2UpLmf8Ahiryl8kz0MBlOZZpPlwlKU/R aL1ey+bPeaK+Dv2jv2vf2pL34WeINY8CeOrbQr+10qSW1XSNMiVRs+YsWuBK+7aD yGH0r5N+Fnx9+Lnxr+HdrrfxL+J+ua7erNLHO+papLKAQ5IwrNheCOAAK+byDxT4 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 H//Z ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=catalunyaPie2-tot.jpg Content-Type: image/jpeg; name=catalunyaPie2-tot.jpg Content-Location: http://www.participa2014.cat/resultats/dades/graphs/catalunyaPie2-tot.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUE BAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQIC AgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgr/wAARCADXANcDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEA AAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6 Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZ mqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx 8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hp anN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE xcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9 /KKKKACiiigAooooAKKKKACivIvip+2x8DfhlLLplvrj6/qURKtZaGFlWNhnh5iR GuCMEBi4/u18+/ET/goT8aPFEzQeB7Wx8NWufkaGJbq5xjHMkq7PfiMEepr0sJlG YYxXpw07vRf8H5Hy+ccZ8OZG3HE105r7Mfel80tvm0fbzMqqWZgABkknpXI698f/ AIHeGPNXXPi54cgkhJEkH9rwtKCOo8tWLE+2K/O3xf4/8dfEC4Fz448Y6nq7D7i6 hfPKif7qMdqf8BArHVVRQiKAB0AHSvdo8J1Gv3tVL0V/xdvyPz3G+MWHi2sJhG13 lJL8EpfmffGt/t9fsk+HGjGs/FxIfNJEZOi3zAkYzysBHesy0/4KRfsd307Q2/xS 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 oA//2Q== ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=NG_ico_list.png Content-Type: image/png; name=NG_ico_list.png Content-Location: http://www.participa2014.cat/resultats/dades/assets/img/NG_ico_list.png Content-Transfer-Encoding: Base64 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 hq4YeuUMLXNtxdAVQ3/NDK3Q5K9y5p1esfMdYOdq5l3Fzl86O8+18zbs/PXNvKsY +i4wdDXzrmLoiqHzMPTXOPOu4ui7wNHVzLuKoyuOLpLj+Dpm3lXsfBfYuZp5V7Fz xc5Fchxfz8y7iqHvAkNXM+8qhq4YOg9DVzPvKs6+G5xdzbyrOLvi7CJe9dcz865i 6LvA0NXMu4qhK4aeM3QXjkL9j8gzfLAkM/T8kYCvY0etl60d4Le2ZsHvBK7XWgpb Z2uxrIOO5N1tx85eNM86eiw//nbOLpbEDdFj03SumdGSJEeagEB9LboX6NNOTFeK 6l4wIiKsylenaw0p+7M8XWsV1jX0RozPWNseC22L2h3ZG/1B6BvmDMBufPHzjE1J Y9J9UTmm/Xw9Ubkdm/ZEq1nGn6Mnqkt9u/JE0/n54ZxPgaEjaN+CofEtqBeE6JfN 0LKvWTF0xdAVQ1e5guUy9KM5n2qTTI7+MSbFHWoXvwPrXSRu246t+gv2rZepDXqV Ygs4DuIW0GNkZQN+ayFT4zY8BlsT6EyLuN2jmA/52i/MqQ2JWRbznTxDNi9TpGn6 avTQWoMeqvWmjAY+jF1pc/mquvACPLL/6CU04deC48trYdF8VV3Bg1W+KumhqrSl jO79SD39HfWg2NW0n/E3oYGLtWistUGSLvxF73FKXqdFnkKgRZidQh3yiOFY7ng0 ch7q3gSO99eA5KK2R2vwn9DWDtzDoxow472Ge10S66E39Qd8vw7rh33yf8M73aO2 7+Df2FXvaY6kR99A2+Na9IM2yZnjugd7sz0kYt+YljwETZ6Ah/GJ7rAT6aHB+7p2 ieE/wL5+yPBXJfQC2cGC/R5FHDqxiw4ytRLRSEvohUMshPwzgf/oIbbXohdpbY4z yJXGb2B36b5siV7D9zfaONUbj5/zVnj98bO+hTbXE3Z5Qnb4OuedHkWOz3+XLdiP OPwOf+Xr6zlbP02NvrJaPz8rf+vT75TW+uy7yK2PXj/e+icprX+jBe9WTfO50xCQ z1TV77EChUV3/FGJRJ67PYihkbyPHDGqERlr/NJEde1kHOc1jJ+nqt8jBRrZd3us xGLxnbZjSMj30FdlJQqx9N/hrpdhDkH47No/ZL+/tE03gYWRfcfk77E/2Aas9Jhn iPsR4xrZfeTuNmU7JmTb5UzSari7GBLx3jlWnPmaro5a+j6Mm5K9zJWunuesTenK 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 evZz/qfjx3eBoZPD2rhe7x7X1esdYl+o19PLXP4/V9dwG89XPQdy/kPUd6mX3xnq GbI2ru2d0lne9uozf0pn1ibOiDb//B2S7+c/u6dzOOc/26f9996cy5eoD1FfGpd7 12ZP6vXq/yHqO+o5ftY9Jc/77HUEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4S94BcQUCqrczk8IAAAq1bWtC VPrOyv4Af1e6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4nO2djZHbOAxGU0gaSSEpJI2k kBSSRlJIbpCbd/PuC0jJWa8d23gzntXqh6QIEqIAkPr5cxiGYRiGYRiGYRiGYXhJ vn///tvvx48f/x27J1WOe5fh2fnw4cNvv69fv/6q99q+Z/1XOaoMw/uBvM/i9vCW /rm7to7Vbyd/rkdXDXs+fvzY1tVK/u7/bH/69OnX32/fvv388uXLf/qi9he1r/Ip Ki/O5RjnkU79XK7az7Hab/mTdp1baVpf1bFhz0rOnf4vOvl//vz51zb1T/8tuZQM kDkyYj/nVP7IFJnX/mwX9GvOJT+3E9oC5Rv27ORfMvL4r+jkzzHkQn+1DJFztRX3 WeTHNeA+vjqGPgDKYz0x7NnJ/6z+T/l37wzoeeRef6stINfatiz9zFjJ33oA6PuV nnXD0HNN+SPXklVd6z5IX/eYwHn4WZLHdroh24n1jOVfbcRpDP9SdeL+c7QfXc1Y nG0fp19n+ylZWd4pD/pt5l3XeSyXsqxt2iB6hjHJ6pphGIZhGIZheEUYx9+TR7DX p//zby/vWfLd+h5c6mu6NvWueITL6O1qB8/mZ0id8Jb2vruW9/Od/M/Y8Y98hnme 93W+xC69lfz/hv7zFlz+9LNhz8Omjk0m/Xfp28MX5GvpI53PkPokP85d+QNN52+k jFyP/ci+LNsv7d/apZfytx/iUdtAyt9+Nh9zPyl9ic4suSAbbL7s55z0C9hnWCAj 7HYF51HntA+T9me3HdoM90KemRby7uzZmV7K33X0qOOBrv8DdWi94L5tP459e12M 0C5+yH3Qdl/3/0o763jnb8xnSvbr9Fldkt6z639AtukDLuyrKZnhb3F/Q5b8v5M/ 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 PMYk8iLNXr4lPer8r5RSSimlnlOX2ufNdO9lL/nWlOsgl7BhfRvNvmv699RftfZ5 tT+sOdSayWzNeo3S/31tI7/zR9/8S2shrJv082soyznqR/zjMbu/lN7oepbXLK1R vybubM1pVua/iv2y3PsjX9Y88pz2wjO5zp5tJPdeOWcNl3s5JrB3sya82zrLmeuJ dY/1Ztaa+rpShfc61r1MK21Xx/QZkFdeox6nxHol90mXve6lMp+j7pdsb6P+z1ob tmY/vms09le83Mct6COs860JP1Yv7JdjXv+3IfchEHsZdcy1yrRVptnzGtm3/xNB nNH9kf9HZT5Hff4/xf8Zf/b+kHbinL0Zjvgz/8lYE35qvfqcl3sC+HpUp/RBt09e z/LKsNE+E/ezP3OdeY/KfK628H/fRymfUKY8LzHWMX4yltGe14afUi/CGDf4jwAb 074Qc233fx9zco/ymP/5fyLzKPX73f+zMp+rY/7PuR079H6SdS318Sl9g7+Iyzy2 Vfgxu2cYtuT9OudhxnDiYue0NXud+DP3KI+Vg39r8SFtJ23KntnI/6Myn/MuyH5b 1il9R9/OumKP0VhF3Eyv59f92fvBmnDCluqVYdSDuaT7N+fy0TcYz/fnRnn1MNpA 34tMGxM/856Vufe1S2hpvUA9vvS/UkoppZRSSimllFJKXU07ERERERERERERERER ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER EREREREREREREREREREREREREREREZE75B+Hl45q2TuOnAAAAVNta0JU+s7K/gB/ pYUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHic7dbhaYNgFIZRB3ERB3EQF3EQB3ERB7G8 gQu3piH/ignngUObT/vrTWzOU5IkSZIkSZIkSZIkSZIkSZIkSR/RcRznvu9P5znL tXf3v7pP929d13Mcx3OapsfP7Bj9LPfUvXUWy7I8XscwDH++h3TvsmOVfbNhdq3N +z21f9U3v/6N7l+263tWOeuf5XqdffvG2b+6XtP9y3O+71//1+d5fto/1+z/fWXb eu7X79u2/frM9+e//b+v+h7X96v3QK7Vd/ucRdWfHddrkiRJkiRJkiRJ+vcGAAAA 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 3Xu5GKpkI7MVGCHPhnTgfaksbsZ5V0ZLdgiPwoRYlBI0loN8PPuNQisEoOiuwjiI aT2PLTu0CLNYCTUcbD0veGzq8453lZbl9x1us13sIAoZ4CtT29O8LHvVngCvL9CU 4lYAofu7Kzw8DdjMCKSuwG8gHp/i3ufo1IdlTnD5Xk///ha82fmOT3YLcVK2IKMT d0gBRjP73YHfPW/9jzv8YH5rklLPA3dD38/tspR1wqbjGWuhakWYE3z7iXHPqY7U FASCS1Yszwvgzyo/3v/+eGvh3H1RkHjBVbnpEwacL03b/N4DxMLhgT2dC6TVsHD9 vsrmPeeKkAgezl54+kIWy4/3F97aS3irp9NA8FuQ8s5Jmb7UWUJdFlSqpuKekAeZ j+f/+tFLcQXJLgLhvYBQ1tt3G/+8w9NBR1z0mlfCz4uB2OI5+eMOzzJTHrOX5UFc 6JNZXJzfeT3HqPBHave+zOnH9dWiwk3uQBrijHTUgraEdgNEf778gw56ziuy2cxC DsS6XLefrPy8w9WshffZ6zbL22uZNkz+uMqm2lLfX3L9bp1sfFVBz68QPBEKornL fKayIYK4O7oSwTiZXzHcZ+lz3o35xkOfh/+/5CALPupWQol+5iy2ua4ZoMuYX/8m Zpnk1Wpw8S9X2dSNyndhAPlPILyasEgMEjPJ2/v+vgFJYJjI8nXY+RW79bgx6s2k yfu3CMjP9/9/5Stf+cpXvvKVr3zlK1/5yle+8pWvfOUrX/nKV77yla985Stf+cpX vvKVr3zlK1/5yle+8pWvfOUrX/nKV77yla985Stf+cpXvvKVr3zlK1/5yle+8pWv fOUrX/nKV77yla985Stf+cpXvvKVr3zlK1/5yle+8pWvfOUrX/nKV77yla985Stf +cpXvvKVr3zlK1/5yle+8pWvfOUrX/nKV77yla985Stf+cpXvvIVgP8H3ZoZmXcp pvcAADITaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49 Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRh IHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29y ZSA0LjEtYzAzNCA0Ni4yNzI5NzYsIFNhdCBKYW4gMjcgMjAwNyAyMjozNzozNyAg ICAgICAgIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9y Zy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6eGFwPSJodHRwOi8v bnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPHhhcDpDcmVhdG9yVG9v bD5BZG9iZSBGaXJld29ya3MgQ1MzPC94YXA6Q3JlYXRvclRvb2w+CiAgICAgICAg IDx4YXA6Q3JlYXRlRGF0ZT4yMDE0LTAyLTAzVDE0OjM1OjA0WjwveGFwOkNyZWF0 ZURhdGU+CiAgICAgICAgIDx4YXA6TW9kaWZ5RGF0ZT4yMDE0LTAyLTAzVDE0OjM3 OjUyWjwveGFwOk1vZGlmeURhdGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgog ICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4 bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPgogICAg ICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICA8L3Jk ZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFj a2V0IGVuZD0idyI/Pn+zAWsAAABISURBVAiZXcpBEYNAEEXBJoUApKyUqJiRATbW FRKwEAWfCwcq79j1liT+W6G7Dwwcc85z7e6B/TV+P7jwe+AESVTVVlUjiSRu4W8Y eYhED3IAAAAASUVORK5CYII= ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=footer_012.png Content-Type: image/png; name=footer_012.png Content-Location: http://www.participa2014.cat/resultats/dades/assets/img/footer_012.png Content-Transfer-Encoding: Base64 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 SUVORK5CYII= ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=logo_generalitat_gris.png Content-Type: image/png; name=logo_generalitat_gris.png Content-Location: http://www.participa2014.cat/resultats/dades/assets/img/logo_generalitat_gris.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAGUAAAAbCAYAAABlVEF+AAAE1klEQVR42u1aC43j MBAthaNQCkehFMxgN6tFEAqlUAqhEAqlYAqmkKurebmX17Hzq24rXSNZSRN/581/ eji8r9e7Pj8/z19fX9emadKtRWvDrfXUBjTry+8xJuVveb43VXdeN0K2RtwMysVa Z78BRszEJsDQOhqTDLT2TdX9oDQkASDwAM6H1OS+JB2JQMvAdOib55uTTAbcpOv0 YvTo8z3vi8///f19zO9u919z83x8fPzefC4jUieADLaBcwGUPm+MJGeUsJr64vlt rlHyXgUYnDnfFRT6NrtX0OoZoIyqiTfhgSK/R4kpgZI5xwPAxt2BNW78Zev29i0Q l56Ng+/f85251lRxb5LbiN0cx9m6webP/S95fwqKrHmi814gMbTXLF1tfmfSFnme PYZ+DyhVQ09zdfzeDnYCUUhlcgvEtdo6AXcg8M/2Td97cyUi8oOk0P7HudUJKr1f rQVkkrQRlLQUFHw3yRk9PCFCNI5riSj4lqCviZhHJixJZRJQ7hxOdqNlNZy/rVFf 2Lvudbf6ypMRd162gEL9Ysn7UlAcbn3gxgJ396T6apw/noOfIZ3sMfI8K0EJjmTv BwVcBi7fAcodUKihkpcHKXBc8p49QSMKtyWgRB3ngULMd18ThF0DCknnYCbgeZJi CyccYisocHVL+tO4MynxmMNY7ZBhVvX1AIo9j3ESx14FUHq472bw00pQzsxk1u9S oFVY4kK7waMQYQsoJ1ZPFQ8sibgjI9A7brNnQ1xQiEicfWg8UBw1GZUGHigE9qDx Frn3UR2PrYZ+wiU7QOnn0ixwGW3uALBY7eVncDG4TL00SDkf2FRKsHHHUj9ao813 CgqP8lxcE995n7wO/14tKU8GJb1zX8+JYJ9iU0y001ya5X0tuGBc94Iy5315Xh8M 5gaPcRJJ57VXR80LmBUa4J+DQt5H2glKtHnCCgmdGO6lgDjOwugQPGtNjat+IgHX Uz1lS0QfOQCcM/LmtjZKIPOy7tJTMo6QSGSXKTMwSeHAmbCo/Sie5hUAIhrXdSUH VnUy4B1iLsyjxl/6HtnpmZyZVc/O3FcVlAqHV11hBxTMEVQVYm0nyuZUzECZ7qPu KY+dyxY7MdJDmgr756y79Y0U8CYv/3YQ3bwZFFQkS6AwlyL35AWNpk4vXvLSizlK KgqShHiBg0pICidJre+iHFgFlN72z4TH+g0xRiRN8bC2pu7jjoRktZ7CUbTqd1on WerjyoHYGlDYSDPTlIhrxLlI302gSKJyoOTnYOWEVrLXwVubDT0GJSlcPYBgROso JdJSCTnUQOH6iANKlP8G9EvUF9mVTpKTnZd10LQJMdUiSTFVvAgU6ptAMwqO+f1f SXFq9J3qZKgCR1dHkrJqjZ5VBWVpNa8VYRxLqpDGRdRZOMutXpMHCuyG5qdKoJB6 jVKRnQVFUy66Ngx8CZSRU+kfK7GQEk/0fdKvBIpnVCWvdC3lrhyHIZaKVJID43Lz mTkc8Y3znwMU1RTcVCkNVEHhPYE+IqWTtQ/Qe7nB+FEgGSBqcNuMawL3Qx+UTWcC VfxbJnDwSIWiHsWoGde61TKs2IkO0sHr8Lo0T2du8YnGTIJHkpCOz8/uN7nejZaB 1QvjM9g9/Fiw+r9drO6gut7Xa+QWh1qtSa8/THeaL5on1H0AAAAASUVORK5CYII= ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=titol.js Content-Type: application/x-javascript; name=titol.js Content-Location: http://www.participa2014.cat/js/titol.js?201411100115 Content-Transfer-Encoding: Base64 dmFyIHRpdG9sX2NhID0gIjEwMCUgZGUgbWVzZXMgYXZhbHVhZGVzIjsKdmFyIHRp dG9sX2VzID0gIjEwMCUgZGUgbWVzYXMgZXZhbHVhZGFzIjsKdmFyIHRpdG9sX2Vu ID0gIjEwMCUgdm90aW5nIHN0YXRpb24gY291bnRlZCI7 ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=jquery.js Content-Type: application/x-javascript; name=jquery.js Content-Location: http://www.participa2014.cat/resultats/dades/js/jquery.js Content-Transfer-Encoding: Base64 LyohCiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjEuMTEuMAogKiBodHRw Oi8vanF1ZXJ5LmNvbS8KICoKICogSW5jbHVkZXMgU2l6emxlLmpzCiAqIGh0dHA6 Ly9zaXp6bGVqcy5jb20vCiAqCiAqIENvcHlyaWdodCAyMDA1LCAyMDE0IGpRdWVy eSBGb3VuZGF0aW9uLCBJbmMuIGFuZCBvdGhlciBjb250cmlidXRvcnMKICogUmVs ZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiAqIGh0dHA6Ly9qcXVlcnkub3Jn L2xpY2Vuc2UKICoKICogRGF0ZTogMjAxNC0wMS0yM1QyMTowMloKICovCgooZnVu Y3Rpb24oIGdsb2JhbCwgZmFjdG9yeSApIHsKCglpZiAoIHR5cGVvZiBtb2R1bGUg PT09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gIm9iamVj dCIgKSB7CgkJLy8gRm9yIENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmly b25tZW50cyB3aGVyZSBhIHByb3BlciB3aW5kb3cgaXMgcHJlc2VudCwKCQkvLyBl eGVjdXRlIHRoZSBmYWN0b3J5IGFuZCBnZXQgalF1ZXJ5CgkJLy8gRm9yIGVudmly b25tZW50cyB0aGF0IGRvIG5vdCBpbmhlcmVudGx5IHBvc3NlcyBhIHdpbmRvdyB3 aXRoIGEgZG9jdW1lbnQKCQkvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEg alF1ZXJ5LW1ha2luZyBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzCgkJLy8gVGhp cyBhY2NlbnR1YXRlcyB0aGUgbmVlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGEgcmVh bCB3aW5kb3cKCQkvLyBlLmcuIHZhciBqUXVlcnkgPSByZXF1aXJlKCJqcXVlcnki KSh3aW5kb3cpOwoJCS8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8K CQltb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/CgkJCWZhY3Rvcnko IGdsb2JhbCwgdHJ1ZSApIDoKCQkJZnVuY3Rpb24oIHcgKSB7CgkJCQlpZiAoICF3 LmRvY3VtZW50ICkgewoJCQkJCXRocm93IG5ldyBFcnJvciggImpRdWVyeSByZXF1 aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQiICk7CgkJCQl9CgkJCQlyZXR1 cm4gZmFjdG9yeSggdyApOwoJCQl9OwoJfSBlbHNlIHsKCQlmYWN0b3J5KCBnbG9i YWwgKTsKCX0KCi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQg eWV0Cn0odHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cgOiB0 aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHsKCi8vIENhbid0IGRv IHRoaXMgYmVjYXVzZSBzZXZlcmFsIGFwcHMgaW5jbHVkaW5nIEFTUC5ORVQgdHJh Y2UKLy8gdGhlIHN0YWNrIHZpYSBhcmd1bWVudHMuY2FsbGVyLmNhbGxlZSBhbmQg RmlyZWZveCBkaWVzIGlmCi8vIHlvdSB0cnkgdG8gdHJhY2UgdGhyb3VnaCAidXNl IHN0cmljdCIgY2FsbCBjaGFpbnMuICgjMTMzMzUpCi8vIFN1cHBvcnQ6IEZpcmVm b3ggMTgrCi8vCgp2YXIgZGVsZXRlZElkcyA9IFtdOwoKdmFyIHNsaWNlID0gZGVs ZXRlZElkcy5zbGljZTsKCnZhciBjb25jYXQgPSBkZWxldGVkSWRzLmNvbmNhdDsK CnZhciBwdXNoID0gZGVsZXRlZElkcy5wdXNoOwoKdmFyIGluZGV4T2YgPSBkZWxl dGVkSWRzLmluZGV4T2Y7Cgp2YXIgY2xhc3MydHlwZSA9IHt9OwoKdmFyIHRvU3Ry aW5nID0gY2xhc3MydHlwZS50b1N0cmluZzsKCnZhciBoYXNPd24gPSBjbGFzczJ0 eXBlLmhhc093blByb3BlcnR5OwoKdmFyIHRyaW0gPSAiIi50cmltOwoKdmFyIHN1 cHBvcnQgPSB7fTsKCgoKdmFyCgl2ZXJzaW9uID0gIjEuMTEuMCIsCgoJLy8gRGVm aW5lIGEgbG9jYWwgY29weSBvZiBqUXVlcnkKCWpRdWVyeSA9IGZ1bmN0aW9uKCBz ZWxlY3RvciwgY29udGV4dCApIHsKCQkvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBh Y3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCcKCQkv LyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJv ciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKQoJCXJldHVybiBuZXcgalF1 ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7Cgl9LAoKCS8vIE1ha2Ug c3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUCAoaGVyZSdzIGxvb2tpbmcgYXQgeW91 LCBTYWZhcmkgNS4wIGFuZCBJRSkKCXJ0cmltID0gL15bXHNcdUZFRkZceEEwXSt8 W1xzXHVGRUZGXHhBMF0rJC9nLAoKCS8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBm b3IgY2FtZWxpemluZwoJcm1zUHJlZml4ID0gL14tbXMtLywKCXJkYXNoQWxwaGEg PSAvLShbXGRhLXpdKS9naSwKCgkvLyBVc2VkIGJ5IGpRdWVyeS5jYW1lbENhc2Ug YXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpCglmY2FtZWxDYXNlID0gZnVuY3Rpb24o IGFsbCwgbGV0dGVyICkgewoJCXJldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTsK CX07CgpqUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0gewoJLy8gVGhlIGN1 cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZAoJanF1ZXJ5OiB2ZXJz aW9uLAoKCWNvbnN0cnVjdG9yOiBqUXVlcnksCgoJLy8gU3RhcnQgd2l0aCBhbiBl bXB0eSBzZWxlY3RvcgoJc2VsZWN0b3I6ICIiLAoKCS8vIFRoZSBkZWZhdWx0IGxl bmd0aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMAoJbGVuZ3RoOiAwLAoKCXRvQXJy YXk6IGZ1bmN0aW9uKCkgewoJCXJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7Cgl9 LAoKCS8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVu dCBzZXQgT1IKCS8vIEdldCB0aGUgd2hvbGUgbWF0Y2hlZCBlbGVtZW50IHNldCBh cyBhIGNsZWFuIGFycmF5CglnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7CgkJcmV0dXJu IG51bSAhPSBudWxsID8KCgkJCS8vIFJldHVybiBhICdjbGVhbicgYXJyYXkKCQkJ KCBudW0gPCAwID8gdGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51 bSBdICkgOgoKCQkJLy8gUmV0dXJuIGp1c3QgdGhlIG9iamVjdAoJCQlzbGljZS5j YWxsKCB0aGlzICk7Cgl9LAoKCS8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMg YW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2sKCS8vIChyZXR1cm5pbmcgdGhlIG5l dyBtYXRjaGVkIGVsZW1lbnQgc2V0KQoJcHVzaFN0YWNrOiBmdW5jdGlvbiggZWxl bXMgKSB7CgoJCS8vIEJ1aWxkIGEgbmV3IGpRdWVyeSBtYXRjaGVkIGVsZW1lbnQg c2V0CgkJdmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhpcy5jb25zdHJ1Y3Rvcigp LCBlbGVtcyApOwoKCQkvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3Rh Y2sgKGFzIGEgcmVmZXJlbmNlKQoJCXJldC5wcmV2T2JqZWN0ID0gdGhpczsKCQly ZXQuY29udGV4dCA9IHRoaXMuY29udGV4dDsKCgkJLy8gUmV0dXJuIHRoZSBuZXds eS1mb3JtZWQgZWxlbWVudCBzZXQKCQlyZXR1cm4gcmV0OwoJfSwKCgkvLyBFeGVj dXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQg c2V0LgoJLy8gKFlvdSBjYW4gc2VlZCB0aGUgYXJndW1lbnRzIHdpdGggYW4gYXJy YXkgb2YgYXJncywgYnV0IHRoaXMgaXMKCS8vIG9ubHkgdXNlZCBpbnRlcm5hbGx5 LikKCWVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjaywgYXJncyApIHsKCQlyZXR1cm4g alF1ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrLCBhcmdzICk7Cgl9LAoKCW1hcDog ZnVuY3Rpb24oIGNhbGxiYWNrICkgewoJCXJldHVybiB0aGlzLnB1c2hTdGFjaygg alF1ZXJ5Lm1hcCh0aGlzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKCQkJcmV0dXJu IGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTsKCQl9KSk7Cgl9LAoKCXNs aWNlOiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNl LmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApOwoJfSwKCglmaXJzdDogZnVuY3Rp b24oKSB7CgkJcmV0dXJuIHRoaXMuZXEoIDAgKTsKCX0sCgoJbGFzdDogZnVuY3Rp b24oKSB7CgkJcmV0dXJuIHRoaXMuZXEoIC0xICk7Cgl9LAoKCWVxOiBmdW5jdGlv biggaSApIHsKCQl2YXIgbGVuID0gdGhpcy5sZW5ndGgsCgkJCWogPSAraSArICgg aSA8IDAgPyBsZW4gOiAwICk7CgkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqID49 IDAgJiYgaiA8IGxlbiA/IFsgdGhpc1tqXSBdIDogW10gKTsKCX0sCgoJZW5kOiBm dW5jdGlvbigpIHsKCQlyZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29u c3RydWN0b3IobnVsbCk7Cgl9LAoKCS8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS4K CS8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBq UXVlcnkgbWV0aG9kLgoJcHVzaDogcHVzaCwKCXNvcnQ6IGRlbGV0ZWRJZHMuc29y dCwKCXNwbGljZTogZGVsZXRlZElkcy5zcGxpY2UKfTsKCmpRdWVyeS5leHRlbmQg PSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7Cgl2YXIgc3JjLCBjb3B5 SXNBcnJheSwgY29weSwgbmFtZSwgb3B0aW9ucywgY2xvbmUsCgkJdGFyZ2V0ID0g YXJndW1lbnRzWzBdIHx8IHt9LAoJCWkgPSAxLAoJCWxlbmd0aCA9IGFyZ3VtZW50 cy5sZW5ndGgsCgkJZGVlcCA9IGZhbHNlOwoKCS8vIEhhbmRsZSBhIGRlZXAgY29w eSBzaXR1YXRpb24KCWlmICggdHlwZW9mIHRhcmdldCA9PT0gImJvb2xlYW4iICkg ewoJCWRlZXAgPSB0YXJnZXQ7CgoJCS8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRo ZSB0YXJnZXQKCQl0YXJnZXQgPSBhcmd1bWVudHNbIGkgXSB8fCB7fTsKCQlpKys7 Cgl9CgoJLy8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Ig c29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpCglpZiAoIHR5cGVvZiB0 YXJnZXQgIT09ICJvYmplY3QiICYmICFqUXVlcnkuaXNGdW5jdGlvbih0YXJnZXQp ICkgewoJCXRhcmdldCA9IHt9OwoJfQoKCS8vIGV4dGVuZCBqUXVlcnkgaXRzZWxm IGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZAoJaWYgKCBpID09PSBsZW5n dGggKSB7CgkJdGFyZ2V0ID0gdGhpczsKCQlpLS07Cgl9CgoJZm9yICggOyBpIDwg bGVuZ3RoOyBpKysgKSB7CgkJLy8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5k ZWZpbmVkIHZhbHVlcwoJCWlmICggKG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSkg IT0gbnVsbCApIHsKCQkJLy8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdAoJCQlmb3Ig KCBuYW1lIGluIG9wdGlvbnMgKSB7CgkJCQlzcmMgPSB0YXJnZXRbIG5hbWUgXTsK CQkJCWNvcHkgPSBvcHRpb25zWyBuYW1lIF07CgoJCQkJLy8gUHJldmVudCBuZXZl ci1lbmRpbmcgbG9vcAoJCQkJaWYgKCB0YXJnZXQgPT09IGNvcHkgKSB7CgkJCQkJ Y29udGludWU7CgkJCQl9CgoJCQkJLy8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5n IHBsYWluIG9iamVjdHMgb3IgYXJyYXlzCgkJCQlpZiAoIGRlZXAgJiYgY29weSAm JiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KGNvcHkpIHx8IChjb3B5SXNBcnJheSA9 IGpRdWVyeS5pc0FycmF5KGNvcHkpKSApICkgewoJCQkJCWlmICggY29weUlzQXJy YXkgKSB7CgkJCQkJCWNvcHlJc0FycmF5ID0gZmFsc2U7CgkJCQkJCWNsb25lID0g c3JjICYmIGpRdWVyeS5pc0FycmF5KHNyYykgPyBzcmMgOiBbXTsKCgkJCQkJfSBl bHNlIHsKCQkJCQkJY2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3Qo c3JjKSA/IHNyYyA6IHt9OwoJCQkJCX0KCgkJCQkJLy8gTmV2ZXIgbW92ZSBvcmln aW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtCgkJCQkJdGFyZ2V0WyBuYW1lIF0gPSBq UXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApOwoKCQkJCS8vIERvbid0 IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXMKCQkJCX0gZWxzZSBpZiAoIGNvcHkg IT09IHVuZGVmaW5lZCApIHsKCQkJCQl0YXJnZXRbIG5hbWUgXSA9IGNvcHk7CgkJ CQl9CgkJCX0KCQl9Cgl9CgoJLy8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3QK CXJldHVybiB0YXJnZXQ7Cn07CgpqUXVlcnkuZXh0ZW5kKHsKCS8vIFVuaXF1ZSBm b3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZQoJZXhwYW5kbzogImpR dWVyeSIgKyAoIHZlcnNpb24gKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xE L2csICIiICksCgoJLy8gQXNzdW1lIGpRdWVyeSBpcyByZWFkeSB3aXRob3V0IHRo ZSByZWFkeSBtb2R1bGUKCWlzUmVhZHk6IHRydWUsCgoJZXJyb3I6IGZ1bmN0aW9u KCBtc2cgKSB7CgkJdGhyb3cgbmV3IEVycm9yKCBtc2cgKTsKCX0sCgoJbm9vcDog ZnVuY3Rpb24oKSB7fSwKCgkvLyBTZWUgdGVzdC91bml0L2NvcmUuanMgZm9yIGRl dGFpbHMgY29uY2VybmluZyBpc0Z1bmN0aW9uLgoJLy8gU2luY2UgdmVyc2lvbiAx LjMsIERPTSBtZXRob2RzIGFuZCBmdW5jdGlvbnMgbGlrZSBhbGVydAoJLy8gYXJl bid0IHN1cHBvcnRlZC4gVGhleSByZXR1cm4gZmFsc2Ugb24gSUUgKCMyOTY4KS4K CWlzRnVuY3Rpb246IGZ1bmN0aW9uKCBvYmogKSB7CgkJcmV0dXJuIGpRdWVyeS50 eXBlKG9iaikgPT09ICJmdW5jdGlvbiI7Cgl9LAoKCWlzQXJyYXk6IEFycmF5Lmlz QXJyYXkgfHwgZnVuY3Rpb24oIG9iaiApIHsKCQlyZXR1cm4galF1ZXJ5LnR5cGUo b2JqKSA9PT0gImFycmF5IjsKCX0sCgoJaXNXaW5kb3c6IGZ1bmN0aW9uKCBvYmog KSB7CgkJLyoganNoaW50IGVxZXFlcTogZmFsc2UgKi8KCQlyZXR1cm4gb2JqICE9 IG51bGwgJiYgb2JqID09IG9iai53aW5kb3c7Cgl9LAoKCWlzTnVtZXJpYzogZnVu Y3Rpb24oIG9iaiApIHsKCQkvLyBwYXJzZUZsb2F0IE5hTnMgbnVtZXJpYy1jYXN0 IGZhbHNlIHBvc2l0aXZlcyAobnVsbHx0cnVlfGZhbHNlfCIiKQoJCS8vIC4uLmJ1 dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3Vs YXJseSBoZXggbGl0ZXJhbHMgKCIweC4uLiIpCgkJLy8gc3VidHJhY3Rpb24gZm9y Y2VzIGluZmluaXRpZXMgdG8gTmFOCgkJcmV0dXJuIG9iaiAtIHBhcnNlRmxvYXQo IG9iaiApID49IDA7Cgl9LAoKCWlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmog KSB7CgkJdmFyIG5hbWU7CgkJZm9yICggbmFtZSBpbiBvYmogKSB7CgkJCXJldHVy biBmYWxzZTsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9LAoKCWlzUGxhaW5PYmplY3Q6 IGZ1bmN0aW9uKCBvYmogKSB7CgkJdmFyIGtleTsKCgkJLy8gTXVzdCBiZSBhbiBP YmplY3QuCgkJLy8gQmVjYXVzZSBvZiBJRSwgd2UgYWxzbyBoYXZlIHRvIGNoZWNr IHRoZSBwcmVzZW5jZSBvZiB0aGUgY29uc3RydWN0b3IgcHJvcGVydHkuCgkJLy8g TWFrZSBzdXJlIHRoYXQgRE9NIG5vZGVzIGFuZCB3aW5kb3cgb2JqZWN0cyBkb24n dCBwYXNzIHRocm91Z2gsIGFzIHdlbGwKCQlpZiAoICFvYmogfHwgalF1ZXJ5LnR5 cGUob2JqKSAhPT0gIm9iamVjdCIgfHwgb2JqLm5vZGVUeXBlIHx8IGpRdWVyeS5p c1dpbmRvdyggb2JqICkgKSB7CgkJCXJldHVybiBmYWxzZTsKCQl9CgoJCXRyeSB7 CgkJCS8vIE5vdCBvd24gY29uc3RydWN0b3IgcHJvcGVydHkgbXVzdCBiZSBPYmpl Y3QKCQkJaWYgKCBvYmouY29uc3RydWN0b3IgJiYKCQkJCSFoYXNPd24uY2FsbChv YmosICJjb25zdHJ1Y3RvciIpICYmCgkJCQkhaGFzT3duLmNhbGwob2JqLmNvbnN0 cnVjdG9yLnByb3RvdHlwZSwgImlzUHJvdG90eXBlT2YiKSApIHsKCQkJCXJldHVy biBmYWxzZTsKCQkJfQoJCX0gY2F0Y2ggKCBlICkgewoJCQkvLyBJRTgsOSBXaWxs IHRocm93IGV4Y2VwdGlvbnMgb24gY2VydGFpbiBob3N0IG9iamVjdHMgIzk4OTcK CQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJLy8gU3VwcG9ydDogSUU8OQoJCS8vIEhh bmRsZSBpdGVyYXRpb24gb3ZlciBpbmhlcml0ZWQgcHJvcGVydGllcyBiZWZvcmUg b3duIHByb3BlcnRpZXMuCgkJaWYgKCBzdXBwb3J0Lm93bkxhc3QgKSB7CgkJCWZv ciAoIGtleSBpbiBvYmogKSB7CgkJCQlyZXR1cm4gaGFzT3duLmNhbGwoIG9iaiwg a2V5ICk7CgkJCX0KCQl9CgoJCS8vIE93biBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJh dGVkIGZpcnN0bHksIHNvIHRvIHNwZWVkIHVwLAoJCS8vIGlmIGxhc3Qgb25lIGlz IG93biwgdGhlbiBhbGwgcHJvcGVydGllcyBhcmUgb3duLgoJCWZvciAoIGtleSBp biBvYmogKSB7fQoKCQlyZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgfHwgaGFzT3du LmNhbGwoIG9iaiwga2V5ICk7Cgl9LAoKCXR5cGU6IGZ1bmN0aW9uKCBvYmogKSB7 CgkJaWYgKCBvYmogPT0gbnVsbCApIHsKCQkJcmV0dXJuIG9iaiArICIiOwoJCX0K CQlyZXR1cm4gdHlwZW9mIG9iaiA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIG9iaiA9 PT0gImZ1bmN0aW9uIiA/CgkJCWNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwob2Jq KSBdIHx8ICJvYmplY3QiIDoKCQkJdHlwZW9mIG9iajsKCX0sCgoJLy8gRXZhbHVh dGVzIGEgc2NyaXB0IGluIGEgZ2xvYmFsIGNvbnRleHQKCS8vIFdvcmthcm91bmRz IGJhc2VkIG9uIGZpbmRpbmdzIGJ5IEppbSBEcmlzY29sbAoJLy8gaHR0cDovL3dl YmxvZ3MuamF2YS5uZXQvYmxvZy9kcmlzY29sbC9hcmNoaXZlLzIwMDkvMDkvMDgv ZXZhbC1qYXZhc2NyaXB0LWdsb2JhbC1jb250ZXh0CglnbG9iYWxFdmFsOiBmdW5j dGlvbiggZGF0YSApIHsKCQlpZiAoIGRhdGEgJiYgalF1ZXJ5LnRyaW0oIGRhdGEg KSApIHsKCQkJLy8gV2UgdXNlIGV4ZWNTY3JpcHQgb24gSW50ZXJuZXQgRXhwbG9y ZXIKCQkJLy8gV2UgdXNlIGFuIGFub255bW91cyBmdW5jdGlvbiBzbyB0aGF0IGNv bnRleHQgaXMgd2luZG93CgkJCS8vIHJhdGhlciB0aGFuIGpRdWVyeSBpbiBGaXJl Zm94CgkJCSggd2luZG93LmV4ZWNTY3JpcHQgfHwgZnVuY3Rpb24oIGRhdGEgKSB7 CgkJCQl3aW5kb3dbICJldmFsIiBdLmNhbGwoIHdpbmRvdywgZGF0YSApOwoJCQl9 ICkoIGRhdGEgKTsKCQl9Cgl9LAoKCS8vIENvbnZlcnQgZGFzaGVkIHRvIGNhbWVs Q2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVsZXMKCS8vIE1pY3Jv c29mdCBmb3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICgjOTU3MikK CWNhbWVsQ2FzZTogZnVuY3Rpb24oIHN0cmluZyApIHsKCQlyZXR1cm4gc3RyaW5n LnJlcGxhY2UoIHJtc1ByZWZpeCwgIm1zLSIgKS5yZXBsYWNlKCByZGFzaEFscGhh LCBmY2FtZWxDYXNlICk7Cgl9LAoKCW5vZGVOYW1lOiBmdW5jdGlvbiggZWxlbSwg bmFtZSApIHsKCQlyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1l LnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKTsKCX0sCgoJLy8g YXJncyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQoJZWFjaDogZnVuY3Rpb24o IG9iaiwgY2FsbGJhY2ssIGFyZ3MgKSB7CgkJdmFyIHZhbHVlLAoJCQlpID0gMCwK CQkJbGVuZ3RoID0gb2JqLmxlbmd0aCwKCQkJaXNBcnJheSA9IGlzQXJyYXlsaWtl KCBvYmogKTsKCgkJaWYgKCBhcmdzICkgewoJCQlpZiAoIGlzQXJyYXkgKSB7CgkJ CQlmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKCQkJCQl2YWx1ZSA9IGNhbGxi YWNrLmFwcGx5KCBvYmpbIGkgXSwgYXJncyApOwoKCQkJCQlpZiAoIHZhbHVlID09 PSBmYWxzZSApIHsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQl9IGVsc2Ug ewoJCQkJZm9yICggaSBpbiBvYmogKSB7CgkJCQkJdmFsdWUgPSBjYWxsYmFjay5h cHBseSggb2JqWyBpIF0sIGFyZ3MgKTsKCgkJCQkJaWYgKCB2YWx1ZSA9PT0gZmFs c2UgKSB7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkvLyBBIHNw ZWNpYWwsIGZhc3QsIGNhc2UgZm9yIHRoZSBtb3N0IGNvbW1vbiB1c2Ugb2YgZWFj aAoJCX0gZWxzZSB7CgkJCWlmICggaXNBcnJheSApIHsKCQkJCWZvciAoIDsgaSA8 IGxlbmd0aDsgaSsrICkgewoJCQkJCXZhbHVlID0gY2FsbGJhY2suY2FsbCggb2Jq WyBpIF0sIGksIG9ialsgaSBdICk7CgoJCQkJCWlmICggdmFsdWUgPT09IGZhbHNl ICkgewoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQlm b3IgKCBpIGluIG9iaiApIHsKCQkJCQl2YWx1ZSA9IGNhbGxiYWNrLmNhbGwoIG9i alsgaSBdLCBpLCBvYmpbIGkgXSApOwoKCQkJCQlpZiAoIHZhbHVlID09PSBmYWxz ZSApIHsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoKCQlyZXR1 cm4gb2JqOwoJfSwKCgkvLyBVc2UgbmF0aXZlIFN0cmluZy50cmltIGZ1bmN0aW9u IHdoZXJldmVyIHBvc3NpYmxlCgl0cmltOiB0cmltICYmICF0cmltLmNhbGwoIlx1 RkVGRlx4QTAiKSA/CgkJZnVuY3Rpb24oIHRleHQgKSB7CgkJCXJldHVybiB0ZXh0 ID09IG51bGwgPwoJCQkJIiIgOgoJCQkJdHJpbS5jYWxsKCB0ZXh0ICk7CgkJfSA6 CgoJCS8vIE90aGVyd2lzZSB1c2Ugb3VyIG93biB0cmltbWluZyBmdW5jdGlvbmFs aXR5CgkJZnVuY3Rpb24oIHRleHQgKSB7CgkJCXJldHVybiB0ZXh0ID09IG51bGwg PwoJCQkJIiIgOgoJCQkJKCB0ZXh0ICsgIiIgKS5yZXBsYWNlKCBydHJpbSwgIiIg KTsKCQl9LAoKCS8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkK CW1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHsKCQl2YXIgcmV0 ID0gcmVzdWx0cyB8fCBbXTsKCgkJaWYgKCBhcnIgIT0gbnVsbCApIHsKCQkJaWYg KCBpc0FycmF5bGlrZSggT2JqZWN0KGFycikgKSApIHsKCQkJCWpRdWVyeS5tZXJn ZSggcmV0LAoJCQkJCXR5cGVvZiBhcnIgPT09ICJzdHJpbmciID8KCQkJCQlbIGFy ciBdIDogYXJyCgkJCQkpOwoJCQl9IGVsc2UgewoJCQkJcHVzaC5jYWxsKCByZXQs IGFyciApOwoJCQl9CgkJfQoKCQlyZXR1cm4gcmV0OwoJfSwKCglpbkFycmF5OiBm dW5jdGlvbiggZWxlbSwgYXJyLCBpICkgewoJCXZhciBsZW47CgoJCWlmICggYXJy ICkgewoJCQlpZiAoIGluZGV4T2YgKSB7CgkJCQlyZXR1cm4gaW5kZXhPZi5jYWxs KCBhcnIsIGVsZW0sIGkgKTsKCQkJfQoKCQkJbGVuID0gYXJyLmxlbmd0aDsKCQkJ aSA9IGkgPyBpIDwgMCA/IE1hdGgubWF4KCAwLCBsZW4gKyBpICkgOiBpIDogMDsK CgkJCWZvciAoIDsgaSA8IGxlbjsgaSsrICkgewoJCQkJLy8gU2tpcCBhY2Nlc3Np bmcgaW4gc3BhcnNlIGFycmF5cwoJCQkJaWYgKCBpIGluIGFyciAmJiBhcnJbIGkg XSA9PT0gZWxlbSApIHsKCQkJCQlyZXR1cm4gaTsKCQkJCX0KCQkJfQoJCX0KCgkJ cmV0dXJuIC0xOwoJfSwKCgltZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQg KSB7CgkJdmFyIGxlbiA9ICtzZWNvbmQubGVuZ3RoLAoJCQlqID0gMCwKCQkJaSA9 IGZpcnN0Lmxlbmd0aDsKCgkJd2hpbGUgKCBqIDwgbGVuICkgewoJCQlmaXJzdFsg aSsrIF0gPSBzZWNvbmRbIGorKyBdOwoJCX0KCgkJLy8gU3VwcG9ydDogSUU8OQoJ CS8vIFdvcmthcm91bmQgY2FzdGluZyBvZiAubGVuZ3RoIHRvIE5hTiBvbiBvdGhl cndpc2UgYXJyYXlsaWtlIG9iamVjdHMgKGUuZy4sIE5vZGVMaXN0cykKCQlpZiAo IGxlbiAhPT0gbGVuICkgewoJCQl3aGlsZSAoIHNlY29uZFtqXSAhPT0gdW5kZWZp bmVkICkgewoJCQkJZmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqKysgXTsKCQkJfQoJ CX0KCgkJZmlyc3QubGVuZ3RoID0gaTsKCgkJcmV0dXJuIGZpcnN0OwoJfSwKCgln cmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7CgkJdmFy IGNhbGxiYWNrSW52ZXJzZSwKCQkJbWF0Y2hlcyA9IFtdLAoJCQlpID0gMCwKCQkJ bGVuZ3RoID0gZWxlbXMubGVuZ3RoLAoJCQljYWxsYmFja0V4cGVjdCA9ICFpbnZl cnQ7CgoJCS8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBvbmx5IHNhdmluZyB0aGUg aXRlbXMKCQkvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvbgoJCWZv ciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewoJCQljYWxsYmFja0ludmVyc2UgPSAh Y2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTsKCQkJaWYgKCBjYWxsYmFja0ludmVy c2UgIT09IGNhbGxiYWNrRXhwZWN0ICkgewoJCQkJbWF0Y2hlcy5wdXNoKCBlbGVt c1sgaSBdICk7CgkJCX0KCQl9CgoJCXJldHVybiBtYXRjaGVzOwoJfSwKCgkvLyBh cmcgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkKCW1hcDogZnVuY3Rpb24oIGVs ZW1zLCBjYWxsYmFjaywgYXJnICkgewoJCXZhciB2YWx1ZSwKCQkJaSA9IDAsCgkJ CWxlbmd0aCA9IGVsZW1zLmxlbmd0aCwKCQkJaXNBcnJheSA9IGlzQXJyYXlsaWtl KCBlbGVtcyApLAoJCQlyZXQgPSBbXTsKCgkJLy8gR28gdGhyb3VnaCB0aGUgYXJy YXksIHRyYW5zbGF0aW5nIGVhY2ggb2YgdGhlIGl0ZW1zIHRvIHRoZWlyIG5ldyB2 YWx1ZXMKCQlpZiAoIGlzQXJyYXkgKSB7CgkJCWZvciAoIDsgaSA8IGxlbmd0aDsg aSsrICkgewoJCQkJdmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJn ICk7CgoJCQkJaWYgKCB2YWx1ZSAhPSBudWxsICkgewoJCQkJCXJldC5wdXNoKCB2 YWx1ZSApOwoJCQkJfQoJCQl9CgoJCS8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9u IHRoZSBvYmplY3QsCgkJfSBlbHNlIHsKCQkJZm9yICggaSBpbiBlbGVtcyApIHsK CQkJCXZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApOwoKCQkJ CWlmICggdmFsdWUgIT0gbnVsbCApIHsKCQkJCQlyZXQucHVzaCggdmFsdWUgKTsK CQkJCX0KCQkJfQoJCX0KCgkJLy8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cwoJ CXJldHVybiBjb25jYXQuYXBwbHkoIFtdLCByZXQgKTsKCX0sCgoJLy8gQSBnbG9i YWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzCglndWlkOiAxLAoKCS8vIEJpbmQg YSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFw cGx5aW5nIGFueQoJLy8gYXJndW1lbnRzLgoJcHJveHk6IGZ1bmN0aW9uKCBmbiwg Y29udGV4dCApIHsKCQl2YXIgYXJncywgcHJveHksIHRtcDsKCgkJaWYgKCB0eXBl b2YgY29udGV4dCA9PT0gInN0cmluZyIgKSB7CgkJCXRtcCA9IGZuWyBjb250ZXh0 IF07CgkJCWNvbnRleHQgPSBmbjsKCQkJZm4gPSB0bXA7CgkJfQoKCQkvLyBRdWlj ayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0 aGUgc3BlYwoJCS8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2ls bCBqdXN0IHJldHVybiB1bmRlZmluZWQuCgkJaWYgKCAhalF1ZXJ5LmlzRnVuY3Rp b24oIGZuICkgKSB7CgkJCXJldHVybiB1bmRlZmluZWQ7CgkJfQoKCQkvLyBTaW11 bGF0ZWQgYmluZAoJCWFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTsK CQlwcm94eSA9IGZ1bmN0aW9uKCkgewoJCQlyZXR1cm4gZm4uYXBwbHkoIGNvbnRl eHQgfHwgdGhpcywgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyAp ICkgKTsKCQl9OwoKCQkvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRsZXIg dG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJl bW92ZWQKCQlwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5 Lmd1aWQrKzsKCgkJcmV0dXJuIHByb3h5OwoJfSwKCglub3c6IGZ1bmN0aW9uKCkg ewoJCXJldHVybiArKCBuZXcgRGF0ZSgpICk7Cgl9LAoKCS8vIGpRdWVyeS5zdXBw b3J0IGlzIG5vdCB1c2VkIGluIENvcmUgYnV0IG90aGVyIHByb2plY3RzIGF0dGFj aCB0aGVpcgoJLy8gcHJvcGVydGllcyB0byBpdCBzbyBpdCBuZWVkcyB0byBleGlz dC4KCXN1cHBvcnQ6IHN1cHBvcnQKfSk7CgovLyBQb3B1bGF0ZSB0aGUgY2xhc3My dHlwZSBtYXAKalF1ZXJ5LmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5j dGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IiLnNwbGl0KCIgIiks IGZ1bmN0aW9uKGksIG5hbWUpIHsKCWNsYXNzMnR5cGVbICJbb2JqZWN0ICIgKyBu YW1lICsgIl0iIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7Cn0pOwoKZnVuY3Rpb24g aXNBcnJheWxpa2UoIG9iaiApIHsKCXZhciBsZW5ndGggPSBvYmoubGVuZ3RoLAoJ CXR5cGUgPSBqUXVlcnkudHlwZSggb2JqICk7CgoJaWYgKCB0eXBlID09PSAiZnVu Y3Rpb24iIHx8IGpRdWVyeS5pc1dpbmRvdyggb2JqICkgKSB7CgkJcmV0dXJuIGZh bHNlOwoJfQoKCWlmICggb2JqLm5vZGVUeXBlID09PSAxICYmIGxlbmd0aCApIHsK CQlyZXR1cm4gdHJ1ZTsKCX0KCglyZXR1cm4gdHlwZSA9PT0gImFycmF5IiB8fCBs ZW5ndGggPT09IDAgfHwKCQl0eXBlb2YgbGVuZ3RoID09PSAibnVtYmVyIiAmJiBs ZW5ndGggPiAwICYmICggbGVuZ3RoIC0gMSApIGluIG9iajsKfQp2YXIgU2l6emxl ID0KLyohCiAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lIHYxLjEwLjE2CiAq IGh0dHA6Ly9zaXp6bGVqcy5jb20vCiAqCiAqIENvcHlyaWdodCAyMDEzIGpRdWVy eSBGb3VuZGF0aW9uLCBJbmMuIGFuZCBvdGhlciBjb250cmlidXRvcnMKICogUmVs ZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiAqIGh0dHA6Ly9qcXVlcnkub3Jn L2xpY2Vuc2UKICoKICogRGF0ZTogMjAxNC0wMS0xMwogKi8KKGZ1bmN0aW9uKCB3 aW5kb3cgKSB7Cgp2YXIgaSwKCXN1cHBvcnQsCglFeHByLAoJZ2V0VGV4dCwKCWlz WE1MLAoJY29tcGlsZSwKCW91dGVybW9zdENvbnRleHQsCglzb3J0SW5wdXQsCglo YXNEdXBsaWNhdGUsCgoJLy8gTG9jYWwgZG9jdW1lbnQgdmFycwoJc2V0RG9jdW1l bnQsCglkb2N1bWVudCwKCWRvY0VsZW0sCglkb2N1bWVudElzSFRNTCwKCXJidWdn eVFTQSwKCXJidWdneU1hdGNoZXMsCgltYXRjaGVzLAoJY29udGFpbnMsCgoJLy8g SW5zdGFuY2Utc3BlY2lmaWMgZGF0YQoJZXhwYW5kbyA9ICJzaXp6bGUiICsgLShu ZXcgRGF0ZSgpKSwKCXByZWZlcnJlZERvYyA9IHdpbmRvdy5kb2N1bWVudCwKCWRp cnJ1bnMgPSAwLAoJZG9uZSA9IDAsCgljbGFzc0NhY2hlID0gY3JlYXRlQ2FjaGUo KSwKCXRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLAoJY29tcGlsZXJDYWNoZSA9 IGNyZWF0ZUNhY2hlKCksCglzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHsK CQlpZiAoIGEgPT09IGIgKSB7CgkJCWhhc0R1cGxpY2F0ZSA9IHRydWU7CgkJfQoJ CXJldHVybiAwOwoJfSwKCgkvLyBHZW5lcmFsLXB1cnBvc2UgY29uc3RhbnRzCglz dHJ1bmRlZmluZWQgPSB0eXBlb2YgdW5kZWZpbmVkLAoJTUFYX05FR0FUSVZFID0g MSA8PCAzMSwKCgkvLyBJbnN0YW5jZSBtZXRob2RzCgloYXNPd24gPSAoe30pLmhh c093blByb3BlcnR5LAoJYXJyID0gW10sCglwb3AgPSBhcnIucG9wLAoJcHVzaF9u YXRpdmUgPSBhcnIucHVzaCwKCXB1c2ggPSBhcnIucHVzaCwKCXNsaWNlID0gYXJy LnNsaWNlLAoJLy8gVXNlIGEgc3RyaXBwZWQtZG93biBpbmRleE9mIGlmIHdlIGNh bid0IHVzZSBhIG5hdGl2ZSBvbmUKCWluZGV4T2YgPSBhcnIuaW5kZXhPZiB8fCBm dW5jdGlvbiggZWxlbSApIHsKCQl2YXIgaSA9IDAsCgkJCWxlbiA9IHRoaXMubGVu Z3RoOwoJCWZvciAoIDsgaSA8IGxlbjsgaSsrICkgewoJCQlpZiAoIHRoaXNbaV0g PT09IGVsZW0gKSB7CgkJCQlyZXR1cm4gaTsKCQkJfQoJCX0KCQlyZXR1cm4gLTE7 Cgl9LAoKCWJvb2xlYW5zID0gImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2Zv Y3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21h cHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIiwK CgkvLyBSZWd1bGFyIGV4cHJlc3Npb25zCgoJLy8gV2hpdGVzcGFjZSBjaGFyYWN0 ZXJzIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0ZXNw YWNlCgl3aGl0ZXNwYWNlID0gIltcXHgyMFxcdFxcclxcblxcZl0iLAoJLy8gaHR0 cDovL3d3dy53My5vcmcvVFIvY3NzMy1zeW50YXgvI2NoYXJhY3RlcnMKCWNoYXJh Y3RlckVuY29kaW5nID0gIig/OlxcXFwufFtcXHctXXxbXlxceDAwLVxceGEwXSkr IiwKCgkvLyBMb29zZWx5IG1vZGVsZWQgb24gQ1NTIGlkZW50aWZpZXIgY2hhcmFj dGVycwoJLy8gQW4gdW5xdW90ZWQgdmFsdWUgc2hvdWxkIGJlIGEgQ1NTIGlkZW50 aWZpZXIgaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI2F0dHJp YnV0ZS1zZWxlY3RvcnMKCS8vIFByb3BlciBzeW50YXg6IGh0dHA6Ly93d3cudzMu b3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCN2YWx1ZS1kZWYtaWRlbnRpZmllcgoJ aWRlbnRpZmllciA9IGNoYXJhY3RlckVuY29kaW5nLnJlcGxhY2UoICJ3IiwgIncj IiApLAoKCS8vIEFjY2VwdGFibGUgb3BlcmF0b3JzIGh0dHA6Ly93d3cudzMub3Jn L1RSL3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9ycwoJYXR0cmlidXRlcyA9 ICJcXFsiICsgd2hpdGVzcGFjZSArICIqKCIgKyBjaGFyYWN0ZXJFbmNvZGluZyAr ICIpIiArIHdoaXRlc3BhY2UgKwoJCSIqKD86KFsqXiR8IX5dPz0pIiArIHdoaXRl c3BhY2UgKyAiKig/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCIg KyBpZGVudGlmaWVyICsgIil8KXwpIiArIHdoaXRlc3BhY2UgKyAiKlxcXSIsCgoJ Ly8gUHJlZmVyIGFyZ3VtZW50cyBxdW90ZWQsCgkvLyAgIHRoZW4gbm90IGNvbnRh aW5pbmcgcHNldWRvcy9icmFja2V0cywKCS8vICAgdGhlbiBhdHRyaWJ1dGUgc2Vs ZWN0b3JzL25vbi1wYXJlbnRoZXRpY2FsIGV4cHJlc3Npb25zLAoJLy8gICB0aGVu IGFueXRoaW5nIGVsc2UKCS8vIFRoZXNlIHByZWZlcmVuY2VzIGFyZSBoZXJlIHRv IHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycwoJLy8gICBuZWVkaW5nIHRv a2VuaXplIGluIHRoZSBQU0VVRE8gcHJlRmlsdGVyCglwc2V1ZG9zID0gIjooIiAr IGNoYXJhY3RlckVuY29kaW5nICsgIikoPzpcXCgoKFsnXCJdKSgoPzpcXFxcLnxb XlxcXFxdKSo/KVxcM3woKD86XFxcXC58W15cXFxcKClbXFxdXXwiICsgYXR0cmli dXRlcy5yZXBsYWNlKCAzLCA4ICkgKyAiKSopfC4qKVxcKXwpIiwKCgkvLyBMZWFk aW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJp bmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUg bGF0dGVyCglydHJpbSA9IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAi K3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIiArIHdoaXRlc3BhY2UgKyAiKyQi LCAiZyIgKSwKCglyY29tbWEgPSBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNl ICsgIiosIiArIHdoaXRlc3BhY2UgKyAiKiIgKSwKCXJjb21iaW5hdG9ycyA9IG5l dyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAiKihbPit+XXwiICsgd2hpdGVz cGFjZSArICIpIiArIHdoaXRlc3BhY2UgKyAiKiIgKSwKCglyYXR0cmlidXRlUXVv dGVzID0gbmV3IFJlZ0V4cCggIj0iICsgd2hpdGVzcGFjZSArICIqKFteXFxdJ1wi XSo/KSIgKyB3aGl0ZXNwYWNlICsgIipcXF0iLCAiZyIgKSwKCglycHNldWRvID0g bmV3IFJlZ0V4cCggcHNldWRvcyApLAoJcmlkZW50aWZpZXIgPSBuZXcgUmVnRXhw KCAiXiIgKyBpZGVudGlmaWVyICsgIiQiICksCgoJbWF0Y2hFeHByID0gewoJCSJJ RCI6IG5ldyBSZWdFeHAoICJeIygiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAiKSIg KSwKCQkiQ0xBU1MiOiBuZXcgUmVnRXhwKCAiXlxcLigiICsgY2hhcmFjdGVyRW5j b2RpbmcgKyAiKSIgKSwKCQkiVEFHIjogbmV3IFJlZ0V4cCggIl4oIiArIGNoYXJh Y3RlckVuY29kaW5nLnJlcGxhY2UoICJ3IiwgIncqIiApICsgIikiICksCgkJIkFU VFIiOiBuZXcgUmVnRXhwKCAiXiIgKyBhdHRyaWJ1dGVzICksCgkJIlBTRVVETyI6 IG5ldyBSZWdFeHAoICJeIiArIHBzZXVkb3MgKSwKCQkiQ0hJTEQiOiBuZXcgUmVn RXhwKCAiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9m LXR5cGUpKD86XFwoIiArIHdoaXRlc3BhY2UgKwoJCQkiKihldmVufG9kZHwoKFsr LV18KShcXGQqKW58KSIgKyB3aGl0ZXNwYWNlICsgIiooPzooWystXXwpIiArIHdo aXRlc3BhY2UgKwoJCQkiKihcXGQrKXwpKSIgKyB3aGl0ZXNwYWNlICsgIipcXCl8 KSIsICJpIiApLAoJCSJib29sIjogbmV3IFJlZ0V4cCggIl4oPzoiICsgYm9vbGVh bnMgKyAiKSQiLCAiaSIgKSwKCQkvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBs ZW1lbnRpbmcgLmlzKCkKCQkvLyBXZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5n IGluIGBzZWxlY3RgCgkJIm5lZWRzQ29udGV4dCI6IG5ldyBSZWdFeHAoICJeIiAr IHdoaXRlc3BhY2UgKyAiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZp cnN0fGxhc3QpKD86XFwoIiArCgkJCXdoaXRlc3BhY2UgKyAiKigoPzotXFxkKT9c XGQqKSIgKyB3aGl0ZXNwYWNlICsgIipcXCl8KSg/PVteLV18JCkiLCAiaSIgKQoJ fSwKCglyaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9u KSQvaSwKCXJoZWFkZXIgPSAvXmhcZCQvaSwKCglybmF0aXZlID0gL15bXntdK1x7 XHMqXFtuYXRpdmUgXHcvLAoKCS8vIEVhc2lseS1wYXJzZWFibGUvcmV0cmlldmFi bGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9ycwoJcnF1aWNrRXhwciA9IC9e KD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sCgoJcnNpYmxpbmcgPSAv Wyt+XS8sCglyZXNjYXBlID0gLyd8XFwvZywKCgkvLyBDU1MgZXNjYXBlcyBodHRw Oi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFy YWN0ZXJzCglydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCAiXFxcXChbXFxkYS1mXXsx LDZ9IiArIHdoaXRlc3BhY2UgKyAiP3woIiArIHdoaXRlc3BhY2UgKyAiKXwuKSIs ICJpZyIgKSwKCWZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBfLCBlc2NhcGVkLCBlc2Nh cGVkV2hpdGVzcGFjZSApIHsKCQl2YXIgaGlnaCA9ICIweCIgKyBlc2NhcGVkIC0g MHgxMDAwMDsKCQkvLyBOYU4gbWVhbnMgbm9uLWNvZGVwb2ludAoJCS8vIFN1cHBv cnQ6IEZpcmVmb3gKCQkvLyBXb3JrYXJvdW5kIGVycm9uZW91cyBudW1lcmljIGlu dGVycHJldGF0aW9uIG9mICsiMHgiCgkJcmV0dXJuIGhpZ2ggIT09IGhpZ2ggfHwg ZXNjYXBlZFdoaXRlc3BhY2UgPwoJCQllc2NhcGVkIDoKCQkJaGlnaCA8IDAgPwoJ CQkJLy8gQk1QIGNvZGVwb2ludAoJCQkJU3RyaW5nLmZyb21DaGFyQ29kZSggaGln aCArIDB4MTAwMDAgKSA6CgkJCQkvLyBTdXBwbGVtZW50YWwgUGxhbmUgY29kZXBv aW50IChzdXJyb2dhdGUgcGFpcikKCQkJCVN0cmluZy5mcm9tQ2hhckNvZGUoIGhp Z2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApOwoJfTsK Ci8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApCnRyeSB7 CglwdXNoLmFwcGx5KAoJCShhcnIgPSBzbGljZS5jYWxsKCBwcmVmZXJyZWREb2Mu Y2hpbGROb2RlcyApKSwKCQlwcmVmZXJyZWREb2MuY2hpbGROb2RlcwoJKTsKCS8v IFN1cHBvcnQ6IEFuZHJvaWQ8NC4wCgkvLyBEZXRlY3Qgc2lsZW50bHkgZmFpbGlu ZyBwdXNoLmFwcGx5CglhcnJbIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzLmxlbmd0 aCBdLm5vZGVUeXBlOwp9IGNhdGNoICggZSApIHsKCXB1c2ggPSB7IGFwcGx5OiBh cnIubGVuZ3RoID8KCgkJLy8gTGV2ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGUKCQlm dW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7CgkJCXB1c2hfbmF0aXZlLmFwcGx5KCB0 YXJnZXQsIHNsaWNlLmNhbGwoZWxzKSApOwoJCX0gOgoKCQkvLyBTdXBwb3J0OiBJ RTw5CgkJLy8gT3RoZXJ3aXNlIGFwcGVuZCBkaXJlY3RseQoJCWZ1bmN0aW9uKCB0 YXJnZXQsIGVscyApIHsKCQkJdmFyIGogPSB0YXJnZXQubGVuZ3RoLAoJCQkJaSA9 IDA7CgkJCS8vIENhbid0IHRydXN0IE5vZGVMaXN0Lmxlbmd0aAoJCQl3aGlsZSAo ICh0YXJnZXRbaisrXSA9IGVsc1tpKytdKSApIHt9CgkJCXRhcmdldC5sZW5ndGgg PSBqIC0gMTsKCQl9Cgl9Owp9CgpmdW5jdGlvbiBTaXp6bGUoIHNlbGVjdG9yLCBj b250ZXh0LCByZXN1bHRzLCBzZWVkICkgewoJdmFyIG1hdGNoLCBlbGVtLCBtLCBu b2RlVHlwZSwKCQkvLyBRU0EgdmFycwoJCWksIGdyb3Vwcywgb2xkLCBuaWQsIG5l d0NvbnRleHQsIG5ld1NlbGVjdG9yOwoKCWlmICggKCBjb250ZXh0ID8gY29udGV4 dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBwcmVmZXJyZWREb2MgKSAhPT0g ZG9jdW1lbnQgKSB7CgkJc2V0RG9jdW1lbnQoIGNvbnRleHQgKTsKCX0KCgljb250 ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsKCXJlc3VsdHMgPSByZXN1bHRzIHx8 IFtdOwoKCWlmICggIXNlbGVjdG9yIHx8IHR5cGVvZiBzZWxlY3RvciAhPT0gInN0 cmluZyIgKSB7CgkJcmV0dXJuIHJlc3VsdHM7Cgl9CgoJaWYgKCAobm9kZVR5cGUg PSBjb250ZXh0Lm5vZGVUeXBlKSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSApIHsK CQlyZXR1cm4gW107Cgl9CgoJaWYgKCBkb2N1bWVudElzSFRNTCAmJiAhc2VlZCAp IHsKCgkJLy8gU2hvcnRjdXRzCgkJaWYgKCAobWF0Y2ggPSBycXVpY2tFeHByLmV4 ZWMoIHNlbGVjdG9yICkpICkgewoJCQkvLyBTcGVlZC11cDogU2l6emxlKCIjSUQi KQoJCQlpZiAoIChtID0gbWF0Y2hbMV0pICkgewoJCQkJaWYgKCBub2RlVHlwZSA9 PT0gOSApIHsKCQkJCQllbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbSAp OwoJCQkJCS8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2ggd2hlbiBCbGFja2Jl cnJ5IDQuNiByZXR1cm5zCgkJCQkJLy8gbm9kZXMgdGhhdCBhcmUgbm8gbG9uZ2Vy IGluIHRoZSBkb2N1bWVudCAoalF1ZXJ5ICM2OTYzKQoJCQkJCWlmICggZWxlbSAm JiBlbGVtLnBhcmVudE5vZGUgKSB7CgkJCQkJCS8vIEhhbmRsZSB0aGUgY2FzZSB3 aGVyZSBJRSwgT3BlcmEsIGFuZCBXZWJraXQgcmV0dXJuIGl0ZW1zCgkJCQkJCS8v IGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAoJCQkJCQlpZiAoIGVsZW0uaWQgPT09IG0g KSB7CgkJCQkJCQlyZXN1bHRzLnB1c2goIGVsZW0gKTsKCQkJCQkJCXJldHVybiBy ZXN1bHRzOwoJCQkJCQl9CgkJCQkJfSBlbHNlIHsKCQkJCQkJcmV0dXJuIHJlc3Vs dHM7CgkJCQkJfQoJCQkJfSBlbHNlIHsKCQkJCQkvLyBDb250ZXh0IGlzIG5vdCBh IGRvY3VtZW50CgkJCQkJaWYgKCBjb250ZXh0Lm93bmVyRG9jdW1lbnQgJiYgKGVs ZW0gPSBjb250ZXh0Lm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkg JiYKCQkJCQkJY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJiBlbGVtLmlkID09 PSBtICkgewoJCQkJCQlyZXN1bHRzLnB1c2goIGVsZW0gKTsKCQkJCQkJcmV0dXJu IHJlc3VsdHM7CgkJCQkJfQoJCQkJfQoKCQkJLy8gU3BlZWQtdXA6IFNpenpsZSgi VEFHIikKCQkJfSBlbHNlIGlmICggbWF0Y2hbMl0gKSB7CgkJCQlwdXNoLmFwcGx5 KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3Rv ciApICk7CgkJCQlyZXR1cm4gcmVzdWx0czsKCgkJCS8vIFNwZWVkLXVwOiBTaXp6 bGUoIi5DTEFTUyIpCgkJCX0gZWxzZSBpZiAoIChtID0gbWF0Y2hbM10pICYmIHN1 cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBjb250ZXh0LmdldEVsZW1l bnRzQnlDbGFzc05hbWUgKSB7CgkJCQlwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250 ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSApOwoJCQkJcmV0dXJuIHJl c3VsdHM7CgkJCX0KCQl9CgoJCS8vIFFTQSBwYXRoCgkJaWYgKCBzdXBwb3J0LnFz YSAmJiAoIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkp ICkgewoJCQluaWQgPSBvbGQgPSBleHBhbmRvOwoJCQluZXdDb250ZXh0ID0gY29u dGV4dDsKCQkJbmV3U2VsZWN0b3IgPSBub2RlVHlwZSA9PT0gOSAmJiBzZWxlY3Rv cjsKCgkJCS8vIHFTQSB3b3JrcyBzdHJhbmdlbHkgb24gRWxlbWVudC1yb290ZWQg cXVlcmllcwoJCQkvLyBXZSBjYW4gd29yayBhcm91bmQgdGhpcyBieSBzcGVjaWZ5 aW5nIGFuIGV4dHJhIElEIG9uIHRoZSByb290CgkJCS8vIGFuZCB3b3JraW5nIHVw IGZyb20gdGhlcmUgKFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGUgdGVj aG5pcXVlKQoJCQkvLyBJRSA4IGRvZXNuJ3Qgd29yayBvbiBvYmplY3QgZWxlbWVu dHMKCQkJaWYgKCBub2RlVHlwZSA9PT0gMSAmJiBjb250ZXh0Lm5vZGVOYW1lLnRv TG93ZXJDYXNlKCkgIT09ICJvYmplY3QiICkgewoJCQkJZ3JvdXBzID0gdG9rZW5p emUoIHNlbGVjdG9yICk7CgoJCQkJaWYgKCAob2xkID0gY29udGV4dC5nZXRBdHRy aWJ1dGUoImlkIikpICkgewoJCQkJCW5pZCA9IG9sZC5yZXBsYWNlKCByZXNjYXBl LCAiXFwkJiIgKTsKCQkJCX0gZWxzZSB7CgkJCQkJY29udGV4dC5zZXRBdHRyaWJ1 dGUoICJpZCIsIG5pZCApOwoJCQkJfQoJCQkJbmlkID0gIltpZD0nIiArIG5pZCAr ICInXSAiOwoKCQkJCWkgPSBncm91cHMubGVuZ3RoOwoJCQkJd2hpbGUgKCBpLS0g KSB7CgkJCQkJZ3JvdXBzW2ldID0gbmlkICsgdG9TZWxlY3RvciggZ3JvdXBzW2ld ICk7CgkJCQl9CgkJCQluZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0 b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29u dGV4dDsKCQkJCW5ld1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oIiwiKTsKCQkJfQoK CQkJaWYgKCBuZXdTZWxlY3RvciApIHsKCQkJCXRyeSB7CgkJCQkJcHVzaC5hcHBs eSggcmVzdWx0cywKCQkJCQkJbmV3Q29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCBu ZXdTZWxlY3RvciApCgkJCQkJKTsKCQkJCQlyZXR1cm4gcmVzdWx0czsKCQkJCX0g Y2F0Y2gocXNhRXJyb3IpIHsKCQkJCX0gZmluYWxseSB7CgkJCQkJaWYgKCAhb2xk ICkgewoJCQkJCQljb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTsKCQkJCQl9 CgkJCQl9CgkJCX0KCQl9Cgl9CgoJLy8gQWxsIG90aGVycwoJcmV0dXJuIHNlbGVj dCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sICIkMSIgKSwgY29udGV4dCwgcmVz dWx0cywgc2VlZCApOwp9CgovKioKICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMg b2YgbGltaXRlZCBzaXplCiAqIEByZXR1cm5zIHtGdW5jdGlvbihzdHJpbmcsIE9i amVjdCl9IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVyIHN0b3JpbmcgaXQg b24gaXRzZWxmIHdpdGgKICoJcHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZp eGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhw ci5jYWNoZUxlbmd0aCkKICoJZGVsZXRpbmcgdGhlIG9sZGVzdCBlbnRyeQogKi8K ZnVuY3Rpb24gY3JlYXRlQ2FjaGUoKSB7Cgl2YXIga2V5cyA9IFtdOwoKCWZ1bmN0 aW9uIGNhY2hlKCBrZXksIHZhbHVlICkgewoJCS8vIFVzZSAoa2V5ICsgIiAiKSB0 byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgcHJvdG90eXBlIHByb3BlcnRp ZXMgKHNlZSBJc3N1ZSAjMTU3KQoJCWlmICgga2V5cy5wdXNoKCBrZXkgKyAiICIg KSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7CgkJCS8vIE9ubHkga2VlcCB0aGUgbW9z dCByZWNlbnQgZW50cmllcwoJCQlkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBd OwoJCX0KCQlyZXR1cm4gKGNhY2hlWyBrZXkgKyAiICIgXSA9IHZhbHVlKTsKCX0K CXJldHVybiBjYWNoZTsKfQoKLyoqCiAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3Bl Y2lhbCB1c2UgYnkgU2l6emxlCiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBm dW5jdGlvbiB0byBtYXJrCiAqLwpmdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkg ewoJZm5bIGV4cGFuZG8gXSA9IHRydWU7CglyZXR1cm4gZm47Cn0KCi8qKgogKiBT dXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudAogKiBAcGFyYW0ge0Z1bmN0 aW9ufSBmbiBQYXNzZWQgdGhlIGNyZWF0ZWQgZGl2IGFuZCBleHBlY3RzIGEgYm9v bGVhbiByZXN1bHQKICovCmZ1bmN0aW9uIGFzc2VydCggZm4gKSB7Cgl2YXIgZGl2 ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CgoJdHJ5IHsKCQlyZXR1 cm4gISFmbiggZGl2ICk7Cgl9IGNhdGNoIChlKSB7CgkJcmV0dXJuIGZhbHNlOwoJ fSBmaW5hbGx5IHsKCQkvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1 bHQKCQlpZiAoIGRpdi5wYXJlbnROb2RlICkgewoJCQlkaXYucGFyZW50Tm9kZS5y ZW1vdmVDaGlsZCggZGl2ICk7CgkJfQoJCS8vIHJlbGVhc2UgbWVtb3J5IGluIElF CgkJZGl2ID0gbnVsbDsKCX0KfQoKLyoqCiAqIEFkZHMgdGhlIHNhbWUgaGFuZGxl ciBmb3IgYWxsIG9mIHRoZSBzcGVjaWZpZWQgYXR0cnMKICogQHBhcmFtIHtTdHJp bmd9IGF0dHJzIFBpcGUtc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlcwogKiBA cGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSBtZXRob2QgdGhhdCB3aWxsIGJl IGFwcGxpZWQKICovCmZ1bmN0aW9uIGFkZEhhbmRsZSggYXR0cnMsIGhhbmRsZXIg KSB7Cgl2YXIgYXJyID0gYXR0cnMuc3BsaXQoInwiKSwKCQlpID0gYXR0cnMubGVu Z3RoOwoKCXdoaWxlICggaS0tICkgewoJCUV4cHIuYXR0ckhhbmRsZVsgYXJyW2ld IF0gPSBoYW5kbGVyOwoJfQp9CgovKioKICogQ2hlY2tzIGRvY3VtZW50IG9yZGVy IG9mIHR3byBzaWJsaW5ncwogKiBAcGFyYW0ge0VsZW1lbnR9IGEKICogQHBhcmFt IHtFbGVtZW50fSBiCiAqIEByZXR1cm5zIHtOdW1iZXJ9IFJldHVybnMgbGVzcyB0 aGFuIDAgaWYgYSBwcmVjZWRlcyBiLCBncmVhdGVyIHRoYW4gMCBpZiBhIGZvbGxv d3MgYgogKi8KZnVuY3Rpb24gc2libGluZ0NoZWNrKCBhLCBiICkgewoJdmFyIGN1 ciA9IGIgJiYgYSwKCQlkaWZmID0gY3VyICYmIGEubm9kZVR5cGUgPT09IDEgJiYg Yi5ub2RlVHlwZSA9PT0gMSAmJgoJCQkoIH5iLnNvdXJjZUluZGV4IHx8IE1BWF9O RUdBVElWRSApIC0KCQkJKCB+YS5zb3VyY2VJbmRleCB8fCBNQVhfTkVHQVRJVkUg KTsKCgkvLyBVc2UgSUUgc291cmNlSW5kZXggaWYgYXZhaWxhYmxlIG9uIGJvdGgg bm9kZXMKCWlmICggZGlmZiApIHsKCQlyZXR1cm4gZGlmZjsKCX0KCgkvLyBDaGVj ayBpZiBiIGZvbGxvd3MgYQoJaWYgKCBjdXIgKSB7CgkJd2hpbGUgKCAoY3VyID0g Y3VyLm5leHRTaWJsaW5nKSApIHsKCQkJaWYgKCBjdXIgPT09IGIgKSB7CgkJCQly ZXR1cm4gLTE7CgkJCX0KCQl9Cgl9CgoJcmV0dXJuIGEgPyAxIDogLTE7Cn0KCi8q KgogKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlu cHV0IHR5cGVzCiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlCiAqLwpmdW5jdGlvbiBj cmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHsKCXJldHVybiBmdW5jdGlvbiggZWxl bSApIHsKCQl2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsK CQlyZXR1cm4gbmFtZSA9PT0gImlucHV0IiAmJiBlbGVtLnR5cGUgPT09IHR5cGU7 Cgl9Owp9CgovKioKICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1 ZG9zIGZvciBidXR0b25zCiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlCiAqLwpmdW5j dGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7CglyZXR1cm4gZnVuY3Rp b24oIGVsZW0gKSB7CgkJdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJD YXNlKCk7CgkJcmV0dXJuIChuYW1lID09PSAiaW5wdXQiIHx8IG5hbWUgPT09ICJi dXR0b24iKSAmJiBlbGVtLnR5cGUgPT09IHR5cGU7Cgl9Owp9CgovKioKICogUmV0 dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFs cwogKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbgogKi8KZnVuY3Rpb24gY3JlYXRlUG9z aXRpb25hbFBzZXVkbyggZm4gKSB7CglyZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0 aW9uKCBhcmd1bWVudCApIHsKCQlhcmd1bWVudCA9ICthcmd1bWVudDsKCQlyZXR1 cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkgewoJCQl2 YXIgaiwKCQkJCW1hdGNoSW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFy Z3VtZW50ICksCgkJCQlpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDsKCgkJCS8vIE1h dGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlcwoJCQl3 aGlsZSAoIGktLSApIHsKCQkJCWlmICggc2VlZFsgKGogPSBtYXRjaEluZGV4ZXNb aV0pIF0gKSB7CgkJCQkJc2VlZFtqXSA9ICEobWF0Y2hlc1tqXSA9IHNlZWRbal0p OwoJCQkJfQoJCQl9CgkJfSk7Cgl9KTsKfQoKLyoqCiAqIENoZWNrcyBhIG5vZGUg Zm9yIHZhbGlkaXR5IGFzIGEgU2l6emxlIGNvbnRleHQKICogQHBhcmFtIHtFbGVt ZW50fE9iamVjdD19IGNvbnRleHQKICogQHJldHVybnMge0VsZW1lbnR8T2JqZWN0 fEJvb2xlYW59IFRoZSBpbnB1dCBub2RlIGlmIGFjY2VwdGFibGUsIG90aGVyd2lz ZSBhIGZhbHN5IHZhbHVlCiAqLwpmdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4 dCApIHsKCXJldHVybiBjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0LmdldEVsZW1l bnRzQnlUYWdOYW1lICE9PSBzdHJ1bmRlZmluZWQgJiYgY29udGV4dDsKfQoKLy8g RXhwb3NlIHN1cHBvcnQgdmFycyBmb3IgY29udmVuaWVuY2UKc3VwcG9ydCA9IFNp enpsZS5zdXBwb3J0ID0ge307CgovKioKICogRGV0ZWN0cyBYTUwgbm9kZXMKICog QHBhcmFtIHtFbGVtZW50fE9iamVjdH0gZWxlbSBBbiBlbGVtZW50IG9yIGEgZG9j dW1lbnQKICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBu b24tSFRNTCBYTUwgbm9kZQogKi8KaXNYTUwgPSBTaXp6bGUuaXNYTUwgPSBmdW5j dGlvbiggZWxlbSApIHsKCS8vIGRvY3VtZW50RWxlbWVudCBpcyB2ZXJpZmllZCBm b3IgY2FzZXMgd2hlcmUgaXQgZG9lc24ndCB5ZXQgZXhpc3QKCS8vIChzdWNoIGFz IGxvYWRpbmcgaWZyYW1lcyBpbiBJRSAtICM0ODMzKQoJdmFyIGRvY3VtZW50RWxl bWVudCA9IGVsZW0gJiYgKGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtKS5kb2N1 bWVudEVsZW1lbnQ7CglyZXR1cm4gZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRF bGVtZW50Lm5vZGVOYW1lICE9PSAiSFRNTCIgOiBmYWxzZTsKfTsKCi8qKgogKiBT ZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhl IGN1cnJlbnQgZG9jdW1lbnQKICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gW2Rv Y10gQW4gZWxlbWVudCBvciBkb2N1bWVudCBvYmplY3QgdG8gdXNlIHRvIHNldCB0 aGUgZG9jdW1lbnQKICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3Vy cmVudCBkb2N1bWVudAogKi8Kc2V0RG9jdW1lbnQgPSBTaXp6bGUuc2V0RG9jdW1l bnQgPSBmdW5jdGlvbiggbm9kZSApIHsKCXZhciBoYXNDb21wYXJlLAoJCWRvYyA9 IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERv YywKCQlwYXJlbnQgPSBkb2MuZGVmYXVsdFZpZXc7CgoJLy8gSWYgbm8gZG9jdW1l bnQgYW5kIGRvY3VtZW50RWxlbWVudCBpcyBhdmFpbGFibGUsIHJldHVybgoJaWYg KCBkb2MgPT09IGRvY3VtZW50IHx8IGRvYy5ub2RlVHlwZSAhPT0gOSB8fCAhZG9j LmRvY3VtZW50RWxlbWVudCApIHsKCQlyZXR1cm4gZG9jdW1lbnQ7Cgl9CgoJLy8g U2V0IG91ciBkb2N1bWVudAoJZG9jdW1lbnQgPSBkb2M7Cglkb2NFbGVtID0gZG9j LmRvY3VtZW50RWxlbWVudDsKCgkvLyBTdXBwb3J0IHRlc3RzCglkb2N1bWVudElz SFRNTCA9ICFpc1hNTCggZG9jICk7CgoJLy8gU3VwcG9ydDogSUU+OAoJLy8gSWYg aWZyYW1lIGRvY3VtZW50IGlzIGFzc2lnbmVkIHRvICJkb2N1bWVudCIgdmFyaWFi bGUgYW5kIGlmIGlmcmFtZSBoYXMgYmVlbiByZWxvYWRlZCwKCS8vIElFIHdpbGwg dGhyb3cgInBlcm1pc3Npb24gZGVuaWVkIiBlcnJvciB3aGVuIGFjY2Vzc2luZyAi ZG9jdW1lbnQiIHZhcmlhYmxlLCBzZWUgalF1ZXJ5ICMxMzkzNgoJLy8gSUU2LTgg ZG8gbm90IHN1cHBvcnQgdGhlIGRlZmF1bHRWaWV3IHByb3BlcnR5IHNvIHBhcmVu dCB3aWxsIGJlIHVuZGVmaW5lZAoJaWYgKCBwYXJlbnQgJiYgcGFyZW50ICE9PSBw YXJlbnQudG9wICkgewoJCS8vIElFMTEgZG9lcyBub3QgaGF2ZSBhdHRhY2hFdmVu dCwgc28gYWxsIG11c3Qgc3VmZmVyCgkJaWYgKCBwYXJlbnQuYWRkRXZlbnRMaXN0 ZW5lciApIHsKCQkJcGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoICJ1bmxvYWQiLCBm dW5jdGlvbigpIHsKCQkJCXNldERvY3VtZW50KCk7CgkJCX0sIGZhbHNlICk7CgkJ fSBlbHNlIGlmICggcGFyZW50LmF0dGFjaEV2ZW50ICkgewoJCQlwYXJlbnQuYXR0 YWNoRXZlbnQoICJvbnVubG9hZCIsIGZ1bmN0aW9uKCkgewoJCQkJc2V0RG9jdW1l bnQoKTsKCQkJfSk7CgkJfQoJfQoKCS8qIEF0dHJpYnV0ZXMKCS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0gKi8KCgkvLyBTdXBwb3J0OiBJRTw4CgkvLyBWZXJpZnkgdGhh dCBnZXRBdHRyaWJ1dGUgcmVhbGx5IHJldHVybnMgYXR0cmlidXRlcyBhbmQgbm90 IHByb3BlcnRpZXMgKGV4Y2VwdGluZyBJRTggYm9vbGVhbnMpCglzdXBwb3J0LmF0 dHJpYnV0ZXMgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKCQlkaXYuY2xhc3NO YW1lID0gImkiOwoJCXJldHVybiAhZGl2LmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1l Iik7Cgl9KTsKCgkvKiBnZXRFbGVtZW50KHMpQnkqCgktLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tICovCgoJLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioi KSByZXR1cm5zIG9ubHkgZWxlbWVudHMKCXN1cHBvcnQuZ2V0RWxlbWVudHNCeVRh Z05hbWUgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKCQlkaXYuYXBwZW5kQ2hp bGQoIGRvYy5jcmVhdGVDb21tZW50KCIiKSApOwoJCXJldHVybiAhZGl2LmdldEVs ZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RoOwoJfSk7CgoJLy8gQ2hlY2sgaWYg Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSBjYW4gYmUgdHJ1c3RlZAoJc3VwcG9ydC5n ZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gcm5hdGl2ZS50ZXN0KCBkb2MuZ2V0RWxl bWVudHNCeUNsYXNzTmFtZSApICYmIGFzc2VydChmdW5jdGlvbiggZGl2ICkgewoJ CWRpdi5pbm5lckhUTUwgPSAiPGRpdiBjbGFzcz0nYSc+PC9kaXY+PGRpdiBjbGFz cz0nYSBpJz48L2Rpdj4iOwoKCQkvLyBTdXBwb3J0OiBTYWZhcmk8NAoJCS8vIENh dGNoIGNsYXNzIG92ZXItY2FjaGluZwoJCWRpdi5maXJzdENoaWxkLmNsYXNzTmFt ZSA9ICJpIjsKCQkvLyBTdXBwb3J0OiBPcGVyYTwxMAoJCS8vIENhdGNoIGdFQkNO IGZhaWx1cmUgdG8gZmluZCBub24tbGVhZGluZyBjbGFzc2VzCgkJcmV0dXJuIGRp di5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJpIikubGVuZ3RoID09PSAyOwoJfSk7 CgoJLy8gU3VwcG9ydDogSUU8MTAKCS8vIENoZWNrIGlmIGdldEVsZW1lbnRCeUlk IHJldHVybnMgZWxlbWVudHMgYnkgbmFtZQoJLy8gVGhlIGJyb2tlbiBnZXRFbGVt ZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbWF0aWNhbGx5LXNl dCBuYW1lcywKCS8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5h bWUgdGVzdAoJc3VwcG9ydC5nZXRCeUlkID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYg KSB7CgkJZG9jRWxlbS5hcHBlbmRDaGlsZCggZGl2ICkuaWQgPSBleHBhbmRvOwoJ CXJldHVybiAhZG9jLmdldEVsZW1lbnRzQnlOYW1lIHx8ICFkb2MuZ2V0RWxlbWVu dHNCeU5hbWUoIGV4cGFuZG8gKS5sZW5ndGg7Cgl9KTsKCgkvLyBJRCBmaW5kIGFu ZCBmaWx0ZXIKCWlmICggc3VwcG9ydC5nZXRCeUlkICkgewoJCUV4cHIuZmluZFsi SUQiXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHsKCQkJaWYgKCB0eXBlb2Yg Y29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gc3RydW5kZWZpbmVkICYmIGRvY3Vt ZW50SXNIVE1MICkgewoJCQkJdmFyIG0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlk KCBpZCApOwoJCQkJLy8gQ2hlY2sgcGFyZW50Tm9kZSB0byBjYXRjaCB3aGVuIEJs YWNrYmVycnkgNC42IHJldHVybnMKCQkJCS8vIG5vZGVzIHRoYXQgYXJlIG5vIGxv bmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMKCQkJCXJldHVybiBtICYmIG0ucGFy ZW50Tm9kZSA/IFttXSA6IFtdOwoJCQl9CgkJfTsKCQlFeHByLmZpbHRlclsiSUQi XSA9IGZ1bmN0aW9uKCBpZCApIHsKCQkJdmFyIGF0dHJJZCA9IGlkLnJlcGxhY2Uo IHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7CgkJCXJldHVybiBmdW5jdGlvbiggZWxl bSApIHsKCQkJCXJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKSA9PT0gYXR0 cklkOwoJCQl9OwoJCX07Cgl9IGVsc2UgewoJCS8vIFN1cHBvcnQ6IElFNi83CgkJ Ly8gZ2V0RWxlbWVudEJ5SWQgaXMgbm90IHJlbGlhYmxlIGFzIGEgZmluZCBzaG9y dGN1dAoJCWRlbGV0ZSBFeHByLmZpbmRbIklEIl07CgoJCUV4cHIuZmlsdGVyWyJJ RCJdID0gIGZ1bmN0aW9uKCBpZCApIHsKCQkJdmFyIGF0dHJJZCA9IGlkLnJlcGxh Y2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7CgkJCXJldHVybiBmdW5jdGlvbigg ZWxlbSApIHsKCQkJCXZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRl Tm9kZSAhPT0gc3RydW5kZWZpbmVkICYmIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgi aWQiKTsKCQkJCXJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGF0dHJJZDsK CQkJfTsKCQl9OwoJfQoKCS8vIFRhZwoJRXhwci5maW5kWyJUQUciXSA9IHN1cHBv cnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPwoJCWZ1bmN0aW9uKCB0YWcsIGNvbnRl eHQgKSB7CgkJCWlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05h bWUgIT09IHN0cnVuZGVmaW5lZCApIHsKCQkJCXJldHVybiBjb250ZXh0LmdldEVs ZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTsKCQkJfQoJCX0gOgoJCWZ1bmN0aW9uKCB0 YWcsIGNvbnRleHQgKSB7CgkJCXZhciBlbGVtLAoJCQkJdG1wID0gW10sCgkJCQlp ID0gMCwKCQkJCXJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1l KCB0YWcgKTsKCgkJCS8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHMKCQkJ aWYgKCB0YWcgPT09ICIqIiApIHsKCQkJCXdoaWxlICggKGVsZW0gPSByZXN1bHRz W2krK10pICkgewoJCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKCQkJ CQkJdG1wLnB1c2goIGVsZW0gKTsKCQkJCQl9CgkJCQl9CgoJCQkJcmV0dXJuIHRt cDsKCQkJfQoJCQlyZXR1cm4gcmVzdWx0czsKCQl9OwoKCS8vIENsYXNzCglFeHBy LmZpbmRbIkNMQVNTIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUg JiYgZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCApIHsKCQlpZiAoIHR5cGVv ZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IHN0cnVuZGVmaW5l ZCAmJiBkb2N1bWVudElzSFRNTCApIHsKCQkJcmV0dXJuIGNvbnRleHQuZ2V0RWxl bWVudHNCeUNsYXNzTmFtZSggY2xhc3NOYW1lICk7CgkJfQoJfTsKCgkvKiBRU0Ev bWF0Y2hlc1NlbGVjdG9yCgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoJLy8g UVNBIGFuZCBtYXRjaGVzU2VsZWN0b3Igc3VwcG9ydAoKCS8vIG1hdGNoZXNTZWxl Y3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJh IDExLjUpCglyYnVnZ3lNYXRjaGVzID0gW107CgoJLy8gcVNhKDpmb2N1cykgcmVw b3J0cyBmYWxzZSB3aGVuIHRydWUgKENocm9tZSAyMSkKCS8vIFdlIGFsbG93IHRo aXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRocm93cyBhbiBlcnJv cgoJLy8gd2hlbmV2ZXIgYGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRgIGlzIGFjY2Vz c2VkIG9uIGFuIGlmcmFtZQoJLy8gU28sIHdlIGFsbG93IDpmb2N1cyB0byBwYXNz IHRocm91Z2ggUVNBIGFsbCB0aGUgdGltZSB0byBhdm9pZCB0aGUgSUUgZXJyb3IK CS8vIFNlZSBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM3OAoJcmJ1 Z2d5UVNBID0gW107CgoJaWYgKCAoc3VwcG9ydC5xc2EgPSBybmF0aXZlLnRlc3Qo IGRvYy5xdWVyeVNlbGVjdG9yQWxsICkpICkgewoJCS8vIEJ1aWxkIFFTQSByZWdl eAoJCS8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmkK CQlhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKCQkJLy8gU2VsZWN0IGlzIHNldCB0 byBlbXB0eSBzdHJpbmcgb24gcHVycG9zZQoJCQkvLyBUaGlzIGlzIHRvIHRlc3Qg SUUncyB0cmVhdG1lbnQgb2Ygbm90IGV4cGxpY2l0bHkKCQkJLy8gc2V0dGluZyBh IGJvb2xlYW4gY29udGVudCBhdHRyaWJ1dGUsCgkJCS8vIHNpbmNlIGl0cyBwcmVz ZW5jZSBzaG91bGQgYmUgZW5vdWdoCgkJCS8vIGh0dHA6Ly9idWdzLmpxdWVyeS5j b20vdGlja2V0LzEyMzU5CgkJCWRpdi5pbm5lckhUTUwgPSAiPHNlbGVjdCB0PScn PjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+IjsKCgkJCS8v IFN1cHBvcnQ6IElFOCwgT3BlcmEgMTAtMTIKCQkJLy8gTm90aGluZyBzaG91bGQg YmUgc2VsZWN0ZWQgd2hlbiBlbXB0eSBzdHJpbmdzIGZvbGxvdyBePSBvciAkPSBv ciAqPQoJCQlpZiAoIGRpdi5xdWVyeVNlbGVjdG9yQWxsKCJbdF49JyddIikubGVu Z3RoICkgewoJCQkJcmJ1Z2d5UVNBLnB1c2goICJbKl4kXT0iICsgd2hpdGVzcGFj ZSArICIqKD86Jyd8XCJcIikiICk7CgkJCX0KCgkJCS8vIFN1cHBvcnQ6IElFOAoJ CQkvLyBCb29sZWFuIGF0dHJpYnV0ZXMgYW5kICJ2YWx1ZSIgYXJlIG5vdCB0cmVh dGVkIGNvcnJlY3RseQoJCQlpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCgiW3Nl bGVjdGVkXSIpLmxlbmd0aCApIHsKCQkJCXJidWdneVFTQS5wdXNoKCAiXFxbIiAr IHdoaXRlc3BhY2UgKyAiKig/OnZhbHVlfCIgKyBib29sZWFucyArICIpIiApOwoJ CQl9CgoJCQkvLyBXZWJraXQvT3BlcmEgLSA6Y2hlY2tlZCBzaG91bGQgcmV0dXJu IHNlbGVjdGVkIG9wdGlvbiBlbGVtZW50cwoJCQkvLyBodHRwOi8vd3d3LnczLm9y Zy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZAoJ CQkvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRl ciB0ZXN0cwoJCQlpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQi KS5sZW5ndGggKSB7CgkJCQlyYnVnZ3lRU0EucHVzaCgiOmNoZWNrZWQiKTsKCQkJ fQoJCX0pOwoKCQlhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKCQkJLy8gU3VwcG9y dDogV2luZG93cyA4IE5hdGl2ZSBBcHBzCgkJCS8vIFRoZSB0eXBlIGFuZCBuYW1l IGF0dHJpYnV0ZXMgYXJlIHJlc3RyaWN0ZWQgZHVyaW5nIC5pbm5lckhUTUwgYXNz aWdubWVudAoJCQl2YXIgaW5wdXQgPSBkb2MuY3JlYXRlRWxlbWVudCgiaW5wdXQi KTsKCQkJaW5wdXQuc2V0QXR0cmlidXRlKCAidHlwZSIsICJoaWRkZW4iICk7CgkJ CWRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKS5zZXRBdHRyaWJ1dGUoICJuYW1lIiwg IkQiICk7CgoJCQkvLyBTdXBwb3J0OiBJRTgKCQkJLy8gRW5mb3JjZSBjYXNlLXNl bnNpdGl2aXR5IG9mIG5hbWUgYXR0cmlidXRlCgkJCWlmICggZGl2LnF1ZXJ5U2Vs ZWN0b3JBbGwoIltuYW1lPWRdIikubGVuZ3RoICkgewoJCQkJcmJ1Z2d5UVNBLnB1 c2goICJuYW1lIiArIHdoaXRlc3BhY2UgKyAiKlsqXiR8IX5dPz0iICk7CgkJCX0K CgkJCS8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxlZCBhbmQgaGlkZGVuIGVs ZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQpCgkJCS8v IElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRl c3RzCgkJCWlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxl bmd0aCApIHsKCQkJCXJidWdneVFTQS5wdXNoKCAiOmVuYWJsZWQiLCAiOmRpc2Fi bGVkIiApOwoJCQl9CgoJCQkvLyBPcGVyYSAxMC0xMSBkb2VzIG5vdCB0aHJvdyBv biBwb3N0LWNvbW1hIGludmFsaWQgcHNldWRvcwoJCQlkaXYucXVlcnlTZWxlY3Rv ckFsbCgiKiw6eCIpOwoJCQlyYnVnZ3lRU0EucHVzaCgiLC4qOiIpOwoJCX0pOwoJ fQoKCWlmICggKHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yID0gcm5hdGl2ZS50ZXN0 KCAobWF0Y2hlcyA9IGRvY0VsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8CgkJ ZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHwKCQlkb2NFbGVtLm9NYXRjaGVz U2VsZWN0b3IgfHwKCQlkb2NFbGVtLm1zTWF0Y2hlc1NlbGVjdG9yKSApKSApIHsK CgkJYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7CgkJCS8vIENoZWNrIHRvIHNlZSBp ZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvcgoJCQkvLyBvbiBh IGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KQoJCQlzdXBwb3J0LmRpc2Nvbm5lY3Rl ZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBkaXYsICJkaXYiICk7CgoJCQkvLyBUaGlz IHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uCgkJCS8vIEdlY2tvIGRvZXMg bm90IGVycm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWQKCQkJbWF0Y2hlcy5jYWxs KCBkaXYsICJbcyE9JyddOngiICk7CgkJCXJidWdneU1hdGNoZXMucHVzaCggIiE9 IiwgcHNldWRvcyApOwoJCX0pOwoJfQoKCXJidWdneVFTQSA9IHJidWdneVFTQS5s ZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oInwiKSApOwoJcmJ1 Z2d5TWF0Y2hlcyA9IHJidWdneU1hdGNoZXMubGVuZ3RoICYmIG5ldyBSZWdFeHAo IHJidWdneU1hdGNoZXMuam9pbigifCIpICk7CgoJLyogQ29udGFpbnMKCS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0gKi8KCWhhc0NvbXBhcmUgPSBybmF0aXZlLnRlc3Qo IGRvY0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gKTsKCgkvLyBFbGVtZW50 IGNvbnRhaW5zIGFub3RoZXIKCS8vIFB1cnBvc2VmdWxseSBkb2VzIG5vdCBpbXBs ZW1lbnQgaW5jbHVzaXZlIGRlc2NlbmRlbnQKCS8vIEFzIGluLCBhbiBlbGVtZW50 IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmCgljb250YWlucyA9IGhhc0NvbXBhcmUg fHwgcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbnRhaW5zICkgPwoJCWZ1bmN0aW9u KCBhLCBiICkgewoJCQl2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5k b2N1bWVudEVsZW1lbnQgOiBhLAoJCQkJYnVwID0gYiAmJiBiLnBhcmVudE5vZGU7 CgkJCXJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUg PT09IDEgJiYgKAoJCQkJYWRvd24uY29udGFpbnMgPwoJCQkJCWFkb3duLmNvbnRh aW5zKCBidXAgKSA6CgkJCQkJYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBh LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBidXAgKSAmIDE2CgkJCSkpOwoJCX0g OgoJCWZ1bmN0aW9uKCBhLCBiICkgewoJCQlpZiAoIGIgKSB7CgkJCQl3aGlsZSAo IChiID0gYi5wYXJlbnROb2RlKSApIHsKCQkJCQlpZiAoIGIgPT09IGEgKSB7CgkJ CQkJCXJldHVybiB0cnVlOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQlyZXR1cm4gZmFs c2U7CgkJfTsKCgkvKiBTb3J0aW5nCgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICov CgoJLy8gRG9jdW1lbnQgb3JkZXIgc29ydGluZwoJc29ydE9yZGVyID0gaGFzQ29t cGFyZSA/CglmdW5jdGlvbiggYSwgYiApIHsKCgkJLy8gRmxhZyBmb3IgZHVwbGlj YXRlIHJlbW92YWwKCQlpZiAoIGEgPT09IGIgKSB7CgkJCWhhc0R1cGxpY2F0ZSA9 IHRydWU7CgkJCXJldHVybiAwOwoJCX0KCgkJLy8gU29ydCBvbiBtZXRob2QgZXhp c3RlbmNlIGlmIG9ubHkgb25lIGlucHV0IGhhcyBjb21wYXJlRG9jdW1lbnRQb3Np dGlvbgoJCXZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24g LSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjsKCQlpZiAoIGNvbXBhcmUgKSB7 CgkJCXJldHVybiBjb21wYXJlOwoJCX0KCgkJLy8gQ2FsY3VsYXRlIHBvc2l0aW9u IGlmIGJvdGggaW5wdXRzIGJlbG9uZyB0byB0aGUgc2FtZSBkb2N1bWVudAoJCWNv bXBhcmUgPSAoIGEub3duZXJEb2N1bWVudCB8fCBhICkgPT09ICggYi5vd25lckRv Y3VtZW50IHx8IGIgKSA/CgkJCWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGIg KSA6CgoJCQkvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0 ZWQKCQkJMTsKCgkJLy8gRGlzY29ubmVjdGVkIG5vZGVzCgkJaWYgKCBjb21wYXJl ICYgMSB8fAoJCQkoIXN1cHBvcnQuc29ydERldGFjaGVkICYmIGIuY29tcGFyZURv Y3VtZW50UG9zaXRpb24oIGEgKSA9PT0gY29tcGFyZSkgKSB7CgoJCQkvLyBDaG9v c2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVm ZXJyZWQgZG9jdW1lbnQKCQkJaWYgKCBhID09PSBkb2MgfHwgYS5vd25lckRvY3Vt ZW50ID09PSBwcmVmZXJyZWREb2MgJiYgY29udGFpbnMocHJlZmVycmVkRG9jLCBh KSApIHsKCQkJCXJldHVybiAtMTsKCQkJfQoJCQlpZiAoIGIgPT09IGRvYyB8fCBi Lm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVm ZXJyZWREb2MsIGIpICkgewoJCQkJcmV0dXJuIDE7CgkJCX0KCgkJCS8vIE1haW50 YWluIG9yaWdpbmFsIG9yZGVyCgkJCXJldHVybiBzb3J0SW5wdXQgPwoJCQkJKCBp bmRleE9mLmNhbGwoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZi5jYWxsKCBzb3J0 SW5wdXQsIGIgKSApIDoKCQkJCTA7CgkJfQoKCQlyZXR1cm4gY29tcGFyZSAmIDQg PyAtMSA6IDE7Cgl9IDoKCWZ1bmN0aW9uKCBhLCBiICkgewoJCS8vIEV4aXQgZWFy bHkgaWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWwKCQlpZiAoIGEgPT09IGIgKSB7 CgkJCWhhc0R1cGxpY2F0ZSA9IHRydWU7CgkJCXJldHVybiAwOwoJCX0KCgkJdmFy IGN1ciwKCQkJaSA9IDAsCgkJCWF1cCA9IGEucGFyZW50Tm9kZSwKCQkJYnVwID0g Yi5wYXJlbnROb2RlLAoJCQlhcCA9IFsgYSBdLAoJCQlicCA9IFsgYiBdOwoKCQkv LyBQYXJlbnRsZXNzIG5vZGVzIGFyZSBlaXRoZXIgZG9jdW1lbnRzIG9yIGRpc2Nv bm5lY3RlZAoJCWlmICggIWF1cCB8fCAhYnVwICkgewoJCQlyZXR1cm4gYSA9PT0g ZG9jID8gLTEgOgoJCQkJYiA9PT0gZG9jID8gMSA6CgkJCQlhdXAgPyAtMSA6CgkJ CQlidXAgPyAxIDoKCQkJCXNvcnRJbnB1dCA/CgkJCQkoIGluZGV4T2YuY2FsbCgg c29ydElucHV0LCBhICkgLSBpbmRleE9mLmNhbGwoIHNvcnRJbnB1dCwgYiApICkg OgoJCQkJMDsKCgkJLy8gSWYgdGhlIG5vZGVzIGFyZSBzaWJsaW5ncywgd2UgY2Fu IGRvIGEgcXVpY2sgY2hlY2sKCQl9IGVsc2UgaWYgKCBhdXAgPT09IGJ1cCApIHsK CQkJcmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApOwoJCX0KCgkJLy8gT3RoZXJ3 aXNlIHdlIG5lZWQgZnVsbCBsaXN0cyBvZiB0aGVpciBhbmNlc3RvcnMgZm9yIGNv bXBhcmlzb24KCQljdXIgPSBhOwoJCXdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnRO b2RlKSApIHsKCQkJYXAudW5zaGlmdCggY3VyICk7CgkJfQoJCWN1ciA9IGI7CgkJ d2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkgewoJCQlicC51bnNoaWZ0 KCBjdXIgKTsKCQl9CgoJCS8vIFdhbGsgZG93biB0aGUgdHJlZSBsb29raW5nIGZv ciBhIGRpc2NyZXBhbmN5CgkJd2hpbGUgKCBhcFtpXSA9PT0gYnBbaV0gKSB7CgkJ CWkrKzsKCQl9CgoJCXJldHVybiBpID8KCQkJLy8gRG8gYSBzaWJsaW5nIGNoZWNr IGlmIHRoZSBub2RlcyBoYXZlIGEgY29tbW9uIGFuY2VzdG9yCgkJCXNpYmxpbmdD aGVjayggYXBbaV0sIGJwW2ldICkgOgoKCQkJLy8gT3RoZXJ3aXNlIG5vZGVzIGlu IG91ciBkb2N1bWVudCBzb3J0IGZpcnN0CgkJCWFwW2ldID09PSBwcmVmZXJyZWRE b2MgPyAtMSA6CgkJCWJwW2ldID09PSBwcmVmZXJyZWREb2MgPyAxIDoKCQkJMDsK CX07CgoJcmV0dXJuIGRvYzsKfTsKClNpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24o IGV4cHIsIGVsZW1lbnRzICkgewoJcmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwg bnVsbCwgZWxlbWVudHMgKTsKfTsKClNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBm dW5jdGlvbiggZWxlbSwgZXhwciApIHsKCS8vIFNldCBkb2N1bWVudCB2YXJzIGlm IG5lZWRlZAoJaWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09 IGRvY3VtZW50ICkgewoJCXNldERvY3VtZW50KCBlbGVtICk7Cgl9CgoJLy8gTWFr ZSBzdXJlIHRoYXQgYXR0cmlidXRlIHNlbGVjdG9ycyBhcmUgcXVvdGVkCglleHBy ID0gZXhwci5yZXBsYWNlKCByYXR0cmlidXRlUXVvdGVzLCAiPSckMSddIiApOwoK CWlmICggc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgJiYgZG9jdW1lbnRJc0hUTUwg JiYKCQkoICFyYnVnZ3lNYXRjaGVzIHx8ICFyYnVnZ3lNYXRjaGVzLnRlc3QoIGV4 cHIgKSApICYmCgkJKCAhcmJ1Z2d5UVNBICAgICB8fCAhcmJ1Z2d5UVNBLnRlc3Qo IGV4cHIgKSApICkgewoKCQl0cnkgewoJCQl2YXIgcmV0ID0gbWF0Y2hlcy5jYWxs KCBlbGVtLCBleHByICk7CgoJCQkvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJl dHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzCgkJCWlmICggcmV0IHx8 IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHwKCQkJCQkvLyBBcyB3ZWxsLCBk aXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudAoJ CQkJCS8vIGZyYWdtZW50IGluIElFIDkKCQkJCQllbGVtLmRvY3VtZW50ICYmIGVs ZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkgewoJCQkJcmV0dXJuIHJldDsK CQkJfQoJCX0gY2F0Y2goZSkge30KCX0KCglyZXR1cm4gU2l6emxlKCBleHByLCBk b2N1bWVudCwgbnVsbCwgW2VsZW1dICkubGVuZ3RoID4gMDsKfTsKClNpenpsZS5j b250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkgewoJLy8gU2V0IGRv Y3VtZW50IHZhcnMgaWYgbmVlZGVkCglpZiAoICggY29udGV4dC5vd25lckRvY3Vt ZW50IHx8IGNvbnRleHQgKSAhPT0gZG9jdW1lbnQgKSB7CgkJc2V0RG9jdW1lbnQo IGNvbnRleHQgKTsKCX0KCXJldHVybiBjb250YWlucyggY29udGV4dCwgZWxlbSAp Owp9OwoKU2l6emxlLmF0dHIgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKCS8v IFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZAoJaWYgKCAoIGVsZW0ub3duZXJE b2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkgewoJCXNldERvY3VtZW50 KCBlbGVtICk7Cgl9CgoJdmFyIGZuID0gRXhwci5hdHRySGFuZGxlWyBuYW1lLnRv TG93ZXJDYXNlKCkgXSwKCQkvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IE9iamVjdC5w cm90b3R5cGUgcHJvcGVydGllcyAoalF1ZXJ5ICMxMzgwNykKCQl2YWwgPSBmbiAm JiBoYXNPd24uY2FsbCggRXhwci5hdHRySGFuZGxlLCBuYW1lLnRvTG93ZXJDYXNl KCkgKSA/CgkJCWZuKCBlbGVtLCBuYW1lLCAhZG9jdW1lbnRJc0hUTUwgKSA6CgkJ CXVuZGVmaW5lZDsKCglyZXR1cm4gdmFsICE9PSB1bmRlZmluZWQgPwoJCXZhbCA6 CgkJc3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/CgkJCWVs ZW0uZ2V0QXR0cmlidXRlKCBuYW1lICkgOgoJCQkodmFsID0gZWxlbS5nZXRBdHRy aWJ1dGVOb2RlKG5hbWUpKSAmJiB2YWwuc3BlY2lmaWVkID8KCQkJCXZhbC52YWx1 ZSA6CgkJCQludWxsOwp9OwoKU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyAp IHsKCXRocm93IG5ldyBFcnJvciggIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVk IGV4cHJlc3Npb246ICIgKyBtc2cgKTsKfTsKCi8qKgogKiBEb2N1bWVudCBzb3J0 aW5nIGFuZCByZW1vdmluZyBkdXBsaWNhdGVzCiAqIEBwYXJhbSB7QXJyYXlMaWtl fSByZXN1bHRzCiAqLwpTaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1 bHRzICkgewoJdmFyIGVsZW0sCgkJZHVwbGljYXRlcyA9IFtdLAoJCWogPSAwLAoJ CWkgPSAwOwoKCS8vIFVubGVzcyB3ZSAqa25vdyogd2UgY2FuIGRldGVjdCBkdXBs aWNhdGVzLCBhc3N1bWUgdGhlaXIgcHJlc2VuY2UKCWhhc0R1cGxpY2F0ZSA9ICFz dXBwb3J0LmRldGVjdER1cGxpY2F0ZXM7Cglzb3J0SW5wdXQgPSAhc3VwcG9ydC5z b3J0U3RhYmxlICYmIHJlc3VsdHMuc2xpY2UoIDAgKTsKCXJlc3VsdHMuc29ydCgg c29ydE9yZGVyICk7CgoJaWYgKCBoYXNEdXBsaWNhdGUgKSB7CgkJd2hpbGUgKCAo ZWxlbSA9IHJlc3VsdHNbaSsrXSkgKSB7CgkJCWlmICggZWxlbSA9PT0gcmVzdWx0 c1sgaSBdICkgewoJCQkJaiA9IGR1cGxpY2F0ZXMucHVzaCggaSApOwoJCQl9CgkJ fQoJCXdoaWxlICggai0tICkgewoJCQlyZXN1bHRzLnNwbGljZSggZHVwbGljYXRl c1sgaiBdLCAxICk7CgkJfQoJfQoKCS8vIENsZWFyIGlucHV0IGFmdGVyIHNvcnRp bmcgdG8gcmVsZWFzZSBvYmplY3RzCgkvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29t L2pxdWVyeS9zaXp6bGUvcHVsbC8yMjUKCXNvcnRJbnB1dCA9IG51bGw7CgoJcmV0 dXJuIHJlc3VsdHM7Cn07CgovKioKICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0 cmlldmluZyB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXMK ICogQHBhcmFtIHtBcnJheXxFbGVtZW50fSBlbGVtCiAqLwpnZXRUZXh0ID0gU2l6 emxlLmdldFRleHQgPSBmdW5jdGlvbiggZWxlbSApIHsKCXZhciBub2RlLAoJCXJl dCA9ICIiLAoJCWkgPSAwLAoJCW5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZTsKCglp ZiAoICFub2RlVHlwZSApIHsKCQkvLyBJZiBubyBub2RlVHlwZSwgdGhpcyBpcyBl eHBlY3RlZCB0byBiZSBhbiBhcnJheQoJCXdoaWxlICggKG5vZGUgPSBlbGVtW2kr K10pICkgewoJCQkvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2RlcwoJCQly ZXQgKz0gZ2V0VGV4dCggbm9kZSApOwoJCX0KCX0gZWxzZSBpZiAoIG5vZGVUeXBl ID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHsK CQkvLyBVc2UgdGV4dENvbnRlbnQgZm9yIGVsZW1lbnRzCgkJLy8gaW5uZXJUZXh0 IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoalF1 ZXJ5ICMxMTE1MykKCQlpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50ID09PSAi c3RyaW5nIiApIHsKCQkJcmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7CgkJfSBlbHNl IHsKCQkJLy8gVHJhdmVyc2UgaXRzIGNoaWxkcmVuCgkJCWZvciAoIGVsZW0gPSBl bGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkg ewoJCQkJcmV0ICs9IGdldFRleHQoIGVsZW0gKTsKCQkJfQoJCX0KCX0gZWxzZSBp ZiAoIG5vZGVUeXBlID09PSAzIHx8IG5vZGVUeXBlID09PSA0ICkgewoJCXJldHVy biBlbGVtLm5vZGVWYWx1ZTsKCX0KCS8vIERvIG5vdCBpbmNsdWRlIGNvbW1lbnQg b3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBub2RlcwoKCXJldHVybiByZXQ7Cn07 CgpFeHByID0gU2l6emxlLnNlbGVjdG9ycyA9IHsKCgkvLyBDYW4gYmUgYWRqdXN0 ZWQgYnkgdGhlIHVzZXIKCWNhY2hlTGVuZ3RoOiA1MCwKCgljcmVhdGVQc2V1ZG86 IG1hcmtGdW5jdGlvbiwKCgltYXRjaDogbWF0Y2hFeHByLAoKCWF0dHJIYW5kbGU6 IHt9LAoKCWZpbmQ6IHt9LAoKCXJlbGF0aXZlOiB7CgkJIj4iOiB7IGRpcjogInBh cmVudE5vZGUiLCBmaXJzdDogdHJ1ZSB9LAoJCSIgIjogeyBkaXI6ICJwYXJlbnRO b2RlIiB9LAoJCSIrIjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmciLCBmaXJzdDog dHJ1ZSB9LAoJCSJ+IjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmciIH0KCX0sCgoJ cHJlRmlsdGVyOiB7CgkJIkFUVFIiOiBmdW5jdGlvbiggbWF0Y2ggKSB7CgkJCW1h dGNoWzFdID0gbWF0Y2hbMV0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUg KTsKCgkJCS8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRo ZXIgcXVvdGVkIG9yIHVucXVvdGVkCgkJCW1hdGNoWzNdID0gKCBtYXRjaFs0XSB8 fCBtYXRjaFs1XSB8fCAiIiApLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBl ICk7CgoJCQlpZiAoIG1hdGNoWzJdID09PSAifj0iICkgewoJCQkJbWF0Y2hbM10g PSAiICIgKyBtYXRjaFszXSArICIgIjsKCQkJfQoKCQkJcmV0dXJuIG1hdGNoLnNs aWNlKCAwLCA0ICk7CgkJfSwKCgkJIkNISUxEIjogZnVuY3Rpb24oIG1hdGNoICkg ewoJCQkvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByWyJDSElMRCJdCgkJCQkxIHR5 cGUgKG9ubHl8bnRofC4uLikKCQkJCTIgd2hhdCAoY2hpbGR8b2YtdHlwZSkKCQkJ CTMgYXJndW1lbnQgKGV2ZW58b2RkfFxkKnxcZCpuKFsrLV1cZCspP3wuLi4pCgkJ CQk0IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xkKm58KQoJ CQkJNSBzaWduIG9mIHhuLWNvbXBvbmVudAoJCQkJNiB4IG9mIHhuLWNvbXBvbmVu dAoJCQkJNyBzaWduIG9mIHktY29tcG9uZW50CgkJCQk4IHkgb2YgeS1jb21wb25l bnQKCQkJKi8KCQkJbWF0Y2hbMV0gPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpOwoK CQkJaWYgKCBtYXRjaFsxXS5zbGljZSggMCwgMyApID09PSAibnRoIiApIHsKCQkJ CS8vIG50aC0qIHJlcXVpcmVzIGFyZ3VtZW50CgkJCQlpZiAoICFtYXRjaFszXSAp IHsKCQkJCQlTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7CgkJCQl9CgoJCQkJLy8g bnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxE CgkJCQkvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZl bHkgdG8gMC8xCgkJCQltYXRjaFs0XSA9ICsoIG1hdGNoWzRdID8gbWF0Y2hbNV0g KyAobWF0Y2hbNl0gfHwgMSkgOiAyICogKCBtYXRjaFszXSA9PT0gImV2ZW4iIHx8 IG1hdGNoWzNdID09PSAib2RkIiApICk7CgkJCQltYXRjaFs1XSA9ICsoICggbWF0 Y2hbN10gKyBtYXRjaFs4XSApIHx8IG1hdGNoWzNdID09PSAib2RkIiApOwoKCQkJ Ly8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRzCgkJCX0gZWxzZSBpZiAo IG1hdGNoWzNdICkgewoJCQkJU2l6emxlLmVycm9yKCBtYXRjaFswXSApOwoJCQl9 CgoJCQlyZXR1cm4gbWF0Y2g7CgkJfSwKCgkJIlBTRVVETyI6IGZ1bmN0aW9uKCBt YXRjaCApIHsKCQkJdmFyIGV4Y2VzcywKCQkJCXVucXVvdGVkID0gIW1hdGNoWzVd ICYmIG1hdGNoWzJdOwoKCQkJaWYgKCBtYXRjaEV4cHJbIkNISUxEIl0udGVzdCgg bWF0Y2hbMF0gKSApIHsKCQkJCXJldHVybiBudWxsOwoJCQl9CgoJCQkvLyBBY2Nl cHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pcwoJCQlpZiAoIG1hdGNoWzNdICYmIG1h dGNoWzRdICE9PSB1bmRlZmluZWQgKSB7CgkJCQltYXRjaFsyXSA9IG1hdGNoWzRd OwoKCQkJLy8gU3RyaXAgZXhjZXNzIGNoYXJhY3RlcnMgZnJvbSB1bnF1b3RlZCBh cmd1bWVudHMKCQkJfSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0 KCB1bnF1b3RlZCApICYmCgkJCQkvLyBHZXQgZXhjZXNzIGZyb20gdG9rZW5pemUg KHJlY3Vyc2l2ZWx5KQoJCQkJKGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwg dHJ1ZSApKSAmJgoJCQkJLy8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBh cmVudGhlc2lzCgkJCQkoZXhjZXNzID0gdW5xdW90ZWQuaW5kZXhPZiggIikiLCB1 bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0aCkgKSB7 CgoJCQkJLy8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXgKCQkJCW1hdGNoWzBd ID0gbWF0Y2hbMF0uc2xpY2UoIDAsIGV4Y2VzcyApOwoJCQkJbWF0Y2hbMl0gPSB1 bnF1b3RlZC5zbGljZSggMCwgZXhjZXNzICk7CgkJCX0KCgkJCS8vIFJldHVybiBv bmx5IGNhcHR1cmVzIG5lZWRlZCBieSB0aGUgcHNldWRvIGZpbHRlciBtZXRob2Qg KHR5cGUgYW5kIGFyZ3VtZW50KQoJCQlyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDMg KTsKCQl9Cgl9LAoKCWZpbHRlcjogewoKCQkiVEFHIjogZnVuY3Rpb24oIG5vZGVO YW1lU2VsZWN0b3IgKSB7CgkJCXZhciBub2RlTmFtZSA9IG5vZGVOYW1lU2VsZWN0 b3IucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgp OwoJCQlyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gIioiID8KCQkJCWZ1bmN0 aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfSA6CgkJCQlmdW5jdGlvbiggZWxlbSApIHsK CQkJCQlyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93 ZXJDYXNlKCkgPT09IG5vZGVOYW1lOwoJCQkJfTsKCQl9LAoKCQkiQ0xBU1MiOiBm dW5jdGlvbiggY2xhc3NOYW1lICkgewoJCQl2YXIgcGF0dGVybiA9IGNsYXNzQ2Fj aGVbIGNsYXNzTmFtZSArICIgIiBdOwoKCQkJcmV0dXJuIHBhdHRlcm4gfHwKCQkJ CShwYXR0ZXJuID0gbmV3IFJlZ0V4cCggIihefCIgKyB3aGl0ZXNwYWNlICsgIiki ICsgY2xhc3NOYW1lICsgIigiICsgd2hpdGVzcGFjZSArICJ8JCkiICkpICYmCgkJ CQljbGFzc0NhY2hlKCBjbGFzc05hbWUsIGZ1bmN0aW9uKCBlbGVtICkgewoJCQkJ CXJldHVybiBwYXR0ZXJuLnRlc3QoIHR5cGVvZiBlbGVtLmNsYXNzTmFtZSA9PT0g InN0cmluZyIgJiYgZWxlbS5jbGFzc05hbWUgfHwgdHlwZW9mIGVsZW0uZ2V0QXR0 cmlidXRlICE9PSBzdHJ1bmRlZmluZWQgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoImNs YXNzIikgfHwgIiIgKTsKCQkJCX0pOwoJCX0sCgoJCSJBVFRSIjogZnVuY3Rpb24o IG5hbWUsIG9wZXJhdG9yLCBjaGVjayApIHsKCQkJcmV0dXJuIGZ1bmN0aW9uKCBl bGVtICkgewoJCQkJdmFyIHJlc3VsdCA9IFNpenpsZS5hdHRyKCBlbGVtLCBuYW1l ICk7CgoJCQkJaWYgKCByZXN1bHQgPT0gbnVsbCApIHsKCQkJCQlyZXR1cm4gb3Bl cmF0b3IgPT09ICIhPSI7CgkJCQl9CgkJCQlpZiAoICFvcGVyYXRvciApIHsKCQkJ CQlyZXR1cm4gdHJ1ZTsKCQkJCX0KCgkJCQlyZXN1bHQgKz0gIiI7CgoJCQkJcmV0 dXJuIG9wZXJhdG9yID09PSAiPSIgPyByZXN1bHQgPT09IGNoZWNrIDoKCQkJCQlv cGVyYXRvciA9PT0gIiE9IiA/IHJlc3VsdCAhPT0gY2hlY2sgOgoJCQkJCW9wZXJh dG9yID09PSAiXj0iID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkg PT09IDAgOgoJCQkJCW9wZXJhdG9yID09PSAiKj0iID8gY2hlY2sgJiYgcmVzdWx0 LmluZGV4T2YoIGNoZWNrICkgPiAtMSA6CgkJCQkJb3BlcmF0b3IgPT09ICIkPSIg PyBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hl Y2sgOgoJCQkJCW9wZXJhdG9yID09PSAifj0iID8gKCAiICIgKyByZXN1bHQgKyAi ICIgKS5pbmRleE9mKCBjaGVjayApID4gLTEgOgoJCQkJCW9wZXJhdG9yID09PSAi fD0iID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNr Lmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyAiLSIgOgoJCQkJCWZhbHNlOwoJCQl9 OwoJCX0sCgoJCSJDSElMRCI6IGZ1bmN0aW9uKCB0eXBlLCB3aGF0LCBhcmd1bWVu dCwgZmlyc3QsIGxhc3QgKSB7CgkJCXZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAw LCAzICkgIT09ICJudGgiLAoJCQkJZm9yd2FyZCA9IHR5cGUuc2xpY2UoIC00ICkg IT09ICJsYXN0IiwKCQkJCW9mVHlwZSA9IHdoYXQgPT09ICJvZi10eXBlIjsKCgkJ CXJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID8KCgkJCQkvLyBTaG9y dGN1dCBmb3IgOm50aC0qKG4pCgkJCQlmdW5jdGlvbiggZWxlbSApIHsKCQkJCQly ZXR1cm4gISFlbGVtLnBhcmVudE5vZGU7CgkJCQl9IDoKCgkJCQlmdW5jdGlvbigg ZWxlbSwgY29udGV4dCwgeG1sICkgewoJCQkJCXZhciBjYWNoZSwgb3V0ZXJDYWNo ZSwgbm9kZSwgZGlmZiwgbm9kZUluZGV4LCBzdGFydCwKCQkJCQkJZGlyID0gc2lt cGxlICE9PSBmb3J3YXJkID8gIm5leHRTaWJsaW5nIiA6ICJwcmV2aW91c1NpYmxp bmciLAoJCQkJCQlwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsCgkJCQkJCW5hbWUg PSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLAoJCQkJCQl1 c2VDYWNoZSA9ICF4bWwgJiYgIW9mVHlwZTsKCgkJCQkJaWYgKCBwYXJlbnQgKSB7 CgoJCQkJCQkvLyA6KGZpcnN0fGxhc3R8b25seSktKGNoaWxkfG9mLXR5cGUpCgkJ CQkJCWlmICggc2ltcGxlICkgewoJCQkJCQkJd2hpbGUgKCBkaXIgKSB7CgkJCQkJ CQkJbm9kZSA9IGVsZW07CgkJCQkJCQkJd2hpbGUgKCAobm9kZSA9IG5vZGVbIGRp ciBdKSApIHsKCQkJCQkJCQkJaWYgKCBvZlR5cGUgPyBub2RlLm5vZGVOYW1lLnRv TG93ZXJDYXNlKCkgPT09IG5hbWUgOiBub2RlLm5vZGVUeXBlID09PSAxICkgewoJ CQkJCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCQkJCQl9CgkJCQkJCQkJfQoJCQkJ CQkJCS8vIFJldmVyc2UgZGlyZWN0aW9uIGZvciA6b25seS0qIChpZiB3ZSBoYXZl bid0IHlldCBkb25lIHNvKQoJCQkJCQkJCXN0YXJ0ID0gZGlyID0gdHlwZSA9PT0g Im9ubHkiICYmICFzdGFydCAmJiAibmV4dFNpYmxpbmciOwoJCQkJCQkJfQoJCQkJ CQkJcmV0dXJuIHRydWU7CgkJCQkJCX0KCgkJCQkJCXN0YXJ0ID0gWyBmb3J3YXJk ID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07CgoJCQkJ CQkvLyBub24teG1sIDpudGgtY2hpbGQoLi4uKSBzdG9yZXMgY2FjaGUgZGF0YSBv biBgcGFyZW50YAoJCQkJCQlpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7CgkJ CQkJCQkvLyBTZWVrIGBlbGVtYCBmcm9tIGEgcHJldmlvdXNseS1jYWNoZWQgaW5k ZXgKCQkJCQkJCW91dGVyQ2FjaGUgPSBwYXJlbnRbIGV4cGFuZG8gXSB8fCAocGFy ZW50WyBleHBhbmRvIF0gPSB7fSk7CgkJCQkJCQljYWNoZSA9IG91dGVyQ2FjaGVb IHR5cGUgXSB8fCBbXTsKCQkJCQkJCW5vZGVJbmRleCA9IGNhY2hlWzBdID09PSBk aXJydW5zICYmIGNhY2hlWzFdOwoJCQkJCQkJZGlmZiA9IGNhY2hlWzBdID09PSBk aXJydW5zICYmIGNhY2hlWzJdOwoJCQkJCQkJbm9kZSA9IG5vZGVJbmRleCAmJiBw YXJlbnQuY2hpbGROb2Rlc1sgbm9kZUluZGV4IF07CgoJCQkJCQkJd2hpbGUgKCAo bm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHwKCgkJ CQkJCQkJLy8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3Rh cnQKCQkJCQkJCQkoZGlmZiA9IG5vZGVJbmRleCA9IDApIHx8IHN0YXJ0LnBvcCgp KSApIHsKCgkJCQkJCQkJLy8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBg cGFyZW50YCBhbmQgYnJlYWsKCQkJCQkJCQlpZiAoIG5vZGUubm9kZVR5cGUgPT09 IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7CgkJCQkJCQkJCW91dGVy Q2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgbm9kZUluZGV4LCBkaWZmIF07CgkJ CQkJCQkJCWJyZWFrOwoJCQkJCQkJCX0KCQkJCQkJCX0KCgkJCQkJCS8vIFVzZSBw cmV2aW91c2x5LWNhY2hlZCBlbGVtZW50IGluZGV4IGlmIGF2YWlsYWJsZQoJCQkJ CQl9IGVsc2UgaWYgKCB1c2VDYWNoZSAmJiAoY2FjaGUgPSAoZWxlbVsgZXhwYW5k byBdIHx8IChlbGVtWyBleHBhbmRvIF0gPSB7fSkpWyB0eXBlIF0pICYmIGNhY2hl WzBdID09PSBkaXJydW5zICkgewoJCQkJCQkJZGlmZiA9IGNhY2hlWzFdOwoKCQkJ CQkJLy8geG1sIDpudGgtY2hpbGQoLi4uKSBvciA6bnRoLWxhc3QtY2hpbGQoLi4u KSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pCgkJCQkJCX0gZWxzZSB7CgkJ CQkJCQkvLyBVc2UgdGhlIHNhbWUgbG9vcCBhcyBhYm92ZSB0byBzZWVrIGBlbGVt YCBmcm9tIHRoZSBzdGFydAoJCQkJCQkJd2hpbGUgKCAobm9kZSA9ICsrbm9kZUlu ZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHwKCQkJCQkJCQkoZGlmZiA9IG5v ZGVJbmRleCA9IDApIHx8IHN0YXJ0LnBvcCgpKSApIHsKCgkJCQkJCQkJaWYgKCAo IG9mVHlwZSA/IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6 IG5vZGUubm9kZVR5cGUgPT09IDEgKSAmJiArK2RpZmYgKSB7CgkJCQkJCQkJCS8v IENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1lbnQKCQkJ CQkJCQkJaWYgKCB1c2VDYWNoZSApIHsKCQkJCQkJCQkJCShub2RlWyBleHBhbmRv IF0gfHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9KSlbIHR5cGUgXSA9IFsgZGlycnVu cywgZGlmZiBdOwoJCQkJCQkJCQl9CgoJCQkJCQkJCQlpZiAoIG5vZGUgPT09IGVs ZW0gKSB7CgkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJ CQkJCX0KCQkJCQkJfQoKCQkJCQkJLy8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCwg dGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNpemUKCQkJCQkJZGlmZiAtPSBsYXN0 OwoJCQkJCQlyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3Qg PT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTsKCQkJCQl9CgkJCQl9OwoJCX0s CgoJCSJQU0VVRE8iOiBmdW5jdGlvbiggcHNldWRvLCBhcmd1bWVudCApIHsKCQkJ Ly8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlCgkJCS8v IGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXMK CQkJLy8gUHJpb3JpdGl6ZSBieSBjYXNlIHNlbnNpdGl2aXR5IGluIGNhc2UgY3Vz dG9tIHBzZXVkb3MgYXJlIGFkZGVkIHdpdGggdXBwZXJjYXNlIGxldHRlcnMKCQkJ Ly8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRv cwoJCQl2YXIgYXJncywKCQkJCWZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8 fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHwKCQkJ CQlTaXp6bGUuZXJyb3IoICJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIgKyBwc2V1ZG8g KTsKCgkJCS8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGlj YXRlIHRoYXQKCQkJLy8gYXJndW1lbnRzIGFyZSBuZWVkZWQgdG8gY3JlYXRlIHRo ZSBmaWx0ZXIgZnVuY3Rpb24KCQkJLy8ganVzdCBhcyBTaXp6bGUgZG9lcwoJCQlp ZiAoIGZuWyBleHBhbmRvIF0gKSB7CgkJCQlyZXR1cm4gZm4oIGFyZ3VtZW50ICk7 CgkJCX0KCgkJCS8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0 dXJlcwoJCQlpZiAoIGZuLmxlbmd0aCA+IDEgKSB7CgkJCQlhcmdzID0gWyBwc2V1 ZG8sIHBzZXVkbywgIiIsIGFyZ3VtZW50IF07CgkJCQlyZXR1cm4gRXhwci5zZXRG aWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID8K CQkJCQltYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7CgkJ CQkJCXZhciBpZHgsCgkJCQkJCQltYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50 ICksCgkJCQkJCQlpID0gbWF0Y2hlZC5sZW5ndGg7CgkJCQkJCXdoaWxlICggaS0t ICkgewoJCQkJCQkJaWR4ID0gaW5kZXhPZi5jYWxsKCBzZWVkLCBtYXRjaGVkW2ld ICk7CgkJCQkJCQlzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlkeCBdID0gbWF0 Y2hlZFtpXSApOwoJCQkJCQl9CgkJCQkJfSkgOgoJCQkJCWZ1bmN0aW9uKCBlbGVt ICkgewoJCQkJCQlyZXR1cm4gZm4oIGVsZW0sIDAsIGFyZ3MgKTsKCQkJCQl9OwoJ CQl9CgoJCQlyZXR1cm4gZm47CgkJfQoJfSwKCglwc2V1ZG9zOiB7CgkJLy8gUG90 ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zCgkJIm5vdCI6IG1hcmtGdW5jdGlvbihm dW5jdGlvbiggc2VsZWN0b3IgKSB7CgkJCS8vIFRyaW0gdGhlIHNlbGVjdG9yIHBh c3NlZCB0byBjb21waWxlCgkJCS8vIHRvIGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcg YW5kIHRyYWlsaW5nCgkJCS8vIHNwYWNlcyBhcyBjb21iaW5hdG9ycwoJCQl2YXIg aW5wdXQgPSBbXSwKCQkJCXJlc3VsdHMgPSBbXSwKCQkJCW1hdGNoZXIgPSBjb21w aWxlKCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgIiQxIiApICk7CgoJCQlyZXR1 cm4gbWF0Y2hlclsgZXhwYW5kbyBdID8KCQkJCW1hcmtGdW5jdGlvbihmdW5jdGlv biggc2VlZCwgbWF0Y2hlcywgY29udGV4dCwgeG1sICkgewoJCQkJCXZhciBlbGVt LAoJCQkJCQl1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtd ICksCgkJCQkJCWkgPSBzZWVkLmxlbmd0aDsKCgkJCQkJLy8gTWF0Y2ggZWxlbWVu dHMgdW5tYXRjaGVkIGJ5IGBtYXRjaGVyYAoJCQkJCXdoaWxlICggaS0tICkgewoJ CQkJCQlpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHsKCQkJCQkJCXNlZWRb aV0gPSAhKG1hdGNoZXNbaV0gPSBlbGVtKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0p IDoKCQkJCWZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7CgkJCQkJaW5w dXRbMF0gPSBlbGVtOwoJCQkJCW1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJl c3VsdHMgKTsKCQkJCQlyZXR1cm4gIXJlc3VsdHMucG9wKCk7CgkJCQl9OwoJCX0p LAoKCQkiaGFzIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHsK CQkJcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewoJCQkJcmV0dXJuIFNpenpsZSgg c2VsZWN0b3IsIGVsZW0gKS5sZW5ndGggPiAwOwoJCQl9OwoJCX0pLAoKCQkiY29u dGFpbnMiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHRleHQgKSB7CgkJCXJldHVy biBmdW5jdGlvbiggZWxlbSApIHsKCQkJCXJldHVybiAoIGVsZW0udGV4dENvbnRl bnQgfHwgZWxlbS5pbm5lclRleHQgfHwgZ2V0VGV4dCggZWxlbSApICkuaW5kZXhP ZiggdGV4dCApID4gLTE7CgkJCX07CgkJfSksCgoJCS8vICJXaGV0aGVyIGFuIGVs ZW1lbnQgaXMgcmVwcmVzZW50ZWQgYnkgYSA6bGFuZygpIHNlbGVjdG9yCgkJLy8g aXMgYmFzZWQgc29sZWx5IG9uIHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUK CQkvLyBiZWluZyBlcXVhbCB0byB0aGUgaWRlbnRpZmllciBDLAoJCS8vIG9yIGJl Z2lubmluZyB3aXRoIHRoZSBpZGVudGlmaWVyIEMgaW1tZWRpYXRlbHkgZm9sbG93 ZWQgYnkgIi0iLgoJCS8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVs ZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNp dGl2ZWx5LgoJCS8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBi ZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuIgoJCS8vIGh0dHA6Ly93d3cudzMub3Jn L1RSL3NlbGVjdG9ycy8jbGFuZy1wc2V1ZG8KCQkibGFuZyI6IG1hcmtGdW5jdGlv biggZnVuY3Rpb24oIGxhbmcgKSB7CgkJCS8vIGxhbmcgdmFsdWUgbXVzdCBiZSBh IHZhbGlkIGlkZW50aWZpZXIKCQkJaWYgKCAhcmlkZW50aWZpZXIudGVzdChsYW5n IHx8ICIiKSApIHsKCQkJCVNpenpsZS5lcnJvciggInVuc3VwcG9ydGVkIGxhbmc6 ICIgKyBsYW5nICk7CgkJCX0KCQkJbGFuZyA9IGxhbmcucmVwbGFjZSggcnVuZXNj YXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpOwoJCQlyZXR1cm4gZnVuY3Rp b24oIGVsZW0gKSB7CgkJCQl2YXIgZWxlbUxhbmc7CgkJCQlkbyB7CgkJCQkJaWYg KCAoZWxlbUxhbmcgPSBkb2N1bWVudElzSFRNTCA/CgkJCQkJCWVsZW0ubGFuZyA6 CgkJCQkJCWVsZW0uZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpIHx8IGVsZW0uZ2V0 QXR0cmlidXRlKCJsYW5nIikpICkgewoKCQkJCQkJZWxlbUxhbmcgPSBlbGVtTGFu Zy50b0xvd2VyQ2FzZSgpOwoJCQkJCQlyZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcg fHwgZWxlbUxhbmcuaW5kZXhPZiggbGFuZyArICItIiApID09PSAwOwoJCQkJCX0K CQkJCX0gd2hpbGUgKCAoZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSkgJiYgZWxlbS5u b2RlVHlwZSA9PT0gMSApOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9OwoJCX0pLAoK CQkvLyBNaXNjZWxsYW5lb3VzCgkJInRhcmdldCI6IGZ1bmN0aW9uKCBlbGVtICkg ewoJCQl2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRp b24uaGFzaDsKCQkJcmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSggMSApID09PSBl bGVtLmlkOwoJCX0sCgoJCSJyb290IjogZnVuY3Rpb24oIGVsZW0gKSB7CgkJCXJl dHVybiBlbGVtID09PSBkb2NFbGVtOwoJCX0sCgoJCSJmb2N1cyI6IGZ1bmN0aW9u KCBlbGVtICkgewoJCQlyZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxl bWVudCAmJiAoIWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3VtZW50Lmhhc0ZvY3Vz KCkpICYmICEhKGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5k ZXgpOwoJCX0sCgoJCS8vIEJvb2xlYW4gcHJvcGVydGllcwoJCSJlbmFibGVkIjog ZnVuY3Rpb24oIGVsZW0gKSB7CgkJCXJldHVybiBlbGVtLmRpc2FibGVkID09PSBm YWxzZTsKCQl9LAoKCQkiZGlzYWJsZWQiOiBmdW5jdGlvbiggZWxlbSApIHsKCQkJ cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWU7CgkJfSwKCgkJImNoZWNrZWQi OiBmdW5jdGlvbiggZWxlbSApIHsKCQkJLy8gSW4gQ1NTMywgOmNoZWNrZWQgc2hv dWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzCgkJ CS8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3Jz LTIwMTEwOTI5LyNjaGVja2VkCgkJCXZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5h bWUudG9Mb3dlckNhc2UoKTsKCQkJcmV0dXJuIChub2RlTmFtZSA9PT0gImlucHV0 IiAmJiAhIWVsZW0uY2hlY2tlZCkgfHwgKG5vZGVOYW1lID09PSAib3B0aW9uIiAm JiAhIWVsZW0uc2VsZWN0ZWQpOwoJCX0sCgoJCSJzZWxlY3RlZCI6IGZ1bmN0aW9u KCBlbGVtICkgewoJCQkvLyBBY2Nlc3NpbmcgdGhpcyBwcm9wZXJ0eSBtYWtlcyBz ZWxlY3RlZC1ieS1kZWZhdWx0CgkJCS8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsg cHJvcGVybHkKCQkJaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7CgkJCQllbGVtLnBh cmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKCQkJfQoKCQkJcmV0dXJuIGVsZW0uc2Vs ZWN0ZWQgPT09IHRydWU7CgkJfSwKCgkJLy8gQ29udGVudHMKCQkiZW1wdHkiOiBm dW5jdGlvbiggZWxlbSApIHsKCQkJLy8gaHR0cDovL3d3dy53My5vcmcvVFIvc2Vs ZWN0b3JzLyNlbXB0eS1wc2V1ZG8KCQkJLy8gOmVtcHR5IGlzIG5lZ2F0ZWQgYnkg ZWxlbWVudCAoMSkgb3IgY29udGVudCBub2RlcyAodGV4dDogMzsgY2RhdGE6IDQ7 IGVudGl0eSByZWY6IDUpLAoJCQkvLyAgIGJ1dCBub3QgYnkgb3RoZXJzIChjb21t ZW50OiA4OyBwcm9jZXNzaW5nIGluc3RydWN0aW9uOiA3OyBldGMuKQoJCQkvLyBu b2RlVHlwZSA8IDYgd29ya3MgYmVjYXVzZSBhdHRyaWJ1dGVzICgyKSBkbyBub3Qg YXBwZWFyIGFzIGNoaWxkcmVuCgkJCWZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hp bGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkgewoJCQkJaWYgKCBl bGVtLm5vZGVUeXBlIDwgNiApIHsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJ CX0KCQkJcmV0dXJuIHRydWU7CgkJfSwKCgkJInBhcmVudCI6IGZ1bmN0aW9uKCBl bGVtICkgewoJCQlyZXR1cm4gIUV4cHIucHNldWRvc1siZW1wdHkiXSggZWxlbSAp OwoJCX0sCgoJCS8vIEVsZW1lbnQvaW5wdXQgdHlwZXMKCQkiaGVhZGVyIjogZnVu Y3Rpb24oIGVsZW0gKSB7CgkJCXJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9k ZU5hbWUgKTsKCQl9LAoKCQkiaW5wdXQiOiBmdW5jdGlvbiggZWxlbSApIHsKCQkJ cmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFtZSApOwoJCX0sCgoJCSJi dXR0b24iOiBmdW5jdGlvbiggZWxlbSApIHsKCQkJdmFyIG5hbWUgPSBlbGVtLm5v ZGVOYW1lLnRvTG93ZXJDYXNlKCk7CgkJCXJldHVybiBuYW1lID09PSAiaW5wdXQi ICYmIGVsZW0udHlwZSA9PT0gImJ1dHRvbiIgfHwgbmFtZSA9PT0gImJ1dHRvbiI7 CgkJfSwKCgkJInRleHQiOiBmdW5jdGlvbiggZWxlbSApIHsKCQkJdmFyIGF0dHI7 CgkJCXJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1 dCIgJiYKCQkJCWVsZW0udHlwZSA9PT0gInRleHQiICYmCgoJCQkJLy8gU3VwcG9y dDogSUU8OAoJCQkJLy8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4s ICJzZWFyY2giKSBhcHBlYXIgd2l0aCBlbGVtLnR5cGUgPT09ICJ0ZXh0IgoJCQkJ KCAoYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKCJ0eXBlIikpID09IG51bGwgfHwg YXR0ci50b0xvd2VyQ2FzZSgpID09PSAidGV4dCIgKTsKCQl9LAoKCQkvLyBQb3Np dGlvbi1pbi1jb2xsZWN0aW9uCgkJImZpcnN0IjogY3JlYXRlUG9zaXRpb25hbFBz ZXVkbyhmdW5jdGlvbigpIHsKCQkJcmV0dXJuIFsgMCBdOwoJCX0pLAoKCQkibGFz dCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhl cywgbGVuZ3RoICkgewoJCQlyZXR1cm4gWyBsZW5ndGggLSAxIF07CgkJfSksCgoJ CSJlcSI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5k ZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHsKCQkJcmV0dXJuIFsgYXJndW1lbnQg PCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdOwoJCX0pLAoKCQki ZXZlbiI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5k ZXhlcywgbGVuZ3RoICkgewoJCQl2YXIgaSA9IDA7CgkJCWZvciAoIDsgaSA8IGxl bmd0aDsgaSArPSAyICkgewoJCQkJbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsKCQkJ fQoJCQlyZXR1cm4gbWF0Y2hJbmRleGVzOwoJCX0pLAoKCQkib2RkIjogY3JlYXRl UG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgg KSB7CgkJCXZhciBpID0gMTsKCQkJZm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIg KSB7CgkJCQltYXRjaEluZGV4ZXMucHVzaCggaSApOwoJCQl9CgkJCXJldHVybiBt YXRjaEluZGV4ZXM7CgkJfSksCgoJCSJsdCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1 ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHsK CQkJdmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFy Z3VtZW50OwoJCQlmb3IgKCA7IC0taSA+PSAwOyApIHsKCQkJCW1hdGNoSW5kZXhl cy5wdXNoKCBpICk7CgkJCX0KCQkJcmV0dXJuIG1hdGNoSW5kZXhlczsKCQl9KSwK CgkJImd0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJ bmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkgewoJCQl2YXIgaSA9IGFyZ3VtZW50 IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7CgkJCWZvciAoIDsg KytpIDwgbGVuZ3RoOyApIHsKCQkJCW1hdGNoSW5kZXhlcy5wdXNoKCBpICk7CgkJ CX0KCQkJcmV0dXJuIG1hdGNoSW5kZXhlczsKCQl9KQoJfQp9OwoKRXhwci5wc2V1 ZG9zWyJudGgiXSA9IEV4cHIucHNldWRvc1siZXEiXTsKCi8vIEFkZCBidXR0b24v aW5wdXQgdHlwZSBwc2V1ZG9zCmZvciAoIGkgaW4geyByYWRpbzogdHJ1ZSwgY2hl Y2tib3g6IHRydWUsIGZpbGU6IHRydWUsIHBhc3N3b3JkOiB0cnVlLCBpbWFnZTog dHJ1ZSB9ICkgewoJRXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVk byggaSApOwp9CmZvciAoIGkgaW4geyBzdWJtaXQ6IHRydWUsIHJlc2V0OiB0cnVl IH0gKSB7CglFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUJ1dHRvblBzZXVkbygg aSApOwp9CgovLyBFYXN5IEFQSSBmb3IgY3JlYXRpbmcgbmV3IHNldEZpbHRlcnMK ZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9CnNldEZpbHRlcnMucHJvdG90eXBlID0g RXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zOwpFeHByLnNldEZpbHRlcnMgPSBu ZXcgc2V0RmlsdGVycygpOwoKZnVuY3Rpb24gdG9rZW5pemUoIHNlbGVjdG9yLCBw YXJzZU9ubHkgKSB7Cgl2YXIgbWF0Y2hlZCwgbWF0Y2gsIHRva2VucywgdHlwZSwK CQlzb0ZhciwgZ3JvdXBzLCBwcmVGaWx0ZXJzLAoJCWNhY2hlZCA9IHRva2VuQ2Fj aGVbIHNlbGVjdG9yICsgIiAiIF07CgoJaWYgKCBjYWNoZWQgKSB7CgkJcmV0dXJu IHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTsKCX0KCglzb0ZhciA9 IHNlbGVjdG9yOwoJZ3JvdXBzID0gW107CglwcmVGaWx0ZXJzID0gRXhwci5wcmVG aWx0ZXI7CgoJd2hpbGUgKCBzb0ZhciApIHsKCgkJLy8gQ29tbWEgYW5kIGZpcnN0 IHJ1bgoJCWlmICggIW1hdGNoZWQgfHwgKG1hdGNoID0gcmNvbW1hLmV4ZWMoIHNv RmFyICkpICkgewoJCQlpZiAoIG1hdGNoICkgewoJCQkJLy8gRG9uJ3QgY29uc3Vt ZSB0cmFpbGluZyBjb21tYXMgYXMgdmFsaWQKCQkJCXNvRmFyID0gc29GYXIuc2xp Y2UoIG1hdGNoWzBdLmxlbmd0aCApIHx8IHNvRmFyOwoJCQl9CgkJCWdyb3Vwcy5w dXNoKCAodG9rZW5zID0gW10pICk7CgkJfQoKCQltYXRjaGVkID0gZmFsc2U7CgoJ CS8vIENvbWJpbmF0b3JzCgkJaWYgKCAobWF0Y2ggPSByY29tYmluYXRvcnMuZXhl Yyggc29GYXIgKSkgKSB7CgkJCW1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpOwoJCQl0 b2tlbnMucHVzaCh7CgkJCQl2YWx1ZTogbWF0Y2hlZCwKCQkJCS8vIENhc3QgZGVz Y2VuZGFudCBjb21iaW5hdG9ycyB0byBzcGFjZQoJCQkJdHlwZTogbWF0Y2hbMF0u cmVwbGFjZSggcnRyaW0sICIgIiApCgkJCX0pOwoJCQlzb0ZhciA9IHNvRmFyLnNs aWNlKCBtYXRjaGVkLmxlbmd0aCApOwoJCX0KCgkJLy8gRmlsdGVycwoJCWZvciAo IHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7CgkJCWlmICggKG1hdGNoID0gbWF0Y2hF eHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSkgJiYgKCFwcmVGaWx0ZXJzWyB0eXBl IF0gfHwKCQkJCShtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSggbWF0Y2ggKSkp ICkgewoJCQkJbWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7CgkJCQl0b2tlbnMucHVz aCh7CgkJCQkJdmFsdWU6IG1hdGNoZWQsCgkJCQkJdHlwZTogdHlwZSwKCQkJCQlt YXRjaGVzOiBtYXRjaAoJCQkJfSk7CgkJCQlzb0ZhciA9IHNvRmFyLnNsaWNlKCBt YXRjaGVkLmxlbmd0aCApOwoJCQl9CgkJfQoKCQlpZiAoICFtYXRjaGVkICkgewoJ CQlicmVhazsKCQl9Cgl9CgoJLy8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGlu dmFsaWQgZXhjZXNzCgkvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmcKCS8vIE90aGVy d2lzZSwgdGhyb3cgYW4gZXJyb3Igb3IgcmV0dXJuIHRva2VucwoJcmV0dXJuIHBh cnNlT25seSA/CgkJc29GYXIubGVuZ3RoIDoKCQlzb0ZhciA/CgkJCVNpenpsZS5l cnJvciggc2VsZWN0b3IgKSA6CgkJCS8vIENhY2hlIHRoZSB0b2tlbnMKCQkJdG9r ZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7Cn0KCmZ1bmN0 aW9uIHRvU2VsZWN0b3IoIHRva2VucyApIHsKCXZhciBpID0gMCwKCQlsZW4gPSB0 b2tlbnMubGVuZ3RoLAoJCXNlbGVjdG9yID0gIiI7Cglmb3IgKCA7IGkgPCBsZW47 IGkrKyApIHsKCQlzZWxlY3RvciArPSB0b2tlbnNbaV0udmFsdWU7Cgl9CglyZXR1 cm4gc2VsZWN0b3I7Cn0KCmZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIs IGNvbWJpbmF0b3IsIGJhc2UgKSB7Cgl2YXIgZGlyID0gY29tYmluYXRvci5kaXIs CgkJY2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYgZGlyID09PSAicGFyZW50Tm9k ZSIsCgkJZG9uZU5hbWUgPSBkb25lKys7CgoJcmV0dXJuIGNvbWJpbmF0b3IuZmly c3QgPwoJCS8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRp bmcgZWxlbWVudAoJCWZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7CgkJ CXdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7CgkJCQlpZiAoIGVsZW0u bm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHsKCQkJCQlyZXR1 cm4gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICk7CgkJCQl9CgkJCX0KCQl9 IDoKCgkJLy8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVs ZW1lbnRzCgkJZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKCQkJdmFy IG9sZENhY2hlLCBvdXRlckNhY2hlLAoJCQkJbmV3Q2FjaGUgPSBbIGRpcnJ1bnMs IGRvbmVOYW1lIF07CgoJCQkvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEg b24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBkaXIgY2Fj aGluZwoJCQlpZiAoIHhtbCApIHsKCQkJCXdoaWxlICggKGVsZW0gPSBlbGVtWyBk aXIgXSkgKSB7CgkJCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNr Tm9uRWxlbWVudHMgKSB7CgkJCQkJCWlmICggbWF0Y2hlciggZWxlbSwgY29udGV4 dCwgeG1sICkgKSB7CgkJCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCQkJfQoJCQkJCX0K CQkJCX0KCQkJfSBlbHNlIHsKCQkJCXdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIg XSkgKSB7CgkJCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9u RWxlbWVudHMgKSB7CgkJCQkJCW91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0g fHwgKGVsZW1bIGV4cGFuZG8gXSA9IHt9KTsKCQkJCQkJaWYgKCAob2xkQ2FjaGUg PSBvdXRlckNhY2hlWyBkaXIgXSkgJiYKCQkJCQkJCW9sZENhY2hlWyAwIF0gPT09 IGRpcnJ1bnMgJiYgb2xkQ2FjaGVbIDEgXSA9PT0gZG9uZU5hbWUgKSB7CgoJCQkJ CQkJLy8gQXNzaWduIHRvIG5ld0NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdh dGUgdG8gcHJldmlvdXMgZWxlbWVudHMKCQkJCQkJCXJldHVybiAobmV3Q2FjaGVb IDIgXSA9IG9sZENhY2hlWyAyIF0pOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJLy8g UmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2 aW91cyBlbGVtZW50cwoJCQkJCQkJb3V0ZXJDYWNoZVsgZGlyIF0gPSBuZXdDYWNo ZTsKCgkJCQkJCQkvLyBBIG1hdGNoIG1lYW5zIHdlJ3JlIGRvbmU7IGEgZmFpbCBt ZWFucyB3ZSBoYXZlIHRvIGtlZXAgY2hlY2tpbmcKCQkJCQkJCWlmICggKG5ld0Nh Y2hlWyAyIF0gPSBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSkgKSB7CgkJ CQkJCQkJcmV0dXJuIHRydWU7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQl9 CgkJCX0KCQl9Owp9CgpmdW5jdGlvbiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMg KSB7CglyZXR1cm4gbWF0Y2hlcnMubGVuZ3RoID4gMSA/CgkJZnVuY3Rpb24oIGVs ZW0sIGNvbnRleHQsIHhtbCApIHsKCQkJdmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7 CgkJCXdoaWxlICggaS0tICkgewoJCQkJaWYgKCAhbWF0Y2hlcnNbaV0oIGVsZW0s IGNvbnRleHQsIHhtbCApICkgewoJCQkJCXJldHVybiBmYWxzZTsKCQkJCX0KCQkJ fQoJCQlyZXR1cm4gdHJ1ZTsKCQl9IDoKCQltYXRjaGVyc1swXTsKfQoKZnVuY3Rp b24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHht bCApIHsKCXZhciBlbGVtLAoJCW5ld1VubWF0Y2hlZCA9IFtdLAoJCWkgPSAwLAoJ CWxlbiA9IHVubWF0Y2hlZC5sZW5ndGgsCgkJbWFwcGVkID0gbWFwICE9IG51bGw7 CgoJZm9yICggOyBpIDwgbGVuOyBpKysgKSB7CgkJaWYgKCAoZWxlbSA9IHVubWF0 Y2hlZFtpXSkgKSB7CgkJCWlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNv bnRleHQsIHhtbCApICkgewoJCQkJbmV3VW5tYXRjaGVkLnB1c2goIGVsZW0gKTsK CQkJCWlmICggbWFwcGVkICkgewoJCQkJCW1hcC5wdXNoKCBpICk7CgkJCQl9CgkJ CX0KCQl9Cgl9CgoJcmV0dXJuIG5ld1VubWF0Y2hlZDsKfQoKZnVuY3Rpb24gc2V0 TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRl ciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkgewoJaWYgKCBwb3N0RmlsdGVy ICYmICFwb3N0RmlsdGVyWyBleHBhbmRvIF0gKSB7CgkJcG9zdEZpbHRlciA9IHNl dE1hdGNoZXIoIHBvc3RGaWx0ZXIgKTsKCX0KCWlmICggcG9zdEZpbmRlciAmJiAh cG9zdEZpbmRlclsgZXhwYW5kbyBdICkgewoJCXBvc3RGaW5kZXIgPSBzZXRNYXRj aGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTsKCX0KCXJldHVybiBtYXJr RnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCAp IHsKCQl2YXIgdGVtcCwgaSwgZWxlbSwKCQkJcHJlTWFwID0gW10sCgkJCXBvc3RN YXAgPSBbXSwKCQkJcHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCwKCgkJCS8v IEdldCBpbml0aWFsIGVsZW1lbnRzIGZyb20gc2VlZCBvciBjb250ZXh0CgkJCWVs ZW1zID0gc2VlZCB8fCBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciB8fCAiKiIs IGNvbnRleHQubm9kZVR5cGUgPyBbIGNvbnRleHQgXSA6IGNvbnRleHQsIFtdICks CgoJCQkvLyBQcmVmaWx0ZXIgdG8gZ2V0IG1hdGNoZXIgaW5wdXQsIHByZXNlcnZp bmcgYSBtYXAgZm9yIHNlZWQtcmVzdWx0cyBzeW5jaHJvbml6YXRpb24KCQkJbWF0 Y2hlckluID0gcHJlRmlsdGVyICYmICggc2VlZCB8fCAhc2VsZWN0b3IgKSA/CgkJ CQljb25kZW5zZSggZWxlbXMsIHByZU1hcCwgcHJlRmlsdGVyLCBjb250ZXh0LCB4 bWwgKSA6CgkJCQllbGVtcywKCgkJCW1hdGNoZXJPdXQgPSBtYXRjaGVyID8KCQkJ CS8vIElmIHdlIGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBv ciBub24tc2VlZCBwb3N0RmlsdGVyIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsCgkJ CQlwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5n IHx8IHBvc3RGaWx0ZXIgKSA/CgoJCQkJCS8vIC4uLmludGVybWVkaWF0ZSBwcm9j ZXNzaW5nIGlzIG5lY2Vzc2FyeQoJCQkJCVtdIDoKCgkJCQkJLy8gLi4ub3RoZXJ3 aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5CgkJCQkJcmVzdWx0cyA6CgkJCQltYXRj aGVySW47CgoJCS8vIEZpbmQgcHJpbWFyeSBtYXRjaGVzCgkJaWYgKCBtYXRjaGVy ICkgewoJCQltYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQs IHhtbCApOwoJCX0KCgkJLy8gQXBwbHkgcG9zdEZpbHRlcgoJCWlmICggcG9zdEZp bHRlciApIHsKCQkJdGVtcCA9IGNvbmRlbnNlKCBtYXRjaGVyT3V0LCBwb3N0TWFw ICk7CgkJCXBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTsKCgkJ CS8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVudHMgYnkgbW92aW5nIHRoZW0gYmFj ayB0byBtYXRjaGVySW4KCQkJaSA9IHRlbXAubGVuZ3RoOwoJCQl3aGlsZSAoIGkt LSApIHsKCQkJCWlmICggKGVsZW0gPSB0ZW1wW2ldKSApIHsKCQkJCQltYXRjaGVy T3V0WyBwb3N0TWFwW2ldIF0gPSAhKG1hdGNoZXJJblsgcG9zdE1hcFtpXSBdID0g ZWxlbSk7CgkJCQl9CgkJCX0KCQl9CgoJCWlmICggc2VlZCApIHsKCQkJaWYgKCBw b3N0RmluZGVyIHx8IHByZUZpbHRlciApIHsKCQkJCWlmICggcG9zdEZpbmRlciAp IHsKCQkJCQkvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2lu ZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHMKCQkJ CQl0ZW1wID0gW107CgkJCQkJaSA9IG1hdGNoZXJPdXQubGVuZ3RoOwoJCQkJCXdo aWxlICggaS0tICkgewoJCQkJCQlpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkg KSB7CgkJCQkJCQkvLyBSZXN0b3JlIG1hdGNoZXJJbiBzaW5jZSBlbGVtIGlzIG5v dCB5ZXQgYSBmaW5hbCBtYXRjaAoJCQkJCQkJdGVtcC5wdXNoKCAobWF0Y2hlcklu W2ldID0gZWxlbSkgKTsKCQkJCQkJfQoJCQkJCX0KCQkJCQlwb3N0RmluZGVyKCBu dWxsLCAobWF0Y2hlck91dCA9IFtdKSwgdGVtcCwgeG1sICk7CgkJCQl9CgoJCQkJ Ly8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRv IGtlZXAgdGhlbSBzeW5jaHJvbml6ZWQKCQkJCWkgPSBtYXRjaGVyT3V0Lmxlbmd0 aDsKCQkJCXdoaWxlICggaS0tICkgewoJCQkJCWlmICggKGVsZW0gPSBtYXRjaGVy T3V0W2ldKSAmJgoJCQkJCQkodGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mLmNh bGwoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFtpXSkgPiAtMSApIHsKCgkJCQkJCXNl ZWRbdGVtcF0gPSAhKHJlc3VsdHNbdGVtcF0gPSBlbGVtKTsKCQkJCQl9CgkJCQl9 CgkJCX0KCgkJLy8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9z dEZpbmRlciBpZiBkZWZpbmVkCgkJfSBlbHNlIHsKCQkJbWF0Y2hlck91dCA9IGNv bmRlbnNlKAoJCQkJbWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/CgkJCQkJbWF0Y2hl ck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDoK CQkJCQltYXRjaGVyT3V0CgkJCSk7CgkJCWlmICggcG9zdEZpbmRlciApIHsKCQkJ CXBvc3RGaW5kZXIoIG51bGwsIHJlc3VsdHMsIG1hdGNoZXJPdXQsIHhtbCApOwoJ CQl9IGVsc2UgewoJCQkJcHVzaC5hcHBseSggcmVzdWx0cywgbWF0Y2hlck91dCAp OwoJCQl9CgkJfQoJfSk7Cn0KCmZ1bmN0aW9uIG1hdGNoZXJGcm9tVG9rZW5zKCB0 b2tlbnMgKSB7Cgl2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLAoJCWxlbiA9 IHRva2Vucy5sZW5ndGgsCgkJbGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2 ZVsgdG9rZW5zWzBdLnR5cGUgXSwKCQlpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGlu Z1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbIiAiXSwKCQlpID0gbGVhZGluZ1Jl bGF0aXZlID8gMSA6IDAsCgoJCS8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBl bnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZl bCBjb250ZXh0KHMpCgkJbWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVu Y3Rpb24oIGVsZW0gKSB7CgkJCXJldHVybiBlbGVtID09PSBjaGVja0NvbnRleHQ7 CgkJfSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLAoJCW1hdGNoQW55Q29udGV4 dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkgewoJCQlyZXR1cm4g aW5kZXhPZi5jYWxsKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xOwoJCX0sIGlt cGxpY2l0UmVsYXRpdmUsIHRydWUgKSwKCQltYXRjaGVycyA9IFsgZnVuY3Rpb24o IGVsZW0sIGNvbnRleHQsIHhtbCApIHsKCQkJcmV0dXJuICggIWxlYWRpbmdSZWxh dGl2ZSAmJiAoIHhtbCB8fCBjb250ZXh0ICE9PSBvdXRlcm1vc3RDb250ZXh0ICkg KSB8fCAoCgkJCQkoY2hlY2tDb250ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgPwoJ CQkJCW1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOgoJCQkJCW1h dGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTsKCQl9IF07CgoJ Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7CgkJaWYgKCAobWF0Y2hlciA9IEV4cHIu cmVsYXRpdmVbIHRva2Vuc1tpXS50eXBlIF0pICkgewoJCQltYXRjaGVycyA9IFsg YWRkQ29tYmluYXRvcihlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwgbWF0Y2hl cikgXTsKCQl9IGVsc2UgewoJCQltYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vu c1tpXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1tpXS5tYXRjaGVzICk7CgoJ CQkvLyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0 Y2hlcgoJCQlpZiAoIG1hdGNoZXJbIGV4cGFuZG8gXSApIHsKCQkJCS8vIEZpbmQg dGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBo YW5kbGluZwoJCQkJaiA9ICsraTsKCQkJCWZvciAoIDsgaiA8IGxlbjsgaisrICkg ewoJCQkJCWlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2pdLnR5cGUgXSApIHsK CQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQkJcmV0dXJuIHNldE1hdGNoZXIo CgkJCQkJaSA+IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksCgkJCQkJ aSA+IDEgJiYgdG9TZWxlY3RvcigKCQkJCQkJLy8gSWYgdGhlIHByZWNlZGluZyB0 b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBs aWNpdCBhbnktZWxlbWVudCBgKmAKCQkJCQkJdG9rZW5zLnNsaWNlKCAwLCBpIC0g MSApLmNvbmNhdCh7IHZhbHVlOiB0b2tlbnNbIGkgLSAyIF0udHlwZSA9PT0gIiAi ID8gIioiIDogIiIgfSkKCQkJCQkpLnJlcGxhY2UoIHJ0cmltLCAiJDEiICksCgkJ CQkJbWF0Y2hlciwKCQkJCQlpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9r ZW5zLnNsaWNlKCBpLCBqICkgKSwKCQkJCQlqIDwgbGVuICYmIG1hdGNoZXJGcm9t VG9rZW5zKCAodG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkpICksCgkJCQkJaiA8 IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKQoJCQkJKTsKCQkJfQoJCQltYXRj aGVycy5wdXNoKCBtYXRjaGVyICk7CgkJfQoJfQoKCXJldHVybiBlbGVtZW50TWF0 Y2hlciggbWF0Y2hlcnMgKTsKfQoKZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1h dGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgewoJdmFyIGJ5 U2V0ID0gc2V0TWF0Y2hlcnMubGVuZ3RoID4gMCwKCQlieUVsZW1lbnQgPSBlbGVt ZW50TWF0Y2hlcnMubGVuZ3RoID4gMCwKCQlzdXBlck1hdGNoZXIgPSBmdW5jdGlv biggc2VlZCwgY29udGV4dCwgeG1sLCByZXN1bHRzLCBvdXRlcm1vc3QgKSB7CgkJ CXZhciBlbGVtLCBqLCBtYXRjaGVyLAoJCQkJbWF0Y2hlZENvdW50ID0gMCwKCQkJ CWkgPSAiMCIsCgkJCQl1bm1hdGNoZWQgPSBzZWVkICYmIFtdLAoJCQkJc2V0TWF0 Y2hlZCA9IFtdLAoJCQkJY29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQs CgkJCQkvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIGVpdGhlciBzZWVkIGVsZW1lbnRz IG9yIG91dGVybW9zdCBjb250ZXh0CgkJCQllbGVtcyA9IHNlZWQgfHwgYnlFbGVt ZW50ICYmIEV4cHIuZmluZFsiVEFHIl0oICIqIiwgb3V0ZXJtb3N0ICksCgkJCQkv LyBVc2UgaW50ZWdlciBkaXJydW5zIGlmZiB0aGlzIGlzIHRoZSBvdXRlcm1vc3Qg bWF0Y2hlcgoJCQkJZGlycnVuc1VuaXF1ZSA9IChkaXJydW5zICs9IGNvbnRleHRC YWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSksCgkJCQls ZW4gPSBlbGVtcy5sZW5ndGg7CgoJCQlpZiAoIG91dGVybW9zdCApIHsKCQkJCW91 dGVybW9zdENvbnRleHQgPSBjb250ZXh0ICE9PSBkb2N1bWVudCAmJiBjb250ZXh0 OwoJCQl9CgoJCQkvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hl cnMgZGlyZWN0bHkgdG8gcmVzdWx0cwoJCQkvLyBLZWVwIGBpYCBhIHN0cmluZyBp ZiB0aGVyZSBhcmUgbm8gZWxlbWVudHMgc28gYG1hdGNoZWRDb3VudGAgd2lsbCBi ZSAiMDAiIGJlbG93CgkJCS8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaQoJCQkvLyBU b2xlcmF0ZSBOb2RlTGlzdCBwcm9wZXJ0aWVzIChJRTogImxlbmd0aCI7IFNhZmFy aTogPG51bWJlcj4pIG1hdGNoaW5nIGVsZW1lbnRzIGJ5IGlkCgkJCWZvciAoIDsg aSAhPT0gbGVuICYmIChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyApIHsK CQkJCWlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7CgkJCQkJaiA9IDA7CgkJCQkJ d2hpbGUgKCAobWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1tqKytdKSApIHsKCQkJ CQkJaWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKCQkJCQkJ CXJlc3VsdHMucHVzaCggZWxlbSApOwoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJ CQl9CgkJCQkJaWYgKCBvdXRlcm1vc3QgKSB7CgkJCQkJCWRpcnJ1bnMgPSBkaXJy dW5zVW5pcXVlOwoJCQkJCX0KCQkJCX0KCgkJCQkvLyBUcmFjayB1bm1hdGNoZWQg ZWxlbWVudHMgZm9yIHNldCBmaWx0ZXJzCgkJCQlpZiAoIGJ5U2V0ICkgewoJCQkJ CS8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0 Y2hlcnMKCQkJCQlpZiAoIChlbGVtID0gIW1hdGNoZXIgJiYgZWxlbSkgKSB7CgkJ CQkJCW1hdGNoZWRDb3VudC0tOwoJCQkJCX0KCgkJCQkJLy8gTGVuZ3RoZW4gdGhl IGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdAoJCQkJCWlm ICggc2VlZCApIHsKCQkJCQkJdW5tYXRjaGVkLnB1c2goIGVsZW0gKTsKCQkJCQl9 CgkJCQl9CgkJCX0KCgkJCS8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hl ZCBlbGVtZW50cwoJCQltYXRjaGVkQ291bnQgKz0gaTsKCQkJaWYgKCBieVNldCAm JiBpICE9PSBtYXRjaGVkQ291bnQgKSB7CgkJCQlqID0gMDsKCQkJCXdoaWxlICgg KG1hdGNoZXIgPSBzZXRNYXRjaGVyc1tqKytdKSApIHsKCQkJCQltYXRjaGVyKCB1 bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApOwoJCQkJfQoKCQkJ CWlmICggc2VlZCApIHsKCQkJCQkvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNo ZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nCgkJCQkJaWYgKCBt YXRjaGVkQ291bnQgPiAwICkgewoJCQkJCQl3aGlsZSAoIGktLSApIHsKCQkJCQkJ CWlmICggISh1bm1hdGNoZWRbaV0gfHwgc2V0TWF0Y2hlZFtpXSkgKSB7CgkJCQkJ CQkJc2V0TWF0Y2hlZFtpXSA9IHBvcC5jYWxsKCByZXN1bHRzICk7CgkJCQkJCQl9 CgkJCQkJCX0KCQkJCQl9CgoJCQkJCS8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xk ZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzCgkJCQkJc2V0TWF0 Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7CgkJCQl9CgoJCQkJLy8gQWRk IG1hdGNoZXMgdG8gcmVzdWx0cwoJCQkJcHVzaC5hcHBseSggcmVzdWx0cywgc2V0 TWF0Y2hlZCApOwoKCQkJCS8vIFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1Y2NlZWRp bmcgbXVsdGlwbGUgc3VjY2Vzc2Z1bCBtYXRjaGVycyBzdGlwdWxhdGUgc29ydGlu ZwoJCQkJaWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5n dGggPiAwICYmCgkJCQkJKCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5n dGggKSA+IDEgKSB7CgoJCQkJCVNpenpsZS51bmlxdWVTb3J0KCByZXN1bHRzICk7 CgkJCQl9CgkJCX0KCgkJCS8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9i YWxzIGJ5IG5lc3RlZCBtYXRjaGVycwoJCQlpZiAoIG91dGVybW9zdCApIHsKCQkJ CWRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlOwoJCQkJb3V0ZXJtb3N0Q29udGV4dCA9 IGNvbnRleHRCYWNrdXA7CgkJCX0KCgkJCXJldHVybiB1bm1hdGNoZWQ7CgkJfTsK CglyZXR1cm4gYnlTZXQgPwoJCW1hcmtGdW5jdGlvbiggc3VwZXJNYXRjaGVyICkg OgoJCXN1cGVyTWF0Y2hlcjsKfQoKY29tcGlsZSA9IFNpenpsZS5jb21waWxlID0g ZnVuY3Rpb24oIHNlbGVjdG9yLCBncm91cCAvKiBJbnRlcm5hbCBVc2UgT25seSAq LyApIHsKCXZhciBpLAoJCXNldE1hdGNoZXJzID0gW10sCgkJZWxlbWVudE1hdGNo ZXJzID0gW10sCgkJY2FjaGVkID0gY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyAi ICIgXTsKCglpZiAoICFjYWNoZWQgKSB7CgkJLy8gR2VuZXJhdGUgYSBmdW5jdGlv biBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hl Y2sgZWFjaCBlbGVtZW50CgkJaWYgKCAhZ3JvdXAgKSB7CgkJCWdyb3VwID0gdG9r ZW5pemUoIHNlbGVjdG9yICk7CgkJfQoJCWkgPSBncm91cC5sZW5ndGg7CgkJd2hp bGUgKCBpLS0gKSB7CgkJCWNhY2hlZCA9IG1hdGNoZXJGcm9tVG9rZW5zKCBncm91 cFtpXSApOwoJCQlpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkgewoJCQkJc2V0TWF0 Y2hlcnMucHVzaCggY2FjaGVkICk7CgkJCX0gZWxzZSB7CgkJCQllbGVtZW50TWF0 Y2hlcnMucHVzaCggY2FjaGVkICk7CgkJCX0KCQl9CgoJCS8vIENhY2hlIHRoZSBj b21waWxlZCBmdW5jdGlvbgoJCWNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoIHNlbGVj dG9yLCBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywg c2V0TWF0Y2hlcnMgKSApOwoJfQoJcmV0dXJuIGNhY2hlZDsKfTsKCmZ1bmN0aW9u IG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyAp IHsKCXZhciBpID0gMCwKCQlsZW4gPSBjb250ZXh0cy5sZW5ndGg7Cglmb3IgKCA7 IGkgPCBsZW47IGkrKyApIHsKCQlTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tp XSwgcmVzdWx0cyApOwoJfQoJcmV0dXJuIHJlc3VsdHM7Cn0KCmZ1bmN0aW9uIHNl bGVjdCggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7Cgl2YXIg aSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCwKCQltYXRjaCA9IHRva2VuaXpl KCBzZWxlY3RvciApOwoKCWlmICggIXNlZWQgKSB7CgkJLy8gVHJ5IHRvIG1pbmlt aXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUgZ3JvdXAKCQlpZiAo IG1hdGNoLmxlbmd0aCA9PT0gMSApIHsKCgkJCS8vIFRha2UgYSBzaG9ydGN1dCBh bmQgc2V0IHRoZSBjb250ZXh0IGlmIHRoZSByb290IHNlbGVjdG9yIGlzIGFuIElE CgkJCXRva2VucyA9IG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAgKTsKCQkJ aWYgKCB0b2tlbnMubGVuZ3RoID4gMiAmJiAodG9rZW4gPSB0b2tlbnNbMF0pLnR5 cGUgPT09ICJJRCIgJiYKCQkJCQlzdXBwb3J0LmdldEJ5SWQgJiYgY29udGV4dC5u b2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJgoJCQkJCUV4cHIucmVs YXRpdmVbIHRva2Vuc1sxXS50eXBlIF0gKSB7CgoJCQkJY29udGV4dCA9ICggRXhw ci5maW5kWyJJRCJdKCB0b2tlbi5tYXRjaGVzWzBdLnJlcGxhY2UocnVuZXNjYXBl LCBmdW5lc2NhcGUpLCBjb250ZXh0ICkgfHwgW10gKVswXTsKCQkJCWlmICggIWNv bnRleHQgKSB7CgkJCQkJcmV0dXJuIHJlc3VsdHM7CgkJCQl9CgkJCQlzZWxlY3Rv ciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGgg KTsKCQkJfQoKCQkJLy8gRmV0Y2ggYSBzZWVkIHNldCBmb3IgcmlnaHQtdG8tbGVm dCBtYXRjaGluZwoJCQlpID0gbWF0Y2hFeHByWyJuZWVkc0NvbnRleHQiXS50ZXN0 KCBzZWxlY3RvciApID8gMCA6IHRva2Vucy5sZW5ndGg7CgkJCXdoaWxlICggaS0t ICkgewoJCQkJdG9rZW4gPSB0b2tlbnNbaV07CgoJCQkJLy8gQWJvcnQgaWYgd2Ug aGl0IGEgY29tYmluYXRvcgoJCQkJaWYgKCBFeHByLnJlbGF0aXZlWyAodHlwZSA9 IHRva2VuLnR5cGUpIF0gKSB7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQlpZiAoIChm aW5kID0gRXhwci5maW5kWyB0eXBlIF0pICkgewoJCQkJCS8vIFNlYXJjaCwgZXhw YW5kaW5nIGNvbnRleHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21iaW5hdG9ycwoJ CQkJCWlmICggKHNlZWQgPSBmaW5kKAoJCQkJCQl0b2tlbi5tYXRjaGVzWzBdLnJl cGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksCgkJCQkJCXJzaWJsaW5nLnRl c3QoIHRva2Vuc1swXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFy ZW50Tm9kZSApIHx8IGNvbnRleHQKCQkJCQkpKSApIHsKCgkJCQkJCS8vIElmIHNl ZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBl YXJseQoJCQkJCQl0b2tlbnMuc3BsaWNlKCBpLCAxICk7CgkJCQkJCXNlbGVjdG9y ID0gc2VlZC5sZW5ndGggJiYgdG9TZWxlY3RvciggdG9rZW5zICk7CgkJCQkJCWlm ICggIXNlbGVjdG9yICkgewoJCQkJCQkJcHVzaC5hcHBseSggcmVzdWx0cywgc2Vl ZCApOwoJCQkJCQkJcmV0dXJuIHJlc3VsdHM7CgkJCQkJCX0KCgkJCQkJCWJyZWFr OwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KCgkvLyBDb21waWxlIGFuZCBleGVj dXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9uCgkvLyBQcm92aWRlIGBtYXRjaGAgdG8g YXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9y IGFib3ZlCgljb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSgKCQlzZWVkLAoJCWNv bnRleHQsCgkJIWRvY3VtZW50SXNIVE1MLAoJCXJlc3VsdHMsCgkJcnNpYmxpbmcu dGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnRO b2RlICkgfHwgY29udGV4dAoJKTsKCXJldHVybiByZXN1bHRzOwp9CgovLyBPbmUt dGltZSBhc3NpZ25tZW50cwoKLy8gU29ydCBzdGFiaWxpdHkKc3VwcG9ydC5zb3J0 U3RhYmxlID0gZXhwYW5kby5zcGxpdCgiIikuc29ydCggc29ydE9yZGVyICkuam9p bigiIikgPT09IGV4cGFuZG87CgovLyBTdXBwb3J0OiBDaHJvbWU8MTQKLy8gQWx3 YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0 aGUgY29tcGFyaXNvbiBmdW5jdGlvbgpzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXMg PSAhIWhhc0R1cGxpY2F0ZTsKCi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVm YXVsdCBkb2N1bWVudApzZXREb2N1bWVudCgpOwoKLy8gU3VwcG9ydDogV2Via2l0 PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9t ZSAyNykKLy8gRGV0YWNoZWQgbm9kZXMgY29uZm91bmRpbmdseSBmb2xsb3cgKmVh Y2ggb3RoZXIqCnN1cHBvcnQuc29ydERldGFjaGVkID0gYXNzZXJ0KGZ1bmN0aW9u KCBkaXYxICkgewoJLy8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0IChm b2xsb3dpbmcpCglyZXR1cm4gZGl2MS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbigg ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikgKSAmIDE7Cn0pOwoKLy8gU3Vw cG9ydDogSUU8OAovLyBQcmV2ZW50IGF0dHJpYnV0ZS9wcm9wZXJ0eSAiaW50ZXJw b2xhdGlvbiIKLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJy YXJ5L21zNTM2NDI5JTI4VlMuODUlMjkuYXNweAppZiAoICFhc3NlcnQoZnVuY3Rp b24oIGRpdiApIHsKCWRpdi5pbm5lckhUTUwgPSAiPGEgaHJlZj0nIyc+PC9hPiI7 CglyZXR1cm4gZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikgPT09 ICIjIiA7Cn0pICkgewoJYWRkSGFuZGxlKCAidHlwZXxocmVmfGhlaWdodHx3aWR0 aCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHsKCQlpZiAoICFpc1hN TCApIHsKCQkJcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lLnRv TG93ZXJDYXNlKCkgPT09ICJ0eXBlIiA/IDEgOiAyICk7CgkJfQoJfSk7Cn0KCi8v IFN1cHBvcnQ6IElFPDkKLy8gVXNlIGRlZmF1bHRWYWx1ZSBpbiBwbGFjZSBvZiBn ZXRBdHRyaWJ1dGUoInZhbHVlIikKaWYgKCAhc3VwcG9ydC5hdHRyaWJ1dGVzIHx8 ICFhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKCWRpdi5pbm5lckhUTUwgPSAiPGlu cHV0Lz4iOwoJZGl2LmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCAidmFsdWUiLCAi IiApOwoJcmV0dXJuIGRpdi5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSggInZhbHVl IiApID09PSAiIjsKfSkgKSB7CglhZGRIYW5kbGUoICJ2YWx1ZSIsIGZ1bmN0aW9u KCBlbGVtLCBuYW1lLCBpc1hNTCApIHsKCQlpZiAoICFpc1hNTCAmJiBlbGVtLm5v ZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgKSB7CgkJCXJldHVybiBl bGVtLmRlZmF1bHRWYWx1ZTsKCQl9Cgl9KTsKfQoKLy8gU3VwcG9ydDogSUU8OQov LyBVc2UgZ2V0QXR0cmlidXRlTm9kZSB0byBmZXRjaCBib29sZWFucyB3aGVuIGdl dEF0dHJpYnV0ZSBsaWVzCmlmICggIWFzc2VydChmdW5jdGlvbiggZGl2ICkgewoJ cmV0dXJuIGRpdi5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIikgPT0gbnVsbDsKfSkg KSB7CglhZGRIYW5kbGUoIGJvb2xlYW5zLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwg aXNYTUwgKSB7CgkJdmFyIHZhbDsKCQlpZiAoICFpc1hNTCApIHsKCQkJcmV0dXJu IGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6CgkJ CQkJKHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApKSAmJiB2YWwu c3BlY2lmaWVkID8KCQkJCQl2YWwudmFsdWUgOgoJCQkJbnVsbDsKCQl9Cgl9KTsK fQoKcmV0dXJuIFNpenpsZTsKCn0pKCB3aW5kb3cgKTsKCgoKalF1ZXJ5LmZpbmQg PSBTaXp6bGU7CmpRdWVyeS5leHByID0gU2l6emxlLnNlbGVjdG9yczsKalF1ZXJ5 LmV4cHJbIjoiXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7CmpRdWVyeS51bmlxdWUg PSBTaXp6bGUudW5pcXVlU29ydDsKalF1ZXJ5LnRleHQgPSBTaXp6bGUuZ2V0VGV4 dDsKalF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlzWE1MOwpqUXVlcnkuY29udGFp bnMgPSBTaXp6bGUuY29udGFpbnM7CgoKCnZhciBybmVlZHNDb250ZXh0ID0galF1 ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0OwoKdmFyIHJzaW5nbGVUYWcgPSAo L148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLyk7CgoKCnZhciByaXNTaW1wbGUg PSAvXi5bXjojXFtcLixdKiQvOwoKLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwg ZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3QKZnVuY3Rpb24gd2lubm93 KCBlbGVtZW50cywgcXVhbGlmaWVyLCBub3QgKSB7CglpZiAoIGpRdWVyeS5pc0Z1 bmN0aW9uKCBxdWFsaWZpZXIgKSApIHsKCQlyZXR1cm4galF1ZXJ5LmdyZXAoIGVs ZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKCQkJLyoganNoaW50IC1XMDE4 ICovCgkJCXJldHVybiAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICkg IT09IG5vdDsKCQl9KTsKCgl9CgoJaWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7 CgkJcmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0g KSB7CgkJCXJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBub3Q7CgkJ fSk7CgoJfQoKCWlmICggdHlwZW9mIHF1YWxpZmllciA9PT0gInN0cmluZyIgKSB7 CgkJaWYgKCByaXNTaW1wbGUudGVzdCggcXVhbGlmaWVyICkgKSB7CgkJCXJldHVy biBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzLCBub3QgKTsKCQl9 CgoJCXF1YWxpZmllciA9IGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZWxlbWVu dHMgKTsKCX0KCglyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlv biggZWxlbSApIHsKCQlyZXR1cm4gKCBqUXVlcnkuaW5BcnJheSggZWxlbSwgcXVh bGlmaWVyICkgPj0gMCApICE9PSBub3Q7Cgl9KTsKfQoKalF1ZXJ5LmZpbHRlciA9 IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkgewoJdmFyIGVsZW0gPSBlbGVt c1sgMCBdOwoKCWlmICggbm90ICkgewoJCWV4cHIgPSAiOm5vdCgiICsgZXhwciAr ICIpIjsKCX0KCglyZXR1cm4gZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9k ZVR5cGUgPT09IDEgPwoJCWpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZWxl bSwgZXhwciApID8gWyBlbGVtIF0gOiBbXSA6CgkJalF1ZXJ5LmZpbmQubWF0Y2hl cyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHsK CQkJcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7CgkJfSkpOwp9OwoKalF1ZXJ5 LmZuLmV4dGVuZCh7CglmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CgkJdmFy IGksCgkJCXJldCA9IFtdLAoJCQlzZWxmID0gdGhpcywKCQkJbGVuID0gc2VsZi5s ZW5ndGg7CgoJCWlmICggdHlwZW9mIHNlbGVjdG9yICE9PSAic3RyaW5nIiApIHsK CQkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICkuZmls dGVyKGZ1bmN0aW9uKCkgewoJCQkJZm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyAp IHsKCQkJCQlpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkg KSB7CgkJCQkJCXJldHVybiB0cnVlOwoJCQkJCX0KCQkJCX0KCQkJfSkgKTsKCQl9 CgoJCWZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7CgkJCWpRdWVyeS5maW5k KCBzZWxlY3Rvciwgc2VsZlsgaSBdLCByZXQgKTsKCQl9CgoJCS8vIE5lZWRlZCBi ZWNhdXNlICQoIHNlbGVjdG9yLCBjb250ZXh0ICkgYmVjb21lcyAkKCBjb250ZXh0 ICkuZmluZCggc2VsZWN0b3IgKQoJCXJldCA9IHRoaXMucHVzaFN0YWNrKCBsZW4g PiAxID8galF1ZXJ5LnVuaXF1ZSggcmV0ICkgOiByZXQgKTsKCQlyZXQuc2VsZWN0 b3IgPSB0aGlzLnNlbGVjdG9yID8gdGhpcy5zZWxlY3RvciArICIgIiArIHNlbGVj dG9yIDogc2VsZWN0b3I7CgkJcmV0dXJuIHJldDsKCX0sCglmaWx0ZXI6IGZ1bmN0 aW9uKCBzZWxlY3RvciApIHsKCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5v dyh0aGlzLCBzZWxlY3RvciB8fCBbXSwgZmFsc2UpICk7Cgl9LAoJbm90OiBmdW5j dGlvbiggc2VsZWN0b3IgKSB7CgkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5u b3codGhpcywgc2VsZWN0b3IgfHwgW10sIHRydWUpICk7Cgl9LAoJaXM6IGZ1bmN0 aW9uKCBzZWxlY3RvciApIHsKCQlyZXR1cm4gISF3aW5ub3coCgkJCXRoaXMsCgoJ CQkvLyBJZiB0aGlzIGlzIGEgcG9zaXRpb25hbC9yZWxhdGl2ZSBzZWxlY3Rvciwg Y2hlY2sgbWVtYmVyc2hpcCBpbiB0aGUgcmV0dXJuZWQgc2V0CgkJCS8vIHNvICQo InA6Zmlyc3QiKS5pcygicDpsYXN0Iikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEg ZG9jIHdpdGggdHdvICJwIi4KCQkJdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5n IiAmJiBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICkgPwoJCQkJalF1ZXJ5 KCBzZWxlY3RvciApIDoKCQkJCXNlbGVjdG9yIHx8IFtdLAoJCQlmYWxzZQoJCSku bGVuZ3RoOwoJfQp9KTsKCgovLyBJbml0aWFsaXplIGEgalF1ZXJ5IG9iamVjdAoK Ci8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5KGRvY3Vt ZW50KQp2YXIgcm9vdGpRdWVyeSwKCgkvLyBVc2UgdGhlIGNvcnJlY3QgZG9jdW1l bnQgYWNjb3JkaW5nbHkgd2l0aCB3aW5kb3cgYXJndW1lbnQgKHNhbmRib3gpCglk b2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudCwKCgkvLyBBIHNpbXBsZSB3YXkgdG8g Y2hlY2sgZm9yIEhUTUwgc3RyaW5ncwoJLy8gUHJpb3JpdGl6ZSAjaWQgb3ZlciA8 dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKCM5NTIxKQoJLy8g U3RyaWN0IEhUTUwgcmVjb2duaXRpb24gKCMxMTI5MDogbXVzdCBzdGFydCB3aXRo IDwpCglycXVpY2tFeHByID0gL14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3 LV0qKSkkLywKCglpbml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbiggc2Vs ZWN0b3IsIGNvbnRleHQgKSB7CgkJdmFyIG1hdGNoLCBlbGVtOwoKCQkvLyBIQU5E TEU6ICQoIiIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpCgkJaWYg KCAhc2VsZWN0b3IgKSB7CgkJCXJldHVybiB0aGlzOwoJCX0KCgkJLy8gSGFuZGxl IEhUTUwgc3RyaW5ncwoJCWlmICggdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5n IiApIHsKCQkJaWYgKCBzZWxlY3Rvci5jaGFyQXQoMCkgPT09ICI8IiAmJiBzZWxl Y3Rvci5jaGFyQXQoIHNlbGVjdG9yLmxlbmd0aCAtIDEgKSA9PT0gIj4iICYmIHNl bGVjdG9yLmxlbmd0aCA+PSAzICkgewoJCQkJLy8gQXNzdW1lIHRoYXQgc3RyaW5n cyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0 aGUgcmVnZXggY2hlY2sKCQkJCW1hdGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVs bCBdOwoKCQkJfSBlbHNlIHsKCQkJCW1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBz ZWxlY3RvciApOwoJCQl9CgoJCQkvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBu byBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkCgkJCWlmICggbWF0Y2ggJiYg KG1hdGNoWzFdIHx8ICFjb250ZXh0KSApIHsKCgkJCQkvLyBIQU5ETEU6ICQoaHRt bCkgLT4gJChhcnJheSkKCQkJCWlmICggbWF0Y2hbMV0gKSB7CgkJCQkJY29udGV4 dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WzBdIDogY29u dGV4dDsKCgkJCQkJLy8gc2NyaXB0cyBpcyB0cnVlIGZvciBiYWNrLWNvbXBhdAoJ CQkJCS8vIEludGVudGlvbmFsbHkgbGV0IHRoZSBlcnJvciBiZSB0aHJvd24gaWYg cGFyc2VIVE1MIGlzIG5vdCBwcmVzZW50CgkJCQkJalF1ZXJ5Lm1lcmdlKCB0aGlz LCBqUXVlcnkucGFyc2VIVE1MKAoJCQkJCQltYXRjaFsxXSwKCQkJCQkJY29udGV4 dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8 IGNvbnRleHQgOiBkb2N1bWVudCwKCQkJCQkJdHJ1ZQoJCQkJCSkgKTsKCgkJCQkJ Ly8gSEFORExFOiAkKGh0bWwsIHByb3BzKQoJCQkJCWlmICggcnNpbmdsZVRhZy50 ZXN0KCBtYXRjaFsxXSApICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0 ICkgKSB7CgkJCQkJCWZvciAoIG1hdGNoIGluIGNvbnRleHQgKSB7CgkJCQkJCQkv LyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlm IHBvc3NpYmxlCgkJCQkJCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB0aGlzWyBt YXRjaCBdICkgKSB7CgkJCQkJCQkJdGhpc1sgbWF0Y2ggXSggY29udGV4dFsgbWF0 Y2ggXSApOwoKCQkJCQkJCS8vIC4uLmFuZCBvdGhlcndpc2Ugc2V0IGFzIGF0dHJp YnV0ZXMKCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJdGhpcy5hdHRyKCBtYXRjaCwg Y29udGV4dFsgbWF0Y2ggXSApOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoKCQkJ CQlyZXR1cm4gdGhpczsKCgkJCQkvLyBIQU5ETEU6ICQoI2lkKQoJCQkJfSBlbHNl IHsKCQkJCQllbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWzJd ICk7CgoJCQkJCS8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2ggd2hlbiBCbGFj a2JlcnJ5IDQuNiByZXR1cm5zCgkJCQkJLy8gbm9kZXMgdGhhdCBhcmUgbm8gbG9u Z2VyIGluIHRoZSBkb2N1bWVudCAjNjk2MwoJCQkJCWlmICggZWxlbSAmJiBlbGVt LnBhcmVudE5vZGUgKSB7CgkJCQkJCS8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBJ RSBhbmQgT3BlcmEgcmV0dXJuIGl0ZW1zCgkJCQkJCS8vIGJ5IG5hbWUgaW5zdGVh ZCBvZiBJRAoJCQkJCQlpZiAoIGVsZW0uaWQgIT09IG1hdGNoWzJdICkgewoJCQkJ CQkJcmV0dXJuIHJvb3RqUXVlcnkuZmluZCggc2VsZWN0b3IgKTsKCQkJCQkJfQoK CQkJCQkJLy8gT3RoZXJ3aXNlLCB3ZSBpbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0 bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdAoJCQkJCQl0aGlzLmxlbmd0aCA9IDE7 CgkJCQkJCXRoaXNbMF0gPSBlbGVtOwoJCQkJCX0KCgkJCQkJdGhpcy5jb250ZXh0 ID0gZG9jdW1lbnQ7CgkJCQkJdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yOwoJCQkJ CXJldHVybiB0aGlzOwoJCQkJfQoKCQkJLy8gSEFORExFOiAkKGV4cHIsICQoLi4u KSkKCQkJfSBlbHNlIGlmICggIWNvbnRleHQgfHwgY29udGV4dC5qcXVlcnkgKSB7 CgkJCQlyZXR1cm4gKCBjb250ZXh0IHx8IHJvb3RqUXVlcnkgKS5maW5kKCBzZWxl Y3RvciApOwoKCQkJLy8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpCgkJCS8vICh3 aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQoY29udGV4dCkuZmluZChleHBy KQoJCQl9IGVsc2UgewoJCQkJcmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNvbnRl eHQgKS5maW5kKCBzZWxlY3RvciApOwoJCQl9CgoJCS8vIEhBTkRMRTogJChET01F bGVtZW50KQoJCX0gZWxzZSBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkgewoJCQl0 aGlzLmNvbnRleHQgPSB0aGlzWzBdID0gc2VsZWN0b3I7CgkJCXRoaXMubGVuZ3Ro ID0gMTsKCQkJcmV0dXJuIHRoaXM7CgoJCS8vIEhBTkRMRTogJChmdW5jdGlvbikK CQkvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHkKCQl9IGVsc2UgaWYgKCBq UXVlcnkuaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHsKCQkJcmV0dXJuIHR5cGVv ZiByb290alF1ZXJ5LnJlYWR5ICE9PSAidW5kZWZpbmVkIiA/CgkJCQlyb290alF1 ZXJ5LnJlYWR5KCBzZWxlY3RvciApIDoKCQkJCS8vIEV4ZWN1dGUgaW1tZWRpYXRl bHkgaWYgcmVhZHkgaXMgbm90IHByZXNlbnQKCQkJCXNlbGVjdG9yKCBqUXVlcnkg KTsKCQl9CgoJCWlmICggc2VsZWN0b3Iuc2VsZWN0b3IgIT09IHVuZGVmaW5lZCAp IHsKCQkJdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yLnNlbGVjdG9yOwoJCQl0aGlz LmNvbnRleHQgPSBzZWxlY3Rvci5jb250ZXh0OwoJCX0KCgkJcmV0dXJuIGpRdWVy eS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7Cgl9OwoKLy8gR2l2ZSB0aGUg aW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5z dGFudGlhdGlvbgppbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjsKCi8vIEluaXRp YWxpemUgY2VudHJhbCByZWZlcmVuY2UKcm9vdGpRdWVyeSA9IGpRdWVyeSggZG9j dW1lbnQgKTsKCgp2YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYo PzpVbnRpbHxBbGwpKS8sCgkvLyBtZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVj ZSBhIHVuaXF1ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldAoJ Z3VhcmFudGVlZFVuaXF1ZSA9IHsKCQljaGlsZHJlbjogdHJ1ZSwKCQljb250ZW50 czogdHJ1ZSwKCQluZXh0OiB0cnVlLAoJCXByZXY6IHRydWUKCX07CgpqUXVlcnku ZXh0ZW5kKHsKCWRpcjogZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7CgkJ dmFyIG1hdGNoZWQgPSBbXSwKCQkJY3VyID0gZWxlbVsgZGlyIF07CgoJCXdoaWxl ICggY3VyICYmIGN1ci5ub2RlVHlwZSAhPT0gOSAmJiAodW50aWwgPT09IHVuZGVm aW5lZCB8fCBjdXIubm9kZVR5cGUgIT09IDEgfHwgIWpRdWVyeSggY3VyICkuaXMo IHVudGlsICkpICkgewoJCQlpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSApIHsKCQkJ CW1hdGNoZWQucHVzaCggY3VyICk7CgkJCX0KCQkJY3VyID0gY3VyW2Rpcl07CgkJ fQoJCXJldHVybiBtYXRjaGVkOwoJfSwKCglzaWJsaW5nOiBmdW5jdGlvbiggbiwg ZWxlbSApIHsKCQl2YXIgciA9IFtdOwoKCQlmb3IgKCA7IG47IG4gPSBuLm5leHRT aWJsaW5nICkgewoJCQlpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxl bSApIHsKCQkJCXIucHVzaCggbiApOwoJCQl9CgkJfQoKCQlyZXR1cm4gcjsKCX0K fSk7CgpqUXVlcnkuZm4uZXh0ZW5kKHsKCWhhczogZnVuY3Rpb24oIHRhcmdldCAp IHsKCQl2YXIgaSwKCQkJdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICks CgkJCWxlbiA9IHRhcmdldHMubGVuZ3RoOwoKCQlyZXR1cm4gdGhpcy5maWx0ZXIo ZnVuY3Rpb24oKSB7CgkJCWZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7CgkJ CQlpZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFyZ2V0c1tpXSApICkgewoJ CQkJCXJldHVybiB0cnVlOwoJCQkJfQoJCQl9CgkJfSk7Cgl9LAoKCWNsb3Nlc3Q6 IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7CgkJdmFyIGN1ciwKCQkJ aSA9IDAsCgkJCWwgPSB0aGlzLmxlbmd0aCwKCQkJbWF0Y2hlZCA9IFtdLAoJCQlw b3MgPSBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9ycyApIHx8IHR5cGVvZiBz ZWxlY3RvcnMgIT09ICJzdHJpbmciID8KCQkJCWpRdWVyeSggc2VsZWN0b3JzLCBj b250ZXh0IHx8IHRoaXMuY29udGV4dCApIDoKCQkJCTA7CgoJCWZvciAoIDsgaSA8 IGw7IGkrKyApIHsKCQkJZm9yICggY3VyID0gdGhpc1tpXTsgY3VyICYmIGN1ciAh PT0gY29udGV4dDsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7CgkJCQkvLyBBbHdh eXMgc2tpcCBkb2N1bWVudCBmcmFnbWVudHMKCQkJCWlmICggY3VyLm5vZGVUeXBl IDwgMTEgJiYgKHBvcyA/CgkJCQkJcG9zLmluZGV4KGN1cikgPiAtMSA6CgoJCQkJ CS8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRzIHRvIFNpenpsZQoJCQkJCWN1ci5u b2RlVHlwZSA9PT0gMSAmJgoJCQkJCQlqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0 b3IoY3VyLCBzZWxlY3RvcnMpKSApIHsKCgkJCQkJbWF0Y2hlZC5wdXNoKCBjdXIg KTsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0KCgkJcmV0dXJuIHRoaXMucHVz aFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlKCBtYXRj aGVkICkgOiBtYXRjaGVkICk7Cgl9LAoKCS8vIERldGVybWluZSB0aGUgcG9zaXRp b24gb2YgYW4gZWxlbWVudCB3aXRoaW4KCS8vIHRoZSBtYXRjaGVkIHNldCBvZiBl bGVtZW50cwoJaW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkgewoKCQkvLyBObyBhcmd1 bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudAoJCWlmICggIWVsZW0gKSB7CgkJ CXJldHVybiAoIHRoaXNbMF0gJiYgdGhpc1swXS5wYXJlbnROb2RlICkgPyB0aGlz LmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0xOwoJCX0KCgkJLy8gaW5kZXgg aW4gc2VsZWN0b3IKCQlpZiAoIHR5cGVvZiBlbGVtID09PSAic3RyaW5nIiApIHsK CQkJcmV0dXJuIGpRdWVyeS5pbkFycmF5KCB0aGlzWzBdLCBqUXVlcnkoIGVsZW0g KSApOwoJCX0KCgkJLy8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJl ZCBlbGVtZW50CgkJcmV0dXJuIGpRdWVyeS5pbkFycmF5KAoJCQkvLyBJZiBpdCBy ZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVz ZWQKCQkJZWxlbS5qcXVlcnkgPyBlbGVtWzBdIDogZWxlbSwgdGhpcyApOwoJfSwK CglhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsKCQlyZXR1cm4g dGhpcy5wdXNoU3RhY2soCgkJCWpRdWVyeS51bmlxdWUoCgkJCQlqUXVlcnkubWVy Z2UoIHRoaXMuZ2V0KCksIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSApCgkJ CSkKCQkpOwoJfSwKCglhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CgkJ cmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID8KCQkJdGhpcy5wcmV2 T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlcihzZWxlY3RvcikKCQkpOwoJ fQp9KTsKCmZ1bmN0aW9uIHNpYmxpbmcoIGN1ciwgZGlyICkgewoJZG8gewoJCWN1 ciA9IGN1clsgZGlyIF07Cgl9IHdoaWxlICggY3VyICYmIGN1ci5ub2RlVHlwZSAh PT0gMSApOwoKCXJldHVybiBjdXI7Cn0KCmpRdWVyeS5lYWNoKHsKCXBhcmVudDog ZnVuY3Rpb24oIGVsZW0gKSB7CgkJdmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9k ZTsKCQlyZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBw YXJlbnQgOiBudWxsOwoJfSwKCXBhcmVudHM6IGZ1bmN0aW9uKCBlbGVtICkgewoJ CXJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAicGFyZW50Tm9kZSIgKTsKCX0sCglw YXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKCQlyZXR1 cm4galF1ZXJ5LmRpciggZWxlbSwgInBhcmVudE5vZGUiLCB1bnRpbCApOwoJfSwK CW5leHQ6IGZ1bmN0aW9uKCBlbGVtICkgewoJCXJldHVybiBzaWJsaW5nKCBlbGVt LCAibmV4dFNpYmxpbmciICk7Cgl9LAoJcHJldjogZnVuY3Rpb24oIGVsZW0gKSB7 CgkJcmV0dXJuIHNpYmxpbmcoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciICk7Cgl9 LAoJbmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7CgkJcmV0dXJuIGpRdWVyeS5k aXIoIGVsZW0sICJuZXh0U2libGluZyIgKTsKCX0sCglwcmV2QWxsOiBmdW5jdGlv biggZWxlbSApIHsKCQlyZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInByZXZpb3Vz U2libGluZyIgKTsKCX0sCgluZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1 bnRpbCApIHsKCQlyZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgIm5leHRTaWJsaW5n IiwgdW50aWwgKTsKCX0sCglwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1 bnRpbCApIHsKCQlyZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInByZXZpb3VzU2li bGluZyIsIHVudGlsICk7Cgl9LAoJc2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkg ewoJCXJldHVybiBqUXVlcnkuc2libGluZyggKCBlbGVtLnBhcmVudE5vZGUgfHwg e30gKS5maXJzdENoaWxkLCBlbGVtICk7Cgl9LAoJY2hpbGRyZW46IGZ1bmN0aW9u KCBlbGVtICkgewoJCXJldHVybiBqUXVlcnkuc2libGluZyggZWxlbS5maXJzdENo aWxkICk7Cgl9LAoJY29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkgewoJCXJldHVy biBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpZnJhbWUiICkgPwoJCQllbGVtLmNv bnRlbnREb2N1bWVudCB8fCBlbGVtLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQgOgoJ CQlqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTsKCX0KfSwgZnVu Y3Rpb24oIG5hbWUsIGZuICkgewoJalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlv biggdW50aWwsIHNlbGVjdG9yICkgewoJCXZhciByZXQgPSBqUXVlcnkubWFwKCB0 aGlzLCBmbiwgdW50aWwgKTsKCgkJaWYgKCBuYW1lLnNsaWNlKCAtNSApICE9PSAi VW50aWwiICkgewoJCQlzZWxlY3RvciA9IHVudGlsOwoJCX0KCgkJaWYgKCBzZWxl Y3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciICkgewoJCQlyZXQg PSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgcmV0ICk7CgkJfQoKCQlpZiAoIHRo aXMubGVuZ3RoID4gMSApIHsKCQkJLy8gUmVtb3ZlIGR1cGxpY2F0ZXMKCQkJaWYg KCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkgewoJCQkJcmV0ID0galF1ZXJ5 LnVuaXF1ZSggcmV0ICk7CgkJCX0KCgkJCS8vIFJldmVyc2Ugb3JkZXIgZm9yIHBh cmVudHMqIGFuZCBwcmV2LWRlcml2YXRpdmVzCgkJCWlmICggcnBhcmVudHNwcmV2 LnRlc3QoIG5hbWUgKSApIHsKCQkJCXJldCA9IHJldC5yZXZlcnNlKCk7CgkJCX0K CQl9CgoJCXJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7Cgl9Owp9KTsKdmFy IHJub3R3aGl0ZSA9ICgvXFMrL2cpOwoKCgovLyBTdHJpbmcgdG8gT2JqZWN0IG9w dGlvbnMgZm9ybWF0IGNhY2hlCnZhciBvcHRpb25zQ2FjaGUgPSB7fTsKCi8vIENv bnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25zIGludG8gT2JqZWN0LWZvcm1h dHRlZCBvbmVzIGFuZCBzdG9yZSBpbiBjYWNoZQpmdW5jdGlvbiBjcmVhdGVPcHRp b25zKCBvcHRpb25zICkgewoJdmFyIG9iamVjdCA9IG9wdGlvbnNDYWNoZVsgb3B0 aW9ucyBdID0ge307CglqUXVlcnkuZWFjaCggb3B0aW9ucy5tYXRjaCggcm5vdHdo aXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkgewoJCW9iamVjdFsgZmxh ZyBdID0gdHJ1ZTsKCX0pOwoJcmV0dXJuIG9iamVjdDsKfQoKLyoKICogQ3JlYXRl IGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6 CiAqCiAqCW9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJh dGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3cKICoJCQl0aGUgY2FsbGJh Y2sgbGlzdCBiZWhhdmVzIG9yIGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2Jq ZWN0CiAqCiAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxp a2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlCiAqICJmaXJlZCIg bXVsdGlwbGUgdGltZXMuCiAqCiAqIFBvc3NpYmxlIG9wdGlvbnM6CiAqCiAqCW9u Y2U6CQkJd2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUg ZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKQogKgogKgltZW1vcnk6CQkJd2ls bCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFu eSBjYWxsYmFjayBhZGRlZAogKgkJCQkJYWZ0ZXIgdGhlIGxpc3QgaGFzIGJlZW4g ZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgIm1lbW9yaXplZCIKICoJ CQkJCXZhbHVlcyAobGlrZSBhIERlZmVycmVkKQogKgogKgl1bmlxdWU6CQkJd2ls bCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBk dXBsaWNhdGUgaW4gdGhlIGxpc3QpCiAqCiAqCXN0b3BPbkZhbHNlOglpbnRlcnJ1 cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2UKICoKICov CmpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHsKCgkvLyBD b252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1m b3JtYXR0ZWQgaWYgbmVlZGVkCgkvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3Qp CglvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09ICJzdHJpbmciID8KCQkoIG9w dGlvbnNDYWNoZVsgb3B0aW9ucyBdIHx8IGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMg KSApIDoKCQlqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0aW9ucyApOwoKCXZhciAvLyBG bGFnIHRvIGtub3cgaWYgbGlzdCBpcyBjdXJyZW50bHkgZmlyaW5nCgkJZmlyaW5n LAoJCS8vIExhc3QgZmlyZSB2YWx1ZSAoZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0 cykKCQltZW1vcnksCgkJLy8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVh ZHkgZmlyZWQKCQlmaXJlZCwKCQkvLyBFbmQgb2YgdGhlIGxvb3Agd2hlbiBmaXJp bmcKCQlmaXJpbmdMZW5ndGgsCgkJLy8gSW5kZXggb2YgY3VycmVudGx5IGZpcmlu ZyBjYWxsYmFjayAobW9kaWZpZWQgYnkgcmVtb3ZlIGlmIG5lZWRlZCkKCQlmaXJp bmdJbmRleCwKCQkvLyBGaXJzdCBjYWxsYmFjayB0byBmaXJlICh1c2VkIGludGVy bmFsbHkgYnkgYWRkIGFuZCBmaXJlV2l0aCkKCQlmaXJpbmdTdGFydCwKCQkvLyBB Y3R1YWwgY2FsbGJhY2sgbGlzdAoJCWxpc3QgPSBbXSwKCQkvLyBTdGFjayBvZiBm aXJlIGNhbGxzIGZvciByZXBlYXRhYmxlIGxpc3RzCgkJc3RhY2sgPSAhb3B0aW9u cy5vbmNlICYmIFtdLAoJCS8vIEZpcmUgY2FsbGJhY2tzCgkJZmlyZSA9IGZ1bmN0 aW9uKCBkYXRhICkgewoJCQltZW1vcnkgPSBvcHRpb25zLm1lbW9yeSAmJiBkYXRh OwoJCQlmaXJlZCA9IHRydWU7CgkJCWZpcmluZ0luZGV4ID0gZmlyaW5nU3RhcnQg fHwgMDsKCQkJZmlyaW5nU3RhcnQgPSAwOwoJCQlmaXJpbmdMZW5ndGggPSBsaXN0 Lmxlbmd0aDsKCQkJZmlyaW5nID0gdHJ1ZTsKCQkJZm9yICggOyBsaXN0ICYmIGZp cmluZ0luZGV4IDwgZmlyaW5nTGVuZ3RoOyBmaXJpbmdJbmRleCsrICkgewoJCQkJ aWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBkYXRhWyAwIF0sIGRhdGFb IDEgXSApID09PSBmYWxzZSAmJiBvcHRpb25zLnN0b3BPbkZhbHNlICkgewoJCQkJ CW1lbW9yeSA9IGZhbHNlOyAvLyBUbyBwcmV2ZW50IGZ1cnRoZXIgY2FsbHMgdXNp bmcgYWRkCgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJZmlyaW5nID0gZmFsc2U7 CgkJCWlmICggbGlzdCApIHsKCQkJCWlmICggc3RhY2sgKSB7CgkJCQkJaWYgKCBz dGFjay5sZW5ndGggKSB7CgkJCQkJCWZpcmUoIHN0YWNrLnNoaWZ0KCkgKTsKCQkJ CQl9CgkJCQl9IGVsc2UgaWYgKCBtZW1vcnkgKSB7CgkJCQkJbGlzdCA9IFtdOwoJ CQkJfSBlbHNlIHsKCQkJCQlzZWxmLmRpc2FibGUoKTsKCQkJCX0KCQkJfQoJCX0s CgkJLy8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3QKCQlzZWxmID0gewoJCQkvLyBB ZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tzIHRvIHRo ZSBsaXN0CgkJCWFkZDogZnVuY3Rpb24oKSB7CgkJCQlpZiAoIGxpc3QgKSB7CgkJ CQkJLy8gRmlyc3QsIHdlIHNhdmUgdGhlIGN1cnJlbnQgbGVuZ3RoCgkJCQkJdmFy IHN0YXJ0ID0gbGlzdC5sZW5ndGg7CgkJCQkJKGZ1bmN0aW9uIGFkZCggYXJncyAp IHsKCQkJCQkJalF1ZXJ5LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7 CgkJCQkJCQl2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBhcmcgKTsKCQkJCQkJCWlm ICggdHlwZSA9PT0gImZ1bmN0aW9uIiApIHsKCQkJCQkJCQlpZiAoICFvcHRpb25z LnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkgewoJCQkJCQkJCQlsaXN0LnB1 c2goIGFyZyApOwoJCQkJCQkJCX0KCQkJCQkJCX0gZWxzZSBpZiAoIGFyZyAmJiBh cmcubGVuZ3RoICYmIHR5cGUgIT09ICJzdHJpbmciICkgewoJCQkJCQkJCS8vIElu c3BlY3QgcmVjdXJzaXZlbHkKCQkJCQkJCQlhZGQoIGFyZyApOwoJCQkJCQkJfQoJ CQkJCQl9KTsKCQkJCQl9KSggYXJndW1lbnRzICk7CgkJCQkJLy8gRG8gd2UgbmVl ZCB0byBhZGQgdGhlIGNhbGxiYWNrcyB0byB0aGUKCQkJCQkvLyBjdXJyZW50IGZp cmluZyBiYXRjaD8KCQkJCQlpZiAoIGZpcmluZyApIHsKCQkJCQkJZmlyaW5nTGVu Z3RoID0gbGlzdC5sZW5ndGg7CgkJCQkJLy8gV2l0aCBtZW1vcnksIGlmIHdlJ3Jl IG5vdCBmaXJpbmcgdGhlbgoJCQkJCS8vIHdlIHNob3VsZCBjYWxsIHJpZ2h0IGF3 YXkKCQkJCQl9IGVsc2UgaWYgKCBtZW1vcnkgKSB7CgkJCQkJCWZpcmluZ1N0YXJ0 ID0gc3RhcnQ7CgkJCQkJCWZpcmUoIG1lbW9yeSApOwoJCQkJCX0KCQkJCX0KCQkJ CXJldHVybiB0aGlzOwoJCQl9LAoJCQkvLyBSZW1vdmUgYSBjYWxsYmFjayBmcm9t IHRoZSBsaXN0CgkJCXJlbW92ZTogZnVuY3Rpb24oKSB7CgkJCQlpZiAoIGxpc3Qg KSB7CgkJCQkJalF1ZXJ5LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFy ZyApIHsKCQkJCQkJdmFyIGluZGV4OwoJCQkJCQl3aGlsZSAoICggaW5kZXggPSBq UXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSApIHsKCQkJ CQkJCWxpc3Quc3BsaWNlKCBpbmRleCwgMSApOwoJCQkJCQkJLy8gSGFuZGxlIGZp cmluZyBpbmRleGVzCgkJCQkJCQlpZiAoIGZpcmluZyApIHsKCQkJCQkJCQlpZiAo IGluZGV4IDw9IGZpcmluZ0xlbmd0aCApIHsKCQkJCQkJCQkJZmlyaW5nTGVuZ3Ro LS07CgkJCQkJCQkJfQoJCQkJCQkJCWlmICggaW5kZXggPD0gZmlyaW5nSW5kZXgg KSB7CgkJCQkJCQkJCWZpcmluZ0luZGV4LS07CgkJCQkJCQkJfQoJCQkJCQkJfQoJ CQkJCQl9CgkJCQkJfSk7CgkJCQl9CgkJCQlyZXR1cm4gdGhpczsKCQkJfSwKCQkJ Ly8gQ2hlY2sgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdC4KCQkJ Ly8gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHJldHVybiB3aGV0aGVyIG9yIG5v dCBsaXN0IGhhcyBjYWxsYmFja3MgYXR0YWNoZWQuCgkJCWhhczogZnVuY3Rpb24o IGZuICkgewoJCQkJcmV0dXJuIGZuID8galF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0 ICkgPiAtMSA6ICEhKCBsaXN0ICYmIGxpc3QubGVuZ3RoICk7CgkJCX0sCgkJCS8v IFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3QKCQkJZW1wdHk6IGZ1 bmN0aW9uKCkgewoJCQkJbGlzdCA9IFtdOwoJCQkJZmlyaW5nTGVuZ3RoID0gMDsK CQkJCXJldHVybiB0aGlzOwoJCQl9LAoJCQkvLyBIYXZlIHRoZSBsaXN0IGRvIG5v dGhpbmcgYW55bW9yZQoJCQlkaXNhYmxlOiBmdW5jdGlvbigpIHsKCQkJCWxpc3Qg PSBzdGFjayA9IG1lbW9yeSA9IHVuZGVmaW5lZDsKCQkJCXJldHVybiB0aGlzOwoJ CQl9LAoJCQkvLyBJcyBpdCBkaXNhYmxlZD8KCQkJZGlzYWJsZWQ6IGZ1bmN0aW9u KCkgewoJCQkJcmV0dXJuICFsaXN0OwoJCQl9LAoJCQkvLyBMb2NrIHRoZSBsaXN0 IGluIGl0cyBjdXJyZW50IHN0YXRlCgkJCWxvY2s6IGZ1bmN0aW9uKCkgewoJCQkJ c3RhY2sgPSB1bmRlZmluZWQ7CgkJCQlpZiAoICFtZW1vcnkgKSB7CgkJCQkJc2Vs Zi5kaXNhYmxlKCk7CgkJCQl9CgkJCQlyZXR1cm4gdGhpczsKCQkJfSwKCQkJLy8g SXMgaXQgbG9ja2VkPwoJCQlsb2NrZWQ6IGZ1bmN0aW9uKCkgewoJCQkJcmV0dXJu ICFzdGFjazsKCQkJfSwKCQkJLy8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhl IGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50cwoJCQlmaXJlV2l0aDogZnVuY3Rp b24oIGNvbnRleHQsIGFyZ3MgKSB7CgkJCQlpZiAoIGxpc3QgJiYgKCAhZmlyZWQg fHwgc3RhY2sgKSApIHsKCQkJCQlhcmdzID0gYXJncyB8fCBbXTsKCQkJCQlhcmdz ID0gWyBjb250ZXh0LCBhcmdzLnNsaWNlID8gYXJncy5zbGljZSgpIDogYXJncyBd OwoJCQkJCWlmICggZmlyaW5nICkgewoJCQkJCQlzdGFjay5wdXNoKCBhcmdzICk7 CgkJCQkJfSBlbHNlIHsKCQkJCQkJZmlyZSggYXJncyApOwoJCQkJCX0KCQkJCX0K CQkJCXJldHVybiB0aGlzOwoJCQl9LAoJCQkvLyBDYWxsIGFsbCB0aGUgY2FsbGJh Y2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cwoJCQlmaXJlOiBmdW5jdGlvbigp IHsKCQkJCXNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApOwoJCQkJcmV0 dXJuIHRoaXM7CgkJCX0sCgkJCS8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBo YXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZQoJCQlmaXJlZDog ZnVuY3Rpb24oKSB7CgkJCQlyZXR1cm4gISFmaXJlZDsKCQkJfQoJCX07CgoJcmV0 dXJuIHNlbGY7Cn07CgoKalF1ZXJ5LmV4dGVuZCh7CgoJRGVmZXJyZWQ6IGZ1bmN0 aW9uKCBmdW5jICkgewoJCXZhciB0dXBsZXMgPSBbCgkJCQkvLyBhY3Rpb24sIGFk ZCBsaXN0ZW5lciwgbGlzdGVuZXIgbGlzdCwgZmluYWwgc3RhdGUKCQkJCVsgInJl c29sdmUiLCAiZG9uZSIsIGpRdWVyeS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iiks ICJyZXNvbHZlZCIgXSwKCQkJCVsgInJlamVjdCIsICJmYWlsIiwgalF1ZXJ5LkNh bGxiYWNrcygib25jZSBtZW1vcnkiKSwgInJlamVjdGVkIiBdLAoJCQkJWyAibm90 aWZ5IiwgInByb2dyZXNzIiwgalF1ZXJ5LkNhbGxiYWNrcygibWVtb3J5IikgXQoJ CQldLAoJCQlzdGF0ZSA9ICJwZW5kaW5nIiwKCQkJcHJvbWlzZSA9IHsKCQkJCXN0 YXRlOiBmdW5jdGlvbigpIHsKCQkJCQlyZXR1cm4gc3RhdGU7CgkJCQl9LAoJCQkJ YWx3YXlzOiBmdW5jdGlvbigpIHsKCQkJCQlkZWZlcnJlZC5kb25lKCBhcmd1bWVu dHMgKS5mYWlsKCBhcmd1bWVudHMgKTsKCQkJCQlyZXR1cm4gdGhpczsKCQkJCX0s CgkJCQl0aGVuOiBmdW5jdGlvbiggLyogZm5Eb25lLCBmbkZhaWwsIGZuUHJvZ3Jl c3MgKi8gKSB7CgkJCQkJdmFyIGZucyA9IGFyZ3VtZW50czsKCQkJCQlyZXR1cm4g alF1ZXJ5LkRlZmVycmVkKGZ1bmN0aW9uKCBuZXdEZWZlciApIHsKCQkJCQkJalF1 ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkgewoJCQkJCQkJ dmFyIGZuID0galF1ZXJ5LmlzRnVuY3Rpb24oIGZuc1sgaSBdICkgJiYgZm5zWyBp IF07CgkJCQkJCQkvLyBkZWZlcnJlZFsgZG9uZSB8IGZhaWwgfCBwcm9ncmVzcyBd IGZvciBmb3J3YXJkaW5nIGFjdGlvbnMgdG8gbmV3RGVmZXIKCQkJCQkJCWRlZmVy cmVkWyB0dXBsZVsxXSBdKGZ1bmN0aW9uKCkgewoJCQkJCQkJCXZhciByZXR1cm5l ZCA9IGZuICYmIGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKCQkJCQkJCQlp ZiAoIHJldHVybmVkICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9t aXNlICkgKSB7CgkJCQkJCQkJCXJldHVybmVkLnByb21pc2UoKQoJCQkJCQkJCQkJ LmRvbmUoIG5ld0RlZmVyLnJlc29sdmUgKQoJCQkJCQkJCQkJLmZhaWwoIG5ld0Rl ZmVyLnJlamVjdCApCgkJCQkJCQkJCQkucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlm eSApOwoJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCW5ld0RlZmVyWyB0dXBsZVsg MCBdICsgIldpdGgiIF0oIHRoaXMgPT09IHByb21pc2UgPyBuZXdEZWZlci5wcm9t aXNlKCkgOiB0aGlzLCBmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50cyApOwoJ CQkJCQkJCX0KCQkJCQkJCX0pOwoJCQkJCQl9KTsKCQkJCQkJZm5zID0gbnVsbDsK CQkJCQl9KS5wcm9taXNlKCk7CgkJCQl9LAoJCQkJLy8gR2V0IGEgcHJvbWlzZSBm b3IgdGhpcyBkZWZlcnJlZAoJCQkJLy8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUg cHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdAoJCQkJcHJvbWlz ZTogZnVuY3Rpb24oIG9iaiApIHsKCQkJCQlyZXR1cm4gb2JqICE9IG51bGwgPyBq UXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7CgkJCQl9CgkJ CX0sCgkJCWRlZmVycmVkID0ge307CgoJCS8vIEtlZXAgcGlwZSBmb3IgYmFjay1j b21wYXQKCQlwcm9taXNlLnBpcGUgPSBwcm9taXNlLnRoZW47CgoJCS8vIEFkZCBs aXN0LXNwZWNpZmljIG1ldGhvZHMKCQlqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5j dGlvbiggaSwgdHVwbGUgKSB7CgkJCXZhciBsaXN0ID0gdHVwbGVbIDIgXSwKCQkJ CXN0YXRlU3RyaW5nID0gdHVwbGVbIDMgXTsKCgkJCS8vIHByb21pc2VbIGRvbmUg fCBmYWlsIHwgcHJvZ3Jlc3MgXSA9IGxpc3QuYWRkCgkJCXByb21pc2VbIHR1cGxl WzFdIF0gPSBsaXN0LmFkZDsKCgkJCS8vIEhhbmRsZSBzdGF0ZQoJCQlpZiAoIHN0 YXRlU3RyaW5nICkgewoJCQkJbGlzdC5hZGQoZnVuY3Rpb24oKSB7CgkJCQkJLy8g c3RhdGUgPSBbIHJlc29sdmVkIHwgcmVqZWN0ZWQgXQoJCQkJCXN0YXRlID0gc3Rh dGVTdHJpbmc7CgoJCQkJLy8gWyByZWplY3RfbGlzdCB8IHJlc29sdmVfbGlzdCBd LmRpc2FibGU7IHByb2dyZXNzX2xpc3QubG9jawoJCQkJfSwgdHVwbGVzWyBpIF4g MSBdWyAyIF0uZGlzYWJsZSwgdHVwbGVzWyAyIF1bIDIgXS5sb2NrICk7CgkJCX0K CgkJCS8vIGRlZmVycmVkWyByZXNvbHZlIHwgcmVqZWN0IHwgbm90aWZ5IF0KCQkJ ZGVmZXJyZWRbIHR1cGxlWzBdIF0gPSBmdW5jdGlvbigpIHsKCQkJCWRlZmVycmVk WyB0dXBsZVswXSArICJXaXRoIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHByb21p c2UgOiB0aGlzLCBhcmd1bWVudHMgKTsKCQkJCXJldHVybiB0aGlzOwoJCQl9OwoJ CQlkZWZlcnJlZFsgdHVwbGVbMF0gKyAiV2l0aCIgXSA9IGxpc3QuZmlyZVdpdGg7 CgkJfSk7CgoJCS8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZQoJCXByb21p c2UucHJvbWlzZSggZGVmZXJyZWQgKTsKCgkJLy8gQ2FsbCBnaXZlbiBmdW5jIGlm IGFueQoJCWlmICggZnVuYyApIHsKCQkJZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVm ZXJyZWQgKTsKCQl9CgoJCS8vIEFsbCBkb25lIQoJCXJldHVybiBkZWZlcnJlZDsK CX0sCgoJLy8gRGVmZXJyZWQgaGVscGVyCgl3aGVuOiBmdW5jdGlvbiggc3Vib3Jk aW5hdGUgLyogLCAuLi4sIHN1Ym9yZGluYXRlTiAqLyApIHsKCQl2YXIgaSA9IDAs CgkJCXJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSwKCQkJ bGVuZ3RoID0gcmVzb2x2ZVZhbHVlcy5sZW5ndGgsCgoJCQkvLyB0aGUgY291bnQg b2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzCgkJCXJlbWFpbmluZyA9IGxlbmd0 aCAhPT0gMSB8fCAoIHN1Ym9yZGluYXRlICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBz dWJvcmRpbmF0ZS5wcm9taXNlICkgKSA/IGxlbmd0aCA6IDAsCgoJCQkvLyB0aGUg bWFzdGVyIERlZmVycmVkLiBJZiByZXNvbHZlVmFsdWVzIGNvbnNpc3Qgb2Ygb25s eSBhIHNpbmdsZSBEZWZlcnJlZCwganVzdCB1c2UgdGhhdC4KCQkJZGVmZXJyZWQg PSByZW1haW5pbmcgPT09IDEgPyBzdWJvcmRpbmF0ZSA6IGpRdWVyeS5EZWZlcnJl ZCgpLAoKCQkJLy8gVXBkYXRlIGZ1bmN0aW9uIGZvciBib3RoIHJlc29sdmUgYW5k IHByb2dyZXNzIHZhbHVlcwoJCQl1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGksIGNv bnRleHRzLCB2YWx1ZXMgKSB7CgkJCQlyZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkg ewoJCQkJCWNvbnRleHRzWyBpIF0gPSB0aGlzOwoJCQkJCXZhbHVlc1sgaSBdID0g YXJndW1lbnRzLmxlbmd0aCA+IDEgPyBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSA6 IHZhbHVlOwoJCQkJCWlmICggdmFsdWVzID09PSBwcm9ncmVzc1ZhbHVlcyApIHsK CQkJCQkJZGVmZXJyZWQubm90aWZ5V2l0aCggY29udGV4dHMsIHZhbHVlcyApOwoK CQkJCQl9IGVsc2UgaWYgKCAhKC0tcmVtYWluaW5nKSApIHsKCQkJCQkJZGVmZXJy ZWQucmVzb2x2ZVdpdGgoIGNvbnRleHRzLCB2YWx1ZXMgKTsKCQkJCQl9CgkJCQl9 OwoJCQl9LAoKCQkJcHJvZ3Jlc3NWYWx1ZXMsIHByb2dyZXNzQ29udGV4dHMsIHJl c29sdmVDb250ZXh0czsKCgkJLy8gYWRkIGxpc3RlbmVycyB0byBEZWZlcnJlZCBz dWJvcmRpbmF0ZXM7IHRyZWF0IG90aGVycyBhcyByZXNvbHZlZAoJCWlmICggbGVu Z3RoID4gMSApIHsKCQkJcHJvZ3Jlc3NWYWx1ZXMgPSBuZXcgQXJyYXkoIGxlbmd0 aCApOwoJCQlwcm9ncmVzc0NvbnRleHRzID0gbmV3IEFycmF5KCBsZW5ndGggKTsK CQkJcmVzb2x2ZUNvbnRleHRzID0gbmV3IEFycmF5KCBsZW5ndGggKTsKCQkJZm9y ICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CgkJCQlpZiAoIHJlc29sdmVWYWx1ZXNb IGkgXSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdLnBy b21pc2UgKSApIHsKCQkJCQlyZXNvbHZlVmFsdWVzWyBpIF0ucHJvbWlzZSgpCgkJ CQkJCS5kb25lKCB1cGRhdGVGdW5jKCBpLCByZXNvbHZlQ29udGV4dHMsIHJlc29s dmVWYWx1ZXMgKSApCgkJCQkJCS5mYWlsKCBkZWZlcnJlZC5yZWplY3QgKQoJCQkJ CQkucHJvZ3Jlc3MoIHVwZGF0ZUZ1bmMoIGksIHByb2dyZXNzQ29udGV4dHMsIHBy b2dyZXNzVmFsdWVzICkgKTsKCQkJCX0gZWxzZSB7CgkJCQkJLS1yZW1haW5pbmc7 CgkJCQl9CgkJCX0KCQl9CgoJCS8vIGlmIHdlJ3JlIG5vdCB3YWl0aW5nIG9uIGFu eXRoaW5nLCByZXNvbHZlIHRoZSBtYXN0ZXIKCQlpZiAoICFyZW1haW5pbmcgKSB7 CgkJCWRlZmVycmVkLnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29s dmVWYWx1ZXMgKTsKCQl9CgoJCXJldHVybiBkZWZlcnJlZC5wcm9taXNlKCk7Cgl9 Cn0pOwoKCi8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeQp2YXIgcmVh ZHlMaXN0OwoKalF1ZXJ5LmZuLnJlYWR5ID0gZnVuY3Rpb24oIGZuICkgewoJLy8g QWRkIHRoZSBjYWxsYmFjawoJalF1ZXJ5LnJlYWR5LnByb21pc2UoKS5kb25lKCBm biApOwoKCXJldHVybiB0aGlzOwp9OwoKalF1ZXJ5LmV4dGVuZCh7CgkvLyBJcyB0 aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2Nj dXJzLgoJaXNSZWFkeTogZmFsc2UsCgoJLy8gQSBjb3VudGVyIHRvIHRyYWNrIGhv dyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9yZQoJLy8gdGhlIHJlYWR5IGV2 ZW50IGZpcmVzLiBTZWUgIzY3ODEKCXJlYWR5V2FpdDogMSwKCgkvLyBIb2xkIChv ciByZWxlYXNlKSB0aGUgcmVhZHkgZXZlbnQKCWhvbGRSZWFkeTogZnVuY3Rpb24o IGhvbGQgKSB7CgkJaWYgKCBob2xkICkgewoJCQlqUXVlcnkucmVhZHlXYWl0Kys7 CgkJfSBlbHNlIHsKCQkJalF1ZXJ5LnJlYWR5KCB0cnVlICk7CgkJfQoJfSwKCgkv LyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5CglyZWFkeTogZnVuY3Rpb24o IHdhaXQgKSB7CgoJCS8vIEFib3J0IGlmIHRoZXJlIGFyZSBwZW5kaW5nIGhvbGRz IG9yIHdlJ3JlIGFscmVhZHkgcmVhZHkKCQlpZiAoIHdhaXQgPT09IHRydWUgPyAt LWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSApIHsKCQkJcmV0dXJu OwoJCX0KCgkJLy8gTWFrZSBzdXJlIGJvZHkgZXhpc3RzLCBhdCBsZWFzdCwgaW4g Y2FzZSBJRSBnZXRzIGEgbGl0dGxlIG92ZXJ6ZWFsb3VzICh0aWNrZXQgIzU0NDMp LgoJCWlmICggIWRvY3VtZW50LmJvZHkgKSB7CgkJCXJldHVybiBzZXRUaW1lb3V0 KCBqUXVlcnkucmVhZHkgKTsKCQl9CgoJCS8vIFJlbWVtYmVyIHRoYXQgdGhlIERP TSBpcyByZWFkeQoJCWpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTsKCgkJLy8gSWYgYSBu b3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0 IGlmIG5lZWQgYmUKCQlpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVh ZHlXYWl0ID4gMCApIHsKCQkJcmV0dXJuOwoJCX0KCgkJLy8gSWYgdGhlcmUgYXJl IGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZQoJCXJlYWR5TGlzdC5yZXNvbHZl V2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTsKCgkJLy8gVHJpZ2dlciBhbnkg Ym91bmQgcmVhZHkgZXZlbnRzCgkJaWYgKCBqUXVlcnkuZm4udHJpZ2dlciApIHsK CQkJalF1ZXJ5KCBkb2N1bWVudCApLnRyaWdnZXIoInJlYWR5Iikub2ZmKCJyZWFk eSIpOwoJCX0KCX0KfSk7CgovKioKICogQ2xlYW4tdXAgbWV0aG9kIGZvciBkb20g cmVhZHkgZXZlbnRzCiAqLwpmdW5jdGlvbiBkZXRhY2goKSB7CglpZiAoIGRvY3Vt ZW50LmFkZEV2ZW50TGlzdGVuZXIgKSB7CgkJZG9jdW1lbnQucmVtb3ZlRXZlbnRM aXN0ZW5lciggIkRPTUNvbnRlbnRMb2FkZWQiLCBjb21wbGV0ZWQsIGZhbHNlICk7 CgkJd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoICJsb2FkIiwgY29tcGxldGVk LCBmYWxzZSApOwoKCX0gZWxzZSB7CgkJZG9jdW1lbnQuZGV0YWNoRXZlbnQoICJv bnJlYWR5c3RhdGVjaGFuZ2UiLCBjb21wbGV0ZWQgKTsKCQl3aW5kb3cuZGV0YWNo RXZlbnQoICJvbmxvYWQiLCBjb21wbGV0ZWQgKTsKCX0KfQoKLyoqCiAqIFRoZSBy ZWFkeSBldmVudCBoYW5kbGVyIGFuZCBzZWxmIGNsZWFudXAgbWV0aG9kCiAqLwpm dW5jdGlvbiBjb21wbGV0ZWQoKSB7CgkvLyByZWFkeVN0YXRlID09PSAiY29tcGxl dGUiIGlzIGdvb2QgZW5vdWdoIGZvciB1cyB0byBjYWxsIHRoZSBkb20gcmVhZHkg aW4gb2xkSUUKCWlmICggZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciB8fCBldmVu dC50eXBlID09PSAibG9hZCIgfHwgZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNv bXBsZXRlIiApIHsKCQlkZXRhY2goKTsKCQlqUXVlcnkucmVhZHkoKTsKCX0KfQoK alF1ZXJ5LnJlYWR5LnByb21pc2UgPSBmdW5jdGlvbiggb2JqICkgewoJaWYgKCAh cmVhZHlMaXN0ICkgewoKCQlyZWFkeUxpc3QgPSBqUXVlcnkuRGVmZXJyZWQoKTsK CgkJLy8gQ2F0Y2ggY2FzZXMgd2hlcmUgJChkb2N1bWVudCkucmVhZHkoKSBpcyBj YWxsZWQgYWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJy ZWQuCgkJLy8gd2Ugb25jZSB0cmllZCB0byB1c2UgcmVhZHlTdGF0ZSAiaW50ZXJh Y3RpdmUiIGhlcmUsIGJ1dCBpdCBjYXVzZWQgaXNzdWVzIGxpa2UgdGhlIG9uZQoJ CS8vIGRpc2NvdmVyZWQgYnkgQ2hyaXNTIGhlcmU6IGh0dHA6Ly9idWdzLmpxdWVy eS5jb20vdGlja2V0LzEyMjgyI2NvbW1lbnQ6MTUKCQlpZiAoIGRvY3VtZW50LnJl YWR5U3RhdGUgPT09ICJjb21wbGV0ZSIgKSB7CgkJCS8vIEhhbmRsZSBpdCBhc3lu Y2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBk ZWxheSByZWFkeQoJCQlzZXRUaW1lb3V0KCBqUXVlcnkucmVhZHkgKTsKCgkJLy8g U3RhbmRhcmRzLWJhc2VkIGJyb3dzZXJzIHN1cHBvcnQgRE9NQ29udGVudExvYWRl ZAoJCX0gZWxzZSBpZiAoIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgKSB7CgkJ CS8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2sKCQkJZG9jdW1lbnQuYWRk RXZlbnRMaXN0ZW5lciggIkRPTUNvbnRlbnRMb2FkZWQiLCBjb21wbGV0ZWQsIGZh bHNlICk7CgoJCQkvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQg d2lsbCBhbHdheXMgd29yawoJCQl3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggImxv YWQiLCBjb21wbGV0ZWQsIGZhbHNlICk7CgoJCS8vIElmIElFIGV2ZW50IG1vZGVs IGlzIHVzZWQKCQl9IGVsc2UgewoJCQkvLyBFbnN1cmUgZmlyaW5nIGJlZm9yZSBv bmxvYWQsIG1heWJlIGxhdGUgYnV0IHNhZmUgYWxzbyBmb3IgaWZyYW1lcwoJCQlk b2N1bWVudC5hdHRhY2hFdmVudCggIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIGNvbXBs ZXRlZCApOwoKCQkJLy8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0 IHdpbGwgYWx3YXlzIHdvcmsKCQkJd2luZG93LmF0dGFjaEV2ZW50KCAib25sb2Fk IiwgY29tcGxldGVkICk7CgoJCQkvLyBJZiBJRSBhbmQgbm90IGEgZnJhbWUKCQkJ Ly8gY29udGludWFsbHkgY2hlY2sgdG8gc2VlIGlmIHRoZSBkb2N1bWVudCBpcyBy ZWFkeQoJCQl2YXIgdG9wID0gZmFsc2U7CgoJCQl0cnkgewoJCQkJdG9wID0gd2lu ZG93LmZyYW1lRWxlbWVudCA9PSBudWxsICYmIGRvY3VtZW50LmRvY3VtZW50RWxl bWVudDsKCQkJfSBjYXRjaChlKSB7fQoKCQkJaWYgKCB0b3AgJiYgdG9wLmRvU2Ny b2xsICkgewoJCQkJKGZ1bmN0aW9uIGRvU2Nyb2xsQ2hlY2soKSB7CgkJCQkJaWYg KCAhalF1ZXJ5LmlzUmVhZHkgKSB7CgoJCQkJCQl0cnkgewoJCQkJCQkJLy8gVXNl IHRoZSB0cmljayBieSBEaWVnbyBQZXJpbmkKCQkJCQkJCS8vIGh0dHA6Ly9qYXZh c2NyaXB0Lm53Ym94LmNvbS9JRUNvbnRlbnRMb2FkZWQvCgkJCQkJCQl0b3AuZG9T Y3JvbGwoImxlZnQiKTsKCQkJCQkJfSBjYXRjaChlKSB7CgkJCQkJCQlyZXR1cm4g c2V0VGltZW91dCggZG9TY3JvbGxDaGVjaywgNTAgKTsKCQkJCQkJfQoKCQkJCQkJ Ly8gZGV0YWNoIGFsbCBkb20gcmVhZHkgZXZlbnRzCgkJCQkJCWRldGFjaCgpOwoK CQkJCQkJLy8gYW5kIGV4ZWN1dGUgYW55IHdhaXRpbmcgZnVuY3Rpb25zCgkJCQkJ CWpRdWVyeS5yZWFkeSgpOwoJCQkJCX0KCQkJCX0pKCk7CgkJCX0KCQl9Cgl9Cgly ZXR1cm4gcmVhZHlMaXN0LnByb21pc2UoIG9iaiApOwp9OwoKCnZhciBzdHJ1bmRl ZmluZWQgPSB0eXBlb2YgdW5kZWZpbmVkOwoKCgovLyBTdXBwb3J0OiBJRTw5Ci8v IEl0ZXJhdGlvbiBvdmVyIG9iamVjdCdzIGluaGVyaXRlZCBwcm9wZXJ0aWVzIGJl Zm9yZSBpdHMgb3duCnZhciBpOwpmb3IgKCBpIGluIGpRdWVyeSggc3VwcG9ydCAp ICkgewoJYnJlYWs7Cn0Kc3VwcG9ydC5vd25MYXN0ID0gaSAhPT0gIjAiOwoKLy8g Tm90ZTogbW9zdCBzdXBwb3J0IHRlc3RzIGFyZSBkZWZpbmVkIGluIHRoZWlyIHJl c3BlY3RpdmUgbW9kdWxlcy4KLy8gZmFsc2UgdW50aWwgdGhlIHRlc3QgaXMgcnVu CnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dCA9IGZhbHNlOwoKalF1ZXJ5 KGZ1bmN0aW9uKCkgewoJLy8gV2UgbmVlZCB0byBleGVjdXRlIHRoaXMgb25lIHN1 cHBvcnQgdGVzdCBBU0FQIGJlY2F1c2Ugd2UgbmVlZCB0byBrbm93CgkvLyBpZiBi b2R5LnN0eWxlLnpvb20gbmVlZHMgdG8gYmUgc2V0LgoKCXZhciBjb250YWluZXIs IGRpdiwKCQlib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJv ZHkiKVswXTsKCglpZiAoICFib2R5ICkgewoJCS8vIFJldHVybiBmb3IgZnJhbWVz ZXQgZG9jcyB0aGF0IGRvbid0IGhhdmUgYSBib2R5CgkJcmV0dXJuOwoJfQoKCS8v IFNldHVwCgljb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2 IiApOwoJY29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSAiYm9yZGVyOjA7d2lkdGg6 MDtoZWlnaHQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0Oi05OTk5cHg7 bWFyZ2luLXRvcDoxcHgiOwoKCWRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo ICJkaXYiICk7Cglib2R5LmFwcGVuZENoaWxkKCBjb250YWluZXIgKS5hcHBlbmRD aGlsZCggZGl2ICk7CgoJaWYgKCB0eXBlb2YgZGl2LnN0eWxlLnpvb20gIT09IHN0 cnVuZGVmaW5lZCApIHsKCQkvLyBTdXBwb3J0OiBJRTw4CgkJLy8gQ2hlY2sgaWYg bmF0aXZlbHkgYmxvY2stbGV2ZWwgZWxlbWVudHMgYWN0IGxpa2UgaW5saW5lLWJs b2NrCgkJLy8gZWxlbWVudHMgd2hlbiBzZXR0aW5nIHRoZWlyIGRpc3BsYXkgdG8g J2lubGluZScgYW5kIGdpdmluZwoJCS8vIHRoZW0gbGF5b3V0CgkJZGl2LnN0eWxl LmNzc1RleHQgPSAiYm9yZGVyOjA7bWFyZ2luOjA7d2lkdGg6MXB4O3BhZGRpbmc6 MXB4O2Rpc3BsYXk6aW5saW5lO3pvb206MSI7CgoJCWlmICggKHN1cHBvcnQuaW5s aW5lQmxvY2tOZWVkc0xheW91dCA9ICggZGl2Lm9mZnNldFdpZHRoID09PSAzICkp ICkgewoJCQkvLyBQcmV2ZW50IElFIDYgZnJvbSBhZmZlY3RpbmcgbGF5b3V0IGZv ciBwb3NpdGlvbmVkIGVsZW1lbnRzICMxMTA0OAoJCQkvLyBQcmV2ZW50IElFIGZy b20gc2hyaW5raW5nIHRoZSBib2R5IGluIElFIDcgbW9kZSAjMTI4NjkKCQkJLy8g U3VwcG9ydDogSUU8OAoJCQlib2R5LnN0eWxlLnpvb20gPSAxOwoJCX0KCX0KCgli b2R5LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTsKCgkvLyBOdWxsIGVsZW1lbnRz IHRvIGF2b2lkIGxlYWtzIGluIElFCgljb250YWluZXIgPSBkaXYgPSBudWxsOwp9 KTsKCgoKCihmdW5jdGlvbigpIHsKCXZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVF bGVtZW50KCAiZGl2IiApOwoKCS8vIEV4ZWN1dGUgdGhlIHRlc3Qgb25seSBpZiBu b3QgYWxyZWFkeSBleGVjdXRlZCBpbiBhbm90aGVyIG1vZHVsZS4KCWlmIChzdXBw b3J0LmRlbGV0ZUV4cGFuZG8gPT0gbnVsbCkgewoJCS8vIFN1cHBvcnQ6IElFPDkK CQlzdXBwb3J0LmRlbGV0ZUV4cGFuZG8gPSB0cnVlOwoJCXRyeSB7CgkJCWRlbGV0 ZSBkaXYudGVzdDsKCQl9IGNhdGNoKCBlICkgewoJCQlzdXBwb3J0LmRlbGV0ZUV4 cGFuZG8gPSBmYWxzZTsKCQl9Cgl9CgoJLy8gTnVsbCBlbGVtZW50cyB0byBhdm9p ZCBsZWFrcyBpbiBJRS4KCWRpdiA9IG51bGw7Cn0pKCk7CgoKLyoqCiAqIERldGVy bWluZXMgd2hldGhlciBhbiBvYmplY3QgY2FuIGhhdmUgZGF0YQogKi8KalF1ZXJ5 LmFjY2VwdERhdGEgPSBmdW5jdGlvbiggZWxlbSApIHsKCXZhciBub0RhdGEgPSBq UXVlcnkubm9EYXRhWyAoZWxlbS5ub2RlTmFtZSArICIgIikudG9Mb3dlckNhc2Uo KSBdLAoJCW5vZGVUeXBlID0gK2VsZW0ubm9kZVR5cGUgfHwgMTsKCgkvLyBEbyBu b3Qgc2V0IGRhdGEgb24gbm9uLWVsZW1lbnQgRE9NIG5vZGVzIGJlY2F1c2UgaXQg d2lsbCBub3QgYmUgY2xlYXJlZCAoIzgzMzUpLgoJcmV0dXJuIG5vZGVUeXBlICE9 PSAxICYmIG5vZGVUeXBlICE9PSA5ID8KCQlmYWxzZSA6CgoJCS8vIE5vZGVzIGFj Y2VwdCBkYXRhIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkOyByZWplY3Rpb24g Y2FuIGJlIGNvbmRpdGlvbmFsCgkJIW5vRGF0YSB8fCBub0RhdGEgIT09IHRydWUg JiYgZWxlbS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKSA9PT0gbm9EYXRhOwp9OwoK CnZhciByYnJhY2UgPSAvXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLAoJ cm11bHRpRGFzaCA9IC8oW0EtWl0pL2c7CgpmdW5jdGlvbiBkYXRhQXR0ciggZWxl bSwga2V5LCBkYXRhICkgewoJLy8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJu YWxseSwgdHJ5IHRvIGZldGNoIGFueQoJLy8gZGF0YSBmcm9tIHRoZSBIVE1MNSBk YXRhLSogYXR0cmlidXRlCglpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVt Lm5vZGVUeXBlID09PSAxICkgewoKCQl2YXIgbmFtZSA9ICJkYXRhLSIgKyBrZXku cmVwbGFjZSggcm11bHRpRGFzaCwgIi0kMSIgKS50b0xvd2VyQ2FzZSgpOwoKCQlk YXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTsKCgkJaWYgKCB0eXBlb2Yg ZGF0YSA9PT0gInN0cmluZyIgKSB7CgkJCXRyeSB7CgkJCQlkYXRhID0gZGF0YSA9 PT0gInRydWUiID8gdHJ1ZSA6CgkJCQkJZGF0YSA9PT0gImZhbHNlIiA/IGZhbHNl IDoKCQkJCQlkYXRhID09PSAibnVsbCIgPyBudWxsIDoKCQkJCQkvLyBPbmx5IGNv bnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmlu ZwoJCQkJCStkYXRhICsgIiIgPT09IGRhdGEgPyArZGF0YSA6CgkJCQkJcmJyYWNl LnRlc3QoIGRhdGEgKSA/IGpRdWVyeS5wYXJzZUpTT04oIGRhdGEgKSA6CgkJCQkJ ZGF0YTsKCQkJfSBjYXRjaCggZSApIHt9CgoJCQkvLyBNYWtlIHN1cmUgd2Ugc2V0 IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNoYW5nZWQgbGF0ZXIKCQkJalF1ZXJ5LmRh dGEoIGVsZW0sIGtleSwgZGF0YSApOwoKCQl9IGVsc2UgewoJCQlkYXRhID0gdW5k ZWZpbmVkOwoJCX0KCX0KCglyZXR1cm4gZGF0YTsKfQoKLy8gY2hlY2tzIGEgY2Fj aGUgb2JqZWN0IGZvciBlbXB0aW5lc3MKZnVuY3Rpb24gaXNFbXB0eURhdGFPYmpl Y3QoIG9iaiApIHsKCXZhciBuYW1lOwoJZm9yICggbmFtZSBpbiBvYmogKSB7CgoJ CS8vIGlmIHRoZSBwdWJsaWMgZGF0YSBvYmplY3QgaXMgZW1wdHksIHRoZSBwcml2 YXRlIGlzIHN0aWxsIGVtcHR5CgkJaWYgKCBuYW1lID09PSAiZGF0YSIgJiYgalF1 ZXJ5LmlzRW1wdHlPYmplY3QoIG9ialtuYW1lXSApICkgewoJCQljb250aW51ZTsK CQl9CgkJaWYgKCBuYW1lICE9PSAidG9KU09OIiApIHsKCQkJcmV0dXJuIGZhbHNl OwoJCX0KCX0KCglyZXR1cm4gdHJ1ZTsKfQoKZnVuY3Rpb24gaW50ZXJuYWxEYXRh KCBlbGVtLCBuYW1lLCBkYXRhLCBwdnQgLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8g KSB7CglpZiAoICFqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkgewoJCXJldHVy bjsKCX0KCgl2YXIgcmV0LCB0aGlzQ2FjaGUsCgkJaW50ZXJuYWxLZXkgPSBqUXVl cnkuZXhwYW5kbywKCgkJLy8gV2UgaGF2ZSB0byBoYW5kbGUgRE9NIG5vZGVzIGFu ZCBKUyBvYmplY3RzIGRpZmZlcmVudGx5IGJlY2F1c2UgSUU2LTcKCQkvLyBjYW4n dCBHQyBvYmplY3QgcmVmZXJlbmNlcyBwcm9wZXJseSBhY3Jvc3MgdGhlIERPTS1K UyBib3VuZGFyeQoJCWlzTm9kZSA9IGVsZW0ubm9kZVR5cGUsCgoJCS8vIE9ubHkg RE9NIG5vZGVzIG5lZWQgdGhlIGdsb2JhbCBqUXVlcnkgY2FjaGU7IEpTIG9iamVj dCBkYXRhIGlzCgkJLy8gYXR0YWNoZWQgZGlyZWN0bHkgdG8gdGhlIG9iamVjdCBz byBHQyBjYW4gb2NjdXIgYXV0b21hdGljYWxseQoJCWNhY2hlID0gaXNOb2RlID8g alF1ZXJ5LmNhY2hlIDogZWxlbSwKCgkJLy8gT25seSBkZWZpbmluZyBhbiBJRCBm b3IgSlMgb2JqZWN0cyBpZiBpdHMgY2FjaGUgYWxyZWFkeSBleGlzdHMgYWxsb3dz CgkJLy8gdGhlIGNvZGUgdG8gc2hvcnRjdXQgb24gdGhlIHNhbWUgcGF0aCBhcyBh IERPTSBub2RlIHdpdGggbm8gY2FjaGUKCQlpZCA9IGlzTm9kZSA/IGVsZW1bIGlu dGVybmFsS2V5IF0gOiBlbGVtWyBpbnRlcm5hbEtleSBdICYmIGludGVybmFsS2V5 OwoKCS8vIEF2b2lkIGRvaW5nIGFueSBtb3JlIHdvcmsgdGhhbiB3ZSBuZWVkIHRv IHdoZW4gdHJ5aW5nIHRvIGdldCBkYXRhIG9uIGFuCgkvLyBvYmplY3QgdGhhdCBo YXMgbm8gZGF0YSBhdCBhbGwKCWlmICggKCFpZCB8fCAhY2FjaGVbaWRdIHx8ICgh cHZ0ICYmICFjYWNoZVtpZF0uZGF0YSkpICYmIGRhdGEgPT09IHVuZGVmaW5lZCAm JiB0eXBlb2YgbmFtZSA9PT0gInN0cmluZyIgKSB7CgkJcmV0dXJuOwoJfQoKCWlm ICggIWlkICkgewoJCS8vIE9ubHkgRE9NIG5vZGVzIG5lZWQgYSBuZXcgdW5pcXVl IElEIGZvciBlYWNoIGVsZW1lbnQgc2luY2UgdGhlaXIgZGF0YQoJCS8vIGVuZHMg dXAgaW4gdGhlIGdsb2JhbCBjYWNoZQoJCWlmICggaXNOb2RlICkgewoJCQlpZCA9 IGVsZW1bIGludGVybmFsS2V5IF0gPSBkZWxldGVkSWRzLnBvcCgpIHx8IGpRdWVy eS5ndWlkKys7CgkJfSBlbHNlIHsKCQkJaWQgPSBpbnRlcm5hbEtleTsKCQl9Cgl9 CgoJaWYgKCAhY2FjaGVbIGlkIF0gKSB7CgkJLy8gQXZvaWQgZXhwb3NpbmcgalF1 ZXJ5IG1ldGFkYXRhIG9uIHBsYWluIEpTIG9iamVjdHMgd2hlbiB0aGUgb2JqZWN0 CgkJLy8gaXMgc2VyaWFsaXplZCB1c2luZyBKU09OLnN0cmluZ2lmeQoJCWNhY2hl WyBpZCBdID0gaXNOb2RlID8ge30gOiB7IHRvSlNPTjogalF1ZXJ5Lm5vb3AgfTsK CX0KCgkvLyBBbiBvYmplY3QgY2FuIGJlIHBhc3NlZCB0byBqUXVlcnkuZGF0YSBp bnN0ZWFkIG9mIGEga2V5L3ZhbHVlIHBhaXI7IHRoaXMgZ2V0cwoJLy8gc2hhbGxv dyBjb3BpZWQgb3ZlciBvbnRvIHRoZSBleGlzdGluZyBjYWNoZQoJaWYgKCB0eXBl b2YgbmFtZSA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIG5hbWUgPT09ICJmdW5jdGlv biIgKSB7CgkJaWYgKCBwdnQgKSB7CgkJCWNhY2hlWyBpZCBdID0galF1ZXJ5LmV4 dGVuZCggY2FjaGVbIGlkIF0sIG5hbWUgKTsKCQl9IGVsc2UgewoJCQljYWNoZVsg aWQgXS5kYXRhID0galF1ZXJ5LmV4dGVuZCggY2FjaGVbIGlkIF0uZGF0YSwgbmFt ZSApOwoJCX0KCX0KCgl0aGlzQ2FjaGUgPSBjYWNoZVsgaWQgXTsKCgkvLyBqUXVl cnkgZGF0YSgpIGlzIHN0b3JlZCBpbiBhIHNlcGFyYXRlIG9iamVjdCBpbnNpZGUg dGhlIG9iamVjdCdzIGludGVybmFsIGRhdGEKCS8vIGNhY2hlIGluIG9yZGVyIHRv IGF2b2lkIGtleSBjb2xsaXNpb25zIGJldHdlZW4gaW50ZXJuYWwgZGF0YSBhbmQg dXNlci1kZWZpbmVkCgkvLyBkYXRhLgoJaWYgKCAhcHZ0ICkgewoJCWlmICggIXRo aXNDYWNoZS5kYXRhICkgewoJCQl0aGlzQ2FjaGUuZGF0YSA9IHt9OwoJCX0KCgkJ dGhpc0NhY2hlID0gdGhpc0NhY2hlLmRhdGE7Cgl9CgoJaWYgKCBkYXRhICE9PSB1 bmRlZmluZWQgKSB7CgkJdGhpc0NhY2hlWyBqUXVlcnkuY2FtZWxDYXNlKCBuYW1l ICkgXSA9IGRhdGE7Cgl9CgoJLy8gQ2hlY2sgZm9yIGJvdGggY29udmVydGVkLXRv LWNhbWVsIGFuZCBub24tY29udmVydGVkIGRhdGEgcHJvcGVydHkgbmFtZXMKCS8v IElmIGEgZGF0YSBwcm9wZXJ0eSB3YXMgc3BlY2lmaWVkCglpZiAoIHR5cGVvZiBu YW1lID09PSAic3RyaW5nIiApIHsKCgkJLy8gRmlyc3QgVHJ5IHRvIGZpbmQgYXMt aXMgcHJvcGVydHkgZGF0YQoJCXJldCA9IHRoaXNDYWNoZVsgbmFtZSBdOwoKCQkv LyBUZXN0IGZvciBudWxsfHVuZGVmaW5lZCBwcm9wZXJ0eSBkYXRhCgkJaWYgKCBy ZXQgPT0gbnVsbCApIHsKCgkJCS8vIFRyeSB0byBmaW5kIHRoZSBjYW1lbENhc2Vk IHByb3BlcnR5CgkJCXJldCA9IHRoaXNDYWNoZVsgalF1ZXJ5LmNhbWVsQ2FzZSgg bmFtZSApIF07CgkJfQoJfSBlbHNlIHsKCQlyZXQgPSB0aGlzQ2FjaGU7Cgl9CgoJ cmV0dXJuIHJldDsKfQoKZnVuY3Rpb24gaW50ZXJuYWxSZW1vdmVEYXRhKCBlbGVt LCBuYW1lLCBwdnQgKSB7CglpZiAoICFqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSAp ICkgewoJCXJldHVybjsKCX0KCgl2YXIgdGhpc0NhY2hlLCBpLAoJCWlzTm9kZSA9 IGVsZW0ubm9kZVR5cGUsCgoJCS8vIFNlZSBqUXVlcnkuZGF0YSBmb3IgbW9yZSBp bmZvcm1hdGlvbgoJCWNhY2hlID0gaXNOb2RlID8galF1ZXJ5LmNhY2hlIDogZWxl bSwKCQlpZCA9IGlzTm9kZSA/IGVsZW1bIGpRdWVyeS5leHBhbmRvIF0gOiBqUXVl cnkuZXhwYW5kbzsKCgkvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IG5vIGNhY2hlIGVu dHJ5IGZvciB0aGlzIG9iamVjdCwgdGhlcmUgaXMgbm8KCS8vIHB1cnBvc2UgaW4g Y29udGludWluZwoJaWYgKCAhY2FjaGVbIGlkIF0gKSB7CgkJcmV0dXJuOwoJfQoK CWlmICggbmFtZSApIHsKCgkJdGhpc0NhY2hlID0gcHZ0ID8gY2FjaGVbIGlkIF0g OiBjYWNoZVsgaWQgXS5kYXRhOwoKCQlpZiAoIHRoaXNDYWNoZSApIHsKCgkJCS8v IFN1cHBvcnQgYXJyYXkgb3Igc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBuYW1lcyBm b3IgZGF0YSBrZXlzCgkJCWlmICggIWpRdWVyeS5pc0FycmF5KCBuYW1lICkgKSB7 CgoJCQkJLy8gdHJ5IHRoZSBzdHJpbmcgYXMgYSBrZXkgYmVmb3JlIGFueSBtYW5p cHVsYXRpb24KCQkJCWlmICggbmFtZSBpbiB0aGlzQ2FjaGUgKSB7CgkJCQkJbmFt ZSA9IFsgbmFtZSBdOwoJCQkJfSBlbHNlIHsKCgkJCQkJLy8gc3BsaXQgdGhlIGNh bWVsIGNhc2VkIHZlcnNpb24gYnkgc3BhY2VzIHVubGVzcyBhIGtleSB3aXRoIHRo ZSBzcGFjZXMgZXhpc3RzCgkJCQkJbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5h bWUgKTsKCQkJCQlpZiAoIG5hbWUgaW4gdGhpc0NhY2hlICkgewoJCQkJCQluYW1l ID0gWyBuYW1lIF07CgkJCQkJfSBlbHNlIHsKCQkJCQkJbmFtZSA9IG5hbWUuc3Bs aXQoIiAiKTsKCQkJCQl9CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQkvLyBJZiAibmFt ZSIgaXMgYW4gYXJyYXkgb2Yga2V5cy4uLgoJCQkJLy8gV2hlbiBkYXRhIGlzIGlu aXRpYWxseSBjcmVhdGVkLCB2aWEgKCJrZXkiLCAidmFsIikgc2lnbmF0dXJlLAoJ CQkJLy8ga2V5cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBjYW1lbENhc2UuCgkJCQkv LyBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gdGVsbCBfaG93XyBhIGtleSB3YXMg YWRkZWQsIHJlbW92ZQoJCQkJLy8gYm90aCBwbGFpbiBrZXkgYW5kIGNhbWVsQ2Fz ZSBrZXkuICMxMjc4NgoJCQkJLy8gVGhpcyB3aWxsIG9ubHkgcGVuYWxpemUgdGhl IGFycmF5IGFyZ3VtZW50IHBhdGguCgkJCQluYW1lID0gbmFtZS5jb25jYXQoIGpR dWVyeS5tYXAoIG5hbWUsIGpRdWVyeS5jYW1lbENhc2UgKSApOwoJCQl9CgoJCQlp ID0gbmFtZS5sZW5ndGg7CgkJCXdoaWxlICggaS0tICkgewoJCQkJZGVsZXRlIHRo aXNDYWNoZVsgbmFtZVtpXSBdOwoJCQl9CgoJCQkvLyBJZiB0aGVyZSBpcyBubyBk YXRhIGxlZnQgaW4gdGhlIGNhY2hlLCB3ZSB3YW50IHRvIGNvbnRpbnVlCgkJCS8v IGFuZCBsZXQgdGhlIGNhY2hlIG9iamVjdCBpdHNlbGYgZ2V0IGRlc3Ryb3llZAoJ CQlpZiAoIHB2dCA/ICFpc0VtcHR5RGF0YU9iamVjdCh0aGlzQ2FjaGUpIDogIWpR dWVyeS5pc0VtcHR5T2JqZWN0KHRoaXNDYWNoZSkgKSB7CgkJCQlyZXR1cm47CgkJ CX0KCQl9Cgl9CgoJLy8gU2VlIGpRdWVyeS5kYXRhIGZvciBtb3JlIGluZm9ybWF0 aW9uCglpZiAoICFwdnQgKSB7CgkJZGVsZXRlIGNhY2hlWyBpZCBdLmRhdGE7CgoJ CS8vIERvbid0IGRlc3Ryb3kgdGhlIHBhcmVudCBjYWNoZSB1bmxlc3MgdGhlIGlu dGVybmFsIGRhdGEgb2JqZWN0CgkJLy8gaGFkIGJlZW4gdGhlIG9ubHkgdGhpbmcg bGVmdCBpbiBpdAoJCWlmICggIWlzRW1wdHlEYXRhT2JqZWN0KCBjYWNoZVsgaWQg XSApICkgewoJCQlyZXR1cm47CgkJfQoJfQoKCS8vIERlc3Ryb3kgdGhlIGNhY2hl CglpZiAoIGlzTm9kZSApIHsKCQlqUXVlcnkuY2xlYW5EYXRhKCBbIGVsZW0gXSwg dHJ1ZSApOwoKCS8vIFVzZSBkZWxldGUgd2hlbiBzdXBwb3J0ZWQgZm9yIGV4cGFu ZG9zIG9yIGBjYWNoZWAgaXMgbm90IGEgd2luZG93IHBlciBpc1dpbmRvdyAoIzEw MDgwKQoJLyoganNoaW50IGVxZXFlcTogZmFsc2UgKi8KCX0gZWxzZSBpZiAoIHN1 cHBvcnQuZGVsZXRlRXhwYW5kbyB8fCBjYWNoZSAhPSBjYWNoZS53aW5kb3cgKSB7 CgkJLyoganNoaW50IGVxZXFlcTogdHJ1ZSAqLwoJCWRlbGV0ZSBjYWNoZVsgaWQg XTsKCgkvLyBXaGVuIGFsbCBlbHNlIGZhaWxzLCBudWxsCgl9IGVsc2UgewoJCWNh Y2hlWyBpZCBdID0gbnVsbDsKCX0KfQoKalF1ZXJ5LmV4dGVuZCh7CgljYWNoZTog e30sCgoJLy8gVGhlIGZvbGxvd2luZyBlbGVtZW50cyAoc3BhY2Utc3VmZml4ZWQg dG8gYXZvaWQgT2JqZWN0LnByb3RvdHlwZSBjb2xsaXNpb25zKQoJLy8gdGhyb3cg dW5jYXRjaGFibGUgZXhjZXB0aW9ucyBpZiB5b3UgYXR0ZW1wdCB0byBzZXQgZXhw YW5kbyBwcm9wZXJ0aWVzCglub0RhdGE6IHsKCQkiYXBwbGV0ICI6IHRydWUsCgkJ ImVtYmVkICI6IHRydWUsCgkJLy8gLi4uYnV0IEZsYXNoIG9iamVjdHMgKHdoaWNo IGhhdmUgdGhpcyBjbGFzc2lkKSAqY2FuKiBoYW5kbGUgZXhwYW5kb3MKCQkib2Jq ZWN0ICI6ICJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAw MDAiCgl9LAoKCWhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVtICkgewoJCWVsZW0gPSBl bGVtLm5vZGVUeXBlID8galF1ZXJ5LmNhY2hlWyBlbGVtW2pRdWVyeS5leHBhbmRv XSBdIDogZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXTsKCQlyZXR1cm4gISFlbGVtICYm ICFpc0VtcHR5RGF0YU9iamVjdCggZWxlbSApOwoJfSwKCglkYXRhOiBmdW5jdGlv biggZWxlbSwgbmFtZSwgZGF0YSApIHsKCQlyZXR1cm4gaW50ZXJuYWxEYXRhKCBl bGVtLCBuYW1lLCBkYXRhICk7Cgl9LAoKCXJlbW92ZURhdGE6IGZ1bmN0aW9uKCBl bGVtLCBuYW1lICkgewoJCXJldHVybiBpbnRlcm5hbFJlbW92ZURhdGEoIGVsZW0s IG5hbWUgKTsKCX0sCgoJLy8gRm9yIGludGVybmFsIHVzZSBvbmx5LgoJX2RhdGE6 IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkgewoJCXJldHVybiBpbnRlcm5h bERhdGEoIGVsZW0sIG5hbWUsIGRhdGEsIHRydWUgKTsKCX0sCgoJX3JlbW92ZURh dGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewoJCXJldHVybiBpbnRlcm5hbFJl bW92ZURhdGEoIGVsZW0sIG5hbWUsIHRydWUgKTsKCX0KfSk7CgpqUXVlcnkuZm4u ZXh0ZW5kKHsKCWRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgewoJCXZhciBp LCBuYW1lLCBkYXRhLAoJCQllbGVtID0gdGhpc1swXSwKCQkJYXR0cnMgPSBlbGVt ICYmIGVsZW0uYXR0cmlidXRlczsKCgkJLy8gU3BlY2lhbCBleHBlY3Rpb25zIG9m IC5kYXRhIGJhc2ljYWxseSB0aHdhcnQgalF1ZXJ5LmFjY2VzcywKCQkvLyBzbyBp bXBsZW1lbnQgdGhlIHJlbGV2YW50IGJlaGF2aW9yIG91cnNlbHZlcwoKCQkvLyBH ZXRzIGFsbCB2YWx1ZXMKCQlpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkgewoJCQlp ZiAoIHRoaXMubGVuZ3RoICkgewoJCQkJZGF0YSA9IGpRdWVyeS5kYXRhKCBlbGVt ICk7CgoJCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFqUXVlcnkuX2Rh dGEoIGVsZW0sICJwYXJzZWRBdHRycyIgKSApIHsKCQkJCQlpID0gYXR0cnMubGVu Z3RoOwoJCQkJCXdoaWxlICggaS0tICkgewoJCQkJCQluYW1lID0gYXR0cnNbaV0u bmFtZTsKCgkJCQkJCWlmICggbmFtZS5pbmRleE9mKCJkYXRhLSIpID09PSAwICkg ewoJCQkJCQkJbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUuc2xpY2UoNSkg KTsKCgkJCQkJCQlkYXRhQXR0ciggZWxlbSwgbmFtZSwgZGF0YVsgbmFtZSBdICk7 CgkJCQkJCX0KCQkJCQl9CgkJCQkJalF1ZXJ5Ll9kYXRhKCBlbGVtLCAicGFyc2Vk QXR0cnMiLCB0cnVlICk7CgkJCQl9CgkJCX0KCgkJCXJldHVybiBkYXRhOwoJCX0K CgkJLy8gU2V0cyBtdWx0aXBsZSB2YWx1ZXMKCQlpZiAoIHR5cGVvZiBrZXkgPT09 ICJvYmplY3QiICkgewoJCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJ CQkJalF1ZXJ5LmRhdGEoIHRoaXMsIGtleSApOwoJCQl9KTsKCQl9CgoJCXJldHVy biBhcmd1bWVudHMubGVuZ3RoID4gMSA/CgoJCQkvLyBTZXRzIG9uZSB2YWx1ZQoJ CQl0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCQlqUXVlcnkuZGF0YSggdGhpcywg a2V5LCB2YWx1ZSApOwoJCQl9KSA6CgoJCQkvLyBHZXRzIG9uZSB2YWx1ZQoJCQkv LyBUcnkgdG8gZmV0Y2ggYW55IGludGVybmFsbHkgc3RvcmVkIGRhdGEgZmlyc3QK CQkJZWxlbSA/IGRhdGFBdHRyKCBlbGVtLCBrZXksIGpRdWVyeS5kYXRhKCBlbGVt LCBrZXkgKSApIDogdW5kZWZpbmVkOwoJfSwKCglyZW1vdmVEYXRhOiBmdW5jdGlv bigga2V5ICkgewoJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCWpR dWVyeS5yZW1vdmVEYXRhKCB0aGlzLCBrZXkgKTsKCQl9KTsKCX0KfSk7CgoKalF1 ZXJ5LmV4dGVuZCh7CglxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEg KSB7CgkJdmFyIHF1ZXVlOwoKCQlpZiAoIGVsZW0gKSB7CgkJCXR5cGUgPSAoIHR5 cGUgfHwgImZ4IiApICsgInF1ZXVlIjsKCQkJcXVldWUgPSBqUXVlcnkuX2RhdGEo IGVsZW0sIHR5cGUgKTsKCgkJCS8vIFNwZWVkIHVwIGRlcXVldWUgYnkgZ2V0dGlu ZyBvdXQgcXVpY2tseSBpZiB0aGlzIGlzIGp1c3QgYSBsb29rdXAKCQkJaWYgKCBk YXRhICkgewoJCQkJaWYgKCAhcXVldWUgfHwgalF1ZXJ5LmlzQXJyYXkoZGF0YSkg KSB7CgkJCQkJcXVldWUgPSBqUXVlcnkuX2RhdGEoIGVsZW0sIHR5cGUsIGpRdWVy eS5tYWtlQXJyYXkoZGF0YSkgKTsKCQkJCX0gZWxzZSB7CgkJCQkJcXVldWUucHVz aCggZGF0YSApOwoJCQkJfQoJCQl9CgkJCXJldHVybiBxdWV1ZSB8fCBbXTsKCQl9 Cgl9LAoKCWRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkgewoJCXR5cGUg PSB0eXBlIHx8ICJmeCI7CgoJCXZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxl bSwgdHlwZSApLAoJCQlzdGFydExlbmd0aCA9IHF1ZXVlLmxlbmd0aCwKCQkJZm4g PSBxdWV1ZS5zaGlmdCgpLAoJCQlob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcygg ZWxlbSwgdHlwZSApLAoJCQluZXh0ID0gZnVuY3Rpb24oKSB7CgkJCQlqUXVlcnku ZGVxdWV1ZSggZWxlbSwgdHlwZSApOwoJCQl9OwoKCQkvLyBJZiB0aGUgZnggcXVl dWUgaXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhlIHByb2dyZXNzIHNlbnRp bmVsCgkJaWYgKCBmbiA9PT0gImlucHJvZ3Jlc3MiICkgewoJCQlmbiA9IHF1ZXVl LnNoaWZ0KCk7CgkJCXN0YXJ0TGVuZ3RoLS07CgkJfQoKCQlpZiAoIGZuICkgewoK CQkJLy8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZngg cXVldWUgZnJvbSBiZWluZwoJCQkvLyBhdXRvbWF0aWNhbGx5IGRlcXVldWVkCgkJ CWlmICggdHlwZSA9PT0gImZ4IiApIHsKCQkJCXF1ZXVlLnVuc2hpZnQoICJpbnBy b2dyZXNzIiApOwoJCQl9CgoJCQkvLyBjbGVhciB1cCB0aGUgbGFzdCBxdWV1ZSBz dG9wIGZ1bmN0aW9uCgkJCWRlbGV0ZSBob29rcy5zdG9wOwoJCQlmbi5jYWxsKCBl bGVtLCBuZXh0LCBob29rcyApOwoJCX0KCgkJaWYgKCAhc3RhcnRMZW5ndGggJiYg aG9va3MgKSB7CgkJCWhvb2tzLmVtcHR5LmZpcmUoKTsKCQl9Cgl9LAoKCS8vIG5v dCBpbnRlbmRlZCBmb3IgcHVibGljIGNvbnN1bXB0aW9uIC0gZ2VuZXJhdGVzIGEg cXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybnMgdGhlIGN1cnJlbnQgb25lCglf cXVldWVIb29rczogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7CgkJdmFyIGtleSA9 IHR5cGUgKyAicXVldWVIb29rcyI7CgkJcmV0dXJuIGpRdWVyeS5fZGF0YSggZWxl bSwga2V5ICkgfHwgalF1ZXJ5Ll9kYXRhKCBlbGVtLCBrZXksIHsKCQkJZW1wdHk6 IGpRdWVyeS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCkg ewoJCQkJalF1ZXJ5Ll9yZW1vdmVEYXRhKCBlbGVtLCB0eXBlICsgInF1ZXVlIiAp OwoJCQkJalF1ZXJ5Ll9yZW1vdmVEYXRhKCBlbGVtLCBrZXkgKTsKCQkJfSkKCQl9 KTsKCX0KfSk7CgpqUXVlcnkuZm4uZXh0ZW5kKHsKCXF1ZXVlOiBmdW5jdGlvbigg dHlwZSwgZGF0YSApIHsKCQl2YXIgc2V0dGVyID0gMjsKCgkJaWYgKCB0eXBlb2Yg dHlwZSAhPT0gInN0cmluZyIgKSB7CgkJCWRhdGEgPSB0eXBlOwoJCQl0eXBlID0g ImZ4IjsKCQkJc2V0dGVyLS07CgkJfQoKCQlpZiAoIGFyZ3VtZW50cy5sZW5ndGgg PCBzZXR0ZXIgKSB7CgkJCXJldHVybiBqUXVlcnkucXVldWUoIHRoaXNbMF0sIHR5 cGUgKTsKCQl9CgoJCXJldHVybiBkYXRhID09PSB1bmRlZmluZWQgPwoJCQl0aGlz IDoKCQkJdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQkJdmFyIHF1ZXVlID0galF1 ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7CgoJCQkJLy8gZW5zdXJlIGEg aG9va3MgZm9yIHRoaXMgcXVldWUKCQkJCWpRdWVyeS5fcXVldWVIb29rcyggdGhp cywgdHlwZSApOwoKCQkJCWlmICggdHlwZSA9PT0gImZ4IiAmJiBxdWV1ZVswXSAh PT0gImlucHJvZ3Jlc3MiICkgewoJCQkJCWpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0 eXBlICk7CgkJCQl9CgkJCX0pOwoJfSwKCWRlcXVldWU6IGZ1bmN0aW9uKCB0eXBl ICkgewoJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCWpRdWVyeS5k ZXF1ZXVlKCB0aGlzLCB0eXBlICk7CgkJfSk7Cgl9LAoJY2xlYXJRdWV1ZTogZnVu Y3Rpb24oIHR5cGUgKSB7CgkJcmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwgImZ4 IiwgW10gKTsKCX0sCgkvLyBHZXQgYSBwcm9taXNlIHJlc29sdmVkIHdoZW4gcXVl dWVzIG9mIGEgY2VydGFpbiB0eXBlCgkvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhl IHR5cGUgYnkgZGVmYXVsdCkKCXByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmog KSB7CgkJdmFyIHRtcCwKCQkJY291bnQgPSAxLAoJCQlkZWZlciA9IGpRdWVyeS5E ZWZlcnJlZCgpLAoJCQllbGVtZW50cyA9IHRoaXMsCgkJCWkgPSB0aGlzLmxlbmd0 aCwKCQkJcmVzb2x2ZSA9IGZ1bmN0aW9uKCkgewoJCQkJaWYgKCAhKCAtLWNvdW50 ICkgKSB7CgkJCQkJZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1l bnRzIF0gKTsKCQkJCX0KCQkJfTsKCgkJaWYgKCB0eXBlb2YgdHlwZSAhPT0gInN0 cmluZyIgKSB7CgkJCW9iaiA9IHR5cGU7CgkJCXR5cGUgPSB1bmRlZmluZWQ7CgkJ fQoJCXR5cGUgPSB0eXBlIHx8ICJmeCI7CgoJCXdoaWxlICggaS0tICkgewoJCQl0 bXAgPSBqUXVlcnkuX2RhdGEoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyAicXVldWVI b29rcyIgKTsKCQkJaWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkgewoJCQkJY291bnQr KzsKCQkJCXRtcC5lbXB0eS5hZGQoIHJlc29sdmUgKTsKCQkJfQoJCX0KCQlyZXNv bHZlKCk7CgkJcmV0dXJuIGRlZmVyLnByb21pc2UoIG9iaiApOwoJfQp9KTsKdmFy IHBudW0gPSAoL1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLyku c291cmNlOwoKdmFyIGNzc0V4cGFuZCA9IFsgIlRvcCIsICJSaWdodCIsICJCb3R0 b20iLCAiTGVmdCIgXTsKCnZhciBpc0hpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtLCBl bCApIHsKCQkvLyBpc0hpZGRlbiBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkj ZmlsdGVyIGZ1bmN0aW9uOwoJCS8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxs IGJlIHNlY29uZCBhcmd1bWVudAoJCWVsZW0gPSBlbCB8fCBlbGVtOwoJCXJldHVy biBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSA9PT0gIm5vbmUiIHx8ICFq UXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApOwoJfTsK CgoKLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1 ZXMgb2YgYSBjb2xsZWN0aW9uCi8vIFRoZSB2YWx1ZS9zIGNhbiBvcHRpb25hbGx5 IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvbgp2YXIgYWNjZXNzID0galF1 ZXJ5LmFjY2VzcyA9IGZ1bmN0aW9uKCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNo YWluYWJsZSwgZW1wdHlHZXQsIHJhdyApIHsKCXZhciBpID0gMCwKCQlsZW5ndGgg PSBlbGVtcy5sZW5ndGgsCgkJYnVsayA9IGtleSA9PSBudWxsOwoKCS8vIFNldHMg bWFueSB2YWx1ZXMKCWlmICggalF1ZXJ5LnR5cGUoIGtleSApID09PSAib2JqZWN0 IiApIHsKCQljaGFpbmFibGUgPSB0cnVlOwoJCWZvciAoIGkgaW4ga2V5ICkgewoJ CQlqUXVlcnkuYWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVtpXSwgdHJ1ZSwgZW1w dHlHZXQsIHJhdyApOwoJCX0KCgkvLyBTZXRzIG9uZSB2YWx1ZQoJfSBlbHNlIGlm ICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKCQljaGFpbmFibGUgPSB0cnVlOwoK CQlpZiAoICFqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKCQkJcmF3ID0g dHJ1ZTsKCQl9CgoJCWlmICggYnVsayApIHsKCQkJLy8gQnVsayBvcGVyYXRpb25z IHJ1biBhZ2FpbnN0IHRoZSBlbnRpcmUgc2V0CgkJCWlmICggcmF3ICkgewoJCQkJ Zm4uY2FsbCggZWxlbXMsIHZhbHVlICk7CgkJCQlmbiA9IG51bGw7CgoJCQkvLyAu Li5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzCgkJCX0gZWxz ZSB7CgkJCQlidWxrID0gZm47CgkJCQlmbiA9IGZ1bmN0aW9uKCBlbGVtLCBrZXks IHZhbHVlICkgewoJCQkJCXJldHVybiBidWxrLmNhbGwoIGpRdWVyeSggZWxlbSAp LCB2YWx1ZSApOwoJCQkJfTsKCQkJfQoJCX0KCgkJaWYgKCBmbiApIHsKCQkJZm9y ICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CgkJCQlmbiggZWxlbXNbaV0sIGtleSwg cmF3ID8gdmFsdWUgOiB2YWx1ZS5jYWxsKCBlbGVtc1tpXSwgaSwgZm4oIGVsZW1z W2ldLCBrZXkgKSApICk7CgkJCX0KCQl9Cgl9CgoJcmV0dXJuIGNoYWluYWJsZSA/ CgkJZWxlbXMgOgoKCQkvLyBHZXRzCgkJYnVsayA/CgkJCWZuLmNhbGwoIGVsZW1z ICkgOgoJCQlsZW5ndGggPyBmbiggZWxlbXNbMF0sIGtleSApIDogZW1wdHlHZXQ7 Cn07CnZhciByY2hlY2thYmxlVHlwZSA9ICgvXig/OmNoZWNrYm94fHJhZGlvKSQv aSk7CgoKCihmdW5jdGlvbigpIHsKCXZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNy ZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwKCQlkaXYgPSBkb2N1bWVudC5jcmVhdGVF bGVtZW50KCJkaXYiKSwKCQlpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo ImlucHV0Iik7CgoJLy8gU2V0dXAKCWRpdi5zZXRBdHRyaWJ1dGUoICJjbGFzc05h bWUiLCAidCIgKTsKCWRpdi5pbm5lckhUTUwgPSAiICA8bGluay8+PHRhYmxlPjwv dGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+IjsKCgkvLyBJRSBzdHJpcHMgbGVhZGlu ZyB3aGl0ZXNwYWNlIHdoZW4gLmlubmVySFRNTCBpcyB1c2VkCglzdXBwb3J0Lmxl YWRpbmdXaGl0ZXNwYWNlID0gZGl2LmZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IDM7 CgoJLy8gTWFrZSBzdXJlIHRoYXQgdGJvZHkgZWxlbWVudHMgYXJlbid0IGF1dG9t YXRpY2FsbHkgaW5zZXJ0ZWQKCS8vIElFIHdpbGwgaW5zZXJ0IHRoZW0gaW50byBl bXB0eSB0YWJsZXMKCXN1cHBvcnQudGJvZHkgPSAhZGl2LmdldEVsZW1lbnRzQnlU YWdOYW1lKCAidGJvZHkiICkubGVuZ3RoOwoKCS8vIE1ha2Ugc3VyZSB0aGF0IGxp bmsgZWxlbWVudHMgZ2V0IHNlcmlhbGl6ZWQgY29ycmVjdGx5IGJ5IGlubmVySFRN TAoJLy8gVGhpcyByZXF1aXJlcyBhIHdyYXBwZXIgZWxlbWVudCBpbiBJRQoJc3Vw cG9ydC5odG1sU2VyaWFsaXplID0gISFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUo ICJsaW5rIiApLmxlbmd0aDsKCgkvLyBNYWtlcyBzdXJlIGNsb25pbmcgYW4gaHRt bDUgZWxlbWVudCBkb2VzIG5vdCBjYXVzZSBwcm9ibGVtcwoJLy8gV2hlcmUgb3V0 ZXJIVE1MIGlzIHVuZGVmaW5lZCwgdGhpcyBzdGlsbCB3b3JrcwoJc3VwcG9ydC5o dG1sNUNsb25lID0KCQlkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAibmF2IiApLmNs b25lTm9kZSggdHJ1ZSApLm91dGVySFRNTCAhPT0gIjw6bmF2PjwvOm5hdj4iOwoK CS8vIENoZWNrIGlmIGEgZGlzY29ubmVjdGVkIGNoZWNrYm94IHdpbGwgcmV0YWlu IGl0cyBjaGVja2VkCgkvLyB2YWx1ZSBvZiB0cnVlIGFmdGVyIGFwcGVuZGVkIHRv IHRoZSBET00gKElFNi83KQoJaW5wdXQudHlwZSA9ICJjaGVja2JveCI7CglpbnB1 dC5jaGVja2VkID0gdHJ1ZTsKCWZyYWdtZW50LmFwcGVuZENoaWxkKCBpbnB1dCAp OwoJc3VwcG9ydC5hcHBlbmRDaGVja2VkID0gaW5wdXQuY2hlY2tlZDsKCgkvLyBN YWtlIHN1cmUgdGV4dGFyZWEgKGFuZCBjaGVja2JveCkgZGVmYXVsdFZhbHVlIGlz IHByb3Blcmx5IGNsb25lZAoJLy8gU3VwcG9ydDogSUU2LUlFMTErCglkaXYuaW5u ZXJIVE1MID0gIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT4iOwoJc3VwcG9ydC5ub0Ns b25lQ2hlY2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5k ZWZhdWx0VmFsdWU7CgoJLy8gIzExMjE3IC0gV2ViS2l0IGxvc2VzIGNoZWNrIHdo ZW4gdGhlIG5hbWUgaXMgYWZ0ZXIgdGhlIGNoZWNrZWQgYXR0cmlidXRlCglmcmFn bWVudC5hcHBlbmRDaGlsZCggZGl2ICk7CglkaXYuaW5uZXJIVE1MID0gIjxpbnB1 dCB0eXBlPSdyYWRpbycgY2hlY2tlZD0nY2hlY2tlZCcgbmFtZT0ndCcvPiI7CgoJ Ly8gU3VwcG9ydDogU2FmYXJpIDUuMSwgaU9TIDUuMSwgQW5kcm9pZCA0LngsIEFu ZHJvaWQgMi4zCgkvLyBvbGQgV2ViS2l0IGRvZXNuJ3QgY2xvbmUgY2hlY2tlZCBz dGF0ZSBjb3JyZWN0bHkgaW4gZnJhZ21lbnRzCglzdXBwb3J0LmNoZWNrQ2xvbmUg PSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENo aWxkLmNoZWNrZWQ7CgoJLy8gU3VwcG9ydDogSUU8OQoJLy8gT3BlcmEgZG9lcyBu b3QgY2xvbmUgZXZlbnRzIChhbmQgdHlwZW9mIGRpdi5hdHRhY2hFdmVudCA9PT0g dW5kZWZpbmVkKS4KCS8vIElFOS0xMCBjbG9uZXMgZXZlbnRzIGJvdW5kIHZpYSBh dHRhY2hFdmVudCwgYnV0IHRoZXkgZG9uJ3QgdHJpZ2dlciB3aXRoIC5jbGljaygp CglzdXBwb3J0Lm5vQ2xvbmVFdmVudCA9IHRydWU7CglpZiAoIGRpdi5hdHRhY2hF dmVudCApIHsKCQlkaXYuYXR0YWNoRXZlbnQoICJvbmNsaWNrIiwgZnVuY3Rpb24o KSB7CgkJCXN1cHBvcnQubm9DbG9uZUV2ZW50ID0gZmFsc2U7CgkJfSk7CgoJCWRp di5jbG9uZU5vZGUoIHRydWUgKS5jbGljaygpOwoJfQoKCS8vIEV4ZWN1dGUgdGhl IHRlc3Qgb25seSBpZiBub3QgYWxyZWFkeSBleGVjdXRlZCBpbiBhbm90aGVyIG1v ZHVsZS4KCWlmIChzdXBwb3J0LmRlbGV0ZUV4cGFuZG8gPT0gbnVsbCkgewoJCS8v IFN1cHBvcnQ6IElFPDkKCQlzdXBwb3J0LmRlbGV0ZUV4cGFuZG8gPSB0cnVlOwoJ CXRyeSB7CgkJCWRlbGV0ZSBkaXYudGVzdDsKCQl9IGNhdGNoKCBlICkgewoJCQlz dXBwb3J0LmRlbGV0ZUV4cGFuZG8gPSBmYWxzZTsKCQl9Cgl9CgoJLy8gTnVsbCBl bGVtZW50cyB0byBhdm9pZCBsZWFrcyBpbiBJRS4KCWZyYWdtZW50ID0gZGl2ID0g aW5wdXQgPSBudWxsOwp9KSgpOwoKCihmdW5jdGlvbigpIHsKCXZhciBpLCBldmVu dE5hbWUsCgkJZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKTsK CgkvLyBTdXBwb3J0OiBJRTw5IChsYWNrIHN1Ym1pdC9jaGFuZ2UgYnViYmxlKSwg RmlyZWZveCAyMysgKGxhY2sgZm9jdXNpbiBldmVudCkKCWZvciAoIGkgaW4geyBz dWJtaXQ6IHRydWUsIGNoYW5nZTogdHJ1ZSwgZm9jdXNpbjogdHJ1ZSB9KSB7CgkJ ZXZlbnROYW1lID0gIm9uIiArIGk7CgoJCWlmICggIShzdXBwb3J0WyBpICsgIkJ1 YmJsZXMiIF0gPSBldmVudE5hbWUgaW4gd2luZG93KSApIHsKCQkJLy8gQmV3YXJl IG9mIENTUCByZXN0cmljdGlvbnMgKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEu b3JnL2VuL1NlY3VyaXR5L0NTUCkKCQkJZGl2LnNldEF0dHJpYnV0ZSggZXZlbnRO YW1lLCAidCIgKTsKCQkJc3VwcG9ydFsgaSArICJCdWJibGVzIiBdID0gZGl2LmF0 dHJpYnV0ZXNbIGV2ZW50TmFtZSBdLmV4cGFuZG8gPT09IGZhbHNlOwoJCX0KCX0K CgkvLyBOdWxsIGVsZW1lbnRzIHRvIGF2b2lkIGxlYWtzIGluIElFLgoJZGl2ID0g bnVsbDsKfSkoKTsKCgp2YXIgcmZvcm1FbGVtcyA9IC9eKD86aW5wdXR8c2VsZWN0 fHRleHRhcmVhKSQvaSwKCXJrZXlFdmVudCA9IC9ea2V5LywKCXJtb3VzZUV2ZW50 ID0gL14oPzptb3VzZXxjb250ZXh0bWVudSl8Y2xpY2svLAoJcmZvY3VzTW9ycGgg PSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sCglydHlwZW5hbWVz cGFjZSA9IC9eKFteLl0qKSg/OlwuKC4rKXwpJC87CgpmdW5jdGlvbiByZXR1cm5U cnVlKCkgewoJcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIHJldHVybkZhbHNlKCkg ewoJcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgp IHsKCXRyeSB7CgkJcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7Cgl9IGNh dGNoICggZXJyICkgeyB9Cn0KCi8qCiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1h bmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFj ZS4KICogUHJvcHMgdG8gRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5IGZv ciBtYW55IG9mIHRoZSBpZGVhcy4KICovCmpRdWVyeS5ldmVudCA9IHsKCglnbG9i YWw6IHt9LAoKCWFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBk YXRhLCBzZWxlY3RvciApIHsKCQl2YXIgdG1wLCBldmVudHMsIHQsIGhhbmRsZU9i akluLAoJCQlzcGVjaWFsLCBldmVudEhhbmRsZSwgaGFuZGxlT2JqLAoJCQloYW5k bGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsCgkJCWVsZW1EYXRhID0g alF1ZXJ5Ll9kYXRhKCBlbGVtICk7CgoJCS8vIERvbid0IGF0dGFjaCBldmVudHMg dG8gbm9EYXRhIG9yIHRleHQvY29tbWVudCBub2RlcyAoYnV0IGFsbG93IHBsYWlu IG9iamVjdHMpCgkJaWYgKCAhZWxlbURhdGEgKSB7CgkJCXJldHVybjsKCQl9CgoJ CS8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEg aW4gbGlldSBvZiB0aGUgaGFuZGxlcgoJCWlmICggaGFuZGxlci5oYW5kbGVyICkg ewoJCQloYW5kbGVPYmpJbiA9IGhhbmRsZXI7CgkJCWhhbmRsZXIgPSBoYW5kbGVP YmpJbi5oYW5kbGVyOwoJCQlzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9y OwoJCX0KCgkJLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5p cXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyCgkJaWYgKCAhaGFu ZGxlci5ndWlkICkgewoJCQloYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrOwoJ CX0KCgkJLy8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZSBhbmQg bWFpbiBoYW5kbGVyLCBpZiB0aGlzIGlzIHRoZSBmaXJzdAoJCWlmICggIShldmVu dHMgPSBlbGVtRGF0YS5ldmVudHMpICkgewoJCQlldmVudHMgPSBlbGVtRGF0YS5l dmVudHMgPSB7fTsKCQl9CgkJaWYgKCAhKGV2ZW50SGFuZGxlID0gZWxlbURhdGEu aGFuZGxlKSApIHsKCQkJZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBm dW5jdGlvbiggZSApIHsKCQkJCS8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBv ZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kCgkJCQkvLyB3aGVuIGFuIGV2 ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkCgkJCQlyZXR1 cm4gdHlwZW9mIGpRdWVyeSAhPT0gc3RydW5kZWZpbmVkICYmICghZSB8fCBqUXVl cnkuZXZlbnQudHJpZ2dlcmVkICE9PSBlLnR5cGUpID8KCQkJCQlqUXVlcnkuZXZl bnQuZGlzcGF0Y2guYXBwbHkoIGV2ZW50SGFuZGxlLmVsZW0sIGFyZ3VtZW50cyAp IDoKCQkJCQl1bmRlZmluZWQ7CgkJCX07CgkJCS8vIEFkZCBlbGVtIGFzIGEgcHJv cGVydHkgb2YgdGhlIGhhbmRsZSBmbiB0byBwcmV2ZW50IGEgbWVtb3J5IGxlYWsg d2l0aCBJRSBub24tbmF0aXZlIGV2ZW50cwoJCQlldmVudEhhbmRsZS5lbGVtID0g ZWxlbTsKCQl9CgoJCS8vIEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVk IGJ5IGEgc3BhY2UKCQl0eXBlcyA9ICggdHlwZXMgfHwgIiIgKS5tYXRjaCggcm5v dHdoaXRlICkgfHwgWyAiIiBdOwoJCXQgPSB0eXBlcy5sZW5ndGg7CgkJd2hpbGUg KCB0LS0gKSB7CgkJCXRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzW3Rd ICkgfHwgW107CgkJCXR5cGUgPSBvcmlnVHlwZSA9IHRtcFsxXTsKCQkJbmFtZXNw YWNlcyA9ICggdG1wWzJdIHx8ICIiICkuc3BsaXQoICIuIiApLnNvcnQoKTsKCgkJ CS8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3Bh Y2Utb25seSBoYW5kbGVycwoJCQlpZiAoICF0eXBlICkgewoJCQkJY29udGludWU7 CgkJCX0KCgkJCS8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUg c3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZQoJCQlz cGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKCgkJ CS8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50 IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZQoJCQl0eXBlID0gKCBzZWxl Y3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSAp IHx8IHR5cGU7CgoJCQkvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSBy ZXNldCB0eXBlCgkJCXNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlw ZSBdIHx8IHt9OwoKCQkJLy8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZl bnQgaGFuZGxlcnMKCQkJaGFuZGxlT2JqID0galF1ZXJ5LmV4dGVuZCh7CgkJCQl0 eXBlOiB0eXBlLAoJCQkJb3JpZ1R5cGU6IG9yaWdUeXBlLAoJCQkJZGF0YTogZGF0 YSwKCQkJCWhhbmRsZXI6IGhhbmRsZXIsCgkJCQlndWlkOiBoYW5kbGVyLmd1aWQs CgkJCQlzZWxlY3Rvcjogc2VsZWN0b3IsCgkJCQluZWVkc0NvbnRleHQ6IHNlbGVj dG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxl Y3RvciApLAoJCQkJbmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oIi4iKQoJCQl9 LCBoYW5kbGVPYmpJbiApOwoKCQkJLy8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBx dWV1ZSBpZiB3ZSdyZSB0aGUgZmlyc3QKCQkJaWYgKCAhKGhhbmRsZXJzID0gZXZl bnRzWyB0eXBlIF0pICkgewoJCQkJaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9 IFtdOwoJCQkJaGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7CgoJCQkJLy8gT25s eSB1c2UgYWRkRXZlbnRMaXN0ZW5lci9hdHRhY2hFdmVudCBpZiB0aGUgc3BlY2lh bCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlCgkJCQlpZiAoICFzcGVjaWFs LnNldHVwIHx8IHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNw YWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7CgkJCQkJLy8gQmluZCB0 aGUgZ2xvYmFsIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKCQkJCQlpZiAo IGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHsKCQkJCQkJZWxlbS5hZGRFdmVudExp c3RlbmVyKCB0eXBlLCBldmVudEhhbmRsZSwgZmFsc2UgKTsKCgkJCQkJfSBlbHNl IGlmICggZWxlbS5hdHRhY2hFdmVudCApIHsKCQkJCQkJZWxlbS5hdHRhY2hFdmVu dCggIm9uIiArIHR5cGUsIGV2ZW50SGFuZGxlICk7CgkJCQkJfQoJCQkJfQoJCQl9 CgoJCQlpZiAoIHNwZWNpYWwuYWRkICkgewoJCQkJc3BlY2lhbC5hZGQuY2FsbCgg ZWxlbSwgaGFuZGxlT2JqICk7CgoJCQkJaWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIu Z3VpZCApIHsKCQkJCQloYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5n dWlkOwoJCQkJfQoJCQl9CgoJCQkvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5k bGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9udAoJCQlpZiAoIHNlbGVjdG9yICkg ewoJCQkJaGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50Kyss IDAsIGhhbmRsZU9iaiApOwoJCQl9IGVsc2UgewoJCQkJaGFuZGxlcnMucHVzaCgg aGFuZGxlT2JqICk7CgkJCX0KCgkJCS8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZl bnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb24K CQkJalF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTsKCQl9CgoJCS8v IE51bGxpZnkgZWxlbSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBpbiBJRQoJCWVs ZW0gPSBudWxsOwoJfSwKCgkvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2 ZW50cyBmcm9tIGFuIGVsZW1lbnQKCXJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5 cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7CgkJdmFyIGos IGhhbmRsZU9iaiwgdG1wLAoJCQlvcmlnQ291bnQsIHQsIGV2ZW50cywKCQkJc3Bl Y2lhbCwgaGFuZGxlcnMsIHR5cGUsCgkJCW5hbWVzcGFjZXMsIG9yaWdUeXBlLAoJ CQllbGVtRGF0YSA9IGpRdWVyeS5oYXNEYXRhKCBlbGVtICkgJiYgalF1ZXJ5Ll9k YXRhKCBlbGVtICk7CgoJCWlmICggIWVsZW1EYXRhIHx8ICEoZXZlbnRzID0gZWxl bURhdGEuZXZlbnRzKSApIHsKCQkJcmV0dXJuOwoJCX0KCgkJLy8gT25jZSBmb3Ig ZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRl ZAoJCXR5cGVzID0gKCB0eXBlcyB8fCAiIiApLm1hdGNoKCBybm90d2hpdGUgKSB8 fCBbICIiIF07CgkJdCA9IHR5cGVzLmxlbmd0aDsKCQl3aGlsZSAoIHQtLSApIHsK CQkJdG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbdF0gKSB8fCBbXTsK CQkJdHlwZSA9IG9yaWdUeXBlID0gdG1wWzFdOwoJCQluYW1lc3BhY2VzID0gKCB0 bXBbMl0gfHwgIiIgKS5zcGxpdCggIi4iICkuc29ydCgpOwoKCQkJLy8gVW5iaW5k IGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9y IHRoZSBlbGVtZW50CgkJCWlmICggIXR5cGUgKSB7CgkJCQlmb3IgKCB0eXBlIGlu IGV2ZW50cyApIHsKCQkJCQlqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBl ICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTsKCQkJCX0K CQkJCWNvbnRpbnVlOwoJCQl9CgoJCQlzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNw ZWNpYWxbIHR5cGUgXSB8fCB7fTsKCQkJdHlwZSA9ICggc2VsZWN0b3IgPyBzcGVj aWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlOwoJ CQloYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdOwoJCQl0bXAgPSB0bXBb Ml0gJiYgbmV3IFJlZ0V4cCggIihefFxcLikiICsgbmFtZXNwYWNlcy5qb2luKCJc XC4oPzouKlxcLnwpIikgKyAiKFxcLnwkKSIgKTsKCgkJCS8vIFJlbW92ZSBtYXRj aGluZyBldmVudHMKCQkJb3JpZ0NvdW50ID0gaiA9IGhhbmRsZXJzLmxlbmd0aDsK CQkJd2hpbGUgKCBqLS0gKSB7CgkJCQloYW5kbGVPYmogPSBoYW5kbGVyc1sgaiBd OwoKCQkJCWlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxl T2JqLm9yaWdUeXBlICkgJiYKCQkJCQkoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3Vp ZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJgoJCQkJCSggIXRtcCB8fCB0bXAudGVz dCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiYKCQkJCQkoICFzZWxlY3RvciB8 fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8IHNlbGVjdG9yID09 PSAiKioiICYmIGhhbmRsZU9iai5zZWxlY3RvciApICkgewoJCQkJCWhhbmRsZXJz LnNwbGljZSggaiwgMSApOwoKCQkJCQlpZiAoIGhhbmRsZU9iai5zZWxlY3RvciAp IHsKCQkJCQkJaGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tOwoJCQkJCX0KCQkJCQlp ZiAoIHNwZWNpYWwucmVtb3ZlICkgewoJCQkJCQlzcGVjaWFsLnJlbW92ZS5jYWxs KCBlbGVtLCBoYW5kbGVPYmogKTsKCQkJCQl9CgkJCQl9CgkJCX0KCgkJCS8vIFJl bW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhp bmcgYW5kIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3QKCQkJLy8gKGF2b2lkcyBwb3Rl bnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNw ZWNpYWwgZXZlbnQgaGFuZGxlcnMpCgkJCWlmICggb3JpZ0NvdW50ICYmICFoYW5k bGVycy5sZW5ndGggKSB7CgkJCQlpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8IHNw ZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcywgZWxlbURhdGEu aGFuZGxlICkgPT09IGZhbHNlICkgewoJCQkJCWpRdWVyeS5yZW1vdmVFdmVudCgg ZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7CgkJCQl9CgoJCQkJZGVsZXRl IGV2ZW50c1sgdHlwZSBdOwoJCQl9CgkJfQoKCQkvLyBSZW1vdmUgdGhlIGV4cGFu ZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZAoJCWlmICggalF1ZXJ5LmlzRW1wdHlP YmplY3QoIGV2ZW50cyApICkgewoJCQlkZWxldGUgZWxlbURhdGEuaGFuZGxlOwoK CQkJLy8gcmVtb3ZlRGF0YSBhbHNvIGNoZWNrcyBmb3IgZW1wdGluZXNzIGFuZCBj bGVhcnMgdGhlIGV4cGFuZG8gaWYgZW1wdHkKCQkJLy8gc28gdXNlIGl0IGluc3Rl YWQgb2YgZGVsZXRlCgkJCWpRdWVyeS5fcmVtb3ZlRGF0YSggZWxlbSwgImV2ZW50 cyIgKTsKCQl9Cgl9LAoKCXRyaWdnZXI6IGZ1bmN0aW9uKCBldmVudCwgZGF0YSwg ZWxlbSwgb25seUhhbmRsZXJzICkgewoJCXZhciBoYW5kbGUsIG9udHlwZSwgY3Vy LAoJCQlidWJibGVUeXBlLCBzcGVjaWFsLCB0bXAsIGksCgkJCWV2ZW50UGF0aCA9 IFsgZWxlbSB8fCBkb2N1bWVudCBdLAoJCQl0eXBlID0gaGFzT3duLmNhbGwoIGV2 ZW50LCAidHlwZSIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCwKCQkJbmFtZXNwYWNl cyA9IGhhc093bi5jYWxsKCBldmVudCwgIm5hbWVzcGFjZSIgKSA/IGV2ZW50Lm5h bWVzcGFjZS5zcGxpdCgiLiIpIDogW107CgoJCWN1ciA9IHRtcCA9IGVsZW0gPSBl bGVtIHx8IGRvY3VtZW50OwoKCQkvLyBEb24ndCBkbyBldmVudHMgb24gdGV4dCBh bmQgY29tbWVudCBub2RlcwoJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBl bGVtLm5vZGVUeXBlID09PSA4ICkgewoJCQlyZXR1cm47CgkJfQoKCQkvLyBmb2N1 cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBm aXJpbmcgdGhlbSByaWdodCBub3cKCQlpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5 cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7CgkJCXJldHVybjsKCQl9 CgoJCWlmICggdHlwZS5pbmRleE9mKCIuIikgPj0gMCApIHsKCQkJLy8gTmFtZXNw YWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlw ZSBpbiBoYW5kbGUoKQoJCQluYW1lc3BhY2VzID0gdHlwZS5zcGxpdCgiLiIpOwoJ CQl0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpOwoJCQluYW1lc3BhY2VzLnNvcnQo KTsKCQl9CgkJb250eXBlID0gdHlwZS5pbmRleE9mKCI6IikgPCAwICYmICJvbiIg KyB0eXBlOwoKCQkvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQg b2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmcKCQll dmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID8KCQkJZXZlbnQgOgoJCQlu ZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCB0eXBlb2YgZXZlbnQgPT09ICJvYmplY3Qi ICYmIGV2ZW50ICk7CgoJCS8vIFRyaWdnZXIgYml0bWFzazogJiAxIGZvciBuYXRp dmUgaGFuZGxlcnM7ICYgMiBmb3IgalF1ZXJ5IChhbHdheXMgdHJ1ZSkKCQlldmVu dC5pc1RyaWdnZXIgPSBvbmx5SGFuZGxlcnMgPyAyIDogMzsKCQlldmVudC5uYW1l c3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oIi4iKTsKCQlldmVudC5uYW1lc3BhY2Vf cmUgPSBldmVudC5uYW1lc3BhY2UgPwoJCQluZXcgUmVnRXhwKCAiKF58XFwuKSIg KyBuYW1lc3BhY2VzLmpvaW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwufCQpIiAp IDoKCQkJbnVsbDsKCgkJLy8gQ2xlYW4gdXAgdGhlIGV2ZW50IGluIGNhc2UgaXQg aXMgYmVpbmcgcmV1c2VkCgkJZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkOwoJCWlm ICggIWV2ZW50LnRhcmdldCApIHsKCQkJZXZlbnQudGFyZ2V0ID0gZWxlbTsKCQl9 CgoJCS8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBl dmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3QKCQlkYXRhID0gZGF0 YSA9PSBudWxsID8KCQkJWyBldmVudCBdIDoKCQkJalF1ZXJ5Lm1ha2VBcnJheSgg ZGF0YSwgWyBldmVudCBdICk7CgoJCS8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRv IGRyYXcgb3V0c2lkZSB0aGUgbGluZXMKCQlzcGVjaWFsID0galF1ZXJ5LmV2ZW50 LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKCQlpZiAoICFvbmx5SGFuZGxlcnMgJiYg c3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwg ZGF0YSApID09PSBmYWxzZSApIHsKCQkJcmV0dXJuOwoJCX0KCgkJLy8gRGV0ZXJt aW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBl dmVudHMgc3BlYyAoIzk5NTEpCgkJLy8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0 aGVuIHRvIHdpbmRvdzsgd2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQg dmFyICgjOTcyNCkKCQlpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9C dWJibGUgJiYgIWpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkgewoKCQkJYnViYmxl VHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7CgkJCWlmICggIXJm b2N1c01vcnBoLnRlc3QoIGJ1YmJsZVR5cGUgKyB0eXBlICkgKSB7CgkJCQljdXIg PSBjdXIucGFyZW50Tm9kZTsKCQkJfQoJCQlmb3IgKCA7IGN1cjsgY3VyID0gY3Vy LnBhcmVudE5vZGUgKSB7CgkJCQlldmVudFBhdGgucHVzaCggY3VyICk7CgkJCQl0 bXAgPSBjdXI7CgkJCX0KCgkJCS8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3Qg dG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9N KQoJCQlpZiAoIHRtcCA9PT0gKGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVu dCkgKSB7CgkJCQlldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8IHRt cC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7CgkJCX0KCQl9CgoJCS8vIEZpcmUg aGFuZGxlcnMgb24gdGhlIGV2ZW50IHBhdGgKCQlpID0gMDsKCQl3aGlsZSAoIChj dXIgPSBldmVudFBhdGhbaSsrXSkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9w cGVkKCkgKSB7CgoJCQlldmVudC50eXBlID0gaSA+IDEgPwoJCQkJYnViYmxlVHlw ZSA6CgkJCQlzcGVjaWFsLmJpbmRUeXBlIHx8IHR5cGU7CgoJCQkvLyBqUXVlcnkg aGFuZGxlcgoJCQloYW5kbGUgPSAoIGpRdWVyeS5fZGF0YSggY3VyLCAiZXZlbnRz IiApIHx8IHt9IClbIGV2ZW50LnR5cGUgXSAmJiBqUXVlcnkuX2RhdGEoIGN1ciwg ImhhbmRsZSIgKTsKCQkJaWYgKCBoYW5kbGUgKSB7CgkJCQloYW5kbGUuYXBwbHko IGN1ciwgZGF0YSApOwoJCQl9CgoJCQkvLyBOYXRpdmUgaGFuZGxlcgoJCQloYW5k bGUgPSBvbnR5cGUgJiYgY3VyWyBvbnR5cGUgXTsKCQkJaWYgKCBoYW5kbGUgJiYg aGFuZGxlLmFwcGx5ICYmIGpRdWVyeS5hY2NlcHREYXRhKCBjdXIgKSApIHsKCQkJ CWV2ZW50LnJlc3VsdCA9IGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7CgkJCQlp ZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7CgkJCQkJZXZlbnQucHJldmVu dERlZmF1bHQoKTsKCQkJCX0KCQkJfQoJCX0KCQlldmVudC50eXBlID0gdHlwZTsK CgkJLy8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRv IGl0IG5vdwoJCWlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0 UHJldmVudGVkKCkgKSB7CgoJCQlpZiAoICghc3BlY2lhbC5fZGVmYXVsdCB8fCBz cGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBldmVudFBhdGgucG9wKCksIGRhdGEgKSA9 PT0gZmFsc2UpICYmCgkJCQlqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkgewoK CQkJCS8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdp dGggdGhlIHNhbWUgbmFtZSBuYW1lIGFzIHRoZSBldmVudC4KCQkJCS8vIENhbid0 IHVzZSBhbiAuaXNGdW5jdGlvbigpIGNoZWNrIGhlcmUgYmVjYXVzZSBJRTYvNyBm YWlscyB0aGF0IHRlc3QuCgkJCQkvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMg b24gd2luZG93LCB0aGF0J3Mgd2hlcmUgZ2xvYmFsIHZhcmlhYmxlcyBiZSAoIzYx NzApCgkJCQlpZiAoIG9udHlwZSAmJiBlbGVtWyB0eXBlIF0gJiYgIWpRdWVyeS5p c1dpbmRvdyggZWxlbSApICkgewoKCQkJCQkvLyBEb24ndCByZS10cmlnZ2VyIGFu IG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kCgkJCQkJ dG1wID0gZWxlbVsgb250eXBlIF07CgoJCQkJCWlmICggdG1wICkgewoJCQkJCQll bGVtWyBvbnR5cGUgXSA9IG51bGw7CgkJCQkJfQoKCQkJCQkvLyBQcmV2ZW50IHJl LXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkg YnViYmxlZCBpdCBhYm92ZQoJCQkJCWpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0 eXBlOwoJCQkJCXRyeSB7CgkJCQkJCWVsZW1bIHR5cGUgXSgpOwoJCQkJCX0gY2F0 Y2ggKCBlICkgewoJCQkJCQkvLyBJRTw5IGRpZXMgb24gZm9jdXMvYmx1ciB0byBo aWRkZW4gZWxlbWVudCAoIzE0ODYsIzEyNTE4KQoJCQkJCQkvLyBvbmx5IHJlcHJv ZHVjaWJsZSBvbiB3aW5YUCBJRTggbmF0aXZlLCBub3QgSUU5IGluIElFOCBtb2Rl CgkJCQkJfQoJCQkJCWpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7 CgoJCQkJCWlmICggdG1wICkgewoJCQkJCQllbGVtWyBvbnR5cGUgXSA9IHRtcDsK CQkJCQl9CgkJCQl9CgkJCX0KCQl9CgoJCXJldHVybiBldmVudC5yZXN1bHQ7Cgl9 LAoKCWRpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7CgoJCS8vIE1ha2UgYSB3 cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50IG9iamVj dAoJCWV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKTsKCgkJdmFyIGks IHJldCwgaGFuZGxlT2JqLCBtYXRjaGVkLCBqLAoJCQloYW5kbGVyUXVldWUgPSBb XSwKCQkJYXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLAoJCQloYW5kbGVy cyA9ICggalF1ZXJ5Ll9kYXRhKCB0aGlzLCAiZXZlbnRzIiApIHx8IHt9IClbIGV2 ZW50LnR5cGUgXSB8fCBbXSwKCQkJc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVj aWFsWyBldmVudC50eXBlIF0gfHwge307CgoJCS8vIFVzZSB0aGUgZml4LWVkIGpR dWVyeS5FdmVudCByYXRoZXIgdGhhbiB0aGUgKHJlYWQtb25seSkgbmF0aXZlIGV2 ZW50CgkJYXJnc1swXSA9IGV2ZW50OwoJCWV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0g dGhpczsKCgkJLy8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1h cHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZAoJCWlmICggc3Bl Y2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRo aXMsIGV2ZW50ICkgPT09IGZhbHNlICkgewoJCQlyZXR1cm47CgkJfQoKCQkvLyBE ZXRlcm1pbmUgaGFuZGxlcnMKCQloYW5kbGVyUXVldWUgPSBqUXVlcnkuZXZlbnQu aGFuZGxlcnMuY2FsbCggdGhpcywgZXZlbnQsIGhhbmRsZXJzICk7CgoJCS8vIFJ1 biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdh dGlvbiBiZW5lYXRoIHVzCgkJaSA9IDA7CgkJd2hpbGUgKCAobWF0Y2hlZCA9IGhh bmRsZXJRdWV1ZVsgaSsrIF0pICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBl ZCgpICkgewoJCQlldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtOwoK CQkJaiA9IDA7CgkJCXdoaWxlICggKGhhbmRsZU9iaiA9IG1hdGNoZWQuaGFuZGxl cnNbIGorKyBdKSAmJiAhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3Bw ZWQoKSApIHsKCgkJCQkvLyBUcmlnZ2VyZWQgZXZlbnQgbXVzdCBlaXRoZXIgMSkg aGF2ZSBubyBuYW1lc3BhY2UsIG9yCgkJCQkvLyAyKSBoYXZlIG5hbWVzcGFjZShz KSBhIHN1YnNldCBvciBlcXVhbCB0byB0aG9zZSBpbiB0aGUgYm91bmQgZXZlbnQg KGJvdGggY2FuIGhhdmUgbm8gbmFtZXNwYWNlKS4KCQkJCWlmICggIWV2ZW50Lm5h bWVzcGFjZV9yZSB8fCBldmVudC5uYW1lc3BhY2VfcmUudGVzdCggaGFuZGxlT2Jq Lm5hbWVzcGFjZSApICkgewoKCQkJCQlldmVudC5oYW5kbGVPYmogPSBoYW5kbGVP Ymo7CgkJCQkJZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhOwoKCQkJCQlyZXQg PSAoIChqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0g fHwge30pLmhhbmRsZSB8fCBoYW5kbGVPYmouaGFuZGxlciApCgkJCQkJCQkuYXBw bHkoIG1hdGNoZWQuZWxlbSwgYXJncyApOwoKCQkJCQlpZiAoIHJldCAhPT0gdW5k ZWZpbmVkICkgewoJCQkJCQlpZiAoIChldmVudC5yZXN1bHQgPSByZXQpID09PSBm YWxzZSApIHsKCQkJCQkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CgkJCQkJCQll dmVudC5zdG9wUHJvcGFnYXRpb24oKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJ fQoJCX0KCgkJLy8gQ2FsbCB0aGUgcG9zdERpc3BhdGNoIGhvb2sgZm9yIHRoZSBt YXBwZWQgdHlwZQoJCWlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7CgkJCXNw ZWNpYWwucG9zdERpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICk7CgkJfQoKCQly ZXR1cm4gZXZlbnQucmVzdWx0OwoJfSwKCgloYW5kbGVyczogZnVuY3Rpb24oIGV2 ZW50LCBoYW5kbGVycyApIHsKCQl2YXIgc2VsLCBoYW5kbGVPYmosIG1hdGNoZXMs IGksCgkJCWhhbmRsZXJRdWV1ZSA9IFtdLAoJCQlkZWxlZ2F0ZUNvdW50ID0gaGFu ZGxlcnMuZGVsZWdhdGVDb3VudCwKCQkJY3VyID0gZXZlbnQudGFyZ2V0OwoKCQkv LyBGaW5kIGRlbGVnYXRlIGhhbmRsZXJzCgkJLy8gQmxhY2staG9sZSBTVkcgPHVz ZT4gaW5zdGFuY2UgdHJlZXMgKCMxMzE4MCkKCQkvLyBBdm9pZCBub24tbGVmdC1j bGljayBidWJibGluZyBpbiBGaXJlZm94ICgjMzg2MSkKCQlpZiAoIGRlbGVnYXRl Q291bnQgJiYgY3VyLm5vZGVUeXBlICYmICghZXZlbnQuYnV0dG9uIHx8IGV2ZW50 LnR5cGUgIT09ICJjbGljayIpICkgewoKCQkJLyoganNoaW50IGVxZXFlcTogZmFs c2UgKi8KCQkJZm9yICggOyBjdXIgIT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5v ZGUgfHwgdGhpcyApIHsKCQkJCS8qIGpzaGludCBlcWVxZXE6IHRydWUgKi8KCgkJ CQkvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKCMxMzIwOCkKCQkJCS8vIERv bid0IHByb2Nlc3MgY2xpY2tzIG9uIGRpc2FibGVkIGVsZW1lbnRzICgjNjkxMSwg IzgxNjUsICMxMTM4MiwgIzExNzY0KQoJCQkJaWYgKCBjdXIubm9kZVR5cGUgPT09 IDEgJiYgKGN1ci5kaXNhYmxlZCAhPT0gdHJ1ZSB8fCBldmVudC50eXBlICE9PSAi Y2xpY2siKSApIHsKCQkJCQltYXRjaGVzID0gW107CgkJCQkJZm9yICggaSA9IDA7 IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysgKSB7CgkJCQkJCWhhbmRsZU9iaiA9IGhh bmRsZXJzWyBpIF07CgoJCQkJCQkvLyBEb24ndCBjb25mbGljdCB3aXRoIE9iamVj dC5wcm90b3R5cGUgcHJvcGVydGllcyAoIzEzMjAzKQoJCQkJCQlzZWwgPSBoYW5k bGVPYmouc2VsZWN0b3IgKyAiICI7CgoJCQkJCQlpZiAoIG1hdGNoZXNbIHNlbCBd ID09PSB1bmRlZmluZWQgKSB7CgkJCQkJCQltYXRjaGVzWyBzZWwgXSA9IGhhbmRs ZU9iai5uZWVkc0NvbnRleHQgPwoJCQkJCQkJCWpRdWVyeSggc2VsLCB0aGlzICku aW5kZXgoIGN1ciApID49IDAgOgoJCQkJCQkJCWpRdWVyeS5maW5kKCBzZWwsIHRo aXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7CgkJCQkJCX0KCQkJCQkJaWYgKCBt YXRjaGVzWyBzZWwgXSApIHsKCQkJCQkJCW1hdGNoZXMucHVzaCggaGFuZGxlT2Jq ICk7CgkJCQkJCX0KCQkJCQl9CgkJCQkJaWYgKCBtYXRjaGVzLmxlbmd0aCApIHsK CQkJCQkJaGFuZGxlclF1ZXVlLnB1c2goeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBt YXRjaGVzIH0pOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCgkJLy8gQWRkIHRoZSBy ZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVycwoJCWlmICggZGVsZWdh dGVDb3VudCA8IGhhbmRsZXJzLmxlbmd0aCApIHsKCQkJaGFuZGxlclF1ZXVlLnB1 c2goeyBlbGVtOiB0aGlzLCBoYW5kbGVyczogaGFuZGxlcnMuc2xpY2UoIGRlbGVn YXRlQ291bnQgKSB9KTsKCQl9CgoJCXJldHVybiBoYW5kbGVyUXVldWU7Cgl9LAoK CWZpeDogZnVuY3Rpb24oIGV2ZW50ICkgewoJCWlmICggZXZlbnRbIGpRdWVyeS5l eHBhbmRvIF0gKSB7CgkJCXJldHVybiBldmVudDsKCQl9CgoJCS8vIENyZWF0ZSBh IHdyaXRhYmxlIGNvcHkgb2YgdGhlIGV2ZW50IG9iamVjdCBhbmQgbm9ybWFsaXpl IHNvbWUgcHJvcGVydGllcwoJCXZhciBpLCBwcm9wLCBjb3B5LAoJCQl0eXBlID0g ZXZlbnQudHlwZSwKCQkJb3JpZ2luYWxFdmVudCA9IGV2ZW50LAoJCQlmaXhIb29r ID0gdGhpcy5maXhIb29rc1sgdHlwZSBdOwoKCQlpZiAoICFmaXhIb29rICkgewoJ CQl0aGlzLmZpeEhvb2tzWyB0eXBlIF0gPSBmaXhIb29rID0KCQkJCXJtb3VzZUV2 ZW50LnRlc3QoIHR5cGUgKSA/IHRoaXMubW91c2VIb29rcyA6CgkJCQlya2V5RXZl bnQudGVzdCggdHlwZSApID8gdGhpcy5rZXlIb29rcyA6CgkJCQl7fTsKCQl9CgkJ Y29weSA9IGZpeEhvb2sucHJvcHMgPyB0aGlzLnByb3BzLmNvbmNhdCggZml4SG9v ay5wcm9wcyApIDogdGhpcy5wcm9wczsKCgkJZXZlbnQgPSBuZXcgalF1ZXJ5LkV2 ZW50KCBvcmlnaW5hbEV2ZW50ICk7CgoJCWkgPSBjb3B5Lmxlbmd0aDsKCQl3aGls ZSAoIGktLSApIHsKCQkJcHJvcCA9IGNvcHlbIGkgXTsKCQkJZXZlbnRbIHByb3Ag XSA9IG9yaWdpbmFsRXZlbnRbIHByb3AgXTsKCQl9CgoJCS8vIFN1cHBvcnQ6IElF PDkKCQkvLyBGaXggdGFyZ2V0IHByb3BlcnR5ICgjMTkyNSkKCQlpZiAoICFldmVu dC50YXJnZXQgKSB7CgkJCWV2ZW50LnRhcmdldCA9IG9yaWdpbmFsRXZlbnQuc3Jj RWxlbWVudCB8fCBkb2N1bWVudDsKCQl9CgoJCS8vIFN1cHBvcnQ6IENocm9tZSAy MyssIFNhZmFyaT8KCQkvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9k ZSAoIzUwNCwgIzEzMTQzKQoJCWlmICggZXZlbnQudGFyZ2V0Lm5vZGVUeXBlID09 PSAzICkgewoJCQlldmVudC50YXJnZXQgPSBldmVudC50YXJnZXQucGFyZW50Tm9k ZTsKCQl9CgoJCS8vIFN1cHBvcnQ6IElFPDkKCQkvLyBGb3IgbW91c2Uva2V5IGV2 ZW50cywgbWV0YUtleT09ZmFsc2UgaWYgaXQncyB1bmRlZmluZWQgKCMzMzY4LCAj MTEzMjgpCgkJZXZlbnQubWV0YUtleSA9ICEhZXZlbnQubWV0YUtleTsKCgkJcmV0 dXJuIGZpeEhvb2suZmlsdGVyID8gZml4SG9vay5maWx0ZXIoIGV2ZW50LCBvcmln aW5hbEV2ZW50ICkgOiBldmVudDsKCX0sCgoJLy8gSW5jbHVkZXMgc29tZSBldmVu dCBwcm9wcyBzaGFyZWQgYnkgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQKCXByb3Bz OiAiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJn ZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFy Z2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLAoKCWZpeEhvb2tz OiB7fSwKCglrZXlIb29rczogewoJCXByb3BzOiAiY2hhciBjaGFyQ29kZSBrZXkg a2V5Q29kZSIuc3BsaXQoIiAiKSwKCQlmaWx0ZXI6IGZ1bmN0aW9uKCBldmVudCwg b3JpZ2luYWwgKSB7CgoJCQkvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVudHMKCQkJ aWYgKCBldmVudC53aGljaCA9PSBudWxsICkgewoJCQkJZXZlbnQud2hpY2ggPSBv cmlnaW5hbC5jaGFyQ29kZSAhPSBudWxsID8gb3JpZ2luYWwuY2hhckNvZGUgOiBv cmlnaW5hbC5rZXlDb2RlOwoJCQl9CgoJCQlyZXR1cm4gZXZlbnQ7CgkJfQoJfSwK Cgltb3VzZUhvb2tzOiB7CgkJcHJvcHM6ICJidXR0b24gYnV0dG9ucyBjbGllbnRY IGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZ IHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksCgkJZmlsdGVy OiBmdW5jdGlvbiggZXZlbnQsIG9yaWdpbmFsICkgewoJCQl2YXIgYm9keSwgZXZl bnREb2MsIGRvYywKCQkJCWJ1dHRvbiA9IG9yaWdpbmFsLmJ1dHRvbiwKCQkJCWZy b21FbGVtZW50ID0gb3JpZ2luYWwuZnJvbUVsZW1lbnQ7CgoJCQkvLyBDYWxjdWxh dGUgcGFnZVgvWSBpZiBtaXNzaW5nIGFuZCBjbGllbnRYL1kgYXZhaWxhYmxlCgkJ CWlmICggZXZlbnQucGFnZVggPT0gbnVsbCAmJiBvcmlnaW5hbC5jbGllbnRYICE9 IG51bGwgKSB7CgkJCQlldmVudERvYyA9IGV2ZW50LnRhcmdldC5vd25lckRvY3Vt ZW50IHx8IGRvY3VtZW50OwoJCQkJZG9jID0gZXZlbnREb2MuZG9jdW1lbnRFbGVt ZW50OwoJCQkJYm9keSA9IGV2ZW50RG9jLmJvZHk7CgoJCQkJZXZlbnQucGFnZVgg PSBvcmlnaW5hbC5jbGllbnRYICsgKCBkb2MgJiYgZG9jLnNjcm9sbExlZnQgfHwg Ym9keSAmJiBib2R5LnNjcm9sbExlZnQgfHwgMCApIC0gKCBkb2MgJiYgZG9jLmNs aWVudExlZnQgfHwgYm9keSAmJiBib2R5LmNsaWVudExlZnQgfHwgMCApOwoJCQkJ ZXZlbnQucGFnZVkgPSBvcmlnaW5hbC5jbGllbnRZICsgKCBkb2MgJiYgZG9jLnNj cm9sbFRvcCAgfHwgYm9keSAmJiBib2R5LnNjcm9sbFRvcCAgfHwgMCApIC0gKCBk b2MgJiYgZG9jLmNsaWVudFRvcCAgfHwgYm9keSAmJiBib2R5LmNsaWVudFRvcCAg fHwgMCApOwoJCQl9CgoJCQkvLyBBZGQgcmVsYXRlZFRhcmdldCwgaWYgbmVjZXNz YXJ5CgkJCWlmICggIWV2ZW50LnJlbGF0ZWRUYXJnZXQgJiYgZnJvbUVsZW1lbnQg KSB7CgkJCQlldmVudC5yZWxhdGVkVGFyZ2V0ID0gZnJvbUVsZW1lbnQgPT09IGV2 ZW50LnRhcmdldCA/IG9yaWdpbmFsLnRvRWxlbWVudCA6IGZyb21FbGVtZW50OwoJ CQl9CgoJCQkvLyBBZGQgd2hpY2ggZm9yIGNsaWNrOiAxID09PSBsZWZ0OyAyID09 PSBtaWRkbGU7IDMgPT09IHJpZ2h0CgkJCS8vIE5vdGU6IGJ1dHRvbiBpcyBub3Qg bm9ybWFsaXplZCwgc28gZG9uJ3QgdXNlIGl0CgkJCWlmICggIWV2ZW50LndoaWNo ICYmIGJ1dHRvbiAhPT0gdW5kZWZpbmVkICkgewoJCQkJZXZlbnQud2hpY2ggPSAo IGJ1dHRvbiAmIDEgPyAxIDogKCBidXR0b24gJiAyID8gMyA6ICggYnV0dG9uICYg NCA/IDIgOiAwICkgKSApOwoJCQl9CgoJCQlyZXR1cm4gZXZlbnQ7CgkJfQoJfSwK CglzcGVjaWFsOiB7CgkJbG9hZDogewoJCQkvLyBQcmV2ZW50IHRyaWdnZXJlZCBp bWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkCgkJ CW5vQnViYmxlOiB0cnVlCgkJfSwKCQlmb2N1czogewoJCQkvLyBGaXJlIG5hdGl2 ZSBldmVudCBpZiBwb3NzaWJsZSBzbyBibHVyL2ZvY3VzIHNlcXVlbmNlIGlzIGNv cnJlY3QKCQkJdHJpZ2dlcjogZnVuY3Rpb24oKSB7CgkJCQlpZiAoIHRoaXMgIT09 IHNhZmVBY3RpdmVFbGVtZW50KCkgJiYgdGhpcy5mb2N1cyApIHsKCQkJCQl0cnkg ewoJCQkJCQl0aGlzLmZvY3VzKCk7CgkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQl9 IGNhdGNoICggZSApIHsKCQkJCQkJLy8gU3VwcG9ydDogSUU8OQoJCQkJCQkvLyBJ ZiB3ZSBlcnJvciBvbiBmb2N1cyB0byBoaWRkZW4gZWxlbWVudCAoIzE0ODYsICMx MjUxOCksCgkJCQkJCS8vIGxldCAudHJpZ2dlcigpIHJ1biB0aGUgaGFuZGxlcnMK CQkJCQl9CgkJCQl9CgkJCX0sCgkJCWRlbGVnYXRlVHlwZTogImZvY3VzaW4iCgkJ fSwKCQlibHVyOiB7CgkJCXRyaWdnZXI6IGZ1bmN0aW9uKCkgewoJCQkJaWYgKCB0 aGlzID09PSBzYWZlQWN0aXZlRWxlbWVudCgpICYmIHRoaXMuYmx1ciApIHsKCQkJ CQl0aGlzLmJsdXIoKTsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJCX0sCgkJ CWRlbGVnYXRlVHlwZTogImZvY3Vzb3V0IgoJCX0sCgkJY2xpY2s6IHsKCQkJLy8g Rm9yIGNoZWNrYm94LCBmaXJlIG5hdGl2ZSBldmVudCBzbyBjaGVja2VkIHN0YXRl IHdpbGwgYmUgcmlnaHQKCQkJdHJpZ2dlcjogZnVuY3Rpb24oKSB7CgkJCQlpZiAo IGpRdWVyeS5ub2RlTmFtZSggdGhpcywgImlucHV0IiApICYmIHRoaXMudHlwZSA9 PT0gImNoZWNrYm94IiAmJiB0aGlzLmNsaWNrICkgewoJCQkJCXRoaXMuY2xpY2so KTsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJCX0sCgoJCQkvLyBGb3IgY3Jv c3MtYnJvd3NlciBjb25zaXN0ZW5jeSwgZG9uJ3QgZmlyZSBuYXRpdmUgLmNsaWNr KCkgb24gbGlua3MKCQkJX2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHsKCQkJ CXJldHVybiBqUXVlcnkubm9kZU5hbWUoIGV2ZW50LnRhcmdldCwgImEiICk7CgkJ CX0KCQl9LAoKCQliZWZvcmV1bmxvYWQ6IHsKCQkJcG9zdERpc3BhdGNoOiBmdW5j dGlvbiggZXZlbnQgKSB7CgoJCQkJLy8gRXZlbiB3aGVuIHJldHVyblZhbHVlIGVx dWFscyB0byB1bmRlZmluZWQgRmlyZWZveCB3aWxsIHN0aWxsIHNob3cgYWxlcnQK CQkJCWlmICggZXZlbnQucmVzdWx0ICE9PSB1bmRlZmluZWQgKSB7CgkJCQkJZXZl bnQub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGV2ZW50LnJlc3VsdDsKCQkJ CX0KCQkJfQoJCX0KCX0sCgoJc2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVt LCBldmVudCwgYnViYmxlICkgewoJCS8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2 ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZS4KCQkvLyBGYWtlIG9yaWdp bmFsRXZlbnQgdG8gYXZvaWQgZG9ub3IncyBzdG9wUHJvcGFnYXRpb24sIGJ1dCBp ZiB0aGUKCQkvLyBzaW11bGF0ZWQgZXZlbnQgcHJldmVudHMgZGVmYXVsdCB0aGVu IHdlIGRvIHRoZSBzYW1lIG9uIHRoZSBkb25vci4KCQl2YXIgZSA9IGpRdWVyeS5l eHRlbmQoCgkJCW5ldyBqUXVlcnkuRXZlbnQoKSwKCQkJZXZlbnQsCgkJCXsKCQkJ CXR5cGU6IHR5cGUsCgkJCQlpc1NpbXVsYXRlZDogdHJ1ZSwKCQkJCW9yaWdpbmFs RXZlbnQ6IHt9CgkJCX0KCQkpOwoJCWlmICggYnViYmxlICkgewoJCQlqUXVlcnku ZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApOwoJCX0gZWxzZSB7CgkJCWpR dWVyeS5ldmVudC5kaXNwYXRjaC5jYWxsKCBlbGVtLCBlICk7CgkJfQoJCWlmICgg ZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHsKCQkJZXZlbnQucHJldmVudERlZmF1 bHQoKTsKCQl9Cgl9Cn07CgpqUXVlcnkucmVtb3ZlRXZlbnQgPSBkb2N1bWVudC5y ZW1vdmVFdmVudExpc3RlbmVyID8KCWZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5k bGUgKSB7CgkJaWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7CgkJCWVs ZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlLCBmYWxzZSApOwoJ CX0KCX0gOgoJZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHsKCQl2YXIg bmFtZSA9ICJvbiIgKyB0eXBlOwoKCQlpZiAoIGVsZW0uZGV0YWNoRXZlbnQgKSB7 CgoJCQkvLyAjODU0NSwgIzcwNTQsIHByZXZlbnRpbmcgbWVtb3J5IGxlYWtzIGZv ciBjdXN0b20gZXZlbnRzIGluIElFNi04CgkJCS8vIGRldGFjaEV2ZW50IG5lZWRl ZCBwcm9wZXJ0eSBvbiBlbGVtZW50LCBieSBuYW1lIG9mIHRoYXQgZXZlbnQsIHRv IHByb3Blcmx5IGV4cG9zZSBpdCB0byBHQwoJCQlpZiAoIHR5cGVvZiBlbGVtWyBu YW1lIF0gPT09IHN0cnVuZGVmaW5lZCApIHsKCQkJCWVsZW1bIG5hbWUgXSA9IG51 bGw7CgkJCX0KCgkJCWVsZW0uZGV0YWNoRXZlbnQoIG5hbWUsIGhhbmRsZSApOwoJ CX0KCX07CgpqUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHsK CS8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29y ZAoJaWYgKCAhKHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQpICkgewoJCXJl dHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7Cgl9CgoJLy8gRXZl bnQgb2JqZWN0CglpZiAoIHNyYyAmJiBzcmMudHlwZSApIHsKCQl0aGlzLm9yaWdp bmFsRXZlbnQgPSBzcmM7CgkJdGhpcy50eXBlID0gc3JjLnR5cGU7CgoJCS8vIEV2 ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJr ZWQgYXMgcHJldmVudGVkCgkJLy8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhl IHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuCgkJdGhpcy5pc0RlZmF1 bHRQcmV2ZW50ZWQgPSBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fAoJCQkJc3JjLmRl ZmF1bHRQcmV2ZW50ZWQgPT09IHVuZGVmaW5lZCAmJiAoCgkJCQkvLyBTdXBwb3J0 OiBJRSA8IDkKCQkJCXNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgfHwKCQkJCS8v IFN1cHBvcnQ6IEFuZHJvaWQgPCA0LjAKCQkJCXNyYy5nZXRQcmV2ZW50RGVmYXVs dCAmJiBzcmMuZ2V0UHJldmVudERlZmF1bHQoKSApID8KCQkJcmV0dXJuVHJ1ZSA6 CgkJCXJldHVybkZhbHNlOwoKCS8vIEV2ZW50IHR5cGUKCX0gZWxzZSB7CgkJdGhp cy50eXBlID0gc3JjOwoJfQoKCS8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHBy b3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0CglpZiAoIHByb3BzICkgewoJ CWpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7Cgl9CgoJLy8gQ3JlYXRlIGEg dGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmUKCXRo aXMudGltZVN0YW1wID0gc3JjICYmIHNyYy50aW1lU3RhbXAgfHwgalF1ZXJ5Lm5v dygpOwoKCS8vIE1hcmsgaXQgYXMgZml4ZWQKCXRoaXNbIGpRdWVyeS5leHBhbmRv IF0gPSB0cnVlOwp9OwoKLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMg RXZlbnRzIGFzIHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBC aW5kaW5nCi8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVs LTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbApqUXVl cnkuRXZlbnQucHJvdG90eXBlID0gewoJaXNEZWZhdWx0UHJldmVudGVkOiByZXR1 cm5GYWxzZSwKCWlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKCWlz SW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKCglwcmV2 ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7CgkJdmFyIGUgPSB0aGlzLm9yaWdpbmFs RXZlbnQ7CgoJCXRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTsK CQlpZiAoICFlICkgewoJCQlyZXR1cm47CgkJfQoKCQkvLyBJZiBwcmV2ZW50RGVm YXVsdCBleGlzdHMsIHJ1biBpdCBvbiB0aGUgb3JpZ2luYWwgZXZlbnQKCQlpZiAo IGUucHJldmVudERlZmF1bHQgKSB7CgkJCWUucHJldmVudERlZmF1bHQoKTsKCgkJ Ly8gU3VwcG9ydDogSUUKCQkvLyBPdGhlcndpc2Ugc2V0IHRoZSByZXR1cm5WYWx1 ZSBwcm9wZXJ0eSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQgdG8gZmFsc2UKCQl9IGVs c2UgewoJCQllLnJldHVyblZhbHVlID0gZmFsc2U7CgkJfQoJfSwKCXN0b3BQcm9w YWdhdGlvbjogZnVuY3Rpb24oKSB7CgkJdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZl bnQ7CgoJCXRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOwoJ CWlmICggIWUgKSB7CgkJCXJldHVybjsKCQl9CgkJLy8gSWYgc3RvcFByb3BhZ2F0 aW9uIGV4aXN0cywgcnVuIGl0IG9uIHRoZSBvcmlnaW5hbCBldmVudAoJCWlmICgg ZS5zdG9wUHJvcGFnYXRpb24gKSB7CgkJCWUuc3RvcFByb3BhZ2F0aW9uKCk7CgkJ fQoKCQkvLyBTdXBwb3J0OiBJRQoJCS8vIFNldCB0aGUgY2FuY2VsQnViYmxlIHBy b3BlcnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byB0cnVlCgkJZS5jYW5jZWxC dWJibGUgPSB0cnVlOwoJfSwKCXN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVu Y3Rpb24oKSB7CgkJdGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9 IHJldHVyblRydWU7CgkJdGhpcy5zdG9wUHJvcGFnYXRpb24oKTsKCX0KfTsKCi8v IENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIv b3V0IGFuZCBldmVudC10aW1lIGNoZWNrcwpqUXVlcnkuZWFjaCh7Cgltb3VzZWVu dGVyOiAibW91c2VvdmVyIiwKCW1vdXNlbGVhdmU6ICJtb3VzZW91dCIKfSwgZnVu Y3Rpb24oIG9yaWcsIGZpeCApIHsKCWpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmln IF0gPSB7CgkJZGVsZWdhdGVUeXBlOiBmaXgsCgkJYmluZFR5cGU6IGZpeCwKCgkJ aGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7CgkJCXZhciByZXQsCgkJCQl0YXJn ZXQgPSB0aGlzLAoJCQkJcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsCgkJ CQloYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7CgoJCQkvLyBGb3IgbW91c2Vu dGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRl IHRoZSB0YXJnZXQuCgkJCS8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBt b3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2luZG93CgkJCWlmICggIXJl bGF0ZWQgfHwgKHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5z KCB0YXJnZXQsIHJlbGF0ZWQgKSkgKSB7CgkJCQlldmVudC50eXBlID0gaGFuZGxl T2JqLm9yaWdUeXBlOwoJCQkJcmV0ID0gaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHko IHRoaXMsIGFyZ3VtZW50cyApOwoJCQkJZXZlbnQudHlwZSA9IGZpeDsKCQkJfQoJ CQlyZXR1cm4gcmV0OwoJCX0KCX07Cn0pOwoKLy8gSUUgc3VibWl0IGRlbGVnYXRp b24KaWYgKCAhc3VwcG9ydC5zdWJtaXRCdWJibGVzICkgewoKCWpRdWVyeS5ldmVu dC5zcGVjaWFsLnN1Ym1pdCA9IHsKCQlzZXR1cDogZnVuY3Rpb24oKSB7CgkJCS8v IE9ubHkgbmVlZCB0aGlzIGZvciBkZWxlZ2F0ZWQgZm9ybSBzdWJtaXQgZXZlbnRz CgkJCWlmICggalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAiZm9ybSIgKSApIHsKCQkJ CXJldHVybiBmYWxzZTsKCQkJfQoKCQkJLy8gTGF6eS1hZGQgYSBzdWJtaXQgaGFu ZGxlciB3aGVuIGEgZGVzY2VuZGFudCBmb3JtIG1heSBwb3RlbnRpYWxseSBiZSBz dWJtaXR0ZWQKCQkJalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgImNsaWNrLl9zdWJt aXQga2V5cHJlc3MuX3N1Ym1pdCIsIGZ1bmN0aW9uKCBlICkgewoJCQkJLy8gTm9k ZSBuYW1lIGNoZWNrIGF2b2lkcyBhIFZNTC1yZWxhdGVkIGNyYXNoIGluIElFICgj OTgwNykKCQkJCXZhciBlbGVtID0gZS50YXJnZXQsCgkJCQkJZm9ybSA9IGpRdWVy eS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApIHx8IGpRdWVyeS5ub2RlTmFtZSgg ZWxlbSwgImJ1dHRvbiIgKSA/IGVsZW0uZm9ybSA6IHVuZGVmaW5lZDsKCQkJCWlm ICggZm9ybSAmJiAhalF1ZXJ5Ll9kYXRhKCBmb3JtLCAic3VibWl0QnViYmxlcyIg KSApIHsKCQkJCQlqUXVlcnkuZXZlbnQuYWRkKCBmb3JtLCAic3VibWl0Ll9zdWJt aXQiLCBmdW5jdGlvbiggZXZlbnQgKSB7CgkJCQkJCWV2ZW50Ll9zdWJtaXRfYnVi YmxlID0gdHJ1ZTsKCQkJCQl9KTsKCQkJCQlqUXVlcnkuX2RhdGEoIGZvcm0sICJz dWJtaXRCdWJibGVzIiwgdHJ1ZSApOwoJCQkJfQoJCQl9KTsKCQkJLy8gcmV0dXJu IHVuZGVmaW5lZCBzaW5jZSB3ZSBkb24ndCBuZWVkIGFuIGV2ZW50IGxpc3RlbmVy CgkJfSwKCgkJcG9zdERpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7CgkJCS8v IElmIGZvcm0gd2FzIHN1Ym1pdHRlZCBieSB0aGUgdXNlciwgYnViYmxlIHRoZSBl dmVudCB1cCB0aGUgdHJlZQoJCQlpZiAoIGV2ZW50Ll9zdWJtaXRfYnViYmxlICkg ewoJCQkJZGVsZXRlIGV2ZW50Ll9zdWJtaXRfYnViYmxlOwoJCQkJaWYgKCB0aGlz LnBhcmVudE5vZGUgJiYgIWV2ZW50LmlzVHJpZ2dlciApIHsKCQkJCQlqUXVlcnku ZXZlbnQuc2ltdWxhdGUoICJzdWJtaXQiLCB0aGlzLnBhcmVudE5vZGUsIGV2ZW50 LCB0cnVlICk7CgkJCQl9CgkJCX0KCQl9LAoKCQl0ZWFyZG93bjogZnVuY3Rpb24o KSB7CgkJCS8vIE9ubHkgbmVlZCB0aGlzIGZvciBkZWxlZ2F0ZWQgZm9ybSBzdWJt aXQgZXZlbnRzCgkJCWlmICggalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAiZm9ybSIg KSApIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoKCQkJLy8gUmVtb3ZlIGRlbGVn YXRlZCBoYW5kbGVyczsgY2xlYW5EYXRhIGV2ZW50dWFsbHkgcmVhcHMgc3VibWl0 IGhhbmRsZXJzIGF0dGFjaGVkIGFib3ZlCgkJCWpRdWVyeS5ldmVudC5yZW1vdmUo IHRoaXMsICIuX3N1Ym1pdCIgKTsKCQl9Cgl9Owp9CgovLyBJRSBjaGFuZ2UgZGVs ZWdhdGlvbiBhbmQgY2hlY2tib3gvcmFkaW8gZml4CmlmICggIXN1cHBvcnQuY2hh bmdlQnViYmxlcyApIHsKCglqUXVlcnkuZXZlbnQuc3BlY2lhbC5jaGFuZ2UgPSB7 CgoJCXNldHVwOiBmdW5jdGlvbigpIHsKCgkJCWlmICggcmZvcm1FbGVtcy50ZXN0 KCB0aGlzLm5vZGVOYW1lICkgKSB7CgkJCQkvLyBJRSBkb2Vzbid0IGZpcmUgY2hh bmdlIG9uIGEgY2hlY2svcmFkaW8gdW50aWwgYmx1cjsgdHJpZ2dlciBpdCBvbiBj bGljawoJCQkJLy8gYWZ0ZXIgYSBwcm9wZXJ0eWNoYW5nZS4gRWF0IHRoZSBibHVy LWNoYW5nZSBpbiBzcGVjaWFsLmNoYW5nZS5oYW5kbGUuCgkJCQkvLyBUaGlzIHN0 aWxsIGZpcmVzIG9uY2hhbmdlIGEgc2Vjb25kIHRpbWUgZm9yIGNoZWNrL3JhZGlv IGFmdGVyIGJsdXIuCgkJCQlpZiAoIHRoaXMudHlwZSA9PT0gImNoZWNrYm94IiB8 fCB0aGlzLnR5cGUgPT09ICJyYWRpbyIgKSB7CgkJCQkJalF1ZXJ5LmV2ZW50LmFk ZCggdGhpcywgInByb3BlcnR5Y2hhbmdlLl9jaGFuZ2UiLCBmdW5jdGlvbiggZXZl bnQgKSB7CgkJCQkJCWlmICggZXZlbnQub3JpZ2luYWxFdmVudC5wcm9wZXJ0eU5h bWUgPT09ICJjaGVja2VkIiApIHsKCQkJCQkJCXRoaXMuX2p1c3RfY2hhbmdlZCA9 IHRydWU7CgkJCQkJCX0KCQkJCQl9KTsKCQkJCQlqUXVlcnkuZXZlbnQuYWRkKCB0 aGlzLCAiY2xpY2suX2NoYW5nZSIsIGZ1bmN0aW9uKCBldmVudCApIHsKCQkJCQkJ aWYgKCB0aGlzLl9qdXN0X2NoYW5nZWQgJiYgIWV2ZW50LmlzVHJpZ2dlciApIHsK CQkJCQkJCXRoaXMuX2p1c3RfY2hhbmdlZCA9IGZhbHNlOwoJCQkJCQl9CgkJCQkJ CS8vIEFsbG93IHRyaWdnZXJlZCwgc2ltdWxhdGVkIGNoYW5nZSBldmVudHMgKCMx MTUwMCkKCQkJCQkJalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCAiY2hhbmdlIiwgdGhp cywgZXZlbnQsIHRydWUgKTsKCQkJCQl9KTsKCQkJCX0KCQkJCXJldHVybiBmYWxz ZTsKCQkJfQoJCQkvLyBEZWxlZ2F0ZWQgZXZlbnQ7IGxhenktYWRkIGEgY2hhbmdl IGhhbmRsZXIgb24gZGVzY2VuZGFudCBpbnB1dHMKCQkJalF1ZXJ5LmV2ZW50LmFk ZCggdGhpcywgImJlZm9yZWFjdGl2YXRlLl9jaGFuZ2UiLCBmdW5jdGlvbiggZSAp IHsKCQkJCXZhciBlbGVtID0gZS50YXJnZXQ7CgoJCQkJaWYgKCByZm9ybUVsZW1z LnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJiAhalF1ZXJ5Ll9kYXRhKCBlbGVtLCAi Y2hhbmdlQnViYmxlcyIgKSApIHsKCQkJCQlqUXVlcnkuZXZlbnQuYWRkKCBlbGVt LCAiY2hhbmdlLl9jaGFuZ2UiLCBmdW5jdGlvbiggZXZlbnQgKSB7CgkJCQkJCWlm ICggdGhpcy5wYXJlbnROb2RlICYmICFldmVudC5pc1NpbXVsYXRlZCAmJiAhZXZl bnQuaXNUcmlnZ2VyICkgewoJCQkJCQkJalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCAi Y2hhbmdlIiwgdGhpcy5wYXJlbnROb2RlLCBldmVudCwgdHJ1ZSApOwoJCQkJCQl9 CgkJCQkJfSk7CgkJCQkJalF1ZXJ5Ll9kYXRhKCBlbGVtLCAiY2hhbmdlQnViYmxl cyIsIHRydWUgKTsKCQkJCX0KCQkJfSk7CgkJfSwKCgkJaGFuZGxlOiBmdW5jdGlv biggZXZlbnQgKSB7CgkJCXZhciBlbGVtID0gZXZlbnQudGFyZ2V0OwoKCQkJLy8g U3dhbGxvdyBuYXRpdmUgY2hhbmdlIGV2ZW50cyBmcm9tIGNoZWNrYm94L3JhZGlv LCB3ZSBhbHJlYWR5IHRyaWdnZXJlZCB0aGVtIGFib3ZlCgkJCWlmICggdGhpcyAh PT0gZWxlbSB8fCBldmVudC5pc1NpbXVsYXRlZCB8fCBldmVudC5pc1RyaWdnZXIg fHwgKGVsZW0udHlwZSAhPT0gInJhZGlvIiAmJiBlbGVtLnR5cGUgIT09ICJjaGVj a2JveCIpICkgewoJCQkJcmV0dXJuIGV2ZW50LmhhbmRsZU9iai5oYW5kbGVyLmFw cGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKCQkJfQoJCX0sCgoJCXRlYXJkb3duOiBm dW5jdGlvbigpIHsKCQkJalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgIi5fY2hh bmdlIiApOwoKCQkJcmV0dXJuICFyZm9ybUVsZW1zLnRlc3QoIHRoaXMubm9kZU5h bWUgKTsKCQl9Cgl9Owp9CgovLyBDcmVhdGUgImJ1YmJsaW5nIiBmb2N1cyBhbmQg Ymx1ciBldmVudHMKaWYgKCAhc3VwcG9ydC5mb2N1c2luQnViYmxlcyApIHsKCWpR dWVyeS5lYWNoKHsgZm9jdXM6ICJmb2N1c2luIiwgYmx1cjogImZvY3Vzb3V0IiB9 LCBmdW5jdGlvbiggb3JpZywgZml4ICkgewoKCQkvLyBBdHRhY2ggYSBzaW5nbGUg Y2FwdHVyaW5nIGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUg d2FudHMgZm9jdXNpbi9mb2N1c291dAoJCXZhciBoYW5kbGVyID0gZnVuY3Rpb24o IGV2ZW50ICkgewoJCQkJalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50 LnRhcmdldCwgalF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSwgdHJ1ZSApOwoJCQl9 OwoKCQlqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7CgkJCXNldHVwOiBm dW5jdGlvbigpIHsKCQkJCXZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwg dGhpcywKCQkJCQlhdHRhY2hlcyA9IGpRdWVyeS5fZGF0YSggZG9jLCBmaXggKTsK CgkJCQlpZiAoICFhdHRhY2hlcyApIHsKCQkJCQlkb2MuYWRkRXZlbnRMaXN0ZW5l ciggb3JpZywgaGFuZGxlciwgdHJ1ZSApOwoJCQkJfQoJCQkJalF1ZXJ5Ll9kYXRh KCBkb2MsIGZpeCwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7CgkJCX0sCgkJCXRl YXJkb3duOiBmdW5jdGlvbigpIHsKCQkJCXZhciBkb2MgPSB0aGlzLm93bmVyRG9j dW1lbnQgfHwgdGhpcywKCQkJCQlhdHRhY2hlcyA9IGpRdWVyeS5fZGF0YSggZG9j LCBmaXggKSAtIDE7CgoJCQkJaWYgKCAhYXR0YWNoZXMgKSB7CgkJCQkJZG9jLnJl bW92ZUV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTsKCQkJCQlq UXVlcnkuX3JlbW92ZURhdGEoIGRvYywgZml4ICk7CgkJCQl9IGVsc2UgewoJCQkJ CWpRdWVyeS5fZGF0YSggZG9jLCBmaXgsIGF0dGFjaGVzICk7CgkJCQl9CgkJCX0K CQl9OwoJfSk7Cn0KCmpRdWVyeS5mbi5leHRlbmQoewoKCW9uOiBmdW5jdGlvbigg dHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgLypJTlRFUk5BTCovIG9uZSApIHsK CQl2YXIgdHlwZSwgb3JpZ0ZuOwoKCQkvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2Yg dHlwZXMvaGFuZGxlcnMKCQlpZiAoIHR5cGVvZiB0eXBlcyA9PT0gIm9iamVjdCIg KSB7CgkJCS8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApCgkJCWlm ICggdHlwZW9mIHNlbGVjdG9yICE9PSAic3RyaW5nIiApIHsKCQkJCS8vICggdHlw ZXMtT2JqZWN0LCBkYXRhICkKCQkJCWRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yOwoJ CQkJc2VsZWN0b3IgPSB1bmRlZmluZWQ7CgkJCX0KCQkJZm9yICggdHlwZSBpbiB0 eXBlcyApIHsKCQkJCXRoaXMub24oIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBl c1sgdHlwZSBdLCBvbmUgKTsKCQkJfQoJCQlyZXR1cm4gdGhpczsKCQl9CgoJCWlm ICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7CgkJCS8vICggdHlwZXMs IGZuICkKCQkJZm4gPSBzZWxlY3RvcjsKCQkJZGF0YSA9IHNlbGVjdG9yID0gdW5k ZWZpbmVkOwoJCX0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7CgkJCWlmICggdHlw ZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsKCQkJCS8vICggdHlwZXMsIHNl bGVjdG9yLCBmbiApCgkJCQlmbiA9IGRhdGE7CgkJCQlkYXRhID0gdW5kZWZpbmVk OwoJCQl9IGVsc2UgewoJCQkJLy8gKCB0eXBlcywgZGF0YSwgZm4gKQoJCQkJZm4g PSBkYXRhOwoJCQkJZGF0YSA9IHNlbGVjdG9yOwoJCQkJc2VsZWN0b3IgPSB1bmRl ZmluZWQ7CgkJCX0KCQl9CgkJaWYgKCBmbiA9PT0gZmFsc2UgKSB7CgkJCWZuID0g cmV0dXJuRmFsc2U7CgkJfSBlbHNlIGlmICggIWZuICkgewoJCQlyZXR1cm4gdGhp czsKCQl9CgoJCWlmICggb25lID09PSAxICkgewoJCQlvcmlnRm4gPSBmbjsKCQkJ Zm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7CgkJCQkvLyBDYW4gdXNlIGFuIGVtcHR5 IHNldCwgc2luY2UgZXZlbnQgY29udGFpbnMgdGhlIGluZm8KCQkJCWpRdWVyeSgp Lm9mZiggZXZlbnQgKTsKCQkJCXJldHVybiBvcmlnRm4uYXBwbHkoIHRoaXMsIGFy Z3VtZW50cyApOwoJCQl9OwoJCQkvLyBVc2Ugc2FtZSBndWlkIHNvIGNhbGxlciBj YW4gcmVtb3ZlIHVzaW5nIG9yaWdGbgoJCQlmbi5ndWlkID0gb3JpZ0ZuLmd1aWQg fHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTsKCQl9CgkJcmV0dXJu IHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CgkJCWpRdWVyeS5ldmVudC5hZGQoIHRo aXMsIHR5cGVzLCBmbiwgZGF0YSwgc2VsZWN0b3IgKTsKCQl9KTsKCX0sCglvbmU6 IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkgewoJCXJldHVy biB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAxICk7Cgl9LAoJ b2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHsKCQl2YXIgaGFu ZGxlT2JqLCB0eXBlOwoJCWlmICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1 bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkgewoJCQkvLyAoIGV2ZW50ICkgIGRpc3Bh dGNoZWQgalF1ZXJ5LkV2ZW50CgkJCWhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9i ajsKCQkJalF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZigKCQkJCWhh bmRsZU9iai5uYW1lc3BhY2UgPyBoYW5kbGVPYmoub3JpZ1R5cGUgKyAiLiIgKyBo YW5kbGVPYmoubmFtZXNwYWNlIDogaGFuZGxlT2JqLm9yaWdUeXBlLAoJCQkJaGFu ZGxlT2JqLnNlbGVjdG9yLAoJCQkJaGFuZGxlT2JqLmhhbmRsZXIKCQkJKTsKCQkJ cmV0dXJuIHRoaXM7CgkJfQoJCWlmICggdHlwZW9mIHR5cGVzID09PSAib2JqZWN0 IiApIHsKCQkJLy8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdICkKCQkJZm9y ICggdHlwZSBpbiB0eXBlcyApIHsKCQkJCXRoaXMub2ZmKCB0eXBlLCBzZWxlY3Rv ciwgdHlwZXNbIHR5cGUgXSApOwoJCQl9CgkJCXJldHVybiB0aGlzOwoJCX0KCQlp ZiAoIHNlbGVjdG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJm dW5jdGlvbiIgKSB7CgkJCS8vICggdHlwZXMgWywgZm5dICkKCQkJZm4gPSBzZWxl Y3RvcjsKCQkJc2VsZWN0b3IgPSB1bmRlZmluZWQ7CgkJfQoJCWlmICggZm4gPT09 IGZhbHNlICkgewoJCQlmbiA9IHJldHVybkZhbHNlOwoJCX0KCQlyZXR1cm4gdGhp cy5lYWNoKGZ1bmN0aW9uKCkgewoJCQlqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlz LCB0eXBlcywgZm4sIHNlbGVjdG9yICk7CgkJfSk7Cgl9LAoKCXRyaWdnZXI6IGZ1 bmN0aW9uKCB0eXBlLCBkYXRhICkgewoJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rp b24oKSB7CgkJCWpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlz ICk7CgkJfSk7Cgl9LAoJdHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBk YXRhICkgewoJCXZhciBlbGVtID0gdGhpc1swXTsKCQlpZiAoIGVsZW0gKSB7CgkJ CXJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgZWxlbSwg dHJ1ZSApOwoJCX0KCX0KfSk7CgoKZnVuY3Rpb24gY3JlYXRlU2FmZUZyYWdtZW50 KCBkb2N1bWVudCApIHsKCXZhciBsaXN0ID0gbm9kZU5hbWVzLnNwbGl0KCAifCIg KSwKCQlzYWZlRnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQo KTsKCglpZiAoIHNhZmVGcmFnLmNyZWF0ZUVsZW1lbnQgKSB7CgkJd2hpbGUgKCBs aXN0Lmxlbmd0aCApIHsKCQkJc2FmZUZyYWcuY3JlYXRlRWxlbWVudCgKCQkJCWxp c3QucG9wKCkKCQkJKTsKCQl9Cgl9CglyZXR1cm4gc2FmZUZyYWc7Cn0KCnZhciBu b2RlTmFtZXMgPSAiYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJkaXxjYW52YXN8 ZGF0YXxkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3Rlcnwi ICsKCQkiaGVhZGVyfGhncm91cHxtYXJrfG1ldGVyfG5hdnxvdXRwdXR8cHJvZ3Jl c3N8c2VjdGlvbnxzdW1tYXJ5fHRpbWV8dmlkZW8iLAoJcmlubGluZWpRdWVyeSA9 IC8galF1ZXJ5XGQrPSIoPzpudWxsfFxkKykiL2csCglybm9zaGltY2FjaGUgPSBu ZXcgUmVnRXhwKCI8KD86IiArIG5vZGVOYW1lcyArICIpW1xccy8+XSIsICJpIiks CglybGVhZGluZ1doaXRlc3BhY2UgPSAvXlxzKy8sCglyeGh0bWxUYWcgPSAvPCg/ IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0p KChbXHc6XSspW14+XSopXC8+L2dpLAoJcnRhZ05hbWUgPSAvPChbXHc6XSspLywK CXJ0Ym9keSA9IC88dGJvZHkvaSwKCXJodG1sID0gLzx8JiM/XHcrOy8sCglybm9J bm5lcmh0bWwgPSAvPCg/OnNjcmlwdHxzdHlsZXxsaW5rKS9pLAoJLy8gY2hlY2tl ZD0iY2hlY2tlZCIgb3IgY2hlY2tlZAoJcmNoZWNrZWQgPSAvY2hlY2tlZFxzKig/ OltePV18PVxzKi5jaGVja2VkLikvaSwKCXJzY3JpcHRUeXBlID0gL14kfFwvKD86 amF2YXxlY21hKXNjcmlwdC9pLAoJcnNjcmlwdFR5cGVNYXNrZWQgPSAvXnRydWVc LyguKikvLAoJcmNsZWFuU2NyaXB0ID0gL15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8 KD86XF1cXXwtLSk+XHMqJC9nLAoKCS8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2Ug dGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApCgl3cmFwTWFwID0gewoJCW9w dGlvbjogWyAxLCAiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsICI8L3Nl bGVjdD4iIF0sCgkJbGVnZW5kOiBbIDEsICI8ZmllbGRzZXQ+IiwgIjwvZmllbGRz ZXQ+IiBdLAoJCWFyZWE6IFsgMSwgIjxtYXA+IiwgIjwvbWFwPiIgXSwKCQlwYXJh bTogWyAxLCAiPG9iamVjdD4iLCAiPC9vYmplY3Q+IiBdLAoJCXRoZWFkOiBbIDEs ICI8dGFibGU+IiwgIjwvdGFibGU+IiBdLAoJCXRyOiBbIDIsICI8dGFibGU+PHRi b2R5PiIsICI8L3Rib2R5PjwvdGFibGU+IiBdLAoJCWNvbDogWyAyLCAiPHRhYmxl Pjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCAiPC9jb2xncm91cD48L3RhYmxl PiIgXSwKCQl0ZDogWyAzLCAiPHRhYmxlPjx0Ym9keT48dHI+IiwgIjwvdHI+PC90 Ym9keT48L3RhYmxlPiIgXSwKCgkJLy8gSUU2LTggY2FuJ3Qgc2VyaWFsaXplIGxp bmssIHNjcmlwdCwgc3R5bGUsIG9yIGFueSBodG1sNSAoTm9TY29wZSkgdGFncywK CQkvLyB1bmxlc3Mgd3JhcHBlZCBpbiBhIGRpdiB3aXRoIG5vbi1icmVha2luZyBj aGFyYWN0ZXJzIGluIGZyb250IG9mIGl0LgoJCV9kZWZhdWx0OiBzdXBwb3J0Lmh0 bWxTZXJpYWxpemUgPyBbIDAsICIiLCAiIiBdIDogWyAxLCAiWDxkaXY+IiwgIjwv ZGl2PiIgIF0KCX0sCglzYWZlRnJhZ21lbnQgPSBjcmVhdGVTYWZlRnJhZ21lbnQo IGRvY3VtZW50ICksCglmcmFnbWVudERpdiA9IHNhZmVGcmFnbWVudC5hcHBlbmRD aGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikgKTsKCndyYXBNYXAu b3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbjsKd3JhcE1hcC50Ym9keSA9IHdyYXBN YXAudGZvb3QgPSB3cmFwTWFwLmNvbGdyb3VwID0gd3JhcE1hcC5jYXB0aW9uID0g d3JhcE1hcC50aGVhZDsKd3JhcE1hcC50aCA9IHdyYXBNYXAudGQ7CgpmdW5jdGlv biBnZXRBbGwoIGNvbnRleHQsIHRhZyApIHsKCXZhciBlbGVtcywgZWxlbSwKCQlp ID0gMCwKCQlmb3VuZCA9IHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdO YW1lICE9PSBzdHJ1bmRlZmluZWQgPyBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdO YW1lKCB0YWcgfHwgIioiICkgOgoJCQl0eXBlb2YgY29udGV4dC5xdWVyeVNlbGVj dG9yQWxsICE9PSBzdHJ1bmRlZmluZWQgPyBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JB bGwoIHRhZyB8fCAiKiIgKSA6CgkJCXVuZGVmaW5lZDsKCglpZiAoICFmb3VuZCAp IHsKCQlmb3IgKCBmb3VuZCA9IFtdLCBlbGVtcyA9IGNvbnRleHQuY2hpbGROb2Rl cyB8fCBjb250ZXh0OyAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7 CgkJCWlmICggIXRhZyB8fCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sIHRhZyApICkg ewoJCQkJZm91bmQucHVzaCggZWxlbSApOwoJCQl9IGVsc2UgewoJCQkJalF1ZXJ5 Lm1lcmdlKCBmb3VuZCwgZ2V0QWxsKCBlbGVtLCB0YWcgKSApOwoJCQl9CgkJfQoJ fQoKCXJldHVybiB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgalF1ZXJ5Lm5v ZGVOYW1lKCBjb250ZXh0LCB0YWcgKSA/CgkJalF1ZXJ5Lm1lcmdlKCBbIGNvbnRl eHQgXSwgZm91bmQgKSA6CgkJZm91bmQ7Cn0KCi8vIFVzZWQgaW4gYnVpbGRGcmFn bWVudCwgZml4ZXMgdGhlIGRlZmF1bHRDaGVja2VkIHByb3BlcnR5CmZ1bmN0aW9u IGZpeERlZmF1bHRDaGVja2VkKCBlbGVtICkgewoJaWYgKCByY2hlY2thYmxlVHlw ZS50ZXN0KCBlbGVtLnR5cGUgKSApIHsKCQllbGVtLmRlZmF1bHRDaGVja2VkID0g ZWxlbS5jaGVja2VkOwoJfQp9CgovLyBTdXBwb3J0OiBJRTw4Ci8vIE1hbmlwdWxh dGluZyB0YWJsZXMgcmVxdWlyZXMgYSB0Ym9keQpmdW5jdGlvbiBtYW5pcHVsYXRp b25UYXJnZXQoIGVsZW0sIGNvbnRlbnQgKSB7CglyZXR1cm4galF1ZXJ5Lm5vZGVO YW1lKCBlbGVtLCAidGFibGUiICkgJiYKCQlqUXVlcnkubm9kZU5hbWUoIGNvbnRl bnQubm9kZVR5cGUgIT09IDExID8gY29udGVudCA6IGNvbnRlbnQuZmlyc3RDaGls ZCwgInRyIiApID8KCgkJZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHki KVswXSB8fAoJCQllbGVtLmFwcGVuZENoaWxkKCBlbGVtLm93bmVyRG9jdW1lbnQu Y3JlYXRlRWxlbWVudCgidGJvZHkiKSApIDoKCQllbGVtOwp9CgovLyBSZXBsYWNl L3Jlc3RvcmUgdGhlIHR5cGUgYXR0cmlidXRlIG9mIHNjcmlwdCBlbGVtZW50cyBm b3Igc2FmZSBET00gbWFuaXB1bGF0aW9uCmZ1bmN0aW9uIGRpc2FibGVTY3JpcHQo IGVsZW0gKSB7CgllbGVtLnR5cGUgPSAoalF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwg InR5cGUiICkgIT09IG51bGwpICsgIi8iICsgZWxlbS50eXBlOwoJcmV0dXJuIGVs ZW07Cn0KZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHsKCXZhciBtYXRj aCA9IHJzY3JpcHRUeXBlTWFza2VkLmV4ZWMoIGVsZW0udHlwZSApOwoJaWYgKCBt YXRjaCApIHsKCQllbGVtLnR5cGUgPSBtYXRjaFsxXTsKCX0gZWxzZSB7CgkJZWxl bS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKTsKCX0KCXJldHVybiBlbGVtOwp9Cgov LyBNYXJrIHNjcmlwdHMgYXMgaGF2aW5nIGFscmVhZHkgYmVlbiBldmFsdWF0ZWQK ZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkgewoJ dmFyIGVsZW0sCgkJaSA9IDA7Cglmb3IgKCA7IChlbGVtID0gZWxlbXNbaV0pICE9 IG51bGw7IGkrKyApIHsKCQlqUXVlcnkuX2RhdGEoIGVsZW0sICJnbG9iYWxFdmFs IiwgIXJlZkVsZW1lbnRzIHx8IGpRdWVyeS5fZGF0YSggcmVmRWxlbWVudHNbaV0s ICJnbG9iYWxFdmFsIiApICk7Cgl9Cn0KCmZ1bmN0aW9uIGNsb25lQ29weUV2ZW50 KCBzcmMsIGRlc3QgKSB7CgoJaWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxIHx8ICFq UXVlcnkuaGFzRGF0YSggc3JjICkgKSB7CgkJcmV0dXJuOwoJfQoKCXZhciB0eXBl LCBpLCBsLAoJCW9sZERhdGEgPSBqUXVlcnkuX2RhdGEoIHNyYyApLAoJCWN1ckRh dGEgPSBqUXVlcnkuX2RhdGEoIGRlc3QsIG9sZERhdGEgKSwKCQlldmVudHMgPSBv bGREYXRhLmV2ZW50czsKCglpZiAoIGV2ZW50cyApIHsKCQlkZWxldGUgY3VyRGF0 YS5oYW5kbGU7CgkJY3VyRGF0YS5ldmVudHMgPSB7fTsKCgkJZm9yICggdHlwZSBp biBldmVudHMgKSB7CgkJCWZvciAoIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0u bGVuZ3RoOyBpIDwgbDsgaSsrICkgewoJCQkJalF1ZXJ5LmV2ZW50LmFkZCggZGVz dCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApOwoJCQl9CgkJfQoJfQoKCS8v IG1ha2UgdGhlIGNsb25lZCBwdWJsaWMgZGF0YSBvYmplY3QgYSBjb3B5IGZyb20g dGhlIG9yaWdpbmFsCglpZiAoIGN1ckRhdGEuZGF0YSApIHsKCQljdXJEYXRhLmRh dGEgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyRGF0YS5kYXRhICk7Cgl9Cn0KCmZ1 bmN0aW9uIGZpeENsb25lTm9kZUlzc3Vlcyggc3JjLCBkZXN0ICkgewoJdmFyIG5v ZGVOYW1lLCBlLCBkYXRhOwoKCS8vIFdlIGRvIG5vdCBuZWVkIHRvIGRvIGFueXRo aW5nIGZvciBub24tRWxlbWVudHMKCWlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSAp IHsKCQlyZXR1cm47Cgl9CgoJbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93 ZXJDYXNlKCk7CgoJLy8gSUU2LTggY29waWVzIGV2ZW50cyBib3VuZCB2aWEgYXR0 YWNoRXZlbnQgd2hlbiB1c2luZyBjbG9uZU5vZGUuCglpZiAoICFzdXBwb3J0Lm5v Q2xvbmVFdmVudCAmJiBkZXN0WyBqUXVlcnkuZXhwYW5kbyBdICkgewoJCWRhdGEg PSBqUXVlcnkuX2RhdGEoIGRlc3QgKTsKCgkJZm9yICggZSBpbiBkYXRhLmV2ZW50 cyApIHsKCQkJalF1ZXJ5LnJlbW92ZUV2ZW50KCBkZXN0LCBlLCBkYXRhLmhhbmRs ZSApOwoJCX0KCgkJLy8gRXZlbnQgZGF0YSBnZXRzIHJlZmVyZW5jZWQgaW5zdGVh ZCBvZiBjb3BpZWQgaWYgdGhlIGV4cGFuZG8gZ2V0cyBjb3BpZWQgdG9vCgkJZGVz dC5yZW1vdmVBdHRyaWJ1dGUoIGpRdWVyeS5leHBhbmRvICk7Cgl9CgoJLy8gSUUg YmxhbmtzIGNvbnRlbnRzIHdoZW4gY2xvbmluZyBzY3JpcHRzLCBhbmQgdHJpZXMg dG8gZXZhbHVhdGUgbmV3bHktc2V0IHRleHQKCWlmICggbm9kZU5hbWUgPT09ICJz Y3JpcHQiICYmIGRlc3QudGV4dCAhPT0gc3JjLnRleHQgKSB7CgkJZGlzYWJsZVNj cmlwdCggZGVzdCApLnRleHQgPSBzcmMudGV4dDsKCQlyZXN0b3JlU2NyaXB0KCBk ZXN0ICk7CgoJLy8gSUU2LTEwIGltcHJvcGVybHkgY2xvbmVzIGNoaWxkcmVuIG9m IG9iamVjdCBlbGVtZW50cyB1c2luZyBjbGFzc2lkLgoJLy8gSUUxMCB0aHJvd3Mg Tm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgaWYgcGFyZW50IGlzIG51bGwsICMx MjEzMi4KCX0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSAib2JqZWN0IiApIHsKCQlp ZiAoIGRlc3QucGFyZW50Tm9kZSApIHsKCQkJZGVzdC5vdXRlckhUTUwgPSBzcmMu b3V0ZXJIVE1MOwoJCX0KCgkJLy8gVGhpcyBwYXRoIGFwcGVhcnMgdW5hdm9pZGFi bGUgZm9yIElFOS4gV2hlbiBjbG9uaW5nIGFuIG9iamVjdAoJCS8vIGVsZW1lbnQg aW4gSUU5LCB0aGUgb3V0ZXJIVE1MIHN0cmF0ZWd5IGFib3ZlIGlzIG5vdCBzdWZm aWNpZW50LgoJCS8vIElmIHRoZSBzcmMgaGFzIGlubmVySFRNTCBhbmQgdGhlIGRl c3RpbmF0aW9uIGRvZXMgbm90LAoJCS8vIGNvcHkgdGhlIHNyYy5pbm5lckhUTUwg aW50byB0aGUgZGVzdC5pbm5lckhUTUwuICMxMDMyNAoJCWlmICggc3VwcG9ydC5o dG1sNUNsb25lICYmICggc3JjLmlubmVySFRNTCAmJiAhalF1ZXJ5LnRyaW0oZGVz dC5pbm5lckhUTUwpICkgKSB7CgkJCWRlc3QuaW5uZXJIVE1MID0gc3JjLmlubmVy SFRNTDsKCQl9CgoJfSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJpbnB1dCIgJiYg cmNoZWNrYWJsZVR5cGUudGVzdCggc3JjLnR5cGUgKSApIHsKCQkvLyBJRTYtOCBm YWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNo ZWNrYm94CgkJLy8gb3IgcmFkaW8gYnV0dG9uLiBXb3JzZSwgSUU2LTcgZmFpbCB0 byBnaXZlIHRoZSBjbG9uZWQgZWxlbWVudAoJCS8vIGEgY2hlY2tlZCBhcHBlYXJh bmNlIGlmIHRoZSBkZWZhdWx0Q2hlY2tlZCB2YWx1ZSBpc24ndCBhbHNvIHNldAoK CQlkZXN0LmRlZmF1bHRDaGVja2VkID0gZGVzdC5jaGVja2VkID0gc3JjLmNoZWNr ZWQ7CgoJCS8vIElFNi03IGdldCBjb25mdXNlZCBhbmQgZW5kIHVwIHNldHRpbmcg dGhlIHZhbHVlIG9mIGEgY2xvbmVkCgkJLy8gY2hlY2tib3gvcmFkaW8gYnV0dG9u IHRvIGFuIGVtcHR5IHN0cmluZyBpbnN0ZWFkIG9mICJvbiIKCQlpZiAoIGRlc3Qu dmFsdWUgIT09IHNyYy52YWx1ZSApIHsKCQkJZGVzdC52YWx1ZSA9IHNyYy52YWx1 ZTsKCQl9CgoJLy8gSUU2LTggZmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBv cHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQKCS8vIHN0YXRlIHdoZW4gY2xv bmluZyBvcHRpb25zCgl9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gIm9wdGlvbiIg KSB7CgkJZGVzdC5kZWZhdWx0U2VsZWN0ZWQgPSBkZXN0LnNlbGVjdGVkID0gc3Jj LmRlZmF1bHRTZWxlY3RlZDsKCgkvLyBJRTYtOCBmYWlscyB0byBzZXQgdGhlIGRl ZmF1bHRWYWx1ZSB0byB0aGUgY29ycmVjdCB2YWx1ZSB3aGVuCgkvLyBjbG9uaW5n IG90aGVyIHR5cGVzIG9mIGlucHV0IGZpZWxkcwoJfSBlbHNlIGlmICggbm9kZU5h bWUgPT09ICJpbnB1dCIgfHwgbm9kZU5hbWUgPT09ICJ0ZXh0YXJlYSIgKSB7CgkJ ZGVzdC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlOwoJfQp9CgpqUXVl cnkuZXh0ZW5kKHsKCWNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50 cywgZGVlcERhdGFBbmRFdmVudHMgKSB7CgkJdmFyIGRlc3RFbGVtZW50cywgbm9k ZSwgY2xvbmUsIGksIHNyY0VsZW1lbnRzLAoJCQlpblBhZ2UgPSBqUXVlcnkuY29u dGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApOwoKCQlpZiAoIHN1cHBv cnQuaHRtbDVDbG9uZSB8fCBqUXVlcnkuaXNYTUxEb2MoZWxlbSkgfHwgIXJub3No aW1jYWNoZS50ZXN0KCAiPCIgKyBlbGVtLm5vZGVOYW1lICsgIj4iICkgKSB7CgkJ CWNsb25lID0gZWxlbS5jbG9uZU5vZGUoIHRydWUgKTsKCgkJLy8gSUU8PTggZG9l cyBub3QgcHJvcGVybHkgY2xvbmUgZGV0YWNoZWQsIHVua25vd24gZWxlbWVudCBu b2RlcwoJCX0gZWxzZSB7CgkJCWZyYWdtZW50RGl2LmlubmVySFRNTCA9IGVsZW0u b3V0ZXJIVE1MOwoJCQlmcmFnbWVudERpdi5yZW1vdmVDaGlsZCggY2xvbmUgPSBm cmFnbWVudERpdi5maXJzdENoaWxkICk7CgkJfQoKCQlpZiAoICghc3VwcG9ydC5u b0Nsb25lRXZlbnQgfHwgIXN1cHBvcnQubm9DbG9uZUNoZWNrZWQpICYmCgkJCQko ZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSkgJiYg IWpRdWVyeS5pc1hNTERvYyhlbGVtKSApIHsKCgkJCS8vIFdlIGVzY2hldyBTaXp6 bGUgaGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczogaHR0cDovL2pzcGVyZi5j b20vZ2V0YWxsLXZzLXNpenpsZS8yCgkJCWRlc3RFbGVtZW50cyA9IGdldEFsbCgg Y2xvbmUgKTsKCQkJc3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTsKCgkJCS8v IEZpeCBhbGwgSUUgY2xvbmluZyBpc3N1ZXMKCQkJZm9yICggaSA9IDA7IChub2Rl ID0gc3JjRWxlbWVudHNbaV0pICE9IG51bGw7ICsraSApIHsKCQkJCS8vIEVuc3Vy ZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBub2RlIGlzIG5vdCBudWxsOyBGaXhlcyAj OTU4NwoJCQkJaWYgKCBkZXN0RWxlbWVudHNbaV0gKSB7CgkJCQkJZml4Q2xvbmVO b2RlSXNzdWVzKCBub2RlLCBkZXN0RWxlbWVudHNbaV0gKTsKCQkJCX0KCQkJfQoJ CX0KCgkJLy8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRo ZSBjbG9uZQoJCWlmICggZGF0YUFuZEV2ZW50cyApIHsKCQkJaWYgKCBkZWVwRGF0 YUFuZEV2ZW50cyApIHsKCQkJCXNyY0VsZW1lbnRzID0gc3JjRWxlbWVudHMgfHwg Z2V0QWxsKCBlbGVtICk7CgkJCQlkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMg fHwgZ2V0QWxsKCBjbG9uZSApOwoKCQkJCWZvciAoIGkgPSAwOyAobm9kZSA9IHNy Y0VsZW1lbnRzW2ldKSAhPSBudWxsOyBpKysgKSB7CgkJCQkJY2xvbmVDb3B5RXZl bnQoIG5vZGUsIGRlc3RFbGVtZW50c1tpXSApOwoJCQkJfQoJCQl9IGVsc2UgewoJ CQkJY2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7CgkJCX0KCQl9CgoJCS8v IFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3RvcnkKCQlkZXN0RWxlbWVu dHMgPSBnZXRBbGwoIGNsb25lLCAic2NyaXB0IiApOwoJCWlmICggZGVzdEVsZW1l bnRzLmxlbmd0aCA+IDAgKSB7CgkJCXNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50 cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sICJzY3JpcHQiICkgKTsKCQl9CgoJ CWRlc3RFbGVtZW50cyA9IHNyY0VsZW1lbnRzID0gbm9kZSA9IG51bGw7CgoJCS8v IFJldHVybiB0aGUgY2xvbmVkIHNldAoJCXJldHVybiBjbG9uZTsKCX0sCgoJYnVp bGRGcmFnbWVudDogZnVuY3Rpb24oIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBz ZWxlY3Rpb24gKSB7CgkJdmFyIGosIGVsZW0sIGNvbnRhaW5zLAoJCQl0bXAsIHRh ZywgdGJvZHksIHdyYXAsCgkJCWwgPSBlbGVtcy5sZW5ndGgsCgoJCQkvLyBFbnN1 cmUgYSBzYWZlIGZyYWdtZW50CgkJCXNhZmUgPSBjcmVhdGVTYWZlRnJhZ21lbnQo IGNvbnRleHQgKSwKCgkJCW5vZGVzID0gW10sCgkJCWkgPSAwOwoKCQlmb3IgKCA7 IGkgPCBsOyBpKysgKSB7CgkJCWVsZW0gPSBlbGVtc1sgaSBdOwoKCQkJaWYgKCBl bGVtIHx8IGVsZW0gPT09IDAgKSB7CgoJCQkJLy8gQWRkIG5vZGVzIGRpcmVjdGx5 CgkJCQlpZiAoIGpRdWVyeS50eXBlKCBlbGVtICkgPT09ICJvYmplY3QiICkgewoJ CQkJCWpRdWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0g XSA6IGVsZW0gKTsKCgkJCQkvLyBDb252ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0 IG5vZGUKCQkJCX0gZWxzZSBpZiAoICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7CgkJ CQkJbm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7 CgoJCQkJLy8gQ29udmVydCBodG1sIGludG8gRE9NIG5vZGVzCgkJCQl9IGVsc2Ug ewoJCQkJCXRtcCA9IHRtcCB8fCBzYWZlLmFwcGVuZENoaWxkKCBjb250ZXh0LmNy ZWF0ZUVsZW1lbnQoImRpdiIpICk7CgoJCQkJCS8vIERlc2VyaWFsaXplIGEgc3Rh bmRhcmQgcmVwcmVzZW50YXRpb24KCQkJCQl0YWcgPSAocnRhZ05hbWUuZXhlYygg ZWxlbSApIHx8IFsgIiIsICIiIF0pWyAxIF0udG9Mb3dlckNhc2UoKTsKCQkJCQl3 cmFwID0gd3JhcE1hcFsgdGFnIF0gfHwgd3JhcE1hcC5fZGVmYXVsdDsKCgkJCQkJ dG1wLmlubmVySFRNTCA9IHdyYXBbMV0gKyBlbGVtLnJlcGxhY2UoIHJ4aHRtbFRh ZywgIjwkMT48LyQyPiIgKSArIHdyYXBbMl07CgoJCQkJCS8vIERlc2NlbmQgdGhy b3VnaCB3cmFwcGVycyB0byB0aGUgcmlnaHQgY29udGVudAoJCQkJCWogPSB3cmFw WzBdOwoJCQkJCXdoaWxlICggai0tICkgewoJCQkJCQl0bXAgPSB0bXAubGFzdENo aWxkOwoJCQkJCX0KCgkJCQkJLy8gTWFudWFsbHkgYWRkIGxlYWRpbmcgd2hpdGVz cGFjZSByZW1vdmVkIGJ5IElFCgkJCQkJaWYgKCAhc3VwcG9ydC5sZWFkaW5nV2hp dGVzcGFjZSAmJiBybGVhZGluZ1doaXRlc3BhY2UudGVzdCggZWxlbSApICkgewoJ CQkJCQlub2Rlcy5wdXNoKCBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBybGVhZGlu Z1doaXRlc3BhY2UuZXhlYyggZWxlbSApWzBdICkgKTsKCQkJCQl9CgoJCQkJCS8v IFJlbW92ZSBJRSdzIGF1dG9pbnNlcnRlZCA8dGJvZHk+IGZyb20gdGFibGUgZnJh Z21lbnRzCgkJCQkJaWYgKCAhc3VwcG9ydC50Ym9keSApIHsKCgkJCQkJCS8vIFN0 cmluZyB3YXMgYSA8dGFibGU+LCAqbWF5KiBoYXZlIHNwdXJpb3VzIDx0Ym9keT4K CQkJCQkJZWxlbSA9IHRhZyA9PT0gInRhYmxlIiAmJiAhcnRib2R5LnRlc3QoIGVs ZW0gKSA/CgkJCQkJCQl0bXAuZmlyc3RDaGlsZCA6CgoJCQkJCQkJLy8gU3RyaW5n IHdhcyBhIGJhcmUgPHRoZWFkPiBvciA8dGZvb3Q+CgkJCQkJCQl3cmFwWzFdID09 PSAiPHRhYmxlPiIgJiYgIXJ0Ym9keS50ZXN0KCBlbGVtICkgPwoJCQkJCQkJCXRt cCA6CgkJCQkJCQkJMDsKCgkJCQkJCWogPSBlbGVtICYmIGVsZW0uY2hpbGROb2Rl cy5sZW5ndGg7CgkJCQkJCXdoaWxlICggai0tICkgewoJCQkJCQkJaWYgKCBqUXVl cnkubm9kZU5hbWUoICh0Ym9keSA9IGVsZW0uY2hpbGROb2Rlc1tqXSksICJ0Ym9k eSIgKSAmJiAhdGJvZHkuY2hpbGROb2Rlcy5sZW5ndGggKSB7CgkJCQkJCQkJZWxl bS5yZW1vdmVDaGlsZCggdGJvZHkgKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0K CgkJCQkJalF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMgKTsKCgkJ CQkJLy8gRml4ICMxMjM5MiBmb3IgV2ViS2l0IGFuZCBJRSA+IDkKCQkJCQl0bXAu dGV4dENvbnRlbnQgPSAiIjsKCgkJCQkJLy8gRml4ICMxMjM5MiBmb3Igb2xkSUUK CQkJCQl3aGlsZSAoIHRtcC5maXJzdENoaWxkICkgewoJCQkJCQl0bXAucmVtb3Zl Q2hpbGQoIHRtcC5maXJzdENoaWxkICk7CgkJCQkJfQoKCQkJCQkvLyBSZW1lbWJl ciB0aGUgdG9wLWxldmVsIGNvbnRhaW5lciBmb3IgcHJvcGVyIGNsZWFudXAKCQkJ CQl0bXAgPSBzYWZlLmxhc3RDaGlsZDsKCQkJCX0KCQkJfQoJCX0KCgkJLy8gRml4 ICMxMTM1NjogQ2xlYXIgZWxlbWVudHMgZnJvbSBmcmFnbWVudAoJCWlmICggdG1w ICkgewoJCQlzYWZlLnJlbW92ZUNoaWxkKCB0bXAgKTsKCQl9CgoJCS8vIFJlc2V0 IGRlZmF1bHRDaGVja2VkIGZvciBhbnkgcmFkaW9zIGFuZCBjaGVja2JveGVzCgkJ Ly8gYWJvdXQgdG8gYmUgYXBwZW5kZWQgdG8gdGhlIERPTSBpbiBJRSA2LzcgKCM4 MDYwKQoJCWlmICggIXN1cHBvcnQuYXBwZW5kQ2hlY2tlZCApIHsKCQkJalF1ZXJ5 LmdyZXAoIGdldEFsbCggbm9kZXMsICJpbnB1dCIgKSwgZml4RGVmYXVsdENoZWNr ZWQgKTsKCQl9CgoJCWkgPSAwOwoJCXdoaWxlICggKGVsZW0gPSBub2Rlc1sgaSsr IF0pICkgewoKCQkJLy8gIzQwODcgLSBJZiBvcmlnaW4gYW5kIGRlc3RpbmF0aW9u IGVsZW1lbnRzIGFyZSB0aGUgc2FtZSwgYW5kIHRoaXMgaXMKCQkJLy8gdGhhdCBl bGVtZW50LCBkbyBub3QgZG8gYW55dGhpbmcKCQkJaWYgKCBzZWxlY3Rpb24gJiYg alF1ZXJ5LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApICE9PSAtMSApIHsKCQkJ CWNvbnRpbnVlOwoJCQl9CgoJCQljb250YWlucyA9IGpRdWVyeS5jb250YWlucygg ZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7CgoJCQkvLyBBcHBlbmQgdG8gZnJh Z21lbnQKCQkJdG1wID0gZ2V0QWxsKCBzYWZlLmFwcGVuZENoaWxkKCBlbGVtICks ICJzY3JpcHQiICk7CgoJCQkvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBo aXN0b3J5CgkJCWlmICggY29udGFpbnMgKSB7CgkJCQlzZXRHbG9iYWxFdmFsKCB0 bXAgKTsKCQkJfQoKCQkJLy8gQ2FwdHVyZSBleGVjdXRhYmxlcwoJCQlpZiAoIHNj cmlwdHMgKSB7CgkJCQlqID0gMDsKCQkJCXdoaWxlICggKGVsZW0gPSB0bXBbIGor KyBdKSApIHsKCQkJCQlpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8 fCAiIiApICkgewoJCQkJCQlzY3JpcHRzLnB1c2goIGVsZW0gKTsKCQkJCQl9CgkJ CQl9CgkJCX0KCQl9CgoJCXRtcCA9IG51bGw7CgoJCXJldHVybiBzYWZlOwoJfSwK CgljbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcywgLyogaW50ZXJuYWwgKi8gYWNj ZXB0RGF0YSApIHsKCQl2YXIgZWxlbSwgdHlwZSwgaWQsIGRhdGEsCgkJCWkgPSAw LAoJCQlpbnRlcm5hbEtleSA9IGpRdWVyeS5leHBhbmRvLAoJCQljYWNoZSA9IGpR dWVyeS5jYWNoZSwKCQkJZGVsZXRlRXhwYW5kbyA9IHN1cHBvcnQuZGVsZXRlRXhw YW5kbywKCQkJc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsOwoKCQlmb3Ig KCA7IChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyApIHsKCQkJaWYgKCBh Y2NlcHREYXRhIHx8IGpRdWVyeS5hY2NlcHREYXRhKCBlbGVtICkgKSB7CgoJCQkJ aWQgPSBlbGVtWyBpbnRlcm5hbEtleSBdOwoJCQkJZGF0YSA9IGlkICYmIGNhY2hl WyBpZCBdOwoKCQkJCWlmICggZGF0YSApIHsKCQkJCQlpZiAoIGRhdGEuZXZlbnRz ICkgewoJCQkJCQlmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkgewoJCQkJCQkJ aWYgKCBzcGVjaWFsWyB0eXBlIF0gKSB7CgkJCQkJCQkJalF1ZXJ5LmV2ZW50LnJl bW92ZSggZWxlbSwgdHlwZSApOwoKCQkJCQkJCS8vIFRoaXMgaXMgYSBzaG9ydGN1 dCB0byBhdm9pZCBqUXVlcnkuZXZlbnQucmVtb3ZlJ3Mgb3ZlcmhlYWQKCQkJCQkJ CX0gZWxzZSB7CgkJCQkJCQkJalF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBl LCBkYXRhLmhhbmRsZSApOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoKCQkJCQkv LyBSZW1vdmUgY2FjaGUgb25seSBpZiBpdCB3YXMgbm90IGFscmVhZHkgcmVtb3Zl ZCBieSBqUXVlcnkuZXZlbnQucmVtb3ZlCgkJCQkJaWYgKCBjYWNoZVsgaWQgXSAp IHsKCgkJCQkJCWRlbGV0ZSBjYWNoZVsgaWQgXTsKCgkJCQkJCS8vIElFIGRvZXMg bm90IGFsbG93IHVzIHRvIGRlbGV0ZSBleHBhbmRvIHByb3BlcnRpZXMgZnJvbSBu b2RlcywKCQkJCQkJLy8gbm9yIGRvZXMgaXQgaGF2ZSBhIHJlbW92ZUF0dHJpYnV0 ZSBmdW5jdGlvbiBvbiBEb2N1bWVudCBub2RlczsKCQkJCQkJLy8gd2UgbXVzdCBo YW5kbGUgYWxsIG9mIHRoZXNlIGNhc2VzCgkJCQkJCWlmICggZGVsZXRlRXhwYW5k byApIHsKCQkJCQkJCWRlbGV0ZSBlbGVtWyBpbnRlcm5hbEtleSBdOwoKCQkJCQkJ fSBlbHNlIGlmICggdHlwZW9mIGVsZW0ucmVtb3ZlQXR0cmlidXRlICE9PSBzdHJ1 bmRlZmluZWQgKSB7CgkJCQkJCQllbGVtLnJlbW92ZUF0dHJpYnV0ZSggaW50ZXJu YWxLZXkgKTsKCgkJCQkJCX0gZWxzZSB7CgkJCQkJCQllbGVtWyBpbnRlcm5hbEtl eSBdID0gbnVsbDsKCQkJCQkJfQoKCQkJCQkJZGVsZXRlZElkcy5wdXNoKCBpZCAp OwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KfSk7CgpqUXVlcnkuZm4uZXh0ZW5k KHsKCXRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKCQlyZXR1cm4gYWNjZXNzKCB0 aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7CgkJCXJldHVybiB2YWx1ZSA9PT0gdW5k ZWZpbmVkID8KCQkJCWpRdWVyeS50ZXh0KCB0aGlzICkgOgoJCQkJdGhpcy5lbXB0 eSgpLmFwcGVuZCggKCB0aGlzWzBdICYmIHRoaXNbMF0ub3duZXJEb2N1bWVudCB8 fCBkb2N1bWVudCApLmNyZWF0ZVRleHROb2RlKCB2YWx1ZSApICk7CgkJfSwgbnVs bCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTsKCX0sCgoJYXBwZW5kOiBmdW5j dGlvbigpIHsKCQlyZXR1cm4gdGhpcy5kb21NYW5pcCggYXJndW1lbnRzLCBmdW5j dGlvbiggZWxlbSApIHsKCQkJaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRo aXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7CgkJ CQl2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7 CgkJCQl0YXJnZXQuYXBwZW5kQ2hpbGQoIGVsZW0gKTsKCQkJfQoJCX0pOwoJfSwK CglwcmVwZW5kOiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdGhpcy5kb21NYW5pcCgg YXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKCQkJaWYgKCB0aGlzLm5vZGVU eXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5 cGUgPT09IDkgKSB7CgkJCQl2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0 KCB0aGlzLCBlbGVtICk7CgkJCQl0YXJnZXQuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0 YXJnZXQuZmlyc3RDaGlsZCApOwoJCQl9CgkJfSk7Cgl9LAoKCWJlZm9yZTogZnVu Y3Rpb24oKSB7CgkJcmV0dXJuIHRoaXMuZG9tTWFuaXAoIGFyZ3VtZW50cywgZnVu Y3Rpb24oIGVsZW0gKSB7CgkJCWlmICggdGhpcy5wYXJlbnROb2RlICkgewoJCQkJ dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApOwoJCQl9 CgkJfSk7Cgl9LAoKCWFmdGVyOiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdGhpcy5k b21NYW5pcCggYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKCQkJaWYgKCB0 aGlzLnBhcmVudE5vZGUgKSB7CgkJCQl0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVm b3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7CgkJCX0KCQl9KTsKCX0sCgoJ cmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IsIGtlZXBEYXRhIC8qIEludGVybmFs IFVzZSBPbmx5ICovICkgewoJCXZhciBlbGVtLAoJCQllbGVtcyA9IHNlbGVjdG9y ID8galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIHRoaXMgKSA6IHRoaXMsCgkJCWkg PSAwOwoKCQlmb3IgKCA7IChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyAp IHsKCgkJCWlmICggIWtlZXBEYXRhICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7 CgkJCQlqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0gKSApOwoJCQl9CgoJ CQlpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHsKCQkJCWlmICgga2VlcERhdGEgJiYg alF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSApIHsK CQkJCQlzZXRHbG9iYWxFdmFsKCBnZXRBbGwoIGVsZW0sICJzY3JpcHQiICkgKTsK CQkJCX0KCQkJCWVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWxlbSApOwoJ CQl9CgkJfQoKCQlyZXR1cm4gdGhpczsKCX0sCgoJZW1wdHk6IGZ1bmN0aW9uKCkg ewoJCXZhciBlbGVtLAoJCQlpID0gMDsKCgkJZm9yICggOyAoZWxlbSA9IHRoaXNb aV0pICE9IG51bGw7IGkrKyApIHsKCQkJLy8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMg YW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzCgkJCWlmICggZWxlbS5ub2RlVHlwZSA9 PT0gMSApIHsKCQkJCWpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFs c2UgKSApOwoJCQl9CgoJCQkvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2RlcwoJ CQl3aGlsZSAoIGVsZW0uZmlyc3RDaGlsZCApIHsKCQkJCWVsZW0ucmVtb3ZlQ2hp bGQoIGVsZW0uZmlyc3RDaGlsZCApOwoJCQl9CgoJCQkvLyBJZiB0aGlzIGlzIGEg c2VsZWN0LCBlbnN1cmUgdGhhdCBpdCBkaXNwbGF5cyBlbXB0eSAoIzEyMzM2KQoJ CQkvLyBTdXBwb3J0OiBJRTw5CgkJCWlmICggZWxlbS5vcHRpb25zICYmIGpRdWVy eS5ub2RlTmFtZSggZWxlbSwgInNlbGVjdCIgKSApIHsKCQkJCWVsZW0ub3B0aW9u cy5sZW5ndGggPSAwOwoJCQl9CgkJfQoKCQlyZXR1cm4gdGhpczsKCX0sCgoJY2xv bmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyAp IHsKCQlkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFs c2UgOiBkYXRhQW5kRXZlbnRzOwoJCWRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERh dGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFu ZEV2ZW50czsKCgkJcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCkgewoJCQlyZXR1 cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFu ZEV2ZW50cyApOwoJCX0pOwoJfSwKCglodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7 CgkJcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgewoJCQl2 YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSwKCQkJCWkgPSAwLAoJCQkJbCA9IHRo aXMubGVuZ3RoOwoKCQkJaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgewoJCQkJ cmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDEgPwoJCQkJCWVsZW0uaW5uZXJIVE1M LnJlcGxhY2UoIHJpbmxpbmVqUXVlcnksICIiICkgOgoJCQkJCXVuZGVmaW5lZDsK CQkJfQoKCQkJLy8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1 c3QgdXNlIGlubmVySFRNTAoJCQlpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gInN0cmlu ZyIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmCgkJCQkoIHN1cHBv cnQuaHRtbFNlcmlhbGl6ZSB8fCAhcm5vc2hpbWNhY2hlLnRlc3QoIHZhbHVlICkg ICkgJiYKCQkJCSggc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSB8fCAhcmxlYWRp bmdXaGl0ZXNwYWNlLnRlc3QoIHZhbHVlICkgKSAmJgoJCQkJIXdyYXBNYXBbIChy dGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsgIiIsICIiIF0pWyAxIF0udG9Mb3dl ckNhc2UoKSBdICkgewoKCQkJCXZhbHVlID0gdmFsdWUucmVwbGFjZSggcnhodG1s VGFnLCAiPCQxPjwvJDI+IiApOwoKCQkJCXRyeSB7CgkJCQkJZm9yICg7IGkgPCBs OyBpKysgKSB7CgkJCQkJCS8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2 ZW50IG1lbW9yeSBsZWFrcwoJCQkJCQllbGVtID0gdGhpc1tpXSB8fCB7fTsKCQkJ CQkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgewoJCQkJCQkJalF1ZXJ5LmNs ZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7CgkJCQkJCQllbGVtLmlu bmVySFRNTCA9IHZhbHVlOwoJCQkJCQl9CgkJCQkJfQoKCQkJCQllbGVtID0gMDsK CgkJCQkvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwg dXNlIHRoZSBmYWxsYmFjayBtZXRob2QKCQkJCX0gY2F0Y2goZSkge30KCQkJfQoK CQkJaWYgKCBlbGVtICkgewoJCQkJdGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUg KTsKCQkJfQoJCX0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7Cgl9 LAoKCXJlcGxhY2VXaXRoOiBmdW5jdGlvbigpIHsKCQl2YXIgYXJnID0gYXJndW1l bnRzWyAwIF07CgoJCS8vIE1ha2UgdGhlIGNoYW5nZXMsIHJlcGxhY2luZyBlYWNo IGNvbnRleHQgZWxlbWVudCB3aXRoIHRoZSBuZXcgY29udGVudAoJCXRoaXMuZG9t TWFuaXAoIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7CgkJCWFyZyA9IHRo aXMucGFyZW50Tm9kZTsKCgkJCWpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggdGhp cyApICk7CgoJCQlpZiAoIGFyZyApIHsKCQkJCWFyZy5yZXBsYWNlQ2hpbGQoIGVs ZW0sIHRoaXMgKTsKCQkJfQoJCX0pOwoKCQkvLyBGb3JjZSByZW1vdmFsIGlmIHRo ZXJlIHdhcyBubyBuZXcgY29udGVudCAoZS5nLiwgZnJvbSBlbXB0eSBhcmd1bWVu dHMpCgkJcmV0dXJuIGFyZyAmJiAoYXJnLmxlbmd0aCB8fCBhcmcubm9kZVR5cGUp ID8gdGhpcyA6IHRoaXMucmVtb3ZlKCk7Cgl9LAoKCWRldGFjaDogZnVuY3Rpb24o IHNlbGVjdG9yICkgewoJCXJldHVybiB0aGlzLnJlbW92ZSggc2VsZWN0b3IsIHRy dWUgKTsKCX0sCgoJZG9tTWFuaXA6IGZ1bmN0aW9uKCBhcmdzLCBjYWxsYmFjayAp IHsKCgkJLy8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cwoJCWFyZ3MgPSBjb25j YXQuYXBwbHkoIFtdLCBhcmdzICk7CgoJCXZhciBmaXJzdCwgbm9kZSwgaGFzU2Ny aXB0cywKCQkJc2NyaXB0cywgZG9jLCBmcmFnbWVudCwKCQkJaSA9IDAsCgkJCWwg PSB0aGlzLmxlbmd0aCwKCQkJc2V0ID0gdGhpcywKCQkJaU5vQ2xvbmUgPSBsIC0g MSwKCQkJdmFsdWUgPSBhcmdzWzBdLAoJCQlpc0Z1bmN0aW9uID0galF1ZXJ5Lmlz RnVuY3Rpb24oIHZhbHVlICk7CgoJCS8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFn bWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdAoJCWlmICggaXNG dW5jdGlvbiB8fAoJCQkJKCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09ICJzdHJp bmciICYmCgkJCQkJIXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0 KCB2YWx1ZSApICkgKSB7CgkJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGlu ZGV4ICkgewoJCQkJdmFyIHNlbGYgPSBzZXQuZXEoIGluZGV4ICk7CgkJCQlpZiAo IGlzRnVuY3Rpb24gKSB7CgkJCQkJYXJnc1swXSA9IHZhbHVlLmNhbGwoIHRoaXMs IGluZGV4LCBzZWxmLmh0bWwoKSApOwoJCQkJfQoJCQkJc2VsZi5kb21NYW5pcCgg YXJncywgY2FsbGJhY2sgKTsKCQkJfSk7CgkJfQoKCQlpZiAoIGwgKSB7CgkJCWZy YWdtZW50ID0galF1ZXJ5LmJ1aWxkRnJhZ21lbnQoIGFyZ3MsIHRoaXNbIDAgXS5v d25lckRvY3VtZW50LCBmYWxzZSwgdGhpcyApOwoJCQlmaXJzdCA9IGZyYWdtZW50 LmZpcnN0Q2hpbGQ7CgoJCQlpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3Ro ID09PSAxICkgewoJCQkJZnJhZ21lbnQgPSBmaXJzdDsKCQkJfQoKCQkJaWYgKCBm aXJzdCApIHsKCQkJCXNjcmlwdHMgPSBqUXVlcnkubWFwKCBnZXRBbGwoIGZyYWdt ZW50LCAic2NyaXB0IiApLCBkaXNhYmxlU2NyaXB0ICk7CgkJCQloYXNTY3JpcHRz ID0gc2NyaXB0cy5sZW5ndGg7CgoJCQkJLy8gVXNlIHRoZSBvcmlnaW5hbCBmcmFn bWVudCBmb3IgdGhlIGxhc3QgaXRlbSBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNh dXNlIGl0IGNhbiBlbmQgdXAKCQkJCS8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0 bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuCgkJCQlmb3IgKCA7IGkg PCBsOyBpKysgKSB7CgkJCQkJbm9kZSA9IGZyYWdtZW50OwoKCQkJCQlpZiAoIGkg IT09IGlOb0Nsb25lICkgewoJCQkJCQlub2RlID0galF1ZXJ5LmNsb25lKCBub2Rl LCB0cnVlLCB0cnVlICk7CgoJCQkJCQkvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xv bmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uCgkJCQkJCWlmICggaGFz U2NyaXB0cyApIHsKCQkJCQkJCWpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxs KCBub2RlLCAic2NyaXB0IiApICk7CgkJCQkJCX0KCQkJCQl9CgoJCQkJCWNhbGxi YWNrLmNhbGwoIHRoaXNbaV0sIG5vZGUsIGkgKTsKCQkJCX0KCgkJCQlpZiAoIGhh c1NjcmlwdHMgKSB7CgkJCQkJZG9jID0gc2NyaXB0c1sgc2NyaXB0cy5sZW5ndGgg LSAxIF0ub3duZXJEb2N1bWVudDsKCgkJCQkJLy8gUmVlbmFibGUgc2NyaXB0cwoJ CQkJCWpRdWVyeS5tYXAoIHNjcmlwdHMsIHJlc3RvcmVTY3JpcHQgKTsKCgkJCQkJ Ly8gRXZhbHVhdGUgZXhlY3V0YWJsZSBzY3JpcHRzIG9uIGZpcnN0IGRvY3VtZW50 IGluc2VydGlvbgoJCQkJCWZvciAoIGkgPSAwOyBpIDwgaGFzU2NyaXB0czsgaSsr ICkgewoJCQkJCQlub2RlID0gc2NyaXB0c1sgaSBdOwoJCQkJCQlpZiAoIHJzY3Jp cHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCAiIiApICYmCgkJCQkJCQkhalF1ZXJ5 Ll9kYXRhKCBub2RlLCAiZ2xvYmFsRXZhbCIgKSAmJiBqUXVlcnkuY29udGFpbnMo IGRvYywgbm9kZSApICkgewoKCQkJCQkJCWlmICggbm9kZS5zcmMgKSB7CgkJCQkJ CQkJLy8gT3B0aW9uYWwgQUpBWCBkZXBlbmRlbmN5LCBidXQgd29uJ3QgcnVuIHNj cmlwdHMgaWYgbm90IHByZXNlbnQKCQkJCQkJCQlpZiAoIGpRdWVyeS5fZXZhbFVy bCApIHsKCQkJCQkJCQkJalF1ZXJ5Ll9ldmFsVXJsKCBub2RlLnNyYyApOwoJCQkJ CQkJCX0KCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJalF1ZXJ5Lmdsb2JhbEV2YWwo ICggbm9kZS50ZXh0IHx8IG5vZGUudGV4dENvbnRlbnQgfHwgbm9kZS5pbm5lckhU TUwgfHwgIiIgKS5yZXBsYWNlKCByY2xlYW5TY3JpcHQsICIiICkgKTsKCQkJCQkJ CX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCgkJCQkvLyBGaXggIzExODA5OiBBdm9p ZCBsZWFraW5nIG1lbW9yeQoJCQkJZnJhZ21lbnQgPSBmaXJzdCA9IG51bGw7CgkJ CX0KCQl9CgoJCXJldHVybiB0aGlzOwoJfQp9KTsKCmpRdWVyeS5lYWNoKHsKCWFw cGVuZFRvOiAiYXBwZW5kIiwKCXByZXBlbmRUbzogInByZXBlbmQiLAoJaW5zZXJ0 QmVmb3JlOiAiYmVmb3JlIiwKCWluc2VydEFmdGVyOiAiYWZ0ZXIiLAoJcmVwbGFj ZUFsbDogInJlcGxhY2VXaXRoIgp9LCBmdW5jdGlvbiggbmFtZSwgb3JpZ2luYWwg KSB7CglqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsK CQl2YXIgZWxlbXMsCgkJCWkgPSAwLAoJCQlyZXQgPSBbXSwKCQkJaW5zZXJ0ID0g alF1ZXJ5KCBzZWxlY3RvciApLAoJCQlsYXN0ID0gaW5zZXJ0Lmxlbmd0aCAtIDE7 CgoJCWZvciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7CgkJCWVsZW1zID0gaSA9PT0g bGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKHRydWUpOwoJCQlqUXVlcnkoIGluc2Vy dFtpXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApOwoKCQkJLy8gTW9kZXJuIGJyb3dz ZXJzIGNhbiBhcHBseSBqUXVlcnkgY29sbGVjdGlvbnMgYXMgYXJyYXlzLCBidXQg b2xkSUUgbmVlZHMgYSAuZ2V0KCkKCQkJcHVzaC5hcHBseSggcmV0LCBlbGVtcy5n ZXQoKSApOwoJCX0KCgkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQgKTsKCX07 Cn0pOwoKCnZhciBpZnJhbWUsCgllbGVtZGlzcGxheSA9IHt9OwoKLyoqCiAqIFJl dHJpZXZlIHRoZSBhY3R1YWwgZGlzcGxheSBvZiBhIGVsZW1lbnQKICogQHBhcmFt IHtTdHJpbmd9IG5hbWUgbm9kZU5hbWUgb2YgdGhlIGVsZW1lbnQKICogQHBhcmFt IHtPYmplY3R9IGRvYyBEb2N1bWVudCBvYmplY3QKICovCi8vIENhbGxlZCBvbmx5 IGZyb20gd2l0aGluIGRlZmF1bHREaXNwbGF5CmZ1bmN0aW9uIGFjdHVhbERpc3Bs YXkoIG5hbWUsIGRvYyApIHsKCXZhciBlbGVtID0galF1ZXJ5KCBkb2MuY3JlYXRl RWxlbWVudCggbmFtZSApICkuYXBwZW5kVG8oIGRvYy5ib2R5ICksCgoJCS8vIGdl dERlZmF1bHRDb21wdXRlZFN0eWxlIG1pZ2h0IGJlIHJlbGlhYmx5IHVzZWQgb25s eSBvbiBhdHRhY2hlZCBlbGVtZW50CgkJZGlzcGxheSA9IHdpbmRvdy5nZXREZWZh dWx0Q29tcHV0ZWRTdHlsZSA/CgoJCQkvLyBVc2Ugb2YgdGhpcyBtZXRob2QgaXMg YSB0ZW1wb3JhcnkgZml4IChtb3JlIGxpa2Ugb3B0bWl6YXRpb24pIHVudGlsIHNv bWV0aGluZyBiZXR0ZXIgY29tZXMgYWxvbmcsCgkJCS8vIHNpbmNlIGl0IHdhcyBy ZW1vdmVkIGZyb20gc3BlY2lmaWNhdGlvbiBhbmQgc3VwcG9ydGVkIG9ubHkgaW4g RkYKCQkJd2luZG93LmdldERlZmF1bHRDb21wdXRlZFN0eWxlKCBlbGVtWyAwIF0g KS5kaXNwbGF5IDogalF1ZXJ5LmNzcyggZWxlbVsgMCBdLCAiZGlzcGxheSIgKTsK CgkvLyBXZSBkb24ndCBoYXZlIGFueSBkYXRhIHN0b3JlZCBvbiB0aGUgZWxlbWVu dCwKCS8vIHNvIHVzZSAiZGV0YWNoIiBtZXRob2QgYXMgZmFzdCB3YXkgdG8gZ2V0 IHJpZCBvZiB0aGUgZWxlbWVudAoJZWxlbS5kZXRhY2goKTsKCglyZXR1cm4gZGlz cGxheTsKfQoKLyoqCiAqIFRyeSB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgZGlz cGxheSB2YWx1ZSBvZiBhbiBlbGVtZW50CiAqIEBwYXJhbSB7U3RyaW5nfSBub2Rl TmFtZQogKi8KZnVuY3Rpb24gZGVmYXVsdERpc3BsYXkoIG5vZGVOYW1lICkgewoJ dmFyIGRvYyA9IGRvY3VtZW50LAoJCWRpc3BsYXkgPSBlbGVtZGlzcGxheVsgbm9k ZU5hbWUgXTsKCglpZiAoICFkaXNwbGF5ICkgewoJCWRpc3BsYXkgPSBhY3R1YWxE aXNwbGF5KCBub2RlTmFtZSwgZG9jICk7CgoJCS8vIElmIHRoZSBzaW1wbGUgd2F5 IGZhaWxzLCByZWFkIGZyb20gaW5zaWRlIGFuIGlmcmFtZQoJCWlmICggZGlzcGxh eSA9PT0gIm5vbmUiIHx8ICFkaXNwbGF5ICkgewoKCQkJLy8gVXNlIHRoZSBhbHJl YWR5LWNyZWF0ZWQgaWZyYW1lIGlmIHBvc3NpYmxlCgkJCWlmcmFtZSA9IChpZnJh bWUgfHwgalF1ZXJ5KCAiPGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAn IGhlaWdodD0nMCcvPiIgKSkuYXBwZW5kVG8oIGRvYy5kb2N1bWVudEVsZW1lbnQg KTsKCgkJCS8vIEFsd2F5cyB3cml0ZSBhIG5ldyBIVE1MIHNrZWxldG9uIHNvIFdl YmtpdCBhbmQgRmlyZWZveCBkb24ndCBjaG9rZSBvbiByZXVzZQoJCQlkb2MgPSAo IGlmcmFtZVsgMCBdLmNvbnRlbnRXaW5kb3cgfHwgaWZyYW1lWyAwIF0uY29udGVu dERvY3VtZW50ICkuZG9jdW1lbnQ7CgoJCQkvLyBTdXBwb3J0OiBJRQoJCQlkb2Mu d3JpdGUoKTsKCQkJZG9jLmNsb3NlKCk7CgoJCQlkaXNwbGF5ID0gYWN0dWFsRGlz cGxheSggbm9kZU5hbWUsIGRvYyApOwoJCQlpZnJhbWUuZGV0YWNoKCk7CgkJfQoK CQkvLyBTdG9yZSB0aGUgY29ycmVjdCBkZWZhdWx0IGRpc3BsYXkKCQllbGVtZGlz cGxheVsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7Cgl9CgoJcmV0dXJuIGRpc3BsYXk7 Cn0KCgooZnVuY3Rpb24oKSB7Cgl2YXIgYSwgc2hyaW5rV3JhcEJsb2Nrc1ZhbCwK CQlkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApLAoJCWRpdlJl c2V0ID0KCQkJIi13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJv eC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDsiICsK CQkJImRpc3BsYXk6YmxvY2s7cGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowIjsK CgkvLyBTZXR1cAoJZGl2LmlubmVySFRNTCA9ICIgIDxsaW5rLz48dGFibGU+PC90 YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4i OwoJYSA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSggImEiIClbIDAgXTsKCglh LnN0eWxlLmNzc1RleHQgPSAiZmxvYXQ6bGVmdDtvcGFjaXR5Oi41IjsKCgkvLyBN YWtlIHN1cmUgdGhhdCBlbGVtZW50IG9wYWNpdHkgZXhpc3RzCgkvLyAoSUUgdXNl cyBmaWx0ZXIgaW5zdGVhZCkKCS8vIFVzZSBhIHJlZ2V4IHRvIHdvcmsgYXJvdW5k IGEgV2ViS2l0IGlzc3VlLiBTZWUgIzUxNDUKCXN1cHBvcnQub3BhY2l0eSA9IC9e MC41Ly50ZXN0KCBhLnN0eWxlLm9wYWNpdHkgKTsKCgkvLyBWZXJpZnkgc3R5bGUg ZmxvYXQgZXhpc3RlbmNlCgkvLyAoSUUgdXNlcyBzdHlsZUZsb2F0IGluc3RlYWQg b2YgY3NzRmxvYXQpCglzdXBwb3J0LmNzc0Zsb2F0ID0gISFhLnN0eWxlLmNzc0Zs b2F0OwoKCWRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9ICJjb250ZW50LWJveCI7 CglkaXYuY2xvbmVOb2RlKCB0cnVlICkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSAi IjsKCXN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlID0gZGl2LnN0eWxlLmJhY2tncm91 bmRDbGlwID09PSAiY29udGVudC1ib3giOwoKCS8vIE51bGwgZWxlbWVudHMgdG8g YXZvaWQgbGVha3MgaW4gSUUuCglhID0gZGl2ID0gbnVsbDsKCglzdXBwb3J0LnNo cmlua1dyYXBCbG9ja3MgPSBmdW5jdGlvbigpIHsKCQl2YXIgYm9keSwgY29udGFp bmVyLCBkaXYsIGNvbnRhaW5lclN0eWxlczsKCgkJaWYgKCBzaHJpbmtXcmFwQmxv Y2tzVmFsID09IG51bGwgKSB7CgkJCWJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50 c0J5VGFnTmFtZSggImJvZHkiIClbIDAgXTsKCQkJaWYgKCAhYm9keSApIHsKCQkJ CS8vIFRlc3QgZmlyZWQgdG9vIGVhcmx5IG9yIGluIGFuIHVuc3VwcG9ydGVkIGVu dmlyb25tZW50LCBleGl0LgoJCQkJcmV0dXJuOwoJCQl9CgoJCQljb250YWluZXJT dHlsZXMgPSAiYm9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDtwb3NpdGlvbjphYnNv bHV0ZTt0b3A6MDtsZWZ0Oi05OTk5cHgiOwoJCQljb250YWluZXIgPSBkb2N1bWVu dC5jcmVhdGVFbGVtZW50KCAiZGl2IiApOwoJCQlkaXYgPSBkb2N1bWVudC5jcmVh dGVFbGVtZW50KCAiZGl2IiApOwoKCQkJYm9keS5hcHBlbmRDaGlsZCggY29udGFp bmVyICkuYXBwZW5kQ2hpbGQoIGRpdiApOwoKCQkJLy8gV2lsbCBiZSBjaGFuZ2Vk IGxhdGVyIGlmIG5lZWRlZC4KCQkJc2hyaW5rV3JhcEJsb2Nrc1ZhbCA9IGZhbHNl OwoKCQkJaWYgKCB0eXBlb2YgZGl2LnN0eWxlLnpvb20gIT09IHN0cnVuZGVmaW5l ZCApIHsKCQkJCS8vIFN1cHBvcnQ6IElFNgoJCQkJLy8gQ2hlY2sgaWYgZWxlbWVu dHMgd2l0aCBsYXlvdXQgc2hyaW5rLXdyYXAgdGhlaXIgY2hpbGRyZW4KCQkJCWRp di5zdHlsZS5jc3NUZXh0ID0gZGl2UmVzZXQgKyAiO3dpZHRoOjFweDtwYWRkaW5n OjFweDt6b29tOjEiOwoJCQkJZGl2LmlubmVySFRNTCA9ICI8ZGl2PjwvZGl2PiI7 CgkJCQlkaXYuZmlyc3RDaGlsZC5zdHlsZS53aWR0aCA9ICI1cHgiOwoJCQkJc2hy aW5rV3JhcEJsb2Nrc1ZhbCA9IGRpdi5vZmZzZXRXaWR0aCAhPT0gMzsKCQkJfQoK CQkJYm9keS5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7CgoJCQkvLyBOdWxsIGVs ZW1lbnRzIHRvIGF2b2lkIGxlYWtzIGluIElFLgoJCQlib2R5ID0gY29udGFpbmVy ID0gZGl2ID0gbnVsbDsKCQl9CgoJCXJldHVybiBzaHJpbmtXcmFwQmxvY2tzVmFs OwoJfTsKCn0pKCk7CnZhciBybWFyZ2luID0gKC9ebWFyZ2luLyk7Cgp2YXIgcm51 bW5vbnB4ID0gbmV3IFJlZ0V4cCggIl4oIiArIHBudW0gKyAiKSg/IXB4KVthLXol XSskIiwgImkiICk7CgoKCnZhciBnZXRTdHlsZXMsIGN1ckNTUywKCXJwb3NpdGlv biA9IC9eKHRvcHxyaWdodHxib3R0b218bGVmdCkkLzsKCmlmICggd2luZG93Lmdl dENvbXB1dGVkU3R5bGUgKSB7CglnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSAp IHsKCQlyZXR1cm4gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENv bXB1dGVkU3R5bGUoIGVsZW0sIG51bGwgKTsKCX07CgoJY3VyQ1NTID0gZnVuY3Rp b24oIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkgewoJCXZhciB3aWR0aCwgbWluV2lk dGgsIG1heFdpZHRoLCByZXQsCgkJCXN0eWxlID0gZWxlbS5zdHlsZTsKCgkJY29t cHV0ZWQgPSBjb21wdXRlZCB8fCBnZXRTdHlsZXMoIGVsZW0gKTsKCgkJLy8gZ2V0 UHJvcGVydHlWYWx1ZSBpcyBvbmx5IG5lZWRlZCBmb3IgLmNzcygnZmlsdGVyJykg aW4gSUU5LCBzZWUgIzEyNTM3CgkJcmV0ID0gY29tcHV0ZWQgPyBjb21wdXRlZC5n ZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRbIG5hbWUgXSA6IHVu ZGVmaW5lZDsKCgkJaWYgKCBjb21wdXRlZCApIHsKCgkJCWlmICggcmV0ID09PSAi IiAmJiAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0g KSApIHsKCQkJCXJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApOwoJCQl9 CgoJCQkvLyBBIHRyaWJ1dGUgdG8gdGhlICJhd2Vzb21lIGhhY2sgYnkgRGVhbiBF ZHdhcmRzIgoJCQkvLyBDaHJvbWUgPCAxNyBhbmQgU2FmYXJpIDUuMCB1c2VzICJj b21wdXRlZCB2YWx1ZSIgaW5zdGVhZCBvZiAidXNlZCB2YWx1ZSIgZm9yIG1hcmdp bi1yaWdodAoJCQkvLyBTYWZhcmkgNS4xLjcgKGF0IGxlYXN0KSByZXR1cm5zIHBl cmNlbnRhZ2UgZm9yIGEgbGFyZ2VyIHNldCBvZiB2YWx1ZXMsIGJ1dCB3aWR0aCBz ZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMKCQkJLy8gdGhpcyBpcyBhZ2FpbnN0 IHRoZSBDU1NPTSBkcmFmdCBzcGVjOiBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9j c3NvbS8jcmVzb2x2ZWQtdmFsdWVzCgkJCWlmICggcm51bW5vbnB4LnRlc3QoIHJl dCApICYmIHJtYXJnaW4udGVzdCggbmFtZSApICkgewoKCQkJCS8vIFJlbWVtYmVy IHRoZSBvcmlnaW5hbCB2YWx1ZXMKCQkJCXdpZHRoID0gc3R5bGUud2lkdGg7CgkJ CQltaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoOwoJCQkJbWF4V2lkdGggPSBzdHls ZS5tYXhXaWR0aDsKCgkJCQkvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0 IGEgY29tcHV0ZWQgdmFsdWUgb3V0CgkJCQlzdHlsZS5taW5XaWR0aCA9IHN0eWxl Lm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7CgkJCQlyZXQgPSBjb21wdXRl ZC53aWR0aDsKCgkJCQkvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzCgkJCQlz dHlsZS53aWR0aCA9IHdpZHRoOwoJCQkJc3R5bGUubWluV2lkdGggPSBtaW5XaWR0 aDsKCQkJCXN0eWxlLm1heFdpZHRoID0gbWF4V2lkdGg7CgkJCX0KCQl9CgoJCS8v IFN1cHBvcnQ6IElFCgkJLy8gSUUgcmV0dXJucyB6SW5kZXggdmFsdWUgYXMgYW4g aW50ZWdlci4KCQlyZXR1cm4gcmV0ID09PSB1bmRlZmluZWQgPwoJCQlyZXQgOgoJ CQlyZXQgKyAiIjsKCX07Cn0gZWxzZSBpZiAoIGRvY3VtZW50LmRvY3VtZW50RWxl bWVudC5jdXJyZW50U3R5bGUgKSB7CglnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxl bSApIHsKCQlyZXR1cm4gZWxlbS5jdXJyZW50U3R5bGU7Cgl9OwoKCWN1ckNTUyA9 IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBjb21wdXRlZCApIHsKCQl2YXIgbGVmdCwg cnMsIHJzTGVmdCwgcmV0LAoJCQlzdHlsZSA9IGVsZW0uc3R5bGU7CgoJCWNvbXB1 dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7CgkJcmV0ID0gY29t cHV0ZWQgPyBjb21wdXRlZFsgbmFtZSBdIDogdW5kZWZpbmVkOwoKCQkvLyBBdm9p ZCBzZXR0aW5nIHJldCB0byBlbXB0eSBzdHJpbmcgaGVyZQoJCS8vIHNvIHdlIGRv bid0IGRlZmF1bHQgdG8gYXV0bwoJCWlmICggcmV0ID09IG51bGwgJiYgc3R5bGUg JiYgc3R5bGVbIG5hbWUgXSApIHsKCQkJcmV0ID0gc3R5bGVbIG5hbWUgXTsKCQl9 CgoJCS8vIEZyb20gdGhlIGF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHMKCQkv LyBodHRwOi8vZXJpay5lYWUubmV0L2FyY2hpdmVzLzIwMDcvMDcvMjcvMTguNTQu MTUvI2NvbW1lbnQtMTAyMjkxCgoJCS8vIElmIHdlJ3JlIG5vdCBkZWFsaW5nIHdp dGggYSByZWd1bGFyIHBpeGVsIG51bWJlcgoJCS8vIGJ1dCBhIG51bWJlciB0aGF0 IGhhcyBhIHdlaXJkIGVuZGluZywgd2UgbmVlZCB0byBjb252ZXJ0IGl0IHRvIHBp eGVscwoJCS8vIGJ1dCBub3QgcG9zaXRpb24gY3NzIGF0dHJpYnV0ZXMsIGFzIHRo b3NlIGFyZSBwcm9wb3J0aW9uYWwgdG8gdGhlIHBhcmVudCBlbGVtZW50IGluc3Rl YWQKCQkvLyBhbmQgd2UgY2FuJ3QgbWVhc3VyZSB0aGUgcGFyZW50IGluc3RlYWQg YmVjYXVzZSBpdCBtaWdodCB0cmlnZ2VyIGEgInN0YWNraW5nIGRvbGxzIiBwcm9i bGVtCgkJaWYgKCBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgIXJwb3NpdGlvbi50 ZXN0KCBuYW1lICkgKSB7CgoJCQkvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFs dWVzCgkJCWxlZnQgPSBzdHlsZS5sZWZ0OwoJCQlycyA9IGVsZW0ucnVudGltZVN0 eWxlOwoJCQlyc0xlZnQgPSBycyAmJiBycy5sZWZ0OwoKCQkJLy8gUHV0IGluIHRo ZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dAoJCQlpZiAo IHJzTGVmdCApIHsKCQkJCXJzLmxlZnQgPSBlbGVtLmN1cnJlbnRTdHlsZS5sZWZ0 OwoJCQl9CgkJCXN0eWxlLmxlZnQgPSBuYW1lID09PSAiZm9udFNpemUiID8gIjFl bSIgOiByZXQ7CgkJCXJldCA9IHN0eWxlLnBpeGVsTGVmdCArICJweCI7CgoJCQkv LyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzCgkJCXN0eWxlLmxlZnQgPSBsZWZ0 OwoJCQlpZiAoIHJzTGVmdCApIHsKCQkJCXJzLmxlZnQgPSByc0xlZnQ7CgkJCX0K CQl9CgoJCS8vIFN1cHBvcnQ6IElFCgkJLy8gSUUgcmV0dXJucyB6SW5kZXggdmFs dWUgYXMgYW4gaW50ZWdlci4KCQlyZXR1cm4gcmV0ID09PSB1bmRlZmluZWQgPwoJ CQlyZXQgOgoJCQlyZXQgKyAiIiB8fCAiYXV0byI7Cgl9Owp9CgoKCgpmdW5jdGlv biBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7CgkvLyBEZWZp bmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQn cyByZWFsbHkgbmVlZGVkLgoJcmV0dXJuIHsKCQlnZXQ6IGZ1bmN0aW9uKCkgewoJ CQl2YXIgY29uZGl0aW9uID0gY29uZGl0aW9uRm4oKTsKCgkJCWlmICggY29uZGl0 aW9uID09IG51bGwgKSB7CgkJCQkvLyBUaGUgdGVzdCB3YXMgbm90IHJlYWR5IGF0 IHRoaXMgcG9pbnQ7IHNjcmV3IHRoZSBob29rIHRoaXMgdGltZQoJCQkJLy8gYnV0 IGNoZWNrIGFnYWluIHdoZW4gbmVlZGVkIG5leHQgdGltZS4KCQkJCXJldHVybjsK CQkJfQoKCQkJaWYgKCBjb25kaXRpb24gKSB7CgkJCQkvLyBIb29rIG5vdCBuZWVk ZWQgKG9yIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBpdCBkdWUgdG8gbWlzc2lu ZyBkZXBlbmRlbmN5KSwKCQkJCS8vIHJlbW92ZSBpdC4KCQkJCS8vIFNpbmNlIHRo ZXJlIGFyZSBubyBvdGhlciBob29rcyBmb3IgbWFyZ2luUmlnaHQsIHJlbW92ZSB0 aGUgd2hvbGUgb2JqZWN0LgoJCQkJZGVsZXRlIHRoaXMuZ2V0OwoJCQkJcmV0dXJu OwoJCQl9CgoJCQkvLyBIb29rIG5lZWRlZDsgcmVkZWZpbmUgaXQgc28gdGhhdCB0 aGUgc3VwcG9ydCB0ZXN0IGlzIG5vdCBleGVjdXRlZCBhZ2Fpbi4KCgkJCXJldHVy biAodGhpcy5nZXQgPSBob29rRm4pLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsK CQl9Cgl9Owp9CgoKKGZ1bmN0aW9uKCkgewoJdmFyIGEsIHJlbGlhYmxlSGlkZGVu T2Zmc2V0c1ZhbCwgYm94U2l6aW5nVmFsLCBib3hTaXppbmdSZWxpYWJsZVZhbCwK CQlwaXhlbFBvc2l0aW9uVmFsLCByZWxpYWJsZU1hcmdpblJpZ2h0VmFsLAoJCWRp diA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICksCgkJY29udGFpbmVy U3R5bGVzID0gImJvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7cG9zaXRpb246YWJz b2x1dGU7dG9wOjA7bGVmdDotOTk5OXB4IiwKCQlkaXZSZXNldCA9CgkJCSItd2Vi a2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRl bnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3g7IiArCgkJCSJkaXNwbGF5OmJs b2NrO3BhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MCI7CgoJLy8gU2V0dXAKCWRp di5pbm5lckhUTUwgPSAiICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0n L2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IjsKCWEgPSBkaXYuZ2V0 RWxlbWVudHNCeVRhZ05hbWUoICJhIiApWyAwIF07CgoJYS5zdHlsZS5jc3NUZXh0 ID0gImZsb2F0OmxlZnQ7b3BhY2l0eTouNSI7CgoJLy8gTWFrZSBzdXJlIHRoYXQg ZWxlbWVudCBvcGFjaXR5IGV4aXN0cwoJLy8gKElFIHVzZXMgZmlsdGVyIGluc3Rl YWQpCgkvLyBVc2UgYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIFdlYktpdCBpc3N1 ZS4gU2VlICM1MTQ1CglzdXBwb3J0Lm9wYWNpdHkgPSAvXjAuNS8udGVzdCggYS5z dHlsZS5vcGFjaXR5ICk7CgoJLy8gVmVyaWZ5IHN0eWxlIGZsb2F0IGV4aXN0ZW5j ZQoJLy8gKElFIHVzZXMgc3R5bGVGbG9hdCBpbnN0ZWFkIG9mIGNzc0Zsb2F0KQoJ c3VwcG9ydC5jc3NGbG9hdCA9ICEhYS5zdHlsZS5jc3NGbG9hdDsKCglkaXYuc3R5 bGUuYmFja2dyb3VuZENsaXAgPSAiY29udGVudC1ib3giOwoJZGl2LmNsb25lTm9k ZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gIiI7CglzdXBwb3J0LmNs ZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gImNv bnRlbnQtYm94IjsKCgkvLyBOdWxsIGVsZW1lbnRzIHRvIGF2b2lkIGxlYWtzIGlu IElFLgoJYSA9IGRpdiA9IG51bGw7CgoJalF1ZXJ5LmV4dGVuZChzdXBwb3J0LCB7 CgkJcmVsaWFibGVIaWRkZW5PZmZzZXRzOiBmdW5jdGlvbigpIHsKCQkJaWYgKCBy ZWxpYWJsZUhpZGRlbk9mZnNldHNWYWwgIT0gbnVsbCApIHsKCQkJCXJldHVybiBy ZWxpYWJsZUhpZGRlbk9mZnNldHNWYWw7CgkJCX0KCgkJCXZhciBjb250YWluZXIs IHRkcywgaXNTdXBwb3J0ZWQsCgkJCQlkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVt ZW50KCAiZGl2IiApLAoJCQkJYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlU YWdOYW1lKCAiYm9keSIgKVsgMCBdOwoKCQkJaWYgKCAhYm9keSApIHsKCQkJCS8v IFJldHVybiBmb3IgZnJhbWVzZXQgZG9jcyB0aGF0IGRvbid0IGhhdmUgYSBib2R5 CgkJCQlyZXR1cm47CgkJCX0KCgkJCS8vIFNldHVwCgkJCWRpdi5zZXRBdHRyaWJ1 dGUoICJjbGFzc05hbWUiLCAidCIgKTsKCQkJZGl2LmlubmVySFRNTCA9ICIgIDxs aW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlw ZT0nY2hlY2tib3gnLz4iOwoKCQkJY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRl RWxlbWVudCggImRpdiIgKTsKCQkJY29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBj b250YWluZXJTdHlsZXM7CgoJCQlib2R5LmFwcGVuZENoaWxkKCBjb250YWluZXIg KS5hcHBlbmRDaGlsZCggZGl2ICk7CgoJCQkvLyBTdXBwb3J0OiBJRTgKCQkJLy8g Q2hlY2sgaWYgdGFibGUgY2VsbHMgc3RpbGwgaGF2ZSBvZmZzZXRXaWR0aC9IZWln aHQgd2hlbiB0aGV5IGFyZSBzZXQKCQkJLy8gdG8gZGlzcGxheTpub25lIGFuZCB0 aGVyZSBhcmUgc3RpbGwgb3RoZXIgdmlzaWJsZSB0YWJsZSBjZWxscyBpbiBhCgkJ CS8vIHRhYmxlIHJvdzsgaWYgc28sIG9mZnNldFdpZHRoL0hlaWdodCBhcmUgbm90 IHJlbGlhYmxlIGZvciB1c2Ugd2hlbgoJCQkvLyBkZXRlcm1pbmluZyBpZiBhbiBl bGVtZW50IGhhcyBiZWVuIGhpZGRlbiBkaXJlY3RseSB1c2luZwoJCQkvLyBkaXNw bGF5Om5vbmUgKGl0IGlzIHN0aWxsIHNhZmUgdG8gdXNlIG9mZnNldHMgaWYgYSBw YXJlbnQgZWxlbWVudCBpcwoJCQkvLyBoaWRkZW47IGRvbiBzYWZldHkgZ29nZ2xl cyBhbmQgc2VlIGJ1ZyAjNDUxMiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCgkJCWRp di5pbm5lckhUTUwgPSAiPHRhYmxlPjx0cj48dGQ+PC90ZD48dGQ+dDwvdGQ+PC90 cj48L3RhYmxlPiI7CgkJCXRkcyA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgg InRkIiApOwoJCQl0ZHNbIDAgXS5zdHlsZS5jc3NUZXh0ID0gInBhZGRpbmc6MDtt YXJnaW46MDtib3JkZXI6MDtkaXNwbGF5Om5vbmUiOwoJCQlpc1N1cHBvcnRlZCA9 ICggdGRzWyAwIF0ub2Zmc2V0SGVpZ2h0ID09PSAwICk7CgoJCQl0ZHNbIDAgXS5z dHlsZS5kaXNwbGF5ID0gIiI7CgkJCXRkc1sgMSBdLnN0eWxlLmRpc3BsYXkgPSAi bm9uZSI7CgoJCQkvLyBTdXBwb3J0OiBJRTgKCQkJLy8gQ2hlY2sgaWYgZW1wdHkg dGFibGUgY2VsbHMgc3RpbGwgaGF2ZSBvZmZzZXRXaWR0aC9IZWlnaHQKCQkJcmVs aWFibGVIaWRkZW5PZmZzZXRzVmFsID0gaXNTdXBwb3J0ZWQgJiYgKCB0ZHNbIDAg XS5vZmZzZXRIZWlnaHQgPT09IDAgKTsKCgkJCWJvZHkucmVtb3ZlQ2hpbGQoIGNv bnRhaW5lciApOwoKCQkJLy8gTnVsbCBlbGVtZW50cyB0byBhdm9pZCBsZWFrcyBp biBJRS4KCQkJZGl2ID0gYm9keSA9IG51bGw7CgoJCQlyZXR1cm4gcmVsaWFibGVI aWRkZW5PZmZzZXRzVmFsOwoJCX0sCgoJCWJveFNpemluZzogZnVuY3Rpb24oKSB7 CgkJCWlmICggYm94U2l6aW5nVmFsID09IG51bGwgKSB7CgkJCQljb21wdXRlU3R5 bGVUZXN0cygpOwoJCQl9CgkJCXJldHVybiBib3hTaXppbmdWYWw7CgkJfSwKCgkJ Ym94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uKCkgewoJCQlpZiAoIGJveFNpemlu Z1JlbGlhYmxlVmFsID09IG51bGwgKSB7CgkJCQljb21wdXRlU3R5bGVUZXN0cygp OwoJCQl9CgkJCXJldHVybiBib3hTaXppbmdSZWxpYWJsZVZhbDsKCQl9LAoKCQlw aXhlbFBvc2l0aW9uOiBmdW5jdGlvbigpIHsKCQkJaWYgKCBwaXhlbFBvc2l0aW9u VmFsID09IG51bGwgKSB7CgkJCQljb21wdXRlU3R5bGVUZXN0cygpOwoJCQl9CgkJ CXJldHVybiBwaXhlbFBvc2l0aW9uVmFsOwoJCX0sCgoJCXJlbGlhYmxlTWFyZ2lu UmlnaHQ6IGZ1bmN0aW9uKCkgewoJCQl2YXIgYm9keSwgY29udGFpbmVyLCBkaXYs IG1hcmdpbkRpdjsKCgkJCS8vIFVzZSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSBi ZWNhdXNlIGpzZG9tIG9uIG5vZGUuanMgd2lsbCBicmVhayB3aXRob3V0IGl0LgoJ CQlpZiAoIHJlbGlhYmxlTWFyZ2luUmlnaHRWYWwgPT0gbnVsbCAmJiB3aW5kb3cu Z2V0Q29tcHV0ZWRTdHlsZSApIHsKCQkJCWJvZHkgPSBkb2N1bWVudC5nZXRFbGVt ZW50c0J5VGFnTmFtZSggImJvZHkiIClbIDAgXTsKCQkJCWlmICggIWJvZHkgKSB7 CgkJCQkJLy8gVGVzdCBmaXJlZCB0b28gZWFybHkgb3IgaW4gYW4gdW5zdXBwb3J0 ZWQgZW52aXJvbm1lbnQsIGV4aXQuCgkJCQkJcmV0dXJuOwoJCQkJfQoKCQkJCWNv bnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICk7CgkJCQlk aXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApOwoJCQkJY29udGFp bmVyLnN0eWxlLmNzc1RleHQgPSBjb250YWluZXJTdHlsZXM7CgoJCQkJYm9keS5h cHBlbmRDaGlsZCggY29udGFpbmVyICkuYXBwZW5kQ2hpbGQoIGRpdiApOwoKCQkJ CS8vIENoZWNrIGlmIGRpdiB3aXRoIGV4cGxpY2l0IHdpZHRoIGFuZCBubyBtYXJn aW4tcmlnaHQgaW5jb3JyZWN0bHkKCQkJCS8vIGdldHMgY29tcHV0ZWQgbWFyZ2lu LXJpZ2h0IGJhc2VkIG9uIHdpZHRoIG9mIGNvbnRhaW5lci4gKCMzMzMzKQoJCQkJ Ly8gRmFpbHMgaW4gV2ViS2l0IGJlZm9yZSBGZWIgMjAxMSBuaWdodGxpZXMKCQkJ CS8vIFdlYktpdCBCdWcgMTMzNDMgLSBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMg d3JvbmcgdmFsdWUgZm9yIG1hcmdpbi1yaWdodAoJCQkJbWFyZ2luRGl2ID0gZGl2 LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApICk7 CgkJCQltYXJnaW5EaXYuc3R5bGUuY3NzVGV4dCA9IGRpdi5zdHlsZS5jc3NUZXh0 ID0gZGl2UmVzZXQ7CgkJCQltYXJnaW5EaXYuc3R5bGUubWFyZ2luUmlnaHQgPSBt YXJnaW5EaXYuc3R5bGUud2lkdGggPSAiMCI7CgkJCQlkaXYuc3R5bGUud2lkdGgg PSAiMXB4IjsKCgkJCQlyZWxpYWJsZU1hcmdpblJpZ2h0VmFsID0KCQkJCQkhcGFy c2VGbG9hdCggKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggbWFyZ2luRGl2LCBu dWxsICkgfHwge30gKS5tYXJnaW5SaWdodCApOwoKCQkJCWJvZHkucmVtb3ZlQ2hp bGQoIGNvbnRhaW5lciApOwoJCQl9CgoJCQlyZXR1cm4gcmVsaWFibGVNYXJnaW5S aWdodFZhbDsKCQl9Cgl9KTsKCglmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygp IHsKCQl2YXIgY29udGFpbmVyLCBkaXYsCgkJCWJvZHkgPSBkb2N1bWVudC5nZXRF bGVtZW50c0J5VGFnTmFtZSggImJvZHkiIClbIDAgXTsKCgkJaWYgKCAhYm9keSAp IHsKCQkJLy8gVGVzdCBmaXJlZCB0b28gZWFybHkgb3IgaW4gYW4gdW5zdXBwb3J0 ZWQgZW52aXJvbm1lbnQsIGV4aXQuCgkJCXJldHVybjsKCQl9CgoJCWNvbnRhaW5l ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICk7CgkJZGl2ID0gZG9j dW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKTsKCQljb250YWluZXIuc3R5bGUu Y3NzVGV4dCA9IGNvbnRhaW5lclN0eWxlczsKCgkJYm9keS5hcHBlbmRDaGlsZCgg Y29udGFpbmVyICkuYXBwZW5kQ2hpbGQoIGRpdiApOwoKCQlkaXYuc3R5bGUuY3Nz VGV4dCA9CgkJCSItd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJv eC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7IiArCgkJ CQkicG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jaztwYWRkaW5nOjFweDti b3JkZXI6MXB4O3dpZHRoOjRweDsiICsKCQkJCSJtYXJnaW4tdG9wOjElO3RvcDox JSI7CgoJCS8vIFdvcmthcm91bmQgZmFpbGluZyBib3hTaXppbmcgdGVzdCBkdWUg dG8gb2Zmc2V0V2lkdGggcmV0dXJuaW5nIHdyb25nIHZhbHVlCgkJLy8gd2l0aCBz b21lIG5vbi0xIHZhbHVlcyBvZiBib2R5IHpvb20sIHRpY2tldCAjMTM1NDMKCQlq UXVlcnkuc3dhcCggYm9keSwgYm9keS5zdHlsZS56b29tICE9IG51bGwgPyB7IHpv b206IDEgfSA6IHt9LCBmdW5jdGlvbigpIHsKCQkJYm94U2l6aW5nVmFsID0gZGl2 Lm9mZnNldFdpZHRoID09PSA0OwoJCX0pOwoKCQkvLyBXaWxsIGJlIGNoYW5nZWQg bGF0ZXIgaWYgbmVlZGVkLgoJCWJveFNpemluZ1JlbGlhYmxlVmFsID0gdHJ1ZTsK CQlwaXhlbFBvc2l0aW9uVmFsID0gZmFsc2U7CgkJcmVsaWFibGVNYXJnaW5SaWdo dFZhbCA9IHRydWU7CgoJCS8vIFVzZSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSBi ZWNhdXNlIGpzZG9tIG9uIG5vZGUuanMgd2lsbCBicmVhayB3aXRob3V0IGl0LgoJ CWlmICggd2luZG93LmdldENvbXB1dGVkU3R5bGUgKSB7CgkJCXBpeGVsUG9zaXRp b25WYWwgPSAoIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYsIG51bGwgKSB8 fCB7fSApLnRvcCAhPT0gIjElIjsKCQkJYm94U2l6aW5nUmVsaWFibGVWYWwgPQoJ CQkJKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZGl2LCBudWxsICkgfHwgeyB3 aWR0aDogIjRweCIgfSApLndpZHRoID09PSAiNHB4IjsKCQl9CgoJCWJvZHkucmVt b3ZlQ2hpbGQoIGNvbnRhaW5lciApOwoKCQkvLyBOdWxsIGVsZW1lbnRzIHRvIGF2 b2lkIGxlYWtzIGluIElFLgoJCWRpdiA9IGJvZHkgPSBudWxsOwoJfQoKfSkoKTsK CgovLyBBIG1ldGhvZCBmb3IgcXVpY2tseSBzd2FwcGluZyBpbi9vdXQgQ1NTIHBy b3BlcnRpZXMgdG8gZ2V0IGNvcnJlY3QgY2FsY3VsYXRpb25zLgpqUXVlcnkuc3dh cCA9IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBjYWxsYmFjaywgYXJncyApIHsK CXZhciByZXQsIG5hbWUsCgkJb2xkID0ge307CgoJLy8gUmVtZW1iZXIgdGhlIG9s ZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzCglmb3IgKCBuYW1lIGlu IG9wdGlvbnMgKSB7CgkJb2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07 CgkJZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdOwoJfQoKCXJl dCA9IGNhbGxiYWNrLmFwcGx5KCBlbGVtLCBhcmdzIHx8IFtdICk7CgoJLy8gUmV2 ZXJ0IHRoZSBvbGQgdmFsdWVzCglmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7CgkJ ZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07Cgl9CgoJcmV0dXJuIHJl dDsKfTsKCgp2YXIKCQlyYWxwaGEgPSAvYWxwaGFcKFteKV0qXCkvaSwKCXJvcGFj aXR5ID0gL29wYWNpdHlccyo9XHMqKFteKV0qKS8sCgoJLy8gc3dhcHBhYmxlIGlm IGRpc3BsYXkgaXMgbm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZSBleGNlcHQgInRh YmxlIiwgInRhYmxlLWNlbGwiLCBvciAidGFibGUtY2FwdGlvbiIKCS8vIHNlZSBo ZXJlIGZvciBkaXNwbGF5IHZhbHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxs YS5vcmcvZW4tVVMvZG9jcy9DU1MvZGlzcGxheQoJcmRpc3BsYXlzd2FwID0gL14o bm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLAoJcm51bXNwbGl0ID0gbmV3IFJlZ0V4 cCggIl4oIiArIHBudW0gKyAiKSguKikkIiwgImkiICksCglycmVsTnVtID0gbmV3 IFJlZ0V4cCggIl4oWystXSk9KCIgKyBwbnVtICsgIikiLCAiaSIgKSwKCgljc3NT aG93ID0geyBwb3NpdGlvbjogImFic29sdXRlIiwgdmlzaWJpbGl0eTogImhpZGRl biIsIGRpc3BsYXk6ICJibG9jayIgfSwKCWNzc05vcm1hbFRyYW5zZm9ybSA9IHsK CQlsZXR0ZXJTcGFjaW5nOiAwLAoJCWZvbnRXZWlnaHQ6IDQwMAoJfSwKCgljc3NQ cmVmaXhlcyA9IFsgIldlYmtpdCIsICJPIiwgIk1veiIsICJtcyIgXTsKCgovLyBy ZXR1cm4gYSBjc3MgcHJvcGVydHkgbWFwcGVkIHRvIGEgcG90ZW50aWFsbHkgdmVu ZG9yIHByZWZpeGVkIHByb3BlcnR5CmZ1bmN0aW9uIHZlbmRvclByb3BOYW1lKCBz dHlsZSwgbmFtZSApIHsKCgkvLyBzaG9ydGN1dCBmb3IgbmFtZXMgdGhhdCBhcmUg bm90IHZlbmRvciBwcmVmaXhlZAoJaWYgKCBuYW1lIGluIHN0eWxlICkgewoJCXJl dHVybiBuYW1lOwoJfQoKCS8vIGNoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFt ZXMKCXZhciBjYXBOYW1lID0gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSAr IG5hbWUuc2xpY2UoMSksCgkJb3JpZ05hbWUgPSBuYW1lLAoJCWkgPSBjc3NQcmVm aXhlcy5sZW5ndGg7CgoJd2hpbGUgKCBpLS0gKSB7CgkJbmFtZSA9IGNzc1ByZWZp eGVzWyBpIF0gKyBjYXBOYW1lOwoJCWlmICggbmFtZSBpbiBzdHlsZSApIHsKCQkJ cmV0dXJuIG5hbWU7CgkJfQoJfQoKCXJldHVybiBvcmlnTmFtZTsKfQoKZnVuY3Rp b24gc2hvd0hpZGUoIGVsZW1lbnRzLCBzaG93ICkgewoJdmFyIGRpc3BsYXksIGVs ZW0sIGhpZGRlbiwKCQl2YWx1ZXMgPSBbXSwKCQlpbmRleCA9IDAsCgkJbGVuZ3Ro ID0gZWxlbWVudHMubGVuZ3RoOwoKCWZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGlu ZGV4KysgKSB7CgkJZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdOwoJCWlmICggIWVs ZW0uc3R5bGUgKSB7CgkJCWNvbnRpbnVlOwoJCX0KCgkJdmFsdWVzWyBpbmRleCBd ID0galF1ZXJ5Ll9kYXRhKCBlbGVtLCAib2xkZGlzcGxheSIgKTsKCQlkaXNwbGF5 ID0gZWxlbS5zdHlsZS5kaXNwbGF5OwoJCWlmICggc2hvdyApIHsKCQkJLy8gUmVz ZXQgdGhlIGlubGluZSBkaXNwbGF5IG9mIHRoaXMgZWxlbWVudCB0byBsZWFybiBp ZiBpdCBpcwoJCQkvLyBiZWluZyBoaWRkZW4gYnkgY2FzY2FkZWQgcnVsZXMgb3Ig bm90CgkJCWlmICggIXZhbHVlc1sgaW5kZXggXSAmJiBkaXNwbGF5ID09PSAibm9u ZSIgKSB7CgkJCQllbGVtLnN0eWxlLmRpc3BsYXkgPSAiIjsKCQkJfQoKCQkJLy8g U2V0IGVsZW1lbnRzIHdoaWNoIGhhdmUgYmVlbiBvdmVycmlkZGVuIHdpdGggZGlz cGxheTogbm9uZQoJCQkvLyBpbiBhIHN0eWxlc2hlZXQgdG8gd2hhdGV2ZXIgdGhl IGRlZmF1bHQgYnJvd3NlciBzdHlsZSBpcwoJCQkvLyBmb3Igc3VjaCBhbiBlbGVt ZW50CgkJCWlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSAiIiAmJiBpc0hpZGRl biggZWxlbSApICkgewoJCQkJdmFsdWVzWyBpbmRleCBdID0galF1ZXJ5Ll9kYXRh KCBlbGVtLCAib2xkZGlzcGxheSIsIGRlZmF1bHREaXNwbGF5KGVsZW0ubm9kZU5h bWUpICk7CgkJCX0KCQl9IGVsc2UgewoKCQkJaWYgKCAhdmFsdWVzWyBpbmRleCBd ICkgewoJCQkJaGlkZGVuID0gaXNIaWRkZW4oIGVsZW0gKTsKCgkJCQlpZiAoIGRp c3BsYXkgJiYgZGlzcGxheSAhPT0gIm5vbmUiIHx8ICFoaWRkZW4gKSB7CgkJCQkJ alF1ZXJ5Ll9kYXRhKCBlbGVtLCAib2xkZGlzcGxheSIsIGhpZGRlbiA/IGRpc3Bs YXkgOiBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSApOwoJCQkJfQoJCQl9 CgkJfQoJfQoKCS8vIFNldCB0aGUgZGlzcGxheSBvZiBtb3N0IG9mIHRoZSBlbGVt ZW50cyBpbiBhIHNlY29uZCBsb29wCgkvLyB0byBhdm9pZCB0aGUgY29uc3RhbnQg cmVmbG93Cglmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsr ICkgewoJCWVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTsKCQlpZiAoICFlbGVtLnN0 eWxlICkgewoJCQljb250aW51ZTsKCQl9CgkJaWYgKCAhc2hvdyB8fCBlbGVtLnN0 eWxlLmRpc3BsYXkgPT09ICJub25lIiB8fCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09 ICIiICkgewoJCQllbGVtLnN0eWxlLmRpc3BsYXkgPSBzaG93ID8gdmFsdWVzWyBp bmRleCBdIHx8ICIiIDogIm5vbmUiOwoJCX0KCX0KCglyZXR1cm4gZWxlbWVudHM7 Cn0KCmZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3Vi dHJhY3QgKSB7Cgl2YXIgbWF0Y2hlcyA9IHJudW1zcGxpdC5leGVjKCB2YWx1ZSAp OwoJcmV0dXJuIG1hdGNoZXMgPwoJCS8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVk ICJzdWJ0cmFjdCIsIGUuZy4sIHdoZW4gdXNlZCBhcyBpbiBjc3NIb29rcwoJCU1h dGgubWF4KCAwLCBtYXRjaGVzWyAxIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsg KCBtYXRjaGVzWyAyIF0gfHwgInB4IiApIDoKCQl2YWx1ZTsKfQoKZnVuY3Rpb24g YXVnbWVudFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhLCBpc0JvcmRl ckJveCwgc3R5bGVzICkgewoJdmFyIGkgPSBleHRyYSA9PT0gKCBpc0JvcmRlckJv eCA/ICJib3JkZXIiIDogImNvbnRlbnQiICkgPwoJCS8vIElmIHdlIGFscmVhZHkg aGF2ZSB0aGUgcmlnaHQgbWVhc3VyZW1lbnQsIGF2b2lkIGF1Z21lbnRhdGlvbgoJ CTQgOgoJCS8vIE90aGVyd2lzZSBpbml0aWFsaXplIGZvciBob3Jpem9udGFsIG9y IHZlcnRpY2FsIHByb3BlcnRpZXMKCQluYW1lID09PSAid2lkdGgiID8gMSA6IDAs CgoJCXZhbCA9IDA7CgoJZm9yICggOyBpIDwgNDsgaSArPSAyICkgewoJCS8vIGJv dGggYm94IG1vZGVscyBleGNsdWRlIG1hcmdpbiwgc28gYWRkIGl0IGlmIHdlIHdh bnQgaXQKCQlpZiAoIGV4dHJhID09PSAibWFyZ2luIiApIHsKCQkJdmFsICs9IGpR dWVyeS5jc3MoIGVsZW0sIGV4dHJhICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0 eWxlcyApOwoJCX0KCgkJaWYgKCBpc0JvcmRlckJveCApIHsKCQkJLy8gYm9yZGVy LWJveCBpbmNsdWRlcyBwYWRkaW5nLCBzbyByZW1vdmUgaXQgaWYgd2Ugd2FudCBj b250ZW50CgkJCWlmICggZXh0cmEgPT09ICJjb250ZW50IiApIHsKCQkJCXZhbCAt PSBqUXVlcnkuY3NzKCBlbGVtLCAicGFkZGluZyIgKyBjc3NFeHBhbmRbIGkgXSwg dHJ1ZSwgc3R5bGVzICk7CgkJCX0KCgkJCS8vIGF0IHRoaXMgcG9pbnQsIGV4dHJh IGlzbid0IGJvcmRlciBub3IgbWFyZ2luLCBzbyByZW1vdmUgYm9yZGVyCgkJCWlm ICggZXh0cmEgIT09ICJtYXJnaW4iICkgewoJCQkJdmFsIC09IGpRdWVyeS5jc3Mo IGVsZW0sICJib3JkZXIiICsgY3NzRXhwYW5kWyBpIF0gKyAiV2lkdGgiLCB0cnVl LCBzdHlsZXMgKTsKCQkJfQoJCX0gZWxzZSB7CgkJCS8vIGF0IHRoaXMgcG9pbnQs IGV4dHJhIGlzbid0IGNvbnRlbnQsIHNvIGFkZCBwYWRkaW5nCgkJCXZhbCArPSBq UXVlcnkuY3NzKCBlbGVtLCAicGFkZGluZyIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1 ZSwgc3R5bGVzICk7CgoJCQkvLyBhdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBj b250ZW50IG5vciBwYWRkaW5nLCBzbyBhZGQgYm9yZGVyCgkJCWlmICggZXh0cmEg IT09ICJwYWRkaW5nIiApIHsKCQkJCXZhbCArPSBqUXVlcnkuY3NzKCBlbGVtLCAi Ym9yZGVyIiArIGNzc0V4cGFuZFsgaSBdICsgIldpZHRoIiwgdHJ1ZSwgc3R5bGVz ICk7CgkJCX0KCQl9Cgl9CgoJcmV0dXJuIHZhbDsKfQoKZnVuY3Rpb24gZ2V0V2lk dGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKSB7CgoJLy8gU3RhcnQgd2l0 aCBvZmZzZXQgcHJvcGVydHksIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGJv cmRlci1ib3ggdmFsdWUKCXZhciB2YWx1ZUlzQm9yZGVyQm94ID0gdHJ1ZSwKCQl2 YWwgPSBuYW1lID09PSAid2lkdGgiID8gZWxlbS5vZmZzZXRXaWR0aCA6IGVsZW0u b2Zmc2V0SGVpZ2h0LAoJCXN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLAoJCWlz Qm9yZGVyQm94ID0gc3VwcG9ydC5ib3hTaXppbmcoKSAmJiBqUXVlcnkuY3NzKCBl bGVtLCAiYm94U2l6aW5nIiwgZmFsc2UsIHN0eWxlcyApID09PSAiYm9yZGVyLWJv eCI7CgoJLy8gc29tZSBub24taHRtbCBlbGVtZW50cyByZXR1cm4gdW5kZWZpbmVk IGZvciBvZmZzZXRXaWR0aCwgc28gY2hlY2sgZm9yIG51bGwvdW5kZWZpbmVkCgkv LyBzdmcgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNn aT9pZD02NDkyODUKCS8vIE1hdGhNTCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxs YS5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MTY2OAoJaWYgKCB2YWwgPD0gMCB8fCB2 YWwgPT0gbnVsbCApIHsKCQkvLyBGYWxsIGJhY2sgdG8gY29tcHV0ZWQgdGhlbiB1 bmNvbXB1dGVkIGNzcyBpZiBuZWNlc3NhcnkKCQl2YWwgPSBjdXJDU1MoIGVsZW0s IG5hbWUsIHN0eWxlcyApOwoJCWlmICggdmFsIDwgMCB8fCB2YWwgPT0gbnVsbCAp IHsKCQkJdmFsID0gZWxlbS5zdHlsZVsgbmFtZSBdOwoJCX0KCgkJLy8gQ29tcHV0 ZWQgdW5pdCBpcyBub3QgcGl4ZWxzLiBTdG9wIGhlcmUgYW5kIHJldHVybi4KCQlp ZiAoIHJudW1ub25weC50ZXN0KHZhbCkgKSB7CgkJCXJldHVybiB2YWw7CgkJfQoK CQkvLyB3ZSBuZWVkIHRoZSBjaGVjayBmb3Igc3R5bGUgaW4gY2FzZSBhIGJyb3dz ZXIgd2hpY2ggcmV0dXJucyB1bnJlbGlhYmxlIHZhbHVlcwoJCS8vIGZvciBnZXRD b21wdXRlZFN0eWxlIHNpbGVudGx5IGZhbGxzIGJhY2sgdG8gdGhlIHJlbGlhYmxl IGVsZW0uc3R5bGUKCQl2YWx1ZUlzQm9yZGVyQm94ID0gaXNCb3JkZXJCb3ggJiYg KCBzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgfHwgdmFsID09PSBlbGVtLnN0 eWxlWyBuYW1lIF0gKTsKCgkJLy8gTm9ybWFsaXplICIiLCBhdXRvLCBhbmQgcHJl cGFyZSBmb3IgZXh0cmEKCQl2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwOwoJ fQoKCS8vIHVzZSB0aGUgYWN0aXZlIGJveC1zaXppbmcgbW9kZWwgdG8gYWRkL3N1 YnRyYWN0IGlycmVsZXZhbnQgc3R5bGVzCglyZXR1cm4gKCB2YWwgKwoJCWF1Z21l bnRXaWR0aE9ySGVpZ2h0KAoJCQllbGVtLAoJCQluYW1lLAoJCQlleHRyYSB8fCAo IGlzQm9yZGVyQm94ID8gImJvcmRlciIgOiAiY29udGVudCIgKSwKCQkJdmFsdWVJ c0JvcmRlckJveCwKCQkJc3R5bGVzCgkJKQoJKSArICJweCI7Cn0KCmpRdWVyeS5l eHRlbmQoewoJLy8gQWRkIGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVy cmlkaW5nIHRoZSBkZWZhdWx0CgkvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBz ZXR0aW5nIGEgc3R5bGUgcHJvcGVydHkKCWNzc0hvb2tzOiB7CgkJb3BhY2l0eTog ewoJCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKCQkJCWlmICgg Y29tcHV0ZWQgKSB7CgkJCQkJLy8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1i ZXIgYmFjayBmcm9tIG9wYWNpdHkKCQkJCQl2YXIgcmV0ID0gY3VyQ1NTKCBlbGVt LCAib3BhY2l0eSIgKTsKCQkJCQlyZXR1cm4gcmV0ID09PSAiIiA/ICIxIiA6IHJl dDsKCQkJCX0KCQkJfQoJCX0KCX0sCgoJLy8gRG9uJ3QgYXV0b21hdGljYWxseSBh ZGQgInB4IiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzCglj c3NOdW1iZXI6IHsKCQkiY29sdW1uQ291bnQiOiB0cnVlLAoJCSJmaWxsT3BhY2l0 eSI6IHRydWUsCgkJImZvbnRXZWlnaHQiOiB0cnVlLAoJCSJsaW5lSGVpZ2h0Ijog dHJ1ZSwKCQkib3BhY2l0eSI6IHRydWUsCgkJIm9yZGVyIjogdHJ1ZSwKCQkib3Jw aGFucyI6IHRydWUsCgkJIndpZG93cyI6IHRydWUsCgkJInpJbmRleCI6IHRydWUs CgkJInpvb20iOiB0cnVlCgl9LAoKCS8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3Nl IG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmUKCS8vIHNldHRpbmcgb3IgZ2V0 dGluZyB0aGUgdmFsdWUKCWNzc1Byb3BzOiB7CgkJLy8gbm9ybWFsaXplIGZsb2F0 IGNzcyBwcm9wZXJ0eQoJCSJmbG9hdCI6IHN1cHBvcnQuY3NzRmxvYXQgPyAiY3Nz RmxvYXQiIDogInN0eWxlRmxvYXQiCgl9LAoKCS8vIEdldCBhbmQgc2V0IHRoZSBz dHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlCglzdHlsZTogZnVuY3Rpb24oIGVs ZW0sIG5hbWUsIHZhbHVlLCBleHRyYSApIHsKCQkvLyBEb24ndCBzZXQgc3R5bGVz IG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMKCQlpZiAoICFlbGVtIHx8IGVsZW0u bm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5z dHlsZSApIHsKCQkJcmV0dXJuOwoJCX0KCgkJLy8gTWFrZSBzdXJlIHRoYXQgd2Un cmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lCgkJdmFyIHJldCwgdHlwZSwg aG9va3MsCgkJCW9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApLAoJ CQlzdHlsZSA9IGVsZW0uc3R5bGU7CgoJCW5hbWUgPSBqUXVlcnkuY3NzUHJvcHNb IG9yaWdOYW1lIF0gfHwgKCBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gPSB2 ZW5kb3JQcm9wTmFtZSggc3R5bGUsIG9yaWdOYW1lICkgKTsKCgkJLy8gZ2V0cyBo b29rIGZvciB0aGUgcHJlZml4ZWQgdmVyc2lvbgoJCS8vIGZvbGxvd2VkIGJ5IHRo ZSB1bnByZWZpeGVkIHZlcnNpb24KCQlob29rcyA9IGpRdWVyeS5jc3NIb29rc1sg bmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTsKCgkJLy8gQ2hl Y2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlCgkJaWYgKCB2YWx1ZSAhPT0gdW5k ZWZpbmVkICkgewoJCQl0eXBlID0gdHlwZW9mIHZhbHVlOwoKCQkJLy8gY29udmVy dCByZWxhdGl2ZSBudW1iZXIgc3RyaW5ncyAoKz0gb3IgLT0pIHRvIHJlbGF0aXZl IG51bWJlcnMuICM3MzQ1CgkJCWlmICggdHlwZSA9PT0gInN0cmluZyIgJiYgKHJl dCA9IHJyZWxOdW0uZXhlYyggdmFsdWUgKSkgKSB7CgkJCQl2YWx1ZSA9ICggcmV0 WzFdICsgMSApICogcmV0WzJdICsgcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxl bSwgbmFtZSApICk7CgkJCQkvLyBGaXhlcyBidWcgIzkyMzcKCQkJCXR5cGUgPSAi bnVtYmVyIjsKCQkJfQoKCQkJLy8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFO IHZhbHVlcyBhcmVuJ3Qgc2V0LiBTZWU6ICM3MTE2CgkJCWlmICggdmFsdWUgPT0g bnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7CgkJCQlyZXR1cm47CgkJCX0KCgkJ CS8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCAncHgnIHRvIHRoZSAo ZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKQoJCQlpZiAoIHR5cGUg PT09ICJudW1iZXIiICYmICFqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdICkg ewoJCQkJdmFsdWUgKz0gInB4IjsKCQkJfQoKCQkJLy8gRml4ZXMgIzg5MDgsIGl0 IGNhbiBiZSBkb25lIG1vcmUgY29ycmVjdGx5IGJ5IHNwZWNpZmluZyBzZXR0ZXJz IGluIGNzc0hvb2tzLAoJCQkvLyBidXQgaXQgd291bGQgbWVhbiB0byBkZWZpbmUg ZWlnaHQgKGZvciBldmVyeSBwcm9ibGVtYXRpYyBwcm9wZXJ0eSkgaWRlbnRpY2Fs IGZ1bmN0aW9ucwoJCQlpZiAoICFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2 YWx1ZSA9PT0gIiIgJiYgbmFtZS5pbmRleE9mKCJiYWNrZ3JvdW5kIikgPT09IDAg KSB7CgkJCQlzdHlsZVsgbmFtZSBdID0gImluaGVyaXQiOwoJCQl9CgoJCQkvLyBJ ZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNl IGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUKCQkJaWYgKCAhaG9va3MgfHwg ISgic2V0IiBpbiBob29rcykgfHwgKHZhbHVlID0gaG9va3Muc2V0KCBlbGVtLCB2 YWx1ZSwgZXh0cmEgKSkgIT09IHVuZGVmaW5lZCApIHsKCgkJCQkvLyBTdXBwb3J0 OiBJRQoJCQkJLy8gU3dhbGxvdyBlcnJvcnMgZnJvbSAnaW52YWxpZCcgQ1NTIHZh bHVlcyAoIzU1MDkpCgkJCQl0cnkgewoJCQkJCS8vIFN1cHBvcnQ6IENocm9tZSwg U2FmYXJpCgkJCQkJLy8gU2V0dGluZyBzdHlsZSB0byBibGFuayBzdHJpbmcgcmVx dWlyZWQgdG8gZGVsZXRlICJzdHlsZTogeCAhaW1wb3J0YW50OyIKCQkJCQlzdHls ZVsgbmFtZSBdID0gIiI7CgkJCQkJc3R5bGVbIG5hbWUgXSA9IHZhbHVlOwoJCQkJ fSBjYXRjaChlKSB7fQoJCQl9CgoJCX0gZWxzZSB7CgkJCS8vIElmIGEgaG9vayB3 YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVy ZQoJCQlpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29r cy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApKSAhPT0gdW5kZWZpbmVkICkgewoJ CQkJcmV0dXJuIHJldDsKCQkJfQoKCQkJLy8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRo ZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3QKCQkJcmV0dXJuIHN0eWxlWyBu YW1lIF07CgkJfQoJfSwKCgljc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRy YSwgc3R5bGVzICkgewoJCXZhciBudW0sIHZhbCwgaG9va3MsCgkJCW9yaWdOYW1l ID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApOwoKCQkvLyBNYWtlIHN1cmUgdGhh dCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUKCQluYW1lID0galF1 ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdIHx8ICggalF1ZXJ5LmNzc1Byb3BzWyBv cmlnTmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIGVsZW0uc3R5bGUsIG9yaWdOYW1l ICkgKTsKCgkJLy8gZ2V0cyBob29rIGZvciB0aGUgcHJlZml4ZWQgdmVyc2lvbgoJ CS8vIGZvbGxvd2VkIGJ5IHRoZSB1bnByZWZpeGVkIHZlcnNpb24KCQlob29rcyA9 IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3Jp Z05hbWUgXTsKCgkJLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNv bXB1dGVkIHZhbHVlIGZyb20gdGhlcmUKCQlpZiAoIGhvb2tzICYmICJnZXQiIGlu IGhvb2tzICkgewoJCQl2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJh ICk7CgkJfQoKCQkvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29t cHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdAoJCWlmICggdmFsID09PSB1bmRl ZmluZWQgKSB7CgkJCXZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgc3R5bGVzICk7 CgkJfQoKCQkvL2NvbnZlcnQgIm5vcm1hbCIgdG8gY29tcHV0ZWQgdmFsdWUKCQlp ZiAoIHZhbCA9PT0gIm5vcm1hbCIgJiYgbmFtZSBpbiBjc3NOb3JtYWxUcmFuc2Zv cm0gKSB7CgkJCXZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdOwoJCX0K CgkJLy8gUmV0dXJuLCBjb252ZXJ0aW5nIHRvIG51bWJlciBpZiBmb3JjZWQgb3Ig YSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpYwoJ CWlmICggZXh0cmEgPT09ICIiIHx8IGV4dHJhICkgewoJCQludW0gPSBwYXJzZUZs b2F0KCB2YWwgKTsKCQkJcmV0dXJuIGV4dHJhID09PSB0cnVlIHx8IGpRdWVyeS5p c051bWVyaWMoIG51bSApID8gbnVtIHx8IDAgOiB2YWw7CgkJfQoJCXJldHVybiB2 YWw7Cgl9Cn0pOwoKalF1ZXJ5LmVhY2goWyAiaGVpZ2h0IiwgIndpZHRoIiBdLCBm dW5jdGlvbiggaSwgbmFtZSApIHsKCWpRdWVyeS5jc3NIb29rc1sgbmFtZSBdID0g ewoJCWdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHsKCQkJ aWYgKCBjb21wdXRlZCApIHsKCQkJCS8vIGNlcnRhaW4gZWxlbWVudHMgY2FuIGhh dmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbQoJCQkJ Ly8gaG93ZXZlciwgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxl IHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIHRoaXMKCQkJCXJldHVybiBlbGVtLm9m ZnNldFdpZHRoID09PSAwICYmIHJkaXNwbGF5c3dhcC50ZXN0KCBqUXVlcnkuY3Nz KCBlbGVtLCAiZGlzcGxheSIgKSApID8KCQkJCQlqUXVlcnkuc3dhcCggZWxlbSwg Y3NzU2hvdywgZnVuY3Rpb24oKSB7CgkJCQkJCXJldHVybiBnZXRXaWR0aE9ySGVp Z2h0KCBlbGVtLCBuYW1lLCBleHRyYSApOwoJCQkJCX0pIDoKCQkJCQlnZXRXaWR0 aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApOwoJCQl9CgkJfSwKCgkJc2V0 OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIGV4dHJhICkgewoJCQl2YXIgc3R5bGVz ID0gZXh0cmEgJiYgZ2V0U3R5bGVzKCBlbGVtICk7CgkJCXJldHVybiBzZXRQb3Np dGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIGV4dHJhID8KCQkJCWF1Z21lbnRXaWR0 aE9ySGVpZ2h0KAoJCQkJCWVsZW0sCgkJCQkJbmFtZSwKCQkJCQlleHRyYSwKCQkJ CQlzdXBwb3J0LmJveFNpemluZygpICYmIGpRdWVyeS5jc3MoIGVsZW0sICJib3hT aXppbmciLCBmYWxzZSwgc3R5bGVzICkgPT09ICJib3JkZXItYm94IiwKCQkJCQlz dHlsZXMKCQkJCSkgOiAwCgkJCSk7CgkJfQoJfTsKfSk7CgppZiAoICFzdXBwb3J0 Lm9wYWNpdHkgKSB7CglqUXVlcnkuY3NzSG9va3Mub3BhY2l0eSA9IHsKCQlnZXQ6 IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKCQkJLy8gSUUgdXNlcyBmaWx0 ZXJzIGZvciBvcGFjaXR5CgkJCXJldHVybiByb3BhY2l0eS50ZXN0KCAoY29tcHV0 ZWQgJiYgZWxlbS5jdXJyZW50U3R5bGUgPyBlbGVtLmN1cnJlbnRTdHlsZS5maWx0 ZXIgOiBlbGVtLnN0eWxlLmZpbHRlcikgfHwgIiIgKSA/CgkJCQkoIDAuMDEgKiBw YXJzZUZsb2F0KCBSZWdFeHAuJDEgKSApICsgIiIgOgoJCQkJY29tcHV0ZWQgPyAi MSIgOiAiIjsKCQl9LAoKCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsK CQkJdmFyIHN0eWxlID0gZWxlbS5zdHlsZSwKCQkJCWN1cnJlbnRTdHlsZSA9IGVs ZW0uY3VycmVudFN0eWxlLAoJCQkJb3BhY2l0eSA9IGpRdWVyeS5pc051bWVyaWMo IHZhbHVlICkgPyAiYWxwaGEob3BhY2l0eT0iICsgdmFsdWUgKiAxMDAgKyAiKSIg OiAiIiwKCQkJCWZpbHRlciA9IGN1cnJlbnRTdHlsZSAmJiBjdXJyZW50U3R5bGUu ZmlsdGVyIHx8IHN0eWxlLmZpbHRlciB8fCAiIjsKCgkJCS8vIElFIGhhcyB0cm91 YmxlIHdpdGggb3BhY2l0eSBpZiBpdCBkb2VzIG5vdCBoYXZlIGxheW91dAoJCQkv LyBGb3JjZSBpdCBieSBzZXR0aW5nIHRoZSB6b29tIGxldmVsCgkJCXN0eWxlLnpv b20gPSAxOwoKCQkJLy8gaWYgc2V0dGluZyBvcGFjaXR5IHRvIDEsIGFuZCBubyBv dGhlciBmaWx0ZXJzIGV4aXN0IC0gYXR0ZW1wdCB0byByZW1vdmUgZmlsdGVyIGF0 dHJpYnV0ZSAjNjY1MgoJCQkvLyBpZiB2YWx1ZSA9PT0gIiIsIHRoZW4gcmVtb3Zl IGlubGluZSBvcGFjaXR5ICMxMjY4NQoJCQlpZiAoICggdmFsdWUgPj0gMSB8fCB2 YWx1ZSA9PT0gIiIgKSAmJgoJCQkJCWpRdWVyeS50cmltKCBmaWx0ZXIucmVwbGFj ZSggcmFscGhhLCAiIiApICkgPT09ICIiICYmCgkJCQkJc3R5bGUucmVtb3ZlQXR0 cmlidXRlICkgewoKCQkJCS8vIFNldHRpbmcgc3R5bGUuZmlsdGVyIHRvIG51bGws ICIiICYgIiAiIHN0aWxsIGxlYXZlICJmaWx0ZXI6IiBpbiB0aGUgY3NzVGV4dAoJ CQkJLy8gaWYgImZpbHRlcjoiIGlzIHByZXNlbnQgYXQgYWxsLCBjbGVhclR5cGUg aXMgZGlzYWJsZWQsIHdlIHdhbnQgdG8gYXZvaWQgdGhpcwoJCQkJLy8gc3R5bGUu cmVtb3ZlQXR0cmlidXRlIGlzIElFIE9ubHksIGJ1dCBzbyBhcHBhcmVudGx5IGlz IHRoaXMgY29kZSBwYXRoLi4uCgkJCQlzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoICJm aWx0ZXIiICk7CgoJCQkJLy8gaWYgdGhlcmUgaXMgbm8gZmlsdGVyIHN0eWxlIGFw cGxpZWQgaW4gYSBjc3MgcnVsZSBvciB1bnNldCBpbmxpbmUgb3BhY2l0eSwgd2Ug YXJlIGRvbmUKCQkJCWlmICggdmFsdWUgPT09ICIiIHx8IGN1cnJlbnRTdHlsZSAm JiAhY3VycmVudFN0eWxlLmZpbHRlciApIHsKCQkJCQlyZXR1cm47CgkJCQl9CgkJ CX0KCgkJCS8vIG90aGVyd2lzZSwgc2V0IG5ldyBmaWx0ZXIgdmFsdWVzCgkJCXN0 eWxlLmZpbHRlciA9IHJhbHBoYS50ZXN0KCBmaWx0ZXIgKSA/CgkJCQlmaWx0ZXIu cmVwbGFjZSggcmFscGhhLCBvcGFjaXR5ICkgOgoJCQkJZmlsdGVyICsgIiAiICsg b3BhY2l0eTsKCQl9Cgl9Owp9CgpqUXVlcnkuY3NzSG9va3MubWFyZ2luUmlnaHQg PSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodCwKCWZ1 bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKCQlpZiAoIGNvbXB1dGVkICkgewoJ CQkvLyBXZWJLaXQgQnVnIDEzMzQzIC0gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5z IHdyb25nIHZhbHVlIGZvciBtYXJnaW4tcmlnaHQKCQkJLy8gV29yayBhcm91bmQg YnkgdGVtcG9yYXJpbHkgc2V0dGluZyBlbGVtZW50IGRpc3BsYXkgdG8gaW5saW5l LWJsb2NrCgkJCXJldHVybiBqUXVlcnkuc3dhcCggZWxlbSwgeyAiZGlzcGxheSI6 ICJpbmxpbmUtYmxvY2siIH0sCgkJCQljdXJDU1MsIFsgZWxlbSwgIm1hcmdpblJp Z2h0IiBdICk7CgkJfQoJfQopOwoKLy8gVGhlc2UgaG9va3MgYXJlIHVzZWQgYnkg YW5pbWF0ZSB0byBleHBhbmQgcHJvcGVydGllcwpqUXVlcnkuZWFjaCh7CgltYXJn aW46ICIiLAoJcGFkZGluZzogIiIsCglib3JkZXI6ICJXaWR0aCIKfSwgZnVuY3Rp b24oIHByZWZpeCwgc3VmZml4ICkgewoJalF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXgg KyBzdWZmaXggXSA9IHsKCQlleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKCQkJ dmFyIGkgPSAwLAoJCQkJZXhwYW5kZWQgPSB7fSwKCgkJCQkvLyBhc3N1bWVzIGEg c2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmcKCQkJCXBhcnRzID0gdHlwZW9m IHZhbHVlID09PSAic3RyaW5nIiA/IHZhbHVlLnNwbGl0KCIgIikgOiBbIHZhbHVl IF07CgoJCQlmb3IgKCA7IGkgPCA0OyBpKysgKSB7CgkJCQlleHBhbmRlZFsgcHJl Zml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9CgkJCQkJcGFydHNbIGkg XSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdOwoJCQl9CgoJCQlyZXR1 cm4gZXhwYW5kZWQ7CgkJfQoJfTsKCglpZiAoICFybWFyZ2luLnRlc3QoIHByZWZp eCApICkgewoJCWpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0 ID0gc2V0UG9zaXRpdmVOdW1iZXI7Cgl9Cn0pOwoKalF1ZXJ5LmZuLmV4dGVuZCh7 Cgljc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKCQlyZXR1cm4gYWNjZXNz KCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7CgkJCXZhciBz dHlsZXMsIGxlbiwKCQkJCW1hcCA9IHt9LAoJCQkJaSA9IDA7CgoJCQlpZiAoIGpR dWVyeS5pc0FycmF5KCBuYW1lICkgKSB7CgkJCQlzdHlsZXMgPSBnZXRTdHlsZXMo IGVsZW0gKTsKCQkJCWxlbiA9IG5hbWUubGVuZ3RoOwoKCQkJCWZvciAoIDsgaSA8 IGxlbjsgaSsrICkgewoJCQkJCW1hcFsgbmFtZVsgaSBdIF0gPSBqUXVlcnkuY3Nz KCBlbGVtLCBuYW1lWyBpIF0sIGZhbHNlLCBzdHlsZXMgKTsKCQkJCX0KCgkJCQly ZXR1cm4gbWFwOwoJCQl9CgoJCQlyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/ CgkJCQlqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOgoJCQkJalF1 ZXJ5LmNzcyggZWxlbSwgbmFtZSApOwoJCX0sIG5hbWUsIHZhbHVlLCBhcmd1bWVu dHMubGVuZ3RoID4gMSApOwoJfSwKCXNob3c6IGZ1bmN0aW9uKCkgewoJCXJldHVy biBzaG93SGlkZSggdGhpcywgdHJ1ZSApOwoJfSwKCWhpZGU6IGZ1bmN0aW9uKCkg ewoJCXJldHVybiBzaG93SGlkZSggdGhpcyApOwoJfSwKCXRvZ2dsZTogZnVuY3Rp b24oIHN0YXRlICkgewoJCWlmICggdHlwZW9mIHN0YXRlID09PSAiYm9vbGVhbiIg KSB7CgkJCXJldHVybiBzdGF0ZSA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7 CgkJfQoKCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQlpZiAoIGlz SGlkZGVuKCB0aGlzICkgKSB7CgkJCQlqUXVlcnkoIHRoaXMgKS5zaG93KCk7CgkJ CX0gZWxzZSB7CgkJCQlqUXVlcnkoIHRoaXMgKS5oaWRlKCk7CgkJCX0KCQl9KTsK CX0KfSk7CgoKZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVu ZCwgZWFzaW5nICkgewoJcmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCgg ZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTsKfQpqUXVlcnkuVHdl ZW4gPSBUd2VlbjsKClR3ZWVuLnByb3RvdHlwZSA9IHsKCWNvbnN0cnVjdG9yOiBU d2VlbiwKCWluaXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQs IGVhc2luZywgdW5pdCApIHsKCQl0aGlzLmVsZW0gPSBlbGVtOwoJCXRoaXMucHJv cCA9IHByb3A7CgkJdGhpcy5lYXNpbmcgPSBlYXNpbmcgfHwgInN3aW5nIjsKCQl0 aGlzLm9wdGlvbnMgPSBvcHRpb25zOwoJCXRoaXMuc3RhcnQgPSB0aGlzLm5vdyA9 IHRoaXMuY3VyKCk7CgkJdGhpcy5lbmQgPSBlbmQ7CgkJdGhpcy51bml0ID0gdW5p dCB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/ICIiIDogInB4IiApOwoJ fSwKCWN1cjogZnVuY3Rpb24oKSB7CgkJdmFyIGhvb2tzID0gVHdlZW4ucHJvcEhv b2tzWyB0aGlzLnByb3AgXTsKCgkJcmV0dXJuIGhvb2tzICYmIGhvb2tzLmdldCA/ CgkJCWhvb2tzLmdldCggdGhpcyApIDoKCQkJVHdlZW4ucHJvcEhvb2tzLl9kZWZh dWx0LmdldCggdGhpcyApOwoJfSwKCXJ1bjogZnVuY3Rpb24oIHBlcmNlbnQgKSB7 CgkJdmFyIGVhc2VkLAoJCQlob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5w cm9wIF07CgoJCWlmICggdGhpcy5vcHRpb25zLmR1cmF0aW9uICkgewoJCQl0aGlz LnBvcyA9IGVhc2VkID0galF1ZXJ5LmVhc2luZ1sgdGhpcy5lYXNpbmcgXSgKCQkJ CXBlcmNlbnQsIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIHBlcmNlbnQsIDAsIDEs IHRoaXMub3B0aW9ucy5kdXJhdGlvbgoJCQkpOwoJCX0gZWxzZSB7CgkJCXRoaXMu cG9zID0gZWFzZWQgPSBwZXJjZW50OwoJCX0KCQl0aGlzLm5vdyA9ICggdGhpcy5l bmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7CgoJCWlmICgg dGhpcy5vcHRpb25zLnN0ZXAgKSB7CgkJCXRoaXMub3B0aW9ucy5zdGVwLmNhbGwo IHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTsKCQl9CgoJCWlmICggaG9va3Mg JiYgaG9va3Muc2V0ICkgewoJCQlob29rcy5zZXQoIHRoaXMgKTsKCQl9IGVsc2Ug ewoJCQlUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KCB0aGlzICk7CgkJfQoJ CXJldHVybiB0aGlzOwoJfQp9OwoKVHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90 eXBlID0gVHdlZW4ucHJvdG90eXBlOwoKVHdlZW4ucHJvcEhvb2tzID0gewoJX2Rl ZmF1bHQ6IHsKCQlnZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHsKCQkJdmFyIHJlc3Vs dDsKCgkJCWlmICggdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYK CQkJCSghdHdlZW4uZWxlbS5zdHlsZSB8fCB0d2Vlbi5lbGVtLnN0eWxlWyB0d2Vl bi5wcm9wIF0gPT0gbnVsbCkgKSB7CgkJCQlyZXR1cm4gdHdlZW4uZWxlbVsgdHdl ZW4ucHJvcCBdOwoJCQl9CgoJCQkvLyBwYXNzaW5nIGFuIGVtcHR5IHN0cmluZyBh cyBhIDNyZCBwYXJhbWV0ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2FsbHkKCQkJ Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5n IGlmIHRoZSBwYXJzZSBmYWlscwoJCQkvLyBzbywgc2ltcGxlIHZhbHVlcyBzdWNo IGFzICIxMHB4IiBhcmUgcGFyc2VkIHRvIEZsb2F0LgoJCQkvLyBjb21wbGV4IHZh bHVlcyBzdWNoIGFzICJyb3RhdGUoMXJhZCkiIGFyZSByZXR1cm5lZCBhcyBpcy4K CQkJcmVzdWx0ID0galF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwg IiIgKTsKCQkJLy8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCAi YXV0byIgYXJlIGNvbnZlcnRlZCB0byAwLgoJCQlyZXR1cm4gIXJlc3VsdCB8fCBy ZXN1bHQgPT09ICJhdXRvIiA/IDAgOiByZXN1bHQ7CgkJfSwKCQlzZXQ6IGZ1bmN0 aW9uKCB0d2VlbiApIHsKCQkJLy8gdXNlIHN0ZXAgaG9vayBmb3IgYmFjayBjb21w YXQgLSB1c2UgY3NzSG9vayBpZiBpdHMgdGhlcmUgLSB1c2UgLnN0eWxlIGlmIGl0 cwoJCQkvLyBhdmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJl IGF2YWlsYWJsZQoJCQlpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0g KSB7CgkJCQlqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApOwoJ CQl9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLnN0eWxlICYmICggdHdlZW4uZWxlbS5z dHlsZVsgalF1ZXJ5LmNzc1Byb3BzWyB0d2Vlbi5wcm9wIF0gXSAhPSBudWxsIHx8 IGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdICkgKSB7CgkJCQlqUXVlcnku c3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVu LnVuaXQgKTsKCQkJfSBlbHNlIHsKCQkJCXR3ZWVuLmVsZW1bIHR3ZWVuLnByb3Ag XSA9IHR3ZWVuLm5vdzsKCQkJfQoJCX0KCX0KfTsKCi8vIFN1cHBvcnQ6IElFIDw9 OQovLyBQYW5pYyBiYXNlZCBhcHByb2FjaCB0byBzZXR0aW5nIHRoaW5ncyBvbiBk aXNjb25uZWN0ZWQgbm9kZXMKClR3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBU d2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCA9IHsKCXNldDogZnVuY3Rpb24oIHR3 ZWVuICkgewoJCWlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAmJiB0d2Vlbi5lbGVt LnBhcmVudE5vZGUgKSB7CgkJCXR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3 ZWVuLm5vdzsKCQl9Cgl9Cn07CgpqUXVlcnkuZWFzaW5nID0gewoJbGluZWFyOiBm dW5jdGlvbiggcCApIHsKCQlyZXR1cm4gcDsKCX0sCglzd2luZzogZnVuY3Rpb24o IHAgKSB7CgkJcmV0dXJuIDAuNSAtIE1hdGguY29zKCBwICogTWF0aC5QSSApIC8g MjsKCX0KfTsKCmpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0OwoKLy8g QmFjayBDb21wYXQgPDEuOCBleHRlbnNpb24gcG9pbnQKalF1ZXJ5LmZ4LnN0ZXAg PSB7fTsKCgoKCnZhcgoJZnhOb3csIHRpbWVySWQsCglyZnh0eXBlcyA9IC9eKD86 dG9nZ2xlfHNob3d8aGlkZSkkLywKCXJmeG51bSA9IG5ldyBSZWdFeHAoICJeKD86 KFsrLV0pPXwpKCIgKyBwbnVtICsgIikoW2EteiVdKikkIiwgImkiICksCglycnVu ID0gL3F1ZXVlSG9va3MkLywKCWFuaW1hdGlvblByZWZpbHRlcnMgPSBbIGRlZmF1 bHRQcmVmaWx0ZXIgXSwKCXR3ZWVuZXJzID0gewoJCSIqIjogWyBmdW5jdGlvbigg cHJvcCwgdmFsdWUgKSB7CgkJCXZhciB0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4o IHByb3AsIHZhbHVlICksCgkJCQl0YXJnZXQgPSB0d2Vlbi5jdXIoKSwKCQkJCXBh cnRzID0gcmZ4bnVtLmV4ZWMoIHZhbHVlICksCgkJCQl1bml0ID0gcGFydHMgJiYg cGFydHNbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/ICIiIDog InB4IiApLAoKCQkJCS8vIFN0YXJ0aW5nIHZhbHVlIGNvbXB1dGF0aW9uIGlzIHJl cXVpcmVkIGZvciBwb3RlbnRpYWwgdW5pdCBtaXNtYXRjaGVzCgkJCQlzdGFydCA9 ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdIHx8IHVuaXQgIT09ICJweCIgJiYg K3RhcmdldCApICYmCgkJCQkJcmZ4bnVtLmV4ZWMoIGpRdWVyeS5jc3MoIHR3ZWVu LmVsZW0sIHByb3AgKSApLAoJCQkJc2NhbGUgPSAxLAoJCQkJbWF4SXRlcmF0aW9u cyA9IDIwOwoKCQkJaWYgKCBzdGFydCAmJiBzdGFydFsgMyBdICE9PSB1bml0ICkg ewoJCQkJLy8gVHJ1c3QgdW5pdHMgcmVwb3J0ZWQgYnkgalF1ZXJ5LmNzcwoJCQkJ dW5pdCA9IHVuaXQgfHwgc3RhcnRbIDMgXTsKCgkJCQkvLyBNYWtlIHN1cmUgd2Ug dXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uCgkJCQlwYXJ0cyA9 IHBhcnRzIHx8IFtdOwoKCQkJCS8vIEl0ZXJhdGl2ZWx5IGFwcHJveGltYXRlIGZy b20gYSBub256ZXJvIHN0YXJ0aW5nIHBvaW50CgkJCQlzdGFydCA9ICt0YXJnZXQg fHwgMTsKCgkJCQlkbyB7CgkJCQkJLy8gSWYgcHJldmlvdXMgaXRlcmF0aW9uIHpl cm9lZCBvdXQsIGRvdWJsZSB1bnRpbCB3ZSBnZXQgKnNvbWV0aGluZyoKCQkJCQkv LyBVc2UgYSBzdHJpbmcgZm9yIGRvdWJsaW5nIGZhY3RvciBzbyB3ZSBkb24ndCBh Y2NpZGVudGFsbHkgc2VlIHNjYWxlIGFzIHVuY2hhbmdlZCBiZWxvdwoJCQkJCXNj YWxlID0gc2NhbGUgfHwgIi41IjsKCgkJCQkJLy8gQWRqdXN0IGFuZCBhcHBseQoJ CQkJCXN0YXJ0ID0gc3RhcnQgLyBzY2FsZTsKCQkJCQlqUXVlcnkuc3R5bGUoIHR3 ZWVuLmVsZW0sIHByb3AsIHN0YXJ0ICsgdW5pdCApOwoKCQkJCS8vIFVwZGF0ZSBz Y2FsZSwgdG9sZXJhdGluZyB6ZXJvIG9yIE5hTiBmcm9tIHR3ZWVuLmN1cigpCgkJ CQkvLyBBbmQgYnJlYWtpbmcgdGhlIGxvb3AgaWYgc2NhbGUgaXMgdW5jaGFuZ2Vk IG9yIHBlcmZlY3QsIG9yIGlmIHdlJ3ZlIGp1c3QgaGFkIGVub3VnaAoJCQkJfSB3 aGlsZSAoIHNjYWxlICE9PSAoc2NhbGUgPSB0d2Vlbi5jdXIoKSAvIHRhcmdldCkg JiYgc2NhbGUgIT09IDEgJiYgLS1tYXhJdGVyYXRpb25zICk7CgkJCX0KCgkJCS8v IFVwZGF0ZSB0d2VlbiBwcm9wZXJ0aWVzCgkJCWlmICggcGFydHMgKSB7CgkJCQlz dGFydCA9IHR3ZWVuLnN0YXJ0ID0gK3N0YXJ0IHx8ICt0YXJnZXQgfHwgMDsKCQkJ CXR3ZWVuLnVuaXQgPSB1bml0OwoJCQkJLy8gSWYgYSArPS8tPSB0b2tlbiB3YXMg cHJvdmlkZWQsIHdlJ3JlIGRvaW5nIGEgcmVsYXRpdmUgYW5pbWF0aW9uCgkJCQl0 d2Vlbi5lbmQgPSBwYXJ0c1sgMSBdID8KCQkJCQlzdGFydCArICggcGFydHNbIDEg XSArIDEgKSAqIHBhcnRzWyAyIF0gOgoJCQkJCStwYXJ0c1sgMiBdOwoJCQl9CgoJ CQlyZXR1cm4gdHdlZW47CgkJfSBdCgl9OwoKLy8gQW5pbWF0aW9ucyBjcmVhdGVk IHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseQpmdW5jdGlvbiBj cmVhdGVGeE5vdygpIHsKCXNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CgkJZnhOb3cg PSB1bmRlZmluZWQ7Cgl9KTsKCXJldHVybiAoIGZ4Tm93ID0galF1ZXJ5Lm5vdygp ICk7Cn0KCi8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRh cmQgYW5pbWF0aW9uCmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGgg KSB7Cgl2YXIgd2hpY2gsCgkJYXR0cnMgPSB7IGhlaWdodDogdHlwZSB9LAoJCWkg PSAwOwoKCS8vIGlmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0 byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVlcywKCS8vIGlmIHdlIGRvbid0IGluY2x1 ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMiB0byBza2lwIG92ZXIgTGVmdCBhbmQg UmlnaHQKCWluY2x1ZGVXaWR0aCA9IGluY2x1ZGVXaWR0aCA/IDEgOiAwOwoJZm9y ICggOyBpIDwgNCA7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHsKCQl3aGljaCA9 IGNzc0V4cGFuZFsgaSBdOwoJCWF0dHJzWyAibWFyZ2luIiArIHdoaWNoIF0gPSBh dHRyc1sgInBhZGRpbmciICsgd2hpY2ggXSA9IHR5cGU7Cgl9CgoJaWYgKCBpbmNs dWRlV2lkdGggKSB7CgkJYXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlw ZTsKCX0KCglyZXR1cm4gYXR0cnM7Cn0KCmZ1bmN0aW9uIGNyZWF0ZVR3ZWVuKCB2 YWx1ZSwgcHJvcCwgYW5pbWF0aW9uICkgewoJdmFyIHR3ZWVuLAoJCWNvbGxlY3Rp b24gPSAoIHR3ZWVuZXJzWyBwcm9wIF0gfHwgW10gKS5jb25jYXQoIHR3ZWVuZXJz WyAiKiIgXSApLAoJCWluZGV4ID0gMCwKCQlsZW5ndGggPSBjb2xsZWN0aW9uLmxl bmd0aDsKCWZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7CgkJaWYg KCAodHdlZW4gPSBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwg cHJvcCwgdmFsdWUgKSkgKSB7CgoJCQkvLyB3ZSdyZSBkb25lIHdpdGggdGhpcyBw cm9wZXJ0eQoJCQlyZXR1cm4gdHdlZW47CgkJfQoJfQp9CgpmdW5jdGlvbiBkZWZh dWx0UHJlZmlsdGVyKCBlbGVtLCBwcm9wcywgb3B0cyApIHsKCS8qIGpzaGludCB2 YWxpZHRoaXM6IHRydWUgKi8KCXZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xlLCB0d2Vl biwgaG9va3MsIG9sZGZpcmUsIGRpc3BsYXksIGREaXNwbGF5LAoJCWFuaW0gPSB0 aGlzLAoJCW9yaWcgPSB7fSwKCQlzdHlsZSA9IGVsZW0uc3R5bGUsCgkJaGlkZGVu ID0gZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbiggZWxlbSApLAoJCWRhdGFTaG93 ID0galF1ZXJ5Ll9kYXRhKCBlbGVtLCAiZnhzaG93IiApOwoKCS8vIGhhbmRsZSBx dWV1ZTogZmFsc2UgcHJvbWlzZXMKCWlmICggIW9wdHMucXVldWUgKSB7CgkJaG9v a3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sICJmeCIgKTsKCQlpZiAoIGhv b2tzLnVucXVldWVkID09IG51bGwgKSB7CgkJCWhvb2tzLnVucXVldWVkID0gMDsK CQkJb2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7CgkJCWhvb2tzLmVtcHR5LmZp cmUgPSBmdW5jdGlvbigpIHsKCQkJCWlmICggIWhvb2tzLnVucXVldWVkICkgewoJ CQkJCW9sZGZpcmUoKTsKCQkJCX0KCQkJfTsKCQl9CgkJaG9va3MudW5xdWV1ZWQr KzsKCgkJYW5pbS5hbHdheXMoZnVuY3Rpb24oKSB7CgkJCS8vIGRvaW5nIHRoaXMg bWFrZXMgc3VyZSB0aGF0IHRoZSBjb21wbGV0ZSBoYW5kbGVyIHdpbGwgYmUgY2Fs bGVkCgkJCS8vIGJlZm9yZSB0aGlzIGNvbXBsZXRlcwoJCQlhbmltLmFsd2F5cyhm dW5jdGlvbigpIHsKCQkJCWhvb2tzLnVucXVldWVkLS07CgkJCQlpZiAoICFqUXVl cnkucXVldWUoIGVsZW0sICJmeCIgKS5sZW5ndGggKSB7CgkJCQkJaG9va3MuZW1w dHkuZmlyZSgpOwoJCQkJfQoJCQl9KTsKCQl9KTsKCX0KCgkvLyBoZWlnaHQvd2lk dGggb3ZlcmZsb3cgcGFzcwoJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICgg ImhlaWdodCIgaW4gcHJvcHMgfHwgIndpZHRoIiBpbiBwcm9wcyApICkgewoJCS8v IE1ha2Ugc3VyZSB0aGF0IG5vdGhpbmcgc25lYWtzIG91dAoJCS8vIFJlY29yZCBh bGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9lcyBub3QKCQkv LyBjaGFuZ2UgdGhlIG92ZXJmbG93IGF0dHJpYnV0ZSB3aGVuIG92ZXJmbG93WCBh bmQKCQkvLyBvdmVyZmxvd1kgYXJlIHNldCB0byB0aGUgc2FtZSB2YWx1ZQoJCW9w dHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gs IHN0eWxlLm92ZXJmbG93WSBdOwoKCQkvLyBTZXQgZGlzcGxheSBwcm9wZXJ0eSB0 byBpbmxpbmUtYmxvY2sgZm9yIGhlaWdodC93aWR0aAoJCS8vIGFuaW1hdGlvbnMg b24gaW5saW5lIGVsZW1lbnRzIHRoYXQgYXJlIGhhdmluZyB3aWR0aC9oZWlnaHQg YW5pbWF0ZWQKCQlkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXki ICk7CgkJZERpc3BsYXkgPSBkZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFtZSAp OwoJCWlmICggZGlzcGxheSA9PT0gIm5vbmUiICkgewoJCQlkaXNwbGF5ID0gZERp c3BsYXk7CgkJfQoJCWlmICggZGlzcGxheSA9PT0gImlubGluZSIgJiYKCQkJCWpR dWVyeS5jc3MoIGVsZW0sICJmbG9hdCIgKSA9PT0gIm5vbmUiICkgewoKCQkJLy8g aW5saW5lLWxldmVsIGVsZW1lbnRzIGFjY2VwdCBpbmxpbmUtYmxvY2s7CgkJCS8v IGJsb2NrLWxldmVsIGVsZW1lbnRzIG5lZWQgdG8gYmUgaW5saW5lIHdpdGggbGF5 b3V0CgkJCWlmICggIXN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dCB8fCBk RGlzcGxheSA9PT0gImlubGluZSIgKSB7CgkJCQlzdHlsZS5kaXNwbGF5ID0gImlu bGluZS1ibG9jayI7CgkJCX0gZWxzZSB7CgkJCQlzdHlsZS56b29tID0gMTsKCQkJ fQoJCX0KCX0KCglpZiAoIG9wdHMub3ZlcmZsb3cgKSB7CgkJc3R5bGUub3ZlcmZs b3cgPSAiaGlkZGVuIjsKCQlpZiAoICFzdXBwb3J0LnNocmlua1dyYXBCbG9ja3Mo KSApIHsKCQkJYW5pbS5hbHdheXMoZnVuY3Rpb24oKSB7CgkJCQlzdHlsZS5vdmVy ZmxvdyA9IG9wdHMub3ZlcmZsb3dbIDAgXTsKCQkJCXN0eWxlLm92ZXJmbG93WCA9 IG9wdHMub3ZlcmZsb3dbIDEgXTsKCQkJCXN0eWxlLm92ZXJmbG93WSA9IG9wdHMu b3ZlcmZsb3dbIDIgXTsKCQkJfSk7CgkJfQoJfQoKCS8vIHNob3cvaGlkZSBwYXNz Cglmb3IgKCBwcm9wIGluIHByb3BzICkgewoJCXZhbHVlID0gcHJvcHNbIHByb3Ag XTsKCQlpZiAoIHJmeHR5cGVzLmV4ZWMoIHZhbHVlICkgKSB7CgkJCWRlbGV0ZSBw cm9wc1sgcHJvcCBdOwoJCQl0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09ICJ0 b2dnbGUiOwoJCQlpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/ICJoaWRlIiA6ICJz aG93IiApICkgewoKCQkJCS8vIElmIHRoZXJlIGlzIGRhdGFTaG93IGxlZnQgb3Zl ciBmcm9tIGEgc3RvcHBlZCBoaWRlIG9yIHNob3cgYW5kIHdlIGFyZSBnb2luZyB0 byBwcm9jZWVkIHdpdGggc2hvdywgd2Ugc2hvdWxkIHByZXRlbmQgdG8gYmUgaGlk ZGVuCgkJCQlpZiAoIHZhbHVlID09PSAic2hvdyIgJiYgZGF0YVNob3cgJiYgZGF0 YVNob3dbIHByb3AgXSAhPT0gdW5kZWZpbmVkICkgewoJCQkJCWhpZGRlbiA9IHRy dWU7CgkJCQl9IGVsc2UgewoJCQkJCWNvbnRpbnVlOwoJCQkJfQoJCQl9CgkJCW9y aWdbIHByb3AgXSA9IGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gfHwgalF1 ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wICk7CgkJfQoJfQoKCWlmICggIWpRdWVyeS5p c0VtcHR5T2JqZWN0KCBvcmlnICkgKSB7CgkJaWYgKCBkYXRhU2hvdyApIHsKCQkJ aWYgKCAiaGlkZGVuIiBpbiBkYXRhU2hvdyApIHsKCQkJCWhpZGRlbiA9IGRhdGFT aG93LmhpZGRlbjsKCQkJfQoJCX0gZWxzZSB7CgkJCWRhdGFTaG93ID0galF1ZXJ5 Ll9kYXRhKCBlbGVtLCAiZnhzaG93Iiwge30gKTsKCQl9CgoJCS8vIHN0b3JlIHN0 YXRlIGlmIGl0cyB0b2dnbGUgLSBlbmFibGVzIC5zdG9wKCkudG9nZ2xlKCkgdG8g InJldmVyc2UiCgkJaWYgKCB0b2dnbGUgKSB7CgkJCWRhdGFTaG93LmhpZGRlbiA9 ICFoaWRkZW47CgkJfQoJCWlmICggaGlkZGVuICkgewoJCQlqUXVlcnkoIGVsZW0g KS5zaG93KCk7CgkJfSBlbHNlIHsKCQkJYW5pbS5kb25lKGZ1bmN0aW9uKCkgewoJ CQkJalF1ZXJ5KCBlbGVtICkuaGlkZSgpOwoJCQl9KTsKCQl9CgkJYW5pbS5kb25l KGZ1bmN0aW9uKCkgewoJCQl2YXIgcHJvcDsKCQkJalF1ZXJ5Ll9yZW1vdmVEYXRh KCBlbGVtLCAiZnhzaG93IiApOwoJCQlmb3IgKCBwcm9wIGluIG9yaWcgKSB7CgkJ CQlqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApOwoJCQl9 CgkJfSk7CgkJZm9yICggcHJvcCBpbiBvcmlnICkgewoJCQl0d2VlbiA9IGNyZWF0 ZVR3ZWVuKCBoaWRkZW4gPyBkYXRhU2hvd1sgcHJvcCBdIDogMCwgcHJvcCwgYW5p bSApOwoKCQkJaWYgKCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7CgkJCQlkYXRh U2hvd1sgcHJvcCBdID0gdHdlZW4uc3RhcnQ7CgkJCQlpZiAoIGhpZGRlbiApIHsK CQkJCQl0d2Vlbi5lbmQgPSB0d2Vlbi5zdGFydDsKCQkJCQl0d2Vlbi5zdGFydCA9 IHByb3AgPT09ICJ3aWR0aCIgfHwgcHJvcCA9PT0gImhlaWdodCIgPyAxIDogMDsK CQkJCX0KCQkJfQoJCX0KCX0KfQoKZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMs IHNwZWNpYWxFYXNpbmcgKSB7Cgl2YXIgaW5kZXgsIG5hbWUsIGVhc2luZywgdmFs dWUsIGhvb2tzOwoKCS8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhw YW5kIGNzc0hvb2sgcGFzcwoJZm9yICggaW5kZXggaW4gcHJvcHMgKSB7CgkJbmFt ZSA9IGpRdWVyeS5jYW1lbENhc2UoIGluZGV4ICk7CgkJZWFzaW5nID0gc3BlY2lh bEVhc2luZ1sgbmFtZSBdOwoJCXZhbHVlID0gcHJvcHNbIGluZGV4IF07CgkJaWYg KCBqUXVlcnkuaXNBcnJheSggdmFsdWUgKSApIHsKCQkJZWFzaW5nID0gdmFsdWVb IDEgXTsKCQkJdmFsdWUgPSBwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyAwIF07CgkJ fQoKCQlpZiAoIGluZGV4ICE9PSBuYW1lICkgewoJCQlwcm9wc1sgbmFtZSBdID0g dmFsdWU7CgkJCWRlbGV0ZSBwcm9wc1sgaW5kZXggXTsKCQl9CgoJCWhvb2tzID0g alF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF07CgkJaWYgKCBob29rcyAmJiAiZXhwYW5k IiBpbiBob29rcyApIHsKCQkJdmFsdWUgPSBob29rcy5leHBhbmQoIHZhbHVlICk7 CgkJCWRlbGV0ZSBwcm9wc1sgbmFtZSBdOwoKCQkJLy8gbm90IHF1aXRlICQuZXh0 ZW5kLCB0aGlzIHdvbnQgb3ZlcndyaXRlIGtleXMgYWxyZWFkeSBwcmVzZW50LgoJ CQkvLyBhbHNvIC0gcmV1c2luZyAnaW5kZXgnIGZyb20gYWJvdmUgYmVjYXVzZSB3 ZSBoYXZlIHRoZSBjb3JyZWN0ICJuYW1lIgoJCQlmb3IgKCBpbmRleCBpbiB2YWx1 ZSApIHsKCQkJCWlmICggISggaW5kZXggaW4gcHJvcHMgKSApIHsKCQkJCQlwcm9w c1sgaW5kZXggXSA9IHZhbHVlWyBpbmRleCBdOwoJCQkJCXNwZWNpYWxFYXNpbmdb IGluZGV4IF0gPSBlYXNpbmc7CgkJCQl9CgkJCX0KCQl9IGVsc2UgewoJCQlzcGVj aWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7CgkJfQoJfQp9CgpmdW5jdGlvbiBB bmltYXRpb24oIGVsZW0sIHByb3BlcnRpZXMsIG9wdGlvbnMgKSB7Cgl2YXIgcmVz dWx0LAoJCXN0b3BwZWQsCgkJaW5kZXggPSAwLAoJCWxlbmd0aCA9IGFuaW1hdGlv blByZWZpbHRlcnMubGVuZ3RoLAoJCWRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVk KCkuYWx3YXlzKCBmdW5jdGlvbigpIHsKCQkJLy8gZG9uJ3QgbWF0Y2ggZWxlbSBp biB0aGUgOmFuaW1hdGVkIHNlbGVjdG9yCgkJCWRlbGV0ZSB0aWNrLmVsZW07CgkJ fSksCgkJdGljayA9IGZ1bmN0aW9uKCkgewoJCQlpZiAoIHN0b3BwZWQgKSB7CgkJ CQlyZXR1cm4gZmFsc2U7CgkJCX0KCQkJdmFyIGN1cnJlbnRUaW1lID0gZnhOb3cg fHwgY3JlYXRlRnhOb3coKSwKCQkJCXJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBh bmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1cmF0aW9uIC0gY3VycmVu dFRpbWUgKSwKCQkJCS8vIGFyY2hhaWMgY3Jhc2ggYnVnIHdvbid0IGFsbG93IHVz IHRvIHVzZSAxIC0gKCAwLjUgfHwgMCApICgjMTI0OTcpCgkJCQl0ZW1wID0gcmVt YWluaW5nIC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsCgkJCQlwZXJjZW50ID0g MSAtIHRlbXAsCgkJCQlpbmRleCA9IDAsCgkJCQlsZW5ndGggPSBhbmltYXRpb24u dHdlZW5zLmxlbmd0aDsKCgkJCWZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRl eCsrICkgewoJCQkJYW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBlcmNl bnQgKTsKCQkJfQoKCQkJZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmlt YXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBdKTsKCgkJCWlmICggcGVyY2VudCA8 IDEgJiYgbGVuZ3RoICkgewoJCQkJcmV0dXJuIHJlbWFpbmluZzsKCQkJfSBlbHNl IHsKCQkJCWRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiBd ICk7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQl9LAoJCWFuaW1hdGlvbiA9IGRl ZmVycmVkLnByb21pc2UoewoJCQllbGVtOiBlbGVtLAoJCQlwcm9wczogalF1ZXJ5 LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSwKCQkJb3B0czogalF1ZXJ5LmV4dGVu ZCggdHJ1ZSwgeyBzcGVjaWFsRWFzaW5nOiB7fSB9LCBvcHRpb25zICksCgkJCW9y aWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcywKCQkJb3JpZ2luYWxPcHRpb25z OiBvcHRpb25zLAoJCQlzdGFydFRpbWU6IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCks CgkJCWR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLAoJCQl0d2VlbnM6IFtdLAoJ CQljcmVhdGVUd2VlbjogZnVuY3Rpb24oIHByb3AsIGVuZCApIHsKCQkJCXZhciB0 d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3As IGVuZCwKCQkJCQkJYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBd IHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApOwoJCQkJYW5pbWF0aW9uLnR3ZWVu cy5wdXNoKCB0d2VlbiApOwoJCQkJcmV0dXJuIHR3ZWVuOwoJCQl9LAoJCQlzdG9w OiBmdW5jdGlvbiggZ290b0VuZCApIHsKCQkJCXZhciBpbmRleCA9IDAsCgkJCQkJ Ly8gaWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFs bCB0aGUgdHdlZW5zCgkJCQkJLy8gb3RoZXJ3aXNlIHdlIHNraXAgdGhpcyBwYXJ0 CgkJCQkJbGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50d2VlbnMubGVuZ3Ro IDogMDsKCQkJCWlmICggc3RvcHBlZCApIHsKCQkJCQlyZXR1cm4gdGhpczsKCQkJ CX0KCQkJCXN0b3BwZWQgPSB0cnVlOwoJCQkJZm9yICggOyBpbmRleCA8IGxlbmd0 aCA7IGluZGV4KysgKSB7CgkJCQkJYW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5y dW4oIDEgKTsKCQkJCX0KCgkJCQkvLyByZXNvbHZlIHdoZW4gd2UgcGxheWVkIHRo ZSBsYXN0IGZyYW1lCgkJCQkvLyBvdGhlcndpc2UsIHJlamVjdAoJCQkJaWYgKCBn b3RvRW5kICkgewoJCQkJCWRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFu aW1hdGlvbiwgZ290b0VuZCBdICk7CgkJCQl9IGVsc2UgewoJCQkJCWRlZmVycmVk LnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTsKCQkJ CX0KCQkJCXJldHVybiB0aGlzOwoJCQl9CgkJfSksCgkJcHJvcHMgPSBhbmltYXRp b24ucHJvcHM7CgoJcHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNw ZWNpYWxFYXNpbmcgKTsKCglmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgr KyApIHsKCQlyZXN1bHQgPSBhbmltYXRpb25QcmVmaWx0ZXJzWyBpbmRleCBdLmNh bGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7CgkJ aWYgKCByZXN1bHQgKSB7CgkJCXJldHVybiByZXN1bHQ7CgkJfQoJfQoKCWpRdWVy eS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7CgoJaWYgKCBq UXVlcnkuaXNGdW5jdGlvbiggYW5pbWF0aW9uLm9wdHMuc3RhcnQgKSApIHsKCQlh bmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTsKCX0K CglqUXVlcnkuZngudGltZXIoCgkJalF1ZXJ5LmV4dGVuZCggdGljaywgewoJCQll bGVtOiBlbGVtLAoJCQlhbmltOiBhbmltYXRpb24sCgkJCXF1ZXVlOiBhbmltYXRp b24ub3B0cy5xdWV1ZQoJCX0pCgkpOwoKCS8vIGF0dGFjaCBjYWxsYmFja3MgZnJv bSBvcHRpb25zCglyZXR1cm4gYW5pbWF0aW9uLnByb2dyZXNzKCBhbmltYXRpb24u b3B0cy5wcm9ncmVzcyApCgkJLmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFu aW1hdGlvbi5vcHRzLmNvbXBsZXRlICkKCQkuZmFpbCggYW5pbWF0aW9uLm9wdHMu ZmFpbCApCgkJLmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7Cn0KCmpR dWVyeS5BbmltYXRpb24gPSBqUXVlcnkuZXh0ZW5kKCBBbmltYXRpb24sIHsKCXR3 ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7CgkJaWYgKCBqUXVl cnkuaXNGdW5jdGlvbiggcHJvcHMgKSApIHsKCQkJY2FsbGJhY2sgPSBwcm9wczsK CQkJcHJvcHMgPSBbICIqIiBdOwoJCX0gZWxzZSB7CgkJCXByb3BzID0gcHJvcHMu c3BsaXQoIiAiKTsKCQl9CgoJCXZhciBwcm9wLAoJCQlpbmRleCA9IDAsCgkJCWxl bmd0aCA9IHByb3BzLmxlbmd0aDsKCgkJZm9yICggOyBpbmRleCA8IGxlbmd0aCA7 IGluZGV4KysgKSB7CgkJCXByb3AgPSBwcm9wc1sgaW5kZXggXTsKCQkJdHdlZW5l cnNbIHByb3AgXSA9IHR3ZWVuZXJzWyBwcm9wIF0gfHwgW107CgkJCXR3ZWVuZXJz WyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTsKCQl9Cgl9LAoKCXByZWZpbHRl cjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkgewoJCWlmICggcHJlcGVu ZCApIHsKCQkJYW5pbWF0aW9uUHJlZmlsdGVycy51bnNoaWZ0KCBjYWxsYmFjayAp OwoJCX0gZWxzZSB7CgkJCWFuaW1hdGlvblByZWZpbHRlcnMucHVzaCggY2FsbGJh Y2sgKTsKCQl9Cgl9Cn0pOwoKalF1ZXJ5LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVk LCBlYXNpbmcsIGZuICkgewoJdmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVl ZCA9PT0gIm9iamVjdCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHsK CQljb21wbGV0ZTogZm4gfHwgIWZuICYmIGVhc2luZyB8fAoJCQlqUXVlcnkuaXNG dW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCwKCQlkdXJhdGlvbjogc3BlZWQsCgkJ ZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFqUXVlcnkuaXNGdW5j dGlvbiggZWFzaW5nICkgJiYgZWFzaW5nCgl9OwoKCW9wdC5kdXJhdGlvbiA9IGpR dWVyeS5meC5vZmYgPyAwIDogdHlwZW9mIG9wdC5kdXJhdGlvbiA9PT0gIm51bWJl ciIgPyBvcHQuZHVyYXRpb24gOgoJCW9wdC5kdXJhdGlvbiBpbiBqUXVlcnkuZngu c3BlZWRzID8galF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF0gOiBqUXVl cnkuZnguc3BlZWRzLl9kZWZhdWx0OwoKCS8vIG5vcm1hbGl6ZSBvcHQucXVldWUg LSB0cnVlL3VuZGVmaW5lZC9udWxsIC0+ICJmeCIKCWlmICggb3B0LnF1ZXVlID09 IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkgewoJCW9wdC5xdWV1ZSA9ICJm eCI7Cgl9CgoJLy8gUXVldWVpbmcKCW9wdC5vbGQgPSBvcHQuY29tcGxldGU7CgoJ b3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CgkJaWYgKCBqUXVlcnkuaXNGdW5j dGlvbiggb3B0Lm9sZCApICkgewoJCQlvcHQub2xkLmNhbGwoIHRoaXMgKTsKCQl9 CgoJCWlmICggb3B0LnF1ZXVlICkgewoJCQlqUXVlcnkuZGVxdWV1ZSggdGhpcywg b3B0LnF1ZXVlICk7CgkJfQoJfTsKCglyZXR1cm4gb3B0Owp9OwoKalF1ZXJ5LmZu LmV4dGVuZCh7CglmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwgdG8sIGVhc2luZywg Y2FsbGJhY2sgKSB7CgoJCS8vIHNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRl ciBzZXR0aW5nIG9wYWNpdHkgdG8gMAoJCXJldHVybiB0aGlzLmZpbHRlciggaXNI aWRkZW4gKS5jc3MoICJvcGFjaXR5IiwgMCApLnNob3coKQoKCQkJLy8gYW5pbWF0 ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVkCgkJCS5lbmQoKS5hbmltYXRlKHsgb3Bh Y2l0eTogdG8gfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKCX0sCglhbmlt YXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7 CgkJdmFyIGVtcHR5ID0galF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSwKCQkJ b3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayAp LAoJCQlkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkgewoJCQkJLy8gT3BlcmF0ZSBv biBhIGNvcHkgb2YgcHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5nIHdvbid0IGJl IGxvc3QKCQkJCXZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0 ZW5kKCB7fSwgcHJvcCApLCBvcHRhbGwgKTsKCgkJCQkvLyBFbXB0eSBhbmltYXRp b25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHkKCQkJCWlmICgg ZW1wdHkgfHwgalF1ZXJ5Ll9kYXRhKCB0aGlzLCAiZmluaXNoIiApICkgewoJCQkJ CWFuaW0uc3RvcCggdHJ1ZSApOwoJCQkJfQoJCQl9OwoJCQlkb0FuaW1hdGlvbi5m aW5pc2ggPSBkb0FuaW1hdGlvbjsKCgkJcmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5x dWV1ZSA9PT0gZmFsc2UgPwoJCQl0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOgoJ CQl0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9uICk7Cgl9LAoJ c3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7CgkJ dmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHsKCQkJdmFyIHN0b3Ag PSBob29rcy5zdG9wOwoJCQlkZWxldGUgaG9va3Muc3RvcDsKCQkJc3RvcCggZ290 b0VuZCApOwoJCX07CgoJCWlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkg ewoJCQlnb3RvRW5kID0gY2xlYXJRdWV1ZTsKCQkJY2xlYXJRdWV1ZSA9IHR5cGU7 CgkJCXR5cGUgPSB1bmRlZmluZWQ7CgkJfQoJCWlmICggY2xlYXJRdWV1ZSAmJiB0 eXBlICE9PSBmYWxzZSApIHsKCQkJdGhpcy5xdWV1ZSggdHlwZSB8fCAiZngiLCBb XSApOwoJCX0KCgkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKCQkJdmFy IGRlcXVldWUgPSB0cnVlLAoJCQkJaW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlw ZSArICJxdWV1ZUhvb2tzIiwKCQkJCXRpbWVycyA9IGpRdWVyeS50aW1lcnMsCgkJ CQlkYXRhID0galF1ZXJ5Ll9kYXRhKCB0aGlzICk7CgoJCQlpZiAoIGluZGV4ICkg ewoJCQkJaWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAp IHsKCQkJCQlzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTsKCQkJCX0KCQkJfSBl bHNlIHsKCQkJCWZvciAoIGluZGV4IGluIGRhdGEgKSB7CgkJCQkJaWYgKCBkYXRh WyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAmJiBycnVuLnRlc3QoIGlu ZGV4ICkgKSB7CgkJCQkJCXN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApOwoJCQkJ CX0KCQkJCX0KCQkJfQoKCQkJZm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBp bmRleC0tOyApIHsKCQkJCWlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRo aXMgJiYgKHR5cGUgPT0gbnVsbCB8fCB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09 IHR5cGUpICkgewoJCQkJCXRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIGdvdG9F bmQgKTsKCQkJCQlkZXF1ZXVlID0gZmFsc2U7CgkJCQkJdGltZXJzLnNwbGljZSgg aW5kZXgsIDEgKTsKCQkJCX0KCQkJfQoKCQkJLy8gc3RhcnQgdGhlIG5leHQgaW4g dGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZAoJCQkvLyB0 aW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFj a3MsIHdoaWNoIHdpbGwgZGVxdWV1ZQoJCQkvLyBidXQgb25seSBpZiB0aGV5IHdl cmUgZ290b0VuZAoJCQlpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7CgkJCQlq UXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOwoJCQl9CgkJfSk7Cgl9LAoJZmlu aXNoOiBmdW5jdGlvbiggdHlwZSApIHsKCQlpZiAoIHR5cGUgIT09IGZhbHNlICkg ewoJCQl0eXBlID0gdHlwZSB8fCAiZngiOwoJCX0KCQlyZXR1cm4gdGhpcy5lYWNo KGZ1bmN0aW9uKCkgewoJCQl2YXIgaW5kZXgsCgkJCQlkYXRhID0galF1ZXJ5Ll9k YXRhKCB0aGlzICksCgkJCQlxdWV1ZSA9IGRhdGFbIHR5cGUgKyAicXVldWUiIF0s CgkJCQlob29rcyA9IGRhdGFbIHR5cGUgKyAicXVldWVIb29rcyIgXSwKCQkJCXRp bWVycyA9IGpRdWVyeS50aW1lcnMsCgkJCQlsZW5ndGggPSBxdWV1ZSA/IHF1ZXVl Lmxlbmd0aCA6IDA7CgoJCQkvLyBlbmFibGUgZmluaXNoaW5nIGZsYWcgb24gcHJp dmF0ZSBkYXRhCgkJCWRhdGEuZmluaXNoID0gdHJ1ZTsKCgkJCS8vIGVtcHR5IHRo ZSBxdWV1ZSBmaXJzdAoJCQlqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIFtdICk7 CgoJCQlpZiAoIGhvb2tzICYmIGhvb2tzLnN0b3AgKSB7CgkJCQlob29rcy5zdG9w LmNhbGwoIHRoaXMsIHRydWUgKTsKCQkJfQoKCQkJLy8gbG9vayBmb3IgYW55IGFj dGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW0KCQkJZm9yICggaW5kZXgg PSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHsKCQkJCWlmICggdGltZXJzWyBp bmRleCBdLmVsZW0gPT09IHRoaXMgJiYgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09 PSB0eXBlICkgewoJCQkJCXRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUg KTsKCQkJCQl0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApOwoJCQkJfQoJCQl9CgoJ CQkvLyBsb29rIGZvciBhbnkgYW5pbWF0aW9ucyBpbiB0aGUgb2xkIHF1ZXVlIGFu ZCBmaW5pc2ggdGhlbQoJCQlmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3Ro OyBpbmRleCsrICkgewoJCQkJaWYgKCBxdWV1ZVsgaW5kZXggXSAmJiBxdWV1ZVsg aW5kZXggXS5maW5pc2ggKSB7CgkJCQkJcXVldWVbIGluZGV4IF0uZmluaXNoLmNh bGwoIHRoaXMgKTsKCQkJCX0KCQkJfQoKCQkJLy8gdHVybiBvZmYgZmluaXNoaW5n IGZsYWcKCQkJZGVsZXRlIGRhdGEuZmluaXNoOwoJCX0pOwoJfQp9KTsKCmpRdWVy eS5lYWNoKFsgInRvZ2dsZSIsICJzaG93IiwgImhpZGUiIF0sIGZ1bmN0aW9uKCBp LCBuYW1lICkgewoJdmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07CglqUXVl cnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFj ayApIHsKCQlyZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09 ICJib29sZWFuIiA/CgkJCWNzc0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6 CgkJCXRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVh c2luZywgY2FsbGJhY2sgKTsKCX07Cn0pOwoKLy8gR2VuZXJhdGUgc2hvcnRjdXRz IGZvciBjdXN0b20gYW5pbWF0aW9ucwpqUXVlcnkuZWFjaCh7CglzbGlkZURvd246 IGdlbkZ4KCJzaG93IiksCglzbGlkZVVwOiBnZW5GeCgiaGlkZSIpLAoJc2xpZGVU b2dnbGU6IGdlbkZ4KCJ0b2dnbGUiKSwKCWZhZGVJbjogeyBvcGFjaXR5OiAic2hv dyIgfSwKCWZhZGVPdXQ6IHsgb3BhY2l0eTogImhpZGUiIH0sCglmYWRlVG9nZ2xl OiB7IG9wYWNpdHk6ICJ0b2dnbGUiIH0KfSwgZnVuY3Rpb24oIG5hbWUsIHByb3Bz ICkgewoJalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2lu ZywgY2FsbGJhY2sgKSB7CgkJcmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNw ZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7Cgl9Owp9KTsKCmpRdWVyeS50aW1lcnMg PSBbXTsKalF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHsKCXZhciB0aW1lciwK CQl0aW1lcnMgPSBqUXVlcnkudGltZXJzLAoJCWkgPSAwOwoKCWZ4Tm93ID0galF1 ZXJ5Lm5vdygpOwoKCWZvciAoIDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyApIHsK CQl0aW1lciA9IHRpbWVyc1sgaSBdOwoJCS8vIENoZWNrcyB0aGUgdGltZXIgaGFz IG5vdCBhbHJlYWR5IGJlZW4gcmVtb3ZlZAoJCWlmICggIXRpbWVyKCkgJiYgdGlt ZXJzWyBpIF0gPT09IHRpbWVyICkgewoJCQl0aW1lcnMuc3BsaWNlKCBpLS0sIDEg KTsKCQl9Cgl9CgoJaWYgKCAhdGltZXJzLmxlbmd0aCApIHsKCQlqUXVlcnkuZngu c3RvcCgpOwoJfQoJZnhOb3cgPSB1bmRlZmluZWQ7Cn07CgpqUXVlcnkuZngudGlt ZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7CglqUXVlcnkudGltZXJzLnB1c2goIHRp bWVyICk7CglpZiAoIHRpbWVyKCkgKSB7CgkJalF1ZXJ5LmZ4LnN0YXJ0KCk7Cgl9 IGVsc2UgewoJCWpRdWVyeS50aW1lcnMucG9wKCk7Cgl9Cn07CgpqUXVlcnkuZngu aW50ZXJ2YWwgPSAxMzsKCmpRdWVyeS5meC5zdGFydCA9IGZ1bmN0aW9uKCkgewoJ aWYgKCAhdGltZXJJZCApIHsKCQl0aW1lcklkID0gc2V0SW50ZXJ2YWwoIGpRdWVy eS5meC50aWNrLCBqUXVlcnkuZnguaW50ZXJ2YWwgKTsKCX0KfTsKCmpRdWVyeS5m eC5zdG9wID0gZnVuY3Rpb24oKSB7CgljbGVhckludGVydmFsKCB0aW1lcklkICk7 Cgl0aW1lcklkID0gbnVsbDsKfTsKCmpRdWVyeS5meC5zcGVlZHMgPSB7CglzbG93 OiA2MDAsCglmYXN0OiAyMDAsCgkvLyBEZWZhdWx0IHNwZWVkCglfZGVmYXVsdDog NDAwCn07CgoKLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVs ZmVycywgd2l0aCBwZXJtaXNzaW9uLgovLyBodHRwOi8vYmxpbmRzaWduYWxzLmNv bS9pbmRleC5waHAvMjAwOS8wNy9qcXVlcnktZGVsYXkvCmpRdWVyeS5mbi5kZWxh eSA9IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkgewoJdGltZSA9IGpRdWVyeS5meCA/ IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTsKCXR5cGUg PSB0eXBlIHx8ICJmeCI7CgoJcmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0 aW9uKCBuZXh0LCBob29rcyApIHsKCQl2YXIgdGltZW91dCA9IHNldFRpbWVvdXQo IG5leHQsIHRpbWUgKTsKCQlob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7CgkJCWNs ZWFyVGltZW91dCggdGltZW91dCApOwoJCX07Cgl9KTsKfTsKCgooZnVuY3Rpb24o KSB7Cgl2YXIgYSwgaW5wdXQsIHNlbGVjdCwgb3B0LAoJCWRpdiA9IGRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoImRpdiIgKTsKCgkvLyBTZXR1cAoJZGl2LnNldEF0dHJp YnV0ZSggImNsYXNzTmFtZSIsICJ0IiApOwoJZGl2LmlubmVySFRNTCA9ICIgIDxs aW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlw ZT0nY2hlY2tib3gnLz4iOwoJYSA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgi YSIpWyAwIF07CgoJLy8gRmlyc3QgYmF0Y2ggb2YgdGVzdHMuCglzZWxlY3QgPSBk b2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKCW9wdCA9IHNlbGVjdC5h cHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIikgKTsK CWlucHV0ID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWyAwIF07 CgoJYS5zdHlsZS5jc3NUZXh0ID0gInRvcDoxcHgiOwoKCS8vIFRlc3Qgc2V0QXR0 cmlidXRlIG9uIGNhbWVsQ2FzZSBjbGFzcy4gSWYgaXQgd29ya3MsIHdlIG5lZWQg YXR0ckZpeGVzIHdoZW4gZG9pbmcgZ2V0L3NldEF0dHJpYnV0ZSAoaWU2LzcpCglz dXBwb3J0LmdldFNldEF0dHJpYnV0ZSA9IGRpdi5jbGFzc05hbWUgIT09ICJ0IjsK CgkvLyBHZXQgdGhlIHN0eWxlIGluZm9ybWF0aW9uIGZyb20gZ2V0QXR0cmlidXRl CgkvLyAoSUUgdXNlcyAuY3NzVGV4dCBpbnN0ZWFkKQoJc3VwcG9ydC5zdHlsZSA9 IC90b3AvLnRlc3QoIGEuZ2V0QXR0cmlidXRlKCJzdHlsZSIpICk7CgoJLy8gTWFr ZSBzdXJlIHRoYXQgVVJMcyBhcmVuJ3QgbWFuaXB1bGF0ZWQKCS8vIChJRSBub3Jt YWxpemVzIGl0IGJ5IGRlZmF1bHQpCglzdXBwb3J0LmhyZWZOb3JtYWxpemVkID0g YS5nZXRBdHRyaWJ1dGUoImhyZWYiKSA9PT0gIi9hIjsKCgkvLyBDaGVjayB0aGUg ZGVmYXVsdCBjaGVja2JveC9yYWRpbyB2YWx1ZSAoIiIgb24gV2ViS2l0OyAib24i IGVsc2V3aGVyZSkKCXN1cHBvcnQuY2hlY2tPbiA9ICEhaW5wdXQudmFsdWU7CgoJ Ly8gTWFrZSBzdXJlIHRoYXQgYSBzZWxlY3RlZC1ieS1kZWZhdWx0IG9wdGlvbiBo YXMgYSB3b3JraW5nIHNlbGVjdGVkIHByb3BlcnR5LgoJLy8gKFdlYktpdCBkZWZh dWx0cyB0byBmYWxzZSBpbnN0ZWFkIG9mIHRydWUsIElFIHRvbywgaWYgaXQncyBp biBhbiBvcHRncm91cCkKCXN1cHBvcnQub3B0U2VsZWN0ZWQgPSBvcHQuc2VsZWN0 ZWQ7CgoJLy8gVGVzdHMgZm9yIGVuY3R5cGUgc3VwcG9ydCBvbiBhIGZvcm0gKCM2 NzQzKQoJc3VwcG9ydC5lbmN0eXBlID0gISFkb2N1bWVudC5jcmVhdGVFbGVtZW50 KCJmb3JtIikuZW5jdHlwZTsKCgkvLyBNYWtlIHN1cmUgdGhhdCB0aGUgb3B0aW9u cyBpbnNpZGUgZGlzYWJsZWQgc2VsZWN0cyBhcmVuJ3QgbWFya2VkIGFzIGRpc2Fi bGVkCgkvLyAoV2ViS2l0IG1hcmtzIHRoZW0gYXMgZGlzYWJsZWQpCglzZWxlY3Qu ZGlzYWJsZWQgPSB0cnVlOwoJc3VwcG9ydC5vcHREaXNhYmxlZCA9ICFvcHQuZGlz YWJsZWQ7CgoJLy8gU3VwcG9ydDogSUU4IG9ubHkKCS8vIENoZWNrIGlmIHdlIGNh biB0cnVzdCBnZXRBdHRyaWJ1dGUoInZhbHVlIikKCWlucHV0ID0gZG9jdW1lbnQu Y3JlYXRlRWxlbWVudCggImlucHV0IiApOwoJaW5wdXQuc2V0QXR0cmlidXRlKCAi dmFsdWUiLCAiIiApOwoJc3VwcG9ydC5pbnB1dCA9IGlucHV0LmdldEF0dHJpYnV0 ZSggInZhbHVlIiApID09PSAiIjsKCgkvLyBDaGVjayBpZiBhbiBpbnB1dCBtYWlu dGFpbnMgaXRzIHZhbHVlIGFmdGVyIGJlY29taW5nIGEgcmFkaW8KCWlucHV0LnZh bHVlID0gInQiOwoJaW5wdXQuc2V0QXR0cmlidXRlKCAidHlwZSIsICJyYWRpbyIg KTsKCXN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSAidCI7CgoJ Ly8gTnVsbCBlbGVtZW50cyB0byBhdm9pZCBsZWFrcyBpbiBJRS4KCWEgPSBpbnB1 dCA9IHNlbGVjdCA9IG9wdCA9IGRpdiA9IG51bGw7Cn0pKCk7CgoKdmFyIHJyZXR1 cm4gPSAvXHIvZzsKCmpRdWVyeS5mbi5leHRlbmQoewoJdmFsOiBmdW5jdGlvbigg dmFsdWUgKSB7CgkJdmFyIGhvb2tzLCByZXQsIGlzRnVuY3Rpb24sCgkJCWVsZW0g PSB0aGlzWzBdOwoKCQlpZiAoICFhcmd1bWVudHMubGVuZ3RoICkgewoJCQlpZiAo IGVsZW0gKSB7CgkJCQlob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBl IF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNl KCkgXTsKCgkJCQlpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQg PSBob29rcy5nZXQoIGVsZW0sICJ2YWx1ZSIgKSkgIT09IHVuZGVmaW5lZCApIHsK CQkJCQlyZXR1cm4gcmV0OwoJCQkJfQoKCQkJCXJldCA9IGVsZW0udmFsdWU7CgoJ CQkJcmV0dXJuIHR5cGVvZiByZXQgPT09ICJzdHJpbmciID8KCQkJCQkvLyBoYW5k bGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzCgkJCQkJcmV0LnJlcGxhY2UocnJl dHVybiwgIiIpIDoKCQkJCQkvLyBoYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMg bnVsbC91bmRlZiBvciBudW1iZXIKCQkJCQlyZXQgPT0gbnVsbCA/ICIiIDogcmV0 OwoJCQl9CgoJCQlyZXR1cm47CgkJfQoKCQlpc0Z1bmN0aW9uID0galF1ZXJ5Lmlz RnVuY3Rpb24oIHZhbHVlICk7CgoJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24o IGkgKSB7CgkJCXZhciB2YWw7CgoJCQlpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEg KSB7CgkJCQlyZXR1cm47CgkJCX0KCgkJCWlmICggaXNGdW5jdGlvbiApIHsKCQkJ CXZhbCA9IHZhbHVlLmNhbGwoIHRoaXMsIGksIGpRdWVyeSggdGhpcyApLnZhbCgp ICk7CgkJCX0gZWxzZSB7CgkJCQl2YWwgPSB2YWx1ZTsKCQkJfQoKCQkJLy8gVHJl YXQgbnVsbC91bmRlZmluZWQgYXMgIiI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJp bmcKCQkJaWYgKCB2YWwgPT0gbnVsbCApIHsKCQkJCXZhbCA9ICIiOwoJCQl9IGVs c2UgaWYgKCB0eXBlb2YgdmFsID09PSAibnVtYmVyIiApIHsKCQkJCXZhbCArPSAi IjsKCQkJfSBlbHNlIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbCApICkgewoJCQkJ dmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7CgkJCQkJ cmV0dXJuIHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlICsgIiI7CgkJCQl9KTsK CQkJfQoKCQkJaG9va3MgPSBqUXVlcnkudmFsSG9va3NbIHRoaXMudHlwZSBdIHx8 IGpRdWVyeS52YWxIb29rc1sgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07 CgoJCQkvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBu b3JtYWwgc2V0dGluZwoJCQlpZiAoICFob29rcyB8fCAhKCJzZXQiIGluIGhvb2tz KSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgInZhbHVlIiApID09PSB1bmRlZmlu ZWQgKSB7CgkJCQl0aGlzLnZhbHVlID0gdmFsOwoJCQl9CgkJfSk7Cgl9Cn0pOwoK alF1ZXJ5LmV4dGVuZCh7Cgl2YWxIb29rczogewoJCW9wdGlvbjogewoJCQlnZXQ6 IGZ1bmN0aW9uKCBlbGVtICkgewoJCQkJdmFyIHZhbCA9IGpRdWVyeS5maW5kLmF0 dHIoIGVsZW0sICJ2YWx1ZSIgKTsKCQkJCXJldHVybiB2YWwgIT0gbnVsbCA/CgkJ CQkJdmFsIDoKCQkJCQlqUXVlcnkudGV4dCggZWxlbSApOwoJCQl9CgkJfSwKCQlz ZWxlY3Q6IHsKCQkJZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKCQkJCXZhciB2YWx1 ZSwgb3B0aW9uLAoJCQkJCW9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsCgkJCQkJaW5k ZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsCgkJCQkJb25lID0gZWxlbS50eXBlID09 PSAic2VsZWN0LW9uZSIgfHwgaW5kZXggPCAwLAoJCQkJCXZhbHVlcyA9IG9uZSA/ IG51bGwgOiBbXSwKCQkJCQltYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25z Lmxlbmd0aCwKCQkJCQlpID0gaW5kZXggPCAwID8KCQkJCQkJbWF4IDoKCQkJCQkJ b25lID8gaW5kZXggOiAwOwoKCQkJCS8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNl bGVjdGVkIG9wdGlvbnMKCQkJCWZvciAoIDsgaSA8IG1heDsgaSsrICkgewoJCQkJ CW9wdGlvbiA9IG9wdGlvbnNbIGkgXTsKCgkJCQkJLy8gb2xkSUUgZG9lc24ndCB1 cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAoIzI1NTEpCgkJCQkJaWYg KCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmCgkJCQkJCQkv LyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBh IGRpc2FibGVkIG9wdGdyb3VwCgkJCQkJCQkoIHN1cHBvcnQub3B0RGlzYWJsZWQg PyAhb3B0aW9uLmRpc2FibGVkIDogb3B0aW9uLmdldEF0dHJpYnV0ZSgiZGlzYWJs ZWQiKSA9PT0gbnVsbCApICYmCgkJCQkJCQkoICFvcHRpb24ucGFyZW50Tm9kZS5k aXNhYmxlZCB8fCAhalF1ZXJ5Lm5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwg Im9wdGdyb3VwIiApICkgKSB7CgoJCQkJCQkvLyBHZXQgdGhlIHNwZWNpZmljIHZh bHVlIGZvciB0aGUgb3B0aW9uCgkJCQkJCXZhbHVlID0galF1ZXJ5KCBvcHRpb24g KS52YWwoKTsKCgkJCQkJCS8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9u ZSBzZWxlY3RzCgkJCQkJCWlmICggb25lICkgewoJCQkJCQkJcmV0dXJuIHZhbHVl OwoJCQkJCQl9CgoJCQkJCQkvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJh eQoJCQkJCQl2YWx1ZXMucHVzaCggdmFsdWUgKTsKCQkJCQl9CgkJCQl9CgoJCQkJ cmV0dXJuIHZhbHVlczsKCQkJfSwKCgkJCXNldDogZnVuY3Rpb24oIGVsZW0sIHZh bHVlICkgewoJCQkJdmFyIG9wdGlvblNldCwgb3B0aW9uLAoJCQkJCW9wdGlvbnMg PSBlbGVtLm9wdGlvbnMsCgkJCQkJdmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSgg dmFsdWUgKSwKCQkJCQlpID0gb3B0aW9ucy5sZW5ndGg7CgoJCQkJd2hpbGUgKCBp LS0gKSB7CgkJCQkJb3B0aW9uID0gb3B0aW9uc1sgaSBdOwoKCQkJCQlpZiAoIGpR dWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9u ICksIHZhbHVlcyApID49IDAgKSB7CgoJCQkJCQkvLyBTdXBwb3J0OiBJRTYKCQkJ CQkJLy8gV2hlbiBuZXcgb3B0aW9uIGVsZW1lbnQgaXMgYWRkZWQgdG8gc2VsZWN0 IGJveCB3ZSBuZWVkIHRvCgkJCQkJCS8vIGZvcmNlIHJlZmxvdyBvZiBuZXdseSBh ZGRlZCBub2RlIGluIG9yZGVyIHRvIHdvcmthcm91bmQgZGVsYXkKCQkJCQkJLy8g b2YgaW5pdGlhbGl6YXRpb24gcHJvcGVydGllcwoJCQkJCQl0cnkgewoJCQkJCQkJ b3B0aW9uLnNlbGVjdGVkID0gb3B0aW9uU2V0ID0gdHJ1ZTsKCgkJCQkJCX0gY2F0 Y2ggKCBfICkgewoKCQkJCQkJCS8vIFdpbGwgYmUgZXhlY3V0ZWQgb25seSBpbiBJ RTYKCQkJCQkJCW9wdGlvbi5zY3JvbGxIZWlnaHQ7CgkJCQkJCX0KCgkJCQkJfSBl bHNlIHsKCQkJCQkJb3B0aW9uLnNlbGVjdGVkID0gZmFsc2U7CgkJCQkJfQoJCQkJ fQoKCQkJCS8vIEZvcmNlIGJyb3dzZXJzIHRvIGJlaGF2ZSBjb25zaXN0ZW50bHkg d2hlbiBub24tbWF0Y2hpbmcgdmFsdWUgaXMgc2V0CgkJCQlpZiAoICFvcHRpb25T ZXQgKSB7CgkJCQkJZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7CgkJCQl9CgoJCQkJ cmV0dXJuIG9wdGlvbnM7CgkJCX0KCQl9Cgl9Cn0pOwoKLy8gUmFkaW9zIGFuZCBj aGVja2JveGVzIGdldHRlci9zZXR0ZXIKalF1ZXJ5LmVhY2goWyAicmFkaW8iLCAi Y2hlY2tib3giIF0sIGZ1bmN0aW9uKCkgewoJalF1ZXJ5LnZhbEhvb2tzWyB0aGlz IF0gPSB7CgkJc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CgkJCWlmICgg alF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7CgkJCQlyZXR1cm4gKCBlbGVtLmNo ZWNrZWQgPSBqUXVlcnkuaW5BcnJheSggalF1ZXJ5KGVsZW0pLnZhbCgpLCB2YWx1 ZSApID49IDAgKTsKCQkJfQoJCX0KCX07CglpZiAoICFzdXBwb3J0LmNoZWNrT24g KSB7CgkJalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVs ZW0gKSB7CgkJCS8vIFN1cHBvcnQ6IFdlYmtpdAoJCQkvLyAiIiBpcyByZXR1cm5l ZCBpbnN0ZWFkIG9mICJvbiIgaWYgYSB2YWx1ZSBpc24ndCBzcGVjaWZpZWQKCQkJ cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpID09PSBudWxsID8gIm9u IiA6IGVsZW0udmFsdWU7CgkJfTsKCX0KfSk7CgoKCgp2YXIgbm9kZUhvb2ssIGJv b2xIb29rLAoJYXR0ckhhbmRsZSA9IGpRdWVyeS5leHByLmF0dHJIYW5kbGUsCgly dXNlRGVmYXVsdCA9IC9eKD86Y2hlY2tlZHxzZWxlY3RlZCkkL2ksCglnZXRTZXRB dHRyaWJ1dGUgPSBzdXBwb3J0LmdldFNldEF0dHJpYnV0ZSwKCWdldFNldElucHV0 ID0gc3VwcG9ydC5pbnB1dDsKCmpRdWVyeS5mbi5leHRlbmQoewoJYXR0cjogZnVu Y3Rpb24oIG5hbWUsIHZhbHVlICkgewoJCXJldHVybiBhY2Nlc3MoIHRoaXMsIGpR dWVyeS5hdHRyLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTsK CX0sCgoJcmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7CgkJcmV0dXJuIHRo aXMuZWFjaChmdW5jdGlvbigpIHsKCQkJalF1ZXJ5LnJlbW92ZUF0dHIoIHRoaXMs IG5hbWUgKTsKCQl9KTsKCX0KfSk7CgpqUXVlcnkuZXh0ZW5kKHsKCWF0dHI6IGZ1 bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKCQl2YXIgaG9va3MsIHJldCwK CQkJblR5cGUgPSBlbGVtLm5vZGVUeXBlOwoKCQkvLyBkb24ndCBnZXQvc2V0IGF0 dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzCgkJ aWYgKCAhZWxlbSB8fCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlw ZSA9PT0gMiApIHsKCQkJcmV0dXJuOwoJCX0KCgkJLy8gRmFsbGJhY2sgdG8gcHJv cCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQKCQlpZiAoIHR5cGVv ZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gc3RydW5kZWZpbmVkICkgewoJCQlyZXR1 cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7CgkJfQoKCQkvLyBB bGwgYXR0cmlidXRlcyBhcmUgbG93ZXJjYXNlCgkJLy8gR3JhYiBuZWNlc3Nhcnkg aG9vayBpZiBvbmUgaXMgZGVmaW5lZAoJCWlmICggblR5cGUgIT09IDEgfHwgIWpR dWVyeS5pc1hNTERvYyggZWxlbSApICkgewoJCQluYW1lID0gbmFtZS50b0xvd2Vy Q2FzZSgpOwoJCQlob29rcyA9IGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXSB8fAoJ CQkJKCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xI b29rIDogbm9kZUhvb2sgKTsKCQl9CgoJCWlmICggdmFsdWUgIT09IHVuZGVmaW5l ZCApIHsKCgkJCWlmICggdmFsdWUgPT09IG51bGwgKSB7CgkJCQlqUXVlcnkucmVt b3ZlQXR0ciggZWxlbSwgbmFtZSApOwoKCQkJfSBlbHNlIGlmICggaG9va3MgJiYg InNldCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUs IG5hbWUgKSkgIT09IHVuZGVmaW5lZCApIHsKCQkJCXJldHVybiByZXQ7CgoJCQl9 IGVsc2UgewoJCQkJZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgIiIg KTsKCQkJCXJldHVybiB2YWx1ZTsKCQkJfQoKCQl9IGVsc2UgaWYgKCBob29rcyAm JiAiZ2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1l ICkpICE9PSBudWxsICkgewoJCQlyZXR1cm4gcmV0OwoKCQl9IGVsc2UgewoJCQly ZXQgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBuYW1lICk7CgoJCQkvLyBOb24t ZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRv IHVuZGVmaW5lZAoJCQlyZXR1cm4gcmV0ID09IG51bGwgPwoJCQkJdW5kZWZpbmVk IDoKCQkJCXJldDsKCQl9Cgl9LAoKCXJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVt LCB2YWx1ZSApIHsKCQl2YXIgbmFtZSwgcHJvcE5hbWUsCgkJCWkgPSAwLAoJCQlh dHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdHdoaXRlICk7CgoJ CWlmICggYXR0ck5hbWVzICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CgkJCXdo aWxlICggKG5hbWUgPSBhdHRyTmFtZXNbaSsrXSkgKSB7CgkJCQlwcm9wTmFtZSA9 IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKCgkJCQkvLyBCb29sZWFu IGF0dHJpYnV0ZXMgZ2V0IHNwZWNpYWwgdHJlYXRtZW50ICgjMTA4NzApCgkJCQlp ZiAoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApICkgewoJCQkJ CS8vIFNldCBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHRvIGZhbHNlCgkJCQkJaWYg KCBnZXRTZXRJbnB1dCAmJiBnZXRTZXRBdHRyaWJ1dGUgfHwgIXJ1c2VEZWZhdWx0 LnRlc3QoIG5hbWUgKSApIHsKCQkJCQkJZWxlbVsgcHJvcE5hbWUgXSA9IGZhbHNl OwoJCQkJCS8vIFN1cHBvcnQ6IElFPDkKCQkJCQkvLyBBbHNvIGNsZWFyIGRlZmF1 bHRDaGVja2VkL2RlZmF1bHRTZWxlY3RlZCAoaWYgYXBwcm9wcmlhdGUpCgkJCQkJ fSBlbHNlIHsKCQkJCQkJZWxlbVsgalF1ZXJ5LmNhbWVsQ2FzZSggImRlZmF1bHQt IiArIG5hbWUgKSBdID0KCQkJCQkJCWVsZW1bIHByb3BOYW1lIF0gPSBmYWxzZTsK CQkJCQl9CgoJCQkJLy8gU2VlICM5Njk5IGZvciBleHBsYW5hdGlvbiBvZiB0aGlz IGFwcHJvYWNoIChzZXR0aW5nIGZpcnN0LCB0aGVuIHJlbW92YWwpCgkJCQl9IGVs c2UgewoJCQkJCWpRdWVyeS5hdHRyKCBlbGVtLCBuYW1lLCAiIiApOwoJCQkJfQoK CQkJCWVsZW0ucmVtb3ZlQXR0cmlidXRlKCBnZXRTZXRBdHRyaWJ1dGUgPyBuYW1l IDogcHJvcE5hbWUgKTsKCQkJfQoJCX0KCX0sCgoJYXR0ckhvb2tzOiB7CgkJdHlw ZTogewoJCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKCQkJCWlmICgg IXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gInJhZGlvIiAmJiBqUXVl cnkubm9kZU5hbWUoZWxlbSwgImlucHV0IikgKSB7CgkJCQkJLy8gU2V0dGluZyB0 aGUgdHlwZSBvbiBhIHJhZGlvIGJ1dHRvbiBhZnRlciB0aGUgdmFsdWUgcmVzZXRz IHRoZSB2YWx1ZSBpbiBJRTYtOQoJCQkJCS8vIFJlc2V0IHZhbHVlIHRvIGRlZmF1 bHQgaW4gY2FzZSB0eXBlIGlzIHNldCBhZnRlciB2YWx1ZSBkdXJpbmcgY3JlYXRp b24KCQkJCQl2YXIgdmFsID0gZWxlbS52YWx1ZTsKCQkJCQllbGVtLnNldEF0dHJp YnV0ZSggInR5cGUiLCB2YWx1ZSApOwoJCQkJCWlmICggdmFsICkgewoJCQkJCQll bGVtLnZhbHVlID0gdmFsOwoJCQkJCX0KCQkJCQlyZXR1cm4gdmFsdWU7CgkJCQl9 CgkJCX0KCQl9Cgl9Cn0pOwoKLy8gSG9vayBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVz CmJvb2xIb29rID0gewoJc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUg KSB7CgkJaWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7CgkJCS8vIFJlbW92ZSBib29s ZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2UKCQkJalF1ZXJ5LnJlbW92 ZUF0dHIoIGVsZW0sIG5hbWUgKTsKCQl9IGVsc2UgaWYgKCBnZXRTZXRJbnB1dCAm JiBnZXRTZXRBdHRyaWJ1dGUgfHwgIXJ1c2VEZWZhdWx0LnRlc3QoIG5hbWUgKSAp IHsKCQkJLy8gSUU8OCBuZWVkcyB0aGUgKnByb3BlcnR5KiBuYW1lCgkJCWVsZW0u c2V0QXR0cmlidXRlKCAhZ2V0U2V0QXR0cmlidXRlICYmIGpRdWVyeS5wcm9wRml4 WyBuYW1lIF0gfHwgbmFtZSwgbmFtZSApOwoKCQkvLyBVc2UgZGVmYXVsdENoZWNr ZWQgYW5kIGRlZmF1bHRTZWxlY3RlZCBmb3Igb2xkSUUKCQl9IGVsc2UgewoJCQll bGVtWyBqUXVlcnkuY2FtZWxDYXNlKCAiZGVmYXVsdC0iICsgbmFtZSApIF0gPSBl bGVtWyBuYW1lIF0gPSB0cnVlOwoJCX0KCgkJcmV0dXJuIG5hbWU7Cgl9Cn07Cgov LyBSZXRyaWV2ZSBib29sZWFucyBzcGVjaWFsbHkKalF1ZXJ5LmVhY2goIGpRdWVy eS5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKCAvXHcrL2cgKSwgZnVuY3Rp b24oIGksIG5hbWUgKSB7CgoJdmFyIGdldHRlciA9IGF0dHJIYW5kbGVbIG5hbWUg XSB8fCBqUXVlcnkuZmluZC5hdHRyOwoKCWF0dHJIYW5kbGVbIG5hbWUgXSA9IGdl dFNldElucHV0ICYmIGdldFNldEF0dHJpYnV0ZSB8fCAhcnVzZURlZmF1bHQudGVz dCggbmFtZSApID8KCQlmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7CgkJ CXZhciByZXQsIGhhbmRsZTsKCQkJaWYgKCAhaXNYTUwgKSB7CgkJCQkvLyBBdm9p ZCBhbiBpbmZpbml0ZSBsb29wIGJ5IHRlbXBvcmFyaWx5IHJlbW92aW5nIHRoaXMg ZnVuY3Rpb24gZnJvbSB0aGUgZ2V0dGVyCgkJCQloYW5kbGUgPSBhdHRySGFuZGxl WyBuYW1lIF07CgkJCQlhdHRySGFuZGxlWyBuYW1lIF0gPSByZXQ7CgkJCQlyZXQg PSBnZXR0ZXIoIGVsZW0sIG5hbWUsIGlzWE1MICkgIT0gbnVsbCA/CgkJCQkJbmFt ZS50b0xvd2VyQ2FzZSgpIDoKCQkJCQludWxsOwoJCQkJYXR0ckhhbmRsZVsgbmFt ZSBdID0gaGFuZGxlOwoJCQl9CgkJCXJldHVybiByZXQ7CgkJfSA6CgkJZnVuY3Rp b24oIGVsZW0sIG5hbWUsIGlzWE1MICkgewoJCQlpZiAoICFpc1hNTCApIHsKCQkJ CXJldHVybiBlbGVtWyBqUXVlcnkuY2FtZWxDYXNlKCAiZGVmYXVsdC0iICsgbmFt ZSApIF0gPwoJCQkJCW5hbWUudG9Mb3dlckNhc2UoKSA6CgkJCQkJbnVsbDsKCQkJ fQoJCX07Cn0pOwoKLy8gZml4IG9sZElFIGF0dHJvcGVydGllcwppZiAoICFnZXRT ZXRJbnB1dCB8fCAhZ2V0U2V0QXR0cmlidXRlICkgewoJalF1ZXJ5LmF0dHJIb29r cy52YWx1ZSA9IHsKCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSAp IHsKCQkJaWYgKCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSApIHsK CQkJCS8vIERvZXMgbm90IHJldHVybiBzbyB0aGF0IHNldEF0dHJpYnV0ZSBpcyBh bHNvIHVzZWQKCQkJCWVsZW0uZGVmYXVsdFZhbHVlID0gdmFsdWU7CgkJCX0gZWxz ZSB7CgkJCQkvLyBVc2Ugbm9kZUhvb2sgaWYgZGVmaW5lZCAoIzE5NTQpOyBvdGhl cndpc2Ugc2V0QXR0cmlidXRlIGlzIGZpbmUKCQkJCXJldHVybiBub2RlSG9vayAm JiBub2RlSG9vay5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICk7CgkJCX0KCQl9Cgl9 Owp9CgovLyBJRTYvNyBkbyBub3Qgc3VwcG9ydCBnZXR0aW5nL3NldHRpbmcgc29t ZSBhdHRyaWJ1dGVzIHdpdGggZ2V0L3NldEF0dHJpYnV0ZQppZiAoICFnZXRTZXRB dHRyaWJ1dGUgKSB7CgoJLy8gVXNlIHRoaXMgZm9yIGFueSBhdHRyaWJ1dGUgaW4g SUU2LzcKCS8vIFRoaXMgZml4ZXMgYWxtb3N0IGV2ZXJ5IElFNi83IGlzc3VlCglu b2RlSG9vayA9IHsKCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSAp IHsKCQkJLy8gU2V0IHRoZSBleGlzdGluZyBvciBjcmVhdGUgYSBuZXcgYXR0cmli dXRlIG5vZGUKCQkJdmFyIHJldCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFt ZSApOwoJCQlpZiAoICFyZXQgKSB7CgkJCQllbGVtLnNldEF0dHJpYnV0ZU5vZGUo CgkJCQkJKHJldCA9IGVsZW0ub3duZXJEb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUo IG5hbWUgKSkKCQkJCSk7CgkJCX0KCgkJCXJldC52YWx1ZSA9IHZhbHVlICs9ICIi OwoKCQkJLy8gQnJlYWsgYXNzb2NpYXRpb24gd2l0aCBjbG9uZWQgZWxlbWVudHMg YnkgYWxzbyB1c2luZyBzZXRBdHRyaWJ1dGUgKCM5NjQ2KQoJCQlpZiAoIG5hbWUg PT09ICJ2YWx1ZSIgfHwgdmFsdWUgPT09IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1l ICkgKSB7CgkJCQlyZXR1cm4gdmFsdWU7CgkJCX0KCQl9Cgl9OwoKCS8vIFNvbWUg YXR0cmlidXRlcyBhcmUgY29uc3RydWN0ZWQgd2l0aCBlbXB0eS1zdHJpbmcgdmFs dWVzIHdoZW4gbm90IGRlZmluZWQKCWF0dHJIYW5kbGUuaWQgPSBhdHRySGFuZGxl Lm5hbWUgPSBhdHRySGFuZGxlLmNvb3JkcyA9CgkJZnVuY3Rpb24oIGVsZW0sIG5h bWUsIGlzWE1MICkgewoJCQl2YXIgcmV0OwoJCQlpZiAoICFpc1hNTCApIHsKCQkJ CXJldHVybiAocmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkpICYm IHJldC52YWx1ZSAhPT0gIiIgPwoJCQkJCXJldC52YWx1ZSA6CgkJCQkJbnVsbDsK CQkJfQoJCX07CgoJLy8gRml4aW5nIHZhbHVlIHJldHJpZXZhbCBvbiBhIGJ1dHRv biByZXF1aXJlcyB0aGlzIG1vZHVsZQoJalF1ZXJ5LnZhbEhvb2tzLmJ1dHRvbiA9 IHsKCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewoJCQl2YXIgcmV0ID0g ZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICk7CgkJCWlmICggcmV0ICYmIHJl dC5zcGVjaWZpZWQgKSB7CgkJCQlyZXR1cm4gcmV0LnZhbHVlOwoJCQl9CgkJfSwK CQlzZXQ6IG5vZGVIb29rLnNldAoJfTsKCgkvLyBTZXQgY29udGVudGVkaXRhYmxl IHRvIGZhbHNlIG9uIHJlbW92YWxzKCMxMDQyOSkKCS8vIFNldHRpbmcgdG8gZW1w dHkgc3RyaW5nIHRocm93cyBhbiBlcnJvciBhcyBhbiBpbnZhbGlkIHZhbHVlCglq UXVlcnkuYXR0ckhvb2tzLmNvbnRlbnRlZGl0YWJsZSA9IHsKCQlzZXQ6IGZ1bmN0 aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsKCQkJbm9kZUhvb2suc2V0KCBlbGVt LCB2YWx1ZSA9PT0gIiIgPyBmYWxzZSA6IHZhbHVlLCBuYW1lICk7CgkJfQoJfTsK CgkvLyBTZXQgd2lkdGggYW5kIGhlaWdodCB0byBhdXRvIGluc3RlYWQgb2YgMCBv biBlbXB0eSBzdHJpbmcoIEJ1ZyAjODE1MCApCgkvLyBUaGlzIGlzIGZvciByZW1v dmFscwoJalF1ZXJ5LmVhY2goWyAid2lkdGgiLCAiaGVpZ2h0IiBdLCBmdW5jdGlv biggaSwgbmFtZSApIHsKCQlqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0gPSB7CgkJ CXNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewoJCQkJaWYgKCB2YWx1ZSA9 PT0gIiIgKSB7CgkJCQkJZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsICJhdXRvIiAp OwoJCQkJCXJldHVybiB2YWx1ZTsKCQkJCX0KCQkJfQoJCX07Cgl9KTsKfQoKaWYg KCAhc3VwcG9ydC5zdHlsZSApIHsKCWpRdWVyeS5hdHRySG9va3Muc3R5bGUgPSB7 CgkJZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKCQkJLy8gUmV0dXJuIHVuZGVmaW5l ZCBpbiB0aGUgY2FzZSBvZiBlbXB0eSBzdHJpbmcKCQkJLy8gTm90ZTogSUUgdXBw ZXJjYXNlcyBjc3MgcHJvcGVydHkgbmFtZXMsIGJ1dCBpZiB3ZSB3ZXJlIHRvIC50 b0xvd2VyQ2FzZSgpCgkJCS8vIC5jc3NUZXh0LCB0aGF0IHdvdWxkIGRlc3Ryb3kg Y2FzZSBzZW5zdGl0aXZpdHkgaW4gVVJMJ3MsIGxpa2UgaW4gImJhY2tncm91bmQi CgkJCXJldHVybiBlbGVtLnN0eWxlLmNzc1RleHQgfHwgdW5kZWZpbmVkOwoJCX0s CgkJc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CgkJCXJldHVybiAoIGVs ZW0uc3R5bGUuY3NzVGV4dCA9IHZhbHVlICsgIiIgKTsKCQl9Cgl9Owp9CgoKCgp2 YXIgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRv bnxvYmplY3QpJC9pLAoJcmNsaWNrYWJsZSA9IC9eKD86YXxhcmVhKSQvaTsKCmpR dWVyeS5mbi5leHRlbmQoewoJcHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkg ewoJCXJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1 ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTsKCX0sCgoJcmVtb3ZlUHJvcDogZnVu Y3Rpb24oIG5hbWUgKSB7CgkJbmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0g fHwgbmFtZTsKCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQkvLyB0 cnkvY2F0Y2ggaGFuZGxlcyBjYXNlcyB3aGVyZSBJRSBiYWxrcyAoc3VjaCBhcyBy ZW1vdmluZyBhIHByb3BlcnR5IG9uIHdpbmRvdykKCQkJdHJ5IHsKCQkJCXRoaXNb IG5hbWUgXSA9IHVuZGVmaW5lZDsKCQkJCWRlbGV0ZSB0aGlzWyBuYW1lIF07CgkJ CX0gY2F0Y2goIGUgKSB7fQoJCX0pOwoJfQp9KTsKCmpRdWVyeS5leHRlbmQoewoJ cHJvcEZpeDogewoJCSJmb3IiOiAiaHRtbEZvciIsCgkJImNsYXNzIjogImNsYXNz TmFtZSIKCX0sCgoJcHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkg ewoJCXZhciByZXQsIGhvb2tzLCBub3R4bWwsCgkJCW5UeXBlID0gZWxlbS5ub2Rl VHlwZTsKCgkJLy8gZG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNv bW1lbnQgYW5kIGF0dHJpYnV0ZSBub2RlcwoJCWlmICggIWVsZW0gfHwgblR5cGUg PT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7CgkJCXJldHVy bjsKCQl9CgoJCW5vdHhtbCA9IG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxE b2MoIGVsZW0gKTsKCgkJaWYgKCBub3R4bWwgKSB7CgkJCS8vIEZpeCBuYW1lIGFu ZCBhdHRhY2ggaG9va3MKCQkJbmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0g fHwgbmFtZTsKCQkJaG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF07CgkJ fQoKCQlpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CgkJCXJldHVybiBob29r cyAmJiAic2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2 YWx1ZSwgbmFtZSApKSAhPT0gdW5kZWZpbmVkID8KCQkJCXJldCA6CgkJCQkoIGVs ZW1bIG5hbWUgXSA9IHZhbHVlICk7CgoJCX0gZWxzZSB7CgkJCXJldHVybiBob29r cyAmJiAiZ2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBu YW1lICkpICE9PSBudWxsID8KCQkJCXJldCA6CgkJCQllbGVtWyBuYW1lIF07CgkJ fQoJfSwKCglwcm9wSG9va3M6IHsKCQl0YWJJbmRleDogewoJCQlnZXQ6IGZ1bmN0 aW9uKCBlbGVtICkgewoJCQkJLy8gZWxlbS50YWJJbmRleCBkb2Vzbid0IGFsd2F5 cyByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBl eHBsaWNpdGx5IHNldAoJCQkJLy8gaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvYmxv Zy8yMDA4LzAxLzA5L2dldHRpbmctc2V0dGluZy1hbmQtcmVtb3ZpbmctdGFiaW5k ZXgtdmFsdWVzLXdpdGgtamF2YXNjcmlwdC8KCQkJCS8vIFVzZSBwcm9wZXIgYXR0 cmlidXRlIHJldHJpZXZhbCgjMTIwNzIpCgkJCQl2YXIgdGFiaW5kZXggPSBqUXVl cnkuZmluZC5hdHRyKCBlbGVtLCAidGFiaW5kZXgiICk7CgoJCQkJcmV0dXJuIHRh YmluZGV4ID8KCQkJCQlwYXJzZUludCggdGFiaW5kZXgsIDEwICkgOgoJCQkJCXJm b2N1c2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8IHJjbGlja2FibGUudGVz dCggZWxlbS5ub2RlTmFtZSApICYmIGVsZW0uaHJlZiA/CgkJCQkJCTAgOgoJCQkJ CQktMTsKCQkJfQoJCX0KCX0KfSk7CgovLyBTb21lIGF0dHJpYnV0ZXMgcmVxdWly ZSBhIHNwZWNpYWwgY2FsbCBvbiBJRQovLyBodHRwOi8vbXNkbi5taWNyb3NvZnQu Y29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4CmlmICgg IXN1cHBvcnQuaHJlZk5vcm1hbGl6ZWQgKSB7CgkvLyBocmVmL3NyYyBwcm9wZXJ0 eSBzaG91bGQgZ2V0IHRoZSBmdWxsIG5vcm1hbGl6ZWQgVVJMICgjMTAyOTkvIzEy OTE1KQoJalF1ZXJ5LmVhY2goWyAiaHJlZiIsICJzcmMiIF0sIGZ1bmN0aW9uKCBp LCBuYW1lICkgewoJCWpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXSA9IHsKCQkJZ2V0 OiBmdW5jdGlvbiggZWxlbSApIHsKCQkJCXJldHVybiBlbGVtLmdldEF0dHJpYnV0 ZSggbmFtZSwgNCApOwoJCQl9CgkJfTsKCX0pOwp9CgovLyBTdXBwb3J0OiBTYWZh cmksIElFOSsKLy8gbWlzLXJlcG9ydHMgdGhlIGRlZmF1bHQgc2VsZWN0ZWQgcHJv cGVydHkgb2YgYW4gb3B0aW9uCi8vIEFjY2Vzc2luZyB0aGUgcGFyZW50J3Mgc2Vs ZWN0ZWRJbmRleCBwcm9wZXJ0eSBmaXhlcyBpdAppZiAoICFzdXBwb3J0Lm9wdFNl bGVjdGVkICkgewoJalF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IHsKCQlnZXQ6 IGZ1bmN0aW9uKCBlbGVtICkgewoJCQl2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnRO b2RlOwoKCQkJaWYgKCBwYXJlbnQgKSB7CgkJCQlwYXJlbnQuc2VsZWN0ZWRJbmRl eDsKCgkJCQkvLyBNYWtlIHN1cmUgdGhhdCBpdCBhbHNvIHdvcmtzIHdpdGggb3B0 Z3JvdXBzLCBzZWUgIzU3MDEKCQkJCWlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7 CgkJCQkJcGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKCQkJCX0KCQkJ fQoJCQlyZXR1cm4gbnVsbDsKCQl9Cgl9Owp9CgpqUXVlcnkuZWFjaChbCgkidGFi SW5kZXgiLAoJInJlYWRPbmx5IiwKCSJtYXhMZW5ndGgiLAoJImNlbGxTcGFjaW5n IiwKCSJjZWxsUGFkZGluZyIsCgkicm93U3BhbiIsCgkiY29sU3BhbiIsCgkidXNl TWFwIiwKCSJmcmFtZUJvcmRlciIsCgkiY29udGVudEVkaXRhYmxlIgpdLCBmdW5j dGlvbigpIHsKCWpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9 IHRoaXM7Cn0pOwoKLy8gSUU2LzcgY2FsbCBlbmN0eXBlIGVuY29kaW5nCmlmICgg IXN1cHBvcnQuZW5jdHlwZSApIHsKCWpRdWVyeS5wcm9wRml4LmVuY3R5cGUgPSAi ZW5jb2RpbmciOwp9CgoKCgp2YXIgcmNsYXNzID0gL1tcdFxyXG5cZl0vZzsKCmpR dWVyeS5mbi5leHRlbmQoewoJYWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsK CQl2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSwK CQkJaSA9IDAsCgkJCWxlbiA9IHRoaXMubGVuZ3RoLAoJCQlwcm9jZWVkID0gdHlw ZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiB2YWx1ZTsKCgkJaWYgKCBqUXVlcnku aXNGdW5jdGlvbiggdmFsdWUgKSApIHsKCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5j dGlvbiggaiApIHsKCQkJCWpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5j YWxsKCB0aGlzLCBqLCB0aGlzLmNsYXNzTmFtZSApICk7CgkJCX0pOwoJCX0KCgkJ aWYgKCBwcm9jZWVkICkgewoJCQkvLyBUaGUgZGlzanVuY3Rpb24gaGVyZSBpcyBm b3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIHJlbW92ZUNsYXNzKQoJCQlj bGFzc2VzID0gKCB2YWx1ZSB8fCAiIiApLm1hdGNoKCBybm90d2hpdGUgKSB8fCBb XTsKCgkJCWZvciAoIDsgaSA8IGxlbjsgaSsrICkgewoJCQkJZWxlbSA9IHRoaXNb IGkgXTsKCQkJCWN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBlbGVtLmNs YXNzTmFtZSA/CgkJCQkJKCAiICIgKyBlbGVtLmNsYXNzTmFtZSArICIgIiApLnJl cGxhY2UoIHJjbGFzcywgIiAiICkgOgoJCQkJCSIgIgoJCQkJKTsKCgkJCQlpZiAo IGN1ciApIHsKCQkJCQlqID0gMDsKCQkJCQl3aGlsZSAoIChjbGF6eiA9IGNsYXNz ZXNbaisrXSkgKSB7CgkJCQkJCWlmICggY3VyLmluZGV4T2YoICIgIiArIGNsYXp6 ICsgIiAiICkgPCAwICkgewoJCQkJCQkJY3VyICs9IGNsYXp6ICsgIiAiOwoJCQkJ CQl9CgkJCQkJfQoKCQkJCQkvLyBvbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8g YXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLgoJCQkJCWZpbmFsVmFsdWUgPSBqUXVl cnkudHJpbSggY3VyICk7CgkJCQkJaWYgKCBlbGVtLmNsYXNzTmFtZSAhPT0gZmlu YWxWYWx1ZSApIHsKCQkJCQkJZWxlbS5jbGFzc05hbWUgPSBmaW5hbFZhbHVlOwoJ CQkJCX0KCQkJCX0KCQkJfQoJCX0KCgkJcmV0dXJuIHRoaXM7Cgl9LAoKCXJlbW92 ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7CgkJdmFyIGNsYXNzZXMsIGVsZW0s IGN1ciwgY2xhenosIGosIGZpbmFsVmFsdWUsCgkJCWkgPSAwLAoJCQlsZW4gPSB0 aGlzLmxlbmd0aCwKCQkJcHJvY2VlZCA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDAg fHwgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiB2YWx1ZTsKCgkJaWYgKCBq UXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKCQkJcmV0dXJuIHRoaXMuZWFj aChmdW5jdGlvbiggaiApIHsKCQkJCWpRdWVyeSggdGhpcyApLnJlbW92ZUNsYXNz KCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCB0aGlzLmNsYXNzTmFtZSApICk7CgkJCX0p OwoJCX0KCQlpZiAoIHByb2NlZWQgKSB7CgkJCWNsYXNzZXMgPSAoIHZhbHVlIHx8 ICIiICkubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdOwoKCQkJZm9yICggOyBpIDwg bGVuOyBpKysgKSB7CgkJCQllbGVtID0gdGhpc1sgaSBdOwoJCQkJLy8gVGhpcyBl eHByZXNzaW9uIGlzIGhlcmUgZm9yIGJldHRlciBjb21wcmVzc2liaWxpdHkgKHNl ZSBhZGRDbGFzcykKCQkJCWN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBl bGVtLmNsYXNzTmFtZSA/CgkJCQkJKCAiICIgKyBlbGVtLmNsYXNzTmFtZSArICIg IiApLnJlcGxhY2UoIHJjbGFzcywgIiAiICkgOgoJCQkJCSIiCgkJCQkpOwoKCQkJ CWlmICggY3VyICkgewoJCQkJCWogPSAwOwoJCQkJCXdoaWxlICggKGNsYXp6ID0g Y2xhc3Nlc1tqKytdKSApIHsKCQkJCQkJLy8gUmVtb3ZlICphbGwqIGluc3RhbmNl cwoJCQkJCQl3aGlsZSAoIGN1ci5pbmRleE9mKCAiICIgKyBjbGF6eiArICIgIiAp ID49IDAgKSB7CgkJCQkJCQljdXIgPSBjdXIucmVwbGFjZSggIiAiICsgY2xhenog KyAiICIsICIgIiApOwoJCQkJCQl9CgkJCQkJfQoKCQkJCQkvLyBvbmx5IGFzc2ln biBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLgoJCQkJ CWZpbmFsVmFsdWUgPSB2YWx1ZSA/IGpRdWVyeS50cmltKCBjdXIgKSA6ICIiOwoJ CQkJCWlmICggZWxlbS5jbGFzc05hbWUgIT09IGZpbmFsVmFsdWUgKSB7CgkJCQkJ CWVsZW0uY2xhc3NOYW1lID0gZmluYWxWYWx1ZTsKCQkJCQl9CgkJCQl9CgkJCX0K CQl9CgoJCXJldHVybiB0aGlzOwoJfSwKCgl0b2dnbGVDbGFzczogZnVuY3Rpb24o IHZhbHVlLCBzdGF0ZVZhbCApIHsKCQl2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTsK CgkJaWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09ICJib29sZWFuIiAmJiB0eXBlID09 PSAic3RyaW5nIiApIHsKCQkJcmV0dXJuIHN0YXRlVmFsID8gdGhpcy5hZGRDbGFz cyggdmFsdWUgKSA6IHRoaXMucmVtb3ZlQ2xhc3MoIHZhbHVlICk7CgkJfQoKCQlp ZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgewoJCQlyZXR1cm4gdGhp cy5lYWNoKGZ1bmN0aW9uKCBpICkgewoJCQkJalF1ZXJ5KCB0aGlzICkudG9nZ2xl Q2xhc3MoIHZhbHVlLmNhbGwodGhpcywgaSwgdGhpcy5jbGFzc05hbWUsIHN0YXRl VmFsKSwgc3RhdGVWYWwgKTsKCQkJfSk7CgkJfQoKCQlyZXR1cm4gdGhpcy5lYWNo KGZ1bmN0aW9uKCkgewoJCQlpZiAoIHR5cGUgPT09ICJzdHJpbmciICkgewoJCQkJ Ly8gdG9nZ2xlIGluZGl2aWR1YWwgY2xhc3MgbmFtZXMKCQkJCXZhciBjbGFzc05h bWUsCgkJCQkJaSA9IDAsCgkJCQkJc2VsZiA9IGpRdWVyeSggdGhpcyApLAoJCQkJ CWNsYXNzTmFtZXMgPSB2YWx1ZS5tYXRjaCggcm5vdHdoaXRlICkgfHwgW107CgoJ CQkJd2hpbGUgKCAoY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0pICkgewoJ CQkJCS8vIGNoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0 ZWQgbGlzdAoJCQkJCWlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7 CgkJCQkJCXNlbGYucmVtb3ZlQ2xhc3MoIGNsYXNzTmFtZSApOwoJCQkJCX0gZWxz ZSB7CgkJCQkJCXNlbGYuYWRkQ2xhc3MoIGNsYXNzTmFtZSApOwoJCQkJCX0KCQkJ CX0KCgkJCS8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lCgkJCX0gZWxzZSBpZiAo IHR5cGUgPT09IHN0cnVuZGVmaW5lZCB8fCB0eXBlID09PSAiYm9vbGVhbiIgKSB7 CgkJCQlpZiAoIHRoaXMuY2xhc3NOYW1lICkgewoJCQkJCS8vIHN0b3JlIGNsYXNz TmFtZSBpZiBzZXQKCQkJCQlqUXVlcnkuX2RhdGEoIHRoaXMsICJfX2NsYXNzTmFt ZV9fIiwgdGhpcy5jbGFzc05hbWUgKTsKCQkJCX0KCgkJCQkvLyBJZiB0aGUgZWxl bWVudCBoYXMgYSBjbGFzcyBuYW1lIG9yIGlmIHdlJ3JlIHBhc3NlZCAiZmFsc2Ui LAoJCQkJLy8gdGhlbiByZW1vdmUgdGhlIHdob2xlIGNsYXNzbmFtZSAoaWYgdGhl cmUgd2FzIG9uZSwgdGhlIGFib3ZlIHNhdmVkIGl0KS4KCQkJCS8vIE90aGVyd2lz ZSBicmluZyBiYWNrIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IHNhdmVkIChpZiBh bnl0aGluZyksCgkJCQkvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmlu ZyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuCgkJCQl0aGlzLmNsYXNzTmFtZSA9IHRo aXMuY2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/ICIiIDogalF1ZXJ5Ll9k YXRhKCB0aGlzLCAiX19jbGFzc05hbWVfXyIgKSB8fCAiIjsKCQkJfQoJCX0pOwoJ fSwKCgloYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkgewoJCXZhciBjbGFz c05hbWUgPSAiICIgKyBzZWxlY3RvciArICIgIiwKCQkJaSA9IDAsCgkJCWwgPSB0 aGlzLmxlbmd0aDsKCQlmb3IgKCA7IGkgPCBsOyBpKysgKSB7CgkJCWlmICggdGhp c1tpXS5ub2RlVHlwZSA9PT0gMSAmJiAoIiAiICsgdGhpc1tpXS5jbGFzc05hbWUg KyAiICIpLnJlcGxhY2UocmNsYXNzLCAiICIpLmluZGV4T2YoIGNsYXNzTmFtZSAp ID49IDAgKSB7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoJCX0KCgkJcmV0dXJuIGZh bHNlOwoJfQp9KTsKCgoKCi8vIFJldHVybiBqUXVlcnkgZm9yIGF0dHJpYnV0ZXMt b25seSBpbmNsdXNpb24KCgpqUXVlcnkuZWFjaCggKCJibHVyIGZvY3VzIGZvY3Vz aW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxj bGljayAiICsKCSJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVy IG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSAiICsKCSJjaGFuZ2Ugc2Vs ZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRt ZW51Iikuc3BsaXQoIiAiKSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CgoJLy8gSGFu ZGxlIGV2ZW50IGJpbmRpbmcKCWpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24o IGRhdGEsIGZuICkgewoJCXJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/CgkJ CXRoaXMub24oIG5hbWUsIG51bGwsIGRhdGEsIGZuICkgOgoJCQl0aGlzLnRyaWdn ZXIoIG5hbWUgKTsKCX07Cn0pOwoKalF1ZXJ5LmZuLmV4dGVuZCh7Cglob3Zlcjog ZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7CgkJcmV0dXJuIHRoaXMubW91c2Vl bnRlciggZm5PdmVyICkubW91c2VsZWF2ZSggZm5PdXQgfHwgZm5PdmVyICk7Cgl9 LAoKCWJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7CgkJcmV0dXJu IHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApOwoJfSwKCXVuYmluZDog ZnVuY3Rpb24oIHR5cGVzLCBmbiApIHsKCQlyZXR1cm4gdGhpcy5vZmYoIHR5cGVz LCBudWxsLCBmbiApOwoJfSwKCglkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9y LCB0eXBlcywgZGF0YSwgZm4gKSB7CgkJcmV0dXJuIHRoaXMub24oIHR5cGVzLCBz ZWxlY3RvciwgZGF0YSwgZm4gKTsKCX0sCgl1bmRlbGVnYXRlOiBmdW5jdGlvbigg c2VsZWN0b3IsIHR5cGVzLCBmbiApIHsKCQkvLyAoIG5hbWVzcGFjZSApIG9yICgg c2VsZWN0b3IsIHR5cGVzIFssIGZuXSApCgkJcmV0dXJuIGFyZ3VtZW50cy5sZW5n dGggPT09IDEgPyB0aGlzLm9mZiggc2VsZWN0b3IsICIqKiIgKSA6IHRoaXMub2Zm KCB0eXBlcywgc2VsZWN0b3IgfHwgIioqIiwgZm4gKTsKCX0KfSk7CgoKdmFyIG5v bmNlID0galF1ZXJ5Lm5vdygpOwoKdmFyIHJxdWVyeSA9ICgvXD8vKTsKCgoKdmFy IHJ2YWxpZHRva2VucyA9IC8oLCl8KFxbfHspfCh9fF0pfCIoPzpbXiJcXFxyXG5d fFxcWyJcXFwvYmZucnRdfFxcdVtcZGEtZkEtRl17NH0pKiJccyo6P3x0cnVlfGZh bHNlfG51bGx8LT8oPyEwXGQpXGQrKD86XC5cZCt8KSg/OltlRV1bKy1dP1xkK3wp L2c7CgpqUXVlcnkucGFyc2VKU09OID0gZnVuY3Rpb24oIGRhdGEgKSB7CgkvLyBB dHRlbXB0IHRvIHBhcnNlIHVzaW5nIHRoZSBuYXRpdmUgSlNPTiBwYXJzZXIgZmly c3QKCWlmICggd2luZG93LkpTT04gJiYgd2luZG93LkpTT04ucGFyc2UgKSB7CgkJ Ly8gU3VwcG9ydDogQW5kcm9pZCAyLjMKCQkvLyBXb3JrYXJvdW5kIGZhaWx1cmUg dG8gc3RyaW5nLWNhc3QgbnVsbCBpbnB1dAoJCXJldHVybiB3aW5kb3cuSlNPTi5w YXJzZSggZGF0YSArICIiICk7Cgl9CgoJdmFyIHJlcXVpcmVOb25Db21tYSwKCQlk ZXB0aCA9IG51bGwsCgkJc3RyID0galF1ZXJ5LnRyaW0oIGRhdGEgKyAiIiApOwoK CS8vIEd1YXJkIGFnYWluc3QgaW52YWxpZCAoYW5kIHBvc3NpYmx5IGRhbmdlcm91 cykgaW5wdXQgYnkgZW5zdXJpbmcgdGhhdCBub3RoaW5nIHJlbWFpbnMKCS8vIGFm dGVyIHJlbW92aW5nIHZhbGlkIHRva2VucwoJcmV0dXJuIHN0ciAmJiAhalF1ZXJ5 LnRyaW0oIHN0ci5yZXBsYWNlKCBydmFsaWR0b2tlbnMsIGZ1bmN0aW9uKCB0b2tl biwgY29tbWEsIG9wZW4sIGNsb3NlICkgewoKCQkvLyBGb3JjZSB0ZXJtaW5hdGlv biBpZiB3ZSBzZWUgYSBtaXNwbGFjZWQgY29tbWEKCQlpZiAoIHJlcXVpcmVOb25D b21tYSAmJiBjb21tYSApIHsKCQkJZGVwdGggPSAwOwoJCX0KCgkJLy8gUGVyZm9y bSBubyBtb3JlIHJlcGxhY2VtZW50cyBhZnRlciByZXR1cm5pbmcgdG8gb3V0ZXJt b3N0IGRlcHRoCgkJaWYgKCBkZXB0aCA9PT0gMCApIHsKCQkJcmV0dXJuIHRva2Vu OwoJCX0KCgkJLy8gQ29tbWFzIG11c3Qgbm90IGZvbGxvdyAiWyIsICJ7Iiwgb3Ig IiwiCgkJcmVxdWlyZU5vbkNvbW1hID0gb3BlbiB8fCBjb21tYTsKCgkJLy8gRGV0 ZXJtaW5lIG5ldyBkZXB0aAoJCS8vIGFycmF5L29iamVjdCBvcGVuICgiWyIgb3Ig InsiKTogZGVwdGggKz0gdHJ1ZSAtIGZhbHNlIChpbmNyZW1lbnQpCgkJLy8gYXJy YXkvb2JqZWN0IGNsb3NlICgiXSIgb3IgIn0iKTogZGVwdGggKz0gZmFsc2UgLSB0 cnVlIChkZWNyZW1lbnQpCgkJLy8gb3RoZXIgY2FzZXMgKCIsIiBvciBwcmltaXRp dmUpOiBkZXB0aCArPSB0cnVlIC0gdHJ1ZSAobnVtZXJpYyBjYXN0KQoJCWRlcHRo ICs9ICFjbG9zZSAtICFvcGVuOwoKCQkvLyBSZW1vdmUgdGhpcyB0b2tlbgoJCXJl dHVybiAiIjsKCX0pICkgPwoJCSggRnVuY3Rpb24oICJyZXR1cm4gIiArIHN0ciAp ICkoKSA6CgkJalF1ZXJ5LmVycm9yKCAiSW52YWxpZCBKU09OOiAiICsgZGF0YSAp Owp9OwoKCi8vIENyb3NzLWJyb3dzZXIgeG1sIHBhcnNpbmcKalF1ZXJ5LnBhcnNl WE1MID0gZnVuY3Rpb24oIGRhdGEgKSB7Cgl2YXIgeG1sLCB0bXA7CglpZiAoICFk YXRhIHx8IHR5cGVvZiBkYXRhICE9PSAic3RyaW5nIiApIHsKCQlyZXR1cm4gbnVs bDsKCX0KCXRyeSB7CgkJaWYgKCB3aW5kb3cuRE9NUGFyc2VyICkgeyAvLyBTdGFu ZGFyZAoJCQl0bXAgPSBuZXcgRE9NUGFyc2VyKCk7CgkJCXhtbCA9IHRtcC5wYXJz ZUZyb21TdHJpbmcoIGRhdGEsICJ0ZXh0L3htbCIgKTsKCQl9IGVsc2UgeyAvLyBJ RQoJCQl4bWwgPSBuZXcgQWN0aXZlWE9iamVjdCggIk1pY3Jvc29mdC5YTUxET00i ICk7CgkJCXhtbC5hc3luYyA9ICJmYWxzZSI7CgkJCXhtbC5sb2FkWE1MKCBkYXRh ICk7CgkJfQoJfSBjYXRjaCggZSApIHsKCQl4bWwgPSB1bmRlZmluZWQ7Cgl9Cglp ZiAoICF4bWwgfHwgIXhtbC5kb2N1bWVudEVsZW1lbnQgfHwgeG1sLmdldEVsZW1l bnRzQnlUYWdOYW1lKCAicGFyc2VyZXJyb3IiICkubGVuZ3RoICkgewoJCWpRdWVy eS5lcnJvciggIkludmFsaWQgWE1MOiAiICsgZGF0YSApOwoJfQoJcmV0dXJuIHht bDsKfTsKCgp2YXIKCS8vIERvY3VtZW50IGxvY2F0aW9uCglhamF4TG9jUGFydHMs CglhamF4TG9jYXRpb24sCgoJcmhhc2ggPSAvIy4qJC8sCglydHMgPSAvKFs/Jl0p Xz1bXiZdKi8sCglyaGVhZGVycyA9IC9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxy PyQvbWcsIC8vIElFIGxlYXZlcyBhbiBcciBjaGFyYWN0ZXIgYXQgRU9MCgkvLyAj NzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb24KCXJs b2NhbFByb3RvY29sID0gL14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0 ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sCglybm9Db250ZW50ID0gL14oPzpH RVR8SEVBRCkkLywKCXJwcm90b2NvbCA9IC9eXC9cLy8sCglydXJsID0gL14oW1x3 ListXSs6KSg/OlwvXC8oPzpbXlwvPyNdKkB8KShbXlwvPyM6XSopKD86OihcZCsp fCl8KS8sCgoJLyogUHJlZmlsdGVycwoJICogMSkgVGhleSBhcmUgdXNlZnVsIHRv IGludHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChzZWUgYWpheC9qc29ucC5qcyBm b3IgYW4gZXhhbXBsZSkKCSAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6CgkgKiAgICAt IEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0CgkgKiAgICAtIEFGVEVSIHBh cmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmluZyBpZiBzLnByb2Nl c3NEYXRhIGlzIHRydWUpCgkgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlCgkgKiA0 KSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZAoJICogNSkgZXhl Y3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRI RU4gY29udGludWUgZG93biB0byAiKiIgaWYgbmVlZGVkCgkgKi8KCXByZWZpbHRl cnMgPSB7fSwKCgkvKiBUcmFuc3BvcnRzIGJpbmRpbmdzCgkgKiAxKSBrZXkgaXMg dGhlIGRhdGFUeXBlCgkgKiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4g YmUgdXNlZAoJICogMykgc2VsZWN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3Bv cnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8gIioiIGlmIG5lZWRlZAoJICovCgl0 cmFuc3BvcnRzID0ge30sCgoJLy8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBz ZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNv bXByZXNzaW9uCglhbGxUeXBlcyA9ICIqLyIuY29uY2F0KCIqIik7CgovLyAjODEz OCwgSUUgbWF5IHRocm93IGFuIGV4Y2VwdGlvbiB3aGVuIGFjY2Vzc2luZwovLyBh IGZpZWxkIGZyb20gd2luZG93LmxvY2F0aW9uIGlmIGRvY3VtZW50LmRvbWFpbiBo YXMgYmVlbiBzZXQKdHJ5IHsKCWFqYXhMb2NhdGlvbiA9IGxvY2F0aW9uLmhyZWY7 Cn0gY2F0Y2goIGUgKSB7CgkvLyBVc2UgdGhlIGhyZWYgYXR0cmlidXRlIG9mIGFu IEEgZWxlbWVudAoJLy8gc2luY2UgSUUgd2lsbCBtb2RpZnkgaXQgZ2l2ZW4gZG9j dW1lbnQubG9jYXRpb24KCWFqYXhMb2NhdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVs ZW1lbnQoICJhIiApOwoJYWpheExvY2F0aW9uLmhyZWYgPSAiIjsKCWFqYXhMb2Nh dGlvbiA9IGFqYXhMb2NhdGlvbi5ocmVmOwp9CgovLyBTZWdtZW50IGxvY2F0aW9u IGludG8gcGFydHMKYWpheExvY1BhcnRzID0gcnVybC5leGVjKCBhamF4TG9jYXRp b24udG9Mb3dlckNhc2UoKSApIHx8IFtdOwoKLy8gQmFzZSAiY29uc3RydWN0b3Ii IGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3Bv cnQKZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1 cmUgKSB7CgoJLy8gZGF0YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBk ZWZhdWx0cyB0byAiKiIKCXJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNz aW9uLCBmdW5jICkgewoKCQlpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24g IT09ICJzdHJpbmciICkgewoJCQlmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uOwoJ CQlkYXRhVHlwZUV4cHJlc3Npb24gPSAiKiI7CgkJfQoKCQl2YXIgZGF0YVR5cGUs CgkJCWkgPSAwLAoJCQlkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9M b3dlckNhc2UoKS5tYXRjaCggcm5vdHdoaXRlICkgfHwgW107CgoJCWlmICggalF1 ZXJ5LmlzRnVuY3Rpb24oIGZ1bmMgKSApIHsKCQkJLy8gRm9yIGVhY2ggZGF0YVR5 cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvbgoJCQl3aGlsZSAoIChkYXRhVHlw ZSA9IGRhdGFUeXBlc1tpKytdKSApIHsKCQkJCS8vIFByZXBlbmQgaWYgcmVxdWVz dGVkCgkJCQlpZiAoIGRhdGFUeXBlLmNoYXJBdCggMCApID09PSAiKyIgKSB7CgkJ CQkJZGF0YVR5cGUgPSBkYXRhVHlwZS5zbGljZSggMSApIHx8ICIqIjsKCQkJCQko c3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8 IFtdKS51bnNoaWZ0KCBmdW5jICk7CgoJCQkJLy8gT3RoZXJ3aXNlIGFwcGVuZAoJ CQkJfSBlbHNlIHsKCQkJCQkoc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0 dXJlWyBkYXRhVHlwZSBdIHx8IFtdKS5wdXNoKCBmdW5jICk7CgkJCQl9CgkJCX0K CQl9Cgl9Owp9CgovLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZp bHRlcnMgYW5kIHRyYW5zcG9ydHMKZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNP clRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25z LCBqcVhIUiApIHsKCgl2YXIgaW5zcGVjdGVkID0ge30sCgkJc2Vla2luZ1RyYW5z cG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFuc3BvcnRzICk7CgoJZnVuY3Rpb24g aW5zcGVjdCggZGF0YVR5cGUgKSB7CgkJdmFyIHNlbGVjdGVkOwoJCWluc3BlY3Rl ZFsgZGF0YVR5cGUgXSA9IHRydWU7CgkJalF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsg ZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9y eSApIHsKCQkJdmFyIGRhdGFUeXBlT3JUcmFuc3BvcnQgPSBwcmVmaWx0ZXJPckZh Y3RvcnkoIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTsKCQkJaWYg KCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gInN0cmluZyIgJiYgIXNl ZWtpbmdUcmFuc3BvcnQgJiYgIWluc3BlY3RlZFsgZGF0YVR5cGVPclRyYW5zcG9y dCBdICkgewoJCQkJb3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVP clRyYW5zcG9ydCApOwoJCQkJaW5zcGVjdCggZGF0YVR5cGVPclRyYW5zcG9ydCAp OwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9IGVsc2UgaWYgKCBzZWVraW5nVHJhbnNw b3J0ICkgewoJCQkJcmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5z cG9ydCApOwoJCQl9CgkJfSk7CgkJcmV0dXJuIHNlbGVjdGVkOwoJfQoKCXJldHVy biBpbnNwZWN0KCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdICkgfHwgIWluc3BlY3Rl ZFsgIioiIF0gJiYgaW5zcGVjdCggIioiICk7Cn0KCi8vIEEgc3BlY2lhbCBleHRl bmQgZm9yIGFqYXggb3B0aW9ucwovLyB0aGF0IHRha2VzICJmbGF0IiBvcHRpb25z IChub3QgdG8gYmUgZGVlcCBleHRlbmRlZCkKLy8gRml4ZXMgIzk4ODcKZnVuY3Rp b24gYWpheEV4dGVuZCggdGFyZ2V0LCBzcmMgKSB7Cgl2YXIgZGVlcCwga2V5LAoJ CWZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8 fCB7fTsKCglmb3IgKCBrZXkgaW4gc3JjICkgewoJCWlmICggc3JjWyBrZXkgXSAh PT0gdW5kZWZpbmVkICkgewoJCQkoIGZsYXRPcHRpb25zWyBrZXkgXSA/IHRhcmdl dCA6ICggZGVlcCB8fCAoZGVlcCA9IHt9KSApIClbIGtleSBdID0gc3JjWyBrZXkg XTsKCQl9Cgl9CglpZiAoIGRlZXAgKSB7CgkJalF1ZXJ5LmV4dGVuZCggdHJ1ZSwg dGFyZ2V0LCBkZWVwICk7Cgl9CgoJcmV0dXJuIHRhcmdldDsKfQoKLyogSGFuZGxl cyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OgogKiAtIGZpbmRzIHRoZSBy aWdodCBkYXRhVHlwZSAobWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5cGUgYW5k IGV4cGVjdGVkIGRhdGFUeXBlKQogKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRp bmcgcmVzcG9uc2UKICovCmZ1bmN0aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMoIHMs IGpxWEhSLCByZXNwb25zZXMgKSB7Cgl2YXIgZmlyc3REYXRhVHlwZSwgY3QsIGZp bmFsRGF0YVR5cGUsIHR5cGUsCgkJY29udGVudHMgPSBzLmNvbnRlbnRzLAoJCWRh dGFUeXBlcyA9IHMuZGF0YVR5cGVzOwoKCS8vIFJlbW92ZSBhdXRvIGRhdGFUeXBl IGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzCgl3aGlsZSAoIGRh dGFUeXBlc1sgMCBdID09PSAiKiIgKSB7CgkJZGF0YVR5cGVzLnNoaWZ0KCk7CgkJ aWYgKCBjdCA9PT0gdW5kZWZpbmVkICkgewoJCQljdCA9IHMubWltZVR5cGUgfHwg anFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpOwoJCX0KCX0K CgkvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50 LXR5cGUKCWlmICggY3QgKSB7CgkJZm9yICggdHlwZSBpbiBjb250ZW50cyApIHsK CQkJaWYgKCBjb250ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVz dCggY3QgKSApIHsKCQkJCWRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7CgkJCQli cmVhazsKCQkJfQoJCX0KCX0KCgkvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBh IHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGUKCWlmICggZGF0YVR5 cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkgewoJCWZpbmFsRGF0YVR5cGUgPSBkYXRh VHlwZXNbIDAgXTsKCX0gZWxzZSB7CgkJLy8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFU eXBlcwoJCWZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkgewoJCQlpZiAoICFkYXRh VHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyAiICIgKyBkYXRhVHlw ZXNbMF0gXSApIHsKCQkJCWZpbmFsRGF0YVR5cGUgPSB0eXBlOwoJCQkJYnJlYWs7 CgkJCX0KCQkJaWYgKCAhZmlyc3REYXRhVHlwZSApIHsKCQkJCWZpcnN0RGF0YVR5 cGUgPSB0eXBlOwoJCQl9CgkJfQoJCS8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZQoJ CWZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7 Cgl9CgoJLy8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZQoJLy8gV2UgYWRkIHRoZSBk YXRhVHlwZSB0byB0aGUgbGlzdCBpZiBuZWVkZWQKCS8vIGFuZCByZXR1cm4gdGhl IGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UKCWlmICggZmluYWxEYXRhVHlwZSApIHsK CQlpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkgewoJCQlk YXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApOwoJCX0KCQlyZXR1cm4g cmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07Cgl9Cn0KCi8qIENoYWluIGNvbnZl cnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9u c2UKICogQWxzbyBzZXRzIHRoZSByZXNwb25zZVhYWCBmaWVsZHMgb24gdGhlIGpx WEhSIGluc3RhbmNlCiAqLwpmdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9u c2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKSB7Cgl2YXIgY29udjIsIGN1cnJlbnQsIGNv bnYsIHRtcCwgcHJldiwKCQljb252ZXJ0ZXJzID0ge30sCgkJLy8gV29yayB3aXRo IGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBp dCBmb3IgY29udmVyc2lvbgoJCWRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNl KCk7CgoJLy8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBr ZXlzCglpZiAoIGRhdGFUeXBlc1sgMSBdICkgewoJCWZvciAoIGNvbnYgaW4gcy5j b252ZXJ0ZXJzICkgewoJCQljb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkg XSA9IHMuY29udmVydGVyc1sgY29udiBdOwoJCX0KCX0KCgljdXJyZW50ID0gZGF0 YVR5cGVzLnNoaWZ0KCk7CgoJLy8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwg ZGF0YVR5cGUKCXdoaWxlICggY3VycmVudCApIHsKCgkJaWYgKCBzLnJlc3BvbnNl RmllbGRzWyBjdXJyZW50IF0gKSB7CgkJCWpxWEhSWyBzLnJlc3BvbnNlRmllbGRz WyBjdXJyZW50IF0gXSA9IHJlc3BvbnNlOwoJCX0KCgkJLy8gQXBwbHkgdGhlIGRh dGFGaWx0ZXIgaWYgcHJvdmlkZWQKCQlpZiAoICFwcmV2ICYmIGlzU3VjY2VzcyAm JiBzLmRhdGFGaWx0ZXIgKSB7CgkJCXJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCBy ZXNwb25zZSwgcy5kYXRhVHlwZSApOwoJCX0KCgkJcHJldiA9IGN1cnJlbnQ7CgkJ Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpOwoKCQlpZiAoIGN1cnJlbnQgKSB7 CgoJCQkvLyBUaGVyZSdzIG9ubHkgd29yayB0byBkbyBpZiBjdXJyZW50IGRhdGFU eXBlIGlzIG5vbi1hdXRvCgkJCWlmICggY3VycmVudCA9PT0gIioiICkgewoKCQkJ CWN1cnJlbnQgPSBwcmV2OwoKCQkJLy8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2 IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudAoJ CQl9IGVsc2UgaWYgKCBwcmV2ICE9PSAiKiIgJiYgcHJldiAhPT0gY3VycmVudCAp IHsKCgkJCQkvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRlcgoJCQkJY29udiA9IGNv bnZlcnRlcnNbIHByZXYgKyAiICIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sg IiogIiArIGN1cnJlbnQgXTsKCgkJCQkvLyBJZiBub25lIGZvdW5kLCBzZWVrIGEg cGFpcgoJCQkJaWYgKCAhY29udiApIHsKCQkJCQlmb3IgKCBjb252MiBpbiBjb252 ZXJ0ZXJzICkgewoKCQkJCQkJLy8gSWYgY29udjIgb3V0cHV0cyBjdXJyZW50CgkJ CQkJCXRtcCA9IGNvbnYyLnNwbGl0KCAiICIgKTsKCQkJCQkJaWYgKCB0bXBbIDEg XSA9PT0gY3VycmVudCApIHsKCgkJCQkJCQkvLyBJZiBwcmV2IGNhbiBiZSBjb252 ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXQKCQkJCQkJCWNvbnYgPSBjb252ZXJ0ZXJz WyBwcmV2ICsgIiAiICsgdG1wWyAwIF0gXSB8fAoJCQkJCQkJCWNvbnZlcnRlcnNb ICIqICIgKyB0bXBbIDAgXSBdOwoJCQkJCQkJaWYgKCBjb252ICkgewoJCQkJCQkJ CS8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnMKCQkJCQkJCQlpZiAo IGNvbnYgPT09IHRydWUgKSB7CgkJCQkJCQkJCWNvbnYgPSBjb252ZXJ0ZXJzWyBj b252MiBdOwoKCQkJCQkJCQkvLyBPdGhlcndpc2UsIGluc2VydCB0aGUgaW50ZXJt ZWRpYXRlIGRhdGFUeXBlCgkJCQkJCQkJfSBlbHNlIGlmICggY29udmVydGVyc1sg Y29udjIgXSAhPT0gdHJ1ZSApIHsKCQkJCQkJCQkJY3VycmVudCA9IHRtcFsgMCBd OwoJCQkJCQkJCQlkYXRhVHlwZXMudW5zaGlmdCggdG1wWyAxIF0gKTsKCQkJCQkJ CQl9CgkJCQkJCQkJYnJlYWs7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQl9 CgoJCQkJLy8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2Up CgkJCQlpZiAoIGNvbnYgIT09IHRydWUgKSB7CgoJCQkJCS8vIFVubGVzcyBlcnJv cnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW0K CQkJCQlpZiAoIGNvbnYgJiYgc1sgInRocm93cyIgXSApIHsKCQkJCQkJcmVzcG9u c2UgPSBjb252KCByZXNwb25zZSApOwoJCQkJCX0gZWxzZSB7CgkJCQkJCXRyeSB7 CgkJCQkJCQlyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7CgkJCQkJCX0gY2F0 Y2ggKCBlICkgewoJCQkJCQkJcmV0dXJuIHsgc3RhdGU6ICJwYXJzZXJlcnJvciIs IGVycm9yOiBjb252ID8gZSA6ICJObyBjb252ZXJzaW9uIGZyb20gIiArIHByZXYg KyAiIHRvICIgKyBjdXJyZW50IH07CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0K CQl9Cgl9CgoJcmV0dXJuIHsgc3RhdGU6ICJzdWNjZXNzIiwgZGF0YTogcmVzcG9u c2UgfTsKfQoKalF1ZXJ5LmV4dGVuZCh7CgoJLy8gQ291bnRlciBmb3IgaG9sZGlu ZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzCglhY3RpdmU6IDAsCgoJLy8g TGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdAoJbGFz dE1vZGlmaWVkOiB7fSwKCWV0YWc6IHt9LAoKCWFqYXhTZXR0aW5nczogewoJCXVy bDogYWpheExvY2F0aW9uLAoJCXR5cGU6ICJHRVQiLAoJCWlzTG9jYWw6IHJsb2Nh bFByb3RvY29sLnRlc3QoIGFqYXhMb2NQYXJ0c1sgMSBdICksCgkJZ2xvYmFsOiB0 cnVlLAoJCXByb2Nlc3NEYXRhOiB0cnVlLAoJCWFzeW5jOiB0cnVlLAoJCWNvbnRl bnRUeXBlOiAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFy c2V0PVVURi04IiwKCQkvKgoJCXRpbWVvdXQ6IDAsCgkJZGF0YTogbnVsbCwKCQlk YXRhVHlwZTogbnVsbCwKCQl1c2VybmFtZTogbnVsbCwKCQlwYXNzd29yZDogbnVs bCwKCQljYWNoZTogbnVsbCwKCQl0aHJvd3M6IGZhbHNlLAoJCXRyYWRpdGlvbmFs OiBmYWxzZSwKCQloZWFkZXJzOiB7fSwKCQkqLwoKCQlhY2NlcHRzOiB7CgkJCSIq IjogYWxsVHlwZXMsCgkJCXRleHQ6ICJ0ZXh0L3BsYWluIiwKCQkJaHRtbDogInRl eHQvaHRtbCIsCgkJCXhtbDogImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLAoJ CQlqc29uOiAiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IgoJCX0s CgoJCWNvbnRlbnRzOiB7CgkJCXhtbDogL3htbC8sCgkJCWh0bWw6IC9odG1sLywK CQkJanNvbjogL2pzb24vCgkJfSwKCgkJcmVzcG9uc2VGaWVsZHM6IHsKCQkJeG1s OiAicmVzcG9uc2VYTUwiLAoJCQl0ZXh0OiAicmVzcG9uc2VUZXh0IiwKCQkJanNv bjogInJlc3BvbnNlSlNPTiIKCQl9LAoKCQkvLyBEYXRhIGNvbnZlcnRlcnMKCQkv LyBLZXlzIHNlcGFyYXRlIHNvdXJjZSAob3IgY2F0Y2hhbGwgIioiKSBhbmQgZGVz dGluYXRpb24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZQoJCWNvbnZlcnRlcnM6 IHsKCgkJCS8vIENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dAoJCQkiKiB0ZXh0Ijog U3RyaW5nLAoKCQkJLy8gVGV4dCB0byBodG1sICh0cnVlID0gbm8gdHJhbnNmb3Jt YXRpb24pCgkJCSJ0ZXh0IGh0bWwiOiB0cnVlLAoKCQkJLy8gRXZhbHVhdGUgdGV4 dCBhcyBhIGpzb24gZXhwcmVzc2lvbgoJCQkidGV4dCBqc29uIjogalF1ZXJ5LnBh cnNlSlNPTiwKCgkJCS8vIFBhcnNlIHRleHQgYXMgeG1sCgkJCSJ0ZXh0IHhtbCI6 IGpRdWVyeS5wYXJzZVhNTAoJCX0sCgoJCS8vIEZvciBvcHRpb25zIHRoYXQgc2hv dWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6CgkJLy8geW91IGNhbiBhZGQgeW91ciBv d24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZgoJCS8vIGFuZCB3aGVuIHlvdSBjcmVh dGUgb25lIHRoYXQgc2hvdWxkbid0IGJlCgkJLy8gZGVlcCBleHRlbmRlZCAoc2Vl IGFqYXhFeHRlbmQpCgkJZmxhdE9wdGlvbnM6IHsKCQkJdXJsOiB0cnVlLAoJCQlj b250ZXh0OiB0cnVlCgkJfQoJfSwKCgkvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2Vk IHNldHRpbmdzIG9iamVjdCBpbnRvIHRhcmdldAoJLy8gd2l0aCBib3RoIGFqYXhT ZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLgoJLy8gSWYgdGFyZ2V0IGlzIG9t aXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy4KCWFqYXhTZXR1cDogZnVu Y3Rpb24oIHRhcmdldCwgc2V0dGluZ3MgKSB7CgkJcmV0dXJuIHNldHRpbmdzID8K CgkJCS8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0CgkJCWFqYXhFeHRlbmQo IGFqYXhFeHRlbmQoIHRhcmdldCwgalF1ZXJ5LmFqYXhTZXR0aW5ncyApLCBzZXR0 aW5ncyApIDoKCgkJCS8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3MKCQkJYWpheEV4 dGVuZCggalF1ZXJ5LmFqYXhTZXR0aW5ncywgdGFyZ2V0ICk7Cgl9LAoKCWFqYXhQ cmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVy cyApLAoJYWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRz KCB0cmFuc3BvcnRzICksCgoJLy8gTWFpbiBtZXRob2QKCWFqYXg6IGZ1bmN0aW9u KCB1cmwsIG9wdGlvbnMgKSB7CgoJCS8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNp bXVsYXRlIHByZS0xLjUgc2lnbmF0dXJlCgkJaWYgKCB0eXBlb2YgdXJsID09PSAi b2JqZWN0IiApIHsKCQkJb3B0aW9ucyA9IHVybDsKCQkJdXJsID0gdW5kZWZpbmVk OwoJCX0KCgkJLy8gRm9yY2Ugb3B0aW9ucyB0byBiZSBhbiBvYmplY3QKCQlvcHRp b25zID0gb3B0aW9ucyB8fCB7fTsKCgkJdmFyIC8vIENyb3NzLWRvbWFpbiBkZXRl Y3Rpb24gdmFycwoJCQlwYXJ0cywKCQkJLy8gTG9vcCB2YXJpYWJsZQoJCQlpLAoJ CQkvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtCgkJCWNhY2hlVVJMLAoJ CQkvLyBSZXNwb25zZSBoZWFkZXJzIGFzIHN0cmluZwoJCQlyZXNwb25zZUhlYWRl cnNTdHJpbmcsCgkJCS8vIHRpbWVvdXQgaGFuZGxlCgkJCXRpbWVvdXRUaW1lciwK CgkJCS8vIFRvIGtub3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0 Y2hlZAoJCQlmaXJlR2xvYmFscywKCgkJCXRyYW5zcG9ydCwKCQkJLy8gUmVzcG9u c2UgaGVhZGVycwoJCQlyZXNwb25zZUhlYWRlcnMsCgkJCS8vIENyZWF0ZSB0aGUg ZmluYWwgb3B0aW9ucyBvYmplY3QKCQkJcyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9 LCBvcHRpb25zICksCgkJCS8vIENhbGxiYWNrcyBjb250ZXh0CgkJCWNhbGxiYWNr Q29udGV4dCA9IHMuY29udGV4dCB8fCBzLAoJCQkvLyBDb250ZXh0IGZvciBnbG9i YWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBub2Rl IG9yIGpRdWVyeSBjb2xsZWN0aW9uCgkJCWdsb2JhbEV2ZW50Q29udGV4dCA9IHMu Y29udGV4dCAmJiAoIGNhbGxiYWNrQ29udGV4dC5ub2RlVHlwZSB8fCBjYWxsYmFj a0NvbnRleHQuanF1ZXJ5ICkgPwoJCQkJalF1ZXJ5KCBjYWxsYmFja0NvbnRleHQg KSA6CgkJCQlqUXVlcnkuZXZlbnQsCgkJCS8vIERlZmVycmVkcwoJCQlkZWZlcnJl ZCA9IGpRdWVyeS5EZWZlcnJlZCgpLAoJCQljb21wbGV0ZURlZmVycmVkID0galF1 ZXJ5LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwKCQkJLy8gU3RhdHVzLWRlcGVu ZGVudCBjYWxsYmFja3MKCQkJc3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7 fSwKCQkJLy8gSGVhZGVycyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSkKCQkJ cmVxdWVzdEhlYWRlcnMgPSB7fSwKCQkJcmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9 LAoJCQkvLyBUaGUganFYSFIgc3RhdGUKCQkJc3RhdGUgPSAwLAoJCQkvLyBEZWZh dWx0IGFib3J0IG1lc3NhZ2UKCQkJc3RyQWJvcnQgPSAiY2FuY2VsZWQiLAoJCQkv LyBGYWtlIHhocgoJCQlqcVhIUiA9IHsKCQkJCXJlYWR5U3RhdGU6IDAsCgoJCQkJ Ly8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZAoJCQkJZ2V0UmVz cG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7CgkJCQkJdmFyIG1hdGNoOwoJ CQkJCWlmICggc3RhdGUgPT09IDIgKSB7CgkJCQkJCWlmICggIXJlc3BvbnNlSGVh ZGVycyApIHsKCQkJCQkJCXJlc3BvbnNlSGVhZGVycyA9IHt9OwoJCQkJCQkJd2hp bGUgKCAobWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJp bmcgKSkgKSB7CgkJCQkJCQkJcmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsxXS50b0xv d2VyQ2FzZSgpIF0gPSBtYXRjaFsgMiBdOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJ CW1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSBdOwoJ CQkJCX0KCQkJCQlyZXR1cm4gbWF0Y2ggPT0gbnVsbCA/IG51bGwgOiBtYXRjaDsK CQkJCX0sCgoJCQkJLy8gUmF3IHN0cmluZwoJCQkJZ2V0QWxsUmVzcG9uc2VIZWFk ZXJzOiBmdW5jdGlvbigpIHsKCQkJCQlyZXR1cm4gc3RhdGUgPT09IDIgPyByZXNw b25zZUhlYWRlcnNTdHJpbmcgOiBudWxsOwoJCQkJfSwKCgkJCQkvLyBDYWNoZXMg dGhlIGhlYWRlcgoJCQkJc2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUs IHZhbHVlICkgewoJCQkJCXZhciBsbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsK CQkJCQlpZiAoICFzdGF0ZSApIHsKCQkJCQkJbmFtZSA9IHJlcXVlc3RIZWFkZXJz TmFtZXNbIGxuYW1lIF0gPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBsbmFtZSBdIHx8 IG5hbWU7CgkJCQkJCXJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTsKCQkJ CQl9CgkJCQkJcmV0dXJuIHRoaXM7CgkJCQl9LAoKCQkJCS8vIE92ZXJyaWRlcyBy ZXNwb25zZSBjb250ZW50LXR5cGUgaGVhZGVyCgkJCQlvdmVycmlkZU1pbWVUeXBl OiBmdW5jdGlvbiggdHlwZSApIHsKCQkJCQlpZiAoICFzdGF0ZSApIHsKCQkJCQkJ cy5taW1lVHlwZSA9IHR5cGU7CgkJCQkJfQoJCQkJCXJldHVybiB0aGlzOwoJCQkJ fSwKCgkJCQkvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcwoJCQkJc3RhdHVz Q29kZTogZnVuY3Rpb24oIG1hcCApIHsKCQkJCQl2YXIgY29kZTsKCQkJCQlpZiAo IG1hcCApIHsKCQkJCQkJaWYgKCBzdGF0ZSA8IDIgKSB7CgkJCQkJCQlmb3IgKCBj b2RlIGluIG1hcCApIHsKCQkJCQkJCQkvLyBMYXp5LWFkZCB0aGUgbmV3IGNhbGxi YWNrIGluIGEgd2F5IHRoYXQgcHJlc2VydmVzIG9sZCBvbmVzCgkJCQkJCQkJc3Rh dHVzQ29kZVsgY29kZSBdID0gWyBzdGF0dXNDb2RlWyBjb2RlIF0sIG1hcFsgY29k ZSBdIF07CgkJCQkJCQl9CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkvLyBFeGVjdXRl IHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3MKCQkJCQkJCWpxWEhSLmFsd2F5cygg bWFwWyBqcVhIUi5zdGF0dXMgXSApOwoJCQkJCQl9CgkJCQkJfQoJCQkJCXJldHVy biB0aGlzOwoJCQkJfSwKCgkJCQkvLyBDYW5jZWwgdGhlIHJlcXVlc3QKCQkJCWFi b3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCApIHsKCQkJCQl2YXIgZmluYWxUZXh0 ID0gc3RhdHVzVGV4dCB8fCBzdHJBYm9ydDsKCQkJCQlpZiAoIHRyYW5zcG9ydCAp IHsKCQkJCQkJdHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTsKCQkJCQl9CgkJ CQkJZG9uZSggMCwgZmluYWxUZXh0ICk7CgkJCQkJcmV0dXJuIHRoaXM7CgkJCQl9 CgkJCX07CgoJCS8vIEF0dGFjaCBkZWZlcnJlZHMKCQlkZWZlcnJlZC5wcm9taXNl KCBqcVhIUiApLmNvbXBsZXRlID0gY29tcGxldGVEZWZlcnJlZC5hZGQ7CgkJanFY SFIuc3VjY2VzcyA9IGpxWEhSLmRvbmU7CgkJanFYSFIuZXJyb3IgPSBqcVhIUi5m YWlsOwoKCQkvLyBSZW1vdmUgaGFzaCBjaGFyYWN0ZXIgKCM3NTMxOiBhbmQgc3Ry aW5nIHByb21vdGlvbikKCQkvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVk ICgjNTg2NjogSUU3IGlzc3VlIHdpdGggcHJvdG9jb2wtbGVzcyB1cmxzKQoJCS8v IEhhbmRsZSBmYWxzeSB1cmwgaW4gdGhlIHNldHRpbmdzIG9iamVjdCAoIzEwMDkz OiBjb25zaXN0ZW5jeSB3aXRoIG9sZCBzaWduYXR1cmUpCgkJLy8gV2UgYWxzbyB1 c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlCgkJcy51cmwgPSAoICgg dXJsIHx8IHMudXJsIHx8IGFqYXhMb2NhdGlvbiApICsgIiIgKS5yZXBsYWNlKCBy aGFzaCwgIiIgKS5yZXBsYWNlKCBycHJvdG9jb2wsIGFqYXhMb2NQYXJ0c1sgMSBd ICsgIi8vIiApOwoKCQkvLyBBbGlhcyBtZXRob2Qgb3B0aW9uIHRvIHR5cGUgYXMg cGVyIHRpY2tldCAjMTIwMDQKCQlzLnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8fCBv cHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50eXBlOwoKCQkvLyBFeHRyYWN0 IGRhdGFUeXBlcyBsaXN0CgkJcy5kYXRhVHlwZXMgPSBqUXVlcnkudHJpbSggcy5k YXRhVHlwZSB8fCAiKiIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90d2hpdGUg KSB8fCBbICIiIF07CgoJCS8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4g b3JkZXIgd2hlbiB3ZSBoYXZlIGEgcHJvdG9jb2w6aG9zdDpwb3J0IG1pc21hdGNo CgkJaWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7CgkJCXBhcnRzID0gcnVy bC5leGVjKCBzLnVybC50b0xvd2VyQ2FzZSgpICk7CgkJCXMuY3Jvc3NEb21haW4g PSAhISggcGFydHMgJiYKCQkJCSggcGFydHNbIDEgXSAhPT0gYWpheExvY1BhcnRz WyAxIF0gfHwgcGFydHNbIDIgXSAhPT0gYWpheExvY1BhcnRzWyAyIF0gfHwKCQkJ CQkoIHBhcnRzWyAzIF0gfHwgKCBwYXJ0c1sgMSBdID09PSAiaHR0cDoiID8gIjgw IiA6ICI0NDMiICkgKSAhPT0KCQkJCQkJKCBhamF4TG9jUGFydHNbIDMgXSB8fCAo IGFqYXhMb2NQYXJ0c1sgMSBdID09PSAiaHR0cDoiID8gIjgwIiA6ICI0NDMiICkg KSApCgkJCSk7CgkJfQoKCQkvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkg YSBzdHJpbmcKCQlpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVv ZiBzLmRhdGEgIT09ICJzdHJpbmciICkgewoJCQlzLmRhdGEgPSBqUXVlcnkucGFy YW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApOwoJCX0KCgkJLy8gQXBwbHkgcHJl ZmlsdGVycwoJCWluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0 ZXJzLCBzLCBvcHRpb25zLCBqcVhIUiApOwoKCQkvLyBJZiByZXF1ZXN0IHdhcyBh Ym9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZQoJCWlmICggc3Rh dGUgPT09IDIgKSB7CgkJCXJldHVybiBqcVhIUjsKCQl9CgoJCS8vIFdlIGNhbiBm aXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvCgkJZmlyZUds b2JhbHMgPSBzLmdsb2JhbDsKCgkJLy8gV2F0Y2ggZm9yIGEgbmV3IHNldCBvZiBy ZXF1ZXN0cwoJCWlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09 PSAwICkgewoJCQlqUXVlcnkuZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iik7CgkJ fQoKCQkvLyBVcHBlcmNhc2UgdGhlIHR5cGUKCQlzLnR5cGUgPSBzLnR5cGUudG9V cHBlckNhc2UoKTsKCgkJLy8gRGV0ZXJtaW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRl bnQKCQlzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTsK CgkJLy8gU2F2ZSB0aGUgVVJMIGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGggdGhl IElmLU1vZGlmaWVkLVNpbmNlCgkJLy8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVh ZGVyIGxhdGVyIG9uCgkJY2FjaGVVUkwgPSBzLnVybDsKCgkJLy8gTW9yZSBvcHRp b25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnQKCQlpZiAo ICFzLmhhc0NvbnRlbnQgKSB7CgoJCQkvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSwg YXBwZW5kIGRhdGEgdG8gdXJsCgkJCWlmICggcy5kYXRhICkgewoJCQkJY2FjaGVV UkwgPSAoIHMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyAiJiIg OiAiPyIgKSArIHMuZGF0YSApOwoJCQkJLy8gIzk2ODI6IHJlbW92ZSBkYXRhIHNv IHRoYXQgaXQncyBub3QgdXNlZCBpbiBhbiBldmVudHVhbCByZXRyeQoJCQkJZGVs ZXRlIHMuZGF0YTsKCQkJfQoKCQkJLy8gQWRkIGFudGktY2FjaGUgaW4gdXJsIGlm IG5lZWRlZAoJCQlpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkgewoJCQkJcy51cmwg PSBydHMudGVzdCggY2FjaGVVUkwgKSA/CgoJCQkJCS8vIElmIHRoZXJlIGlzIGFs cmVhZHkgYSAnXycgcGFyYW1ldGVyLCBzZXQgaXRzIHZhbHVlCgkJCQkJY2FjaGVV UkwucmVwbGFjZSggcnRzLCAiJDFfPSIgKyBub25jZSsrICkgOgoKCQkJCQkvLyBP dGhlcndpc2UgYWRkIG9uZSB0byB0aGUgZW5kCgkJCQkJY2FjaGVVUkwgKyAoIHJx dWVyeS50ZXN0KCBjYWNoZVVSTCApID8gIiYiIDogIj8iICkgKyAiXz0iICsgbm9u Y2UrKzsKCQkJfQoJCX0KCgkJLy8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBh bmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9k ZS4KCQlpZiAoIHMuaWZNb2RpZmllZCApIHsKCQkJaWYgKCBqUXVlcnkubGFzdE1v ZGlmaWVkWyBjYWNoZVVSTCBdICkgewoJCQkJanFYSFIuc2V0UmVxdWVzdEhlYWRl ciggIklmLU1vZGlmaWVkLVNpbmNlIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2Fj aGVVUkwgXSApOwoJCQl9CgkJCWlmICggalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0g KSB7CgkJCQlqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTm9uZS1NYXRjaCIs IGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7CgkJCX0KCQl9CgoJCS8vIFNldCB0 aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudAoJCWlmICgg cy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxz ZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkgewoJCQlqcVhIUi5zZXRSZXF1ZXN0 SGVhZGVyKCAiQ29udGVudC1UeXBlIiwgcy5jb250ZW50VHlwZSApOwoJCX0KCgkJ Ly8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5k aW5nIG9uIHRoZSBkYXRhVHlwZQoJCWpxWEhSLnNldFJlcXVlc3RIZWFkZXIoCgkJ CSJBY2NlcHQiLAoJCQlzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5k YXRhVHlwZXNbMF0gXSA/CgkJCQlzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWzBdIF0g KyAoIHMuZGF0YVR5cGVzWyAwIF0gIT09ICIqIiA/ICIsICIgKyBhbGxUeXBlcyAr ICI7IHE9MC4wMSIgOiAiIiApIDoKCQkJCXMuYWNjZXB0c1sgIioiIF0KCQkpOwoK CQkvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb24KCQlmb3IgKCBpIGluIHMuaGVh ZGVycyApIHsKCQkJanFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJz WyBpIF0gKTsKCQl9CgoJCS8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBl cyBhbmQgZWFybHkgYWJvcnQKCQlpZiAoIHMuYmVmb3JlU2VuZCAmJiAoIHMuYmVm b3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZh bHNlIHx8IHN0YXRlID09PSAyICkgKSB7CgkJCS8vIEFib3J0IGlmIG5vdCBkb25l IGFscmVhZHkgYW5kIHJldHVybgoJCQlyZXR1cm4ganFYSFIuYWJvcnQoKTsKCQl9 CgoJCS8vIGFib3J0aW5nIGlzIG5vIGxvbmdlciBhIGNhbmNlbGxhdGlvbgoJCXN0 ckFib3J0ID0gImFib3J0IjsKCgkJLy8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVm ZXJyZWRzCgkJZm9yICggaSBpbiB7IHN1Y2Nlc3M6IDEsIGVycm9yOiAxLCBjb21w bGV0ZTogMSB9ICkgewoJCQlqcVhIUlsgaSBdKCBzWyBpIF0gKTsKCQl9CgoJCS8v IEdldCB0cmFuc3BvcnQKCQl0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09y VHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTsKCgkJ Ly8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0CgkJaWYgKCAhdHJhbnNw b3J0ICkgewoJCQlkb25lKCAtMSwgIk5vIFRyYW5zcG9ydCIgKTsKCQl9IGVsc2Ug ewoJCQlqcVhIUi5yZWFkeVN0YXRlID0gMTsKCgkJCS8vIFNlbmQgZ2xvYmFsIGV2 ZW50CgkJCWlmICggZmlyZUdsb2JhbHMgKSB7CgkJCQlnbG9iYWxFdmVudENvbnRl eHQudHJpZ2dlciggImFqYXhTZW5kIiwgWyBqcVhIUiwgcyBdICk7CgkJCX0KCQkJ Ly8gVGltZW91dAoJCQlpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHsK CQkJCXRpbWVvdXRUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CgkJCQkJ anFYSFIuYWJvcnQoInRpbWVvdXQiKTsKCQkJCX0sIHMudGltZW91dCApOwoJCQl9 CgoJCQl0cnkgewoJCQkJc3RhdGUgPSAxOwoJCQkJdHJhbnNwb3J0LnNlbmQoIHJl cXVlc3RIZWFkZXJzLCBkb25lICk7CgkJCX0gY2F0Y2ggKCBlICkgewoJCQkJLy8g UHJvcGFnYXRlIGV4Y2VwdGlvbiBhcyBlcnJvciBpZiBub3QgZG9uZQoJCQkJaWYg KCBzdGF0ZSA8IDIgKSB7CgkJCQkJZG9uZSggLTEsIGUgKTsKCQkJCS8vIFNpbXBs eSByZXRocm93IG90aGVyd2lzZQoJCQkJfSBlbHNlIHsKCQkJCQl0aHJvdyBlOwoJ CQkJfQoJCQl9CgkJfQoKCQkvLyBDYWxsYmFjayBmb3Igd2hlbiBldmVyeXRoaW5n IGlzIGRvbmUKCQlmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1Rl eHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHsKCQkJdmFyIGlzU3VjY2Vzcywgc3Vj Y2VzcywgZXJyb3IsIHJlc3BvbnNlLCBtb2RpZmllZCwKCQkJCXN0YXR1c1RleHQg PSBuYXRpdmVTdGF0dXNUZXh0OwoKCQkJLy8gQ2FsbGVkIG9uY2UKCQkJaWYgKCBz dGF0ZSA9PT0gMiApIHsKCQkJCXJldHVybjsKCQkJfQoKCQkJLy8gU3RhdGUgaXMg ImRvbmUiIG5vdwoJCQlzdGF0ZSA9IDI7CgoJCQkvLyBDbGVhciB0aW1lb3V0IGlm IGl0IGV4aXN0cwoJCQlpZiAoIHRpbWVvdXRUaW1lciApIHsKCQkJCWNsZWFyVGlt ZW91dCggdGltZW91dFRpbWVyICk7CgkJCX0KCgkJCS8vIERlcmVmZXJlbmNlIHRy YW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uCgkJCS8vIChubyBt YXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpCgkJ CXRyYW5zcG9ydCA9IHVuZGVmaW5lZDsKCgkJCS8vIENhY2hlIHJlc3BvbnNlIGhl YWRlcnMKCQkJcmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCAiIjsK CgkJCS8vIFNldCByZWFkeVN0YXRlCgkJCWpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0 dXMgPiAwID8gNCA6IDA7CgoJCQkvLyBEZXRlcm1pbmUgaWYgc3VjY2Vzc2Z1bAoJ CQlpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBz dGF0dXMgPT09IDMwNDsKCgkJCS8vIEdldCByZXNwb25zZSBkYXRhCgkJCWlmICgg cmVzcG9uc2VzICkgewoJCQkJcmVzcG9uc2UgPSBhamF4SGFuZGxlUmVzcG9uc2Vz KCBzLCBqcVhIUiwgcmVzcG9uc2VzICk7CgkJCX0KCgkJCS8vIENvbnZlcnQgbm8g bWF0dGVyIHdoYXQgKHRoYXQgd2F5IHJlc3BvbnNlWFhYIGZpZWxkcyBhcmUgYWx3 YXlzIHNldCkKCQkJcmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2Us IGpxWEhSLCBpc1N1Y2Nlc3MgKTsKCgkJCS8vIElmIHN1Y2Nlc3NmdWwsIGhhbmRs ZSB0eXBlIGNoYWluaW5nCgkJCWlmICggaXNTdWNjZXNzICkgewoKCQkJCS8vIFNl dCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVh ZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuCgkJCQlpZiAoIHMuaWZNb2RpZmll ZCApIHsKCQkJCQltb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCJM YXN0LU1vZGlmaWVkIik7CgkJCQkJaWYgKCBtb2RpZmllZCApIHsKCQkJCQkJalF1 ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSA9IG1vZGlmaWVkOwoJCQkJCX0K CQkJCQltb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCJldGFnIik7 CgkJCQkJaWYgKCBtb2RpZmllZCApIHsKCQkJCQkJalF1ZXJ5LmV0YWdbIGNhY2hl VVJMIF0gPSBtb2RpZmllZDsKCQkJCQl9CgkJCQl9CgoJCQkJLy8gaWYgbm8gY29u dGVudAoJCQkJaWYgKCBzdGF0dXMgPT09IDIwNCB8fCBzLnR5cGUgPT09ICJIRUFE IiApIHsKCQkJCQlzdGF0dXNUZXh0ID0gIm5vY29udGVudCI7CgoJCQkJLy8gaWYg bm90IG1vZGlmaWVkCgkJCQl9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDMwNCApIHsK CQkJCQlzdGF0dXNUZXh0ID0gIm5vdG1vZGlmaWVkIjsKCgkJCQkvLyBJZiB3ZSBo YXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXQKCQkJCX0gZWxzZSB7CgkJCQkJc3Rh dHVzVGV4dCA9IHJlc3BvbnNlLnN0YXRlOwoJCQkJCXN1Y2Nlc3MgPSByZXNwb25z ZS5kYXRhOwoJCQkJCWVycm9yID0gcmVzcG9uc2UuZXJyb3I7CgkJCQkJaXNTdWNj ZXNzID0gIWVycm9yOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJLy8gV2UgZXh0cmFj dCBlcnJvciBmcm9tIHN0YXR1c1RleHQKCQkJCS8vIHRoZW4gbm9ybWFsaXplIHN0 YXR1c1RleHQgYW5kIHN0YXR1cyBmb3Igbm9uLWFib3J0cwoJCQkJZXJyb3IgPSBz dGF0dXNUZXh0OwoJCQkJaWYgKCBzdGF0dXMgfHwgIXN0YXR1c1RleHQgKSB7CgkJ CQkJc3RhdHVzVGV4dCA9ICJlcnJvciI7CgkJCQkJaWYgKCBzdGF0dXMgPCAwICkg ewoJCQkJCQlzdGF0dXMgPSAwOwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJLy8gU2V0 IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3QKCQkJanFYSFIuc3RhdHVzID0g c3RhdHVzOwoJCQlqcVhIUi5zdGF0dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNUZXh0 IHx8IHN0YXR1c1RleHQgKSArICIiOwoKCQkJLy8gU3VjY2Vzcy9FcnJvcgoJCQlp ZiAoIGlzU3VjY2VzcyApIHsKCQkJCWRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxs YmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApOwoJ CQl9IGVsc2UgewoJCQkJZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250 ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7CgkJCX0KCgkJCS8v IFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCgkJCWpxWEhSLnN0YXR1c0NvZGUo IHN0YXR1c0NvZGUgKTsKCQkJc3RhdHVzQ29kZSA9IHVuZGVmaW5lZDsKCgkJCWlm ICggZmlyZUdsb2JhbHMgKSB7CgkJCQlnbG9iYWxFdmVudENvbnRleHQudHJpZ2dl ciggaXNTdWNjZXNzID8gImFqYXhTdWNjZXNzIiA6ICJhamF4RXJyb3IiLAoJCQkJ CVsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7CgkJ CX0KCgkJCS8vIENvbXBsZXRlCgkJCWNvbXBsZXRlRGVmZXJyZWQuZmlyZVdpdGgo IGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7CgoJCQlp ZiAoIGZpcmVHbG9iYWxzICkgewoJCQkJZ2xvYmFsRXZlbnRDb250ZXh0LnRyaWdn ZXIoICJhamF4Q29tcGxldGUiLCBbIGpxWEhSLCBzIF0gKTsKCQkJCS8vIEhhbmRs ZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlcgoJCQkJaWYgKCAhKCAtLWpRdWVyeS5h Y3RpdmUgKSApIHsKCQkJCQlqUXVlcnkuZXZlbnQudHJpZ2dlcigiYWpheFN0b3Ai KTsKCQkJCX0KCQkJfQoJCX0KCgkJcmV0dXJuIGpxWEhSOwoJfSwKCglnZXRKU09O OiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHsKCQlyZXR1cm4galF1 ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgImpzb24iICk7Cgl9LAoKCWdl dFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7CgkJcmV0dXJuIGpR dWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgInNjcmlwdCIgKTsK CX0KfSk7CgpqUXVlcnkuZWFjaCggWyAiZ2V0IiwgInBvc3QiIF0sIGZ1bmN0aW9u KCBpLCBtZXRob2QgKSB7CglqUXVlcnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVy bCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7CgkJLy8gc2hpZnQgYXJndW1lbnRz IGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWQKCQlpZiAoIGpRdWVyeS5pc0Z1 bmN0aW9uKCBkYXRhICkgKSB7CgkJCXR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrOwoJ CQljYWxsYmFjayA9IGRhdGE7CgkJCWRhdGEgPSB1bmRlZmluZWQ7CgkJfQoKCQly ZXR1cm4galF1ZXJ5LmFqYXgoewoJCQl1cmw6IHVybCwKCQkJdHlwZTogbWV0aG9k LAoJCQlkYXRhVHlwZTogdHlwZSwKCQkJZGF0YTogZGF0YSwKCQkJc3VjY2Vzczog Y2FsbGJhY2sKCQl9KTsKCX07Cn0pOwoKLy8gQXR0YWNoIGEgYnVuY2ggb2YgZnVu Y3Rpb25zIGZvciBoYW5kbGluZyBjb21tb24gQUpBWCBldmVudHMKalF1ZXJ5LmVh Y2goIFsgImFqYXhTdGFydCIsICJhamF4U3RvcCIsICJhamF4Q29tcGxldGUiLCAi YWpheEVycm9yIiwgImFqYXhTdWNjZXNzIiwgImFqYXhTZW5kIiBdLCBmdW5jdGlv biggaSwgdHlwZSApIHsKCWpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIGZu ICkgewoJCXJldHVybiB0aGlzLm9uKCB0eXBlLCBmbiApOwoJfTsKfSk7CgoKalF1 ZXJ5Ll9ldmFsVXJsID0gZnVuY3Rpb24oIHVybCApIHsKCXJldHVybiBqUXVlcnku YWpheCh7CgkJdXJsOiB1cmwsCgkJdHlwZTogIkdFVCIsCgkJZGF0YVR5cGU6ICJz Y3JpcHQiLAoJCWFzeW5jOiBmYWxzZSwKCQlnbG9iYWw6IGZhbHNlLAoJCSJ0aHJv d3MiOiB0cnVlCgl9KTsKfTsKCgpqUXVlcnkuZm4uZXh0ZW5kKHsKCXdyYXBBbGw6 IGZ1bmN0aW9uKCBodG1sICkgewoJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0 bWwgKSApIHsKCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7CgkJCQlq UXVlcnkodGhpcykud3JhcEFsbCggaHRtbC5jYWxsKHRoaXMsIGkpICk7CgkJCX0p OwoJCX0KCgkJaWYgKCB0aGlzWzBdICkgewoJCQkvLyBUaGUgZWxlbWVudHMgdG8g d3JhcCB0aGUgdGFyZ2V0IGFyb3VuZAoJCQl2YXIgd3JhcCA9IGpRdWVyeSggaHRt bCwgdGhpc1swXS5vd25lckRvY3VtZW50ICkuZXEoMCkuY2xvbmUodHJ1ZSk7CgoJ CQlpZiAoIHRoaXNbMF0ucGFyZW50Tm9kZSApIHsKCQkJCXdyYXAuaW5zZXJ0QmVm b3JlKCB0aGlzWzBdICk7CgkJCX0KCgkJCXdyYXAubWFwKGZ1bmN0aW9uKCkgewoJ CQkJdmFyIGVsZW0gPSB0aGlzOwoKCQkJCXdoaWxlICggZWxlbS5maXJzdENoaWxk ICYmIGVsZW0uZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gMSApIHsKCQkJCQllbGVt ID0gZWxlbS5maXJzdENoaWxkOwoJCQkJfQoKCQkJCXJldHVybiBlbGVtOwoJCQl9 KS5hcHBlbmQoIHRoaXMgKTsKCQl9CgoJCXJldHVybiB0aGlzOwoJfSwKCgl3cmFw SW5uZXI6IGZ1bmN0aW9uKCBodG1sICkgewoJCWlmICggalF1ZXJ5LmlzRnVuY3Rp b24oIGh0bWwgKSApIHsKCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7 CgkJCQlqUXVlcnkodGhpcykud3JhcElubmVyKCBodG1sLmNhbGwodGhpcywgaSkg KTsKCQkJfSk7CgkJfQoKCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJ CQl2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLAoJCQkJY29udGVudHMgPSBzZWxm LmNvbnRlbnRzKCk7CgoJCQlpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHsKCQkJCWNv bnRlbnRzLndyYXBBbGwoIGh0bWwgKTsKCgkJCX0gZWxzZSB7CgkJCQlzZWxmLmFw cGVuZCggaHRtbCApOwoJCQl9CgkJfSk7Cgl9LAoKCXdyYXA6IGZ1bmN0aW9uKCBo dG1sICkgewoJCXZhciBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIGh0 bWwgKTsKCgkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7CgkJCWpRdWVy eSggdGhpcyApLndyYXBBbGwoIGlzRnVuY3Rpb24gPyBodG1sLmNhbGwodGhpcywg aSkgOiBodG1sICk7CgkJfSk7Cgl9LAoKCXVud3JhcDogZnVuY3Rpb24oKSB7CgkJ cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpIHsKCQkJaWYgKCAh alF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAiYm9keSIgKSApIHsKCQkJCWpRdWVyeSgg dGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTsKCQkJfQoJCX0p LmVuZCgpOwoJfQp9KTsKCgpqUXVlcnkuZXhwci5maWx0ZXJzLmhpZGRlbiA9IGZ1 bmN0aW9uKCBlbGVtICkgewoJLy8gU3VwcG9ydDogT3BlcmEgPD0gMTIuMTIKCS8v IE9wZXJhIHJlcG9ydHMgb2Zmc2V0V2lkdGhzIGFuZCBvZmZzZXRIZWlnaHRzIGxl c3MgdGhhbiB6ZXJvIG9uIHNvbWUgZWxlbWVudHMKCXJldHVybiBlbGVtLm9mZnNl dFdpZHRoIDw9IDAgJiYgZWxlbS5vZmZzZXRIZWlnaHQgPD0gMCB8fAoJCSghc3Vw cG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMoKSAmJgoJCQkoKGVsZW0uc3R5bGUg JiYgZWxlbS5zdHlsZS5kaXNwbGF5KSB8fCBqUXVlcnkuY3NzKCBlbGVtLCAiZGlz cGxheSIgKSkgPT09ICJub25lIik7Cn07CgpqUXVlcnkuZXhwci5maWx0ZXJzLnZp c2libGUgPSBmdW5jdGlvbiggZWxlbSApIHsKCXJldHVybiAhalF1ZXJ5LmV4cHIu ZmlsdGVycy5oaWRkZW4oIGVsZW0gKTsKfTsKCgoKCnZhciByMjAgPSAvJTIwL2cs CglyYnJhY2tldCA9IC9cW1xdJC8sCglyQ1JMRiA9IC9ccj9cbi9nLAoJcnN1Ym1p dHRlclR5cGVzID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUp JC9pLAoJcnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8 a2V5Z2VuKS9pOwoKZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0 cmFkaXRpb25hbCwgYWRkICkgewoJdmFyIG5hbWU7CgoJaWYgKCBqUXVlcnkuaXNB cnJheSggb2JqICkgKSB7CgkJLy8gU2VyaWFsaXplIGFycmF5IGl0ZW0uCgkJalF1 ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7CgkJCWlmICggdHJhZGl0 aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7CgkJCQkvLyBUcmVh dCBlYWNoIGFycmF5IGl0ZW0gYXMgYSBzY2FsYXIuCgkJCQlhZGQoIHByZWZpeCwg diApOwoKCQkJfSBlbHNlIHsKCQkJCS8vIEl0ZW0gaXMgbm9uLXNjYWxhciAoYXJy YXkgb3Igb2JqZWN0KSwgZW5jb2RlIGl0cyBudW1lcmljIGluZGV4LgoJCQkJYnVp bGRQYXJhbXMoIHByZWZpeCArICJbIiArICggdHlwZW9mIHYgPT09ICJvYmplY3Qi ID8gaSA6ICIiICkgKyAiXSIsIHYsIHRyYWRpdGlvbmFsLCBhZGQgKTsKCQkJfQoJ CX0pOwoKCX0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiBqUXVlcnkudHlwZSgg b2JqICkgPT09ICJvYmplY3QiICkgewoJCS8vIFNlcmlhbGl6ZSBvYmplY3QgaXRl bS4KCQlmb3IgKCBuYW1lIGluIG9iaiApIHsKCQkJYnVpbGRQYXJhbXMoIHByZWZp eCArICJbIiArIG5hbWUgKyAiXSIsIG9ialsgbmFtZSBdLCB0cmFkaXRpb25hbCwg YWRkICk7CgkJfQoKCX0gZWxzZSB7CgkJLy8gU2VyaWFsaXplIHNjYWxhciBpdGVt LgoJCWFkZCggcHJlZml4LCBvYmogKTsKCX0KfQoKLy8gU2VyaWFsaXplIGFuIGFy cmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2YKLy8ga2V5L3ZhbHVlcyBp bnRvIGEgcXVlcnkgc3RyaW5nCmpRdWVyeS5wYXJhbSA9IGZ1bmN0aW9uKCBhLCB0 cmFkaXRpb25hbCApIHsKCXZhciBwcmVmaXgsCgkJcyA9IFtdLAoJCWFkZCA9IGZ1 bmN0aW9uKCBrZXksIHZhbHVlICkgewoJCQkvLyBJZiB2YWx1ZSBpcyBhIGZ1bmN0 aW9uLCBpbnZva2UgaXQgYW5kIHJldHVybiBpdHMgdmFsdWUKCQkJdmFsdWUgPSBq UXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSA/IHZhbHVlKCkgOiAoIHZhbHVlID09 IG51bGwgPyAiIiA6IHZhbHVlICk7CgkJCXNbIHMubGVuZ3RoIF0gPSBlbmNvZGVV UklDb21wb25lbnQoIGtleSApICsgIj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KCB2 YWx1ZSApOwoJCX07CgoJLy8gU2V0IHRyYWRpdGlvbmFsIHRvIHRydWUgZm9yIGpR dWVyeSA8PSAxLjMuMiBiZWhhdmlvci4KCWlmICggdHJhZGl0aW9uYWwgPT09IHVu ZGVmaW5lZCApIHsKCQl0cmFkaXRpb25hbCA9IGpRdWVyeS5hamF4U2V0dGluZ3Mg JiYgalF1ZXJ5LmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbDsKCX0KCgkvLyBJZiBh biBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJh eSBvZiBmb3JtIGVsZW1lbnRzLgoJaWYgKCBqUXVlcnkuaXNBcnJheSggYSApIHx8 ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHsK CQkvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHMKCQlqUXVlcnkuZWFjaCgg YSwgZnVuY3Rpb24oKSB7CgkJCWFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7 CgkJfSk7CgoJfSBlbHNlIHsKCQkvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRo ZSAib2xkIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXIKCQkvLyBkaWQgaXQp LCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS4KCQlmb3IgKCBw cmVmaXggaW4gYSApIHsKCQkJYnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4 IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsKCQl9Cgl9CgoJLy8gUmV0dXJuIHRoZSBy ZXN1bHRpbmcgc2VyaWFsaXphdGlvbgoJcmV0dXJuIHMuam9pbiggIiYiICkucmVw bGFjZSggcjIwLCAiKyIgKTsKfTsKCmpRdWVyeS5mbi5leHRlbmQoewoJc2VyaWFs aXplOiBmdW5jdGlvbigpIHsKCQlyZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNl cmlhbGl6ZUFycmF5KCkgKTsKCX0sCglzZXJpYWxpemVBcnJheTogZnVuY3Rpb24o KSB7CgkJcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCkgewoJCQkvLyBDYW4gYWRk IHByb3BIb29rIGZvciAiZWxlbWVudHMiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBl bGVtZW50cwoJCQl2YXIgZWxlbWVudHMgPSBqUXVlcnkucHJvcCggdGhpcywgImVs ZW1lbnRzIiApOwoJCQlyZXR1cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5 KCBlbGVtZW50cyApIDogdGhpczsKCQl9KQoJCS5maWx0ZXIoZnVuY3Rpb24oKSB7 CgkJCXZhciB0eXBlID0gdGhpcy50eXBlOwoJCQkvLyBVc2UgLmlzKCI6ZGlzYWJs ZWQiKSBzbyB0aGF0IGZpZWxkc2V0W2Rpc2FibGVkXSB3b3JrcwoJCQlyZXR1cm4g dGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggIjpkaXNhYmxlZCIgKSAm JgoJCQkJcnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1 Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJgoJCQkJKCB0aGlzLmNoZWNrZWQg fHwgIXJjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApOwoJCX0pCgkJLm1hcChm dW5jdGlvbiggaSwgZWxlbSApIHsKCQkJdmFyIHZhbCA9IGpRdWVyeSggdGhpcyAp LnZhbCgpOwoKCQkJcmV0dXJuIHZhbCA9PSBudWxsID8KCQkJCW51bGwgOgoJCQkJ alF1ZXJ5LmlzQXJyYXkoIHZhbCApID8KCQkJCQlqUXVlcnkubWFwKCB2YWwsIGZ1 bmN0aW9uKCB2YWwgKSB7CgkJCQkJCXJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwg dmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgIlxyXG4iICkgfTsKCQkJCQl9KSA6 CgkJCQkJeyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNS TEYsICJcclxuIiApIH07CgkJfSkuZ2V0KCk7Cgl9Cn0pOwoKCi8vIENyZWF0ZSB0 aGUgcmVxdWVzdCBvYmplY3QKLy8gKFRoaXMgaXMgc3RpbGwgYXR0YWNoZWQgdG8g YWpheFNldHRpbmdzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KQpqUXVlcnku YWpheFNldHRpbmdzLnhociA9IHdpbmRvdy5BY3RpdmVYT2JqZWN0ICE9PSB1bmRl ZmluZWQgPwoJLy8gU3VwcG9ydDogSUU2KwoJZnVuY3Rpb24oKSB7CgoJCS8vIFhI UiBjYW5ub3QgYWNjZXNzIGxvY2FsIGZpbGVzLCBhbHdheXMgdXNlIEFjdGl2ZVgg Zm9yIHRoYXQgY2FzZQoJCXJldHVybiAhdGhpcy5pc0xvY2FsICYmCgoJCQkvLyBT dXBwb3J0OiBJRTctOAoJCQkvLyBvbGRJRSBYSFIgZG9lcyBub3Qgc3VwcG9ydCBu b24tUkZDMjYxNiBtZXRob2RzICgjMTMyNDApCgkJCS8vIFNlZSBodHRwOi8vbXNk bi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvbXM1MzY2NDgodj12cy44 NSkuYXNweAoJCQkvLyBhbmQgaHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3Jm YzI2MTYvcmZjMjYxNi1zZWM5Lmh0bWwjc2VjOQoJCQkvLyBBbHRob3VnaCB0aGlz IGNoZWNrIGZvciBzaXggbWV0aG9kcyBpbnN0ZWFkIG9mIGVpZ2h0CgkJCS8vIHNp bmNlIElFIGFsc28gZG9lcyBub3Qgc3VwcG9ydCAidHJhY2UiIGFuZCAiY29ubmVj dCIKCQkJL14oZ2V0fHBvc3R8aGVhZHxwdXR8ZGVsZXRlfG9wdGlvbnMpJC9pLnRl c3QoIHRoaXMudHlwZSApICYmCgoJCQljcmVhdGVTdGFuZGFyZFhIUigpIHx8IGNy ZWF0ZUFjdGl2ZVhIUigpOwoJfSA6CgkvLyBGb3IgYWxsIG90aGVyIGJyb3dzZXJz LCB1c2UgdGhlIHN0YW5kYXJkIFhNTEh0dHBSZXF1ZXN0IG9iamVjdAoJY3JlYXRl U3RhbmRhcmRYSFI7Cgp2YXIgeGhySWQgPSAwLAoJeGhyQ2FsbGJhY2tzID0ge30s Cgl4aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpOwoKLy8g U3VwcG9ydDogSUU8MTAKLy8gT3BlbiByZXF1ZXN0cyBtdXN0IGJlIG1hbnVhbGx5 IGFib3J0ZWQgb24gdW5sb2FkICgjNTI4MCkKaWYgKCB3aW5kb3cuQWN0aXZlWE9i amVjdCApIHsKCWpRdWVyeSggd2luZG93ICkub24oICJ1bmxvYWQiLCBmdW5jdGlv bigpIHsKCQlmb3IgKCB2YXIga2V5IGluIHhockNhbGxiYWNrcyApIHsKCQkJeGhy Q2FsbGJhY2tzWyBrZXkgXSggdW5kZWZpbmVkLCB0cnVlICk7CgkJfQoJfSk7Cn0K Ci8vIERldGVybWluZSBzdXBwb3J0IHByb3BlcnRpZXMKc3VwcG9ydC5jb3JzID0g ISF4aHJTdXBwb3J0ZWQgJiYgKCAid2l0aENyZWRlbnRpYWxzIiBpbiB4aHJTdXBw b3J0ZWQgKTsKeGhyU3VwcG9ydGVkID0gc3VwcG9ydC5hamF4ID0gISF4aHJTdXBw b3J0ZWQ7CgovLyBDcmVhdGUgdHJhbnNwb3J0IGlmIHRoZSBicm93c2VyIGNhbiBw cm92aWRlIGFuIHhocgppZiAoIHhoclN1cHBvcnRlZCApIHsKCglqUXVlcnkuYWph eFRyYW5zcG9ydChmdW5jdGlvbiggb3B0aW9ucyApIHsKCQkvLyBDcm9zcyBkb21h aW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1 ZXN0CgkJaWYgKCAhb3B0aW9ucy5jcm9zc0RvbWFpbiB8fCBzdXBwb3J0LmNvcnMg KSB7CgoJCQl2YXIgY2FsbGJhY2s7CgoJCQlyZXR1cm4gewoJCQkJc2VuZDogZnVu Y3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkgewoJCQkJCXZhciBpLAoJCQkJCQl4 aHIgPSBvcHRpb25zLnhocigpLAoJCQkJCQlpZCA9ICsreGhySWQ7CgoJCQkJCS8v IE9wZW4gdGhlIHNvY2tldAoJCQkJCXhoci5vcGVuKCBvcHRpb25zLnR5cGUsIG9w dGlvbnMudXJsLCBvcHRpb25zLmFzeW5jLCBvcHRpb25zLnVzZXJuYW1lLCBvcHRp b25zLnBhc3N3b3JkICk7CgoJCQkJCS8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYg cHJvdmlkZWQKCQkJCQlpZiAoIG9wdGlvbnMueGhyRmllbGRzICkgewoJCQkJCQlm b3IgKCBpIGluIG9wdGlvbnMueGhyRmllbGRzICkgewoJCQkJCQkJeGhyWyBpIF0g PSBvcHRpb25zLnhockZpZWxkc1sgaSBdOwoJCQkJCQl9CgkJCQkJfQoKCQkJCQkv LyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkCgkJCQkJaWYgKCBvcHRpb25z Lm1pbWVUeXBlICYmIHhoci5vdmVycmlkZU1pbWVUeXBlICkgewoJCQkJCQl4aHIu b3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9ucy5taW1lVHlwZSApOwoJCQkJCX0KCgkJ CQkJLy8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXIKCQkJCQkvLyBGb3IgY3Jvc3Mt ZG9tYWluIHJlcXVlc3RzLCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBwcmVm bGlnaHQgYXJlCgkJCQkJLy8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNp bXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS4KCQkJCQkvLyAoaXQgY2FuIGFs d2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5n IGFqYXhTZXR1cCkKCQkJCQkvLyBGb3Igc2FtZS1kb21haW4gcmVxdWVzdHMsIHdv bid0IGNoYW5nZSBoZWFkZXIgaWYgYWxyZWFkeSBwcm92aWRlZC4KCQkJCQlpZiAo ICFvcHRpb25zLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyJYLVJlcXVlc3RlZC1X aXRoIl0gKSB7CgkJCQkJCWhlYWRlcnNbIlgtUmVxdWVzdGVkLVdpdGgiXSA9ICJY TUxIdHRwUmVxdWVzdCI7CgkJCQkJfQoKCQkJCQkvLyBTZXQgaGVhZGVycwoJCQkJ CWZvciAoIGkgaW4gaGVhZGVycyApIHsKCQkJCQkJLy8gU3VwcG9ydDogSUU8OQoJ CQkJCQkvLyBJRSdzIEFjdGl2ZVhPYmplY3QgdGhyb3dzIGEgJ1R5cGUgTWlzbWF0 Y2gnIGV4Y2VwdGlvbiB3aGVuIHNldHRpbmcKCQkJCQkJLy8gcmVxdWVzdCBoZWFk ZXIgdG8gYSBudWxsLXZhbHVlLgoJCQkJCQkvLwoJCQkJCQkvLyBUbyBrZWVwIGNv bnNpc3RlbnQgd2l0aCBvdGhlciBYSFIgaW1wbGVtZW50YXRpb25zLCBjYXN0IHRo ZSB2YWx1ZQoJCQkJCQkvLyB0byBzdHJpbmcgYW5kIGlnbm9yZSBgdW5kZWZpbmVk YC4KCQkJCQkJaWYgKCBoZWFkZXJzWyBpIF0gIT09IHVuZGVmaW5lZCApIHsKCQkJ CQkJCXhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKyAiIiAp OwoJCQkJCQl9CgkJCQkJfQoKCQkJCQkvLyBEbyBzZW5kIHRoZSByZXF1ZXN0CgkJ CQkJLy8gVGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uIHdoaWNoIGlzIGFjdHVh bGx5CgkJCQkJLy8gaGFuZGxlZCBpbiBqUXVlcnkuYWpheCAoc28gbm8gdHJ5L2Nh dGNoIGhlcmUpCgkJCQkJeGhyLnNlbmQoICggb3B0aW9ucy5oYXNDb250ZW50ICYm IG9wdGlvbnMuZGF0YSApIHx8IG51bGwgKTsKCgkJCQkJLy8gTGlzdGVuZXIKCQkJ CQljYWxsYmFjayA9IGZ1bmN0aW9uKCBfLCBpc0Fib3J0ICkgewoJCQkJCQl2YXIg c3RhdHVzLCBzdGF0dXNUZXh0LCByZXNwb25zZXM7CgoJCQkJCQkvLyBXYXMgbmV2 ZXIgY2FsbGVkIGFuZCBpcyBhYm9ydGVkIG9yIGNvbXBsZXRlCgkJCQkJCWlmICgg Y2FsbGJhY2sgJiYgKCBpc0Fib3J0IHx8IHhoci5yZWFkeVN0YXRlID09PSA0ICkg KSB7CgkJCQkJCQkvLyBDbGVhbiB1cAoJCQkJCQkJZGVsZXRlIHhockNhbGxiYWNr c1sgaWQgXTsKCQkJCQkJCWNhbGxiYWNrID0gdW5kZWZpbmVkOwoJCQkJCQkJeGhy Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGpRdWVyeS5ub29wOwoKCQkJCQkJCS8vIEFi b3J0IG1hbnVhbGx5IGlmIG5lZWRlZAoJCQkJCQkJaWYgKCBpc0Fib3J0ICkgewoJ CQkJCQkJCWlmICggeGhyLnJlYWR5U3RhdGUgIT09IDQgKSB7CgkJCQkJCQkJCXho ci5hYm9ydCgpOwoJCQkJCQkJCX0KCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJcmVz cG9uc2VzID0ge307CgkJCQkJCQkJc3RhdHVzID0geGhyLnN0YXR1czsKCgkJCQkJ CQkJLy8gU3VwcG9ydDogSUU8MTAKCQkJCQkJCQkvLyBBY2Nlc3NpbmcgYmluYXJ5 LWRhdGEgcmVzcG9uc2VUZXh0IHRocm93cyBhbiBleGNlcHRpb24KCQkJCQkJCQkv LyAoIzExNDI2KQoJCQkJCQkJCWlmICggdHlwZW9mIHhoci5yZXNwb25zZVRleHQg PT09ICJzdHJpbmciICkgewoJCQkJCQkJCQlyZXNwb25zZXMudGV4dCA9IHhoci5y ZXNwb25zZVRleHQ7CgkJCQkJCQkJfQoKCQkJCQkJCQkvLyBGaXJlZm94IHRocm93 cyBhbiBleGNlcHRpb24gd2hlbiBhY2Nlc3NpbmcKCQkJCQkJCQkvLyBzdGF0dXNU ZXh0IGZvciBmYXVsdHkgY3Jvc3MtZG9tYWluIHJlcXVlc3RzCgkJCQkJCQkJdHJ5 IHsKCQkJCQkJCQkJc3RhdHVzVGV4dCA9IHhoci5zdGF0dXNUZXh0OwoJCQkJCQkJ CX0gY2F0Y2goIGUgKSB7CgkJCQkJCQkJCS8vIFdlIG5vcm1hbGl6ZSB3aXRoIFdl YmtpdCBnaXZpbmcgYW4gZW1wdHkgc3RhdHVzVGV4dAoJCQkJCQkJCQlzdGF0dXNU ZXh0ID0gIiI7CgkJCQkJCQkJfQoKCQkJCQkJCQkvLyBGaWx0ZXIgc3RhdHVzIGZv ciBub24gc3RhbmRhcmQgYmVoYXZpb3JzCgoJCQkJCQkJCS8vIElmIHRoZSByZXF1 ZXN0IGlzIGxvY2FsIGFuZCB3ZSBoYXZlIGRhdGE6IGFzc3VtZSBhIHN1Y2Nlc3MK CQkJCQkJCQkvLyAoc3VjY2VzcyB3aXRoIG5vIGRhdGEgd29uJ3QgZ2V0IG5vdGlm aWVkLCB0aGF0J3MgdGhlIGJlc3Qgd2UKCQkJCQkJCQkvLyBjYW4gZG8gZ2l2ZW4g Y3VycmVudCBpbXBsZW1lbnRhdGlvbnMpCgkJCQkJCQkJaWYgKCAhc3RhdHVzICYm IG9wdGlvbnMuaXNMb2NhbCAmJiAhb3B0aW9ucy5jcm9zc0RvbWFpbiApIHsKCQkJ CQkJCQkJc3RhdHVzID0gcmVzcG9uc2VzLnRleHQgPyAyMDAgOiA0MDQ7CgkJCQkJ CQkJLy8gSUUgLSAjMTQ1MDogc29tZXRpbWVzIHJldHVybnMgMTIyMyB3aGVuIGl0 IHNob3VsZCBiZSAyMDQKCQkJCQkJCQl9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDEy MjMgKSB7CgkJCQkJCQkJCXN0YXR1cyA9IDIwNDsKCQkJCQkJCQl9CgkJCQkJCQl9 CgkJCQkJCX0KCgkJCQkJCS8vIENhbGwgY29tcGxldGUgaWYgbmVlZGVkCgkJCQkJ CWlmICggcmVzcG9uc2VzICkgewoJCQkJCQkJY29tcGxldGUoIHN0YXR1cywgc3Rh dHVzVGV4dCwgcmVzcG9uc2VzLCB4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkg KTsKCQkJCQkJfQoJCQkJCX07CgoJCQkJCWlmICggIW9wdGlvbnMuYXN5bmMgKSB7 CgkJCQkJCS8vIGlmIHdlJ3JlIGluIHN5bmMgbW9kZSB3ZSBmaXJlIHRoZSBjYWxs YmFjawoJCQkJCQljYWxsYmFjaygpOwoJCQkJCX0gZWxzZSBpZiAoIHhoci5yZWFk eVN0YXRlID09PSA0ICkgewoJCQkJCQkvLyAoSUU2ICYgSUU3KSBpZiBpdCdzIGlu IGNhY2hlIGFuZCBoYXMgYmVlbgoJCQkJCQkvLyByZXRyaWV2ZWQgZGlyZWN0bHkg d2UgbmVlZCB0byBmaXJlIHRoZSBjYWxsYmFjawoJCQkJCQlzZXRUaW1lb3V0KCBj YWxsYmFjayApOwoJCQkJCX0gZWxzZSB7CgkJCQkJCS8vIEFkZCB0byB0aGUgbGlz dCBvZiBhY3RpdmUgeGhyIGNhbGxiYWNrcwoJCQkJCQl4aHIub25yZWFkeXN0YXRl Y2hhbmdlID0geGhyQ2FsbGJhY2tzWyBpZCBdID0gY2FsbGJhY2s7CgkJCQkJfQoJ CQkJfSwKCgkJCQlhYm9ydDogZnVuY3Rpb24oKSB7CgkJCQkJaWYgKCBjYWxsYmFj ayApIHsKCQkJCQkJY2FsbGJhY2soIHVuZGVmaW5lZCwgdHJ1ZSApOwoJCQkJCX0K CQkJCX0KCQkJfTsKCQl9Cgl9KTsKfQoKLy8gRnVuY3Rpb25zIHRvIGNyZWF0ZSB4 aHJzCmZ1bmN0aW9uIGNyZWF0ZVN0YW5kYXJkWEhSKCkgewoJdHJ5IHsKCQlyZXR1 cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpOwoJfSBjYXRjaCggZSApIHt9 Cn0KCmZ1bmN0aW9uIGNyZWF0ZUFjdGl2ZVhIUigpIHsKCXRyeSB7CgkJcmV0dXJu IG5ldyB3aW5kb3cuQWN0aXZlWE9iamVjdCggIk1pY3Jvc29mdC5YTUxIVFRQIiAp OwoJfSBjYXRjaCggZSApIHt9Cn0KCgoKCi8vIEluc3RhbGwgc2NyaXB0IGRhdGFU eXBlCmpRdWVyeS5hamF4U2V0dXAoewoJYWNjZXB0czogewoJCXNjcmlwdDogInRl eHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRp b24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0IgoJfSwKCWNv bnRlbnRzOiB7CgkJc2NyaXB0OiAvKD86amF2YXxlY21hKXNjcmlwdC8KCX0sCglj b252ZXJ0ZXJzOiB7CgkJInRleHQgc2NyaXB0IjogZnVuY3Rpb24oIHRleHQgKSB7 CgkJCWpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7CgkJCXJldHVybiB0ZXh0OwoJ CX0KCX0KfSk7CgovLyBIYW5kbGUgY2FjaGUncyBzcGVjaWFsIGNhc2UgYW5kIGds b2JhbApqUXVlcnkuYWpheFByZWZpbHRlciggInNjcmlwdCIsIGZ1bmN0aW9uKCBz ICkgewoJaWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7CgkJcy5jYWNoZSA9 IGZhbHNlOwoJfQoJaWYgKCBzLmNyb3NzRG9tYWluICkgewoJCXMudHlwZSA9ICJH RVQiOwoJCXMuZ2xvYmFsID0gZmFsc2U7Cgl9Cn0pOwoKLy8gQmluZCBzY3JpcHQg dGFnIGhhY2sgdHJhbnNwb3J0CmpRdWVyeS5hamF4VHJhbnNwb3J0KCAic2NyaXB0 IiwgZnVuY3Rpb24ocykgewoKCS8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMg d2l0aCBjcm9zcyBkb21haW4gcmVxdWVzdHMKCWlmICggcy5jcm9zc0RvbWFpbiAp IHsKCgkJdmFyIHNjcmlwdCwKCQkJaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgalF1 ZXJ5KCJoZWFkIilbMF0gfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OwoKCQly ZXR1cm4gewoKCQkJc2VuZDogZnVuY3Rpb24oIF8sIGNhbGxiYWNrICkgewoKCQkJ CXNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwoKCQkJ CXNjcmlwdC5hc3luYyA9IHRydWU7CgoJCQkJaWYgKCBzLnNjcmlwdENoYXJzZXQg KSB7CgkJCQkJc2NyaXB0LmNoYXJzZXQgPSBzLnNjcmlwdENoYXJzZXQ7CgkJCQl9 CgoJCQkJc2NyaXB0LnNyYyA9IHMudXJsOwoKCQkJCS8vIEF0dGFjaCBoYW5kbGVy cyBmb3IgYWxsIGJyb3dzZXJzCgkJCQlzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9u cmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCBfLCBpc0Fib3J0ICkgewoKCQkJ CQlpZiAoIGlzQWJvcnQgfHwgIXNjcmlwdC5yZWFkeVN0YXRlIHx8IC9sb2FkZWR8 Y29tcGxldGUvLnRlc3QoIHNjcmlwdC5yZWFkeVN0YXRlICkgKSB7CgoJCQkJCQkv LyBIYW5kbGUgbWVtb3J5IGxlYWsgaW4gSUUKCQkJCQkJc2NyaXB0Lm9ubG9hZCA9 IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsOwoKCQkJCQkJLy8gUmVt b3ZlIHRoZSBzY3JpcHQKCQkJCQkJaWYgKCBzY3JpcHQucGFyZW50Tm9kZSApIHsK CQkJCQkJCXNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTsK CQkJCQkJfQoKCQkJCQkJLy8gRGVyZWZlcmVuY2UgdGhlIHNjcmlwdAoJCQkJCQlz Y3JpcHQgPSBudWxsOwoKCQkJCQkJLy8gQ2FsbGJhY2sgaWYgbm90IGFib3J0CgkJ CQkJCWlmICggIWlzQWJvcnQgKSB7CgkJCQkJCQljYWxsYmFjayggMjAwLCAic3Vj Y2VzcyIgKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX07CgoJCQkJLy8gQ2lyY3VtdmVu dCBJRTYgYnVncyB3aXRoIGJhc2UgZWxlbWVudHMgKCMyNzA5IGFuZCAjNDM3OCkg YnkgcHJlcGVuZGluZwoJCQkJLy8gVXNlIG5hdGl2ZSBET00gbWFuaXB1bGF0aW9u IHRvIGF2b2lkIG91ciBkb21NYW5pcCBBSkFYIHRyaWNrZXJ5CgkJCQloZWFkLmlu c2VydEJlZm9yZSggc2NyaXB0LCBoZWFkLmZpcnN0Q2hpbGQgKTsKCQkJfSwKCgkJ CWFib3J0OiBmdW5jdGlvbigpIHsKCQkJCWlmICggc2NyaXB0ICkgewoJCQkJCXNj cmlwdC5vbmxvYWQoIHVuZGVmaW5lZCwgdHJ1ZSApOwoJCQkJfQoJCQl9CgkJfTsK CX0KfSk7CgoKCgp2YXIgb2xkQ2FsbGJhY2tzID0gW10sCglyanNvbnAgPSAvKD0p XD8oPz0mfCQpfFw/XD8vOwoKLy8gRGVmYXVsdCBqc29ucCBzZXR0aW5ncwpqUXVl cnkuYWpheFNldHVwKHsKCWpzb25wOiAiY2FsbGJhY2siLAoJanNvbnBDYWxsYmFj azogZnVuY3Rpb24oKSB7CgkJdmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBv cCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyAiXyIgKyAoIG5vbmNlKysgKSApOwoJ CXRoaXNbIGNhbGxiYWNrIF0gPSB0cnVlOwoJCXJldHVybiBjYWxsYmFjazsKCX0K fSk7CgovLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxsIGNh bGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHMKalF1ZXJ5LmFqYXhQcmVmaWx0ZXIo ICJqc29uIGpzb25wIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpx WEhSICkgewoKCXZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25z ZUNvbnRhaW5lciwKCQlqc29uUHJvcCA9IHMuanNvbnAgIT09IGZhbHNlICYmICgg cmpzb25wLnRlc3QoIHMudXJsICkgPwoJCQkidXJsIiA6CgkJCXR5cGVvZiBzLmRh dGEgPT09ICJzdHJpbmciICYmICEoIHMuY29udGVudFR5cGUgfHwgIiIgKS5pbmRl eE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSAmJiByanNv bnAudGVzdCggcy5kYXRhICkgJiYgImRhdGEiCgkJKTsKCgkvLyBIYW5kbGUgaWZm IHRoZSBleHBlY3RlZCBkYXRhIHR5cGUgaXMgImpzb25wIiBvciB3ZSBoYXZlIGEg cGFyYW1ldGVyIHRvIHNldAoJaWYgKCBqc29uUHJvcCB8fCBzLmRhdGFUeXBlc1sg MCBdID09PSAianNvbnAiICkgewoKCQkvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVt ZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0CgkJ Y2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0galF1ZXJ5LmlzRnVuY3Rp b24oIHMuanNvbnBDYWxsYmFjayApID8KCQkJcy5qc29ucENhbGxiYWNrKCkgOgoJ CQlzLmpzb25wQ2FsbGJhY2s7CgoJCS8vIEluc2VydCBjYWxsYmFjayBpbnRvIHVy bCBvciBmb3JtIGRhdGEKCQlpZiAoIGpzb25Qcm9wICkgewoJCQlzWyBqc29uUHJv cCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsICIkMSIgKyBjYWxs YmFja05hbWUgKTsKCQl9IGVsc2UgaWYgKCBzLmpzb25wICE9PSBmYWxzZSApIHsK CQkJcy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/ICImIiA6ICI/IiAp ICsgcy5qc29ucCArICI9IiArIGNhbGxiYWNrTmFtZTsKCQl9CgoJCS8vIFVzZSBk YXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVj dXRpb24KCQlzLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl0gPSBmdW5jdGlvbigp IHsKCQkJaWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7CgkJCQlqUXVlcnkuZXJy b3IoIGNhbGxiYWNrTmFtZSArICIgd2FzIG5vdCBjYWxsZWQiICk7CgkJCX0KCQkJ cmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07CgkJfTsKCgkJLy8gZm9yY2Ug anNvbiBkYXRhVHlwZQoJCXMuZGF0YVR5cGVzWyAwIF0gPSAianNvbiI7CgoJCS8v IEluc3RhbGwgY2FsbGJhY2sKCQlvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJh Y2tOYW1lIF07CgkJd2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkg ewoJCQlyZXNwb25zZUNvbnRhaW5lciA9IGFyZ3VtZW50czsKCQl9OwoKCQkvLyBD bGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycykKCQlqcVhI Ui5hbHdheXMoZnVuY3Rpb24oKSB7CgkJCS8vIFJlc3RvcmUgcHJlZXhpc3Rpbmcg dmFsdWUKCQkJd2luZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVuOwoK CQkJLy8gU2F2ZSBiYWNrIGFzIGZyZWUKCQkJaWYgKCBzWyBjYWxsYmFja05hbWUg XSApIHsKCQkJCS8vIG1ha2Ugc3VyZSB0aGF0IHJlLXVzaW5nIHRoZSBvcHRpb25z IGRvZXNuJ3Qgc2NyZXcgdGhpbmdzIGFyb3VuZAoJCQkJcy5qc29ucENhbGxiYWNr ID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrOwoKCQkJCS8vIHNhdmUg dGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2UKCQkJCW9sZENhbGxiYWNr cy5wdXNoKCBjYWxsYmFja05hbWUgKTsKCQkJfQoKCQkJLy8gQ2FsbCBpZiBpdCB3 YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlCgkJCWlmICggcmVz cG9uc2VDb250YWluZXIgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIG92ZXJ3cml0dGVu ICkgKSB7CgkJCQlvdmVyd3JpdHRlbiggcmVzcG9uc2VDb250YWluZXJbIDAgXSAp OwoJCQl9CgoJCQlyZXNwb25zZUNvbnRhaW5lciA9IG92ZXJ3cml0dGVuID0gdW5k ZWZpbmVkOwoJCX0pOwoKCQkvLyBEZWxlZ2F0ZSB0byBzY3JpcHQKCQlyZXR1cm4g InNjcmlwdCI7Cgl9Cn0pOwoKCgoKLy8gZGF0YTogc3RyaW5nIG9mIGh0bWwKLy8g Y29udGV4dCAob3B0aW9uYWwpOiBJZiBzcGVjaWZpZWQsIHRoZSBmcmFnbWVudCB3 aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0LCBkZWZhdWx0cyB0byBkb2N1 bWVudAovLyBrZWVwU2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGlu Y2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nCmpRdWVyeS5w YXJzZUhUTUwgPSBmdW5jdGlvbiggZGF0YSwgY29udGV4dCwga2VlcFNjcmlwdHMg KSB7CglpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAic3RyaW5nIiApIHsK CQlyZXR1cm4gbnVsbDsKCX0KCWlmICggdHlwZW9mIGNvbnRleHQgPT09ICJib29s ZWFuIiApIHsKCQlrZWVwU2NyaXB0cyA9IGNvbnRleHQ7CgkJY29udGV4dCA9IGZh bHNlOwoJfQoJY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7CgoJdmFyIHBh cnNlZCA9IHJzaW5nbGVUYWcuZXhlYyggZGF0YSApLAoJCXNjcmlwdHMgPSAha2Vl cFNjcmlwdHMgJiYgW107CgoJLy8gU2luZ2xlIHRhZwoJaWYgKCBwYXJzZWQgKSB7 CgkJcmV0dXJuIFsgY29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbMV0gKSBd OwoJfQoKCXBhcnNlZCA9IGpRdWVyeS5idWlsZEZyYWdtZW50KCBbIGRhdGEgXSwg Y29udGV4dCwgc2NyaXB0cyApOwoKCWlmICggc2NyaXB0cyAmJiBzY3JpcHRzLmxl bmd0aCApIHsKCQlqUXVlcnkoIHNjcmlwdHMgKS5yZW1vdmUoKTsKCX0KCglyZXR1 cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTsKfTsKCgov LyBLZWVwIGEgY29weSBvZiB0aGUgb2xkIGxvYWQgbWV0aG9kCnZhciBfbG9hZCA9 IGpRdWVyeS5mbi5sb2FkOwoKLyoqCiAqIExvYWQgYSB1cmwgaW50byBhIHBhZ2UK ICovCmpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxs YmFjayApIHsKCWlmICggdHlwZW9mIHVybCAhPT0gInN0cmluZyIgJiYgX2xvYWQg KSB7CgkJcmV0dXJuIF9sb2FkLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKCX0K Cgl2YXIgc2VsZWN0b3IsIHJlc3BvbnNlLCB0eXBlLAoJCXNlbGYgPSB0aGlzLAoJ CW9mZiA9IHVybC5pbmRleE9mKCIgIik7CgoJaWYgKCBvZmYgPj0gMCApIHsKCQlz ZWxlY3RvciA9IHVybC5zbGljZSggb2ZmLCB1cmwubGVuZ3RoICk7CgkJdXJsID0g dXJsLnNsaWNlKCAwLCBvZmYgKTsKCX0KCgkvLyBJZiBpdCdzIGEgZnVuY3Rpb24K CWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHBhcmFtcyApICkgewoKCQkvLyBXZSBh c3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFjawoJCWNhbGxiYWNrID0gcGFyYW1z OwoJCXBhcmFtcyA9IHVuZGVmaW5lZDsKCgkvLyBPdGhlcndpc2UsIGJ1aWxkIGEg cGFyYW0gc3RyaW5nCgl9IGVsc2UgaWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFt cyA9PT0gIm9iamVjdCIgKSB7CgkJdHlwZSA9ICJQT1NUIjsKCX0KCgkvLyBJZiB3 ZSBoYXZlIGVsZW1lbnRzIHRvIG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVzdAoJaWYg KCBzZWxmLmxlbmd0aCA+IDAgKSB7CgkJalF1ZXJ5LmFqYXgoewoJCQl1cmw6IHVy bCwKCgkJCS8vIGlmICJ0eXBlIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4g IkdFVCIgbWV0aG9kIHdpbGwgYmUgdXNlZAoJCQl0eXBlOiB0eXBlLAoJCQlkYXRh VHlwZTogImh0bWwiLAoJCQlkYXRhOiBwYXJhbXMKCQl9KS5kb25lKGZ1bmN0aW9u KCByZXNwb25zZVRleHQgKSB7CgoJCQkvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2Ug aW4gY29tcGxldGUgY2FsbGJhY2sKCQkJcmVzcG9uc2UgPSBhcmd1bWVudHM7CgoJ CQlzZWxmLmh0bWwoIHNlbGVjdG9yID8KCgkJCQkvLyBJZiBhIHNlbGVjdG9yIHdh cyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1t eSBkaXYKCQkJCS8vIEV4Y2x1ZGUgc2NyaXB0cyB0byBhdm9pZCBJRSAnUGVybWlz c2lvbiBEZW5pZWQnIGVycm9ycwoJCQkJalF1ZXJ5KCI8ZGl2PiIpLmFwcGVuZCgg alF1ZXJ5LnBhcnNlSFRNTCggcmVzcG9uc2VUZXh0ICkgKS5maW5kKCBzZWxlY3Rv ciApIDoKCgkJCQkvLyBPdGhlcndpc2UgdXNlIHRoZSBmdWxsIHJlc3VsdAoJCQkJ cmVzcG9uc2VUZXh0ICk7CgoJCX0pLmNvbXBsZXRlKCBjYWxsYmFjayAmJiBmdW5j dGlvbigganFYSFIsIHN0YXR1cyApIHsKCQkJc2VsZi5lYWNoKCBjYWxsYmFjaywg cmVzcG9uc2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIg XSApOwoJCX0pOwoJfQoKCXJldHVybiB0aGlzOwp9OwoKCgoKalF1ZXJ5LmV4cHIu ZmlsdGVycy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVtICkgewoJcmV0dXJuIGpR dWVyeS5ncmVwKGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHsKCQlyZXR1 cm4gZWxlbSA9PT0gZm4uZWxlbTsKCX0pLmxlbmd0aDsKfTsKCgoKCgp2YXIgZG9j RWxlbSA9IHdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CgovKioKICog R2V0cyBhIHdpbmRvdyBmcm9tIGFuIGVsZW1lbnQKICovCmZ1bmN0aW9uIGdldFdp bmRvdyggZWxlbSApIHsKCXJldHVybiBqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSA/ CgkJZWxlbSA6CgkJZWxlbS5ub2RlVHlwZSA9PT0gOSA/CgkJCWVsZW0uZGVmYXVs dFZpZXcgfHwgZWxlbS5wYXJlbnRXaW5kb3cgOgoJCQlmYWxzZTsKfQoKalF1ZXJ5 Lm9mZnNldCA9IHsKCXNldE9mZnNldDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMs IGkgKSB7CgkJdmFyIGN1clBvc2l0aW9uLCBjdXJMZWZ0LCBjdXJDU1NUb3AsIGN1 clRvcCwgY3VyT2Zmc2V0LCBjdXJDU1NMZWZ0LCBjYWxjdWxhdGVQb3NpdGlvbiwK CQkJcG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICksCgkJ CWN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSwKCQkJcHJvcHMgPSB7fTsKCgkJLy8g c2V0IHBvc2l0aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZl biBvbiBzdGF0aWMgZWxlbQoJCWlmICggcG9zaXRpb24gPT09ICJzdGF0aWMiICkg ewoJCQllbGVtLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKCQl9CgoJCWN1 ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCk7CgkJY3VyQ1NTVG9wID0galF1ZXJ5 LmNzcyggZWxlbSwgInRvcCIgKTsKCQljdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcygg ZWxlbSwgImxlZnQiICk7CgkJY2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9u ID09PSAiYWJzb2x1dGUiIHx8IHBvc2l0aW9uID09PSAiZml4ZWQiICkgJiYKCQkJ alF1ZXJ5LmluQXJyYXkoImF1dG8iLCBbIGN1ckNTU1RvcCwgY3VyQ1NTTGVmdCBd ICkgPiAtMTsKCgkJLy8gbmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3Np dGlvbiBpZiBlaXRoZXIgdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24g aXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkCgkJaWYgKCBjYWxjdWxhdGVQb3Np dGlvbiApIHsKCQkJY3VyUG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7CgkJ CWN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDsKCQkJY3VyTGVmdCA9IGN1clBvc2l0 aW9uLmxlZnQ7CgkJfSBlbHNlIHsKCQkJY3VyVG9wID0gcGFyc2VGbG9hdCggY3Vy Q1NTVG9wICkgfHwgMDsKCQkJY3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xl ZnQgKSB8fCAwOwoJCX0KCgkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0aW9u cyApICkgewoJCQlvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBjdXJP ZmZzZXQgKTsKCQl9CgoJCWlmICggb3B0aW9ucy50b3AgIT0gbnVsbCApIHsKCQkJ cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1 clRvcDsKCQl9CgkJaWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHsKCQkJcHJv cHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1 ckxlZnQ7CgkJfQoKCQlpZiAoICJ1c2luZyIgaW4gb3B0aW9ucyApIHsKCQkJb3B0 aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApOwoJCX0gZWxzZSB7CgkJCWN1 ckVsZW0uY3NzKCBwcm9wcyApOwoJCX0KCX0KfTsKCmpRdWVyeS5mbi5leHRlbmQo ewoJb2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHsKCQlpZiAoIGFyZ3VtZW50 cy5sZW5ndGggKSB7CgkJCXJldHVybiBvcHRpb25zID09PSB1bmRlZmluZWQgPwoJ CQkJdGhpcyA6CgkJCQl0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7CgkJCQkJalF1 ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTsKCQkJCX0p OwoJCX0KCgkJdmFyIGRvY0VsZW0sIHdpbiwKCQkJYm94ID0geyB0b3A6IDAsIGxl ZnQ6IDAgfSwKCQkJZWxlbSA9IHRoaXNbIDAgXSwKCQkJZG9jID0gZWxlbSAmJiBl bGVtLm93bmVyRG9jdW1lbnQ7CgoJCWlmICggIWRvYyApIHsKCQkJcmV0dXJuOwoJ CX0KCgkJZG9jRWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7CgoJCS8vIE1ha2Ug c3VyZSBpdCdzIG5vdCBhIGRpc2Nvbm5lY3RlZCBET00gbm9kZQoJCWlmICggIWpR dWVyeS5jb250YWlucyggZG9jRWxlbSwgZWxlbSApICkgewoJCQlyZXR1cm4gYm94 OwoJCX0KCgkJLy8gSWYgd2UgZG9uJ3QgaGF2ZSBnQkNSLCBqdXN0IHVzZSAwLDAg cmF0aGVyIHRoYW4gZXJyb3IKCQkvLyBCbGFja0JlcnJ5IDUsIGlPUyAzIChvcmln aW5hbCBpUGhvbmUpCgkJaWYgKCB0eXBlb2YgZWxlbS5nZXRCb3VuZGluZ0NsaWVu dFJlY3QgIT09IHN0cnVuZGVmaW5lZCApIHsKCQkJYm94ID0gZWxlbS5nZXRCb3Vu ZGluZ0NsaWVudFJlY3QoKTsKCQl9CgkJd2luID0gZ2V0V2luZG93KCBkb2MgKTsK CQlyZXR1cm4gewoJCQl0b3A6IGJveC50b3AgICsgKCB3aW4ucGFnZVlPZmZzZXQg fHwgZG9jRWxlbS5zY3JvbGxUb3AgKSAgLSAoIGRvY0VsZW0uY2xpZW50VG9wICB8 fCAwICksCgkJCWxlZnQ6IGJveC5sZWZ0ICsgKCB3aW4ucGFnZVhPZmZzZXQgfHwg ZG9jRWxlbS5zY3JvbGxMZWZ0ICkgLSAoIGRvY0VsZW0uY2xpZW50TGVmdCB8fCAw ICkKCQl9OwoJfSwKCglwb3NpdGlvbjogZnVuY3Rpb24oKSB7CgkJaWYgKCAhdGhp c1sgMCBdICkgewoJCQlyZXR1cm47CgkJfQoKCQl2YXIgb2Zmc2V0UGFyZW50LCBv ZmZzZXQsCgkJCXBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH0sCgkJ CWVsZW0gPSB0aGlzWyAwIF07CgoJCS8vIGZpeGVkIGVsZW1lbnRzIGFyZSBvZmZz ZXQgZnJvbSB3aW5kb3cgKHBhcmVudE9mZnNldCA9IHt0b3A6MCwgbGVmdDogMH0s IGJlY2F1c2UgaXQgaXMgaXRzIG9ubHkgb2Zmc2V0IHBhcmVudAoJCWlmICggalF1 ZXJ5LmNzcyggZWxlbSwgInBvc2l0aW9uIiApID09PSAiZml4ZWQiICkgewoJCQkv LyB3ZSBhc3N1bWUgdGhhdCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgaXMgYXZhaWxh YmxlIHdoZW4gY29tcHV0ZWQgcG9zaXRpb24gaXMgZml4ZWQKCQkJb2Zmc2V0ID0g ZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQl9IGVsc2UgewoJCQkvLyBH ZXQgKnJlYWwqIG9mZnNldFBhcmVudAoJCQlvZmZzZXRQYXJlbnQgPSB0aGlzLm9m ZnNldFBhcmVudCgpOwoKCQkJLy8gR2V0IGNvcnJlY3Qgb2Zmc2V0cwoJCQlvZmZz ZXQgPSB0aGlzLm9mZnNldCgpOwoJCQlpZiAoICFqUXVlcnkubm9kZU5hbWUoIG9m ZnNldFBhcmVudFsgMCBdLCAiaHRtbCIgKSApIHsKCQkJCXBhcmVudE9mZnNldCA9 IG9mZnNldFBhcmVudC5vZmZzZXQoKTsKCQkJfQoKCQkJLy8gQWRkIG9mZnNldFBh cmVudCBib3JkZXJzCgkJCXBhcmVudE9mZnNldC50b3AgICs9IGpRdWVyeS5jc3Mo IG9mZnNldFBhcmVudFsgMCBdLCAiYm9yZGVyVG9wV2lkdGgiLCB0cnVlICk7CgkJ CXBhcmVudE9mZnNldC5sZWZ0ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudFsg MCBdLCAiYm9yZGVyTGVmdFdpZHRoIiwgdHJ1ZSApOwoJCX0KCgkJLy8gU3VidHJh Y3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2lucwoJCS8vIG5vdGU6 IHdoZW4gYW4gZWxlbWVudCBoYXMgbWFyZ2luOiBhdXRvIHRoZSBvZmZzZXRMZWZ0 IGFuZCBtYXJnaW5MZWZ0CgkJLy8gYXJlIHRoZSBzYW1lIGluIFNhZmFyaSBjYXVz aW5nIG9mZnNldC5sZWZ0IHRvIGluY29ycmVjdGx5IGJlIDAKCQlyZXR1cm4gewoJ CQl0b3A6ICBvZmZzZXQudG9wICAtIHBhcmVudE9mZnNldC50b3AgLSBqUXVlcnku Y3NzKCBlbGVtLCAibWFyZ2luVG9wIiwgdHJ1ZSApLAoJCQlsZWZ0OiBvZmZzZXQu bGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0IC0galF1ZXJ5LmNzcyggZWxlbSwgIm1h cmdpbkxlZnQiLCB0cnVlKQoJCX07Cgl9LAoKCW9mZnNldFBhcmVudDogZnVuY3Rp b24oKSB7CgkJcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCkgewoJCQl2YXIgb2Zm c2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQgfHwgZG9jRWxlbTsKCgkJCXdo aWxlICggb2Zmc2V0UGFyZW50ICYmICggIWpRdWVyeS5ub2RlTmFtZSggb2Zmc2V0 UGFyZW50LCAiaHRtbCIgKSAmJiBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsICJw b3NpdGlvbiIgKSA9PT0gInN0YXRpYyIgKSApIHsKCQkJCW9mZnNldFBhcmVudCA9 IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7CgkJCX0KCQkJcmV0dXJuIG9mZnNl dFBhcmVudCB8fCBkb2NFbGVtOwoJCX0pOwoJfQp9KTsKCi8vIENyZWF0ZSBzY3Jv bGxMZWZ0IGFuZCBzY3JvbGxUb3AgbWV0aG9kcwpqUXVlcnkuZWFjaCggeyBzY3Jv bGxMZWZ0OiAicGFnZVhPZmZzZXQiLCBzY3JvbGxUb3A6ICJwYWdlWU9mZnNldCIg fSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHsKCXZhciB0b3AgPSAvWS8udGVz dCggcHJvcCApOwoKCWpRdWVyeS5mblsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdmFs ICkgewoJCXJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBtZXRo b2QsIHZhbCApIHsKCQkJdmFyIHdpbiA9IGdldFdpbmRvdyggZWxlbSApOwoKCQkJ aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHsKCQkJCXJldHVybiB3aW4gPyAocHJv cCBpbiB3aW4pID8gd2luWyBwcm9wIF0gOgoJCQkJCXdpbi5kb2N1bWVudC5kb2N1 bWVudEVsZW1lbnRbIG1ldGhvZCBdIDoKCQkJCQllbGVtWyBtZXRob2QgXTsKCQkJ fQoKCQkJaWYgKCB3aW4gKSB7CgkJCQl3aW4uc2Nyb2xsVG8oCgkJCQkJIXRvcCA/ IHZhbCA6IGpRdWVyeSggd2luICkuc2Nyb2xsTGVmdCgpLAoJCQkJCXRvcCA/IHZh bCA6IGpRdWVyeSggd2luICkuc2Nyb2xsVG9wKCkKCQkJCSk7CgoJCQl9IGVsc2Ug ewoJCQkJZWxlbVsgbWV0aG9kIF0gPSB2YWw7CgkJCX0KCQl9LCBtZXRob2QsIHZh bCwgYXJndW1lbnRzLmxlbmd0aCwgbnVsbCApOwoJfTsKfSk7CgovLyBBZGQgdGhl IHRvcC9sZWZ0IGNzc0hvb2tzIHVzaW5nIGpRdWVyeS5mbi5wb3NpdGlvbgovLyBX ZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/ aWQ9MjkwODQKLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hl biBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2JvdHRvbS9yaWdodAovLyByYXRoZXIg dGhhbiBtYWtlIHRoZSBjc3MgbW9kdWxlIGRlcGVuZCBvbiB0aGUgb2Zmc2V0IG1v ZHVsZSwgd2UganVzdCBjaGVjayBmb3IgaXQgaGVyZQpqUXVlcnkuZWFjaCggWyAi dG9wIiwgImxlZnQiIF0sIGZ1bmN0aW9uKCBpLCBwcm9wICkgewoJalF1ZXJ5LmNz c0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3Np dGlvbiwKCQlmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CgkJCWlmICggY29t cHV0ZWQgKSB7CgkJCQljb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApOwoJ CQkJLy8gaWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJhY2sgdG8g b2Zmc2V0CgkJCQlyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgPwoJ CQkJCWpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArICJweCIgOgoJ CQkJCWNvbXB1dGVkOwoJCQl9CgkJfQoJKTsKfSk7CgoKLy8gQ3JlYXRlIGlubmVy SGVpZ2h0LCBpbm5lcldpZHRoLCBoZWlnaHQsIHdpZHRoLCBvdXRlckhlaWdodCBh bmQgb3V0ZXJXaWR0aCBtZXRob2RzCmpRdWVyeS5lYWNoKCB7IEhlaWdodDogImhl aWdodCIsIFdpZHRoOiAid2lkdGgiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkg ewoJalF1ZXJ5LmVhY2goIHsgcGFkZGluZzogImlubmVyIiArIG5hbWUsIGNvbnRl bnQ6IHR5cGUsICIiOiAib3V0ZXIiICsgbmFtZSB9LCBmdW5jdGlvbiggZGVmYXVs dEV4dHJhLCBmdW5jTmFtZSApIHsKCQkvLyBtYXJnaW4gaXMgb25seSBmb3Igb3V0 ZXJIZWlnaHQsIG91dGVyV2lkdGgKCQlqUXVlcnkuZm5bIGZ1bmNOYW1lIF0gPSBm dW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHsKCQkJdmFyIGNoYWluYWJsZSA9IGFy Z3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdp biAhPT0gImJvb2xlYW4iICksCgkJCQlleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAo IG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/ICJtYXJnaW4iIDog ImJvcmRlciIgKTsKCgkJCXJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBl bGVtLCB0eXBlLCB2YWx1ZSApIHsKCQkJCXZhciBkb2M7CgoJCQkJaWYgKCBqUXVl cnkuaXNXaW5kb3coIGVsZW0gKSApIHsKCQkJCQkvLyBBcyBvZiA1LzgvMjAxMiB0 aGlzIHdpbGwgeWllbGQgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIE1vYmlsZSBTYWZh cmksIGJ1dCB0aGVyZQoJCQkJCS8vIGlzbid0IGEgd2hvbGUgbG90IHdlIGNhbiBk by4gU2VlIHB1bGwgcmVxdWVzdCBhdCB0aGlzIFVSTCBmb3IgZGlzY3Vzc2lvbjoK CQkJCQkvLyBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzc2 NAoJCQkJCXJldHVybiBlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgImNs aWVudCIgKyBuYW1lIF07CgkJCQl9CgoJCQkJLy8gR2V0IGRvY3VtZW50IHdpZHRo IG9yIGhlaWdodAoJCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkgewoJCQkJ CWRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50OwoKCQkJCQkvLyBFaXRoZXIgc2Ny b2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xp ZW50W1dpZHRoL0hlaWdodF0sIHdoaWNoZXZlciBpcyBncmVhdGVzdAoJCQkJCS8v IHVuZm9ydHVuYXRlbHksIHRoaXMgY2F1c2VzIGJ1ZyAjMzgzOCBpbiBJRTYvOCBv bmx5LCBidXQgdGhlcmUgaXMgY3VycmVudGx5IG5vIGdvb2QsIHNtYWxsIHdheSB0 byBmaXggaXQuCgkJCQkJcmV0dXJuIE1hdGgubWF4KAoJCQkJCQllbGVtLmJvZHlb ICJzY3JvbGwiICsgbmFtZSBdLCBkb2NbICJzY3JvbGwiICsgbmFtZSBdLAoJCQkJ CQllbGVtLmJvZHlbICJvZmZzZXQiICsgbmFtZSBdLCBkb2NbICJvZmZzZXQiICsg bmFtZSBdLAoJCQkJCQlkb2NbICJjbGllbnQiICsgbmFtZSBdCgkJCQkJKTsKCQkJ CX0KCgkJCQlyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/CgkJCQkJLy8gR2V0 IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQg bm90IGZvcmNpbmcgcGFyc2VGbG9hdAoJCQkJCWpRdWVyeS5jc3MoIGVsZW0sIHR5 cGUsIGV4dHJhICkgOgoKCQkJCQkvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRo ZSBlbGVtZW50CgkJCQkJalF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2YWx1ZSwg ZXh0cmEgKTsKCQkJfSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZp bmVkLCBjaGFpbmFibGUsIG51bGwgKTsKCQl9OwoJfSk7Cn0pOwoKCi8vIFRoZSBu dW1iZXIgb2YgZWxlbWVudHMgY29udGFpbmVkIGluIHRoZSBtYXRjaGVkIGVsZW1l bnQgc2V0CmpRdWVyeS5mbi5zaXplID0gZnVuY3Rpb24oKSB7CglyZXR1cm4gdGhp cy5sZW5ndGg7Cn07CgpqUXVlcnkuZm4uYW5kU2VsZiA9IGpRdWVyeS5mbi5hZGRC YWNrOwoKCgoKLy8gUmVnaXN0ZXIgYXMgYSBuYW1lZCBBTUQgbW9kdWxlLCBzaW5j ZSBqUXVlcnkgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoIG90aGVyCi8vIGZpbGVz IHRoYXQgbWF5IHVzZSBkZWZpbmUsIGJ1dCBub3QgdmlhIGEgcHJvcGVyIGNvbmNh dGVuYXRpb24gc2NyaXB0IHRoYXQKLy8gdW5kZXJzdGFuZHMgYW5vbnltb3VzIEFN RCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0 Ci8vIHdheSB0byByZWdpc3Rlci4gTG93ZXJjYXNlIGpxdWVyeSBpcyB1c2VkIGJl Y2F1c2UgQU1EIG1vZHVsZSBuYW1lcyBhcmUKLy8gZGVyaXZlZCBmcm9tIGZpbGUg bmFtZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93 ZXJjYXNlCi8vIGZpbGUgbmFtZS4gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUg Z2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50cwovLyB0byBjYWxs IG5vQ29uZmxpY3QgdG8gaGlkZSB0aGlzIHZlcnNpb24gb2YgalF1ZXJ5LCBpdCB3 aWxsIHdvcmsuCmlmICggdHlwZW9mIGRlZmluZSA9PT0gImZ1bmN0aW9uIiAmJiBk ZWZpbmUuYW1kICkgewoJZGVmaW5lKCAianF1ZXJ5IiwgW10sIGZ1bmN0aW9uKCkg ewoJCXJldHVybiBqUXVlcnk7Cgl9KTsKfQoKCgoKdmFyCgkvLyBNYXAgb3ZlciBq UXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGUKCV9qUXVlcnkgPSB3aW5kb3cualF1 ZXJ5LAoKCS8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlCglf JCA9IHdpbmRvdy4kOwoKalF1ZXJ5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiggZGVl cCApIHsKCWlmICggd2luZG93LiQgPT09IGpRdWVyeSApIHsKCQl3aW5kb3cuJCA9 IF8kOwoJfQoKCWlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkg KSB7CgkJd2luZG93LmpRdWVyeSA9IF9qUXVlcnk7Cgl9CgoJcmV0dXJuIGpRdWVy eTsKfTsKCi8vIEV4cG9zZSBqUXVlcnkgYW5kICQgaWRlbnRpZmllcnMsIGV2ZW4g aW4KLy8gQU1EICgjNzEwMiNjb21tZW50OjEwLCBodHRwczovL2dpdGh1Yi5jb20v anF1ZXJ5L2pxdWVyeS9wdWxsLzU1NykKLy8gYW5kIENvbW1vbkpTIGZvciBicm93 c2VyIGVtdWxhdG9ycyAoIzEzNTY2KQppZiAoIHR5cGVvZiBub0dsb2JhbCA9PT0g c3RydW5kZWZpbmVkICkgewoJd2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1 ZXJ5Owp9CgoKCgpyZXR1cm4galF1ZXJ5OwoKfSkpOwo= ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=bootstrap.js Content-Type: application/x-javascript; name=bootstrap.js Content-Location: http://www.participa2014.cat/resultats/dades/js/bootstrap.js Content-Transfer-Encoding: Base64 LyohCiAqIEJvb3RzdHJhcCB2My4xLjAgKGh0dHA6Ly9nZXRib290c3RyYXAuY29t KQogKiBDb3B5cmlnaHQgMjAxMS0yMDE0IFR3aXR0ZXIsIEluYy4KICogTGljZW5z ZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAv YmxvYi9tYXN0ZXIvTElDRU5TRSkKICovCgppZiAodHlwZW9mIGpRdWVyeSA9PT0g J3VuZGVmaW5lZCcpIHsgdGhyb3cgbmV3IEVycm9yKCdCb290c3RyYXBcJ3MgSmF2 YVNjcmlwdCByZXF1aXJlcyBqUXVlcnknKSB9CgovKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KICogQm9vdHN0cmFwOiB0cmFuc2l0aW9uLmpzIHYzLjEuMAogKiBo dHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9qYXZhc2NyaXB0LyN0cmFuc2l0aW9ucwog KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogQ29weXJpZ2h0IDIwMTEtMjAx NCBUd2l0dGVyLCBJbmMuCiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9n aXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpCiAq ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKCitmdW5jdGlvbiAoJCkgewog ICd1c2Ugc3RyaWN0JzsKCiAgLy8gQ1NTIFRSQU5TSVRJT04gU1VQUE9SVCAoU2hv dXRvdXQ6IGh0dHA6Ly93d3cubW9kZXJuaXpyLmNvbS8pCiAgLy8gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CgogIGZ1bmN0aW9uIHRyYW5zaXRpb25FbmQoKSB7CiAgICB2YXIgZWwgPSBk b2N1bWVudC5jcmVhdGVFbGVtZW50KCdib290c3RyYXAnKQoKICAgIHZhciB0cmFu c0VuZEV2ZW50TmFtZXMgPSB7CiAgICAgICdXZWJraXRUcmFuc2l0aW9uJyA6ICd3 ZWJraXRUcmFuc2l0aW9uRW5kJywKICAgICAgJ01velRyYW5zaXRpb24nICAgIDog J3RyYW5zaXRpb25lbmQnLAogICAgICAnT1RyYW5zaXRpb24nICAgICAgOiAnb1Ry YW5zaXRpb25FbmQgb3RyYW5zaXRpb25lbmQnLAogICAgICAndHJhbnNpdGlvbicg ICAgICAgOiAndHJhbnNpdGlvbmVuZCcKICAgIH0KCiAgICBmb3IgKHZhciBuYW1l IGluIHRyYW5zRW5kRXZlbnROYW1lcykgewogICAgICBpZiAoZWwuc3R5bGVbbmFt ZV0gIT09IHVuZGVmaW5lZCkgewogICAgICAgIHJldHVybiB7IGVuZDogdHJhbnNF bmRFdmVudE5hbWVzW25hbWVdIH0KICAgICAgfQogICAgfQoKICAgIHJldHVybiBm YWxzZSAvLyBleHBsaWNpdCBmb3IgaWU4ICggIC5fLikKICB9CgogIC8vIGh0dHA6 Ly9ibG9nLmFsZXhtYWNjYXcuY29tL2Nzcy10cmFuc2l0aW9ucwogICQuZm4uZW11 bGF0ZVRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbiAoZHVyYXRpb24pIHsKICAgIHZh ciBjYWxsZWQgPSBmYWxzZSwgJGVsID0gdGhpcwogICAgJCh0aGlzKS5vbmUoJC5z dXBwb3J0LnRyYW5zaXRpb24uZW5kLCBmdW5jdGlvbiAoKSB7IGNhbGxlZCA9IHRy dWUgfSkKICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHsgaWYgKCFjYWxs ZWQpICQoJGVsKS50cmlnZ2VyKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCkgfQog ICAgc2V0VGltZW91dChjYWxsYmFjaywgZHVyYXRpb24pCiAgICByZXR1cm4gdGhp cwogIH0KCiAgJChmdW5jdGlvbiAoKSB7CiAgICAkLnN1cHBvcnQudHJhbnNpdGlv biA9IHRyYW5zaXRpb25FbmQoKQogIH0pCgp9KGpRdWVyeSk7CgovKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KICogQm9vdHN0cmFwOiBhbGVydC5qcyB2My4xLjAK ICogaHR0cDovL2dldGJvb3RzdHJhcC5jb20vamF2YXNjcmlwdC8jYWxlcnRzCiAq ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBDb3B5cmlnaHQgMjAxMS0yMDE0 IFR3aXR0ZXIsIEluYy4KICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dp dGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSkKICog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ICovCgoKK2Z1bmN0aW9uICgkKSB7CiAg J3VzZSBzdHJpY3QnOwoKICAvLyBBTEVSVCBDTEFTUyBERUZJTklUSU9OCiAgLy8g PT09PT09PT09PT09PT09PT09PT09PQoKICB2YXIgZGlzbWlzcyA9ICdbZGF0YS1k aXNtaXNzPSJhbGVydCJdJwogIHZhciBBbGVydCAgID0gZnVuY3Rpb24gKGVsKSB7 CiAgICAkKGVsKS5vbignY2xpY2snLCBkaXNtaXNzLCB0aGlzLmNsb3NlKQogIH0K CiAgQWxlcnQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKGUpIHsKICAgIHZh ciAkdGhpcyAgICA9ICQodGhpcykKICAgIHZhciBzZWxlY3RvciA9ICR0aGlzLmF0 dHIoJ2RhdGEtdGFyZ2V0JykKCiAgICBpZiAoIXNlbGVjdG9yKSB7CiAgICAgIHNl bGVjdG9yID0gJHRoaXMuYXR0cignaHJlZicpCiAgICAgIHNlbGVjdG9yID0gc2Vs ZWN0b3IgJiYgc2VsZWN0b3IucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCAnJykg Ly8gc3RyaXAgZm9yIGllNwogICAgfQoKICAgIHZhciAkcGFyZW50ID0gJChzZWxl Y3RvcikKCiAgICBpZiAoZSkgZS5wcmV2ZW50RGVmYXVsdCgpCgogICAgaWYgKCEk cGFyZW50Lmxlbmd0aCkgewogICAgICAkcGFyZW50ID0gJHRoaXMuaGFzQ2xhc3Mo J2FsZXJ0JykgPyAkdGhpcyA6ICR0aGlzLnBhcmVudCgpCiAgICB9CgogICAgJHBh cmVudC50cmlnZ2VyKGUgPSAkLkV2ZW50KCdjbG9zZS5icy5hbGVydCcpKQoKICAg IGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm4KCiAgICAkcGFyZW50 LnJlbW92ZUNsYXNzKCdpbicpCgogICAgZnVuY3Rpb24gcmVtb3ZlRWxlbWVudCgp IHsKICAgICAgJHBhcmVudC50cmlnZ2VyKCdjbG9zZWQuYnMuYWxlcnQnKS5yZW1v dmUoKQogICAgfQoKICAgICQuc3VwcG9ydC50cmFuc2l0aW9uICYmICRwYXJlbnQu aGFzQ2xhc3MoJ2ZhZGUnKSA/CiAgICAgICRwYXJlbnQKICAgICAgICAub25lKCQu c3VwcG9ydC50cmFuc2l0aW9uLmVuZCwgcmVtb3ZlRWxlbWVudCkKICAgICAgICAu ZW11bGF0ZVRyYW5zaXRpb25FbmQoMTUwKSA6CiAgICAgIHJlbW92ZUVsZW1lbnQo KQogIH0KCgogIC8vIEFMRVJUIFBMVUdJTiBERUZJTklUSU9OCiAgLy8gPT09PT09 PT09PT09PT09PT09PT09PT0KCiAgdmFyIG9sZCA9ICQuZm4uYWxlcnQKCiAgJC5m bi5hbGVydCA9IGZ1bmN0aW9uIChvcHRpb24pIHsKICAgIHJldHVybiB0aGlzLmVh Y2goZnVuY3Rpb24gKCkgewogICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpCiAgICAg IHZhciBkYXRhICA9ICR0aGlzLmRhdGEoJ2JzLmFsZXJ0JykKCiAgICAgIGlmICgh ZGF0YSkgJHRoaXMuZGF0YSgnYnMuYWxlcnQnLCAoZGF0YSA9IG5ldyBBbGVydCh0 aGlzKSkpCiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRh W29wdGlvbl0uY2FsbCgkdGhpcykKICAgIH0pCiAgfQoKICAkLmZuLmFsZXJ0LkNv bnN0cnVjdG9yID0gQWxlcnQKCgogIC8vIEFMRVJUIE5PIENPTkZMSUNUCiAgLy8g PT09PT09PT09PT09PT09PT0KCiAgJC5mbi5hbGVydC5ub0NvbmZsaWN0ID0gZnVu Y3Rpb24gKCkgewogICAgJC5mbi5hbGVydCA9IG9sZAogICAgcmV0dXJuIHRoaXMK ICB9CgoKICAvLyBBTEVSVCBEQVRBLUFQSQogIC8vID09PT09PT09PT09PT09Cgog ICQoZG9jdW1lbnQpLm9uKCdjbGljay5icy5hbGVydC5kYXRhLWFwaScsIGRpc21p c3MsIEFsZXJ0LnByb3RvdHlwZS5jbG9zZSkKCn0oalF1ZXJ5KTsKCi8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQogKiBCb290c3RyYXA6IGJ1dHRvbi5qcyB2My4x LjAKICogaHR0cDovL2dldGJvb3RzdHJhcC5jb20vamF2YXNjcmlwdC8jYnV0dG9u cwogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogQ29weXJpZ2h0IDIwMTEt MjAxNCBUd2l0dGVyLCBJbmMuCiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6 Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0Up CiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKCitmdW5jdGlvbiAoJCkg ewogICd1c2Ugc3RyaWN0JzsKCiAgLy8gQlVUVE9OIFBVQkxJQyBDTEFTUyBERUZJ TklUSU9OCiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogIHZh ciBCdXR0b24gPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykgewogICAgdGhp cy4kZWxlbWVudCAgPSAkKGVsZW1lbnQpCiAgICB0aGlzLm9wdGlvbnMgICA9ICQu ZXh0ZW5kKHt9LCBCdXR0b24uREVGQVVMVFMsIG9wdGlvbnMpCiAgICB0aGlzLmlz TG9hZGluZyA9IGZhbHNlCiAgfQoKICBCdXR0b24uREVGQVVMVFMgPSB7CiAgICBs b2FkaW5nVGV4dDogJ2xvYWRpbmcuLi4nCiAgfQoKICBCdXR0b24ucHJvdG90eXBl LnNldFN0YXRlID0gZnVuY3Rpb24gKHN0YXRlKSB7CiAgICB2YXIgZCAgICA9ICdk aXNhYmxlZCcKICAgIHZhciAkZWwgID0gdGhpcy4kZWxlbWVudAogICAgdmFyIHZh bCAgPSAkZWwuaXMoJ2lucHV0JykgPyAndmFsJyA6ICdodG1sJwogICAgdmFyIGRh dGEgPSAkZWwuZGF0YSgpCgogICAgc3RhdGUgPSBzdGF0ZSArICdUZXh0JwoKICAg IGlmICghZGF0YS5yZXNldFRleHQpICRlbC5kYXRhKCdyZXNldFRleHQnLCAkZWxb dmFsXSgpKQoKICAgICRlbFt2YWxdKGRhdGFbc3RhdGVdIHx8IHRoaXMub3B0aW9u c1tzdGF0ZV0pCgogICAgLy8gcHVzaCB0byBldmVudCBsb29wIHRvIGFsbG93IGZv cm1zIHRvIHN1Ym1pdAogICAgc2V0VGltZW91dCgkLnByb3h5KGZ1bmN0aW9uICgp IHsKICAgICAgaWYgKHN0YXRlID09ICdsb2FkaW5nVGV4dCcpIHsKICAgICAgICB0 aGlzLmlzTG9hZGluZyA9IHRydWUKICAgICAgICAkZWwuYWRkQ2xhc3MoZCkuYXR0 cihkLCBkKQogICAgICB9IGVsc2UgaWYgKHRoaXMuaXNMb2FkaW5nKSB7CiAgICAg ICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZQogICAgICAgICRlbC5yZW1vdmVDbGFz cyhkKS5yZW1vdmVBdHRyKGQpCiAgICAgIH0KICAgIH0sIHRoaXMpLCAwKQogIH0K CiAgQnV0dG9uLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAoKSB7CiAgICB2 YXIgY2hhbmdlZCA9IHRydWUKICAgIHZhciAkcGFyZW50ID0gdGhpcy4kZWxlbWVu dC5jbG9zZXN0KCdbZGF0YS10b2dnbGU9ImJ1dHRvbnMiXScpCgogICAgaWYgKCRw YXJlbnQubGVuZ3RoKSB7CiAgICAgIHZhciAkaW5wdXQgPSB0aGlzLiRlbGVtZW50 LmZpbmQoJ2lucHV0JykKICAgICAgaWYgKCRpbnB1dC5wcm9wKCd0eXBlJykgPT0g J3JhZGlvJykgewogICAgICAgIGlmICgkaW5wdXQucHJvcCgnY2hlY2tlZCcpICYm IHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2FjdGl2ZScpKSBjaGFuZ2VkID0gZmFs c2UKICAgICAgICBlbHNlICRwYXJlbnQuZmluZCgnLmFjdGl2ZScpLnJlbW92ZUNs YXNzKCdhY3RpdmUnKQogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkKSAkaW5wdXQu cHJvcCgnY2hlY2tlZCcsICF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdhY3RpdmUn KSkudHJpZ2dlcignY2hhbmdlJykKICAgIH0KCiAgICBpZiAoY2hhbmdlZCkgdGhp cy4kZWxlbWVudC50b2dnbGVDbGFzcygnYWN0aXZlJykKICB9CgoKICAvLyBCVVRU T04gUExVR0lOIERFRklOSVRJT04KICAvLyA9PT09PT09PT09PT09PT09PT09PT09 PT0KCiAgdmFyIG9sZCA9ICQuZm4uYnV0dG9uCgogICQuZm4uYnV0dG9uID0gZnVu Y3Rpb24gKG9wdGlvbikgewogICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAo KSB7CiAgICAgIHZhciAkdGhpcyAgID0gJCh0aGlzKQogICAgICB2YXIgZGF0YSAg ICA9ICR0aGlzLmRhdGEoJ2JzLmJ1dHRvbicpCiAgICAgIHZhciBvcHRpb25zID0g dHlwZW9mIG9wdGlvbiA9PSAnb2JqZWN0JyAmJiBvcHRpb24KCiAgICAgIGlmICgh ZGF0YSkgJHRoaXMuZGF0YSgnYnMuYnV0dG9uJywgKGRhdGEgPSBuZXcgQnV0dG9u KHRoaXMsIG9wdGlvbnMpKSkKCiAgICAgIGlmIChvcHRpb24gPT0gJ3RvZ2dsZScp IGRhdGEudG9nZ2xlKCkKICAgICAgZWxzZSBpZiAob3B0aW9uKSBkYXRhLnNldFN0 YXRlKG9wdGlvbikKICAgIH0pCiAgfQoKICAkLmZuLmJ1dHRvbi5Db25zdHJ1Y3Rv ciA9IEJ1dHRvbgoKCiAgLy8gQlVUVE9OIE5PIENPTkZMSUNUCiAgLy8gPT09PT09 PT09PT09PT09PT09CgogICQuZm4uYnV0dG9uLm5vQ29uZmxpY3QgPSBmdW5jdGlv biAoKSB7CiAgICAkLmZuLmJ1dHRvbiA9IG9sZAogICAgcmV0dXJuIHRoaXMKICB9 CgoKICAvLyBCVVRUT04gREFUQS1BUEkKICAvLyA9PT09PT09PT09PT09PT0KCiAg JChkb2N1bWVudCkub24oJ2NsaWNrLmJzLmJ1dHRvbi5kYXRhLWFwaScsICdbZGF0 YS10b2dnbGVePWJ1dHRvbl0nLCBmdW5jdGlvbiAoZSkgewogICAgdmFyICRidG4g PSAkKGUudGFyZ2V0KQogICAgaWYgKCEkYnRuLmhhc0NsYXNzKCdidG4nKSkgJGJ0 biA9ICRidG4uY2xvc2VzdCgnLmJ0bicpCiAgICAkYnRuLmJ1dHRvbigndG9nZ2xl JykKICAgIGUucHJldmVudERlZmF1bHQoKQogIH0pCgp9KGpRdWVyeSk7CgovKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KICogQm9vdHN0cmFwOiBjYXJvdXNlbC5q cyB2My4xLjAKICogaHR0cDovL2dldGJvb3RzdHJhcC5jb20vamF2YXNjcmlwdC8j Y2Fyb3VzZWwKICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIENvcHlyaWdo dCAyMDExLTIwMTQgVHdpdHRlciwgSW5jLgogKiBMaWNlbnNlZCB1bmRlciBNSVQg KGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9M SUNFTlNFKQogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCgorZnVuY3Rp b24gKCQpIHsKICAndXNlIHN0cmljdCc7CgogIC8vIENBUk9VU0VMIENMQVNTIERF RklOSVRJT04KICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09CgogIHZhciBD YXJvdXNlbCA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7CiAgICB0aGlz LiRlbGVtZW50ICAgID0gJChlbGVtZW50KQogICAgdGhpcy4kaW5kaWNhdG9ycyA9 IHRoaXMuJGVsZW1lbnQuZmluZCgnLmNhcm91c2VsLWluZGljYXRvcnMnKQogICAg dGhpcy5vcHRpb25zICAgICA9IG9wdGlvbnMKICAgIHRoaXMucGF1c2VkICAgICAg PQogICAgdGhpcy5zbGlkaW5nICAgICA9CiAgICB0aGlzLmludGVydmFsICAgID0K ICAgIHRoaXMuJGFjdGl2ZSAgICAgPQogICAgdGhpcy4kaXRlbXMgICAgICA9IG51 bGwKCiAgICB0aGlzLm9wdGlvbnMucGF1c2UgPT0gJ2hvdmVyJyAmJiB0aGlzLiRl bGVtZW50CiAgICAgIC5vbignbW91c2VlbnRlcicsICQucHJveHkodGhpcy5wYXVz ZSwgdGhpcykpCiAgICAgIC5vbignbW91c2VsZWF2ZScsICQucHJveHkodGhpcy5j eWNsZSwgdGhpcykpCiAgfQoKICBDYXJvdXNlbC5ERUZBVUxUUyA9IHsKICAgIGlu dGVydmFsOiA1MDAwLAogICAgcGF1c2U6ICdob3ZlcicsCiAgICB3cmFwOiB0cnVl CiAgfQoKICBDYXJvdXNlbC5wcm90b3R5cGUuY3ljbGUgPSAgZnVuY3Rpb24gKGUp IHsKICAgIGUgfHwgKHRoaXMucGF1c2VkID0gZmFsc2UpCgogICAgdGhpcy5pbnRl cnZhbCAmJiBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpCgogICAgdGhpcy5v cHRpb25zLmludGVydmFsCiAgICAgICYmICF0aGlzLnBhdXNlZAogICAgICAmJiAo dGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKCQucHJveHkodGhpcy5uZXh0LCB0 aGlzKSwgdGhpcy5vcHRpb25zLmludGVydmFsKSkKCiAgICByZXR1cm4gdGhpcwog IH0KCiAgQ2Fyb3VzZWwucHJvdG90eXBlLmdldEFjdGl2ZUluZGV4ID0gZnVuY3Rp b24gKCkgewogICAgdGhpcy4kYWN0aXZlID0gdGhpcy4kZWxlbWVudC5maW5kKCcu aXRlbS5hY3RpdmUnKQogICAgdGhpcy4kaXRlbXMgID0gdGhpcy4kYWN0aXZlLnBh cmVudCgpLmNoaWxkcmVuKCkKCiAgICByZXR1cm4gdGhpcy4kaXRlbXMuaW5kZXgo dGhpcy4kYWN0aXZlKQogIH0KCiAgQ2Fyb3VzZWwucHJvdG90eXBlLnRvID0gZnVu Y3Rpb24gKHBvcykgewogICAgdmFyIHRoYXQgICAgICAgID0gdGhpcwogICAgdmFy IGFjdGl2ZUluZGV4ID0gdGhpcy5nZXRBY3RpdmVJbmRleCgpCgogICAgaWYgKHBv cyA+ICh0aGlzLiRpdGVtcy5sZW5ndGggLSAxKSB8fCBwb3MgPCAwKSByZXR1cm4K CiAgICBpZiAodGhpcy5zbGlkaW5nKSAgICAgICByZXR1cm4gdGhpcy4kZWxlbWVu dC5vbmUoJ3NsaWQuYnMuY2Fyb3VzZWwnLCBmdW5jdGlvbiAoKSB7IHRoYXQudG8o cG9zKSB9KQogICAgaWYgKGFjdGl2ZUluZGV4ID09IHBvcykgcmV0dXJuIHRoaXMu cGF1c2UoKS5jeWNsZSgpCgogICAgcmV0dXJuIHRoaXMuc2xpZGUocG9zID4gYWN0 aXZlSW5kZXggPyAnbmV4dCcgOiAncHJldicsICQodGhpcy4kaXRlbXNbcG9zXSkp CiAgfQoKICBDYXJvdXNlbC5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAoZSkg ewogICAgZSB8fCAodGhpcy5wYXVzZWQgPSB0cnVlKQoKICAgIGlmICh0aGlzLiRl bGVtZW50LmZpbmQoJy5uZXh0LCAucHJldicpLmxlbmd0aCAmJiAkLnN1cHBvcnQu dHJhbnNpdGlvbikgewogICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJC5zdXBw b3J0LnRyYW5zaXRpb24uZW5kKQogICAgICB0aGlzLmN5Y2xlKHRydWUpCiAgICB9 CgogICAgdGhpcy5pbnRlcnZhbCA9IGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZh bCkKCiAgICByZXR1cm4gdGhpcwogIH0KCiAgQ2Fyb3VzZWwucHJvdG90eXBlLm5l eHQgPSBmdW5jdGlvbiAoKSB7CiAgICBpZiAodGhpcy5zbGlkaW5nKSByZXR1cm4K ICAgIHJldHVybiB0aGlzLnNsaWRlKCduZXh0JykKICB9CgogIENhcm91c2VsLnBy b3RvdHlwZS5wcmV2ID0gZnVuY3Rpb24gKCkgewogICAgaWYgKHRoaXMuc2xpZGlu ZykgcmV0dXJuCiAgICByZXR1cm4gdGhpcy5zbGlkZSgncHJldicpCiAgfQoKICBD YXJvdXNlbC5wcm90b3R5cGUuc2xpZGUgPSBmdW5jdGlvbiAodHlwZSwgbmV4dCkg ewogICAgdmFyICRhY3RpdmUgICA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLml0ZW0u YWN0aXZlJykKICAgIHZhciAkbmV4dCAgICAgPSBuZXh0IHx8ICRhY3RpdmVbdHlw ZV0oKQogICAgdmFyIGlzQ3ljbGluZyA9IHRoaXMuaW50ZXJ2YWwKICAgIHZhciBk aXJlY3Rpb24gPSB0eXBlID09ICduZXh0JyA/ICdsZWZ0JyA6ICdyaWdodCcKICAg IHZhciBmYWxsYmFjayAgPSB0eXBlID09ICduZXh0JyA/ICdmaXJzdCcgOiAnbGFz dCcKICAgIHZhciB0aGF0ICAgICAgPSB0aGlzCgogICAgaWYgKCEkbmV4dC5sZW5n dGgpIHsKICAgICAgaWYgKCF0aGlzLm9wdGlvbnMud3JhcCkgcmV0dXJuCiAgICAg ICRuZXh0ID0gdGhpcy4kZWxlbWVudC5maW5kKCcuaXRlbScpW2ZhbGxiYWNrXSgp CiAgICB9CgogICAgaWYgKCRuZXh0Lmhhc0NsYXNzKCdhY3RpdmUnKSkgcmV0dXJu IHRoaXMuc2xpZGluZyA9IGZhbHNlCgogICAgdmFyIGUgPSAkLkV2ZW50KCdzbGlk ZS5icy5jYXJvdXNlbCcsIHsgcmVsYXRlZFRhcmdldDogJG5leHRbMF0sIGRpcmVj dGlvbjogZGlyZWN0aW9uIH0pCiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSkK ICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm4KCiAgICB0aGlz LnNsaWRpbmcgPSB0cnVlCgogICAgaXNDeWNsaW5nICYmIHRoaXMucGF1c2UoKQoK ICAgIGlmICh0aGlzLiRpbmRpY2F0b3JzLmxlbmd0aCkgewogICAgICB0aGlzLiRp bmRpY2F0b3JzLmZpbmQoJy5hY3RpdmUnKS5yZW1vdmVDbGFzcygnYWN0aXZlJykK ICAgICAgdGhpcy4kZWxlbWVudC5vbmUoJ3NsaWQuYnMuY2Fyb3VzZWwnLCBmdW5j dGlvbiAoKSB7CiAgICAgICAgdmFyICRuZXh0SW5kaWNhdG9yID0gJCh0aGF0LiRp bmRpY2F0b3JzLmNoaWxkcmVuKClbdGhhdC5nZXRBY3RpdmVJbmRleCgpXSkKICAg ICAgICAkbmV4dEluZGljYXRvciAmJiAkbmV4dEluZGljYXRvci5hZGRDbGFzcygn YWN0aXZlJykKICAgICAgfSkKICAgIH0KCiAgICBpZiAoJC5zdXBwb3J0LnRyYW5z aXRpb24gJiYgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnc2xpZGUnKSkgewogICAg ICAkbmV4dC5hZGRDbGFzcyh0eXBlKQogICAgICAkbmV4dFswXS5vZmZzZXRXaWR0 aCAvLyBmb3JjZSByZWZsb3cKICAgICAgJGFjdGl2ZS5hZGRDbGFzcyhkaXJlY3Rp b24pCiAgICAgICRuZXh0LmFkZENsYXNzKGRpcmVjdGlvbikKICAgICAgJGFjdGl2 ZQogICAgICAgIC5vbmUoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLCBmdW5jdGlv biAoKSB7CiAgICAgICAgICAkbmV4dC5yZW1vdmVDbGFzcyhbdHlwZSwgZGlyZWN0 aW9uXS5qb2luKCcgJykpLmFkZENsYXNzKCdhY3RpdmUnKQogICAgICAgICAgJGFj dGl2ZS5yZW1vdmVDbGFzcyhbJ2FjdGl2ZScsIGRpcmVjdGlvbl0uam9pbignICcp KQogICAgICAgICAgdGhhdC5zbGlkaW5nID0gZmFsc2UKICAgICAgICAgIHNldFRp bWVvdXQoZnVuY3Rpb24gKCkgeyB0aGF0LiRlbGVtZW50LnRyaWdnZXIoJ3NsaWQu YnMuY2Fyb3VzZWwnKSB9LCAwKQogICAgICAgIH0pCiAgICAgICAgLmVtdWxhdGVU cmFuc2l0aW9uRW5kKCRhY3RpdmUuY3NzKCd0cmFuc2l0aW9uLWR1cmF0aW9uJyku c2xpY2UoMCwgLTEpICogMTAwMCkKICAgIH0gZWxzZSB7CiAgICAgICRhY3RpdmUu cmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpCiAgICAgICRuZXh0LmFkZENsYXNzKCdhY3Rp dmUnKQogICAgICB0aGlzLnNsaWRpbmcgPSBmYWxzZQogICAgICB0aGlzLiRlbGVt ZW50LnRyaWdnZXIoJ3NsaWQuYnMuY2Fyb3VzZWwnKQogICAgfQoKICAgIGlzQ3lj bGluZyAmJiB0aGlzLmN5Y2xlKCkKCiAgICByZXR1cm4gdGhpcwogIH0KCgogIC8v IENBUk9VU0VMIFBMVUdJTiBERUZJTklUSU9OCiAgLy8gPT09PT09PT09PT09PT09 PT09PT09PT09PT0KCiAgdmFyIG9sZCA9ICQuZm4uY2Fyb3VzZWwKCiAgJC5mbi5j YXJvdXNlbCA9IGZ1bmN0aW9uIChvcHRpb24pIHsKICAgIHJldHVybiB0aGlzLmVh Y2goZnVuY3Rpb24gKCkgewogICAgICB2YXIgJHRoaXMgICA9ICQodGhpcykKICAg ICAgdmFyIGRhdGEgICAgPSAkdGhpcy5kYXRhKCdicy5jYXJvdXNlbCcpCiAgICAg IHZhciBvcHRpb25zID0gJC5leHRlbmQoe30sIENhcm91c2VsLkRFRkFVTFRTLCAk dGhpcy5kYXRhKCksIHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9u KQogICAgICB2YXIgYWN0aW9uICA9IHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycg PyBvcHRpb24gOiBvcHRpb25zLnNsaWRlCgogICAgICBpZiAoIWRhdGEpICR0aGlz LmRhdGEoJ2JzLmNhcm91c2VsJywgKGRhdGEgPSBuZXcgQ2Fyb3VzZWwodGhpcywg b3B0aW9ucykpKQogICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnbnVtYmVyJykg ZGF0YS50byhvcHRpb24pCiAgICAgIGVsc2UgaWYgKGFjdGlvbikgZGF0YVthY3Rp b25dKCkKICAgICAgZWxzZSBpZiAob3B0aW9ucy5pbnRlcnZhbCkgZGF0YS5wYXVz ZSgpLmN5Y2xlKCkKICAgIH0pCiAgfQoKICAkLmZuLmNhcm91c2VsLkNvbnN0cnVj dG9yID0gQ2Fyb3VzZWwKCgogIC8vIENBUk9VU0VMIE5PIENPTkZMSUNUCiAgLy8g PT09PT09PT09PT09PT09PT09PT0KCiAgJC5mbi5jYXJvdXNlbC5ub0NvbmZsaWN0 ID0gZnVuY3Rpb24gKCkgewogICAgJC5mbi5jYXJvdXNlbCA9IG9sZAogICAgcmV0 dXJuIHRoaXMKICB9CgoKICAvLyBDQVJPVVNFTCBEQVRBLUFQSQogIC8vID09PT09 PT09PT09PT09PT09CgogICQoZG9jdW1lbnQpLm9uKCdjbGljay5icy5jYXJvdXNl bC5kYXRhLWFwaScsICdbZGF0YS1zbGlkZV0sIFtkYXRhLXNsaWRlLXRvXScsIGZ1 bmN0aW9uIChlKSB7CiAgICB2YXIgJHRoaXMgICA9ICQodGhpcyksIGhyZWYKICAg IHZhciAkdGFyZ2V0ID0gJCgkdGhpcy5hdHRyKCdkYXRhLXRhcmdldCcpIHx8ICho cmVmID0gJHRoaXMuYXR0cignaHJlZicpKSAmJiBocmVmLnJlcGxhY2UoLy4qKD89 I1teXHNdKyQpLywgJycpKSAvL3N0cmlwIGZvciBpZTcKICAgIHZhciBvcHRpb25z ID0gJC5leHRlbmQoe30sICR0YXJnZXQuZGF0YSgpLCAkdGhpcy5kYXRhKCkpCiAg ICB2YXIgc2xpZGVJbmRleCA9ICR0aGlzLmF0dHIoJ2RhdGEtc2xpZGUtdG8nKQog ICAgaWYgKHNsaWRlSW5kZXgpIG9wdGlvbnMuaW50ZXJ2YWwgPSBmYWxzZQoKICAg ICR0YXJnZXQuY2Fyb3VzZWwob3B0aW9ucykKCiAgICBpZiAoc2xpZGVJbmRleCA9 ICR0aGlzLmF0dHIoJ2RhdGEtc2xpZGUtdG8nKSkgewogICAgICAkdGFyZ2V0LmRh dGEoJ2JzLmNhcm91c2VsJykudG8oc2xpZGVJbmRleCkKICAgIH0KCiAgICBlLnBy ZXZlbnREZWZhdWx0KCkKICB9KQoKICAkKHdpbmRvdykub24oJ2xvYWQnLCBmdW5j dGlvbiAoKSB7CiAgICAkKCdbZGF0YS1yaWRlPSJjYXJvdXNlbCJdJykuZWFjaChm dW5jdGlvbiAoKSB7CiAgICAgIHZhciAkY2Fyb3VzZWwgPSAkKHRoaXMpCiAgICAg ICRjYXJvdXNlbC5jYXJvdXNlbCgkY2Fyb3VzZWwuZGF0YSgpKQogICAgfSkKICB9 KQoKfShqUXVlcnkpOwoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIEJv b3RzdHJhcDogY29sbGFwc2UuanMgdjMuMS4wCiAqIGh0dHA6Ly9nZXRib290c3Ry YXAuY29tL2phdmFzY3JpcHQvI2NvbGxhcHNlCiAqID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQogKiBDb3B5cmlnaHQgMjAxMS0yMDE0IFR3aXR0ZXIsIEluYy4KICog TGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290 c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSkKICogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09ICovCgoKK2Z1bmN0aW9uICgkKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAv LyBDT0xMQVBTRSBQVUJMSUMgQ0xBU1MgREVGSU5JVElPTgogIC8vID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CgogIHZhciBDb2xsYXBzZSA9IGZ1bmN0 aW9uIChlbGVtZW50LCBvcHRpb25zKSB7CiAgICB0aGlzLiRlbGVtZW50ICAgICAg PSAkKGVsZW1lbnQpCiAgICB0aGlzLm9wdGlvbnMgICAgICAgPSAkLmV4dGVuZCh7 fSwgQ29sbGFwc2UuREVGQVVMVFMsIG9wdGlvbnMpCiAgICB0aGlzLnRyYW5zaXRp b25pbmcgPSBudWxsCgogICAgaWYgKHRoaXMub3B0aW9ucy5wYXJlbnQpIHRoaXMu JHBhcmVudCA9ICQodGhpcy5vcHRpb25zLnBhcmVudCkKICAgIGlmICh0aGlzLm9w dGlvbnMudG9nZ2xlKSB0aGlzLnRvZ2dsZSgpCiAgfQoKICBDb2xsYXBzZS5ERUZB VUxUUyA9IHsKICAgIHRvZ2dsZTogdHJ1ZQogIH0KCiAgQ29sbGFwc2UucHJvdG90 eXBlLmRpbWVuc2lvbiA9IGZ1bmN0aW9uICgpIHsKICAgIHZhciBoYXNXaWR0aCA9 IHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ3dpZHRoJykKICAgIHJldHVybiBoYXNX aWR0aCA/ICd3aWR0aCcgOiAnaGVpZ2h0JwogIH0KCiAgQ29sbGFwc2UucHJvdG90 eXBlLnNob3cgPSBmdW5jdGlvbiAoKSB7CiAgICBpZiAodGhpcy50cmFuc2l0aW9u aW5nIHx8IHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2luJykpIHJldHVybgoKICAg IHZhciBzdGFydEV2ZW50ID0gJC5FdmVudCgnc2hvdy5icy5jb2xsYXBzZScpCiAg ICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoc3RhcnRFdmVudCkKICAgIGlmIChzdGFy dEV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm4KCiAgICB2YXIgYWN0 aXZlcyA9IHRoaXMuJHBhcmVudCAmJiB0aGlzLiRwYXJlbnQuZmluZCgnPiAucGFu ZWwgPiAuaW4nKQoKICAgIGlmIChhY3RpdmVzICYmIGFjdGl2ZXMubGVuZ3RoKSB7 CiAgICAgIHZhciBoYXNEYXRhID0gYWN0aXZlcy5kYXRhKCdicy5jb2xsYXBzZScp CiAgICAgIGlmIChoYXNEYXRhICYmIGhhc0RhdGEudHJhbnNpdGlvbmluZykgcmV0 dXJuCiAgICAgIGFjdGl2ZXMuY29sbGFwc2UoJ2hpZGUnKQogICAgICBoYXNEYXRh IHx8IGFjdGl2ZXMuZGF0YSgnYnMuY29sbGFwc2UnLCBudWxsKQogICAgfQoKICAg IHZhciBkaW1lbnNpb24gPSB0aGlzLmRpbWVuc2lvbigpCgogICAgdGhpcy4kZWxl bWVudAogICAgICAucmVtb3ZlQ2xhc3MoJ2NvbGxhcHNlJykKICAgICAgLmFkZENs YXNzKCdjb2xsYXBzaW5nJykKICAgICAgW2RpbWVuc2lvbl0oMCkKCiAgICB0aGlz LnRyYW5zaXRpb25pbmcgPSAxCgogICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24g KCkgewogICAgICB0aGlzLiRlbGVtZW50CiAgICAgICAgLnJlbW92ZUNsYXNzKCdj b2xsYXBzaW5nJykKICAgICAgICAuYWRkQ2xhc3MoJ2NvbGxhcHNlIGluJykKICAg ICAgICBbZGltZW5zaW9uXSgnYXV0bycpCiAgICAgIHRoaXMudHJhbnNpdGlvbmlu ZyA9IDAKICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdzaG93bi5icy5jb2xs YXBzZScpCiAgICB9CgogICAgaWYgKCEkLnN1cHBvcnQudHJhbnNpdGlvbikgcmV0 dXJuIGNvbXBsZXRlLmNhbGwodGhpcykKCiAgICB2YXIgc2Nyb2xsU2l6ZSA9ICQu Y2FtZWxDYXNlKFsnc2Nyb2xsJywgZGltZW5zaW9uXS5qb2luKCctJykpCgogICAg dGhpcy4kZWxlbWVudAogICAgICAub25lKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVu ZCwgJC5wcm94eShjb21wbGV0ZSwgdGhpcykpCiAgICAgIC5lbXVsYXRlVHJhbnNp dGlvbkVuZCgzNTApCiAgICAgIFtkaW1lbnNpb25dKHRoaXMuJGVsZW1lbnRbMF1b c2Nyb2xsU2l6ZV0pCiAgfQoKICBDb2xsYXBzZS5wcm90b3R5cGUuaGlkZSA9IGZ1 bmN0aW9uICgpIHsKICAgIGlmICh0aGlzLnRyYW5zaXRpb25pbmcgfHwgIXRoaXMu JGVsZW1lbnQuaGFzQ2xhc3MoJ2luJykpIHJldHVybgoKICAgIHZhciBzdGFydEV2 ZW50ID0gJC5FdmVudCgnaGlkZS5icy5jb2xsYXBzZScpCiAgICB0aGlzLiRlbGVt ZW50LnRyaWdnZXIoc3RhcnRFdmVudCkKICAgIGlmIChzdGFydEV2ZW50LmlzRGVm YXVsdFByZXZlbnRlZCgpKSByZXR1cm4KCiAgICB2YXIgZGltZW5zaW9uID0gdGhp cy5kaW1lbnNpb24oKQoKICAgIHRoaXMuJGVsZW1lbnQKICAgICAgW2RpbWVuc2lv bl0odGhpcy4kZWxlbWVudFtkaW1lbnNpb25dKCkpCiAgICAgIFswXS5vZmZzZXRI ZWlnaHQKCiAgICB0aGlzLiRlbGVtZW50CiAgICAgIC5hZGRDbGFzcygnY29sbGFw c2luZycpCiAgICAgIC5yZW1vdmVDbGFzcygnY29sbGFwc2UnKQogICAgICAucmVt b3ZlQ2xhc3MoJ2luJykKCiAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSAxCgogICAg dmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gKCkgewogICAgICB0aGlzLnRyYW5zaXRp b25pbmcgPSAwCiAgICAgIHRoaXMuJGVsZW1lbnQKICAgICAgICAudHJpZ2dlcign aGlkZGVuLmJzLmNvbGxhcHNlJykKICAgICAgICAucmVtb3ZlQ2xhc3MoJ2NvbGxh cHNpbmcnKQogICAgICAgIC5hZGRDbGFzcygnY29sbGFwc2UnKQogICAgfQoKICAg IGlmICghJC5zdXBwb3J0LnRyYW5zaXRpb24pIHJldHVybiBjb21wbGV0ZS5jYWxs KHRoaXMpCgogICAgdGhpcy4kZWxlbWVudAogICAgICBbZGltZW5zaW9uXSgwKQog ICAgICAub25lKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCwgJC5wcm94eShjb21w bGV0ZSwgdGhpcykpCiAgICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZCgzNTApCiAg fQoKICBDb2xsYXBzZS5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKCkgewog ICAgdGhpc1t0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdpbicpID8gJ2hpZGUnIDog J3Nob3cnXSgpCiAgfQoKCiAgLy8gQ09MTEFQU0UgUExVR0lOIERFRklOSVRJT04K ICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PQoKICB2YXIgb2xkID0gJC5m bi5jb2xsYXBzZQoKICAkLmZuLmNvbGxhcHNlID0gZnVuY3Rpb24gKG9wdGlvbikg ewogICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgIHZhciAk dGhpcyAgID0gJCh0aGlzKQogICAgICB2YXIgZGF0YSAgICA9ICR0aGlzLmRhdGEo J2JzLmNvbGxhcHNlJykKICAgICAgdmFyIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwg Q29sbGFwc2UuREVGQVVMVFMsICR0aGlzLmRhdGEoKSwgdHlwZW9mIG9wdGlvbiA9 PSAnb2JqZWN0JyAmJiBvcHRpb24pCgogICAgICBpZiAoIWRhdGEgJiYgb3B0aW9u cy50b2dnbGUgJiYgb3B0aW9uID09ICdzaG93Jykgb3B0aW9uID0gIW9wdGlvbgog ICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2JzLmNvbGxhcHNlJywgKGRhdGEg PSBuZXcgQ29sbGFwc2UodGhpcywgb3B0aW9ucykpKQogICAgICBpZiAodHlwZW9m IG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKCkKICAgIH0pCiAgfQoK ICAkLmZuLmNvbGxhcHNlLkNvbnN0cnVjdG9yID0gQ29sbGFwc2UKCgogIC8vIENP TExBUFNFIE5PIENPTkZMSUNUCiAgLy8gPT09PT09PT09PT09PT09PT09PT0KCiAg JC5mbi5jb2xsYXBzZS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkgewogICAgJC5m bi5jb2xsYXBzZSA9IG9sZAogICAgcmV0dXJuIHRoaXMKICB9CgoKICAvLyBDT0xM QVBTRSBEQVRBLUFQSQogIC8vID09PT09PT09PT09PT09PT09CgogICQoZG9jdW1l bnQpLm9uKCdjbGljay5icy5jb2xsYXBzZS5kYXRhLWFwaScsICdbZGF0YS10b2dn bGU9Y29sbGFwc2VdJywgZnVuY3Rpb24gKGUpIHsKICAgIHZhciAkdGhpcyAgID0g JCh0aGlzKSwgaHJlZgogICAgdmFyIHRhcmdldCAgPSAkdGhpcy5hdHRyKCdkYXRh LXRhcmdldCcpCiAgICAgICAgfHwgZS5wcmV2ZW50RGVmYXVsdCgpCiAgICAgICAg fHwgKGhyZWYgPSAkdGhpcy5hdHRyKCdocmVmJykpICYmIGhyZWYucmVwbGFjZSgv LiooPz0jW15cc10rJCkvLCAnJykgLy9zdHJpcCBmb3IgaWU3CiAgICB2YXIgJHRh cmdldCA9ICQodGFyZ2V0KQogICAgdmFyIGRhdGEgICAgPSAkdGFyZ2V0LmRhdGEo J2JzLmNvbGxhcHNlJykKICAgIHZhciBvcHRpb24gID0gZGF0YSA/ICd0b2dnbGUn IDogJHRoaXMuZGF0YSgpCiAgICB2YXIgcGFyZW50ICA9ICR0aGlzLmF0dHIoJ2Rh dGEtcGFyZW50JykKICAgIHZhciAkcGFyZW50ID0gcGFyZW50ICYmICQocGFyZW50 KQoKICAgIGlmICghZGF0YSB8fCAhZGF0YS50cmFuc2l0aW9uaW5nKSB7CiAgICAg IGlmICgkcGFyZW50KSAkcGFyZW50LmZpbmQoJ1tkYXRhLXRvZ2dsZT1jb2xsYXBz ZV1bZGF0YS1wYXJlbnQ9IicgKyBwYXJlbnQgKyAnIl0nKS5ub3QoJHRoaXMpLmFk ZENsYXNzKCdjb2xsYXBzZWQnKQogICAgICAkdGhpc1skdGFyZ2V0Lmhhc0NsYXNz KCdpbicpID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKCdjb2xsYXBzZWQn KQogICAgfQoKICAgICR0YXJnZXQuY29sbGFwc2Uob3B0aW9uKQogIH0pCgp9KGpR dWVyeSk7CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogQm9vdHN0cmFw OiBkcm9wZG93bi5qcyB2My4xLjAKICogaHR0cDovL2dldGJvb3RzdHJhcC5jb20v amF2YXNjcmlwdC8jZHJvcGRvd25zCiAqID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQogKiBDb3B5cmlnaHQgMjAxMS0yMDE0IFR3aXR0ZXIsIEluYy4KICogTGljZW5z ZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAv YmxvYi9tYXN0ZXIvTElDRU5TRSkKICogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ICovCgoKK2Z1bmN0aW9uICgkKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvLyBEUk9Q RE9XTiBDTEFTUyBERUZJTklUSU9OCiAgLy8gPT09PT09PT09PT09PT09PT09PT09 PT09PQoKICB2YXIgYmFja2Ryb3AgPSAnLmRyb3Bkb3duLWJhY2tkcm9wJwogIHZh ciB0b2dnbGUgICA9ICdbZGF0YS10b2dnbGU9ZHJvcGRvd25dJwogIHZhciBEcm9w ZG93biA9IGZ1bmN0aW9uIChlbGVtZW50KSB7CiAgICAkKGVsZW1lbnQpLm9uKCdj bGljay5icy5kcm9wZG93bicsIHRoaXMudG9nZ2xlKQogIH0KCiAgRHJvcGRvd24u cHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChlKSB7CiAgICB2YXIgJHRoaXMg PSAkKHRoaXMpCgogICAgaWYgKCR0aGlzLmlzKCcuZGlzYWJsZWQsIDpkaXNhYmxl ZCcpKSByZXR1cm4KCiAgICB2YXIgJHBhcmVudCAgPSBnZXRQYXJlbnQoJHRoaXMp CiAgICB2YXIgaXNBY3RpdmUgPSAkcGFyZW50Lmhhc0NsYXNzKCdvcGVuJykKCiAg ICBjbGVhck1lbnVzKCkKCiAgICBpZiAoIWlzQWN0aXZlKSB7CiAgICAgIGlmICgn b250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgISRw YXJlbnQuY2xvc2VzdCgnLm5hdmJhci1uYXYnKS5sZW5ndGgpIHsKICAgICAgICAv LyBpZiBtb2JpbGUgd2UgdXNlIGEgYmFja2Ryb3AgYmVjYXVzZSBjbGljayBldmVu dHMgZG9uJ3QgZGVsZWdhdGUKICAgICAgICAkKCc8ZGl2IGNsYXNzPSJkcm9wZG93 bi1iYWNrZHJvcCIvPicpLmluc2VydEFmdGVyKCQodGhpcykpLm9uKCdjbGljaycs IGNsZWFyTWVudXMpCiAgICAgIH0KCiAgICAgIHZhciByZWxhdGVkVGFyZ2V0ID0g eyByZWxhdGVkVGFyZ2V0OiB0aGlzIH0KICAgICAgJHBhcmVudC50cmlnZ2VyKGUg PSAkLkV2ZW50KCdzaG93LmJzLmRyb3Bkb3duJywgcmVsYXRlZFRhcmdldCkpCgog ICAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuCgogICAgICAk cGFyZW50CiAgICAgICAgLnRvZ2dsZUNsYXNzKCdvcGVuJykKICAgICAgICAudHJp Z2dlcignc2hvd24uYnMuZHJvcGRvd24nLCByZWxhdGVkVGFyZ2V0KQoKICAgICAg JHRoaXMuZm9jdXMoKQogICAgfQoKICAgIHJldHVybiBmYWxzZQogIH0KCiAgRHJv cGRvd24ucHJvdG90eXBlLmtleWRvd24gPSBmdW5jdGlvbiAoZSkgewogICAgaWYg KCEvKDM4fDQwfDI3KS8udGVzdChlLmtleUNvZGUpKSByZXR1cm4KCiAgICB2YXIg JHRoaXMgPSAkKHRoaXMpCgogICAgZS5wcmV2ZW50RGVmYXVsdCgpCiAgICBlLnN0 b3BQcm9wYWdhdGlvbigpCgogICAgaWYgKCR0aGlzLmlzKCcuZGlzYWJsZWQsIDpk aXNhYmxlZCcpKSByZXR1cm4KCiAgICB2YXIgJHBhcmVudCAgPSBnZXRQYXJlbnQo JHRoaXMpCiAgICB2YXIgaXNBY3RpdmUgPSAkcGFyZW50Lmhhc0NsYXNzKCdvcGVu JykKCiAgICBpZiAoIWlzQWN0aXZlIHx8IChpc0FjdGl2ZSAmJiBlLmtleUNvZGUg PT0gMjcpKSB7CiAgICAgIGlmIChlLndoaWNoID09IDI3KSAkcGFyZW50LmZpbmQo dG9nZ2xlKS5mb2N1cygpCiAgICAgIHJldHVybiAkdGhpcy5jbGljaygpCiAgICB9 CgogICAgdmFyIGRlc2MgPSAnIGxpOm5vdCguZGl2aWRlcik6dmlzaWJsZSBhJwog ICAgdmFyICRpdGVtcyA9ICRwYXJlbnQuZmluZCgnW3JvbGU9bWVudV0nICsgZGVz YyArICcsIFtyb2xlPWxpc3Rib3hdJyArIGRlc2MpCgogICAgaWYgKCEkaXRlbXMu bGVuZ3RoKSByZXR1cm4KCiAgICB2YXIgaW5kZXggPSAkaXRlbXMuaW5kZXgoJGl0 ZW1zLmZpbHRlcignOmZvY3VzJykpCgogICAgaWYgKGUua2V5Q29kZSA9PSAzOCAm JiBpbmRleCA+IDApICAgICAgICAgICAgICAgICBpbmRleC0tICAgICAgICAgICAg ICAgICAgICAgICAgLy8gdXAKICAgIGlmIChlLmtleUNvZGUgPT0gNDAgJiYgaW5k ZXggPCAkaXRlbXMubGVuZ3RoIC0gMSkgaW5kZXgrKyAgICAgICAgICAgICAgICAg ICAgICAgIC8vIGRvd24KICAgIGlmICghfmluZGV4KSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSAwCgogICAgJGl0ZW1zLmVxKGlu ZGV4KS5mb2N1cygpCiAgfQoKICBmdW5jdGlvbiBjbGVhck1lbnVzKGUpIHsKICAg ICQoYmFja2Ryb3ApLnJlbW92ZSgpCiAgICAkKHRvZ2dsZSkuZWFjaChmdW5jdGlv biAoKSB7CiAgICAgIHZhciAkcGFyZW50ID0gZ2V0UGFyZW50KCQodGhpcykpCiAg ICAgIHZhciByZWxhdGVkVGFyZ2V0ID0geyByZWxhdGVkVGFyZ2V0OiB0aGlzIH0K ICAgICAgaWYgKCEkcGFyZW50Lmhhc0NsYXNzKCdvcGVuJykpIHJldHVybgogICAg ICAkcGFyZW50LnRyaWdnZXIoZSA9ICQuRXZlbnQoJ2hpZGUuYnMuZHJvcGRvd24n LCByZWxhdGVkVGFyZ2V0KSkKICAgICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVk KCkpIHJldHVybgogICAgICAkcGFyZW50LnJlbW92ZUNsYXNzKCdvcGVuJykudHJp Z2dlcignaGlkZGVuLmJzLmRyb3Bkb3duJywgcmVsYXRlZFRhcmdldCkKICAgIH0p CiAgfQoKICBmdW5jdGlvbiBnZXRQYXJlbnQoJHRoaXMpIHsKICAgIHZhciBzZWxl Y3RvciA9ICR0aGlzLmF0dHIoJ2RhdGEtdGFyZ2V0JykKCiAgICBpZiAoIXNlbGVj dG9yKSB7CiAgICAgIHNlbGVjdG9yID0gJHRoaXMuYXR0cignaHJlZicpCiAgICAg IHNlbGVjdG9yID0gc2VsZWN0b3IgJiYgLyNbQS1aYS16XS8udGVzdChzZWxlY3Rv cikgJiYgc2VsZWN0b3IucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCAnJykgLy9z dHJpcCBmb3IgaWU3CiAgICB9CgogICAgdmFyICRwYXJlbnQgPSBzZWxlY3RvciAm JiAkKHNlbGVjdG9yKQoKICAgIHJldHVybiAkcGFyZW50ICYmICRwYXJlbnQubGVu Z3RoID8gJHBhcmVudCA6ICR0aGlzLnBhcmVudCgpCiAgfQoKCiAgLy8gRFJPUERP V04gUExVR0lOIERFRklOSVRJT04KICAvLyA9PT09PT09PT09PT09PT09PT09PT09 PT09PQoKICB2YXIgb2xkID0gJC5mbi5kcm9wZG93bgoKICAkLmZuLmRyb3Bkb3du ID0gZnVuY3Rpb24gKG9wdGlvbikgewogICAgcmV0dXJuIHRoaXMuZWFjaChmdW5j dGlvbiAoKSB7CiAgICAgIHZhciAkdGhpcyA9ICQodGhpcykKICAgICAgdmFyIGRh dGEgID0gJHRoaXMuZGF0YSgnYnMuZHJvcGRvd24nKQoKICAgICAgaWYgKCFkYXRh KSAkdGhpcy5kYXRhKCdicy5kcm9wZG93bicsIChkYXRhID0gbmV3IERyb3Bkb3du KHRoaXMpKSkKICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRh dGFbb3B0aW9uXS5jYWxsKCR0aGlzKQogICAgfSkKICB9CgogICQuZm4uZHJvcGRv d24uQ29uc3RydWN0b3IgPSBEcm9wZG93bgoKCiAgLy8gRFJPUERPV04gTk8gQ09O RkxJQ1QKICAvLyA9PT09PT09PT09PT09PT09PT09PQoKICAkLmZuLmRyb3Bkb3du Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7CiAgICAkLmZuLmRyb3Bkb3duID0g b2xkCiAgICByZXR1cm4gdGhpcwogIH0KCgogIC8vIEFQUExZIFRPIFNUQU5EQVJE IERST1BET1dOIEVMRU1FTlRTCiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KCiAgJChkb2N1bWVudCkKICAgIC5vbignY2xpY2suYnMuZHJv cGRvd24uZGF0YS1hcGknLCBjbGVhck1lbnVzKQogICAgLm9uKCdjbGljay5icy5k cm9wZG93bi5kYXRhLWFwaScsICcuZHJvcGRvd24gZm9ybScsIGZ1bmN0aW9uIChl KSB7IGUuc3RvcFByb3BhZ2F0aW9uKCkgfSkKICAgIC5vbignY2xpY2suYnMuZHJv cGRvd24uZGF0YS1hcGknLCB0b2dnbGUsIERyb3Bkb3duLnByb3RvdHlwZS50b2dn bGUpCiAgICAub24oJ2tleWRvd24uYnMuZHJvcGRvd24uZGF0YS1hcGknLCB0b2dn bGUgKyAnLCBbcm9sZT1tZW51XSwgW3JvbGU9bGlzdGJveF0nLCBEcm9wZG93bi5w cm90b3R5cGUua2V5ZG93bikKCn0oalF1ZXJ5KTsKCi8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQogKiBCb290c3RyYXA6IG1vZGFsLmpzIHYzLjEuMAogKiBodHRw Oi8vZ2V0Ym9vdHN0cmFwLmNvbS9qYXZhc2NyaXB0LyNtb2RhbHMKICogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CiAqIENvcHlyaWdodCAyMDExLTIwMTQgVHdpdHRl ciwgSW5jLgogKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNv bS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKQogKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0gKi8KCgorZnVuY3Rpb24gKCQpIHsKICAndXNlIHN0 cmljdCc7CgogIC8vIE1PREFMIENMQVNTIERFRklOSVRJT04KICAvLyA9PT09PT09 PT09PT09PT09PT09PT09CgogIHZhciBNb2RhbCA9IGZ1bmN0aW9uIChlbGVtZW50 LCBvcHRpb25zKSB7CiAgICB0aGlzLm9wdGlvbnMgICA9IG9wdGlvbnMKICAgIHRo aXMuJGVsZW1lbnQgID0gJChlbGVtZW50KQogICAgdGhpcy4kYmFja2Ryb3AgPQog ICAgdGhpcy5pc1Nob3duICAgPSBudWxsCgogICAgaWYgKHRoaXMub3B0aW9ucy5y ZW1vdGUpIHsKICAgICAgdGhpcy4kZWxlbWVudAogICAgICAgIC5maW5kKCcubW9k YWwtY29udGVudCcpCiAgICAgICAgLmxvYWQodGhpcy5vcHRpb25zLnJlbW90ZSwg JC5wcm94eShmdW5jdGlvbiAoKSB7CiAgICAgICAgICB0aGlzLiRlbGVtZW50LnRy aWdnZXIoJ2xvYWRlZC5icy5tb2RhbCcpCiAgICAgICAgfSwgdGhpcykpCiAgICB9 CiAgfQoKICBNb2RhbC5ERUZBVUxUUyA9IHsKICAgIGJhY2tkcm9wOiB0cnVlLAog ICAga2V5Ym9hcmQ6IHRydWUsCiAgICBzaG93OiB0cnVlCiAgfQoKICBNb2RhbC5w cm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKF9yZWxhdGVkVGFyZ2V0KSB7CiAg ICByZXR1cm4gdGhpc1shdGhpcy5pc1Nob3duID8gJ3Nob3cnIDogJ2hpZGUnXShf cmVsYXRlZFRhcmdldCkKICB9CgogIE1vZGFsLnByb3RvdHlwZS5zaG93ID0gZnVu Y3Rpb24gKF9yZWxhdGVkVGFyZ2V0KSB7CiAgICB2YXIgdGhhdCA9IHRoaXMKICAg IHZhciBlICAgID0gJC5FdmVudCgnc2hvdy5icy5tb2RhbCcsIHsgcmVsYXRlZFRh cmdldDogX3JlbGF0ZWRUYXJnZXQgfSkKCiAgICB0aGlzLiRlbGVtZW50LnRyaWdn ZXIoZSkKCiAgICBpZiAodGhpcy5pc1Nob3duIHx8IGUuaXNEZWZhdWx0UHJldmVu dGVkKCkpIHJldHVybgoKICAgIHRoaXMuaXNTaG93biA9IHRydWUKCiAgICB0aGlz LmVzY2FwZSgpCgogICAgdGhpcy4kZWxlbWVudC5vbignY2xpY2suZGlzbWlzcy5i cy5tb2RhbCcsICdbZGF0YS1kaXNtaXNzPSJtb2RhbCJdJywgJC5wcm94eSh0aGlz LmhpZGUsIHRoaXMpKQoKICAgIHRoaXMuYmFja2Ryb3AoZnVuY3Rpb24gKCkgewog ICAgICB2YXIgdHJhbnNpdGlvbiA9ICQuc3VwcG9ydC50cmFuc2l0aW9uICYmIHRo YXQuJGVsZW1lbnQuaGFzQ2xhc3MoJ2ZhZGUnKQoKICAgICAgaWYgKCF0aGF0LiRl bGVtZW50LnBhcmVudCgpLmxlbmd0aCkgewogICAgICAgIHRoYXQuJGVsZW1lbnQu YXBwZW5kVG8oZG9jdW1lbnQuYm9keSkgLy8gZG9uJ3QgbW92ZSBtb2RhbHMgZG9t IHBvc2l0aW9uCiAgICAgIH0KCiAgICAgIHRoYXQuJGVsZW1lbnQKICAgICAgICAu c2hvdygpCiAgICAgICAgLnNjcm9sbFRvcCgwKQoKICAgICAgaWYgKHRyYW5zaXRp b24pIHsKICAgICAgICB0aGF0LiRlbGVtZW50WzBdLm9mZnNldFdpZHRoIC8vIGZv cmNlIHJlZmxvdwogICAgICB9CgogICAgICB0aGF0LiRlbGVtZW50CiAgICAgICAg LmFkZENsYXNzKCdpbicpCiAgICAgICAgLmF0dHIoJ2FyaWEtaGlkZGVuJywgZmFs c2UpCgogICAgICB0aGF0LmVuZm9yY2VGb2N1cygpCgogICAgICB2YXIgZSA9ICQu RXZlbnQoJ3Nob3duLmJzLm1vZGFsJywgeyByZWxhdGVkVGFyZ2V0OiBfcmVsYXRl ZFRhcmdldCB9KQoKICAgICAgdHJhbnNpdGlvbiA/CiAgICAgICAgdGhhdC4kZWxl bWVudC5maW5kKCcubW9kYWwtZGlhbG9nJykgLy8gd2FpdCBmb3IgbW9kYWwgdG8g c2xpZGUgaW4KICAgICAgICAgIC5vbmUoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5k LCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoYXQuJGVsZW1lbnQuZm9jdXMo KS50cmlnZ2VyKGUpCiAgICAgICAgICB9KQogICAgICAgICAgLmVtdWxhdGVUcmFu c2l0aW9uRW5kKDMwMCkgOgogICAgICAgIHRoYXQuJGVsZW1lbnQuZm9jdXMoKS50 cmlnZ2VyKGUpCiAgICB9KQogIH0KCiAgTW9kYWwucHJvdG90eXBlLmhpZGUgPSBm dW5jdGlvbiAoZSkgewogICAgaWYgKGUpIGUucHJldmVudERlZmF1bHQoKQoKICAg IGUgPSAkLkV2ZW50KCdoaWRlLmJzLm1vZGFsJykKCiAgICB0aGlzLiRlbGVtZW50 LnRyaWdnZXIoZSkKCiAgICBpZiAoIXRoaXMuaXNTaG93biB8fCBlLmlzRGVmYXVs dFByZXZlbnRlZCgpKSByZXR1cm4KCiAgICB0aGlzLmlzU2hvd24gPSBmYWxzZQoK ICAgIHRoaXMuZXNjYXBlKCkKCiAgICAkKGRvY3VtZW50KS5vZmYoJ2ZvY3VzaW4u YnMubW9kYWwnKQoKICAgIHRoaXMuJGVsZW1lbnQKICAgICAgLnJlbW92ZUNsYXNz KCdpbicpCiAgICAgIC5hdHRyKCdhcmlhLWhpZGRlbicsIHRydWUpCiAgICAgIC5v ZmYoJ2NsaWNrLmRpc21pc3MuYnMubW9kYWwnKQoKICAgICQuc3VwcG9ydC50cmFu c2l0aW9uICYmIHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2ZhZGUnKSA/CiAgICAg IHRoaXMuJGVsZW1lbnQKICAgICAgICAub25lKCQuc3VwcG9ydC50cmFuc2l0aW9u LmVuZCwgJC5wcm94eSh0aGlzLmhpZGVNb2RhbCwgdGhpcykpCiAgICAgICAgLmVt dWxhdGVUcmFuc2l0aW9uRW5kKDMwMCkgOgogICAgICB0aGlzLmhpZGVNb2RhbCgp CiAgfQoKICBNb2RhbC5wcm90b3R5cGUuZW5mb3JjZUZvY3VzID0gZnVuY3Rpb24g KCkgewogICAgJChkb2N1bWVudCkKICAgICAgLm9mZignZm9jdXNpbi5icy5tb2Rh bCcpIC8vIGd1YXJkIGFnYWluc3QgaW5maW5pdGUgZm9jdXMgbG9vcAogICAgICAu b24oJ2ZvY3VzaW4uYnMubW9kYWwnLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7CiAg ICAgICAgaWYgKHRoaXMuJGVsZW1lbnRbMF0gIT09IGUudGFyZ2V0ICYmICF0aGlz LiRlbGVtZW50LmhhcyhlLnRhcmdldCkubGVuZ3RoKSB7CiAgICAgICAgICB0aGlz LiRlbGVtZW50LmZvY3VzKCkKICAgICAgICB9CiAgICAgIH0sIHRoaXMpKQogIH0K CiAgTW9kYWwucHJvdG90eXBlLmVzY2FwZSA9IGZ1bmN0aW9uICgpIHsKICAgIGlm ICh0aGlzLmlzU2hvd24gJiYgdGhpcy5vcHRpb25zLmtleWJvYXJkKSB7CiAgICAg IHRoaXMuJGVsZW1lbnQub24oJ2tleXVwLmRpc21pc3MuYnMubW9kYWwnLCAkLnBy b3h5KGZ1bmN0aW9uIChlKSB7CiAgICAgICAgZS53aGljaCA9PSAyNyAmJiB0aGlz LmhpZGUoKQogICAgICB9LCB0aGlzKSkKICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNT aG93bikgewogICAgICB0aGlzLiRlbGVtZW50Lm9mZigna2V5dXAuZGlzbWlzcy5i cy5tb2RhbCcpCiAgICB9CiAgfQoKICBNb2RhbC5wcm90b3R5cGUuaGlkZU1vZGFs ID0gZnVuY3Rpb24gKCkgewogICAgdmFyIHRoYXQgPSB0aGlzCiAgICB0aGlzLiRl bGVtZW50LmhpZGUoKQogICAgdGhpcy5iYWNrZHJvcChmdW5jdGlvbiAoKSB7CiAg ICAgIHRoYXQucmVtb3ZlQmFja2Ryb3AoKQogICAgICB0aGF0LiRlbGVtZW50LnRy aWdnZXIoJ2hpZGRlbi5icy5tb2RhbCcpCiAgICB9KQogIH0KCiAgTW9kYWwucHJv dG90eXBlLnJlbW92ZUJhY2tkcm9wID0gZnVuY3Rpb24gKCkgewogICAgdGhpcy4k YmFja2Ryb3AgJiYgdGhpcy4kYmFja2Ryb3AucmVtb3ZlKCkKICAgIHRoaXMuJGJh Y2tkcm9wID0gbnVsbAogIH0KCiAgTW9kYWwucHJvdG90eXBlLmJhY2tkcm9wID0g ZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICB2YXIgYW5pbWF0ZSA9IHRoaXMuJGVs ZW1lbnQuaGFzQ2xhc3MoJ2ZhZGUnKSA/ICdmYWRlJyA6ICcnCgogICAgaWYgKHRo aXMuaXNTaG93biAmJiB0aGlzLm9wdGlvbnMuYmFja2Ryb3ApIHsKICAgICAgdmFy IGRvQW5pbWF0ZSA9ICQuc3VwcG9ydC50cmFuc2l0aW9uICYmIGFuaW1hdGUKCiAg ICAgIHRoaXMuJGJhY2tkcm9wID0gJCgnPGRpdiBjbGFzcz0ibW9kYWwtYmFja2Ry b3AgJyArIGFuaW1hdGUgKyAnIiAvPicpCiAgICAgICAgLmFwcGVuZFRvKGRvY3Vt ZW50LmJvZHkpCgogICAgICB0aGlzLiRlbGVtZW50Lm9uKCdjbGljay5kaXNtaXNz LmJzLm1vZGFsJywgJC5wcm94eShmdW5jdGlvbiAoZSkgewogICAgICAgIGlmIChl LnRhcmdldCAhPT0gZS5jdXJyZW50VGFyZ2V0KSByZXR1cm4KICAgICAgICB0aGlz Lm9wdGlvbnMuYmFja2Ryb3AgPT0gJ3N0YXRpYycKICAgICAgICAgID8gdGhpcy4k ZWxlbWVudFswXS5mb2N1cy5jYWxsKHRoaXMuJGVsZW1lbnRbMF0pCiAgICAgICAg ICA6IHRoaXMuaGlkZS5jYWxsKHRoaXMpCiAgICAgIH0sIHRoaXMpKQoKICAgICAg aWYgKGRvQW5pbWF0ZSkgdGhpcy4kYmFja2Ryb3BbMF0ub2Zmc2V0V2lkdGggLy8g Zm9yY2UgcmVmbG93CgogICAgICB0aGlzLiRiYWNrZHJvcC5hZGRDbGFzcygnaW4n KQoKICAgICAgaWYgKCFjYWxsYmFjaykgcmV0dXJuCgogICAgICBkb0FuaW1hdGUg PwogICAgICAgIHRoaXMuJGJhY2tkcm9wCiAgICAgICAgICAub25lKCQuc3VwcG9y dC50cmFuc2l0aW9uLmVuZCwgY2FsbGJhY2spCiAgICAgICAgICAuZW11bGF0ZVRy YW5zaXRpb25FbmQoMTUwKSA6CiAgICAgICAgY2FsbGJhY2soKQoKICAgIH0gZWxz ZSBpZiAoIXRoaXMuaXNTaG93biAmJiB0aGlzLiRiYWNrZHJvcCkgewogICAgICB0 aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcygnaW4nKQoKICAgICAgJC5zdXBwb3J0 LnRyYW5zaXRpb24gJiYgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZmFkZScpID8K ICAgICAgICB0aGlzLiRiYWNrZHJvcAogICAgICAgICAgLm9uZSgkLnN1cHBvcnQu dHJhbnNpdGlvbi5lbmQsIGNhbGxiYWNrKQogICAgICAgICAgLmVtdWxhdGVUcmFu c2l0aW9uRW5kKDE1MCkgOgogICAgICAgIGNhbGxiYWNrKCkKCiAgICB9IGVsc2Ug aWYgKGNhbGxiYWNrKSB7CiAgICAgIGNhbGxiYWNrKCkKICAgIH0KICB9CgoKICAv LyBNT0RBTCBQTFVHSU4gREVGSU5JVElPTgogIC8vID09PT09PT09PT09PT09PT09 PT09PT09CgogIHZhciBvbGQgPSAkLmZuLm1vZGFsCgogICQuZm4ubW9kYWwgPSBm dW5jdGlvbiAob3B0aW9uLCBfcmVsYXRlZFRhcmdldCkgewogICAgcmV0dXJuIHRo aXMuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgIHZhciAkdGhpcyAgID0gJCh0aGlz KQogICAgICB2YXIgZGF0YSAgICA9ICR0aGlzLmRhdGEoJ2JzLm1vZGFsJykKICAg ICAgdmFyIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgTW9kYWwuREVGQVVMVFMsICR0 aGlzLmRhdGEoKSwgdHlwZW9mIG9wdGlvbiA9PSAnb2JqZWN0JyAmJiBvcHRpb24p CgogICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2JzLm1vZGFsJywgKGRhdGEg PSBuZXcgTW9kYWwodGhpcywgb3B0aW9ucykpKQogICAgICBpZiAodHlwZW9mIG9w dGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKF9yZWxhdGVkVGFyZ2V0KQog ICAgICBlbHNlIGlmIChvcHRpb25zLnNob3cpIGRhdGEuc2hvdyhfcmVsYXRlZFRh cmdldCkKICAgIH0pCiAgfQoKICAkLmZuLm1vZGFsLkNvbnN0cnVjdG9yID0gTW9k YWwKCgogIC8vIE1PREFMIE5PIENPTkZMSUNUCiAgLy8gPT09PT09PT09PT09PT09 PT0KCiAgJC5mbi5tb2RhbC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkgewogICAg JC5mbi5tb2RhbCA9IG9sZAogICAgcmV0dXJuIHRoaXMKICB9CgoKICAvLyBNT0RB TCBEQVRBLUFQSQogIC8vID09PT09PT09PT09PT09CgogICQoZG9jdW1lbnQpLm9u KCdjbGljay5icy5tb2RhbC5kYXRhLWFwaScsICdbZGF0YS10b2dnbGU9Im1vZGFs Il0nLCBmdW5jdGlvbiAoZSkgewogICAgdmFyICR0aGlzICAgPSAkKHRoaXMpCiAg ICB2YXIgaHJlZiAgICA9ICR0aGlzLmF0dHIoJ2hyZWYnKQogICAgdmFyICR0YXJn ZXQgPSAkKCR0aGlzLmF0dHIoJ2RhdGEtdGFyZ2V0JykgfHwgKGhyZWYgJiYgaHJl Zi5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sICcnKSkpIC8vc3RyaXAgZm9yIGll NwogICAgdmFyIG9wdGlvbiAgPSAkdGFyZ2V0LmRhdGEoJ2JzLm1vZGFsJykgPyAn dG9nZ2xlJyA6ICQuZXh0ZW5kKHsgcmVtb3RlOiAhLyMvLnRlc3QoaHJlZikgJiYg aHJlZiB9LCAkdGFyZ2V0LmRhdGEoKSwgJHRoaXMuZGF0YSgpKQoKICAgIGlmICgk dGhpcy5pcygnYScpKSBlLnByZXZlbnREZWZhdWx0KCkKCiAgICAkdGFyZ2V0CiAg ICAgIC5tb2RhbChvcHRpb24sIHRoaXMpCiAgICAgIC5vbmUoJ2hpZGUnLCBmdW5j dGlvbiAoKSB7CiAgICAgICAgJHRoaXMuaXMoJzp2aXNpYmxlJykgJiYgJHRoaXMu Zm9jdXMoKQogICAgICB9KQogIH0pCgogICQoZG9jdW1lbnQpCiAgICAub24oJ3No b3cuYnMubW9kYWwnLCAnLm1vZGFsJywgZnVuY3Rpb24gKCkgeyAkKGRvY3VtZW50 LmJvZHkpLmFkZENsYXNzKCdtb2RhbC1vcGVuJykgfSkKICAgIC5vbignaGlkZGVu LmJzLm1vZGFsJywgJy5tb2RhbCcsIGZ1bmN0aW9uICgpIHsgJChkb2N1bWVudC5i b2R5KS5yZW1vdmVDbGFzcygnbW9kYWwtb3BlbicpIH0pCgp9KGpRdWVyeSk7Cgov KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogQm9vdHN0cmFwOiB0b29sdGlw LmpzIHYzLjEuMAogKiBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9qYXZhc2NyaXB0 LyN0b29sdGlwCiAqIEluc3BpcmVkIGJ5IHRoZSBvcmlnaW5hbCBqUXVlcnkudGlw c3kgYnkgSmFzb24gRnJhbWUKICogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAq IENvcHlyaWdodCAyMDExLTIwMTQgVHdpdHRlciwgSW5jLgogKiBMaWNlbnNlZCB1 bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9i L21hc3Rlci9MSUNFTlNFKQogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8K CgorZnVuY3Rpb24gKCQpIHsKICAndXNlIHN0cmljdCc7CgogIC8vIFRPT0xUSVAg UFVCTElDIENMQVNTIERFRklOSVRJT04KICAvLyA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CgogIHZhciBUb29sdGlwID0gZnVuY3Rpb24gKGVsZW1lbnQs IG9wdGlvbnMpIHsKICAgIHRoaXMudHlwZSAgICAgICA9CiAgICB0aGlzLm9wdGlv bnMgICAgPQogICAgdGhpcy5lbmFibGVkICAgID0KICAgIHRoaXMudGltZW91dCAg ICA9CiAgICB0aGlzLmhvdmVyU3RhdGUgPQogICAgdGhpcy4kZWxlbWVudCAgID0g bnVsbAoKICAgIHRoaXMuaW5pdCgndG9vbHRpcCcsIGVsZW1lbnQsIG9wdGlvbnMp CiAgfQoKICBUb29sdGlwLkRFRkFVTFRTID0gewogICAgYW5pbWF0aW9uOiB0cnVl LAogICAgcGxhY2VtZW50OiAndG9wJywKICAgIHNlbGVjdG9yOiBmYWxzZSwKICAg IHRlbXBsYXRlOiAnPGRpdiBjbGFzcz0idG9vbHRpcCI+PGRpdiBjbGFzcz0idG9v bHRpcC1hcnJvdyI+PC9kaXY+PGRpdiBjbGFzcz0idG9vbHRpcC1pbm5lciI+PC9k aXY+PC9kaXY+JywKICAgIHRyaWdnZXI6ICdob3ZlciBmb2N1cycsCiAgICB0aXRs ZTogJycsCiAgICBkZWxheTogMCwKICAgIGh0bWw6IGZhbHNlLAogICAgY29udGFp bmVyOiBmYWxzZQogIH0KCiAgVG9vbHRpcC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0 aW9uICh0eXBlLCBlbGVtZW50LCBvcHRpb25zKSB7CiAgICB0aGlzLmVuYWJsZWQg ID0gdHJ1ZQogICAgdGhpcy50eXBlICAgICA9IHR5cGUKICAgIHRoaXMuJGVsZW1l bnQgPSAkKGVsZW1lbnQpCiAgICB0aGlzLm9wdGlvbnMgID0gdGhpcy5nZXRPcHRp b25zKG9wdGlvbnMpCgogICAgdmFyIHRyaWdnZXJzID0gdGhpcy5vcHRpb25zLnRy aWdnZXIuc3BsaXQoJyAnKQoKICAgIGZvciAodmFyIGkgPSB0cmlnZ2Vycy5sZW5n dGg7IGktLTspIHsKICAgICAgdmFyIHRyaWdnZXIgPSB0cmlnZ2Vyc1tpXQoKICAg ICAgaWYgKHRyaWdnZXIgPT0gJ2NsaWNrJykgewogICAgICAgIHRoaXMuJGVsZW1l bnQub24oJ2NsaWNrLicgKyB0aGlzLnR5cGUsIHRoaXMub3B0aW9ucy5zZWxlY3Rv ciwgJC5wcm94eSh0aGlzLnRvZ2dsZSwgdGhpcykpCiAgICAgIH0gZWxzZSBpZiAo dHJpZ2dlciAhPSAnbWFudWFsJykgewogICAgICAgIHZhciBldmVudEluICA9IHRy aWdnZXIgPT0gJ2hvdmVyJyA/ICdtb3VzZWVudGVyJyA6ICdmb2N1c2luJwogICAg ICAgIHZhciBldmVudE91dCA9IHRyaWdnZXIgPT0gJ2hvdmVyJyA/ICdtb3VzZWxl YXZlJyA6ICdmb2N1c291dCcKCiAgICAgICAgdGhpcy4kZWxlbWVudC5vbihldmVu dEluICArICcuJyArIHRoaXMudHlwZSwgdGhpcy5vcHRpb25zLnNlbGVjdG9yLCAk LnByb3h5KHRoaXMuZW50ZXIsIHRoaXMpKQogICAgICAgIHRoaXMuJGVsZW1lbnQu b24oZXZlbnRPdXQgKyAnLicgKyB0aGlzLnR5cGUsIHRoaXMub3B0aW9ucy5zZWxl Y3RvciwgJC5wcm94eSh0aGlzLmxlYXZlLCB0aGlzKSkKICAgICAgfQogICAgfQoK ICAgIHRoaXMub3B0aW9ucy5zZWxlY3RvciA/CiAgICAgICh0aGlzLl9vcHRpb25z ID0gJC5leHRlbmQoe30sIHRoaXMub3B0aW9ucywgeyB0cmlnZ2VyOiAnbWFudWFs Jywgc2VsZWN0b3I6ICcnIH0pKSA6CiAgICAgIHRoaXMuZml4VGl0bGUoKQogIH0K CiAgVG9vbHRpcC5wcm90b3R5cGUuZ2V0RGVmYXVsdHMgPSBmdW5jdGlvbiAoKSB7 CiAgICByZXR1cm4gVG9vbHRpcC5ERUZBVUxUUwogIH0KCiAgVG9vbHRpcC5wcm90 b3R5cGUuZ2V0T3B0aW9ucyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICBvcHRp b25zID0gJC5leHRlbmQoe30sIHRoaXMuZ2V0RGVmYXVsdHMoKSwgdGhpcy4kZWxl bWVudC5kYXRhKCksIG9wdGlvbnMpCgogICAgaWYgKG9wdGlvbnMuZGVsYXkgJiYg dHlwZW9mIG9wdGlvbnMuZGVsYXkgPT0gJ251bWJlcicpIHsKICAgICAgb3B0aW9u cy5kZWxheSA9IHsKICAgICAgICBzaG93OiBvcHRpb25zLmRlbGF5LAogICAgICAg IGhpZGU6IG9wdGlvbnMuZGVsYXkKICAgICAgfQogICAgfQoKICAgIHJldHVybiBv cHRpb25zCiAgfQoKICBUb29sdGlwLnByb3RvdHlwZS5nZXREZWxlZ2F0ZU9wdGlv bnMgPSBmdW5jdGlvbiAoKSB7CiAgICB2YXIgb3B0aW9ucyAgPSB7fQogICAgdmFy IGRlZmF1bHRzID0gdGhpcy5nZXREZWZhdWx0cygpCgogICAgdGhpcy5fb3B0aW9u cyAmJiAkLmVhY2godGhpcy5fb3B0aW9ucywgZnVuY3Rpb24gKGtleSwgdmFsdWUp IHsKICAgICAgaWYgKGRlZmF1bHRzW2tleV0gIT0gdmFsdWUpIG9wdGlvbnNba2V5 XSA9IHZhbHVlCiAgICB9KQoKICAgIHJldHVybiBvcHRpb25zCiAgfQoKICBUb29s dGlwLnByb3RvdHlwZS5lbnRlciA9IGZ1bmN0aW9uIChvYmopIHsKICAgIHZhciBz ZWxmID0gb2JqIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvciA/CiAgICAgIG9i aiA6ICQob2JqLmN1cnJlbnRUYXJnZXQpW3RoaXMudHlwZV0odGhpcy5nZXREZWxl Z2F0ZU9wdGlvbnMoKSkuZGF0YSgnYnMuJyArIHRoaXMudHlwZSkKCiAgICBjbGVh clRpbWVvdXQoc2VsZi50aW1lb3V0KQoKICAgIHNlbGYuaG92ZXJTdGF0ZSA9ICdp bicKCiAgICBpZiAoIXNlbGYub3B0aW9ucy5kZWxheSB8fCAhc2VsZi5vcHRpb25z LmRlbGF5LnNob3cpIHJldHVybiBzZWxmLnNob3coKQoKICAgIHNlbGYudGltZW91 dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICBpZiAoc2VsZi5ob3Zl clN0YXRlID09ICdpbicpIHNlbGYuc2hvdygpCiAgICB9LCBzZWxmLm9wdGlvbnMu ZGVsYXkuc2hvdykKICB9CgogIFRvb2x0aXAucHJvdG90eXBlLmxlYXZlID0gZnVu Y3Rpb24gKG9iaikgewogICAgdmFyIHNlbGYgPSBvYmogaW5zdGFuY2VvZiB0aGlz LmNvbnN0cnVjdG9yID8KICAgICAgb2JqIDogJChvYmouY3VycmVudFRhcmdldClb dGhpcy50eXBlXSh0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKS5kYXRhKCdicy4n ICsgdGhpcy50eXBlKQoKICAgIGNsZWFyVGltZW91dChzZWxmLnRpbWVvdXQpCgog ICAgc2VsZi5ob3ZlclN0YXRlID0gJ291dCcKCiAgICBpZiAoIXNlbGYub3B0aW9u cy5kZWxheSB8fCAhc2VsZi5vcHRpb25zLmRlbGF5LmhpZGUpIHJldHVybiBzZWxm LmhpZGUoKQoKICAgIHNlbGYudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24g KCkgewogICAgICBpZiAoc2VsZi5ob3ZlclN0YXRlID09ICdvdXQnKSBzZWxmLmhp ZGUoKQogICAgfSwgc2VsZi5vcHRpb25zLmRlbGF5LmhpZGUpCiAgfQoKICBUb29s dGlwLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24gKCkgewogICAgdmFyIGUgPSAk LkV2ZW50KCdzaG93LmJzLicgKyB0aGlzLnR5cGUpCgogICAgaWYgKHRoaXMuaGFz Q29udGVudCgpICYmIHRoaXMuZW5hYmxlZCkgewogICAgICB0aGlzLiRlbGVtZW50 LnRyaWdnZXIoZSkKCiAgICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSBy ZXR1cm4KICAgICAgdmFyIHRoYXQgPSB0aGlzOwoKICAgICAgdmFyICR0aXAgPSB0 aGlzLnRpcCgpCgogICAgICB0aGlzLnNldENvbnRlbnQoKQoKICAgICAgaWYgKHRo aXMub3B0aW9ucy5hbmltYXRpb24pICR0aXAuYWRkQ2xhc3MoJ2ZhZGUnKQoKICAg ICAgdmFyIHBsYWNlbWVudCA9IHR5cGVvZiB0aGlzLm9wdGlvbnMucGxhY2VtZW50 ID09ICdmdW5jdGlvbicgPwogICAgICAgIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQu Y2FsbCh0aGlzLCAkdGlwWzBdLCB0aGlzLiRlbGVtZW50WzBdKSA6CiAgICAgICAg dGhpcy5vcHRpb25zLnBsYWNlbWVudAoKICAgICAgdmFyIGF1dG9Ub2tlbiA9IC9c cz9hdXRvP1xzPy9pCiAgICAgIHZhciBhdXRvUGxhY2UgPSBhdXRvVG9rZW4udGVz dChwbGFjZW1lbnQpCiAgICAgIGlmIChhdXRvUGxhY2UpIHBsYWNlbWVudCA9IHBs YWNlbWVudC5yZXBsYWNlKGF1dG9Ub2tlbiwgJycpIHx8ICd0b3AnCgogICAgICAk dGlwCiAgICAgICAgLmRldGFjaCgpCiAgICAgICAgLmNzcyh7IHRvcDogMCwgbGVm dDogMCwgZGlzcGxheTogJ2Jsb2NrJyB9KQogICAgICAgIC5hZGRDbGFzcyhwbGFj ZW1lbnQpCgogICAgICB0aGlzLm9wdGlvbnMuY29udGFpbmVyID8gJHRpcC5hcHBl bmRUbyh0aGlzLm9wdGlvbnMuY29udGFpbmVyKSA6ICR0aXAuaW5zZXJ0QWZ0ZXIo dGhpcy4kZWxlbWVudCkKCiAgICAgIHZhciBwb3MgICAgICAgICAgPSB0aGlzLmdl dFBvc2l0aW9uKCkKICAgICAgdmFyIGFjdHVhbFdpZHRoICA9ICR0aXBbMF0ub2Zm c2V0V2lkdGgKICAgICAgdmFyIGFjdHVhbEhlaWdodCA9ICR0aXBbMF0ub2Zmc2V0 SGVpZ2h0CgogICAgICBpZiAoYXV0b1BsYWNlKSB7CiAgICAgICAgdmFyICRwYXJl bnQgPSB0aGlzLiRlbGVtZW50LnBhcmVudCgpCgogICAgICAgIHZhciBvcmdQbGFj ZW1lbnQgPSBwbGFjZW1lbnQKICAgICAgICB2YXIgZG9jU2Nyb2xsICAgID0gZG9j dW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCB8fCBkb2N1bWVudC5ib2R5 LnNjcm9sbFRvcAogICAgICAgIHZhciBwYXJlbnRXaWR0aCAgPSB0aGlzLm9wdGlv bnMuY29udGFpbmVyID09ICdib2R5JyA/IHdpbmRvdy5pbm5lcldpZHRoICA6ICRw YXJlbnQub3V0ZXJXaWR0aCgpCiAgICAgICAgdmFyIHBhcmVudEhlaWdodCA9IHRo aXMub3B0aW9ucy5jb250YWluZXIgPT0gJ2JvZHknID8gd2luZG93LmlubmVySGVp Z2h0IDogJHBhcmVudC5vdXRlckhlaWdodCgpCiAgICAgICAgdmFyIHBhcmVudExl ZnQgICA9IHRoaXMub3B0aW9ucy5jb250YWluZXIgPT0gJ2JvZHknID8gMCA6ICRw YXJlbnQub2Zmc2V0KCkubGVmdAoKICAgICAgICBwbGFjZW1lbnQgPSBwbGFjZW1l bnQgPT0gJ2JvdHRvbScgJiYgcG9zLnRvcCAgICsgcG9zLmhlaWdodCAgKyBhY3R1 YWxIZWlnaHQgLSBkb2NTY3JvbGwgPiBwYXJlbnRIZWlnaHQgID8gJ3RvcCcgICAg OgogICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudCA9PSAndG9wJyAgICAmJiBw b3MudG9wICAgLSBkb2NTY3JvbGwgICAtIGFjdHVhbEhlaWdodCA8IDAgICAgICAg ICAgICAgICAgICAgICAgICAgPyAnYm90dG9tJyA6CiAgICAgICAgICAgICAgICAg ICAgcGxhY2VtZW50ID09ICdyaWdodCcgICYmIHBvcy5yaWdodCArIGFjdHVhbFdp ZHRoID4gcGFyZW50V2lkdGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ ICdsZWZ0JyAgIDoKICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQgPT0gJ2xl ZnQnICAgJiYgcG9zLmxlZnQgIC0gYWN0dWFsV2lkdGggPCBwYXJlbnRMZWZ0ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3JpZ2h0JyAgOgogICAgICAg ICAgICAgICAgICAgIHBsYWNlbWVudAoKICAgICAgICAkdGlwCiAgICAgICAgICAu cmVtb3ZlQ2xhc3Mob3JnUGxhY2VtZW50KQogICAgICAgICAgLmFkZENsYXNzKHBs YWNlbWVudCkKICAgICAgfQoKICAgICAgdmFyIGNhbGN1bGF0ZWRPZmZzZXQgPSB0 aGlzLmdldENhbGN1bGF0ZWRPZmZzZXQocGxhY2VtZW50LCBwb3MsIGFjdHVhbFdp ZHRoLCBhY3R1YWxIZWlnaHQpCgogICAgICB0aGlzLmFwcGx5UGxhY2VtZW50KGNh bGN1bGF0ZWRPZmZzZXQsIHBsYWNlbWVudCkKICAgICAgdGhpcy5ob3ZlclN0YXRl ID0gbnVsbAoKICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CiAgICAg ICAgdGhhdC4kZWxlbWVudC50cmlnZ2VyKCdzaG93bi5icy4nICsgdGhhdC50eXBl KQogICAgICB9CgogICAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGlzLiR0 aXAuaGFzQ2xhc3MoJ2ZhZGUnKSA/CiAgICAgICAgJHRpcAogICAgICAgICAgLm9u ZSgkLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsIGNvbXBsZXRlKQogICAgICAgICAg LmVtdWxhdGVUcmFuc2l0aW9uRW5kKDE1MCkgOgogICAgICAgIGNvbXBsZXRlKCkK ICAgIH0KICB9CgogIFRvb2x0aXAucHJvdG90eXBlLmFwcGx5UGxhY2VtZW50ID0g ZnVuY3Rpb24gKG9mZnNldCwgcGxhY2VtZW50KSB7CiAgICB2YXIgcmVwbGFjZQog ICAgdmFyICR0aXAgICA9IHRoaXMudGlwKCkKICAgIHZhciB3aWR0aCAgPSAkdGlw WzBdLm9mZnNldFdpZHRoCiAgICB2YXIgaGVpZ2h0ID0gJHRpcFswXS5vZmZzZXRI ZWlnaHQKCiAgICAvLyBtYW51YWxseSByZWFkIG1hcmdpbnMgYmVjYXVzZSBnZXRC b3VuZGluZ0NsaWVudFJlY3QgaW5jbHVkZXMgZGlmZmVyZW5jZQogICAgdmFyIG1h cmdpblRvcCA9IHBhcnNlSW50KCR0aXAuY3NzKCdtYXJnaW4tdG9wJyksIDEwKQog ICAgdmFyIG1hcmdpbkxlZnQgPSBwYXJzZUludCgkdGlwLmNzcygnbWFyZ2luLWxl ZnQnKSwgMTApCgogICAgLy8gd2UgbXVzdCBjaGVjayBmb3IgTmFOIGZvciBpZSA4 LzkKICAgIGlmIChpc05hTihtYXJnaW5Ub3ApKSAgbWFyZ2luVG9wICA9IDAKICAg IGlmIChpc05hTihtYXJnaW5MZWZ0KSkgbWFyZ2luTGVmdCA9IDAKCiAgICBvZmZz ZXQudG9wICA9IG9mZnNldC50b3AgICsgbWFyZ2luVG9wCiAgICBvZmZzZXQubGVm dCA9IG9mZnNldC5sZWZ0ICsgbWFyZ2luTGVmdAoKICAgIC8vICQuZm4ub2Zmc2V0 IGRvZXNuJ3Qgcm91bmQgcGl4ZWwgdmFsdWVzCiAgICAvLyBzbyB3ZSB1c2Ugc2V0 T2Zmc2V0IGRpcmVjdGx5IHdpdGggb3VyIG93biBmdW5jdGlvbiBCLTAKICAgICQu b2Zmc2V0LnNldE9mZnNldCgkdGlwWzBdLCAkLmV4dGVuZCh7CiAgICAgIHVzaW5n OiBmdW5jdGlvbiAocHJvcHMpIHsKICAgICAgICAkdGlwLmNzcyh7CiAgICAgICAg ICB0b3A6IE1hdGgucm91bmQocHJvcHMudG9wKSwKICAgICAgICAgIGxlZnQ6IE1h dGgucm91bmQocHJvcHMubGVmdCkKICAgICAgICB9KQogICAgICB9CiAgICB9LCBv ZmZzZXQpLCAwKQoKICAgICR0aXAuYWRkQ2xhc3MoJ2luJykKCiAgICAvLyBjaGVj ayB0byBzZWUgaWYgcGxhY2luZyB0aXAgaW4gbmV3IG9mZnNldCBjYXVzZWQgdGhl IHRpcCB0byByZXNpemUgaXRzZWxmCiAgICB2YXIgYWN0dWFsV2lkdGggID0gJHRp cFswXS5vZmZzZXRXaWR0aAogICAgdmFyIGFjdHVhbEhlaWdodCA9ICR0aXBbMF0u b2Zmc2V0SGVpZ2h0CgogICAgaWYgKHBsYWNlbWVudCA9PSAndG9wJyAmJiBhY3R1 YWxIZWlnaHQgIT0gaGVpZ2h0KSB7CiAgICAgIHJlcGxhY2UgPSB0cnVlCiAgICAg IG9mZnNldC50b3AgPSBvZmZzZXQudG9wICsgaGVpZ2h0IC0gYWN0dWFsSGVpZ2h0 CiAgICB9CgogICAgaWYgKC9ib3R0b218dG9wLy50ZXN0KHBsYWNlbWVudCkpIHsK ICAgICAgdmFyIGRlbHRhID0gMAoKICAgICAgaWYgKG9mZnNldC5sZWZ0IDwgMCkg ewogICAgICAgIGRlbHRhICAgICAgID0gb2Zmc2V0LmxlZnQgKiAtMgogICAgICAg IG9mZnNldC5sZWZ0ID0gMAoKICAgICAgICAkdGlwLm9mZnNldChvZmZzZXQpCgog ICAgICAgIGFjdHVhbFdpZHRoICA9ICR0aXBbMF0ub2Zmc2V0V2lkdGgKICAgICAg ICBhY3R1YWxIZWlnaHQgPSAkdGlwWzBdLm9mZnNldEhlaWdodAogICAgICB9Cgog ICAgICB0aGlzLnJlcGxhY2VBcnJvdyhkZWx0YSAtIHdpZHRoICsgYWN0dWFsV2lk dGgsIGFjdHVhbFdpZHRoLCAnbGVmdCcpCiAgICB9IGVsc2UgewogICAgICB0aGlz LnJlcGxhY2VBcnJvdyhhY3R1YWxIZWlnaHQgLSBoZWlnaHQsIGFjdHVhbEhlaWdo dCwgJ3RvcCcpCiAgICB9CgogICAgaWYgKHJlcGxhY2UpICR0aXAub2Zmc2V0KG9m ZnNldCkKICB9CgogIFRvb2x0aXAucHJvdG90eXBlLnJlcGxhY2VBcnJvdyA9IGZ1 bmN0aW9uIChkZWx0YSwgZGltZW5zaW9uLCBwb3NpdGlvbikgewogICAgdGhpcy5h cnJvdygpLmNzcyhwb3NpdGlvbiwgZGVsdGEgPyAoNTAgKiAoMSAtIGRlbHRhIC8g ZGltZW5zaW9uKSArICclJykgOiAnJykKICB9CgogIFRvb2x0aXAucHJvdG90eXBl LnNldENvbnRlbnQgPSBmdW5jdGlvbiAoKSB7CiAgICB2YXIgJHRpcCAgPSB0aGlz LnRpcCgpCiAgICB2YXIgdGl0bGUgPSB0aGlzLmdldFRpdGxlKCkKCiAgICAkdGlw LmZpbmQoJy50b29sdGlwLWlubmVyJylbdGhpcy5vcHRpb25zLmh0bWwgPyAnaHRt bCcgOiAndGV4dCddKHRpdGxlKQogICAgJHRpcC5yZW1vdmVDbGFzcygnZmFkZSBp biB0b3AgYm90dG9tIGxlZnQgcmlnaHQnKQogIH0KCiAgVG9vbHRpcC5wcm90b3R5 cGUuaGlkZSA9IGZ1bmN0aW9uICgpIHsKICAgIHZhciB0aGF0ID0gdGhpcwogICAg dmFyICR0aXAgPSB0aGlzLnRpcCgpCiAgICB2YXIgZSAgICA9ICQuRXZlbnQoJ2hp ZGUuYnMuJyArIHRoaXMudHlwZSkKCiAgICBmdW5jdGlvbiBjb21wbGV0ZSgpIHsK ICAgICAgaWYgKHRoYXQuaG92ZXJTdGF0ZSAhPSAnaW4nKSAkdGlwLmRldGFjaCgp CiAgICAgIHRoYXQuJGVsZW1lbnQudHJpZ2dlcignaGlkZGVuLmJzLicgKyB0aGF0 LnR5cGUpCiAgICB9CgogICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKGUpCgogICAg aWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVybgoKICAgICR0aXAucmVt b3ZlQ2xhc3MoJ2luJykKCiAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGlz LiR0aXAuaGFzQ2xhc3MoJ2ZhZGUnKSA/CiAgICAgICR0aXAKICAgICAgICAub25l KCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCwgY29tcGxldGUpCiAgICAgICAgLmVt dWxhdGVUcmFuc2l0aW9uRW5kKDE1MCkgOgogICAgICBjb21wbGV0ZSgpCgogICAg dGhpcy5ob3ZlclN0YXRlID0gbnVsbAoKICAgIHJldHVybiB0aGlzCiAgfQoKICBU b29sdGlwLnByb3RvdHlwZS5maXhUaXRsZSA9IGZ1bmN0aW9uICgpIHsKICAgIHZh ciAkZSA9IHRoaXMuJGVsZW1lbnQKICAgIGlmICgkZS5hdHRyKCd0aXRsZScpIHx8 IHR5cGVvZigkZS5hdHRyKCdkYXRhLW9yaWdpbmFsLXRpdGxlJykpICE9ICdzdHJp bmcnKSB7CiAgICAgICRlLmF0dHIoJ2RhdGEtb3JpZ2luYWwtdGl0bGUnLCAkZS5h dHRyKCd0aXRsZScpIHx8ICcnKS5hdHRyKCd0aXRsZScsICcnKQogICAgfQogIH0K CiAgVG9vbHRpcC5wcm90b3R5cGUuaGFzQ29udGVudCA9IGZ1bmN0aW9uICgpIHsK ICAgIHJldHVybiB0aGlzLmdldFRpdGxlKCkKICB9CgogIFRvb2x0aXAucHJvdG90 eXBlLmdldFBvc2l0aW9uID0gZnVuY3Rpb24gKCkgewogICAgdmFyIGVsID0gdGhp cy4kZWxlbWVudFswXQogICAgcmV0dXJuICQuZXh0ZW5kKHt9LCAodHlwZW9mIGVs LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PSAnZnVuY3Rpb24nKSA/IGVsLmdldEJv dW5kaW5nQ2xpZW50UmVjdCgpIDogewogICAgICB3aWR0aDogZWwub2Zmc2V0V2lk dGgsCiAgICAgIGhlaWdodDogZWwub2Zmc2V0SGVpZ2h0CiAgICB9LCB0aGlzLiRl bGVtZW50Lm9mZnNldCgpKQogIH0KCiAgVG9vbHRpcC5wcm90b3R5cGUuZ2V0Q2Fs Y3VsYXRlZE9mZnNldCA9IGZ1bmN0aW9uIChwbGFjZW1lbnQsIHBvcywgYWN0dWFs V2lkdGgsIGFjdHVhbEhlaWdodCkgewogICAgcmV0dXJuIHBsYWNlbWVudCA9PSAn Ym90dG9tJyA/IHsgdG9wOiBwb3MudG9wICsgcG9zLmhlaWdodCwgICBsZWZ0OiBw b3MubGVmdCArIHBvcy53aWR0aCAvIDIgLSBhY3R1YWxXaWR0aCAvIDIgIH0gOgog ICAgICAgICAgIHBsYWNlbWVudCA9PSAndG9wJyAgICA/IHsgdG9wOiBwb3MudG9w IC0gYWN0dWFsSGVpZ2h0LCBsZWZ0OiBwb3MubGVmdCArIHBvcy53aWR0aCAvIDIg LSBhY3R1YWxXaWR0aCAvIDIgIH0gOgogICAgICAgICAgIHBsYWNlbWVudCA9PSAn bGVmdCcgICA/IHsgdG9wOiBwb3MudG9wICsgcG9zLmhlaWdodCAvIDIgLSBhY3R1 YWxIZWlnaHQgLyAyLCBsZWZ0OiBwb3MubGVmdCAtIGFjdHVhbFdpZHRoIH0gOgog ICAgICAgIC8qIHBsYWNlbWVudCA9PSAncmlnaHQnICovIHsgdG9wOiBwb3MudG9w ICsgcG9zLmhlaWdodCAvIDIgLSBhY3R1YWxIZWlnaHQgLyAyLCBsZWZ0OiBwb3Mu bGVmdCArIHBvcy53aWR0aCAgIH0KICB9CgogIFRvb2x0aXAucHJvdG90eXBlLmdl dFRpdGxlID0gZnVuY3Rpb24gKCkgewogICAgdmFyIHRpdGxlCiAgICB2YXIgJGUg PSB0aGlzLiRlbGVtZW50CiAgICB2YXIgbyAgPSB0aGlzLm9wdGlvbnMKCiAgICB0 aXRsZSA9ICRlLmF0dHIoJ2RhdGEtb3JpZ2luYWwtdGl0bGUnKQogICAgICB8fCAo dHlwZW9mIG8udGl0bGUgPT0gJ2Z1bmN0aW9uJyA/IG8udGl0bGUuY2FsbCgkZVsw XSkgOiAgby50aXRsZSkKCiAgICByZXR1cm4gdGl0bGUKICB9CgogIFRvb2x0aXAu cHJvdG90eXBlLnRpcCA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB0aGlzLiR0 aXAgPSB0aGlzLiR0aXAgfHwgJCh0aGlzLm9wdGlvbnMudGVtcGxhdGUpCiAgfQoK ICBUb29sdGlwLnByb3RvdHlwZS5hcnJvdyA9IGZ1bmN0aW9uICgpIHsKICAgIHJl dHVybiB0aGlzLiRhcnJvdyA9IHRoaXMuJGFycm93IHx8IHRoaXMudGlwKCkuZmlu ZCgnLnRvb2x0aXAtYXJyb3cnKQogIH0KCiAgVG9vbHRpcC5wcm90b3R5cGUudmFs aWRhdGUgPSBmdW5jdGlvbiAoKSB7CiAgICBpZiAoIXRoaXMuJGVsZW1lbnRbMF0u cGFyZW50Tm9kZSkgewogICAgICB0aGlzLmhpZGUoKQogICAgICB0aGlzLiRlbGVt ZW50ID0gbnVsbAogICAgICB0aGlzLm9wdGlvbnMgID0gbnVsbAogICAgfQogIH0K CiAgVG9vbHRpcC5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKCkgewogICAg dGhpcy5lbmFibGVkID0gdHJ1ZQogIH0KCiAgVG9vbHRpcC5wcm90b3R5cGUuZGlz YWJsZSA9IGZ1bmN0aW9uICgpIHsKICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlCiAg fQoKICBUb29sdGlwLnByb3RvdHlwZS50b2dnbGVFbmFibGVkID0gZnVuY3Rpb24g KCkgewogICAgdGhpcy5lbmFibGVkID0gIXRoaXMuZW5hYmxlZAogIH0KCiAgVG9v bHRpcC5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKGUpIHsKICAgIHZhciBz ZWxmID0gZSA/ICQoZS5jdXJyZW50VGFyZ2V0KVt0aGlzLnR5cGVdKHRoaXMuZ2V0 RGVsZWdhdGVPcHRpb25zKCkpLmRhdGEoJ2JzLicgKyB0aGlzLnR5cGUpIDogdGhp cwogICAgc2VsZi50aXAoKS5oYXNDbGFzcygnaW4nKSA/IHNlbGYubGVhdmUoc2Vs ZikgOiBzZWxmLmVudGVyKHNlbGYpCiAgfQoKICBUb29sdGlwLnByb3RvdHlwZS5k ZXN0cm95ID0gZnVuY3Rpb24gKCkgewogICAgY2xlYXJUaW1lb3V0KHRoaXMudGlt ZW91dCkKICAgIHRoaXMuaGlkZSgpLiRlbGVtZW50Lm9mZignLicgKyB0aGlzLnR5 cGUpLnJlbW92ZURhdGEoJ2JzLicgKyB0aGlzLnR5cGUpCiAgfQoKCiAgLy8gVE9P TFRJUCBQTFVHSU4gREVGSU5JVElPTgogIC8vID09PT09PT09PT09PT09PT09PT09 PT09PT0KCiAgdmFyIG9sZCA9ICQuZm4udG9vbHRpcAoKICAkLmZuLnRvb2x0aXAg PSBmdW5jdGlvbiAob3B0aW9uKSB7CiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0 aW9uICgpIHsKICAgICAgdmFyICR0aGlzICAgPSAkKHRoaXMpCiAgICAgIHZhciBk YXRhICAgID0gJHRoaXMuZGF0YSgnYnMudG9vbHRpcCcpCiAgICAgIHZhciBvcHRp b25zID0gdHlwZW9mIG9wdGlvbiA9PSAnb2JqZWN0JyAmJiBvcHRpb24KCiAgICAg IGlmICghZGF0YSAmJiBvcHRpb24gPT0gJ2Rlc3Ryb3knKSByZXR1cm4KICAgICAg aWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy50b29sdGlwJywgKGRhdGEgPSBuZXcg VG9vbHRpcCh0aGlzLCBvcHRpb25zKSkpCiAgICAgIGlmICh0eXBlb2Ygb3B0aW9u ID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0oKQogICAgfSkKICB9CgogICQuZm4u dG9vbHRpcC5Db25zdHJ1Y3RvciA9IFRvb2x0aXAKCgogIC8vIFRPT0xUSVAgTk8g Q09ORkxJQ1QKICAvLyA9PT09PT09PT09PT09PT09PT09CgogICQuZm4udG9vbHRp cC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkgewogICAgJC5mbi50b29sdGlwID0g b2xkCiAgICByZXR1cm4gdGhpcwogIH0KCn0oalF1ZXJ5KTsKCi8qID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQogKiBCb290c3RyYXA6IHBvcG92ZXIuanMgdjMuMS4w CiAqIGh0dHA6Ly9nZXRib290c3RyYXAuY29tL2phdmFzY3JpcHQvI3BvcG92ZXJz CiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBDb3B5cmlnaHQgMjAxMS0y MDE0IFR3aXR0ZXIsIEluYy4KICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczov L2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSkK ICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgoKK2Z1bmN0aW9uICgkKSB7 CiAgJ3VzZSBzdHJpY3QnOwoKICAvLyBQT1BPVkVSIFBVQkxJQyBDTEFTUyBERUZJ TklUSU9OCiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICB2 YXIgUG9wb3ZlciA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7CiAgICB0 aGlzLmluaXQoJ3BvcG92ZXInLCBlbGVtZW50LCBvcHRpb25zKQogIH0KCiAgaWYg KCEkLmZuLnRvb2x0aXApIHRocm93IG5ldyBFcnJvcignUG9wb3ZlciByZXF1aXJl cyB0b29sdGlwLmpzJykKCiAgUG9wb3Zlci5ERUZBVUxUUyA9ICQuZXh0ZW5kKHt9 LCAkLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IuREVGQVVMVFMsIHsKICAgIHBsYWNl bWVudDogJ3JpZ2h0JywKICAgIHRyaWdnZXI6ICdjbGljaycsCiAgICBjb250ZW50 OiAnJywKICAgIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz0icG9wb3ZlciI+PGRpdiBj bGFzcz0iYXJyb3ciPjwvZGl2PjxoMyBjbGFzcz0icG9wb3Zlci10aXRsZSI+PC9o Mz48ZGl2IGNsYXNzPSJwb3BvdmVyLWNvbnRlbnQiPjwvZGl2PjwvZGl2PicKICB9 KQoKCiAgLy8gTk9URTogUE9QT1ZFUiBFWFRFTkRTIHRvb2x0aXAuanMKICAvLyA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICBQb3BvdmVyLnByb3Rv dHlwZSA9ICQuZXh0ZW5kKHt9LCAkLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IucHJv dG90eXBlKQoKICBQb3BvdmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvcG92 ZXIKCiAgUG9wb3Zlci5wcm90b3R5cGUuZ2V0RGVmYXVsdHMgPSBmdW5jdGlvbiAo KSB7CiAgICByZXR1cm4gUG9wb3Zlci5ERUZBVUxUUwogIH0KCiAgUG9wb3Zlci5w cm90b3R5cGUuc2V0Q29udGVudCA9IGZ1bmN0aW9uICgpIHsKICAgIHZhciAkdGlw ICAgID0gdGhpcy50aXAoKQogICAgdmFyIHRpdGxlICAgPSB0aGlzLmdldFRpdGxl KCkKICAgIHZhciBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCkKCiAgICAkdGlw LmZpbmQoJy5wb3BvdmVyLXRpdGxlJylbdGhpcy5vcHRpb25zLmh0bWwgPyAnaHRt bCcgOiAndGV4dCddKHRpdGxlKQogICAgJHRpcC5maW5kKCcucG9wb3Zlci1jb250 ZW50JylbIC8vIHdlIHVzZSBhcHBlbmQgZm9yIGh0bWwgb2JqZWN0cyB0byBtYWlu dGFpbiBqcyBldmVudHMKICAgICAgdGhpcy5vcHRpb25zLmh0bWwgPyAodHlwZW9m IGNvbnRlbnQgPT0gJ3N0cmluZycgPyAnaHRtbCcgOiAnYXBwZW5kJykgOiAndGV4 dCcKICAgIF0oY29udGVudCkKCiAgICAkdGlwLnJlbW92ZUNsYXNzKCdmYWRlIHRv cCBib3R0b20gbGVmdCByaWdodCBpbicpCgogICAgLy8gSUU4IGRvZXNuJ3QgYWNj ZXB0IGhpZGluZyB2aWEgdGhlIGA6ZW1wdHlgIHBzZXVkbyBzZWxlY3Rvciwgd2Ug aGF2ZSB0byBkbwogICAgLy8gdGhpcyBtYW51YWxseSBieSBjaGVja2luZyB0aGUg Y29udGVudHMuCiAgICBpZiAoISR0aXAuZmluZCgnLnBvcG92ZXItdGl0bGUnKS5o dG1sKCkpICR0aXAuZmluZCgnLnBvcG92ZXItdGl0bGUnKS5oaWRlKCkKICB9Cgog IFBvcG92ZXIucHJvdG90eXBlLmhhc0NvbnRlbnQgPSBmdW5jdGlvbiAoKSB7CiAg ICByZXR1cm4gdGhpcy5nZXRUaXRsZSgpIHx8IHRoaXMuZ2V0Q29udGVudCgpCiAg fQoKICBQb3BvdmVyLnByb3RvdHlwZS5nZXRDb250ZW50ID0gZnVuY3Rpb24gKCkg ewogICAgdmFyICRlID0gdGhpcy4kZWxlbWVudAogICAgdmFyIG8gID0gdGhpcy5v cHRpb25zCgogICAgcmV0dXJuICRlLmF0dHIoJ2RhdGEtY29udGVudCcpCiAgICAg IHx8ICh0eXBlb2Ygby5jb250ZW50ID09ICdmdW5jdGlvbicgPwogICAgICAgICAg ICBvLmNvbnRlbnQuY2FsbCgkZVswXSkgOgogICAgICAgICAgICBvLmNvbnRlbnQp CiAgfQoKICBQb3BvdmVyLnByb3RvdHlwZS5hcnJvdyA9IGZ1bmN0aW9uICgpIHsK ICAgIHJldHVybiB0aGlzLiRhcnJvdyA9IHRoaXMuJGFycm93IHx8IHRoaXMudGlw KCkuZmluZCgnLmFycm93JykKICB9CgogIFBvcG92ZXIucHJvdG90eXBlLnRpcCA9 IGZ1bmN0aW9uICgpIHsKICAgIGlmICghdGhpcy4kdGlwKSB0aGlzLiR0aXAgPSAk KHRoaXMub3B0aW9ucy50ZW1wbGF0ZSkKICAgIHJldHVybiB0aGlzLiR0aXAKICB9 CgoKICAvLyBQT1BPVkVSIFBMVUdJTiBERUZJTklUSU9OCiAgLy8gPT09PT09PT09 PT09PT09PT09PT09PT09PQoKICB2YXIgb2xkID0gJC5mbi5wb3BvdmVyCgogICQu Zm4ucG9wb3ZlciA9IGZ1bmN0aW9uIChvcHRpb24pIHsKICAgIHJldHVybiB0aGlz LmVhY2goZnVuY3Rpb24gKCkgewogICAgICB2YXIgJHRoaXMgICA9ICQodGhpcykK ICAgICAgdmFyIGRhdGEgICAgPSAkdGhpcy5kYXRhKCdicy5wb3BvdmVyJykKICAg ICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9uID09ICdvYmplY3QnICYmIG9w dGlvbgoKICAgICAgaWYgKCFkYXRhICYmIG9wdGlvbiA9PSAnZGVzdHJveScpIHJl dHVybgogICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2JzLnBvcG92ZXInLCAo ZGF0YSA9IG5ldyBQb3BvdmVyKHRoaXMsIG9wdGlvbnMpKSkKICAgICAgaWYgKHR5 cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpCiAgICB9KQog IH0KCiAgJC5mbi5wb3BvdmVyLkNvbnN0cnVjdG9yID0gUG9wb3ZlcgoKCiAgLy8g UE9QT1ZFUiBOTyBDT05GTElDVAogIC8vID09PT09PT09PT09PT09PT09PT0KCiAg JC5mbi5wb3BvdmVyLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7CiAgICAkLmZu LnBvcG92ZXIgPSBvbGQKICAgIHJldHVybiB0aGlzCiAgfQoKfShqUXVlcnkpOwoK LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIEJvb3RzdHJhcDogc2Nyb2xs c3B5LmpzIHYzLjEuMAogKiBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9qYXZhc2Ny aXB0LyNzY3JvbGxzcHkKICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIENv cHlyaWdodCAyMDExLTIwMTQgVHdpdHRlciwgSW5jLgogKiBMaWNlbnNlZCB1bmRl ciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21h c3Rlci9MSUNFTlNFKQogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCgor ZnVuY3Rpb24gKCQpIHsKICAndXNlIHN0cmljdCc7CgogIC8vIFNDUk9MTFNQWSBD TEFTUyBERUZJTklUSU9OCiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0K CiAgZnVuY3Rpb24gU2Nyb2xsU3B5KGVsZW1lbnQsIG9wdGlvbnMpIHsKICAgIHZh ciBocmVmCiAgICB2YXIgcHJvY2VzcyAgPSAkLnByb3h5KHRoaXMucHJvY2Vzcywg dGhpcykKCiAgICB0aGlzLiRlbGVtZW50ICAgICAgID0gJChlbGVtZW50KS5pcygn Ym9keScpID8gJCh3aW5kb3cpIDogJChlbGVtZW50KQogICAgdGhpcy4kYm9keSAg ICAgICAgICA9ICQoJ2JvZHknKQogICAgdGhpcy4kc2Nyb2xsRWxlbWVudCA9IHRo aXMuJGVsZW1lbnQub24oJ3Njcm9sbC5icy5zY3JvbGwtc3B5LmRhdGEtYXBpJywg cHJvY2VzcykKICAgIHRoaXMub3B0aW9ucyAgICAgICAgPSAkLmV4dGVuZCh7fSwg U2Nyb2xsU3B5LkRFRkFVTFRTLCBvcHRpb25zKQogICAgdGhpcy5zZWxlY3RvciAg ICAgICA9ICh0aGlzLm9wdGlvbnMudGFyZ2V0CiAgICAgIHx8ICgoaHJlZiA9ICQo ZWxlbWVudCkuYXR0cignaHJlZicpKSAmJiBocmVmLnJlcGxhY2UoLy4qKD89I1te XHNdKyQpLywgJycpKSAvL3N0cmlwIGZvciBpZTcKICAgICAgfHwgJycpICsgJyAu bmF2IGxpID4gYScKICAgIHRoaXMub2Zmc2V0cyAgICAgICAgPSAkKFtdKQogICAg dGhpcy50YXJnZXRzICAgICAgICA9ICQoW10pCiAgICB0aGlzLmFjdGl2ZVRhcmdl dCAgID0gbnVsbAoKICAgIHRoaXMucmVmcmVzaCgpCiAgICB0aGlzLnByb2Nlc3Mo KQogIH0KCiAgU2Nyb2xsU3B5LkRFRkFVTFRTID0gewogICAgb2Zmc2V0OiAxMAog IH0KCiAgU2Nyb2xsU3B5LnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKCkg ewogICAgdmFyIG9mZnNldE1ldGhvZCA9IHRoaXMuJGVsZW1lbnRbMF0gPT0gd2lu ZG93ID8gJ29mZnNldCcgOiAncG9zaXRpb24nCgogICAgdGhpcy5vZmZzZXRzID0g JChbXSkKICAgIHRoaXMudGFyZ2V0cyA9ICQoW10pCgogICAgdmFyIHNlbGYgICAg ID0gdGhpcwogICAgdmFyICR0YXJnZXRzID0gdGhpcy4kYm9keQogICAgICAuZmlu ZCh0aGlzLnNlbGVjdG9yKQogICAgICAubWFwKGZ1bmN0aW9uICgpIHsKICAgICAg ICB2YXIgJGVsICAgPSAkKHRoaXMpCiAgICAgICAgdmFyIGhyZWYgID0gJGVsLmRh dGEoJ3RhcmdldCcpIHx8ICRlbC5hdHRyKCdocmVmJykKICAgICAgICB2YXIgJGhy ZWYgPSAvXiMuLy50ZXN0KGhyZWYpICYmICQoaHJlZikKCiAgICAgICAgcmV0dXJu ICgkaHJlZgogICAgICAgICAgJiYgJGhyZWYubGVuZ3RoCiAgICAgICAgICAmJiAk aHJlZi5pcygnOnZpc2libGUnKQogICAgICAgICAgJiYgW1sgJGhyZWZbb2Zmc2V0 TWV0aG9kXSgpLnRvcCArICghJC5pc1dpbmRvdyhzZWxmLiRzY3JvbGxFbGVtZW50 LmdldCgwKSkgJiYgc2VsZi4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSksIGhy ZWYgXV0pIHx8IG51bGwKICAgICAgfSkKICAgICAgLnNvcnQoZnVuY3Rpb24gKGEs IGIpIHsgcmV0dXJuIGFbMF0gLSBiWzBdIH0pCiAgICAgIC5lYWNoKGZ1bmN0aW9u ICgpIHsKICAgICAgICBzZWxmLm9mZnNldHMucHVzaCh0aGlzWzBdKQogICAgICAg IHNlbGYudGFyZ2V0cy5wdXNoKHRoaXNbMV0pCiAgICAgIH0pCiAgfQoKICBTY3Jv bGxTcHkucHJvdG90eXBlLnByb2Nlc3MgPSBmdW5jdGlvbiAoKSB7CiAgICB2YXIg c2Nyb2xsVG9wICAgID0gdGhpcy4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSAr IHRoaXMub3B0aW9ucy5vZmZzZXQKICAgIHZhciBzY3JvbGxIZWlnaHQgPSB0aGlz LiRzY3JvbGxFbGVtZW50WzBdLnNjcm9sbEhlaWdodCB8fCB0aGlzLiRib2R5WzBd LnNjcm9sbEhlaWdodAogICAgdmFyIG1heFNjcm9sbCAgICA9IHNjcm9sbEhlaWdo dCAtIHRoaXMuJHNjcm9sbEVsZW1lbnQuaGVpZ2h0KCkKICAgIHZhciBvZmZzZXRz ICAgICAgPSB0aGlzLm9mZnNldHMKICAgIHZhciB0YXJnZXRzICAgICAgPSB0aGlz LnRhcmdldHMKICAgIHZhciBhY3RpdmVUYXJnZXQgPSB0aGlzLmFjdGl2ZVRhcmdl dAogICAgdmFyIGkKCiAgICBpZiAoc2Nyb2xsVG9wID49IG1heFNjcm9sbCkgewog ICAgICByZXR1cm4gYWN0aXZlVGFyZ2V0ICE9IChpID0gdGFyZ2V0cy5sYXN0KClb MF0pICYmIHRoaXMuYWN0aXZhdGUoaSkKICAgIH0KCiAgICBpZiAoYWN0aXZlVGFy Z2V0ICYmIHNjcm9sbFRvcCA8PSBvZmZzZXRzWzBdKSB7CiAgICAgIHJldHVybiBh Y3RpdmVUYXJnZXQgIT0gKGkgPSB0YXJnZXRzWzBdKSAmJiB0aGlzLmFjdGl2YXRl KGkpCiAgICB9CgogICAgZm9yIChpID0gb2Zmc2V0cy5sZW5ndGg7IGktLTspIHsK ICAgICAgYWN0aXZlVGFyZ2V0ICE9IHRhcmdldHNbaV0KICAgICAgICAmJiBzY3Jv bGxUb3AgPj0gb2Zmc2V0c1tpXQogICAgICAgICYmICghb2Zmc2V0c1tpICsgMV0g fHwgc2Nyb2xsVG9wIDw9IG9mZnNldHNbaSArIDFdKQogICAgICAgICYmIHRoaXMu YWN0aXZhdGUoIHRhcmdldHNbaV0gKQogICAgfQogIH0KCiAgU2Nyb2xsU3B5LnBy b3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uICh0YXJnZXQpIHsKICAgIHRoaXMu YWN0aXZlVGFyZ2V0ID0gdGFyZ2V0CgogICAgJCh0aGlzLnNlbGVjdG9yKQogICAg ICAucGFyZW50c1VudGlsKHRoaXMub3B0aW9ucy50YXJnZXQsICcuYWN0aXZlJykK ICAgICAgLnJlbW92ZUNsYXNzKCdhY3RpdmUnKQoKICAgIHZhciBzZWxlY3RvciA9 IHRoaXMuc2VsZWN0b3IgKwogICAgICAgICdbZGF0YS10YXJnZXQ9IicgKyB0YXJn ZXQgKyAnIl0sJyArCiAgICAgICAgdGhpcy5zZWxlY3RvciArICdbaHJlZj0iJyAr IHRhcmdldCArICciXScKCiAgICB2YXIgYWN0aXZlID0gJChzZWxlY3RvcikKICAg ICAgLnBhcmVudHMoJ2xpJykKICAgICAgLmFkZENsYXNzKCdhY3RpdmUnKQoKICAg IGlmIChhY3RpdmUucGFyZW50KCcuZHJvcGRvd24tbWVudScpLmxlbmd0aCkgewog ICAgICBhY3RpdmUgPSBhY3RpdmUKICAgICAgICAuY2xvc2VzdCgnbGkuZHJvcGRv d24nKQogICAgICAgIC5hZGRDbGFzcygnYWN0aXZlJykKICAgIH0KCiAgICBhY3Rp dmUudHJpZ2dlcignYWN0aXZhdGUuYnMuc2Nyb2xsc3B5JykKICB9CgoKICAvLyBT Q1JPTExTUFkgUExVR0lOIERFRklOSVRJT04KICAvLyA9PT09PT09PT09PT09PT09 PT09PT09PT09PT0KCiAgdmFyIG9sZCA9ICQuZm4uc2Nyb2xsc3B5CgogICQuZm4u c2Nyb2xsc3B5ID0gZnVuY3Rpb24gKG9wdGlvbikgewogICAgcmV0dXJuIHRoaXMu ZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgIHZhciAkdGhpcyAgID0gJCh0aGlzKQog ICAgICB2YXIgZGF0YSAgICA9ICR0aGlzLmRhdGEoJ2JzLnNjcm9sbHNweScpCiAg ICAgIHZhciBvcHRpb25zID0gdHlwZW9mIG9wdGlvbiA9PSAnb2JqZWN0JyAmJiBv cHRpb24KCiAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYnMuc2Nyb2xsc3B5 JywgKGRhdGEgPSBuZXcgU2Nyb2xsU3B5KHRoaXMsIG9wdGlvbnMpKSkKICAgICAg aWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpCiAg ICB9KQogIH0KCiAgJC5mbi5zY3JvbGxzcHkuQ29uc3RydWN0b3IgPSBTY3JvbGxT cHkKCgogIC8vIFNDUk9MTFNQWSBOTyBDT05GTElDVAogIC8vID09PT09PT09PT09 PT09PT09PT09PQoKICAkLmZuLnNjcm9sbHNweS5ub0NvbmZsaWN0ID0gZnVuY3Rp b24gKCkgewogICAgJC5mbi5zY3JvbGxzcHkgPSBvbGQKICAgIHJldHVybiB0aGlz CiAgfQoKCiAgLy8gU0NST0xMU1BZIERBVEEtQVBJCiAgLy8gPT09PT09PT09PT09 PT09PT09CgogICQod2luZG93KS5vbignbG9hZCcsIGZ1bmN0aW9uICgpIHsKICAg ICQoJ1tkYXRhLXNweT0ic2Nyb2xsIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHsKICAg ICAgdmFyICRzcHkgPSAkKHRoaXMpCiAgICAgICRzcHkuc2Nyb2xsc3B5KCRzcHku ZGF0YSgpKQogICAgfSkKICB9KQoKfShqUXVlcnkpOwoKLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CiAqIEJvb3RzdHJhcDogdGFiLmpzIHYzLjEuMAogKiBodHRw Oi8vZ2V0Ym9vdHN0cmFwLmNvbS9qYXZhc2NyaXB0LyN0YWJzCiAqID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQogKiBDb3B5cmlnaHQgMjAxMS0yMDE0IFR3aXR0ZXIs IEluYy4KICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20v dHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSkKICogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09ICovCgoKK2Z1bmN0aW9uICgkKSB7CiAgJ3VzZSBzdHJp Y3QnOwoKICAvLyBUQUIgQ0xBU1MgREVGSU5JVElPTgogIC8vID09PT09PT09PT09 PT09PT09PT09CgogIHZhciBUYWIgPSBmdW5jdGlvbiAoZWxlbWVudCkgewogICAg dGhpcy5lbGVtZW50ID0gJChlbGVtZW50KQogIH0KCiAgVGFiLnByb3RvdHlwZS5z aG93ID0gZnVuY3Rpb24gKCkgewogICAgdmFyICR0aGlzICAgID0gdGhpcy5lbGVt ZW50CiAgICB2YXIgJHVsICAgICAgPSAkdGhpcy5jbG9zZXN0KCd1bDpub3QoLmRy b3Bkb3duLW1lbnUpJykKICAgIHZhciBzZWxlY3RvciA9ICR0aGlzLmRhdGEoJ3Rh cmdldCcpCgogICAgaWYgKCFzZWxlY3RvcikgewogICAgICBzZWxlY3RvciA9ICR0 aGlzLmF0dHIoJ2hyZWYnKQogICAgICBzZWxlY3RvciA9IHNlbGVjdG9yICYmIHNl bGVjdG9yLnJlcGxhY2UoLy4qKD89I1teXHNdKiQpLywgJycpIC8vc3RyaXAgZm9y IGllNwogICAgfQoKICAgIGlmICgkdGhpcy5wYXJlbnQoJ2xpJykuaGFzQ2xhc3Mo J2FjdGl2ZScpKSByZXR1cm4KCiAgICB2YXIgcHJldmlvdXMgPSAkdWwuZmluZCgn LmFjdGl2ZTpsYXN0IGEnKVswXQogICAgdmFyIGUgICAgICAgID0gJC5FdmVudCgn c2hvdy5icy50YWInLCB7CiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHByZXZpb3VzCiAg ICB9KQoKICAgICR0aGlzLnRyaWdnZXIoZSkKCiAgICBpZiAoZS5pc0RlZmF1bHRQ cmV2ZW50ZWQoKSkgcmV0dXJuCgogICAgdmFyICR0YXJnZXQgPSAkKHNlbGVjdG9y KQoKICAgIHRoaXMuYWN0aXZhdGUoJHRoaXMucGFyZW50KCdsaScpLCAkdWwpCiAg ICB0aGlzLmFjdGl2YXRlKCR0YXJnZXQsICR0YXJnZXQucGFyZW50KCksIGZ1bmN0 aW9uICgpIHsKICAgICAgJHRoaXMudHJpZ2dlcih7CiAgICAgICAgdHlwZTogJ3No b3duLmJzLnRhYicsCiAgICAgICAgcmVsYXRlZFRhcmdldDogcHJldmlvdXMKICAg ICAgfSkKICAgIH0pCiAgfQoKICBUYWIucHJvdG90eXBlLmFjdGl2YXRlID0gZnVu Y3Rpb24gKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHsKICAgIHZhciAk YWN0aXZlICAgID0gY29udGFpbmVyLmZpbmQoJz4gLmFjdGl2ZScpCiAgICB2YXIg dHJhbnNpdGlvbiA9IGNhbGxiYWNrCiAgICAgICYmICQuc3VwcG9ydC50cmFuc2l0 aW9uCiAgICAgICYmICRhY3RpdmUuaGFzQ2xhc3MoJ2ZhZGUnKQoKICAgIGZ1bmN0 aW9uIG5leHQoKSB7CiAgICAgICRhY3RpdmUKICAgICAgICAucmVtb3ZlQ2xhc3Mo J2FjdGl2ZScpCiAgICAgICAgLmZpbmQoJz4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0 aXZlJykKICAgICAgICAucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpCgogICAgICBlbGVt ZW50LmFkZENsYXNzKCdhY3RpdmUnKQoKICAgICAgaWYgKHRyYW5zaXRpb24pIHsK ICAgICAgICBlbGVtZW50WzBdLm9mZnNldFdpZHRoIC8vIHJlZmxvdyBmb3IgdHJh bnNpdGlvbgogICAgICAgIGVsZW1lbnQuYWRkQ2xhc3MoJ2luJykKICAgICAgfSBl bHNlIHsKICAgICAgICBlbGVtZW50LnJlbW92ZUNsYXNzKCdmYWRlJykKICAgICAg fQoKICAgICAgaWYgKGVsZW1lbnQucGFyZW50KCcuZHJvcGRvd24tbWVudScpKSB7 CiAgICAgICAgZWxlbWVudC5jbG9zZXN0KCdsaS5kcm9wZG93bicpLmFkZENsYXNz KCdhY3RpdmUnKQogICAgICB9CgogICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygp CiAgICB9CgogICAgdHJhbnNpdGlvbiA/CiAgICAgICRhY3RpdmUKICAgICAgICAu b25lKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCwgbmV4dCkKICAgICAgICAuZW11 bGF0ZVRyYW5zaXRpb25FbmQoMTUwKSA6CiAgICAgIG5leHQoKQoKICAgICRhY3Rp dmUucmVtb3ZlQ2xhc3MoJ2luJykKICB9CgoKICAvLyBUQUIgUExVR0lOIERFRklO SVRJT04KICAvLyA9PT09PT09PT09PT09PT09PT09PT0KCiAgdmFyIG9sZCA9ICQu Zm4udGFiCgogICQuZm4udGFiID0gZnVuY3Rpb24gKCBvcHRpb24gKSB7CiAgICBy ZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgdmFyICR0aGlzID0g JCh0aGlzKQogICAgICB2YXIgZGF0YSAgPSAkdGhpcy5kYXRhKCdicy50YWInKQoK ICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy50YWInLCAoZGF0YSA9IG5l dyBUYWIodGhpcykpKQogICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5n JykgZGF0YVtvcHRpb25dKCkKICAgIH0pCiAgfQoKICAkLmZuLnRhYi5Db25zdHJ1 Y3RvciA9IFRhYgoKCiAgLy8gVEFCIE5PIENPTkZMSUNUCiAgLy8gPT09PT09PT09 PT09PT09CgogICQuZm4udGFiLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7CiAg ICAkLmZuLnRhYiA9IG9sZAogICAgcmV0dXJuIHRoaXMKICB9CgoKICAvLyBUQUIg REFUQS1BUEkKICAvLyA9PT09PT09PT09PT0KCiAgJChkb2N1bWVudCkub24oJ2Ns aWNrLmJzLnRhYi5kYXRhLWFwaScsICdbZGF0YS10b2dnbGU9InRhYiJdLCBbZGF0 YS10b2dnbGU9InBpbGwiXScsIGZ1bmN0aW9uIChlKSB7CiAgICBlLnByZXZlbnRE ZWZhdWx0KCkKICAgICQodGhpcykudGFiKCdzaG93JykKICB9KQoKfShqUXVlcnkp OwoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIEJvb3RzdHJhcDogYWZm aXguanMgdjMuMS4wCiAqIGh0dHA6Ly9nZXRib290c3RyYXAuY29tL2phdmFzY3Jp cHQvI2FmZml4CiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBDb3B5cmln aHQgMjAxMS0yMDE0IFR3aXR0ZXIsIEluYy4KICogTGljZW5zZWQgdW5kZXIgTUlU IChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIv TElDRU5TRSkKICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgoKK2Z1bmN0 aW9uICgkKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvLyBBRkZJWCBDTEFTUyBERUZJ TklUSU9OCiAgLy8gPT09PT09PT09PT09PT09PT09PT09PQoKICB2YXIgQWZmaXgg PSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykgewogICAgdGhpcy5vcHRpb25z ID0gJC5leHRlbmQoe30sIEFmZml4LkRFRkFVTFRTLCBvcHRpb25zKQogICAgdGhp cy4kd2luZG93ID0gJCh3aW5kb3cpCiAgICAgIC5vbignc2Nyb2xsLmJzLmFmZml4 LmRhdGEtYXBpJywgJC5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sIHRoaXMpKQog ICAgICAub24oJ2NsaWNrLmJzLmFmZml4LmRhdGEtYXBpJywgICQucHJveHkodGhp cy5jaGVja1Bvc2l0aW9uV2l0aEV2ZW50TG9vcCwgdGhpcykpCgogICAgdGhpcy4k ZWxlbWVudCAgICAgPSAkKGVsZW1lbnQpCiAgICB0aGlzLmFmZml4ZWQgICAgICA9 CiAgICB0aGlzLnVucGluICAgICAgICA9CiAgICB0aGlzLnBpbm5lZE9mZnNldCA9 IG51bGwKCiAgICB0aGlzLmNoZWNrUG9zaXRpb24oKQogIH0KCiAgQWZmaXguUkVT RVQgPSAnYWZmaXggYWZmaXgtdG9wIGFmZml4LWJvdHRvbScKCiAgQWZmaXguREVG QVVMVFMgPSB7CiAgICBvZmZzZXQ6IDAKICB9CgogIEFmZml4LnByb3RvdHlwZS5n ZXRQaW5uZWRPZmZzZXQgPSBmdW5jdGlvbiAoKSB7CiAgICBpZiAodGhpcy5waW5u ZWRPZmZzZXQpIHJldHVybiB0aGlzLnBpbm5lZE9mZnNldAogICAgdGhpcy4kZWxl bWVudC5yZW1vdmVDbGFzcyhBZmZpeC5SRVNFVCkuYWRkQ2xhc3MoJ2FmZml4JykK ICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLiR3aW5kb3cuc2Nyb2xsVG9wKCkKICAg IHZhciBwb3NpdGlvbiAgPSB0aGlzLiRlbGVtZW50Lm9mZnNldCgpCiAgICByZXR1 cm4gKHRoaXMucGlubmVkT2Zmc2V0ID0gcG9zaXRpb24udG9wIC0gc2Nyb2xsVG9w KQogIH0KCiAgQWZmaXgucHJvdG90eXBlLmNoZWNrUG9zaXRpb25XaXRoRXZlbnRM b29wID0gZnVuY3Rpb24gKCkgewogICAgc2V0VGltZW91dCgkLnByb3h5KHRoaXMu Y2hlY2tQb3NpdGlvbiwgdGhpcyksIDEpCiAgfQoKICBBZmZpeC5wcm90b3R5cGUu Y2hlY2tQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHsKICAgIGlmICghdGhpcy4kZWxl bWVudC5pcygnOnZpc2libGUnKSkgcmV0dXJuCgogICAgdmFyIHNjcm9sbEhlaWdo dCA9ICQoZG9jdW1lbnQpLmhlaWdodCgpCiAgICB2YXIgc2Nyb2xsVG9wICAgID0g dGhpcy4kd2luZG93LnNjcm9sbFRvcCgpCiAgICB2YXIgcG9zaXRpb24gICAgID0g dGhpcy4kZWxlbWVudC5vZmZzZXQoKQogICAgdmFyIG9mZnNldCAgICAgICA9IHRo aXMub3B0aW9ucy5vZmZzZXQKICAgIHZhciBvZmZzZXRUb3AgICAgPSBvZmZzZXQu dG9wCiAgICB2YXIgb2Zmc2V0Qm90dG9tID0gb2Zmc2V0LmJvdHRvbQoKICAgIGlm ICh0aGlzLmFmZml4ZWQgPT0gJ3RvcCcpIHBvc2l0aW9uLnRvcCArPSBzY3JvbGxU b3AKCiAgICBpZiAodHlwZW9mIG9mZnNldCAhPSAnb2JqZWN0JykgICAgICAgICBv ZmZzZXRCb3R0b20gPSBvZmZzZXRUb3AgPSBvZmZzZXQKICAgIGlmICh0eXBlb2Yg b2Zmc2V0VG9wID09ICdmdW5jdGlvbicpICAgIG9mZnNldFRvcCAgICA9IG9mZnNl dC50b3AodGhpcy4kZWxlbWVudCkKICAgIGlmICh0eXBlb2Ygb2Zmc2V0Qm90dG9t ID09ICdmdW5jdGlvbicpIG9mZnNldEJvdHRvbSA9IG9mZnNldC5ib3R0b20odGhp cy4kZWxlbWVudCkKCiAgICB2YXIgYWZmaXggPSB0aGlzLnVucGluICAgIT0gbnVs bCAmJiAoc2Nyb2xsVG9wICsgdGhpcy51bnBpbiA8PSBwb3NpdGlvbi50b3ApID8g ZmFsc2UgOgogICAgICAgICAgICAgICAgb2Zmc2V0Qm90dG9tICE9IG51bGwgJiYg KHBvc2l0aW9uLnRvcCArIHRoaXMuJGVsZW1lbnQuaGVpZ2h0KCkgPj0gc2Nyb2xs SGVpZ2h0IC0gb2Zmc2V0Qm90dG9tKSA/ICdib3R0b20nIDoKICAgICAgICAgICAg ICAgIG9mZnNldFRvcCAgICAhPSBudWxsICYmIChzY3JvbGxUb3AgPD0gb2Zmc2V0 VG9wKSA/ICd0b3AnIDogZmFsc2UKCiAgICBpZiAodGhpcy5hZmZpeGVkID09PSBh ZmZpeCkgcmV0dXJuCiAgICBpZiAodGhpcy51bnBpbikgdGhpcy4kZWxlbWVudC5j c3MoJ3RvcCcsICcnKQoKICAgIHZhciBhZmZpeFR5cGUgPSAnYWZmaXgnICsgKGFm Zml4ID8gJy0nICsgYWZmaXggOiAnJykKICAgIHZhciBlICAgICAgICAgPSAkLkV2 ZW50KGFmZml4VHlwZSArICcuYnMuYWZmaXgnKQoKICAgIHRoaXMuJGVsZW1lbnQu dHJpZ2dlcihlKQoKICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1 cm4KCiAgICB0aGlzLmFmZml4ZWQgPSBhZmZpeAogICAgdGhpcy51bnBpbiA9IGFm Zml4ID09ICdib3R0b20nID8gdGhpcy5nZXRQaW5uZWRPZmZzZXQoKSA6IG51bGwK CiAgICB0aGlzLiRlbGVtZW50CiAgICAgIC5yZW1vdmVDbGFzcyhBZmZpeC5SRVNF VCkKICAgICAgLmFkZENsYXNzKGFmZml4VHlwZSkKICAgICAgLnRyaWdnZXIoJC5F dmVudChhZmZpeFR5cGUucmVwbGFjZSgnYWZmaXgnLCAnYWZmaXhlZCcpKSkKCiAg ICBpZiAoYWZmaXggPT0gJ2JvdHRvbScpIHsKICAgICAgdGhpcy4kZWxlbWVudC5v ZmZzZXQoeyB0b3A6IHNjcm9sbEhlaWdodCAtIG9mZnNldEJvdHRvbSAtIHRoaXMu JGVsZW1lbnQuaGVpZ2h0KCkgfSkKICAgIH0KICB9CgoKICAvLyBBRkZJWCBQTFVH SU4gREVGSU5JVElPTgogIC8vID09PT09PT09PT09PT09PT09PT09PT09CgogIHZh ciBvbGQgPSAkLmZuLmFmZml4CgogICQuZm4uYWZmaXggPSBmdW5jdGlvbiAob3B0 aW9uKSB7CiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAg dmFyICR0aGlzICAgPSAkKHRoaXMpCiAgICAgIHZhciBkYXRhICAgID0gJHRoaXMu ZGF0YSgnYnMuYWZmaXgnKQogICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBvcHRp b24gPT0gJ29iamVjdCcgJiYgb3B0aW9uCgogICAgICBpZiAoIWRhdGEpICR0aGlz LmRhdGEoJ2JzLmFmZml4JywgKGRhdGEgPSBuZXcgQWZmaXgodGhpcywgb3B0aW9u cykpKQogICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtv cHRpb25dKCkKICAgIH0pCiAgfQoKICAkLmZuLmFmZml4LkNvbnN0cnVjdG9yID0g QWZmaXgKCgogIC8vIEFGRklYIE5PIENPTkZMSUNUCiAgLy8gPT09PT09PT09PT09 PT09PT0KCiAgJC5mbi5hZmZpeC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkgewog ICAgJC5mbi5hZmZpeCA9IG9sZAogICAgcmV0dXJuIHRoaXMKICB9CgoKICAvLyBB RkZJWCBEQVRBLUFQSQogIC8vID09PT09PT09PT09PT09CgogICQod2luZG93KS5v bignbG9hZCcsIGZ1bmN0aW9uICgpIHsKICAgICQoJ1tkYXRhLXNweT0iYWZmaXgi XScpLmVhY2goZnVuY3Rpb24gKCkgewogICAgICB2YXIgJHNweSA9ICQodGhpcykK ICAgICAgdmFyIGRhdGEgPSAkc3B5LmRhdGEoKQoKICAgICAgZGF0YS5vZmZzZXQg PSBkYXRhLm9mZnNldCB8fCB7fQoKICAgICAgaWYgKGRhdGEub2Zmc2V0Qm90dG9t KSBkYXRhLm9mZnNldC5ib3R0b20gPSBkYXRhLm9mZnNldEJvdHRvbQogICAgICBp ZiAoZGF0YS5vZmZzZXRUb3ApICAgIGRhdGEub2Zmc2V0LnRvcCAgICA9IGRhdGEu b2Zmc2V0VG9wCgogICAgICAkc3B5LmFmZml4KGRhdGEpCiAgICB9KQogIH0pCgp9 KGpRdWVyeSk7Cg== ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=oocss.min.js Content-Type: application/x-javascript; name=oocss.min.js Content-Location: http://www.participa2014.cat/resultats/dades/js/oocss.min.js Content-Transfer-Encoding: Base64 ZnVuY3Rpb24gc2V0VmlzaWJpbGl0eShhLCBiKSB7CiAgICAibGciID09IGdldEVu digpID8gJCh3aW5kb3cpLnNjcm9sbFRvcCgpID4gMCA/ICQoIiNiYWNrLXRvLXRv cCIpLmZhZGVJbihhKSA6ICQoIiNiYWNrLXRvLXRvcCIpLmZhZGVPdXQoYSkgOiAw ID09ICQod2luZG93KS5zY3JvbGxUb3AoKSA/ICQoIiNiYWNrLXRvLXRvcCIpLnN0 b3AoKS5mYWRlT3V0KGEpIDogYiAtIDUwID4gJCh3aW5kb3cpLnNjcm9sbFRvcCgp ICYmIChjbGVhclRpbWVvdXQoaGlkZV90aW1lb3V0KSwgCiAgICBoaWRlX3RpbWVv dXQgPSBzZXRUaW1lb3V0KCJ0aW1lb3V0X3RyaWdnZXIoKSIsIDNlMyksICQoIiNi YWNrLXRvLXRvcCIpLmZhZGVJbihhKSk7Cn0KCmZ1bmN0aW9uIHRpbWVvdXRfdHJp Z2dlcigpIHsKICAgICQoIiNiYWNrLXRvLXRvcCIpLmZhZGVPdXQoNTAwKTsKfQoK ZnVuY3Rpb24gaGlkZUJhY2tUb1RvcCgpIHsKICAgICQoIiNiYWNrLXRvLXRvcCIp LmZhZGVPdXQoNTAwKTsKfQoKZnVuY3Rpb24gZ2V0RW52KCkgewogICAgdmFyIGEg PSBbICJ4cyIsICJzbSIsICJtZCIsICJsZyIgXTsKICAgICRlbCA9ICQoIjxkaXY+ IiksICRlbC5hcHBlbmRUbygkKCJib2R5IikpOwogICAgZm9yICh2YXIgYiA9IGEu bGVuZ3RoIC0gMTsgYiA+PSAwOyBiLS0pIHsKICAgICAgICB2YXIgYyA9IGFbYl07 CiAgICAgICAgaWYgKCRlbC5hZGRDbGFzcygiaGlkZGVuLSIgKyBjKSwgJGVsLmlz KCI6aGlkZGVuIikpIHJldHVybiAkZWwucmVtb3ZlKCksIGM7CiAgICB9Cn0KCmZ1 bmN0aW9uIHNob3dTZWxlY3RlZEZpbHRlcnMoYSwgYikgewogICAgdmFyIGMgPSAi IiwgZCA9ICEwLCBlID0gMCwgZiA9IGEuZmluZCgiLmZpbHRlcmVkLXNlYXJjaC1m aWx0ZXJzLWxpc3QgaW5wdXRbdHlwZT1jaGVja2JveF0iKTsKICAgIGYubGVuZ3Ro ID4gMSA/IChiID8gJC5lYWNoKGYsIGZ1bmN0aW9uKCkgewogICAgICAgICJhbGwi ID09ICQodGhpcykudmFsKCkgPyAkKHRoaXMpLnByb3AoImNoZWNrZWQiLCAhMCkg OiAkKHRoaXMpLnByb3AoImNoZWNrZWQiLCAhMSk7CiAgICB9KSA6ICQuZWFjaChm LCBmdW5jdGlvbigpIHsKICAgICAgICAkKHRoaXMpLnByb3AoImNoZWNrZWQiKSAm JiAiYWxsIiAhPSAkKHRoaXMpLnZhbCgpICYmIChjID0gIiIgIT0gYyA/IGMgKyAi LCAiICsgJC50cmltKCQodGhpcykuY2xvc2VzdCgibGFiZWwiKS50ZXh0KCkpIDog JC50cmltKCQodGhpcykuY2xvc2VzdCgibGFiZWwiKS50ZXh0KCkpLCAKICAgICAg ICBlKyspOwogICAgfSksIGYubGVuZ3RoID09IGUgKyAxIHx8IDAgPT0gZSA/IChm LmZpcnN0KCkucHJvcCgiY2hlY2tlZCIsICEwKSwgJC5lYWNoKGYsIGZ1bmN0aW9u KCkgewogICAgICAgICJhbGwiICE9ICQodGhpcykudmFsKCkgJiYgJCh0aGlzKS5w cm9wKCJjaGVja2VkIiwgITEpOwogICAgfSksIGQgPSAhMCkgOiAoZi5maXJzdCgp LnByb3AoImNoZWNrZWQiLCAhMSksIGQgPSAhMSksICIiID09IGMgfHwgZCA/IGEu ZmluZCgiLmZpbHRlcmVkLXNlYXJjaC1maWx0ZXJzLXNlbGVjdGVkIikudGV4dCgi QWxsIikgOiAoInhzIiA9PSBnZXRFbnYoKSAmJiBjLmxlbmd0aCA+PSAxNyAmJiAo YyA9ICJTb21lIiksIAogICAgYS5maW5kKCIuZmlsdGVyZWQtc2VhcmNoLWZpbHRl cnMtc2VsZWN0ZWQiKS50ZXh0KGMpKSkgOiAoYS5maW5kKCIuZmlsdGVyZWQtc2Vh cmNoLWZpbHRlcnMtc2VsZWN0ZWQiKS50ZXh0KCJ4cyIgIT0gZ2V0RW52KCkgPyAk LnRyaW0oZi5jbG9zZXN0KCJsYWJlbCIpLnRleHQoKSkgOiAiQWxsIiksIAogICAg Zi5wcm9wKCJjaGVja2VkIiwgITApLCBmLmF0dHIoImRpc2FibGVkIiwgImRpc2Fi bGVkIikpOwp9CgpmdW5jdGlvbiBsb2FkU3RpY2t5T2JqZWN0cygpIHsKICAgICQu ZWFjaCgkKCIuc3RpY2t5IiksIGZ1bmN0aW9uKGEpIHsKICAgICAgICAkKHRoaXMp LmFkZENsYXNzKCJzdGlja3ktIiArIGEpOwogICAgICAgIHZhciBiID0gJCh0aGlz KS5jbG9uZSghMCkucmVtb3ZlQ2xhc3MoInN0aWNreSIpLmFkZENsYXNzKCJpcy1z dGlja3kiKS5yZW1vdmVBdHRyKCJpZCIpOwogICAgICAgIGIuZmluZCgiKiIpLnJl bW92ZUF0dHIoImlkIiksIGIuZmluZCgiLnN0aWNreS1qdXN0LW1lIikubGVuZ3Ro ID4gMCAmJiAkLmVhY2goYi5jaGlsZHJlbigpLCBmdW5jdGlvbigpIHsKICAgICAg ICAgICAgJCh0aGlzKS5oYXNDbGFzcygic3RpY2t5LWp1c3QtbWUiKSB8fCAkKHRo aXMpLmNzcygiZGlzcGxheSIsICJub25lIik7CiAgICAgICAgfSksICQodGhpcyku aXMoInRhYmxlIikgJiYgKGIgPSBzZXRUYWJsZVJvd3NXaWR0aHMoJCh0aGlzKSwg YikpLCBiLmhpZGUoKSwgMCAhPSAkKHRoaXMpLnBhcmVudHMoIi5jb250YWluZXIi KS5sZW5ndGggPyAkKCIjc3RpY2t5LWhlYWRlci1jb250YWluZXIiKS5hcHBlbmQo YikgOiAkKHRoaXMpLmlzKCJoZWFkZXIiKSB8fCAkKHRoaXMpLmlzKCJuYXYiKSA/ ICQoIiNzdGlja3ktaGVhZGVyIikucHJlcGVuZChiKSA6ICQoIiNzdGlja3ktaGVh ZGVyIikuYXBwZW5kKGIpLCAKICAgICAgICAkKHRoaXMpLmlzKCJ0YWJsZSIpICYm ICQoIiNzdGlja3ktaGVhZGVyIC5zdGlja3ktIiArIGEpLndyYXAoJzxkaXYgY2xh c3M9ImhpZGRlbi14cyI+PC9kaXY+Jyk7CiAgICB9KTsKfQoKZnVuY3Rpb24gc2V0 U3RpY2t5T2JqZWN0c1Zpc2liaWxpdHkoKSB7CiAgICAkLmVhY2goJCgiLnN0aWNr eSIpLCBmdW5jdGlvbihhKSB7CiAgICAgICAgd2luZG93LnBhZ2VZT2Zmc2V0ICsg JCgiI3N0aWNreS1oZWFkZXIiKS5vdXRlckhlaWdodCgpID4gJCh0aGlzKS5wb3Np dGlvbigpLnRvcCA/ICgkKHRoaXMpLmhhc0NsYXNzKCJzdGlja3ktYWN0aW9ucyIp ID8gYW55VGFibGVDaGVja2JveFNlbGVjdGVkKCkgJiYgJCgiI3N0aWNreS1oZWFk ZXIgLnN0aWNreS0iICsgYSkuc2hvdygpIDogJCgiI3N0aWNreS1oZWFkZXIgLnN0 aWNreS0iICsgYSkuc2hvdygpLCAKICAgICAgICB3aW5kb3cucGFnZVlPZmZzZXQg KyAkKCIjc3RpY2t5LWhlYWRlciIpLm91dGVySGVpZ2h0KCkgLSAkKCIjc3RpY2t5 LWhlYWRlciAuc3RpY2t5LSIgKyBhKS5vdXRlckhlaWdodCghMCkgPCAkKHRoaXMp LnBvc2l0aW9uKCkudG9wICYmICQoIiNzdGlja3ktaGVhZGVyIC5zdGlja3ktIiAr IGEpLmhpZGUoKSkgOiAkKCIjc3RpY2t5LWhlYWRlciAuc3RpY2t5LSIgKyBhKS5o aWRlKCk7CiAgICB9KTsKfQoKZnVuY3Rpb24gcmVtb3ZlRWxlbWVudChhLCBiKSB7 CiAgICAkKCIjc3RpY2t5LWhlYWRlciAuc3RpY2t5LSIgKyBiKS5yZW1vdmUoKSwg JChhKS5yZW1vdmVDbGFzcygic3RpY2t5LSIgKyBiKTsKfQoKZnVuY3Rpb24gc2V0 VGFibGVSb3dzV2lkdGhzKGEsIGIpIHsKICAgIHJldHVybiAkLmVhY2goYS5maW5k KCJ0aCIpLCBmdW5jdGlvbihhKSB7CiAgICAgICAgYi5maW5kKCJ0aCIpLmVxKGEp LmNzcygid2lkdGgiLCAkKHRoaXMpLm91dGVyV2lkdGgoKSk7CiAgICB9KSwgYjsK fQoKZnVuY3Rpb24gYW55VGFibGVDaGVja2JveFNlbGVjdGVkKCkgewogICAgdmFy IGEgPSAkKCd0YWJsZS5zdGlja3kgdGJvZHkgdHIgdGQ6Zmlyc3QtY2hpbGQgaW5w dXRbdHlwZT0iY2hlY2tib3giXScpLCBiID0gITE7CiAgICByZXR1cm4gJC5lYWNo KGEsIGZ1bmN0aW9uKCkgewogICAgICAgICQuZWFjaChhLCBmdW5jdGlvbigpIHsK ICAgICAgICAgICAgJCh0aGlzKS5pcygiOmNoZWNrZWQiKSAmJiAoYiA9ICEwKTsK ICAgICAgICB9KTsKICAgIH0pLCBiOwp9Cgp2YXIgbGFzdFNjcm9sbFRvcCA9ICQo d2luZG93KS5zY3JvbGxUb3AoKSwgaGlkZV90aW1lb3V0OwoKJChkb2N1bWVudCku cmVhZHkoZnVuY3Rpb24oKSB7CiAgICAkKCIuZmlsdGVyZWQtc2VhcmNoLWZpbHRl cnMtbGlzdCBpbnB1dFt0eXBlPWNoZWNrYm94XSIpLmNoYW5nZShmdW5jdGlvbigp IHsKICAgICAgICB2YXIgYSwgYiA9ICQodGhpcykuY2xvc2VzdCgiLmZpbHRlcmVk LXNlYXJjaCIpOwogICAgICAgIGEgPSAiYWxsIiA9PSAkKHRoaXMpLnZhbCgpID8g ITAgOiAhMSwgc2hvd1NlbGVjdGVkRmlsdGVycyhiLCBhKTsKICAgIH0pLCAkKHdp bmRvdykucmVzaXplKGZ1bmN0aW9uKCkgewogICAgICAgICQuZWFjaCgkKCIuZmls dGVyZWQtc2VhcmNoIiksIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzaG93U2Vs ZWN0ZWRGaWx0ZXJzKCQodGhpcykpOwogICAgICAgIH0pOwogICAgfSksICQuZWFj aCgkKCIuZmlsdGVyZWQtc2VhcmNoIiksIGZ1bmN0aW9uKCkgewogICAgICAgIHNo b3dTZWxlY3RlZEZpbHRlcnMoJCh0aGlzKSk7CiAgICB9KTsKfSksICQoZG9jdW1l bnQpLmNsaWNrKGZ1bmN0aW9uKGEpIHsKICAgICQuZWFjaCgkKCIuZmlsdGVyZWQt c2VhcmNoLWZpbHRlcnMtbGlzdCIpLCBmdW5jdGlvbigpIHsKICAgICAgICB2YXIg YiA9ICQodGhpcyk7CiAgICAgICAgIWIuaXMoYS50YXJnZXQpICYmIDAgPT09IGIu aGFzKGEudGFyZ2V0KS5sZW5ndGggJiYgYi5oYXNDbGFzcygiaW4iKSAmJiBiLmNv bGxhcHNlKCJoaWRlIik7CiAgICB9KTsKfSksICQoImlucHV0W3R5cGU9ZmlsZV0i KS5vbigiY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICB2YXIgYSA9IHRoaXMudmFs dWUucmVwbGFjZSgiQzpcXGZha2VwYXRoXFwiLCAiIik7CiAgICAkKHRoaXMpLmNs b3Nlc3QoIi5pbnB1dC1maWxlIikuY2hpbGRyZW4oIi5mb3JtLWNvbnRyb2wiKS50 ZXh0KGEpLCAkKHRoaXMpLmNsb3Nlc3QoIi5pbnB1dC1maWxlIikuY2hpbGRyZW4o Ii5mb3JtLWNvbnRyb2wiKS5hdHRyKCJ0aXRsZSIsIGEpOwp9KSwgJChkb2N1bWVu dCkucmVhZHkoZnVuY3Rpb24oKSB7CiAgICAkKCIubmF2LXNpZGUtb3BlbiIpLmNs aWNrKGZ1bmN0aW9uKGEpIHsKICAgICAgICAkKCQodGhpcykuYXR0cigiaHJlZiIp KS5hZGRDbGFzcygiaW4iKSwgYS5wcmV2ZW50RGVmYXVsdCgpOwogICAgfSksICQo Ii5uYXYtc2lkZS1jbG9zZSIpLmNsaWNrKGZ1bmN0aW9uKGEpIHsKICAgICAgICAk KHRoaXMpLmNsb3Nlc3QoIi5uYXYtc2lkZSIpLnJlbW92ZUNsYXNzKCJpbiIpLCBh LnByZXZlbnREZWZhdWx0KCk7CiAgICB9KTsKfSksICQoZG9jdW1lbnQpLnJlYWR5 KGZ1bmN0aW9uKCkgewogICAgJCgiYm9keSIpLnByZXBlbmQoJzxkaXYgaWQ9InN0 aWNreS1oZWFkZXIiPjxkaXYgaWQ9InN0aWNreS1oZWFkZXItY29udGFpbmVyIiBj bGFzcz0iY29udGFpbmVyIj48L2Rpdj48L2Rpdj4nKSwgCiAgICBsb2FkU3RpY2t5 T2JqZWN0cygpLCAkKHdpbmRvdykuc2Nyb2xsKGZ1bmN0aW9uKCkgewogICAgICAg IHNldFN0aWNreU9iamVjdHNWaXNpYmlsaXR5KCk7CiAgICB9KSwgc2V0U3RpY2t5 T2JqZWN0c1Zpc2liaWxpdHkoKTsKfSk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPW9v Y3NzLm1pbi5qcy5tYXA= ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=typeahead-0.10.5.js Content-Type: application/x-javascript; name=typeahead-0.10.5.js Content-Location: http://www.participa2014.cat/resultats/dades/js/typeahead-0.10.5.js Content-Transfer-Encoding: Base64 LyohCiAqIHR5cGVhaGVhZC5qcyAwLjEwLjUKICogaHR0cHM6Ly9naXRodWIuY29t L3R3aXR0ZXIvdHlwZWFoZWFkLmpzCiAqIENvcHlyaWdodCAyMDEzLTIwMTQgVHdp dHRlciwgSW5jLiBhbmQgb3RoZXIgY29udHJpYnV0b3JzOyBMaWNlbnNlZCBNSVQK ICovCgooZnVuY3Rpb24oJCkgewogICAgdmFyIF8gPSBmdW5jdGlvbigpIHsKICAg ICAgICAidXNlIHN0cmljdCI7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAg aXNNc2llOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiAvKG1z aWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpID8gbmF2aWdh dG9yLnVzZXJBZ2VudC5tYXRjaCgvKG1zaWUgfHJ2OikoXGQrKC5cZCspPykvaSlb Ml0gOiBmYWxzZTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgaXNCbGFua1N0 cmluZzogZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIXN0 ciB8fCAvXlxzKiQvLnRlc3Qoc3RyKTsKICAgICAgICAgICAgfSwKICAgICAgICAg ICAgZXNjYXBlUmVnRXhDaGFyczogZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAg ICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1tcLVxbXF1cL1x7XH1cKFwpXCpcK1w/ XC5cXFxeXCRcfF0vZywgIlxcJCYiKTsKICAgICAgICAgICAgfSwKICAgICAgICAg ICAgaXNTdHJpbmc6IGZ1bmN0aW9uKG9iaikgewogICAgICAgICAgICAgICAgcmV0 dXJuIHR5cGVvZiBvYmogPT09ICJzdHJpbmciOwogICAgICAgICAgICB9LAogICAg ICAgICAgICBpc051bWJlcjogZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICAgICAg ICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gIm51bWJlciI7CiAgICAgICAgICAgIH0s CiAgICAgICAgICAgIGlzQXJyYXk6ICQuaXNBcnJheSwKICAgICAgICAgICAgaXNG dW5jdGlvbjogJC5pc0Z1bmN0aW9uLAogICAgICAgICAgICBpc09iamVjdDogJC5p c1BsYWluT2JqZWN0LAogICAgICAgICAgICBpc1VuZGVmaW5lZDogZnVuY3Rpb24o b2JqKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gInVu ZGVmaW5lZCI7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHRvU3RyOiBmdW5j dGlvbiB0b1N0cihzKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gXy5pc1VuZGVm aW5lZChzKSB8fCBzID09PSBudWxsID8gIiIgOiBzICsgIiI7CiAgICAgICAgICAg IH0sCiAgICAgICAgICAgIGJpbmQ6ICQucHJveHksCiAgICAgICAgICAgIGVhY2g6 IGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGNiKSB7CiAgICAgICAgICAgICAgICAkLmVh Y2goY29sbGVjdGlvbiwgcmV2ZXJzZUFyZ3MpOwogICAgICAgICAgICAgICAgZnVu Y3Rpb24gcmV2ZXJzZUFyZ3MoaW5kZXgsIHZhbHVlKSB7CiAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIGNiKHZhbHVlLCBpbmRleCk7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG1hcDogJC5tYXAsCiAgICAgICAg ICAgIGZpbHRlcjogJC5ncmVwLAogICAgICAgICAgICBldmVyeTogZnVuY3Rpb24o b2JqLCB0ZXN0KSB7CiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdHJ1ZTsK ICAgICAgICAgICAgICAgIGlmICghb2JqKSB7CiAgICAgICAgICAgICAgICAgICAg cmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg ICQuZWFjaChvYmosIGZ1bmN0aW9uKGtleSwgdmFsKSB7CiAgICAgICAgICAgICAg ICAgICAgaWYgKCEocmVzdWx0ID0gdGVzdC5jYWxsKG51bGwsIHZhbCwga2V5LCBv YmopKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAg ICAgICAgICByZXR1cm4gISFyZXN1bHQ7CiAgICAgICAgICAgIH0sCiAgICAgICAg ICAgIHNvbWU6IGZ1bmN0aW9uKG9iaiwgdGVzdCkgewogICAgICAgICAgICAgICAg dmFyIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgaWYgKCFvYmopIHsK ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgJC5lYWNoKG9iaiwgZnVuY3Rpb24oa2V5LCB2 YWwpIHsKICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID0gdGVzdC5jYWxs KG51bGwsIHZhbCwga2V5LCBvYmopKSB7CiAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICB9KTsKICAgICAgICAgICAgICAgIHJldHVybiAhIXJlc3VsdDsKICAgICAg ICAgICAgfSwKICAgICAgICAgICAgbWl4aW46ICQuZXh0ZW5kLAogICAgICAgICAg ICBnZXRVbmlxdWVJZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIg Y291bnRlciA9IDA7CiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7 CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50ZXIrKzsKICAgICAgICAg ICAgICAgIH07CiAgICAgICAgICAgIH0oKSwKICAgICAgICAgICAgdGVtcGxhdGlm eTogZnVuY3Rpb24gdGVtcGxhdGlmeShvYmopIHsKICAgICAgICAgICAgICAgIHJl dHVybiAkLmlzRnVuY3Rpb24ob2JqKSA/IG9iaiA6IHRlbXBsYXRlOwogICAgICAg ICAgICAgICAgZnVuY3Rpb24gdGVtcGxhdGUoKSB7CiAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIFN0cmluZyhvYmopOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICB9LAogICAgICAgICAgICBkZWZlcjogZnVuY3Rpb24oZm4pIHsKICAgICAg ICAgICAgICAgIHNldFRpbWVvdXQoZm4sIDApOwogICAgICAgICAgICB9LAogICAg ICAgICAgICBkZWJvdW5jZTogZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRl KSB7CiAgICAgICAgICAgICAgICB2YXIgdGltZW91dCwgcmVzdWx0OwogICAgICAg ICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAg IHZhciBjb250ZXh0ID0gdGhpcywgYXJncyA9IGFyZ3VtZW50cywgbGF0ZXIsIGNh bGxOb3c7CiAgICAgICAgICAgICAgICAgICAgbGF0ZXIgPSBmdW5jdGlvbigpIHsK ICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IG51bGw7CiAgICAgICAg ICAgICAgICAgICAgICAgIGlmICghaW1tZWRpYXRlKSB7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3Mp OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg fTsKICAgICAgICAgICAgICAgICAgICBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0 aW1lb3V0OwogICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0 KTsKICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRl ciwgd2FpdCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxOb3cpIHsKICAg ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0 LCBhcmdzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAg IH0sCiAgICAgICAgICAgIHRocm90dGxlOiBmdW5jdGlvbihmdW5jLCB3YWl0KSB7 CiAgICAgICAgICAgICAgICB2YXIgY29udGV4dCwgYXJncywgdGltZW91dCwgcmVz dWx0LCBwcmV2aW91cywgbGF0ZXI7CiAgICAgICAgICAgICAgICBwcmV2aW91cyA9 IDA7CiAgICAgICAgICAgICAgICBsYXRlciA9IGZ1bmN0aW9uKCkgewogICAgICAg ICAgICAgICAgICAgIHByZXZpb3VzID0gbmV3IERhdGUoKTsKICAgICAgICAgICAg ICAgICAgICB0aW1lb3V0ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICByZXN1 bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpOwogICAgICAgICAgICAgICAg fTsKICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICAg ICAgICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKSwgcmVtYWluaW5nID0gd2Fp dCAtIChub3cgLSBwcmV2aW91cyk7CiAgICAgICAgICAgICAgICAgICAgY29udGV4 dCA9IHRoaXM7CiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3VtZW50czsK ICAgICAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nIDw9IDApIHsKICAgICAg ICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpOwogICAgICAg ICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDsKICAgICAgICAgICAgICAg ICAgICAgICAgcHJldmlvdXMgPSBub3c7CiAgICAgICAgICAgICAgICAgICAgICAg IHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7CiAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIGlmICghdGltZW91dCkgewogICAgICAgICAgICAgICAg ICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTsK ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJu IHJlc3VsdDsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0sCiAgICAg ICAgICAgIG5vb3A6IGZ1bmN0aW9uKCkge30KICAgICAgICB9OwogICAgfSgpOwog ICAgdmFyIFZFUlNJT04gPSAiMC4xMC41IjsKICAgIHZhciB0b2tlbml6ZXJzID0g ZnVuY3Rpb24oKSB7CiAgICAgICAgInVzZSBzdHJpY3QiOwogICAgICAgIHJldHVy biB7CiAgICAgICAgICAgIG5vbndvcmQ6IG5vbndvcmQsCiAgICAgICAgICAgIHdo aXRlc3BhY2U6IHdoaXRlc3BhY2UsCiAgICAgICAgICAgIG9iajogewogICAgICAg ICAgICAgICAgbm9ud29yZDogZ2V0T2JqVG9rZW5pemVyKG5vbndvcmQpLAogICAg ICAgICAgICAgICAgd2hpdGVzcGFjZTogZ2V0T2JqVG9rZW5pemVyKHdoaXRlc3Bh Y2UpCiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGZ1bmN0aW9uIHdo aXRlc3BhY2Uoc3RyKSB7CiAgICAgICAgICAgIHN0ciA9IF8udG9TdHIoc3RyKTsK ICAgICAgICAgICAgcmV0dXJuIHN0ciA/IHN0ci5zcGxpdCgvXHMrLykgOiBbXTsK ICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gbm9ud29yZChzdHIpIHsKICAgICAg ICAgICAgc3RyID0gXy50b1N0cihzdHIpOwogICAgICAgICAgICByZXR1cm4gc3Ry ID8gc3RyLnNwbGl0KC9cVysvKSA6IFtdOwogICAgICAgIH0KICAgICAgICBmdW5j dGlvbiBnZXRPYmpUb2tlbml6ZXIodG9rZW5pemVyKSB7CiAgICAgICAgICAgIHJl dHVybiBmdW5jdGlvbiBzZXRLZXkoKSB7CiAgICAgICAgICAgICAgICB2YXIgYXJn cyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTsKICAgICAgICAgICAgICAg IHJldHVybiBmdW5jdGlvbiB0b2tlbml6ZShvKSB7CiAgICAgICAgICAgICAgICAg ICAgdmFyIHRva2VucyA9IFtdOwogICAgICAgICAgICAgICAgICAgIF8uZWFjaChh cmdzLCBmdW5jdGlvbihrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu cyA9IHRva2Vucy5jb25jYXQodG9rZW5pemVyKF8udG9TdHIob1trXSkpKTsKICAg ICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4g dG9rZW5zOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfTsKICAgICAg ICB9CiAgICB9KCk7CiAgICB2YXIgTHJ1Q2FjaGUgPSBmdW5jdGlvbigpIHsKICAg ICAgICAidXNlIHN0cmljdCI7CiAgICAgICAgZnVuY3Rpb24gTHJ1Q2FjaGUobWF4 U2l6ZSkgewogICAgICAgICAgICB0aGlzLm1heFNpemUgPSBfLmlzTnVtYmVyKG1h eFNpemUpID8gbWF4U2l6ZSA6IDEwMDsKICAgICAgICAgICAgdGhpcy5yZXNldCgp OwogICAgICAgICAgICBpZiAodGhpcy5tYXhTaXplIDw9IDApIHsKICAgICAgICAg ICAgICAgIHRoaXMuc2V0ID0gdGhpcy5nZXQgPSAkLm5vb3A7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICAgICAgXy5taXhpbihMcnVDYWNoZS5wcm90b3R5cGUs IHsKICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWwpIHsKICAg ICAgICAgICAgICAgIHZhciB0YWlsSXRlbSA9IHRoaXMubGlzdC50YWlsLCBub2Rl OwogICAgICAgICAgICAgICAgaWYgKHRoaXMuc2l6ZSA+PSB0aGlzLm1heFNpemUp IHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3QucmVtb3ZlKHRhaWxJdGVt KTsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5oYXNoW3RhaWxJdGVt LmtleV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAobm9k ZSA9IHRoaXMuaGFzaFtrZXldKSB7CiAgICAgICAgICAgICAgICAgICAgbm9kZS52 YWwgPSB2YWw7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0Lm1vdmVUb0Zy b250KG5vZGUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg ICAgICAgICBub2RlID0gbmV3IE5vZGUoa2V5LCB2YWwpOwogICAgICAgICAgICAg ICAgICAgIHRoaXMubGlzdC5hZGQobm9kZSk7CiAgICAgICAgICAgICAgICAgICAg dGhpcy5oYXNoW2tleV0gPSBub2RlOwogICAgICAgICAgICAgICAgICAgIHRoaXMu c2l6ZSsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAg ICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHsKICAgICAgICAgICAgICAgIHZh ciBub2RlID0gdGhpcy5oYXNoW2tleV07CiAgICAgICAgICAgICAgICBpZiAobm9k ZSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdC5tb3ZlVG9Gcm9udChu b2RlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS52YWw7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlc2V0OiBm dW5jdGlvbiByZXNldCgpIHsKICAgICAgICAgICAgICAgIHRoaXMuc2l6ZSA9IDA7 CiAgICAgICAgICAgICAgICB0aGlzLmhhc2ggPSB7fTsKICAgICAgICAgICAgICAg IHRoaXMubGlzdCA9IG5ldyBMaXN0KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9 KTsKICAgICAgICBmdW5jdGlvbiBMaXN0KCkgewogICAgICAgICAgICB0aGlzLmhl YWQgPSB0aGlzLnRhaWwgPSBudWxsOwogICAgICAgIH0KICAgICAgICBfLm1peGlu KExpc3QucHJvdG90eXBlLCB7CiAgICAgICAgICAgIGFkZDogZnVuY3Rpb24gYWRk KG5vZGUpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLmhlYWQpIHsKICAgICAg ICAgICAgICAgICAgICBub2RlLm5leHQgPSB0aGlzLmhlYWQ7CiAgICAgICAgICAg ICAgICAgICAgdGhpcy5oZWFkLnByZXYgPSBub2RlOwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgdGhpcy5oZWFkID0gbm9kZTsKICAgICAgICAgICAg ICAgIHRoaXMudGFpbCA9IHRoaXMudGFpbCB8fCBub2RlOwogICAgICAgICAgICB9 LAogICAgICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShub2RlKSB7CiAg ICAgICAgICAgICAgICBub2RlLnByZXYgPyBub2RlLnByZXYubmV4dCA9IG5vZGUu bmV4dCA6IHRoaXMuaGVhZCA9IG5vZGUubmV4dDsKICAgICAgICAgICAgICAgIG5v ZGUubmV4dCA/IG5vZGUubmV4dC5wcmV2ID0gbm9kZS5wcmV2IDogdGhpcy50YWls ID0gbm9kZS5wcmV2OwogICAgICAgICAgICB9LAogICAgICAgICAgICBtb3ZlVG9G cm9udDogZnVuY3Rpb24obm9kZSkgewogICAgICAgICAgICAgICAgdGhpcy5yZW1v dmUobm9kZSk7CiAgICAgICAgICAgICAgICB0aGlzLmFkZChub2RlKTsKICAgICAg ICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGZ1bmN0aW9uIE5vZGUoa2V5LCB2 YWwpIHsKICAgICAgICAgICAgdGhpcy5rZXkgPSBrZXk7CiAgICAgICAgICAgIHRo aXMudmFsID0gdmFsOwogICAgICAgICAgICB0aGlzLnByZXYgPSB0aGlzLm5leHQg PSBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gTHJ1Q2FjaGU7CiAgICB9 KCk7CiAgICB2YXIgUGVyc2lzdGVudFN0b3JhZ2UgPSBmdW5jdGlvbigpIHsKICAg ICAgICAidXNlIHN0cmljdCI7CiAgICAgICAgdmFyIGxzLCBtZXRob2RzOwogICAg ICAgIHRyeSB7CiAgICAgICAgICAgIGxzID0gd2luZG93LmxvY2FsU3RvcmFnZTsK ICAgICAgICAgICAgbHMuc2V0SXRlbSgifn5+IiwgIiEiKTsKICAgICAgICAgICAg bHMucmVtb3ZlSXRlbSgifn5+Iik7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAg ICAgICAgICAgIGxzID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24g UGVyc2lzdGVudFN0b3JhZ2UobmFtZXNwYWNlKSB7CiAgICAgICAgICAgIHRoaXMu cHJlZml4ID0gWyAiX18iLCBuYW1lc3BhY2UsICJfXyIgXS5qb2luKCIiKTsKICAg ICAgICAgICAgdGhpcy50dGxLZXkgPSAiX190dGxfXyI7CiAgICAgICAgICAgIHRo aXMua2V5TWF0Y2hlciA9IG5ldyBSZWdFeHAoIl4iICsgXy5lc2NhcGVSZWdFeENo YXJzKHRoaXMucHJlZml4KSk7CiAgICAgICAgfQogICAgICAgIGlmIChscyAmJiB3 aW5kb3cuSlNPTikgewogICAgICAgICAgICBtZXRob2RzID0gewogICAgICAgICAg ICAgICAgX3ByZWZpeDogZnVuY3Rpb24oa2V5KSB7CiAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIHRoaXMucHJlZml4ICsga2V5OwogICAgICAgICAgICAgICAgfSwK ICAgICAgICAgICAgICAgIF90dGxLZXk6IGZ1bmN0aW9uKGtleSkgewogICAgICAg ICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcmVmaXgoa2V5KSArIHRoaXMudHRs S2V5OwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGdldDogZnVu Y3Rpb24oa2V5KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNFeHBp cmVkKGtleSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmUo a2V5KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg cmV0dXJuIGRlY29kZShscy5nZXRJdGVtKHRoaXMuX3ByZWZpeChrZXkpKSk7CiAg ICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihr ZXksIHZhbCwgdHRsKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKF8uaXNOdW1i ZXIodHRsKSkgewogICAgICAgICAgICAgICAgICAgICAgICBscy5zZXRJdGVtKHRo aXMuX3R0bEtleShrZXkpLCBlbmNvZGUobm93KCkgKyB0dGwpKTsKICAgICAgICAg ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBscy5y ZW1vdmVJdGVtKHRoaXMuX3R0bEtleShrZXkpKTsKICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxzLnNldEl0ZW0odGhpcy5f cHJlZml4KGtleSksIGVuY29kZSh2YWwpKTsKICAgICAgICAgICAgICAgIH0sCiAg ICAgICAgICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKGtleSkgewogICAgICAgICAg ICAgICAgICAgIGxzLnJlbW92ZUl0ZW0odGhpcy5fdHRsS2V5KGtleSkpOwogICAg ICAgICAgICAgICAgICAgIGxzLnJlbW92ZUl0ZW0odGhpcy5fcHJlZml4KGtleSkp OwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAg ICAgfSwKICAgICAgICAgICAgICAgIGNsZWFyOiBmdW5jdGlvbigpIHsKICAgICAg ICAgICAgICAgICAgICB2YXIgaSwga2V5LCBrZXlzID0gW10sIGxlbiA9IGxzLmxl bmd0aDsKICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBp KyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChrZXkgPSBscy5rZXko aSkpLm1hdGNoKHRoaXMua2V5TWF0Y2hlcikpIHsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGtleXMucHVzaChrZXkucmVwbGFjZSh0aGlzLmtleU1hdGNoZXIs ICIiKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0ga2V5cy5sZW5ndGg7 IGktLTsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKGtl eXNbaV0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAg ICBpc0V4cGlyZWQ6IGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICAgICAgICAg IHZhciB0dGwgPSBkZWNvZGUobHMuZ2V0SXRlbSh0aGlzLl90dGxLZXkoa2V5KSkp OwogICAgICAgICAgICAgICAgICAgIHJldHVybiBfLmlzTnVtYmVyKHR0bCkgJiYg bm93KCkgPiB0dGwgPyB0cnVlIDogZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbWV0aG9k cyA9IHsKICAgICAgICAgICAgICAgIGdldDogXy5ub29wLAogICAgICAgICAgICAg ICAgc2V0OiBfLm5vb3AsCiAgICAgICAgICAgICAgICByZW1vdmU6IF8ubm9vcCwK ICAgICAgICAgICAgICAgIGNsZWFyOiBfLm5vb3AsCiAgICAgICAgICAgICAgICBp c0V4cGlyZWQ6IF8ubm9vcAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAg ICBfLm1peGluKFBlcnNpc3RlbnRTdG9yYWdlLnByb3RvdHlwZSwgbWV0aG9kcyk7 CiAgICAgICAgcmV0dXJuIFBlcnNpc3RlbnRTdG9yYWdlOwogICAgICAgIGZ1bmN0 aW9uIG5vdygpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGlt ZSgpOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBlbmNvZGUodmFsKSB7CiAg ICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShfLmlzVW5kZWZpbmVkKHZh bCkgPyBudWxsIDogdmFsKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gZGVj b2RlKHZhbCkgewogICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh2YWwpOwog ICAgICAgIH0KICAgIH0oKTsKICAgIHZhciBUcmFuc3BvcnQgPSBmdW5jdGlvbigp IHsKICAgICAgICAidXNlIHN0cmljdCI7CiAgICAgICAgdmFyIHBlbmRpbmdSZXF1 ZXN0c0NvdW50ID0gMCwgcGVuZGluZ1JlcXVlc3RzID0ge30sIG1heFBlbmRpbmdS ZXF1ZXN0cyA9IDYsIHNoYXJlZENhY2hlID0gbmV3IExydUNhY2hlKDEwKTsKICAg ICAgICBmdW5jdGlvbiBUcmFuc3BvcnQobykgewogICAgICAgICAgICBvID0gbyB8 fCB7fTsKICAgICAgICAgICAgdGhpcy5jYW5jZWxsZWQgPSBmYWxzZTsKICAgICAg ICAgICAgdGhpcy5sYXN0VXJsID0gbnVsbDsKICAgICAgICAgICAgdGhpcy5fc2Vu ZCA9IG8udHJhbnNwb3J0ID8gY2FsbGJhY2tUb0RlZmVycmVkKG8udHJhbnNwb3J0 KSA6ICQuYWpheDsKICAgICAgICAgICAgdGhpcy5fZ2V0ID0gby5yYXRlTGltaXRl ciA/IG8ucmF0ZUxpbWl0ZXIodGhpcy5fZ2V0KSA6IHRoaXMuX2dldDsKICAgICAg ICAgICAgdGhpcy5fY2FjaGUgPSBvLmNhY2hlID09PSBmYWxzZSA/IG5ldyBMcnVD YWNoZSgwKSA6IHNoYXJlZENhY2hlOwogICAgICAgIH0KICAgICAgICBUcmFuc3Bv cnQuc2V0TWF4UGVuZGluZ1JlcXVlc3RzID0gZnVuY3Rpb24gc2V0TWF4UGVuZGlu Z1JlcXVlc3RzKG51bSkgewogICAgICAgICAgICBtYXhQZW5kaW5nUmVxdWVzdHMg PSBudW07CiAgICAgICAgfTsKICAgICAgICBUcmFuc3BvcnQucmVzZXRDYWNoZSA9 IGZ1bmN0aW9uIHJlc2V0Q2FjaGUoKSB7CiAgICAgICAgICAgIHNoYXJlZENhY2hl LnJlc2V0KCk7CiAgICAgICAgfTsKICAgICAgICBfLm1peGluKFRyYW5zcG9ydC5w cm90b3R5cGUsIHsKICAgICAgICAgICAgX2dldDogZnVuY3Rpb24odXJsLCBvLCBj YikgewogICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLCBqcVhocjsKICAg ICAgICAgICAgICAgIGlmICh0aGlzLmNhbmNlbGxlZCB8fCB1cmwgIT09IHRoaXMu bGFzdFVybCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChqcVhociA9IHBlbmRpbmdSZXF1 ZXN0c1t1cmxdKSB7CiAgICAgICAgICAgICAgICAgICAganFYaHIuZG9uZShkb25l KS5mYWlsKGZhaWwpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwZW5kaW5n UmVxdWVzdHNDb3VudCA8IG1heFBlbmRpbmdSZXF1ZXN0cykgewogICAgICAgICAg ICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0c0NvdW50Kys7CiAgICAgICAgICAgICAg ICAgICAgcGVuZGluZ1JlcXVlc3RzW3VybF0gPSB0aGlzLl9zZW5kKHVybCwgbyku ZG9uZShkb25lKS5mYWlsKGZhaWwpLmFsd2F5cyhhbHdheXMpOwogICAgICAgICAg ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGVja1Jl cXVlc3RBcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gZG9uZShyZXNwKSB7 CiAgICAgICAgICAgICAgICAgICAgY2IgJiYgY2IobnVsbCwgcmVzcCk7CiAgICAg ICAgICAgICAgICAgICAgdGhhdC5fY2FjaGUuc2V0KHVybCwgcmVzcCk7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBmYWlsKCkgewog ICAgICAgICAgICAgICAgICAgIGNiICYmIGNiKHRydWUpOwogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gYWx3YXlzKCkgewogICAgICAg ICAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0c0NvdW50LS07CiAgICAgICAgICAg ICAgICAgICAgZGVsZXRlIHBlbmRpbmdSZXF1ZXN0c1t1cmxdOwogICAgICAgICAg ICAgICAgICAgIGlmICh0aGF0Lm9uRGVja1JlcXVlc3RBcmdzKSB7CiAgICAgICAg ICAgICAgICAgICAgICAgIHRoYXQuX2dldC5hcHBseSh0aGF0LCB0aGF0Lm9uRGVj a1JlcXVlc3RBcmdzKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5vbkRl Y2tSZXF1ZXN0QXJncyA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBnZXQ6IGZ1 bmN0aW9uKHVybCwgbywgY2IpIHsKICAgICAgICAgICAgICAgIHZhciByZXNwOwog ICAgICAgICAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihvKSkgewogICAgICAgICAg ICAgICAgICAgIGNiID0gbzsKICAgICAgICAgICAgICAgICAgICBvID0ge307CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbGxlZCA9 IGZhbHNlOwogICAgICAgICAgICAgICAgdGhpcy5sYXN0VXJsID0gdXJsOwogICAg ICAgICAgICAgICAgaWYgKHJlc3AgPSB0aGlzLl9jYWNoZS5nZXQodXJsKSkgewog ICAgICAgICAgICAgICAgICAgIF8uZGVmZXIoZnVuY3Rpb24oKSB7CiAgICAgICAg ICAgICAgICAgICAgICAgIGNiICYmIGNiKG51bGwsIHJlc3ApOwogICAgICAgICAg ICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg ICAgICAgICAgICB0aGlzLl9nZXQodXJsLCBvLCBjYik7CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICByZXR1cm4gISFyZXNwOwogICAgICAgICAgICB9 LAogICAgICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg ICAgdGhpcy5jYW5jZWxsZWQgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAg fSk7CiAgICAgICAgcmV0dXJuIFRyYW5zcG9ydDsKICAgICAgICBmdW5jdGlvbiBj YWxsYmFja1RvRGVmZXJyZWQoZm4pIHsKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0 aW9uIGN1c3RvbVNlbmRXcmFwcGVyKHVybCwgbykgewogICAgICAgICAgICAgICAg dmFyIGRlZmVycmVkID0gJC5EZWZlcnJlZCgpOwogICAgICAgICAgICAgICAgZm4o dXJsLCBvLCBvblN1Y2Nlc3MsIG9uRXJyb3IpOwogICAgICAgICAgICAgICAgcmV0 dXJuIGRlZmVycmVkOwogICAgICAgICAgICAgICAgZnVuY3Rpb24gb25TdWNjZXNz KHJlc3ApIHsKICAgICAgICAgICAgICAgICAgICBfLmRlZmVyKGZ1bmN0aW9uKCkg ewogICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKHJlc3Ap OwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgZnVuY3Rpb24gb25FcnJvcihlcnIpIHsKICAgICAgICAgICAg ICAgICAgICBfLmRlZmVyKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAg ICAgICBkZWZlcnJlZC5yZWplY3QoZXJyKTsKICAgICAgICAgICAgICAgICAgICB9 KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAg ICB9KCk7CiAgICB2YXIgU2VhcmNoSW5kZXggPSBmdW5jdGlvbigpIHsKICAgICAg ICAidXNlIHN0cmljdCI7CiAgICAgICAgZnVuY3Rpb24gU2VhcmNoSW5kZXgobykg ewogICAgICAgICAgICBvID0gbyB8fCB7fTsKICAgICAgICAgICAgaWYgKCFvLmRh dHVtVG9rZW5pemVyIHx8ICFvLnF1ZXJ5VG9rZW5pemVyKSB7CiAgICAgICAgICAg ICAgICAkLmVycm9yKCJkYXR1bVRva2VuaXplciBhbmQgcXVlcnlUb2tlbml6ZXIg YXJlIGJvdGggcmVxdWlyZWQiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0 aGlzLmRhdHVtVG9rZW5pemVyID0gby5kYXR1bVRva2VuaXplcjsKICAgICAgICAg ICAgdGhpcy5xdWVyeVRva2VuaXplciA9IG8ucXVlcnlUb2tlbml6ZXI7CiAgICAg ICAgICAgIHRoaXMucmVzZXQoKTsKICAgICAgICB9CiAgICAgICAgXy5taXhpbihT ZWFyY2hJbmRleC5wcm90b3R5cGUsIHsKICAgICAgICAgICAgYm9vdHN0cmFwOiBm dW5jdGlvbiBib290c3RyYXAobykgewogICAgICAgICAgICAgICAgdGhpcy5kYXR1 bXMgPSBvLmRhdHVtczsKICAgICAgICAgICAgICAgIHRoaXMudHJpZSA9IG8udHJp ZTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYWRkOiBmdW5jdGlvbihkYXRh KSB7CiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgICAg ICAgICBkYXRhID0gXy5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFsgZGF0YSBdOwog ICAgICAgICAgICAgICAgXy5lYWNoKGRhdGEsIGZ1bmN0aW9uKGRhdHVtKSB7CiAg ICAgICAgICAgICAgICAgICAgdmFyIGlkLCB0b2tlbnM7CiAgICAgICAgICAgICAg ICAgICAgaWQgPSB0aGF0LmRhdHVtcy5wdXNoKGRhdHVtKSAtIDE7CiAgICAgICAg ICAgICAgICAgICAgdG9rZW5zID0gbm9ybWFsaXplVG9rZW5zKHRoYXQuZGF0dW1U b2tlbml6ZXIoZGF0dW0pKTsKICAgICAgICAgICAgICAgICAgICBfLmVhY2godG9r ZW5zLCBmdW5jdGlvbih0b2tlbikgewogICAgICAgICAgICAgICAgICAgICAgICB2 YXIgbm9kZSwgY2hhcnMsIGNoOwogICAgICAgICAgICAgICAgICAgICAgICBub2Rl ID0gdGhhdC50cmllOwogICAgICAgICAgICAgICAgICAgICAgICBjaGFycyA9IHRv a2VuLnNwbGl0KCIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNo ID0gY2hhcnMuc2hpZnQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg bm9kZSA9IG5vZGUuY2hpbGRyZW5bY2hdIHx8IChub2RlLmNoaWxkcmVuW2NoXSA9 IG5ld05vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmlk cy5wdXNoKGlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0s CiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KHF1ZXJ5KSB7CiAgICAgICAg ICAgICAgICB2YXIgdGhhdCA9IHRoaXMsIHRva2VucywgbWF0Y2hlczsKICAgICAg ICAgICAgICAgIHRva2VucyA9IG5vcm1hbGl6ZVRva2Vucyh0aGlzLnF1ZXJ5VG9r ZW5pemVyKHF1ZXJ5KSk7CiAgICAgICAgICAgICAgICBfLmVhY2godG9rZW5zLCBm dW5jdGlvbih0b2tlbikgewogICAgICAgICAgICAgICAgICAgIHZhciBub2RlLCBj aGFycywgY2gsIGlkczsKICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyAm JiBtYXRjaGVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICAgIG5vZGUgPSB0aGF0LnRyaWU7CiAgICAgICAgICAgICAgICAgICAg Y2hhcnMgPSB0b2tlbi5zcGxpdCgiIik7CiAgICAgICAgICAgICAgICAgICAgd2hp bGUgKG5vZGUgJiYgKGNoID0gY2hhcnMuc2hpZnQoKSkpIHsKICAgICAgICAgICAg ICAgICAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGRyZW5bY2hdOwogICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSAmJiBjaGFy cy5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWRzID0g bm9kZS5pZHMuc2xpY2UoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNo ZXMgPSBtYXRjaGVzID8gZ2V0SW50ZXJzZWN0aW9uKG1hdGNoZXMsIGlkcykgOiBp ZHM7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg ICAgICAgICAgbWF0Y2hlcyA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyA/IF8ubWFwKHVu aXF1ZShtYXRjaGVzKSwgZnVuY3Rpb24oaWQpIHsKICAgICAgICAgICAgICAgICAg ICByZXR1cm4gdGhhdC5kYXR1bXNbaWRdOwogICAgICAgICAgICAgICAgfSkgOiBb XTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uIHJl c2V0KCkgewogICAgICAgICAgICAgICAgdGhpcy5kYXR1bXMgPSBbXTsKICAgICAg ICAgICAgICAgIHRoaXMudHJpZSA9IG5ld05vZGUoKTsKICAgICAgICAgICAgfSwK ICAgICAgICAgICAgc2VyaWFsaXplOiBmdW5jdGlvbiBzZXJpYWxpemUoKSB7CiAg ICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIGRhdHVt czogdGhpcy5kYXR1bXMsCiAgICAgICAgICAgICAgICAgICAgdHJpZTogdGhpcy50 cmllCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfSk7 CiAgICAgICAgcmV0dXJuIFNlYXJjaEluZGV4OwogICAgICAgIGZ1bmN0aW9uIG5v cm1hbGl6ZVRva2Vucyh0b2tlbnMpIHsKICAgICAgICAgICAgdG9rZW5zID0gXy5m aWx0ZXIodG9rZW5zLCBmdW5jdGlvbih0b2tlbikgewogICAgICAgICAgICAgICAg cmV0dXJuICEhdG9rZW47CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0b2tl bnMgPSBfLm1hcCh0b2tlbnMsIGZ1bmN0aW9uKHRva2VuKSB7CiAgICAgICAgICAg ICAgICByZXR1cm4gdG9rZW4udG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgfSk7 CiAgICAgICAgICAgIHJldHVybiB0b2tlbnM7CiAgICAgICAgfQogICAgICAgIGZ1 bmN0aW9uIG5ld05vZGUoKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAg ICAgICAgICBpZHM6IFtdLAogICAgICAgICAgICAgICAgY2hpbGRyZW46IHt9CiAg ICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHVuaXF1ZShh cnJheSkgewogICAgICAgICAgICB2YXIgc2VlbiA9IHt9LCB1bmlxdWVzID0gW107 CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcnJheS5sZW5ndGg7 IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgaWYgKCFzZWVuW2FycmF5 W2ldXSkgewogICAgICAgICAgICAgICAgICAgIHNlZW5bYXJyYXlbaV1dID0gdHJ1 ZTsKICAgICAgICAgICAgICAgICAgICB1bmlxdWVzLnB1c2goYXJyYXlbaV0pOwog ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVy biB1bmlxdWVzOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBnZXRJbnRlcnNl Y3Rpb24oYXJyYXlBLCBhcnJheUIpIHsKICAgICAgICAgICAgdmFyIGFpID0gMCwg YmkgPSAwLCBpbnRlcnNlY3Rpb24gPSBbXTsKICAgICAgICAgICAgYXJyYXlBID0g YXJyYXlBLnNvcnQoY29tcGFyZSk7CiAgICAgICAgICAgIGFycmF5QiA9IGFycmF5 Qi5zb3J0KGNvbXBhcmUpOwogICAgICAgICAgICB2YXIgbGVuQXJyYXlBID0gYXJy YXlBLmxlbmd0aCwgbGVuQXJyYXlCID0gYXJyYXlCLmxlbmd0aDsKICAgICAgICAg ICAgd2hpbGUgKGFpIDwgbGVuQXJyYXlBICYmIGJpIDwgbGVuQXJyYXlCKSB7CiAg ICAgICAgICAgICAgICBpZiAoYXJyYXlBW2FpXSA8IGFycmF5QltiaV0pIHsKICAg ICAgICAgICAgICAgICAgICBhaSsrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlm IChhcnJheUFbYWldID4gYXJyYXlCW2JpXSkgewogICAgICAgICAgICAgICAgICAg IGJpKys7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg ICAgIGludGVyc2VjdGlvbi5wdXNoKGFycmF5QVthaV0pOwogICAgICAgICAgICAg ICAgICAgIGFpKys7CiAgICAgICAgICAgICAgICAgICAgYmkrKzsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gaW50ZXJz ZWN0aW9uOwogICAgICAgICAgICBmdW5jdGlvbiBjb21wYXJlKGEsIGIpIHsKICAg ICAgICAgICAgICAgIHJldHVybiBhIC0gYjsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgIH0oKTsKICAgIHZhciBvUGFyc2VyID0gZnVuY3Rpb24oKSB7CiAgICAg ICAgInVzZSBzdHJpY3QiOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGxv Y2FsOiBnZXRMb2NhbCwKICAgICAgICAgICAgcHJlZmV0Y2g6IGdldFByZWZldGNo LAogICAgICAgICAgICByZW1vdGU6IGdldFJlbW90ZQogICAgICAgIH07CiAgICAg ICAgZnVuY3Rpb24gZ2V0TG9jYWwobykgewogICAgICAgICAgICByZXR1cm4gby5s b2NhbCB8fCBudWxsOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBnZXRQcmVm ZXRjaChvKSB7CiAgICAgICAgICAgIHZhciBwcmVmZXRjaCwgZGVmYXVsdHM7CiAg ICAgICAgICAgIGRlZmF1bHRzID0gewogICAgICAgICAgICAgICAgdXJsOiBudWxs LAogICAgICAgICAgICAgICAgdGh1bWJwcmludDogIiIsCiAgICAgICAgICAgICAg ICB0dGw6IDI0ICogNjAgKiA2MCAqIDFlMywKICAgICAgICAgICAgICAgIGZpbHRl cjogbnVsbCwKICAgICAgICAgICAgICAgIGFqYXg6IHt9CiAgICAgICAgICAgIH07 CiAgICAgICAgICAgIGlmIChwcmVmZXRjaCA9IG8ucHJlZmV0Y2ggfHwgbnVsbCkg ewogICAgICAgICAgICAgICAgcHJlZmV0Y2ggPSBfLmlzU3RyaW5nKHByZWZldGNo KSA/IHsKICAgICAgICAgICAgICAgICAgICB1cmw6IHByZWZldGNoCiAgICAgICAg ICAgICAgICB9IDogcHJlZmV0Y2g7CiAgICAgICAgICAgICAgICBwcmVmZXRjaCA9 IF8ubWl4aW4oZGVmYXVsdHMsIHByZWZldGNoKTsKICAgICAgICAgICAgICAgIHBy ZWZldGNoLnRodW1icHJpbnQgPSBWRVJTSU9OICsgcHJlZmV0Y2gudGh1bWJwcmlu dDsKICAgICAgICAgICAgICAgIHByZWZldGNoLmFqYXgudHlwZSA9IHByZWZldGNo LmFqYXgudHlwZSB8fCAiR0VUIjsKICAgICAgICAgICAgICAgIHByZWZldGNoLmFq YXguZGF0YVR5cGUgPSBwcmVmZXRjaC5hamF4LmRhdGFUeXBlIHx8ICJqc29uIjsK ICAgICAgICAgICAgICAgICFwcmVmZXRjaC51cmwgJiYgJC5lcnJvcigicHJlZmV0 Y2ggcmVxdWlyZXMgdXJsIHRvIGJlIHNldCIpOwogICAgICAgICAgICB9CiAgICAg ICAgICAgIHJldHVybiBwcmVmZXRjaDsKICAgICAgICB9CiAgICAgICAgZnVuY3Rp b24gZ2V0UmVtb3RlKG8pIHsKICAgICAgICAgICAgdmFyIHJlbW90ZSwgZGVmYXVs dHM7CiAgICAgICAgICAgIGRlZmF1bHRzID0gewogICAgICAgICAgICAgICAgdXJs OiBudWxsLAogICAgICAgICAgICAgICAgY2FjaGU6IHRydWUsCiAgICAgICAgICAg ICAgICB3aWxkY2FyZDogIiVRVUVSWSIsCiAgICAgICAgICAgICAgICByZXBsYWNl OiBudWxsLAogICAgICAgICAgICAgICAgcmF0ZUxpbWl0Qnk6ICJkZWJvdW5jZSIs CiAgICAgICAgICAgICAgICByYXRlTGltaXRXYWl0OiAzMDAsCiAgICAgICAgICAg ICAgICBzZW5kOiBudWxsLAogICAgICAgICAgICAgICAgZmlsdGVyOiBudWxsLAog ICAgICAgICAgICAgICAgYWpheDoge30KICAgICAgICAgICAgfTsKICAgICAgICAg ICAgaWYgKHJlbW90ZSA9IG8ucmVtb3RlIHx8IG51bGwpIHsKICAgICAgICAgICAg ICAgIHJlbW90ZSA9IF8uaXNTdHJpbmcocmVtb3RlKSA/IHsKICAgICAgICAgICAg ICAgICAgICB1cmw6IHJlbW90ZQogICAgICAgICAgICAgICAgfSA6IHJlbW90ZTsK ICAgICAgICAgICAgICAgIHJlbW90ZSA9IF8ubWl4aW4oZGVmYXVsdHMsIHJlbW90 ZSk7CiAgICAgICAgICAgICAgICByZW1vdGUucmF0ZUxpbWl0ZXIgPSAvXnRocm90 dGxlJC9pLnRlc3QocmVtb3RlLnJhdGVMaW1pdEJ5KSA/IGJ5VGhyb3R0bGUocmVt b3RlLnJhdGVMaW1pdFdhaXQpIDogYnlEZWJvdW5jZShyZW1vdGUucmF0ZUxpbWl0 V2FpdCk7CiAgICAgICAgICAgICAgICByZW1vdGUuYWpheC50eXBlID0gcmVtb3Rl LmFqYXgudHlwZSB8fCAiR0VUIjsKICAgICAgICAgICAgICAgIHJlbW90ZS5hamF4 LmRhdGFUeXBlID0gcmVtb3RlLmFqYXguZGF0YVR5cGUgfHwgImpzb24iOwogICAg ICAgICAgICAgICAgZGVsZXRlIHJlbW90ZS5yYXRlTGltaXRCeTsKICAgICAgICAg ICAgICAgIGRlbGV0ZSByZW1vdGUucmF0ZUxpbWl0V2FpdDsKICAgICAgICAgICAg ICAgICFyZW1vdGUudXJsICYmICQuZXJyb3IoInJlbW90ZSByZXF1aXJlcyB1cmwg dG8gYmUgc2V0Iik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJl bW90ZTsKICAgICAgICAgICAgZnVuY3Rpb24gYnlEZWJvdW5jZSh3YWl0KSB7CiAg ICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZm4pIHsKICAgICAgICAgICAg ICAgICAgICByZXR1cm4gXy5kZWJvdW5jZShmbiwgd2FpdCk7CiAgICAgICAgICAg ICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGJ5VGhy b3R0bGUod2FpdCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGZu KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF8udGhyb3R0bGUoZm4sIHdh aXQpOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0K ICAgIH0oKTsKICAgIChmdW5jdGlvbihyb290KSB7CiAgICAgICAgInVzZSBzdHJp Y3QiOwogICAgICAgIHZhciBvbGQsIGtleXM7CiAgICAgICAgb2xkID0gcm9vdC5C bG9vZGhvdW5kOwogICAgICAgIGtleXMgPSB7CiAgICAgICAgICAgIGRhdGE6ICJk YXRhIiwKICAgICAgICAgICAgcHJvdG9jb2w6ICJwcm90b2NvbCIsCiAgICAgICAg ICAgIHRodW1icHJpbnQ6ICJ0aHVtYnByaW50IgogICAgICAgIH07CiAgICAgICAg cm9vdC5CbG9vZGhvdW5kID0gQmxvb2Rob3VuZDsKICAgICAgICBmdW5jdGlvbiBC bG9vZGhvdW5kKG8pIHsKICAgICAgICAgICAgaWYgKCFvIHx8ICFvLmxvY2FsICYm ICFvLnByZWZldGNoICYmICFvLnJlbW90ZSkgewogICAgICAgICAgICAgICAgJC5l cnJvcigib25lIG9mIGxvY2FsLCBwcmVmZXRjaCwgb3IgcmVtb3RlIGlzIHJlcXVp cmVkIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5saW1pdCA9IG8u bGltaXQgfHwgNTsKICAgICAgICAgICAgdGhpcy5zb3J0ZXIgPSBnZXRTb3J0ZXIo by5zb3J0ZXIpOwogICAgICAgICAgICB0aGlzLmR1cERldGVjdG9yID0gby5kdXBE ZXRlY3RvciB8fCBpZ25vcmVEdXBsaWNhdGVzOwogICAgICAgICAgICB0aGlzLmxv Y2FsID0gb1BhcnNlci5sb2NhbChvKTsKICAgICAgICAgICAgdGhpcy5wcmVmZXRj aCA9IG9QYXJzZXIucHJlZmV0Y2gobyk7CiAgICAgICAgICAgIHRoaXMucmVtb3Rl ID0gb1BhcnNlci5yZW1vdGUobyk7CiAgICAgICAgICAgIHRoaXMuY2FjaGVLZXkg PSB0aGlzLnByZWZldGNoID8gdGhpcy5wcmVmZXRjaC5jYWNoZUtleSB8fCB0aGlz LnByZWZldGNoLnVybCA6IG51bGw7CiAgICAgICAgICAgIHRoaXMuaW5kZXggPSBu ZXcgU2VhcmNoSW5kZXgoewogICAgICAgICAgICAgICAgZGF0dW1Ub2tlbml6ZXI6 IG8uZGF0dW1Ub2tlbml6ZXIsCiAgICAgICAgICAgICAgICBxdWVyeVRva2VuaXpl cjogby5xdWVyeVRva2VuaXplcgogICAgICAgICAgICB9KTsKICAgICAgICAgICAg dGhpcy5zdG9yYWdlID0gdGhpcy5jYWNoZUtleSA/IG5ldyBQZXJzaXN0ZW50U3Rv cmFnZSh0aGlzLmNhY2hlS2V5KSA6IG51bGw7CiAgICAgICAgfQogICAgICAgIEJs b29kaG91bmQubm9Db25mbGljdCA9IGZ1bmN0aW9uIG5vQ29uZmxpY3QoKSB7CiAg ICAgICAgICAgIHJvb3QuQmxvb2Rob3VuZCA9IG9sZDsKICAgICAgICAgICAgcmV0 dXJuIEJsb29kaG91bmQ7CiAgICAgICAgfTsKICAgICAgICBCbG9vZGhvdW5kLnRv a2VuaXplcnMgPSB0b2tlbml6ZXJzOwogICAgICAgIF8ubWl4aW4oQmxvb2Rob3Vu ZC5wcm90b3R5cGUsIHsKICAgICAgICAgICAgX2xvYWRQcmVmZXRjaDogZnVuY3Rp b24gbG9hZFByZWZldGNoKG8pIHsKICAgICAgICAgICAgICAgIHZhciB0aGF0ID0g dGhpcywgc2VyaWFsaXplZCwgZGVmZXJyZWQ7CiAgICAgICAgICAgICAgICBpZiAo c2VyaWFsaXplZCA9IHRoaXMuX3JlYWRGcm9tU3RvcmFnZShvLnRodW1icHJpbnQp KSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleC5ib290c3RyYXAoc2Vy aWFsaXplZCk7CiAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQgPSAkLkRlZmVy cmVkKCkucmVzb2x2ZSgpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg ICAgICAgICAgICAgICBkZWZlcnJlZCA9ICQuYWpheChvLnVybCwgby5hamF4KS5k b25lKGhhbmRsZVByZWZldGNoUmVzcG9uc2UpOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgICAgICAgICAgICAg ZnVuY3Rpb24gaGFuZGxlUHJlZmV0Y2hSZXNwb25zZShyZXNwKSB7CiAgICAgICAg ICAgICAgICAgICAgdGhhdC5jbGVhcigpOwogICAgICAgICAgICAgICAgICAgIHRo YXQuYWRkKG8uZmlsdGVyID8gby5maWx0ZXIocmVzcCkgOiByZXNwKTsKICAgICAg ICAgICAgICAgICAgICB0aGF0Ll9zYXZlVG9TdG9yYWdlKHRoYXQuaW5kZXguc2Vy aWFsaXplKCksIG8udGh1bWJwcmludCwgby50dGwpOwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICB9LAogICAgICAgICAgICBfZ2V0RnJvbVJlbW90ZTogZnVu Y3Rpb24gZ2V0RnJvbVJlbW90ZShxdWVyeSwgY2IpIHsKICAgICAgICAgICAgICAg IHZhciB0aGF0ID0gdGhpcywgdXJsLCB1cmlFbmNvZGVkUXVlcnk7CiAgICAgICAg ICAgICAgICBpZiAoIXRoaXMudHJhbnNwb3J0KSB7CiAgICAgICAgICAgICAgICAg ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcXVl cnkgPSBxdWVyeSB8fCAiIjsKICAgICAgICAgICAgICAgIHVyaUVuY29kZWRRdWVy eSA9IGVuY29kZVVSSUNvbXBvbmVudChxdWVyeSk7CiAgICAgICAgICAgICAgICB1 cmwgPSB0aGlzLnJlbW90ZS5yZXBsYWNlID8gdGhpcy5yZW1vdGUucmVwbGFjZSh0 aGlzLnJlbW90ZS51cmwsIHF1ZXJ5KSA6IHRoaXMucmVtb3RlLnVybC5yZXBsYWNl KHRoaXMucmVtb3RlLndpbGRjYXJkLCB1cmlFbmNvZGVkUXVlcnkpOwogICAgICAg ICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNwb3J0LmdldCh1cmwsIHRoaXMucmVt b3RlLmFqYXgsIGhhbmRsZVJlbW90ZVJlc3BvbnNlKTsKICAgICAgICAgICAgICAg IGZ1bmN0aW9uIGhhbmRsZVJlbW90ZVJlc3BvbnNlKGVyciwgcmVzcCkgewogICAg ICAgICAgICAgICAgICAgIGVyciA/IGNiKFtdKSA6IGNiKHRoYXQucmVtb3RlLmZp bHRlciA/IHRoYXQucmVtb3RlLmZpbHRlcihyZXNwKSA6IHJlc3ApOwogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBfY2FuY2VsTGFz dFJlbW90ZVJlcXVlc3Q6IGZ1bmN0aW9uIGNhbmNlbExhc3RSZW1vdGVSZXF1ZXN0 KCkgewogICAgICAgICAgICAgICAgdGhpcy50cmFuc3BvcnQgJiYgdGhpcy50cmFu c3BvcnQuY2FuY2VsKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9zYXZl VG9TdG9yYWdlOiBmdW5jdGlvbiBzYXZlVG9TdG9yYWdlKGRhdGEsIHRodW1icHJp bnQsIHR0bCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RvcmFnZSkgewog ICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoa2V5cy5kYXRhLCBk YXRhLCB0dGwpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXQo a2V5cy5wcm90b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wsIHR0bCk7CiAgICAgICAg ICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnNldChrZXlzLnRodW1icHJpbnQsIHRo dW1icHJpbnQsIHR0bCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0s CiAgICAgICAgICAgIF9yZWFkRnJvbVN0b3JhZ2U6IGZ1bmN0aW9uIHJlYWRGcm9t U3RvcmFnZSh0aHVtYnByaW50KSB7CiAgICAgICAgICAgICAgICB2YXIgc3RvcmVk ID0ge30sIGlzRXhwaXJlZDsKICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0b3Jh Z2UpIHsKICAgICAgICAgICAgICAgICAgICBzdG9yZWQuZGF0YSA9IHRoaXMuc3Rv cmFnZS5nZXQoa2V5cy5kYXRhKTsKICAgICAgICAgICAgICAgICAgICBzdG9yZWQu cHJvdG9jb2wgPSB0aGlzLnN0b3JhZ2UuZ2V0KGtleXMucHJvdG9jb2wpOwogICAg ICAgICAgICAgICAgICAgIHN0b3JlZC50aHVtYnByaW50ID0gdGhpcy5zdG9yYWdl LmdldChrZXlzLnRodW1icHJpbnQpOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgaXNFeHBpcmVkID0gc3RvcmVkLnRodW1icHJpbnQgIT09IHRodW1i cHJpbnQgfHwgc3RvcmVkLnByb3RvY29sICE9PSBsb2NhdGlvbi5wcm90b2NvbDsK ICAgICAgICAgICAgICAgIHJldHVybiBzdG9yZWQuZGF0YSAmJiAhaXNFeHBpcmVk ID8gc3RvcmVkLmRhdGEgOiBudWxsOwogICAgICAgICAgICB9LAogICAgICAgICAg ICBfaW5pdGlhbGl6ZTogZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHsKICAgICAgICAg ICAgICAgIHZhciB0aGF0ID0gdGhpcywgbG9jYWwgPSB0aGlzLmxvY2FsLCBkZWZl cnJlZDsKICAgICAgICAgICAgICAgIGRlZmVycmVkID0gdGhpcy5wcmVmZXRjaCA/ IHRoaXMuX2xvYWRQcmVmZXRjaCh0aGlzLnByZWZldGNoKSA6ICQuRGVmZXJyZWQo KS5yZXNvbHZlKCk7CiAgICAgICAgICAgICAgICBsb2NhbCAmJiBkZWZlcnJlZC5k b25lKGFkZExvY2FsVG9JbmRleCk7CiAgICAgICAgICAgICAgICB0aGlzLnRyYW5z cG9ydCA9IHRoaXMucmVtb3RlID8gbmV3IFRyYW5zcG9ydCh0aGlzLnJlbW90ZSkg OiBudWxsOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdFByb21pc2Ug PSBkZWZlcnJlZC5wcm9taXNlKCk7CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBh ZGRMb2NhbFRvSW5kZXgoKSB7CiAgICAgICAgICAgICAgICAgICAgdGhhdC5hZGQo Xy5pc0Z1bmN0aW9uKGxvY2FsKSA/IGxvY2FsKCkgOiBsb2NhbCk7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGluaXRpYWxpemU6 IGZ1bmN0aW9uIGluaXRpYWxpemUoZm9yY2UpIHsKICAgICAgICAgICAgICAgIHJl dHVybiAhdGhpcy5pbml0UHJvbWlzZSB8fCBmb3JjZSA/IHRoaXMuX2luaXRpYWxp emUoKSA6IHRoaXMuaW5pdFByb21pc2U7CiAgICAgICAgICAgIH0sCiAgICAgICAg ICAgIGFkZDogZnVuY3Rpb24gYWRkKGRhdGEpIHsKICAgICAgICAgICAgICAgIHRo aXMuaW5kZXguYWRkKGRhdGEpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBn ZXQ6IGZ1bmN0aW9uIGdldChxdWVyeSwgY2IpIHsKICAgICAgICAgICAgICAgIHZh ciB0aGF0ID0gdGhpcywgbWF0Y2hlcyA9IFtdLCBjYWNoZUhpdCA9IGZhbHNlOwog ICAgICAgICAgICAgICAgbWF0Y2hlcyA9IHRoaXMuaW5kZXguZ2V0KHF1ZXJ5KTsK ICAgICAgICAgICAgICAgIG1hdGNoZXMgPSB0aGlzLnNvcnRlcihtYXRjaGVzKS5z bGljZSgwLCB0aGlzLmxpbWl0KTsKICAgICAgICAgICAgICAgIG1hdGNoZXMubGVu Z3RoIDwgdGhpcy5saW1pdCA/IGNhY2hlSGl0ID0gdGhpcy5fZ2V0RnJvbVJlbW90 ZShxdWVyeSwgcmV0dXJuUmVtb3RlTWF0Y2hlcykgOiB0aGlzLl9jYW5jZWxMYXN0 UmVtb3RlUmVxdWVzdCgpOwogICAgICAgICAgICAgICAgaWYgKCFjYWNoZUhpdCkg ewogICAgICAgICAgICAgICAgICAgIChtYXRjaGVzLmxlbmd0aCA+IDAgfHwgIXRo aXMudHJhbnNwb3J0KSAmJiBjYiAmJiBjYihtYXRjaGVzKTsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJldHVyblJlbW90ZU1hdGNo ZXMocmVtb3RlTWF0Y2hlcykgewogICAgICAgICAgICAgICAgICAgIHZhciBtYXRj aGVzV2l0aEJhY2tmaWxsID0gbWF0Y2hlcy5zbGljZSgwKTsKICAgICAgICAgICAg ICAgICAgICBfLmVhY2gocmVtb3RlTWF0Y2hlcywgZnVuY3Rpb24ocmVtb3RlTWF0 Y2gpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzRHVwbGljYXRlOwog ICAgICAgICAgICAgICAgICAgICAgICBpc0R1cGxpY2F0ZSA9IF8uc29tZShtYXRj aGVzV2l0aEJhY2tmaWxsLCBmdW5jdGlvbihtYXRjaCkgewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQuZHVwRGV0ZWN0b3IocmVtb3RlTWF0 Y2gsIG1hdGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg ICAgICAgICAgICAgICAgICFpc0R1cGxpY2F0ZSAmJiBtYXRjaGVzV2l0aEJhY2tm aWxsLnB1c2gocmVtb3RlTWF0Y2gpOwogICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gbWF0Y2hlc1dpdGhCYWNrZmlsbC5sZW5ndGggPCB0aGF0LmxpbWl0Owog ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGNiICYm IGNiKHRoYXQuc29ydGVyKG1hdGNoZXNXaXRoQmFja2ZpbGwpKTsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgY2xlYXI6IGZ1bmN0 aW9uIGNsZWFyKCkgewogICAgICAgICAgICAgICAgdGhpcy5pbmRleC5yZXNldCgp OwogICAgICAgICAgICB9LAogICAgICAgICAgICBjbGVhclByZWZldGNoQ2FjaGU6 IGZ1bmN0aW9uIGNsZWFyUHJlZmV0Y2hDYWNoZSgpIHsKICAgICAgICAgICAgICAg IHRoaXMuc3RvcmFnZSAmJiB0aGlzLnN0b3JhZ2UuY2xlYXIoKTsKICAgICAgICAg ICAgfSwKICAgICAgICAgICAgY2xlYXJSZW1vdGVDYWNoZTogZnVuY3Rpb24gY2xl YXJSZW1vdGVDYWNoZSgpIHsKICAgICAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0 ICYmIFRyYW5zcG9ydC5yZXNldENhY2hlKCk7CiAgICAgICAgICAgIH0sCiAgICAg ICAgICAgIHR0QWRhcHRlcjogZnVuY3Rpb24gdHRBZGFwdGVyKCkgewogICAgICAg ICAgICAgICAgcmV0dXJuIF8uYmluZCh0aGlzLmdldCwgdGhpcyk7CiAgICAgICAg ICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gQmxvb2Rob3VuZDsKICAg ICAgICBmdW5jdGlvbiBnZXRTb3J0ZXIoc29ydEZuKSB7CiAgICAgICAgICAgIHJl dHVybiBfLmlzRnVuY3Rpb24oc29ydEZuKSA/IHNvcnQgOiBub1NvcnQ7CiAgICAg ICAgICAgIGZ1bmN0aW9uIHNvcnQoYXJyYXkpIHsKICAgICAgICAgICAgICAgIHJl dHVybiBhcnJheS5zb3J0KHNvcnRGbik7CiAgICAgICAgICAgIH0KICAgICAgICAg ICAgZnVuY3Rpb24gbm9Tb3J0KGFycmF5KSB7CiAgICAgICAgICAgICAgICByZXR1 cm4gYXJyYXk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rp b24gaWdub3JlRHVwbGljYXRlcygpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNl OwogICAgICAgIH0KICAgIH0pKHRoaXMpOwogICAgdmFyIGh0bWwgPSBmdW5jdGlv bigpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICB3cmFwcGVyOiAnPHNw YW4gY2xhc3M9InR3aXR0ZXItdHlwZWFoZWFkIj48L3NwYW4+JywKICAgICAgICAg ICAgZHJvcGRvd246ICc8c3BhbiBjbGFzcz0idHQtZHJvcGRvd24tbWVudSI+PC9z cGFuPicsCiAgICAgICAgICAgIGRhdGFzZXQ6ICc8ZGl2IGNsYXNzPSJ0dC1kYXRh c2V0LSVDTEFTUyUiPjwvZGl2PicsCiAgICAgICAgICAgIHN1Z2dlc3Rpb25zOiAn PHNwYW4gY2xhc3M9InR0LXN1Z2dlc3Rpb25zIj48L3NwYW4+JywKICAgICAgICAg ICAgc3VnZ2VzdGlvbjogJzxkaXYgY2xhc3M9InR0LXN1Z2dlc3Rpb24iPjwvZGl2 PicKICAgICAgICB9OwogICAgfSgpOwogICAgdmFyIGNzcyA9IGZ1bmN0aW9uKCkg ewogICAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgICB2YXIgY3NzID0gewogICAg ICAgICAgICB3cmFwcGVyOiB7CiAgICAgICAgICAgICAgICBwb3NpdGlvbjogInJl bGF0aXZlIiwKICAgICAgICAgICAgICAgIGRpc3BsYXk6ICJpbmxpbmUtYmxvY2si CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGhpbnQ6IHsKICAgICAgICAgICAg ICAgIHBvc2l0aW9uOiAiYWJzb2x1dGUiLAogICAgICAgICAgICAgICAgdG9wOiAi MCIsCiAgICAgICAgICAgICAgICBsZWZ0OiAiMCIsCiAgICAgICAgICAgICAgICBi b3JkZXJDb2xvcjogInRyYW5zcGFyZW50IiwKICAgICAgICAgICAgICAgIGJveFNo YWRvdzogIm5vbmUiLAogICAgICAgICAgICAgICAgb3BhY2l0eTogIjEiCiAgICAg ICAgICAgIH0sCiAgICAgICAgICAgIGlucHV0OiB7CiAgICAgICAgICAgICAgICBw b3NpdGlvbjogInJlbGF0aXZlIiwKICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxp Z246ICJ0b3AiLAogICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAidHJh bnNwYXJlbnQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGlucHV0V2l0aE5v SGludDogewogICAgICAgICAgICAgICAgcG9zaXRpb246ICJyZWxhdGl2ZSIsCiAg ICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiAidG9wIgogICAgICAgICAgICB9 LAogICAgICAgICAgICBkcm9wZG93bjogewogICAgICAgICAgICAgICAgcG9zaXRp b246ICJhYnNvbHV0ZSIsCiAgICAgICAgICAgICAgICB0b3A6ICIxMDAlIiwKICAg ICAgICAgICAgICAgIGxlZnQ6ICIwIiwKICAgICAgICAgICAgICAgIHpJbmRleDog IjEwMCIsCiAgICAgICAgICAgICAgICBkaXNwbGF5OiAibm9uZSIKICAgICAgICAg ICAgfSwKICAgICAgICAgICAgc3VnZ2VzdGlvbnM6IHsKICAgICAgICAgICAgICAg IGRpc3BsYXk6ICJibG9jayIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc3Vn Z2VzdGlvbjogewogICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogIm5vd3JhcCIs CiAgICAgICAgICAgICAgICBjdXJzb3I6ICJwb2ludGVyIgogICAgICAgICAgICB9 LAogICAgICAgICAgICBzdWdnZXN0aW9uQ2hpbGQ6IHsKICAgICAgICAgICAgICAg IHdoaXRlU3BhY2U6ICJub3JtYWwiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAg IGx0cjogewogICAgICAgICAgICAgICAgbGVmdDogIjAiLAogICAgICAgICAgICAg ICAgcmlnaHQ6ICJhdXRvIgogICAgICAgICAgICB9LAogICAgICAgICAgICBydGw6 IHsKICAgICAgICAgICAgICAgIGxlZnQ6ICJhdXRvIiwKICAgICAgICAgICAgICAg IHJpZ2h0OiAiIDAiCiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGlm IChfLmlzTXNpZSgpKSB7CiAgICAgICAgICAgIF8ubWl4aW4oY3NzLmlucHV0LCB7 CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6ICJ1cmwoZGF0YTppbWFn ZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBQUFBQVAvLy95SDVCQUVBQUFB QUxBQUFBQUFCQUFFQUFBSUJSQUE3KSIKICAgICAgICAgICAgfSk7CiAgICAgICAg fQogICAgICAgIGlmIChfLmlzTXNpZSgpICYmIF8uaXNNc2llKCkgPD0gNykgewog ICAgICAgICAgICBfLm1peGluKGNzcy5pbnB1dCwgewogICAgICAgICAgICAgICAg bWFyZ2luVG9wOiAiLTFweCIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAg ICAgIHJldHVybiBjc3M7CiAgICB9KCk7CiAgICB2YXIgRXZlbnRCdXMgPSBmdW5j dGlvbigpIHsKICAgICAgICAidXNlIHN0cmljdCI7CiAgICAgICAgdmFyIG5hbWVz cGFjZSA9ICJ0eXBlYWhlYWQ6IjsKICAgICAgICBmdW5jdGlvbiBFdmVudEJ1cyhv KSB7CiAgICAgICAgICAgIGlmICghbyB8fCAhby5lbCkgewogICAgICAgICAgICAg ICAgJC5lcnJvcigiRXZlbnRCdXMgaW5pdGlhbGl6ZWQgd2l0aG91dCBlbCIpOwog ICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuJGVsID0gJChvLmVsKTsKICAg ICAgICB9CiAgICAgICAgXy5taXhpbihFdmVudEJ1cy5wcm90b3R5cGUsIHsKICAg ICAgICAgICAgdHJpZ2dlcjogZnVuY3Rpb24odHlwZSkgewogICAgICAgICAgICAg ICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7CiAgICAg ICAgICAgICAgICB0aGlzLiRlbC50cmlnZ2VyKG5hbWVzcGFjZSArIHR5cGUsIGFy Z3MpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIEV2 ZW50QnVzOwogICAgfSgpOwogICAgdmFyIEV2ZW50RW1pdHRlciA9IGZ1bmN0aW9u KCkgewogICAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgICB2YXIgc3BsaXR0ZXIg PSAvXHMrLywgbmV4dFRpY2sgPSBnZXROZXh0VGljaygpOwogICAgICAgIHJldHVy biB7CiAgICAgICAgICAgIG9uU3luYzogb25TeW5jLAogICAgICAgICAgICBvbkFz eW5jOiBvbkFzeW5jLAogICAgICAgICAgICBvZmY6IG9mZiwKICAgICAgICAgICAg dHJpZ2dlcjogdHJpZ2dlcgogICAgICAgIH07CiAgICAgICAgZnVuY3Rpb24gb24o bWV0aG9kLCB0eXBlcywgY2IsIGNvbnRleHQpIHsKICAgICAgICAgICAgdmFyIHR5 cGU7CiAgICAgICAgICAgIGlmICghY2IpIHsKICAgICAgICAgICAgICAgIHJldHVy biB0aGlzOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHR5cGVzID0gdHlwZXMu c3BsaXQoc3BsaXR0ZXIpOwogICAgICAgICAgICBjYiA9IGNvbnRleHQgPyBiaW5k Q29udGV4dChjYiwgY29udGV4dCkgOiBjYjsKICAgICAgICAgICAgdGhpcy5fY2Fs bGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9OwogICAgICAgICAgICB3aGls ZSAodHlwZSA9IHR5cGVzLnNoaWZ0KCkpIHsKICAgICAgICAgICAgICAgIHRoaXMu X2NhbGxiYWNrc1t0eXBlXSA9IHRoaXMuX2NhbGxiYWNrc1t0eXBlXSB8fCB7CiAg ICAgICAgICAgICAgICAgICAgc3luYzogW10sCiAgICAgICAgICAgICAgICAgICAg YXN5bmM6IFtdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgdGhp cy5fY2FsbGJhY2tzW3R5cGVdW21ldGhvZF0ucHVzaChjYik7CiAgICAgICAgICAg IH0KICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICAgIGZ1 bmN0aW9uIG9uQXN5bmModHlwZXMsIGNiLCBjb250ZXh0KSB7CiAgICAgICAgICAg IHJldHVybiBvbi5jYWxsKHRoaXMsICJhc3luYyIsIHR5cGVzLCBjYiwgY29udGV4 dCk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIG9uU3luYyh0eXBlcywgY2Is IGNvbnRleHQpIHsKICAgICAgICAgICAgcmV0dXJuIG9uLmNhbGwodGhpcywgInN5 bmMiLCB0eXBlcywgY2IsIGNvbnRleHQpOwogICAgICAgIH0KICAgICAgICBmdW5j dGlvbiBvZmYodHlwZXMpIHsKICAgICAgICAgICAgdmFyIHR5cGU7CiAgICAgICAg ICAgIGlmICghdGhpcy5fY2FsbGJhY2tzKSB7CiAgICAgICAgICAgICAgICByZXR1 cm4gdGhpczsKICAgICAgICAgICAgfQogICAgICAgICAgICB0eXBlcyA9IHR5cGVz LnNwbGl0KHNwbGl0dGVyKTsKICAgICAgICAgICAgd2hpbGUgKHR5cGUgPSB0eXBl cy5zaGlmdCgpKSB7CiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fY2FsbGJh Y2tzW3R5cGVdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0aGlz OwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiB0cmlnZ2VyKHR5cGVzKSB7CiAg ICAgICAgICAgIHZhciB0eXBlLCBjYWxsYmFja3MsIGFyZ3MsIHN5bmNGbHVzaCwg YXN5bmNGbHVzaDsKICAgICAgICAgICAgaWYgKCF0aGlzLl9jYWxsYmFja3MpIHsK ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICB9CiAgICAg ICAgICAgIHR5cGVzID0gdHlwZXMuc3BsaXQoc3BsaXR0ZXIpOwogICAgICAgICAg ICBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwogICAgICAgICAg ICB3aGlsZSAoKHR5cGUgPSB0eXBlcy5zaGlmdCgpKSAmJiAoY2FsbGJhY2tzID0g dGhpcy5fY2FsbGJhY2tzW3R5cGVdKSkgewogICAgICAgICAgICAgICAgc3luY0Zs dXNoID0gZ2V0Rmx1c2goY2FsbGJhY2tzLnN5bmMsIHRoaXMsIFsgdHlwZSBdLmNv bmNhdChhcmdzKSk7CiAgICAgICAgICAgICAgICBhc3luY0ZsdXNoID0gZ2V0Rmx1 c2goY2FsbGJhY2tzLmFzeW5jLCB0aGlzLCBbIHR5cGUgXS5jb25jYXQoYXJncykp OwogICAgICAgICAgICAgICAgc3luY0ZsdXNoKCkgJiYgbmV4dFRpY2soYXN5bmNG bHVzaCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAg ICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGdldEZsdXNoKGNhbGxiYWNrcywgY29u dGV4dCwgYXJncykgewogICAgICAgICAgICByZXR1cm4gZmx1c2g7CiAgICAgICAg ICAgIGZ1bmN0aW9uIGZsdXNoKCkgewogICAgICAgICAgICAgICAgdmFyIGNhbmNl bGxlZDsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBjYWxs YmFja3MubGVuZ3RoOyAhY2FuY2VsbGVkICYmIGkgPCBsZW47IGkgKz0gMSkgewog ICAgICAgICAgICAgICAgICAgIGNhbmNlbGxlZCA9IGNhbGxiYWNrc1tpXS5hcHBs eShjb250ZXh0LCBhcmdzKSA9PT0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICByZXR1cm4gIWNhbmNlbGxlZDsKICAgICAgICAgICAgfQog ICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBnZXROZXh0VGljaygpIHsKICAgICAg ICAgICAgdmFyIG5leHRUaWNrRm47CiAgICAgICAgICAgIGlmICh3aW5kb3cuc2V0 SW1tZWRpYXRlKSB7CiAgICAgICAgICAgICAgICBuZXh0VGlja0ZuID0gZnVuY3Rp b24gbmV4dFRpY2tTZXRJbW1lZGlhdGUoZm4pIHsKICAgICAgICAgICAgICAgICAg ICBzZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAg ICAgIGZuKCk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAg ICB9OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbmV4dFRp Y2tGbiA9IGZ1bmN0aW9uIG5leHRUaWNrU2V0VGltZW91dChmbikgewogICAgICAg ICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAg ICAgICAgICAgICAgIGZuKCk7CiAgICAgICAgICAgICAgICAgICAgfSwgMCk7CiAg ICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVy biBuZXh0VGlja0ZuOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBiaW5kQ29u dGV4dChmbiwgY29udGV4dCkgewogICAgICAgICAgICByZXR1cm4gZm4uYmluZCA/ IGZuLmJpbmQoY29udGV4dCkgOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAg IGZuLmFwcGx5KGNvbnRleHQsIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSk7 CiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfSgpOwogICAgdmFyIGhpZ2hs aWdodCA9IGZ1bmN0aW9uKGRvYykgewogICAgICAgICJ1c2Ugc3RyaWN0IjsKICAg ICAgICB2YXIgZGVmYXVsdHMgPSB7CiAgICAgICAgICAgIG5vZGU6IG51bGwsCiAg ICAgICAgICAgIHBhdHRlcm46IG51bGwsCiAgICAgICAgICAgIHRhZ05hbWU6ICJz dHJvbmciLAogICAgICAgICAgICBjbGFzc05hbWU6IG51bGwsCiAgICAgICAgICAg IHdvcmRzT25seTogZmFsc2UsCiAgICAgICAgICAgIGNhc2VTZW5zaXRpdmU6IGZh bHNlCiAgICAgICAgfTsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gaGlnaHRsaWdo dChvKSB7CiAgICAgICAgICAgIHZhciByZWdleDsKICAgICAgICAgICAgbyA9IF8u bWl4aW4oe30sIGRlZmF1bHRzLCBvKTsKICAgICAgICAgICAgaWYgKCFvLm5vZGUg fHwgIW8ucGF0dGVybikgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg ICAgICB9CiAgICAgICAgICAgIG8ucGF0dGVybiA9IF8uaXNBcnJheShvLnBhdHRl cm4pID8gby5wYXR0ZXJuIDogWyBvLnBhdHRlcm4gXTsKICAgICAgICAgICAgcmVn ZXggPSBnZXRSZWdleChvLnBhdHRlcm4sIG8uY2FzZVNlbnNpdGl2ZSwgby53b3Jk c09ubHkpOwogICAgICAgICAgICB0cmF2ZXJzZShvLm5vZGUsIGhpZ2h0bGlnaHRU ZXh0Tm9kZSk7CiAgICAgICAgICAgIGZ1bmN0aW9uIGhpZ2h0bGlnaHRUZXh0Tm9k ZSh0ZXh0Tm9kZSkgewogICAgICAgICAgICAgICAgdmFyIG1hdGNoLCBwYXR0ZXJu Tm9kZSwgd3JhcHBlck5vZGU7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSBy ZWdleC5leGVjKHRleHROb2RlLmRhdGEpKSB7CiAgICAgICAgICAgICAgICAgICAg d3JhcHBlck5vZGUgPSBkb2MuY3JlYXRlRWxlbWVudChvLnRhZ05hbWUpOwogICAg ICAgICAgICAgICAgICAgIG8uY2xhc3NOYW1lICYmICh3cmFwcGVyTm9kZS5jbGFz c05hbWUgPSBvLmNsYXNzTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgcGF0dGVy bk5vZGUgPSB0ZXh0Tm9kZS5zcGxpdFRleHQobWF0Y2guaW5kZXgpOwogICAgICAg ICAgICAgICAgICAgIHBhdHRlcm5Ob2RlLnNwbGl0VGV4dChtYXRjaFswXS5sZW5n dGgpOwogICAgICAgICAgICAgICAgICAgIHdyYXBwZXJOb2RlLmFwcGVuZENoaWxk KHBhdHRlcm5Ob2RlLmNsb25lTm9kZSh0cnVlKSk7CiAgICAgICAgICAgICAgICAg ICAgdGV4dE5vZGUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQod3JhcHBlck5vZGUs IHBhdHRlcm5Ob2RlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg IHJldHVybiAhIW1hdGNoOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0 aW9uIHRyYXZlcnNlKGVsLCBoaWdodGxpZ2h0VGV4dE5vZGUpIHsKICAgICAgICAg ICAgICAgIHZhciBjaGlsZE5vZGUsIFRFWFRfTk9ERV9UWVBFID0gMzsKICAgICAg ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWwuY2hpbGROb2Rlcy5sZW5n dGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZSA9IGVsLmNo aWxkTm9kZXNbaV07CiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZS5u b2RlVHlwZSA9PT0gVEVYVF9OT0RFX1RZUEUpIHsKICAgICAgICAgICAgICAgICAg ICAgICAgaSArPSBoaWdodGxpZ2h0VGV4dE5vZGUoY2hpbGROb2RlKSA/IDEgOiAw OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg ICAgICAgIHRyYXZlcnNlKGNoaWxkTm9kZSwgaGlnaHRsaWdodFRleHROb2RlKTsK ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgIH0KICAgICAgICB9OwogICAgICAgIGZ1bmN0aW9uIGdldFJlZ2V4KHBhdHRl cm5zLCBjYXNlU2Vuc2l0aXZlLCB3b3Jkc09ubHkpIHsKICAgICAgICAgICAgdmFy IGVzY2FwZWRQYXR0ZXJucyA9IFtdLCByZWdleFN0cjsKICAgICAgICAgICAgZm9y ICh2YXIgaSA9IDAsIGxlbiA9IHBhdHRlcm5zLmxlbmd0aDsgaSA8IGxlbjsgaSsr KSB7CiAgICAgICAgICAgICAgICBlc2NhcGVkUGF0dGVybnMucHVzaChfLmVzY2Fw ZVJlZ0V4Q2hhcnMocGF0dGVybnNbaV0pKTsKICAgICAgICAgICAgfQogICAgICAg ICAgICByZWdleFN0ciA9IHdvcmRzT25seSA/ICJcXGIoIiArIGVzY2FwZWRQYXR0 ZXJucy5qb2luKCJ8IikgKyAiKVxcYiIgOiAiKCIgKyBlc2NhcGVkUGF0dGVybnMu am9pbigifCIpICsgIikiOwogICAgICAgICAgICByZXR1cm4gY2FzZVNlbnNpdGl2 ZSA/IG5ldyBSZWdFeHAocmVnZXhTdHIpIDogbmV3IFJlZ0V4cChyZWdleFN0ciwg ImkiKTsKICAgICAgICB9CiAgICB9KHdpbmRvdy5kb2N1bWVudCk7CiAgICB2YXIg SW5wdXQgPSBmdW5jdGlvbigpIHsKICAgICAgICAidXNlIHN0cmljdCI7CiAgICAg ICAgdmFyIHNwZWNpYWxLZXlDb2RlTWFwOwogICAgICAgIHNwZWNpYWxLZXlDb2Rl TWFwID0gewogICAgICAgICAgICA5OiAidGFiIiwKICAgICAgICAgICAgMjc6ICJl c2MiLAogICAgICAgICAgICAzNzogImxlZnQiLAogICAgICAgICAgICAzOTogInJp Z2h0IiwKICAgICAgICAgICAgMTM6ICJlbnRlciIsCiAgICAgICAgICAgIDM4OiAi dXAiLAogICAgICAgICAgICA0MDogImRvd24iCiAgICAgICAgfTsKICAgICAgICBm dW5jdGlvbiBJbnB1dChvKSB7CiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywg b25CbHVyLCBvbkZvY3VzLCBvbktleWRvd24sIG9uSW5wdXQ7CiAgICAgICAgICAg IG8gPSBvIHx8IHt9OwogICAgICAgICAgICBpZiAoIW8uaW5wdXQpIHsKICAgICAg ICAgICAgICAgICQuZXJyb3IoImlucHV0IGlzIG1pc3NpbmciKTsKICAgICAgICAg ICAgfQogICAgICAgICAgICBvbkJsdXIgPSBfLmJpbmQodGhpcy5fb25CbHVyLCB0 aGlzKTsKICAgICAgICAgICAgb25Gb2N1cyA9IF8uYmluZCh0aGlzLl9vbkZvY3Vz LCB0aGlzKTsKICAgICAgICAgICAgb25LZXlkb3duID0gXy5iaW5kKHRoaXMuX29u S2V5ZG93biwgdGhpcyk7CiAgICAgICAgICAgIG9uSW5wdXQgPSBfLmJpbmQodGhp cy5fb25JbnB1dCwgdGhpcyk7CiAgICAgICAgICAgIHRoaXMuJGhpbnQgPSAkKG8u aGludCk7CiAgICAgICAgICAgIHRoaXMuJGlucHV0ID0gJChvLmlucHV0KS5vbigi Ymx1ci50dCIsIG9uQmx1cikub24oImZvY3VzLnR0Iiwgb25Gb2N1cykub24oImtl eWRvd24udHQiLCBvbktleWRvd24pOwogICAgICAgICAgICBpZiAodGhpcy4kaGlu dC5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgICAgIHRoaXMuc2V0SGludCA9 IHRoaXMuZ2V0SGludCA9IHRoaXMuY2xlYXJIaW50ID0gdGhpcy5jbGVhckhpbnRJ ZkludmFsaWQgPSBfLm5vb3A7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYg KCFfLmlzTXNpZSgpKSB7CiAgICAgICAgICAgICAgICB0aGlzLiRpbnB1dC5vbigi aW5wdXQudHQiLCBvbklucHV0KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg ICAgICAgICAgIHRoaXMuJGlucHV0Lm9uKCJrZXlkb3duLnR0IGtleXByZXNzLnR0 IGN1dC50dCBwYXN0ZS50dCIsIGZ1bmN0aW9uKCRlKSB7CiAgICAgICAgICAgICAg ICAgICAgaWYgKHNwZWNpYWxLZXlDb2RlTWFwWyRlLndoaWNoIHx8ICRlLmtleUNv ZGVdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgXy5kZWZlcihfLmJpbmQo dGhhdC5fb25JbnB1dCwgdGhhdCwgJGUpKTsKICAgICAgICAgICAgICAgIH0pOwog ICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLiRpbnB1 dC52YWwoKTsKICAgICAgICAgICAgdGhpcy4kb3ZlcmZsb3dIZWxwZXIgPSBidWls ZE92ZXJmbG93SGVscGVyKHRoaXMuJGlucHV0KTsKICAgICAgICB9CiAgICAgICAg SW5wdXQubm9ybWFsaXplUXVlcnkgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICAg ICAgcmV0dXJuIChzdHIgfHwgIiIpLnJlcGxhY2UoL15ccyovZywgIiIpLnJlcGxh Y2UoL1xzezIsfS9nLCAiICIpOwogICAgICAgIH07CiAgICAgICAgXy5taXhpbihJ bnB1dC5wcm90b3R5cGUsIEV2ZW50RW1pdHRlciwgewogICAgICAgICAgICBfb25C bHVyOiBmdW5jdGlvbiBvbkJsdXIoKSB7CiAgICAgICAgICAgICAgICB0aGlzLnJl c2V0SW5wdXRWYWx1ZSgpOwogICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCJi bHVycmVkIik7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9vbkZvY3VzOiBm dW5jdGlvbiBvbkZvY3VzKCkgewogICAgICAgICAgICAgICAgdGhpcy50cmlnZ2Vy KCJmb2N1c2VkIik7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9vbktleWRv d246IGZ1bmN0aW9uIG9uS2V5ZG93bigkZSkgewogICAgICAgICAgICAgICAgdmFy IGtleU5hbWUgPSBzcGVjaWFsS2V5Q29kZU1hcFskZS53aGljaCB8fCAkZS5rZXlD b2RlXTsKICAgICAgICAgICAgICAgIHRoaXMuX21hbmFnZVByZXZlbnREZWZhdWx0 KGtleU5hbWUsICRlKTsKICAgICAgICAgICAgICAgIGlmIChrZXlOYW1lICYmIHRo aXMuX3Nob3VsZFRyaWdnZXIoa2V5TmFtZSwgJGUpKSB7CiAgICAgICAgICAgICAg ICAgICAgdGhpcy50cmlnZ2VyKGtleU5hbWUgKyAiS2V5ZWQiLCAkZSk7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9vbklucHV0 OiBmdW5jdGlvbiBvbklucHV0KCkgewogICAgICAgICAgICAgICAgdGhpcy5fY2hl Y2tJbnB1dFZhbHVlKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9tYW5h Z2VQcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gbWFuYWdlUHJldmVudERlZmF1bHQo a2V5TmFtZSwgJGUpIHsKICAgICAgICAgICAgICAgIHZhciBwcmV2ZW50RGVmYXVs dCwgaGludFZhbHVlLCBpbnB1dFZhbHVlOwogICAgICAgICAgICAgICAgc3dpdGNo IChrZXlOYW1lKSB7CiAgICAgICAgICAgICAgICAgIGNhc2UgInRhYiI6CiAgICAg ICAgICAgICAgICAgICAgaGludFZhbHVlID0gdGhpcy5nZXRIaW50KCk7CiAgICAg ICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IHRoaXMuZ2V0SW5wdXRWYWx1ZSgp OwogICAgICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0ID0gaGludFZhbHVl ICYmIGhpbnRWYWx1ZSAhPT0gaW5wdXRWYWx1ZSAmJiAhd2l0aE1vZGlmaWVyKCRl KTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAg IGNhc2UgInVwIjoKICAgICAgICAgICAgICAgICAgY2FzZSAiZG93biI6CiAgICAg ICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQgPSAhd2l0aE1vZGlmaWVyKCRl KTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAg IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQgPSBm YWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHByZXZlbnRE ZWZhdWx0ICYmICRlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIH0sCiAg ICAgICAgICAgIF9zaG91bGRUcmlnZ2VyOiBmdW5jdGlvbiBzaG91bGRUcmlnZ2Vy KGtleU5hbWUsICRlKSB7CiAgICAgICAgICAgICAgICB2YXIgdHJpZ2dlcjsKICAg ICAgICAgICAgICAgIHN3aXRjaCAoa2V5TmFtZSkgewogICAgICAgICAgICAgICAg ICBjYXNlICJ0YWIiOgogICAgICAgICAgICAgICAgICAgIHRyaWdnZXIgPSAhd2l0 aE1vZGlmaWVyKCRlKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAg ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgdHJpZ2dl ciA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1 cm4gdHJpZ2dlcjsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX2NoZWNrSW5w dXRWYWx1ZTogZnVuY3Rpb24gY2hlY2tJbnB1dFZhbHVlKCkgewogICAgICAgICAg ICAgICAgdmFyIGlucHV0VmFsdWUsIGFyZUVxdWl2YWxlbnQsIGhhc0RpZmZlcmVu dFdoaXRlc3BhY2U7CiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlID0gdGhpcy5n ZXRJbnB1dFZhbHVlKCk7CiAgICAgICAgICAgICAgICBhcmVFcXVpdmFsZW50ID0g YXJlUXVlcmllc0VxdWl2YWxlbnQoaW5wdXRWYWx1ZSwgdGhpcy5xdWVyeSk7CiAg ICAgICAgICAgICAgICBoYXNEaWZmZXJlbnRXaGl0ZXNwYWNlID0gYXJlRXF1aXZh bGVudCA/IHRoaXMucXVlcnkubGVuZ3RoICE9PSBpbnB1dFZhbHVlLmxlbmd0aCA6 IGZhbHNlOwogICAgICAgICAgICAgICAgdGhpcy5xdWVyeSA9IGlucHV0VmFsdWU7 CiAgICAgICAgICAgICAgICBpZiAoIWFyZUVxdWl2YWxlbnQpIHsKICAgICAgICAg ICAgICAgICAgICB0aGlzLnRyaWdnZXIoInF1ZXJ5Q2hhbmdlZCIsIHRoaXMucXVl cnkpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoYXNEaWZmZXJlbnRXaGl0 ZXNwYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCJ3aGl0 ZXNwYWNlQ2hhbmdlZCIsIHRoaXMucXVlcnkpOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICB9LAogICAgICAgICAgICBmb2N1czogZnVuY3Rpb24gZm9jdXMo KSB7CiAgICAgICAgICAgICAgICB0aGlzLiRpbnB1dC5mb2N1cygpOwogICAgICAg ICAgICB9LAogICAgICAgICAgICBibHVyOiBmdW5jdGlvbiBibHVyKCkgewogICAg ICAgICAgICAgICAgdGhpcy4kaW5wdXQuYmx1cigpOwogICAgICAgICAgICB9LAog ICAgICAgICAgICBnZXRRdWVyeTogZnVuY3Rpb24gZ2V0UXVlcnkoKSB7CiAgICAg ICAgICAgICAgICByZXR1cm4gdGhpcy5xdWVyeTsKICAgICAgICAgICAgfSwKICAg ICAgICAgICAgc2V0UXVlcnk6IGZ1bmN0aW9uIHNldFF1ZXJ5KHF1ZXJ5KSB7CiAg ICAgICAgICAgICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnk7CiAgICAgICAgICAgIH0s CiAgICAgICAgICAgIGdldElucHV0VmFsdWU6IGZ1bmN0aW9uIGdldElucHV0VmFs dWUoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kaW5wdXQudmFsKCk7 CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNldElucHV0VmFsdWU6IGZ1bmN0 aW9uIHNldElucHV0VmFsdWUodmFsdWUsIHNpbGVudCkgewogICAgICAgICAgICAg ICAgdGhpcy4kaW5wdXQudmFsKHZhbHVlKTsKICAgICAgICAgICAgICAgIHNpbGVu dCA/IHRoaXMuY2xlYXJIaW50KCkgOiB0aGlzLl9jaGVja0lucHV0VmFsdWUoKTsK ICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVzZXRJbnB1dFZhbHVlOiBmdW5j dGlvbiByZXNldElucHV0VmFsdWUoKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNl dElucHV0VmFsdWUodGhpcy5xdWVyeSwgdHJ1ZSk7CiAgICAgICAgICAgIH0sCiAg ICAgICAgICAgIGdldEhpbnQ6IGZ1bmN0aW9uIGdldEhpbnQoKSB7CiAgICAgICAg ICAgICAgICByZXR1cm4gdGhpcy4kaGludC52YWwoKTsKICAgICAgICAgICAgfSwK ICAgICAgICAgICAgc2V0SGludDogZnVuY3Rpb24gc2V0SGludCh2YWx1ZSkgewog ICAgICAgICAgICAgICAgdGhpcy4kaGludC52YWwodmFsdWUpOwogICAgICAgICAg ICB9LAogICAgICAgICAgICBjbGVhckhpbnQ6IGZ1bmN0aW9uIGNsZWFySGludCgp IHsKICAgICAgICAgICAgICAgIHRoaXMuc2V0SGludCgiIik7CiAgICAgICAgICAg IH0sCiAgICAgICAgICAgIGNsZWFySGludElmSW52YWxpZDogZnVuY3Rpb24gY2xl YXJIaW50SWZJbnZhbGlkKCkgewogICAgICAgICAgICAgICAgdmFyIHZhbCwgaGlu dCwgdmFsSXNQcmVmaXhPZkhpbnQsIGlzVmFsaWQ7CiAgICAgICAgICAgICAgICB2 YWwgPSB0aGlzLmdldElucHV0VmFsdWUoKTsKICAgICAgICAgICAgICAgIGhpbnQg PSB0aGlzLmdldEhpbnQoKTsKICAgICAgICAgICAgICAgIHZhbElzUHJlZml4T2ZI aW50ID0gdmFsICE9PSBoaW50ICYmIGhpbnQuaW5kZXhPZih2YWwpID09PSAwOwog ICAgICAgICAgICAgICAgaXNWYWxpZCA9IHZhbCAhPT0gIiIgJiYgdmFsSXNQcmVm aXhPZkhpbnQgJiYgIXRoaXMuaGFzT3ZlcmZsb3coKTsKICAgICAgICAgICAgICAg ICFpc1ZhbGlkICYmIHRoaXMuY2xlYXJIaW50KCk7CiAgICAgICAgICAgIH0sCiAg ICAgICAgICAgIGdldExhbmd1YWdlRGlyZWN0aW9uOiBmdW5jdGlvbiBnZXRMYW5n dWFnZURpcmVjdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy4k aW5wdXQuY3NzKCJkaXJlY3Rpb24iKSB8fCAibHRyIikudG9Mb3dlckNhc2UoKTsK ICAgICAgICAgICAgfSwKICAgICAgICAgICAgaGFzT3ZlcmZsb3c6IGZ1bmN0aW9u IGhhc092ZXJmbG93KCkgewogICAgICAgICAgICAgICAgdmFyIGNvbnN0cmFpbnQg PSB0aGlzLiRpbnB1dC53aWR0aCgpIC0gMjsKICAgICAgICAgICAgICAgIHRoaXMu JG92ZXJmbG93SGVscGVyLnRleHQodGhpcy5nZXRJbnB1dFZhbHVlKCkpOwogICAg ICAgICAgICAgICAgcmV0dXJuIHRoaXMuJG92ZXJmbG93SGVscGVyLndpZHRoKCkg Pj0gY29uc3RyYWludDsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgaXNDdXJz b3JBdEVuZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVM ZW5ndGgsIHNlbGVjdGlvblN0YXJ0LCByYW5nZTsKICAgICAgICAgICAgICAgIHZh bHVlTGVuZ3RoID0gdGhpcy4kaW5wdXQudmFsKCkubGVuZ3RoOwogICAgICAgICAg ICAgICAgc2VsZWN0aW9uU3RhcnQgPSB0aGlzLiRpbnB1dFswXS5zZWxlY3Rpb25T dGFydDsKICAgICAgICAgICAgICAgIGlmIChfLmlzTnVtYmVyKHNlbGVjdGlvblN0 YXJ0KSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb25TdGFy dCA9PT0gdmFsdWVMZW5ndGg7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRv Y3VtZW50LnNlbGVjdGlvbikgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0g ZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgICAgICAg ICAgICAgcmFuZ2UubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLCAtdmFsdWVMZW5ndGgp OwogICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZUxlbmd0aCA9PT0gcmFu Z2UudGV4dC5sZW5ndGg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGVzdHJv eTogZnVuY3Rpb24gZGVzdHJveSgpIHsKICAgICAgICAgICAgICAgIHRoaXMuJGhp bnQub2ZmKCIudHQiKTsKICAgICAgICAgICAgICAgIHRoaXMuJGlucHV0Lm9mZigi LnR0Iik7CiAgICAgICAgICAgICAgICB0aGlzLiRoaW50ID0gdGhpcy4kaW5wdXQg PSB0aGlzLiRvdmVyZmxvd0hlbHBlciA9IG51bGw7CiAgICAgICAgICAgIH0KICAg ICAgICB9KTsKICAgICAgICByZXR1cm4gSW5wdXQ7CiAgICAgICAgZnVuY3Rpb24g YnVpbGRPdmVyZmxvd0hlbHBlcigkaW5wdXQpIHsKICAgICAgICAgICAgcmV0dXJu ICQoJzxwcmUgYXJpYS1oaWRkZW49InRydWUiPjwvcHJlPicpLmNzcyh7CiAgICAg ICAgICAgICAgICBwb3NpdGlvbjogImFic29sdXRlIiwKICAgICAgICAgICAgICAg IHZpc2liaWxpdHk6ICJoaWRkZW4iLAogICAgICAgICAgICAgICAgd2hpdGVTcGFj ZTogInByZSIsCiAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAkaW5wdXQuY3Nz KCJmb250LWZhbWlseSIpLAogICAgICAgICAgICAgICAgZm9udFNpemU6ICRpbnB1 dC5jc3MoImZvbnQtc2l6ZSIpLAogICAgICAgICAgICAgICAgZm9udFN0eWxlOiAk aW5wdXQuY3NzKCJmb250LXN0eWxlIiksCiAgICAgICAgICAgICAgICBmb250VmFy aWFudDogJGlucHV0LmNzcygiZm9udC12YXJpYW50IiksCiAgICAgICAgICAgICAg ICBmb250V2VpZ2h0OiAkaW5wdXQuY3NzKCJmb250LXdlaWdodCIpLAogICAgICAg ICAgICAgICAgd29yZFNwYWNpbmc6ICRpbnB1dC5jc3MoIndvcmQtc3BhY2luZyIp LAogICAgICAgICAgICAgICAgbGV0dGVyU3BhY2luZzogJGlucHV0LmNzcygibGV0 dGVyLXNwYWNpbmciKSwKICAgICAgICAgICAgICAgIHRleHRJbmRlbnQ6ICRpbnB1 dC5jc3MoInRleHQtaW5kZW50IiksCiAgICAgICAgICAgICAgICB0ZXh0UmVuZGVy aW5nOiAkaW5wdXQuY3NzKCJ0ZXh0LXJlbmRlcmluZyIpLAogICAgICAgICAgICAg ICAgdGV4dFRyYW5zZm9ybTogJGlucHV0LmNzcygidGV4dC10cmFuc2Zvcm0iKQog ICAgICAgICAgICB9KS5pbnNlcnRBZnRlcigkaW5wdXQpOwogICAgICAgIH0KICAg ICAgICBmdW5jdGlvbiBhcmVRdWVyaWVzRXF1aXZhbGVudChhLCBiKSB7CiAgICAg ICAgICAgIHJldHVybiBJbnB1dC5ub3JtYWxpemVRdWVyeShhKSA9PT0gSW5wdXQu bm9ybWFsaXplUXVlcnkoYik7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHdp dGhNb2RpZmllcigkZSkgewogICAgICAgICAgICByZXR1cm4gJGUuYWx0S2V5IHx8 ICRlLmN0cmxLZXkgfHwgJGUubWV0YUtleSB8fCAkZS5zaGlmdEtleTsKICAgICAg ICB9CiAgICB9KCk7CiAgICB2YXIgRGF0YXNldCA9IGZ1bmN0aW9uKCkgewogICAg ICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgICB2YXIgZGF0YXNldEtleSA9ICJ0dERh dGFzZXQiLCB2YWx1ZUtleSA9ICJ0dFZhbHVlIiwgZGF0dW1LZXkgPSAidHREYXR1 bSI7CiAgICAgICAgZnVuY3Rpb24gRGF0YXNldChvKSB7CiAgICAgICAgICAgIG8g PSBvIHx8IHt9OwogICAgICAgICAgICBvLnRlbXBsYXRlcyA9IG8udGVtcGxhdGVz IHx8IHt9OwogICAgICAgICAgICBpZiAoIW8uc291cmNlKSB7CiAgICAgICAgICAg ICAgICAkLmVycm9yKCJtaXNzaW5nIHNvdXJjZSIpOwogICAgICAgICAgICB9CiAg ICAgICAgICAgIGlmIChvLm5hbWUgJiYgIWlzVmFsaWROYW1lKG8ubmFtZSkpIHsK ICAgICAgICAgICAgICAgICQuZXJyb3IoImludmFsaWQgZGF0YXNldCBuYW1lOiAi ICsgby5uYW1lKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnF1ZXJ5 ID0gbnVsbDsKICAgICAgICAgICAgdGhpcy5oaWdobGlnaHQgPSAhIW8uaGlnaGxp Z2h0OwogICAgICAgICAgICB0aGlzLm5hbWUgPSBvLm5hbWUgfHwgXy5nZXRVbmlx dWVJZCgpOwogICAgICAgICAgICB0aGlzLnNvdXJjZSA9IG8uc291cmNlOwogICAg ICAgICAgICB0aGlzLmRpc3BsYXlGbiA9IGdldERpc3BsYXlGbihvLmRpc3BsYXkg fHwgby5kaXNwbGF5S2V5KTsKICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZXMgPSBn ZXRUZW1wbGF0ZXMoby50ZW1wbGF0ZXMsIHRoaXMuZGlzcGxheUZuKTsKICAgICAg ICAgICAgdGhpcy4kZWwgPSAkKGh0bWwuZGF0YXNldC5yZXBsYWNlKCIlQ0xBU1Ml IiwgdGhpcy5uYW1lKSk7CiAgICAgICAgfQogICAgICAgIERhdGFzZXQuZXh0cmFj dERhdGFzZXROYW1lID0gZnVuY3Rpb24gZXh0cmFjdERhdGFzZXROYW1lKGVsKSB7 CiAgICAgICAgICAgIHJldHVybiAkKGVsKS5kYXRhKGRhdGFzZXRLZXkpOwogICAg ICAgIH07CiAgICAgICAgRGF0YXNldC5leHRyYWN0VmFsdWUgPSBmdW5jdGlvbiBl eHRyYWN0RGF0dW0oZWwpIHsKICAgICAgICAgICAgcmV0dXJuICQoZWwpLmRhdGEo dmFsdWVLZXkpOwogICAgICAgIH07CiAgICAgICAgRGF0YXNldC5leHRyYWN0RGF0 dW0gPSBmdW5jdGlvbiBleHRyYWN0RGF0dW0oZWwpIHsKICAgICAgICAgICAgcmV0 dXJuICQoZWwpLmRhdGEoZGF0dW1LZXkpOwogICAgICAgIH07CiAgICAgICAgXy5t aXhpbihEYXRhc2V0LnByb3RvdHlwZSwgRXZlbnRFbWl0dGVyLCB7CiAgICAgICAg ICAgIF9yZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihxdWVyeSwgc3VnZ2VzdGlvbnMp IHsKICAgICAgICAgICAgICAgIGlmICghdGhpcy4kZWwpIHsKICAgICAgICAgICAg ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICB2YXIgdGhhdCA9IHRoaXMsIGhhc1N1Z2dlc3Rpb25zOwogICAgICAgICAgICAg ICAgdGhpcy4kZWwuZW1wdHkoKTsKICAgICAgICAgICAgICAgIGhhc1N1Z2dlc3Rp b25zID0gc3VnZ2VzdGlvbnMgJiYgc3VnZ2VzdGlvbnMubGVuZ3RoOwogICAgICAg ICAgICAgICAgaWYgKCFoYXNTdWdnZXN0aW9ucyAmJiB0aGlzLnRlbXBsYXRlcy5l bXB0eSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuJGVsLmh0bWwoZ2V0RW1w dHlIdG1sKCkpLnByZXBlbmQodGhhdC50ZW1wbGF0ZXMuaGVhZGVyID8gZ2V0SGVh ZGVySHRtbCgpIDogbnVsbCkuYXBwZW5kKHRoYXQudGVtcGxhdGVzLmZvb3RlciA/ IGdldEZvb3Rlckh0bWwoKSA6IG51bGwpOwogICAgICAgICAgICAgICAgfSBlbHNl IGlmIChoYXNTdWdnZXN0aW9ucykgewogICAgICAgICAgICAgICAgICAgIHRoaXMu JGVsLmh0bWwoZ2V0U3VnZ2VzdGlvbnNIdG1sKCkpLnByZXBlbmQodGhhdC50ZW1w bGF0ZXMuaGVhZGVyID8gZ2V0SGVhZGVySHRtbCgpIDogbnVsbCkuYXBwZW5kKHRo YXQudGVtcGxhdGVzLmZvb3RlciA/IGdldEZvb3Rlckh0bWwoKSA6IG51bGwpOwog ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCJy ZW5kZXJlZCIpOwogICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0RW1wdHlIdG1s KCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGF0LnRlbXBsYXRlcy5l bXB0eSh7CiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiBxdWVyeSwKICAg ICAgICAgICAgICAgICAgICAgICAgaXNFbXB0eTogdHJ1ZQogICAgICAgICAgICAg ICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVu Y3Rpb24gZ2V0U3VnZ2VzdGlvbnNIdG1sKCkgewogICAgICAgICAgICAgICAgICAg IHZhciAkc3VnZ2VzdGlvbnMsIG5vZGVzOwogICAgICAgICAgICAgICAgICAgICRz dWdnZXN0aW9ucyA9ICQoaHRtbC5zdWdnZXN0aW9ucykuY3NzKGNzcy5zdWdnZXN0 aW9ucyk7CiAgICAgICAgICAgICAgICAgICAgbm9kZXMgPSBfLm1hcChzdWdnZXN0 aW9ucywgZ2V0U3VnZ2VzdGlvbk5vZGUpOwogICAgICAgICAgICAgICAgICAgICRz dWdnZXN0aW9ucy5hcHBlbmQuYXBwbHkoJHN1Z2dlc3Rpb25zLCBub2Rlcyk7CiAg ICAgICAgICAgICAgICAgICAgdGhhdC5oaWdobGlnaHQgJiYgaGlnaGxpZ2h0KHsK ICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAidHQtaGlnaGxpZ2h0 IiwKICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogJHN1Z2dlc3Rpb25zWzBd LAogICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuOiBxdWVyeQogICAgICAg ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAkc3Vn Z2VzdGlvbnM7CiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0U3VnZ2Vz dGlvbk5vZGUoc3VnZ2VzdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICB2 YXIgJGVsOwogICAgICAgICAgICAgICAgICAgICAgICAkZWwgPSAkKGh0bWwuc3Vn Z2VzdGlvbikuYXBwZW5kKHRoYXQudGVtcGxhdGVzLnN1Z2dlc3Rpb24oc3VnZ2Vz dGlvbikpLmRhdGEoZGF0YXNldEtleSwgdGhhdC5uYW1lKS5kYXRhKHZhbHVlS2V5 LCB0aGF0LmRpc3BsYXlGbihzdWdnZXN0aW9uKSkuZGF0YShkYXR1bUtleSwgc3Vn Z2VzdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICRlbC5jaGlsZHJlbigp LmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAk KHRoaXMpLmNzcyhjc3Muc3VnZ2VzdGlvbkNoaWxkKTsKICAgICAgICAgICAgICAg ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkZWw7 CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgZnVuY3Rpb24gZ2V0SGVhZGVySHRtbCgpIHsKICAgICAgICAgICAg ICAgICAgICByZXR1cm4gdGhhdC50ZW1wbGF0ZXMuaGVhZGVyKHsKICAgICAgICAg ICAgICAgICAgICAgICAgcXVlcnk6IHF1ZXJ5LAogICAgICAgICAgICAgICAgICAg ICAgICBpc0VtcHR5OiAhaGFzU3VnZ2VzdGlvbnMKICAgICAgICAgICAgICAgICAg ICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9u IGdldEZvb3Rlckh0bWwoKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo YXQudGVtcGxhdGVzLmZvb3Rlcih7CiAgICAgICAgICAgICAgICAgICAgICAgIHF1 ZXJ5OiBxdWVyeSwKICAgICAgICAgICAgICAgICAgICAgICAgaXNFbXB0eTogIWhh c1N1Z2dlc3Rpb25zCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGdldFJvb3Q6IGZ1bmN0 aW9uIGdldFJvb3QoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kZWw7 CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBk YXRlKHF1ZXJ5KSB7CiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAg ICAgICAgICAgICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnk7CiAgICAgICAgICAgICAg ICB0aGlzLmNhbmNlbGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICB0aGlzLnNv dXJjZShxdWVyeSwgcmVuZGVyKTsKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJl bmRlcihzdWdnZXN0aW9ucykgewogICAgICAgICAgICAgICAgICAgIGlmICghdGhh dC5jYW5jZWxlZCAmJiBxdWVyeSA9PT0gdGhhdC5xdWVyeSkgewogICAgICAgICAg ICAgICAgICAgICAgICB0aGF0Ll9yZW5kZXIocXVlcnksIHN1Z2dlc3Rpb25zKTsK ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgIH0sCiAgICAgICAgICAgIGNhbmNlbDogZnVuY3Rpb24gY2FuY2VsKCkgewog ICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxlZCA9IHRydWU7CiAgICAgICAgICAg IH0sCiAgICAgICAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHsKICAgICAg ICAgICAgICAgIHRoaXMuY2FuY2VsKCk7CiAgICAgICAgICAgICAgICB0aGlzLiRl bC5lbXB0eSgpOwogICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCJyZW5kZXJl ZCIpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBpc0VtcHR5OiBmdW5jdGlv biBpc0VtcHR5KCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGVsLmlz KCI6ZW1wdHkiKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGVzdHJveTog ZnVuY3Rpb24gZGVzdHJveSgpIHsKICAgICAgICAgICAgICAgIHRoaXMuJGVsID0g bnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBE YXRhc2V0OwogICAgICAgIGZ1bmN0aW9uIGdldERpc3BsYXlGbihkaXNwbGF5KSB7 CiAgICAgICAgICAgIGRpc3BsYXkgPSBkaXNwbGF5IHx8ICJ2YWx1ZSI7CiAgICAg ICAgICAgIHJldHVybiBfLmlzRnVuY3Rpb24oZGlzcGxheSkgPyBkaXNwbGF5IDog ZGlzcGxheUZuOwogICAgICAgICAgICBmdW5jdGlvbiBkaXNwbGF5Rm4ob2JqKSB7 CiAgICAgICAgICAgICAgICByZXR1cm4gb2JqW2Rpc3BsYXldOwogICAgICAgICAg ICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGdldFRlbXBsYXRlcyh0ZW1w bGF0ZXMsIGRpc3BsYXlGbikgewogICAgICAgICAgICByZXR1cm4gewogICAgICAg ICAgICAgICAgZW1wdHk6IHRlbXBsYXRlcy5lbXB0eSAmJiBfLnRlbXBsYXRpZnko dGVtcGxhdGVzLmVtcHR5KSwKICAgICAgICAgICAgICAgIGhlYWRlcjogdGVtcGxh dGVzLmhlYWRlciAmJiBfLnRlbXBsYXRpZnkodGVtcGxhdGVzLmhlYWRlciksCiAg ICAgICAgICAgICAgICBmb290ZXI6IHRlbXBsYXRlcy5mb290ZXIgJiYgXy50ZW1w bGF0aWZ5KHRlbXBsYXRlcy5mb290ZXIpLAogICAgICAgICAgICAgICAgc3VnZ2Vz dGlvbjogdGVtcGxhdGVzLnN1Z2dlc3Rpb24gfHwgc3VnZ2VzdGlvblRlbXBsYXRl CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGZ1bmN0aW9uIHN1Z2dlc3Rpb25U ZW1wbGF0ZShjb250ZXh0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIjxwPiIg KyBkaXNwbGF5Rm4oY29udGV4dCkgKyAiPC9wPiI7CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgICAgZnVuY3Rpb24gaXNWYWxpZE5hbWUoc3RyKSB7CiAgICAg ICAgICAgIHJldHVybiAvXltfYS16QS1aMC05LV0rJC8udGVzdChzdHIpOwogICAg ICAgIH0KICAgIH0oKTsKICAgIHZhciBEcm9wZG93biA9IGZ1bmN0aW9uKCkgewog ICAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgICBmdW5jdGlvbiBEcm9wZG93bihv KSB7CiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywgb25TdWdnZXN0aW9uQ2xp Y2ssIG9uU3VnZ2VzdGlvbk1vdXNlRW50ZXIsIG9uU3VnZ2VzdGlvbk1vdXNlTGVh dmU7CiAgICAgICAgICAgIG8gPSBvIHx8IHt9OwogICAgICAgICAgICBpZiAoIW8u bWVudSkgewogICAgICAgICAgICAgICAgJC5lcnJvcigibWVudSBpcyByZXF1aXJl ZCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFs c2U7CiAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7CiAgICAgICAgICAg IHRoaXMuZGF0YXNldHMgPSBfLm1hcChvLmRhdGFzZXRzLCBpbml0aWFsaXplRGF0 YXNldCk7CiAgICAgICAgICAgIG9uU3VnZ2VzdGlvbkNsaWNrID0gXy5iaW5kKHRo aXMuX29uU3VnZ2VzdGlvbkNsaWNrLCB0aGlzKTsKICAgICAgICAgICAgb25TdWdn ZXN0aW9uTW91c2VFbnRlciA9IF8uYmluZCh0aGlzLl9vblN1Z2dlc3Rpb25Nb3Vz ZUVudGVyLCB0aGlzKTsKICAgICAgICAgICAgb25TdWdnZXN0aW9uTW91c2VMZWF2 ZSA9IF8uYmluZCh0aGlzLl9vblN1Z2dlc3Rpb25Nb3VzZUxlYXZlLCB0aGlzKTsK ICAgICAgICAgICAgdGhpcy4kbWVudSA9ICQoby5tZW51KS5vbigiY2xpY2sudHQi LCAiLnR0LXN1Z2dlc3Rpb24iLCBvblN1Z2dlc3Rpb25DbGljaykub24oIm1vdXNl ZW50ZXIudHQiLCAiLnR0LXN1Z2dlc3Rpb24iLCBvblN1Z2dlc3Rpb25Nb3VzZUVu dGVyKS5vbigibW91c2VsZWF2ZS50dCIsICIudHQtc3VnZ2VzdGlvbiIsIG9uU3Vn Z2VzdGlvbk1vdXNlTGVhdmUpOwogICAgICAgICAgICBfLmVhY2godGhpcy5kYXRh c2V0cywgZnVuY3Rpb24oZGF0YXNldCkgewogICAgICAgICAgICAgICAgdGhhdC4k bWVudS5hcHBlbmQoZGF0YXNldC5nZXRSb290KCkpOwogICAgICAgICAgICAgICAg ZGF0YXNldC5vblN5bmMoInJlbmRlcmVkIiwgdGhhdC5fb25SZW5kZXJlZCwgdGhh dCk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBfLm1peGluKERy b3Bkb3duLnByb3RvdHlwZSwgRXZlbnRFbWl0dGVyLCB7CiAgICAgICAgICAgIF9v blN1Z2dlc3Rpb25DbGljazogZnVuY3Rpb24gb25TdWdnZXN0aW9uQ2xpY2soJGUp IHsKICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcigic3VnZ2VzdGlvbkNsaWNr ZWQiLCAkKCRlLmN1cnJlbnRUYXJnZXQpKTsKICAgICAgICAgICAgfSwKICAgICAg ICAgICAgX29uU3VnZ2VzdGlvbk1vdXNlRW50ZXI6IGZ1bmN0aW9uIG9uU3VnZ2Vz dGlvbk1vdXNlRW50ZXIoJGUpIHsKICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92 ZUN1cnNvcigpOwogICAgICAgICAgICAgICAgdGhpcy5fc2V0Q3Vyc29yKCQoJGUu Y3VycmVudFRhcmdldCksIHRydWUpOwogICAgICAgICAgICB9LAogICAgICAgICAg ICBfb25TdWdnZXN0aW9uTW91c2VMZWF2ZTogZnVuY3Rpb24gb25TdWdnZXN0aW9u TW91c2VMZWF2ZSgpIHsKICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUN1cnNv cigpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBfb25SZW5kZXJlZDogZnVu Y3Rpb24gb25SZW5kZXJlZCgpIHsKICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0 eSA9IF8uZXZlcnkodGhpcy5kYXRhc2V0cywgaXNEYXRhc2V0RW1wdHkpOwogICAg ICAgICAgICAgICAgdGhpcy5pc0VtcHR5ID8gdGhpcy5faGlkZSgpIDogdGhpcy5p c09wZW4gJiYgdGhpcy5fc2hvdygpOwogICAgICAgICAgICAgICAgdGhpcy50cmln Z2VyKCJkYXRhc2V0UmVuZGVyZWQiKTsKICAgICAgICAgICAgICAgIGZ1bmN0aW9u IGlzRGF0YXNldEVtcHR5KGRhdGFzZXQpIHsKICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gZGF0YXNldC5pc0VtcHR5KCk7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgIH0sCiAgICAgICAgICAgIF9oaWRlOiBmdW5jdGlvbigpIHsKICAgICAg ICAgICAgICAgIHRoaXMuJG1lbnUuaGlkZSgpOwogICAgICAgICAgICB9LAogICAg ICAgICAgICBfc2hvdzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB0aGlz LiRtZW51LmNzcygiZGlzcGxheSIsICJibG9jayIpOwogICAgICAgICAgICB9LAog ICAgICAgICAgICBfZ2V0U3VnZ2VzdGlvbnM6IGZ1bmN0aW9uIGdldFN1Z2dlc3Rp b25zKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJG1lbnUuZmluZCgi LnR0LXN1Z2dlc3Rpb24iKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX2dl dEN1cnNvcjogZnVuY3Rpb24gZ2V0Q3Vyc29yKCkgewogICAgICAgICAgICAgICAg cmV0dXJuIHRoaXMuJG1lbnUuZmluZCgiLnR0LWN1cnNvciIpLmZpcnN0KCk7CiAg ICAgICAgICAgIH0sCiAgICAgICAgICAgIF9zZXRDdXJzb3I6IGZ1bmN0aW9uIHNl dEN1cnNvcigkZWwsIHNpbGVudCkgewogICAgICAgICAgICAgICAgJGVsLmZpcnN0 KCkuYWRkQ2xhc3MoInR0LWN1cnNvciIpOwogICAgICAgICAgICAgICAgIXNpbGVu dCAmJiB0aGlzLnRyaWdnZXIoImN1cnNvck1vdmVkIik7CiAgICAgICAgICAgIH0s CiAgICAgICAgICAgIF9yZW1vdmVDdXJzb3I6IGZ1bmN0aW9uIHJlbW92ZUN1cnNv cigpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2dldEN1cnNvcigpLnJlbW92ZUNs YXNzKCJ0dC1jdXJzb3IiKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX21v dmVDdXJzb3I6IGZ1bmN0aW9uIG1vdmVDdXJzb3IoaW5jcmVtZW50KSB7CiAgICAg ICAgICAgICAgICB2YXIgJHN1Z2dlc3Rpb25zLCAkb2xkQ3Vyc29yLCBuZXdDdXJz b3JJbmRleCwgJG5ld0N1cnNvcjsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5p c09wZW4pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAkb2xkQ3Vyc29yID0gdGhpcy5fZ2V0Q3Vy c29yKCk7CiAgICAgICAgICAgICAgICAkc3VnZ2VzdGlvbnMgPSB0aGlzLl9nZXRT dWdnZXN0aW9ucygpOwogICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQ3Vyc29y KCk7CiAgICAgICAgICAgICAgICBuZXdDdXJzb3JJbmRleCA9ICRzdWdnZXN0aW9u cy5pbmRleCgkb2xkQ3Vyc29yKSArIGluY3JlbWVudDsKICAgICAgICAgICAgICAg IG5ld0N1cnNvckluZGV4ID0gKG5ld0N1cnNvckluZGV4ICsgMSkgJSAoJHN1Z2dl c3Rpb25zLmxlbmd0aCArIDEpIC0gMTsKICAgICAgICAgICAgICAgIGlmIChuZXdD dXJzb3JJbmRleCA9PT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnRy aWdnZXIoImN1cnNvclJlbW92ZWQiKTsKICAgICAgICAgICAgICAgICAgICByZXR1 cm47CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5ld0N1cnNvckluZGV4IDwg LTEpIHsKICAgICAgICAgICAgICAgICAgICBuZXdDdXJzb3JJbmRleCA9ICRzdWdn ZXN0aW9ucy5sZW5ndGggLSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgdGhpcy5fc2V0Q3Vyc29yKCRuZXdDdXJzb3IgPSAkc3VnZ2VzdGlvbnMu ZXEobmV3Q3Vyc29ySW5kZXgpKTsKICAgICAgICAgICAgICAgIHRoaXMuX2Vuc3Vy ZVZpc2libGUoJG5ld0N1cnNvcik7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAg IF9lbnN1cmVWaXNpYmxlOiBmdW5jdGlvbiBlbnN1cmVWaXNpYmxlKCRlbCkgewog ICAgICAgICAgICAgICAgdmFyIGVsVG9wLCBlbEJvdHRvbSwgbWVudVNjcm9sbFRv cCwgbWVudUhlaWdodDsKICAgICAgICAgICAgICAgIGVsVG9wID0gJGVsLnBvc2l0 aW9uKCkudG9wOwogICAgICAgICAgICAgICAgZWxCb3R0b20gPSBlbFRvcCArICRl bC5vdXRlckhlaWdodCh0cnVlKTsKICAgICAgICAgICAgICAgIG1lbnVTY3JvbGxU b3AgPSB0aGlzLiRtZW51LnNjcm9sbFRvcCgpOwogICAgICAgICAgICAgICAgbWVu dUhlaWdodCA9IHRoaXMuJG1lbnUuaGVpZ2h0KCkgKyBwYXJzZUludCh0aGlzLiRt ZW51LmNzcygicGFkZGluZ1RvcCIpLCAxMCkgKyBwYXJzZUludCh0aGlzLiRtZW51 LmNzcygicGFkZGluZ0JvdHRvbSIpLCAxMCk7CiAgICAgICAgICAgICAgICBpZiAo ZWxUb3AgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbWVudS5zY3Jv bGxUb3AobWVudVNjcm9sbFRvcCArIGVsVG9wKTsKICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAobWVudUhlaWdodCA8IGVsQm90dG9tKSB7CiAgICAgICAgICAgICAg ICAgICAgdGhpcy4kbWVudS5zY3JvbGxUb3AobWVudVNjcm9sbFRvcCArIChlbEJv dHRvbSAtIG1lbnVIZWlnaHQpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgfSwKICAgICAgICAgICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKCkgewogICAg ICAgICAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7CiAgICAgICAgICAgICAgICAg ICAgdGhpcy5pc09wZW4gPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB0aGlz Ll9yZW1vdmVDdXJzb3IoKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9oaWRl KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCJjbG9zZWQiKTsK ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgb3Bl bjogZnVuY3Rpb24gb3BlbigpIHsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5p c09wZW4pIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7 CiAgICAgICAgICAgICAgICAgICAgIXRoaXMuaXNFbXB0eSAmJiB0aGlzLl9zaG93 KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCJvcGVuZWQiKTsK ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgc2V0 TGFuZ3VhZ2VEaXJlY3Rpb246IGZ1bmN0aW9uIHNldExhbmd1YWdlRGlyZWN0aW9u KGRpcikgewogICAgICAgICAgICAgICAgdGhpcy4kbWVudS5jc3MoZGlyID09PSAi bHRyIiA/IGNzcy5sdHIgOiBjc3MucnRsKTsKICAgICAgICAgICAgfSwKICAgICAg ICAgICAgbW92ZUN1cnNvclVwOiBmdW5jdGlvbiBtb3ZlQ3Vyc29yVXAoKSB7CiAg ICAgICAgICAgICAgICB0aGlzLl9tb3ZlQ3Vyc29yKC0xKTsKICAgICAgICAgICAg fSwKICAgICAgICAgICAgbW92ZUN1cnNvckRvd246IGZ1bmN0aW9uIG1vdmVDdXJz b3JEb3duKCkgewogICAgICAgICAgICAgICAgdGhpcy5fbW92ZUN1cnNvcigrMSk7 CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGdldERhdHVtRm9yU3VnZ2VzdGlv bjogZnVuY3Rpb24gZ2V0RGF0dW1Gb3JTdWdnZXN0aW9uKCRlbCkgewogICAgICAg ICAgICAgICAgdmFyIGRhdHVtID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmICgk ZWwubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgZGF0dW0gPSB7CiAgICAg ICAgICAgICAgICAgICAgICAgIHJhdzogRGF0YXNldC5leHRyYWN0RGF0dW0oJGVs KSwKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IERhdGFzZXQuZXh0cmFj dFZhbHVlKCRlbCksCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXROYW1l OiBEYXRhc2V0LmV4dHJhY3REYXRhc2V0TmFtZSgkZWwpCiAgICAgICAgICAgICAg ICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVy biBkYXR1bTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZ2V0RGF0dW1Gb3JD dXJzb3I6IGZ1bmN0aW9uIGdldERhdHVtRm9yQ3Vyc29yKCkgewogICAgICAgICAg ICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0dW1Gb3JTdWdnZXN0aW9uKHRoaXMuX2dl dEN1cnNvcigpLmZpcnN0KCkpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBn ZXREYXR1bUZvclRvcFN1Z2dlc3Rpb246IGZ1bmN0aW9uIGdldERhdHVtRm9yVG9w U3VnZ2VzdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERh dHVtRm9yU3VnZ2VzdGlvbih0aGlzLl9nZXRTdWdnZXN0aW9ucygpLmZpcnN0KCkp OwogICAgICAgICAgICB9LAogICAgICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uIHVw ZGF0ZShxdWVyeSkgewogICAgICAgICAgICAgICAgXy5lYWNoKHRoaXMuZGF0YXNl dHMsIHVwZGF0ZURhdGFzZXQpOwogICAgICAgICAgICAgICAgZnVuY3Rpb24gdXBk YXRlRGF0YXNldChkYXRhc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgZGF0YXNl dC51cGRhdGUocXVlcnkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9 LAogICAgICAgICAgICBlbXB0eTogZnVuY3Rpb24gZW1wdHkoKSB7CiAgICAgICAg ICAgICAgICBfLmVhY2godGhpcy5kYXRhc2V0cywgY2xlYXJEYXRhc2V0KTsKICAg ICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7CiAgICAgICAgICAgICAg ICBmdW5jdGlvbiBjbGVhckRhdGFzZXQoZGF0YXNldCkgewogICAgICAgICAgICAg ICAgICAgIGRhdGFzZXQuY2xlYXIoKTsKICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgfSwKICAgICAgICAgICAgaXNWaXNpYmxlOiBmdW5jdGlvbiBpc1Zpc2li bGUoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc09wZW4gJiYgIXRo aXMuaXNFbXB0eTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGVzdHJveTog ZnVuY3Rpb24gZGVzdHJveSgpIHsKICAgICAgICAgICAgICAgIHRoaXMuJG1lbnUu b2ZmKCIudHQiKTsKICAgICAgICAgICAgICAgIHRoaXMuJG1lbnUgPSBudWxsOwog ICAgICAgICAgICAgICAgXy5lYWNoKHRoaXMuZGF0YXNldHMsIGRlc3Ryb3lEYXRh c2V0KTsKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlc3Ryb3lEYXRhc2V0KGRh dGFzZXQpIHsKICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LmRlc3Ryb3koKTsK ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAg ICAgIHJldHVybiBEcm9wZG93bjsKICAgICAgICBmdW5jdGlvbiBpbml0aWFsaXpl RGF0YXNldChvRGF0YXNldCkgewogICAgICAgICAgICByZXR1cm4gbmV3IERhdGFz ZXQob0RhdGFzZXQpOwogICAgICAgIH0KICAgIH0oKTsKICAgIHZhciBUeXBlYWhl YWQgPSBmdW5jdGlvbigpIHsKICAgICAgICAidXNlIHN0cmljdCI7CiAgICAgICAg dmFyIGF0dHJzS2V5ID0gInR0QXR0cnMiOwogICAgICAgIGZ1bmN0aW9uIFR5cGVh aGVhZChvKSB7CiAgICAgICAgICAgIHZhciAkbWVudSwgJGlucHV0LCAkaGludDsK ICAgICAgICAgICAgbyA9IG8gfHwge307CiAgICAgICAgICAgIGlmICghby5pbnB1 dCkgewogICAgICAgICAgICAgICAgJC5lcnJvcigibWlzc2luZyBpbnB1dCIpOwog ICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuaXNBY3RpdmF0ZWQgPSBmYWxz ZTsKICAgICAgICAgICAgdGhpcy5hdXRvc2VsZWN0ID0gISFvLmF1dG9zZWxlY3Q7 CiAgICAgICAgICAgIHRoaXMubWluTGVuZ3RoID0gXy5pc051bWJlcihvLm1pbkxl bmd0aCkgPyBvLm1pbkxlbmd0aCA6IDE7CiAgICAgICAgICAgIHRoaXMuJG5vZGUg PSBidWlsZERvbShvLmlucHV0LCBvLndpdGhIaW50KTsKICAgICAgICAgICAgJG1l bnUgPSB0aGlzLiRub2RlLmZpbmQoIi50dC1kcm9wZG93bi1tZW51Iik7CiAgICAg ICAgICAgICRpbnB1dCA9IHRoaXMuJG5vZGUuZmluZCgiLnR0LWlucHV0Iik7CiAg ICAgICAgICAgICRoaW50ID0gdGhpcy4kbm9kZS5maW5kKCIudHQtaGludCIpOwog ICAgICAgICAgICAkaW5wdXQub24oImJsdXIudHQiLCBmdW5jdGlvbigkZSkgewog ICAgICAgICAgICAgICAgdmFyIGFjdGl2ZSwgaXNBY3RpdmUsIGhhc0FjdGl2ZTsK ICAgICAgICAgICAgICAgIGFjdGl2ZSA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7 CiAgICAgICAgICAgICAgICBpc0FjdGl2ZSA9ICRtZW51LmlzKGFjdGl2ZSk7CiAg ICAgICAgICAgICAgICBoYXNBY3RpdmUgPSAkbWVudS5oYXMoYWN0aXZlKS5sZW5n dGggPiAwOwogICAgICAgICAgICAgICAgaWYgKF8uaXNNc2llKCkgJiYgKGlzQWN0 aXZlIHx8IGhhc0FjdGl2ZSkpIHsKICAgICAgICAgICAgICAgICAgICAkZS5wcmV2 ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgICRlLnN0b3BJbW1lZGlh dGVQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgICAgIF8uZGVmZXIoZnVu Y3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpbnB1dC5mb2N1cygp OwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICB9KTsKICAgICAgICAgICAgJG1lbnUub24oIm1vdXNlZG93bi50dCIs IGZ1bmN0aW9uKCRlKSB7CiAgICAgICAgICAgICAgICAkZS5wcmV2ZW50RGVmYXVs dCgpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy5ldmVudEJ1cyA9 IG8uZXZlbnRCdXMgfHwgbmV3IEV2ZW50QnVzKHsKICAgICAgICAgICAgICAgIGVs OiAkaW5wdXQKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMuZHJvcGRv d24gPSBuZXcgRHJvcGRvd24oewogICAgICAgICAgICAgICAgbWVudTogJG1lbnUs CiAgICAgICAgICAgICAgICBkYXRhc2V0czogby5kYXRhc2V0cwogICAgICAgICAg ICB9KS5vblN5bmMoInN1Z2dlc3Rpb25DbGlja2VkIiwgdGhpcy5fb25TdWdnZXN0 aW9uQ2xpY2tlZCwgdGhpcykub25TeW5jKCJjdXJzb3JNb3ZlZCIsIHRoaXMuX29u Q3Vyc29yTW92ZWQsIHRoaXMpLm9uU3luYygiY3Vyc29yUmVtb3ZlZCIsIHRoaXMu X29uQ3Vyc29yUmVtb3ZlZCwgdGhpcykub25TeW5jKCJvcGVuZWQiLCB0aGlzLl9v bk9wZW5lZCwgdGhpcykub25TeW5jKCJjbG9zZWQiLCB0aGlzLl9vbkNsb3NlZCwg dGhpcykub25Bc3luYygiZGF0YXNldFJlbmRlcmVkIiwgdGhpcy5fb25EYXRhc2V0 UmVuZGVyZWQsIHRoaXMpOwogICAgICAgICAgICB0aGlzLmlucHV0ID0gbmV3IElu cHV0KHsKICAgICAgICAgICAgICAgIGlucHV0OiAkaW5wdXQsCiAgICAgICAgICAg ICAgICBoaW50OiAkaGludAogICAgICAgICAgICB9KS5vblN5bmMoImZvY3VzZWQi LCB0aGlzLl9vbkZvY3VzZWQsIHRoaXMpLm9uU3luYygiYmx1cnJlZCIsIHRoaXMu X29uQmx1cnJlZCwgdGhpcykub25TeW5jKCJlbnRlcktleWVkIiwgdGhpcy5fb25F bnRlcktleWVkLCB0aGlzKS5vblN5bmMoInRhYktleWVkIiwgdGhpcy5fb25UYWJL ZXllZCwgdGhpcykub25TeW5jKCJlc2NLZXllZCIsIHRoaXMuX29uRXNjS2V5ZWQs IHRoaXMpLm9uU3luYygidXBLZXllZCIsIHRoaXMuX29uVXBLZXllZCwgdGhpcyku b25TeW5jKCJkb3duS2V5ZWQiLCB0aGlzLl9vbkRvd25LZXllZCwgdGhpcykub25T eW5jKCJsZWZ0S2V5ZWQiLCB0aGlzLl9vbkxlZnRLZXllZCwgdGhpcykub25TeW5j KCJyaWdodEtleWVkIiwgdGhpcy5fb25SaWdodEtleWVkLCB0aGlzKS5vblN5bmMo InF1ZXJ5Q2hhbmdlZCIsIHRoaXMuX29uUXVlcnlDaGFuZ2VkLCB0aGlzKS5vblN5 bmMoIndoaXRlc3BhY2VDaGFuZ2VkIiwgdGhpcy5fb25XaGl0ZXNwYWNlQ2hhbmdl ZCwgdGhpcyk7CiAgICAgICAgICAgIHRoaXMuX3NldExhbmd1YWdlRGlyZWN0aW9u KCk7CiAgICAgICAgfQogICAgICAgIF8ubWl4aW4oVHlwZWFoZWFkLnByb3RvdHlw ZSwgewogICAgICAgICAgICBfb25TdWdnZXN0aW9uQ2xpY2tlZDogZnVuY3Rpb24g b25TdWdnZXN0aW9uQ2xpY2tlZCh0eXBlLCAkZWwpIHsKICAgICAgICAgICAgICAg IHZhciBkYXR1bTsKICAgICAgICAgICAgICAgIGlmIChkYXR1bSA9IHRoaXMuZHJv cGRvd24uZ2V0RGF0dW1Gb3JTdWdnZXN0aW9uKCRlbCkpIHsKICAgICAgICAgICAg ICAgICAgICB0aGlzLl9zZWxlY3QoZGF0dW0pOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICB9LAogICAgICAgICAgICBfb25DdXJzb3JNb3ZlZDogZnVuY3Rp b24gb25DdXJzb3JNb3ZlZCgpIHsKICAgICAgICAgICAgICAgIHZhciBkYXR1bSA9 IHRoaXMuZHJvcGRvd24uZ2V0RGF0dW1Gb3JDdXJzb3IoKTsKICAgICAgICAgICAg ICAgIHRoaXMuaW5wdXQuc2V0SW5wdXRWYWx1ZShkYXR1bS52YWx1ZSwgdHJ1ZSk7 CiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50QnVzLnRyaWdnZXIoImN1cnNvcmNo YW5nZWQiLCBkYXR1bS5yYXcsIGRhdHVtLmRhdGFzZXROYW1lKTsKICAgICAgICAg ICAgfSwKICAgICAgICAgICAgX29uQ3Vyc29yUmVtb3ZlZDogZnVuY3Rpb24gb25D dXJzb3JSZW1vdmVkKCkgewogICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5yZXNl dElucHV0VmFsdWUoKTsKICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUhpbnQo KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX29uRGF0YXNldFJlbmRlcmVk OiBmdW5jdGlvbiBvbkRhdGFzZXRSZW5kZXJlZCgpIHsKICAgICAgICAgICAgICAg IHRoaXMuX3VwZGF0ZUhpbnQoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAg X29uT3BlbmVkOiBmdW5jdGlvbiBvbk9wZW5lZCgpIHsKICAgICAgICAgICAgICAg IHRoaXMuX3VwZGF0ZUhpbnQoKTsKICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRC dXMudHJpZ2dlcigib3BlbmVkIik7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAg IF9vbkNsb3NlZDogZnVuY3Rpb24gb25DbG9zZWQoKSB7CiAgICAgICAgICAgICAg ICB0aGlzLmlucHV0LmNsZWFySGludCgpOwogICAgICAgICAgICAgICAgdGhpcy5l dmVudEJ1cy50cmlnZ2VyKCJjbG9zZWQiKTsKICAgICAgICAgICAgfSwKICAgICAg ICAgICAgX29uRm9jdXNlZDogZnVuY3Rpb24gb25Gb2N1c2VkKCkgewogICAgICAg ICAgICAgICAgdGhpcy5pc0FjdGl2YXRlZCA9IHRydWU7CiAgICAgICAgICAgICAg ICB0aGlzLmRyb3Bkb3duLm9wZW4oKTsKICAgICAgICAgICAgfSwKICAgICAgICAg ICAgX29uQmx1cnJlZDogZnVuY3Rpb24gb25CbHVycmVkKCkgewogICAgICAgICAg ICAgICAgdGhpcy5pc0FjdGl2YXRlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAg dGhpcy5kcm9wZG93bi5lbXB0eSgpOwogICAgICAgICAgICAgICAgdGhpcy5kcm9w ZG93bi5jbG9zZSgpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBfb25FbnRl cktleWVkOiBmdW5jdGlvbiBvbkVudGVyS2V5ZWQodHlwZSwgJGUpIHsKICAgICAg ICAgICAgICAgIHZhciBjdXJzb3JEYXR1bSwgdG9wU3VnZ2VzdGlvbkRhdHVtOwog ICAgICAgICAgICAgICAgY3Vyc29yRGF0dW0gPSB0aGlzLmRyb3Bkb3duLmdldERh dHVtRm9yQ3Vyc29yKCk7CiAgICAgICAgICAgICAgICB0b3BTdWdnZXN0aW9uRGF0 dW0gPSB0aGlzLmRyb3Bkb3duLmdldERhdHVtRm9yVG9wU3VnZ2VzdGlvbigpOwog ICAgICAgICAgICAgICAgaWYgKGN1cnNvckRhdHVtKSB7CiAgICAgICAgICAgICAg ICAgICAgdGhpcy5fc2VsZWN0KGN1cnNvckRhdHVtKTsKICAgICAgICAgICAgICAg ICAgICAkZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgfSBlbHNl IGlmICh0aGlzLmF1dG9zZWxlY3QgJiYgdG9wU3VnZ2VzdGlvbkRhdHVtKSB7CiAg ICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0KHRvcFN1Z2dlc3Rpb25EYXR1 bSk7CiAgICAgICAgICAgICAgICAgICAgJGUucHJldmVudERlZmF1bHQoKTsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgX29uVGFi S2V5ZWQ6IGZ1bmN0aW9uIG9uVGFiS2V5ZWQodHlwZSwgJGUpIHsKICAgICAgICAg ICAgICAgIHZhciBkYXR1bTsKICAgICAgICAgICAgICAgIGlmIChkYXR1bSA9IHRo aXMuZHJvcGRvd24uZ2V0RGF0dW1Gb3JDdXJzb3IoKSkgewogICAgICAgICAgICAg ICAgICAgIHRoaXMuX3NlbGVjdChkYXR1bSk7CiAgICAgICAgICAgICAgICAgICAg JGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg ICAgICAgICAgICAgICAgICAgdGhpcy5fYXV0b2NvbXBsZXRlKHRydWUpOwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBfb25Fc2NL ZXllZDogZnVuY3Rpb24gb25Fc2NLZXllZCgpIHsKICAgICAgICAgICAgICAgIHRo aXMuZHJvcGRvd24uY2xvc2UoKTsKICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQu cmVzZXRJbnB1dFZhbHVlKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9v blVwS2V5ZWQ6IGZ1bmN0aW9uIG9uVXBLZXllZCgpIHsKICAgICAgICAgICAgICAg IHZhciBxdWVyeSA9IHRoaXMuaW5wdXQuZ2V0UXVlcnkoKTsKICAgICAgICAgICAg ICAgIHRoaXMuZHJvcGRvd24uaXNFbXB0eSAmJiBxdWVyeS5sZW5ndGggPj0gdGhp cy5taW5MZW5ndGggPyB0aGlzLmRyb3Bkb3duLnVwZGF0ZShxdWVyeSkgOiB0aGlz LmRyb3Bkb3duLm1vdmVDdXJzb3JVcCgpOwogICAgICAgICAgICAgICAgdGhpcy5k cm9wZG93bi5vcGVuKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9vbkRv d25LZXllZDogZnVuY3Rpb24gb25Eb3duS2V5ZWQoKSB7CiAgICAgICAgICAgICAg ICB2YXIgcXVlcnkgPSB0aGlzLmlucHV0LmdldFF1ZXJ5KCk7CiAgICAgICAgICAg ICAgICB0aGlzLmRyb3Bkb3duLmlzRW1wdHkgJiYgcXVlcnkubGVuZ3RoID49IHRo aXMubWluTGVuZ3RoID8gdGhpcy5kcm9wZG93bi51cGRhdGUocXVlcnkpIDogdGhp cy5kcm9wZG93bi5tb3ZlQ3Vyc29yRG93bigpOwogICAgICAgICAgICAgICAgdGhp cy5kcm9wZG93bi5vcGVuKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9v bkxlZnRLZXllZDogZnVuY3Rpb24gb25MZWZ0S2V5ZWQoKSB7CiAgICAgICAgICAg ICAgICB0aGlzLmRpciA9PT0gInJ0bCIgJiYgdGhpcy5fYXV0b2NvbXBsZXRlKCk7 CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9vblJpZ2h0S2V5ZWQ6IGZ1bmN0 aW9uIG9uUmlnaHRLZXllZCgpIHsKICAgICAgICAgICAgICAgIHRoaXMuZGlyID09 PSAibHRyIiAmJiB0aGlzLl9hdXRvY29tcGxldGUoKTsKICAgICAgICAgICAgfSwK ICAgICAgICAgICAgX29uUXVlcnlDaGFuZ2VkOiBmdW5jdGlvbiBvblF1ZXJ5Q2hh bmdlZChlLCBxdWVyeSkgewogICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5jbGVh ckhpbnRJZkludmFsaWQoKTsKICAgICAgICAgICAgICAgIHF1ZXJ5Lmxlbmd0aCA+ PSB0aGlzLm1pbkxlbmd0aCA/IHRoaXMuZHJvcGRvd24udXBkYXRlKHF1ZXJ5KSA6 IHRoaXMuZHJvcGRvd24uZW1wdHkoKTsKICAgICAgICAgICAgICAgIHRoaXMuZHJv cGRvd24ub3BlbigpOwogICAgICAgICAgICAgICAgdGhpcy5fc2V0TGFuZ3VhZ2VE aXJlY3Rpb24oKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX29uV2hpdGVz cGFjZUNoYW5nZWQ6IGZ1bmN0aW9uIG9uV2hpdGVzcGFjZUNoYW5nZWQoKSB7CiAg ICAgICAgICAgICAgICB0aGlzLl91cGRhdGVIaW50KCk7CiAgICAgICAgICAgICAg ICB0aGlzLmRyb3Bkb3duLm9wZW4oKTsKICAgICAgICAgICAgfSwKICAgICAgICAg ICAgX3NldExhbmd1YWdlRGlyZWN0aW9uOiBmdW5jdGlvbiBzZXRMYW5ndWFnZURp cmVjdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciBkaXI7CiAgICAgICAgICAg ICAgICBpZiAodGhpcy5kaXIgIT09IChkaXIgPSB0aGlzLmlucHV0LmdldExhbmd1 YWdlRGlyZWN0aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXIg PSBkaXI7CiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbm9kZS5jc3MoImRpcmVj dGlvbiIsIGRpcik7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5z ZXRMYW5ndWFnZURpcmVjdGlvbihkaXIpOwogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICB9LAogICAgICAgICAgICBfdXBkYXRlSGludDogZnVuY3Rpb24gdXBk YXRlSGludCgpIHsKICAgICAgICAgICAgICAgIHZhciBkYXR1bSwgdmFsLCBxdWVy eSwgZXNjYXBlZFF1ZXJ5LCBmcm9udE1hdGNoUmVnRXgsIG1hdGNoOwogICAgICAg ICAgICAgICAgZGF0dW0gPSB0aGlzLmRyb3Bkb3duLmdldERhdHVtRm9yVG9wU3Vn Z2VzdGlvbigpOwogICAgICAgICAgICAgICAgaWYgKGRhdHVtICYmIHRoaXMuZHJv cGRvd24uaXNWaXNpYmxlKCkgJiYgIXRoaXMuaW5wdXQuaGFzT3ZlcmZsb3coKSkg ewogICAgICAgICAgICAgICAgICAgIHZhbCA9IHRoaXMuaW5wdXQuZ2V0SW5wdXRW YWx1ZSgpOwogICAgICAgICAgICAgICAgICAgIHF1ZXJ5ID0gSW5wdXQubm9ybWFs aXplUXVlcnkodmFsKTsKICAgICAgICAgICAgICAgICAgICBlc2NhcGVkUXVlcnkg PSBfLmVzY2FwZVJlZ0V4Q2hhcnMocXVlcnkpOwogICAgICAgICAgICAgICAgICAg IGZyb250TWF0Y2hSZWdFeCA9IG5ldyBSZWdFeHAoIl4oPzoiICsgZXNjYXBlZFF1 ZXJ5ICsgIikoLiskKSIsICJpIik7CiAgICAgICAgICAgICAgICAgICAgbWF0Y2gg PSBmcm9udE1hdGNoUmVnRXguZXhlYyhkYXR1bS52YWx1ZSk7CiAgICAgICAgICAg ICAgICAgICAgbWF0Y2ggPyB0aGlzLmlucHV0LnNldEhpbnQodmFsICsgbWF0Y2hb MV0pIDogdGhpcy5pbnB1dC5jbGVhckhpbnQoKTsKICAgICAgICAgICAgICAgIH0g ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5jbGVhckhpbnQo KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAg X2F1dG9jb21wbGV0ZTogZnVuY3Rpb24gYXV0b2NvbXBsZXRlKGxheEN1cnNvcikg ewogICAgICAgICAgICAgICAgdmFyIGhpbnQsIHF1ZXJ5LCBpc0N1cnNvckF0RW5k LCBkYXR1bTsKICAgICAgICAgICAgICAgIGhpbnQgPSB0aGlzLmlucHV0LmdldEhp bnQoKTsKICAgICAgICAgICAgICAgIHF1ZXJ5ID0gdGhpcy5pbnB1dC5nZXRRdWVy eSgpOwogICAgICAgICAgICAgICAgaXNDdXJzb3JBdEVuZCA9IGxheEN1cnNvciB8 fCB0aGlzLmlucHV0LmlzQ3Vyc29yQXRFbmQoKTsKICAgICAgICAgICAgICAgIGlm IChoaW50ICYmIHF1ZXJ5ICE9PSBoaW50ICYmIGlzQ3Vyc29yQXRFbmQpIHsKICAg ICAgICAgICAgICAgICAgICBkYXR1bSA9IHRoaXMuZHJvcGRvd24uZ2V0RGF0dW1G b3JUb3BTdWdnZXN0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgZGF0dW0gJiYg dGhpcy5pbnB1dC5zZXRJbnB1dFZhbHVlKGRhdHVtLnZhbHVlKTsKICAgICAgICAg ICAgICAgICAgICB0aGlzLmV2ZW50QnVzLnRyaWdnZXIoImF1dG9jb21wbGV0ZWQi LCBkYXR1bS5yYXcsIGRhdHVtLmRhdGFzZXROYW1lKTsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgX3NlbGVjdDogZnVuY3Rpb24g c2VsZWN0KGRhdHVtKSB7CiAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnNldFF1 ZXJ5KGRhdHVtLnZhbHVlKTsKICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQuc2V0 SW5wdXRWYWx1ZShkYXR1bS52YWx1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICB0 aGlzLl9zZXRMYW5ndWFnZURpcmVjdGlvbigpOwogICAgICAgICAgICAgICAgdGhp cy5ldmVudEJ1cy50cmlnZ2VyKCJzZWxlY3RlZCIsIGRhdHVtLnJhdywgZGF0dW0u ZGF0YXNldE5hbWUpOwogICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9z ZSgpOwogICAgICAgICAgICAgICAgXy5kZWZlcihfLmJpbmQodGhpcy5kcm9wZG93 bi5lbXB0eSwgdGhpcy5kcm9wZG93bikpOwogICAgICAgICAgICB9LAogICAgICAg ICAgICBvcGVuOiBmdW5jdGlvbiBvcGVuKCkgewogICAgICAgICAgICAgICAgdGhp cy5kcm9wZG93bi5vcGVuKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGNs b3NlOiBmdW5jdGlvbiBjbG9zZSgpIHsKICAgICAgICAgICAgICAgIHRoaXMuZHJv cGRvd24uY2xvc2UoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc2V0VmFs OiBmdW5jdGlvbiBzZXRWYWwodmFsKSB7CiAgICAgICAgICAgICAgICB2YWwgPSBf LnRvU3RyKHZhbCk7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0FjdGl2YXRl ZCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQuc2V0SW5wdXRWYWx1 ZSh2YWwpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg ICAgICB0aGlzLmlucHV0LnNldFF1ZXJ5KHZhbCk7CiAgICAgICAgICAgICAgICAg ICAgdGhpcy5pbnB1dC5zZXRJbnB1dFZhbHVlKHZhbCwgdHJ1ZSk7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLl9zZXRMYW5ndWFnZURpcmVj dGlvbigpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBnZXRWYWw6IGZ1bmN0 aW9uIGdldFZhbCgpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0 LmdldFF1ZXJ5KCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRlc3Ryb3k6 IGZ1bmN0aW9uIGRlc3Ryb3koKSB7CiAgICAgICAgICAgICAgICB0aGlzLmlucHV0 LmRlc3Ryb3koKTsKICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uZGVzdHJv eSgpOwogICAgICAgICAgICAgICAgZGVzdHJveURvbVN0cnVjdHVyZSh0aGlzLiRu b2RlKTsKICAgICAgICAgICAgICAgIHRoaXMuJG5vZGUgPSBudWxsOwogICAgICAg ICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIFR5cGVhaGVhZDsKICAg ICAgICBmdW5jdGlvbiBidWlsZERvbShpbnB1dCwgd2l0aEhpbnQpIHsKICAgICAg ICAgICAgdmFyICRpbnB1dCwgJHdyYXBwZXIsICRkcm9wZG93biwgJGhpbnQ7CiAg ICAgICAgICAgICRpbnB1dCA9ICQoaW5wdXQpOwogICAgICAgICAgICAkd3JhcHBl ciA9ICQoaHRtbC53cmFwcGVyKS5jc3MoY3NzLndyYXBwZXIpOwogICAgICAgICAg ICAkZHJvcGRvd24gPSAkKGh0bWwuZHJvcGRvd24pLmNzcyhjc3MuZHJvcGRvd24p OwogICAgICAgICAgICAkaGludCA9ICRpbnB1dC5jbG9uZSgpLmNzcyhjc3MuaGlu dCkuY3NzKGdldEJhY2tncm91bmRTdHlsZXMoJGlucHV0KSk7CiAgICAgICAgICAg ICRoaW50LnZhbCgiIikucmVtb3ZlRGF0YSgpLmFkZENsYXNzKCJ0dC1oaW50Iiku cmVtb3ZlQXR0cigiaWQgbmFtZSBwbGFjZWhvbGRlciByZXF1aXJlZCIpLnByb3Ao InJlYWRvbmx5IiwgdHJ1ZSkuYXR0cih7CiAgICAgICAgICAgICAgICBhdXRvY29t cGxldGU6ICJvZmYiLAogICAgICAgICAgICAgICAgc3BlbGxjaGVjazogImZhbHNl IiwKICAgICAgICAgICAgICAgIHRhYmluZGV4OiAtMQogICAgICAgICAgICB9KTsK ICAgICAgICAgICAgJGlucHV0LmRhdGEoYXR0cnNLZXksIHsKICAgICAgICAgICAg ICAgIGRpcjogJGlucHV0LmF0dHIoImRpciIpLAogICAgICAgICAgICAgICAgYXV0 b2NvbXBsZXRlOiAkaW5wdXQuYXR0cigiYXV0b2NvbXBsZXRlIiksCiAgICAgICAg ICAgICAgICBzcGVsbGNoZWNrOiAkaW5wdXQuYXR0cigic3BlbGxjaGVjayIpLAog ICAgICAgICAgICAgICAgc3R5bGU6ICRpbnB1dC5hdHRyKCJzdHlsZSIpCiAgICAg ICAgICAgIH0pOwogICAgICAgICAgICAkaW5wdXQuYWRkQ2xhc3MoInR0LWlucHV0 IikuYXR0cih7CiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU6ICJvZmYiLAog ICAgICAgICAgICAgICAgc3BlbGxjaGVjazogZmFsc2UKICAgICAgICAgICAgfSku Y3NzKHdpdGhIaW50ID8gY3NzLmlucHV0IDogY3NzLmlucHV0V2l0aE5vSGludCk7 CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAhJGlucHV0LmF0dHIo ImRpciIpICYmICRpbnB1dC5hdHRyKCJkaXIiLCAiYXV0byIpOwogICAgICAgICAg ICB9IGNhdGNoIChlKSB7fQogICAgICAgICAgICByZXR1cm4gJGlucHV0LndyYXAo JHdyYXBwZXIpLnBhcmVudCgpLnByZXBlbmQod2l0aEhpbnQgPyAkaGludCA6IG51 bGwpLmFwcGVuZCgkZHJvcGRvd24pOwogICAgICAgIH0KICAgICAgICBmdW5jdGlv biBnZXRCYWNrZ3JvdW5kU3R5bGVzKCRlbCkgewogICAgICAgICAgICByZXR1cm4g ewogICAgICAgICAgICAgICAgYmFja2dyb3VuZEF0dGFjaG1lbnQ6ICRlbC5jc3Mo ImJhY2tncm91bmQtYXR0YWNobWVudCIpLAogICAgICAgICAgICAgICAgYmFja2dy b3VuZENsaXA6ICRlbC5jc3MoImJhY2tncm91bmQtY2xpcCIpLAogICAgICAgICAg ICAgICAgYmFja2dyb3VuZENvbG9yOiAkZWwuY3NzKCJiYWNrZ3JvdW5kLWNvbG9y IiksCiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6ICRlbC5jc3MoImJh Y2tncm91bmQtaW1hZ2UiKSwKICAgICAgICAgICAgICAgIGJhY2tncm91bmRPcmln aW46ICRlbC5jc3MoImJhY2tncm91bmQtb3JpZ2luIiksCiAgICAgICAgICAgICAg ICBiYWNrZ3JvdW5kUG9zaXRpb246ICRlbC5jc3MoImJhY2tncm91bmQtcG9zaXRp b24iKSwKICAgICAgICAgICAgICAgIGJhY2tncm91bmRSZXBlYXQ6ICRlbC5jc3Mo ImJhY2tncm91bmQtcmVwZWF0IiksCiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5k U2l6ZTogJGVsLmNzcygiYmFja2dyb3VuZC1zaXplIikKICAgICAgICAgICAgfTsK ICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gZGVzdHJveURvbVN0cnVjdHVyZSgk bm9kZSkgewogICAgICAgICAgICB2YXIgJGlucHV0ID0gJG5vZGUuZmluZCgiLnR0 LWlucHV0Iik7CiAgICAgICAgICAgIF8uZWFjaCgkaW5wdXQuZGF0YShhdHRyc0tl eSksIGZ1bmN0aW9uKHZhbCwga2V5KSB7CiAgICAgICAgICAgICAgICBfLmlzVW5k ZWZpbmVkKHZhbCkgPyAkaW5wdXQucmVtb3ZlQXR0cihrZXkpIDogJGlucHV0LmF0 dHIoa2V5LCB2YWwpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgJGlucHV0 LmRldGFjaCgpLnJlbW92ZURhdGEoYXR0cnNLZXkpLnJlbW92ZUNsYXNzKCJ0dC1p bnB1dCIpLmluc2VydEFmdGVyKCRub2RlKTsKICAgICAgICAgICAgJG5vZGUucmVt b3ZlKCk7CiAgICAgICAgfQogICAgfSgpOwogICAgKGZ1bmN0aW9uKCkgewogICAg ICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgICB2YXIgb2xkLCB0eXBlYWhlYWRLZXks IG1ldGhvZHM7CiAgICAgICAgb2xkID0gJC5mbi50eXBlYWhlYWQ7CiAgICAgICAg dHlwZWFoZWFkS2V5ID0gInR0VHlwZWFoZWFkIjsKICAgICAgICBtZXRob2RzID0g ewogICAgICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbiBpbml0aWFsaXplKG8s IGRhdGFzZXRzKSB7CiAgICAgICAgICAgICAgICBkYXRhc2V0cyA9IF8uaXNBcnJh eShkYXRhc2V0cykgPyBkYXRhc2V0cyA6IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRz LCAxKTsKICAgICAgICAgICAgICAgIG8gPSBvIHx8IHt9OwogICAgICAgICAgICAg ICAgcmV0dXJuIHRoaXMuZWFjaChhdHRhY2gpOwogICAgICAgICAgICAgICAgZnVu Y3Rpb24gYXR0YWNoKCkgewogICAgICAgICAgICAgICAgICAgIHZhciAkaW5wdXQg PSAkKHRoaXMpLCBldmVudEJ1cywgdHlwZWFoZWFkOwogICAgICAgICAgICAgICAg ICAgIF8uZWFjaChkYXRhc2V0cywgZnVuY3Rpb24oZCkgewogICAgICAgICAgICAg ICAgICAgICAgICBkLmhpZ2hsaWdodCA9ICEhby5oaWdobGlnaHQ7CiAgICAgICAg ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgdHlwZWFoZWFkID0g bmV3IFR5cGVhaGVhZCh7CiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiAk aW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50QnVzOiBldmVudEJ1 cyA9IG5ldyBFdmVudEJ1cyh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBl bDogJGlucHV0CiAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAg ICAgICAgICAgICAgICB3aXRoSGludDogXy5pc1VuZGVmaW5lZChvLmhpbnQpID8g dHJ1ZSA6ICEhby5oaW50LAogICAgICAgICAgICAgICAgICAgICAgICBtaW5MZW5n dGg6IG8ubWluTGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICBhdXRvc2Vs ZWN0OiBvLmF1dG9zZWxlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFz ZXRzOiBkYXRhc2V0cwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg ICAgICAgICAgICRpbnB1dC5kYXRhKHR5cGVhaGVhZEtleSwgdHlwZWFoZWFkKTsK ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgb3Bl bjogZnVuY3Rpb24gb3BlbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlz LmVhY2gob3BlblR5cGVhaGVhZCk7CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBv cGVuVHlwZWFoZWFkKCkgewogICAgICAgICAgICAgICAgICAgIHZhciAkaW5wdXQg PSAkKHRoaXMpLCB0eXBlYWhlYWQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5 cGVhaGVhZCA9ICRpbnB1dC5kYXRhKHR5cGVhaGVhZEtleSkpIHsKICAgICAgICAg ICAgICAgICAgICAgICAgdHlwZWFoZWFkLm9wZW4oKTsKICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAg ICAgIGNsb3NlOiBmdW5jdGlvbiBjbG9zZSgpIHsKICAgICAgICAgICAgICAgIHJl dHVybiB0aGlzLmVhY2goY2xvc2VUeXBlYWhlYWQpOwogICAgICAgICAgICAgICAg ZnVuY3Rpb24gY2xvc2VUeXBlYWhlYWQoKSB7CiAgICAgICAgICAgICAgICAgICAg dmFyICRpbnB1dCA9ICQodGhpcyksIHR5cGVhaGVhZDsKICAgICAgICAgICAgICAg ICAgICBpZiAodHlwZWFoZWFkID0gJGlucHV0LmRhdGEodHlwZWFoZWFkS2V5KSkg ewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlYWhlYWQuY2xvc2UoKTsKICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg IH0sCiAgICAgICAgICAgIHZhbDogZnVuY3Rpb24gdmFsKG5ld1ZhbCkgewogICAg ICAgICAgICAgICAgcmV0dXJuICFhcmd1bWVudHMubGVuZ3RoID8gZ2V0VmFsKHRo aXMuZmlyc3QoKSkgOiB0aGlzLmVhY2goc2V0VmFsKTsKICAgICAgICAgICAgICAg IGZ1bmN0aW9uIHNldFZhbCgpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgJGlu cHV0ID0gJCh0aGlzKSwgdHlwZWFoZWFkOwogICAgICAgICAgICAgICAgICAgIGlm ICh0eXBlYWhlYWQgPSAkaW5wdXQuZGF0YSh0eXBlYWhlYWRLZXkpKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgIHR5cGVhaGVhZC5zZXRWYWwobmV3VmFsKTsKICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICBmdW5jdGlvbiBnZXRWYWwoJGlucHV0KSB7CiAgICAgICAgICAgICAgICAg ICAgdmFyIHR5cGVhaGVhZCwgcXVlcnk7CiAgICAgICAgICAgICAgICAgICAgaWYg KHR5cGVhaGVhZCA9ICRpbnB1dC5kYXRhKHR5cGVhaGVhZEtleSkpIHsKICAgICAg ICAgICAgICAgICAgICAgICAgcXVlcnkgPSB0eXBlYWhlYWQuZ2V0VmFsKCk7CiAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiBx dWVyeTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAg ICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHsKICAgICAgICAgICAgICAg IHJldHVybiB0aGlzLmVhY2godW5hdHRhY2gpOwogICAgICAgICAgICAgICAgZnVu Y3Rpb24gdW5hdHRhY2goKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyICRpbnB1 dCA9ICQodGhpcyksIHR5cGVhaGVhZDsKICAgICAgICAgICAgICAgICAgICBpZiAo dHlwZWFoZWFkID0gJGlucHV0LmRhdGEodHlwZWFoZWFkS2V5KSkgewogICAgICAg ICAgICAgICAgICAgICAgICB0eXBlYWhlYWQuZGVzdHJveSgpOwogICAgICAgICAg ICAgICAgICAgICAgICAkaW5wdXQucmVtb3ZlRGF0YSh0eXBlYWhlYWRLZXkpOwog ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgfQogICAgICAgIH07CiAgICAgICAgJC5mbi50eXBlYWhlYWQgPSBmdW5jdGlv bihtZXRob2QpIHsKICAgICAgICAgICAgdmFyIHR0czsKICAgICAgICAgICAgaWYg KG1ldGhvZHNbbWV0aG9kXSAmJiBtZXRob2QgIT09ICJpbml0aWFsaXplIikgewog ICAgICAgICAgICAgICAgdHRzID0gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKSB7CiAg ICAgICAgICAgICAgICAgICAgcmV0dXJuICEhJCh0aGlzKS5kYXRhKHR5cGVhaGVh ZEtleSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHJldHVy biBtZXRob2RzW21ldGhvZF0uYXBwbHkodHRzLCBbXS5zbGljZS5jYWxsKGFyZ3Vt ZW50cywgMSkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg cmV0dXJuIG1ldGhvZHMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMp OwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICAkLmZuLnR5cGVhaGVh ZC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gbm9Db25mbGljdCgpIHsKICAgICAgICAg ICAgJC5mbi50eXBlYWhlYWQgPSBvbGQ7CiAgICAgICAgICAgIHJldHVybiB0aGlz OwogICAgICAgIH07CiAgICB9KSgpOwp9KSh3aW5kb3cualF1ZXJ5KTs= ------------wlJHlK1FkFIr8aHsgcKgnd Content-Disposition: inline; filename=resultats.js Content-Type: application/x-javascript; name=resultats.js Content-Location: http://www.participa2014.cat/resultats/dades/js/resultats.js Content-Transfer-Encoding: Base64 DQoNCiBmdW5jdGlvbiB0b2dnbGVfdmlzaWJpbGl0eURpdihuYW1lVmlzLG5hbWVJ bnZpcykgew0KCXZhciBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobmFtZVZp cyk7DQoJdmFyIGUyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobmFtZUludmlz KTsNCg0KCWUuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnOw0KCWUyLnN0eWxlLmRp c3BsYXkgPSAnbm9uZSc7DQoJDQoJcmV0dXJuIHRydWU7DQp9DQoNCiBmdW5jdGlv biB0b2dnbGVfdmlzaWJpbGl0eU9iaihuYW1lVmlzKSB7DQoJdmFyIGUgPSBkb2N1 bWVudC5nZXRFbGVtZW50QnlJZChuYW1lVmlzKTsNCg0KCWUuc3R5bGUuZGlzcGxh eSA9ICdpbmxpbmUnOw0KDQoJcmV0dXJuIHRydWU7DQp9DQoNCiBmdW5jdGlvbiB0 b2dnbGVfbWVudShuYW1lTWVudSkgew0KCQl2YXIgZSA9IGRvY3VtZW50LmdldEVs ZW1lbnRCeUlkKG5hbWVNZW51KTsNCgkJaWYgKCdub25lJyAhPSBlLnN0eWxlLmRp c3BsYXkpIHsNCgkJCWUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCgkJfSBlbHNl IHsNCgkJCWUuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnOw0KCQl9DQoJCXJldHVy biBmYWxzZTsNCgl9DQoNCg0KZnVuY3Rpb24gY2FudmlDb21hcmNhKGNvZGlfY29t YXJjYSAsIHVsaWQpIHsNCglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh1bGlkKS5p bm5lckhUTUwgPSAiIjsNCgl2YXIgbXNnID0gIiI7DQoNCglmb3IgKHZhciBpID0g MDsgaSA8IGFycmF5TXVuaWNpcGlzLmxlbmd0aDsgaSsrKSB7DQoJCWlmIChhcnJh eU11bmljaXBpc1tpXVswXSA9PSBjb2RpX2NvbWFyY2EpIHsNCgkJCWFycmF5TXVu aWNpcGkgPSBhcnJheU11bmljaXBpc1tpXVsxXS5zcGxpdCgifCIpOw0KCQkJbXNn ICs9ICI8bGk+PGEgaHJlZj0nZXNjci1tdW4tIiArIGFycmF5TXVuaWNpcGlbMF0g KyAiLmh0bWwnPiIgKyBhcnJheU11bmljaXBpWzFdICsgIjwvYT48L2xpPiI7DQoJ CX0NCgl9DQoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodWxpZCkuaW5uZXJIVE1M ID0gbXNnOw0KCQ0KCXRvZ2dsZV92aXNpYmlsaXR5T2JqKHVsaWQpOw0KCQ0KCXJl dHVybiBmYWxzZTsNCn0NCiANCiB2YXIgYXJyYXlNdW5pY2lwaXMgPSBbWyIxIiwg IjQzMDAxfEFpZ3VhbSZ1YWN1dGU7cmNpYSJdLCBbIjEiLCAiNDMwMDV8QWxjb3Zl ciJdLCBbIjEiLCAiNDMwMTB8QWxpJm9hY3V0ZTsiXSwgWyIxIiwgIjQzMDM0fEJy JmFncmF2ZTtmaW0iXSwgWyIxIiwgIjQzMDM2fENhYnJhIGRlbCBDYW1wIl0sIFsi MSIsICI0MzA1OXxGaWd1ZXJvbGEgZGVsIENhbXAiXSwgWyIxIiwgIjQzMDY2fEdh cmlkZWxscyJdLCBbIjEiLCAiNDMwODB8TWFzJm9hY3V0ZTsiXSwgWyIxIiwgIjQz MDgzfE1pbCZhZ3JhdmU7Il0sIFsiMSIsICI0MzA4OXxNb250ZmVycmkiXSwgWyIx IiwgIjQzMDkxfE1vbnQtcmFsIl0sIFsiMSIsICI0MzA5OHxOdWxsZXMiXSwgWyIx IiwgIjQzMTA4fFBsYSBkZSBTYW50YSBNYXJpYSJdLCBbIjEiLCAiNDMxMTN8UG9u dCBkJ0FybWVudGVyYSJdLCBbIjEiLCAiNDMxMTl8UHVpZ3BlbGF0Il0sIFsiMSIs ICI0MzEyMHxRdWVyb2wiXSwgWyIxIiwgIjQzMTI0fFJpYmEiXSwgWyIxIiwgIjQz MTMyfFJvZG9ueSZhZ3JhdmU7Il0sIFsiMSIsICI0MzEzNHxSb3VyZWxsIl0sIFsi MSIsICI0MzE2MHxWYWxsbW9sbCJdLCBbIjEiLCAiNDMxNjF8VmFsbHMiXSwgWyIx IiwgIjQzMTY1fFZpbGFiZWxsYSJdLCBbIjEiLCAiNDMxNzB8VmlsYS1yb2RvbmEi XSwgWyIyIiwgIjE3MDAxfEFndWxsYW5hIl0sIFsiMiIsICIxNzAwM3xBbGJhbnkm YWdyYXZlOyJdLCBbIjIiLCAiMTcwMTF8QXJtZW50ZXJhIl0sIFsiMiIsICIxNzAx MnxBdmlueW9uZXQgZGUgUHVpZ3ZlbnQmb2FjdXRlO3MiXSwgWyIyIiwgIjE3MDE2 fEImYWdyYXZlO3NjYXJhIl0sIFsiMiIsICIxNzIzNHxCaXVyZSJdLCBbIjIiLCAi MTcwMjl8Qm9hZGVsbGEgaSBsZXMgRXNjYXVsZXMiXSwgWyIyIiwgIjE3MDI2fEJv cnJhc3MmYWdyYXZlOyJdLCBbIjIiLCAiMTcwMzF8Q2FiYW5lbGxlcyJdLCBbIjIi LCAiMTcwMzB8Q2FiYW5lcyJdLCBbIjIiLCAiMTcwMzJ8Q2FkYXF1JmVhY3V0ZTtz Il0sIFsiMiIsICIxNzA0MXxDYW50YWxsb3BzIl0sIFsiMiIsICIxNzA0MnxDYXBt YW55Il0sIFsiMiIsICIxNzA0N3xDYXN0ZWxsJm9hY3V0ZTsgZCdFbXAmdWFjdXRl O3JpZXMiXSwgWyIyIiwgIjE3MDUxfENpc3RlbGxhIl0sIFsiMiIsICIxNzA1NHxD b2xlcmEiXSwgWyIyIiwgIjE3MDYwfERhcm5pdXMiXSwgWyIyIiwgIjE3MDYyfEVz Y2FsYSJdLCBbIjIiLCAiMTcwNjR8RXNwb2xsYSJdLCBbIjIiLCAiMTcwMDV8RmFy IGQnRW1wb3JkJmFncmF2ZTsiXSwgWyIyIiwgIjE3MDY2fEZpZ3VlcmVzIl0sIFsi MiIsICIxNzA3NHxGb3J0aSZhZ3JhdmU7Il0sIFsiMiIsICIxNzA3NXxHYXJyaWcm YWdyYXZlO3MiXSwgWyIyIiwgIjE3MDc3fEdhcnJpZ3VlbGxhIl0sIFsiMiIsICIx NzA4NnxKb25xdWVyYSJdLCBbIjIiLCAiMTcwODh8TGxhZCZvYWN1dGU7Il0sIFsi MiIsICIxNzA5MnxMbGFuJmNjZWRpbDsmYWdyYXZlOyJdLCBbIjIiLCAiMTcwOTN8 TGxlcnMiXSwgWyIyIiwgIjE3MTAyfE1hJmNjZWRpbDthbmV0IGRlIENhYnJlbnlz Il0sIFsiMiIsICIxNzEwMHxNYXNhcmFjIl0sIFsiMiIsICIxNzEwNnxNb2xsZXQg ZGUgUGVyYWxhZGEiXSwgWyIyIiwgIjE3MTExfE5hdmF0YSJdLCBbIjIiLCAiMTcx MTV8T3JkaXMiXSwgWyIyIiwgIjE3MTE5fFBhbGF1IGRlIFNhbnRhIEV1bCZhZ3Jh dmU7bGlhIl0sIFsiMiIsICIxNzEyMHxQYWxhdS1zYXZlcmRlcmEiXSwgWyIyIiwg IjE3MTI4fFBhdSJdLCBbIjIiLCAiMTcxMjl8UGVkcmV0IGkgTWFyeiZhZ3JhdmU7 Il0sIFsiMiIsICIxNzEzMnxQZXJhbGFkYSJdLCBbIjIiLCAiMTcxMzV8UG9udCBk ZSBNb2xpbnMiXSwgWyIyIiwgIjE3MTM2fFBvbnQmb2FjdXRlO3MiXSwgWyIyIiwg IjE3MTQwfFBvcnQgZGUgbGEgU2VsdmEiXSwgWyIyIiwgIjE3MTM4fFBvcnRib3Ui XSwgWyIyIiwgIjE3MTQzfFJhYiZvYWN1dGU7cyJdLCBbIjIiLCAiMTcxNTF8Uml1 bW9ycyJdLCBbIjIiLCAiMTcxNTJ8Um9zZXMiXSwgWyIyIiwgIjE3MTU4fFNhbnQg Q2xpbWVudCBTZXNjZWJlcyJdLCBbIjIiLCAiMTcxNzF8U2FudCBMbG9yZW4mY2Nl ZGlsOyBkZSBsYSBNdWdhIl0sIFsiMiIsICIxNzE3NXxTYW50IE1pcXVlbCBkZSBG bHV2aSZhZ3JhdmU7Il0sIFsiMiIsICIxNzE3NnxTYW50IE1vcmkiXSwgWyIyIiwg IjE3MTc4fFNhbnQgUGVyZSBQZXNjYWRvciJdLCBbIjIiLCAiMTcxODJ8U2FudGEg TGxvZ2FpYSBkJyZhZ3JhdmU7bGd1ZW1hIl0sIFsiMiIsICIxNzE4N3xTYXVzLCBD YW1hbGxlcmEgaSBMbGFtcGFpZXMiXSwgWyIyIiwgIjE3MTg4fFNlbHZhIGRlIE1h ciJdLCBbIjIiLCAiMTcwNTJ8U2l1cmFuYSJdLCBbIjIiLCAiMTcxOTZ8VGVycmFk ZXMiXSwgWyIyIiwgIjE3MTk4fFRvcnJvZWxsYSBkZSBGbHV2aSZhZ3JhdmU7Il0s IFsiMiIsICIxNzAxNHxWYWpvbCJdLCBbIjIiLCAiMTcyMTB8VmVudGFsbCZvYWN1 dGU7Il0sIFsiMiIsICIxNzIxNHxWaWxhYmVydHJhbiJdLCBbIjIiLCAiMTcyMTd8 VmlsYWRhbWF0Il0sIFsiMiIsICIxNzIyMXxWaWxhZmFudCJdLCBbIjIiLCAiMTcy MjN8VmlsYWp1Jml1bWw7Z2EiXSwgWyIyIiwgIjE3MjI1fFZpbGFtYWNvbHVtIl0s IFsiMiIsICIxNzIyNnxWaWxhbWFsbGEiXSwgWyIyIiwgIjE3MjI3fFZpbGFtYW5p c2NsZSJdLCBbIjIiLCAiMTcyMjh8VmlsYW5hbnQiXSwgWyIyIiwgIjE3MjMwfFZp bGEtc2FjcmEiXSwgWyIyIiwgIjE3MjIyfFZpbGEmdXVtbDtyIl0sIFsiMyIsICIw ODAxM3xBdmlueW9uZXQgZGVsIFBlbmVkJmVncmF2ZTtzIl0sIFsiMyIsICIwODAy N3xDYWJhbnllcyJdLCBbIjMiLCAiMDgwNTh8Q2FzdGVsbGV0IGkgbGEgR29ybmFs Il0sIFsiMyIsICIwODA2NXxDYXN0ZWxsdiZpYWN1dGU7IGRlIGxhIE1hcmNhIl0s IFsiMyIsICIwODA4NXxGb250LXJ1YiZpYWN1dGU7Il0sIFsiMyIsICIwODA5MXxH ZWxpZGEiXSwgWyIzIiwgIjA4MDk0fEdyYW5hZGEiXSwgWyIzIiwgIjA4MTIyfE1l ZGlvbmEiXSwgWyIzIiwgIjA4MTQ1fE9sJmVncmF2ZTtyZG9sYSJdLCBbIjMiLCAi MDgxNDZ8T2xlc2EgZGUgQm9uZXN2YWxscyJdLCBbIjMiLCAiMDgxNTR8UGFjcyBk ZWwgUGVuZWQmZWdyYXZlO3MiXSwgWyIzIiwgIjA4MTY0fFBsYSBkZWwgUGVuZWQm ZWdyYXZlO3MiXSwgWyIzIiwgIjA4MTY4fFBvbnRvbnMiXSwgWyIzIiwgIjA4MTc0 fFB1aWdkJmFncmF2ZTtsYmVyIl0sIFsiMyIsICIwODIwNnxTYW50IEN1Z2F0IFNl c2dhcnJpZ3VlcyJdLCBbIjMiLCAiMDgyMjJ8U2FudCBMbG9yZW4mY2NlZGlsOyBk J0hvcnRvbnMiXSwgWyIzIiwgIjA4MjI3fFNhbnQgTWFydCZpYWN1dGU7IFNhcnJv Y2EiXSwgWyIzIiwgIjA4MjMyfFNhbnQgUGVyZSBkZSBSaXVkZWJpdGxsZXMiXSwg WyIzIiwgIjA4MjM2fFNhbnQgUXVpbnQmaWFjdXRlOyBkZSBNZWRpb25hIl0sIFsi MyIsICIwODI0MHxTYW50IFNhZHVybiZpYWN1dGU7IGQnQW5vaWEiXSwgWyIzIiwg IjA4MjQ5fFNhbnRhIEZlIGRlbCBQZW5lZCZlZ3JhdmU7cyJdLCBbIjMiLCAiMDgy NTF8U2FudGEgTWFyZ2FyaWRhIGkgZWxzIE1vbmpvcyJdLCBbIjMiLCAiMDgyNzN8 U3ViaXJhdHMiXSwgWyIzIiwgIjA4Mjg3fFRvcnJlbGF2aXQiXSwgWyIzIiwgIjA4 Mjg4fFRvcnJlbGxlcyBkZSBGb2l4Il0sIFsiMyIsICIwODMwNXxWaWxhZnJhbmNh IGRlbCBQZW5lZCZlZ3JhdmU7cyJdLCBbIjMiLCAiMDgzMDR8Vmlsb2ImaWFjdXRl OyBkZWwgUGVuZWQmZWdyYXZlO3MiXSwgWyI0IiwgIjI1MDA1fEFsJmFncmF2ZTtz IGkgQ2VyYyJdLCBbIjQiLCAiMjUwMzJ8QXJzJmVncmF2ZTtndWVsIl0sIFsiNCIs ICIyNTA0NHxCYXNzZWxsYSJdLCBbIjQiLCAiMjUwNjF8Q2FiJm9hY3V0ZTsiXSwg WyI0IiwgIjI1MDcxfENhdmEiXSwgWyI0IiwgIjI1MDc3fENvbGwgZGUgTmFyZyZv YWN1dGU7Il0sIFsiNCIsICIyNTA4OHxFc3RhbWFyaXUiXSwgWyI0IiwgIjI1OTA4 fEYmaWFjdXRlO2dvbHMgaSBBbGlueSZhZ3JhdmU7Il0sIFsiNCIsICIyNTkxMHxK b3NhIGkgVHVpeCZvYWN1dGU7biJdLCBbIjQiLCAiMjUxNDB8TW9udGZlcnJlciBp IENhc3RlbGxiJm9ncmF2ZTsiXSwgWyI0IiwgIjI1MTQ5fE9saWFuYSJdLCBbIjQi LCAiMjUxNTV8T3JnYW55JmFncmF2ZTsiXSwgWyI0IiwgIjI1MTY1fFBlcmFtb2xh Il0sIFsiNCIsICIyNTAzMHxQb250IGRlIEJhciJdLCBbIjQiLCAiMjUxODV8Umli ZXJhIGQnVXJnZWxsZXQiXSwgWyI0IiwgIjI1MjAzfFNldSBkJ1VyZ2VsbCJdLCBb IjQiLCAiMjU5MDZ8VmFsbHMgZCdBZ3VpbGFyIl0sIFsiNCIsICIyNTIzOXxWYWxs cyBkZSBWYWxpcmEiXSwgWyI0IiwgIjI1OTA5fFZhbnNhIGkgRiZvYWN1dGU7cm5v bHMiXSwgWyI1IiwgIjI1MTczfFBvbnQgZGUgU3VlcnQiXSwgWyI1IiwgIjI1MDQz fFZhbGwgZGUgQm8maWFjdXRlOyJdLCBbIjUiLCAiMjUyNDV8VmlsYWxsZXIiXSwg WyI2IiwgIjA4MDA4fEFyZ2VuJmNjZWRpbDtvbGEiXSwgWyI2IiwgIjA4MDIxfEJl bGxwcmF0Il0sIFsiNiIsICIwODAyNXxCcnVjIl0sIFsiNiIsICIwODAyOHxDYWJy ZXJhIGQnQW5vaWEiXSwgWyI2IiwgIjA4MDMxfENhbGFmIl0sIFsiNiIsICIwODAz NnxDYWxvbmdlIGRlIFNlZ2FycmEiXSwgWyI2IiwgIjA4MDQ0fENhcGVsbGFkZXMi XSwgWyI2IiwgIjA4MDQ4fENhcm1lIl0sIFsiNiIsICIwODA2MHxDYXN0ZWxsZm9s bGl0IGRlIFJpdWJyZWcmb2FjdXRlO3MiXSwgWyI2IiwgIjA4MDYzfENhc3RlbGxv bCZpYWN1dGU7Il0sIFsiNiIsICIwODA3MXxDb3BvbnMiXSwgWyI2IiwgIjA4MTYy fEhvc3RhbGV0cyBkZSBQaWVyb2xhIl0sIFsiNiIsICIwODEwMnxJZ3VhbGFkYSJd LCBbIjYiLCAiMDgxMDN8Sm9yYmEiXSwgWyI2IiwgIjA4MTA0fExsYWN1bmEiXSwg WyI2IiwgIjA4MTE5fE1hc3F1ZWZhIl0sIFsiNiIsICIwODEzM3xNb250bWFuZXUi XSwgWyI2IiwgIjA4MTQzfCZvZ3JhdmU7ZGVuYSJdLCBbIjYiLCAiMDgxNTJ8T3Jw JmlhY3V0ZTsiXSwgWyI2IiwgIjA4MTYxfFBpZXJhIl0sIFsiNiIsICIwODE2NXxQ b2JsYSBkZSBDbGFyYW11bnQiXSwgWyI2IiwgIjA4MTcwfFByYXRzIGRlIFJlaSJd LCBbIjYiLCAiMDgxNzZ8UHVqYWx0Il0sIFsiNiIsICIwODE4NXxSdWJpJm9hY3V0 ZTsiXSwgWyI2IiwgIjA4MjI2fFNhbnQgTWFydCZpYWN1dGU7IGRlIFRvdXMiXSwg WyI2IiwgIjA4MjI4fFNhbnQgTWFydCZpYWN1dGU7IFNlc2d1ZWlvbGVzIl0sIFsi NiIsICIwODE4OXxTYW50IFBlcmUgU2FsbGF2aW5lcmEiXSwgWyI2IiwgIjA4MjUw fFNhbnRhIE1hcmdhcmlkYSBkZSBNb250YnVpIl0sIFsiNiIsICIwODI1N3xTYW50 YSBNYXJpYSBkZSBNaXJhbGxlcyJdLCBbIjYiLCAiMDgyODZ8VG9ycmUgZGUgQ2xh cmFtdW50Il0sIFsiNiIsICIwODI5MnxWYWxsYm9uYSBkJ0Fub2lhIl0sIFsiNiIs ICIwODI5N3xWZWNpYW5hIl0sIFsiNiIsICIwODMwMnxWaWxhbm92YSBkZWwgQ2Ft JmlhY3V0ZTsiXSwgWyI3IiwgIjA4MDAyfEFndWlsYXIgZGUgU2VnYXJyYSJdLCBb IjciLCAiMDgwMTB8QXJ0Jm9hY3V0ZTtzIl0sIFsiNyIsICIwODAxMnxBdmlueSZv YWN1dGU7Il0sIFsiNyIsICIwODAxOHxCYWxzYXJlbnkiXSwgWyI3IiwgIjA4MDM0 fENhbGRlcnMiXSwgWyI3IiwgIjA4MDM4fENhbGwmdWFjdXRlO3MiXSwgWyI3Iiwg IjA4MDQ3fENhcmRvbmEiXSwgWyI3IiwgIjA4MDUzfENhc3RlbGxiZWxsIGkgZWwg VmlsYXIiXSwgWyI3IiwgIjA4MDU5fENhc3RlbGxmb2xsaXQgZGVsIEJvaXgiXSwg WyI3IiwgIjA4MDYxfENhc3RlbGxnYWwmaWFjdXRlOyJdLCBbIjciLCAiMDgwNjJ8 Q2FzdGVsbG5vdSBkZSBCYWdlcyJdLCBbIjciLCAiMDgwNzl8RXN0YW55Il0sIFsi NyIsICIwODA4NHxGb25vbGxvc2EiXSwgWyI3IiwgIjA4MDkwfEdhaSZhZ3JhdmU7 Il0sIFsiNyIsICIwODExM3xNYW5yZXNhIl0sIFsiNyIsICIwODI0MnxNYXJnYW5l bGwiXSwgWyI3IiwgIjA4MTM4fE1vaSZhZ3JhdmU7Il0sIFsiNyIsICIwODEyOHxN b25pc3Ryb2wgZGUgQ2FsZGVycyJdLCBbIjciLCAiMDgxMjd8TW9uaXN0cm9sIGRl IE1vbnRzZXJyYXQiXSwgWyI3IiwgIjA4MTM5fE11cmEiXSwgWyI3IiwgIjA4MTQw fE5hdmFyY2xlcyJdLCBbIjciLCAiMDgxNDF8TmF2JmFncmF2ZTtzIl0sIFsiNyIs ICIwODE4MnxQb250IGRlIFZpbG9tYXJhIGkgUm9jYWZvcnQiXSwgWyI3IiwgIjA4 MTc4fFJhamFkZWxsIl0sIFsiNyIsICIwODE5MXxTYWxsZW50Il0sIFsiNyIsICIw ODIxMnxTYW50IEZlbGl1IFNhc3NlcnJhIl0sIFsiNyIsICIwODIxM3xTYW50IEZy dWl0Jm9hY3V0ZTtzIGRlIEJhZ2VzIl0sIFsiNyIsICIwODIxOHxTYW50IEpvYW4g ZGUgVmlsYXRvcnJhZGEiXSwgWyI3IiwgIjA4MjI5fFNhbnQgTWF0ZXUgZGUgQmFn ZXMiXSwgWyI3IiwgIjA4MDk4fFNhbnQgU2FsdmFkb3IgZGUgR3VhcmRpb2xhIl0s IFsiNyIsICIwODI2MnxTYW50IFZpY2VuJmNjZWRpbDsgZGUgQ2FzdGVsbGV0Il0s IFsiNyIsICIwODI1OHxTYW50YSBNYXJpYSBkJ09sJm9hY3V0ZTsiXSwgWyI3Iiwg IjA4MTkyfFNhbnRwZWRvciJdLCBbIjciLCAiMDgyNzR8UyZ1YWN1dGU7cmlhIl0s IFsiNyIsICIwODI3N3xUYWxhbWFuY2EiXSwgWyI4IiwgIjQzMDAzfEFsYmlvbCJd LCBbIjgiLCAiNDMwMDd8QWxlaXhhciJdLCBbIjgiLCAiNDMwMDl8QWxmb3JqYSJd LCBbIjgiLCAiNDMwMTF8QWxtb3N0ZXIiXSwgWyI4IiwgIjQzMDE1fEFyYm9sJmlh Y3V0ZTsiXSwgWyI4IiwgIjQzMDE3fEFyZ2VudGVyYSJdLCBbIjgiLCAiNDMwMzF8 Qm9yZ2VzIGRlbCBDYW1wIl0sIFsiOCIsICI0MzAzM3xCb3RhcmVsbCJdLCBbIjgi LCAiNDMwMzh8Q2FtYnJpbHMiXSwgWyI4IiwgIjQzMDM5fENhcGFmb250cyJdLCBb IjgiLCAiNDMwNDJ8Q2FzdGVsbHZlbGwgZGVsIENhbXAiXSwgWyI4IiwgIjQzMDQ1 fENvbGxkZWpvdSJdLCBbIjgiLCAiNDMwNTN8RHVlc2FpZyZ1dW1sO2VzIl0sIFsi OCIsICI0MzA1N3xGZWJyJm9hY3V0ZTsiXSwgWyI4IiwgIjQzMDgxfE1hc3B1am9s cyJdLCBbIjgiLCAiNDMwODh8TW9udGJyaSZvYWN1dGU7IGRlbCBDYW1wIl0sIFsi OCIsICI0MzA5MnxNb250LXJvaWcgZGVsIENhbXAiXSwgWyI4IiwgIjQzMTE2fFBy YWRlcyJdLCBbIjgiLCAiNDMxMTh8UHJhdGRpcCJdLCBbIjgiLCAiNDMxMjN8UmV1 cyJdLCBbIjgiLCAiNDMxMjd8Uml1ZGVjYW55ZXMiXSwgWyI4IiwgIjQzMTI4fFJp dWRlY29scyJdLCBbIjgiLCAiNDMxMjl8Uml1ZG9tcyJdLCBbIjgiLCAiNDMxNDV8 U2VsdmEgZGVsIENhbXAiXSwgWyI4IiwgIjQzMTYyfFZhbmRlbGwmb2dyYXZlO3Mg aSBsJ0hvc3BpdGFsZXQgZGUgbCdJbmZhbnQiXSwgWyI4IiwgIjQzMTY3fFZpbGFu b3ZhIGQnRXNjb3JuYWxib3UiXSwgWyI4IiwgIjQzMTY5fFZpbGFwbGFuYSJdLCBb IjgiLCAiNDMxNzh8VmlueW9scyBpIGVscyBBcmNzIl0sIFsiOSIsICI0MzkwNHxB bGRlYSJdLCBbIjkiLCAiNDMwMDZ8QWxkb3ZlciJdLCBbIjkiLCAiNDMwMDh8QWxm YXJhIGRlIENhcmxlcyJdLCBbIjkiLCAiNDMwMTN8QW1ldGxsYSBkZSBNYXIiXSwg WyI5IiwgIjQzOTA2fEFtcG9sbGEiXSwgWyI5IiwgIjQzMDI1fEJlbmlmYWxsZXQi XSwgWyI5IiwgIjQzOTAzfENhbWFybGVzIl0sIFsiOSIsICI0MzkwMXxEZWx0ZWJy ZSJdLCBbIjkiLCAiNDMxMDJ8UGEmdXVtbDtscyJdLCBbIjkiLCAiNDMxMDR8UGVy ZWxsJm9hY3V0ZTsiXSwgWyI5IiwgIjQzMTMzfFJvcXVldGVzIl0sIFsiOSIsICI0 MzE0OXxUaXZlbnlzIl0sIFsiOSIsICI0MzE1NXxUb3J0b3NhIl0sIFsiOSIsICI0 MzA1MnxYZXJ0YSJdLCBbIjEwIiwgIjE3MDA0fEFsYm9ucyJdLCBbIjEwIiwgIjE3 MDEzfEJlZ3VyIl0sIFsiMTAiLCAiMTcwMTh8QmVsbGNhaXJlIGQnRW1wb3JkJmFn cmF2ZTsiXSwgWyIxMCIsICIxNzAyMnxCaXNiYWwgZCdFbXBvcmQmYWdyYXZlOyJd LCBbIjEwIiwgIjE3MDM0fENhbG9uZ2UiXSwgWyIxMCIsICIxNzA0OHxDYXN0ZWxs LVBsYXRqYSBkJ0FybyJdLCBbIjEwIiwgIjE3MDU1fENvbG9tZXJzIl0sIFsiMTAi LCAiMTcwNTd8Q29yJmNjZWRpbDsmYWdyYXZlOyJdLCBbIjEwIiwgIjE3OTAxfENy dSZpdW1sO2xsZXMsIE1vbmVsbHMgaSBTYW50IFNhZHVybiZpYWN1dGU7IGRlIGwn SGV1cmEiXSwgWyIxMCIsICIxNzA2OHxGb2l4JmFncmF2ZTsiXSwgWyIxMCIsICIx NzA3MHxGb250YW5pbGxlcyJdLCBbIjEwIiwgIjE3OTAyfEZvcmFsbGFjIl0sIFsi MTAiLCAiMTcwNzZ8R2Fycmlnb2xlcyJdLCBbIjEwIiwgIjE3MDgxfEd1YWx0YSJd LCBbIjEwIiwgIjE3MDg1fEphZnJlIl0sIFsiMTAiLCAiMTcxMTB8TW9udC1yYXMi XSwgWyIxMCIsICIxNzExN3xQYWxhZnJ1Z2VsbCJdLCBbIjEwIiwgIjE3MTE4fFBh bGFtJm9hY3V0ZTtzIl0sIFsiMTAiLCAiMTcxMjF8UGFsYXUtc2F0b3IiXSwgWyIx MCIsICIxNzEyNHxQYWxzIl0sIFsiMTAiLCAiMTcxMjZ8UGFybGF2JmFncmF2ZTsi XSwgWyIxMCIsICIxNzEzMHxQZXJhIl0sIFsiMTAiLCAiMTcxNDR8UmVnZW5jJm9h Y3V0ZTtzIl0sIFsiMTAiLCAiMTcxNTN8UnVwaSZhZ3JhdmU7Il0sIFsiMTAiLCAi MTcxNjB8U2FudCBGZWxpdSBkZSBHdSZpYWN1dGU7eG9scyJdLCBbIjEwIiwgIjE3 MTgxfFNhbnRhIENyaXN0aW5hIGQnQXJvIl0sIFsiMTAiLCAiMTcxOTF8U2VycmEg ZGUgRGFyJm9hY3V0ZTsiXSwgWyIxMCIsICIxNzE5NXxUYWxsYWRhIGQnRW1wb3Jk JmFncmF2ZTsiXSwgWyIxMCIsICIxNzE5N3xUb3JyZW50Il0sIFsiMTAiLCAiMTcx OTl8VG9ycm9lbGxhIGRlIE1vbnRnciZpYWN1dGU7Il0sIFsiMTAiLCAiMTcyMDR8 VWxsJmFncmF2ZTsiXSwgWyIxMCIsICIxNzIwNXxVbGxhc3RyZXQiXSwgWyIxMCIs ICIxNzIwM3xVbHRyYW1vcnQiXSwgWyIxMCIsICIxNzIwOXxWYWxsLWxsb2JyZWdh Il0sIFsiMTAiLCAiMTcyMTF8VmVyZ2VzIl0sIFsiMTAiLCAiMTcyMzJ8Vmlsb3By aXUiXSwgWyIxMSIsICIwODAwMXxBYnJlcmEiXSwgWyIxMSIsICIwODAyMHxCZWd1 ZXMiXSwgWyIxMSIsICIwODA1NnxDYXN0ZWxsZGVmZWxzIl0sIFsiMTEiLCAiMDgw NjZ8Q2FzdGVsbHYmaWFjdXRlOyBkZSBSb3NhbmVzIl0sIFsiMTEiLCAiMDgwNjh8 Q2VydmVsbCZvYWN1dGU7Il0sIFsiMTEiLCAiMDgwNjl8Q29sbGJhdCZvYWN1dGU7 Il0sIFsiMTEiLCAiMDgwNzJ8Q29yYmVyYSBkZSBMbG9icmVnYXQiXSwgWyIxMSIs ICIwODA3M3xDb3JuZWxsJmFncmF2ZTsgZGUgTGxvYnJlZ2F0Il0sIFsiMTEiLCAi MDgwNzZ8RXNwYXJyZWd1ZXJhIl0sIFsiMTEiLCAiMDgwNzd8RXNwbHVndWVzIGRl IExsb2JyZWdhdCJdLCBbIjExIiwgIjA4MDg5fEdhdiZhZ3JhdmU7Il0sIFsiMTEi LCAiMDgxMTR8TWFydG9yZWxsIl0sIFsiMTEiLCAiMDgxMjN8TW9saW5zIGRlIFJl aSJdLCBbIjExIiwgIjA4MTQ3fE9sZXNhIGRlIE1vbnRzZXJyYXQiXSwgWyIxMSIs ICIwODE1N3xQYWxsZWomYWdyYXZlOyJdLCBbIjExIiwgIjA4OTA1fFBhbG1hIGRl IENlcnZlbGwmb2FjdXRlOyJdLCBbIjExIiwgIjA4MTU4fFBhcGlvbCJdLCBbIjEx IiwgIjA4MTY5fFByYXQgZGUgTGxvYnJlZ2F0Il0sIFsiMTEiLCAiMDgxOTZ8U2Fu dCBBbmRyZXUgZGUgbGEgQmFyY2EiXSwgWyIxMSIsICIwODIwMHxTYW50IEJvaSBk ZSBMbG9icmVnYXQiXSwgWyIxMSIsICIwODIwNHxTYW50IENsaW1lbnQgZGUgTGxv YnJlZ2F0Il0sIFsiMTEiLCAiMDgyMDh8U2FudCBFc3RldmUgU2Vzcm92aXJlcyJd LCBbIjExIiwgIjA4MjExfFNhbnQgRmVsaXUgZGUgTGxvYnJlZ2F0Il0sIFsiMTEi LCAiMDgyMTd8U2FudCBKb2FuIERlc3AmaWFjdXRlOyJdLCBbIjExIiwgIjA4MjIx fFNhbnQgSnVzdCBEZXN2ZXJuIl0sIFsiMTEiLCAiMDgyNjN8U2FudCBWaWNlbiZj Y2VkaWw7IGRlbHMgSG9ydHMiXSwgWyIxMSIsICIwODI0NHxTYW50YSBDb2xvbWEg ZGUgQ2VydmVsbCZvYWN1dGU7Il0sIFsiMTEiLCAiMDgyODl8VG9ycmVsbGVzIGRl IExsb2JyZWdhdCJdLCBbIjExIiwgIjA4Mjk1fFZhbGxpcmFuYSJdLCBbIjExIiwg IjA4MzAxfFZpbGFkZWNhbnMiXSwgWyIxMiIsICI0MzAwMnxBbGJpbnlhbmEiXSwg WyIxMiIsICI0MzAxNnxBcmJvJmNjZWRpbDsiXSwgWyIxMiIsICI0MzAyMHxCYW55 ZXJlcyBkZWwgUGVuZWQmZWdyYXZlO3MiXSwgWyIxMiIsICI0MzAyNHxCZWxsdmVp Il0sIFsiMTIiLCAiNDMwMjh8QmlzYmFsIGRlbCBQZW5lZCZlZ3JhdmU7cyJdLCBb IjEyIiwgIjQzMDMwfEJvbmFzdHJlIl0sIFsiMTIiLCAiNDMwMzd8Q2FsYWZlbGwi XSwgWyIxMiIsICI0MzA1MXxDdW5pdCJdLCBbIjEyIiwgIjQzMDc0fExsb3JlbiZj Y2VkaWw7IGRlbCBQZW5lZCZlZ3JhdmU7cyJdLCBbIjEyIiwgIjQzMDc5fE1hc2xs b3JlbiZjY2VkaWw7Il0sIFsiMTIiLCAiNDMwOTB8TW9udG1lbGwiXSwgWyIxMiIs ICI0MzEzN3xTYW50IEphdW1lIGRlbHMgRG9tZW55cyJdLCBbIjEyIiwgIjQzMTQw fFNhbnRhIE9saXZhIl0sIFsiMTIiLCAiNDMxNjN8VmVuZHJlbGwiXSwgWyIxMyIs ICIwODAxNXxCYWRhbG9uYSJdLCBbIjEzIiwgIjA4MDE5fEJhcmNlbG9uYSJdLCBb IjEzIiwgIjA4MTAxfEhvc3BpdGFsZXQgZGUgTGxvYnJlZ2F0Il0sIFsiMTMiLCAi MDgxOTR8U2FudCBBZHJpJmFncmF2ZTsgZGUgQmVzJm9ncmF2ZTtzIl0sIFsiMTMi LCAiMDgyNDV8U2FudGEgQ29sb21hIGRlIEdyYW1lbmV0Il0sIFsiMTQiLCAiMDgw MTF8QXZpJmFncmF2ZTsiXSwgWyIxNCIsICIwODAxNnxCYWcmYWdyYXZlOyJdLCBb IjE0IiwgIjA4MDIyfEJlcmdhIl0sIFsiMTQiLCAiMDgwMjR8Qm9ycmVkJmFncmF2 ZTsiXSwgWyIxNCIsICIwODA0NXxDYXBvbGF0Il0sIFsiMTQiLCAiMDgwNDl8Q2Fz c2VycmVzIl0sIFsiMTQiLCAiMDgwNTd8Q2FzdGVsbCBkZSBsJ0FyZW55Il0sIFsi MTQiLCAiMDgwNTJ8Q2FzdGVsbGFyIGRlIG4nSHVnIl0sIFsiMTQiLCAiMDgwNTB8 Q2FzdGVsbGFyIGRlbCBSaXUiXSwgWyIxNCIsICIwODI2OHxDZXJjcyJdLCBbIjE0 IiwgIjA4MDc4fEVzcHVueW9sYSJdLCBbIjE0IiwgIjA4MDgwfEYmaWFjdXRlO2dv bHMiXSwgWyIxNCIsICIwODA5MnxHaXJvbmVsbGEiXSwgWyIxNCIsICIwODA5M3xH aXNjbGFyZW55Il0sIFsiMTQiLCAiMjUxMDB8RyZvYWN1dGU7c29sIl0sIFsiMTQi LCAiMDgwOTl8R3VhcmRpb2xhIGRlIEJlcmd1ZWQmYWdyYXZlOyJdLCBbIjE0Iiwg IjA4MTMwfE1vbnRjbGFyIl0sIFsiMTQiLCAiMDgxMzJ8TW9udG1ham9yIl0sIFsi MTQiLCAiMDgxNDJ8Tm91IGRlIEJlcmd1ZWQmYWdyYXZlOyJdLCBbIjE0IiwgIjA4 MTQ0fE9sdmFuIl0sIFsiMTQiLCAiMDgxNjZ8UG9ibGEgZGUgTGlsbGV0Il0sIFsi MTQiLCAiMDgxNzV8UHVpZy1yZWlnIl0sIFsiMTQiLCAiMDgxNzd8UXVhciJdLCBb IjE0IiwgIjA4MTg4fFNhZyZhZ3JhdmU7cyJdLCBbIjE0IiwgIjA4MTkwfFNhbGRl cyJdLCBbIjE0IiwgIjA4MjE2fFNhbnQgSmF1bWUgZGUgRnJvbnRhbnkmYWdyYXZl OyJdLCBbIjE0IiwgIjA4OTAzfFNhbnQgSnVsaSZhZ3JhdmU7IGRlIENlcmRhbnlv bGEiXSwgWyIxNCIsICIwODI1NXxTYW50YSBNYXJpYSBkZSBNZXJsJmVncmF2ZTtz Il0sIFsiMTQiLCAiMDgyOTN8VmFsbGNlYnJlIl0sIFsiMTQiLCAiMDgyOTl8Vmls YWRhIl0sIFsiMTQiLCAiMDgzMDh8Vml2ZXIgaSBTZXJyYXRlaXgiXSwgWyIxNSIs ICIxNzAwNnxBbHAiXSwgWyIxNSIsICIyNTA1MXxCZWxsdmVyIGRlIENlcmRhbnlh Il0sIFsiMTUiLCAiMTcwMjR8Qm9sdmlyIl0sIFsiMTUiLCAiMTcwNjF8RGFzIl0s IFsiMTUiLCAiMTcwNjl8Rm9udGFuYWxzIGRlIENlcmRhbnlhIl0sIFsiMTUiLCAi MTcwNzh8R2VyIl0sIFsiMTUiLCAiMTcwODJ8R3VpbHMgZGUgQ2VyZGFueWEiXSwg WyIxNSIsICIxNzA4NHxJcyZvZ3JhdmU7dm9sIl0sIFsiMTUiLCAiMjUxMjd8TGxl cyBkZSBDZXJkYW55YSJdLCBbIjE1IiwgIjE3MDk0fExsJmlhY3V0ZTt2aWEiXSwg WyIxNSIsICIxNzA5OXxNZXJhbmdlcyJdLCBbIjE1IiwgIjI1MTM5fE1vbnRlbGwm YWdyYXZlOyBpIE1hcnRpbmV0Il0sIFsiMTUiLCAiMjUxNzV8UHJhdHMgaSBTYW5z b3IiXSwgWyIxNSIsICIyNTE3OXxQcnVsbGFucyJdLCBbIjE1IiwgIjE3MTQxfFB1 aWdjZXJkJmFncmF2ZTsiXSwgWyIxNSIsICIyNTkxM3xSaXUgZGUgQ2VyZGFueWEi XSwgWyIxNSIsICIxNzIwNnxVciZ1YWN1dGU7cyJdLCBbIjE2IiwgIjQzMDIxfEJh cmJlciZhZ3JhdmU7IGRlIGxhIENvbmNhIl0sIFsiMTYiLCAiNDMwMjl8QmxhbmNh Zm9ydCJdLCBbIjE2IiwgIjQzMDQ2fENvbmVzYSJdLCBbIjE2IiwgIjQzMDU0fEVz cGx1Z2EgZGUgRnJhbmNvbCZpYWN1dGU7Il0sIFsiMTYiLCAiNDMwNjF8Rm9yJmVn cmF2ZTtzIl0sIFsiMTYiLCAiNDMwNzN8TGxvcmFjIl0sIFsiMTYiLCAiNDMwODZ8 TW9udGJsYW5jIl0sIFsiMTYiLCAiNDMxMDF8UGFzc2FuYW50IGkgQmVsbHRhbGwi XSwgWyIxNiIsICI0MzEwNXxQaWxlcyJdLCBbIjE2IiwgIjQzMTA3fFBpcmEiXSwg WyIxNiIsICI0MzE0MXxQb250aWxzIl0sIFsiMTYiLCAiNDMxMzB8Um9jYWZvcnQg ZGUgUXVlcmFsdCJdLCBbIjE2IiwgIjQzMTM5fFNhbnRhIENvbG9tYSBkZSBRdWVy YWx0Il0sIFsiMTYiLCAiNDMxNDJ8U2FycmFsIl0sIFsiMTYiLCAiNDMxNDN8U2F2 YWxsJmFncmF2ZTsgZGVsIENvbXRhdCJdLCBbIjE2IiwgIjQzMTQ2fFNlbmFuIl0s IFsiMTYiLCAiNDMxNDd8U29saXZlbGxhIl0sIFsiMTYiLCAiNDMxNTh8VmFsbGNs YXJhIl0sIFsiMTYiLCAiNDMxNTl8VmFsbGZvZ29uYSBkZSBSaXVjb3JiIl0sIFsi MTYiLCAiNDMxNjh8VmlsYW5vdmEgZGUgUHJhZGVzIl0sIFsiMTYiLCAiNDMxNzJ8 VmlsYXZlcmQiXSwgWyIxNiIsICI0MzE3NnxWaW1ib2QmaWFjdXRlOyBpIFBvYmxl dCJdLCBbIjE3IiwgIjA4MDQzfENhbnllbGxlcyJdLCBbIjE3IiwgIjA4MDc0fEN1 YmVsbGVzIl0sIFsiMTciLCAiMDgxNDh8T2xpdmVsbGEiXSwgWyIxNyIsICIwODIz MXxTYW50IFBlcmUgZGUgUmliZXMiXSwgWyIxNyIsICIwODI3MHxTaXRnZXMiXSwg WyIxNyIsICIwODMwN3xWaWxhbm92YSBpIGxhIEdlbHRyJnVhY3V0ZTsiXSwgWyIx OCIsICIyNTAwNnxBbGJhZyZvYWN1dGU7cyJdLCBbIjE4IiwgIjI1MDA5fEFsYmki XSwgWyIxOCIsICIyNTAyOXxBcmJlY2EiXSwgWyIxOCIsICIyNTE3MHxCZWxsYWd1 YXJkYSJdLCBbIjE4IiwgIjI1MDU4fEJvcmdlcyBCbGFucXVlcyJdLCBbIjE4Iiwg IjI1MDU2fEJvdmVyYSJdLCBbIjE4IiwgIjI1MDY3fENhc3RlbGxkYW5zIl0sIFsi MTgiLCAiMjUwNzN8Q2VydmkmYWdyYXZlOyBkZSBsZXMgR2FycmlndWVzIl0sIFsi MTgiLCAiMjUwNzZ8Q29ndWwiXSwgWyIxOCIsICIyNTA4MXxFc3BsdWdhIENhbGJh Il0sIFsiMTgiLCAiMjUwOTJ8RmxvcmVzdGEiXSwgWyIxOCIsICIyNTA5N3xGdWxs ZWRhIl0sIFsiMTgiLCAiMjUxMDF8R3JhbmFkZWxsYSJdLCBbIjE4IiwgIjI1MTA1 fEdyYW55ZW5hIGRlIGxlcyBHYXJyaWd1ZXMiXSwgWyIxOCIsICIyNTExOHxKdW5j b3NhIl0sIFsiMTgiLCAiMjUxMTl8SnVuZWRhIl0sIFsiMTgiLCAiMjUxNTN8T21l bGxvbnMiXSwgWyIxOCIsICIyNTE2OXxQb2JsYSBkZSBDJm9hY3V0ZTtydm9sZXMi XSwgWyIxOCIsICIyNTE4MHxQdWlnZ3Imb2dyYXZlO3MiXSwgWyIxOCIsICIyNTIw NnxTb2xlciZhZ3JhdmU7cyJdLCBbIjE4IiwgIjI1MjE4fFRhcnImb2FjdXRlO3Mi XSwgWyIxOCIsICIyNTIyNHxUb3JtcyJdLCBbIjE4IiwgIjI1MjUzfFZpbG9zZWxs Il0sIFsiMTgiLCAiMjUyNTV8VmluYWl4YSJdLCBbIjE5IiwgIjE3MDEwfEFyZ2Vs YWd1ZXIiXSwgWyIxOSIsICIxNzAxOXxCZXNhbCZ1YWN1dGU7Il0sIFsiMTkiLCAi MTcwMjF8QmV1ZGEiXSwgWyIxOSIsICIxNzA0NnxDYXN0ZWxsZm9sbGl0IGRlIGxh IFJvY2EiXSwgWyIxOSIsICIxNzA5OHxNYWkmYWdyYXZlOyBkZSBNb250Y2FsIl0s IFsiMTkiLCAiMTcxMDV8TWllcmVzIl0sIFsiMTkiLCAiMTcxMDl8TW9udGFndXQg aSBPaXgiXSwgWyIxOSIsICIxNzExNHxPbG90Il0sIFsiMTkiLCAiMTcxMzN8UGxh bmVzIGQnSG9zdG9sZXMiXSwgWyIxOSIsICIxNzEzOXxQcmVzZXMiXSwgWyIxOSIs ICIxNzE0OXxSaXVkYXVyYSJdLCBbIjE5IiwgIjE3MTU0fFNhbGVzIGRlIExsaWVy Y2EiXSwgWyIxOSIsICIxNzE4M3xTYW50IEFuaW9sIGRlIEZpbmVzdHJlcyJdLCBb IjE5IiwgIjE3MTYxfFNhbnQgRmVsaXUgZGUgUGFsbGVyb2xzIl0sIFsiMTkiLCAi MTcxNjJ8U2FudCBGZXJyaW9sIl0sIFsiMTkiLCAiMTcxNjV8U2FudCBKYXVtZSBk ZSBMbGllcmNhIl0sIFsiMTkiLCAiMTcxODV8U2FudCBKb2FuIGxlcyBGb250cyJd LCBbIjE5IiwgIjE3MTg0fFNhbnRhIFBhdSJdLCBbIjE5IiwgIjE3MjAwfFRvcnRl bGwmYWdyYXZlOyJdLCBbIjE5IiwgIjE3MjA4fFZhbGwgZGUgQmlhbnlhIl0sIFsi MTkiLCAiMTcyMDd8VmFsbCBkJ2VuIEJhcyJdLCBbIjIwIiwgIjE3MDAyfEFpZ3Vh dml2YSJdLCBbIjIwIiwgIjE3MDIwfEJlc2NhbiZvYWN1dGU7Il0sIFsiMjAiLCAi MTcwMjV8Qm9yZGlscyJdLCBbIjIwIiwgIjE3MDM4fENhbXBsbG9uZyJdLCBbIjIw IiwgIjE3MDQwfENhbmV0IGQnQWRyaSJdLCBbIjIwIiwgIjE3MDQ0fENhc3MmYWdy YXZlOyBkZSBsYSBTZWx2YSJdLCBbIjIwIiwgIjE3MDQ5fENlbHImYWdyYXZlOyJd LCBbIjIwIiwgIjE3MDUwfENlcnZpJmFncmF2ZTsgZGUgVGVyIl0sIFsiMjAiLCAi MTcwNjd8RmxhJmNjZWRpbDsmYWdyYXZlOyJdLCBbIjIwIiwgIjE3MDczfEZvcm5l bGxzIGRlIGxhIFNlbHZhIl0sIFsiMjAiLCAiMTcwNzl8R2lyb25hIl0sIFsiMjAi LCAiMTcwODd8SnVpJmFncmF2ZTsiXSwgWyIyMCIsICIxNzA4OXxMbGFnb3N0ZXJh Il0sIFsiMjAiLCAiMTcwOTB8TGxhbWJpbGxlcyJdLCBbIjIwIiwgIjE3MDk3fE1h ZHJlbWFueWEiXSwgWyIyMCIsICIxNzE0MnxRdWFydCJdLCBbIjIwIiwgIjE3MTU1 fFNhbHQiXSwgWyIyMCIsICIxNzE1N3xTYW50IEFuZHJldSBTYWxvdSJdLCBbIjIw IiwgIjE3MTYzfFNhbnQgR3JlZ29yaSJdLCBbIjIwIiwgIjE3MTY4fFNhbnQgSm9h biBkZSBNb2xsZXQiXSwgWyIyMCIsICIxNzE2NnxTYW50IEpvcmRpIERlc3ZhbGxz Il0sIFsiMjAiLCAiMTcxNjl8U2FudCBKdWxpJmFncmF2ZTsgZGUgUmFtaXMiXSwg WyIyMCIsICIxNzE3MnxTYW50IE1hcnQmaWFjdXRlOyBkZSBMbCZvYWN1dGU7bWVu YSJdLCBbIjIwIiwgIjE3MTczfFNhbnQgTWFydCZpYWN1dGU7IFZlbGwiXSwgWyIy MCIsICIxNzE4NnxTYXJyaSZhZ3JhdmU7IGRlIFRlciJdLCBbIjIwIiwgIjE3MjE1 fFZpbGFibGFyZWl4Il0sIFsiMjAiLCAiMTcyMTZ8VmlsYWRhc2VucyJdLCBbIjIx IiwgIjA4MDAzfEFsZWxsYSJdLCBbIjIxIiwgIjA4MDA2fEFyZW55cyBkZSBNYXIi XSwgWyIyMSIsICIwODAwN3xBcmVueXMgZGUgTXVudCJdLCBbIjIxIiwgIjA4MDA5 fEFyZ2VudG9uYSJdLCBbIjIxIiwgIjA4MDI5fENhYnJlcmEgZGUgTWFyIl0sIFsi MjEiLCAiMDgwMzB8Q2FicmlscyJdLCBbIjIxIiwgIjA4MDMyfENhbGRlcyBkJ0Vz dHJhYyJdLCBbIjIxIiwgIjA4MDM1fENhbGVsbGEiXSwgWyIyMSIsICIwODA0MHxD YW5ldCBkZSBNYXIiXSwgWyIyMSIsICIwODA3NXxEb3NyaXVzIl0sIFsiMjEiLCAi MDgxMTB8TWFsZ3JhdCBkZSBNYXIiXSwgWyIyMSIsICIwODExOHxNYXNub3UiXSwg WyIyMSIsICIwODEyMXxNYXRhciZvYWN1dGU7Il0sIFsiMjEiLCAiMDgxMjZ8TW9u dGdhdCJdLCBbIjIxIiwgIjA4MTUzfCZvZ3JhdmU7cnJpdXMiXSwgWyIyMSIsICIw ODE1NXxQYWxhZm9sbHMiXSwgWyIyMSIsICIwODE2M3xQaW5lZGEgZGUgTWFyIl0s IFsiMjEiLCAiMDgyMzB8UHJlbWkmYWdyYXZlOyBkZSBEYWx0Il0sIFsiMjEiLCAi MDgxNzJ8UHJlbWkmYWdyYXZlOyBkZSBNYXIiXSwgWyIyMSIsICIwODE5N3xTYW50 IEFuZHJldSBkZSBMbGF2YW5lcmVzIl0sIFsiMjEiLCAiMDgyMDN8U2FudCBDZWJy aSZhZ3JhdmU7IGRlIFZhbGxhbHRhIl0sIFsiMjEiLCAiMDgxOTN8U2FudCBJc2Ns ZSBkZSBWYWxsYWx0YSJdLCBbIjIxIiwgIjA4MjM1fFNhbnQgUG9sIGRlIE1hciJd LCBbIjIxIiwgIjA4MjY0fFNhbnQgVmljZW4mY2NlZGlsOyBkZSBNb250YWx0Il0s IFsiMjEiLCAiMDgyNjF8U2FudGEgU3VzYW5uYSJdLCBbIjIxIiwgIjA4MjgxfFRl aSZhZ3JhdmU7Il0sIFsiMjEiLCAiMDgyODJ8VGlhbmEiXSwgWyIyMSIsICIwODI4 NHxUb3JkZXJhIl0sIFsiMjEiLCAiMDgyMTR8VmlsYXNzYXIgZGUgRGFsdCJdLCBb IjIxIiwgIjA4MjE5fFZpbGFzc2FyIGRlIE1hciJdLCBbIjIyIiwgIjQzMDA0fEFs Y2FuYXIiXSwgWyIyMiIsICI0MzAxNHxBbXBvc3RhIl0sIFsiMjIiLCAiNDMwNjJ8 RnJlZ2luYWxzIl0sIFsiMjIiLCAiNDMwNjN8R2FsZXJhIl0sIFsiMjIiLCAiNDMw Njh8R29kYWxsIl0sIFsiMjIiLCAiNDMwNzd8TWFzIGRlIEJhcmJlcmFucyJdLCBb IjIyIiwgIjQzMDc4fE1hc2RlbnZlcmdlIl0sIFsiMjIiLCAiNDMxMzZ8U2FudCBD YXJsZXMgZGUgbGEgUiZhZ3JhdmU7cGl0YSJdLCBbIjIyIiwgIjQzOTAyfFNhbnQg SmF1bWUgZCdFbnZlamEiXSwgWyIyMiIsICI0MzEzOHxTYW50YSBCJmFncmF2ZTty YmFyYSJdLCBbIjIyIiwgIjQzMDQ0fFMmb2FjdXRlO25pYSJdLCBbIjIyIiwgIjQz MTU2fFVsbGRlY29uYSJdLCBbIjIzIiwgIjI1MDAyfCZBZ3JhdmU7Z2VyIl0sIFsi MjMiLCAiMjUwMDh8QWxiZXNhIl0sIFsiMjMiLCAiMjUwMTV8QWxnZXJyaSJdLCBb IjIzIiwgIjI1MDIyfEFsJm9ncmF2ZTtzIGRlIEJhbGFndWVyIl0sIFsiMjMiLCAi MjUwMzR8QXJ0ZXNhIGRlIFNlZ3JlIl0sIFsiMjMiLCAiMjUwMzd8QXZlbGxhbmVz IGkgU2FudGEgTGlueWEiXSwgWyIyMyIsICIyNTA0MHxCYWxhZ3VlciJdLCBbIjIz IiwgIjI1MDQyfEJhcm9uaWEgZGUgUmlhbGIiXSwgWyIyMyIsICIyNTA0N3xCZWxs Y2FpcmUgZCdVcmdlbGwiXSwgWyIyMyIsICIyNTA0OXxCZWxsbXVudCBkJ1VyZ2Vs bCJdLCBbIjIzIiwgIjI1MDYwfENhYmFuYWJvbmEiXSwgWyIyMyIsICIyNTA2MnxD YW1hcmFzYSJdLCBbIjIzIiwgIjI1MDY5fENhc3RlbGwmb2FjdXRlOyBkZSBGYXJm YW55YSJdLCBbIjIzIiwgIjI1MDc5fEN1YmVsbHMiXSwgWyIyMyIsICIyNTA5NHxG b3JhZGFkYSJdLCBbIjIzIiwgIjI1MTEyfEl2YXJzIGRlIE5vZ3VlcmEiXSwgWyIy MyIsICIyNTEzNHxNZW4mYWdyYXZlO3JndWVucyJdLCBbIjIzIiwgIjI1MTM4fE1v bnRnYWkiXSwgWyIyMyIsICIyNTE1MHxPbGlvbGEiXSwgWyIyMyIsICIyNTE1NnxP cyBkZSBCYWxhZ3VlciJdLCBbIjIzIiwgIjI1MTY0fFBlbmVsbGVzIl0sIFsiMjMi LCAiMjUxNzJ8UG9udHMiXSwgWyIyMyIsICIyNTE3N3xQcmVpeGVucyJdLCBbIjIz IiwgIjI1MDM1fFNlbnRpdSBkZSBTaSZvYWN1dGU7Il0sIFsiMjMiLCAiMjUyMjB8 VCZvYWN1dGU7cm1lbnMiXSwgWyIyMyIsICIyNTIyMnxUaXVyYW5hIl0sIFsiMjMi LCAiMjUyMzF8VG9ycmVsYW1ldSJdLCBbIjIzIiwgIjI1MjQwfFZhbGxmb2dvbmEg ZGUgQmFsYWd1ZXIiXSwgWyIyMyIsICIyNTI0OXxWaWxhbm92YSBkZSBsJ0FndWRh Il0sIFsiMjMiLCAiMjUyNTB8VmlsYW5vdmEgZGUgTWVpJmFncmF2ZTsiXSwgWyIy NCIsICIwODAwNHxBbHBlbnMiXSwgWyIyNCIsICIwODAxN3xCYWxlbnkmYWdyYXZl OyJdLCBbIjI0IiwgIjA4MDI2fEJydWxsIl0sIFsiMjQiLCAiMDgwMzd8Q2FsbGRl dGVuZXMiXSwgWyIyNCIsICIwODA2N3xDZW50ZWxsZXMiXSwgWyIyNCIsICIwODA3 MHxDb2xsc3VzcGluYSJdLCBbIjI0IiwgIjE3MDYzfEVzcGluZWx2ZXMiXSwgWyIy NCIsICIwODI1NHxFc3F1aXJvbCJdLCBbIjI0IiwgIjA4MDgzfEZvbGd1ZXJvbGVz Il0sIFsiMjQiLCAiMDgxMDB8R3VyYiJdLCBbIjI0IiwgIjA4MTA5fExsdSZjY2Vk aWw7JmFncmF2ZTsiXSwgWyIyNCIsICIwODExMXxNYWxsYSJdLCBbIjI0IiwgIjA4 MTEyfE1hbmxsZXUiXSwgWyIyNCIsICIwODExNnxNYXNpZXMgZGUgUm9kYSJdLCBb IjI0IiwgIjA4MTE3fE1hc2llcyBkZSBWb2x0cmVnJmFncmF2ZTsiXSwgWyIyNCIs ICIwODEzMXxNb250ZXNxdWl1Il0sIFsiMjQiLCAiMDgxMjl8TXVudGFueW9sYSJd LCBbIjI0IiwgIjA4MTQ5fE9sb3N0Il0sIFsiMjQiLCAiMDgxNTB8T3ImaWFjdXRl O3MiXSwgWyIyNCIsICIwODE1MXxPcmlzdCZhZ3JhdmU7Il0sIFsiMjQiLCAiMDgx NjB8UGVyYWZpdGEiXSwgWyIyNCIsICIwODE3MXxQcmF0cyBkZSBMbHUmY2NlZGls O2FuJmVncmF2ZTtzIl0sIFsiMjQiLCAiMDgxODN8Um9kYSBkZSBUZXIiXSwgWyIy NCIsICIwODkwMXxSdXBpdCBpIFBydWl0Il0sIFsiMjQiLCAiMDgxOTV8U2FudCBB Z3VzdCZpYWN1dGU7IGRlIExsdSZjY2VkaWw7YW4mZWdyYXZlO3MiXSwgWyIyNCIs ICIwODE5OXxTYW50IEJhcnRvbWV1IGRlbCBHcmF1Il0sIFsiMjQiLCAiMDgyMDF8 U2FudCBCb2kgZGUgTGx1JmNjZWRpbDthbiZlZ3JhdmU7cyJdLCBbIjI0IiwgIjA4 MjE1fFNhbnQgSGlwJm9ncmF2ZTtsaXQgZGUgVm9sdHJlZyZhZ3JhdmU7Il0sIFsi MjQiLCAiMDgyMjB8U2FudCBKdWxpJmFncmF2ZTsgZGUgVmlsYXRvcnRhIl0sIFsi MjQiLCAiMDgyMjV8U2FudCBNYXJ0JmlhY3V0ZTsgZCdBbGJhcnMiXSwgWyIyNCIs ICIwODIyNHxTYW50IE1hcnQmaWFjdXRlOyBkZSBDZW50ZWxsZXMiXSwgWyIyNCIs ICIwODIzM3xTYW50IFBlcmUgZGUgVG9yZWxsJm9hY3V0ZTsiXSwgWyIyNCIsICIw ODIzN3xTYW50IFF1aXJ6ZSBkZSBCZXNvcmEiXSwgWyIyNCIsICIwODI0MXxTYW50 IFNhZHVybiZpYWN1dGU7IGQnT3Nvcm1vcnQiXSwgWyIyNCIsICIwODI2NXxTYW50 IFZpY2VuJmNjZWRpbDsgZGUgVG9yZWxsJm9hY3V0ZTsiXSwgWyIyNCIsICIwODI0 M3xTYW50YSBDZWMmaWFjdXRlO2xpYSBkZSBWb2x0cmVnJmFncmF2ZTsiXSwgWyIy NCIsICIwODI0NnxTYW50YSBFdWcmZWdyYXZlO25pYSBkZSBCZXJnYSJdLCBbIjI0 IiwgIjA4MjQ3fFNhbnRhIEV1bCZhZ3JhdmU7bGlhIGRlIFJpdXByaW1lciJdLCBb IjI0IiwgIjA4MjUzfFNhbnRhIE1hcmlhIGRlIEJlc29yYSJdLCBbIjI0IiwgIjA4 MjY5fFNldmEiXSwgWyIyNCIsICIwODI3MXxTb2JyZW11bnQiXSwgWyIyNCIsICIw ODI3MnxTb3JhIl0sIFsiMjQiLCAiMDgyNzh8VGFyYWRlbGwiXSwgWyIyNCIsICIw ODI3NXxUYXYmZWdyYXZlO3Jub2xlcyJdLCBbIjI0IiwgIjA4MjgwfFRhdmVydGV0 Il0sIFsiMjQiLCAiMDgyODN8VG9uYSJdLCBbIjI0IiwgIjA4Mjg1fFRvcmVsbCZv YWN1dGU7Il0sIFsiMjQiLCAiMDgyOTh8VmljIl0sIFsiMjQiLCAiMTcyMTJ8Vmlk ciZhZ3JhdmU7Il0sIFsiMjQiLCAiMTcyMjB8VmlsYWRyYXUiXSwgWyIyNCIsICIw ODMwM3xWaWxhbm92YSBkZSBTYXUiXSwgWyIyNSIsICIyNTAwMXxBYmVsbGEgZGUg bGEgQ29uY2EiXSwgWyIyNSIsICIyNTkwNHxDYXN0ZWxsIGRlIE11ciJdLCBbIjI1 IiwgIjI1MTYxfENvbmNhIGRlIERhbHQiXSwgWyIyNSIsICIyNTA5OHxHYXZldCBk ZSBsYSBDb25jYSJdLCBbIjI1IiwgIjI1MTE1fElzb25hIGkgQ29uY2EgRGVsbCZh Z3JhdmU7Il0sIFsiMjUiLCAiMjUxMjh8TGxpbWlhbmEiXSwgWyIyNSIsICIyNTE3 MXxQb2JsYSBkZSBTZWd1ciJdLCBbIjI1IiwgIjI1MTkwfFNhbCZhZ3JhdmU7cyBk ZSBQYWxsYXJzIl0sIFsiMjUiLCAiMjUxOTZ8U2FudCBFc3RldmUgZGUgbGEgU2Fy Z2EiXSwgWyIyNSIsICIyNTIwMXxTYXJyb2NhIGRlIEJlbGxlcmEiXSwgWyIyNSIs ICIyNTIwMnxTZW50ZXJhZGEiXSwgWyIyNSIsICIyNTIxNXxUYWxhcm4iXSwgWyIy NSIsICIyNTIyN3xUb3JyZSBkZSBDYWJkZWxsYSJdLCBbIjI1IiwgIjI1MjM0fFRy ZW1wIl0sIFsiMjYiLCAiMjUwMTd8QWxpbnMiXSwgWyIyNiIsICIyNTAyNHxBbHQg JmFncmF2ZTtuZXUiXSwgWyIyNiIsICIyNTAzOXxCYWl4IFBhbGxhcnMiXSwgWyIy NiIsICIyNTA4MnxFc3BvdCJdLCBbIjI2IiwgIjI1MDg2fEVzdGVycmkgZCcmYWdy YXZlO25ldSJdLCBbIjI2IiwgIjI1MDg3fEVzdGVycmkgZGUgQ2FyZCZvYWN1dGU7 cyJdLCBbIjI2IiwgIjI1MDg5fEZhcnJlcmEiXSwgWyIyNiIsICIyNTkwM3xHdWlu Z3VldGEgZCcmYWdyYXZlO25ldSJdLCBbIjI2IiwgIjI1MTIzfExsYWRvcnJlIl0s IFsiMjYiLCAiMjUxMjZ8TGxhdm9ycyZpYWN1dGU7Il0sIFsiMjYiLCAiMjUxODN8 UmlhbHAiXSwgWyIyNiIsICIyNTIwOHxTb3JpZ3VlcmEiXSwgWyIyNiIsICIyNTIw OXxTb3J0Il0sIFsiMjYiLCAiMjUyMjF8VCZpYWN1dGU7cnZpYSJdLCBbIjI2Iiwg IjI1OTAxfFZhbGwgZGUgQ2FyZCZvYWN1dGU7cyJdLCBbIjI3IiwgIjI1MDQxfEJh cmJlbnMiXSwgWyIyNyIsICIyNTA0OHxCZWxsLWxsb2MgZCdVcmdlbGwiXSwgWyIy NyIsICIyNTA1MnxCZWxsdiZpYWN1dGU7cyJdLCBbIjI3IiwgIjI1MDY4fENhc3Rl bGxub3UgZGUgU2VhbmEiXSwgWyIyNyIsICIyNTA5M3xGb25kYXJlbGxhIl0sIFsi MjciLCAiMjUwOTl8R29sbSZvYWN1dGU7cyJdLCBbIjI3IiwgIjI1MTEzfEl2YXJz IGQnVXJnZWxsIl0sIFsiMjciLCAiMjUxMjJ8TGlueW9sYSJdLCBbIjI3IiwgIjI1 MTM1fE1pcmFsY2FtcCJdLCBbIjI3IiwgIjI1MTM3fE1vbGxlcnVzc2EiXSwgWyIy NyIsICIyNTE1OHxQYWxhdSBkJ0FuZ2xlc29sYSJdLCBbIjI3IiwgIjI1MTY4fFBv YWwiXSwgWyIyNyIsICIyNTIwNXxTaWRhbW9uIl0sIFsiMjciLCAiMjUyMzB8VG9y cmVncm9zc2EiXSwgWyIyNyIsICIyNTI0OHxWaWxhbm92YSBkZSBCZWxscHVpZyJd LCBbIjI3IiwgIjI1MjUyfFZpbGEtc2FuYSJdLCBbIjI4IiwgIjE3MDE1fEJhbnlv bGVzIl0sIFsiMjgiLCAiMTcwMzV8Q2FtJm9hY3V0ZTtzIl0sIFsiMjgiLCAiMTcw NTZ8Q29ybmVsbCZhZ3JhdmU7IGRlbCBUZXJyaSJdLCBbIjI4IiwgIjE3MDU4fENy ZXNwaSZhZ3JhdmU7Il0sIFsiMjgiLCAiMTcwNjV8RXNwb25lbGwmYWdyYXZlOyJd LCBbIjI4IiwgIjE3MDcxfEZvbnRjb2JlcnRhIl0sIFsiMjgiLCAiMTcxMjN8UGFs b2wgZGUgUmV2YXJkaXQiXSwgWyIyOCIsICIxNzEzN3xQb3JxdWVyZXMiXSwgWyIy OCIsICIxNzE3NHxTYW50IE1pcXVlbCBkZSBDYW1wbWFqb3IiXSwgWyIyOCIsICIx NzE5MHxTZXJpbnkmYWdyYXZlOyJdLCBbIjI4IiwgIjE3MjE4fFZpbGFkZW11bHMi XSwgWyIyOSIsICI0MzAyM3xCZWxsbXVudCBkZWwgUHJpb3JhdCJdLCBbIjI5Iiwg IjQzMDI3fEJpc2JhbCBkZSBGYWxzZXQiXSwgWyIyOSIsICI0MzAzNXxDYWJhYyZv YWN1dGU7cyJdLCBbIjI5IiwgIjQzMDQwfENhcCZjY2VkaWw7YW5lcyJdLCBbIjI5 IiwgIjQzMDQ5fENvcm51ZGVsbGEgZGUgTW9udHNhbnQiXSwgWyIyOSIsICI0MzA1 NXxGYWxzZXQiXSwgWyIyOSIsICI0MzA1OHxGaWd1ZXJhIl0sIFsiMjkiLCAiNDMw Njl8R3JhdGFsbG9wcyJdLCBbIjI5IiwgIjQzMDcwfEd1aWFtZXRzIl0sIFsiMjki LCAiNDMwNzJ8TGxvYXIiXSwgWyIyOSIsICI0MzA3NnxNYXImY2NlZGlsOyZhZ3Jh dmU7Il0sIFsiMjkiLCAiNDMwNzV8TWFyZ2FsZWYiXSwgWyIyOSIsICI0MzA4MnxN YXNyb2lnIl0sIFsiMjkiLCAiNDMwODV8TW9sYXIiXSwgWyIyOSIsICI0MzA5NnxN b3JlcmEgZGUgTW9udHNhbnQiXSwgWyIyOSIsICI0MzExMnxQb2JvbGVkYSJdLCBb IjI5IiwgIjQzMTE0fFBvcnJlcmEiXSwgWyIyOSIsICI0MzExNXxQcmFkZWxsIGRl IGxhIFRlaXhldGEiXSwgWyIyOSIsICI0MzE1MXxUb3JyZSBkZSBGb250YXViZWxs YSJdLCBbIjI5IiwgIjQzMTU0fFRvcnJvamEgZGVsIFByaW9yYXQiXSwgWyIyOSIs ICI0MzE1N3xVbGxkZW1vbGlucyJdLCBbIjI5IiwgIjQzMTczfFZpbGVsbGEgQWx0 YSJdLCBbIjI5IiwgIjQzMTc0fFZpbGVsbGEgQmFpeGEiXSwgWyIzMCIsICI0MzAx OXxBc2Mmb2Fjd