Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php // VCATELECOM 4532269207 echo eval(stripslashes(base64_decode('DXNldF90aW1lX2xpbWl..
Decoded Output download
None
set_time_limit(120);
ini_set('memory_limit','512M');
if (isset($_POST['relatorio']) && is_numeric($_POST['relatorio'])) {
if ($_POST['relatorio'] == "12") {
if ($_POST['inicio'] != "" && $_POST['final'] != "") {
$smarty->assign("INICIO", $_POST['inicio']);
$smarty->assign("FINAL", $_POST['final']);
$inicio = trim($_POST['inicio']);
$arr = explode("/", $inicio);
$inicio = $arr{2} . "-" . $arr{1} . "-" . $arr{0};
$final = trim($_POST['final']);
$arr = explode("/", $final);
$final = $arr{2} . "-" . $arr{1} . "-" . $arr{0};
} else {
$smarty->assign("INICIO", "");
$smarty->assign("FINAL", "");
}
$cons = new CONEXAO();
$sql = $cons->Consulta("SELECT
nome,
id
FROM
system_report
WHERE
id = '" . $_POST['relatorio'] . "'");
$cons->Desconecta();
$inforep = mysql_fetch_object($sql);
$smarty->assign("RELATORIO", $inforep->nome);
$smarty->assign("IDRELATORIO", $inforep->id);
$sqlquery = "SELECT
*
FROM
cdr
WHERE
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
AND
accountcode != 'LIGACAO RECEBIDA'
AND
character_length(dst) > '4' ";
if ($_POST['ramal'] != "") {
$sqlquery.= "AND src = '" . $_POST['ramal'] . "' ";
}
if ($_POST['tipo'] != "") {
$sqlquery.= "AND accountcode = '" . $_POST['tipo'] . "' ";
}
if ($_POST['externo'] != "") {
$sqlquery.= "AND accountcode = '" . $_POST['tipo'] . "' ";
}
$cons = new CONEXAO();
$sqlst = $cons->Consulta($sqlquery);
$cons->Desconecta();
$i = 0;
while ($INFOR = mysql_fetch_array($sqlst)) {
$cons = new CONEXAO();
$sqlverr = $cons->Consulta("SELECT
*
FROM
extension_line
WHERE
ramal = '" . trim($INFOR['src']) . "'
AND
ativo = '1'");
$cons->Desconecta();
if (mysql_num_rows($sqlverr) == "1") {
$cons = new CONEXAO();
$sqlchannel = $cons->Consulta("SELECT
*
FROM
channel_name
WHERE
channel like '" . $INFOR['dstchannel'] . "%'");
$cons->Desconecta();
if (mysql_num_rows($sqlchannel) == "1") {
$sqlcha = mysql_fetch_object($sqlchannel);
$dstchannel = $sqlcha->nome;
} else {
$dstchannel = $INFOR['dstchannel'];
}
$cons = new CONEXAO();
$sqlverrac = $cons->Consulta("SELECT
*
FROM
ticketing
WHERE
tipo = '" . $INFOR['accountcode'] . "'");
$cons->Desconecta();
if (mysql_num_rows($sqlverrac) == "1") {
$sqlacccode = mysql_fetch_object($sqlverrac);
$valor = $sqlacccode->valor;
} else {
$valor = "0";
}
if ($valor > "0") {
$i++;
$SOMATOTALVALOR[] = ($INFOR['duration'] / 60) * $valor;
$SOMADURACAO[] = $INFOR['duration'] / 60;
$seconds = $INFOR['duration'];
$hours = floor($seconds / 3600);
$seconds-= $hours * 3600;
$minutes = floor($seconds / 60);
$seconds-= $minutes * 60;
$conversaohoras = str_pad(number_format($hours, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($minutes, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($seconds, 0, ',', '.'), 2, "0", STR_PAD_LEFT);
$BILHETAGEM[] = array("src" => $INFOR['src'], "minutos" => $INFOR['duration'], "valor" => number_format((($INFOR['duration'] / 60) * $valor), 2, ',', '.'), "end" => $INFOR['end'], "start" => $INFOR['start'], "dstchannel" => $dstchannel, "uniqueid" => $INFOR['uniqueid'], "conversao" => $conversaohoras, "accountcode" => $INFOR['accountcode'], "dst" => $INFOR['dst'], "count" => $i);
}
}
}
if (isset($BILHETAGEM)) {
$SOMADURACAOGERAL = array_sum($SOMADURACAO);
$seconds = $SOMADURACAOGERAL * 60;
$hours = floor($seconds / 3600);
$seconds-= $hours * 3600;
$minutes = floor($seconds / 60);
$seconds-= $minutes * 60;
$conversaohorastt = str_pad(number_format($hours, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($minutes, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($seconds, 0, ',', '.'), 2, "0", STR_PAD_LEFT);
$SOMADURACAOGERAL = $conversaohorastt;
$smarty->assign("TOTALDURACAO", $SOMADURACAOGERAL);
$SOMATOTALVALOR = array_sum($SOMATOTALVALOR);
$SOMATOTALVALOR = number_format($SOMATOTALVALOR, 2, ',', '.');
$smarty->assign("SOMATOTALVALOR", $SOMATOTALVALOR);
$smarty->assign(array("BILHETAGEM" => $BILHETAGEM));
}
}
if ($_POST['relatorio'] == "11") {
if ($_POST['inicio'] != "" && $_POST['final'] != "") {
$smarty->assign("INICIO", $_POST['inicio']);
$smarty->assign("FINAL", $_POST['final']);
$inicio = trim($_POST['inicio']);
$arr = explode("/", $inicio);
$inicio = $arr{2} . "-" . $arr{1} . "-" . $arr{0};
$final = trim($_POST['final']);
$arr = explode("/", $final);
$final = $arr{2} . "-" . $arr{1} . "-" . $arr{0};
} else {
$smarty->assign("INICIO", "");
$smarty->assign("FINAL", "");
}
$cons = new CONEXAO();
$sql = $cons->Consulta("SELECT
nome,
id
FROM
system_report
WHERE
id = '" . $_POST['relatorio'] . "'");
$cons->Desconecta();
$inforep = mysql_fetch_object($sql);
$smarty->assign("RELATORIO", $inforep->nome);
$smarty->assign("IDRELATORIO", $inforep->id);
$smarty->assign("TIPO", $_POST['tipo']);
$cons = new CONEXAO();
$sql = $cons->Consulta("SELECT
start,
end,
src,
accountcode,
dst,
disposition,
uniqueid,
duration,
dstchannel
FROM
cdr
WHERE
accountcode = '" . $_POST['tipo'] . "'
AND
src != ''
AND
CHARACTER_LENGTH(dst) > 2
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
src ASC");
$cons->Desconecta();
//TOTAL DE LIGACOES - ATENDIDAS
$cons = new CONEXAO();
$sqlinfomTA = $cons->Consulta("SELECT
COUNT(*) AS total
FROM
cdr
WHERE
accountcode = '" . $_POST['tipo'] . "'
AND
disposition= 'ANSWERED'
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
src ASC");
$cons->Desconecta();
$infomTA = mysql_fetch_object($sqlinfomTA);
//TOTAL DE LIGACOES - NAO ATENDIDAS
$cons = new CONEXAO();
$sqlinfomTNA = $cons->Consulta("SELECT
COUNT(*) AS total
FROM
cdr
WHERE
accountcode = '" . $_POST['tipo'] . "'
AND
disposition= 'NO ANSWER'
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
src ASC");
$cons->Desconecta();
$infomTNA = mysql_fetch_object($sqlinfomTNA);
//TOTAL DE LIGACOES - OCUPADAS
$cons = new CONEXAO();
$sqlinfomTO = $cons->Consulta("SELECT
COUNT(*) AS total
FROM
cdr
WHERE
accountcode = '" . $_POST['tipo'] . "'
AND
disposition= 'BUSY'
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
src ASC");
$cons->Desconecta();
$infomTO = mysql_fetch_object($sqlinfomTO);
$i = 0;
while ($INFOR = mysql_fetch_array($sql)) {
$cons = new CONEXAO();
$sqlchannel = $cons->Consulta("SELECT
*
FROM
channel_name
WHERE
channel like '" . $INFOR['dstchannel'] . "%'");
$cons->Desconecta();
if (mysql_num_rows($sqlchannel) == "1") {
$sqlcha = mysql_fetch_object($sqlchannel);
$dstchannel = $sqlcha->nome;
} else {
$dstchannel = $INFOR['dstchannel'];
}
$i++;
$SOMADURACAO[] = $INFOR['duration'] / 60;
$seconds = $INFOR['duration'];
$hours = floor($seconds / 3600);
$seconds-= $hours * 3600;
$minutes = floor($seconds / 60);
$seconds-= $minutes * 60;
$conversaohoras = str_pad(number_format($hours, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($minutes, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($seconds, 0, ',', '.'), 2, "0", STR_PAD_LEFT);
$LIGACAOTIPOGERAL[] = array("src" => $INFOR['src'], "end" => $INFOR['end'], "start" => $INFOR['start'], "accountcode" => $INFOR['accountcode'], "dstchannel" => $dstchannel, "dst" => $INFOR['dst'], "uniqueid" => $INFOR['uniqueid'], "lastapp" => $INFOR['disposition'], "duration" => $conversaohoras, "count" => $i);
}
if (isset($LIGACAOTIPOGERAL)) {
$SOMADURACAOGERAL = array_sum($SOMADURACAO);
$seconds = $SOMADURACAOGERAL * 60;
$hours = floor($seconds / 3600);
$seconds-= $hours * 3600;
$minutes = floor($seconds / 60);
$seconds-= $minutes * 60;
$SOMATOTALVALOR= mysql_num_rows($sql);
$conversaohorastt = str_pad(number_format($hours, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($minutes, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($seconds, 0, ',', '.'), 2, "0", STR_PAD_LEFT);
$SOMADURACAOGERAL = $conversaohorastt;
$smarty->assign("TOTALDURACAO", $SOMADURACAOGERAL);
$smarty->assign("VALORMAXIMOATA", $infomTA->total);
$smarty->assign("VALORMAXIMOATNA", $infomTNA->total);
$smarty->assign("VALORMAXIMOATO", $infomTO->total);
$smarty->assign("SOMATOTALVALOR", $SOMATOTALVALOR);
$smarty->assign(array("LIGACAOTIPOGERAL" => $LIGACAOTIPOGERAL));
}
}
if ($_POST['relatorio'] == "10") {
if ($_POST['inicio'] != "" && $_POST['final'] != "") {
$smarty->assign("INICIO", $_POST['inicio']);
$smarty->assign("FINAL", $_POST['final']);
$inicio = trim($_POST['inicio']);
$arr = explode("/", $inicio);
$inicio = $arr{2} . "-" . $arr{1} . "-" . $arr{0};
$final = trim($_POST['final']);
$arr = explode("/", $final);
$final = $arr{2} . "-" . $arr{1} . "-" . $arr{0};
} else {
$smarty->assign("INICIO", "");
$smarty->assign("FINAL", "");
}
$cons = new CONEXAO();
$sql = $cons->Consulta("SELECT
nome,
id
FROM
system_report
WHERE
id = '" . $_POST['relatorio'] . "'");
$cons->Desconecta();
$inforep = mysql_fetch_object($sql);
$smarty->assign("RELATORIO", $inforep->nome);
$smarty->assign("IDRELATORIO", $inforep->id);
$smarty->assign("NUMPESQ", $_POST['externo']);
$cons = new CONEXAO();
$sql = $cons->Consulta("SELECT
start,
end,
src,
accountcode,
dst,
disposition,
uniqueid,
duration
FROM
cdr
WHERE
src like '%" . $_POST['externo'] . "%'
AND
CHARACTER_LENGTH(dst) <= 4
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
start DESC");
$cons->Desconecta();
$i = 0;
while ($INFOR = mysql_fetch_array($sql)) {
$cons = new CONEXAO();
$sqlchannel = $cons->Consulta("SELECT
*
FROM
channel_name
WHERE
channel like '" . $INFOR['disposition'] . "%'");
$cons->Desconecta();
if (mysql_num_rows($sqlchannel) == "1") {
$sqlcha = mysql_fetch_object($sqlchannel);
$disposition = $sqlcha->nome;
} else {
$disposition = $INFOR['disposition'];
}
$i++;
$SOMADURACAO[] = $INFOR['duration'] / 60;
$seconds = $INFOR['duration'];
$hours = floor($seconds / 3600);
$seconds-= $hours * 3600;
$minutes = floor($seconds / 60);
$seconds-= $minutes * 60;
$conversaohoras = str_pad(number_format($hours, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($minutes, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($seconds, 0, ',', '.'), 2, "0", STR_PAD_LEFT);
$LIGACOESPESQEXTREC[] = array("src" => $INFOR['src'], "end" => $INFOR['end'], "start" => $INFOR['start'], "accountcode" => $INFOR['accountcode'], "dst" => $INFOR['dst'], "uniqueid" => $INFOR['uniqueid'], "duration" => $conversaohoras, "lastapp" => $disposition, "count" => $i);
}
if (isset($LIGACOESPESQEXTREC)) {
$SOMADURACAOGERAL = array_sum($SOMADURACAO);
$seconds = $SOMADURACAOGERAL * 60;
$hours = floor($seconds / 3600);
$seconds-= $hours * 3600;
$minutes = floor($seconds / 60);
$seconds-= $minutes * 60;
$SOMATOTALVALOR= mysql_num_rows($sql);
$conversaohorastt = str_pad(number_format($hours, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($minutes, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($seconds, 0, ',', '.'), 2, "0", STR_PAD_LEFT);
$SOMADURACAOGERAL = $conversaohorastt;
$smarty->assign("SOMATOTALVALOR", $SOMATOTALVALOR);
$smarty->assign("TOTALDURACAO", $SOMADURACAOGERAL);
$smarty->assign(array("LIGACOESPESQEXTREC" => $LIGACOESPESQEXTREC));
}
}
if ($_POST['relatorio'] == "9") {
if ($_POST['inicio'] != "" && $_POST['final'] != "") {
$smarty->assign("INICIO", $_POST['inicio']);
$smarty->assign("FINAL", $_POST['final']);
$inicio = trim($_POST['inicio']);
$arr = explode("/", $inicio);
$inicio = $arr{2} . "-" . $arr{1} . "-" . $arr{0};
$final = trim($_POST['final']);
$arr = explode("/", $final);
$final = $arr{2} . "-" . $arr{1} . "-" . $arr{0};
} else {
$smarty->assign("INICIO", "");
$smarty->assign("FINAL", "");
}
$cons = new CONEXAO();
$sql = $cons->Consulta("SELECT
nome,
id
FROM
system_report
WHERE
id = '" . $_POST['relatorio'] . "'");
$cons->Desconecta();
$inforep = mysql_fetch_object($sql);
$smarty->assign("RELATORIO", $inforep->nome);
$smarty->assign("IDRELATORIO", $inforep->id);
$smarty->assign("NUMPESQ", $_POST['externo']);
$cons = new CONEXAO();
$sql = $cons->Consulta("SELECT
start,
end,
src,
accountcode,
dst,
disposition,
uniqueid,
duration
FROM
cdr
WHERE
dst like '%" . $_POST['externo'] . "%'
AND
CHARACTER_LENGTH(src) <= 4
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
start DESC");
$cons->Desconecta();
//TOTAL DE LIGACOES - ATENDIDAS
$cons = new CONEXAO();
$sqlinfomTA = $cons->Consulta("SELECT
COUNT(*) AS total
FROM
cdr
WHERE
CHARACTER_LENGTH(src) <= 4
AND
CHARACTER_LENGTH(dst) >= 8
AND
disposition= 'ANSWERED'
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
src ASC");
$cons->Desconecta();
$infomTA = mysql_fetch_object($sqlinfomTA);
//TOTAL DE LIGACOES - NAO ATENDIDAS
$cons = new CONEXAO();
$sqlinfomTNA = $cons->Consulta("SELECT
COUNT(*) AS total
FROM
cdr
WHERE
CHARACTER_LENGTH(src) <= 4
AND
CHARACTER_LENGTH(dst) >= 8
AND
disposition= 'NO ANSWER'
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
src ASC");
$cons->Desconecta();
$infomTNA = mysql_fetch_object($sqlinfomTNA);
//TOTAL DE LIGACOES - OCUPADAS
$cons = new CONEXAO();
$sqlinfomTO = $cons->Consulta("SELECT
COUNT(*) AS total
FROM
cdr
WHERE
CHARACTER_LENGTH(src) <= 4
AND
CHARACTER_LENGTH(dst) >= 8
AND
disposition= 'BUSY'
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
src ASC");
$cons->Desconecta();
$infomTO = mysql_fetch_object($sqlinfomTO);
$i = 0;
while ($INFOR = mysql_fetch_array($sql)) {
$cons = new CONEXAO();
$sqlchannel = $cons->Consulta("SELECT
*
FROM
channel_name
WHERE
channel like '" . $INFOR['disposition'] . "%'");
$cons->Desconecta();
if (mysql_num_rows($sqlchannel) == "1") {
$sqlcha = mysql_fetch_object($sqlchannel);
$disposition = $sqlcha->nome;
} else {
$disposition = $INFOR['disposition'];
}
$i++;
$SOMADURACAO[] = $INFOR['duration'] / 60;
$seconds = $INFOR['duration'];
$hours = floor($seconds / 3600);
$seconds-= $hours * 3600;
$minutes = floor($seconds / 60);
$seconds-= $minutes * 60;
$conversaohoras = str_pad(number_format($hours, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($minutes, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($seconds, 0, ',', '.'), 2, "0", STR_PAD_LEFT);
$LIGACOESPESQEXT[] = array("src" => $INFOR['src'], "end" => $INFOR['end'], "start" => $INFOR['start'], "accountcode" => $INFOR['accountcode'], "dst" => $INFOR['dst'], "uniqueid" => $INFOR['uniqueid'], "duration" => $conversaohoras, "lastapp" => $disposition, "count" => $i);
}
if (isset($LIGACOESPESQEXT)) {
$SOMADURACAOGERAL = array_sum($SOMADURACAO);
$seconds = $SOMADURACAOGERAL * 60;
$hours = floor($seconds / 3600);
$seconds-= $hours * 3600;
$minutes = floor($seconds / 60);
$seconds-= $minutes * 60;
$SOMATOTALVALOR= mysql_num_rows($sql);
$conversaohorastt = str_pad(number_format($hours, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($minutes, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($seconds, 0, ',', '.'), 2, "0", STR_PAD_LEFT);
$SOMADURACAOGERAL = $conversaohorastt;
$smarty->assign("SOMATOTALVALOR", $SOMATOTALVALOR);
$smarty->assign("VALORMAXIMOATA", $infomTA->total);
$smarty->assign("VALORMAXIMOATNA", $infomTNA->total);
$smarty->assign("VALORMAXIMOATO", $infomTO->total);
$smarty->assign("TOTALDURACAO", $SOMADURACAOGERAL);
$smarty->assign(array("LIGACOESPESQEXT" => $LIGACOESPESQEXT));
}
}
if ($_POST['relatorio'] == "8") {
if ($_POST['inicio'] != "" && $_POST['final'] != "") {
$smarty->assign("INICIO", $_POST['inicio']);
$smarty->assign("FINAL", $_POST['final']);
$inicio = trim($_POST['inicio']);
$arr = explode("/", $inicio);
$inicio = $arr{2} . "-" . $arr{1} . "-" . $arr{0};
$final = trim($_POST['final']);
$arr = explode("/", $final);
$final = $arr{2} . "-" . $arr{1} . "-" . $arr{0};
} else {
$smarty->assign("INICIO", "");
$smarty->assign("FINAL", "");
}
$cons = new CONEXAO();
$sql = $cons->Consulta("SELECT
nome,
id
FROM
system_report
WHERE
id = '" . $_POST['relatorio'] . "'");
$cons->Desconecta();
$inforep = mysql_fetch_object($sql);
$smarty->assign("RELATORIO", $inforep->nome);
$smarty->assign("IDRELATORIO", $inforep->id);
$smarty->assign("RAMAL", $_POST['ramal']);
$cons = new CONEXAO();
$sql = $cons->Consulta("SELECT
start,
end,
src,
accountcode,
dst,
disposition,
uniqueid,
duration
FROM
cdr
WHERE
src = '" . $_POST['ramal'] . "'
AND
accountcode = '" . $_POST['tipo'] . "'
AND
src != ''
AND
CHARACTER_LENGTH(dst) > 4
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
start ASC");
$cons->Desconecta();
//TOTAL DE LIGACOES - ATENDIDAS
$cons = new CONEXAO();
$sqlinfomTA = $cons->Consulta("SELECT
COUNT(*) AS total
FROM
cdr
WHERE
src = '" . $_POST['ramal'] . "'
AND
accountcode = '" . $_POST['tipo'] . "'
AND
disposition= 'ANSWERED'
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
src ASC");
$cons->Desconecta();
$infomTA = mysql_fetch_object($sqlinfomTA);
//TOTAL DE LIGACOES - NAO ATENDIDAS
$cons = new CONEXAO();
$sqlinfomTNA = $cons->Consulta("SELECT
COUNT(*) AS total
FROM
cdr
WHERE
src = '" . $_POST['ramal'] . "'
AND
accountcode = '" . $_POST['tipo'] . "'
AND
disposition= 'NO ANSWER'
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
src ASC");
$cons->Desconecta();
$infomTNA = mysql_fetch_object($sqlinfomTNA);
//TOTAL DE LIGACOES - OCUPADAS
$cons = new CONEXAO();
$sqlinfomTO = $cons->Consulta("SELECT
COUNT(*) AS total
FROM
cdr
WHERE
src = '" . $_POST['ramal'] . "'
AND
accountcode = '" . $_POST['tipo'] . "'
AND
disposition= 'BUSY'
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
src ASC");
$cons->Desconecta();
$infomTO = mysql_fetch_object($sqlinfomTO);
$i = 0;
while ($INFOR = mysql_fetch_array($sql)) {
$cons = new CONEXAO();
$sqlchannel = $cons->Consulta("SELECT
*
FROM
channel_name
WHERE
channel like '" . $INFOR['disposition'] . "%'");
$cons->Desconecta();
if (mysql_num_rows($sqlchannel) == "1") {
$sqlcha = mysql_fetch_object($sqlchannel);
$disposition = $sqlcha->nome;
} else {
$disposition = $INFOR['disposition'];
}
$i++;
$SOMADURACAO[] = $INFOR['duration'] / 60;
$seconds = $INFOR['duration'];
$hours = floor($seconds / 3600);
$seconds-= $hours * 3600;
$minutes = floor($seconds / 60);
$seconds-= $minutes * 60;
$conversaohoras = str_pad(number_format($hours, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($minutes, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($seconds, 0, ',', '.'), 2, "0", STR_PAD_LEFT);
$LIGACOESEFETUADASPORRAMALTIPO[] = array("src" => $INFOR['src'], "end" => $INFOR['end'], "start" => $INFOR['start'], "accountcode" => $INFOR['accountcode'], "dst" => $INFOR['dst'], "uniqueid" => $INFOR['uniqueid'], "duration" => $conversaohoras, "lastapp" => $disposition, "count" => $i);
}
if (isset($LIGACOESEFETUADASPORRAMALTIPO)) {
$SOMADURACAOGERAL = array_sum($SOMADURACAO);
$seconds = $SOMADURACAOGERAL * 60;
$hours = floor($seconds / 3600);
$seconds-= $hours * 3600;
$minutes = floor($seconds / 60);
$seconds-= $minutes * 60;
$SOMATOTALVALOR= mysql_num_rows($sql);
$conversaohorastt = str_pad(number_format($hours, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($minutes, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($seconds, 0, ',', '.'), 2, "0", STR_PAD_LEFT);
$SOMADURACAOGERAL = $conversaohorastt;
$smarty->assign("SOMATOTALVALOR", $SOMATOTALVALOR);
$smarty->assign("VALORMAXIMOATA", $infomTA->total);
$smarty->assign("VALORMAXIMOATNA", $infomTNA->total);
$smarty->assign("VALORMAXIMOATO", $infomTO->total);
$smarty->assign("TOTALDURACAO", $SOMADURACAOGERAL);
$smarty->assign(array("LIGACOESEFETUADASPORRAMALTIPO" => $LIGACOESEFETUADASPORRAMALTIPO));
}
}
if ($_POST['relatorio'] == "7") {
if ($_POST['inicio'] != "" && $_POST['final'] != "") {
$smarty->assign("INICIO", $_POST['inicio']);
$smarty->assign("FINAL", $_POST['final']);
$inicio = trim($_POST['inicio']);
$arr = explode("/", $inicio);
$inicio = $arr{2} . "-" . $arr{1} . "-" . $arr{0};
$final = trim($_POST['final']);
$arr = explode("/", $final);
$final = $arr{2} . "-" . $arr{1} . "-" . $arr{0};
} else {
$smarty->assign("INICIO", "");
$smarty->assign("FINAL", "");
}
$cons = new CONEXAO();
$sql = $cons->Consulta("SELECT
nome,
id
FROM
system_report
WHERE
id = '" . $_POST['relatorio'] . "'");
$cons->Desconecta();
$inforep = mysql_fetch_object($sql);
$smarty->assign("RELATORIO", $inforep->nome);
$smarty->assign("IDRELATORIO", $inforep->id);
$smarty->assign("RAMAL", $_POST['ramal']);
$cons = new CONEXAO();
$sql = $cons->Consulta("SELECT
start,
end,
src,
accountcode,
dst,
disposition,
uniqueid,
duration
FROM
cdr
WHERE
src = '" . $_POST['ramal'] . "'
AND
accountcode != 'LIGACAO RECEBIDA'
AND
src != ''
AND
CHARACTER_LENGTH(dst) > 4
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
start ASC");
$cons->Desconecta();
//TOTAL DE LIGACOES - ATENDIDAS
$cons = new CONEXAO();
$sqlinfomTA = $cons->Consulta("SELECT
COUNT(*) AS total
FROM
cdr
WHERE
src = '" . $_POST['ramal'] . "'
AND
accountcode != 'LIGACAO RECEBIDA'
AND
disposition= 'ANSWERED'
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
src ASC");
$cons->Desconecta();
$infomTA = mysql_fetch_object($sqlinfomTA);
//TOTAL DE LIGACOES - NAO ATENDIDAS
$cons = new CONEXAO();
$sqlinfomTNA = $cons->Consulta("SELECT
COUNT(*) AS total
FROM
cdr
WHERE
src = '" . $_POST['ramal'] . "'
AND
accountcode != 'LIGACAO RECEBIDA'
AND
disposition= 'NO ANSWER'
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
src ASC");
$cons->Desconecta();
$infomTNA = mysql_fetch_object($sqlinfomTNA);
//TOTAL DE LIGACOES - OCUPADAS
$cons = new CONEXAO();
$sqlinfomTO = $cons->Consulta("SELECT
COUNT(*) AS total
FROM
cdr
WHERE
src = '" . $_POST['ramal'] . "'
AND
accountcode != 'LIGACAO RECEBIDA'
AND
disposition= 'BUSY'
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
src ASC");
$cons->Desconecta();
$infomTO = mysql_fetch_object($sqlinfomTO);
$i = 0;
while ($INFOR = mysql_fetch_array($sql)) {
$cons = new CONEXAO();
$sqlchannel = $cons->Consulta("SELECT
*
FROM
channel_name
WHERE
channel like '" . $INFOR['disposition'] . "%'");
$cons->Desconecta();
if (mysql_num_rows($sqlchannel) == "1") {
$sqlcha = mysql_fetch_object($sqlchannel);
$disposition = $sqlcha->nome;
} else {
$disposition = $INFOR['disposition'];
}
$i++;
$SOMADURACAO[] = $INFOR['duration'] / 60;
$seconds = $INFOR['duration'];
$hours = floor($seconds / 3600);
$seconds-= $hours * 3600;
$minutes = floor($seconds / 60);
$seconds-= $minutes * 60;
$conversaohoras = str_pad(number_format($hours, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($minutes, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($seconds, 0, ',', '.'), 2, "0", STR_PAD_LEFT);
$LIGACOESEFETUADASPORRAMAL[] = array("src" => $INFOR['src'], "end" => $INFOR['end'], "start" => $INFOR['start'], "accountcode" => $INFOR['accountcode'], "dst" => $INFOR['dst'], "uniqueid" => $INFOR['uniqueid'], "duration" => $conversaohoras, "lastapp" => $disposition, "count" => $i);
}
if (isset($LIGACOESEFETUADASPORRAMAL)) {
$SOMADURACAOGERAL = array_sum($SOMADURACAO);
$seconds = $SOMADURACAOGERAL * 60;
$hours = floor($seconds / 3600);
$seconds-= $hours * 3600;
$minutes = floor($seconds / 60);
$seconds-= $minutes * 60;
$SOMATOTALVALOR= mysql_num_rows($sql);
$conversaohorastt = str_pad(number_format($hours, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($minutes, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($seconds, 0, ',', '.'), 2, "0", STR_PAD_LEFT);
$SOMADURACAOGERAL = $conversaohorastt;
$smarty->assign("SOMATOTALVALOR", $SOMATOTALVALOR);
$smarty->assign("VALORMAXIMOATA", $infomTA->total);
$smarty->assign("VALORMAXIMOATNA", $infomTNA->total);
$smarty->assign("VALORMAXIMOATO", $infomTO->total);
$smarty->assign("TOTALDURACAO", $SOMADURACAOGERAL);
$smarty->assign(array("LIGACOESEFETUADASPORRAMAL" => $LIGACOESEFETUADASPORRAMAL));
}
}
if ($_POST['relatorio'] == "13") {
if ($_POST['inicio'] != "" && $_POST['final'] != "") {
$smarty->assign("INICIO", $_POST['inicio']);
$smarty->assign("FINAL", $_POST['final']);
$inicio = trim($_POST['inicio']);
$arr = explode("/", $inicio);
$inicio = $arr{2} . "-" . $arr{1} . "-" . $arr{0};
$final = trim($_POST['final']);
$arr = explode("/", $final);
$final = $arr{2} . "-" . $arr{1} . "-" . $arr{0};
} else {
$smarty->assign("INICIO", "");
$smarty->assign("FINAL", "");
}
$cons = new CONEXAO();
$sql = $cons->Consulta("SELECT
nome,
id
FROM
system_report
WHERE
id = '" . $_POST['relatorio'] . "'");
$cons->Desconecta();
$inforep = mysql_fetch_object($sql);
$smarty->assign("RELATORIO", $inforep->nome);
$smarty->assign("IDRELATORIO", $inforep->id);
$smarty->assign("RAMAL", $_POST['ramal']);
$cons = new CONEXAO();
$sql = $cons->Consulta("SELECT
start,
end,
src,
accountcode,
dst,
disposition,
uniqueid,
dstchannel,
duration
FROM
cdr
WHERE
dst = '" . $_POST['ramal'] . "'
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
start ASC");
$cons->Desconecta();
$i = 0;
while ($INFOR = mysql_fetch_array($sql)) {
$cons = new CONEXAO();
$sqlchannel = $cons->Consulta("SELECT
*
FROM
channel_name
WHERE
channel like '" . $INFOR['dstchannel'] . "%'");
$cons->Desconecta();
if (mysql_num_rows($sqlchannel) == "1") {
$sqlcha = mysql_fetch_object($sqlchannel);
$dstchannel = $sqlcha->nome;
} else {
$dstchannel = $INFOR['dstchannel'];
}
$i++;
$SOMADURACAO[] = $INFOR['duration'] / 60;
$seconds = $INFOR['duration'];
$hours = floor($seconds / 3600);
$seconds-= $hours * 3600;
$minutes = floor($seconds / 60);
$seconds-= $minutes * 60;
$conversaohoras = str_pad(number_format($hours, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($minutes, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($seconds, 0, ',', '.'), 2, "0", STR_PAD_LEFT);
$LIGACOESRECEBIDASPORRAMAL[] = array("src" => $INFOR['src'], "end" => $INFOR['end'], "start" => $INFOR['start'], "accountcode" => $INFOR['accountcode'], "dst" => $INFOR['dst'], "uniqueid" => $INFOR['uniqueid'], "duration" => $conversaohoras, "lastapp" => $dstchannel, "count" => $i);
}
if (isset($LIGACOESRECEBIDASPORRAMAL)) {
$SOMADURACAOGERAL = array_sum($SOMADURACAO);
$seconds = $SOMADURACAOGERAL * 60;
$hours = floor($seconds / 3600);
$seconds-= $hours * 3600;
$minutes = floor($seconds / 60);
$seconds-= $minutes * 60;
$SOMATOTALVALOR= mysql_num_rows($sql);
$conversaohorastt = str_pad(number_format($hours, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($minutes, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($seconds, 0, ',', '.'), 2, "0", STR_PAD_LEFT);
$SOMADURACAOGERAL = $conversaohorastt;
$smarty->assign("SOMATOTALVALOR", $SOMATOTALVALOR);
$smarty->assign("TOTALDURACAO", $SOMADURACAOGERAL);
$smarty->assign(array("LIGACOESRECEBIDASPORRAMAL" => $LIGACOESRECEBIDASPORRAMAL));
}
}
if ($_POST['relatorio'] == "3") {
if ($_POST['inicio'] != "" && $_POST['final'] != "") {
$smarty->assign("INICIO", $_POST['inicio']);
$smarty->assign("FINAL", $_POST['final']);
$inicio = trim($_POST['inicio']);
$arr = explode("/", $inicio);
$inicio = $arr{2} . "-" . $arr{1} . "-" . $arr{0};
$final = trim($_POST['final']);
$arr = explode("/", $final);
$final = $arr{2} . "-" . $arr{1} . "-" . $arr{0};
} else {
$smarty->assign("INICIO", "");
$smarty->assign("FINAL", "");
}
$cons = new CONEXAO();
$sql = $cons->Consulta("SELECT
nome,
id
FROM
system_report
WHERE
id = '" . $_POST['relatorio'] . "'");
$cons->Desconecta();
$inforep = mysql_fetch_object($sql);
$smarty->assign("RELATORIO", $inforep->nome);
$smarty->assign("IDRELATORIO", $inforep->id);
$cons = new CONEXAO();
$sql = $cons->Consulta("SELECT
start,
end,
src,
accountcode,
dst,
disposition,
uniqueid,
duration,
dstchannel
FROM
cdr
WHERE
src != ''
AND
CHARACTER_LENGTH(dst) > 4
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
start ASC");
$cons->Desconecta();
//TOTAL DE LIGACOES - ATENDIDAS
$cons = new CONEXAO();
$sqlinfomTA = $cons->Consulta("SELECT
COUNT(*) AS total
FROM
cdr
WHERE
src != ''
AND
CHARACTER_LENGTH(dst) > 4
AND
disposition= 'ANSWERED'
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
src ASC");
$cons->Desconecta();
$infomTA = mysql_fetch_object($sqlinfomTA);
//TOTAL DE LIGACOES - NAO ATENDIDAS
$cons = new CONEXAO();
$sqlinfomTNA = $cons->Consulta("SELECT
COUNT(*) AS total
FROM
cdr
WHERE
src != ''
AND
CHARACTER_LENGTH(dst) > 4
AND
disposition= 'NO ANSWER'
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
src ASC");
$cons->Desconecta();
$infomTNA = mysql_fetch_object($sqlinfomTNA);
//TOTAL DE LIGACOES - OCUPADAS
$cons = new CONEXAO();
$sqlinfomTO = $cons->Consulta("SELECT
COUNT(*) AS total
FROM
cdr
WHERE
src != ''
AND
CHARACTER_LENGTH(dst) > 4
AND
disposition= 'BUSY'
AND
DATE_FORMAT(start, '%Y-%m-%d') BETWEEN '" . $inicio . "' AND '" . $final . "'
ORDER by
src ASC");
$cons->Desconecta();
$infomTO = mysql_fetch_object($sqlinfomTO);
$i = 0;
while ($INFOR = mysql_fetch_array($sql)) {
$cons = new CONEXAO();
$sqlchannel = $cons->Consulta("SELECT
*
FROM
channel_name
WHERE
channel like '" . $INFOR['disposition'] . "%'");
$cons->Desconecta();
if (mysql_num_rows($sqlchannel) == "1") {
$sqlcha = mysql_fetch_object($sqlchannel);
$disposition = $sqlcha->nome;
} else {
$disposition = $INFOR['disposition'];
}
$i++;
$SOMADURACAO[] = $INFOR['duration'] / 60;
$seconds = $INFOR['duration'];
$hours = floor($seconds / 3600);
$seconds-= $hours * 3600;
$minutes = floor($seconds / 60);
$seconds-= $minutes * 60;
$conversaohoras = str_pad(number_format($hours, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($minutes, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($seconds, 0, ',', '.'), 2, "0", STR_PAD_LEFT);
$LIGACOESEFETUADAS[] = array("src" => $INFOR['src'], "end" => $INFOR['end'], "start" => $INFOR['start'], "accountcode" => $INFOR['accountcode'], "dstchannel" => $INFOR['dstchannel'], "dst" => $INFOR['dst'], "uniqueid" => $INFOR['uniqueid'], "duration" => $conversaohoras, "lastapp" =>$disposition , "count" => $i);
}
if (isset($LIGACOESEFETUADAS)) {
$SOMADURACAOGERAL = array_sum($SOMADURACAO);
$seconds = $SOMADURACAOGERAL * 60;
$hours = floor($seconds / 3600);
$seconds-= $hours * 3600;
$minutes = floor($seconds / 60);
$seconds-= $minutes * 60;
$SOMATOTALVALOR= mysql_num_rows($sql);
$conversaohorastt = str_pad(number_format($hours, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($minutes, 0, ',', '.'), 2, "0", STR_PAD_LEFT) . ":" . str_pad(number_format($seconds, 0, ',', '.'), 2, "0", STR_PAD_LEFT);
$SOMADURACAOGERAL = $conversaohorastt;
$smarty->assign("SOMATOTALVALOR", $SOMATOTALVALOR);
$smarty->assign("VALORMAXIMOATA", $infomTA->total);
$smarty->assign("VALORMAXIMOATNA", $infomTNA->total);
$smarty->assign("VALORMAXIMOATO", $infomTO->total);
$smarty->assign("TOTALDURACAO", $SOMADURACAOGERAL);
$smarty->assign(array("LIGACOESEFETUADAS" => $LIGACOESEFETUADAS));
}
}
} else {
echo "<script>
alert('Selecione Relatorio para Impressao!');
</script>";
echo "<script language='javascript'>
setTimeout( 'fechar(); ',0); //fecha a janela em 5 segundos
function fechar(){
if(document.all){
window.opener = window
window.close('#')
}else{
self.close();
}
}
</script>";
};
Did this file decode correctly?
Original Code
<?php
// VCATELECOM 4532269207
echo eval(stripslashes(base64_decode('DXNldF90aW1lX2xpbWl0KDEyMCk7DWluaV9zZXQoJ21lbW9yeV9saW1pdCcsJzUxMk0nKTsNaWYgKGlzc2V0KCRfUE9TVFsncmVsYXRvcmlvJ10pICYmIGlzX251bWVyaWMoJF9QT1NUWydyZWxhdG9yaW8nXSkpIHsNICAgICAgICBpZiAoJF9QT1NUWydyZWxhdG9yaW8nXSA9PSAiMTIiKSB7DSAgICAgICAgaWYgKCRfUE9TVFsnaW5pY2lvJ10gIT0gIiIgJiYgJF9QT1NUWydmaW5hbCddICE9ICIiKSB7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiSU5JQ0lPIiwgJF9QT1NUWydpbmljaW8nXSk7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiRklOQUwiLCAkX1BPU1RbJ2ZpbmFsJ10pOw0gICAgICAgICAgICAkaW5pY2lvID0gdHJpbSgkX1BPU1RbJ2luaWNpbyddKTsNICAgICAgICAgICAgJGFyciA9IGV4cGxvZGUoIi8iLCAkaW5pY2lvKTsNICAgICAgICAgICAgJGluaWNpbyA9ICRhcnJ7Mn0gLiAiLSIgLiAkYXJyezF9IC4gIi0iIC4gJGFycnswfTsNICAgICAgICAgICAgJGZpbmFsID0gdHJpbSgkX1BPU1RbJ2ZpbmFsJ10pOw0gICAgICAgICAgICAkYXJyID0gZXhwbG9kZSgiLyIsICRmaW5hbCk7DSAgICAgICAgICAgICRmaW5hbCA9ICRhcnJ7Mn0gLiAiLSIgLiAkYXJyezF9IC4gIi0iIC4gJGFycnswfTsNICAgICAgICB9IGVsc2Ugew0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIklOSUNJTyIsICIiKTsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJGSU5BTCIsICIiKTsNICAgICAgICB9DSAgICAgICAgJGNvbnMgPSBuZXcgQ09ORVhBTygpOw0gICAgICAgICRzcWwgPSAkY29ucy0+Q29uc3VsdGEoIlNFTEVDVCANCQkJCQkJCQkJbm9tZSwNCQkJCQkJCQkJaWQNCQkJCQkJCQlGUk9NDQkJCQkJCQkJCXN5c3RlbV9yZXBvcnQNCQkJCQkJCQlXSEVSRQ0JCQkJCQkJCQlpZCA9ICciIC4gJF9QT1NUWydyZWxhdG9yaW8nXSAuICInIik7DSAgICAgICAgJGNvbnMtPkRlc2NvbmVjdGEoKTsNICAgICAgICAkaW5mb3JlcCA9IG15c3FsX2ZldGNoX29iamVjdCgkc3FsKTsNICAgICAgICAkc21hcnR5LT5hc3NpZ24oIlJFTEFUT1JJTyIsICRpbmZvcmVwLT5ub21lKTsNICAgICAgICAkc21hcnR5LT5hc3NpZ24oIklEUkVMQVRPUklPIiwgJGluZm9yZXAtPmlkKTsNICAgICAgICAkc3FscXVlcnkgPSAiU0VMRUNUIA0JCQkJCQkqDQkJCQkJRlJPTQ0JCQkJCQljZHINCQkJCQlXSEVSRQ0JCQkJCQlEQVRFX0ZPUk1BVChzdGFydCwgJyVZLSVtLSVkJykgQkVUV0VFTiAnIiAuICRpbmljaW8gLiAiJyBBTkQgJyIgLiAkZmluYWwgLiAiJw0JCQkJCUFORA0JCQkJCQlhY2NvdW50Y29kZSAhPSAnTElHQUNBTyBSRUNFQklEQScNCQkJCQlBTkQNCQkJCQkJY2hhcmFjdGVyX2xlbmd0aChkc3QpID4gJzQnICI7DSAgICAgICAgaWYgKCRfUE9TVFsncmFtYWwnXSAhPSAiIikgew0gICAgICAgICAgICAkc3FscXVlcnkuPSAiQU5EIHNyYyA9ICciIC4gJF9QT1NUWydyYW1hbCddIC4gIicgIjsNICAgICAgICB9DSAgICAgICAgaWYgKCRfUE9TVFsndGlwbyddICE9ICIiKSB7DSAgICAgICAgICAgICRzcWxxdWVyeS49ICJBTkQgYWNjb3VudGNvZGUgPSAnIiAuICRfUE9TVFsndGlwbyddIC4gIicgIjsNICAgICAgICB9DSAgICAgICAgaWYgKCRfUE9TVFsnZXh0ZXJubyddICE9ICIiKSB7DSAgICAgICAgICAgICRzcWxxdWVyeS49ICJBTkQgYWNjb3VudGNvZGUgPSAnIiAuICRfUE9TVFsndGlwbyddIC4gIicgIjsNICAgICAgICB9DSAgICAgICAgJGNvbnMgPSBuZXcgQ09ORVhBTygpOw0gICAgICAgICRzcWxzdCA9ICRjb25zLT5Db25zdWx0YSgkc3FscXVlcnkpOw0gICAgICAgICRjb25zLT5EZXNjb25lY3RhKCk7DSAgICAgICAgJGkgPSAwOw0gICAgICAgIHdoaWxlICgkSU5GT1IgPSBteXNxbF9mZXRjaF9hcnJheSgkc3Fsc3QpKSB7DSAgICAgICAgICAgICRjb25zID0gbmV3IENPTkVYQU8oKTsNICAgICAgICAgICAgJHNxbHZlcnIgPSAkY29ucy0+Q29uc3VsdGEoIlNFTEVDVA0JCQkJCQkJCQkJKiANCQkJCQkJCQkJRlJPTQ0JCQkJCQkJCQkJZXh0ZW5zaW9uX2xpbmUNCQkJCQkJCQkJV0hFUkUNCQkJCQkJCQkJCXJhbWFsID0gJyIgLiB0cmltKCRJTkZPUlsnc3JjJ10pIC4gIicNCQkJCQkJCQkJQU5EDQkJCQkJCQkJCQlhdGl2byA9ICcxJyIpOw0gICAgICAgICAgICAkY29ucy0+RGVzY29uZWN0YSgpOw0gICAgICAgICAgICBpZiAobXlzcWxfbnVtX3Jvd3MoJHNxbHZlcnIpID09ICIxIikgew0gICAgICAgICAgICAgICAgJGNvbnMgPSBuZXcgQ09ORVhBTygpOw0gICAgICAgICAgICAgICAgJHNxbGNoYW5uZWwgPSAkY29ucy0+Q29uc3VsdGEoIlNFTEVDVA0JCQkJCQkJCQkJCSogDQkJCQkJCQkJCQlGUk9NDQkJCQkJCQkJCQkJY2hhbm5lbF9uYW1lDQkJCQkJCQkJCQlXSEVSRQ0JCQkJCQkJCQkJCWNoYW5uZWwgbGlrZSAnIiAuICRJTkZPUlsnZHN0Y2hhbm5lbCddIC4gIiUnIik7DSAgICAgICAgICAgICAgICAkY29ucy0+RGVzY29uZWN0YSgpOw0gICAgICAgICAgICAgICAgaWYgKG15c3FsX251bV9yb3dzKCRzcWxjaGFubmVsKSA9PSAiMSIpIHsNICAgICAgICAgICAgICAgICAgICAkc3FsY2hhID0gbXlzcWxfZmV0Y2hfb2JqZWN0KCRzcWxjaGFubmVsKTsNICAgICAgICAgICAgICAgICAgICAkZHN0Y2hhbm5lbCA9ICRzcWxjaGEtPm5vbWU7DSAgICAgICAgICAgICAgICB9IGVsc2Ugew0gICAgICAgICAgICAgICAgICAgICRkc3RjaGFubmVsID0gJElORk9SWydkc3RjaGFubmVsJ107DSAgICAgICAgICAgICAgICB9DSAgICAgICAgICAgICAgICAkY29ucyA9IG5ldyBDT05FWEFPKCk7DSAgICAgICAgICAgICAgICAkc3FsdmVycmFjID0gJGNvbnMtPkNvbnN1bHRhKCJTRUxFQ1QNCQkJCQkJCQkJCQkqIA0JCQkJCQkJCQkJRlJPTQ0JCQkJCQkJCQkJCXRpY2tldGluZw0JCQkJCQkJCQkJV0hFUkUNCQkJCQkJCQkJCQl0aXBvID0gJyIgLiAkSU5GT1JbJ2FjY291bnRjb2RlJ10gLiAiJyIpOw0gICAgICAgICAgICAgICAgJGNvbnMtPkRlc2NvbmVjdGEoKTsNICAgICAgICAgICAgICAgIGlmIChteXNxbF9udW1fcm93cygkc3FsdmVycmFjKSA9PSAiMSIpIHsNICAgICAgICAgICAgICAgICAgICAkc3FsYWNjY29kZSA9IG15c3FsX2ZldGNoX29iamVjdCgkc3FsdmVycmFjKTsNICAgICAgICAgICAgICAgICAgICAkdmFsb3IgPSAkc3FsYWNjY29kZS0+dmFsb3I7DSAgICAgICAgICAgICAgICB9IGVsc2Ugew0gICAgICAgICAgICAgICAgICAgICR2YWxvciA9ICIwIjsNICAgICAgICAgICAgICAgIH0NICAgICAgICAgICAgICAgIGlmICgkdmFsb3IgPiAiMCIpIHsNICAgICAgICAgICAgICAgICAgICAkaSsrOw0gICAgICAgICAgICAgICAgICAgICRTT01BVE9UQUxWQUxPUltdID0gKCRJTkZPUlsnZHVyYXRpb24nXSAvIDYwKSAqICR2YWxvcjsNICAgICAgICAgICAgICAgICAgICAkU09NQURVUkFDQU9bXSA9ICRJTkZPUlsnZHVyYXRpb24nXSAvIDYwOw0gICAgICAgICAgICAgICAgICAgICRzZWNvbmRzID0gJElORk9SWydkdXJhdGlvbiddOw0gICAgICAgICAgICAgICAgICAgICRob3VycyA9IGZsb29yKCRzZWNvbmRzIC8gMzYwMCk7DSAgICAgICAgICAgICAgICAgICAgJHNlY29uZHMtPSAkaG91cnMgKiAzNjAwOw0gICAgICAgICAgICAgICAgICAgICRtaW51dGVzID0gZmxvb3IoJHNlY29uZHMgLyA2MCk7DSAgICAgICAgICAgICAgICAgICAgJHNlY29uZHMtPSAkbWludXRlcyAqIDYwOw0gICAgICAgICAgICAgICAgICAgICRjb252ZXJzYW9ob3JhcyA9IHN0cl9wYWQobnVtYmVyX2Zvcm1hdCgkaG91cnMsIDAsICcsJywgJy4nKSwgMiwgIjAiLCBTVFJfUEFEX0xFRlQpIC4gIjoiIC4gc3RyX3BhZChudW1iZXJfZm9ybWF0KCRtaW51dGVzLCAwLCAnLCcsICcuJyksIDIsICIwIiwgU1RSX1BBRF9MRUZUKSAuICI6IiAuIHN0cl9wYWQobnVtYmVyX2Zvcm1hdCgkc2Vjb25kcywgMCwgJywnLCAnLicpLCAyLCAiMCIsIFNUUl9QQURfTEVGVCk7DSAgICAgICAgICAgICAgICAgICAgJEJJTEhFVEFHRU1bXSA9IGFycmF5KCJzcmMiID0+ICRJTkZPUlsnc3JjJ10sICJtaW51dG9zIiA9PiAkSU5GT1JbJ2R1cmF0aW9uJ10sICJ2YWxvciIgPT4gbnVtYmVyX2Zvcm1hdCgoKCRJTkZPUlsnZHVyYXRpb24nXSAvIDYwKSAqICR2YWxvciksIDIsICcsJywgJy4nKSwgImVuZCIgPT4gJElORk9SWydlbmQnXSwgInN0YXJ0IiA9PiAkSU5GT1JbJ3N0YXJ0J10sICJkc3RjaGFubmVsIiA9PiAkZHN0Y2hhbm5lbCwgInVuaXF1ZWlkIiA9PiAkSU5GT1JbJ3VuaXF1ZWlkJ10sICJjb252ZXJzYW8iID0+ICRjb252ZXJzYW9ob3JhcywgImFjY291bnRjb2RlIiA9PiAkSU5GT1JbJ2FjY291bnRjb2RlJ10sICJkc3QiID0+ICRJTkZPUlsnZHN0J10sICJjb3VudCIgPT4gJGkpOw0gICAgICAgICAgICAgICAgfQ0gICAgICAgICAgICB9DSAgICAgICAgfQ0gICAgICAgIGlmIChpc3NldCgkQklMSEVUQUdFTSkpIHsNICAgICAgICAgICAgJFNPTUFEVVJBQ0FPR0VSQUwgPSBhcnJheV9zdW0oJFNPTUFEVVJBQ0FPKTsNICAgICAgICAgICAgJHNlY29uZHMgPSAkU09NQURVUkFDQU9HRVJBTCAqIDYwOw0gICAgICAgICAgICAkaG91cnMgPSBmbG9vcigkc2Vjb25kcyAvIDM2MDApOw0gICAgICAgICAgICAkc2Vjb25kcy09ICRob3VycyAqIDM2MDA7DSAgICAgICAgICAgICRtaW51dGVzID0gZmxvb3IoJHNlY29uZHMgLyA2MCk7DSAgICAgICAgICAgICRzZWNvbmRzLT0gJG1pbnV0ZXMgKiA2MDsNICAgICAgICAgICAgJGNvbnZlcnNhb2hvcmFzdHQgPSBzdHJfcGFkKG51bWJlcl9mb3JtYXQoJGhvdXJzLCAwLCAnLCcsICcuJyksIDIsICIwIiwgU1RSX1BBRF9MRUZUKSAuICI6IiAuIHN0cl9wYWQobnVtYmVyX2Zvcm1hdCgkbWludXRlcywgMCwgJywnLCAnLicpLCAyLCAiMCIsIFNUUl9QQURfTEVGVCkgLiAiOiIgLiBzdHJfcGFkKG51bWJlcl9mb3JtYXQoJHNlY29uZHMsIDAsICcsJywgJy4nKSwgMiwgIjAiLCBTVFJfUEFEX0xFRlQpOw0gICAgICAgICAgICAkU09NQURVUkFDQU9HRVJBTCA9ICRjb252ZXJzYW9ob3Jhc3R0Ow0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIlRPVEFMRFVSQUNBTyIsICRTT01BRFVSQUNBT0dFUkFMKTsNICAgICAgICAgICAgJFNPTUFUT1RBTFZBTE9SID0gYXJyYXlfc3VtKCRTT01BVE9UQUxWQUxPUik7DSAgICAgICAgICAgICRTT01BVE9UQUxWQUxPUiA9IG51bWJlcl9mb3JtYXQoJFNPTUFUT1RBTFZBTE9SLCAyLCAnLCcsICcuJyk7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiU09NQVRPVEFMVkFMT1IiLCAkU09NQVRPVEFMVkFMT1IpOw0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oYXJyYXkoIkJJTEhFVEFHRU0iID0+ICRCSUxIRVRBR0VNKSk7DSAgICAgICAgfQ0gICAgfQ0gICAgaWYgKCRfUE9TVFsncmVsYXRvcmlvJ10gPT0gIjExIikgew0gICAgICAgIGlmICgkX1BPU1RbJ2luaWNpbyddICE9ICIiICYmICRfUE9TVFsnZmluYWwnXSAhPSAiIikgew0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIklOSUNJTyIsICRfUE9TVFsnaW5pY2lvJ10pOw0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIkZJTkFMIiwgJF9QT1NUWydmaW5hbCddKTsNICAgICAgICAgICAgJGluaWNpbyA9IHRyaW0oJF9QT1NUWydpbmljaW8nXSk7DSAgICAgICAgICAgICRhcnIgPSBleHBsb2RlKCIvIiwgJGluaWNpbyk7DSAgICAgICAgICAgICRpbmljaW8gPSAkYXJyezJ9IC4gIi0iIC4gJGFycnsxfSAuICItIiAuICRhcnJ7MH07DSAgICAgICAgICAgICRmaW5hbCA9IHRyaW0oJF9QT1NUWydmaW5hbCddKTsNICAgICAgICAgICAgJGFyciA9IGV4cGxvZGUoIi8iLCAkZmluYWwpOw0gICAgICAgICAgICAkZmluYWwgPSAkYXJyezJ9IC4gIi0iIC4gJGFycnsxfSAuICItIiAuICRhcnJ7MH07DSAgICAgICAgfSBlbHNlIHsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJJTklDSU8iLCAiIik7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiRklOQUwiLCAiIik7DSAgICAgICAgfQ0gICAgICAgICRjb25zID0gbmV3IENPTkVYQU8oKTsNICAgICAgICAkc3FsID0gJGNvbnMtPkNvbnN1bHRhKCJTRUxFQ1QgDQkJCQkJCQkJCW5vbWUsDQkJCQkJCQkJCWlkDQkJCQkJCQkJRlJPTQ0JCQkJCQkJCQlzeXN0ZW1fcmVwb3J0DQkJCQkJCQkJV0hFUkUNCQkJCQkJCQkJaWQgPSAnIiAuICRfUE9TVFsncmVsYXRvcmlvJ10gLiAiJyIpOw0gICAgICAgICRjb25zLT5EZXNjb25lY3RhKCk7DSAgICAgICAgJGluZm9yZXAgPSBteXNxbF9mZXRjaF9vYmplY3QoJHNxbCk7DSAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJSRUxBVE9SSU8iLCAkaW5mb3JlcC0+bm9tZSk7DSAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJJRFJFTEFUT1JJTyIsICRpbmZvcmVwLT5pZCk7DSAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJUSVBPIiwgJF9QT1NUWyd0aXBvJ10pOw0gICAgICAgICRjb25zID0gbmV3IENPTkVYQU8oKTsNICAgICAgICAkc3FsID0gJGNvbnMtPkNvbnN1bHRhKCJTRUxFQ1QgDQkJCQkJCQkJCQlzdGFydCwNCQkJCQkJCQkJCWVuZCwNCQkJCQkJCQkJCXNyYywNCQkJCQkJCQkJCWFjY291bnRjb2RlLA0JCQkJCQkJCQkJZHN0LA0JCQkJCQkJCQkJZGlzcG9zaXRpb24sDQkJCQkJCQkJCQl1bmlxdWVpZCwNCQkJCQkJCQkJCWR1cmF0aW9uLA0JCQkJCQkJCQkJZHN0Y2hhbm5lbA0JCQkJCQkJCQlGUk9NDQkJCQkJCQkJCQljZHINCQkJCQkJCQkJV0hFUkUNCQkJCQkJCQkJCWFjY291bnRjb2RlID0gJyIgLiAkX1BPU1RbJ3RpcG8nXSAuICInDQkJCQkJCQkJCUFORA0JCQkJCQkJCQkJc3JjICE9ICcnDQkJCQkJCQkJCUFORA0JCQkJCQkJCQkJQ0hBUkFDVEVSX0xFTkdUSChkc3QpID4gMg0JCQkJCQkJCQlBTkQNCQkJCQkJCQkJCURBVEVfRk9STUFUKHN0YXJ0LCAnJVktJW0tJWQnKSBCRVRXRUVOICciIC4gJGluaWNpbyAuICInIEFORCAnIiAuICRmaW5hbCAuICInCQ0JCQkJCQkJCQlPUkRFUiBieQ0JCQkJCQkJCQkJc3JjIEFTQyIpOw0gICAgICAgICRjb25zLT5EZXNjb25lY3RhKCk7DQ0vL1RPVEFMIERFIExJR0FDT0VTIC0gQVRFTkRJREFTDSRjb25zID0gbmV3IENPTkVYQU8oKTsNJHNxbGluZm9tVEEgPSAkY29ucy0+Q29uc3VsdGEoIlNFTEVDVCANCQkJCQkJCQlDT1VOVCgqKSBBUyB0b3RhbA0JCQkJCQkJRlJPTQ0JCQkJCQkJCWNkcg0JCQkJCQkJV0hFUkUNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnRjb2RlID0gJyIgLiAkX1BPU1RbJ3RpcG8nXSAuICInDSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EICAgICAgDQkJCQkJCQkJZGlzcG9zaXRpb249ICdBTlNXRVJFRCcNCQkJCQkJCUFORA0JCQkJCQkJCQkJREFURV9GT1JNQVQoc3RhcnQsICclWS0lbS0lZCcpIEJFVFdFRU4gJyIgLiAkaW5pY2lvIC4gIicgQU5EICciIC4gJGZpbmFsIC4gIicJDQkJCQkJCQkJCU9SREVSIGJ5DQkJCQkJCQkJCQlzcmMgQVNDIik7DSRjb25zLT5EZXNjb25lY3RhKCk7DSRpbmZvbVRBID0gbXlzcWxfZmV0Y2hfb2JqZWN0KCRzcWxpbmZvbVRBKTsNDS8vVE9UQUwgREUgTElHQUNPRVMgLSAgTkFPIEFURU5ESURBUw0kY29ucyA9IG5ldyBDT05FWEFPKCk7DSRzcWxpbmZvbVROQSA9ICRjb25zLT5Db25zdWx0YSgiU0VMRUNUIA0JCQkJCQkJCUNPVU5UKCopIEFTIHRvdGFsDQkJCQkJCQlGUk9NDQkJCQkJCQkJY2RyDQkJCQkJCQlXSEVSRQ0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudGNvZGUgPSAnIiAuICRfUE9TVFsndGlwbyddIC4gIicNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQgICAgICANCQkJCQkJCQlkaXNwb3NpdGlvbj0gJ05PIEFOU1dFUicNCQkJCQkJCUFORA0JCQkJCQkJCQkJREFURV9GT1JNQVQoc3RhcnQsICclWS0lbS0lZCcpIEJFVFdFRU4gJyIgLiAkaW5pY2lvIC4gIicgQU5EICciIC4gJGZpbmFsIC4gIicJDQkJCQkJCQkJCU9SREVSIGJ5DQkJCQkJCQkJCQlzcmMgQVNDIik7DSRjb25zLT5EZXNjb25lY3RhKCk7DSRpbmZvbVROQSA9IG15c3FsX2ZldGNoX29iamVjdCgkc3FsaW5mb21UTkEpOw0NLy9UT1RBTCBERSBMSUdBQ09FUyAtICBPQ1VQQURBUw0kY29ucyA9IG5ldyBDT05FWEFPKCk7DSRzcWxpbmZvbVRPID0gJGNvbnMtPkNvbnN1bHRhKCJTRUxFQ1QgDQkJCQkJCQkJQ09VTlQoKikgQVMgdG90YWwNCQkJCQkJCUZST00NCQkJCQkJCQljZHINCQkJCQkJCVdIRVJFDSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50Y29kZSA9ICciIC4gJF9QT1NUWyd0aXBvJ10gLiAiJw0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORCAgICAgIA0JCQkJCQkJCWRpc3Bvc2l0aW9uPSAnQlVTWScNCQkJCQkJCUFORA0JCQkJCQkJCQkJREFURV9GT1JNQVQoc3RhcnQsICclWS0lbS0lZCcpIEJFVFdFRU4gJyIgLiAkaW5pY2lvIC4gIicgQU5EICciIC4gJGZpbmFsIC4gIicJDQkJCQkJCQkJCU9SREVSIGJ5DQkJCQkJCQkJCQlzcmMgQVNDIik7DSRjb25zLT5EZXNjb25lY3RhKCk7DSRpbmZvbVRPID0gbXlzcWxfZmV0Y2hfb2JqZWN0KCRzcWxpbmZvbVRPKTsNDSAgICAgICAgJGkgPSAwOw0gICAgICAgIHdoaWxlICgkSU5GT1IgPSBteXNxbF9mZXRjaF9hcnJheSgkc3FsKSkgew0gICAgICAgICAgICAgICAgJGNvbnMgPSBuZXcgQ09ORVhBTygpOw0gICAgICAgICAgICAgICAgJHNxbGNoYW5uZWwgPSAkY29ucy0+Q29uc3VsdGEoIlNFTEVDVA0JCQkJCQkJCQkJCSogDQkJCQkJCQkJCQlGUk9NDQkJCQkJCQkJCQkJY2hhbm5lbF9uYW1lDQkJCQkJCQkJCQlXSEVSRQ0JCQkJCQkJCQkJCWNoYW5uZWwgbGlrZSAnIiAuICRJTkZPUlsnZHN0Y2hhbm5lbCddIC4gIiUnIik7DSAgICAgICAgICAgICAgICAkY29ucy0+RGVzY29uZWN0YSgpOw0gICAgICAgICAgICAgICAgaWYgKG15c3FsX251bV9yb3dzKCRzcWxjaGFubmVsKSA9PSAiMSIpIHsNICAgICAgICAgICAgICAgICAgICAkc3FsY2hhID0gbXlzcWxfZmV0Y2hfb2JqZWN0KCRzcWxjaGFubmVsKTsNICAgICAgICAgICAgICAgICAgICAkZHN0Y2hhbm5lbCA9ICRzcWxjaGEtPm5vbWU7DSAgICAgICAgICAgICAgICB9IGVsc2Ugew0gICAgICAgICAgICAgICAgICAgICRkc3RjaGFubmVsID0gJElORk9SWydkc3RjaGFubmVsJ107DSAgICAgICAgICAgICAgICB9DQ0gICAgICAgICAgICAkaSsrOw0gICAgICAgICAgICAkU09NQURVUkFDQU9bXSA9ICRJTkZPUlsnZHVyYXRpb24nXSAvIDYwOw0gICAgICAgICAgICAkc2Vjb25kcyA9ICRJTkZPUlsnZHVyYXRpb24nXTsNICAgICAgICAgICAgJGhvdXJzID0gZmxvb3IoJHNlY29uZHMgLyAzNjAwKTsNICAgICAgICAgICAgJHNlY29uZHMtPSAkaG91cnMgKiAzNjAwOw0gICAgICAgICAgICAkbWludXRlcyA9IGZsb29yKCRzZWNvbmRzIC8gNjApOw0gICAgICAgICAgICAkc2Vjb25kcy09ICRtaW51dGVzICogNjA7DSAgICAgICAgICAgICRjb252ZXJzYW9ob3JhcyA9IHN0cl9wYWQobnVtYmVyX2Zvcm1hdCgkaG91cnMsIDAsICcsJywgJy4nKSwgMiwgIjAiLCBTVFJfUEFEX0xFRlQpIC4gIjoiIC4gc3RyX3BhZChudW1iZXJfZm9ybWF0KCRtaW51dGVzLCAwLCAnLCcsICcuJyksIDIsICIwIiwgU1RSX1BBRF9MRUZUKSAuICI6IiAuIHN0cl9wYWQobnVtYmVyX2Zvcm1hdCgkc2Vjb25kcywgMCwgJywnLCAnLicpLCAyLCAiMCIsIFNUUl9QQURfTEVGVCk7DSAgICAgICAgICAgICRMSUdBQ0FPVElQT0dFUkFMW10gPSBhcnJheSgic3JjIiA9PiAkSU5GT1JbJ3NyYyddLCAiZW5kIiA9PiAkSU5GT1JbJ2VuZCddLCAic3RhcnQiID0+ICRJTkZPUlsnc3RhcnQnXSwgImFjY291bnRjb2RlIiA9PiAkSU5GT1JbJ2FjY291bnRjb2RlJ10sICJkc3RjaGFubmVsIiA9PiAkZHN0Y2hhbm5lbCwgImRzdCIgPT4gJElORk9SWydkc3QnXSwgInVuaXF1ZWlkIiA9PiAkSU5GT1JbJ3VuaXF1ZWlkJ10sICJsYXN0YXBwIiA9PiAkSU5GT1JbJ2Rpc3Bvc2l0aW9uJ10sICJkdXJhdGlvbiIgPT4gJGNvbnZlcnNhb2hvcmFzLCAiY291bnQiID0+ICRpKTsNICAgICAgICB9DSAgICAgICAgaWYgKGlzc2V0KCRMSUdBQ0FPVElQT0dFUkFMKSkgew0gICAgICAgICAgICAkU09NQURVUkFDQU9HRVJBTCA9IGFycmF5X3N1bSgkU09NQURVUkFDQU8pOw0gICAgICAgICAgICAkc2Vjb25kcyA9ICRTT01BRFVSQUNBT0dFUkFMICogNjA7DSAgICAgICAgICAgICRob3VycyA9IGZsb29yKCRzZWNvbmRzIC8gMzYwMCk7DSAgICAgICAgICAgICRzZWNvbmRzLT0gJGhvdXJzICogMzYwMDsNICAgICAgICAgICAgJG1pbnV0ZXMgPSBmbG9vcigkc2Vjb25kcyAvIDYwKTsNICAgICAgICAgICAgJHNlY29uZHMtPSAkbWludXRlcyAqIDYwOw0gICAgICAgICAgICAkU09NQVRPVEFMVkFMT1I9IG15c3FsX251bV9yb3dzKCRzcWwpOw0gICAgICAgICAgICAkY29udmVyc2FvaG9yYXN0dCA9IHN0cl9wYWQobnVtYmVyX2Zvcm1hdCgkaG91cnMsIDAsICcsJywgJy4nKSwgMiwgIjAiLCBTVFJfUEFEX0xFRlQpIC4gIjoiIC4gc3RyX3BhZChudW1iZXJfZm9ybWF0KCRtaW51dGVzLCAwLCAnLCcsICcuJyksIDIsICIwIiwgU1RSX1BBRF9MRUZUKSAuICI6IiAuIHN0cl9wYWQobnVtYmVyX2Zvcm1hdCgkc2Vjb25kcywgMCwgJywnLCAnLicpLCAyLCAiMCIsIFNUUl9QQURfTEVGVCk7DSAgICAgICAgICAgICRTT01BRFVSQUNBT0dFUkFMID0gJGNvbnZlcnNhb2hvcmFzdHQ7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiVE9UQUxEVVJBQ0FPIiwgJFNPTUFEVVJBQ0FPR0VSQUwpOw0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIlZBTE9STUFYSU1PQVRBIiwgJGluZm9tVEEtPnRvdGFsKTsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJWQUxPUk1BWElNT0FUTkEiLCAkaW5mb21UTkEtPnRvdGFsKTsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJWQUxPUk1BWElNT0FUTyIsICRpbmZvbVRPLT50b3RhbCk7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiU09NQVRPVEFMVkFMT1IiLCAkU09NQVRPVEFMVkFMT1IpOw0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oYXJyYXkoIkxJR0FDQU9USVBPR0VSQUwiID0+ICRMSUdBQ0FPVElQT0dFUkFMKSk7DSAgICAgICAgfQ0gICAgfQ0gICAgaWYgKCRfUE9TVFsncmVsYXRvcmlvJ10gPT0gIjEwIikgew0gICAgICAgIGlmICgkX1BPU1RbJ2luaWNpbyddICE9ICIiICYmICRfUE9TVFsnZmluYWwnXSAhPSAiIikgew0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIklOSUNJTyIsICRfUE9TVFsnaW5pY2lvJ10pOw0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIkZJTkFMIiwgJF9QT1NUWydmaW5hbCddKTsNICAgICAgICAgICAgJGluaWNpbyA9IHRyaW0oJF9QT1NUWydpbmljaW8nXSk7DSAgICAgICAgICAgICRhcnIgPSBleHBsb2RlKCIvIiwgJGluaWNpbyk7DSAgICAgICAgICAgICRpbmljaW8gPSAkYXJyezJ9IC4gIi0iIC4gJGFycnsxfSAuICItIiAuICRhcnJ7MH07DSAgICAgICAgICAgICRmaW5hbCA9IHRyaW0oJF9QT1NUWydmaW5hbCddKTsNICAgICAgICAgICAgJGFyciA9IGV4cGxvZGUoIi8iLCAkZmluYWwpOw0gICAgICAgICAgICAkZmluYWwgPSAkYXJyezJ9IC4gIi0iIC4gJGFycnsxfSAuICItIiAuICRhcnJ7MH07DSAgICAgICAgfSBlbHNlIHsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJJTklDSU8iLCAiIik7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiRklOQUwiLCAiIik7DSAgICAgICAgfQ0gICAgICAgICRjb25zID0gbmV3IENPTkVYQU8oKTsNICAgICAgICAkc3FsID0gJGNvbnMtPkNvbnN1bHRhKCJTRUxFQ1QgDQkJCQkJCQkJCW5vbWUsDQkJCQkJCQkJCWlkDQkJCQkJCQkJRlJPTQ0JCQkJCQkJCQlzeXN0ZW1fcmVwb3J0DQkJCQkJCQkJV0hFUkUNCQkJCQkJCQkJaWQgPSAnIiAuICRfUE9TVFsncmVsYXRvcmlvJ10gLiAiJyIpOw0gICAgICAgICRjb25zLT5EZXNjb25lY3RhKCk7DSAgICAgICAgJGluZm9yZXAgPSBteXNxbF9mZXRjaF9vYmplY3QoJHNxbCk7DSAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJSRUxBVE9SSU8iLCAkaW5mb3JlcC0+bm9tZSk7DSAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJJRFJFTEFUT1JJTyIsICRpbmZvcmVwLT5pZCk7DSAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJOVU1QRVNRIiwgJF9QT1NUWydleHRlcm5vJ10pOw0gICAgICAgICRjb25zID0gbmV3IENPTkVYQU8oKTsNICAgICAgICAkc3FsID0gJGNvbnMtPkNvbnN1bHRhKCJTRUxFQ1QgDQkJCQkJCQkJCQlzdGFydCwNCQkJCQkJCQkJCWVuZCwNCQkJCQkJCQkJCXNyYywNCQkJCQkJCQkJCWFjY291bnRjb2RlLA0JCQkJCQkJCQkJZHN0LA0JCQkJCQkJCQkJZGlzcG9zaXRpb24sDQkJCQkJCQkJCQl1bmlxdWVpZCwNCQkJCQkJCQkJCWR1cmF0aW9uDQkJCQkJCQkJCUZST00NCQkJCQkJCQkJCWNkcg0JCQkJCQkJCQlXSEVSRQ0JCQkJCQkJCQkJc3JjIGxpa2UgJyUiIC4gJF9QT1NUWydleHRlcm5vJ10gLiAiJScNCQkJCQkJCQkNCQkJCQkJCSAgICAgICAgICAgICAgICBBTkQNCQkJCQkJCQkgICAgICAgICAgICAgICAgIENIQVJBQ1RFUl9MRU5HVEgoZHN0KSA8PSA0DSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCQkJCQkJCQkJQU5EDQkJCQkJCQkJCQlEQVRFX0ZPUk1BVChzdGFydCwgJyVZLSVtLSVkJykgQkVUV0VFTiAnIiAuICRpbmljaW8gLiAiJyBBTkQgJyIgLiAkZmluYWwgLiAiJwkNCQkJCQkJCQkJT1JERVIgYnkNCQkJCQkJCQkJCXN0YXJ0IERFU0MiKTsNICAgICAgICAkY29ucy0+RGVzY29uZWN0YSgpOw0gICAgICAgICRpID0gMDsNICAgICAgICB3aGlsZSAoJElORk9SID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHNxbCkpIHsNICAgICAgICAkY29ucyA9IG5ldyBDT05FWEFPKCk7DSAgICAgICAgICAgICAgICAkc3FsY2hhbm5lbCA9ICRjb25zLT5Db25zdWx0YSgiU0VMRUNUDQkJCQkJCQkJCQkJKiANCQkJCQkJCQkJCUZST00NCQkJCQkJCQkJCQljaGFubmVsX25hbWUNCQkJCQkJCQkJCVdIRVJFDQkJCQkJCQkJCQkJY2hhbm5lbCBsaWtlICciIC4gJElORk9SWydkaXNwb3NpdGlvbiddIC4gIiUnIik7DSAgICAgICAgICAgICAgICAkY29ucy0+RGVzY29uZWN0YSgpOw0gICAgICAgICAgICAgICAgaWYgKG15c3FsX251bV9yb3dzKCRzcWxjaGFubmVsKSA9PSAiMSIpIHsNICAgICAgICAgICAgICAgICAgICAkc3FsY2hhID0gbXlzcWxfZmV0Y2hfb2JqZWN0KCRzcWxjaGFubmVsKTsNICAgICAgICAgICAgICAgICAgICAkZGlzcG9zaXRpb24gPSAkc3FsY2hhLT5ub21lOw0gICAgICAgICAgICAgICAgfSBlbHNlIHsNICAgICAgICAgICAgICAgICAgICAkZGlzcG9zaXRpb24gPSAkSU5GT1JbJ2Rpc3Bvc2l0aW9uJ107DSAgICAgICAgICAgICAgICB9DQ0gICAgICAgICAgICAkaSsrOw0gICAgICAgICAgICAkU09NQURVUkFDQU9bXSA9ICRJTkZPUlsnZHVyYXRpb24nXSAvIDYwOw0gICAgICAgICAgICAkc2Vjb25kcyA9ICRJTkZPUlsnZHVyYXRpb24nXTsNICAgICAgICAgICAgJGhvdXJzID0gZmxvb3IoJHNlY29uZHMgLyAzNjAwKTsNICAgICAgICAgICAgJHNlY29uZHMtPSAkaG91cnMgKiAzNjAwOw0gICAgICAgICAgICAkbWludXRlcyA9IGZsb29yKCRzZWNvbmRzIC8gNjApOw0gICAgICAgICAgICAkc2Vjb25kcy09ICRtaW51dGVzICogNjA7DSAgICAgICAgICAgICRjb252ZXJzYW9ob3JhcyA9IHN0cl9wYWQobnVtYmVyX2Zvcm1hdCgkaG91cnMsIDAsICcsJywgJy4nKSwgMiwgIjAiLCBTVFJfUEFEX0xFRlQpIC4gIjoiIC4gc3RyX3BhZChudW1iZXJfZm9ybWF0KCRtaW51dGVzLCAwLCAnLCcsICcuJyksIDIsICIwIiwgU1RSX1BBRF9MRUZUKSAuICI6IiAuIHN0cl9wYWQobnVtYmVyX2Zvcm1hdCgkc2Vjb25kcywgMCwgJywnLCAnLicpLCAyLCAiMCIsIFNUUl9QQURfTEVGVCk7DSAgICAgICAgICAgICRMSUdBQ09FU1BFU1FFWFRSRUNbXSA9IGFycmF5KCJzcmMiID0+ICRJTkZPUlsnc3JjJ10sICJlbmQiID0+ICRJTkZPUlsnZW5kJ10sICJzdGFydCIgPT4gJElORk9SWydzdGFydCddLCAiYWNjb3VudGNvZGUiID0+ICRJTkZPUlsnYWNjb3VudGNvZGUnXSwgImRzdCIgPT4gJElORk9SWydkc3QnXSwgInVuaXF1ZWlkIiA9PiAkSU5GT1JbJ3VuaXF1ZWlkJ10sICJkdXJhdGlvbiIgPT4gJGNvbnZlcnNhb2hvcmFzLCAibGFzdGFwcCIgPT4gJGRpc3Bvc2l0aW9uLCAiY291bnQiID0+ICRpKTsNICAgICAgICB9DSAgICAgICAgaWYgKGlzc2V0KCRMSUdBQ09FU1BFU1FFWFRSRUMpKSB7DSAgICAgICAgICAgICRTT01BRFVSQUNBT0dFUkFMID0gYXJyYXlfc3VtKCRTT01BRFVSQUNBTyk7DSAgICAgICAgICAgICRzZWNvbmRzID0gJFNPTUFEVVJBQ0FPR0VSQUwgKiA2MDsNICAgICAgICAgICAgJGhvdXJzID0gZmxvb3IoJHNlY29uZHMgLyAzNjAwKTsNICAgICAgICAgICAgJHNlY29uZHMtPSAkaG91cnMgKiAzNjAwOw0gICAgICAgICAgICAkbWludXRlcyA9IGZsb29yKCRzZWNvbmRzIC8gNjApOw0gICAgICAgICAgICAkc2Vjb25kcy09ICRtaW51dGVzICogNjA7DSAgICAgICAgICAgICRTT01BVE9UQUxWQUxPUj0gbXlzcWxfbnVtX3Jvd3MoJHNxbCk7DSAgICAgICAgICAgICRjb252ZXJzYW9ob3Jhc3R0ID0gc3RyX3BhZChudW1iZXJfZm9ybWF0KCRob3VycywgMCwgJywnLCAnLicpLCAyLCAiMCIsIFNUUl9QQURfTEVGVCkgLiAiOiIgLiBzdHJfcGFkKG51bWJlcl9mb3JtYXQoJG1pbnV0ZXMsIDAsICcsJywgJy4nKSwgMiwgIjAiLCBTVFJfUEFEX0xFRlQpIC4gIjoiIC4gc3RyX3BhZChudW1iZXJfZm9ybWF0KCRzZWNvbmRzLCAwLCAnLCcsICcuJyksIDIsICIwIiwgU1RSX1BBRF9MRUZUKTsNICAgICAgICAgICAgJFNPTUFEVVJBQ0FPR0VSQUwgPSAkY29udmVyc2FvaG9yYXN0dDsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJTT01BVE9UQUxWQUxPUiIsICRTT01BVE9UQUxWQUxPUik7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiVE9UQUxEVVJBQ0FPIiwgJFNPTUFEVVJBQ0FPR0VSQUwpOw0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oYXJyYXkoIkxJR0FDT0VTUEVTUUVYVFJFQyIgPT4gJExJR0FDT0VTUEVTUUVYVFJFQykpOw0gICAgICAgIH0NICAgIH0NICAgIGlmICgkX1BPU1RbJ3JlbGF0b3JpbyddID09ICI5Iikgew0gICAgICAgIGlmICgkX1BPU1RbJ2luaWNpbyddICE9ICIiICYmICRfUE9TVFsnZmluYWwnXSAhPSAiIikgew0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIklOSUNJTyIsICRfUE9TVFsnaW5pY2lvJ10pOw0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIkZJTkFMIiwgJF9QT1NUWydmaW5hbCddKTsNICAgICAgICAgICAgJGluaWNpbyA9IHRyaW0oJF9QT1NUWydpbmljaW8nXSk7DSAgICAgICAgICAgICRhcnIgPSBleHBsb2RlKCIvIiwgJGluaWNpbyk7DSAgICAgICAgICAgICRpbmljaW8gPSAkYXJyezJ9IC4gIi0iIC4gJGFycnsxfSAuICItIiAuICRhcnJ7MH07DSAgICAgICAgICAgICRmaW5hbCA9IHRyaW0oJF9QT1NUWydmaW5hbCddKTsNICAgICAgICAgICAgJGFyciA9IGV4cGxvZGUoIi8iLCAkZmluYWwpOw0gICAgICAgICAgICAkZmluYWwgPSAkYXJyezJ9IC4gIi0iIC4gJGFycnsxfSAuICItIiAuICRhcnJ7MH07DSAgICAgICAgfSBlbHNlIHsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJJTklDSU8iLCAiIik7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiRklOQUwiLCAiIik7DSAgICAgICAgfQ0gICAgICAgICRjb25zID0gbmV3IENPTkVYQU8oKTsNICAgICAgICAkc3FsID0gJGNvbnMtPkNvbnN1bHRhKCJTRUxFQ1QgDQkJCQkJCQkJCW5vbWUsDQkJCQkJCQkJCWlkDQkJCQkJCQkJRlJPTQ0JCQkJCQkJCQlzeXN0ZW1fcmVwb3J0DQkJCQkJCQkJV0hFUkUNCQkJCQkJCQkJaWQgPSAnIiAuICRfUE9TVFsncmVsYXRvcmlvJ10gLiAiJyIpOw0gICAgICAgICRjb25zLT5EZXNjb25lY3RhKCk7DSAgICAgICAgJGluZm9yZXAgPSBteXNxbF9mZXRjaF9vYmplY3QoJHNxbCk7DSAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJSRUxBVE9SSU8iLCAkaW5mb3JlcC0+bm9tZSk7DSAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJJRFJFTEFUT1JJTyIsICRpbmZvcmVwLT5pZCk7DSAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJOVU1QRVNRIiwgJF9QT1NUWydleHRlcm5vJ10pOw0gICAgICAgICRjb25zID0gbmV3IENPTkVYQU8oKTsNICAgICAgICAkc3FsID0gJGNvbnMtPkNvbnN1bHRhKCJTRUxFQ1QgDQkJCQkJCQkJCQlzdGFydCwNCQkJCQkJCQkJCWVuZCwNCQkJCQkJCQkJCXNyYywNCQkJCQkJCQkJCWFjY291bnRjb2RlLA0JCQkJCQkJCQkJZHN0LA0JCQkJCQkJCQkJZGlzcG9zaXRpb24sDQkJCQkJCQkJCQl1bmlxdWVpZCwNCQkJCQkJCQkJCWR1cmF0aW9uDQkJCQkJCQkJCUZST00NCQkJCQkJCQkJCWNkcg0JCQkJCQkJCQlXSEVSRQ0JCQkJCQkJCQkJZHN0IGxpa2UgJyUiIC4gJF9QT1NUWydleHRlcm5vJ10gLiAiJScNCQkJCQkJCQkJQU5EDQkJCQkJCQkJCQlDSEFSQUNURVJfTEVOR1RIKHNyYykgPD0gNA0JCQkJCQkJCQlBTkQNCQkJCQkJCQkJCURBVEVfRk9STUFUKHN0YXJ0LCAnJVktJW0tJWQnKSBCRVRXRUVOICciIC4gJGluaWNpbyAuICInIEFORCAnIiAuICRmaW5hbCAuICInCQ0JCQkJCQkJCQlPUkRFUiBieQ0JCQkJCQkJCQkJc3RhcnQgREVTQyIpOw0gICAgICAgICRjb25zLT5EZXNjb25lY3RhKCk7DS8vVE9UQUwgREUgTElHQUNPRVMgLSBBVEVORElEQVMNJGNvbnMgPSBuZXcgQ09ORVhBTygpOw0kc3FsaW5mb21UQSA9ICRjb25zLT5Db25zdWx0YSgiU0VMRUNUIA0JCQkJCQkJCUNPVU5UKCopIEFTIHRvdGFsDQkJCQkJCQlGUk9NDQkJCQkJCQkJY2RyDQkJCQkJCQlXSEVSRQ0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hBUkFDVEVSX0xFTkdUSChzcmMpIDw9IDQNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQNCQkJCQkJCQlDSEFSQUNURVJfTEVOR1RIKGRzdCkgPj0gOA0NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQgICAgICANCQkJCQkJCQlkaXNwb3NpdGlvbj0gJ0FOU1dFUkVEJw0JCQkJCQkJQU5EDQkJCQkJCQkJCQlEQVRFX0ZPUk1BVChzdGFydCwgJyVZLSVtLSVkJykgQkVUV0VFTiAnIiAuICRpbmljaW8gLiAiJyBBTkQgJyIgLiAkZmluYWwgLiAiJwkNCQkJCQkJCQkJT1JERVIgYnkNCQkJCQkJCQkJCXNyYyBBU0MiKTsNJGNvbnMtPkRlc2NvbmVjdGEoKTsNJGluZm9tVEEgPSBteXNxbF9mZXRjaF9vYmplY3QoJHNxbGluZm9tVEEpOw0NLy9UT1RBTCBERSBMSUdBQ09FUyAtICBOQU8gQVRFTkRJREFTDSRjb25zID0gbmV3IENPTkVYQU8oKTsNJHNxbGluZm9tVE5BID0gJGNvbnMtPkNvbnN1bHRhKCJTRUxFQ1QgDQkJCQkJCQkJQ09VTlQoKikgQVMgdG90YWwNCQkJCQkJCUZST00NCQkJCQkJCQljZHINCQkJCQkJCVdIRVJFDSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEFSQUNURVJfTEVOR1RIKHNyYykgPD0gNA0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORA0JCQkJCQkJCUNIQVJBQ1RFUl9MRU5HVEgoZHN0KSA+PSA4DSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EICAgICAgDQkJCQkJCQkJZGlzcG9zaXRpb249ICdOTyBBTlNXRVInDQkJCQkJCQlBTkQNCQkJCQkJCQkJCURBVEVfRk9STUFUKHN0YXJ0LCAnJVktJW0tJWQnKSBCRVRXRUVOICciIC4gJGluaWNpbyAuICInIEFORCAnIiAuICRmaW5hbCAuICInCQ0JCQkJCQkJCQlPUkRFUiBieQ0JCQkJCQkJCQkJc3JjIEFTQyIpOw0kY29ucy0+RGVzY29uZWN0YSgpOw0kaW5mb21UTkEgPSBteXNxbF9mZXRjaF9vYmplY3QoJHNxbGluZm9tVE5BKTsNDS8vVE9UQUwgREUgTElHQUNPRVMgLSAgT0NVUEFEQVMNJGNvbnMgPSBuZXcgQ09ORVhBTygpOw0kc3FsaW5mb21UTyA9ICRjb25zLT5Db25zdWx0YSgiU0VMRUNUIA0JCQkJCQkJCUNPVU5UKCopIEFTIHRvdGFsDQkJCQkJCQlGUk9NDQkJCQkJCQkJY2RyDQkJCQkJCQlXSEVSRQ0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hBUkFDVEVSX0xFTkdUSChzcmMpIDw9IDQNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQNCQkJCQkJCQlDSEFSQUNURVJfTEVOR1RIKGRzdCkgPj0gOA0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORCAgICAgIA0JCQkJCQkJCWRpc3Bvc2l0aW9uPSAnQlVTWScNCQkJCQkJCUFORA0JCQkJCQkJCQkJREFURV9GT1JNQVQoc3RhcnQsICclWS0lbS0lZCcpIEJFVFdFRU4gJyIgLiAkaW5pY2lvIC4gIicgQU5EICciIC4gJGZpbmFsIC4gIicJDQkJCQkJCQkJCU9SREVSIGJ5DQkJCQkJCQkJCQlzcmMgQVNDIik7DSRjb25zLT5EZXNjb25lY3RhKCk7DSRpbmZvbVRPID0gbXlzcWxfZmV0Y2hfb2JqZWN0KCRzcWxpbmZvbVRPKTsNDSAgICAgICAgJGkgPSAwOw0gICAgICAgIHdoaWxlICgkSU5GT1IgPSBteXNxbF9mZXRjaF9hcnJheSgkc3FsKSkgew0gICAgICAgICRjb25zID0gbmV3IENPTkVYQU8oKTsNICAgICAgICAgICAgICAgICRzcWxjaGFubmVsID0gJGNvbnMtPkNvbnN1bHRhKCJTRUxFQ1QNCQkJCQkJCQkJCQkqIA0JCQkJCQkJCQkJRlJPTQ0JCQkJCQkJCQkJCWNoYW5uZWxfbmFtZQ0JCQkJCQkJCQkJV0hFUkUNCQkJCQkJCQkJCQljaGFubmVsIGxpa2UgJyIgLiAkSU5GT1JbJ2Rpc3Bvc2l0aW9uJ10gLiAiJSciKTsNICAgICAgICAgICAgICAgICRjb25zLT5EZXNjb25lY3RhKCk7DSAgICAgICAgICAgICAgICBpZiAobXlzcWxfbnVtX3Jvd3MoJHNxbGNoYW5uZWwpID09ICIxIikgew0gICAgICAgICAgICAgICAgICAgICRzcWxjaGEgPSBteXNxbF9mZXRjaF9vYmplY3QoJHNxbGNoYW5uZWwpOw0gICAgICAgICAgICAgICAgICAgICRkaXNwb3NpdGlvbiA9ICRzcWxjaGEtPm5vbWU7DSAgICAgICAgICAgICAgICB9IGVsc2Ugew0gICAgICAgICAgICAgICAgICAgICRkaXNwb3NpdGlvbiA9ICRJTkZPUlsnZGlzcG9zaXRpb24nXTsNICAgICAgICAgICAgICAgIH0NDSAgICAgICAgICAgICRpKys7DSAgICAgICAgICAgICRTT01BRFVSQUNBT1tdID0gJElORk9SWydkdXJhdGlvbiddIC8gNjA7DSAgICAgICAgICAgICRzZWNvbmRzID0gJElORk9SWydkdXJhdGlvbiddOw0gICAgICAgICAgICAkaG91cnMgPSBmbG9vcigkc2Vjb25kcyAvIDM2MDApOw0gICAgICAgICAgICAkc2Vjb25kcy09ICRob3VycyAqIDM2MDA7DSAgICAgICAgICAgICRtaW51dGVzID0gZmxvb3IoJHNlY29uZHMgLyA2MCk7DSAgICAgICAgICAgICRzZWNvbmRzLT0gJG1pbnV0ZXMgKiA2MDsNICAgICAgICAgICAgJGNvbnZlcnNhb2hvcmFzID0gc3RyX3BhZChudW1iZXJfZm9ybWF0KCRob3VycywgMCwgJywnLCAnLicpLCAyLCAiMCIsIFNUUl9QQURfTEVGVCkgLiAiOiIgLiBzdHJfcGFkKG51bWJlcl9mb3JtYXQoJG1pbnV0ZXMsIDAsICcsJywgJy4nKSwgMiwgIjAiLCBTVFJfUEFEX0xFRlQpIC4gIjoiIC4gc3RyX3BhZChudW1iZXJfZm9ybWF0KCRzZWNvbmRzLCAwLCAnLCcsICcuJyksIDIsICIwIiwgU1RSX1BBRF9MRUZUKTsNICAgICAgICAgICAgJExJR0FDT0VTUEVTUUVYVFtdID0gYXJyYXkoInNyYyIgPT4gJElORk9SWydzcmMnXSwgImVuZCIgPT4gJElORk9SWydlbmQnXSwgInN0YXJ0IiA9PiAkSU5GT1JbJ3N0YXJ0J10sICJhY2NvdW50Y29kZSIgPT4gJElORk9SWydhY2NvdW50Y29kZSddLCAiZHN0IiA9PiAkSU5GT1JbJ2RzdCddLCAidW5pcXVlaWQiID0+ICRJTkZPUlsndW5pcXVlaWQnXSwgImR1cmF0aW9uIiA9PiAkY29udmVyc2FvaG9yYXMsICJsYXN0YXBwIiA9PiAkZGlzcG9zaXRpb24sICJjb3VudCIgPT4gJGkpOw0gICAgICAgIH0NICAgICAgICBpZiAoaXNzZXQoJExJR0FDT0VTUEVTUUVYVCkpIHsNICAgICAgICAgICAgJFNPTUFEVVJBQ0FPR0VSQUwgPSBhcnJheV9zdW0oJFNPTUFEVVJBQ0FPKTsNICAgICAgICAgICAgJHNlY29uZHMgPSAkU09NQURVUkFDQU9HRVJBTCAqIDYwOw0gICAgICAgICAgICAkaG91cnMgPSBmbG9vcigkc2Vjb25kcyAvIDM2MDApOw0gICAgICAgICAgICAkc2Vjb25kcy09ICRob3VycyAqIDM2MDA7DSAgICAgICAgICAgICRtaW51dGVzID0gZmxvb3IoJHNlY29uZHMgLyA2MCk7DSAgICAgICAgICAgICRzZWNvbmRzLT0gJG1pbnV0ZXMgKiA2MDsNICAgICAgICAgICAgJFNPTUFUT1RBTFZBTE9SPSBteXNxbF9udW1fcm93cygkc3FsKTsNICAgICAgICAgICAgJGNvbnZlcnNhb2hvcmFzdHQgPSBzdHJfcGFkKG51bWJlcl9mb3JtYXQoJGhvdXJzLCAwLCAnLCcsICcuJyksIDIsICIwIiwgU1RSX1BBRF9MRUZUKSAuICI6IiAuIHN0cl9wYWQobnVtYmVyX2Zvcm1hdCgkbWludXRlcywgMCwgJywnLCAnLicpLCAyLCAiMCIsIFNUUl9QQURfTEVGVCkgLiAiOiIgLiBzdHJfcGFkKG51bWJlcl9mb3JtYXQoJHNlY29uZHMsIDAsICcsJywgJy4nKSwgMiwgIjAiLCBTVFJfUEFEX0xFRlQpOw0gICAgICAgICAgICAkU09NQURVUkFDQU9HRVJBTCA9ICRjb252ZXJzYW9ob3Jhc3R0Ow0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIlNPTUFUT1RBTFZBTE9SIiwgJFNPTUFUT1RBTFZBTE9SKTsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJWQUxPUk1BWElNT0FUQSIsICRpbmZvbVRBLT50b3RhbCk7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiVkFMT1JNQVhJTU9BVE5BIiwgJGluZm9tVE5BLT50b3RhbCk7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiVkFMT1JNQVhJTU9BVE8iLCAkaW5mb21UTy0+dG90YWwpOw0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIlRPVEFMRFVSQUNBTyIsICRTT01BRFVSQUNBT0dFUkFMKTsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKGFycmF5KCJMSUdBQ09FU1BFU1FFWFQiID0+ICRMSUdBQ09FU1BFU1FFWFQpKTsNICAgICAgICB9DSAgICB9DSAgICBpZiAoJF9QT1NUWydyZWxhdG9yaW8nXSA9PSAiOCIpIHsNICAgICAgICBpZiAoJF9QT1NUWydpbmljaW8nXSAhPSAiIiAmJiAkX1BPU1RbJ2ZpbmFsJ10gIT0gIiIpIHsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJJTklDSU8iLCAkX1BPU1RbJ2luaWNpbyddKTsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJGSU5BTCIsICRfUE9TVFsnZmluYWwnXSk7DSAgICAgICAgICAgICRpbmljaW8gPSB0cmltKCRfUE9TVFsnaW5pY2lvJ10pOw0gICAgICAgICAgICAkYXJyID0gZXhwbG9kZSgiLyIsICRpbmljaW8pOw0gICAgICAgICAgICAkaW5pY2lvID0gJGFycnsyfSAuICItIiAuICRhcnJ7MX0gLiAiLSIgLiAkYXJyezB9Ow0gICAgICAgICAgICAkZmluYWwgPSB0cmltKCRfUE9TVFsnZmluYWwnXSk7DSAgICAgICAgICAgICRhcnIgPSBleHBsb2RlKCIvIiwgJGZpbmFsKTsNICAgICAgICAgICAgJGZpbmFsID0gJGFycnsyfSAuICItIiAuICRhcnJ7MX0gLiAiLSIgLiAkYXJyezB9Ow0gICAgICAgIH0gZWxzZSB7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiSU5JQ0lPIiwgIiIpOw0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIkZJTkFMIiwgIiIpOw0gICAgICAgIH0NICAgICAgICAkY29ucyA9IG5ldyBDT05FWEFPKCk7DSAgICAgICAgJHNxbCA9ICRjb25zLT5Db25zdWx0YSgiU0VMRUNUIA0JCQkJCQkJCQlub21lLA0JCQkJCQkJCQlpZA0JCQkJCQkJCUZST00NCQkJCQkJCQkJc3lzdGVtX3JlcG9ydA0JCQkJCQkJCVdIRVJFDQkJCQkJCQkJCWlkID0gJyIgLiAkX1BPU1RbJ3JlbGF0b3JpbyddIC4gIiciKTsNICAgICAgICAkY29ucy0+RGVzY29uZWN0YSgpOw0gICAgICAgICRpbmZvcmVwID0gbXlzcWxfZmV0Y2hfb2JqZWN0KCRzcWwpOw0gICAgICAgICRzbWFydHktPmFzc2lnbigiUkVMQVRPUklPIiwgJGluZm9yZXAtPm5vbWUpOw0gICAgICAgICRzbWFydHktPmFzc2lnbigiSURSRUxBVE9SSU8iLCAkaW5mb3JlcC0+aWQpOw0gICAgICAgICRzbWFydHktPmFzc2lnbigiUkFNQUwiLCAkX1BPU1RbJ3JhbWFsJ10pOw0gICAgICAgICRjb25zID0gbmV3IENPTkVYQU8oKTsNICAgICAgICAkc3FsID0gJGNvbnMtPkNvbnN1bHRhKCJTRUxFQ1QgDQkJCQkJCQkJCQlzdGFydCwNCQkJCQkJCQkJCWVuZCwNCQkJCQkJCQkJCXNyYywNCQkJCQkJCQkJCWFjY291bnRjb2RlLA0JCQkJCQkJCQkJZHN0LA0JCQkJCQkJCQkJZGlzcG9zaXRpb24sDQkJCQkJCQkJCQl1bmlxdWVpZCwNCQkJCQkJCQkJCWR1cmF0aW9uDQkJCQkJCQkJCUZST00NCQkJCQkJCQkJCWNkcg0JCQkJCQkJCQlXSEVSRQ0JCQkJCQkJCQkJc3JjID0gJyIgLiAkX1BPU1RbJ3JhbWFsJ10gLiAiJw0JCQkJCQkJCQlBTkQNCQkJCQkJCQkJCWFjY291bnRjb2RlID0gJyIgLiAkX1BPU1RbJ3RpcG8nXSAuICInDQkJCQkJCQkJCUFORA0JCQkJCQkJCQkJc3JjICE9ICcnDQkJCQkJCQkJCUFORA0JCQkJCQkJCQkJQ0hBUkFDVEVSX0xFTkdUSChkc3QpID4gNA0JCQkJCQkJCQlBTkQNCQkJCQkJCQkJCURBVEVfRk9STUFUKHN0YXJ0LCAnJVktJW0tJWQnKSBCRVRXRUVOICciIC4gJGluaWNpbyAuICInIEFORCAnIiAuICRmaW5hbCAuICInCQ0JCQkJCQkJCQlPUkRFUiBieQ0JCQkJCQkJCQkJc3RhcnQgQVNDIik7DSAgICAgICAgJGNvbnMtPkRlc2NvbmVjdGEoKTsNIC8vVE9UQUwgREUgTElHQUNPRVMgLSBBVEVORElEQVMNJGNvbnMgPSBuZXcgQ09ORVhBTygpOw0kc3FsaW5mb21UQSA9ICRjb25zLT5Db25zdWx0YSgiU0VMRUNUIA0JCQkJCQkJCUNPVU5UKCopIEFTIHRvdGFsDQkJCQkJCQlGUk9NDQkJCQkJCQkJY2RyDQkJCQkJCQlXSEVSRQ0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gJyIgLiAkX1BPU1RbJ3JhbWFsJ10gLiAiJw0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORA0JCQkJCQkJCWFjY291bnRjb2RlID0gJyIgLiAkX1BPU1RbJ3RpcG8nXSAuICInDSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EICAgICAgDQkJCQkJCQkJZGlzcG9zaXRpb249ICdBTlNXRVJFRCcNCQkJCQkJCUFORA0JCQkJCQkJCQkJREFURV9GT1JNQVQoc3RhcnQsICclWS0lbS0lZCcpIEJFVFdFRU4gJyIgLiAkaW5pY2lvIC4gIicgQU5EICciIC4gJGZpbmFsIC4gIicJDQkJCQkJCQkJCU9SREVSIGJ5DQkJCQkJCQkJCQlzcmMgQVNDIik7DSRjb25zLT5EZXNjb25lY3RhKCk7DSRpbmZvbVRBID0gbXlzcWxfZmV0Y2hfb2JqZWN0KCRzcWxpbmZvbVRBKTsNDS8vVE9UQUwgREUgTElHQUNPRVMgLSAgTkFPIEFURU5ESURBUw0kY29ucyA9IG5ldyBDT05FWEFPKCk7DSRzcWxpbmZvbVROQSA9ICRjb25zLT5Db25zdWx0YSgiU0VMRUNUIA0JCQkJCQkJCUNPVU5UKCopIEFTIHRvdGFsDQkJCQkJCQlGUk9NDQkJCQkJCQkJY2RyDQkJCQkJCQlXSEVSRQ0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gJyIgLiAkX1BPU1RbJ3JhbWFsJ10gLiAiJw0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORA0JCQkJCQkJCWFjY291bnRjb2RlID0gJyIgLiAkX1BPU1RbJ3RpcG8nXSAuICInDSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EICAgICAgDQkJCQkJCQkJZGlzcG9zaXRpb249ICdOTyBBTlNXRVInDQkJCQkJCQlBTkQNCQkJCQkJCQkJCURBVEVfRk9STUFUKHN0YXJ0LCAnJVktJW0tJWQnKSBCRVRXRUVOICciIC4gJGluaWNpbyAuICInIEFORCAnIiAuICRmaW5hbCAuICInCQ0JCQkJCQkJCQlPUkRFUiBieQ0JCQkJCQkJCQkJc3JjIEFTQyIpOw0kY29ucy0+RGVzY29uZWN0YSgpOw0kaW5mb21UTkEgPSBteXNxbF9mZXRjaF9vYmplY3QoJHNxbGluZm9tVE5BKTsNDS8vVE9UQUwgREUgTElHQUNPRVMgLSAgT0NVUEFEQVMNJGNvbnMgPSBuZXcgQ09ORVhBTygpOw0kc3FsaW5mb21UTyA9ICRjb25zLT5Db25zdWx0YSgiU0VMRUNUIA0JCQkJCQkJCUNPVU5UKCopIEFTIHRvdGFsDQkJCQkJCQlGUk9NDQkJCQkJCQkJY2RyDQkJCQkJCQlXSEVSRQ0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gJyIgLiAkX1BPU1RbJ3JhbWFsJ10gLiAiJw0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORA0JCQkJCQkJCWFjY291bnRjb2RlID0gJyIgLiAkX1BPU1RbJ3RpcG8nXSAuICInDSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EICAgICAgDQkJCQkJCQkJZGlzcG9zaXRpb249ICdCVVNZJw0JCQkJCQkJQU5EDQkJCQkJCQkJCQlEQVRFX0ZPUk1BVChzdGFydCwgJyVZLSVtLSVkJykgQkVUV0VFTiAnIiAuICRpbmljaW8gLiAiJyBBTkQgJyIgLiAkZmluYWwgLiAiJwkNCQkJCQkJCQkJT1JERVIgYnkNCQkJCQkJCQkJCXNyYyBBU0MiKTsNJGNvbnMtPkRlc2NvbmVjdGEoKTsNJGluZm9tVE8gPSBteXNxbF9mZXRjaF9vYmplY3QoJHNxbGluZm9tVE8pOw0NICAgICAgICAkaSA9IDA7DSAgICAgICAgd2hpbGUgKCRJTkZPUiA9IG15c3FsX2ZldGNoX2FycmF5KCRzcWwpKSB7DSAgICAgICAgJGNvbnMgPSBuZXcgQ09ORVhBTygpOw0gICAgICAgICAgICAgICAgJHNxbGNoYW5uZWwgPSAkY29ucy0+Q29uc3VsdGEoIlNFTEVDVA0JCQkJCQkJCQkJCSogDQkJCQkJCQkJCQlGUk9NDQkJCQkJCQkJCQkJY2hhbm5lbF9uYW1lDQkJCQkJCQkJCQlXSEVSRQ0JCQkJCQkJCQkJCWNoYW5uZWwgbGlrZSAnIiAuICRJTkZPUlsnZGlzcG9zaXRpb24nXSAuICIlJyIpOw0gICAgICAgICAgICAgICAgJGNvbnMtPkRlc2NvbmVjdGEoKTsNICAgICAgICAgICAgICAgIGlmIChteXNxbF9udW1fcm93cygkc3FsY2hhbm5lbCkgPT0gIjEiKSB7DSAgICAgICAgICAgICAgICAgICAgJHNxbGNoYSA9IG15c3FsX2ZldGNoX29iamVjdCgkc3FsY2hhbm5lbCk7DSAgICAgICAgICAgICAgICAgICAgJGRpc3Bvc2l0aW9uID0gJHNxbGNoYS0+bm9tZTsNICAgICAgICAgICAgICAgIH0gZWxzZSB7DSAgICAgICAgICAgICAgICAgICAgJGRpc3Bvc2l0aW9uID0gJElORk9SWydkaXNwb3NpdGlvbiddOw0gICAgICAgICAgICAgICAgfQ0NICAgICAgICAgICAgJGkrKzsNICAgICAgICAgICAgJFNPTUFEVVJBQ0FPW10gPSAkSU5GT1JbJ2R1cmF0aW9uJ10gLyA2MDsNICAgICAgICAgICAgJHNlY29uZHMgPSAkSU5GT1JbJ2R1cmF0aW9uJ107DSAgICAgICAgICAgICRob3VycyA9IGZsb29yKCRzZWNvbmRzIC8gMzYwMCk7DSAgICAgICAgICAgICRzZWNvbmRzLT0gJGhvdXJzICogMzYwMDsNICAgICAgICAgICAgJG1pbnV0ZXMgPSBmbG9vcigkc2Vjb25kcyAvIDYwKTsNICAgICAgICAgICAgJHNlY29uZHMtPSAkbWludXRlcyAqIDYwOw0gICAgICAgICAgICAkY29udmVyc2FvaG9yYXMgPSBzdHJfcGFkKG51bWJlcl9mb3JtYXQoJGhvdXJzLCAwLCAnLCcsICcuJyksIDIsICIwIiwgU1RSX1BBRF9MRUZUKSAuICI6IiAuIHN0cl9wYWQobnVtYmVyX2Zvcm1hdCgkbWludXRlcywgMCwgJywnLCAnLicpLCAyLCAiMCIsIFNUUl9QQURfTEVGVCkgLiAiOiIgLiBzdHJfcGFkKG51bWJlcl9mb3JtYXQoJHNlY29uZHMsIDAsICcsJywgJy4nKSwgMiwgIjAiLCBTVFJfUEFEX0xFRlQpOw0gICAgICAgICAgICAkTElHQUNPRVNFRkVUVUFEQVNQT1JSQU1BTFRJUE9bXSA9IGFycmF5KCJzcmMiID0+ICRJTkZPUlsnc3JjJ10sICJlbmQiID0+ICRJTkZPUlsnZW5kJ10sICJzdGFydCIgPT4gJElORk9SWydzdGFydCddLCAiYWNjb3VudGNvZGUiID0+ICRJTkZPUlsnYWNjb3VudGNvZGUnXSwgImRzdCIgPT4gJElORk9SWydkc3QnXSwgInVuaXF1ZWlkIiA9PiAkSU5GT1JbJ3VuaXF1ZWlkJ10sICJkdXJhdGlvbiIgPT4gJGNvbnZlcnNhb2hvcmFzLCAibGFzdGFwcCIgPT4gJGRpc3Bvc2l0aW9uLCAiY291bnQiID0+ICRpKTsNICAgICAgICB9DSAgICAgICAgaWYgKGlzc2V0KCRMSUdBQ09FU0VGRVRVQURBU1BPUlJBTUFMVElQTykpIHsNICAgICAgICAgICAgJFNPTUFEVVJBQ0FPR0VSQUwgPSBhcnJheV9zdW0oJFNPTUFEVVJBQ0FPKTsNICAgICAgICAgICAgJHNlY29uZHMgPSAkU09NQURVUkFDQU9HRVJBTCAqIDYwOw0gICAgICAgICAgICAkaG91cnMgPSBmbG9vcigkc2Vjb25kcyAvIDM2MDApOw0gICAgICAgICAgICAkc2Vjb25kcy09ICRob3VycyAqIDM2MDA7DSAgICAgICAgICAgICRtaW51dGVzID0gZmxvb3IoJHNlY29uZHMgLyA2MCk7DSAgICAgICAgICAgICRzZWNvbmRzLT0gJG1pbnV0ZXMgKiA2MDsNICAgICAgICAgICAgJFNPTUFUT1RBTFZBTE9SPSBteXNxbF9udW1fcm93cygkc3FsKTsNICAgICAgICAgICAgJGNvbnZlcnNhb2hvcmFzdHQgPSBzdHJfcGFkKG51bWJlcl9mb3JtYXQoJGhvdXJzLCAwLCAnLCcsICcuJyksIDIsICIwIiwgU1RSX1BBRF9MRUZUKSAuICI6IiAuIHN0cl9wYWQobnVtYmVyX2Zvcm1hdCgkbWludXRlcywgMCwgJywnLCAnLicpLCAyLCAiMCIsIFNUUl9QQURfTEVGVCkgLiAiOiIgLiBzdHJfcGFkKG51bWJlcl9mb3JtYXQoJHNlY29uZHMsIDAsICcsJywgJy4nKSwgMiwgIjAiLCBTVFJfUEFEX0xFRlQpOw0gICAgICAgICAgICAkU09NQURVUkFDQU9HRVJBTCA9ICRjb252ZXJzYW9ob3Jhc3R0Ow0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIlNPTUFUT1RBTFZBTE9SIiwgJFNPTUFUT1RBTFZBTE9SKTsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJWQUxPUk1BWElNT0FUQSIsICRpbmZvbVRBLT50b3RhbCk7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiVkFMT1JNQVhJTU9BVE5BIiwgJGluZm9tVE5BLT50b3RhbCk7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiVkFMT1JNQVhJTU9BVE8iLCAkaW5mb21UTy0+dG90YWwpOw0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIlRPVEFMRFVSQUNBTyIsICRTT01BRFVSQUNBT0dFUkFMKTsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKGFycmF5KCJMSUdBQ09FU0VGRVRVQURBU1BPUlJBTUFMVElQTyIgPT4gJExJR0FDT0VTRUZFVFVBREFTUE9SUkFNQUxUSVBPKSk7DSAgICAgICAgfQ0gICAgfQ0gICAgaWYgKCRfUE9TVFsncmVsYXRvcmlvJ10gPT0gIjciKSB7DSAgICAgICAgaWYgKCRfUE9TVFsnaW5pY2lvJ10gIT0gIiIgJiYgJF9QT1NUWydmaW5hbCddICE9ICIiKSB7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiSU5JQ0lPIiwgJF9QT1NUWydpbmljaW8nXSk7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiRklOQUwiLCAkX1BPU1RbJ2ZpbmFsJ10pOw0gICAgICAgICAgICAkaW5pY2lvID0gdHJpbSgkX1BPU1RbJ2luaWNpbyddKTsNICAgICAgICAgICAgJGFyciA9IGV4cGxvZGUoIi8iLCAkaW5pY2lvKTsNICAgICAgICAgICAgJGluaWNpbyA9ICRhcnJ7Mn0gLiAiLSIgLiAkYXJyezF9IC4gIi0iIC4gJGFycnswfTsNICAgICAgICAgICAgJGZpbmFsID0gdHJpbSgkX1BPU1RbJ2ZpbmFsJ10pOw0gICAgICAgICAgICAkYXJyID0gZXhwbG9kZSgiLyIsICRmaW5hbCk7DSAgICAgICAgICAgICRmaW5hbCA9ICRhcnJ7Mn0gLiAiLSIgLiAkYXJyezF9IC4gIi0iIC4gJGFycnswfTsNICAgICAgICB9IGVsc2Ugew0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIklOSUNJTyIsICIiKTsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJGSU5BTCIsICIiKTsNICAgICAgICB9DSAgICAgICAgJGNvbnMgPSBuZXcgQ09ORVhBTygpOw0gICAgICAgICRzcWwgPSAkY29ucy0+Q29uc3VsdGEoIlNFTEVDVCANCQkJCQkJCQkJbm9tZSwNCQkJCQkJCQkJaWQNCQkJCQkJCQlGUk9NDQkJCQkJCQkJCXN5c3RlbV9yZXBvcnQNCQkJCQkJCQlXSEVSRQ0JCQkJCQkJCQlpZCA9ICciIC4gJF9QT1NUWydyZWxhdG9yaW8nXSAuICInIik7DSAgICAgICAgJGNvbnMtPkRlc2NvbmVjdGEoKTsNICAgICAgICAkaW5mb3JlcCA9IG15c3FsX2ZldGNoX29iamVjdCgkc3FsKTsNICAgICAgICAkc21hcnR5LT5hc3NpZ24oIlJFTEFUT1JJTyIsICRpbmZvcmVwLT5ub21lKTsNICAgICAgICAkc21hcnR5LT5hc3NpZ24oIklEUkVMQVRPUklPIiwgJGluZm9yZXAtPmlkKTsNICAgICAgICAkc21hcnR5LT5hc3NpZ24oIlJBTUFMIiwgJF9QT1NUWydyYW1hbCddKTsNICAgICAgICAkY29ucyA9IG5ldyBDT05FWEFPKCk7DSAgICAgICAgJHNxbCA9ICRjb25zLT5Db25zdWx0YSgiU0VMRUNUIA0JCQkJCQkJCQkJc3RhcnQsDQkJCQkJCQkJCQllbmQsDQkJCQkJCQkJCQlzcmMsDQkJCQkJCQkJCQlhY2NvdW50Y29kZSwNCQkJCQkJCQkJCWRzdCwNCQkJCQkJCQkJCWRpc3Bvc2l0aW9uLA0JCQkJCQkJCQkJdW5pcXVlaWQsDQkJCQkJCQkJCQlkdXJhdGlvbg0JCQkJCQkJCQlGUk9NDQkJCQkJCQkJCQljZHINCQkJCQkJCQkJV0hFUkUNCQkJCQkJCQkJCXNyYyA9ICciIC4gJF9QT1NUWydyYW1hbCddIC4gIicNCQkJCQkJCQkJQU5EDQkJCQkJCQkJCQlhY2NvdW50Y29kZSAhPSAnTElHQUNBTyBSRUNFQklEQScNCQkJCQkJCQkJQU5EDQkJCQkJCQkJCQlzcmMgIT0gJycNCQkJCQkJCQkJQU5EDQkJCQkJCQkJCQlDSEFSQUNURVJfTEVOR1RIKGRzdCkgPiA0DQkJCQkJCQkJCUFORA0JCQkJCQkJCQkJREFURV9GT1JNQVQoc3RhcnQsICclWS0lbS0lZCcpIEJFVFdFRU4gJyIgLiAkaW5pY2lvIC4gIicgQU5EICciIC4gJGZpbmFsIC4gIicJDQkJCQkJCQkJCU9SREVSIGJ5DQkJCQkJCQkJCQlzdGFydCBBU0MiKTsNICAgICAgICAkY29ucy0+RGVzY29uZWN0YSgpOw0vL1RPVEFMIERFIExJR0FDT0VTIC0gQVRFTkRJREFTDSRjb25zID0gbmV3IENPTkVYQU8oKTsNJHNxbGluZm9tVEEgPSAkY29ucy0+Q29uc3VsdGEoIlNFTEVDVCANCQkJCQkJCQlDT1VOVCgqKSBBUyB0b3RhbA0JCQkJCQkJRlJPTQ0JCQkJCQkJCWNkcg0JCQkJCQkJV0hFUkUNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYyA9ICciIC4gJF9QT1NUWydyYW1hbCddIC4gIicNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQNCQkJCQkJCQlhY2NvdW50Y29kZSAhPSAnTElHQUNBTyBSRUNFQklEQScNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQgICAgICANCQkJCQkJCQlkaXNwb3NpdGlvbj0gJ0FOU1dFUkVEJw0JCQkJCQkJQU5EDQkJCQkJCQkJCQlEQVRFX0ZPUk1BVChzdGFydCwgJyVZLSVtLSVkJykgQkVUV0VFTiAnIiAuICRpbmljaW8gLiAiJyBBTkQgJyIgLiAkZmluYWwgLiAiJwkNCQkJCQkJCQkJT1JERVIgYnkNCQkJCQkJCQkJCXNyYyBBU0MiKTsNJGNvbnMtPkRlc2NvbmVjdGEoKTsNJGluZm9tVEEgPSBteXNxbF9mZXRjaF9vYmplY3QoJHNxbGluZm9tVEEpOw0NLy9UT1RBTCBERSBMSUdBQ09FUyAtICBOQU8gQVRFTkRJREFTDSRjb25zID0gbmV3IENPTkVYQU8oKTsNJHNxbGluZm9tVE5BID0gJGNvbnMtPkNvbnN1bHRhKCJTRUxFQ1QgDQkJCQkJCQkJQ09VTlQoKikgQVMgdG90YWwNCQkJCQkJCUZST00NCQkJCQkJCQljZHINCQkJCQkJCVdIRVJFDSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMgPSAnIiAuICRfUE9TVFsncmFtYWwnXSAuICInDSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EDQkJCQkJCQkJYWNjb3VudGNvZGUgIT0gJ0xJR0FDQU8gUkVDRUJJREEnDSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EICAgICAgDQkJCQkJCQkJZGlzcG9zaXRpb249ICdOTyBBTlNXRVInDQkJCQkJCQlBTkQNCQkJCQkJCQkJCURBVEVfRk9STUFUKHN0YXJ0LCAnJVktJW0tJWQnKSBCRVRXRUVOICciIC4gJGluaWNpbyAuICInIEFORCAnIiAuICRmaW5hbCAuICInCQ0JCQkJCQkJCQlPUkRFUiBieQ0JCQkJCQkJCQkJc3JjIEFTQyIpOw0kY29ucy0+RGVzY29uZWN0YSgpOw0kaW5mb21UTkEgPSBteXNxbF9mZXRjaF9vYmplY3QoJHNxbGluZm9tVE5BKTsNDS8vVE9UQUwgREUgTElHQUNPRVMgLSAgT0NVUEFEQVMNJGNvbnMgPSBuZXcgQ09ORVhBTygpOw0kc3FsaW5mb21UTyA9ICRjb25zLT5Db25zdWx0YSgiU0VMRUNUIA0JCQkJCQkJCUNPVU5UKCopIEFTIHRvdGFsDQkJCQkJCQlGUk9NDQkJCQkJCQkJY2RyDQkJCQkJCQlXSEVSRQ0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gJyIgLiAkX1BPU1RbJ3JhbWFsJ10gLiAiJw0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORA0JCQkJCQkJCWFjY291bnRjb2RlICE9ICdMSUdBQ0FPIFJFQ0VCSURBJw0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORCAgICAgIA0JCQkJCQkJCWRpc3Bvc2l0aW9uPSAnQlVTWScNCQkJCQkJCUFORA0JCQkJCQkJCQkJREFURV9GT1JNQVQoc3RhcnQsICclWS0lbS0lZCcpIEJFVFdFRU4gJyIgLiAkaW5pY2lvIC4gIicgQU5EICciIC4gJGZpbmFsIC4gIicJDQkJCQkJCQkJCU9SREVSIGJ5DQkJCQkJCQkJCQlzcmMgQVNDIik7DSRjb25zLT5EZXNjb25lY3RhKCk7DSRpbmZvbVRPID0gbXlzcWxfZmV0Y2hfb2JqZWN0KCRzcWxpbmZvbVRPKTsNDSAgICAgICAgJGkgPSAwOw0gICAgICAgIHdoaWxlICgkSU5GT1IgPSBteXNxbF9mZXRjaF9hcnJheSgkc3FsKSkgew0gICAgICAgICRjb25zID0gbmV3IENPTkVYQU8oKTsNICAgICAgICAgICAgICAgICRzcWxjaGFubmVsID0gJGNvbnMtPkNvbnN1bHRhKCJTRUxFQ1QNCQkJCQkJCQkJCQkqIA0JCQkJCQkJCQkJRlJPTQ0JCQkJCQkJCQkJCWNoYW5uZWxfbmFtZQ0JCQkJCQkJCQkJV0hFUkUNCQkJCQkJCQkJCQljaGFubmVsIGxpa2UgJyIgLiAkSU5GT1JbJ2Rpc3Bvc2l0aW9uJ10gLiAiJSciKTsNICAgICAgICAgICAgICAgICRjb25zLT5EZXNjb25lY3RhKCk7DSAgICAgICAgICAgICAgICBpZiAobXlzcWxfbnVtX3Jvd3MoJHNxbGNoYW5uZWwpID09ICIxIikgew0gICAgICAgICAgICAgICAgICAgICRzcWxjaGEgPSBteXNxbF9mZXRjaF9vYmplY3QoJHNxbGNoYW5uZWwpOw0gICAgICAgICAgICAgICAgICAgICRkaXNwb3NpdGlvbiA9ICRzcWxjaGEtPm5vbWU7DSAgICAgICAgICAgICAgICB9IGVsc2Ugew0gICAgICAgICAgICAgICAgICAgICRkaXNwb3NpdGlvbiA9ICRJTkZPUlsnZGlzcG9zaXRpb24nXTsNICAgICAgICAgICAgICAgIH0NDSAgICAgICAgICAgICRpKys7DSAgICAgICAgICAgICRTT01BRFVSQUNBT1tdID0gJElORk9SWydkdXJhdGlvbiddIC8gNjA7DSAgICAgICAgICAgICRzZWNvbmRzID0gJElORk9SWydkdXJhdGlvbiddOw0gICAgICAgICAgICAkaG91cnMgPSBmbG9vcigkc2Vjb25kcyAvIDM2MDApOw0gICAgICAgICAgICAkc2Vjb25kcy09ICRob3VycyAqIDM2MDA7DSAgICAgICAgICAgICRtaW51dGVzID0gZmxvb3IoJHNlY29uZHMgLyA2MCk7DSAgICAgICAgICAgICRzZWNvbmRzLT0gJG1pbnV0ZXMgKiA2MDsNICAgICAgICAgICAgJGNvbnZlcnNhb2hvcmFzID0gc3RyX3BhZChudW1iZXJfZm9ybWF0KCRob3VycywgMCwgJywnLCAnLicpLCAyLCAiMCIsIFNUUl9QQURfTEVGVCkgLiAiOiIgLiBzdHJfcGFkKG51bWJlcl9mb3JtYXQoJG1pbnV0ZXMsIDAsICcsJywgJy4nKSwgMiwgIjAiLCBTVFJfUEFEX0xFRlQpIC4gIjoiIC4gc3RyX3BhZChudW1iZXJfZm9ybWF0KCRzZWNvbmRzLCAwLCAnLCcsICcuJyksIDIsICIwIiwgU1RSX1BBRF9MRUZUKTsNICAgICAgICAgICAgJExJR0FDT0VTRUZFVFVBREFTUE9SUkFNQUxbXSA9IGFycmF5KCJzcmMiID0+ICRJTkZPUlsnc3JjJ10sICJlbmQiID0+ICRJTkZPUlsnZW5kJ10sICJzdGFydCIgPT4gJElORk9SWydzdGFydCddLCAiYWNjb3VudGNvZGUiID0+ICRJTkZPUlsnYWNjb3VudGNvZGUnXSwgImRzdCIgPT4gJElORk9SWydkc3QnXSwgInVuaXF1ZWlkIiA9PiAkSU5GT1JbJ3VuaXF1ZWlkJ10sICJkdXJhdGlvbiIgPT4gJGNvbnZlcnNhb2hvcmFzLCAibGFzdGFwcCIgPT4gJGRpc3Bvc2l0aW9uLCAiY291bnQiID0+ICRpKTsNICAgICAgICB9DSAgICAgICAgaWYgKGlzc2V0KCRMSUdBQ09FU0VGRVRVQURBU1BPUlJBTUFMKSkgew0gICAgICAgICAgICAkU09NQURVUkFDQU9HRVJBTCA9IGFycmF5X3N1bSgkU09NQURVUkFDQU8pOw0gICAgICAgICAgICAkc2Vjb25kcyA9ICRTT01BRFVSQUNBT0dFUkFMICogNjA7DSAgICAgICAgICAgICRob3VycyA9IGZsb29yKCRzZWNvbmRzIC8gMzYwMCk7DSAgICAgICAgICAgICRzZWNvbmRzLT0gJGhvdXJzICogMzYwMDsNICAgICAgICAgICAgJG1pbnV0ZXMgPSBmbG9vcigkc2Vjb25kcyAvIDYwKTsNICAgICAgICAgICAgJHNlY29uZHMtPSAkbWludXRlcyAqIDYwOw0gICAgICAgICAgICAkU09NQVRPVEFMVkFMT1I9IG15c3FsX251bV9yb3dzKCRzcWwpOw0gICAgICAgICAgICAkY29udmVyc2FvaG9yYXN0dCA9IHN0cl9wYWQobnVtYmVyX2Zvcm1hdCgkaG91cnMsIDAsICcsJywgJy4nKSwgMiwgIjAiLCBTVFJfUEFEX0xFRlQpIC4gIjoiIC4gc3RyX3BhZChudW1iZXJfZm9ybWF0KCRtaW51dGVzLCAwLCAnLCcsICcuJyksIDIsICIwIiwgU1RSX1BBRF9MRUZUKSAuICI6IiAuIHN0cl9wYWQobnVtYmVyX2Zvcm1hdCgkc2Vjb25kcywgMCwgJywnLCAnLicpLCAyLCAiMCIsIFNUUl9QQURfTEVGVCk7DSAgICAgICAgICAgICRTT01BRFVSQUNBT0dFUkFMID0gJGNvbnZlcnNhb2hvcmFzdHQ7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiU09NQVRPVEFMVkFMT1IiLCAkU09NQVRPVEFMVkFMT1IpOw0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIlZBTE9STUFYSU1PQVRBIiwgJGluZm9tVEEtPnRvdGFsKTsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJWQUxPUk1BWElNT0FUTkEiLCAkaW5mb21UTkEtPnRvdGFsKTsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJWQUxPUk1BWElNT0FUTyIsICRpbmZvbVRPLT50b3RhbCk7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiVE9UQUxEVVJBQ0FPIiwgJFNPTUFEVVJBQ0FPR0VSQUwpOw0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oYXJyYXkoIkxJR0FDT0VTRUZFVFVBREFTUE9SUkFNQUwiID0+ICRMSUdBQ09FU0VGRVRVQURBU1BPUlJBTUFMKSk7DSAgICAgICAgfQ0gICAgfQ0gICAgaWYgKCRfUE9TVFsncmVsYXRvcmlvJ10gPT0gIjEzIikgew0gICAgICAgIGlmICgkX1BPU1RbJ2luaWNpbyddICE9ICIiICYmICRfUE9TVFsnZmluYWwnXSAhPSAiIikgew0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIklOSUNJTyIsICRfUE9TVFsnaW5pY2lvJ10pOw0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIkZJTkFMIiwgJF9QT1NUWydmaW5hbCddKTsNICAgICAgICAgICAgJGluaWNpbyA9IHRyaW0oJF9QT1NUWydpbmljaW8nXSk7DSAgICAgICAgICAgICRhcnIgPSBleHBsb2RlKCIvIiwgJGluaWNpbyk7DSAgICAgICAgICAgICRpbmljaW8gPSAkYXJyezJ9IC4gIi0iIC4gJGFycnsxfSAuICItIiAuICRhcnJ7MH07DSAgICAgICAgICAgICRmaW5hbCA9IHRyaW0oJF9QT1NUWydmaW5hbCddKTsNICAgICAgICAgICAgJGFyciA9IGV4cGxvZGUoIi8iLCAkZmluYWwpOw0gICAgICAgICAgICAkZmluYWwgPSAkYXJyezJ9IC4gIi0iIC4gJGFycnsxfSAuICItIiAuICRhcnJ7MH07DSAgICAgICAgfSBlbHNlIHsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJJTklDSU8iLCAiIik7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiRklOQUwiLCAiIik7DSAgICAgICAgfQ0gICAgICAgICRjb25zID0gbmV3IENPTkVYQU8oKTsNICAgICAgICAkc3FsID0gJGNvbnMtPkNvbnN1bHRhKCJTRUxFQ1QgDQkJCQkJCQkJCW5vbWUsDQkJCQkJCQkJCWlkDQkJCQkJCQkJRlJPTQ0JCQkJCQkJCQlzeXN0ZW1fcmVwb3J0DQkJCQkJCQkJV0hFUkUNCQkJCQkJCQkJaWQgPSAnIiAuICRfUE9TVFsncmVsYXRvcmlvJ10gLiAiJyIpOw0gICAgICAgICRjb25zLT5EZXNjb25lY3RhKCk7DSAgICAgICAgJGluZm9yZXAgPSBteXNxbF9mZXRjaF9vYmplY3QoJHNxbCk7DSAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJSRUxBVE9SSU8iLCAkaW5mb3JlcC0+bm9tZSk7DSAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJJRFJFTEFUT1JJTyIsICRpbmZvcmVwLT5pZCk7DSAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJSQU1BTCIsICRfUE9TVFsncmFtYWwnXSk7DSAgICAgICAgJGNvbnMgPSBuZXcgQ09ORVhBTygpOw0gICAgICAgICRzcWwgPSAkY29ucy0+Q29uc3VsdGEoIlNFTEVDVCANCQkJCQkJCQkJCXN0YXJ0LA0JCQkJCQkJCQkJZW5kLA0JCQkJCQkJCQkJc3JjLA0JCQkJCQkJCQkJYWNjb3VudGNvZGUsDQkJCQkJCQkJCQlkc3QsDQkJCQkJCQkJCQlkaXNwb3NpdGlvbiwNCQkJCQkJCQkJCXVuaXF1ZWlkLA0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdGNoYW5uZWwsDQkJCQkJCQkJCQlkdXJhdGlvbg0JCQkJCQkJCQlGUk9NDQkJCQkJCQkJCQljZHINCQkJCQkJCQkJV0hFUkUNCQkJCQkJCQkJCWRzdCA9ICciIC4gJF9QT1NUWydyYW1hbCddIC4gIicNCQkJCQkJCQkJQU5EDQkJCQkJCQkJCQlEQVRFX0ZPUk1BVChzdGFydCwgJyVZLSVtLSVkJykgQkVUV0VFTiAnIiAuICRpbmljaW8gLiAiJyBBTkQgJyIgLiAkZmluYWwgLiAiJwkNCQkJCQkJCQkJT1JERVIgYnkNCQkJCQkJCQkJCXN0YXJ0IEFTQyIpOw0gICAgICAgICRjb25zLT5EZXNjb25lY3RhKCk7DSAgICAgICAgJGkgPSAwOw0gICAgICAgIHdoaWxlICgkSU5GT1IgPSBteXNxbF9mZXRjaF9hcnJheSgkc3FsKSkgew0gICAgICAgICRjb25zID0gbmV3IENPTkVYQU8oKTsNICAgICAgICAgICAgICAgICRzcWxjaGFubmVsID0gJGNvbnMtPkNvbnN1bHRhKCJTRUxFQ1QNCQkJCQkJCQkJCQkqIA0JCQkJCQkJCQkJRlJPTQ0JCQkJCQkJCQkJCWNoYW5uZWxfbmFtZQ0JCQkJCQkJCQkJV0hFUkUNCQkJCQkJCQkJCQljaGFubmVsIGxpa2UgJyIgLiAkSU5GT1JbJ2RzdGNoYW5uZWwnXSAuICIlJyIpOw0gICAgICAgICAgICAgICAgJGNvbnMtPkRlc2NvbmVjdGEoKTsNICAgICAgICAgICAgICAgIGlmIChteXNxbF9udW1fcm93cygkc3FsY2hhbm5lbCkgPT0gIjEiKSB7DSAgICAgICAgICAgICAgICAgICAgJHNxbGNoYSA9IG15c3FsX2ZldGNoX29iamVjdCgkc3FsY2hhbm5lbCk7DSAgICAgICAgICAgICAgICAgICAgJGRzdGNoYW5uZWwgPSAkc3FsY2hhLT5ub21lOw0gICAgICAgICAgICAgICAgfSBlbHNlIHsNICAgICAgICAgICAgICAgICAgICAkZHN0Y2hhbm5lbCA9ICRJTkZPUlsnZHN0Y2hhbm5lbCddOw0gICAgICAgICAgICAgICAgfQ0NICAgICAgICAgICAgJGkrKzsNICAgICAgICAgICAgJFNPTUFEVVJBQ0FPW10gPSAkSU5GT1JbJ2R1cmF0aW9uJ10gLyA2MDsNICAgICAgICAgICAgJHNlY29uZHMgPSAkSU5GT1JbJ2R1cmF0aW9uJ107DSAgICAgICAgICAgICRob3VycyA9IGZsb29yKCRzZWNvbmRzIC8gMzYwMCk7DSAgICAgICAgICAgICRzZWNvbmRzLT0gJGhvdXJzICogMzYwMDsNICAgICAgICAgICAgJG1pbnV0ZXMgPSBmbG9vcigkc2Vjb25kcyAvIDYwKTsNICAgICAgICAgICAgJHNlY29uZHMtPSAkbWludXRlcyAqIDYwOw0gICAgICAgICAgICAkY29udmVyc2FvaG9yYXMgPSBzdHJfcGFkKG51bWJlcl9mb3JtYXQoJGhvdXJzLCAwLCAnLCcsICcuJyksIDIsICIwIiwgU1RSX1BBRF9MRUZUKSAuICI6IiAuIHN0cl9wYWQobnVtYmVyX2Zvcm1hdCgkbWludXRlcywgMCwgJywnLCAnLicpLCAyLCAiMCIsIFNUUl9QQURfTEVGVCkgLiAiOiIgLiBzdHJfcGFkKG51bWJlcl9mb3JtYXQoJHNlY29uZHMsIDAsICcsJywgJy4nKSwgMiwgIjAiLCBTVFJfUEFEX0xFRlQpOw0gICAgICAgICAgICAkTElHQUNPRVNSRUNFQklEQVNQT1JSQU1BTFtdID0gYXJyYXkoInNyYyIgPT4gJElORk9SWydzcmMnXSwgImVuZCIgPT4gJElORk9SWydlbmQnXSwgInN0YXJ0IiA9PiAkSU5GT1JbJ3N0YXJ0J10sICJhY2NvdW50Y29kZSIgPT4gJElORk9SWydhY2NvdW50Y29kZSddLCAiZHN0IiA9PiAkSU5GT1JbJ2RzdCddLCAidW5pcXVlaWQiID0+ICRJTkZPUlsndW5pcXVlaWQnXSwgImR1cmF0aW9uIiA9PiAkY29udmVyc2FvaG9yYXMsICJsYXN0YXBwIiA9PiAkZHN0Y2hhbm5lbCwgImNvdW50IiA9PiAkaSk7DSAgICAgICAgfQ0gICAgICAgIGlmIChpc3NldCgkTElHQUNPRVNSRUNFQklEQVNQT1JSQU1BTCkpIHsNICAgICAgICAgICAgJFNPTUFEVVJBQ0FPR0VSQUwgPSBhcnJheV9zdW0oJFNPTUFEVVJBQ0FPKTsNICAgICAgICAgICAgJHNlY29uZHMgPSAkU09NQURVUkFDQU9HRVJBTCAqIDYwOw0gICAgICAgICAgICAkaG91cnMgPSBmbG9vcigkc2Vjb25kcyAvIDM2MDApOw0gICAgICAgICAgICAkc2Vjb25kcy09ICRob3VycyAqIDM2MDA7DSAgICAgICAgICAgICRtaW51dGVzID0gZmxvb3IoJHNlY29uZHMgLyA2MCk7DSAgICAgICAgICAgICRzZWNvbmRzLT0gJG1pbnV0ZXMgKiA2MDsNICAgICAgICAgICAgJFNPTUFUT1RBTFZBTE9SPSBteXNxbF9udW1fcm93cygkc3FsKTsNICAgICAgICAgICAgJGNvbnZlcnNhb2hvcmFzdHQgPSBzdHJfcGFkKG51bWJlcl9mb3JtYXQoJGhvdXJzLCAwLCAnLCcsICcuJyksIDIsICIwIiwgU1RSX1BBRF9MRUZUKSAuICI6IiAuIHN0cl9wYWQobnVtYmVyX2Zvcm1hdCgkbWludXRlcywgMCwgJywnLCAnLicpLCAyLCAiMCIsIFNUUl9QQURfTEVGVCkgLiAiOiIgLiBzdHJfcGFkKG51bWJlcl9mb3JtYXQoJHNlY29uZHMsIDAsICcsJywgJy4nKSwgMiwgIjAiLCBTVFJfUEFEX0xFRlQpOw0gICAgICAgICAgICAkU09NQURVUkFDQU9HRVJBTCA9ICRjb252ZXJzYW9ob3Jhc3R0Ow0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIlNPTUFUT1RBTFZBTE9SIiwgJFNPTUFUT1RBTFZBTE9SKTsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJUT1RBTERVUkFDQU8iLCAkU09NQURVUkFDQU9HRVJBTCk7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbihhcnJheSgiTElHQUNPRVNSRUNFQklEQVNQT1JSQU1BTCIgPT4gJExJR0FDT0VTUkVDRUJJREFTUE9SUkFNQUwpKTsNICAgICAgICB9DSAgICB9DSAgICBpZiAoJF9QT1NUWydyZWxhdG9yaW8nXSA9PSAiMyIpIHsNICAgICAgICBpZiAoJF9QT1NUWydpbmljaW8nXSAhPSAiIiAmJiAkX1BPU1RbJ2ZpbmFsJ10gIT0gIiIpIHsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJJTklDSU8iLCAkX1BPU1RbJ2luaWNpbyddKTsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJGSU5BTCIsICRfUE9TVFsnZmluYWwnXSk7DSAgICAgICAgICAgICRpbmljaW8gPSB0cmltKCRfUE9TVFsnaW5pY2lvJ10pOw0gICAgICAgICAgICAkYXJyID0gZXhwbG9kZSgiLyIsICRpbmljaW8pOw0gICAgICAgICAgICAkaW5pY2lvID0gJGFycnsyfSAuICItIiAuICRhcnJ7MX0gLiAiLSIgLiAkYXJyezB9Ow0gICAgICAgICAgICAkZmluYWwgPSB0cmltKCRfUE9TVFsnZmluYWwnXSk7DSAgICAgICAgICAgICRhcnIgPSBleHBsb2RlKCIvIiwgJGZpbmFsKTsNICAgICAgICAgICAgJGZpbmFsID0gJGFycnsyfSAuICItIiAuICRhcnJ7MX0gLiAiLSIgLiAkYXJyezB9Ow0gICAgICAgIH0gZWxzZSB7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiSU5JQ0lPIiwgIiIpOw0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIkZJTkFMIiwgIiIpOw0gICAgICAgIH0NICAgICAgICAkY29ucyA9IG5ldyBDT05FWEFPKCk7DSAgICAgICAgJHNxbCA9ICRjb25zLT5Db25zdWx0YSgiU0VMRUNUIA0JCQkJCQkJCQlub21lLA0JCQkJCQkJCQlpZA0JCQkJCQkJCUZST00NCQkJCQkJCQkJc3lzdGVtX3JlcG9ydA0JCQkJCQkJCVdIRVJFDQkJCQkJCQkJCWlkID0gJyIgLiAkX1BPU1RbJ3JlbGF0b3JpbyddIC4gIiciKTsNICAgICAgICAkY29ucy0+RGVzY29uZWN0YSgpOw0gICAgICAgICRpbmZvcmVwID0gbXlzcWxfZmV0Y2hfb2JqZWN0KCRzcWwpOw0gICAgICAgICRzbWFydHktPmFzc2lnbigiUkVMQVRPUklPIiwgJGluZm9yZXAtPm5vbWUpOw0gICAgICAgICRzbWFydHktPmFzc2lnbigiSURSRUxBVE9SSU8iLCAkaW5mb3JlcC0+aWQpOw0gICAgICAgICRjb25zID0gbmV3IENPTkVYQU8oKTsNICAgICAgICAkc3FsID0gJGNvbnMtPkNvbnN1bHRhKCJTRUxFQ1QgDQkJCQkJCQkJCQlzdGFydCwNCQkJCQkJCQkJCWVuZCwNCQkJCQkJCQkJCXNyYywNCQkJCQkJCQkJCWFjY291bnRjb2RlLA0JCQkJCQkJCQkJZHN0LA0JCQkJCQkJCQkJZGlzcG9zaXRpb24sDQkJCQkJCQkJCQl1bmlxdWVpZCwNCQkJCQkJCQkJCWR1cmF0aW9uLA0JCQkJCQkJCQkJZHN0Y2hhbm5lbA0JCQkJCQkJCQlGUk9NDQkJCQkJCQkJCQljZHINCQkJCQkJCQkJV0hFUkUNCQkJCQkJCQkJCXNyYyAhPSAnJw0JCQkJCQkJCQlBTkQNCQkJCQkJCQkJCUNIQVJBQ1RFUl9MRU5HVEgoZHN0KSA+IDQNCQkJCQkJCQkJQU5EDQkJCQkJCQkJCQlEQVRFX0ZPUk1BVChzdGFydCwgJyVZLSVtLSVkJykgQkVUV0VFTiAnIiAuICRpbmljaW8gLiAiJyBBTkQgJyIgLiAkZmluYWwgLiAiJwkNCQkJCQkJCQkJT1JERVIgYnkNCQkJCQkJCQkJCXN0YXJ0IEFTQyIpOw0gICAgICAgICRjb25zLT5EZXNjb25lY3RhKCk7DS8vVE9UQUwgREUgTElHQUNPRVMgLSBBVEVORElEQVMNJGNvbnMgPSBuZXcgQ09ORVhBTygpOw0kc3FsaW5mb21UQSA9ICRjb25zLT5Db25zdWx0YSgiU0VMRUNUIA0JCQkJCQkJCUNPVU5UKCopIEFTIHRvdGFsDQkJCQkJCQlGUk9NDQkJCQkJCQkJY2RyDQkJCQkJCQlXSEVSRQ0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjICE9ICcnDQkJCQkJCQlBTkQNDSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEFSQUNURVJfTEVOR1RIKGRzdCkgPiA0DSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EICAgICAgDQkJCQkJCQkJZGlzcG9zaXRpb249ICdBTlNXRVJFRCcNCQkJCQkJCUFORA0JCQkJCQkJCQkJREFURV9GT1JNQVQoc3RhcnQsICclWS0lbS0lZCcpIEJFVFdFRU4gJyIgLiAkaW5pY2lvIC4gIicgQU5EICciIC4gJGZpbmFsIC4gIicJDQkJCQkJCQkJCU9SREVSIGJ5DQkJCQkJCQkJCQlzcmMgQVNDIik7DSRjb25zLT5EZXNjb25lY3RhKCk7DSRpbmZvbVRBID0gbXlzcWxfZmV0Y2hfb2JqZWN0KCRzcWxpbmZvbVRBKTsNDS8vVE9UQUwgREUgTElHQUNPRVMgLSAgTkFPIEFURU5ESURBUw0kY29ucyA9IG5ldyBDT05FWEFPKCk7DSRzcWxpbmZvbVROQSA9ICRjb25zLT5Db25zdWx0YSgiU0VMRUNUIA0JCQkJCQkJCUNPVU5UKCopIEFTIHRvdGFsDQkJCQkJCQlGUk9NDQkJCQkJCQkJY2RyDQkJCQkJCQlXSEVSRQ0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjICE9ICcnDQkJCQkJCQkNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQNDSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEFSQUNURVJfTEVOR1RIKGRzdCkgPiA0DSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EICAgICAgDQkJCQkJCQkJZGlzcG9zaXRpb249ICdOTyBBTlNXRVInDQkJCQkJCQlBTkQNCQkJCQkJCQkJCURBVEVfRk9STUFUKHN0YXJ0LCAnJVktJW0tJWQnKSBCRVRXRUVOICciIC4gJGluaWNpbyAuICInIEFORCAnIiAuICRmaW5hbCAuICInCQ0JCQkJCQkJCQlPUkRFUiBieQ0JCQkJCQkJCQkJc3JjIEFTQyIpOw0kY29ucy0+RGVzY29uZWN0YSgpOw0kaW5mb21UTkEgPSBteXNxbF9mZXRjaF9vYmplY3QoJHNxbGluZm9tVE5BKTsNDS8vVE9UQUwgREUgTElHQUNPRVMgLSAgT0NVUEFEQVMNJGNvbnMgPSBuZXcgQ09ORVhBTygpOw0kc3FsaW5mb21UTyA9ICRjb25zLT5Db25zdWx0YSgiU0VMRUNUIA0JCQkJCQkJCUNPVU5UKCopIEFTIHRvdGFsDQkJCQkJCQlGUk9NDQkJCQkJCQkJY2RyDQkJCQkJCQlXSEVSRQ0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjICE9ICcnDQkJCQkJCQkJDSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EDQ0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hBUkFDVEVSX0xFTkdUSChkc3QpID4gNA0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORCAgICAgIA0JCQkJCQkJCWRpc3Bvc2l0aW9uPSAnQlVTWScNCQkJCQkJCUFORA0JCQkJCQkJCQkJREFURV9GT1JNQVQoc3RhcnQsICclWS0lbS0lZCcpIEJFVFdFRU4gJyIgLiAkaW5pY2lvIC4gIicgQU5EICciIC4gJGZpbmFsIC4gIicJDQkJCQkJCQkJCU9SREVSIGJ5DQkJCQkJCQkJCQlzcmMgQVNDIik7DSRjb25zLT5EZXNjb25lY3RhKCk7DSRpbmZvbVRPID0gbXlzcWxfZmV0Y2hfb2JqZWN0KCRzcWxpbmZvbVRPKTsNDSAgICAgICAgJGkgPSAwOw0gICAgICAgIHdoaWxlICgkSU5GT1IgPSBteXNxbF9mZXRjaF9hcnJheSgkc3FsKSkgew0gICAgICAgICRjb25zID0gbmV3IENPTkVYQU8oKTsNICAgICAgICAgICAgICAgICRzcWxjaGFubmVsID0gJGNvbnMtPkNvbnN1bHRhKCJTRUxFQ1QNCQkJCQkJCQkJCQkqIA0JCQkJCQkJCQkJRlJPTQ0JCQkJCQkJCQkJCWNoYW5uZWxfbmFtZQ0JCQkJCQkJCQkJV0hFUkUNCQkJCQkJCQkJCQljaGFubmVsIGxpa2UgJyIgLiAkSU5GT1JbJ2Rpc3Bvc2l0aW9uJ10gLiAiJSciKTsNICAgICAgICAgICAgICAgICRjb25zLT5EZXNjb25lY3RhKCk7DSAgICAgICAgICAgICAgICBpZiAobXlzcWxfbnVtX3Jvd3MoJHNxbGNoYW5uZWwpID09ICIxIikgew0gICAgICAgICAgICAgICAgICAgICRzcWxjaGEgPSBteXNxbF9mZXRjaF9vYmplY3QoJHNxbGNoYW5uZWwpOw0gICAgICAgICAgICAgICAgICAgICRkaXNwb3NpdGlvbiA9ICRzcWxjaGEtPm5vbWU7DSAgICAgICAgICAgICAgICB9IGVsc2Ugew0gICAgICAgICAgICAgICAgICAgICRkaXNwb3NpdGlvbiA9ICRJTkZPUlsnZGlzcG9zaXRpb24nXTsNICAgICAgICAgICAgICAgIH0NDQ0gICAgICAgICAgICAkaSsrOw0gICAgICAgICAgICAkU09NQURVUkFDQU9bXSA9ICRJTkZPUlsnZHVyYXRpb24nXSAvIDYwOw0gICAgICAgICAgICAkc2Vjb25kcyA9ICRJTkZPUlsnZHVyYXRpb24nXTsNICAgICAgICAgICAgJGhvdXJzID0gZmxvb3IoJHNlY29uZHMgLyAzNjAwKTsNICAgICAgICAgICAgJHNlY29uZHMtPSAkaG91cnMgKiAzNjAwOw0gICAgICAgICAgICAkbWludXRlcyA9IGZsb29yKCRzZWNvbmRzIC8gNjApOw0gICAgICAgICAgICAkc2Vjb25kcy09ICRtaW51dGVzICogNjA7DSAgICAgICAgICAgICRjb252ZXJzYW9ob3JhcyA9IHN0cl9wYWQobnVtYmVyX2Zvcm1hdCgkaG91cnMsIDAsICcsJywgJy4nKSwgMiwgIjAiLCBTVFJfUEFEX0xFRlQpIC4gIjoiIC4gc3RyX3BhZChudW1iZXJfZm9ybWF0KCRtaW51dGVzLCAwLCAnLCcsICcuJyksIDIsICIwIiwgU1RSX1BBRF9MRUZUKSAuICI6IiAuIHN0cl9wYWQobnVtYmVyX2Zvcm1hdCgkc2Vjb25kcywgMCwgJywnLCAnLicpLCAyLCAiMCIsIFNUUl9QQURfTEVGVCk7DSAgICAgICAgICAgICRMSUdBQ09FU0VGRVRVQURBU1tdID0gYXJyYXkoInNyYyIgPT4gJElORk9SWydzcmMnXSwgImVuZCIgPT4gJElORk9SWydlbmQnXSwgInN0YXJ0IiA9PiAkSU5GT1JbJ3N0YXJ0J10sICJhY2NvdW50Y29kZSIgPT4gJElORk9SWydhY2NvdW50Y29kZSddLCAiZHN0Y2hhbm5lbCIgPT4gJElORk9SWydkc3RjaGFubmVsJ10sICJkc3QiID0+ICRJTkZPUlsnZHN0J10sICJ1bmlxdWVpZCIgPT4gJElORk9SWyd1bmlxdWVpZCddLCAiZHVyYXRpb24iID0+ICRjb252ZXJzYW9ob3JhcywgImxhc3RhcHAiID0+JGRpc3Bvc2l0aW9uICwgImNvdW50IiA9PiAkaSk7DSAgICAgICAgfQ0gICAgICAgIGlmIChpc3NldCgkTElHQUNPRVNFRkVUVUFEQVMpKSB7DSAgICAgICAgICAgICRTT01BRFVSQUNBT0dFUkFMID0gYXJyYXlfc3VtKCRTT01BRFVSQUNBTyk7DSAgICAgICAgICAgICRzZWNvbmRzID0gJFNPTUFEVVJBQ0FPR0VSQUwgKiA2MDsNICAgICAgICAgICAgJGhvdXJzID0gZmxvb3IoJHNlY29uZHMgLyAzNjAwKTsNICAgICAgICAgICAgJHNlY29uZHMtPSAkaG91cnMgKiAzNjAwOw0gICAgICAgICAgICAkbWludXRlcyA9IGZsb29yKCRzZWNvbmRzIC8gNjApOw0gICAgICAgICAgICAkc2Vjb25kcy09ICRtaW51dGVzICogNjA7DSAgICAgICAgICAgICRTT01BVE9UQUxWQUxPUj0gbXlzcWxfbnVtX3Jvd3MoJHNxbCk7DSAgICAgICAgICAgICRjb252ZXJzYW9ob3Jhc3R0ID0gc3RyX3BhZChudW1iZXJfZm9ybWF0KCRob3VycywgMCwgJywnLCAnLicpLCAyLCAiMCIsIFNUUl9QQURfTEVGVCkgLiAiOiIgLiBzdHJfcGFkKG51bWJlcl9mb3JtYXQoJG1pbnV0ZXMsIDAsICcsJywgJy4nKSwgMiwgIjAiLCBTVFJfUEFEX0xFRlQpIC4gIjoiIC4gc3RyX3BhZChudW1iZXJfZm9ybWF0KCRzZWNvbmRzLCAwLCAnLCcsICcuJyksIDIsICIwIiwgU1RSX1BBRF9MRUZUKTsNICAgICAgICAgICAgJFNPTUFEVVJBQ0FPR0VSQUwgPSAkY29udmVyc2FvaG9yYXN0dDsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJTT01BVE9UQUxWQUxPUiIsICRTT01BVE9UQUxWQUxPUik7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiVkFMT1JNQVhJTU9BVEEiLCAkaW5mb21UQS0+dG90YWwpOw0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIlZBTE9STUFYSU1PQVROQSIsICRpbmZvbVROQS0+dG90YWwpOw0gICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oIlZBTE9STUFYSU1PQVRPIiwgJGluZm9tVE8tPnRvdGFsKTsNICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJUT1RBTERVUkFDQU8iLCAkU09NQURVUkFDQU9HRVJBTCk7DSAgICAgICAgICAgICRzbWFydHktPmFzc2lnbihhcnJheSgiTElHQUNPRVNFRkVUVUFEQVMiID0+ICRMSUdBQ09FU0VGRVRVQURBUykpOw0gICAgICAgIH0NICAgIH0NfSBlbHNlIHsNICAgIGVjaG8gIjxzY3JpcHQ+DQkJCWFsZXJ0KCdTZWxlY2lvbmUgUmVsYXRvcmlvIHBhcmEgSW1wcmVzc2FvIScpOwkNCQk8L3NjcmlwdD4iOw0gICAgZWNobyAiPHNjcmlwdCBsYW5ndWFnZT0namF2YXNjcmlwdCc+DQkNCXNldFRpbWVvdXQoICdmZWNoYXIoKTsgJywwKTsgLy9mZWNoYSBhIGphbmVsYSBlbSA1IHNlZ3VuZG9zDQ0JZnVuY3Rpb24gZmVjaGFyKCl7DQlpZihkb2N1bWVudC5hbGwpew0Jd2luZG93Lm9wZW5lciA9IHdpbmRvdw0Jd2luZG93LmNsb3NlKCcjJykNCX1lbHNlew0Jc2VsZi5jbG9zZSgpOw0JfQ0JfQ0JPC9zY3JpcHQ+IjsNfTsN')));
?>
Function Calls
| stripslashes | 1 |
| base64_decode | 1 |
Stats
| MD5 | 87052f455cd1b53ef37cdcb3b328d673 |
| Eval Count | 1 |
| Decode Time | 183 ms |