Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
eval(base64_decode("cmVxdWlyZV9vbmNlICdjbGFzcy1nZXN0aW9uYWxlYXV0b2NvbnRlbnQucGhwJzsKcmVxdW..
Decoded Output download
require_once 'class-gestionaleautocontent.php';
require_once 'GAAPIClient.php';
define("GESTIONALEAUTO_SENDREQUEST_ERROR", "GESTIONALEAUTO_SENDREQUEST_ERROR");
define("GESTIONALEAUTO_SENDREQUEST_OK", "GESTIONALEAUTO_SENDREQUEST_OK");
class GestionaleAuto{
private $_page_id = -1;
private $_page_title;
private $_ga_api_client;
private function _get_ga_api_client(){
$options = get_option('gestionaleauto-settings');
if (!$options){
return false;
}
if (!$this->_ga_api_client){
$this->_ga_api_client = new GAAPIClient(
$options['api_key'],
$options['api_secret'],
false,
array_key_exists("api_https", $options),
$options['api_url']
);
}
return $this->_ga_api_client;
}
private function _get_page_id(){
$the_page = get_page_by_title($this->_page_title);
if (!$the_page){
return false;
}else{
return $the_page->ID;
}
}
public function _activate_plugin(){
$the_page = get_page_by_title($this->_page_title);
if (!$the_page){
$_p = array();
$_p['post_title'] = $this->_page_title;
$_p['post_name'] = $this->_page_title;
$_p['post_content'] = "[-main-]";
$_p['post_status'] = 'publish';
$_p['post_type'] = 'page';
$_p['comment_status'] = 'closed';
$_p['ping_status'] = 'closed';
$_p['post_category'] = array(1);
$this->_page_id = wp_insert_post($_p);
}else{
$this->_page_id = $the_page->ID;
$the_page->post_status = 'publish';
$this->_page_id = wp_update_post($the_page);
}
$options = get_option('gestionaleauto-settings');
$options['page_id'] = $this->_page_id;
update_option('gestionaleauto-settings', $options);
}
public function _deactivate_plugin(){
if ($this->_page_id != -1){
wp_delete_post($this->_page_id, true);
}
}
public function _send_request(){
$return = Array();
$options = get_option('gestionaleauto-settings');
if (is_array($options) && $options['recipient']!=""){
$vehicle = $this->_get_ga_api_client()->getStockDetail($_GET['vehicle_id']);
try{ $this->_get_ga_api_client()->saveRequest($_GET['vehicle_id'], $_POST["gestionaleautomail-name"], $_POST["gestionaleautomail-phone"], $_POST["gestionaleautomail-mail"], $_POST["gestionaleautomail-request"]);
}
catch (Exception $e){}
$car_text = strtoupper($vehicle->model->make . " " . $vehicle->model->model);
$car_condition_tmp = strtolower($vehicle->usage);
$car_condition = ucfirst($car_condition_tmp).(($car_condition_tmp != "nuovo" && $car_condition_tmp != "km 0" && isset($vehicle->km) && $vehicle->km > 10)?(", Km ".number_format($vehicle->km,0, ",", ".")):"");
$object = "Richiesta di informazioni dal sito";
$body = "<div style='font-family: Trebuchet MS'>
<div style='margin-top: 10px; padding: 10px; border: 1px solid #000000; background: #DDDDDD; font-size: 14px;'>
Gentile Cliente, <br><br>
un contatto ha richiesto informazioni su un veicolo.<br><br>
<strong>DATI DEL VEICOLO</strong>
<ul style=\"list-style-type:outside\">
<li style=\"margin-bottom:10px\"><strong>Modello:</strong> ".$car_text."</li>";
if(isset($vehicle->internal_code) && $vehicle->internal_code!= ""){
$body .= " <li style=\"margin-bottom:10px\"><strong>Riferimento interno:</strong> ".$vehicle->internal_code."</li>";
}
$body .= " <li style=\"margin-bottom:10px\"><strong>Codice GestionaleAuto:</strong> ".$vehicle->id."</li>";
$body .= " <li style=\"margin-bottom:10px\"><strong>Condizione:</strong> ".$car_condition."</li>";
if(isset($vehicle->plate) && $vehicle->plate!= ""){
$body .= " <li style=\"margin-bottom:10px\"><strong>Targa:</strong> ".$vehicle->plate."</li>";
}
if(isset($vehicle->vin) && $vehicle->vin!= ""){
$body .= " <li style=\"margin-bottom:10px\"><strong>Telaio:</strong> ".$vehicle->vin."</li>";
}
$body.=" </ul><br><br>";
$body.=" <br>
Di seguito i dati del richiedente:
<br>
<br>
<table width='95%' >
";
$body .= " <tr><td style='font-size: 14px;'>Nome e cognome:</td><td style='font-size: 14px; '>".$_POST["gestionaleautomail-name"]."</td></tr>
";
$body .= " <tr><td style='font-size: 14px;'>Email:</td><td style='font-size: 14px; '>".$_POST["gestionaleautomail-mail"]."</td></tr>
";
$body .= " <tr><td style='font-size: 14px;'>Telefono:</td><td style='font-size: 14px; '>".(($_POST["gestionaleautomail-phone"] != "")?$_POST["gestionaleautomail-phone"]:"-")."</td></tr>
";
$body .=" </table>
<br>
Di seguito i dettagli della richiesta :
<br>
<br>
<p style='font-size: 16px;'><span style='color: #F00'>".stripslashes($_POST["gestionaleautomail-request"])."</span></p>
<br>
<br>
Grazie <br>
<b>Il team di GestionaleAuto.com</b><br>
<a href='http://www.gestionaleauto.com/'>www.gestionaleauto.com</a>
</div>
</div>";
$headers = Array("From: ".$_POST["gestionaleautomail-name"]." <".$_POST["gestionaleautomail-mail"].">");
add_filter('wp_mail_content_type',create_function('', 'return "text/html";'));
$wpmail_result = wp_mail($options['recipient'], $object, $body, $headers);
if (!$wpmail_result) {
global $ts_mail_errors;
global $phpmailer;
if (!isset($ts_mail_errors)) $ts_mail_errors = array();
if (isset($phpmailer)) {
$ts_mail_errors[] = $phpmailer->ErrorInfo;
$return = Array("result"=>GESTIONALEAUTO_SENDREQUEST_ERROR, "message" => $ts_mail_errors[0]);
}
$return = Array("result"=>GESTIONALEAUTO_SENDREQUEST_ERROR, "message" => __("ERROR: The request can't be sent"));
}
else{
$return = Array("result"=>GESTIONALEAUTO_SENDREQUEST_OK, "message" => __("YOUR REQUEST HAS BEEN SENT. Thank you for completing our contact form. We have received your contact form correctly."));
}
}
else{
$return = Array("result"=>GESTIONALEAUTO_SENDREQUEST_ERROR, "message" => __("CONFIGURATION ERROR: request's destination is not set"));
}
return $return;
}
public function _handle_content($content){
if (strpos($content, '[-main-]')) {
$requestOutput = "";
if(array_key_exists("gestionaleautomail-submit", $_POST)){
$requestresult = $this->_send_request();
if($requestresult['result']==GESTIONALEAUTO_SENDREQUEST_ERROR)
$requestOutput = '<div class="gestionaleautomail-output-error"><p>'.$requestresult['message'].'</p></div>';
else
$requestOutput = '<div class="gestionaleautomail-output-ok"><p>'.$requestresult['message'].'</p></div>';
}
if (!array_key_exists("vehicle_id", $_GET)){
$models = array();
if (array_key_exists("make_id", $_GET)){
$models = $this->_get_ga_api_client()->getLookupModel($_GET["make_id"]);
}
$lookups = $this->_get_ga_api_client()->getMultipleLookups(Array('make', 'usage', 'body'));
$search_form = GestionaleAutoContent::searchForm(
$lookups->make,
$models,
$lookups->usage,
$lookups->body
);
$parameters = array();
$start = array_key_exists("liststart", $_GET) ? $_GET["liststart"] : (array_key_exists("liststart", $_POST) ? $_POST["liststart"] : 0);
$limit = array_key_exists("listlimit", $_GET) ? $_GET["listlimit"] : (array_key_exists("listlimit", $_POST) ? $_POST["listlimit"] : 20);
$old_make_id = array_key_exists("old_make_id", $_SESSION) ? $_SESSION["old_make_id"]: -1;
$make_id = array_key_exists("make_id", $_GET) ? $_GET["make_id"] : (array_key_exists("make_id", $_POST) ? $_POST["make_id"] : -1);
$model_id = array_key_exists("model_id", $_GET) ? $_GET["model_id"] : (array_key_exists("model_id", $_POST) ? $_POST["model_id"] : -1);
$usage_id = array_key_exists("usage_id", $_GET) ? $_GET["usage_id"] : (array_key_exists("usage_id", $_POST) ? $_POST["usage_id"] : -1);
$body_id = array_key_exists("body_id", $_GET) ? $_GET["body_id"] : (array_key_exists("body_id", $_POST) ? $_POST["body_id"] : -1);
$order_by = array_key_exists("order_by", $_GET) ? $_GET["order_by"] : (array_key_exists("order_by", $_POST) ? $_POST["order_by"] : -1);
$order_type = array_key_exists("order_type", $_GET) ? $_GET["order_type"] : (array_key_exists("order_type", $_POST) ? $_POST["order_type"] : -1);
if ($make_id != -1){
$parameters["make_id"] = $make_id;
}
if ($old_make_id != $make_id){
$model_id = -1;
$_SESSION["old_make_id"] = $make_id;
}
if ($model_id != -1){
$parameters["model_id"] = $model_id;
}
if ($usage_id != -1){
$parameters["usage_id"] = $usage_id;
}
if ($body_id != -1){
$parameters["body_id"] = $body_id;
}
if ($order_by != -1){
$parameters["order_by"] = $order_by;
}
if ($order_type != -1){
$parameters["order_type"] = $order_type;
}
if($start>0){
$parameters["offset"] = $start;
$parameters["limit"] = $limit;
}
$vehicles = $this->_get_ga_api_client()->getStockList($parameters);
if (count($vehicles) < $limit){
$limit = count($vehicles);
}
if($start>0){
$vehicles_to_show = $vehicles;
$totrows = array_key_exists("totrows", $_GET) ? $_GET["totrows"] : (array_key_exists("totrows", $_POST) ? $_POST["totrows"] : $limit);
}
else{
$vehicles_to_show = array();
for ($i = $start; $i < $limit; $i++){
$vehicles_to_show[] = $vehicles[$i];
}
$totrows = count($vehicles);
}
$content .= GestionaleAutoContent::vehiclesList(
$vehicles_to_show,
$this->_page_id,
$totrows
);
$content = str_replace('[-main-]', $search_form, $content);
}
else{
$vehicle = $this->_get_ga_api_client()->getStockDetail($_GET['vehicle_id']);
$content .= GestionaleAutoContent::vehicleDetail(
$vehicle
);
$content = str_replace('[-main-]', $search_form, $content);
}
}
return $requestOutput.$content;
}
public function _add_css(){
wp_register_style( 'ga-css', plugins_url( 'css/gestionaleauto.css' , __FILE__ ));
wp_enqueue_style( 'ga-css' );
wp_enqueue_style( 'ga-fancycss' , plugins_url( 'fancybox/jquery.fancybox-1.3.4.css' , __FILE__ ));
}
public function _add_js(){
wp_enqueue_script( 'ga-toolsjs', plugins_url( 'js/jquery.tools.min.js' , __FILE__ ), array('jquery') );
wp_enqueue_script( 'ga-fancyjs', plugins_url( 'fancybox/jquery.fancybox-1.3.4.pack.js' , __FILE__ ), array('jquery') );
wp_enqueue_script( 'ga-validatejs', plugins_url( 'js/jquery.validate.min.js' , __FILE__ ), array('jquery') );
}
function _init_translations() {
$plugin_dir = basename(dirname(__FILE__));
load_plugin_textdomain( 'default', false, $plugin_dir );
}
public function __construct() {
$options = get_option('gestionaleauto-settings');
if(is_array($options)){
$this->_page_title = $options['page_name'];
$this->_page_id = $options['page_id'];
if($options['page_id']!="-1"){
$the_page = get_page($this->_page_id);
$the_page->post_name = $this->_page_title;
$the_page->post_title = $this->_page_title;
$this->_page_id = wp_update_post($the_page);
}
}
add_filter('the_content', array($this, '_handle_content'));
add_action( 'wp_enqueue_scripts', array($this, '_add_css') );
add_action( 'wp_enqueue_scripts', array($this, '_add_js') );
add_action('plugins_loaded', array($this, '_init_translations'));
}
}
?>
Did this file decode correctly?
Original Code
eval(base64_decode("cmVxdWlyZV9vbmNlICdjbGFzcy1nZXN0aW9uYWxlYXV0b2NvbnRlbnQucGhwJzsKcmVxdWlyZV9vbmNlICdHQUFQSUNsaWVudC5waHAnOwoKZGVmaW5lKCJHRVNUSU9OQUxFQVVUT19TRU5EUkVRVUVTVF9FUlJPUiIsICJHRVNUSU9OQUxFQVVUT19TRU5EUkVRVUVTVF9FUlJPUiIpOwpkZWZpbmUoIkdFU1RJT05BTEVBVVRPX1NFTkRSRVFVRVNUX09LIiwgIkdFU1RJT05BTEVBVVRPX1NFTkRSRVFVRVNUX09LIik7CgoKY2xhc3MgR2VzdGlvbmFsZUF1dG97CiAgICAKICAgIAogICAgcHJpdmF0ZSAkX3BhZ2VfaWQgPSAtMTsKICAgIAogICAgCiAgICBwcml2YXRlICRfcGFnZV90aXRsZTsKICAgIAogICAgCiAgICBwcml2YXRlICRfZ2FfYXBpX2NsaWVudDsKICAgIAogICAgCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9nZXRfZ2FfYXBpX2NsaWVudCgpewogICAgICAgICRvcHRpb25zID0gZ2V0X29wdGlvbignZ2VzdGlvbmFsZWF1dG8tc2V0dGluZ3MnKTsKICAgICAgICBpZiAoISRvcHRpb25zKXsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoISR0aGlzLT5fZ2FfYXBpX2NsaWVudCl7CiAgICAgICAgICAgICR0aGlzLT5fZ2FfYXBpX2NsaWVudCA9IG5ldyBHQUFQSUNsaWVudCgKICAgICAgICAgICAgICAgICAgICAkb3B0aW9uc1snYXBpX2tleSddLAogICAgICAgICAgICAgICAgICAgICRvcHRpb25zWydhcGlfc2VjcmV0J10sCiAgICAgICAgICAgICAgICAgICAgZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgYXJyYXlfa2V5X2V4aXN0cygiYXBpX2h0dHBzIiwgJG9wdGlvbnMpLAogICAgICAgICAgICAgICAgICAgICRvcHRpb25zWydhcGlfdXJsJ10KICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0aGlzLT5fZ2FfYXBpX2NsaWVudDsKICAgIH0KICAgIAogICAgCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9nZXRfcGFnZV9pZCgpewogICAgICAgJHRoZV9wYWdlID0gZ2V0X3BhZ2VfYnlfdGl0bGUoJHRoaXMtPl9wYWdlX3RpdGxlKTsgCiAgICAgICBpZiAoISR0aGVfcGFnZSl7CiAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfWVsc2V7CiAgICAgICAgICAgcmV0dXJuICR0aGVfcGFnZS0+SUQ7CiAgICAgICB9CiAgICB9CiAgICAKICAgIAogICAgcHVibGljIGZ1bmN0aW9uIF9hY3RpdmF0ZV9wbHVnaW4oKXsKICAgICAgICAkdGhlX3BhZ2UgPSBnZXRfcGFnZV9ieV90aXRsZSgkdGhpcy0+X3BhZ2VfdGl0bGUpOwogICAgICAgIAogICAgICAgIGlmICghJHRoZV9wYWdlKXsKICAgICAgICAgICAgICAgICAgICAgICAgJF9wID0gYXJyYXkoKTsKICAgICAgICAgICAgJF9wWydwb3N0X3RpdGxlJ10gICAgID0gJHRoaXMtPl9wYWdlX3RpdGxlOwogICAgICAgICAgICAkX3BbJ3Bvc3RfbmFtZSddICAgICA9ICR0aGlzLT5fcGFnZV90aXRsZTsKICAgICAgICAgICAgJF9wWydwb3N0X2NvbnRlbnQnXSAgID0gIlstbWFpbi1dIjsKICAgICAgICAgICAgJF9wWydwb3N0X3N0YXR1cyddICAgID0gJ3B1Ymxpc2gnOwogICAgICAgICAgICAkX3BbJ3Bvc3RfdHlwZSddICAgICAgPSAncGFnZSc7CiAgICAgICAgICAgICRfcFsnY29tbWVudF9zdGF0dXMnXSA9ICdjbG9zZWQnOwogICAgICAgICAgICAkX3BbJ3Bpbmdfc3RhdHVzJ10gICAgPSAnY2xvc2VkJzsKICAgICAgICAgICAgJF9wWydwb3N0X2NhdGVnb3J5J10gPSBhcnJheSgxKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5fcGFnZV9pZCA9IHdwX2luc2VydF9wb3N0KCRfcCk7CiAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5fcGFnZV9pZCA9ICR0aGVfcGFnZS0+SUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGVfcGFnZS0+cG9zdF9zdGF0dXMgPSAncHVibGlzaCc7CiAgICAgICAgICAgICR0aGlzLT5fcGFnZV9pZCA9IHdwX3VwZGF0ZV9wb3N0KCR0aGVfcGFnZSk7CiAgICAgICAgfQogICAgICAgICRvcHRpb25zID0gZ2V0X29wdGlvbignZ2VzdGlvbmFsZWF1dG8tc2V0dGluZ3MnKTsKICAgICAgICAkb3B0aW9uc1sncGFnZV9pZCddID0gJHRoaXMtPl9wYWdlX2lkOwogICAgICAgIHVwZGF0ZV9vcHRpb24oJ2dlc3Rpb25hbGVhdXRvLXNldHRpbmdzJywgJG9wdGlvbnMpOwogICAgfQogICAgCiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBfZGVhY3RpdmF0ZV9wbHVnaW4oKXsKICAgICAgICBpZiAoJHRoaXMtPl9wYWdlX2lkICE9IC0xKXsKICAgICAgICAgICAgd3BfZGVsZXRlX3Bvc3QoJHRoaXMtPl9wYWdlX2lkLCB0cnVlKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIAogICAgcHVibGljIGZ1bmN0aW9uIF9zZW5kX3JlcXVlc3QoKXsKICAgICAgICAkcmV0dXJuID0gQXJyYXkoKTsKICAgICAgICAKICAgICAgICAkb3B0aW9ucyA9IGdldF9vcHRpb24oJ2dlc3Rpb25hbGVhdXRvLXNldHRpbmdzJyk7CiAgICAgICAgaWYgKGlzX2FycmF5KCRvcHRpb25zKSAmJiAkb3B0aW9uc1sncmVjaXBpZW50J10hPSIiKXsKICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgJHZlaGljbGUgPSAkdGhpcy0+X2dldF9nYV9hcGlfY2xpZW50KCktPmdldFN0b2NrRGV0YWlsKCRfR0VUWyd2ZWhpY2xlX2lkJ10pOwoKICAgICAgICAgICAgdHJ5eyAgICAgICAgICAgICAgICAkdGhpcy0+X2dldF9nYV9hcGlfY2xpZW50KCktPnNhdmVSZXF1ZXN0KCRfR0VUWyd2ZWhpY2xlX2lkJ10sICRfUE9TVFsiZ2VzdGlvbmFsZWF1dG9tYWlsLW5hbWUiXSwgJF9QT1NUWyJnZXN0aW9uYWxlYXV0b21haWwtcGhvbmUiXSwgJF9QT1NUWyJnZXN0aW9uYWxlYXV0b21haWwtbWFpbCJdLCAkX1BPU1RbImdlc3Rpb25hbGVhdXRvbWFpbC1yZXF1ZXN0Il0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gJGUpe30KICAgICAgICAgICAgCiAgICAgICAgICAgICRjYXJfdGV4dCA9IHN0cnRvdXBwZXIoJHZlaGljbGUtPm1vZGVsLT5tYWtlIC4gIiAiIC4gJHZlaGljbGUtPm1vZGVsLT5tb2RlbCk7CiAgICAgICAgICAgICRjYXJfY29uZGl0aW9uX3RtcCA9IHN0cnRvbG93ZXIoJHZlaGljbGUtPnVzYWdlKTsKICAgICAgICAgICAgJGNhcl9jb25kaXRpb24gPSB1Y2ZpcnN0KCRjYXJfY29uZGl0aW9uX3RtcCkuKCgkY2FyX2NvbmRpdGlvbl90bXAgIT0gIm51b3ZvIiAmJiAkY2FyX2NvbmRpdGlvbl90bXAgIT0gImttIDAiICYmIGlzc2V0KCR2ZWhpY2xlLT5rbSkgJiYgJHZlaGljbGUtPmttID4gMTApPygiLCBLbSAiLm51bWJlcl9mb3JtYXQoJHZlaGljbGUtPmttLDAsICIsIiwgIi4iKSk6IiIpOwkJCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAkb2JqZWN0ID0gIlJpY2hpZXN0YSBkaSBpbmZvcm1hemlvbmkgZGFsIHNpdG8iOwoKICAgICAgICAgICAgICAgICAgICAgICAgJGJvZHkgPSAiPGRpdiBzdHlsZT0nZm9udC1mYW1pbHk6IFRyZWJ1Y2hldCBNUyc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9J21hcmdpbi10b3A6IDEwcHg7IHBhZGRpbmc6IDEwcHg7IGJvcmRlcjogMXB4IHNvbGlkICMwMDAwMDA7IGJhY2tncm91bmQ6ICNEREREREQ7IGZvbnQtc2l6ZTogMTRweDsnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VudGlsZSBDbGllbnRlLCA8YnI+PGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW4gY29udGF0dG8gaGEgcmljaGllc3RvIGluZm9ybWF6aW9uaSBzdSB1biB2ZWljb2xvLjxicj48YnI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPkRBVEkgREVMIFZFSUNPTE88L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBzdHlsZT1cImxpc3Qtc3R5bGUtdHlwZTpvdXRzaWRlXCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHN0eWxlPVwibWFyZ2luLWJvdHRvbToxMHB4XCI+PHN0cm9uZz5Nb2RlbGxvOjwvc3Ryb25nPiZuYnNwOyIuJGNhcl90ZXh0LiI8L2xpPiI7CiAgICAgICAgICAgIGlmKGlzc2V0KCR2ZWhpY2xlLT5pbnRlcm5hbF9jb2RlKSAmJiAkdmVoaWNsZS0+aW50ZXJuYWxfY29kZSE9ICIiKXsKICAgICAgICAgICAgICAgICRib2R5IC49ICIgICAgICA8bGkgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjEwcHhcIj48c3Ryb25nPlJpZmVyaW1lbnRvIGludGVybm86PC9zdHJvbmc+Jm5ic3A7Ii4kdmVoaWNsZS0+aW50ZXJuYWxfY29kZS4iPC9saT4iOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkYm9keSAuPSAiICAgICAgICAgIDxsaSBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTBweFwiPjxzdHJvbmc+Q29kaWNlIEdlc3Rpb25hbGVBdXRvOjwvc3Ryb25nPiZuYnNwOyIuJHZlaGljbGUtPmlkLiI8L2xpPiI7CiAgICAgICAgICAgICRib2R5IC49ICIgICAgICAgICAgPGxpIHN0eWxlPVwibWFyZ2luLWJvdHRvbToxMHB4XCI+PHN0cm9uZz5Db25kaXppb25lOjwvc3Ryb25nPiZuYnNwOyIuJGNhcl9jb25kaXRpb24uIjwvbGk+IjsKCiAgICAgICAgICAgIGlmKGlzc2V0KCR2ZWhpY2xlLT5wbGF0ZSkgJiYgJHZlaGljbGUtPnBsYXRlIT0gIiIpewogICAgICAgICAgICAgICAgJGJvZHkgLj0gIiAgICAgIDxsaSBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTBweFwiPjxzdHJvbmc+VGFyZ2E6PC9zdHJvbmc+Jm5ic3A7Ii4kdmVoaWNsZS0+cGxhdGUuIjwvbGk+IjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZihpc3NldCgkdmVoaWNsZS0+dmluKSAmJiAkdmVoaWNsZS0+dmluIT0gIiIpewogICAgICAgICAgICAgICAgJGJvZHkgLj0gIiAgICAgIDxsaSBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTBweFwiPjxzdHJvbmc+VGVsYWlvOjwvc3Ryb25nPiZuYnNwOyIuJHZlaGljbGUtPnZpbi4iPC9saT4iOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkYm9keS49IiAgICAgICAgPC91bD48YnI+PGJyPiI7CgogICAgICAgICAgICAkYm9keS49IiAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGkgc2VndWl0byBpIGRhdGkgZGVsIHJpY2hpZWRlbnRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSc5NSUnID4KCiAgICAgICAgICAgICI7CgogICAgICAgICAgICAkYm9keSAuPSAiICAgICAgICAgIDx0cj48dGQgc3R5bGU9J2ZvbnQtc2l6ZTogMTRweDsnPk5vbWUgZSBjb2dub21lOjwvdGQ+PHRkIHN0eWxlPSdmb250LXNpemU6IDE0cHg7ICc+Ii4kX1BPU1RbImdlc3Rpb25hbGVhdXRvbWFpbC1uYW1lIl0uIjwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICRib2R5IC49ICIgICAgICAgICAgPHRyPjx0ZCBzdHlsZT0nZm9udC1zaXplOiAxNHB4Oyc+RW1haWw6PC90ZD48dGQgc3R5bGU9J2ZvbnQtc2l6ZTogMTRweDsgJz4iLiRfUE9TVFsiZ2VzdGlvbmFsZWF1dG9tYWlsLW1haWwiXS4iPC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgJGJvZHkgLj0gIiAgICAgICAgICA8dHI+PHRkIHN0eWxlPSdmb250LXNpemU6IDE0cHg7Jz5UZWxlZm9ubzo8L3RkPjx0ZCBzdHlsZT0nZm9udC1zaXplOiAxNHB4OyAnPiIuKCgkX1BPU1RbImdlc3Rpb25hbGVhdXRvbWFpbC1waG9uZSJdICE9ICIiKT8kX1BPU1RbImdlc3Rpb25hbGVhdXRvbWFpbC1waG9uZSJdOiItIikuIjwvdGQ+PC90cj5cbiI7CgogICAgICAgICAgICAkYm9keSAgICAgLj0iICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpIHNlZ3VpdG8gaSBkZXR0YWdsaSBkZWxsYSByaWNoaWVzdGEgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9J2ZvbnQtc2l6ZTogMTZweDsnPjxzcGFuIHN0eWxlPSdjb2xvcjogI0YwMCc+Ii5zdHJpcHNsYXNoZXMoJF9QT1NUWyJnZXN0aW9uYWxlYXV0b21haWwtcmVxdWVzdCJdKS4iPC9zcGFuPjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXppZSA8YnI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5JbCB0ZWFtIGRpIEdlc3Rpb25hbGVBdXRvLmNvbTwvYj48YnI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSdodHRwOi8vd3d3Lmdlc3Rpb25hbGVhdXRvLmNvbS8nPnd3dy5nZXN0aW9uYWxlYXV0by5jb208L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PiI7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgICRoZWFkZXJzID0gQXJyYXkoIkZyb206ICIuJF9QT1NUWyJnZXN0aW9uYWxlYXV0b21haWwtbmFtZSJdLiIgPCIuJF9QT1NUWyJnZXN0aW9uYWxlYXV0b21haWwtbWFpbCJdLiI+Iik7CgogICAgICAgICAgICBhZGRfZmlsdGVyKCd3cF9tYWlsX2NvbnRlbnRfdHlwZScsY3JlYXRlX2Z1bmN0aW9uKCcnLCAncmV0dXJuICJ0ZXh0L2h0bWwiOycpKTsKICAgICAgICAgICAgJHdwbWFpbF9yZXN1bHQgPSB3cF9tYWlsKCRvcHRpb25zWydyZWNpcGllbnQnXSwgJG9iamVjdCwgJGJvZHksICRoZWFkZXJzKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICghJHdwbWFpbF9yZXN1bHQpIHsKICAgICAgICAgICAgICAgIGdsb2JhbCAkdHNfbWFpbF9lcnJvcnM7CiAgICAgICAgICAgICAgICBnbG9iYWwgJHBocG1haWxlcjsKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJHRzX21haWxfZXJyb3JzKSkgJHRzX21haWxfZXJyb3JzID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkcGhwbWFpbGVyKSkgewogICAgICAgICAgICAgICAgICAgICR0c19tYWlsX2Vycm9yc1tdID0gJHBocG1haWxlci0+RXJyb3JJbmZvOwogICAgICAgICAgICAgICAgICAgICRyZXR1cm4gPSBBcnJheSgicmVzdWx0Ij0+R0VTVElPTkFMRUFVVE9fU0VORFJFUVVFU1RfRVJST1IsICJtZXNzYWdlIiA9PiAkdHNfbWFpbF9lcnJvcnNbMF0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHJldHVybiA9IEFycmF5KCJyZXN1bHQiPT5HRVNUSU9OQUxFQVVUT19TRU5EUkVRVUVTVF9FUlJPUiwgIm1lc3NhZ2UiID0+IF9fKCJFUlJPUjogVGhlIHJlcXVlc3QgY2FuJ3QgYmUgc2VudCIpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgJHJldHVybiA9IEFycmF5KCJyZXN1bHQiPT5HRVNUSU9OQUxFQVVUT19TRU5EUkVRVUVTVF9PSywgIm1lc3NhZ2UiID0+IF9fKCJZT1VSIFJFUVVFU1QgSEFTIEJFRU4gU0VOVC4gVGhhbmsgeW91IGZvciBjb21wbGV0aW5nIG91ciBjb250YWN0IGZvcm0uIFdlIGhhdmUgcmVjZWl2ZWQgeW91ciBjb250YWN0IGZvcm0gY29ycmVjdGx5LiIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICAkcmV0dXJuID0gQXJyYXkoInJlc3VsdCI9PkdFU1RJT05BTEVBVVRPX1NFTkRSRVFVRVNUX0VSUk9SLCAibWVzc2FnZSIgPT4gX18oIkNPTkZJR1VSQVRJT04gRVJST1I6IHJlcXVlc3QncyBkZXN0aW5hdGlvbiBpcyBub3Qgc2V0IikpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gJHJldHVybjsKICAgIH0KICAgIAogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gX2hhbmRsZV9jb250ZW50KCRjb250ZW50KXsKICAgICAgICBpZiAoc3RycG9zKCRjb250ZW50LCAnWy1tYWluLV0nKSkgewogICAgICAgICAgICAKICAgICAgICAgICAgJHJlcXVlc3RPdXRwdXQgPSAiIjsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmKGFycmF5X2tleV9leGlzdHMoImdlc3Rpb25hbGVhdXRvbWFpbC1zdWJtaXQiLCAkX1BPU1QpKXsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJHJlcXVlc3RyZXN1bHQgPSAkdGhpcy0+X3NlbmRfcmVxdWVzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYoJHJlcXVlc3RyZXN1bHRbJ3Jlc3VsdCddPT1HRVNUSU9OQUxFQVVUT19TRU5EUkVRVUVTVF9FUlJPUikKICAgICAgICAgICAgICAgICAgICAkcmVxdWVzdE91dHB1dCA9ICc8ZGl2IGNsYXNzPSJnZXN0aW9uYWxlYXV0b21haWwtb3V0cHV0LWVycm9yIj48cD4nLiRyZXF1ZXN0cmVzdWx0WydtZXNzYWdlJ10uJzwvcD48L2Rpdj4nOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICRyZXF1ZXN0T3V0cHV0ID0gJzxkaXYgY2xhc3M9Imdlc3Rpb25hbGVhdXRvbWFpbC1vdXRwdXQtb2siPjxwPicuJHJlcXVlc3RyZXN1bHRbJ21lc3NhZ2UnXS4nPC9wPjwvZGl2Pic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygidmVoaWNsZV9pZCIsICRfR0VUKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1vZGVscyA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygibWFrZV9pZCIsICRfR0VUKSl7CiAgICAgICAgICAgICAgICAgICAgJG1vZGVscyA9ICR0aGlzLT5fZ2V0X2dhX2FwaV9jbGllbnQoKS0+Z2V0TG9va3VwTW9kZWwoJF9HRVRbIm1ha2VfaWQiXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkbG9va3VwcyA9ICR0aGlzLT5fZ2V0X2dhX2FwaV9jbGllbnQoKS0+Z2V0TXVsdGlwbGVMb29rdXBzKEFycmF5KCdtYWtlJywgJ3VzYWdlJywgJ2JvZHknKSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICRzZWFyY2hfZm9ybSA9IEdlc3Rpb25hbGVBdXRvQ29udGVudDo6c2VhcmNoRm9ybSgKICAgICAgICAgICAgICAgICAgICAkbG9va3Vwcy0+bWFrZSwKICAgICAgICAgICAgICAgICAgICAkbW9kZWxzLAogICAgICAgICAgICAgICAgICAgICRsb29rdXBzLT51c2FnZSwKICAgICAgICAgICAgICAgICAgICAkbG9va3Vwcy0+Ym9keQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJzID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICRzdGFydCA9IGFycmF5X2tleV9leGlzdHMoImxpc3RzdGFydCIsICRfR0VUKSA/ICRfR0VUWyJsaXN0c3RhcnQiXSA6IChhcnJheV9rZXlfZXhpc3RzKCJsaXN0c3RhcnQiLCAkX1BPU1QpID8gJF9QT1NUWyJsaXN0c3RhcnQiXSA6IDApOwogICAgICAgICAgICAgICAgJGxpbWl0ID0gYXJyYXlfa2V5X2V4aXN0cygibGlzdGxpbWl0IiwgJF9HRVQpID8gJF9HRVRbImxpc3RsaW1pdCJdIDogKGFycmF5X2tleV9leGlzdHMoImxpc3RsaW1pdCIsICRfUE9TVCkgPyAkX1BPU1RbImxpc3RsaW1pdCJdIDogMjApOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAkb2xkX21ha2VfaWQgPSBhcnJheV9rZXlfZXhpc3RzKCJvbGRfbWFrZV9pZCIsICRfU0VTU0lPTikgPyAkX1NFU1NJT05bIm9sZF9tYWtlX2lkIl06IC0xOwogICAgICAgICAgICAgICAgJG1ha2VfaWQgPSBhcnJheV9rZXlfZXhpc3RzKCJtYWtlX2lkIiwgJF9HRVQpID8gJF9HRVRbIm1ha2VfaWQiXSA6IChhcnJheV9rZXlfZXhpc3RzKCJtYWtlX2lkIiwgJF9QT1NUKSA/ICRfUE9TVFsibWFrZV9pZCJdIDogLTEpOwogICAgICAgICAgICAgICAgJG1vZGVsX2lkID0gYXJyYXlfa2V5X2V4aXN0cygibW9kZWxfaWQiLCAkX0dFVCkgPyAkX0dFVFsibW9kZWxfaWQiXSA6IChhcnJheV9rZXlfZXhpc3RzKCJtb2RlbF9pZCIsICRfUE9TVCkgPyAkX1BPU1RbIm1vZGVsX2lkIl0gOiAtMSk7CiAgICAgICAgICAgICAgICAkdXNhZ2VfaWQgPSBhcnJheV9rZXlfZXhpc3RzKCJ1c2FnZV9pZCIsICRfR0VUKSA/ICRfR0VUWyJ1c2FnZV9pZCJdIDogKGFycmF5X2tleV9leGlzdHMoInVzYWdlX2lkIiwgJF9QT1NUKSA/ICRfUE9TVFsidXNhZ2VfaWQiXSA6IC0xKTsKICAgICAgICAgICAgICAgICRib2R5X2lkID0gYXJyYXlfa2V5X2V4aXN0cygiYm9keV9pZCIsICRfR0VUKSA/ICRfR0VUWyJib2R5X2lkIl0gOiAoYXJyYXlfa2V5X2V4aXN0cygiYm9keV9pZCIsICRfUE9TVCkgPyAkX1BPU1RbImJvZHlfaWQiXSA6IC0xKTsKICAgICAgICAgICAgICAgICRvcmRlcl9ieSA9IGFycmF5X2tleV9leGlzdHMoIm9yZGVyX2J5IiwgJF9HRVQpID8gJF9HRVRbIm9yZGVyX2J5Il0gOiAoYXJyYXlfa2V5X2V4aXN0cygib3JkZXJfYnkiLCAkX1BPU1QpID8gJF9QT1NUWyJvcmRlcl9ieSJdIDogLTEpOwogICAgICAgICAgICAgICAgJG9yZGVyX3R5cGUgPSBhcnJheV9rZXlfZXhpc3RzKCJvcmRlcl90eXBlIiwgJF9HRVQpID8gJF9HRVRbIm9yZGVyX3R5cGUiXSA6IChhcnJheV9rZXlfZXhpc3RzKCJvcmRlcl90eXBlIiwgJF9QT1NUKSA/ICRfUE9TVFsib3JkZXJfdHlwZSJdIDogLTEpOwogICAgICAgICAgICAgICAgaWYgKCRtYWtlX2lkICE9IC0xKXsKICAgICAgICAgICAgICAgICAgICAkcGFyYW1ldGVyc1sibWFrZV9pZCJdID0gJG1ha2VfaWQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvbGRfbWFrZV9pZCAhPSAkbWFrZV9pZCl7CiAgICAgICAgICAgICAgICAgICAgJG1vZGVsX2lkID0gLTE7CiAgICAgICAgICAgICAgICAgICAgJF9TRVNTSU9OWyJvbGRfbWFrZV9pZCJdID0gJG1ha2VfaWQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoJG1vZGVsX2lkICE9IC0xKXsKICAgICAgICAgICAgICAgICAgICAkcGFyYW1ldGVyc1sibW9kZWxfaWQiXSA9ICRtb2RlbF9pZDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkdXNhZ2VfaWQgIT0gLTEpewogICAgICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJzWyJ1c2FnZV9pZCJdID0gJHVzYWdlX2lkOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCRib2R5X2lkICE9IC0xKXsKICAgICAgICAgICAgICAgICAgICAkcGFyYW1ldGVyc1siYm9keV9pZCJdID0gJGJvZHlfaWQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoJG9yZGVyX2J5ICE9IC0xKXsKICAgICAgICAgICAgICAgICAgICAkcGFyYW1ldGVyc1sib3JkZXJfYnkiXSA9ICRvcmRlcl9ieTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkb3JkZXJfdHlwZSAhPSAtMSl7CiAgICAgICAgICAgICAgICAgICAgJHBhcmFtZXRlcnNbIm9yZGVyX3R5cGUiXSA9ICRvcmRlcl90eXBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZigkc3RhcnQ+MCl7CiAgICAgICAgICAgICAgICAgICAgJHBhcmFtZXRlcnNbIm9mZnNldCJdID0gJHN0YXJ0OwogICAgICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJzWyJsaW1pdCJdID0gJGxpbWl0OyAKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAkdmVoaWNsZXMgPSAkdGhpcy0+X2dldF9nYV9hcGlfY2xpZW50KCktPmdldFN0b2NrTGlzdCgkcGFyYW1ldGVycyk7CiAgICAgICAgICAgICAgICBpZiAoY291bnQoJHZlaGljbGVzKSA8ICRsaW1pdCl7CiAgICAgICAgICAgICAgICAgICAgJGxpbWl0ID0gY291bnQoJHZlaGljbGVzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKCRzdGFydD4wKXsKICAgICAgICAgICAgICAgICAgICAkdmVoaWNsZXNfdG9fc2hvdyA9ICR2ZWhpY2xlczsKICAgICAgICAgICAgICAgICAgICAkdG90cm93cyA9IGFycmF5X2tleV9leGlzdHMoInRvdHJvd3MiLCAkX0dFVCkgPyAkX0dFVFsidG90cm93cyJdIDogKGFycmF5X2tleV9leGlzdHMoInRvdHJvd3MiLCAkX1BPU1QpID8gJF9QT1NUWyJ0b3Ryb3dzIl0gOiAkbGltaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAkdmVoaWNsZXNfdG9fc2hvdyA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgZm9yICgkaSA9ICRzdGFydDsgJGkgPCAkbGltaXQ7ICRpKyspewogICAgICAgICAgICAgICAgICAgICAgICAkdmVoaWNsZXNfdG9fc2hvd1tdID0gJHZlaGljbGVzWyRpXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHRvdHJvd3MgPSBjb3VudCgkdmVoaWNsZXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAkY29udGVudCAuPSBHZXN0aW9uYWxlQXV0b0NvbnRlbnQ6OnZlaGljbGVzTGlzdCgKICAgICAgICAgICAgICAgICAgICAgICAgJHZlaGljbGVzX3RvX3Nob3csIAogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X3BhZ2VfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICR0b3Ryb3dzCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgCgkJJGNvbnRlbnQgPSBzdHJfcmVwbGFjZSgnWy1tYWluLV0nLCAkc2VhcmNoX2Zvcm0sICRjb250ZW50KTsKCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICR2ZWhpY2xlID0gJHRoaXMtPl9nZXRfZ2FfYXBpX2NsaWVudCgpLT5nZXRTdG9ja0RldGFpbCgkX0dFVFsndmVoaWNsZV9pZCddKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJGNvbnRlbnQgLj0gR2VzdGlvbmFsZUF1dG9Db250ZW50Ojp2ZWhpY2xlRGV0YWlsKAogICAgICAgICAgICAgICAgICAgICAgICAkdmVoaWNsZQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIAoJCSRjb250ZW50ID0gc3RyX3JlcGxhY2UoJ1stbWFpbi1dJywgJHNlYXJjaF9mb3JtLCAkY29udGVudCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuICRyZXF1ZXN0T3V0cHV0LiRjb250ZW50OwogICAgfQogICAgCiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBfYWRkX2NzcygpewogICAgICAgICB3cF9yZWdpc3Rlcl9zdHlsZSggJ2dhLWNzcycsIHBsdWdpbnNfdXJsKCAnY3NzL2dlc3Rpb25hbGVhdXRvLmNzcycgLCBfX0ZJTEVfXyApKTsKICAgICAgICAgd3BfZW5xdWV1ZV9zdHlsZSggJ2dhLWNzcycgKTsKICAgICAgICAgd3BfZW5xdWV1ZV9zdHlsZSggJ2dhLWZhbmN5Y3NzJyAsIHBsdWdpbnNfdXJsKCAnZmFuY3lib3gvanF1ZXJ5LmZhbmN5Ym94LTEuMy40LmNzcycgLCBfX0ZJTEVfXyApKTsKICAgIH0KICAgIAogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gX2FkZF9qcygpewogICAgICAgICB3cF9lbnF1ZXVlX3NjcmlwdCggJ2dhLXRvb2xzanMnLCBwbHVnaW5zX3VybCggJ2pzL2pxdWVyeS50b29scy5taW4uanMnICwgX19GSUxFX18gKSwgYXJyYXkoJ2pxdWVyeScpICk7CiAgICAgICAgIHdwX2VucXVldWVfc2NyaXB0KCAnZ2EtZmFuY3lqcycsIHBsdWdpbnNfdXJsKCAnZmFuY3lib3gvanF1ZXJ5LmZhbmN5Ym94LTEuMy40LnBhY2suanMnICwgX19GSUxFX18gKSwgYXJyYXkoJ2pxdWVyeScpICk7CiAgICAgICAgIHdwX2VucXVldWVfc2NyaXB0KCAnZ2EtdmFsaWRhdGVqcycsIHBsdWdpbnNfdXJsKCAnanMvanF1ZXJ5LnZhbGlkYXRlLm1pbi5qcycgLCBfX0ZJTEVfXyApLCBhcnJheSgnanF1ZXJ5JykgKTsKICAgIH0KICAgIAogICAgCiAgICAKICAgIGZ1bmN0aW9uIF9pbml0X3RyYW5zbGF0aW9ucygpIHsKICAgICAgICAkcGx1Z2luX2RpciA9IGJhc2VuYW1lKGRpcm5hbWUoX19GSUxFX18pKTsKICAgICAgICBsb2FkX3BsdWdpbl90ZXh0ZG9tYWluKCAnZGVmYXVsdCcsIGZhbHNlLCAkcGx1Z2luX2RpciApOwogICAgfQoKICAgIAogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7CiAgICAgICAgCiAgICAgICAgJG9wdGlvbnMgPSBnZXRfb3B0aW9uKCdnZXN0aW9uYWxlYXV0by1zZXR0aW5ncycpOwogICAgICAgIGlmKGlzX2FycmF5KCRvcHRpb25zKSl7CiAgICAgICAgICAgICR0aGlzLT5fcGFnZV90aXRsZSA9ICRvcHRpb25zWydwYWdlX25hbWUnXTsKICAgICAgICAgICAgJHRoaXMtPl9wYWdlX2lkID0gJG9wdGlvbnNbJ3BhZ2VfaWQnXTsKICAgICAgICAgICAgaWYoJG9wdGlvbnNbJ3BhZ2VfaWQnXSE9Ii0xIil7CiAgICAgICAgICAgICAgICAkdGhlX3BhZ2UgPSBnZXRfcGFnZSgkdGhpcy0+X3BhZ2VfaWQpOwogICAgICAgICAgICAgICAgJHRoZV9wYWdlLT5wb3N0X25hbWUgPSAkdGhpcy0+X3BhZ2VfdGl0bGU7CiAgICAgICAgICAgICAgICAkdGhlX3BhZ2UtPnBvc3RfdGl0bGUgPSAkdGhpcy0+X3BhZ2VfdGl0bGU7CiAgICAgICAgICAgICAgICAkdGhpcy0+X3BhZ2VfaWQgPSB3cF91cGRhdGVfcG9zdCgkdGhlX3BhZ2UpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICAgICAgYWRkX2ZpbHRlcigndGhlX2NvbnRlbnQnLCBhcnJheSgkdGhpcywgJ19oYW5kbGVfY29udGVudCcpKTsKCiAgICAgICAgICAgICAgICBhZGRfYWN0aW9uKCAnd3BfZW5xdWV1ZV9zY3JpcHRzJywgYXJyYXkoJHRoaXMsICdfYWRkX2NzcycpICk7CgogICAgICAgICAgICAgICAgYWRkX2FjdGlvbiggJ3dwX2VucXVldWVfc2NyaXB0cycsIGFycmF5KCR0aGlzLCAnX2FkZF9qcycpICk7CiAgICAgICAgCiAgICAgICAgICAgICAgICBhZGRfYWN0aW9uKCdwbHVnaW5zX2xvYWRlZCcsIGFycmF5KCR0aGlzLCAnX2luaXRfdHJhbnNsYXRpb25zJykpOwogICAgICAgIAogICAgfQp9Cgo/Pg=="));
Function Calls
base64_decode | 1 |
Stats
MD5 | d1b2f287e87c54081d2ec60e0db03a5e |
Eval Count | 1 |
Decode Time | 112 ms |