Content-Type: multipart/related; start=; boundary=----------zbpGBo8bkngqOgBt8CamWx
Content-Location: http://www.ine.es/jaxiBD/tabla.do?per=01&type=db&divi=EPOB&idtab=6
Subject: =?utf-8?Q?Instituto=20Nacional=20de=20Estad=C3=ADstica.=20(National=20Statistics=20Institute)?=
MIME-Version: 1.0
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=tabla.htm
Content-Type: text/html; name=tabla.htm
Content-Id:
Content-Location: http://www.ine.es/jaxiBD/tabla.do?per=01&type=db&divi=EPOB&idtab=6
Content-Transfer-Encoding: 8bit
Instituto Nacional de Estadística. (National Statistics Institute)
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=barraExpandir.gif
Content-Type: image/gif; name=barraExpandir.gif
Content-Location: http://www.ine.es/jaxiBD/imagenes/barraExpandir.gif
Content-Transfer-Encoding: Base64
R0lGODlhDwAcAJEAAP/UdZkzM////wAAACH5BAUUAAIALAAAAAAPABwAAAJBlB+S
x5zb2otxUqcuhtrqzF0eNY1IqYQBgK7QyoIKEMM1SLN2mz80HzO4ZENHKyQkfkyk
zEf2ZFacS2rHKsI2kQUAOw==
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=jaxi_p.css
Content-Type: text/css; name=jaxi_p.css
Content-Location: http://www.ine.es/jaxiBD/css/jaxi_p.css
Content-Transfer-Encoding: 8bit
table.general{
border : 0px;
margin : 0px 0px 0px 0px;
padding : 0px 0px 0px 0px;
width:100%;
}
H1.jaxi{
color : #993333;
font : bold 1em Arial, sans-serif;
border : 0px;
margin : 0px 0px 0px 0px;
padding : 0px 0px 0px 0px;
}
H2.jaxi{
font : bold 1em Arial, sans-serif;
border : 0px;
margin : 0px 0px 0px 0px;
padding : 0px 0px 0px 0px;
}
.boton{
background : #971b32;
color : #ffffff;
font: normal 0.8em Arial, Helvetica, sans-serif;
border : thin outset white;
cursor : pointer;
text-align : center;
padding-top : 2px;
display : block;
letter-spacing : 0.1em;
}
IMG{
border:0px;
}
TABLE.error{
background-color:#FFFCF0;
color : #0000CC;
font : bold 1em Arial,sans-serif;
}
TD.title_desc {
background : #ffd475;
color : #993333;
font : bold 1.2em Arial, sans-serif;
border : 0px;
margin : 2px 0px 2px 0px;
padding : 0px 5px 0px 10px;
}
TD.barra_vertical {
margin : 0px 0px 0px 0px;
padding : 0px 0px 0px 0px;
background : #971b32;
width:2pt;
}
TD.tabla_desc {
color : #971b32;
font : bold 1.1em Arial, sans-serif;
margin : 2px 0px 2px 0px;
padding : 0px 10px 0px 10px;
}
TD.capitulo_desc {
background : #ffcc99;
font : bold 0.9em Arial, sans-serif;
border : 0px;
margin : 2px 0px 2px 0px;
padding : 0px 10px 0px 10px;
}
TD.tabla_inebase {
font : 0.9em Arial, sans-serif;
border : 0px;
margin : 2px 0px 2px 10px;
padding : 2px 20px 2px 20px;
}
TD.unidades {
color : #971b32;
font : 0.8em Arial,sans-serif;
margin : 2px 0px 2px 0px;
padding : 0px 5px 0px 10px;
}
TD.inf {
margin : 2px 0px 2px 0px;
padding : 0px 5px 0px 10px;
color : #971b32;
font : 0.8em Arial,sans-serif;
}
.tablaBotones{
padding : 0px 100px 0px 100px;
}
.caja{
border : 1px;
border-style : solid;
border-color : #800000;
color : #0000CC;
font : 0.8em Arial,sans-serif;
}
.cajaBusq{
border : 1px;
border-style : solid;
border-color : #800000;
color : #0000CC;
font : 0.8em Arial,sans-serif;
size : 8;
}
.cajaBuscador{
border-color: #971b32;
border-width: 1px 1px 1px 1px;
border-style: solid solid solid solid;
height: 20px;
color : #0000CC;
font-family: Arial, Helvetica, sans-serif;
font-size: 0.8em;
}
.tablaVar {
border : 1px;
border-style : solid;
border-color : #ffd475;
color : #0000CC;
font : bold 1em Arial,sans-serif;
}
SELECT.cajaVar{
border : 1px;
border-style : solid;
border-color : #800000;
color : #0000FF;
font : 0.8em Arial, sans-serif;
width:350px;
}
.cabVar {
background : #ffd475;
color : #971b32;
font : bold 0.9em Arial, sans-serif;
}
.input_seleccionados {
BORDER-RIGHT: 0px;
BORDER-TOP: 0px;
MARGIN: 0px;
FONT: bold 1em Arial, Helvetica, sans-serif;
BORDER-LEFT: 0px;
COLOR: #971b32;
BORDER-BOTTOM: 0px;
BACKGROUND-COLOR: transparent;
vertical-align: baseline;
}
.textoBoldNegro{
color : #000000;
font : bold 0.9em Arial,sans-serif;
}
.textoNegro{
color : #000000;
font : 0.8em Arial,sans-serif;
}
.textoGr {
color : #971b32;
font : bold 1.2em Arial,sans-serif;
}
.texto {
color : #971b32;
font : 0.8em Arial,sans-serif;
}
.textoPeq {
color : #971b32;
font : 0.8em Arial,sans-serif;
}
.input_total {
BORDER-RIGHT: 1px;
BORDER-TOP: 1px;
MARGIN: 1px;
FONT: 0.7em Arial, Helvetica, sans-serif;
BORDER-LEFT: 1px;
COLOR: #971b32;
border-color : #971b32;
BORDER-BOTTOM: 1px;
BORDER-BOTTOM-style: solid;
BACKGROUND-COLOR: transparent
}
.tableData {
margin : 2px 0px 2px 0px;
padding : 0px 5px 0px 10px;
}
TD.dataCellInfo {
background : #ffffff;
font : 0.8em Arial, sans-serif;
color : #000000;
text-align : right;
padding : 2px 5px 2px 10px;
background-image : url(../imagenes/marcador.gif);
background-position : top right;
background-repeat : no-repeat;
}
TD.dataCell {
background : #ffffff;
font : 0.8em Arial, sans-serif;
color : #000000;
text-align : right;
padding : 2px 5px 2px 10px;
}
TH.tableCellGr {
font :bold 0.9em Arial, sans-serif;
background: #ffd475;
color: #971b32;
text-align: left;
padding : 2px 5px 2px 10px;
}
TH.tableCellMed {
font :bold 0.8em Arial, sans-serif;
background: #ffd475;
color: #971b32;
text-align: left;
padding : 2px 5px 2px 10px;
}
TH.tableCellPeq {
font : 0.7em Arial, sans-serif;
background: #ffd475;
color: #971b32;
text-align: left;
padding : 2px 5px 2px 10px;
}
.cajaDesc{
border : 0.8px;
border-style : solid;
border-color : #800000;
color : #0000CC;
font : 0.9em Arial,sans-serif;
}
.pietexto {
color : #971b32;
font : 0.5em Arial, sans-serif;
}
.tableVar{
color : #971b32;
margin : 2px 0px 2px 0px;
font : normal 0.8em Arial, Helvetica, sans-serif;
width:350px;
}
/* Estilos para links */
.inebase:link {
color : #0000FF;
font : 1em Arial, sans-serif;
}
.inebase:visited {
color : #0000FF;
font : 1em Arial, sans-serif;
text-decoration : underline;
}
.L1:link {
color : #971b32;
font : bold 1em Arial, sans-serif;
text-decoration : underline;
}
.L1:visited {
color : #971b32;
font : bold 1em Arial, sans-serif;
text-decoration : underline;
}
.L2:link{
color : #000000;
font : bold 1em Arial, sans-serif;
text-decoration : underline;
}
.L2:visited{
color : #000000;
font : bold 1em Arial, sans-serif;
text-decoration : underline;
}
.link:link {
color : #971b32;
font : bold 1em Arial, sans-serif;
text-decoration : none;
}
.link:visited {
color : #971b32;
font : bold 1em Arial, sans-serif;
text-decoration : none;
}
.pielink:link {
color : #971b32;
font : 0.5em Arial, sans-serif;
}
.pielink:visited {
color : #971b32;
font : 0.5em Arial, sans-serif;
}
.idiomalink {
color : #971b32;
font : 0.4em Arial, sans-serif;
}
.idiomalink:link {
color : #971b32;
font : 0.4em Arial, sans-serif;
text-decoration : none;
}
.idiomalink:visited {
color : #971b32;
font : 0.4em Arial, sans-serif;
text-decoration : none;
}
.idiomalinkactive:link {
color : #971b32;
font :bold 0.7em Arial, sans-serif;
text-decoration : none;
}
.idiomalinkactive:visited {
color : #971b32;
font : bold 0.7em Arial, sans-serif;
text-decoration : none;
}
.procesando{
background-color: #FFFCF0;
}
.textoprocesando{
font: bold 0.8em Arial, Helvetica, sans-serif;
color : #971b32;
}
.dataLink:link {
font : 0.8em Arial, sans-serif;
color : #000000;
text-decoration : none;
}
.sinsubrayar:link{
text-decoration: none;
}
.negrita{
font-weight: bold;
}
SELECT.sizecombo{
height: 10em;
width: 20em;
}
.tablaVarWidth{
width: 100px;
}
TD.tabla_desc_titulo_var {
height: 40px;
vertical-align: bottom;
}
.textoPeqAdicional {
height:30px
}
.anchojusto {
white-space: nowrap;
}
.sinsubrayar{
text-decoration: none;
}
.ilumina{
background: #ffd475;
font : 0.8em Arial, sans-serif;
color : #000000;
text-align : right;
padding : 2px 5px 2px 10px;
background-image : url(../imagenes/marcador.gif);
background-position : top right;
background-repeat : no-repeat;
}
.desilumina{
background: blue;
background: #ffffff;
font : 0.8em Arial, sans-serif;
color : #000000;
text-align : right;
padding : 2px 5px 2px 10px;
background-image : url(../imagenes/marcador.gif);
background-position : top right;
background-repeat : no-repeat;
}
TD.a ilumina{
background: #ffd475;
}
TD.a desilumina{
background: #ffffff;
}
.capacelda{
width:0px;
position: relative;
visibility: hidden;
}
SELECT.download{
font-family: Arial, Helvetica, sans-serif;
font-size: 1em;
color: #971B32;
background-color:#ffffff;
padding : 2px 5px 2px 10px;
}
TABLE.MENUJAXI {
background : #fffcf0;
font : 1em Arial, sans-serif;
width : 100%;
border : 0px;
margin : 0px 0px 0px 0px;
padding : 0px 0px 0px 0px;
}
TD.MENUJAXI {
background : #fffcf0;
font : 1em Arial, sans-serif;
width : 67%;
border : 0px;
margin : 2px 0px 2px 0px;
padding : 0px 0px 0px 0px;
}
A:visited {
color: purple;
}
A{
color: blue;
}
SELECT.menuSelect{
border : 1px;
border-style : solid;
border-color : #800000;
color : #0000FF;
font : 1em Arial, sans-serif;
}
DIV.resize{
width: 15px;
height: 28px;
background-image: url(../imagenes/barraExpandir.gif);
}
.puntero{
cursor : pointer;
}
IMG.tamanio{
height:12px;
}
.tamanioTextoBoton{
font:0.80em Arial, sans-serif;
}
DIV.capagrafica{
align:left;
}
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=jaxi.js
Content-Type: text/javascript; name=jaxi.js
Content-Location: http://www.ine.es/jaxiBD/js/jaxi.js
Content-Transfer-Encoding: 8bit
document.write('');
function setStatusData(headers){
var texto="";
var criterios="";
var headersArray=headers.split(" ");
for (i=0;i "+eval("document.getElementById('"+headersArray[i]+"').axis");
}
}
window.status=texto + " ("+criterios+")";
}
function enviarTabla(opc){
var numCeldas=0;
for(var i = 0;i < document.tabla.columns.options.length;i++){
document.tabla.columns.options[i].selected=true;
// alert("COLUMNAS: "+document.tabla.columns.options[i].value);
}
for(var i = 0;i < document.tabla.rows.options.length;i++){
document.tabla.rows.options[i].selected=true;
// alert("FILAS: "+document.tabla.rows.options[i].value);
}
if (opc=="all")selTodos();
numCeldas=document.tabla.NumCeldas.value;
if (numCeldas>maxSelection) alert(reducir);
else if(document.tabla.NumCeldas.value<=0) alert(seleccionar);
else {
if (opc=="consulGrafico"){
document.tabla.muestraGrafico.value='muestraGrafico';
}
mostrarLoading(2);
submitTable();
}
//else createTarget(document.forms['tabla'],true);
}
function submitTable(){
if (getOpenWindow()!=null && getOpenWindow()=="n"){
document.forms['tabla'].target='_blank';
}
document.forms['tabla'].submit();
}
function showPopUpWindow(windowNameToOpen,windowW,windowH,windowName)
{
var windowX=(screen.width/2)-(windowW/2);
var windowY=(screen.height/2)-(windowH/2);
prop='toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width='+windowW+',height='+windowH;
msgWindow=window.open(windowNameToOpen, windowName, prop);
msgWindow.focus();
msgWindow.moveTo(windowX, windowY);
}
function todos(selTodas,variable,totsel){
var size=eval ("document.tabla."+variable+".length");
if (selTodas) eval ("document.tabla."+totsel+".value="+size);
else eval ("document.tabla."+totsel+".value=0");
for (var i = 0; i < size ; i++)
eval("document.tabla."+variable+".options[i].selected="+ selTodas);
total(variable);
}
function selTodos(){
var num=document.tabla.numCri.value;
for(var j=1;j<=num;j++){
var tipo=eval("document.tabla.cri"+j+".type");
if (tipo=="select-multiple" || tipo=="select-one"){
var variable="cri"+j;
var sel="sel_"+j;
todos(true,variable,sel);
}
}
}
function total(){
var num=document.tabla.numCri.value;
var tot=1;
for(var j=1;j<=num;j++){
var tipo=eval("document.tabla.cri"+j+".type");
if (tipo=="select-multiple" || tipo=="select-one"){
var val=eval ("document.tabla.sel_"+j+".value");
tot=tot*val;
}
}
document.tabla.NumCeldas.value=tot;
}
function cuantos(totsel,variable){
var num=1;
for (var i = 0; i < eval ("document.tabla."+variable+".length") ; i++) {
if (eval("document.tabla."+variable+".options[i].selected") == true) {
eval ("document.tabla."+totsel+".value="+num);
num++;
}
}
total();
}
function ordenarSelect(opcion,object){
if (opcion=='up'){
for(var i = 0;i < eval('document.tabla.'+object+'.options.length');i++){
if (eval('document.tabla.'+object+'.options[i].selected==true')){
if (i>0){
textoSup=eval('document.tabla.'+object+'.options[i].text');
valorSup=eval('document.tabla.'+object+'.options[i].value');
textoInf=eval('document.tabla.'+object+'.options[i-1].text');
valorInf=eval('document.tabla.'+object+'.options[i-1].value');
eval('document.tabla.'+object+'.options[i-1].text=textoSup');
eval('document.tabla.'+object+'.options[i-1].value=valorSup');
eval('document.tabla.'+object+'.options[i].text=textoInf');
eval('document.tabla.'+object+'.options[i].value=valorInf');
eval('document.tabla.'+object+'.options[i-1].selected=true');
eval('document.tabla.'+object+'.options[i].selected=false');
}else{
alert(primero);
}
}
}
}else{
for(var i = eval('document.tabla.'+object+'.options.length-1');i >= 0;i--){
if (eval('document.tabla.'+object+'.options[i].selected==true')){
if (eval('i-1){
eval("document.getElementById('"+variable+"').options["+i+"].selected=true");
}
else if(opc=='start' && auxValor.indexOf(valor)==0){
eval("document.getElementById('"+variable+"').options["+i+"].selected=true");
}
}
cuantos(sel,variable);
}
}
function ltrim(s) {
return s.replace(/^\s+/, "");
}
function rtrim(s) {
return s.replace(/\s+$/, "");
}
function trim(s) {
return rtrim(ltrim(s));
}
function imprimir(){
window.print();
}
function favoritos(titulo){
window.external.AddFavorite(document.location.href,titulo);
}
function setTypeOpenWindow(){
var value=readCookie("openWindow");
if (value==null){
createCookie("openWindow","n",CookieNumDays);
}else{
if (value=="1") createCookie("openWindow","n",CookieNumDays);
else createCookie("openWindow","1",CookieNumDays);
}
window.location.reload();
}
function getOpenWindow(){
var value=readCookie("openWindow");
return value;
}
function aleatorio(){
return parseInt(Math.random()*999999);
}
function replaceAll(cadena,cadenaBusq,cadenaFinal) {
var pos = 0;
var aux = "";
while (cadena.indexOf(cadenaBusq,pos) != -1){
aux += cadena.substring(pos,cadena.indexOf(cadenaBusq,pos));
aux += cadenaFinal;
pos = (cadena.indexOf(cadenaBusq,pos) + cadenaBusq.length);
}
aux += cadena.substring(pos,cadena.length);
return aux;
}
//function createTarget(form,doSubmit) {
//Esta funcion es usada para poder abrir los furmulario en una ventana y
//poder establecer las propiedades de la misma
/*toolbar=" + toolbar + ",location=" + location +
", directories="+ directories +",status=" + status + ", menubar=" +
menubar +",scrollbars="+ scrollbars + ",resizable=" + resizable +
", width=" + width + ",height=" + height;*/
//Esta funcion será llamada desde el on submit()
//estableciendo en el target--> nombreVentana:PropiedadesVentana
//nombreventana=> NombreMarcoParaForm~ArchivoBase~NombreVentanaParaArchivoBase
//Los dos ultimos parametros son opcionales
//en el caso de hacer submit por Javascript se recomienda usar la funcion
//justo antes del submit
/* var nameAleatorio="dataPage"+aleatorio();
var _target = form.target;
_colon = _target.indexOf(":");
_winfile='';
_wintarget='';
if(_colon != -1) {
form.target =_target.substring(0,_colon).split("~")[0];
if (_target.substring(0,_colon).split("~").length>0){
_winfile=_target.substring(0,_colon).split("~")[1];
}
if (_target.substring(0,_colon).split("~").length>1){
_wintarget=_target.substring(0,_colon).split("~")[2];
if (getOpenWindow()!=null && getOpenWindow()=="n")
_target=replaceAll (_target, _wintarget, nameAleatorio);
}else{
_wintarget=_target.substring(0,_colon).split("~")[0];
}
form.args = _target.substring(_colon+1);
} else if(typeof(form.args)=="undefined") {
form.args = "";
}
if(form.args.indexOf("{")!=-1) {
_args = form.args.split("{");
form.args = _args[0];
for(var i = 1; i < _args.length;i++) {
_args[i] = _args[i].split("}");
form.args += eval(_args[i][0]) + _args[i][1];
}
}
form.args = form.args.replace(/ /g,"");
_win = window.open(_winfile,_wintarget,form.args);
_win.focus();
if (doSubmit){
form.submit();
form.target=_target, _wintarget, nameAleatorio;
}else{
return true;
}
}*/
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=sort.js
Content-Type: text/javascript; name=sort.js
Content-Location: http://www.ine.es/jaxiBD/js/sort.js
Content-Transfer-Encoding: 8bit
var SentidoASC= new Image();
SentidoASC.src="imagenes/cambiosentidoASC.gif"
var SentidoDESC= new Image();
SentidoDESC.src="imagenes/cambiosentidoDESC.gif"
function CambiaImagenSentido(img){
if (img.src.indexOf('ASC')>0)
img.src=SentidoDESC.src
else img.src=SentidoASC.src
}
function ReverseFormSelect(VarSelect){
//Coloca en orden inverso los elementos de la select
var auxText;//variable auxiliar para almacenar temporalmente el dato Text
var auxValue;//variable auxiliar para almacenar temporalmente el dato Value
var auxSelected;//variable auxiliar para almacenar temporalmente el dato selected
var longitud=VarSelect.options.length;
for (var i=0;i0){
auxSelected=VarSelect.options[0].selected;
VarSelect.options[0].selected=false;
VarSelect.options[0].selected=auxSelected;
}
}
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=resize.js
Content-Type: text/javascript; name=resize.js
Content-Location: http://www.ine.es/jaxiBD/js/resize.js
Content-Transfer-Encoding: 8bit
var move = false;
var position;
var object;
var selectObj;
document.onmouseup = onMouseUp;
document.onmousemove = onMouseMove;
function onMouseDown(obj,select,evnt){
var e = evnt || window.event
move = true;
if (e.clientX) position = e.clientX;
else if (e.x) position = e.x;
object=obj;
selectObj=select;
}
function onMouseMove(evnt){
var e = evnt || window.event
if (move) {
if (e.clientX){
ResizeListbox(e.clientX - position, object, selectObj);
position = e.clientX;
}else if (e.x){
ResizeListbox(e.x - position, object, selectObj);
position = e.x;
}
return false;
}
}
function onMouseUp(){
move = false;
window.status='';
}
function ResizeListbox(whereto, ob,sel){
window.status="entro";
var begin = document.getElementById(ob).width;
var intbegin = parseInt(begin);
var newwidth = intbegin + whereto;
window.status=document.getElementById(ob).width;
//Limitamos el resize a 250 como mínimo
if (newwidth >= 250){
window.status=newwidth;
document.getElementById(ob).width = newwidth;
document.forms['tabla'].elements[sel].width=newwidth;
}
document.getElementById(ob).innerHtml=newwidth;
}
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=formato.css
Content-Type: text/css; name=formato.css
Content-Location: http://www.ine.es/menuapp/css/formato.css
Content-Transfer-Encoding: 8bit
form{
page-break-after: avoid;
padding-bottom: 0px;
margin-bottom: 0px;
page-break-before: avoid;
display:inline;
}
.minWidth{
width:1%;
}
.maxWidth{
width: 100%;
}
div.espacio {
font-size:0%;
height: 5px;
padding-top: 0px;
padding-bottom: 0px;
margin-top: 0px;
margin-bottom: 0px;
}
.espacio {
width: 10px;
height: 10px;
clear: both;
}
img.sinborde{
border: none;
padding-left: 0px;
padding-right: 0px;
margin-left: 0px;
margin-right: 0px;
}
img.alineaizquierda{
float: left;
vertical-align: top;
margin: 0 1em 0 1em;
}
img.alineaderecha{
float: right;
vertical-align: top;
margin: 0 1em 0 1em;
}
img.alineaderechatotal{
float: right;
vertical-align: top;
margin: 0 0em 0 0em;
}
TD.FondoPagina{
background-color: #FFFCF0;
}
TD.FondoMenuBotones{
background-color: #FFFFFF;
}
br.lineanueva {
clear: both;
}
.fuente_rojoine {
color: #9E1B34;
}
.baseline{
vertical-align: bottom;
}
.arriba {
vertical-align: top;
}
.alineaderecha {
text-align : right;
}
.oculto {
position:absolute;
left:-9999px;
}
.centrar
{
text-align:center;
}
.textizquierda
{
text-align:left;
}
/*Formato de los botones INE*/
a.boton {
text-decoration: none;
color: #9E1B34;
background: White;
padding: 2px 7px 2px 7px;
border: 1px solid #9E1B34;
cursor: pointer;
margin-top:0px;
margin-bottom:0px;
}
a.boton:hover {
background: #9E1B34;
color: white;
}
a.boton-hover {
background: #9E1B34;
color: white;
}
a.botonRojo {
text-decoration: none;
color:#ffffff;
background: #9E1B34;
padding: 2px 7px 2px 7px;
border: 1px solid #9E1B34;
cursor: pointer;
margin-left: 0px;
margin-right: 0px;
margin-top:0px;
margin-bottom:0px;
}
a.botonRojo:hover {
background: #FFD475;
color: #000000;
}
a.botonRojo-hover {
text-decoration: none;
background: #FFD475;
color: #000000;
cursor: pointer;
border: 1px solid #9E1B34;
margin-left: 0px;
margin-right: 0px;
margin-top:0px;
margin-bottom:0px;
padding: 2px 7px 2px 7px;
}
input {
text-decoration: none;
}
input.rojo {
border: 1px solid #9E1B34;
vertical-align: middle;
}
select{
text-decoration: none;
font-size: 1em;
}
select.rojo{
text-decoration: none;
background: White;
border: 1px solid #9E1B34;
}
SELECT.download{
font-family: Arial, Helvetica, sans-serif;
background-color: #ffffff;
padding: 0px 0px 0px 3px;
}
input.boton {
text-decoration: none;
color: #9E1B34;
background: White;
padding: 1px 3px 1px 3px;
margin: 0px;
border: 1px solid #9E1B34;
cursor: pointer;
margin-left: 0px;
margin-right: 0px;
margin-top: 0px;
margin-bottom: 0px;
overflow: visible;
}
input.boton:hover {
text-decoration: none;
background: #9E1B34;
color: white;
overflow: visible;
}
input.boton-hover {
text-decoration: none;
color: white;
background: #9E1B34;
padding: 1px 3px 1px 3px;
border: 1px solid #9E1B34;
cursor: pointer;
margin-left: 0px;
margin-right: auto;
overflow: visible;
}
input.botonRojo {
color: #ffffff;
background: #9E1B34;
border: 1px solid #9E1B34;
cursor: pointer;
margin-left: 0px;
margin-right: 0px;
margin-top: 0px;
margin-bottom: 0px;
padding: 0px 3px 0px 3px;
overflow: visible;
}
input.botonRojo:hover {
border: 1px solid #9E1B34;
background: #FFD475;
color: #000000;
overflow: visible;
}
input.botonRojo-hover {
color: #000000;
background: #FFD475;
border: 1px solid #9E1B34;
cursor: pointer;
margin-left: 0px;
margin-right: 0px;
margin-top: 0px;
margin-bottom: 0px;
padding: 0px 3px 0px 3px;
overflow: visible;
}
.cursorMano{
cursor:pointer;
}
.noresize{
font-size: 0%;
}
.tam95{font-size:0.95em;}
.tam90{font-size:0.90em;}
.tam85{font-size:0.85em;}
.tam80{font-size:0.80em;}
.tam75{font-size:0.75em;}
.tam70{font-size:0.70em;}
.tam65{font-size:0.65em;}
.tam60{font-size:0.60em;}
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=BaseINE.css
Content-Type: text/css; name=BaseINE.css
Content-Location: http://www.ine.es/menuapp/css/BaseINE.css
Content-Transfer-Encoding: 8bit
/* Elementos comunes de Html */
BODY {
font-family: Arial, Helvetica, sans-serif;
background-color: #FFFCF0;
margin-left: 0px;
margin-right: 0px;
margin-top: 0px;
margin-bottom: 0px;
color: Black;
font-size: 0.9em;
}
HR {
color: #9E1B34;
}
HR.fina {
color: #9E1B34;
border-style: solid none none none;
height:1px;
}
SPAN {
color : #9E1B34;
}
IMG {
border : none;
}
/* Elementos de web INE */
.fondoINE{
background-color: #9E1B34;
}
.colorINE{
color: #9E1B34;
}
.raya {
height: 1px;
}
.rayacorta {
height: 1px;
width: 5%;
text-align: left;
margin-right: 95%;
}
.border {
border : none;
}
.sinesp {
margin-bottom : -2px;
margin-top : -2px;
}
.nowrap {
white-space: nowrap;
}
.left {
text-align: left;
}
br.left {
clear: left;
}
.right {
text-align: right;
}
.miga {
font-family: Arial,Helvetica,sans-serif;
color: #971B32;
font-weight: bolder;
font-size: 1.1em;
}
.miga a , .miga a:hover , .miga a:visited , .miga a:link , .miga a:active, .miga a:focus{
font-weight: normal;
color: #9E1B34;
text-decoration: none;
}
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=fondo.jpg
Content-Type: image/jpeg; name=fondo.jpg
Content-Location: http://www.ine.es/menuapp/img/fondo.jpg
Content-Transfer-Encoding: Base64
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
q8jCntmpihbVvNYJj1LWHTy1c031MDRVYvgwNIyyA8lBkA1AGoA4kKejslaavdBl
lUWmrUj5SZ2WUYTMpaHRpvoaXZErOm+G4xS7spWclyyFLuzdCsumSatbIakuMSar
ZZJqtvW1M8jrQ1YIUv7TWXLNo3GUszg1htCvwnpkuxr7JY+sVJWVZffW0ZeqwWOR
NJKFrYSa8CdWjJ7lpk/+zUZWzrMDTfUpNULtVMPDhVW/Jq11tar7ZgszoU6q/JLf
+5WZiCe1tH9RaVafm8ZX7CzUfbdjV3vmlJ+e5ljKU1WrK0qLNGp+jNRyJOIls2p8
E0+5fsSmMrK5j8OexraEqWUqdWPNBo0qMoDC7ScF3MTA4a8fvYGKlcXTFFpp37M/
qYl/A7z/AFGp/ai4dMINoAAiGAFAAABAiqZEIACgIAp5fmCT1sIeoKMhCCgForRT
pSyugLb4zs6k/RHPJtz6SKWkBOJB520t2kg5GAZYBrYQal1QaJqDAnRHoEVReJYA
6EFduz/6hL0LCOe6ji8q9yIz0hSwAYAMBC8OIUvCQQvDkFLE0ELU/IKakEPKAADA
UnCL6BCdCIC8OceWTAqNa6j1yBSvaq5ogaRv4dU0FawuoS4SA1VWL8mAfdPpjsBS
bXJUcQNI3V1DqpL1CNHtFSWmpRWHx0hXGnCNTMM6OkZeQJdkYUKiTU1l9AG7NpZz
uCMowqSzpXANE41FxiBOoB6gDUAagHqAeoAUwL8QyKVU0KU0zI2ppPh+xpHRFVFw
l+pkaeJNcUgJdffhr5gRKqn1AjOQAASTNDWOpcraMo1jUrLrnuaFOevdUpqS/wDf
MDKVrYz409L81u+gGctlUpe7qyXfeEplLZlyuWUZfsE1cNezu4zbdGWMcVv+h6eD
OMUywcz9ndJOL8meyM4lx+uRxKxrLsv/AGrezq9ZQcf0webg98ods/SHEepwoAGC
gIAoAGQIoDMkO3ai9uhNfFSX7Hn+PPt/9duXqHEj1OKMce58vn9nv44/k1KUeDwc
1ptC9uY/Hn0YNW0NqVVzxUiWzo6IbUoPmi4l2YnBo7i2q8tTD9TUZJqu3pzV3Cos
OGGm0xMrMPQ0dULSS0sts0AlDAAFAEsDhaxXqL1z+pppWAKANof01GX4ZEw7lqOn
CzaEZDNAMgAAAAAQSjNKQDRkUAwgksxYC2h7WyKM+Ol4Lh3LfHLw3ofFHOYUtEfh
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
JGsCDRBmW+0v9k1h1LUdOM0yZlAABQAgAD//2Q==
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=linea.gif
Content-Type: image/gif; name=linea.gif
Content-Location: http://www.ine.es/menuapp/img/linea.gif
Content-Transfer-Encoding: Base64
R0lGODlhAQBkAIAAAJkzM////yH5BAEHAAEALAAAAAABAGQAAAIKBIKpy+0Po5yt
AAA7
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=fichaizq.gif
Content-Type: image/gif; name=fichaizq.gif
Content-Location: http://www.ine.es/menuapp/img/fichaizq.gif
Content-Transfer-Encoding: Base64
R0lGODlhWAJkAPcAAJcbMv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAABYAmQAAAj/AAEIHEiwoMGDCBMqXMiw
ocOHECNKnEixosWLGDNq3Mixo8ePIEOKLBigpMmTKFOqXMmypcuXMGPKnEmzps2b
OHPq3Mmzp8+fQIMKHUq0KICiSJMqXcq0qdOnUKNKnUqV6NGqWLNq3cq1q9evYMPO
vCq2rNmzaNOqXctWKNm2cOPKnUu3rl2eb+/q3cu3r9+/T/MCHky4sOHDfgUjXsy4
sePHURVDnky5suXLKiVj3sy5s+e7mj+LHk26dNbQplOrXs16J+rWsGPLjv16tu3b
uDHXzs27t+/Bu38LH06cbfDiyJMrP728ufPnWI9Dn069Ok3p1rNr3459u/fvzbuD
/x9P3rf48ujTwz6vvr170ezfy59POT79+/gN28/Pv7/e/f4FKKBxAxZoIGAAHqjg
glUlyOCDEC7lYIQUVvjThBZmqGFNGG7o4YcrdQjiiCCKSOKJGZqI4ooQqsjiiwe6
COOMAcpI44342Yjjju/pyOOP6PkI5JDfCUnkkdYZieSSzynJ5JPJOQnllMJJSeWV
uVmJ5Zayacnll6t5CeaYpIlJ5pmdmYnmmpapyeabj7kJ55yIyUnnncDhqWdxdu7p
p119/iloXIEOaqhahR6qaFmJLuqoV40+Kilzk1bKWaSWZuoUppp2mhSnnobqlqik
HgZqqajmdGqqrF7X6qugwWwq61yrzmrrSbXeemuuus7Ka6+w/gpsq8IOm2qxxpaK
bLKiLsusp84+q2m00lpKbbWTXovto9puu2i33h4KbriDjkvun+aeu2e66uLJbrt0
vgsvnPLOy2a99qKJb75k7ssvmP7+y2XAAmMJQEAAOw==
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=fichadch.gif
Content-Type: image/gif; name=fichadch.gif
Content-Location: http://www.ine.es/menuapp/img/fichadch.gif
Content-Transfer-Encoding: Base64
R0lGODlhWAJkAPcCAJcbMv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH5BAEAAAIALAAAAABYAmQAAAj/AAEIHEiwoMGDCBMqXMiw
ocOHECNKnEixosWLGDNq3Mixo8ePIEOKFECSZICTKFOqXMmypcuXMGPKnEmzps2b
OHPq3Mmzp8+fQIMKHUq0qNGjAEoKOMq0qdOnUKNKnUq1qtWrWIUmNZm1q9evYMOK
HUu2rFmZW8+qXcu2rdu3cOMSTSq3rt27ePPq3QsUAN+/gAMLHkz4qt/CiBMrXsw4
8eHGkCNLnkw56+PKmDNr3swZ5uXOoEOLHi34M+nTqFOrFmt6tevXsGMHbS27tu3b
uE/Szs27t+/Ou38LH04ccfDiyJMrj3t8ufPn0L02j069unWj069r3869Zvbu4MOH
//8uvrz56OTPq18/PD379/Bru49Pv/7p+fbz68+Mf7///4v1B+CABP4lYIEIJsic
ggw2WJqDEEZ414ESVmghVBReqOGGWnHo4YdVZQjiiCS+JGKJKKZ4YoosgrhiizBq
+GKMNEY4Y404KnhjjjwOuGOPQOr3Y5BExjdkkUiqd2SSTI7X5JMSLgnllNRJSeWV
y1mJ5ZbEacnll715CeaYtolJ5pmvmYnmmqipyeabobkJ55yayUnnnZPZieeejOnJ
55+F+QnooIAJSuiheRmK6KJyKcroo205CumkZklK6aVhWYrpppZx6mmdn4ZKmaai
lsoUqaamOhSqqrbqE6uuxnWaE6yy1koTrbbmaqKuvMKFa6/ABvBrsLwOS2yuxh5b
a7LKxspss60+C22q0k5barXWhopttp5uy+2m3n57abjiTkpuuY+ei+6i6q57aLvu
DgpvvH/OS++e9t57Z776zslvv2/+C/CaAg98ZsEGj4lwwl8CEBAAOw==
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=ficha_overizq.gif
Content-Type: image/gif; name=ficha_overizq.gif
Content-Location: http://www.ine.es/menuapp/img/ficha_overizq.gif
Content-Transfer-Encoding: Base64
R0lGODlhWAJkAJEAAJcbMv/////YhgAAACH5BAAAAAAALAAAAABYAmQAAAL/hI+p
y+0Po5y02ouz3rz7D4biSJZmIqTqyrbuC8fyTNf2jef6zvf+DwwKh8Si8YhMAgLM
QPIJjUqn1Kr1is1qt8QlkwsOi8fksvmMTte86rb7DY/L53Tjso7P6/f8vl8I8Cc4
SFhoeKgViLjI2Oj4yKgIOUlZaXnJJYm5ydnp+SmjCTpKWmpaKHqqusraWpbqGis7
SzsEW4ubq7ubcsv7CxwM6itcbHy8SIy8zNxMp+wcLT0dBk19jZ2NZK3d7f19ww0+
Tk4uXo6eTn2u3u5uzP4uP48bT3+Pr2qfz9/Pue8voEBHAAcaPCioIMKFDJ81fAgR
VcSJFPUorIgx45SL/xo7euzyMaRILBxHmjwZoyTKlSxVsnw50iXMmR1l0rxJ0SbO
nQ118vxp0CfQof2EEj1KzyjSpe2UMn1qDqrUik6nWr1W9apWZ1m3ej3W9atYYGHH
ms1V9qxaWWnXul3V9q1cUnHn2u1U965eS3n3+n3U969gRIEHGx5U+LBiPokXO67T
+LFkOJEnW05T+bJmMpk3e870OTRe0aQvdS6N+snp1KyLrG4NG8jr2LR3zK6N28bt
3LxT9v49Zzfw4QKEE/9t/Djv5MpxM29O+zl02NKns65uHTX27KS3cw/t/bvn8OI1
ky9v+Tx6yerXO27vXjH8+Ibn0xds/77f/Pr18hjvb9d/AMol4IBuFWigWggmaNaC
DIoFQAEAOw==
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=Menu.css
Content-Type: text/css; name=Menu.css
Content-Location: http://www.ine.es/menuapp/css/Menu.css
Content-Transfer-Encoding: 8bit
.Menu_Fondo_tabla{
background: url("../img/fondo.jpg") repeat-x top right;
width: 100%;
}
a.Menu_TituloMenu:active , a.Menu_TituloMenu:focus, a.Menu_TituloMenu:hover, a.Menu_TituloMenu:link, a.Menu_TituloMenu:visited{
text-decoration: none;
font-family: Arial, Helvetica, sans-serif;
font-size: 0.8em;
color: #9e1b34;
}
a.Menu_TituloMenu:hover{
text-decoration: none;
font-family: Arial, Helvetica, sans-serif;
font-size: 0.85em;
color: aqua;
}
a.Menu_TituloIdioma:active , a.Menu_TituloIdioma:focus, a.Menu_TituloIdioma:link, a.Menu_TituloIdioma:visited{
text-decoration: none;
font-family: Arial, Helvetica, sans-serif;
font-size: 0.85em;
color: #9e1b34;
}
a.Menu_TituloIdioma:hover{
text-decoration: none;
font-family: Arial, Helvetica, sans-serif;
font-size: 0.85em;
color: #000000;
}
.Menu_TextSearch{
font-family: Arial, Helvetica, sans-serif;
font-size: 0.85em;
border-left: 1px solid #9E1B34;
border-right: 1px solid #9E1B34;
border-top: 1px solid #9E1B34;
border-bottom: 1px solid #9E1B34;
padding: 3px 3px 3px 3px;
vertical-align: middle;
}
input.Menu_BtnBuscar{
background: #9E1B34;
border-left: 1px solid #9E1B34;
border-right: 1px solid #9E1B34;
border-top: 1px solid #9E1B34;
border-bottom: 1px solid #9E1B34;
color: #ffffff;
vertical-align: middle;
font-size: 0.9em;
cursor: pointer;
}
input.Menu_BtnBuscar:hover{
background: #FFD475;
color: #000000;
}
input.Menu_BtnBuscar-hover{
background: #FFD475;
border-left: 1px solid #9E1B34;
border-right: 1px solid #9E1B34;
border-top: 1px solid #9E1B34;
border-bottom: 1px solid #9E1B34;
color: #000000;
vertical-align: middle;
font-size: 0.9em;
cursor: pointer;
}
.Menu_CoomboText{
color: #9e1b34;
font-family: Arial, Helvetica, sans-serif;
font-size: 0.75em;
}
.Menu_Titulo_Secc{
font-family: Arial, Helvetica, sans-serif;
font-size: 0.95em;
font-weight: bold;
}
TD.Menu_TDLinea{
background-color: #9e1b34;
height: 0.1em;
}
TD.Menu_TDFondo{
background-color: #ffffff;
}
#DIVloading {
position: absolute;
z-index: 10000;
width: 100%;
height: 100%;
top: 0px;
left: 0px;
background-color: #FFFCF0;
filter: alpha(opacity=90);
-moz-opacity: 0.9;
opacity: 0.9;
display: none;
}
#iframeloading{
position: absolute;
display: none;
left: 0px;
top: 0px;
width: 0px;
height: 0px;
overflow: hidden;
border: 0px none;
}
.espacio {
width: 10px;
height: 10px;
clear: both;
}
#Menu_ContenidoPpal{
padding-left: 10px;
padding-right: 10px;
clear: both;
}
#MenuContenidoHTML{
padding-top: 0px;
padding-bottom: 0px;
padding-left: 10px;
padding-right: 10px;
}
H1.MenuCabecera{
font-family: Arial, Helvetica, sans-serif;
font-size: 0.75em;
color: #9E1B34;
}
.Menu_botonera{
text-align: center;
border-left: 1px solid #9E1B34;
border-right: 1px solid #9E1B34;
border-top: 1px solid #9E1B34;
background-color: white;
}
.Menu_lineaHorizontal{
background: url("../img/linea.gif") repeat-x top;
height: 1px;
overflow: inherit;
}
.Menu_MarcoCombo{
border-left: 0.1em solid #9E1B34;
border-right: 0.1em solid #9E1B34;
border-top: 0.1em solid #9E1B34;
border-bottom: 0.1em solid #9E1B34;
background: #9E1B34;
font-size: 0.1em;
}
.MenuSecc{
height:20px;
vertical-align: middle;
padding-top:4px;
padding-bottom:4px;
}
.Menu_FlechaCombo{
background: url("../img/linea.gif") no-repeat center;
}
/* INICIO ToolTip*/
#dhtmlgoodies_tooltip{
background-color:#FFFFE1;
border:0.1em solid #000;
position:absolute;
display:none;
z-index:20000;
padding:0.2em;
font-size:0.75em;
font-family: Arial, helvetica, sans-serif;;
}
#dhtmlgoodies_tooltipClose{
background-color: #FFD475;
}
#dhtmlgoodies_tooltipShadow{
position:absolute;
background-color:#555;
display:none;
z-index:10000;
}
/* FIN ToolTip*/
/*INICIO Capa de posicionamiento*/
#PosTab{
position: absolute;
}
/* FIN Capa de posicionamiento*/
/*INICIO barra de menu*/
#MenuToolBar {
margin: 0px 0px 0px 5px;
float:left;
}
#MenuToolBar ul {
padding: 0px 0px 0px 0px;
margin: 0px 0px 0px 0px;
margin: 0px;
list-style: none;
}
#MenuToolBar ul li {
display: inline;
font-size: 0.75em;
}
#MenuToolBar ul li a.izq:link, #MenuToolBar ul li a.izq:visited {
color: #9E1B34;
float: left;
padding: 5px 10px 4px 10px;
text-decoration: none;
background-image: url(../img/fichaizq.gif);
background-position: top right;
background-repeat: no-repeat;
border-left: 1px solid #9E1B34;
}
#MenuToolBar ul li a.cent:link, #MenuToolBar ul li a.cent:visited {
color: #9E1B34;
padding: 5px 5px 4px 5px;
float: left;
text-decoration: none;
background-image: url(../img/fichaizq.gif);
background-position: top right;
background-repeat: no-repeat;
}
#MenuToolBar ul li a.dch:link, #MenuToolBar ul li a.dch:visited {
color: #9E1B34;
padding: 5px 5px 4px 5px;
float: left;
text-decoration: none;
background-image: url(../img/fichadch.gif);
background-position: top right;
background-repeat: no-repeat;
}
#MenuToolBar ul li a.izq:hover, #MenuToolBar ul li a.izq:active, #MenuToolBar ul li a.izq:focus{
color: #9E1B34;
background-image: url(../img/ficha_overizq.gif);
background-position: top right;
background-repeat: no-repeat;
}
#MenuToolBar ul li a.cent:hover, #MenuToolBar ul li a.cent:active{
color: #9E1B34;
background-image: url(../img/ficha_overizq.gif);
background-position: top right;
background-repeat: no-repeat;
}
#MenuToolBar ul li a.dch:hover, #MenuToolBar ul li a.dch:active{
color: #9E1B34;
background-image: url(../img/ficha_overdch.gif);
background-position: top right;
background-repeat: no-repeat;
}
/*FIN barra de menu*/
#MenuLangBar {
color: #9E1B34;
display:inline;
float: right;
vertical-align: bottom;
}
#MenuLangBar ul {
padding: 0px 0px 0px 0px;
margin: 0px 0px 0px 0px;
margin: 0px;
list-style: none;
float: left;
}
#MenuLangBar ul li {
display: inline;
font-size: 0.75em;
}
#MenuLangBar ul li a:link,#MenuLangBar ul li a:visited {
color: #9E1B34;
padding: 4px 10px 4px 10px;
float: left;
text-decoration: none;
border-left: 1px solid #9E1B34;
border-right: 1px solid #9E1B34;
border-top: 1px solid #9E1B34;
background-color: white;
}
#MenuLangBar ul li a:hover, MenuLangBar ul li a:active{
color: #9E1B34;
background-color: #ffd475;
}
#MenuLangBar select{
font-size: 0.75em;
color: #9E1B34;
text-decoration: none;
background: White;
border: 2px solid #ffffff;
vertical-align: middle;
padding: 0px 0px 0px 0px;
margin: 3px 1px 0px 1px;
}
#MenuLangBar input{
vertical-align: middle;
padding: 3px 0px 3px 0px;
}
/* INICIO Lista estandar horizontal */
ul.horizontal {
padding: 0px 0px 0px 0px;
margin: 0px;
list-style: none;
clear:both;
}
ul.horizontal li {
display: inline;
text-align: center;
}
ul.horizontal li .separador{
padding: 0px 4px 0px 4px;
}
ul.horizontal li a{
color: #9E1B34;
padding: 0px 2px 0px 2px;
text-decoration: none;
}
/* FIN Lista estandar horizontal */
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=thickbox.css
Content-Type: text/css; name=thickbox.css
Content-Location: http://www.ine.es/menuapp/css/thickbox.css
Content-Transfer-Encoding: 8bit
/* ----------------------------------------------------------------------------------------------------------------*/
/* ---------->>> global settings needed for thickbox <<<-----------------------------------------------------------*/
/* ----------------------------------------------------------------------------------------------------------------*/
/* *{padding: 0; margin: 0;} */
/* ----------------------------------------------------------------------------------------------------------------*/
/* ---------->>> thickbox specific link and font settings <<<------------------------------------------------------*/
/* ----------------------------------------------------------------------------------------------------------------*/
#TB_window {
font: 12px Arial, Helvetica, sans-serif;
color: #333333;
}
#TB_secondLine {
font: 10px Arial, Helvetica, sans-serif;
color:#666666;
}
#TB_window a:link {color: #666666;}
#TB_window a:visited {color: #666666;}
#TB_window a:hover {color: #000;}
#TB_window a:active {color: #666666;}
#TB_window a:focus{color: #666666;}
/* ----------------------------------------------------------------------------------------------------------------*/
/* ---------->>> thickbox settings <<<-----------------------------------------------------------------------------*/
/* ----------------------------------------------------------------------------------------------------------------*/
#TB_overlay {
position: fixed;
z-index: 100;
top: 0px;
left: 0px;
background-color: #ffd886;
filter: alpha(opacity=75);
-moz-opacity: 0.75;
opacity: 0.75;
height: 100%;
width: 100%;
}
* html #TB_overlay { /* ie6 hack */
position: absolute;
height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px');
}
#TB_window {
position: fixed;
background: #ffffff;
z-index: 102;
color: #000000;
display: none;
border: 4px solid #525252;
text-align: left;
top: 50%;
left: 50%;
}
* html #TB_window { /* ie6 hack */
position: absolute;
margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');
}
#TB_window img#TB_Image {
display:block;
margin: 15px 0 0 15px;
border-right: 1px solid #ccc;
border-bottom: 1px solid #ccc;
border-top: 1px solid #666;
border-left: 1px solid #666;
}
#TB_caption{
height:25px;
padding:7px 30px 10px 25px;
float:left;
}
#TB_closeWindow{
height:25px;
padding:11px 25px 10px 0;
float:right;
}
#TB_closeAjaxWindow{
padding:7px 10px 5px 0;
margin-bottom:1px;
text-align:right;
float:right;
}
#TB_ajaxWindowTitle{
float:left;
padding:7px 0 5px 10px;
margin-bottom:1px;
}
#TB_title{
background-color:#e8e8e8;
height:27px;
}
#TB_ajaxContent{
clear:both;
padding:2px 15px 15px 15px;
overflow:auto;
text-align:left;
line-height:1.4em;
}
#TB_ajaxContent.TB_modal{
padding:15px;
}
#TB_ajaxContent p{
padding:5px 0px 5px 0px;
}
#TB_load{
position: fixed;
display:none;
height:13px;
width:208px;
z-index:103;
top: 50%;
left: 50%;
margin: -6px 0 0 -104px; /* -height/2 0 0 -width/2 */
}
* html #TB_load { /* ie6 hack */
position: absolute;
margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');
}
#TB_HideSelect{
z-index:99;
position:fixed;
top: 0;
left: 0;
background-color:#fff;
border:none;
filter:alpha(opacity=0);
-moz-opacity: 0;
opacity: 0;
height:100%;
width:100%;
}
* html #TB_HideSelect { /* ie6 hack */
position: absolute;
height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px');
}
#TB_iframeContent{
clear:both;
border:none;
margin-bottom:-1px;
margin-top:1px;
margin-bottom:1px;
}
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=Pie.css
Content-Type: text/css; name=Pie.css
Content-Location: http://www.ine.es/menuapp/css/Pie.css
Content-Transfer-Encoding: 8bit
.Pie_TxtDireccion{
text-decoration: none;
font-family: Arial, Helvetica, sans-serif;
font-size: 0.75em;
color: #9E1B34;
margin: 0px;
outline: none;
padding: 0px;
position: relative;
clear: both;
text-align: center;
}
.Pie_TxtDireccion a:active , .Pie_TxtDireccion a:focus, .Pie_TxtDireccion a:hover, .Pie_TxtDireccion a:link, .Pie_TxtDireccion a:visited{
text-decoration: none;
font-family: Arial, Helvetica, sans-serif;
color: #9E1B34;
font-size: 1em;
margin: 0px;
outline: none;
padding: 0px;
position: relative;
}
div.Pie_TxtEnlaces{
clear: both;
text-align: center;
}
.Pie_TxtEnlacesBoderL{
border-left: 1px solid #9E1B34;
display: inline;
padding-left: 5px;
padding-right: 5px;
}
a.Pie_TxtEnlaces:active , a.Pie_TxtEnlaces:focus, a.Pie_TxtEnlaces:hover, a.Pie_TxtEnlaces:link, a.Pie_TxtEnlaces:visited{
text-decoration: none;
font-family: Arial, Helvetica, sans-serif;
font-size: 0.85em;
color: #9E1B34;
}
a.Pie_TxtEnlaces-thickbox{
text-decoration: none;
font-family: Arial, Helvetica, sans-serif;
font-size: 0.85em;
color: #9E1B34;
outline: none;
position: relative;
}
a.Pie_TxtEnlaces-thickbox:active , a.Pie_TxtEnlaces-thickbox:focus, a.Pie_TxtEnlaces-thickbox:hover, a.Pie_TxtEnlaces-thickbox:link, a.Pie_TxtEnlaces-thickbox:visited{
text-decoration: none;
font-family: Arial, Helvetica, sans-serif;
font-size: 0.85em;
color: #9E1B34;
outline: none;
position: relative;
}
div.PieLinHor{
padding-left: 0px;
padding-right: 0px;
}
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=jquery.js
Content-Type: application/javascript; name=jquery.js
Content-Location: http://www.ine.es/menuapp/js/jquery.js
Content-Transfer-Encoding: Base64
KGZ1bmN0aW9uKCl7Ci8qCiAqIGpRdWVyeSAxLjIuNiAtIE5ldyBXYXZlIEphdmFz
Y3JpcHQKICoKICogQ29weXJpZ2h0IChjKSAyMDA4IEpvaG4gUmVzaWcgKGpxdWVy
eS5jb20pCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCAoTUlULUxJQ0VO
U0UudHh0KQogKiBhbmQgR1BMIChHUEwtTElDRU5TRS50eHQpIGxpY2Vuc2VzLgog
KgogKiAkRGF0ZTogMjAwOC0wNS0yNCAxNDoyMjoxNyAtMDQwMCAoU2F0LCAyNCBN
YXkgMjAwOCkgJAogKiAkUmV2OiA1Njg1ICQKICovCgovLyBNYXAgb3ZlciBqUXVl
cnkgaW4gY2FzZSBvZiBvdmVyd3JpdGUKdmFyIF9qUXVlcnkgPSB3aW5kb3cualF1
ZXJ5LAovLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZQoJXyQg
PSB3aW5kb3cuJDsKCnZhciBqUXVlcnkgPSB3aW5kb3cualF1ZXJ5ID0gd2luZG93
LiQgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7CgkvLyBUaGUgalF1
ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9y
ICdlbmhhbmNlZCcKCXJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9y
LCBjb250ZXh0ICk7Cn07CgovLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhU
TUwgc3RyaW5ncyBvciBJRCBzdHJpbmdzCi8vIChib3RoIG9mIHdoaWNoIHdlIG9w
dGltaXplIGZvcikKdmFyIHF1aWNrRXhwciA9IC9eW148XSooPCgufFxzKSs+KVte
Pl0qJHxeIyhcdyspJC8sCgovLyBJcyBpdCBhIHNpbXBsZSBzZWxlY3RvcgoJaXNT
aW1wbGUgPSAvXi5bXjojXFtcLl0qJC8sCgovLyBXaWxsIHNwZWVkIHVwIHJlZmVy
ZW5jZXMgdG8gdW5kZWZpbmVkLCBhbmQgYWxsb3dzIG11bmdpbmcgaXRzIG5hbWUu
Cgl1bmRlZmluZWQ7CgpqUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0gewoJ
aW5pdDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkgewoJCS8vIE1ha2Ug
c3VyZSB0aGF0IGEgc2VsZWN0aW9uIHdhcyBwcm92aWRlZAoJCXNlbGVjdG9yID0g
c2VsZWN0b3IgfHwgZG9jdW1lbnQ7CgoJCS8vIEhhbmRsZSAkKERPTUVsZW1lbnQp
CgkJaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHsKCQkJdGhpc1swXSA9IHNlbGVj
dG9yOwoJCQl0aGlzLmxlbmd0aCA9IDE7CgkJCXJldHVybiB0aGlzOwoJCX0KCQkv
LyBIYW5kbGUgSFRNTCBzdHJpbmdzCgkJaWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT0g
InN0cmluZyIgKSB7CgkJCS8vIEFyZSB3ZSBkZWFsaW5nIHdpdGggSFRNTCBzdHJp
bmcgb3IgYW4gSUQ/CgkJCXZhciBtYXRjaCA9IHF1aWNrRXhwci5leGVjKCBzZWxl
Y3RvciApOwoKCQkJLy8gVmVyaWZ5IGEgbWF0Y2gsIGFuZCB0aGF0IG5vIGNvbnRl
eHQgd2FzIHNwZWNpZmllZCBmb3IgI2lkCgkJCWlmICggbWF0Y2ggJiYgKG1hdGNo
WzFdIHx8ICFjb250ZXh0KSApIHsKCgkJCQkvLyBIQU5ETEU6ICQoaHRtbCkgLT4g
JChhcnJheSkKCQkJCWlmICggbWF0Y2hbMV0gKQoJCQkJCXNlbGVjdG9yID0galF1
ZXJ5LmNsZWFuKCBbIG1hdGNoWzFdIF0sIGNvbnRleHQgKTsKCgkJCQkvLyBIQU5E
TEU6ICQoIiNpZCIpCgkJCQllbHNlIHsKCQkJCQl2YXIgZWxlbSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCBtYXRjaFszXSApOwoKCQkJCQkvLyBNYWtlIHN1cmUg
YW4gZWxlbWVudCB3YXMgbG9jYXRlZAoJCQkJCWlmICggZWxlbSApewoJCQkJCQkv
LyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgSUUgYW5kIE9wZXJhIHJldHVybiBpdGVt
cwoJCQkJCQkvLyBieSBuYW1lIGluc3RlYWQgb2YgSUQKCQkJCQkJaWYgKCBlbGVt
LmlkICE9IG1hdGNoWzNdICkKCQkJCQkJCXJldHVybiBqUXVlcnkoKS5maW5kKCBz
ZWxlY3RvciApOwoKCQkJCQkJLy8gT3RoZXJ3aXNlLCB3ZSBpbmplY3QgdGhlIGVs
ZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdAoJCQkJCQlyZXR1
cm4galF1ZXJ5KCBlbGVtICk7CgkJCQkJfQoJCQkJCXNlbGVjdG9yID0gW107CgkJ
CQl9CgoJCQkvLyBIQU5ETEU6ICQoZXhwciwgW2NvbnRleHRdKQoJCQkvLyAod2hp
Y2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRlbnQpLmZpbmQoZXhwcikK
CQkJfSBlbHNlCgkJCQlyZXR1cm4galF1ZXJ5KCBjb250ZXh0ICkuZmluZCggc2Vs
ZWN0b3IgKTsKCgkJLy8gSEFORExFOiAkKGZ1bmN0aW9uKQoJCS8vIFNob3J0Y3V0
IGZvciBkb2N1bWVudCByZWFkeQoJCX0gZWxzZSBpZiAoIGpRdWVyeS5pc0Z1bmN0
aW9uKCBzZWxlY3RvciApICkKCQkJcmV0dXJuIGpRdWVyeSggZG9jdW1lbnQgKVsg
alF1ZXJ5LmZuLnJlYWR5ID8gInJlYWR5IiA6ICJsb2FkIiBdKCBzZWxlY3RvciAp
OwoKCQlyZXR1cm4gdGhpcy5zZXRBcnJheShqUXVlcnkubWFrZUFycmF5KHNlbGVj
dG9yKSk7Cgl9LAoKCS8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJl
aW5nIHVzZWQKCWpxdWVyeTogIjEuMi42IiwKCgkvLyBUaGUgbnVtYmVyIG9mIGVs
ZW1lbnRzIGNvbnRhaW5lZCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldAoJc2l6
ZTogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHRoaXMubGVuZ3RoOwoJfSwKCgkvLyBU
aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGNvbnRhaW5lZCBpbiB0aGUgbWF0Y2hlZCBl
bGVtZW50IHNldAoJbGVuZ3RoOiAwLAoKCS8vIEdldCB0aGUgTnRoIGVsZW1lbnQg
aW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1IKCS8vIEdldCB0aGUgd2hvbGUg
bWF0Y2hlZCBlbGVtZW50IHNldCBhcyBhIGNsZWFuIGFycmF5CglnZXQ6IGZ1bmN0
aW9uKCBudW0gKSB7CgkJcmV0dXJuIG51bSA9PSB1bmRlZmluZWQgPwoKCQkJLy8g
UmV0dXJuIGEgJ2NsZWFuJyBhcnJheQoJCQlqUXVlcnkubWFrZUFycmF5KCB0aGlz
ICkgOgoKCQkJLy8gUmV0dXJuIGp1c3QgdGhlIG9iamVjdAoJCQl0aGlzWyBudW0g
XTsKCX0sCgoJLy8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBp
dCBvbnRvIHRoZSBzdGFjawoJLy8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQg
ZWxlbWVudCBzZXQpCglwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcyApIHsKCQkv
LyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldAoJCXZhciBy
ZXQgPSBqUXVlcnkoIGVsZW1zICk7CgoJCS8vIEFkZCB0aGUgb2xkIG9iamVjdCBv
bnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpCgkJcmV0LnByZXZPYmplY3Qg
PSB0aGlzOwoKCQkvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNl
dAoJCXJldHVybiByZXQ7Cgl9LAoKCS8vIEZvcmNlIHRoZSBjdXJyZW50IG1hdGNo
ZWQgc2V0IG9mIGVsZW1lbnRzIHRvIGJlY29tZQoJLy8gdGhlIHNwZWNpZmllZCBh
cnJheSBvZiBlbGVtZW50cyAoZGVzdHJveWluZyB0aGUgc3RhY2sgaW4gdGhlIHBy
b2Nlc3MpCgkvLyBZb3Ugc2hvdWxkIHVzZSBwdXNoU3RhY2soKSBpbiBvcmRlciB0
byBkbyB0aGlzLCBidXQgbWFpbnRhaW4gdGhlIHN0YWNrCglzZXRBcnJheTogZnVu
Y3Rpb24oIGVsZW1zICkgewoJCS8vIFJlc2V0dGluZyB0aGUgbGVuZ3RoIHRvIDAs
IHRoZW4gdXNpbmcgdGhlIG5hdGl2ZSBBcnJheSBwdXNoCgkJLy8gaXMgYSBzdXBl
ci1mYXN0IHdheSB0byBwb3B1bGF0ZSBhbiBvYmplY3Qgd2l0aCBhcnJheS1saWtl
IHByb3BlcnRpZXMKCQl0aGlzLmxlbmd0aCA9IDA7CgkJQXJyYXkucHJvdG90eXBl
LnB1c2guYXBwbHkoIHRoaXMsIGVsZW1zICk7CgoJCXJldHVybiB0aGlzOwoJfSwK
CgkvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhl
IG1hdGNoZWQgc2V0LgoJLy8gKFlvdSBjYW4gc2VlZCB0aGUgYXJndW1lbnRzIHdp
dGggYW4gYXJyYXkgb2YgYXJncywgYnV0IHRoaXMgaXMKCS8vIG9ubHkgdXNlZCBp
bnRlcm5hbGx5LikKCWVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjaywgYXJncyApIHsK
CQlyZXR1cm4galF1ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrLCBhcmdzICk7Cgl9
LAoKCS8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRo
aW4KCS8vIHRoZSBtYXRjaGVkIHNldCBvZiBlbGVtZW50cwoJaW5kZXg6IGZ1bmN0
aW9uKCBlbGVtICkgewoJCXZhciByZXQgPSAtMTsKCgkJLy8gTG9jYXRlIHRoZSBw
b3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50CgkJcmV0dXJuIGpRdWVyeS5p
bkFycmF5KAoJCQkvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRo
ZSBmaXJzdCBlbGVtZW50IGlzIHVzZWQKCQkJZWxlbSAmJiBlbGVtLmpxdWVyeSA/
IGVsZW1bMF0gOiBlbGVtCgkJLCB0aGlzICk7Cgl9LAoKCWF0dHI6IGZ1bmN0aW9u
KCBuYW1lLCB2YWx1ZSwgdHlwZSApIHsKCQl2YXIgb3B0aW9ucyA9IG5hbWU7CgoJ
CS8vIExvb2sgZm9yIHRoZSBjYXNlIHdoZXJlIHdlJ3JlIGFjY2Vzc2luZyBhIHN0
eWxlIHZhbHVlCgkJaWYgKCBuYW1lLmNvbnN0cnVjdG9yID09IFN0cmluZyApCgkJ
CWlmICggdmFsdWUgPT09IHVuZGVmaW5lZCApCgkJCQlyZXR1cm4gdGhpc1swXSAm
JiBqUXVlcnlbIHR5cGUgfHwgImF0dHIiIF0oIHRoaXNbMF0sIG5hbWUgKTsKCgkJ
CWVsc2UgewoJCQkJb3B0aW9ucyA9IHt9OwoJCQkJb3B0aW9uc1sgbmFtZSBdID0g
dmFsdWU7CgkJCX0KCgkJLy8gQ2hlY2sgdG8gc2VlIGlmIHdlJ3JlIHNldHRpbmcg
c3R5bGUgdmFsdWVzCgkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKXsKCQkJ
Ly8gU2V0IGFsbCB0aGUgc3R5bGVzCgkJCWZvciAoIG5hbWUgaW4gb3B0aW9ucyAp
CgkJCQlqUXVlcnkuYXR0cigKCQkJCQl0eXBlID8KCQkJCQkJdGhpcy5zdHlsZSA6
CgkJCQkJCXRoaXMsCgkJCQkJbmFtZSwgalF1ZXJ5LnByb3AoIHRoaXMsIG9wdGlv
bnNbIG5hbWUgXSwgdHlwZSwgaSwgbmFtZSApCgkJCQkpOwoJCX0pOwoJfSwKCglj
c3M6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgewoJCS8vIGlnbm9yZSBuZWdhdGl2
ZSB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcwoJCWlmICggKGtleSA9PSAnd2lkdGgn
IHx8IGtleSA9PSAnaGVpZ2h0JykgJiYgcGFyc2VGbG9hdCh2YWx1ZSkgPCAwICkK
CQkJdmFsdWUgPSB1bmRlZmluZWQ7CgkJcmV0dXJuIHRoaXMuYXR0cigga2V5LCB2
YWx1ZSwgImN1ckNTUyIgKTsKCX0sCgoJdGV4dDogZnVuY3Rpb24oIHRleHQgKSB7
CgkJaWYgKCB0eXBlb2YgdGV4dCAhPSAib2JqZWN0IiAmJiB0ZXh0ICE9IG51bGwg
KQoJCQlyZXR1cm4gdGhpcy5lbXB0eSgpLmFwcGVuZCggKHRoaXNbMF0gJiYgdGhp
c1swXS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50KS5jcmVhdGVUZXh0Tm9kZSgg
dGV4dCApICk7CgoJCXZhciByZXQgPSAiIjsKCgkJalF1ZXJ5LmVhY2goIHRleHQg
fHwgdGhpcywgZnVuY3Rpb24oKXsKCQkJalF1ZXJ5LmVhY2goIHRoaXMuY2hpbGRO
b2RlcywgZnVuY3Rpb24oKXsKCQkJCWlmICggdGhpcy5ub2RlVHlwZSAhPSA4ICkK
CQkJCQlyZXQgKz0gdGhpcy5ub2RlVHlwZSAhPSAxID8KCQkJCQkJdGhpcy5ub2Rl
VmFsdWUgOgoJCQkJCQlqUXVlcnkuZm4udGV4dCggWyB0aGlzIF0gKTsKCQkJfSk7
CgkJfSk7CgoJCXJldHVybiByZXQ7Cgl9LAoKCXdyYXBBbGw6IGZ1bmN0aW9uKCBo
dG1sICkgewoJCWlmICggdGhpc1swXSApCgkJCS8vIFRoZSBlbGVtZW50cyB0byB3
cmFwIHRoZSB0YXJnZXQgYXJvdW5kCgkJCWpRdWVyeSggaHRtbCwgdGhpc1swXS5v
d25lckRvY3VtZW50ICkKCQkJCS5jbG9uZSgpCgkJCQkuaW5zZXJ0QmVmb3JlKCB0
aGlzWzBdICkKCQkJCS5tYXAoZnVuY3Rpb24oKXsKCQkJCQl2YXIgZWxlbSA9IHRo
aXM7CgoJCQkJCXdoaWxlICggZWxlbS5maXJzdENoaWxkICkKCQkJCQkJZWxlbSA9
IGVsZW0uZmlyc3RDaGlsZDsKCgkJCQkJcmV0dXJuIGVsZW07CgkJCQl9KQoJCQkJ
LmFwcGVuZCh0aGlzKTsKCgkJcmV0dXJuIHRoaXM7Cgl9LAoKCXdyYXBJbm5lcjog
ZnVuY3Rpb24oIGh0bWwgKSB7CgkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigp
ewoJCQlqUXVlcnkoIHRoaXMgKS5jb250ZW50cygpLndyYXBBbGwoIGh0bWwgKTsK
CQl9KTsKCX0sCgoJd3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7CgkJcmV0dXJuIHRo
aXMuZWFjaChmdW5jdGlvbigpewoJCQlqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBo
dG1sICk7CgkJfSk7Cgl9LAoKCWFwcGVuZDogZnVuY3Rpb24oKSB7CgkJcmV0dXJu
IHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCB0cnVlLCBmYWxzZSwgZnVuY3Rpb24o
ZWxlbSl7CgkJCWlmICh0aGlzLm5vZGVUeXBlID09IDEpCgkJCQl0aGlzLmFwcGVu
ZENoaWxkKCBlbGVtICk7CgkJfSk7Cgl9LAoKCXByZXBlbmQ6IGZ1bmN0aW9uKCkg
ewoJCXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgdHJ1ZSwgdHJ1ZSwg
ZnVuY3Rpb24oZWxlbSl7CgkJCWlmICh0aGlzLm5vZGVUeXBlID09IDEpCgkJCQl0
aGlzLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5maXJzdENoaWxkICk7CgkJfSk7
Cgl9LAoKCWJlZm9yZTogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHRoaXMuZG9tTWFu
aXAoYXJndW1lbnRzLCBmYWxzZSwgZmFsc2UsIGZ1bmN0aW9uKGVsZW0pewoJCQl0
aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7CgkJfSk7
Cgl9LAoKCWFmdGVyOiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdGhpcy5kb21NYW5p
cChhcmd1bWVudHMsIGZhbHNlLCB0cnVlLCBmdW5jdGlvbihlbGVtKXsKCQkJdGhp
cy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGlu
ZyApOwoJCX0pOwoJfSwKCgllbmQ6IGZ1bmN0aW9uKCkgewoJCXJldHVybiB0aGlz
LnByZXZPYmplY3QgfHwgalF1ZXJ5KCBbXSApOwoJfSwKCglmaW5kOiBmdW5jdGlv
biggc2VsZWN0b3IgKSB7CgkJdmFyIGVsZW1zID0galF1ZXJ5Lm1hcCh0aGlzLCBm
dW5jdGlvbihlbGVtKXsKCQkJcmV0dXJuIGpRdWVyeS5maW5kKCBzZWxlY3Rvciwg
ZWxlbSApOwoJCX0pOwoKCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIC9bXis+XSBb
Xis+XS8udGVzdCggc2VsZWN0b3IgKSB8fCBzZWxlY3Rvci5pbmRleE9mKCIuLiIp
ID4gLTEgPwoJCQlqUXVlcnkudW5pcXVlKCBlbGVtcyApIDoKCQkJZWxlbXMgKTsK
CX0sCgoJY2xvbmU6IGZ1bmN0aW9uKCBldmVudHMgKSB7CgkJLy8gRG8gdGhlIGNs
b25lCgkJdmFyIHJldCA9IHRoaXMubWFwKGZ1bmN0aW9uKCl7CgkJCWlmICggalF1
ZXJ5LmJyb3dzZXIubXNpZSAmJiAhalF1ZXJ5LmlzWE1MRG9jKHRoaXMpICkgewoJ
CQkJLy8gSUUgY29waWVzIGV2ZW50cyBib3VuZCB2aWEgYXR0YWNoRXZlbnQgd2hl
bgoJCQkJLy8gdXNpbmcgY2xvbmVOb2RlLiBDYWxsaW5nIGRldGFjaEV2ZW50IG9u
IHRoZQoJCQkJLy8gY2xvbmUgd2lsbCBhbHNvIHJlbW92ZSB0aGUgZXZlbnRzIGZy
b20gdGhlIG9yaWduYWwKCQkJCS8vIEluIG9yZGVyIHRvIGdldCBhcm91bmQgdGhp
cywgd2UgdXNlIGlubmVySFRNTC4KCQkJCS8vIFVuZm9ydHVuYXRlbHksIHRoaXMg
bWVhbnMgc29tZSBtb2RpZmljYXRpb25zIHRvCgkJCQkvLyBhdHRyaWJ1dGVzIGlu
IElFIHRoYXQgYXJlIGFjdHVhbGx5IG9ubHkgc3RvcmVkCgkJCQkvLyBhcyBwcm9w
ZXJ0aWVzIHdpbGwgbm90IGJlIGNvcGllZCAoc3VjaCBhcyB0aGUKCQkJCS8vIHRo
ZSBuYW1lIGF0dHJpYnV0ZSBvbiBhbiBpbnB1dCkuCgkJCQl2YXIgY2xvbmUgPSB0
aGlzLmNsb25lTm9kZSh0cnVlKSwKCQkJCQljb250YWluZXIgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkaXYiKTsKCQkJCWNvbnRhaW5lci5hcHBlbmRDaGlsZChj
bG9uZSk7CgkJCQlyZXR1cm4galF1ZXJ5LmNsZWFuKFtjb250YWluZXIuaW5uZXJI
VE1MXSlbMF07CgkJCX0gZWxzZQoJCQkJcmV0dXJuIHRoaXMuY2xvbmVOb2RlKHRy
dWUpOwoJCX0pOwoKCQkvLyBOZWVkIHRvIHNldCB0aGUgZXhwYW5kbyB0byBudWxs
IG9uIHRoZSBjbG9uZWQgc2V0IGlmIGl0IGV4aXN0cwoJCS8vIHJlbW92ZURhdGEg
ZG9lc24ndCB3b3JrIGhlcmUsIElFIHJlbW92ZXMgaXQgZnJvbSB0aGUgb3JpZ2lu
YWwgYXMgd2VsbAoJCS8vIHRoaXMgaXMgcHJpbWFyaWx5IGZvciBJRSBidXQgdGhl
IGRhdGEgZXhwYW5kbyBzaG91bGRuJ3QgYmUgY29waWVkIG92ZXIgaW4gYW55IGJy
b3dzZXIKCQl2YXIgY2xvbmUgPSByZXQuZmluZCgiKiIpLmFuZFNlbGYoKS5lYWNo
KGZ1bmN0aW9uKCl7CgkJCWlmICggdGhpc1sgZXhwYW5kbyBdICE9IHVuZGVmaW5l
ZCApCgkJCQl0aGlzWyBleHBhbmRvIF0gPSBudWxsOwoJCX0pOwoKCQkvLyBDb3B5
IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lCgkJaWYg
KCBldmVudHMgPT09IHRydWUgKQoJCQl0aGlzLmZpbmQoIioiKS5hbmRTZWxmKCku
ZWFjaChmdW5jdGlvbihpKXsKCQkJCWlmICh0aGlzLm5vZGVUeXBlID09IDMpCgkJ
CQkJcmV0dXJuOwoJCQkJdmFyIGV2ZW50cyA9IGpRdWVyeS5kYXRhKCB0aGlzLCAi
ZXZlbnRzIiApOwoKCQkJCWZvciAoIHZhciB0eXBlIGluIGV2ZW50cyApCgkJCQkJ
Zm9yICggdmFyIGhhbmRsZXIgaW4gZXZlbnRzWyB0eXBlIF0gKQoJCQkJCQlqUXVl
cnkuZXZlbnQuYWRkKCBjbG9uZVsgaSBdLCB0eXBlLCBldmVudHNbIHR5cGUgXVsg
aGFuZGxlciBdLCBldmVudHNbIHR5cGUgXVsgaGFuZGxlciBdLmRhdGEgKTsKCQkJ
fSk7CgoJCS8vIFJldHVybiB0aGUgY2xvbmVkIHNldAoJCXJldHVybiByZXQ7Cgl9
LAoKCWZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkgewoJCXJldHVybiB0aGlz
LnB1c2hTdGFjaygKCQkJalF1ZXJ5LmlzRnVuY3Rpb24oIHNlbGVjdG9yICkgJiYK
CQkJalF1ZXJ5LmdyZXAodGhpcywgZnVuY3Rpb24oZWxlbSwgaSl7CgkJCQlyZXR1
cm4gc2VsZWN0b3IuY2FsbCggZWxlbSwgaSApOwoJCQl9KSB8fAoKCQkJalF1ZXJ5
Lm11bHRpRmlsdGVyKCBzZWxlY3RvciwgdGhpcyApICk7Cgl9LAoKCW5vdDogZnVu
Y3Rpb24oIHNlbGVjdG9yICkgewoJCWlmICggc2VsZWN0b3IuY29uc3RydWN0b3Ig
PT0gU3RyaW5nICkKCQkJLy8gdGVzdCBzcGVjaWFsIGNhc2Ugd2hlcmUganVzdCBv
bmUgc2VsZWN0b3IgaXMgcGFzc2VkIGluCgkJCWlmICggaXNTaW1wbGUudGVzdCgg
c2VsZWN0b3IgKSApCgkJCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5t
dWx0aUZpbHRlciggc2VsZWN0b3IsIHRoaXMsIHRydWUgKSApOwoJCQllbHNlCgkJ
CQlzZWxlY3RvciA9IGpRdWVyeS5tdWx0aUZpbHRlciggc2VsZWN0b3IsIHRoaXMg
KTsKCgkJdmFyIGlzQXJyYXlMaWtlID0gc2VsZWN0b3IubGVuZ3RoICYmIHNlbGVj
dG9yW3NlbGVjdG9yLmxlbmd0aCAtIDFdICE9PSB1bmRlZmluZWQgJiYgIXNlbGVj
dG9yLm5vZGVUeXBlOwoJCXJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpIHsK
CQkJcmV0dXJuIGlzQXJyYXlMaWtlID8galF1ZXJ5LmluQXJyYXkoIHRoaXMsIHNl
bGVjdG9yICkgPCAwIDogdGhpcyAhPSBzZWxlY3RvcjsKCQl9KTsKCX0sCgoJYWRk
OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CgkJcmV0dXJuIHRoaXMucHVzaFN0YWNr
KCBqUXVlcnkudW5pcXVlKCBqUXVlcnkubWVyZ2UoCgkJCXRoaXMuZ2V0KCksCgkJ
CXR5cGVvZiBzZWxlY3RvciA9PSAnc3RyaW5nJyA/CgkJCQlqUXVlcnkoIHNlbGVj
dG9yICkgOgoJCQkJalF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IgKQoJCSkpKTsK
CX0sCgoJaXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKCQlyZXR1cm4gISFzZWxl
Y3RvciAmJiBqUXVlcnkubXVsdGlGaWx0ZXIoIHNlbGVjdG9yLCB0aGlzICkubGVu
Z3RoID4gMDsKCX0sCgoJaGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsK
CQlyZXR1cm4gdGhpcy5pcyggIi4iICsgc2VsZWN0b3IgKTsKCX0sCgoJdmFsOiBm
dW5jdGlvbiggdmFsdWUgKSB7CgkJaWYgKCB2YWx1ZSA9PSB1bmRlZmluZWQgKSB7
CgoJCQlpZiAoIHRoaXMubGVuZ3RoICkgewoJCQkJdmFyIGVsZW0gPSB0aGlzWzBd
OwoKCQkJCS8vIFdlIG5lZWQgdG8gaGFuZGxlIHNlbGVjdCBib3hlcyBzcGVjaWFs
CgkJCQlpZiAoIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgInNlbGVjdCIgKSApIHsK
CQkJCQl2YXIgaW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsCgkJCQkJCXZhbHVl
cyA9IFtdLAoJCQkJCQlvcHRpb25zID0gZWxlbS5vcHRpb25zLAoJCQkJCQlvbmUg
PSBlbGVtLnR5cGUgPT0gInNlbGVjdC1vbmUiOwoKCQkJCQkvLyBOb3RoaW5nIHdh
cyBzZWxlY3RlZAoJCQkJCWlmICggaW5kZXggPCAwICkKCQkJCQkJcmV0dXJuIG51
bGw7CgoJCQkJCS8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlv
bnMKCQkJCQlmb3IgKCB2YXIgaSA9IG9uZSA/IGluZGV4IDogMCwgbWF4ID0gb25l
ID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGg7IGkgPCBtYXg7IGkrKyApIHsK
CQkJCQkJdmFyIG9wdGlvbiA9IG9wdGlvbnNbIGkgXTsKCgkJCQkJCWlmICggb3B0
aW9uLnNlbGVjdGVkICkgewoJCQkJCQkJLy8gR2V0IHRoZSBzcGVjaWZjIHZhbHVl
IGZvciB0aGUgb3B0aW9uCgkJCQkJCQl2YWx1ZSA9IGpRdWVyeS5icm93c2VyLm1z
aWUgJiYgIW9wdGlvbi5hdHRyaWJ1dGVzLnZhbHVlLnNwZWNpZmllZCA/IG9wdGlv
bi50ZXh0IDogb3B0aW9uLnZhbHVlOwoKCQkJCQkJCS8vIFdlIGRvbid0IG5lZWQg
YW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzCgkJCQkJCQlpZiAoIG9uZSApCgkJCQkJ
CQkJcmV0dXJuIHZhbHVlOwoKCQkJCQkJCS8vIE11bHRpLVNlbGVjdHMgcmV0dXJu
IGFuIGFycmF5CgkJCQkJCQl2YWx1ZXMucHVzaCggdmFsdWUgKTsKCQkJCQkJfQoJ
CQkJCX0KCgkJCQkJcmV0dXJuIHZhbHVlczsKCgkJCQkvLyBFdmVyeXRoaW5nIGVs
c2UsIHdlIGp1c3QgZ3JhYiB0aGUgdmFsdWUKCQkJCX0gZWxzZQoJCQkJCXJldHVy
biAodGhpc1swXS52YWx1ZSB8fCAiIikucmVwbGFjZSgvXHIvZywgIiIpOwoKCQkJ
fQoKCQkJcmV0dXJuIHVuZGVmaW5lZDsKCQl9CgoJCWlmKCB2YWx1ZS5jb25zdHJ1
Y3RvciA9PSBOdW1iZXIgKQoJCQl2YWx1ZSArPSAnJzsKCgkJcmV0dXJuIHRoaXMu
ZWFjaChmdW5jdGlvbigpewoJCQlpZiAoIHRoaXMubm9kZVR5cGUgIT0gMSApCgkJ
CQlyZXR1cm47CgoJCQlpZiAoIHZhbHVlLmNvbnN0cnVjdG9yID09IEFycmF5ICYm
IC9yYWRpb3xjaGVja2JveC8udGVzdCggdGhpcy50eXBlICkgKQoJCQkJdGhpcy5j
aGVja2VkID0gKGpRdWVyeS5pbkFycmF5KHRoaXMudmFsdWUsIHZhbHVlKSA+PSAw
IHx8CgkJCQkJalF1ZXJ5LmluQXJyYXkodGhpcy5uYW1lLCB2YWx1ZSkgPj0gMCk7
CgoJCQllbHNlIGlmICggalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAic2VsZWN0IiAp
ICkgewoJCQkJdmFyIHZhbHVlcyA9IGpRdWVyeS5tYWtlQXJyYXkodmFsdWUpOwoK
CQkJCWpRdWVyeSggIm9wdGlvbiIsIHRoaXMgKS5lYWNoKGZ1bmN0aW9uKCl7CgkJ
CQkJdGhpcy5zZWxlY3RlZCA9IChqUXVlcnkuaW5BcnJheSggdGhpcy52YWx1ZSwg
dmFsdWVzICkgPj0gMCB8fAoJCQkJCQlqUXVlcnkuaW5BcnJheSggdGhpcy50ZXh0
LCB2YWx1ZXMgKSA+PSAwKTsKCQkJCX0pOwoKCQkJCWlmICggIXZhbHVlcy5sZW5n
dGggKQoJCQkJCXRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xOwoKCQkJfSBlbHNlCgkJ
CQl0aGlzLnZhbHVlID0gdmFsdWU7CgkJfSk7Cgl9LAoKCWh0bWw6IGZ1bmN0aW9u
KCB2YWx1ZSApIHsKCQlyZXR1cm4gdmFsdWUgPT0gdW5kZWZpbmVkID8KCQkJKHRo
aXNbMF0gPwoJCQkJdGhpc1swXS5pbm5lckhUTUwgOgoJCQkJbnVsbCkgOgoJCQl0
aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApOwoJfSwKCglyZXBsYWNlV2l0aDog
ZnVuY3Rpb24oIHZhbHVlICkgewoJCXJldHVybiB0aGlzLmFmdGVyKCB2YWx1ZSAp
LnJlbW92ZSgpOwoJfSwKCgllcTogZnVuY3Rpb24oIGkgKSB7CgkJcmV0dXJuIHRo
aXMuc2xpY2UoIGksIGkgKyAxICk7Cgl9LAoKCXNsaWNlOiBmdW5jdGlvbigpIHsK
CQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIEFycmF5LnByb3RvdHlwZS5zbGljZS5h
cHBseSggdGhpcywgYXJndW1lbnRzICkgKTsKCX0sCgoJbWFwOiBmdW5jdGlvbigg
Y2FsbGJhY2sgKSB7CgkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFw
KHRoaXMsIGZ1bmN0aW9uKGVsZW0sIGkpewoJCQlyZXR1cm4gY2FsbGJhY2suY2Fs
bCggZWxlbSwgaSwgZWxlbSApOwoJCX0pKTsKCX0sCgoJYW5kU2VsZjogZnVuY3Rp
b24oKSB7CgkJcmV0dXJuIHRoaXMuYWRkKCB0aGlzLnByZXZPYmplY3QgKTsKCX0s
CgoJZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKXsKCQl2YXIgcGFydHMgPSBr
ZXkuc3BsaXQoIi4iKTsKCQlwYXJ0c1sxXSA9IHBhcnRzWzFdID8gIi4iICsgcGFy
dHNbMV0gOiAiIjsKCgkJaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgewoJCQl2
YXIgZGF0YSA9IHRoaXMudHJpZ2dlckhhbmRsZXIoImdldERhdGEiICsgcGFydHNb
MV0gKyAiISIsIFtwYXJ0c1swXV0pOwoKCQkJaWYgKCBkYXRhID09PSB1bmRlZmlu
ZWQgJiYgdGhpcy5sZW5ndGggKQoJCQkJZGF0YSA9IGpRdWVyeS5kYXRhKCB0aGlz
WzBdLCBrZXkgKTsKCgkJCXJldHVybiBkYXRhID09PSB1bmRlZmluZWQgJiYgcGFy
dHNbMV0gPwoJCQkJdGhpcy5kYXRhKCBwYXJ0c1swXSApIDoKCQkJCWRhdGE7CgkJ
fSBlbHNlCgkJCXJldHVybiB0aGlzLnRyaWdnZXIoInNldERhdGEiICsgcGFydHNb
MV0gKyAiISIsIFtwYXJ0c1swXSwgdmFsdWVdKS5lYWNoKGZ1bmN0aW9uKCl7CgkJ
CQlqUXVlcnkuZGF0YSggdGhpcywga2V5LCB2YWx1ZSApOwoJCQl9KTsKCX0sCgoJ
cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApewoJCXJldHVybiB0aGlzLmVhY2go
ZnVuY3Rpb24oKXsKCQkJalF1ZXJ5LnJlbW92ZURhdGEoIHRoaXMsIGtleSApOwoJ
CX0pOwoJfSwKCglkb21NYW5pcDogZnVuY3Rpb24oIGFyZ3MsIHRhYmxlLCByZXZl
cnNlLCBjYWxsYmFjayApIHsKCQl2YXIgY2xvbmUgPSB0aGlzLmxlbmd0aCA+IDEs
IGVsZW1zOwoKCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7CgkJCWlmICgg
IWVsZW1zICkgewoJCQkJZWxlbXMgPSBqUXVlcnkuY2xlYW4oIGFyZ3MsIHRoaXMu
b3duZXJEb2N1bWVudCApOwoKCQkJCWlmICggcmV2ZXJzZSApCgkJCQkJZWxlbXMu
cmV2ZXJzZSgpOwoJCQl9CgoJCQl2YXIgb2JqID0gdGhpczsKCgkJCWlmICggdGFi
bGUgJiYgalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAidGFibGUiICkgJiYgalF1ZXJ5
Lm5vZGVOYW1lKCBlbGVtc1swXSwgInRyIiApICkKCQkJCW9iaiA9IHRoaXMuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF0gfHwgdGhpcy5hcHBlbmRDaGls
ZCggdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikgKTsK
CgkJCXZhciBzY3JpcHRzID0galF1ZXJ5KCBbXSApOwoKCQkJalF1ZXJ5LmVhY2go
ZWxlbXMsIGZ1bmN0aW9uKCl7CgkJCQl2YXIgZWxlbSA9IGNsb25lID8KCQkJCQlq
UXVlcnkoIHRoaXMgKS5jbG9uZSggdHJ1ZSApWzBdIDoKCQkJCQl0aGlzOwoKCQkJ
CS8vIGV4ZWN1dGUgYWxsIHNjcmlwdHMgYWZ0ZXIgdGhlIGVsZW1lbnRzIGhhdmUg
YmVlbiBpbmplY3RlZAoJCQkJaWYgKCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJz
Y3JpcHQiICkgKQoJCQkJCXNjcmlwdHMgPSBzY3JpcHRzLmFkZCggZWxlbSApOwoJ
CQkJZWxzZSB7CgkJCQkJLy8gUmVtb3ZlIGFueSBpbm5lciBzY3JpcHRzIGZvciBs
YXRlciBldmFsdWF0aW9uCgkJCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09IDEgKQoJ
CQkJCQlzY3JpcHRzID0gc2NyaXB0cy5hZGQoIGpRdWVyeSggInNjcmlwdCIsIGVs
ZW0gKS5yZW1vdmUoKSApOwoKCQkJCQkvLyBJbmplY3QgdGhlIGVsZW1lbnRzIGlu
dG8gdGhlIGRvY3VtZW50CgkJCQkJY2FsbGJhY2suY2FsbCggb2JqLCBlbGVtICk7
CgkJCQl9CgkJCX0pOwoKCQkJc2NyaXB0cy5lYWNoKCBldmFsU2NyaXB0ICk7CgkJ
fSk7Cgl9Cn07CgovLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkg
cHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uCmpRdWVyeS5mbi5pbml0
LnByb3RvdHlwZSA9IGpRdWVyeS5mbjsKCmZ1bmN0aW9uIGV2YWxTY3JpcHQoIGks
IGVsZW0gKSB7CglpZiAoIGVsZW0uc3JjICkKCQlqUXVlcnkuYWpheCh7CgkJCXVy
bDogZWxlbS5zcmMsCgkJCWFzeW5jOiBmYWxzZSwKCQkJZGF0YVR5cGU6ICJzY3Jp
cHQiCgkJfSk7CgoJZWxzZQoJCWpRdWVyeS5nbG9iYWxFdmFsKCBlbGVtLnRleHQg
fHwgZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVySFRNTCB8fCAiIiApOwoK
CWlmICggZWxlbS5wYXJlbnROb2RlICkKCQllbGVtLnBhcmVudE5vZGUucmVtb3Zl
Q2hpbGQoIGVsZW0gKTsKfQoKZnVuY3Rpb24gbm93KCl7CglyZXR1cm4gK25ldyBE
YXRlOwp9CgpqUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0
aW9uKCkgewoJLy8gY29weSByZWZlcmVuY2UgdG8gdGFyZ2V0IG9iamVjdAoJdmFy
IHRhcmdldCA9IGFyZ3VtZW50c1swXSB8fCB7fSwgaSA9IDEsIGxlbmd0aCA9IGFy
Z3VtZW50cy5sZW5ndGgsIGRlZXAgPSBmYWxzZSwgb3B0aW9uczsKCgkvLyBIYW5k
bGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uCglpZiAoIHRhcmdldC5jb25zdHJ1Y3Rv
ciA9PSBCb29sZWFuICkgewoJCWRlZXAgPSB0YXJnZXQ7CgkJdGFyZ2V0ID0gYXJn
dW1lbnRzWzFdIHx8IHt9OwoJCS8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0
YXJnZXQKCQlpID0gMjsKCX0KCgkvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBp
cyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSkK
CWlmICggdHlwZW9mIHRhcmdldCAhPSAib2JqZWN0IiAmJiB0eXBlb2YgdGFyZ2V0
ICE9ICJmdW5jdGlvbiIgKQoJCXRhcmdldCA9IHt9OwoKCS8vIGV4dGVuZCBqUXVl
cnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZAoJaWYgKCBs
ZW5ndGggPT0gaSApIHsKCQl0YXJnZXQgPSB0aGlzOwoJCS0taTsKCX0KCglmb3Ig
KCA7IGkgPCBsZW5ndGg7IGkrKyApCgkJLy8gT25seSBkZWFsIHdpdGggbm9uLW51
bGwvdW5kZWZpbmVkIHZhbHVlcwoJCWlmICggKG9wdGlvbnMgPSBhcmd1bWVudHNb
IGkgXSkgIT0gbnVsbCApCgkJCS8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3QKCQkJ
Zm9yICggdmFyIG5hbWUgaW4gb3B0aW9ucyApIHsKCQkJCXZhciBzcmMgPSB0YXJn
ZXRbIG5hbWUgXSwgY29weSA9IG9wdGlvbnNbIG5hbWUgXTsKCgkJCQkvLyBQcmV2
ZW50IG5ldmVyLWVuZGluZyBsb29wCgkJCQlpZiAoIHRhcmdldCA9PT0gY29weSAp
CgkJCQkJY29udGludWU7CgoJCQkJLy8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5n
IG9iamVjdCB2YWx1ZXMKCQkJCWlmICggZGVlcCAmJiBjb3B5ICYmIHR5cGVvZiBj
b3B5ID09ICJvYmplY3QiICYmICFjb3B5Lm5vZGVUeXBlICkKCQkJCQl0YXJnZXRb
IG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIAoJCQkJCQkvLyBOZXZlciBt
b3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW0KCQkJCQkJc3JjIHx8ICgg
Y29weS5sZW5ndGggIT0gbnVsbCA/IFsgXSA6IHsgfSApCgkJCQkJLCBjb3B5ICk7
CgoJCQkJLy8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlcwoJCQkJZWxz
ZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApCgkJCQkJdGFyZ2V0WyBuYW1lIF0g
PSBjb3B5OwoKCQkJfQoKCS8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0Cgly
ZXR1cm4gdGFyZ2V0Owp9OwoKdmFyIGV4cGFuZG8gPSAialF1ZXJ5IiArIG5vdygp
LCB1dWlkID0gMCwgd2luZG93RGF0YSA9IHt9LAoJLy8gZXhjbHVkZSB0aGUgZm9s
bG93aW5nIGNzcyBwcm9wZXJ0aWVzIHRvIGFkZCBweAoJZXhjbHVkZSA9IC96LT9p
bmRleHxmb250LT93ZWlnaHR8b3BhY2l0eXx6b29tfGxpbmUtP2hlaWdodC9pLAoJ
Ly8gY2FjaGUgZGVmYXVsdFZpZXcKCWRlZmF1bHRWaWV3ID0gZG9jdW1lbnQuZGVm
YXVsdFZpZXcgfHwge307CgpqUXVlcnkuZXh0ZW5kKHsKCW5vQ29uZmxpY3Q6IGZ1
bmN0aW9uKCBkZWVwICkgewoJCXdpbmRvdy4kID0gXyQ7CgoJCWlmICggZGVlcCAp
CgkJCXdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5OwoKCQlyZXR1cm4galF1ZXJ5OwoJ
fSwKCgkvLyBTZWUgdGVzdC91bml0L2NvcmUuanMgZm9yIGRldGFpbHMgY29uY2Vy
bmluZyB0aGlzIGZ1bmN0aW9uLgoJaXNGdW5jdGlvbjogZnVuY3Rpb24oIGZuICkg
ewoJCXJldHVybiAhIWZuICYmIHR5cGVvZiBmbiAhPSAic3RyaW5nIiAmJiAhZm4u
bm9kZU5hbWUgJiYKCQkJZm4uY29uc3RydWN0b3IgIT0gQXJyYXkgJiYgL15bXHNb
XT9mdW5jdGlvbi8udGVzdCggZm4gKyAiIiApOwoJfSwKCgkvLyBjaGVjayBpZiBh
biBlbGVtZW50IGlzIGluIGEgKG9yIGlzIGFuKSBYTUwgZG9jdW1lbnQKCWlzWE1M
RG9jOiBmdW5jdGlvbiggZWxlbSApIHsKCQlyZXR1cm4gZWxlbS5kb2N1bWVudEVs
ZW1lbnQgJiYgIWVsZW0uYm9keSB8fAoJCQllbGVtLnRhZ05hbWUgJiYgZWxlbS5v
d25lckRvY3VtZW50ICYmICFlbGVtLm93bmVyRG9jdW1lbnQuYm9keTsKCX0sCgoJ
Ly8gRXZhbHVsYXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0CglnbG9i
YWxFdmFsOiBmdW5jdGlvbiggZGF0YSApIHsKCQlkYXRhID0galF1ZXJ5LnRyaW0o
IGRhdGEgKTsKCgkJaWYgKCBkYXRhICkgewoJCQkvLyBJbnNwaXJlZCBieSBjb2Rl
IGJ5IEFuZHJlYSBHaWFtbWFyY2hpCgkJCS8vIGh0dHA6Ly93ZWJyZWZsZWN0aW9u
LmJsb2dzcG90LmNvbS8yMDA3LzA4L2dsb2JhbC1zY29wZS1ldmFsdWF0aW9uLWFu
ZC1kb20uaHRtbAoJCQl2YXIgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJoZWFkIilbMF0gfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAoJ
CQkJc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CgoJ
CQlzY3JpcHQudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiOwoJCQlpZiAoIGpRdWVy
eS5icm93c2VyLm1zaWUgKQoJCQkJc2NyaXB0LnRleHQgPSBkYXRhOwoJCQllbHNl
CgkJCQlzY3JpcHQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KCBkYXRhICkgKTsKCgkJCS8vIFVzZSBpbnNlcnRCZWZvcmUgaW5zdGVhZCBvZiBh
cHBlbmRDaGlsZCAgdG8gY2lyY3VtdmVudCBhbiBJRTYgYnVnLgoJCQkvLyBUaGlz
IGFyaXNlcyB3aGVuIGEgYmFzZSBub2RlIGlzIHVzZWQgKCMyNzA5KS4KCQkJaGVh
ZC5pbnNlcnRCZWZvcmUoIHNjcmlwdCwgaGVhZC5maXJzdENoaWxkICk7CgkJCWhl
YWQucmVtb3ZlQ2hpbGQoIHNjcmlwdCApOwoJCX0KCX0sCgoJbm9kZU5hbWU6IGZ1
bmN0aW9uKCBlbGVtLCBuYW1lICkgewoJCXJldHVybiBlbGVtLm5vZGVOYW1lICYm
IGVsZW0ubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PSBuYW1lLnRvVXBwZXJDYXNl
KCk7Cgl9LAoKCWNhY2hlOiB7fSwKCglkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFt
ZSwgZGF0YSApIHsKCQllbGVtID0gZWxlbSA9PSB3aW5kb3cgPwoJCQl3aW5kb3dE
YXRhIDoKCQkJZWxlbTsKCgkJdmFyIGlkID0gZWxlbVsgZXhwYW5kbyBdOwoKCQkv
LyBDb21wdXRlIGEgdW5pcXVlIElEIGZvciB0aGUgZWxlbWVudAoJCWlmICggIWlk
ICkKCQkJaWQgPSBlbGVtWyBleHBhbmRvIF0gPSArK3V1aWQ7CgoJCS8vIE9ubHkg
Z2VuZXJhdGUgdGhlIGRhdGEgY2FjaGUgaWYgd2UncmUKCQkvLyB0cnlpbmcgdG8g
YWNjZXNzIG9yIG1hbmlwdWxhdGUgaXQKCQlpZiAoIG5hbWUgJiYgIWpRdWVyeS5j
YWNoZVsgaWQgXSApCgkJCWpRdWVyeS5jYWNoZVsgaWQgXSA9IHt9OwoKCQkvLyBQ
cmV2ZW50IG92ZXJyaWRpbmcgdGhlIG5hbWVkIGNhY2hlIHdpdGggdW5kZWZpbmVk
IHZhbHVlcwoJCWlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkKCQkJalF1ZXJ5LmNh
Y2hlWyBpZCBdWyBuYW1lIF0gPSBkYXRhOwoKCQkvLyBSZXR1cm4gdGhlIG5hbWVk
IGNhY2hlIGRhdGEsIG9yIHRoZSBJRCBmb3IgdGhlIGVsZW1lbnQKCQlyZXR1cm4g
bmFtZSA/CgkJCWpRdWVyeS5jYWNoZVsgaWQgXVsgbmFtZSBdIDoKCQkJaWQ7Cgl9
LAoKCXJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewoJCWVsZW0g
PSBlbGVtID09IHdpbmRvdyA/CgkJCXdpbmRvd0RhdGEgOgoJCQllbGVtOwoKCQl2
YXIgaWQgPSBlbGVtWyBleHBhbmRvIF07CgoJCS8vIElmIHdlIHdhbnQgdG8gcmVt
b3ZlIGEgc3BlY2lmaWMgc2VjdGlvbiBvZiB0aGUgZWxlbWVudCdzIGRhdGEKCQlp
ZiAoIG5hbWUgKSB7CgkJCWlmICggalF1ZXJ5LmNhY2hlWyBpZCBdICkgewoJCQkJ
Ly8gUmVtb3ZlIHRoZSBzZWN0aW9uIG9mIGNhY2hlIGRhdGEKCQkJCWRlbGV0ZSBq
UXVlcnkuY2FjaGVbIGlkIF1bIG5hbWUgXTsKCgkJCQkvLyBJZiB3ZSd2ZSByZW1v
dmVkIGFsbCB0aGUgZGF0YSwgcmVtb3ZlIHRoZSBlbGVtZW50J3MgY2FjaGUKCQkJ
CW5hbWUgPSAiIjsKCgkJCQlmb3IgKCBuYW1lIGluIGpRdWVyeS5jYWNoZVsgaWQg
XSApCgkJCQkJYnJlYWs7CgoJCQkJaWYgKCAhbmFtZSApCgkJCQkJalF1ZXJ5LnJl
bW92ZURhdGEoIGVsZW0gKTsKCQkJfQoKCQkvLyBPdGhlcndpc2UsIHdlIHdhbnQg
dG8gcmVtb3ZlIGFsbCBvZiB0aGUgZWxlbWVudCdzIGRhdGEKCQl9IGVsc2UgewoJ
CQkvLyBDbGVhbiB1cCB0aGUgZWxlbWVudCBleHBhbmRvCgkJCXRyeSB7CgkJCQlk
ZWxldGUgZWxlbVsgZXhwYW5kbyBdOwoJCQl9IGNhdGNoKGUpewoJCQkJLy8gSUUg
aGFzIHRyb3VibGUgZGlyZWN0bHkgcmVtb3ZpbmcgdGhlIGV4cGFuZG8KCQkJCS8v
IGJ1dCBpdCdzIG9rIHdpdGggdXNpbmcgcmVtb3ZlQXR0cmlidXRlCgkJCQlpZiAo
IGVsZW0ucmVtb3ZlQXR0cmlidXRlICkKCQkJCQllbGVtLnJlbW92ZUF0dHJpYnV0
ZSggZXhwYW5kbyApOwoJCQl9CgoJCQkvLyBDb21wbGV0ZWx5IHJlbW92ZSB0aGUg
ZGF0YSBjYWNoZQoJCQlkZWxldGUgalF1ZXJ5LmNhY2hlWyBpZCBdOwoJCX0KCX0s
CgoJLy8gYXJncyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQoJZWFjaDogZnVu
Y3Rpb24oIG9iamVjdCwgY2FsbGJhY2ssIGFyZ3MgKSB7CgkJdmFyIG5hbWUsIGkg
PSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOwoKCQlpZiAoIGFyZ3MgKSB7CgkJ
CWlmICggbGVuZ3RoID09IHVuZGVmaW5lZCApIHsKCQkJCWZvciAoIG5hbWUgaW4g
b2JqZWN0ICkKCQkJCQlpZiAoIGNhbGxiYWNrLmFwcGx5KCBvYmplY3RbIG5hbWUg
XSwgYXJncyApID09PSBmYWxzZSApCgkJCQkJCWJyZWFrOwoJCQl9IGVsc2UKCQkJ
CWZvciAoIDsgaSA8IGxlbmd0aDsgKQoJCQkJCWlmICggY2FsbGJhY2suYXBwbHko
IG9iamVjdFsgaSsrIF0sIGFyZ3MgKSA9PT0gZmFsc2UgKQoJCQkJCQlicmVhazsK
CgkJLy8gQSBzcGVjaWFsLCBmYXN0LCBjYXNlIGZvciB0aGUgbW9zdCBjb21tb24g
dXNlIG9mIGVhY2gKCQl9IGVsc2UgewoJCQlpZiAoIGxlbmd0aCA9PSB1bmRlZmlu
ZWQgKSB7CgkJCQlmb3IgKCBuYW1lIGluIG9iamVjdCApCgkJCQkJaWYgKCBjYWxs
YmFjay5jYWxsKCBvYmplY3RbIG5hbWUgXSwgbmFtZSwgb2JqZWN0WyBuYW1lIF0g
KSA9PT0gZmFsc2UgKQoJCQkJCQlicmVhazsKCQkJfSBlbHNlCgkJCQlmb3IgKCB2
YXIgdmFsdWUgPSBvYmplY3RbMF07CgkJCQkJaSA8IGxlbmd0aCAmJiBjYWxsYmFj
ay5jYWxsKCB2YWx1ZSwgaSwgdmFsdWUgKSAhPT0gZmFsc2U7IHZhbHVlID0gb2Jq
ZWN0WysraV0gKXt9CgkJfQoKCQlyZXR1cm4gb2JqZWN0OwoJfSwKCglwcm9wOiBm
dW5jdGlvbiggZWxlbSwgdmFsdWUsIHR5cGUsIGksIG5hbWUgKSB7CgkJLy8gSGFu
ZGxlIGV4ZWN1dGFibGUgZnVuY3Rpb25zCgkJaWYgKCBqUXVlcnkuaXNGdW5jdGlv
biggdmFsdWUgKSApCgkJCXZhbHVlID0gdmFsdWUuY2FsbCggZWxlbSwgaSApOwoK
CQkvLyBIYW5kbGUgcGFzc2luZyBpbiBhIG51bWJlciB0byBhIENTUyBwcm9wZXJ0
eQoJCXJldHVybiB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvciA9PSBOdW1iZXIg
JiYgdHlwZSA9PSAiY3VyQ1NTIiAmJiAhZXhjbHVkZS50ZXN0KCBuYW1lICkgPwoJ
CQl2YWx1ZSArICJweCIgOgoJCQl2YWx1ZTsKCX0sCgoJY2xhc3NOYW1lOiB7CgkJ
Ly8gaW50ZXJuYWwgb25seSwgdXNlIGFkZENsYXNzKCJjbGFzcyIpCgkJYWRkOiBm
dW5jdGlvbiggZWxlbSwgY2xhc3NOYW1lcyApIHsKCQkJalF1ZXJ5LmVhY2goKGNs
YXNzTmFtZXMgfHwgIiIpLnNwbGl0KC9ccysvKSwgZnVuY3Rpb24oaSwgY2xhc3NO
YW1lKXsKCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PSAxICYmICFqUXVlcnkuY2xh
c3NOYW1lLmhhcyggZWxlbS5jbGFzc05hbWUsIGNsYXNzTmFtZSApICkKCQkJCQll
bGVtLmNsYXNzTmFtZSArPSAoZWxlbS5jbGFzc05hbWUgPyAiICIgOiAiIikgKyBj
bGFzc05hbWU7CgkJCX0pOwoJCX0sCgoJCS8vIGludGVybmFsIG9ubHksIHVzZSBy
ZW1vdmVDbGFzcygiY2xhc3MiKQoJCXJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIGNs
YXNzTmFtZXMgKSB7CgkJCWlmIChlbGVtLm5vZGVUeXBlID09IDEpCgkJCQllbGVt
LmNsYXNzTmFtZSA9IGNsYXNzTmFtZXMgIT0gdW5kZWZpbmVkID8KCQkJCQlqUXVl
cnkuZ3JlcChlbGVtLmNsYXNzTmFtZS5zcGxpdCgvXHMrLyksIGZ1bmN0aW9uKGNs
YXNzTmFtZSl7CgkJCQkJCXJldHVybiAhalF1ZXJ5LmNsYXNzTmFtZS5oYXMoIGNs
YXNzTmFtZXMsIGNsYXNzTmFtZSApOwoJCQkJCX0pLmpvaW4oIiAiKSA6CgkJCQkJ
IiI7CgkJfSwKCgkJLy8gaW50ZXJuYWwgb25seSwgdXNlIGhhc0NsYXNzKCJjbGFz
cyIpCgkJaGFzOiBmdW5jdGlvbiggZWxlbSwgY2xhc3NOYW1lICkgewoJCQlyZXR1
cm4galF1ZXJ5LmluQXJyYXkoIGNsYXNzTmFtZSwgKGVsZW0uY2xhc3NOYW1lIHx8
IGVsZW0pLnRvU3RyaW5nKCkuc3BsaXQoL1xzKy8pICkgPiAtMTsKCQl9Cgl9LAoK
CS8vIEEgbWV0aG9kIGZvciBxdWlja2x5IHN3YXBwaW5nIGluL291dCBDU1MgcHJv
cGVydGllcyB0byBnZXQgY29ycmVjdCBjYWxjdWxhdGlvbnMKCXN3YXA6IGZ1bmN0
aW9uKCBlbGVtLCBvcHRpb25zLCBjYWxsYmFjayApIHsKCQl2YXIgb2xkID0ge307
CgkJLy8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5l
dyBvbmVzCgkJZm9yICggdmFyIG5hbWUgaW4gb3B0aW9ucyApIHsKCQkJb2xkWyBu
YW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07CgkJCWVsZW0uc3R5bGVbIG5hbWUg
XSA9IG9wdGlvbnNbIG5hbWUgXTsKCQl9CgoJCWNhbGxiYWNrLmNhbGwoIGVsZW0g
KTsKCgkJLy8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzCgkJZm9yICggdmFyIG5hbWUg
aW4gb3B0aW9ucyApCgkJCWVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBd
OwoJfSwKCgljc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBmb3JjZSApIHsKCQlp
ZiAoIG5hbWUgPT0gIndpZHRoIiB8fCBuYW1lID09ICJoZWlnaHQiICkgewoJCQl2
YXIgdmFsLCBwcm9wcyA9IHsgcG9zaXRpb246ICJhYnNvbHV0ZSIsIHZpc2liaWxp
dHk6ICJoaWRkZW4iLCBkaXNwbGF5OiJibG9jayIgfSwgd2hpY2ggPSBuYW1lID09
ICJ3aWR0aCIgPyBbICJMZWZ0IiwgIlJpZ2h0IiBdIDogWyAiVG9wIiwgIkJvdHRv
bSIgXTsKCgkJCWZ1bmN0aW9uIGdldFdIKCkgewoJCQkJdmFsID0gbmFtZSA9PSAi
d2lkdGgiID8gZWxlbS5vZmZzZXRXaWR0aCA6IGVsZW0ub2Zmc2V0SGVpZ2h0OwoJ
CQkJdmFyIHBhZGRpbmcgPSAwLCBib3JkZXIgPSAwOwoJCQkJalF1ZXJ5LmVhY2go
IHdoaWNoLCBmdW5jdGlvbigpIHsKCQkJCQlwYWRkaW5nICs9IHBhcnNlRmxvYXQo
alF1ZXJ5LmN1ckNTUyggZWxlbSwgInBhZGRpbmciICsgdGhpcywgdHJ1ZSkpIHx8
IDA7CgkJCQkJYm9yZGVyICs9IHBhcnNlRmxvYXQoalF1ZXJ5LmN1ckNTUyggZWxl
bSwgImJvcmRlciIgKyB0aGlzICsgIldpZHRoIiwgdHJ1ZSkpIHx8IDA7CgkJCQl9
KTsKCQkJCXZhbCAtPSBNYXRoLnJvdW5kKHBhZGRpbmcgKyBib3JkZXIpOwoJCQl9
CgoJCQlpZiAoIGpRdWVyeShlbGVtKS5pcygiOnZpc2libGUiKSApCgkJCQlnZXRX
SCgpOwoJCQllbHNlCgkJCQlqUXVlcnkuc3dhcCggZWxlbSwgcHJvcHMsIGdldFdI
ICk7CgoJCQlyZXR1cm4gTWF0aC5tYXgoMCwgdmFsKTsKCQl9CgoJCXJldHVybiBq
UXVlcnkuY3VyQ1NTKCBlbGVtLCBuYW1lLCBmb3JjZSApOwoJfSwKCgljdXJDU1M6
IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBmb3JjZSApIHsKCQl2YXIgcmV0LCBzdHls
ZSA9IGVsZW0uc3R5bGU7CgoJCS8vIEEgaGVscGVyIG1ldGhvZCBmb3IgZGV0ZXJt
aW5pbmcgaWYgYW4gZWxlbWVudCdzIHZhbHVlcyBhcmUgYnJva2VuCgkJZnVuY3Rp
b24gY29sb3IoIGVsZW0gKSB7CgkJCWlmICggIWpRdWVyeS5icm93c2VyLnNhZmFy
aSApCgkJCQlyZXR1cm4gZmFsc2U7CgoJCQkvLyBkZWZhdWx0VmlldyBpcyBjYWNo
ZWQKCQkJdmFyIHJldCA9IGRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoIGVs
ZW0sIG51bGwgKTsKCQkJcmV0dXJuICFyZXQgfHwgcmV0LmdldFByb3BlcnR5VmFs
dWUoImNvbG9yIikgPT0gIiI7CgkJfQoKCQkvLyBXZSBuZWVkIHRvIGhhbmRsZSBv
cGFjaXR5IHNwZWNpYWwgaW4gSUUKCQlpZiAoIG5hbWUgPT0gIm9wYWNpdHkiICYm
IGpRdWVyeS5icm93c2VyLm1zaWUgKSB7CgkJCXJldCA9IGpRdWVyeS5hdHRyKCBz
dHlsZSwgIm9wYWNpdHkiICk7CgoJCQlyZXR1cm4gcmV0ID09ICIiID8KCQkJCSIx
IiA6CgkJCQlyZXQ7CgkJfQoJCS8vIE9wZXJhIHNvbWV0aW1lcyB3aWxsIGdpdmUg
dGhlIHdyb25nIGRpc3BsYXkgYW5zd2VyLCB0aGlzIGZpeGVzIGl0LCBzZWUgIzIw
MzcKCQlpZiAoIGpRdWVyeS5icm93c2VyLm9wZXJhICYmIG5hbWUgPT0gImRpc3Bs
YXkiICkgewoJCQl2YXIgc2F2ZSA9IHN0eWxlLm91dGxpbmU7CgkJCXN0eWxlLm91
dGxpbmUgPSAiMCBzb2xpZCBibGFjayI7CgkJCXN0eWxlLm91dGxpbmUgPSBzYXZl
OwoJCX0KCgkJLy8gTWFrZSBzdXJlIHdlJ3JlIHVzaW5nIHRoZSByaWdodCBuYW1l
IGZvciBnZXR0aW5nIHRoZSBmbG9hdCB2YWx1ZQoJCWlmICggbmFtZS5tYXRjaCgg
L2Zsb2F0L2kgKSApCgkJCW5hbWUgPSBzdHlsZUZsb2F0OwoKCQlpZiAoICFmb3Jj
ZSAmJiBzdHlsZSAmJiBzdHlsZVsgbmFtZSBdICkKCQkJcmV0ID0gc3R5bGVbIG5h
bWUgXTsKCgkJZWxzZSBpZiAoIGRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUg
KSB7CgoJCQkvLyBPbmx5ICJmbG9hdCIgaXMgbmVlZGVkIGhlcmUKCQkJaWYgKCBu
YW1lLm1hdGNoKCAvZmxvYXQvaSApICkKCQkJCW5hbWUgPSAiZmxvYXQiOwoKCQkJ
bmFtZSA9IG5hbWUucmVwbGFjZSggLyhbQS1aXSkvZywgIi0kMSIgKS50b0xvd2Vy
Q2FzZSgpOwoKCQkJdmFyIGNvbXB1dGVkU3R5bGUgPSBkZWZhdWx0Vmlldy5nZXRD
b21wdXRlZFN0eWxlKCBlbGVtLCBudWxsICk7CgoJCQlpZiAoIGNvbXB1dGVkU3R5
bGUgJiYgIWNvbG9yKCBlbGVtICkgKQoJCQkJcmV0ID0gY29tcHV0ZWRTdHlsZS5n
ZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICk7CgoJCQkvLyBJZiB0aGUgZWxlbWVudCBp
c24ndCByZXBvcnRpbmcgaXRzIHZhbHVlcyBwcm9wZXJseSBpbiBTYWZhcmkKCQkJ
Ly8gdGhlbiBzb21lIGRpc3BsYXk6IG5vbmUgZWxlbWVudHMgYXJlIGludm9sdmVk
CgkJCWVsc2UgewoJCQkJdmFyIHN3YXAgPSBbXSwgc3RhY2sgPSBbXSwgYSA9IGVs
ZW0sIGkgPSAwOwoKCQkJCS8vIExvY2F0ZSBhbGwgb2YgdGhlIHBhcmVudCBkaXNw
bGF5OiBub25lIGVsZW1lbnRzCgkJCQlmb3IgKCA7IGEgJiYgY29sb3IoYSk7IGEg
PSBhLnBhcmVudE5vZGUgKQoJCQkJCXN0YWNrLnVuc2hpZnQoYSk7CgoJCQkJLy8g
R28gdGhyb3VnaCBhbmQgbWFrZSB0aGVtIHZpc2libGUsIGJ1dCBpbiByZXZlcnNl
CgkJCQkvLyAoSXQgd291bGQgYmUgYmV0dGVyIGlmIHdlIGtuZXcgdGhlIGV4YWN0
IGRpc3BsYXkgdHlwZSB0aGF0IHRoZXkgaGFkKQoJCQkJZm9yICggOyBpIDwgc3Rh
Y2subGVuZ3RoOyBpKysgKQoJCQkJCWlmICggY29sb3IoIHN0YWNrWyBpIF0gKSAp
IHsKCQkJCQkJc3dhcFsgaSBdID0gc3RhY2tbIGkgXS5zdHlsZS5kaXNwbGF5OwoJ
CQkJCQlzdGFja1sgaSBdLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwoJCQkJCX0K
CgkJCQkvLyBTaW5jZSB3ZSBmbGlwIHRoZSBkaXNwbGF5IHN0eWxlLCB3ZSBoYXZl
IHRvIGhhbmRsZSB0aGF0CgkJCQkvLyBvbmUgc3BlY2lhbCwgb3RoZXJ3aXNlIGdl
dCB0aGUgdmFsdWUKCQkJCXJldCA9IG5hbWUgPT0gImRpc3BsYXkiICYmIHN3YXBb
IHN0YWNrLmxlbmd0aCAtIDEgXSAhPSBudWxsID8KCQkJCQkibm9uZSIgOgoJCQkJ
CSggY29tcHV0ZWRTdHlsZSAmJiBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFs
dWUoIG5hbWUgKSApIHx8ICIiOwoKCQkJCS8vIEZpbmFsbHksIHJldmVydCB0aGUg
ZGlzcGxheSBzdHlsZXMgYmFjawoJCQkJZm9yICggaSA9IDA7IGkgPCBzd2FwLmxl
bmd0aDsgaSsrICkKCQkJCQlpZiAoIHN3YXBbIGkgXSAhPSBudWxsICkKCQkJCQkJ
c3RhY2tbIGkgXS5zdHlsZS5kaXNwbGF5ID0gc3dhcFsgaSBdOwoJCQl9CgoJCQkv
LyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0
eQoJCQlpZiAoIG5hbWUgPT0gIm9wYWNpdHkiICYmIHJldCA9PSAiIiApCgkJCQly
ZXQgPSAiMSI7CgoJCX0gZWxzZSBpZiAoIGVsZW0uY3VycmVudFN0eWxlICkgewoJ
CQl2YXIgY2FtZWxDYXNlID0gbmFtZS5yZXBsYWNlKC9cLShcdykvZywgZnVuY3Rp
b24oYWxsLCBsZXR0ZXIpewoJCQkJcmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgp
OwoJCQl9KTsKCgkJCXJldCA9IGVsZW0uY3VycmVudFN0eWxlWyBuYW1lIF0gfHwg
ZWxlbS5jdXJyZW50U3R5bGVbIGNhbWVsQ2FzZSBdOwoKCQkJLy8gRnJvbSB0aGUg
YXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkcwoJCQkvLyBodHRwOi8vZXJpay5l
YWUubmV0L2FyY2hpdmVzLzIwMDcvMDcvMjcvMTguNTQuMTUvI2NvbW1lbnQtMTAy
MjkxCgoJCQkvLyBJZiB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGEgcmVndWxhciBw
aXhlbCBudW1iZXIKCQkJLy8gYnV0IGEgbnVtYmVyIHRoYXQgaGFzIGEgd2VpcmQg
ZW5kaW5nLCB3ZSBuZWVkIHRvIGNvbnZlcnQgaXQgdG8gcGl4ZWxzCgkJCWlmICgg
IS9eXGQrKHB4KT8kL2kudGVzdCggcmV0ICkgJiYgL15cZC8udGVzdCggcmV0ICkg
KSB7CgkJCQkvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVzCgkJCQl2YXIg
bGVmdCA9IHN0eWxlLmxlZnQsIHJzTGVmdCA9IGVsZW0ucnVudGltZVN0eWxlLmxl
ZnQ7CgoJCQkJLy8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1
dGVkIHZhbHVlIG91dAoJCQkJZWxlbS5ydW50aW1lU3R5bGUubGVmdCA9IGVsZW0u
Y3VycmVudFN0eWxlLmxlZnQ7CgkJCQlzdHlsZS5sZWZ0ID0gcmV0IHx8IDA7CgkJ
CQlyZXQgPSBzdHlsZS5waXhlbExlZnQgKyAicHgiOwoKCQkJCS8vIFJldmVydCB0
aGUgY2hhbmdlZCB2YWx1ZXMKCQkJCXN0eWxlLmxlZnQgPSBsZWZ0OwoJCQkJZWxl
bS5ydW50aW1lU3R5bGUubGVmdCA9IHJzTGVmdDsKCQkJfQoJCX0KCgkJcmV0dXJu
IHJldDsKCX0sCgoJY2xlYW46IGZ1bmN0aW9uKCBlbGVtcywgY29udGV4dCApIHsK
CQl2YXIgcmV0ID0gW107CgkJY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7
CgkJLy8gIWNvbnRleHQuY3JlYXRlRWxlbWVudCBmYWlscyBpbiBJRSB3aXRoIGFu
IGVycm9yIGJ1dCByZXR1cm5zIHR5cGVvZiAnb2JqZWN0JwoJCWlmICh0eXBlb2Yg
Y29udGV4dC5jcmVhdGVFbGVtZW50ID09ICd1bmRlZmluZWQnKQoJCQljb250ZXh0
ID0gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHRbMF0gJiYgY29udGV4
dFswXS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50OwoKCQlqUXVlcnkuZWFjaChl
bGVtcywgZnVuY3Rpb24oaSwgZWxlbSl7CgkJCWlmICggIWVsZW0gKQoJCQkJcmV0
dXJuOwoKCQkJaWYgKCBlbGVtLmNvbnN0cnVjdG9yID09IE51bWJlciApCgkJCQll
bGVtICs9ICcnOwoKCQkJLy8gQ29udmVydCBodG1sIHN0cmluZyBpbnRvIERPTSBu
b2RlcwoJCQlpZiAoIHR5cGVvZiBlbGVtID09ICJzdHJpbmciICkgewoJCQkJLy8g
Rml4ICJYSFRNTCItc3R5bGUgdGFncyBpbiBhbGwgYnJvd3NlcnMKCQkJCWVsZW0g
PSBlbGVtLnJlcGxhY2UoLyg8KFx3KylbXj5dKj8pXC8+L2csIGZ1bmN0aW9uKGFs
bCwgZnJvbnQsIHRhZyl7CgkJCQkJcmV0dXJuIHRhZy5tYXRjaCgvXihhYmJyfGJy
fGNvbHxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtfGhyfGFyZWF8ZW1iZWQpJC9p
KSA/CgkJCQkJCWFsbCA6CgkJCQkJCWZyb250ICsgIj48LyIgKyB0YWcgKyAiPiI7
CgkJCQl9KTsKCgkJCQkvLyBUcmltIHdoaXRlc3BhY2UsIG90aGVyd2lzZSBpbmRl
eE9mIHdvbid0IHdvcmsgYXMgZXhwZWN0ZWQKCQkJCXZhciB0YWdzID0galF1ZXJ5
LnRyaW0oIGVsZW0gKS50b0xvd2VyQ2FzZSgpLCBkaXYgPSBjb250ZXh0LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOwoKCQkJCXZhciB3cmFwID0KCQkJCQkvLyBvcHRpb24g
b3Igb3B0Z3JvdXAKCQkJCQkhdGFncy5pbmRleE9mKCI8b3B0IikgJiYKCQkJCQlb
IDEsICI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwgIjwvc2VsZWN0PiIg
XSB8fAoKCQkJCQkhdGFncy5pbmRleE9mKCI8bGVnIikgJiYKCQkJCQlbIDEsICI8
ZmllbGRzZXQ+IiwgIjwvZmllbGRzZXQ+IiBdIHx8CgoJCQkJCXRhZ3MubWF0Y2go
L148KHRoZWFkfHRib2R5fHRmb290fGNvbGd8Y2FwKS8pICYmCgkJCQkJWyAxLCAi
PHRhYmxlPiIsICI8L3RhYmxlPiIgXSB8fAoKCQkJCQkhdGFncy5pbmRleE9mKCI8
dHIiKSAmJgoJCQkJCVsgMiwgIjx0YWJsZT48dGJvZHk+IiwgIjwvdGJvZHk+PC90
YWJsZT4iIF0gfHwKCgkJCQkgCS8vIDx0aGVhZD4gbWF0Y2hlZCBhYm92ZQoJCQkJ
CSghdGFncy5pbmRleE9mKCI8dGQiKSB8fCAhdGFncy5pbmRleE9mKCI8dGgiKSkg
JiYKCQkJCQlbIDMsICI8dGFibGU+PHRib2R5Pjx0cj4iLCAiPC90cj48L3Rib2R5
PjwvdGFibGU+IiBdIHx8CgoJCQkJCSF0YWdzLmluZGV4T2YoIjxjb2wiKSAmJgoJ
CQkJCVsgMiwgIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwgIjwv
Y29sZ3JvdXA+PC90YWJsZT4iIF0gfHwKCgkJCQkJLy8gSUUgY2FuJ3Qgc2VyaWFs
aXplIDxsaW5rPiBhbmQgPHNjcmlwdD4gdGFncyBub3JtYWxseQoJCQkJCWpRdWVy
eS5icm93c2VyLm1zaWUgJiYKCQkJCQlbIDEsICJkaXY8ZGl2PiIsICI8L2Rpdj4i
IF0gfHwKCgkJCQkJWyAwLCAiIiwgIiIgXTsKCgkJCQkvLyBHbyB0byBodG1sIGFu
ZCBiYWNrLCB0aGVuIHBlZWwgb2ZmIGV4dHJhIHdyYXBwZXJzCgkJCQlkaXYuaW5u
ZXJIVE1MID0gd3JhcFsxXSArIGVsZW0gKyB3cmFwWzJdOwoKCQkJCS8vIE1vdmUg
dG8gdGhlIHJpZ2h0IGRlcHRoCgkJCQl3aGlsZSAoIHdyYXBbMF0tLSApCgkJCQkJ
ZGl2ID0gZGl2Lmxhc3RDaGlsZDsKCgkJCQkvLyBSZW1vdmUgSUUncyBhdXRvaW5z
ZXJ0ZWQgPHRib2R5PiBmcm9tIHRhYmxlIGZyYWdtZW50cwoJCQkJaWYgKCBqUXVl
cnkuYnJvd3Nlci5tc2llICkgewoKCQkJCQkvLyBTdHJpbmcgd2FzIGEgPHRhYmxl
PiwgKm1heSogaGF2ZSBzcHVyaW91cyA8dGJvZHk+CgkJCQkJdmFyIHRib2R5ID0g
IXRhZ3MuaW5kZXhPZigiPHRhYmxlIikgJiYgdGFncy5pbmRleE9mKCI8dGJvZHki
KSA8IDAgPwoJCQkJCQlkaXYuZmlyc3RDaGlsZCAmJiBkaXYuZmlyc3RDaGlsZC5j
aGlsZE5vZGVzIDoKCgkJCQkJCS8vIFN0cmluZyB3YXMgYSBiYXJlIDx0aGVhZD4g
b3IgPHRmb290PgoJCQkJCQl3cmFwWzFdID09ICI8dGFibGU+IiAmJiB0YWdzLmlu
ZGV4T2YoIjx0Ym9keSIpIDwgMCA/CgkJCQkJCQlkaXYuY2hpbGROb2RlcyA6CgkJ
CQkJCQlbXTsKCgkJCQkJZm9yICggdmFyIGogPSB0Ym9keS5sZW5ndGggLSAxOyBq
ID49IDAgOyAtLWogKQoJCQkJCQlpZiAoIGpRdWVyeS5ub2RlTmFtZSggdGJvZHlb
IGogXSwgInRib2R5IiApICYmICF0Ym9keVsgaiBdLmNoaWxkTm9kZXMubGVuZ3Ro
ICkKCQkJCQkJCXRib2R5WyBqIF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGJv
ZHlbIGogXSApOwoKCQkJCQkvLyBJRSBjb21wbGV0ZWx5IGtpbGxzIGxlYWRpbmcg
d2hpdGVzcGFjZSB3aGVuIGlubmVySFRNTCBpcyB1c2VkCgkJCQkJaWYgKCAvXlxz
Ly50ZXN0KCBlbGVtICkgKQoJCQkJCQlkaXYuaW5zZXJ0QmVmb3JlKCBjb250ZXh0
LmNyZWF0ZVRleHROb2RlKCBlbGVtLm1hdGNoKC9eXHMqLylbMF0gKSwgZGl2LmZp
cnN0Q2hpbGQgKTsKCgkJCQl9CgoJCQkJZWxlbSA9IGpRdWVyeS5tYWtlQXJyYXko
IGRpdi5jaGlsZE5vZGVzICk7CgkJCX0KCgkJCWlmICggZWxlbS5sZW5ndGggPT09
IDAgJiYgKCFqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJmb3JtIiApICYmICFqUXVl
cnkubm9kZU5hbWUoIGVsZW0sICJzZWxlY3QiICkpICkKCQkJCXJldHVybjsKCgkJ
CWlmICggZWxlbVswXSA9PSB1bmRlZmluZWQgfHwgalF1ZXJ5Lm5vZGVOYW1lKCBl
bGVtLCAiZm9ybSIgKSB8fCBlbGVtLm9wdGlvbnMgKQoJCQkJcmV0LnB1c2goIGVs
ZW0gKTsKCgkJCWVsc2UKCQkJCXJldCA9IGpRdWVyeS5tZXJnZSggcmV0LCBlbGVt
ICk7CgoJCX0pOwoKCQlyZXR1cm4gcmV0OwoJfSwKCglhdHRyOiBmdW5jdGlvbigg
ZWxlbSwgbmFtZSwgdmFsdWUgKSB7CgkJLy8gZG9uJ3Qgc2V0IGF0dHJpYnV0ZXMg
b24gdGV4dCBhbmQgY29tbWVudCBub2RlcwoJCWlmICghZWxlbSB8fCBlbGVtLm5v
ZGVUeXBlID09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PSA4KQoJCQlyZXR1cm4gdW5k
ZWZpbmVkOwoKCQl2YXIgbm90eG1sID0gIWpRdWVyeS5pc1hNTERvYyggZWxlbSAp
LAoJCQkvLyBXaGV0aGVyIHdlIGFyZSBzZXR0aW5nIChvciBnZXR0aW5nKQoJCQlz
ZXQgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkLAoJCQltc2llID0galF1ZXJ5LmJyb3dz
ZXIubXNpZTsKCgkJLy8gVHJ5IHRvIG5vcm1hbGl6ZS9maXggdGhlIG5hbWUKCQlu
YW1lID0gbm90eG1sICYmIGpRdWVyeS5wcm9wc1sgbmFtZSBdIHx8IG5hbWU7CgoJ
CS8vIE9ubHkgZG8gYWxsIHRoZSBmb2xsb3dpbmcgaWYgdGhpcyBpcyBhIG5vZGUg
KGZhc3RlciBmb3Igc3R5bGUpCgkJLy8gSUUgZWxlbS5nZXRBdHRyaWJ1dGUgcGFz
c2VzIGV2ZW4gZm9yIHN0eWxlCgkJaWYgKCBlbGVtLnRhZ05hbWUgKSB7CgoJCQkv
LyBUaGVzZSBhdHRyaWJ1dGVzIHJlcXVpcmUgc3BlY2lhbCB0cmVhdG1lbnQKCQkJ
dmFyIHNwZWNpYWwgPSAvaHJlZnxzcmN8c3R5bGUvLnRlc3QoIG5hbWUgKTsKCgkJ
CS8vIFNhZmFyaSBtaXMtcmVwb3J0cyB0aGUgZGVmYXVsdCBzZWxlY3RlZCBwcm9w
ZXJ0eSBvZiBhIGhpZGRlbiBvcHRpb24KCQkJLy8gQWNjZXNzaW5nIHRoZSBwYXJl
bnQncyBzZWxlY3RlZEluZGV4IHByb3BlcnR5IGZpeGVzIGl0CgkJCWlmICggbmFt
ZSA9PSAic2VsZWN0ZWQiICYmIGpRdWVyeS5icm93c2VyLnNhZmFyaSApCgkJCQll
bGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKCgkJCS8vIElmIGFwcGxpY2Fi
bGUsIGFjY2VzcyB0aGUgYXR0cmlidXRlIHZpYSB0aGUgRE9NIDAgd2F5CgkJCWlm
ICggbmFtZSBpbiBlbGVtICYmIG5vdHhtbCAmJiAhc3BlY2lhbCApIHsKCQkJCWlm
ICggc2V0ICl7CgkJCQkJLy8gV2UgY2FuJ3QgYWxsb3cgdGhlIHR5cGUgcHJvcGVy
dHkgdG8gYmUgY2hhbmdlZCAoc2luY2UgaXQgY2F1c2VzIHByb2JsZW1zIGluIElF
KQoJCQkJCWlmICggbmFtZSA9PSAidHlwZSIgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBl
bGVtLCAiaW5wdXQiICkgJiYgZWxlbS5wYXJlbnROb2RlICkKCQkJCQkJdGhyb3cg
InR5cGUgcHJvcGVydHkgY2FuJ3QgYmUgY2hhbmdlZCI7CgoJCQkJCWVsZW1bIG5h
bWUgXSA9IHZhbHVlOwoJCQkJfQoKCQkJCS8vIGJyb3dzZXJzIGluZGV4IGVsZW1l
bnRzIGJ5IGlkL25hbWUgb24gZm9ybXMsIGdpdmUgcHJpb3JpdHkgdG8gYXR0cmli
dXRlcy4KCQkJCWlmKCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJmb3JtIiApICYm
IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShuYW1lKSApCgkJCQkJcmV0dXJuIGVsZW0u
Z2V0QXR0cmlidXRlTm9kZSggbmFtZSApLm5vZGVWYWx1ZTsKCgkJCQlyZXR1cm4g
ZWxlbVsgbmFtZSBdOwoJCQl9CgoJCQlpZiAoIG1zaWUgJiYgbm90eG1sICYmICBu
YW1lID09ICJzdHlsZSIgKQoJCQkJcmV0dXJuIGpRdWVyeS5hdHRyKCBlbGVtLnN0
eWxlLCAiY3NzVGV4dCIsIHZhbHVlICk7CgoJCQlpZiAoIHNldCApCgkJCQkvLyBj
b252ZXJ0IHRoZSB2YWx1ZSB0byBhIHN0cmluZyAoYWxsIGJyb3dzZXJzIGRvIHRo
aXMgYnV0IElFKSBzZWUgIzEwNzAKCQkJCWVsZW0uc2V0QXR0cmlidXRlKCBuYW1l
LCAiIiArIHZhbHVlICk7CgoJCQl2YXIgYXR0ciA9IG1zaWUgJiYgbm90eG1sICYm
IHNwZWNpYWwKCQkJCQkvLyBTb21lIGF0dHJpYnV0ZXMgcmVxdWlyZSBhIHNwZWNp
YWwgY2FsbCBvbiBJRQoJCQkJCT8gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUsIDIg
KQoJCQkJCTogZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTsKCgkJCS8vIE5vbi1l
eGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8g
dW5kZWZpbmVkCgkJCXJldHVybiBhdHRyID09PSBudWxsID8gdW5kZWZpbmVkIDog
YXR0cjsKCQl9CgoJCS8vIGVsZW0gaXMgYWN0dWFsbHkgZWxlbS5zdHlsZSAuLi4g
c2V0IHRoZSBzdHlsZQoKCQkvLyBJRSB1c2VzIGZpbHRlcnMgZm9yIG9wYWNpdHkK
CQlpZiAoIG1zaWUgJiYgbmFtZSA9PSAib3BhY2l0eSIgKSB7CgkJCWlmICggc2V0
ICkgewoJCQkJLy8gSUUgaGFzIHRyb3VibGUgd2l0aCBvcGFjaXR5IGlmIGl0IGRv
ZXMgbm90IGhhdmUgbGF5b3V0CgkJCQkvLyBGb3JjZSBpdCBieSBzZXR0aW5nIHRo
ZSB6b29tIGxldmVsCgkJCQllbGVtLnpvb20gPSAxOwoKCQkJCS8vIFNldCB0aGUg
YWxwaGEgZmlsdGVyIHRvIHNldCB0aGUgb3BhY2l0eQoJCQkJZWxlbS5maWx0ZXIg
PSAoZWxlbS5maWx0ZXIgfHwgIiIpLnJlcGxhY2UoIC9hbHBoYVwoW14pXSpcKS8s
ICIiICkgKwoJCQkJCShwYXJzZUludCggdmFsdWUgKSArICcnID09ICJOYU4iID8g
IiIgOiAiYWxwaGEob3BhY2l0eT0iICsgdmFsdWUgKiAxMDAgKyAiKSIpOwoJCQl9
CgoJCQlyZXR1cm4gZWxlbS5maWx0ZXIgJiYgZWxlbS5maWx0ZXIuaW5kZXhPZigi
b3BhY2l0eT0iKSA+PSAwID8KCQkJCShwYXJzZUZsb2F0KCBlbGVtLmZpbHRlci5t
YXRjaCgvb3BhY2l0eT0oW14pXSopLylbMV0gKSAvIDEwMCkgKyAnJzoKCQkJCSIi
OwoJCX0KCgkJbmFtZSA9IG5hbWUucmVwbGFjZSgvLShbYS16XSkvaWcsIGZ1bmN0
aW9uKGFsbCwgbGV0dGVyKXsKCQkJcmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgp
OwoJCX0pOwoKCQlpZiAoIHNldCApCgkJCWVsZW1bIG5hbWUgXSA9IHZhbHVlOwoK
CQlyZXR1cm4gZWxlbVsgbmFtZSBdOwoJfSwKCgl0cmltOiBmdW5jdGlvbiggdGV4
dCApIHsKCQlyZXR1cm4gKHRleHQgfHwgIiIpLnJlcGxhY2UoIC9eXHMrfFxzKyQv
ZywgIiIgKTsKCX0sCgoJbWFrZUFycmF5OiBmdW5jdGlvbiggYXJyYXkgKSB7CgkJ
dmFyIHJldCA9IFtdOwoKCQlpZiggYXJyYXkgIT0gbnVsbCApewoJCQl2YXIgaSA9
IGFycmF5Lmxlbmd0aDsKCQkJLy90aGUgd2luZG93LCBzdHJpbmdzIGFuZCBmdW5j
dGlvbnMgYWxzbyBoYXZlICdsZW5ndGgnCgkJCWlmKCBpID09IG51bGwgfHwgYXJy
YXkuc3BsaXQgfHwgYXJyYXkuc2V0SW50ZXJ2YWwgfHwgYXJyYXkuY2FsbCApCgkJ
CQlyZXRbMF0gPSBhcnJheTsKCQkJZWxzZQoJCQkJd2hpbGUoIGkgKQoJCQkJCXJl
dFstLWldID0gYXJyYXlbaV07CgkJfQoKCQlyZXR1cm4gcmV0OwoJfSwKCglpbkFy
cmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyYXkgKSB7CgkJZm9yICggdmFyIGkgPSAw
LCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKyApCgkJLy8g
VXNlID09PSBiZWNhdXNlIG9uIElFLCB3aW5kb3cgPT0gZG9jdW1lbnQKCQkJaWYg
KCBhcnJheVsgaSBdID09PSBlbGVtICkKCQkJCXJldHVybiBpOwoKCQlyZXR1cm4g
LTE7Cgl9LAoKCW1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29uZCApIHsKCQkv
LyBXZSBoYXZlIHRvIGxvb3AgdGhpcyB3YXkgYmVjYXVzZSBJRSAmIE9wZXJhIG92
ZXJ3cml0ZSB0aGUgbGVuZ3RoCgkJLy8gZXhwYW5kbyBvZiBnZXRFbGVtZW50c0J5
VGFnTmFtZQoJCXZhciBpID0gMCwgZWxlbSwgcG9zID0gZmlyc3QubGVuZ3RoOwoJ
CS8vIEFsc28sIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvcnJlY3Qg
ZWxlbWVudHMgYXJlIGJlaW5nIHJldHVybmVkCgkJLy8gKElFIHJldHVybnMgY29t
bWVudCBub2RlcyBpbiBhICcqJyBxdWVyeSkKCQlpZiAoIGpRdWVyeS5icm93c2Vy
Lm1zaWUgKSB7CgkJCXdoaWxlICggZWxlbSA9IHNlY29uZFsgaSsrIF0gKQoJCQkJ
aWYgKCBlbGVtLm5vZGVUeXBlICE9IDggKQoJCQkJCWZpcnN0WyBwb3MrKyBdID0g
ZWxlbTsKCgkJfSBlbHNlCgkJCXdoaWxlICggZWxlbSA9IHNlY29uZFsgaSsrIF0g
KQoJCQkJZmlyc3RbIHBvcysrIF0gPSBlbGVtOwoKCQlyZXR1cm4gZmlyc3Q7Cgl9
LAoKCXVuaXF1ZTogZnVuY3Rpb24oIGFycmF5ICkgewoJCXZhciByZXQgPSBbXSwg
ZG9uZSA9IHt9OwoKCQl0cnkgewoKCQkJZm9yICggdmFyIGkgPSAwLCBsZW5ndGgg
PSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKyApIHsKCQkJCXZhciBpZCA9
IGpRdWVyeS5kYXRhKCBhcnJheVsgaSBdICk7CgoJCQkJaWYgKCAhZG9uZVsgaWQg
XSApIHsKCQkJCQlkb25lWyBpZCBdID0gdHJ1ZTsKCQkJCQlyZXQucHVzaCggYXJy
YXlbIGkgXSApOwoJCQkJfQoJCQl9CgoJCX0gY2F0Y2goIGUgKSB7CgkJCXJldCA9
IGFycmF5OwoJCX0KCgkJcmV0dXJuIHJldDsKCX0sCgoJZ3JlcDogZnVuY3Rpb24o
IGVsZW1zLCBjYWxsYmFjaywgaW52ICkgewoJCXZhciByZXQgPSBbXTsKCgkJLy8g
R28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtcwoJCS8v
IHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uCgkJZm9yICggdmFyIGkg
PSAwLCBsZW5ndGggPSBlbGVtcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKyApCgkJ
CWlmICggIWludiAhPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKSApCgkJCQly
ZXQucHVzaCggZWxlbXNbIGkgXSApOwoKCQlyZXR1cm4gcmV0OwoJfSwKCgltYXA6
IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2sgKSB7CgkJdmFyIHJldCA9IFtdOwoK
CQkvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0
aGUgaXRlbXMgdG8gdGhlaXIKCQkvLyBuZXcgdmFsdWUgKG9yIHZhbHVlcykuCgkJ
Zm9yICggdmFyIGkgPSAwLCBsZW5ndGggPSBlbGVtcy5sZW5ndGg7IGkgPCBsZW5n
dGg7IGkrKyApIHsKCQkJdmFyIHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0s
IGkgKTsKCgkJCWlmICggdmFsdWUgIT0gbnVsbCApCgkJCQlyZXRbIHJldC5sZW5n
dGggXSA9IHZhbHVlOwoJCX0KCgkJcmV0dXJuIHJldC5jb25jYXQuYXBwbHkoIFtd
LCByZXQgKTsKCX0KfSk7Cgp2YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJB
Z2VudC50b0xvd2VyQ2FzZSgpOwoKLy8gRmlndXJlIG91dCB3aGF0IGJyb3dzZXIg
aXMgYmVpbmcgdXNlZApqUXVlcnkuYnJvd3NlciA9IHsKCXZlcnNpb246ICh1c2Vy
QWdlbnQubWF0Y2goIC8uKyg/OnJ2fGl0fHJhfGllKVtcLzogXShbXGQuXSspLyAp
IHx8IFtdKVsxXSwKCXNhZmFyaTogL3dlYmtpdC8udGVzdCggdXNlckFnZW50ICks
CglvcGVyYTogL29wZXJhLy50ZXN0KCB1c2VyQWdlbnQgKSwKCW1zaWU6IC9tc2ll
Ly50ZXN0KCB1c2VyQWdlbnQgKSAmJiAhL29wZXJhLy50ZXN0KCB1c2VyQWdlbnQg
KSwKCW1vemlsbGE6IC9tb3ppbGxhLy50ZXN0KCB1c2VyQWdlbnQgKSAmJiAhLyhj
b21wYXRpYmxlfHdlYmtpdCkvLnRlc3QoIHVzZXJBZ2VudCApCn07Cgp2YXIgc3R5
bGVGbG9hdCA9IGpRdWVyeS5icm93c2VyLm1zaWUgPwoJInN0eWxlRmxvYXQiIDoK
CSJjc3NGbG9hdCI7CgpqUXVlcnkuZXh0ZW5kKHsKCS8vIENoZWNrIHRvIHNlZSBp
ZiB0aGUgVzNDIGJveCBtb2RlbCBpcyBiZWluZyB1c2VkCglib3hNb2RlbDogIWpR
dWVyeS5icm93c2VyLm1zaWUgfHwgZG9jdW1lbnQuY29tcGF0TW9kZSA9PSAiQ1NT
MUNvbXBhdCIsCgoJcHJvcHM6IHsKCQkiZm9yIjogImh0bWxGb3IiLAoJCSJjbGFz
cyI6ICJjbGFzc05hbWUiLAoJCSJmbG9hdCI6IHN0eWxlRmxvYXQsCgkJY3NzRmxv
YXQ6IHN0eWxlRmxvYXQsCgkJc3R5bGVGbG9hdDogc3R5bGVGbG9hdCwKCQlyZWFk
b25seTogInJlYWRPbmx5IiwKCQltYXhsZW5ndGg6ICJtYXhMZW5ndGgiLAoJCWNl
bGxzcGFjaW5nOiAiY2VsbFNwYWNpbmciCgl9Cn0pOwoKalF1ZXJ5LmVhY2goewoJ
cGFyZW50OiBmdW5jdGlvbihlbGVtKXtyZXR1cm4gZWxlbS5wYXJlbnROb2RlO30s
CglwYXJlbnRzOiBmdW5jdGlvbihlbGVtKXtyZXR1cm4galF1ZXJ5LmRpcihlbGVt
LCJwYXJlbnROb2RlIik7fSwKCW5leHQ6IGZ1bmN0aW9uKGVsZW0pe3JldHVybiBq
UXVlcnkubnRoKGVsZW0sMiwibmV4dFNpYmxpbmciKTt9LAoJcHJldjogZnVuY3Rp
b24oZWxlbSl7cmV0dXJuIGpRdWVyeS5udGgoZWxlbSwyLCJwcmV2aW91c1NpYmxp
bmciKTt9LAoJbmV4dEFsbDogZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGpRdWVyeS5k
aXIoZWxlbSwibmV4dFNpYmxpbmciKTt9LAoJcHJldkFsbDogZnVuY3Rpb24oZWxl
bSl7cmV0dXJuIGpRdWVyeS5kaXIoZWxlbSwicHJldmlvdXNTaWJsaW5nIik7fSwK
CXNpYmxpbmdzOiBmdW5jdGlvbihlbGVtKXtyZXR1cm4galF1ZXJ5LnNpYmxpbmco
ZWxlbS5wYXJlbnROb2RlLmZpcnN0Q2hpbGQsZWxlbSk7fSwKCWNoaWxkcmVuOiBm
dW5jdGlvbihlbGVtKXtyZXR1cm4galF1ZXJ5LnNpYmxpbmcoZWxlbS5maXJzdENo
aWxkKTt9LAoJY29udGVudHM6IGZ1bmN0aW9uKGVsZW0pe3JldHVybiBqUXVlcnku
bm9kZU5hbWUoZWxlbSwiaWZyYW1lIik/ZWxlbS5jb250ZW50RG9jdW1lbnR8fGVs
ZW0uY29udGVudFdpbmRvdy5kb2N1bWVudDpqUXVlcnkubWFrZUFycmF5KGVsZW0u
Y2hpbGROb2Rlcyk7fQp9LCBmdW5jdGlvbihuYW1lLCBmbil7CglqUXVlcnkuZm5b
IG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKCQl2YXIgcmV0ID0galF1
ZXJ5Lm1hcCggdGhpcywgZm4gKTsKCgkJaWYgKCBzZWxlY3RvciAmJiB0eXBlb2Yg
c2VsZWN0b3IgPT0gInN0cmluZyIgKQoJCQlyZXQgPSBqUXVlcnkubXVsdGlGaWx0
ZXIoIHNlbGVjdG9yLCByZXQgKTsKCgkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBq
UXVlcnkudW5pcXVlKCByZXQgKSApOwoJfTsKfSk7CgpqUXVlcnkuZWFjaCh7Cglh
cHBlbmRUbzogImFwcGVuZCIsCglwcmVwZW5kVG86ICJwcmVwZW5kIiwKCWluc2Vy
dEJlZm9yZTogImJlZm9yZSIsCglpbnNlcnRBZnRlcjogImFmdGVyIiwKCXJlcGxh
Y2VBbGw6ICJyZXBsYWNlV2l0aCIKfSwgZnVuY3Rpb24obmFtZSwgb3JpZ2luYWwp
ewoJalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbigpIHsKCQl2YXIgYXJncyA9
IGFyZ3VtZW50czsKCgkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpewoJCQlm
b3IgKCB2YXIgaSA9IDAsIGxlbmd0aCA9IGFyZ3MubGVuZ3RoOyBpIDwgbGVuZ3Ro
OyBpKysgKQoJCQkJalF1ZXJ5KCBhcmdzWyBpIF0gKVsgb3JpZ2luYWwgXSggdGhp
cyApOwoJCX0pOwoJfTsKfSk7CgpqUXVlcnkuZWFjaCh7CglyZW1vdmVBdHRyOiBm
dW5jdGlvbiggbmFtZSApIHsKCQlqUXVlcnkuYXR0ciggdGhpcywgbmFtZSwgIiIg
KTsKCQlpZiAodGhpcy5ub2RlVHlwZSA9PSAxKQoJCQl0aGlzLnJlbW92ZUF0dHJp
YnV0ZSggbmFtZSApOwoJfSwKCglhZGRDbGFzczogZnVuY3Rpb24oIGNsYXNzTmFt
ZXMgKSB7CgkJalF1ZXJ5LmNsYXNzTmFtZS5hZGQoIHRoaXMsIGNsYXNzTmFtZXMg
KTsKCX0sCgoJcmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCBjbGFzc05hbWVzICkgewoJ
CWpRdWVyeS5jbGFzc05hbWUucmVtb3ZlKCB0aGlzLCBjbGFzc05hbWVzICk7Cgl9
LAoKCXRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggY2xhc3NOYW1lcyApIHsKCQlqUXVl
cnkuY2xhc3NOYW1lWyBqUXVlcnkuY2xhc3NOYW1lLmhhcyggdGhpcywgY2xhc3NO
YW1lcyApID8gInJlbW92ZSIgOiAiYWRkIiBdKCB0aGlzLCBjbGFzc05hbWVzICk7
Cgl9LAoKCXJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkgewoJCWlmICggIXNl
bGVjdG9yIHx8IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBbIHRoaXMgXSApLnIu
bGVuZ3RoICkgewoJCQkvLyBQcmV2ZW50IG1lbW9yeSBsZWFrcwoJCQlqUXVlcnko
ICIqIiwgdGhpcyApLmFkZCh0aGlzKS5lYWNoKGZ1bmN0aW9uKCl7CgkJCQlqUXVl
cnkuZXZlbnQucmVtb3ZlKHRoaXMpOwoJCQkJalF1ZXJ5LnJlbW92ZURhdGEodGhp
cyk7CgkJCX0pOwoJCQlpZiAodGhpcy5wYXJlbnROb2RlKQoJCQkJdGhpcy5wYXJl
bnROb2RlLnJlbW92ZUNoaWxkKCB0aGlzICk7CgkJfQoJfSwKCgllbXB0eTogZnVu
Y3Rpb24oKSB7CgkJLy8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQg
bWVtb3J5IGxlYWtzCgkJalF1ZXJ5KCAiPioiLCB0aGlzICkucmVtb3ZlKCk7CgoJ
CS8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzCgkJd2hpbGUgKCB0aGlzLmZp
cnN0Q2hpbGQgKQoJCQl0aGlzLnJlbW92ZUNoaWxkKCB0aGlzLmZpcnN0Q2hpbGQg
KTsKCX0KfSwgZnVuY3Rpb24obmFtZSwgZm4pewoJalF1ZXJ5LmZuWyBuYW1lIF0g
PSBmdW5jdGlvbigpewoJCXJldHVybiB0aGlzLmVhY2goIGZuLCBhcmd1bWVudHMg
KTsKCX07Cn0pOwoKalF1ZXJ5LmVhY2goWyAiSGVpZ2h0IiwgIldpZHRoIiBdLCBm
dW5jdGlvbihpLCBuYW1lKXsKCXZhciB0eXBlID0gbmFtZS50b0xvd2VyQ2FzZSgp
OwoKCWpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIHNpemUgKSB7CgkJLy8g
R2V0IHdpbmRvdyB3aWR0aCBvciBoZWlnaHQKCQlyZXR1cm4gdGhpc1swXSA9PSB3
aW5kb3cgPwoJCQkvLyBPcGVyYSByZXBvcnRzIGRvY3VtZW50LmJvZHkuY2xpZW50
W1dpZHRoL0hlaWdodF0gcHJvcGVybHkgaW4gYm90aCBxdWlya3MgYW5kIHN0YW5k
YXJkcwoJCQlqUXVlcnkuYnJvd3Nlci5vcGVyYSAmJiBkb2N1bWVudC5ib2R5WyAi
Y2xpZW50IiArIG5hbWUgXSB8fAoKCQkJLy8gU2FmYXJpIHJlcG9ydHMgaW5uZXJb
V2lkdGgvSGVpZ2h0XSBqdXN0IGZpbmUgKE1vemlsbGEgYW5kIE9wZXJhIGluY2x1
ZGUgc2Nyb2xsIGJhciB3aWR0aHMpCgkJCWpRdWVyeS5icm93c2VyLnNhZmFyaSAm
JiB3aW5kb3dbICJpbm5lciIgKyBuYW1lIF0gfHwKCgkJCS8vIEV2ZXJ5b25lIGVs
c2UgdXNlIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCBvciBkb2N1bWVudC5ib2R5
IGRlcGVuZGluZyBvbiBRdWlya3MgdnMgU3RhbmRhcmRzIG1vZGUKCQkJZG9jdW1l
bnQuY29tcGF0TW9kZSA9PSAiQ1NTMUNvbXBhdCIgJiYgZG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50WyAiY2xpZW50IiArIG5hbWUgXSB8fCBkb2N1bWVudC5ib2R5WyAi
Y2xpZW50IiArIG5hbWUgXSA6CgoJCQkvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3Ig
aGVpZ2h0CgkJCXRoaXNbMF0gPT0gZG9jdW1lbnQgPwoJCQkJLy8gRWl0aGVyIHNj
cm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdLCB3aGlj
aGV2ZXIgaXMgZ3JlYXRlcgoJCQkJTWF0aC5tYXgoCgkJCQkJTWF0aC5tYXgoZG9j
dW1lbnQuYm9keVsic2Nyb2xsIiArIG5hbWVdLCBkb2N1bWVudC5kb2N1bWVudEVs
ZW1lbnRbInNjcm9sbCIgKyBuYW1lXSksCgkJCQkJTWF0aC5tYXgoZG9jdW1lbnQu
Ym9keVsib2Zmc2V0IiArIG5hbWVdLCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRb
Im9mZnNldCIgKyBuYW1lXSkKCQkJCSkgOgoKCQkJCS8vIEdldCBvciBzZXQgd2lk
dGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50CgkJCQlzaXplID09IHVuZGVmaW5l
ZCA/CgkJCQkJLy8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudAoJ
CQkJCSh0aGlzLmxlbmd0aCA/IGpRdWVyeS5jc3MoIHRoaXNbMF0sIHR5cGUgKSA6
IG51bGwpIDoKCgkJCQkJLy8gU2V0IHRoZSB3aWR0aCBvciBoZWlnaHQgb24gdGhl
IGVsZW1lbnQgKGRlZmF1bHQgdG8gcGl4ZWxzIGlmIHZhbHVlIGlzIHVuaXRsZXNz
KQoJCQkJCXRoaXMuY3NzKCB0eXBlLCBzaXplLmNvbnN0cnVjdG9yID09IFN0cmlu
ZyA/IHNpemUgOiBzaXplICsgInB4IiApOwoJfTsKfSk7CgovLyBIZWxwZXIgZnVu
Y3Rpb24gdXNlZCBieSB0aGUgZGltZW5zaW9ucyBhbmQgb2Zmc2V0IG1vZHVsZXMK
ZnVuY3Rpb24gbnVtKGVsZW0sIHByb3ApIHsKCXJldHVybiBlbGVtWzBdICYmIHBh
cnNlSW50KCBqUXVlcnkuY3VyQ1NTKGVsZW1bMF0sIHByb3AsIHRydWUpLCAxMCAp
IHx8IDA7Cn12YXIgY2hhcnMgPSBqUXVlcnkuYnJvd3Nlci5zYWZhcmkgJiYgcGFy
c2VJbnQoalF1ZXJ5LmJyb3dzZXIudmVyc2lvbikgPCA0MTcgPwoJCSIoPzpbXFx3
Kl8tXXxcXFxcLikiIDoKCQkiKD86W1xcd1x1MDEyOC1cdUZGRkYqXy1dfFxcXFwu
KSIsCglxdWlja0NoaWxkID0gbmV3IFJlZ0V4cCgiXj5cXHMqKCIgKyBjaGFycyAr
ICIrKSIpLAoJcXVpY2tJRCA9IG5ldyBSZWdFeHAoIl4oIiArIGNoYXJzICsgIisp
KCMpKCIgKyBjaGFycyArICIrKSIpLAoJcXVpY2tDbGFzcyA9IG5ldyBSZWdFeHAo
Il4oWyMuXT8pKCIgKyBjaGFycyArICIqKSIpOwoKalF1ZXJ5LmV4dGVuZCh7Cgll
eHByOiB7CgkJIiI6IGZ1bmN0aW9uKGEsaSxtKXtyZXR1cm4gbVsyXT09IioifHxq
UXVlcnkubm9kZU5hbWUoYSxtWzJdKTt9LAoJCSIjIjogZnVuY3Rpb24oYSxpLG0p
e3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaWQiKT09bVsyXTt9LAoJCSI6IjogewoJ
CQkvLyBQb3NpdGlvbiBDaGVja3MKCQkJbHQ6IGZ1bmN0aW9uKGEsaSxtKXtyZXR1
cm4gaTxtWzNdLTA7fSwKCQkJZ3Q6IGZ1bmN0aW9uKGEsaSxtKXtyZXR1cm4gaT5t
WzNdLTA7fSwKCQkJbnRoOiBmdW5jdGlvbihhLGksbSl7cmV0dXJuIG1bM10tMD09
aTt9LAoJCQllcTogZnVuY3Rpb24oYSxpLG0pe3JldHVybiBtWzNdLTA9PWk7fSwK
CQkJZmlyc3Q6IGZ1bmN0aW9uKGEsaSl7cmV0dXJuIGk9PTA7fSwKCQkJbGFzdDog
ZnVuY3Rpb24oYSxpLG0scil7cmV0dXJuIGk9PXIubGVuZ3RoLTE7fSwKCQkJZXZl
bjogZnVuY3Rpb24oYSxpKXtyZXR1cm4gaSUyPT0wO30sCgkJCW9kZDogZnVuY3Rp
b24oYSxpKXtyZXR1cm4gaSUyO30sCgoJCQkvLyBDaGlsZCBDaGVja3MKCQkJImZp
cnN0LWNoaWxkIjogZnVuY3Rpb24oYSl7cmV0dXJuIGEucGFyZW50Tm9kZS5nZXRF
bGVtZW50c0J5VGFnTmFtZSgiKiIpWzBdPT1hO30sCgkJCSJsYXN0LWNoaWxkIjog
ZnVuY3Rpb24oYSl7cmV0dXJuIGpRdWVyeS5udGgoYS5wYXJlbnROb2RlLmxhc3RD
aGlsZCwxLCJwcmV2aW91c1NpYmxpbmciKT09YTt9LAoJCQkib25seS1jaGlsZCI6
IGZ1bmN0aW9uKGEpe3JldHVybiAhalF1ZXJ5Lm50aChhLnBhcmVudE5vZGUubGFz
dENoaWxkLDIsInByZXZpb3VzU2libGluZyIpO30sCgoJCQkvLyBQYXJlbnQgQ2hl
Y2tzCgkJCXBhcmVudDogZnVuY3Rpb24oYSl7cmV0dXJuIGEuZmlyc3RDaGlsZDt9
LAoJCQllbXB0eTogZnVuY3Rpb24oYSl7cmV0dXJuICFhLmZpcnN0Q2hpbGQ7fSwK
CgkJCS8vIFRleHQgQ2hlY2sKCQkJY29udGFpbnM6IGZ1bmN0aW9uKGEsaSxtKXty
ZXR1cm4gKGEudGV4dENvbnRlbnR8fGEuaW5uZXJUZXh0fHxqUXVlcnkoYSkudGV4
dCgpfHwiIikuaW5kZXhPZihtWzNdKT49MDt9LAoKCQkJLy8gVmlzaWJpbGl0eQoJ
CQl2aXNpYmxlOiBmdW5jdGlvbihhKXtyZXR1cm4gImhpZGRlbiIhPWEudHlwZSYm
alF1ZXJ5LmNzcyhhLCJkaXNwbGF5IikhPSJub25lIiYmalF1ZXJ5LmNzcyhhLCJ2
aXNpYmlsaXR5IikhPSJoaWRkZW4iO30sCgkJCWhpZGRlbjogZnVuY3Rpb24oYSl7
cmV0dXJuICJoaWRkZW4iPT1hLnR5cGV8fGpRdWVyeS5jc3MoYSwiZGlzcGxheSIp
PT0ibm9uZSJ8fGpRdWVyeS5jc3MoYSwidmlzaWJpbGl0eSIpPT0iaGlkZGVuIjt9
LAoKCQkJLy8gRm9ybSBhdHRyaWJ1dGVzCgkJCWVuYWJsZWQ6IGZ1bmN0aW9uKGEp
e3JldHVybiAhYS5kaXNhYmxlZDt9LAoJCQlkaXNhYmxlZDogZnVuY3Rpb24oYSl7
cmV0dXJuIGEuZGlzYWJsZWQ7fSwKCQkJY2hlY2tlZDogZnVuY3Rpb24oYSl7cmV0
dXJuIGEuY2hlY2tlZDt9LAoJCQlzZWxlY3RlZDogZnVuY3Rpb24oYSl7cmV0dXJu
IGEuc2VsZWN0ZWR8fGpRdWVyeS5hdHRyKGEsInNlbGVjdGVkIik7fSwKCgkJCS8v
IEZvcm0gZWxlbWVudHMKCQkJdGV4dDogZnVuY3Rpb24oYSl7cmV0dXJuICJ0ZXh0
Ij09YS50eXBlO30sCgkJCXJhZGlvOiBmdW5jdGlvbihhKXtyZXR1cm4gInJhZGlv
Ij09YS50eXBlO30sCgkJCWNoZWNrYm94OiBmdW5jdGlvbihhKXtyZXR1cm4gImNo
ZWNrYm94Ij09YS50eXBlO30sCgkJCWZpbGU6IGZ1bmN0aW9uKGEpe3JldHVybiAi
ZmlsZSI9PWEudHlwZTt9LAoJCQlwYXNzd29yZDogZnVuY3Rpb24oYSl7cmV0dXJu
ICJwYXNzd29yZCI9PWEudHlwZTt9LAoJCQlzdWJtaXQ6IGZ1bmN0aW9uKGEpe3Jl
dHVybiAic3VibWl0Ij09YS50eXBlO30sCgkJCWltYWdlOiBmdW5jdGlvbihhKXty
ZXR1cm4gImltYWdlIj09YS50eXBlO30sCgkJCXJlc2V0OiBmdW5jdGlvbihhKXty
ZXR1cm4gInJlc2V0Ij09YS50eXBlO30sCgkJCWJ1dHRvbjogZnVuY3Rpb24oYSl7
cmV0dXJuICJidXR0b24iPT1hLnR5cGV8fGpRdWVyeS5ub2RlTmFtZShhLCJidXR0
b24iKTt9LAoJCQlpbnB1dDogZnVuY3Rpb24oYSl7cmV0dXJuIC9pbnB1dHxzZWxl
Y3R8dGV4dGFyZWF8YnV0dG9uL2kudGVzdChhLm5vZGVOYW1lKTt9LAoKCQkJLy8g
OmhhcygpCgkJCWhhczogZnVuY3Rpb24oYSxpLG0pe3JldHVybiBqUXVlcnkuZmlu
ZChtWzNdLGEpLmxlbmd0aDt9LAoKCQkJLy8gOmhlYWRlcgoJCQloZWFkZXI6IGZ1
bmN0aW9uKGEpe3JldHVybiAvaFxkL2kudGVzdChhLm5vZGVOYW1lKTt9LAoKCQkJ
Ly8gOmFuaW1hdGVkCgkJCWFuaW1hdGVkOiBmdW5jdGlvbihhKXtyZXR1cm4galF1
ZXJ5LmdyZXAoalF1ZXJ5LnRpbWVycyxmdW5jdGlvbihmbil7cmV0dXJuIGE9PWZu
LmVsZW07fSkubGVuZ3RoO30KCQl9Cgl9LAoKCS8vIFRoZSByZWd1bGFyIGV4cHJl
c3Npb25zIHRoYXQgcG93ZXIgdGhlIHBhcnNpbmcgZW5naW5lCglwYXJzZTogWwoJ
CS8vIE1hdGNoOiBbQHZhbHVlPSd0ZXN0J10sIFtAZm9vXQoJCS9eKFxbKSAqQD8o
W1x3LV0rKSAqKFshKiRefj1dKikgKignPyI/KSguKj8pXDQgKlxdLywKCgkJLy8g
TWF0Y2g6IDpjb250YWlucygnZm9vJykKCQkvXig6KShbXHctXSspXCgiPyc/KC4q
PyhcKC4qP1wpKT9bXihdKj8pIj8nP1wpLywKCgkJLy8gTWF0Y2g6IDpldmVuLCA6
bGFzdC1jaGlsZCwgI2lkLCAuY2xhc3MKCQluZXcgUmVnRXhwKCJeKFs6LiNdKiko
IiArIGNoYXJzICsgIispIikKCV0sCgoJbXVsdGlGaWx0ZXI6IGZ1bmN0aW9uKCBl
eHByLCBlbGVtcywgbm90ICkgewoJCXZhciBvbGQsIGN1ciA9IFtdOwoKCQl3aGls
ZSAoIGV4cHIgJiYgZXhwciAhPSBvbGQgKSB7CgkJCW9sZCA9IGV4cHI7CgkJCXZh
ciBmID0galF1ZXJ5LmZpbHRlciggZXhwciwgZWxlbXMsIG5vdCApOwoJCQlleHBy
ID0gZi50LnJlcGxhY2UoL15ccyosXHMqLywgIiIgKTsKCQkJY3VyID0gbm90ID8g
ZWxlbXMgPSBmLnIgOiBqUXVlcnkubWVyZ2UoIGN1ciwgZi5yICk7CgkJfQoKCQly
ZXR1cm4gY3VyOwoJfSwKCglmaW5kOiBmdW5jdGlvbiggdCwgY29udGV4dCApIHsK
CQkvLyBRdWlja2x5IGhhbmRsZSBub24tc3RyaW5nIGV4cHJlc3Npb25zCgkJaWYg
KCB0eXBlb2YgdCAhPSAic3RyaW5nIiApCgkJCXJldHVybiBbIHQgXTsKCgkJLy8g
Y2hlY2sgdG8gbWFrZSBzdXJlIGNvbnRleHQgaXMgYSBET00gZWxlbWVudCBvciBh
IGRvY3VtZW50CgkJaWYgKCBjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgIT0g
MSAmJiBjb250ZXh0Lm5vZGVUeXBlICE9IDkpCgkJCXJldHVybiBbIF07CgoJCS8v
IFNldCB0aGUgY29ycmVjdCBjb250ZXh0IChpZiBub25lIGlzIHByb3ZpZGVkKQoJ
CWNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OwoKCQkvLyBJbml0aWFsaXpl
IHRoZSBzZWFyY2gKCQl2YXIgcmV0ID0gW2NvbnRleHRdLCBkb25lID0gW10sIGxh
c3QsIG5vZGVOYW1lOwoKCQkvLyBDb250aW51ZSB3aGlsZSBhIHNlbGVjdG9yIGV4
cHJlc3Npb24gZXhpc3RzLCBhbmQgd2hpbGUKCQkvLyB3ZSdyZSBubyBsb25nZXIg
bG9vcGluZyB1cG9uIG91cnNlbHZlcwoJCXdoaWxlICggdCAmJiBsYXN0ICE9IHQg
KSB7CgkJCXZhciByID0gW107CgkJCWxhc3QgPSB0OwoKCQkJdCA9IGpRdWVyeS50
cmltKHQpOwoKCQkJdmFyIGZvdW5kVG9rZW4gPSBmYWxzZSwKCgkJCS8vIEFuIGF0
dGVtcHQgYXQgc3BlZWRpbmcgdXAgY2hpbGQgc2VsZWN0b3JzIHRoYXQKCQkJLy8g
cG9pbnQgdG8gYSBzcGVjaWZpYyBlbGVtZW50IHRhZwoJCQkJcmUgPSBxdWlja0No
aWxkLAoKCQkJCW0gPSByZS5leGVjKHQpOwoKCQkJaWYgKCBtICkgewoJCQkJbm9k
ZU5hbWUgPSBtWzFdLnRvVXBwZXJDYXNlKCk7CgoJCQkJLy8gUGVyZm9ybSBvdXIg
b3duIGl0ZXJhdGlvbiBhbmQgZmlsdGVyCgkJCQlmb3IgKCB2YXIgaSA9IDA7IHJl
dFtpXTsgaSsrICkKCQkJCQlmb3IgKCB2YXIgYyA9IHJldFtpXS5maXJzdENoaWxk
OyBjOyBjID0gYy5uZXh0U2libGluZyApCgkJCQkJCWlmICggYy5ub2RlVHlwZSA9
PSAxICYmIChub2RlTmFtZSA9PSAiKiIgfHwgYy5ub2RlTmFtZS50b1VwcGVyQ2Fz
ZSgpID09IG5vZGVOYW1lKSApCgkJCQkJCQlyLnB1c2goIGMgKTsKCgkJCQlyZXQg
PSByOwoJCQkJdCA9IHQucmVwbGFjZSggcmUsICIiICk7CgkJCQlpZiAoIHQuaW5k
ZXhPZigiICIpID09IDAgKSBjb250aW51ZTsKCQkJCWZvdW5kVG9rZW4gPSB0cnVl
OwoJCQl9IGVsc2UgewoJCQkJcmUgPSAvXihbPit+XSlccyooXHcqKS9pOwoKCQkJ
CWlmICggKG0gPSByZS5leGVjKHQpKSAhPSBudWxsICkgewoJCQkJCXIgPSBbXTsK
CgkJCQkJdmFyIG1lcmdlID0ge307CgkJCQkJbm9kZU5hbWUgPSBtWzJdLnRvVXBw
ZXJDYXNlKCk7CgkJCQkJbSA9IG1bMV07CgoJCQkJCWZvciAoIHZhciBqID0gMCwg
cmwgPSByZXQubGVuZ3RoOyBqIDwgcmw7IGorKyApIHsKCQkJCQkJdmFyIG4gPSBt
ID09ICJ+IiB8fCBtID09ICIrIiA/IHJldFtqXS5uZXh0U2libGluZyA6IHJldFtq
XS5maXJzdENoaWxkOwoJCQkJCQlmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5n
ICkKCQkJCQkJCWlmICggbi5ub2RlVHlwZSA9PSAxICkgewoJCQkJCQkJCXZhciBp
ZCA9IGpRdWVyeS5kYXRhKG4pOwoKCQkJCQkJCQlpZiAoIG0gPT0gIn4iICYmIG1l
cmdlW2lkXSApIGJyZWFrOwoKCQkJCQkJCQlpZiAoIW5vZGVOYW1lIHx8IG4ubm9k
ZU5hbWUudG9VcHBlckNhc2UoKSA9PSBub2RlTmFtZSApIHsKCQkJCQkJCQkJaWYg
KCBtID09ICJ+IiApIG1lcmdlW2lkXSA9IHRydWU7CgkJCQkJCQkJCXIucHVzaCgg
biApOwoJCQkJCQkJCX0KCgkJCQkJCQkJaWYgKCBtID09ICIrIiApIGJyZWFrOwoJ
CQkJCQkJfQoJCQkJCX0KCgkJCQkJcmV0ID0gcjsKCgkJCQkJLy8gQW5kIHJlbW92
ZSB0aGUgdG9rZW4KCQkJCQl0ID0galF1ZXJ5LnRyaW0oIHQucmVwbGFjZSggcmUs
ICIiICkgKTsKCQkJCQlmb3VuZFRva2VuID0gdHJ1ZTsKCQkJCX0KCQkJfQoKCQkJ
Ly8gU2VlIGlmIHRoZXJlJ3Mgc3RpbGwgYW4gZXhwcmVzc2lvbiwgYW5kIHRoYXQg
d2UgaGF2ZW4ndCBhbHJlYWR5CgkJCS8vIG1hdGNoZWQgYSB0b2tlbgoJCQlpZiAo
IHQgJiYgIWZvdW5kVG9rZW4gKSB7CgkJCQkvLyBIYW5kbGUgbXVsdGlwbGUgZXhw
cmVzc2lvbnMKCQkJCWlmICggIXQuaW5kZXhPZigiLCIpICkgewoJCQkJCS8vIENs
ZWFuIHRoZSByZXN1bHQgc2V0CgkJCQkJaWYgKCBjb250ZXh0ID09IHJldFswXSAp
IHJldC5zaGlmdCgpOwoKCQkJCQkvLyBNZXJnZSB0aGUgcmVzdWx0IHNldHMKCQkJ
CQlkb25lID0galF1ZXJ5Lm1lcmdlKCBkb25lLCByZXQgKTsKCgkJCQkJLy8gUmVz
ZXQgdGhlIGNvbnRleHQKCQkJCQlyID0gcmV0ID0gW2NvbnRleHRdOwoKCQkJCQkv
LyBUb3VjaCB1cCB0aGUgc2VsZWN0b3Igc3RyaW5nCgkJCQkJdCA9ICIgIiArIHQu
c3Vic3RyKDEsdC5sZW5ndGgpOwoKCQkJCX0gZWxzZSB7CgkJCQkJLy8gT3B0aW1p
emUgZm9yIHRoZSBjYXNlIG5vZGVOYW1lI2lkTmFtZQoJCQkJCXZhciByZTIgPSBx
dWlja0lEOwoJCQkJCXZhciBtID0gcmUyLmV4ZWModCk7CgoJCQkJCS8vIFJlLW9y
Z2FuaXplIHRoZSByZXN1bHRzLCBzbyB0aGF0IHRoZXkncmUgY29uc2lzdGVudAoJ
CQkJCWlmICggbSApIHsKCQkJCQkJbSA9IFsgMCwgbVsyXSwgbVszXSwgbVsxXSBd
OwoKCQkJCQl9IGVsc2UgewoJCQkJCQkvLyBPdGhlcndpc2UsIGRvIGEgdHJhZGl0
aW9uYWwgZmlsdGVyIGNoZWNrIGZvcgoJCQkJCQkvLyBJRCwgY2xhc3MsIGFuZCBl
bGVtZW50IHNlbGVjdG9ycwoJCQkJCQlyZTIgPSBxdWlja0NsYXNzOwoJCQkJCQlt
ID0gcmUyLmV4ZWModCk7CgkJCQkJfQoKCQkJCQltWzJdID0gbVsyXS5yZXBsYWNl
KC9cXC9nLCAiIik7CgoJCQkJCXZhciBlbGVtID0gcmV0W3JldC5sZW5ndGgtMV07
CgoJCQkJCS8vIFRyeSB0byBkbyBhIGdsb2JhbCBzZWFyY2ggYnkgSUQsIHdoZXJl
IHdlIGNhbgoJCQkJCWlmICggbVsxXSA9PSAiIyIgJiYgZWxlbSAmJiBlbGVtLmdl
dEVsZW1lbnRCeUlkICYmICFqUXVlcnkuaXNYTUxEb2MoZWxlbSkgKSB7CgkJCQkJ
CS8vIE9wdGltaXphdGlvbiBmb3IgSFRNTCBkb2N1bWVudCBjYXNlCgkJCQkJCXZh
ciBvaWQgPSBlbGVtLmdldEVsZW1lbnRCeUlkKG1bMl0pOwoKCQkJCQkJLy8gRG8g
YSBxdWljayBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgYWN0dWFsIElE
IGF0dHJpYnV0ZQoJCQkJCQkvLyB0byBhdm9pZCBzZWxlY3RpbmcgYnkgdGhlIG5h
bWUgYXR0cmlidXRlIGluIElFCgkJCQkJCS8vIGFsc28gY2hlY2sgdG8gaW5zdXJl
IGlkIGlzIGEgc3RyaW5nIHRvIGF2b2lkIHNlbGVjdGluZyBhbiBlbGVtZW50IHdp
dGggdGhlIG5hbWUgb2YgJ2lkJyBpbnNpZGUgYSBmb3JtCgkJCQkJCWlmICggKGpR
dWVyeS5icm93c2VyLm1zaWV8fGpRdWVyeS5icm93c2VyLm9wZXJhKSAmJiBvaWQg
JiYgdHlwZW9mIG9pZC5pZCA9PSAic3RyaW5nIiAmJiBvaWQuaWQgIT0gbVsyXSAp
CgkJCQkJCQlvaWQgPSBqUXVlcnkoJ1tAaWQ9IicrbVsyXSsnIl0nLCBlbGVtKVsw
XTsKCgkJCQkJCS8vIERvIGEgcXVpY2sgY2hlY2sgZm9yIG5vZGUgbmFtZSAod2hl
cmUgYXBwbGljYWJsZSkgc28KCQkJCQkJLy8gdGhhdCBkaXYjZm9vIHNlYXJjaGVz
IHdpbGwgYmUgcmVhbGx5IGZhc3QKCQkJCQkJcmV0ID0gciA9IG9pZCAmJiAoIW1b
M10gfHwgalF1ZXJ5Lm5vZGVOYW1lKG9pZCwgbVszXSkpID8gW29pZF0gOiBbXTsK
CQkJCQl9IGVsc2UgewoJCQkJCQkvLyBXZSBuZWVkIHRvIGZpbmQgYWxsIGRlc2Nl
bmRhbnQgZWxlbWVudHMKCQkJCQkJZm9yICggdmFyIGkgPSAwOyByZXRbaV07IGkr
KyApIHsKCQkJCQkJCS8vIEdyYWIgdGhlIHRhZyBuYW1lIGJlaW5nIHNlYXJjaGVk
IGZvcgoJCQkJCQkJdmFyIHRhZyA9IG1bMV0gPT0gIiMiICYmIG1bM10gPyBtWzNd
IDogbVsxXSAhPSAiIiB8fCBtWzBdID09ICIiID8gIioiIDogbVsyXTsKCgkJCQkJ
CQkvLyBIYW5kbGUgSUU3IGJlaW5nIHJlYWxseSBkdW1iIGFib3V0IDxvYmplY3Q+
cwoJCQkJCQkJaWYgKCB0YWcgPT0gIioiICYmIHJldFtpXS5ub2RlTmFtZS50b0xv
d2VyQ2FzZSgpID09ICJvYmplY3QiICkKCQkJCQkJCQl0YWcgPSAicGFyYW0iOwoK
CQkJCQkJCXIgPSBqUXVlcnkubWVyZ2UoIHIsIHJldFtpXS5nZXRFbGVtZW50c0J5
VGFnTmFtZSggdGFnICkpOwoJCQkJCQl9CgoJCQkJCQkvLyBJdCdzIGZhc3RlciB0
byBmaWx0ZXIgYnkgY2xhc3MgYW5kIGJlIGRvbmUgd2l0aCBpdAoJCQkJCQlpZiAo
IG1bMV0gPT0gIi4iICkKCQkJCQkJCXIgPSBqUXVlcnkuY2xhc3NGaWx0ZXIoIHIs
IG1bMl0gKTsKCgkJCQkJCS8vIFNhbWUgd2l0aCBJRCBmaWx0ZXJpbmcKCQkJCQkJ
aWYgKCBtWzFdID09ICIjIiApIHsKCQkJCQkJCXZhciB0bXAgPSBbXTsKCgkJCQkJ
CQkvLyBUcnkgdG8gZmluZCB0aGUgZWxlbWVudCB3aXRoIHRoZSBJRAoJCQkJCQkJ
Zm9yICggdmFyIGkgPSAwOyByW2ldOyBpKysgKQoJCQkJCQkJCWlmICggcltpXS5n
ZXRBdHRyaWJ1dGUoImlkIikgPT0gbVsyXSApIHsKCQkJCQkJCQkJdG1wID0gWyBy
W2ldIF07CgkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCX0KCgkJCQkJCQlyID0gdG1w
OwoJCQkJCQl9CgoJCQkJCQlyZXQgPSByOwoJCQkJCX0KCgkJCQkJdCA9IHQucmVw
bGFjZSggcmUyLCAiIiApOwoJCQkJfQoKCQkJfQoKCQkJLy8gSWYgYSBzZWxlY3Rv
ciBzdHJpbmcgc3RpbGwgZXhpc3RzCgkJCWlmICggdCApIHsKCQkJCS8vIEF0dGVt
cHQgdG8gZmlsdGVyIGl0CgkJCQl2YXIgdmFsID0galF1ZXJ5LmZpbHRlcih0LHIp
OwoJCQkJcmV0ID0gciA9IHZhbC5yOwoJCQkJdCA9IGpRdWVyeS50cmltKHZhbC50
KTsKCQkJfQoJCX0KCgkJLy8gQW4gZXJyb3Igb2NjdXJyZWQgd2l0aCB0aGUgc2Vs
ZWN0b3I7CgkJLy8ganVzdCByZXR1cm4gYW4gZW1wdHkgc2V0IGluc3RlYWQKCQlp
ZiAoIHQgKQoJCQlyZXQgPSBbXTsKCgkJLy8gUmVtb3ZlIHRoZSByb290IGNvbnRl
eHQKCQlpZiAoIHJldCAmJiBjb250ZXh0ID09IHJldFswXSApCgkJCXJldC5zaGlm
dCgpOwoKCQkvLyBBbmQgY29tYmluZSB0aGUgcmVzdWx0cwoJCWRvbmUgPSBqUXVl
cnkubWVyZ2UoIGRvbmUsIHJldCApOwoKCQlyZXR1cm4gZG9uZTsKCX0sCgoJY2xh
c3NGaWx0ZXI6IGZ1bmN0aW9uKHIsbSxub3QpewoJCW0gPSAiICIgKyBtICsgIiAi
OwoJCXZhciB0bXAgPSBbXTsKCQlmb3IgKCB2YXIgaSA9IDA7IHJbaV07IGkrKyAp
IHsKCQkJdmFyIHBhc3MgPSAoIiAiICsgcltpXS5jbGFzc05hbWUgKyAiICIpLmlu
ZGV4T2YoIG0gKSA+PSAwOwoJCQlpZiAoICFub3QgJiYgcGFzcyB8fCBub3QgJiYg
IXBhc3MgKQoJCQkJdG1wLnB1c2goIHJbaV0gKTsKCQl9CgkJcmV0dXJuIHRtcDsK
CX0sCgoJZmlsdGVyOiBmdW5jdGlvbih0LHIsbm90KSB7CgkJdmFyIGxhc3Q7CgoJ
CS8vIExvb2sgZm9yIGNvbW1vbiBmaWx0ZXIgZXhwcmVzc2lvbnMKCQl3aGlsZSAo
IHQgJiYgdCAhPSBsYXN0ICkgewoJCQlsYXN0ID0gdDsKCgkJCXZhciBwID0galF1
ZXJ5LnBhcnNlLCBtOwoKCQkJZm9yICggdmFyIGkgPSAwOyBwW2ldOyBpKysgKSB7
CgkJCQltID0gcFtpXS5leGVjKCB0ICk7CgoJCQkJaWYgKCBtICkgewoJCQkJCS8v
IFJlbW92ZSB3aGF0IHdlIGp1c3QgbWF0Y2hlZAoJCQkJCXQgPSB0LnN1YnN0cmlu
ZyggbVswXS5sZW5ndGggKTsKCgkJCQkJbVsyXSA9IG1bMl0ucmVwbGFjZSgvXFwv
ZywgIiIpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgoJCQlpZiAoICFtICkKCQkJ
CWJyZWFrOwoKCQkJLy8gOm5vdCgpIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgY2Fu
IGJlIG9wdGltaXplZCBieQoJCQkvLyBrZWVwaW5nIGl0IG91dCBvZiB0aGUgZXhw
cmVzc2lvbiBsaXN0CgkJCWlmICggbVsxXSA9PSAiOiIgJiYgbVsyXSA9PSAibm90
IiApCgkJCQkvLyBvcHRpbWl6ZSBpZiBvbmx5IG9uZSBzZWxlY3RvciBmb3VuZCAo
bW9zdCBjb21tb24gY2FzZSkKCQkJCXIgPSBpc1NpbXBsZS50ZXN0KCBtWzNdICkg
PwoJCQkJCWpRdWVyeS5maWx0ZXIobVszXSwgciwgdHJ1ZSkuciA6CgkJCQkJalF1
ZXJ5KCByICkubm90KCBtWzNdICk7CgoJCQkvLyBXZSBjYW4gZ2V0IGEgYmlnIHNw
ZWVkIGJvb3N0IGJ5IGZpbHRlcmluZyBieSBjbGFzcyBoZXJlCgkJCWVsc2UgaWYg
KCBtWzFdID09ICIuIiApCgkJCQlyID0galF1ZXJ5LmNsYXNzRmlsdGVyKHIsIG1b
Ml0sIG5vdCk7CgoJCQllbHNlIGlmICggbVsxXSA9PSAiWyIgKSB7CgkJCQl2YXIg
dG1wID0gW10sIHR5cGUgPSBtWzNdOwoKCQkJCWZvciAoIHZhciBpID0gMCwgcmwg
PSByLmxlbmd0aDsgaSA8IHJsOyBpKysgKSB7CgkJCQkJdmFyIGEgPSByW2ldLCB6
ID0gYVsgalF1ZXJ5LnByb3BzW21bMl1dIHx8IG1bMl0gXTsKCgkJCQkJaWYgKCB6
ID09IG51bGwgfHwgL2hyZWZ8c3JjfHNlbGVjdGVkLy50ZXN0KG1bMl0pICkKCQkJ
CQkJeiA9IGpRdWVyeS5hdHRyKGEsbVsyXSkgfHwgJyc7CgoJCQkJCWlmICggKHR5
cGUgPT0gIiIgJiYgISF6IHx8CgkJCQkJCSB0eXBlID09ICI9IiAmJiB6ID09IG1b
NV0gfHwKCQkJCQkJIHR5cGUgPT0gIiE9IiAmJiB6ICE9IG1bNV0gfHwKCQkJCQkJ
IHR5cGUgPT0gIl49IiAmJiB6ICYmICF6LmluZGV4T2YobVs1XSkgfHwKCQkJCQkJ
IHR5cGUgPT0gIiQ9IiAmJiB6LnN1YnN0cih6Lmxlbmd0aCAtIG1bNV0ubGVuZ3Ro
KSA9PSBtWzVdIHx8CgkJCQkJCSAodHlwZSA9PSAiKj0iIHx8IHR5cGUgPT0gIn49
IikgJiYgei5pbmRleE9mKG1bNV0pID49IDApIF4gbm90ICkKCQkJCQkJCXRtcC5w
dXNoKCBhICk7CgkJCQl9CgoJCQkJciA9IHRtcDsKCgkJCS8vIFdlIGNhbiBnZXQg
YSBzcGVlZCBib29zdCBieSBoYW5kbGluZyBudGgtY2hpbGQgaGVyZQoJCQl9IGVs
c2UgaWYgKCBtWzFdID09ICI6IiAmJiBtWzJdID09ICJudGgtY2hpbGQiICkgewoJ
CQkJdmFyIG1lcmdlID0ge30sIHRtcCA9IFtdLAoJCQkJCS8vIHBhcnNlIGVxdWF0
aW9ucyBsaWtlICdldmVuJywgJ29kZCcsICc1JywgJzJuJywgJzNuKzInLCAnNG4t
MScsICctbis2JwoJCQkJCXRlc3QgPSAvKC0/KShcZCopbigoPzpcK3wtKT9cZCop
Ly5leGVjKAoJCQkJCQltWzNdID09ICJldmVuIiAmJiAiMm4iIHx8IG1bM10gPT0g
Im9kZCIgJiYgIjJuKzEiIHx8CgkJCQkJCSEvXEQvLnRlc3QobVszXSkgJiYgIjBu
KyIgKyBtWzNdIHx8IG1bM10pLAoJCQkJCS8vIGNhbGN1bGF0ZSB0aGUgbnVtYmVy
cyAoZmlyc3QpbisobGFzdCkgaW5jbHVkaW5nIGlmIHRoZXkgYXJlIG5lZ2F0aXZl
CgkJCQkJZmlyc3QgPSAodGVzdFsxXSArICh0ZXN0WzJdIHx8IDEpKSAtIDAsIGxh
c3QgPSB0ZXN0WzNdIC0gMDsKCgkJCQkvLyBsb29wIHRocm91Z2ggYWxsIHRoZSBl
bGVtZW50cyBsZWZ0IGluIHRoZSBqUXVlcnkgb2JqZWN0CgkJCQlmb3IgKCB2YXIg
aSA9IDAsIHJsID0gci5sZW5ndGg7IGkgPCBybDsgaSsrICkgewoJCQkJCXZhciBu
b2RlID0gcltpXSwgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZSwgaWQgPSBq
UXVlcnkuZGF0YShwYXJlbnROb2RlKTsKCgkJCQkJaWYgKCAhbWVyZ2VbaWRdICkg
ewoJCQkJCQl2YXIgYyA9IDE7CgoJCQkJCQlmb3IgKCB2YXIgbiA9IHBhcmVudE5v
ZGUuZmlyc3RDaGlsZDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKQoJCQkJCQkJaWYg
KCBuLm5vZGVUeXBlID09IDEgKQoJCQkJCQkJCW4ubm9kZUluZGV4ID0gYysrOwoK
CQkJCQkJbWVyZ2VbaWRdID0gdHJ1ZTsKCQkJCQl9CgoJCQkJCXZhciBhZGQgPSBm
YWxzZTsKCgkJCQkJaWYgKCBmaXJzdCA9PSAwICkgewoJCQkJCQlpZiAoIG5vZGUu
bm9kZUluZGV4ID09IGxhc3QgKQoJCQkJCQkJYWRkID0gdHJ1ZTsKCQkJCQl9IGVs
c2UgaWYgKCAobm9kZS5ub2RlSW5kZXggLSBsYXN0KSAlIGZpcnN0ID09IDAgJiYg
KG5vZGUubm9kZUluZGV4IC0gbGFzdCkgLyBmaXJzdCA+PSAwICkKCQkJCQkJYWRk
ID0gdHJ1ZTsKCgkJCQkJaWYgKCBhZGQgXiBub3QgKQoJCQkJCQl0bXAucHVzaCgg
bm9kZSApOwoJCQkJfQoKCQkJCXIgPSB0bXA7CgoJCQkvLyBPdGhlcndpc2UsIGZp
bmQgdGhlIGV4cHJlc3Npb24gdG8gZXhlY3V0ZQoJCQl9IGVsc2UgewoJCQkJdmFy
IGZuID0galF1ZXJ5LmV4cHJbIG1bMV0gXTsKCQkJCWlmICggdHlwZW9mIGZuID09
ICJvYmplY3QiICkKCQkJCQlmbiA9IGZuWyBtWzJdIF07CgoJCQkJaWYgKCB0eXBl
b2YgZm4gPT0gInN0cmluZyIgKQoJCQkJCWZuID0gZXZhbCgiZmFsc2V8fGZ1bmN0
aW9uKGEsaSl7cmV0dXJuICIgKyBmbiArICI7fSIpOwoKCQkJCS8vIEV4ZWN1dGUg
aXQgYWdhaW5zdCB0aGUgY3VycmVudCBmaWx0ZXIKCQkJCXIgPSBqUXVlcnkuZ3Jl
cCggciwgZnVuY3Rpb24oZWxlbSwgaSl7CgkJCQkJcmV0dXJuIGZuKGVsZW0sIGks
IG0sIHIpOwoJCQkJfSwgbm90ICk7CgkJCX0KCQl9CgoJCS8vIFJldHVybiBhbiBh
cnJheSBvZiBmaWx0ZXJlZCBlbGVtZW50cyAocikKCQkvLyBhbmQgdGhlIG1vZGlm
aWVkIGV4cHJlc3Npb24gc3RyaW5nICh0KQoJCXJldHVybiB7IHI6IHIsIHQ6IHQg
fTsKCX0sCgoJZGlyOiBmdW5jdGlvbiggZWxlbSwgZGlyICl7CgkJdmFyIG1hdGNo
ZWQgPSBbXSwKCQkJY3VyID0gZWxlbVtkaXJdOwoJCXdoaWxlICggY3VyICYmIGN1
ciAhPSBkb2N1bWVudCApIHsKCQkJaWYgKCBjdXIubm9kZVR5cGUgPT0gMSApCgkJ
CQltYXRjaGVkLnB1c2goIGN1ciApOwoJCQljdXIgPSBjdXJbZGlyXTsKCQl9CgkJ
cmV0dXJuIG1hdGNoZWQ7Cgl9LAoKCW50aDogZnVuY3Rpb24oY3VyLHJlc3VsdCxk
aXIsZWxlbSl7CgkJcmVzdWx0ID0gcmVzdWx0IHx8IDE7CgkJdmFyIG51bSA9IDA7
CgoJCWZvciAoIDsgY3VyOyBjdXIgPSBjdXJbZGlyXSApCgkJCWlmICggY3VyLm5v
ZGVUeXBlID09IDEgJiYgKytudW0gPT0gcmVzdWx0ICkKCQkJCWJyZWFrOwoKCQly
ZXR1cm4gY3VyOwoJfSwKCglzaWJsaW5nOiBmdW5jdGlvbiggbiwgZWxlbSApIHsK
CQl2YXIgciA9IFtdOwoKCQlmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkg
ewoJCQlpZiAoIG4ubm9kZVR5cGUgPT0gMSAmJiBuICE9IGVsZW0gKQoJCQkJci5w
dXNoKCBuICk7CgkJfQoKCQlyZXR1cm4gcjsKCX0KfSk7Ci8qCiAqIEEgbnVtYmVy
IG9mIGhlbHBlciBmdW5jdGlvbnMgdXNlZCBmb3IgbWFuYWdpbmcgZXZlbnRzLgog
KiBNYW55IG9mIHRoZSBpZGVhcyBiZWhpbmQgdGhpcyBjb2RlIG9yaWduYXRlZCBm
cm9tCiAqIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeS4KICovCmpRdWVy
eS5ldmVudCA9IHsKCgkvLyBCaW5kIGFuIGV2ZW50IHRvIGFuIGVsZW1lbnQKCS8v
IE9yaWdpbmFsIGJ5IERlYW4gRWR3YXJkcwoJYWRkOiBmdW5jdGlvbihlbGVtLCB0
eXBlcywgaGFuZGxlciwgZGF0YSkgewoJCWlmICggZWxlbS5ub2RlVHlwZSA9PSAz
IHx8IGVsZW0ubm9kZVR5cGUgPT0gOCApCgkJCXJldHVybjsKCgkJLy8gRm9yIHdo
YXRldmVyIHJlYXNvbiwgSUUgaGFzIHRyb3VibGUgcGFzc2luZyB0aGUgd2luZG93
IG9iamVjdAoJCS8vIGFyb3VuZCwgY2F1c2luZyBpdCB0byBiZSBjbG9uZWQgaW4g
dGhlIHByb2Nlc3MKCQlpZiAoIGpRdWVyeS5icm93c2VyLm1zaWUgJiYgZWxlbS5z
ZXRJbnRlcnZhbCApCgkJCWVsZW0gPSB3aW5kb3c7CgoJCS8vIE1ha2Ugc3VyZSB0
aGF0IHRoZSBmdW5jdGlvbiBiZWluZyBleGVjdXRlZCBoYXMgYSB1bmlxdWUgSUQK
CQlpZiAoICFoYW5kbGVyLmd1aWQgKQoJCQloYW5kbGVyLmd1aWQgPSB0aGlzLmd1
aWQrKzsKCgkJLy8gaWYgZGF0YSBpcyBwYXNzZWQsIGJpbmQgdG8gaGFuZGxlcgoJ
CWlmKCBkYXRhICE9IHVuZGVmaW5lZCApIHsKCQkJLy8gQ3JlYXRlIHRlbXBvcmFy
eSBmdW5jdGlvbiBwb2ludGVyIHRvIG9yaWdpbmFsIGhhbmRsZXIKCQkJdmFyIGZu
ID0gaGFuZGxlcjsKCgkJCS8vIENyZWF0ZSB1bmlxdWUgaGFuZGxlciBmdW5jdGlv
biwgd3JhcHBlZCBhcm91bmQgb3JpZ2luYWwgaGFuZGxlcgoJCQloYW5kbGVyID0g
dGhpcy5wcm94eSggZm4sIGZ1bmN0aW9uKCkgewoJCQkJLy8gUGFzcyBhcmd1bWVu
dHMgYW5kIGNvbnRleHQgdG8gb3JpZ2luYWwgaGFuZGxlcgoJCQkJcmV0dXJuIGZu
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CgkJCX0pOwoKCQkJLy8gU3RvcmUgZGF0
YSBpbiB1bmlxdWUgaGFuZGxlcgoJCQloYW5kbGVyLmRhdGEgPSBkYXRhOwoJCX0K
CgkJLy8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZQoJCXZhciBl
dmVudHMgPSBqUXVlcnkuZGF0YShlbGVtLCAiZXZlbnRzIikgfHwgalF1ZXJ5LmRh
dGEoZWxlbSwgImV2ZW50cyIsIHt9KSwKCQkJaGFuZGxlID0galF1ZXJ5LmRhdGEo
ZWxlbSwgImhhbmRsZSIpIHx8IGpRdWVyeS5kYXRhKGVsZW0sICJoYW5kbGUiLCBm
dW5jdGlvbigpewoJCQkJLy8gSGFuZGxlIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSB0
cmlnZ2VyIGFuZCB3aGVuCgkJCQkvLyBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIg
YSBwYWdlIGhhcyB1bmxvYWRlZAoJCQkJaWYgKCB0eXBlb2YgalF1ZXJ5ICE9ICJ1
bmRlZmluZWQiICYmICFqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkKCQkJCQlyZXR1
cm4galF1ZXJ5LmV2ZW50LmhhbmRsZS5hcHBseShhcmd1bWVudHMuY2FsbGVlLmVs
ZW0sIGFyZ3VtZW50cyk7CgkJCX0pOwoJCS8vIEFkZCBlbGVtIGFzIGEgcHJvcGVy
dHkgb2YgdGhlIGhhbmRsZSBmdW5jdGlvbgoJCS8vIFRoaXMgaXMgdG8gcHJldmVu
dCBhIG1lbW9yeSBsZWFrIHdpdGggbm9uLW5hdGl2ZQoJCS8vIGV2ZW50IGluIElF
LgoJCWhhbmRsZS5lbGVtID0gZWxlbTsKCgkJLy8gSGFuZGxlIG11bHRpcGxlIGV2
ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZQoJCS8vIGpRdWVyeSguLi4pLmJpbmQo
Im1vdXNlb3ZlciBtb3VzZW91dCIsIGZuKTsKCQlqUXVlcnkuZWFjaCh0eXBlcy5z
cGxpdCgvXHMrLyksIGZ1bmN0aW9uKGluZGV4LCB0eXBlKSB7CgkJCS8vIE5hbWVz
cGFjZWQgZXZlbnQgaGFuZGxlcnMKCQkJdmFyIHBhcnRzID0gdHlwZS5zcGxpdCgi
LiIpOwoJCQl0eXBlID0gcGFydHNbMF07CgkJCWhhbmRsZXIudHlwZSA9IHBhcnRz
WzFdOwoKCQkJLy8gR2V0IHRoZSBjdXJyZW50IGxpc3Qgb2YgZnVuY3Rpb25zIGJv
dW5kIHRvIHRoaXMgZXZlbnQKCQkJdmFyIGhhbmRsZXJzID0gZXZlbnRzW3R5cGVd
OwoKCQkJLy8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZQoJCQlpZiAoIWhh
bmRsZXJzKSB7CgkJCQloYW5kbGVycyA9IGV2ZW50c1t0eXBlXSA9IHt9OwoKCQkJ
CS8vIENoZWNrIGZvciBhIHNwZWNpYWwgZXZlbnQgaGFuZGxlcgoJCQkJLy8gT25s
eSB1c2UgYWRkRXZlbnRMaXN0ZW5lci9hdHRhY2hFdmVudCBpZiB0aGUgc3BlY2lh
bAoJCQkJLy8gZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZQoJCQkJaWYgKCAh
alF1ZXJ5LmV2ZW50LnNwZWNpYWxbdHlwZV0gfHwgalF1ZXJ5LmV2ZW50LnNwZWNp
YWxbdHlwZV0uc2V0dXAuY2FsbChlbGVtKSA9PT0gZmFsc2UgKSB7CgkJCQkJLy8g
QmluZCB0aGUgZ2xvYmFsIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKCQkJ
CQlpZiAoZWxlbS5hZGRFdmVudExpc3RlbmVyKQoJCQkJCQllbGVtLmFkZEV2ZW50
TGlzdGVuZXIodHlwZSwgaGFuZGxlLCBmYWxzZSk7CgkJCQkJZWxzZSBpZiAoZWxl
bS5hdHRhY2hFdmVudCkKCQkJCQkJZWxlbS5hdHRhY2hFdmVudCgib24iICsgdHlw
ZSwgaGFuZGxlKTsKCQkJCX0KCQkJfQoKCQkJLy8gQWRkIHRoZSBmdW5jdGlvbiB0
byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdAoJCQloYW5kbGVyc1toYW5kbGVy
Lmd1aWRdID0gaGFuZGxlcjsKCgkJCS8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZl
bnRzIGhhdmUgYmVlbiB1c2VkLCBmb3IgZ2xvYmFsIHRyaWdnZXJpbmcKCQkJalF1
ZXJ5LmV2ZW50Lmdsb2JhbFt0eXBlXSA9IHRydWU7CgkJfSk7CgoJCS8vIE51bGxp
ZnkgZWxlbSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBpbiBJRQoJCWVsZW0gPSBu
dWxsOwoJfSwKCglndWlkOiAxLAoJZ2xvYmFsOiB7fSwKCgkvLyBEZXRhY2ggYW4g
ZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnQKCXJlbW92ZTog
ZnVuY3Rpb24oZWxlbSwgdHlwZXMsIGhhbmRsZXIpIHsKCQkvLyBkb24ndCBkbyBl
dmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcwoJCWlmICggZWxlbS5ub2Rl
VHlwZSA9PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT0gOCApCgkJCXJldHVybjsKCgkJ
dmFyIGV2ZW50cyA9IGpRdWVyeS5kYXRhKGVsZW0sICJldmVudHMiKSwgcmV0LCBp
bmRleDsKCgkJaWYgKCBldmVudHMgKSB7CgkJCS8vIFVuYmluZCBhbGwgZXZlbnRz
IGZvciB0aGUgZWxlbWVudAoJCQlpZiAoIHR5cGVzID09IHVuZGVmaW5lZCB8fCAo
dHlwZW9mIHR5cGVzID09ICJzdHJpbmciICYmIHR5cGVzLmNoYXJBdCgwKSA9PSAi
LiIpICkKCQkJCWZvciAoIHZhciB0eXBlIGluIGV2ZW50cyApCgkJCQkJdGhpcy5y
ZW1vdmUoIGVsZW0sIHR5cGUgKyAodHlwZXMgfHwgIiIpICk7CgkJCWVsc2UgewoJ
CQkJLy8gdHlwZXMgaXMgYWN0dWFsbHkgYW4gZXZlbnQgb2JqZWN0IGhlcmUKCQkJ
CWlmICggdHlwZXMudHlwZSApIHsKCQkJCQloYW5kbGVyID0gdHlwZXMuaGFuZGxl
cjsKCQkJCQl0eXBlcyA9IHR5cGVzLnR5cGU7CgkJCQl9CgoJCQkJLy8gSGFuZGxl
IG11bHRpcGxlIGV2ZW50cyBzZXBlcmF0ZWQgYnkgYSBzcGFjZQoJCQkJLy8galF1
ZXJ5KC4uLikudW5iaW5kKCJtb3VzZW92ZXIgbW91c2VvdXQiLCBmbik7CgkJCQlq
UXVlcnkuZWFjaCh0eXBlcy5zcGxpdCgvXHMrLyksIGZ1bmN0aW9uKGluZGV4LCB0
eXBlKXsKCQkJCQkvLyBOYW1lc3BhY2VkIGV2ZW50IGhhbmRsZXJzCgkJCQkJdmFy
IHBhcnRzID0gdHlwZS5zcGxpdCgiLiIpOwoJCQkJCXR5cGUgPSBwYXJ0c1swXTsK
CgkJCQkJaWYgKCBldmVudHNbdHlwZV0gKSB7CgkJCQkJCS8vIHJlbW92ZSB0aGUg
Z2l2ZW4gaGFuZGxlciBmb3IgdGhlIGdpdmVuIHR5cGUKCQkJCQkJaWYgKCBoYW5k
bGVyICkKCQkJCQkJCWRlbGV0ZSBldmVudHNbdHlwZV1baGFuZGxlci5ndWlkXTsK
CgkJCQkJCS8vIHJlbW92ZSBhbGwgaGFuZGxlcnMgZm9yIHRoZSBnaXZlbiB0eXBl
CgkJCQkJCWVsc2UKCQkJCQkJCWZvciAoIGhhbmRsZXIgaW4gZXZlbnRzW3R5cGVd
ICkKCQkJCQkJCQkvLyBIYW5kbGUgdGhlIHJlbW92YWwgb2YgbmFtZXNwYWNlZCBl
dmVudHMKCQkJCQkJCQlpZiAoICFwYXJ0c1sxXSB8fCBldmVudHNbdHlwZV1baGFu
ZGxlcl0udHlwZSA9PSBwYXJ0c1sxXSApCgkJCQkJCQkJCWRlbGV0ZSBldmVudHNb
dHlwZV1baGFuZGxlcl07CgoJCQkJCQkvLyByZW1vdmUgZ2VuZXJpYyBldmVudCBo
YW5kbGVyIGlmIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3QKCQkJCQkJZm9yICggcmV0
IGluIGV2ZW50c1t0eXBlXSApIGJyZWFrOwoJCQkJCQlpZiAoICFyZXQgKSB7CgkJ
CQkJCQlpZiAoICFqUXVlcnkuZXZlbnQuc3BlY2lhbFt0eXBlXSB8fCBqUXVlcnku
ZXZlbnQuc3BlY2lhbFt0eXBlXS50ZWFyZG93bi5jYWxsKGVsZW0pID09PSBmYWxz
ZSApIHsKCQkJCQkJCQlpZiAoZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKQoJCQkJ
CQkJCQllbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgalF1ZXJ5LmRhdGEo
ZWxlbSwgImhhbmRsZSIpLCBmYWxzZSk7CgkJCQkJCQkJZWxzZSBpZiAoZWxlbS5k
ZXRhY2hFdmVudCkKCQkJCQkJCQkJZWxlbS5kZXRhY2hFdmVudCgib24iICsgdHlw
ZSwgalF1ZXJ5LmRhdGEoZWxlbSwgImhhbmRsZSIpKTsKCQkJCQkJCX0KCQkJCQkJ
CXJldCA9IG51bGw7CgkJCQkJCQlkZWxldGUgZXZlbnRzW3R5cGVdOwoJCQkJCQl9
CgkJCQkJfQoJCQkJfSk7CgkJCX0KCgkJCS8vIFJlbW92ZSB0aGUgZXhwYW5kbyBp
ZiBpdCdzIG5vIGxvbmdlciB1c2VkCgkJCWZvciAoIHJldCBpbiBldmVudHMgKSBi
cmVhazsKCQkJaWYgKCAhcmV0ICkgewoJCQkJdmFyIGhhbmRsZSA9IGpRdWVyeS5k
YXRhKCBlbGVtLCAiaGFuZGxlIiApOwoJCQkJaWYgKCBoYW5kbGUgKSBoYW5kbGUu
ZWxlbSA9IG51bGw7CgkJCQlqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwgImV2ZW50
cyIgKTsKCQkJCWpRdWVyeS5yZW1vdmVEYXRhKCBlbGVtLCAiaGFuZGxlIiApOwoJ
CQl9CgkJfQoJfSwKCgl0cmlnZ2VyOiBmdW5jdGlvbih0eXBlLCBkYXRhLCBlbGVt
LCBkb25hdGl2ZSwgZXh0cmEpIHsKCQkvLyBDbG9uZSB0aGUgaW5jb21pbmcgZGF0
YSwgaWYgYW55CgkJZGF0YSA9IGpRdWVyeS5tYWtlQXJyYXkoZGF0YSk7CgoJCWlm
ICggdHlwZS5pbmRleE9mKCIhIikgPj0gMCApIHsKCQkJdHlwZSA9IHR5cGUuc2xp
Y2UoMCwgLTEpOwoJCQl2YXIgZXhjbHVzaXZlID0gdHJ1ZTsKCQl9CgoJCS8vIEhh
bmRsZSBhIGdsb2JhbCB0cmlnZ2VyCgkJaWYgKCAhZWxlbSApIHsKCQkJLy8gT25s
eSB0cmlnZ2VyIGlmIHdlJ3ZlIGV2ZXIgYm91bmQgYW4gZXZlbnQgZm9yIGl0CgkJ
CWlmICggdGhpcy5nbG9iYWxbdHlwZV0gKQoJCQkJalF1ZXJ5KCIqIikuYWRkKFt3
aW5kb3csIGRvY3VtZW50XSkudHJpZ2dlcih0eXBlLCBkYXRhKTsKCgkJLy8gSGFu
ZGxlIHRyaWdnZXJpbmcgYSBzaW5nbGUgZWxlbWVudAoJCX0gZWxzZSB7CgkJCS8v
IGRvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzCgkJCWlm
ICggZWxlbS5ub2RlVHlwZSA9PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT0gOCApCgkJ
CQlyZXR1cm4gdW5kZWZpbmVkOwoKCQkJdmFyIHZhbCwgcmV0LCBmbiA9IGpRdWVy
eS5pc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gfHwgbnVsbCApLAoJCQkJLy8gQ2hl
Y2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gcHJvdmlkZSBhIGZha2UgZXZlbnQsIG9y
IG5vdAoJCQkJZXZlbnQgPSAhZGF0YVswXSB8fCAhZGF0YVswXS5wcmV2ZW50RGVm
YXVsdDsKCgkJCS8vIFBhc3MgYWxvbmcgYSBmYWtlIGV2ZW50CgkJCWlmICggZXZl
bnQgKSB7CgkJCQlkYXRhLnVuc2hpZnQoewoJCQkJCXR5cGU6IHR5cGUsCgkJCQkJ
dGFyZ2V0OiBlbGVtLAoJCQkJCXByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpe30s
CgkJCQkJc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpe30sCgkJCQkJdGltZVN0
YW1wOiBub3coKQoJCQkJfSk7CgkJCQlkYXRhWzBdW2V4cGFuZG9dID0gdHJ1ZTsg
Ly8gbm8gbmVlZCB0byBmaXggZmFrZSBldmVudAoJCQl9CgoJCQkvLyBFbmZvcmNl
IHRoZSByaWdodCB0cmlnZ2VyIHR5cGUKCQkJZGF0YVswXS50eXBlID0gdHlwZTsK
CQkJaWYgKCBleGNsdXNpdmUgKQoJCQkJZGF0YVswXS5leGNsdXNpdmUgPSB0cnVl
OwoKCQkJLy8gVHJpZ2dlciB0aGUgZXZlbnQsIGl0IGlzIGFzc3VtZWQgdGhhdCAi
aGFuZGxlIiBpcyBhIGZ1bmN0aW9uCgkJCXZhciBoYW5kbGUgPSBqUXVlcnkuZGF0
YShlbGVtLCAiaGFuZGxlIik7CgkJCWlmICggaGFuZGxlICkKCQkJCXZhbCA9IGhh
bmRsZS5hcHBseSggZWxlbSwgZGF0YSApOwoKCQkJLy8gSGFuZGxlIHRyaWdnZXJp
bmcgbmF0aXZlIC5vbmZvbyBoYW5kbGVycyAoYW5kIG9uIGxpbmtzIHNpbmNlIHdl
IGRvbid0IGNhbGwgLmNsaWNrKCkgZm9yIGxpbmtzKQoJCQlpZiAoICghZm4gfHwg
KGpRdWVyeS5ub2RlTmFtZShlbGVtLCAnYScpICYmIHR5cGUgPT0gImNsaWNrIikp
ICYmIGVsZW1bIm9uIit0eXBlXSAmJiBlbGVtWyJvbiIrdHlwZV0uYXBwbHkoIGVs
ZW0sIGRhdGEgKSA9PT0gZmFsc2UgKQoJCQkJdmFsID0gZmFsc2U7CgoJCQkvLyBF
eHRyYSBmdW5jdGlvbnMgZG9uJ3QgZ2V0IHRoZSBjdXN0b20gZXZlbnQgb2JqZWN0
CgkJCWlmICggZXZlbnQgKQoJCQkJZGF0YS5zaGlmdCgpOwoKCQkJLy8gSGFuZGxl
IHRyaWdnZXJpbmcgb2YgZXh0cmEgZnVuY3Rpb24KCQkJaWYgKCBleHRyYSAmJiBq
UXVlcnkuaXNGdW5jdGlvbiggZXh0cmEgKSApIHsKCQkJCS8vIGNhbGwgdGhlIGV4
dHJhIGZ1bmN0aW9uIGFuZCB0YWNrIHRoZSBjdXJyZW50IHJldHVybiB2YWx1ZSBv
biB0aGUgZW5kIGZvciBwb3NzaWJsZSBpbnNwZWN0aW9uCgkJCQlyZXQgPSBleHRy
YS5hcHBseSggZWxlbSwgdmFsID09IG51bGwgPyBkYXRhIDogZGF0YS5jb25jYXQo
IHZhbCApICk7CgkJCQkvLyBpZiBhbnl0aGluZyBpcyByZXR1cm5lZCwgZ2l2ZSBp
dCBwcmVjZWRlbmNlIGFuZCBoYXZlIGl0IG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMg
dmFsdWUKCQkJCWlmIChyZXQgIT09IHVuZGVmaW5lZCkKCQkJCQl2YWwgPSByZXQ7
CgkJCX0KCgkJCS8vIFRyaWdnZXIgdGhlIG5hdGl2ZSBldmVudHMgKGV4Y2VwdCBm
b3IgY2xpY2tzIG9uIGxpbmtzKQoJCQlpZiAoIGZuICYmIGRvbmF0aXZlICE9PSBm
YWxzZSAmJiB2YWwgIT09IGZhbHNlICYmICEoalF1ZXJ5Lm5vZGVOYW1lKGVsZW0s
ICdhJykgJiYgdHlwZSA9PSAiY2xpY2siKSApIHsKCQkJCXRoaXMudHJpZ2dlcmVk
ID0gdHJ1ZTsKCQkJCXRyeSB7CgkJCQkJZWxlbVsgdHlwZSBdKCk7CgkJCQkvLyBw
cmV2ZW50IElFIGZyb20gdGhyb3dpbmcgYW4gZXJyb3IgZm9yIHNvbWUgaGlkZGVu
IGVsZW1lbnRzCgkJCQl9IGNhdGNoIChlKSB7fQoJCQl9CgoJCQl0aGlzLnRyaWdn
ZXJlZCA9IGZhbHNlOwoJCX0KCgkJcmV0dXJuIHZhbDsKCX0sCgoJaGFuZGxlOiBm
dW5jdGlvbihldmVudCkgewoJCS8vIHJldHVybmVkIHVuZGVmaW5lZCBvciBmYWxz
ZQoJCXZhciB2YWwsIHJldCwgbmFtZXNwYWNlLCBhbGwsIGhhbmRsZXJzOwoKCQll
dmVudCA9IGFyZ3VtZW50c1swXSA9IGpRdWVyeS5ldmVudC5maXgoIGV2ZW50IHx8
IHdpbmRvdy5ldmVudCApOwoKCQkvLyBOYW1lc3BhY2VkIGV2ZW50IGhhbmRsZXJz
CgkJbmFtZXNwYWNlID0gZXZlbnQudHlwZS5zcGxpdCgiLiIpOwoJCWV2ZW50LnR5
cGUgPSBuYW1lc3BhY2VbMF07CgkJbmFtZXNwYWNlID0gbmFtZXNwYWNlWzFdOwoJ
CS8vIENhY2hlIHRoaXMgbm93LCBhbGwgPSB0cnVlIG1lYW5zLCBhbnkgaGFuZGxl
cgoJCWFsbCA9ICFuYW1lc3BhY2UgJiYgIWV2ZW50LmV4Y2x1c2l2ZTsKCgkJaGFu
ZGxlcnMgPSAoIGpRdWVyeS5kYXRhKHRoaXMsICJldmVudHMiKSB8fCB7fSApW2V2
ZW50LnR5cGVdOwoKCQlmb3IgKCB2YXIgaiBpbiBoYW5kbGVycyApIHsKCQkJdmFy
IGhhbmRsZXIgPSBoYW5kbGVyc1tqXTsKCgkJCS8vIEZpbHRlciB0aGUgZnVuY3Rp
b25zIGJ5IGNsYXNzCgkJCWlmICggYWxsIHx8IGhhbmRsZXIudHlwZSA9PSBuYW1l
c3BhY2UgKSB7CgkJCQkvLyBQYXNzIGluIGEgcmVmZXJlbmNlIHRvIHRoZSBoYW5k
bGVyIGZ1bmN0aW9uIGl0c2VsZgoJCQkJLy8gU28gdGhhdCB3ZSBjYW4gbGF0ZXIg
cmVtb3ZlIGl0CgkJCQlldmVudC5oYW5kbGVyID0gaGFuZGxlcjsKCQkJCWV2ZW50
LmRhdGEgPSBoYW5kbGVyLmRhdGE7CgoJCQkJcmV0ID0gaGFuZGxlci5hcHBseSgg
dGhpcywgYXJndW1lbnRzICk7CgoJCQkJaWYgKCB2YWwgIT09IGZhbHNlICkKCQkJ
CQl2YWwgPSByZXQ7CgoJCQkJaWYgKCByZXQgPT09IGZhbHNlICkgewoJCQkJCWV2
ZW50LnByZXZlbnREZWZhdWx0KCk7CgkJCQkJZXZlbnQuc3RvcFByb3BhZ2F0aW9u
KCk7CgkJCQl9CgkJCX0KCQl9CgoJCXJldHVybiB2YWw7Cgl9LAoKCWZpeDogZnVu
Y3Rpb24oZXZlbnQpIHsKCQlpZiAoIGV2ZW50W2V4cGFuZG9dID09IHRydWUgKQoJ
CQlyZXR1cm4gZXZlbnQ7CgoJCS8vIHN0b3JlIGEgY29weSBvZiB0aGUgb3JpZ2lu
YWwgZXZlbnQgb2JqZWN0CgkJLy8gYW5kICJjbG9uZSIgdG8gc2V0IHJlYWQtb25s
eSBwcm9wZXJ0aWVzCgkJdmFyIG9yaWdpbmFsRXZlbnQgPSBldmVudDsKCQlldmVu
dCA9IHsgb3JpZ2luYWxFdmVudDogb3JpZ2luYWxFdmVudCB9OwoJCXZhciBwcm9w
cyA9ICJhbHRLZXkgYXR0ckNoYW5nZSBhdHRyTmFtZSBidWJibGVzIGJ1dHRvbiBj
YW5jZWxhYmxlIGNoYXJDb2RlIGNsaWVudFggY2xpZW50WSBjdHJsS2V5IGN1cnJl
bnRUYXJnZXQgZGF0YSBkZXRhaWwgZXZlbnRQaGFzZSBmcm9tRWxlbWVudCBoYW5k
bGVyIGtleUNvZGUgbWV0YUtleSBuZXdWYWx1ZSBvcmlnaW5hbFRhcmdldCBwYWdl
WCBwYWdlWSBwcmV2VmFsdWUgcmVsYXRlZE5vZGUgcmVsYXRlZFRhcmdldCBzY3Jl
ZW5YIHNjcmVlblkgc2hpZnRLZXkgc3JjRWxlbWVudCB0YXJnZXQgdGltZVN0YW1w
IHRvRWxlbWVudCB0eXBlIHZpZXcgd2hlZWxEZWx0YSB3aGljaCIuc3BsaXQoIiAi
KTsKCQlmb3IgKCB2YXIgaT1wcm9wcy5sZW5ndGg7IGk7IGktLSApCgkJCWV2ZW50
WyBwcm9wc1tpXSBdID0gb3JpZ2luYWxFdmVudFsgcHJvcHNbaV0gXTsKCgkJLy8g
TWFyayBpdCBhcyBmaXhlZAoJCWV2ZW50W2V4cGFuZG9dID0gdHJ1ZTsKCgkJLy8g
YWRkIHByZXZlbnREZWZhdWx0IGFuZCBzdG9wUHJvcGFnYXRpb24gc2luY2UKCQkv
LyB0aGV5IHdpbGwgbm90IHdvcmsgb24gdGhlIGNsb25lCgkJZXZlbnQucHJldmVu
dERlZmF1bHQgPSBmdW5jdGlvbigpIHsKCQkJLy8gaWYgcHJldmVudERlZmF1bHQg
ZXhpc3RzIHJ1biBpdCBvbiB0aGUgb3JpZ2luYWwgZXZlbnQKCQkJaWYgKG9yaWdp
bmFsRXZlbnQucHJldmVudERlZmF1bHQpCgkJCQlvcmlnaW5hbEV2ZW50LnByZXZl
bnREZWZhdWx0KCk7CgkJCS8vIG90aGVyd2lzZSBzZXQgdGhlIHJldHVyblZhbHVl
IHByb3BlcnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byBmYWxzZSAoSUUpCgkJ
CW9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTsKCQl9OwoJCWV2ZW50
LnN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgewoJCQkvLyBpZiBzdG9wUHJv
cGFnYXRpb24gZXhpc3RzIHJ1biBpdCBvbiB0aGUgb3JpZ2luYWwgZXZlbnQKCQkJ
aWYgKG9yaWdpbmFsRXZlbnQuc3RvcFByb3BhZ2F0aW9uKQoJCQkJb3JpZ2luYWxF
dmVudC5zdG9wUHJvcGFnYXRpb24oKTsKCQkJLy8gb3RoZXJ3aXNlIHNldCB0aGUg
Y2FuY2VsQnViYmxlIHByb3BlcnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byB0
cnVlIChJRSkKCQkJb3JpZ2luYWxFdmVudC5jYW5jZWxCdWJibGUgPSB0cnVlOwoJ
CX07CgoJCS8vIEZpeCB0aW1lU3RhbXAKCQlldmVudC50aW1lU3RhbXAgPSBldmVu
dC50aW1lU3RhbXAgfHwgbm93KCk7CgoJCS8vIEZpeCB0YXJnZXQgcHJvcGVydHks
IGlmIG5lY2Vzc2FyeQoJCWlmICggIWV2ZW50LnRhcmdldCApCgkJCWV2ZW50LnRh
cmdldCA9IGV2ZW50LnNyY0VsZW1lbnQgfHwgZG9jdW1lbnQ7IC8vIEZpeGVzICMx
OTI1IHdoZXJlIHNyY0VsZW1lbnQgbWlnaHQgbm90IGJlIGRlZmluZWQgZWl0aGVy
CgoJCS8vIGNoZWNrIGlmIHRhcmdldCBpcyBhIHRleHRub2RlIChzYWZhcmkpCgkJ
aWYgKCBldmVudC50YXJnZXQubm9kZVR5cGUgPT0gMyApCgkJCWV2ZW50LnRhcmdl
dCA9IGV2ZW50LnRhcmdldC5wYXJlbnROb2RlOwoKCQkvLyBBZGQgcmVsYXRlZFRh
cmdldCwgaWYgbmVjZXNzYXJ5CgkJaWYgKCAhZXZlbnQucmVsYXRlZFRhcmdldCAm
JiBldmVudC5mcm9tRWxlbWVudCApCgkJCWV2ZW50LnJlbGF0ZWRUYXJnZXQgPSBl
dmVudC5mcm9tRWxlbWVudCA9PSBldmVudC50YXJnZXQgPyBldmVudC50b0VsZW1l
bnQgOiBldmVudC5mcm9tRWxlbWVudDsKCgkJLy8gQ2FsY3VsYXRlIHBhZ2VYL1kg
aWYgbWlzc2luZyBhbmQgY2xpZW50WC9ZIGF2YWlsYWJsZQoJCWlmICggZXZlbnQu
cGFnZVggPT0gbnVsbCAmJiBldmVudC5jbGllbnRYICE9IG51bGwgKSB7CgkJCXZh
ciBkb2MgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIGJvZHkgPSBkb2N1bWVu
dC5ib2R5OwoJCQlldmVudC5wYWdlWCA9IGV2ZW50LmNsaWVudFggKyAoZG9jICYm
IGRvYy5zY3JvbGxMZWZ0IHx8IGJvZHkgJiYgYm9keS5zY3JvbGxMZWZ0IHx8IDAp
IC0gKGRvYy5jbGllbnRMZWZ0IHx8IDApOwoJCQlldmVudC5wYWdlWSA9IGV2ZW50
LmNsaWVudFkgKyAoZG9jICYmIGRvYy5zY3JvbGxUb3AgfHwgYm9keSAmJiBib2R5
LnNjcm9sbFRvcCB8fCAwKSAtIChkb2MuY2xpZW50VG9wIHx8IDApOwoJCX0KCgkJ
Ly8gQWRkIHdoaWNoIGZvciBrZXkgZXZlbnRzCgkJaWYgKCAhZXZlbnQud2hpY2gg
JiYgKChldmVudC5jaGFyQ29kZSB8fCBldmVudC5jaGFyQ29kZSA9PT0gMCkgPyBl
dmVudC5jaGFyQ29kZSA6IGV2ZW50LmtleUNvZGUpICkKCQkJZXZlbnQud2hpY2gg
PSBldmVudC5jaGFyQ29kZSB8fCBldmVudC5rZXlDb2RlOwoKCQkvLyBBZGQgbWV0
YUtleSB0byBub24tTWFjIGJyb3dzZXJzICh1c2UgY3RybCBmb3IgUEMncyBhbmQg
TWV0YSBmb3IgTWFjcykKCQlpZiAoICFldmVudC5tZXRhS2V5ICYmIGV2ZW50LmN0
cmxLZXkgKQoJCQlldmVudC5tZXRhS2V5ID0gZXZlbnQuY3RybEtleTsKCgkJLy8g
QWRkIHdoaWNoIGZvciBjbGljazogMSA9PSBsZWZ0OyAyID09IG1pZGRsZTsgMyA9
PSByaWdodAoJCS8vIE5vdGU6IGJ1dHRvbiBpcyBub3Qgbm9ybWFsaXplZCwgc28g
ZG9uJ3QgdXNlIGl0CgkJaWYgKCAhZXZlbnQud2hpY2ggJiYgZXZlbnQuYnV0dG9u
ICkKCQkJZXZlbnQud2hpY2ggPSAoZXZlbnQuYnV0dG9uICYgMSA/IDEgOiAoIGV2
ZW50LmJ1dHRvbiAmIDIgPyAzIDogKCBldmVudC5idXR0b24gJiA0ID8gMiA6IDAg
KSApKTsKCgkJcmV0dXJuIGV2ZW50OwoJfSwKCglwcm94eTogZnVuY3Rpb24oIGZu
LCBwcm94eSApewoJCS8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0
byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVt
b3ZlZAoJCXByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBwcm94eS5n
dWlkIHx8IHRoaXMuZ3VpZCsrOwoJCS8vIFNvIHByb3h5IGNhbiBiZSBkZWNsYXJl
ZCBhcyBhbiBhcmd1bWVudAoJCXJldHVybiBwcm94eTsKCX0sCgoJc3BlY2lhbDog
ewoJCXJlYWR5OiB7CgkJCXNldHVwOiBmdW5jdGlvbigpIHsKCQkJCS8vIE1ha2Ug
c3VyZSB0aGUgcmVhZHkgZXZlbnQgaXMgc2V0dXAKCQkJCWJpbmRSZWFkeSgpOwoJ
CQkJcmV0dXJuOwoJCQl9LAoKCQkJdGVhcmRvd246IGZ1bmN0aW9uKCkgeyByZXR1
cm47IH0KCQl9LAoKCQltb3VzZWVudGVyOiB7CgkJCXNldHVwOiBmdW5jdGlvbigp
IHsKCQkJCWlmICggalF1ZXJ5LmJyb3dzZXIubXNpZSApIHJldHVybiBmYWxzZTsK
CQkJCWpRdWVyeSh0aGlzKS5iaW5kKCJtb3VzZW92ZXIiLCBqUXVlcnkuZXZlbnQu
c3BlY2lhbC5tb3VzZWVudGVyLmhhbmRsZXIpOwoJCQkJcmV0dXJuIHRydWU7CgkJ
CX0sCgoJCQl0ZWFyZG93bjogZnVuY3Rpb24oKSB7CgkJCQlpZiAoIGpRdWVyeS5i
cm93c2VyLm1zaWUgKSByZXR1cm4gZmFsc2U7CgkJCQlqUXVlcnkodGhpcykudW5i
aW5kKCJtb3VzZW92ZXIiLCBqUXVlcnkuZXZlbnQuc3BlY2lhbC5tb3VzZWVudGVy
LmhhbmRsZXIpOwoJCQkJcmV0dXJuIHRydWU7CgkJCX0sCgoJCQloYW5kbGVyOiBm
dW5jdGlvbihldmVudCkgewoJCQkJLy8gSWYgd2UgYWN0dWFsbHkganVzdCBtb3Vz
ZWQgb24gdG8gYSBzdWItZWxlbWVudCwgaWdub3JlIGl0CgkJCQlpZiAoIHdpdGhp
bkVsZW1lbnQoZXZlbnQsIHRoaXMpICkgcmV0dXJuIHRydWU7CgkJCQkvLyBFeGVj
dXRlIHRoZSByaWdodCBoYW5kbGVycyBieSBzZXR0aW5nIHRoZSBldmVudCB0eXBl
IHRvIG1vdXNlZW50ZXIKCQkJCWV2ZW50LnR5cGUgPSAibW91c2VlbnRlciI7CgkJ
CQlyZXR1cm4galF1ZXJ5LmV2ZW50LmhhbmRsZS5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpOwoJCQl9CgkJfSwKCgkJbW91c2VsZWF2ZTogewoJCQlzZXR1cDogZnVuY3Rp
b24oKSB7CgkJCQlpZiAoIGpRdWVyeS5icm93c2VyLm1zaWUgKSByZXR1cm4gZmFs
c2U7CgkJCQlqUXVlcnkodGhpcykuYmluZCgibW91c2VvdXQiLCBqUXVlcnkuZXZl
bnQuc3BlY2lhbC5tb3VzZWxlYXZlLmhhbmRsZXIpOwoJCQkJcmV0dXJuIHRydWU7
CgkJCX0sCgoJCQl0ZWFyZG93bjogZnVuY3Rpb24oKSB7CgkJCQlpZiAoIGpRdWVy
eS5icm93c2VyLm1zaWUgKSByZXR1cm4gZmFsc2U7CgkJCQlqUXVlcnkodGhpcyku
dW5iaW5kKCJtb3VzZW91dCIsIGpRdWVyeS5ldmVudC5zcGVjaWFsLm1vdXNlbGVh
dmUuaGFuZGxlcik7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfSwKCgkJCWhhbmRsZXI6
IGZ1bmN0aW9uKGV2ZW50KSB7CgkJCQkvLyBJZiB3ZSBhY3R1YWxseSBqdXN0IG1v
dXNlZCBvbiB0byBhIHN1Yi1lbGVtZW50LCBpZ25vcmUgaXQKCQkJCWlmICggd2l0
aGluRWxlbWVudChldmVudCwgdGhpcykgKSByZXR1cm4gdHJ1ZTsKCQkJCS8vIEV4
ZWN1dGUgdGhlIHJpZ2h0IGhhbmRsZXJzIGJ5IHNldHRpbmcgdGhlIGV2ZW50IHR5
cGUgdG8gbW91c2VsZWF2ZQoJCQkJZXZlbnQudHlwZSA9ICJtb3VzZWxlYXZlIjsK
CQkJCXJldHVybiBqUXVlcnkuZXZlbnQuaGFuZGxlLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cyk7CgkJCX0KCQl9Cgl9Cn07CgpqUXVlcnkuZm4uZXh0ZW5kKHsKCWJpbmQ6
IGZ1bmN0aW9uKCB0eXBlLCBkYXRhLCBmbiApIHsKCQlyZXR1cm4gdHlwZSA9PSAi
dW5sb2FkIiA/IHRoaXMub25lKHR5cGUsIGRhdGEsIGZuKSA6IHRoaXMuZWFjaChm
dW5jdGlvbigpewoJCQlqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlLCBmbiB8
fCBkYXRhLCBmbiAmJiBkYXRhICk7CgkJfSk7Cgl9LAoKCW9uZTogZnVuY3Rpb24o
IHR5cGUsIGRhdGEsIGZuICkgewoJCXZhciBvbmUgPSBqUXVlcnkuZXZlbnQucHJv
eHkoIGZuIHx8IGRhdGEsIGZ1bmN0aW9uKGV2ZW50KSB7CgkJCWpRdWVyeSh0aGlz
KS51bmJpbmQoZXZlbnQsIG9uZSk7CgkJCXJldHVybiAoZm4gfHwgZGF0YSkuYXBw
bHkoIHRoaXMsIGFyZ3VtZW50cyApOwoJCX0pOwoJCXJldHVybiB0aGlzLmVhY2go
ZnVuY3Rpb24oKXsKCQkJalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZSwgb25l
LCBmbiAmJiBkYXRhKTsKCQl9KTsKCX0sCgoJdW5iaW5kOiBmdW5jdGlvbiggdHlw
ZSwgZm4gKSB7CgkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpewoJCQlqUXVl
cnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlLCBmbiApOwoJCX0pOwoJfSwKCgl0
cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSwgZm4gKSB7CgkJcmV0dXJuIHRo
aXMuZWFjaChmdW5jdGlvbigpewoJCQlqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlw
ZSwgZGF0YSwgdGhpcywgdHJ1ZSwgZm4gKTsKCQl9KTsKCX0sCgoJdHJpZ2dlckhh
bmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhLCBmbiApIHsKCQlyZXR1cm4gdGhp
c1swXSAmJiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpc1sw
XSwgZmFsc2UsIGZuICk7Cgl9LAoKCXRvZ2dsZTogZnVuY3Rpb24oIGZuICkgewoJ
CS8vIFNhdmUgcmVmZXJlbmNlIHRvIGFyZ3VtZW50cyBmb3IgYWNjZXNzIGluIGNs
b3N1cmUKCQl2YXIgYXJncyA9IGFyZ3VtZW50cywgaSA9IDE7CgoJCS8vIGxpbmsg
YWxsIHRoZSBmdW5jdGlvbnMsIHNvIGFueSBvZiB0aGVtIGNhbiB1bmJpbmQgdGhp
cyBjbGljayBoYW5kbGVyCgkJd2hpbGUoIGkgPCBhcmdzLmxlbmd0aCApCgkJCWpR
dWVyeS5ldmVudC5wcm94eSggZm4sIGFyZ3NbaSsrXSApOwoKCQlyZXR1cm4gdGhp
cy5jbGljayggalF1ZXJ5LmV2ZW50LnByb3h5KCBmbiwgZnVuY3Rpb24oZXZlbnQp
IHsKCQkJLy8gRmlndXJlIG91dCB3aGljaCBmdW5jdGlvbiB0byBleGVjdXRlCgkJ
CXRoaXMubGFzdFRvZ2dsZSA9ICggdGhpcy5sYXN0VG9nZ2xlIHx8IDAgKSAlIGk7
CgoJCQkvLyBNYWtlIHN1cmUgdGhhdCBjbGlja3Mgc3RvcAoJCQlldmVudC5wcmV2
ZW50RGVmYXVsdCgpOwoKCQkJLy8gYW5kIGV4ZWN1dGUgdGhlIGZ1bmN0aW9uCgkJ
CXJldHVybiBhcmdzWyB0aGlzLmxhc3RUb2dnbGUrKyBdLmFwcGx5KCB0aGlzLCBh
cmd1bWVudHMgKSB8fCBmYWxzZTsKCQl9KSk7Cgl9LAoKCWhvdmVyOiBmdW5jdGlv
bihmbk92ZXIsIGZuT3V0KSB7CgkJcmV0dXJuIHRoaXMuYmluZCgnbW91c2VlbnRl
cicsIGZuT3ZlcikuYmluZCgnbW91c2VsZWF2ZScsIGZuT3V0KTsKCX0sCgoJcmVh
ZHk6IGZ1bmN0aW9uKGZuKSB7CgkJLy8gQXR0YWNoIHRoZSBsaXN0ZW5lcnMKCQli
aW5kUmVhZHkoKTsKCgkJLy8gSWYgdGhlIERPTSBpcyBhbHJlYWR5IHJlYWR5CgkJ
aWYgKCBqUXVlcnkuaXNSZWFkeSApCgkJCS8vIEV4ZWN1dGUgdGhlIGZ1bmN0aW9u
IGltbWVkaWF0ZWx5CgkJCWZuLmNhbGwoIGRvY3VtZW50LCBqUXVlcnkgKTsKCgkJ
Ly8gT3RoZXJ3aXNlLCByZW1lbWJlciB0aGUgZnVuY3Rpb24gZm9yIGxhdGVyCgkJ
ZWxzZQoJCQkvLyBBZGQgdGhlIGZ1bmN0aW9uIHRvIHRoZSB3YWl0IGxpc3QKCQkJ
alF1ZXJ5LnJlYWR5TGlzdC5wdXNoKCBmdW5jdGlvbigpIHsgcmV0dXJuIGZuLmNh
bGwodGhpcywgalF1ZXJ5KTsgfSApOwoKCQlyZXR1cm4gdGhpczsKCX0KfSk7Cgpq
UXVlcnkuZXh0ZW5kKHsKCWlzUmVhZHk6IGZhbHNlLAoJcmVhZHlMaXN0OiBbXSwK
CS8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHkKCXJlYWR5OiBmdW5jdGlv
bigpIHsKCQkvLyBNYWtlIHN1cmUgdGhhdCB0aGUgRE9NIGlzIG5vdCBhbHJlYWR5
IGxvYWRlZAoJCWlmICggIWpRdWVyeS5pc1JlYWR5ICkgewoJCQkvLyBSZW1lbWJl
ciB0aGF0IHRoZSBET00gaXMgcmVhZHkKCQkJalF1ZXJ5LmlzUmVhZHkgPSB0cnVl
OwoKCQkJLy8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0
ZQoJCQlpZiAoIGpRdWVyeS5yZWFkeUxpc3QgKSB7CgkJCQkvLyBFeGVjdXRlIGFs
bCBvZiB0aGVtCgkJCQlqUXVlcnkuZWFjaCggalF1ZXJ5LnJlYWR5TGlzdCwgZnVu
Y3Rpb24oKXsKCQkJCQl0aGlzLmNhbGwoIGRvY3VtZW50ICk7CgkJCQl9KTsKCgkJ
CQkvLyBSZXNldCB0aGUgbGlzdCBvZiBmdW5jdGlvbnMKCQkJCWpRdWVyeS5yZWFk
eUxpc3QgPSBudWxsOwoJCQl9CgoJCQkvLyBUcmlnZ2VyIGFueSBib3VuZCByZWFk
eSBldmVudHMKCQkJalF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VySGFuZGxlcigicmVh
ZHkiKTsKCQl9Cgl9Cn0pOwoKdmFyIHJlYWR5Qm91bmQgPSBmYWxzZTsKCmZ1bmN0
aW9uIGJpbmRSZWFkeSgpewoJaWYgKCByZWFkeUJvdW5kICkgcmV0dXJuOwoJcmVh
ZHlCb3VuZCA9IHRydWU7CgoJLy8gTW96aWxsYSwgT3BlcmEgKHNlZSBmdXJ0aGVy
IGJlbG93IGZvciBpdCkgYW5kIHdlYmtpdCBuaWdodGxpZXMgY3VycmVudGx5IHN1
cHBvcnQgdGhpcyBldmVudAoJaWYgKCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVy
ICYmICFqUXVlcnkuYnJvd3Nlci5vcGVyYSkKCQkvLyBVc2UgdGhlIGhhbmR5IGV2
ZW50IGNhbGxiYWNrCgkJZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggIkRPTUNv
bnRlbnRMb2FkZWQiLCBqUXVlcnkucmVhZHksIGZhbHNlICk7CgoJLy8gSWYgSUUg
aXMgdXNlZCBhbmQgaXMgbm90IGluIGEgZnJhbWUKCS8vIENvbnRpbnVhbGx5IGNo
ZWNrIHRvIHNlZSBpZiB0aGUgZG9jdW1lbnQgaXMgcmVhZHkKCWlmICggalF1ZXJ5
LmJyb3dzZXIubXNpZSAmJiB3aW5kb3cgPT0gdG9wICkgKGZ1bmN0aW9uKCl7CgkJ
aWYgKGpRdWVyeS5pc1JlYWR5KSByZXR1cm47CgkJdHJ5IHsKCQkJLy8gSWYgSUUg
aXMgdXNlZCwgdXNlIHRoZSB0cmljayBieSBEaWVnbyBQZXJpbmkKCQkJLy8gaHR0
cDovL2phdmFzY3JpcHQubndib3guY29tL0lFQ29udGVudExvYWRlZC8KCQkJZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCJsZWZ0Iik7CgkJfSBjYXRj
aCggZXJyb3IgKSB7CgkJCXNldFRpbWVvdXQoIGFyZ3VtZW50cy5jYWxsZWUsIDAg
KTsKCQkJcmV0dXJuOwoJCX0KCQkvLyBhbmQgZXhlY3V0ZSBhbnkgd2FpdGluZyBm
dW5jdGlvbnMKCQlqUXVlcnkucmVhZHkoKTsKCX0pKCk7CgoJaWYgKCBqUXVlcnku
YnJvd3Nlci5vcGVyYSApCgkJZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggIkRP
TUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbiAoKSB7CgkJCWlmIChqUXVlcnkuaXNS
ZWFkeSkgcmV0dXJuOwoJCQlmb3IgKHZhciBpID0gMDsgaSA8IGRvY3VtZW50LnN0
eWxlU2hlZXRzLmxlbmd0aDsgaSsrKQoJCQkJaWYgKGRvY3VtZW50LnN0eWxlU2hl
ZXRzW2ldLmRpc2FibGVkKSB7CgkJCQkJc2V0VGltZW91dCggYXJndW1lbnRzLmNh
bGxlZSwgMCApOwoJCQkJCXJldHVybjsKCQkJCX0KCQkJLy8gYW5kIGV4ZWN1dGUg
YW55IHdhaXRpbmcgZnVuY3Rpb25zCgkJCWpRdWVyeS5yZWFkeSgpOwoJCX0sIGZh
bHNlKTsKCglpZiAoIGpRdWVyeS5icm93c2VyLnNhZmFyaSApIHsKCQl2YXIgbnVt
U3R5bGVzOwoJCShmdW5jdGlvbigpewoJCQlpZiAoalF1ZXJ5LmlzUmVhZHkpIHJl
dHVybjsKCQkJaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlICE9ICJsb2FkZWQiICYm
IGRvY3VtZW50LnJlYWR5U3RhdGUgIT0gImNvbXBsZXRlIiApIHsKCQkJCXNldFRp
bWVvdXQoIGFyZ3VtZW50cy5jYWxsZWUsIDAgKTsKCQkJCXJldHVybjsKCQkJfQoJ
CQlpZiAoIG51bVN0eWxlcyA9PT0gdW5kZWZpbmVkICkKCQkJCW51bVN0eWxlcyA9
IGpRdWVyeSgic3R5bGUsIGxpbmtbcmVsPXN0eWxlc2hlZXRdIikubGVuZ3RoOwoJ
CQlpZiAoIGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aCAhPSBudW1TdHlsZXMg
KSB7CgkJCQlzZXRUaW1lb3V0KCBhcmd1bWVudHMuY2FsbGVlLCAwICk7CgkJCQly
ZXR1cm47CgkJCX0KCQkJLy8gYW5kIGV4ZWN1dGUgYW55IHdhaXRpbmcgZnVuY3Rp
b25zCgkJCWpRdWVyeS5yZWFkeSgpOwoJCX0pKCk7Cgl9CgoJLy8gQSBmYWxsYmFj
ayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmsKCWpRdWVy
eS5ldmVudC5hZGQoIHdpbmRvdywgImxvYWQiLCBqUXVlcnkucmVhZHkgKTsKfQoK
alF1ZXJ5LmVhY2goICgiYmx1cixmb2N1cyxsb2FkLHJlc2l6ZSxzY3JvbGwsdW5s
b2FkLGNsaWNrLGRibGNsaWNrLCIgKwoJIm1vdXNlZG93bixtb3VzZXVwLG1vdXNl
bW92ZSxtb3VzZW92ZXIsbW91c2VvdXQsY2hhbmdlLHNlbGVjdCwiICsKCSJzdWJt
aXQsa2V5ZG93bixrZXlwcmVzcyxrZXl1cCxlcnJvciIpLnNwbGl0KCIsIiksIGZ1
bmN0aW9uKGksIG5hbWUpewoKCS8vIEhhbmRsZSBldmVudCBiaW5kaW5nCglqUXVl
cnkuZm5bbmFtZV0gPSBmdW5jdGlvbihmbil7CgkJcmV0dXJuIGZuID8gdGhpcy5i
aW5kKG5hbWUsIGZuKSA6IHRoaXMudHJpZ2dlcihuYW1lKTsKCX07Cn0pOwoKLy8g
Q2hlY2tzIGlmIGFuIGV2ZW50IGhhcHBlbmVkIG9uIGFuIGVsZW1lbnQgd2l0aGlu
IGFub3RoZXIgZWxlbWVudAovLyBVc2VkIGluIGpRdWVyeS5ldmVudC5zcGVjaWFs
Lm1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgaGFuZGxlcnMKdmFyIHdpdGhpbkVs
ZW1lbnQgPSBmdW5jdGlvbihldmVudCwgZWxlbSkgewoJLy8gQ2hlY2sgaWYgbW91
c2Uob3ZlcnxvdXQpIGFyZSBzdGlsbCB3aXRoaW4gdGhlIHNhbWUgcGFyZW50IGVs
ZW1lbnQKCXZhciBwYXJlbnQgPSBldmVudC5yZWxhdGVkVGFyZ2V0OwoJLy8gVHJh
dmVyc2UgdXAgdGhlIHRyZWUKCXdoaWxlICggcGFyZW50ICYmIHBhcmVudCAhPSBl
bGVtICkgdHJ5IHsgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7IH0gY2F0Y2go
ZXJyb3IpIHsgcGFyZW50ID0gZWxlbTsgfQoJLy8gUmV0dXJuIHRydWUgaWYgd2Ug
YWN0dWFsbHkganVzdCBtb3VzZWQgb24gdG8gYSBzdWItZWxlbWVudAoJcmV0dXJu
IHBhcmVudCA9PSBlbGVtOwp9OwoKLy8gUHJldmVudCBtZW1vcnkgbGVha3MgaW4g
SUUKLy8gQW5kIHByZXZlbnQgZXJyb3JzIG9uIHJlZnJlc2ggd2l0aCBldmVudHMg
bGlrZSBtb3VzZW92ZXIgaW4gb3RoZXIgYnJvd3NlcnMKLy8gV2luZG93IGlzbid0
IGluY2x1ZGVkIHNvIGFzIG5vdCB0byB1bmJpbmQgZXhpc3RpbmcgdW5sb2FkIGV2
ZW50cwpqUXVlcnkod2luZG93KS5iaW5kKCJ1bmxvYWQiLCBmdW5jdGlvbigpIHsK
CWpRdWVyeSgiKiIpLmFkZChkb2N1bWVudCkudW5iaW5kKCk7Cn0pOwpqUXVlcnku
Zm4uZXh0ZW5kKHsKCS8vIEtlZXAgYSBjb3B5IG9mIHRoZSBvbGQgbG9hZAoJX2xv
YWQ6IGpRdWVyeS5mbi5sb2FkLAoKCWxvYWQ6IGZ1bmN0aW9uKCB1cmwsIHBhcmFt
cywgY2FsbGJhY2sgKSB7CgkJaWYgKCB0eXBlb2YgdXJsICE9ICdzdHJpbmcnICkK
CQkJcmV0dXJuIHRoaXMuX2xvYWQoIHVybCApOwoKCQl2YXIgb2ZmID0gdXJsLmlu
ZGV4T2YoIiAiKTsKCQlpZiAoIG9mZiA+PSAwICkgewoJCQl2YXIgc2VsZWN0b3Ig
PSB1cmwuc2xpY2Uob2ZmLCB1cmwubGVuZ3RoKTsKCQkJdXJsID0gdXJsLnNsaWNl
KDAsIG9mZik7CgkJfQoKCQljYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9u
KCl7fTsKCgkJLy8gRGVmYXVsdCB0byBhIEdFVCByZXF1ZXN0CgkJdmFyIHR5cGUg
PSAiR0VUIjsKCgkJLy8gSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgd2FzIHByb3Zp
ZGVkCgkJaWYgKCBwYXJhbXMgKQoJCQkvLyBJZiBpdCdzIGEgZnVuY3Rpb24KCQkJ
aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcGFyYW1zICkgKSB7CgkJCQkvLyBXZSBh
c3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFjawoJCQkJY2FsbGJhY2sgPSBwYXJh
bXM7CgkJCQlwYXJhbXMgPSBudWxsOwoKCQkJLy8gT3RoZXJ3aXNlLCBidWlsZCBh
IHBhcmFtIHN0cmluZwoJCQl9IGVsc2UgewoJCQkJcGFyYW1zID0galF1ZXJ5LnBh
cmFtKCBwYXJhbXMgKTsKCQkJCXR5cGUgPSAiUE9TVCI7CgkJCX0KCgkJdmFyIHNl
bGYgPSB0aGlzOwoKCQkvLyBSZXF1ZXN0IHRoZSByZW1vdGUgZG9jdW1lbnQKCQlq
UXVlcnkuYWpheCh7CgkJCXVybDogdXJsLAoJCQl0eXBlOiB0eXBlLAoJCQlkYXRh
VHlwZTogImh0bWwiLAoJCQlkYXRhOiBwYXJhbXMsCgkJCWNvbXBsZXRlOiBmdW5j
dGlvbihyZXMsIHN0YXR1cyl7CgkJCQkvLyBJZiBzdWNjZXNzZnVsLCBpbmplY3Qg
dGhlIEhUTUwgaW50byBhbGwgdGhlIG1hdGNoZWQgZWxlbWVudHMKCQkJCWlmICgg
c3RhdHVzID09ICJzdWNjZXNzIiB8fCBzdGF0dXMgPT0gIm5vdG1vZGlmaWVkIiAp
CgkJCQkJLy8gU2VlIGlmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZAoJCQkJCXNl
bGYuaHRtbCggc2VsZWN0b3IgPwoJCQkJCQkvLyBDcmVhdGUgYSBkdW1teSBkaXYg
dG8gaG9sZCB0aGUgcmVzdWx0cwoJCQkJCQlqUXVlcnkoIjxkaXYvPiIpCgkJCQkJ
CQkvLyBpbmplY3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBkb2N1bWVudCBpbiwgcmVt
b3ZpbmcgdGhlIHNjcmlwdHMKCQkJCQkJCS8vIHRvIGF2b2lkIGFueSAnUGVybWlz
c2lvbiBEZW5pZWQnIGVycm9ycyBpbiBJRQoJCQkJCQkJLmFwcGVuZChyZXMucmVz
cG9uc2VUZXh0LnJlcGxhY2UoLzxzY3JpcHQoLnxccykqP1wvc2NyaXB0Pi9nLCAi
IikpCgoJCQkJCQkJLy8gTG9jYXRlIHRoZSBzcGVjaWZpZWQgZWxlbWVudHMKCQkJ
CQkJCS5maW5kKHNlbGVjdG9yKSA6CgoJCQkJCQkvLyBJZiBub3QsIGp1c3QgaW5q
ZWN0IHRoZSBmdWxsIHJlc3VsdAoJCQkJCQlyZXMucmVzcG9uc2VUZXh0ICk7CgoJ
CQkJc2VsZi5lYWNoKCBjYWxsYmFjaywgW3Jlcy5yZXNwb25zZVRleHQsIHN0YXR1
cywgcmVzXSApOwoJCQl9CgkJfSk7CgkJcmV0dXJuIHRoaXM7Cgl9LAoKCXNlcmlh
bGl6ZTogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIGpRdWVyeS5wYXJhbSh0aGlzLnNl
cmlhbGl6ZUFycmF5KCkpOwoJfSwKCXNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigp
IHsKCQlyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXsKCQkJcmV0dXJuIGpRdWVy
eS5ub2RlTmFtZSh0aGlzLCAiZm9ybSIpID8KCQkJCWpRdWVyeS5tYWtlQXJyYXko
dGhpcy5lbGVtZW50cykgOiB0aGlzOwoJCX0pCgkJLmZpbHRlcihmdW5jdGlvbigp
ewoJCQlyZXR1cm4gdGhpcy5uYW1lICYmICF0aGlzLmRpc2FibGVkICYmCgkJCQko
dGhpcy5jaGVja2VkIHx8IC9zZWxlY3R8dGV4dGFyZWEvaS50ZXN0KHRoaXMubm9k
ZU5hbWUpIHx8CgkJCQkJL3RleHR8aGlkZGVufHBhc3N3b3JkL2kudGVzdCh0aGlz
LnR5cGUpKTsKCQl9KQoJCS5tYXAoZnVuY3Rpb24oaSwgZWxlbSl7CgkJCXZhciB2
YWwgPSBqUXVlcnkodGhpcykudmFsKCk7CgkJCXJldHVybiB2YWwgPT0gbnVsbCA/
IG51bGwgOgoJCQkJdmFsLmNvbnN0cnVjdG9yID09IEFycmF5ID8KCQkJCQlqUXVl
cnkubWFwKCB2YWwsIGZ1bmN0aW9uKHZhbCwgaSl7CgkJCQkJCXJldHVybiB7bmFt
ZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsfTsKCQkJCQl9KSA6CgkJCQkJe25hbWU6
IGVsZW0ubmFtZSwgdmFsdWU6IHZhbH07CgkJfSkuZ2V0KCk7Cgl9Cn0pOwoKLy8g
QXR0YWNoIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBjb21tb24g
QUpBWCBldmVudHMKalF1ZXJ5LmVhY2goICJhamF4U3RhcnQsYWpheFN0b3AsYWph
eENvbXBsZXRlLGFqYXhFcnJvcixhamF4U3VjY2VzcyxhamF4U2VuZCIuc3BsaXQo
IiwiKSwgZnVuY3Rpb24oaSxvKXsKCWpRdWVyeS5mbltvXSA9IGZ1bmN0aW9uKGYp
ewoJCXJldHVybiB0aGlzLmJpbmQobywgZik7Cgl9Owp9KTsKCnZhciBqc2MgPSBu
b3coKTsKCmpRdWVyeS5leHRlbmQoewoJZ2V0OiBmdW5jdGlvbiggdXJsLCBkYXRh
LCBjYWxsYmFjaywgdHlwZSApIHsKCQkvLyBzaGlmdCBhcmd1bWVudHMgaWYgZGF0
YSBhcmd1bWVudCB3YXMgb21taXRlZAoJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24o
IGRhdGEgKSApIHsKCQkJY2FsbGJhY2sgPSBkYXRhOwoJCQlkYXRhID0gbnVsbDsK
CQl9CgoJCXJldHVybiBqUXVlcnkuYWpheCh7CgkJCXR5cGU6ICJHRVQiLAoJCQl1
cmw6IHVybCwKCQkJZGF0YTogZGF0YSwKCQkJc3VjY2VzczogY2FsbGJhY2ssCgkJ
CWRhdGFUeXBlOiB0eXBlCgkJfSk7Cgl9LAoKCWdldFNjcmlwdDogZnVuY3Rpb24o
IHVybCwgY2FsbGJhY2sgKSB7CgkJcmV0dXJuIGpRdWVyeS5nZXQodXJsLCBudWxs
LCBjYWxsYmFjaywgInNjcmlwdCIpOwoJfSwKCglnZXRKU09OOiBmdW5jdGlvbigg
dXJsLCBkYXRhLCBjYWxsYmFjayApIHsKCQlyZXR1cm4galF1ZXJ5LmdldCh1cmws
IGRhdGEsIGNhbGxiYWNrLCAianNvbiIpOwoJfSwKCglwb3N0OiBmdW5jdGlvbigg
dXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHsKCQlpZiAoIGpRdWVyeS5pc0Z1
bmN0aW9uKCBkYXRhICkgKSB7CgkJCWNhbGxiYWNrID0gZGF0YTsKCQkJZGF0YSA9
IHt9OwoJCX0KCgkJcmV0dXJuIGpRdWVyeS5hamF4KHsKCQkJdHlwZTogIlBPU1Qi
LAoJCQl1cmw6IHVybCwKCQkJZGF0YTogZGF0YSwKCQkJc3VjY2VzczogY2FsbGJh
Y2ssCgkJCWRhdGFUeXBlOiB0eXBlCgkJfSk7Cgl9LAoKCWFqYXhTZXR1cDogZnVu
Y3Rpb24oIHNldHRpbmdzICkgewoJCWpRdWVyeS5leHRlbmQoIGpRdWVyeS5hamF4
U2V0dGluZ3MsIHNldHRpbmdzICk7Cgl9LAoKCWFqYXhTZXR0aW5nczogewoJCXVy
bDogbG9jYXRpb24uaHJlZiwKCQlnbG9iYWw6IHRydWUsCgkJdHlwZTogIkdFVCIs
CgkJdGltZW91dDogMCwKCQljb250ZW50VHlwZTogImFwcGxpY2F0aW9uL3gtd3d3
LWZvcm0tdXJsZW5jb2RlZCIsCgkJcHJvY2Vzc0RhdGE6IHRydWUsCgkJYXN5bmM6
IHRydWUsCgkJZGF0YTogbnVsbCwKCQl1c2VybmFtZTogbnVsbCwKCQlwYXNzd29y
ZDogbnVsbCwKCQlhY2NlcHRzOiB7CgkJCXhtbDogImFwcGxpY2F0aW9uL3htbCwg
dGV4dC94bWwiLAoJCQlodG1sOiAidGV4dC9odG1sIiwKCQkJc2NyaXB0OiAidGV4
dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiwKCQkJanNvbjog
ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCIsCgkJCXRleHQ6ICJ0
ZXh0L3BsYWluIiwKCQkJX2RlZmF1bHQ6ICIqLyoiCgkJfQoJfSwKCgkvLyBMYXN0
LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0CglsYXN0TW9k
aWZpZWQ6IHt9LAoKCWFqYXg6IGZ1bmN0aW9uKCBzICkgewoJCS8vIEV4dGVuZCB0
aGUgc2V0dGluZ3MsIGJ1dCByZS1leHRlbmQgJ3MnIHNvIHRoYXQgaXQgY2FuIGJl
CgkJLy8gY2hlY2tlZCBhZ2FpbiBsYXRlciAoaW4gdGhlIHRlc3Qgc3VpdGUsIHNw
ZWNpZmljYWxseSkKCQlzID0galF1ZXJ5LmV4dGVuZCh0cnVlLCBzLCBqUXVlcnku
ZXh0ZW5kKHRydWUsIHt9LCBqUXVlcnkuYWpheFNldHRpbmdzLCBzKSk7CgoJCXZh
ciBqc29ucCwganNyZSA9IC89XD8oJnwkKS9nLCBzdGF0dXMsIGRhdGEsCgkJCXR5
cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTsKCgkJLy8gY29udmVydCBkYXRhIGlm
IG5vdCBhbHJlYWR5IGEgc3RyaW5nCgkJaWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNz
RGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9ICJzdHJpbmciICkKCQkJcy5kYXRhID0g
alF1ZXJ5LnBhcmFtKHMuZGF0YSk7CgoJCS8vIEhhbmRsZSBKU09OUCBQYXJhbWV0
ZXIgQ2FsbGJhY2tzCgkJaWYgKCBzLmRhdGFUeXBlID09ICJqc29ucCIgKSB7CgkJ
CWlmICggdHlwZSA9PSAiR0VUIiApIHsKCQkJCWlmICggIXMudXJsLm1hdGNoKGpz
cmUpICkKCQkJCQlzLnVybCArPSAocy51cmwubWF0Y2goL1w/LykgPyAiJiIgOiAi
PyIpICsgKHMuanNvbnAgfHwgImNhbGxiYWNrIikgKyAiPT8iOwoJCQl9IGVsc2Ug
aWYgKCAhcy5kYXRhIHx8ICFzLmRhdGEubWF0Y2goanNyZSkgKQoJCQkJcy5kYXRh
ID0gKHMuZGF0YSA/IHMuZGF0YSArICImIiA6ICIiKSArIChzLmpzb25wIHx8ICJj
YWxsYmFjayIpICsgIj0/IjsKCQkJcy5kYXRhVHlwZSA9ICJqc29uIjsKCQl9CgoJ
CS8vIEJ1aWxkIHRlbXBvcmFyeSBKU09OUCBmdW5jdGlvbgoJCWlmICggcy5kYXRh
VHlwZSA9PSAianNvbiIgJiYgKHMuZGF0YSAmJiBzLmRhdGEubWF0Y2goanNyZSkg
fHwgcy51cmwubWF0Y2goanNyZSkpICkgewoJCQlqc29ucCA9ICJqc29ucCIgKyBq
c2MrKzsKCgkJCS8vIFJlcGxhY2UgdGhlID0/IHNlcXVlbmNlIGJvdGggaW4gdGhl
IHF1ZXJ5IHN0cmluZyBhbmQgdGhlIGRhdGEKCQkJaWYgKCBzLmRhdGEgKQoJCQkJ
cy5kYXRhID0gKHMuZGF0YSArICIiKS5yZXBsYWNlKGpzcmUsICI9IiArIGpzb25w
ICsgIiQxIik7CgkJCXMudXJsID0gcy51cmwucmVwbGFjZShqc3JlLCAiPSIgKyBq
c29ucCArICIkMSIpOwoKCQkJLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUKCQkJLy8g
dGhhdCBhIEpTT05QIHN0eWxlIHJlc3BvbnNlIGlzIGV4ZWN1dGVkIHByb3Blcmx5
CgkJCXMuZGF0YVR5cGUgPSAic2NyaXB0IjsKCgkJCS8vIEhhbmRsZSBKU09OUC1z
dHlsZSBsb2FkaW5nCgkJCXdpbmRvd1sganNvbnAgXSA9IGZ1bmN0aW9uKHRtcCl7
CgkJCQlkYXRhID0gdG1wOwoJCQkJc3VjY2VzcygpOwoJCQkJY29tcGxldGUoKTsK
CQkJCS8vIEdhcmJhZ2UgY29sbGVjdAoJCQkJd2luZG93WyBqc29ucCBdID0gdW5k
ZWZpbmVkOwoJCQkJdHJ5eyBkZWxldGUgd2luZG93WyBqc29ucCBdOyB9IGNhdGNo
KGUpe30KCQkJCWlmICggaGVhZCApCgkJCQkJaGVhZC5yZW1vdmVDaGlsZCggc2Ny
aXB0ICk7CgkJCX07CgkJfQoKCQlpZiAoIHMuZGF0YVR5cGUgPT0gInNjcmlwdCIg
JiYgcy5jYWNoZSA9PSBudWxsICkKCQkJcy5jYWNoZSA9IGZhbHNlOwoKCQlpZiAo
IHMuY2FjaGUgPT09IGZhbHNlICYmIHR5cGUgPT0gIkdFVCIgKSB7CgkJCXZhciB0
cyA9IG5vdygpOwoJCQkvLyB0cnkgcmVwbGFjaW5nIF89IGlmIGl0IGlzIHRoZXJl
CgkJCXZhciByZXQgPSBzLnVybC5yZXBsYWNlKC8oXD98JilfPS4qPygmfCQpLywg
IiQxXz0iICsgdHMgKyAiJDIiKTsKCQkJLy8gaWYgbm90aGluZyB3YXMgcmVwbGFj
ZWQsIGFkZCB0aW1lc3RhbXAgdG8gdGhlIGVuZAoJCQlzLnVybCA9IHJldCArICgo
cmV0ID09IHMudXJsKSA/IChzLnVybC5tYXRjaCgvXD8vKSA/ICImIiA6ICI/Iikg
KyAiXz0iICsgdHMgOiAiIik7CgkJfQoKCQkvLyBJZiBkYXRhIGlzIGF2YWlsYWJs
ZSwgYXBwZW5kIGRhdGEgdG8gdXJsIGZvciBnZXQgcmVxdWVzdHMKCQlpZiAoIHMu
ZGF0YSAmJiB0eXBlID09ICJHRVQiICkgewoJCQlzLnVybCArPSAocy51cmwubWF0
Y2goL1w/LykgPyAiJiIgOiAiPyIpICsgcy5kYXRhOwoKCQkJLy8gSUUgbGlrZXMg
dG8gc2VuZCBib3RoIGdldCBhbmQgcG9zdCBkYXRhLCBwcmV2ZW50IHRoaXMKCQkJ
cy5kYXRhID0gbnVsbDsKCQl9CgoJCS8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2Yg
cmVxdWVzdHMKCQlpZiAoIHMuZ2xvYmFsICYmICEgalF1ZXJ5LmFjdGl2ZSsrICkK
CQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RhcnQiICk7CgoJCS8vIE1h
dGNoZXMgYW4gYWJzb2x1dGUgVVJMLCBhbmQgc2F2ZXMgdGhlIGRvbWFpbgoJCXZh
ciByZW1vdGUgPSAvXig/Olx3KzopP1wvXC8oW15cLz8jXSspLzsKCgkJLy8gSWYg
d2UncmUgcmVxdWVzdGluZyBhIHJlbW90ZSBkb2N1bWVudAoJCS8vIGFuZCB0cnlp
bmcgdG8gbG9hZCBKU09OIG9yIFNjcmlwdCB3aXRoIGEgR0VUCgkJaWYgKCBzLmRh
dGFUeXBlID09ICJzY3JpcHQiICYmIHR5cGUgPT0gIkdFVCIKCQkJCSYmIHJlbW90
ZS50ZXN0KHMudXJsKSAmJiByZW1vdGUuZXhlYyhzLnVybClbMV0gIT0gbG9jYXRp
b24uaG9zdCApewoJCQl2YXIgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJoZWFkIilbMF07CgkJCXZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJzY3JpcHQiKTsKCQkJc2NyaXB0LnNyYyA9IHMudXJsOwoJCQlp
ZiAocy5zY3JpcHRDaGFyc2V0KQoJCQkJc2NyaXB0LmNoYXJzZXQgPSBzLnNjcmlw
dENoYXJzZXQ7CgoJCQkvLyBIYW5kbGUgU2NyaXB0IGxvYWRpbmcKCQkJaWYgKCAh
anNvbnAgKSB7CgkJCQl2YXIgZG9uZSA9IGZhbHNlOwoKCQkJCS8vIEF0dGFjaCBo
YW5kbGVycyBmb3IgYWxsIGJyb3dzZXJzCgkJCQlzY3JpcHQub25sb2FkID0gc2Ny
aXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCl7CgkJCQkJaWYgKCAh
ZG9uZSAmJiAoIXRoaXMucmVhZHlTdGF0ZSB8fAoJCQkJCQkJdGhpcy5yZWFkeVN0
YXRlID09ICJsb2FkZWQiIHx8IHRoaXMucmVhZHlTdGF0ZSA9PSAiY29tcGxldGUi
KSApIHsKCQkJCQkJZG9uZSA9IHRydWU7CgkJCQkJCXN1Y2Nlc3MoKTsKCQkJCQkJ
Y29tcGxldGUoKTsKCQkJCQkJaGVhZC5yZW1vdmVDaGlsZCggc2NyaXB0ICk7CgkJ
CQkJfQoJCQkJfTsKCQkJfQoKCQkJaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpOwoK
CQkJLy8gV2UgaGFuZGxlIGV2ZXJ5dGhpbmcgdXNpbmcgdGhlIHNjcmlwdCBlbGVt
ZW50IGluamVjdGlvbgoJCQlyZXR1cm4gdW5kZWZpbmVkOwoJCX0KCgkJdmFyIHJl
cXVlc3REb25lID0gZmFsc2U7CgoJCS8vIENyZWF0ZSB0aGUgcmVxdWVzdCBvYmpl
Y3Q7IE1pY3Jvc29mdCBmYWlsZWQgdG8gcHJvcGVybHkKCQkvLyBpbXBsZW1lbnQg
dGhlIFhNTEh0dHBSZXF1ZXN0IGluIElFNywgc28gd2UgdXNlIHRoZSBBY3RpdmVY
T2JqZWN0IHdoZW4gaXQgaXMgYXZhaWxhYmxlCgkJdmFyIHhociA9IHdpbmRvdy5B
Y3RpdmVYT2JqZWN0ID8gbmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxI
VFRQIikgOiBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKCgkJLy8gT3BlbiB0aGUgc29j
a2V0CgkJLy8gUGFzc2luZyBudWxsIHVzZXJuYW1lLCBnZW5lcmF0ZXMgYSBsb2dp
biBwb3B1cCBvbiBPcGVyYSAoIzI4NjUpCgkJaWYoIHMudXNlcm5hbWUgKQoJCQl4
aHIub3Blbih0eXBlLCBzLnVybCwgcy5hc3luYywgcy51c2VybmFtZSwgcy5wYXNz
d29yZCk7CgkJZWxzZQoJCQl4aHIub3Blbih0eXBlLCBzLnVybCwgcy5hc3luYyk7
CgoJCS8vIE5lZWQgYW4gZXh0cmEgdHJ5L2NhdGNoIGZvciBjcm9zcyBkb21haW4g
cmVxdWVzdHMgaW4gRmlyZWZveCAzCgkJdHJ5IHsKCQkJLy8gU2V0IHRoZSBjb3Jy
ZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50CgkJCWlmICggcy5kYXRh
ICkKCQkJCXhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCBzLmNv
bnRlbnRUeXBlKTsKCgkJCS8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgaGVh
ZGVyLCBpZiBpZk1vZGlmaWVkIG1vZGUuCgkJCWlmICggcy5pZk1vZGlmaWVkICkK
CQkJCXhoci5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsCgkJ
CQkJalF1ZXJ5Lmxhc3RNb2RpZmllZFtzLnVybF0gfHwgIlRodSwgMDEgSmFuIDE5
NzAgMDA6MDA6MDAgR01UIiApOwoKCQkJLy8gU2V0IGhlYWRlciBzbyB0aGUgY2Fs
bGVkIHNjcmlwdCBrbm93cyB0aGF0IGl0J3MgYW4gWE1MSHR0cFJlcXVlc3QKCQkJ
eGhyLnNldFJlcXVlc3RIZWFkZXIoIlgtUmVxdWVzdGVkLVdpdGgiLCAiWE1MSHR0
cFJlcXVlc3QiKTsKCgkJCS8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRo
ZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGUKCQkJeGhyLnNldFJl
cXVlc3RIZWFkZXIoIkFjY2VwdCIsIHMuZGF0YVR5cGUgJiYgcy5hY2NlcHRzWyBz
LmRhdGFUeXBlIF0gPwoJCQkJcy5hY2NlcHRzWyBzLmRhdGFUeXBlIF0gKyAiLCAq
LyoiIDoKCQkJCXMuYWNjZXB0cy5fZGVmYXVsdCApOwoJCX0gY2F0Y2goZSl7fQoK
CQkvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMKCQlpZiAoIHMuYmVm
b3JlU2VuZCAmJiBzLmJlZm9yZVNlbmQoeGhyLCBzKSA9PT0gZmFsc2UgKSB7CgkJ
CS8vIGNsZWFudXAgYWN0aXZlIHJlcXVlc3QgY291bnRlcgoJCQlzLmdsb2JhbCAm
JiBqUXVlcnkuYWN0aXZlLS07CgkJCS8vIGNsb3NlIG9wZW5kZWQgc29ja2V0CgkJ
CXhoci5hYm9ydCgpOwoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQlpZiAoIHMuZ2xv
YmFsICkKCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoImFqYXhTZW5kIiwgW3hociwg
c10pOwoKCQkvLyBXYWl0IGZvciBhIHJlc3BvbnNlIHRvIGNvbWUgYmFjawoJCXZh
ciBvbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbihpc1RpbWVvdXQpewoJCQkv
LyBUaGUgdHJhbnNmZXIgaXMgY29tcGxldGUgYW5kIHRoZSBkYXRhIGlzIGF2YWls
YWJsZSwgb3IgdGhlIHJlcXVlc3QgdGltZWQgb3V0CgkJCWlmICggIXJlcXVlc3RE
b25lICYmIHhociAmJiAoeGhyLnJlYWR5U3RhdGUgPT0gNCB8fCBpc1RpbWVvdXQg
PT0gInRpbWVvdXQiKSApIHsKCQkJCXJlcXVlc3REb25lID0gdHJ1ZTsKCgkJCQkv
LyBjbGVhciBwb2xsIGludGVydmFsCgkJCQlpZiAoaXZhbCkgewoJCQkJCWNsZWFy
SW50ZXJ2YWwoaXZhbCk7CgkJCQkJaXZhbCA9IG51bGw7CgkJCQl9CgoJCQkJc3Rh
dHVzID0gaXNUaW1lb3V0ID09ICJ0aW1lb3V0IiAmJiAidGltZW91dCIgfHwKCQkJ
CQkhalF1ZXJ5Lmh0dHBTdWNjZXNzKCB4aHIgKSAmJiAiZXJyb3IiIHx8CgkJCQkJ
cy5pZk1vZGlmaWVkICYmIGpRdWVyeS5odHRwTm90TW9kaWZpZWQoIHhociwgcy51
cmwgKSAmJiAibm90bW9kaWZpZWQiIHx8CgkJCQkJInN1Y2Nlc3MiOwoKCQkJCWlm
ICggc3RhdHVzID09ICJzdWNjZXNzIiApIHsKCQkJCQkvLyBXYXRjaCBmb3IsIGFu
ZCBjYXRjaCwgWE1MIGRvY3VtZW50IHBhcnNlIGVycm9ycwoJCQkJCXRyeSB7CgkJ
CQkJCS8vIHByb2Nlc3MgdGhlIGRhdGEgKHJ1bnMgdGhlIHhtbCB0aHJvdWdoIGh0
dHBEYXRhIHJlZ2FyZGxlc3Mgb2YgY2FsbGJhY2spCgkJCQkJCWRhdGEgPSBqUXVl
cnkuaHR0cERhdGEoIHhociwgcy5kYXRhVHlwZSwgcy5kYXRhRmlsdGVyICk7CgkJ
CQkJfSBjYXRjaChlKSB7CgkJCQkJCXN0YXR1cyA9ICJwYXJzZXJlcnJvciI7CgkJ
CQkJfQoJCQkJfQoKCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXF1ZXN0IHdh
cyBzdWNjZXNzZnVsIG9yIG5vdG1vZGlmaWVkCgkJCQlpZiAoIHN0YXR1cyA9PSAi
c3VjY2VzcyIgKSB7CgkJCQkJLy8gQ2FjaGUgTGFzdC1Nb2RpZmllZCBoZWFkZXIs
IGlmIGlmTW9kaWZpZWQgbW9kZS4KCQkJCQl2YXIgbW9kUmVzOwoJCQkJCXRyeSB7
CgkJCQkJCW1vZFJlcyA9IHhoci5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2Rp
ZmllZCIpOwoJCQkJCX0gY2F0Y2goZSkge30gLy8gc3dhbGxvdyBleGNlcHRpb24g
dGhyb3duIGJ5IEZGIGlmIGhlYWRlciBpcyBub3QgYXZhaWxhYmxlCgoJCQkJCWlm
ICggcy5pZk1vZGlmaWVkICYmIG1vZFJlcyApCgkJCQkJCWpRdWVyeS5sYXN0TW9k
aWZpZWRbcy51cmxdID0gbW9kUmVzOwoKCQkJCQkvLyBKU09OUCBoYW5kbGVzIGl0
cyBvd24gc3VjY2VzcyBjYWxsYmFjawoJCQkJCWlmICggIWpzb25wICkKCQkJCQkJ
c3VjY2VzcygpOwoJCQkJfSBlbHNlCgkJCQkJalF1ZXJ5LmhhbmRsZUVycm9yKHMs
IHhociwgc3RhdHVzKTsKCgkJCQkvLyBGaXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVy
cwoJCQkJY29tcGxldGUoKTsKCgkJCQkvLyBTdG9wIG1lbW9yeSBsZWFrcwoJCQkJ
aWYgKCBzLmFzeW5jICkKCQkJCQl4aHIgPSBudWxsOwoJCQl9CgkJfTsKCgkJaWYg
KCBzLmFzeW5jICkgewoJCQkvLyBkb24ndCBhdHRhY2ggdGhlIGhhbmRsZXIgdG8g
dGhlIHJlcXVlc3QsIGp1c3QgcG9sbCBpdCBpbnN0ZWFkCgkJCXZhciBpdmFsID0g
c2V0SW50ZXJ2YWwob25yZWFkeXN0YXRlY2hhbmdlLCAxMyk7CgoJCQkvLyBUaW1l
b3V0IGNoZWNrZXIKCQkJaWYgKCBzLnRpbWVvdXQgPiAwICkKCQkJCXNldFRpbWVv
dXQoZnVuY3Rpb24oKXsKCQkJCQkvLyBDaGVjayB0byBzZWUgaWYgdGhlIHJlcXVl
c3QgaXMgc3RpbGwgaGFwcGVuaW5nCgkJCQkJaWYgKCB4aHIgKSB7CgkJCQkJCS8v
IENhbmNlbCB0aGUgcmVxdWVzdAoJCQkJCQl4aHIuYWJvcnQoKTsKCgkJCQkJCWlm
KCAhcmVxdWVzdERvbmUgKQoJCQkJCQkJb25yZWFkeXN0YXRlY2hhbmdlKCAidGlt
ZW91dCIgKTsKCQkJCQl9CgkJCQl9LCBzLnRpbWVvdXQpOwoJCX0KCgkJLy8gU2Vu
ZCB0aGUgZGF0YQoJCXRyeSB7CgkJCXhoci5zZW5kKHMuZGF0YSk7CgkJfSBjYXRj
aChlKSB7CgkJCWpRdWVyeS5oYW5kbGVFcnJvcihzLCB4aHIsIG51bGwsIGUpOwoJ
CX0KCgkJLy8gZmlyZWZveCAxLjUgZG9lc24ndCBmaXJlIHN0YXRlY2hhbmdlIGZv
ciBzeW5jIHJlcXVlc3RzCgkJaWYgKCAhcy5hc3luYyApCgkJCW9ucmVhZHlzdGF0
ZWNoYW5nZSgpOwoKCQlmdW5jdGlvbiBzdWNjZXNzKCl7CgkJCS8vIElmIGEgbG9j
YWwgY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgZmlyZSBpdCBhbmQgcGFzcyBpdCB0
aGUgZGF0YQoJCQlpZiAoIHMuc3VjY2VzcyApCgkJCQlzLnN1Y2Nlc3MoIGRhdGEs
IHN0YXR1cyApOwoKCQkJLy8gRmlyZSB0aGUgZ2xvYmFsIGNhbGxiYWNrCgkJCWlm
ICggcy5nbG9iYWwgKQoJCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3Vj
Y2VzcyIsIFt4aHIsIHNdICk7CgkJfQoKCQlmdW5jdGlvbiBjb21wbGV0ZSgpewoJ
CQkvLyBQcm9jZXNzIHJlc3VsdAoJCQlpZiAoIHMuY29tcGxldGUgKQoJCQkJcy5j
b21wbGV0ZSh4aHIsIHN0YXR1cyk7CgoJCQkvLyBUaGUgcmVxdWVzdCB3YXMgY29t
cGxldGVkCgkJCWlmICggcy5nbG9iYWwgKQoJCQkJalF1ZXJ5LmV2ZW50LnRyaWdn
ZXIoICJhamF4Q29tcGxldGUiLCBbeGhyLCBzXSApOwoKCQkJLy8gSGFuZGxlIHRo
ZSBnbG9iYWwgQUpBWCBjb3VudGVyCgkJCWlmICggcy5nbG9iYWwgJiYgISAtLWpR
dWVyeS5hY3RpdmUgKQoJCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3Rv
cCIgKTsKCQl9CgoJCS8vIHJldHVybiBYTUxIdHRwUmVxdWVzdCB0byBhbGxvdyBh
Ym9ydGluZyB0aGUgcmVxdWVzdCBldGMuCgkJcmV0dXJuIHhocjsKCX0sCgoJaGFu
ZGxlRXJyb3I6IGZ1bmN0aW9uKCBzLCB4aHIsIHN0YXR1cywgZSApIHsKCQkvLyBJ
ZiBhIGxvY2FsIGNhbGxiYWNrIHdhcyBzcGVjaWZpZWQsIGZpcmUgaXQKCQlpZiAo
IHMuZXJyb3IgKSBzLmVycm9yKCB4aHIsIHN0YXR1cywgZSApOwoKCQkvLyBGaXJl
IHRoZSBnbG9iYWwgY2FsbGJhY2sKCQlpZiAoIHMuZ2xvYmFsICkKCQkJalF1ZXJ5
LmV2ZW50LnRyaWdnZXIoICJhamF4RXJyb3IiLCBbeGhyLCBzLCBlXSApOwoJfSwK
CgkvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1
ZXJpZXMKCWFjdGl2ZTogMCwKCgkvLyBEZXRlcm1pbmVzIGlmIGFuIFhNTEh0dHBS
ZXF1ZXN0IHdhcyBzdWNjZXNzZnVsIG9yIG5vdAoJaHR0cFN1Y2Nlc3M6IGZ1bmN0
aW9uKCB4aHIgKSB7CgkJdHJ5IHsKCQkJLy8gSUUgZXJyb3Igc29tZXRpbWVzIHJl
dHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDQgc28gdHJlYXQgaXQgYXMg
c3VjY2Vzcywgc2VlICMxNDUwCgkJCXJldHVybiAheGhyLnN0YXR1cyAmJiBsb2Nh
dGlvbi5wcm90b2NvbCA9PSAiZmlsZToiIHx8CgkJCQkoIHhoci5zdGF0dXMgPj0g
MjAwICYmIHhoci5zdGF0dXMgPCAzMDAgKSB8fCB4aHIuc3RhdHVzID09IDMwNCB8
fCB4aHIuc3RhdHVzID09IDEyMjMgfHwKCQkJCWpRdWVyeS5icm93c2VyLnNhZmFy
aSAmJiB4aHIuc3RhdHVzID09IHVuZGVmaW5lZDsKCQl9IGNhdGNoKGUpe30KCQly
ZXR1cm4gZmFsc2U7Cgl9LAoKCS8vIERldGVybWluZXMgaWYgYW4gWE1MSHR0cFJl
cXVlc3QgcmV0dXJucyBOb3RNb2RpZmllZAoJaHR0cE5vdE1vZGlmaWVkOiBmdW5j
dGlvbiggeGhyLCB1cmwgKSB7CgkJdHJ5IHsKCQkJdmFyIHhoclJlcyA9IHhoci5n
ZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpOwoKCQkJLy8gRmlyZWZv
eCBhbHdheXMgcmV0dXJucyAyMDAuIGNoZWNrIExhc3QtTW9kaWZpZWQgZGF0ZQoJ
CQlyZXR1cm4geGhyLnN0YXR1cyA9PSAzMDQgfHwgeGhyUmVzID09IGpRdWVyeS5s
YXN0TW9kaWZpZWRbdXJsXSB8fAoJCQkJalF1ZXJ5LmJyb3dzZXIuc2FmYXJpICYm
IHhoci5zdGF0dXMgPT0gdW5kZWZpbmVkOwoJCX0gY2F0Y2goZSl7fQoJCXJldHVy
biBmYWxzZTsKCX0sCgoJaHR0cERhdGE6IGZ1bmN0aW9uKCB4aHIsIHR5cGUsIGZp
bHRlciApIHsKCQl2YXIgY3QgPSB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRl
bnQtdHlwZSIpLAoJCQl4bWwgPSB0eXBlID09ICJ4bWwiIHx8ICF0eXBlICYmIGN0
ICYmIGN0LmluZGV4T2YoInhtbCIpID49IDAsCgkJCWRhdGEgPSB4bWwgPyB4aHIu
cmVzcG9uc2VYTUwgOiB4aHIucmVzcG9uc2VUZXh0OwoKCQlpZiAoIHhtbCAmJiBk
YXRhLmRvY3VtZW50RWxlbWVudC50YWdOYW1lID09ICJwYXJzZXJlcnJvciIgKQoJ
CQl0aHJvdyAicGFyc2VyZXJyb3IiOwoJCQkKCQkvLyBBbGxvdyBhIHByZS1maWx0
ZXJpbmcgZnVuY3Rpb24gdG8gc2FuaXRpemUgdGhlIHJlc3BvbnNlCgkJaWYoIGZp
bHRlciApCgkJCWRhdGEgPSBmaWx0ZXIoIGRhdGEsIHR5cGUgKTsKCgkJLy8gSWYg
dGhlIHR5cGUgaXMgInNjcmlwdCIsIGV2YWwgaXQgaW4gZ2xvYmFsIGNvbnRleHQK
CQlpZiAoIHR5cGUgPT0gInNjcmlwdCIgKQoJCQlqUXVlcnkuZ2xvYmFsRXZhbCgg
ZGF0YSApOwoKCQkvLyBHZXQgdGhlIEphdmFTY3JpcHQgb2JqZWN0LCBpZiBKU09O
IGlzIHVzZWQuCgkJaWYgKCB0eXBlID09ICJqc29uIiApCgkJCWRhdGEgPSBldmFs
KCIoIiArIGRhdGEgKyAiKSIpOwoKCQlyZXR1cm4gZGF0YTsKCX0sCgoJLy8gU2Vy
aWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2YKCS8v
IGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZwoJcGFyYW06IGZ1bmN0aW9u
KCBhICkgewoJCXZhciBzID0gW107CgoJCS8vIElmIGFuIGFycmF5IHdhcyBwYXNz
ZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5CgkJLy8gb2YgZm9ybSBl
bGVtZW50cwoJCWlmICggYS5jb25zdHJ1Y3RvciA9PSBBcnJheSB8fCBhLmpxdWVy
eSApCgkJCS8vIFNlcmlhbGl6ZSB0aGUgZm9ybSBlbGVtZW50cwoJCQlqUXVlcnku
ZWFjaCggYSwgZnVuY3Rpb24oKXsKCQkJCXMucHVzaCggZW5jb2RlVVJJQ29tcG9u
ZW50KHRoaXMubmFtZSkgKyAiPSIgKyBlbmNvZGVVUklDb21wb25lbnQoIHRoaXMu
dmFsdWUgKSApOwoJCQl9KTsKCgkJLy8gT3RoZXJ3aXNlLCBhc3N1bWUgdGhhdCBp
dCdzIGFuIG9iamVjdCBvZiBrZXkvdmFsdWUgcGFpcnMKCQllbHNlCgkJCS8vIFNl
cmlhbGl6ZSB0aGUga2V5L3ZhbHVlcwoJCQlmb3IgKCB2YXIgaiBpbiBhICkKCQkJ
CS8vIElmIHRoZSB2YWx1ZSBpcyBhbiBhcnJheSB0aGVuIHRoZSBrZXkgbmFtZXMg
bmVlZCB0byBiZSByZXBlYXRlZAoJCQkJaWYgKCBhW2pdICYmIGFbal0uY29uc3Ry
dWN0b3IgPT0gQXJyYXkgKQoJCQkJCWpRdWVyeS5lYWNoKCBhW2pdLCBmdW5jdGlv
bigpewoJCQkJCQlzLnB1c2goIGVuY29kZVVSSUNvbXBvbmVudChqKSArICI9IiAr
IGVuY29kZVVSSUNvbXBvbmVudCggdGhpcyApICk7CgkJCQkJfSk7CgkJCQllbHNl
CgkJCQkJcy5wdXNoKCBlbmNvZGVVUklDb21wb25lbnQoaikgKyAiPSIgKyBlbmNv
ZGVVUklDb21wb25lbnQoIGpRdWVyeS5pc0Z1bmN0aW9uKGFbal0pID8gYVtqXSgp
IDogYVtqXSApICk7CgoJCS8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6
YXRpb24KCQlyZXR1cm4gcy5qb2luKCImIikucmVwbGFjZSgvJTIwL2csICIrIik7
Cgl9Cgp9KTsKalF1ZXJ5LmZuLmV4dGVuZCh7CglzaG93OiBmdW5jdGlvbihzcGVl
ZCxjYWxsYmFjayl7CgkJcmV0dXJuIHNwZWVkID8KCQkJdGhpcy5hbmltYXRlKHsK
CQkJCWhlaWdodDogInNob3ciLCB3aWR0aDogInNob3ciLCBvcGFjaXR5OiAic2hv
dyIKCQkJfSwgc3BlZWQsIGNhbGxiYWNrKSA6CgoJCQl0aGlzLmZpbHRlcigiOmhp
ZGRlbiIpLmVhY2goZnVuY3Rpb24oKXsKCQkJCXRoaXMuc3R5bGUuZGlzcGxheSA9
IHRoaXMub2xkYmxvY2sgfHwgIiI7CgkJCQlpZiAoIGpRdWVyeS5jc3ModGhpcywi
ZGlzcGxheSIpID09ICJub25lIiApIHsKCQkJCQl2YXIgZWxlbSA9IGpRdWVyeSgi
PCIgKyB0aGlzLnRhZ05hbWUgKyAiIC8+IikuYXBwZW5kVG8oImJvZHkiKTsKCQkJ
CQl0aGlzLnN0eWxlLmRpc3BsYXkgPSBlbGVtLmNzcygiZGlzcGxheSIpOwoJCQkJ
CS8vIGhhbmRsZSBhbiBlZGdlIGNvbmRpdGlvbiB3aGVyZSBjc3MgaXMgLSBkaXYg
eyBkaXNwbGF5Om5vbmU7IH0gb3Igc2ltaWxhcgoJCQkJCWlmICh0aGlzLnN0eWxl
LmRpc3BsYXkgPT0gIm5vbmUiKQoJCQkJCQl0aGlzLnN0eWxlLmRpc3BsYXkgPSAi
YmxvY2siOwoJCQkJCWVsZW0ucmVtb3ZlKCk7CgkJCQl9CgkJCX0pLmVuZCgpOwoJ
fSwKCgloaWRlOiBmdW5jdGlvbihzcGVlZCxjYWxsYmFjayl7CgkJcmV0dXJuIHNw
ZWVkID8KCQkJdGhpcy5hbmltYXRlKHsKCQkJCWhlaWdodDogImhpZGUiLCB3aWR0
aDogImhpZGUiLCBvcGFjaXR5OiAiaGlkZSIKCQkJfSwgc3BlZWQsIGNhbGxiYWNr
KSA6CgoJCQl0aGlzLmZpbHRlcigiOnZpc2libGUiKS5lYWNoKGZ1bmN0aW9uKCl7
CgkJCQl0aGlzLm9sZGJsb2NrID0gdGhpcy5vbGRibG9jayB8fCBqUXVlcnkuY3Nz
KHRoaXMsImRpc3BsYXkiKTsKCQkJCXRoaXMuc3R5bGUuZGlzcGxheSA9ICJub25l
IjsKCQkJfSkuZW5kKCk7Cgl9LAoKCS8vIFNhdmUgdGhlIG9sZCB0b2dnbGUgZnVu
Y3Rpb24KCV90b2dnbGU6IGpRdWVyeS5mbi50b2dnbGUsCgoJdG9nZ2xlOiBmdW5j
dGlvbiggZm4sIGZuMiApewoJCXJldHVybiBqUXVlcnkuaXNGdW5jdGlvbihmbikg
JiYgalF1ZXJ5LmlzRnVuY3Rpb24oZm4yKSA/CgkJCXRoaXMuX3RvZ2dsZS5hcHBs
eSggdGhpcywgYXJndW1lbnRzICkgOgoJCQlmbiA/CgkJCQl0aGlzLmFuaW1hdGUo
ewoJCQkJCWhlaWdodDogInRvZ2dsZSIsIHdpZHRoOiAidG9nZ2xlIiwgb3BhY2l0
eTogInRvZ2dsZSIKCQkJCX0sIGZuLCBmbjIpIDoKCQkJCXRoaXMuZWFjaChmdW5j
dGlvbigpewoJCQkJCWpRdWVyeSh0aGlzKVsgalF1ZXJ5KHRoaXMpLmlzKCI6aGlk
ZGVuIikgPyAic2hvdyIgOiAiaGlkZSIgXSgpOwoJCQkJfSk7Cgl9LAoKCXNsaWRl
RG93bjogZnVuY3Rpb24oc3BlZWQsY2FsbGJhY2spewoJCXJldHVybiB0aGlzLmFu
aW1hdGUoe2hlaWdodDogInNob3cifSwgc3BlZWQsIGNhbGxiYWNrKTsKCX0sCgoJ
c2xpZGVVcDogZnVuY3Rpb24oc3BlZWQsY2FsbGJhY2spewoJCXJldHVybiB0aGlz
LmFuaW1hdGUoe2hlaWdodDogImhpZGUifSwgc3BlZWQsIGNhbGxiYWNrKTsKCX0s
CgoJc2xpZGVUb2dnbGU6IGZ1bmN0aW9uKHNwZWVkLCBjYWxsYmFjayl7CgkJcmV0
dXJuIHRoaXMuYW5pbWF0ZSh7aGVpZ2h0OiAidG9nZ2xlIn0sIHNwZWVkLCBjYWxs
YmFjayk7Cgl9LAoKCWZhZGVJbjogZnVuY3Rpb24oc3BlZWQsIGNhbGxiYWNrKXsK
CQlyZXR1cm4gdGhpcy5hbmltYXRlKHtvcGFjaXR5OiAic2hvdyJ9LCBzcGVlZCwg
Y2FsbGJhY2spOwoJfSwKCglmYWRlT3V0OiBmdW5jdGlvbihzcGVlZCwgY2FsbGJh
Y2spewoJCXJldHVybiB0aGlzLmFuaW1hdGUoe29wYWNpdHk6ICJoaWRlIn0sIHNw
ZWVkLCBjYWxsYmFjayk7Cgl9LAoKCWZhZGVUbzogZnVuY3Rpb24oc3BlZWQsdG8s
Y2FsbGJhY2spewoJCXJldHVybiB0aGlzLmFuaW1hdGUoe29wYWNpdHk6IHRvfSwg
c3BlZWQsIGNhbGxiYWNrKTsKCX0sCgoJYW5pbWF0ZTogZnVuY3Rpb24oIHByb3As
IHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgewoJCXZhciBvcHRhbGwgPSBqUXVl
cnkuc3BlZWQoc3BlZWQsIGVhc2luZywgY2FsbGJhY2spOwoKCQlyZXR1cm4gdGhp
c1sgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/ICJlYWNoIiA6ICJxdWV1ZSIgXShm
dW5jdGlvbigpewoJCQlpZiAoIHRoaXMubm9kZVR5cGUgIT0gMSkKCQkJCXJldHVy
biBmYWxzZTsKCgkJCXZhciBvcHQgPSBqUXVlcnkuZXh0ZW5kKHt9LCBvcHRhbGwp
LCBwLAoJCQkJaGlkZGVuID0galF1ZXJ5KHRoaXMpLmlzKCI6aGlkZGVuIiksIHNl
bGYgPSB0aGlzOwoKCQkJZm9yICggcCBpbiBwcm9wICkgewoJCQkJaWYgKCBwcm9w
W3BdID09ICJoaWRlIiAmJiBoaWRkZW4gfHwgcHJvcFtwXSA9PSAic2hvdyIgJiYg
IWhpZGRlbiApCgkJCQkJcmV0dXJuIG9wdC5jb21wbGV0ZS5jYWxsKHRoaXMpOwoK
CQkJCWlmICggcCA9PSAiaGVpZ2h0IiB8fCBwID09ICJ3aWR0aCIgKSB7CgkJCQkJ
Ly8gU3RvcmUgZGlzcGxheSBwcm9wZXJ0eQoJCQkJCW9wdC5kaXNwbGF5ID0galF1
ZXJ5LmNzcyh0aGlzLCAiZGlzcGxheSIpOwoKCQkJCQkvLyBNYWtlIHN1cmUgdGhh
dCBub3RoaW5nIHNuZWFrcyBvdXQKCQkJCQlvcHQub3ZlcmZsb3cgPSB0aGlzLnN0
eWxlLm92ZXJmbG93OwoJCQkJfQoJCQl9CgoJCQlpZiAoIG9wdC5vdmVyZmxvdyAh
PSBudWxsICkKCQkJCXRoaXMuc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKCgkJ
CW9wdC5jdXJBbmltID0galF1ZXJ5LmV4dGVuZCh7fSwgcHJvcCk7CgoJCQlqUXVl
cnkuZWFjaCggcHJvcCwgZnVuY3Rpb24obmFtZSwgdmFsKXsKCQkJCXZhciBlID0g
bmV3IGpRdWVyeS5meCggc2VsZiwgb3B0LCBuYW1lICk7CgoJCQkJaWYgKCAvdG9n
Z2xlfHNob3d8aGlkZS8udGVzdCh2YWwpICkKCQkJCQllWyB2YWwgPT0gInRvZ2ds
ZSIgPyBoaWRkZW4gPyAic2hvdyIgOiAiaGlkZSIgOiB2YWwgXSggcHJvcCApOwoJ
CQkJZWxzZSB7CgkJCQkJdmFyIHBhcnRzID0gdmFsLnRvU3RyaW5nKCkubWF0Y2go
L14oWystXT0pPyhbXGQrLS5dKykoLiopJC8pLAoJCQkJCQlzdGFydCA9IGUuY3Vy
KHRydWUpIHx8IDA7CgoJCQkJCWlmICggcGFydHMgKSB7CgkJCQkJCXZhciBlbmQg
PSBwYXJzZUZsb2F0KHBhcnRzWzJdKSwKCQkJCQkJCXVuaXQgPSBwYXJ0c1szXSB8
fCAicHgiOwoKCQkJCQkJLy8gV2UgbmVlZCB0byBjb21wdXRlIHN0YXJ0aW5nIHZh
bHVlCgkJCQkJCWlmICggdW5pdCAhPSAicHgiICkgewoJCQkJCQkJc2VsZi5zdHls
ZVsgbmFtZSBdID0gKGVuZCB8fCAxKSArIHVuaXQ7CgkJCQkJCQlzdGFydCA9ICgo
ZW5kIHx8IDEpIC8gZS5jdXIodHJ1ZSkpICogc3RhcnQ7CgkJCQkJCQlzZWxmLnN0
eWxlWyBuYW1lIF0gPSBzdGFydCArIHVuaXQ7CgkJCQkJCX0KCgkJCQkJCS8vIElm
IGEgKz0vLT0gdG9rZW4gd2FzIHByb3ZpZGVkLCB3ZSdyZSBkb2luZyBhIHJlbGF0
aXZlIGFuaW1hdGlvbgoJCQkJCQlpZiAoIHBhcnRzWzFdICkKCQkJCQkJCWVuZCA9
ICgocGFydHNbMV0gPT0gIi09IiA/IC0xIDogMSkgKiBlbmQpICsgc3RhcnQ7CgoJ
CQkJCQllLmN1c3RvbSggc3RhcnQsIGVuZCwgdW5pdCApOwoJCQkJCX0gZWxzZQoJ
CQkJCQllLmN1c3RvbSggc3RhcnQsIHZhbCwgIiIgKTsKCQkJCX0KCQkJfSk7CgoJ
CQkvLyBGb3IgSlMgc3RyaWN0IGNvbXBsaWFuY2UKCQkJcmV0dXJuIHRydWU7CgkJ
fSk7Cgl9LAoKCXF1ZXVlOiBmdW5jdGlvbih0eXBlLCBmbil7CgkJaWYgKCBqUXVl
cnkuaXNGdW5jdGlvbih0eXBlKSB8fCAoIHR5cGUgJiYgdHlwZS5jb25zdHJ1Y3Rv
ciA9PSBBcnJheSApKSB7CgkJCWZuID0gdHlwZTsKCQkJdHlwZSA9ICJmeCI7CgkJ
fQoKCQlpZiAoICF0eXBlIHx8ICh0eXBlb2YgdHlwZSA9PSAic3RyaW5nIiAmJiAh
Zm4pICkKCQkJcmV0dXJuIHF1ZXVlKCB0aGlzWzBdLCB0eXBlICk7CgoJCXJldHVy
biB0aGlzLmVhY2goZnVuY3Rpb24oKXsKCQkJaWYgKCBmbi5jb25zdHJ1Y3RvciA9
PSBBcnJheSApCgkJCQlxdWV1ZSh0aGlzLCB0eXBlLCBmbik7CgkJCWVsc2UgewoJ
CQkJcXVldWUodGhpcywgdHlwZSkucHVzaCggZm4gKTsKCgkJCQlpZiAoIHF1ZXVl
KHRoaXMsIHR5cGUpLmxlbmd0aCA9PSAxICkKCQkJCQlmbi5jYWxsKHRoaXMpOwoJ
CQl9CgkJfSk7Cgl9LAoKCXN0b3A6IGZ1bmN0aW9uKGNsZWFyUXVldWUsIGdvdG9F
bmQpewoJCXZhciB0aW1lcnMgPSBqUXVlcnkudGltZXJzOwoKCQlpZiAoY2xlYXJR
dWV1ZSkKCQkJdGhpcy5xdWV1ZShbXSk7CgoJCXRoaXMuZWFjaChmdW5jdGlvbigp
ewoJCQkvLyBnbyBpbiByZXZlcnNlIG9yZGVyIHNvIGFueXRoaW5nIGFkZGVkIHRv
IHRoZSBxdWV1ZSBkdXJpbmcgdGhlIGxvb3AgaXMgaWdub3JlZAoJCQlmb3IgKCB2
YXIgaSA9IHRpbWVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSApCgkJCQlpZiAo
IHRpbWVyc1tpXS5lbGVtID09IHRoaXMgKSB7CgkJCQkJaWYgKGdvdG9FbmQpCgkJ
CQkJCS8vIGZvcmNlIHRoZSBuZXh0IHN0ZXAgdG8gYmUgdGhlIGxhc3QKCQkJCQkJ
dGltZXJzW2ldKHRydWUpOwoJCQkJCXRpbWVycy5zcGxpY2UoaSwgMSk7CgkJCQl9
CgkJfSk7CgoJCS8vIHN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUg
bGFzdCBzdGVwIHdhc24ndCBmb3JjZWQKCQlpZiAoIWdvdG9FbmQpCgkJCXRoaXMu
ZGVxdWV1ZSgpOwoKCQlyZXR1cm4gdGhpczsKCX0KCn0pOwoKdmFyIHF1ZXVlID0g
ZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGFycmF5ICkgewoJaWYgKCBlbGVtICl7CgoJ
CXR5cGUgPSB0eXBlIHx8ICJmeCI7CgoJCXZhciBxID0galF1ZXJ5LmRhdGEoIGVs
ZW0sIHR5cGUgKyAicXVldWUiICk7CgoJCWlmICggIXEgfHwgYXJyYXkgKQoJCQlx
ID0galF1ZXJ5LmRhdGEoIGVsZW0sIHR5cGUgKyAicXVldWUiLCBqUXVlcnkubWFr
ZUFycmF5KGFycmF5KSApOwoKCX0KCXJldHVybiBxOwp9OwoKalF1ZXJ5LmZuLmRl
cXVldWUgPSBmdW5jdGlvbih0eXBlKXsKCXR5cGUgPSB0eXBlIHx8ICJmeCI7CgoJ
cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpewoJCXZhciBxID0gcXVldWUodGhp
cywgdHlwZSk7CgoJCXEuc2hpZnQoKTsKCgkJaWYgKCBxLmxlbmd0aCApCgkJCXFb
MF0uY2FsbCggdGhpcyApOwoJfSk7Cn07CgpqUXVlcnkuZXh0ZW5kKHsKCglzcGVl
ZDogZnVuY3Rpb24oc3BlZWQsIGVhc2luZywgZm4pIHsKCQl2YXIgb3B0ID0gc3Bl
ZWQgJiYgc3BlZWQuY29uc3RydWN0b3IgPT0gT2JqZWN0ID8gc3BlZWQgOiB7CgkJ
CWNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8CgkJCQlqUXVlcnkuaXNG
dW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCwKCQkJZHVyYXRpb246IHNwZWVkLAoJ
CQllYXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgZWFzaW5nLmNvbnN0
cnVjdG9yICE9IEZ1bmN0aW9uICYmIGVhc2luZwoJCX07CgoJCW9wdC5kdXJhdGlv
biA9IChvcHQuZHVyYXRpb24gJiYgb3B0LmR1cmF0aW9uLmNvbnN0cnVjdG9yID09
IE51bWJlciA/CgkJCW9wdC5kdXJhdGlvbiA6CgkJCWpRdWVyeS5meC5zcGVlZHNb
b3B0LmR1cmF0aW9uXSkgfHwgalF1ZXJ5LmZ4LnNwZWVkcy5kZWY7CgoJCS8vIFF1
ZXVlaW5nCgkJb3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTsKCQlvcHQuY29tcGxldGUg
PSBmdW5jdGlvbigpewoJCQlpZiAoIG9wdC5xdWV1ZSAhPT0gZmFsc2UgKQoJCQkJ
alF1ZXJ5KHRoaXMpLmRlcXVldWUoKTsKCQkJaWYgKCBqUXVlcnkuaXNGdW5jdGlv
biggb3B0Lm9sZCApICkKCQkJCW9wdC5vbGQuY2FsbCggdGhpcyApOwoJCX07CgoJ
CXJldHVybiBvcHQ7Cgl9LAoKCWVhc2luZzogewoJCWxpbmVhcjogZnVuY3Rpb24o
IHAsIG4sIGZpcnN0TnVtLCBkaWZmICkgewoJCQlyZXR1cm4gZmlyc3ROdW0gKyBk
aWZmICogcDsKCQl9LAoJCXN3aW5nOiBmdW5jdGlvbiggcCwgbiwgZmlyc3ROdW0s
IGRpZmYgKSB7CgkJCXJldHVybiAoKC1NYXRoLmNvcyhwKk1hdGguUEkpLzIpICsg
MC41KSAqIGRpZmYgKyBmaXJzdE51bTsKCQl9Cgl9LAoKCXRpbWVyczogW10sCgl0
aW1lcklkOiBudWxsLAoKCWZ4OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJv
cCApewoJCXRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CgkJdGhpcy5lbGVtID0gZWxl
bTsKCQl0aGlzLnByb3AgPSBwcm9wOwoKCQlpZiAoICFvcHRpb25zLm9yaWcgKQoJ
CQlvcHRpb25zLm9yaWcgPSB7fTsKCX0KCn0pOwoKalF1ZXJ5LmZ4LnByb3RvdHlw
ZSA9IHsKCgkvLyBTaW1wbGUgZnVuY3Rpb24gZm9yIHNldHRpbmcgYSBzdHlsZSB2
YWx1ZQoJdXBkYXRlOiBmdW5jdGlvbigpewoJCWlmICggdGhpcy5vcHRpb25zLnN0
ZXAgKQoJCQl0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMu
bm93LCB0aGlzICk7CgoJCShqUXVlcnkuZnguc3RlcFt0aGlzLnByb3BdIHx8IGpR
dWVyeS5meC5zdGVwLl9kZWZhdWx0KSggdGhpcyApOwoKCQkvLyBTZXQgZGlzcGxh
eSBwcm9wZXJ0eSB0byBibG9jayBmb3IgaGVpZ2h0L3dpZHRoIGFuaW1hdGlvbnMK
CQlpZiAoIHRoaXMucHJvcCA9PSAiaGVpZ2h0IiB8fCB0aGlzLnByb3AgPT0gIndp
ZHRoIiApCgkJCXRoaXMuZWxlbS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKCX0s
CgoJLy8gR2V0IHRoZSBjdXJyZW50IHNpemUKCWN1cjogZnVuY3Rpb24oZm9yY2Up
ewoJCWlmICggdGhpcy5lbGVtW3RoaXMucHJvcF0gIT0gbnVsbCAmJiB0aGlzLmVs
ZW0uc3R5bGVbdGhpcy5wcm9wXSA9PSBudWxsICkKCQkJcmV0dXJuIHRoaXMuZWxl
bVsgdGhpcy5wcm9wIF07CgoJCXZhciByID0gcGFyc2VGbG9hdChqUXVlcnkuY3Nz
KHRoaXMuZWxlbSwgdGhpcy5wcm9wLCBmb3JjZSkpOwoJCXJldHVybiByICYmIHIg
PiAtMTAwMDAgPyByIDogcGFyc2VGbG9hdChqUXVlcnkuY3VyQ1NTKHRoaXMuZWxl
bSwgdGhpcy5wcm9wKSkgfHwgMDsKCX0sCgoJLy8gU3RhcnQgYW4gYW5pbWF0aW9u
IGZyb20gb25lIG51bWJlciB0byBhbm90aGVyCgljdXN0b206IGZ1bmN0aW9uKGZy
b20sIHRvLCB1bml0KXsKCQl0aGlzLnN0YXJ0VGltZSA9IG5vdygpOwoJCXRoaXMu
c3RhcnQgPSBmcm9tOwoJCXRoaXMuZW5kID0gdG87CgkJdGhpcy51bml0ID0gdW5p
dCB8fCB0aGlzLnVuaXQgfHwgInB4IjsKCQl0aGlzLm5vdyA9IHRoaXMuc3RhcnQ7
CgkJdGhpcy5wb3MgPSB0aGlzLnN0YXRlID0gMDsKCQl0aGlzLnVwZGF0ZSgpOwoK
CQl2YXIgc2VsZiA9IHRoaXM7CgkJZnVuY3Rpb24gdChnb3RvRW5kKXsKCQkJcmV0
dXJuIHNlbGYuc3RlcChnb3RvRW5kKTsKCQl9CgoJCXQuZWxlbSA9IHRoaXMuZWxl
bTsKCgkJalF1ZXJ5LnRpbWVycy5wdXNoKHQpOwoKCQlpZiAoIGpRdWVyeS50aW1l
cklkID09IG51bGwgKSB7CgkJCWpRdWVyeS50aW1lcklkID0gc2V0SW50ZXJ2YWwo
ZnVuY3Rpb24oKXsKCQkJCXZhciB0aW1lcnMgPSBqUXVlcnkudGltZXJzOwoKCQkJ
CWZvciAoIHZhciBpID0gMDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyApCgkJCQkJ
aWYgKCAhdGltZXJzW2ldKCkgKQoJCQkJCQl0aW1lcnMuc3BsaWNlKGktLSwgMSk7
CgoJCQkJaWYgKCAhdGltZXJzLmxlbmd0aCApIHsKCQkJCQljbGVhckludGVydmFs
KCBqUXVlcnkudGltZXJJZCApOwoJCQkJCWpRdWVyeS50aW1lcklkID0gbnVsbDsK
CQkJCX0KCQkJfSwgMTMpOwoJCX0KCX0sCgoJLy8gU2ltcGxlICdzaG93JyBmdW5j
dGlvbgoJc2hvdzogZnVuY3Rpb24oKXsKCQkvLyBSZW1lbWJlciB3aGVyZSB3ZSBz
dGFydGVkLCBzbyB0aGF0IHdlIGNhbiBnbyBiYWNrIHRvIGl0IGxhdGVyCgkJdGhp
cy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXSA9IGpRdWVyeS5hdHRyKCB0aGlzLmVs
ZW0uc3R5bGUsIHRoaXMucHJvcCApOwoJCXRoaXMub3B0aW9ucy5zaG93ID0gdHJ1
ZTsKCgkJLy8gQmVnaW4gdGhlIGFuaW1hdGlvbgoJCXRoaXMuY3VzdG9tKDAsIHRo
aXMuY3VyKCkpOwoKCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSBzdGFydCBhdCBhIHNt
YWxsIHdpZHRoL2hlaWdodCB0byBhdm9pZCBhbnkKCQkvLyBmbGFzaCBvZiBjb250
ZW50CgkJaWYgKCB0aGlzLnByb3AgPT0gIndpZHRoIiB8fCB0aGlzLnByb3AgPT0g
ImhlaWdodCIgKQoJCQl0aGlzLmVsZW0uc3R5bGVbdGhpcy5wcm9wXSA9ICIxcHgi
OwoKCQkvLyBTdGFydCBieSBzaG93aW5nIHRoZSBlbGVtZW50CgkJalF1ZXJ5KHRo
aXMuZWxlbSkuc2hvdygpOwoJfSwKCgkvLyBTaW1wbGUgJ2hpZGUnIGZ1bmN0aW9u
CgloaWRlOiBmdW5jdGlvbigpewoJCS8vIFJlbWVtYmVyIHdoZXJlIHdlIHN0YXJ0
ZWQsIHNvIHRoYXQgd2UgY2FuIGdvIGJhY2sgdG8gaXQgbGF0ZXIKCQl0aGlzLm9w
dGlvbnMub3JpZ1t0aGlzLnByb3BdID0galF1ZXJ5LmF0dHIoIHRoaXMuZWxlbS5z
dHlsZSwgdGhpcy5wcm9wICk7CgkJdGhpcy5vcHRpb25zLmhpZGUgPSB0cnVlOwoK
CQkvLyBCZWdpbiB0aGUgYW5pbWF0aW9uCgkJdGhpcy5jdXN0b20odGhpcy5jdXIo
KSwgMCk7Cgl9LAoKCS8vIEVhY2ggc3RlcCBvZiBhbiBhbmltYXRpb24KCXN0ZXA6
IGZ1bmN0aW9uKGdvdG9FbmQpewoJCXZhciB0ID0gbm93KCk7CgoJCWlmICggZ290
b0VuZCB8fCB0ID4gdGhpcy5vcHRpb25zLmR1cmF0aW9uICsgdGhpcy5zdGFydFRp
bWUgKSB7CgkJCXRoaXMubm93ID0gdGhpcy5lbmQ7CgkJCXRoaXMucG9zID0gdGhp
cy5zdGF0ZSA9IDE7CgkJCXRoaXMudXBkYXRlKCk7CgoJCQl0aGlzLm9wdGlvbnMu
Y3VyQW5pbVsgdGhpcy5wcm9wIF0gPSB0cnVlOwoKCQkJdmFyIGRvbmUgPSB0cnVl
OwoJCQlmb3IgKCB2YXIgaSBpbiB0aGlzLm9wdGlvbnMuY3VyQW5pbSApCgkJCQlp
ZiAoIHRoaXMub3B0aW9ucy5jdXJBbmltW2ldICE9PSB0cnVlICkKCQkJCQlkb25l
ID0gZmFsc2U7CgoJCQlpZiAoIGRvbmUgKSB7CgkJCQlpZiAoIHRoaXMub3B0aW9u
cy5kaXNwbGF5ICE9IG51bGwgKSB7CgkJCQkJLy8gUmVzZXQgdGhlIG92ZXJmbG93
CgkJCQkJdGhpcy5lbGVtLnN0eWxlLm92ZXJmbG93ID0gdGhpcy5vcHRpb25zLm92
ZXJmbG93OwoKCQkJCQkvLyBSZXNldCB0aGUgZGlzcGxheQoJCQkJCXRoaXMuZWxl
bS5zdHlsZS5kaXNwbGF5ID0gdGhpcy5vcHRpb25zLmRpc3BsYXk7CgkJCQkJaWYg
KCBqUXVlcnkuY3NzKHRoaXMuZWxlbSwgImRpc3BsYXkiKSA9PSAibm9uZSIgKQoJ
CQkJCQl0aGlzLmVsZW0uc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CgkJCQl9CgoJ
CQkJLy8gSGlkZSB0aGUgZWxlbWVudCBpZiB0aGUgImhpZGUiIG9wZXJhdGlvbiB3
YXMgZG9uZQoJCQkJaWYgKCB0aGlzLm9wdGlvbnMuaGlkZSApCgkJCQkJdGhpcy5l
bGVtLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CgoJCQkJLy8gUmVzZXQgdGhlIHBy
b3BlcnRpZXMsIGlmIHRoZSBpdGVtIGhhcyBiZWVuIGhpZGRlbiBvciBzaG93bgoJ
CQkJaWYgKCB0aGlzLm9wdGlvbnMuaGlkZSB8fCB0aGlzLm9wdGlvbnMuc2hvdyAp
CgkJCQkJZm9yICggdmFyIHAgaW4gdGhpcy5vcHRpb25zLmN1ckFuaW0gKQoJCQkJ
CQlqUXVlcnkuYXR0cih0aGlzLmVsZW0uc3R5bGUsIHAsIHRoaXMub3B0aW9ucy5v
cmlnW3BdKTsKCQkJfQoKCQkJaWYgKCBkb25lICkKCQkJCS8vIEV4ZWN1dGUgdGhl
IGNvbXBsZXRlIGZ1bmN0aW9uCgkJCQl0aGlzLm9wdGlvbnMuY29tcGxldGUuY2Fs
bCggdGhpcy5lbGVtICk7CgoJCQlyZXR1cm4gZmFsc2U7CgkJfSBlbHNlIHsKCQkJ
dmFyIG4gPSB0IC0gdGhpcy5zdGFydFRpbWU7CgkJCXRoaXMuc3RhdGUgPSBuIC8g
dGhpcy5vcHRpb25zLmR1cmF0aW9uOwoKCQkJLy8gUGVyZm9ybSB0aGUgZWFzaW5n
IGZ1bmN0aW9uLCBkZWZhdWx0cyB0byBzd2luZwoJCQl0aGlzLnBvcyA9IGpRdWVy
eS5lYXNpbmdbdGhpcy5vcHRpb25zLmVhc2luZyB8fCAoalF1ZXJ5LmVhc2luZy5z
d2luZyA/ICJzd2luZyIgOiAibGluZWFyIildKHRoaXMuc3RhdGUsIG4sIDAsIDEs
IHRoaXMub3B0aW9ucy5kdXJhdGlvbik7CgkJCXRoaXMubm93ID0gdGhpcy5zdGFy
dCArICgodGhpcy5lbmQgLSB0aGlzLnN0YXJ0KSAqIHRoaXMucG9zKTsKCgkJCS8v
IFBlcmZvcm0gdGhlIG5leHQgc3RlcCBvZiB0aGUgYW5pbWF0aW9uCgkJCXRoaXMu
dXBkYXRlKCk7CgkJfQoKCQlyZXR1cm4gdHJ1ZTsKCX0KCn07CgpqUXVlcnkuZXh0
ZW5kKCBqUXVlcnkuZngsIHsKCXNwZWVkczp7CgkJc2xvdzogNjAwLAogCQlmYXN0
OiAyMDAsCiAJCS8vIERlZmF1bHQgc3BlZWQKIAkJZGVmOiA0MDAKCX0sCglzdGVw
OiB7CgkJc2Nyb2xsTGVmdDogZnVuY3Rpb24oZngpewoJCQlmeC5lbGVtLnNjcm9s
bExlZnQgPSBmeC5ub3c7CgkJfSwKCgkJc2Nyb2xsVG9wOiBmdW5jdGlvbihmeCl7
CgkJCWZ4LmVsZW0uc2Nyb2xsVG9wID0gZngubm93OwoJCX0sCgoJCW9wYWNpdHk6
IGZ1bmN0aW9uKGZ4KXsKCQkJalF1ZXJ5LmF0dHIoZnguZWxlbS5zdHlsZSwgIm9w
YWNpdHkiLCBmeC5ub3cpOwoJCX0sCgoJCV9kZWZhdWx0OiBmdW5jdGlvbihmeCl7
CgkJCWZ4LmVsZW0uc3R5bGVbIGZ4LnByb3AgXSA9IGZ4Lm5vdyArIGZ4LnVuaXQ7
CgkJfQoJfQp9KTsKLy8gVGhlIE9mZnNldCBNZXRob2QKLy8gT3JpZ2luYWxseSBC
eSBCcmFuZG9uIEFhcm9uLCBwYXJ0IG9mIHRoZSBEaW1lbnNpb24gUGx1Z2luCi8v
IGh0dHA6Ly9qcXVlcnkuY29tL3BsdWdpbnMvcHJvamVjdC9kaW1lbnNpb25zCmpR
dWVyeS5mbi5vZmZzZXQgPSBmdW5jdGlvbigpIHsKCXZhciBsZWZ0ID0gMCwgdG9w
ID0gMCwgZWxlbSA9IHRoaXNbMF0sIHJlc3VsdHM7CgoJaWYgKCBlbGVtICkgd2l0
aCAoIGpRdWVyeS5icm93c2VyICkgewoJCXZhciBwYXJlbnQgICAgICAgPSBlbGVt
LnBhcmVudE5vZGUsCgkJICAgIG9mZnNldENoaWxkICA9IGVsZW0sCgkJICAgIG9m
ZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50LAoJCSAgICBkb2MgICAgICAg
ICAgPSBlbGVtLm93bmVyRG9jdW1lbnQsCgkJICAgIHNhZmFyaTIgICAgICA9IHNh
ZmFyaSAmJiBwYXJzZUludCh2ZXJzaW9uKSA8IDUyMiAmJiAhL2Fkb2JlYWlyL2ku
dGVzdCh1c2VyQWdlbnQpLAoJCSAgICBjc3MgICAgICAgICAgPSBqUXVlcnkuY3Vy
Q1NTLAoJCSAgICBmaXhlZCAgICAgICAgPSBjc3MoZWxlbSwgInBvc2l0aW9uIikg
PT0gImZpeGVkIjsKCgkJLy8gVXNlIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBpZiBh
dmFpbGFibGUKCQlpZiAoIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICkgewoJ
CQl2YXIgYm94ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCgkJCS8v
IEFkZCB0aGUgZG9jdW1lbnQgc2Nyb2xsIG9mZnNldHMKCQkJYWRkKGJveC5sZWZ0
ICsgTWF0aC5tYXgoZG9jLmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LCBkb2Mu
Ym9keS5zY3JvbGxMZWZ0KSwKCQkJCWJveC50b3AgICsgTWF0aC5tYXgoZG9jLmRv
Y3VtZW50RWxlbWVudC5zY3JvbGxUb3AsICBkb2MuYm9keS5zY3JvbGxUb3ApKTsK
CgkJCS8vIElFIGFkZHMgdGhlIEhUTUwgZWxlbWVudCdzIGJvcmRlciwgYnkgZGVm
YXVsdCBpdCBpcyBtZWRpdW0gd2hpY2ggaXMgMnB4CgkJCS8vIElFIDYgYW5kIDcg
cXVpcmtzIG1vZGUgdGhlIGJvcmRlciB3aWR0aCBpcyBvdmVyd3JpdGFibGUgYnkg
dGhlIGZvbGxvd2luZyBjc3MgaHRtbCB7IGJvcmRlcjogMDsgfQoJCQkvLyBJRSA3
IHN0YW5kYXJkcyBtb2RlLCB0aGUgYm9yZGVyIGlzIGFsd2F5cyAycHgKCQkJLy8g
VGhpcyBib3JkZXIvb2Zmc2V0IGlzIHR5cGljYWxseSByZXByZXNlbnRlZCBieSB0
aGUgY2xpZW50TGVmdCBhbmQgY2xpZW50VG9wIHByb3BlcnRpZXMKCQkJLy8gSG93
ZXZlciwgaW4gSUU2IGFuZCA3IHF1aXJrcyBtb2RlIHRoZSBjbGllbnRMZWZ0IGFu
ZCBjbGllbnRUb3AgcHJvcGVydGllcyBhcmUgbm90IHVwZGF0ZWQgd2hlbiBvdmVy
d3JpdGluZyBpdCB2aWEgQ1NTCgkJCS8vIFRoZXJlZm9yZSB0aGlzIG1ldGhvZCB3
aWxsIGJlIG9mZiBieSAycHggaW4gSUUgd2hpbGUgaW4gcXVpcmtzbW9kZQoJCQlh
ZGQoIC1kb2MuZG9jdW1lbnRFbGVtZW50LmNsaWVudExlZnQsIC1kb2MuZG9jdW1l
bnRFbGVtZW50LmNsaWVudFRvcCApOwoKCQkvLyBPdGhlcndpc2UgbG9vcCB0aHJv
dWdoIHRoZSBvZmZzZXRQYXJlbnRzIGFuZCBwYXJlbnROb2RlcwoJCX0gZWxzZSB7
CgoJCQkvLyBJbml0aWFsIGVsZW1lbnQgb2Zmc2V0cwoJCQlhZGQoIGVsZW0ub2Zm
c2V0TGVmdCwgZWxlbS5vZmZzZXRUb3AgKTsKCgkJCS8vIEdldCBwYXJlbnQgb2Zm
c2V0cwoJCQl3aGlsZSAoIG9mZnNldFBhcmVudCApIHsKCQkJCS8vIEFkZCBvZmZz
ZXRQYXJlbnQgb2Zmc2V0cwoJCQkJYWRkKCBvZmZzZXRQYXJlbnQub2Zmc2V0TGVm
dCwgb2Zmc2V0UGFyZW50Lm9mZnNldFRvcCApOwoKCQkJCS8vIE1vemlsbGEgYW5k
IFNhZmFyaSA+IDIgZG9lcyBub3QgaW5jbHVkZSB0aGUgYm9yZGVyIG9uIG9mZnNl
dCBwYXJlbnRzCgkJCQkvLyBIb3dldmVyIE1vemlsbGEgYWRkcyB0aGUgYm9yZGVy
IGZvciB0YWJsZSBvciB0YWJsZSBjZWxscwoJCQkJaWYgKCBtb3ppbGxhICYmICEv
XnQoYWJsZXxkfGgpJC9pLnRlc3Qob2Zmc2V0UGFyZW50LnRhZ05hbWUpIHx8IHNh
ZmFyaSAmJiAhc2FmYXJpMiApCgkJCQkJYm9yZGVyKCBvZmZzZXRQYXJlbnQgKTsK
CgkJCQkvLyBBZGQgdGhlIGRvY3VtZW50IHNjcm9sbCBvZmZzZXRzIGlmIHBvc2l0
aW9uIGlzIGZpeGVkIG9uIGFueSBvZmZzZXRQYXJlbnQKCQkJCWlmICggIWZpeGVk
ICYmIGNzcyhvZmZzZXRQYXJlbnQsICJwb3NpdGlvbiIpID09ICJmaXhlZCIgKQoJ
CQkJCWZpeGVkID0gdHJ1ZTsKCgkJCQkvLyBTZXQgb2Zmc2V0Q2hpbGQgdG8gcHJl
dmlvdXMgb2Zmc2V0UGFyZW50IHVubGVzcyBpdCBpcyB0aGUgYm9keSBlbGVtZW50
CgkJCQlvZmZzZXRDaGlsZCAgPSAvXmJvZHkkL2kudGVzdChvZmZzZXRQYXJlbnQu
dGFnTmFtZSkgPyBvZmZzZXRDaGlsZCA6IG9mZnNldFBhcmVudDsKCQkJCS8vIEdl
dCBuZXh0IG9mZnNldFBhcmVudAoJCQkJb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFy
ZW50Lm9mZnNldFBhcmVudDsKCQkJfQoKCQkJLy8gR2V0IHBhcmVudCBzY3JvbGwg
b2Zmc2V0cwoJCQl3aGlsZSAoIHBhcmVudCAmJiBwYXJlbnQudGFnTmFtZSAmJiAh
L15ib2R5fGh0bWwkL2kudGVzdChwYXJlbnQudGFnTmFtZSkgKSB7CgkJCQkvLyBS
ZW1vdmUgcGFyZW50IHNjcm9sbCBVTkxFU1MgdGhhdCBwYXJlbnQgaXMgaW5saW5l
IG9yIGEgdGFibGUgdG8gd29yayBhcm91bmQgT3BlcmEgaW5saW5lL3RhYmxlIHNj
cm9sbExlZnQvVG9wIGJ1ZwoJCQkJaWYgKCAhL15pbmxpbmV8dGFibGUuKiQvaS50
ZXN0KGNzcyhwYXJlbnQsICJkaXNwbGF5IikpICkKCQkJCQkvLyBTdWJ0cmFjdCBw
YXJlbnQgc2Nyb2xsIG9mZnNldHMKCQkJCQlhZGQoIC1wYXJlbnQuc2Nyb2xsTGVm
dCwgLXBhcmVudC5zY3JvbGxUb3AgKTsKCgkJCQkvLyBNb3ppbGxhIGRvZXMgbm90
IGFkZCB0aGUgYm9yZGVyIGZvciBhIHBhcmVudCB0aGF0IGhhcyBvdmVyZmxvdyAh
PSB2aXNpYmxlCgkJCQlpZiAoIG1vemlsbGEgJiYgY3NzKHBhcmVudCwgIm92ZXJm
bG93IikgIT0gInZpc2libGUiICkKCQkJCQlib3JkZXIoIHBhcmVudCApOwoKCQkJ
CS8vIEdldCBuZXh0IHBhcmVudAoJCQkJcGFyZW50ID0gcGFyZW50LnBhcmVudE5v
ZGU7CgkJCX0KCgkJCS8vIFNhZmFyaSA8PSAyIGRvdWJsZXMgYm9keSBvZmZzZXRz
IHdpdGggYSBmaXhlZCBwb3NpdGlvbiBlbGVtZW50L29mZnNldFBhcmVudCBvciBh
YnNvbHV0ZWx5IHBvc2l0aW9uZWQgb2Zmc2V0Q2hpbGQKCQkJLy8gTW96aWxsYSBk
b3VibGVzIGJvZHkgb2Zmc2V0cyB3aXRoIGEgbm9uLWFic29sdXRlbHkgcG9zaXRp
b25lZCBvZmZzZXRDaGlsZAoJCQlpZiAoIChzYWZhcmkyICYmIChmaXhlZCB8fCBj
c3Mob2Zmc2V0Q2hpbGQsICJwb3NpdGlvbiIpID09ICJhYnNvbHV0ZSIpKSB8fAoJ
CQkJKG1vemlsbGEgJiYgY3NzKG9mZnNldENoaWxkLCAicG9zaXRpb24iKSAhPSAi
YWJzb2x1dGUiKSApCgkJCQkJYWRkKCAtZG9jLmJvZHkub2Zmc2V0TGVmdCwgLWRv
Yy5ib2R5Lm9mZnNldFRvcCApOwoKCQkJLy8gQWRkIHRoZSBkb2N1bWVudCBzY3Jv
bGwgb2Zmc2V0cyBpZiBwb3NpdGlvbiBpcyBmaXhlZAoJCQlpZiAoIGZpeGVkICkK
CQkJCWFkZChNYXRoLm1heChkb2MuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQs
IGRvYy5ib2R5LnNjcm9sbExlZnQpLAoJCQkJCU1hdGgubWF4KGRvYy5kb2N1bWVu
dEVsZW1lbnQuc2Nyb2xsVG9wLCAgZG9jLmJvZHkuc2Nyb2xsVG9wKSk7CgkJfQoK
CQkvLyBSZXR1cm4gYW4gb2JqZWN0IHdpdGggdG9wIGFuZCBsZWZ0IHByb3BlcnRp
ZXMKCQlyZXN1bHRzID0geyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9OwoJfQoKCWZ1
bmN0aW9uIGJvcmRlcihlbGVtKSB7CgkJYWRkKCBqUXVlcnkuY3VyQ1NTKGVsZW0s
ICJib3JkZXJMZWZ0V2lkdGgiLCB0cnVlKSwgalF1ZXJ5LmN1ckNTUyhlbGVtLCAi
Ym9yZGVyVG9wV2lkdGgiLCB0cnVlKSApOwoJfQoKCWZ1bmN0aW9uIGFkZChsLCB0
KSB7CgkJbGVmdCArPSBwYXJzZUludChsLCAxMCkgfHwgMDsKCQl0b3AgKz0gcGFy
c2VJbnQodCwgMTApIHx8IDA7Cgl9CgoJcmV0dXJuIHJlc3VsdHM7Cn07CgoKalF1
ZXJ5LmZuLmV4dGVuZCh7Cglwb3NpdGlvbjogZnVuY3Rpb24oKSB7CgkJdmFyIGxl
ZnQgPSAwLCB0b3AgPSAwLCByZXN1bHRzOwoKCQlpZiAoIHRoaXNbMF0gKSB7CgkJ
CS8vIEdldCAqcmVhbCogb2Zmc2V0UGFyZW50CgkJCXZhciBvZmZzZXRQYXJlbnQg
PSB0aGlzLm9mZnNldFBhcmVudCgpLAoKCQkJLy8gR2V0IGNvcnJlY3Qgb2Zmc2V0
cwoJCQlvZmZzZXQgICAgICAgPSB0aGlzLm9mZnNldCgpLAoJCQlwYXJlbnRPZmZz
ZXQgPSAvXmJvZHl8aHRtbCQvaS50ZXN0KG9mZnNldFBhcmVudFswXS50YWdOYW1l
KSA/IHsgdG9wOiAwLCBsZWZ0OiAwIH0gOiBvZmZzZXRQYXJlbnQub2Zmc2V0KCk7
CgoJCQkvLyBTdWJ0cmFjdCBlbGVtZW50IG1hcmdpbnMKCQkJLy8gbm90ZTogd2hl
biBhbiBlbGVtZW50IGhhcyBtYXJnaW46IGF1dG8gdGhlIG9mZnNldExlZnQgYW5k
IG1hcmdpbkxlZnQgCgkJCS8vIGFyZSB0aGUgc2FtZSBpbiBTYWZhcmkgY2F1c2lu
ZyBvZmZzZXQubGVmdCB0byBpbmNvcnJlY3RseSBiZSAwCgkJCW9mZnNldC50b3Ag
IC09IG51bSggdGhpcywgJ21hcmdpblRvcCcgKTsKCQkJb2Zmc2V0LmxlZnQgLT0g
bnVtKCB0aGlzLCAnbWFyZ2luTGVmdCcgKTsKCgkJCS8vIEFkZCBvZmZzZXRQYXJl
bnQgYm9yZGVycwoJCQlwYXJlbnRPZmZzZXQudG9wICArPSBudW0oIG9mZnNldFBh
cmVudCwgJ2JvcmRlclRvcFdpZHRoJyApOwoJCQlwYXJlbnRPZmZzZXQubGVmdCAr
PSBudW0oIG9mZnNldFBhcmVudCwgJ2JvcmRlckxlZnRXaWR0aCcgKTsKCgkJCS8v
IFN1YnRyYWN0IHRoZSB0d28gb2Zmc2V0cwoJCQlyZXN1bHRzID0gewoJCQkJdG9w
OiAgb2Zmc2V0LnRvcCAgLSBwYXJlbnRPZmZzZXQudG9wLAoJCQkJbGVmdDogb2Zm
c2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdAoJCQl9OwoJCX0KCgkJcmV0dXJu
IHJlc3VsdHM7Cgl9LAoKCW9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7CgkJdmFy
IG9mZnNldFBhcmVudCA9IHRoaXNbMF0ub2Zmc2V0UGFyZW50OwoJCXdoaWxlICgg
b2Zmc2V0UGFyZW50ICYmICghL15ib2R5fGh0bWwkL2kudGVzdChvZmZzZXRQYXJl
bnQudGFnTmFtZSkgJiYgalF1ZXJ5LmNzcyhvZmZzZXRQYXJlbnQsICdwb3NpdGlv
bicpID09ICdzdGF0aWMnKSApCgkJCW9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVu
dC5vZmZzZXRQYXJlbnQ7CgkJcmV0dXJuIGpRdWVyeShvZmZzZXRQYXJlbnQpOwoJ
fQp9KTsKCgovLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhv
ZHMKalF1ZXJ5LmVhY2goIFsnTGVmdCcsICdUb3AnXSwgZnVuY3Rpb24oaSwgbmFt
ZSkgewoJdmFyIG1ldGhvZCA9ICdzY3JvbGwnICsgbmFtZTsKCQoJalF1ZXJ5LmZu
WyBtZXRob2QgXSA9IGZ1bmN0aW9uKHZhbCkgewoJCWlmICghdGhpc1swXSkgcmV0
dXJuOwoKCQlyZXR1cm4gdmFsICE9IHVuZGVmaW5lZCA/CgoJCQkvLyBTZXQgdGhl
IHNjcm9sbCBvZmZzZXQKCQkJdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQkJdGhp
cyA9PSB3aW5kb3cgfHwgdGhpcyA9PSBkb2N1bWVudCA/CgkJCQkJd2luZG93LnNj
cm9sbFRvKAoJCQkJCQkhaSA/IHZhbCA6IGpRdWVyeSh3aW5kb3cpLnNjcm9sbExl
ZnQoKSwKCQkJCQkJIGkgPyB2YWwgOiBqUXVlcnkod2luZG93KS5zY3JvbGxUb3Ao
KQoJCQkJCSkgOgoJCQkJCXRoaXNbIG1ldGhvZCBdID0gdmFsOwoJCQl9KSA6CgoJ
CQkvLyBSZXR1cm4gdGhlIHNjcm9sbCBvZmZzZXQKCQkJdGhpc1swXSA9PSB3aW5k
b3cgfHwgdGhpc1swXSA9PSBkb2N1bWVudCA/CgkJCQlzZWxmWyBpID8gJ3BhZ2VZ
T2Zmc2V0JyA6ICdwYWdlWE9mZnNldCcgXSB8fAoJCQkJCWpRdWVyeS5ib3hNb2Rl
bCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIG1ldGhvZCBdIHx8CgkJCQkJ
ZG9jdW1lbnQuYm9keVsgbWV0aG9kIF0gOgoJCQkJdGhpc1swXVsgbWV0aG9kIF07
Cgl9Owp9KTsKLy8gQ3JlYXRlIGlubmVySGVpZ2h0LCBpbm5lcldpZHRoLCBvdXRl
ckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRob2RzCmpRdWVyeS5lYWNoKFsgIkhl
aWdodCIsICJXaWR0aCIgXSwgZnVuY3Rpb24oaSwgbmFtZSl7CgoJdmFyIHRsID0g
aSA/ICJMZWZ0IiAgOiAiVG9wIiwgIC8vIHRvcCBvciBsZWZ0CgkJYnIgPSBpID8g
IlJpZ2h0IiA6ICJCb3R0b20iOyAvLyBib3R0b20gb3IgcmlnaHQKCgkvLyBpbm5l
ckhlaWdodCBhbmQgaW5uZXJXaWR0aAoJalF1ZXJ5LmZuWyJpbm5lciIgKyBuYW1l
XSA9IGZ1bmN0aW9uKCl7CgkJcmV0dXJuIHRoaXNbIG5hbWUudG9Mb3dlckNhc2Uo
KSBdKCkgKwoJCQludW0odGhpcywgInBhZGRpbmciICsgdGwpICsKCQkJbnVtKHRo
aXMsICJwYWRkaW5nIiArIGJyKTsKCX07CgoJLy8gb3V0ZXJIZWlnaHQgYW5kIG91
dGVyV2lkdGgKCWpRdWVyeS5mblsib3V0ZXIiICsgbmFtZV0gPSBmdW5jdGlvbiht
YXJnaW4pIHsKCQlyZXR1cm4gdGhpc1siaW5uZXIiICsgbmFtZV0oKSArCgkJCW51
bSh0aGlzLCAiYm9yZGVyIiArIHRsICsgIldpZHRoIikgKwoJCQludW0odGhpcywg
ImJvcmRlciIgKyBiciArICJXaWR0aCIpICsKCQkJKG1hcmdpbiA/CgkJCQludW0o
dGhpcywgIm1hcmdpbiIgKyB0bCkgKyBudW0odGhpcywgIm1hcmdpbiIgKyBicikg
OiAwKTsKCX07Cgp9KTt9KSgpOwo=
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=tooltip.js
Content-Type: application/javascript; name=tooltip.js
Content-Location: http://www.ine.es/menuapp/js/tooltip.js
Content-Transfer-Encoding: Base64
LyoNCm9ubW91c2VvdXQ9ImhpZGVUb29sdGlwKCkiIA0Kb25tb3VzZW92ZXI9J3No
b3dUb29sdGlwKGV2ZW50LCJ0ZXh0byBtb3N0cmFyIik7cmV0dXJuIGZhbHNlJw0K
Ki8NCg0KdmFyIGRodG1sZ29vZGllc190b29sdGlwID0gZmFsc2U7DQp2YXIgZGh0
bWxnb29kaWVzX3Rvb2x0aXBTaGFkb3cgPSBmYWxzZTsNCnZhciBkaHRtbGdvb2Rp
ZXNfc2hhZG93U2l6ZSA9IDQ7DQp2YXIgZGh0bWxnb29kaWVzX3Rvb2x0aXBNYXhX
aWR0aCA9IDMwMDsNCnZhciBkaHRtbGdvb2RpZXNfdG9vbHRpcE1pbldpZHRoID0g
MTAwOw0KdmFyIGRodG1sZ29vZGllc19pZnJhbWUgPSBmYWxzZTsNCnZhciBkaHRt
bGdvb2RpZXNfbWFyZ2VuX2N1cnNvcj0xMDsNCnZhciBjbG9zZT10cnVlOw0KDQp2
YXIgdG9vbHRpcF9pc19tc2llID0gKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhP
ZignTVNJRScpPj0wICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignb3Bl
cmEnKT09LTEgJiYgZG9jdW1lbnQuYWxsKT90cnVlOmZhbHNlOw0KDQp2YXIgZW5j
aW1hPWZhbHNlOw0KDQp2YXIgY2VsZGEgPSIiOw0KDQpmdW5jdGlvbiBzaG93VG9v
bHRpcERhdGEoZSx0b29sdGlwVHh0LGhlYWRlcnMpew0KCXZhciBoZWFkZXJzQXJy
YXk9aGVhZGVycy5zcGxpdCgiICIpOw0KDQoJdmFyIHRleHRvPSIiOw0KCWZvciAo
aT0wO2k8aGVhZGVyc0FycmF5Lmxlbmd0aDtpKyspew0KCQlpZiAoaT09MCkgdGV4
dG8rPWV2YWwoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCciK2hlYWRlcnNBcnJh
eVtpXSsiJykuYXhpcyIpOw0KCQllbHNlIHRleHRvKz0iID4gIitldmFsKCJkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnIitoZWFkZXJzQXJyYXlbaV0rIicpLmF4aXMi
KTsNCgl9DQoJdGV4dG89IjxiPiIrdGV4dG8rIjxiPjxicj48YnI+IjsNCgljbG9z
ZT1mYWxzZTsNCgl3aW5kb3cuc3RhdHVzPXRleHRvOw0KCXNob3dUb29sdGlwKGUs
dGV4dG8rdG9vbHRpcFR4dCk7DQoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlt
Z0Nsb3NlIikuZm9jdXMoKTsNCn0NCg0KDQpmdW5jdGlvbiBzaG93VG9vbHRpcENl
cnJhcihlLHRvb2x0aXBUeHQpew0KCWNsb3NlPWZhbHNlOw0KCXNob3dUb29sdGlw
KGUsdG9vbHRpcFR4dCk7DQoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImltZ0Ns
b3NlIikuZm9jdXMoKTsNCn0NCg0KZnVuY3Rpb24gc2hvd1Rvb2x0aXAoZSx0b29s
dGlwVHh0KQ0Kew0KCQ0KICAgICAgICB2YXIgYm9keVdpZHRoID0gTWF0aC5tYXgo
ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCxkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQuY2xpZW50V2lkdGgpIC0gMjA7DQoNCiAgICAgICAgaWYoIWRodG1sZ29vZGll
c190b29sdGlwKXsNCiAgICAgICAgICAgICAgICBkaHRtbGdvb2RpZXNfdG9vbHRp
cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpOw0KDQogICAgICAgICAg
ICAgICAgZGh0bWxnb29kaWVzX3Rvb2x0aXAuaWQgPSAnZGh0bWxnb29kaWVzX3Rv
b2x0aXAnOw0KICAgICAgICAgICAgICAgIGRodG1sZ29vZGllc190b29sdGlwU2hh
ZG93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJyk7DQogICAgICAgICAg
ICAgICAgZGh0bWxnb29kaWVzX3Rvb2x0aXBTaGFkb3cuaWQgPSAnZGh0bWxnb29k
aWVzX3Rvb2x0aXBTaGFkb3cnOw0KDQogICAgICAgICAgICAgICAgZG9jdW1lbnQu
Ym9keS5hcHBlbmRDaGlsZChkaHRtbGdvb2RpZXNfdG9vbHRpcCk7DQogICAgICAg
ICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaHRtbGdvb2RpZXNf
dG9vbHRpcFNoYWRvdyk7DQoNCiAgICAgICAgICAgICAgICBpZih0b29sdGlwX2lz
X21zaWUpew0KICAgICAgICAgICAgICAgICAgICAgICAgZGh0bWxnb29kaWVzX2lm
cmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0lGUkFNRScpOw0KICAgICAg
ICAgICAgICAgICAgICAgICAgZGh0bWxnb29kaWVzX2lmcmFtZS5mcmFtZWJvcmRl
cj0nNSc7DQogICAgICAgICAgICAgICAgICAgICAgICBkaHRtbGdvb2RpZXNfaWZy
YW1lLnN0eWxlLmJhY2tncm91bmRDb2xvcj0nI0ZGRkZGRic7DQogICAgICAgICAg
ICAgICAgICAgICAgICBkaHRtbGdvb2RpZXNfaWZyYW1lLnNyYyA9ICcjJzsNCiAg
ICAgICAgICAgICAgICAgICAgICAgIGRodG1sZ29vZGllc19pZnJhbWUuc3R5bGUu
ekluZGV4ID0gMTAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgZGh0bWxnb29k
aWVzX2lmcmFtZS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7DQogICAgICAg
ICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRodG1s
Z29vZGllc19pZnJhbWUpOw0KICAgICAgICAgICAgICAgIH0NCgkJCQlkaHRtbGdv
b2RpZXNfdG9vbHRpcC5vbm1vdXNlb3ZlciAgPSBmdW5jdGlvbigpe3Bhc29FbmNp
bWEoKX07DQoJCQlpZiAoY2xvc2Upew0KCQkJCWRodG1sZ29vZGllc190b29sdGlw
Lm9ubW91c2VvdXQgID0gZnVuY3Rpb24oKXtvY3VsdGFyVG9vbHRpcCgpfTsJDQoJ
CQl9DQogICAgICAgIH0NCg0KICAgICAgICBkaHRtbGdvb2RpZXNfdG9vbHRpcC5z
dHlsZS5kaXNwbGF5PSdibG9jayc7DQogICAgICAgIGRodG1sZ29vZGllc190b29s
dGlwU2hhZG93LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsNCiAgICAgICAgaWYodG9v
bHRpcF9pc19tc2llKWRodG1sZ29vZGllc19pZnJhbWUuc3R5bGUuZGlzcGxheT0n
YmxvY2snOw0KDQogICAgICAgIHZhciBzdCA9IE1hdGgubWF4KGRvY3VtZW50LmJv
ZHkuc2Nyb2xsVG9wLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3Ap
Ow0KICAgICAgICBpZihuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCku
aW5kZXhPZignc2FmYXJpJyk+PTApc3Q9MDsNCg0KICAgICAgICB2YXIgbGVmdFBv
cyA9IGUuY2xpZW50WCArIGRodG1sZ29vZGllc19tYXJnZW5fY3Vyc29yOw0KDQoJ
CWlmIChib2R5V2lkdGgtbGVmdFBvczxkaHRtbGdvb2RpZXNfdG9vbHRpcE1heFdp
ZHRoKQ0KCQkJbGVmdFBvcz1ib2R5V2lkdGgtZGh0bWxnb29kaWVzX3Rvb2x0aXBN
YXhXaWR0aDsNCg0KICAgICAgICBkaHRtbGdvb2RpZXNfdG9vbHRpcC5zdHlsZS53
aWR0aCA9IG51bGw7CS8vIFJlc2V0IHN0eWxlIHdpZHRoIGlmIGl0J3Mgc2V0DQog
ICAgICAgIGlmICghY2xvc2Upew0KICAgICAgICAJaW1nY2VycmFyPSI8ZGl2IGlk
PSdkaHRtbGdvb2RpZXNfdG9vbHRpcENsb3NlJz48YSB0aXRsZT0nQ2VycmFyJyBp
ZD0naW1nQ2xvc2UnIGhyZWY9J2phdmFzY3JpcHQ6aGlkZVRvb2x0aXAoKTsnPjxp
bWcgYWx0PSdDZXJyYXInIHNyYz0nIitITV9NZW51X0RpcisiL2ltZy9jZXJyYXIu
Z2lmJz48L2E+PC9kaXY+Ig0KICAgICAgICAJdG9vbHRpcFR4dD1pbWdjZXJyYXIr
dG9vbHRpcFR4dDsNCiAgICAgICAgfSAgICAgICAgDQogICAgICAgIGRodG1sZ29v
ZGllc190b29sdGlwLmlubmVySFRNTCA9IHRvb2x0aXBUeHQ7DQoNCiAgICAgICAg
ZGh0bWxnb29kaWVzX3Rvb2x0aXAuc3R5bGUubGVmdCA9IChsZWZ0UG9zICsgZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQpICsncHgnOw0KICAgICAg
ICBkaHRtbGdvb2RpZXNfdG9vbHRpcC5zdHlsZS50b3AgPSBlLmNsaWVudFkgKyBk
aHRtbGdvb2RpZXNfbWFyZ2VuX2N1cnNvciArIHN0ICsgJ3B4JzsNCg0KDQogICAg
ICAgIGRodG1sZ29vZGllc190b29sdGlwU2hhZG93LnN0eWxlLmxlZnQgPSAgKGxl
ZnRQb3MgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCkgKyAn
cHgnOw0KICAgICAgICBkaHRtbGdvb2RpZXNfdG9vbHRpcFNoYWRvdy5zdHlsZS50
b3AgPSBlLmNsaWVudFkgKyBkaHRtbGdvb2RpZXNfbWFyZ2VuX2N1cnNvciArIHN0
ICsgZGh0bWxnb29kaWVzX3NoYWRvd1NpemUgKyAncHgnOw0KDQogICAgICAvKiBp
ZihkaHRtbGdvb2RpZXNfdG9vbHRpcC5vZmZzZXRXaWR0aD5kaHRtbGdvb2RpZXNf
dG9vbHRpcE1heFdpZHRoKXsJLyogRXhjZWVkaW5nIG1heCB3aWR0aCBvZiB0b29s
dGlwID8gKi8NCiAgICAgICAvKiAgICAgICAgZGh0bWxnb29kaWVzX3Rvb2x0aXAu
c3R5bGUud2lkdGggPSBkaHRtbGdvb2RpZXNfdG9vbHRpcE1heFdpZHRoICsgJ3B4
JzsNCiAgICAgICAgfSovDQogDQoJCSB2YXIgdG9vbHRpcFdpZHRoID0gZGh0bWxn
b29kaWVzX3Rvb2x0aXBNYXhXaWR0aDsNCiAvLyAgICAgICB2YXIgdG9vbHRpcFdp
ZHRoID0gZGh0bWxnb29kaWVzX3Rvb2x0aXAub2Zmc2V0V2lkdGg7DQogIC8vICAg
ICAgaWYodG9vbHRpcFdpZHRoPGRodG1sZ29vZGllc190b29sdGlwTWluV2lkdGgp
dG9vbHRpcFdpZHRoID0gZGh0bWxnb29kaWVzX3Rvb2x0aXBNaW5XaWR0aDsNCg0K
DQogICAgICAgIGRodG1sZ29vZGllc190b29sdGlwLnN0eWxlLndpZHRoID0gdG9v
bHRpcFdpZHRoICsgJ3B4JzsNCiAgICAgICAgZGh0bWxnb29kaWVzX3Rvb2x0aXBT
aGFkb3cuc3R5bGUud2lkdGggPSBkaHRtbGdvb2RpZXNfdG9vbHRpcC5vZmZzZXRX
aWR0aCArICdweCc7DQogICAgICAgIGRodG1sZ29vZGllc190b29sdGlwU2hhZG93
LnN0eWxlLmhlaWdodCA9IGRodG1sZ29vZGllc190b29sdGlwLm9mZnNldEhlaWdo
dCArICdweCc7DQoNCiAgICAgICBpZigobGVmdFBvcyArIHRvb2x0aXBXaWR0aCk+
Ym9keVdpZHRoKXsNCiAgICAgICAgICAgICAgICBkaHRtbGdvb2RpZXNfdG9vbHRp
cC5zdHlsZS5sZWZ0ID0gKGRodG1sZ29vZGllc190b29sdGlwU2hhZG93LnN0eWxl
LmxlZnQucmVwbGFjZSgncHgnLCcnKSAtICgobGVmdFBvcyArIHRvb2x0aXBXaWR0
aCktYm9keVdpZHRoKSkgKyAncHgnOw0KICAgICAgICAgICAgICAgIGRodG1sZ29v
ZGllc190b29sdGlwU2hhZG93LnN0eWxlLmxlZnQgPSAoZGh0bWxnb29kaWVzX3Rv
b2x0aXBTaGFkb3cuc3R5bGUubGVmdC5yZXBsYWNlKCdweCcsJycpIC0gKChsZWZ0
UG9zICsgdG9vbHRpcFdpZHRoKS1ib2R5V2lkdGgpICsgZGh0bWxnb29kaWVzX3No
YWRvd1NpemUpICsgJ3B4JzsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmKHRvb2x0
aXBfaXNfbXNpZSl7DQogICAgICAgICAgICAgICAgZGh0bWxnb29kaWVzX2lmcmFt
ZS5zdHlsZS5sZWZ0ID0gZGh0bWxnb29kaWVzX3Rvb2x0aXAuc3R5bGUubGVmdDsN
CiAgICAgICAgICAgICAgICBkaHRtbGdvb2RpZXNfaWZyYW1lLnN0eWxlLnRvcCA9
IGRodG1sZ29vZGllc190b29sdGlwLnN0eWxlLnRvcDsNCiAgICAgICAgICAgICAg
ICBkaHRtbGdvb2RpZXNfaWZyYW1lLnN0eWxlLndpZHRoID0gZGh0bWxnb29kaWVz
X3Rvb2x0aXAub2Zmc2V0V2lkdGggKyAncHgnOw0KICAgICAgICAgICAgICAgIGRo
dG1sZ29vZGllc19pZnJhbWUuc3R5bGUuaGVpZ2h0ID0gZGh0bWxnb29kaWVzX3Rv
b2x0aXAub2Zmc2V0SGVpZ2h0ICsgJ3B4JzsNCg0KICAgICAgICB9DQoNCn0NCg0K
ZnVuY3Rpb24gc2hvd1Rvb2x0aXBDZXJyYXIoZSx0b29sdGlwVHh0KXsNCgljbG9z
ZT1mYWxzZTsNCglzaG93VG9vbHRpcChlLHRvb2x0aXBUeHQpOw0KCWRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJpbWdDbG9zZSIpLmZvY3VzKCk7DQp9DQoNCg0KZnVu
Y3Rpb24gb2N1bHRhclRvb2x0aXAoZSkgew0KICAgZW5jaW1hPWZhbHNlOw0KICAg
c2V0VGltZW91dCgnaGlkZVRvb2x0aXAoKScsMTAwMCk7DQp9DQoNCmZ1bmN0aW9u
IHBhc29FbmNpbWEoZSkgew0KZW5jaW1hPXRydWU7DQp9DQoNCmZ1bmN0aW9uIGhp
ZGVUb29sdGlwKCkNCnsNCglpZigoIWVuY2ltYSkgfHwgKCFjbG9zZSkpewkJDQog
ICAgICAgIGRodG1sZ29vZGllc190b29sdGlwLnN0eWxlLmRpc3BsYXk9J25vbmUn
Ow0KICAgICAgICBkaHRtbGdvb2RpZXNfdG9vbHRpcFNoYWRvdy5zdHlsZS5kaXNw
bGF5PSdub25lJzsNCiAgICAgICAgaWYodG9vbHRpcF9pc19tc2llKWRodG1sZ29v
ZGllc19pZnJhbWUuc3R5bGUuZGlzcGxheT0nbm9uZSc7DQoJfQ0KfQ0KDQovL0Vz
IHVzYWRhIHBhcmEgYXF1ZWxsb3MgdG9vbHRpcCBxdWUgZGViZXJpYW4gZXNwZXJh
ciANCi8vdW4gdGllbXBvIHBvciBzaSBlbCB1c3VhcmlvIGRlc2VhIHBvbmVyc2Ug
ZW5jaW1hIGRlIA0KLy9lbCBwb3IgZWwgaGVjaG8gZGUgcXVlIHNlIGhheWEgaW5j
bHVpZG9hbCBndW5hIGVubGFjZSANCi8vdSBvcGVyYXRpdmEgZGVudHJvIGRlbCB0
b29sdGlwDQpmdW5jdGlvbiBoaWRlV2FpdFRvb2x0aXAoKXsNCiAgIHNldFRpbWVv
dXQoJ2hpZGVUb29sdGlwKCknLDEwMDApOw0KfQ0KDQoNCg==
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=thickbox.js
Content-Type: application/javascript; name=thickbox.js
Content-Location: http://www.ine.es/menuapp/js/thickbox.js
Content-Transfer-Encoding: Base64
LyoNCiAqIFRoaWNrYm94IDMuMSAtIE9uZSBCb3ggVG8gUnVsZSBUaGVtIEFsbC4N
CiAqIEJ5IENvZHkgTGluZGxleSAoaHR0cDovL3d3dy5jb2R5bGluZGxleS5jb20p
DQogKiBDb3B5cmlnaHQgKGMpIDIwMDcgY29keSBsaW5kbGV5DQogKiBMaWNlbnNl
ZCB1bmRlciB0aGUgTUlUIExpY2Vuc2U6IGh0dHA6Ly93d3cub3BlbnNvdXJjZS5v
cmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwDQoqLw0KDQoJICANCnZhciB0Yl9w
YXRoVG9JbWFnZSA9ICIvbWVudS9pbWcvbG9hZGluZ0FuaW1hdGlvbi5naWYiOw0K
dmFyIHRwX3BhdGhUb0ltYWdlY2xvc2U9Ii9tZW51L2ltZy9jZXJyYXIuZ2lmIjsN
Cg0KLyohISEhISEhISEhISEhISEhISBlZGl0IGJlbG93IHRoaXMgbGluZSBhdCB5
b3VyIG93biByaXNrICEhISEhISEhISEhISEhISEhISEhISEhKi8NCg0KLy9vbiBw
YWdlIGxvYWQgY2FsbCB0Yl9pbml0DQokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlv
bigpeyAgDQoJaWYgKFN0cmluZyhvdGhldGhpY2tib3gpLmxlbmd0aD09MCkgDQoJ
CXRiX2luaXQoJ2EudGhpY2tib3gsIGFyZWEudGhpY2tib3gsIGlucHV0LnRoaWNr
Ym94Jyk7Ly9wYXNzIHdoZXJlIHRvIGFwcGx5IHRoaWNrYm94DQoJZWxzZSB0Yl9p
bml0KCdhLnRoaWNrYm94LCBhcmVhLnRoaWNrYm94LCBpbnB1dC50aGlja2JveCwn
ICsgb3RoZXRoaWNrYm94KTsvL3Bhc3Mgd2hlcmUgdG8gYXBwbHkgdGhpY2tib3gN
CglpbWdMb2FkZXIgPSBuZXcgSW1hZ2UoKTsvLyBwcmVsb2FkIGltYWdlDQoJaW1n
TG9hZGVyLnNyYyA9IHRiX3BhdGhUb0ltYWdlOw0KfSk7DQoNCi8vYWRkIHRoaWNr
Ym94IHRvIGhyZWYgJiBhcmVhIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIGNsYXNzIG9m
IC50aGlja2JveA0KZnVuY3Rpb24gdGJfaW5pdChkb21DaHVuayl7DQoJJChkb21D
aHVuaykuY2xpY2soZnVuY3Rpb24oKXsNCgl2YXIgdCA9IHRoaXMudGl0bGUgfHwg
dGhpcy5uYW1lIHx8IG51bGw7DQoJdmFyIGEgPSB0aGlzLmhyZWYgfHwgdGhpcy5h
bHQ7DQoJdmFyIGcgPSB0aGlzLnJlbCB8fCBmYWxzZTsNCgl0Yl9zaG93KHQsYSxn
KTsNCgl0aGlzLmJsdXIoKTsNCglyZXR1cm4gZmFsc2U7DQoJfSk7DQp9DQoNCmZ1
bmN0aW9uIHRiX3Nob3coY2FwdGlvbiwgdXJsLCBpbWFnZUdyb3VwKSB7Ly9mdW5j
dGlvbiBjYWxsZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gYSB0aGlja2JveCBs
aW5rDQoNCgl0cnkgew0KCQlpZiAodHlwZW9mIGRvY3VtZW50LmJvZHkuc3R5bGUu
bWF4SGVpZ2h0ID09PSAidW5kZWZpbmVkIikgey8vaWYgSUUgNg0KCQkJJCgiYm9k
eSIsImh0bWwiKS5jc3Moe2hlaWdodDogIjEwMCUiLCB3aWR0aDogIjEwMCUifSk7
DQoJCQkkKCJodG1sIikuY3NzKCJvdmVyZmxvdyIsImhpZGRlbiIpOw0KCQkJaWYg
KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUQl9IaWRlU2VsZWN0IikgPT09IG51
bGwpIHsvL2lmcmFtZSB0byBoaWRlIHNlbGVjdCBlbGVtZW50cyBpbiBpZTYNCgkJ
CQkkKCJib2R5IikuYXBwZW5kKCI8aWZyYW1lIGlkPSdUQl9IaWRlU2VsZWN0Jz48
L2lmcmFtZT48ZGl2IGlkPSdUQl9vdmVybGF5Jz48L2Rpdj48ZGl2IGlkPSdUQl93
aW5kb3cnPjwvZGl2PiIpOw0KCQkJCSQoIiNUQl9vdmVybGF5IikuY2xpY2sodGJf
cmVtb3ZlKTsNCgkJCX0NCgkJfWVsc2V7Ly9hbGwgb3RoZXJzDQoJCQlpZihkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiVEJfb3ZlcmxheSIpID09PSBudWxsKXsNCgkJ
CQkkKCJib2R5IikuYXBwZW5kKCI8ZGl2IGlkPSdUQl9vdmVybGF5Jz48L2Rpdj48
ZGl2IGlkPSdUQl93aW5kb3cnPjwvZGl2PiIpOw0KCQkJCSQoIiNUQl9vdmVybGF5
IikuY2xpY2sodGJfcmVtb3ZlKTsNCgkJCX0NCgkJfQ0KCQkNCgkJaWYodGJfZGV0
ZWN0TWFjWEZGKCkpew0KCQkJJCgiI1RCX292ZXJsYXkiKS5hZGRDbGFzcygiVEJf
b3ZlcmxheU1hY0ZGQkdIYWNrIik7Ly91c2UgcG5nIG92ZXJsYXkgc28gaGlkZSBm
bGFzaA0KCQl9ZWxzZXsNCgkJCSQoIiNUQl9vdmVybGF5IikuYWRkQ2xhc3MoIlRC
X292ZXJsYXlCRyIpOy8vdXNlIGJhY2tncm91bmQgYW5kIG9wYWNpdHkNCgkJfQ0K
CQkNCgkJaWYoY2FwdGlvbj09PW51bGwpe2NhcHRpb249IiI7fQ0KCQkkKCJib2R5
IikuYXBwZW5kKCI8ZGl2IGlkPSdUQl9sb2FkJz48aW1nIHNyYz0nIitpbWdMb2Fk
ZXIuc3JjKyInIC8+PC9kaXY+Iik7Ly9hZGQgbG9hZGVyIHRvIHRoZSBwYWdlDQoJ
CSQoJyNUQl9sb2FkJykuc2hvdygpOy8vc2hvdyBsb2FkZXINCgkJDQoJCXZhciBi
YXNlVVJMOw0KCSAgIGlmKHVybC5pbmRleE9mKCI/IikhPT0tMSl7IC8vZmYgdGhl
cmUgaXMgYSBxdWVyeSBzdHJpbmcgaW52b2x2ZWQNCgkJCWJhc2VVUkwgPSB1cmwu
c3Vic3RyKDAsIHVybC5pbmRleE9mKCI/IikpOw0KCSAgIH1lbHNleyANCgkgICAJ
CWJhc2VVUkwgPSB1cmw7DQoJICAgfQ0KCSAgIA0KCSAgIHZhciB1cmxTdHJpbmcg
PSAvXC5qcGckfFwuanBlZyR8XC5wbmckfFwuZ2lmJHxcLmJtcCQvOw0KCSAgIHZh
ciB1cmxUeXBlID0gYmFzZVVSTC50b0xvd2VyQ2FzZSgpLm1hdGNoKHVybFN0cmlu
Zyk7DQoNCgkJaWYodXJsVHlwZSA9PSAnLmpwZycgfHwgdXJsVHlwZSA9PSAnLmpw
ZWcnIHx8IHVybFR5cGUgPT0gJy5wbmcnIHx8IHVybFR5cGUgPT0gJy5naWYnIHx8
IHVybFR5cGUgPT0gJy5ibXAnKXsvL2NvZGUgdG8gc2hvdyBpbWFnZXMNCgkJCQkN
CgkJCVRCX1ByZXZDYXB0aW9uID0gIiI7DQoJCQlUQl9QcmV2VVJMID0gIiI7DQoJ
CQlUQl9QcmV2SFRNTCA9ICIiOw0KCQkJVEJfTmV4dENhcHRpb24gPSAiIjsNCgkJ
CVRCX05leHRVUkwgPSAiIjsNCgkJCVRCX05leHRIVE1MID0gIiI7DQoJCQlUQl9p
bWFnZUNvdW50ID0gIiI7DQoJCQlUQl9Gb3VuZFVSTCA9IGZhbHNlOw0KCQkJaWYo
aW1hZ2VHcm91cCl7DQoJCQkJVEJfVGVtcEFycmF5ID0gJCgiYVtAcmVsPSIraW1h
Z2VHcm91cCsiXSIpLmdldCgpOw0KCQkJCWZvciAoVEJfQ291bnRlciA9IDA7ICgo
VEJfQ291bnRlciA8IFRCX1RlbXBBcnJheS5sZW5ndGgpICYmIChUQl9OZXh0SFRN
TCA9PT0gIiIpKTsgVEJfQ291bnRlcisrKSB7DQoJCQkJCXZhciB1cmxUeXBlVGVt
cCA9IFRCX1RlbXBBcnJheVtUQl9Db3VudGVyXS5ocmVmLnRvTG93ZXJDYXNlKCku
bWF0Y2godXJsU3RyaW5nKTsNCgkJCQkJCWlmICghKFRCX1RlbXBBcnJheVtUQl9D
b3VudGVyXS5ocmVmID09IHVybCkpIHsJCQkJCQkNCgkJCQkJCQlpZiAoVEJfRm91
bmRVUkwpIHsNCgkJCQkJCQkJVEJfTmV4dENhcHRpb24gPSBUQl9UZW1wQXJyYXlb
VEJfQ291bnRlcl0udGl0bGU7DQoJCQkJCQkJCVRCX05leHRVUkwgPSBUQl9UZW1w
QXJyYXlbVEJfQ291bnRlcl0uaHJlZjsNCgkJCQkJCQkJVEJfTmV4dEhUTUwgPSAi
PHNwYW4gaWQ9J1RCX25leHQnPiZuYnNwOyZuYnNwOzxhIGhyZWY9JyMnPk5leHQg
Jmd0OzwvYT48L3NwYW4+IjsNCgkJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCQlUQl9Q
cmV2Q2FwdGlvbiA9IFRCX1RlbXBBcnJheVtUQl9Db3VudGVyXS50aXRsZTsNCgkJ
CQkJCQkJVEJfUHJldlVSTCA9IFRCX1RlbXBBcnJheVtUQl9Db3VudGVyXS5ocmVm
Ow0KCQkJCQkJCQlUQl9QcmV2SFRNTCA9ICI8c3BhbiBpZD0nVEJfcHJldic+Jm5i
c3A7Jm5ic3A7PGEgaHJlZj0nIyc+Jmx0OyBQcmV2PC9hPjwvc3Bhbj4iOw0KCQkJ
CQkJCX0NCgkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJVEJfRm91bmRVUkwgPSB0cnVl
Ow0KCQkJCQkJCVRCX2ltYWdlQ291bnQgPSAiSW1hZ2UgIiArIChUQl9Db3VudGVy
ICsgMSkgKyIgb2YgIisgKFRCX1RlbXBBcnJheS5sZW5ndGgpOwkJCQkJCQkJCQkJ
DQoJCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KDQoJCQlpbWdQcmVsb2FkZXIgPSBuZXcg
SW1hZ2UoKTsNCgkJCWltZ1ByZWxvYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpewkJ
DQoJCQlpbWdQcmVsb2FkZXIub25sb2FkID0gbnVsbDsNCgkJCQkNCgkJCS8vIFJl
c2l6aW5nIGxhcmdlIGltYWdlcyAtIG9yZ2luYWwgYnkgQ2hyaXN0aWFuIE1vbnRv
eWEgZWRpdGVkIGJ5IG1lLg0KCQkJdmFyIHBhZ2VzaXplID0gdGJfZ2V0UGFnZVNp
emUoKTsNCgkJCXZhciB4ID0gcGFnZXNpemVbMF0gLSAxNTA7DQoJCQl2YXIgeSA9
IHBhZ2VzaXplWzFdIC0gMTUwOw0KCQkJdmFyIGltYWdlV2lkdGggPSBpbWdQcmVs
b2FkZXIud2lkdGg7DQoJCQl2YXIgaW1hZ2VIZWlnaHQgPSBpbWdQcmVsb2FkZXIu
aGVpZ2h0Ow0KCQkJaWYgKGltYWdlV2lkdGggPiB4KSB7DQoJCQkJaW1hZ2VIZWln
aHQgPSBpbWFnZUhlaWdodCAqICh4IC8gaW1hZ2VXaWR0aCk7IA0KCQkJCWltYWdl
V2lkdGggPSB4OyANCgkJCQlpZiAoaW1hZ2VIZWlnaHQgPiB5KSB7IA0KCQkJCQlp
bWFnZVdpZHRoID0gaW1hZ2VXaWR0aCAqICh5IC8gaW1hZ2VIZWlnaHQpOyANCgkJ
CQkJaW1hZ2VIZWlnaHQgPSB5OyANCgkJCQl9DQoJCQl9IGVsc2UgaWYgKGltYWdl
SGVpZ2h0ID4geSkgeyANCgkJCQlpbWFnZVdpZHRoID0gaW1hZ2VXaWR0aCAqICh5
IC8gaW1hZ2VIZWlnaHQpOyANCgkJCQlpbWFnZUhlaWdodCA9IHk7IA0KCQkJCWlm
IChpbWFnZVdpZHRoID4geCkgeyANCgkJCQkJaW1hZ2VIZWlnaHQgPSBpbWFnZUhl
aWdodCAqICh4IC8gaW1hZ2VXaWR0aCk7IA0KCQkJCQlpbWFnZVdpZHRoID0geDsN
CgkJCQl9DQoJCQl9DQoJCQkvLyBFbmQgUmVzaXppbmcNCgkJCQ0KCQkJVEJfV0lE
VEggPSBpbWFnZVdpZHRoICsgMzA7DQoJCQlUQl9IRUlHSFQgPSBpbWFnZUhlaWdo
dCArIDYwOw0KCQkJJCgiI1RCX3dpbmRvdyIpLmFwcGVuZCgiPGEgaHJlZj0nJyBp
ZD0nVEJfSW1hZ2VPZmYnIHRpdGxlPSdDbG9zZSc+PGltZyBpZD0nVEJfSW1hZ2Un
IHNyYz0nIit1cmwrIicgd2lkdGg9JyIraW1hZ2VXaWR0aCsiJyBoZWlnaHQ9JyIr
aW1hZ2VIZWlnaHQrIicgYWx0PSciK2NhcHRpb24rIicvPjwvYT4iICsgIjxkaXYg
aWQ9J1RCX2NhcHRpb24nPiIrY2FwdGlvbisiPGRpdiBpZD0nVEJfc2Vjb25kTGlu
ZSc+IiArIFRCX2ltYWdlQ291bnQgKyBUQl9QcmV2SFRNTCArIFRCX05leHRIVE1M
ICsgIjwvZGl2PjwvZGl2PjxkaXYgaWQ9J1RCX2Nsb3NlV2luZG93Jz48YSBocmVm
PScjJyBpZD0nVEJfY2xvc2VXaW5kb3dCdXR0b24nIHRpdGxlPSdDbG9zZSc+PGlt
ZyBzcmM9JyIgKyAgdHBfcGF0aFRvSW1hZ2VjbG9zZSArICInIGNsYXNzPSdzaW5i
b3JkZSc+PC9hPjwvZGl2PiIpOyAJCQ0KCQkJDQoJCQkkKCIjVEJfY2xvc2VXaW5k
b3dCdXR0b24iKS5jbGljayh0Yl9yZW1vdmUpOw0KCQkJDQoJCQlpZiAoIShUQl9Q
cmV2SFRNTCA9PT0gIiIpKSB7DQoJCQkJZnVuY3Rpb24gZ29QcmV2KCl7DQoJCQkJ
CWlmKCQoZG9jdW1lbnQpLnVuYmluZCgiY2xpY2siLGdvUHJldikpeyQoZG9jdW1l
bnQpLnVuYmluZCgiY2xpY2siLGdvUHJldik7fQ0KCQkJCQkkKCIjVEJfd2luZG93
IikucmVtb3ZlKCk7DQoJCQkJCSQoImJvZHkiKS5hcHBlbmQoIjxkaXYgaWQ9J1RC
X3dpbmRvdyc+PC9kaXY+Iik7DQoJCQkJCXRiX3Nob3coVEJfUHJldkNhcHRpb24s
IFRCX1ByZXZVUkwsIGltYWdlR3JvdXApOw0KCQkJCQlyZXR1cm4gZmFsc2U7CQ0K
CQkJCX0NCgkJCQkkKCIjVEJfcHJldiIpLmNsaWNrKGdvUHJldik7DQoJCQl9DQoJ
CQkNCgkJCWlmICghKFRCX05leHRIVE1MID09PSAiIikpIHsJCQ0KCQkJCWZ1bmN0
aW9uIGdvTmV4dCgpew0KCQkJCQkkKCIjVEJfd2luZG93IikucmVtb3ZlKCk7DQoJ
CQkJCSQoImJvZHkiKS5hcHBlbmQoIjxkaXYgaWQ9J1RCX3dpbmRvdyc+PC9kaXY+
Iik7DQoJCQkJCXRiX3Nob3coVEJfTmV4dENhcHRpb24sIFRCX05leHRVUkwsIGlt
YWdlR3JvdXApOwkJCQkNCgkJCQkJcmV0dXJuIGZhbHNlOwkNCgkJCQl9DQoJCQkJ
JCgiI1RCX25leHQiKS5jbGljayhnb05leHQpOw0KCQkJCQ0KCQkJfQ0KDQoJCQlk
b2N1bWVudC5vbmtleWRvd24gPSBmdW5jdGlvbihlKXsgCQ0KCQkJCWlmIChlID09
IG51bGwpIHsgLy8gaWUNCgkJCQkJa2V5Y29kZSA9IGV2ZW50LmtleUNvZGU7DQoJ
CQkJfSBlbHNlIHsgLy8gbW96aWxsYQ0KCQkJCQlrZXljb2RlID0gZS53aGljaDsN
CgkJCQl9DQoJCQkJaWYoa2V5Y29kZSA9PSAyNyl7IC8vIGNsb3NlDQoJCQkJCXRi
X3JlbW92ZSgpOw0KCQkJCX0gZWxzZSBpZihrZXljb2RlID09IDE5MCl7IC8vIGRp
c3BsYXkgcHJldmlvdXMgaW1hZ2UNCgkJCQkJaWYoIShUQl9OZXh0SFRNTCA9PSAi
Iikpew0KCQkJCQkJZG9jdW1lbnQub25rZXlkb3duID0gIiI7DQoJCQkJCQlnb05l
eHQoKTsNCgkJCQkJfQ0KCQkJCX0gZWxzZSBpZihrZXljb2RlID09IDE4OCl7IC8v
IGRpc3BsYXkgbmV4dCBpbWFnZQ0KCQkJCQlpZighKFRCX1ByZXZIVE1MID09ICIi
KSl7DQoJCQkJCQlkb2N1bWVudC5vbmtleWRvd24gPSAiIjsNCgkJCQkJCWdvUHJl
digpOw0KCQkJCQl9DQoJCQkJfQkNCgkJCX07DQoJCQkNCgkJCXRiX3Bvc2l0aW9u
KCk7DQoJCQkkKCIjVEJfbG9hZCIpLnJlbW92ZSgpOw0KCQkJJCgiI1RCX0ltYWdl
T2ZmIikuY2xpY2sodGJfcmVtb3ZlKTsNCgkJCSQoIiNUQl93aW5kb3ciKS5jc3Mo
e2Rpc3BsYXk6ImJsb2NrIn0pOyAvL2ZvciBzYWZhcmkgdXNpbmcgY3NzIGluc3Rl
YWQgb2Ygc2hvdw0KCQkJfTsNCgkJCQ0KCQkJaW1nUHJlbG9hZGVyLnNyYyA9IHVy
bDsNCgkJfWVsc2V7Ly9jb2RlIHRvIHNob3cgaHRtbA0KCQkJDQoJCQl2YXIgcXVl
cnlTdHJpbmcgPSB1cmwucmVwbGFjZSgvXlteXD9dK1w/Py8sJycpOw0KCQkJdmFy
IHBhcmFtcyA9IHRiX3BhcnNlUXVlcnkoIHF1ZXJ5U3RyaW5nICk7DQoNCgkJCVRC
X1dJRFRIID0gKHBhcmFtc1snd2lkdGgnXSoxKSArIDMwIHx8IDYzMDsgLy9kZWZh
dWx0cyB0byA2MzAgaWYgbm8gcGFyYW1hdGVycyB3ZXJlIGFkZGVkIHRvIFVSTA0K
CQkJVEJfSEVJR0hUID0gKHBhcmFtc1snaGVpZ2h0J10qMSkgKyA0MCB8fCA0NDA7
IC8vZGVmYXVsdHMgdG8gNDQwIGlmIG5vIHBhcmFtYXRlcnMgd2VyZSBhZGRlZCB0
byBVUkwNCgkJCWFqYXhDb250ZW50VyA9IFRCX1dJRFRIIC0gMzA7DQoJCQlhamF4
Q29udGVudEggPSBUQl9IRUlHSFQgLSA0NTsNCgkJCQ0KCQkJaWYodXJsLmluZGV4
T2YoJ1RCX2lmcmFtZScpICE9IC0xKXsvLyBlaXRoZXIgaWZyYW1lIG9yIGFqYXgg
d2luZG93CQkNCgkJCQkJdXJsTm9RdWVyeSA9IHVybC5zcGxpdCgnVEJfJyk7DQoJ
CQkJCSQoIiNUQl9pZnJhbWVDb250ZW50IikucmVtb3ZlKCk7DQoJCQkJCWlmKHBh
cmFtc1snbW9kYWwnXSAhPSAidHJ1ZSIpey8vaWZyYW1lIG5vIG1vZGFsDQoJCQkJ
CQkkKCIjVEJfd2luZG93IikuYXBwZW5kKCI8ZGl2IGlkPSdUQl90aXRsZSc+PGRp
diBpZD0nVEJfYWpheFdpbmRvd1RpdGxlJz4iK2NhcHRpb24rIjwvZGl2PjxkaXYg
aWQ9J1RCX2Nsb3NlQWpheFdpbmRvdyc+PGEgaHJlZj0nIycgaWQ9J1RCX2Nsb3Nl
V2luZG93QnV0dG9uJyB0aXRsZT0nQ2xvc2UnPjxpbWcgc3JjPSciICsgIHRwX3Bh
dGhUb0ltYWdlY2xvc2UgKyAiJyBjbGFzcz0nc2luYm9yZGUnPjwvYT48L2Rpdj48
L2Rpdj48aWZyYW1lIGZyYW1lYm9yZGVyPScwJyBoc3BhY2U9JzAnIHNyYz0nIit1
cmxOb1F1ZXJ5WzBdKyInIGlkPSdUQl9pZnJhbWVDb250ZW50JyBuYW1lPSdUQl9p
ZnJhbWVDb250ZW50IitNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqMTAwMCkrIicg
b25sb2FkPSd0Yl9zaG93SWZyYW1lKCknIHN0eWxlPSd3aWR0aDoiKyhhamF4Q29u
dGVudFcgKyAyOSkrInB4O2hlaWdodDoiKyhhamF4Q29udGVudEggKyAxNykrInB4
OycgPiA8L2lmcmFtZT4iKTsNCgkJCQkJfWVsc2V7Ly9pZnJhbWUgbW9kYWwNCgkJ
CQkJJCgiI1RCX292ZXJsYXkiKS51bmJpbmQoKTsNCgkJCQkJCSQoIiNUQl93aW5k
b3ciKS5hcHBlbmQoIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIGhzcGFjZT0nMCcg
c3JjPSciK3VybE5vUXVlcnlbMF0rIicgaWQ9J1RCX2lmcmFtZUNvbnRlbnQnIG5h
bWU9J1RCX2lmcmFtZUNvbnRlbnQiK01hdGgucm91bmQoTWF0aC5yYW5kb20oKSox
MDAwKSsiJyBvbmxvYWQ9J3RiX3Nob3dJZnJhbWUoKScgc3R5bGU9J3dpZHRoOiIr
KGFqYXhDb250ZW50VyArIDI5KSsicHg7aGVpZ2h0OiIrKGFqYXhDb250ZW50SCAr
IDE3KSsicHg7Jz4gPC9pZnJhbWU+Iik7DQoJCQkJCX0NCgkJCX1lbHNley8vIG5v
dCBhbiBpZnJhbWUsIGFqYXgNCgkJCQkJaWYoJCgiI1RCX3dpbmRvdyIpLmNzcygi
ZGlzcGxheSIpICE9ICJibG9jayIpew0KCQkJCQkJaWYocGFyYW1zWydtb2RhbCdd
ICE9ICJ0cnVlIil7Ly9hamF4IG5vIG1vZGFsDQoJCQkJCQkkKCIjVEJfd2luZG93
IikuYXBwZW5kKCI8ZGl2IGlkPSdUQl90aXRsZSc+PGRpdiBpZD0nVEJfYWpheFdp
bmRvd1RpdGxlJz4iK2NhcHRpb24rIjwvZGl2PjxkaXYgaWQ9J1RCX2Nsb3NlQWph
eFdpbmRvdyc+PGEgaHJlZj0nIycgaWQ9J1RCX2Nsb3NlV2luZG93QnV0dG9uJz48
aW1nIHNyYz0nIiArICB0cF9wYXRoVG9JbWFnZWNsb3NlICsgIicgY2xhc3M9J3Np
bmJvcmRlJz48L2E+PC9kaXY+PC9kaXY+PGRpdiBpZD0nVEJfYWpheENvbnRlbnQn
IHN0eWxlPSd3aWR0aDoiK2FqYXhDb250ZW50VysicHg7aGVpZ2h0OiIrYWpheENv
bnRlbnRIKyJweCc+PC9kaXY+Iik7DQoJCQkJCQl9ZWxzZXsvL2FqYXggbW9kYWwN
CgkJCQkJCSQoIiNUQl9vdmVybGF5IikudW5iaW5kKCk7DQoJCQkJCQkkKCIjVEJf
d2luZG93IikuYXBwZW5kKCI8ZGl2IGlkPSdUQl9hamF4Q29udGVudCcgY2xhc3M9
J1RCX21vZGFsJyBzdHlsZT0nd2lkdGg6IithamF4Q29udGVudFcrInB4O2hlaWdo
dDoiK2FqYXhDb250ZW50SCsicHg7Jz48L2Rpdj4iKTsJDQoJCQkJCQl9DQoJCQkJ
CX1lbHNley8vdGhpcyBtZWFucyB0aGUgd2luZG93IGlzIGFscmVhZHkgdXAsIHdl
IGFyZSBqdXN0IGxvYWRpbmcgbmV3IGNvbnRlbnQgdmlhIGFqYXgNCgkJCQkJCSQo
IiNUQl9hamF4Q29udGVudCIpWzBdLnN0eWxlLndpZHRoID0gYWpheENvbnRlbnRX
ICsicHgiOw0KCQkJCQkJJCgiI1RCX2FqYXhDb250ZW50IilbMF0uc3R5bGUuaGVp
Z2h0ID0gYWpheENvbnRlbnRIICsicHgiOw0KCQkJCQkJJCgiI1RCX2FqYXhDb250
ZW50IilbMF0uc2Nyb2xsVG9wID0gMDsNCgkJCQkJCSQoIiNUQl9hamF4V2luZG93
VGl0bGUiKS5odG1sKGNhcHRpb24pOw0KCQkJCQl9DQoJCQl9DQoJCQkJCQ0KCQkJ
JCgiI1RCX2Nsb3NlV2luZG93QnV0dG9uIikuY2xpY2sodGJfcmVtb3ZlKTsNCgkJ
CQ0KCQkJCWlmKHVybC5pbmRleE9mKCdUQl9pbmxpbmUnKSAhPSAtMSl7CQ0KCQkJ
CQkkKCIjVEJfYWpheENvbnRlbnQiKS5hcHBlbmQoJCgnIycgKyBwYXJhbXNbJ2lu
bGluZUlkJ10pLmNoaWxkcmVuKCkpOw0KCQkJCQkkKCIjVEJfd2luZG93IikudW5s
b2FkKGZ1bmN0aW9uICgpIHsNCgkJCQkJCSQoJyMnICsgcGFyYW1zWydpbmxpbmVJ
ZCddKS5hcHBlbmQoICQoIiNUQl9hamF4Q29udGVudCIpLmNoaWxkcmVuKCkgKTsg
Ly8gbW92ZSBlbGVtZW50cyBiYWNrIHdoZW4geW91J3JlIGZpbmlzaGVkDQoJCQkJ
CX0pOw0KCQkJCQl0Yl9wb3NpdGlvbigpOw0KCQkJCQkkKCIjVEJfbG9hZCIpLnJl
bW92ZSgpOw0KCQkJCQkkKCIjVEJfd2luZG93IikuY3NzKHtkaXNwbGF5OiJibG9j
ayJ9KTsgDQoJCQkJfWVsc2UgaWYodXJsLmluZGV4T2YoJ1RCX2lmcmFtZScpICE9
IC0xKXsNCgkJCQkJdGJfcG9zaXRpb24oKTsNCgkJCQkJaWYoJC5icm93c2VyLnNh
ZmFyaSl7Ly9zYWZhcmkgbmVlZHMgaGVscCBiZWNhdXNlIGl0IHdpbGwgbm90IGZp
cmUgaWZyYW1lIG9ubG9hZA0KCQkJCQkJJCgiI1RCX2xvYWQiKS5yZW1vdmUoKTsN
CgkJCQkJCSQoIiNUQl93aW5kb3ciKS5jc3Moe2Rpc3BsYXk6ImJsb2NrIn0pOw0K
CQkJCQl9DQoJCQkJfWVsc2V7DQoJCQkJCSQoIiNUQl9hamF4Q29udGVudCIpLmxv
YWQodXJsICs9ICImcmFuZG9tPSIgKyAobmV3IERhdGUoKS5nZXRUaW1lKCkpLGZ1
bmN0aW9uKCl7Ly90byBkbyBhIHBvc3QgY2hhbmdlIHRoaXMgbG9hZCBtZXRob2QN
CgkJCQkJCXRiX3Bvc2l0aW9uKCk7DQoJCQkJCQkkKCIjVEJfbG9hZCIpLnJlbW92
ZSgpOw0KCQkJCQkJdGJfaW5pdCgiI1RCX2FqYXhDb250ZW50IGEudGhpY2tib3gi
KTsNCgkJCQkJCSQoIiNUQl93aW5kb3ciKS5jc3Moe2Rpc3BsYXk6ImJsb2NrIn0p
Ow0KCQkJCQl9KTsNCgkJCQl9DQoJCQkNCgkJfQ0KDQoJCWlmKCFwYXJhbXNbJ21v
ZGFsJ10pew0KCQkJZG9jdW1lbnQub25rZXl1cCA9IGZ1bmN0aW9uKGUpeyAJDQoJ
CQkJaWYgKGUgPT0gbnVsbCkgeyAvLyBpZQ0KCQkJCQlrZXljb2RlID0gZXZlbnQu
a2V5Q29kZTsNCgkJCQl9IGVsc2UgeyAvLyBtb3ppbGxhDQoJCQkJCWtleWNvZGUg
PSBlLndoaWNoOw0KCQkJCX0NCgkJCQlpZihrZXljb2RlID09IDI3KXsgLy8gY2xv
c2UNCgkJCQkJdGJfcmVtb3ZlKCk7DQoJCQkJfQkNCgkJCX07DQoJCX0NCgkJDQoJ
fSBjYXRjaChlKSB7DQoJCS8vbm90aGluZyBoZXJlDQoJfQ0KfQ0KDQovL2hlbHBl
ciBmdW5jdGlvbnMgYmVsb3cNCmZ1bmN0aW9uIHRiX3Nob3dJZnJhbWUoKXsNCgkk
KCIjVEJfbG9hZCIpLnJlbW92ZSgpOw0KCSQoIiNUQl93aW5kb3ciKS5jc3Moe2Rp
c3BsYXk6ImJsb2NrIn0pOw0KfQ0KDQpmdW5jdGlvbiB0Yl9yZW1vdmUoKSB7DQog
CSQoIiNUQl9pbWFnZU9mZiIpLnVuYmluZCgiY2xpY2siKTsNCgkkKCIjVEJfY2xv
c2VXaW5kb3dCdXR0b24iKS51bmJpbmQoImNsaWNrIik7DQoJJCgiI1RCX3dpbmRv
dyIpLmZhZGVPdXQoImZhc3QiLGZ1bmN0aW9uKCl7JCgnI1RCX3dpbmRvdywjVEJf
b3ZlcmxheSwjVEJfSGlkZVNlbGVjdCcpLnRyaWdnZXIoInVubG9hZCIpLnVuYmlu
ZCgpLnJlbW92ZSgpO30pOw0KCSQoIiNUQl9sb2FkIikucmVtb3ZlKCk7DQoJaWYg
KHR5cGVvZiBkb2N1bWVudC5ib2R5LnN0eWxlLm1heEhlaWdodCA9PSAidW5kZWZp
bmVkIikgey8vaWYgSUUgNg0KCQkkKCJib2R5IiwiaHRtbCIpLmNzcyh7aGVpZ2h0
OiAiYXV0byIsIHdpZHRoOiAiYXV0byJ9KTsNCgkJJCgiaHRtbCIpLmNzcygib3Zl
cmZsb3ciLCIiKTsNCgl9DQoJZG9jdW1lbnQub25rZXlkb3duID0gIiI7DQoJZG9j
dW1lbnQub25rZXl1cCA9ICIiOw0KCXJldHVybiBmYWxzZTsNCn0NCg0KZnVuY3Rp
b24gdGJfcG9zaXRpb24oKSB7DQokKCIjVEJfd2luZG93IikuY3NzKHttYXJnaW5M
ZWZ0OiAnLScgKyBwYXJzZUludCgoVEJfV0lEVEggLyAyKSwxMCkgKyAncHgnLCB3
aWR0aDogVEJfV0lEVEggKyAncHgnfSk7DQoJaWYgKCAhKGpRdWVyeS5icm93c2Vy
Lm1zaWUgJiYgalF1ZXJ5LmJyb3dzZXIudmVyc2lvbiA8IDcpKSB7IC8vIHRha2Ug
YXdheSBJRTYNCgkJJCgiI1RCX3dpbmRvdyIpLmNzcyh7bWFyZ2luVG9wOiAnLScg
KyBwYXJzZUludCgoVEJfSEVJR0hUIC8gMiksMTApICsgJ3B4J30pOw0KCX0NCn0N
Cg0KZnVuY3Rpb24gdGJfcGFyc2VRdWVyeSAoIHF1ZXJ5ICkgew0KICAgdmFyIFBh
cmFtcyA9IHt9Ow0KICAgaWYgKCAhIHF1ZXJ5ICkge3JldHVybiBQYXJhbXM7fS8v
IHJldHVybiBlbXB0eSBvYmplY3QNCiAgIHZhciBQYWlycyA9IHF1ZXJ5LnNwbGl0
KC9bOyZdLyk7DQogICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBQYWlycy5sZW5ndGg7
IGkrKyApIHsNCiAgICAgIHZhciBLZXlWYWwgPSBQYWlyc1tpXS5zcGxpdCgnPScp
Ow0KICAgICAgaWYgKCAhIEtleVZhbCB8fCBLZXlWYWwubGVuZ3RoICE9IDIgKSB7
Y29udGludWU7fQ0KICAgICAgdmFyIGtleSA9IHVuZXNjYXBlKCBLZXlWYWxbMF0g
KTsNCiAgICAgIHZhciB2YWwgPSB1bmVzY2FwZSggS2V5VmFsWzFdICk7DQogICAg
ICB2YWwgPSB2YWwucmVwbGFjZSgvXCsvZywgJyAnKTsNCiAgICAgIFBhcmFtc1tr
ZXldID0gdmFsOw0KICAgfQ0KICAgcmV0dXJuIFBhcmFtczsNCn0NCg0KZnVuY3Rp
b24gdGJfZ2V0UGFnZVNpemUoKXsNCgl2YXIgZGUgPSBkb2N1bWVudC5kb2N1bWVu
dEVsZW1lbnQ7DQoJdmFyIHcgPSB3aW5kb3cuaW5uZXJXaWR0aCB8fCBzZWxmLmlu
bmVyV2lkdGggfHwgKGRlJiZkZS5jbGllbnRXaWR0aCkgfHwgZG9jdW1lbnQuYm9k
eS5jbGllbnRXaWR0aDsNCgl2YXIgaCA9IHdpbmRvdy5pbm5lckhlaWdodCB8fCBz
ZWxmLmlubmVySGVpZ2h0IHx8IChkZSYmZGUuY2xpZW50SGVpZ2h0KSB8fCBkb2N1
bWVudC5ib2R5LmNsaWVudEhlaWdodDsNCglhcnJheVBhZ2VTaXplID0gW3csaF07
DQoJcmV0dXJuIGFycmF5UGFnZVNpemU7DQp9DQoNCmZ1bmN0aW9uIHRiX2RldGVj
dE1hY1hGRigpIHsNCiAgdmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdl
bnQudG9Mb3dlckNhc2UoKTsNCiAgaWYgKHVzZXJBZ2VudC5pbmRleE9mKCdtYWMn
KSAhPSAtMSAmJiB1c2VyQWdlbnQuaW5kZXhPZignZmlyZWZveCcpIT0tMSkgew0K
ICAgIHJldHVybiB0cnVlOw0KICB9DQp9DQoNCg0K
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=general.js
Content-Type: application/javascript; name=general.js
Content-Location: http://www.ine.es/menuapp/js/general.js
Content-Transfer-Encoding: Base64
ZnVuY3Rpb24gSXMgKCkNCnsgICAvLyBjb252ZXJ0IGFsbCBjaGFyYWN0ZXJzIHRv
IGxvd2VyY2FzZSB0byBzaW1wbGlmeSB0ZXN0aW5nDQogICAgdmFyIGFndD1uYXZp
Z2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7DQoNCiAgICAvLyAtLS0gQlJP
V1NFUiBWRVJTSU9OIC0tLQ0KICAgIHRoaXMubWFqb3IgPSBwYXJzZUludChuYXZp
Z2F0b3IuYXBwVmVyc2lvbik7DQogICAgdGhpcy5taW5vciA9IHBhcnNlRmxvYXQo
bmF2aWdhdG9yLmFwcFZlcnNpb24pOw0KDQogICAgdGhpcy5uYXYgID0gKChhZ3Qu
aW5kZXhPZignbW96aWxsYScpIT0tMSkgJiYgKChhZ3QuaW5kZXhPZignc3Bvb2Zl
cicpPT0tMSkgJiYgKGFndC5pbmRleE9mKCdjb21wYXRpYmxlJykgPT0gLTEpKSk7
DQogICAgdGhpcy5uYXYyID0gKHRoaXMubmF2ICYmICh0aGlzLm1ham9yID09IDIp
KTsNCiAgICB0aGlzLm5hdjMgPSAodGhpcy5uYXYgJiYgKHRoaXMubWFqb3IgPT0g
MykpOw0KICAgIHRoaXMubmF2NCA9ICh0aGlzLm5hdiAmJiAodGhpcy5tYWpvciA9
PSA0KSk7DQoJdGhpcy5uYXY1ID0gKHRoaXMuYj09Im5zIiAmJiB0aGlzLnY9PTUp
DQogDQoNCiAgICB0aGlzLmllICAgPSAoYWd0LmluZGV4T2YoIm1zaWUiKSAhPSAt
MSk7DQogICAgdGhpcy5pZTMgID0gKHRoaXMuaWUgJiYgKHRoaXMubWFqb3IgPT0g
MikpOw0KICAgIHRoaXMuaWU0ICA9ICh0aGlzLmllICYmICh0aGlzLm1ham9yID09
IDQpKTsNCiAgICB0aGlzLmllNSA9IChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4
T2YoJ01TSUUgNScpPjApOw0KDQogICAgdGhpcy5vcGVyYSA9IChhZ3QuaW5kZXhP
Zigib3BlcmEiKSAhPSAtMSk7DQogICAgIA0KICAgIHRoaXMuTk4gPQl0aGlzLm5h
diAmJiAodGhpcy5tYWpvciA+PSA0KTsNCiAgICB0aGlzLklFICA9IHRoaXMuaWUg
ICYmICh0aGlzLm1ham9yID49IDQpOw0KCWlmICh0aGlzLmllNSkgdGhpcy52ID0g
NQ0KICAgIHRoaXMubWluID0gKHRoaXMuTk58fHRoaXMuSUUpDQoNCn0NCmRvY3Vt
ZW50LndyaXRlKCI8U0NSIiArICJJUFQgdHlwZT0ndGV4dCIgKyAiL2phdmEiICsg
InNjciIgKyAiaXB0JyBTUkM9JyIgKyBITV9EaXJKcysgImdpbmhzaWhwLmpzJz48
XC9TQ1IiICsgIklQVD4iKTsNCnZhciBpcyA9IG5ldyBJcygpOw0KDQoNCmZ1bmN0
aW9uIGZpbmRPYmoobiwgZCkgeyANCiAgdmFyIHAsaSx4OyAgDQogIGlmKCFkKSBk
PWRvY3VtZW50OyANCiAgaWYoKHA9bi5pbmRleE9mKCI/IikpPjAmJnBhcmVudC5m
cmFtZXMubGVuZ3RoKSANCiAgew0KICAgIGQ9cGFyZW50LmZyYW1lc1tuLnN1YnN0
cmluZyhwKzEpXS5kb2N1bWVudDsgbj1uLnN1YnN0cmluZygwLHApO30NCiAgaWYo
ISh4PWRbbl0pJiZkLmFsbCkgeD1kLmFsbFtuXTsgDQogIGZvciAoaT0wOyF4JiZp
PGQuZm9ybXMubGVuZ3RoO2krKykgeD1kLmZvcm1zW2ldW25dOw0KICBmb3IoaT0w
OyF4JiZkLmxheWVycyYmaTxkLmxheWVycy5sZW5ndGg7aSsrKSB4PWZpbmRPYmoo
bixkLmxheWVyc1tpXS5kb2N1bWVudCk7IHJldHVybiB4Ow0KfQ0KaWYgKE1lbnVf
VGl0dWxvRmF2b3JpdG9zPT1udWxsKQ0KCXZhciBNZW51X1RpdHVsb0Zhdm9yaXRv
cz0iSU5FIjsNCgkgDQppZiAoTWVudV9VcmxGYXZvcml0b3M9PW51bGwpDQoJdmFy
IE1lbnVfVXJsRmF2b3JpdG9zPSJodHRwOi8vd3d3LmluZS5lcyI7DQpmdW5jdGlv
biBBZ3JlZ2FyRmF2b3JpdG9zKHRpdHVsbyx1cmwpew0KIHRpdGxlID10aXR1bG87
IA0KIHVybCA9IHVybDsNCiAgdHJ5ew0KCWlmICh3aW5kb3cuc2lkZWJhcikgeyAv
LyBNb3ppbGxhIEZpcmVmb3ggQm9va21hcmsNCgkJd2luZG93LnNpZGViYXIuYWRk
UGFuZWwodGl0bGUsIHVybCwiIik7DQoJfSBlbHNlIGlmKCB3aW5kb3cuZXh0ZXJu
YWwgKSB7IC8vIElFIEZhdm9yaXRlDQoJCXdpbmRvdy5leHRlcm5hbC5BZGRGYXZv
cml0ZSggdXJsLCB0aXRsZSk7IA0KCX0gZWxzZSBpZih3aW5kb3cub3BlcmEgJiYg
d2luZG93LnByaW50KSB7IC8vIE9wZXJhIEhvdGxpc3QNCgkJcmV0dXJuIHRydWU7
IH0NCiAgfWNhdGNoKGUpIHsNCg0KICB9CQ0KfQ0KDQpmdW5jdGlvbiBNZW5zYWpl
IChmaWNoZXJvLHNjcm9sbCxhbmNobyxhbHRvKSB7DQoNCiAgdmFyIHc9YW5jaG87
DQogIHZhciBoPWFsdG87DQogIHZhciB0PShzY3JlZW4uaGVpZ2h0LWgpLzINCiAg
dmFyIGw9KHNjcmVlbi53aWR0aC13KS8yDQogIGlmIChzY3JvbGw9PTApew0KICAg
IHByb3A9J3Rvb2xiYXI9bm8sbG9jYXRpb249bm8sZGlyZWN0b3JpZXM9bm8sc3Rh
dHVzPW5vLG1lbnViYXI9bm8sc2Nyb2xsYmFycz1ubyxyZXNpemFibGU9eWVzLHRv
cD0nK3QrJyxsZWZ0PScrbCsnLHdpZHRoPScrdysnLGhlaWdodD0nK2gNCiAgICBt
c2dXaW5kb3c9d2luZG93Lm9wZW4oZmljaGVybywnbGVnYWwnLHByb3ApDQogIH0g
ZWxzZSB7DQogICAgcHJvcD0ndG9vbGJhcj1ubyxsb2NhdGlvbj1ubyxkaXJlY3Rv
cmllcz1ubyxzdGF0dXM9bm8sbWVudWJhcj1ubyxzY3JvbGxiYXJzPXllcyxyZXNp
emFibGU9eWVzLHRvcD0nK3QrJyxsZWZ0PScrbCsnLHdpZHRoPScrdysnLGhlaWdo
dD0nK2gNCiAgICBtc2dXaW5kb3c9d2luZG93Lm9wZW4oZmljaGVybywnbGVnYWwn
LHByb3ApDQogIH0NCg0KfQ0KDQpmdW5jdGlvbiBjaGFuZ2VCYWNrZ3JvdW5kQ29s
b3Iob2JqLGNvbG9yKXsNCglkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvYmopLnN0
eWxlLmJhY2tncm91bmQ9Y29sb3I7DQp9DQoNCmZ1bmN0aW9uIGNoYW5nZUJhY2tn
cm91bmRDb2xvck9iaihvYmosY29sb3Ipew0KCW9iai5zdHlsZS5iYWNrZ3JvdW5k
PWNvbG9yOw0KfQ0KDQpmdW5jdGlvbiBjaGFuZ2VDb2xvcihvYmosY29sb3Ipew0K
CWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9iaikuc3R5bGUuY29sb3I9Y29sb3I7
DQp9DQoNCmZ1bmN0aW9uIGNoYW5nZUNvbG9yT2JqKG9iaixjb2xvcil7DQoJb2Jq
LnN0eWxlLmNvbG9yPWNvbG9yOw0KfQ0KDQovL05vcyBkZXZ1ZWx2ZSBsYSBwb3Np
Y2lvbiBYWSBkZWwgc2Nyb2xsDQpmdW5jdGlvbiBnZXRTY3JvbGxYWSgpIHsNCiAg
dmFyIHNjck9mWCA9IDAsIHNjck9mWSA9IDA7DQogIGlmKCB0eXBlb2YoIHdpbmRv
dy5wYWdlWU9mZnNldCApID09ICdudW1iZXInICkgew0KICAgIC8vTmV0c2NhcGUg
Y29tcGxpYW50DQogICAgc2NyT2ZZID0gd2luZG93LnBhZ2VZT2Zmc2V0Ow0KICAg
IHNjck9mWCA9IHdpbmRvdy5wYWdlWE9mZnNldDsNCiAgfSBlbHNlIGlmKCBkb2N1
bWVudC5ib2R5ICYmICggZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0IHx8IGRvY3Vt
ZW50LmJvZHkuc2Nyb2xsVG9wICkgKSB7DQogICAgLy9ET00gY29tcGxpYW50DQog
ICAgc2NyT2ZZID0gZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7DQogICAgc2NyT2ZY
ID0gZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0Ow0KICB9IGVsc2UgaWYoIGRvY3Vt
ZW50LmRvY3VtZW50RWxlbWVudCAmJiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVu
dC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxU
b3AgKSApIHsNCiAgICAvL0lFNiBzdGFuZGFyZHMgY29tcGxpYW50IG1vZGUNCiAg
ICBzY3JPZlkgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wOw0K
ICAgIHNjck9mWCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0
Ow0KICB9DQogIHJldHVybiBbIHNjck9mWCwgc2NyT2ZZIF07DQp9DQo=
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=cookie.js
Content-Type: application/javascript; name=cookie.js
Content-Location: http://www.ine.es/menuapp/js/cookie.js
Content-Transfer-Encoding: Base64
dmFyIENvb2tpZU5hbWU9IklORV9BQ0NFU0lCSUxJREFEIjsNCnZhciBDb29raWVO
dW1EYXlzPTM2NTsNCg0KZnVuY3Rpb24gY3JlYXRlQ29va2llKG5hbWUsdmFsdWUs
ZGF5cykgew0KICBpZiAoZGF5cykgew0KICAgIHZhciBkYXRlID0gbmV3IERhdGUo
KTsNCiAgICBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkrKGRheXMqMjQqNjAq
NjAqMTAwMCkpOw0KICAgIHZhciBleHBpcmVzID0gIjsgZXhwaXJlcz0iK2RhdGUu
dG9HTVRTdHJpbmcoKTsNCiAgfQ0KICBlbHNlIGV4cGlyZXMgPSAiIjsNCiAgZG9j
dW1lbnQuY29va2llID0gbmFtZSsiPSIrdmFsdWUrZXhwaXJlcysiOyBwYXRoPS8i
Ow0KfQ0KDQpmdW5jdGlvbiByZWFkQ29va2llKG5hbWUpIHsNCiAgdmFyIG5hbWVF
USA9IG5hbWUgKyAiPSI7DQogIHZhciBjYSA9IGRvY3VtZW50LmNvb2tpZS5zcGxp
dCgnOycpOw0KDQogIGZvcih2YXIgaT0wO2kgPCBjYS5sZW5ndGg7aSsrKSB7DQog
ICAgdmFyIGMgPSBjYVtpXTsNCiAgICB3aGlsZSAoYy5jaGFyQXQoMCk9PScgJykg
YyA9IGMuc3Vic3RyaW5nKDEsYy5sZW5ndGgpOw0KICAgIGlmIChjLmluZGV4T2Yo
bmFtZUVRKSA9PSAwKSByZXR1cm4gYy5zdWJzdHJpbmcobmFtZUVRLmxlbmd0aCxj
Lmxlbmd0aCk7DQogIH0NCiAgcmV0dXJuIG51bGw7DQp9
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=images.js
Content-Type: application/javascript; name=images.js
Content-Location: http://www.ine.es/menuapp/js/images.js
Content-Transfer-Encoding: Base64
ZnVuY3Rpb24gcHJlbG9hZChpbWdPYmosaW1nU3JjKSB7DQoJaWYgKGRvY3VtZW50
LmltYWdlcykgew0KCQlldmFsKGltZ09iaisnID0gbmV3IEltYWdlKCknKQ0KCQll
dmFsKGltZ09iaisnLnNyYyA9ICInK2ltZ1NyYysnIicpDQoJfQ0KfQ0KDQpmdW5j
dGlvbiBjaGFuZ2VJbWFnZShsYXllcixpbWdOYW1lLGltZ09iaikgew0KCWlmIChk
b2N1bWVudC5pbWFnZXMpIHsNCgkJaWYgKGRvY3VtZW50LmxheWVycyAmJiBsYXll
ciE9bnVsbCkgew0KCQkJZXZhbCgndmFyIHc9ZG9jdW1lbnQuJytsYXllcisnLmRv
Y3VtZW50LmltYWdlc1siJytpbWdOYW1lKyciXS53aWR0aCcpDQoJCQlldmFsKCd2
YXIgaD1kb2N1bWVudC4nK2xheWVyKycuZG9jdW1lbnQuaW1hZ2VzWyInK2ltZ05h
bWUrJyJdLmhlaWdodCcpDQoJCQlldmFsKCdkb2N1bWVudC4nK2xheWVyKycuZG9j
dW1lbnQuaW1hZ2VzWyInK2ltZ05hbWUrJyJdLnNyYyA9ICcraW1nT2JqKycuc3Jj
JykNCgkJCWV2YWwoJ2RvY3VtZW50LicrbGF5ZXIrJy5kb2N1bWVudC5pbWFnZXNb
IicraW1nTmFtZSsnIl0ud2lkdGggPSB3JykNCgkJCWV2YWwoJ2RvY3VtZW50Licr
bGF5ZXIrJy5kb2N1bWVudC5pbWFnZXNbIicraW1nTmFtZSsnIl0uaGVpZ2h0ID0g
aCcpDQoJCQl9DQoJCWVsc2Ugew0KCQkJdmFyIHc9ZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoaW1nTmFtZSkud2lkdGg7DQoJCQl2YXIgaD1kb2N1bWVudC5nZXRFbGVt
ZW50QnlJZChpbWdOYW1lKS5oZWlnaHQ7CQ0KCQkJZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoaW1nTmFtZSkuc3JjID0gZXZhbChpbWdPYmorIi5zcmMiKTsNCgkJCWRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKGltZ05hbWUpLndpZHRoID0gdzsNCgkJCWRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKGltZ05hbWUpLmhlaWdodCA9IGg7DQoJCQl9
DQoJfQ0KfQ0KDQpmdW5jdGlvbiByZW1vdmVJbWFnZShsYXllcixpbWdOYW1lKXsN
CglpZiAoZG9jdW1lbnQuaW1hZ2VzKSB7DQoJCWlmIChkb2N1bWVudC5sYXllcnMg
JiYgbGF5ZXIhPW51bGwpIA0KCQkJZXZhbCgnZG9jdW1lbnQuJytsYXllcisnLmRv
Y3VtZW50LmltYWdlc1siJytpbWdOYW1lKyciXS53aWR0aCA9IDAnKTsNCgkJZWxz
ZSBkb2N1bWVudC5pbWFnZXNbaW1nTmFtZV0ud2lkdGggPSAwOw0KCX0NCn0NCg0K
ZnVuY3Rpb24gY2FtYmlhSW1hZ2VuKGltZ05hbWUsaW1nT2JqKXsNCgljaGFuZ2VJ
bWFnZShudWxsLGltZ05hbWUsaW1nT2JqKTsNCn0NCg0KZnVuY3Rpb24gY2FtYmlh
SW1hZ2VuVGFibGUoaW1nTmFtZSxpbWdPYmosaGFuZCl7DQoJaWYgKGhhbmQ9PTEp
DQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGltZ05hbWUpLnN0eWxlLmN1cnNv
cj0naGFuZCcNCgllbHNlIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGltZ05hbWUp
LnN0eWxlLmN1cnNvcj0nYXV0bycNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
aW1nTmFtZSkuc3R5bGUuYmFja2dyb3VuZCA9ICJ1cmwoIiArIGV2YWwoaW1nT2Jq
ICsgIi5zcmMiKSArIikiOwkNCn0gDQoNCmZ1bmN0aW9uIGVsaW1pbmFJbWFnZW4o
aW1nTmFtZSl7DQoJcmVtb3ZlSW1hZ2UobnVsbCxpbWdOYW1lKTsNCn0NCg0KZnVu
Y3Rpb24gbW9zdHJhckxheWVyKGxheWVyTmFtZSkgew0KCWlmIChkb2N1bWVudC5s
YXllcnMpIA0KICAgICAgICAgICAgbGF5ZXJOYW1lLnZpc2liaWxpdHk9InZpc2li
bGUiOyAgICAgDQoJZWxzZSANCiAgICAgICAgICAgIGxheWVyTmFtZS52aXNpYmls
aXR5PSJ2aXNpYmxlIjsgIA0KICB9DQoNCmZ1bmN0aW9uIG9jdWx0YXJMYXllcihs
YXllck5hbWUpew0KCWlmIChkb2N1bWVudC5sYXllcnMpIA0KICAgICAgICAgICAg
bGF5ZXJOYW1lLnZpc2liaWxpdHkgPSJoaWRlIjsgDQoJZWxzZSANCiAgICAgICAg
ICAgIGxheWVyTmFtZS52aXNpYmlsaXR5ID0gImhpZGRlbiINCiAgICANCn0NCg==
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=loading.js
Content-Type: application/javascript; name=loading.js
Content-Location: http://www.ine.es/menuapp/js/loading.js
Content-Transfer-Encoding: Base64
Ly9wcm9jZWRlbW9zIGEgcXVlIHNlIG11ZXZhIGxhIGNhcGEgY3VhbmRvIHNlIG11
ZXZlIGVsIHNjcm9sbA0KDQpmdW5jdGlvbiBNb3ZlTG9hZGluZygpIHsNCglpZiAo
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkRJVmxvYWRpbmciKSE9bnVsbCl7DQoJ
CXZhciB2YWxvclRvcD1NYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQu
c2Nyb2xsVG9wLGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKSArInB4IjsNCgkJdmFy
IHZhbG9yTGVmdD1NYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Ny
b2xsTGVmdCxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQpICsicHgiOw0KCQlkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiRElWbG9hZGluZyIpLnN0eWxlLnRvcD12YWxv
clRvcDsgCQkNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkRJVmxvYWRpbmci
KS5zdHlsZS5sZWZ0PXZhbG9yTGVmdDsgCQ0KCQlpZiAoZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImlmcmFtZWxvYWRpbmciKSE9bnVsbCl7CQ0KCQkJZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImlmcmFtZWxvYWRpbmciKS5zdHlsZS5sZWZ0PXZhbG9y
TGVmdDsJCQ0KCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlmcmFtZWxvYWRp
bmciKS5zdHlsZS50b3A9dmFsb3JUb3A7CQ0KCQkJfQ0KICAgfQ0KfQ0KDQpNZW51
TG9hZF9QcmV2U2Nyb2xsID0gKHdpbmRvdy5vbnNjcm9sbCkgPyB3aW5kb3cub25z
Y3JvbGwgOiAgbmV3IEZ1bmN0aW9uOw0KDQp3aW5kb3cub25zY3JvbGwgID0gZnVu
Y3Rpb24oKXsNCglzZXRUaW1lb3V0KCJNb3ZlTG9hZGluZygpIiwxMCk7DQoJTWVu
dUxvYWRfUHJldlNjcm9sbCgpOw0KfTsNCg0KZnVuY3Rpb24gb2N1bHRhckxvYWRp
bmcoKXsNCglzZXRUaW1lb3V0KCJvY3VsdGFyTG9hZGluZ0luc3RhbnQoKSIsMSk7
DQp9DQoNCmZ1bmN0aW9uIG9jdWx0YXJMb2FkaW5nSW5zdGFudCgpew0KaWYgKE1l
bnVfVGlwb0xvYWRpbmc9PTAgfHwgTWVudV9UaXBvTG9hZGluZz09MSkNCglpZiAo
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmciKSE9bnVsbCkNCgkJZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmciKS5zdHlsZS52aXNpYmlsaXR5
PSdoaWRkZW4nOw0KaWYgKE1lbnVfVGlwb0xvYWRpbmc9PTAgfHwgTWVudV9UaXBv
TG9hZGluZz09Mil7DQoJaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJESVZs
b2FkaW5nIikhPW51bGwpDQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJESVZs
b2FkaW5nIikuc3R5bGUuZGlzcGxheT0nbm9uZSc7DQoJaWYgKGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJpZnJhbWVsb2FkaW5nIikhPW51bGwpDQoJCWRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJpZnJhbWVsb2FkaW5nIikuc3R5bGUuZGlzcGxheT0n
bm9uZSc7CQkNCglpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmci
KSE9bnVsbCkNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmciKS5z
dHlsZS52aXNpYmlsaXR5PSdoaWRkZW4nOwkJDQp9DQp9DQoNCmZ1bmN0aW9uIG1v
c3RyYXJMb2FkaW5nKHRpcG8pew0KICAgIHZhciBkZSA9IGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudDsNCiAgICB2YXIgaCA9IHdpbmRvdy5pbm5lckhlaWdodCB8fCBz
ZWxmLmlubmVySGVpZ2h0IHx8IChkZSYmZGUuY2xpZW50SGVpZ2h0KSB8fCBkb2N1
bWVudC5ib2R5LmNsaWVudEhlaWdodDsNCg0KCXZhciB2YWxvclRvcD1NYXRoLm1h
eChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wLGRvY3VtZW50LmJv
ZHkuc2Nyb2xsVG9wKSArInB4IjsNCgl2YXIgdmFsb3JXaWR0aCA9IE1hdGgubWF4
KGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgsZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50LmNsaWVudFdpZHRoKSA7DQoJdmFyIHZhbG9ySGVpZ2h0ID0gTWF0aC5tYXgo
ZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50LmNsaWVudEhlaWdodCk7DQoJDQoJaWYoTWVudV9UaXBvTG9hZGluZyE9MSkJ
DQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUYWJsZWxvYWRpbmciKS5zdHls
ZS5oZWlnaHQ9aCArJ3B4JzsJDQoJaWYoTWVudV9UaXBvTG9hZGluZz09MCl7CQ0K
CWlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZGluZyIpIT1udWxsKQ0K
CQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmciKS5zdHlsZS52aXNp
YmlsaXR5PSd2aXNpYmxlJzsNCgkNCg0KCWlmIChkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiRElWbG9hZGluZyIpIT1udWxsKXsNCgkJIGlmKHRpcG8hPTEpew0KCQkJ
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkRJVmxvYWRpbmciKS5zdHlsZS50b3A9
dmFsb3JUb3A7IAkJDQoJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiRElWbG9h
ZGluZyIpLnN0eWxlLmhlaWdodD1oICsncHgnOw0KCQkgCWRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJESVZsb2FkaW5nIikuc3R5bGUuZGlzcGxheT0nYmxvY2snOwkN
CgkJDQoJCSAJaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZnJhbWVsb2Fk
aW5nIikhPW51bGwpew0KCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZnJh
bWVsb2FkaW5nIikuc3R5bGUudG9wPXZhbG9yVG9wOwkNCgkJCQlkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiaWZyYW1lbG9hZGluZyIpLnN0eWxlLmRpc3BsYXk9J2Js
b2NrJzsJCQkJCQ0KCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZnJhbWVs
b2FkaW5nIikuc3R5bGUud2lkdGg9dmFsb3JXaWR0aCAgKyAncHgnOwkJCQkJCQ0K
CQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZnJhbWVsb2FkaW5nIikuc3R5
bGUuaGVpZ2h0PXZhbG9ySGVpZ2h0KyAncHgnOwkJCQkJDQoJCQl9DQoJCX0NCgl9
DQoJDQoJfWVsc2V7CQ0KCQlpZiAoKHRpcG8hPTEpICYmIChkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiRElWbG9hZGluZyIpIT1udWxsKSl7DQoJCQlkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiRElWbG9hZGluZyIpLnN0eWxlLnRvcD12YWxvclRvcDsg
CQkNCgkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJESVZsb2FkaW5nIikuc3R5
bGUuaGVpZ2h0PWgrJ3B4JzsJCQkJCQkJDQoJCQlkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiRElWbG9hZGluZyIpLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsJCQkJDQoJ
CQlpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlmcmFtZWxvYWRpbmciKSE9
bnVsbCl7CQkNCgkJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWZyYW1lbG9h
ZGluZyIpLnN0eWxlLnRvcD12YWxvclRvcDsJDQoJCQkJZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImlmcmFtZWxvYWRpbmciKS5zdHlsZS5kaXNwbGF5PSdibG9jayc7
CQ0KCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZnJhbWVsb2FkaW5nIiku
c3R5bGUud2lkdGg9dmFsb3JXaWR0aCAgKyAncHgnOwkJCQkJCQ0KCQkJCWRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJpZnJhbWVsb2FkaW5nIikuc3R5bGUuaGVpZ2h0
PXZhbG9ySGVpZ2h0KyAncHgnOwkJCQkJCQkJDQoJCQkJfQ0KCQkJfQ0KCQlpZiAo
KHRpcG8hPTIpICYmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkaW5nIikh
PW51bGwpKQ0KCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkaW5nIiku
c3R5bGUudmlzaWJpbGl0eT0ndmlzaWJsZSc7DQoJfQ0KfQ0KDQpmdW5jdGlvbiBt
b3N0cmFyTG9hZGluZ1RpbWUodGltZSx0aXBvKXsNCgltb3N0cmFyTG9hZGluZyh0
aXBvKTsNCglzZXRUaW1lb3V0KCJvY3VsdGFyTG9hZGluZ0luc3RhbnQoKSIsIHRp
bWUqMTAwMCk7DQp9DQoNCmZ1bmN0aW9uIE1vc3RhckxvYWRpbmcoKXsNCgltb3N0
cmFyTG9hZGluZygpOw0KfQ0KDQovL0RlYmlkbyBhIHBvc2libGVzIGxsYW1hZGFz
IGFsIGpzIHF1ZSBwcm92b2NhcmlhIHVuIGJ1Y2xlIGluZmluaXRvIHNpIHNlIGxs
YW1hIGEganMgbWFzIGRlIHVuYSB2ZXogaGFiaWxpdGFtb3MgdW4gY29udHJvbA0K
DQppZiggaXNOYU4obG9hZGluZ19jb250cm9sKSl7DQoJdmFyIGxvYWRpbmdfY29u
dHJvbD0xOw0KCU1lbnVfTG9hZGluZ19PdGhlckxvYWQgPSAod2luZG93Lm9ubG9h
ZCkgPyB3aW5kb3cub25sb2FkIDogIG5ldyBGdW5jdGlvbjsNCgkNCgl3aW5kb3cu
b25sb2FkICA9IGZ1bmN0aW9uKCl7DQoJCXNldFRpbWVvdXQoIm9jdWx0YXJMb2Fk
aW5nSW5zdGFudCgpIiwxMCk7DQoJCU1lbnVfTG9hZGluZ19PdGhlckxvYWQoKTsN
Cgl9Ow0KfQ0KDQo=
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=logoINE.gif
Content-Type: image/gif; name=logoINE.gif
Content-Location: http://www.ine.es/menuapp/img/logoINE.gif
Content-Transfer-Encoding: Base64
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
LNuyLvuyMBuznkEUNFuzNgh7szhbszMQEAA7
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=loading.gif
Content-Type: image/gif; name=loading.gif
Content-Location: http://www.ine.es/menuapp/img/loading.gif
Content-Transfer-Encoding: Base64
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
7QbB5GkBADs=
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=jquery.fontSizer.js
Content-Type: application/javascript; name=jquery.fontSizer.js
Content-Location: http://www.ine.es/menuapp/js/jquery.fontSizer.js
Content-Transfer-Encoding: Base64
DQp2YXIgY29va0ZhY3Rvcj0iVGFtRmFjdG9yQWN1bXVsYWRvIg0KdmFyIGZhY3Rv
ckFjdW11bGFkbz0wOw0KdmFyIGluaXQ9MDsNCnZhciBpbmNyZW1lbnRvPTQ7DQo7
KGZ1bmN0aW9uKCQpIHsNCg0KCSQuZm4uZm9udFNpemVyID0gZnVuY3Rpb24oc2V0
dGluZ3Mpew0KCSAgDQoJCWRlZmF1bHRzID0gew0KCQkJYWN0aW9uOiAidXAiLA0K
CQkJaW5jcmVtZW50OiBpbmNyZW1lbnRvLA0KCQkJbWF4OiAyMSwNCgkJCW1pbjog
LWluY3JlbWVudG8sDQoJCQl3aWRnZXQ6IHtjc3M6IFsibWFzIiwibWVub3MiXX0s
DQoJCQloZWFkZXJzOiB7fSwNCgkJCWRlYnVnOiBmYWxzZQ0KCQl9LA0KCQl0aGlz
LmNsaWNrKGZ1bmN0aW9uKCl7IA0KCQkJaWYoc2V0dGluZ3NbJ2VsZW1lbnRzJ10g
PT0gIiIpDQoJCQkJcmV0dXJuOw0KCQkJZWxlbWVudHMgPSBzZXR0aW5nc1snZWxl
bWVudHMnXTsNCgkJCXZhciBhY3Rpb24gPSAkLnRyaW0oKHNldHRpbmdzWydhY3Rp
b24nXT09dW5kZWZpbmVkKT8gZGVmYXVsdHMuYWN0aW9uOnNldHRpbmdzWydhY3Rp
b24nXSk7DQoJCQl2YXIgZmFjdG9yID0gcGFyc2VJbnQoKHNldHRpbmdzWydpbmNy
ZW1lbnQnXT09dW5kZWZpbmVkKT8gZGVmYXVsdHMuaW5jcmVtZW50OnNldHRpbmdz
WydpbmNyZW1lbnQnXSk7DQoNCgkJCXZhciBtYXggPSBwYXJzZUludCgoc2V0dGlu
Z3NbJ21heCddPT11bmRlZmluZWQpPyBkZWZhdWx0cy5tYXg6c2V0dGluZ3NbJ21h
eCddKTsNCgkJCXZhciBtaW4gPSBwYXJzZUludCgoc2V0dGluZ3NbJ21pbiddPT11
bmRlZmluZWQpPyBkZWZhdWx0cy5taW46c2V0dGluZ3NbJ21pbiddKTsNCg0KICAg
ICAgICAgICAgICAgICAgIHZhciBwYXRyb24gPSAvcHgkLzsNCg0KCQkJaWYgKGlu
aXQ9PTEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9y
QWN1bXVsYWRvPXBhcnNlSW50KGZhY3RvckFjdW11bGFkbyk7DQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChmYWN0b3JBY3VtdWxhZG8+bWF4KWZh
Y3RvckFjdW11bGFkbz1tYXg7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChmYWN0b3JBY3VtdWxhZG88bWluKWZhY3RvckFjdW11bGFkbz1taW47
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KCQkJCWZhY3Rvcj1N
YXRoLmFicyggZmFjdG9yQWN1bXVsYWRvKTsJCQkJDQoJCQkJaWYgKHBhcnNlSW50
KGZhY3RvckFjdW11bGFkbyk+MCkNCgkJCQkJYWN0aW9uPSJ1cCI7DQoJCQkJZWxz
ZSBhY3Rpb249ImRvd24iOw0KDQoJCQl9ICAgICAgICBlbHNlew0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKChhY3Rpb249PSJ1cCIpICYmIChmYWN0b3JBY3VtdWxhZG8gPD0g
bWF4KSkNCgkJCQkJZmFjdG9yQWN1bXVsYWRvPXBhcnNlSW50KGZhY3RvckFjdW11
bGFkbykgKyBwYXJzZUludChmYWN0b3IpOw0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKChhY3Rpb249PSJkb3duIikgJiYoZmFjdG9yQWN1bXVs
YWRvID49bWluKSkNCgkJCQkJZmFjdG9yQWN1bXVsYWRvPXBhcnNlSW50KGZhY3Rv
ckFjdW11bGFkbykgLSBwYXJzZUludChmYWN0b3IpOw0KCQkJCQkJCQkJCQkJCQkJ
CWlmIChhY3Rpb249PSJyZXN0b3JlIikgew0KCQkJCQlmYWN0b3I9ZmFjdG9yQWN1
bXVsYWRvOw0KCQkJCQlmYWN0b3JBY3VtdWxhZG89MDsNCgkJCQl9DQoNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVDb29raWUoY29va0Zh
Y3RvciwgZmFjdG9yQWN1bXVsYWRvLCBDb29raWVOdW1EYXlzKTsNCiAgICAgICAg
ICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICANCiAgICAg
ICAgICAgICAgICAgICAgICAgICANCgkJCWlmKCAoaW5pdCE9MSkgJiYgKE1lbnVf
UmVmcmVzaFBhZ2UpKQ0KCQkJCSBsb2NhdGlvbi5yZWxvYWQodHJ1ZSkgIA0KCQkJ
ZWxzZXsNCgkJCWlmICgkKGVsZW1lbnRzKS5jaGlsZHJlbigpLnNpemUoKSA9PSAw
KXsNCgkJCQkJCQ0KCQkJCQl0YW1hbm5vID0gJChlbGVtZW50cykuY3NzKCdmb250
LXNpemUnKTsNCgkJCQkJaWYgKGFjdGlvbiA9PSAidXAiKXsNCgkJCQkJCW5ld190
YW1hbm5vID0gcGFyc2VJbnQodGFtYW5uby5yZXBsYWNlKHBhdHJvbiwgJycpKSAr
IGZhY3RvcjsNCgkJCQkJCWlmKGZhY3RvckFjdW11bGFkbyA+IG1heCl7DQoJCQkJ
CQkJcmV0dXJuOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWVsc2V7DQoJCQkJCQlu
ZXdfdGFtYW5ubyA9IHBhcnNlSW50KHRhbWFubm8ucmVwbGFjZShwYXRyb24sICcn
KSkgLSBmYWN0b3I7CQkNCgkJCQkJCWlmKGZhY3RvckFjdW11bGFkbyA8IG1pbil7
DQoJCQkJCQkJcmV0dXJuOw0KCQkJCQkJfQkJCQkJDQoJCQkJCX0NCgkJCQkJJChl
bGVtZW50cykuY3NzKCdmb250LXNpemUnLG5ld190YW1hbm5vKydweCcpOw0KCQkJ
fQ0KCQkJZWxzZXsJCQkNCgkJCQkkKGVsZW1lbnRzKS5jaGlsZHJlbigpLmVhY2go
ZnVuY3Rpb24oKXsNCg0KCQkJCQl0YW1hbm5vID0gJCh0aGlzKS5jc3MoJ2ZvbnQt
c2l6ZScpOwkNCgkJCQkJaWYgKGFjdGlvbiA9PSAidXAiKXsNCgkJCQkJCQ0KCQkJ
CQkJbmV3X3RhbWFubm8gPSBwYXJzZUludCh0YW1hbm5vLnJlcGxhY2UocGF0cm9u
LCAnJykpICsgZmFjdG9yOwkJCQkJCQkJIAkJDQoJCQkJCQlpZihmYWN0b3JBY3Vt
dWxhZG8gPiBtYXgpew0KCQkJCQkJCXJldHVybjsNCgkJCQkJCX0NCgkJCQkJfQ0K
CQkJCQllbHNlew0KCQkJCQkJbmV3X3RhbWFubm8gPSBwYXJzZUludCh0YW1hbm5v
LnJlcGxhY2UocGF0cm9uLCAnJykpIC0gZmFjdG9yOw0KCQkJCQkJCQkJCQkNCgkJ
CQkJCWlmKGZhY3RvckFjdW11bGFkbyA8IG1pbil7DQoJCQkJCQkJcmV0dXJuOw0K
CQkJCQkJfQ0KCQkJCQl9CQkJCQkNCgkJCQkJJCh0aGlzKS5jc3MoJ2ZvbnQtc2l6
ZScsbmV3X3RhbWFubm8rJ3B4Jyk7DQoJCQkJCQ0KCQkJCX0pOw0KCQkJfQ0KCQkg
IH0vL3JlZnJlc2gNCgkJCWlmIChpbml0IT0xKSB7DQoJCQkJICAgICAgICAgICAg
ICANCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgIGluaXQ9MDsNCgkg
ICByZXR1cm4gZmFsc2UgICAgICAgICAgICAgICAgICAgICANCgkJfSkNCgl9DQoN
Cn0pKGpRdWVyeSk7DQoNCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7DQoJ
CQkkKCcjYXVtZW50YXInKS5mb250U2l6ZXIoew0KCQkJCWFjdGlvbjogInVwIiwN
CgkJCQlpbmNyZW1lbnQ6IGluY3JlbWVudG8sDQoJCQkJZWxlbWVudHM6ICJib2R5
IiwNCgkJCQltYXg6IDIxLA0KCQkJCW1pbjogLWluY3JlbWVudG8NCg0KCQkJfSk7
DQoJCQkNCgkJCSQoJyNkaXNtaW51aXInKS5mb250U2l6ZXIoew0KCQkJCWFjdGlv
bjogJ2Rvd24nLA0KCQkJCWluY3JlbWVudDogaW5jcmVtZW50bywNCgkJCQllbGVt
ZW50czogImJvZHkiLA0KCQkJCW1pbjogLWluY3JlbWVudG8NCgkJCX0pOwkJCQkJ
CQ0KCQkJDQoJCQkkKCcjcmVzdGF1cmFyJykuZm9udFNpemVyKHsNCgkJCQlhY3Rp
b246ICdyZXN0b3JlJywNCgkJCQlpbmNyZW1lbnQ6IGluY3JlbWVudG8sDQoJCQkJ
ZWxlbWVudHM6ICJib2R5IiwNCgkJCQltaW46IC1pbmNyZW1lbnRvDQoJCQl9KTsJ
CQoJCQkNCgkJfSkNCg0KZnVuY3Rpb24gTWFzVGFtKCl7DQogIGpRdWVyeS5mbi5m
b250U2l6ZXIoKTsNCglqUXVlcnkoIiNhdW1lbnRhciIpLmNsaWNrKCk7CQkNCgkg
DQp9DQpmdW5jdGlvbiBNZW5vc1RhbSgpew0KICBqUXVlcnkuZm4uZm9udFNpemVy
KCk7DQoJalF1ZXJ5KCIjZGlzbWludWlyIikuY2xpY2soKTsNCglsb2NhdGlvbi5y
ZWxvYWQodHJ1ZSkgIA0KfQ0KDQovL0FycmFuY2Ftb3MgZWwgdGFtYfFvIGRlIGlu
aWNpbw0KDQpmdW5jdGlvbiBDYXJnYUVzdGlsb0RlZigpew0KCWluaXQ9MTsNCglm
YWN0b3JBY3VtdWxhZG89cmVhZENvb2tpZShjb29rRmFjdG9yKTsNCglpZiAoZmFj
dG9yQWN1bXVsYWRvJWluY3JlbWVudG8hPTApDQoJCWZhY3RvckFjdW11bGFkbz0w
Ow0KCWlmICggaXNOYU4oZmFjdG9yQWN1bXVsYWRvKSB8fCBmYWN0b3JBY3VtdWxh
ZG89PW51bGwpIGZhY3RvckFjdW11bGFkbz0wOw0KCWlmIChmYWN0b3JBY3VtdWxh
ZG8+MCl7DQoNCgkJalF1ZXJ5LmZuLmZvbnRTaXplcigpOw0KCQlqUXVlcnkoIiNh
dW1lbnRhciIpLmNsaWNrKCk7CQkNCgl9DQogICAgICAgIGlmIChmYWN0b3JBY3Vt
dWxhZG88MCl7DQogICAgICAgIAlqUXVlcnkuZm4uZm9udFNpemVyKCk7DQoJCWpR
dWVyeSgiI2Rpc21pbnVpciIpLmNsaWNrKCk7DQogICAgICAgIH0NCglpbml0PTA7
DQoNCn0NCg0KDQovL0RlYmlkbyBhIHBvc2libGVzIGxsYW1hZGFzIGFsIGpzIHF1
ZSBwcm92b2NhcmlhIHVuIGJ1Y2xlIGluZmluaXRvIHNpIHNlIGxsYW1hIGEganMg
bWFzIGRlIHVuYSB2ZXogaGFiaWxpdGFtb3MgdW4gY29udHJvbA0KDQppZiggaXNO
YU4oanF1ZXJ5X2ZvbnRzaXplcl9jb250cm9sKSl7DQoJdmFyIGpxdWVyeV9mb250
c2l6ZXJfY29udHJvbD0xOw0KCVN0eWxlX090aGVyTG9hZCA9ICh3aW5kb3cub25s
b2FkKSA/IHdpbmRvdy5vbmxvYWQgOiAgbmV3IEZ1bmN0aW9uOw0KCXdpbmRvdy5v
bmxvYWQgID0gZnVuY3Rpb24oKXsNCg0KCQlzZXRUaW1lb3V0KCJDYXJnYUVzdGls
b0RlZigpIiwxMDApOw0KCQlTdHlsZV9PdGhlckxvYWQoKTsNCgkJfTsJCQ0KfQ0K
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=letras.gif
Content-Type: image/gif; name=letras.gif
Content-Location: http://www.ine.es/menuapp/img/letras.gif
Content-Transfer-Encoding: Base64
R0lGODlhLQAPALMPANiHlvns6PTb27ERN92YpOm6v8FDYLwzUs1le7YiRMdUbe7K
zdJ2ieOpsqsAKf///yH5BAEAAA8ALAAAAAAtAA8AAASZ8MlJq704680lGEEnjolD
jKhWOI6RYkgiKqyzvNbgFJxwGCwGjkLQCTcAAIEFyggcAA0C4JBtDiGdKUM9OAFP
R0PTQEgYLC9GARRgwA+gQmPgPRa1m2WRhGJKNU0XYTU1ZhZoaRcNJw8BOlEXCI0S
Sw6CEwJzcTsVAVgTNAkhFVSegAakD2EEKyx2Elo3iSyqD4WHroVDvBYRADs=
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=barraSeparacionSombra.gif
Content-Type: image/gif; name=barraSeparacionSombra.gif
Content-Location: http://www.ine.es/menuapp/img/barraSeparacionSombra.gif
Content-Transfer-Encoding: Base64
R0lGODlhAQAPAPcAAAAAAOvAvOGgpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAABAA8AAAgIAAUIHEiwYEAAOw==
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=btnsobre.gif
Content-Type: image/gif; name=btnsobre.gif
Content-Location: http://www.ine.es/menuapp/img/btnsobre.gif
Content-Transfer-Encoding: Base64
R0lGODlhEQAPAJEBAJkzM//99v/iowAAACH5BAEAAAEALAAAAAARAA8AAAIpjI+p
y70Ao5wGiIuziFV7Hlje110ThAHlmKlhOrUra64nus20e/cOUwAAOw==
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=btnFavoritos.gif
Content-Type: image/gif; name=btnFavoritos.gif
Content-Location: http://www.ine.es/menuapp/img/btnFavoritos.gif
Content-Transfer-Encoding: Base64
R0lGODlhEQAPAJECAKsAKf/io//99gAAACH5BAEAAAIALAAAAAARAA8AAAIwlG+A
yxDKooNxzWqDpgj4rz2fJzjhiW6ll4ZfZ6KkJGPxyXUb+9DiqsrMgLmVhFIAADs=
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=btnMap.gif
Content-Type: image/gif; name=btnMap.gif
Content-Location: http://www.ine.es/menuapp/img/btnMap.gif
Content-Transfer-Encoding: Base64
R0lGODlhEQAPAJECAP/io6sAKf/99gAAACH5BAEAAAIALAAAAAARAA8AAAIrlI+p
Ft2bApgBIkntwaBq4TwfM15fiIrmtragC4oOo4Idc9se7c3xXjoUAAA7
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=HM_Loader5.js
Content-Type: application/javascript; name=HM_Loader5.js
Content-Location: http://www.ine.es/menuapp/js/HM_Loader5.js
Content-Transfer-Encoding: Base64
LypITV9Mb2FkZXIuanMNCiogYnkgUGV0ZXIgQmVsZXNpcy4gdjQuMSAwMTA4MjEN
CiogQ29weXJpZ2h0IChjKSAyMDAxIFBldGVyIEJlbGVzaXMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuDQoqLw0KDQp2YXIgICBITV9ET00gPSAoZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQpID8gdHJ1ZSA6IGZhbHNlOw0KdmFyICAgSE1fTlM0ID0gKGRvY3Vt
ZW50LmxheWVycykgPyB0cnVlIDogZmFsc2U7DQp2YXIgICBITV9JRSA9IChkb2N1
bWVudC5hbGwpID8gdHJ1ZSA6IGZhbHNlOw0KdmFyICAgSE1fSUU0ID0gSE1fSUUg
JiYgIUhNX0RPTTsNCnZhciAgIEhNX01hYyA9IChuYXZpZ2F0b3IuYXBwVmVyc2lv
bi5pbmRleE9mKCJNYWMiKSAhPSAtMSk7DQp2YXIgICBITV9JRTRNID0gSE1fSUU0
ICYmIEhNX01hYzsNCg0KLy80LjENCnZhciBITV9PcGVyYSA9IChuYXZpZ2F0b3Iu
dXNlckFnZW50LmluZGV4T2YoIk9wZXJhIikhPS0xKTsNCnZhciBITV9Lb25xdWVy
b3IgPSAobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJLb25xdWVyb3IiKSE9
LTEpOw0KDQp2YXIgSE1fSXNNZW51ID0gIUhNX09wZXJhICYmICFITV9Lb25xdWVy
b3IgJiYgIUhNX0lFNE0gJiYgKEhNX0RPTSB8fCBITV9OUzQgfHwgSE1fSUU0KTsN
Cg0KdmFyIEhNX0Jyb3dzZXJTdHJpbmcgPSBITV9OUzQgPyAiTlM0IiA6IEhNX0RP
TSA/ICJET00iIDogIklFNCI7DQoNCg0KaWYod2luZG93LmV2ZW50ICsgIiIgPT0g
InVuZGVmaW5lZCIpIGV2ZW50ID0gbnVsbDsNCmZ1bmN0aW9uIEhNX2ZfUG9wVXAo
KXtyZXR1cm4gZmFsc2V9Ow0KZnVuY3Rpb24gSE1fZl9Qb3BEb3duKCl7cmV0dXJu
IGZhbHNlfTsNCnZhciBwb3BVcCA9IEhNX2ZfUG9wVXA7DQp2YXIgcG9wRG93biA9
IEhNX2ZfUG9wRG93bjsNCg0KdmFyIE1lbnVQb3NYPTA7DQp2YXIgTWVudVBvc1k9
MDsNCnZhciBITV9HTF9NZW51V2lkdGggICAgICAgICAgPSAyMDA7DQp2YXIgSE1f
R0xfRm9udEZhbWlseSAgICAgICAgID0gIkFyaWFsLHNhbnMtc2VyaWYiOw0KdmFy
IEhNX0dMX0ZvbnRTaXplICAgICAgICAgICA9IDY7DQp2YXIgSE1fR0xfRm9udEJv
bGQgICAgICAgICAgID0gZmFsc2U7DQp2YXIgSE1fR0xfRm9udEl0YWxpYyAgICAg
ICAgID0gZmFsc2U7DQp2YXIgSE1fR0xfRm9udENvbG9yICAgICAgICAgID0gImJs
dWUiOw0KdmFyIEhNX0dMX0ZvbnRDb2xvck92ZXIgICAgICA9ICIjOTkzMzMzIjsN
CnZhciBITV9HTF9CR0NvbG9yICAgICAgICAgICAgPSAiI2ZmZmZmZiI7Ly9kb2N1
bWVudC5iZ0NvbG9yOw0KdmFyIEhNX0dMX0JHQ29sb3JPdmVyICAgICAgICA9ICIj
ZmZkODg2IjsNCnZhciBITV9HTF9JdGVtUGFkZGluZyAgICAgICAgPSAzOw0KDQp2
YXIgSE1fR0xfQm9yZGVyV2lkdGggICAgICAgID0gMjsNCnZhciBITV9HTF9Cb3Jk
ZXJDb2xvciAgICAgICAgPSAiIzk5MzMzMyI7DQp2YXIgSE1fR0xfQm9yZGVyU3R5
bGUgICAgICAgID0gInNvbGlkIjsNCnZhciBITV9HTF9TZXBhcmF0b3JTaXplICAg
ICAgPSAxOw0KdmFyIEhNX0dMX1NlcGFyYXRvckNvbG9yICAgICA9ICIjOTkzMzMz
IjsNCnZhciBITV9HTF9JbWFnZVNyYyAgICAgICAgICAgPSBITV9pbWdEaXIgKyAi
dHJpLmdpZiI7DQp2YXIgSE1fR0xfSW1hZ2VTcmNMZWZ0ICAgICAgID0gSE1faW1n
RGlyICsgInRyaWwuZ2lmIjsNCnZhciBITV9HTF9JbWFnZVNyY092ZXIgICAgICAg
PSBITV9pbWdEaXIgKyAidHJpX2F6dWwuZ2lmIjsNCnZhciBITV9HTF9JbWFnZVNy
Y0xlZnRPdmVyICAgPSBITV9pbWdEaXIgKyAiSE1fTW9yZV9ibHVlX2xlZnQuZ2lm
IjsNCnZhciBITV9HTF9JbWFnZVNpemUgICAgICAgICAgPSA1Ow0KdmFyIEhNX0dM
X0ltYWdlSG9yaXpTcGFjZSAgICA9IDA7DQp2YXIgSE1fR0xfSW1hZ2VWZXJ0U3Bh
Y2UgICAgID0gMDsNCg0KdmFyIEhNX0dMX0tlZXBIaWxpdGUgICAgICAgICA9IHRy
dWU7DQp2YXIgSE1fR0xfQ2xpY2tTdGFydCAgICAgICAgID0gMDsNCnZhciBITV9H
TF9DbGlja0tpbGwgICAgICAgICAgPSAwOw0KdmFyIEhNX0dMX0NoaWxkT3Zlcmxh
cCAgICAgICA9IDkwOw0KdmFyIEhNX0dMX0NoaWxkT2Zmc2V0ICAgICAgICA9IDEz
Ow0KdmFyIEhNX0dMX0NoaWxkUGVyQ2VudE92ZXIgICA9IG51bGw7DQp2YXIgSE1f
R0xfVG9wU2Vjb25kc1Zpc2libGUgID0gMC41Ow0KdmFyIEhNX0dMX0NoaWxkU2Vj
b25kc1Zpc2libGUgPSAuMzsNCnZhciBITV9HTF9TdGF0dXNEaXNwbGF5QnVpbGQg
PSAwOw0KdmFyIEhNX0dMX1N0YXR1c0Rpc3BsYXlMaW5rICA9IDE7DQp2YXIgSE1f
R0xfVXBvbkRpc3BsYXkgICAgICAgID0gbnVsbDsNCnZhciBITV9HTF9VcG9uSGlk
ZSAgICAgICAgICAgPSBudWxsOw0KDQp2YXIgSE1fR0xfU2Nyb2xsRW5hYmxlZCAg
ICAgID0gdHJ1ZTsNCnZhciBITV9HTF9TY3JvbGxCYXJIZWlnaHQgICAgPSAxNjsN
CnZhciBITV9HTF9TY3JvbGxCYXJDb2xvciAgICAgPSAibGlnaHRncmV5IjsNCnZh
ciBITV9HTF9TY3JvbGxJbWdTcmNUb3AgICAgPSBITV9pbWdEaXIgKyAiSE1fdXAu
Z2lmIjsNCnZhciBITV9HTF9TY3JvbGxJbWdTcmNCb3QgICAgPSBITV9pbWdEaXIg
KyAiSE1fZG93bi5naWYiOw0KdmFyIEhNX0dMX1Njcm9sbEltZ1dpZHRoICAgICA9
IDk7DQp2YXIgSE1fR0xfU2Nyb2xsSW1nSGVpZ2h0ICAgID0gNTsNCnZhciBITV9H
TF9TY3JvbGxCb3RoQmFycyAgICAgPSB0cnVlOw0KdmFyIEhNX0dMX1Njcm9sbEhl
aWdodE1pbiAgICA9IDMwOw0KDQp2YXIgSE1fR0xfSG92ZXJUaW1lVG9wICAgICAg
ID0gNjAwOw0KdmFyIEhNX0dMX0hvdmVyVGltZVRyZWUgICAgICA9IDYwMDsNCg0K
Ly9ITV9HTF9SaWdodFRvTGVmdCAgICAgID0gdHJ1ZTsNCnZhciBITV9HTF9DcmVh
dGVUb3BPbmx5ICAgICAgPSBITV9OUzQgPyB0cnVlIDogZmFsc2U7DQp2YXIgSE1f
R0xfU2hvd0xpbmtDdXJzb3IgICAgID0gdHJ1ZTsNCg0KLy9QYXJhbWV0cm9zIHBh
cmEgZnJhbWVzDQp2YXIgSE1fUEdfRnJhbWVzRW5hYmxlZCAgICAgID0gdHJ1ZTsN
CnZhciBITV9QR19GcmFtZXNOYXZGcmFtZVBvcyAgPSAidG9wIjsNCnZhciBITV9Q
R19GcmFtZXNNYWluRnJhbWVOYW1lID0gImNvbnRlbnQiOw0KDQovL0xvY2FsaXph
Y2lvbiBkZSBsb3MgZmljaGVyb3MgZGUgSE1TY3JpcHQgeSBkZSBpbWFnZW5lcw0K
dmFyIEhNX0dMX0ltYWdlRGlyICAgICAgICAgICA9IEhNX2ltZ0RpcjsNCnZhciBI
TV9TY3JpcHREaXIgICAgICAgICAgICAgPSAiIjsNCg0KLy8gdGhlIGZvbGxvd2lu
ZyBmdW5jdGlvbiBpcyBpbmNsdWRlZCB0byBpbGx1c3RyYXRlIHRoZSBpbXByb3Zl
ZCBKUyBleHByZXNzaW9uIGhhbmRsaW5nIG9mDQovLyB0aGUgbGVmdF9wb3NpdGlv
biBhbmQgdG9wX3Bvc2l0aW9uIHBhcmFtZXRlcnMNCi8vIHlvdSBtYXkgZGVsZXRl
IGlmIHlvdSBoYXZlIG5vIHVzZSBmb3IgaXQNCg0KZnVuY3Rpb24gSE1fZl9DZW50
ZXJNZW51KHRvcG1lbnVpZCkgew0KCXZhciBNaW5pbXVtUGl4ZWxMZWZ0ID0gMDsN
Cgl2YXIgVGhlTWVudSA9IEhNX0RPTSA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KHRvcG1lbnVpZCkgOiBITV9JRTQgPyBkb2N1bWVudC5hbGwodG9wbWVudWlkKSA6
IGV2YWwoIndpbmRvdy4iICsgdG9wbWVudWlkKTsNCgl2YXIgVGhlTWVudVdpZHRo
ID0gSE1fRE9NID8gcGFyc2VJbnQoVGhlTWVudS5zdHlsZS53aWR0aCkgOiBITV9J
RTQgPyBUaGVNZW51LnN0eWxlLnBpeGVsV2lkdGggOiBUaGVNZW51LmNsaXAud2lk
dGg7DQoJdmFyIFRoZVdpbmRvd1dpZHRoID0gSE1fSUUgPyBkb2N1bWVudC5ib2R5
LmNsaWVudFdpZHRoIDogd2luZG93LmlubmVyV2lkdGg7DQoJcmV0dXJuIE1hdGgu
bWF4KHBhcnNlSW50KChUaGVXaW5kb3dXaWR0aC1UaGVNZW51V2lkdGgpIC8gMiks
TWluaW11bVBpeGVsTGVmdCk7DQp9DQoNCmlmKEhNX0lzTWVudSkgew0KCWRvY3Vt
ZW50LndyaXRlKCI8U0NSIiArICJJUFQgTEFOR1VBR0U9J0phdmFTY3JpcHQxLjIn
IFNSQz0nIiArIEhNX0RpckpzICsgIi8iICsgSE1faWRpb21hICsgIi9ITUFycmF5
c19pbmU1LmpzJyBUWVBFPSd0ZXh0L2phdmFzY3JpcHQnPjxcL1NDUiIgKyAiSVBU
PiIpOw0KCWRvY3VtZW50LndyaXRlKCI8U0NSIiArICJJUFQgTEFOR1VBR0U9J0ph
dmFTY3JpcHQxLjInIFNSQz0nIiArIEhNX0RpckpzICsgIi9ITV9TY3JpcHQiKyBI
TV9Ccm93c2VyU3RyaW5nICsiLmpzJyBUWVBFPSd0ZXh0L2phdmFzY3JpcHQnPjxc
L1NDUiIgKyAiSVBUPiIpOw0KfQ0KLy9lbmQ=
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=printer.gif
Content-Type: image/gif; name=printer.gif
Content-Location: http://www.ine.es/jaxiBD/imagenes/printer.gif
Content-Transfer-Encoding: Base64
R0lGODlhEwATAOZTAAABAAEABAAABAADAP//+n6HggYIBQAABYOChwcIAwQABAQA
BwIBB/v/+gUACQADBQgEBQMBDAkABgYIA3x9gQoAAHyCgnp+gQQAAP//+IaFipKA
gP/9+/n482dALxIHAHSGhggDCQEBAYaLh32CfPv7+fz/+4yHhHp6ev309ff4+gAB
BH2AhQMAAAYABomIhAYABXqFhwYPFHx+eQAFAn1+efb58oGJfv/8+nt9ifP4+3p8
e4SEhAMCCPX/94tybnSAgP/99v//+3mweWKpb3k5OYCEhQYIB/b//IWFg////4aH
i3t8dn9+eoSGhfv5/P+wAf/io//Udf/43AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH5BAEAAFMALAAAAAATABMAAAengFOCg4SFhoeIiYQIFEaK
hDpLKkolPCiPUyM+DVFRBEIAAIhNLzadGUEdCYg1JFJMBDgcUSYDhzsnUrpSPxsp
SDRQRxiEUFC6REO7TiDGuh+DOcbHUh5FUs67FYMxnVHZ1LtSMINA3p3Z4lIRgywW
59/qEKKEFwU33uE9ClIThQedksyIx8CBLgEiDLkI0UlDAAG6AqxI9OSBjHgGbGGa
skBCi40gAwEAOw==
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=ventana_uni.gif
Content-Type: image/gif; name=ventana_uni.gif
Content-Location: http://www.ine.es/jaxiBD/imagenes/ventana_uni.gif
Content-Transfer-Encoding: Base64
R0lGODlhDgAPAKIAAP///9bn/3ul3gCt7wAAAP///wAAAAAAACH5BAUUAAUALAAA
AAAOAA8AAAMtWLrMQjBK+Ia9eASY+56gFIxkOUJm+qkmCrxwvMY0sLIkip/Efj4h
iaBBXCQAADs=
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=logoinebase.gif
Content-Type: image/gif; name=logoinebase.gif
Content-Location: http://www.ine.es/jaxiBD/imagenes/logoinebase.gif
Content-Transfer-Encoding: Base64
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
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=buscar2.gif
Content-Type: image/gif; name=buscar2.gif
Content-Location: http://www.ine.es/jaxiBD/imagenes/buscar2.gif
Content-Transfer-Encoding: Base64
R0lGODlhDwAQAOYAAP////v///38/O7///z7++r//+v///7399X//9H//8z///vz
8//x8MP//8H//7z//7X//7f//7j//7D//6///6j7+/rg4Pbd3fTU6PXL4aPi4vLF
46Xa2vPCwtrIyJzX1/Kzs++zs+O2tpHJyeKrq+SnpOKmquSnooO/v5ezs96foteg
q5SwsOaRkbqZv8aVvLyVvNOFhcGGhraGhmaT62OS78l8fNB5eWWL6c1yctFubspq
aZ52dp92dqlrlstiYsVgYMBaWpRlZa5dXcBWVopgYFZkZGtcXJRQUK9HR2ZaWq02
Nqs0NKM2NoY6Ol9CQnAwhUhCQqokJEYomE4vL0knkE0paIwaGlciInYXPH0VFXwS
EnUQD5kAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH5BAUUAF4ALAAAAAAPABAAAAeQgF6CFklbW1IkAIKLggtD
RyksMz8ijIs2Tw0IEhweOheWXktGBgYUDx8yOaFBSgUBEBAVPEChLUgoAQoTEz03
oR0xUSMJDhpUB6EEIEROQkVYXCehXgIhTFdNOytQKoxd4IwMLzRTJYJdi+mLGDA1
VSaW64sZLjhW6ODzixs+WV7z9oVaF65gunAADyZcGC4QADs=
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=barra_vertical.gif
Content-Type: image/gif; name=barra_vertical.gif
Content-Location: http://www.ine.es/jaxiBD/imagenes/barra_vertical.gif
Content-Transfer-Encoding: Base64
R0lGODlhAgAQAJEAANBwhMVNaKsAKasAKCH5BAQUAP8ALAAAAAACABAAAAIHBIap
yx1RAAA7
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=buscar.gif
Content-Type: image/gif; name=buscar.gif
Content-Location: http://www.ine.es/jaxiBD/imagenes/buscar.gif
Content-Transfer-Encoding: Base64
R0lGODlhDwAQAOZ7ALP//7r//7b//7f//63//97///7//92RkY8WFt3//6j9/YoT
E4h4rYWRkZwhIYUrKxMAR/be3vbc3FUTE7H//4S5uYGLi7j//7lBQa02NrxGRtNs
bJ8hId6Sktd1dY6mppUcOtJxcTQkJLT///DMyMtmZpLF/4qCsoyMtMxdXfXZ2ZEi
IuKezJ2mpsliaGQmJvHHx04gINv//wABqMxpc9RoaEIGhodBZ2AVFbM8PPv//7xL
S+CYmMRZYqRsoH8TE6///wABnn4REQAAl6ft7d+VxdR5eK7//7///8BSXc1jY6U4
OKnz83MYGPG+vraJidb//9N4eOajo/HKzLHm5lphYaLZ2dyMwIjc3HtnZ2QFBZKv
/zcaGjcmJsy+vuu3t+WlpZMbG8iMjDEBAdD//5e+/5OVlfLMzO7//5xmZsJRTc1r
a/35+Z0jI0weHootLeH//9iFwLZAQLz//9R7e92MjJO0/6l5ef///5RdXbX/////
/wAAAAAAAAAAAAAAACH5BAEAAHsALAAAAAAPABAAAAekgHt7dW0/Qhw7bIKLgmA4
WWYNd1EZjIJnTS0KSHpWTzBylkpcBAlwQANUXiE8jCluAHgyBHoBFWI5jB4xAjpo
eiN6THkajFJLFmQGcwB6RGkYjAdOXVhQBUcCFC9fjBEdNSIfFwMBVWOWeyp0Gytv
DxNaDmrpEmthCwglRiQ2SemWpvgwMaMHQEYsGJQJ4uLgoiIn7Ayh4VDQFRRbIFQU
FOcGiEAAOw==
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=iconoselecciontodos.gif
Content-Type: image/gif; name=iconoselecciontodos.gif
Content-Location: http://www.ine.es/jaxiBD/imagenes/iconoselecciontodos.gif
Content-Transfer-Encoding: Base64
R0lGODlhEQARAJEAAP///9TQyDMAzAAAACH5BAAAAAAALAAAAAARABEAAAIujI95
wu0dgHmUxQmy3kCgSn2gI47WwqXeYp5Tu77tl3JxAN95aV54vfFIFEREAQA7
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=iconoseleccionninguno.gif
Content-Type: image/gif; name=iconoseleccionninguno.gif
Content-Location: http://www.ine.es/jaxiBD/imagenes/iconoseleccionninguno.gif
Content-Transfer-Encoding: Base64
R0lGODlhEQARAJEAAAcHBwAAANTQyP///yH5BAAAAAAALAAAAAARABEAAAIwlI95
w+0thnmUxQmC3lyu+iBg+I3WknGqN5ln64ouG6XqRs/5LMfeYLsFJDSFUVAAADs=
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=singleArrowUp.gif
Content-Type: image/gif; name=singleArrowUp.gif
Content-Location: http://www.ine.es/jaxiBD/imagenes/singleArrowUp.gif
Content-Transfer-Encoding: Base64
R0lGODlhFAAUAMQAAIkKI7xsUNqytqpIQ/XMcvHk4pIdNN2nabdpdN2mZP3eef//
/5oqObBaaooQMaxUYLBWT5MiOcJ2Vf/le+C+w+a3aqA3P44YNI4TJ/fVdpYmO//z
f8yDWLhiTe3Cbv///yH5BAUUAB8ALAAAAAAUABQAAAXk4CeOH4VoGkKRrLgIDRNd
V8Q0wtJ+BYIBBgODEQRgEAVW4QHUGC6JBM0JeCRdCEBk6+BMJgHHNgJA6D4CjIHb
mWTeAwfKgBF8Fg0AyjFQvDMKHho1GgANCxREEQ4WGRMEkAQTBzRbDCZbNRWPf28K
HA5rESdOBgcbbp0KChsSYmMzEBUVBxV/BFFRFqIIsAYOHX4ZBBaVMqOJQUHAj5AW
ocqXeHp7AQqRxVuFh2hqXNbYNRF0dndZ3xOrGc8oZWc8TE8dHrMVuwZVVyM9Pxei
40aQ7HjRYAaNCzdy7BiBiJSKHSEAADs=
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=singleArrowDown.gif
Content-Type: image/gif; name=singleArrowDown.gif
Content-Location: http://www.ine.es/jaxiBD/imagenes/singleArrowDown.gif
Content-Transfer-Encoding: Base64
R0lGODlhFAAUAMQAAIkKI7pmTtqytqVAQfXOcvHk4pIdNN6parZodN2mZP3eeaxU
YPz3+JYmO4oPMLBUT8+LW//me+C9wpMiOaA4P44YNI4TJ/rXdei3aZoqObBaav/0
f7dgTLxqUP///////yH5BAUUAB8ALAAAAAAUABQAAAXl4CeOjIQ0DSKNLOsJWlbN
1aQJXisWiAUYk+CkArAgCq3C4megYJ4YTsUAWCBFDAQg6BhcvpGOAwVAMEQCC3A4
ILgVAUfQYBF8GBoAqlFpv+NBDQAaJRkGhwYOFG4EcA6IBhkmQRkTh4t/jwZ7Jw1N
CaAJjAQYBwcYDzVCEw4dGxEKoxcRGweHQQhCDhCxowQRtpspEoZDFQcRowoXFHIT
knh6fA2Nbl8DcoKEH2lrXb0KHM50dndauh0RERDOE2U5O0ubBhWgM55VVyM8PocZ
hlSM6HMBo9KMZzfg6RDhwQQKFQtDAAA7
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=singleArrowRight.gif
Content-Type: image/gif; name=singleArrowRight.gif
Content-Location: http://www.ine.es/jaxiBD/imagenes/singleArrowRight.gif
Content-Transfer-Encoding: Base64
R0lGODlhFAAUAMQAAIkKI7xrUNmwtaU/QfXNcvHk4pIdNN2nabdpdN2nZP3eeaxT
X////5YmO4oPMLBVT+C+w8J2Vf/le5MiOea3ao4TJ581Po4YNPrXda9Zaf/zf+3C
bs+LW7dgTJorOv///yH5BAUUAB8ALAAAAAAUABQAAAXe4CeODIQ0DQIxY0sKmTfN
k5cJrPsVSAUYk8ulYQBUEAVXYfFrzB4GIBGwSIoYCABtRjkYHDQAIieoGFBEQ0Jz
sIAnhorgw8gALo58/iCRYAZgDQAZHxBBHQGJiRQYBBIKHQ5RHiYXExt9fQoEnAQY
ChwXUSeWjJ2nnRIJHkMNpQoYsY2oqqwppbOoBAoKAaIGKh4GFgPFAxYJsBIbgJMr
dl96FxR9Bw2BgyJlZyhRFBqhrXFzdFlbEwkRDpYzYjk7TGc1blJFVUo9P+dGSDp0
MDJo2MDhj4QJFCrejQgBADs=
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=fizde.gif
Content-Type: image/gif; name=fizde.gif
Content-Location: http://www.ine.es/jaxiBD/imagenes/fizde.gif
Content-Transfer-Encoding: Base64
R0lGODlhKAAUAMQAAP//////mf//Zv/MzP/Mmf/MZv+ZZszMzMzMmczMZsyZmcyZ
ZsxmZsxmM5lmZplmM5kzZpkzM5kzAJkAM2YAM////wAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH5BAUUABUALAAAAAAoABQAAAXyYCWOpHgojBOtq8MoRynP
8sGweM4qCu2LCp1wEiHiej/SQJUz4ogqZ2uQrCiYz8WiuDIuChTpKuYbDL8JopG4
CBS4OSoN240sBAQwMTyZJAoFBHAsDnIlQToFeAILEw8MDQ6RgYoED2JIJXQTDpWA
gHkFbp+hAQ1SDjM5d6Ggn6+tgAFbOKo4X5SAf66vvGm1MpttsLyACKACBQyoM4gs
jqKfjisQK6yAEBI5mZpNEYGMExRFauBbYqk0Zt5tv2t2AjdiEYYzBzpECQZwXo1C
ZD+WeIuCT0ehKiOc1ZknhBtCEzeECGEA8KE9FHQiuIBhMQQAOw==
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=singleArrowLeft.gif
Content-Type: image/gif; name=singleArrowLeft.gif
Content-Location: http://www.ine.es/jaxiBD/imagenes/singleArrowLeft.gif
Content-Transfer-Encoding: Base64
R0lGODlhFAAUAMQAAIkKI7xrUNqytqdAQvXNcvLl45IdNN6pardqdd2lZP3bdqxU
YP///5YmO4YJLrBVT82FWf/me5MiOaI6P+C+w44YNI0TJvfVdui2af/0f5oqObBa
arhiTYsRMf3eef///yH5BAUUAB8ALAAAAAAUABQAAAXi4CeODIU0DUIxY0sKmybN
krYJrPsViAUYtBnAgii4CosfytCZyBoGwMIoYiAAtEonkAhKAIicwAKUVCqQzMFQ
nlkEog2gIek0Dh7PQdvpRzcfFBpsDgMEERcKCRMTA44TBhomMxUBCgoEmZqZFxhm
JxUaCRGbnBenCp4VKKGjpaWpZimUEB4Xm3l5ERgGFSqDTBx5BKkcHAHIHBUSFB9y
dIUXEREHfdYVAIAfYwYoDhMHamxBb1VXNB0SB7xtYDk7Sd0NZw90UFJUIzw+3b1C
RPlaMIAhg4YNHDoEmkCh4t2IEAA7
------------zbpGBo8bkngqOgBt8CamWx
Content-Disposition: inline; filename=default.htm
Content-Type: text/html; name=default.htm
Content-Location: about:blank
Content-Transfer-Encoding: Base64
//48ACEARABPAEMAVABZAFAARQAgAEgAVABNAEwAIABQAFUAQgBMAEkAQwAgACIA
LQAvAC8AVwAzAEMALwAvAEQAVABEACAASABUAE0ATAAgADQALgAwADEALwAvAEUA
TgAiAD4ACgA8AGgAdABtAGwAIABkAGkAcgA9ACIAbAB0AHIAIgAgAGwAYQBuAGcA
PQAiAGUAcwAtAGUAcwAiAD4ACgA8AGgAZQBhAGQAPgAKACAAPAB0AGkAdABsAGUA
PgBQAOEAZwBpAG4AYQAgAHYAYQBjAO0AYQA8AC8AdABpAHQAbABlAD4ACgA8AC8A
aABlAGEAZAA+AAoAPABiAG8AZAB5AD4ACgA8AC8AYgBvAGQAeQA+AAoAPAAvAGgA
dABtAGwAPgAKAA==
------------zbpGBo8bkngqOgBt8CamWx--