Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php eval("?>".base64_decode("PD9waHANCmRlZmluZWQoJ0JBU0VQQVRIJykgT1IgZXhpdCgnTm8gZGlyZWN..

Decoded Output download

?>b'<?php
defined(\'BASEPATH\') OR exit(\'No direct script access allowed\');

class C_tpp extends AUTH_Controller {
    public function __construct() {
        parent::__construct();
        
        $this->load->model(\'M_config\');
        $this->load->model(\'M_bagian\');
        $this->load->model(\'M_absen\');
        $this->load->model(\'M_tpp\');
        $this->load->model(\'M_master\',\'openModel\');
        date_default_timezone_set(\'Asia/Seoul\');
    }

    private $page       = \'Data Kedisiplinan\';
    private $judul      = \'Data Kedisiplinan\';
    private $deskripsi  = \'Manage Data Kedisiplinan\';

    public function ringkasanTPPTahun() {

        // $data[\'ringkasan\']      = $this->M_tpp->ringkasanTPPTahun();
        $data[\'ringkasan\']      = $this->M_tpp->ringkasanTPPTahunPosting();
        echo json_encode($data[\'ringkasan\']);
    }

    public function cekStatus() {

        $kd_skpd = $this->userdata->kd_skpd;
        $bln = $this->session->userdata(\'blnFilter\');
        $thn = $this->session->userdata(\'thnFilter\');
        $tgl = date(\'Y-m-d H:i:s\');
        $cek = $this->db->query("SELECT MIN(sts_verifikasi) as sts FROM tr_laporan WHERE MONTH(tgl)= \'$bln\' AND YEAR(tgl) = \'$thn\' AND id_user = \'$kd_skpd\' GROUP BY id_user,tgl limit 1")->row();
        if ($cek) {
            if ($cek->sts == 1) {
                $kd_skpd = $this->userdata->kd_skpd;
                $sql = "UPDATE tr_laporan SET sts_kirim = 1, tgl_kirim = \'$tgl\' WHERE MONTH(tgl)= \'$bln\' AND YEAR(tgl) = \'$thn\' AND id_user = \'$peg\' AND sts_kirim = 0";
                $this->db->query($sql);
                $hasil = $this->db->affected_rows();
                $data[\'detail\'] = $hasil .\' Data Kinerja/Aktivitas Berhasil Dikirim <i class="smile outline icon"></i>\'; 
                $data[\'filter\'] = array(\'bln\' => $bln, \'thn\' => $thn);
                $data[\'userdata\']           = $this->userdata;
                $data[\'deskripsi_detail\']   = "Info";                
                echo show_my_modal(\'modals/modal_ppt_error\', \'detail-ppt\', $data, \'sm\');
            }else{
                $data[\'detail\'] = \'Data Belum Diverifikasi <i class="frown outline icon"></i>\'; 
                $data[\'filter\'] = array(\'bln\' => $bln, \'thn\' => $thn);
                $data[\'userdata\']           = $this->userdata;
                $data[\'deskripsi_detail\']   = "Info";
                echo show_my_modal(\'modals/modal_ppt_error\', \'detail-ppt\', $data, \'sm\');
            }
        }else{
            $data[\'detail\'] = \'Data Belum ada <i class="meh outline icon"></i>\'; 
            $data[\'filter\'] = array(\'bln\' => $bln, \'thn\' => $thn);
            $data[\'userdata\']           = $this->userdata;
            $data[\'deskripsi_detail\']   = "Info";
            echo show_my_modal(\'modals/modal_ppt_error\', \'detail-ppt\', $data, \'sm\');
        }
    }

    public function prestasi() {

        $data[\'userdata\']   = $this->userdata;
        $session = array(\'blnFilter\'  => date(\'m\'),\'thnFilter\'  => date(\'Y\'));
        $this->session->set_userdata($session);
        $data[\'page\']       = "Absensi";
        $data[\'judul\']      = "Absensi";
        $data[\'menu_aktif\'] = "LAPORAN TPP";
        $data[\'deskripsi\']  = "LAPORAN TPP ASPEK PRESTASI KERJA";
        
        $this->template->views(\'prestasi_kerja/Vprestasi\', $data); 
    }
    //dipakai
    public function prilaku() {

        $data[\'userdata\']   = $this->userdata;
        $session = array(\'blnFilter\'  => date(\'m\'),\'thnFilter\'  => date(\'Y\'));
        $this->session->set_userdata($session);
        $data[\'page\']       = "Absensi";
        $data[\'judul\']      = "Absensi";
        $data[\'menu_aktif\'] = "LAPORAN TPP";
        $data[\'deskripsi\']  = "LAPORAN TPP ASPEK PRILAKU KERJA";
        
        $this->template->views(\'perilaku_kerja/Vperilaku\', $data); 
    }
    

     public function pengajuan() {

        $data[\'userdata\']   = $this->userdata;
        $session = array(\'blnFilter\'  => date(\'m\'),\'thnFilter\'  => date(\'Y\'));
        $this->session->set_userdata($session);
        $data[\'page\']       = "Absensi";
        $data[\'judul\']      = "Absensi";
        $data[\'menu_aktif\'] = "LAPORAN TPP";
        $data[\'deskripsi\']  = "PENGAJUAN TRANSFER BENDAHARA";
        
        $this->template->views(\'pengajuan_bendahara/Vpengajuan\', $data); 
    }
    public function tampilrekapprilaku() {
        $thn = $this->input->post(\'thn\');
        $bln = $this->input->post(\'bln\');
        $kriteria = $this->input->post(\'kriteria\');
        $cetak = false;
        $data[\'dataList\'] = $this->M_tpp->selectRekapPrilaku($cetak);
        
        // $data[\'detail\'] = $bln.\'/\'.$thn.\'/\'.$kriteria.\'/\';
        $data[\'userdata\']   = $this->userdata;
        $this->load->view(\'perilaku_kerja/list_prilaku\', $data);
    }

    public function tampilrekapprestasi() {
        $thn = $this->input->post(\'thn\');
        $bln = $this->input->post(\'bln\');
        $kriteria = $this->input->post(\'kriteria\');
        $cetak = false;
        $data[\'dataList\'] = $this->M_tpp->selectRekapPrestasi($cetak);
        
        // $data[\'detail\'] = $bln.\'/\'.$thn.\'/\'.$kriteria.\'/\';
        $data[\'userdata\']   = $this->userdata;
        $this->load->view(\'perilaku_kerja/list_prilaku\', $data);
    }

    public function tampilrekappengajuan() {
        $thn = $this->input->post(\'thn\');
        $bln = $this->input->post(\'bln\');
        $kriteria = $this->input->post(\'kriteria\');
        $cetak = false;
        $data[\'dataList\'] = $this->M_tpp->selectRekapPengajuan($cetak);
        
        // $data[\'detail\'] = $bln.\'/\'.$thn.\'/\'.$kriteria.\'/\';
        $data[\'userdata\']   = $this->userdata;
        $this->load->view(\'perilaku_kerja/list_prilaku\', $data);
    }

    
    public function pilihAtasan() {

        $bln = $_POST[\'bln\'];
        $thn = $_POST[\'thn\'];
        $kriteria = $_POST[\'kriteria\'];
        $kd_skpd = $this->userdata->kd_skpd;
        
        $sql = "SELECT * FROM admin WHERE kd_skpd = \'$kd_skpd\' and level = 4 and (kd_jab IN (\'6\',\'7\',\'8\',\'15\'))";
        $data[\'detail\'] = $this->db->query($sql)->result_array();
        $data[\'filter\'] = array(\'bln\' => $bln, \'thn\' => $thn, \'kriteria\' => $kriteria);
        $data[\'userdata\']           = $this->userdata;
        $data[\'deskripsi_detail\']   = "Pejabat Penandatangan";

        echo show_my_modal(\'modals/modal_cetak_prilaku\', \'detail-cetak\', $data, \'lg\');
    }
    public function pilihAtasanPrestasi() {

         $bln = $_POST[\'bln\'];
        $thn = $_POST[\'thn\'];
        $kriteria = $_POST[\'kriteria\'];
        $kd_skpd = $this->userdata->kd_skpd;
        
        $sql = "SELECT * FROM admin WHERE kd_skpd = \'$kd_skpd\' and level = 4 and (kd_jab IN (\'6\',\'7\',\'8\',\'15\'))";
        $data[\'detail\'] = $this->db->query($sql)->result_array();
        $data[\'filter\'] = array(\'bln\' => $bln, \'thn\' => $thn, \'kriteria\' => $kriteria);
        $data[\'userdata\']           = $this->userdata;
        $data[\'deskripsi_detail\']   = "Pejabat Penandatangan";

        echo show_my_modal(\'modals/modal_cetak_prestasi\', \'detail-cetak\', $data, \'lg\');
    }

    public function pilihAtasanPengajuan() {

        $bln = $_POST[\'bln\'];
        $thn = $_POST[\'thn\'];
        $kriteria = $_POST[\'kriteria\'];
        $kd_skpd = $this->userdata->kd_skpd;
        
        $sql = "SELECT * FROM admin WHERE kd_skpd = \'$kd_skpd\' and level = 4 and (kd_jab IN (\'6\',\'7\',\'8\',\'15\'))";
        $data[\'detail\'] = $this->db->query($sql)->result_array();
        $data[\'filter\'] = array(\'bln\' => $bln, \'thn\' => $thn, \'kriteria\' => $kriteria);
        $data[\'userdata\']           = $this->userdata;
        $data[\'deskripsi_detail\']   = "Pejabat Penandatangan";

        echo show_my_modal(\'modals/modal_cetak_pengajuan\', \'detail-cetak\', $data, \'lg\');
    }


    public function cetakRekap() {
        
        $session = array(\'ctipe\'  => $_POST[\'tipe\'],\'ckriteria\'  => $_POST[\'kriteria\'],\'cbln\'  => $_POST[\'bulan\'],\'cthn\'  => $_POST[\'tahun\'],\'cnip1\'  => $_POST[\'nip_pejabat1\'],
            \'cnama1\'  => $_POST[\'nama_pejabat1\'],\'cjbt1\'  => $_POST[\'jabatan1\'],\'cnip2\'  => $_POST[\'nip_pejabat2\'],
            \'cnama2\'  => $_POST[\'nama_pejabat2\'],\'cjbt2\'  => $_POST[\'jabatan2\'],\'cnip3\'  => $_POST[\'nip_pejabat3\'],
            \'cnama3\'  => $_POST[\'nama_pejabat3\'],\'cjbt3\'  => $_POST[\'jabatan3\'],\'cnip4\'  => $_POST[\'nip_pejabat4\'],
            \'cnama4\'  => $_POST[\'nama_pejabat4\'],\'cjbt4\'  => $_POST[\'jabatan4\']);
        $this->session->set_userdata($session);

        echo show_my_modal(\'modals/modal_cetak_rekap_prilaku\', \'detail-pdf\', \'\', \'lg\');
        
    }

    public function cetakRekapPrestasi() {
        // print_r($this->userdata->kd_skpd);die();
         $session = array(\'ctipe\'  => $_POST[\'tipe\'],\'ckriteria\'  => $_POST[\'kriteria\'],\'cbln\'  => $_POST[\'bulan\'],\'cthn\'  => $_POST[\'tahun\'],\'cnip1\'  => $_POST[\'nip_pejabat1\'],
            \'cnama1\'  => $_POST[\'nama_pejabat1\'],\'cjbt1\'  => $_POST[\'jabatan1\'],\'cnip2\'  => $_POST[\'nip_pejabat2\'],
            \'cnama2\'  => $_POST[\'nama_pejabat2\'],\'cjbt2\'  => $_POST[\'jabatan2\'],\'cnip3\'  => $_POST[\'nip_pejabat3\'],
            \'cnama3\'  => $_POST[\'nama_pejabat3\'],\'cjbt3\'  => $_POST[\'jabatan3\'],\'cnip4\'  => $_POST[\'nip_pejabat4\'],
            \'cnama4\'  => $_POST[\'nama_pejabat4\'],\'cjbt4\'  => $_POST[\'jabatan4\']);
        $this->session->set_userdata($session);

        echo show_my_modal(\'modals/modal_cetak_rekap_prestasi\', \'detail-pdf\', \'\', \'lg\');
        
    }

    public function cetakRekapPengajuan() {
        // print_r($this->userdata->kd_skpd);die();
        $session = array(\'ctipe\'  => $_POST[\'tipe\'],\'ckriteria\'  => $_POST[\'kriteria\'],\'cbln\'  => $_POST[\'bulan\'],\'cthn\'  => $_POST[\'tahun\'],\'cnip1\'  => $_POST[\'nip_pejabat1\'],
            \'cnama1\'  => $_POST[\'nama_pejabat1\'],\'cjbt1\'  => $_POST[\'jabatan1\'],\'cnip2\'  => $_POST[\'nip_pejabat2\'],
            \'cnama2\'  => $_POST[\'nama_pejabat2\'],\'cjbt2\'  => $_POST[\'jabatan2\'],\'cnip3\'  => $_POST[\'nip_pejabat3\'],
            \'cnama3\'  => $_POST[\'nama_pejabat3\'],\'cjbt3\'  => $_POST[\'jabatan3\'],\'cnip4\'  => $_POST[\'nip_pejabat4\'],
            \'cnama4\'  => $_POST[\'nama_pejabat4\'],\'cjbt4\'  => $_POST[\'jabatan4\']);
        $this->session->set_userdata($session);

        echo show_my_modal(\'modals/modal_cetak_rekap_pengajuan\', \'detail-pdf\', \'\', \'lg\');
        
    }

    public function postingTPP() {

        $msg = $this->M_tpp->postingTPP();
        $data[\'detail\'] = $msg; 
        
        $data[\'userdata\']           = $this->userdata;
        $data[\'deskripsi_detail\']   = "Info";                
        echo show_my_modal(\'modals/modal_ppt_error\', \'detail-ppt\', $data, \'md\');
        // echo json_encode($data);
        
    }

    public function cetakRekapPdf() {
        $cetak = true;
        $judul = \'Asp_Prilaku_\'.$this->session->userdata(\'ckriteria\').\'_\'.$this->session->userdata(\'cbln\').\'_\'.$this->session->userdata(\'cthn\');
        $data = $this->M_tpp->selectRekapPrilaku($cetak);
        $this->_mpdf(\'\',$data,10,10,11,\'L\', $judul); 
    }

    public function cetakRekapPrestasiPdf() {
        $cetak = true;
        $judul = \'Asp_Prestasi_\'.$this->session->userdata(\'ckriteria\').\'_\'.$this->session->userdata(\'cbln\').\'_\'.$this->session->userdata(\'cthn\');
        $data = $this->M_tpp->selectRekapPrestasi($cetak);
        $this->_mpdf(\'\',$data,10,10,11,\'L\', $judul); 
    }

    public function cetakRekapPengajuanPdf() {
        $cetak = true;
        $judul = \'Pengajuan_\'.$this->session->userdata(\'ckriteria\').\'_\'.$this->session->userdata(\'cbln\').\'_\'.$this->session->userdata(\'cthn\');
        $data = $this->M_tpp->selectRekapPengajuan($cetak);
        $this->_mpdf(\'\',$data,10,10,11,\'L\', $judul); 
    }


    public function absenPegawai() {

        $data[\'userdata\']   = $this->userdata;
        $session = array(\'blnFilter\'  => date(\'m\'),\'thnFilter\'  => date(\'Y\'));
        $this->session->set_userdata($session);
        $data[\'page\']       = "Absensi";
        $data[\'judul\']      = "Absensi";
        $data[\'menu_aktif\'] = "ABSENSI";
        $data[\'deskripsi\']  = "DATA ABSENSI PER USER";
        $this->template->views(\'absensi/Vabsensi\', $data); 
    }
    // dipakai
    //dipakai
    public function kedisiplinan() {

        $data[\'userdata\']   = $this->userdata;
        $session = array(\'blnFilter\'  => date(\'m\'),\'thnFilter\'  => date(\'Y\'));
        $this->session->set_userdata($session);
        $data[\'page\']       = "Absensi";
        $data[\'judul\']      = "Absensi";
        $data[\'menu_aktif\'] = "ABSENSI";
        $data[\'deskripsi\']  = "KEDISIPLINAN";
        $this->template->views(\'absensi/Vdisiplin\', $data); 
    }

    public function tampilKedisiplinan() {
        $bln = $this->input->post(\'bln\');
        $thn = $this->input->post(\'thn\');

        // if($bln <> \'\' && $thn<>\'\'){
            $session = array(\'blnFilter\'  => $bln,\'thnFilter\'  => $thn);
            $this->session->set_userdata($session);
        // }else{
        //     $bln = date(\'m\');
        //     $thn = date(\'Y\');
        // }
        $sql = "SELECT id,nip,nama,jabatan, IFNULL((SELECT STATUS FROM tr_disiplin WHERE a.`id` = tr_disiplin.`id_peg` AND bulan = \'$bln\' AND tahun = \'$thn\'),\'\') AS sts FROM admin a";
        $data[\'listdata\'] = $this->M_absen->select_query($sql);
        $data[\'userdata\']   = $this->userdata;
        $this->load->view(\'absensi/list_disiplin\', $data);
    }

    public function detaildisiplin() {
        $aksi = $_POST[\'aksi\'];
        $bln = $this->session->userdata(\'blnFilter\');
        $thn = $this->session->userdata(\'thnFilter\');
        if($aksi == "detail"){
            $id                 = $_POST[\'id\'];
            $data[\'disable\']    = \'disabled\';
            $data[\'readonly\']   = \'readonly\';
            $data[\'simpan\']     = \'hidden\';
            $data[\'ubah\']       = \'\';
            $data[\'hapus\']      = \'\';
            $data[\'aksi\']       = \'ubah\';
            // $data[\'detail\']     = $this->openModel->select_by_id(\'tr_disiplin\',$id);
            $sql = "SELECT * FROM tr_disiplin WHERE id_peg = \'$id\' AND bulan = \'$bln\' AND tahun = \'$thn\'";
            $data[\'detail\'] = $this->db->query($sql)->row_array();

        }else{
            $id = "";
            $data[\'disable\']    = \'\';
            $data[\'simpan\']     = \'\';
            $data[\'readonly\']   = \'\';
            $data[\'ubah\']       = \'hidden\';
            $data[\'hapus\']      = \'hidden\';
            $data[\'aksi\']       = \'tambah\';
            $data[\'detail\']     = array(\'id_peg\'=>trim($_POST[\'id\']),\'bulan\'=>$bln,\'tahun\'=>$thn,\'status\'=>\'\');
        }
        

        $data[\'userdata\']           = $this->userdata;
        $data[\'deskripsi_detail\']   = "Kedisiplinan";

        echo show_my_modal(\'modals/modal_detail_disiplin\', \'detail-disiplin\', $data, \'sm\');
    }


    public function addDisiplin($aksi){
        $this->form_validation->set_rules(\'id_peg\',\'Id Pegawai\',\'trim|required\');
        $this->form_validation->set_rules(\'status\',\'Status\',\'trim|required\');
        $this->form_validation->set_rules(\'bulan\',\'Bulan\',\'trim|required\');
        $this->form_validation->set_rules(\'tahun\',\'Tahun\',\'trim|required\');
        $data   = $this->input->post();
        $sts_update = array(\'status\' => $this->input->post(\'status\'));
            ;


        $id     = array(\'id_peg\'=>$data[\'id_peg\']);
        if ($this->form_validation->run() == TRUE) {
            if($aksi == "tambah"){
                $insert = $this->openModel->add(\'tr_disiplin\',$data);
                $action = "ditambahkan"; 
            }
            else{

                $insert = $this->openModel->update(\'tr_disiplin\',$sts_update,$id);
                $action = "diperbarui";
            }

            if ($insert > 0) {
                $out[\'status\'] = \'\';
                $out[\'msg\'] = show_succ_msg($this->judul.\' Berhasil \'.$action, \'20px\');
            } else {
                $out[\'status\'] = \'\';
                $out[\'msg\'] = show_err_msg($this->judul.\' Gagal \'.$action, \'20px\');
            }
        } else {
            $out[\'status\'] = \'\';
            $out[\'msg\'] = show_err_msg($this->judul.\' Belum lengkap\', \'20px\');  
        }
            
        echo json_encode($out);
    }

    // dipakai
    public function rekapAbsensi() {

        $data[\'userdata\']   = $this->userdata;
        $session = array(\'blnFilter\'  => date(\'m\'),\'thnFilter\'  => date(\'Y\'));
        $this->session->set_userdata($session);
        $data[\'page\']       = "Absensi";
        $data[\'judul\']      = "Absensi";
        $data[\'menu_aktif\'] = "ABSENSI";
        $data[\'deskripsi\']  = "REKAP ABSENSI";
        
        $this->template->views(\'absensi/Vrekapabsensi\', $data); 
    }

    public function transfer() {
        $data[\'userdata\']   = $this->userdata;
        $data[\'page\']       = "Absensi";
        $data[\'judul\']      = "Absensi";
        $data[\'deskripsi\']  = "TRANSFER DATA ABSENSI";
        $data[\'dataarsip\'] = $this->M_absen->select_all();
        $this->template->views(\'absensi/Vtransfer\', $data);
    }

    public function do_transfer() {
    
        $data[\'dataarsip\'] = $this->M_absen->transfer();
        echo json_encode($data);
        // $this->template->views(\'absensi/Vtransfer\', $data);
    }

    public function cek()
    {
        $sql= " SELECT B.USERID, Format([B.CHECKTIME],\'yyyy-mm-dd\') as Tanggal,
                Min(Format([B.CHECKTIME],\'hh:mm\')) as Masuk, Max(Format([B.CHECKTIME],\'hh:mm\')) as Pulang
                from CHECKINOUT B
                where B.USERID= 9 
                and Year([B.CHECKTIME]) = 2019
                and Month([B.CHECKTIME]) = 06 
                group by B.USERID, Format([B.CHECKTIME],\'yyyy-mm-dd\') ";
        $res = $this->mdbAbsensi->query($sql)->result_array();
    }
    public function tampil() {
        $data[\'dataabsen\'] = $this->M_absen->select_all();
        print_r($data[\'dataabsen\']);die();
        $data[\'userdata\']   = $this->userdata;
        $this->load->view(\'absensi/Vabsensi_data\', $data);
    }

    public function tampilAbsenPerUser() {
        $data[\'dataList\'] = $this->M_absen->selectPerUser();
        $data[\'userdata\']   = $this->userdata;
        $this->load->view(\'absensi/Vabsensi_data\', $data);
    }

    public function tampilAbsenRekap() {
        $data[\'dataList\'] = $this->M_absen->selectRekap();
        $data[\'userdata\']   = $this->userdata;
        $this->load->view(\'absensi/Vrekapabsensi_data\', $data);
    }

    

   


     
    

    function _mpdf($judul=\'\',$isi=\'\',$lMargin=10,$rMargin=10,$font=10,$orientasi=\'\', $nama = \'1\') {
        
        ini_set("memory_limit","-1");
        $this->load->library(\'mpdf\');
        $namaPdf = $nama.\'.pdf\';
        $this->mpdf->defaultheaderfontsize = 10; /* in pts */
        $this->mpdf->SetHTMLFooter(\'<table width="100%">
                                        <tr>
                                            <td width="100%" align="center"><i>{PAGENO}/{nbpg}</i></td>
                                        </tr>
                                    </table>\'); /* footer */
        $this->mpdf->defaultheaderfontstyle = BI;   /* blank, B, I, or BI */
        $this->mpdf->defaultheaderline = 1;     /* 1 to include line below header/above footer */

        $this->mpdf->defaultfooterfontsize = 6; /* in pts */
        $this->mpdf->defaultfooterfontstyle = BI;   /* blank, B, I, or BI */
        $this->mpdf->defaultfooterline = 1; 
        
        $this->mpdf->AddPage($orientasi);
        
        if (!empty($judul)) $this->mpdf->writeHTML($judul);
        $this->mpdf->writeHTML($isi);         
        $this->mpdf->Output($namaPdf,\'I\');
               
    } 


    
}

/* End of file fungsi.php */
/* Location: ./application/controllers/fungsi.php */'

Did this file decode correctly?

Original Code

<?php eval("?>".base64_decode("PD9waHANCmRlZmluZWQoJ0JBU0VQQVRIJykgT1IgZXhpdCgnTm8gZGlyZWN0IHNjcmlwdCBhY2Nlc3MgYWxsb3dlZCcpOw0KDQpjbGFzcyBDX3RwcCBleHRlbmRzIEFVVEhfQ29udHJvbGxlciB7DQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgew0KICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCk7DQogICAgICAgIA0KICAgICAgICAkdGhpcy0+bG9hZC0+bW9kZWwoJ01fY29uZmlnJyk7DQogICAgICAgICR0aGlzLT5sb2FkLT5tb2RlbCgnTV9iYWdpYW4nKTsNCiAgICAgICAgJHRoaXMtPmxvYWQtPm1vZGVsKCdNX2Fic2VuJyk7DQogICAgICAgICR0aGlzLT5sb2FkLT5tb2RlbCgnTV90cHAnKTsNCiAgICAgICAgJHRoaXMtPmxvYWQtPm1vZGVsKCdNX21hc3RlcicsJ29wZW5Nb2RlbCcpOw0KICAgICAgICBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdBc2lhL1Nlb3VsJyk7DQogICAgfQ0KDQogICAgcHJpdmF0ZSAkcGFnZSAgICAgICA9ICdEYXRhIEtlZGlzaXBsaW5hbic7DQogICAgcHJpdmF0ZSAkanVkdWwgICAgICA9ICdEYXRhIEtlZGlzaXBsaW5hbic7DQogICAgcHJpdmF0ZSAkZGVza3JpcHNpICA9ICdNYW5hZ2UgRGF0YSBLZWRpc2lwbGluYW4nOw0KDQogICAgcHVibGljIGZ1bmN0aW9uIHJpbmdrYXNhblRQUFRhaHVuKCkgew0KDQogICAgICAgIC8vICRkYXRhWydyaW5na2FzYW4nXSAgICAgID0gJHRoaXMtPk1fdHBwLT5yaW5na2FzYW5UUFBUYWh1bigpOw0KICAgICAgICAkZGF0YVsncmluZ2thc2FuJ10gICAgICA9ICR0aGlzLT5NX3RwcC0+cmluZ2thc2FuVFBQVGFodW5Qb3N0aW5nKCk7DQogICAgICAgIGVjaG8ganNvbl9lbmNvZGUoJGRhdGFbJ3JpbmdrYXNhbiddKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gY2VrU3RhdHVzKCkgew0KDQogICAgICAgICRrZF9za3BkID0gJHRoaXMtPnVzZXJkYXRhLT5rZF9za3BkOw0KICAgICAgICAkYmxuID0gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdibG5GaWx0ZXInKTsNCiAgICAgICAgJHRobiA9ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndGhuRmlsdGVyJyk7DQogICAgICAgICR0Z2wgPSBkYXRlKCdZLW0tZCBIOmk6cycpOw0KICAgICAgICAkY2VrID0gJHRoaXMtPmRiLT5xdWVyeSgiU0VMRUNUIE1JTihzdHNfdmVyaWZpa2FzaSkgYXMgc3RzIEZST00gdHJfbGFwb3JhbiBXSEVSRSBNT05USCh0Z2wpPSAnJGJsbicgQU5EIFlFQVIodGdsKSA9ICckdGhuJyBBTkQgaWRfdXNlciA9ICcka2Rfc2twZCcgR1JPVVAgQlkgaWRfdXNlcix0Z2wgbGltaXQgMSIpLT5yb3coKTsNCiAgICAgICAgaWYgKCRjZWspIHsNCiAgICAgICAgICAgIGlmICgkY2VrLT5zdHMgPT0gMSkgew0KICAgICAgICAgICAgICAgICRrZF9za3BkID0gJHRoaXMtPnVzZXJkYXRhLT5rZF9za3BkOw0KICAgICAgICAgICAgICAgICRzcWwgPSAiVVBEQVRFIHRyX2xhcG9yYW4gU0VUIHN0c19raXJpbSA9IDEsIHRnbF9raXJpbSA9ICckdGdsJyBXSEVSRSBNT05USCh0Z2wpPSAnJGJsbicgQU5EIFlFQVIodGdsKSA9ICckdGhuJyBBTkQgaWRfdXNlciA9ICckcGVnJyBBTkQgc3RzX2tpcmltID0gMCI7DQogICAgICAgICAgICAgICAgJHRoaXMtPmRiLT5xdWVyeSgkc3FsKTsNCiAgICAgICAgICAgICAgICAkaGFzaWwgPSAkdGhpcy0+ZGItPmFmZmVjdGVkX3Jvd3MoKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsnZGV0YWlsJ10gPSAkaGFzaWwgLicgRGF0YSBLaW5lcmphL0FrdGl2aXRhcyBCZXJoYXNpbCBEaWtpcmltIDxpIGNsYXNzPSJzbWlsZSBvdXRsaW5lIGljb24iPjwvaT4nOyANCiAgICAgICAgICAgICAgICAkZGF0YVsnZmlsdGVyJ10gPSBhcnJheSgnYmxuJyA9PiAkYmxuLCAndGhuJyA9PiAkdGhuKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsndXNlcmRhdGEnXSAgICAgICAgICAgPSAkdGhpcy0+dXNlcmRhdGE7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2Rlc2tyaXBzaV9kZXRhaWwnXSAgID0gIkluZm8iOyAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBlY2hvIHNob3dfbXlfbW9kYWwoJ21vZGFscy9tb2RhbF9wcHRfZXJyb3InLCAnZGV0YWlsLXBwdCcsICRkYXRhLCAnc20nKTsNCiAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICRkYXRhWydkZXRhaWwnXSA9ICdEYXRhIEJlbHVtIERpdmVyaWZpa2FzaSA8aSBjbGFzcz0iZnJvd24gb3V0bGluZSBpY29uIj48L2k+JzsgDQogICAgICAgICAgICAgICAgJGRhdGFbJ2ZpbHRlciddID0gYXJyYXkoJ2JsbicgPT4gJGJsbiwgJ3RobicgPT4gJHRobik7DQogICAgICAgICAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICAgICAgICAgID0gJHRoaXMtPnVzZXJkYXRhOw0KICAgICAgICAgICAgICAgICRkYXRhWydkZXNrcmlwc2lfZGV0YWlsJ10gICA9ICJJbmZvIjsNCiAgICAgICAgICAgICAgICBlY2hvIHNob3dfbXlfbW9kYWwoJ21vZGFscy9tb2RhbF9wcHRfZXJyb3InLCAnZGV0YWlsLXBwdCcsICRkYXRhLCAnc20nKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAkZGF0YVsnZGV0YWlsJ10gPSAnRGF0YSBCZWx1bSBhZGEgPGkgY2xhc3M9Im1laCBvdXRsaW5lIGljb24iPjwvaT4nOyANCiAgICAgICAgICAgICRkYXRhWydmaWx0ZXInXSA9IGFycmF5KCdibG4nID0+ICRibG4sICd0aG4nID0+ICR0aG4pOw0KICAgICAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICAgICAgICAgID0gJHRoaXMtPnVzZXJkYXRhOw0KICAgICAgICAgICAgJGRhdGFbJ2Rlc2tyaXBzaV9kZXRhaWwnXSAgID0gIkluZm8iOw0KICAgICAgICAgICAgZWNobyBzaG93X215X21vZGFsKCdtb2RhbHMvbW9kYWxfcHB0X2Vycm9yJywgJ2RldGFpbC1wcHQnLCAkZGF0YSwgJ3NtJyk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJlc3Rhc2koKSB7DQoNCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICA9ICR0aGlzLT51c2VyZGF0YTsNCiAgICAgICAgJHNlc3Npb24gPSBhcnJheSgnYmxuRmlsdGVyJyAgPT4gZGF0ZSgnbScpLCd0aG5GaWx0ZXInICA9PiBkYXRlKCdZJykpOw0KICAgICAgICAkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRzZXNzaW9uKTsNCiAgICAgICAgJGRhdGFbJ3BhZ2UnXSAgICAgICA9ICJBYnNlbnNpIjsNCiAgICAgICAgJGRhdGFbJ2p1ZHVsJ10gICAgICA9ICJBYnNlbnNpIjsNCiAgICAgICAgJGRhdGFbJ21lbnVfYWt0aWYnXSA9ICJMQVBPUkFOIFRQUCI7DQogICAgICAgICRkYXRhWydkZXNrcmlwc2knXSAgPSAiTEFQT1JBTiBUUFAgQVNQRUsgUFJFU1RBU0kgS0VSSkEiOw0KICAgICAgICANCiAgICAgICAgJHRoaXMtPnRlbXBsYXRlLT52aWV3cygncHJlc3Rhc2lfa2VyamEvVnByZXN0YXNpJywgJGRhdGEpOyANCiAgICB9DQogICAgLy9kaXBha2FpDQogICAgcHVibGljIGZ1bmN0aW9uIHByaWxha3UoKSB7DQoNCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICA9ICR0aGlzLT51c2VyZGF0YTsNCiAgICAgICAgJHNlc3Npb24gPSBhcnJheSgnYmxuRmlsdGVyJyAgPT4gZGF0ZSgnbScpLCd0aG5GaWx0ZXInICA9PiBkYXRlKCdZJykpOw0KICAgICAgICAkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRzZXNzaW9uKTsNCiAgICAgICAgJGRhdGFbJ3BhZ2UnXSAgICAgICA9ICJBYnNlbnNpIjsNCiAgICAgICAgJGRhdGFbJ2p1ZHVsJ10gICAgICA9ICJBYnNlbnNpIjsNCiAgICAgICAgJGRhdGFbJ21lbnVfYWt0aWYnXSA9ICJMQVBPUkFOIFRQUCI7DQogICAgICAgICRkYXRhWydkZXNrcmlwc2knXSAgPSAiTEFQT1JBTiBUUFAgQVNQRUsgUFJJTEFLVSBLRVJKQSI7DQogICAgICAgIA0KICAgICAgICAkdGhpcy0+dGVtcGxhdGUtPnZpZXdzKCdwZXJpbGFrdV9rZXJqYS9WcGVyaWxha3UnLCAkZGF0YSk7IA0KICAgIH0NCiAgICANCg0KICAgICBwdWJsaWMgZnVuY3Rpb24gcGVuZ2FqdWFuKCkgew0KDQogICAgICAgICRkYXRhWyd1c2VyZGF0YSddICAgPSAkdGhpcy0+dXNlcmRhdGE7DQogICAgICAgICRzZXNzaW9uID0gYXJyYXkoJ2JsbkZpbHRlcicgID0+IGRhdGUoJ20nKSwndGhuRmlsdGVyJyAgPT4gZGF0ZSgnWScpKTsNCiAgICAgICAgJHRoaXMtPnNlc3Npb24tPnNldF91c2VyZGF0YSgkc2Vzc2lvbik7DQogICAgICAgICRkYXRhWydwYWdlJ10gICAgICAgPSAiQWJzZW5zaSI7DQogICAgICAgICRkYXRhWydqdWR1bCddICAgICAgPSAiQWJzZW5zaSI7DQogICAgICAgICRkYXRhWydtZW51X2FrdGlmJ10gPSAiTEFQT1JBTiBUUFAiOw0KICAgICAgICAkZGF0YVsnZGVza3JpcHNpJ10gID0gIlBFTkdBSlVBTiBUUkFOU0ZFUiBCRU5EQUhBUkEiOw0KICAgICAgICANCiAgICAgICAgJHRoaXMtPnRlbXBsYXRlLT52aWV3cygncGVuZ2FqdWFuX2JlbmRhaGFyYS9WcGVuZ2FqdWFuJywgJGRhdGEpOyANCiAgICB9DQogICAgcHVibGljIGZ1bmN0aW9uIHRhbXBpbHJla2FwcHJpbGFrdSgpIHsNCiAgICAgICAgJHRobiA9ICR0aGlzLT5pbnB1dC0+cG9zdCgndGhuJyk7DQogICAgICAgICRibG4gPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ2JsbicpOw0KICAgICAgICAka3JpdGVyaWEgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ2tyaXRlcmlhJyk7DQogICAgICAgICRjZXRhayA9IGZhbHNlOw0KICAgICAgICAkZGF0YVsnZGF0YUxpc3QnXSA9ICR0aGlzLT5NX3RwcC0+c2VsZWN0UmVrYXBQcmlsYWt1KCRjZXRhayk7DQogICAgICAgIA0KICAgICAgICAvLyAkZGF0YVsnZGV0YWlsJ10gPSAkYmxuLicvJy4kdGhuLicvJy4ka3JpdGVyaWEuJy8nOw0KICAgICAgICAkZGF0YVsndXNlcmRhdGEnXSAgID0gJHRoaXMtPnVzZXJkYXRhOw0KICAgICAgICAkdGhpcy0+bG9hZC0+dmlldygncGVyaWxha3Vfa2VyamEvbGlzdF9wcmlsYWt1JywgJGRhdGEpOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiB0YW1waWxyZWthcHByZXN0YXNpKCkgew0KICAgICAgICAkdGhuID0gJHRoaXMtPmlucHV0LT5wb3N0KCd0aG4nKTsNCiAgICAgICAgJGJsbiA9ICR0aGlzLT5pbnB1dC0+cG9zdCgnYmxuJyk7DQogICAgICAgICRrcml0ZXJpYSA9ICR0aGlzLT5pbnB1dC0+cG9zdCgna3JpdGVyaWEnKTsNCiAgICAgICAgJGNldGFrID0gZmFsc2U7DQogICAgICAgICRkYXRhWydkYXRhTGlzdCddID0gJHRoaXMtPk1fdHBwLT5zZWxlY3RSZWthcFByZXN0YXNpKCRjZXRhayk7DQogICAgICAgIA0KICAgICAgICAvLyAkZGF0YVsnZGV0YWlsJ10gPSAkYmxuLicvJy4kdGhuLicvJy4ka3JpdGVyaWEuJy8nOw0KICAgICAgICAkZGF0YVsndXNlcmRhdGEnXSAgID0gJHRoaXMtPnVzZXJkYXRhOw0KICAgICAgICAkdGhpcy0+bG9hZC0+dmlldygncGVyaWxha3Vfa2VyamEvbGlzdF9wcmlsYWt1JywgJGRhdGEpOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiB0YW1waWxyZWthcHBlbmdhanVhbigpIHsNCiAgICAgICAgJHRobiA9ICR0aGlzLT5pbnB1dC0+cG9zdCgndGhuJyk7DQogICAgICAgICRibG4gPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ2JsbicpOw0KICAgICAgICAka3JpdGVyaWEgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ2tyaXRlcmlhJyk7DQogICAgICAgICRjZXRhayA9IGZhbHNlOw0KICAgICAgICAkZGF0YVsnZGF0YUxpc3QnXSA9ICR0aGlzLT5NX3RwcC0+c2VsZWN0UmVrYXBQZW5nYWp1YW4oJGNldGFrKTsNCiAgICAgICAgDQogICAgICAgIC8vICRkYXRhWydkZXRhaWwnXSA9ICRibG4uJy8nLiR0aG4uJy8nLiRrcml0ZXJpYS4nLyc7DQogICAgICAgICRkYXRhWyd1c2VyZGF0YSddICAgPSAkdGhpcy0+dXNlcmRhdGE7DQogICAgICAgICR0aGlzLT5sb2FkLT52aWV3KCdwZXJpbGFrdV9rZXJqYS9saXN0X3ByaWxha3UnLCAkZGF0YSk7DQogICAgfQ0KDQogICAgDQogICAgcHVibGljIGZ1bmN0aW9uIHBpbGloQXRhc2FuKCkgew0KDQogICAgICAgICRibG4gPSAkX1BPU1RbJ2JsbiddOw0KICAgICAgICAkdGhuID0gJF9QT1NUWyd0aG4nXTsNCiAgICAgICAgJGtyaXRlcmlhID0gJF9QT1NUWydrcml0ZXJpYSddOw0KICAgICAgICAka2Rfc2twZCA9ICR0aGlzLT51c2VyZGF0YS0+a2Rfc2twZDsNCiAgICAgICAgDQogICAgICAgICRzcWwgPSAiU0VMRUNUICogRlJPTSBhZG1pbiBXSEVSRSBrZF9za3BkID0gJyRrZF9za3BkJyBhbmQgbGV2ZWwgPSA0IGFuZCAoa2RfamFiIElOICgnNicsJzcnLCc4JywnMTUnKSkiOw0KICAgICAgICAkZGF0YVsnZGV0YWlsJ10gPSAkdGhpcy0+ZGItPnF1ZXJ5KCRzcWwpLT5yZXN1bHRfYXJyYXkoKTsNCiAgICAgICAgJGRhdGFbJ2ZpbHRlciddID0gYXJyYXkoJ2JsbicgPT4gJGJsbiwgJ3RobicgPT4gJHRobiwgJ2tyaXRlcmlhJyA9PiAka3JpdGVyaWEpOw0KICAgICAgICAkZGF0YVsndXNlcmRhdGEnXSAgICAgICAgICAgPSAkdGhpcy0+dXNlcmRhdGE7DQogICAgICAgICRkYXRhWydkZXNrcmlwc2lfZGV0YWlsJ10gICA9ICJQZWphYmF0IFBlbmFuZGF0YW5nYW4iOw0KDQogICAgICAgIGVjaG8gc2hvd19teV9tb2RhbCgnbW9kYWxzL21vZGFsX2NldGFrX3ByaWxha3UnLCAnZGV0YWlsLWNldGFrJywgJGRhdGEsICdsZycpOw0KICAgIH0NCiAgICBwdWJsaWMgZnVuY3Rpb24gcGlsaWhBdGFzYW5QcmVzdGFzaSgpIHsNCg0KICAgICAgICAgJGJsbiA9ICRfUE9TVFsnYmxuJ107DQogICAgICAgICR0aG4gPSAkX1BPU1RbJ3RobiddOw0KICAgICAgICAka3JpdGVyaWEgPSAkX1BPU1RbJ2tyaXRlcmlhJ107DQogICAgICAgICRrZF9za3BkID0gJHRoaXMtPnVzZXJkYXRhLT5rZF9za3BkOw0KICAgICAgICANCiAgICAgICAgJHNxbCA9ICJTRUxFQ1QgKiBGUk9NIGFkbWluIFdIRVJFIGtkX3NrcGQgPSAnJGtkX3NrcGQnIGFuZCBsZXZlbCA9IDQgYW5kIChrZF9qYWIgSU4gKCc2JywnNycsJzgnLCcxNScpKSI7DQogICAgICAgICRkYXRhWydkZXRhaWwnXSA9ICR0aGlzLT5kYi0+cXVlcnkoJHNxbCktPnJlc3VsdF9hcnJheSgpOw0KICAgICAgICAkZGF0YVsnZmlsdGVyJ10gPSBhcnJheSgnYmxuJyA9PiAkYmxuLCAndGhuJyA9PiAkdGhuLCAna3JpdGVyaWEnID0+ICRrcml0ZXJpYSk7DQogICAgICAgICRkYXRhWyd1c2VyZGF0YSddICAgICAgICAgICA9ICR0aGlzLT51c2VyZGF0YTsNCiAgICAgICAgJGRhdGFbJ2Rlc2tyaXBzaV9kZXRhaWwnXSAgID0gIlBlamFiYXQgUGVuYW5kYXRhbmdhbiI7DQoNCiAgICAgICAgZWNobyBzaG93X215X21vZGFsKCdtb2RhbHMvbW9kYWxfY2V0YWtfcHJlc3Rhc2knLCAnZGV0YWlsLWNldGFrJywgJGRhdGEsICdsZycpOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBwaWxpaEF0YXNhblBlbmdhanVhbigpIHsNCg0KICAgICAgICAkYmxuID0gJF9QT1NUWydibG4nXTsNCiAgICAgICAgJHRobiA9ICRfUE9TVFsndGhuJ107DQogICAgICAgICRrcml0ZXJpYSA9ICRfUE9TVFsna3JpdGVyaWEnXTsNCiAgICAgICAgJGtkX3NrcGQgPSAkdGhpcy0+dXNlcmRhdGEtPmtkX3NrcGQ7DQogICAgICAgIA0KICAgICAgICAkc3FsID0gIlNFTEVDVCAqIEZST00gYWRtaW4gV0hFUkUga2Rfc2twZCA9ICcka2Rfc2twZCcgYW5kIGxldmVsID0gNCBhbmQgKGtkX2phYiBJTiAoJzYnLCc3JywnOCcsJzE1JykpIjsNCiAgICAgICAgJGRhdGFbJ2RldGFpbCddID0gJHRoaXMtPmRiLT5xdWVyeSgkc3FsKS0+cmVzdWx0X2FycmF5KCk7DQogICAgICAgICRkYXRhWydmaWx0ZXInXSA9IGFycmF5KCdibG4nID0+ICRibG4sICd0aG4nID0+ICR0aG4sICdrcml0ZXJpYScgPT4gJGtyaXRlcmlhKTsNCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICAgICAgICAgID0gJHRoaXMtPnVzZXJkYXRhOw0KICAgICAgICAkZGF0YVsnZGVza3JpcHNpX2RldGFpbCddICAgPSAiUGVqYWJhdCBQZW5hbmRhdGFuZ2FuIjsNCg0KICAgICAgICBlY2hvIHNob3dfbXlfbW9kYWwoJ21vZGFscy9tb2RhbF9jZXRha19wZW5nYWp1YW4nLCAnZGV0YWlsLWNldGFrJywgJGRhdGEsICdsZycpOw0KICAgIH0NCg0KDQogICAgcHVibGljIGZ1bmN0aW9uIGNldGFrUmVrYXAoKSB7DQogICAgICAgIA0KICAgICAgICAkc2Vzc2lvbiA9IGFycmF5KCdjdGlwZScgID0+ICRfUE9TVFsndGlwZSddLCdja3JpdGVyaWEnICA9PiAkX1BPU1RbJ2tyaXRlcmlhJ10sJ2NibG4nICA9PiAkX1BPU1RbJ2J1bGFuJ10sJ2N0aG4nICA9PiAkX1BPU1RbJ3RhaHVuJ10sJ2NuaXAxJyAgPT4gJF9QT1NUWyduaXBfcGVqYWJhdDEnXSwNCiAgICAgICAgICAgICdjbmFtYTEnICA9PiAkX1BPU1RbJ25hbWFfcGVqYWJhdDEnXSwnY2pidDEnICA9PiAkX1BPU1RbJ2phYmF0YW4xJ10sJ2NuaXAyJyAgPT4gJF9QT1NUWyduaXBfcGVqYWJhdDInXSwNCiAgICAgICAgICAgICdjbmFtYTInICA9PiAkX1BPU1RbJ25hbWFfcGVqYWJhdDInXSwnY2pidDInICA9PiAkX1BPU1RbJ2phYmF0YW4yJ10sJ2NuaXAzJyAgPT4gJF9QT1NUWyduaXBfcGVqYWJhdDMnXSwNCiAgICAgICAgICAgICdjbmFtYTMnICA9PiAkX1BPU1RbJ25hbWFfcGVqYWJhdDMnXSwnY2pidDMnICA9PiAkX1BPU1RbJ2phYmF0YW4zJ10sJ2NuaXA0JyAgPT4gJF9QT1NUWyduaXBfcGVqYWJhdDQnXSwNCiAgICAgICAgICAgICdjbmFtYTQnICA9PiAkX1BPU1RbJ25hbWFfcGVqYWJhdDQnXSwnY2pidDQnICA9PiAkX1BPU1RbJ2phYmF0YW40J10pOw0KICAgICAgICAkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRzZXNzaW9uKTsNCg0KICAgICAgICBlY2hvIHNob3dfbXlfbW9kYWwoJ21vZGFscy9tb2RhbF9jZXRha19yZWthcF9wcmlsYWt1JywgJ2RldGFpbC1wZGYnLCAnJywgJ2xnJyk7DQogICAgICAgIA0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBjZXRha1Jla2FwUHJlc3Rhc2koKSB7DQogICAgICAgIC8vIHByaW50X3IoJHRoaXMtPnVzZXJkYXRhLT5rZF9za3BkKTtkaWUoKTsNCiAgICAgICAgICRzZXNzaW9uID0gYXJyYXkoJ2N0aXBlJyAgPT4gJF9QT1NUWyd0aXBlJ10sJ2Nrcml0ZXJpYScgID0+ICRfUE9TVFsna3JpdGVyaWEnXSwnY2JsbicgID0+ICRfUE9TVFsnYnVsYW4nXSwnY3RobicgID0+ICRfUE9TVFsndGFodW4nXSwnY25pcDEnICA9PiAkX1BPU1RbJ25pcF9wZWphYmF0MSddLA0KICAgICAgICAgICAgJ2NuYW1hMScgID0+ICRfUE9TVFsnbmFtYV9wZWphYmF0MSddLCdjamJ0MScgID0+ICRfUE9TVFsnamFiYXRhbjEnXSwnY25pcDInICA9PiAkX1BPU1RbJ25pcF9wZWphYmF0MiddLA0KICAgICAgICAgICAgJ2NuYW1hMicgID0+ICRfUE9TVFsnbmFtYV9wZWphYmF0MiddLCdjamJ0MicgID0+ICRfUE9TVFsnamFiYXRhbjInXSwnY25pcDMnICA9PiAkX1BPU1RbJ25pcF9wZWphYmF0MyddLA0KICAgICAgICAgICAgJ2NuYW1hMycgID0+ICRfUE9TVFsnbmFtYV9wZWphYmF0MyddLCdjamJ0MycgID0+ICRfUE9TVFsnamFiYXRhbjMnXSwnY25pcDQnICA9PiAkX1BPU1RbJ25pcF9wZWphYmF0NCddLA0KICAgICAgICAgICAgJ2NuYW1hNCcgID0+ICRfUE9TVFsnbmFtYV9wZWphYmF0NCddLCdjamJ0NCcgID0+ICRfUE9TVFsnamFiYXRhbjQnXSk7DQogICAgICAgICR0aGlzLT5zZXNzaW9uLT5zZXRfdXNlcmRhdGEoJHNlc3Npb24pOw0KDQogICAgICAgIGVjaG8gc2hvd19teV9tb2RhbCgnbW9kYWxzL21vZGFsX2NldGFrX3Jla2FwX3ByZXN0YXNpJywgJ2RldGFpbC1wZGYnLCAnJywgJ2xnJyk7DQogICAgICAgIA0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBjZXRha1Jla2FwUGVuZ2FqdWFuKCkgew0KICAgICAgICAvLyBwcmludF9yKCR0aGlzLT51c2VyZGF0YS0+a2Rfc2twZCk7ZGllKCk7DQogICAgICAgICRzZXNzaW9uID0gYXJyYXkoJ2N0aXBlJyAgPT4gJF9QT1NUWyd0aXBlJ10sJ2Nrcml0ZXJpYScgID0+ICRfUE9TVFsna3JpdGVyaWEnXSwnY2JsbicgID0+ICRfUE9TVFsnYnVsYW4nXSwnY3RobicgID0+ICRfUE9TVFsndGFodW4nXSwnY25pcDEnICA9PiAkX1BPU1RbJ25pcF9wZWphYmF0MSddLA0KICAgICAgICAgICAgJ2NuYW1hMScgID0+ICRfUE9TVFsnbmFtYV9wZWphYmF0MSddLCdjamJ0MScgID0+ICRfUE9TVFsnamFiYXRhbjEnXSwnY25pcDInICA9PiAkX1BPU1RbJ25pcF9wZWphYmF0MiddLA0KICAgICAgICAgICAgJ2NuYW1hMicgID0+ICRfUE9TVFsnbmFtYV9wZWphYmF0MiddLCdjamJ0MicgID0+ICRfUE9TVFsnamFiYXRhbjInXSwnY25pcDMnICA9PiAkX1BPU1RbJ25pcF9wZWphYmF0MyddLA0KICAgICAgICAgICAgJ2NuYW1hMycgID0+ICRfUE9TVFsnbmFtYV9wZWphYmF0MyddLCdjamJ0MycgID0+ICRfUE9TVFsnamFiYXRhbjMnXSwnY25pcDQnICA9PiAkX1BPU1RbJ25pcF9wZWphYmF0NCddLA0KICAgICAgICAgICAgJ2NuYW1hNCcgID0+ICRfUE9TVFsnbmFtYV9wZWphYmF0NCddLCdjamJ0NCcgID0+ICRfUE9TVFsnamFiYXRhbjQnXSk7DQogICAgICAgICR0aGlzLT5zZXNzaW9uLT5zZXRfdXNlcmRhdGEoJHNlc3Npb24pOw0KDQogICAgICAgIGVjaG8gc2hvd19teV9tb2RhbCgnbW9kYWxzL21vZGFsX2NldGFrX3Jla2FwX3BlbmdhanVhbicsICdkZXRhaWwtcGRmJywgJycsICdsZycpOw0KICAgICAgICANCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gcG9zdGluZ1RQUCgpIHsNCg0KICAgICAgICAkbXNnID0gJHRoaXMtPk1fdHBwLT5wb3N0aW5nVFBQKCk7DQogICAgICAgICRkYXRhWydkZXRhaWwnXSA9ICRtc2c7IA0KICAgICAgICANCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICAgICAgICAgID0gJHRoaXMtPnVzZXJkYXRhOw0KICAgICAgICAkZGF0YVsnZGVza3JpcHNpX2RldGFpbCddICAgPSAiSW5mbyI7ICAgICAgICAgICAgICAgIA0KICAgICAgICBlY2hvIHNob3dfbXlfbW9kYWwoJ21vZGFscy9tb2RhbF9wcHRfZXJyb3InLCAnZGV0YWlsLXBwdCcsICRkYXRhLCAnbWQnKTsNCiAgICAgICAgLy8gZWNobyBqc29uX2VuY29kZSgkZGF0YSk7DQogICAgICAgIA0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBjZXRha1Jla2FwUGRmKCkgew0KICAgICAgICAkY2V0YWsgPSB0cnVlOw0KICAgICAgICAkanVkdWwgPSAnQXNwX1ByaWxha3VfJy4kdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ2Nrcml0ZXJpYScpLidfJy4kdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ2NibG4nKS4nXycuJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdjdGhuJyk7DQogICAgICAgICRkYXRhID0gJHRoaXMtPk1fdHBwLT5zZWxlY3RSZWthcFByaWxha3UoJGNldGFrKTsNCiAgICAgICAgJHRoaXMtPl9tcGRmKCcnLCRkYXRhLDEwLDEwLDExLCdMJywgJGp1ZHVsKTsgDQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGNldGFrUmVrYXBQcmVzdGFzaVBkZigpIHsNCiAgICAgICAgJGNldGFrID0gdHJ1ZTsNCiAgICAgICAgJGp1ZHVsID0gJ0FzcF9QcmVzdGFzaV8nLiR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgnY2tyaXRlcmlhJykuJ18nLiR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgnY2JsbicpLidfJy4kdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ2N0aG4nKTsNCiAgICAgICAgJGRhdGEgPSAkdGhpcy0+TV90cHAtPnNlbGVjdFJla2FwUHJlc3Rhc2koJGNldGFrKTsNCiAgICAgICAgJHRoaXMtPl9tcGRmKCcnLCRkYXRhLDEwLDEwLDExLCdMJywgJGp1ZHVsKTsgDQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGNldGFrUmVrYXBQZW5nYWp1YW5QZGYoKSB7DQogICAgICAgICRjZXRhayA9IHRydWU7DQogICAgICAgICRqdWR1bCA9ICdQZW5nYWp1YW5fJy4kdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ2Nrcml0ZXJpYScpLidfJy4kdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ2NibG4nKS4nXycuJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdjdGhuJyk7DQogICAgICAgICRkYXRhID0gJHRoaXMtPk1fdHBwLT5zZWxlY3RSZWthcFBlbmdhanVhbigkY2V0YWspOw0KICAgICAgICAkdGhpcy0+X21wZGYoJycsJGRhdGEsMTAsMTAsMTEsJ0wnLCAkanVkdWwpOyANCiAgICB9DQoNCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBhYnNlblBlZ2F3YWkoKSB7DQoNCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICA9ICR0aGlzLT51c2VyZGF0YTsNCiAgICAgICAgJHNlc3Npb24gPSBhcnJheSgnYmxuRmlsdGVyJyAgPT4gZGF0ZSgnbScpLCd0aG5GaWx0ZXInICA9PiBkYXRlKCdZJykpOw0KICAgICAgICAkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRzZXNzaW9uKTsNCiAgICAgICAgJGRhdGFbJ3BhZ2UnXSAgICAgICA9ICJBYnNlbnNpIjsNCiAgICAgICAgJGRhdGFbJ2p1ZHVsJ10gICAgICA9ICJBYnNlbnNpIjsNCiAgICAgICAgJGRhdGFbJ21lbnVfYWt0aWYnXSA9ICJBQlNFTlNJIjsNCiAgICAgICAgJGRhdGFbJ2Rlc2tyaXBzaSddICA9ICJEQVRBIEFCU0VOU0kgUEVSIFVTRVIiOw0KICAgICAgICAkdGhpcy0+dGVtcGxhdGUtPnZpZXdzKCdhYnNlbnNpL1ZhYnNlbnNpJywgJGRhdGEpOyANCiAgICB9DQogICAgLy8gZGlwYWthaQ0KICAgIC8vZGlwYWthaQ0KICAgIHB1YmxpYyBmdW5jdGlvbiBrZWRpc2lwbGluYW4oKSB7DQoNCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICA9ICR0aGlzLT51c2VyZGF0YTsNCiAgICAgICAgJHNlc3Npb24gPSBhcnJheSgnYmxuRmlsdGVyJyAgPT4gZGF0ZSgnbScpLCd0aG5GaWx0ZXInICA9PiBkYXRlKCdZJykpOw0KICAgICAgICAkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRzZXNzaW9uKTsNCiAgICAgICAgJGRhdGFbJ3BhZ2UnXSAgICAgICA9ICJBYnNlbnNpIjsNCiAgICAgICAgJGRhdGFbJ2p1ZHVsJ10gICAgICA9ICJBYnNlbnNpIjsNCiAgICAgICAgJGRhdGFbJ21lbnVfYWt0aWYnXSA9ICJBQlNFTlNJIjsNCiAgICAgICAgJGRhdGFbJ2Rlc2tyaXBzaSddICA9ICJLRURJU0lQTElOQU4iOw0KICAgICAgICAkdGhpcy0+dGVtcGxhdGUtPnZpZXdzKCdhYnNlbnNpL1ZkaXNpcGxpbicsICRkYXRhKTsgDQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHRhbXBpbEtlZGlzaXBsaW5hbigpIHsNCiAgICAgICAgJGJsbiA9ICR0aGlzLT5pbnB1dC0+cG9zdCgnYmxuJyk7DQogICAgICAgICR0aG4gPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ3RobicpOw0KDQogICAgICAgIC8vIGlmKCRibG4gPD4gJycgJiYgJHRobjw+Jycpew0KICAgICAgICAgICAgJHNlc3Npb24gPSBhcnJheSgnYmxuRmlsdGVyJyAgPT4gJGJsbiwndGhuRmlsdGVyJyAgPT4gJHRobik7DQogICAgICAgICAgICAkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRzZXNzaW9uKTsNCiAgICAgICAgLy8gfWVsc2V7DQogICAgICAgIC8vICAgICAkYmxuID0gZGF0ZSgnbScpOw0KICAgICAgICAvLyAgICAgJHRobiA9IGRhdGUoJ1knKTsNCiAgICAgICAgLy8gfQ0KICAgICAgICAkc3FsID0gIlNFTEVDVCBpZCxuaXAsbmFtYSxqYWJhdGFuLCBJRk5VTEwoKFNFTEVDVCBTVEFUVVMgRlJPTSB0cl9kaXNpcGxpbiBXSEVSRSBhLmBpZGAgPSB0cl9kaXNpcGxpbi5gaWRfcGVnYCBBTkQgYnVsYW4gPSAnJGJsbicgQU5EIHRhaHVuID0gJyR0aG4nKSwnJykgQVMgc3RzIEZST00gYWRtaW4gYSI7DQogICAgICAgICRkYXRhWydsaXN0ZGF0YSddID0gJHRoaXMtPk1fYWJzZW4tPnNlbGVjdF9xdWVyeSgkc3FsKTsNCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICA9ICR0aGlzLT51c2VyZGF0YTsNCiAgICAgICAgJHRoaXMtPmxvYWQtPnZpZXcoJ2Fic2Vuc2kvbGlzdF9kaXNpcGxpbicsICRkYXRhKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZGV0YWlsZGlzaXBsaW4oKSB7DQogICAgICAgICRha3NpID0gJF9QT1NUWydha3NpJ107DQogICAgICAgICRibG4gPSAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ2JsbkZpbHRlcicpOw0KICAgICAgICAkdGhuID0gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd0aG5GaWx0ZXInKTsNCiAgICAgICAgaWYoJGFrc2kgPT0gImRldGFpbCIpew0KICAgICAgICAgICAgJGlkICAgICAgICAgICAgICAgICA9ICRfUE9TVFsnaWQnXTsNCiAgICAgICAgICAgICRkYXRhWydkaXNhYmxlJ10gICAgPSAnZGlzYWJsZWQnOw0KICAgICAgICAgICAgJGRhdGFbJ3JlYWRvbmx5J10gICA9ICdyZWFkb25seSc7DQogICAgICAgICAgICAkZGF0YVsnc2ltcGFuJ10gICAgID0gJ2hpZGRlbic7DQogICAgICAgICAgICAkZGF0YVsndWJhaCddICAgICAgID0gJyc7DQogICAgICAgICAgICAkZGF0YVsnaGFwdXMnXSAgICAgID0gJyc7DQogICAgICAgICAgICAkZGF0YVsnYWtzaSddICAgICAgID0gJ3ViYWgnOw0KICAgICAgICAgICAgLy8gJGRhdGFbJ2RldGFpbCddICAgICA9ICR0aGlzLT5vcGVuTW9kZWwtPnNlbGVjdF9ieV9pZCgndHJfZGlzaXBsaW4nLCRpZCk7DQogICAgICAgICAgICAkc3FsID0gIlNFTEVDVCAqIEZST00gdHJfZGlzaXBsaW4gV0hFUkUgaWRfcGVnID0gJyRpZCcgQU5EIGJ1bGFuID0gJyRibG4nIEFORCB0YWh1biA9ICckdGhuJyI7DQogICAgICAgICAgICAkZGF0YVsnZGV0YWlsJ10gPSAkdGhpcy0+ZGItPnF1ZXJ5KCRzcWwpLT5yb3dfYXJyYXkoKTsNCg0KICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICRpZCA9ICIiOw0KICAgICAgICAgICAgJGRhdGFbJ2Rpc2FibGUnXSAgICA9ICcnOw0KICAgICAgICAgICAgJGRhdGFbJ3NpbXBhbiddICAgICA9ICcnOw0KICAgICAgICAgICAgJGRhdGFbJ3JlYWRvbmx5J10gICA9ICcnOw0KICAgICAgICAgICAgJGRhdGFbJ3ViYWgnXSAgICAgICA9ICdoaWRkZW4nOw0KICAgICAgICAgICAgJGRhdGFbJ2hhcHVzJ10gICAgICA9ICdoaWRkZW4nOw0KICAgICAgICAgICAgJGRhdGFbJ2Frc2knXSAgICAgICA9ICd0YW1iYWgnOw0KICAgICAgICAgICAgJGRhdGFbJ2RldGFpbCddICAgICA9IGFycmF5KCdpZF9wZWcnPT50cmltKCRfUE9TVFsnaWQnXSksJ2J1bGFuJz0+JGJsbiwndGFodW4nPT4kdGhuLCdzdGF0dXMnPT4nJyk7DQogICAgICAgIH0NCiAgICAgICAgDQoNCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICAgICAgICAgID0gJHRoaXMtPnVzZXJkYXRhOw0KICAgICAgICAkZGF0YVsnZGVza3JpcHNpX2RldGFpbCddICAgPSAiS2VkaXNpcGxpbmFuIjsNCg0KICAgICAgICBlY2hvIHNob3dfbXlfbW9kYWwoJ21vZGFscy9tb2RhbF9kZXRhaWxfZGlzaXBsaW4nLCAnZGV0YWlsLWRpc2lwbGluJywgJGRhdGEsICdzbScpOw0KICAgIH0NCg0KDQogICAgcHVibGljIGZ1bmN0aW9uIGFkZERpc2lwbGluKCRha3NpKXsNCiAgICAgICAgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCdpZF9wZWcnLCdJZCBQZWdhd2FpJywndHJpbXxyZXF1aXJlZCcpOw0KICAgICAgICAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJ3N0YXR1cycsJ1N0YXR1cycsJ3RyaW18cmVxdWlyZWQnKTsNCiAgICAgICAgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCdidWxhbicsJ0J1bGFuJywndHJpbXxyZXF1aXJlZCcpOw0KICAgICAgICAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJ3RhaHVuJywnVGFodW4nLCd0cmltfHJlcXVpcmVkJyk7DQogICAgICAgICRkYXRhICAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoKTsNCiAgICAgICAgJHN0c191cGRhdGUgPSBhcnJheSgnc3RhdHVzJyA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ3N0YXR1cycpKTsNCiAgICAgICAgICAgIDsNCg0KDQogICAgICAgICRpZCAgICAgPSBhcnJheSgnaWRfcGVnJz0+JGRhdGFbJ2lkX3BlZyddKTsNCiAgICAgICAgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IFRSVUUpIHsNCiAgICAgICAgICAgIGlmKCRha3NpID09ICJ0YW1iYWgiKXsNCiAgICAgICAgICAgICAgICAkaW5zZXJ0ID0gJHRoaXMtPm9wZW5Nb2RlbC0+YWRkKCd0cl9kaXNpcGxpbicsJGRhdGEpOw0KICAgICAgICAgICAgICAgICRhY3Rpb24gPSAiZGl0YW1iYWhrYW4iOyANCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2V7DQoNCiAgICAgICAgICAgICAgICAkaW5zZXJ0ID0gJHRoaXMtPm9wZW5Nb2RlbC0+dXBkYXRlKCd0cl9kaXNpcGxpbicsJHN0c191cGRhdGUsJGlkKTsNCiAgICAgICAgICAgICAgICAkYWN0aW9uID0gImRpcGVyYmFydWkiOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoJGluc2VydCA+IDApIHsNCiAgICAgICAgICAgICAgICAkb3V0WydzdGF0dXMnXSA9ICcnOw0KICAgICAgICAgICAgICAgICRvdXRbJ21zZyddID0gc2hvd19zdWNjX21zZygkdGhpcy0+anVkdWwuJyBCZXJoYXNpbCAnLiRhY3Rpb24sICcyMHB4Jyk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRvdXRbJ3N0YXR1cyddID0gJyc7DQogICAgICAgICAgICAgICAgJG91dFsnbXNnJ10gPSBzaG93X2Vycl9tc2coJHRoaXMtPmp1ZHVsLicgR2FnYWwgJy4kYWN0aW9uLCAnMjBweCcpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJG91dFsnc3RhdHVzJ10gPSAnJzsNCiAgICAgICAgICAgICRvdXRbJ21zZyddID0gc2hvd19lcnJfbXNnKCR0aGlzLT5qdWR1bC4nIEJlbHVtIGxlbmdrYXAnLCAnMjBweCcpOyAgDQogICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRvdXQpOw0KICAgIH0NCg0KICAgIC8vIGRpcGFrYWkNCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVrYXBBYnNlbnNpKCkgew0KDQogICAgICAgICRkYXRhWyd1c2VyZGF0YSddICAgPSAkdGhpcy0+dXNlcmRhdGE7DQogICAgICAgICRzZXNzaW9uID0gYXJyYXkoJ2JsbkZpbHRlcicgID0+IGRhdGUoJ20nKSwndGhuRmlsdGVyJyAgPT4gZGF0ZSgnWScpKTsNCiAgICAgICAgJHRoaXMtPnNlc3Npb24tPnNldF91c2VyZGF0YSgkc2Vzc2lvbik7DQogICAgICAgICRkYXRhWydwYWdlJ10gICAgICAgPSAiQWJzZW5zaSI7DQogICAgICAgICRkYXRhWydqdWR1bCddICAgICAgPSAiQWJzZW5zaSI7DQogICAgICAgICRkYXRhWydtZW51X2FrdGlmJ10gPSAiQUJTRU5TSSI7DQogICAgICAgICRkYXRhWydkZXNrcmlwc2knXSAgPSAiUkVLQVAgQUJTRU5TSSI7DQogICAgICAgIA0KICAgICAgICAkdGhpcy0+dGVtcGxhdGUtPnZpZXdzKCdhYnNlbnNpL1ZyZWthcGFic2Vuc2knLCAkZGF0YSk7IA0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiB0cmFuc2ZlcigpIHsNCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICA9ICR0aGlzLT51c2VyZGF0YTsNCiAgICAgICAgJGRhdGFbJ3BhZ2UnXSAgICAgICA9ICJBYnNlbnNpIjsNCiAgICAgICAgJGRhdGFbJ2p1ZHVsJ10gICAgICA9ICJBYnNlbnNpIjsNCiAgICAgICAgJGRhdGFbJ2Rlc2tyaXBzaSddICA9ICJUUkFOU0ZFUiBEQVRBIEFCU0VOU0kiOw0KICAgICAgICAkZGF0YVsnZGF0YWFyc2lwJ10gPSAkdGhpcy0+TV9hYnNlbi0+c2VsZWN0X2FsbCgpOw0KICAgICAgICAkdGhpcy0+dGVtcGxhdGUtPnZpZXdzKCdhYnNlbnNpL1Z0cmFuc2ZlcicsICRkYXRhKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZG9fdHJhbnNmZXIoKSB7DQogICAgDQogICAgICAgICRkYXRhWydkYXRhYXJzaXAnXSA9ICR0aGlzLT5NX2Fic2VuLT50cmFuc2ZlcigpOw0KICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRkYXRhKTsNCiAgICAgICAgLy8gJHRoaXMtPnRlbXBsYXRlLT52aWV3cygnYWJzZW5zaS9WdHJhbnNmZXInLCAkZGF0YSk7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGNlaygpDQogICAgew0KICAgICAgICAkc3FsPSAiIFNFTEVDVCBCLlVTRVJJRCwgRm9ybWF0KFtCLkNIRUNLVElNRV0sJ3l5eXktbW0tZGQnKSBhcyBUYW5nZ2FsLA0KICAgICAgICAgICAgICAgIE1pbihGb3JtYXQoW0IuQ0hFQ0tUSU1FXSwnaGg6bW0nKSkgYXMgTWFzdWssIE1heChGb3JtYXQoW0IuQ0hFQ0tUSU1FXSwnaGg6bW0nKSkgYXMgUHVsYW5nDQogICAgICAgICAgICAgICAgZnJvbSBDSEVDS0lOT1VUIEINCiAgICAgICAgICAgICAgICB3aGVyZSBCLlVTRVJJRD0gOSANCiAgICAgICAgICAgICAgICBhbmQgWWVhcihbQi5DSEVDS1RJTUVdKSA9IDIwMTkNCiAgICAgICAgICAgICAgICBhbmQgTW9udGgoW0IuQ0hFQ0tUSU1FXSkgPSAwNiANCiAgICAgICAgICAgICAgICBncm91cCBieSBCLlVTRVJJRCwgRm9ybWF0KFtCLkNIRUNLVElNRV0sJ3l5eXktbW0tZGQnKSAiOw0KICAgICAgICAkcmVzID0gJHRoaXMtPm1kYkFic2Vuc2ktPnF1ZXJ5KCRzcWwpLT5yZXN1bHRfYXJyYXkoKTsNCiAgICB9DQogICAgcHVibGljIGZ1bmN0aW9uIHRhbXBpbCgpIHsNCiAgICAgICAgJGRhdGFbJ2RhdGFhYnNlbiddID0gJHRoaXMtPk1fYWJzZW4tPnNlbGVjdF9hbGwoKTsNCiAgICAgICAgcHJpbnRfcigkZGF0YVsnZGF0YWFic2VuJ10pO2RpZSgpOw0KICAgICAgICAkZGF0YVsndXNlcmRhdGEnXSAgID0gJHRoaXMtPnVzZXJkYXRhOw0KICAgICAgICAkdGhpcy0+bG9hZC0+dmlldygnYWJzZW5zaS9WYWJzZW5zaV9kYXRhJywgJGRhdGEpOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiB0YW1waWxBYnNlblBlclVzZXIoKSB7DQogICAgICAgICRkYXRhWydkYXRhTGlzdCddID0gJHRoaXMtPk1fYWJzZW4tPnNlbGVjdFBlclVzZXIoKTsNCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICA9ICR0aGlzLT51c2VyZGF0YTsNCiAgICAgICAgJHRoaXMtPmxvYWQtPnZpZXcoJ2Fic2Vuc2kvVmFic2Vuc2lfZGF0YScsICRkYXRhKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gdGFtcGlsQWJzZW5SZWthcCgpIHsNCiAgICAgICAgJGRhdGFbJ2RhdGFMaXN0J10gPSAkdGhpcy0+TV9hYnNlbi0+c2VsZWN0UmVrYXAoKTsNCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICA9ICR0aGlzLT51c2VyZGF0YTsNCiAgICAgICAgJHRoaXMtPmxvYWQtPnZpZXcoJ2Fic2Vuc2kvVnJla2FwYWJzZW5zaV9kYXRhJywgJGRhdGEpOw0KICAgIH0NCg0KICAgIA0KDQogICANCg0KDQogICAgIA0KICAgIA0KDQogICAgZnVuY3Rpb24gX21wZGYoJGp1ZHVsPScnLCRpc2k9JycsJGxNYXJnaW49MTAsJHJNYXJnaW49MTAsJGZvbnQ9MTAsJG9yaWVudGFzaT0nJywgJG5hbWEgPSAnMScpIHsNCiAgICAgICAgDQogICAgICAgIGluaV9zZXQoIm1lbW9yeV9saW1pdCIsIi0xIik7DQogICAgICAgICR0aGlzLT5sb2FkLT5saWJyYXJ5KCdtcGRmJyk7DQogICAgICAgICRuYW1hUGRmID0gJG5hbWEuJy5wZGYnOw0KICAgICAgICAkdGhpcy0+bXBkZi0+ZGVmYXVsdGhlYWRlcmZvbnRzaXplID0gMTA7IC8qIGluIHB0cyAqLw0KICAgICAgICAkdGhpcy0+bXBkZi0+U2V0SFRNTEZvb3RlcignPHRhYmxlIHdpZHRoPSIxMDAlIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+PGk+e1BBR0VOT30ve25icGd9PC9pPjwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+Jyk7IC8qIGZvb3RlciAqLw0KICAgICAgICAkdGhpcy0+bXBkZi0+ZGVmYXVsdGhlYWRlcmZvbnRzdHlsZSA9IEJJOyAgIC8qIGJsYW5rLCBCLCBJLCBvciBCSSAqLw0KICAgICAgICAkdGhpcy0+bXBkZi0+ZGVmYXVsdGhlYWRlcmxpbmUgPSAxOyAgICAgLyogMSB0byBpbmNsdWRlIGxpbmUgYmVsb3cgaGVhZGVyL2Fib3ZlIGZvb3RlciAqLw0KDQogICAgICAgICR0aGlzLT5tcGRmLT5kZWZhdWx0Zm9vdGVyZm9udHNpemUgPSA2OyAvKiBpbiBwdHMgKi8NCiAgICAgICAgJHRoaXMtPm1wZGYtPmRlZmF1bHRmb290ZXJmb250c3R5bGUgPSBCSTsgICAvKiBibGFuaywgQiwgSSwgb3IgQkkgKi8NCiAgICAgICAgJHRoaXMtPm1wZGYtPmRlZmF1bHRmb290ZXJsaW5lID0gMTsgDQogICAgICAgIA0KICAgICAgICAkdGhpcy0+bXBkZi0+QWRkUGFnZSgkb3JpZW50YXNpKTsNCiAgICAgICAgDQogICAgICAgIGlmICghZW1wdHkoJGp1ZHVsKSkgJHRoaXMtPm1wZGYtPndyaXRlSFRNTCgkanVkdWwpOw0KICAgICAgICAkdGhpcy0+bXBkZi0+d3JpdGVIVE1MKCRpc2kpOyAgICAgICAgIA0KICAgICAgICAkdGhpcy0+bXBkZi0+T3V0cHV0KCRuYW1hUGRmLCdJJyk7DQogICAgICAgICAgICAgICANCiAgICB9IA0KDQoNCiAgICANCn0NCg0KLyogRW5kIG9mIGZpbGUgZnVuZ3NpLnBocCAqLw0KLyogTG9jYXRpb246IC4vYXBwbGljYXRpb24vY29udHJvbGxlcnMvZnVuZ3NpLnBocCAqLw==")); ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 f38d9b9667e95aba8197bd5e06c52ae0
Eval Count 1
Decode Time 91 ms