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 @eval("?>".base64_decode("PD9waHAKc2Vzc2lvbl9zdGFydCgpOwpyZXF1aXJlX29uY2UoImNvbnRyb2..
Decoded Output download
?>b'<?php
session_start();
require_once("controles/usuarios.php");
require_once("controles/listas.php");
if (checarUsuario()) {
require_once("cabecalho.php");
$usuarios = listarUsuarios();
$listas = listarListas();
$buscar = ("SELECT * FROM usuario WHERE id_criador = ".$_SESSION[\'id_usuario\']." AND dia = 31");
$resut = mysqli_query($conexao, $buscar);
$credito2 = mysqli_num_rows($resut);
$buscar = "SELECT * FROM usuario WHERE id_usuario = ".$_SESSION[\'id_usuario\']."";
$resut = mysqli_query($conexao, $buscar);
while($usuario2 = mysqli_fetch_array($resut)){
$creditos = $credito2;
$credito = $usuario2[\'credito\'];}
?>
<style id="checkme">
.page-2content {
padding-left: 240px !important;
padding-right: 240px !important;
}
</style>
<div id="conteudo-painel" style="padding-left: 0px;" class="table-responsive container">
<?php if ($usuarios) { ?>
<div class="mb-5 form-group float-right">
</div>
<div class="mb-5 form-group float-left">
<input type="text" class="pesquisar form-control" placeholder="Pesquisar...">
</div>
<table class=\'table table-bordered table-hover\'>
<caption>Testes</caption>
<thead class="thead-light">
<tr align="center">
<th class=\'nomecol\' style="width: 10%" scope="col">Nome</th>
<th class=\'nomecol\' style="width: 5%" scope="col">Login</th>
<th class=\'nomecol\' style="width: 5%" scope="col">Senha</th>
<th class=\'nomecol\' style="width: 1%" scope="col">Conexo</th>
<th class=\'nomecol\' style="width: 5%" scope="col">Criador</th>
<th class=\'nomecol\' style="width: 5%" scope="col">Estado</th>
<th class=\'nomecol\' style="width: 12%" scope="col">Listas</th>
<th class=\'nomecol\' style="width: 10%" scope="col">Expirar</th>
<th class=\'nomecol\' style="width: 5%" scope="col">Opes</th>
</tr>
</thead>
<tbody id="conteudo">
<?php foreach($usuarios as $usuario) { ?>
<?php
if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
$_SERVER[\'REMOTE_ADDR\'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
}
$ip = $_SERVER["REMOTE_ADDR"];
$logs = ("SELECT * FROM logs WHERE id_usuario = ".$usuario[\'id_usuario\']." AND ip = \'$ip\' limit 1");
$resut = mysqli_query($conexao, $logs);
$log = mysqli_num_rows($resut);
?>
<?php if ($usuario[\'dia\'] == 1){ ?>
<?php if ($usuario[\'admin\'] == 0) if ($usuario[\'vendedor\'] == 0) { ?>
<?php
$hoje = date(\'Y-m-d\');
$data = $usuario[\'data\'];
$a = explode("-","$data");
$b = explode("-","$hoje");
$antiga= mktime(0, 0, 0, $b[1], $b[2], $b[0]);
$atual= mktime(0, 0, 0, $a[1], $a[2], $a[0]);
$diferenca= $atual-$antiga;
$datas = floor($diferenca/84600);
$datas1 = "1"; $datas2 = $datas;
if($datas1 <= $datas2){
$id_usuario = $usuario[\'id_usuario\'];
$estado = "1";
$result = "UPDATE usuario SET estado_usuario=\'$estado\' WHERE id_usuario=\'$id_usuario\'";
$atualiza = mysqli_query($conexao, $result);
} else {
$id_usuario = $usuario[\'id_usuario\'];
$estado = "0";
$tipo = "0";
$result = "UPDATE usuario SET vendedor=\'$tipo\', admin=\'$tipo\', estado_usuario=\'$estado\' WHERE id_usuario=\'$id_usuario\'";
$atualiza = mysqli_query($conexao, $result);}
?>
<?php
$passwords = "SELECT * FROM passwords WHERE id_usuario = ".$usuario[\'id_usuario\']."";
$resut = mysqli_query($conexao, $passwords);
while($password = mysqli_fetch_array($resut)){
?>
<tr>
<td align="center"> <?=$usuario[\'nome_usuario\']?> </td>
<td align="center"> <?=$usuario[\'login_usuario\']?> </td>
<td align="center"> <?php echo $password[\'senha\'];} ?> </td>
<td align="center"> <?php if ($usuario[\'conectado\'] == 0) {echo "";} else {echo "".$log." / ".$usuario[\'conectado\']."";} ?> </td>
<td align="center"> <?php echo $usuario[\'criador\'] ? $usuario[\'criador\'][\'nome_usuario\'] : \'Sistema\'; ?> </td>
<td align="center"> <?php if ($usuario[\'estado_usuario\'] == 1) { echo "Ativado"; } else { echo "Desativado"; } ?> </td>
<td align="center"> <?php foreach (listasUsuario($usuario["id_usuario"]) as $lista) echo \'[ \'.$lista[\'nome_lista\'].\' ]\'; ?> </td>
<td align="center"> <?php if ($usuario[\'estado_usuario\'] == 1) { echo "Dia ".$usuario["dia"].""; } else { echo "Expirou Dia ".$usuario["dia"].""; } ?> </td>
</td>
<td style="display: contents;">
<div class="dropdown">
<style>.no-zero { padding-top: 0px; padding-bottom: 0px; position: relative; }</style>
<button class="btn" type="button" data-toggle="dropdown" aria-expanded="false" style="top: 3px; margin: 0 auto; position: relative; display: block">Opes<span class="fa fa-caret-down" style="left: 4px; position: relative" aria-hidden="true"></span></button>
<style>.pointer { cursor: pointer; border:none }</style>
<ul class="no-zero dropdown-menu pointer" x-placement="bottom-start">
<?php if($creditos <= $credito){ ?>
<li align="center"><a class=\'btn btn-outline-secondary\' onclick="migrarConfirma(\'<?=$usuario[\'id_usuario\']?>\', \'<?=$usuario[\'nome_usuario\']; ?>\')" style="width: 100%;display: block;padding: 5px;top: -10px;"><i class="fas fa-user"></i> Migrar</a></li>
<?php } ?>
<?php if($_SESSION[\'admin\']) { ?>
<li align="center"><a class=\'btn btn-outline-secondary\' onclick="migrarConfirma(\'<?=$usuario[\'id_usuario\']?>\', \'<?=$usuario[\'nome_usuario\']; ?>\')" style="width: 100%;display: block;padding: 5px;top: -10px;"><i class="fas fa-user"></i> Migrar</a></li>
<?php } ?>
<li align="center"><a class=\'btn btn-outline-secondary\' onclick="verLogs(\'<?=$usuario[\'id_usuario\']?>\')" style="width: 100%; display: block; padding: 5px"><i class="fas fa-clipboard-list"></i> Logs</a></li>
<li align="center"><a class=\'btn btn-outline-secondary\' onclick="removerConfirma(\'<?=$usuario[\'id_usuario\']?>\', \'<?=$usuario[\'nome_usuario\']; ?>\')" style="width: 100%; display: block; padding: 5px"><i class="far fa-trash-alt"></i> Excluir</a></li>
</ul>
</div>
</td>
</tr>
<?php } ?>
<?php } ?>
<?php } ?>
</tbody>
</table>
<?php
}
?>
</div>
<div class="h3 mt-5 row align-items-center justify-content-center">
<i onclick="$(\'#cadastro\').modal()" class="btn btn-outline-info text-dark fas fa-plus"></i>
</div>
</div>
</main>
<!-- page-content" -->
</div>
<!-- Cadastro Inicio -->
<div class="modal fade" id="cadastro" tabindex="-1" role="dialog" aria-labelledby="Cadastrar" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="TituloModalLongoExemplo">Adicionar Teste</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Fechar">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<form id="cadastro-form">
<div class="container">
<div class="form-group">
<label>Nome:</label>
<input type="text" class="form-control" name="nome" placeholder="Nome" value="<?php $gerador = rand(8,8); $valor = substr(str_shuffle("abcdefghijlkmnopqrstuvxyzwABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $gerador); echo $valor; ?>">
<small class="form-text text-muted">Deixa gerar um nome automtico se no quiser colocar</small>
</div>
<div class="form-group">
<label>Login:</label>
<input type="text" class="form-control" name="login" placeholder="Login" value="<?php echo rand(1,999999);?>">
<small class="form-text text-muted">Deixa gerar um login automtico se no quiser colocar</small>
</div>
<div id="sC">
<div id="divSenhaC" class="form-group">
<label>Senha:</label>
<input type="password" class="form-control" name="senha" placeholder="Senha" value="<?php echo rand(1,999999);?>">
<small class="form-text text-muted">Deixa gerar uma senha automtico se no quiser colocar</small>
</div>
</div>
<div class="form-group">
<label>Nvel:</label>
<div class="ml-0 row">
<select id="nivelC" class="selectpicker" title="Nvel">
<option value="admin" hidden></option>
<option value="vendedor" hidden></option>
<option value="cliente">Cliente</option>
</select>
</div>
</div>
<div class="form-group" style="display: none">
<label>Administrador:</label>
<div class="ml-0 row">
<select value="0" id="adminC" class="selectpicker" title="Administrador" name="admin" required>
<option value="1">Sim</option>
<option value="0">No</option>
</select>
</div>
</div>
<div class="form-group" style="display: none">
<label>Vendedor:</label>
<div class="ml-0 row">
<select value="0" id="vendedorC" class="selectpicker" title="Vendedor" name="vendedor" required>
<option value="1">Sim</option>
<option value="0">No</option>
</select>
</div>
</div>
<div class="form-group">
<label>Listas:</label>
<div class="ml-0 row">
<select name="lista" class="selectpicker" title="Listas" multiple>
<?php if ($listas) { foreach ($listas as $lista) {?>
<option value="<?=$lista[\'id_lista\']?>"><?=$lista[\'nome_lista\']?></option>
<?php }
} ?>
</select>
</div>
</div>
<button type="none" onclick="addForce()" class="btn btn-danger">Adicionar</button>
</div>
</form>
</div>
</div>
</div>
</div>
<!-- Cadastro Fim-->
<!-- Remove Inicio -->
<div class="modal fade" id="remover" tabindex="-1" role="dialog" aria-labelledby="Cadastrar" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Tem certeza?</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Fechar">
<span aria-hidden="true">×</span>
</button>
</div>
<div id="remover-conteudo" class="modal-body"></div>
</div>
</div>
</div>
<!-- Remove Fim-->
<?php if($_SESSION[\'admin\']) { ?>
<!-- Migrar Inicio -->
<div class="modal fade" id="migrar" tabindex="-1" role="dialog" aria-labelledby="Cadastrar" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Migrar para Usurio</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Fechar">
<span aria-hidden="true">×</span>
</button>
</div>
<div id="migrar-conteudo" class="modal-body"></div>
</div>
</div>
</div>
<!-- Migrar Fim-->
<?php } ?>
<?php if($creditos <= $credito){ ?>
<!-- Migrar Inicio -->
<div class="modal fade" id="migrar" tabindex="-1" role="dialog" aria-labelledby="Cadastrar" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Migrar para Usurio</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Fechar">
<span aria-hidden="true">×</span>
</button>
</div>
<div id="migrar-conteudo" class="modal-body"></div>
</div>
</div>
</div>
<!-- Migrar Fim-->
<?php } ?>
</body>
<script>
var clone = $("#divSenha").clone();
var cloneC = $("#divSenhaC").clone();
//$("#divSenhaC").remove();
$("#cadastro").on(\'hidden.bs.modal\', function (e) {
if ($( "#adminC" ).val() != 1) {
//$("#sC").empty();//DO_NOTHING
}
});
$( "#adminC" ).change(function() {
if ($( "#adminC" ).val() == 1) {
$("#sC").append(cloneC);
} else {
$("#sC").empty();
}
});
function removerConfirma(id,nome) {
$(\'#remover-conteudo\').html(\'<div class="alert alert-danger" role="alert"><strong> Remover </strong>\' + nome + \'?</div><button onclick="remover(\' + id + \')" type="submit" class="btn btn-danger float-right">Remover</button>\');
$(\'#remover\').modal();
}
function migrarConfirma(id,nome) {
$(\'#migrar-conteudo\').html(\'<div class="alert alert-warning" role="alert"><strong> Deseja Migrar o Teste </strong>\' + nome + \' Usurio? <br /> Voc no poder Desfazer essa operao.</div><button onclick="migrar(\' + id + \')" type="submit" class="btn btn-success">Sim, Prossiga!</button>\');
$(\'#migrar\').modal();
}
function editarConfirma(dia, id,nome,contato,login,estado,admin, vendedor, lista) {
if(parseInt(dia) > 0){
$(\'#dia\').val(parseInt(dia));
} else {
$(\'#dia\').val(\'\');
}
$(\'#idE\').val(id);
$(\'#nomeE\').val(nome);
$(\'#nivelE\').val(parseInt(vendedor) == 1 ? \'vendedor\' : (parseInt(admin) == 1) ? \'admin\' : \'cliente\');
setTimeout(() => {
$(\'#nivelE\').val(parseInt(vendedor) == 1 ? \'vendedor\' : (parseInt(admin) == 1) ? \'admin\' : \'cliente\');
$(\'*[data-id=nivelE]\').text(parseInt(vendedor) == 1 ? \'vendedor\' : (parseInt(admin) == 1) ? \'admin\' : \'cliente\');
}, 500);
$(\'#contatoE\').val(contato);
$(\'#loginE\').val(login);
$(\'#estadoE\').val(estado);
$(\'#estadoE\').selectpicker(\'render\');
$(\'#adminE\').val(admin);
$(\'#adminE\').selectpicker(\'render\');
if (parseInt(admin) == 0) {
console.log(parseInt(vendedor) !== 1);
if(parseInt(vendedor) !== 1){
$(\'#exdiaE\').show();
$(\'#CreditoC\').show();
$(\'#ConectadoE\').show();
} else {
$(\'#exdiaE\').hide();
$(\'#CreditoE\').hide();
$(\'#ConectadoE\').hide();
}
//$(\'#divSenha\').remove();
} else if ($(\'#divSenha\').length < 1) {
$(\'#s\').append(clone);
}
$(\'#listaE\').val(lista);
$(\'#listaE\').selectpicker(\'render\');
$(\'#editar\').modal();
}
var addForce = function(){
$( "#cadastro-form" ).trigger(\'submit\');
};
var added = false;
$( "#cadastro-form" ).submit(function( event ) {
if(!added){
added = true;
if($(\'#cadastro-form select[name="vendedor"]\').val().trim() == ""){
$(\'#cadastro-form select[name="vendedor"]\').val(0);
}
if($(\'#cadastro-form select[name="admin"]\').val().trim() == ""){
$(\'#cadastro-form select[name="admin"]\').val(0);
}
$.ajax({
type: "POST",
url: "controles/adicionar-teste.php",
data: $("#cadastro-form").serialize(),
success: function(data) {
location.reload();
},
error: function(data) {
resultado(data.responseText);
}
});
}
event.preventDefault();
});
var eddited = false;
var forceEdit = function(){
$( "#editar-form" ).trigger(\'submit\');
}
$( "#editar-form" ).submit(function( event ) {
if(!eddited){
eddited = true;
if($(\'#editar-form select[name="vendedor"]\').val().trim() == ""){
$(\'#editar-form select[name="vendedor"]\').val(0);
}
if($(\'#editar-form select[name="admin"]\').val().trim() == ""){
$(\'#editar-form select[name="admin"]\').val(0);
}
$.ajax({
type: "POST",
url: "controles/editar-usuario.php",
data: $("#editar-form").serialize(),
success: function(data) {
location.reload();
},
error: function(data) {
resultado(data.responseText);
}
});
}
event.preventDefault();
});
<?php if($_SESSION[\'admin\']) { ?>
$(\'#vendedorC\').val(0);
$(\'#adminC\').val(1);
<?php } ?>
$(\'#nivelC\').on(\'change\', function(){
var value = $(this).val();
$(\'#sC\').empty();
if(value == \'vendedor\'){
$(\'#adminC\').val(0);
$(\'#vendedorC\').val(1);
$(\'#CreditoC\').val(1);
$("#sC").append(cloneC);
$(\'#exdiaC\').hide();
$(\'#ConectadoC\').hide();
} else if (value == \'admin\'){
$(\'#adminC\').val(1);
$(\'#vendedorC\').val(0);
$("#sC").append(cloneC);
$(\'#exdiaC\').hide();
$(\'#ConectadoC\').hide();
} else {
$(\'#adminC\').val(0);
$(\'#vendedorC\').val(0);
$("#sC").append(cloneC);
$(\'#exdiaC\').show();
$(\'#ConectadoC\').show();
}
});
function setCookie(name,value,days) {
var expires = "";
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days*24*60*60*1000));
expires = "; expires=" + date.toUTCString();
}
document.cookie = name + "=" + (value || "") + expires + "; path=/";
}
function getCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(\';\');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==\' \') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function eraseCookie(name) {
document.cookie = name+\'=; Max-Age=-99999999;\';
}
function logar(id){
if(!getCookie(\'original\')){
setCookie(\'original\', <?php echo $_SESSION[\'id_usuario\'] ?>, 1);
}
$.get(\'controles/forcar-login.php?id_usuario=\' + id, function(){
window.location.reload();
});
}
function remover(id){
window.location.href = \'controles/remover-teste.php?id_usuario=\' + id;
}
function migrar(id){
window.location.href = \'controles/migrar-usuario.php?id_usuario=\' + id;
}
function verLogs(id){
window.location.href = \'log.php?id_usuario=\' + id;
}
$(\'#nivelE\').on(\'change\', function(){
var value = $(this).val();
if(value == \'vendedor\'){
$(\'#adminE\').val(0);
$(\'#vendedorE\').val(1);
$("#s").append(clone);
$(\'#exdiaE\').hide();
$(\'#CreditoE\').hide();
$(\'#ConectadoE\').hide();
} else if (value == \'admin\') {
$(\'#adminE\').val(1);
$(\'#vendedorE\').val(0);
$("#s").append(clone);
$(\'#exdiaE\').hide();
$(\'#CreditoE\').hide();
$(\'#ConectadoE\').hide();
} else {
$(\'#adminE\').val(0);
$(\'#vendedorE\').val(0);
$("#s").append(clone);
$(\'#exdiaE\').show();
$(\'#CreditoE\').show();
$(\'#ConectadoE\').show();
}
});
if(window.mobilecheck()){
$(\'#checkme\').remove();
}
$(\'.thead-light th:not(".nomecol")\').remove();
</script>
<?php require_once("comum.php");
require_once("alerta.php");?>
</html>
<?php
} else {
header("Location: index.php");
die();
}
?>'
Did this file decode correctly?
Original Code
<?php @eval("?>".base64_decode("PD9waHAKc2Vzc2lvbl9zdGFydCgpOwpyZXF1aXJlX29uY2UoImNvbnRyb2xlcy91c3Vhcmlvcy5waHAiKTsKcmVxdWlyZV9vbmNlKCJjb250cm9sZXMvbGlzdGFzLnBocCIpOwppZiAoY2hlY2FyVXN1YXJpbygpKSB7CnJlcXVpcmVfb25jZSgiY2FiZWNhbGhvLnBocCIpOwokdXN1YXJpb3MgPSBsaXN0YXJVc3VhcmlvcygpOwokbGlzdGFzID0gbGlzdGFyTGlzdGFzKCk7CiRidXNjYXIgPSAoIlNFTEVDVCAqIEZST00gdXN1YXJpbyBXSEVSRSBpZF9jcmlhZG9yID0gIi4kX1NFU1NJT05bJ2lkX3VzdWFyaW8nXS4iIEFORCBkaWEgPSAzMSIpOwokcmVzdXQgPSBteXNxbGlfcXVlcnkoJGNvbmV4YW8sICRidXNjYXIpOwokY3JlZGl0bzIgPSBteXNxbGlfbnVtX3Jvd3MoJHJlc3V0KTsKJGJ1c2NhciA9ICJTRUxFQ1QgKiBGUk9NIHVzdWFyaW8gV0hFUkUgaWRfdXN1YXJpbyA9ICIuJF9TRVNTSU9OWydpZF91c3VhcmlvJ10uIiI7CiRyZXN1dCA9IG15c3FsaV9xdWVyeSgkY29uZXhhbywgJGJ1c2Nhcik7CndoaWxlKCR1c3VhcmlvMiA9IG15c3FsaV9mZXRjaF9hcnJheSgkcmVzdXQpKXsKJGNyZWRpdG9zID0gJGNyZWRpdG8yOwokY3JlZGl0byA9ICR1c3VhcmlvMlsnY3JlZGl0byddO30KPz4KPHN0eWxlIGlkPSJjaGVja21lIj4KCS5wYWdlLTJjb250ZW50IHsKCSAgICBwYWRkaW5nLWxlZnQ6IDI0MHB4ICFpbXBvcnRhbnQ7CgkJcGFkZGluZy1yaWdodDogMjQwcHggIWltcG9ydGFudDsKCX0KCTwvc3R5bGU+CiAgICAgICAgPGRpdiBpZD0iY29udGV1ZG8tcGFpbmVsIiBzdHlsZT0icGFkZGluZy1sZWZ0OiAwcHg7IiBjbGFzcz0idGFibGUtcmVzcG9uc2l2ZSBjb250YWluZXIiPgoJCQk8P3BocCBpZiAoJHVzdWFyaW9zKSB7ID8+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYi01IGZvcm0tZ3JvdXAgZmxvYXQtcmlnaHQiPgogICAgICAgICAgICAgICAgPC9kaXY+CgkJCQk8ZGl2IGNsYXNzPSJtYi01IGZvcm0tZ3JvdXAgZmxvYXQtbGVmdCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJwZXNxdWlzYXIgZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0iUGVzcXVpc2FyLi4uIj4KICAgICAgICAgICAgICAgIDwvZGl2PgoJCQk8dGFibGUgY2xhc3M9J3RhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyJz4KICAgICAgICAgICAgICAgICAgICA8Y2FwdGlvbj5UZXN0ZXM8L2NhcHRpb24+CgkJCQk8dGhlYWQgY2xhc3M9InRoZWFkLWxpZ2h0Ij4KCQkJCQk8dHIgYWxpZ249ImNlbnRlciI+CgkJCQkJCTx0aCBjbGFzcz0nbm9tZWNvbCcgc3R5bGU9IndpZHRoOiAxMCUiIHNjb3BlPSJjb2wiPk5vbWU8L3RoPgoJCQkJCQk8dGggY2xhc3M9J25vbWVjb2wnIHN0eWxlPSJ3aWR0aDogNSUiIHNjb3BlPSJjb2wiPkxvZ2luPC90aD4KCQkJCQkJPHRoIGNsYXNzPSdub21lY29sJyBzdHlsZT0id2lkdGg6IDUlIiBzY29wZT0iY29sIj5TZW5oYTwvdGg+CgkJCQkJCTx0aCBjbGFzcz0nbm9tZWNvbCcgc3R5bGU9IndpZHRoOiAxJSIgc2NvcGU9ImNvbCI+Q29uZXjDo288L3RoPgoJCQkJCQk8dGggY2xhc3M9J25vbWVjb2wnIHN0eWxlPSJ3aWR0aDogNSUiIHNjb3BlPSJjb2wiPkNyaWFkb3I8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9J25vbWVjb2wnIHN0eWxlPSJ3aWR0aDogNSUiIHNjb3BlPSJjb2wiPkVzdGFkbzwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0nbm9tZWNvbCcgc3R5bGU9IndpZHRoOiAxMiUiIHNjb3BlPSJjb2wiPkxpc3RhczwvdGg+CgkJCQkJCTx0aCBjbGFzcz0nbm9tZWNvbCcgc3R5bGU9IndpZHRoOiAxMCUiIHNjb3BlPSJjb2wiPkV4cGlyYXI8L3RoPgoJCQkJCQk8dGggY2xhc3M9J25vbWVjb2wnIHN0eWxlPSJ3aWR0aDogNSUiIHNjb3BlPSJjb2wiPk9ww6fDtWVzPC90aD4KCQkJCQk8L3RyPgoJCQkJPC90aGVhZD4KICAgICAgICAgICAgICAgIDx0Ym9keSBpZD0iY29udGV1ZG8iPgoJCQkJCTw/cGhwIGZvcmVhY2goJHVzdWFyaW9zIGFzICR1c3VhcmlvKSB7ID8+CgkJCQkJPD9waHAKCQkJCQlpZiAoaXNzZXQoJF9TRVJWRVJbIkhUVFBfQ0ZfQ09OTkVDVElOR19JUCJdKSkgewoJCQkJCSRfU0VSVkVSWydSRU1PVEVfQUREUiddID0gJF9TRVJWRVJbIkhUVFBfQ0ZfQ09OTkVDVElOR19JUCJdOwoJCQkJCX0KCQkJCQkkaXAgPSAkX1NFUlZFUlsiUkVNT1RFX0FERFIiXTsKCQkJCQkkbG9ncyA9ICgiU0VMRUNUICogRlJPTSBsb2dzIFdIRVJFIGlkX3VzdWFyaW8gPSAiLiR1c3VhcmlvWydpZF91c3VhcmlvJ10uIiBBTkQgaXAgPSAnJGlwJyBsaW1pdCAxIik7CgkJCQkJJHJlc3V0ID0gbXlzcWxpX3F1ZXJ5KCRjb25leGFvLCAkbG9ncyk7CgkJCQkJJGxvZyA9IG15c3FsaV9udW1fcm93cygkcmVzdXQpOwoJCQkJCT8+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCR1c3VhcmlvWydkaWEnXSA9PSAxKXsgPz4KCQkJCQk8P3BocCBpZiAoJHVzdWFyaW9bJ2FkbWluJ10gPT0gMCkgaWYgKCR1c3VhcmlvWyd2ZW5kZWRvciddID09IDApIHsgPz4KCQkJCQk8P3BocAoJCQkJCSRob2plID0gZGF0ZSgnWS1tLWQnKTsKCQkJCQkkZGF0YSA9ICR1c3VhcmlvWydkYXRhJ107CgkJCQkJJGEgPSBleHBsb2RlKCItIiwiJGRhdGEiKTsKCQkJCQkkYiA9IGV4cGxvZGUoIi0iLCIkaG9qZSIpOwoJCQkJCSRhbnRpZ2E9IG1rdGltZSgwLCAwLCAwLCAkYlsxXSwgJGJbMl0sICRiWzBdKTsKCQkJCQkkYXR1YWw9IG1rdGltZSgwLCAwLCAwLCAkYVsxXSwgJGFbMl0sICRhWzBdKTsKCQkJCQkkZGlmZXJlbmNhPSAkYXR1YWwtJGFudGlnYTsKCQkJCQkkZGF0YXMgPSBmbG9vcigkZGlmZXJlbmNhLzg0NjAwKTsKCQkJCSAgICAkZGF0YXMxID0gIjEiOyAkZGF0YXMyID0gJGRhdGFzOwoJCQkJCWlmKCRkYXRhczEgPD0gJGRhdGFzMil7CgkJCQkJJGlkX3VzdWFyaW8gPSAkdXN1YXJpb1snaWRfdXN1YXJpbyddOwoJCQkJCSRlc3RhZG8gPSAiMSI7CgkJCQkJJHJlc3VsdCA9ICJVUERBVEUgdXN1YXJpbyBTRVQgZXN0YWRvX3VzdWFyaW89JyRlc3RhZG8nIFdIRVJFIGlkX3VzdWFyaW89JyRpZF91c3VhcmlvJyI7CgkJCQkJJGF0dWFsaXphID0gbXlzcWxpX3F1ZXJ5KCRjb25leGFvLCAkcmVzdWx0KTsKCQkJCQl9IGVsc2UgewoJCQkJCSRpZF91c3VhcmlvID0gJHVzdWFyaW9bJ2lkX3VzdWFyaW8nXTsKCQkJCQkkZXN0YWRvID0gIjAiOwogICAgICAgICAgICAgICAgICAgICR0aXBvID0gIjAiOwoJCQkJCSRyZXN1bHQgPSAiVVBEQVRFIHVzdWFyaW8gU0VUIHZlbmRlZG9yPSckdGlwbycsIGFkbWluPSckdGlwbycsIGVzdGFkb191c3VhcmlvPSckZXN0YWRvJyBXSEVSRSBpZF91c3VhcmlvPSckaWRfdXN1YXJpbyciOwoJCQkJCSRhdHVhbGl6YSA9IG15c3FsaV9xdWVyeSgkY29uZXhhbywgJHJlc3VsdCk7fQoJCQkJCT8+CgkJCQkJPD9waHAKICAgICAgICAgICAgICAgICAgICAkcGFzc3dvcmRzID0gIlNFTEVDVCAqIEZST00gcGFzc3dvcmRzIFdIRVJFIGlkX3VzdWFyaW8gPSAiLiR1c3VhcmlvWydpZF91c3VhcmlvJ10uIiI7CiAgICAgICAgICAgICAgICAgICAgJHJlc3V0ID0gbXlzcWxpX3F1ZXJ5KCRjb25leGFvLCAkcGFzc3dvcmRzKTsKICAgICAgICAgICAgICAgICAgICB3aGlsZSgkcGFzc3dvcmQgPSBteXNxbGlfZmV0Y2hfYXJyYXkoJHJlc3V0KSl7CgkJCQkJPz4KCQkJCQk8dHI+CgkJCQkJCQk8dGQgYWxpZ249ImNlbnRlciI+IDw/PSR1c3VhcmlvWydub21lX3VzdWFyaW8nXT8+IDwvdGQ+CgkJCQkJCQk8dGQgYWxpZ249ImNlbnRlciI+IDw/PSR1c3VhcmlvWydsb2dpbl91c3VhcmlvJ10/PiA8L3RkPgoJCQkJCQkJPHRkIGFsaWduPSJjZW50ZXIiPiA8P3BocCBlY2hvICRwYXNzd29yZFsnc2VuaGEnXTt9ID8+IDwvdGQ+CgkJCQkJCQk8dGQgYWxpZ249ImNlbnRlciI+IDw/cGhwIGlmICgkdXN1YXJpb1snY29uZWN0YWRvJ10gPT0gMCkge2VjaG8gIiI7fSBlbHNlIHtlY2hvICIiLiRsb2cuIiAvICIuJHVzdWFyaW9bJ2NvbmVjdGFkbyddLiIiO30gPz4gPC90ZD4KCQkJCQkJCTx0ZCBhbGlnbj0iY2VudGVyIj4gPD9waHAgZWNobyAkdXN1YXJpb1snY3JpYWRvciddID8gJHVzdWFyaW9bJ2NyaWFkb3InXVsnbm9tZV91c3VhcmlvJ10gOiAnU2lzdGVtYSc7ID8+IDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciI+IDw/cGhwIGlmICgkdXN1YXJpb1snZXN0YWRvX3VzdWFyaW8nXSA9PSAxKSB7IGVjaG8gIkF0aXZhZG8iOyB9IGVsc2UgeyBlY2hvICJEZXNhdGl2YWRvIjsgfSA/PiA8L3RkPgoJCQkJCQkJPHRkIGFsaWduPSJjZW50ZXIiPiA8P3BocCBmb3JlYWNoIChsaXN0YXNVc3VhcmlvKCR1c3VhcmlvWyJpZF91c3VhcmlvIl0pIGFzICRsaXN0YSkgZWNobyAnWyAnLiRsaXN0YVsnbm9tZV9saXN0YSddLicgXSc7ID8+IDwvdGQ+CgkJCQkJCQk8dGQgYWxpZ249ImNlbnRlciI+IDw/cGhwIGlmICgkdXN1YXJpb1snZXN0YWRvX3VzdWFyaW8nXSA9PSAxKSB7IGVjaG8gIkRpYSAiLiR1c3VhcmlvWyJkaWEiXS4iIjsgfSBlbHNlIHsgZWNobyAiRXhwaXJvdSBEaWEgIi4kdXN1YXJpb1siZGlhIl0uIiI7IH0gPz4gPC90ZD4KCQkJCQkJCTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9ImRpc3BsYXk6IGNvbnRlbnRzOyI+CgkJCQkJCQkJPGRpdiBjbGFzcz0iZHJvcGRvd24iPgkJCQkJCQkJCgkJCQkJCQkJPHN0eWxlPi5uby16ZXJvIHsgcGFkZGluZy10b3A6IDBweDsgcGFkZGluZy1ib3R0b206IDBweDsgcG9zaXRpb246IHJlbGF0aXZlOyB9PC9zdHlsZT4KCQkJCQkJCQkJPGJ1dHRvbiBjbGFzcz0iYnRuIiB0eXBlPSJidXR0b24iIGRhdGEtdG9nZ2xlPSJkcm9wZG93biIgYXJpYS1leHBhbmRlZD0iZmFsc2UiIHN0eWxlPSJ0b3A6IDNweDsgbWFyZ2luOiAwIGF1dG87IHBvc2l0aW9uOiByZWxhdGl2ZTsgZGlzcGxheTogYmxvY2siPk9ww6fDtWVzPHNwYW4gY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iIHN0eWxlPSJsZWZ0OiA0cHg7IHBvc2l0aW9uOiByZWxhdGl2ZSIgYXJpYS1oaWRkZW49InRydWUiPjwvc3Bhbj48L2J1dHRvbj4KCQkJCQkJCQkJPHN0eWxlPi5wb2ludGVyIHsgY3Vyc29yOiBwb2ludGVyOyBib3JkZXI6bm9uZSB9PC9zdHlsZT4KCQkJCQkJCQkJPHVsIGNsYXNzPSJuby16ZXJvIGRyb3Bkb3duLW1lbnUgcG9pbnRlciIgeC1wbGFjZW1lbnQ9ImJvdHRvbS1zdGFydCI+CgkJCQkJCQkJCSAgICA8P3BocCBpZigkY3JlZGl0b3MgPD0gJGNyZWRpdG8peyA/PgoJCQkJCQkJCQkJPGxpIGFsaWduPSJjZW50ZXIiPjxhIGNsYXNzPSdidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5JyBvbmNsaWNrPSJtaWdyYXJDb25maXJtYSgnPD89JHVzdWFyaW9bJ2lkX3VzdWFyaW8nXT8+JywgJzw/PSR1c3VhcmlvWydub21lX3VzdWFyaW8nXTsgPz4nKSIgc3R5bGU9IndpZHRoOiAxMDAlO2Rpc3BsYXk6IGJsb2NrO3BhZGRpbmc6IDVweDt0b3A6IC0xMHB4OyI+PGkgY2xhc3M9ImZhcyBmYS11c2VyIj48L2k+IE1pZ3JhcjwvYT48L2xpPgkJCQkJCQkJCQkKCQkJCQkgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4KCQkJCQkJCQkJCTw/cGhwIGlmKCRfU0VTU0lPTlsnYWRtaW4nXSkgeyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGFsaWduPSJjZW50ZXIiPjxhIGNsYXNzPSdidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5JyBvbmNsaWNrPSJtaWdyYXJDb25maXJtYSgnPD89JHVzdWFyaW9bJ2lkX3VzdWFyaW8nXT8+JywgJzw/PSR1c3VhcmlvWydub21lX3VzdWFyaW8nXTsgPz4nKSIgc3R5bGU9IndpZHRoOiAxMDAlO2Rpc3BsYXk6IGJsb2NrO3BhZGRpbmc6IDVweDt0b3A6IC0xMHB4OyI+PGkgY2xhc3M9ImZhcyBmYS11c2VyIj48L2k+IE1pZ3JhcjwvYT48L2xpPgoJCQkJCQkJCQkJPD9waHAgfSA/PgoJCQkJCQkJCQkJPGxpIGFsaWduPSJjZW50ZXIiPjxhIGNsYXNzPSdidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5JyBvbmNsaWNrPSJ2ZXJMb2dzKCc8Pz0kdXN1YXJpb1snaWRfdXN1YXJpbyddPz4nKSIgc3R5bGU9IndpZHRoOiAxMDAlOyBkaXNwbGF5OiBibG9jazsgcGFkZGluZzogNXB4Ij48aSBjbGFzcz0iZmFzIGZhLWNsaXBib2FyZC1saXN0Ij48L2k+IExvZ3M8L2E+PC9saT4KCQkJCQkJCQkJCTxsaSBhbGlnbj0iY2VudGVyIj48YSBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeScgb25jbGljaz0icmVtb3ZlckNvbmZpcm1hKCc8Pz0kdXN1YXJpb1snaWRfdXN1YXJpbyddPz4nLCAnPD89JHVzdWFyaW9bJ25vbWVfdXN1YXJpbyddOyA/PicpIiBzdHlsZT0id2lkdGg6IDEwMCU7IGRpc3BsYXk6IGJsb2NrOyBwYWRkaW5nOiA1cHgiPjxpIGNsYXNzPSJmYXIgZmEtdHJhc2gtYWx0Ij48L2k+IEV4Y2x1aXI8L2E+PC9saT4KCQkJCQkJCQkJPC91bD4KCQkJCQkJCQk8L2Rpdj4KCQkJCQkJCTwvdGQ+CgkJCQkJCTwvdHI+CgkJCQkJPD9waHAgfSA/PgoJCQkJCTw/cGhwIH0gPz4KCQkJCQk8P3BocCB9ID8+CgkJCQk8L3Rib2R5PgoJCQk8L3RhYmxlPgogICAgICAgIDw/cGhwCiAgICAgICAgfQogICAgICAgID8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgPGRpdiBjbGFzcz0iaDMgbXQtNSByb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIiPgogICAgICAgICAgICAgPGkgb25jbGljaz0iJCgnI2NhZGFzdHJvJykubW9kYWwoKSIgY2xhc3M9ImJ0biBidG4tb3V0bGluZS1pbmZvIHRleHQtZGFyayBmYXMgZmEtcGx1cyI+PC9pPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9tYWluPgo8IS0tIHBhZ2UtY29udGVudCIgLS0+CjwvZGl2Pgo8IS0tIENhZGFzdHJvIEluaWNpbyAtLT4KPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9ImNhZGFzdHJvIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbGxlZGJ5PSJDYWRhc3RyYXIiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciIHJvbGU9ImRvY3VtZW50Ij4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgIDxoNSBjbGFzcz0ibW9kYWwtdGl0bGUiIGlkPSJUaXR1bG9Nb2RhbExvbmdvRXhlbXBsbyI+QWRpY2lvbmFyIFRlc3RlPC9oNT4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWxhYmVsPSJGZWNoYXIiPgogICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49InRydWUiPiZ0aW1lczs8L3NwYW4+CiAgICAgICAgPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgICAgICA8Zm9ybSBpZD0iY2FkYXN0cm8tZm9ybSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+Tm9tZTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBuYW1lPSJub21lIiBwbGFjZWhvbGRlcj0iTm9tZSIgdmFsdWU9Ijw/cGhwICRnZXJhZG9yID0gcmFuZCg4LDgpOyAkdmFsb3IgPSBzdWJzdHIoc3RyX3NodWZmbGUoImFiY2RlZmdoaWpsa21ub3BxcnN0dXZ4eXp3QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiKSwgMCwgJGdlcmFkb3IpOyBlY2hvICR2YWxvcjsgPz4iPgogICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz0iZm9ybS10ZXh0IHRleHQtbXV0ZWQiPkRlaXhhIGdlcmFyIHVtIG5vbWUgYXV0b23DoXRpY28gc2UgbsOjbyBxdWlzZXIgY29sb2Nhcjwvc21hbGw+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbD5Mb2dpbjo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBuYW1lPSJsb2dpbiIgcGxhY2Vob2xkZXI9IkxvZ2luIiB2YWx1ZT0iPD9waHAgZWNobyByYW5kKDEsOTk5OTk5KTs/PiI+CiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPSJmb3JtLXRleHQgdGV4dC1tdXRlZCI+RGVpeGEgZ2VyYXIgdW0gbG9naW4gYXV0b23DoXRpY28gc2UgbsOjbyBxdWlzZXIgY29sb2Nhcjwvc21hbGw+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgaWQ9InNDIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJkaXZTZW5oYUMiIGNsYXNzPSJmb3JtLWdyb3VwIj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+U2VuaGE6PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icGFzc3dvcmQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIG5hbWU9InNlbmhhIiBwbGFjZWhvbGRlcj0iU2VuaGEiIHZhbHVlPSI8P3BocCBlY2hvIHJhbmQoMSw5OTk5OTkpOz8+Ij4KICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9ImZvcm0tdGV4dCB0ZXh0LW11dGVkIj5EZWl4YSBnZXJhciB1bWEgc2VuaGEgYXV0b23DoXRpY28gc2UgbsOjbyBxdWlzZXIgY29sb2Nhcjwvc21hbGw+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPk7DrXZlbDo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1sLTAgcm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0ibml2ZWxDIiBjbGFzcz0ic2VsZWN0cGlja2VyIiB0aXRsZT0iTsOtdmVsIj4KCQkJCQkJICAgIDxvcHRpb24gdmFsdWU9ImFkbWluIiBoaWRkZW4+PC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ2ZW5kZWRvciIgaGlkZGVuPjwvb3B0aW9uPgoJCQkJCQkJPG9wdGlvbiB2YWx1ZT0iY2xpZW50ZSI+Q2xpZW50ZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbD5BZG1pbmlzdHJhZG9yOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWwtMCByb3ciPgogICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IHZhbHVlPSIwIiBpZD0iYWRtaW5DIiBjbGFzcz0ic2VsZWN0cGlja2VyIiB0aXRsZT0iQWRtaW5pc3RyYWRvciIgbmFtZT0iYWRtaW4iIHJlcXVpcmVkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+U2ltPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj5Ow6NvPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIiBzdHlsZT0iZGlzcGxheTogbm9uZSI+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlZlbmRlZG9yOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWwtMCByb3ciPgogICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IHZhbHVlPSIwIiBpZD0idmVuZGVkb3JDIiBjbGFzcz0ic2VsZWN0cGlja2VyIiB0aXRsZT0iVmVuZGVkb3IiIG5hbWU9InZlbmRlZG9yIiByZXF1aXJlZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiPlNpbTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCI+TsOjbzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPkxpc3Rhczo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1sLTAgcm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJsaXN0YSIgY2xhc3M9InNlbGVjdHBpY2tlciIgdGl0bGU9Ikxpc3RhcyIgbXVsdGlwbGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkbGlzdGFzKSB7IGZvcmVhY2ggKCRsaXN0YXMgYXMgJGxpc3RhKSB7Pz4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPD89JGxpc3RhWydpZF9saXN0YSddPz4iPjw/PSRsaXN0YVsnbm9tZV9saXN0YSddPz48L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8P3BocCAgfSAKICAgICAgICAgICAgICAgICAgICB9ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9Im5vbmUiIG9uY2xpY2s9ImFkZEZvcmNlKCkiIGNsYXNzPSJidG4gYnRuLWRhbmdlciI+QWRpY2lvbmFyPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZm9ybT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KPC9kaXY+CjwhLS0gQ2FkYXN0cm8gRmltLS0+CjwhLS0gUmVtb3ZlIEluaWNpbyAtLT4KPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9InJlbW92ZXIiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9IkNhZGFzdHJhciIgYXJpYS1oaWRkZW49InRydWUiPgogIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyIgcm9sZT0iZG9jdW1lbnQiPgogICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgPGg1IGNsYXNzPSJtb2RhbC10aXRsZSI+VGVtIGNlcnRlemE/PC9oNT4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWxhYmVsPSJGZWNoYXIiPgogICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49InRydWUiPiZ0aW1lczs8L3NwYW4+CiAgICAgICAgPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJyZW1vdmVyLWNvbnRldWRvIiBjbGFzcz0ibW9kYWwtYm9keSI+PC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KPC9kaXY+CjwhLS0gUmVtb3ZlIEZpbS0tPgo8P3BocCBpZigkX1NFU1NJT05bJ2FkbWluJ10pIHsgPz4KPCEtLSBNaWdyYXIgSW5pY2lvIC0tPgo8ZGl2IGNsYXNzPSJtb2RhbCBmYWRlIiBpZD0ibWlncmFyIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbGxlZGJ5PSJDYWRhc3RyYXIiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciIHJvbGU9ImRvY3VtZW50Ij4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgIDxoNSBjbGFzcz0ibW9kYWwtdGl0bGUiPk1pZ3JhciBwYXJhIFVzdcOhcmlvPC9oNT4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWxhYmVsPSJGZWNoYXIiPgogICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49InRydWUiPiZ0aW1lczs8L3NwYW4+CiAgICAgICAgPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJtaWdyYXItY29udGV1ZG8iIGNsYXNzPSJtb2RhbC1ib2R5Ij48L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KPCEtLSBNaWdyYXIgRmltLS0+Cjw/cGhwIH0gPz4KPD9waHAgaWYoJGNyZWRpdG9zIDw9ICRjcmVkaXRvKXsgPz4KPCEtLSBNaWdyYXIgSW5pY2lvIC0tPgo8ZGl2IGNsYXNzPSJtb2RhbCBmYWRlIiBpZD0ibWlncmFyIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbGxlZGJ5PSJDYWRhc3RyYXIiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciIHJvbGU9ImRvY3VtZW50Ij4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgIDxoNSBjbGFzcz0ibW9kYWwtdGl0bGUiPk1pZ3JhciBwYXJhIFVzdcOhcmlvPC9oNT4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWxhYmVsPSJGZWNoYXIiPgogICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49InRydWUiPiZ0aW1lczs8L3NwYW4+CiAgICAgICAgPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJtaWdyYXItY29udGV1ZG8iIGNsYXNzPSJtb2RhbC1ib2R5Ij48L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KPCEtLSBNaWdyYXIgRmltLS0+Cjw/cGhwIH0gPz4KPC9ib2R5Pgo8c2NyaXB0PgogICAgdmFyIGNsb25lID0gJCgiI2RpdlNlbmhhIikuY2xvbmUoKTsKICAgIHZhciBjbG9uZUMgPSAkKCIjZGl2U2VuaGFDIikuY2xvbmUoKTsKICAgIC8vJCgiI2RpdlNlbmhhQyIpLnJlbW92ZSgpOwoKICAgICQoIiNjYWRhc3RybyIpLm9uKCdoaWRkZW4uYnMubW9kYWwnLCBmdW5jdGlvbiAoZSkgewogICAgICAgIGlmICgkKCAiI2FkbWluQyIgKS52YWwoKSAhPSAxKSB7CiAgICAgICAgICAgIC8vJCgiI3NDIikuZW1wdHkoKTsvL0RPX05PVEhJTkcKICAgICAgICB9CiAgICB9KTsKCiAgICAkKCAiI2FkbWluQyIgKS5jaGFuZ2UoZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKCQoICIjYWRtaW5DIiApLnZhbCgpID09IDEpIHsKICAgICAgICAgICAgJCgiI3NDIikuYXBwZW5kKGNsb25lQyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJCgiI3NDIikuZW1wdHkoKTsKICAgICAgICB9CiAgICB9KTsKCQogICAgZnVuY3Rpb24gcmVtb3ZlckNvbmZpcm1hKGlkLG5vbWUpIHsKICAgICAgICAkKCcjcmVtb3Zlci1jb250ZXVkbycpLmh0bWwoJzxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWRhbmdlciIgcm9sZT0iYWxlcnQiPjxzdHJvbmc+IFJlbW92ZXIgPC9zdHJvbmc+JyArIG5vbWUgKyAnPzwvZGl2PjxidXR0b24gb25jbGljaz0icmVtb3ZlcignICsgaWQgKyAnKSIgdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1kYW5nZXIgZmxvYXQtcmlnaHQiPlJlbW92ZXI8L2J1dHRvbj4nKTsKICAgICAgICAkKCcjcmVtb3ZlcicpLm1vZGFsKCk7CiAgICB9CgkKCWZ1bmN0aW9uIG1pZ3JhckNvbmZpcm1hKGlkLG5vbWUpIHsKICAgICAgICAkKCcjbWlncmFyLWNvbnRldWRvJykuaHRtbCgnPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtd2FybmluZyIgcm9sZT0iYWxlcnQiPjxzdHJvbmc+IERlc2VqYSBNaWdyYXIgbyBUZXN0ZSA8L3N0cm9uZz4nICsgbm9tZSArICcgVXN1w6FyaW8/IDxiciAvPiBWb2PDqiBuw6NvIHBvZGVyw6EgRGVzZmF6ZXIgZXNzYSBvcGVyYcOnw6NvLjwvZGl2PjxidXR0b24gb25jbGljaz0ibWlncmFyKCcgKyBpZCArICcpIiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXN1Y2Nlc3MiPlNpbSwgUHJvc3NpZ2EhPC9idXR0b24+Jyk7CiAgICAgICAgJCgnI21pZ3JhcicpLm1vZGFsKCk7CiAgICB9CgkKICAgIGZ1bmN0aW9uIGVkaXRhckNvbmZpcm1hKGRpYSwgaWQsbm9tZSxjb250YXRvLGxvZ2luLGVzdGFkbyxhZG1pbiwgdmVuZGVkb3IsIGxpc3RhKSB7CglpZihwYXJzZUludChkaWEpID4gMCl7CgkgICAkKCcjZGlhJykudmFsKHBhcnNlSW50KGRpYSkpOwoJfSBlbHNlIHsKCSAgICQoJyNkaWEnKS52YWwoJycpOwoJfQogICAgICAgICQoJyNpZEUnKS52YWwoaWQpOwogICAgICAgICQoJyNub21lRScpLnZhbChub21lKTsKICAgICAgICAkKCcjbml2ZWxFJykudmFsKHBhcnNlSW50KHZlbmRlZG9yKSA9PSAxID8gJ3ZlbmRlZG9yJyA6IChwYXJzZUludChhZG1pbikgPT0gMSkgPyAnYWRtaW4nIDogJ2NsaWVudGUnKTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgJCgnI25pdmVsRScpLnZhbChwYXJzZUludCh2ZW5kZWRvcikgPT0gMSA/ICd2ZW5kZWRvcicgOiAocGFyc2VJbnQoYWRtaW4pID09IDEpID8gJ2FkbWluJyA6ICdjbGllbnRlJyk7CiAgICAgICAgICAgICQoJypbZGF0YS1pZD1uaXZlbEVdJykudGV4dChwYXJzZUludCh2ZW5kZWRvcikgPT0gMSA/ICd2ZW5kZWRvcicgOiAocGFyc2VJbnQoYWRtaW4pID09IDEpID8gJ2FkbWluJyA6ICdjbGllbnRlJyk7CiAgICAgICAgfSwgNTAwKTsKICAgICAgICAkKCcjY29udGF0b0UnKS52YWwoY29udGF0byk7CiAgICAgICAgJCgnI2xvZ2luRScpLnZhbChsb2dpbik7CiAgICAgICAgJCgnI2VzdGFkb0UnKS52YWwoZXN0YWRvKTsKICAgICAgICAkKCcjZXN0YWRvRScpLnNlbGVjdHBpY2tlcigncmVuZGVyJyk7CiAgICAgICAgJCgnI2FkbWluRScpLnZhbChhZG1pbik7CiAgICAgICAgJCgnI2FkbWluRScpLnNlbGVjdHBpY2tlcigncmVuZGVyJyk7CiAgICAgICAgaWYgKHBhcnNlSW50KGFkbWluKSA9PSAwKSB7CgkgICAgY29uc29sZS5sb2cocGFyc2VJbnQodmVuZGVkb3IpICE9PSAxKTsKCSAgICBpZihwYXJzZUludCh2ZW5kZWRvcikgIT09IDEpewoJCSQoJyNleGRpYUUnKS5zaG93KCk7CgkJJCgnI0NyZWRpdG9DJykuc2hvdygpOwoJCSQoJyNDb25lY3RhZG9FJykuc2hvdygpOwoJICAgIH0gZWxzZSB7CgkJJCgnI2V4ZGlhRScpLmhpZGUoKTsKCQkkKCcjQ3JlZGl0b0UnKS5oaWRlKCk7CgkJJCgnI0NvbmVjdGFkb0UnKS5oaWRlKCk7CgkgICAgfQogICAgICAgICAgICAvLyQoJyNkaXZTZW5oYScpLnJlbW92ZSgpOwogICAgICAgIH0gZWxzZSBpZiAoJCgnI2RpdlNlbmhhJykubGVuZ3RoIDwgMSkgewogICAgICAgICAgICAkKCcjcycpLmFwcGVuZChjbG9uZSk7CiAgICAgICAgfQogICAgICAgICQoJyNsaXN0YUUnKS52YWwobGlzdGEpOwogICAgICAgICQoJyNsaXN0YUUnKS5zZWxlY3RwaWNrZXIoJ3JlbmRlcicpOwogICAgICAgICQoJyNlZGl0YXInKS5tb2RhbCgpOwogICAgfQogICAgdmFyIGFkZEZvcmNlID0gZnVuY3Rpb24oKXsKICAgICAgICAkKCAiI2NhZGFzdHJvLWZvcm0iICkudHJpZ2dlcignc3VibWl0Jyk7CiAgICB9OwogICAgdmFyIGFkZGVkID0gZmFsc2U7CiAgICAkKCAiI2NhZGFzdHJvLWZvcm0iICkuc3VibWl0KGZ1bmN0aW9uKCBldmVudCApIHsKICAgICAgICBpZighYWRkZWQpewogICAgICAgICAgICBhZGRlZCA9IHRydWU7CiAgICAgICAgICAgIGlmKCQoJyNjYWRhc3Ryby1mb3JtIHNlbGVjdFtuYW1lPSJ2ZW5kZWRvciJdJykudmFsKCkudHJpbSgpID09ICIiKXsKICAgICAgICAgICAgICAgICQoJyNjYWRhc3Ryby1mb3JtIHNlbGVjdFtuYW1lPSJ2ZW5kZWRvciJdJykudmFsKDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKCQoJyNjYWRhc3Ryby1mb3JtIHNlbGVjdFtuYW1lPSJhZG1pbiJdJykudmFsKCkudHJpbSgpID09ICIiKXsKICAgICAgICAgICAgICAgICQoJyNjYWRhc3Ryby1mb3JtIHNlbGVjdFtuYW1lPSJhZG1pbiJdJykudmFsKDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICQuYWpheCh7CiAgICAgICAgICAgICAgICB0eXBlOiAiUE9TVCIsCiAgICAgICAgICAgICAgICB1cmw6ICJjb250cm9sZXMvYWRpY2lvbmFyLXRlc3RlLnBocCIsCiAgICAgICAgICAgICAgICBkYXRhOiAkKCIjY2FkYXN0cm8tZm9ybSIpLnNlcmlhbGl6ZSgpLAogICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkgewogICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihkYXRhKSB7CiAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbyhkYXRhLnJlc3BvbnNlVGV4dCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgfSk7CiAgICB2YXIgZWRkaXRlZCA9IGZhbHNlOwogICAgdmFyIGZvcmNlRWRpdCA9IGZ1bmN0aW9uKCl7CiAgICAgICAgJCggIiNlZGl0YXItZm9ybSIgKS50cmlnZ2VyKCdzdWJtaXQnKTsKICAgIH0KICAgICQoICIjZWRpdGFyLWZvcm0iICkuc3VibWl0KGZ1bmN0aW9uKCBldmVudCApIHsKICAgICAgICBpZighZWRkaXRlZCl7CiAgICAgICAgICAgIGVkZGl0ZWQgPSB0cnVlOwogICAgICAgICAgICBpZigkKCcjZWRpdGFyLWZvcm0gc2VsZWN0W25hbWU9InZlbmRlZG9yIl0nKS52YWwoKS50cmltKCkgPT0gIiIpewogICAgICAgICAgICAgICAgJCgnI2VkaXRhci1mb3JtIHNlbGVjdFtuYW1lPSJ2ZW5kZWRvciJdJykudmFsKDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKCQoJyNlZGl0YXItZm9ybSBzZWxlY3RbbmFtZT0iYWRtaW4iXScpLnZhbCgpLnRyaW0oKSA9PSAiIil7CiAgICAgICAgICAgICAgICAkKCcjZWRpdGFyLWZvcm0gc2VsZWN0W25hbWU9ImFkbWluIl0nKS52YWwoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJC5hamF4KHsKICAgICAgICAgICAgICAgIHR5cGU6ICJQT1NUIiwKICAgICAgICAgICAgICAgIHVybDogImNvbnRyb2xlcy9lZGl0YXItdXN1YXJpby5waHAiLAogICAgICAgICAgICAgICAgZGF0YTogJCgiI2VkaXRhci1mb3JtIikuc2VyaWFsaXplKCksCiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICAgICAgICAgICAgcmVzdWx0YWRvKGRhdGEucmVzcG9uc2VUZXh0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICB9KTsKICAgIDw/cGhwIGlmKCRfU0VTU0lPTlsnYWRtaW4nXSkgeyA/PgoJICAkKCcjdmVuZGVkb3JDJykudmFsKDApOwogICAgICAkKCcjYWRtaW5DJykudmFsKDEpOwogICAgPD9waHAgfSA/PgoKICAgICQoJyNuaXZlbEMnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oKXsKICAgICAgIHZhciB2YWx1ZSA9ICQodGhpcykudmFsKCk7CiAgICAgICAkKCcjc0MnKS5lbXB0eSgpOwogICAgICAgaWYodmFsdWUgPT0gJ3ZlbmRlZG9yJyl7CiAgICAgICAgICAgJCgnI2FkbWluQycpLnZhbCgwKTsKICAgICAgICAgICAkKCcjdmVuZGVkb3JDJykudmFsKDEpOwoJCSAgICQoJyNDcmVkaXRvQycpLnZhbCgxKTsKICAgICAgICAgICAkKCIjc0MiKS5hcHBlbmQoY2xvbmVDKTsKCSAgICQoJyNleGRpYUMnKS5oaWRlKCk7CgkgICAkKCcjQ29uZWN0YWRvQycpLmhpZGUoKTsKICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gJ2FkbWluJyl7CiAgICAgICAgICAgJCgnI2FkbWluQycpLnZhbCgxKTsKICAgICAgICAgICAkKCcjdmVuZGVkb3JDJykudmFsKDApOwogICAgICAgICAgICQoIiNzQyIpLmFwcGVuZChjbG9uZUMpOwoJICAgJCgnI2V4ZGlhQycpLmhpZGUoKTsKCSAgICQoJyNDb25lY3RhZG9DJykuaGlkZSgpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgICAkKCcjYWRtaW5DJykudmFsKDApOwogICAgICAgICAgICQoJyN2ZW5kZWRvckMnKS52YWwoMCk7CgkgICAkKCIjc0MiKS5hcHBlbmQoY2xvbmVDKTsJICAgCgkgICAkKCcjZXhkaWFDJykuc2hvdygpOwoJICAgJCgnI0NvbmVjdGFkb0MnKS5zaG93KCk7CiAgICAgICB9CiAgICB9KTsKZnVuY3Rpb24gc2V0Q29va2llKG5hbWUsdmFsdWUsZGF5cykgewogICAgdmFyIGV4cGlyZXMgPSAiIjsKICAgIGlmIChkYXlzKSB7CiAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpOwogICAgICAgIGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIChkYXlzKjI0KjYwKjYwKjEwMDApKTsKICAgICAgICBleHBpcmVzID0gIjsgZXhwaXJlcz0iICsgZGF0ZS50b1VUQ1N0cmluZygpOwogICAgfQogICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArICI9IiArICh2YWx1ZSB8fCAiIikgICsgZXhwaXJlcyArICI7IHBhdGg9LyI7Cn0KZnVuY3Rpb24gZ2V0Q29va2llKG5hbWUpIHsKICAgIHZhciBuYW1lRVEgPSBuYW1lICsgIj0iOwogICAgdmFyIGNhID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7CiAgICBmb3IodmFyIGk9MDtpIDwgY2EubGVuZ3RoO2krKykgewogICAgICAgIHZhciBjID0gY2FbaV07CiAgICAgICAgd2hpbGUgKGMuY2hhckF0KDApPT0nICcpIGMgPSBjLnN1YnN0cmluZygxLGMubGVuZ3RoKTsKICAgICAgICBpZiAoYy5pbmRleE9mKG5hbWVFUSkgPT0gMCkgcmV0dXJuIGMuc3Vic3RyaW5nKG5hbWVFUS5sZW5ndGgsYy5sZW5ndGgpOwogICAgfQogICAgcmV0dXJuIG51bGw7Cn0KZnVuY3Rpb24gZXJhc2VDb29raWUobmFtZSkgeyAgIAogICAgZG9jdW1lbnQuY29va2llID0gbmFtZSsnPTsgTWF4LUFnZT0tOTk5OTk5OTk7JzsgIAp9CiAgICBmdW5jdGlvbiBsb2dhcihpZCl7CglpZighZ2V0Q29va2llKCdvcmlnaW5hbCcpKXsKCSAgIHNldENvb2tpZSgnb3JpZ2luYWwnLCA8P3BocCBlY2hvICRfU0VTU0lPTlsnaWRfdXN1YXJpbyddID8+LCAxKTsJCgl9CgkkLmdldCgnY29udHJvbGVzL2ZvcmNhci1sb2dpbi5waHA/aWRfdXN1YXJpbz0nICsgaWQsIGZ1bmN0aW9uKCl7CgkgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgfSk7CiAgICB9CglmdW5jdGlvbiByZW1vdmVyKGlkKXsKICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICdjb250cm9sZXMvcmVtb3Zlci10ZXN0ZS5waHA/aWRfdXN1YXJpbz0nICsgaWQ7CiAgICB9CglmdW5jdGlvbiBtaWdyYXIoaWQpewogICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJ2NvbnRyb2xlcy9taWdyYXItdXN1YXJpby5waHA/aWRfdXN1YXJpbz0nICsgaWQ7CiAgICB9CiAgICBmdW5jdGlvbiB2ZXJMb2dzKGlkKXsKICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICdsb2cucGhwP2lkX3VzdWFyaW89JyArIGlkOwogICAgfQogICAgJCgnI25pdmVsRScpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbigpewogICAgICAgdmFyIHZhbHVlID0gJCh0aGlzKS52YWwoKTsKICAgICAgIGlmKHZhbHVlID09ICd2ZW5kZWRvcicpewogICAgICAgICAgICQoJyNhZG1pbkUnKS52YWwoMCk7CiAgICAgICAgICAgJCgnI3ZlbmRlZG9yRScpLnZhbCgxKTsKICAgICAgICAgICAkKCIjcyIpLmFwcGVuZChjbG9uZSk7CgkgICAkKCcjZXhkaWFFJykuaGlkZSgpOwoJICAgJCgnI0NyZWRpdG9FJykuaGlkZSgpOwoJICAgJCgnI0NvbmVjdGFkb0UnKS5oaWRlKCk7CiAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09ICdhZG1pbicpIHsKICAgICAgICAgICAkKCcjYWRtaW5FJykudmFsKDEpOwogICAgICAgICAgICQoJyN2ZW5kZWRvckUnKS52YWwoMCk7IAogICAgICAgICAgICQoIiNzIikuYXBwZW5kKGNsb25lKTsKCSAgICQoJyNleGRpYUUnKS5oaWRlKCk7CgkgICAkKCcjQ3JlZGl0b0UnKS5oaWRlKCk7CgkgICAkKCcjQ29uZWN0YWRvRScpLmhpZGUoKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgJCgnI2FkbWluRScpLnZhbCgwKTsKICAgICAgICAgICAkKCcjdmVuZGVkb3JFJykudmFsKDApOwogICAgICAgICAgICQoIiNzIikuYXBwZW5kKGNsb25lKTsKCSAgICQoJyNleGRpYUUnKS5zaG93KCk7CgkgICAkKCcjQ3JlZGl0b0UnKS5zaG93KCk7CgkgICAkKCcjQ29uZWN0YWRvRScpLnNob3coKTsKICAgICAgIH0KICAgIH0pOwogICAgaWYod2luZG93Lm1vYmlsZWNoZWNrKCkpewoJJCgnI2NoZWNrbWUnKS5yZW1vdmUoKTsKICAgIH0KICAgICQoJy50aGVhZC1saWdodCB0aDpub3QoIi5ub21lY29sIiknKS5yZW1vdmUoKTsKPC9zY3JpcHQ+Cjw/cGhwIHJlcXVpcmVfb25jZSgiY29tdW0ucGhwIik7IApyZXF1aXJlX29uY2UoImFsZXJ0YS5waHAiKTs/PgoKPC9odG1sPgo8P3BocCAKfSBlbHNlIHsKICAgIGhlYWRlcigiTG9jYXRpb246IGluZGV4LnBocCIpOwogICAgZGllKCk7Cn0KPz4="));//Generated by Ampare PHP Encoder. For more security please use php protect before encode the php program
Function Calls
base64_decode | 1 |
Stats
MD5 | 20e96bb4a3ac02d8cde94ca5f7318a9b |
Eval Count | 1 |
Decode Time | 104 ms |