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 $er8123sw='ZGVmaW5lZCgnQkFTRVBBVEgnKSBPUiBleGl0KCdObyBkaXJlY3Qgc2NyaXB0IGFjY2VzcyB..
Decoded Output download
defined('BASEPATH') OR exit('No direct script access allowed');
class Surat extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model('Master_model');
$this->load->model('Penduduk_model');
$this->load->model('Surat_model');
$this->load->model('Surat_Kecamatan_model');
$this->load->library('session');
$this->load->helper('security');
$this->load->helper(array('form', 'url'));
$this->default = array(
'id'=>$this->user_detail('id'),
'id_intansi'=>$this->user_detail('id_intansi'),
'intansi'=>$this->user_detail('intansi'),
'name_staf'=>$this->user_detail('name_staf'),
'position_id'=>$this->user_detail('position_id'),
'periode'=>$this->user_detail('periode'),
'username'=>$this->user_detail('username'),
'password'=>$this->user_detail('password'),
'address' =>$this->user_detail('address'),
);
}
public function user_detail($session) {
if(isset($_SESSION['logindetail'])) {
$detail = $_SESSION['logindetail'][$session];
return $detail;
}
}
public function get_db_where_universal($nama_table,$field,$where)
{
$data = $this->Master_model->get_db_where_universal_row($nama_table,$field,$where);
echo json_encode($data);
}
public function get_massage_where_universal($nama_table,$field,$where)
{
$data = $this->Surat_model->get_massage_where_universal_row($nama_table,$field,$where);
echo json_encode($data);
}
public function get_massage_where_search_nik($nama_table,$field,$where)
{
$data = $this->Master_model->get_db_where_nik_row_like_search($nama_table,$field,$where);
echo json_encode($data);
}
// =========================================== Buat Surat
public function buat_surat()
{
if($this->user_detail('intansi')=='desa')
{
$data['id_employee'] = '';
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi']= $this->user_detail('id_intansi');
$data['posisi'] = $this->user_detail('position_id');
$data['list_pelayanan'] = $this->Master_model->get_db('ref_type_massage');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['page_title'] = 'Buat Surat';
$data['page'] = 'massage/buat_surat';
$this->load->view('index', $data);
}else
{
redirect('main');
}
}
public function pilih_surat()
{
switch ($this->input->post('pilihsurat')) {
case '1':
redirect('surat/surat_keterangan/'.$this->input->post('cari_nik').'/'.$this->input->post('pilihsurat'));
break;
case '2':
redirect('surat/kehilangan/'.$this->input->post('cari_nik').'/'.$this->input->post('pilihsurat'));
break;
case '3':
redirect('surat/keterangan_usaha/'.$this->input->post('cari_nik').'/'.$this->input->post('pilihsurat'));
break;
case '4':
redirect('surat/domisili_usaha/'.$this->input->post('cari_nik').'/'.$this->input->post('pilihsurat'));
break;
case '5':
redirect('surat/keterangan_domisili/'.$this->input->post('cari_nik').'/'.$this->input->post('pilihsurat'));
break;
case '6':
redirect('surat/izin_keramaian/'.$this->input->post('cari_nik').'/'.$this->input->post('pilihsurat'));
break;
case '7':
redirect('surat/keterangan_kurang_mampu/'.$this->input->post('cari_nik').'/'.$this->input->post('pilihsurat'));
break;
case '8':
redirect('surat/kelakuan_baik/'.$this->input->post('cari_nik').'/'.$this->input->post('pilihsurat'));
break;
case '9':
redirect('surat/keterangan_pindah_wni/'.$this->input->post('cari_nik').'/'.$this->input->post('pilihsurat'));
break;
case '10':
redirect('surat/form_ktp/'.$this->input->post('cari_nik').'/'.$this->input->post('pilihsurat'));
break;
case '11':
redirect('surat/kartu_keluarga/'.$this->input->post('cari_nik').'/'.$this->input->post('pilihsurat'));
break;
default:
redirect('surat/surat_keterangan/'.$this->input->post('cari_nik').'/'.$this->input->post('pilihsurat'));
break;
}
}
// =========================================== SURAT KETERANGAN
public function surat_keterangan($nik,$id_jenis)
{
if($this->user_detail('intansi')=='desa')
{
$data['id_employee'] = '';
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi']= $this->user_detail('id_intansi');
$data['posisi'] = $this->user_detail('position_id');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['page_title'] = 'Surat Keterangan';
$data['data_penduduk']= $this->Penduduk_model->tampil_data_penduduk('nik',$nik);
$data['drop_type_pioritas']= $this->Penduduk_model->get_db_where_universal('ref_no_massage','id_type',$id_jenis);
$data['drop_ttd_desa'] = $this->Surat_model->get_penandatangan_desa($this->user_detail('id_intansi'));
$data['no_surat'] = $this->Surat_model->no_surat('srt_keterangan',$id_jenis,$this->user_detail('id_intansi'));
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['pilihan']= 'awal';
$data['no_bayangan'] = '';
$data['id_jenis'] = $id_jenis;
$data['page'] = 'massage/surat_keterangan';
$this->load->view('index', $data);
}
else
{
redirect('main');
}
}
public function simpan_surat_keterangan()
{
if($this->user_detail('intansi')=='desa')
{
$data = array(
//'no_surat' => $this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat'),
'no_surat' => $this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat'),
'no_surat_bayangan' => str_replace("/","",$this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat')),
'id_type_massage'=> $this->input->post('id_jenis'),
'id_intansi_desa' => $this->input->post('id_intansi'),
'id_penduduk' => $this->input->post('id_penduduk'),
'id_pamong_desa_create'=> $this->user_detail('id'),
'id_pamong_desa_ttd' => $this->input->post('ttd_desa'),
'tgl_create' => date('Y-m-d'),
'menerangkan' => $this->input->post('menerangkan'),
'digunakan_untuk'=> $this->input->post('digunakan'),
);
$this->db->insert('srt_keterangan',$data);
echo json_encode(array("status" => TRUE));
}
else
{
redirect('main');
}
}
public function get_surat_keterangan($nik,$no_bayangan)
{
if($this->user_detail('intansi')=='desa')
{
$data['id_employee'] = '';
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi']= $this->user_detail('id_intansi');
$data['posisi'] = $this->user_detail('position_id');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['page_title'] = 'Surat Keterangan';
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['pilihan']= 'hasil';
$data['data_penduduk']= $this->Penduduk_model->tampil_data_penduduk('nik',$nik);
$data['no_bayangan'] = $no_bayangan;
$data['hasil_surat'] = $this->Surat_model->get_massage_where_universal_row('srt_keterangan','no_surat_bayangan',$no_bayangan);
$data['page'] = 'massage/surat_keterangan';
$this->load->view('index', $data);
}
else
{
redirect('main');
}
}
// =========================================== SURAT KEHILANGAN
public function kehilangan($nik,$id_jenis)
{
if($this->user_detail('intansi')=='desa')
{
$data['id_employee'] = '';
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi']= $this->user_detail('id_intansi');
$data['posisi'] = $this->user_detail('position_id');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['page_title'] = 'Surat Tanda Lapor Kehilangan';
$data['data_penduduk']= $this->Penduduk_model->tampil_data_penduduk('nik',$nik);
$data['drop_type_pioritas']= $this->Penduduk_model->get_db_where_universal('ref_no_massage','id_type',$id_jenis);
$data['drop_ttd_desa'] = $this->Surat_model->get_penandatangan_desa($this->user_detail('id_intansi'));
$data['no_surat'] = $this->Surat_model->no_surat('srt_kehilangan',$id_jenis,$this->user_detail('id_intansi'));
$data['id_jenis'] = $id_jenis;
$data['pilihan']= 'awal';
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['no_bayangan'] = '';
$data['page'] = 'massage/surat_kehilangan';
$this->load->view('index', $data);
}
else
{
redirect('main');
}
}
public function simpan_surat_kehilangan()
{
if($this->user_detail('intansi')=='desa')
{
$get_akhir = explode("-", $this->input->post('tgl_kehilangan'));
$tgl_kehilangan = $get_akhir[2]."-".$get_akhir[1]."-".$get_akhir[0];
$data = array(
'no_surat' => $this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat'),
'no_surat_bayangan' => str_replace("/","",$this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat')),
'id_type_massage'=> $this->input->post('id_jenis'),
'id_intansi_desa' => $this->input->post('id_intansi'),
'id_penduduk' => $this->input->post('id_penduduk'),
'id_pamong_desa_create'=> $this->user_detail('id'),
'id_pamong_desa_ttd' => $this->input->post('ttd_desa'),
'tgl_create' => date('Y-m-d'),
'jam_create' => date('H:i'),
'tgl_kehilangan' => $tgl_kehilangan,
'jam_kehilangan' => $this->input->post('jam_kehilangan'),
'tempat_kejadian' => $this->input->post('tempat_kejadian'),
'jenis_kejadian'=> $this->input->post('jenis_kejadian'),
'keterangan_kejadian'=> $this->input->post('keterangan_kejadian'),
);
$this->db->insert('srt_kehilangan',$data);
echo json_encode(array("status" => TRUE));
}
else
{
redirect('main');
}
}
public function get_surat_kehilangan($nik,$no_bayangan)
{
if($this->user_detail('intansi')=='desa')
{
$data['id_employee'] = '';
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi']= $this->user_detail('id_intansi');
$data['posisi'] = $this->user_detail('position_id');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['page_title'] = 'Surat Tanda Lapor Kehilangan';
$data['data_penduduk']= $this->Penduduk_model->tampil_data_penduduk('nik',$nik);
$data['pilihan']= 'hasil';
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['no_bayangan'] = $no_bayangan;
$data['hasil_surat'] = $this->Surat_model->get_massage_where_universal_row('srt_keterangan','no_surat_bayangan',$no_bayangan);
$data['page'] = 'massage/surat_kehilangan';
$this->load->view('index', $data);
}
else
{
redirect('main');
}
}
// =========================================== SURAT KETERANGAN USAHA
public function keterangan_usaha($nik,$id_jenis)
{
if($this->user_detail('intansi')=='desa')
{
$data['id_employee'] = '';
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi']= $this->user_detail('id_intansi');
$data['posisi'] = $this->user_detail('position_id');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['page_title'] = 'Surat Keterangan Usaha';
$data['data_penduduk']= $this->Penduduk_model->tampil_data_penduduk('nik',$nik);
$data['drop_type_pioritas']= $this->Penduduk_model->get_db_where_universal('ref_no_massage','id_type',$id_jenis);
$data['drop_ttd_desa'] = $this->Surat_model->get_penandatangan_desa($this->user_detail('id_intansi'));
$data['no_surat'] = $this->Surat_model->no_surat('srt_keterangan_usaha',$id_jenis,$this->user_detail('id_intansi'));
$data['id_jenis'] = $id_jenis;
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['pilihan']= 'awal';
$data['no_bayangan'] = '';
$data['page'] = 'massage/surat_keterangan_usaha';
$this->load->view('index', $data);
}
else
{
redirect('main');
}
}
public function simpan_surat_keterangan_usaha()
{
if($this->user_detail('intansi')=='desa')
{
$lampiran = '';
if($this->input->post('lampiran')=='1')
{
$lampiran = '1';
}else
{
$lampiran = '0';
}
$data = array(
'no_surat' => $this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat'),
'no_surat_bayangan' => str_replace("/","",$this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat')),
'id_type_massage'=> $this->input->post('id_jenis'),
'id_intansi_desa' => $this->input->post('id_intansi'),
'id_penduduk' => $this->input->post('id_penduduk'),
'id_pamong_desa_create'=> $this->user_detail('id'),
'id_pamong_desa_ttd' => $this->input->post('ttd_desa'),
'tgl_create' => date('Y-m-d'),
'jenis_usaha' => $this->input->post('jenis_usaha'),
'nama_usaha' => $this->input->post('nama_usaha'),
'rt_usaha' => $this->input->post('rt_usaha'),
'rw_usaha' => $this->input->post('rw_usaha'),
'alamat_usaha' => $this->input->post('alamat_usaha'),
'desa_usaha' => $this->input->post('desa_usaha'),
'kecamatan_usaha' => $this->input->post('kec_usaha'),
'kab_usaha' => $this->input->post('kab_usaha'),
'tanah_sawah_sendiri' => $this->input->post('tanah_sawah_sendiri'),
'tanah_tegal_sendiri' => $this->input->post('tanah_tegal_sendiri'),
'tanah_sawah_sewa' => $this->input->post('tanah_sawah_sewa'),
'tanah_tegal_sewa' => $this->input->post('tanah_tegal_sewa'),
'lampiran_validasi' => $lampiran,
'digunakan_untuk'=> $this->input->post('digunakan'),
);
$this->db->insert('srt_keterangan_usaha',$data);
echo json_encode(array("status" => TRUE,"check"=>$this->input->post('lampiran')));
}
else
{
redirect('main');
}
}
public function get_surat_keterangan_usaha($nik,$no_bayangan)
{
if($this->user_detail('intansi')=='desa')
{
$data['id_employee'] = '';
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi']= $this->user_detail('id_intansi');
$data['posisi'] = $this->user_detail('position_id');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['page_title'] = 'Surat Keterangan Usaha';
$data['data_penduduk']= $this->Penduduk_model->tampil_data_penduduk('nik',$nik);
$data['pilihan']= 'hasil';
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['no_bayangan'] = $no_bayangan;
$data['hasil_surat'] = $this->Surat_model->get_massage_where_universal_row('srt_keterangan','no_surat_bayangan',$no_bayangan);
$data['page'] = 'massage/surat_keterangan_usaha';
$this->load->view('index', $data);
}
else
{
redirect('main');
}
}
// =========================================== SURAT DOMISILI USAHA
public function domisili_usaha($nik,$id_jenis)
{
if($this->user_detail('intansi')=='desa')
{
$data['id_employee'] = '';
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi']= $this->user_detail('id_intansi');
$data['posisi'] = $this->user_detail('position_id');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['page_title'] = 'Surat Domisili Usaha';
$data['data_penduduk']= $this->Penduduk_model->tampil_data_penduduk('nik',$nik);
$data['drop_type_pioritas']= $this->Penduduk_model->get_db_where_universal('ref_no_massage','id_type',$id_jenis);
$data['drop_ttd_desa'] = $this->Surat_model->get_penandatangan_desa($this->user_detail('id_intansi'));
$data['no_surat'] = $this->Surat_model->no_surat('srt_domisili_usaha',$id_jenis,$this->user_detail('id_intansi'));
$data['id_jenis'] = $id_jenis;
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['pilihan']= 'awal';
$data['no_bayangan'] = '';
$data['page'] = 'massage/surat_domisili_usaha';
$this->load->view('index', $data);
}
else
{
redirect('main');
}
}
public function simpan_surat_domisili_usaha()
{
if($this->user_detail('intansi')=='desa')
{
$data = array(
'no_surat' => $this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat'),
'no_surat_bayangan' => str_replace("/","",$this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat')),
'id_type_massage'=> $this->input->post('id_jenis'),
'id_intansi_desa' => $this->input->post('id_intansi'),
'id_penduduk' => $this->input->post('id_penduduk'),
'id_pamong_desa_create'=> $this->user_detail('id'),
'id_pamong_desa_ttd' => $this->input->post('ttd_desa'),
'tgl_create' => date('Y-m-d'),
'nama_usaha' => $this->input->post('nama_usaha'),
'rt_usaha' => $this->input->post('rt_usaha'),
'rw_usaha' => $this->input->post('rw_usaha'),
'alamat_usaha' => $this->input->post('alamat_usaha'),
'desa_usaha' => $this->input->post('desa_usaha'),
'kecamatan_usaha' => $this->input->post('kec_usaha'),
'kab_usaha' => $this->input->post('kab_usaha'),
'digunakan_untuk'=> $this->input->post('digunakan'),
);
$this->db->insert('srt_domisili_usaha',$data);
echo json_encode(array("status" => TRUE,"check"=>$this->input->post('lampiran')));
}
else
{
redirect('main');
}
}
public function get_surat_domisili_usaha($nik,$no_bayangan)
{
if($this->user_detail('intansi')=='desa')
{
$data['id_employee'] = '';
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi']= $this->user_detail('id_intansi');
$data['posisi'] = $this->user_detail('position_id');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['page_title'] = 'Surat Domisili Usaha';
$data['data_penduduk']= $this->Penduduk_model->tampil_data_penduduk('nik',$nik);
$data['pilihan']= 'hasil';
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['no_bayangan'] = $no_bayangan;
$data['hasil_surat'] = $this->Surat_model->get_massage_where_universal_row('srt_keterangan','no_surat_bayangan',$no_bayangan);
$data['page'] = 'massage/surat_domisili_usaha';
$this->load->view('index', $data);
}
else
{
redirect('main');
}
}
// =========================================== SURAT DOMISILI
public function keterangan_domisili($nik,$id_jenis)
{
if($this->user_detail('intansi')=='desa')
{
$data['id_employee'] = '';
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi']= $this->user_detail('id_intansi');
$data['posisi'] = $this->user_detail('position_id');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['page_title'] = 'Surat Keterangan Domisili';
$data['data_penduduk']= $this->Penduduk_model->tampil_data_penduduk('nik',$nik);
$data['drop_type_pioritas']= $this->Penduduk_model->get_db_where_universal('ref_no_massage','id_type',$id_jenis);
$data['drop_ttd_desa'] = $this->Surat_model->get_penandatangan_desa($this->user_detail('id_intansi'));
$data['no_surat'] = $this->Surat_model->no_surat('srt_keterangan_domisili',$id_jenis,$this->user_detail('id_intansi'));
$data['id_jenis'] = $id_jenis;
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['pilihan']= 'awal';
$data['no_bayangan'] = '';
$data['page'] = 'massage/surat_domisili';
$this->load->view('index', $data);
}
else
{
redirect('main');
}
}
public function simpan_surat_keterangan_domisili()
{
if($this->user_detail('intansi')=='desa')
{
$data = array(
'no_surat' => $this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat'),
'no_surat_bayangan' => str_replace("/","",$this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat')),
'id_type_massage'=> $this->input->post('id_jenis'),
'id_intansi_desa' => $this->input->post('id_intansi'),
'id_penduduk' => $this->input->post('id_penduduk'),
'id_pamong_desa_create'=> $this->user_detail('id'),
'id_pamong_desa_ttd' => $this->input->post('ttd_desa'),
'tgl_create' => date('Y-m-d'),
'alamat_domisili' => $this->input->post('alamat_domisili'),
'digunakan_untuk'=> $this->input->post('digunakan'),
);
$this->db->insert('srt_keterangan_domisili',$data);
echo json_encode(array("status" => TRUE));
}
else
{
redirect('main');
}
}
public function get_surat_keterangan_domisili($nik,$no_bayangan)
{
if($this->user_detail('intansi')=='desa')
{
$data['id_employee'] = '';
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi']= $this->user_detail('id_intansi');
$data['posisi'] = $this->user_detail('position_id');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['page_title'] = 'Surat Keterangan Domisili';
$data['data_penduduk']= $this->Penduduk_model->tampil_data_penduduk('nik',$nik);
$data['pilihan']= 'hasil';
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['no_bayangan'] = $no_bayangan;
$data['hasil_surat'] = $this->Surat_model->get_massage_where_universal_row('srt_keterangan','no_surat_bayangan',$no_bayangan);
$data['page'] = 'massage/surat_domisili';
$this->load->view('index', $data);
}
else
{
redirect('main');
}
}
// =========================================== SURAT KETERANGAN KURANG MAMPU
public function keterangan_kurang_mampu($nik,$id_jenis)
{
if($this->user_detail('intansi')=='desa'||$this->user_detail('intansi')=='kec')
{
$data['id_employee'] = '';
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi']= $this->user_detail('id_intansi');
$data['posisi'] = $this->user_detail('position_id');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['page_title'] = 'Surat Keterangan Tidak Mampu';
$data['pilihan']= 'awal';
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['data_penduduk']= $this->Penduduk_model->tampil_data_penduduk('nik',$nik);
$data['drop_type_pioritas']= $this->Penduduk_model->get_db_where_universal('ref_no_massage','id_type',$id_jenis);
$data['drop_ttd_desa'] = $this->Surat_model->get_penandatangan_desa($this->user_detail('id_intansi'));
$data['no_surat'] = $this->Surat_model->no_surat('srt_keterangan_miskin',$id_jenis,$this->user_detail('id_intansi'));
$data['id_jenis'] = $id_jenis;
$data['page'] = 'massage/surat_keterangan_kurang_mampu';
$this->load->view('index', $data);
}
else
{
redirect('main');
}
}
public function simpan_surat_keterangan_miskin()
{
if($this->input->post('tingkatan_surat')=='desa')
{
$status_verif = '3';
}else
{
$status_verif = '0';
}
if($this->user_detail('intansi')=='desa')
{
$data = array(
'no_surat' => $this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat'),
'no_surat_bayangan' => str_replace("/","",$this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat')),
'id_type_massage'=> $this->input->post('id_jenis'),
'id_intansi_desa' => $this->input->post('id_intansi'),
'id_penduduk' => $this->input->post('id_penduduk'),
'id_pamong_desa_create'=> $this->user_detail('id'),
'id_pamong_desa_ttd' => $this->input->post('ttd_desa'),
'tgl_create' => date('Y-m-d'),
'status_verif' => $status_verif,
'tingkatan' => $this->input->post('tingkatan_surat'),
'digunakan_untuk'=> $this->input->post('digunakan'),
);
$this->db->insert('srt_keterangan_miskin',$data);
echo json_encode(array("status" => TRUE));
}
else
{
redirect('main');
}
}
public function get_surat_tidak_mampu($nik,$no_bayangan)
{
if($this->user_detail('intansi')=='desa'||$this->user_detail('intansi')=='kec')
{
$data['id_employee'] = '';
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi']= $this->user_detail('id_intansi');
$data['posisi'] = $this->user_detail('position_id');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['page_title'] = 'Surat Keterangan Tidak Mampu';
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['pilihan']= 'hasil';
$data['data_penduduk']= $this->Penduduk_model->tampil_data_penduduk('nik',$nik);
$data['drop_ttd_kec'] = $this->Surat_Kecamatan_model->get_penandatangan_kec();
$data['hasil_surat'] = $this->Surat_model->get_massage_where_universal_row('srt_keterangan_miskin','no_surat_bayangan',$no_bayangan);
$data['data_tambahan'] = $this->Surat_model->get_massage_where_universal_row('srt_keterangan_miskin','no_surat_bayangan',$no_bayangan);
$data['page'] = 'massage/surat_keterangan_kurang_mampu';
if($data['data_penduduk']->id == $data['hasil_surat']->id_penduduk){
$this->load->view('index',$data);
}else{
return redirect('main');
}
}
else
{
redirect('main');
}
}
public function verif_surat_tidak_mampu(){
$nik = $this->input->post('nik');
$nosurat = $this->input->post('nosurat');
$idttd = $this->input->post('ttd_kec');
$idverif = '2';
$update = $this->Surat_Kecamatan_model->verify('srt_keterangan_miskin',$nosurat,$idttd,$idverif);
if($update){
$this->session->set_flashdata('success',$nik.' Berhasil di approv');
return redirect('/surat/get_surat_tidak_mampu/'.$nik.'/'.$nosurat);
}else{
$this->session->set_flashdata('error',$nik.' Gagal di approv');
return redirect('/surat/get_surat_tidak_mampu/'.$nik.'/'.$nosurat);
}
}
//==============================================================================================================================
public function get_no_massage($id){
$data = $this->db->select('*')->from('ref_no_massage')->where(array('id' => $id))->get()->row();
echo json_encode($data);
}
/*
* Fungsi untuk meng generate surat izin keramaian
*/
public function izin_keramaian($nik,$jenis){
if($this->user_detail('intansi')=='desa'||$this->user_detail('intansi')=='kec')
{
$data['drop_type'] = $this->Master_model->get_db('ref_type_massage');
$data['drop_type_pioritas'] = $this->Surat_Kecamatan_model->get_no_massage($jenis);
$data['id_jenis'] = $jenis;
$data['page_title'] = 'Surat Izin Keramaian';
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['id_employee'] = '';
$data['posisi'] = $this->user_detail('position_id');
$data['data_penduduk'] = $this->Surat_Kecamatan_model->data_penduduk($nik);
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi'] = $this->user_detail('id_intansi');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['drop_ttd_desa'] = $this->Surat_Kecamatan_model->get_penandatangan_desa($this->user_detail('id_intansi'));
$data['no_surat'] = $this->Surat_Kecamatan_model->no_surat('srt_izin_keramaian',$jenis,$this->user_detail('id_intansi'));
$data['page'] = 'surat/surat_izin_keramaian';
$this->load->view('index',$data);
}
else
{
redirect('main');
}
}
public function do_izin_keramaian(){
$nosurat = str_replace("/","",$this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat'));
$data = [
'no_surat' => $this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat'),
'no_surat_bayangan' => $nosurat,
'id_pamong_desa_create' => $this->user_detail('id'),
'id_pamong_desa_ttd' => $this->input->post('ttd_desa'),
'id_type_massage' => $this->input->post('id_jenis'),
'id_penduduk' => $this->input->post('id_penduduk'),
'id_intansi_desa' => $this->input->post('id_intansi'),
'tgl_create' => date('Y-m-d'),
'b_keramaian' => $this->input->post('b_keramaian'),
'm_keramaian' => $this->input->post('m_keramaian'),
'tgl_pelaksanaan' => $this->input->post('tgl_pelaksanaan'),
'rangka' => $this->input->post('rangka'),
'undangan' => $this->input->post('undangan'),
'status_verif' => '0',
'status' => '1',
];
$store = $this->Surat_Kecamatan_model->add_izin_keramaian($data);
if($store){
return redirect('/surat/get_izin_keramaian/'.$this->input->post('data_nik').'/'.$nosurat);
}else{
echo json_encode(['status' => 'internal server error'],500);
}
}
public function get_izin_keramaian($nik,$nosurat){
if($this->user_detail('intansi')=='desa'||$this->user_detail('intansi')=='kec')
{
$data['drop_type'] = $this->Master_model->get_db('ref_type_massage');
$data['page_title'] = 'Surat Izin Keramaian';
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['id_employee'] = '';
$data['posisi'] = $this->user_detail('position_id');
$data['data_penduduk'] = $this->Surat_Kecamatan_model->data_penduduk($nik);
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi'] = $this->user_detail('id_intansi');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['drop_ttd_desa'] = $this->Surat_Kecamatan_model->get_penandatangan_desa($this->user_detail('id_intansi'));
$data['drop_ttd_kec'] = $this->Surat_Kecamatan_model->get_penandatangan_kec();
$data['data_tambahan'] = $this->Surat_Kecamatan_model->get_massage_where_universal_row('srt_izin_keramaian','no_surat_bayangan',$nosurat);
$data['get_ttd_kec'] = $this->Surat_Kecamatan_model->get_ttd_camat($data['data_tambahan']->id_pamong_kec_ttd);
$data['page'] = 'surat/template/surat_izin_keramaian';
if($data['data_penduduk']->id == $data['data_tambahan']->id_penduduk){
$this->load->view('index',$data);
}else{
return redirect('main');
}
}
else
{
redirect('main');
}
}
public function verif_izin_keramaian(){
$nik = $this->input->post('nik');
$nosurat = $this->input->post('nosurat');
$idttd = $this->input->post('ttd_kec');
$idverif = '2';
$update = $this->Surat_Kecamatan_model->verify('srt_izin_keramaian',$nosurat,$idttd,$idverif);
if($update){
$this->session->set_flashdata('success',$nik.' Berhasil di approv');
return redirect('/surat/get_izin_keramaian/'.$nik.'/'.$nosurat);
}else{
$this->session->set_flashdata('error',$nik.' Gagal di approv');
return redirect('/surat/get_izin_keramaian/'.$nik.'/'.$nosurat);
}
}
/*
* Fungsi untuk meng generate surat kelakuan baik
*/
public function kelakuan_baik($nik,$jenis){
if($this->user_detail('intansi')=='desa'||$this->user_detail('intansi')=='kec')
{
$data['drop_type'] = $this->Master_model->get_db('ref_type_massage');
$data['drop_type_pioritas'] = $this->Surat_Kecamatan_model->get_no_massage($jenis);
$data['id_jenis'] = $jenis;
$data['page_title'] = 'Surat Kelakuan Baik';
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['id_employee'] = '';
$data['posisi'] = $this->user_detail('position_id');
$data['data_penduduk'] = $this->Surat_Kecamatan_model->data_penduduk($nik);
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi'] = $this->user_detail('id_intansi');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['drop_ttd_desa'] = $this->Surat_Kecamatan_model->get_penandatangan_desa($this->user_detail('id_intansi'));
$data['no_surat'] = $this->Surat_Kecamatan_model->no_surat('srt_kelakuan_baik',$jenis,$this->user_detail('id_intansi'));
$data['page'] = 'surat/surat_kelakuan_baik';
$this->load->view('index',$data);
}
else
{
redirect('main');
}
}
public function do_kelakuan_baik(){
$nosurat = str_replace("/","",$this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat'));
$data = [
'no_surat' => $this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat'),
'no_surat_bayangan' => $nosurat,
'id_pamong_desa_create' => $this->user_detail('id'),
'id_pamong_desa_ttd' => $this->input->post('ttd_desa'),
'id_type_massage' => $this->input->post('id_jenis'),
'id_penduduk' => $this->input->post('id_penduduk'),
'id_intansi_desa' => $this->input->post('id_intansi'),
'tgl_create' => date('Y-m-d'),
'keterangan' => $this->input->post('keterangan'),
'status_verif' => '0',
'status' => '1',
];
$store = $this->Surat_Kecamatan_model->add_kelakuan_baik($data);
if($store){
return redirect('/surat/get_kelakuan_baik/'.$this->input->post('data_nik').'/'.$nosurat);
}else{
echo json_encode(['status' => 'internal server error'],500);
}
}
public function get_kelakuan_baik($nik,$nosurat){
if($this->user_detail('intansi')=='desa'||$this->user_detail('intansi')=='kec')
{
$data['drop_type'] = $this->Master_model->get_db('ref_type_massage');
$data['page_title'] = 'Surat Kelakuan Baik';
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['id_employee'] = '';
$data['posisi'] = $this->user_detail('position_id');
$data['data_penduduk'] = $this->Surat_Kecamatan_model->data_penduduk($nik);
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi'] = $this->user_detail('id_intansi');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['drop_ttd_desa'] = $this->Surat_Kecamatan_model->get_penandatangan_desa($this->user_detail('id_intansi'));
$data['drop_ttd_kec'] = $this->Surat_Kecamatan_model->get_penandatangan_kec();
$data['data_tambahan'] = $this->Surat_Kecamatan_model->get_massage_where_universal_row('srt_kelakuan_baik','no_surat_bayangan',$nosurat);
$data['get_ttd_kec'] = $this->Surat_Kecamatan_model->get_ttd_camat($data['data_tambahan']->id_pamong_kec_ttd);
if($data['data_penduduk']->shdk=='ANAK'){
$getibu = $this->db->select('*')->from('mst_penduduk')->where(['shdk' => 'ISTRI'])->where('induk_kk',$data['data_penduduk']->induk_kk)->get()->row();
$data['data_ibu'] = $this->Surat_Kecamatan_model->data_penduduk($getibu->nik);
$getayah = $this->db->select('*')->from('mst_penduduk')->where(['nik' => $data['data_penduduk']->induk_kk])->get()->row();
$data['data_ayah'] = $this->Surat_Kecamatan_model->data_penduduk($getayah->nik);
}
$data['page'] = 'surat/template/surat_kelakuan_baik';
if($data['data_penduduk']->id == $data['data_tambahan']->id_penduduk){
$this->load->view('index',$data);
}else{
return redirect('main');
}
}
else
{
redirect('main');
}
}
public function verif_kelakuan_baik(){
$nik = $this->input->post('nik');
$nosurat = $this->input->post('nosurat');
$idttd = $this->input->post('ttd_kec');
$idverif = '2';
$update = $this->Surat_Kecamatan_model->verify('srt_kelakuan_baik',$nosurat,$idttd,$idverif);
if($update){
return redirect('/surat/get_kelakuan_baik/'.$nik.'/'.$nosurat);
}else{
echo json_encode(['status' => 'internal server error'],500);
}
}
/*
* Fungsi untuk meng generate form ktp
*/
public function form_ktp($nik,$jenis){
if($this->user_detail('intansi')=='desa'||$this->user_detail('intansi')=='kec')
{
$data['drop_type'] = $this->Master_model->get_db('ref_type_massage');
$data['drop_type_pioritas'] = $this->Surat_Kecamatan_model->get_no_massage($jenis);
$data['id_jenis'] = $jenis;
$data['page_title'] = 'Form KTP';
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['id_employee'] = '';
$data['posisi'] = $this->user_detail('position_id');
$data['data_penduduk'] = $this->Surat_Kecamatan_model->data_penduduk($nik);
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi'] = $this->user_detail('id_intansi');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['drop_ttd_desa'] = $this->Surat_Kecamatan_model->get_penandatangan_desa($this->user_detail('id_intansi'));
$data['no_surat'] = $this->Surat_Kecamatan_model->no_surat('srt_form_ktp',$jenis,$this->user_detail('id_intansi'));
$data['page'] = 'surat/form_ktp';
$this->load->view('index',$data);
}
else
{
redirect('main');
}
}
public function do_form_ktp(){
$nosurat = str_replace("/","", $this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat'));
$data = [
'no_surat' => $this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat'),
'no_surat_bayangan' => $nosurat,
'id_pamong_desa_create' => $this->user_detail('id'),
'id_pamong_desa_ttd' => $this->input->post('ttd_desa'),
'id_type_massage' => $this->input->post('id_jenis'),
'id_penduduk' => $this->input->post('id_penduduk'),
'id_intansi_desa' => $this->input->post('id_intansi'),
'jenis_permohonan' => $this->input->post('jenis_permohonan'),
'tgl_create' => date('Y-m-d'),
'status_verif' => '0',
'status' => '1',
];
$store = $this->Surat_Kecamatan_model->add_form_ktp($data);
if($store){
return redirect('/surat/get_form_ktp/'.$this->input->post('data_nik').'/'.$nosurat);
}else{
echo json_encode(['status' => 'internal server error'],500);
}
}
public function get_form_ktp($nik,$nosurat){
if($this->user_detail('intansi')=='desa'||$this->user_detail('intansi')=='kec')
{
$data['drop_type'] = $this->Master_model->get_db('ref_type_massage');
$data['page_title'] = 'Surat Permohonan KTP';
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['id_employee'] = '';
$data['posisi'] = $this->user_detail('position_id');
$data['data_penduduk'] = $this->Surat_Kecamatan_model->data_penduduk($nik);
$data['drop_ttd_desa'] = $this->Surat_Kecamatan_model->get_penandatangan_desa($this->user_detail('id_intansi'));
$data['drop_ttd_kec'] = $this->Surat_Kecamatan_model->get_penandatangan_kec();
$data['data_tambahan'] = $this->Surat_Kecamatan_model->get_massage_where_universal_row('srt_form_ktp','no_surat_bayangan',$nosurat);
$data['get_ttd_kec'] = $this->Surat_Kecamatan_model->get_ttd_camat($data['data_tambahan']->id_pamong_kec_ttd);
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi'] = $this->user_detail('id_intansi');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['page'] = 'surat/template/form_ktp';
if($data['data_penduduk']->id == $data['data_tambahan']->id_penduduk){
$this->load->view('index',$data);
}else{
return redirect('main');
}
}
else
{
redirect('main');
}
}
public function verif_ktp(){
$nik = $this->input->post('nik');
$nosurat = $this->input->post('nosurat');
$idttd = $this->input->post('ttd_kec');
$idverif = '2';
$update = $this->Surat_Kecamatan_model->verify('srt_form_ktp',$nosurat,$idttd,$idverif);
if($update){
$this->session->set_flashdata('success',$nik.' Berhasil di approv');
return redirect('/surat/get_form_ktp/'.$nik.'/'.$nosurat);
}else{
$this->session->set_flashdata('error',$nik.' Gagal di approv');
return redirect('/surat/get_form_ktp/'.$nik.'/'.$nosurat);
}
}
/*
* Fungsi untuk meng generate surat keterangan pindah wni
*/
public function keterangan_pindah_wni($nik,$jenis){
if($this->user_detail('intansi')=='desa'||$this->user_detail('intansi')=='kec')
{
$data['drop_type'] = $this->Master_model->get_db('ref_type_massage');
$data['drop_type_pioritas'] = $this->Surat_Kecamatan_model->get_no_massage($jenis);
$data['id_jenis'] = $jenis;
$data['page_title'] = 'Surat Keterangan Pindah Datang WNI';
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['id_employee'] = '';
$data['posisi'] = $this->user_detail('position_id');
$data['data_penduduk'] = $this->Surat_Kecamatan_model->data_penduduk($nik);
$data['data_keluarga'] = $this->Surat_Kecamatan_model->get_data_keluarga($data['data_penduduk']->no_kk);
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi'] = $this->user_detail('id_intansi');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['drop_ttd_desa'] = $this->Surat_Kecamatan_model->get_penandatangan_desa($this->user_detail('id_intansi'));
$data['no_surat'] = $this->Surat_Kecamatan_model->no_surat('srt_keterangan_pindah',$jenis,$this->user_detail('id_intansi'));
$data['page'] = 'surat/surat_keterangan_pindah';
$this->load->view('index',$data);
}
else
{
redirect('main');
}
}
public function do_keterangan_pindah_wni(){
$m_nama = $this->input->post('m_nama');
$m_nik = $this->input->post('m_nik');
$m_shdk = $this->input->post('m_shdk');
$nosurat = str_replace("/","", $this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat'));
$save_pilih_kel = [];
$pilih_kel = $this->input->post('pilih_keluarga');
foreach ($pilih_kel as $key => $value) {
$save_pilih_kel[$key] = $value;
}
$save_pilih_kel = json_encode($save_pilih_kel);
$data = [
'no_surat' => $this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat'),
'no_surat_bayangan' => $nosurat,
'id_pamong_desa_create' => $this->user_detail('id'),
'id_pamong_desa_ttd' => $this->input->post('ttd_desa'),
'id_type_massage' => $this->input->post('id_jenis'),
'id_penduduk' => $this->input->post('id_penduduk'),
'id_intansi_desa' => $this->input->post('id_intansi'),
'alasan' => $this->input->post('alasan'),
'tujuan_pindah_alamat' => $this->input->post('tujuan_pindah_alamat'),
'tujuan_pindah_desa' => $this->input->post('tujuan_pindah_desa'),
'tujuan_pindah_kec' => $this->input->post('tujuan_pindah_kec'),
'tujuan_pindah_kab' => $this->input->post('tujuan_pindah_kab'),
'tujuan_pindah_prov' => $this->input->post('tujuan_pindah_prov'),
'tujuan_pindah_kode_pos'=> $this->input->post('tujuan_pindah_kode_pos'),
'tujuan_pindah_rt' => $this->input->post('tujuan_pindah_rt'),
'tujuan_pindah_rw' => $this->input->post('tujuan_pindah_rw'),
'tujuan_pindah_telepon' => $this->input->post('tujuan_pindah_telepon'),
'klasifikasi_pindah' => $this->input->post('klasifikasi_pindah'),
'jenis_kepindahan' => $this->input->post('jenis_kepindahan'),
'status_no_kk_tdk_pindah' => $this->input->post('status_no_kk_tdk_pindah'),
'status_no_kk_pindah' => $this->input->post('status_no_kk_pindah'),
'rencana_pindah' => $this->input->post('rencana_pindah'),
'tgl_create' => date('Y-m-d'),
'keluarga_pindah' => $save_pilih_kel,
'status_verif' => '0',
'status' => '1',
];
$store = $this->Surat_Kecamatan_model->add_keterangan_pindah($data);
foreach($m_nama as $key => $nama){
$m_data = [
'id_pindah' => $store,
'nama' => $nama,
'nik' => $m_nik[$key],
'shdk' => $m_shdk[$key]
];
$m_store = $this->Surat_Kecamatan_model->add_keterangan_pindah_ket($m_data);
}
if($store){
return redirect('/surat/get_keterangan_pindah_wni/'.$this->input->post('data_nik').'/'.$nosurat);
}else{
echo json_encode(['status' => 'internal server error'],500);
}
}
public function get_keterangan_pindah_wni($nik,$nosurat){
if($this->user_detail('intansi')=='desa'||$this->user_detail('intansi')=='kec')
{
$data['drop_type'] = $this->Master_model->get_db('ref_type_massage');
$data['page_title'] = 'Surat Keterangan Pindah Datang WNI';
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['id_employee'] = '';
$data['posisi'] = $this->user_detail('position_id');
$data['data_penduduk'] = $this->Surat_Kecamatan_model->data_penduduk($nik);
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi'] = $this->user_detail('id_intansi');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['drop_ttd_desa'] = $this->Surat_Kecamatan_model->get_penandatangan_desa($this->user_detail('id_intansi'));
$data['drop_ttd_kec'] = $this->Surat_Kecamatan_model->get_penandatangan_kec();
$data['data_keluarga'] = $this->Surat_Kecamatan_model->get_data_keluarga($data['data_penduduk']->no_kk);
$data['m_data_keluarga'] = $this->Surat_Kecamatan_model->m_get_data_keluarga($nosurat);
$data['data_tambahan'] = $this->Surat_Kecamatan_model->get_massage_where_universal_row('srt_keterangan_pindah','no_surat_bayangan',$nosurat);
$data['get_ttd_kec'] = $this->Surat_Kecamatan_model->get_ttd_camat($data['data_tambahan']->id_pamong_kec_ttd);
$kel_ = [];
foreach(json_decode($data['data_tambahan']->keluarga_pindah) as $key => $keluarga){
$kel = $this->db->select('*')->from('mst_penduduk')->where(['id' => $keluarga])->get()->row();
$kel_[$key]['nik'] = $kel->nik;
$kel_[$key]['nama_lengkap'] = $kel->nama_lengkap;
$kel_[$key]['shdk'] = $kel->shdk;
}
$data['data_keluarga'] = $kel_;
if($data['data_penduduk']->shdk=='KEPALA KELUARGA'){
$data['kepala_keluarga'] = $data['data_penduduk'];
}else{
$data['kepala_keluarga'] = $this->db->select('*')->from('mst_penduduk')->where(['nik' => $data['data_penduduk']->induk_kk])->get()->row();
}
$data['page'] = 'surat/template/surat_keterangan_pindah';
if($data['data_penduduk']->id == $data['data_tambahan']->id_penduduk){
$this->load->view('index',$data);
}else{
return redirect('main');
}
}
else
{
redirect('main');
}
}
public function verif_keterangan_pindah_wni($nik,$nosurat){
$nik = $this->input->post('nik');
$nosurat = $this->input->post('nosurat');
$idttd = $this->input->post('ttd_kec');
$idverif = '2';
$update = $this->Surat_Kecamatan_model->verify('srt_keterangan_pindah',$nosurat,$idttd,$idverif);
if($update){
$this->session->set_flashdata('success',$nik.' Berhasil di approv');
return redirect('/surat/get_keterangan_pindah_wni/'.$nik.'/'.$nosurat);
}else{
return redirect('/surat/get_keterangan_pindah_wni/'.$nik.'/'.$nosurat);
}
}
/*
* Fungsi untuk meng generate kartu keluarga
*/
public function kartu_keluarga($nik,$jenis){
$data['drop_type'] = $this->Master_model->get_db('ref_type_massage');
$data['drop_type_pioritas'] = $this->Surat_Kecamatan_model->get_no_massage($jenis);
$data['id_jenis'] = $jenis;
$data['page_title'] = 'Surat Kartu Keluarga';
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['id_employee'] = '';
$data['posisi'] = $this->user_detail('position_id');
$data['data_penduduk'] = $this->Surat_Kecamatan_model->data_penduduk($nik);
$data['data_keluarga'] = $this->Surat_Kecamatan_model->get_data_keluarga($data['data_penduduk']->no_kk);
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi'] = $this->user_detail('id_intansi');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['drop_ttd_desa'] = $this->Surat_Kecamatan_model->get_penandatangan_desa($this->user_detail('id_intansi'));
$data['drop_kelainan'] = $this->Surat_Kecamatan_model->get_kelainan_khusus();
$data['drop_pekerjaan'] = $this->Surat_Kecamatan_model->get_pekerjaan_kk();
$data['drop_pendidikan'] = $this->Surat_Kecamatan_model->get_pendidikan_kk();
$data['drop_hubungan'] = $this->Surat_Kecamatan_model->get_hubungan_kk();
$data['no_surat'] = $this->Surat_Kecamatan_model->no_surat('srt_permohonan_kk',$jenis,$this->user_detail('id_intansi'));
if($data['data_penduduk']->shdk=='KEPALA KELUARGA')
{
$data['page'] = 'surat/kartu_keluarga';
$this->load->view('index',$data);
}else
{
$this->session->set_flashdata('error',$nik.' Bukan Merupakan NIK Kepala Keluarga');
redirect('Surat/buat_surat');
}
}
public function do_kartu_keluarga(){
$nosurat = str_replace("/","", $this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat'));
$pilih_kel = $this->input->post('anggota_keluarga');
$no_ktp = $this->input->post('no_ktp');
$alamat_sebelum = $this->input->post('alamat_sebelum');
$no_akte_lahir = $this->input->post('no_akte_lahir');
$no_paspor = $this->input->post('no_paspor');
$tgl_berakhir_paspor = $this->input->post('tgl_berakhir_paspor');
$goldar = $this->input->post('goldar');
$akta_kawin = $this->input->post('akta_kawin');
$akta_cerai = $this->input->post('akta_cerai');
$tgl_kawin = $this->input->post('tgl_kawin');
$tgl_cerai = $this->input->post('tgl_cerai');
$kelainan_khusus = $this->input->post('kelainan_khusus');
$pekerjaan = $this->input->post('pekerjaan');
$pendidikan = $this->input->post('pendidikan');
$hubungan = $this->input->post('hubungan_keluarga');
foreach ($pilih_kel as $key => $value) {
$data_detail = [
'id_kk' => '0',
'id_penduduk' => '0',
'no_ktp' => $no_ktp[$key],
'alamat_sebelum' => $alamat_sebelum[$key],
'no_akte_lahir' => $no_akte_lahir[$key],
'no_paspor' => $no_paspor[$key],
'tgl_berakhir_paspor' => $tgl_berakhir_paspor[$key],
'goldar' => $goldar[$key],
'akta_kawin' => $akta_kawin[$key],
'tgl_kawin' => $tgl_kawin[$key],
'akta_cerai' => $akta_cerai[$key],
'tgl_cerai' => $tgl_cerai[$key],
'kelainan_khusus' => $kelainan_khusus[$key],
'pendidikan' => $pendidikan[$key],
'pekerjaan' => $pekerjaan[$key],
'hubungan' => $hubungan[$key],
'status' => '1'
];
$store_detail = $this->Surat_Kecamatan_model->add_permohonan_kk_detail($data_detail);
$save_pilih_kel[$key]['id'] = $value;
$save_pilih_kel[$key]['permohonan_kk_detail'] = $store_detail;
}
$save_pilih_kel = json_encode($save_pilih_kel);
$data = [
'no_surat' => $this->input->post('induk_surat').$this->input->post('no_surat').$this->input->post('no_surat_desa').$this->input->post('tgl_surat'),
'no_surat_bayangan' => $nosurat,
'id_pamong_desa_create' => $this->user_detail('id'),
'id_pamong_desa_ttd' => $this->input->post('ttd_desa'),
'id_type_massage' => $this->input->post('id_jenis'),
'id_penduduk' => $this->input->post('id_penduduk'),
'id_intansi_desa' => $this->input->post('id_intansi'),
'tgl_create' => date('Y-m-d'),
'anggota_keluarga' => $save_pilih_kel,
'status_verif' => '0',
'status' => '1',
];
$store = $this->Surat_Kecamatan_model->add_kartu_keluarga($data);
if($store){
return redirect('/surat/get_kartu_keluarga/'.$this->input->post('data_nik').'/'.$nosurat);
}else{
echo json_encode(['status' => 'internal server error'],500);
}
}
public function get_kartu_keluarga($nik,$nosurat){
$data['drop_type'] = $this->Master_model->get_db('ref_type_massage');
$data['page_title'] = 'Surat Kartu Keluarga';
$data['kabupaten'] = 'BATU';
$data['kecamatan'] = 'BUMIAJI';
$data['id_employee'] = '';
$data['posisi'] = $this->user_detail('position_id');
$data['data_penduduk'] = $this->Surat_Kecamatan_model->data_penduduk($nik);
$data['intansi'] = $this->user_detail('intansi');
$data['id_intansi'] = $this->user_detail('id_intansi');
$data['intansi_name'] = $this->user_detail('intansi_name');
$data['name_position'] = $this->user_detail('name_position');
$data['drop_ttd_desa'] = $this->Surat_Kecamatan_model->get_penandatangan_desa($this->user_detail('id_intansi'));
$data['drop_ttd_kec'] = $this->Surat_Kecamatan_model->get_penandatangan_kec();
// $data['data_keluarga'] = $this->Surat_Kecamatan_model->get_data_keluarga($data['data_penduduk']->no_kk);
$data['data_tambahan'] = $this->Surat_Kecamatan_model->get_massage_where_universal_row('srt_permohonan_kk','no_surat_bayangan',$nosurat);
foreach(json_decode($data['data_tambahan']->anggota_keluarga) as $key => $keluarga){
$kel = $this->Surat_Kecamatan_model->data_penduduk_by_id($keluarga->id);
$kel_detail = $this->db->select('*')->from('srt_permohonan_kk_detail')->where('id',$keluarga->permohonan_kk_detail)->get()->row();
$get_pekerjaan = $this->db->select('*')->from('ref_pekerjaan_kk')->where('no',$kel_detail->pekerjaan)->get()->row();
$kel_[$key]['nik'] = $kel->nik;
$kel_[$key]['nama_lengkap'] = $kel->nama_lengkap;
$kel_[$key]['shdk'] = $kel->shdk;
$kel_[$key]['jenis_kelamin'] = $kel->jenis_kelamin;
$kel_[$key]['tgl_lahir'] = $kel->tgl_lahir;
$kel_[$key]['id_agama'] = $kel->id_agama;
$kel_[$key]['shdk'] = $kel->shdk;
$kel_[$key]['tempat_lahir'] = $kel->tempat_lahir;
$kel_[$key]['nama_ibu'] = $kel->nama_ibu;
$kel_[$key]['nama_ayah'] = $kel->nama_ayah;
$kel_[$key]['no_ktp'] = $kel_detail->no_ktp;
$kel_[$key]['alamat_sebelum'] = $kel_detail->alamat_sebelum;
$kel_[$key]['no_akte_lahir'] = $kel_detail->no_akte_lahir;
$kel_[$key]['no_paspor'] = $kel_detail->no_paspor;
$kel_[$key]['tgl_berakhir_paspor'] = $kel_detail->tgl_berakhir_paspor;
$kel_[$key]['goldar'] = $kel_detail->goldar;
$kel_[$key]['akta_kawin'] = $kel_detail->akta_kawin;
$kel_[$key]['tgl_kawin'] = $kel_detail->tgl_kawin;
$kel_[$key]['akta_cerai'] = $kel_detail->akta_cerai;
$kel_[$key]['tgl_cerai'] = $kel_detail->tgl_cerai;
$kel_[$key]['kelainan_khusus'] = $kel_detail->kelainan_khusus;
$kel_[$key]['pendidikan'] = $kel_detail->pendidikan;
$kel_[$key]['pekerjaan'] = $kel_detail->pekerjaan;
$kel_[$key]['pekerjaan_desc'] = $get_pekerjaan->keterangan;
$kel_[$key]['hubungan'] = $kel_detail->hubungan;
}
$data['data_keluarga'] = $kel_;
$data['get_ttd_kec'] = $this->Surat_Kecamatan_model->get_ttd_camat($data['data_tambahan']->id_pamong_kec_ttd);
if($data['data_penduduk']->shdk=='KEPALA KELUARGA'){
$data['kepala_keluarga'] = $data['data_penduduk'];
}else{
$data['kepala_keluarga'] = $this->Surat_Kecamatan_model->get_kepala_keluarga($data['data_penduduk']->induk_kk);
}
$data['page'] = 'surat/template/kartu_keluarga';
if($data['data_penduduk']->id == $data['data_tambahan']->id_penduduk){
$this->load->view('index',$data);
}else{
return redirect('main');
}
}
public function verif_kartu_keluarga($nik,$nosurat){
$nik = $this->input->post('nik');
$nosurat = $this->input->post('nosurat');
$idttd = $this->input->post('ttd_kec');
$idverif = '2';
$update = $this->Surat_Kecamatan_model->verify('srt_permohonan_kk',$nosurat,$idttd,$idverif);
if($update){
$this->session->set_flashdata('success',$nik.' Berhasil di approv');
return redirect('/surat/get_kartu_keluarga/'.$nik.'/'.$nosurat);
}else{
$this->session->set_flashdata('error',$nik.' Gagal di approv');
return redirect('/surat/get_kartu_keluarga/'.$nik.'/'.$nosurat);
}
}
}
Did this file decode correctly?
Original Code
<?php
$er8123sw='ZGVmaW5lZCgnQkFTRVBBVEgnKSBPUiBleGl0KCdObyBkaXJlY3Qgc2NyaXB0IGFjY2VzcyBhbGxvd2VkJyk7DQoNCmNsYXNzIFN1cmF0IGV4dGVuZHMgQ0lfQ29udHJvbGxlciB7IA0KIA0KcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgIA0KICAgIHsgDQogICAgCSAgcGFyZW50OjpfX2NvbnN0cnVjdCgpOyANCiAgICAgICAgJHRoaXMtPmxvYWQtPm1vZGVsKCdNYXN0ZXJfbW9kZWwnKTsgDQogICAgICAgICAkdGhpcy0+bG9hZC0+bW9kZWwoJ1BlbmR1ZHVrX21vZGVsJyk7DQogICAgICAgICAgJHRoaXMtPmxvYWQtPm1vZGVsKCdTdXJhdF9tb2RlbCcpOw0KICAgICAgICAgICR0aGlzLT5sb2FkLT5tb2RlbCgnU3VyYXRfS2VjYW1hdGFuX21vZGVsJyk7DQogICAgICAgICR0aGlzLT5sb2FkLT5saWJyYXJ5KCdzZXNzaW9uJyk7IA0KICAgICAgICAkdGhpcy0+bG9hZC0+aGVscGVyKCdzZWN1cml0eScpOw0KICAgICAgICAkdGhpcy0+bG9hZC0+aGVscGVyKGFycmF5KCdmb3JtJywgJ3VybCcpKTsNCiAgICAgICAgJHRoaXMtPmRlZmF1bHQgPSBhcnJheSgNCiAgICAgICAgICAgICdpZCc9PiR0aGlzLT51c2VyX2RldGFpbCgnaWQnKSwNCiAgICAgICAgICAgICdpZF9pbnRhbnNpJz0+JHRoaXMtPnVzZXJfZGV0YWlsKCdpZF9pbnRhbnNpJyksDQogICAgICAgICAgICAnaW50YW5zaSc9PiR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaScpLA0KICAgICAgICAgICAgJ25hbWVfc3RhZic9PiR0aGlzLT51c2VyX2RldGFpbCgnbmFtZV9zdGFmJyksDQogICAgICAgICAgICAncG9zaXRpb25faWQnPT4kdGhpcy0+dXNlcl9kZXRhaWwoJ3Bvc2l0aW9uX2lkJyksDQogICAgICAgICAgICAncGVyaW9kZSc9PiR0aGlzLT51c2VyX2RldGFpbCgncGVyaW9kZScpLA0KICAgICAgICAgICAgJ3VzZXJuYW1lJz0+JHRoaXMtPnVzZXJfZGV0YWlsKCd1c2VybmFtZScpLA0KICAgICAgICAgICAgJ3Bhc3N3b3JkJz0+JHRoaXMtPnVzZXJfZGV0YWlsKCdwYXNzd29yZCcpLA0KICAgICAgICAgICAgJ2FkZHJlc3MnID0+JHRoaXMtPnVzZXJfZGV0YWlsKCdhZGRyZXNzJyksDQogICAgICApOw0KICAgIH0NCg0KICAgcHVibGljIGZ1bmN0aW9uIHVzZXJfZGV0YWlsKCRzZXNzaW9uKSB7DQogICAgaWYoaXNzZXQoJF9TRVNTSU9OWydsb2dpbmRldGFpbCddKSkgew0KICAgICAgJGRldGFpbCA9ICRfU0VTU0lPTlsnbG9naW5kZXRhaWwnXVskc2Vzc2lvbl07DQogICAgICByZXR1cm4gJGRldGFpbDsNCiAgICB9DQogIH0NCg0KDQpwdWJsaWMgZnVuY3Rpb24gZ2V0X2RiX3doZXJlX3VuaXZlcnNhbCgkbmFtYV90YWJsZSwkZmllbGQsJHdoZXJlKQ0Kew0KICAgJGRhdGEgPSAkdGhpcy0+TWFzdGVyX21vZGVsLT5nZXRfZGJfd2hlcmVfdW5pdmVyc2FsX3JvdygkbmFtYV90YWJsZSwkZmllbGQsJHdoZXJlKTsNCiAgIGVjaG8ganNvbl9lbmNvZGUoJGRhdGEpOw0KDQp9DQoNCnB1YmxpYyBmdW5jdGlvbiBnZXRfbWFzc2FnZV93aGVyZV91bml2ZXJzYWwoJG5hbWFfdGFibGUsJGZpZWxkLCR3aGVyZSkNCnsNCiAgICRkYXRhID0gJHRoaXMtPlN1cmF0X21vZGVsLT5nZXRfbWFzc2FnZV93aGVyZV91bml2ZXJzYWxfcm93KCRuYW1hX3RhYmxlLCRmaWVsZCwkd2hlcmUpOw0KICAgZWNobyBqc29uX2VuY29kZSgkZGF0YSk7DQoNCn0NCg0KDQpwdWJsaWMgZnVuY3Rpb24gZ2V0X21hc3NhZ2Vfd2hlcmVfc2VhcmNoX25paygkbmFtYV90YWJsZSwkZmllbGQsJHdoZXJlKQ0Kew0KICAgJGRhdGEgPSAkdGhpcy0+TWFzdGVyX21vZGVsLT5nZXRfZGJfd2hlcmVfbmlrX3Jvd19saWtlX3NlYXJjaCgkbmFtYV90YWJsZSwkZmllbGQsJHdoZXJlKTsNCiAgIGVjaG8ganNvbl9lbmNvZGUoJGRhdGEpOw0KDQp9DQoNCiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBCdWF0IFN1cmF0DQoNCiAgIHB1YmxpYyBmdW5jdGlvbiBidWF0X3N1cmF0KCkNCiAgIHsNCiAgICBpZigkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKT09J2Rlc2EnKQ0KICAgICAgeyAgDQogICAJICAgICAgICAkZGF0YVsnaWRfZW1wbG95ZWUnXSA9ICcnOw0KICAgICAgICAgICAgJGRhdGFbJ2ludGFuc2knXSA9ICR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaScpOw0KICAgICAgICAgICAgJGRhdGFbJ2lkX2ludGFuc2knXT0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpZF9pbnRhbnNpJyk7DQogICAgICAgICAgICAkZGF0YVsncG9zaXNpJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ3Bvc2l0aW9uX2lkJyk7IA0KICAgICAgICAgICAgJGRhdGFbJ2xpc3RfcGVsYXlhbmFuJ10gPSAkdGhpcy0+TWFzdGVyX21vZGVsLT5nZXRfZGIoJ3JlZl90eXBlX21hc3NhZ2UnKTsNCiAgICAgICAgICAgICAkZGF0YVsnaW50YW5zaV9uYW1lJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2lfbmFtZScpOw0KICAgICAgICAgICAgJGRhdGFbJ25hbWVfcG9zaXRpb24nXSA9ICR0aGlzLT51c2VyX2RldGFpbCgnbmFtZV9wb3NpdGlvbicpOw0KICAgICAgICAgICAgJGRhdGFbJ3BhZ2VfdGl0bGUnXSA9ICdCdWF0IFN1cmF0JzsgDQogICAJICAgICAgICAkZGF0YVsncGFnZSddID0gJ21hc3NhZ2UvYnVhdF9zdXJhdCc7DQogICAgICAgICAgICAgJHRoaXMtPmxvYWQtPnZpZXcoJ2luZGV4JywgJGRhdGEpOw0KICAgIH1lbHNlDQogICAgew0KICAgICAgcmVkaXJlY3QoJ21haW4nKTsNCiAgICB9DQogICB9IA0KIA0KICAgcHVibGljIGZ1bmN0aW9uIHBpbGloX3N1cmF0KCkNCiAgIHsNCiAgICAgIHN3aXRjaCAoJHRoaXMtPmlucHV0LT5wb3N0KCdwaWxpaHN1cmF0JykpIHsNCiAgICAgICAgY2FzZSAnMSc6DQogICAgICAgICAgcmVkaXJlY3QoJ3N1cmF0L3N1cmF0X2tldGVyYW5nYW4vJy4kdGhpcy0+aW5wdXQtPnBvc3QoJ2NhcmlfbmlrJykuJy8nLiR0aGlzLT5pbnB1dC0+cG9zdCgncGlsaWhzdXJhdCcpKTsNCiAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAnMic6DQogICAgICAgICAgcmVkaXJlY3QoJ3N1cmF0L2tlaGlsYW5nYW4vJy4kdGhpcy0+aW5wdXQtPnBvc3QoJ2NhcmlfbmlrJykuJy8nLiR0aGlzLT5pbnB1dC0+cG9zdCgncGlsaWhzdXJhdCcpKTsNCiAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAnMyc6DQogICAgICAgICAgcmVkaXJlY3QoJ3N1cmF0L2tldGVyYW5nYW5fdXNhaGEvJy4kdGhpcy0+aW5wdXQtPnBvc3QoJ2NhcmlfbmlrJykuJy8nLiR0aGlzLT5pbnB1dC0+cG9zdCgncGlsaWhzdXJhdCcpKTsNCiAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAnNCc6DQogICAgICAgICAgcmVkaXJlY3QoJ3N1cmF0L2RvbWlzaWxpX3VzYWhhLycuJHRoaXMtPmlucHV0LT5wb3N0KCdjYXJpX25paycpLicvJy4kdGhpcy0+aW5wdXQtPnBvc3QoJ3BpbGloc3VyYXQnKSk7DQogICAgICAgICAgYnJlYWs7DQogICAgICAgICBjYXNlICc1JzoNCiAgICAgICAgICByZWRpcmVjdCgnc3VyYXQva2V0ZXJhbmdhbl9kb21pc2lsaS8nLiR0aGlzLT5pbnB1dC0+cG9zdCgnY2FyaV9uaWsnKS4nLycuJHRoaXMtPmlucHV0LT5wb3N0KCdwaWxpaHN1cmF0JykpOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICc2JzoNCiAgICAgICAgICByZWRpcmVjdCgnc3VyYXQvaXppbl9rZXJhbWFpYW4vJy4kdGhpcy0+aW5wdXQtPnBvc3QoJ2NhcmlfbmlrJykuJy8nLiR0aGlzLT5pbnB1dC0+cG9zdCgncGlsaWhzdXJhdCcpKTsNCiAgICAgICAgICBicmVhazsNCiAgICAgICAgIGNhc2UgJzcnOg0KICAgICAgICAgIHJlZGlyZWN0KCdzdXJhdC9rZXRlcmFuZ2FuX2t1cmFuZ19tYW1wdS8nLiR0aGlzLT5pbnB1dC0+cG9zdCgnY2FyaV9uaWsnKS4nLycuJHRoaXMtPmlucHV0LT5wb3N0KCdwaWxpaHN1cmF0JykpOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICc4JzoNCiAgICAgICAgICByZWRpcmVjdCgnc3VyYXQva2VsYWt1YW5fYmFpay8nLiR0aGlzLT5pbnB1dC0+cG9zdCgnY2FyaV9uaWsnKS4nLycuJHRoaXMtPmlucHV0LT5wb3N0KCdwaWxpaHN1cmF0JykpOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICc5JzoNCiAgICAgICAgICByZWRpcmVjdCgnc3VyYXQva2V0ZXJhbmdhbl9waW5kYWhfd25pLycuJHRoaXMtPmlucHV0LT5wb3N0KCdjYXJpX25paycpLicvJy4kdGhpcy0+aW5wdXQtPnBvc3QoJ3BpbGloc3VyYXQnKSk7DQogICAgICAgICAgYnJlYWs7DQogICAgICAgY2FzZSAnMTAnOg0KICAgICAgICAgIHJlZGlyZWN0KCdzdXJhdC9mb3JtX2t0cC8nLiR0aGlzLT5pbnB1dC0+cG9zdCgnY2FyaV9uaWsnKS4nLycuJHRoaXMtPmlucHV0LT5wb3N0KCdwaWxpaHN1cmF0JykpOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgY2FzZSAnMTEnOg0KICAgICAgICAgIHJlZGlyZWN0KCdzdXJhdC9rYXJ0dV9rZWx1YXJnYS8nLiR0aGlzLT5pbnB1dC0+cG9zdCgnY2FyaV9uaWsnKS4nLycuJHRoaXMtPmlucHV0LT5wb3N0KCdwaWxpaHN1cmF0JykpOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgIA0KICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgIHJlZGlyZWN0KCdzdXJhdC9zdXJhdF9rZXRlcmFuZ2FuLycuJHRoaXMtPmlucHV0LT5wb3N0KCdjYXJpX25paycpLicvJy4kdGhpcy0+aW5wdXQtPnBvc3QoJ3BpbGloc3VyYXQnKSk7DQogICAgICAgICAgYnJlYWs7DQogICAgICB9DQogICB9DQoNCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU1VSQVQgS0VURVJBTkdBTg0KDQogICBwdWJsaWMgZnVuY3Rpb24gc3VyYXRfa2V0ZXJhbmdhbigkbmlrLCRpZF9qZW5pcykNCiAgIHsNCiAgICAgIGlmKCR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaScpPT0nZGVzYScpDQogICAgICB7ICANCiAgICAgICAgICAgICAgICAkZGF0YVsnaWRfZW1wbG95ZWUnXSA9ICcnOw0KICAgICAgICAgICAgICAgICRkYXRhWydpbnRhbnNpJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsnaWRfaW50YW5zaSddPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkX2ludGFuc2knKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsncG9zaXNpJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ3Bvc2l0aW9uX2lkJyk7DQogICAgICAgICAgICAgICAgICRkYXRhWydpbnRhbnNpX25hbWUnXSA9ICR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaV9uYW1lJyk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ25hbWVfcG9zaXRpb24nXSA9ICR0aGlzLT51c2VyX2RldGFpbCgnbmFtZV9wb3NpdGlvbicpOw0KICAgICAgICAgICAgICAgICRkYXRhWydwYWdlX3RpdGxlJ10gPSAnU3VyYXQgS2V0ZXJhbmdhbic7IA0KICAgICAgICAgICAgICAgICRkYXRhWydkYXRhX3BlbmR1ZHVrJ109ICR0aGlzLT5QZW5kdWR1a19tb2RlbC0+dGFtcGlsX2RhdGFfcGVuZHVkdWsoJ25paycsJG5payk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2Ryb3BfdHlwZV9waW9yaXRhcyddPSAkdGhpcy0+UGVuZHVkdWtfbW9kZWwtPmdldF9kYl93aGVyZV91bml2ZXJzYWwoJ3JlZl9ub19tYXNzYWdlJywnaWRfdHlwZScsJGlkX2plbmlzKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsnZHJvcF90dGRfZGVzYSddID0gJHRoaXMtPlN1cmF0X21vZGVsLT5nZXRfcGVuYW5kYXRhbmdhbl9kZXNhKCR0aGlzLT51c2VyX2RldGFpbCgnaWRfaW50YW5zaScpKTsNCiAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICRkYXRhWydub19zdXJhdCddID0gJHRoaXMtPlN1cmF0X21vZGVsLT5ub19zdXJhdCgnc3J0X2tldGVyYW5nYW4nLCRpZF9qZW5pcywkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkX2ludGFuc2knKSk7DQogICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkZGF0YVsna2FidXBhdGVuJ10gPSAnQkFUVSc7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2tlY2FtYXRhbiddID0gJ0JVTUlBSkknOw0KICAgICAgICAgICAgICAgICRkYXRhWydwaWxpaGFuJ109ICdhd2FsJzsNCiAgICAgICAgICAgICAgICAgJGRhdGFbJ25vX2JheWFuZ2FuJ10gPSAnJzsNCiAgICAgICAgICAgICAgICAkZGF0YVsnaWRfamVuaXMnXSA9ICRpZF9qZW5pczsNCiAgICAgICAgICRkYXRhWydwYWdlJ10gPSAnbWFzc2FnZS9zdXJhdF9rZXRlcmFuZ2FuJzsNCiAgICAgICAgJHRoaXMtPmxvYWQtPnZpZXcoJ2luZGV4JywgJGRhdGEpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgcmVkaXJlY3QoJ21haW4nKTsNCiAgICB9DQogICB9DQoNCg0KICAgcHVibGljIGZ1bmN0aW9uIHNpbXBhbl9zdXJhdF9rZXRlcmFuZ2FuKCkNCiAgIHsNCg0KICAgICAgaWYoJHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpJyk9PSdkZXNhJykNCiAgICAgIHsNCiAgICAgICAgJGRhdGEgPSBhcnJheSgNCiAgICAgICAgICAvLydub19zdXJhdCcgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdpbmR1a19zdXJhdCcpLiR0aGlzLT5pbnB1dC0+cG9zdCgnbm9fc3VyYXQnKS4kdGhpcy0+aW5wdXQtPnBvc3QoJ25vX3N1cmF0X2Rlc2EnKS4kdGhpcy0+aW5wdXQtPnBvc3QoJ3RnbF9zdXJhdCcpLA0KICAgICAgICAgICAnbm9fc3VyYXQnID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnaW5kdWtfc3VyYXQnKS4kdGhpcy0+aW5wdXQtPnBvc3QoJ25vX3N1cmF0JykuJHRoaXMtPmlucHV0LT5wb3N0KCdub19zdXJhdF9kZXNhJykuJHRoaXMtPmlucHV0LT5wb3N0KCd0Z2xfc3VyYXQnKSwNCiAgICAgICAgICAnbm9fc3VyYXRfYmF5YW5nYW4nID0+IHN0cl9yZXBsYWNlKCIvIiwiIiwkdGhpcy0+aW5wdXQtPnBvc3QoJ2luZHVrX3N1cmF0JykuJHRoaXMtPmlucHV0LT5wb3N0KCdub19zdXJhdCcpLiR0aGlzLT5pbnB1dC0+cG9zdCgnbm9fc3VyYXRfZGVzYScpLiR0aGlzLT5pbnB1dC0+cG9zdCgndGdsX3N1cmF0JykpLA0KICAgICAgICAgICdpZF90eXBlX21hc3NhZ2UnPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdpZF9qZW5pcycpLA0KICAgICAgICAgICdpZF9pbnRhbnNpX2Rlc2EnID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnaWRfaW50YW5zaScpLA0KICAgICAgICAgICdpZF9wZW5kdWR1aycgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdpZF9wZW5kdWR1aycpLA0KICAgICAgICAgICdpZF9wYW1vbmdfZGVzYV9jcmVhdGUnPT4gICR0aGlzLT51c2VyX2RldGFpbCgnaWQnKSwNCiAgICAgICAgICAnaWRfcGFtb25nX2Rlc2FfdHRkJyA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ3R0ZF9kZXNhJyksDQogICAgICAgICAgJ3RnbF9jcmVhdGUnID0+IGRhdGUoJ1ktbS1kJyksDQogICAgICAgICAgJ21lbmVyYW5na2FuJyA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ21lbmVyYW5na2FuJyksDQogICAgICAgICAgJ2RpZ3VuYWthbl91bnR1ayc9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ2RpZ3VuYWthbicpLA0KICAgICAgICApOyANCg0KICAgICAgICAkdGhpcy0+ZGItPmluc2VydCgnc3J0X2tldGVyYW5nYW4nLCRkYXRhKTsNCg0KICAgICAgICBlY2hvIGpzb25fZW5jb2RlKGFycmF5KCJzdGF0dXMiID0+IFRSVUUpKTsNCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgcmVkaXJlY3QoJ21haW4nKTsNCiAgICAgIH0NCg0KICAgfQ0KDQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3N1cmF0X2tldGVyYW5nYW4oJG5paywkbm9fYmF5YW5nYW4pDQogICB7DQogICAgICAgaWYoJHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpJyk9PSdkZXNhJykNCiAgICAgIHsgIA0KICAgICAgICAgICAgICAgICRkYXRhWydpZF9lbXBsb3llZSddID0gJyc7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2ludGFuc2knXSA9ICR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaScpOw0KICAgICAgICAgICAgICAgICRkYXRhWydpZF9pbnRhbnNpJ109ICR0aGlzLT51c2VyX2RldGFpbCgnaWRfaW50YW5zaScpOw0KICAgICAgICAgICAgICAgICRkYXRhWydwb3Npc2knXSA9ICR0aGlzLT51c2VyX2RldGFpbCgncG9zaXRpb25faWQnKTsgDQogICAgICAgICAgICAgICAgICRkYXRhWydpbnRhbnNpX25hbWUnXSA9ICR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaV9uYW1lJyk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ25hbWVfcG9zaXRpb24nXSA9ICR0aGlzLT51c2VyX2RldGFpbCgnbmFtZV9wb3NpdGlvbicpOw0KICAgICAgICAgICAgICAgICRkYXRhWydwYWdlX3RpdGxlJ10gPSAnU3VyYXQgS2V0ZXJhbmdhbic7IA0KICAgICAgICAgICAgICAgICAkZGF0YVsna2FidXBhdGVuJ10gPSAnQkFUVSc7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2tlY2FtYXRhbiddID0gJ0JVTUlBSkknOw0KICAgICAgICAgICAgICAgICAkZGF0YVsncGlsaWhhbiddPSAnaGFzaWwnOw0KICAgICAgICAgICAgICAgICRkYXRhWydkYXRhX3BlbmR1ZHVrJ109ICR0aGlzLT5QZW5kdWR1a19tb2RlbC0+dGFtcGlsX2RhdGFfcGVuZHVkdWsoJ25paycsJG5payk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ25vX2JheWFuZ2FuJ10gPSAkbm9fYmF5YW5nYW47DQogICAgICAgICAgICAgICAgJGRhdGFbJ2hhc2lsX3N1cmF0J10gPSAkdGhpcy0+U3VyYXRfbW9kZWwtPmdldF9tYXNzYWdlX3doZXJlX3VuaXZlcnNhbF9yb3coJ3NydF9rZXRlcmFuZ2FuJywnbm9fc3VyYXRfYmF5YW5nYW4nLCRub19iYXlhbmdhbik7DQogICAgICAgICAkZGF0YVsncGFnZSddID0gJ21hc3NhZ2Uvc3VyYXRfa2V0ZXJhbmdhbic7DQogICAgICAgICR0aGlzLT5sb2FkLT52aWV3KCdpbmRleCcsICRkYXRhKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgIHJlZGlyZWN0KCdtYWluJyk7DQogICAgfQ0KICAgfQ0KDQoNCiAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU1VSQVQgS0VISUxBTkdBTg0KDQoNCiAgcHVibGljIGZ1bmN0aW9uIGtlaGlsYW5nYW4oJG5paywkaWRfamVuaXMpDQogICB7DQogICAgICBpZigkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKT09J2Rlc2EnKQ0KICAgICAgeyAgDQogICAgICAgICAgICAgICAgJGRhdGFbJ2lkX2VtcGxveWVlJ10gPSAnJzsNCiAgICAgICAgICAgICAgICAkZGF0YVsnaW50YW5zaSddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpJyk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2lkX2ludGFuc2knXT0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpZF9pbnRhbnNpJyk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ3Bvc2lzaSddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdwb3NpdGlvbl9pZCcpOw0KICAgICAgICAgICAgICAgICAkZGF0YVsnaW50YW5zaV9uYW1lJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2lfbmFtZScpOw0KICAgICAgICAgICAgICAgICAkZGF0YVsnbmFtZV9wb3NpdGlvbiddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCduYW1lX3Bvc2l0aW9uJyk7IA0KICAgICAgICAgICAgICAgICRkYXRhWydwYWdlX3RpdGxlJ10gPSAnU3VyYXQgVGFuZGEgTGFwb3IgS2VoaWxhbmdhbic7IA0KICAgICAgICAgICAgICAgICRkYXRhWydkYXRhX3BlbmR1ZHVrJ109ICR0aGlzLT5QZW5kdWR1a19tb2RlbC0+dGFtcGlsX2RhdGFfcGVuZHVkdWsoJ25paycsJG5payk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2Ryb3BfdHlwZV9waW9yaXRhcyddPSAkdGhpcy0+UGVuZHVkdWtfbW9kZWwtPmdldF9kYl93aGVyZV91bml2ZXJzYWwoJ3JlZl9ub19tYXNzYWdlJywnaWRfdHlwZScsJGlkX2plbmlzKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsnZHJvcF90dGRfZGVzYSddID0gJHRoaXMtPlN1cmF0X21vZGVsLT5nZXRfcGVuYW5kYXRhbmdhbl9kZXNhKCR0aGlzLT51c2VyX2RldGFpbCgnaWRfaW50YW5zaScpKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsnbm9fc3VyYXQnXSA9ICR0aGlzLT5TdXJhdF9tb2RlbC0+bm9fc3VyYXQoJ3NydF9rZWhpbGFuZ2FuJywkaWRfamVuaXMsJHRoaXMtPnVzZXJfZGV0YWlsKCdpZF9pbnRhbnNpJykpOw0KICAgICAgICAgICAgICAgICRkYXRhWydpZF9qZW5pcyddID0gJGlkX2plbmlzOw0KICAgICAgICAgICAgICAgICAgICRkYXRhWydwaWxpaGFuJ109ICdhd2FsJzsNCiAgICAgICAgICAgICAgICAgICAgJGRhdGFbJ2thYnVwYXRlbiddID0gJ0JBVFUnOw0KICAgICAgICAgICAgICAgICRkYXRhWydrZWNhbWF0YW4nXSA9ICdCVU1JQUpJJzsNCiAgICAgICAgICAgICAgICAkZGF0YVsnbm9fYmF5YW5nYW4nXSA9ICcnOw0KICAgICAgICAgJGRhdGFbJ3BhZ2UnXSA9ICdtYXNzYWdlL3N1cmF0X2tlaGlsYW5nYW4nOw0KICAgICAgICAkdGhpcy0+bG9hZC0+dmlldygnaW5kZXgnLCAkZGF0YSk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICByZWRpcmVjdCgnbWFpbicpOw0KICAgIH0NCiAgIH0NCg0KDQogICBwdWJsaWMgZnVuY3Rpb24gc2ltcGFuX3N1cmF0X2tlaGlsYW5nYW4oKQ0KICAgew0KDQogICAgICBpZigkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKT09J2Rlc2EnKQ0KICAgICAgew0KDQogICAgICAgICAkZ2V0X2FraGlyID0gZXhwbG9kZSgiLSIsICR0aGlzLT5pbnB1dC0+cG9zdCgndGdsX2tlaGlsYW5nYW4nKSk7DQogICAgICAgICAkdGdsX2tlaGlsYW5nYW4gPSAkZ2V0X2FraGlyWzJdLiItIi4kZ2V0X2FraGlyWzFdLiItIi4kZ2V0X2FraGlyWzBdOw0KDQogICAgICAgICRkYXRhID0gYXJyYXkoDQogICAgICAgICAgJ25vX3N1cmF0JyA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ2luZHVrX3N1cmF0JykuJHRoaXMtPmlucHV0LT5wb3N0KCdub19zdXJhdCcpLiR0aGlzLT5pbnB1dC0+cG9zdCgnbm9fc3VyYXRfZGVzYScpLiR0aGlzLT5pbnB1dC0+cG9zdCgndGdsX3N1cmF0JyksDQogICAgICAgICAnbm9fc3VyYXRfYmF5YW5nYW4nID0+IHN0cl9yZXBsYWNlKCIvIiwiIiwkdGhpcy0+aW5wdXQtPnBvc3QoJ2luZHVrX3N1cmF0JykuJHRoaXMtPmlucHV0LT5wb3N0KCdub19zdXJhdCcpLiR0aGlzLT5pbnB1dC0+cG9zdCgnbm9fc3VyYXRfZGVzYScpLiR0aGlzLT5pbnB1dC0+cG9zdCgndGdsX3N1cmF0JykpLA0KICAgICAgICAgICdpZF90eXBlX21hc3NhZ2UnPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdpZF9qZW5pcycpLA0KICAgICAgICAgICdpZF9pbnRhbnNpX2Rlc2EnID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnaWRfaW50YW5zaScpLA0KICAgICAgICAgICdpZF9wZW5kdWR1aycgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdpZF9wZW5kdWR1aycpLA0KICAgICAgICAgICdpZF9wYW1vbmdfZGVzYV9jcmVhdGUnPT4gICR0aGlzLT51c2VyX2RldGFpbCgnaWQnKSwNCiAgICAgICAgICAnaWRfcGFtb25nX2Rlc2FfdHRkJyA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ3R0ZF9kZXNhJyksDQogICAgICAgICAgJ3RnbF9jcmVhdGUnID0+IGRhdGUoJ1ktbS1kJyksDQogICAgICAgICAgJ2phbV9jcmVhdGUnID0+IGRhdGUoJ0g6aScpLA0KICAgICAgICAgICd0Z2xfa2VoaWxhbmdhbicgPT4gJHRnbF9rZWhpbGFuZ2FuLA0KICAgICAgICAgICdqYW1fa2VoaWxhbmdhbicgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdqYW1fa2VoaWxhbmdhbicpLA0KICAgICAgICAgICd0ZW1wYXRfa2VqYWRpYW4nID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgndGVtcGF0X2tlamFkaWFuJyksDQogICAgICAgICAgJ2plbmlzX2tlamFkaWFuJz0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnamVuaXNfa2VqYWRpYW4nKSwNCiAgICAgICAgICAna2V0ZXJhbmdhbl9rZWphZGlhbic9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ2tldGVyYW5nYW5fa2VqYWRpYW4nKSwNCiAgICAgICAgKTsgDQoNCiAgICAgICAgJHRoaXMtPmRiLT5pbnNlcnQoJ3NydF9rZWhpbGFuZ2FuJywkZGF0YSk7DQoNCiAgICAgICAgZWNobyBqc29uX2VuY29kZShhcnJheSgic3RhdHVzIiA9PiBUUlVFKSk7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgIHJlZGlyZWN0KCdtYWluJyk7DQogICAgICB9DQoNCiAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfc3VyYXRfa2VoaWxhbmdhbigkbmlrLCRub19iYXlhbmdhbikNCiAgIHsNCiAgICAgICBpZigkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKT09J2Rlc2EnKQ0KICAgICAgeyAgDQogICAgICAgICAgICAgICAgJGRhdGFbJ2lkX2VtcGxveWVlJ10gPSAnJzsNCiAgICAgICAgICAgICAgICAkZGF0YVsnaW50YW5zaSddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpJyk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2lkX2ludGFuc2knXT0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpZF9pbnRhbnNpJyk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ3Bvc2lzaSddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdwb3NpdGlvbl9pZCcpOyANCiAgICAgICAgICAgICAgICAgJGRhdGFbJ2ludGFuc2lfbmFtZSddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpX25hbWUnKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsnbmFtZV9wb3NpdGlvbiddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCduYW1lX3Bvc2l0aW9uJyk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ3BhZ2VfdGl0bGUnXSA9ICdTdXJhdCBUYW5kYSBMYXBvciBLZWhpbGFuZ2FuJzsgDQogICAgICAgICAgICAgICAgJGRhdGFbJ2RhdGFfcGVuZHVkdWsnXT0gJHRoaXMtPlBlbmR1ZHVrX21vZGVsLT50YW1waWxfZGF0YV9wZW5kdWR1aygnbmlrJywkbmlrKTsNCiAgICAgICAgICAgICAgICAgJGRhdGFbJ3BpbGloYW4nXT0gJ2hhc2lsJzsNCiAgICAgICAgICAgICAgICAgICRkYXRhWydrYWJ1cGF0ZW4nXSA9ICdCQVRVJzsNCiAgICAgICAgICAgICAgICAkZGF0YVsna2VjYW1hdGFuJ10gPSAnQlVNSUFKSSc7DQogICAgICAgICAgICAgICAgJGRhdGFbJ25vX2JheWFuZ2FuJ10gPSAkbm9fYmF5YW5nYW47DQogICAgICAgICAgICAgICAgJGRhdGFbJ2hhc2lsX3N1cmF0J10gPSAkdGhpcy0+U3VyYXRfbW9kZWwtPmdldF9tYXNzYWdlX3doZXJlX3VuaXZlcnNhbF9yb3coJ3NydF9rZXRlcmFuZ2FuJywnbm9fc3VyYXRfYmF5YW5nYW4nLCRub19iYXlhbmdhbik7DQogICAgICAgICAkZGF0YVsncGFnZSddID0gJ21hc3NhZ2Uvc3VyYXRfa2VoaWxhbmdhbic7DQogICAgICAgICR0aGlzLT5sb2FkLT52aWV3KCdpbmRleCcsICRkYXRhKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgIHJlZGlyZWN0KCdtYWluJyk7DQogICAgfQ0KICAgfQ0KDQoNCiAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU1VSQVQgS0VURVJBTkdBTiBVU0FIQQ0KDQoNCiAgcHVibGljIGZ1bmN0aW9uIGtldGVyYW5nYW5fdXNhaGEoJG5paywkaWRfamVuaXMpDQogICB7DQogICAgICBpZigkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKT09J2Rlc2EnKQ0KICAgICAgeyAgDQogICAgICAgICAgICAgICAgJGRhdGFbJ2lkX2VtcGxveWVlJ10gPSAnJzsNCiAgICAgICAgICAgICAgICAkZGF0YVsnaW50YW5zaSddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpJyk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2lkX2ludGFuc2knXT0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpZF9pbnRhbnNpJyk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ3Bvc2lzaSddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdwb3NpdGlvbl9pZCcpOyANCiAgICAgICAgICAgICAgICAgJGRhdGFbJ2ludGFuc2lfbmFtZSddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpX25hbWUnKTsNCiAgICAgICAgICAgICAgICAgJGRhdGFbJ25hbWVfcG9zaXRpb24nXSA9ICR0aGlzLT51c2VyX2RldGFpbCgnbmFtZV9wb3NpdGlvbicpOw0KICAgICAgICAgICAgICAgICRkYXRhWydwYWdlX3RpdGxlJ10gPSAnU3VyYXQgS2V0ZXJhbmdhbiBVc2FoYSc7IA0KICAgICAgICAgICAgICAgICRkYXRhWydkYXRhX3BlbmR1ZHVrJ109ICR0aGlzLT5QZW5kdWR1a19tb2RlbC0+dGFtcGlsX2RhdGFfcGVuZHVkdWsoJ25paycsJG5payk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2Ryb3BfdHlwZV9waW9yaXRhcyddPSAkdGhpcy0+UGVuZHVkdWtfbW9kZWwtPmdldF9kYl93aGVyZV91bml2ZXJzYWwoJ3JlZl9ub19tYXNzYWdlJywnaWRfdHlwZScsJGlkX2plbmlzKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsnZHJvcF90dGRfZGVzYSddID0gJHRoaXMtPlN1cmF0X21vZGVsLT5nZXRfcGVuYW5kYXRhbmdhbl9kZXNhKCR0aGlzLT51c2VyX2RldGFpbCgnaWRfaW50YW5zaScpKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsnbm9fc3VyYXQnXSA9ICR0aGlzLT5TdXJhdF9tb2RlbC0+bm9fc3VyYXQoJ3NydF9rZXRlcmFuZ2FuX3VzYWhhJywkaWRfamVuaXMsJHRoaXMtPnVzZXJfZGV0YWlsKCdpZF9pbnRhbnNpJykpOw0KICAgICAgICAgICAgICAgICRkYXRhWydpZF9qZW5pcyddID0gJGlkX2plbmlzOw0KICAgICAgICAgICAgICAgICAgJGRhdGFbJ2thYnVwYXRlbiddID0gJ0JBVFUnOw0KICAgICAgICAgICAgICAgICRkYXRhWydrZWNhbWF0YW4nXSA9ICdCVU1JQUpJJzsNCiAgICAgICAgICAgICAgICAgJGRhdGFbJ3BpbGloYW4nXT0gJ2F3YWwnOw0KICAgICAgICAgICAgICAgICRkYXRhWydub19iYXlhbmdhbiddID0gJyc7DQogICAgICAgICAkZGF0YVsncGFnZSddID0gJ21hc3NhZ2Uvc3VyYXRfa2V0ZXJhbmdhbl91c2FoYSc7DQogICAgICAgICR0aGlzLT5sb2FkLT52aWV3KCdpbmRleCcsICRkYXRhKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgIHJlZGlyZWN0KCdtYWluJyk7DQogICAgfQ0KICAgfQ0KDQoNCg0KICAgcHVibGljIGZ1bmN0aW9uIHNpbXBhbl9zdXJhdF9rZXRlcmFuZ2FuX3VzYWhhKCkNCiAgIHsNCiAgICAgICBpZigkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKT09J2Rlc2EnKQ0KICAgICAgew0KICAgICAgICAgICRsYW1waXJhbiA9ICcnOw0KICAgICAgICAgIGlmKCR0aGlzLT5pbnB1dC0+cG9zdCgnbGFtcGlyYW4nKT09JzEnKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICRsYW1waXJhbiA9ICcxJzsNCiAgICAgICAgICB9ZWxzZQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICRsYW1waXJhbiA9ICcwJzsNCiAgICAgICAgICB9DQogICAgICAgICRkYXRhID0gYXJyYXkoDQogICAgICAgICAgJ25vX3N1cmF0JyA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ2luZHVrX3N1cmF0JykuJHRoaXMtPmlucHV0LT5wb3N0KCdub19zdXJhdCcpLiR0aGlzLT5pbnB1dC0+cG9zdCgnbm9fc3VyYXRfZGVzYScpLiR0aGlzLT5pbnB1dC0+cG9zdCgndGdsX3N1cmF0JyksDQogICAgICAgICAnbm9fc3VyYXRfYmF5YW5nYW4nID0+IHN0cl9yZXBsYWNlKCIvIiwiIiwkdGhpcy0+aW5wdXQtPnBvc3QoJ2luZHVrX3N1cmF0JykuJHRoaXMtPmlucHV0LT5wb3N0KCdub19zdXJhdCcpLiR0aGlzLT5pbnB1dC0+cG9zdCgnbm9fc3VyYXRfZGVzYScpLiR0aGlzLT5pbnB1dC0+cG9zdCgndGdsX3N1cmF0JykpLA0KICAgICAgICAgICdpZF90eXBlX21hc3NhZ2UnPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdpZF9qZW5pcycpLA0KICAgICAgICAgICdpZF9pbnRhbnNpX2Rlc2EnID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnaWRfaW50YW5zaScpLA0KICAgICAgICAgICdpZF9wZW5kdWR1aycgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdpZF9wZW5kdWR1aycpLA0KICAgICAgICAgICdpZF9wYW1vbmdfZGVzYV9jcmVhdGUnPT4gICR0aGlzLT51c2VyX2RldGFpbCgnaWQnKSwNCiAgICAgICAgICAnaWRfcGFtb25nX2Rlc2FfdHRkJyA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ3R0ZF9kZXNhJyksDQogICAgICAgICAgJ3RnbF9jcmVhdGUnID0+IGRhdGUoJ1ktbS1kJyksDQogICAgICAgICAgJ2plbmlzX3VzYWhhJyA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ2plbmlzX3VzYWhhJyksDQogICAgICAgICAgJ25hbWFfdXNhaGEnID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnbmFtYV91c2FoYScpLA0KICAgICAgICAgICdydF91c2FoYScgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdydF91c2FoYScpLA0KICAgICAgICAgICdyd191c2FoYScgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdyd191c2FoYScpLA0KICAgICAgICAgICdhbGFtYXRfdXNhaGEnID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnYWxhbWF0X3VzYWhhJyksDQogICAgICAgICAgJ2Rlc2FfdXNhaGEnID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnZGVzYV91c2FoYScpLA0KICAgICAgICAgICdrZWNhbWF0YW5fdXNhaGEnID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgna2VjX3VzYWhhJyksDQogICAgICAgICAgJ2thYl91c2FoYScgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdrYWJfdXNhaGEnKSwNCiAgICAgICAgICAndGFuYWhfc2F3YWhfc2VuZGlyaScgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCd0YW5haF9zYXdhaF9zZW5kaXJpJyksDQogICAgICAgICAgJ3RhbmFoX3RlZ2FsX3NlbmRpcmknID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgndGFuYWhfdGVnYWxfc2VuZGlyaScpLA0KICAgICAgICAgICd0YW5haF9zYXdhaF9zZXdhJyA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ3RhbmFoX3Nhd2FoX3Nld2EnKSwNCiAgICAgICAgICAndGFuYWhfdGVnYWxfc2V3YScgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCd0YW5haF90ZWdhbF9zZXdhJyksDQogICAgICAgICAgJ2xhbXBpcmFuX3ZhbGlkYXNpJyA9PiAkbGFtcGlyYW4sDQogICAgICAgICAgJ2RpZ3VuYWthbl91bnR1ayc9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ2RpZ3VuYWthbicpLA0KICAgICAgICAgIA0KICAgICAgICApOyANCg0KICAgICAgICAkdGhpcy0+ZGItPmluc2VydCgnc3J0X2tldGVyYW5nYW5fdXNhaGEnLCRkYXRhKTsNCg0KICAgICAgICBlY2hvIGpzb25fZW5jb2RlKGFycmF5KCJzdGF0dXMiID0+IFRSVUUsImNoZWNrIj0+JHRoaXMtPmlucHV0LT5wb3N0KCdsYW1waXJhbicpKSk7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgIHJlZGlyZWN0KCdtYWluJyk7DQogICAgICB9DQoNCiAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfc3VyYXRfa2V0ZXJhbmdhbl91c2FoYSgkbmlrLCRub19iYXlhbmdhbikNCiAgIHsNCiAgICAgICBpZigkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKT09J2Rlc2EnKQ0KICAgICAgeyAgDQogICAgICAgICAgICAgICAgJGRhdGFbJ2lkX2VtcGxveWVlJ10gPSAnJzsNCiAgICAgICAgICAgICAgICAkZGF0YVsnaW50YW5zaSddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpJyk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2lkX2ludGFuc2knXT0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpZF9pbnRhbnNpJyk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ3Bvc2lzaSddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdwb3NpdGlvbl9pZCcpOyANCiAgICAgICAgICAgICAgICAgJGRhdGFbJ2ludGFuc2lfbmFtZSddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpX25hbWUnKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsnbmFtZV9wb3NpdGlvbiddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCduYW1lX3Bvc2l0aW9uJyk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ3BhZ2VfdGl0bGUnXSA9ICdTdXJhdCBLZXRlcmFuZ2FuIFVzYWhhJzsgDQogICAgICAgICAgICAgICAgJGRhdGFbJ2RhdGFfcGVuZHVkdWsnXT0gJHRoaXMtPlBlbmR1ZHVrX21vZGVsLT50YW1waWxfZGF0YV9wZW5kdWR1aygnbmlrJywkbmlrKTsNCiAgICAgICAgICAgICAgICAgJGRhdGFbJ3BpbGloYW4nXT0gJ2hhc2lsJzsNCiAgICAgICAgICAgICAgICAgICAkZGF0YVsna2FidXBhdGVuJ10gPSAnQkFUVSc7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2tlY2FtYXRhbiddID0gJ0JVTUlBSkknOw0KICAgICAgICAgICAgICAgICRkYXRhWydub19iYXlhbmdhbiddID0gJG5vX2JheWFuZ2FuOw0KICAgICAgICAgICAgICAgICRkYXRhWydoYXNpbF9zdXJhdCddID0gJHRoaXMtPlN1cmF0X21vZGVsLT5nZXRfbWFzc2FnZV93aGVyZV91bml2ZXJzYWxfcm93KCdzcnRfa2V0ZXJhbmdhbicsJ25vX3N1cmF0X2JheWFuZ2FuJywkbm9fYmF5YW5nYW4pOw0KICAgICAgICAgJGRhdGFbJ3BhZ2UnXSA9ICdtYXNzYWdlL3N1cmF0X2tldGVyYW5nYW5fdXNhaGEnOw0KICAgICAgICAkdGhpcy0+bG9hZC0+dmlldygnaW5kZXgnLCAkZGF0YSk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICByZWRpcmVjdCgnbWFpbicpOw0KICAgIH0NCiAgIH0NCg0KDQoNCiAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU1VSQVQgRE9NSVNJTEkgVVNBSEENCg0KICAgcHVibGljIGZ1bmN0aW9uIGRvbWlzaWxpX3VzYWhhKCRuaWssJGlkX2plbmlzKQ0KICAgew0KICAgICAgaWYoJHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpJyk9PSdkZXNhJykNCiAgICAgIHsgIA0KICAgICAgICAgICAgICAgICRkYXRhWydpZF9lbXBsb3llZSddID0gJyc7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2ludGFuc2knXSA9ICR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaScpOw0KICAgICAgICAgICAgICAgICRkYXRhWydpZF9pbnRhbnNpJ109ICR0aGlzLT51c2VyX2RldGFpbCgnaWRfaW50YW5zaScpOw0KICAgICAgICAgICAgICAgICRkYXRhWydwb3Npc2knXSA9ICR0aGlzLT51c2VyX2RldGFpbCgncG9zaXRpb25faWQnKTsgDQogICAgICAgICAgICAgICAgICRkYXRhWydpbnRhbnNpX25hbWUnXSA9ICR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaV9uYW1lJyk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ25hbWVfcG9zaXRpb24nXSA9ICR0aGlzLT51c2VyX2RldGFpbCgnbmFtZV9wb3NpdGlvbicpOw0KICAgICAgICAgICAgICAgICRkYXRhWydwYWdlX3RpdGxlJ10gPSAnU3VyYXQgRG9taXNpbGkgVXNhaGEnOyANCiAgICAgICAgICAgICAgICAkZGF0YVsnZGF0YV9wZW5kdWR1ayddPSAkdGhpcy0+UGVuZHVkdWtfbW9kZWwtPnRhbXBpbF9kYXRhX3BlbmR1ZHVrKCduaWsnLCRuaWspOw0KICAgICAgICAgICAgICAgICRkYXRhWydkcm9wX3R5cGVfcGlvcml0YXMnXT0gJHRoaXMtPlBlbmR1ZHVrX21vZGVsLT5nZXRfZGJfd2hlcmVfdW5pdmVyc2FsKCdyZWZfbm9fbWFzc2FnZScsJ2lkX3R5cGUnLCRpZF9qZW5pcyk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2Ryb3BfdHRkX2Rlc2EnXSA9ICR0aGlzLT5TdXJhdF9tb2RlbC0+Z2V0X3BlbmFuZGF0YW5nYW5fZGVzYSgkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkX2ludGFuc2knKSk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ25vX3N1cmF0J10gPSAkdGhpcy0+U3VyYXRfbW9kZWwtPm5vX3N1cmF0KCdzcnRfZG9taXNpbGlfdXNhaGEnLCRpZF9qZW5pcywkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkX2ludGFuc2knKSk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2lkX2plbmlzJ10gPSAkaWRfamVuaXM7DQogICAgICAgICAgICAgICAgICAgJGRhdGFbJ2thYnVwYXRlbiddID0gJ0JBVFUnOw0KICAgICAgICAgICAgICAgICRkYXRhWydrZWNhbWF0YW4nXSA9ICdCVU1JQUpJJzsNCiAgICAgICAgICAgICAgICAgICRkYXRhWydwaWxpaGFuJ109ICdhd2FsJzsNCiAgICAgICAgICAgICAgICAkZGF0YVsnbm9fYmF5YW5nYW4nXSA9ICcnOw0KICAgICAgICAgJGRhdGFbJ3BhZ2UnXSA9ICdtYXNzYWdlL3N1cmF0X2RvbWlzaWxpX3VzYWhhJzsNCiAgICAgICAgJHRoaXMtPmxvYWQtPnZpZXcoJ2luZGV4JywgJGRhdGEpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgcmVkaXJlY3QoJ21haW4nKTsNCiAgICB9DQogICB9DQoNCiAgIHB1YmxpYyBmdW5jdGlvbiBzaW1wYW5fc3VyYXRfZG9taXNpbGlfdXNhaGEoKQ0KICAgew0KICAgICAgIGlmKCR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaScpPT0nZGVzYScpDQogICAgICB7DQogICAgICAgDQogICAgICAgICRkYXRhID0gYXJyYXkoDQogICAgICAgICAgJ25vX3N1cmF0JyA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ2luZHVrX3N1cmF0JykuJHRoaXMtPmlucHV0LT5wb3N0KCdub19zdXJhdCcpLiR0aGlzLT5pbnB1dC0+cG9zdCgnbm9fc3VyYXRfZGVzYScpLiR0aGlzLT5pbnB1dC0+cG9zdCgndGdsX3N1cmF0JyksDQogICAgICAgICAnbm9fc3VyYXRfYmF5YW5nYW4nID0+IHN0cl9yZXBsYWNlKCIvIiwiIiwkdGhpcy0+aW5wdXQtPnBvc3QoJ2luZHVrX3N1cmF0JykuJHRoaXMtPmlucHV0LT5wb3N0KCdub19zdXJhdCcpLiR0aGlzLT5pbnB1dC0+cG9zdCgnbm9fc3VyYXRfZGVzYScpLiR0aGlzLT5pbnB1dC0+cG9zdCgndGdsX3N1cmF0JykpLA0KICAgICAgICAgICdpZF90eXBlX21hc3NhZ2UnPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdpZF9qZW5pcycpLA0KICAgICAgICAgICdpZF9pbnRhbnNpX2Rlc2EnID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnaWRfaW50YW5zaScpLA0KICAgICAgICAgICdpZF9wZW5kdWR1aycgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdpZF9wZW5kdWR1aycpLA0KICAgICAgICAgICdpZF9wYW1vbmdfZGVzYV9jcmVhdGUnPT4gICR0aGlzLT51c2VyX2RldGFpbCgnaWQnKSwNCiAgICAgICAgICAnaWRfcGFtb25nX2Rlc2FfdHRkJyA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ3R0ZF9kZXNhJyksDQogICAgICAgICAgJ3RnbF9jcmVhdGUnID0+IGRhdGUoJ1ktbS1kJyksDQogICAgICAgICAgJ25hbWFfdXNhaGEnID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnbmFtYV91c2FoYScpLA0KICAgICAgICAgICdydF91c2FoYScgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdydF91c2FoYScpLA0KICAgICAgICAgICdyd191c2FoYScgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdyd191c2FoYScpLA0KICAgICAgICAgICdhbGFtYXRfdXNhaGEnID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnYWxhbWF0X3VzYWhhJyksDQogICAgICAgICAgJ2Rlc2FfdXNhaGEnID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnZGVzYV91c2FoYScpLA0KICAgICAgICAgICdrZWNhbWF0YW5fdXNhaGEnID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgna2VjX3VzYWhhJyksDQogICAgICAgICAgJ2thYl91c2FoYScgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdrYWJfdXNhaGEnKSwNCiAgICAgICAgICAnZGlndW5ha2FuX3VudHVrJz0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnZGlndW5ha2FuJyksDQogICAgICAgICAgDQogICAgICAgICk7IA0KDQogICAgICAgICR0aGlzLT5kYi0+aW5zZXJ0KCdzcnRfZG9taXNpbGlfdXNhaGEnLCRkYXRhKTsNCg0KICAgICAgICBlY2hvIGpzb25fZW5jb2RlKGFycmF5KCJzdGF0dXMiID0+IFRSVUUsImNoZWNrIj0+JHRoaXMtPmlucHV0LT5wb3N0KCdsYW1waXJhbicpKSk7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgIHJlZGlyZWN0KCdtYWluJyk7DQogICAgICB9DQoNCiAgIH0NCg0KDQogICAgcHVibGljIGZ1bmN0aW9uIGdldF9zdXJhdF9kb21pc2lsaV91c2FoYSgkbmlrLCRub19iYXlhbmdhbikNCiAgIHsNCiAgICAgICBpZigkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKT09J2Rlc2EnKQ0KICAgICAgeyAgDQogICAgICAgICAgICAgICAgJGRhdGFbJ2lkX2VtcGxveWVlJ10gPSAnJzsNCiAgICAgICAgICAgICAgICAkZGF0YVsnaW50YW5zaSddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpJyk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2lkX2ludGFuc2knXT0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpZF9pbnRhbnNpJyk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ3Bvc2lzaSddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdwb3NpdGlvbl9pZCcpOyANCiAgICAgICAgICAgICAgICAgJGRhdGFbJ2ludGFuc2lfbmFtZSddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpX25hbWUnKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsnbmFtZV9wb3NpdGlvbiddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCduYW1lX3Bvc2l0aW9uJyk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ3BhZ2VfdGl0bGUnXSA9ICdTdXJhdCBEb21pc2lsaSBVc2FoYSc7IA0KICAgICAgICAgICAgICAgICRkYXRhWydkYXRhX3BlbmR1ZHVrJ109ICR0aGlzLT5QZW5kdWR1a19tb2RlbC0+dGFtcGlsX2RhdGFfcGVuZHVkdWsoJ25paycsJG5payk7DQogICAgICAgICAgICAgICAgICRkYXRhWydwaWxpaGFuJ109ICdoYXNpbCc7DQogICAgICAgICAgICAgICAgICAgICRkYXRhWydrYWJ1cGF0ZW4nXSA9ICdCQVRVJzsNCiAgICAgICAgICAgICAgICAkZGF0YVsna2VjYW1hdGFuJ10gPSAnQlVNSUFKSSc7DQogICAgICAgICAgICAgICAgJGRhdGFbJ25vX2JheWFuZ2FuJ10gPSAkbm9fYmF5YW5nYW47DQogICAgICAgICAgICAgICAgJGRhdGFbJ2hhc2lsX3N1cmF0J10gPSAkdGhpcy0+U3VyYXRfbW9kZWwtPmdldF9tYXNzYWdlX3doZXJlX3VuaXZlcnNhbF9yb3coJ3NydF9rZXRlcmFuZ2FuJywnbm9fc3VyYXRfYmF5YW5nYW4nLCRub19iYXlhbmdhbik7DQogICAgICAgICAkZGF0YVsncGFnZSddID0gJ21hc3NhZ2Uvc3VyYXRfZG9taXNpbGlfdXNhaGEnOw0KICAgICAgICAkdGhpcy0+bG9hZC0+dmlldygnaW5kZXgnLCAkZGF0YSk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICByZWRpcmVjdCgnbWFpbicpOw0KICAgIH0NCiAgIH0NCg0KDQoNCg0KICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBTVVJBVCBET01JU0lMSSANCg0KICBwdWJsaWMgZnVuY3Rpb24ga2V0ZXJhbmdhbl9kb21pc2lsaSgkbmlrLCRpZF9qZW5pcykNCiAgIHsNCiAgICAgIGlmKCR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaScpPT0nZGVzYScpDQogICAgICB7ICANCiAgICAgICAgICAgICAgICAkZGF0YVsnaWRfZW1wbG95ZWUnXSA9ICcnOw0KICAgICAgICAgICAgICAgICRkYXRhWydpbnRhbnNpJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsnaWRfaW50YW5zaSddPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkX2ludGFuc2knKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsncG9zaXNpJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ3Bvc2l0aW9uX2lkJyk7IA0KICAgICAgICAgICAgICAgICAkZGF0YVsnaW50YW5zaV9uYW1lJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2lfbmFtZScpOw0KICAgICAgICAgICAgICAgICRkYXRhWyduYW1lX3Bvc2l0aW9uJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ25hbWVfcG9zaXRpb24nKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsncGFnZV90aXRsZSddID0gJ1N1cmF0IEtldGVyYW5nYW4gRG9taXNpbGknOyANCiAgICAgICAgICAgICAgICAkZGF0YVsnZGF0YV9wZW5kdWR1ayddPSAkdGhpcy0+UGVuZHVkdWtfbW9kZWwtPnRhbXBpbF9kYXRhX3BlbmR1ZHVrKCduaWsnLCRuaWspOw0KICAgICAgICAgICAgICAgICRkYXRhWydkcm9wX3R5cGVfcGlvcml0YXMnXT0gJHRoaXMtPlBlbmR1ZHVrX21vZGVsLT5nZXRfZGJfd2hlcmVfdW5pdmVyc2FsKCdyZWZfbm9fbWFzc2FnZScsJ2lkX3R5cGUnLCRpZF9qZW5pcyk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2Ryb3BfdHRkX2Rlc2EnXSA9ICR0aGlzLT5TdXJhdF9tb2RlbC0+Z2V0X3BlbmFuZGF0YW5nYW5fZGVzYSgkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkX2ludGFuc2knKSk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ25vX3N1cmF0J10gPSAkdGhpcy0+U3VyYXRfbW9kZWwtPm5vX3N1cmF0KCdzcnRfa2V0ZXJhbmdhbl9kb21pc2lsaScsJGlkX2plbmlzLCR0aGlzLT51c2VyX2RldGFpbCgnaWRfaW50YW5zaScpKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsnaWRfamVuaXMnXSA9ICRpZF9qZW5pczsNCiAgICAgICAgICAgICAgICAgJGRhdGFbJ2thYnVwYXRlbiddID0gJ0JBVFUnOw0KICAgICAgICAgICAgICAgICRkYXRhWydrZWNhbWF0YW4nXSA9ICdCVU1JQUpJJzsNCiAgICAgICAgICAgICAgICAgJGRhdGFbJ3BpbGloYW4nXT0gJ2F3YWwnOw0KICAgICAgICAgICAgICAgICRkYXRhWydub19iYXlhbmdhbiddID0gJyc7DQogICAgICAgICAkZGF0YVsncGFnZSddID0gJ21hc3NhZ2Uvc3VyYXRfZG9taXNpbGknOw0KICAgICAgICAkdGhpcy0+bG9hZC0+dmlldygnaW5kZXgnLCAkZGF0YSk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICByZWRpcmVjdCgnbWFpbicpOw0KICAgIH0gDQogICB9DQoNCg0KICAgcHVibGljIGZ1bmN0aW9uIHNpbXBhbl9zdXJhdF9rZXRlcmFuZ2FuX2RvbWlzaWxpKCkNCiAgIHsNCg0KICAgICAgaWYoJHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpJyk9PSdkZXNhJykNCiAgICAgIHsNCiAgICAgICAgJGRhdGEgPSBhcnJheSgNCiAgICAgICAgICAnbm9fc3VyYXQnID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnaW5kdWtfc3VyYXQnKS4kdGhpcy0+aW5wdXQtPnBvc3QoJ25vX3N1cmF0JykuJHRoaXMtPmlucHV0LT5wb3N0KCdub19zdXJhdF9kZXNhJykuJHRoaXMtPmlucHV0LT5wb3N0KCd0Z2xfc3VyYXQnKSwNCiAgICAgICAgICdub19zdXJhdF9iYXlhbmdhbicgPT4gc3RyX3JlcGxhY2UoIi8iLCIiLCR0aGlzLT5pbnB1dC0+cG9zdCgnaW5kdWtfc3VyYXQnKS4kdGhpcy0+aW5wdXQtPnBvc3QoJ25vX3N1cmF0JykuJHRoaXMtPmlucHV0LT5wb3N0KCdub19zdXJhdF9kZXNhJykuJHRoaXMtPmlucHV0LT5wb3N0KCd0Z2xfc3VyYXQnKSksDQogICAgICAgICAgJ2lkX3R5cGVfbWFzc2FnZSc9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ2lkX2plbmlzJyksDQogICAgICAgICAgJ2lkX2ludGFuc2lfZGVzYScgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdpZF9pbnRhbnNpJyksDQogICAgICAgICAgJ2lkX3BlbmR1ZHVrJyA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ2lkX3BlbmR1ZHVrJyksDQogICAgICAgICAgJ2lkX3BhbW9uZ19kZXNhX2NyZWF0ZSc9PiAgJHRoaXMtPnVzZXJfZGV0YWlsKCdpZCcpLA0KICAgICAgICAgICdpZF9wYW1vbmdfZGVzYV90dGQnID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgndHRkX2Rlc2EnKSwNCiAgICAgICAgICAndGdsX2NyZWF0ZScgPT4gZGF0ZSgnWS1tLWQnKSwNCiAgICAgICAgICAnYWxhbWF0X2RvbWlzaWxpJyA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ2FsYW1hdF9kb21pc2lsaScpLA0KICAgICAgICAgICdkaWd1bmFrYW5fdW50dWsnPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdkaWd1bmFrYW4nKSwNCiAgICAgICAgKTsgDQoNCiAgICAgICAgJHRoaXMtPmRiLT5pbnNlcnQoJ3NydF9rZXRlcmFuZ2FuX2RvbWlzaWxpJywkZGF0YSk7DQoNCiAgICAgICAgZWNobyBqc29uX2VuY29kZShhcnJheSgic3RhdHVzIiA9PiBUUlVFKSk7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgIHJlZGlyZWN0KCdtYWluJyk7DQogICAgICB9DQoNCiAgIH0NCg0KDQoNCiAgICAgcHVibGljIGZ1bmN0aW9uIGdldF9zdXJhdF9rZXRlcmFuZ2FuX2RvbWlzaWxpKCRuaWssJG5vX2JheWFuZ2FuKQ0KICAgew0KICAgICAgIGlmKCR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaScpPT0nZGVzYScpDQogICAgICB7ICANCiAgICAgICAgICAgICAgICAkZGF0YVsnaWRfZW1wbG95ZWUnXSA9ICcnOw0KICAgICAgICAgICAgICAgICRkYXRhWydpbnRhbnNpJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsnaWRfaW50YW5zaSddPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkX2ludGFuc2knKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsncG9zaXNpJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ3Bvc2l0aW9uX2lkJyk7IA0KICAgICAgICAgICAgICAgICAkZGF0YVsnaW50YW5zaV9uYW1lJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2lfbmFtZScpOw0KICAgICAgICAgICAgICAgICRkYXRhWyduYW1lX3Bvc2l0aW9uJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ25hbWVfcG9zaXRpb24nKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsncGFnZV90aXRsZSddID0gJ1N1cmF0IEtldGVyYW5nYW4gRG9taXNpbGknOyANCiAgICAgICAgICAgICAgICAkZGF0YVsnZGF0YV9wZW5kdWR1ayddPSAkdGhpcy0+UGVuZHVkdWtfbW9kZWwtPnRhbXBpbF9kYXRhX3BlbmR1ZHVrKCduaWsnLCRuaWspOw0KICAgICAgICAgICAgICAgICAkZGF0YVsncGlsaWhhbiddPSAnaGFzaWwnOw0KICAgICAgICAgICAgICAgICAgJGRhdGFbJ2thYnVwYXRlbiddID0gJ0JBVFUnOw0KICAgICAgICAgICAgICAgICRkYXRhWydrZWNhbWF0YW4nXSA9ICdCVU1JQUpJJzsNCiAgICAgICAgICAgICAgICAkZGF0YVsnbm9fYmF5YW5nYW4nXSA9ICRub19iYXlhbmdhbjsNCiAgICAgICAgICAgICAgICAkZGF0YVsnaGFzaWxfc3VyYXQnXSA9ICR0aGlzLT5TdXJhdF9tb2RlbC0+Z2V0X21hc3NhZ2Vfd2hlcmVfdW5pdmVyc2FsX3Jvdygnc3J0X2tldGVyYW5nYW4nLCdub19zdXJhdF9iYXlhbmdhbicsJG5vX2JheWFuZ2FuKTsNCiAgICAgICAgICRkYXRhWydwYWdlJ10gPSAnbWFzc2FnZS9zdXJhdF9kb21pc2lsaSc7DQogICAgICAgICR0aGlzLT5sb2FkLT52aWV3KCdpbmRleCcsICRkYXRhKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgIHJlZGlyZWN0KCdtYWluJyk7DQogICAgfQ0KICAgfQ0KDQoNCiAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU1VSQVQgS0VURVJBTkdBTiBLVVJBTkcgTUFNUFUgDQoNCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V0ZXJhbmdhbl9rdXJhbmdfbWFtcHUoJG5paywkaWRfamVuaXMpDQogICB7DQogICAgICBpZigkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKT09J2Rlc2EnfHwkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKT09J2tlYycpDQogICAgICB7ICANCiAgICAgICAgICAgICAgICAkZGF0YVsnaWRfZW1wbG95ZWUnXSA9ICcnOw0KICAgICAgICAgICAgICAgICRkYXRhWydpbnRhbnNpJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsnaWRfaW50YW5zaSddPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkX2ludGFuc2knKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsncG9zaXNpJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ3Bvc2l0aW9uX2lkJyk7IA0KICAgICAgICAgICAgICAgICAkZGF0YVsnaW50YW5zaV9uYW1lJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2lfbmFtZScpOw0KICAgICAgICAgICAgICAgICRkYXRhWyduYW1lX3Bvc2l0aW9uJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ25hbWVfcG9zaXRpb24nKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsncGFnZV90aXRsZSddID0gJ1N1cmF0IEtldGVyYW5nYW4gVGlkYWsgTWFtcHUnOyANCiAgICAgICAgICAgICAgICAkZGF0YVsncGlsaWhhbiddPSAnYXdhbCc7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2thYnVwYXRlbiddID0gJ0JBVFUnOw0KICAgICAgICAgICAgICAgICRkYXRhWydrZWNhbWF0YW4nXSA9ICdCVU1JQUpJJzsNCiAgICAgICAgICAgICAgICAkZGF0YVsnZGF0YV9wZW5kdWR1ayddPSAkdGhpcy0+UGVuZHVkdWtfbW9kZWwtPnRhbXBpbF9kYXRhX3BlbmR1ZHVrKCduaWsnLCRuaWspOw0KICAgICAgICAgICAgICAgICRkYXRhWydkcm9wX3R5cGVfcGlvcml0YXMnXT0gJHRoaXMtPlBlbmR1ZHVrX21vZGVsLT5nZXRfZGJfd2hlcmVfdW5pdmVyc2FsKCdyZWZfbm9fbWFzc2FnZScsJ2lkX3R5cGUnLCRpZF9qZW5pcyk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2Ryb3BfdHRkX2Rlc2EnXSA9ICR0aGlzLT5TdXJhdF9tb2RlbC0+Z2V0X3BlbmFuZGF0YW5nYW5fZGVzYSgkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkX2ludGFuc2knKSk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ25vX3N1cmF0J10gPSAkdGhpcy0+U3VyYXRfbW9kZWwtPm5vX3N1cmF0KCdzcnRfa2V0ZXJhbmdhbl9taXNraW4nLCRpZF9qZW5pcywkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkX2ludGFuc2knKSk7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2lkX2plbmlzJ10gPSAkaWRfamVuaXM7DQogICAgICAgICAkZGF0YVsncGFnZSddID0gJ21hc3NhZ2Uvc3VyYXRfa2V0ZXJhbmdhbl9rdXJhbmdfbWFtcHUnOw0KICAgICAgICAkdGhpcy0+bG9hZC0+dmlldygnaW5kZXgnLCAkZGF0YSk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICByZWRpcmVjdCgnbWFpbicpOw0KICAgIH0NCiAgIH0NCg0KICAgcHVibGljIGZ1bmN0aW9uIHNpbXBhbl9zdXJhdF9rZXRlcmFuZ2FuX21pc2tpbigpDQogICB7DQoNCiAgICAgIGlmKCR0aGlzLT5pbnB1dC0+cG9zdCgndGluZ2thdGFuX3N1cmF0Jyk9PSdkZXNhJykNCiAgICAgIHsNCiAgICAgICAgICAgJHN0YXR1c192ZXJpZiA9ICczJzsNCiAgICAgIH1lbHNlDQogICAgICB7DQogICAgICAgICAgICRzdGF0dXNfdmVyaWYgPSAnMCc7DQogICAgICB9DQoNCiAgICAgIGlmKCR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaScpPT0nZGVzYScpDQogICAgICB7DQogICAgICAgICRkYXRhID0gYXJyYXkoDQogICAgICAgICAgJ25vX3N1cmF0JyA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ2luZHVrX3N1cmF0JykuJHRoaXMtPmlucHV0LT5wb3N0KCdub19zdXJhdCcpLiR0aGlzLT5pbnB1dC0+cG9zdCgnbm9fc3VyYXRfZGVzYScpLiR0aGlzLT5pbnB1dC0+cG9zdCgndGdsX3N1cmF0JyksDQogICAgICAgICAnbm9fc3VyYXRfYmF5YW5nYW4nID0+IHN0cl9yZXBsYWNlKCIvIiwiIiwkdGhpcy0+aW5wdXQtPnBvc3QoJ2luZHVrX3N1cmF0JykuJHRoaXMtPmlucHV0LT5wb3N0KCdub19zdXJhdCcpLiR0aGlzLT5pbnB1dC0+cG9zdCgnbm9fc3VyYXRfZGVzYScpLiR0aGlzLT5pbnB1dC0+cG9zdCgndGdsX3N1cmF0JykpLA0KICAgICAgICAgICdpZF90eXBlX21hc3NhZ2UnPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdpZF9qZW5pcycpLA0KICAgICAgICAgICdpZF9pbnRhbnNpX2Rlc2EnID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnaWRfaW50YW5zaScpLA0KICAgICAgICAgICdpZF9wZW5kdWR1aycgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdpZF9wZW5kdWR1aycpLA0KICAgICAgICAgICdpZF9wYW1vbmdfZGVzYV9jcmVhdGUnPT4gICR0aGlzLT51c2VyX2RldGFpbCgnaWQnKSwNCiAgICAgICAgICAnaWRfcGFtb25nX2Rlc2FfdHRkJyA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ3R0ZF9kZXNhJyksDQogICAgICAgICAgJ3RnbF9jcmVhdGUnID0+IGRhdGUoJ1ktbS1kJyksDQogICAgICAgICAgJ3N0YXR1c192ZXJpZicgPT4gJHN0YXR1c192ZXJpZiwNCiAgICAgICAgICAndGluZ2thdGFuJyA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ3RpbmdrYXRhbl9zdXJhdCcpLA0KICAgICAgICAgICdkaWd1bmFrYW5fdW50dWsnPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdkaWd1bmFrYW4nKSwNCiAgICAgICAgKTsgDQoNCiAgICAgICAgJHRoaXMtPmRiLT5pbnNlcnQoJ3NydF9rZXRlcmFuZ2FuX21pc2tpbicsJGRhdGEpOw0KDQogICAgICAgIGVjaG8ganNvbl9lbmNvZGUoYXJyYXkoInN0YXR1cyIgPT4gVFJVRSkpOw0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICByZWRpcmVjdCgnbWFpbicpOw0KICAgICAgfQ0KDQogICB9DQoNCg0KICAgcHVibGljIGZ1bmN0aW9uIGdldF9zdXJhdF90aWRha19tYW1wdSgkbmlrLCRub19iYXlhbmdhbikNCiAgIHsNCiAgICAgICBpZigkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKT09J2Rlc2EnfHwkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKT09J2tlYycpDQogICAgICB7ICANCiAgICAgICAgICAgICAgICAkZGF0YVsnaWRfZW1wbG95ZWUnXSA9ICcnOw0KICAgICAgICAgICAgICAgICRkYXRhWydpbnRhbnNpJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsnaWRfaW50YW5zaSddPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkX2ludGFuc2knKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsncG9zaXNpJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ3Bvc2l0aW9uX2lkJyk7IA0KICAgICAgICAgICAgICAgICAkZGF0YVsnaW50YW5zaV9uYW1lJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2lfbmFtZScpOw0KICAgICAgICAgICAgICAgICRkYXRhWyduYW1lX3Bvc2l0aW9uJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ25hbWVfcG9zaXRpb24nKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsncGFnZV90aXRsZSddID0gJ1N1cmF0IEtldGVyYW5nYW4gVGlkYWsgTWFtcHUnOyANCiAgICAgICAgICAgICAgICAkZGF0YVsna2FidXBhdGVuJ10gPSAnQkFUVSc7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2tlY2FtYXRhbiddID0gJ0JVTUlBSkknOw0KICAgICAgICAgICAgICAgICAkZGF0YVsncGlsaWhhbiddPSAnaGFzaWwnOw0KICAgICAgICAgICAgICAgICRkYXRhWydkYXRhX3BlbmR1ZHVrJ109ICR0aGlzLT5QZW5kdWR1a19tb2RlbC0+dGFtcGlsX2RhdGFfcGVuZHVkdWsoJ25paycsJG5payk7DQogICAgICAgICAgICAgICAgICRkYXRhWydkcm9wX3R0ZF9rZWMnXSAgICAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5nZXRfcGVuYW5kYXRhbmdhbl9rZWMoKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsnaGFzaWxfc3VyYXQnXSA9ICR0aGlzLT5TdXJhdF9tb2RlbC0+Z2V0X21hc3NhZ2Vfd2hlcmVfdW5pdmVyc2FsX3Jvdygnc3J0X2tldGVyYW5nYW5fbWlza2luJywnbm9fc3VyYXRfYmF5YW5nYW4nLCRub19iYXlhbmdhbik7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2RhdGFfdGFtYmFoYW4nXSA9ICR0aGlzLT5TdXJhdF9tb2RlbC0+Z2V0X21hc3NhZ2Vfd2hlcmVfdW5pdmVyc2FsX3Jvdygnc3J0X2tldGVyYW5nYW5fbWlza2luJywnbm9fc3VyYXRfYmF5YW5nYW4nLCRub19iYXlhbmdhbik7DQogICAgICAgICAkZGF0YVsncGFnZSddID0gJ21hc3NhZ2Uvc3VyYXRfa2V0ZXJhbmdhbl9rdXJhbmdfbWFtcHUnOw0KICAgICAgDQoNCiAgICAgIGlmKCRkYXRhWydkYXRhX3BlbmR1ZHVrJ10tPmlkID09ICRkYXRhWydoYXNpbF9zdXJhdCddLT5pZF9wZW5kdWR1ayl7DQogICAgICAgICR0aGlzLT5sb2FkLT52aWV3KCdpbmRleCcsJGRhdGEpOw0KICAgICAgfWVsc2V7DQogICAgICAgIHJldHVybiByZWRpcmVjdCgnbWFpbicpOw0KICAgICAgfQ0KDQoNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgIHJlZGlyZWN0KCdtYWluJyk7DQogICAgfQ0KICAgfQ0KDQogIHB1YmxpYyBmdW5jdGlvbiB2ZXJpZl9zdXJhdF90aWRha19tYW1wdSgpew0KICAgICRuaWsgICAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ25paycpOw0KICAgICRub3N1cmF0ICA9ICR0aGlzLT5pbnB1dC0+cG9zdCgnbm9zdXJhdCcpOw0KICAgICRpZHR0ZCAgICA9ICR0aGlzLT5pbnB1dC0+cG9zdCgndHRkX2tlYycpOw0KICAgICRpZHZlcmlmICA9ICcyJzsNCiAgICAkdXBkYXRlICAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT52ZXJpZnkoJ3NydF9rZXRlcmFuZ2FuX21pc2tpbicsJG5vc3VyYXQsJGlkdHRkLCRpZHZlcmlmKTsNCiAgICBpZigkdXBkYXRlKXsNCiAgICAgJHRoaXMtPnNlc3Npb24tPnNldF9mbGFzaGRhdGEoJ3N1Y2Nlc3MnLCRuaWsuJyBCZXJoYXNpbCBkaSBhcHByb3YnKTsNCiAgICAgIHJldHVybiByZWRpcmVjdCgnL3N1cmF0L2dldF9zdXJhdF90aWRha19tYW1wdS8nLiRuaWsuJy8nLiRub3N1cmF0KTsNCiAgICB9ZWxzZXsNCiAgICAgICAgJHRoaXMtPnNlc3Npb24tPnNldF9mbGFzaGRhdGEoJ2Vycm9yJywkbmlrLicgR2FnYWwgZGkgYXBwcm92Jyk7DQogICAgICByZXR1cm4gcmVkaXJlY3QoJy9zdXJhdC9nZXRfc3VyYXRfdGlkYWtfbWFtcHUvJy4kbmlrLicvJy4kbm9zdXJhdCk7DQogICAgfQ0KICB9DQoNCg0KDQovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQoNCnB1YmxpYyBmdW5jdGlvbiBnZXRfbm9fbWFzc2FnZSgkaWQpew0KICAgICRkYXRhID0gJHRoaXMtPmRiLT5zZWxlY3QoJyonKS0+ZnJvbSgncmVmX25vX21hc3NhZ2UnKS0+d2hlcmUoYXJyYXkoJ2lkJyA9PiAkaWQpKS0+Z2V0KCktPnJvdygpOw0KICAgIGVjaG8ganNvbl9lbmNvZGUoJGRhdGEpOw0KICB9DQoNCiAgLyoNCiAgKiBGdW5nc2kgdW50dWsgbWVuZyBnZW5lcmF0ZSBzdXJhdCBpemluIGtlcmFtYWlhbiANCiAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIGl6aW5fa2VyYW1haWFuKCRuaWssJGplbmlzKXsNCiAgICAgaWYoJHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpJyk9PSdkZXNhJ3x8JHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpJyk9PSdrZWMnKQ0KICAgICAgeyAgDQogICAgICAkZGF0YVsnZHJvcF90eXBlJ10gICAgICA9ICR0aGlzLT5NYXN0ZXJfbW9kZWwtPmdldF9kYigncmVmX3R5cGVfbWFzc2FnZScpOw0KICAgICAgJGRhdGFbJ2Ryb3BfdHlwZV9waW9yaXRhcyddID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+Z2V0X25vX21hc3NhZ2UoJGplbmlzKTsNCiAgICAgICRkYXRhWydpZF9qZW5pcyddICAgICAgID0gJGplbmlzOw0KICAgICAgJGRhdGFbJ3BhZ2VfdGl0bGUnXSAgICAgPSAnU3VyYXQgSXppbiBLZXJhbWFpYW4nOyANCiAgICAgICRkYXRhWydrYWJ1cGF0ZW4nXSA9ICdCQVRVJzsNCiAgICAgICAkZGF0YVsna2VjYW1hdGFuJ10gPSAnQlVNSUFKSSc7ICAgIA0KICAgICAgJGRhdGFbJ2lkX2VtcGxveWVlJ10gICAgPSAnJzsNCiAgICAgICRkYXRhWydwb3Npc2knXSAgICAgICA9ICR0aGlzLT51c2VyX2RldGFpbCgncG9zaXRpb25faWQnKTsgDQogICAgICAkZGF0YVsnZGF0YV9wZW5kdWR1ayddICAgID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+ZGF0YV9wZW5kdWR1aygkbmlrKTsNCiAgICAgICRkYXRhWydpbnRhbnNpJ10gICAgICA9ICR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaScpOw0KICAgICAgJGRhdGFbJ2lkX2ludGFuc2knXSAgICAgPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkX2ludGFuc2knKTsNCiAgICAgICRkYXRhWydpbnRhbnNpX25hbWUnXSA9ICR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaV9uYW1lJyk7DQogICAgICAgICAgJGRhdGFbJ25hbWVfcG9zaXRpb24nXSA9ICR0aGlzLT51c2VyX2RldGFpbCgnbmFtZV9wb3NpdGlvbicpOw0KICAgICAgJGRhdGFbJ2Ryb3BfdHRkX2Rlc2EnXSAgICA9ICR0aGlzLT5TdXJhdF9LZWNhbWF0YW5fbW9kZWwtPmdldF9wZW5hbmRhdGFuZ2FuX2Rlc2EoJHRoaXMtPnVzZXJfZGV0YWlsKCdpZF9pbnRhbnNpJykpOw0KICAgICAgJGRhdGFbJ25vX3N1cmF0J10gICAgID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+bm9fc3VyYXQoJ3NydF9pemluX2tlcmFtYWlhbicsJGplbmlzLCR0aGlzLT51c2VyX2RldGFpbCgnaWRfaW50YW5zaScpKTsNCiAgICAgICRkYXRhWydwYWdlJ10gICAgICAgICA9ICdzdXJhdC9zdXJhdF9pemluX2tlcmFtYWlhbic7DQogICAgICAkdGhpcy0+bG9hZC0+dmlldygnaW5kZXgnLCRkYXRhKTsNCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgcmVkaXJlY3QoJ21haW4nKTsNCiAgICAgIH0NCg0KICB9DQoNCiAgcHVibGljIGZ1bmN0aW9uIGRvX2l6aW5fa2VyYW1haWFuKCl7DQogICAgJG5vc3VyYXQgPSBzdHJfcmVwbGFjZSgiLyIsIiIsJHRoaXMtPmlucHV0LT5wb3N0KCdpbmR1a19zdXJhdCcpLiR0aGlzLT5pbnB1dC0+cG9zdCgnbm9fc3VyYXQnKS4kdGhpcy0+aW5wdXQtPnBvc3QoJ25vX3N1cmF0X2Rlc2EnKS4kdGhpcy0+aW5wdXQtPnBvc3QoJ3RnbF9zdXJhdCcpKTsNCiAgICAkZGF0YSA9IFsNCiAgICAgICdub19zdXJhdCcgICAgICAgID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnaW5kdWtfc3VyYXQnKS4kdGhpcy0+aW5wdXQtPnBvc3QoJ25vX3N1cmF0JykuJHRoaXMtPmlucHV0LT5wb3N0KCdub19zdXJhdF9kZXNhJykuJHRoaXMtPmlucHV0LT5wb3N0KCd0Z2xfc3VyYXQnKSwNCiAgICAgICdub19zdXJhdF9iYXlhbmdhbicgICA9PiAkbm9zdXJhdCwNCiAgICAgICdpZF9wYW1vbmdfZGVzYV9jcmVhdGUnID0+ICAkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkJyksDQogICAgICAnaWRfcGFtb25nX2Rlc2FfdHRkJyAgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCd0dGRfZGVzYScpLA0KICAgICAgJ2lkX3R5cGVfbWFzc2FnZScgICA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ2lkX2plbmlzJyksDQogICAgICAnaWRfcGVuZHVkdWsnICAgICA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ2lkX3BlbmR1ZHVrJyksDQogICAgICAnaWRfaW50YW5zaV9kZXNhJyAgID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnaWRfaW50YW5zaScpLA0KICAgICAgJ3RnbF9jcmVhdGUnICAgICAgPT4gZGF0ZSgnWS1tLWQnKSwNCiAgICAgICdiX2tlcmFtYWlhbicgICAgID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnYl9rZXJhbWFpYW4nKSwNCiAgICAgICdtX2tlcmFtYWlhbicgICAgID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnbV9rZXJhbWFpYW4nKSwNCiAgICAgICd0Z2xfcGVsYWtzYW5hYW4nICAgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCd0Z2xfcGVsYWtzYW5hYW4nKSwNCiAgICAgICdyYW5na2EnICAgICAgICA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ3JhbmdrYScpLA0KICAgICAgJ3VuZGFuZ2FuJyAgICAgICAgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCd1bmRhbmdhbicpLA0KICAgICAgJ3N0YXR1c192ZXJpZicgICAgICA9PiAnMCcsDQogICAgICAnc3RhdHVzJyAgICAgICAgPT4gJzEnLA0KICAgIF07DQoNCiAgICAkc3RvcmUgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5hZGRfaXppbl9rZXJhbWFpYW4oJGRhdGEpOw0KICAgIGlmKCRzdG9yZSl7DQogICAgICByZXR1cm4gcmVkaXJlY3QoJy9zdXJhdC9nZXRfaXppbl9rZXJhbWFpYW4vJy4kdGhpcy0+aW5wdXQtPnBvc3QoJ2RhdGFfbmlrJykuJy8nLiRub3N1cmF0KTsNCiAgICB9ZWxzZXsNCiAgICAgIGVjaG8ganNvbl9lbmNvZGUoWydzdGF0dXMnID0+ICdpbnRlcm5hbCBzZXJ2ZXIgZXJyb3InXSw1MDApOw0KICAgIH0NCiAgfQ0KDQogIHB1YmxpYyBmdW5jdGlvbiBnZXRfaXppbl9rZXJhbWFpYW4oJG5paywkbm9zdXJhdCl7DQogICAgIGlmKCR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaScpPT0nZGVzYSd8fCR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaScpPT0na2VjJykNCiAgICAgIHsgIA0KICAgICAgICAkZGF0YVsnZHJvcF90eXBlJ10gICAgICA9ICR0aGlzLT5NYXN0ZXJfbW9kZWwtPmdldF9kYigncmVmX3R5cGVfbWFzc2FnZScpOw0KICAgICAgICAkZGF0YVsncGFnZV90aXRsZSddICAgICA9ICdTdXJhdCBJemluIEtlcmFtYWlhbic7DQogICAgICAgICRkYXRhWydrYWJ1cGF0ZW4nXSA9ICdCQVRVJzsNCiAgICAgICAgJGRhdGFbJ2tlY2FtYXRhbiddID0gJ0JVTUlBSkknOyAgIA0KICAgICAgICAkZGF0YVsnaWRfZW1wbG95ZWUnXSAgICA9ICcnOw0KICAgICAgICAkZGF0YVsncG9zaXNpJ10gICAgICAgPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ3Bvc2l0aW9uX2lkJyk7IA0KICAgICAgICAkZGF0YVsnZGF0YV9wZW5kdWR1ayddICAgID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+ZGF0YV9wZW5kdWR1aygkbmlrKTsNCiAgICAgICAgJGRhdGFbJ2ludGFuc2knXSAgICAgID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpJyk7DQogICAgICAgICRkYXRhWydpZF9pbnRhbnNpJ10gICAgID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpZF9pbnRhbnNpJyk7DQogICAgICAgICRkYXRhWydpbnRhbnNpX25hbWUnXSA9ICR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaV9uYW1lJyk7DQogICAgICAgICAgICAkZGF0YVsnbmFtZV9wb3NpdGlvbiddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCduYW1lX3Bvc2l0aW9uJyk7DQogICAgICAgICRkYXRhWydkcm9wX3R0ZF9kZXNhJ10gICAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5nZXRfcGVuYW5kYXRhbmdhbl9kZXNhKCR0aGlzLT51c2VyX2RldGFpbCgnaWRfaW50YW5zaScpKTsNCiAgICAgICAgJGRhdGFbJ2Ryb3BfdHRkX2tlYyddICAgICA9ICR0aGlzLT5TdXJhdF9LZWNhbWF0YW5fbW9kZWwtPmdldF9wZW5hbmRhdGFuZ2FuX2tlYygpOw0KICAgICAgICAkZGF0YVsnZGF0YV90YW1iYWhhbiddICAgID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+Z2V0X21hc3NhZ2Vfd2hlcmVfdW5pdmVyc2FsX3Jvdygnc3J0X2l6aW5fa2VyYW1haWFuJywnbm9fc3VyYXRfYmF5YW5nYW4nLCRub3N1cmF0KTsNCiAgICAgICAgJGRhdGFbJ2dldF90dGRfa2VjJ10gICAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5nZXRfdHRkX2NhbWF0KCRkYXRhWydkYXRhX3RhbWJhaGFuJ10tPmlkX3BhbW9uZ19rZWNfdHRkKTsNCiAgICAgICAgJGRhdGFbJ3BhZ2UnXSAgICAgICAgID0gJ3N1cmF0L3RlbXBsYXRlL3N1cmF0X2l6aW5fa2VyYW1haWFuJzsNCg0KICAgICAgICAgICAgICAgIGlmKCRkYXRhWydkYXRhX3BlbmR1ZHVrJ10tPmlkID09ICRkYXRhWydkYXRhX3RhbWJhaGFuJ10tPmlkX3BlbmR1ZHVrKXsNCiAgICAgICAgICAgICR0aGlzLT5sb2FkLT52aWV3KCdpbmRleCcsJGRhdGEpOw0KICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgcmV0dXJuIHJlZGlyZWN0KCdtYWluJyk7DQogICAgICAgICAgfQ0KDQogICAgICB9DQogICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICByZWRpcmVjdCgnbWFpbicpOw0KICAgICAgfQ0KICB9DQoNCiBwdWJsaWMgZnVuY3Rpb24gdmVyaWZfaXppbl9rZXJhbWFpYW4oKXsNCiAgICAkbmlrICAgID0gJHRoaXMtPmlucHV0LT5wb3N0KCduaWsnKTsNCiAgICAkbm9zdXJhdCAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ25vc3VyYXQnKTsNCiAgICAkaWR0dGQgICAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ3R0ZF9rZWMnKTsNCiAgICAkaWR2ZXJpZiAgPSAnMic7DQogICAgJHVwZGF0ZSAgID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+dmVyaWZ5KCdzcnRfaXppbl9rZXJhbWFpYW4nLCRub3N1cmF0LCRpZHR0ZCwkaWR2ZXJpZik7DQogICAgaWYoJHVwZGF0ZSl7DQogICAgICR0aGlzLT5zZXNzaW9uLT5zZXRfZmxhc2hkYXRhKCdzdWNjZXNzJywkbmlrLicgQmVyaGFzaWwgZGkgYXBwcm92Jyk7DQogICAgICByZXR1cm4gcmVkaXJlY3QoJy9zdXJhdC9nZXRfaXppbl9rZXJhbWFpYW4vJy4kbmlrLicvJy4kbm9zdXJhdCk7DQogICAgfWVsc2V7DQogICAgICAgICR0aGlzLT5zZXNzaW9uLT5zZXRfZmxhc2hkYXRhKCdlcnJvcicsJG5pay4nIEdhZ2FsIGRpIGFwcHJvdicpOw0KICAgICAgcmV0dXJuIHJlZGlyZWN0KCcvc3VyYXQvZ2V0X2l6aW5fa2VyYW1haWFuLycuJG5pay4nLycuJG5vc3VyYXQpOw0KICAgIH0NCiAgfQ0KDQoNCiAgLyoNCiAgKiBGdW5nc2kgdW50dWsgbWVuZyBnZW5lcmF0ZSBzdXJhdCBrZWxha3VhbiBiYWlrDQogICovDQoNCiAgcHVibGljIGZ1bmN0aW9uIGtlbGFrdWFuX2JhaWsoJG5paywkamVuaXMpew0KICAgIGlmKCR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaScpPT0nZGVzYSd8fCR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaScpPT0na2VjJykNCiAgICB7ICANCiAgICAkZGF0YVsnZHJvcF90eXBlJ10gICAgICA9ICR0aGlzLT5NYXN0ZXJfbW9kZWwtPmdldF9kYigncmVmX3R5cGVfbWFzc2FnZScpOw0KICAgICRkYXRhWydkcm9wX3R5cGVfcGlvcml0YXMnXSA9ICR0aGlzLT5TdXJhdF9LZWNhbWF0YW5fbW9kZWwtPmdldF9ub19tYXNzYWdlKCRqZW5pcyk7DQogICAgJGRhdGFbJ2lkX2plbmlzJ10gICAgICAgPSAkamVuaXM7DQogICAgJGRhdGFbJ3BhZ2VfdGl0bGUnXSAgICAgPSAnU3VyYXQgS2VsYWt1YW4gQmFpayc7ICAgICANCiAgICAkZGF0YVsna2FidXBhdGVuJ10gPSAnQkFUVSc7DQogICAgJGRhdGFbJ2tlY2FtYXRhbiddID0gJ0JVTUlBSkknOyAgDQogICAgJGRhdGFbJ2lkX2VtcGxveWVlJ10gICAgPSAnJzsNCiAgICAkZGF0YVsncG9zaXNpJ10gICAgICAgPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ3Bvc2l0aW9uX2lkJyk7IA0KICAgICRkYXRhWydkYXRhX3BlbmR1ZHVrJ10gICAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5kYXRhX3BlbmR1ZHVrKCRuaWspOw0KICAgICRkYXRhWydpbnRhbnNpJ10gICAgICA9ICR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaScpOw0KICAgICRkYXRhWydpZF9pbnRhbnNpJ10gICAgID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpZF9pbnRhbnNpJyk7DQogICAgJGRhdGFbJ2ludGFuc2lfbmFtZSddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpX25hbWUnKTsNCiAgICAgICAgJGRhdGFbJ25hbWVfcG9zaXRpb24nXSA9ICR0aGlzLT51c2VyX2RldGFpbCgnbmFtZV9wb3NpdGlvbicpOw0KICAgICRkYXRhWydkcm9wX3R0ZF9kZXNhJ10gICAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5nZXRfcGVuYW5kYXRhbmdhbl9kZXNhKCR0aGlzLT51c2VyX2RldGFpbCgnaWRfaW50YW5zaScpKTsNCiAgICAkZGF0YVsnbm9fc3VyYXQnXSAgICAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5ub19zdXJhdCgnc3J0X2tlbGFrdWFuX2JhaWsnLCRqZW5pcywkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkX2ludGFuc2knKSk7DQogICAgJGRhdGFbJ3BhZ2UnXSAgICAgICAgID0gJ3N1cmF0L3N1cmF0X2tlbGFrdWFuX2JhaWsnOw0KICAgICR0aGlzLT5sb2FkLT52aWV3KCdpbmRleCcsJGRhdGEpOw0KICAgIH0NCiAgICBlbHNlDQogICAgICB7DQogICAgICAgIHJlZGlyZWN0KCdtYWluJyk7DQogICAgICB9DQogIH0NCg0KICBwdWJsaWMgZnVuY3Rpb24gZG9fa2VsYWt1YW5fYmFpaygpew0KICAgICRub3N1cmF0ID0gc3RyX3JlcGxhY2UoIi8iLCIiLCR0aGlzLT5pbnB1dC0+cG9zdCgnaW5kdWtfc3VyYXQnKS4kdGhpcy0+aW5wdXQtPnBvc3QoJ25vX3N1cmF0JykuJHRoaXMtPmlucHV0LT5wb3N0KCdub19zdXJhdF9kZXNhJykuJHRoaXMtPmlucHV0LT5wb3N0KCd0Z2xfc3VyYXQnKSk7DQogICAgJGRhdGEgPSBbDQogICAgICdub19zdXJhdCcgICAgICAgID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnaW5kdWtfc3VyYXQnKS4kdGhpcy0+aW5wdXQtPnBvc3QoJ25vX3N1cmF0JykuJHRoaXMtPmlucHV0LT5wb3N0KCdub19zdXJhdF9kZXNhJykuJHRoaXMtPmlucHV0LT5wb3N0KCd0Z2xfc3VyYXQnKSwNCiAgICAgICdub19zdXJhdF9iYXlhbmdhbicgICA9PiAkbm9zdXJhdCwNCiAgICAgICdpZF9wYW1vbmdfZGVzYV9jcmVhdGUnID0+ICR0aGlzLT51c2VyX2RldGFpbCgnaWQnKSwNCiAgICAgICdpZF9wYW1vbmdfZGVzYV90dGQnICA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ3R0ZF9kZXNhJyksDQogICAgICAnaWRfdHlwZV9tYXNzYWdlJyAgID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnaWRfamVuaXMnKSwNCiAgICAgICdpZF9wZW5kdWR1aycgICAgID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnaWRfcGVuZHVkdWsnKSwNCiAgICAgICdpZF9pbnRhbnNpX2Rlc2EnICAgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdpZF9pbnRhbnNpJyksDQogICAgICAndGdsX2NyZWF0ZScgICAgICA9PiBkYXRlKCdZLW0tZCcpLA0KICAgICAgJ2tldGVyYW5nYW4nICAgICAgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdrZXRlcmFuZ2FuJyksDQogICAgICAnc3RhdHVzX3ZlcmlmJyAgICAgID0+ICcwJywNCiAgICAgICdzdGF0dXMnICAgICAgICA9PiAnMScsDQogICAgXTsNCg0KICAgICRzdG9yZSA9ICR0aGlzLT5TdXJhdF9LZWNhbWF0YW5fbW9kZWwtPmFkZF9rZWxha3Vhbl9iYWlrKCRkYXRhKTsNCiAgICBpZigkc3RvcmUpew0KICAgICAgcmV0dXJuIHJlZGlyZWN0KCcvc3VyYXQvZ2V0X2tlbGFrdWFuX2JhaWsvJy4kdGhpcy0+aW5wdXQtPnBvc3QoJ2RhdGFfbmlrJykuJy8nLiRub3N1cmF0KTsNCiAgICB9ZWxzZXsNCiAgICAgIGVjaG8ganNvbl9lbmNvZGUoWydzdGF0dXMnID0+ICdpbnRlcm5hbCBzZXJ2ZXIgZXJyb3InXSw1MDApOw0KICAgIH0NCiAgfQ0KDQogIHB1YmxpYyBmdW5jdGlvbiBnZXRfa2VsYWt1YW5fYmFpaygkbmlrLCRub3N1cmF0KXsNCiAgICBpZigkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKT09J2Rlc2EnfHwkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKT09J2tlYycpDQogICAgeyAgDQogICAgJGRhdGFbJ2Ryb3BfdHlwZSddICAgICAgPSAkdGhpcy0+TWFzdGVyX21vZGVsLT5nZXRfZGIoJ3JlZl90eXBlX21hc3NhZ2UnKTsNCiAgICAkZGF0YVsncGFnZV90aXRsZSddICAgICA9ICdTdXJhdCBLZWxha3VhbiBCYWlrJzsgDQogICAgJGRhdGFbJ2thYnVwYXRlbiddID0gJ0JBVFUnOw0KICAgICRkYXRhWydrZWNhbWF0YW4nXSA9ICdCVU1JQUpJJzsgICAgDQogICAgJGRhdGFbJ2lkX2VtcGxveWVlJ10gICAgPSAnJzsNCiAgICAkZGF0YVsncG9zaXNpJ10gICAgICAgPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ3Bvc2l0aW9uX2lkJyk7IA0KICAgICRkYXRhWydkYXRhX3BlbmR1ZHVrJ10gICAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5kYXRhX3BlbmR1ZHVrKCRuaWspOw0KICAgICRkYXRhWydpbnRhbnNpJ10gICAgICA9ICR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaScpOw0KICAgICRkYXRhWydpZF9pbnRhbnNpJ10gICAgID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpZF9pbnRhbnNpJyk7DQogICAgJGRhdGFbJ2ludGFuc2lfbmFtZSddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpX25hbWUnKTsNCiAgICAgICAgJGRhdGFbJ25hbWVfcG9zaXRpb24nXSA9ICR0aGlzLT51c2VyX2RldGFpbCgnbmFtZV9wb3NpdGlvbicpOw0KICAgICRkYXRhWydkcm9wX3R0ZF9kZXNhJ10gICAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5nZXRfcGVuYW5kYXRhbmdhbl9kZXNhKCR0aGlzLT51c2VyX2RldGFpbCgnaWRfaW50YW5zaScpKTsNCiAgICAgJGRhdGFbJ2Ryb3BfdHRkX2tlYyddICAgICA9ICR0aGlzLT5TdXJhdF9LZWNhbWF0YW5fbW9kZWwtPmdldF9wZW5hbmRhdGFuZ2FuX2tlYygpOw0KICAgICRkYXRhWydkYXRhX3RhbWJhaGFuJ10gICAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5nZXRfbWFzc2FnZV93aGVyZV91bml2ZXJzYWxfcm93KCdzcnRfa2VsYWt1YW5fYmFpaycsJ25vX3N1cmF0X2JheWFuZ2FuJywkbm9zdXJhdCk7DQogICAgJGRhdGFbJ2dldF90dGRfa2VjJ10gICAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5nZXRfdHRkX2NhbWF0KCRkYXRhWydkYXRhX3RhbWJhaGFuJ10tPmlkX3BhbW9uZ19rZWNfdHRkKTsNCiAgICBpZigkZGF0YVsnZGF0YV9wZW5kdWR1ayddLT5zaGRrPT0nQU5BSycpew0KICAgICAgJGdldGlidSAgICAgICAgID0gJHRoaXMtPmRiLT5zZWxlY3QoJyonKS0+ZnJvbSgnbXN0X3BlbmR1ZHVrJyktPndoZXJlKFsnc2hkaycgPT4gJ0lTVFJJJ10pLT53aGVyZSgnaW5kdWtfa2snLCRkYXRhWydkYXRhX3BlbmR1ZHVrJ10tPmluZHVrX2trKS0+Z2V0KCktPnJvdygpOw0KICAgICAgJGRhdGFbJ2RhdGFfaWJ1J10gICA9ICR0aGlzLT5TdXJhdF9LZWNhbWF0YW5fbW9kZWwtPmRhdGFfcGVuZHVkdWsoJGdldGlidS0+bmlrKTsNCiAgICAgICRnZXRheWFoICAgICAgICA9ICR0aGlzLT5kYi0+c2VsZWN0KCcqJyktPmZyb20oJ21zdF9wZW5kdWR1aycpLT53aGVyZShbJ25paycgPT4gJGRhdGFbJ2RhdGFfcGVuZHVkdWsnXS0+aW5kdWtfa2tdKS0+Z2V0KCktPnJvdygpOw0KICAgICAgJGRhdGFbJ2RhdGFfYXlhaCddICAgID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+ZGF0YV9wZW5kdWR1aygkZ2V0YXlhaC0+bmlrKTsNCiAgICB9DQogICAgJGRhdGFbJ3BhZ2UnXSAgICAgICAgID0gJ3N1cmF0L3RlbXBsYXRlL3N1cmF0X2tlbGFrdWFuX2JhaWsnOw0KICAgICAgaWYoJGRhdGFbJ2RhdGFfcGVuZHVkdWsnXS0+aWQgPT0gJGRhdGFbJ2RhdGFfdGFtYmFoYW4nXS0+aWRfcGVuZHVkdWspew0KICAgICAgICAkdGhpcy0+bG9hZC0+dmlldygnaW5kZXgnLCRkYXRhKTsNCiAgICAgIH1lbHNlew0KICAgICAgICByZXR1cm4gcmVkaXJlY3QoJ21haW4nKTsNCiAgICAgIH0NCiAgICB9DQogICAgZWxzZQ0KICAgICAgew0KICAgICAgICByZWRpcmVjdCgnbWFpbicpOw0KICAgICAgfQ0KICB9DQoNCiAgcHVibGljIGZ1bmN0aW9uIHZlcmlmX2tlbGFrdWFuX2JhaWsoKXsNCiAgICAkbmlrICAgID0gJHRoaXMtPmlucHV0LT5wb3N0KCduaWsnKTsNCiAgICAkbm9zdXJhdCAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ25vc3VyYXQnKTsNCiAgICAkaWR0dGQgICAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ3R0ZF9rZWMnKTsNCiAgICAkaWR2ZXJpZiAgPSAnMic7DQogICAgJHVwZGF0ZSA9ICR0aGlzLT5TdXJhdF9LZWNhbWF0YW5fbW9kZWwtPnZlcmlmeSgnc3J0X2tlbGFrdWFuX2JhaWsnLCRub3N1cmF0LCRpZHR0ZCwkaWR2ZXJpZik7DQogICAgaWYoJHVwZGF0ZSl7DQogICAgICByZXR1cm4gcmVkaXJlY3QoJy9zdXJhdC9nZXRfa2VsYWt1YW5fYmFpay8nLiRuaWsuJy8nLiRub3N1cmF0KTsNCiAgICB9ZWxzZXsNCiAgICAgIGVjaG8ganNvbl9lbmNvZGUoWydzdGF0dXMnID0+ICdpbnRlcm5hbCBzZXJ2ZXIgZXJyb3InXSw1MDApOw0KICAgIH0NCiAgfQ0KDQoNCiAgLyoNCiAgKiBGdW5nc2kgdW50dWsgbWVuZyBnZW5lcmF0ZSBmb3JtIGt0cA0KICAqLw0KDQogIHB1YmxpYyBmdW5jdGlvbiBmb3JtX2t0cCgkbmlrLCRqZW5pcyl7DQogICBpZigkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKT09J2Rlc2EnfHwkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKT09J2tlYycpDQogICAgeyAgDQogICAgICAkZGF0YVsnZHJvcF90eXBlJ10gICAgICA9ICR0aGlzLT5NYXN0ZXJfbW9kZWwtPmdldF9kYigncmVmX3R5cGVfbWFzc2FnZScpOw0KICAgICAgJGRhdGFbJ2Ryb3BfdHlwZV9waW9yaXRhcyddID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+Z2V0X25vX21hc3NhZ2UoJGplbmlzKTsNCiAgICAgICRkYXRhWydpZF9qZW5pcyddICAgICAgID0gJGplbmlzOw0KICAgICAgJGRhdGFbJ3BhZ2VfdGl0bGUnXSAgICAgPSAnRm9ybSBLVFAnOw0KICAgICAgJGRhdGFbJ2thYnVwYXRlbiddID0gJ0JBVFUnOw0KICAgICRkYXRhWydrZWNhbWF0YW4nXSA9ICdCVU1JQUpJJzsgICAgIA0KICAgICAgJGRhdGFbJ2lkX2VtcGxveWVlJ10gICAgPSAnJzsNCiAgICAgICRkYXRhWydwb3Npc2knXSAgICAgICA9ICR0aGlzLT51c2VyX2RldGFpbCgncG9zaXRpb25faWQnKTsgDQogICAgICAkZGF0YVsnZGF0YV9wZW5kdWR1ayddICAgID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+ZGF0YV9wZW5kdWR1aygkbmlrKTsNCiAgICAgICRkYXRhWydpbnRhbnNpJ10gICAgICA9ICR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaScpOw0KICAgICAgJGRhdGFbJ2lkX2ludGFuc2knXSAgICAgPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkX2ludGFuc2knKTsNCiAgICAgICRkYXRhWydpbnRhbnNpX25hbWUnXSA9ICR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaV9uYW1lJyk7DQogICAgICAkZGF0YVsnbmFtZV9wb3NpdGlvbiddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCduYW1lX3Bvc2l0aW9uJyk7DQogICAgICAkZGF0YVsnZHJvcF90dGRfZGVzYSddICAgID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+Z2V0X3BlbmFuZGF0YW5nYW5fZGVzYSgkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkX2ludGFuc2knKSk7DQogICAgICAkZGF0YVsnbm9fc3VyYXQnXSAgICAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5ub19zdXJhdCgnc3J0X2Zvcm1fa3RwJywkamVuaXMsJHRoaXMtPnVzZXJfZGV0YWlsKCdpZF9pbnRhbnNpJykpOw0KICAgICAgJGRhdGFbJ3BhZ2UnXSAgICAgICAgID0gJ3N1cmF0L2Zvcm1fa3RwJzsNCiAgICAgICR0aGlzLT5sb2FkLT52aWV3KCdpbmRleCcsJGRhdGEpOw0KICAgIH0NCiAgICBlbHNlDQogICAgICB7DQogICAgICAgIHJlZGlyZWN0KCdtYWluJyk7DQogICAgICB9DQogIH0NCg0KICBwdWJsaWMgZnVuY3Rpb24gZG9fZm9ybV9rdHAoKXsNCiAgICAkbm9zdXJhdCA9IHN0cl9yZXBsYWNlKCIvIiwiIiwgJHRoaXMtPmlucHV0LT5wb3N0KCdpbmR1a19zdXJhdCcpLiR0aGlzLT5pbnB1dC0+cG9zdCgnbm9fc3VyYXQnKS4kdGhpcy0+aW5wdXQtPnBvc3QoJ25vX3N1cmF0X2Rlc2EnKS4kdGhpcy0+aW5wdXQtPnBvc3QoJ3RnbF9zdXJhdCcpKTsNCiAgICAkZGF0YSA9IFsNCiAgICAgICdub19zdXJhdCcgICAgICAgID0+ICAkdGhpcy0+aW5wdXQtPnBvc3QoJ2luZHVrX3N1cmF0JykuJHRoaXMtPmlucHV0LT5wb3N0KCdub19zdXJhdCcpLiR0aGlzLT5pbnB1dC0+cG9zdCgnbm9fc3VyYXRfZGVzYScpLiR0aGlzLT5pbnB1dC0+cG9zdCgndGdsX3N1cmF0JyksDQogICAgICAnbm9fc3VyYXRfYmF5YW5nYW4nICAgPT4gJG5vc3VyYXQsDQogICAgICAnaWRfcGFtb25nX2Rlc2FfY3JlYXRlJyA9PiAkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkJyksDQogICAgICAnaWRfcGFtb25nX2Rlc2FfdHRkJyAgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCd0dGRfZGVzYScpLA0KICAgICAgJ2lkX3R5cGVfbWFzc2FnZScgICA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ2lkX2plbmlzJyksDQogICAgICAnaWRfcGVuZHVkdWsnICAgICA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ2lkX3BlbmR1ZHVrJyksDQogICAgICAnaWRfaW50YW5zaV9kZXNhJyAgID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnaWRfaW50YW5zaScpLA0KICAgICAgJ2plbmlzX3Blcm1vaG9uYW4nICAgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdqZW5pc19wZXJtb2hvbmFuJyksDQogICAgICAndGdsX2NyZWF0ZScgICAgICA9PiBkYXRlKCdZLW0tZCcpLA0KICAgICAgJ3N0YXR1c192ZXJpZicgICAgICA9PiAnMCcsDQogICAgICAnc3RhdHVzJyAgICAgICAgPT4gJzEnLA0KICAgIF07DQoNCiAgICAkc3RvcmUgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5hZGRfZm9ybV9rdHAoJGRhdGEpOw0KICAgIGlmKCRzdG9yZSl7DQogICAgICByZXR1cm4gcmVkaXJlY3QoJy9zdXJhdC9nZXRfZm9ybV9rdHAvJy4kdGhpcy0+aW5wdXQtPnBvc3QoJ2RhdGFfbmlrJykuJy8nLiRub3N1cmF0KTsNCiAgICB9ZWxzZXsNCiAgICAgIGVjaG8ganNvbl9lbmNvZGUoWydzdGF0dXMnID0+ICdpbnRlcm5hbCBzZXJ2ZXIgZXJyb3InXSw1MDApOw0KICAgIH0NCiAgfQ0KDQogIHB1YmxpYyBmdW5jdGlvbiBnZXRfZm9ybV9rdHAoJG5paywkbm9zdXJhdCl7DQogIGlmKCR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaScpPT0nZGVzYSd8fCR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaScpPT0na2VjJykNCiAgICB7ICANCiAgICAkZGF0YVsnZHJvcF90eXBlJ10gICAgICA9ICR0aGlzLT5NYXN0ZXJfbW9kZWwtPmdldF9kYigncmVmX3R5cGVfbWFzc2FnZScpOw0KICAgICRkYXRhWydwYWdlX3RpdGxlJ10gICAgID0gJ1N1cmF0IFBlcm1vaG9uYW4gS1RQJzsgDQogICAgJGRhdGFbJ2thYnVwYXRlbiddID0gJ0JBVFUnOw0KICAgICRkYXRhWydrZWNhbWF0YW4nXSA9ICdCVU1JQUpJJzsgICANCiAgICAkZGF0YVsnaWRfZW1wbG95ZWUnXSAgICA9ICcnOw0KICAgICRkYXRhWydwb3Npc2knXSAgICAgICA9ICR0aGlzLT51c2VyX2RldGFpbCgncG9zaXRpb25faWQnKTsgDQogICAgJGRhdGFbJ2RhdGFfcGVuZHVkdWsnXSAgICA9ICR0aGlzLT5TdXJhdF9LZWNhbWF0YW5fbW9kZWwtPmRhdGFfcGVuZHVkdWsoJG5payk7DQogICAgDQogICAgJGRhdGFbJ2Ryb3BfdHRkX2Rlc2EnXSAgICA9ICR0aGlzLT5TdXJhdF9LZWNhbWF0YW5fbW9kZWwtPmdldF9wZW5hbmRhdGFuZ2FuX2Rlc2EoJHRoaXMtPnVzZXJfZGV0YWlsKCdpZF9pbnRhbnNpJykpOw0KICAgICRkYXRhWydkcm9wX3R0ZF9rZWMnXSAgICAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5nZXRfcGVuYW5kYXRhbmdhbl9rZWMoKTsNCiAgICAkZGF0YVsnZGF0YV90YW1iYWhhbiddICAgID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+Z2V0X21hc3NhZ2Vfd2hlcmVfdW5pdmVyc2FsX3Jvdygnc3J0X2Zvcm1fa3RwJywnbm9fc3VyYXRfYmF5YW5nYW4nLCRub3N1cmF0KTsNCiAgICAkZGF0YVsnZ2V0X3R0ZF9rZWMnXSAgICA9ICR0aGlzLT5TdXJhdF9LZWNhbWF0YW5fbW9kZWwtPmdldF90dGRfY2FtYXQoJGRhdGFbJ2RhdGFfdGFtYmFoYW4nXS0+aWRfcGFtb25nX2tlY190dGQpOw0KICAgICAkZGF0YVsnaW50YW5zaSddICAgICAgPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKTsNCiAgICAkZGF0YVsnaWRfaW50YW5zaSddICAgICA9ICR0aGlzLT51c2VyX2RldGFpbCgnaWRfaW50YW5zaScpOw0KICAgICRkYXRhWydpbnRhbnNpX25hbWUnXSA9ICR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaV9uYW1lJyk7DQogICAgJGRhdGFbJ25hbWVfcG9zaXRpb24nXSA9ICR0aGlzLT51c2VyX2RldGFpbCgnbmFtZV9wb3NpdGlvbicpOw0KICAgICRkYXRhWydwYWdlJ10gICAgICAgICA9ICdzdXJhdC90ZW1wbGF0ZS9mb3JtX2t0cCc7DQogICAgaWYoJGRhdGFbJ2RhdGFfcGVuZHVkdWsnXS0+aWQgPT0gJGRhdGFbJ2RhdGFfdGFtYmFoYW4nXS0+aWRfcGVuZHVkdWspew0KICAgICAgICAkdGhpcy0+bG9hZC0+dmlldygnaW5kZXgnLCRkYXRhKTsNCiAgICAgIH1lbHNlew0KICAgICAgICByZXR1cm4gcmVkaXJlY3QoJ21haW4nKTsNCiAgICAgIH0NCiAgICAgfQ0KICAgICBlbHNlDQogICAgICB7DQogICAgICAgIHJlZGlyZWN0KCdtYWluJyk7DQogICAgICB9DQogIH0NCg0KICBwdWJsaWMgZnVuY3Rpb24gdmVyaWZfa3RwKCl7DQogICAgJG5payAgICA9ICR0aGlzLT5pbnB1dC0+cG9zdCgnbmlrJyk7DQogICAgJG5vc3VyYXQgID0gJHRoaXMtPmlucHV0LT5wb3N0KCdub3N1cmF0Jyk7DQogICAgJGlkdHRkICAgID0gJHRoaXMtPmlucHV0LT5wb3N0KCd0dGRfa2VjJyk7DQogICAgJGlkdmVyaWYgID0gJzInOw0KICAgICR1cGRhdGUgICA9ICR0aGlzLT5TdXJhdF9LZWNhbWF0YW5fbW9kZWwtPnZlcmlmeSgnc3J0X2Zvcm1fa3RwJywkbm9zdXJhdCwkaWR0dGQsJGlkdmVyaWYpOw0KICAgIGlmKCR1cGRhdGUpew0KICAgICAgJHRoaXMtPnNlc3Npb24tPnNldF9mbGFzaGRhdGEoJ3N1Y2Nlc3MnLCRuaWsuJyBCZXJoYXNpbCBkaSBhcHByb3YnKTsNCiAgICAgIHJldHVybiByZWRpcmVjdCgnL3N1cmF0L2dldF9mb3JtX2t0cC8nLiRuaWsuJy8nLiRub3N1cmF0KTsNCiAgICB9ZWxzZXsNCiAgICAgICR0aGlzLT5zZXNzaW9uLT5zZXRfZmxhc2hkYXRhKCdlcnJvcicsJG5pay4nIEdhZ2FsIGRpIGFwcHJvdicpOw0KICAgICAgcmV0dXJuIHJlZGlyZWN0KCcvc3VyYXQvZ2V0X2Zvcm1fa3RwLycuJG5pay4nLycuJG5vc3VyYXQpOw0KICAgIH0NCiAgfQ0KDQoNCiAgLyoNCiAgKiBGdW5nc2kgdW50dWsgbWVuZyBnZW5lcmF0ZSBzdXJhdCBrZXRlcmFuZ2FuIHBpbmRhaCB3bmkNCiAgKi8NCg0KICBwdWJsaWMgZnVuY3Rpb24ga2V0ZXJhbmdhbl9waW5kYWhfd25pKCRuaWssJGplbmlzKXsNCiAgICBpZigkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKT09J2Rlc2EnfHwkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKT09J2tlYycpDQogICAgeyAgDQoNCg0KICAgICRkYXRhWydkcm9wX3R5cGUnXSAgICAgID0gJHRoaXMtPk1hc3Rlcl9tb2RlbC0+Z2V0X2RiKCdyZWZfdHlwZV9tYXNzYWdlJyk7DQogICAgJGRhdGFbJ2Ryb3BfdHlwZV9waW9yaXRhcyddID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+Z2V0X25vX21hc3NhZ2UoJGplbmlzKTsNCiAgICAkZGF0YVsnaWRfamVuaXMnXSAgICAgICA9ICRqZW5pczsNCiAgICAkZGF0YVsncGFnZV90aXRsZSddICAgICA9ICdTdXJhdCBLZXRlcmFuZ2FuIFBpbmRhaCBEYXRhbmcgV05JJzsgDQogICAgJGRhdGFbJ2thYnVwYXRlbiddID0gJ0JBVFUnOw0KICAgICRkYXRhWydrZWNhbWF0YW4nXSA9ICdCVU1JQUpJJzsgICAgDQogICAgJGRhdGFbJ2lkX2VtcGxveWVlJ10gICAgPSAnJzsNCiAgICAkZGF0YVsncG9zaXNpJ10gICAgICAgPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ3Bvc2l0aW9uX2lkJyk7IA0KICAgICRkYXRhWydkYXRhX3BlbmR1ZHVrJ10gICAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5kYXRhX3BlbmR1ZHVrKCRuaWspOw0KICAgICRkYXRhWydkYXRhX2tlbHVhcmdhJ10gICAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5nZXRfZGF0YV9rZWx1YXJnYSgkZGF0YVsnZGF0YV9wZW5kdWR1ayddLT5ub19rayk7DQogICAgJGRhdGFbJ2ludGFuc2knXSAgICAgID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpJyk7DQogICAgJGRhdGFbJ2lkX2ludGFuc2knXSAgICAgPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkX2ludGFuc2knKTsNCiAgICAkZGF0YVsnaW50YW5zaV9uYW1lJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2lfbmFtZScpOw0KICAgICRkYXRhWyduYW1lX3Bvc2l0aW9uJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ25hbWVfcG9zaXRpb24nKTsNCiAgICAkZGF0YVsnZHJvcF90dGRfZGVzYSddICAgID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+Z2V0X3BlbmFuZGF0YW5nYW5fZGVzYSgkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkX2ludGFuc2knKSk7DQogICAgJGRhdGFbJ25vX3N1cmF0J10gICAgID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+bm9fc3VyYXQoJ3NydF9rZXRlcmFuZ2FuX3BpbmRhaCcsJGplbmlzLCR0aGlzLT51c2VyX2RldGFpbCgnaWRfaW50YW5zaScpKTsNCiAgICAkZGF0YVsncGFnZSddICAgICAgICAgPSAnc3VyYXQvc3VyYXRfa2V0ZXJhbmdhbl9waW5kYWgnOw0KDQogICAgICR0aGlzLT5sb2FkLT52aWV3KCdpbmRleCcsJGRhdGEpOw0KDQogICAgfQ0KICAgICBlbHNlDQogICAgICB7DQogICAgICAgIHJlZGlyZWN0KCdtYWluJyk7DQogICAgICB9DQogIH0NCg0KICBwdWJsaWMgZnVuY3Rpb24gZG9fa2V0ZXJhbmdhbl9waW5kYWhfd25pKCl7DQogICAgJG1fbmFtYSA9ICR0aGlzLT5pbnB1dC0+cG9zdCgnbV9uYW1hJyk7DQogICAgJG1fbmlrICA9ICR0aGlzLT5pbnB1dC0+cG9zdCgnbV9uaWsnKTsNCiAgICAkbV9zaGRrID0gJHRoaXMtPmlucHV0LT5wb3N0KCdtX3NoZGsnKTsNCiAgICAkbm9zdXJhdCA9IHN0cl9yZXBsYWNlKCIvIiwiIiwgJHRoaXMtPmlucHV0LT5wb3N0KCdpbmR1a19zdXJhdCcpLiR0aGlzLT5pbnB1dC0+cG9zdCgnbm9fc3VyYXQnKS4kdGhpcy0+aW5wdXQtPnBvc3QoJ25vX3N1cmF0X2Rlc2EnKS4kdGhpcy0+aW5wdXQtPnBvc3QoJ3RnbF9zdXJhdCcpKTsNCiAgICAkc2F2ZV9waWxpaF9rZWwgPSBbXTsNCiAgICAkcGlsaWhfa2VsID0gJHRoaXMtPmlucHV0LT5wb3N0KCdwaWxpaF9rZWx1YXJnYScpOw0KICAgIGZvcmVhY2ggKCRwaWxpaF9rZWwgYXMgJGtleSA9PiAkdmFsdWUpIHsNCiAgICAgICRzYXZlX3BpbGloX2tlbFska2V5XSA9ICR2YWx1ZTsNCiAgICB9DQogICAgJHNhdmVfcGlsaWhfa2VsID0ganNvbl9lbmNvZGUoJHNhdmVfcGlsaWhfa2VsKTsNCiAgICAkZGF0YSA9IFsNCiAgICAgICdub19zdXJhdCcgICAgICAgID0+ICAkdGhpcy0+aW5wdXQtPnBvc3QoJ2luZHVrX3N1cmF0JykuJHRoaXMtPmlucHV0LT5wb3N0KCdub19zdXJhdCcpLiR0aGlzLT5pbnB1dC0+cG9zdCgnbm9fc3VyYXRfZGVzYScpLiR0aGlzLT5pbnB1dC0+cG9zdCgndGdsX3N1cmF0JyksDQogICAgICAnbm9fc3VyYXRfYmF5YW5nYW4nICAgPT4gJG5vc3VyYXQsDQogICAgICAnaWRfcGFtb25nX2Rlc2FfY3JlYXRlJyA9PiAkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkJyksDQogICAgICAnaWRfcGFtb25nX2Rlc2FfdHRkJyAgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCd0dGRfZGVzYScpLA0KICAgICAgJ2lkX3R5cGVfbWFzc2FnZScgICA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ2lkX2plbmlzJyksDQogICAgICAnaWRfcGVuZHVkdWsnICAgICA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ2lkX3BlbmR1ZHVrJyksDQogICAgICAnaWRfaW50YW5zaV9kZXNhJyAgID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnaWRfaW50YW5zaScpLA0KICAgICAgJ2FsYXNhbicgICAgICAgID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnYWxhc2FuJyksDQogICAgICAndHVqdWFuX3BpbmRhaF9hbGFtYXQnICA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ3R1anVhbl9waW5kYWhfYWxhbWF0JyksDQogICAgICAndHVqdWFuX3BpbmRhaF9kZXNhJyAgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCd0dWp1YW5fcGluZGFoX2Rlc2EnKSwNCiAgICAgICd0dWp1YW5fcGluZGFoX2tlYycgICA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ3R1anVhbl9waW5kYWhfa2VjJyksDQogICAgICAndHVqdWFuX3BpbmRhaF9rYWInICAgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCd0dWp1YW5fcGluZGFoX2thYicpLA0KICAgICAgJ3R1anVhbl9waW5kYWhfcHJvdicgID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgndHVqdWFuX3BpbmRhaF9wcm92JyksDQogICAgICAndHVqdWFuX3BpbmRhaF9rb2RlX3Bvcyc9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ3R1anVhbl9waW5kYWhfa29kZV9wb3MnKSwNCiAgICAgICd0dWp1YW5fcGluZGFoX3J0JyAgICA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ3R1anVhbl9waW5kYWhfcnQnKSwNCiAgICAgICd0dWp1YW5fcGluZGFoX3J3JyAgICA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ3R1anVhbl9waW5kYWhfcncnKSwNCiAgICAgICd0dWp1YW5fcGluZGFoX3RlbGVwb24nID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgndHVqdWFuX3BpbmRhaF90ZWxlcG9uJyksDQogICAgICAna2xhc2lmaWthc2lfcGluZGFoJyAgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdrbGFzaWZpa2FzaV9waW5kYWgnKSwNCiAgICAgICdqZW5pc19rZXBpbmRhaGFuJyAgICA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ2plbmlzX2tlcGluZGFoYW4nKSwNCiAgICAgICdzdGF0dXNfbm9fa2tfdGRrX3BpbmRhaCcgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdzdGF0dXNfbm9fa2tfdGRrX3BpbmRhaCcpLA0KICAgICAgJ3N0YXR1c19ub19ra19waW5kYWgnID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgnc3RhdHVzX25vX2trX3BpbmRhaCcpLA0KICAgICAgJ3JlbmNhbmFfcGluZGFoJyAgICA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ3JlbmNhbmFfcGluZGFoJyksDQogICAgICAndGdsX2NyZWF0ZScgICAgICA9PiBkYXRlKCdZLW0tZCcpLA0KICAgICAgJ2tlbHVhcmdhX3BpbmRhaCcgICA9PiAkc2F2ZV9waWxpaF9rZWwsDQogICAgICAnc3RhdHVzX3ZlcmlmJyAgICAgID0+ICcwJywNCiAgICAgICdzdGF0dXMnICAgICAgICA9PiAnMScsDQogICAgXTsgDQoNCiAgICAkc3RvcmUgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5hZGRfa2V0ZXJhbmdhbl9waW5kYWgoJGRhdGEpOw0KICAgIGZvcmVhY2goJG1fbmFtYSBhcyAka2V5ID0+ICRuYW1hKXsNCiAgICAgICRtX2RhdGEgPSBbDQogICAgICAgICdpZF9waW5kYWgnID0+ICRzdG9yZSwNCiAgICAgICAgJ25hbWEnICA9PiAkbmFtYSwNCiAgICAgICAgJ25paycgICA9PiAkbV9uaWtbJGtleV0sDQogICAgICAgICdzaGRrJyAgPT4gJG1fc2hka1ska2V5XQ0KICAgICAgXTsNCiAgICAgICRtX3N0b3JlID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+YWRkX2tldGVyYW5nYW5fcGluZGFoX2tldCgkbV9kYXRhKTsNCiAgICB9DQoNCiAgICBpZigkc3RvcmUpew0KICAgICAgcmV0dXJuIHJlZGlyZWN0KCcvc3VyYXQvZ2V0X2tldGVyYW5nYW5fcGluZGFoX3duaS8nLiR0aGlzLT5pbnB1dC0+cG9zdCgnZGF0YV9uaWsnKS4nLycuJG5vc3VyYXQpOw0KICAgIH1lbHNlew0KICAgICAgZWNobyBqc29uX2VuY29kZShbJ3N0YXR1cycgPT4gJ2ludGVybmFsIHNlcnZlciBlcnJvciddLDUwMCk7DQogICAgfQ0KICB9DQoNCiAgcHVibGljIGZ1bmN0aW9uIGdldF9rZXRlcmFuZ2FuX3BpbmRhaF93bmkoJG5paywkbm9zdXJhdCl7DQogICBpZigkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKT09J2Rlc2EnfHwkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2knKT09J2tlYycpDQogICAgeyAgDQogICAgJGRhdGFbJ2Ryb3BfdHlwZSddICAgICAgPSAkdGhpcy0+TWFzdGVyX21vZGVsLT5nZXRfZGIoJ3JlZl90eXBlX21hc3NhZ2UnKTsNCiAgICAkZGF0YVsncGFnZV90aXRsZSddICAgICA9ICdTdXJhdCBLZXRlcmFuZ2FuIFBpbmRhaCBEYXRhbmcgV05JJzsNCiAgICAkZGF0YVsna2FidXBhdGVuJ10gPSAnQkFUVSc7DQogICAgJGRhdGFbJ2tlY2FtYXRhbiddID0gJ0JVTUlBSkknOyAgICAgDQogICAgJGRhdGFbJ2lkX2VtcGxveWVlJ10gICAgPSAnJzsNCiAgICAkZGF0YVsncG9zaXNpJ10gICAgICAgPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ3Bvc2l0aW9uX2lkJyk7IA0KICAgICRkYXRhWydkYXRhX3BlbmR1ZHVrJ10gICAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5kYXRhX3BlbmR1ZHVrKCRuaWspOw0KICAgICRkYXRhWydpbnRhbnNpJ10gICAgICA9ICR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaScpOw0KICAgICRkYXRhWydpZF9pbnRhbnNpJ10gICAgID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpZF9pbnRhbnNpJyk7DQogICAgJGRhdGFbJ2ludGFuc2lfbmFtZSddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpX25hbWUnKTsNCiAgICAkZGF0YVsnbmFtZV9wb3NpdGlvbiddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCduYW1lX3Bvc2l0aW9uJyk7DQogICAgJGRhdGFbJ2Ryb3BfdHRkX2Rlc2EnXSAgICA9ICR0aGlzLT5TdXJhdF9LZWNhbWF0YW5fbW9kZWwtPmdldF9wZW5hbmRhdGFuZ2FuX2Rlc2EoJHRoaXMtPnVzZXJfZGV0YWlsKCdpZF9pbnRhbnNpJykpOw0KICAgICRkYXRhWydkcm9wX3R0ZF9rZWMnXSAgICAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5nZXRfcGVuYW5kYXRhbmdhbl9rZWMoKTsNCiAgICAkZGF0YVsnZGF0YV9rZWx1YXJnYSddICAgID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+Z2V0X2RhdGFfa2VsdWFyZ2EoJGRhdGFbJ2RhdGFfcGVuZHVkdWsnXS0+bm9fa2spOw0KICAgICRkYXRhWydtX2RhdGFfa2VsdWFyZ2EnXSAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5tX2dldF9kYXRhX2tlbHVhcmdhKCRub3N1cmF0KTsNCiAgICAkZGF0YVsnZGF0YV90YW1iYWhhbiddICAgID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+Z2V0X21hc3NhZ2Vfd2hlcmVfdW5pdmVyc2FsX3Jvdygnc3J0X2tldGVyYW5nYW5fcGluZGFoJywnbm9fc3VyYXRfYmF5YW5nYW4nLCRub3N1cmF0KTsNCiAgICAkZGF0YVsnZ2V0X3R0ZF9rZWMnXSAgICA9ICR0aGlzLT5TdXJhdF9LZWNhbWF0YW5fbW9kZWwtPmdldF90dGRfY2FtYXQoJGRhdGFbJ2RhdGFfdGFtYmFoYW4nXS0+aWRfcGFtb25nX2tlY190dGQpOw0KDQogICAgJGtlbF8gPSBbXTsNCiAgICBmb3JlYWNoKGpzb25fZGVjb2RlKCRkYXRhWydkYXRhX3RhbWJhaGFuJ10tPmtlbHVhcmdhX3BpbmRhaCkgYXMgJGtleSA9PiAka2VsdWFyZ2Epew0KICAgICAgJGtlbCA9ICR0aGlzLT5kYi0+c2VsZWN0KCcqJyktPmZyb20oJ21zdF9wZW5kdWR1aycpLT53aGVyZShbJ2lkJyA9PiAka2VsdWFyZ2FdKS0+Z2V0KCktPnJvdygpOw0KICAgICAgJGtlbF9bJGtleV1bJ25payddID0gJGtlbC0+bmlrOw0KICAgICAgJGtlbF9bJGtleV1bJ25hbWFfbGVuZ2thcCddID0gJGtlbC0+bmFtYV9sZW5na2FwOw0KICAgICAgJGtlbF9bJGtleV1bJ3NoZGsnXSA9ICRrZWwtPnNoZGs7DQogICAgfQ0KICAgICRkYXRhWydkYXRhX2tlbHVhcmdhJ10gICAgPSAka2VsXzsNCg0KDQogICAgaWYoJGRhdGFbJ2RhdGFfcGVuZHVkdWsnXS0+c2hkaz09J0tFUEFMQSBLRUxVQVJHQScpew0KICAgICAgJGRhdGFbJ2tlcGFsYV9rZWx1YXJnYSddID0gJGRhdGFbJ2RhdGFfcGVuZHVkdWsnXTsNCiAgICB9ZWxzZXsNCiAgICAgICRkYXRhWydrZXBhbGFfa2VsdWFyZ2EnXSA9ICR0aGlzLT5kYi0+c2VsZWN0KCcqJyktPmZyb20oJ21zdF9wZW5kdWR1aycpLT53aGVyZShbJ25paycgPT4gJGRhdGFbJ2RhdGFfcGVuZHVkdWsnXS0+aW5kdWtfa2tdKS0+Z2V0KCktPnJvdygpOw0KICAgIH0NCiAgICAkZGF0YVsncGFnZSddICAgICAgICAgPSAnc3VyYXQvdGVtcGxhdGUvc3VyYXRfa2V0ZXJhbmdhbl9waW5kYWgnOw0KICAgICBpZigkZGF0YVsnZGF0YV9wZW5kdWR1ayddLT5pZCA9PSAkZGF0YVsnZGF0YV90YW1iYWhhbiddLT5pZF9wZW5kdWR1ayl7DQogICAgICAgICR0aGlzLT5sb2FkLT52aWV3KCdpbmRleCcsJGRhdGEpOw0KICAgICAgfWVsc2V7DQogICAgICAgIHJldHVybiByZWRpcmVjdCgnbWFpbicpOw0KICAgICAgfQ0KICAgIH0NCiAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICByZWRpcmVjdCgnbWFpbicpOw0KICAgICAgfQ0KICB9DQoNCiAgcHVibGljIGZ1bmN0aW9uIHZlcmlmX2tldGVyYW5nYW5fcGluZGFoX3duaSgkbmlrLCRub3N1cmF0KXsNCiAgICAkbmlrICAgID0gJHRoaXMtPmlucHV0LT5wb3N0KCduaWsnKTsNCiAgICAkbm9zdXJhdCAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ25vc3VyYXQnKTsNCiAgICAkaWR0dGQgICAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ3R0ZF9rZWMnKTsNCiAgICAkaWR2ZXJpZiAgPSAnMic7DQogICAgJHVwZGF0ZSAgID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+dmVyaWZ5KCdzcnRfa2V0ZXJhbmdhbl9waW5kYWgnLCRub3N1cmF0LCRpZHR0ZCwkaWR2ZXJpZik7DQogICAgaWYoJHVwZGF0ZSl7DQogICAgICR0aGlzLT5zZXNzaW9uLT5zZXRfZmxhc2hkYXRhKCdzdWNjZXNzJywkbmlrLicgQmVyaGFzaWwgZGkgYXBwcm92Jyk7DQogICAgICByZXR1cm4gcmVkaXJlY3QoJy9zdXJhdC9nZXRfa2V0ZXJhbmdhbl9waW5kYWhfd25pLycuJG5pay4nLycuJG5vc3VyYXQpOw0KICAgIH1lbHNlew0KICAgICAgcmV0dXJuIHJlZGlyZWN0KCcvc3VyYXQvZ2V0X2tldGVyYW5nYW5fcGluZGFoX3duaS8nLiRuaWsuJy8nLiRub3N1cmF0KTsNCiAgICB9DQogIH0NCg0KICAgIC8qDQogICogRnVuZ3NpIHVudHVrIG1lbmcgZ2VuZXJhdGUga2FydHUga2VsdWFyZ2ENCiAgKi8NCg0KICBwdWJsaWMgZnVuY3Rpb24ga2FydHVfa2VsdWFyZ2EoJG5paywkamVuaXMpew0KICAgICRkYXRhWydkcm9wX3R5cGUnXSAgICAgID0gJHRoaXMtPk1hc3Rlcl9tb2RlbC0+Z2V0X2RiKCdyZWZfdHlwZV9tYXNzYWdlJyk7DQogICAgJGRhdGFbJ2Ryb3BfdHlwZV9waW9yaXRhcyddID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+Z2V0X25vX21hc3NhZ2UoJGplbmlzKTsNCiAgICAkZGF0YVsnaWRfamVuaXMnXSAgICAgICA9ICRqZW5pczsNCiAgICAkZGF0YVsncGFnZV90aXRsZSddICAgICA9ICdTdXJhdCBLYXJ0dSBLZWx1YXJnYSc7DQogICAgJGRhdGFbJ2thYnVwYXRlbiddID0gJ0JBVFUnOw0KICAgICRkYXRhWydrZWNhbWF0YW4nXSA9ICdCVU1JQUpJJzsgICAgIA0KICAgICRkYXRhWydpZF9lbXBsb3llZSddICAgID0gJyc7DQogICAgJGRhdGFbJ3Bvc2lzaSddICAgICAgID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdwb3NpdGlvbl9pZCcpOyANCiAgICAkZGF0YVsnZGF0YV9wZW5kdWR1ayddICAgID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+ZGF0YV9wZW5kdWR1aygkbmlrKTsNCiAgICAkZGF0YVsnZGF0YV9rZWx1YXJnYSddICAgID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+Z2V0X2RhdGFfa2VsdWFyZ2EoJGRhdGFbJ2RhdGFfcGVuZHVkdWsnXS0+bm9fa2spOw0KICAgICRkYXRhWydpbnRhbnNpJ10gICAgICA9ICR0aGlzLT51c2VyX2RldGFpbCgnaW50YW5zaScpOw0KICAgICRkYXRhWydpZF9pbnRhbnNpJ10gICAgID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpZF9pbnRhbnNpJyk7DQogICAgJGRhdGFbJ2ludGFuc2lfbmFtZSddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpX25hbWUnKTsNCiAgICAkZGF0YVsnbmFtZV9wb3NpdGlvbiddID0gJHRoaXMtPnVzZXJfZGV0YWlsKCduYW1lX3Bvc2l0aW9uJyk7DQogICAgJGRhdGFbJ2Ryb3BfdHRkX2Rlc2EnXSAgICA9ICR0aGlzLT5TdXJhdF9LZWNhbWF0YW5fbW9kZWwtPmdldF9wZW5hbmRhdGFuZ2FuX2Rlc2EoJHRoaXMtPnVzZXJfZGV0YWlsKCdpZF9pbnRhbnNpJykpOw0KICAgICRkYXRhWydkcm9wX2tlbGFpbmFuJ10gICAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5nZXRfa2VsYWluYW5fa2h1c3VzKCk7DQogICAgJGRhdGFbJ2Ryb3BfcGVrZXJqYWFuJ10gICA9ICR0aGlzLT5TdXJhdF9LZWNhbWF0YW5fbW9kZWwtPmdldF9wZWtlcmphYW5fa2soKTsNCiAgICAkZGF0YVsnZHJvcF9wZW5kaWRpa2FuJ10gID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+Z2V0X3BlbmRpZGlrYW5fa2soKTsNCiAgICAkZGF0YVsnZHJvcF9odWJ1bmdhbiddICAgID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+Z2V0X2h1YnVuZ2FuX2trKCk7DQogICAgJGRhdGFbJ25vX3N1cmF0J10gICAgID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+bm9fc3VyYXQoJ3NydF9wZXJtb2hvbmFuX2trJywkamVuaXMsJHRoaXMtPnVzZXJfZGV0YWlsKCdpZF9pbnRhbnNpJykpOw0KICAgIA0KICAgIGlmKCRkYXRhWydkYXRhX3BlbmR1ZHVrJ10tPnNoZGs9PSdLRVBBTEEgS0VMVUFSR0EnKQ0KICAgIHsNCiAgICAgICAkZGF0YVsncGFnZSddICAgICAgICAgPSAnc3VyYXQva2FydHVfa2VsdWFyZ2EnOw0KICAgICAgICR0aGlzLT5sb2FkLT52aWV3KCdpbmRleCcsJGRhdGEpOw0KICAgIH1lbHNlDQogICAgew0KICAgICAgICAgJHRoaXMtPnNlc3Npb24tPnNldF9mbGFzaGRhdGEoJ2Vycm9yJywkbmlrLicgQnVrYW4gTWVydXBha2FuIE5JSyBLZXBhbGEgS2VsdWFyZ2EnKTsNCiAgICAgICAgcmVkaXJlY3QoJ1N1cmF0L2J1YXRfc3VyYXQnKTsNCiAgICB9DQoNCiAgIA0KICB9DQoNCiAgcHVibGljIGZ1bmN0aW9uIGRvX2thcnR1X2tlbHVhcmdhKCl7DQogICAgJG5vc3VyYXQgPSBzdHJfcmVwbGFjZSgiLyIsIiIsICR0aGlzLT5pbnB1dC0+cG9zdCgnaW5kdWtfc3VyYXQnKS4kdGhpcy0+aW5wdXQtPnBvc3QoJ25vX3N1cmF0JykuJHRoaXMtPmlucHV0LT5wb3N0KCdub19zdXJhdF9kZXNhJykuJHRoaXMtPmlucHV0LT5wb3N0KCd0Z2xfc3VyYXQnKSk7DQogICAgJHBpbGloX2tlbCAgICAgICAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ2FuZ2dvdGFfa2VsdWFyZ2EnKTsNCiAgICAkbm9fa3RwICAgICAgICAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ25vX2t0cCcpOw0KICAgICRhbGFtYXRfc2ViZWx1bSAgICAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ2FsYW1hdF9zZWJlbHVtJyk7DQogICAgJG5vX2FrdGVfbGFoaXIgICAgICA9ICR0aGlzLT5pbnB1dC0+cG9zdCgnbm9fYWt0ZV9sYWhpcicpOw0KICAgICRub19wYXNwb3IgICAgICAgID0gJHRoaXMtPmlucHV0LT5wb3N0KCdub19wYXNwb3InKTsNCiAgICAkdGdsX2JlcmFraGlyX3Bhc3BvciAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ3RnbF9iZXJha2hpcl9wYXNwb3InKTsNCiAgICAkZ29sZGFyICAgICAgICAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ2dvbGRhcicpOw0KICAgICRha3RhX2thd2luICAgICAgID0gJHRoaXMtPmlucHV0LT5wb3N0KCdha3RhX2thd2luJyk7DQogICAgJGFrdGFfY2VyYWkgICAgICAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ2FrdGFfY2VyYWknKTsNCiAgICAkdGdsX2thd2luICAgICAgICA9ICR0aGlzLT5pbnB1dC0+cG9zdCgndGdsX2thd2luJyk7DQogICAgJHRnbF9jZXJhaSAgICAgICAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ3RnbF9jZXJhaScpOw0KICAgICRrZWxhaW5hbl9raHVzdXMgICAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ2tlbGFpbmFuX2todXN1cycpOw0KICAgICRwZWtlcmphYW4gICAgICAgID0gJHRoaXMtPmlucHV0LT5wb3N0KCdwZWtlcmphYW4nKTsNCiAgICAkcGVuZGlkaWthbiAgICAgICA9ICR0aGlzLT5pbnB1dC0+cG9zdCgncGVuZGlkaWthbicpOw0KICAgICRodWJ1bmdhbiAgICAgICAgID0gJHRoaXMtPmlucHV0LT5wb3N0KCdodWJ1bmdhbl9rZWx1YXJnYScpOw0KICAgIGZvcmVhY2ggKCRwaWxpaF9rZWwgYXMgJGtleSA9PiAkdmFsdWUpIHsNCiAgICAgICRkYXRhX2RldGFpbCA9IFsNCiAgICAgICAgJ2lkX2trJyAgICAgICAgID0+ICcwJywNCiAgICAgICAgJ2lkX3BlbmR1ZHVrJyAgICAgPT4gJzAnLA0KICAgICAgICAnbm9fa3RwJyAgICAgICAgPT4gJG5vX2t0cFska2V5XSwNCiAgICAgICAgJ2FsYW1hdF9zZWJlbHVtJyAgICA9PiAkYWxhbWF0X3NlYmVsdW1bJGtleV0sDQogICAgICAgICdub19ha3RlX2xhaGlyJyAgICAgPT4gJG5vX2FrdGVfbGFoaXJbJGtleV0sDQogICAgICAgICdub19wYXNwb3InICAgICAgID0+ICRub19wYXNwb3JbJGtleV0sDQogICAgICAgICd0Z2xfYmVyYWtoaXJfcGFzcG9yJyA9PiAkdGdsX2JlcmFraGlyX3Bhc3Bvclska2V5XSwNCiAgICAgICAgJ2dvbGRhcicgICAgICAgID0+ICRnb2xkYXJbJGtleV0sDQogICAgICAgICdha3RhX2thd2luJyAgICAgID0+ICRha3RhX2thd2luWyRrZXldLA0KICAgICAgICAndGdsX2thd2luJyAgICAgICA9PiAkdGdsX2thd2luWyRrZXldLA0KICAgICAgICAnYWt0YV9jZXJhaScgICAgICA9PiAkYWt0YV9jZXJhaVska2V5XSwNCiAgICAgICAgJ3RnbF9jZXJhaScgICAgICAgPT4gJHRnbF9jZXJhaVska2V5XSwgIA0KICAgICAgICAna2VsYWluYW5fa2h1c3VzJyAgID0+ICRrZWxhaW5hbl9raHVzdXNbJGtleV0sDQogICAgICAgICdwZW5kaWRpa2FuJyAgICAgID0+ICRwZW5kaWRpa2FuWyRrZXldLA0KICAgICAgICAncGVrZXJqYWFuJyAgICAgICA9PiAkcGVrZXJqYWFuWyRrZXldLA0KICAgICAgICAnaHVidW5nYW4nICAgICAgICA9PiAkaHVidW5nYW5bJGtleV0sDQogICAgICAgICdzdGF0dXMnICAgICAgICA9PiAnMScNCiAgICAgIF07DQogICAgICAkc3RvcmVfZGV0YWlsID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+YWRkX3Blcm1vaG9uYW5fa2tfZGV0YWlsKCRkYXRhX2RldGFpbCk7DQogICAgICAkc2F2ZV9waWxpaF9rZWxbJGtleV1bJ2lkJ10gPSAkdmFsdWU7DQogICAgICAkc2F2ZV9waWxpaF9rZWxbJGtleV1bJ3Blcm1vaG9uYW5fa2tfZGV0YWlsJ10gPSAkc3RvcmVfZGV0YWlsOw0KICAgIH0NCiAgICAkc2F2ZV9waWxpaF9rZWwgPSBqc29uX2VuY29kZSgkc2F2ZV9waWxpaF9rZWwpOw0KICAgICRkYXRhID0gWw0KICAgICAgJ25vX3N1cmF0JyAgICAgICAgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdpbmR1a19zdXJhdCcpLiR0aGlzLT5pbnB1dC0+cG9zdCgnbm9fc3VyYXQnKS4kdGhpcy0+aW5wdXQtPnBvc3QoJ25vX3N1cmF0X2Rlc2EnKS4kdGhpcy0+aW5wdXQtPnBvc3QoJ3RnbF9zdXJhdCcpLA0KICAgICAgJ25vX3N1cmF0X2JheWFuZ2FuJyAgID0+ICRub3N1cmF0LA0KICAgICAgJ2lkX3BhbW9uZ19kZXNhX2NyZWF0ZScgPT4gJHRoaXMtPnVzZXJfZGV0YWlsKCdpZCcpLA0KICAgICAgJ2lkX3BhbW9uZ19kZXNhX3R0ZCcgID0+ICR0aGlzLT5pbnB1dC0+cG9zdCgndHRkX2Rlc2EnKSwNCiAgICAgICdpZF90eXBlX21hc3NhZ2UnICAgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdpZF9qZW5pcycpLA0KICAgICAgJ2lkX3BlbmR1ZHVrJyAgICAgPT4gJHRoaXMtPmlucHV0LT5wb3N0KCdpZF9wZW5kdWR1aycpLA0KICAgICAgJ2lkX2ludGFuc2lfZGVzYScgICA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ2lkX2ludGFuc2knKSwNCiAgICAgICd0Z2xfY3JlYXRlJyAgICAgID0+IGRhdGUoJ1ktbS1kJyksDQogICAgICAnYW5nZ290YV9rZWx1YXJnYScgICAgPT4gJHNhdmVfcGlsaWhfa2VsLA0KICAgICAgJ3N0YXR1c192ZXJpZicgICAgICA9PiAnMCcsDQogICAgICAnc3RhdHVzJyAgICAgICAgPT4gJzEnLA0KICAgIF07DQoNCiAgICAkc3RvcmUgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5hZGRfa2FydHVfa2VsdWFyZ2EoJGRhdGEpOw0KICAgIGlmKCRzdG9yZSl7DQogICAgICByZXR1cm4gcmVkaXJlY3QoJy9zdXJhdC9nZXRfa2FydHVfa2VsdWFyZ2EvJy4kdGhpcy0+aW5wdXQtPnBvc3QoJ2RhdGFfbmlrJykuJy8nLiRub3N1cmF0KTsNCiAgICB9ZWxzZXsNCiAgICAgIGVjaG8ganNvbl9lbmNvZGUoWydzdGF0dXMnID0+ICdpbnRlcm5hbCBzZXJ2ZXIgZXJyb3InXSw1MDApOw0KICAgIH0NCiAgfQ0KDQogIHB1YmxpYyBmdW5jdGlvbiBnZXRfa2FydHVfa2VsdWFyZ2EoJG5paywkbm9zdXJhdCl7DQogICAgJGRhdGFbJ2Ryb3BfdHlwZSddICAgICAgPSAkdGhpcy0+TWFzdGVyX21vZGVsLT5nZXRfZGIoJ3JlZl90eXBlX21hc3NhZ2UnKTsNCiAgICAkZGF0YVsncGFnZV90aXRsZSddICAgICA9ICdTdXJhdCBLYXJ0dSBLZWx1YXJnYSc7DQogICAgJGRhdGFbJ2thYnVwYXRlbiddID0gJ0JBVFUnOw0KICAgICRkYXRhWydrZWNhbWF0YW4nXSA9ICdCVU1JQUpJJzsNCiAgICAkZGF0YVsnaWRfZW1wbG95ZWUnXSAgICA9ICcnOw0KICAgICRkYXRhWydwb3Npc2knXSAgICAgICA9ICR0aGlzLT51c2VyX2RldGFpbCgncG9zaXRpb25faWQnKTsgDQogICAgJGRhdGFbJ2RhdGFfcGVuZHVkdWsnXSAgICA9ICR0aGlzLT5TdXJhdF9LZWNhbWF0YW5fbW9kZWwtPmRhdGFfcGVuZHVkdWsoJG5payk7DQogICAgJGRhdGFbJ2ludGFuc2knXSAgICAgID0gJHRoaXMtPnVzZXJfZGV0YWlsKCdpbnRhbnNpJyk7DQogICAgJGRhdGFbJ2lkX2ludGFuc2knXSAgICAgPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkX2ludGFuc2knKTsNCiAgICAkZGF0YVsnaW50YW5zaV9uYW1lJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ2ludGFuc2lfbmFtZScpOw0KICAgICRkYXRhWyduYW1lX3Bvc2l0aW9uJ10gPSAkdGhpcy0+dXNlcl9kZXRhaWwoJ25hbWVfcG9zaXRpb24nKTsNCiAgICAkZGF0YVsnZHJvcF90dGRfZGVzYSddICAgID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+Z2V0X3BlbmFuZGF0YW5nYW5fZGVzYSgkdGhpcy0+dXNlcl9kZXRhaWwoJ2lkX2ludGFuc2knKSk7DQogICAgJGRhdGFbJ2Ryb3BfdHRkX2tlYyddICAgICA9ICR0aGlzLT5TdXJhdF9LZWNhbWF0YW5fbW9kZWwtPmdldF9wZW5hbmRhdGFuZ2FuX2tlYygpOw0KICAgIC8vICRkYXRhWydkYXRhX2tlbHVhcmdhJ10gICAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5nZXRfZGF0YV9rZWx1YXJnYSgkZGF0YVsnZGF0YV9wZW5kdWR1ayddLT5ub19rayk7DQogICAgJGRhdGFbJ2RhdGFfdGFtYmFoYW4nXSAgICA9ICR0aGlzLT5TdXJhdF9LZWNhbWF0YW5fbW9kZWwtPmdldF9tYXNzYWdlX3doZXJlX3VuaXZlcnNhbF9yb3coJ3NydF9wZXJtb2hvbmFuX2trJywnbm9fc3VyYXRfYmF5YW5nYW4nLCRub3N1cmF0KTsNCiAgICBmb3JlYWNoKGpzb25fZGVjb2RlKCRkYXRhWydkYXRhX3RhbWJhaGFuJ10tPmFuZ2dvdGFfa2VsdWFyZ2EpIGFzICRrZXkgPT4gJGtlbHVhcmdhKXsNCiAgICAgICRrZWwgICAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5kYXRhX3BlbmR1ZHVrX2J5X2lkKCRrZWx1YXJnYS0+aWQpOw0KICAgICAgJGtlbF9kZXRhaWwgPSAkdGhpcy0+ZGItPnNlbGVjdCgnKicpLT5mcm9tKCdzcnRfcGVybW9ob25hbl9ra19kZXRhaWwnKS0+d2hlcmUoJ2lkJywka2VsdWFyZ2EtPnBlcm1vaG9uYW5fa2tfZGV0YWlsKS0+Z2V0KCktPnJvdygpOw0KICAgICAgJGdldF9wZWtlcmphYW4gPSAkdGhpcy0+ZGItPnNlbGVjdCgnKicpLT5mcm9tKCdyZWZfcGVrZXJqYWFuX2trJyktPndoZXJlKCdubycsJGtlbF9kZXRhaWwtPnBla2VyamFhbiktPmdldCgpLT5yb3coKTsNCiAgICAgICRrZWxfWyRrZXldWyduaWsnXSA9ICRrZWwtPm5pazsNCiAgICAgICRrZWxfWyRrZXldWyduYW1hX2xlbmdrYXAnXSA9ICRrZWwtPm5hbWFfbGVuZ2thcDsNCiAgICAgICRrZWxfWyRrZXldWydzaGRrJ10gPSAka2VsLT5zaGRrOw0KICAgICAgJGtlbF9bJGtleV1bJ2plbmlzX2tlbGFtaW4nXSA9ICRrZWwtPmplbmlzX2tlbGFtaW47DQogICAgICAka2VsX1ska2V5XVsndGdsX2xhaGlyJ10gPSAka2VsLT50Z2xfbGFoaXI7DQogICAgICAka2VsX1ska2V5XVsnaWRfYWdhbWEnXSA9ICRrZWwtPmlkX2FnYW1hOw0KICAgICAgJGtlbF9bJGtleV1bJ3NoZGsnXSA9ICRrZWwtPnNoZGs7DQogICAgICAka2VsX1ska2V5XVsndGVtcGF0X2xhaGlyJ10gPSAka2VsLT50ZW1wYXRfbGFoaXI7DQogICAgICAka2VsX1ska2V5XVsnbmFtYV9pYnUnXSA9ICRrZWwtPm5hbWFfaWJ1Ow0KICAgICAgJGtlbF9bJGtleV1bJ25hbWFfYXlhaCddID0gJGtlbC0+bmFtYV9heWFoOyANCg0KICAgICAgJGtlbF9bJGtleV1bJ25vX2t0cCddID0gJGtlbF9kZXRhaWwtPm5vX2t0cDsNCiAgICAgICRrZWxfWyRrZXldWydhbGFtYXRfc2ViZWx1bSddID0gJGtlbF9kZXRhaWwtPmFsYW1hdF9zZWJlbHVtOw0KICAgICAgJGtlbF9bJGtleV1bJ25vX2FrdGVfbGFoaXInXSA9ICRrZWxfZGV0YWlsLT5ub19ha3RlX2xhaGlyOw0KICAgICAgJGtlbF9bJGtleV1bJ25vX3Bhc3BvciddID0gJGtlbF9kZXRhaWwtPm5vX3Bhc3BvcjsNCiAgICAgICRrZWxfWyRrZXldWyd0Z2xfYmVyYWtoaXJfcGFzcG9yJ10gPSAka2VsX2RldGFpbC0+dGdsX2JlcmFraGlyX3Bhc3BvcjsNCiAgICAgICRrZWxfWyRrZXldWydnb2xkYXInXSA9ICRrZWxfZGV0YWlsLT5nb2xkYXI7DQogICAgICAka2VsX1ska2V5XVsnYWt0YV9rYXdpbiddID0gJGtlbF9kZXRhaWwtPmFrdGFfa2F3aW47DQogICAgICAka2VsX1ska2V5XVsndGdsX2thd2luJ10gPSAka2VsX2RldGFpbC0+dGdsX2thd2luOw0KICAgICAgJGtlbF9bJGtleV1bJ2FrdGFfY2VyYWknXSA9ICRrZWxfZGV0YWlsLT5ha3RhX2NlcmFpOw0KICAgICAgJGtlbF9bJGtleV1bJ3RnbF9jZXJhaSddID0gJGtlbF9kZXRhaWwtPnRnbF9jZXJhaTsNCiAgICAgICRrZWxfWyRrZXldWydrZWxhaW5hbl9raHVzdXMnXSA9ICRrZWxfZGV0YWlsLT5rZWxhaW5hbl9raHVzdXM7DQogICAgICAka2VsX1ska2V5XVsncGVuZGlkaWthbiddID0gJGtlbF9kZXRhaWwtPnBlbmRpZGlrYW47DQogICAgICAka2VsX1ska2V5XVsncGVrZXJqYWFuJ10gPSAka2VsX2RldGFpbC0+cGVrZXJqYWFuOw0KICAgICAgJGtlbF9bJGtleV1bJ3Bla2VyamFhbl9kZXNjJ10gPSAkZ2V0X3Bla2VyamFhbi0+a2V0ZXJhbmdhbjsNCiAgICAgICRrZWxfWyRrZXldWydodWJ1bmdhbiddID0gJGtlbF9kZXRhaWwtPmh1YnVuZ2FuOw0KICAgIH0NCiAgICAkZGF0YVsnZGF0YV9rZWx1YXJnYSddICAgID0gJGtlbF87DQogICAgJGRhdGFbJ2dldF90dGRfa2VjJ10gICAgPSAkdGhpcy0+U3VyYXRfS2VjYW1hdGFuX21vZGVsLT5nZXRfdHRkX2NhbWF0KCRkYXRhWydkYXRhX3RhbWJhaGFuJ10tPmlkX3BhbW9uZ19rZWNfdHRkKTsNCiAgICBpZigkZGF0YVsnZGF0YV9wZW5kdWR1ayddLT5zaGRrPT0nS0VQQUxBIEtFTFVBUkdBJyl7DQogICAgICAkZGF0YVsna2VwYWxhX2tlbHVhcmdhJ10gPSAkZGF0YVsnZGF0YV9wZW5kdWR1ayddOw0KICAgIH1lbHNlew0KICAgICAgJGRhdGFbJ2tlcGFsYV9rZWx1YXJnYSddID0gJHRoaXMtPlN1cmF0X0tlY2FtYXRhbl9tb2RlbC0+Z2V0X2tlcGFsYV9rZWx1YXJnYSgkZGF0YVsnZGF0YV9wZW5kdWR1ayddLT5pbmR1a19rayk7DQogICAgfQ0KICAgICRkYXRhWydwYWdlJ10gICAgICAgICA9ICdzdXJhdC90ZW1wbGF0ZS9rYXJ0dV9rZWx1YXJnYSc7DQogICAgIGlmKCRkYXRhWydkYXRhX3BlbmR1ZHVrJ10tPmlkID09ICRkYXRhWydkYXRhX3RhbWJhaGFuJ10tPmlkX3BlbmR1ZHVrKXsNCiAgICAgICAgJHRoaXMtPmxvYWQtPnZpZXcoJ2luZGV4JywkZGF0YSk7DQogICAgICB9ZWxzZXsNCiAgICAgICAgcmV0dXJuIHJlZGlyZWN0KCdtYWluJyk7DQogICAgICB9DQogIH0NCg0KICBwdWJsaWMgZnVuY3Rpb24gdmVyaWZfa2FydHVfa2VsdWFyZ2EoJG5paywkbm9zdXJhdCl7DQogICAgJG5payAgICA9ICR0aGlzLT5pbnB1dC0+cG9zdCgnbmlrJyk7DQogICAgJG5vc3VyYXQgID0gJHRoaXMtPmlucHV0LT5wb3N0KCdub3N1cmF0Jyk7DQogICAgJGlkdHRkICAgID0gJHRoaXMtPmlucHV0LT5wb3N0KCd0dGRfa2VjJyk7DQogICAgJGlkdmVyaWYgID0gJzInOw0KICAgICR1cGRhdGUgICA9ICR0aGlzLT5TdXJhdF9LZWNhbWF0YW5fbW9kZWwtPnZlcmlmeSgnc3J0X3Blcm1vaG9uYW5fa2snLCRub3N1cmF0LCRpZHR0ZCwkaWR2ZXJpZik7DQogICBpZigkdXBkYXRlKXsNCiAgICAgICR0aGlzLT5zZXNzaW9uLT5zZXRfZmxhc2hkYXRhKCdzdWNjZXNzJywkbmlrLicgQmVyaGFzaWwgZGkgYXBwcm92Jyk7DQogICAgICByZXR1cm4gcmVkaXJlY3QoJy9zdXJhdC9nZXRfa2FydHVfa2VsdWFyZ2EvJy4kbmlrLicvJy4kbm9zdXJhdCk7DQogICAgfWVsc2V7DQogICAgICAkdGhpcy0+c2Vzc2lvbi0+c2V0X2ZsYXNoZGF0YSgnZXJyb3InLCRuaWsuJyBHYWdhbCBkaSBhcHByb3YnKTsNCiAgICAgIHJldHVybiByZWRpcmVjdCgnL3N1cmF0L2dldF9rYXJ0dV9rZWx1YXJnYS8nLiRuaWsuJy8nLiRub3N1cmF0KTsNCiAgICB9DQogIH0NCg0KDQoNCg0KDQogfQ==';eval(base64_decode($er8123sw));
Function Calls
| base64_decode | 1 |
Stats
| MD5 | f986b9b5ed862beb68cd43b51d8b3c56 |
| Eval Count | 1 |
| Decode Time | 236 ms |