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

Decoded Output download

?>b'<?
namespace Bitrix\Rxfacebook;

use \Bitrix\Rxfacebook\Library;
use \Bitrix\Rxfacebook\RxfbTable;
\CModule::IncludeModule(\'im\');

class FBManager
{
	private $error = null;
	private $id = null;
	public function __construct()
	{
		$this->error = new Error(null, \'\', \'\');
	}

	public function getOutput($line, $data)
	{
		$zaloConfig = RxfbTable::getById($line)->fetch();
		
		if( !empty($zaloConfig) ){
			$sOAToken = $zaloConfig[\'OA_TOKEN\'];
			
			foreach ($data as $index => $arMsg) {

				$arMess = self::makeJsonMessage($arMsg);
				
				if( !empty($arMess) ){
					self::sendMessage($sOAToken,$arMess);
				}

				$arData = array(
					\'recipient\' => array(
						\'user_id\' => $arMsg[\'chat\'][\'id\'],
					),
					\'message\' => array(
						\'text\' =>  $arMsg[\'message\'][\'text\']
					)
				);
				
				// http request
				//error_log("Outbound mess: " . json_encode($arMess) ."
". PHP_EOL, 3, $_SERVER[\'DOCUMENT_ROOT\'].\'/rxfb/outbound_log.txt\');
				
				//error_log("Response data: " . $response ."
". PHP_EOL, 3, $_SERVER[\'DOCUMENT_ROOT\'].\'/zalo/imconnector_log.txt\');
				\Bitrix\ImConnector\CustomConnectors::sendStatusDelivery(Library::FB_CONNECTOR ,$line ,$arData);
				$params = array(
					\'IS_DELIVERED\' => \'Y\'
				);

				self::makeJsonPhoto($arMsg,$sOAToken);

				//\CIMMessageParam::DeleteAll($arMsg[\'im\'][\'message_id\']);
				//\CIMMessageParam::Set($arMsg[\'im\'][\'message_id\'],$params);
			}
		}
		
	}
	
	function sendMessage($sOAToken,$arData)
	{
		$httpClient = new \Bitrix\Main\Web\HttpClient();
		$httpClient->setHeader("Content-Type", "application/json");
		$sSendMessUrl = Library::FB_SEND_MESS_URL . \'?access_token=\' . $sOAToken;
		$res = $httpClient->post($sSendMessUrl, json_encode($arData));
		//error_log("Result: " . json_encode($res) ."
". PHP_EOL, 3, $_SERVER[\'DOCUMENT_ROOT\'].\'/rxfb/outbound_log.txt\');

	}

	function makeJsonPhoto($arData,$sOAToken)
	{
		$arMess = array(
			"recipient" => array(
				"id" => $arData[\'chat\'][\'id\']
			),
			"message" => array(
				"attachment" => array(
					"type" => "image",
					"payload" => array()
				)
			)
		);

		$arPhoto = [];

		if( !empty($arData[\'message\'][\'files\']) )
		{
			\CIMMessageParam::DeleteAll($arData[\'im\'][\'message_id\']);
			$arFiles = array();
			
			foreach( $arData[\'message\'][\'files\'] as $photo )
			{
				if( $photo[\'type\'] == \'image\' )
				{
					//$sLink = self::getRealPath($photo[\'link\']);
					if( $sLink !== \'\' )
					{
						$arPhoto = array(
							//"is_reusable" => true,
							"url" => $photo[\'link\']
							//"url" => $sLink
						);
						$arMess[\'message\'][\'attachment\'][\'payload\'] = $arPhoto;
						$response = self::sendMessage($sOAToken,$arMess);
						//add photo for chat
						$iFileID = self::receivedPhoto($photo[\'link\']);
						if( $iFileID>0 )
						{
							array_push($arFiles,$iFileID);
						}
						// end photo
						
					}
				}
			}
			
			if( !empty($arFiles) )
			{
				$arParams = [ \'FILE_ID\' => $arFiles ];
				\CIMMessageParam::Set($arData[\'im\'][\'message_id\'],$arParams);
			}
		}
	}
	
	function receivedPhoto($sUrl)
	{
		global $DB;
		$arUrl = \CBXShortUri::GetUri($sUrl);
		if( !empty($arUrl) ) 
		{
			$url_components = parse_url($arUrl[\'URI\']);
			parse_str($url_components[\'query\'], $params);
			if( isset($params[\'FILE_ID\'])){
				return $params[\'FILE_ID\'];
			}
		}
		return 0;
	}
	
	function makeJsonMessage($arData)
	{
		global $USER;
		$arMess = [];


		if( isset($arData[\'message\'][\'text\']) & $arData[\'message\'][\'text\'] !== \'\' ){

			$obUser = $USER->GetByID($USER->GetID());
			$arUser = $obUser->Fetch();
			$strUserName = $arUser[\'NAME\']." ".$arUser[\'LAST_NAME\'];

			$arData[\'message\'][\'text\'] = str_replace(array(\'[b]\',\'[/b]\',\'[br]\',\'[/CHAT]\',\'[/USER]\'),array(\'\',\'\',\'\',\'\',\'\'), $arData[\'message\'][\'text\']);
			$iCheck = strpos($arData[\'message\'][\'text\'],$strUserName)===false?0:1;
			if ($iCheck) {
				$arData[\'message\'][\'text\'] = substr($arData[\'message\'][\'text\'],strlen($strUserName)+1,strlen($arData[\'message\'][\'text\']));
			}
		
			$arMessWord = explode(\']\',$arData[\'message\'][\'text\']);
			$arMessWord = implode(\'] \',$arMessWord);
			$arMessWord = explode(\' \',$arMessWord);
		
			foreach ($arMessWord as $key => $word) {
				if (strpos($word,\'[CHAT=\')!==false || strpos($word,\'[USER=\')!==false) {
					unset($arMessWord[$key]);
				}
			}

			$arData[\'message\'][\'text\'] = str_replace(\'] \',\']\',implode(\' \',$arMessWord));

			$arMess = array(
				"recipient" => array(
					"id" => $arData[\'chat\'][\'id\']
				),
				"message" => array(
					"text" => $arData[\'message\'][\'text\']
				)
			);
			\CIMMessageParam::DeleteAll($arData[\'im\'][\'message_id\']);
			\CIMMessageParam::Set($arData[\'im\'][\'message_id\'],[]);
		}
		return $arMess;
	}
	
	function removeCopyFile($sUrl)
	{
		//parse url before process
		$arUri 	= parse_url($sUrl);
		$scheme = $arUri[\'scheme\'];
		$host 	= $arUri[\'host\'];
		
		//get from short URI
		$arUrl = \CBXShortUri::GetUri($sUrl);
		if( !empty($arUrl) )
		{
			$url_components = parse_url($arUrl[\'URI\']);
			parse_str($url_components[\'query\'], $params);
			if( isset($params[\'FILE_ID\']) )
			{

				//get disk object
				$file = \Bitrix\Disk\File::getById($params[\'FILE_ID\']);
				$fileId = $file->getFileId();

				//get file infor
				$arFile = \CFile::GetFileArray($fileId);
				unset($file);

				$sFileType = \'.png\';
				if( $arFile[\'CONTENT_TYPE\'] == \'image/jpeg\')
				{
					$sFileType = \'.jpg\';
				}elseif( $arFile[\'CONTENT_TYPE\'] == \'image/gif\' )
				{
					$sFileType = \'.gif\';
				}				
				//error_log("ObjectID: " . $params[\'FILE_ID\'] ."
". PHP_EOL, 3, $_SERVER[\'DOCUMENT_ROOT\'].\'/rxfb/outbound_log.txt\');
				//error_log("FileID: " . $fileId ."
". PHP_EOL, 3, $_SERVER[\'DOCUMENT_ROOT\'].\'/rxfb/outbound_log.txt\');
				//error_log("arFile: " . json_encode($arFile) ."
". PHP_EOL, 3, $_SERVER[\'DOCUMENT_ROOT\'].\'/rxfb/outbound_log.txt\');
				$sSrcImage = $_SERVER[\'DOCUMENT_ROOT\'] . \'/rxfb/images/\' . $arFile[\'FILE_NAME\'] . $sFileType;
				unlink($sSrcImage);
			}
		}
	}

	function getRealPath($sUrl)
	{
		$sRealPath = \'\';
		
		//parse url before process
		$arUri 	= parse_url($sUrl);
		$scheme = $arUri[\'scheme\'];
		$host 	= $arUri[\'host\'];
		
		//get from short URI
		$arUrl = \CBXShortUri::GetUri($sUrl);
		if( !empty($arUrl) )
		{
			$url_components = parse_url($arUrl[\'URI\']);
			parse_str($url_components[\'query\'], $params);
			if( isset($params[\'FILE_ID\']) )
			{
				//get disk object
				$file = \Bitrix\Disk\File::getById($params[\'FILE_ID\']);
				$fileId = $file->getFileId();

				//$sSQL = "SELECT * FROM b_disk_object WHERE ID = ".$params[\'FILE_ID\'];
				//global $DB;
				//$rsResult = $DB->Query($sSQL);
				//$arDisk = $rsResult->Fetch();
				//error_log("arDisk: " . json_encode($arDisk) ."
". PHP_EOL, 3, $_SERVER[\'DOCUMENT_ROOT\'].\'/rxfb/outbound_log.txt\');
				//error_log("SQL: " . $sSQL ."
". PHP_EOL, 3, $_SERVER[\'DOCUMENT_ROOT\'].\'/rxfb/outbound_log.txt\');

				//get file infor
				$arFile = \CFile::GetFileArray($fileId);
				unset($file);

				$sFileType = \'.png\';
				if( $arFile[\'CONTENT_TYPE\'] == \'image/jpeg\')
				{
					$sFileType = \'.jpg\';
				}elseif( $arFile[\'CONTENT_TYPE\'] == \'image/gif\' )
				{
					$sFileType = \'.gif\';
				}				
				
				$sSrcImage = $_SERVER[\'DOCUMENT_ROOT\'] . $arFile[\'SRC\'];
				$sNewImage = $_SERVER[\'DOCUMENT_ROOT\'] . \'/rxfb/images/\' . $arFile[\'FILE_NAME\'] . $sFileType;

				copy($sSrcImage,$sNewImage);
				//error_log("ObjectID: " . $params[\'FILE_ID\'] ."
". PHP_EOL, 3, $_SERVER[\'DOCUMENT_ROOT\'].\'/rxfb/outbound_log.txt\');
				//error_log("FileID: " . $fileId ."
". PHP_EOL, 3, $_SERVER[\'DOCUMENT_ROOT\'].\'/rxfb/outbound_log.txt\');
				//error_log("arFile: " . json_encode($arFile) ."
". PHP_EOL, 3, $_SERVER[\'DOCUMENT_ROOT\'].\'/rxfb/outbound_log.txt\');
				$sRealPath = $scheme . "://" . $host . \'/rxfb/images/\' . $arFile[\'FILE_NAME\'] . $sFileType;
			}
		}
		return $sRealPath;
	}

	public function getUserProfile($uid, $line)
	{
		global $USER;
		$arResult = [];
		
		//build external user id
		$sUserXML = Library::FB_CONNECTOR.\'|\'.$uid;
		
		//get user
		$arSpecUser = [];
		$arFilter = ["XML_ID" => $sUserXML];
		$arSelect = [\'FIELDS\' => [\'NAME\',\'PERSONAL_PHOTO\',\'PERSONAL_GENDER\']];
		$rsUsers = \CUser::GetList(($by = "NAME"),($order = "desc"),$arFilter,$arSelect);
		while($arUser = $rsUsers->Fetch()) {
		   $arSpecUser[] = $arUser;
		}
		if( !empty($arSpecUser) )
		{
			$arResult[\'display_name\'] = $arSpecUser[0][\'NAME\'];
			$arResult[\'user_gender\'] = $arSpecUser[0][\'PERSONAL_GENDER\'];
			$arResult[\'avatar\'] = $arSpecUser[0][\'PERSONAL_PHOTO\'];
		}else{
			// get config
			if (!empty($line)){
				
				$zaloConfig = RxfbTable::getById($line)->fetch();
				$sOAToken = $zaloConfig[\'OA_TOKEN\'];

				$apiUrl = Library::FB_GRAPH_URL . $uid . \'?fields=name,picture&access_token=\' . $sOAToken;

				$httpClient = new \Bitrix\Main\Web\HttpClient();
				$response = $httpClient->get($apiUrl);
				//error_log("UserProfile: " . $response ."
". PHP_EOL, 3, $_SERVER[\'DOCUMENT_ROOT\'].\'/rxfb/user.txt\');
				$response = json_decode($response,true);
				if( !empty($response) && !isset($response[\'error\']) ){
					$fid = $response[\'id\'];
					$arResult[\'display_name\'] = $response[\'name\'];
					$arResult[\'user_gender\'] = $response[\'gender\'];

					$img = file_get_contents($response[\'picture\'][\'data\'][\'url\']);
					$file = $_SERVER[\'DOCUMENT_ROOT\'].\'/rxfb/avatars/\'.$fid.\'.jpg\';
					file_put_contents($file, $img);
					
					$urlManager = \Bitrix\Disk\Driver::getInstance()->getUrlManager();
					$avatar = $urlManager->getHostUrl() . \'/rxfb/avatars/\'.$fid.\'.jpg\';
					$arResult[\'avatar\'] = $avatar;
				}
			}
		}
		
		return $arResult;
	}

}'

Did this file decode correctly?

Original Code

<?php @eval("?>".base64_decode("PD8KbmFtZXNwYWNlIEJpdHJpeFxSeGZhY2Vib29rOwoKdXNlIFxCaXRyaXhcUnhmYWNlYm9va1xMaWJyYXJ5Owp1c2UgXEJpdHJpeFxSeGZhY2Vib29rXFJ4ZmJUYWJsZTsKXENNb2R1bGU6OkluY2x1ZGVNb2R1bGUoJ2ltJyk7CgpjbGFzcyBGQk1hbmFnZXIKewoJcHJpdmF0ZSAkZXJyb3IgPSBudWxsOwoJcHJpdmF0ZSAkaWQgPSBudWxsOwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKCXsKCQkkdGhpcy0+ZXJyb3IgPSBuZXcgRXJyb3IobnVsbCwgJycsICcnKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0T3V0cHV0KCRsaW5lLCAkZGF0YSkKCXsKCQkkemFsb0NvbmZpZyA9IFJ4ZmJUYWJsZTo6Z2V0QnlJZCgkbGluZSktPmZldGNoKCk7CgkJCgkJaWYoICFlbXB0eSgkemFsb0NvbmZpZykgKXsKCQkJJHNPQVRva2VuID0gJHphbG9Db25maWdbJ09BX1RPS0VOJ107CgkJCQoJCQlmb3JlYWNoICgkZGF0YSBhcyAkaW5kZXggPT4gJGFyTXNnKSB7CgoJCQkJJGFyTWVzcyA9IHNlbGY6Om1ha2VKc29uTWVzc2FnZSgkYXJNc2cpOwoJCQkJCgkJCQlpZiggIWVtcHR5KCRhck1lc3MpICl7CgkJCQkJc2VsZjo6c2VuZE1lc3NhZ2UoJHNPQVRva2VuLCRhck1lc3MpOwoJCQkJfQoKCQkJCSRhckRhdGEgPSBhcnJheSgKCQkJCQkncmVjaXBpZW50JyA9PiBhcnJheSgKCQkJCQkJJ3VzZXJfaWQnID0+ICRhck1zZ1snY2hhdCddWydpZCddLAoJCQkJCSksCgkJCQkJJ21lc3NhZ2UnID0+IGFycmF5KAoJCQkJCQkndGV4dCcgPT4gICRhck1zZ1snbWVzc2FnZSddWyd0ZXh0J10KCQkJCQkpCgkJCQkpOwoJCQkJCgkJCQkvLyBodHRwIHJlcXVlc3QKCQkJCS8vZXJyb3JfbG9nKCJPdXRib3VuZCBtZXNzOiAiIC4ganNvbl9lbmNvZGUoJGFyTWVzcykgLiJcbiIuIFBIUF9FT0wsIDMsICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10uJy9yeGZiL291dGJvdW5kX2xvZy50eHQnKTsKCQkJCQoJCQkJLy9lcnJvcl9sb2coIlJlc3BvbnNlIGRhdGE6ICIgLiAkcmVzcG9uc2UgLiJcbiIuIFBIUF9FT0wsIDMsICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10uJy96YWxvL2ltY29ubmVjdG9yX2xvZy50eHQnKTsKCQkJCVxCaXRyaXhcSW1Db25uZWN0b3JcQ3VzdG9tQ29ubmVjdG9yczo6c2VuZFN0YXR1c0RlbGl2ZXJ5KExpYnJhcnk6OkZCX0NPTk5FQ1RPUiAsJGxpbmUgLCRhckRhdGEpOwoJCQkJJHBhcmFtcyA9IGFycmF5KAoJCQkJCSdJU19ERUxJVkVSRUQnID0+ICdZJwoJCQkJKTsKCgkJCQlzZWxmOjptYWtlSnNvblBob3RvKCRhck1zZywkc09BVG9rZW4pOwoKCQkJCS8vXENJTU1lc3NhZ2VQYXJhbTo6RGVsZXRlQWxsKCRhck1zZ1snaW0nXVsnbWVzc2FnZV9pZCddKTsKCQkJCS8vXENJTU1lc3NhZ2VQYXJhbTo6U2V0KCRhck1zZ1snaW0nXVsnbWVzc2FnZV9pZCddLCRwYXJhbXMpOwoJCQl9CgkJfQoJCQoJfQoJCglmdW5jdGlvbiBzZW5kTWVzc2FnZSgkc09BVG9rZW4sJGFyRGF0YSkKCXsKCQkkaHR0cENsaWVudCA9IG5ldyBcQml0cml4XE1haW5cV2ViXEh0dHBDbGllbnQoKTsKCQkkaHR0cENsaWVudC0+c2V0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIpOwoJCSRzU2VuZE1lc3NVcmwgPSBMaWJyYXJ5OjpGQl9TRU5EX01FU1NfVVJMIC4gJz9hY2Nlc3NfdG9rZW49JyAuICRzT0FUb2tlbjsKCQkkcmVzID0gJGh0dHBDbGllbnQtPnBvc3QoJHNTZW5kTWVzc1VybCwganNvbl9lbmNvZGUoJGFyRGF0YSkpOwoJCS8vZXJyb3JfbG9nKCJSZXN1bHQ6ICIgLiBqc29uX2VuY29kZSgkcmVzKSAuIlxuIi4gUEhQX0VPTCwgMywgJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXS4nL3J4ZmIvb3V0Ym91bmRfbG9nLnR4dCcpOwoKCX0KCglmdW5jdGlvbiBtYWtlSnNvblBob3RvKCRhckRhdGEsJHNPQVRva2VuKQoJewoJCSRhck1lc3MgPSBhcnJheSgKCQkJInJlY2lwaWVudCIgPT4gYXJyYXkoCgkJCQkiaWQiID0+ICRhckRhdGFbJ2NoYXQnXVsnaWQnXQoJCQkpLAoJCQkibWVzc2FnZSIgPT4gYXJyYXkoCgkJCQkiYXR0YWNobWVudCIgPT4gYXJyYXkoCgkJCQkJInR5cGUiID0+ICJpbWFnZSIsCgkJCQkJInBheWxvYWQiID0+IGFycmF5KCkKCQkJCSkKCQkJKQoJCSk7CgoJCSRhclBob3RvID0gW107CgoJCWlmKCAhZW1wdHkoJGFyRGF0YVsnbWVzc2FnZSddWydmaWxlcyddKSApCgkJewoJCQlcQ0lNTWVzc2FnZVBhcmFtOjpEZWxldGVBbGwoJGFyRGF0YVsnaW0nXVsnbWVzc2FnZV9pZCddKTsKCQkJJGFyRmlsZXMgPSBhcnJheSgpOwoJCQkKCQkJZm9yZWFjaCggJGFyRGF0YVsnbWVzc2FnZSddWydmaWxlcyddIGFzICRwaG90byApCgkJCXsKCQkJCWlmKCAkcGhvdG9bJ3R5cGUnXSA9PSAnaW1hZ2UnICkKCQkJCXsKCQkJCQkvLyRzTGluayA9IHNlbGY6OmdldFJlYWxQYXRoKCRwaG90b1snbGluayddKTsKCQkJCQlpZiggJHNMaW5rICE9PSAnJyApCgkJCQkJewoJCQkJCQkkYXJQaG90byA9IGFycmF5KAoJCQkJCQkJLy8iaXNfcmV1c2FibGUiID0+IHRydWUsCgkJCQkJCQkidXJsIiA9PiAkcGhvdG9bJ2xpbmsnXQoJCQkJCQkJLy8idXJsIiA9PiAkc0xpbmsKCQkJCQkJKTsKCQkJCQkJJGFyTWVzc1snbWVzc2FnZSddWydhdHRhY2htZW50J11bJ3BheWxvYWQnXSA9ICRhclBob3RvOwoJCQkJCQkkcmVzcG9uc2UgPSBzZWxmOjpzZW5kTWVzc2FnZSgkc09BVG9rZW4sJGFyTWVzcyk7CgkJCQkJCS8vYWRkIHBob3RvIGZvciBjaGF0CgkJCQkJCSRpRmlsZUlEID0gc2VsZjo6cmVjZWl2ZWRQaG90bygkcGhvdG9bJ2xpbmsnXSk7CgkJCQkJCWlmKCAkaUZpbGVJRD4wICkKCQkJCQkJewoJCQkJCQkJYXJyYXlfcHVzaCgkYXJGaWxlcywkaUZpbGVJRCk7CgkJCQkJCX0KCQkJCQkJLy8gZW5kIHBob3RvCgkJCQkJCQoJCQkJCX0KCQkJCX0KCQkJfQoJCQkKCQkJaWYoICFlbXB0eSgkYXJGaWxlcykgKQoJCQl7CgkJCQkkYXJQYXJhbXMgPSBbICdGSUxFX0lEJyA9PiAkYXJGaWxlcyBdOwoJCQkJXENJTU1lc3NhZ2VQYXJhbTo6U2V0KCRhckRhdGFbJ2ltJ11bJ21lc3NhZ2VfaWQnXSwkYXJQYXJhbXMpOwoJCQl9CgkJfQoJfQoJCglmdW5jdGlvbiByZWNlaXZlZFBob3RvKCRzVXJsKQoJewoJCWdsb2JhbCAkREI7CgkJJGFyVXJsID0gXENCWFNob3J0VXJpOjpHZXRVcmkoJHNVcmwpOwoJCWlmKCAhZW1wdHkoJGFyVXJsKSApIAoJCXsKCQkJJHVybF9jb21wb25lbnRzID0gcGFyc2VfdXJsKCRhclVybFsnVVJJJ10pOwoJCQlwYXJzZV9zdHIoJHVybF9jb21wb25lbnRzWydxdWVyeSddLCAkcGFyYW1zKTsKCQkJaWYoIGlzc2V0KCRwYXJhbXNbJ0ZJTEVfSUQnXSkpewoJCQkJcmV0dXJuICRwYXJhbXNbJ0ZJTEVfSUQnXTsKCQkJfQoJCX0KCQlyZXR1cm4gMDsKCX0KCQoJZnVuY3Rpb24gbWFrZUpzb25NZXNzYWdlKCRhckRhdGEpCgl7CgkJZ2xvYmFsICRVU0VSOwoJCSRhck1lc3MgPSBbXTsKCgoJCWlmKCBpc3NldCgkYXJEYXRhWydtZXNzYWdlJ11bJ3RleHQnXSkgJiAkYXJEYXRhWydtZXNzYWdlJ11bJ3RleHQnXSAhPT0gJycgKXsKCgkJCSRvYlVzZXIgPSAkVVNFUi0+R2V0QnlJRCgkVVNFUi0+R2V0SUQoKSk7CgkJCSRhclVzZXIgPSAkb2JVc2VyLT5GZXRjaCgpOwoJCQkkc3RyVXNlck5hbWUgPSAkYXJVc2VyWydOQU1FJ10uIiAiLiRhclVzZXJbJ0xBU1RfTkFNRSddOwoKCQkJJGFyRGF0YVsnbWVzc2FnZSddWyd0ZXh0J10gPSBzdHJfcmVwbGFjZShhcnJheSgnW2JdJywnWy9iXScsJ1ticl0nLCdbL0NIQVRdJywnWy9VU0VSXScpLGFycmF5KCcnLCcnLCcnLCcnLCcnKSwgJGFyRGF0YVsnbWVzc2FnZSddWyd0ZXh0J10pOwoJCQkkaUNoZWNrID0gc3RycG9zKCRhckRhdGFbJ21lc3NhZ2UnXVsndGV4dCddLCRzdHJVc2VyTmFtZSk9PT1mYWxzZT8wOjE7CgkJCWlmICgkaUNoZWNrKSB7CgkJCQkkYXJEYXRhWydtZXNzYWdlJ11bJ3RleHQnXSA9IHN1YnN0cigkYXJEYXRhWydtZXNzYWdlJ11bJ3RleHQnXSxzdHJsZW4oJHN0clVzZXJOYW1lKSsxLHN0cmxlbigkYXJEYXRhWydtZXNzYWdlJ11bJ3RleHQnXSkpOwoJCQl9CgkJCgkJCSRhck1lc3NXb3JkID0gZXhwbG9kZSgnXScsJGFyRGF0YVsnbWVzc2FnZSddWyd0ZXh0J10pOwoJCQkkYXJNZXNzV29yZCA9IGltcGxvZGUoJ10gJywkYXJNZXNzV29yZCk7CgkJCSRhck1lc3NXb3JkID0gZXhwbG9kZSgnICcsJGFyTWVzc1dvcmQpOwoJCQoJCQlmb3JlYWNoICgkYXJNZXNzV29yZCBhcyAka2V5ID0+ICR3b3JkKSB7CgkJCQlpZiAoc3RycG9zKCR3b3JkLCdbQ0hBVD0nKSE9PWZhbHNlIHx8IHN0cnBvcygkd29yZCwnW1VTRVI9JykhPT1mYWxzZSkgewoJCQkJCXVuc2V0KCRhck1lc3NXb3JkWyRrZXldKTsKCQkJCX0KCQkJfQoKCQkJJGFyRGF0YVsnbWVzc2FnZSddWyd0ZXh0J10gPSBzdHJfcmVwbGFjZSgnXSAnLCddJyxpbXBsb2RlKCcgJywkYXJNZXNzV29yZCkpOwoKCQkJJGFyTWVzcyA9IGFycmF5KAoJCQkJInJlY2lwaWVudCIgPT4gYXJyYXkoCgkJCQkJImlkIiA9PiAkYXJEYXRhWydjaGF0J11bJ2lkJ10KCQkJCSksCgkJCQkibWVzc2FnZSIgPT4gYXJyYXkoCgkJCQkJInRleHQiID0+ICRhckRhdGFbJ21lc3NhZ2UnXVsndGV4dCddCgkJCQkpCgkJCSk7CgkJCVxDSU1NZXNzYWdlUGFyYW06OkRlbGV0ZUFsbCgkYXJEYXRhWydpbSddWydtZXNzYWdlX2lkJ10pOwoJCQlcQ0lNTWVzc2FnZVBhcmFtOjpTZXQoJGFyRGF0YVsnaW0nXVsnbWVzc2FnZV9pZCddLFtdKTsKCQl9CgkJcmV0dXJuICRhck1lc3M7Cgl9CgkKCWZ1bmN0aW9uIHJlbW92ZUNvcHlGaWxlKCRzVXJsKQoJewoJCS8vcGFyc2UgdXJsIGJlZm9yZSBwcm9jZXNzCgkJJGFyVXJpIAk9IHBhcnNlX3VybCgkc1VybCk7CgkJJHNjaGVtZSA9ICRhclVyaVsnc2NoZW1lJ107CgkJJGhvc3QgCT0gJGFyVXJpWydob3N0J107CgkJCgkJLy9nZXQgZnJvbSBzaG9ydCBVUkkKCQkkYXJVcmwgPSBcQ0JYU2hvcnRVcmk6OkdldFVyaSgkc1VybCk7CgkJaWYoICFlbXB0eSgkYXJVcmwpICkKCQl7CgkJCSR1cmxfY29tcG9uZW50cyA9IHBhcnNlX3VybCgkYXJVcmxbJ1VSSSddKTsKCQkJcGFyc2Vfc3RyKCR1cmxfY29tcG9uZW50c1sncXVlcnknXSwgJHBhcmFtcyk7CgkJCWlmKCBpc3NldCgkcGFyYW1zWydGSUxFX0lEJ10pICkKCQkJewoKCQkJCS8vZ2V0IGRpc2sgb2JqZWN0CgkJCQkkZmlsZSA9IFxCaXRyaXhcRGlza1xGaWxlOjpnZXRCeUlkKCRwYXJhbXNbJ0ZJTEVfSUQnXSk7CgkJCQkkZmlsZUlkID0gJGZpbGUtPmdldEZpbGVJZCgpOwoKCQkJCS8vZ2V0IGZpbGUgaW5mb3IKCQkJCSRhckZpbGUgPSBcQ0ZpbGU6OkdldEZpbGVBcnJheSgkZmlsZUlkKTsKCQkJCXVuc2V0KCRmaWxlKTsKCgkJCQkkc0ZpbGVUeXBlID0gJy5wbmcnOwoJCQkJaWYoICRhckZpbGVbJ0NPTlRFTlRfVFlQRSddID09ICdpbWFnZS9qcGVnJykKCQkJCXsKCQkJCQkkc0ZpbGVUeXBlID0gJy5qcGcnOwoJCQkJfWVsc2VpZiggJGFyRmlsZVsnQ09OVEVOVF9UWVBFJ10gPT0gJ2ltYWdlL2dpZicgKQoJCQkJewoJCQkJCSRzRmlsZVR5cGUgPSAnLmdpZic7CgkJCQl9CQkJCQoJCQkJLy9lcnJvcl9sb2coIk9iamVjdElEOiAiIC4gJHBhcmFtc1snRklMRV9JRCddIC4iXG4iLiBQSFBfRU9MLCAzLCAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddLicvcnhmYi9vdXRib3VuZF9sb2cudHh0Jyk7CgkJCQkvL2Vycm9yX2xvZygiRmlsZUlEOiAiIC4gJGZpbGVJZCAuIlxuIi4gUEhQX0VPTCwgMywgJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXS4nL3J4ZmIvb3V0Ym91bmRfbG9nLnR4dCcpOwoJCQkJLy9lcnJvcl9sb2coImFyRmlsZTogIiAuIGpzb25fZW5jb2RlKCRhckZpbGUpIC4iXG4iLiBQSFBfRU9MLCAzLCAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddLicvcnhmYi9vdXRib3VuZF9sb2cudHh0Jyk7CgkJCQkkc1NyY0ltYWdlID0gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICcvcnhmYi9pbWFnZXMvJyAuICRhckZpbGVbJ0ZJTEVfTkFNRSddIC4gJHNGaWxlVHlwZTsKCQkJCXVubGluaygkc1NyY0ltYWdlKTsKCQkJfQoJCX0KCX0KCglmdW5jdGlvbiBnZXRSZWFsUGF0aCgkc1VybCkKCXsKCQkkc1JlYWxQYXRoID0gJyc7CgkJCgkJLy9wYXJzZSB1cmwgYmVmb3JlIHByb2Nlc3MKCQkkYXJVcmkgCT0gcGFyc2VfdXJsKCRzVXJsKTsKCQkkc2NoZW1lID0gJGFyVXJpWydzY2hlbWUnXTsKCQkkaG9zdCAJPSAkYXJVcmlbJ2hvc3QnXTsKCQkKCQkvL2dldCBmcm9tIHNob3J0IFVSSQoJCSRhclVybCA9IFxDQlhTaG9ydFVyaTo6R2V0VXJpKCRzVXJsKTsKCQlpZiggIWVtcHR5KCRhclVybCkgKQoJCXsKCQkJJHVybF9jb21wb25lbnRzID0gcGFyc2VfdXJsKCRhclVybFsnVVJJJ10pOwoJCQlwYXJzZV9zdHIoJHVybF9jb21wb25lbnRzWydxdWVyeSddLCAkcGFyYW1zKTsKCQkJaWYoIGlzc2V0KCRwYXJhbXNbJ0ZJTEVfSUQnXSkgKQoJCQl7CgkJCQkvL2dldCBkaXNrIG9iamVjdAoJCQkJJGZpbGUgPSBcQml0cml4XERpc2tcRmlsZTo6Z2V0QnlJZCgkcGFyYW1zWydGSUxFX0lEJ10pOwoJCQkJJGZpbGVJZCA9ICRmaWxlLT5nZXRGaWxlSWQoKTsKCgkJCQkvLyRzU1FMID0gIlNFTEVDVCAqIEZST00gYl9kaXNrX29iamVjdCBXSEVSRSBJRCA9ICIuJHBhcmFtc1snRklMRV9JRCddOwoJCQkJLy9nbG9iYWwgJERCOwoJCQkJLy8kcnNSZXN1bHQgPSAkREItPlF1ZXJ5KCRzU1FMKTsKCQkJCS8vJGFyRGlzayA9ICRyc1Jlc3VsdC0+RmV0Y2goKTsKCQkJCS8vZXJyb3JfbG9nKCJhckRpc2s6ICIgLiBqc29uX2VuY29kZSgkYXJEaXNrKSAuIlxuIi4gUEhQX0VPTCwgMywgJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXS4nL3J4ZmIvb3V0Ym91bmRfbG9nLnR4dCcpOwoJCQkJLy9lcnJvcl9sb2coIlNRTDogIiAuICRzU1FMIC4iXG4iLiBQSFBfRU9MLCAzLCAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddLicvcnhmYi9vdXRib3VuZF9sb2cudHh0Jyk7CgoJCQkJLy9nZXQgZmlsZSBpbmZvcgoJCQkJJGFyRmlsZSA9IFxDRmlsZTo6R2V0RmlsZUFycmF5KCRmaWxlSWQpOwoJCQkJdW5zZXQoJGZpbGUpOwoKCQkJCSRzRmlsZVR5cGUgPSAnLnBuZyc7CgkJCQlpZiggJGFyRmlsZVsnQ09OVEVOVF9UWVBFJ10gPT0gJ2ltYWdlL2pwZWcnKQoJCQkJewoJCQkJCSRzRmlsZVR5cGUgPSAnLmpwZyc7CgkJCQl9ZWxzZWlmKCAkYXJGaWxlWydDT05URU5UX1RZUEUnXSA9PSAnaW1hZ2UvZ2lmJyApCgkJCQl7CgkJCQkJJHNGaWxlVHlwZSA9ICcuZ2lmJzsKCQkJCX0JCQkJCgkJCQkKCQkJCSRzU3JjSW1hZ2UgPSAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gJGFyRmlsZVsnU1JDJ107CgkJCQkkc05ld0ltYWdlID0gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICcvcnhmYi9pbWFnZXMvJyAuICRhckZpbGVbJ0ZJTEVfTkFNRSddIC4gJHNGaWxlVHlwZTsKCgkJCQljb3B5KCRzU3JjSW1hZ2UsJHNOZXdJbWFnZSk7CgkJCQkvL2Vycm9yX2xvZygiT2JqZWN0SUQ6ICIgLiAkcGFyYW1zWydGSUxFX0lEJ10gLiJcbiIuIFBIUF9FT0wsIDMsICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10uJy9yeGZiL291dGJvdW5kX2xvZy50eHQnKTsKCQkJCS8vZXJyb3JfbG9nKCJGaWxlSUQ6ICIgLiAkZmlsZUlkIC4iXG4iLiBQSFBfRU9MLCAzLCAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddLicvcnhmYi9vdXRib3VuZF9sb2cudHh0Jyk7CgkJCQkvL2Vycm9yX2xvZygiYXJGaWxlOiAiIC4ganNvbl9lbmNvZGUoJGFyRmlsZSkgLiJcbiIuIFBIUF9FT0wsIDMsICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10uJy9yeGZiL291dGJvdW5kX2xvZy50eHQnKTsKCQkJCSRzUmVhbFBhdGggPSAkc2NoZW1lIC4gIjovLyIgLiAkaG9zdCAuICcvcnhmYi9pbWFnZXMvJyAuICRhckZpbGVbJ0ZJTEVfTkFNRSddIC4gJHNGaWxlVHlwZTsKCQkJfQoJCX0KCQlyZXR1cm4gJHNSZWFsUGF0aDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGUoJHVpZCwgJGxpbmUpCgl7CgkJZ2xvYmFsICRVU0VSOwoJCSRhclJlc3VsdCA9IFtdOwoJCQoJCS8vYnVpbGQgZXh0ZXJuYWwgdXNlciBpZAoJCSRzVXNlclhNTCA9IExpYnJhcnk6OkZCX0NPTk5FQ1RPUi4nfCcuJHVpZDsKCQkKCQkvL2dldCB1c2VyCgkJJGFyU3BlY1VzZXIgPSBbXTsKCQkkYXJGaWx0ZXIgPSBbIlhNTF9JRCIgPT4gJHNVc2VyWE1MXTsKCQkkYXJTZWxlY3QgPSBbJ0ZJRUxEUycgPT4gWydOQU1FJywnUEVSU09OQUxfUEhPVE8nLCdQRVJTT05BTF9HRU5ERVInXV07CgkJJHJzVXNlcnMgPSBcQ1VzZXI6OkdldExpc3QoKCRieSA9ICJOQU1FIiksKCRvcmRlciA9ICJkZXNjIiksJGFyRmlsdGVyLCRhclNlbGVjdCk7CgkJd2hpbGUoJGFyVXNlciA9ICRyc1VzZXJzLT5GZXRjaCgpKSB7CgkJICAgJGFyU3BlY1VzZXJbXSA9ICRhclVzZXI7CgkJfQoJCWlmKCAhZW1wdHkoJGFyU3BlY1VzZXIpICkKCQl7CgkJCSRhclJlc3VsdFsnZGlzcGxheV9uYW1lJ10gPSAkYXJTcGVjVXNlclswXVsnTkFNRSddOwoJCQkkYXJSZXN1bHRbJ3VzZXJfZ2VuZGVyJ10gPSAkYXJTcGVjVXNlclswXVsnUEVSU09OQUxfR0VOREVSJ107CgkJCSRhclJlc3VsdFsnYXZhdGFyJ10gPSAkYXJTcGVjVXNlclswXVsnUEVSU09OQUxfUEhPVE8nXTsKCQl9ZWxzZXsKCQkJLy8gZ2V0IGNvbmZpZwoJCQlpZiAoIWVtcHR5KCRsaW5lKSl7CgkJCQkKCQkJCSR6YWxvQ29uZmlnID0gUnhmYlRhYmxlOjpnZXRCeUlkKCRsaW5lKS0+ZmV0Y2goKTsKCQkJCSRzT0FUb2tlbiA9ICR6YWxvQ29uZmlnWydPQV9UT0tFTiddOwoKCQkJCSRhcGlVcmwgPSBMaWJyYXJ5OjpGQl9HUkFQSF9VUkwgLiAkdWlkIC4gJz9maWVsZHM9bmFtZSxwaWN0dXJlJmFjY2Vzc190b2tlbj0nIC4gJHNPQVRva2VuOwoKCQkJCSRodHRwQ2xpZW50ID0gbmV3IFxCaXRyaXhcTWFpblxXZWJcSHR0cENsaWVudCgpOwoJCQkJJHJlc3BvbnNlID0gJGh0dHBDbGllbnQtPmdldCgkYXBpVXJsKTsKCQkJCS8vZXJyb3JfbG9nKCJVc2VyUHJvZmlsZTogIiAuICRyZXNwb25zZSAuIlxuIi4gUEhQX0VPTCwgMywgJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXS4nL3J4ZmIvdXNlci50eHQnKTsKCQkJCSRyZXNwb25zZSA9IGpzb25fZGVjb2RlKCRyZXNwb25zZSx0cnVlKTsKCQkJCWlmKCAhZW1wdHkoJHJlc3BvbnNlKSAmJiAhaXNzZXQoJHJlc3BvbnNlWydlcnJvciddKSApewoJCQkJCSRmaWQgPSAkcmVzcG9uc2VbJ2lkJ107CgkJCQkJJGFyUmVzdWx0WydkaXNwbGF5X25hbWUnXSA9ICRyZXNwb25zZVsnbmFtZSddOwoJCQkJCSRhclJlc3VsdFsndXNlcl9nZW5kZXInXSA9ICRyZXNwb25zZVsnZ2VuZGVyJ107CgoJCQkJCSRpbWcgPSBmaWxlX2dldF9jb250ZW50cygkcmVzcG9uc2VbJ3BpY3R1cmUnXVsnZGF0YSddWyd1cmwnXSk7CgkJCQkJJGZpbGUgPSAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddLicvcnhmYi9hdmF0YXJzLycuJGZpZC4nLmpwZyc7CgkJCQkJZmlsZV9wdXRfY29udGVudHMoJGZpbGUsICRpbWcpOwoJCQkJCQoJCQkJCSR1cmxNYW5hZ2VyID0gXEJpdHJpeFxEaXNrXERyaXZlcjo6Z2V0SW5zdGFuY2UoKS0+Z2V0VXJsTWFuYWdlcigpOwoJCQkJCSRhdmF0YXIgPSAkdXJsTWFuYWdlci0+Z2V0SG9zdFVybCgpIC4gJy9yeGZiL2F2YXRhcnMvJy4kZmlkLicuanBnJzsKCQkJCQkkYXJSZXN1bHRbJ2F2YXRhciddID0gJGF2YXRhcjsKCQkJCX0KCQkJfQoJCX0KCQkKCQlyZXR1cm4gJGFyUmVzdWx0OwoJfQoKfQ=="));

Function Calls

base64_decode 1

Variables

None

Stats

MD5 9b18e9c08ec619bc1b9c2ebca8da2a7e
Eval Count 1
Decode Time 94 ms