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("LyoqICogR29NYWdlIExpZ2h0Q2hlY2tvdXQgRXh0ZW5zaW9uICogKiBAY2F0ZWdv..
Decoded Output download
/** * GoMage LightCheckout Extension * * @category Extension * @copyright Copyright (c) 2010-2015 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.9 * @since Class available since Release 1.0 */ require_once(Mage::getBaseDir('lib') . DS . 'GoMage' . DS . 'MobileDetect' . DS . 'Checkout_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.9')); 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() { $rule_ids = Mage::helper('gomage_checkout')->getConfigData('vat/rule'); $rule_ids = array_filter(explode(',', $rule_ids)); if (count($rule_ids)) { $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'), implode(',', $rule_ids) ); return (array)$connection->fetchCol($q); } return array(); } public function getIsAnymoreVersion($major, $minor, $revision = 0) { $version_info = Mage::getVersionInfo(); if ($version_info['major'] > $major) { return true; } elseif ($version_info['major'] == $major) { if ($version_info['minor'] > $minor) { return true; } elseif ($version_info['minor'] == $minor) { if ($version_info['revision'] >= $revision) { return true; } } } return false; } public function isEnterprise() { $modules = array_keys((array)Mage::getConfig()->getNode('modules')->children()); return in_array('Enterprise_Enterprise', $modules); } public function isCompatibleDevice() { $detect = new Checkout_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 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×tamp=' . $timestamp . '&ver=' . urlencode('5.9')); 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
<?php eval(base64_decode("LyoqICogR29NYWdlIExpZ2h0Q2hlY2tvdXQgRXh0ZW5zaW9uICogKiBAY2F0ZWdvcnkgRXh0ZW5zaW9uICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxNSBHb01hZ2UgKGh0dHA6Ly93d3cuZ29tYWdlLmNvbSkgKiBAYXV0aG9yIEdvTWFnZSAqIEBsaWNlbnNlIGh0dHA6Ly93d3cuZ29tYWdlLmNvbS9saWNlbnNlLWFncmVlbWVudC8gU2luZ2xlIGRvbWFpbiBsaWNlbnNlICogQHRlcm1zIG9mIHVzZSBodHRwOi8vd3d3LmdvbWFnZS5jb20vdGVybXMtb2YtdXNlICogQHZlcnNpb24gUmVsZWFzZTogNS45ICogQHNpbmNlIENsYXNzIGF2YWlsYWJsZSBzaW5jZSBSZWxlYXNlIDEuMCAqLyByZXF1aXJlX29uY2UoTWFnZTo6Z2V0QmFzZURpcignbGliJykgLiBEUyAuICdHb01hZ2UnIC4gRFMgLiAnTW9iaWxlRGV0ZWN0JyAuIERTIC4gJ0NoZWNrb3V0X01vYmlsZV9EZXRlY3QucGhwJyk7IGNsYXNzIEdvTWFnZV9DaGVja291dF9IZWxwZXJfRGF0YSBleHRlbmRzIE1hZ2VfQ29yZV9IZWxwZXJfQWJzdHJhY3QgeyBwcm90ZWN0ZWQgJG1vZGU7IHByb3RlY3RlZCAkY291bnRyeV9pZDsgcHVibGljIGZ1bmN0aW9uIGdldENvbmZpZ0RhdGEoJG5vZGUpIHsgcmV0dXJuIE1hZ2U6OmdldFN0b3JlQ29uZmlnKCdnb21hZ2VfY2hlY2tvdXQvJyAuICRub2RlKTsgfSBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2hlY2tvdXRNb2RlKCkgeyBpZiAoaXNfbnVsbCgkdGhpcy0+bW9kZSkpIHsgaWYgKE1hZ2U6OmdldFNpbmdsZXRvbignZ29tYWdlX2NoZWNrb3V0L3R5cGVfb25lc3RlcCcpLT5nZXRRdW90ZSgpLT5pc0FsbG93ZWRHdWVzdENoZWNrb3V0KCkpIHsgJHRoaXMtPm1vZGUgPSBpbnR2YWwoJHRoaXMtPmdldENvbmZpZ0RhdGEoJ3JlZ2lzdHJhdGlvbi9tb2RlJykpOyB9IGVsc2UgeyAkdGhpcy0+bW9kZSA9IDE7IH0gfSByZXR1cm4gJHRoaXMtPm1vZGU7IH0gcHVibGljIGZ1bmN0aW9uIGdldEFsbFN0b3JlRG9tYWlucygpIHsgJGRvbWFpbnMgPSBhcnJheSgpOyBmb3JlYWNoIChNYWdlOjphcHAoKS0+Z2V0V2Vic2l0ZXMoKSBhcyAkd2Vic2l0ZSkgeyAkdXJsID0gJHdlYnNpdGUtPmdldENvbmZpZygnd2ViL3Vuc2VjdXJlL2Jhc2VfdXJsJyk7IGlmICgkZG9tYWluID0gdHJpbShwcmVnX3JlcGxhY2UoJy9eLio/XFwvXFwvKC4qKT9cXC8vJywgJyQxJywgJHVybCkpKSB7ICRkb21haW5zW10gPSAkZG9tYWluOyB9ICR1cmwgPSAkd2Vic2l0ZS0+Z2V0Q29uZmlnKCd3ZWIvc2VjdXJlL2Jhc2VfdXJsJyk7IGlmICgkZG9tYWluID0gdHJpbShwcmVnX3JlcGxhY2UoJy9eLio/XFwvXFwvKC4qKT9cXC8vJywgJyQxJywgJHVybCkpKSB7ICRkb21haW5zW10gPSAkZG9tYWluOyB9IH0gcmV0dXJuIGFycmF5X3VuaXF1ZSgkZG9tYWlucyk7IH0gcHVibGljIGZ1bmN0aW9uIGdldEF2YWlsYWJsZVdlYnNpdGVzKCkgeyByZXR1cm4gJHRoaXMtPl93KCk7IH0gcHVibGljIGZ1bmN0aW9uIGdldEF2YWlsYXZlbFdlYnNpdGVzKCkgeyByZXR1cm4gJHRoaXMtPmdldEF2YWlsYWJsZVdlYnNpdGVzKCk7IH0gcHVibGljIGZ1bmN0aW9uIGlzQXZhaWxhYmxlV2Vic2l0ZSgpIHsgcmV0dXJuIGluX2FycmF5KE1hZ2U6OmFwcCgpLT5nZXRTdG9yZSgpLT5nZXRXZWJzaXRlSWQoKSwgJHRoaXMtPmdldEF2YWlsYWJsZVdlYnNpdGVzKCkpOyB9IHByb3RlY3RlZCBmdW5jdGlvbiBfdygpIHsgaWYgKCFNYWdlOjpnZXRTdG9yZUNvbmZpZygnZ29tYWdlX2FjdGl2YXRpb24vbGlnaHRjaGVja291dC9pbnN0YWxsZWQnKSB8fCAoaW50dmFsKE1hZ2U6OmdldFN0b3JlQ29uZmlnKCdnb21hZ2VfYWN0aXZhdGlvbi9saWdodGNoZWNrb3V0L2NvdW50JykpID4gMTApICkgeyByZXR1cm4gYXJyYXkoKTsgfSAkdGltZV90b191cGRhdGUgPSA2MCAqIDYwICogMjQgKiAxNTsgJHIgPSBNYWdlOjpnZXRTdG9yZUNvbmZpZygnZ29tYWdlX2FjdGl2YXRpb24vbGlnaHRjaGVja291dC9hcicpOyAkdCA9IE1hZ2U6OmdldFN0b3JlQ29uZmlnKCdnb21hZ2VfYWN0aXZhdGlvbi9saWdodGNoZWNrb3V0L3RpbWUnKTsgJHMgPSBNYWdlOjpnZXRTdG9yZUNvbmZpZygnZ29tYWdlX2FjdGl2YXRpb24vbGlnaHRjaGVja291dC93ZWJzaXRlcycpOyAkbGFzdF9jaGVjayA9IHN0cl9yZXBsYWNlKCRyLCAnJywgTWFnZTo6aGVscGVyKCdjb3JlJyktPmRlY3J5cHQoJHQpKTsgJGFsbHNpdGVzID0gZXhwbG9kZSgnLCcsIHN0cl9yZXBsYWNlKCRyLCAnJywgTWFnZTo6aGVscGVyKCdjb3JlJyktPmRlY3J5cHQoJHMpKSk7ICRhbGxzaXRlcyA9IGFycmF5X2RpZmYoJGFsbHNpdGVzLCBhcnJheSgiIikpOyBpZiAoKCRsYXN0X2NoZWNrICsgJHRpbWVfdG9fdXBkYXRlKSA8IHRpbWUoKSkgeyAkdGhpcy0+YShNYWdlOjpnZXRTdG9yZUNvbmZpZygnZ29tYWdlX2FjdGl2YXRpb24vbGlnaHRjaGVja291dC9rZXknKSwgaW50dmFsKE1hZ2U6OmdldFN0b3JlQ29uZmlnKCdnb21hZ2VfYWN0aXZhdGlvbi9saWdodGNoZWNrb3V0L2NvdW50JykpLCBpbXBsb2RlKCcsJywgJGFsbHNpdGVzKSApOyB9IHJldHVybiAkYWxsc2l0ZXM7IH0gcHVibGljIGZ1bmN0aW9uIGEoJGssICRjID0gMCwgJHMgPSAnJykgeyAkY2ggPSBjdXJsX2luaXQoKTsgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgc3ByaW50ZignaHR0cHM6Ly93d3cuZ29tYWdlLmNvbS9pbmRleC5waHAvZ29tYWdlX2Rvd25sb2FkYWJsZS9rZXkvY2hlY2snKSk7IGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NULCB0cnVlKTsgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsICdrZXk9JyAuIHVybGVuY29kZSgkaykgLiAnJnNrdT1saWdodGNoZWNrb3V0JmRvbWFpbnM9JyAuIHVybGVuY29kZShpbXBsb2RlKCcsJywgJHRoaXMtPmdldEFsbFN0b3JlRG9tYWlucygpKSkgLiAnJnZlcj0nIC4gdXJsZW5jb2RlKCc1LjknKSk7IGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9USU1FT1VULCAzMCk7IGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgdHJ1ZSk7IGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgMCk7IGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgMCk7ICRjb250ZW50ID0gY3VybF9leGVjKCRjaCk7ICRyID0gWmVuZF9Kc29uOjpkZWNvZGUoJGNvbnRlbnQpOyAkZSA9IE1hZ2U6OmhlbHBlcignY29yZScpOyBpZiAoZW1wdHkoJHIpKSB7ICR2YWx1ZTEgPSBNYWdlOjpnZXRTdG9yZUNvbmZpZygnZ29tYWdlX2FjdGl2YXRpb24vbGlnaHRjaGVja291dC9hcicpOyAkZ3JvdXBzID0gYXJyYXkoICdsaWdodGNoZWNrb3V0JyA9PiBhcnJheSggJ2ZpZWxkcycgPT4gYXJyYXkoICdhcicgPT4gYXJyYXkoICd2YWx1ZScgPT4gJHZhbHVlMSApLCAnd2Vic2l0ZXMnID0+IGFycmF5KCAndmFsdWUnID0+IChzdHJpbmcpTWFnZTo6Z2V0U3RvcmVDb25maWcoJ2dvbWFnZV9hY3RpdmF0aW9uL2xpZ2h0Y2hlY2tvdXQvd2Vic2l0ZXMnKSApLCAndGltZScgPT4gYXJyYXkoICd2YWx1ZScgPT4gKHN0cmluZykkZS0+ZW5jcnlwdCgkdmFsdWUxIC4gKHRpbWUoKSAtICg2MCAqIDYwICogMjQgKiAxNSAtIDE4MDApKSAuICR2YWx1ZTEpICksICdjb3VudCcgPT4gYXJyYXkoICd2YWx1ZScgPT4gJGMgKyAxKSApICkgKTsgTWFnZTo6Z2V0TW9kZWwoJ2FkbWluaHRtbC9jb25maWdfZGF0YScpIC0+c2V0U2VjdGlvbignZ29tYWdlX2FjdGl2YXRpb24nKSAtPnNldEdyb3VwcygkZ3JvdXBzKSAtPnNhdmUoKTsgTWFnZTo6Z2V0Q29uZmlnKCktPnJlaW5pdCgpOyBNYWdlOjphcHAoKS0+cmVpbml0U3RvcmVzKCk7IHJldHVybjsgfSAkdmFsdWUxID0gJyc7ICR2YWx1ZTIgPSAnJzsgaWYgKGlzc2V0KCRyWydkJ10pICYmIGlzc2V0KCRyWydjJ10pKSB7ICR2YWx1ZTEgPSAkZS0+ZW5jcnlwdChiYXNlNjRfZW5jb2RlKFplbmRfSnNvbjo6ZW5jb2RlKCRyKSkpOyBpZiAoISRzKSB7ICRzID0gTWFnZTo6Z2V0U3RvcmVDb25maWcoJ2dvbWFnZV9hY3RpdmF0aW9uL2xpZ2h0Y2hlY2tvdXQvd2Vic2l0ZXMnKTsgfSAkcyA9IGFycmF5X3NsaWNlKGV4cGxvZGUoJywnLCAkcyksIDAsICRyWydjJ10pOyAkdmFsdWUyID0gJGUtPmVuY3J5cHQoJHZhbHVlMSAuIGltcGxvZGUoJywnLCAkcykgLiAkdmFsdWUxKTsgfSAkZ3JvdXBzID0gYXJyYXkoICdsaWdodGNoZWNrb3V0JyA9PiBhcnJheSggJ2ZpZWxkcycgPT4gYXJyYXkoICdhcicgPT4gYXJyYXkoICd2YWx1ZScgPT4gJHZhbHVlMSApLCAnd2Vic2l0ZXMnID0+IGFycmF5KCAndmFsdWUnID0+IChzdHJpbmcpJHZhbHVlMiApLCAndGltZScgPT4gYXJyYXkoICd2YWx1ZScgPT4gKHN0cmluZykkZS0+ZW5jcnlwdCgkdmFsdWUxIC4gdGltZSgpIC4gJHZhbHVlMSkgKSwgJ2luc3RhbGxlZCcgPT4gYXJyYXkoICd2YWx1ZScgPT4gMSApLCAnY291bnQnID0+IGFycmF5KCAndmFsdWUnID0+IDApICkgKSApOyBNYWdlOjpnZXRNb2RlbCgnYWRtaW5odG1sL2NvbmZpZ19kYXRhJykgLT5zZXRTZWN0aW9uKCdnb21hZ2VfYWN0aXZhdGlvbicpIC0+c2V0R3JvdXBzKCRncm91cHMpIC0+c2F2ZSgpOyBNYWdlOjpnZXRDb25maWcoKS0+cmVpbml0KCk7IE1hZ2U6OmFwcCgpLT5yZWluaXRTdG9yZXMoKTsgfSBwdWJsaWMgZnVuY3Rpb24gZ2EoKSB7IHJldHVybiBaZW5kX0pzb246OmRlY29kZShiYXNlNjRfZGVjb2RlKE1hZ2U6OmhlbHBlcignY29yZScpLT5kZWNyeXB0KE1hZ2U6OmdldFN0b3JlQ29uZmlnKCdnb21hZ2VfYWN0aXZhdGlvbi9saWdodGNoZWNrb3V0L2FyJykpKSk7IH0gcHVibGljIGZ1bmN0aW9uIGdldEdlb2lwUmVjb3JkKCkgeyByZXR1cm4gR2VvSVBfQ29yZTo6Z2V0SW5zdGFuY2UoTWFnZTo6Z2V0QmFzZURpcignbWVkaWEnKSAuICIvZ2VvaXAvR2VvTGl0ZUNpdHkuZGF0IiwgR2VvSVBfQ29yZTo6R0VPSVBfU1RBTkRBUkQpLT5nZW9pcF9yZWNvcmRfYnlfYWRkcihNYWdlOjpoZWxwZXIoJ2NvcmUvaHR0cCcpLT5nZXRSZW1vdGVBZGRyKCkpOyB9IHB1YmxpYyBmdW5jdGlvbiBnZXREZWZhdWx0Q291bnRyeUlkKCkgeyBpZiAoaXNfbnVsbCgkdGhpcy0+Y291bnRyeV9pZCkpIHsgaWYgKE1hZ2U6OmdldFN0b3JlQ29uZmlnKCdnb21hZ2VfY2hlY2tvdXQvZ2VvaXAvZ2VvaXBfZW5hYmxlZCcpICYmIGZpbGVfZXhpc3RzKE1hZ2U6OmdldEJhc2VEaXIoJ21lZGlhJykgLiAiL2dlb2lwL0dlb0xpdGVDaXR5LmRhdCIpICYmIGV4dGVuc2lvbl9sb2FkZWQoJ21ic3RyaW5nJykpIHsgdHJ5IHsgJHRoaXMtPmNvdW50cnlfaWQgPSBHZW9JUF9Db3JlOjpnZXRJbnN0YW5jZShNYWdlOjpnZXRCYXNlRGlyKCdtZWRpYScpIC4gIi9nZW9pcC9HZW9MaXRlQ2l0eS5kYXQiLCBHZW9JUF9Db3JlOjpHRU9JUF9TVEFOREFSRCktPmdlb2lwX2NvdW50cnlfY29kZV9ieV9hZGRyKE1hZ2U6OmhlbHBlcignY29yZS9odHRwJyktPmdldFJlbW90ZUFkZHIoKSk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyBlY2hvICRlOyB9IH0gaWYgKCEkdGhpcy0+Y291bnRyeV9pZCkgeyAkdGhpcy0+Y291bnRyeV9pZCA9IE1hZ2U6OmdldFN0b3JlQ29uZmlnKCdnb21hZ2VfY2hlY2tvdXQvZ2VuZXJhbC9kZWZhdWx0X2NvdW50cnknKTsgaWYgKCEkdGhpcy0+Y291bnRyeV9pZCkgeyAkdGhpcy0+Y291bnRyeV9pZCA9IE1hZ2U6OmdldFN0b3JlQ29uZmlnKCdnZW5lcmFsL2NvdW50cnkvZGVmYXVsdCcpOyB9IH0gfSByZXR1cm4gJHRoaXMtPmNvdW50cnlfaWQ7IH0gcHVibGljIGZ1bmN0aW9uIGdldERlZmF1bHRTaGlwcGluZ01ldGhvZCgpIHsgJGFkZHJlc3MgPSBNYWdlOjpnZXRTaW5nbGV0b24oJ2NoZWNrb3V0L3Nlc3Npb24nKS0+Z2V0UXVvdGUoKS0+Z2V0U2hpcHBpbmdBZGRyZXNzKCk7ICRhZGRyZXNzLT5zZXRDb2xsZWN0U2hpcHBpbmdSYXRlcyh0cnVlKS0+Y29sbGVjdFNoaXBwaW5nUmF0ZXMoKTsgJHJhdGVzID0gJGFkZHJlc3MtPmdldEdyb3VwZWRBbGxTaGlwcGluZ1JhdGVzKCk7IGlmIChjb3VudCgkcmF0ZXMpID09IDEpIHsgZm9yZWFjaCAoJHJhdGVzIGFzICRyYXRlX2NvZGUgPT4gJG1ldGhvZHMpIHsgaWYgKGNvdW50KCRtZXRob2RzKSA9PSAxKSB7IGZvcmVhY2ggKCRtZXRob2RzIGFzICRtZXRob2QpIHsgcmV0dXJuICRtZXRob2QtPmdldENvZGUoKTsgfSB9IGVsc2UgeyByZXR1cm4gJHRoaXMtPmdldENvbmZpZ0RhdGEoJ2dlbmVyYWwvZGVmYXVsdF9zaGlwcGluZ19tZXRob2QnKTsgfSB9IH0gZWxzZSB7IHJldHVybiAkdGhpcy0+Z2V0Q29uZmlnRGF0YSgnZ2VuZXJhbC9kZWZhdWx0X3NoaXBwaW5nX21ldGhvZCcpOyB9IH0gcHVibGljIGZ1bmN0aW9uIGdldERlZmF1bHRQYXltZW50TWV0aG9kKCkgeyByZXR1cm4gJHRoaXMtPmdldENvbmZpZ0RhdGEoJ2dlbmVyYWwvZGVmYXVsdF9wYXltZW50X21ldGhvZCcpOyB9IHB1YmxpYyBmdW5jdGlvbiBnZXRBY3RpdmVQYXltZW50TWV0aG9kcygkc3RvcmUgPSBudWxsKSB7ICRtZXRob2RzID0gYXJyYXkoKTsgJGNvbmZpZyA9IE1hZ2U6OmdldFN0b3JlQ29uZmlnKCdwYXltZW50JywgJHN0b3JlKTsgZm9yZWFjaCAoJGNvbmZpZyBhcyAkY29kZSA9PiAkbWV0aG9kQ29uZmlnKSB7IGlmIChpc3NldCgkbWV0aG9kQ29uZmlnWydtb2RlbCddKSAmJiAkbWV0aG9kQ29uZmlnWydtb2RlbCddKSB7IGlmIChpc3NldCgkbWV0aG9kQ29uZmlnWydncm91cCddKSAmJiAkbWV0aG9kQ29uZmlnWydncm91cCddID09ICdtYm9va2VycycgJiYgTWFnZTo6Z2V0U3RvcmVDb25maWdGbGFnKCdtb25leWJvb2tlcnMvJyAuICRjb2RlIC4gJy9hY3RpdmUnLCAkc3RvcmUpKSB7ICRtZXRob2QgPSAkdGhpcy0+X2dldFBheW1lbnRNZXRob2QoJGNvZGUsICRtZXRob2RDb25maWcpOyAkbWV0aG9kWydncm91cCddID0gJ21ib29rZXJzJzsgJG1ldGhvZHNbJGNvZGVdID0gJG1ldGhvZDsgfSBlbHNlaWYgKCRtZXRob2RDb25maWdbJ21vZGVsJ10gPT0gJ2dvb2dsZWNoZWNrb3V0L3BheW1lbnQnKSB7IGlmIChNYWdlOjpnZXRTdG9yZUNvbmZpZ0ZsYWcoJ2dvb2dsZS9jaGVja291dC9hY3RpdmUnLCAkc3RvcmUpKSB7ICRtZXRob2QgPSAkdGhpcy0+X2dldFBheW1lbnRNZXRob2QoJGNvZGUsICRtZXRob2RDb25maWcpOyAkbWV0aG9kc1skY29kZV0gPSAkbWV0aG9kOyB9IH0gZWxzZWlmIChpc3NldCgkbWV0aG9kQ29uZmlnWydncm91cCddKSAmJiAkbWV0aG9kQ29uZmlnWydncm91cCddID09ICdwYXlvbmUnKSB7ICRtZXRob2QgPSAkdGhpcy0+X2dldFBheW1lbnRNZXRob2QoJGNvZGUsICRtZXRob2RDb25maWcpOyBpZiAoJG1ldGhvZCAmJiAkbWV0aG9kLT5pc0F2YWlsYWJsZSgpKSB7ICRtZXRob2RzWyRjb2RlXSA9ICRtZXRob2Q7IH0gfSBlbHNlaWYgKE1hZ2U6OmdldFN0b3JlQ29uZmlnRmxhZygncGF5bWVudC8nIC4gJGNvZGUgLiAnL2FjdGl2ZScsICRzdG9yZSkpIHsgJG1ldGhvZCA9ICR0aGlzLT5fZ2V0UGF5bWVudE1ldGhvZCgkY29kZSwgJG1ldGhvZENvbmZpZyk7ICRtZXRob2RbJ2dyb3VwJ10gPSAnJzsgJG1ldGhvZHNbJGNvZGVdID0gJG1ldGhvZDsgfSB9IH0gcmV0dXJuICRtZXRob2RzOyB9IHByb3RlY3RlZCBmdW5jdGlvbiBfZ2V0UGF5bWVudE1ldGhvZCgkY29kZSwgJGNvbmZpZywgJHN0b3JlID0gbnVsbCkgeyAkbW9kZWxOYW1lID0gJGNvbmZpZ1snbW9kZWwnXTsgJG1ldGhvZCA9IE1hZ2U6OmdldE1vZGVsKCRtb2RlbE5hbWUpOyBpZiAoJG1ldGhvZCkgeyAkbWV0aG9kLT5zZXRJZCgkY29kZSktPnNldFN0b3JlKCRzdG9yZSk7IH0gcmV0dXJuICRtZXRob2Q7IH0gcHVibGljIGZ1bmN0aW9uIGdldFZhdEJhc2VDb3VudHJ5TW9kZSgpIHsgcmV0dXJuICR0aGlzLT5nZXRDb25maWdEYXRhKCd2YXQvYmFzZV9jb3VudHJ5Jyk7IH0gcHVibGljIGZ1bmN0aW9uIGdldFZhdFdpdGhpbkNvdW50cnlNb2RlKCkgeyByZXR1cm4gJHRoaXMtPmdldENvbmZpZ0RhdGEoJ3ZhdC9pZl9ub3RfYmFzZV9jb3VudHJ5Jyk7IH0gcHVibGljIGZ1bmN0aW9uIGdldFRheENvdW50cmllcygpIHsgJHJ1bGVfaWRzID0gTWFnZTo6aGVscGVyKCdnb21hZ2VfY2hlY2tvdXQnKS0+Z2V0Q29uZmlnRGF0YSgndmF0L3J1bGUnKTsgJHJ1bGVfaWRzID0gYXJyYXlfZmlsdGVyKGV4cGxvZGUoJywnLCAkcnVsZV9pZHMpKTsgaWYgKGNvdW50KCRydWxlX2lkcykpIHsgJHJlc291cmNlID0gTWFnZTo6Z2V0U2luZ2xldG9uKCdjb3JlL3Jlc291cmNlJyk7ICRjb25uZWN0aW9uID0gJHJlc291cmNlLT5nZXRDb25uZWN0aW9uKCdyZWFkJyk7ICRxID0gc3ByaW50ZignU0VMRUNUIERJU1RJTkNUKGB0YXhfY291bnRyeV9pZGApIEZST00gYCVzYCBXSEVSRSBgdGF4X2NhbGN1bGF0aW9uX3JhdGVfaWRgIElOIChTRUxFQ1QgYHRheF9jYWxjdWxhdGlvbl9yYXRlX2lkYCBGUk9NIGAlc2AgV0hFUkUgYHRheF9jYWxjdWxhdGlvbl9ydWxlX2lkYCBpbiAoJXMpICknLCAkcmVzb3VyY2UtPmdldFRhYmxlTmFtZSgndGF4X2NhbGN1bGF0aW9uX3JhdGUnKSwgJHJlc291cmNlLT5nZXRUYWJsZU5hbWUoJ3RheF9jYWxjdWxhdGlvbicpLCBpbXBsb2RlKCcsJywgJHJ1bGVfaWRzKSApOyByZXR1cm4gKGFycmF5KSRjb25uZWN0aW9uLT5mZXRjaENvbCgkcSk7IH0gcmV0dXJuIGFycmF5KCk7IH0gcHVibGljIGZ1bmN0aW9uIGdldElzQW55bW9yZVZlcnNpb24oJG1ham9yLCAkbWlub3IsICRyZXZpc2lvbiA9IDApIHsgJHZlcnNpb25faW5mbyA9IE1hZ2U6OmdldFZlcnNpb25JbmZvKCk7IGlmICgkdmVyc2lvbl9pbmZvWydtYWpvciddID4gJG1ham9yKSB7IHJldHVybiB0cnVlOyB9IGVsc2VpZiAoJHZlcnNpb25faW5mb1snbWFqb3InXSA9PSAkbWFqb3IpIHsgaWYgKCR2ZXJzaW9uX2luZm9bJ21pbm9yJ10gPiAkbWlub3IpIHsgcmV0dXJuIHRydWU7IH0gZWxzZWlmICgkdmVyc2lvbl9pbmZvWydtaW5vciddID09ICRtaW5vcikgeyBpZiAoJHZlcnNpb25faW5mb1sncmV2aXNpb24nXSA+PSAkcmV2aXNpb24pIHsgcmV0dXJuIHRydWU7IH0gfSB9IHJldHVybiBmYWxzZTsgfSBwdWJsaWMgZnVuY3Rpb24gaXNFbnRlcnByaXNlKCkgeyAkbW9kdWxlcyA9IGFycmF5X2tleXMoKGFycmF5KU1hZ2U6OmdldENvbmZpZygpLT5nZXROb2RlKCdtb2R1bGVzJyktPmNoaWxkcmVuKCkpOyByZXR1cm4gaW5fYXJyYXkoJ0VudGVycHJpc2VfRW50ZXJwcmlzZScsICRtb2R1bGVzKTsgfSBwdWJsaWMgZnVuY3Rpb24gaXNDb21wYXRpYmxlRGV2aWNlKCkgeyAkZGV0ZWN0ID0gbmV3IENoZWNrb3V0X01vYmlsZV9EZXRlY3QoKTsgaWYgKCEkZGV0ZWN0LT5pc01vYmlsZSgpKSB7IHJldHVybiAoYm9vbCkkdGhpcy0+Z2V0Q29uZmlnRGF0YSgnZGV2aWNlL2Rlc2t0b3AnKTsgfSBpZiAoJGRldGVjdC0+aXNUYWJsZXQoKSkgeyAkZGV2aWNlcyA9IGV4cGxvZGUoJywnLCAkdGhpcy0+Z2V0Q29uZmlnRGF0YSgnZGV2aWNlL3RhYmxldCcpKTsgfSBlbHNlIHsgJGRldmljZXMgPSBleHBsb2RlKCcsJywgJHRoaXMtPmdldENvbmZpZ0RhdGEoJ2RldmljZS9zbWFydHBob25lJykpOyB9IGlmICgkZGV0ZWN0LT5pc0FuZHJvaWRPUygpKSB7IHJldHVybiBpbl9hcnJheShHb01hZ2VfQ2hlY2tvdXRfTW9kZWxfQWRtaW5odG1sX1N5c3RlbV9Db25maWdfU291cmNlX0RldmljZTo6QU5EUk9JRCwgJGRldmljZXMpOyB9IGlmICgkZGV0ZWN0LT5pc0JsYWNrQmVycnlPUygpKSB7IHJldHVybiBpbl9hcnJheShHb01hZ2VfQ2hlY2tvdXRfTW9kZWxfQWRtaW5odG1sX1N5c3RlbV9Db25maWdfU291cmNlX0RldmljZTo6QkxBQ0tCRVJSWSwgJGRldmljZXMpOyB9IGlmICgkZGV0ZWN0LT5pc2lPUygpKSB7IHJldHVybiBpbl9hcnJheShHb01hZ2VfQ2hlY2tvdXRfTW9kZWxfQWRtaW5odG1sX1N5c3RlbV9Db25maWdfU291cmNlX0RldmljZTo6SU9TLCAkZGV2aWNlcyk7IH0gcmV0dXJuIGluX2FycmF5KEdvTWFnZV9DaGVja291dF9Nb2RlbF9BZG1pbmh0bWxfU3lzdGVtX0NvbmZpZ19Tb3VyY2VfRGV2aWNlOjpPVEhFUiwgJGRldmljZXMpOyB9IHB1YmxpYyBmdW5jdGlvbiBpc0xlZnR0b1JpZ2h0V3JpdGUoKSB7IHJldHVybiBpbl9hcnJheShNYWdlOjphcHAoKS0+Z2V0TG9jYWxlKCktPmdldExvY2FsZUNvZGUoKSwgYXJyYXkoJ2FyX0RaJywgJ2FyX0VHJywgJ2FyX0tXJywgJ2FyX01BJywgJ2FyX1NBJywgJ2hlX0lMJywgJ2ZhX0lSJykgKTsgfSBwdWJsaWMgZnVuY3Rpb24gZ2V0Q291bnRyaWVzU3RhdGVzUmVxdWlyZWQoKSB7ICRyZXN1bHQgPSBhcnJheSgpOyBpZiAoJHRoaXMtPmdldENvbmZpZ0RhdGEoJ2FkZHJlc3NfZmllbGRzL3JlZ2lvbicpID09ICdyZXEnKSB7ICRjb3VudHJ5X2NvbGxlY3Rpb24gPSBNYWdlOjpoZWxwZXIoJ2RpcmVjdG9yeScpLT5nZXRDb3VudHJ5Q29sbGVjdGlvbigpOyBmb3JlYWNoICgkY291bnRyeV9jb2xsZWN0aW9uIGFzICRjb3VudHJ5KSB7ICRyZXN1bHRbXSA9ICRjb3VudHJ5LT5nZXRDb3VudHJ5SWQoKTsgfSB9IHJldHVybiBNYWdlOjpoZWxwZXIoJ2NvcmUnKS0+anNvbkVuY29kZSgkcmVzdWx0KTsgfSBwdWJsaWMgZnVuY3Rpb24gZm9ybWF0Q29sb3IoJHZhbHVlKSB7IGlmICgkdmFsdWUgPSBwcmVnX3JlcGxhY2UoJy9bXmEtekEtWjAtOVxzXS8nLCAnJywgJHZhbHVlKSkgeyAkdmFsdWUgPSAnIycgLiAkdmFsdWU7IH0gcmV0dXJuICR2YWx1ZTsgfSBwdWJsaWMgZnVuY3Rpb24gbm90aWZ5KCkgeyAkZnJlcXVlbmN5ID0gaW50dmFsKE1hZ2U6OmFwcCgpLT5sb2FkQ2FjaGUoJ2dvbWFnZV9ub3RpZmljYXRpb25zX2ZyZXF1ZW5jeScpKTsgaWYgKCEkZnJlcXVlbmN5KSB7ICRmcmVxdWVuY3kgPSAyNDsgfSAkbGFzdF91cGRhdGUgPSBpbnR2YWwoTWFnZTo6YXBwKCktPmxvYWRDYWNoZSgnZ29tYWdlX25vdGlmaWNhdGlvbnNfbGFzdF91cGRhdGUnKSk7IGlmICgoJGZyZXF1ZW5jeSAqIDYwICogNjAgKyAkbGFzdF91cGRhdGUpID4gdGltZSgpKSB7IHJldHVybiBmYWxzZTsgfSAkdGltZXN0YW1wID0gJGxhc3RfdXBkYXRlOyBpZiAoISR0aW1lc3RhbXApIHsgJHRpbWVzdGFtcCA9IHRpbWUoKTsgfSB0cnkgeyAkY2ggPSBjdXJsX2luaXQoKTsgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgc3ByaW50ZignaHR0cHM6Ly93d3cuZ29tYWdlLmNvbS9pbmRleC5waHAvZ29tYWdlX25vdGlmaWNhdGlvbi9pbmRleC9kYXRhJykpOyBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVCwgdHJ1ZSk7IGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCAnc2t1PWxpZ2h0Y2hlY2tvdXQmdGltZXN0YW1wPScgLiAkdGltZXN0YW1wIC4gJyZ2ZXI9JyAuIHVybGVuY29kZSgnNS45JykpOyBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVElNRU9VVCwgMzApOyBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUpOyBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIDApOyBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIDApOyAkY29udGVudCA9IGN1cmxfZXhlYygkY2gpOyAkcmVzdWx0ID0gWmVuZF9Kc29uOjpkZWNvZGUoJGNvbnRlbnQpOyBpZiAoJHJlc3VsdCAmJiBpc3NldCgkcmVzdWx0WydmcmVxdWVuY3knXSkgJiYgKCRyZXN1bHRbJ2ZyZXF1ZW5jeSddICE9ICRmcmVxdWVuY3kpKSB7IE1hZ2U6OmFwcCgpLT5zYXZlQ2FjaGUoJHJlc3VsdFsnZnJlcXVlbmN5J10sICdnb21hZ2Vfbm90aWZpY2F0aW9uc19mcmVxdWVuY3knKTsgfSBpZiAoJHJlc3VsdCAmJiBpc3NldCgkcmVzdWx0WydkYXRhJ10pKSB7IGlmICghZW1wdHkoJHJlc3VsdFsnZGF0YSddKSkgeyBNYWdlOjpnZXRNb2RlbCgnYWRtaW5ub3RpZmljYXRpb24vaW5ib3gnKS0+cGFyc2UoJHJlc3VsdFsnZGF0YSddKTsgfSB9IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyB9IE1hZ2U6OmFwcCgpLT5zYXZlQ2FjaGUodGltZSgpLCAnZ29tYWdlX25vdGlmaWNhdGlvbnNfbGFzdF91cGRhdGUnKTsgfSB9"));
Function Calls
base64_decode | 1 |
Stats
MD5 | 3e4288cfe13315c0ae8435d2474f50eb |
Eval Count | 1 |
Decode Time | 110 ms |