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("PD9waHANCnJlcXVpcmVfb25jZSgnLi4vZGF0YWJhc2UvaGVhZGVyLnBocCc..

Decoded Output download

?>b'<?php
require_once(\'../database/header.php\');
if($userdata[\'status\']==\'paywait\'){
echo \'<script>
window.location = "paywait.php"
</script>
\';	
}
?>
<!-- Begin Page Content -->
   <div class="container-fluid">  
   <!-- DataTales Example -->
          <div class="card shadow mb-4">
            <div class="card-header py-3">
              <h6 class="m-0 font-weight-bold text-primary">Mobile Recharge</h6>
            </div>
            <div class="card-body" style="background-color: #f6f6f6;">
<?php
try {
$success = 0;
if(isset($_POST[\'recharge\']) AND !empty(get_safe($_POST[\'number\']))  AND  !empty(get_safe($_POST[\'operator\']))  AND !empty(get_safe($_POST[\'amount\'])) ){
$amount = get_safe($_POST[\'amount\']);	
if ($amount>$userdata[\'balance\']){
echo \'<div class="alert alert-danger alert-dismissible fade show" role="alert">
  <strong>Wallet!</strong> Insufficient Balance!!
  <button type="button" class="close" data-dismiss="alert" aria-label="Close">
    <span aria-hidden="true">&times;</span>
  </button>
</div>\';
}else{

$tf_amount = $amount;
$trGet = 100 - $userdata[Get_Operator(get_safe($_POST[\'operator\']))];
$tfDecimal = $trGet / 100;
$total_amount = $tfDecimal * $tf_amount;

// Debit
$new_bal = $userdata[\'balance\'] - $total_amount;
$sqlu = $conn->prepare("UPDATE loginusers SET balance=?  WHERE id=?");
$sqlu->execute([$new_bal,$userdata[\'id\']]);
// Debit
	
$txnsql = "INSERT INTO `paymentreq`(`date_time`, `user`, `bank`, `mode`, `type`, `amount`,`balance`, `reference`, `remark`, `status`)
 VALUES (:date_time,:user,:bank,:mode,:type,:amount,:balance,:reference,:remark,:status)";
$mode = \'RECHARGE\';	
$type = \'debit\';
$remark = $_POST[\'number\'].\', Opt:\'.Get_Operator($_POST[\'operator\']).\', Amt Rs.\'.$_POST[\'amount\'];
$status = \'success\';
$reference = \'TXN\'.$order_id;
$txn = $conn->prepare($txnsql);
$txn->bindParam(":date_time", $date_time);
$txn->bindParam(":user", $userdata[\'username\']);
$txn->bindParam(":bank", $userdata[\'username\']);
$txn->bindParam(":mode", $mode);
$txn->bindParam(":type", $type);
$txn->bindParam(":amount", $total_amount);
$txn->bindParam(":balance", $new_bal);
$txn->bindParam(":reference", $reference);
$txn->bindParam(":remark", $remark);
$txn->bindParam(":status", $status);
if($txn->execute()){
$status = \'pending\';
$remark = \'Recharge Under Process\';	
$ref_id = date(\'hismdy\');
$rch_sql = "INSERT INTO `recharges`(`web_url`,`order_id`, `number`, `operator`, `amount`, `debit_amt`, `balance`, `user_id`, `date_time`, `date`, `ref_id`, `remark`, `status`) 
VALUES (:web_url,:order_id,:number,:operator,:amount,:debit_amt,:balance,:user_id,:date_time,:date,:ref_id,:remark,:status)";	
$rch_txn = $conn->prepare($rch_sql);
$rch_txn->bindParam(":web_url", $_SERVER[\'SERVER_NAME\']);
$rch_txn->bindParam(":order_id", $order_id);
$rch_txn->bindParam(":number", get_safe($_POST[\'number\']));
$rch_txn->bindParam(":operator", Get_Operator($_POST[\'operator\']));
$rch_txn->bindParam(":amount", $amount);
$rch_txn->bindParam(":debit_amt", $total_amount);
$rch_txn->bindParam(":balance", $new_bal);
$rch_txn->bindParam(":user_id", $userdata[\'id\']);
$rch_txn->bindParam(":date_time", $datetime);
$rch_txn->bindParam(":date", $date_time);
$rch_txn->bindParam(":ref_id", $ref_id);
$rch_txn->bindParam(":remark", $remark);
$rch_txn->bindParam(":status", $status);	
if($rch_txn->execute()){



//$rurl = "http://rechargehanda.co.in/API/APIService.aspx?userid={$gateway_api->{\'rech_id\'}}&pass={$gateway_api->{\'rech_pwd\'}}&mob=".get_safe($_POST[\'number\'])."&opt=".get_safe($_POST[\'operator\'])."&amt=".get_safe($_POST[\'amount\'])."&agentid={$order_id}&fmt=json";

//$rurl = "http://nearbyoutlet.in/RechargeApi/Recharge.aspx?Apitoken={$gateway_api->{\'token\'}}&number=".get_safe($_POST[\'number\'])."&amount=".get_safe($_POST[\'amount\'])."&opid=".get_safe($_POST[\'operator\'])."&order_id={$order_id}";

$rurl = "https://nearbyoutlet.in/RechargeApi/Recharge.aspx?Apitoken={$gateway_api->{\'token\'}}&Amount=".get_safe($_POST[\'amount\'])."&OperatorCode=".get_safe($_POST[\'operator\'])."&Number=".get_safe($_POST[\'number\'])."&ClientId={$order_id}";


$response = curl_get($rurl); 

// $response = \'{"status":"SUCCESS","MOBILE":"9073711804","AMOUNT":"10","order_id":"20728114711443ADFE","AGENTID":"893909","opr_id":"8457484","BAL":990.6,"MSG":"FAILED "}\';

$json_obj= json_decode(strtolower($response),true);	


if(strtolower($json_obj[\'status\'])==\'success\'){
$rsql = $conn->prepare("UPDATE recharges SET ref_id=? , remark=? , status=?  WHERE order_id=?");
if($rsql->execute([$json_obj[\'operatorid\'],\'Recharge \'.strtolower($json_obj[\'status\']),\'success\',$order_id])){
    
$usql = $conn->prepare("select * from loginusers WHERE id = ?");
$usql->execute([$userdata[\'id\']]);
$usr_d=$usql->fetch();


$disql = $conn->prepare("select * from loginusers WHERE username = ?");
$disql->execute([$usr_d[\'createby\']]);
$dis_data=$disql->fetch();


$susql = $conn->prepare("select * from loginusers WHERE username = ?");
$susql->execute([$dis_data[\'createby\']]);
$sup_data=$susql->fetch();

$wlsql = $conn->prepare("select * from loginusers WHERE username = ?");
$wlsql->execute([$sup_data[\'createby\']]);
$wl_data=$wlsql->fetch();


if($dis_data[\'id\']==""){}else{
    
$d_p= $dis_data[Get_Operator(get_safe($_POST[\'operator\']))] - $usr_d[Get_Operator(get_safe($_POST[\'operator\']))];
$a = $amount;
$p= $d_p / 100;
$t_margin = $p * $a;   

$total_credit = $dis_data[\'balance\'] + $t_margin;
$sqlu = $conn->prepare("UPDATE loginusers SET balance=?  WHERE id=?");
$sqlu->execute([$total_credit,$dis_data[\'id\']]);	

$txnsql = "INSERT INTO `paymentreq`(`date_time`, `user`, `bank`, `mode`, `type`, `amount`,`balance`, `reference`, `remark`, `status`)
 VALUES (:date_time,:user,:bank,:mode,:type,:amount,:balance,:reference,:remark,:status)";
$mode = \'COMMISSION\';	
$type = \'credit\';
$remark = \'Rs.\'.$t_margin.\', Recharge Commission, \'.$_POST[\'number\'].\', Opt:\'.Get_Operator($_POST[\'operator\']).\', Amt Rs.\'.$_POST[\'amount\'];
$status = \'success\';
$reference = \'TXN\'.$order_id;
$txn = $conn->prepare($txnsql);
$txn->bindParam(":date_time", $date_time);
$txn->bindParam(":user", $dis_data[\'username\']);
$txn->bindParam(":bank", $usr_d[\'username\']);
$txn->bindParam(":mode", $mode);
$txn->bindParam(":type", $type);
$txn->bindParam(":amount",$t_margin);
$txn->bindParam(":balance", $total_credit);
$txn->bindParam(":reference", $reference);
$txn->bindParam(":remark", $remark);
$txn->bindParam(":status", $status);
$txn->execute();
}

if($sup_data[\'id\']==""){}else{
    
$d_p= $sup_data[Get_Operator(get_safe($_POST[\'operator\']))] - $dis_data[Get_Operator(get_safe($_POST[\'operator\']))];
$a = $amount;
$p= $d_p / 100;
$t_margin = $p * $a;   

$total_credit = $sup_data[\'balance\'] + $t_margin;
$sqlu = $conn->prepare("UPDATE loginusers SET balance=?  WHERE id=?");
$sqlu->execute([$total_credit,$sup_data[\'id\']]);	

$txnsql = "INSERT INTO `paymentreq`(`date_time`, `user`, `bank`, `mode`, `type`, `amount`,`balance`, `reference`, `remark`, `status`)
 VALUES (:date_time,:user,:bank,:mode,:type,:amount,:balance,:reference,:remark,:status)";
$mode = \'COMMISSION\';	
$type = \'credit\';
$remark = \'Rs.\'.$t_margin.\', Recharge Commission, \'.$_POST[\'number\'].\', Opt:\'.Get_Operator($_POST[\'operator\']).\', Amt Rs.\'.$_POST[\'amount\'];
$status = \'success\';
$reference = \'TXN\'.$order_id;
$txn = $conn->prepare($txnsql);
$txn->bindParam(":date_time", $date_time);
$txn->bindParam(":user", $sup_data[\'username\']);
$txn->bindParam(":bank", $dis_data[\'username\']);
$txn->bindParam(":mode", $mode);
$txn->bindParam(":type", $type);
$txn->bindParam(":amount",$t_margin);
$txn->bindParam(":balance", $total_credit);
$txn->bindParam(":reference", $reference);
$txn->bindParam(":remark", $remark);
$txn->bindParam(":status", $status);
$txn->execute();	
}

if($wl_data[\'id\']==""){}else{
    
$d_p= $wl_data[Get_Operator(get_safe($_POST[\'operator\']))] - $sup_data[Get_Operator(get_safe($_POST[\'operator\']))];
$a = $amount;
$p= $d_p / 100;
$t_margin = $p * $a;  

$total_credit = $wl_data[\'balance\'] + $t_margin;
$sqlu = $conn->prepare("UPDATE loginusers SET balance=?  WHERE id=?");
$sqlu->execute([$total_credit,$wl_data[\'id\']]);	

$txnsql = "INSERT INTO `paymentreq`(`date_time`, `user`, `bank`, `mode`, `type`, `amount`,`balance`, `reference`, `remark`, `status`)
 VALUES (:date_time,:user,:bank,:mode,:type,:amount,:balance,:reference,:remark,:status)";
$mode = \'COMMISSION\';	
$type = \'credit\';
$remark = \'Rs.\'.$t_margin.\', Recharge Commission, \'.$_POST[\'number\'].\', Opt:\'.Get_Operator($_POST[\'operator\']).\', Amt Rs.\'.$_POST[\'amount\'];
$status = \'success\';
$reference = \'TXN\'.$order_id;
$txn = $conn->prepare($txnsql);
$txn->bindParam(":date_time", $date_time);
$txn->bindParam(":user", $wl_data[\'username\']);
$txn->bindParam(":bank", $sup_data[\'username\']);
$txn->bindParam(":mode", $mode);
$txn->bindParam(":type", $type);
$txn->bindParam(":amount",$t_margin);
$txn->bindParam(":balance", $total_credit);
$txn->bindParam(":reference", $reference);
$txn->bindParam(":remark", $remark);
$txn->bindParam(":status", $status);
$txn->execute();	
}	

echo \'<div class="alert alert-success" role="alert">
<strong>Recharge!</strong> \'.ucwords(\'success\').\'!</div>\';     
$success = 1;    
} else {
echo \'<div class="alert alert-danger" role="alert">
<strong>Our Server!</strong> is Down!</div>\';
}    
    
    
} else if(strtolower($json_obj[\'status\'])==\'in process\' || strtolower($json_obj[\'status\'])==\'pending\'){
    
$rsql = $conn->prepare("UPDATE recharges SET ref_id=? , remark=? , status=?  WHERE order_id=?");
$rsql->execute([strtolower($json_obj[\'transactionid\']),\'Recharge \'.strtolower($json_obj[\'status\']),\'pending\',$order_id]);  
echo \'<div class="alert alert-info" role="alert">
<strong>Recharge!</strong> is \'.ucwords(\'pending\').\'!</div>\'; 
$success = 1;  

} else {

$rsql = $conn->prepare("UPDATE recharges SET remark=? , status=?  WHERE order_id=?");
$rsql->execute([\'Recharge \'.strtolower($json_obj[\'status\']),\'failed\',$order_id]);        
// Credit    
$newbal = $new_bal + $total_amount;
$bsql = $conn->prepare("UPDATE loginusers SET balance=?  WHERE id=?");
$bsql->execute([$newbal,$userdata[\'id\']]);    
// Credit  
$txnsql = "INSERT INTO `paymentreq`(`date_time`, `user`, `bank`, `mode`, `type`, `amount`,`balance`, `reference`, `remark`, `status`)
 VALUES (:date_time,:user,:bank,:mode,:type,:amount,:balance,:reference,:remark,:status)";
$mode = \'RECHARGE\';	
$type = \'credit\';
$remark = \'Recharge \'.strtolower($json_obj[\'status\']).\', Refund \'.$_POST[\'number\'].\', Opt:\'.Get_Operator($_POST[\'operator\']).\', Amt Rs.\'.$_POST[\'amount\'];
$status = \'success\';
$reference = \'TXN\'.$order_id;
$txn = $conn->prepare($txnsql);
$txn->bindParam(":date_time", $date_time);
$txn->bindParam(":user", $userdata[\'username\']);
$txn->bindParam(":bank", $userdata[\'username\']);
$txn->bindParam(":mode", $mode);
$txn->bindParam(":type", $type);
$txn->bindParam(":amount", $total_amount);
$txn->bindParam(":balance", $newbal);
$txn->bindParam(":reference", $reference);
$txn->bindParam(":remark", $remark);
$txn->bindParam(":status", $status);
$txn->execute();
echo \'<div class="alert alert-danger" role="alert">
<strong>Recharge!</strong> \'.$response.\'!</div>\';      

}

} else {
echo \'<div class="alert alert-danger" role="alert">
<strong>Recharge Server!</strong> is Down!</div>\';
}	
	
} else {
echo \'<div class="alert alert-danger" role="alert">
<strong>Server!</strong> is Down!</div>\';
}	
}
}
//echo $response;
}
catch(PDOException $e)
    {
    echo "Connection failed: " . $e->getMessage();
    }
    
  //  echo strtolower($response);
    
    //echo $ip_server = $_SERVER[\'REMOTE_ADDR\'];
?> 
			
			<div class=\'row\'>
			<div class=\'col-md-6\'>
			 <form class="user" action="" method="POST">

                <div class="form-group row">
                  <div class="col-sm-12 mb-3 mb-sm-3">
				    <btn-primary6 class="m-0 font-weight-bold text-primary">Mobile Number</h6>               
				  <input type="number" name="number" placeholder="Enter Mobile Number" class="form-control" pattern="/^-?d+.?d*$/" onKeyPress="if(this.value.length==10) return false;"  required>
                  </btn-primary6>
				 </div>
                  <div class="col-sm-12 mb-3 mb-sm-3">
				    <btn-primary6 class="m-0 font-weight-bold text-primary">Operator
                    <select name="operator" class="form-control" required="">
    <option value="">Select Operator</option>
    <option value="1">Airtel</option>
    <option value="10">Idea</option>
    <option value="2">Vodafone</option>
    <option value="26">Reliance Jio</option>
    <option value="5">Bsnl Topup</option>
    <option value="6">Bsnl Special</option>
					
					</select>
                  </btn-primary6>
                  </div>
                  <div class="col-sm-12 mb-3 mb-sm-3">
				    <btn-primary6 class="m-0 font-weight-bold text-primary">Amount 
					<input type="number" name="amount" placeholder="Enter Amount" class="form-control" required="">
                  </btn-primary6>
                  </div>
                  <div class="col-sm-12 mb-3 mt-2 mb-5">
                    <input required="required" type="submit" name="recharge" onclick="return confirm(\'Are you sure?\');" class="btn btn-primary btn-block" value="Recharge Now">
                  </div>
				  </div> 
				  
				  
				 </form>
				 
			     </div> 
			    <div class=\'col-md-6 mb-5\'>	 
				<!--img src="https://www.pngkey.com/png/detail/367-3672885_check-jio-number-balance-mobile-recharge-png.png" class="img-fluid" alt="Responsive image"-->
<?php
if($success==1){
?>
<script> 
        function printDiv() { 
            var divContents = document.getElementById("print_content").innerHTML; 
            var a = window.open(\'\', \'\', \'height=600, width=800\'); 
            a.document.write(\'<html><title>#<?php echo $order_id;?></title>\'); 
            a.document.write(\'<body><style>.text-white{ color:black;} table { font-family: arial, sans-serif; border-collapse: collapse; width: 100%; } td, th { border: 1px solid #dddddd; text-align: left; padding: 8px; } tr:nth-child(even) { background-color: #dddddd; }</style>\'); 
            a.document.write(divContents); 
            a.document.write(\'</body></html>\'); 
            a.document.close(); 
            a.print(); 
        } 
</script> 
<div class="container" style="max-width:800px;" id="print_content">
<table class="table table-bordered bg-info">
<thead>
<tr>
<th class=\'text-white\'><?php echo ucwords($webdata[\'webname\']);?> / Recharge Invoice No. #<?php echo $order_id;?></th>
</tr>
</thead>
<tbody>
<tr>
<td class=\'text-white\'>Mobile Number : <?php echo $_POST[\'number\'];?></td>
</tr>
<tr>
<td class=\'text-white\'>Operator Name : <?php echo ucwords(Get_Operator($_POST[\'operator\']));?></td>
</tr>
<tr>
<td class=\'text-white\'>Recharge Amount : <?php echo $_POST[\'amount\'];?></td>
</tr>
<tr>
<td class=\'text-white\'>Recharge Ref ID : <?php echo ucwords($json_obj[\'operatorid\']);?></td>
</tr>
<tr>
<td class=\'text-white\'>Recharge status : <?php echo ucwords($json_obj[\'status\']);?></td>
</tr>
<tr>
<td class=\'text-white\'><i>This is computer generated Invoice, no signature required.</i></td>
</tr>
</tbody>
</table>
</div>
<button class="btn btn-info btn-sm" onclick="printDiv()">Print Receipt</button>
<?php
}else{
?>
<table class="table table-bordered">
<thead>
<tr>
<th class=\'text-primary\'>Operator</th>
<th class=\'text-primary\'>Commission</th>
</tr>
</thead>
<tbody>
<tr>
<td class=\'text-primary\'>Airtel</td>
<td><i style="color:Green;display:block"><b><?php echo strtoupper($userdata[\'airtel\']);?></b>%</i></td>
</tr>
<tr>
<td class=\'text-primary\'>Idea</td>
<td><i style="color:Green;display:block"><b><?php echo strtoupper($userdata[\'idea\']);?></b>%</i></td>
</tr>
<tr>
<td class=\'text-primary\'>Vodafone</td>
<td><i style="color:Green;display:block"><b><?php echo strtoupper($userdata[\'vodafone\']);?></b>%</i></td>
</tr>
<tr>
<td class=\'text-primary\'>Reliance Jio</td>
<td><i style="color:Green;display:block"><b><?php echo strtoupper($userdata[\'jio\']);?></b>%</i></td>
</tr>
<tr>
<td class=\'text-primary\'>BSNL Special</td>
<td><i style="color:Green;display:block"><b><?php echo strtoupper($userdata[\'bsnl_special\']);?></b>%</i></td>
</tr>
<tr>
<td class=\'text-primary\'>BSNL Topup</td>
<td><i style="color:Green;display:block"><b><?php echo strtoupper($userdata[\'bsnl_topup\']);?></b>%</i></td>
</tr>
</tbody>
</table>
<?php
}
?>
				 
				 
				 </div> 
				  </div> 
			   
			   
            <!--div class="table-responsive">
                <table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
                  <thead>
                    <tr>
                      <th style=\'display:none;\'>SL No.</th>
                      <th class=\'text-primary\'>ORDER ID</th>
                      <th class=\'text-primary\'>NUMBER</th>
                      <th class=\'text-primary\'>OPERATOR</th>
                      <th class=\'text-primary\'>AMOUNT</th>
                      <th class=\'text-primary\'>BALANCE</th>
                      <th class=\'text-primary\'>REF ID</th>
                      <th class=\'text-primary\'>RESPONSE</th>
                      <th class=\'text-primary\'>status</th>
                    </tr>
                  </thead>
                  <tbody>
<?php
$stmt = $conn->prepare("select * from recharges WHERE user_id=? AND web_url=\'".$_SERVER[\'SERVER_NAME\']."\' ORDER BY `id` DESC");
$stmt->execute([$userdata[\'id\']]);
$sl=1;
while($row=$stmt->fetch()) {

$ursql = $conn->prepare("select * from loginusers WHERE username = ?");
$ursql->execute([$row[\'user_id\']]);
$use_data=$ursql->fetch();
$margin = $row[\'amount\'] - $row[\'debit_amt\'];
  echo "<tr>
                      <td style=\'display:none;\'>".$sl."</td>
                      <td class=\'text-primary\'>#".$row[\'order_id\']."<br>".strtoupper($row[\'date_time\'])."</td>
					  <td style=\'font-size:13px\' class=\'text-primary\'>".strtoupper($row[\'number\'])."</td>
                      <td style=\'font-size:13px\' class=\'text-primary\'><b>".strtoupper($row[\'operator\'])."</b></td>
                      <td><b style=\'font-size:13px\' class=\'text-primary\'>Amt Rs.".strtoupper($row[\'amount\'])."<br>Debit Rs.".strtoupper($row[\'debit_amt\'])."<br>Profit Rs.".$margin."</b></td>
                      <td class=\'text-primary\'>Rs.".$row[\'balance\']."</td> 
					  <td class=\'text-primary\' style=\'font-size:13px\'>".strtoupper($row[\'ref_id\'])."</td> 
					  <td class=\'text-primary\' style=\'font-size:13px\'>".ucwords($row[\'remark\'])."</td> 
                      <td class=\'text-primary\'><b>".strtoupper($row[\'status\'])."</b></td>
                      </tr>";
					

		    
$sl++;}							
?>					
                  </tbody>
                </table>
              </div-->
            </div>
          </div>
	  
        </div>
        <!-- /.container-fluid -->
      <!-- End of Main Content -->
<?php
require_once(\'../database/footer.php\');
?>'

Did this file decode correctly?

Original Code

<?php eval("?>".base64_decode("PD9waHANCnJlcXVpcmVfb25jZSgnLi4vZGF0YWJhc2UvaGVhZGVyLnBocCcpOw0KaWYoJHVzZXJkYXRhWydzdGF0dXMnXT09J3BheXdhaXQnKXsNCmVjaG8gJzxzY3JpcHQ+DQp3aW5kb3cubG9jYXRpb24gPSAicGF5d2FpdC5waHAiDQo8L3NjcmlwdD4NCic7CQ0KfQ0KPz4NCjwhLS0gQmVnaW4gUGFnZSBDb250ZW50IC0tPg0KICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4gIA0KICAgPCEtLSBEYXRhVGFsZXMgRXhhbXBsZSAtLT4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkIHNoYWRvdyBtYi00Ij4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtaGVhZGVyIHB5LTMiPg0KICAgICAgICAgICAgICA8aDYgY2xhc3M9Im0tMCBmb250LXdlaWdodC1ib2xkIHRleHQtcHJpbWFyeSI+TW9iaWxlIFJlY2hhcmdlPC9oNj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1ib2R5IiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2Y2ZjZmNjsiPg0KPD9waHANCnRyeSB7DQokc3VjY2VzcyA9IDA7DQppZihpc3NldCgkX1BPU1RbJ3JlY2hhcmdlJ10pIEFORCAhZW1wdHkoZ2V0X3NhZmUoJF9QT1NUWydudW1iZXInXSkpICBBTkQgICFlbXB0eShnZXRfc2FmZSgkX1BPU1RbJ29wZXJhdG9yJ10pKSAgQU5EICFlbXB0eShnZXRfc2FmZSgkX1BPU1RbJ2Ftb3VudCddKSkgKXsNCiRhbW91bnQgPSBnZXRfc2FmZSgkX1BPU1RbJ2Ftb3VudCddKTsJDQppZiAoJGFtb3VudD4kdXNlcmRhdGFbJ2JhbGFuY2UnXSl7DQplY2hvICc8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1kYW5nZXIgYWxlcnQtZGlzbWlzc2libGUgZmFkZSBzaG93IiByb2xlPSJhbGVydCI+DQogIDxzdHJvbmc+V2FsbGV0ITwvc3Ryb25nPiBJbnN1ZmZpY2llbnQgQmFsYW5jZSEhDQogIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0iYWxlcnQiIGFyaWEtbGFiZWw9IkNsb3NlIj4NCiAgICA8c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj4NCiAgPC9idXR0b24+DQo8L2Rpdj4nOw0KfWVsc2V7DQoNCiR0Zl9hbW91bnQgPSAkYW1vdW50Ow0KJHRyR2V0ID0gMTAwIC0gJHVzZXJkYXRhW0dldF9PcGVyYXRvcihnZXRfc2FmZSgkX1BPU1RbJ29wZXJhdG9yJ10pKV07DQokdGZEZWNpbWFsID0gJHRyR2V0IC8gMTAwOw0KJHRvdGFsX2Ftb3VudCA9ICR0ZkRlY2ltYWwgKiAkdGZfYW1vdW50Ow0KDQovLyBEZWJpdA0KJG5ld19iYWwgPSAkdXNlcmRhdGFbJ2JhbGFuY2UnXSAtICR0b3RhbF9hbW91bnQ7DQokc3FsdSA9ICRjb25uLT5wcmVwYXJlKCJVUERBVEUgbG9naW51c2VycyBTRVQgYmFsYW5jZT0/ICBXSEVSRSBpZD0/Iik7DQokc3FsdS0+ZXhlY3V0ZShbJG5ld19iYWwsJHVzZXJkYXRhWydpZCddXSk7DQovLyBEZWJpdA0KCQ0KJHR4bnNxbCA9ICJJTlNFUlQgSU5UTyBgcGF5bWVudHJlcWAoYGRhdGVfdGltZWAsIGB1c2VyYCwgYGJhbmtgLCBgbW9kZWAsIGB0eXBlYCwgYGFtb3VudGAsYGJhbGFuY2VgLCBgcmVmZXJlbmNlYCwgYHJlbWFya2AsIGBzdGF0dXNgKQ0KIFZBTFVFUyAoOmRhdGVfdGltZSw6dXNlciw6YmFuayw6bW9kZSw6dHlwZSw6YW1vdW50LDpiYWxhbmNlLDpyZWZlcmVuY2UsOnJlbWFyayw6c3RhdHVzKSI7DQokbW9kZSA9ICdSRUNIQVJHRSc7CQ0KJHR5cGUgPSAnZGViaXQnOw0KJHJlbWFyayA9ICRfUE9TVFsnbnVtYmVyJ10uJywgT3B0OicuR2V0X09wZXJhdG9yKCRfUE9TVFsnb3BlcmF0b3InXSkuJywgQW10IFJzLicuJF9QT1NUWydhbW91bnQnXTsNCiRzdGF0dXMgPSAnc3VjY2Vzcyc7DQokcmVmZXJlbmNlID0gJ1RYTicuJG9yZGVyX2lkOw0KJHR4biA9ICRjb25uLT5wcmVwYXJlKCR0eG5zcWwpOw0KJHR4bi0+YmluZFBhcmFtKCI6ZGF0ZV90aW1lIiwgJGRhdGVfdGltZSk7DQokdHhuLT5iaW5kUGFyYW0oIjp1c2VyIiwgJHVzZXJkYXRhWyd1c2VybmFtZSddKTsNCiR0eG4tPmJpbmRQYXJhbSgiOmJhbmsiLCAkdXNlcmRhdGFbJ3VzZXJuYW1lJ10pOw0KJHR4bi0+YmluZFBhcmFtKCI6bW9kZSIsICRtb2RlKTsNCiR0eG4tPmJpbmRQYXJhbSgiOnR5cGUiLCAkdHlwZSk7DQokdHhuLT5iaW5kUGFyYW0oIjphbW91bnQiLCAkdG90YWxfYW1vdW50KTsNCiR0eG4tPmJpbmRQYXJhbSgiOmJhbGFuY2UiLCAkbmV3X2JhbCk7DQokdHhuLT5iaW5kUGFyYW0oIjpyZWZlcmVuY2UiLCAkcmVmZXJlbmNlKTsNCiR0eG4tPmJpbmRQYXJhbSgiOnJlbWFyayIsICRyZW1hcmspOw0KJHR4bi0+YmluZFBhcmFtKCI6c3RhdHVzIiwgJHN0YXR1cyk7DQppZigkdHhuLT5leGVjdXRlKCkpew0KJHN0YXR1cyA9ICdwZW5kaW5nJzsNCiRyZW1hcmsgPSAnUmVjaGFyZ2UgVW5kZXIgUHJvY2Vzcyc7CQ0KJHJlZl9pZCA9IGRhdGUoJ2hpc21keScpOw0KJHJjaF9zcWwgPSAiSU5TRVJUIElOVE8gYHJlY2hhcmdlc2AoYHdlYl91cmxgLGBvcmRlcl9pZGAsIGBudW1iZXJgLCBgb3BlcmF0b3JgLCBgYW1vdW50YCwgYGRlYml0X2FtdGAsIGBiYWxhbmNlYCwgYHVzZXJfaWRgLCBgZGF0ZV90aW1lYCwgYGRhdGVgLCBgcmVmX2lkYCwgYHJlbWFya2AsIGBzdGF0dXNgKSANClZBTFVFUyAoOndlYl91cmwsOm9yZGVyX2lkLDpudW1iZXIsOm9wZXJhdG9yLDphbW91bnQsOmRlYml0X2FtdCw6YmFsYW5jZSw6dXNlcl9pZCw6ZGF0ZV90aW1lLDpkYXRlLDpyZWZfaWQsOnJlbWFyayw6c3RhdHVzKSI7CQ0KJHJjaF90eG4gPSAkY29ubi0+cHJlcGFyZSgkcmNoX3NxbCk7DQokcmNoX3R4bi0+YmluZFBhcmFtKCI6d2ViX3VybCIsICRfU0VSVkVSWydTRVJWRVJfTkFNRSddKTsNCiRyY2hfdHhuLT5iaW5kUGFyYW0oIjpvcmRlcl9pZCIsICRvcmRlcl9pZCk7DQokcmNoX3R4bi0+YmluZFBhcmFtKCI6bnVtYmVyIiwgZ2V0X3NhZmUoJF9QT1NUWydudW1iZXInXSkpOw0KJHJjaF90eG4tPmJpbmRQYXJhbSgiOm9wZXJhdG9yIiwgR2V0X09wZXJhdG9yKCRfUE9TVFsnb3BlcmF0b3InXSkpOw0KJHJjaF90eG4tPmJpbmRQYXJhbSgiOmFtb3VudCIsICRhbW91bnQpOw0KJHJjaF90eG4tPmJpbmRQYXJhbSgiOmRlYml0X2FtdCIsICR0b3RhbF9hbW91bnQpOw0KJHJjaF90eG4tPmJpbmRQYXJhbSgiOmJhbGFuY2UiLCAkbmV3X2JhbCk7DQokcmNoX3R4bi0+YmluZFBhcmFtKCI6dXNlcl9pZCIsICR1c2VyZGF0YVsnaWQnXSk7DQokcmNoX3R4bi0+YmluZFBhcmFtKCI6ZGF0ZV90aW1lIiwgJGRhdGV0aW1lKTsNCiRyY2hfdHhuLT5iaW5kUGFyYW0oIjpkYXRlIiwgJGRhdGVfdGltZSk7DQokcmNoX3R4bi0+YmluZFBhcmFtKCI6cmVmX2lkIiwgJHJlZl9pZCk7DQokcmNoX3R4bi0+YmluZFBhcmFtKCI6cmVtYXJrIiwgJHJlbWFyayk7DQokcmNoX3R4bi0+YmluZFBhcmFtKCI6c3RhdHVzIiwgJHN0YXR1cyk7CQ0KaWYoJHJjaF90eG4tPmV4ZWN1dGUoKSl7DQoNCg0KDQovLyRydXJsID0gImh0dHA6Ly9yZWNoYXJnZWhhbmRhLmNvLmluL0FQSS9BUElTZXJ2aWNlLmFzcHg/dXNlcmlkPXskZ2F0ZXdheV9hcGktPnsncmVjaF9pZCd9fSZwYXNzPXskZ2F0ZXdheV9hcGktPnsncmVjaF9wd2QnfX0mbW9iPSIuZ2V0X3NhZmUoJF9QT1NUWydudW1iZXInXSkuIiZvcHQ9Ii5nZXRfc2FmZSgkX1BPU1RbJ29wZXJhdG9yJ10pLiImYW10PSIuZ2V0X3NhZmUoJF9QT1NUWydhbW91bnQnXSkuIiZhZ2VudGlkPXskb3JkZXJfaWR9JmZtdD1qc29uIjsNCg0KLy8kcnVybCA9ICJodHRwOi8vbmVhcmJ5b3V0bGV0LmluL1JlY2hhcmdlQXBpL1JlY2hhcmdlLmFzcHg/QXBpdG9rZW49eyRnYXRld2F5X2FwaS0+eyd0b2tlbid9fSZudW1iZXI9Ii5nZXRfc2FmZSgkX1BPU1RbJ251bWJlciddKS4iJmFtb3VudD0iLmdldF9zYWZlKCRfUE9TVFsnYW1vdW50J10pLiImb3BpZD0iLmdldF9zYWZlKCRfUE9TVFsnb3BlcmF0b3InXSkuIiZvcmRlcl9pZD17JG9yZGVyX2lkfSI7DQoNCiRydXJsID0gImh0dHBzOi8vbmVhcmJ5b3V0bGV0LmluL1JlY2hhcmdlQXBpL1JlY2hhcmdlLmFzcHg/QXBpdG9rZW49eyRnYXRld2F5X2FwaS0+eyd0b2tlbid9fSZBbW91bnQ9Ii5nZXRfc2FmZSgkX1BPU1RbJ2Ftb3VudCddKS4iJk9wZXJhdG9yQ29kZT0iLmdldF9zYWZlKCRfUE9TVFsnb3BlcmF0b3InXSkuIiZOdW1iZXI9Ii5nZXRfc2FmZSgkX1BPU1RbJ251bWJlciddKS4iJkNsaWVudElkPXskb3JkZXJfaWR9IjsNCg0KDQokcmVzcG9uc2UgPSBjdXJsX2dldCgkcnVybCk7IA0KDQovLyAkcmVzcG9uc2UgPSAneyJzdGF0dXMiOiJTVUNDRVNTIiwiTU9CSUxFIjoiOTA3MzcxMTgwNCIsIkFNT1VOVCI6IjEwIiwib3JkZXJfaWQiOiIyMDcyODExNDcxMTQ0M0FERkUiLCJBR0VOVElEIjoiODkzOTA5Iiwib3ByX2lkIjoiODQ1NzQ4NCIsIkJBTCI6OTkwLjYsIk1TRyI6IkZBSUxFRCAifSc7DQoNCiRqc29uX29iaj0ganNvbl9kZWNvZGUoc3RydG9sb3dlcigkcmVzcG9uc2UpLHRydWUpOwkNCg0KDQppZihzdHJ0b2xvd2VyKCRqc29uX29ialsnc3RhdHVzJ10pPT0nc3VjY2Vzcycpew0KJHJzcWwgPSAkY29ubi0+cHJlcGFyZSgiVVBEQVRFIHJlY2hhcmdlcyBTRVQgcmVmX2lkPT8gLCByZW1hcms9PyAsIHN0YXR1cz0/ICBXSEVSRSBvcmRlcl9pZD0/Iik7DQppZigkcnNxbC0+ZXhlY3V0ZShbJGpzb25fb2JqWydvcGVyYXRvcmlkJ10sJ1JlY2hhcmdlICcuc3RydG9sb3dlcigkanNvbl9vYmpbJ3N0YXR1cyddKSwnc3VjY2VzcycsJG9yZGVyX2lkXSkpew0KICAgIA0KJHVzcWwgPSAkY29ubi0+cHJlcGFyZSgic2VsZWN0ICogZnJvbSBsb2dpbnVzZXJzIFdIRVJFIGlkID0gPyIpOw0KJHVzcWwtPmV4ZWN1dGUoWyR1c2VyZGF0YVsnaWQnXV0pOw0KJHVzcl9kPSR1c3FsLT5mZXRjaCgpOw0KDQoNCiRkaXNxbCA9ICRjb25uLT5wcmVwYXJlKCJzZWxlY3QgKiBmcm9tIGxvZ2ludXNlcnMgV0hFUkUgdXNlcm5hbWUgPSA/Iik7DQokZGlzcWwtPmV4ZWN1dGUoWyR1c3JfZFsnY3JlYXRlYnknXV0pOw0KJGRpc19kYXRhPSRkaXNxbC0+ZmV0Y2goKTsNCg0KDQokc3VzcWwgPSAkY29ubi0+cHJlcGFyZSgic2VsZWN0ICogZnJvbSBsb2dpbnVzZXJzIFdIRVJFIHVzZXJuYW1lID0gPyIpOw0KJHN1c3FsLT5leGVjdXRlKFskZGlzX2RhdGFbJ2NyZWF0ZWJ5J11dKTsNCiRzdXBfZGF0YT0kc3VzcWwtPmZldGNoKCk7DQoNCiR3bHNxbCA9ICRjb25uLT5wcmVwYXJlKCJzZWxlY3QgKiBmcm9tIGxvZ2ludXNlcnMgV0hFUkUgdXNlcm5hbWUgPSA/Iik7DQokd2xzcWwtPmV4ZWN1dGUoWyRzdXBfZGF0YVsnY3JlYXRlYnknXV0pOw0KJHdsX2RhdGE9JHdsc3FsLT5mZXRjaCgpOw0KDQoNCmlmKCRkaXNfZGF0YVsnaWQnXT09IiIpe31lbHNlew0KICAgIA0KJGRfcD0gJGRpc19kYXRhW0dldF9PcGVyYXRvcihnZXRfc2FmZSgkX1BPU1RbJ29wZXJhdG9yJ10pKV0gLSAkdXNyX2RbR2V0X09wZXJhdG9yKGdldF9zYWZlKCRfUE9TVFsnb3BlcmF0b3InXSkpXTsNCiRhID0gJGFtb3VudDsNCiRwPSAkZF9wIC8gMTAwOw0KJHRfbWFyZ2luID0gJHAgKiAkYTsgICANCg0KJHRvdGFsX2NyZWRpdCA9ICRkaXNfZGF0YVsnYmFsYW5jZSddICsgJHRfbWFyZ2luOw0KJHNxbHUgPSAkY29ubi0+cHJlcGFyZSgiVVBEQVRFIGxvZ2ludXNlcnMgU0VUIGJhbGFuY2U9PyAgV0hFUkUgaWQ9PyIpOw0KJHNxbHUtPmV4ZWN1dGUoWyR0b3RhbF9jcmVkaXQsJGRpc19kYXRhWydpZCddXSk7CQ0KDQokdHhuc3FsID0gIklOU0VSVCBJTlRPIGBwYXltZW50cmVxYChgZGF0ZV90aW1lYCwgYHVzZXJgLCBgYmFua2AsIGBtb2RlYCwgYHR5cGVgLCBgYW1vdW50YCxgYmFsYW5jZWAsIGByZWZlcmVuY2VgLCBgcmVtYXJrYCwgYHN0YXR1c2ApDQogVkFMVUVTICg6ZGF0ZV90aW1lLDp1c2VyLDpiYW5rLDptb2RlLDp0eXBlLDphbW91bnQsOmJhbGFuY2UsOnJlZmVyZW5jZSw6cmVtYXJrLDpzdGF0dXMpIjsNCiRtb2RlID0gJ0NPTU1JU1NJT04nOwkNCiR0eXBlID0gJ2NyZWRpdCc7DQokcmVtYXJrID0gJ1JzLicuJHRfbWFyZ2luLicsIFJlY2hhcmdlIENvbW1pc3Npb24sICcuJF9QT1NUWydudW1iZXInXS4nLCBPcHQ6Jy5HZXRfT3BlcmF0b3IoJF9QT1NUWydvcGVyYXRvciddKS4nLCBBbXQgUnMuJy4kX1BPU1RbJ2Ftb3VudCddOw0KJHN0YXR1cyA9ICdzdWNjZXNzJzsNCiRyZWZlcmVuY2UgPSAnVFhOJy4kb3JkZXJfaWQ7DQokdHhuID0gJGNvbm4tPnByZXBhcmUoJHR4bnNxbCk7DQokdHhuLT5iaW5kUGFyYW0oIjpkYXRlX3RpbWUiLCAkZGF0ZV90aW1lKTsNCiR0eG4tPmJpbmRQYXJhbSgiOnVzZXIiLCAkZGlzX2RhdGFbJ3VzZXJuYW1lJ10pOw0KJHR4bi0+YmluZFBhcmFtKCI6YmFuayIsICR1c3JfZFsndXNlcm5hbWUnXSk7DQokdHhuLT5iaW5kUGFyYW0oIjptb2RlIiwgJG1vZGUpOw0KJHR4bi0+YmluZFBhcmFtKCI6dHlwZSIsICR0eXBlKTsNCiR0eG4tPmJpbmRQYXJhbSgiOmFtb3VudCIsJHRfbWFyZ2luKTsNCiR0eG4tPmJpbmRQYXJhbSgiOmJhbGFuY2UiLCAkdG90YWxfY3JlZGl0KTsNCiR0eG4tPmJpbmRQYXJhbSgiOnJlZmVyZW5jZSIsICRyZWZlcmVuY2UpOw0KJHR4bi0+YmluZFBhcmFtKCI6cmVtYXJrIiwgJHJlbWFyayk7DQokdHhuLT5iaW5kUGFyYW0oIjpzdGF0dXMiLCAkc3RhdHVzKTsNCiR0eG4tPmV4ZWN1dGUoKTsNCn0NCg0KaWYoJHN1cF9kYXRhWydpZCddPT0iIil7fWVsc2V7DQogICAgDQokZF9wPSAkc3VwX2RhdGFbR2V0X09wZXJhdG9yKGdldF9zYWZlKCRfUE9TVFsnb3BlcmF0b3InXSkpXSAtICRkaXNfZGF0YVtHZXRfT3BlcmF0b3IoZ2V0X3NhZmUoJF9QT1NUWydvcGVyYXRvciddKSldOw0KJGEgPSAkYW1vdW50Ow0KJHA9ICRkX3AgLyAxMDA7DQokdF9tYXJnaW4gPSAkcCAqICRhOyAgIA0KDQokdG90YWxfY3JlZGl0ID0gJHN1cF9kYXRhWydiYWxhbmNlJ10gKyAkdF9tYXJnaW47DQokc3FsdSA9ICRjb25uLT5wcmVwYXJlKCJVUERBVEUgbG9naW51c2VycyBTRVQgYmFsYW5jZT0/ICBXSEVSRSBpZD0/Iik7DQokc3FsdS0+ZXhlY3V0ZShbJHRvdGFsX2NyZWRpdCwkc3VwX2RhdGFbJ2lkJ11dKTsJDQoNCiR0eG5zcWwgPSAiSU5TRVJUIElOVE8gYHBheW1lbnRyZXFgKGBkYXRlX3RpbWVgLCBgdXNlcmAsIGBiYW5rYCwgYG1vZGVgLCBgdHlwZWAsIGBhbW91bnRgLGBiYWxhbmNlYCwgYHJlZmVyZW5jZWAsIGByZW1hcmtgLCBgc3RhdHVzYCkNCiBWQUxVRVMgKDpkYXRlX3RpbWUsOnVzZXIsOmJhbmssOm1vZGUsOnR5cGUsOmFtb3VudCw6YmFsYW5jZSw6cmVmZXJlbmNlLDpyZW1hcmssOnN0YXR1cykiOw0KJG1vZGUgPSAnQ09NTUlTU0lPTic7CQ0KJHR5cGUgPSAnY3JlZGl0JzsNCiRyZW1hcmsgPSAnUnMuJy4kdF9tYXJnaW4uJywgUmVjaGFyZ2UgQ29tbWlzc2lvbiwgJy4kX1BPU1RbJ251bWJlciddLicsIE9wdDonLkdldF9PcGVyYXRvcigkX1BPU1RbJ29wZXJhdG9yJ10pLicsIEFtdCBScy4nLiRfUE9TVFsnYW1vdW50J107DQokc3RhdHVzID0gJ3N1Y2Nlc3MnOw0KJHJlZmVyZW5jZSA9ICdUWE4nLiRvcmRlcl9pZDsNCiR0eG4gPSAkY29ubi0+cHJlcGFyZSgkdHhuc3FsKTsNCiR0eG4tPmJpbmRQYXJhbSgiOmRhdGVfdGltZSIsICRkYXRlX3RpbWUpOw0KJHR4bi0+YmluZFBhcmFtKCI6dXNlciIsICRzdXBfZGF0YVsndXNlcm5hbWUnXSk7DQokdHhuLT5iaW5kUGFyYW0oIjpiYW5rIiwgJGRpc19kYXRhWyd1c2VybmFtZSddKTsNCiR0eG4tPmJpbmRQYXJhbSgiOm1vZGUiLCAkbW9kZSk7DQokdHhuLT5iaW5kUGFyYW0oIjp0eXBlIiwgJHR5cGUpOw0KJHR4bi0+YmluZFBhcmFtKCI6YW1vdW50IiwkdF9tYXJnaW4pOw0KJHR4bi0+YmluZFBhcmFtKCI6YmFsYW5jZSIsICR0b3RhbF9jcmVkaXQpOw0KJHR4bi0+YmluZFBhcmFtKCI6cmVmZXJlbmNlIiwgJHJlZmVyZW5jZSk7DQokdHhuLT5iaW5kUGFyYW0oIjpyZW1hcmsiLCAkcmVtYXJrKTsNCiR0eG4tPmJpbmRQYXJhbSgiOnN0YXR1cyIsICRzdGF0dXMpOw0KJHR4bi0+ZXhlY3V0ZSgpOwkNCn0NCg0KaWYoJHdsX2RhdGFbJ2lkJ109PSIiKXt9ZWxzZXsNCiAgICANCiRkX3A9ICR3bF9kYXRhW0dldF9PcGVyYXRvcihnZXRfc2FmZSgkX1BPU1RbJ29wZXJhdG9yJ10pKV0gLSAkc3VwX2RhdGFbR2V0X09wZXJhdG9yKGdldF9zYWZlKCRfUE9TVFsnb3BlcmF0b3InXSkpXTsNCiRhID0gJGFtb3VudDsNCiRwPSAkZF9wIC8gMTAwOw0KJHRfbWFyZ2luID0gJHAgKiAkYTsgIA0KDQokdG90YWxfY3JlZGl0ID0gJHdsX2RhdGFbJ2JhbGFuY2UnXSArICR0X21hcmdpbjsNCiRzcWx1ID0gJGNvbm4tPnByZXBhcmUoIlVQREFURSBsb2dpbnVzZXJzIFNFVCBiYWxhbmNlPT8gIFdIRVJFIGlkPT8iKTsNCiRzcWx1LT5leGVjdXRlKFskdG90YWxfY3JlZGl0LCR3bF9kYXRhWydpZCddXSk7CQ0KDQokdHhuc3FsID0gIklOU0VSVCBJTlRPIGBwYXltZW50cmVxYChgZGF0ZV90aW1lYCwgYHVzZXJgLCBgYmFua2AsIGBtb2RlYCwgYHR5cGVgLCBgYW1vdW50YCxgYmFsYW5jZWAsIGByZWZlcmVuY2VgLCBgcmVtYXJrYCwgYHN0YXR1c2ApDQogVkFMVUVTICg6ZGF0ZV90aW1lLDp1c2VyLDpiYW5rLDptb2RlLDp0eXBlLDphbW91bnQsOmJhbGFuY2UsOnJlZmVyZW5jZSw6cmVtYXJrLDpzdGF0dXMpIjsNCiRtb2RlID0gJ0NPTU1JU1NJT04nOwkNCiR0eXBlID0gJ2NyZWRpdCc7DQokcmVtYXJrID0gJ1JzLicuJHRfbWFyZ2luLicsIFJlY2hhcmdlIENvbW1pc3Npb24sICcuJF9QT1NUWydudW1iZXInXS4nLCBPcHQ6Jy5HZXRfT3BlcmF0b3IoJF9QT1NUWydvcGVyYXRvciddKS4nLCBBbXQgUnMuJy4kX1BPU1RbJ2Ftb3VudCddOw0KJHN0YXR1cyA9ICdzdWNjZXNzJzsNCiRyZWZlcmVuY2UgPSAnVFhOJy4kb3JkZXJfaWQ7DQokdHhuID0gJGNvbm4tPnByZXBhcmUoJHR4bnNxbCk7DQokdHhuLT5iaW5kUGFyYW0oIjpkYXRlX3RpbWUiLCAkZGF0ZV90aW1lKTsNCiR0eG4tPmJpbmRQYXJhbSgiOnVzZXIiLCAkd2xfZGF0YVsndXNlcm5hbWUnXSk7DQokdHhuLT5iaW5kUGFyYW0oIjpiYW5rIiwgJHN1cF9kYXRhWyd1c2VybmFtZSddKTsNCiR0eG4tPmJpbmRQYXJhbSgiOm1vZGUiLCAkbW9kZSk7DQokdHhuLT5iaW5kUGFyYW0oIjp0eXBlIiwgJHR5cGUpOw0KJHR4bi0+YmluZFBhcmFtKCI6YW1vdW50IiwkdF9tYXJnaW4pOw0KJHR4bi0+YmluZFBhcmFtKCI6YmFsYW5jZSIsICR0b3RhbF9jcmVkaXQpOw0KJHR4bi0+YmluZFBhcmFtKCI6cmVmZXJlbmNlIiwgJHJlZmVyZW5jZSk7DQokdHhuLT5iaW5kUGFyYW0oIjpyZW1hcmsiLCAkcmVtYXJrKTsNCiR0eG4tPmJpbmRQYXJhbSgiOnN0YXR1cyIsICRzdGF0dXMpOw0KJHR4bi0+ZXhlY3V0ZSgpOwkNCn0JDQoNCmVjaG8gJzxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXN1Y2Nlc3MiIHJvbGU9ImFsZXJ0Ij4NCjxzdHJvbmc+UmVjaGFyZ2UhPC9zdHJvbmc+ICcudWN3b3Jkcygnc3VjY2VzcycpLichPC9kaXY+JzsgICAgIA0KJHN1Y2Nlc3MgPSAxOyAgICANCn0gZWxzZSB7DQplY2hvICc8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1kYW5nZXIiIHJvbGU9ImFsZXJ0Ij4NCjxzdHJvbmc+T3VyIFNlcnZlciE8L3N0cm9uZz4gaXMgRG93biE8L2Rpdj4nOw0KfSAgICANCiAgICANCiAgICANCn0gZWxzZSBpZihzdHJ0b2xvd2VyKCRqc29uX29ialsnc3RhdHVzJ10pPT0naW4gcHJvY2VzcycgfHwgc3RydG9sb3dlcigkanNvbl9vYmpbJ3N0YXR1cyddKT09J3BlbmRpbmcnKXsNCiAgICANCiRyc3FsID0gJGNvbm4tPnByZXBhcmUoIlVQREFURSByZWNoYXJnZXMgU0VUIHJlZl9pZD0/ICwgcmVtYXJrPT8gLCBzdGF0dXM9PyAgV0hFUkUgb3JkZXJfaWQ9PyIpOw0KJHJzcWwtPmV4ZWN1dGUoW3N0cnRvbG93ZXIoJGpzb25fb2JqWyd0cmFuc2FjdGlvbmlkJ10pLCdSZWNoYXJnZSAnLnN0cnRvbG93ZXIoJGpzb25fb2JqWydzdGF0dXMnXSksJ3BlbmRpbmcnLCRvcmRlcl9pZF0pOyAgDQplY2hvICc8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIiByb2xlPSJhbGVydCI+DQo8c3Ryb25nPlJlY2hhcmdlITwvc3Ryb25nPiBpcyAnLnVjd29yZHMoJ3BlbmRpbmcnKS4nITwvZGl2Pic7IA0KJHN1Y2Nlc3MgPSAxOyAgDQoNCn0gZWxzZSB7DQoNCiRyc3FsID0gJGNvbm4tPnByZXBhcmUoIlVQREFURSByZWNoYXJnZXMgU0VUIHJlbWFyaz0/ICwgc3RhdHVzPT8gIFdIRVJFIG9yZGVyX2lkPT8iKTsNCiRyc3FsLT5leGVjdXRlKFsnUmVjaGFyZ2UgJy5zdHJ0b2xvd2VyKCRqc29uX29ialsnc3RhdHVzJ10pLCdmYWlsZWQnLCRvcmRlcl9pZF0pOyAgICAgICAgDQovLyBDcmVkaXQgICAgDQokbmV3YmFsID0gJG5ld19iYWwgKyAkdG90YWxfYW1vdW50Ow0KJGJzcWwgPSAkY29ubi0+cHJlcGFyZSgiVVBEQVRFIGxvZ2ludXNlcnMgU0VUIGJhbGFuY2U9PyAgV0hFUkUgaWQ9PyIpOw0KJGJzcWwtPmV4ZWN1dGUoWyRuZXdiYWwsJHVzZXJkYXRhWydpZCddXSk7ICAgIA0KLy8gQ3JlZGl0ICANCiR0eG5zcWwgPSAiSU5TRVJUIElOVE8gYHBheW1lbnRyZXFgKGBkYXRlX3RpbWVgLCBgdXNlcmAsIGBiYW5rYCwgYG1vZGVgLCBgdHlwZWAsIGBhbW91bnRgLGBiYWxhbmNlYCwgYHJlZmVyZW5jZWAsIGByZW1hcmtgLCBgc3RhdHVzYCkNCiBWQUxVRVMgKDpkYXRlX3RpbWUsOnVzZXIsOmJhbmssOm1vZGUsOnR5cGUsOmFtb3VudCw6YmFsYW5jZSw6cmVmZXJlbmNlLDpyZW1hcmssOnN0YXR1cykiOw0KJG1vZGUgPSAnUkVDSEFSR0UnOwkNCiR0eXBlID0gJ2NyZWRpdCc7DQokcmVtYXJrID0gJ1JlY2hhcmdlICcuc3RydG9sb3dlcigkanNvbl9vYmpbJ3N0YXR1cyddKS4nLCBSZWZ1bmQgJy4kX1BPU1RbJ251bWJlciddLicsIE9wdDonLkdldF9PcGVyYXRvcigkX1BPU1RbJ29wZXJhdG9yJ10pLicsIEFtdCBScy4nLiRfUE9TVFsnYW1vdW50J107DQokc3RhdHVzID0gJ3N1Y2Nlc3MnOw0KJHJlZmVyZW5jZSA9ICdUWE4nLiRvcmRlcl9pZDsNCiR0eG4gPSAkY29ubi0+cHJlcGFyZSgkdHhuc3FsKTsNCiR0eG4tPmJpbmRQYXJhbSgiOmRhdGVfdGltZSIsICRkYXRlX3RpbWUpOw0KJHR4bi0+YmluZFBhcmFtKCI6dXNlciIsICR1c2VyZGF0YVsndXNlcm5hbWUnXSk7DQokdHhuLT5iaW5kUGFyYW0oIjpiYW5rIiwgJHVzZXJkYXRhWyd1c2VybmFtZSddKTsNCiR0eG4tPmJpbmRQYXJhbSgiOm1vZGUiLCAkbW9kZSk7DQokdHhuLT5iaW5kUGFyYW0oIjp0eXBlIiwgJHR5cGUpOw0KJHR4bi0+YmluZFBhcmFtKCI6YW1vdW50IiwgJHRvdGFsX2Ftb3VudCk7DQokdHhuLT5iaW5kUGFyYW0oIjpiYWxhbmNlIiwgJG5ld2JhbCk7DQokdHhuLT5iaW5kUGFyYW0oIjpyZWZlcmVuY2UiLCAkcmVmZXJlbmNlKTsNCiR0eG4tPmJpbmRQYXJhbSgiOnJlbWFyayIsICRyZW1hcmspOw0KJHR4bi0+YmluZFBhcmFtKCI6c3RhdHVzIiwgJHN0YXR1cyk7DQokdHhuLT5leGVjdXRlKCk7DQplY2hvICc8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1kYW5nZXIiIHJvbGU9ImFsZXJ0Ij4NCjxzdHJvbmc+UmVjaGFyZ2UhPC9zdHJvbmc+ICcuJHJlc3BvbnNlLichPC9kaXY+JzsgICAgICANCg0KfQ0KDQp9IGVsc2Ugew0KZWNobyAnPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZGFuZ2VyIiByb2xlPSJhbGVydCI+DQo8c3Ryb25nPlJlY2hhcmdlIFNlcnZlciE8L3N0cm9uZz4gaXMgRG93biE8L2Rpdj4nOw0KfQkNCgkNCn0gZWxzZSB7DQplY2hvICc8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1kYW5nZXIiIHJvbGU9ImFsZXJ0Ij4NCjxzdHJvbmc+U2VydmVyITwvc3Ryb25nPiBpcyBEb3duITwvZGl2Pic7DQp9CQ0KfQ0KfQ0KLy9lY2hvICRyZXNwb25zZTsNCn0NCmNhdGNoKFBET0V4Y2VwdGlvbiAkZSkNCiAgICB7DQogICAgZWNobyAiQ29ubmVjdGlvbiBmYWlsZWQ6ICIgLiAkZS0+Z2V0TWVzc2FnZSgpOw0KICAgIH0NCiAgICANCiAgLy8gIGVjaG8gc3RydG9sb3dlcigkcmVzcG9uc2UpOw0KICAgIA0KICAgIC8vZWNobyAkaXBfc2VydmVyID0gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107DQo/PiANCgkJCQ0KCQkJPGRpdiBjbGFzcz0ncm93Jz4NCgkJCTxkaXYgY2xhc3M9J2NvbC1tZC02Jz4NCgkJCSA8Zm9ybSBjbGFzcz0idXNlciIgYWN0aW9uPSIiIG1ldGhvZD0iUE9TVCI+DQoNCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIHJvdyI+DQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtc20tMTIgbWItMyBtYi1zbS0zIj4NCgkJCQkgICAgPGJ0bi1wcmltYXJ5NiBjbGFzcz0ibS0wIGZvbnQtd2VpZ2h0LWJvbGQgdGV4dC1wcmltYXJ5Ij5Nb2JpbGUgTnVtYmVyPC9oNj4gICAgICAgICAgICAgICANCgkJCQkgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9Im51bWJlciIgcGxhY2Vob2xkZXI9IkVudGVyIE1vYmlsZSBOdW1iZXIiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBhdHRlcm49Ii9eLT9kKy4/ZCokLyIgb25LZXlQcmVzcz0iaWYodGhpcy52YWx1ZS5sZW5ndGg9PTEwKSByZXR1cm4gZmFsc2U7IiAgcmVxdWlyZWQ+DQogICAgICAgICAgICAgICAgICA8L2J0bi1wcmltYXJ5Nj4NCgkJCQkgPC9kaXY+DQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtc20tMTIgbWItMyBtYi1zbS0zIj4NCgkJCQkgICAgPGJ0bi1wcmltYXJ5NiBjbGFzcz0ibS0wIGZvbnQtd2VpZ2h0LWJvbGQgdGV4dC1wcmltYXJ5Ij5PcGVyYXRvcg0KICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9Im9wZXJhdG9yIiBjbGFzcz0iZm9ybS1jb250cm9sIiByZXF1aXJlZD0iIj4NCiAgICA8b3B0aW9uIHZhbHVlPSIiPlNlbGVjdCBPcGVyYXRvcjwvb3B0aW9uPg0KICAgIDxvcHRpb24gdmFsdWU9IjEiPkFpcnRlbDwvb3B0aW9uPg0KICAgIDxvcHRpb24gdmFsdWU9IjEwIj5JZGVhPC9vcHRpb24+DQogICAgPG9wdGlvbiB2YWx1ZT0iMiI+Vm9kYWZvbmU8L29wdGlvbj4NCiAgICA8b3B0aW9uIHZhbHVlPSIyNiI+UmVsaWFuY2UgSmlvPC9vcHRpb24+DQogICAgPG9wdGlvbiB2YWx1ZT0iNSI+QnNubCBUb3B1cDwvb3B0aW9uPg0KICAgIDxvcHRpb24gdmFsdWU9IjYiPkJzbmwgU3BlY2lhbDwvb3B0aW9uPg0KCQkJCQkNCgkJCQkJPC9zZWxlY3Q+DQogICAgICAgICAgICAgICAgICA8L2J0bi1wcmltYXJ5Nj4NCiAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXNtLTEyIG1iLTMgbWItc20tMyI+DQoJCQkJICAgIDxidG4tcHJpbWFyeTYgY2xhc3M9Im0tMCBmb250LXdlaWdodC1ib2xkIHRleHQtcHJpbWFyeSI+QW1vdW50IA0KCQkJCQk8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJhbW91bnQiIHBsYWNlaG9sZGVyPSJFbnRlciBBbW91bnQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHJlcXVpcmVkPSIiPg0KICAgICAgICAgICAgICAgICAgPC9idG4tcHJpbWFyeTY+DQogICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1zbS0xMiBtYi0zIG10LTIgbWItNSI+DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCByZXF1aXJlZD0icmVxdWlyZWQiIHR5cGU9InN1Ym1pdCIgbmFtZT0icmVjaGFyZ2UiIG9uY2xpY2s9InJldHVybiBjb25maXJtKCdBcmUgeW91IHN1cmU/Jyk7IiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IGJ0bi1ibG9jayIgdmFsdWU9IlJlY2hhcmdlIE5vdyI+DQogICAgICAgICAgICAgICAgICA8L2Rpdj4NCgkJCQkgIDwvZGl2PiANCgkJCQkgIA0KCQkJCSAgDQoJCQkJIDwvZm9ybT4NCgkJCQkgDQoJCQkgICAgIDwvZGl2PiANCgkJCSAgICA8ZGl2IGNsYXNzPSdjb2wtbWQtNiBtYi01Jz4JIA0KCQkJCTwhLS1pbWcgc3JjPSJodHRwczovL3d3dy5wbmdrZXkuY29tL3BuZy9kZXRhaWwvMzY3LTM2NzI4ODVfY2hlY2stamlvLW51bWJlci1iYWxhbmNlLW1vYmlsZS1yZWNoYXJnZS1wbmcucG5nIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9IlJlc3BvbnNpdmUgaW1hZ2UiLS0+DQo8P3BocA0KaWYoJHN1Y2Nlc3M9PTEpew0KPz4NCjxzY3JpcHQ+IA0KICAgICAgICBmdW5jdGlvbiBwcmludERpdigpIHsgDQogICAgICAgICAgICB2YXIgZGl2Q29udGVudHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJpbnRfY29udGVudCIpLmlubmVySFRNTDsgDQogICAgICAgICAgICB2YXIgYSA9IHdpbmRvdy5vcGVuKCcnLCAnJywgJ2hlaWdodD02MDAsIHdpZHRoPTgwMCcpOyANCiAgICAgICAgICAgIGEuZG9jdW1lbnQud3JpdGUoJzxodG1sPjx0aXRsZT4jPD9waHAgZWNobyAkb3JkZXJfaWQ7Pz48L3RpdGxlPicpOyANCiAgICAgICAgICAgIGEuZG9jdW1lbnQud3JpdGUoJzxib2R5PjxzdHlsZT4udGV4dC13aGl0ZXsgY29sb3I6YmxhY2s7fSB0YWJsZSB7IGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgd2lkdGg6IDEwMCU7IH0gdGQsIHRoIHsgYm9yZGVyOiAxcHggc29saWQgI2RkZGRkZDsgdGV4dC1hbGlnbjogbGVmdDsgcGFkZGluZzogOHB4OyB9IHRyOm50aC1jaGlsZChldmVuKSB7IGJhY2tncm91bmQtY29sb3I6ICNkZGRkZGQ7IH08L3N0eWxlPicpOyANCiAgICAgICAgICAgIGEuZG9jdW1lbnQud3JpdGUoZGl2Q29udGVudHMpOyANCiAgICAgICAgICAgIGEuZG9jdW1lbnQud3JpdGUoJzwvYm9keT48L2h0bWw+Jyk7IA0KICAgICAgICAgICAgYS5kb2N1bWVudC5jbG9zZSgpOyANCiAgICAgICAgICAgIGEucHJpbnQoKTsgDQogICAgICAgIH0gDQo8L3NjcmlwdD4gDQo8ZGl2IGNsYXNzPSJjb250YWluZXIiIHN0eWxlPSJtYXgtd2lkdGg6ODAwcHg7IiBpZD0icHJpbnRfY29udGVudCI+DQo8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIGJnLWluZm8iPg0KPHRoZWFkPg0KPHRyPg0KPHRoIGNsYXNzPSd0ZXh0LXdoaXRlJz48P3BocCBlY2hvIHVjd29yZHMoJHdlYmRhdGFbJ3dlYm5hbWUnXSk7Pz4gLyBSZWNoYXJnZSBJbnZvaWNlIE5vLiAjPD9waHAgZWNobyAkb3JkZXJfaWQ7Pz48L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGQgY2xhc3M9J3RleHQtd2hpdGUnPk1vYmlsZSBOdW1iZXIgOiA8P3BocCBlY2hvICRfUE9TVFsnbnVtYmVyJ107Pz48L3RkPg0KPC90cj4NCjx0cj4NCjx0ZCBjbGFzcz0ndGV4dC13aGl0ZSc+T3BlcmF0b3IgTmFtZSA6IDw/cGhwIGVjaG8gdWN3b3JkcyhHZXRfT3BlcmF0b3IoJF9QT1NUWydvcGVyYXRvciddKSk7Pz48L3RkPg0KPC90cj4NCjx0cj4NCjx0ZCBjbGFzcz0ndGV4dC13aGl0ZSc+UmVjaGFyZ2UgQW1vdW50IDogPD9waHAgZWNobyAkX1BPU1RbJ2Ftb3VudCddOz8+PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQgY2xhc3M9J3RleHQtd2hpdGUnPlJlY2hhcmdlIFJlZiBJRCA6IDw/cGhwIGVjaG8gdWN3b3JkcygkanNvbl9vYmpbJ29wZXJhdG9yaWQnXSk7Pz48L3RkPg0KPC90cj4NCjx0cj4NCjx0ZCBjbGFzcz0ndGV4dC13aGl0ZSc+UmVjaGFyZ2Ugc3RhdHVzIDogPD9waHAgZWNobyB1Y3dvcmRzKCRqc29uX29ialsnc3RhdHVzJ10pOz8+PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQgY2xhc3M9J3RleHQtd2hpdGUnPjxpPlRoaXMgaXMgY29tcHV0ZXIgZ2VuZXJhdGVkIEludm9pY2UsIG5vIHNpZ25hdHVyZSByZXF1aXJlZC48L2k+PC90ZD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1pbmZvIGJ0bi1zbSIgb25jbGljaz0icHJpbnREaXYoKSI+UHJpbnQgUmVjZWlwdDwvYnV0dG9uPg0KPD9waHANCn1lbHNlew0KPz4NCjx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQiPg0KPHRoZWFkPg0KPHRyPg0KPHRoIGNsYXNzPSd0ZXh0LXByaW1hcnknPk9wZXJhdG9yPC90aD4NCjx0aCBjbGFzcz0ndGV4dC1wcmltYXJ5Jz5Db21taXNzaW9uPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRkIGNsYXNzPSd0ZXh0LXByaW1hcnknPkFpcnRlbDwvdGQ+DQo8dGQ+PGkgc3R5bGU9ImNvbG9yOkdyZWVuO2Rpc3BsYXk6YmxvY2siPjxiPjw/cGhwIGVjaG8gc3RydG91cHBlcigkdXNlcmRhdGFbJ2FpcnRlbCddKTs/PjwvYj4lPC9pPjwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkIGNsYXNzPSd0ZXh0LXByaW1hcnknPklkZWE8L3RkPg0KPHRkPjxpIHN0eWxlPSJjb2xvcjpHcmVlbjtkaXNwbGF5OmJsb2NrIj48Yj48P3BocCBlY2hvIHN0cnRvdXBwZXIoJHVzZXJkYXRhWydpZGVhJ10pOz8+PC9iPiU8L2k+PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQgY2xhc3M9J3RleHQtcHJpbWFyeSc+Vm9kYWZvbmU8L3RkPg0KPHRkPjxpIHN0eWxlPSJjb2xvcjpHcmVlbjtkaXNwbGF5OmJsb2NrIj48Yj48P3BocCBlY2hvIHN0cnRvdXBwZXIoJHVzZXJkYXRhWyd2b2RhZm9uZSddKTs/PjwvYj4lPC9pPjwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkIGNsYXNzPSd0ZXh0LXByaW1hcnknPlJlbGlhbmNlIEppbzwvdGQ+DQo8dGQ+PGkgc3R5bGU9ImNvbG9yOkdyZWVuO2Rpc3BsYXk6YmxvY2siPjxiPjw/cGhwIGVjaG8gc3RydG91cHBlcigkdXNlcmRhdGFbJ2ppbyddKTs/PjwvYj4lPC9pPjwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkIGNsYXNzPSd0ZXh0LXByaW1hcnknPkJTTkwgU3BlY2lhbDwvdGQ+DQo8dGQ+PGkgc3R5bGU9ImNvbG9yOkdyZWVuO2Rpc3BsYXk6YmxvY2siPjxiPjw/cGhwIGVjaG8gc3RydG91cHBlcigkdXNlcmRhdGFbJ2Jzbmxfc3BlY2lhbCddKTs/PjwvYj4lPC9pPjwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkIGNsYXNzPSd0ZXh0LXByaW1hcnknPkJTTkwgVG9wdXA8L3RkPg0KPHRkPjxpIHN0eWxlPSJjb2xvcjpHcmVlbjtkaXNwbGF5OmJsb2NrIj48Yj48P3BocCBlY2hvIHN0cnRvdXBwZXIoJHVzZXJkYXRhWydic25sX3RvcHVwJ10pOz8+PC9iPiU8L2k+PC90ZD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjw/cGhwDQp9DQo/Pg0KCQkJCSANCgkJCQkgDQoJCQkJIDwvZGl2PiANCgkJCQkgIDwvZGl2PiANCgkJCSAgIA0KCQkJICAgDQogICAgICAgICAgICA8IS0tZGl2IGNsYXNzPSJ0YWJsZS1yZXNwb25zaXZlIj4NCiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIiBpZD0iZGF0YVRhYmxlIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiPg0KICAgICAgICAgICAgICAgICAgPHRoZWFkPg0KICAgICAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSdkaXNwbGF5Om5vbmU7Jz5TTCBOby48L3RoPg0KICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ndGV4dC1wcmltYXJ5Jz5PUkRFUiBJRDwvdGg+DQogICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSd0ZXh0LXByaW1hcnknPk5VTUJFUjwvdGg+DQogICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSd0ZXh0LXByaW1hcnknPk9QRVJBVE9SPC90aD4NCiAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9J3RleHQtcHJpbWFyeSc+QU1PVU5UPC90aD4NCiAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9J3RleHQtcHJpbWFyeSc+QkFMQU5DRTwvdGg+DQogICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSd0ZXh0LXByaW1hcnknPlJFRiBJRDwvdGg+DQogICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSd0ZXh0LXByaW1hcnknPlJFU1BPTlNFPC90aD4NCiAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9J3RleHQtcHJpbWFyeSc+c3RhdHVzPC90aD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+DQogICAgICAgICAgICAgICAgICA8dGJvZHk+DQo8P3BocA0KJHN0bXQgPSAkY29ubi0+cHJlcGFyZSgic2VsZWN0ICogZnJvbSByZWNoYXJnZXMgV0hFUkUgdXNlcl9pZD0/IEFORCB3ZWJfdXJsPSciLiRfU0VSVkVSWydTRVJWRVJfTkFNRSddLiInIE9SREVSIEJZIGBpZGAgREVTQyIpOw0KJHN0bXQtPmV4ZWN1dGUoWyR1c2VyZGF0YVsnaWQnXV0pOw0KJHNsPTE7DQp3aGlsZSgkcm93PSRzdG10LT5mZXRjaCgpKSB7DQoNCiR1cnNxbCA9ICRjb25uLT5wcmVwYXJlKCJzZWxlY3QgKiBmcm9tIGxvZ2ludXNlcnMgV0hFUkUgdXNlcm5hbWUgPSA/Iik7DQokdXJzcWwtPmV4ZWN1dGUoWyRyb3dbJ3VzZXJfaWQnXV0pOw0KJHVzZV9kYXRhPSR1cnNxbC0+ZmV0Y2goKTsNCiRtYXJnaW4gPSAkcm93WydhbW91bnQnXSAtICRyb3dbJ2RlYml0X2FtdCddOw0KICBlY2hvICI8dHI+DQogICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSdkaXNwbGF5Om5vbmU7Jz4iLiRzbC4iPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9J3RleHQtcHJpbWFyeSc+IyIuJHJvd1snb3JkZXJfaWQnXS4iPGJyPiIuc3RydG91cHBlcigkcm93WydkYXRlX3RpbWUnXSkuIjwvdGQ+DQoJCQkJCSAgPHRkIHN0eWxlPSdmb250LXNpemU6MTNweCcgY2xhc3M9J3RleHQtcHJpbWFyeSc+Ii5zdHJ0b3VwcGVyKCRyb3dbJ251bWJlciddKS4iPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9J2ZvbnQtc2l6ZToxM3B4JyBjbGFzcz0ndGV4dC1wcmltYXJ5Jz48Yj4iLnN0cnRvdXBwZXIoJHJvd1snb3BlcmF0b3InXSkuIjwvYj48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YiBzdHlsZT0nZm9udC1zaXplOjEzcHgnIGNsYXNzPSd0ZXh0LXByaW1hcnknPkFtdCBScy4iLnN0cnRvdXBwZXIoJHJvd1snYW1vdW50J10pLiI8YnI+RGViaXQgUnMuIi5zdHJ0b3VwcGVyKCRyb3dbJ2RlYml0X2FtdCddKS4iPGJyPlByb2ZpdCBScy4iLiRtYXJnaW4uIjwvYj48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ndGV4dC1wcmltYXJ5Jz5Scy4iLiRyb3dbJ2JhbGFuY2UnXS4iPC90ZD4gDQoJCQkJCSAgPHRkIGNsYXNzPSd0ZXh0LXByaW1hcnknIHN0eWxlPSdmb250LXNpemU6MTNweCc+Ii5zdHJ0b3VwcGVyKCRyb3dbJ3JlZl9pZCddKS4iPC90ZD4gDQoJCQkJCSAgPHRkIGNsYXNzPSd0ZXh0LXByaW1hcnknIHN0eWxlPSdmb250LXNpemU6MTNweCc+Ii51Y3dvcmRzKCRyb3dbJ3JlbWFyayddKS4iPC90ZD4gDQogICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSd0ZXh0LXByaW1hcnknPjxiPiIuc3RydG91cHBlcigkcm93WydzdGF0dXMnXSkuIjwvYj48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgIDwvdHI+IjsNCgkJCQkJDQoNCgkJICAgIA0KJHNsKys7fQkJCQkJCQkNCj8+CQkJCQkNCiAgICAgICAgICAgICAgICAgIDwvdGJvZHk+DQogICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgICAgPC9kaXYtLT4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgIDwvZGl2Pg0KCSAgDQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8IS0tIC8uY29udGFpbmVyLWZsdWlkIC0tPg0KICAgICAgPCEtLSBFbmQgb2YgTWFpbiBDb250ZW50IC0tPg0KPD9waHANCnJlcXVpcmVfb25jZSgnLi4vZGF0YWJhc2UvZm9vdGVyLnBocCcpOw0KPz4=")); ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 0455e258b11fcbd516f99f6c32dab2e0
Eval Count 1
Decode Time 97 ms