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("PD9waHAgaWYoY291bnQoZ2V0X2luY2x1ZGVkX2ZpbGVzKCkpID09IDEpIGV..
Decoded Output download
?>b'<?php if(count(get_included_files()) == 1) exit("No direct script access allowed");
require_once(ABSPATH . \'wp-admin/includes/file.php\');
define("LB_API_DEBUG", false);
define("LB_TEXT_CONNECTION_FAILED", \'Server is unavailable at the moment, please try again.\');
define("LB_TEXT_INVALID_RESPONSE", \'Server returned an invalid response, please contact support.\');
define("LB_TEXT_VERIFIED_RESPONSE", \'Verified! Thanks for purchasing.\');
define("LB_TEXT_PREPARING_MAIN_DOWNLOAD", \'Preparing to download main update...\');
define("LB_TEXT_MAIN_UPDATE_SIZE", \'Main Update size:\');
define("LB_TEXT_DONT_REFRESH", \'(Please do not refresh the page).\');
define("LB_TEXT_DOWNLOADING_MAIN", \'Downloading main update...\');
define("LB_TEXT_UPDATE_PERIOD_EXPIRED", \'Your update period has ended or your license is invalid, please contact support.\');
define("LB_TEXT_UPDATE_PATH_ERROR", \'Folder does not have write permission or the update file path could not be resolved, please contact support.\');
define("LB_TEXT_MAIN_UPDATE_DONE", \'Main update files downloaded and extracted.\');
define("LB_TEXT_UPDATE_EXTRACTION_ERROR", \'Update zip extraction failed.\');
define("LB_TEXT_PREPARING_SQL_DOWNLOAD", \'Preparing to download SQL update...\');
define("LB_TEXT_SQL_UPDATE_SIZE", \'SQL Update size:\');
define("LB_TEXT_DOWNLOADING_SQL", \'Downloading SQL update...\');
define("LB_TEXT_SQL_UPDATE_DONE", \'SQL update files downloaded.\');
define("LB_TEXT_UPDATE_WITH_SQL_DONE", \'Application was successfully updated, please import the downloaded SQL file in your database manually.\');
define("LB_TEXT_UPDATE_WITHOUT_SQL_DONE", \'Application was successfully updated, there were no SQL updates.\');
class LicenseBoxExternalAPI{
private $product_id;
private $api_url;
private $api_key;
private $api_language;
private $current_version;
private $verify_type;
private $verification_period;
private $current_path;
private $root_path;
private $license_file;
public function __construct(){
$this->product_id = \'BCA01566\';
$this->api_url = \'https://key.bigmix.vn/\';
$this->api_key = \'A2D38765F74C7444D4A5\';
$this->api_language = \'english\';
$this->current_version = \'v1.0.0\';
$this->verify_type = \'non_envato\';
$this->verification_period = 3;
$this->current_path = realpath(__DIR__);
$this->root_path = realpath($this->current_path.\'/..\');
$this->license_file = $this->current_path.\'/.lic\';
}
public function check_local_license_exist(){
return is_file($this->license_file);
}
public function get_current_version(){
return $this->current_version;
}
private function init_wp_fs(){
global $wp_filesystem;
if(false === ($credentials = request_filesystem_credentials(\'\'))){
return false;
}
if(!WP_Filesystem($credentials)){
request_filesystem_credentials(\'\');
return false;
}
return true;
}
private function write_wp_fs($file_path, $content){
global $wp_filesystem;
$save_file_to = $file_path;
if($this->init_wp_fs()){
if($wp_filesystem->put_contents($save_file_to, $content, FS_CHMOD_FILE)){
return true;
}
else{
return false;
}
}
}
private function read_wp_fs($file_path){
global $wp_filesystem;
if($this->init_wp_fs()){
return $wp_filesystem->get_contents($file_path);
}
}
private function call_api($method, $url, $data = null){
$wp_args = array(\'body\' => $data);
$wp_args[\'method\'] = $method;
$this_url = site_url();
$this_ip = getenv(\'SERVER_ADDR\')?:
$this->get_ip_from_third_party()?:
gethostbyname(gethostname());
$wp_args[\'headers\'] = array(
\'Content-Type\' => \'application/json\',
\'LB-API-KEY\' => $this->api_key,
\'LB-URL\' => $this_url,
\'LB-IP\' => $this_ip,
\'LB-LANG\' => $this->api_language
);
$wp_args[\'timeout\'] = 30;
$result = wp_remote_request($url, $wp_args);
if(is_wp_error($result)&&!LB_API_DEBUG){
$rs = array(
\'status\' => FALSE,
\'message\' => LB_TEXT_CONNECTION_FAILED
);
return json_encode($rs);
}
$http_status = $result[\'response\'][\'code\'];
if($http_status != 200){
if(LB_API_DEBUG){
$temp_decode = json_decode($result[\'body\'], true);
$rs = array(
\'status\' => FALSE,
\'message\' => ((!empty($temp_decode[\'error\']))?
$temp_decode[\'error\']:
$temp_decode[\'message\'])
);
return json_encode($rs);
}else{
$rs = array(
\'status\' => FALSE,
\'message\' => LB_TEXT_INVALID_RESPONSE
);
return json_encode($rs);
}
}
return $result[\'body\'];
}
public function check_connection(){
$get_data = $this->call_api(
\'POST\',
$this->api_url.\'api/check_connection_ext\'
);
$response = json_decode($get_data, true);
return $response;
}
public function get_latest_version(){
$data_array = array(
"product_id" => $this->product_id
);
$get_data = $this->call_api(
\'POST\',
$this->api_url.\'api/latest_version\',
json_encode($data_array)
);
$response = json_decode($get_data, true);
return $response;
}
public function activate_license($license, $client, $create_lic = true){
$data_array = array(
"product_id" => $this->product_id,
"license_code" => $license,
"client_name" => $client,
"verify_type" => $this->verify_type
);
$get_data = $this->call_api(
\'POST\',
$this->api_url.\'api/activate_license\',
json_encode($data_array)
);
$response = json_decode($get_data, true);
if(!empty($create_lic)){
if($response[\'status\']){
$licfile = trim($response[\'lic_response\']);
$this->write_wp_fs($this->license_file, $licfile);
}else{
if(is_writeable($this->license_file)){
unlink($this->license_file);
}
}
}
return $response;
}
public function verify_license($time_based_check = false, $license = false, $client = false){
if(!empty($license)&&!empty($client)){
$data_array = array(
"product_id" => $this->product_id,
"license_file" => null,
"license_code" => $license,
"client_name" => $client
);
}else{
if(is_file($this->license_file)){
$data_array = array(
"product_id" => $this->product_id,
"license_file" => $this->read_wp_fs($this->license_file),
"license_code" => null,
"client_name" => null
);
}else{
$data_array = array();
}
}
$res = array(\'status\' => TRUE, \'message\' => LB_TEXT_VERIFIED_RESPONSE);
if($time_based_check && $this->verification_period > 0){
ob_start();
if(session_status() == PHP_SESSION_NONE){
session_start();
}
$type = (int) $this->verification_period;
$today = date(\'d-m-Y\');
if(empty($_SESSION["bab7b7b047093de"])){
$_SESSION["bab7b7b047093de"] = \'00-00-0000\';
}
if($type == 1){
$type_text = \'1 day\';
}elseif($type == 3){
$type_text = \'3 days\';
}elseif($type == 7){
$type_text = \'1 week\';
}elseif($type == 30){
$type_text = \'1 month\';
}elseif($type == 90){
$type_text = \'3 months\';
}elseif($type == 365) {
$type_text = \'1 year\';
}else{
$type_text = $type.\' days\';
}
if(strtotime($today) >= strtotime($_SESSION["bab7b7b047093de"])){
$get_data = $this->call_api(
\'POST\',
$this->api_url.\'api/verify_license\',
json_encode($data_array)
);
$res = json_decode($get_data, true);
if($res[\'status\']==true){
$tomo = date(\'d-m-Y\', strtotime($today. \' + \'.$type_text));
$_SESSION["bab7b7b047093de"] = $tomo;
}
}
session_write_close();
ob_end_clean();
}else{
$get_data = $this->call_api(
\'POST\',
$this->api_url.\'api/verify_license\',
json_encode($data_array)
);
$res = json_decode($get_data, true);
}
return $res;
}
public function deactivate_license($license = false, $client = false){
if(!empty($license)&&!empty($client)){
$data_array = array(
"product_id" => $this->product_id,
"license_file" => null,
"license_code" => $license,
"client_name" => $client
);
}else{
if(is_file($this->license_file)){
$data_array = array(
"product_id" => $this->product_id,
"license_file" => $this->read_wp_fs($this->license_file),
"license_code" => null,
"client_name" => null
);
}else{
$data_array = array();
}
}
$get_data = $this->call_api(
\'POST\',
$this->api_url.\'api/deactivate_license\',
json_encode($data_array)
);
$response = json_decode($get_data, true);
if($response[\'status\']){
if(is_writeable($this->license_file)){
unlink($this->license_file);
}
}
return $response;
}
public function check_update(){
$data_array = array(
"product_id" => $this->product_id,
"current_version" => $this->current_version
);
$get_data = $this->call_api(
\'POST\',
$this->api_url.\'api/check_update\',
json_encode($data_array)
);
$response = json_decode($get_data, true);
return $response;
}
public function download_update($update_id, $type, $version, $license = false, $client = false){
if(!empty($license)&&!empty($client)){
$data_array = array(
"license_file" => null,
"license_code" => $license,
"client_name" => $client
);
}else{
if(is_file($this->license_file)){
$data_array = array(
"license_file" => $this->read_wp_fs($this->license_file),
"license_code" => null,
"client_name" => null
);
}else{
$data_array = array();
}
}
ob_end_flush();
ob_implicit_flush(true);
$version = str_replace(".", "_", $version);
ob_start();
$source_size = $this->api_url."api/get_update_size/main/".$update_id;
echo LB_TEXT_PREPARING_MAIN_DOWNLOAD."<br>";
ob_flush();
echo LB_TEXT_MAIN_UPDATE_SIZE." ".$this->get_remote_filesize($source_size)." ".LB_TEXT_DONT_REFRESH."<br>";
ob_flush();
$temp_progress = \'\';
$source = $this->api_url."api/download_update/main/".$update_id;
$wp_args = array(\'body\' => json_encode($data_array));
$wp_args[\'method\'] = \'POST\';
$this_url = site_url();
$this_ip = getenv(\'SERVER_ADDR\')?:
$this->get_ip_from_third_party()?:
gethostbyname(gethostname());
$wp_args[\'headers\'] = array(
\'Content-Type\' => \'application/json\',
\'LB-API-KEY\' => $this->api_key,
\'LB-URL\' => $this_url,
\'LB-IP\' => $this_ip,
\'LB-LANG\' => $this->api_language
);
$wp_args[\'timeout\'] = 30;
echo LB_TEXT_DOWNLOADING_MAIN."<br>";
ob_flush();
$result = wp_remote_request($source, $wp_args);
if(is_wp_error($result)){
exit("<br>".LB_TEXT_CONNECTION_FAILED);
}
$data = $result[\'body\'];
$http_status = $result[\'response\'][\'code\'];
if($http_status != 200){
if($http_status == 401){
exit("<br>".LB_TEXT_UPDATE_PERIOD_EXPIRED);
}else{
exit("<br>".LB_TEXT_INVALID_RESPONSE);
}
}
$destination = $this->root_path."/update_main_".$version.".zip";
$file = $this->write_wp_fs($destination, $data);
if(!$file){
exit("<br>".LB_TEXT_UPDATE_PATH_ERROR);
}
ob_flush();
$zip = new ZipArchive;
$res = $zip->open($destination);
if($res === TRUE){
$zip->extractTo($this->root_path."/");
$zip->close();
unlink($destination);
echo LB_TEXT_MAIN_UPDATE_DONE."<br><br>";
ob_flush();
}else{
echo LB_TEXT_UPDATE_EXTRACTION_ERROR."<br><br>";
ob_flush();
}
if($type == true){
$source_size = $this->api_url."api/get_update_size/sql/".$update_id;
echo LB_TEXT_PREPARING_SQL_DOWNLOAD."<br>";
ob_flush();
echo LB_TEXT_SQL_UPDATE_SIZE." ".$this->get_remote_filesize($source_size)." ".LB_TEXT_DONT_REFRESH."<br>";
ob_flush();
$temp_progress = \'\';
$source = $this->api_url."api/download_update/sql/".$update_id;
$wp_args = array(\'body\' => json_encode($data_array));
$wp_args[\'method\'] = \'POST\';
$this_url = site_url();
$this_ip = getenv(\'SERVER_ADDR\')?:
$this->get_ip_from_third_party()?:
gethostbyname(gethostname());
$wp_args[\'headers\'] = array(
\'Content-Type\' => \'application/json\',
\'LB-API-KEY\' => $this->api_key,
\'LB-URL\' => $this_url,
\'LB-IP\' => $this_ip,
\'LB-LANG\' => $this->api_language
);
$wp_args[\'timeout\'] = 30;
echo LB_TEXT_DOWNLOADING_SQL."<br>";
ob_flush();
$result = wp_remote_request($source, $wp_args);
if(is_wp_error($result)){
exit(LB_TEXT_CONNECTION_FAILED);
}
$data = $result[\'body\'];
$http_status = $result[\'response\'][\'code\'];
if($http_status!=200){
exit(LB_TEXT_INVALID_RESPONSE);
}
$destination = $this->root_path."/update_sql_".$version.".sql";
$file = $this->write_wp_fs($destination, $data);
if(!$file){
exit(LB_TEXT_UPDATE_PATH_ERROR);
}
echo LB_TEXT_SQL_UPDATE_DONE."<br><br>";
echo LB_TEXT_UPDATE_WITH_SQL_DONE;
ob_flush();
}else{
echo LB_TEXT_UPDATE_WITHOUT_SQL_DONE;
ob_flush();
}
ob_end_flush();
}
private function get_ip_from_third_party(){
$wp_args = array(\'method\' => \'GET\');
$wp_args[\'timeout\'] = 30;
$result = wp_remote_request(\'http://ipecho.net/plain\', $wp_args);
if(is_wp_error($result)){
return false;
}
return $result[\'body\'];
}
private function get_remote_filesize($url){
$wp_args = array(\'method\' => \'HEAD\');
$this_url = site_url();
$this_ip = getenv(\'SERVER_ADDR\')?:
$this->get_ip_from_third_party()?:
gethostbyname(gethostname());
$wp_args[\'headers\'] = array(
\'Content-Type\' => \'application/json\',
\'LB-API-KEY\' => $this->api_key,
\'LB-URL\' => $this_url,
\'LB-IP\' => $this_ip,
\'LB-LANG\' => $this->api_language
);
$wp_args[\'timeout\'] = 30;
$result = wp_remote_request($url, $wp_args);
if(is_wp_error($result)){
return false;
}
$filesize = $result[\'headers\'][\'content-length\'];
if ($filesize){
switch ($filesize){
case $filesize < 1024:
$size = $filesize .\' B\'; break;
case $filesize < 1048576:
$size = round($filesize / 1024, 2) .\' KB\'; break;
case $filesize < 1073741824:
$size = round($filesize / 1048576, 2) . \' MB\'; break;
case $filesize < 1099511627776:
$size = round($filesize / 1073741824, 2) . \' GB\'; break;
}
return $size;
}
}
}
'
Did this file decode correctly?
Original Code
<?php eval("?>".base64_decode("PD9waHAgaWYoY291bnQoZ2V0X2luY2x1ZGVkX2ZpbGVzKCkpID09IDEpIGV4aXQoIk5vIGRpcmVjdCBzY3JpcHQgYWNjZXNzIGFsbG93ZWQiKTsNCg0KcmVxdWlyZV9vbmNlKEFCU1BBVEggLiAnd3AtYWRtaW4vaW5jbHVkZXMvZmlsZS5waHAnKTsNCg0KZGVmaW5lKCJMQl9BUElfREVCVUciLCBmYWxzZSk7DQoNCmRlZmluZSgiTEJfVEVYVF9DT05ORUNUSU9OX0ZBSUxFRCIsICdTZXJ2ZXIgaXMgdW5hdmFpbGFibGUgYXQgdGhlIG1vbWVudCwgcGxlYXNlIHRyeSBhZ2Fpbi4nKTsNCmRlZmluZSgiTEJfVEVYVF9JTlZBTElEX1JFU1BPTlNFIiwgJ1NlcnZlciByZXR1cm5lZCBhbiBpbnZhbGlkIHJlc3BvbnNlLCBwbGVhc2UgY29udGFjdCBzdXBwb3J0LicpOw0KZGVmaW5lKCJMQl9URVhUX1ZFUklGSUVEX1JFU1BPTlNFIiwgJ1ZlcmlmaWVkISBUaGFua3MgZm9yIHB1cmNoYXNpbmcuJyk7DQpkZWZpbmUoIkxCX1RFWFRfUFJFUEFSSU5HX01BSU5fRE9XTkxPQUQiLCAnUHJlcGFyaW5nIHRvIGRvd25sb2FkIG1haW4gdXBkYXRlLi4uJyk7DQpkZWZpbmUoIkxCX1RFWFRfTUFJTl9VUERBVEVfU0laRSIsICdNYWluIFVwZGF0ZSBzaXplOicpOw0KZGVmaW5lKCJMQl9URVhUX0RPTlRfUkVGUkVTSCIsICcoUGxlYXNlIGRvIG5vdCByZWZyZXNoIHRoZSBwYWdlKS4nKTsNCmRlZmluZSgiTEJfVEVYVF9ET1dOTE9BRElOR19NQUlOIiwgJ0Rvd25sb2FkaW5nIG1haW4gdXBkYXRlLi4uJyk7DQpkZWZpbmUoIkxCX1RFWFRfVVBEQVRFX1BFUklPRF9FWFBJUkVEIiwgJ1lvdXIgdXBkYXRlIHBlcmlvZCBoYXMgZW5kZWQgb3IgeW91ciBsaWNlbnNlIGlzIGludmFsaWQsIHBsZWFzZSBjb250YWN0IHN1cHBvcnQuJyk7DQpkZWZpbmUoIkxCX1RFWFRfVVBEQVRFX1BBVEhfRVJST1IiLCAnRm9sZGVyIGRvZXMgbm90IGhhdmUgd3JpdGUgcGVybWlzc2lvbiBvciB0aGUgdXBkYXRlIGZpbGUgcGF0aCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQsIHBsZWFzZSBjb250YWN0IHN1cHBvcnQuJyk7DQpkZWZpbmUoIkxCX1RFWFRfTUFJTl9VUERBVEVfRE9ORSIsICdNYWluIHVwZGF0ZSBmaWxlcyBkb3dubG9hZGVkIGFuZCBleHRyYWN0ZWQuJyk7DQpkZWZpbmUoIkxCX1RFWFRfVVBEQVRFX0VYVFJBQ1RJT05fRVJST1IiLCAnVXBkYXRlIHppcCBleHRyYWN0aW9uIGZhaWxlZC4nKTsNCmRlZmluZSgiTEJfVEVYVF9QUkVQQVJJTkdfU1FMX0RPV05MT0FEIiwgJ1ByZXBhcmluZyB0byBkb3dubG9hZCBTUUwgdXBkYXRlLi4uJyk7DQpkZWZpbmUoIkxCX1RFWFRfU1FMX1VQREFURV9TSVpFIiwgJ1NRTCBVcGRhdGUgc2l6ZTonKTsNCmRlZmluZSgiTEJfVEVYVF9ET1dOTE9BRElOR19TUUwiLCAnRG93bmxvYWRpbmcgU1FMIHVwZGF0ZS4uLicpOw0KZGVmaW5lKCJMQl9URVhUX1NRTF9VUERBVEVfRE9ORSIsICdTUUwgdXBkYXRlIGZpbGVzIGRvd25sb2FkZWQuJyk7DQpkZWZpbmUoIkxCX1RFWFRfVVBEQVRFX1dJVEhfU1FMX0RPTkUiLCAnQXBwbGljYXRpb24gd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLCBwbGVhc2UgaW1wb3J0IHRoZSBkb3dubG9hZGVkIFNRTCBmaWxlIGluIHlvdXIgZGF0YWJhc2UgbWFudWFsbHkuJyk7DQpkZWZpbmUoIkxCX1RFWFRfVVBEQVRFX1dJVEhPVVRfU1FMX0RPTkUiLCAnQXBwbGljYXRpb24gd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLCB0aGVyZSB3ZXJlIG5vIFNRTCB1cGRhdGVzLicpOw0KDQpjbGFzcyBMaWNlbnNlQm94RXh0ZXJuYWxBUEl7DQoNCglwcml2YXRlICRwcm9kdWN0X2lkOw0KCXByaXZhdGUgJGFwaV91cmw7DQoJcHJpdmF0ZSAkYXBpX2tleTsNCglwcml2YXRlICRhcGlfbGFuZ3VhZ2U7DQoJcHJpdmF0ZSAkY3VycmVudF92ZXJzaW9uOw0KCXByaXZhdGUgJHZlcmlmeV90eXBlOw0KCXByaXZhdGUgJHZlcmlmaWNhdGlvbl9wZXJpb2Q7DQoJcHJpdmF0ZSAkY3VycmVudF9wYXRoOw0KCXByaXZhdGUgJHJvb3RfcGF0aDsNCglwcml2YXRlICRsaWNlbnNlX2ZpbGU7DQoNCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKXsgDQoJCSR0aGlzLT5wcm9kdWN0X2lkID0gJ0JDQTAxNTY2JzsNCgkJJHRoaXMtPmFwaV91cmwgPSAnaHR0cHM6Ly9rZXkuYmlnbWl4LnZuLyc7DQoJCSR0aGlzLT5hcGlfa2V5ID0gJ0EyRDM4NzY1Rjc0Qzc0NDRENEE1JzsNCgkJJHRoaXMtPmFwaV9sYW5ndWFnZSA9ICdlbmdsaXNoJzsNCgkJJHRoaXMtPmN1cnJlbnRfdmVyc2lvbiA9ICd2MS4wLjAnOw0KCQkkdGhpcy0+dmVyaWZ5X3R5cGUgPSAnbm9uX2VudmF0byc7DQoJCSR0aGlzLT52ZXJpZmljYXRpb25fcGVyaW9kID0gMzsNCgkJJHRoaXMtPmN1cnJlbnRfcGF0aCA9IHJlYWxwYXRoKF9fRElSX18pOw0KCQkkdGhpcy0+cm9vdF9wYXRoID0gcmVhbHBhdGgoJHRoaXMtPmN1cnJlbnRfcGF0aC4nLy4uJyk7DQoJCSR0aGlzLT5saWNlbnNlX2ZpbGUgPSAkdGhpcy0+Y3VycmVudF9wYXRoLicvLmxpYyc7DQoJfQ0KDQoJcHVibGljIGZ1bmN0aW9uIGNoZWNrX2xvY2FsX2xpY2Vuc2VfZXhpc3QoKXsNCgkJcmV0dXJuIGlzX2ZpbGUoJHRoaXMtPmxpY2Vuc2VfZmlsZSk7DQoJfQ0KDQoJcHVibGljIGZ1bmN0aW9uIGdldF9jdXJyZW50X3ZlcnNpb24oKXsNCgkJcmV0dXJuICR0aGlzLT5jdXJyZW50X3ZlcnNpb247DQoJfQ0KDQoJcHJpdmF0ZSBmdW5jdGlvbiBpbml0X3dwX2ZzKCl7DQoJCWdsb2JhbCAkd3BfZmlsZXN5c3RlbTsNCgkJaWYoZmFsc2UgPT09ICgkY3JlZGVudGlhbHMgPSByZXF1ZXN0X2ZpbGVzeXN0ZW1fY3JlZGVudGlhbHMoJycpKSl7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJaWYoIVdQX0ZpbGVzeXN0ZW0oJGNyZWRlbnRpYWxzKSl7IA0KCQkJcmVxdWVzdF9maWxlc3lzdGVtX2NyZWRlbnRpYWxzKCcnKTsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCglwcml2YXRlIGZ1bmN0aW9uIHdyaXRlX3dwX2ZzKCRmaWxlX3BhdGgsICRjb250ZW50KXsNCgkJZ2xvYmFsICR3cF9maWxlc3lzdGVtOw0KCQkkc2F2ZV9maWxlX3RvID0gJGZpbGVfcGF0aDsNCgkJaWYoJHRoaXMtPmluaXRfd3BfZnMoKSl7ICAgIA0KCQkJaWYoJHdwX2ZpbGVzeXN0ZW0tPnB1dF9jb250ZW50cygkc2F2ZV9maWxlX3RvLCAkY29udGVudCwgRlNfQ0hNT0RfRklMRSkpew0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQkJZWxzZXsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCX0NCgl9DQoNCglwcml2YXRlIGZ1bmN0aW9uIHJlYWRfd3BfZnMoJGZpbGVfcGF0aCl7DQoJCWdsb2JhbCAkd3BfZmlsZXN5c3RlbTsNCgkJaWYoJHRoaXMtPmluaXRfd3BfZnMoKSl7ICAgIA0KCQkJcmV0dXJuICR3cF9maWxlc3lzdGVtLT5nZXRfY29udGVudHMoJGZpbGVfcGF0aCk7DQoJCX0NCgl9DQoNCglwcml2YXRlIGZ1bmN0aW9uIGNhbGxfYXBpKCRtZXRob2QsICR1cmwsICRkYXRhID0gbnVsbCl7DQoJCSR3cF9hcmdzID0gYXJyYXkoJ2JvZHknID0+ICRkYXRhKTsJDQoJCSR3cF9hcmdzWydtZXRob2QnXSA9ICRtZXRob2Q7DQoNCgkJJHRoaXNfdXJsID0gc2l0ZV91cmwoKTsNCgkJJHRoaXNfaXAgPSBnZXRlbnYoJ1NFUlZFUl9BRERSJyk/Og0KCQkJJHRoaXMtPmdldF9pcF9mcm9tX3RoaXJkX3BhcnR5KCk/Og0KCQkJZ2V0aG9zdGJ5bmFtZShnZXRob3N0bmFtZSgpKTsNCg0KCQkkd3BfYXJnc1snaGVhZGVycyddID0gYXJyYXkoDQoJCQknQ29udGVudC1UeXBlJyA9PiAnYXBwbGljYXRpb24vanNvbicsIA0KCQkJJ0xCLUFQSS1LRVknID0+ICR0aGlzLT5hcGlfa2V5LCANCgkJCSdMQi1VUkwnID0+ICR0aGlzX3VybCwgDQoJCQknTEItSVAnID0+ICR0aGlzX2lwLCANCgkJCSdMQi1MQU5HJyA9PiAkdGhpcy0+YXBpX2xhbmd1YWdlDQoJCSk7DQoJCSR3cF9hcmdzWyd0aW1lb3V0J10gPSAzMDsNCg0KCQkkcmVzdWx0ID0gd3BfcmVtb3RlX3JlcXVlc3QoJHVybCwgJHdwX2FyZ3MpOw0KDQoJCWlmKGlzX3dwX2Vycm9yKCRyZXN1bHQpJiYhTEJfQVBJX0RFQlVHKXsNCgkJCSRycyA9IGFycmF5KA0KCQkJCSdzdGF0dXMnID0+IEZBTFNFLCANCgkJCQknbWVzc2FnZScgPT4gTEJfVEVYVF9DT05ORUNUSU9OX0ZBSUxFRA0KCQkJKTsNCgkJCXJldHVybiBqc29uX2VuY29kZSgkcnMpOw0KCQl9DQoJCSRodHRwX3N0YXR1cyA9ICRyZXN1bHRbJ3Jlc3BvbnNlJ11bJ2NvZGUnXTsNCgkJaWYoJGh0dHBfc3RhdHVzICE9IDIwMCl7DQoJCQlpZihMQl9BUElfREVCVUcpew0KCQkJCSR0ZW1wX2RlY29kZSA9IGpzb25fZGVjb2RlKCRyZXN1bHRbJ2JvZHknXSwgdHJ1ZSk7DQoJCQkJJHJzID0gYXJyYXkoDQoJCQkJCSdzdGF0dXMnID0+IEZBTFNFLCANCgkJCQkJJ21lc3NhZ2UnID0+ICgoIWVtcHR5KCR0ZW1wX2RlY29kZVsnZXJyb3InXSkpPw0KCQkJCQkJJHRlbXBfZGVjb2RlWydlcnJvciddOg0KCQkJCQkJJHRlbXBfZGVjb2RlWydtZXNzYWdlJ10pDQoJCQkJKTsNCgkJCQlyZXR1cm4ganNvbl9lbmNvZGUoJHJzKTsNCgkJCX1lbHNlew0KCQkJCSRycyA9IGFycmF5KA0KCQkJCQknc3RhdHVzJyA9PiBGQUxTRSwgDQoJCQkJCSdtZXNzYWdlJyA9PiBMQl9URVhUX0lOVkFMSURfUkVTUE9OU0UNCgkJCQkpOw0KCQkJCXJldHVybiBqc29uX2VuY29kZSgkcnMpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAkcmVzdWx0Wydib2R5J107DQoJfQ0KDQoJcHVibGljIGZ1bmN0aW9uIGNoZWNrX2Nvbm5lY3Rpb24oKXsNCgkJJGdldF9kYXRhID0gJHRoaXMtPmNhbGxfYXBpKA0KCQkJJ1BPU1QnLA0KCQkJJHRoaXMtPmFwaV91cmwuJ2FwaS9jaGVja19jb25uZWN0aW9uX2V4dCcNCgkJKTsNCgkJJHJlc3BvbnNlID0ganNvbl9kZWNvZGUoJGdldF9kYXRhLCB0cnVlKTsNCgkJcmV0dXJuICRyZXNwb25zZTsNCgl9DQoNCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2xhdGVzdF92ZXJzaW9uKCl7DQoJCSRkYXRhX2FycmF5ID0gIGFycmF5KA0KCQkJInByb2R1Y3RfaWQiICA9PiAkdGhpcy0+cHJvZHVjdF9pZA0KCQkpOw0KCQkkZ2V0X2RhdGEgPSAkdGhpcy0+Y2FsbF9hcGkoDQoJCQknUE9TVCcsDQoJCQkkdGhpcy0+YXBpX3VybC4nYXBpL2xhdGVzdF92ZXJzaW9uJywgDQoJCQlqc29uX2VuY29kZSgkZGF0YV9hcnJheSkNCgkJKTsNCgkJJHJlc3BvbnNlID0ganNvbl9kZWNvZGUoJGdldF9kYXRhLCB0cnVlKTsNCgkJcmV0dXJuICRyZXNwb25zZTsNCgl9DQoNCglwdWJsaWMgZnVuY3Rpb24gYWN0aXZhdGVfbGljZW5zZSgkbGljZW5zZSwgJGNsaWVudCwgJGNyZWF0ZV9saWMgPSB0cnVlKXsNCgkJJGRhdGFfYXJyYXkgPSAgYXJyYXkoDQoJCQkicHJvZHVjdF9pZCIgID0+ICR0aGlzLT5wcm9kdWN0X2lkLA0KCQkJImxpY2Vuc2VfY29kZSIgPT4gJGxpY2Vuc2UsDQoJCQkiY2xpZW50X25hbWUiID0+ICRjbGllbnQsDQoJCQkidmVyaWZ5X3R5cGUiID0+ICR0aGlzLT52ZXJpZnlfdHlwZQ0KCQkpOw0KCQkkZ2V0X2RhdGEgPSAkdGhpcy0+Y2FsbF9hcGkoDQoJCQknUE9TVCcsDQoJCQkkdGhpcy0+YXBpX3VybC4nYXBpL2FjdGl2YXRlX2xpY2Vuc2UnLCANCgkJCWpzb25fZW5jb2RlKCRkYXRhX2FycmF5KQ0KCQkpOw0KCQkkcmVzcG9uc2UgPSBqc29uX2RlY29kZSgkZ2V0X2RhdGEsIHRydWUpOw0KCQlpZighZW1wdHkoJGNyZWF0ZV9saWMpKXsNCgkJCWlmKCRyZXNwb25zZVsnc3RhdHVzJ10pew0KCQkJCSRsaWNmaWxlID0gdHJpbSgkcmVzcG9uc2VbJ2xpY19yZXNwb25zZSddKTsNCgkJCQkkdGhpcy0+d3JpdGVfd3BfZnMoJHRoaXMtPmxpY2Vuc2VfZmlsZSwgJGxpY2ZpbGUpOw0KCQkJfWVsc2V7DQoJCQkJaWYoaXNfd3JpdGVhYmxlKCR0aGlzLT5saWNlbnNlX2ZpbGUpKXsNCgkJCQkJdW5saW5rKCR0aGlzLT5saWNlbnNlX2ZpbGUpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJHJlc3BvbnNlOw0KCX0NCg0KCXB1YmxpYyBmdW5jdGlvbiB2ZXJpZnlfbGljZW5zZSgkdGltZV9iYXNlZF9jaGVjayA9IGZhbHNlLCAkbGljZW5zZSA9IGZhbHNlLCAkY2xpZW50ID0gZmFsc2Upew0KCQlpZighZW1wdHkoJGxpY2Vuc2UpJiYhZW1wdHkoJGNsaWVudCkpew0KCQkJJGRhdGFfYXJyYXkgPSAgYXJyYXkoDQoJCQkJInByb2R1Y3RfaWQiICA9PiAkdGhpcy0+cHJvZHVjdF9pZCwNCgkJCQkibGljZW5zZV9maWxlIiA9PiBudWxsLA0KCQkJCSJsaWNlbnNlX2NvZGUiID0+ICRsaWNlbnNlLA0KCQkJCSJjbGllbnRfbmFtZSIgPT4gJGNsaWVudA0KCQkJKTsNCgkJfWVsc2V7DQoJCQlpZihpc19maWxlKCR0aGlzLT5saWNlbnNlX2ZpbGUpKXsNCgkJCQkkZGF0YV9hcnJheSA9ICBhcnJheSgNCgkJCQkJInByb2R1Y3RfaWQiICA9PiAkdGhpcy0+cHJvZHVjdF9pZCwNCgkJCQkJImxpY2Vuc2VfZmlsZSIgPT4gJHRoaXMtPnJlYWRfd3BfZnMoJHRoaXMtPmxpY2Vuc2VfZmlsZSksDQoJCQkJCSJsaWNlbnNlX2NvZGUiID0+IG51bGwsDQoJCQkJCSJjbGllbnRfbmFtZSIgPT4gbnVsbA0KCQkJCSk7DQoJCQl9ZWxzZXsNCgkJCQkkZGF0YV9hcnJheSA9ICBhcnJheSgpOw0KCQkJfQ0KCQl9IA0KCQkkcmVzID0gYXJyYXkoJ3N0YXR1cycgPT4gVFJVRSwgJ21lc3NhZ2UnID0+IExCX1RFWFRfVkVSSUZJRURfUkVTUE9OU0UpOw0KCQlpZigkdGltZV9iYXNlZF9jaGVjayAmJiAkdGhpcy0+dmVyaWZpY2F0aW9uX3BlcmlvZCA+IDApew0KCQkJb2Jfc3RhcnQoKTsNCgkJCWlmKHNlc3Npb25fc3RhdHVzKCkgPT0gUEhQX1NFU1NJT05fTk9ORSl7DQoJCQkJc2Vzc2lvbl9zdGFydCgpOw0KCQkJfQ0KCQkJJHR5cGUgPSAoaW50KSAkdGhpcy0+dmVyaWZpY2F0aW9uX3BlcmlvZDsNCgkJCSR0b2RheSA9IGRhdGUoJ2QtbS1ZJyk7DQoJCQlpZihlbXB0eSgkX1NFU1NJT05bImJhYjdiN2IwNDcwOTNkZSJdKSl7DQoJCQkJJF9TRVNTSU9OWyJiYWI3YjdiMDQ3MDkzZGUiXSA9ICcwMC0wMC0wMDAwJzsNCgkJCX0NCgkJCWlmKCR0eXBlID09IDEpew0KCQkJCSR0eXBlX3RleHQgPSAnMSBkYXknOw0KCQkJfWVsc2VpZigkdHlwZSA9PSAzKXsNCgkJCQkkdHlwZV90ZXh0ID0gJzMgZGF5cyc7DQoJCQl9ZWxzZWlmKCR0eXBlID09IDcpew0KCQkJCSR0eXBlX3RleHQgPSAnMSB3ZWVrJzsNCgkJCX1lbHNlaWYoJHR5cGUgPT0gMzApew0KCQkJCSR0eXBlX3RleHQgPSAnMSBtb250aCc7DQoJCQl9ZWxzZWlmKCR0eXBlID09IDkwKXsNCgkJCQkkdHlwZV90ZXh0ID0gJzMgbW9udGhzJzsNCgkJCX1lbHNlaWYoJHR5cGUgPT0gMzY1KSB7DQoJCQkJJHR5cGVfdGV4dCA9ICcxIHllYXInOw0KCQkJfWVsc2V7DQoJCQkJJHR5cGVfdGV4dCA9ICR0eXBlLicgZGF5cyc7DQoJCQl9DQoJCQlpZihzdHJ0b3RpbWUoJHRvZGF5KSA+PSBzdHJ0b3RpbWUoJF9TRVNTSU9OWyJiYWI3YjdiMDQ3MDkzZGUiXSkpew0KCQkJCSRnZXRfZGF0YSA9ICR0aGlzLT5jYWxsX2FwaSgNCgkJCQkJJ1BPU1QnLA0KCQkJCQkkdGhpcy0+YXBpX3VybC4nYXBpL3ZlcmlmeV9saWNlbnNlJywgDQoJCQkJCWpzb25fZW5jb2RlKCRkYXRhX2FycmF5KQ0KCQkJCSk7DQoJCQkJJHJlcyA9IGpzb25fZGVjb2RlKCRnZXRfZGF0YSwgdHJ1ZSk7DQoJCQkJaWYoJHJlc1snc3RhdHVzJ109PXRydWUpew0KCQkJCQkkdG9tbyA9IGRhdGUoJ2QtbS1ZJywgc3RydG90aW1lKCR0b2RheS4gJyArICcuJHR5cGVfdGV4dCkpOw0KCQkJCQkkX1NFU1NJT05bImJhYjdiN2IwNDcwOTNkZSJdID0gJHRvbW87DQoJCQkJfQ0KCQkJfQ0KCQkJc2Vzc2lvbl93cml0ZV9jbG9zZSgpOw0KCQkJb2JfZW5kX2NsZWFuKCk7DQoJCX1lbHNlew0KCQkJJGdldF9kYXRhID0gJHRoaXMtPmNhbGxfYXBpKA0KCQkJCSdQT1NUJywNCgkJCQkkdGhpcy0+YXBpX3VybC4nYXBpL3ZlcmlmeV9saWNlbnNlJywgDQoJCQkJanNvbl9lbmNvZGUoJGRhdGFfYXJyYXkpDQoJCQkpOw0KCQkJJHJlcyA9IGpzb25fZGVjb2RlKCRnZXRfZGF0YSwgdHJ1ZSk7DQoJCX0NCgkJcmV0dXJuICRyZXM7DQoJfQ0KDQoJcHVibGljIGZ1bmN0aW9uIGRlYWN0aXZhdGVfbGljZW5zZSgkbGljZW5zZSA9IGZhbHNlLCAkY2xpZW50ID0gZmFsc2Upew0KCQlpZighZW1wdHkoJGxpY2Vuc2UpJiYhZW1wdHkoJGNsaWVudCkpew0KCQkJJGRhdGFfYXJyYXkgPSAgYXJyYXkoDQoJCQkJInByb2R1Y3RfaWQiICA9PiAkdGhpcy0+cHJvZHVjdF9pZCwNCgkJCQkibGljZW5zZV9maWxlIiA9PiBudWxsLA0KCQkJCSJsaWNlbnNlX2NvZGUiID0+ICRsaWNlbnNlLA0KCQkJCSJjbGllbnRfbmFtZSIgPT4gJGNsaWVudA0KCQkJKTsNCgkJfWVsc2V7DQoJCQlpZihpc19maWxlKCR0aGlzLT5saWNlbnNlX2ZpbGUpKXsNCgkJCQkkZGF0YV9hcnJheSA9ICBhcnJheSgNCgkJCQkJInByb2R1Y3RfaWQiICA9PiAkdGhpcy0+cHJvZHVjdF9pZCwNCgkJCQkJImxpY2Vuc2VfZmlsZSIgPT4gJHRoaXMtPnJlYWRfd3BfZnMoJHRoaXMtPmxpY2Vuc2VfZmlsZSksDQoJCQkJCSJsaWNlbnNlX2NvZGUiID0+IG51bGwsDQoJCQkJCSJjbGllbnRfbmFtZSIgPT4gbnVsbA0KCQkJCSk7DQoJCQl9ZWxzZXsNCgkJCQkkZGF0YV9hcnJheSA9ICBhcnJheSgpOw0KCQkJfQ0KCQl9DQoJCSRnZXRfZGF0YSA9ICR0aGlzLT5jYWxsX2FwaSgNCgkJCSdQT1NUJywNCgkJCSR0aGlzLT5hcGlfdXJsLidhcGkvZGVhY3RpdmF0ZV9saWNlbnNlJywgDQoJCQlqc29uX2VuY29kZSgkZGF0YV9hcnJheSkNCgkJKTsNCgkJJHJlc3BvbnNlID0ganNvbl9kZWNvZGUoJGdldF9kYXRhLCB0cnVlKTsNCgkJaWYoJHJlc3BvbnNlWydzdGF0dXMnXSl7DQoJCQlpZihpc193cml0ZWFibGUoJHRoaXMtPmxpY2Vuc2VfZmlsZSkpew0KCQkJCXVubGluaygkdGhpcy0+bGljZW5zZV9maWxlKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJHJlc3BvbnNlOw0KCX0NCg0KCXB1YmxpYyBmdW5jdGlvbiBjaGVja191cGRhdGUoKXsNCgkJJGRhdGFfYXJyYXkgPSAgYXJyYXkoDQoJCQkicHJvZHVjdF9pZCIgID0+ICR0aGlzLT5wcm9kdWN0X2lkLA0KCQkJImN1cnJlbnRfdmVyc2lvbiIgPT4gJHRoaXMtPmN1cnJlbnRfdmVyc2lvbg0KCQkpOw0KCQkkZ2V0X2RhdGEgPSAkdGhpcy0+Y2FsbF9hcGkoDQoJCQknUE9TVCcsDQoJCQkkdGhpcy0+YXBpX3VybC4nYXBpL2NoZWNrX3VwZGF0ZScsIA0KCQkJanNvbl9lbmNvZGUoJGRhdGFfYXJyYXkpDQoJCSk7DQoJCSRyZXNwb25zZSA9IGpzb25fZGVjb2RlKCRnZXRfZGF0YSwgdHJ1ZSk7DQoJCXJldHVybiAkcmVzcG9uc2U7DQoJfQ0KDQoJcHVibGljIGZ1bmN0aW9uIGRvd25sb2FkX3VwZGF0ZSgkdXBkYXRlX2lkLCAkdHlwZSwgJHZlcnNpb24sICRsaWNlbnNlID0gZmFsc2UsICRjbGllbnQgPSBmYWxzZSl7IA0KCQlpZighZW1wdHkoJGxpY2Vuc2UpJiYhZW1wdHkoJGNsaWVudCkpew0KCQkJJGRhdGFfYXJyYXkgPSAgYXJyYXkoDQoJCQkJImxpY2Vuc2VfZmlsZSIgPT4gbnVsbCwNCgkJCQkibGljZW5zZV9jb2RlIiA9PiAkbGljZW5zZSwNCgkJCQkiY2xpZW50X25hbWUiID0+ICRjbGllbnQNCgkJCSk7DQoJCX1lbHNlew0KCQkJaWYoaXNfZmlsZSgkdGhpcy0+bGljZW5zZV9maWxlKSl7DQoJCQkJJGRhdGFfYXJyYXkgPSAgYXJyYXkoDQoJCQkJCSJsaWNlbnNlX2ZpbGUiID0+ICR0aGlzLT5yZWFkX3dwX2ZzKCR0aGlzLT5saWNlbnNlX2ZpbGUpLA0KCQkJCQkibGljZW5zZV9jb2RlIiA9PiBudWxsLA0KCQkJCQkiY2xpZW50X25hbWUiID0+IG51bGwNCgkJCQkpOw0KCQkJfWVsc2V7DQoJCQkJJGRhdGFfYXJyYXkgPSAgYXJyYXkoKTsNCgkJCX0NCgkJfQ0KCQlvYl9lbmRfZmx1c2goKTsgDQoJCW9iX2ltcGxpY2l0X2ZsdXNoKHRydWUpOyAgDQoJCSR2ZXJzaW9uID0gc3RyX3JlcGxhY2UoIi4iLCAiXyIsICR2ZXJzaW9uKTsNCgkJb2Jfc3RhcnQoKTsNCgkJJHNvdXJjZV9zaXplID0gJHRoaXMtPmFwaV91cmwuImFwaS9nZXRfdXBkYXRlX3NpemUvbWFpbi8iLiR1cGRhdGVfaWQ7IA0KCQllY2hvIExCX1RFWFRfUFJFUEFSSU5HX01BSU5fRE9XTkxPQUQuIjxicj4iOw0KCQlvYl9mbHVzaCgpOw0KCQllY2hvIExCX1RFWFRfTUFJTl9VUERBVEVfU0laRS4iICIuJHRoaXMtPmdldF9yZW1vdGVfZmlsZXNpemUoJHNvdXJjZV9zaXplKS4iICIuTEJfVEVYVF9ET05UX1JFRlJFU0guIjxicj4iOw0KCQlvYl9mbHVzaCgpOw0KCQkkdGVtcF9wcm9ncmVzcyA9ICcnOw0KCQkkc291cmNlID0gJHRoaXMtPmFwaV91cmwuImFwaS9kb3dubG9hZF91cGRhdGUvbWFpbi8iLiR1cGRhdGVfaWQ7IA0KCQkkd3BfYXJncyA9IGFycmF5KCdib2R5JyA9PiBqc29uX2VuY29kZSgkZGF0YV9hcnJheSkpOwkNCgkJJHdwX2FyZ3NbJ21ldGhvZCddID0gJ1BPU1QnOw0KCQkkdGhpc191cmwgPSBzaXRlX3VybCgpOw0KCQkkdGhpc19pcCA9IGdldGVudignU0VSVkVSX0FERFInKT86DQoJCQkkdGhpcy0+Z2V0X2lwX2Zyb21fdGhpcmRfcGFydHkoKT86DQoJCQlnZXRob3N0YnluYW1lKGdldGhvc3RuYW1lKCkpOw0KCQkkd3BfYXJnc1snaGVhZGVycyddID0gYXJyYXkoDQoJCQknQ29udGVudC1UeXBlJyA9PiAnYXBwbGljYXRpb24vanNvbicsIA0KCQkJJ0xCLUFQSS1LRVknID0+ICR0aGlzLT5hcGlfa2V5LCANCgkJCSdMQi1VUkwnID0+ICR0aGlzX3VybCwgDQoJCQknTEItSVAnID0+ICR0aGlzX2lwLCANCgkJCSdMQi1MQU5HJyA9PiAkdGhpcy0+YXBpX2xhbmd1YWdlDQoJCSk7DQoJCSR3cF9hcmdzWyd0aW1lb3V0J10gPSAzMDsNCgkJZWNobyBMQl9URVhUX0RPV05MT0FESU5HX01BSU4uIjxicj4iOw0KCQlvYl9mbHVzaCgpOw0KCQkkcmVzdWx0ID0gd3BfcmVtb3RlX3JlcXVlc3QoJHNvdXJjZSwgJHdwX2FyZ3MpOw0KCQlpZihpc193cF9lcnJvcigkcmVzdWx0KSl7DQoJCQlleGl0KCI8YnI+Ii5MQl9URVhUX0NPTk5FQ1RJT05fRkFJTEVEKTsNCgkJfQ0KCQkkZGF0YSA9ICRyZXN1bHRbJ2JvZHknXTsNCgkJJGh0dHBfc3RhdHVzID0gJHJlc3VsdFsncmVzcG9uc2UnXVsnY29kZSddOw0KCQlpZigkaHR0cF9zdGF0dXMgIT0gMjAwKXsNCgkJCWlmKCRodHRwX3N0YXR1cyA9PSA0MDEpew0KCQkJCWV4aXQoIjxicj4iLkxCX1RFWFRfVVBEQVRFX1BFUklPRF9FWFBJUkVEKTsNCgkJCX1lbHNlew0KCQkJCWV4aXQoIjxicj4iLkxCX1RFWFRfSU5WQUxJRF9SRVNQT05TRSk7DQoJCQl9DQoJCX0NCgkJJGRlc3RpbmF0aW9uID0gJHRoaXMtPnJvb3RfcGF0aC4iL3VwZGF0ZV9tYWluXyIuJHZlcnNpb24uIi56aXAiOyANCgkJJGZpbGUgPSAkdGhpcy0+d3JpdGVfd3BfZnMoJGRlc3RpbmF0aW9uLCAkZGF0YSk7DQoJCWlmKCEkZmlsZSl7DQoJCQlleGl0KCI8YnI+Ii5MQl9URVhUX1VQREFURV9QQVRIX0VSUk9SKTsNCgkJfQ0KCQlvYl9mbHVzaCgpOw0KCQkkemlwID0gbmV3IFppcEFyY2hpdmU7DQoJCSRyZXMgPSAkemlwLT5vcGVuKCRkZXN0aW5hdGlvbik7DQoJCWlmKCRyZXMgPT09IFRSVUUpew0KCQkJJHppcC0+ZXh0cmFjdFRvKCR0aGlzLT5yb290X3BhdGguIi8iKTsgDQoJCQkkemlwLT5jbG9zZSgpOw0KCQkJdW5saW5rKCRkZXN0aW5hdGlvbik7DQoJCQllY2hvIExCX1RFWFRfTUFJTl9VUERBVEVfRE9ORS4iPGJyPjxicj4iOw0KCQkJb2JfZmx1c2goKTsNCgkJfWVsc2V7DQoJCQllY2hvIExCX1RFWFRfVVBEQVRFX0VYVFJBQ1RJT05fRVJST1IuIjxicj48YnI+IjsNCgkJCW9iX2ZsdXNoKCk7DQoJCX0NCgkJaWYoJHR5cGUgPT0gdHJ1ZSl7DQoJCQkkc291cmNlX3NpemUgPSAkdGhpcy0+YXBpX3VybC4iYXBpL2dldF91cGRhdGVfc2l6ZS9zcWwvIi4kdXBkYXRlX2lkOyANCgkJCWVjaG8gTEJfVEVYVF9QUkVQQVJJTkdfU1FMX0RPV05MT0FELiI8YnI+IjsNCgkJCW9iX2ZsdXNoKCk7DQoJCQllY2hvIExCX1RFWFRfU1FMX1VQREFURV9TSVpFLiIgIi4kdGhpcy0+Z2V0X3JlbW90ZV9maWxlc2l6ZSgkc291cmNlX3NpemUpLiIgIi5MQl9URVhUX0RPTlRfUkVGUkVTSC4iPGJyPiI7DQoJCQlvYl9mbHVzaCgpOw0KCQkJJHRlbXBfcHJvZ3Jlc3MgPSAnJzsNCgkJCSRzb3VyY2UgPSAkdGhpcy0+YXBpX3VybC4iYXBpL2Rvd25sb2FkX3VwZGF0ZS9zcWwvIi4kdXBkYXRlX2lkOw0KCQkJJHdwX2FyZ3MgPSBhcnJheSgnYm9keScgPT4ganNvbl9lbmNvZGUoJGRhdGFfYXJyYXkpKTsJDQoJCQkkd3BfYXJnc1snbWV0aG9kJ10gPSAnUE9TVCc7DQoJCQkkdGhpc191cmwgPSBzaXRlX3VybCgpOw0KCQkJJHRoaXNfaXAgPSBnZXRlbnYoJ1NFUlZFUl9BRERSJyk/Og0KCQkJCSR0aGlzLT5nZXRfaXBfZnJvbV90aGlyZF9wYXJ0eSgpPzoNCgkJCQlnZXRob3N0YnluYW1lKGdldGhvc3RuYW1lKCkpOw0KCQkJJHdwX2FyZ3NbJ2hlYWRlcnMnXSA9IGFycmF5KA0KCQkJCSdDb250ZW50LVR5cGUnID0+ICdhcHBsaWNhdGlvbi9qc29uJywgDQoJCQkJJ0xCLUFQSS1LRVknID0+ICR0aGlzLT5hcGlfa2V5LCANCgkJCQknTEItVVJMJyA9PiAkdGhpc191cmwsIA0KCQkJCSdMQi1JUCcgPT4gJHRoaXNfaXAsIA0KCQkJCSdMQi1MQU5HJyA9PiAkdGhpcy0+YXBpX2xhbmd1YWdlDQoJCQkpOw0KCQkJJHdwX2FyZ3NbJ3RpbWVvdXQnXSA9IDMwOw0KCQkJZWNobyBMQl9URVhUX0RPV05MT0FESU5HX1NRTC4iPGJyPiI7DQoJCQlvYl9mbHVzaCgpOw0KCQkJJHJlc3VsdCA9IHdwX3JlbW90ZV9yZXF1ZXN0KCRzb3VyY2UsICR3cF9hcmdzKTsNCgkJCWlmKGlzX3dwX2Vycm9yKCRyZXN1bHQpKXsNCgkJCQlleGl0KExCX1RFWFRfQ09OTkVDVElPTl9GQUlMRUQpOw0KCQkJfQ0KCQkJJGRhdGEgPSAkcmVzdWx0Wydib2R5J107DQoJCQkkaHR0cF9zdGF0dXMgPSAkcmVzdWx0WydyZXNwb25zZSddWydjb2RlJ107DQoJCQlpZigkaHR0cF9zdGF0dXMhPTIwMCl7DQoJCQkJZXhpdChMQl9URVhUX0lOVkFMSURfUkVTUE9OU0UpOw0KCQkJfQ0KCQkJJGRlc3RpbmF0aW9uID0gJHRoaXMtPnJvb3RfcGF0aC4iL3VwZGF0ZV9zcWxfIi4kdmVyc2lvbi4iLnNxbCI7IA0KCQkJJGZpbGUgPSAkdGhpcy0+d3JpdGVfd3BfZnMoJGRlc3RpbmF0aW9uLCAkZGF0YSk7DQoJCQlpZighJGZpbGUpew0KCQkJCWV4aXQoTEJfVEVYVF9VUERBVEVfUEFUSF9FUlJPUik7DQoJCQl9DQoJCQllY2hvIExCX1RFWFRfU1FMX1VQREFURV9ET05FLiI8YnI+PGJyPiI7DQoJCQllY2hvIExCX1RFWFRfVVBEQVRFX1dJVEhfU1FMX0RPTkU7DQoJCQlvYl9mbHVzaCgpOw0KCQl9ZWxzZXsNCgkJCWVjaG8gTEJfVEVYVF9VUERBVEVfV0lUSE9VVF9TUUxfRE9ORTsNCgkJCW9iX2ZsdXNoKCk7DQoJCX0NCgkJb2JfZW5kX2ZsdXNoKCk7IA0KCX0NCg0KCXByaXZhdGUgZnVuY3Rpb24gZ2V0X2lwX2Zyb21fdGhpcmRfcGFydHkoKXsNCgkJJHdwX2FyZ3MgPSBhcnJheSgnbWV0aG9kJyA9PiAnR0VUJyk7CQ0KCQkkd3BfYXJnc1sndGltZW91dCddID0gMzA7DQoJCSRyZXN1bHQgPSB3cF9yZW1vdGVfcmVxdWVzdCgnaHR0cDovL2lwZWNoby5uZXQvcGxhaW4nLCAkd3BfYXJncyk7DQoJCWlmKGlzX3dwX2Vycm9yKCRyZXN1bHQpKXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQlyZXR1cm4gJHJlc3VsdFsnYm9keSddOw0KCX0NCg0KCXByaXZhdGUgZnVuY3Rpb24gZ2V0X3JlbW90ZV9maWxlc2l6ZSgkdXJsKXsNCgkJJHdwX2FyZ3MgPSBhcnJheSgnbWV0aG9kJyA9PiAnSEVBRCcpOwkNCgkJJHRoaXNfdXJsID0gc2l0ZV91cmwoKTsNCgkJJHRoaXNfaXAgPSBnZXRlbnYoJ1NFUlZFUl9BRERSJyk/Og0KCQkJJHRoaXMtPmdldF9pcF9mcm9tX3RoaXJkX3BhcnR5KCk/Og0KCQkJZ2V0aG9zdGJ5bmFtZShnZXRob3N0bmFtZSgpKTsNCgkJJHdwX2FyZ3NbJ2hlYWRlcnMnXSA9IGFycmF5KA0KCQkJJ0NvbnRlbnQtVHlwZScgPT4gJ2FwcGxpY2F0aW9uL2pzb24nLCANCgkJCSdMQi1BUEktS0VZJyA9PiAkdGhpcy0+YXBpX2tleSwgDQoJCQknTEItVVJMJyA9PiAkdGhpc191cmwsIA0KCQkJJ0xCLUlQJyA9PiAkdGhpc19pcCwgDQoJCQknTEItTEFORycgPT4gJHRoaXMtPmFwaV9sYW5ndWFnZQ0KCQkpOw0KCQkkd3BfYXJnc1sndGltZW91dCddID0gMzA7DQoJCSRyZXN1bHQgPSB3cF9yZW1vdGVfcmVxdWVzdCgkdXJsLCAkd3BfYXJncyk7DQoJCWlmKGlzX3dwX2Vycm9yKCRyZXN1bHQpKXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQkkZmlsZXNpemUgPSAkcmVzdWx0WydoZWFkZXJzJ11bJ2NvbnRlbnQtbGVuZ3RoJ107DQoJCWlmICgkZmlsZXNpemUpew0KCQkJc3dpdGNoICgkZmlsZXNpemUpew0KCQkJCWNhc2UgJGZpbGVzaXplIDwgMTAyNDoNCgkJCQkJJHNpemUgPSAkZmlsZXNpemUgLicgQic7IGJyZWFrOw0KCQkJCWNhc2UgJGZpbGVzaXplIDwgMTA0ODU3NjoNCgkJCQkJJHNpemUgPSByb3VuZCgkZmlsZXNpemUgLyAxMDI0LCAyKSAuJyBLQic7IGJyZWFrOw0KCQkJCWNhc2UgJGZpbGVzaXplIDwgMTA3Mzc0MTgyNDoNCgkJCQkJJHNpemUgPSByb3VuZCgkZmlsZXNpemUgLyAxMDQ4NTc2LCAyKSAuICcgTUInOyBicmVhazsNCgkJCQljYXNlICRmaWxlc2l6ZSA8IDEwOTk1MTE2Mjc3NzY6DQoJCQkJCSRzaXplID0gcm91bmQoJGZpbGVzaXplIC8gMTA3Mzc0MTgyNCwgMikgLiAnIEdCJzsgYnJlYWs7DQoJCQl9DQoJCQlyZXR1cm4gJHNpemU7IA0KCQl9DQoJfQ0KfQ0K")); ?>
Function Calls
base64_decode | 1 |
Stats
MD5 | 0a56ae4adfb2d190069544fe4673b500 |
Eval Count | 1 |
Decode Time | 61 ms |