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("Pz4=").base64_decode("PD9waHAKJGFkZG9uX3BhdGg9Ii4uLy4uLyI7CmluY2..
Decoded Output download
b'?>'b'<?php
$addon_path="../../";
include $addon_path."includes/start_ajax.php";
if($_REQUEST["total_amount"]>0)
{
$_REQUEST["cents_1"] = 0;
$_REQUEST["cents_5"] = 0;
$_REQUEST["cents_10"] = 0;
$_REQUEST["cents_20"] = 0;
$_REQUEST["cents_50"] = 0;
$_REQUEST["rm_1"] = 0;
$_REQUEST["rm_5"] = 0;
$_REQUEST["rm_10"] = 0;
$_REQUEST["rm_20"] = 0;
$_REQUEST["rm_50"] = 0;
$_REQUEST["rm_100"] = 0;
}
function mon_render_number_picker($vfield,$vtype,$vlabel)
{
global $mode_button_event;
echo "<div id=\'num_picker_".$vfield."\' style=\'opacity:0.98;z-index:2000;top:50px;width:500px;left:30%;visibility:hidden;border-radius:20px;position:absolute;padding:10px;border:0px solid #000000;background:#222222;color:#eeeeee;\' >";
echo "<div style=\'color:#fff;background:none;padding:8px;font-size:50px;\' >".$vlabel."</div>";
echo "<div id=\'num_picker_preview_".$vfield."\' style=\'background:none;float:left;padding:8px;font-size:40px;\' ></div>";
echo "<table cellpadding=0 align=right >";
echo "<tr>";
for($num=1;$num<=3;$num++)
{
echo "<td>";
echo "<div class=\'touch_box_quantity\' style=\'background:#000;border:1px solid #000;opacity:100;\' ";
echo " ".$mode_button_event."=\"document.closingform.".$vfield.".value = document.closingform.".$vfield.".value + \'".$num."\'; document.getElementById(\'num_picker_preview_".$vfield."\').innerHTML = document.closingform.".$vfield.".value ;\" ";
echo " >";
echo "".$num."";
echo "</div>";
echo "</td>";
}
echo "</tr>";
echo "<tr>";
for($num=4;$num<=6;$num++)
{
echo "<td>";
echo "<div class=\'touch_box_quantity\' style=\'background:#000;border:1px solid #000;opacity:100;\' ";
echo " ".$mode_button_event."=\"document.closingform.".$vfield.".value = document.closingform.".$vfield.".value + \'".$num."\'; document.getElementById(\'num_picker_preview_".$vfield."\').innerHTML = document.closingform.".$vfield.".value ;\" ";
echo " >";
echo "".$num."";
echo "</div>";
echo "</td>";
}
echo "</tr>";
echo "<tr>";
for($num=7;$num<=9;$num++)
{
echo "<td>";
echo "<div class=\'touch_box_quantity\' style=\'background:#000;border:1px solid #000;opacity:100;\' ";
echo " ".$mode_button_event."=\"document.closingform.".$vfield.".value = document.closingform.".$vfield.".value + \'".$num."\'; document.getElementById(\'num_picker_preview_".$vfield."\').innerHTML = document.closingform.".$vfield.".value ;\" ";
echo " >";
echo "".$num."";
echo "</div>";
echo "</td>";
}
echo "</tr>";
echo "<tr>";
echo "<td>";
if($vtype=="F")
{
$num=".";
echo "<div class=\'touch_box_quantity\' style=\'background:#000;border:1px solid #000;opacity:100;\' ";
echo " ".$mode_button_event."=\"document.closingform.".$vfield.".value = document.closingform.".$vfield.".value + \'".$num."\'; document.getElementById(\'num_picker_preview_".$vfield."\').innerHTML = document.closingform.".$vfield.".value ;\" ";
echo " >";
echo "".$num."";
echo "</div>";
}
echo "</td>";
echo "<td>";
$num=0;
echo "<div class=\'touch_box_quantity\' style=\'background:#000;border:1px solid #000;opacity:100;\' ";
echo " ".$mode_button_event."=\"document.closingform.".$vfield.".value = document.closingform.".$vfield.".value + \'".$num."\'; document.getElementById(\'num_picker_preview_".$vfield."\').innerHTML = document.closingform.".$vfield.".value ;\" ";
echo " >";
echo "".$num."";
echo "</div>";
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
echo "<div class=\'touch_box_quantity\' style=\'background:#E74C3C;border:1px solid #E74C3C;opacity:100;\' ";
echo " ".$mode_button_event."=\"document.closingform.".$vfield.".value = \'\' ;document.getElementById(\'num_picker_preview_".$vfield."\').innerHTML=\'\';\" ";
echo " >";
echo "C";
echo "</div>";
echo "</td>";
echo "<td>";
echo "<div class=\'touch_box_quantity\' style=\'background:#27AE60;border:1px solid #27AE60;opacity:100;\' ";
echo " ".$mode_button_event."=\"mon_submit_form(\'closingform\',\'screen/fastcounter/closing.php\',\'window_pop_container\');document.getElementById(\'num_picker_".$vfield."\').style.visibility=\'hidden\';\" ";
echo " >";
echo "OK";
echo "</div>";
echo "</td>";
echo "</tr>";
echo "</table>";
echo "</div>";
}
$total_cash_transaction_balance = 0;
$query_cash_transaction="select sum(tra_amount) as total
from t_".$key_table_prefix."_cash_transaction
where ifnull(tra_batch,\'\') = \'\' ";
$result_cash_transaction = mysql_query($query_cash_transaction);
if($line_cash_transaction = mysql_fetch_array($result_cash_transaction,MYSQL_ASSOC))
{
$total_cash_transaction_balance = $line_cash_transaction["total"]+0;
}
//get unclosed sales:
$query_sales="select *
from t_".$key_table_prefix."_sales
where sal_status = \'PAID\'
and ifnull(sal_closing_batch,\'\') = \'\'
";
$result_sales = mysql_query($query_sales);
while($line_sales = mysql_fetch_array($result_sales,MYSQL_ASSOC))
{
if($line_sales["sal_payment_code"]=="MULTIPLE")
{
for($pmode=1;$pmode<=5;$pmode++)
{
if($line_sales["sal_payment_mode_".$pmode.""]!="")
{
$closing_amount_by_mode[$line_sales["sal_payment_mode_".$pmode.""]] = $closing_amount_by_mode[$line_sales["sal_payment_mode_".$pmode.""]] + $line_sales["sal_payment_mode_".$pmode."_amount"]+0;
}
}
}
else
{
$closing_amount_by_mode[$line_sales["sal_payment_code"]] = $closing_amount_by_mode[$line_sales["sal_payment_code"]] + $line_sales["sal_collection_amount"];
}
$total_bills = $total_bills + 1;
$total_bills_by_person[$line_sales["sal_cashier_name"]] = $total_bills_by_person[$line_sales["sal_cashier_name"]] + 1;
}
//collect all cash mode
$total_sales = 0;
$total_cash_sales = 0;
$total_non_cash_sales = 0;
if(isset($closing_amount_by_mode))
{
foreach($closing_amount_by_mode as $mode_key=>$mode_value)
{
$query_payment_mode="select *
from t_".$key_table_prefix."_payment_mode
where pym_code = \'".$mode_key."\' ";
$result_payment_mode = mysql_query($query_payment_mode);
if($line_payment_mode = mysql_fetch_array($result_payment_mode,MYSQL_ASSOC))
{
if($line_payment_mode["pym_is_cash"]=="YES")
{
$total_cash_sales = $total_cash_sales + $mode_value +0;
}
else
{
$total_non_cash_sales = $total_non_cash_sales + $mode_value +0;
}
$total_sales=$total_sales + $mode_value +0;
}
}
}
/*
echo "<pre>";
print_r($closing_amount_by_mode);
echo "</pre>";
*/
if ($_SERVER[REQUEST_METHOD] == \'POST\') {
//echo $_REQUEST["initial_cash"];
$query_check="select *
from t_".$key_table_prefix."_closing
where cls_status =\'DRAFT\' ";
$result_check = mysql_query($query_check);
if($line_check = mysql_fetch_array($result_check,MYSQL_ASSOC))
{
}
else{
$query_insert=" insert into t_".$key_table_prefix."_closing
(
cls_batch,
cls_status,
created_date,
modified_date,
created_by,
modified_by
)
values
(
\'DRAFT\',
\'DRAFT\',
\'".date("Y-m-d H:i:s")."\',
\'".date("Y-m-d H:i:s")."\',
\'".$CurrentUserID."\',
\'".$CurrentUserID."\'
);
";
$result_insert = mysql_query($query_insert);
}
if($_REQUEST["user_action"]=="CONFIRM_NO_COUNT")
{
$total_cash=0;
}
else
{
$total_cash=0;
if($_REQUEST["total_amount"]>0)
{
$total_cash=$_REQUEST["total_amount"];
}
else
{
$total_cash=$total_cash + ( ($_REQUEST["cents_1"]+0) * 0.01 );
$total_cash=$total_cash + ( ($_REQUEST["cents_5"]+0) * 0.05 );
$total_cash=$total_cash + ( ($_REQUEST["cents_10"]+0) * 0.10 );
$total_cash=$total_cash + ( ($_REQUEST["cents_20"]+0) * 0.20 );
$total_cash=$total_cash + ( ($_REQUEST["cents_50"]+0) * 0.50 );
$total_cash=$total_cash + ( ($_REQUEST["rm_1"]+0) * 1 );
$total_cash=$total_cash + ( ($_REQUEST["rm_5"]+0) * 5 );
$total_cash=$total_cash + ( ($_REQUEST["rm_10"]+0) * 10 );
$total_cash=$total_cash + ( ($_REQUEST["rm_20"]+0) * 20 );
$total_cash=$total_cash + ( ($_REQUEST["rm_50"]+0) * 50 );
$total_cash=$total_cash + ( ($_REQUEST["rm_100"]+0) * 100 );
}
}
if($_REQUEST["user_action"]=="CONFIRM")
{
$this_status="CLOSED";
$this_batch=date("YmdHis");
}
elseif($_REQUEST["user_action"]=="CONFIRM_NO_COUNT")
{
$this_status="CLOSED";
$this_batch=date("YmdHis");
}
else{
$this_status="DRAFT";
}
if($_REQUEST["user_action"]=="CONFIRM_NO_COUNT")
{
$total_different= 0;
$_REQUEST["initial_cash"]=0;
$_REQUEST["cents_1"]=0;
$_REQUEST["cents_5"]=0;
$_REQUEST["cents_10"]=0;
$_REQUEST["cents_20"]=0;
$_REQUEST["cents_50"]=0;
$_REQUEST["rm_1"]=0;
$_REQUEST["rm_5"]=0;
$_REQUEST["rm_10"]=0;
$_REQUEST["rm_20"]=0;
$_REQUEST["rm_50"]=0;
$_REQUEST["rm_100"]=0;
$total_cash=0;
$closing_no_counting="NO_COUNT";
}
else
{
$total_different= $total_cash - ( ($_REQUEST["initial_cash"]+0) + $total_cash_sales + $total_cash_transaction_balance );
}
$query_update="update t_".$key_table_prefix."_closing set
device_code = \'".$sys_system_master_setting_line["set_device_code"]."\',
cls_person = \'".$CurrentUserFullName."\',
cls_batch = \'".$this_batch."\',
cls_initial_cash = \'".($_REQUEST["initial_cash"]+0)."\',
cls_money_cents_1 = \'".($_REQUEST["cents_1"]+0)."\',
cls_money_cents_5 = \'".($_REQUEST["cents_5"]+0)."\',
cls_money_cents_10 = \'".($_REQUEST["cents_10"]+0)."\',
cls_money_cents_20 = \'".($_REQUEST["cents_20"]+0)."\',
cls_money_cents_50 = \'".($_REQUEST["cents_50"]+0)."\',
cls_money_ringgit_1 = \'".($_REQUEST["rm_1"]+0)."\',
cls_money_ringgit_5 = \'".($_REQUEST["rm_5"]+0)."\',
cls_money_ringgit_10 = \'".($_REQUEST["rm_10"]+0)."\',
cls_money_ringgit_20 = \'".($_REQUEST["rm_20"]+0)."\',
cls_money_ringgit_50 = \'".($_REQUEST["rm_50"]+0)."\',
cls_money_ringgit_100 = \'".($_REQUEST["rm_100"]+0)."\',
cls_cash_transaction_balance = \'".($total_cash_transaction_balance+0)."\',
cls_closing_cash = \'".($total_cash+0)."\',
cls_total_sales = \'".($total_sales+0)."\',
cls_total_sales_cash = \'".($total_cash_sales+0)."\',
cls_total_sales_non_cash = \'".($total_non_cash_sales+0)."\', ";
$pmode=1;
if(isset($closing_amount_by_mode))
{
foreach($closing_amount_by_mode as $mode_key=>$mode_value)
{
$query_update=$query_update." cls_mode_".$pmode." = \'".$mode_key."\', ";
$query_update=$query_update." cls_mode_".$pmode."_amount = \'".($mode_value+0)."\', ";
$pmode++;
}
}
$query_update=$query_update."
cls_total_different=\'".($total_different+0)."\',
cls_no_count =\'".$closing_no_counting."\',
cls_status =\'".$this_status."\'
where cls_status=\'DRAFT\' ; ";
$result_update = mysql_query($query_update) or die("Error0").mysql_error();
if(($_REQUEST["user_action"]=="CONFIRM")or($_REQUEST["user_action"]=="CONFIRM_NO_COUNT"))
{
$query_update="update t_".$key_table_prefix."_sales
set sal_closing_batch = \'".$this_batch."\',
modified_by =\'".$CurrentUserID."\',
modified_date =\'".date("Y-m-d H:i:s")."\'
where (sal_status = \'PAID\' or sal_status = \'REJECTED\')
and ifnull(sal_closing_batch,\'\') =\'\'
";
$result_update = mysql_query($query_update) or die("Error1").mysql_error();
$query_update="update t_".$key_table_prefix."_cash_transaction
set tra_batch = \'".$this_batch."\'
where ifnull(tra_batch,\'\') =\'\'
";
$result_update = mysql_query($query_update) or die("Error2").mysql_error();
if($sys_printing_switch)
{
include "print_closing.php";
}
}
}
//echo $_REQUEST["initial_cash"];
$query_check="select *
from t_".$key_table_prefix."_closing
where cls_status =\'DRAFT\' ";
$result_check = mysql_query($query_check);
if($line_check = mysql_fetch_array($result_check,MYSQL_ASSOC))
{
$_REQUEST["initial_cash"] = $line_check["cls_initial_cash"] +0 ;
$_REQUEST["cents_1"] = $line_check["cls_money_cents_1"]+0;
$_REQUEST["cents_5"] = $line_check["cls_money_cents_5"]+0;
$_REQUEST["cents_10"] = $line_check["cls_money_cents_10"]+0;
$_REQUEST["cents_20"] = $line_check["cls_money_cents_20"]+0;
$_REQUEST["cents_50"] = $line_check["cls_money_cents_50"]+0;
$_REQUEST["rm_1"] = $line_check["cls_money_ringgit_1"]+0;
$_REQUEST["rm_5"] = $line_check["cls_money_ringgit_5"]+0;
$_REQUEST["rm_10"] = $line_check["cls_money_ringgit_10"]+0;
$_REQUEST["rm_20"] = $line_check["cls_money_ringgit_20"]+0;
$_REQUEST["rm_50"] = $line_check["cls_money_ringgit_50"]+0;
$_REQUEST["rm_100"] = $line_check["cls_money_ringgit_100"]+0;
}
echo "<table width=100% border=0 cellpadding=1 >";
echo "<tr>";
echo "<td valign=top >";
echo "<div class=\'fa-stack fa-lg\' >";
echo \'<i class="fa fa-circle fa-stack-2x" style="color:#000;" ></i><i class="fa fa-trophy fa-stack-1x" ></i>\';
echo "</div>";
echo "<font style=\'font-size:30px;\'><b>Cashier Closing </b></font><br>";
echo "</td>";
echo "<td valign=top >";
echo "<div style=\'float:right;cursor:pointer;\' class=\'fa-stack fa-lg\' ".$mode_button_event."=\"mon_send_get(\'screen/fastcounter/main.php\',\'div_content\');mon_hide_object(document.getElementById(\'window_pop\'));document.getElementById(\'window_pop_container\').innerHTML=\'\';\" >";
echo \'<i class="fa fa-circle fa-stack-2x" style="color:#E74C3C;" ></i><i class="fa fa-times fa-stack-1x"></i>\';
echo "</div>";
echo "</td>";
echo "</tr>";
echo "</table>";
echo "<form name=\'closingform\' action=\'return false\' >";
echo "<table cellpadding=5 width=90% border=0>";
echo "<tr>";
echo "<td>";
//echo "Initial Cash Amount in Drawer: ";
echo "</td>";
echo "<td width=200 >";
$_REQUEST["initial_cash"]=0;
echo "<input type=hidden class=textbox_m name=\'initial_cash\' value=\'".$_REQUEST["initial_cash"]."\'
onfocus=blur()
>";
//onclick=\"this.value=\'\';document.getElementById(\'num_picker_initial_cash\').style.visibility=\'visible\';\"
//mon_render_number_picker(\'initial_cash\',\'F\',\'Initial Cash\');
echo "</td>";
echo "</tr>";
/*
echo "<tr>";
echo "<td>";
echo "Total Sales for this Session: ";
echo "</td>";
echo "<td >";
echo "RM <b>".$total_sales."</b>";
echo " ( ".$total_bills." Bills )";
echo "</td>";
echo "</tr>";
*/
echo "<tr>";
echo "<td valign=top >";
echo "Total Cash Counted during Closing: <font color=#ff000 >(Exclude Floating)</font> ";
echo "<table border=0 >";
echo "<tr>";
echo "<td valign=top >";
if($_REQUEST["total_amount"]>0)
{
echo "<table style=\'border:2px solid #555;border-radius:10px;\' cellpadding=5 width=350>";
}
else
{
echo "<table style=\'border:2px solid #E74C3C;border-radius:10px;\' cellpadding=5 width=350>";
}
echo "<tr>";
echo "<td width=80 >RM 1";
echo "</td>";
echo "<td>";
echo "x <input style=\'font-size:20px;text-align:center\' type=text class=textbox_s name=\'rm_1\' value=\'".$_REQUEST["rm_1"]."\'
onfocus=blur() onclick=\"this.value=\'\';document.getElementById(\'num_picker_rm_1\').style.visibility=\'visible\';\"
>";
mon_render_number_picker(\'rm_1\',\'D\',\'RM 1\');
echo "</td>";
echo "<td width=120 >";
echo " = <font color=#2ECC71>RM ".number_format(($_REQUEST["rm_1"]*1),2,".",",");
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>RM 5";
echo "</td>";
echo "<td>";
echo "x <input style=\'font-size:20px;text-align:center\' type=text class=textbox_s name=\'rm_5\' value=\'".$_REQUEST["rm_5"]."\'
onfocus=blur() onclick=\"this.value=\'\';document.getElementById(\'num_picker_rm_5\').style.visibility=\'visible\';\"
>";
mon_render_number_picker(\'rm_5\',\'D\',\'RM 5\');
echo "</td>";
echo "<td width=120 >";
echo " = <font color=#2ECC71>RM ".number_format(($_REQUEST["rm_5"]*5),2,".",",");
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>RM 10";
echo "</td>";
echo "<td>";
echo "x <input style=\'font-size:20px;text-align:center\' type=text class=textbox_s name=\'rm_10\' value=\'".$_REQUEST["rm_10"]."\'
onfocus=blur() onclick=\"this.value=\'\';document.getElementById(\'num_picker_rm_10\').style.visibility=\'visible\';\"
>";
mon_render_number_picker(\'rm_10\',\'D\',\'RM 10\');
echo "</td>";
echo "<td width=120 >";
echo " = <font color=#2ECC71>RM ".number_format(($_REQUEST["rm_10"]*10),2,".",",");
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>RM 20";
echo "</td>";
echo "<td>";
echo "x <input style=\'font-size:20px;text-align:center\' type=text class=textbox_s name=\'rm_20\' value=\'".$_REQUEST["rm_20"]."\'
onfocus=blur() onclick=\"this.value=\'\';document.getElementById(\'num_picker_rm_20\').style.visibility=\'visible\';\"
>";
mon_render_number_picker(\'rm_20\',\'D\',\'RM 20\');
echo "</td>";
echo "<td width=120 >";
echo " = <font color=#2ECC71>RM ".number_format(($_REQUEST["rm_20"]*20),2,".",",");
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>RM 50";
echo "</td>";
echo "<td>";
echo "x <input style=\'font-size:20px;text-align:center\' type=text class=textbox_s name=\'rm_50\' value=\'".$_REQUEST["rm_50"]."\'
onfocus=blur() onclick=\"this.value=\'\';document.getElementById(\'num_picker_rm_50\').style.visibility=\'visible\';\"
>";
mon_render_number_picker(\'rm_50\',\'D\',\'RM 50\');
echo "</td>";
echo "<td width=120 >";
echo " = <font color=#2ECC71>RM ".number_format(($_REQUEST["rm_50"]*50),2,".",",");
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>RM 100";
echo "</td>";
echo "<td>";
echo "x <input style=\'font-size:20px;text-align:center\' type=text class=textbox_s name=\'rm_100\' value=\'".$_REQUEST["rm_100"]."\'
onfocus=blur() onclick=\"this.value=\'\';document.getElementById(\'num_picker_rm_100\').style.visibility=\'visible\';\"
>";
mon_render_number_picker(\'rm_100\',\'D\',\'RM 100\');
echo "</td>";
echo "<td width=120 >";
echo " = <font color=#2ECC71>RM ".number_format(($_REQUEST["rm_100"]*100),2,".",",")."</font>";
echo "</td>";
echo "</tr>";
echo "</table>";
echo "</td><td valign=top >";
if($_REQUEST["total_amount"]>0)
{
echo "<table style=\'border:2px solid #555;border-radius:10px;\' cellpadding=5 width=350>";
}
else
{
echo "<table style=\'border:2px solid #E74C3C;border-radius:10px;\' cellpadding=5 width=350>";
}
echo "<tr>";
echo "<td width=80 >1 cents";
echo "</td>";
echo "<td>";
echo "x <input style=\'font-size:20px;text-align:center\' type=text class=textbox_s name=\'cents_1\' value=\'".$_REQUEST["cents_1"]."\'
onfocus=blur() onclick=\"this.value=\'\';document.getElementById(\'num_picker_cents_1\').style.visibility=\'visible\';\"
>";
mon_render_number_picker(\'cents_1\',\'D\',\'1 Cent\');
echo "</td>";
echo "<td width=120 >";
echo " = <font color=#2ECC71>RM ".number_format(($_REQUEST["cents_1"]*0.01),2,".",",");
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>5 cents";
echo "</td>";
echo "<td>";
echo "x <input style=\'font-size:20px;text-align:center\' type=text class=textbox_s name=\'cents_5\' value=\'".$_REQUEST["cents_5"]."\'
onfocus=blur() onclick=\"this.value=\'\';document.getElementById(\'num_picker_cents_5\').style.visibility=\'visible\';\"
>";
mon_render_number_picker(\'cents_5\',\'D\',\'5 Cents\');
echo "</td>";
echo "<td width=120 >";
echo " = <font color=#2ECC71>RM ".number_format(($_REQUEST["cents_5"]*0.05),2,".",",");
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>10 cents";
echo "</td>";
echo "<td>";
echo "x <input style=\'font-size:20px;text-align:center\' type=text class=textbox_s name=\'cents_10\' value=\'".$_REQUEST["cents_10"]."\'
onfocus=blur() onclick=\"this.value=\'\';document.getElementById(\'num_picker_cents_10\').style.visibility=\'visible\';\"
>";
mon_render_number_picker(\'cents_10\',\'D\',\'10 Cents\');
echo "</td>";
echo "<td width=120 >";
echo " = <font color=#2ECC71>RM ".number_format(($_REQUEST["cents_10"]*0.1),2,".",",");
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>20 cents";
echo "</td>";
echo "<td>";
echo "x <input style=\'font-size:20px;text-align:center\' type=text class=textbox_s name=\'cents_20\' value=\'".$_REQUEST["cents_20"]."\'
onfocus=blur() onclick=\"this.value=\'\';document.getElementById(\'num_picker_cents_20\').style.visibility=\'visible\';\"
>";
mon_render_number_picker(\'cents_20\',\'D\',\'20 Cents\');
echo "</td>";
echo "<td width=120 >";
echo " = <font color=#2ECC71>RM ".number_format(($_REQUEST["cents_20"]*0.2),2,".",",");
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>50 cents";
echo "</td>";
echo "<td>";
echo "x <input style=\'font-size:20px;text-align:center\' type=text class=textbox_s name=\'cents_50\' value=\'".$_REQUEST["cents_50"]."\'
onfocus=blur() onclick=\"this.value=\'\';document.getElementById(\'num_picker_cents_50\').style.visibility=\'visible\';\"
>";
mon_render_number_picker(\'cents_50\',\'D\',\'50 Cents\');
echo "</td>";
echo "<td width=120 >";
echo " = <font color=#2ECC71>RM ".number_format(($_REQUEST["cents_50"]*0.5),2,".",",");
echo "</td>";
echo "</tr>";
echo "</table>";
echo "</td><td valign=top width=80 align=center >";
echo "<br><br>OR<br>";
echo "</td><td valign=top >";
if($_REQUEST["total_amount"]>0)
{
echo "<table style=\'border:2px solid #E74C3C;border-radius:10px;\' cellpadding=5 width=10>";
}
else
{
echo "<table style=\'border:2px solid #555;border-radius:10px;\' cellpadding=5 width=10>";
}
echo "<tr>";
echo "<td align=center><br>Total Amount";
echo "<br><input style=\'font-size:20px;text-align:center\' type=text class=textbox_m name=\'total_amount\' value=\'".$_REQUEST["total_amount"]."\'
onfocus=blur() onclick=\"this.value=\'\';document.getElementById(\'num_picker_total_amount\').style.visibility=\'visible\';\"
>";
mon_render_number_picker(\'total_amount\',\'F\',\'Total Amount\');
// echo " = <font color=#2ECC71>RM ".number_format(($_REQUEST["total_amount"]),2,".",",");
echo "<br><br>";
echo "</td>";
echo "</tr>";
echo "</table>";
echo "</td>";
echo "</tr>";
echo "</table>";
if($_REQUEST["total_amount"]>0)
{
$total_cash=$_REQUEST["total_amount"];
}
else
{
$total_cash=0;
$total_cash=$total_cash + ( ($_REQUEST["cents_1"]+0) * 0.01 );
$total_cash=$total_cash + ( ($_REQUEST["cents_5"]+0) * 0.05 );
$total_cash=$total_cash + ( ($_REQUEST["cents_10"]+0) * 0.10 );
$total_cash=$total_cash + ( ($_REQUEST["cents_20"]+0) * 0.20 );
$total_cash=$total_cash + ( ($_REQUEST["cents_50"]+0) * 0.50 );
$total_cash=$total_cash + ( ($_REQUEST["rm_1"]+0) * 1 );
$total_cash=$total_cash + ( ($_REQUEST["rm_5"]+0) * 5 );
$total_cash=$total_cash + ( ($_REQUEST["rm_10"]+0) * 10 );
$total_cash=$total_cash + ( ($_REQUEST["rm_20"]+0) * 20 );
$total_cash=$total_cash + ( ($_REQUEST["rm_50"]+0) * 50 );
$total_cash=$total_cash + ( ($_REQUEST["rm_100"]+0) * 100 );
}
echo "<br>Total Amount Counted: <font size=8 color=#2ECC71 >RM ".number_format($total_cash+0,2,".",",")."</font><br>";
// echo "<input type=button value=\'Calculate & Save Draft\' class=button_blue onclick=\"mon_submit_form(\'closingform\',\'screen/fastcounter/closing.php\',\'window_pop_container\')\" >";
echo "</td>";
echo "</tr>";
$total_different = $total_cash - ( $_REQUEST["initial_cash"] + $total_sales);
echo "</table>";
//=============================================================================================================================
echo "<hr style=\'border:0px solid #000;border-top:2px solid #2C3E50;\'>";
echo "<input type=hidden name=\'user_action\' value=\'\' >";
echo "<table width=90% cellpadding=10 border=0>";
echo "<tr>";
echo "<td width=180 valign=top >";
$query_unclose="select * from t_".$key_table_prefix."_sales
where sal_status = \'PAID\'
and ifnull(sal_closing_batch,\'\') =\'\'
";
$result_unclose = mysql_query($query_unclose) or die("Error").mysql_error();
if(mysql_num_rows($result_unclose)>0)
{
echo "<font color=#2ECC71 size=2>Total of ".mysql_num_rows($result_unclose)." bill(s) for closing.</font><br>";
echo "<font size=2>";
$query_unclose_grouping = "select
count(sal_id) as total_bills, sal_payment_text
from t_".$key_table_prefix."_sales
where sal_status = \'PAID\'
and ifnull(sal_closing_batch,\'\') =\'\'
group by sal_payment_text
";
$result_unclose_grouping = mysql_query($query_unclose_grouping) or die("Error").mysql_error();
while($line_unclose_grouping = mysql_fetch_array($result_unclose_grouping,MYSQL_ASSOC))
{
echo "<span class=\'fa fa-file-text-o fa-1x\'></span> ".$line_unclose_grouping["sal_payment_text"].": ".$line_unclose_grouping["total_bills"]."<br>";
}
echo "</font>";
echo "</td>";
echo "<td width=180 valign=top >";
echo "<font color=#2ECC71 size=2>Bill(s) Transacted by Person.</font><br>";
echo "<font size=2>";
if(isset($total_bills_by_person))
{
foreach($total_bills_by_person as $person_name => $person_value)
{
echo "<span class=\'fa fa-male fa-1x\'></span> ".$person_name.": ".$person_value."<br>";
}
}
echo "</font>";
echo "</td>";
//===========================================Closing with Counting===================================================
echo "<td align=center >";
echo "<div id=\'div_closing_confirmation\' style=\'text-align:left;margin-top:-200px;z-index:2000;visibility:hidden;position:absolute;right:10%;width:420px;height:200px;background:#34495E;padding:10px;border-radius:10px;\'>";
echo "Confirm Closing with Counting?<br>";
echo "<div class=\'fa-stack fa-2x\' style=\'float:right;\'
".$mode_button_event."=\"document.closingform.user_action.value=\'CONFIRM\';mon_submit_form(\'closingform\',\'screen/fastcounter/closing.php\',\'window_pop_container\');mon_hide_object(document.getElementById(\'window_pop\'));\"
\">";
echo \'<i class="fa fa-circle fa-stack-2x" style="color:#27AE60;" ></i><i class="fa fa-check fa-stack-1x"></i>\';
echo "</div>";
echo "<div class=\'fa-stack fa-2x\' style=\'float:right;\'
".$mode_button_event."=\"document.getElementById(\'div_closing_confirmation\').style.visibility=\'hidden\'; \"
>";
echo \'<i class="fa fa-circle fa-stack-2x" style="color:#E74C3C;" ></i><i class="fa fa-times fa-stack-1x"></i>\';
echo "</div>";
echo "</div>";
echo "<div class=\'fa-stack fa-lg\'
".$mode_button_event."=\"document.getElementById(\'div_closing_confirmation\').style.visibility=\'visible\'; \"
>";
echo \'<i class="fa fa-circle fa-stack-2x" style="color:#27AE60;" ></i><i class="fa fa-check fa-stack-1x"></i>\';
echo "</div>";
echo "<br>";
echo "<font size=2>Close with Money Counting</font>";
echo "</td>";
//===========================================Closing without Counting===================================================
echo "<td align=center >";
echo "<div id=\'div_closing_confirmation_no_count\' style=\'text-align:left;margin-top:-200px;z-index:2000;visibility:hidden;position:absolute;right:10%;width:420px;height:200px;background:#34495E;padding:10px;border-radius:10px;\'>";
echo "Confirm Closing and Count Later?<br>";
echo "<div class=\'fa-stack fa-2x\' style=\'float:right;\'
".$mode_button_event."=\"document.closingform.user_action.value=\'CONFIRM_NO_COUNT\';mon_submit_form(\'closingform\',\'screen/fastcounter/closing.php\',\'window_pop_container\');mon_hide_object(document.getElementById(\'window_pop\'));\"
\">";
echo \'<i class="fa fa-circle fa-stack-2x" style="color:#F39C12;" ></i><i class="fa fa-check fa-stack-1x"></i>\';
echo "</div>";
echo "<div class=\'fa-stack fa-2x\' style=\'float:right;\'
".$mode_button_event."=\"document.getElementById(\'div_closing_confirmation_no_count\').style.visibility=\'hidden\'; \"
>";
echo \'<i class="fa fa-circle fa-stack-2x" style="color:#E74C3C;" ></i><i class="fa fa-times fa-stack-1x"></i>\';
echo "</div>";
echo "</div>";
echo "<div class=\'fa-stack fa-lg\'
".$mode_button_event."=\"document.getElementById(\'div_closing_confirmation_no_count\').style.visibility=\'visible\'; \"
>";
echo \'<i class="fa fa-circle fa-stack-2x" style="color:#F39C12;" ></i><i class="fa fa-check fa-stack-1x"></i>\';
echo "</div>";
echo "<br>";
echo "<font size=2>Close but Count Later</font>";
echo "</td>";
}
else{
echo "<div style=\'background:#E74C3C;border-radius:10px;padding:20px;width:300px;\' id=\'pay_error_message\'>";
echo "No Unclose Bill(s)";
echo "</div>";
}
echo "</td>";
echo "</tr>";
echo "</table>";
// echo "<input type=button value=\'Confirm Closing\' class=button_blue onclick=\"document.closingform.user_action.value=\'CONFIRM\';mon_hide_object(document.getElementById(\'window_pop\'));mon_submit_form(\'closingform\',\'screen/fastcounter/closing.php\',\'window_pop_container\')\" >";
// echo " <input type=button value=\'Close Window\' class=button_red onclick=\"mon_send_get(\'screen/fastcounter/main.php\',\'div_content\');mon_hide_object(document.getElementById(\'window_pop\'));\" >";
echo "</form>";
$addon_path="../../";
include $addon_path."includes/end_ajax.php";
?>'
Did this file decode correctly?
Original Code
<?php eval(base64_decode("Pz4=").base64_decode("PD9waHAKJGFkZG9uX3BhdGg9Ii4uLy4uLyI7CmluY2x1ZGUgJGFkZG9uX3BhdGguImluY2x1ZGVzL3N0YXJ0X2FqYXgucGhwIjsKCgppZigkX1JFUVVFU1RbInRvdGFsX2Ftb3VudCJdPjApCnsKICAgICAgICRfUkVRVUVTVFsiY2VudHNfMSJdID0gMDsKICAgICAgICRfUkVRVUVTVFsiY2VudHNfNSJdID0gMDsKICAgICAgICRfUkVRVUVTVFsiY2VudHNfMTAiXSA9IDA7CiAgICAgICAkX1JFUVVFU1RbImNlbnRzXzIwIl0gPSAwOwogICAgICAgJF9SRVFVRVNUWyJjZW50c181MCJdID0gMDsKICAgICAgICRfUkVRVUVTVFsicm1fMSJdID0gMDsKICAgICAgICRfUkVRVUVTVFsicm1fNSJdID0gMDsKICAgICAgICRfUkVRVUVTVFsicm1fMTAiXSA9IDA7CiAgICAgICAkX1JFUVVFU1RbInJtXzIwIl0gPSAwOwogICAgICAgJF9SRVFVRVNUWyJybV81MCJdID0gMDsKICAgICAgICRfUkVRVUVTVFsicm1fMTAwIl0gPSAwOwogICAgICAgCiAgICAgICAgICAKICAgIAp9CgpmdW5jdGlvbiAgbW9uX3JlbmRlcl9udW1iZXJfcGlja2VyKCR2ZmllbGQsJHZ0eXBlLCR2bGFiZWwpCnsKCiAgICBnbG9iYWwgJG1vZGVfYnV0dG9uX2V2ZW50OwoKICAgIGVjaG8gIjxkaXYgaWQ9J251bV9waWNrZXJfIi4kdmZpZWxkLiInIHN0eWxlPSdvcGFjaXR5OjAuOTg7ei1pbmRleDoyMDAwO3RvcDo1MHB4O3dpZHRoOjUwMHB4O2xlZnQ6MzAlO3Zpc2liaWxpdHk6aGlkZGVuO2JvcmRlci1yYWRpdXM6MjBweDtwb3NpdGlvbjphYnNvbHV0ZTtwYWRkaW5nOjEwcHg7Ym9yZGVyOjBweCBzb2xpZCAjMDAwMDAwO2JhY2tncm91bmQ6IzIyMjIyMjtjb2xvcjojZWVlZWVlOycgPiI7CgoKICAgICAgICAgIGVjaG8gIjxkaXYgc3R5bGU9J2NvbG9yOiNmZmY7YmFja2dyb3VuZDpub25lO3BhZGRpbmc6OHB4O2ZvbnQtc2l6ZTo1MHB4OycgPiIuJHZsYWJlbC4iPC9kaXY+IjsKICAgICAgICAgIGVjaG8gIjxkaXYgaWQ9J251bV9waWNrZXJfcHJldmlld18iLiR2ZmllbGQuIicgc3R5bGU9J2JhY2tncm91bmQ6bm9uZTtmbG9hdDpsZWZ0O3BhZGRpbmc6OHB4O2ZvbnQtc2l6ZTo0MHB4OycgPjwvZGl2PiI7CgoKICAgICAgICAgIGVjaG8gIjx0YWJsZSBjZWxscGFkZGluZz0wIGFsaWduPXJpZ2h0ID4iOwogICAgICAgICAgICBlY2hvICI8dHI+IjsKCiAgICAgICAgICAgICAgICBmb3IoJG51bT0xOyRudW08PTM7JG51bSsrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0ZD4iOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIjxkaXYgY2xhc3M9J3RvdWNoX2JveF9xdWFudGl0eScgc3R5bGU9J2JhY2tncm91bmQ6IzAwMDtib3JkZXI6MXB4IHNvbGlkICMwMDA7b3BhY2l0eToxMDA7JyAiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiICIuJG1vZGVfYnV0dG9uX2V2ZW50LiI9XCJkb2N1bWVudC5jbG9zaW5nZm9ybS4iLiR2ZmllbGQuIi52YWx1ZSA9IGRvY3VtZW50LmNsb3Npbmdmb3JtLiIuJHZmaWVsZC4iLnZhbHVlICsgJyIuJG51bS4iJzsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ251bV9waWNrZXJfcHJldmlld18iLiR2ZmllbGQuIicpLmlubmVySFRNTCA9IGRvY3VtZW50LmNsb3Npbmdmb3JtLiIuJHZmaWVsZC4iLnZhbHVlIDtcIiAiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiID4iOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIiIuJG51bS4iIjsKICAgICAgICAgICAgICAgICAgICBlY2hvICI8L2Rpdj4iOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+IjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVjaG8gIjwvdHI+IjsKCgogICAgICAgICAgICBlY2hvICI8dHI+IjsKCiAgICAgICAgICAgICAgICBmb3IoJG51bT00OyRudW08PTY7JG51bSsrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0ZD4iOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIjxkaXYgY2xhc3M9J3RvdWNoX2JveF9xdWFudGl0eScgc3R5bGU9J2JhY2tncm91bmQ6IzAwMDtib3JkZXI6MXB4IHNvbGlkICMwMDA7b3BhY2l0eToxMDA7JyAiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiICIuJG1vZGVfYnV0dG9uX2V2ZW50LiI9XCJkb2N1bWVudC5jbG9zaW5nZm9ybS4iLiR2ZmllbGQuIi52YWx1ZSA9IGRvY3VtZW50LmNsb3Npbmdmb3JtLiIuJHZmaWVsZC4iLnZhbHVlICsgJyIuJG51bS4iJzsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ251bV9waWNrZXJfcHJldmlld18iLiR2ZmllbGQuIicpLmlubmVySFRNTCA9IGRvY3VtZW50LmNsb3Npbmdmb3JtLiIuJHZmaWVsZC4iLnZhbHVlIDtcIiAiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiID4iOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIiIuJG51bS4iIjsKICAgICAgICAgICAgICAgICAgICBlY2hvICI8L2Rpdj4iOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+IjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVjaG8gIjwvdHI+IjsKCgogICAgICAgICAgICBlY2hvICI8dHI+IjsKCiAgICAgICAgICAgICAgICBmb3IoJG51bT03OyRudW08PTk7JG51bSsrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0ZD4iOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIjxkaXYgY2xhc3M9J3RvdWNoX2JveF9xdWFudGl0eScgc3R5bGU9J2JhY2tncm91bmQ6IzAwMDtib3JkZXI6MXB4IHNvbGlkICMwMDA7b3BhY2l0eToxMDA7JyAiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiICIuJG1vZGVfYnV0dG9uX2V2ZW50LiI9XCJkb2N1bWVudC5jbG9zaW5nZm9ybS4iLiR2ZmllbGQuIi52YWx1ZSA9IGRvY3VtZW50LmNsb3Npbmdmb3JtLiIuJHZmaWVsZC4iLnZhbHVlICsgJyIuJG51bS4iJzsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ251bV9waWNrZXJfcHJldmlld18iLiR2ZmllbGQuIicpLmlubmVySFRNTCA9IGRvY3VtZW50LmNsb3Npbmdmb3JtLiIuJHZmaWVsZC4iLnZhbHVlIDtcIiAiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiID4iOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIiIuJG51bS4iIjsKICAgICAgICAgICAgICAgICAgICBlY2hvICI8L2Rpdj4iOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+IjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVjaG8gIjwvdHI+IjsKCgogICAgICAgICAgICBlY2hvICI8dHI+IjsKCiAgICAgICAgICAgICAgICBlY2hvICI8dGQ+IjsKICAgICAgICAgICAgICAgICAgICBpZigkdnR5cGU9PSJGIikKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJG51bT0iLiI7CiAgICAgICAgICAgICAgICAgICAgZWNobyAiPGRpdiBjbGFzcz0ndG91Y2hfYm94X3F1YW50aXR5JyBzdHlsZT0nYmFja2dyb3VuZDojMDAwO2JvcmRlcjoxcHggc29saWQgIzAwMDtvcGFjaXR5OjEwMDsnICI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIgIi4kbW9kZV9idXR0b25fZXZlbnQuIj1cImRvY3VtZW50LmNsb3Npbmdmb3JtLiIuJHZmaWVsZC4iLnZhbHVlID0gZG9jdW1lbnQuY2xvc2luZ2Zvcm0uIi4kdmZpZWxkLiIudmFsdWUgKyAnIi4kbnVtLiInOyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbnVtX3BpY2tlcl9wcmV2aWV3XyIuJHZmaWVsZC4iJykuaW5uZXJIVE1MID0gZG9jdW1lbnQuY2xvc2luZ2Zvcm0uIi4kdmZpZWxkLiIudmFsdWUgO1wiICI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIgPiI7CiAgICAgICAgICAgICAgICAgICAgZWNobyAiIi4kbnVtLiIiOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvZGl2PiI7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+IjsKCgogICAgICAgICAgICAgICAgZWNobyAiPHRkPiI7CgogICAgICAgICAgICAgICAgICAgICRudW09MDsKICAgICAgICAgICAgICAgICAgICBlY2hvICI8ZGl2IGNsYXNzPSd0b3VjaF9ib3hfcXVhbnRpdHknIHN0eWxlPSdiYWNrZ3JvdW5kOiMwMDA7Ym9yZGVyOjFweCBzb2xpZCAjMDAwO29wYWNpdHk6MTAwOycgIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiAiLiRtb2RlX2J1dHRvbl9ldmVudC4iPVwiZG9jdW1lbnQuY2xvc2luZ2Zvcm0uIi4kdmZpZWxkLiIudmFsdWUgPSBkb2N1bWVudC5jbG9zaW5nZm9ybS4iLiR2ZmllbGQuIi52YWx1ZSArICciLiRudW0uIic7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdudW1fcGlja2VyX3ByZXZpZXdfIi4kdmZpZWxkLiInKS5pbm5lckhUTUwgPSBkb2N1bWVudC5jbG9zaW5nZm9ybS4iLiR2ZmllbGQuIi52YWx1ZSA7XCIgIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiA+IjsKICAgICAgICAgICAgICAgICAgICBlY2hvICIiLiRudW0uIiI7CiAgICAgICAgICAgICAgICAgICAgZWNobyAiPC9kaXY+IjsKCiAgICAgICAgICAgICAgICBlY2hvICI8L3RkPiI7CiAgICAgICAgICAgIGVjaG8gIjwvdHI+IjsKCgoKICAgICAgICAgICAgZWNobyAiPHRyPiI7CgoKICAgICAgICAgICAgICAgIGVjaG8gIjx0ZD4iOwoKICAgICAgICAgICAgICAgICAgICAgZWNobyAiPGRpdiBjbGFzcz0ndG91Y2hfYm94X3F1YW50aXR5JyBzdHlsZT0nYmFja2dyb3VuZDojRTc0QzNDO2JvcmRlcjoxcHggc29saWQgI0U3NEMzQztvcGFjaXR5OjEwMDsnICI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIgIi4kbW9kZV9idXR0b25fZXZlbnQuIj1cImRvY3VtZW50LmNsb3Npbmdmb3JtLiIuJHZmaWVsZC4iLnZhbHVlID0gJycgO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdudW1fcGlja2VyX3ByZXZpZXdfIi4kdmZpZWxkLiInKS5pbm5lckhUTUw9Jyc7XCIgIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiA+IjsKICAgICAgICAgICAgICAgICAgICBlY2hvICJDIjsKICAgICAgICAgICAgICAgICAgICBlY2hvICI8L2Rpdj4iOwogICAgICAgICAgICAgICAgZWNobyAiPC90ZD4iOwoKCiAgICAgICAgICAgICAgICBlY2hvICI8dGQ+IjsKICAgICAgICAgICAgICAgICAgICBlY2hvICI8ZGl2IGNsYXNzPSd0b3VjaF9ib3hfcXVhbnRpdHknIHN0eWxlPSdiYWNrZ3JvdW5kOiMyN0FFNjA7Ym9yZGVyOjFweCBzb2xpZCAjMjdBRTYwO29wYWNpdHk6MTAwOycgIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiAiLiRtb2RlX2J1dHRvbl9ldmVudC4iPVwibW9uX3N1Ym1pdF9mb3JtKCdjbG9zaW5nZm9ybScsJ3NjcmVlbi9mYXN0Y291bnRlci9jbG9zaW5nLnBocCcsJ3dpbmRvd19wb3BfY29udGFpbmVyJyk7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ251bV9waWNrZXJfIi4kdmZpZWxkLiInKS5zdHlsZS52aXNpYmlsaXR5PSdoaWRkZW4nO1wiICI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIgPiI7CiAgICAgICAgICAgICAgICAgICAgZWNobyAiT0siOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvZGl2PiI7CgogICAgICAgICAgICAgICAgZWNobyAiPC90ZD4iOwoKICAgICAgICAgICAgZWNobyAiPC90cj4iOwoKCiAgICAgICAgZWNobyAiPC90YWJsZT4iOwoKCgoKCgogICAgZWNobyAiPC9kaXY+IjsKCn0KCgoKJHRvdGFsX2Nhc2hfdHJhbnNhY3Rpb25fYmFsYW5jZSA9IDA7CiRxdWVyeV9jYXNoX3RyYW5zYWN0aW9uPSJzZWxlY3Qgc3VtKHRyYV9hbW91bnQpIGFzIHRvdGFsIAogICAgICAgICAgICBmcm9tIHRfIi4ka2V5X3RhYmxlX3ByZWZpeC4iX2Nhc2hfdHJhbnNhY3Rpb24KICAgICAgICAgICAgd2hlcmUgaWZudWxsKHRyYV9iYXRjaCwnJykgPSAnJyAiOwokcmVzdWx0X2Nhc2hfdHJhbnNhY3Rpb24gPSBteXNxbF9xdWVyeSgkcXVlcnlfY2FzaF90cmFuc2FjdGlvbik7CmlmKCRsaW5lX2Nhc2hfdHJhbnNhY3Rpb24gPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0X2Nhc2hfdHJhbnNhY3Rpb24sTVlTUUxfQVNTT0MpKQp7CgogICAgJHRvdGFsX2Nhc2hfdHJhbnNhY3Rpb25fYmFsYW5jZSA9ICRsaW5lX2Nhc2hfdHJhbnNhY3Rpb25bInRvdGFsIl0rMDsKICAgIAoKfQoKCgoKCgovL2dldCB1bmNsb3NlZCBzYWxlczoKJHF1ZXJ5X3NhbGVzPSJzZWxlY3QgKgogICAgICAgICAgIGZyb20gdF8iLiRrZXlfdGFibGVfcHJlZml4LiJfc2FsZXMKICAgICAgICAgICB3aGVyZSAgc2FsX3N0YXR1cyA9ICdQQUlEJwogICAgICAgICAgIGFuZCBpZm51bGwoc2FsX2Nsb3NpbmdfYmF0Y2gsJycpID0gJycKICAgICAgICAgICAiOwokcmVzdWx0X3NhbGVzID0gbXlzcWxfcXVlcnkoJHF1ZXJ5X3NhbGVzKTsKd2hpbGUoJGxpbmVfc2FsZXMgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0X3NhbGVzLE1ZU1FMX0FTU09DKSkKewoKICAgIGlmKCRsaW5lX3NhbGVzWyJzYWxfcGF5bWVudF9jb2RlIl09PSJNVUxUSVBMRSIpCiAgICB7CiAgICAgICAgZm9yKCRwbW9kZT0xOyRwbW9kZTw9NTskcG1vZGUrKykKICAgICAgICB7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZigkbGluZV9zYWxlc1sic2FsX3BheW1lbnRfbW9kZV8iLiRwbW9kZS4iIl0hPSIiKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgJGNsb3NpbmdfYW1vdW50X2J5X21vZGVbJGxpbmVfc2FsZXNbInNhbF9wYXltZW50X21vZGVfIi4kcG1vZGUuIiJdXSA9ICRjbG9zaW5nX2Ftb3VudF9ieV9tb2RlWyRsaW5lX3NhbGVzWyJzYWxfcGF5bWVudF9tb2RlXyIuJHBtb2RlLiIiXV0gKyAkbGluZV9zYWxlc1sic2FsX3BheW1lbnRfbW9kZV8iLiRwbW9kZS4iX2Ftb3VudCJdKzA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIAogICAgICAgIAogICAgfQogICAgZWxzZQogICAgewogICAgICAgIAogICAgICAgICRjbG9zaW5nX2Ftb3VudF9ieV9tb2RlWyRsaW5lX3NhbGVzWyJzYWxfcGF5bWVudF9jb2RlIl1dID0gJGNsb3NpbmdfYW1vdW50X2J5X21vZGVbJGxpbmVfc2FsZXNbInNhbF9wYXltZW50X2NvZGUiXV0gKyAkbGluZV9zYWxlc1sic2FsX2NvbGxlY3Rpb25fYW1vdW50Il07CiAgICB9CgoKICAgIAogICAgJHRvdGFsX2JpbGxzID0gJHRvdGFsX2JpbGxzICsgMTsKICAgIAogICAgCiAgICAkdG90YWxfYmlsbHNfYnlfcGVyc29uWyRsaW5lX3NhbGVzWyJzYWxfY2FzaGllcl9uYW1lIl1dID0gJHRvdGFsX2JpbGxzX2J5X3BlcnNvblskbGluZV9zYWxlc1sic2FsX2Nhc2hpZXJfbmFtZSJdXSArIDE7CiAgICAKICAgICAgIAp9CgogICAKCi8vY29sbGVjdCBhbGwgY2FzaCBtb2RlCiR0b3RhbF9zYWxlcyA9IDA7CiR0b3RhbF9jYXNoX3NhbGVzID0gMDsKJHRvdGFsX25vbl9jYXNoX3NhbGVzID0gMDsKaWYoaXNzZXQoJGNsb3NpbmdfYW1vdW50X2J5X21vZGUpKQp7CiAgICBmb3JlYWNoKCRjbG9zaW5nX2Ftb3VudF9ieV9tb2RlIGFzICRtb2RlX2tleT0+JG1vZGVfdmFsdWUpCiAgICB7CiAgICAgICAgCiAgICAgICAgJHF1ZXJ5X3BheW1lbnRfbW9kZT0ic2VsZWN0ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdF8iLiRrZXlfdGFibGVfcHJlZml4LiJfcGF5bWVudF9tb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBweW1fY29kZSA9ICciLiRtb2RlX2tleS4iJyAiOwogICAgICAgICRyZXN1bHRfcGF5bWVudF9tb2RlID0gbXlzcWxfcXVlcnkoJHF1ZXJ5X3BheW1lbnRfbW9kZSk7CiAgICAgICAgaWYoJGxpbmVfcGF5bWVudF9tb2RlID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdF9wYXltZW50X21vZGUsTVlTUUxfQVNTT0MpKQogICAgICAgIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmKCRsaW5lX3BheW1lbnRfbW9kZVsicHltX2lzX2Nhc2giXT09IllFUyIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgJHRvdGFsX2Nhc2hfc2FsZXMgID0gJHRvdGFsX2Nhc2hfc2FsZXMgKyAkbW9kZV92YWx1ZSArMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICR0b3RhbF9ub25fY2FzaF9zYWxlcyA9ICR0b3RhbF9ub25fY2FzaF9zYWxlcyArICAkbW9kZV92YWx1ZSArMDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICR0b3RhbF9zYWxlcz0kdG90YWxfc2FsZXMgKyAkbW9kZV92YWx1ZSArMDsKICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgIH0KICAgCn0KICAgCiAgIAogICAKLyoKZWNobyAiPHByZT4iOwpwcmludF9yKCRjbG9zaW5nX2Ftb3VudF9ieV9tb2RlKTsKZWNobyAiPC9wcmU+IjsKKi8KCgoKCgoKCgoKCgoKCgoKCgppZiAoJF9TRVJWRVJbUkVRVUVTVF9NRVRIT0RdID09ICdQT1NUJykgewoKCiAgICAvL2VjaG8gJF9SRVFVRVNUWyJpbml0aWFsX2Nhc2giXTsKICAgICRxdWVyeV9jaGVjaz0ic2VsZWN0ICoKICAgICAgICAgICAgICAgIGZyb20gdF8iLiRrZXlfdGFibGVfcHJlZml4LiJfY2xvc2luZwogICAgICAgICAgICAgICAgd2hlcmUgY2xzX3N0YXR1cyA9J0RSQUZUJyAiOwogICAgJHJlc3VsdF9jaGVjayA9IG15c3FsX3F1ZXJ5KCRxdWVyeV9jaGVjayk7CiAgICBpZigkbGluZV9jaGVjayA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHRfY2hlY2ssTVlTUUxfQVNTT0MpKQogICAgewoKCgoKICAgIH0KICAgIGVsc2V7CgogICAgICAgICRxdWVyeV9pbnNlcnQ9IiBpbnNlcnQgaW50byB0XyIuJGtleV90YWJsZV9wcmVmaXguIl9jbG9zaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICAgY2xzX2JhdGNoLAogICAgICAgICAgICAgICAgICAgICAgICBjbHNfc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkX2RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkX2RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRfYnksCiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkX2J5CiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICAgJ0RSQUZUJywKICAgICAgICAgICAgICAgICAgICAgICAgJ0RSQUZUJywKICAgICAgICAgICAgICAgICAgICAgICAgJyIuZGF0ZSgiWS1tLWQgSDppOnMiKS4iJywKICAgICAgICAgICAgICAgICAgICAgICAgJyIuZGF0ZSgiWS1tLWQgSDppOnMiKS4iJywKICAgICAgICAgICAgICAgICAgICAgICAgJyIuJEN1cnJlbnRVc2VySUQuIicsCiAgICAgICAgICAgICAgICAgICAgICAgICciLiRDdXJyZW50VXNlcklELiInCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAiOwogICAgICAgICRyZXN1bHRfaW5zZXJ0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5X2luc2VydCk7CiAgICB9CgoKCgogICAgaWYoJF9SRVFVRVNUWyJ1c2VyX2FjdGlvbiJdPT0iQ09ORklSTV9OT19DT1VOVCIpCiAgICB7CiAgICAgICAgCiAgICAgICAgICAgICR0b3RhbF9jYXNoPTA7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgCiAgICAgICAgICAgICR0b3RhbF9jYXNoPTA7CiAgICAKICAgICAgICAgICAgaWYoJF9SRVFVRVNUWyJ0b3RhbF9hbW91bnQiXT4wKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICR0b3RhbF9jYXNoPSRfUkVRVUVTVFsidG90YWxfYW1vdW50Il07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgICAgICAkdG90YWxfY2FzaD0kdG90YWxfY2FzaCArICggKCRfUkVRVUVTVFsiY2VudHNfMSJdKzApICAgKiAwLjAxICk7CiAgICAgICAgICAgICAgICAkdG90YWxfY2FzaD0kdG90YWxfY2FzaCArICggKCRfUkVRVUVTVFsiY2VudHNfNSJdKzApICAgKiAwLjA1ICk7CiAgICAgICAgICAgICAgICAkdG90YWxfY2FzaD0kdG90YWxfY2FzaCArICggKCRfUkVRVUVTVFsiY2VudHNfMTAiXSswKSAgICogMC4xMCApOwogICAgICAgICAgICAgICAgJHRvdGFsX2Nhc2g9JHRvdGFsX2Nhc2ggKyAoICgkX1JFUVVFU1RbImNlbnRzXzIwIl0rMCkgICAqIDAuMjAgKTsKICAgICAgICAgICAgICAgICR0b3RhbF9jYXNoPSR0b3RhbF9jYXNoICsgKCAoJF9SRVFVRVNUWyJjZW50c181MCJdKzApICAgKiAwLjUwICk7CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJHRvdGFsX2Nhc2g9JHRvdGFsX2Nhc2ggKyAoICgkX1JFUVVFU1RbInJtXzEiXSswKSAgICogMSApOwogICAgICAgICAgICAgICAgJHRvdGFsX2Nhc2g9JHRvdGFsX2Nhc2ggKyAoICgkX1JFUVVFU1RbInJtXzUiXSswKSAgICogNSApOwogICAgICAgICAgICAgICAgJHRvdGFsX2Nhc2g9JHRvdGFsX2Nhc2ggKyAoICgkX1JFUVVFU1RbInJtXzEwIl0rMCkgICAqIDEwICk7CiAgICAgICAgICAgICAgICAkdG90YWxfY2FzaD0kdG90YWxfY2FzaCArICggKCRfUkVRVUVTVFsicm1fMjAiXSswKSAgICogMjAgKTsKICAgICAgICAgICAgICAgICR0b3RhbF9jYXNoPSR0b3RhbF9jYXNoICsgKCAoJF9SRVFVRVNUWyJybV81MCJdKzApICAgKiA1MCApOwogICAgICAgICAgICAgICAgJHRvdGFsX2Nhc2g9JHRvdGFsX2Nhc2ggKyAoICgkX1JFUVVFU1RbInJtXzEwMCJdKzApICAgKiAxMDAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICAgIAogICAgCiAgICB9CiAgICAKICAgIAogICAgCiAgICAKICAgIAoKICAgIGlmKCRfUkVRVUVTVFsidXNlcl9hY3Rpb24iXT09IkNPTkZJUk0iKQogICAgewoKICAgICAgICAkdGhpc19zdGF0dXM9IkNMT1NFRCI7CiAgICAgICAgJHRoaXNfYmF0Y2g9ZGF0ZSgiWW1kSGlzIik7CiAgICB9CiAgICBlbHNlaWYoJF9SRVFVRVNUWyJ1c2VyX2FjdGlvbiJdPT0iQ09ORklSTV9OT19DT1VOVCIpCiAgICB7CiAgICAgICAgJHRoaXNfc3RhdHVzPSJDTE9TRUQiOwogICAgICAgICR0aGlzX2JhdGNoPWRhdGUoIlltZEhpcyIpOwogICAgICAgIAogICAgfQogICAgZWxzZXsKICAgICAgICAkdGhpc19zdGF0dXM9IkRSQUZUIjsKCiAgICB9CgoKCgoKCiAgICBpZigkX1JFUVVFU1RbInVzZXJfYWN0aW9uIl09PSJDT05GSVJNX05PX0NPVU5UIikKICAgIHsKICAgICAgICAkdG90YWxfZGlmZmVyZW50PSAgMDsKICAgICAgICAkX1JFUVVFU1RbImluaXRpYWxfY2FzaCJdPTA7CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgJF9SRVFVRVNUWyJjZW50c18xIl09MDsKICAgICAgICAkX1JFUVVFU1RbImNlbnRzXzUiXT0wOwogICAgICAgICRfUkVRVUVTVFsiY2VudHNfMTAiXT0wOwogICAgICAgICRfUkVRVUVTVFsiY2VudHNfMjAiXT0wOwogICAgICAgICRfUkVRVUVTVFsiY2VudHNfNTAiXT0wOwogICAgICAgIAogICAgICAgICRfUkVRVUVTVFsicm1fMSJdPTA7CiAgICAgICAgJF9SRVFVRVNUWyJybV81Il09MDsKICAgICAgICAkX1JFUVVFU1RbInJtXzEwIl09MDsKICAgICAgICAkX1JFUVVFU1RbInJtXzIwIl09MDsKICAgICAgICAkX1JFUVVFU1RbInJtXzUwIl09MDsKICAgICAgICAkX1JFUVVFU1RbInJtXzEwMCJdPTA7CiAgICAgICAgCiAgICAgICAgJHRvdGFsX2Nhc2g9MDsKICAgICAgICAKICAgICAgICAkY2xvc2luZ19ub19jb3VudGluZz0iTk9fQ09VTlQiOwogICAgICAgIAogICAgICAgIAogICAgfQogICAgZWxzZQogICAgewogICAgICAgICR0b3RhbF9kaWZmZXJlbnQ9ICAgICAkdG90YWxfY2FzaCAtICggKCRfUkVRVUVTVFsiaW5pdGlhbF9jYXNoIl0rMCkgKyAkdG90YWxfY2FzaF9zYWxlcyArICR0b3RhbF9jYXNoX3RyYW5zYWN0aW9uX2JhbGFuY2UgKTsgICAgCiAgICB9CgoKCiAgICAKICAgIAoKCgogICAgICAgICRxdWVyeV91cGRhdGU9InVwZGF0ZSB0XyIuJGtleV90YWJsZV9wcmVmaXguIl9jbG9zaW5nIHNldAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZV9jb2RlID0gJyIuJHN5c19zeXN0ZW1fbWFzdGVyX3NldHRpbmdfbGluZVsic2V0X2RldmljZV9jb2RlIl0uIicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHNfcGVyc29uID0gJyIuJEN1cnJlbnRVc2VyRnVsbE5hbWUuIicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHNfYmF0Y2ggPSAnIi4kdGhpc19iYXRjaC4iJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsc19pbml0aWFsX2Nhc2ggPSAnIi4oJF9SRVFVRVNUWyJpbml0aWFsX2Nhc2giXSswKS4iJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsc19tb25leV9jZW50c18xID0gJyIuKCRfUkVRVUVTVFsiY2VudHNfMSJdKzApLiInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzX21vbmV5X2NlbnRzXzUgPSAnIi4oJF9SRVFVRVNUWyJjZW50c181Il0rMCkuIicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHNfbW9uZXlfY2VudHNfMTAgPSAnIi4oJF9SRVFVRVNUWyJjZW50c18xMCJdKzApLiInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzX21vbmV5X2NlbnRzXzIwID0gJyIuKCRfUkVRVUVTVFsiY2VudHNfMjAiXSswKS4iJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsc19tb25leV9jZW50c181MCA9ICciLigkX1JFUVVFU1RbImNlbnRzXzUwIl0rMCkuIicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHNfbW9uZXlfcmluZ2dpdF8xID0gJyIuKCRfUkVRVUVTVFsicm1fMSJdKzApLiInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzX21vbmV5X3JpbmdnaXRfNSA9ICciLigkX1JFUVVFU1RbInJtXzUiXSswKS4iJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsc19tb25leV9yaW5nZ2l0XzEwID0gJyIuKCRfUkVRVUVTVFsicm1fMTAiXSswKS4iJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsc19tb25leV9yaW5nZ2l0XzIwID0gJyIuKCRfUkVRVUVTVFsicm1fMjAiXSswKS4iJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsc19tb25leV9yaW5nZ2l0XzUwID0gJyIuKCRfUkVRVUVTVFsicm1fNTAiXSswKS4iJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsc19tb25leV9yaW5nZ2l0XzEwMCA9ICciLigkX1JFUVVFU1RbInJtXzEwMCJdKzApLiInLAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzX2Nhc2hfdHJhbnNhY3Rpb25fYmFsYW5jZSA9ICciLigkdG90YWxfY2FzaF90cmFuc2FjdGlvbl9iYWxhbmNlKzApLiInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsc19jbG9zaW5nX2Nhc2ggPSAnIi4oJHRvdGFsX2Nhc2grMCkuIicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsc190b3RhbF9zYWxlcyA9ICciLigkdG90YWxfc2FsZXMrMCkuIicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsc190b3RhbF9zYWxlc19jYXNoID0gJyIuKCR0b3RhbF9jYXNoX3NhbGVzKzApLiInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzX3RvdGFsX3NhbGVzX25vbl9jYXNoID0gJyIuKCR0b3RhbF9ub25fY2FzaF9zYWxlcyswKS4iJywgIjsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgJHBtb2RlPTE7CiAgICAgICAgICAgIGlmKGlzc2V0KCRjbG9zaW5nX2Ftb3VudF9ieV9tb2RlKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yZWFjaCgkY2xvc2luZ19hbW91bnRfYnlfbW9kZSBhcyAkbW9kZV9rZXk9PiRtb2RlX3ZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICRxdWVyeV91cGRhdGU9JHF1ZXJ5X3VwZGF0ZS4iICBjbHNfbW9kZV8iLiRwbW9kZS4iID0gJyIuJG1vZGVfa2V5LiInLCAiOwogICAgICAgICAgICAgICAgICAgICRxdWVyeV91cGRhdGU9JHF1ZXJ5X3VwZGF0ZS4iICBjbHNfbW9kZV8iLiRwbW9kZS4iX2Ftb3VudCA9ICciLigkbW9kZV92YWx1ZSswKS4iJywgIjsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAkcG1vZGUrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAKICAgICAgICAgIAogICAgICAgICAgCiAgICAgICAgICAKICAgICAgICAgICAgJHF1ZXJ5X3VwZGF0ZT0kcXVlcnlfdXBkYXRlLiIKICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsc190b3RhbF9kaWZmZXJlbnQ9JyIuKCR0b3RhbF9kaWZmZXJlbnQrMCkuIicsCiAgICAgICAgICAgICAgICAgICAgY2xzX25vX2NvdW50ID0nIi4kY2xvc2luZ19ub19jb3VudGluZy4iJywKICAgICAgICAgICAgICAgICAgICBjbHNfc3RhdHVzID0nIi4kdGhpc19zdGF0dXMuIicKICAgICAgICAgICAgICAgICAgICB3aGVyZSBjbHNfc3RhdHVzPSdEUkFGVCcgOyAiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgJHJlc3VsdF91cGRhdGUgPSBteXNxbF9xdWVyeSgkcXVlcnlfdXBkYXRlKSBvciBkaWUoIkVycm9yMCIpLm15c3FsX2Vycm9yKCk7CgoKICAgIGlmKCgkX1JFUVVFU1RbInVzZXJfYWN0aW9uIl09PSJDT05GSVJNIilvcigkX1JFUVVFU1RbInVzZXJfYWN0aW9uIl09PSJDT05GSVJNX05PX0NPVU5UIikpCiAgICB7CiAgICAgICAgJHF1ZXJ5X3VwZGF0ZT0idXBkYXRlIHRfIi4ka2V5X3RhYmxlX3ByZWZpeC4iX3NhbGVzCiAgICAgICAgICAgICAgICAgICAgc2V0IHNhbF9jbG9zaW5nX2JhdGNoID0gJyIuJHRoaXNfYmF0Y2guIicsCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWRfYnkgPSciLiRDdXJyZW50VXNlcklELiInLAogICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkX2RhdGUgPSciLmRhdGUoIlktbS1kIEg6aTpzIikuIicKICAgICAgICAgICAgICAgICAgICB3aGVyZSAoc2FsX3N0YXR1cyA9ICdQQUlEJyBvciBzYWxfc3RhdHVzID0gJ1JFSkVDVEVEJykKICAgICAgICAgICAgICAgICAgICBhbmQgaWZudWxsKHNhbF9jbG9zaW5nX2JhdGNoLCcnKSA9JycKICAgICAgICAgICAgICAgICAgICAiOwoKICAgICAgICAkcmVzdWx0X3VwZGF0ZSA9IG15c3FsX3F1ZXJ5KCRxdWVyeV91cGRhdGUpIG9yIGRpZSgiRXJyb3IxIikubXlzcWxfZXJyb3IoKTsKCiAgICAgICAgICAgCiAgICAgICAgJHF1ZXJ5X3VwZGF0ZT0idXBkYXRlIHRfIi4ka2V5X3RhYmxlX3ByZWZpeC4iX2Nhc2hfdHJhbnNhY3Rpb24KICAgICAgICAgICAgICAgICAgICBzZXQgdHJhX2JhdGNoID0gJyIuJHRoaXNfYmF0Y2guIicKICAgICAgICAgICAgICAgICAgICB3aGVyZSAgaWZudWxsKHRyYV9iYXRjaCwnJykgPScnCiAgICAgICAgICAgICAgICAgICAgIjsKCiAgICAgICAgJHJlc3VsdF91cGRhdGUgPSBteXNxbF9xdWVyeSgkcXVlcnlfdXBkYXRlKSBvciBkaWUoIkVycm9yMiIpLm15c3FsX2Vycm9yKCk7CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgaWYoJHN5c19wcmludGluZ19zd2l0Y2gpCgl7CiAgICAgICAgICAgIGluY2x1ZGUgInByaW50X2Nsb3NpbmcucGhwIjsKICAgICAgICB9CiAgICB9CgoKCgoKCgoKfQoKIC8vZWNobyAkX1JFUVVFU1RbImluaXRpYWxfY2FzaCJdOwogICAgJHF1ZXJ5X2NoZWNrPSJzZWxlY3QgKgogICAgICAgICAgICAgICAgZnJvbSB0XyIuJGtleV90YWJsZV9wcmVmaXguIl9jbG9zaW5nCiAgICAgICAgICAgICAgICB3aGVyZSBjbHNfc3RhdHVzID0nRFJBRlQnICI7CiAgICAkcmVzdWx0X2NoZWNrID0gbXlzcWxfcXVlcnkoJHF1ZXJ5X2NoZWNrKTsKICAgIGlmKCRsaW5lX2NoZWNrID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdF9jaGVjayxNWVNRTF9BU1NPQykpCiAgICB7CgoKCiAgICAgICAgICAgICRfUkVRVUVTVFsiaW5pdGlhbF9jYXNoIl0gPSAkbGluZV9jaGVja1siY2xzX2luaXRpYWxfY2FzaCJdICswIDsKCiAgICAgICAgICAgICRfUkVRVUVTVFsiY2VudHNfMSJdID0gJGxpbmVfY2hlY2tbImNsc19tb25leV9jZW50c18xIl0rMDsKICAgICAgICAgICAgJF9SRVFVRVNUWyJjZW50c181Il0gPSAkbGluZV9jaGVja1siY2xzX21vbmV5X2NlbnRzXzUiXSswOwogICAgICAgICAgICAkX1JFUVVFU1RbImNlbnRzXzEwIl0gPSAkbGluZV9jaGVja1siY2xzX21vbmV5X2NlbnRzXzEwIl0rMDsKICAgICAgICAgICAgJF9SRVFVRVNUWyJjZW50c18yMCJdID0gJGxpbmVfY2hlY2tbImNsc19tb25leV9jZW50c18yMCJdKzA7CiAgICAgICAgICAgICRfUkVRVUVTVFsiY2VudHNfNTAiXSA9ICRsaW5lX2NoZWNrWyJjbHNfbW9uZXlfY2VudHNfNTAiXSswOwoKICAgICAgICAgICAgJF9SRVFVRVNUWyJybV8xIl0gPSAkbGluZV9jaGVja1siY2xzX21vbmV5X3JpbmdnaXRfMSJdKzA7CiAgICAgICAgICAgICRfUkVRVUVTVFsicm1fNSJdID0gJGxpbmVfY2hlY2tbImNsc19tb25leV9yaW5nZ2l0XzUiXSswOwogICAgICAgICAgICAkX1JFUVVFU1RbInJtXzEwIl0gPSAkbGluZV9jaGVja1siY2xzX21vbmV5X3JpbmdnaXRfMTAiXSswOwogICAgICAgICAgICAkX1JFUVVFU1RbInJtXzIwIl0gPSAkbGluZV9jaGVja1siY2xzX21vbmV5X3JpbmdnaXRfMjAiXSswOwogICAgICAgICAgICAkX1JFUVVFU1RbInJtXzUwIl0gID0gJGxpbmVfY2hlY2tbImNsc19tb25leV9yaW5nZ2l0XzUwIl0rMDsKICAgICAgICAgICAgJF9SRVFVRVNUWyJybV8xMDAiXSA9ICRsaW5lX2NoZWNrWyJjbHNfbW9uZXlfcmluZ2dpdF8xMDAiXSswOwoKCiAgICB9CgoKICAgIGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTEgPiI7CiAgICAgICAgZWNobyAiPHRyPiI7CiAgICAgICAgICAgIGVjaG8gIjx0ZCAgdmFsaWduPXRvcCA+IjsKICAgICAgICAgICAgICAgIGVjaG8gIjxkaXYgY2xhc3M9J2ZhLXN0YWNrIGZhLWxnJyA+IjsKICAgICAgICAgICAgICAgICAgICBlY2hvICc8aSBjbGFzcz0iZmEgZmEtY2lyY2xlIGZhLXN0YWNrLTJ4IiBzdHlsZT0iY29sb3I6IzAwMDsiID48L2k+PGkgY2xhc3M9ImZhIGZhLXRyb3BoeSBmYS1zdGFjay0xeCIgPjwvaT4nOwogICAgICAgICAgICAgICAgZWNobyAiPC9kaXY+IjsKICAgICAgICAgICAgICAgIGVjaG8gIjxmb250IHN0eWxlPSdmb250LXNpemU6MzBweDsnPjxiPkNhc2hpZXIgQ2xvc2luZyA8L2I+PC9mb250Pjxicj4iOwoJICAgIGVjaG8gIjwvdGQ+IjsKCgoJICAgIGVjaG8gIjx0ZCB2YWxpZ249dG9wID4iOwoJCWVjaG8gIjxkaXYgc3R5bGU9J2Zsb2F0OnJpZ2h0O2N1cnNvcjpwb2ludGVyOycgY2xhc3M9J2ZhLXN0YWNrIGZhLWxnJyAiLiRtb2RlX2J1dHRvbl9ldmVudC4iPVwibW9uX3NlbmRfZ2V0KCdzY3JlZW4vZmFzdGNvdW50ZXIvbWFpbi5waHAnLCdkaXZfY29udGVudCcpO21vbl9oaWRlX29iamVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd2luZG93X3BvcCcpKTtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd2luZG93X3BvcF9jb250YWluZXInKS5pbm5lckhUTUw9Jyc7XCIgID4iOwoJCSAgICBlY2hvICc8aSBjbGFzcz0iZmEgZmEtY2lyY2xlIGZhLXN0YWNrLTJ4IiBzdHlsZT0iY29sb3I6I0U3NEMzQzsiID48L2k+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIGZhLXN0YWNrLTF4Ij48L2k+JzsKCQllY2hvICI8L2Rpdj4iOwogICAgICAgICAgICBlY2hvICI8L3RkPiI7CiAgICAgICAgZWNobyAiPC90cj4iOwogICAgZWNobyAiPC90YWJsZT4iOwoKCgogICAgZWNobyAiPGZvcm0gbmFtZT0nY2xvc2luZ2Zvcm0nIGFjdGlvbj0ncmV0dXJuIGZhbHNlJyA+IjsKCgoKICAgICAgICAgICAgZWNobyAiPHRhYmxlIGNlbGxwYWRkaW5nPTUgd2lkdGg9OTAlIGJvcmRlcj0wPiI7CgogICAgICAgICAgICAgICAgZWNobyAiPHRyPiI7CiAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkPiI7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vZWNobyAiSW5pdGlhbCBDYXNoIEFtb3VudCBpbiBEcmF3ZXI6ICI7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RkPiI7CgogICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0ZCB3aWR0aD0yMDAgID4iOwogICAgICAgICAgICAgICAgICAgICAgICAkX1JFUVVFU1RbImluaXRpYWxfY2FzaCJdPTA7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxpbnB1dCB0eXBlPWhpZGRlbiAgY2xhc3M9dGV4dGJveF9tIG5hbWU9J2luaXRpYWxfY2FzaCcgdmFsdWU9JyIuJF9SRVFVRVNUWyJpbml0aWFsX2Nhc2giXS4iJwogICAgICAgICAgICAgICAgICAgICAgICAgb25mb2N1cz1ibHVyKCkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9vbmNsaWNrPVwidGhpcy52YWx1ZT0nJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbnVtX3BpY2tlcl9pbml0aWFsX2Nhc2gnKS5zdHlsZS52aXNpYmlsaXR5PSd2aXNpYmxlJztcIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbW9uX3JlbmRlcl9udW1iZXJfcGlja2VyKCdpbml0aWFsX2Nhc2gnLCdGJywnSW5pdGlhbCBDYXNoJyk7CiAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD4iOwogICAgICAgICAgICAgICAgZWNobyAiPC90cj4iOwoKCiAgICAgICAgICAgICAgICAvKgoKICAgICAgICAgICAgICAgIGVjaG8gIjx0cj4iOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0ZD4iOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJUb3RhbCBTYWxlcyBmb3IgdGhpcyBTZXNzaW9uOiAiOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+IjsKCiAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkID4iOwoKCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlJNIDxiPiIuJHRvdGFsX3NhbGVzLiI8L2I+IjsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiICggIi4kdG90YWxfYmlsbHMuIiBCaWxscyApIjsKCiAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD4iOwogICAgICAgICAgICAgICAgZWNobyAiPC90cj4iOwoKICAgICAgICAgICAgICAgICovCgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICBlY2hvICI8dHI+IjsKICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGQgdmFsaWduPXRvcCA+IjsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiVG90YWwgQ2FzaCBDb3VudGVkIGR1cmluZyBDbG9zaW5nOiA8Zm9udCBjb2xvcj0jZmYwMDAgPihFeGNsdWRlIEZsb2F0aW5nKTwvZm9udD4gIjsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRhYmxlIGJvcmRlcj0wID4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkIHZhbGlnbj10b3AgPiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkX1JFUVVFU1RbInRvdGFsX2Ftb3VudCJdPjApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0YWJsZSBzdHlsZT0nYm9yZGVyOjJweCBzb2xpZCAjNTU1O2JvcmRlci1yYWRpdXM6MTBweDsnIGNlbGxwYWRkaW5nPTUgd2lkdGg9MzUwPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0YWJsZSBzdHlsZT0nYm9yZGVyOjJweCBzb2xpZCAjRTc0QzNDO2JvcmRlci1yYWRpdXM6MTBweDsnIGNlbGxwYWRkaW5nPTUgd2lkdGg9MzUwPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0cj4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkIHdpZHRoPTgwID5STSAxIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJ4IDxpbnB1dCBzdHlsZT0nZm9udC1zaXplOjIwcHg7dGV4dC1hbGlnbjpjZW50ZXInIHR5cGU9dGV4dCBjbGFzcz10ZXh0Ym94X3MgbmFtZT0ncm1fMScgdmFsdWU9JyIuJF9SRVFVRVNUWyJybV8xIl0uIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmZvY3VzPWJsdXIoKSBvbmNsaWNrPVwidGhpcy52YWx1ZT0nJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbnVtX3BpY2tlcl9ybV8xJykuc3R5bGUudmlzaWJpbGl0eT0ndmlzaWJsZSc7XCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25fcmVuZGVyX251bWJlcl9waWNrZXIoJ3JtXzEnLCdEJywnUk0gMScpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkIHdpZHRoPTEyMCA+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiA9IDxmb250IGNvbG9yPSMyRUNDNzE+Uk0gIi5udW1iZXJfZm9ybWF0KCgkX1JFUVVFU1RbInJtXzEiXSoxKSwyLCIuIiwiLCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RkPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RyPiI7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dHI+IjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0ZD5STSA1IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJ4IDxpbnB1dCAgc3R5bGU9J2ZvbnQtc2l6ZToyMHB4O3RleHQtYWxpZ246Y2VudGVyJyB0eXBlPXRleHQgY2xhc3M9dGV4dGJveF9zIG5hbWU9J3JtXzUnIHZhbHVlPSciLiRfUkVRVUVTVFsicm1fNSJdLiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmZvY3VzPWJsdXIoKSAgb25jbGljaz1cInRoaXMudmFsdWU9Jyc7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ251bV9waWNrZXJfcm1fNScpLnN0eWxlLnZpc2liaWxpdHk9J3Zpc2libGUnO1wiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25fcmVuZGVyX251bWJlcl9waWNrZXIoJ3JtXzUnLCdEJywnUk0gNScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RkPiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGQgd2lkdGg9MTIwID4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiID0gPGZvbnQgY29sb3I9IzJFQ0M3MT5STSAiLm51bWJlcl9mb3JtYXQoKCRfUkVRVUVTVFsicm1fNSJdKjUpLDIsIi4iLCIsIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90cj4iOwoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0cj4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkPlJNIDEwIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJ4IDxpbnB1dCAgc3R5bGU9J2ZvbnQtc2l6ZToyMHB4O3RleHQtYWxpZ246Y2VudGVyJyB0eXBlPXRleHQgY2xhc3M9dGV4dGJveF9zIG5hbWU9J3JtXzEwJyB2YWx1ZT0nIi4kX1JFUVVFU1RbInJtXzEwIl0uIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25mb2N1cz1ibHVyKCkgb25jbGljaz1cInRoaXMudmFsdWU9Jyc7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ251bV9waWNrZXJfcm1fMTAnKS5zdHlsZS52aXNpYmlsaXR5PSd2aXNpYmxlJztcIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbl9yZW5kZXJfbnVtYmVyX3BpY2tlcigncm1fMTAnLCdEJywnUk0gMTAnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkIHdpZHRoPTEyMCA+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiA9IDxmb250IGNvbG9yPSMyRUNDNzE+Uk0gIi5udW1iZXJfZm9ybWF0KCgkX1JFUVVFU1RbInJtXzEwIl0qMTApLDIsIi4iLCIsIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90cj4iOwoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0cj4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkPlJNIDIwIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJ4IDxpbnB1dCAgc3R5bGU9J2ZvbnQtc2l6ZToyMHB4O3RleHQtYWxpZ246Y2VudGVyJyB0eXBlPXRleHQgY2xhc3M9dGV4dGJveF9zIG5hbWU9J3JtXzIwJyB2YWx1ZT0nIi4kX1JFUVVFU1RbInJtXzIwIl0uIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmZvY3VzPWJsdXIoKSBvbmNsaWNrPVwidGhpcy52YWx1ZT0nJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbnVtX3BpY2tlcl9ybV8yMCcpLnN0eWxlLnZpc2liaWxpdHk9J3Zpc2libGUnO1wiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9uX3JlbmRlcl9udW1iZXJfcGlja2VyKCdybV8yMCcsJ0QnLCdSTSAyMCcpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkIHdpZHRoPTEyMCA+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiA9IDxmb250IGNvbG9yPSMyRUNDNzE+Uk0gIi5udW1iZXJfZm9ybWF0KCgkX1JFUVVFU1RbInJtXzIwIl0qMjApLDIsIi4iLCIsIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90cj4iOwoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0cj4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkPlJNIDUwIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJ4IDxpbnB1dCAgc3R5bGU9J2ZvbnQtc2l6ZToyMHB4O3RleHQtYWxpZ246Y2VudGVyJyB0eXBlPXRleHQgY2xhc3M9dGV4dGJveF9zIG5hbWU9J3JtXzUwJyB2YWx1ZT0nIi4kX1JFUVVFU1RbInJtXzUwIl0uIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmZvY3VzPWJsdXIoKSBvbmNsaWNrPVwidGhpcy52YWx1ZT0nJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbnVtX3BpY2tlcl9ybV81MCcpLnN0eWxlLnZpc2liaWxpdHk9J3Zpc2libGUnO1wiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9uX3JlbmRlcl9udW1iZXJfcGlja2VyKCdybV81MCcsJ0QnLCdSTSA1MCcpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkIHdpZHRoPTEyMCA+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiA9IDxmb250IGNvbG9yPSMyRUNDNzE+Uk0gIi5udW1iZXJfZm9ybWF0KCgkX1JFUVVFU1RbInJtXzUwIl0qNTApLDIsIi4iLCIsIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdHI+IjsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0cj4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkPlJNIDEwMCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+IjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0ZD4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAieCA8aW5wdXQgIHN0eWxlPSdmb250LXNpemU6MjBweDt0ZXh0LWFsaWduOmNlbnRlcicgdHlwZT10ZXh0IGNsYXNzPXRleHRib3hfcyBuYW1lPSdybV8xMDAnIHZhbHVlPSciLiRfUkVRVUVTVFsicm1fMTAwIl0uIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmZvY3VzPWJsdXIoKSBvbmNsaWNrPVwidGhpcy52YWx1ZT0nJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbnVtX3BpY2tlcl9ybV8xMDAnKS5zdHlsZS52aXNpYmlsaXR5PSd2aXNpYmxlJztcIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbl9yZW5kZXJfbnVtYmVyX3BpY2tlcigncm1fMTAwJywnRCcsJ1JNIDEwMCcpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkIHdpZHRoPTEyMCA+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiA9IDxmb250IGNvbG9yPSMyRUNDNzE+Uk0gIi5udW1iZXJfZm9ybWF0KCgkX1JFUVVFU1RbInJtXzEwMCJdKjEwMCksMiwiLiIsIiwiKS4iPC9mb250PiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdHI+IjsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90YWJsZT4iOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD48dGQgdmFsaWduPXRvcCA+IjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJF9SRVFVRVNUWyJ0b3RhbF9hbW91bnQiXT4wKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGFibGUgc3R5bGU9J2JvcmRlcjoycHggc29saWQgIzU1NTtib3JkZXItcmFkaXVzOjEwcHg7JyBjZWxscGFkZGluZz01IHdpZHRoPTM1MD4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGFibGUgc3R5bGU9J2JvcmRlcjoycHggc29saWQgI0U3NEMzQztib3JkZXItcmFkaXVzOjEwcHg7JyBjZWxscGFkZGluZz01IHdpZHRoPTM1MD4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRyPiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGQgd2lkdGg9ODAgPjEgY2VudHMiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RkPiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGQ+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gInggPGlucHV0ICBzdHlsZT0nZm9udC1zaXplOjIwcHg7dGV4dC1hbGlnbjpjZW50ZXInIHR5cGU9dGV4dCBjbGFzcz10ZXh0Ym94X3MgbmFtZT0nY2VudHNfMScgdmFsdWU9JyIuJF9SRVFVRVNUWyJjZW50c18xIl0uIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmZvY3VzPWJsdXIoKSBvbmNsaWNrPVwidGhpcy52YWx1ZT0nJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbnVtX3BpY2tlcl9jZW50c18xJykuc3R5bGUudmlzaWJpbGl0eT0ndmlzaWJsZSc7XCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25fcmVuZGVyX251bWJlcl9waWNrZXIoJ2NlbnRzXzEnLCdEJywnMSBDZW50Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+IjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0ZCB3aWR0aD0xMjAgPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIgPSA8Zm9udCBjb2xvcj0jMkVDQzcxPlJNICIubnVtYmVyX2Zvcm1hdCgoJF9SRVFVRVNUWyJjZW50c18xIl0qMC4wMSksMiwiLiIsIiwiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdHI+IjsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0cj4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkPjUgY2VudHMiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RkPiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGQ+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gInggPGlucHV0ICBzdHlsZT0nZm9udC1zaXplOjIwcHg7dGV4dC1hbGlnbjpjZW50ZXInIHR5cGU9dGV4dCBjbGFzcz10ZXh0Ym94X3MgbmFtZT0nY2VudHNfNScgdmFsdWU9JyIuJF9SRVFVRVNUWyJjZW50c181Il0uIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmZvY3VzPWJsdXIoKSBvbmNsaWNrPVwidGhpcy52YWx1ZT0nJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbnVtX3BpY2tlcl9jZW50c181Jykuc3R5bGUudmlzaWJpbGl0eT0ndmlzaWJsZSc7XCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25fcmVuZGVyX251bWJlcl9waWNrZXIoJ2NlbnRzXzUnLCdEJywnNSBDZW50cycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RkPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGQgd2lkdGg9MTIwID4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiID0gPGZvbnQgY29sb3I9IzJFQ0M3MT5STSAiLm51bWJlcl9mb3JtYXQoKCRfUkVRVUVTVFsiY2VudHNfNSJdKjAuMDUpLDIsIi4iLCIsIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+IjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90cj4iOwoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0cj4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkPjEwIGNlbnRzIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJ4IDxpbnB1dCAgc3R5bGU9J2ZvbnQtc2l6ZToyMHB4O3RleHQtYWxpZ246Y2VudGVyJyB0eXBlPXRleHQgY2xhc3M9dGV4dGJveF9zIG5hbWU9J2NlbnRzXzEwJyB2YWx1ZT0nIi4kX1JFUVVFU1RbImNlbnRzXzEwIl0uIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmZvY3VzPWJsdXIoKSBvbmNsaWNrPVwidGhpcy52YWx1ZT0nJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbnVtX3BpY2tlcl9jZW50c18xMCcpLnN0eWxlLnZpc2liaWxpdHk9J3Zpc2libGUnO1wiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9uX3JlbmRlcl9udW1iZXJfcGlja2VyKCdjZW50c18xMCcsJ0QnLCcxMCBDZW50cycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RkPiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGQgd2lkdGg9MTIwID4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiID0gPGZvbnQgY29sb3I9IzJFQ0M3MT5STSAiLm51bWJlcl9mb3JtYXQoKCRfUkVRVUVTVFsiY2VudHNfMTAiXSowLjEpLDIsIi4iLCIsIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90cj4iOwoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0cj4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkPjIwIGNlbnRzIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJ4IDxpbnB1dCAgc3R5bGU9J2ZvbnQtc2l6ZToyMHB4O3RleHQtYWxpZ246Y2VudGVyJyB0eXBlPXRleHQgY2xhc3M9dGV4dGJveF9zIG5hbWU9J2NlbnRzXzIwJyB2YWx1ZT0nIi4kX1JFUVVFU1RbImNlbnRzXzIwIl0uIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmZvY3VzPWJsdXIoKSBvbmNsaWNrPVwidGhpcy52YWx1ZT0nJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbnVtX3BpY2tlcl9jZW50c18yMCcpLnN0eWxlLnZpc2liaWxpdHk9J3Zpc2libGUnO1wiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9uX3JlbmRlcl9udW1iZXJfcGlja2VyKCdjZW50c18yMCcsJ0QnLCcyMCBDZW50cycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RkPiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGQgd2lkdGg9MTIwID4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiID0gPGZvbnQgY29sb3I9IzJFQ0M3MT5STSAiLm51bWJlcl9mb3JtYXQoKCRfUkVRVUVTVFsiY2VudHNfMjAiXSowLjIpLDIsIi4iLCIsIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90cj4iOwoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0cj4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkPjUwIGNlbnRzIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJ4IDxpbnB1dCAgc3R5bGU9J2ZvbnQtc2l6ZToyMHB4O3RleHQtYWxpZ246Y2VudGVyJyB0eXBlPXRleHQgY2xhc3M9dGV4dGJveF9zIG5hbWU9J2NlbnRzXzUwJyB2YWx1ZT0nIi4kX1JFUVVFU1RbImNlbnRzXzUwIl0uIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmZvY3VzPWJsdXIoKSBvbmNsaWNrPVwidGhpcy52YWx1ZT0nJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbnVtX3BpY2tlcl9jZW50c181MCcpLnN0eWxlLnZpc2liaWxpdHk9J3Zpc2libGUnO1wiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9uX3JlbmRlcl9udW1iZXJfcGlja2VyKCdjZW50c181MCcsJ0QnLCc1MCBDZW50cycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RkPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGQgd2lkdGg9MTIwID4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiID0gPGZvbnQgY29sb3I9IzJFQ0M3MT5STSAiLm51bWJlcl9mb3JtYXQoKCRfUkVRVUVTVFsiY2VudHNfNTAiXSowLjUpLDIsIi4iLCIsIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdHI+IjsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGFibGU+IjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD48dGQgdmFsaWduPXRvcCB3aWR0aD04MCBhbGlnbj1jZW50ZXIgPiI7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPGJyPjxicj5PUjxicj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+PHRkIHZhbGlnbj10b3AgPiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkX1JFUVVFU1RbInRvdGFsX2Ftb3VudCJdPjApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0YWJsZSBzdHlsZT0nYm9yZGVyOjJweCBzb2xpZCAjRTc0QzNDO2JvcmRlci1yYWRpdXM6MTBweDsnIGNlbGxwYWRkaW5nPTUgd2lkdGg9MTA+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0YWJsZSBzdHlsZT0nYm9yZGVyOjJweCBzb2xpZCAjNTU1O2JvcmRlci1yYWRpdXM6MTBweDsnIGNlbGxwYWRkaW5nPTUgd2lkdGg9MTA+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dHI+IjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0ZCBhbGlnbj1jZW50ZXI+PGJyPlRvdGFsIEFtb3VudCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8YnI+PGlucHV0ICBzdHlsZT0nZm9udC1zaXplOjIwcHg7dGV4dC1hbGlnbjpjZW50ZXInIHR5cGU9dGV4dCBjbGFzcz10ZXh0Ym94X20gbmFtZT0ndG90YWxfYW1vdW50JyB2YWx1ZT0nIi4kX1JFUVVFU1RbInRvdGFsX2Ftb3VudCJdLiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25mb2N1cz1ibHVyKCkgb25jbGljaz1cInRoaXMudmFsdWU9Jyc7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ251bV9waWNrZXJfdG90YWxfYW1vdW50Jykuc3R5bGUudmlzaWJpbGl0eT0ndmlzaWJsZSc7XCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25fcmVuZGVyX251bWJlcl9waWNrZXIoJ3RvdGFsX2Ftb3VudCcsJ0YnLCdUb3RhbCBBbW91bnQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIGVjaG8gIiA9IDxmb250IGNvbG9yPSMyRUNDNzE+Uk0gIi5udW1iZXJfZm9ybWF0KCgkX1JFUVVFU1RbInRvdGFsX2Ftb3VudCJdKSwyLCIuIiwiLCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPGJyPjxicj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RkPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RhYmxlPiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdHI+IjsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90YWJsZT4iOwoKCiAgICAgICAgICAgICAgICAgICAgaWYoJF9SRVFVRVNUWyJ0b3RhbF9hbW91bnQiXT4wKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRvdGFsX2Nhc2g9JF9SRVFVRVNUWyJ0b3RhbF9hbW91bnQiXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRvdGFsX2Nhc2g9MDsKICAgICAgICAgICAgICAgICAgICAgICAgJHRvdGFsX2Nhc2g9JHRvdGFsX2Nhc2ggKyAoICgkX1JFUVVFU1RbImNlbnRzXzEiXSswKSAgICogMC4wMSApOwogICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfY2FzaD0kdG90YWxfY2FzaCArICggKCRfUkVRVUVTVFsiY2VudHNfNSJdKzApICAgKiAwLjA1ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICR0b3RhbF9jYXNoPSR0b3RhbF9jYXNoICsgKCAoJF9SRVFVRVNUWyJjZW50c18xMCJdKzApICAgKiAwLjEwICk7CiAgICAgICAgICAgICAgICAgICAgICAgICR0b3RhbF9jYXNoPSR0b3RhbF9jYXNoICsgKCAoJF9SRVFVRVNUWyJjZW50c18yMCJdKzApICAgKiAwLjIwICk7CiAgICAgICAgICAgICAgICAgICAgICAgICR0b3RhbF9jYXNoPSR0b3RhbF9jYXNoICsgKCAoJF9SRVFVRVNUWyJjZW50c181MCJdKzApICAgKiAwLjUwICk7CiAgICAKICAgICAgICAgICAgICAgICAgICAgICAgJHRvdGFsX2Nhc2g9JHRvdGFsX2Nhc2ggKyAoICgkX1JFUVVFU1RbInJtXzEiXSswKSAgICogMSApOwogICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfY2FzaD0kdG90YWxfY2FzaCArICggKCRfUkVRVUVTVFsicm1fNSJdKzApICAgKiA1ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICR0b3RhbF9jYXNoPSR0b3RhbF9jYXNoICsgKCAoJF9SRVFVRVNUWyJybV8xMCJdKzApICAgKiAxMCApOwogICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfY2FzaD0kdG90YWxfY2FzaCArICggKCRfUkVRVUVTVFsicm1fMjAiXSswKSAgICogMjAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHRvdGFsX2Nhc2g9JHRvdGFsX2Nhc2ggKyAoICgkX1JFUVVFU1RbInJtXzUwIl0rMCkgICAqIDUwICk7CiAgICAgICAgICAgICAgICAgICAgICAgICR0b3RhbF9jYXNoPSR0b3RhbF9jYXNoICsgKCAoJF9SRVFVRVNUWyJybV8xMDAiXSswKSAgICogMTAwICk7CgogICAgICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPGJyPlRvdGFsIEFtb3VudCBDb3VudGVkOiA8Zm9udCBzaXplPTggY29sb3I9IzJFQ0M3MSA+Uk0gIi5udW1iZXJfZm9ybWF0KCR0b3RhbF9jYXNoKzAsMiwiLiIsIiwiKS4iPC9mb250Pjxicj4iOwoKCiAgICAgICAgICAgICAgICAgICAgICAgLy8gZWNobyAiPGlucHV0IHR5cGU9YnV0dG9uIHZhbHVlPSdDYWxjdWxhdGUgJiBTYXZlIERyYWZ0JyBjbGFzcz1idXR0b25fYmx1ZSBvbmNsaWNrPVwibW9uX3N1Ym1pdF9mb3JtKCdjbG9zaW5nZm9ybScsJ3NjcmVlbi9mYXN0Y291bnRlci9jbG9zaW5nLnBocCcsJ3dpbmRvd19wb3BfY29udGFpbmVyJylcIiA+IjsKICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RkPiI7CiAgICAgICAgICAgICAgICBlY2hvICI8L3RyPiI7CgoKICAgICAgICAgICAgICAgICR0b3RhbF9kaWZmZXJlbnQgPSAgJHRvdGFsX2Nhc2ggLSAoICRfUkVRVUVTVFsiaW5pdGlhbF9jYXNoIl0gKyAkdG90YWxfc2FsZXMpOwoKCgoKICAgIGVjaG8gIjwvdGFibGU+IjsKICAgIAogICAgCiAgICAKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIAoKZWNobyAiPGhyIHN0eWxlPSdib3JkZXI6MHB4IHNvbGlkICMwMDA7Ym9yZGVyLXRvcDoycHggc29saWQgIzJDM0U1MDsnPiI7CgoKCgogICAgICAgICAgICBlY2hvICI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0ndXNlcl9hY3Rpb24nIHZhbHVlPScnID4iOwoKCiAgICAgICAgICAgIGVjaG8gIjx0YWJsZSB3aWR0aD05MCUgY2VsbHBhZGRpbmc9MTAgYm9yZGVyPTA+IjsKICAgICAgICAgICAgICAgIGVjaG8gIjx0cj4iOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0ZCB3aWR0aD0xODAgdmFsaWduPXRvcCA+IjsKCiAgICAgICAgICAgICAgICAgICAgJHF1ZXJ5X3VuY2xvc2U9InNlbGVjdCAqIGZyb20gdF8iLiRrZXlfdGFibGVfcHJlZml4LiJfc2FsZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHNhbF9zdGF0dXMgPSAnUEFJRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBpZm51bGwoc2FsX2Nsb3NpbmdfYmF0Y2gsJycpID0nJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjsKCiAgICAgICAgICAgICAgICAgICAgJHJlc3VsdF91bmNsb3NlID0gbXlzcWxfcXVlcnkoJHF1ZXJ5X3VuY2xvc2UpIG9yIGRpZSgiRXJyb3IiKS5teXNxbF9lcnJvcigpOwoKICAgICAgICAgICAgICAgICAgICBpZihteXNxbF9udW1fcm93cygkcmVzdWx0X3VuY2xvc2UpPjApCiAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxmb250IGNvbG9yPSMyRUNDNzEgc2l6ZT0yPlRvdGFsIG9mICIubXlzcWxfbnVtX3Jvd3MoJHJlc3VsdF91bmNsb3NlKS4iIGJpbGwocykgZm9yIGNsb3NpbmcuPC9mb250Pjxicj4iOwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPGZvbnQgc2l6ZT0yPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcXVlcnlfdW5jbG9zZV9ncm91cGluZyA9ICJzZWxlY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KHNhbF9pZCkgYXMgdG90YWxfYmlsbHMsIHNhbF9wYXltZW50X3RleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdF8iLiRrZXlfdGFibGVfcHJlZml4LiJfc2FsZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHNhbF9zdGF0dXMgPSAnUEFJRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBpZm51bGwoc2FsX2Nsb3NpbmdfYmF0Y2gsJycpID0nJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgYnkgc2FsX3BheW1lbnRfdGV4dCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI7CiAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHRfdW5jbG9zZV9ncm91cGluZyA9IG15c3FsX3F1ZXJ5KCRxdWVyeV91bmNsb3NlX2dyb3VwaW5nKSBvciBkaWUoIkVycm9yIikubXlzcWxfZXJyb3IoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCRsaW5lX3VuY2xvc2VfZ3JvdXBpbmcgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0X3VuY2xvc2VfZ3JvdXBpbmcsTVlTUUxfQVNTT0MpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxzcGFuIGNsYXNzPSdmYSBmYS1maWxlLXRleHQtbyBmYS0xeCc+PC9zcGFuPiAiLiRsaW5lX3VuY2xvc2VfZ3JvdXBpbmdbInNhbF9wYXltZW50X3RleHQiXS4iOiAiLiRsaW5lX3VuY2xvc2VfZ3JvdXBpbmdbInRvdGFsX2JpbGxzIl0uIjxicj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L2ZvbnQ+IjsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD4iOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGQgd2lkdGg9MTgwIHZhbGlnbj10b3AgPiI7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj0jMkVDQzcxIHNpemU9Mj5CaWxsKHMpIFRyYW5zYWN0ZWQgYnkgUGVyc29uLjwvZm9udD48YnI+IjsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8Zm9udCBzaXplPTI+IjsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzc2V0KCR0b3RhbF9iaWxsc19ieV9wZXJzb24pKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCR0b3RhbF9iaWxsc19ieV9wZXJzb24gYXMgJHBlcnNvbl9uYW1lID0+ICRwZXJzb25fdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHNwYW4gY2xhc3M9J2ZhIGZhLW1hbGUgZmEtMXgnPjwvc3Bhbj4gIi4kcGVyc29uX25hbWUuIjogIi4kcGVyc29uX3ZhbHVlLiI8YnI+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L2ZvbnQ+IjsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RkPiI7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PUNsb3Npbmcgd2l0aCBDb3VudGluZz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRkIGFsaWduPWNlbnRlciA+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPGRpdiBpZD0nZGl2X2Nsb3NpbmdfY29uZmlybWF0aW9uJyBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0O21hcmdpbi10b3A6LTIwMHB4O3otaW5kZXg6MjAwMDt2aXNpYmlsaXR5OmhpZGRlbjtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxMCU7d2lkdGg6NDIwcHg7aGVpZ2h0OjIwMHB4O2JhY2tncm91bmQ6IzM0NDk1RTtwYWRkaW5nOjEwcHg7Ym9yZGVyLXJhZGl1czoxMHB4Oyc+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiQ29uZmlybSBDbG9zaW5nIHdpdGggQ291bnRpbmc/PGJyPiI7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxkaXYgY2xhc3M9J2ZhLXN0YWNrIGZhLTJ4JyBzdHlsZT0nZmxvYXQ6cmlnaHQ7JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuJG1vZGVfYnV0dG9uX2V2ZW50LiI9XCJkb2N1bWVudC5jbG9zaW5nZm9ybS51c2VyX2FjdGlvbi52YWx1ZT0nQ09ORklSTSc7bW9uX3N1Ym1pdF9mb3JtKCdjbG9zaW5nZm9ybScsJ3NjcmVlbi9mYXN0Y291bnRlci9jbG9zaW5nLnBocCcsJ3dpbmRvd19wb3BfY29udGFpbmVyJyk7bW9uX2hpZGVfb2JqZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3aW5kb3dfcG9wJykpO1wiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGkgY2xhc3M9ImZhIGZhLWNpcmNsZSBmYS1zdGFjay0yeCIgc3R5bGU9ImNvbG9yOiMyN0FFNjA7IiA+PC9pPjxpIGNsYXNzPSJmYSBmYS1jaGVjayBmYS1zdGFjay0xeCI+PC9pPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvZGl2PiI7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxkaXYgY2xhc3M9J2ZhLXN0YWNrIGZhLTJ4JyBzdHlsZT0nZmxvYXQ6cmlnaHQ7JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuJG1vZGVfYnV0dG9uX2V2ZW50LiI9XCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2X2Nsb3NpbmdfY29uZmlybWF0aW9uJykuc3R5bGUudmlzaWJpbGl0eT0naGlkZGVuJzsgXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aSBjbGFzcz0iZmEgZmEtY2lyY2xlIGZhLXN0YWNrLTJ4IiBzdHlsZT0iY29sb3I6I0U3NEMzQzsiID48L2k+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIGZhLXN0YWNrLTF4Ij48L2k+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC9kaXY+IjsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvZGl2PiI7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPGRpdiBjbGFzcz0nZmEtc3RhY2sgZmEtbGcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi4kbW9kZV9idXR0b25fZXZlbnQuIj1cImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXZfY2xvc2luZ19jb25maXJtYXRpb24nKS5zdHlsZS52aXNpYmlsaXR5PSd2aXNpYmxlJzsgXCIKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxpIGNsYXNzPSJmYSBmYS1jaXJjbGUgZmEtc3RhY2stMngiIHN0eWxlPSJjb2xvcjojMjdBRTYwOyIgPjwvaT48aSBjbGFzcz0iZmEgZmEtY2hlY2sgZmEtc3RhY2stMXgiPjwvaT4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC9kaXY+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPGJyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8Zm9udCBzaXplPTI+Q2xvc2Ugd2l0aCBNb25leSBDb3VudGluZzwvZm9udD4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PUNsb3Npbmcgd2l0aG91dCBDb3VudGluZz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0ZCBhbGlnbj1jZW50ZXIgPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8ZGl2IGlkPSdkaXZfY2xvc2luZ19jb25maXJtYXRpb25fbm9fY291bnQnIHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQ7bWFyZ2luLXRvcDotMjAwcHg7ei1pbmRleDoyMDAwO3Zpc2liaWxpdHk6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEwJTt3aWR0aDo0MjBweDtoZWlnaHQ6MjAwcHg7YmFja2dyb3VuZDojMzQ0OTVFO3BhZGRpbmc6MTBweDtib3JkZXItcmFkaXVzOjEwcHg7Jz4iOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJDb25maXJtIENsb3NpbmcgYW5kIENvdW50IExhdGVyPzxicj4iOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8ZGl2IGNsYXNzPSdmYS1zdGFjayBmYS0yeCcgc3R5bGU9J2Zsb2F0OnJpZ2h0OycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLiRtb2RlX2J1dHRvbl9ldmVudC4iPVwiZG9jdW1lbnQuY2xvc2luZ2Zvcm0udXNlcl9hY3Rpb24udmFsdWU9J0NPTkZJUk1fTk9fQ09VTlQnO21vbl9zdWJtaXRfZm9ybSgnY2xvc2luZ2Zvcm0nLCdzY3JlZW4vZmFzdGNvdW50ZXIvY2xvc2luZy5waHAnLCd3aW5kb3dfcG9wX2NvbnRhaW5lcicpO21vbl9oaWRlX29iamVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd2luZG93X3BvcCcpKTtcIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxpIGNsYXNzPSJmYSBmYS1jaXJjbGUgZmEtc3RhY2stMngiIHN0eWxlPSJjb2xvcjojRjM5QzEyOyIgPjwvaT48aSBjbGFzcz0iZmEgZmEtY2hlY2sgZmEtc3RhY2stMXgiPjwvaT4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L2Rpdj4iOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8ZGl2IGNsYXNzPSdmYS1zdGFjayBmYS0yeCcgc3R5bGU9J2Zsb2F0OnJpZ2h0OycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLiRtb2RlX2J1dHRvbl9ldmVudC4iPVwiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rpdl9jbG9zaW5nX2NvbmZpcm1hdGlvbl9ub19jb3VudCcpLnN0eWxlLnZpc2liaWxpdHk9J2hpZGRlbic7IFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGkgY2xhc3M9ImZhIGZhLWNpcmNsZSBmYS1zdGFjay0yeCIgc3R5bGU9ImNvbG9yOiNFNzRDM0M7IiA+PC9pPjxpIGNsYXNzPSJmYSBmYS10aW1lcyBmYS1zdGFjay0xeCI+PC9pPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvZGl2PiI7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L2Rpdj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxkaXYgY2xhc3M9J2ZhLXN0YWNrIGZhLWxnJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi4kbW9kZV9idXR0b25fZXZlbnQuIj1cImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXZfY2xvc2luZ19jb25maXJtYXRpb25fbm9fY291bnQnKS5zdHlsZS52aXNpYmlsaXR5PSd2aXNpYmxlJzsgXCIKICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxpIGNsYXNzPSJmYSBmYS1jaXJjbGUgZmEtc3RhY2stMngiIHN0eWxlPSJjb2xvcjojRjM5QzEyOyIgPjwvaT48aSBjbGFzcz0iZmEgZmEtY2hlY2sgZmEtc3RhY2stMXgiPjwvaT4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC9kaXY+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8YnI+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxmb250IHNpemU9Mj5DbG9zZSBidXQgQ291bnQgTGF0ZXI8L2ZvbnQ+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RkPiI7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlewoKCgogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8ZGl2IHN0eWxlPSdiYWNrZ3JvdW5kOiNFNzRDM0M7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MjBweDt3aWR0aDozMDBweDsnIGlkPSdwYXlfZXJyb3JfbWVzc2FnZSc+IjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiTm8gVW5jbG9zZSBCaWxsKHMpIjsKCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvZGl2PiI7CgoKICAgICAgICAgICAgICAgICAgICB9CgoKCgoKCgogICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+IjsKICAgICAgICAgICAgICAgIGVjaG8gIjwvdHI+IjsKCiAgICAgICAgICAgIGVjaG8gIjwvdGFibGU+IjsKCgoKICAgICAgICAgICAvLyBlY2hvICI8aW5wdXQgdHlwZT1idXR0b24gdmFsdWU9J0NvbmZpcm0gQ2xvc2luZycgY2xhc3M9YnV0dG9uX2JsdWUgb25jbGljaz1cImRvY3VtZW50LmNsb3Npbmdmb3JtLnVzZXJfYWN0aW9uLnZhbHVlPSdDT05GSVJNJzttb25faGlkZV9vYmplY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dpbmRvd19wb3AnKSk7bW9uX3N1Ym1pdF9mb3JtKCdjbG9zaW5nZm9ybScsJ3NjcmVlbi9mYXN0Y291bnRlci9jbG9zaW5nLnBocCcsJ3dpbmRvd19wb3BfY29udGFpbmVyJylcIiA+IjsKICAgICAgICAgICAvLyBlY2hvICIgPGlucHV0IHR5cGU9YnV0dG9uIHZhbHVlPSdDbG9zZSBXaW5kb3cnIGNsYXNzPWJ1dHRvbl9yZWQgb25jbGljaz1cIm1vbl9zZW5kX2dldCgnc2NyZWVuL2Zhc3Rjb3VudGVyL21haW4ucGhwJywnZGl2X2NvbnRlbnQnKTttb25faGlkZV9vYmplY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dpbmRvd19wb3AnKSk7XCIgID4iOwogICAgZWNobyAiPC9mb3JtPiI7CgoKCgokYWRkb25fcGF0aD0iLi4vLi4vIjsKaW5jbHVkZSAkYWRkb25fcGF0aC4iaW5jbHVkZXMvZW5kX2FqYXgucGhwIjsKPz4=")); ?>
Function Calls
base64_decode | 2 |
Stats
MD5 | 372bda5d72a15074d94db995f1cb1892 |
Eval Count | 1 |
Decode Time | 170 ms |