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(str_rot13(strrev(gzuncompress(base64_decode(gzinflate(base64_decode("DZY1lsVAEAMP5MBM..
Decoded Output download
b'
class BalikobotPackage
{
/** @var int Order ID in PrestaShop. */
public $id_order;
/** @var string Package ID in Balikobot API. */
public $package_id;
/** @var int Carrier ID in PrestaShop. */
public $carrier_id;
/** @var BalikobotCarrier Corresponding carrier in Balikobot. */
public $carrier;
/** @var string Package Type for selected carrier. */
public $carrier_package_type;
/** @var int Supplier ID in PrestaShop. */
public $supplier;
/** @var string Link to PDF file with package\'s label. */
public $label_url;
/** @var bool True if package was ordered at the carrier. */
public $sent;
/** @var int Number of package in multi-package order. For single-package order this is equal to 1. */
public $order_number;
/** @var int Total count of packages in multi-package order. */
public $order_count;
/** @var int 0 = no VAT, 1 = with VAT, 2 = custom price */
public $price_type;
/** @var float Custom price for the package. */
public $custom_price;
/** @var int ID of the responsible employee. */
public $id_employee;
protected $tableName;
public function __construct($id_order = null, $order_number = 1)
{
$this->tableName = _DB_PREFIX_ . \'monster_balikobot_packages\';
$this->id_order = $id_order;
$result = Db::getInstance()->getRow(\'SELECT * FROM \' . $this->tableName . \' WHERE order_number = \' . $order_number . \' AND id_order=\' . $id_order);
if (is_array($result))
{
$this->package_id = $result[\'package_id\'];
$this->carrier_id = $result[\'carrier_id\'];
$this->carrier = new BalikobotCarrier($result[\'carrier\']);
$this->carrier_package_type = $result[\'carrier_package_type\'];
$this->label_text = $result[\'label_text\'];
$this->supplier = $result[\'supplier\'];
$this->label_url = $result[\'label_url\'];
$this->sent = $result[\'sent\'];
$this->order_number = $result[\'order_number\'];
$this->order_count = $result[\'order_count\'];
$this->price_type = $result[\'price_type\'];
$this->custom_price = $result[\'custom_price\'];
$this->id_employee = $result[\'id_employee\'];
}
else
{
$this->initValues();
}
}
/**
* Set empty values to class attributes.
*/
protected function initValues()
{
global $cookie;
$this->package_id = \'\';
$this->carrier_id = \'\';
$this->carrier = null;
$this->carrier_package_type = null;
$this->label_text = \'\';
$this->supplier = self::getPackageSupplier($this->id_order);
$this->label_url = \'\';
$this->sent = false;
$this->order_number = 1;
$this->order_count = 1;
$this->price_type = 1;
$this->custom_price = null;
$this->id_employee = $cookie->id_employee?$cookie->id_employee:\'null\';
}
/**
* Returns URL to package\'s label, optionally with selected position.
* If package is not in API, this method adds it there.
*
* @param int $position
* @return string
* @throws BalikobotAPIException
*/
public function getLabelUrl($position = null, $orderCount = 1, $orderToPrint = \'all\')
{
if (!$this->label_url)
{
$this->registerPackage($orderCount);
}
if ($this->order_count == 1 || $orderToPrint != \'all\') { // print only one label
$suffix = \'\';
if ($position != null && $position != \'\') {
$suffix = \'?p=\' . $position;
}
if ($this->order_count == 1 || $orderToPrint == 1) {
return $this->label_url . $suffix;
}
else {
$packageToPrint = new BalikobotPackage($this->id_order, $orderToPrint);
return $packageToPrint->label_url . $suffix;
}
}
else // print multiple labels
{
$packagesId = [];
for ($i = 1; $i <= $this->order_count; $i++)
{
$package = new BalikobotPackage($this->id_order, $i);
$packagesId[] = $package->package_id;
}
$response = BalikobotAPI::labels($packagesId, $this->getCarrier()->code);
if (isset($response[\'labels_url\']))
{
return $response[\'labels_url\'];
}
else
{
throw new BalikobotAPIException($packagesId);
return \'\';
}
}
}
/**
* Returns package\'s ID in Balikobot API.
* If package is not in API, this method adds it there.
*
* @return string
* @throws BalikobotAPIException
*/
public function getPackageId()
{
if (!$this->package_id)
{
$this->registerPackage();
}
return $this->package_id;
}
/**
* Saves package into database.
*/
public function save()
{
global $cookie;
if($this->carrier->code == \'toptrans\' && is_null($this->carrier_package_type)){
$this->carrier_package_type = Configuration::get(\'MONSTER_BALIKOBOT_CARRIER_CUSTOM_TOPTRANS\');
}
if($this->carrier->code == \'gwcz\' && is_null($this->carrier_package_type)){
$this->carrier_package_type = Configuration::get(\'MONSTER_BALIKOBOT_CARRIER_CUSTOM_GWCZ\');
}
$insertQuery = "INSERT INTO " . _DB_PREFIX_ . "monster_balikobot_packages (id_order, package_id, carrier_id, carrier, carrier_package_type, label_text, supplier, label_url, sent, order_number, order_count, price_type, custom_price, id_employee) VALUES (" .
$this->id_order . ", \'" . $this->package_id .
"\', \'" . $this->carrier_id . "\', " . $this->carrier->id_carrier . ", \'" . $this->carrier_package_type . "\', \'" . $this->label_text . "\', " . $this->supplier . ", \'" .
$this->label_url . "\', " . ($this->sent ? \'1\' : \'0\') . ", " . $this->order_number . ", " . $this->order_count . ", " . $this->price_type . ", " . $this->custom_price . ", " . $this->id_employee . ")";
$queryPassed = Db::getInstance()->execute($insertQuery);
if (!$queryPassed && Configuration::get(\'MONSTER_BALIKOBOT_DEBUG\')) {
"INSERT INTO " . _DB_PREFIX_ . "monster_balikobot_packages (id_order, package_id, carrier_id, carrier, carrier_package_type, label_text, supplier, label_url, sent, order_number, order_count, price_type, custom_price, id_employee) VALUES (" .
$this->id_order . ", \'" . $this->package_id .
"\', \'" . $this->carrier_id . "\', " . $this->carrier->id_carrier . ", \'" . $this->carrier_package_type . "\', \'" . $this->label_text . "\', " . $this->supplier . ", \'" .
$this->label_url . "\', " . ($this->sent ? \'1\' : \'0\') . ", " . $this->order_number . ", " . $this->order_count . ", " . $this->price_type . ", " . $this->custom_price . ", " . $this->id_employee . ")";
$logger = new FileLogger(0);
if(_PS_VERSION_ > 1.6){
$logger->setFilename(_PS_ROOT_DIR_ . "/var/logs/mm_balikobot_query.log");
}else{
$logger->setFilename(_PS_ROOT_DIR_ . "/log/mm_balikobot_query.log");
}
$logger->logDebug("FAILED QUERY: $insertQuery");
$logger->logDebug("------------------------------");
}
if ($this->order_number == 1) {
$order = new Order($this->id_order);
$order->shipping_number = $this->carrier_id;
$order->update();
$order_carrier = new OrderCarrier($order->getIdOrderCarrier());
$order_carrier->tracking_number = $this->carrier_id;
if ($order_carrier->update() && Configuration::get(\'MONSTER_BALIKOBOT_TRACKING_MAIL\')) {
$customer = new Customer((int)$order->id_customer);
$carrier = new Carrier((int)$order->id_carrier, $order->id_lang);
$templateVars = array(
\'{followup}\' => str_replace(\'@\', $order->shipping_number, $carrier->url),
\'{firstname}\' => $customer->firstname,
\'{lastname}\' => $customer->lastname,
\'{id_order}\' => $order->id,
\'{shipping_number}\' => $order->shipping_number,
\'{order_name}\' => $order->getUniqReference()
);
if (@Mail::Send((int)$order->id_lang, \'in_transit\', Mail::l(\'Package in transit\', (int)$order->id_lang), $templateVars,
$customer->email, $customer->firstname.\' \'.$customer->lastname, null, null, null, null,
_PS_MAIL_DIR_, true, (int)$order->id_shop)) {
} else {
$this->warnings[] = \'An error occurred while sending an email to the customer.\';
}
}
$setState = Configuration::get(\'MONSTER_BALIKOBOT_NEW_STATE_1\');
if($setState && $setState > 0) {
if($order->current_state != $setState){
$history = new OrderHistory();
$carrier = new Carrier($order->id_carrier, $order->id_lang);
$templateVars = array();
if ($history->id_order_state == Configuration::get(\'PS_OS_SHIPPING\') && $order->shipping_number) {
$templateVars = array(\'{followup}\' => str_replace(\'@\', $order->shipping_number, $carrier->url));
}
$history->id_employee = (int)$cookie->id_employee;;
$history->id_order = (int)$this->id_order;
$history->changeIdO'b'rderState((int)$setState, $order);
$history->addWithEmail(true, $templateVars);
}
}
}
}
/**
* Add package to Balikobot API and to the database.
* Throws exception if an error occurs during adding package to Balikobot API.
*
* @param int $orderCount Total number of packages in order.
* @throws BalikobotAPIException
*/
public function registerPackage($orderCount = 1)
{
$this->order_count = $orderCount;
if ($this->getCarrier()->code == \'toptrans\') {
//toptrans posl balky v jednom callu
$this->pieces_count = $orderCount;
$this->order_count = 1;
}
for ($i = 1; $i <= $this->order_count; $i++) {
$this->order_number = $i;
$response = $this->addPackageToAPI();
$packagesData = $response[\'packages\'];
if($packagesData){
foreach($packagesData as $packageData){
if (!isset($packageData[\'status\']) || !in_array($packageData[\'status\'], [200, 208])) {
$messages = [\'\'];
$messages[] = \'Chyba pi pidvn balku do Balkobotu (ID objednvky: \' . $this->id_order . \'):\';
if($packageData[\'errors\']) {
foreach($packageData[\'errors\'] as $error){
$messages[] = $error[\'attribute\']." - ".$error[\'message\'];
}
} else {
$messages[] = "Neznm chyba";
$messages[] = json_encode($response[0][\'errors\'], JSON_UNESCAPED_UNICODE);
}
throw new BalikobotAPIException($messages);
}
$this->package_id = $packageData[\'package_id\'];
$this->carrier_id = $packageData[\'carrier_id\'];
$this->label_url = $packageData[\'label_url\'];
$this->sent = 0;
$this->carrier = $this->getCarrier();
$this->save();
}
} else {
$messages = [\'\'];
$messages[] = \'Chyba pi pidvn balku do Balkobotu (ID objednvky: \' . $this->id_order . \'):\';
$messages[] = $response[\'status_message\'];
if($response[\'status\'] == 404) {
$messages[] = \'Zkontrolujte namapovn dopravce v konfiguraci modulu.\';
}
throw new BalikobotAPIException($messages);
}
}
}
/**
* Returns track information about package.
* Result array contains current package status (\'status\') and array of status changes (\'events\').
*
* @return array
*/
public function trackPackage()
{
return BalikobotAPI::trackStatus($this->carrier_id, $this->getCarrier()->code);
/* $response = BalikobotAPI::track($this->carrier_id, $this->getCarrier()->code);
var_dump($response);
die();
*/
}
/**
* Checks package information.
*
* @return array
*/
public function checkPackage()
{
return BalikobotAPI::check(
$this->prepareAddData(),
$this->getCarrier()->code,
self::getSupplierApiCodes($this->supplier)
);
}
/**
* Adds package into Balikobot API.
*
* @return array
*/
public function addPackageToAPI()
{
return BalikobotAPI::add(
$this->prepareAddData(),
$this->getCarrier()->code,
self::getSupplierApiCodes($this->supplier)
);
}
/**
* Returns array with data to be sent to Balikobot API through ADD method.
*
* @return array
*/
protected function prepareAddData()
{
$data = [];
$order = new Order($this->id_order);
$customer = new Customer($order->id_customer);
$address = new Address($order->id_address_delivery);
$country = new Country($address->id_country);
$currency = new Currency($order->id_currency);
$carrierCode = $this->getCarrier()->code;
$serviceType = $this->getCarrier()->service;
$data[\'note\'] = $this->label_text;
// required fields for all carriers:
if (Configuration::get(\'MONSTER_BALIKOBOT_ID_ORDER_PARAM\') == \'reference\') {
$data[\'eid\'] = $order->reference;
$data[\'vs\'] = $order->reference;
}
else {
$data[\'eid\'] = $this->id_order;
$data[\'vs\'] = $this->id_order;
}
switch((int)$this->price_type){
case 0:{
$data[\'price\'] = $order->total_paid_tax_excl;
break;
}
case 1:{
$data[\'price\'] = $order->total_paid;
break;
}
case 2:{
$data[\'price\'] = $this->custom_price;
break;
}
}
$data[\'rec_name\'] = $address->firstname . \' \' . $address->lastname;
$data[\'rec_street\'] = $address->address1;
$data[\'rec_city\'] = $address->city;
$data[\'rec_zip\'] = str_replace(\' \', \'\', $address->postcode);
$data[\'rec_country\'] = $country->iso_code;
$data[\'rec_email\'] = $customer->email;
$data[\'rec_phone\'] = (strlen($address->phone_mobile) > 1) ? $address->phone_mobile : $address->phone;
if ($this->order_count > 1) {
$data[\'order_number\'] = $this->order_number;
}
$weight = self::getWeight($this->id_order);
$data[\'weight\'] = (($weight > 0) ? $weight : $order->getTotalWeight()) / ($this->order_count > 0 ? $this->order_count : 1);
if (!empty($address->company)) {
$data[\'rec_firm\'] = $address->company;
}
if (!empty($serviceType))
{
$data[\'service_type\'] = $serviceType;
}
if (($order->module == Configuration::get(\'MONSTER_BALIKOBOT_COD_MODULE\') || $order->module == Configuration::get(\'MONSTER_BALIKOBOT_COD_MODULE_2\')) && $this->order_number == 1)
{
switch((int)$this->price_type){
case 0:{
$data[\'cod_price\'] = $order->total_paid_tax_excl;
break;
}
case 1:{
$data[\'cod_price\'] = $order->total_paid;
break;
}
case 2:{
$data[\'cod_price\'] = $this->custom_price;
break;
}
}
$data[\'cod_currency\'] = $currency->iso_code;
}
// ESK POTA
if ($carrierCode == \'cp\' && $serviceType == \'NB\') {
if (Module::isInstalled(\'monster_cpost\')){
$id_branch = Db::getInstance()->getValue(\'SELECT zip FROM \'._DB_PREFIX_.\'monster_cpost_expedition WHERE id_order=\' . $this->id_order);
if($id_branch) {
$data[\'rec_zip\'] = $id_branch;
}
} else if (Module::isInstalled(\'shaim_balikovna\')) {
$id_branch = Db::getInstance()->getValue(
\'SELECT psc FROM \'._DB_PREFIX_.\'shaim_balikovna_data JOIN \'._DB_PREFIX_.\'orders USING(id_cart) WHERE id_order=\' . $this->id_order
);
if($id_branch) {
$data[\'rec_zip\'] = $id_branch;
}
} else if (Module::isInstalled(\'add_ceskaposta_carriers\')) {
$id_branch = Db::getInstance()->getValue(
\'SELECT psc FROM \'._DB_PREFIX_.\'add_cp_all_orders o
JOIN \'._DB_PREFIX_.\'add_cp_all_branches_B b ON o.id_branch = b.id
WHERE id_order=\' . $this->id_order
);
if($id_branch) {
$data[\'rec_zip\'] = $id_branch;
}
}
}
else if ($carrierCode == \'cp\' && $serviceType == \'NP\'){
if (Module::isInstalled(\'monster_cpost\')) {
$id_branch = Db::getInstance()->getValue(\'SELECT zip FROM \'._DB_PREFIX_.\'monster_cpost_expedition WHERE id_order=\' . $this->id_order);
if($id_branch) {
$data[\'rec_zip\'] = $id_branch;
}
} else if (Module::isInstalled(\'add_ceskaposta_carriers\')) {
$id_branch = Db::getInstance()->getValue(
\'SELECT psc FROM \'._DB_PREFIX_.\'add_cp_all_orders o
JOIN \'._DB_PREFIX_.\'add_cp_all_branches_NP b ON o.id_branch = b.id
WHERE id_order=\' . $this->id_order
);
if($id_branch) {
$data[\'rec_zip\'] = $id_branch;
}
} else if (Module::isInstalled(\'shaim_baliknapostu\')) {
$id_branch = Db::getInstance()->getValue(\'SELECT psc FROM \'._DB_PREFIX_.\'shaim_baliknapostu_data JOIN \'._DB_PREFIX_.\'orders USING(id_cart) WHERE id_order=\' . $this->id_order);
if($id_branch) {
$data[\'rec_zip\'] = $id_branch;
}
}
}
// DPD
else if ($carrierCode == \'dpd\' && in_array($serviceType, [ 3 ])){
if(Module::isInstalled(\'dpdparcelshop\')){
$id_branch = Db::getInstance()->getValue(\'SELECT zip FROM \'._DB_PREFIX_.\'cart_parcelshop JOIN \'._DB_PREFIX_.\'orders USING(id_cart) WHERE id_order=\' . $this->id_order);
if($id_branch) {
$data[\'branch_id\'] = "CZ".$id_branch;
}
}
if(Module::isInstalled(\'shaim_dpdparcelshop\')){
$id_branch = Db::getInstance()->getValue(\'SELECT id FROM \'._DB_PREFIX_.\'shaim_dpdparcelshop_data JOIN \'._DB_PREFIX_.\'shaim_dpdparcelshop USING(id) 'b'JOIN \'._DB_PREFIX_.\'orders USING(id_cart) WHERE id_order=\' . $this->id_order);
if($id_branch) {
$data[\'branch_id\'] = "CZ".$id_branch;
}
}
}
// GEIS
else if($carrierCode == \'geis\' && in_array($serviceType, [ 4, 5, 10, 11 ])){
if(is_null($this->carrier_package_type)){
$this->carrier_package_type = Configuration::get(\'MONSTER_BALIKOBOT_CARRIER_CUSTOM_GEIS\');
}
$data[\'mu_type\'] = $this->carrier_package_type;
}
// GLS
else if ($carrierCode == \'gls\' && in_array($serviceType, [ 2 ])){
if(Module::isInstalled(\'shaim_glsparcelshop\')){
$id_branch = Db::getInstance()->getValue(\'SELECT psc FROM \'._DB_PREFIX_.\'shaim_glsparcelshop_data JOIN \'._DB_PREFIX_.\'shaim_glsparcelshop USING(id) JOIN \'._DB_PREFIX_.\'orders USING(id_cart) WHERE id_order=\' . $this->id_order);
if($id_branch) {
$data[\'branch_id\'] = "CZ".$id_branch;
}
}
}
// Gerbruder Weiss CZ
else if ($carrierCode == \'gwcz\'){
if(is_null($this->carrier_package_type)){
$this->carrier_package_type = Configuration::get(\'MONSTER_BALIKOBOT_CARRIER_CUSTOM_GWCZ\');
}
$data[\'mu_type\'] = $this->carrier_package_type;
}
// ULOENKA
else if ($carrierCode == \'ulozenka\' && in_array($serviceType, [ 1 ])){
if(Module::isInstalled(\'shaim_ulozenka\')){
$id_branch = Db::getInstance()->getValue(\'SELECT id FROM \'._DB_PREFIX_.\'shaim_ulozenka_data JOIN \'._DB_PREFIX_.\'orders USING(id_cart) WHERE id_order=\' . $this->id_order);
$id_branch = str_replace(\'ID\', \'\', $id_branch);
} elseif(Module::isInstalled(\'monster_ulozenka\')){
$id_branch = Db::getInstance()->getValue(\'SELECT id_ulozenka FROM \'._DB_PREFIX_.\'monster_ulozenka_expedition WHERE id_order=\' . $this->id_order);
} else {
try { // pvodn oficiln modul na uloenku
$id_branch = Db::getInstance()->getValue(\'SELECT id_ulozenka FROM \' . _DB_PREFIX_ . \'ulozenka WHERE id_order=\' . $this->id_order);
} catch(Exception $e) {}
}
if ($id_branch) {
$data[\'branch_id\'] = $id_branch;
}
}
else if ($carrierCode == \'ulozenka\' && in_array($serviceType, [ 5 ])){
try {
$id_branch = Db::getInstance()->getValue(\'SELECT id_ulozenka FROM \'._DB_PREFIX_.\'ulozenka WHERE id_order=\' . $this->id_order);
if($id_branch) {
$data[\'branch_id\'] = $id_branch;
}
}catch(Exception $e){}
if(!$id_branch && Module::isInstalled(\'dpdparcelshop\')){
$id_branch = Db::getInstance()->getValue(\'SELECT zip FROM \'._DB_PREFIX_.\'cart_parcelshop JOIN \'._DB_PREFIX_.\'orders USING(id_cart) WHERE id_order=\' . $this->id_order);
if($id_branch) {
$data[\'branch_id\'] = "CZ".$id_branch;
}
}
}
// PPL
else if ($carrierCode == \'ppl\' && in_array($serviceType, [ 2, 3, 4, 15, 19 ])){
if(Module::isInstalled(\'monster_ppl\')) {
$moduleData = Db::getInstance()->getRow(\'SELECT * FROM \' . _DB_PREFIX_ . \'monster_ppl_expedition WHERE id_order=\' . $this->id_order);
if ($moduleData) {
switch ($moduleData[\'id_service_type\']) {
case 2:
{//ppl private - veern doruen
$data[\'service_type\'] = 9;
$data[\'del_evening\'] = true;
break;
}
case 3:
{//ppl private - sobotn doruen
$data[\'sat_delivery\'] = true;
break;
}
case 4:
{//ppl parcel shop
$data[\'service_type\'] = 4;
$data[\'branch_id\'] = substr($moduleData[\'code\'], 2);
break;
}
}
}
}
if(in_array($serviceType, [ 15, 19 ])){
$data[\'mu_type\'] = Configuration::get(\'MONSTER_BALIKOBOT_CARRIER_CUSTOM_PPL\');
}
}
// SLOVENSKA POSTA
if ($carrierCode == \'sp\' && $serviceType == \'BNP\'){
if(Module::isInstalled(\'shaim_baliknapostu\')){
$id_branch = Db::getInstance()->getValue(\'SELECT psc FROM \'._DB_PREFIX_.\'shaim_baliknapostu_data JOIN \'._DB_PREFIX_.\'orders USING(id_cart) WHERE id_order=\' . $this->id_order);
if($id_branch) {
$data[\'rec_zip\'] = $id_branch;
}
}
}
// TOPTRANS
else if($carrierCode == \'toptrans\'){
$data[\'pieces_count_one\'] = (int)$this->pieces_count;
if(is_null($this->carrier_package_type)){
$this->carrier_package_type = Configuration::get(\'MONSTER_BALIKOBOT_CARRIER_CUSTOM_TOPTRANS\');
}
$data[\'mu_type_one\'] = $this->carrier_package_type;
if(Configuration::get(\'MONSTER_BALIKOBOT_CARRIER_CUSTOM_SERVICE_\'.$this->carrier->id_carrier)){
$data[\'comfort_service\'] = 1;
}
}
// ZSILKOVNA , 3060 - PL Packzkomat
else if ($carrierCode == \'zasilkovna\' && in_array($serviceType, [ "VMCZ" , "VMPL", "VMSK", "VMHU", "VMRO", 3060 ])){
if(Module::isInstalled(\'monster_zasilkovna\')) {
$id_branch = Db::getInstance()->getValue(\'SELECT id_zasilkovna FROM \'._DB_PREFIX_.\'monster_zasilkovna_expedition WHERE id_order=\' . $this->id_order);
}elseif(Module::isInstalled(\'shaim_zasilkovna_widget\')){
$row = Db::getInstance()->getRow(\'SELECT id, carrierPickupPointId FROM \'._DB_PREFIX_.\'shaim_zasilkovna_widget_data JOIN \'._DB_PREFIX_.\'orders USING(id_cart) WHERE id_order=\' . $this->id_order);
//carrierPickupPointId - pobocka mimo zasilkovnu v zahranici
$id_branch = $row[\'id\'] ? $row[\'id\'] : $row[\'carrierPickupPointId\'];
}else{
$id_branch = Db::getInstance()->getValue(\'SELECT id_branch FROM \'._DB_PREFIX_.\'packetery_order WHERE id_order=\' . $this->id_order);
}
if($id_branch) {
$data[\'branch_id\'] = $id_branch;
}
}
else if ($carrierCode == \'zasilkovna\' && $serviceType && $serviceType > 1){
$data[\'branch_id\'] = $serviceType; //ostatn sluby zsilkovny - pod ID virtuln poboky
}
$data[\'return_full_errors\'] = true;
return $data;
}
/**
* @return array
*/
public function dropPackageFromAPI()
{
return BalikobotAPI::drop($this->package_id, $this->carrier->code, self::getSupplierApiCodes($this->supplier));
}
/**
* @return BalikobotCarrier Package\'s carrier.
*/
public function getCarrier()
{
if (!$this->carrier)
{
$order = new Order($this->id_order);
$this->carrier = new BalikobotCarrier($order->id_carrier);
}
return $this->carrier;
}
/**
* @return int Number of possible positions of label for the package.
*/
public function getLabelPositionCount()
{
$carrierCode = $this->getCarrier()->code;
return BalikobotCarrier::getLabelPositionCount($carrierCode);
}
public static function getWeight($id_order)
{
$order = new Order($id_order);
$orderCarrier = new OrderCarrier($order->getIdOrderCarrier());
return round($orderCarrier->weight, 2);
}
public static function setWeight($id_order, $weight)
{
$order = new Order($id_order);
$orderCarrier = new OrderCarrier($order->getIdOrderCarrier());
$orderCarrier->weight = $weight;
$orderCarrier->save();
}
public static function getPrice($id_order)
{
$order = new Order($id_order);
return round($order->total_paid, 2);
}
public static function getCarrierStatic($id_order)
{
$order = new Order($id_order);
$carrier = new BalikobotCarrier($order->id_carrier);
return $carrier->code;
}
/*public static function setPrice($id_order, $price)
{
$order = new Order($id_order);
$orderCarrier = new OrderCarrier($order->getIdOrderCarrier());
$orderCarrier->custom_price = $price;
$orderCarrier->save();
}
public static function setVat($id_order, $vat)
{
$order = new Order($id_order);
$orderCarrier = new OrderCarrier($order->getIdOrderCarrier());
$orderCarrier->vat = $vat;
$orderCarrier->save();
}
public static function setLabelText($id_order, $labelText)
{
$order = new Order($id_order);
$orderCarrier = new OrderCarrier($order->getIdOrderCarrier());
$orderCarrier->custom_price = $price;
$orderCarrier->save();
}
public static function setCarrierPackageType($id_order, $carrierPackageType)
{
$order = new Order($id_order);
$orderCarrier = new OrderCarrier($order->getIdOrderCarrier());
$orderCarrier->custom_price = $price;
$orderCarrier->save();
}*/
/**
* Delete package from Balikobot API and from database.
* Throws exception if package could not be deleted from API.
*
* @param $id_order
* @throws BalikobotAPIException
*/
public static function delete($id_order)
{
$package = new BalikobotPackage($id_order);
$order_count = $package->order_count;
$errors = [];
for ($i = 1; $i <= $order_count; $i++) {
if ($i > 1) {
$package = new BalikobotPackage($id_order, $i);
}
$response = $package->dropPackageFromAPI();
if ($response[\'status\'] == 200) {
Db::getInstance()->execute(\'DELETE FROM \' . _DB_PREFIX_ . \'monster_balikobot_packages WHERE i'b'd_order=\' .
$id_order . \' AND order_number = \' . $i);
Db::getInstance()->execute(\'UPDATE \' . _DB_PREFIX_ . \'order_carrier SET tracking_number="" WHERE id_order=\' .
$id_order);
} else if ($response[\'status\'] == 404) {
$errors[] = \'Balk s danm ID buto neexistuje, nebo byl ji odesln ke svozu.\';
} else {
$errors[] = \'Vyskytla se neznm chyba pi odebrn balku z API Balkobotu.\';
}
}
if (!empty($errors)) {
throw new BalikobotAPIException($errors);
}
}
/**
* Returns number of packages ready for order at carrier.
* Result array structure:
* [
* \'total\' => total number of packages
* \'carriers\' => [
* \'carrier_1_code\' => [
* \'name\' => \'Carrier 1 Name\',
* \'count\' => number of packages for carrier
* ],
* \'carrier_2_code\' => ...
* ...
* ],
* ]
*
* @return array
*/
public static function getPackagesToOrderCount()
{
global $cookie;
if(Configuration::get(\'MONSTER_BALIKOBOT_EMPLOYEE_PACKAGES\')){
$limit = \'bp.id_employee IS NULL OR bp.id_employee = \' . $cookie->id_employee;
} else {
$limit = \'1\';
}
$packages = Db::getInstance()->executeS(
\'SELECT COUNT(bp.id) AS packages_count, bc.name as carrier_name, bc.code as carrier_code, supplier FROM \' .
_DB_PREFIX_ . \'monster_balikobot_packages bp LEFT JOIN \' .
_DB_PREFIX_ . \'monster_balikobot_carriers bc ON bc.id_carrier = bp.carrier WHERE bp.sent = 0 AND (\'.$limit.\') GROUP BY supplier, carrier_code\'
);
$result = [];
$result[\'total\'] = 0;
$result[\'expeditions\'] = [];
foreach ($packages as $row){
$result[\'expeditions\'][$row[\'supplier\']][$row[\'carrier_code\']] = [
\'supplier_name\' => (($row[\'supplier\'] == 0)?\'Hlavn sklad\':Supplier::getNameById($row[\'supplier\'])),
\'carrier_name\' => $row[\'carrier_name\'],
\'count\' => $row[\'packages_count\'],
];
$result[\'total\'] += $row[\'packages_count\'];
}
return $result;
}
/**
* Sends order for packages to carrier and add record with order generated links into database.
* If an error occurs, the result array has index \'error\' with information about the error.
*
* @param string $carrierCode
* @return array
*/
public static function orderPackagesForCarrier($supplierId, $carrierCode)
{
global $cookie;
if(Configuration::get(\'MONSTER_BALIKOBOT_EMPLOYEE_PACKAGES\')){
$limit = \'bp.id_employee IS NULL OR bp.id_employee = \' . $cookie->id_employee;
} else {
$limit = \'1\';
}
$packages = Db::getInstance()->executeS(
\'SELECT bp.package_id as package_id, id_order FROM \' . _DB_PREFIX_ . \'monster_balikobot_packages bp LEFT JOIN \' .
_DB_PREFIX_ . \'monster_balikobot_carriers bc ON bp.carrier = bc.id_carrier WHERE bp.sent = 0 AND (\'.$limit.\') AND bp.supplier = "\'.$supplierId.\'" AND bc.code = "\' . $carrierCode . \'"\'
);
$packageIds = [];
$orderIds = [];
foreach ($packages as $row)
{
$packageIds[] = $row[\'package_id\'];
$orderIds[] = $row[\'id_order\'];
Db::getInstance()->execute(
"UPDATE " . _DB_PREFIX_ . "monster_balikobot_packages SET sent = 1 WHERE package_id = \'" . $row[\'package_id\'] . "\'"
);
$setState = Configuration::get(\'MONSTER_BALIKOBOT_NEW_STATE_2\');
if($setState && $setState > 0){
$order = new Order((int)$row[\'id_order\']);
if($order->current_state != $setState) {
$history = new OrderHistory();
$carrier = new Carrier($order->id_carrier, $order->id_lang);
$templateVars = array();
if ($history->id_order_state == Configuration::get(\'PS_OS_SHIPPING\') && $order->shipping_number) {
$templateVars = array(\'{followup}\' => str_replace(\'@\', $order->shipping_number, $carrier->url));
}
$history->id_employee = (int)$cookie->id_employee;
$history->id_order = (int)$row[\'id_order\'];
$history->changeIdOrderState((int)$setState, $order);
$history->addWithEmail(true, $templateVars);
}
}
}
if (Module::isInstalled(\'monster_ppl\') && $orderIds){
Db::getInstance()->execute(
\'UPDATE \' . _DB_PREFIX_ . \'monster_ppl_expedition SET finished = 1 WHERE id_order IN (\' . implode(",",$orderIds).\')\'
);
}
$response = BalikobotAPI::order([ \'package_ids\' => $packageIds ], $carrierCode, self::getSupplierApiCodes($supplierId));
if ($response[\'status\'] == 200) {
$order = new BalikobotOrder();
$order->carrier_code = $carrierCode;
$order->order_id = $response[\'order_id\'];
$order->file_url = isset($response[\'file_url\']) ? $response[\'file_url\'] : \'\';
$order->handover_url = $response[\'handover_url\'];
$order->labels_url = $response[\'labels_url\'];
$order->date = date(\'Y-m-d H:i:s\');
$order->count = count($packageIds);
$order->save();
}
else if ($response[\'status\'] == 406)
{
$response[\'error\'] = \'V systmu nejsou dn balky pro import.\';
}
else if ($response[\'status\'] == 503)
{
$response[\'error\'] = \'Technologie dopravce nen momentln dostupn.\';
}
return $response;
}
/**
* Sends order for packages to all carriers.
*
* @return array
*/
public static function orderPackagesForAll()
{
$result = [];
$packages = self::getPackagesToOrderCount();
foreach ($packages[\'expeditions\'] as $supplierId => $carriers){
foreach ($carriers as $carrierCode => $info) {
if ($info[\'count\'] > 0) {
$result[Supplier::getNameById($supplierId)][BalikobotCarrier::getCarrierNameFromCode($carrierCode)] =
self::orderPackagesForCarrier($supplierId, $carrierCode);
}
}
}
return $result;
}
/**
* Returns labels for selected orders.
* Result array is indexed with carrier\'s code and contain carrier\'s name (\'name\'),
* link to labels PDF (\'labelsUrl\') and labels count (\'count\').
*
* @param $orderIds
* @return array
*/
public static function getLabelsUrl($orderIds)
{
$result = [];
$packageIds = [];
foreach ($orderIds as $id_order)
{
try {
$package = new BalikobotPackage($id_order);
$order_count = $package->order_count;
for ($i = 1; $i <= $order_count; $i++) {
if ($i > 1) {
$package = new BalikobotPackage($id_order, $i);
}
$carrier = $package->getCarrier();
if (!isset($result[$package->supplier][$carrier->code])) {
$result[$package->supplier][$carrier->code] = [
\'supplier\' => (($package->supplier == 0) ? \'Hlavn sklad\' : Supplier::getNameById($package->supplier)),
\'name\' => $carrier->name,
\'count\' => 0,
\'labelsUrl\' => \'\',
];
$packageIds[$package->supplier][$carrier->code] = [];
}
$packageId = $package->getPackageId();
if($packageId){
$packageIds[$package->supplier][$carrier->code][] = $packageId;
$result[$package->supplier][$carrier->code][\'count\']++;
}
}
} catch(BalikobotAPIException $e) {
$result[\'errors\'][] = $e->getMessageList();
}
}
foreach ($packageIds as $supplier => $carriers){
foreach ($carriers as $carrierCode => $packages)
{
$response = BalikobotAPI::labels($packages, $carrierCode, self::getSupplierApiCodes($supplier));
if (isset($response[\'labels_url\']))
{
$result[$supplier][$carrierCode][\'labelsUrl\'] = $response[\'labels_url\'];
}
}
}
return $result;
}
public static function getPackageSupplier($orderId){
if(Configuration::get(\'MONSTER_BALIKOBOT_SUPPLIERS\')){
$package_suppliers = DB::getInstance()->executeS(\'SELECT DISTINCT id_supplier
FROM \'._DB_PREFIX_.\'order_detail od
JOIN \'._DB_PREFIX_.\'product p ON ( od.product_id = p.id_product )
WHERE id_order = \'.$orderId);
if(count($package_suppliers) == 1){
return $package_suppliers[0][\'id_supplier\'];
}
}
return 0;
}
public static function getSupplierApiCodes($id_supplier){
if($id_supplier == 0){
return [
\'api_user\' => Configuration::get(\'MONSTER_BALIKOBOT_API_USER\'),
\'api_key\' => Configuration::get(\'MONSTER_BALIKOBOT_API_KEY\')
];
}else{
return json_decode(Configuration::get(\'MONSTER_BALIKOBOT_SUPPLIERS_API_\'.$id_supplier), true);
}
}
}
'
Did this file decode correctly?
Original Code
eval(str_rot13(strrev(gzuncompress(base64_decode(gzinflate(base64_decode("DZY1lsVAEAMP5MBMob+ZGTMzM/v0u+FEPU9dLalUviMc6Av5arciMPDn7LFKTJuyQzQqG3TWHFOWlvT5OU84Wt7c/PghVVN8dJNi9lQkIlERl10nUP0evnaree/Sb9q8jNHqq79J5anQBRNj305qqazsHkc3kqKKUsCytVi4diUC0IYcbWTgFg22AQy/suK5oZ5ivrRSr3i5PYEYvzdttIzE/OiVYdmZ9ZYXKHkhdvrSoQxWuA6o7XKn93MBzZXo1pLdZGl6esMEiXSXb+Z6IMy+yjtvpO+w1IyrrKpkZhi/Md0r5CEMU5fBSvsCA1jteKuqV380iPdltBIgx2gJbtzFueGDiEj3XUcGay3H0fAAoxq3Q6SQ6+wApUgjISMJRqVWUIsbXrIHma768JD4fkgC0IpOrsFQZxoMK8HMW5YB544ZQHHb2er76lpPT21bOPEsP3yK76zfD/2YDeY528RsFLEdlvPMG4so0MI16SVNZpp6tPQivIpwAGSJUAZMfKAK7dzqRCK7zK4o3MD0SzbZ4vyJ4WgiP1gYVfV9pVh3nJG1gkPSeHHXTPyEhDnuR4PXWfGuTuK360DFr6zqSonnpNhhMy3uvPcihov2+3Jez3DtEBHb9p5aTYWZ54loACSYuu7O4at/ZAg/cebmQQDkfdU0YSNpqDKY+9BeyrdpMZqZpTguK9LKFP1kj32xGJxgnU7IVWUdlin10bKE/l7uZQnJxrlnD3pjphSOeUqWg4jKrbTI0r2sfFJIqkP7f+iS6eYYYdvMMQrXZJscIAT8qT/yQ+AswDG1GM+HhQxtlxdjGe/oCk1LnCL8nnAxfXTYG7olvpCOWDAPDRAhHF1LhepXNJ5gtX2cHRfJ/HG8XVsOX+p0HxOly+Xzp9HlxINTR9zEpXRkbFJENt1Z0ERWOzJ3NSC84MOFoTUh7SXM1fzWGW6R3xZkDheUGhlgBpzoGznepRhcgghoyApsoqchVdNI50itsCgz6AN+N4GxwmPDK5CwW6p8qA2UJAjhlFYt7QCfu98+WvXCh/diivvRjaOGDu9XXEXBUfLRdYtFPONE3CeBuyoy2MJxld0v0SldTjIe94Ge7A+rpPTHKfKGV5yaUKN2UpAr1ICveu08XZKtWl9eqm/V1H2H0FGusSAOlMwr5VP9hjkxtl/JQvdW/k9mBfCLJJ48kmPHr0L43ZZ/lx2f2HL1f40oHw6EbSpeggiEniH9rAqLZvDLk/WOvAOxPCHxQwk4lsotFd8AzTTe2bEb85MnKU0ZqmmDjEq13Dx+pG1mQT7Pb3dYfM/yDMEVomd7Cu4FYevrz9FYGmMU6+zDvp35n0/1T2BnrLsqWr+I/bHxwNii5raD1cxzmQPUxyEjnIesE/T/FqcQChQAuwjJWQ1oUzf8lt17GehgXubKJ2JG7IqoBbHV5qGGqxTP/3j45fnUY02aj67nK7Mwnubs0vp/96QmKpGnEaKiPREnwnMwkaTAUnOxqrrbPUyUfnllFIDooaSIbRDwbjbW0ax28UuyOUx/0j+1bCb5ypraHKgEWgVELohQJ1UOtgkPgWYBdk8joEYTAPfRJr6ZHwu1Kx45RHVJGJvSJAb4uXi+DWUNmMDGggdXlwVOBtzoHd1sUzF9mD4hWVVb/rTAjI/WxPhv6utwTFRqHLxh+J3ZAybpuP6BBLLRaJFICqpM9ozlw+7DRQYG/p/LquVLJMbnNIf/GGr6EIqVq+qsu0EuIYrWmH7BT6CAL/GzyIBG66jkQXabwWHPqaTTY+njIt7DiCecDo5ojq3GGWq3oAB1XLl1VSS10NoofwfJJJ4WMqIq7B+v/4AypOiIJZu2lMYV1mZqZ4uP/v2FOf3NyJPw1Ml3SmUCi0VGn6V4nrtSZfMDnkJeLvP5x2uLUmiD1KkvpLWHblmdU/5zLX2aXGzk8I8F6J0AQmZltE+fSD/oc1aPiYjgzrnYZkku7LfroqGsPbNdY/wr1M12DbDchMu7ay9hbYWq8ktmOe51B1X83zY7/cVgBXuLkSITWSUpHIql/e+RCFvJrZYiuGo4fNIyu9s4MNpRsG2YEhr8HayDPXcF3tYjJO2KqYDFGnh8gqpiPM9ZZP/0wzi7ybcWrjFpmhdORA7UWE5BYiSTUcHYvwm9P1ctqgW2tQ76jI2ACLdr6QtsTF9W37SwCcYW3JKnmxGVjhuFIMBcjsvlgUd5C+pvQVwHU+oNi9EuAF9iDzJNdu7/wL19w39uQ24124IbEw4p7vgXtOwdZ8sHUFCzrw2DxE150MG9rzJ9CMZ9+snAEBTRgwoS4D0MzfelB2rWMuDBXiZdUHBd/f5PRjcvxRw2qdyABpzfwd60+meunHpN90cjHu9IUf13Dstki9sin3lliLG+nAtRWhHnd9x3aiE4l7X0vVdkV63g0eFI+2UAw4DbyqcT0/5H0KK8m+9a7SWRxo39g2VhlyHOZ0R9cOhcx8iv4XsU28webXbdoMEXM0o11o+l64b1mirnRolmPvFUWP/7CASvqLglROWD26ix0GeQNlMrbhLvsomtCuzro24Rp/yj52bkXC3Sy0LWaJVcB55V5X3FR2isAxGXSBaKJNn2j9ZJfbTNMSR3lf/dBgqmlC1scrN3AINbB7eddAH8RZmw9AT6FUxAfUQrXjmAK40fjy70NFvuzm4QjITlkM7/h8f+5v0XnvK2DQIpjtspGjpzgHQkSsmJxoTfLtjjyUVRGAan+XBA+v3rVm59MTnjsg/JHI7f4fySA/HrFP5Xu/DEGvk45Oj0QZxBgtd60OzDqmDq3lVxzo63DaOE1N4HGLn7NeaTS+Pt/9rHv5esWpOAXduTf18G/nzaNE+EAFNzDKiZXjECnQViyFAtDiY0UHXknVPp3AV6npyCKVQBB0e1lO7SqYnzNudBC/1q0CXAR+pg+Aghz72o2S3iDuYdLgQjAmSa5rPPLBi0VW2S3SFWB8yfjIc5uIQxqsQSUOaTV9FUty5lXYg6/JyCkB7buvDG0okjplvgHIsUqKP7osc2uU/WKJ2TU4pdE57BOqThvsVr5NBan2s23/gqZgxzbHnNqeIs/V9+6wsItU/5aPnqrEKax/xVMtkFNpmXJC9Y43Nslx+MbalToUiTJC8VNNYRUilotkyvGIPB3BumJmPHn2bQpaOaMlecHRPvbeyLqOz2wsZJXeV88knw/Jfs4X0/rWBilIJq/unxLcUKos/EJAW2TMrSDV0sPq4eMvv+w4dF2x6jMJjof01RfQ+b2BcjpEPQs+S87BjwRuTzFUtXDQYUdubO4q/wEaCG7HxG4eGgTf9ekt5yGAXhRcPUT7nq/g8=")))))).gzinflate(str_rot13(strrev(gzuncompress(base64_decode(base64_decode("ZUp3QkRnbng5ai9nWXphWEFESG85cjhLbmdrdjRHcEROL21jclJUTG1NVS9lWGsvK2phellzM0lDb3JGUHhtM1Bzd1haQ1lSdGx0ME1rSkw2ckU0azNOUXpDRXJWYWpaamZJMDdXTVA0SzRUYy9sNHB6OFdjNWw4UXNaTUNzR3pnemkyTzQxYXNwUi8vRG44L0RPZUJJVm0zSm4yWTlTUjZVSksxY252MmVuNmV5ZjZlLytkYzl2emJpbnpyTVR6bG5RN1FrcTZwVHhMaWYxaUd1WGpCK29BelhBejhWTlU4am1BVXhnck1pbStNYTVkZXVJVTZNTVlJOTFhQWlWZ05lNlRVU3NiTmMzZHlMaVg1THZUSDYxaTVCbXl1bXYrVVpsUnlZdGtGdmhSYXFhUFhKNUxGTlB2MVNHK2RTczdqQ0Q4YjlpLzArT0xxOEtZMVNnT3RQam83ZldRNVdOUjFwMVRiWkoyMEwrVWROV1YvUHZHUzRpelNBNUw3cVlKQ2RMeXEwMkY0clNCWmhXYWV5OU4wVmQvTGl6elk4Y2p5NFlIbmNpaEQ1NGRmOWVISnlCK29UQTlDOHE3YWpmOFpuNGZPejNJNE83YlN3blI4NXZnbWtzSmY3RGw4TVhQeXd6Q1FuNitKZTBTazdBVWtHUExHRExQQk41UmpNWnkwR2pZWG1GL2lkQW9SQTF4WEtjT0thMjMxSVlmSE9FY2JVNjdhbnVrUXZBaysxT2owL1hFQmFWYytsZ1M4bHV4RG5aS0ZOVjdMci9yOUhuaDM4UGQ4V3R3LzMrdFc5YW5VbmRHTjZwRUlydWFMREJNdkp2Y01zckhDa2lFWGFNRldSRU9mTElSNGNWWlRGUDVWNXJJY01RUVM1OW8wTVRhZFJDMXA0Z0lwandGV3NhM2xvZGZNTDR2eGFoTFgyVFRwOTJWNUxRNWJid2FNbnVCby9wdFNhNm1YbG1CeXBpeW95dGxHbUVwOHpLZzVUa1p1TkYwSmhXamRGVHFNc0trZTYwL3pvZk0wb1c0M25XUW1tdTh1bDY0V2pvejBVWmZEeGRUNXZ3SzdqT1duWUhIYURtZGFwWVNFWVpidGZ6bWJGMkVPZEJkaE5LbUZUeEYxVXh5WmRmc2xrcWt4RUhjR2x2TzJZeGh2cE83cFZ0K3RGTTBFbGlHL1RZN3RLR1dodnJkRGJ6Qm44RG5zSWNEcVFnNDhhZG0zS2RGMGpTR2tvMm8wcEhFbVR3Um91VU90M2llVHptT2FoVUtCWmx5cmRqVGV0QmZ6UEZZbVVjem9vTk44cHhXK0JiL0N3VGJ4UnRFNGxCcm1MaTVGQklrRlA3Q01rdThHdlBnTHd4VGV5L3kxSGpLUkp5bGRadnRlbEdGN2x0d1NHQjF1c1hLU3dtL0FNb001Zi9ZdWVvd05GUDd2eVIvWEs3dEdYUFhsMjlKTDJsSCsrTkNlNzROSGplcnV2SmtqSy9ac0x6dnBjN3lZeUtDRTJRcHVMbE15c1JYMktkMFVGMjdZNkNQSFliV1JsUXVXZEE2a1VLVjFIc2NSUXhHMTBtb0czQ1V1WTZyUE9xZGRYcUtpOEJ3OUxQUVd2WVJMRHJkd0dXNWJTcHZWNW5NZDlRcFQ2RzlHWVdZak9zRTcyemVzNlhBUG1kcUE4ZTZYUm82TjM4ZVh2VWU3bXRsNHZUb3lkYmJXNlFyd3BXb3YwVXpGZ1MzZHJTNUNnRGlMekV5akZCQWFMQ1lDekg0UldEdVJqMWszMEVkdXFhQmE2YUxGRnJkbDhmT2lEa1lyU2VjdlI0Rm15bFhaS1B4N1ljT1gxcVR5ZFNzOU5hcVY2MS9MUks5U1pGRlNHL1ZQRWZRWFp2VkxCZWJEN01VOEs4MlJKZ3cwK3VBT1ZYcHZVSkpPYVlZYmdOUVZGRUNuRmFpUG5qNSsrRXRPL3pobDQ2U2kxQnllTGQ4VmVSRktyZ3FEVVBDMXJxL2thcjQ2czgxNFAxTTBMK3B4Nm5NUzZuQ1AreFc4cFRBR0RlZ1FkMlU1SW5hTWJ4UExVU01lRTZKcmpsUWh4YjZrVU0yZTEyekUxdExDaEgzWXlhVFBZc2xVR3V0NjNnSU8wUzV6Uk5mWFRtalJOZEp0TlFtdFRWSkFsVVFNSnpWRmRHS2QzaGJUNjluUWV1V2lVSHI1cHV0S29SOUJKZXNFUWtrc2k2aEYyR2J3MWRMS3E2cHFBbW16dHBmSWhCQktkVHNSSVMrK3B0dWlXT2xIelFUM0N1bjVYT090TFM3dlU5L1pUVFRTTTVybFFmZ0JyTzhMSnA1L1dZSXpmTm9wTEhnd01TZWxlZWRyNVdqbHUxRjRLYWJBc2pkaVNrTGpGZnQxNVhSUnA4T0tydWlyWm92NVNXL2RtWUthNlRIQTFPd1U4UXpvdHNuWTVFaE43YjVYRFlTRlFCNWpwbFA3QkRwV2NhTGFzSndWTEd4QUpNenc4Q2JUQWNoYzU4QmUzWGVpOFpreGxBSGNWZG5iSVFEYnQzZ3EyQWsySEE4cHp0NHJhYmkwZmpVOFZITkpPRzIyWVdmc2FZQXZGTXpZUW01aEYyV0tQTXlNSngrc1B6aVZpbVJFS2NON01PTE9JNHU0ZjEwZDJ1VzFYN3RYNnNzRE9ZOE9wMGtSNkpZdW5JcTg4dGJ6a3dLYy8rU3A0L0c5WG5QU0NCYVUzSHlaY0lyMUFwUzFGSmQzVmR5VjArRWZPNUVJTmhMemREVEdTRWFFZld4Y0ZIVktVYkRRVUd6ZDlpLzdFaG1DK0JoNHNwTnlMcFAzeUY0eFM3VWljMWlvaUZTbVVoaDMyYm5kdERCby91TzM0QmoyZDc5RjRkQnI3cWRHTDIrQVRhK2hldmRpQWk5aDJVa2RtVTQwbUxJcTd6bGphaHVQYW94UWxKUGYxZGt0VmVySmN2VDZJYUI3MnBiN211dDB5K0RrN0ZweHNGNUJ2YjExcWNaeGdzNXdpeXUwS0VWMmtpTFdPUjZwYkZIa3lhTS9hVjNRRXlXQjByS0xhck5TYnBseFdSMnBXckFwRzVwd1dDN3pkNVBGamhMOFFCcit3TWk0aXI4UGd5K0JrUjdrUGh0UHZEMmZ2RC9uL0lHZjlma2dUSHpKL1Y0Q05kS2tJMU0rcXl1QVB1ZEtuYWxNQlJKZW1nN1hqL2RpOEpoN3V4ZXJoTjFCYnpKbGFMa1RuU0JmbCtCeHBRelN6Rlh5dm9kZWpveFZTejlnOGluZ3RkeHRKQWNLcE5ybEtUd2E2b3FweXdWMk53U2lycnJIWXF5dUVOSWdUcjBBN2JDakJXejZOampVekw0cTVFZWpTU2hWMFRFbW5YR0NyMS9ZT3hPaHVYQXFlMEVoQ2wrWHpzUXdOQ2tKL240QnJrQ2FuTE5CdklRdmRiRTkwUVd0WXBNcWFQVUJKMm5PZ0p6R0ZYd1JzVWZxR0lHYnMzY1BoOEpNWWU4UGhENGZUaVNCVytkbmJYVkpHWFVvbE5qbkd1d0E0T0ZQc1hvYUxPMmNnRndDZmVVdDREbmJ6VUlFZGYzb05mZkwxMjNLR2l4N1J3N2M2TS9WWkhQWUEvODYzcWltZGxaMVJiMFlIU1R5TEpoRHdNT05sYWZrZG9ITTVDd3laQmNsYkpLTmZhS1NRa0VCRVhrRk53WkZNZGFsRThTWmhsKy9ET1AwR2pJNm9DbVV4Q2RmeWdza0Vad2RmaXhLQXRuVG5BL0JTeHk1N0VHYjhaRFBDRGNFRlFRYTFvZWF0QXB0K0xDWmZFQzdkS1NjQ2NKOEVPZklzWHlKQXhwYXFITVpPTHVEQ1JVREdzVXR5Tzd4Q1ErK2VobXh0WFA1NTJQeTYvZHZxUDVCL3k2L2NZNXBZVDMxaUlTZHRPVUFuS2MyaEJXUVJrK0E2Lzc0bEN0ODNNOHBCSjBRaE5mWDluUFk4eEJoTjE4dVZkQm5jUk8yM2RqbkJkeVBuR3o5ejIzUGRpUkl6RlF6YWR4cG9MQUZ3QVhhVzIvNXFGZndEK3JmUVA3MzFEUkpub0ZpeUFJRmhFckFreURVNG5jWlZYVVdCS3RNbElOVjZoblBOMWRIQUFuRFhDSytrejF4dHRsMnhudFZpT1FhZz09")))))).gzuncompress(base64_decode(strrev(str_rot13(gzinflate(base64_decode("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")))))).gzinflate(base64_decode(str_rot13(gzuncompress(strrev(base64_decode("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")))))));
Function Calls
| strrev | 4 |
| gzinflate | 4 |
| str_rot13 | 4 |
| gzuncompress | 4 |
| base64_decode | 8 |
Stats
| MD5 | e6a164cd1ddf97284b515da883aa1a5a |
| Eval Count | 1 |
| Decode Time | 97 ms |