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

Decoded Output download

/** * GoMage LightCheckout Extension * * @category Extension * @copyright Copyright (c) 2010-2014 GoMage (http://www.gomage.com) * @author GoMage * @license http://www.gomage.com/license-agreement/ Single domain license * @terms of use http://www.gomage.com/terms-of-use * @version Release: 5.3 * @since Class available since Release 1.0 */ require_once (Mage::getBaseDir('lib') . DS . 'GoMage' . DS . 'MobileDetect' . DS . 'Mobile_Detect.php'); class GoMage_Checkout_Helper_Data extends Mage_Core_Helper_Abstract{ protected $mode; protected $country_id; public function getConfigData($node){ return Mage::getStoreConfig('gomage_checkout/'.$node); } public function getCheckoutMode(){ if(is_null($this->mode)){ if(Mage::getSingleton('gomage_checkout/type_onestep')->getQuote()->isAllowedGuestCheckout()){ $this->mode = intval($this->getConfigData('registration/mode')); }else{ $this->mode = 1; } } return $this->mode; } public function getAllStoreDomains(){ $domains = array(); foreach (Mage::app()->getWebsites() as $website) { $url = $website->getConfig('web/unsecure/base_url'); if($domain = trim(preg_replace('/^.*?\/\/(.*)?\//', '$1', $url))){ $domains[] = $domain; } $url = $website->getConfig('web/secure/base_url'); if($domain = trim(preg_replace('/^.*?\/\/(.*)?\//', '$1', $url))){ $domains[] = $domain; } } return array_unique($domains); } public function getAvailableWebsites(){ return $this->_w(); } public function getAvailavelWebsites(){ return $this->getAvailableWebsites(); } public function isAvailableWebsite(){ return in_array(Mage::app()->getStore()->getWebsiteId(), $this->getAvailableWebsites()); } protected function _w(){ if(!Mage::getStoreConfig('gomage_activation/lightcheckout/installed') || (intval(Mage::getStoreConfig('gomage_activation/lightcheckout/count')) > 10)) { return array(); } $time_to_update = 60*60*24*15; $r = Mage::getStoreConfig('gomage_activation/lightcheckout/ar'); $t = Mage::getStoreConfig('gomage_activation/lightcheckout/time'); $s = Mage::getStoreConfig('gomage_activation/lightcheckout/websites'); $last_check = str_replace($r, '', Mage::helper('core')->decrypt($t)); $allsites = explode(',', str_replace($r, '', Mage::helper('core')->decrypt($s))); $allsites = array_diff($allsites, array("")); if(($last_check+$time_to_update) < time()){ $this->a(Mage::getStoreConfig('gomage_activation/lightcheckout/key'), intval(Mage::getStoreConfig('gomage_activation/lightcheckout/count')), implode(',', $allsites)); } return $allsites; } public function a($k, $c = 0, $s = ''){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, sprintf('https://www.gomage.com/index.php/gomage_downloadable/key/check')); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, 'key='.urlencode($k).'&sku=lightcheckout&domains='.urlencode(implode(',', $this->getAllStoreDomains())).'&ver='.urlencode('5.2')); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); $content = curl_exec($ch); $r = Zend_Json::decode($content); $e = Mage::helper('core'); if(empty($r)){ $value1 = Mage::getStoreConfig('gomage_activation/lightcheckout/ar'); $groups = array( 'lightcheckout'=>array( 'fields'=>array( 'ar'=>array( 'value'=>$value1 ), 'websites'=>array( 'value'=>(string)Mage::getStoreConfig('gomage_activation/lightcheckout/websites') ), 'time'=>array( 'value'=>(string)$e->encrypt($value1.(time()-(60*60*24*15-1800)).$value1) ), 'count'=>array( 'value'=>$c+1) ) ) ); Mage::getModel('adminhtml/config_data') ->setSection('gomage_activation') ->setGroups($groups) ->save(); Mage::getConfig()->reinit(); Mage::app()->reinitStores(); return; } $value1 = ''; $value2 = ''; if(isset($r['d']) && isset($r['c'])){ $value1 = $e->encrypt(base64_encode(Zend_Json::encode($r))); if (!$s) $s = Mage::getStoreConfig('gomage_activation/lightcheckout/websites'); $s = array_slice(explode(',', $s), 0, $r['c']); $value2 = $e->encrypt($value1.implode(',', $s).$value1); } $groups = array( 'lightcheckout'=>array( 'fields'=>array( 'ar'=>array( 'value'=>$value1 ), 'websites'=>array( 'value'=>(string)$value2 ), 'time'=>array( 'value'=>(string)$e->encrypt($value1.time().$value1) ), 'installed'=>array( 'value'=>1 ), 'count'=>array( 'value'=>0) ) ) ); Mage::getModel('adminhtml/config_data') ->setSection('gomage_activation') ->setGroups($groups) ->save(); Mage::getConfig()->reinit(); Mage::app()->reinitStores(); } public function ga(){ return Zend_Json::decode(base64_decode(Mage::helper('core')->decrypt(Mage::getStoreConfig('gomage_activation/lightcheckout/ar')))); } public function getGeoipRecord(){ return GeoIP_Core::getInstance(Mage::getBaseDir('media')."/geoip/GeoLiteCity.dat", GeoIP_Core::GEOIP_STANDARD)->geoip_record_by_addr(Mage::helper('core/http')->getRemoteAddr()); } public function getDefaultCountryId(){ if(is_null($this->country_id)){ if(Mage::getStoreConfig('gomage_checkout/geoip/geoip_enabled') && file_exists(Mage::getBaseDir('media')."/geoip/GeoLiteCity.dat") && extension_loaded('mbstring')){ try{ $this->country_id = GeoIP_Core::getInstance(Mage::getBaseDir('media')."/geoip/GeoLiteCity.dat", GeoIP_Core::GEOIP_STANDARD)->geoip_country_code_by_addr(Mage::helper('core/http')->getRemoteAddr()); }catch(Exception $e){ echo $e; } } if (!$this->country_id) { $this->country_id = Mage::getStoreConfig('gomage_checkout/general/default_country'); if (!$this->country_id) { $this->country_id = Mage::getStoreConfig('general/country/default'); } } } return $this->country_id; } public function getDefaultShippingMethod(){ $address = Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress(); $address->setCollectShippingRates(true)->collectShippingRates(); $rates = $address->getGroupedAllShippingRates(); if(count($rates) == 1){ foreach($rates as $rate_code=>$methods){ if(count($methods) == 1){ foreach($methods as $method){ return $method->getCode(); } }else{ return $this->getConfigData('general/default_shipping_method'); } } }else{ return $this->getConfigData('general/default_shipping_method'); } } public function getDefaultPaymentMethod(){ return $this->getConfigData('general/default_payment_method'); } public function getActivePaymentMethods($store=null) { $methods = array(); $config = Mage::getStoreConfig('payment', $store); foreach ($config as $code => $methodConfig) { if(isset($methodConfig['model']) && $methodConfig['model']){ if(isset($methodConfig['group']) && $methodConfig['group'] == 'mbookers' && Mage::getStoreConfigFlag('moneybookers/'.$code.'/active', $store)){ $method = $this->_getPaymentMethod($code, $methodConfig); $method['group'] = 'mbookers'; $methods[$code] = $method; }elseif($methodConfig['model'] == 'googlecheckout/payment'){ if(Mage::getStoreConfigFlag('google/checkout/active', $store)){ $method = $this->_getPaymentMethod($code, $methodConfig); $methods[$code] = $method; } }elseif (isset($methodConfig['group']) && $methodConfig['group'] == 'payone'){ $method = $this->_getPaymentMethod($code, $methodConfig); if ($method && $method->isAvailable()){ $methods[$code] = $method; } }elseif (Mage::getStoreConfigFlag('payment/'.$code.'/active', $store)) { $method = $this->_getPaymentMethod($code, $methodConfig); $method['group'] = ''; $methods[$code] = $method; } } } return $methods; } protected function _getPaymentMethod($code, $config, $store=null) { $modelName = $config['model']; $method = Mage::getModel($modelName); if($method){ $method->setId($code)->setStore($store); } return $method; } public function getVatBaseCountryMode(){ return $this->getConfigData('vat/base_country'); } public function getVatWithinCountryMode(){ return $this->getConfigData('vat/if_not_base_country'); } public function getTaxCountries(){ if($rule_ids = Mage::helper('gomage_checkout')->getConfigData('vat/rule')){ $resource = Mage::getSingleton('core/resource'); $connection = $resource->getConnection('read'); $q = sprintf('SELECT DISTINCT(`tax_country_id`) FROM `%s` WHERE `tax_calculation_rate_id` IN (SELECT `tax_calculation_rate_id` FROM `%s` WHERE `tax_calculation_rule_id` in (%s) )', $resource->getTableName('tax_calculation_rate'), $resource->getTableName('tax_calculation'), $rule_ids); return (array)$connection->fetchCol($q); } return array(); } public function getIsAnymoreVersion($major, $minor, $revision = 0) { $version_info = Mage::getVersion(); $version_info = explode('.', $version_info); if ($version_info[0] > $major) { return true; } elseif ($version_info[0] == $major) { if ($version_info[1] > $minor) { return true; } elseif ($version_info[1] == $minor) { if ($version_info[2] >= $revision) { return true; } else { return false; } } else { return false; } } else { return false; } } public function isCompatibleDevice(){ $detect = new Mobile_Detect(); if (!$detect->isMobile()) { return (bool)$this->getConfigData('device/desktop'); } if ($detect->isTablet()){ $devices = explode(',', $this->getConfigData('device/tablet')); }else{ $devices = explode(',', $this->getConfigData('device/smartphone')); } if ($detect->isAndroidOS()){ return in_array(GoMage_Checkout_Model_Adminhtml_System_Config_Source_Device::ANDROID, $devices); } if ($detect->isBlackBerryOS()){ return in_array(GoMage_Checkout_Model_Adminhtml_System_Config_Source_Device::BLACKBERRY, $devices); } if ($detect->isiOS()){ return in_array(GoMage_Checkout_Model_Adminhtml_System_Config_Source_Device::IOS, $devices); } return in_array(GoMage_Checkout_Model_Adminhtml_System_Config_Source_Device::OTHER, $devices); } public function isLefttoRightWrite(){ return in_array(Mage::app()->getLocale()->getLocaleCode(), array('ar_DZ','ar_EG','ar_KW','ar_MA', 'ar_SA','he_IL','fa_IR')); } public function getGiftWrapTaxAmount(Mage_Sales_Model_Quote_Address $address, $amount){ if (!intval($this->getConfigData('gift_wrapping/tax_class'))){ return $amount; } $calculation = Mage::getModel('tax/calculation'); $request = $calculation->getRateRequest($address, null, null, Mage::app()->getStore()); $request->setProductClassId(intval($this->getConfigData('gift_wrapping/tax_class'))); $taxRate = $calculation->getRate($request); return ($amount + $calculation->calcTaxAmount($amount, $taxRate)); } public function getCountriesStatesRequired(){ $result = array(); if ($this->getConfigData('address_fields/region') == 'req'){ $country_collection = Mage::helper('directory')->getCountryCollection(); foreach ($country_collection as $country){ $result[] = $country->getCountryId(); } } return Mage::helper('core')->jsonEncode($result); } public function formatColor($value){ if ($value = preg_replace('/[^a-zA-Z0-9\s]/', '', $value)){ $value = '#' . $value; } return $value; } public function notify(){ $frequency = intval(Mage::app()->loadCache('gomage_notifications_frequency')); if (!$frequency){ $frequency = 24; } $last_update = intval(Mage::app()->loadCache('gomage_notifications_last_update')); if (($frequency * 60 * 60 + $last_update) > time()) { return false; } $timestamp = $last_update; if (!$timestamp){ $timestamp = time(); } try{ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, sprintf('https://www.gomage.com/index.php/gomage_notification/index/data')); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, 'sku=lightcheckout&timestamp='.$timestamp.'&ver='.urlencode('5.2')); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); $content = curl_exec($ch); $result = Zend_Json::decode($content); if ($result && isset($result['frequency']) && ($result['frequency'] != $frequency)){ Mage::app()->saveCache($result['frequency'], 'gomage_notifications_frequency'); } if ($result && isset($result['data'])){ if (!empty($result['data'])){ Mage::getModel('adminnotification/inbox')->parse($result['data']); } } } catch (Exception $e){} Mage::app()->saveCache(time(), 'gomage_notifications_last_update'); } }

