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

Decoded Output download

 
/************************************************
    *     *
    *     *
    *    *
    *    *
    *    *
    *    *
    * --------------------------------------------- *
    * This is commercial software, only users       *
    * who have purchased a valid license and        *
    * accept to the terms of the License            *
    * Agreement can install and use this program.   *
    * --------------------------------------------- *
    * website: https://maurisweb.ru                 *
    *   email: [email protected]                    *
    ************************************************/




namespace Tygh\Addons\MauriswebAddonManager;

use Tygh\Tygh;
use Tygh\Registry;
use Tygh\Database\Connection;
use Tygh\Tools\Archiver;

class Files {

    protected $db;
    protected $archiver;
    protected $manager;
    protected $file_types;
    protected $file_objects;
    protected $class_name = 'maurisweb_addon_manager_file_manager';


    public function __construct(
        Connection $db,
        Archiver  $archiver
    ) {
        $this->db = $db;
        $this->archiver = $archiver;
        
		$manager = Tygh::$app['addons.maurisweb_addon_manager.manager'];
        $this->manager = $manager;
        $this->file_types = fn_get_schema('maurisweb_addon_manager', 'file_types');
        $this->file_objects = fn_get_schema('maurisweb_addon_manager', 'file_objects');
        
        $function_name =  $this->manager->decamelize(__FUNCTION__);
        fn_set_hook("{$this->class_name}_{$function_name}", $this);
    }

    public function getFileContent($file_id) {

        $function_name = $this->manager->decamelize(__FUNCTION__);
        fn_set_hook("{$this->class_name}_{$function_name}_pre", $file_id);

        list($file_data) = $this->getData($file_id);

        fn_set_hook("{$this->class_name}_{$function_name}", $file_id, $file_data);
        if (!empty($file_data)) {
            fn_get_file($file_data['path'], $file_data['filename']);

            exit;
        }
    }

    public function getFilesContent($params) {

        $function_name =  $this->manager->decamelize(__FUNCTION__);
        fn_set_hook("{$this->class_name}_{$function_name}_pre", $params);

        list($files) = $this->getList($params);

        fn_set_hook("{$this->class_name}_{$function_name}", $params, $files);


        $extract_path = fn_get_cache_path(false) . 'tmp/maurisweb_addon_manager/files/';
        fn_rm($extract_path);

        fn_rm($extract_path . 'zip/');

        fn_mkdir($extract_path);
        fn_mkdir($extract_path . 'zip/');


        $file_list = array();
        foreach ($files as  $file) {

            $_file = [
                'addon' => $file['addon'],
                'company_id' => $file['company_id'],
            ];
            $_path = $this->getFilePath($_file);

            $_file = [
                'addon' => $file['addon'],
                'company_id' => $file['company_id'],
                'object_id' => $file['object_id'],
                'object_type' => $this->file_objects[$file['object_type']]['name'],
                'file_type' => $this->file_types[$file['file_type']]['name'],
            ];
            $full_path = $this->getFilePath($_file);
            $patch = str_replace($_path, '', $full_path);
            fn_mkdir($extract_path . 'zip/' . $patch);
            fn_copy($file['path'], $extract_path . 'zip/' . $patch . $file['filename']);
        }
        $file_list[] = $extract_path . 'zip/';

        $filename = __('maurisweb_addon_manager.filename_zip');
        fn_rm($extract_path . $filename . '.zip');

        fn_set_hook("{$this->class_name}_{$function_name}_compress", $params, $file_list, $files, $extract_path, $filename);

        $this->archiver->compress($extract_path . $filename . '.zip', $file_list);

        fn_set_hook("{$this->class_name}_{$function_name}_get", $params, $file_list, $files, $extract_path, $filename);

        fn_get_file($extract_path . $filename . '.zip', $filename . '.zip');
    }

    public function getData($file_id, $params = [], $lang_code = DESCR_SL) {
        $function_name =  $this->manager->decamelize(__FUNCTION__);
        fn_set_hook("{$this->class_name}_{$function_name}_pre", $file_id, $params, $lang_code);

        $file  = [];
        if (!empty($file_id)) {

            $default_params = [
                'file_id' => $file_id,
            ];

            $params = array_merge($default_params, $params);

            list($file, $search) = $this->getList($params, 1, $lang_code);
            $file = isset($file[$file_id]) ? $file[$file_id] : [];
        }

        fn_set_hook("{$this->class_name}_{$function_name}_post", $file, $params, $lang_code);

        return [$file, $search];
    }
    public function getList($params, $items_per_page = 0) {

        $function_name =  $this->manager->decamelize(__FUNCTION__);
        fn_set_hook("{$this->class_name}_{$function_name}_pre", $params, $items_per_page);

        $file_list = array();

        $default_params = array(
            'page' => 1,
            'items_per_page' => $items_per_page
        );

        $params = array_merge($default_params, $params);


        $condition = $limit = $join = '';

        if (!empty($params['limit'])) {
            $limit = $this->db->quote(' LIMIT 0, ?i', $params['limit']);
        }

        $sorting = '';

        $condition = '';
        if (!empty($params['item_ids'])) {
            $file_ids = is_array($params['item_ids']) ? $params['item_ids'] : explode(',', $params['item_ids']);
        }
        if (!empty($params['file_id'])) {
            $file_ids = is_array($params['file_id']) ? $params['file_id'] : explode(',', $params['file_id']);
        }

        if (!empty($file_ids)) {
            $condition .= $this->db->quote(' AND a.file_id IN (?n)', $file_ids);
        }

        if (!empty($params['object_id'])) {
            $object_ids = is_array($params['object_id']) ? $params['object_id'] : explode(',', $params['object_id']);

            $condition .= $this->db->quote(' AND a.object_id IN (?a)', $object_ids);
        }
        if (!empty($params['object_type'])) {
            $object_type = is_array($params['object_type']) ? $params['object_type'] : explode(',', $params['object_type']);

            $condition .= $this->db->quote(' AND a.object_type IN (?a)', $object_type);
        }

        if (!empty($params['addon'])) {
            $addon = is_array($params['addon']) ? $params['addon'] : explode(',', $params['addon']);

            $condition .= $this->db->quote(' AND a.addon IN (?a)', $addon);
        }

        if (isset($params['company_id'])) {

            $condition .= $this->db->quote(' AND a.company_id =?i', $params['company_id']);
        }

        if (!empty($params['file_type'])) {
            $file_type = is_array($params['file_type']) 
                ? $params['file_type'] : explode(',', $params['file_type']);
            $condition .= $this->db->quote(' AND a.file_type IN (?a)', $file_type);
        }

        $fields = array(
            'a.*',

        );

        fn_set_hook("{$this->class_name}_{$function_name}", $params, $condition, $fields, $join);

        if (!empty($params['items_per_page'])) {
            $params['total_items'] = $this->db->getField("SELECT COUNT(*) FROM ?:maurisweb_addon_manager_files as a $join WHERE 1 $condition");
            $limit = db_paginate($params['page'], $params['items_per_page']);
        }

        $file_list =  $this->db->getHash(
            "SELECT ?p FROM ?:maurisweb_addon_manager_files as a " .
                $join .
                "WHERE 1 ?p ?p ?p",
            'file_id',
            implode(', ', $fields),
            $condition,
            $sorting,
            $limit
        );

        fn_set_hook("{$this->class_name}_{$function_name}_post", $file_list, $params, $items_per_page);

        return array($file_list, $params);
    }
    public function delete($file_id) {
        $function_name =  $this->manager->decamelize(__FUNCTION__);
        if ($file_id) {


            fn_set_hook("{$this->class_name}_{$function_name}_pre", $file_id);

            $file_data = $this->getData($file_id);



            if (isset($file_data['path']) && file_exists($file_data['path'])) {
                fn_rm($file_data['path']);
            }

            $this->db->query('DELETE FROM ?:maurisweb_addon_manager_files WHERE file_id = ?i', $file_id);

            fn_set_hook("{$this->class_name}_{$function_name}_post", $file_id);
        }
    }

