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

Variables

None

Stats

MD5 0a56ae4adfb2d190069544fe4673b500
Eval Count 1
Decode Time 61 ms