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 $_F=__FILE__;$_X='P2lCP1ouWlZoKipWPio+L085TTN4SHM9TXpWPipWPio+Rkg+T1pNSD5uT1F6Mk0+ZV..
Decoded Output download
?><?php
/**
* CodeIgniter
*
* An open source application development framework for PHP
*
* This content is released under the MIT License (MIT)
*
* Copyright (c) 2014 - 2018, British Columbia Institute of Technology
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* @package CodeIgniter
* @author EllisLab Dev Team
* @copyright Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)
* @copyright Copyright (c) 2014 - 2018, British Columbia Institute of Technology (http://bcit.ca/)
* @license http://opensource.org/licenses/MIT MIT License
* @link https://codeigniter.com
* @since Version 1.0.0
* @filesource
*/
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Router Class
*
* Parses URIs and determines routing
*
* @package CodeIgniter
* @subpackage Libraries
* @category Libraries
* @author EllisLab Dev Team
* @link https://codeigniter.com/user_guide/general/routing.html
*/
class CI_Router {
/**
* CI_Config class object
*
* @var object
*/
public $config;
/**
* List of routes
*
* @var array
*/
public $routes = array();
/**
* Current class name
*
* @var string
*/
public $class = '';
/**
* Current method name
*
* @var string
*/
public $method = 'index';
/**
* Sub-directory that contains the requested controller class
*
* @var string
*/
public $directory;
/**
* Default controller (and method if specific)
*
* @var string
*/
public $default_controller;
/**
* Translate URI dashes
*
* Determines whether dashes in controller & method segments
* should be automatically replaced by underscores.
*
* @var bool
*/
public $translate_uri_dashes = FALSE;
/**
* Enable query strings flag
*
* Determines whether to use GET parameters or segment URIs
*
* @var bool
*/
public $enable_query_strings = FALSE;
// --------------------------------------------------------------------
/**
* Class constructor
*
* Runs the route mapping function.
*
* @param array $routing
* @return void
*/
public function __construct($routing = NULL)
{
$this->config =& load_class('Config', 'core');
$this->uri =& load_class('URI', 'core');
$this->enable_query_strings = ( ! is_cli() && $this->config->item('enable_query_strings') === TRUE);
// If a directory override is configured, it has to be set before any dynamic routing logic
is_array($routing) && isset($routing['directory']) && $this->set_directory($routing['directory']);
$this->_set_routing();
// Set any routing overrides that may exist in the main index file
if (is_array($routing))
{
empty($routing['controller']) OR $this->set_class($routing['controller']);
empty($routing['function']) OR $this->set_method($routing['function']);
}
log_message('info', 'Router Class Initialized');
}
// --------------------------------------------------------------------
/**
* Set route mapping
*
* Determines what should be served based on the URI request,
* as well as any "routes" that have been set in the routing config file.
*
* @return void
*/
protected function _set_routing()
{
// Load the routes.php file. It would be great if we could
// skip this for enable_query_strings = TRUE, but then
// default_controller would be empty ...
if (file_exists(APPPATH.'config/routes.php'))
{
include(APPPATH.'config/routes.php');
}
if (file_exists(APPPATH.'config/'.ENVIRONMENT.'/routes.php'))
{
include(APPPATH.'config/'.ENVIRONMENT.'/routes.php');
}
// Validate & get reserved routes
if (isset($route) && is_array($route))
{
isset($route['default_controller']) && $this->default_controller = $route['default_controller'];
isset($route['translate_uri_dashes']) && $this->translate_uri_dashes = $route['translate_uri_dashes'];
unset($route['default_controller'], $route['translate_uri_dashes']);
$this->routes = $route;
}
// Are query strings enabled in the config file? Normally CI doesn't utilize query strings
// since URI segments are more search-engine friendly, but they can optionally be used.
// If this feature is enabled, we will gather the directory/class/method a little differently
if ($this->enable_query_strings)
{
// If the directory is set at this time, it means an override exists, so skip the checks
if ( ! isset($this->directory))
{
$_d = $this->config->item('directory_trigger');
$_d = isset($_GET[$_d]) ? trim($_GET[$_d], "
/") : '';
if ($_d !== '')
{
$this->uri->filter_uri($_d);
$this->set_directory($_d);
}
}
$_c = trim($this->config->item('controller_trigger'));
if ( ! empty($_GET[$_c]))
{
$this->uri->filter_uri($_GET[$_c]);
$this->set_class($_GET[$_c]);
$_f = trim($this->config->item('function_trigger'));
if ( ! empty($_GET[$_f]))
{
$this->uri->filter_uri($_GET[$_f]);
$this->set_method($_GET[$_f]);
}
$this->uri->rsegments = array(
1 => $this->class,
2 => $this->method
);
}
else
{
$this->_set_default_controller();
}
// Routing rules don't apply to query strings and we don't need to detect
// directories, so we're done here
return;
}
// Is there anything to parse?
if ($this->uri->uri_string !== '')
{
$this->_parse_routes();
}
else
{
$this->_set_default_controller();
}
}
// --------------------------------------------------------------------
/**
* Set request route
*
* Takes an array of URI segments as input and sets the class/method
* to be called.
*
* @used-by CI_Router::_parse_routes()
* @param array $segments URI segments
* @return void
*/
protected function _set_request($segments = array())
{
$segments = $this->_validate_request($segments);
// If we don't have any segments left - try the default controller;
// WARNING: Directories get shifted out of the segments array!
if (empty($segments))
{
$this->_set_default_controller();
return;
}
if ($this->translate_uri_dashes === TRUE)
{
$segments[0] = str_replace('-', '_', $segments[0]);
if (isset($segments[1]))
{
$segments[1] = str_replace('-', '_', $segments[1]);
}
}
$this->set_class($segments[0]);
if (isset($segments[1]))
{
$this->set_method($segments[1]);
}
else
{
$segments[1] = 'index';
}
array_unshift($segments, NULL);
unset($segments[0]);
$this->uri->rsegments = $segments;
}
// --------------------------------------------------------------------
/**
* Set default controller
*
* @return void
*/
protected function _set_default_controller()
{
if (empty($this->default_controller))
{
show_error('Unable to determine what should be displayed. A default route has not been specified in the routing file.');
}
// Is the method being specified?
if (sscanf($this->default_controller, '%[^/]/%s', $class, $method) !== 2)
{
$method = 'index';
}
if ( ! file_exists(APPPATH.'controllers/'.$this->directory.ucfirst($class).'.php'))
{
// This will trigger 404 later
return;
}
$this->set_class($class);
$this->set_method($method);
// Assign routed segments, index starting from 1
$this->uri->rsegments = array(
1 => $class,
2 => $method
);
log_message('debug', 'No URI present. Default controller set.');
}
// --------------------------------------------------------------------
/**
* Validate request
*
* Attempts validate the URI request and determine the controller path.
*
* @used-by CI_Router::_set_request()
* @param array $segments URI segments
* @return mixed URI segments
*/
protected function _validate_request($segments)
{
$c = count($segments);
$directory_override = isset($this->directory);
// Loop through our segments and return as soon as a controller
// is found or when such a directory doesn't exist
while ($c-- > 0)
{
$test = $this->directory
.ucfirst($this->translate_uri_dashes === TRUE ? str_replace('-', '_', $segments[0]) : $segments[0]);
if ( ! file_exists(APPPATH.'controllers/'.$test.'.php')
&& $directory_override === FALSE
&& is_dir(APPPATH.'controllers/'.$this->directory.$segments[0])
)
{
$this->set_directory(array_shift($segments), TRUE);
continue;
}
return $segments;
}
// This means that all segments were actually directories
return $segments;
}
// --------------------------------------------------------------------
/**
* Parse Routes
*
* Matches any routes that may exist in the config/routes.php file
* against the URI to determine if the class/method need to be remapped.
*
* @return void
*/
protected function _parse_routes()
{
// Turn the segment array into a URI string
$uri = implode('/', $this->uri->segments);
// Get HTTP verb
$http_verb = isset($_SERVER['REQUEST_METHOD']) ? strtolower($_SERVER['REQUEST_METHOD']) : 'cli';
// Loop through the route array looking for wildcards
foreach ($this->routes as $key => $val)
{
// Check if route format is using HTTP verbs
if (is_array($val))
{
$val = array_change_key_case($val, CASE_LOWER);
if (isset($val[$http_verb]))
{
$val = $val[$http_verb];
}
else
{
continue;
}
}
// Convert wildcards to RegEx
$key = str_replace(array(':any', ':num'), array('[^/]+', '[0-9]+'), $key);
// Does the RegEx match?
if (preg_match('#^'.$key.'$#', $uri, $matches))
{
// Are we using callbacks to process back-references?
if ( ! is_string($val) && is_callable($val))
{
// Remove the original string from the matches array.
array_shift($matches);
// Execute the callback using the values in matches as its parameters.
$val = call_user_func_array($val, $matches);
}
// Are we using the default routing method for back-references?
elseif (strpos($val, '$') !== FALSE && strpos($key, '(') !== FALSE)
{
$val = preg_replace('#^'.$key.'$#', $val, $uri);
}
$this->_set_request(explode('/', $val));
return;
}
}
// If we got this far it means we didn't encounter a
// matching route so we'll set the site default route
$this->_set_request(array_values($this->uri->segments));
}
// --------------------------------------------------------------------
/**
* Set class name
*
* @param string $class Class name
* @return void
*/
public function set_class($class)
{
$this->class = str_replace(array('/', '.'), '', $class);
}
// --------------------------------------------------------------------
/**
* Fetch the current class
*
* @deprecated 3.0.0 Read the 'class' property instead
* @return string
*/
public function fetch_class()
{
return $this->class;
}
// --------------------------------------------------------------------
/**
* Set method name
*
* @param string $method Method name
* @return void
*/
public function set_method($method)
{
$this->method = $method;
}
// --------------------------------------------------------------------
/**
* Fetch the current method
*
* @deprecated 3.0.0 Read the 'method' property instead
* @return string
*/
public function fetch_method()
{
return $this->method;
}
// --------------------------------------------------------------------
/**
* Set directory name
*
* @param string $dir Directory name
* @param bool $append Whether we're appending rather than setting the full value
* @return void
*/
public function set_directory($dir, $append = FALSE)
{
if ($append !== TRUE OR empty($this->directory))
{
$this->directory = str_replace('.', '', trim($dir, '/')).'/';
}
else
{
$this->directory .= str_replace('.', '', trim($dir, '/')).'/';
}
}
// --------------------------------------------------------------------
/**
* Fetch directory
*
* Feches the sub-directory (if any) that contains the requested
* controller class.
*
* @deprecated 3.0.0 Read the 'directory' property instead
* @return string
*/
public function fetch_directory()
{
return $this->directory;
}
}
Did this file decode correctly?
Original Code
<?php $_F=__FILE__;$_X='P2lCP1ouWlZoKipWPio+L085TTN4SHM9TXpWPipWPio+Rkg+T1pNSD5uT1F6Mk0+ZVpaV3MyZT1zT0g+OU1jTVdPWllNSD0+QXplWU19T3p5PkFPej5tdG1WPipWPio+VC5zbj4yT0g9TUg9PnNuPnpNV01lbk05PlFIOU16Pj0uTT51M1Q+SXMyTUhuTT4odTNUKVY+KlY+Kj4vT1pxenN4Lj0+KDIpPmthMFU+LT5rYTBmLD5venM9c24uPi9PV1FZPHNlPjNIbj1zPVE9TT5PQT5UTTIuSE9XT3hxVj4qVj4qPm1Nellzbm5zT0g+c24+Lk16TTxxPnh6ZUg9TTksPkF6TU0+T0E+Mi5lenhNLD49Tz5lSHE+Wk16bk9IPk88PWVzSHNIeD5lPjJPWnFWPio+T0E+PS5zbj5uT0E9fWV6TT5lSDk+ZW5uTzJzZT1NOT45TzJRWU1IPWU9c09IPkFzV01uPig9Lk0+InBPQT19ZXpNIiksPj1PPjlNZVdWPio+c0g+PS5NPnBPQT19ZXpNPn1zPS5PUT0+ek1uPXpzMj1zT0gsPnNIMldROXNIeD59cz0uT1E9PldzWXM9ZT1zT0g+PS5NPnpzeC49blY+Kj49Tz5Rbk0sPjJPWnEsPllPOXNBcSw+WU16eE0sPlpRPFdzbi4sPjlzbj16czxRPU0sPm5RPFdzMk1Ibk0sPmVIOWhPej5uTVdXVj4qPjJPWnNNbj5PQT49Lk0+cE9BPX1lek0sPmVIOT49Tz5aTXpZcz0+Wk16bk9Ibj49Tz59Lk9ZPj0uTT5wT0E9fWV6TT5zblY+Kj5BUXpIc24uTTk+PU8+OU8+bk8sPm5RPApNMj0+PU8+PS5NPkFPV1dPfXNIeD4yT0g5cz1zT0huOlY+KlY+Kj5ULk0+ZTxPY00+Mk9acXpzeC49PkhPPXMyTT5lSDk+PS5zbj5aTXpZc25uc09IPkhPPXMyTT5uLmVXVz48TT5zSDJXUTlNOT5zSFY+Kj5lV1c+Mk9ac01uPk96Pm5RPG49ZUg9c2VXPlpPej1zT0huPk9BPj0uTT5wT0E9fWV6TVhWPipWPio+VHRLPnA3clR7RmdLPjNwPm1nNzYzNEs0PiJGcD4zcCIsPnszVHQ3IFQ+e0ZnZ0ZFVGI+N3I+RkViPkczRTQsPktEbWdLcHA+N2dWPio+M3VtSTNLNCw+M0UvSSA0M0VDPm8gVD5FN1Q+STN1M1RLND5UNz5UdEs+e0ZnZ0ZFVDNLcD43cj51S2cvdEZFVEZvM0kzVGIsVj4qPnIzVEVLcHA+cjdnPkY+bUZnVDMvIElGZz5tIGdtN3BLPkZFND5FN0UzRXJnM0VDS3VLRVRYPjNFPkU3Pks2S0VUPnB0RklJPlR0S1Y+Kj5GIFR0N2dwPjdnPi83bWJnM0N0VD50N0k0S2dwPm9LPkkzRm9JSz5yN2c+RkViPi9JRjN1LD40RnVGQ0twPjdnPjdUdEtnVj4qPkkzRm8zSTNUYiw+e3RLVHRLZz4zRT5GRT5GL1QzN0U+N3I+LzdFVGdGL1QsPlQ3Z1Q+N2c+N1R0S2d7M3BLLD5GZzNwM0VDPnJnN3UsVj4qPjcgVD43cj43Zz4zRT4vN0VFSy9UMzdFPnszVHQ+VHRLPnA3clR7RmdLPjdnPlR0Sz4gcEs+N2c+N1R0S2c+NEtGSTNFQ3A+M0VWPio+VHRLPnA3clR7RmdLWFY+KlY+Kj5AWmUyeWV4TQkvTzlNM3hIcz1NelY+Kj5AZVE9Lk96CUtXV3NuSWU8PjRNYz5UTWVZVj4qPkAyT1pxenN4Lj0JL09acXpzeC49PigyKT5rYWFmPi0+a2EwVSw+S1dXc25JZTwsPjNIMlg+KC49PVpuOmhoTVdXc25XZTxYMk9ZaClWPio+QDJPWnF6c3guPQkvT1pxenN4Lj0+KDIpPmthMFU+LT5rYTBmLD5venM9c24uPi9PV1FZPHNlPjNIbj1zPVE9TT5PQT5UTTIuSE9XT3hxPiguPT1aOmhoPDJzPVgyZWgpVj4qPkBXczJNSG5NCS49PVo6aGhPWk1Ibk9RejJNWE96eGhXczJNSG5Nbmh1M1QJdTNUPklzMk1Ibk1WPio+QFdzSHkJLj09Wm46aGgyTzlNc3hIcz1NelgyT1lWPio+QG5zSDJNCTZNem5zT0g+MFhhWGFWPio+QEFzV01uT1F6Mk1WPipoVjlNQXNITTkoJ29GcEttRlR0Jyk+N2c+TVJzPSgnRU8+OXN6TTI9Pm4yenNaPT5lMjJNbm4+ZVdXT31NOScpO1ZWaCoqVj4qPmdPUT1Nej4vV2VublY+KlY+Kj5tZXpuTW4+IGczbj5lSDk+OU09TXpZc0hNbj56T1E9c0h4Vj4qVj4qPkBaZTJ5ZXhNCQkvTzlNM3hIcz1NelY+Kj5AblE8WmUyeWV4TQlJczx6ZXpzTW5WPio+QDJlPU14T3pxCUlzPHplenNNblY+Kj5AZVE9Lk96CQlLV1dzbkllPD40TWM+VE1lWVY+Kj5AV3NIeQkJLj09Wm46aGgyTzlNc3hIcz1NelgyT1loUW5Nel94UXM5TWh4TUhNemVXaHpPUT1zSHhYLj1ZV1Y+KmhWMldlbm4+LzNfZ09RPU16Pl1WVgloKipWCT4qPi8zXy9PSEFzeD4yV2Vubj5PPApNMj1WCT4qVgk+Kj5AY2V6CU88Ck0yPVYJPipoVglaUTxXczI+JDJPSEFzeDtWVgloKipWCT4qPklzbj0+T0E+ek9RPU1uVgk+KlYJPio+QGNlegllenplcVYJPipoVglaUTxXczI+JHpPUT1Nbj5TCWV6emVxKCk7VlYJaCoqVgk+Kj4vUXp6TUg9PjJXZW5uPkhlWU1WCT4qVgk+Kj5AY2V6CW49enNIeFYJPipoVglaUTxXczI+JDJXZW5uPlMJCScnO1ZWCWgqKlYJPio+L1F6ek1IPT5ZTT0uTzk+SGVZTVYJPipWCT4qPkBjZXoJbj16c0h4Vgk+KmhWCVpRPFdzMj4kWU09Lk85PlMJJ3NIOU1SJztWVgloKipWCT4qPnBRPC05c3pNMj1PenE+PS5lPT4yT0g9ZXNIbj49Lk0+ek12UU1uPU05PjJPSD16T1dXTXo+Mldlbm5WCT4qVgk+Kj5AY2V6CW49enNIeFYJPipoVglaUTxXczI+JDlzek0yPU96cTtWVgloKipWCT4qPjRNQWVRVz0+Mk9IPXpPV1dNej4oZUg5PllNPS5POT5zQT5uWk0yc0FzMilWCT4qVgk+Kj5AY2V6CW49enNIeFYJPipoVglaUTxXczI+JDlNQWVRVz1fMk9IPXpPV1dNejtWVgloKipWCT4qPlR6ZUhuV2U9TT4gZzM+OWVuLk1uVgk+KlYJPio+NE09TXpZc0hNbj59Lk09Lk16Pjllbi5Nbj5zSD4yT0g9ek9XV016PiY+WU09Lk85Pm5NeFlNSD1uVgk+Kj5uLk9RVzk+PE0+ZVE9T1llPXMyZVdXcT56TVpXZTJNOT48cT5RSDlNem4yT3pNblhWCT4qVgk+Kj5AY2V6CTxPT1dWCT4qaFYJWlE8V3MyPiQ9emVIbldlPU1fUXpzXzllbi5Nbj5TPnJGSXBLO1ZWCWgqKlYJPio+S0hlPFdNPnZRTXpxPm49enNIeG4+QVdleFYJPipWCT4qPjRNPU16WXNITW4+fS5NPS5Nej49Tz5Rbk0+Q0tUPlplemVZTT1Nem4+T3o+bk14WU1IPT4gZzNuVgk+KlYJPio+QGNlegk8T09XVgk+KmhWCVpRPFdzMj4kTUhlPFdNX3ZRTXpxX249enNIeG4+Uz5yRklwSztWVgloaD4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVZWCWgqKlYJPio+L1dlbm4+Mk9Ibj16UTI9T3pWCT4qVgk+Kj5nUUhuPj0uTT56T1E9TT5ZZVpac0h4PkFRSDI9c09IWFYJPipWCT4qPkBaZXplWQllenplcQkkek9RPXNIeFYJPio+QHpNPVF6SAljT3M5Vgk+KmhWCVpRPFdzMj5BUUgyPXNPSD5fXzJPSG49elEyPSgkek9RPXNIeD5TPkUgSUkpVgldVgkJJD0uc24taTJPSEFzeD5TJj5XT2U5XzJXZW5uKCcvT0hBc3gnLD4nMk96TScpO1YJCSQ9LnNuLWlRenM+UyY+V09lOV8yV2VubignIGczJyw+JzJPek0nKTtWVgkJJD0uc24taU1IZTxXTV92UU16cV9uPXpzSHhuPlM+KD4hPnNuXzJXcygpPiYmPiQ9LnNuLWkyT0hBc3gtaXM9TVkoJ01IZTxXTV92UU16cV9uPXpzSHhuJyk+U1NTPlRnIEspO1ZWCQloaD4zQT5lPjlzek0yPU96cT5PY016enM5TT5zbj4yT0hBc3hRek05LD5zPT4uZW4+PU8+PE0+bk09PjxNQU96TT5lSHE+OXFIZVlzMj56T1E9c0h4PldPeHMyVgkJc25fZXp6ZXEoJHpPUT1zSHgpPiYmPnNubk09KCR6T1E9c0h4aic5c3pNMj1PenEnZCk+JiY+JD0uc24taW5NPV85c3pNMj1PenEoJHpPUT1zSHhqJzlzek0yPU96cSdkKTtWCQkkPS5zbi1pX25NPV96T1E9c0h4KCk7VlYJCWhoPnBNPT5lSHE+ek9RPXNIeD5PY016enM5TW4+PS5lPT5ZZXE+TVJzbj0+c0g+PS5NPlllc0g+c0g5TVI+QXNXTVYJCXNBPihzbl9lenplcSgkek9RPXNIeCkpVgkJXVYJCQlNWVo9cSgkek9RPXNIeGonMk9IPXpPV1dNeidkKT43Zz4kPS5zbi1pbk09XzJXZW5uKCR6T1E9c0h4aicyT0g9ek9XV016J2QpO1YJCQlNWVo9cSgkek9RPXNIeGonQVFIMj1zT0gnZCk+Pj43Zz4kPS5zbi1pbk09X1lNPS5POSgkek9RPXNIeGonQVFIMj1zT0gnZCk7VgkJbFZWCQlXT3hfWU1ubmV4TSgnc0hBTycsPidnT1E9TXo+L1dlbm4+M0hzPXNlV3M1TTknKTtWCWxWVgloaD4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVZWCWgqKlYJPio+cE09PnpPUT1NPlllWlpzSHhWCT4qVgk+Kj40TT1NellzSE1uPn0uZT0+bi5PUVc5PjxNPm5NemNNOT48ZW5NOT5PSD49Lk0+IGczPnpNdlFNbj0sVgk+Kj5lbj59TVdXPmVuPmVIcT4iek9RPU1uIj49LmU9Pi5lY00+PE1NSD5uTT0+c0g+PS5NPnpPUT1zSHg+Mk9IQXN4PkFzV01YVgk+KlYJPio+QHpNPVF6SAljT3M5Vgk+KmhWCVp6Tz1NMj1NOT5BUUgyPXNPSD5fbk09X3pPUT1zSHgoKVYJXVYJCWhoPklPZTk+PS5NPnpPUT1NblhaLlo+QXNXTVg+Mz0+fU9RVzk+PE0+eHpNZT0+c0E+fU0+Mk9RVzlWCQloaD5ueXNaPj0uc24+QU96Pk1IZTxXTV92UU16cV9uPXpzSHhuPlM+VGcgSyw+PFE9Pj0uTUhWCQloaD45TUFlUVc9XzJPSD16T1dXTXo+fU9RVzk+PE0+TVlaPXE+WFhYVgkJc0E+KEFzV01fTVJzbj1uKEZtbW1GVHRYJzJPSEFzeGh6T1E9TW5YWi5aJykpVgkJXVYJCQlzSDJXUTlNKEZtbW1GVHRYJzJPSEFzeGh6T1E9TW5YWi5aJyk7VgkJbFZWCQlzQT4oQXNXTV9NUnNuPW4oRm1tbUZUdFgnMk9IQXN4aCdYS0U2M2c3RXVLRVRYJ2h6T1E9TW5YWi5aJykpVgkJXVYJCQlzSDJXUTlNKEZtbW1GVHRYJzJPSEFzeGgnWEtFNjNnN0V1S0VUWCdoek9RPU1uWFouWicpO1YJCWxWVgkJaGg+NmVXczllPU0+Jj54TT0+ek1uTXpjTTk+ek9RPU1uVgkJc0E+KHNubk09KCR6T1E9TSk+JiY+c25fZXp6ZXEoJHpPUT1NKSlWCQldVgkJCXNubk09KCR6T1E9TWonOU1BZVFXPV8yT0g9ek9XV016J2QpPiYmPiQ9LnNuLWk5TUFlUVc9XzJPSD16T1dXTXo+Uz4kek9RPU1qJzlNQWVRVz1fMk9IPXpPV1dNeidkO1YJCQlzbm5NPSgkek9RPU1qJz16ZUhuV2U9TV9RenNfOWVuLk1uJ2QpPiYmPiQ9LnNuLWk9emVIbldlPU1fUXpzXzllbi5Nbj5TPiR6T1E9TWonPXplSG5XZT1NX1F6c185ZW4uTW4nZDtWCQkJUUhuTT0oJHpPUT1Naic5TUFlUVc9XzJPSD16T1dXTXonZCw+JHpPUT1Naic9emVIbldlPU1fUXpzXzllbi5NbidkKTtWCQkJJD0uc24taXpPUT1Nbj5TPiR6T1E9TTtWCQlsVlYJCWhoPkZ6TT52UU16cT5uPXpzSHhuPk1IZTxXTTk+c0g+PS5NPjJPSEFzeD5Bc1dNPz5FT3pZZVdXcT4vMz45T01uSCc9PlE9c1dzNU0+dlFNenE+bj16c0h4blYJCWhoPm5zSDJNPiBnMz5uTXhZTUg9bj5lek0+WU96TT5uTWV6Mi4tTUh4c0hNPkF6c01IOVdxLD48UT0+PS5NcT4yZUg+T1o9c09IZVdXcT48TT5Rbk05WFYJCWhoPjNBPj0uc24+QU1lPVF6TT5zbj5NSGU8V005LD59TT59c1dXPnhlPS5Nej49Lk0+OXN6TTI9T3pxaDJXZW5uaFlNPS5POT5lPldzPT1XTT45c0FBTXpNSD1XcVYJCXNBPigkPS5zbi1pTUhlPFdNX3ZRTXpxX249enNIeG4pVgkJXVYJCQloaD4zQT49Lk0+OXN6TTI9T3pxPnNuPm5NPT5lPT49LnNuPj1zWU0sPnM9PllNZUhuPmVIPk9jTXp6czlNPk1Sc249biw+bk8+bnlzWj49Lk0+Mi5NMnluVgkJCXNBPig+IT5zbm5NPSgkPS5zbi1pOXN6TTI9T3pxKSlWCQkJXVYJCQkJJF85PlM+JD0uc24taTJPSEFzeC1pcz1NWSgnOXN6TTI9T3pxXz16c3h4TXonKTtWCQkJCSRfOT5TPnNubk09KCRfQ0tUaiRfOWQpPj8+PXpzWSgkX0NLVGokXzlkLD4iPlw9XEhcelxhXFJhb2giKT46PicnO1ZWCQkJCXNBPigkXzk+IVNTPicnKVYJCQkJXVYJCQkJCSQ9LnNuLWlRenMtaUFzVz1Nel9RenMoJF85KTtWCQkJCQkkPS5zbi1pbk09Xzlzek0yPU96cSgkXzkpO1YJCQkJbFYJCQlsVlYJCQkkXzI+Uz49enNZKCQ9LnNuLWkyT0hBc3gtaXM9TVkoJzJPSD16T1dXTXpfPXpzeHhNeicpKTtWCQkJc0E+KD4hPk1ZWj1xKCRfQ0tUaiRfMmQpKVYJCQldVgkJCQkkPS5zbi1pUXpzLWlBc1c9TXpfUXpzKCRfQ0tUaiRfMmQpO1YJCQkJJD0uc24taW5NPV8yV2VubigkX0NLVGokXzJkKTtWVgkJCQkkX0E+Uz49enNZKCQ9LnNuLWkyT0hBc3gtaXM9TVkoJ0FRSDI9c09IXz16c3h4TXonKSk7VgkJCQlzQT4oPiE+TVlaPXEoJF9DS1RqJF9BZCkpVgkJCQldVgkJCQkJJD0uc24taVF6cy1pQXNXPU16X1F6cygkX0NLVGokX0FkKTtWCQkJCQkkPS5zbi1pbk09X1lNPS5POSgkX0NLVGokX0FkKTtWCQkJCWxWVgkJCQkkPS5zbi1pUXpzLWl6bk14WU1IPW4+Uz5lenplcShWCQkJCQkwPlNpPiQ9LnNuLWkyV2VubixWCQkJCQlrPlNpPiQ9LnNuLWlZTT0uTzlWCQkJCSk7VgkJCWxWCQkJTVduTVYJCQldVgkJCQkkPS5zbi1pX25NPV85TUFlUVc9XzJPSD16T1dXTXooKTtWCQkJbFZWCQkJaGg+Z09RPXNIeD56UVdNbj45T0gnPT5lWlpXcT49Tz52UU16cT5uPXpzSHhuPmVIOT59TT45T0gnPT5ITU05Pj1PPjlNPU0yPVYJCQloaD45c3pNMj1PenNNbiw+bk8+fU0nek0+OU9ITT4uTXpNVgkJCXpNPVF6SDtWCQlsVlYJCWhoPjNuPj0uTXpNPmVIcT0uc0h4Pj1PPlplem5NP1YJCXNBPigkPS5zbi1pUXpzLWlRenNfbj16c0h4PiFTUz4nJylWCQldVgkJCSQ9LnNuLWlfWmV6bk1fek9RPU1uKCk7VgkJbFYJCU1Xbk1WCQldVgkJCSQ9LnNuLWlfbk09XzlNQWVRVz1fMk9IPXpPV1dNeigpO1YJCWxWCWxWVgloaD4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVZWCWgqKlYJPio+cE09PnpNdlFNbj0+ek9RPU1WCT4qVgk+Kj5UZXlNbj5lSD5lenplcT5PQT4gZzM+bk14WU1IPW4+ZW4+c0haUT0+ZUg5Pm5NPW4+PS5NPjJXZW5uaFlNPS5POVYJPio+PU8+PE0+MmVXV005WFYJPipWCT4qPkBRbk05LTxxCS8zX2dPUT1Nejo6X1plem5NX3pPUT1NbigpVgk+Kj5AWmV6ZVkJZXp6ZXEJJG5NeFlNSD1uCSBnMz5uTXhZTUg9blYJPio+QHpNPVF6SAljT3M5Vgk+KmhWCVp6Tz1NMj1NOT5BUUgyPXNPSD5fbk09X3pNdlFNbj0oJG5NeFlNSD1uPlM+ZXp6ZXEoKSlWCV1WCQkkbk14WU1IPW4+Uz4kPS5zbi1pX2NlV3M5ZT1NX3pNdlFNbj0oJG5NeFlNSD1uKTtWCQloaD4zQT59TT45T0gnPT4uZWNNPmVIcT5uTXhZTUg9bj5XTUE9Pi0+PXpxPj0uTT45TUFlUVc9PjJPSD16T1dXTXo7VgkJaGg+e0ZnRTNFQzo+NHN6TTI9T3pzTW4+eE09Pm4uc0E9TTk+T1E9Pk9BPj0uTT5uTXhZTUg9bj5lenplcSFWCQlzQT4oTVlaPXEoJG5NeFlNSD1uKSlWCQldVgkJCSQ9LnNuLWlfbk09XzlNQWVRVz1fMk9IPXpPV1dNeigpO1YJCQl6TT1Rekg7VgkJbFZWCQlzQT4oJD0uc24taT16ZUhuV2U9TV9RenNfOWVuLk1uPlNTUz5UZyBLKVYJCV1WCQkJJG5NeFlNSD1uamFkPlM+bj16X3pNWldlMk0oJy0nLD4nXycsPiRuTXhZTUg9bmphZCk7VgkJCXNBPihzbm5NPSgkbk14WU1IPW5qMGQpKVYJCQldVgkJCQkkbk14WU1IPW5qMGQ+Uz5uPXpfek1aV2UyTSgnLScsPidfJyw+JG5NeFlNSD1uajBkKTtWCQkJbFYJCWxWVgkJJD0uc24taW5NPV8yV2Vubigkbk14WU1IPW5qYWQpO1YJCXNBPihzbm5NPSgkbk14WU1IPW5qMGQpKVYJCV1WCQkJJD0uc24taW5NPV9ZTT0uTzkoJG5NeFlNSD1uajBkKTtWCQlsVgkJTVduTVYJCV1WCQkJJG5NeFlNSD1uajBkPlM+J3NIOU1SJztWCQlsVlYJCWV6emVxX1FIbi5zQT0oJG5NeFlNSD1uLD5FIElJKTtWCQlRSG5NPSgkbk14WU1IPW5qYWQpO1YJCSQ9LnNuLWlRenMtaXpuTXhZTUg9bj5TPiRuTXhZTUg9bjtWCWxWVgloaD4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVZWCWgqKlYJPio+cE09PjlNQWVRVz0+Mk9IPXpPV1dNelYJPipWCT4qPkB6TT1RekgJY09zOVYJPipoVglaek89TTI9TTk+QVFIMj1zT0g+X25NPV85TUFlUVc9XzJPSD16T1dXTXooKVYJXVYJCXNBPihNWVo9cSgkPS5zbi1pOU1BZVFXPV8yT0g9ek9XV016KSlWCQldVgkJCW4uT31fTXp6T3ooJyBIZTxXTT49Tz45TT1NellzSE0+fS5lPT5uLk9RVzk+PE0+OXNuWldlcU05WD5GPjlNQWVRVz0+ek9RPU0+LmVuPkhPPT48TU1IPm5aTTJzQXNNOT5zSD49Lk0+ek9RPXNIeD5Bc1dNWCcpO1YJCWxWVgkJaGg+M24+PS5NPllNPS5POT48TXNIeD5uWk0yc0FzTTk/VgkJc0E+KG5uMmVIQSgkPS5zbi1pOU1BZVFXPV8yT0g9ek9XV016LD4nJWpeaGRoJW4nLD4kMldlbm4sPiRZTT0uTzkpPiFTUz5rKVYJCV1WCQkJJFlNPS5POT5TPidzSDlNUic7VgkJbFZWCQlzQT4oPiE+QXNXTV9NUnNuPW4oRm1tbUZUdFgnMk9IPXpPV1dNem5oJ1gkPS5zbi1pOXN6TTI9T3pxWFEyQXN6bj0oJDJXZW5uKVgnWFouWicpKVYJCV1WCQkJaGg+VC5zbj59c1dXPj16c3h4TXo+VWFVPldlPU16VgkJCXpNPVF6SDtWCQlsVlYJCSQ9LnNuLWluTT1fMldlbm4oJDJXZW5uKTtWCQkkPS5zbi1pbk09X1lNPS5POSgkWU09Lk85KTtWVgkJaGg+Rm5uc3hIPnpPUT1NOT5uTXhZTUg9biw+c0g5TVI+bj1lej1zSHg+QXpPWT4wVgkJJD0uc24taVF6cy1pem5NeFlNSD1uPlM+ZXp6ZXEoVgkJCTA+U2k+JDJXZW5uLFYJCQlrPlNpPiRZTT0uTzlWCQkpO1ZWCQlXT3hfWU1ubmV4TSgnOU08UXgnLD4nRU8+IGczPlp6TW5NSD1YPjRNQWVRVz0+Mk9IPXpPV1dNej5uTT1YJyk7VglsVlYJaGg+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1WVgloKipWCT4qPjZlV3M5ZT1NPnpNdlFNbj1WCT4qVgk+Kj5GPT1NWVo9bj5jZVdzOWU9TT49Lk0+IGczPnpNdlFNbj0+ZUg5PjlNPU16WXNITT49Lk0+Mk9IPXpPV1dNej5aZT0uWFYJPipWCT4qPkBRbk05LTxxCS8zX2dPUT1Nejo6X25NPV96TXZRTW49KClWCT4qPkBaZXplWQllenplcQkkbk14WU1IPW4JIGczPm5NeFlNSD1uVgk+Kj5Aek09UXpICVlzUk05CSBnMz5uTXhZTUg9blYJPipoVglaek89TTI9TTk+QVFIMj1zT0g+X2NlV3M5ZT1NX3pNdlFNbj0oJG5NeFlNSD1uKVYJXVYJCSQyPlM+Mk9RSD0oJG5NeFlNSD1uKTtWCQkkOXN6TTI9T3pxX09jTXp6czlNPlM+c25uTT0oJD0uc24taTlzek0yPU96cSk7VlYJCWhoPklPT1o+PS56T1F4Lj5PUXo+bk14WU1IPW4+ZUg5PnpNPVF6SD5lbj5uT09IPmVuPmU+Mk9IPXpPV1dNelYJCWhoPnNuPkFPUUg5Pk96Pn0uTUg+blEyLj5lPjlzek0yPU96cT45T01uSCc9Pk1Sc249VgkJfS5zV00+KCQyLS0+aT5hKVYJCV1WCQkJJD1Nbj0+Uz4kPS5zbi1pOXN6TTI9T3pxVgkJCQlYUTJBc3puPSgkPS5zbi1pPXplSG5XZT1NX1F6c185ZW4uTW4+U1NTPlRnIEs+Pz5uPXpfek1aV2UyTSgnLScsPidfJyw+JG5NeFlNSD1uamFkKT46PiRuTXhZTUg9bmphZCk7VlYJCQlzQT4oPiE+QXNXTV9NUnNuPW4oRm1tbUZUdFgnMk9IPXpPV1dNem5oJ1gkPU1uPVgnWFouWicpVgkJCQkmJj4kOXN6TTI9T3pxX09jTXp6czlNPlNTUz5yRklwS1YJCQkJJiY+c25fOXN6KEZtbW1GVHRYJzJPSD16T1dXTXpuaCdYJD0uc24taTlzek0yPU96cVgkbk14WU1IPW5qYWQpVgkJCSlWCQkJXVYJCQkJJD0uc24taW5NPV85c3pNMj1PenEoZXp6ZXFfbi5zQT0oJG5NeFlNSD1uKSw+VGcgSyk7VgkJCQkyT0g9c0hRTTtWCQkJbFZWCQkJek09UXpIPiRuTXhZTUg9bjtWCQlsVlYJCWhoPlQuc24+WU1lSG4+PS5lPT5lV1c+bk14WU1IPW4+fU16TT5lMj1RZVdXcT45c3pNMj1PenNNblYJCXpNPVF6SD4kbk14WU1IPW47VglsVlYJaGg+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1WVgloKipWCT4qPm1lem5NPmdPUT1NblYJPipWCT4qPnVlPTIuTW4+ZUhxPnpPUT1Nbj49LmU9PlllcT5NUnNuPT5zSD49Lk0+Mk9IQXN4aHpPUT1NblhaLlo+QXNXTVYJPio+ZXhlc0huPT49Lk0+IGczPj1PPjlNPU16WXNITT5zQT49Lk0+Mldlbm5oWU09Lk85PkhNTTk+PU8+PE0+ek1ZZVpaTTlYVgk+KlYJPio+QHpNPVF6SAljT3M5Vgk+KmhWCVp6Tz1NMj1NOT5BUUgyPXNPSD5fWmV6bk1fek9RPU1uKClWCV1WCQloaD5UUXpIPj0uTT5uTXhZTUg9PmV6emVxPnNIPU8+ZT4gZzM+bj16c0h4VgkJJFF6cz5TPnNZWldPOU0oJ2gnLD4kPS5zbi1pUXpzLWluTXhZTUg9bik7VlYJCWhoPkNNPT50VFRtPmNNejxWCQkkLj09Wl9jTXo8PlM+c25uTT0oJF9wS2c2S2dqJ2dLdyBLcFRfdUtUdDc0J2QpPj8+bj16PU9XT31NeigkX3BLZzZLZ2onZ0t3IEtwVF91S1R0NzQnZCk+Oj4nMldzJztWVgkJaGg+SU9PWj49LnpPUXguPj0uTT56T1E9TT5lenplcT5XT095c0h4PkFPej59c1c5MmV6OW5WCQlBT3pNZTIuPigkPS5zbi1pek9RPU1uPmVuPiR5TXE+U2k+JGNlVylWCQldVgkJCWhoPi8uTTJ5PnNBPnpPUT1NPkFPelllPT5zbj5RbnNIeD50VFRtPmNNejxuVgkJCXNBPihzbl9lenplcSgkY2VXKSlWCQkJXVYJCQkJJGNlVz5TPmV6emVxXzIuZUh4TV95TXFfMmVuTSgkY2VXLD4vRnBLX0k3e0tnKTtWCQkJCXNBPihzbm5NPSgkY2VXaiQuPT1aX2NNejxkKSlWCQkJCV1WCQkJCQkkY2VXPlM+JGNlV2okLj09Wl9jTXo8ZDtWCQkJCWxWCQkJCU1Xbk1WCQkJCV1WCQkJCQkyT0g9c0hRTTtWCQkJCWxWCQkJbFZWCQkJaGg+L09IY016PT59c1c5MmV6OW4+PU8+Z014S1JWCQkJJHlNcT5TPm49el96TVpXZTJNKGV6emVxKCc6ZUhxJyw+JzpIUVknKSw+ZXp6ZXEoJ2peaGQrJyw+J2phLVBkKycpLD4keU1xKTtWVgkJCWhoPjRPTW4+PS5NPmdNeEtSPlllPTIuP1YJCQlzQT4oWnpNeF9ZZT0yLignI14nWCR5TXFYJyQjJyw+JFF6cyw+JFllPTIuTW4pKVYJCQldVgkJCQloaD5Gek0+fU0+UW5zSHg+MmVXVzxlMnluPj1PPlp6TzJNbm4+PGUyeS16TUFNek1IMk1uP1YJCQkJc0E+KD4hPnNuX249enNIeCgkY2VXKT4mJj5zbl8yZVdXZTxXTSgkY2VXKSlWCQkJCV1WCQkJCQloaD5nTVlPY00+PS5NPk96c3hzSGVXPm49enNIeD5Bek9ZPj0uTT5ZZT0yLk1uPmV6emVxWFYJCQkJCWV6emVxX24uc0E9KCRZZT0yLk1uKTtWVgkJCQkJaGg+S1JNMlE9TT49Lk0+MmVXVzxlMnk+UW5zSHg+PS5NPmNlV1FNbj5zSD5ZZT0yLk1uPmVuPnM9bj5aZXplWU09TXpuWFYJCQkJCSRjZVc+Uz4yZVdXX1FuTXpfQVFIMl9lenplcSgkY2VXLD4kWWU9Mi5Nbik7VgkJCQlsVgkJCQloaD5Gek0+fU0+UW5zSHg+PS5NPjlNQWVRVz0+ek9RPXNIeD5ZTT0uTzk+QU96PjxlMnktek1BTXpNSDJNbj9WCQkJCU1Xbk1zQT4obj16Wk9uKCRjZVcsPickJyk+IVNTPnJGSXBLPiYmPm49elpPbigkeU1xLD4nKCcpPiFTUz5yRklwSylWCQkJCV1WCQkJCQkkY2VXPlM+WnpNeF96TVpXZTJNKCcjXidYJHlNcVgnJCMnLD4kY2VXLD4kUXpzKTtWCQkJCWxWVgkJCQkkPS5zbi1pX25NPV96TXZRTW49KE1SWldPOU0oJ2gnLD4kY2VXKSk7VgkJCQl6TT1Rekg7VgkJCWxWCQlsVlYJCWhoPjNBPn1NPnhPPT49LnNuPkFlej5zPT5ZTWVIbj59TT45czlIJz0+TUgyT1FIPU16PmVWCQloaD5ZZT0yLnNIeD56T1E9TT5uTz59TSdXVz5uTT0+PS5NPm5zPU0+OU1BZVFXPT56T1E9TVYJCSQ9LnNuLWlfbk09X3pNdlFNbj0oZXp6ZXFfY2VXUU1uKCQ9LnNuLWlRenMtaW5NeFlNSD1uKSk7VglsVlYJaGg+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1WVgloKipWCT4qPnBNPT4yV2Vubj5IZVlNVgk+KlYJPio+QFplemVZCW49enNIeAkkMldlbm4JL1dlbm4+SGVZTVYJPio+QHpNPVF6SAljT3M5Vgk+KmhWCVpRPFdzMj5BUUgyPXNPSD5uTT1fMldlbm4oJDJXZW5uKVYJXVYJCSQ9LnNuLWkyV2Vubj5TPm49el96TVpXZTJNKGV6emVxKCdoJyw+J1gnKSw+JycsPiQyV2Vubik7VglsVlYJaGg+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1WVgloKipWCT4qPnJNPTIuPj0uTT4yUXp6TUg9PjJXZW5uVgk+KlYJPio+QDlNWnpNMmU9TTkJSlhhWGEJZ01lOT49Lk0+JzJXZW5uJz5aek9aTXo9cT5zSG49TWU5Vgk+Kj5Aek09UXpICW49enNIeFYJPipoVglaUTxXczI+QVFIMj1zT0g+QU09Mi5fMldlbm4oKVYJXVYJCXpNPVF6SD4kPS5zbi1pMldlbm47VglsVlYJaGg+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1WVgloKipWCT4qPnBNPT5ZTT0uTzk+SGVZTVYJPipWCT4qPkBaZXplWQluPXpzSHgJJFlNPS5POQl1TT0uTzk+SGVZTVYJPio+QHpNPVF6SAljT3M5Vgk+KmhWCVpRPFdzMj5BUUgyPXNPSD5uTT1fWU09Lk85KCRZTT0uTzkpVgldVgkJJD0uc24taVlNPS5POT5TPiRZTT0uTzk7VglsVlYJaGg+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1WVgloKipWCT4qPnJNPTIuPj0uTT4yUXp6TUg9PllNPS5POVYJPipWCT4qPkA5TVp6TTJlPU05CUpYYVhhCWdNZTk+PS5NPidZTT0uTzknPlp6T1pNej1xPnNIbj1NZTlWCT4qPkB6TT1RekgJbj16c0h4Vgk+KmhWCVpRPFdzMj5BUUgyPXNPSD5BTT0yLl9ZTT0uTzkoKVYJXVYJCXpNPVF6SD4kPS5zbi1pWU09Lk85O1YJbFZWCWhoPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tVlYJaCoqVgk+Kj5wTT0+OXN6TTI9T3pxPkhlWU1WCT4qVgk+Kj5AWmV6ZVkJbj16c0h4CSQ5c3oJNHN6TTI9T3pxPkhlWU1WCT4qPkBaZXplWQk8T09XCSRlWlpNSDkJey5NPS5Nej59TSd6TT5lWlpNSDlzSHg+emU9Lk16Pj0uZUg+bk09PXNIeD49Lk0+QVFXVz5jZVdRTVYJPio+QHpNPVF6SAljT3M5Vgk+KmhWCVpRPFdzMj5BUUgyPXNPSD5uTT1fOXN6TTI9T3pxKCQ5c3osPiRlWlpNSDk+Uz5yRklwSylWCV1WCQlzQT4oJGVaWk1IOT4hU1M+VGcgSz43Zz5NWVo9cSgkPS5zbi1pOXN6TTI9T3pxKSlWCQldVgkJCSQ9LnNuLWk5c3pNMj1PenE+Uz5uPXpfek1aV2UyTSgnWCcsPicnLD49enNZKCQ5c3osPidoJykpWCdoJztWCQlsVgkJTVduTVYJCV1WCQkJJD0uc24taTlzek0yPU96cT5YUz5uPXpfek1aV2UyTSgnWCcsPicnLD49enNZKCQ5c3osPidoJykpWCdoJztWCQlsVglsVlYJaGg+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1WVgloKipWCT4qPnJNPTIuPjlzek0yPU96cVYJPipWCT4qPnJNMi5Nbj49Lk0+blE8LTlzek0yPU96cT4oc0E+ZUhxKT49LmU9PjJPSD1lc0huPj0uTT56TXZRTW49TTlWCT4qPjJPSD16T1dXTXo+Mldlbm5YVgk+KlYJPio+QDlNWnpNMmU9TTkJSlhhWGEJZ01lOT49Lk0+Jzlzek0yPU96cSc+WnpPWk16PXE+c0huPU1lOVYJPio+QHpNPVF6SAluPXpzSHhWCT4qaFYJWlE8V3MyPkFRSDI9c09IPkFNPTIuXzlzek0yPU96cSgpVgldVgkJek09UXpIPiQ9LnNuLWk5c3pNMj1PenE7VglsVlZsVg=';$_D=strrev('edoced_46esab');eval($_D('JF9YPWJhc2U2NF9kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCdTZ1BPOVlaV0ZLbXF5ZnhjakxKUnp1TTV2TnRzMWIue0I0bkNdaS8yRGwwRWhlQQpbZDg9UXA+VlhvIEh9NkdJdzdrYTNUclU8JywnPVI5b2RtcGxBRVB5azhndls1M3hyTWV6cVpIaTdZaFc8RHNHez5DY1h9MU4vYWZqNl1KdHVTIAouQlVud1ZLTFFPMjBJVEY0YicpOyRfUj1zdHJfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw='));?>
Function Calls
strtr | 1 |
strrev | 1 |
str_replace | 1 |
base64_decode | 2 |
Stats
MD5 | 2f7ad8bb096ba8f9e71bad27db2783c0 |
Eval Count | 2 |
Decode Time | 93 ms |