    public function getFileId($file_data) {
        $function_name =  $this->manager->decamelize(__FUNCTION__);
        fn_set_hook("{$this->class_name}_{$function_name}_pre", $file_data);
        $file_id  = 0;

        $join =  $condition = '';

        if (isset($file_data['object_type'])  && isset($file_data['object_id'])  && isset($file_data['file_type'])  && isset($file_data['filename']) && isset($file_data['addon'])) {
            $condition .= $this->db->quote(' object_id=?i AND object_type=?s AND file_type =?s AND filename = ?s AND addon = ?s ', $file_data['object_id'], $file_data['object_type'], $file_data['file_type'], $file_data['filename'], $file_data['addon']);
        }


        if (!empty($condition)) {
            $file_id =  $this->db->getField('SELECT file_id FROM ?:maurisweb_addon_manager_files WHERE ?p', $condition);
        }

        fn_set_hook("{$this->class_name}_{$function_name}_post", $file_id, $file_data);

        return $file_id;
    }
    public function update($file_data, $file_id = 0, $delete = true, $save = true) {
        $function_name =  $this->manager->decamelize(__FUNCTION__);
        fn_set_hook("{$this->class_name}_{$function_name}_pre", $file_id, $file_data);

        if (!$file_id) {
            $file_id = $this->getFileId($file_data);
        }

        if ($file_id) {
            $this->db->query('UPDATE ?:maurisweb_addon_manager_files SET ?u WHERE file_id = ?i', $file_data, $file_id);
        } else {
            $file_data['timestamp'] = time();
            $file_id = $file_data['file_id'] = $this->db->query("INSERT INTO ?:maurisweb_addon_manager_files ?e", $file_data);
        }

        if (isset($file_data['filename']) && isset($file_data['path']) && $save) {
            $this->save($file_data, $delete);
            $this->update($file_data, $file_id, false, false);
        }
        fn_set_hook("{$this->class_name}_{$function_name}_post", $file_id, $file_data);
        return $file_id;
    }

    public static function getRelativePath($path_name = '', $path = '', $replace = '.') {
        $dir = Registry::get('config.dir');
        $path = $path ? $path : ($path_name ? $dir[$path_name] : '');

        return str_replace($dir['root'], $replace, $path);
    }

    public  function getFilePath($file_data) {
        $function_name =  $this->manager->decamelize(__FUNCTION__);

        $path = [
            'company_id' => $file_data['company_id'],
        ];

        if (!empty($file_data['addon'])) {
            $path['addon'] = $file_data['addon'];
        }
        if (!empty($file_data['object_type'])) {
            $path['object_type'] = $file_data['object_type'];
        }
        if (!empty($file_data['object_id'])) {
            $path['object_id'] = $file_data['object_id'];
        }
        if (!empty($file_data['file_type'])) {
            $path['file_type'] = $file_data['file_type'];
        }


        fn_set_hook("{$this->class_name}_{$function_name}", $path, $file_data);


        return $this->getRelativePath('files') . implode('/', $path) . '/';
    }

    public function save(&$file_data, $delete = true) {
        $FilePath = $this->getFilePath($file_data);
        fn_mkdir($FilePath);
        $filename = $file_data["filename"];
        $file_info = fn_pathinfo($filename);

        $dest = $FilePath . $filename;

        fn_rm($dest);

        while (file_exists($dest)) {
            $filename = fn_strtolower(fn_generate_code($file_info["filename"], 8));
            $dest = $FilePath . $filename . '.' . $file_info['extension'];
        }


        fn_copy($file_data["path"], $dest);
        if ($delete) {
            $rm = fn_rm($file_data["path"], false);
        }


        $file_data['path'] = $dest;
    }
}

Did this file decode correctly?

Original Code