Did this file decode correctly?

Original Code

eval(base64_decode("LyoqICogR29NYWdlIExpZ2h0Q2hlY2tvdXQgRXh0ZW5zaW9uICogKiBAY2F0ZWdvcnkgRXh0ZW5zaW9uICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxNCBHb01hZ2UgKGh0dHA6Ly93d3cuZ29tYWdlLmNvbSkgKiBAYXV0aG9yIEdvTWFnZSAqIEBsaWNlbnNlIGh0dHA6Ly93d3cuZ29tYWdlLmNvbS9saWNlbnNlLWFncmVlbWVudC8gU2luZ2xlIGRvbWFpbiBsaWNlbnNlICogQHRlcm1zIG9mIHVzZSBodHRwOi8vd3d3LmdvbWFnZS5jb20vdGVybXMtb2YtdXNlICogQHZlcnNpb24gUmVsZWFzZTogNS4zICogQHNpbmNlIENsYXNzIGF2YWlsYWJsZSBzaW5jZSBSZWxlYXNlIDEuMCAqLyByZXF1aXJlX29uY2UgKE1hZ2U6OmdldEJhc2VEaXIoJ2xpYicpIC4gRFMgLiAnR29NYWdlJyAuIERTIC4gJ01vYmlsZURldGVjdCcgLiBEUyAuICdNb2JpbGVfRGV0ZWN0LnBocCcpOyBjbGFzcyBHb01hZ2VfQ2hlY2tvdXRfSGVscGVyX0RhdGEgZXh0ZW5kcyBNYWdlX0NvcmVfSGVscGVyX0Fic3RyYWN0eyBwcm90ZWN0ZWQgJG1vZGU7IHByb3RlY3RlZCAkY291bnRyeV9pZDsgcHVibGljIGZ1bmN0aW9uIGdldENvbmZpZ0RhdGEoJG5vZGUpeyByZXR1cm4gTWFnZTo6Z2V0U3RvcmVDb25maWcoJ2dvbWFnZV9jaGVja291dC8nLiRub2RlKTsgfSBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2hlY2tvdXRNb2RlKCl7IGlmKGlzX251bGwoJHRoaXMtPm1vZGUpKXsgaWYoTWFnZTo6Z2V0U2luZ2xldG9uKCdnb21hZ2VfY2hlY2tvdXQvdHlwZV9vbmVzdGVwJyktPmdldFF1b3RlKCktPmlzQWxsb3dlZEd1ZXN0Q2hlY2tvdXQoKSl7ICR0aGlzLT5tb2RlID0gaW50dmFsKCR0aGlzLT5nZXRDb25maWdEYXRhKCdyZWdpc3RyYXRpb24vbW9kZScpKTsgfWVsc2V7ICR0aGlzLT5tb2RlID0gMTsgfSB9IHJldHVybiAkdGhpcy0+bW9kZTsgfSBwdWJsaWMgZnVuY3Rpb24gZ2V0QWxsU3RvcmVEb21haW5zKCl7ICRkb21haW5zID0gYXJyYXkoKTsgZm9yZWFjaCAoTWFnZTo6YXBwKCktPmdldFdlYnNpdGVzKCkgYXMgJHdlYnNpdGUpIHsgJHVybCA9ICR3ZWJzaXRlLT5nZXRDb25maWcoJ3dlYi91bnNlY3VyZS9iYXNlX3VybCcpOyBpZigkZG9tYWluID0gdHJpbShwcmVnX3JlcGxhY2UoJy9eLio/XFwvXFwvKC4qKT9cXC8vJywgJyQxJywgJHVybCkpKXsgJGRvbWFpbnNbXSA9ICRkb21haW47IH0gJHVybCA9ICR3ZWJzaXRlLT5nZXRDb25maWcoJ3dlYi9zZWN1cmUvYmFzZV91cmwnKTsgaWYoJGRvbWFpbiA9IHRyaW0ocHJlZ19yZXBsYWNlKCcvXi4qP1xcL1xcLyguKik/XFwvLycsICckMScsICR1cmwpKSl7ICRkb21haW5zW10gPSAkZG9tYWluOyB9IH0gcmV0dXJuIGFycmF5X3VuaXF1ZSgkZG9tYWlucyk7IH0gcHVibGljIGZ1bmN0aW9uIGdldEF2YWlsYWJsZVdlYnNpdGVzKCl7IHJldHVybiAkdGhpcy0+X3coKTsgfSBwdWJsaWMgZnVuY3Rpb24gZ2V0QXZhaWxhdmVsV2Vic2l0ZXMoKXsgcmV0dXJuICR0aGlzLT5nZXRBdmFpbGFibGVXZWJzaXRlcygpOyB9IHB1YmxpYyBmdW5jdGlvbiBpc0F2YWlsYWJsZVdlYnNpdGUoKXsgcmV0dXJuIGluX2FycmF5KE1hZ2U6OmFwcCgpLT5nZXRTdG9yZSgpLT5nZXRXZWJzaXRlSWQoKSwgJHRoaXMtPmdldEF2YWlsYWJsZVdlYnNpdGVzKCkpOyB9IHByb3RlY3RlZCBmdW5jdGlvbiBfdygpeyBpZighTWFnZTo6Z2V0U3RvcmVDb25maWcoJ2dvbWFnZV9hY3RpdmF0aW9uL2xpZ2h0Y2hlY2tvdXQvaW5zdGFsbGVkJykgfHwgKGludHZhbChNYWdlOjpnZXRTdG9yZUNvbmZpZygnZ29tYWdlX2FjdGl2YXRpb24vbGlnaHRjaGVja291dC9jb3VudCcpKSA+IDEwKSkgeyByZXR1cm4gYXJyYXkoKTsgfSAkdGltZV90b191cGRhdGUgPSA2MCo2MCoyNCoxNTsgJHIgPSBNYWdlOjpnZXRTdG9yZUNvbmZpZygnZ29tYWdlX2FjdGl2YXRpb24vbGlnaHRjaGVja291dC9hcicpOyAkdCA9IE1hZ2U6OmdldFN0b3JlQ29uZmlnKCdnb21hZ2VfYWN0aXZhdGlvbi9saWdodGNoZWNrb3V0L3RpbWUnKTsgJHMgPSBNYWdlOjpnZXRTdG9yZUNvbmZpZygnZ29tYWdlX2FjdGl2YXRpb24vbGlnaHRjaGVja291dC93ZWJzaXRlcycpOyAkbGFzdF9jaGVjayA9IHN0cl9yZXBsYWNlKCRyLCAnJywgTWFnZTo6aGVscGVyKCdjb3JlJyktPmRlY3J5cHQoJHQpKTsgJGFsbHNpdGVzID0gZXhwbG9kZSgnLCcsIHN0cl9yZXBsYWNlKCRyLCAnJywgTWFnZTo6aGVscGVyKCdjb3JlJyktPmRlY3J5cHQoJHMpKSk7ICRhbGxzaXRlcyA9IGFycmF5X2RpZmYoJGFsbHNpdGVzLCBhcnJheSgiIikpOyBpZigoJGxhc3RfY2hlY2srJHRpbWVfdG9fdXBkYXRlKSA8IHRpbWUoKSl7ICR0aGlzLT5hKE1hZ2U6OmdldFN0b3JlQ29uZmlnKCdnb21hZ2VfYWN0aXZhdGlvbi9saWdodGNoZWNrb3V0L2tleScpLCBpbnR2YWwoTWFnZTo6Z2V0U3RvcmVDb25maWcoJ2dvbWFnZV9hY3RpdmF0aW9uL2xpZ2h0Y2hlY2tvdXQvY291bnQnKSksIGltcGxvZGUoJywnLCAkYWxsc2l0ZXMpKTsgfSByZXR1cm4gJGFsbHNpdGVzOyB9IHB1YmxpYyBmdW5jdGlvbiBhKCRrLCAkYyA9IDAsICRzID0gJycpeyAkY2ggPSBjdXJsX2luaXQoKTsgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgc3ByaW50ZignaHR0cHM6Ly93d3cuZ29tYWdlLmNvbS9pbmRleC5waHAvZ29tYWdlX2Rvd25sb2FkYWJsZS9rZXkvY2hlY2snKSk7IGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NULCB0cnVlKTsgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsICdrZXk9Jy51cmxlbmNvZGUoJGspLicmc2t1PWxpZ2h0Y2hlY2tvdXQmZG9tYWlucz0nLnVybGVuY29kZShpbXBsb2RlKCcsJywgJHRoaXMtPmdldEFsbFN0b3JlRG9tYWlucygpKSkuJyZ2ZXI9Jy51cmxlbmNvZGUoJzUuMicpKTsgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1RJTUVPVVQsIDMwKTsgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCAwKTsgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCAwKTsgJGNvbnRlbnQgPSBjdXJsX2V4ZWMoJGNoKTsgJHIgPSBaZW5kX0pzb246OmRlY29kZSgkY29udGVudCk7ICRlID0gTWFnZTo6aGVscGVyKCdjb3JlJyk7IGlmKGVtcHR5KCRyKSl7ICR2YWx1ZTEgPSBNYWdlOjpnZXRTdG9yZUNvbmZpZygnZ29tYWdlX2FjdGl2YXRpb24vbGlnaHRjaGVja291dC9hcicpOyAkZ3JvdXBzID0gYXJyYXkoICdsaWdodGNoZWNrb3V0Jz0+YXJyYXkoICdmaWVsZHMnPT5hcnJheSggJ2FyJz0+YXJyYXkoICd2YWx1ZSc9PiR2YWx1ZTEgKSwgJ3dlYnNpdGVzJz0+YXJyYXkoICd2YWx1ZSc9PihzdHJpbmcpTWFnZTo6Z2V0U3RvcmVDb25maWcoJ2dvbWFnZV9hY3RpdmF0aW9uL2xpZ2h0Y2hlY2tvdXQvd2Vic2l0ZXMnKSApLCAndGltZSc9PmFycmF5KCAndmFsdWUnPT4oc3RyaW5nKSRlLT5lbmNyeXB0KCR2YWx1ZTEuKHRpbWUoKS0oNjAqNjAqMjQqMTUtMTgwMCkpLiR2YWx1ZTEpICksICdjb3VudCc9PmFycmF5KCAndmFsdWUnPT4kYysxKSApICkgKTsgTWFnZTo6Z2V0TW9kZWwoJ2FkbWluaHRtbC9jb25maWdfZGF0YScpIC0+c2V0U2VjdGlvbignZ29tYWdlX2FjdGl2YXRpb24nKSAtPnNldEdyb3VwcygkZ3JvdXBzKSAtPnNhdmUoKTsgTWFnZTo6Z2V0Q29uZmlnKCktPnJlaW5pdCgpOyBNYWdlOjphcHAoKS0+cmVpbml0U3RvcmVzKCk7IHJldHVybjsgfSAkdmFsdWUxID0gJyc7ICR2YWx1ZTIgPSAnJzsgaWYoaXNzZXQoJHJbJ2QnXSkgJiYgaXNzZXQoJHJbJ2MnXSkpeyAkdmFsdWUxID0gJGUtPmVuY3J5cHQoYmFzZTY0X2VuY29kZShaZW5kX0pzb246OmVuY29kZSgkcikpKTsgaWYgKCEkcykgJHMgPSBNYWdlOjpnZXRTdG9yZUNvbmZpZygnZ29tYWdlX2FjdGl2YXRpb24vbGlnaHRjaGVja291dC93ZWJzaXRlcycpOyAkcyA9IGFycmF5X3NsaWNlKGV4cGxvZGUoJywnLCAkcyksIDAsICRyWydjJ10pOyAkdmFsdWUyID0gJGUtPmVuY3J5cHQoJHZhbHVlMS5pbXBsb2RlKCcsJywgJHMpLiR2YWx1ZTEpOyB9ICRncm91cHMgPSBhcnJheSggJ2xpZ2h0Y2hlY2tvdXQnPT5hcnJheSggJ2ZpZWxkcyc9PmFycmF5KCAnYXInPT5hcnJheSggJ3ZhbHVlJz0+JHZhbHVlMSApLCAnd2Vic2l0ZXMnPT5hcnJheSggJ3ZhbHVlJz0+KHN0cmluZykkdmFsdWUyICksICd0aW1lJz0+YXJyYXkoICd2YWx1ZSc9PihzdHJpbmcpJGUtPmVuY3J5cHQoJHZhbHVlMS50aW1lKCkuJHZhbHVlMSkgKSwgJ2luc3RhbGxlZCc9PmFycmF5KCAndmFsdWUnPT4xICksICdjb3VudCc9PmFycmF5KCAndmFsdWUnPT4wKSApICkgKTsgTWFnZTo6Z2V0TW9kZWwoJ2FkbWluaHRtbC9jb25maWdfZGF0YScpIC0+c2V0U2VjdGlvbignZ29tYWdlX2FjdGl2YXRpb24nKSAtPnNldEdyb3VwcygkZ3JvdXBzKSAtPnNhdmUoKTsgTWFnZTo6Z2V0Q29uZmlnKCktPnJlaW5pdCgpOyBNYWdlOjphcHAoKS0+cmVpbml0U3RvcmVzKCk7IH0gcHVibGljIGZ1bmN0aW9uIGdhKCl7IHJldHVybiBaZW5kX0pzb246OmRlY29kZShiYXNlNjRfZGVjb2RlKE1hZ2U6OmhlbHBlcignY29yZScpLT5kZWNyeXB0KE1hZ2U6OmdldFN0b3JlQ29uZmlnKCdnb21hZ2VfYWN0aXZhdGlvbi9saWdodGNoZWNrb3V0L2FyJykpKSk7IH0gcHVibGljIGZ1bmN0aW9uIGdldEdlb2lwUmVjb3JkKCl7IHJldHVybiBHZW9JUF9Db3JlOjpnZXRJbnN0YW5jZShNYWdlOjpnZXRCYXNlRGlyKCdtZWRpYScpLiIvZ2VvaXAvR2VvTGl0ZUNpdHkuZGF0IiwgR2VvSVBfQ29yZTo6R0VPSVBfU1RBTkRBUkQpLT5nZW9pcF9yZWNvcmRfYnlfYWRkcihNYWdlOjpoZWxwZXIoJ2NvcmUvaHR0cCcpLT5nZXRSZW1vdGVBZGRyKCkpOyB9IHB1YmxpYyBmdW5jdGlvbiBnZXREZWZhdWx0Q291bnRyeUlkKCl7IGlmKGlzX251bGwoJHRoaXMtPmNvdW50cnlfaWQpKXsgaWYoTWFnZTo6Z2V0U3RvcmVDb25maWcoJ2dvbWFnZV9jaGVja291dC9nZW9pcC9nZW9pcF9lbmFibGVkJykgJiYgZmlsZV9leGlzdHMoTWFnZTo6Z2V0QmFzZURpcignbWVkaWEnKS4iL2dlb2lwL0dlb0xpdGVDaXR5LmRhdCIpICYmIGV4dGVuc2lvbl9sb2FkZWQoJ21ic3RyaW5nJykpeyB0cnl7ICR0aGlzLT5jb3VudHJ5X2lkID0gR2VvSVBfQ29yZTo6Z2V0SW5zdGFuY2UoTWFnZTo6Z2V0QmFzZURpcignbWVkaWEnKS4iL2dlb2lwL0dlb0xpdGVDaXR5LmRhdCIsIEdlb0lQX0NvcmU6OkdFT0lQX1NUQU5EQVJEKS0+Z2VvaXBfY291bnRyeV9jb2RlX2J5X2FkZHIoTWFnZTo6aGVscGVyKCdjb3JlL2h0dHAnKS0+Z2V0UmVtb3RlQWRkcigpKTsgfWNhdGNoKEV4Y2VwdGlvbiAkZSl7IGVjaG8gJGU7IH0gfSBpZiAoISR0aGlzLT5jb3VudHJ5X2lkKSB7ICR0aGlzLT5jb3VudHJ5X2lkID0gTWFnZTo6Z2V0U3RvcmVDb25maWcoJ2dvbWFnZV9jaGVja291dC9nZW5lcmFsL2RlZmF1bHRfY291bnRyeScpOyBpZiAoISR0aGlzLT5jb3VudHJ5X2lkKSB7ICR0aGlzLT5jb3VudHJ5X2lkID0gTWFnZTo6Z2V0U3RvcmVDb25maWcoJ2dlbmVyYWwvY291bnRyeS9kZWZhdWx0Jyk7IH0gfSB9IHJldHVybiAkdGhpcy0+Y291bnRyeV9pZDsgfSBwdWJsaWMgZnVuY3Rpb24gZ2V0RGVmYXVsdFNoaXBwaW5nTWV0aG9kKCl7ICRhZGRyZXNzID0gTWFnZTo6Z2V0U2luZ2xldG9uKCdjaGVja291dC9zZXNzaW9uJyktPmdldFF1b3RlKCktPmdldFNoaXBwaW5nQWRkcmVzcygpOyAkYWRkcmVzcy0+c2V0Q29sbGVjdFNoaXBwaW5nUmF0ZXModHJ1ZSktPmNvbGxlY3RTaGlwcGluZ1JhdGVzKCk7ICRyYXRlcyA9ICRhZGRyZXNzLT5nZXRHcm91cGVkQWxsU2hpcHBpbmdSYXRlcygpOyBpZihjb3VudCgkcmF0ZXMpID09IDEpeyBmb3JlYWNoKCRyYXRlcyBhcyAkcmF0ZV9jb2RlPT4kbWV0aG9kcyl7IGlmKGNvdW50KCRtZXRob2RzKSA9PSAxKXsgZm9yZWFjaCgkbWV0aG9kcyBhcyAkbWV0aG9kKXsgcmV0dXJuICRtZXRob2QtPmdldENvZGUoKTsgfSB9ZWxzZXsgcmV0dXJuICR0aGlzLT5nZXRDb25maWdEYXRhKCdnZW5lcmFsL2RlZmF1bHRfc2hpcHBpbmdfbWV0aG9kJyk7IH0gfSB9ZWxzZXsgcmV0dXJuICR0aGlzLT5nZXRDb25maWdEYXRhKCdnZW5lcmFsL2RlZmF1bHRfc2hpcHBpbmdfbWV0aG9kJyk7IH0gfSBwdWJsaWMgZnVuY3Rpb24gZ2V0RGVmYXVsdFBheW1lbnRNZXRob2QoKXsgcmV0dXJuICR0aGlzLT5nZXRDb25maWdEYXRhKCdnZW5lcmFsL2RlZmF1bHRfcGF5bWVudF9tZXRob2QnKTsgfSBwdWJsaWMgZnVuY3Rpb24gZ2V0QWN0aXZlUGF5bWVudE1ldGhvZHMoJHN0b3JlPW51bGwpIHsgJG1ldGhvZHMgPSBhcnJheSgpOyAkY29uZmlnID0gTWFnZTo6Z2V0U3RvcmVDb25maWcoJ3BheW1lbnQnLCAkc3RvcmUpOyBmb3JlYWNoICgkY29uZmlnIGFzICRjb2RlID0+ICRtZXRob2RDb25maWcpIHsgaWYoaXNzZXQoJG1ldGhvZENvbmZpZ1snbW9kZWwnXSkgJiYgJG1ldGhvZENvbmZpZ1snbW9kZWwnXSl7IGlmKGlzc2V0KCRtZXRob2RDb25maWdbJ2dyb3VwJ10pICYmICRtZXRob2RDb25maWdbJ2dyb3VwJ10gPT0gJ21ib29rZXJzJyAmJiBNYWdlOjpnZXRTdG9yZUNvbmZpZ0ZsYWcoJ21vbmV5Ym9va2Vycy8nLiRjb2RlLicvYWN0aXZlJywgJHN0b3JlKSl7ICRtZXRob2QgPSAkdGhpcy0+X2dldFBheW1lbnRNZXRob2QoJGNvZGUsICRtZXRob2RDb25maWcpOyAkbWV0aG9kWydncm91cCddID0gJ21ib29rZXJzJzsgJG1ldGhvZHNbJGNvZGVdID0gJG1ldGhvZDsgfWVsc2VpZigkbWV0aG9kQ29uZmlnWydtb2RlbCddID09ICdnb29nbGVjaGVja291dC9wYXltZW50Jyl7IGlmKE1hZ2U6OmdldFN0b3JlQ29uZmlnRmxhZygnZ29vZ2xlL2NoZWNrb3V0L2FjdGl2ZScsICRzdG9yZSkpeyAkbWV0aG9kID0gJHRoaXMtPl9nZXRQYXltZW50TWV0aG9kKCRjb2RlLCAkbWV0aG9kQ29uZmlnKTsgJG1ldGhvZHNbJGNvZGVdID0gJG1ldGhvZDsgfSB9ZWxzZWlmIChpc3NldCgkbWV0aG9kQ29uZmlnWydncm91cCddKSAmJiAkbWV0aG9kQ29uZmlnWydncm91cCddID09ICdwYXlvbmUnKXsgJG1ldGhvZCA9ICR0aGlzLT5fZ2V0UGF5bWVudE1ldGhvZCgkY29kZSwgJG1ldGhvZENvbmZpZyk7IGlmICgkbWV0aG9kICYmICRtZXRob2QtPmlzQXZhaWxhYmxlKCkpeyAkbWV0aG9kc1skY29kZV0gPSAkbWV0aG9kOyB9IH1lbHNlaWYgKE1hZ2U6OmdldFN0b3JlQ29uZmlnRmxhZygncGF5bWVudC8nLiRjb2RlLicvYWN0aXZlJywgJHN0b3JlKSkgeyAkbWV0aG9kID0gJHRoaXMtPl9nZXRQYXltZW50TWV0aG9kKCRjb2RlLCAkbWV0aG9kQ29uZmlnKTsgJG1ldGhvZFsnZ3JvdXAnXSA9ICcnOyAkbWV0aG9kc1skY29kZV0gPSAkbWV0aG9kOyB9IH0gfSByZXR1cm4gJG1ldGhvZHM7IH0gcHJvdGVjdGVkIGZ1bmN0aW9uIF9nZXRQYXltZW50TWV0aG9kKCRjb2RlLCAkY29uZmlnLCAkc3RvcmU9bnVsbCkgeyAkbW9kZWxOYW1lID0gJGNvbmZpZ1snbW9kZWwnXTsgJG1ldGhvZCA9IE1hZ2U6OmdldE1vZGVsKCRtb2RlbE5hbWUpOyBpZigkbWV0aG9kKXsgJG1ldGhvZC0+c2V0SWQoJGNvZGUpLT5zZXRTdG9yZSgkc3RvcmUpOyB9IHJldHVybiAkbWV0aG9kOyB9IHB1YmxpYyBmdW5jdGlvbiBnZXRWYXRCYXNlQ291bnRyeU1vZGUoKXsgcmV0dXJuICR0aGlzLT5nZXRDb25maWdEYXRhKCd2YXQvYmFzZV9jb3VudHJ5Jyk7IH0gcHVibGljIGZ1bmN0aW9uIGdldFZhdFdpdGhpbkNvdW50cnlNb2RlKCl7IHJldHVybiAkdGhpcy0+Z2V0Q29uZmlnRGF0YSgndmF0L2lmX25vdF9iYXNlX2NvdW50cnknKTsgfSBwdWJsaWMgZnVuY3Rpb24gZ2V0VGF4Q291bnRyaWVzKCl7IGlmKCRydWxlX2lkcyA9IE1hZ2U6OmhlbHBlcignZ29tYWdlX2NoZWNrb3V0JyktPmdldENvbmZpZ0RhdGEoJ3ZhdC9ydWxlJykpeyAkcmVzb3VyY2UgPSBNYWdlOjpnZXRTaW5nbGV0b24oJ2NvcmUvcmVzb3VyY2UnKTsgJGNvbm5lY3Rpb24gPSAkcmVzb3VyY2UtPmdldENvbm5lY3Rpb24oJ3JlYWQnKTsgJHEgPSBzcHJpbnRmKCdTRUxFQ1QgRElTVElOQ1QoYHRheF9jb3VudHJ5X2lkYCkgRlJPTSBgJXNgIFdIRVJFIGB0YXhfY2FsY3VsYXRpb25fcmF0ZV9pZGAgSU4gKFNFTEVDVCBgdGF4X2NhbGN1bGF0aW9uX3JhdGVfaWRgIEZST00gYCVzYCBXSEVSRSBgdGF4X2NhbGN1bGF0aW9uX3J1bGVfaWRgIGluICglcykgKScsICRyZXNvdXJjZS0+Z2V0VGFibGVOYW1lKCd0YXhfY2FsY3VsYXRpb25fcmF0ZScpLCAkcmVzb3VyY2UtPmdldFRhYmxlTmFtZSgndGF4X2NhbGN1bGF0aW9uJyksICRydWxlX2lkcyk7IHJldHVybiAoYXJyYXkpJGNvbm5lY3Rpb24tPmZldGNoQ29sKCRxKTsgfSByZXR1cm4gYXJyYXkoKTsgfSBwdWJsaWMgZnVuY3Rpb24gZ2V0SXNBbnltb3JlVmVyc2lvbigkbWFqb3IsICRtaW5vciwgJHJldmlzaW9uID0gMCkgeyAkdmVyc2lvbl9pbmZvID0gTWFnZTo6Z2V0VmVyc2lvbigpOyAkdmVyc2lvbl9pbmZvID0gZXhwbG9kZSgnLicsICR2ZXJzaW9uX2luZm8pOyBpZiAoJHZlcnNpb25faW5mb1swXSA+ICRtYWpvcikgeyByZXR1cm4gdHJ1ZTsgfSBlbHNlaWYgKCR2ZXJzaW9uX2luZm9bMF0gPT0gJG1ham9yKSB7IGlmICgkdmVyc2lvbl9pbmZvWzFdID4gJG1pbm9yKSB7IHJldHVybiB0cnVlOyB9IGVsc2VpZiAoJHZlcnNpb25faW5mb1sxXSA9PSAkbWlub3IpIHsgaWYgKCR2ZXJzaW9uX2luZm9bMl0gPj0gJHJldmlzaW9uKSB7IHJldHVybiB0cnVlOyB9IGVsc2UgeyByZXR1cm4gZmFsc2U7IH0gfSBlbHNlIHsgcmV0dXJuIGZhbHNlOyB9IH0gZWxzZSB7IHJldHVybiBmYWxzZTsgfSB9IHB1YmxpYyBmdW5jdGlvbiBpc0NvbXBhdGlibGVEZXZpY2UoKXsgJGRldGVjdCA9IG5ldyBNb2JpbGVfRGV0ZWN0KCk7IGlmICghJGRldGVjdC0+aXNNb2JpbGUoKSkgeyByZXR1cm4gKGJvb2wpJHRoaXMtPmdldENvbmZpZ0RhdGEoJ2RldmljZS9kZXNrdG9wJyk7IH0gaWYgKCRkZXRlY3QtPmlzVGFibGV0KCkpeyAkZGV2aWNlcyA9IGV4cGxvZGUoJywnLCAkdGhpcy0+Z2V0Q29uZmlnRGF0YSgnZGV2aWNlL3RhYmxldCcpKTsgfWVsc2V7ICRkZXZpY2VzID0gZXhwbG9kZSgnLCcsICR0aGlzLT5nZXRDb25maWdEYXRhKCdkZXZpY2Uvc21hcnRwaG9uZScpKTsgfSBpZiAoJGRldGVjdC0+aXNBbmRyb2lkT1MoKSl7IHJldHVybiBpbl9hcnJheShHb01hZ2VfQ2hlY2tvdXRfTW9kZWxfQWRtaW5odG1sX1N5c3RlbV9Db25maWdfU291cmNlX0RldmljZTo6QU5EUk9JRCwgJGRldmljZXMpOyB9IGlmICgkZGV0ZWN0LT5pc0JsYWNrQmVycnlPUygpKXsgcmV0dXJuIGluX2FycmF5KEdvTWFnZV9DaGVja291dF9Nb2RlbF9BZG1pbmh0bWxfU3lzdGVtX0NvbmZpZ19Tb3VyY2VfRGV2aWNlOjpCTEFDS0JFUlJZLCAkZGV2aWNlcyk7IH0gaWYgKCRkZXRlY3QtPmlzaU9TKCkpeyByZXR1cm4gaW5fYXJyYXkoR29NYWdlX0NoZWNrb3V0X01vZGVsX0FkbWluaHRtbF9TeXN0ZW1fQ29uZmlnX1NvdXJjZV9EZXZpY2U6OklPUywgJGRldmljZXMpOyB9IHJldHVybiBpbl9hcnJheShHb01hZ2VfQ2hlY2tvdXRfTW9kZWxfQWRtaW5odG1sX1N5c3RlbV9Db25maWdfU291cmNlX0RldmljZTo6T1RIRVIsICRkZXZpY2VzKTsgfSBwdWJsaWMgZnVuY3Rpb24gaXNMZWZ0dG9SaWdodFdyaXRlKCl7IHJldHVybiBpbl9hcnJheShNYWdlOjphcHAoKS0+Z2V0TG9jYWxlKCktPmdldExvY2FsZUNvZGUoKSwgYXJyYXkoJ2FyX0RaJywnYXJfRUcnLCdhcl9LVycsJ2FyX01BJywgJ2FyX1NBJywnaGVfSUwnLCdmYV9JUicpKTsgfSBwdWJsaWMgZnVuY3Rpb24gZ2V0R2lmdFdyYXBUYXhBbW91bnQoTWFnZV9TYWxlc19Nb2RlbF9RdW90ZV9BZGRyZXNzICRhZGRyZXNzLCAkYW1vdW50KXsgaWYgKCFpbnR2YWwoJHRoaXMtPmdldENvbmZpZ0RhdGEoJ2dpZnRfd3JhcHBpbmcvdGF4X2NsYXNzJykpKXsgcmV0dXJuICRhbW91bnQ7IH0gJGNhbGN1bGF0aW9uID0gTWFnZTo6Z2V0TW9kZWwoJ3RheC9jYWxjdWxhdGlvbicpOyAkcmVxdWVzdCA9ICRjYWxjdWxhdGlvbi0+Z2V0UmF0ZVJlcXVlc3QoJGFkZHJlc3MsIG51bGwsIG51bGwsIE1hZ2U6OmFwcCgpLT5nZXRTdG9yZSgpKTsgJHJlcXVlc3QtPnNldFByb2R1Y3RDbGFzc0lkKGludHZhbCgkdGhpcy0+Z2V0Q29uZmlnRGF0YSgnZ2lmdF93cmFwcGluZy90YXhfY2xhc3MnKSkpOyAkdGF4UmF0ZSA9ICRjYWxjdWxhdGlvbi0+Z2V0UmF0ZSgkcmVxdWVzdCk7IHJldHVybiAoJGFtb3VudCArICRjYWxjdWxhdGlvbi0+Y2FsY1RheEFtb3VudCgkYW1vdW50LCAkdGF4UmF0ZSkpOyB9IHB1YmxpYyBmdW5jdGlvbiBnZXRDb3VudHJpZXNTdGF0ZXNSZXF1aXJlZCgpeyAkcmVzdWx0ID0gYXJyYXkoKTsgaWYgKCR0aGlzLT5nZXRDb25maWdEYXRhKCdhZGRyZXNzX2ZpZWxkcy9yZWdpb24nKSA9PSAncmVxJyl7ICRjb3VudHJ5X2NvbGxlY3Rpb24gPSBNYWdlOjpoZWxwZXIoJ2RpcmVjdG9yeScpLT5nZXRDb3VudHJ5Q29sbGVjdGlvbigpOyBmb3JlYWNoICgkY291bnRyeV9jb2xsZWN0aW9uIGFzICRjb3VudHJ5KXsgJHJlc3VsdFtdID0gJGNvdW50cnktPmdldENvdW50cnlJZCgpOyB9IH0gcmV0dXJuIE1hZ2U6OmhlbHBlcignY29yZScpLT5qc29uRW5jb2RlKCRyZXN1bHQpOyB9IHB1YmxpYyBmdW5jdGlvbiBmb3JtYXRDb2xvcigkdmFsdWUpeyBpZiAoJHZhbHVlID0gcHJlZ19yZXBsYWNlKCcvW15hLXpBLVowLTlcc10vJywgJycsICR2YWx1ZSkpeyAkdmFsdWUgPSAnIycgLiAkdmFsdWU7IH0gcmV0dXJuICR2YWx1ZTsgfSBwdWJsaWMgZnVuY3Rpb24gbm90aWZ5KCl7ICRmcmVxdWVuY3kgPSBpbnR2YWwoTWFnZTo6YXBwKCktPmxvYWRDYWNoZSgnZ29tYWdlX25vdGlmaWNhdGlvbnNfZnJlcXVlbmN5JykpOyBpZiAoISRmcmVxdWVuY3kpeyAkZnJlcXVlbmN5ID0gMjQ7IH0gJGxhc3RfdXBkYXRlID0gaW50dmFsKE1hZ2U6OmFwcCgpLT5sb2FkQ2FjaGUoJ2dvbWFnZV9ub3RpZmljYXRpb25zX2xhc3RfdXBkYXRlJykpOyBpZiAoKCRmcmVxdWVuY3kgKiA2MCAqIDYwICsgJGxhc3RfdXBkYXRlKSA+IHRpbWUoKSkgeyByZXR1cm4gZmFsc2U7IH0gJHRpbWVzdGFtcCA9ICRsYXN0X3VwZGF0ZTsgaWYgKCEkdGltZXN0YW1wKXsgJHRpbWVzdGFtcCA9IHRpbWUoKTsgfSB0cnl7ICRjaCA9IGN1cmxfaW5pdCgpOyBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCBzcHJpbnRmKCdodHRwczovL3d3dy5nb21hZ2UuY29tL2luZGV4LnBocC9nb21hZ2Vfbm90aWZpY2F0aW9uL2luZGV4L2RhdGEnKSk7IGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NULCB0cnVlKTsgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsICdza3U9bGlnaHRjaGVja291dCZ0aW1lc3RhbXA9Jy4kdGltZXN0YW1wLicmdmVyPScudXJsZW5jb2RlKCc1LjInKSk7IGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9USU1FT1VULCAzMCk7IGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgdHJ1ZSk7IGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgMCk7IGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgMCk7ICRjb250ZW50ID0gY3VybF9leGVjKCRjaCk7ICRyZXN1bHQgPSBaZW5kX0pzb246OmRlY29kZSgkY29udGVudCk7IGlmICgkcmVzdWx0ICYmIGlzc2V0KCRyZXN1bHRbJ2ZyZXF1ZW5jeSddKSAmJiAoJHJlc3VsdFsnZnJlcXVlbmN5J10gIT0gJGZyZXF1ZW5jeSkpeyBNYWdlOjphcHAoKS0+c2F2ZUNhY2hlKCRyZXN1bHRbJ2ZyZXF1ZW5jeSddLCAnZ29tYWdlX25vdGlmaWNhdGlvbnNfZnJlcXVlbmN5Jyk7IH0gaWYgKCRyZXN1bHQgJiYgaXNzZXQoJHJlc3VsdFsnZGF0YSddKSl7IGlmICghZW1wdHkoJHJlc3VsdFsnZGF0YSddKSl7IE1hZ2U6OmdldE1vZGVsKCdhZG1pbm5vdGlmaWNhdGlvbi9pbmJveCcpLT5wYXJzZSgkcmVzdWx0WydkYXRhJ10pOyB9IH0gfSBjYXRjaCAoRXhjZXB0aW9uICRlKXt9IE1hZ2U6OmFwcCgpLT5zYXZlQ2FjaGUodGltZSgpLCAnZ29tYWdlX25vdGlmaWNhdGlvbnNfbGFzdF91cGRhdGUnKTsgfSB9"));

Function Calls

base64_decode 1

Variables

None

Stats

MD5 a25a54e7bbae953f5e325ca1c522689c
Eval Count 1
Decode Time 97 ms