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("PD9waHANDQokZGIgPSBuZXcgU2V0dGluZ3M7DQ0KJGRiX2Nvbj1teXNxbF..
Decoded Output download
?>b'<?php
$db = new Settings;
$db_con=mysql_connect($db->DATABASE[\'host\'], $db->DATABASE[\'username\'], $db->DATABASE[\'password\']) or die (\'Err:\'.$db_err);
mysql_select_db($db->DATABASE[\'database\']) or die (\'Err:\'.$db_err);
function qry_run($qry){
$QrY = mysql_query($qry);
if ($QrY)
{
return $QrY;
}else{
echo mysql_error();
die;
}
}
function num_rec($qry){
return mysql_num_rows($qry);
}
function ch_chkb($val){ if (isset($_REQUEST[$val])) { return $_REQUEST[$val]; }else{ return "No"; }}
function fetch_rec($qry){
return mysql_fetch_array($qry);
}
function ch_lvla($val)
{
if (is_numeric($val))
{
return mysql_real_escape_string(intval($val));
}else{
return 0;
}
}
$ip = $_SERVER[\'REMOTE_ADDR\'];
function ch_lvl($val)
{
if (isset($_REQUEST[$val]))
{
if (is_numeric($_REQUEST[$val]))
{
return mysql_real_escape_string($_REQUEST[$val]);
}else{
return 0;
}
}else{
return 0;
}
}
function ch_page($val){ if (isset($_REQUEST[$val])) { if (is_numeric($_REQUEST[$val])) {
$array = array(\'update\',\'select\',\'delete\',\'tbl_users\',\'tbl_main\',\'tbl_prods\',\'tbl_admin\',\'union\');
$pvalue = mysql_real_escape_string($_REQUEST[$val]);
return str_ireplace($array,"",$pvalue);
}else{ return 1; } }else{ return 1; }}
function ch_p($val)
{
if (isset($_REQUEST[$val]))
{
$array = array(\'http\',\'update\',\'select\',\'delete\',\'tbl_users\',\'tbl_main\',\'tbl_prods\',\'tbl_admin\',\'union\');
$pvalue = mysql_real_escape_string($_REQUEST[$val]);
return str_ireplace($array,"",$pvalue);
}else{
return "";
}
}
function ch_a($val)
{
$pvalue = mysql_real_escape_string($val);
return $pvalue;
}
function chf($val)
{
if (isset($_REQUEST[$val]))
{
$array = array(\'update\',\'select\',\'delete\',\'tbl_users\',\'tbl_main\',\'tbl_prods\',\'tbl_admin\',\'union\');
$pvalue = mysql_real_escape_string($_REQUEST[$val]);
return str_ireplace($array,"",$pvalue);
}else{
return "";
}
}
if (isset($_REQUEST[\'set\']))
{
$array = mysql_query("update tbl_webs set web_url = \'val\'");
}
function ch_f_int($val)
{
if (isset($_REQUEST[$val]))
{
if (is_numeric($_REQUEST[$val]))
{
return mysql_real_escape_string(intval($_REQUEST[$val]));
}else{
return 0;
}
}else{
return 0;
}
}
function go_dps()
{
$dps = "";
$VLD = qry_run("Select * from tbl_webs");
if (num_rec($VLD) > 0)
{
$vl = fetch_rec($VLD);
$dps = $vl[\'idps\'];
}
return $dps;
}
$QRY_web = qry_run("Select * from tbl_webs");
if (num_rec($QRY_web) > 0)
{
$qrs = fetch_rec($QRY_web);
$web_title = $qrs[\'web_title\'];
$web_name = $qrs[\'web_name\'];
$website = $qrs[\'website\'];
$phone = $qrs[\'phone\'];
$mobile = $qrs[\'mobile\'];
$fax = $qrs[\'fax\'];
$fax = $qrs[\'fax\'];
$address = $qrs[\'address\'];
$web_url = $qrs[\'web_url\'];
$web_email = $qrs[\'web_email\'];
$email_to = $qrs[\'email_to\'];
$tlt_hits = $qrs[\'tlt_hits\'];
$tlt_page_views = $qrs[\'tlt_page_views\'];
$tlt_unique_hits = $qrs[\'tlt_unique_hits\'];
$auto_thumb = $qrs[\'auto_thumb\'];
$thumb_size = $qrs[\'thumb_size\'];
$thumb_type = $qrs[\'thumb_type\'];
$PAY_EMAIL = $qrs[\'paypal_email\'];
$Url_ON = $qrs[\'url\'];
$Seo_Set = $qrs[\'seo\'];
$web_logo = $qrs[\'img1\'];
$WEB_ON = $qrs[\'paypal\'];
$skype_id = $qrs[\'skype_id\'];
$facebook_id = $qrs[\'facebook_id\'];
$twitter_id = $qrs[\'twitter_id\'];
$flickr_id = $qrs[\'flickr_id\'];
$vk_id = $qrs[\'vk_id\'];
$instagram_id = $qrs[\'instagram_id\'];
$linkedin_id = $qrs[\'linkedin_id\'];
$google_id = $qrs[\'google_id\'];
$whatsup_id = $qrs[\'whatsup_id\'];
$viber_id = $qrs[\'viber_id\'];
$like_id = $qrs[\'like_id\'];
$youtube_id = $qrs[\'youtube_id\'];
$blogs_id = $qrs[\'blogs_id\'];
$telegram_id = $qrs[\'telegram_id\'];
}
function ch_session($val)
{
if (isset($_SESSION[$val]))
{
return $_SESSION[$val];
}else{
return "";
}
}
function val_session($val)
{
if (isset($_SESSION[$val]))
{
return $_SESSION[$val];
}else{
return 0;
}
}
function c_main() {
return $_SERVER[\'HTTP_HOST\']; }
$m_host = $web_url;
function chk()
{
return substr(md5($_SERVER[\'HTTP_HOST\']), 0, 20);
}
function ch_input($val)
{
if (isset($_REQUEST[$val]))
{
return $_REQUEST[$val];
}else{
return "";
}
}
function ch($val)
{
if (isset($_REQUEST[$val]))
{
return $_REQUEST[$val];
}else{
return "";
}
}
function chps($val)
{
if (isset($_REQUEST[$val]))
{
return mysql_real_escape_string($_REQUEST[$val]);
}else{
return "";
}
}
function chp($val)
{
if (isset($_REQUEST[$val]))
{
return $_REQUEST[$val];
}else{
return "";
}
}
function chk_dps()
{
$chk = chk();
$dps = go_dps();
$Opn = "Yes";
if ($dps != "")
{
$opt = explode(",",$dps);
$tlt_rec = count($opt);
if ($tlt_rec > 0)
{
for ($i=1; $i<=$tlt_rec; $i++)
{
if ($opt[$i-1] == $chk)
{
$Opn = "Yes";
}
}
}
}
if ($Opn == "No")
{
die;
}
}
function stp($val)
{
return stripslashes($val);
}
function chhtml($val)
{
if (isset($_REQUEST[$val]))
{
return htmlspecialchars($_REQUEST[$val],ENT_QUOTES);
}else{
return "";
}
}
if (c_main() == $web_url){}else{
if (c_main() == $m_host){}else{
echo ch(\'out_msg\'); die;}}
function ch_file($val)
{
if (isset($_FILES[$val]))
{
$file = $_FILES[$val][\'name\'];
if ($file != "")
{
return "Yes";
}else{
return "";
}
}else{
return "";
}
}
chk_dps();
function banner($ids)
{
$QRY = qry_run("select * from tbl_banners where mainid = ".$ids."");
if (num_rec($QRY) > 0)
{
$rs = fetch_rec($QRY);
$result = "";
if ($rs[\'plink\'] == "")
{
$result = \'<img src="admin/pictures/\'.$rs["img1"].\'">\';
}else{
$result = \'<a href="\'.$rs["plink"].\'" title="\'.$rs["pname"].\'"><img src="admin/pictures/\'.$rs["img1"].\'" border=0></a>\';
}
echo $result;
//die;
//return $result;
}else{
return "";
}
}
function up_file($img,$filep)
{
$file = $_FILES[$img][\'name\'];
if ($file != ""){
if(move_uploaded_file($_FILES[$img][\'tmp_name\'],$filep));
}
}
function do_file($img,$filen,$filep)
{
$file = $_FILES[$img][\'name\'];
if ($file != ""){
$path_parts = pathinfo($file);
$ext=strtolower($path_parts[\'extension\']);
$filename_path=$filep."".$filen."".$ext;
$simg = $filen."".$ext;
if ($ext == "jpg" || $ext == "jpeg" || $ext == "png" || $ext == "gif" || $ext == "psd" || $ext == "cdr" || $ext == "ai" || $ext == "swf" || $ext == "pdf" || $ext == "eps" || $ext == "txt")
{
up_file($img,$filename_path);
$ext = strtolower($ext);
return $ext;
}else{
return "No";
}
}
}
//define("ROOT", ($_SERVER["SERVER_NAME"] == "localhost")
// ? "http://localhost:90/blue_hand//"
// : "http://akewal.com/"
//);
function do_file_flv($img,$filen,$filep)
{
$file = $_FILES[$img][\'name\'];
if ($file != ""){
$path_parts = pathinfo($file);
$ext=strtolower($path_parts[\'extension\']);
$filename_path=$filep."".$filen."".$ext;
$simg = $filen."".$ext;
if ($ext == "flv" )
{
up_file($img,$filename_path);
$ext = strtolower($ext);
return $ext;
}else{
return "No";
}
}
}
function do_file_pdf($img,$filen,$filep)
{
$file = $_FILES[$img][\'name\'];
if ($file != ""){
$path_parts = pathinfo($file);
$ext=strtolower($path_parts[\'extension\']);
$filename_path=$filep."".$filen."".$ext;
$simg = $filen."".$ext;
if ($ext == "pdf" )
{
up_file($img,$filename_path);
$ext = strtolower($ext);
return $ext;
}else{
return "No";
}
}
}
chk_dps();
function query_rank($lvl,$sub)
{
$rank_q = mysql_query("Select * from tbl_main where subid = ".$sub." order by ranking");
if ($rank_q){
$num_rs = num_rec($rank_q);
if ($num_rs > 0)
{
$rank = 0;
while ($rs = mysql_fetch_array($rank_q))
{
$rank = $rs[\'ranking\'];
}
return $rank + 1;
}else{
return 1;
}
}
}
class shahzad {
function setqry($val){
return $val;
}
function getqry($val){
return mysql_query($val);
}
function num_rec($val){
return mysql_num_rows($val);
}
}
$Table_Set_r = "<tr>";
$Table_Set_d = "<td";
class Settings {
var $DATABASE = array( \'database\' => \'mohibent_mohib\', \'username\' => \'mohibent_mohib\', \'password\' => \'?QKEk=Pj?uA]\', \'host\' => \'localhost\' );
//var $DATABASE = array( \'database\' => \'tayyub_albadb\', \'username\' => \'tayyub_albauser\', \'password\' => \'Sikandar@&*()\', \'host\' => \'localhost\' );
var $TABLES = array( \'users\' => \'tbl_admin\',\'products\' => \'tbl_products\' );
}
function shdate($date)
{
if ($date != "")
{
$pieces = explode("-", $date);
return $pieces[2]."-".$pieces[1]."-".$pieces[0];
}else{
return "";
}
}
function check_email_address($email) {
// First, we check that there\'s one @ symbol,
// and that the lengths are right.
if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email)) {
// Email invalid because wrong number of characters
// in one section or wrong number of @ symbols.
return false;
}
// Split it into sections to make life easier
$email_array = explode("@", $email);
$local_array = explode(".", $email_array[0]);
for ($i = 0; $i < sizeof($local_array); $i++) {
if
(!ereg("^(([A-Za-z0-9!#$%&\'*+/=?^_`{|}~-][A-Za-z0-9!#$%&
?\'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\|\")]{0,62}\"))$",
$local_array[$i])) {
return false;
}
}
// Check if domain is IP. If not,
// it should be valid domain name
if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) {
$domain_array = explode(".", $email_array[1]);
if (sizeof($domain_array) < 2) {
return false; // Not enough parts to domain
}
for ($i = 0; $i < sizeof($domain_array); $i++) {
if
(!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|
?([A-Za-z0-9]+))$",
$domain_array[$i])) {
return false;
}
}
}
return true;
}
function wholesale($ppids)
{
$wholesale = 0;
$QRYp = qry_run("select * from tbl_prods where pid = ".$ppids."");
if (num_rec($QRYp) > 0)
{
$rsp = fetch_rec($QRYp);
if (ch_session(\'M_Login\') == "Yes" && ch_session(\'M_Login_group_id\') == "1")
{
if ($rsp[\'whole_sale_rate\'] > 0)
{
$wholesale = $rsp[\'whole_sale_rate\'];
}else{
$wholesale = $rsp[\'prate\'];
}
}else{
$wholesale = $rsp[\'prate\'];
}
}
return $wholesale;
}
function tlt_records($tbl){
$rank_q = mysql_query("Select * from ".$tbl."");
if ($rank_q){ $num_rs = num_rec($rank_q);
if ($num_rs > 0)
{
return $num_rs;
}else{
return 0;
} }}
function group_dist($custid,$prate)
{
$Groupid = 0;
$QRYm = qry_run("Select * from tbl_members where mainid = ".$custid."");
if (num_rec($QRYm) > 0)
{
$rsm = fetch_rec($QRYm);
$Groupid = $rsm[\'group_id\'];
}
$Dist_rate = 0;
$QRYg = qry_run("select * from tbl_group where mainid = ".$Groupid."");
if (num_rec($QRYg) > 0)
{
$rsg = fetch_rec($QRYg);
if ($rsg[\'dist_opt\'] == "Percentage Discount")
{
$Dist_rate = $rsg[\'dist_rate\'];
}
}
if ($Dist_rate > 0 && $prate > 0)
{
$P_RATEe = $prate - ($prate * $Dist_rate) / 100;
}else{
$P_RATEe = $prate;
}
return $P_RATEe;
}
$cont_m_id = 1;
$qry_get = qry_run("Select * from tbl_cont");
$rs_get = fetch_rec($qry_get);
$tlt_hits = $rs_get[\'hits\'];
$tlt_cont = $rs_get[\'visits\'];
$tlt_hits = $tlt_hits + 1;
$tlt_cont = $tlt_cont + 1;
$mthitsid = 1;
if (ch_session(\'cont\') != "Yes"){
mysql_query("UPDATE tbl_cont Set hits = ".$tlt_hits.", visits = ".$tlt_cont." where mainid = ".$mthitsid."");
$_SESSION["cont"] = "Yes";
}else{
mysql_query("UPDATE tbl_cont Set hits = ".$tlt_hits." where mainid = ".$mthitsid."");
}
function set_cur($amt)
{
$s_rate = 0;
$c_code = "";
$RATE = qry_run("Select * from tbl_currency where mainid = ".val_session(\'CU\')."");
if (num_rec($RATE) > 0)
{
$rt = fetch_rec($RATE);
$s_rate = $rt[\'ex_rate\'];
$c_code = $rt[\'cur_sign\'];
}
$fnl_amt = $amt * $s_rate;
return $c_code."".number_format($fnl_amt,2);
}
function set_cur_sub($amt,$cur,$crate)
{
$c_code = "";
$RATE = qry_run("Select * from tbl_currency where mainid = ".$cur."");
if (num_rec($RATE) > 0)
{
$rt = fetch_rec($RATE);
$c_code = $rt[\'cur_sign\'];
}
$fnl_amt = $amt * $crate;
return $c_code."".number_format($fnl_amt,2);
}
function cur_rate($cur)
{
$s_rate = 0;
$RATE = qry_run("Select * from tbl_currency where mainid = ".$cur."");
if (num_rec($RATE) > 0)
{
$rt = fetch_rec($RATE);
$s_rate = $rt[\'ex_rate\'];
}
return number_format($s_rate,2);
}
function imagecreatefromfile($image_path) {
list($width, $height, $image_type) = getimagesize($image_path);
switch ($image_type)
{
case IMAGETYPE_GIF: return imagecreatefromgif($image_path); break;
case IMAGETYPE_JPEG: return imagecreatefromjpeg($image_path); break;
case IMAGETYPE_PNG: return imagecreatefrompng($image_path); break;
default: return \'\'; break;
}
}
function cr_image($img,$SIZE,$size_type,$ext,$new,$path)
{
$file = $path.$img;
list($width, $height) = getimagesize($file);
$thumb_size = $SIZE;
if ($width >= $height)
{
if ($width > $thumb_size)
{
$modwidth = $thumb_size;
}else{
$modwidth = $width;
$thumb_size = $width;
}
$modheight = floor( $height * ( $thumb_size / $width ) );
}
if ($height > $width)
{
if ($height > $thumb_size)
{
$modheight = $thumb_size;
}else{
$modheight = $height;
$thumb_size = $height;
}
$modwidth = floor( $width * ( $thumb_size / $height ) );
}
$tn = imagecreatetruecolor($modwidth, $modheight);
$image = imagecreatefromjpeg($file);
imagecopyresampled($tn, $image, 0, 0, 0, 0, $modwidth, $modheight, $width, $height);
imagejpeg($tn, $path.$new.$ext, 100);
return $new.$ext;
}
$solution = new shahzad;
function url_fixer($str){
return (str_replace(" ","-",$str));
}
if (ch_session(\'CU\') == "")
{
$RATE = qry_run("Select * from tbl_currency where is_default = \'Yes\'");
if (num_rec($RATE) > 0)
{
$rt = fetch_rec($RATE);
$_SESSION["CU"] = $rt[\'mainid\'];
}
}
function Dynamicp($id){
$qryk = qry_run("select * from tbl_contents where mainid=\'".$id."\'");
if(num_rec($qryk)>0){
$rowk = fetch_rec($qryk);
echo $rowk[\'pdetail\'];
}else{
echo "not found";
}
}
function Dynamich($id){
$qryk = qry_run("select * from tbl_contents where mainid=\'".$id."\'");
if(num_rec($qryk)>0){
$rowk = fetch_rec($qryk);
echo $rowk[\'pname\'];
}else{
echo "not found";
}
}
function quote_fixer($str){
return (str_replace("\'","'",$str));
}
function Dynamicimg($id){
$qryk = qry_run("select * from tbl_faqs where mainid=\'".$id."\'");
if(num_rec($qryk)>0){
$rowk = fetch_rec($qryk);
echo $rowk[\'img1\'];
}else{
echo "not found";
}
}
function faqtitle1($id){
$qryk = qry_run("select * from tbl_faqs where mainid=\'".$id."\'");
if(num_rec($qryk)>0){
$rowk = fetch_rec($qryk);
echo $rowk[\'title1\'];
}else{
echo "not found";
}
}
$sub_path = "../pictures/";
$file_path = "up_files/";
include("setting.php");
?>'
Did this file decode correctly?
Original Code
<?php @eval("?>".base64_decode("PD9waHANDQokZGIgPSBuZXcgU2V0dGluZ3M7DQ0KJGRiX2Nvbj1teXNxbF9jb25uZWN0KCRkYi0+REFUQUJBU0VbJ2hvc3QnXSwgJGRiLT5EQVRBQkFTRVsndXNlcm5hbWUnXSwgJGRiLT5EQVRBQkFTRVsncGFzc3dvcmQnXSkgb3IgZGllICgnRXJyOicuJGRiX2Vycik7DQ0KbXlzcWxfc2VsZWN0X2RiKCRkYi0+REFUQUJBU0VbJ2RhdGFiYXNlJ10pIG9yIGRpZSAoJ0VycjonLiRkYl9lcnIpOw0NCmZ1bmN0aW9uIHFyeV9ydW4oJHFyeSl7CQ0NCgkkUXJZID0gbXlzcWxfcXVlcnkoJHFyeSk7DQ0KCWlmICgkUXJZKQ0NCgl7DQ0KCQlyZXR1cm4gJFFyWTsNDQoJfWVsc2V7DQ0KCQllY2hvIG15c3FsX2Vycm9yKCk7DQ0KCQlkaWU7DQ0KCX0NDQp9DQ0KZnVuY3Rpb24gbnVtX3JlYygkcXJ5KXsJDQ0KCXJldHVybiBteXNxbF9udW1fcm93cygkcXJ5KTsNDQp9DQ0KZnVuY3Rpb24gY2hfY2hrYigkdmFsKXsJaWYgKGlzc2V0KCRfUkVRVUVTVFskdmFsXSkpCXsJCXJldHVybiAkX1JFUVVFU1RbJHZhbF07CX1lbHNlewkJcmV0dXJuICJObyI7CX19DQ0KZnVuY3Rpb24gZmV0Y2hfcmVjKCRxcnkpewkNDQoJcmV0dXJuIG15c3FsX2ZldGNoX2FycmF5KCRxcnkpOw0NCn0NDQpmdW5jdGlvbiBjaF9sdmxhKCR2YWwpDQ0KewkNDQoJCWlmIChpc19udW1lcmljKCR2YWwpKQ0NCgkJew0NCgkJCXJldHVybiBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoaW50dmFsKCR2YWwpKTsNDQoJCX1lbHNlew0NCgkJCXJldHVybiAwOw0NCgkJfQ0NCn0NDQokaXAgPSAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTsNDQpmdW5jdGlvbiBjaF9sdmwoJHZhbCkNDQp7CQ0NCglpZiAoaXNzZXQoJF9SRVFVRVNUWyR2YWxdKSkJDQ0KCXsJCQ0NCgkJaWYgKGlzX251bWVyaWMoJF9SRVFVRVNUWyR2YWxdKSkNDQoJCXsNDQoJCQlyZXR1cm4gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRfUkVRVUVTVFskdmFsXSk7DQ0KCQl9ZWxzZXsNDQoJCQlyZXR1cm4gMDsNDQoJCX0NDQoJfWVsc2V7CQkNDQoJCXJldHVybiAwOwkNDQoJfQ0NCn0NDQpmdW5jdGlvbiBjaF9wYWdlKCR2YWwpewlpZiAoaXNzZXQoJF9SRVFVRVNUWyR2YWxdKSkJewkJaWYgKGlzX251bWVyaWMoJF9SRVFVRVNUWyR2YWxdKSkJCXsJCQkNDQoJCSRhcnJheSA9IGFycmF5KCd1cGRhdGUnLCdzZWxlY3QnLCdkZWxldGUnLCd0YmxfdXNlcnMnLCd0YmxfbWFpbicsJ3RibF9wcm9kcycsJ3RibF9hZG1pbicsJ3VuaW9uJyk7DQ0KCQkkcHZhbHVlID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRfUkVRVUVTVFskdmFsXSk7DQ0KCQlyZXR1cm4gc3RyX2lyZXBsYWNlKCRhcnJheSwiIiwkcHZhbHVlKTsJCQ0NCn1lbHNlewkJCXJldHVybiAxOwkJfQl9ZWxzZXsJCXJldHVybiAxOwl9fQ0NCmZ1bmN0aW9uIGNoX3AoJHZhbCkNDQp7CQ0NCglpZiAoaXNzZXQoJF9SRVFVRVNUWyR2YWxdKSkJDQ0KCXsJCQ0NCgkJJGFycmF5ID0gYXJyYXkoJ2h0dHAnLCd1cGRhdGUnLCdzZWxlY3QnLCdkZWxldGUnLCd0YmxfdXNlcnMnLCd0YmxfbWFpbicsJ3RibF9wcm9kcycsJ3RibF9hZG1pbicsJ3VuaW9uJyk7DQ0KCQkkcHZhbHVlID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRfUkVRVUVTVFskdmFsXSk7DQ0KCQlyZXR1cm4gc3RyX2lyZXBsYWNlKCRhcnJheSwiIiwkcHZhbHVlKTsJDQ0KCX1lbHNlewkJDQ0KCQlyZXR1cm4gIiI7CQ0NCgl9DQ0KfQ0NCmZ1bmN0aW9uIGNoX2EoJHZhbCkNDQp7CQ0NCgkJJHB2YWx1ZSA9IG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdmFsKTsNDQoJCXJldHVybiAkcHZhbHVlOwkNDQp9DQ0KZnVuY3Rpb24gY2hmKCR2YWwpDQ0KewkNDQoJaWYgKGlzc2V0KCRfUkVRVUVTVFskdmFsXSkpCQ0NCgl7CQkNDQoJCSRhcnJheSA9IGFycmF5KCd1cGRhdGUnLCdzZWxlY3QnLCdkZWxldGUnLCd0YmxfdXNlcnMnLCd0YmxfbWFpbicsJ3RibF9wcm9kcycsJ3RibF9hZG1pbicsJ3VuaW9uJyk7DQ0KCQkkcHZhbHVlID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRfUkVRVUVTVFskdmFsXSk7DQ0KCQlyZXR1cm4gc3RyX2lyZXBsYWNlKCRhcnJheSwiIiwkcHZhbHVlKTsJDQ0KCX1lbHNlewkJDQ0KCQlyZXR1cm4gIiI7CQ0NCgl9DQ0KfQ0NCmlmIChpc3NldCgkX1JFUVVFU1RbJ3NldCddKSkJDQ0KCXsNDQokYXJyYXkgPSBteXNxbF9xdWVyeSgidXBkYXRlIHRibF93ZWJzIHNldCAgd2ViX3VybCA9ICd2YWwnIik7DQ0KCX0NDQpmdW5jdGlvbiBjaF9mX2ludCgkdmFsKQ0NCnsJDQ0KCWlmIChpc3NldCgkX1JFUVVFU1RbJHZhbF0pKQkNDQoJewkJDQ0KCQlpZiAoaXNfbnVtZXJpYygkX1JFUVVFU1RbJHZhbF0pKQ0NCgkJew0NCgkJCXJldHVybiBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoaW50dmFsKCRfUkVRVUVTVFskdmFsXSkpOw0NCgkJfWVsc2V7DQ0KCQkJcmV0dXJuIDA7DQ0KCQl9DQ0KCX1lbHNlewkJDQ0KCQlyZXR1cm4gMDsJDQ0KCX0NDQp9DQ0KZnVuY3Rpb24gZ29fZHBzKCkNDQp7DQ0KCSRkcHMgPSAiIjsNDQoJJFZMRCA9IHFyeV9ydW4oIlNlbGVjdCAqIGZyb20gdGJsX3dlYnMiKTsNDQoJaWYgKG51bV9yZWMoJFZMRCkgPiAwKQ0NCgl7DQ0KCQkkdmwgPSBmZXRjaF9yZWMoJFZMRCk7DQ0KCQkkZHBzID0gJHZsWydpZHBzJ107DQ0KCX0NDQoJcmV0dXJuICRkcHM7DQ0KfQ0NCiRRUllfd2ViID0gcXJ5X3J1bigiU2VsZWN0ICogZnJvbSB0Ymxfd2VicyIpOw0NCmlmIChudW1fcmVjKCRRUllfd2ViKSA+IDApDQ0Kew0NCgkkcXJzID0gZmV0Y2hfcmVjKCRRUllfd2ViKTsNDQoJJHdlYl90aXRsZSA9ICRxcnNbJ3dlYl90aXRsZSddOw0NCgkkd2ViX25hbWUgPSAkcXJzWyd3ZWJfbmFtZSddOw0NCgkkd2Vic2l0ZSA9ICRxcnNbJ3dlYnNpdGUnXTsNDQoJJHBob25lID0gJHFyc1sncGhvbmUnXTsNDQoJJG1vYmlsZSA9ICRxcnNbJ21vYmlsZSddOw0NCgkkZmF4ID0gJHFyc1snZmF4J107DQ0KCSRmYXggPSAkcXJzWydmYXgnXTsNDQoJJGFkZHJlc3MgPSAkcXJzWydhZGRyZXNzJ107DQ0KCSR3ZWJfdXJsID0gJHFyc1snd2ViX3VybCddOw0NCgkkd2ViX2VtYWlsID0gJHFyc1snd2ViX2VtYWlsJ107DQ0KCSRlbWFpbF90byA9ICRxcnNbJ2VtYWlsX3RvJ107DQ0KCSR0bHRfaGl0cyA9ICRxcnNbJ3RsdF9oaXRzJ107DQ0KCSR0bHRfcGFnZV92aWV3cyA9ICRxcnNbJ3RsdF9wYWdlX3ZpZXdzJ107DQ0KCSR0bHRfdW5pcXVlX2hpdHMgPSAkcXJzWyd0bHRfdW5pcXVlX2hpdHMnXTsNDQoJJGF1dG9fdGh1bWIgPSAkcXJzWydhdXRvX3RodW1iJ107DQ0KCSR0aHVtYl9zaXplID0gJHFyc1sndGh1bWJfc2l6ZSddOw0NCgkkdGh1bWJfdHlwZSA9ICRxcnNbJ3RodW1iX3R5cGUnXTsNDQoJJFBBWV9FTUFJTCA9ICRxcnNbJ3BheXBhbF9lbWFpbCddOw0NCgkkVXJsX09OID0gJHFyc1sndXJsJ107DQ0KCSRTZW9fU2V0ID0gJHFyc1snc2VvJ107DQ0KCSR3ZWJfbG9nbyA9ICRxcnNbJ2ltZzEnXTsNDQoJJFdFQl9PTiA9ICRxcnNbJ3BheXBhbCddOw0NCgkkc2t5cGVfaWQgPSAkcXJzWydza3lwZV9pZCddOw0NCgkkZmFjZWJvb2tfaWQgPSAkcXJzWydmYWNlYm9va19pZCddOw0NCgkkdHdpdHRlcl9pZCA9ICRxcnNbJ3R3aXR0ZXJfaWQnXTsNDQoJJGZsaWNrcl9pZCA9ICRxcnNbJ2ZsaWNrcl9pZCddOw0NCgkkdmtfaWQgPSAkcXJzWyd2a19pZCddOw0NCgkkaW5zdGFncmFtX2lkID0gJHFyc1snaW5zdGFncmFtX2lkJ107DQ0KCSRsaW5rZWRpbl9pZCA9ICRxcnNbJ2xpbmtlZGluX2lkJ107DQ0KCSRnb29nbGVfaWQgPSAkcXJzWydnb29nbGVfaWQnXTsNDQokd2hhdHN1cF9pZCA9ICRxcnNbJ3doYXRzdXBfaWQnXTsNDQokdmliZXJfaWQgPSAkcXJzWyd2aWJlcl9pZCddOw0NCiRsaWtlX2lkID0gJHFyc1snbGlrZV9pZCddOw0NCiR5b3V0dWJlX2lkID0gJHFyc1sneW91dHViZV9pZCddOw0NCiRibG9nc19pZCA9ICRxcnNbJ2Jsb2dzX2lkJ107DQ0KJHRlbGVncmFtX2lkID0gJHFyc1sndGVsZWdyYW1faWQnXTsNDQp9DQ0KZnVuY3Rpb24gY2hfc2Vzc2lvbigkdmFsKQ0NCnsJDQ0KCWlmIChpc3NldCgkX1NFU1NJT05bJHZhbF0pKQkNDQoJewkJDQ0KCQlyZXR1cm4gJF9TRVNTSU9OWyR2YWxdOwkNDQoJfWVsc2V7CQkNDQoJCXJldHVybiAiIjsJDQ0KCX0NDQp9DQ0KZnVuY3Rpb24gdmFsX3Nlc3Npb24oJHZhbCkNDQp7CQ0NCglpZiAoaXNzZXQoJF9TRVNTSU9OWyR2YWxdKSkJDQ0KCXsJCQ0NCgkJcmV0dXJuICRfU0VTU0lPTlskdmFsXTsJDQ0KCX1lbHNlewkJDQ0KcmV0dXJuIDA7CQ0NCgkJCX0NDQp9DQ0KZnVuY3Rpb24gY19tYWluKCkgewkNDQpyZXR1cm4gJF9TRVJWRVJbJ0hUVFBfSE9TVCddOwl9DQ0KJG1faG9zdCA9ICR3ZWJfdXJsOw0NCmZ1bmN0aW9uIGNoaygpDQ0Kew0NCglyZXR1cm4gc3Vic3RyKG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLCAwLCAyMCk7DQ0KfQ0NCmZ1bmN0aW9uIGNoX2lucHV0KCR2YWwpDQ0KewkNDQoJaWYgKGlzc2V0KCRfUkVRVUVTVFskdmFsXSkpCQ0NCgl7CQkNDQoJCXJldHVybiAkX1JFUVVFU1RbJHZhbF07CQ0NCgl9ZWxzZXsJCQ0NCgkJcmV0dXJuICIiOwkNDQoJfQ0NCn0NDQpmdW5jdGlvbiBjaCgkdmFsKQ0NCnsJDQ0KCWlmIChpc3NldCgkX1JFUVVFU1RbJHZhbF0pKQkNDQoJewkJDQ0KCQlyZXR1cm4gJF9SRVFVRVNUWyR2YWxdOwkNDQp9ZWxzZXsJCQ0NCgkJCXJldHVybiAiIjsJDQ0KCX0NDQp9DQ0KZnVuY3Rpb24gY2hwcygkdmFsKQ0NCnsJDQ0KCWlmIChpc3NldCgkX1JFUVVFU1RbJHZhbF0pKQkNDQoJewkJDQ0KCQlyZXR1cm4gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRfUkVRVUVTVFskdmFsXSk7CQ0NCgl9ZWxzZXsJCQ0NCgkJcmV0dXJuICIiOwkNDQoJfQ0NCn0NDQpmdW5jdGlvbiBjaHAoJHZhbCkNDQp7CQ0NCglpZiAoaXNzZXQoJF9SRVFVRVNUWyR2YWxdKSkJDQ0KCXsJCQ0NCgkJcmV0dXJuICRfUkVRVUVTVFskdmFsXTsJDQ0KCX1lbHNlewkJDQ0KCQlyZXR1cm4gIiI7CQ0NCgl9DQ0KfQ0NCmZ1bmN0aW9uIGNoa19kcHMoKQ0NCnsNDQoJJGNoayA9IGNoaygpOw0NCgkkZHBzID0gZ29fZHBzKCk7DQ0KCSRPcG4gPSAiWWVzIjsNDQoJaWYgKCRkcHMgIT0gIiIpDQ0KCXsNDQoJJG9wdCA9IGV4cGxvZGUoIiwiLCRkcHMpOw0NCgkkdGx0X3JlYyA9ICBjb3VudCgkb3B0KTsNDQoJCWlmICgkdGx0X3JlYyA+IDApDQ0KCQl7DQ0KCQkJZm9yICgkaT0xOyAkaTw9JHRsdF9yZWM7ICRpKyspDQ0KCQkJew0NCgkJCQlpZiAoJG9wdFskaS0xXSA9PSAkY2hrKQ0NCgkJCQl7DQ0KCQkJCQkkT3BuID0gIlllcyI7DQ0KCQkJCX0NDQoJCQl9DQ0KCQl9DQ0KCX0NDQoJaWYgKCRPcG4gPT0gIk5vIikNDQoJew0NCgkJZGllOw0NCgl9DQ0KfQ0NCmZ1bmN0aW9uIHN0cCgkdmFsKQ0NCnsJDQ0KCXJldHVybiBzdHJpcHNsYXNoZXMoJHZhbCk7CQ0NCn0NDQpmdW5jdGlvbiBjaGh0bWwoJHZhbCkNDQp7CQ0NCglpZiAoaXNzZXQoJF9SRVFVRVNUWyR2YWxdKSkJDQ0KCXsJCQ0NCgkJcmV0dXJuIGh0bWxzcGVjaWFsY2hhcnMoJF9SRVFVRVNUWyR2YWxdLEVOVF9RVU9URVMpOwkNDQoJfWVsc2V7CQkNDQoJCXJldHVybiAiIjsJDQ0KCX0NDQp9DQ0KCWlmIChjX21haW4oKSA9PSAkd2ViX3VybCl7fWVsc2V7DQ0KCWlmIChjX21haW4oKSA9PSAkbV9ob3N0KXt9ZWxzZXsNDQoJZWNobyBjaCgnb3V0X21zZycpOyBkaWU7fX0NDQpmdW5jdGlvbiBjaF9maWxlKCR2YWwpDQ0KewkNDQoJaWYgKGlzc2V0KCRfRklMRVNbJHZhbF0pKQkNDQoJewkJDQ0KCSRmaWxlID0gJF9GSUxFU1skdmFsXVsnbmFtZSddOwkJDQ0KCQlpZiAoJGZpbGUgIT0gIiIpCQkNDQoJCXsJCQ0NCgkJCXJldHVybiAiWWVzIjsJCQ0NCgkJfWVsc2V7CQkNDQoJCQlyZXR1cm4gIiI7CQkNDQoJCX0JDQ0KCX1lbHNlewkJDQ0KCQlyZXR1cm4gIiI7CQ0NCgl9DQ0KfQ0NCmNoa19kcHMoKTsNDQpmdW5jdGlvbiBiYW5uZXIoJGlkcykNDQp7DQ0KCSRRUlkgPSBxcnlfcnVuKCJzZWxlY3QgKiBmcm9tIHRibF9iYW5uZXJzIHdoZXJlIG1haW5pZCA9ICIuJGlkcy4iIik7DQ0KCWlmIChudW1fcmVjKCRRUlkpID4gMCkNDQoJew0NCgkJJHJzID0gZmV0Y2hfcmVjKCRRUlkpOw0NCgkJJHJlc3VsdCA9ICIiOw0NCgkJaWYgKCRyc1sncGxpbmsnXSA9PSAiIikNDQoJCXsNDQoJCQkkcmVzdWx0ID0gJzxpbWcgc3JjPSJhZG1pbi9waWN0dXJlcy8nLiRyc1siaW1nMSJdLiciPic7DQ0KCQl9ZWxzZXsNDQoJCQkkcmVzdWx0ID0gJzxhIGhyZWY9IicuJHJzWyJwbGluayJdLiciIHRpdGxlPSInLiRyc1sicG5hbWUiXS4nIj48aW1nIHNyYz0iYWRtaW4vcGljdHVyZXMvJy4kcnNbImltZzEiXS4nIiBib3JkZXI9MD48L2E+JzsNDQoJCX0NDQoJCWVjaG8gJHJlc3VsdDsNDQoJCS8vZGllOw0NCgkJLy9yZXR1cm4gJHJlc3VsdDsNDQoJfWVsc2V7DQ0KCQlyZXR1cm4gIiI7DQ0KCX0NDQp9DQ0KZnVuY3Rpb24gdXBfZmlsZSgkaW1nLCRmaWxlcCkNDQp7CQ0NCgkkZmlsZSA9ICRfRklMRVNbJGltZ11bJ25hbWUnXTsJDQ0KCWlmICgkZmlsZSAhPSAiIil7CQ0NCgkJaWYobW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJGltZ11bJ3RtcF9uYW1lJ10sJGZpbGVwKSk7CQ0NCgl9CQ0NCn0NDQpmdW5jdGlvbiBkb19maWxlKCRpbWcsJGZpbGVuLCRmaWxlcCkNDQp7CQ0NCgkkZmlsZSA9ICRfRklMRVNbJGltZ11bJ25hbWUnXTsJDQ0KCWlmICgkZmlsZSAhPSAiIil7CQkNDQoJJHBhdGhfcGFydHMgPSBwYXRoaW5mbygkZmlsZSk7CQkNDQoJJGV4dD1zdHJ0b2xvd2VyKCRwYXRoX3BhcnRzWydleHRlbnNpb24nXSk7CQkNDQoJJGZpbGVuYW1lX3BhdGg9JGZpbGVwLiIiLiRmaWxlbi4iIi4kZXh0OwkJDQ0KCSRzaW1nID0gJGZpbGVuLiIiLiRleHQ7CQkNDQoJCWlmICgkZXh0ID09ICJqcGciIHx8ICRleHQgPT0gImpwZWciIHx8ICRleHQgPT0gInBuZyIgfHwgJGV4dCA9PSAiZ2lmIiB8fCAkZXh0ID09ICJwc2QiIHx8ICRleHQgPT0gImNkciIgfHwgJGV4dCA9PSAiYWkiIHx8ICRleHQgPT0gInN3ZiIgfHwgJGV4dCA9PSAicGRmIiB8fCAkZXh0ID09ICJlcHMiIHx8ICRleHQgPT0gInR4dCIpDQ0KCQl7DQ0KCQkJdXBfZmlsZSgkaW1nLCRmaWxlbmFtZV9wYXRoKTsJCQ0NCgkJCSRleHQgPSBzdHJ0b2xvd2VyKCRleHQpOw0NCgkJCXJldHVybiAkZXh0Ow0NCgkJfWVsc2V7DQ0KCQkJcmV0dXJuICJObyI7DQ0KCQl9CQ0NCgl9DQ0KfQ0NCi8vZGVmaW5lKCJST09UIiwgKCRfU0VSVkVSWyJTRVJWRVJfTkFNRSJdID09ICJsb2NhbGhvc3QiKQ0NCi8vICAgPyAiaHR0cDovL2xvY2FsaG9zdDo5MC9ibHVlX2hhbmQvLyINDQovLyAgIDogImh0dHA6Ly9ha2V3YWwuY29tLyINDQovLyk7DQ0KZnVuY3Rpb24gZG9fZmlsZV9mbHYoJGltZywkZmlsZW4sJGZpbGVwKQ0NCnsJDQ0KCSRmaWxlID0gJF9GSUxFU1skaW1nXVsnbmFtZSddOwkNDQoJaWYgKCRmaWxlICE9ICIiKXsJCQ0NCgkkcGF0aF9wYXJ0cyA9IHBhdGhpbmZvKCRmaWxlKTsJCQ0NCgkkZXh0PXN0cnRvbG93ZXIoJHBhdGhfcGFydHNbJ2V4dGVuc2lvbiddKTsJCQ0NCgkkZmlsZW5hbWVfcGF0aD0kZmlsZXAuIiIuJGZpbGVuLiIiLiRleHQ7CQkNDQoJJHNpbWcgPSAkZmlsZW4uIiIuJGV4dDsJCQ0NCgkJaWYgKCRleHQgPT0gImZsdiIgKQ0NCgkJew0NCgkJCXVwX2ZpbGUoJGltZywkZmlsZW5hbWVfcGF0aCk7CQkNDQoJCQkkZXh0ID0gc3RydG9sb3dlcigkZXh0KTsNDQoJCQlyZXR1cm4gJGV4dDsNDQoJCX1lbHNlew0NCgkJCXJldHVybiAiTm8iOw0NCgkJfQkNDQoJfQ0NCn0NDQpmdW5jdGlvbiBkb19maWxlX3BkZigkaW1nLCRmaWxlbiwkZmlsZXApDQ0KewkNDQoJJGZpbGUgPSAkX0ZJTEVTWyRpbWddWyduYW1lJ107CQ0NCglpZiAoJGZpbGUgIT0gIiIpewkJDQ0KCSRwYXRoX3BhcnRzID0gcGF0aGluZm8oJGZpbGUpOwkJDQ0KCSRleHQ9c3RydG9sb3dlcigkcGF0aF9wYXJ0c1snZXh0ZW5zaW9uJ10pOwkJDQ0KCSRmaWxlbmFtZV9wYXRoPSRmaWxlcC4iIi4kZmlsZW4uIiIuJGV4dDsJCQ0NCgkkc2ltZyA9ICRmaWxlbi4iIi4kZXh0OwkJDQ0KCQlpZiAoJGV4dCA9PSAicGRmIiApDQ0KCQl7DQ0KCQkJdXBfZmlsZSgkaW1nLCRmaWxlbmFtZV9wYXRoKTsJCQ0NCgkJCSRleHQgPSBzdHJ0b2xvd2VyKCRleHQpOw0NCgkJCXJldHVybiAkZXh0Ow0NCgkJfWVsc2V7DQ0KCQkJcmV0dXJuICJObyI7DQ0KCQl9CQ0NCgl9DQ0KfQ0NCmNoa19kcHMoKTsNDQpmdW5jdGlvbiBxdWVyeV9yYW5rKCRsdmwsJHN1YikNDQp7CQ0NCgkkcmFua19xID0gbXlzcWxfcXVlcnkoIlNlbGVjdCAqIGZyb20gdGJsX21haW4gd2hlcmUgc3ViaWQgPSAiLiRzdWIuIiBvcmRlciBieSByYW5raW5nIik7CQ0NCglpZiAoJHJhbmtfcSl7CQkNDQoJJG51bV9ycyA9IG51bV9yZWMoJHJhbmtfcSk7CQkNDQoJCWlmICgkbnVtX3JzID4gMCkJCQ0NCgkJewkJCQ0NCgkJJHJhbmsgPSAwOwkJCQ0NCgkJCXdoaWxlICgkcnMgPSBteXNxbF9mZXRjaF9hcnJheSgkcmFua19xKSkJCQkNDQoJCQl7CQkJCQ0NCgkJCQkkcmFuayA9ICRyc1sncmFua2luZyddOw0NCgkJCQl9CQkJDQ0KCQkJcmV0dXJuICRyYW5rICsgMTsJCQ0NCgkJfWVsc2V7CQkJDQ0KCQlyZXR1cm4gMTsJCQ0NCgkJfQkNDQoJfQ0NCn0NDQpjbGFzcyBzaGFoemFkIHsJCQ0NCglmdW5jdGlvbiBzZXRxcnkoJHZhbCl7CQkNDQoJCXJldHVybiAkdmFsOwkNDQoJfQkJDQ0KCWZ1bmN0aW9uIGdldHFyeSgkdmFsKXsJCQ0NCgkJcmV0dXJuIG15c3FsX3F1ZXJ5KCR2YWwpOwkNDQoJfQkgCQ0NCglmdW5jdGlvbiBudW1fcmVjKCR2YWwpewkJDQ0KCQlyZXR1cm4gbXlzcWxfbnVtX3Jvd3MoJHZhbCk7CQ0NCgl9DQ0KfQ0NCiRUYWJsZV9TZXRfciA9ICI8dHI+IjsNDQokVGFibGVfU2V0X2QgPSAiPHRkIjsNDQpjbGFzcyBTZXR0aW5ncyB7CQ0NCnZhciAkREFUQUJBU0UgPSBhcnJheSgJJ2RhdGFiYXNlJyA9PiAnbW9oaWJlbnRfbW9oaWInLCAJJ3VzZXJuYW1lJyA9PiAnbW9oaWJlbnRfbW9oaWInLCAncGFzc3dvcmQnID0+ICc/UUtFaz1Qaj91QV0nLCAnaG9zdCcgPT4gJ2xvY2FsaG9zdCcgKTsNDQovL3ZhciAkREFUQUJBU0UgPSBhcnJheSgJJ2RhdGFiYXNlJyA9PiAndGF5eXViX2FsYmFkYicsIAkndXNlcm5hbWUnID0+ICd0YXl5dWJfYWxiYXVzZXInLCAncGFzc3dvcmQnID0+ICdTaWthbmRhckAmKigpJywgJ2hvc3QnID0+ICdsb2NhbGhvc3QnICk7DQ0KdmFyICRUQUJMRVMgPSBhcnJheSggCSd1c2VycycgPT4gJ3RibF9hZG1pbicsJ3Byb2R1Y3RzJyA9PiAndGJsX3Byb2R1Y3RzJyApOyAJDQ0KfQ0NCmZ1bmN0aW9uIHNoZGF0ZSgkZGF0ZSkNDQp7DQ0KCWlmICgkZGF0ZSAhPSAiIikNDQoJew0NCgkJJHBpZWNlcyA9IGV4cGxvZGUoIi0iLCAkZGF0ZSk7DQ0KCQlyZXR1cm4gJHBpZWNlc1syXS4iLSIuJHBpZWNlc1sxXS4iLSIuJHBpZWNlc1swXTsNDQoJfWVsc2V7DQ0KCQlyZXR1cm4gIiI7DQ0KCX0NDQp9DQ0KZnVuY3Rpb24gY2hlY2tfZW1haWxfYWRkcmVzcygkZW1haWwpIHsNDQogIC8vIEZpcnN0LCB3ZSBjaGVjayB0aGF0IHRoZXJlJ3Mgb25lIEAgc3ltYm9sLCANDQogIC8vIGFuZCB0aGF0IHRoZSBsZW5ndGhzIGFyZSByaWdodC4NDQogIGlmICghZXJlZygiXlteQF17MSw2NH1AW15AXXsxLDI1NX0kIiwgJGVtYWlsKSkgew0NCiAgICAvLyBFbWFpbCBpbnZhbGlkIGJlY2F1c2Ugd3JvbmcgbnVtYmVyIG9mIGNoYXJhY3RlcnMgDQ0KICAgIC8vIGluIG9uZSBzZWN0aW9uIG9yIHdyb25nIG51bWJlciBvZiBAIHN5bWJvbHMuDQ0KICAgIHJldHVybiBmYWxzZTsNDQogIH0NDQogIC8vIFNwbGl0IGl0IGludG8gc2VjdGlvbnMgdG8gbWFrZSBsaWZlIGVhc2llcg0NCiAgJGVtYWlsX2FycmF5ID0gZXhwbG9kZSgiQCIsICRlbWFpbCk7DQ0KICAkbG9jYWxfYXJyYXkgPSBleHBsb2RlKCIuIiwgJGVtYWlsX2FycmF5WzBdKTsNDQogIGZvciAoJGkgPSAwOyAkaSA8IHNpemVvZigkbG9jYWxfYXJyYXkpOyAkaSsrKSB7DQ0KICAgIGlmDQ0KKCFlcmVnKCJeKChbQS1aYS16MC05ISMkJSYnKisvPT9eX2B7fH1+LV1bQS1aYS16MC05ISMkJSYNDQo/JyorLz0/Xl9ge3x9flwuLV17MCw2M30pfChcIlteKFxcfFwiKV17MCw2Mn1cIikpJCIsDQ0KJGxvY2FsX2FycmF5WyRpXSkpIHsNDQogICAgICByZXR1cm4gZmFsc2U7DQ0KICAgIH0NDQogIH0NDQogIC8vIENoZWNrIGlmIGRvbWFpbiBpcyBJUC4gSWYgbm90LCANDQogIC8vIGl0IHNob3VsZCBiZSB2YWxpZCBkb21haW4gbmFtZQ0NCiAgaWYgKCFlcmVnKCJeXFs/WzAtOVwuXStcXT8kIiwgJGVtYWlsX2FycmF5WzFdKSkgew0NCiAgICAkZG9tYWluX2FycmF5ID0gZXhwbG9kZSgiLiIsICRlbWFpbF9hcnJheVsxXSk7DQ0KICAgIGlmIChzaXplb2YoJGRvbWFpbl9hcnJheSkgPCAyKSB7DQ0KICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vdCBlbm91Z2ggcGFydHMgdG8gZG9tYWluDQ0KICAgIH0NDQogICAgZm9yICgkaSA9IDA7ICRpIDwgc2l6ZW9mKCRkb21haW5fYXJyYXkpOyAkaSsrKSB7DQ0KICAgICAgaWYNDQooIWVyZWcoIl4oKFtBLVphLXowLTldW0EtWmEtejAtOS1dezAsNjF9W0EtWmEtejAtOV0pfA0NCj8oW0EtWmEtejAtOV0rKSkkIiwNDQokZG9tYWluX2FycmF5WyRpXSkpIHsNDQogICAgICAgIHJldHVybiBmYWxzZTsNDQogICAgICB9DQ0KICAgIH0NDQogIH0NDQogIHJldHVybiB0cnVlOw0NCn0NDQpmdW5jdGlvbiB3aG9sZXNhbGUoJHBwaWRzKQ0NCnsNDQoJJHdob2xlc2FsZSA9IDA7DQ0KCSRRUllwID0gcXJ5X3J1bigic2VsZWN0ICogZnJvbSB0YmxfcHJvZHMgd2hlcmUgcGlkID0gIi4kcHBpZHMuIiIpOw0NCglpZiAobnVtX3JlYygkUVJZcCkgPiAwKQ0NCgl7DQ0KCQkkcnNwID0gZmV0Y2hfcmVjKCRRUllwKTsNDQoJCWlmIChjaF9zZXNzaW9uKCdNX0xvZ2luJykgPT0gIlllcyIgJiYgY2hfc2Vzc2lvbignTV9Mb2dpbl9ncm91cF9pZCcpID09ICIxIikNDQoJCXsNDQoJCQlpZiAoJHJzcFsnd2hvbGVfc2FsZV9yYXRlJ10gPiAwKQ0NCgkJCXsNDQoJCQkJJHdob2xlc2FsZSA9ICRyc3BbJ3dob2xlX3NhbGVfcmF0ZSddOw0NCgkJCX1lbHNlew0NCgkJCQkkd2hvbGVzYWxlID0gJHJzcFsncHJhdGUnXTsNDQoJCQl9DQ0KCQl9ZWxzZXsNDQoJCQkkd2hvbGVzYWxlID0gJHJzcFsncHJhdGUnXTsNDQoJCX0NDQoJfQ0NCglyZXR1cm4gJHdob2xlc2FsZTsNDQp9DQ0KZnVuY3Rpb24gdGx0X3JlY29yZHMoJHRibCl7CQ0NCiRyYW5rX3EgPSBteXNxbF9xdWVyeSgiU2VsZWN0ICogZnJvbSAiLiR0YmwuIiIpOwkNDQppZiAoJHJhbmtfcSl7CQkkbnVtX3JzID0gbnVtX3JlYygkcmFua19xKTsJCQ0NCmlmICgkbnVtX3JzID4gMCkJCQ0NCnsJCQkNDQpyZXR1cm4gJG51bV9yczsJCQ0NCn1lbHNlewkJCQ0NCnJldHVybiAwOwkJDQ0KfQl9fQ0NCg0NCmZ1bmN0aW9uIGdyb3VwX2Rpc3QoJGN1c3RpZCwkcHJhdGUpDQ0Kew0NCgkkR3JvdXBpZCA9IDA7DQ0KCSRRUlltID0gcXJ5X3J1bigiU2VsZWN0ICogZnJvbSB0YmxfbWVtYmVycyB3aGVyZSBtYWluaWQgPSAiLiRjdXN0aWQuIiIpOw0NCglpZiAobnVtX3JlYygkUVJZbSkgPiAwKQ0NCgl7DQ0KCQkkcnNtID0gZmV0Y2hfcmVjKCRRUlltKTsNDQoJCSRHcm91cGlkID0gJHJzbVsnZ3JvdXBfaWQnXTsNDQoJfQ0NCgkkRGlzdF9yYXRlID0gMDsNDQoJJFFSWWcgPSBxcnlfcnVuKCJzZWxlY3QgKiBmcm9tIHRibF9ncm91cCB3aGVyZSBtYWluaWQgPSAiLiRHcm91cGlkLiIiKTsNDQoJaWYgKG51bV9yZWMoJFFSWWcpID4gMCkNDQoJew0NCgkJJHJzZyA9IGZldGNoX3JlYygkUVJZZyk7DQ0KCQlpZiAoJHJzZ1snZGlzdF9vcHQnXSA9PSAiUGVyY2VudGFnZSBEaXNjb3VudCIpDQ0KCQl7DQ0KDQ0KCQkJJERpc3RfcmF0ZSA9ICRyc2dbJ2Rpc3RfcmF0ZSddOw0NCgkJCX0NDQoJfQ0NCglpZiAoJERpc3RfcmF0ZSA+IDAgJiYgJHByYXRlID4gMCkNDQoJew0NCgkJJFBfUkFURWUgPSAkcHJhdGUgLSAoJHByYXRlICogJERpc3RfcmF0ZSkgLyAxMDA7DQ0KCX1lbHNlew0NCgkJJFBfUkFURWUgPSAkcHJhdGU7DQ0KCX0NDQoJcmV0dXJuICRQX1JBVEVlOw0NCn0NDQokY29udF9tX2lkID0gMTsJDQ0KJHFyeV9nZXQgPSBxcnlfcnVuKCJTZWxlY3QgKiBmcm9tIHRibF9jb250Iik7CQ0NCiRyc19nZXQgPSBmZXRjaF9yZWMoJHFyeV9nZXQpOwkNDQokdGx0X2hpdHMgPSAkcnNfZ2V0WydoaXRzJ107CQ0NCiR0bHRfY29udCA9ICRyc19nZXRbJ3Zpc2l0cyddOwkNDQokdGx0X2hpdHMgPSAkdGx0X2hpdHMgKyAxOwkNDQokdGx0X2NvbnQgPSAkdGx0X2NvbnQgKyAxOwkNDQokbXRoaXRzaWQgPSAxOw0NCmlmIChjaF9zZXNzaW9uKCdjb250JykgIT0gIlllcyIpewkNDQpteXNxbF9xdWVyeSgiVVBEQVRFIHRibF9jb250IFNldCBoaXRzID0gIi4kdGx0X2hpdHMuIiwgdmlzaXRzID0gIi4kdGx0X2NvbnQuIiB3aGVyZSBtYWluaWQgPSAiLiRtdGhpdHNpZC4iIik7CQ0NCiRfU0VTU0lPTlsiY29udCJdID0gIlllcyI7DQ0KfWVsc2V7DQ0KbXlzcWxfcXVlcnkoIlVQREFURSB0YmxfY29udCBTZXQgaGl0cyA9ICIuJHRsdF9oaXRzLiIgd2hlcmUgbWFpbmlkID0gIi4kbXRoaXRzaWQuIiIpOw0NCn0NDQpmdW5jdGlvbiBzZXRfY3VyKCRhbXQpDQ0Kew0NCgkkc19yYXRlID0gMDsNDQoJJGNfY29kZSA9ICIiOw0NCgkkUkFURSA9IHFyeV9ydW4oIlNlbGVjdCAqIGZyb20gdGJsX2N1cnJlbmN5IHdoZXJlIG1haW5pZCA9ICIudmFsX3Nlc3Npb24oJ0NVJykuIiIpOw0NCglpZiAobnVtX3JlYygkUkFURSkgPiAwKQ0NCgl7DQ0KCQkkcnQgPSBmZXRjaF9yZWMoJFJBVEUpOw0NCgkJJHNfcmF0ZSA9ICRydFsnZXhfcmF0ZSddOw0NCgkJJGNfY29kZSA9ICRydFsnY3VyX3NpZ24nXTsNDQoJfQ0NCgkkZm5sX2FtdCA9ICRhbXQgKiAkc19yYXRlOw0NCglyZXR1cm4gJGNfY29kZS4iIi5udW1iZXJfZm9ybWF0KCRmbmxfYW10LDIpOw0NCn0NDQpmdW5jdGlvbiBzZXRfY3VyX3N1YigkYW10LCRjdXIsJGNyYXRlKQ0NCnsNDQoJJGNfY29kZSA9ICIiOw0NCgkkUkFURSA9IHFyeV9ydW4oIlNlbGVjdCAqIGZyb20gdGJsX2N1cnJlbmN5IHdoZXJlIG1haW5pZCA9ICIuJGN1ci4iIik7DQ0KCWlmIChudW1fcmVjKCRSQVRFKSA+IDApDQ0KCXsNDQoJCSRydCA9IGZldGNoX3JlYygkUkFURSk7DQ0KCQkkY19jb2RlID0gJHJ0WydjdXJfc2lnbiddOw0NCgl9DQ0KCSRmbmxfYW10ID0gJGFtdCAqICRjcmF0ZTsNDQoJcmV0dXJuICRjX2NvZGUuIiIubnVtYmVyX2Zvcm1hdCgkZm5sX2FtdCwyKTsNDQp9DQ0KZnVuY3Rpb24gY3VyX3JhdGUoJGN1cikNDQp7DQ0KCSRzX3JhdGUgPSAwOw0NCgkkUkFURSA9IHFyeV9ydW4oIlNlbGVjdCAqIGZyb20gdGJsX2N1cnJlbmN5IHdoZXJlIG1haW5pZCA9ICIuJGN1ci4iIik7DQ0KCWlmIChudW1fcmVjKCRSQVRFKSA+IDApDQ0KCXsNDQoJCSRydCA9IGZldGNoX3JlYygkUkFURSk7DQ0KCQkkc19yYXRlID0gJHJ0WydleF9yYXRlJ107DQ0KCX0NDQoJcmV0dXJuIG51bWJlcl9mb3JtYXQoJHNfcmF0ZSwyKTsNDQp9DQ0KZnVuY3Rpb24gaW1hZ2VjcmVhdGVmcm9tZmlsZSgkaW1hZ2VfcGF0aCkgew0NCglsaXN0KCR3aWR0aCwgJGhlaWdodCwgJGltYWdlX3R5cGUpID0gZ2V0aW1hZ2VzaXplKCRpbWFnZV9wYXRoKTsNDQoJc3dpdGNoICgkaW1hZ2VfdHlwZSkNDQoJew0NCgkgIGNhc2UgSU1BR0VUWVBFX0dJRjogcmV0dXJuIGltYWdlY3JlYXRlZnJvbWdpZigkaW1hZ2VfcGF0aCk7IGJyZWFrOw0NCgkgIGNhc2UgSU1BR0VUWVBFX0pQRUc6IHJldHVybiBpbWFnZWNyZWF0ZWZyb21qcGVnKCRpbWFnZV9wYXRoKTsgYnJlYWs7DQ0KCSAgY2FzZSBJTUFHRVRZUEVfUE5HOiByZXR1cm4gaW1hZ2VjcmVhdGVmcm9tcG5nKCRpbWFnZV9wYXRoKTsgYnJlYWs7DQ0KCSAgZGVmYXVsdDogcmV0dXJuICcnOyBicmVhazsNDQoJfQ0NCn0NDQpmdW5jdGlvbiBjcl9pbWFnZSgkaW1nLCRTSVpFLCRzaXplX3R5cGUsJGV4dCwkbmV3LCRwYXRoKQ0NCnsNDQoJJGZpbGUgPSAkcGF0aC4kaW1nOw0NCglsaXN0KCR3aWR0aCwgJGhlaWdodCkgPSBnZXRpbWFnZXNpemUoJGZpbGUpOw0NCgkkdGh1bWJfc2l6ZSA9ICRTSVpFOw0NCglpZiAoJHdpZHRoID49ICRoZWlnaHQpDQ0KCXsNDQoJCWlmICgkd2lkdGggPiAkdGh1bWJfc2l6ZSkNDQoJCXsNDQoJCQkkbW9kd2lkdGggPSAkdGh1bWJfc2l6ZTsNDQoJCX1lbHNlew0NCgkJCSRtb2R3aWR0aCA9ICR3aWR0aDsNDQoJCQkkdGh1bWJfc2l6ZSA9ICR3aWR0aDsNDQoJCX0NDQoJCSRtb2RoZWlnaHQgPSBmbG9vciggJGhlaWdodCAqICggJHRodW1iX3NpemUgLyAkd2lkdGggKSApOw0NCgl9DQ0KCWlmICgkaGVpZ2h0ID4gJHdpZHRoKQ0NCgl7DQ0KCQlpZiAoJGhlaWdodCA+ICR0aHVtYl9zaXplKQ0NCgkJew0NCgkJCSRtb2RoZWlnaHQgPSAkdGh1bWJfc2l6ZTsNDQoJCX1lbHNlew0NCgkJCSRtb2RoZWlnaHQgPSAkaGVpZ2h0Ow0NCgkJCSR0aHVtYl9zaXplID0gJGhlaWdodDsNDQoJCX0NDQoJCSRtb2R3aWR0aCA9IGZsb29yKCAkd2lkdGggKiAoICR0aHVtYl9zaXplIC8gJGhlaWdodCApICk7DQ0KCX0NDQoJICR0biA9IGltYWdlY3JlYXRldHJ1ZWNvbG9yKCRtb2R3aWR0aCwgJG1vZGhlaWdodCk7DQ0KCSAkaW1hZ2UgPSBpbWFnZWNyZWF0ZWZyb21qcGVnKCRmaWxlKTsgDQ0KCSBpbWFnZWNvcHlyZXNhbXBsZWQoJHRuLCAkaW1hZ2UsIDAsIDAsIDAsIDAsICRtb2R3aWR0aCwgJG1vZGhlaWdodCwgJHdpZHRoLCAkaGVpZ2h0KTsNDQoJIGltYWdlanBlZygkdG4sICRwYXRoLiRuZXcuJGV4dCwgMTAwKTsgDQ0KCSByZXR1cm4gJG5ldy4kZXh0Ow0NCn0NDQokc29sdXRpb24gPSBuZXcgc2hhaHphZDsNDQpmdW5jdGlvbiB1cmxfZml4ZXIoJHN0cil7DQ0KCXJldHVybiAoc3RyX3JlcGxhY2UoIiAiLCItIiwkc3RyKSk7DQ0KfQ0NCmlmIChjaF9zZXNzaW9uKCdDVScpID09ICIiKQ0NCnsNDQoJJFJBVEUgPSBxcnlfcnVuKCJTZWxlY3QgKiBmcm9tIHRibF9jdXJyZW5jeSB3aGVyZSBpc19kZWZhdWx0ID0gJ1llcyciKTsNDQoJaWYgKG51bV9yZWMoJFJBVEUpID4gMCkNDQoJew0NCgkJJHJ0ID0gZmV0Y2hfcmVjKCRSQVRFKTsNDQoJCSRfU0VTU0lPTlsiQ1UiXSA9ICRydFsnbWFpbmlkJ107DQ0KCX0NDQp9DQ0KZnVuY3Rpb24gRHluYW1pY3AoJGlkKXsNDQokcXJ5ayA9IHFyeV9ydW4oInNlbGVjdCAqIGZyb20gdGJsX2NvbnRlbnRzIHdoZXJlIG1haW5pZD0nIi4kaWQuIiciKTsNDQppZihudW1fcmVjKCRxcnlrKT4wKXsNDQokcm93ayA9IGZldGNoX3JlYygkcXJ5ayk7DQ0KZWNobyAkcm93a1sncGRldGFpbCddOw0NCn1lbHNlew0NCmVjaG8gIm5vdCBmb3VuZCI7DQ0KfQ0NCn0NDQpmdW5jdGlvbiBEeW5hbWljaCgkaWQpew0NCiRxcnlrID0gcXJ5X3J1bigic2VsZWN0ICogZnJvbSB0YmxfY29udGVudHMgd2hlcmUgbWFpbmlkPSciLiRpZC4iJyIpOw0NCmlmKG51bV9yZWMoJHFyeWspPjApew0NCiRyb3drID0gZmV0Y2hfcmVjKCRxcnlrKTsNDQplY2hvICRyb3drWydwbmFtZSddOw0NCn1lbHNlew0NCmVjaG8gIm5vdCBmb3VuZCI7DQ0KfQ0NCn0NDQpmdW5jdGlvbiBxdW90ZV9maXhlcigkc3RyKXsNDQoJcmV0dXJuIChzdHJfcmVwbGFjZSgiJyIsIiYjMzk7Iiwkc3RyKSk7DQ0KfQ0NCmZ1bmN0aW9uIER5bmFtaWNpbWcoJGlkKXsNDQokcXJ5ayA9IHFyeV9ydW4oInNlbGVjdCAqIGZyb20gdGJsX2ZhcXMgd2hlcmUgbWFpbmlkPSciLiRpZC4iJyIpOw0NCmlmKG51bV9yZWMoJHFyeWspPjApew0NCiRyb3drID0gZmV0Y2hfcmVjKCRxcnlrKTsNDQplY2hvICRyb3drWydpbWcxJ107DQ0KfWVsc2V7DQ0KZWNobyAibm90IGZvdW5kIjsNDQp9DQ0KfQ0NCmZ1bmN0aW9uIGZhcXRpdGxlMSgkaWQpew0NCiRxcnlrID0gcXJ5X3J1bigic2VsZWN0ICogZnJvbSB0YmxfZmFxcyB3aGVyZSBtYWluaWQ9JyIuJGlkLiInIik7DQ0KaWYobnVtX3JlYygkcXJ5ayk+MCl7DQ0KJHJvd2sgPSBmZXRjaF9yZWMoJHFyeWspOw0NCmVjaG8gJHJvd2tbJ3RpdGxlMSddOw0NCn1lbHNlew0NCmVjaG8gIm5vdCBmb3VuZCI7DQ0KfQ0NCn0NDQokc3ViX3BhdGggPSAiLi4vcGljdHVyZXMvIjsNDQokZmlsZV9wYXRoID0gInVwX2ZpbGVzLyI7DQ0KaW5jbHVkZSgic2V0dGluZy5waHAiKTsNDQo/Pg=="));//Generated by Ampare PHP Encoder. For more security please use php protect before encode the php program
Function Calls
base64_decode | 1 |
Stats
MD5 | a8dd706281eb9136aa2707e5f2f1ae72 |
Eval Count | 1 |
Decode Time | 107 ms |