<?php
eval(base64_decode("IAovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgKiAg4pWU4pWX4pSA4pSA4pWU4pWX4pWU4pWQ4pWQ4pWX4pWU4pWX4pWU4pWX4pWU4pWQ4pWQ4pWQ4pWX4pWU4pWQ4pWQ4pWX4pWU4pWQ4pWQ4pWX4pWU4pWX4pWU4pWX4pWU4pWX4pWU4pWQ4pWQ4pWQ4pWX4pWU4pWQ4pWQ4pWXICAgKg0KICAgICogIOKVkeKVkeKUgOKUgOKVkeKVkeKVkeKVlOKVl+KVkeKVkeKVkeKVkeKVkeKVkeKVlOKVkOKVl+KVkeKVmuKVl+KVlOKVneKVkeKVlOKVkOKVneKVkeKVkeKVkeKVkeKVkeKVkeKVkeKVlOKVkOKVkOKVneKVkeKVlOKVl+KVkSAgICoNCiAgICAqICDilZHilZrilZfilZTilZ3ilZHilZHilZrilZ3ilZHilZHilZHilZHilZHilZHilZrilZDilZ3ilZHilIDilZHilZHilIDilZHilZrilZDilZfilZHilZHilZHilZHilZHilZHilZHilZrilZDilZDilZfilZHilZrilZ3ilZrilZcgICoNCiAgICAqICDilZHilZTilZfilZTilZfilZHilZHilZTilZfilZHilZHilZHilZHilZHilZHilZTilZfilZTilZ3ilIDilZHilZHilIDilZrilZDilZfilZHilZHilZHilZHilZHilZHilZHilZHilZTilZDilZDilZ3ilZHilZTilZDilZfilZEgICoNCiAgICAqICDilZHilZHilZrilZ3ilZHilZHilZHilZHilZHilZHilZHilZrilZ3ilZHilZHilZHilZHilZHilIDilZTilZ3ilZrilZfilZTilZDilZ3ilZHilZHilZrilZ3ilZrilZ3ilZHilZHilZrilZDilZDilZfilZHilZrilZDilZ3ilZEgICoNCiAgICAqICDilZrilZ3ilIDilIDilZrilZ3ilZrilZ3ilZrilZ3ilZrilZDilZDilZ3ilZrilZ3ilZrilZ3ilIDilZrilZDilZDilZ3ilZrilZDilZDilZ3ilZrilZDilZ3ilZrilZDilZ3ilZrilZDilZDilZDilZ3ilZrilZDilZDilZDilZ0gICoNCiAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqDQogICAgKiBUaGlzIGlzIGNvbW1lcmNpYWwgc29mdHdhcmUsIG9ubHkgdXNlcnMgICAgICAgKg0KICAgICogd2hvIGhhdmUgcHVyY2hhc2VkIGEgdmFsaWQgbGljZW5zZSBhbmQgICAgICAgICoNCiAgICAqIGFjY2VwdCB0byB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UgICAgICAgICAgICAqDQogICAgKiBBZ3JlZW1lbnQgY2FuIGluc3RhbGwgYW5kIHVzZSB0aGlzIHByb2dyYW0uICAgKg0KICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoNCiAgICAqIHdlYnNpdGU6IGh0dHBzOi8vbWF1cmlzd2ViLnJ1ICAgICAgICAgICAgICAgICAqDQogICAgKiAgIGVtYWlsOiBpbmZvQG1hdXJpc3dlYi5ydSAgICAgICAgICAgICAgICAgICAgKg0KICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCm5hbWVzcGFjZSBUeWdoXEFkZG9uc1xNYXVyaXN3ZWJBZGRvbk1hbmFnZXI7Cgp1c2UgVHlnaFxUeWdoOwp1c2UgVHlnaFxSZWdpc3RyeTsKdXNlIFR5Z2hcRGF0YWJhc2VcQ29ubmVjdGlvbjsKdXNlIFR5Z2hcVG9vbHNcQXJjaGl2ZXI7CgpjbGFzcyBGaWxlcyB7CgogICAgcHJvdGVjdGVkICRkYjsKICAgIHByb3RlY3RlZCAkYXJjaGl2ZXI7CiAgICBwcm90ZWN0ZWQgJG1hbmFnZXI7CiAgICBwcm90ZWN0ZWQgJGZpbGVfdHlwZXM7CiAgICBwcm90ZWN0ZWQgJGZpbGVfb2JqZWN0czsKICAgIHByb3RlY3RlZCAkY2xhc3NfbmFtZSA9ICdtYXVyaXN3ZWJfYWRkb25fbWFuYWdlcl9maWxlX21hbmFnZXInOwoKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgQ29ubmVjdGlvbiAkZGIsCiAgICAgICAgQXJjaGl2ZXIgICRhcmNoaXZlcgogICAgKSB7CiAgICAgICAgJHRoaXMtPmRiID0gJGRiOwogICAgICAgICR0aGlzLT5hcmNoaXZlciA9ICRhcmNoaXZlcjsKICAgICAgICAKCQkkbWFuYWdlciA9IFR5Z2g6OiRhcHBbJ2FkZG9ucy5tYXVyaXN3ZWJfYWRkb25fbWFuYWdlci5tYW5hZ2VyJ107CiAgICAgICAgJHRoaXMtPm1hbmFnZXIgPSAkbWFuYWdlcjsKICAgICAgICAkdGhpcy0+ZmlsZV90eXBlcyA9IGZuX2dldF9zY2hlbWEoJ21hdXJpc3dlYl9hZGRvbl9tYW5hZ2VyJywgJ2ZpbGVfdHlwZXMnKTsKICAgICAgICAkdGhpcy0+ZmlsZV9vYmplY3RzID0gZm5fZ2V0X3NjaGVtYSgnbWF1cmlzd2ViX2FkZG9uX21hbmFnZXInLCAnZmlsZV9vYmplY3RzJyk7CiAgICAgICAgCiAgICAgICAgJGZ1bmN0aW9uX25hbWUgPSAgJHRoaXMtPm1hbmFnZXItPmRlY2FtZWxpemUoX19GVU5DVElPTl9fKTsKICAgICAgICBmbl9zZXRfaG9vaygieyR0aGlzLT5jbGFzc19uYW1lfV97JGZ1bmN0aW9uX25hbWV9IiwgJHRoaXMpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaWxlQ29udGVudCgkZmlsZV9pZCkgewoKICAgICAgICAkZnVuY3Rpb25fbmFtZSA9ICR0aGlzLT5tYW5hZ2VyLT5kZWNhbWVsaXplKF9fRlVOQ1RJT05fXyk7CiAgICAgICAgZm5fc2V0X2hvb2soInskdGhpcy0+Y2xhc3NfbmFtZX1feyRmdW5jdGlvbl9uYW1lfV9wcmUiLCAkZmlsZV9pZCk7CgogICAgICAgIGxpc3QoJGZpbGVfZGF0YSkgPSAkdGhpcy0+Z2V0RGF0YSgkZmlsZV9pZCk7CgogICAgICAgIGZuX3NldF9ob29rKCJ7JHRoaXMtPmNsYXNzX25hbWV9X3skZnVuY3Rpb25fbmFtZX0iLCAkZmlsZV9pZCwgJGZpbGVfZGF0YSk7CiAgICAgICAgaWYgKCFlbXB0eSgkZmlsZV9kYXRhKSkgewogICAgICAgICAgICBmbl9nZXRfZmlsZSgkZmlsZV9kYXRhWydwYXRoJ10sICRmaWxlX2RhdGFbJ2ZpbGVuYW1lJ10pOwoKICAgICAgICAgICAgZXhpdDsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEZpbGVzQ29udGVudCgkcGFyYW1zKSB7CgogICAgICAgICRmdW5jdGlvbl9uYW1lID0gICR0aGlzLT5tYW5hZ2VyLT5kZWNhbWVsaXplKF9fRlVOQ1RJT05fXyk7CiAgICAgICAgZm5fc2V0X2hvb2soInskdGhpcy0+Y2xhc3NfbmFtZX1feyRmdW5jdGlvbl9uYW1lfV9wcmUiLCAkcGFyYW1zKTsKCiAgICAgICAgbGlzdCgkZmlsZXMpID0gJHRoaXMtPmdldExpc3QoJHBhcmFtcyk7CgogICAgICAgIGZuX3NldF9ob29rKCJ7JHRoaXMtPmNsYXNzX25hbWV9X3skZnVuY3Rpb25fbmFtZX0iLCAkcGFyYW1zLCAkZmlsZXMpOwoKCiAgICAgICAgJGV4dHJhY3RfcGF0aCA9IGZuX2dldF9jYWNoZV9wYXRoKGZhbHNlKSAuICd0bXAvbWF1cmlzd2ViX2FkZG9uX21hbmFnZXIvZmlsZXMvJzsKICAgICAgICBmbl9ybSgkZXh0cmFjdF9wYXRoKTsKCiAgICAgICAgZm5fcm0oJGV4dHJhY3RfcGF0aCAuICd6aXAvJyk7CgogICAgICAgIGZuX21rZGlyKCRleHRyYWN0X3BhdGgpOwogICAgICAgIGZuX21rZGlyKCRleHRyYWN0X3BhdGggLiAnemlwLycpOwoKCiAgICAgICAgJGZpbGVfbGlzdCA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICAkZmlsZSkgewoKICAgICAgICAgICAgJF9maWxlID0gWwogICAgICAgICAgICAgICAgJ2FkZG9uJyA9PiAkZmlsZVsnYWRkb24nXSwKICAgICAgICAgICAgICAgICdjb21wYW55X2lkJyA9PiAkZmlsZVsnY29tcGFueV9pZCddLAogICAgICAgICAgICBdOwogICAgICAgICAgICAkX3BhdGggPSAkdGhpcy0+Z2V0RmlsZVBhdGgoJF9maWxlKTsKCiAgICAgICAgICAgICRfZmlsZSA9IFsKICAgICAgICAgICAgICAgICdhZGRvbicgPT4gJGZpbGVbJ2FkZG9uJ10sCiAgICAgICAgICAgICAgICAnY29tcGFueV9pZCcgPT4gJGZpbGVbJ2NvbXBhbnlfaWQnXSwKICAgICAgICAgICAgICAgICdvYmplY3RfaWQnID0+ICRmaWxlWydvYmplY3RfaWQnXSwKICAgICAgICAgICAgICAgICdvYmplY3RfdHlwZScgPT4gJHRoaXMtPmZpbGVfb2JqZWN0c1skZmlsZVsnb2JqZWN0X3R5cGUnXV1bJ25hbWUnXSwKICAgICAgICAgICAgICAgICdmaWxlX3R5cGUnID0+ICR0aGlzLT5maWxlX3R5cGVzWyRmaWxlWydmaWxlX3R5cGUnXV1bJ25hbWUnXSwKICAgICAgICAgICAgXTsKICAgICAgICAgICAgJGZ1bGxfcGF0aCA9ICR0aGlzLT5nZXRGaWxlUGF0aCgkX2ZpbGUpOwogICAgICAgICAgICAkcGF0Y2ggPSBzdHJfcmVwbGFjZSgkX3BhdGgsICcnLCAkZnVsbF9wYXRoKTsKICAgICAgICAgICAgZm5fbWtkaXIoJGV4dHJhY3RfcGF0aCAuICd6aXAvJyAuICRwYXRjaCk7CiAgICAgICAgICAgIGZuX2NvcHkoJGZpbGVbJ3BhdGgnXSwgJGV4dHJhY3RfcGF0aCAuICd6aXAvJyAuICRwYXRjaCAuICRmaWxlWydmaWxlbmFtZSddKTsKICAgICAgICB9CiAgICAgICAgJGZpbGVfbGlzdFtdID0gJGV4dHJhY3RfcGF0aCAuICd6aXAvJzsKCiAgICAgICAgJGZpbGVuYW1lID0gX18oJ21hdXJpc3dlYl9hZGRvbl9tYW5hZ2VyLmZpbGVuYW1lX3ppcCcpOwogICAgICAgIGZuX3JtKCRleHRyYWN0X3BhdGggLiAkZmlsZW5hbWUgLiAnLnppcCcpOwoKICAgICAgICBmbl9zZXRfaG9vaygieyR0aGlzLT5jbGFzc19uYW1lfV97JGZ1bmN0aW9uX25hbWV9X2NvbXByZXNzIiwgJHBhcmFtcywgJGZpbGVfbGlzdCwgJGZpbGVzLCAkZXh0cmFjdF9wYXRoLCAkZmlsZW5hbWUpOwoKICAgICAgICAkdGhpcy0+YXJjaGl2ZXItPmNvbXByZXNzKCRleHRyYWN0X3BhdGggLiAkZmlsZW5hbWUgLiAnLnppcCcsICRmaWxlX2xpc3QpOwoKICAgICAgICBmbl9zZXRfaG9vaygieyR0aGlzLT5jbGFzc19uYW1lfV97JGZ1bmN0aW9uX25hbWV9X2dldCIsICRwYXJhbXMsICRmaWxlX2xpc3QsICRmaWxlcywgJGV4dHJhY3RfcGF0aCwgJGZpbGVuYW1lKTsKCiAgICAgICAgZm5fZ2V0X2ZpbGUoJGV4dHJhY3RfcGF0aCAuICRmaWxlbmFtZSAuICcuemlwJywgJGZpbGVuYW1lIC4gJy56aXAnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGF0YSgkZmlsZV9pZCwgJHBhcmFtcyA9IFtdLCAkbGFuZ19jb2RlID0gREVTQ1JfU0wpIHsKICAgICAgICAkZnVuY3Rpb25fbmFtZSA9ICAkdGhpcy0+bWFuYWdlci0+ZGVjYW1lbGl6ZShfX0ZVTkNUSU9OX18pOwogICAgICAgIGZuX3NldF9ob29rKCJ7JHRoaXMtPmNsYXNzX25hbWV9X3skZnVuY3Rpb25fbmFtZX1fcHJlIiwgJGZpbGVfaWQsICRwYXJhbXMsICRsYW5nX2NvZGUpOwoKICAgICAgICAkZmlsZSAgPSBbXTsKICAgICAgICBpZiAoIWVtcHR5KCRmaWxlX2lkKSkgewoKICAgICAgICAgICAgJGRlZmF1bHRfcGFyYW1zID0gWwogICAgICAgICAgICAgICAgJ2ZpbGVfaWQnID0+ICRmaWxlX2lkLAogICAgICAgICAgICBdOwoKICAgICAgICAgICAgJHBhcmFtcyA9IGFycmF5X21lcmdlKCRkZWZhdWx0X3BhcmFtcywgJHBhcmFtcyk7CgogICAgICAgICAgICBsaXN0KCRmaWxlLCAkc2VhcmNoKSA9ICR0aGlzLT5nZXRMaXN0KCRwYXJhbXMsIDEsICRsYW5nX2NvZGUpOwogICAgICAgICAgICAkZmlsZSA9IGlzc2V0KCRmaWxlWyRmaWxlX2lkXSkgPyAkZmlsZVskZmlsZV9pZF0gOiBbXTsKICAgICAgICB9CgogICAgICAgIGZuX3NldF9ob29rKCJ7JHRoaXMtPmNsYXNzX25hbWV9X3skZnVuY3Rpb25fbmFtZX1fcG9zdCIsICRmaWxlLCAkcGFyYW1zLCAkbGFuZ19jb2RlKTsKCiAgICAgICAgcmV0dXJuIFskZmlsZSwgJHNlYXJjaF07CiAgICB9CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGlzdCgkcGFyYW1zLCAkaXRlbXNfcGVyX3BhZ2UgPSAwKSB7CgogICAgICAgICRmdW5jdGlvbl9uYW1lID0gICR0aGlzLT5tYW5hZ2VyLT5kZWNhbWVsaXplKF9fRlVOQ1RJT05fXyk7CiAgICAgICAgZm5fc2V0X2hvb2soInskdGhpcy0+Y2xhc3NfbmFtZX1feyRmdW5jdGlvbl9uYW1lfV9wcmUiLCAkcGFyYW1zLCAkaXRlbXNfcGVyX3BhZ2UpOwoKICAgICAgICAkZmlsZV9saXN0ID0gYXJyYXkoKTsKCiAgICAgICAgJGRlZmF1bHRfcGFyYW1zID0gYXJyYXkoCiAgICAgICAgICAgICdwYWdlJyA9PiAxLAogICAgICAgICAgICAnaXRlbXNfcGVyX3BhZ2UnID0+ICRpdGVtc19wZXJfcGFnZQogICAgICAgICk7CgogICAgICAgICRwYXJhbXMgPSBhcnJheV9tZXJnZSgkZGVmYXVsdF9wYXJhbXMsICRwYXJhbXMpOwoKCiAgICAgICAgJGNvbmRpdGlvbiA9ICRsaW1pdCA9ICRqb2luID0gJyc7CgogICAgICAgIGlmICghZW1wdHkoJHBhcmFtc1snbGltaXQnXSkpIHsKICAgICAgICAgICAgJGxpbWl0ID0gJHRoaXMtPmRiLT5xdW90ZSgnIExJTUlUIDAsID9pJywgJHBhcmFtc1snbGltaXQnXSk7CiAgICAgICAgfQoKICAgICAgICAkc29ydGluZyA9ICcnOwoKICAgICAgICAkY29uZGl0aW9uID0gJyc7CiAgICAgICAgaWYgKCFlbXB0eSgkcGFyYW1zWydpdGVtX2lkcyddKSkgewogICAgICAgICAgICAkZmlsZV9pZHMgPSBpc19hcnJheSgkcGFyYW1zWydpdGVtX2lkcyddKSA/ICRwYXJhbXNbJ2l0ZW1faWRzJ10gOiBleHBsb2RlKCcsJywgJHBhcmFtc1snaXRlbV9pZHMnXSk7CiAgICAgICAgfQogICAgICAgIGlmICghZW1wdHkoJHBhcmFtc1snZmlsZV9pZCddKSkgewogICAgICAgICAgICAkZmlsZV9pZHMgPSBpc19hcnJheSgkcGFyYW1zWydmaWxlX2lkJ10pID8gJHBhcmFtc1snZmlsZV9pZCddIDogZXhwbG9kZSgnLCcsICRwYXJhbXNbJ2ZpbGVfaWQnXSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWVtcHR5KCRmaWxlX2lkcykpIHsKICAgICAgICAgICAgJGNvbmRpdGlvbiAuPSAkdGhpcy0+ZGItPnF1b3RlKCcgQU5EIGEuZmlsZV9pZCBJTiAoP24pJywgJGZpbGVfaWRzKTsKICAgICAgICB9CgogICAgICAgIGlmICghZW1wdHkoJHBhcmFtc1snb2JqZWN0X2lkJ10pKSB7CiAgICAgICAgICAgICRvYmplY3RfaWRzID0gaXNfYXJyYXkoJHBhcmFtc1snb2JqZWN0X2lkJ10pID8gJHBhcmFtc1snb2JqZWN0X2lkJ10gOiBleHBsb2RlKCcsJywgJHBhcmFtc1snb2JqZWN0X2lkJ10pOwoKICAgICAgICAgICAgJGNvbmRpdGlvbiAuPSAkdGhpcy0+ZGItPnF1b3RlKCcgQU5EIGEub2JqZWN0X2lkIElOICg/YSknLCAkb2JqZWN0X2lkcyk7CiAgICAgICAgfQogICAgICAgIGlmICghZW1wdHkoJHBhcmFtc1snb2JqZWN0X3R5cGUnXSkpIHsKICAgICAgICAgICAgJG9iamVjdF90eXBlID0gaXNfYXJyYXkoJHBhcmFtc1snb2JqZWN0X3R5cGUnXSkgPyAkcGFyYW1zWydvYmplY3RfdHlwZSddIDogZXhwbG9kZSgnLCcsICRwYXJhbXNbJ29iamVjdF90eXBlJ10pOwoKICAgICAgICAgICAgJGNvbmRpdGlvbiAuPSAkdGhpcy0+ZGItPnF1b3RlKCcgQU5EIGEub2JqZWN0X3R5cGUgSU4gKD9hKScsICRvYmplY3RfdHlwZSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWVtcHR5KCRwYXJhbXNbJ2FkZG9uJ10pKSB7CiAgICAgICAgICAgICRhZGRvbiA9IGlzX2FycmF5KCRwYXJhbXNbJ2FkZG9uJ10pID8gJHBhcmFtc1snYWRkb24nXSA6IGV4cGxvZGUoJywnLCAkcGFyYW1zWydhZGRvbiddKTsKCiAgICAgICAgICAgICRjb25kaXRpb24gLj0gJHRoaXMtPmRiLT5xdW90ZSgnIEFORCBhLmFkZG9uIElOICg/YSknLCAkYWRkb24pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ2NvbXBhbnlfaWQnXSkpIHsKCiAgICAgICAgICAgICRjb25kaXRpb24gLj0gJHRoaXMtPmRiLT5xdW90ZSgnIEFORCBhLmNvbXBhbnlfaWQgPT9pJywgJHBhcmFtc1snY29tcGFueV9pZCddKTsKICAgICAgICB9CgogICAgICAgIGlmICghZW1wdHkoJHBhcmFtc1snZmlsZV90eXBlJ10pKSB7CiAgICAgICAgICAgICRmaWxlX3R5cGUgPSBpc19hcnJheSgkcGFyYW1zWydmaWxlX3R5cGUnXSkgCiAgICAgICAgICAgICAgICA/ICRwYXJhbXNbJ2ZpbGVfdHlwZSddIDogZXhwbG9kZSgnLCcsICRwYXJhbXNbJ2ZpbGVfdHlwZSddKTsKICAgICAgICAgICAgJGNvbmRpdGlvbiAuPSAkdGhpcy0+ZGItPnF1b3RlKCcgQU5EIGEuZmlsZV90eXBlIElOICg/YSknLCAkZmlsZV90eXBlKTsKICAgICAgICB9CgogICAgICAgICRmaWVsZHMgPSBhcnJheSgKICAgICAgICAgICAgJ2EuKicsCgogICAgICAgICk7CgogICAgICAgIGZuX3NldF9ob29rKCJ7JHRoaXMtPmNsYXNzX25hbWV9X3skZnVuY3Rpb25fbmFtZX0iLCAkcGFyYW1zLCAkY29uZGl0aW9uLCAkZmllbGRzLCAkam9pbik7CgogICAgICAgIGlmICghZW1wdHkoJHBhcmFtc1snaXRlbXNfcGVyX3BhZ2UnXSkpIHsKICAgICAgICAgICAgJHBhcmFtc1sndG90YWxfaXRlbXMnXSA9ICR0aGlzLT5kYi0+Z2V0RmllbGQoIlNFTEVDVCBDT1VOVCgqKSBGUk9NID86bWF1cmlzd2ViX2FkZG9uX21hbmFnZXJfZmlsZXMgYXMgYSAkam9pbiBXSEVSRSAxICRjb25kaXRpb24iKTsKICAgICAgICAgICAgJGxpbWl0ID0gZGJfcGFnaW5hdGUoJHBhcmFtc1sncGFnZSddLCAkcGFyYW1zWydpdGVtc19wZXJfcGFnZSddKTsKICAgICAgICB9CgogICAgICAgICRmaWxlX2xpc3QgPSAgJHRoaXMtPmRiLT5nZXRIYXNoKAogICAgICAgICAgICAiU0VMRUNUID9wIEZST00gPzptYXVyaXN3ZWJfYWRkb25fbWFuYWdlcl9maWxlcyBhcyBhICIgLgogICAgICAgICAgICAgICAgJGpvaW4gLgogICAgICAgICAgICAgICAgIldIRVJFIDEgP3AgP3AgP3AiLAogICAgICAgICAgICAnZmlsZV9pZCcsCiAgICAgICAgICAgIGltcGxvZGUoJywgJywgJGZpZWxkcyksCiAgICAgICAgICAgICRjb25kaXRpb24sCiAgICAgICAgICAgICRzb3J0aW5nLAogICAgICAgICAgICAkbGltaXQKICAgICAgICApOwoKICAgICAgICBmbl9zZXRfaG9vaygieyR0aGlzLT5jbGFzc19uYW1lfV97JGZ1bmN0aW9uX25hbWV9X3Bvc3QiLCAkZmlsZV9saXN0LCAkcGFyYW1zLCAkaXRlbXNfcGVyX3BhZ2UpOwoKICAgICAgICByZXR1cm4gYXJyYXkoJGZpbGVfbGlzdCwgJHBhcmFtcyk7CiAgICB9CiAgICBwdWJsaWMgZnVuY3Rpb24gZGVsZXRlKCRmaWxlX2lkKSB7CiAgICAgICAgJGZ1bmN0aW9uX25hbWUgPSAgJHRoaXMtPm1hbmFnZXItPmRlY2FtZWxpemUoX19GVU5DVElPTl9fKTsKICAgICAgICBpZiAoJGZpbGVfaWQpIHsKCgogICAgICAgICAgICBmbl9zZXRfaG9vaygieyR0aGlzLT5jbGFzc19uYW1lfV97JGZ1bmN0aW9uX25hbWV9X3ByZSIsICRmaWxlX2lkKTsKCiAgICAgICAgICAgICRmaWxlX2RhdGEgPSAkdGhpcy0+Z2V0RGF0YSgkZmlsZV9pZCk7CgoKCiAgICAgICAgICAgIGlmIChpc3NldCgkZmlsZV9kYXRhWydwYXRoJ10pICYmIGZpbGVfZXhpc3RzKCRmaWxlX2RhdGFbJ3BhdGgnXSkpIHsKICAgICAgICAgICAgICAgIGZuX3JtKCRmaWxlX2RhdGFbJ3BhdGgnXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5kYi0+cXVlcnkoJ0RFTEVURSBGUk9NID86bWF1cmlzd2ViX2FkZG9uX21hbmFnZXJfZmlsZXMgV0hFUkUgZmlsZV9pZCA9ID9pJywgJGZpbGVfaWQpOwoKICAgICAgICAgICAgZm5fc2V0X2hvb2soInskdGhpcy0+Y2xhc3NfbmFtZX1feyRmdW5jdGlvbl9uYW1lfV9wb3N0IiwgJGZpbGVfaWQpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RmlsZUlkKCRmaWxlX2RhdGEpIHsKICAgICAgICAkZnVuY3Rpb25fbmFtZSA9ICAkdGhpcy0+bWFuYWdlci0+ZGVjYW1lbGl6ZShfX0ZVTkNUSU9OX18pOwogICAgICAgIGZuX3NldF9ob29rKCJ7JHRoaXMtPmNsYXNzX25hbWV9X3skZnVuY3Rpb25fbmFtZX1fcHJlIiwgJGZpbGVfZGF0YSk7CiAgICAgICAgJGZpbGVfaWQgID0gMDsKCiAgICAgICAgJGpvaW4gPSAgJGNvbmRpdGlvbiA9ICcnOwoKICAgICAgICBpZiAoaXNzZXQoJGZpbGVfZGF0YVsnb2JqZWN0X3R5cGUnXSkgICYmIGlzc2V0KCRmaWxlX2RhdGFbJ29iamVjdF9pZCddKSAgJiYgaXNzZXQoJGZpbGVfZGF0YVsnZmlsZV90eXBlJ10pICAmJiBpc3NldCgkZmlsZV9kYXRhWydmaWxlbmFtZSddKSAmJiBpc3NldCgkZmlsZV9kYXRhWydhZGRvbiddKSkgewogICAgICAgICAgICAkY29uZGl0aW9uIC49ICR0aGlzLT5kYi0+cXVvdGUoJyBvYmplY3RfaWQ9P2kgQU5EIG9iamVjdF90eXBlPT9zIEFORCBmaWxlX3R5cGUgPT9zIEFORCBmaWxlbmFtZSA9ID9zIEFORCBhZGRvbiA9ID9zICcsICRmaWxlX2RhdGFbJ29iamVjdF9pZCddLCAkZmlsZV9kYXRhWydvYmplY3RfdHlwZSddLCAkZmlsZV9kYXRhWydmaWxlX3R5cGUnXSwgJGZpbGVfZGF0YVsnZmlsZW5hbWUnXSwgJGZpbGVfZGF0YVsnYWRkb24nXSk7CiAgICAgICAgfQoKCiAgICAgICAgaWYgKCFlbXB0eSgkY29uZGl0aW9uKSkgewogICAgICAgICAgICAkZmlsZV9pZCA9ICAkdGhpcy0+ZGItPmdldEZpZWxkKCdTRUxFQ1QgZmlsZV9pZCBGUk9NID86bWF1cmlzd2ViX2FkZG9uX21hbmFnZXJfZmlsZXMgV0hFUkUgP3AnLCAkY29uZGl0aW9uKTsKICAgICAgICB9CgogICAgICAgIGZuX3NldF9ob29rKCJ7JHRoaXMtPmNsYXNzX25hbWV9X3skZnVuY3Rpb25fbmFtZX1fcG9zdCIsICRmaWxlX2lkLCAkZmlsZV9kYXRhKTsKCiAgICAgICAgcmV0dXJuICRmaWxlX2lkOwogICAgfQogICAgcHVibGljIGZ1bmN0aW9uIHVwZGF0ZSgkZmlsZV9kYXRhLCAkZmlsZV9pZCA9IDAsICRkZWxldGUgPSB0cnVlLCAkc2F2ZSA9IHRydWUpIHsKICAgICAgICAkZnVuY3Rpb25fbmFtZSA9ICAkdGhpcy0+bWFuYWdlci0+ZGVjYW1lbGl6ZShfX0ZVTkNUSU9OX18pOwogICAgICAgIGZuX3NldF9ob29rKCJ7JHRoaXMtPmNsYXNzX25hbWV9X3skZnVuY3Rpb25fbmFtZX1fcHJlIiwgJGZpbGVfaWQsICRmaWxlX2RhdGEpOwoKICAgICAgICBpZiAoISRmaWxlX2lkKSB7CiAgICAgICAgICAgICRmaWxlX2lkID0gJHRoaXMtPmdldEZpbGVJZCgkZmlsZV9kYXRhKTsKICAgICAgICB9CgogICAgICAgIGlmICgkZmlsZV9pZCkgewogICAgICAgICAgICAkdGhpcy0+ZGItPnF1ZXJ5KCdVUERBVEUgPzptYXVyaXN3ZWJfYWRkb25fbWFuYWdlcl9maWxlcyBTRVQgP3UgV0hFUkUgZmlsZV9pZCA9ID9pJywgJGZpbGVfZGF0YSwgJGZpbGVfaWQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRmaWxlX2RhdGFbJ3RpbWVzdGFtcCddID0gdGltZSgpOwogICAgICAgICAgICAkZmlsZV9pZCA9ICRmaWxlX2RhdGFbJ2ZpbGVfaWQnXSA9ICR0aGlzLT5kYi0+cXVlcnkoIklOU0VSVCBJTlRPID86bWF1cmlzd2ViX2FkZG9uX21hbmFnZXJfZmlsZXMgP2UiLCAkZmlsZV9kYXRhKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkZmlsZV9kYXRhWydmaWxlbmFtZSddKSAmJiBpc3NldCgkZmlsZV9kYXRhWydwYXRoJ10pICYmICRzYXZlKSB7CiAgICAgICAgICAgICR0aGlzLT5zYXZlKCRmaWxlX2RhdGEsICRkZWxldGUpOwogICAgICAgICAgICAkdGhpcy0+dXBkYXRlKCRmaWxlX2RhdGEsICRmaWxlX2lkLCBmYWxzZSwgZmFsc2UpOwogICAgICAgIH0KICAgICAgICBmbl9zZXRfaG9vaygieyR0aGlzLT5jbGFzc19uYW1lfV97JGZ1bmN0aW9uX25hbWV9X3Bvc3QiLCAkZmlsZV9pZCwgJGZpbGVfZGF0YSk7CiAgICAgICAgcmV0dXJuICRmaWxlX2lkOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UmVsYXRpdmVQYXRoKCRwYXRoX25hbWUgPSAnJywgJHBhdGggPSAnJywgJHJlcGxhY2UgPSAnLicpIHsKICAgICAgICAkZGlyID0gUmVnaXN0cnk6OmdldCgnY29uZmlnLmRpcicpOwogICAgICAgICRwYXRoID0gJHBhdGggPyAkcGF0aCA6ICgkcGF0aF9uYW1lID8gJGRpclskcGF0aF9uYW1lXSA6ICcnKTsKCiAgICAgICAgcmV0dXJuIHN0cl9yZXBsYWNlKCRkaXJbJ3Jvb3QnXSwgJHJlcGxhY2UsICRwYXRoKTsKICAgIH0KCiAgICBwdWJsaWMgIGZ1bmN0aW9uIGdldEZpbGVQYXRoKCRmaWxlX2RhdGEpIHsKICAgICAgICAkZnVuY3Rpb25fbmFtZSA9ICAkdGhpcy0+bWFuYWdlci0+ZGVjYW1lbGl6ZShfX0ZVTkNUSU9OX18pOwoKICAgICAgICAkcGF0aCA9IFsKICAgICAgICAgICAgJ2NvbXBhbnlfaWQnID0+ICRmaWxlX2RhdGFbJ2NvbXBhbnlfaWQnXSwKICAgICAgICBdOwoKICAgICAgICBpZiAoIWVtcHR5KCRmaWxlX2RhdGFbJ2FkZG9uJ10pKSB7CiAgICAgICAgICAgICRwYXRoWydhZGRvbiddID0gJGZpbGVfZGF0YVsnYWRkb24nXTsKICAgICAgICB9CiAgICAgICAgaWYgKCFlbXB0eSgkZmlsZV9kYXRhWydvYmplY3RfdHlwZSddKSkgewogICAgICAgICAgICAkcGF0aFsnb2JqZWN0X3R5cGUnXSA9ICRmaWxlX2RhdGFbJ29iamVjdF90eXBlJ107CiAgICAgICAgfQogICAgICAgIGlmICghZW1wdHkoJGZpbGVfZGF0YVsnb2JqZWN0X2lkJ10pKSB7CiAgICAgICAgICAgICRwYXRoWydvYmplY3RfaWQnXSA9ICRmaWxlX2RhdGFbJ29iamVjdF9pZCddOwogICAgICAgIH0KICAgICAgICBpZiAoIWVtcHR5KCRmaWxlX2RhdGFbJ2ZpbGVfdHlwZSddKSkgewogICAgICAgICAgICAkcGF0aFsnZmlsZV90eXBlJ10gPSAkZmlsZV9kYXRhWydmaWxlX3R5cGUnXTsKICAgICAgICB9CgoKICAgICAgICBmbl9zZXRfaG9vaygieyR0aGlzLT5jbGFzc19uYW1lfV97JGZ1bmN0aW9uX25hbWV9IiwgJHBhdGgsICRmaWxlX2RhdGEpOwoKCiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRSZWxhdGl2ZVBhdGgoJ2ZpbGVzJykgLiBpbXBsb2RlKCcvJywgJHBhdGgpIC4gJy8nOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzYXZlKCYkZmlsZV9kYXRhLCAkZGVsZXRlID0gdHJ1ZSkgewogICAgICAgICRGaWxlUGF0aCA9ICR0aGlzLT5nZXRGaWxlUGF0aCgkZmlsZV9kYXRhKTsKICAgICAgICBmbl9ta2RpcigkRmlsZVBhdGgpOwogICAgICAgICRmaWxlbmFtZSA9ICRmaWxlX2RhdGFbImZpbGVuYW1lIl07CiAgICAgICAgJGZpbGVfaW5mbyA9IGZuX3BhdGhpbmZvKCRmaWxlbmFtZSk7CgogICAgICAgICRkZXN0ID0gJEZpbGVQYXRoIC4gJGZpbGVuYW1lOwoKICAgICAgICBmbl9ybSgkZGVzdCk7CgogICAgICAgIHdoaWxlIChmaWxlX2V4aXN0cygkZGVzdCkpIHsKICAgICAgICAgICAgJGZpbGVuYW1lID0gZm5fc3RydG9sb3dlcihmbl9nZW5lcmF0ZV9jb2RlKCRmaWxlX2luZm9bImZpbGVuYW1lIl0sIDgpKTsKICAgICAgICAgICAgJGRlc3QgPSAkRmlsZVBhdGggLiAkZmlsZW5hbWUgLiAnLicgLiAkZmlsZV9pbmZvWydleHRlbnNpb24nXTsKICAgICAgICB9CgoKICAgICAgICBmbl9jb3B5KCRmaWxlX2RhdGFbInBhdGgiXSwgJGRlc3QpOwogICAgICAgIGlmICgkZGVsZXRlKSB7CiAgICAgICAgICAgICRybSA9IGZuX3JtKCRmaWxlX2RhdGFbInBhdGgiXSwgZmFsc2UpOwogICAgICAgIH0KCgogICAgICAgICRmaWxlX2RhdGFbJ3BhdGgnXSA9ICRkZXN0OwogICAgfQp9Cg=="));
?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 638efc4ee5d5ec12c271e27afc95cecb
Eval Count 1
Decode Time 72 ms