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 $nsjsjsnsn = "\142\141\163\145\66\x34\137\x64\x65\x63\x6f\x64\x65";@eval($nsjsjsnsn..

Decoded Output download

namespace mineceit;

use mineceit\arenas\ArenaHandler;
use mineceit\commands\arenas\CreateArena;
use mineceit\commands\arenas\DeleteArena;
use mineceit\commands\arenas\EventArena;
use mineceit\commands\arenas\SetArenaSpawn;
use mineceit\commands\bans\MineceitBanCommand;
use mineceit\commands\bans\MineceitBanIPCommand;
use mineceit\commands\bans\MineceitBanListCommand;
use mineceit\commands\bans\MineceitPardonCommand;
use mineceit\commands\bans\MineceitPardonIPCommand;
use mineceit\commands\bans\MineceitResetBans;
use mineceit\commands\basic\FlyCommand;
use mineceit\commands\basic\FreezeCommand;
use mineceit\commands\basic\GamemodeCommand;
use mineceit\commands\basic\HealCommand;
use mineceit\commands\basic\HubCommand;
use mineceit\commands\other\MineceitMeCommand;
use mineceit\commands\other\MineceitTellCommand;
use mineceit\commands\basic\MuteCommand;
use mineceit\commands\basic\PlayerInfoCommand;
use mineceit\commands\basic\SetLeaderboardHologram;
use mineceit\commands\basic\StatsCommand;
use mineceit\commands\duels\DuelCommand;
use mineceit\commands\duels\SpecCommand;
use mineceit\commands\kits\ListKits;
use mineceit\commands\other\MineceitTeleportCommand;
use mineceit\commands\ranks\CreateRank;
use mineceit\commands\ranks\DeleteRank;
use mineceit\commands\ranks\ListRanks;
use mineceit\commands\ranks\SetRanks;
use mineceit\data\mysql\AsyncCreateDatabase;
use mineceit\discord\DiscordUtil;
use mineceit\duels\level\classic\ClassicDuelGen;
use mineceit\duels\level\classic\ClassicSpleefGen;
use mineceit\duels\level\classic\ClassicSumoGen;
use mineceit\duels\DuelHandler;
use mineceit\duels\level\duel\BurntDuelGen;
use mineceit\events\EventManager;
use mineceit\game\entities\FishingHook;
use mineceit\game\entities\MineceitItemEntity;
use mineceit\game\entities\ReplayArrow;
use mineceit\game\entities\ReplayHuman;
use mineceit\game\entities\ReplayItemEntity;
use mineceit\game\entities\SplashPotion;
use mineceit\game\items\ItemHandler;
use mineceit\game\leaderboard\Leaderboards;
use mineceit\game\level\gen\MineceitGenManager;
use mineceit\kits\Kits;
use mineceit\maitenance\reports\ReportManager;
use mineceit\parties\PartyManager;
use mineceit\player\info\duels\duelreplay\data\WorldReplayData;
use mineceit\player\info\duels\duelreplay\ReplayManager;
use mineceit\player\PlayerHandler;
use mineceit\player\ranks\RankHandler;
use pocketmine\command\Command;
use pocketmine\entity\Entity;
use pocketmine\plugin\PluginBase;
use pocketmine\utils\Config;

class MineceitCore extends PluginBase
{

    // TODO POSSIBLY ADD RESOURCE PACKS SO THAT THEY SHOW UP IN FORMS
    // TODO ADD CUSTOM DEATH MESSAGES.
    // TODO FIX CONSISTENCY AUTOCLICK DETECTOR -> LATER
    // TODO ADD CHECK IF PLAYER SWINGS THEIR ARMS WHEN HITTING THE OTHER
    // TODO FIX DUELS NOT ENDING WHEN PLAYER DIES
    // TODO ADD CUSTOM KIT SETUP
    // TODO FIX PERMISSIONS FOR PLAYERS -> BASED OFF RANKS NOT PLAYERS -> TESTED
    // TODO COME UP WITH FEATURES TO INCENTIVIZE PEOPLE TO BUY VIP & VIP+
    // TODO PARTICLES -> Figure out how
    // TODO FIGURE OUT HOW TERRAIN GENERATION WORKS

    /* @var Kits */
    private static $kits;

    /* @var PlayerHandler */
    private static $playerHandler;

    /* @var RankHandler */
    private static $rankHandler;

    /* @var ItemHandler */
    private static $itemHandler;

    /* @var ArenaHandler */
    private static $arenas;

    /* @var DuelHandler */
    private static $duelHandler;

    /* @var MineceitCore */
    private static $instance;

    /* @var Leaderboards */
    private static $leaderboard;

    /* @var PartyManager */
    private static $partyManager;

    /* @var ReplayManager */
    private static $replayManager;

    /** @var ReportManager */
    private static $reportManager;

    /** @var EventManager */
    private static $eventManager;

    /** @var MineceitGenManager */
    private static $generatorManager;

    /** @var string */
    private static $dataFolder;

    /* @var bool
     * Determines whether parties are enabled
     */
    public const PARTIES_ENABLED = false;

    /* @var bool
     * Determines whether replays are enabled.
     */
    public const REPLAY_ENABLED = true;

    /**
     * @var bool
     * Determines whether mysql is enabled.
     */
    public const MYSQL_ENABLED = false;

    /**
     * @var bool
     * Determines whether discord logs is enabled.
     */
    public const DISCORD_ENABLED = true;


    /**
     *  @var bool
     *  Determines whether the limited features thing is enabled or not.
     */
    public const LIMITED_FEATURES_ENABLED = false;


    /** @var bool
     * Determines whether the autoclick detection is enabled.
     */
    public const AUTOCLICK_DETECTOR_ENABLED = true; // TODO TURN BACK ON


    /**
     * @var bool
     */
    public const PROXY_ENABLED = false;

    /**
     * When the plugins.
     */
    public function onEnable() {

        self::$instance = $this;

        self::$generatorManager = new MineceitGenManager($this);
        $this->registerGenerators();

        self::$dataFolder = $this->getDataFolder();
        $this->loadLevels();

        $this->saveResource("mineceit.yml");

        $this->registerEntities();
        $this->registerCommands();

        self::$rankHandler = new RankHandler($this);
        self::$playerHandler = new PlayerHandler($this);
        self::$itemHandler = new ItemHandler();
        self::$kits = new Kits($this);
        self::$arenas = new ArenaHandler($this);
        self::$duelHandler = new DuelHandler($this);
        self::$replayManager = new ReplayManager($this);
        self::$partyManager = new PartyManager($this);
        self::$reportManager = new ReportManager($this);
        self::$eventManager = new EventManager($this);

        self::$leaderboard = new Leaderboards($this);

        if(self::MYSQL_ENABLED) {
            $task = new AsyncCreateDatabase(self::$kits->getKitsLocal());
            $this->getServer()->getAsyncPool()->submitTask($task);
        }

        $title = DiscordUtil::boldText("Online");
        $data = self::getServerType();
        $message = "{$data} is now " . DiscordUtil::boldText("ON");
        DiscordUtil::sendStatusUpdate($title, $message, DiscordUtil::GREEN);

        $this->getServer()->getPluginManager()->registerEvents(new MineceitListener($this), $this);
        $this->getScheduler()->scheduleRepeatingTask(new MineceitTask($this), 1);
    }

    public function onDisable()
    {
        $title = DiscordUtil::boldText("Offline");
        $data = self::getServerType();
        $message = "{$data} is now " . DiscordUtil::boldText("OFF");
        DiscordUtil::sendStatusUpdate($title, $message, DiscordUtil::RED);
    }

    /**
     * Loads the levels.
     */
    private function loadLevels() : void {

        $worlds = MineceitUtil::getLevelsFromFolder($this);

        $size = count($worlds);

        $server = $this->getServer();

        if($size > 0) {
            foreach($worlds as $world) {
                $world = strval($world);
                if ((is_numeric($world) and strlen($world) <= 3) or strpos($world, 'replay') !== false) {
                    MineceitUtil::deleteLevel($world);
                } elseif(!$server->isLevelLoaded($world) and (strpos($world, '.') === false)) {
                    $server->loadLevel($world);
                }
            }
        }
    }

    /**
     * @return EventManager
     */
    public static function getEventManager() : EventManager {
        return self::$eventManager;
    }


    /**
     * @return MineceitGenManager
     */
    public static function getGeneratorManager() : MineceitGenManager {
        return self::$generatorManager;
    }


    /**
     * @return ReportManager
     */
    public static function getReportManager() : ReportManager {
        return self::$reportManager;
    }

    /**
     * @return PartyManager
     */
    public static function getPartyManager() : PartyManager {
        return self::$partyManager;
    }

    /**
     * @return Leaderboards
     */
    public static function getLeaderboards() : Leaderboards {
        return self::$leaderboard;
    }

    /**
     * @return MineceitCore
     */
    public static function getInstance() : MineceitCore {
        return self::$instance;
    }

    /**
     * @return RankHandler
     */
    public static function getRankHandler() : RankHandler {
        return self::$rankHandler;
    }

    /**
     * @return PlayerHandler
     */
    public static function getPlayerHandler() : PlayerHandler {
        return self::$playerHandler;
    }

    /**
     * @return Kits
     */
    public static function getKits() : Kits {
        return self::$kits;
    }

    /**
     * @return ArenaHandler
     */
    public static function getArenas() : ArenaHandler {
        return self::$arenas;
    }

    /**
     * @return ItemHandler
     */
    public static function getItemHandler() : ItemHandler {
        return self::$itemHandler;
    }

    /**
     * @return DuelHandler
     */
    public static function getDuelHandler() : DuelHandler {
        return self::$duelHandler;
    }

    /**
     * @return ReplayManager
     */
    public static function getReplayManager() : ReplayManager {
        return self::$replayManager;
    }

    /**
     * @return string
     *
     * Gets the resources folder.
     */
    public function getResourcesFolder() : string {
        return $this->getFile() . 'resources/';
    }


    /**
     * @return array
     *
     * Gets the discord webhooks.
     */
    public static function getDiscordWebhooks() : array {

        $config = new Config(self::$dataFolder . "mineceit.yml", Config::YAML);

        if ($config->exists("webhooks")) {
            return (array)$config->get("webhooks");
        }

        return ["logs" => "", "reports" => "", "status" => ""];
    }


    /**
     * @return array
     *
     * Gets the mysql data.
     */
    public static function getMysqlData() : array {

        $config = new Config(self::$dataFolder . "mineceit.yml", Config::YAML);

        if($config->exists("mysql")) {
            return (array)$config->get("mysql");
        }

        return ["username" => "", "database" => "", "password" => "", "ip" => "", "port" => 3306];
    }


    /**
     * @return string
     *
     * Gets the server type.
     */
    public static function getServerType() : string {

        $config = new Config(self::$dataFolder . "mineceit.yml", Config::YAML);

        $result = "Mineceit Test";

        if($config->exists("server-type")) {
            $result = (string)$config->get("server-type");
        }

        return $result === "" ? "Mineceit Test" : $result;
    }


    /**
     * Registers the commands.
     */
    private function registerCommands() : void {

        $this->unregisterCommand('gamemode');
        $this->unregisterCommand('ban');
        $this->unregisterCommand('ban-ip');
        $this->unregisterCommand('banlist');
        $this->unregisterCommand('pardon');
        $this->unregisterCommand('pardon-ip');
        $this->unregisterCommand('tp');
        $this->unregisterCommand('tell');
        $this->unregisterCommand('me');

        $this->registerCommand(new ListKits());
        $this->registerCommand(new CreateArena());
        // $this->registerCommand(new PlaceBreakCommand());
        $this->registerCommand(new CreateRank());
        $this->registerCommand(new GamemodeCommand());
        $this->registerCommand(new FreezeCommand());
        $this->registerCommand(new FlyCommand());
        $this->registerCommand(new DuelCommand());
        $this->registerCommand(new HubCommand());
        $this->registerCommand(new HealCommand());
        $this->registerCommand(new DeleteArena());
        $this->registerCommand(new DeleteRank());
        $this->registerCommand(new ListRanks());
        $this->registerCommand(new StatsCommand());
        $this->registerCommand(new SpecCommand());
        $this->registerCommand(new SetRanks());
        $this->registerCommand(new SetLeaderboardHologram());
        // $this->registerCommand(new EnableTagCommand());
        $this->registerCommand(new PlayerInfoCommand());
        // $this->registerCommand(new VerifyCommand());
        $this->registerCommand(new MineceitBanCommand("ban"));
        $this->registerCommand(new MineceitBanIPCommand("ban-ip"));
        // $this->registerCommand(new LinkCommand());
        $this->registerCommand(new MineceitBanListCommand('banlist'));
        $this->registerCommand(new MineceitPardonCommand('pardon'));
        $this->registerCommand(new MineceitPardonIPCommand('pardon-ip'));
        $this->registerCommand(new MineceitTeleportCommand('tp'));
        $this->registerCommand(new MuteCommand(true));
        $this->registerCommand(new MuteCommand(false));
        $this->registerCommand(new MineceitTellCommand("tell"));
        $this->registerCommand(new MineceitMeCommand("me"));
        $this->registerCommand(new MineceitResetBans());
        $this->registerCommand(new EventArena());
        $this->registerCommand(new SetArenaSpawn());

    }

    /**
     * @param Command $command
     *
     * Registers a command.
     */
    private function registerCommand(Command $command) : void {

        $this->getServer()->getCommandMap()->register($command->getName(), $command);
    }

    /**
     * @param string $commandName
     *
     * Unregisters a command.
     */
    private function unregisterCommand(string $commandName) : void {

        $commandMap = $this->getServer()->getCommandMap();
        $cmd = $commandMap->getCommand($commandName);
        if($cmd !== null) {
            $commandMap->unregister($cmd);
        }

    }

    /**
     * Registers the entities.
     */
    private function registerEntities() : void {

        Entity::registerEntity(SplashPotion::class, false, ['ThrownPotion', 'minecraft:potion', 'thrownpotion']);
        Entity::registerEntity(FishingHook::class, false, ["FishingHook", "minecraft:fishing_hook"]);
        Entity::registerEntity(MineceitItemEntity::class, false, ['Item', 'minecraft:item']);
        Entity::registerEntity(ReplayItemEntity::class, false, ["ReplayItem"]);
        Entity::registerEntity(ReplayArrow::class, false, ["ReplayArrow"]);
        Entity::registerEntity(ReplayHuman::class, true);

    }


    /**
     * Registers the generators.
     */
    private function registerGenerators() : void {

        self::$generatorManager->registerGenerator(MineceitUtil::CLASSIC_DUEL_GEN, ClassicDuelGen::class, WorldReplayData::TYPE_DUEL);
        self::$generatorManager->registerGenerator(MineceitUtil::CLASSIC_SUMO_GEN, ClassicSumoGen::class, WorldReplayData::TYPE_SUMO);
        self::$generatorManager->registerGenerator(MineceitUtil::CLASSIC_SPLEEF_GEN, ClassicSpleefGen::class, WorldReplayData::TYPE_SPLEEF);

        // self::$generatorManager->registerGenerator(MineceitUtil::RIVER_DUEL_GEN, RiverDuelGen::class, WorldReplayData::TYPE_DUEL);
        // self::$generatorManager->registerGenerator(MineceitUtil::BURNT_DUEL_GEN, BurntDuelGen::class, WorldReplayData::TYPE_DUEL);
    }
}

Did this file decode correctly?

Original Code

<?php
$nsjsjsnsn = "\142\141\163\145\66\x34\137\x64\x65\x63\x6f\x64\x65";@eval($nsjsjsnsn("bmFtZXNwYWNlIG1pbmVjZWl0OwoKdXNlIG1pbmVjZWl0XGFyZW5hc1xBcmVuYUhhbmRsZXI7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xhcmVuYXNcQ3JlYXRlQXJlbmE7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xhcmVuYXNcRGVsZXRlQXJlbmE7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xhcmVuYXNcRXZlbnRBcmVuYTsKdXNlIG1pbmVjZWl0XGNvbW1hbmRzXGFyZW5hc1xTZXRBcmVuYVNwYXduOwp1c2UgbWluZWNlaXRcY29tbWFuZHNcYmFuc1xNaW5lY2VpdEJhbkNvbW1hbmQ7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xiYW5zXE1pbmVjZWl0QmFuSVBDb21tYW5kOwp1c2UgbWluZWNlaXRcY29tbWFuZHNcYmFuc1xNaW5lY2VpdEJhbkxpc3RDb21tYW5kOwp1c2UgbWluZWNlaXRcY29tbWFuZHNcYmFuc1xNaW5lY2VpdFBhcmRvbkNvbW1hbmQ7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xiYW5zXE1pbmVjZWl0UGFyZG9uSVBDb21tYW5kOwp1c2UgbWluZWNlaXRcY29tbWFuZHNcYmFuc1xNaW5lY2VpdFJlc2V0QmFuczsKdXNlIG1pbmVjZWl0XGNvbW1hbmRzXGJhc2ljXEZseUNvbW1hbmQ7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xiYXNpY1xGcmVlemVDb21tYW5kOwp1c2UgbWluZWNlaXRcY29tbWFuZHNcYmFzaWNcR2FtZW1vZGVDb21tYW5kOwp1c2UgbWluZWNlaXRcY29tbWFuZHNcYmFzaWNcSGVhbENvbW1hbmQ7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xiYXNpY1xIdWJDb21tYW5kOwp1c2UgbWluZWNlaXRcY29tbWFuZHNcb3RoZXJcTWluZWNlaXRNZUNvbW1hbmQ7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xvdGhlclxNaW5lY2VpdFRlbGxDb21tYW5kOwp1c2UgbWluZWNlaXRcY29tbWFuZHNcYmFzaWNcTXV0ZUNvbW1hbmQ7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xiYXNpY1xQbGF5ZXJJbmZvQ29tbWFuZDsKdXNlIG1pbmVjZWl0XGNvbW1hbmRzXGJhc2ljXFNldExlYWRlcmJvYXJkSG9sb2dyYW07CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xiYXNpY1xTdGF0c0NvbW1hbmQ7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xkdWVsc1xEdWVsQ29tbWFuZDsKdXNlIG1pbmVjZWl0XGNvbW1hbmRzXGR1ZWxzXFNwZWNDb21tYW5kOwp1c2UgbWluZWNlaXRcY29tbWFuZHNca2l0c1xMaXN0S2l0czsKdXNlIG1pbmVjZWl0XGNvbW1hbmRzXG90aGVyXE1pbmVjZWl0VGVsZXBvcnRDb21tYW5kOwp1c2UgbWluZWNlaXRcY29tbWFuZHNccmFua3NcQ3JlYXRlUmFuazsKdXNlIG1pbmVjZWl0XGNvbW1hbmRzXHJhbmtzXERlbGV0ZVJhbms7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xyYW5rc1xMaXN0UmFua3M7CnVzZSBtaW5lY2VpdFxjb21tYW5kc1xyYW5rc1xTZXRSYW5rczsKdXNlIG1pbmVjZWl0XGRhdGFcbXlzcWxcQXN5bmNDcmVhdGVEYXRhYmFzZTsKdXNlIG1pbmVjZWl0XGRpc2NvcmRcRGlzY29yZFV0aWw7CnVzZSBtaW5lY2VpdFxkdWVsc1xsZXZlbFxjbGFzc2ljXENsYXNzaWNEdWVsR2VuOwp1c2UgbWluZWNlaXRcZHVlbHNcbGV2ZWxcY2xhc3NpY1xDbGFzc2ljU3BsZWVmR2VuOwp1c2UgbWluZWNlaXRcZHVlbHNcbGV2ZWxcY2xhc3NpY1xDbGFzc2ljU3Vtb0dlbjsKdXNlIG1pbmVjZWl0XGR1ZWxzXER1ZWxIYW5kbGVyOwp1c2UgbWluZWNlaXRcZHVlbHNcbGV2ZWxcZHVlbFxCdXJudER1ZWxHZW47CnVzZSBtaW5lY2VpdFxldmVudHNcRXZlbnRNYW5hZ2VyOwp1c2UgbWluZWNlaXRcZ2FtZVxlbnRpdGllc1xGaXNoaW5nSG9vazsKdXNlIG1pbmVjZWl0XGdhbWVcZW50aXRpZXNcTWluZWNlaXRJdGVtRW50aXR5Owp1c2UgbWluZWNlaXRcZ2FtZVxlbnRpdGllc1xSZXBsYXlBcnJvdzsKdXNlIG1pbmVjZWl0XGdhbWVcZW50aXRpZXNcUmVwbGF5SHVtYW47CnVzZSBtaW5lY2VpdFxnYW1lXGVudGl0aWVzXFJlcGxheUl0ZW1FbnRpdHk7CnVzZSBtaW5lY2VpdFxnYW1lXGVudGl0aWVzXFNwbGFzaFBvdGlvbjsKdXNlIG1pbmVjZWl0XGdhbWVcaXRlbXNcSXRlbUhhbmRsZXI7CnVzZSBtaW5lY2VpdFxnYW1lXGxlYWRlcmJvYXJkXExlYWRlcmJvYXJkczsKdXNlIG1pbmVjZWl0XGdhbWVcbGV2ZWxcZ2VuXE1pbmVjZWl0R2VuTWFuYWdlcjsKdXNlIG1pbmVjZWl0XGtpdHNcS2l0czsKdXNlIG1pbmVjZWl0XG1haXRlbmFuY2VccmVwb3J0c1xSZXBvcnRNYW5hZ2VyOwp1c2UgbWluZWNlaXRccGFydGllc1xQYXJ0eU1hbmFnZXI7CnVzZSBtaW5lY2VpdFxwbGF5ZXJcaW5mb1xkdWVsc1xkdWVscmVwbGF5XGRhdGFcV29ybGRSZXBsYXlEYXRhOwp1c2UgbWluZWNlaXRccGxheWVyXGluZm9cZHVlbHNcZHVlbHJlcGxheVxSZXBsYXlNYW5hZ2VyOwp1c2UgbWluZWNlaXRccGxheWVyXFBsYXllckhhbmRsZXI7CnVzZSBtaW5lY2VpdFxwbGF5ZXJccmFua3NcUmFua0hhbmRsZXI7CnVzZSBwb2NrZXRtaW5lXGNvbW1hbmRcQ29tbWFuZDsKdXNlIHBvY2tldG1pbmVcZW50aXR5XEVudGl0eTsKdXNlIHBvY2tldG1pbmVccGx1Z2luXFBsdWdpbkJhc2U7CnVzZSBwb2NrZXRtaW5lXHV0aWxzXENvbmZpZzsKCmNsYXNzIE1pbmVjZWl0Q29yZSBleHRlbmRzIFBsdWdpbkJhc2UKewoKICAgIC8vIFRPRE8gUE9TU0lCTFkgQUREIFJFU09VUkNFIFBBQ0tTIFNPIFRIQVQgVEhFWSBTSE9XIFVQIElOIEZPUk1TCiAgICAvLyBUT0RPIEFERCBDVVNUT00gREVBVEggTUVTU0FHRVMuCiAgICAvLyBUT0RPIEZJWCBDT05TSVNURU5DWSBBVVRPQ0xJQ0sgREVURUNUT1IgLT4gTEFURVIKICAgIC8vIFRPRE8gQUREIENIRUNLIElGIFBMQVlFUiBTV0lOR1MgVEhFSVIgQVJNUyBXSEVOIEhJVFRJTkcgVEhFIE9USEVSCiAgICAvLyBUT0RPIEZJWCBEVUVMUyBOT1QgRU5ESU5HIFdIRU4gUExBWUVSIERJRVMKICAgIC8vIFRPRE8gQUREIENVU1RPTSBLSVQgU0VUVVAKICAgIC8vIFRPRE8gRklYIFBFUk1JU1NJT05TIEZPUiBQTEFZRVJTIC0+IEJBU0VEIE9GRiBSQU5LUyBOT1QgUExBWUVSUyAtPiBURVNURUQKICAgIC8vIFRPRE8gQ09NRSBVUCBXSVRIIEZFQVRVUkVTIFRPIElOQ0VOVElWSVpFIFBFT1BMRSBUTyBCVVkgVklQICYgVklQKwogICAgLy8gVE9ETyBQQVJUSUNMRVMgLT4gRmlndXJlIG91dCBob3cKICAgIC8vIFRPRE8gRklHVVJFIE9VVCBIT1cgVEVSUkFJTiBHRU5FUkFUSU9OIFdPUktTCgogICAgLyogQHZhciBLaXRzICovCiAgICBwcml2YXRlIHN0YXRpYyAka2l0czsKCiAgICAvKiBAdmFyIFBsYXllckhhbmRsZXIgKi8KICAgIHByaXZhdGUgc3RhdGljICRwbGF5ZXJIYW5kbGVyOwoKICAgIC8qIEB2YXIgUmFua0hhbmRsZXIgKi8KICAgIHByaXZhdGUgc3RhdGljICRyYW5rSGFuZGxlcjsKCiAgICAvKiBAdmFyIEl0ZW1IYW5kbGVyICovCiAgICBwcml2YXRlIHN0YXRpYyAkaXRlbUhhbmRsZXI7CgogICAgLyogQHZhciBBcmVuYUhhbmRsZXIgKi8KICAgIHByaXZhdGUgc3RhdGljICRhcmVuYXM7CgogICAgLyogQHZhciBEdWVsSGFuZGxlciAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJGR1ZWxIYW5kbGVyOwoKICAgIC8qIEB2YXIgTWluZWNlaXRDb3JlICovCiAgICBwcml2YXRlIHN0YXRpYyAkaW5zdGFuY2U7CgogICAgLyogQHZhciBMZWFkZXJib2FyZHMgKi8KICAgIHByaXZhdGUgc3RhdGljICRsZWFkZXJib2FyZDsKCiAgICAvKiBAdmFyIFBhcnR5TWFuYWdlciAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJHBhcnR5TWFuYWdlcjsKCiAgICAvKiBAdmFyIFJlcGxheU1hbmFnZXIgKi8KICAgIHByaXZhdGUgc3RhdGljICRyZXBsYXlNYW5hZ2VyOwoKICAgIC8qKiBAdmFyIFJlcG9ydE1hbmFnZXIgKi8KICAgIHByaXZhdGUgc3RhdGljICRyZXBvcnRNYW5hZ2VyOwoKICAgIC8qKiBAdmFyIEV2ZW50TWFuYWdlciAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJGV2ZW50TWFuYWdlcjsKCiAgICAvKiogQHZhciBNaW5lY2VpdEdlbk1hbmFnZXIgKi8KICAgIHByaXZhdGUgc3RhdGljICRnZW5lcmF0b3JNYW5hZ2VyOwoKICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJGRhdGFGb2xkZXI7CgogICAgLyogQHZhciBib29sCiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgcGFydGllcyBhcmUgZW5hYmxlZAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUEFSVElFU19FTkFCTEVEID0gZmFsc2U7CgogICAgLyogQHZhciBib29sCiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgcmVwbGF5cyBhcmUgZW5hYmxlZC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFUExBWV9FTkFCTEVEID0gdHJ1ZTsKCiAgICAvKioKICAgICAqIEB2YXIgYm9vbAogICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG15c3FsIGlzIGVuYWJsZWQuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBNWVNRTF9FTkFCTEVEID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqIERldGVybWluZXMgd2hldGhlciBkaXNjb3JkIGxvZ3MgaXMgZW5hYmxlZC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IERJU0NPUkRfRU5BQkxFRCA9IHRydWU7CgoKICAgIC8qKgogICAgICogIEB2YXIgYm9vbAogICAgICogIERldGVybWluZXMgd2hldGhlciB0aGUgbGltaXRlZCBmZWF0dXJlcyB0aGluZyBpcyBlbmFibGVkIG9yIG5vdC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IExJTUlURURfRkVBVFVSRVNfRU5BQkxFRCA9IGZhbHNlOwoKCiAgICAvKiogQHZhciBib29sCiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGF1dG9jbGljayBkZXRlY3Rpb24gaXMgZW5hYmxlZC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEFVVE9DTElDS19ERVRFQ1RPUl9FTkFCTEVEID0gdHJ1ZTsgLy8gVE9ETyBUVVJOIEJBQ0sgT04KCgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBST1hZX0VOQUJMRUQgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIFdoZW4gdGhlIHBsdWdpbnMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvbkVuYWJsZSgpIHsKCiAgICAgICAgc2VsZjo6JGluc3RhbmNlID0gJHRoaXM7CgogICAgICAgIHNlbGY6OiRnZW5lcmF0b3JNYW5hZ2VyID0gbmV3IE1pbmVjZWl0R2VuTWFuYWdlcigkdGhpcyk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyR2VuZXJhdG9ycygpOwoKICAgICAgICBzZWxmOjokZGF0YUZvbGRlciA9ICR0aGlzLT5nZXREYXRhRm9sZGVyKCk7CiAgICAgICAgJHRoaXMtPmxvYWRMZXZlbHMoKTsKCiAgICAgICAgJHRoaXMtPnNhdmVSZXNvdXJjZSgibWluZWNlaXQueW1sIik7CgogICAgICAgICR0aGlzLT5yZWdpc3RlckVudGl0aWVzKCk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZHMoKTsKCiAgICAgICAgc2VsZjo6JHJhbmtIYW5kbGVyID0gbmV3IFJhbmtIYW5kbGVyKCR0aGlzKTsKICAgICAgICBzZWxmOjokcGxheWVySGFuZGxlciA9IG5ldyBQbGF5ZXJIYW5kbGVyKCR0aGlzKTsKICAgICAgICBzZWxmOjokaXRlbUhhbmRsZXIgPSBuZXcgSXRlbUhhbmRsZXIoKTsKICAgICAgICBzZWxmOjoka2l0cyA9IG5ldyBLaXRzKCR0aGlzKTsKICAgICAgICBzZWxmOjokYXJlbmFzID0gbmV3IEFyZW5hSGFuZGxlcigkdGhpcyk7CiAgICAgICAgc2VsZjo6JGR1ZWxIYW5kbGVyID0gbmV3IER1ZWxIYW5kbGVyKCR0aGlzKTsKICAgICAgICBzZWxmOjokcmVwbGF5TWFuYWdlciA9IG5ldyBSZXBsYXlNYW5hZ2VyKCR0aGlzKTsKICAgICAgICBzZWxmOjokcGFydHlNYW5hZ2VyID0gbmV3IFBhcnR5TWFuYWdlcigkdGhpcyk7CiAgICAgICAgc2VsZjo6JHJlcG9ydE1hbmFnZXIgPSBuZXcgUmVwb3J0TWFuYWdlcigkdGhpcyk7CiAgICAgICAgc2VsZjo6JGV2ZW50TWFuYWdlciA9IG5ldyBFdmVudE1hbmFnZXIoJHRoaXMpOwoKICAgICAgICBzZWxmOjokbGVhZGVyYm9hcmQgPSBuZXcgTGVhZGVyYm9hcmRzKCR0aGlzKTsKCiAgICAgICAgaWYoc2VsZjo6TVlTUUxfRU5BQkxFRCkgewogICAgICAgICAgICAkdGFzayA9IG5ldyBBc3luY0NyZWF0ZURhdGFiYXNlKHNlbGY6OiRraXRzLT5nZXRLaXRzTG9jYWwoKSk7CiAgICAgICAgICAgICR0aGlzLT5nZXRTZXJ2ZXIoKS0+Z2V0QXN5bmNQb29sKCktPnN1Ym1pdFRhc2soJHRhc2spOwogICAgICAgIH0KCiAgICAgICAgJHRpdGxlID0gRGlzY29yZFV0aWw6OmJvbGRUZXh0KCJPbmxpbmUiKTsKICAgICAgICAkZGF0YSA9IHNlbGY6OmdldFNlcnZlclR5cGUoKTsKICAgICAgICAkbWVzc2FnZSA9ICJ7JGRhdGF9IGlzIG5vdyAiIC4gRGlzY29yZFV0aWw6OmJvbGRUZXh0KCJPTiIpOwogICAgICAgIERpc2NvcmRVdGlsOjpzZW5kU3RhdHVzVXBkYXRlKCR0aXRsZSwgJG1lc3NhZ2UsIERpc2NvcmRVdGlsOjpHUkVFTik7CgogICAgICAgICR0aGlzLT5nZXRTZXJ2ZXIoKS0+Z2V0UGx1Z2luTWFuYWdlcigpLT5yZWdpc3RlckV2ZW50cyhuZXcgTWluZWNlaXRMaXN0ZW5lcigkdGhpcyksICR0aGlzKTsKICAgICAgICAkdGhpcy0+Z2V0U2NoZWR1bGVyKCktPnNjaGVkdWxlUmVwZWF0aW5nVGFzayhuZXcgTWluZWNlaXRUYXNrKCR0aGlzKSwgMSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG9uRGlzYWJsZSgpCiAgICB7CiAgICAgICAgJHRpdGxlID0gRGlzY29yZFV0aWw6OmJvbGRUZXh0KCJPZmZsaW5lIik7CiAgICAgICAgJGRhdGEgPSBzZWxmOjpnZXRTZXJ2ZXJUeXBlKCk7CiAgICAgICAgJG1lc3NhZ2UgPSAieyRkYXRhfSBpcyBub3cgIiAuIERpc2NvcmRVdGlsOjpib2xkVGV4dCgiT0ZGIik7CiAgICAgICAgRGlzY29yZFV0aWw6OnNlbmRTdGF0dXNVcGRhdGUoJHRpdGxlLCAkbWVzc2FnZSwgRGlzY29yZFV0aWw6OlJFRCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBMb2FkcyB0aGUgbGV2ZWxzLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGxvYWRMZXZlbHMoKSA6IHZvaWQgewoKICAgICAgICAkd29ybGRzID0gTWluZWNlaXRVdGlsOjpnZXRMZXZlbHNGcm9tRm9sZGVyKCR0aGlzKTsKCiAgICAgICAgJHNpemUgPSBjb3VudCgkd29ybGRzKTsKCiAgICAgICAgJHNlcnZlciA9ICR0aGlzLT5nZXRTZXJ2ZXIoKTsKCiAgICAgICAgaWYoJHNpemUgPiAwKSB7CiAgICAgICAgICAgIGZvcmVhY2goJHdvcmxkcyBhcyAkd29ybGQpIHsKICAgICAgICAgICAgICAgICR3b3JsZCA9IHN0cnZhbCgkd29ybGQpOwogICAgICAgICAgICAgICAgaWYgKChpc19udW1lcmljKCR3b3JsZCkgYW5kIHN0cmxlbigkd29ybGQpIDw9IDMpIG9yIHN0cnBvcygkd29ybGQsICdyZXBsYXknKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICBNaW5lY2VpdFV0aWw6OmRlbGV0ZUxldmVsKCR3b3JsZCk7CiAgICAgICAgICAgICAgICB9IGVsc2VpZighJHNlcnZlci0+aXNMZXZlbExvYWRlZCgkd29ybGQpIGFuZCAoc3RycG9zKCR3b3JsZCwgJy4nKSA9PT0gZmFsc2UpKSB7CiAgICAgICAgICAgICAgICAgICAgJHNlcnZlci0+bG9hZExldmVsKCR3b3JsZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEV2ZW50TWFuYWdlcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEV2ZW50TWFuYWdlcigpIDogRXZlbnRNYW5hZ2VyIHsKICAgICAgICByZXR1cm4gc2VsZjo6JGV2ZW50TWFuYWdlcjsKICAgIH0KCgogICAgLyoqCiAgICAgKiBAcmV0dXJuIE1pbmVjZWl0R2VuTWFuYWdlcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEdlbmVyYXRvck1hbmFnZXIoKSA6IE1pbmVjZWl0R2VuTWFuYWdlciB7CiAgICAgICAgcmV0dXJuIHNlbGY6OiRnZW5lcmF0b3JNYW5hZ2VyOwogICAgfQoKCiAgICAvKioKICAgICAqIEByZXR1cm4gUmVwb3J0TWFuYWdlcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFJlcG9ydE1hbmFnZXIoKSA6IFJlcG9ydE1hbmFnZXIgewogICAgICAgIHJldHVybiBzZWxmOjokcmVwb3J0TWFuYWdlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gUGFydHlNYW5hZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UGFydHlNYW5hZ2VyKCkgOiBQYXJ0eU1hbmFnZXIgewogICAgICAgIHJldHVybiBzZWxmOjokcGFydHlNYW5hZ2VyOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBMZWFkZXJib2FyZHMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRMZWFkZXJib2FyZHMoKSA6IExlYWRlcmJvYXJkcyB7CiAgICAgICAgcmV0dXJuIHNlbGY6OiRsZWFkZXJib2FyZDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gTWluZWNlaXRDb3JlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SW5zdGFuY2UoKSA6IE1pbmVjZWl0Q29yZSB7CiAgICAgICAgcmV0dXJuIHNlbGY6OiRpbnN0YW5jZTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gUmFua0hhbmRsZXIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSYW5rSGFuZGxlcigpIDogUmFua0hhbmRsZXIgewogICAgICAgIHJldHVybiBzZWxmOjokcmFua0hhbmRsZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFBsYXllckhhbmRsZXIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQbGF5ZXJIYW5kbGVyKCkgOiBQbGF5ZXJIYW5kbGVyIHsKICAgICAgICByZXR1cm4gc2VsZjo6JHBsYXllckhhbmRsZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEtpdHMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRLaXRzKCkgOiBLaXRzIHsKICAgICAgICByZXR1cm4gc2VsZjo6JGtpdHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEFyZW5hSGFuZGxlcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEFyZW5hcygpIDogQXJlbmFIYW5kbGVyIHsKICAgICAgICByZXR1cm4gc2VsZjo6JGFyZW5hczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gSXRlbUhhbmRsZXIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJdGVtSGFuZGxlcigpIDogSXRlbUhhbmRsZXIgewogICAgICAgIHJldHVybiBzZWxmOjokaXRlbUhhbmRsZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIER1ZWxIYW5kbGVyCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RHVlbEhhbmRsZXIoKSA6IER1ZWxIYW5kbGVyIHsKICAgICAgICByZXR1cm4gc2VsZjo6JGR1ZWxIYW5kbGVyOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBSZXBsYXlNYW5hZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UmVwbGF5TWFuYWdlcigpIDogUmVwbGF5TWFuYWdlciB7CiAgICAgICAgcmV0dXJuIHNlbGY6OiRyZXBsYXlNYW5hZ2VyOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqCiAgICAgKiBHZXRzIHRoZSByZXNvdXJjZXMgZm9sZGVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzb3VyY2VzRm9sZGVyKCkgOiBzdHJpbmcgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0RmlsZSgpIC4gJ3Jlc291cmNlcy8nOwogICAgfQoKCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqCiAgICAgKiBHZXRzIHRoZSBkaXNjb3JkIHdlYmhvb2tzLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldERpc2NvcmRXZWJob29rcygpIDogYXJyYXkgewoKICAgICAgICAkY29uZmlnID0gbmV3IENvbmZpZyhzZWxmOjokZGF0YUZvbGRlciAuICJtaW5lY2VpdC55bWwiLCBDb25maWc6OllBTUwpOwoKICAgICAgICBpZiAoJGNvbmZpZy0+ZXhpc3RzKCJ3ZWJob29rcyIpKSB7CiAgICAgICAgICAgIHJldHVybiAoYXJyYXkpJGNvbmZpZy0+Z2V0KCJ3ZWJob29rcyIpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFsibG9ncyIgPT4gIiIsICJyZXBvcnRzIiA9PiAiIiwgInN0YXR1cyIgPT4gIiJdOwogICAgfQoKCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqCiAgICAgKiBHZXRzIHRoZSBteXNxbCBkYXRhLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE15c3FsRGF0YSgpIDogYXJyYXkgewoKICAgICAgICAkY29uZmlnID0gbmV3IENvbmZpZyhzZWxmOjokZGF0YUZvbGRlciAuICJtaW5lY2VpdC55bWwiLCBDb25maWc6OllBTUwpOwoKICAgICAgICBpZigkY29uZmlnLT5leGlzdHMoIm15c3FsIikpIHsKICAgICAgICAgICAgcmV0dXJuIChhcnJheSkkY29uZmlnLT5nZXQoIm15c3FsIik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gWyJ1c2VybmFtZSIgPT4gIiIsICJkYXRhYmFzZSIgPT4gIiIsICJwYXNzd29yZCIgPT4gIiIsICJpcCIgPT4gIiIsICJwb3J0IiA9PiAzMzA2XTsKICAgIH0KCgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEdldHMgdGhlIHNlcnZlciB0eXBlLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFNlcnZlclR5cGUoKSA6IHN0cmluZyB7CgogICAgICAgICRjb25maWcgPSBuZXcgQ29uZmlnKHNlbGY6OiRkYXRhRm9sZGVyIC4gIm1pbmVjZWl0LnltbCIsIENvbmZpZzo6WUFNTCk7CgogICAgICAgICRyZXN1bHQgPSAiTWluZWNlaXQgVGVzdCI7CgogICAgICAgIGlmKCRjb25maWctPmV4aXN0cygic2VydmVyLXR5cGUiKSkgewogICAgICAgICAgICAkcmVzdWx0ID0gKHN0cmluZykkY29uZmlnLT5nZXQoInNlcnZlci10eXBlIik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdCA9PT0gIiIgPyAiTWluZWNlaXQgVGVzdCIgOiAkcmVzdWx0OwogICAgfQoKCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyB0aGUgY29tbWFuZHMuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gcmVnaXN0ZXJDb21tYW5kcygpIDogdm9pZCB7CgogICAgICAgICR0aGlzLT51bnJlZ2lzdGVyQ29tbWFuZCgnZ2FtZW1vZGUnKTsKICAgICAgICAkdGhpcy0+dW5yZWdpc3RlckNvbW1hbmQoJ2JhbicpOwogICAgICAgICR0aGlzLT51bnJlZ2lzdGVyQ29tbWFuZCgnYmFuLWlwJyk7CiAgICAgICAgJHRoaXMtPnVucmVnaXN0ZXJDb21tYW5kKCdiYW5saXN0Jyk7CiAgICAgICAgJHRoaXMtPnVucmVnaXN0ZXJDb21tYW5kKCdwYXJkb24nKTsKICAgICAgICAkdGhpcy0+dW5yZWdpc3RlckNvbW1hbmQoJ3BhcmRvbi1pcCcpOwogICAgICAgICR0aGlzLT51bnJlZ2lzdGVyQ29tbWFuZCgndHAnKTsKICAgICAgICAkdGhpcy0+dW5yZWdpc3RlckNvbW1hbmQoJ3RlbGwnKTsKICAgICAgICAkdGhpcy0+dW5yZWdpc3RlckNvbW1hbmQoJ21lJyk7CgogICAgICAgICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IExpc3RLaXRzKCkpOwogICAgICAgICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IENyZWF0ZUFyZW5hKCkpOwogICAgICAgIC8vICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IFBsYWNlQnJlYWtDb21tYW5kKCkpOwogICAgICAgICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IENyZWF0ZVJhbmsoKSk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgR2FtZW1vZGVDb21tYW5kKCkpOwogICAgICAgICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IEZyZWV6ZUNvbW1hbmQoKSk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgRmx5Q29tbWFuZCgpKTsKICAgICAgICAkdGhpcy0+cmVnaXN0ZXJDb21tYW5kKG5ldyBEdWVsQ29tbWFuZCgpKTsKICAgICAgICAkdGhpcy0+cmVnaXN0ZXJDb21tYW5kKG5ldyBIdWJDb21tYW5kKCkpOwogICAgICAgICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IEhlYWxDb21tYW5kKCkpOwogICAgICAgICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IERlbGV0ZUFyZW5hKCkpOwogICAgICAgICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IERlbGV0ZVJhbmsoKSk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgTGlzdFJhbmtzKCkpOwogICAgICAgICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IFN0YXRzQ29tbWFuZCgpKTsKICAgICAgICAkdGhpcy0+cmVnaXN0ZXJDb21tYW5kKG5ldyBTcGVjQ29tbWFuZCgpKTsKICAgICAgICAkdGhpcy0+cmVnaXN0ZXJDb21tYW5kKG5ldyBTZXRSYW5rcygpKTsKICAgICAgICAkdGhpcy0+cmVnaXN0ZXJDb21tYW5kKG5ldyBTZXRMZWFkZXJib2FyZEhvbG9ncmFtKCkpOwogICAgICAgIC8vICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IEVuYWJsZVRhZ0NvbW1hbmQoKSk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgUGxheWVySW5mb0NvbW1hbmQoKSk7CiAgICAgICAgLy8gJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgVmVyaWZ5Q29tbWFuZCgpKTsKICAgICAgICAkdGhpcy0+cmVnaXN0ZXJDb21tYW5kKG5ldyBNaW5lY2VpdEJhbkNvbW1hbmQoImJhbiIpKTsKICAgICAgICAkdGhpcy0+cmVnaXN0ZXJDb21tYW5kKG5ldyBNaW5lY2VpdEJhbklQQ29tbWFuZCgiYmFuLWlwIikpOwogICAgICAgIC8vICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IExpbmtDb21tYW5kKCkpOwogICAgICAgICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IE1pbmVjZWl0QmFuTGlzdENvbW1hbmQoJ2Jhbmxpc3QnKSk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgTWluZWNlaXRQYXJkb25Db21tYW5kKCdwYXJkb24nKSk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgTWluZWNlaXRQYXJkb25JUENvbW1hbmQoJ3BhcmRvbi1pcCcpKTsKICAgICAgICAkdGhpcy0+cmVnaXN0ZXJDb21tYW5kKG5ldyBNaW5lY2VpdFRlbGVwb3J0Q29tbWFuZCgndHAnKSk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgTXV0ZUNvbW1hbmQodHJ1ZSkpOwogICAgICAgICR0aGlzLT5yZWdpc3RlckNvbW1hbmQobmV3IE11dGVDb21tYW5kKGZhbHNlKSk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgTWluZWNlaXRUZWxsQ29tbWFuZCgidGVsbCIpKTsKICAgICAgICAkdGhpcy0+cmVnaXN0ZXJDb21tYW5kKG5ldyBNaW5lY2VpdE1lQ29tbWFuZCgibWUiKSk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgTWluZWNlaXRSZXNldEJhbnMoKSk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyQ29tbWFuZChuZXcgRXZlbnRBcmVuYSgpKTsKICAgICAgICAkdGhpcy0+cmVnaXN0ZXJDb21tYW5kKG5ldyBTZXRBcmVuYVNwYXduKCkpOwoKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBDb21tYW5kICRjb21tYW5kCiAgICAgKgogICAgICogUmVnaXN0ZXJzIGEgY29tbWFuZC4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiByZWdpc3RlckNvbW1hbmQoQ29tbWFuZCAkY29tbWFuZCkgOiB2b2lkIHsKCiAgICAgICAgJHRoaXMtPmdldFNlcnZlcigpLT5nZXRDb21tYW5kTWFwKCktPnJlZ2lzdGVyKCRjb21tYW5kLT5nZXROYW1lKCksICRjb21tYW5kKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbW1hbmROYW1lCiAgICAgKgogICAgICogVW5yZWdpc3RlcnMgYSBjb21tYW5kLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHVucmVnaXN0ZXJDb21tYW5kKHN0cmluZyAkY29tbWFuZE5hbWUpIDogdm9pZCB7CgogICAgICAgICRjb21tYW5kTWFwID0gJHRoaXMtPmdldFNlcnZlcigpLT5nZXRDb21tYW5kTWFwKCk7CiAgICAgICAgJGNtZCA9ICRjb21tYW5kTWFwLT5nZXRDb21tYW5kKCRjb21tYW5kTmFtZSk7CiAgICAgICAgaWYoJGNtZCAhPT0gbnVsbCkgewogICAgICAgICAgICAkY29tbWFuZE1hcC0+dW5yZWdpc3RlcigkY21kKTsKICAgICAgICB9CgogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIHRoZSBlbnRpdGllcy4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiByZWdpc3RlckVudGl0aWVzKCkgOiB2b2lkIHsKCiAgICAgICAgRW50aXR5OjpyZWdpc3RlckVudGl0eShTcGxhc2hQb3Rpb246OmNsYXNzLCBmYWxzZSwgWydUaHJvd25Qb3Rpb24nLCAnbWluZWNyYWZ0OnBvdGlvbicsICd0aHJvd25wb3Rpb24nXSk7CiAgICAgICAgRW50aXR5OjpyZWdpc3RlckVudGl0eShGaXNoaW5nSG9vazo6Y2xhc3MsIGZhbHNlLCBbIkZpc2hpbmdIb29rIiwgIm1pbmVjcmFmdDpmaXNoaW5nX2hvb2siXSk7CiAgICAgICAgRW50aXR5OjpyZWdpc3RlckVudGl0eShNaW5lY2VpdEl0ZW1FbnRpdHk6OmNsYXNzLCBmYWxzZSwgWydJdGVtJywgJ21pbmVjcmFmdDppdGVtJ10pOwogICAgICAgIEVudGl0eTo6cmVnaXN0ZXJFbnRpdHkoUmVwbGF5SXRlbUVudGl0eTo6Y2xhc3MsIGZhbHNlLCBbIlJlcGxheUl0ZW0iXSk7CiAgICAgICAgRW50aXR5OjpyZWdpc3RlckVudGl0eShSZXBsYXlBcnJvdzo6Y2xhc3MsIGZhbHNlLCBbIlJlcGxheUFycm93Il0pOwogICAgICAgIEVudGl0eTo6cmVnaXN0ZXJFbnRpdHkoUmVwbGF5SHVtYW46OmNsYXNzLCB0cnVlKTsKCiAgICB9CgoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIHRoZSBnZW5lcmF0b3JzLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlZ2lzdGVyR2VuZXJhdG9ycygpIDogdm9pZCB7CgogICAgICAgIHNlbGY6OiRnZW5lcmF0b3JNYW5hZ2VyLT5yZWdpc3RlckdlbmVyYXRvcihNaW5lY2VpdFV0aWw6OkNMQVNTSUNfRFVFTF9HRU4sIENsYXNzaWNEdWVsR2VuOjpjbGFzcywgV29ybGRSZXBsYXlEYXRhOjpUWVBFX0RVRUwpOwogICAgICAgIHNlbGY6OiRnZW5lcmF0b3JNYW5hZ2VyLT5yZWdpc3RlckdlbmVyYXRvcihNaW5lY2VpdFV0aWw6OkNMQVNTSUNfU1VNT19HRU4sIENsYXNzaWNTdW1vR2VuOjpjbGFzcywgV29ybGRSZXBsYXlEYXRhOjpUWVBFX1NVTU8pOwogICAgICAgIHNlbGY6OiRnZW5lcmF0b3JNYW5hZ2VyLT5yZWdpc3RlckdlbmVyYXRvcihNaW5lY2VpdFV0aWw6OkNMQVNTSUNfU1BMRUVGX0dFTiwgQ2xhc3NpY1NwbGVlZkdlbjo6Y2xhc3MsIFdvcmxkUmVwbGF5RGF0YTo6VFlQRV9TUExFRUYpOwoKICAgICAgICAvLyBzZWxmOjokZ2VuZXJhdG9yTWFuYWdlci0+cmVnaXN0ZXJHZW5lcmF0b3IoTWluZWNlaXRVdGlsOjpSSVZFUl9EVUVMX0dFTiwgUml2ZXJEdWVsR2VuOjpjbGFzcywgV29ybGRSZXBsYXlEYXRhOjpUWVBFX0RVRUwpOwogICAgICAgIC8vIHNlbGY6OiRnZW5lcmF0b3JNYW5hZ2VyLT5yZWdpc3RlckdlbmVyYXRvcihNaW5lY2VpdFV0aWw6OkJVUk5UX0RVRUxfR0VOLCBCdXJudER1ZWxHZW46OmNsYXNzLCBXb3JsZFJlcGxheURhdGE6OlRZUEVfRFVFTCk7CiAgICB9Cn0="))
;

Function Calls

base64_decode 1

Variables

$nsjsjsnsn base64_decode

Stats

MD5 0d11f4973d822cc04f925580d8077e09
Eval Count 1
Decode Time 96 ms