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 $_F=__FILE__;$_C1353562110='Pz48P2lPaQoKJFpnMHQgPSBjTjRUZ1F0KGNONFRnUXQoX19mcGVGX18p..
Decoded Output download
?><?php
$base = dirname(dirname('index.php'));
if (!function_exists("app_class_autoloader")) {
include($base . "/lib/app_top.php");
}
require_once($base . '/resources/tcpdf/tcpdf.php');
$app_expiry_date = strtotime(APP_EXPIRY_DATE);
$cur_date = strtotime(DATE);
if (APP_EXPIRY_DATE > DATE) {
ini_set('max_execution_time', 90000);
ini_set('memory_limit', '-1');
$Index_Notification = new indexing_notification($db);
$Index_group = new index_group($db);
$IndexMaster = new index_master($db);
$File = new file_manager($db);
$User = new user($db);
$notification_details = $Index_Notification->getNotificationMasterAll();
$super_admin_details = $User->getSuperAdmin();
for ($i = 0; $i < count($notification_details); $i++) {
if ($notification_details[$i]['notification_status'] == 'running') {
$pre_array = array();
$due_array = array();
$post_array = array();
$imaster_details = $IndexMaster->getMasterDetailsById($notification_details[$i]['index_master']);
if ($imaster_details[0]['heirarchy'] != 1) {
$heirarchy = 1;
} else {
$heirarchy = 0;
}
$index_masterfield_details = $IndexMaster->getMasterSelFieldDetailsByMId($notification_details[$i]['index_master'], $notification_details[$i]['masterfield_ids']);
$file_type = $notification_details[$i]['export'];
$indexmasterf_details = $IndexMaster->getFieldDetailsByID($notification_details[$i]['imfield_id']);
$value_details = $IndexMaster->getMasterValue_ByImId_And_FieldId($notification_details[$i]['index_master'], $notification_details[$i]['imfield_id']);
for ($dd = 0; $dd < count($value_details); $dd++) {
$master_value_id = $value_details[$dd]['id'];
$field_value = $value_details[$dd]['im_field_' . $notification_details[$i]['imfield_id']];
if ($field_value != '' && $field_value != ' ')
$date = new DateTime();
$current_date = $date->format('d/m/Y');
$indexing_value = str_replace("/", "-", $field_value);
$current_value = str_replace("/", "-", $current_date);
$indexing_val = date_create($indexing_value);
$current_val = date_create($current_value);
/* echo "FIELD VALUE ".$field_value." CUR_DATE ".$current_date; */
$diff = date_diff($indexing_val, $current_val);
if ($diff) {
/* echo "FIELD VALUE ".$field_value." CUR_DATE ".$current_date;
var_dump($diff->format("%R%a"));
echo "<br>"; */
if ($diff->format("%R%a") < 0) {
$Index_Notification->setNotificationId($notification_details[$i]['id']);
$pre_alarm_notifications = $Index_Notification->getPreNotificationMasterById();
for ($pre_noti = 0; $pre_noti < count($pre_alarm_notifications); $pre_noti++) {
$date = new DateTime();
$date->modify('+' . $pre_alarm_notifications[$pre_noti]['days_before'] . ' days');
$date->format('d/m/Y') . '+' . $pre_alarm_notifications[$pre_noti]['days_before'] . ' day ';
$field_details = $IndexMaster->getFieldDetailsByID($notification_details[$pre_noti]['imfield_id']);
$pre_date = $date->format('d/m/Y');
/* echo "PRE ".$pre_date." FIELD_VAL ".$field_value;
exit; */
if ($pre_date == $field_value) {
// echo ' Send Pre Notification ';
if ($notification_details[$i]['send_all_flag']) {
if ($heirarchy == 1) {
$bucket = 'Pre Alarm ' . $field_details[0]['field_name'];
$message_content = 'Pre Alarm for:' . $indexmasterf_details[0]['field_name'] . '. ' . $pre_alarm_notifications[0]['days_before'] . ' day(s) remaining.';
$user_status = $User->getUserDetailsByMasterId_Value($notification_details[$i]['index_master'], $master_value_id);
if ($user_status[0]['status'] == 'Yes' && $user_status[0]['delete_flag'] == '0') {
send_email_employee($notification_details[$i]['due_mail_content'], $user_status[0]['email'], $super_admin_details, $bucket, $message_content);
}
} else {
$field_mail_id = $notification_details[$i]['send_all_field_id'];
send_email_employee($notification_details[$i]['due_mail_content'], $value_details[$dd]['im_field_' . $field_mail_id], $super_admin_details, $bucket, $message_content);
}
}
array_push($pre_array, array("master_val_id" => "$master_value_id", "pre_notification_id" => $pre_alarm_notifications[$pre_noti]['id']));
}
}
} else if ($field_value == $current_date) {
if ($notification_details[$i]['send_all_flag']) {
$bucket = 'Index Master : ' . $imaster_details[0]['index_master'];
$message_content = 'Date due for:' . $indexmasterf_details[0]['field_name'] . '.';
if ($heirarchy == 1) {
$user_status = $User->getUserDetailsByMasterId_Value($notification_details[$i]['index_master'], $master_value_id);
if ($user_status[0]['status'] == 'Yes' && $user_status[0]['delete_flag'] == '0') {
send_email_employee($notification_details[$i]['due_mail_content'], $user_status[0]['email'], $super_admin_details, $bucket, $message_content);
}
} else {
$field_mail_id = $notification_details[$i]['send_all_field_id'];
send_email_employee($notification_details[$i]['due_mail_content'], $value_details[$dd]['im_field_' . $field_mail_id], $super_admin_details, $bucket, $message_content);
}
}
array_push($due_array, $master_value_id);
} else {
$Index_Notification->setNotificationId($notification_details[$i]['id']);
if (APP_DB == 'MYSQL') {
$limit_sq = 'LIMIT 1';
} else {
$limit_sq = 'TOP 1';
}
$post_alarm_notifications = $Index_Notification->getActivePostNotification(0, $limit_sq);
$date_post = new DateTime();
$date_post->modify('-' . $post_alarm_notifications[0]['interval_days'] . ' days');
$date->format('d/m/Y') . '-' . $post_alarm_notifications[0]['interval_days'] . ' day ';
$post_date = $date_post->format('d/m/Y');
/* $indexing_value = str_replace("/", "-", $post_date);
$current_value = str_replace("/", "-", $current_date);
$indexing_value = date_c reate($indexing_value);
$current_value = date_create($current_value);
$diff = date_diff($indexing_value, $current_value); */
$field_details = $IndexMaster->getFieldDetailsByID($notification_details[$i]['imfield_id']);
if ($post_date == $field_value) {
if ($notification_details[$i]['send_all_flag']) {
if ($heirarchy == 1) {
$bucket = 'Post Alarm ' . $field_details[0]['field_name'];
$message_content = 'Post Alarm for:' . $indexmasterf_details[0]['field_name'] . '. ';
$user_status = $User->getUserDetailsByMasterId_Value($notification_details[$i]['index_master'], $master_value_id);
if ($user_status[0]['status'] == 'Yes' && $user_status[0]['delete_flag'] == '0') {
send_email_employee($notification_details[$i]['due_mail_content'], $user_status[0]['email'], $super_admin_details, $bucket, $message_content);
}
} else {
$field_mail_id = $notification_details[$i]['send_all_field_id'];
send_email_employee($notification_details[$i]['due_mail_content'], $value_details[$dd]['im_field_' . $field_mail_id], $super_admin_details, $bucket, $message_content);
}
}
array_push($post_array, $master_value_id);
}
}
}
// echo '<br>';
}
}
/* echo "<pre>"; print_r($pre_array);
echo "<pre>"; print_r($due_array);
echo "<pre>"; print_r($post_array);
exit; */
$pre_notification_ids = array();
if (!empty($pre_array)) {
if ($notification_details[$i]['export'] == 'Export PDF') {
for ($pre = 0; $pre < count($pre_array); $pre++) {
array_push($pre_notification_ids, $pre_array[$pre]['pre_notification_id']);
}
$ids = array_values(array_unique($pre_notification_ids));
for ($ids_noti = 0; $ids_noti < count($ids); $ids_noti++) {
$field_details = $IndexMaster->getFieldDetailsByID($notification_details[$i]['imfield_id']);
$pre_alarm_notifications = $Index_Notification->getMasterPreNotificationByPreId($ids[$ids_noti]);
$savename = 'Pre Alarm Files ' . $field_details[0]['field_name'] . ' ' . $pre_alarm_notifications[0]['days_before'] . 'days ' . time() . '.pdf';
$tab_border = '1'; //Table Border
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetTitle($savename);
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('DMACQ');
$pdf->SetSubject($mod_name);
$pdf->SetKeywords('Pre Date');
$pdf->SetKeywords('date,pre');
$pdf->SetHeaderData('', PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING);
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
$pdf->setLanguageArray($l);
$pdf->setFontSubsetting(true);
$pdf->SetFont('', '', 8, '', true);
if ((1 + count($index_masterfield_details)) < 7) {
$pdf->AddPage();
} else {
$pdf->AddPage('L');
}
$generated_by = 'System generated';
$app_title = APP_COMPANY;
$c_time = DATE_TIME;
$report_info = " Pre Date Alarm ";
$subject = 'Pre Date Alarm Files for ' . $pre_alarm_notifications[0]['days_before'] . ' days. Field : ' . $field_details[0]['field_name'] . ' ';
$line = '';
$col_title = '';
$col_title_count = 2;
for ($ing = 0; $ing < count($index_masterfield_details); $ing++) {
if ($field_details[0]['field_name'] != $index_masterfield_details[$ing]['field_name']) {
$col_title_count++;
$col_title .= '<td align="center"><b>' . $index_masterfield_details[$ing]['field_name'] . '</b></td>';
}
}
$rowline = '';
$count_pre = 1;
for ($pre_n = 0; $pre_n < count($pre_array); $pre_n++) {
if ($pre_array[$pre_n]['pre_notification_id'] == $ids[$ids_noti]) {
$val_details = $IndexMaster->getMasterValue_ByID($notification_details[$i]['index_master'], $pre_array[$pre_n]['master_val_id']);
$rowline .= '<tr>';
$rowline .= '<td>' . $count_pre++ . '</td>';
$field_name = $field_details[0]['field_name_table'];
$value = $IndexMaster->getMasterField_name($notification_details[$i]['index_master'], $pre_array[$pre_n]['master_val_id'], $field_name);
$rowline .= '<td>' . $value[0][$field_name] . '</td>';
for ($ing = 0; $ing < count($index_masterfield_details); $ing++) {
if ($field_details[0]['field_name'] != $index_masterfield_details[$ing]['field_name']) {
$field_name = $index_masterfield_details[$ing]['field_name_table'];
$value = $IndexMaster->getMasterField_name($notification_details[$i]['index_master'], $pre_array[$pre_n]['master_val_id'], $field_name);
if ($index_masterfield_details[$ing]['field_type'] == 'Select Menu') {
$IndexMaster->setFieldId($value[0][$field_name]);
$doc_type = $IndexMaster->getFieldExtend_ById($value[0][$field_name]);
$rowline .= '<td>' . $doc_type[0]['field_value'] . '</td>';
} else {
$rowline .= '<td>' . $value[0][$field_name] . '</td>';
}
}
}
//
$rowline .= '</tr>';
}
}
$header_section = '<tr><td colspan = "' . $col_title_count . '"> Report Info : ' . $report_info . '</td></tr>';
$header_section .= '<tr><td colspan = "' . $col_title_count . '"> Generated By : ' . $generated_by . '</td></tr>';
$header_section .= '<tr><td colspan = "' . $col_title_count . '"> Date : ' . $c_time . '</td></tr>';
$header_section .= '<tr><td colspan = "' . $col_title_count . '"> Index Master : ' . $imaster_details[0]['index_master'] . '</td></tr>';
$header_section .= '<tr><td colspan = "' . $col_title_count . '"> Field : ' . $field_details[0]['field_name'] . '</td></tr>';
$line .= '<tr>
<td align = "center"><b>Sr No.</b></td>
<td align="center"><b>' . $field_details[0]['field_name'] . '</b></td>' . $col_title . '</tr>' . $rowline;
$data = $header_section . $line;
$pdf->writeHTMLCell($w = 0, $h = 0, $x = '', $y = '', " <table width=\"100%\" cellspacing=\"0\" cellpadding=\"5\" border=\"1\"> $header$data </table>", $border = 0, $ln = 1, $fill = 0, $reseth = true, $align = '', $autopadding = true);
$url = $base . '/' . APP_DEFAULT_UPLOAD_DIR . '/tmp/' . $savename;
$protection = $pdf->Output($url, 'F');
$attachment_file = $url;
$message = '<table style = "width: 100%;" cellspacing = "0" cellpadding = "0" bgcolor = "#fffbe8">
<tbody>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" align = "center">
<tbody>
<tr>
<td style = "font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #084283;" align = "center" valign = "middle" width = "590" height = "30">
</td>
</tr>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" bgcolor = "#ffffff"><!--Header table -->
<tbody>
<tr>
<td width = "10">
</td>
<td valign = "middle" width = "273" height = "101"><span style = "font-family: Arial, Helvetica, sans-serif; font-size: 20px; color: #084283;">' . APP_COMPANY . ' </span></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" bgcolor = "#ffffff">
<tbody>
<tr>
<td rowspan = "2" width = "10">
</td>
<td rowspan = "2" width = "10">
</td>
</tr>
<tr>
<td style = "font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #084283;" align = "right" valign = "top" bgcolor = "#c9eef3" width = "570" height = "20"></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" bgcolor = "#ffffff">
<tbody>
<tr>
<td><!--Main content starts here -->
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" align = "left">
<tbody>
<tr>
<td width = "10">
</td>
<td width = "570"><!--Middle column starts -->
<table style = "width: 570px;" cellspacing = "0" cellpadding = "0" bgcolor = "#f0fafc"><!--Top news item table -->
<tbody>
<tr>
<td width = "570">
<table cellspacing = "0" cellpadding = "10">
<tbody>
<tr>
<td>
<h1 style = "font-family: Arial, Helvetica, sans-serif; font-weight: normal; font-size: 21px; color: #fd52af; margin: 0 0 10px 0;">Greetings from ' . APP_MAIL_SERVER . ' . </h1>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #3d4448; margin: 0 0 10px 0;">
<br>' . $pre_alarm_notifications[0]['pre_mail_content'] . ' <br>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #3d4448; margin: 0 0 10px 0;">Please find the attached PDF.</p>
In case of any difficulties you may write to ' . $super_admin_details[0]['email'] . ' from your registered user id.</p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<h4 style = "font-family: Arial, Helvetica, sans-serif; font-weight: normal; font-size: 18px; color: #CCC; margin: 0 0 10px 0;">This is a system-generated message.</h4>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CCC; margin: 0 0 10px 0;">Information contained and transmitted by this email including any attachment is proprietary to dMACQ Software Pvt Ltd (dMACQ) and its registered licensees and is intended solely for the addressee/s, and may contain information that is privileged, confidential or exempt from disclosure under applicable law. Access to this e-mail and/or to the attachment by anyone else is unauthorized. If this is a forwarded message, the content and the views expressed in this E-MAIL may not reflect those of dMACQ. If you are not the intended recipient, an agent of the intended recipient or a person responsible for delivering the information to the named recipient, you are notified that any use, distribution, transmission, printing, copying or dissemination of this information in any way or in any manner is strictly prohibited.</p>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CCC; margin: 0 0 10px 0;">If you are not the intended recipient of this mail kindly delete from your system and inform the sender. </p>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CCC; margin: 0 0 10px 0;">There is no guarantee that the integrity of this communication has been maintained and nor is this communication free of viruses, interceptions or interference.</p>
<br />
<table cellspacing = "0" cellpadding = "0">
<tbody>
</tbody>
</table>
<br />
<table cellspacing = "0" cellpadding = "0">
<tbody>
</tbody>
</table>
</td>
<!--Content column ends -->
<td width = "10">
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>';
$ics_arr = array($savename);
$from = APP_MAIL_AUTH_USER;
$name_from = $login_details[0]['fname'] . ' ' . $login_details[0]['lname'];
/* $eto_arr = explode(',', $pre_alarm_notifications[0]['pre_mail_to']);
$eto_arr = array_map("trim", $eto_arr); */
$eto_arr = array();
if (!empty($pre_alarm_notifications[0]['pre_mail_to'])) {
$eto_arr = explode(',', $pre_alarm_notifications[0]['pre_mail_to']);
$eto_arr = array_map("trim", $eto_arr);
}
if (!empty($pre_alarm_notifications[0]['pre_email_roles'])) {
$role_id = explode(',', $pre_alarm_notifications[0]['pre_email_roles']);
$roles_email = array();
foreach ($role_id as $key => $role) {
$emailbyrole = $User->emailByRole($role);
foreach ($emailbyrole as $key => $email_add) {
$roles_email[] = $email_add['email'];
}
}
$eto_arr = array_merge($eto_arr, $roles_email);
}
if (!empty($pre_alarm_notifications[0]['pre_email_users'])) {
$user_roles = explode(',', $pre_alarm_notifications[0]['pre_email_users']);
$user_email = array();
foreach ($user_roles as $key => $role) {
$emailbyid = $User->getUser_ById($role);
foreach ($emailbyid as $key => $email_add) {
$user_email[] = $email_add['email'];
}
}
$eto_arr = array_merge($eto_arr, $user_email);
}
$eto_arr = array_unique($eto_arr);
$ecc_arr = ' ';
$cc = '';
$ccname = '';
$ebcc_arr = '';
$bcc = '';
$bccname = '';
$to = @join(',', $eto_arr);
$nameto = ' ';
$bucket = 'Index Master : ' . $imaster_details[0]['index_master'];
if (!empty($pre_array)) {
$send_mail = authgMailEX_CRON($from, $name_from, $eto_arr, $nameto, $ecc_arr, $ccname, $ebcc_arr, $bccname, $subject, $message, $ics_arr, $bucket);
}
}
} elseif ($notification_details[$i]['export'] == 'Export XLS') {
for ($pre = 0; $pre < count($pre_array); $pre++) {
// echo $pre_array[$pre]['doc_id'] . '-';
array_push($pre_notification_ids, $pre_array[$pre]['pre_notification_id']);
}
$ids = array_values(array_unique($pre_notification_ids));
for ($ids_noti = 0; $ids_noti < count($ids); $ids_noti++) {
$file_format = "vnd.ms-excel";
$report_info = " pre Date Alarm ";
$generated_by = 'System generated';
$separator = " ";
$line = '';
$field_details = $IndexMaster->getFieldDetailsByID($notification_details[$i]['imfield_id']);
$pre_alarm_notifications = $Index_Notification->getMasterPreNotificationByPreId($ids[$ids_noti]);
$savename = 'Pre Alarm Files ' . $field_details[0]['field_name'] . ' ' . $pre_alarm_notifications[0]['days_before'] . 'days ' . time() . '.xls';
$generated_by = 'System generated';
$app_title = APP_COMPANY;
$c_time = DATE_TIME;
$separator = " ";
$report_info = " Pre Date Alarm ";
$subject = 'Pre Date Alarm Files for ' . $pre_alarm_notifications[0]['days_before'] . ' days. Field : ' . $field_details[0]['field_name'] . ' ';
$line = '';
$header_section = '';
$header_section = 'Report Info : ' . $report_info . "
";
$header_section .= ' Generated By : ' . $generated_by . "
";
$header_section .= ' Date : ' . $c_time . "
";
$header_section .= ' Index Master : ' . $imaster_details[0]['index_master'] . "
";
$header_section .= ' Field : ' . $field_details[0]['field_name'] . "
";
$line .= 'Sr No.' . $separator;
$line .= $field_details[0]['field_name'] . $separator;
for ($ing = 0; $ing < count($index_masterfield_details); $ing++) {
if ($field_details[0]['field_name'] != $index_masterfield_details[$ing]['field_name']) {
$line .= $index_masterfield_details[$ing]['field_name'] . $separator;
}
}
$line .= "
";
if (empty($pre_array)) {
$line .= 'Records Unavailable!' . $separator;
} else {
for ($pre_n = 0; $pre_n < count($pre_array); $pre_n++) {
if ($pre_array[$pre_n]['pre_notification_id'] == $ids[$ids_noti]) {
// echo $pre_array[$pre_n]['doc_id'] . '-';
// echo $pre_array[$pre_n]['pre_notification_id'] . '<br>';
$val_details = $IndexMaster->getMasterValue_ByID($notification_details[$i]['index_master'], $pre_array[$pre_n]['master_val_id']);
$line .= ($pre_n + 1) . $separator;
$field_name = $field_details[0]['field_name_table'];
$value = $IndexMaster->getMasterField_name($notification_details[$i]['index_master'], $pre_array[$pre_n]['master_val_id'], $field_name);
$line .= $value[0][$field_name] . $separator;
for ($ing = 0; $ing < count($index_masterfield_details); $ing++) {
if ($field_details[0]['field_name'] != $index_masterfield_details[$ing]['field_name']) {
$field_name = $index_masterfield_details[$ing]['field_name_table'];
$value = $IndexMaster->getMasterField_name($notification_details[$i]['index_master'], $pre_array[$pre_n]['master_val_id'], $field_name);
if ($index_masterfield_details[$ing]['field_type'] == 'Select Menu') {
$IndexMaster->setFieldId($value[0][$field_name]);
$doc_type = $IndexMaster->getFieldExtend_ById($value[0][$field_name]);
$line .= $doc_type[0]['field_value'] . $separator;
} else {
$line .= $value[0][$field_name] . $separator;
}
}
}
//
$line .= "
";
}
}
}
$data = $header_section . $line;
$url = $base . '/' . APP_DEFAULT_UPLOAD_DIR . '/tmp/' . $savename;
file_put_contents($url, $data);
$attachment_file = $url;
$message = '<table style = "width: 100%;" cellspacing = "0" cellpadding = "0" bgcolor = "#fffbe8">
<tbody>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" align = "center">
<tbody>
<tr>
<td style = "font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #084283;" align = "center" valign = "middle" width = "590" height = "30">
</td>
</tr>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" bgcolor = "#ffffff"><!--Header table -->
<tbody>
<tr>
<td width = "10">
</td>
<td valign = "middle" width = "273" height = "101"><span style = "font-family: Arial, Helvetica, sans-serif; font-size: 20px; color: #084283;">' . APP_COMPANY . ' </span></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" bgcolor = "#ffffff">
<tbody>
<tr>
<td rowspan = "2" width = "10">
</td>
<td rowspan = "2" width = "10">
</td>
</tr>
<tr>
<td style = "font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #084283;" align = "right" valign = "top" bgcolor = "#c9eef3" width = "570" height = "20"></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" bgcolor = "#ffffff">
<tbody>
<tr>
<td><!--Main content starts here -->
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" align = "left">
<tbody>
<tr>
<td width = "10">
</td>
<td width = "570"><!--Middle column starts -->
<table style = "width: 570px;" cellspacing = "0" cellpadding = "0" bgcolor = "#f0fafc"><!--Top news item table -->
<tbody>
<tr>
<td width = "570">
<table cellspacing = "0" cellpadding = "10">
<tbody>
<tr>
<td>
<h1 style = "font-family: Arial, Helvetica, sans-serif; font-weight: normal; font-size: 21px; color: #fd52af; margin: 0 0 10px 0;">Greetings from ' . APP_MAIL_SERVER . ' . </h1>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #3d4448; margin: 0 0 10px 0;">
<br>' . $pre_alarm_notifications[0]['pre_mail_content'] . ' <br>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #3d4448; margin: 0 0 10px 0;">Please find the attached xls.</p>
In case of any difficulties you may write to ' . $super_admin_details[0]['email'] . ' from your registered user id.</p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<h4 style = "font-family: Arial, Helvetica, sans-serif; font-weight: normal; font-size: 18px; color: #CCC; margin: 0 0 10px 0;">This is a system-generated message.</h4>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CCC; margin: 0 0 10px 0;">Information contained and transmitted by this email including any attachment is proprietary to dMACQ Software Pvt Ltd (dMACQ) and its registered licensees and is intended solely for the addressee/s, and may contain information that is privileged, confidential or exempt from disclosure under applicable law. Access to this e-mail and/or to the attachment by anyone else is unauthorized. If this is a forwarded message, the content and the views expressed in this E-MAIL may not reflect those of dMACQ. If you are not the intended recipient, an agent of the intended recipient or a person responsible for delivering the information to the named recipient, you are notified that any use, distribution, transmission, printing, copying or dissemination of this information in any way or in any manner is strictly prohibited.</p>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CCC; margin: 0 0 10px 0;">If you are not the intended recipient of this mail kindly delete from your system and inform the sender. </p>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CCC; margin: 0 0 10px 0;">There is no guarantee that the integrity of this communication has been maintained and nor is this communication free of viruses, interceptions or interference.</p>
<br />
<table cellspacing = "0" cellpadding = "0">
<tbody>
</tbody>
</table>
<br />
<table cellspacing = "0" cellpadding = "0">
<tbody>
</tbody>
</table>
</td>
<!--Content column ends -->
<td width = "10">
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>';
$ics_arr = array($savename);
$from = APP_MAIL_AUTH_USER;
$name_from = $login_details[0]['fname'] . ' ' . $login_details[0]['lname'];
/* $eto_arr = explode(',', $pre_alarm_notifications[0]['pre_mail_to']);
$eto_arr = array_map("trim", $eto_arr); */
$eto_arr = array();
if (!empty($pre_alarm_notifications[0]['pre_mail_to'])) {
$eto_arr = explode(',', $pre_alarm_notifications[0]['pre_mail_to']);
$eto_arr = array_map("trim", $eto_arr);
}
if (!empty($pre_alarm_notifications[0]['pre_email_roles'])) {
$role_id = explode(',', $pre_alarm_notifications[0]['pre_email_roles']);
$roles_email = array();
foreach ($role_id as $key => $role) {
$emailbyrole = $User->emailByRole($role);
foreach ($emailbyrole as $key => $email_add) {
$roles_email[] = $email_add['email'];
}
}
$eto_arr = array_merge($eto_arr, $roles_email);
}
if (!empty($pre_alarm_notifications[0]['pre_email_users'])) {
$user_roles = explode(',', $pre_alarm_notifications[0]['pre_email_users']);
$user_email = array();
foreach ($user_roles as $key => $role) {
$emailbyid = $User->getUser_ById($role);
foreach ($emailbyid as $key => $email_add) {
$user_email[] = $email_add['email'];
}
}
$eto_arr = array_merge($eto_arr, $user_email);
}
$eto_arr = array_unique($eto_arr);
$ecc_arr = ' ';
$cc = '';
$ccname = '';
$ebcc_arr = '';
$bcc = '';
$bccname = '';
$to = @join(',', $eto_arr);
$nameto = ' ';
$bucket = 'Index Master : ' . $imaster_details[0]['index_master'];
if (!empty($pre_array)) {
$send_mail = authgMailEX_CRON($from, $name_from, $eto_arr, $nameto, $ecc_arr, $ccname, $ebcc_arr, $bccname, $subject, $message, $ics_arr, $bucket);
}
}
}
}
if (!empty($due_array)) {
if ($notification_details[$i]['export'] == 'Export PDF') {
$field_details = $IndexMaster->getFieldDetailsByID($notification_details[$i]['imfield_id']);
$savename = 'Due Alarm Files ' . $field_details[0]['field_name'] . ' ' . time() . '.pdf';
$tab_border = '1'; //Table Border
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('DMACQ');
$pdf->SetTitle($savename);
$pdf->SetSubject($mod_name);
$pdf->SetKeywords('Due Date');
$pdf->SetKeywords('date, due');
$pdf->SetHeaderData('', PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING);
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
$pdf->setLanguageArray($l);
$pdf->setFontSubsetting(true);
$pdf->SetFont('', '', 8, '', true);
if ((1 + count($index_masterfield_details)) < 7) {
$pdf->AddPage();
} else {
$pdf->AddPage('L');
}
$generated_by = 'System generated';
$app_title = APP_COMPANY;
$c_time = DATE_TIME;
$report_info = " Due Date Alarm ";
$subject = 'Due Date Alarm Files for field : ' . $field_details[0]['field_name'];
$line = '';
$col_title = '';
$col_title_count = 2;
for ($ing = 0; $ing < count($index_masterfield_details); $ing++) {
// echo $field_details[0]['field_name'].' !='. $index_masterfield_details[$ing]['field_name'];
if ($field_details[0]['field_name'] != $index_masterfield_details[$ing]['field_name']) {
$col_title_count++;
$col_title .= '<td align="center"><b>' . $index_masterfield_details[$ing]['field_name'] . '</b></td>';
}
}
$rowline = '';
$count_due = 1;
if (!empty($due_array)) {
for ($due = 0; $due < count($due_array); $due++) {
$val_details = $IndexMaster->getMasterValue_ByID($notification_details[$i]['index_master'], $due_array[$due]);
$rowline .= '<tr>';
$rowline .= '<td>' . $count_due++ . '</td>';
$field_name = $field_details[0]['field_name_table'];
$value = $IndexMaster->getMasterField_name($notification_details[$i]['index_master'], $due_array[$due], $field_name);
$rowline .= '<td>' . $value[0][$field_name] . '</td>';
for ($ing = 0; $ing < count($index_masterfield_details); $ing++) {
if ($field_details[0]['field_name'] != $index_masterfield_details[$ing]['field_name']) {
$field_name = $index_masterfield_details[$ing]['field_name_table'];
$value = $IndexMaster->getMasterField_name($notification_details[$i]['index_master'], $due_array[$due], $field_name);
if ($index_masterfield_details[$ing]['field_type'] == 'Select Menu') {
$IndexMaster->setFieldId($value[0][$field_name]);
$doc_type = $IndexMaster->getFieldExtend_ById($value[0][$field_name]);
$rowline .= '<td>' . $doc_type[0]['field_value'] . '</td>';
} else {
$rowline .= '<td>' . $value[0][$field_name] . '</td>';
}
}
}
//
$rowline .= '</tr>';
}
} else {
$rowline .= '<tr><td colspan = "' . $col_title_count . '">No Records For ' . $field_details[0]['field_name'] . '</td></tr>';
}
$header_section = '<tr><td colspan = "' . $col_title_count . '"> Report Info : ' . $report_info . '</td></tr>';
$header_section .= '<tr><td colspan = "' . $col_title_count . '"> Generated By : ' . $generated_by . '</td></tr>';
$header_section .= '<tr><td colspan = "' . $col_title_count . '"> Date : ' . $c_time . '</td></tr>';
$header_section .= '<tr><td colspan = "' . $col_title_count . '"> Index Master : ' . $imaster_details[0]['index_master'] . '</td></tr>';
$header_section .= '<tr><td colspan = "' . $col_title_count . '"> Field : ' . $field_details[0]['field_name'] . '</td></tr>';
$line .= '<tr>
<td align = "center"><b>Sr No.</b></td>
<td align="center"><b>' . $field_details[0]['field_name'] . '</b></td>' . $col_title . '</tr>' . $rowline;
$data = $header_section . $line;
$pdf->writeHTMLCell($w = 0, $h = 0, $x = '', $y = '', " <table width=\"100%\" cellspacing=\"0\" cellpadding=\"5\" border=\"1\"> $header$data </table>", $border = 0, $ln = 1, $fill = 0, $reseth = true, $align = '', $autopadding = true);
$url = $base . '/' . APP_DEFAULT_UPLOAD_DIR . '/tmp/' . $savename;
$protection = $pdf->Output($url, 'F');
$attachment_file = $url;
$message = '<table style = "width: 100%;" cellspacing = "0" cellpadding = "0" bgcolor = "#fffbe8">
<tbody>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" align = "center">
<tbody>
<tr>
<td style = "font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #084283;" align = "center" valign = "middle" width = "590" height = "30">
</td>
</tr>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" bgcolor = "#ffffff"><!--Header table -->
<tbody>
<tr>
<td width = "10">
</td>
<td valign = "middle" width = "273" height = "101"><span style = "font-family: Arial, Helvetica, sans-serif; font-size: 20px; color: #084283;">' . APP_COMPANY . ' </span></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" bgcolor = "#ffffff">
<tbody>
<tr>
<td rowspan = "2" width = "10">
</td>
<td rowspan = "2" width = "10">
</td>
</tr>
<tr>
<td style = "font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #084283;" align = "right" valign = "top" bgcolor = "#c9eef3" width = "570" height = "20"></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" bgcolor = "#ffffff">
<tbody>
<tr>
<td><!--Main content starts here -->
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" align = "left">
<tbody>
<tr>
<td width = "10">
</td>
<td width = "570"><!--Middle column starts -->
<table style = "width: 570px;" cellspacing = "0" cellpadding = "0" bgcolor = "#f0fafc"><!--Top news item table -->
<tbody>
<tr>
<td width = "570">
<table cellspacing = "0" cellpadding = "10">
<tbody>
<tr>
<td>
<h1 style = "font-family: Arial, Helvetica, sans-serif; font-weight: normal; font-size: 21px; color: #fd52af; margin: 0 0 10px 0;">Greetings from ' . APP_MAIL_SERVER . ' . </h1>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #3d4448; margin: 0 0 10px 0;">
<br>' . $notification_details[$i]['due_mail_content'] . ' <br>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #3d4448; margin: 0 0 10px 0;">Please find the attached PDF.</p>
In case of any difficulties you may write to ' . $super_admin_details[0]['email'] . ' from your registered user id.</p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<h4 style = "font-family: Arial, Helvetica, sans-serif; font-weight: normal; font-size: 18px; color: #CCC; margin: 0 0 10px 0;">This is a system-generated message.</h4>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CCC; margin: 0 0 10px 0;">Information contained and transmitted by this email including any attachment is proprietary to dMACQ Software Pvt Ltd (dMACQ) and its registered licensees and is intended solely for the addressee/s, and may contain information that is privileged, confidential or exempt from disclosure under applicable law. Access to this e-mail and/or to the attachment by anyone else is unauthorized. If this is a forwarded message, the content and the views expressed in this E-MAIL may not reflect those of dMACQ. If you are not the intended recipient, an agent of the intended recipient or a person responsible for delivering the information to the named recipient, you are notified that any use, distribution, transmission, printing, copying or dissemination of this information in any way or in any manner is strictly prohibited.</p>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CCC; margin: 0 0 10px 0;">If you are not the intended recipient of this mail kindly delete from your system and inform the sender. </p>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CCC; margin: 0 0 10px 0;">There is no guarantee that the integrity of this communication has been maintained and nor is this communication free of viruses, interceptions or interference.</p>
<br />
<table cellspacing = "0" cellpadding = "0">
<tbody>
</tbody>
</table>
<br />
<table cellspacing = "0" cellpadding = "0">
<tbody>
</tbody>
</table>
</td>
<!--Content column ends -->
<td width = "10">
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>';
$ics_arr = array($savename);
$from = APP_MAIL_AUTH_USER;
$name_from = $login_details[0]['fname'] . ' ' . $login_details[0]['lname'];
$eto_arr = array();
if (!empty($notification_details[$i]['due_mail_to'])) {
$eto_arr = explode(',', $notification_details[$i]['due_mail_to']);
$eto_arr = array_map("trim", $eto_arr);
}
if (!empty($notification_details[$i]['due_email_roles'])) {
$role_id = explode(',', $notification_details[$i]['due_email_roles']);
$roles_email = array();
foreach ($role_id as $key => $role) {
$emailbyrole = $User->emailByRole($role);
foreach ($emailbyrole as $key => $email_add) {
$roles_email[] = $email_add['email'];
}
}
$eto_arr = array_merge($eto_arr, $roles_email);
}
if (!empty($notification_details[$i]['due_email_users'])) {
$user_roles = explode(',', $notification_details[$i]['due_email_users']);
$user_email = array();
foreach ($user_roles as $key => $role) {
$emailbyid = $User->getUser_ById($role);
foreach ($emailbyid as $key => $email_add) {
$user_email[] = $email_add['email'];
}
}
$eto_arr = array_merge($eto_arr, $user_email);
}
$eto_arr = array_unique($eto_arr);
$ecc_arr = ' ';
$cc = '';
$ccname = '';
$ebcc_arr = '';
$bcc = '';
$bccname = '';
$to = @join(',', $eto_arr);
$nameto = ' ';
$bucket = 'Index Master : ' . $imaster_details[0]['index_master'];
/* * ********************************************** */
if (!empty($due_array)) {
$send_mail = authgMailEX_CRON($from, $name_from, $eto_arr, $nameto, $ecc_arr, $ccname, $ebcc_arr, $bccname, $subject, $message, $ics_arr, $bucket);
}
} elseif ($notification_details[$i]['export'] == 'Export XLS') {
$field_details = $IndexMaster->getFieldDetailsByID($notification_details[$i]['imfield_id']);
$savename = 'Due Alarm Files ' . $field_details[0]['field_name'] . ' ' . time() . '.xls';
$generated_by = 'System generated';
$app_title = APP_COMPANY;
$c_time = DATE_TIME;
$separator = " ";
$report_info = " Due Date Alarm ";
$subject = 'Due Date Alarm Files for field : ' . $field_details[0]['field_name'];
$line = '';
$header_section = ' Report Info : ' . $report_info . "
";
$header_section .= 'Generated By : ' . $generated_by . "
";
$header_section .= 'Date : ' . $c_time . "
";
$header_section .= 'Index Master : ' . $imaster_details[0]['index_master'] . "
";
$header_section .= 'Field : ' . $field_details[0]['field_name'] . "
";
$line .= 'Sr No.' . $separator;
$line .= $field_details[0]['field_name'] . $separator;
for ($ing = 0; $ing < count($index_masterfield_details); $ing++) {
if ($field_details[0]['field_name'] != $index_masterfield_details[$ing]['field_name']) {
$line .= $index_masterfield_details[$ing]['field_name'] . $separator;
}
}
$line .= "
";
if (!empty($due_array)) {
for ($due = 0; $due < count($due_array); $due++) {
$val_details = $IndexMaster->getMasterValue_ByID($notification_details[$i]['index_master'], $due_array[$due]);
// print_r($cat_file_details);
$line .= ($due + 1) . $separator;
$field_name = $field_details[0]['field_name_table'];
$value = $IndexMaster->getMasterField_name($notification_details[$i]['index_master'], $due_array[$due], $field_name);
$line .= $value[0][$field_name] . $separator;
for ($ing = 0; $ing < count($index_masterfield_details); $ing++) {
if ($field_details[0]['field_name'] != $index_masterfield_details[$ing]['field_name']) {
$field_name = $index_masterfield_details[$ing]['field_name_table'];
$value = $IndexMaster->getMasterField_name($notification_details[$i]['index_master'], $due_array[$due], $field_name);
if ($index_masterfield_details[$ing]['field_type'] == 'Select Menu') {
$IndexMaster->setFieldId($value[0][$field_name]);
$doc_type = $IndexMaster->getFieldExtend_ById($value[0][$field_name]);
$line .= $doc_type[0]['field_value'] . $separator;
} else {
$line .= $value[0][$field_name] . $separator;
}
}
}
//
$line .= "
";
}
} else {
$line .= 'No Records For ' . $field_details[0]['field_name'];
}
$data = $header_section . $line;
$url = $base . '/' . APP_DEFAULT_UPLOAD_DIR . '/tmp/' . $savename;
file_put_contents($url, $data);
$attachment_file = $url;
$message = '<table style = "width: 100%;" cellspacing = "0" cellpadding = "0" bgcolor = "#fffbe8">
<tbody>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" align = "center">
<tbody>
<tr>
<td style = "font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #084283;" align = "center" valign = "middle" width = "590" height = "30">
</td>
</tr>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" bgcolor = "#ffffff"><!--Header table -->
<tbody>
<tr>
<td width = "10">
</td>
<td valign = "middle" width = "273" height = "101"><span style = "font-family: Arial, Helvetica, sans-serif; font-size: 20px; color: #084283;">' . APP_COMPANY . ' </span></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" bgcolor = "#ffffff">
<tbody>
<tr>
<td rowspan = "2" width = "10">
</td>
<td rowspan = "2" width = "10">
</td>
</tr>
<tr>
<td style = "font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #084283;" align = "right" valign = "top" bgcolor = "#c9eef3" width = "570" height = "20"></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" bgcolor = "#ffffff">
<tbody>
<tr>
<td><!--Main content starts here -->
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" align = "left">
<tbody>
<tr>
<td width = "10">
</td>
<td width = "570"><!--Middle column starts -->
<table style = "width: 570px;" cellspacing = "0" cellpadding = "0" bgcolor = "#f0fafc"><!--Top news item table -->
<tbody>
<tr>
<td width = "570">
<table cellspacing = "0" cellpadding = "10">
<tbody>
<tr>
<td>
<h1 style = "font-family: Arial, Helvetica, sans-serif; font-weight: normal; font-size: 21px; color: #fd52af; margin: 0 0 10px 0;">Greetings from ' . APP_MAIL_SERVER . ' . </h1>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #3d4448; margin: 0 0 10px 0;">
<br>' . $notification_details[$i]['due_mail_content'] . ' <br>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #3d4448; margin: 0 0 10px 0;">Please find the attached xls.</p>
In case of any difficulties you may write to ' . $super_admin_details[0]['email'] . ' from your registered user id.</p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<h4 style = "font-family: Arial, Helvetica, sans-serif; font-weight: normal; font-size: 18px; color: #CCC; margin: 0 0 10px 0;">This is a system-generated message.</h4>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CCC; margin: 0 0 10px 0;">Information contained and transmitted by this email including any attachment is proprietary to dMACQ Software Pvt Ltd (dMACQ) and its registered licensees and is intended solely for the addressee/s, and may contain information that is privileged, confidential or exempt from disclosure under applicable law. Access to this e-mail and/or to the attachment by anyone else is unauthorized. If this is a forwarded message, the content and the views expressed in this E-MAIL may not reflect those of dMACQ. If you are not the intended recipient, an agent of the intended recipient or a person responsible for delivering the information to the named recipient, you are notified that any use, distribution, transmission, printing, copying or dissemination of this information in any way or in any manner is strictly prohibited.</p>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CCC; margin: 0 0 10px 0;">If you are not the intended recipient of this mail kindly delete from your system and inform the sender. </p>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CCC; margin: 0 0 10px 0;">There is no guarantee that the integrity of this communication has been maintained and nor is this communication free of viruses, interceptions or interference.</p>
<br />
<table cellspacing = "0" cellpadding = "0">
<tbody>
</tbody>
</table>
<br />
<table cellspacing = "0" cellpadding = "0">
<tbody>
</tbody>
</table>
</td>
<!--Content column ends -->
<td width = "10">
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>';
$ics_arr = array($savename);
$from = APP_MAIL_AUTH_USER;
$name_from = $login_details[0]['fname'] . ' ' . $login_details[0]['lname'];
/* $eto_arr = explode(',', $notification_details[$i]['due_mail_to']);
$eto_arr = array_map("trim", $eto_arr); */
$eto_arr = array();
if (!empty($notification_details[$i]['due_mail_to'])) {
$eto_arr = explode(',', $notification_details[$i]['due_mail_to']);
$eto_arr = array_map("trim", $eto_arr);
}
if (!empty($notification_details[$i]['due_email_roles'])) {
$role_id = explode(',', $notification_details[$i]['due_email_roles']);
$roles_email = array();
foreach ($role_id as $key => $role) {
$emailbyrole = $User->emailByRole($role);
foreach ($emailbyrole as $key => $email_add) {
$roles_email[] = $email_add['email'];
}
}
$eto_arr = array_merge($eto_arr, $roles_email);
}
if (!empty($notification_details[$i]['due_email_users'])) {
$user_roles = explode(',', $notification_details[$i]['due_email_users']);
$user_email = array();
foreach ($user_roles as $key => $role) {
$emailbyid = $User->getUser_ById($role);
foreach ($emailbyid as $key => $email_add) {
$user_email[] = $email_add['email'];
}
}
$eto_arr = array_merge($eto_arr, $user_email);
}
$eto_arr = array_unique($eto_arr);
$ecc_arr = ' ';
$cc = '';
$ccname = '';
$ebcc_arr = '';
$bcc = '';
$bccname = '';
$to = @join(',', $eto_arr);
$nameto = ' ';
$bucket = 'Index Master : ' . $imaster_details[0]['index_master'];
/* * ********************************************** */
if (!empty($due_array)) {
$send_mail = authgMailEX_CRON($from, $name_from, $eto_arr, $nameto, $ecc_arr, $ccname, $ebcc_arr, $bccname, $subject, $message, $ics_arr, $bucket);
}
}
}
if (!($notification_details[$i]['remaining_interval_days'] < $notification_details[$i]['interval_days'])) {
if (!empty($post_array)) {
if ($notification_details[$i]['export'] == 'Export PDF') {
$total_count = $Index_Notification->getActivePostNotification();
if (APP_DB == 'MYSQL') {
$limit_sq = 'LIMIT 1';
} else {
$limit_sq = 'TOP 1';
}
$post_alarm_notification = $Index_Notification->getActivePostNotification(0, $limit_sq);
if (count($total_count) > 1) {
if (!empty($post_alarm_notification)) {
if ($post_alarm_notification[0]['updated_interval_days'] < $post_alarm_notification[0]['interval_days']) {
$updated_interval_day = ++$post_alarm_notification[0]['updated_interval_days'];
if ($updated_interval_day != $post_alarm_notification[0]['interval_days']) {
//$Index_Notification->updatePostAlarmField(array('updated_interval_days' => $updated_interval_day), $post_alarm_notification[0]['id']);
} else {
// $Index_Notification->updatePostAlarmField(array('updated_interval_days' => 0, 'post_status' => 0), $post_alarm_notification[0]['id']);
}
}
}
}
$field_details = $IndexMaster->getFieldDetailsByID($notification_details[$i]['imfield_id']);
$savename = 'Post Alarm Files ' . $field_details[0]['field_name'] . ' ' . time() . '.pdf';
$tab_border = '1'; //Table Border
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('DMACQ');
$pdf->SetTitle($savename);
$pdf->SetSubject($mod_name);
$pdf->SetKeywords('Post Date');
$pdf->SetKeywords('date, post');
$pdf->SetHeaderData('', PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING);
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
$pdf->setLanguageArray($l);
$pdf->setFontSubsetting(true);
$pdf->SetFont('', '', 8, '', true);
if ((1 + count($index_masterfield_details)) < 7) {
$pdf->AddPage();
} else {
$pdf->AddPage('L');
}
$generated_by = 'System generated';
$app_title = APP_COMPANY;
$c_time = DATE_TIME;
$report_info = " Post Date Alarm ";
$subject = 'Post Date Alarm Files for field : ' . $field_details[0]['field_name'];
$line = '';
$col_title = '';
$col_title_count = 2;
for ($ing = 0; $ing < count($index_masterfield_details); $ing++) {
if ($field_details[0]['field_name'] != $index_masterfield_details[$ing]['field_name']) {
$col_title_count++;
$col_title .= '<td align="center"><b>' . $index_masterfield_details[$ing]['field_name'] . '</b></td>';
//echo $index_groupfield_details[$ing]['field_name'];
}
}
$rowline = '';
$count_post = 1;
if (!empty($post_array)) {
for ($post = 0; $post < count($post_array); $post++) {
$val_details = $IndexMaster->getMasterValue_ByID($notification_details[$i]['index_master'], $post_array[$post]);
// print_r($cat_file_details);
$rowline .= '<tr>';
$rowline .= '<td>' . $count_post++ . '</td>';
$field_name = $field_details[0]['field_name_table'];
$value = $IndexMaster->getMasterField_name($notification_details[$i]['index_master'], $post_array[$post], $field_name);
$rowline .= '<td>' . $value[0][$field_name] . '</td>';
for ($ing = 0; $ing < count($index_masterfield_details); $ing++) {
if ($field_details[0]['field_name'] != $index_masterfield_details[$ing]['field_name']) {
$field_name = $index_masterfield_details[$ing]['field_name_table'];
$value = $IndexMaster->getMasterField_name($notification_details[$i]['index_master'], $post_array[$post], $field_name);
if ($index_masterfield_details[$ing]['field_type'] == 'Select Menu') {
$IndexMaster->setFieldId($value[0][$field_name]);
$doc_type = $IndexMaster->getFieldExtend_ById($value[0][$field_name]);
$rowline .= '<td>' . $doc_type[0]['field_value'] . '</td>';
} else {
$rowline .= '<td>' . $value[0][$field_name] . '</td>';
}
}
}
$rowline .= '</tr>';
}
} else {
$rowline .= '<tr><td colspan = "' . $col_title_count . '">No Records For ' . $field_details[0]['field_name'] . '</td></tr>';
}
$header_section = '<tr><td colspan = "' . $col_title_count . '"> Report Info : ' . $report_info . '</td></tr>';
$header_section .= '<tr><td colspan = "' . $col_title_count . '"> Generated By : ' . $generated_by . '</td></tr>';
$header_section .= '<tr><td colspan = "' . $col_title_count . '"> Date : ' . $c_time . '</td></tr>';
$header_section .= '<tr><td colspan = "' . $col_title_count . '"> Index Master : ' . $imaster_details[0]['index_master'] . '</td></tr>';
$header_section .= '<tr><td colspan = "' . $col_title_count . '"> Field : ' . $field_details[0]['field_name'] . '</td></tr>';
$line .= '<tr>
<td align = "center"><b>Sr No.</b></td>
<td align="center"><b>' . $field_details[0]['field_name'] . '</b></td>' . $col_title . '</tr>' . $rowline;
$data = $header_section . $line;
$pdf->writeHTMLCell($w = 0, $h = 0, $x = '', $y = '', " <table width=\"100%\" cellspacing=\"0\" cellpadding=\"5\" border=\"1\"> $header$data </table>", $border = 0, $ln = 1, $fill = 0, $reseth = true, $align = '', $autopadding = true);
$url = $base . '/' . APP_DEFAULT_UPLOAD_DIR . '/tmp/' . $savename;
$protection = $pdf->Output($url, 'F');
$attachment_file = $url;
$message = '<table style = "width: 100%;" cellspacing = "0" cellpadding = "0" bgcolor = "#fffbe8">
<tbody>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" align = "center">
<tbody>
<tr>
<td style = "font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #084283;" align = "center" valign = "middle" width = "590" height = "30">
</td>
</tr>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" bgcolor = "#ffffff"><!--Header table -->
<tbody>
<tr>
<td width = "10">
</td>
<td valign = "middle" width = "273" height = "101"><span style = "font-family: Arial, Helvetica, sans-serif; font-size: 20px; color: #084283;">' . APP_COMPANY . ' </span></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" bgcolor = "#ffffff">
<tbody>
<tr>
<td rowspan = "2" width = "10">
</td>
<td rowspan = "2" width = "10">
</td>
</tr>
<tr>
<td style = "font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #084283;" align = "right" valign = "top" bgcolor = "#c9eef3" width = "570" height = "20"></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" bgcolor = "#ffffff">
<tbody>
<tr>
<td><!--Main content starts here -->
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" align = "left">
<tbody>
<tr>
<td width = "10">
</td>
<td width = "570"><!--Middle column starts -->
<table style = "width: 570px;" cellspacing = "0" cellpadding = "0" bgcolor = "#f0fafc"><!--Top news item table -->
<tbody>
<tr>
<td width = "570">
<table cellspacing = "0" cellpadding = "10">
<tbody>
<tr>
<td>
<h1 style = "font-family: Arial, Helvetica, sans-serif; font-weight: normal; font-size: 21px; color: #fd52af; margin: 0 0 10px 0;">Greetings from ' . APP_MAIL_SERVER . ' . </h1>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #3d4448; margin: 0 0 10px 0;">
<br>' . $notification_details[$i]['post_mail_content'] . ' <br>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #3d4448; margin: 0 0 10px 0;">Please find the attached PDF.</p>
In case of any difficulties you may write to ' . $super_admin_details[0]['email'] . ' from your registered user id.</p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<h4 style = "font-family: Arial, Helvetica, sans-serif; font-weight: normal; font-size: 18px; color: #CCC; margin: 0 0 10px 0;">This is a system-generated message.</h4>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CCC; margin: 0 0 10px 0;">Information contained and transmitted by this email including any attachment is proprietary to dMACQ Software Pvt Ltd (dMACQ) and its registered licensees and is intended solely for the addressee/s, and may contain information that is privileged, confidential or exempt from disclosure under applicable law. Access to this e-mail and/or to the attachment by anyone else is unauthorized. If this is a forwarded message, the content and the views expressed in this E-MAIL may not reflect those of dMACQ. If you are not the intended recipient, an agent of the intended recipient or a person responsible for delivering the information to the named recipient, you are notified that any use, distribution, transmission, printing, copying or dissemination of this information in any way or in any manner is strictly prohibited.</p>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CCC; margin: 0 0 10px 0;">If you are not the intended recipient of this mail kindly delete from your system and inform the sender. </p>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CCC; margin: 0 0 10px 0;">There is no guarantee that the integrity of this communication has been maintained and nor is this communication free of viruses, interceptions or interference.</p>
<br />
<table cellspacing = "0" cellpadding = "0">
<tbody>
</tbody>
</table>
<br />
<table cellspacing = "0" cellpadding = "0">
<tbody>
</tbody>
</table>
</td>
<!--Content column ends -->
<td width = "10">
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>';
$ics_arr = array($savename);
$from = APP_MAIL_AUTH_USER;
$name_from = $login_details[0]['fname'] . ' ' . $login_details[0]['lname'];
$eto_arr = array();
if (!empty($post_alarm_notification[0]['post_mail_to'])) {
$eto_arr = explode(',', $post_alarm_notification[0]['post_mail_to']);
$eto_arr = array_map("trim", $eto_arr);
}
if (!empty($post_alarm_notification[0]['post_email_roles'])) {
$role_id = explode(',', $post_alarm_notification[0]['post_email_roles']);
$roles_email = array();
foreach ($role_id as $key => $role) {
$emailbyrole = $User->emailByRole($role);
foreach ($emailbyrole as $key => $email_add) {
$roles_email[] = $email_add['email'];
}
}
$eto_arr = array_merge($eto_arr, $roles_email);
}
if (!empty($post_alarm_notification[0]['post_email_users'])) {
$user_roles = explode(',', $post_alarm_notification[0]['post_email_users']);
$user_email = array();
foreach ($user_roles as $key => $role) {
$emailbyid = $User->getUser_ById($role, APP_ENCRYPTION_SALT);
foreach ($emailbyid as $key => $email_add) {
$user_email[] = $email_add['email'];
}
}
$eto_arr = array_merge($eto_arr, $user_email);
}
$eto_arr = array_unique($eto_arr);
$ecc_arr = ' ';
$cc = '';
$ccname = '';
$ebcc_arr = '';
$bcc = '';
$bccname = '';
$to = @join(',', $eto_arr);
$nameto = ' ';
$bucket = 'Index Master : ' . $imaster_details[0]['index_master'];
if (!empty($post_array)) {
$send_mail = authgMailEX_CRON($from, $name_from, $eto_arr, $nameto, $ecc_arr, $ccname, $ebcc_arr, $bccname, $subject, $message, $ics_arr, $bucket);
}
} elseif ($notification_details[$i]['export'] == 'Export XLS') {
$total_count = $Index_Notification->getActivePostNotification();
if (APP_DB == 'MYSQL') {
$limit_sq = 'LIMIT 1';
} else {
$limit_sq = 'TOP 1';
}
$post_alarm_notification = $Index_Notification->getActivePostNotification(0, $limit_sq);
if (count($total_count) > 1) {
if (!empty($post_alarm_notification)) {
if ($post_alarm_notification[0]['updated_interval_days'] < $post_alarm_notification[0]['interval_days']) {
$updated_interval_day = ++$post_alarm_notification[0]['updated_interval_days'];
if ($updated_interval_day != $post_alarm_notification[0]['interval_days']) {
// $Index_Notification->updatePostAlarmField(array('updated_interval_days' => $updated_interval_day), $post_alarm_notification[0]['id']);
} else {
// $Index_Notification->updatePostAlarmField(array('updated_interval_days' => 0, 'post_status' => 0), $post_alarm_notification[0]['id']);
}
}
}
}
$field_details = $IndexMaster->getFieldDetailsByID($notification_details[$i]['imfield_id']);
$savename = 'Post Alarm Files ' . $field_details[0]['field_name'] . ' ' . time() . '.xls';
$separator = " ";
$generated_by = 'System generated';
$app_title = APP_COMPANY;
$c_time = DATE_TIME;
$report_info = " Post Date Alarm ";
$subject = 'Post Date Alarm Files for field : ' . $field_details[0]['field_name'];
$line = '';
$header_section = 'Report Info : ' . $report_info . "
";
$header_section .= 'Generated By : ' . $generated_by . "
";
$header_section .= 'Date : ' . $c_time . "
";
$header_section .= 'Index Master : ' . $imaster_details[0]['index_master'] . "
";
$header_section .= 'Field : ' . $field_details[0]['field_name'] . "
";
$line .= 'Sr No.' . $separator;
$line .= $field_details[0]['field_name'] . $separator;
for ($ing = 0; $ing < count($index_masterfield_details); $ing++) {
if ($field_details[0]['field_name'] != $index_masterfield_details[$ing]['field_name']) {
$line .= $index_masterfield_details[$ing]['field_name'] . $separator;
//echo $index_groupfield_details[$ing]['field_name'];
}
}
$line .= "
";
if (!empty($post_array)) {
for ($post = 0; $post < count($post_array); $post++) {
$val_details = $IndexMaster->getMasterValue_ByID($notification_details[$i]['index_master'], $post_array[$post]);
$line .= ($post + 1) . $separator;
$field_name = $field_details[0]['field_name_table'];
$value = $IndexMaster->getMasterField_name($notification_details[$i]['index_master'], $post_array[$post], $field_name);
$line .= $value[0][$field_name] . $separator;
for ($ing = 0; $ing < count($index_masterfield_details); $ing++) {
if ($field_details[0]['field_name'] != $index_masterfield_details[$ing]['field_name']) {
$field_name = $index_masterfield_details[$ing]['field_name_table'];
$value = $IndexMaster->getMasterField_name($notification_details[$i]['index_master'], $post_array[$post], $field_name);
if ($index_masterfield_details[$ing]['field_type'] == 'Select Menu') {
$IndexMaster->setFieldId($value[0][$field_name]);
$doc_type = $IndexMaster->getFieldExtend_ById($value[0][$field_name]);
$line .= $doc_type[0]['field_value'] . $separator;
} else {
$line .= $value[0][$field_name] . $separator;
}
}
}
$line .= "
";
}
} else {
$line .= 'No Records For ' . $field_details[0]['field_name'];
}
$data = $header_section . $line;
$url = $base . '/' . APP_DEFAULT_UPLOAD_DIR . '/tmp/' . $savename;
file_put_contents($url, $data);
$attachment_file = $url;
//file_put_contents($url, $protection);
$message = '<table style = "width: 100%;" cellspacing = "0" cellpadding = "0" bgcolor = "#fffbe8">
<tbody>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" align = "center">
<tbody>
<tr>
<td style = "font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #084283;" align = "center" valign = "middle" width = "590" height = "30">
</td>
</tr>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" bgcolor = "#ffffff"><!--Header table -->
<tbody>
<tr>
<td width = "10">
</td>
<td valign = "middle" width = "273" height = "101"><span style = "font-family: Arial, Helvetica, sans-serif; font-size: 20px; color: #084283;">' . APP_COMPANY . ' </span></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" bgcolor = "#ffffff">
<tbody>
<tr>
<td rowspan = "2" width = "10">
</td>
<td rowspan = "2" width = "10">
</td>
</tr>
<tr>
<td style = "font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #084283;" align = "right" valign = "top" bgcolor = "#c9eef3" width = "570" height = "20"></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" bgcolor = "#ffffff">
<tbody>
<tr>
<td><!--Main content starts here -->
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" align = "left">
<tbody>
<tr>
<td width = "10">
</td>
<td width = "570"><!--Middle column starts -->
<table style = "width: 570px;" cellspacing = "0" cellpadding = "0" bgcolor = "#f0fafc"><!--Top news item table -->
<tbody>
<tr>
<td width = "570">
<table cellspacing = "0" cellpadding = "10">
<tbody>
<tr>
<td>
<h1 style = "font-family: Arial, Helvetica, sans-serif; font-weight: normal; font-size: 21px; color: #fd52af; margin: 0 0 10px 0;">Greetings from ' . APP_MAIL_SERVER . ' . </h1>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #3d4448; margin: 0 0 10px 0;">
<br>' . $post_alarm_notification[0]['post_mail_content'] . ' <br>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #3d4448; margin: 0 0 10px 0;">Please find the attached xls.</p>
In case of any difficulties you may write to ' . $super_admin_details[0]['email'] . ' from your registered user id.</p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<h4 style = "font-family: Arial, Helvetica, sans-serif; font-weight: normal; font-size: 18px; color: #CCC; margin: 0 0 10px 0;">This is a system-generated message.</h4>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CCC; margin: 0 0 10px 0;">Information contained and transmitted by this email including any attachment is proprietary to dMACQ Software Pvt Ltd (dMACQ) and its registered licensees and is intended solely for the addressee/s, and may contain information that is privileged, confidential or exempt from disclosure under applicable law. Access to this e-mail and/or to the attachment by anyone else is unauthorized. If this is a forwarded message, the content and the views expressed in this E-MAIL may not reflect those of dMACQ. If you are not the intended recipient, an agent of the intended recipient or a person responsible for delivering the information to the named recipient, you are notified that any use, distribution, transmission, printing, copying or dissemination of this information in any way or in any manner is strictly prohibited.</p>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CCC; margin: 0 0 10px 0;">If you are not the intended recipient of this mail kindly delete from your system and inform the sender. </p>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CCC; margin: 0 0 10px 0;">There is no guarantee that the integrity of this communication has been maintained and nor is this communication free of viruses, interceptions or interference.</p>
<br />
<table cellspacing = "0" cellpadding = "0">
<tbody>
</tbody>
</table>
<br />
<table cellspacing = "0" cellpadding = "0">
<tbody>
</tbody>
</table>
</td>
<!--Content column ends -->
<td width = "10">
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>';
$ics_arr = array($savename);
$from = APP_MAIL_AUTH_USER;
$name_from = $login_details[0]['fname'] . ' ' . $login_details[0]['lname'];
/* $eto_arr = explode(',', $notification_details[$i]['post_mail_to']);
$eto_arr = array_map("trim", $eto_arr); */
$eto_arr = array();
if (!empty($post_alarm_notification[0]['post_mail_to'])) {
$eto_arr = explode(',', $post_alarm_notification[0]['post_mail_to']);
$eto_arr = array_map("trim", $eto_arr);
}
if (!empty($post_alarm_notification[0]['post_email_roles'])) {
$role_id = explode(',', $post_alarm_notification[0]['post_email_roles']);
$roles_email = array();
foreach ($role_id as $key => $role) {
$emailbyrole = $User->emailByRole($role);
foreach ($emailbyrole as $key => $email_add) {
$roles_email[] = $email_add['email'];
}
}
$eto_arr = array_merge($eto_arr, $roles_email);
}
if (!empty($post_alarm_notification[0]['post_email_users'])) {
$user_roles = explode(',', $post_alarm_notification[0]['post_email_users']);
$user_email = array();
foreach ($user_roles as $key => $role) {
$emailbyid = $User->getUser_ById($role, APP_ENCRYPTION_SALT);
foreach ($emailbyid as $key => $email_add) {
$user_email[] = $email_add['email'];
}
}
$eto_arr = array_merge($eto_arr, $user_email);
}
$eto_arr = array_unique($eto_arr);
$ecc_arr = ' ';
$cc = '';
$ccname = '';
$ebcc_arr = '';
$bcc = '';
$bccname = '';
$to = @join(',', $eto_arr);
$nameto = ' ';
$bucket = 'Index Master : ' . $imaster_details[0]['index_master'];
/* * ********************************************** */
if (!empty($post_array)) {
$send_mail = authgMailEX_CRON($from, $name_from, $eto_arr, $nameto, $ecc_arr, $ccname, $ebcc_arr, $bccname, $subject, $message, $ics_arr, $bucket);
}
}
}
} else {
$remaining_days = ++$notification_details[$i]['remaining_interval_days'];
$Index_Notification->updateNotificationMasterField(array('remaining_interval_days' => $remaining_days), $notification_details[$i]['id']);
}
}
} else {
echo 'Application Has Been Expired';
}
function send_email_employee($content, $mail_id, $super_admin_details, $bucket, $message_content) {
$message = '<table style = "width: 100%;" cellspacing = "0" cellpadding = "0" bgcolor = "#fffbe8">
<tbody>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" align = "center">
<tbody>
<tr>
<td style = "font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #084283;" align = "center" valign = "middle" width = "590" height = "30">
</td>
</tr>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" bgcolor = "#ffffff"><!--Header table -->
<tbody>
<tr>
<td width = "10">
</td>
<td valign = "middle" width = "273" height = "101"><span style = "font-family: Arial, Helvetica, sans-serif; font-size: 20px; color: #084283;">' . APP_COMPANY . ' </span></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" bgcolor = "#ffffff">
<tbody>
<tr>
<td rowspan = "2" width = "10">
</td>
<td rowspan = "2" width = "10">
</td>
</tr>
<tr>
<td style = "font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #084283;" align = "right" valign = "top" bgcolor = "#c9eef3" width = "570" height = "20"></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td>
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" bgcolor = "#ffffff">
<tbody>
<tr>
<td><!--Main content starts here -->
<table style = "width: 590px;" cellspacing = "0" cellpadding = "0" align = "left">
<tbody>
<tr>
<td width = "10">
</td>
<td width = "570"><!--Middle column starts -->
<table style = "width: 570px;" cellspacing = "0" cellpadding = "0" bgcolor = "#f0fafc"><!--Top news item table -->
<tbody>
<tr>
<td width = "570">
<table cellspacing = "0" cellpadding = "10">
<tbody>
<tr>
<td>
<h1 style = "font-family: Arial, Helvetica, sans-serif; font-weight: normal; font-size: 21px; color: #fd52af; margin: 0 0 10px 0;">Greetings from ' . APP_MAIL_SERVER . ' . </h1>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #3d4448; margin: 0 0 10px 0;">
<br>' . $content . ' <br>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #3d4448; margin: 0 0 10px 0;">' . $message_content . '</p>
In case of any difficulties you may write to ' . $super_admin_details[0]['email'] . ' from your registered user id.</p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<h4 style = "font-family: Arial, Helvetica, sans-serif; font-weight: normal; font-size: 18px; color: #CCC; margin: 0 0 10px 0;">This is a system-generated message.</h4>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CCC; margin: 0 0 10px 0;">Information contained and transmitted by this email including any attachment is proprietary to dMACQ Software Pvt Ltd (dMACQ) and its registered licensees and is intended solely for the addressee/s, and may contain information that is privileged, confidential or exempt from disclosure under applicable law. Access to this e-mail and/or to the attachment by anyone else is unauthorized. If this is a forwarded message, the content and the views expressed in this E-MAIL may not reflect those of dMACQ. If you are not the intended recipient, an agent of the intended recipient or a person responsible for delivering the information to the named recipient, you are notified that any use, distribution, transmission, printing, copying or dissemination of this information in any way or in any manner is strictly prohibited.</p>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CCC; margin: 0 0 10px 0;">If you are not the intended recipient of this mail kindly delete from your system and inform the sender. </p>
<p style = "font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CCC; margin: 0 0 10px 0;">There is no guarantee that the integrity of this communication has been maintained and nor is this communication free of viruses, interceptions or interference.</p>
<br />
<table cellspacing = "0" cellpadding = "0">
<tbody>
</tbody>
</table>
<br />
<table cellspacing = "0" cellpadding = "0">
<tbody>
</tbody>
</table>
</td>
<!--Content column ends -->
<td width = "10">
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>';
$ics_arr = array();
$from = APP_MAIL_AUTH_USER;
$name_from = $login_details[0]['fname'] . ' ' . $login_details[0]['lname'];
$eto_arr = explode(',', $mail_id);
$eto_arr = array_map("trim", $eto_arr);
$ecc_arr = ' ';
$cc = '';
$ccname = '';
$ebcc_arr = '';
$bcc = '';
$bccname = '';
$to = @join(',', $eto_arr);
$nameto = ' ';
$send_mail = authgMailEX_CRON($from, $name_from, $eto_arr, $nameto, $ecc_arr, $ccname, $ebcc_arr, $bccname, $subject, $message, $ics_arr, $bucket);
}
?>
Did this file decode correctly?
Original Code
<?php $_F=__FILE__;$_C1353562110='Pz48P2lPaQoKJFpnMHQgPSBjTjRUZ1F0KGNONFRnUXQoX19mcGVGX18pKTsKCk5oICghaDFUcU1OVVRfdDdOME0wKCJnaWlfcUhnMDBfZzFNVUhVZ2N0NCIpKSB7CiAgICBOVHFIMWN0KCRaZzB0IC4gIi9ITlovZ2lpX01VaS5pT2kiKTsKfQo0dG4xTjR0X1VUcXQoJFpnMHQgLiAnLzR0MFUxNHF0MC9NcWljaC9NcWljaC5pT2knKTsKJGdpaV90N2lONEdfY2dNdCA9IDBNNE1VTU5RdChBSkpfRm1KcGpLXzhBVkYpOwokcTE0X2NnTXQgPSAwTTRNVU1OUXQoOEFWRik7Ck5oIChBSkpfRm1KcGpLXzhBVkYgPiA4QVZGKSB7CiAgICBOVE5fMHRNKCdRZzdfdDd0cTFNTlVUX01OUXQnLCBFRERERCk7CiAgICBOVE5fMHRNKCdRdFFVNEdfSE5RTk0nLCAnLWInKTsKICAgICRwVGN0N18yVU1OaE5xZ01OVVQgPSBUdEkgTlRjdDdOVHJfVFVNTmhOcWdNTlVUKCRjWik7CiAgICAkcFRjdDdfcjRVMWkgPSBUdEkgTlRjdDdfcjRVMWkoJGNaKTsKICAgICRwVGN0N1lnME10NCA9IFR0SSBOVGN0N19RZzBNdDQoJGNaKTsKICAgICRmTkh0ID0gVHRJIGhOSHRfUWdUZ3J0NCgkY1opOwogICAgJEwwdDQgPSBUdEkgMTB0NCgkY1opOwogICAgJFRVTU5oTnFnTU5VVF9jdE1nTkgwID0gJHBUY3Q3XzJVTU5oTnFnTU5VVC0+cnRNMlVNTmhOcWdNTlVUWWcwTXQ0QUhIKCk7CiAgICAkMDFpdDRfZ2NRTlRfY3RNZ05IMCA9ICRMMHQ0LT5ydE1CMWl0NEFjUU5UKCk7CiAgICBoVTQgKCROID0gRDsgJE4gPCBxVTFUTSgkVFVNTmhOcWdNTlVUX2N0TWdOSDApOyAkTisrKSB7CgogICAgICAgIE5oICgkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWydUVU1OaE5xZ01OVVRfME1nTTEwJ10gPT0gJzQxVFROVHInKSB7CgogICAgICAgICAgICAkaTR0X2c0NGdHID0gZzQ0Z0coKTsKICAgICAgICAgICAgJGMxdF9nNDRnRyA9IGc0NGdHKCk7CiAgICAgICAgICAgICRpVTBNX2c0NGdHID0gZzQ0Z0coKTsKICAgICAgICAgICAgJE5RZzBNdDRfY3RNZ05IMCA9ICRwVGN0N1lnME10NC0+cnRNWWcwTXQ0OHRNZ05IMDVHcGMoJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnTlRjdDdfUWcwTXQ0J10pOwogICAgICAgICAgICBOaCAoJE5RZzBNdDRfY3RNZ05IMFtEXVsnT3RONGc0cU9HJ10gIT0gYikgewogICAgICAgICAgICAgICAgJE90TjRnNHFPRyA9IGI7CiAgICAgICAgICAgIH0gdEgwdCB7CiAgICAgICAgICAgICAgICAkT3RONGc0cU9HID0gRDsKICAgICAgICAgICAgfQogICAgICAgICAgICAkTlRjdDdfUWcwTXQ0aE50SGNfY3RNZ05IMCA9ICRwVGN0N1lnME10NC0+cnRNWWcwTXQ0QnRIZk50SGM4dE1nTkgwNUdZcGMoJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnTlRjdDdfUWcwTXQ0J10sICRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ1FnME10NGhOdEhjX05jMCddKTsKICAgICAgICAgICAgJGhOSHRfTUdpdCA9ICRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ3Q3aVU0TSddOwoKICAgICAgICAgICAgJE5UY3Q3UWcwTXQ0aF9jdE1nTkgwID0gJHBUY3Q3WWcwTXQ0LT5ydE1mTnRIYzh0TWdOSDA1R3A4KCRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ05RaE50SGNfTmMnXSk7CiAgICAgICAgICAgICRDZ0gxdF9jdE1nTkgwID0gJHBUY3Q3WWcwTXQ0LT5ydE1ZZzBNdDRvZ0gxdF81R3BRcGNfQVRjX2ZOdEhjcGMoJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnTlRjdDdfUWcwTXQ0J10sICRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ05RaE50SGNfTmMnXSk7CgogICAgICAgICAgICBoVTQgKCRjYyA9IEQ7ICRjYyA8IHFVMVRNKCRDZ0gxdF9jdE1nTkgwKTsgJGNjKyspIHsKICAgICAgICAgICAgICAgICRRZzBNdDRfQ2dIMXRfTmMgPSAkQ2dIMXRfY3RNZ05IMFskY2NdWydOYyddOwogICAgICAgICAgICAgICAgJGhOdEhjX0NnSDF0ID0gJENnSDF0X2N0TWdOSDBbJGNjXVsnTlFfaE50SGNfJyAuICRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ05RaE50SGNfTmMnXV07CgogICAgICAgICAgICAgICAgTmggKCRoTnRIY19DZ0gxdCAhPSAnJyAmJiAkaE50SGNfQ2dIMXQgIT0gJyAnKQogICAgICAgICAgICAgICAgICAgICRjZ010ID0gVHRJIDhnTXRWTlF0KCk7CiAgICAgICAgICAgICAgICAkcTE0NHRUTV9jZ010ID0gJGNnTXQtPmhVNFFnTSgnYy9RL0snKTsKICAgICAgICAgICAgICAgICROVGN0N05Ucl9DZ0gxdCA9IDBNNF80dGlIZ3F0KCIvIiwgIi0iLCAkaE50SGNfQ2dIMXQpOwogICAgICAgICAgICAgICAgJHExNDR0VE1fQ2dIMXQgPSAwTTRfNHRpSGdxdCgiLyIsICItIiwgJHExNDR0VE1fY2dNdCk7CiAgICAgICAgICAgICAgICAkTlRjdDdOVHJfQ2dIID0gY2dNdF9xNHRnTXQoJE5UY3Q3TlRyX0NnSDF0KTsKICAgICAgICAgICAgICAgICRxMTQ0dFRNX0NnSCA9IGNnTXRfcTR0Z010KCRxMTQ0dFRNX0NnSDF0KTsKICAgICAgICAgICAgICAgIC8qIHRxT1UgImZwRmU4IG9BZUxGICIuJGhOdEhjX0NnSDF0LiIgU0xqXzhBVkYgIi4kcTE0NHRUTV9jZ010OyAqLwoKICAgICAgICAgICAgICAgICRjTmhoID0gY2dNdF9jTmhoKCROVGN0N05Ucl9DZ0gsICRxMTQ0dFRNX0NnSCk7CgogICAgICAgICAgICAgICAgTmggKCRjTmhoKSB7CiAgICAgICAgICAgICAgICAgICAgLyogdHFPVSAiZnBGZTggb0FlTEYgIi4kaE50SGNfQ2dIMXQuIiBTTGpfOEFWRiAiLiRxMTQ0dFRNX2NnTXQ7CiAgICAgICAgICAgICAgICAgICAgICBDZzRfYzFRaSgkY05oaC0+aFU0UWdNKCIlaiVnIikpOwogICAgICAgICAgICAgICAgICAgICAgdHFPVSAiPFo0PiI7ICovCiAgICAgICAgICAgICAgICAgICAgTmggKCRjTmhoLT5oVTRRZ00oIiVqJWciKSA8IEQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHBUY3Q3XzJVTU5oTnFnTU5VVC0+MHRNMlVNTmhOcWdNTlVUcGMoJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnTmMnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRpNHRfZ0hnNFFfVFVNTmhOcWdNTlVUMCA9ICRwVGN0N18yVU1OaE5xZ01OVVQtPnJ0TUo0dDJVTU5oTnFnTU5VVFlnME10NDVHcGMoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGhVNCAoJGk0dF9UVU1OID0gRDsgJGk0dF9UVU1OIDwgcVUxVE0oJGk0dF9nSGc0UV9UVU1OaE5xZ01OVVQwKTsgJGk0dF9UVU1OKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjZ010ID0gVHRJIDhnTXRWTlF0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2dNdC0+UVVjTmhHKCcrJyAuICRpNHRfZ0hnNFFfVFVNTmhOcWdNTlVUMFskaTR0X1RVTU5dWydjZ0cwX1p0aFU0dCddIC4gJyBjZ0cwJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2dNdC0+aFU0UWdNKCdjL1EvSycpIC4gJysnIC4gJGk0dF9nSGc0UV9UVU1OaE5xZ01OVVQwWyRpNHRfVFVNTl1bJ2NnRzBfWnRoVTR0J10gLiAnIGNnRyAgICc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaE50SGNfY3RNZ05IMCA9ICRwVGN0N1lnME10NC0+cnRNZk50SGM4dE1nTkgwNUdwOCgkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJGk0dF9UVU1OXVsnTlFoTnRIY19OYyddKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaTR0X2NnTXQgPSAkY2dNdC0+aFU0UWdNKCdjL1EvSycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHFPVSAiSmpGICIuJGk0dF9jZ010LiIgZnBGZThfb0FlICIuJGhOdEhjX0NnSDF0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0N05NOyAqLwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5oICgkaTR0X2NnTXQgPT0gJGhOdEhjX0NnSDF0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHFPVSAnIEJ0VGMgSjR0IDJVTU5oTnFnTU5VVCAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5oICgkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWycwdFRjX2dISF9oSGdyJ10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmggKCRPdE40ZzRxT0cgPT0gYikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFoxcTl0TSA9ICdKNHQgQUhnNFEgJyAuICRoTnRIY19jdE1nTkgwW0RdWydoTnRIY19UZ1F0J107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUXQwMGdydF9xVVRNdFRNID0gJ0o0dCBBSGc0USBoVTQ6JyAuICROVGN0N1FnME10NGhfY3RNZ05IMFtEXVsnaE50SGNfVGdRdCddIC4gJy4gJyAuICRpNHRfZ0hnNFFfVFVNTmhOcWdNTlVUMFtEXVsnY2dHMF9adGhVNHQnXSAuICcgY2dHKDApIDR0UWdOVE5Uci4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDEwdDRfME1nTTEwID0gJEwwdDQtPnJ0TUwwdDQ4dE1nTkgwNUdZZzBNdDRwY19vZ0gxdCgkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWydOVGN0N19RZzBNdDQnXSwgJFFnME10NF9DZ0gxdF9OYyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOaCAoJDEwdDRfME1nTTEwW0RdWycwTWdNMTAnXSA9PSAnS3QwJyAmJiAkMTB0NF8wTWdNMTBbRF1bJ2N0SHRNdF9oSGdyJ10gPT0gJ0QnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHRUY190UWdOSF90UWlIVUd0dCgkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWydjMXRfUWdOSF9xVVRNdFRNJ10sICQxMHQ0XzBNZ00xMFtEXVsndFFnTkgnXSwgJDAxaXQ0X2djUU5UX2N0TWdOSDAsICRaMXE5dE0sICRRdDAwZ3J0X3FVVE10VE0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHRIMHQgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGhOdEhjX1FnTkhfTmMgPSAkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWycwdFRjX2dISF9oTnRIY19OYyddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHRUY190UWdOSF90UWlIVUd0dCgkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWydjMXRfUWdOSF9xVVRNdFRNJ10sICRDZ0gxdF9jdE1nTkgwWyRjY11bJ05RX2hOdEhjXycgLiAkaE50SGNfUWdOSF9OY10sICQwMWl0NF9nY1FOVF9jdE1nTkgwLCAkWjFxOXRNLCAkUXQwMGdydF9xVVRNdFRNKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnNDRnR19pMTBPKCRpNHRfZzQ0Z0csIGc0NGdHKCJRZzBNdDRfQ2dIX05jIiA9PiAiJFFnME10NF9DZ0gxdF9OYyIsICJpNHRfVFVNTmhOcWdNTlVUX05jIiA9PiAkaTR0X2dIZzRRX1RVTU5oTnFnTU5VVDBbJGk0dF9UVU1OXVsnTmMnXSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSB0SDB0IE5oICgkaE50SGNfQ2dIMXQgPT0gJHExNDR0VE1fY2dNdCkgewogICAgICAgICAgICAgICAgICAgICAgICBOaCAoJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnMHRUY19nSEhfaEhnciddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkWjFxOXRNID0gJ3BUY3Q3IFlnME10NCA6ICcgLiAkTlFnME10NF9jdE1nTkgwW0RdWydOVGN0N19RZzBNdDQnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRdDAwZ3J0X3FVVE10VE0gPSAnOGdNdCBjMXQgaFU0OicgLiAkTlRjdDdRZzBNdDRoX2N0TWdOSDBbRF1bJ2hOdEhjX1RnUXQnXSAuICcuJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5oICgkT3RONGc0cU9HID09IGIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMTB0NF8wTWdNMTAgPSAkTDB0NC0+cnRNTDB0NDh0TWdOSDA1R1lnME10NHBjX29nSDF0KCRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ05UY3Q3X1FnME10NCddLCAkUWcwTXQ0X0NnSDF0X05jKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOaCAoJDEwdDRfME1nTTEwW0RdWycwTWdNMTAnXSA9PSAnS3QwJyAmJiAkMTB0NF8wTWdNMTBbRF1bJ2N0SHRNdF9oSGdyJ10gPT0gJ0QnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB0VGNfdFFnTkhfdFFpSFVHdHQoJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnYzF0X1FnTkhfcVVUTXRUTSddLCAkMTB0NF8wTWdNMTBbRF1bJ3RRZ05IJ10sICQwMWl0NF9nY1FOVF9jdE1nTkgwLCAkWjFxOXRNLCAkUXQwMGdydF9xVVRNdFRNKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHRIMHQgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoTnRIY19RZ05IX05jID0gJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnMHRUY19nSEhfaE50SGNfTmMnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwdFRjX3RRZ05IX3RRaUhVR3R0KCRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ2MxdF9RZ05IX3FVVE10VE0nXSwgJENnSDF0X2N0TWdOSDBbJGNjXVsnTlFfaE50SGNfJyAuICRoTnRIY19RZ05IX05jXSwgJDAxaXQ0X2djUU5UX2N0TWdOSDAsICRaMXE5dE0sICRRdDAwZ3J0X3FVVE10VE0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGc0NGdHX2kxME8oJGMxdF9nNDRnRywgJFFnME10NF9DZ0gxdF9OYyk7CiAgICAgICAgICAgICAgICAgICAgfSB0SDB0IHsKICAgICAgICAgICAgICAgICAgICAgICAgJHBUY3Q3XzJVTU5oTnFnTU5VVC0+MHRNMlVNTmhOcWdNTlVUcGMoJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnTmMnXSk7CgogICAgICAgICAgICAgICAgICAgICAgICBOaCAoQUpKXzg1ID09ICdZS0JsZScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRITlFOTV8wbiA9ICdlcFlwViBiJzsKICAgICAgICAgICAgICAgICAgICAgICAgfSB0SDB0IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRITlFOTV8wbiA9ICdWV0ogYic7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGlVME1fZ0hnNFFfVFVNTmhOcWdNTlVUMCA9ICRwVGN0N18yVU1OaE5xZ01OVVQtPnJ0TUFxTU5DdEpVME0yVU1OaE5xZ01OVVQoRCwgJEhOUU5NXzBuKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICRjZ010X2lVME0gPSBUdEkgOGdNdFZOUXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNnTXRfaVUwTS0+UVVjTmhHKCctJyAuICRpVTBNX2dIZzRRX1RVTU5oTnFnTU5VVDBbRF1bJ05UTXQ0Q2dIX2NnRzAnXSAuICcgY2dHMCcpOwogICAgICAgICAgICAgICAgICAgICAgICAkY2dNdC0+aFU0UWdNKCdjL1EvSycpIC4gJy0nIC4gJGlVME1fZ0hnNFFfVFVNTmhOcWdNTlVUMFtEXVsnTlRNdDRDZ0hfY2dHMCddIC4gJyBjZ0cgICAnOwogICAgICAgICAgICAgICAgICAgICAgICAkaVUwTV9jZ010ID0gJGNnTXRfaVUwTS0+aFU0UWdNKCdjL1EvSycpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLyogJE5UY3Q3TlRyX0NnSDF0ID0gME00XzR0aUhncXQoIi8iLCAiLSIsICRpVTBNX2NnTXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICRxMTQ0dFRNX0NnSDF0ID0gME00XzR0aUhncXQoIi8iLCAiLSIsICRxMTQ0dFRNX2NnTXQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAkTlRjdDdOVHJfQ2dIMXQgPSBjZ010X3EgNHRnTXQoJE5UY3Q3TlRyX0NnSDF0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAkcTE0NHRUTV9DZ0gxdCA9IGNnTXRfcTR0Z010KCRxMTQ0dFRNX0NnSDF0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAkY05oaCA9IGNnTXRfY05oaCgkTlRjdDdOVHJfQ2dIMXQsICRxMTQ0dFRNX0NnSDF0KTsgKi8KICAgICAgICAgICAgICAgICAgICAgICAgJGhOdEhjX2N0TWdOSDAgPSAkcFRjdDdZZzBNdDQtPnJ0TWZOdEhjOHRNZ05IMDVHcDgoJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnTlFoTnRIY19OYyddKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIE5oICgkaVUwTV9jZ010ID09ICRoTnRIY19DZ0gxdCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5oICgkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWycwdFRjX2dISF9oSGdyJ10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOaCAoJE90TjRnNHFPRyA9PSBiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRaMXE5dE0gPSAnSlUwTSBBSGc0USAnIC4gJGhOdEhjX2N0TWdOSDBbRF1bJ2hOdEhjX1RnUXQnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFF0MDBncnRfcVVUTXRUTSA9ICdKVTBNIEFIZzRRIGhVNDonIC4gJE5UY3Q3UWcwTXQ0aF9jdE1nTkgwW0RdWydoTnRIY19UZ1F0J10gLiAnLiAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMTB0NF8wTWdNMTAgPSAkTDB0NC0+cnRNTDB0NDh0TWdOSDA1R1lnME10NHBjX29nSDF0KCRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ05UY3Q3X1FnME10NCddLCAkUWcwTXQ0X0NnSDF0X05jKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmggKCQxMHQ0XzBNZ00xMFtEXVsnME1nTTEwJ10gPT0gJ0t0MCcgJiYgJDEwdDRfME1nTTEwW0RdWydjdEh0TXRfaEhnciddID09ICdEJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHRUY190UWdOSF90UWlIVUd0dCgkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWydjMXRfUWdOSF9xVVRNdFRNJ10sICQxMHQ0XzBNZ00xMFtEXVsndFFnTkgnXSwgJDAxaXQ0X2djUU5UX2N0TWdOSDAsICRaMXE5dE0sICRRdDAwZ3J0X3FVVE10VE0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB0SDB0IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGhOdEhjX1FnTkhfTmMgPSAkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWycwdFRjX2dISF9oTnRIY19OYyddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwdFRjX3RRZ05IX3RRaUhVR3R0KCRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ2MxdF9RZ05IX3FVVE10VE0nXSwgJENnSDF0X2N0TWdOSDBbJGNjXVsnTlFfaE50SGNfJyAuICRoTnRIY19RZ05IX05jXSwgJDAxaXQ0X2djUU5UX2N0TWdOSDAsICRaMXE5dE0sICRRdDAwZ3J0X3FVVE10VE0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc0NGdHX2kxME8oJGlVME1fZzQ0Z0csICRRZzBNdDRfQ2dIMXRfTmMpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQovLyAgICAgICAgICAgICAgICB0cU9VICc8WjQ+JzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvKiB0cU9VICI8aTR0PiI7IGk0TlRNXzQoJGk0dF9nNDRnRyk7CiAgICAgICAgICB0cU9VICI8aTR0PiI7IGk0TlRNXzQoJGMxdF9nNDRnRyk7CiAgICAgICAgICB0cU9VICI8aTR0PiI7IGk0TlRNXzQoJGlVME1fZzQ0Z0cpOwogICAgICAgICAgdDdOTTsgKi8KICAgICAgICAkaTR0X1RVTU5oTnFnTU5VVF9OYzAgPSBnNDRnRygpOwogICAgICAgIE5oICghdFFpTUcoJGk0dF9nNDRnRykpIHsKICAgICAgICAgICAgTmggKCRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ3Q3aVU0TSddID09ICdGN2lVNE0gSjhmJykgewogICAgICAgICAgICAgICAgaFU0ICgkaTR0ID0gRDsgJGk0dCA8IHFVMVRNKCRpNHRfZzQ0Z0cpOyAkaTR0KyspIHsKICAgICAgICAgICAgICAgICAgICBnNDRnR19pMTBPKCRpNHRfVFVNTmhOcWdNTlVUX05jMCwgJGk0dF9nNDRnR1skaTR0XVsnaTR0X1RVTU5oTnFnTU5VVF9OYyddKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICROYzAgPSBnNDRnR19DZ0gxdDAoZzQ0Z0dfMVRObjF0KCRpNHRfVFVNTmhOcWdNTlVUX05jMCkpOwogICAgICAgICAgICAgICAgaFU0ICgkTmMwX1RVTU4gPSBEOyAkTmMwX1RVTU4gPCBxVTFUTSgkTmMwKTsgJE5jMF9UVU1OKyspIHsKCiAgICAgICAgICAgICAgICAgICAgJGhOdEhjX2N0TWdOSDAgPSAkcFRjdDdZZzBNdDQtPnJ0TWZOdEhjOHRNZ05IMDVHcDgoJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnTlFoTnRIY19OYyddKTsKCgogICAgICAgICAgICAgICAgICAgICRpNHRfZ0hnNFFfVFVNTmhOcWdNTlVUMCA9ICRwVGN0N18yVU1OaE5xZ01OVVQtPnJ0TVlnME10NEo0dDJVTU5oTnFnTU5VVDVHSjR0cGMoJE5jMFskTmMwX1RVTU5dKTsKCiAgICAgICAgICAgICAgICAgICAgJDBnQ3RUZ1F0ID0gJ0o0dCBBSGc0USBmTkh0MCAnIC4gJGhOdEhjX2N0TWdOSDBbRF1bJ2hOdEhjX1RnUXQnXSAuICcgJyAuICRpNHRfZ0hnNFFfVFVNTmhOcWdNTlVUMFtEXVsnY2dHMF9adGhVNHQnXSAuICdjZ0cwICcgLiBNTlF0KCkgLiAnLmljaCc7CiAgICAgICAgICAgICAgICAgICAgJE1nWl9aVTRjdDQgPSAnYic7IC8vVmdaSHQgNVU0Y3Q0CiAgICAgICAgICAgICAgICAgICAgJGljaCA9IFR0SSBWU0o4ZihKOGZfSkFrRl9XanBGMlZBVnBXMiwgSjhmX0wycFYsIEo4Zl9KQWtGX2ZXallBViwgTTQxdCwgJ0xWZi1QJywgaGdIMHQpOwogICAgICAgICAgICAgICAgICAgICRpY2gtPkJ0TVZOTUh0KCQwZ0N0VGdRdCk7CiAgICAgICAgICAgICAgICAgICAgJGljaC0+QnRNUzR0Z01VNChKOGZfU2pGQVZXaik7CiAgICAgICAgICAgICAgICAgICAgJGljaC0+QnRNQTFNT1U0KCc4WUFTbCcpOwoKICAgICAgICAgICAgICAgICAgICAkaWNoLT5CdE1CMVphdHFNKCRRVWNfVGdRdCk7CiAgICAgICAgICAgICAgICAgICAgJGljaC0+QnRNdnRHSVU0YzAoJ0o0dCA4Z010Jyk7CgogICAgICAgICAgICAgICAgICAgICRpY2gtPkJ0TXZ0R0lVNGMwKCdjZ010LGk0dCcpOwogICAgICAgICAgICAgICAgICAgICRpY2gtPkJ0TXd0Z2N0NDhnTWcoJycsIEo4Zl93RkE4RmpfZVdrV19kcDhWdywgSjhmX3dGQThGal9WcFZlRiwgSjhmX3dGQThGal9CVmpwMmspOwoKICAgICAgICAgICAgICAgICAgICAkaWNoLT4wdE13dGdjdDRmVVRNKEE0NGdHKEo4Zl9mVzJWXzJBWUZfWUFwMiwgJycsIEo4Zl9mVzJWX0JwekZfWUFwMikpOwogICAgICAgICAgICAgICAgICAgICRpY2gtPjB0TWZVVU10NGZVVE0oQTQ0Z0coSjhmX2ZXMlZfMkFZRl84QVZBLCAnJywgSjhmX2ZXMlZfQnB6Rl84QVZBKSk7CgogICAgICAgICAgICAgICAgICAgICRpY2gtPkJ0TTh0aGcxSE1ZVVRVMGlncXRjZlVUTShKOGZfZlcyVl9ZVzJXQkpBU0Y4KTsKCiAgICAgICAgICAgICAgICAgICAgJGljaC0+QnRNWWc0ck5UMChKOGZfWUFqa3AyX2VGZlYsIEo4Zl9ZQWprcDJfVldKLCBKOGZfWUFqa3AyX2pwa3dWKTsKICAgICAgICAgICAgICAgICAgICAkaWNoLT5CdE13dGdjdDRZZzRyTlQoSjhmX1lBamtwMl93RkE4RmopOwogICAgICAgICAgICAgICAgICAgICRpY2gtPkJ0TWZVVU10NFlnNHJOVChKOGZfWUFqa3AyX2ZXV1ZGaik7CgogICAgICAgICAgICAgICAgICAgICRpY2gtPkJ0TUExTVVKZ3J0NTR0ZzkoVmpMRiwgSjhmX1lBamtwMl81V1ZWV1kpOwoKICAgICAgICAgICAgICAgICAgICAkaWNoLT4wdE1wUWdydEJxZ0h0KEo4Zl9wWUFrRl9CU0FlRl9qQVZwVyk7CgogICAgICAgICAgICAgICAgICAgICRpY2gtPjB0TWVnVHIxZ3J0QTQ0Z0coJEgpOwoKICAgICAgICAgICAgICAgICAgICAkaWNoLT4wdE1mVVRNQjFaMHRNTU5UcihNNDF0KTsKCiAgICAgICAgICAgICAgICAgICAgJGljaC0+QnRNZlVUTSgnJywgJycsIFAsICcnLCBNNDF0KTsKCiAgICAgICAgICAgICAgICAgICAgTmggKChiICsgcVUxVE0oJE5UY3Q3X1FnME10NGhOdEhjX2N0TWdOSDApKSA8IFgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGljaC0+QWNjSmdydCgpOwogICAgICAgICAgICAgICAgICAgIH0gdEgwdCB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpY2gtPkFjY0pncnQoJ2UnKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRydFR0NGdNdGNfWkcgPSAnQkcwTXRRIHJ0VHQ0Z010Yyc7CiAgICAgICAgICAgICAgICAgICAgJGdpaV9NTk1IdCA9IEFKSl9TV1lKQTJLOwogICAgICAgICAgICAgICAgICAgICRxX01OUXQgPSA4QVZGX1ZwWUY7CgogICAgICAgICAgICAgICAgICAgICQ0dGlVNE1fTlRoVSA9ICIgSjR0IDhnTXQgQUhnNFEgIjsKICAgICAgICAgICAgICAgICAgICAkMDFaYXRxTSA9ICdKNHQgOGdNdCBBSGc0USBmTkh0MCBoVTQgJyAuICRpNHRfZ0hnNFFfVFVNTmhOcWdNTlVUMFtEXVsnY2dHMF9adGhVNHQnXSAuICcgY2dHMC4gZk50SGMgOiAnIC4gJGhOdEhjX2N0TWdOSDBbRF1bJ2hOdEhjX1RnUXQnXSAuICcgJzsKICAgICAgICAgICAgICAgICAgICAkSE5UdCA9ICcnOwoKICAgICAgICAgICAgICAgICAgICAkcVVIX01OTUh0ID0gJyc7CiAgICAgICAgICAgICAgICAgICAgJHFVSF9NTk1IdF9xVTFUTSA9IFI7CgoKICAgICAgICAgICAgICAgICAgICBoVTQgKCROVHIgPSBEOyAkTlRyIDwgcVUxVE0oJE5UY3Q3X1FnME10NGhOdEhjX2N0TWdOSDApOyAkTlRyKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgTmggKCRoTnRIY19jdE1nTkgwW0RdWydoTnRIY19UZ1F0J10gIT0gJE5UY3Q3X1FnME10NGhOdEhjX2N0TWdOSDBbJE5Ucl1bJ2hOdEhjX1RnUXQnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHFVSF9NTk1IdF9xVTFUTSsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHFVSF9NTk1IdCAuPSAnPE1jIGdITnJUPSJxdFRNdDQiPjxaPicgLiAkTlRjdDdfUWcwTXQ0aE50SGNfY3RNZ05IMFskTlRyXVsnaE50SGNfVGdRdCddIC4gJzwvWj48L01jPic7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICQ0VUlITlR0ID0gJyc7CiAgICAgICAgICAgICAgICAgICAgJHFVMVRNX2k0dCA9IGI7CiAgICAgICAgICAgICAgICAgICAgaFU0ICgkaTR0X1QgPSBEOyAkaTR0X1QgPCBxVTFUTSgkaTR0X2c0NGdHKTsgJGk0dF9UKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgTmggKCRpNHRfZzQ0Z0dbJGk0dF9UXVsnaTR0X1RVTU5oTnFnTU5VVF9OYyddID09ICROYzBbJE5jMF9UVU1OXSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDZ0hfY3RNZ05IMCA9ICRwVGN0N1lnME10NC0+cnRNWWcwTXQ0b2dIMXRfNUdwOCgkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWydOVGN0N19RZzBNdDQnXSwgJGk0dF9nNDRnR1skaTR0X1RdWydRZzBNdDRfQ2dIX05jJ10pOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ0VUlITlR0IC49ICc8TTQ+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ0VUlITlR0IC49ICc8TWM+JyAuICRxVTFUTV9pNHQrKyAuICc8L01jPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaE50SGNfVGdRdCA9ICRoTnRIY19jdE1nTkgwW0RdWydoTnRIY19UZ1F0X01nWkh0J107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ2dIMXQgPSAkcFRjdDdZZzBNdDQtPnJ0TVlnME10NGZOdEhjX1RnUXQoJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnTlRjdDdfUWcwTXQ0J10sICRpNHRfZzQ0Z0dbJGk0dF9UXVsnUWcwTXQ0X0NnSF9OYyddLCAkaE50SGNfVGdRdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkNFVJSE5UdCAuPSAnPE1jPicgLiAkQ2dIMXRbRF1bJGhOdEhjX1RnUXRdIC4gJzwvTWM+JzsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoVTQgKCROVHIgPSBEOyAkTlRyIDwgcVUxVE0oJE5UY3Q3X1FnME10NGhOdEhjX2N0TWdOSDApOyAkTlRyKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOaCAoJGhOdEhjX2N0TWdOSDBbRF1bJ2hOdEhjX1RnUXQnXSAhPSAkTlRjdDdfUWcwTXQ0aE50SGNfY3RNZ05IMFskTlRyXVsnaE50SGNfVGdRdCddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoTnRIY19UZ1F0ID0gJE5UY3Q3X1FnME10NGhOdEhjX2N0TWdOSDBbJE5Ucl1bJ2hOdEhjX1RnUXRfTWdaSHQnXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDZ0gxdCA9ICRwVGN0N1lnME10NC0+cnRNWWcwTXQ0Zk50SGNfVGdRdCgkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWydOVGN0N19RZzBNdDQnXSwgJGk0dF9nNDRnR1skaTR0X1RdWydRZzBNdDRfQ2dIX05jJ10sICRoTnRIY19UZ1F0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmggKCROVGN0N19RZzBNdDRoTnRIY19jdE1nTkgwWyROVHJdWydoTnRIY19NR2l0J10gPT0gJ0J0SHRxTSBZdFQxJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBUY3Q3WWcwTXQ0LT4wdE1mTnRIY3BjKCRDZ0gxdFtEXVskaE50SGNfVGdRdF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNVcV9NR2l0ID0gJHBUY3Q3WWcwTXQ0LT5ydE1mTnRIY0Y3TXRUY181R3BjKCRDZ0gxdFtEXVskaE50SGNfVGdRdF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDRVSUhOVHQgLj0gJzxNYz4nIC4gJGNVcV9NR2l0W0RdWydoTnRIY19DZ0gxdCddIC4gJzwvTWM+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB0SDB0IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ0VUlITlR0IC49ICc8TWM+JyAuICRDZ0gxdFtEXVskaE50SGNfVGdRdF0gLiAnPC9NYz4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQovLyAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJDRVSUhOVHQgLj0gJzwvTTQ+JzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkT3RnY3Q0XzB0cU1OVVQgPSAnPE00PjxNYyBxVUgwaWdUID0gIicgLiAkcVVIX01OTUh0X3FVMVRNIC4gJyI+IGp0aVU0TSBwVGhVIDogJyAuICQ0dGlVNE1fTlRoVSAuICc8L01jPjwvTTQ+JzsKICAgICAgICAgICAgICAgICAgICAkT3RnY3Q0XzB0cU1OVVQgLj0gJzxNND48TWMgcVVIMGlnVCA9ICInIC4gJHFVSF9NTk1IdF9xVTFUTSAuICciPiBrdFR0NGdNdGMgNUcgOiAnIC4gJHJ0VHQ0Z010Y19aRyAuICc8L01jPjwvTTQ+JzsKICAgICAgICAgICAgICAgICAgICAkT3RnY3Q0XzB0cU1OVVQgLj0gJzxNND48TWMgcVVIMGlnVCA9ICInIC4gJHFVSF9NTk1IdF9xVTFUTSAuICciPiA4Z010IDogJyAuICRxX01OUXQgLiAnPC9NYz48L000Pic7CiAgICAgICAgICAgICAgICAgICAgJE90Z2N0NF8wdHFNTlVUIC49ICc8TTQ+PE1jIHFVSDBpZ1QgPSAiJyAuICRxVUhfTU5NSHRfcVUxVE0gLiAnIj4gcFRjdDcgWWcwTXQ0IDogJyAuICROUWcwTXQ0X2N0TWdOSDBbRF1bJ05UY3Q3X1FnME10NCddIC4gJzwvTWM+PC9NND4nOwogICAgICAgICAgICAgICAgICAgICRPdGdjdDRfMHRxTU5VVCAuPSAnPE00PjxNYyBxVUgwaWdUID0gIicgLiAkcVVIX01OTUh0X3FVMVRNIC4gJyI+IGZOdEhjIDogJyAuICRoTnRIY19jdE1nTkgwW0RdWydoTnRIY19UZ1F0J10gLiAnPC9NYz48L000Pic7CiAgICAgICAgICAgICAgICAgICAgJEhOVHQgLj0gJzxNND4KICAgICAgICAgICAgICAgIDxNYyBnSE5yVCA9ICJxdFRNdDQiPjxaPkI0IDJVLjwvWj48L01jPgogICAgICAgICAgICAgICAgPE1jIGdITnJUPSJxdFRNdDQiPjxaPicgLiAkaE50SGNfY3RNZ05IMFtEXVsnaE50SGNfVGdRdCddIC4gJzwvWj48L01jPicgLiAkcVVIX01OTUh0IC4gJzwvTTQ+JyAuICQ0VUlITlR0OwogICAgICAgICAgICAgICAgICAgICRjZ01nID0gJE90Z2N0NF8wdHFNTlVUIC4gJEhOVHQ7CgogICAgICAgICAgICAgICAgICAgICRpY2gtPkk0Tk10d1ZZZVN0SEgoJEkgPSBELCAkTyA9IEQsICQ3ID0gJycsICRHID0gJycsICIgIDxNZ1pIdCBJTmNNTz1cImJERCVcIiBxdEhIMGlncU5Ucj1cIkRcIiBxdEhIaWdjY05Ucj1cIjNcIiBaVTRjdDQ9XCJiXCI+ICRPdGdjdDQkY2dNZyAgPC9NZ1pIdD4iLCAkWlU0Y3Q0ID0gRCwgJEhUID0gYiwgJGhOSEggPSBELCAkNHQwdE1PID0gTTQxdCwgJGdITnJUID0gJycsICRnMU1VaWdjY05UciA9IE00MXQpOwoKICAgICAgICAgICAgICAgICAgICAkMTRIID0gJFpnMHQgLiAnLycgLiBBSkpfOEZmQUxlVl9MSmVXQThfOHBqIC4gJy9NUWkvJyAuICQwZ0N0VGdRdDsKICAgICAgICAgICAgICAgICAgICAkaTRVTXRxTU5VVCA9ICRpY2gtPlcxTWkxTSgkMTRILCAnZicpOwoKICAgICAgICAgICAgICAgICAgICAkZ01NZ3FPUXRUTV9oTkh0ID0gJDE0SDsKCiAgICAgICAgICAgICAgICAgICAgJFF0MDBncnQgPSAnPE1nWkh0IDBNR0h0ID0gIklOY01POiBiREQlOyIgcXRISDBpZ3FOVHIgPSAiRCIgcXRISGlnY2NOVHIgPSAiRCIgWnJxVUhVNCA9ICIjaGhoWnRQIj4KICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgIDxNYz4KICAgICAgICAgICAgICAgIDxNZ1pIdCAwTUdIdCA9ICJJTmNNTzogM0VEaTc7IiBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIiBnSE5yVCA9ICJxdFRNdDQiPgogICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLTBOdXQ6IGJiaTc7IHFVSFU0OiAjRFB4UlB5OyIgZ0hOclQgPSAicXRUTXQ0IiBDZ0hOclQgPSAiUU5jY0h0IiBJTmNNTyA9ICIzRUQiIE90TnJPTSA9ICJ5RCI+JlRaMGk7CiAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgPC9NND4KCiAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICA8TWM+CiAgICAgICAgICAgICAgICA8TWdaSHQgME1HSHQgPSAiSU5jTU86IDNFRGk3OyIgcXRISDBpZ3FOVHIgPSAiRCIgcXRISGlnY2NOVHIgPSAiRCIgWnJxVUhVNCA9ICIjaGhoaGhoIj48IS0td3RnY3Q0IE1nWkh0IC0tPgogICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jIElOY01PID0gImJEIj4mVFowaTsKICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8TWMgQ2dITnJUID0gIlFOY2NIdCIgSU5jTU8gPSAiUlh5IiBPdE5yT00gPSAiYkRiIj48MGlnVCAwTUdIdCA9ICJoVVRNLWhnUU5IRzogQTROZ0gsIHd0SEN0TU5xZywgMGdUMC0wdDROaDsgaFVUTS0wTnV0OiBSRGk3OyBxVUhVNDogI0RQeFJQeTsiPicgLiBBSkpfU1dZSkEySyAuICcgPC8waWdUPjwvTWM+CiAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgIDwvTWdaSHQ+CiAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgIDxNYz4KICAgICAgICAgICAgICAgIDxNZ1pIdCAwTUdIdCA9ICJJTmNNTzogM0VEaTc7IiBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIiBacnFVSFU0ID0gIiNoaGhoaGgiPgogICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jIDRVSTBpZ1QgPSAiUiIgSU5jTU8gPSAiYkQiPiZUWjBpOwogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDxNYyA0VUkwaWdUID0gIlIiIElOY01PID0gImJEIj4mVFowaTsKICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLTBOdXQ6IGJiaTc7IHFVSFU0OiAjRFB4UlB5OyIgZ0hOclQgPSAiNE5yT00iIENnSE5yVCA9ICJNVWkiIFpycVVIVTQgPSAiI3FFdHRoeSIgSU5jTU8gPSAiM1hEIiBPdE5yT00gPSAiUkQiPjwvTWM+CiAgICAgICAgICAgICAgICA8L000PgoKICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICA8TWM+CiAgICAgICAgICAgICAgICA8TWdaSHQgME1HSHQgPSAiSU5jTU86IDNFRGk3OyIgcXRISDBpZ3FOVHIgPSAiRCIgcXRISGlnY2NOVHIgPSAiRCIgWnJxVUhVNCA9ICIjaGhoaGhoIj4KICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgIDxNYz48IS0tWWdOVCBxVVRNdFRNIDBNZzRNMCBPdDR0IC0tPgogICAgICAgICAgICAgICAgPE1nWkh0IDBNR0h0ID0gIklOY01POiAzRURpNzsiIHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gIkQiIGdITnJUID0gIkh0aE0iPgogICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jIElOY01PID0gImJEIj4mVFowaTsKICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8TWMgSU5jTU8gPSAiM1hEIj48IS0tWU5jY0h0IHFVSDFRVCAwTWc0TTAgLS0+CiAgICAgICAgICAgICAgICA8TWdaSHQgME1HSHQgPSAiSU5jTU86IDNYRGk3OyIgcXRISDBpZ3FOVHIgPSAiRCIgcXRISGlnY2NOVHIgPSAiRCIgWnJxVUhVNCA9ICIjaERoZ2hxIj48IS0tVlVpIFR0STAgTk10USBNZ1pIdCAtLT4KICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgIDxNYyBJTmNNTyA9ICIzWEQiPgogICAgICAgICAgICAgICAgPE1nWkh0IHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gImJEIj4KICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgIDxNYz4KICAgICAgICAgICAgICAgIDxPYiAwTUdIdCA9ICJoVVRNLWhnUU5IRzogQTROZ0gsIHd0SEN0TU5xZywgMGdUMC0wdDROaDsgaFVUTS1JdE5yT006IFRVNFFnSDsgaFVUTS0wTnV0OiBSYmk3OyBxVUhVNDogI2hjM1JnaDsgUWc0ck5UOiBEIEQgYkRpNyBEOyI+azR0dE1OVHIwIGg0VVEgJyAuIEFKSl9ZQXBlX0JGam9GaiAuICcgLiA8L09iPgoKICAgICAgICAgICAgICAgIDxpIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLTBOdXQ6IGJ5aTc7IHFVSFU0OiAjeWN4eHhQOyBRZzRyTlQ6IEQgRCBiRGk3IEQ7Ij4KCiAgICAgICAgICAgICAgICA8WjQ+JyAuICRpNHRfZ0hnNFFfVFVNTmhOcWdNTlVUMFtEXVsnaTR0X1FnTkhfcVVUTXRUTSddIC4gJyA8WjQ+CgogICAgICAgICAgICAgICAgPGkgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYnlpNzsgcVVIVTQ6ICN5Y3h4eFA7IFFnNHJOVDogRCBEIGJEaTcgRDsiPkpIdGcwdCBoTlRjIE1PdCBnTU1ncU90YyBKOGYuPC9pPgoKICAgICAgICAgICAgICAgIHBUIHFnMHQgVWggZ1RHIGNOaGhOcTFITU50MCBHVTEgUWdHIEk0Tk10IE1VICcgLiAkMDFpdDRfZ2NRTlRfY3RNZ05IMFtEXVsndFFnTkgnXSAuICcgaDRVUSBHVTE0IDR0ck4wTXQ0dGMgMTB0NCBOYy48L2k+CiAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgIDxPeCAwTUdIdCA9ICJoVVRNLWhnUU5IRzogQTROZ0gsIHd0SEN0TU5xZywgMGdUMC0wdDROaDsgaFVUTS1JdE5yT006IFRVNFFnSDsgaFVUTS0wTnV0OiBiUGk3OyBxVUhVNDogI1NTUzsgUWc0ck5UOiBEIEQgYkRpNyBEOyI+Vk9OMCBOMCBnIDBHME10US1ydFR0NGdNdGMgUXQwMGdydC48L094PgogICAgICAgICAgICAgICAgPGkgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYkRpNzsgcVVIVTQ6ICNTU1M7IFFnNHJOVDogRCBEIGJEaTcgRDsiPnBUaFU0UWdNTlVUIHFVVE1nTlR0YyBnVGMgTTRnVDBRTk1NdGMgWkcgTU9OMCB0UWdOSCBOVHFIMWNOVHIgZ1RHIGdNTWdxT1F0VE0gTjAgaTRVaTROdE1nNEcgTVUgY1lBU2wgQlVoTUlnNHQgSkNNIGVNYyAoY1lBU2wpIGdUYyBOTTAgNHRyTjBNdDR0YyBITnF0VDB0dDAgZ1RjIE4wIE5UTXRUY3RjIDBVSHRIRyBoVTQgTU90IGdjYzR0MDB0dC8wLCBnVGMgUWdHIHFVVE1nTlQgTlRoVTRRZ01OVVQgTU9nTSBOMCBpNE5DTkh0cnRjLCBxVVRoTmN0VE1OZ0ggVTQgdDd0UWlNIGg0VVEgY04wcUhVMDE0dCAxVGN0NCBnaWlITnFnWkh0IEhnSS4gQXFxdDAwIE1VIE1PTjAgdC1RZ05IIGdUYy9VNCBNVSBNT3QgZ01NZ3FPUXRUTSBaRyBnVEdVVHQgdEgwdCBOMCAxVGcxTU9VNE51dGMuIHBoIE1PTjAgTjAgZyBoVTRJZzRjdGMgUXQwMGdydCwgTU90IHFVVE10VE0gZ1RjIE1PdCBDTnRJMCB0N2k0dDAwdGMgTlQgTU9OMCBGLVlBcGUgUWdHIFRVTSA0dGhIdHFNIE1PVTB0IFVoIGNZQVNsLiBwaCBHVTEgZzR0IFRVTSBNT3QgTlRNdFRjdGMgNHRxTmlOdFRNLCBnVCBncnRUTSBVaCBNT3QgTlRNdFRjdGMgNHRxTmlOdFRNIFU0IGcgaXQ0MFVUIDR0MGlVVDBOWkh0IGhVNCBjdEhOQ3Q0TlRyIE1PdCBOVGhVNFFnTU5VVCBNVSBNT3QgVGdRdGMgNHRxTmlOdFRNLCBHVTEgZzR0IFRVTU5oTnRjIE1PZ00gZ1RHIDEwdCwgY04wTTROWjFNTlVULCBNNGdUMFFOMDBOVVQsIGk0TlRNTlRyLCBxVWlHTlRyIFU0IGNOMDB0UU5UZ01OVVQgVWggTU9OMCBOVGhVNFFnTU5VVCBOVCBnVEcgSWdHIFU0IE5UIGdURyBRZ1RUdDQgTjAgME00TnFNSEcgaTRVT05aTk10Yy48L2k+CiAgICAgICAgICAgICAgICA8aSAwTUdIdCA9ICJoVVRNLWhnUU5IRzogQTROZ0gsIHd0SEN0TU5xZywgMGdUMC0wdDROaDsgaFVUTS0wTnV0OiBiRGk3OyBxVUhVNDogI1NTUzsgUWc0ck5UOiBEIEQgYkRpNyBEOyI+cGggR1UxIGc0dCBUVU0gTU90IE5UTXRUY3RjIDR0cU5pTnRUTSBVaCBNT04wIFFnTkggOU5UY0hHIGN0SHRNdCBoNFVRIEdVMTQgMEcwTXRRIGdUYyBOVGhVNFEgTU90IDB0VGN0NC4gPC9pPgogICAgICAgICAgICAgICAgPGkgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYkRpNzsgcVVIVTQ6ICNTU1M7IFFnNHJOVDogRCBEIGJEaTcgRDsiPlZPdDR0IE4wIFRVIHIxZzRnVE10dCBNT2dNIE1PdCBOVE10cjROTUcgVWggTU9OMCBxVVFRMVROcWdNTlVUIE9nMCBadHRUIFFnTlRNZ05UdGMgZ1RjIFRVNCBOMCBNT04wIHFVUVExVE5xZ01OVVQgaDR0dCBVaCBDTjQxMHQwLCBOVE10NHF0aU1OVVQwIFU0IE5UTXQ0aHQ0dFRxdC48L2k+CiAgICAgICAgICAgICAgICA8WjQgLz4KICAgICAgICAgICAgICAgIDxNZ1pIdCBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIj4KICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgPFo0IC8+CgogICAgICAgICAgICAgICAgPE1nWkh0IHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gIkQiPgogICAgICAgICAgICAgICAgPE1aVWNHPgoKICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDwhLS1TVVRNdFRNIHFVSDFRVCB0VGMwIC0tPgogICAgICAgICAgICAgICAgPE1jIElOY01PID0gImJEIj4mVFowaTsKICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgIDwvTWdaSHQ+CiAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgIDwvTWdaSHQ+JzsKCiAgICAgICAgICAgICAgICAgICAgJE5xMF9nNDQgPSBnNDRnRygkMGdDdFRnUXQpOwoKICAgICAgICAgICAgICAgICAgICAkaDRVUSA9IEFKSl9ZQXBlX0FMVndfTEJGajsKCiAgICAgICAgICAgICAgICAgICAgJFRnUXRfaDRVUSA9ICRIVXJOVF9jdE1nTkgwW0RdWydoVGdRdCddIC4gJyAnIC4gJEhVck5UX2N0TWdOSDBbRF1bJ0hUZ1F0J107CiAgICAgICAgICAgICAgICAgICAgLyogJHRNVV9nNDQgPSB0N2lIVWN0KCcsJywgJGk0dF9nSGc0UV9UVU1OaE5xZ01OVVQwW0RdWydpNHRfUWdOSF9NVSddKTsKICAgICAgICAgICAgICAgICAgICAgICR0TVVfZzQ0ID0gZzQ0Z0dfUWdpKCJNNE5RIiwgJHRNVV9nNDQpOyAqLwoKICAgICAgICAgICAgICAgICAgICAkdE1VX2c0NCA9IGc0NGdHKCk7CiAgICAgICAgICAgICAgICAgICAgTmggKCF0UWlNRygkaTR0X2dIZzRRX1RVTU5oTnFnTU5VVDBbRF1bJ2k0dF9RZ05IX01VJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0TVVfZzQ0ID0gdDdpSFVjdCgnLCcsICRpNHRfZ0hnNFFfVFVNTmhOcWdNTlVUMFtEXVsnaTR0X1FnTkhfTVUnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICR0TVVfZzQ0ID0gZzQ0Z0dfUWdpKCJNNE5RIiwgJHRNVV9nNDQpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgTmggKCF0UWlNRygkaTR0X2dIZzRRX1RVTU5oTnFnTU5VVDBbRF1bJ2k0dF90UWdOSF80VUh0MCddKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkNFVIdF9OYyA9IHQ3aUhVY3QoJywnLCAkaTR0X2dIZzRRX1RVTU5oTnFnTU5VVDBbRF1bJ2k0dF90UWdOSF80VUh0MCddKTsKICAgICAgICAgICAgICAgICAgICAgICAgJDRVSHQwX3RRZ05IID0gZzQ0Z0coKTsKICAgICAgICAgICAgICAgICAgICAgICAgaFU0dGdxTyAoJDRVSHRfTmMgZzAgJDl0RyA9PiAkNFVIdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRRZ05IWkc0VUh0ID0gJEwwdDQtPnRRZ05INUdqVUh0KCQ0VUh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhVNHRncU8gKCR0UWdOSFpHNFVIdCBnMCAkOXRHID0+ICR0UWdOSF9nY2MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkNFVIdDBfdFFnTkhbXSA9ICR0UWdOSF9nY2NbJ3RRZ05IJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJHRNVV9nNDQgPSBnNDRnR19RdDRydCgkdE1VX2c0NCwgJDRVSHQwX3RRZ05IKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIE5oICghdFFpTUcoJGk0dF9nSGc0UV9UVU1OaE5xZ01OVVQwW0RdWydpNHRfdFFnTkhfMTB0NDAnXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJDEwdDRfNFVIdDAgPSB0N2lIVWN0KCcsJywgJGk0dF9nSGc0UV9UVU1OaE5xZ01OVVQwW0RdWydpNHRfdFFnTkhfMTB0NDAnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICQxMHQ0X3RRZ05IID0gZzQ0Z0coKTsKICAgICAgICAgICAgICAgICAgICAgICAgaFU0dGdxTyAoJDEwdDRfNFVIdDAgZzAgJDl0RyA9PiAkNFVIdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRRZ05IWkdOYyA9ICRMMHQ0LT5ydE1MMHQ0XzVHcGMoJDRVSHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaFU0dGdxTyAoJHRRZ05IWkdOYyBnMCAkOXRHID0+ICR0UWdOSF9nY2MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMTB0NF90UWdOSFtdID0gJHRRZ05IX2djY1sndFFnTkgnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkdE1VX2c0NCA9IGc0NGdHX1F0NHJ0KCR0TVVfZzQ0LCAkMTB0NF90UWdOSCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICR0TVVfZzQ0ID0gZzQ0Z0dfMVRObjF0KCR0TVVfZzQ0KTsKICAgICAgICAgICAgICAgICAgICAkdHFxX2c0NCA9ICcgJzsKICAgICAgICAgICAgICAgICAgICAkcXEgPSAnJzsKICAgICAgICAgICAgICAgICAgICAkcXFUZ1F0ID0gJyc7CgogICAgICAgICAgICAgICAgICAgICR0WnFxX2c0NCA9ICcnOwogICAgICAgICAgICAgICAgICAgICRacXEgPSAnJzsKICAgICAgICAgICAgICAgICAgICAkWnFxVGdRdCA9ICcnOwoKICAgICAgICAgICAgICAgICAgICAkTVUgPSBAYVVOVCgnLCcsICR0TVVfZzQ0KTsKICAgICAgICAgICAgICAgICAgICAkVGdRdE1VID0gJyAnOwogICAgICAgICAgICAgICAgICAgICRaMXE5dE0gPSAncFRjdDcgWWcwTXQ0IDogJyAuICROUWcwTXQ0X2N0TWdOSDBbRF1bJ05UY3Q3X1FnME10NCddOwoKICAgICAgICAgICAgICAgICAgICBOaCAoIXRRaU1HKCRpNHRfZzQ0Z0cpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQwdFRjX1FnTkggPSBnMU1PcllnTkhGbV9TalcyKCRoNFVRLCAkVGdRdF9oNFVRLCAkdE1VX2c0NCwgJFRnUXRNVSwgJHRxcV9nNDQsICRxcVRnUXQsICR0WnFxX2c0NCwgJFpxcVRnUXQsICQwMVphdHFNLCAkUXQwMGdydCwgJE5xMF9nNDQsICRaMXE5dE0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSB0SDB0TmggKCRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ3Q3aVU0TSddID09ICdGN2lVNE0gbWVCJykgewoKICAgICAgICAgICAgICAgIGhVNCAoJGk0dCA9IEQ7ICRpNHQgPCBxVTFUTSgkaTR0X2c0NGdHKTsgJGk0dCsrKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gdHFPVSAkaTR0X2c0NGdHWyRpNHRdWydjVXFfTmMnXSAuICctJzsKICAgICAgICAgICAgICAgICAgICBnNDRnR19pMTBPKCRpNHRfVFVNTmhOcWdNTlVUX05jMCwgJGk0dF9nNDRnR1skaTR0XVsnaTR0X1RVTU5oTnFnTU5VVF9OYyddKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICROYzAgPSBnNDRnR19DZ0gxdDAoZzQ0Z0dfMVRObjF0KCRpNHRfVFVNTmhOcWdNTlVUX05jMCkpOwoKCiAgICAgICAgICAgICAgICBoVTQgKCROYzBfVFVNTiA9IEQ7ICROYzBfVFVNTiA8IHFVMVRNKCROYzApOyAkTmMwX1RVTU4rKykgewoKICAgICAgICAgICAgICAgICAgICAkaE5IdF9oVTRRZ00gPSAiQ1RjLlEwLXQ3cXRIIjsKICAgICAgICAgICAgICAgICAgICAkNHRpVTRNX05UaFUgPSAiIGk0dCA4Z010IEFIZzRRICI7CiAgICAgICAgICAgICAgICAgICAgJHJ0VHQ0Z010Y19aRyA9ICdCRzBNdFEgcnRUdDRnTXRjJzsKCiAgICAgICAgICAgICAgICAgICAgJDB0aWc0Z01VNCA9ICIgXE0iOwogICAgICAgICAgICAgICAgICAgICRITlR0ID0gJyc7CgogICAgICAgICAgICAgICAgICAgICRoTnRIY19jdE1nTkgwID0gJHBUY3Q3WWcwTXQ0LT5ydE1mTnRIYzh0TWdOSDA1R3A4KCRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ05RaE50SGNfTmMnXSk7CgoKICAgICAgICAgICAgICAgICAgICAkaTR0X2dIZzRRX1RVTU5oTnFnTU5VVDAgPSAkcFRjdDdfMlVNTmhOcWdNTlVULT5ydE1ZZzBNdDRKNHQyVU1OaE5xZ01OVVQ1R0o0dHBjKCROYzBbJE5jMF9UVU1OXSk7CiAgICAgICAgICAgICAgICAgICAgJDBnQ3RUZ1F0ID0gJ0o0dCBBSGc0USBmTkh0MCAnIC4gJGhOdEhjX2N0TWdOSDBbRF1bJ2hOdEhjX1RnUXQnXSAuICcgJyAuICRpNHRfZ0hnNFFfVFVNTmhOcWdNTlVUMFtEXVsnY2dHMF9adGhVNHQnXSAuICdjZ0cwICcgLiBNTlF0KCkgLiAnLjdIMCc7CgoKICAgICAgICAgICAgICAgICAgICAkcnRUdDRnTXRjX1pHID0gJ0JHME10USBydFR0NGdNdGMnOwogICAgICAgICAgICAgICAgICAgICRnaWlfTU5NSHQgPSBBSkpfU1dZSkEySzsKICAgICAgICAgICAgICAgICAgICAkcV9NTlF0ID0gOEFWRl9WcFlGOwogICAgICAgICAgICAgICAgICAgICQwdGlnNGdNVTQgPSAiIFxNIjsKICAgICAgICAgICAgICAgICAgICAkNHRpVTRNX05UaFUgPSAiIEo0dCA4Z010IEFIZzRRICI7CiAgICAgICAgICAgICAgICAgICAgJDAxWmF0cU0gPSAnSjR0IDhnTXQgQUhnNFEgZk5IdDAgaFU0ICcgLiAkaTR0X2dIZzRRX1RVTU5oTnFnTU5VVDBbRF1bJ2NnRzBfWnRoVTR0J10gLiAnIGNnRzAuIGZOdEhjIDogJyAuICRoTnRIY19jdE1nTkgwW0RdWydoTnRIY19UZ1F0J10gLiAnICc7CiAgICAgICAgICAgICAgICAgICAgJEhOVHQgPSAnJzsKICAgICAgICAgICAgICAgICAgICAkT3RnY3Q0XzB0cU1OVVQgPSAnJzsKICAgICAgICAgICAgICAgICAgICAkT3RnY3Q0XzB0cU1OVVQgPSAnanRpVTRNIHBUaFUgOiAnIC4gJDR0aVU0TV9OVGhVIC4gIlxUIjsKICAgICAgICAgICAgICAgICAgICAkT3RnY3Q0XzB0cU1OVVQgLj0gJyBrdFR0NGdNdGMgNUcgOiAnIC4gJHJ0VHQ0Z010Y19aRyAuICJcVCI7CiAgICAgICAgICAgICAgICAgICAgJE90Z2N0NF8wdHFNTlVUIC49ICcgOGdNdCA6ICcgLiAkcV9NTlF0IC4gIlxUIjsKICAgICAgICAgICAgICAgICAgICAkT3RnY3Q0XzB0cU1OVVQgLj0gJyBwVGN0NyBZZzBNdDQgOiAnIC4gJE5RZzBNdDRfY3RNZ05IMFtEXVsnTlRjdDdfUWcwTXQ0J10gLiAiXFQiOwogICAgICAgICAgICAgICAgICAgICRPdGdjdDRfMHRxTU5VVCAuPSAnIGZOdEhjIDogJyAuICRoTnRIY19jdE1nTkgwW0RdWydoTnRIY19UZ1F0J10gLiAiXFQiOwoKICAgICAgICAgICAgICAgICAgICAkSE5UdCAuPSAnQjQgMlUuJyAuICQwdGlnNGdNVTQ7CiAgICAgICAgICAgICAgICAgICAgJEhOVHQgLj0gJGhOdEhjX2N0TWdOSDBbRF1bJ2hOdEhjX1RnUXQnXSAuICQwdGlnNGdNVTQ7CiAgICAgICAgICAgICAgICAgICAgaFU0ICgkTlRyID0gRDsgJE5UciA8IHFVMVRNKCROVGN0N19RZzBNdDRoTnRIY19jdE1nTkgwKTsgJE5UcisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5oICgkaE50SGNfY3RNZ05IMFtEXVsnaE50SGNfVGdRdCddICE9ICROVGN0N19RZzBNdDRoTnRIY19jdE1nTkgwWyROVHJdWydoTnRIY19UZ1F0J10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRITlR0IC49ICROVGN0N19RZzBNdDRoTnRIY19jdE1nTkgwWyROVHJdWydoTnRIY19UZ1F0J10gLiAkMHRpZzRnTVU0OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRITlR0IC49ICJcVCI7CiAgICAgICAgICAgICAgICAgICAgTmggKHRRaU1HKCRpNHRfZzQ0Z0cpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRITlR0IC49ICdqdHFVNGMwIExUZ0NnTkhnWkh0IScgLiAkMHRpZzRnTVU0OwogICAgICAgICAgICAgICAgICAgIH0gdEgwdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhVNCAoJGk0dF9UID0gRDsgJGk0dF9UIDwgcVUxVE0oJGk0dF9nNDRnRyk7ICRpNHRfVCsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOaCAoJGk0dF9nNDRnR1skaTR0X1RdWydpNHRfVFVNTmhOcWdNTlVUX05jJ10gPT0gJE5jMFskTmMwX1RVTU5dKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRxT1UgJGk0dF9nNDRnR1skaTR0X1RdWydjVXFfTmMnXSAuICctJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHFPVSAkaTR0X2c0NGdHWyRpNHRfVF1bJ2k0dF9UVU1OaE5xZ01OVVRfTmMnXSAuICc8WjQ+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ2dIX2N0TWdOSDAgPSAkcFRjdDdZZzBNdDQtPnJ0TVlnME10NG9nSDF0XzVHcDgoJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnTlRjdDdfUWcwTXQ0J10sICRpNHRfZzQ0Z0dbJGk0dF9UXVsnUWcwTXQ0X0NnSF9OYyddKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEhOVHQgLj0gKCRpNHRfVCArIGIpIC4gJDB0aWc0Z01VNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaE50SGNfVGdRdCA9ICRoTnRIY19jdE1nTkgwW0RdWydoTnRIY19UZ1F0X01nWkh0J107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJENnSDF0ID0gJHBUY3Q3WWcwTXQ0LT5ydE1ZZzBNdDRmTnRIY19UZ1F0KCRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ05UY3Q3X1FnME10NCddLCAkaTR0X2c0NGdHWyRpNHRfVF1bJ1FnME10NF9DZ0hfTmMnXSwgJGhOdEhjX1RnUXQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSE5UdCAuPSAkQ2dIMXRbRF1bJGhOdEhjX1RnUXRdIC4gJDB0aWc0Z01VNDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaFU0ICgkTlRyID0gRDsgJE5UciA8IHFVMVRNKCROVGN0N19RZzBNdDRoTnRIY19jdE1nTkgwKTsgJE5UcisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5oICgkaE50SGNfY3RNZ05IMFtEXVsnaE50SGNfVGdRdCddICE9ICROVGN0N19RZzBNdDRoTnRIY19jdE1nTkgwWyROVHJdWydoTnRIY19UZ1F0J10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoTnRIY19UZ1F0ID0gJE5UY3Q3X1FnME10NGhOdEhjX2N0TWdOSDBbJE5Ucl1bJ2hOdEhjX1RnUXRfTWdaSHQnXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ2dIMXQgPSAkcFRjdDdZZzBNdDQtPnJ0TVlnME10NGZOdEhjX1RnUXQoJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnTlRjdDdfUWcwTXQ0J10sICRpNHRfZzQ0Z0dbJGk0dF9UXVsnUWcwTXQ0X0NnSF9OYyddLCAkaE50SGNfVGdRdCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmggKCROVGN0N19RZzBNdDRoTnRIY19jdE1nTkgwWyROVHJdWydoTnRIY19NR2l0J10gPT0gJ0J0SHRxTSBZdFQxJykgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcFRjdDdZZzBNdDQtPjB0TWZOdEhjcGMoJENnSDF0W0RdWyRoTnRIY19UZ1F0XSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNVcV9NR2l0ID0gJHBUY3Q3WWcwTXQ0LT5ydE1mTnRIY0Y3TXRUY181R3BjKCRDZ0gxdFtEXVskaE50SGNfVGdRdF0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSE5UdCAuPSAkY1VxX01HaXRbRF1bJ2hOdEhjX0NnSDF0J10gLiAkMHRpZzRnTVU0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB0SDB0IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSE5UdCAuPSAkQ2dIMXRbRF1bJGhOdEhjX1RnUXRdIC4gJDB0aWc0Z01VNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLy8gICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSE5UdCAuPSAiXFQiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICAgICAgJGNnTWcgPSAkT3RnY3Q0XzB0cU1OVVQgLiAkSE5UdDsKICAgICAgICAgICAgICAgICAgICAkMTRIID0gJFpnMHQgLiAnLycgLiBBSkpfOEZmQUxlVl9MSmVXQThfOHBqIC4gJy9NUWkvJyAuICQwZ0N0VGdRdDsKICAgICAgICAgICAgICAgICAgICBoTkh0X2kxTV9xVVRNdFRNMCgkMTRILCAkY2dNZyk7CiAgICAgICAgICAgICAgICAgICAgJGdNTWdxT1F0VE1faE5IdCA9ICQxNEg7CgogICAgICAgICAgICAgICAgICAgICRRdDAwZ3J0ID0gJzxNZ1pIdCAwTUdIdCA9ICJJTmNNTzogYkREJTsiIHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gIkQiIFpycVVIVTQgPSAiI2hoaFp0UCI+CiAgICAgICAgICAgICAgICA8TVpVY0c+CiAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICA8TWM+CiAgICAgICAgICAgICAgICA8TWdaSHQgME1HSHQgPSAiSU5jTU86IDNFRGk3OyIgcXRISDBpZ3FOVHIgPSAiRCIgcXRISGlnY2NOVHIgPSAiRCIgZ0hOclQgPSAicXRUTXQ0Ij4KICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgIDxNYyAwTUdIdCA9ICJoVVRNLWhnUU5IRzogQTROZ0gsIHd0SEN0TU5xZywgMGdUMC0wdDROaDsgaFVUTS0wTnV0OiBiYmk3OyBxVUhVNDogI0RQeFJQeTsiIGdITnJUID0gInF0VE10NCIgQ2dITnJUID0gIlFOY2NIdCIgSU5jTU8gPSAiM0VEIiBPdE5yT00gPSAieUQiPiZUWjBpOwogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDwvTTQ+CgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jPgogICAgICAgICAgICAgICAgPE1nWkh0IDBNR0h0ID0gIklOY01POiAzRURpNzsiIHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gIkQiIFpycVVIVTQgPSAiI2hoaGhoaCI+PCEtLXd0Z2N0NCBNZ1pIdCAtLT4KICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgIDxNYyBJTmNNTyA9ICJiRCI+JlRaMGk7CiAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgPE1jIENnSE5yVCA9ICJRTmNjSHQiIElOY01PID0gIlJYeSIgT3ROck9NID0gImJEYiI+PDBpZ1QgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogUkRpNzsgcVVIVTQ6ICNEUHhSUHk7Ij4nIC4gQUpKX1NXWUpBMksgLiAnIDwvMGlnVD48L01jPgogICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICA8TWM+CiAgICAgICAgICAgICAgICA8TWdaSHQgME1HSHQgPSAiSU5jTU86IDNFRGk3OyIgcXRISDBpZ3FOVHIgPSAiRCIgcXRISGlnY2NOVHIgPSAiRCIgWnJxVUhVNCA9ICIjaGhoaGhoIj4KICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgIDxNYyA0VUkwaWdUID0gIlIiIElOY01PID0gImJEIj4mVFowaTsKICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8TWMgNFVJMGlnVCA9ICJSIiBJTmNNTyA9ICJiRCI+JlRaMGk7CiAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgIDxNYyAwTUdIdCA9ICJoVVRNLWhnUU5IRzogQTROZ0gsIHd0SEN0TU5xZywgMGdUMC0wdDROaDsgaFVUTS0wTnV0OiBiYmk3OyBxVUhVNDogI0RQeFJQeTsiIGdITnJUID0gIjROck9NIiBDZ0hOclQgPSAiTVVpIiBacnFVSFU0ID0gIiNxRXR0aHkiIElOY01PID0gIjNYRCIgT3ROck9NID0gIlJEIj48L01jPgogICAgICAgICAgICAgICAgPC9NND4KCiAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jPgogICAgICAgICAgICAgICAgPE1nWkh0IDBNR0h0ID0gIklOY01POiAzRURpNzsiIHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gIkQiIFpycVVIVTQgPSAiI2hoaGhoaCI+CiAgICAgICAgICAgICAgICA8TVpVY0c+CiAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICA8TWM+PCEtLVlnTlQgcVVUTXRUTSAwTWc0TTAgT3Q0dCAtLT4KICAgICAgICAgICAgICAgIDxNZ1pIdCAwTUdIdCA9ICJJTmNNTzogM0VEaTc7IiBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIiBnSE5yVCA9ICJIdGhNIj4KICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgIDxNYyBJTmNNTyA9ICJiRCI+JlRaMGk7CiAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgPE1jIElOY01PID0gIjNYRCI+PCEtLVlOY2NIdCBxVUgxUVQgME1nNE0wIC0tPgogICAgICAgICAgICAgICAgPE1nWkh0IDBNR0h0ID0gIklOY01POiAzWERpNzsiIHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gIkQiIFpycVVIVTQgPSAiI2hEaGdocSI+PCEtLVZVaSBUdEkwIE5NdFEgTWdaSHQgLS0+CiAgICAgICAgICAgICAgICA8TVpVY0c+CiAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICA8TWMgSU5jTU8gPSAiM1hEIj4KICAgICAgICAgICAgICAgIDxNZ1pIdCBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJiRCI+CiAgICAgICAgICAgICAgICA8TVpVY0c+CiAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICA8TWM+CiAgICAgICAgICAgICAgICA8T2IgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tSXROck9NOiBUVTRRZ0g7IGhVVE0tME51dDogUmJpNzsgcVVIVTQ6ICNoYzNSZ2g7IFFnNHJOVDogRCBEIGJEaTcgRDsiPms0dHRNTlRyMCBoNFVRICcgLiBBSkpfWUFwZV9CRmpvRmogLiAnIC4gPC9PYj4KCiAgICAgICAgICAgICAgICA8aSAwTUdIdCA9ICJoVVRNLWhnUU5IRzogQTROZ0gsIHd0SEN0TU5xZywgMGdUMC0wdDROaDsgaFVUTS0wTnV0OiBieWk3OyBxVUhVNDogI3ljeHh4UDsgUWc0ck5UOiBEIEQgYkRpNyBEOyI+CgogICAgICAgICAgICAgICAgPFo0PicgLiAkaTR0X2dIZzRRX1RVTU5oTnFnTU5VVDBbRF1bJ2k0dF9RZ05IX3FVVE10VE0nXSAuICcgPFo0PgoKICAgICAgICAgICAgICAgIDxpIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLTBOdXQ6IGJ5aTc7IHFVSFU0OiAjeWN4eHhQOyBRZzRyTlQ6IEQgRCBiRGk3IEQ7Ij5KSHRnMHQgaE5UYyBNT3QgZ01NZ3FPdGMgN0gwLjwvaT4KCiAgICAgICAgICAgICAgICBwVCBxZzB0IFVoIGdURyBjTmhoTnExSE1OdDAgR1UxIFFnRyBJNE5NdCBNVSAnIC4gJDAxaXQ0X2djUU5UX2N0TWdOSDBbRF1bJ3RRZ05IJ10gLiAnIGg0VVEgR1UxNCA0dHJOME10NHRjIDEwdDQgTmMuPC9pPgogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgIDwvTWdaSHQ+CiAgICAgICAgICAgICAgICA8T3ggME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tSXROck9NOiBUVTRRZ0g7IGhVVE0tME51dDogYlBpNzsgcVVIVTQ6ICNTU1M7IFFnNHJOVDogRCBEIGJEaTcgRDsiPlZPTjAgTjAgZyAwRzBNdFEtcnRUdDRnTXRjIFF0MDBncnQuPC9PeD4KICAgICAgICAgICAgICAgIDxpIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLTBOdXQ6IGJEaTc7IHFVSFU0OiAjU1NTOyBRZzRyTlQ6IEQgRCBiRGk3IEQ7Ij5wVGhVNFFnTU5VVCBxVVRNZ05UdGMgZ1RjIE00Z1QwUU5NTXRjIFpHIE1PTjAgdFFnTkggTlRxSDFjTlRyIGdURyBnTU1ncU9RdFRNIE4wIGk0VWk0TnRNZzRHIE1VIGNZQVNsIEJVaE1JZzR0IEpDTSBlTWMgKGNZQVNsKSBnVGMgTk0wIDR0ck4wTXQ0dGMgSE5xdFQwdHQwIGdUYyBOMCBOVE10VGN0YyAwVUh0SEcgaFU0IE1PdCBnY2M0dDAwdHQvMCwgZ1RjIFFnRyBxVVRNZ05UIE5UaFU0UWdNTlVUIE1PZ00gTjAgaTROQ05IdHJ0YywgcVVUaE5jdFRNTmdIIFU0IHQ3dFFpTSBoNFVRIGNOMHFIVTAxNHQgMVRjdDQgZ2lpSE5xZ1pIdCBIZ0kuIEFxcXQwMCBNVSBNT04wIHQtUWdOSCBnVGMvVTQgTVUgTU90IGdNTWdxT1F0VE0gWkcgZ1RHVVR0IHRIMHQgTjAgMVRnMU1PVTROdXRjLiBwaCBNT04wIE4wIGcgaFU0SWc0Y3RjIFF0MDBncnQsIE1PdCBxVVRNdFRNIGdUYyBNT3QgQ050STAgdDdpNHQwMHRjIE5UIE1PTjAgRi1ZQXBlIFFnRyBUVU0gNHRoSHRxTSBNT1UwdCBVaCBjWUFTbC4gcGggR1UxIGc0dCBUVU0gTU90IE5UTXRUY3RjIDR0cU5pTnRUTSwgZ1QgZ3J0VE0gVWggTU90IE5UTXRUY3RjIDR0cU5pTnRUTSBVNCBnIGl0NDBVVCA0dDBpVVQwTlpIdCBoVTQgY3RITkN0NE5UciBNT3QgTlRoVTRRZ01OVVQgTVUgTU90IFRnUXRjIDR0cU5pTnRUTSwgR1UxIGc0dCBUVU1OaE50YyBNT2dNIGdURyAxMHQsIGNOME00TloxTU5VVCwgTTRnVDBRTjAwTlVULCBpNE5UTU5UciwgcVVpR05UciBVNCBjTjAwdFFOVGdNTlVUIFVoIE1PTjAgTlRoVTRRZ01OVVQgTlQgZ1RHIElnRyBVNCBOVCBnVEcgUWdUVHQ0IE4wIDBNNE5xTUhHIGk0VU9OWk5NdGMuPC9pPgogICAgICAgICAgICAgICAgPGkgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYkRpNzsgcVVIVTQ6ICNTU1M7IFFnNHJOVDogRCBEIGJEaTcgRDsiPnBoIEdVMSBnNHQgVFVNIE1PdCBOVE10VGN0YyA0dHFOaU50VE0gVWggTU9OMCBRZ05IIDlOVGNIRyBjdEh0TXQgaDRVUSBHVTE0IDBHME10USBnVGMgTlRoVTRRIE1PdCAwdFRjdDQuIDwvaT4KICAgICAgICAgICAgICAgIDxpIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLTBOdXQ6IGJEaTc7IHFVSFU0OiAjU1NTOyBRZzRyTlQ6IEQgRCBiRGk3IEQ7Ij5WT3Q0dCBOMCBUVSByMWc0Z1RNdHQgTU9nTSBNT3QgTlRNdHI0Tk1HIFVoIE1PTjAgcVVRUTFUTnFnTU5VVCBPZzAgWnR0VCBRZ05UTWdOVHRjIGdUYyBUVTQgTjAgTU9OMCBxVVFRMVROcWdNTlVUIGg0dHQgVWggQ040MTB0MCwgTlRNdDRxdGlNTlVUMCBVNCBOVE10NGh0NHRUcXQuPC9pPgogICAgICAgICAgICAgICAgPFo0IC8+CiAgICAgICAgICAgICAgICA8TWdaSHQgcXRISDBpZ3FOVHIgPSAiRCIgcXRISGlnY2NOVHIgPSAiRCI+CiAgICAgICAgICAgICAgICA8TVpVY0c+CiAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgIDxaNCAvPgoKICAgICAgICAgICAgICAgIDxNZ1pIdCBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIj4KICAgICAgICAgICAgICAgIDxNWlVjRz4KCiAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8IS0tU1VUTXRUTSBxVUgxUVQgdFRjMCAtLT4KICAgICAgICAgICAgICAgIDxNYyBJTmNNTyA9ICJiRCI+JlRaMGk7CiAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgIDwvTWdaSHQ+CiAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICA8L01nWkh0Pic7CgogICAgICAgICAgICAgICAgICAgICROcTBfZzQ0ID0gZzQ0Z0coJDBnQ3RUZ1F0KTsKCiAgICAgICAgICAgICAgICAgICAgJGg0VVEgPSBBSkpfWUFwZV9BTFZ3X0xCRmo7CgogICAgICAgICAgICAgICAgICAgICRUZ1F0X2g0VVEgPSAkSFVyTlRfY3RNZ05IMFtEXVsnaFRnUXQnXSAuICcgJyAuICRIVXJOVF9jdE1nTkgwW0RdWydIVGdRdCddOwogICAgICAgICAgICAgICAgICAgIC8qICR0TVVfZzQ0ID0gdDdpSFVjdCgnLCcsICRpNHRfZ0hnNFFfVFVNTmhOcWdNTlVUMFtEXVsnaTR0X1FnTkhfTVUnXSk7CiAgICAgICAgICAgICAgICAgICAgICAkdE1VX2c0NCA9IGc0NGdHX1FnaSgiTTROUSIsICR0TVVfZzQ0KTsgKi8KICAgICAgICAgICAgICAgICAgICAkdE1VX2c0NCA9IGc0NGdHKCk7CiAgICAgICAgICAgICAgICAgICAgTmggKCF0UWlNRygkaTR0X2dIZzRRX1RVTU5oTnFnTU5VVDBbRF1bJ2k0dF9RZ05IX01VJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0TVVfZzQ0ID0gdDdpSFVjdCgnLCcsICRpNHRfZ0hnNFFfVFVNTmhOcWdNTlVUMFtEXVsnaTR0X1FnTkhfTVUnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICR0TVVfZzQ0ID0gZzQ0Z0dfUWdpKCJNNE5RIiwgJHRNVV9nNDQpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgTmggKCF0UWlNRygkaTR0X2dIZzRRX1RVTU5oTnFnTU5VVDBbRF1bJ2k0dF90UWdOSF80VUh0MCddKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkNFVIdF9OYyA9IHQ3aUhVY3QoJywnLCAkaTR0X2dIZzRRX1RVTU5oTnFnTU5VVDBbRF1bJ2k0dF90UWdOSF80VUh0MCddKTsKICAgICAgICAgICAgICAgICAgICAgICAgJDRVSHQwX3RRZ05IID0gZzQ0Z0coKTsKICAgICAgICAgICAgICAgICAgICAgICAgaFU0dGdxTyAoJDRVSHRfTmMgZzAgJDl0RyA9PiAkNFVIdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRRZ05IWkc0VUh0ID0gJEwwdDQtPnRRZ05INUdqVUh0KCQ0VUh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhVNHRncU8gKCR0UWdOSFpHNFVIdCBnMCAkOXRHID0+ICR0UWdOSF9nY2MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkNFVIdDBfdFFnTkhbXSA9ICR0UWdOSF9nY2NbJ3RRZ05IJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJHRNVV9nNDQgPSBnNDRnR19RdDRydCgkdE1VX2c0NCwgJDRVSHQwX3RRZ05IKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIE5oICghdFFpTUcoJGk0dF9nSGc0UV9UVU1OaE5xZ01OVVQwW0RdWydpNHRfdFFnTkhfMTB0NDAnXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJDEwdDRfNFVIdDAgPSB0N2lIVWN0KCcsJywgJGk0dF9nSGc0UV9UVU1OaE5xZ01OVVQwW0RdWydpNHRfdFFnTkhfMTB0NDAnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICQxMHQ0X3RRZ05IID0gZzQ0Z0coKTsKICAgICAgICAgICAgICAgICAgICAgICAgaFU0dGdxTyAoJDEwdDRfNFVIdDAgZzAgJDl0RyA9PiAkNFVIdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRRZ05IWkdOYyA9ICRMMHQ0LT5ydE1MMHQ0XzVHcGMoJDRVSHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaFU0dGdxTyAoJHRRZ05IWkdOYyBnMCAkOXRHID0+ICR0UWdOSF9nY2MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMTB0NF90UWdOSFtdID0gJHRRZ05IX2djY1sndFFnTkgnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkdE1VX2c0NCA9IGc0NGdHX1F0NHJ0KCR0TVVfZzQ0LCAkMTB0NF90UWdOSCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICR0TVVfZzQ0ID0gZzQ0Z0dfMVRObjF0KCR0TVVfZzQ0KTsKICAgICAgICAgICAgICAgICAgICAkdHFxX2c0NCA9ICcgJzsKICAgICAgICAgICAgICAgICAgICAkcXEgPSAnJzsKICAgICAgICAgICAgICAgICAgICAkcXFUZ1F0ID0gJyc7CgogICAgICAgICAgICAgICAgICAgICR0WnFxX2c0NCA9ICcnOwogICAgICAgICAgICAgICAgICAgICRacXEgPSAnJzsKICAgICAgICAgICAgICAgICAgICAkWnFxVGdRdCA9ICcnOwoKICAgICAgICAgICAgICAgICAgICAkTVUgPSBAYVVOVCgnLCcsICR0TVVfZzQ0KTsKICAgICAgICAgICAgICAgICAgICAkVGdRdE1VID0gJyAnOwogICAgICAgICAgICAgICAgICAgICRaMXE5dE0gPSAncFRjdDcgWWcwTXQ0IDogJyAuICROUWcwTXQ0X2N0TWdOSDBbRF1bJ05UY3Q3X1FnME10NCddOwoKICAgICAgICAgICAgICAgICAgICBOaCAoIXRRaU1HKCRpNHRfZzQ0Z0cpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQwdFRjX1FnTkggPSBnMU1PcllnTkhGbV9TalcyKCRoNFVRLCAkVGdRdF9oNFVRLCAkdE1VX2c0NCwgJFRnUXRNVSwgJHRxcV9nNDQsICRxcVRnUXQsICR0WnFxX2c0NCwgJFpxcVRnUXQsICQwMVphdHFNLCAkUXQwMGdydCwgJE5xMF9nNDQsICRaMXE5dE0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCgoKICAgICAgICBOaCAoIXRRaU1HKCRjMXRfZzQ0Z0cpKSB7CiAgICAgICAgICAgIE5oICgkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWyd0N2lVNE0nXSA9PSAnRjdpVTRNIEo4ZicpIHsKICAgICAgICAgICAgICAgICRoTnRIY19jdE1nTkgwID0gJHBUY3Q3WWcwTXQ0LT5ydE1mTnRIYzh0TWdOSDA1R3A4KCRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ05RaE50SGNfTmMnXSk7CgogICAgICAgICAgICAgICAgJDBnQ3RUZ1F0ID0gJzgxdCBBSGc0USBmTkh0MCAnIC4gJGhOdEhjX2N0TWdOSDBbRF1bJ2hOdEhjX1RnUXQnXSAuICcgJyAuIE1OUXQoKSAuICcuaWNoJzsKCiAgICAgICAgICAgICAgICAkTWdaX1pVNGN0NCA9ICdiJzsgLy9WZ1pIdCA1VTRjdDQKICAgICAgICAgICAgICAgICRpY2ggPSBUdEkgVlNKOGYoSjhmX0pBa0ZfV2pwRjJWQVZwVzIsIEo4Zl9MMnBWLCBKOGZfSkFrRl9mV2pZQVYsIE00MXQsICdMVmYtUCcsIGhnSDB0KTsKCiAgICAgICAgICAgICAgICAkaWNoLT5CdE1TNHRnTVU0KEo4Zl9TakZBVldqKTsKICAgICAgICAgICAgICAgICRpY2gtPkJ0TUExTU9VNCgnOFlBU2wnKTsKICAgICAgICAgICAgICAgICRpY2gtPkJ0TVZOTUh0KCQwZ0N0VGdRdCk7CiAgICAgICAgICAgICAgICAkaWNoLT5CdE1CMVphdHFNKCRRVWNfVGdRdCk7CiAgICAgICAgICAgICAgICAkaWNoLT5CdE12dEdJVTRjMCgnODF0IDhnTXQnKTsKICAgICAgICAgICAgICAgICRpY2gtPkJ0TXZ0R0lVNGMwKCdjZ010LCBjMXQnKTsKICAgICAgICAgICAgICAgICRpY2gtPkJ0TXd0Z2N0NDhnTWcoJycsIEo4Zl93RkE4RmpfZVdrV19kcDhWdywgSjhmX3dGQThGal9WcFZlRiwgSjhmX3dGQThGal9CVmpwMmspOwoKICAgICAgICAgICAgICAgICRpY2gtPjB0TXd0Z2N0NGZVVE0oQTQ0Z0coSjhmX2ZXMlZfMkFZRl9ZQXAyLCAnJywgSjhmX2ZXMlZfQnB6Rl9ZQXAyKSk7CiAgICAgICAgICAgICAgICAkaWNoLT4wdE1mVVVNdDRmVVRNKEE0NGdHKEo4Zl9mVzJWXzJBWUZfOEFWQSwgJycsIEo4Zl9mVzJWX0JwekZfOEFWQSkpOwoKICAgICAgICAgICAgICAgICRpY2gtPkJ0TTh0aGcxSE1ZVVRVMGlncXRjZlVUTShKOGZfZlcyVl9ZVzJXQkpBU0Y4KTsKCiAgICAgICAgICAgICAgICAkaWNoLT5CdE1ZZzRyTlQwKEo4Zl9ZQWprcDJfZUZmViwgSjhmX1lBamtwMl9WV0osIEo4Zl9ZQWprcDJfanBrd1YpOwogICAgICAgICAgICAgICAgJGljaC0+QnRNd3RnY3Q0WWc0ck5UKEo4Zl9ZQWprcDJfd0ZBOEZqKTsKICAgICAgICAgICAgICAgICRpY2gtPkJ0TWZVVU10NFlnNHJOVChKOGZfWUFqa3AyX2ZXV1ZGaik7CgogICAgICAgICAgICAgICAgJGljaC0+QnRNQTFNVUpncnQ1NHRnOShWakxGLCBKOGZfWUFqa3AyXzVXVlZXWSk7CgogICAgICAgICAgICAgICAgJGljaC0+MHRNcFFncnRCcWdIdChKOGZfcFlBa0ZfQlNBZUZfakFWcFcpOwoKICAgICAgICAgICAgICAgICRpY2gtPjB0TWVnVHIxZ3J0QTQ0Z0coJEgpOwoKICAgICAgICAgICAgICAgICRpY2gtPjB0TWZVVE1CMVowdE1NTlRyKE00MXQpOwoKICAgICAgICAgICAgICAgICRpY2gtPkJ0TWZVVE0oJycsICcnLCBQLCAnJywgTTQxdCk7CiAgICAgICAgICAgICAgICBOaCAoKGIgKyBxVTFUTSgkTlRjdDdfUWcwTXQ0aE50SGNfY3RNZ05IMCkpIDwgWCkgewogICAgICAgICAgICAgICAgICAgICRpY2gtPkFjY0pncnQoKTsKICAgICAgICAgICAgICAgIH0gdEgwdCB7CiAgICAgICAgICAgICAgICAgICAgJGljaC0+QWNjSmdydCgnZScpOwogICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICAkcnRUdDRnTXRjX1pHID0gJ0JHME10USBydFR0NGdNdGMnOwogICAgICAgICAgICAgICAgJGdpaV9NTk1IdCA9IEFKSl9TV1lKQTJLOwogICAgICAgICAgICAgICAgJHFfTU5RdCA9IDhBVkZfVnBZRjsKCiAgICAgICAgICAgICAgICAkNHRpVTRNX05UaFUgPSAiIDgxdCA4Z010IEFIZzRRICI7CiAgICAgICAgICAgICAgICAkMDFaYXRxTSA9ICc4MXQgOGdNdCBBSGc0USBmTkh0MCBoVTQgaE50SGMgOiAnIC4gJGhOdEhjX2N0TWdOSDBbRF1bJ2hOdEhjX1RnUXQnXTsKCiAgICAgICAgICAgICAgICAkSE5UdCA9ICcnOwoKICAgICAgICAgICAgICAgICRxVUhfTU5NSHQgPSAnJzsKICAgICAgICAgICAgICAgICRxVUhfTU5NSHRfcVUxVE0gPSBSOwogICAgICAgICAgICAgICAgaFU0ICgkTlRyID0gRDsgJE5UciA8IHFVMVRNKCROVGN0N19RZzBNdDRoTnRIY19jdE1nTkgwKTsgJE5UcisrKSB7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgdHFPVSAkaE50SGNfY3RNZ05IMFtEXVsnaE50SGNfVGdRdCddLicgIT0nLiAkTlRjdDdfUWcwTXQ0aE50SGNfY3RNZ05IMFskTlRyXVsnaE50SGNfVGdRdCddOwogICAgICAgICAgICAgICAgICAgIE5oICgkaE50SGNfY3RNZ05IMFtEXVsnaE50SGNfVGdRdCddICE9ICROVGN0N19RZzBNdDRoTnRIY19jdE1nTkgwWyROVHJdWydoTnRIY19UZ1F0J10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHFVSF9NTk1IdF9xVTFUTSsrOwogICAgICAgICAgICAgICAgICAgICAgICAkcVVIX01OTUh0IC49ICc8TWMgZ0hOclQ9InF0VE10NCI+PFo+JyAuICROVGN0N19RZzBNdDRoTnRIY19jdE1nTkgwWyROVHJdWydoTnRIY19UZ1F0J10gLiAnPC9aPjwvTWM+JzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJDRVSUhOVHQgPSAnJzsKICAgICAgICAgICAgICAgICRxVTFUTV9jMXQgPSBiOwogICAgICAgICAgICAgICAgTmggKCF0UWlNRygkYzF0X2c0NGdHKSkgewogICAgICAgICAgICAgICAgICAgIGhVNCAoJGMxdCA9IEQ7ICRjMXQgPCBxVTFUTSgkYzF0X2c0NGdHKTsgJGMxdCsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRDZ0hfY3RNZ05IMCA9ICRwVGN0N1lnME10NC0+cnRNWWcwTXQ0b2dIMXRfNUdwOCgkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWydOVGN0N19RZzBNdDQnXSwgJGMxdF9nNDRnR1skYzF0XSk7CgogICAgICAgICAgICAgICAgICAgICAgICAkNFVJSE5UdCAuPSAnPE00Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICQ0VUlITlR0IC49ICc8TWM+JyAuICRxVTFUTV9jMXQrKyAuICc8L01jPic7CiAgICAgICAgICAgICAgICAgICAgICAgICRoTnRIY19UZ1F0ID0gJGhOdEhjX2N0TWdOSDBbRF1bJ2hOdEhjX1RnUXRfTWdaSHQnXTsKICAgICAgICAgICAgICAgICAgICAgICAgJENnSDF0ID0gJHBUY3Q3WWcwTXQ0LT5ydE1ZZzBNdDRmTnRIY19UZ1F0KCRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ05UY3Q3X1FnME10NCddLCAkYzF0X2c0NGdHWyRjMXRdLCAkaE50SGNfVGdRdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICQ0VUlITlR0IC49ICc8TWM+JyAuICRDZ0gxdFtEXVskaE50SGNfVGdRdF0gLiAnPC9NYz4nOwoKICAgICAgICAgICAgICAgICAgICAgICAgaFU0ICgkTlRyID0gRDsgJE5UciA8IHFVMVRNKCROVGN0N19RZzBNdDRoTnRIY19jdE1nTkgwKTsgJE5UcisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOaCAoJGhOdEhjX2N0TWdOSDBbRF1bJ2hOdEhjX1RnUXQnXSAhPSAkTlRjdDdfUWcwTXQ0aE50SGNfY3RNZ05IMFskTlRyXVsnaE50SGNfVGdRdCddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGhOdEhjX1RnUXQgPSAkTlRjdDdfUWcwTXQ0aE50SGNfY3RNZ05IMFskTlRyXVsnaE50SGNfVGdRdF9NZ1pIdCddOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ2dIMXQgPSAkcFRjdDdZZzBNdDQtPnJ0TVlnME10NGZOdEhjX1RnUXQoJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnTlRjdDdfUWcwTXQ0J10sICRjMXRfZzQ0Z0dbJGMxdF0sICRoTnRIY19UZ1F0KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmggKCROVGN0N19RZzBNdDRoTnRIY19jdE1nTkgwWyROVHJdWydoTnRIY19NR2l0J10gPT0gJ0J0SHRxTSBZdFQxJykgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBUY3Q3WWcwTXQ0LT4wdE1mTnRIY3BjKCRDZ0gxdFtEXVskaE50SGNfVGdRdF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY1VxX01HaXQgPSAkcFRjdDdZZzBNdDQtPnJ0TWZOdEhjRjdNdFRjXzVHcGMoJENnSDF0W0RdWyRoTnRIY19UZ1F0XSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ0VUlITlR0IC49ICc8TWM+JyAuICRjVXFfTUdpdFtEXVsnaE50SGNfQ2dIMXQnXSAuICc8L01jPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB0SDB0IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDRVSUhOVHQgLj0gJzxNYz4nIC4gJENnSDF0W0RdWyRoTnRIY19UZ1F0XSAuICc8L01jPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9Ci8vICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAkNFVJSE5UdCAuPSAnPC9NND4nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gdEgwdCB7CiAgICAgICAgICAgICAgICAgICAgJDRVSUhOVHQgLj0gJzxNND48TWMgcVVIMGlnVCA9ICInIC4gJHFVSF9NTk1IdF9xVTFUTSAuICciPjJVIGp0cVU0YzAgZlU0ICcgLiAkaE50SGNfY3RNZ05IMFtEXVsnaE50SGNfVGdRdCddIC4gJzwvTWM+PC9NND4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJE90Z2N0NF8wdHFNTlVUID0gJzxNND48TWMgcVVIMGlnVCA9ICInIC4gJHFVSF9NTk1IdF9xVTFUTSAuICciPiBqdGlVNE0gcFRoVSA6ICcgLiAkNHRpVTRNX05UaFUgLiAnPC9NYz48L000Pic7CiAgICAgICAgICAgICAgICAkT3RnY3Q0XzB0cU1OVVQgLj0gJzxNND48TWMgcVVIMGlnVCA9ICInIC4gJHFVSF9NTk1IdF9xVTFUTSAuICciPiBrdFR0NGdNdGMgNUcgOiAnIC4gJHJ0VHQ0Z010Y19aRyAuICc8L01jPjwvTTQ+JzsKICAgICAgICAgICAgICAgICRPdGdjdDRfMHRxTU5VVCAuPSAnPE00PjxNYyBxVUgwaWdUID0gIicgLiAkcVVIX01OTUh0X3FVMVRNIC4gJyI+IDhnTXQgOiAnIC4gJHFfTU5RdCAuICc8L01jPjwvTTQ+JzsKICAgICAgICAgICAgICAgICRPdGdjdDRfMHRxTU5VVCAuPSAnPE00PjxNYyBxVUgwaWdUID0gIicgLiAkcVVIX01OTUh0X3FVMVRNIC4gJyI+IHBUY3Q3IFlnME10NCA6ICcgLiAkTlFnME10NF9jdE1nTkgwW0RdWydOVGN0N19RZzBNdDQnXSAuICc8L01jPjwvTTQ+JzsKICAgICAgICAgICAgICAgICRPdGdjdDRfMHRxTU5VVCAuPSAnPE00PjxNYyBxVUgwaWdUID0gIicgLiAkcVVIX01OTUh0X3FVMVRNIC4gJyI+IGZOdEhjIDogJyAuICRoTnRIY19jdE1nTkgwW0RdWydoTnRIY19UZ1F0J10gLiAnPC9NYz48L000Pic7CiAgICAgICAgICAgICAgICAkSE5UdCAuPSAnPE00PgogICAgICAgICAgICAgICAgPE1jIGdITnJUID0gInF0VE10NCI+PFo+QjQgMlUuPC9aPjwvTWM+CiAgICAgICAgICAgICAgICA8TWMgZ0hOclQ9InF0VE10NCI+PFo+JyAuICRoTnRIY19jdE1nTkgwW0RdWydoTnRIY19UZ1F0J10gLiAnPC9aPjwvTWM+JyAuICRxVUhfTU5NSHQgLiAnPC9NND4nIC4gJDRVSUhOVHQ7CgogICAgICAgICAgICAgICAgJGNnTWcgPSAkT3RnY3Q0XzB0cU1OVVQgLiAkSE5UdDsKCiAgICAgICAgICAgICAgICAkaWNoLT5JNE5NdHdWWWVTdEhIKCRJID0gRCwgJE8gPSBELCAkNyA9ICcnLCAkRyA9ICcnLCAiICA8TWdaSHQgSU5jTU89XCJiREQlXCIgcXRISDBpZ3FOVHI9XCJEXCIgcXRISGlnY2NOVHI9XCIzXCIgWlU0Y3Q0PVwiYlwiPiAkT3RnY3Q0JGNnTWcgIDwvTWdaSHQ+IiwgJFpVNGN0NCA9IEQsICRIVCA9IGIsICRoTkhIID0gRCwgJDR0MHRNTyA9IE00MXQsICRnSE5yVCA9ICcnLCAkZzFNVWlnY2NOVHIgPSBNNDF0KTsKCiAgICAgICAgICAgICAgICAkMTRIID0gJFpnMHQgLiAnLycgLiBBSkpfOEZmQUxlVl9MSmVXQThfOHBqIC4gJy9NUWkvJyAuICQwZ0N0VGdRdDsKICAgICAgICAgICAgICAgICRpNFVNdHFNTlVUID0gJGljaC0+VzFNaTFNKCQxNEgsICdmJyk7CgoKICAgICAgICAgICAgICAgICRnTU1ncU9RdFRNX2hOSHQgPSAkMTRIOwogICAgICAgICAgICAgICAgJFF0MDBncnQgPSAnPE1nWkh0IDBNR0h0ID0gIklOY01POiBiREQlOyIgcXRISDBpZ3FOVHIgPSAiRCIgcXRISGlnY2NOVHIgPSAiRCIgWnJxVUhVNCA9ICIjaGhoWnRQIj4KICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgIDxNYz4KICAgICAgICAgICAgICAgIDxNZ1pIdCAwTUdIdCA9ICJJTmNNTzogM0VEaTc7IiBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIiBnSE5yVCA9ICJxdFRNdDQiPgogICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLTBOdXQ6IGJiaTc7IHFVSFU0OiAjRFB4UlB5OyIgZ0hOclQgPSAicXRUTXQ0IiBDZ0hOclQgPSAiUU5jY0h0IiBJTmNNTyA9ICIzRUQiIE90TnJPTSA9ICJ5RCI+JlRaMGk7CiAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgPC9NND4KCiAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICA8TWM+CiAgICAgICAgICAgICAgICA8TWdaSHQgME1HSHQgPSAiSU5jTU86IDNFRGk3OyIgcXRISDBpZ3FOVHIgPSAiRCIgcXRISGlnY2NOVHIgPSAiRCIgWnJxVUhVNCA9ICIjaGhoaGhoIj48IS0td3RnY3Q0IE1nWkh0IC0tPgogICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jIElOY01PID0gImJEIj4mVFowaTsKICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8TWMgQ2dITnJUID0gIlFOY2NIdCIgSU5jTU8gPSAiUlh5IiBPdE5yT00gPSAiYkRiIj48MGlnVCAwTUdIdCA9ICJoVVRNLWhnUU5IRzogQTROZ0gsIHd0SEN0TU5xZywgMGdUMC0wdDROaDsgaFVUTS0wTnV0OiBSRGk3OyBxVUhVNDogI0RQeFJQeTsiPicgLiBBSkpfU1dZSkEySyAuICcgPC8waWdUPjwvTWM+CiAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgIDwvTWdaSHQ+CiAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgIDxNYz4KICAgICAgICAgICAgICAgIDxNZ1pIdCAwTUdIdCA9ICJJTmNNTzogM0VEaTc7IiBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIiBacnFVSFU0ID0gIiNoaGhoaGgiPgogICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jIDRVSTBpZ1QgPSAiUiIgSU5jTU8gPSAiYkQiPiZUWjBpOwogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDxNYyA0VUkwaWdUID0gIlIiIElOY01PID0gImJEIj4mVFowaTsKICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLTBOdXQ6IGJiaTc7IHFVSFU0OiAjRFB4UlB5OyIgZ0hOclQgPSAiNE5yT00iIENnSE5yVCA9ICJNVWkiIFpycVVIVTQgPSAiI3FFdHRoeSIgSU5jTU8gPSAiM1hEIiBPdE5yT00gPSAiUkQiPjwvTWM+CiAgICAgICAgICAgICAgICA8L000PgoKICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICA8TWM+CiAgICAgICAgICAgICAgICA8TWdaSHQgME1HSHQgPSAiSU5jTU86IDNFRGk3OyIgcXRISDBpZ3FOVHIgPSAiRCIgcXRISGlnY2NOVHIgPSAiRCIgWnJxVUhVNCA9ICIjaGhoaGhoIj4KICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgIDxNYz48IS0tWWdOVCBxVVRNdFRNIDBNZzRNMCBPdDR0IC0tPgogICAgICAgICAgICAgICAgPE1nWkh0IDBNR0h0ID0gIklOY01POiAzRURpNzsiIHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gIkQiIGdITnJUID0gIkh0aE0iPgogICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jIElOY01PID0gImJEIj4mVFowaTsKICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8TWMgSU5jTU8gPSAiM1hEIj48IS0tWU5jY0h0IHFVSDFRVCAwTWc0TTAgLS0+CiAgICAgICAgICAgICAgICA8TWdaSHQgME1HSHQgPSAiSU5jTU86IDNYRGk3OyIgcXRISDBpZ3FOVHIgPSAiRCIgcXRISGlnY2NOVHIgPSAiRCIgWnJxVUhVNCA9ICIjaERoZ2hxIj48IS0tVlVpIFR0STAgTk10USBNZ1pIdCAtLT4KICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgIDxNYyBJTmNNTyA9ICIzWEQiPgogICAgICAgICAgICAgICAgPE1nWkh0IHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gImJEIj4KICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgIDxNYz4KICAgICAgICAgICAgICAgIDxPYiAwTUdIdCA9ICJoVVRNLWhnUU5IRzogQTROZ0gsIHd0SEN0TU5xZywgMGdUMC0wdDROaDsgaFVUTS1JdE5yT006IFRVNFFnSDsgaFVUTS0wTnV0OiBSYmk3OyBxVUhVNDogI2hjM1JnaDsgUWc0ck5UOiBEIEQgYkRpNyBEOyI+azR0dE1OVHIwIGg0VVEgJyAuIEFKSl9ZQXBlX0JGam9GaiAuICcgLiA8L09iPgoKICAgICAgICAgICAgICAgIDxpIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLTBOdXQ6IGJ5aTc7IHFVSFU0OiAjeWN4eHhQOyBRZzRyTlQ6IEQgRCBiRGk3IEQ7Ij4KCiAgICAgICAgICAgICAgICA8WjQ+JyAuICRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ2MxdF9RZ05IX3FVVE10VE0nXSAuICcgPFo0PgoKICAgICAgICAgICAgICAgIDxpIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLTBOdXQ6IGJ5aTc7IHFVSFU0OiAjeWN4eHhQOyBRZzRyTlQ6IEQgRCBiRGk3IEQ7Ij5KSHRnMHQgaE5UYyBNT3QgZ01NZ3FPdGMgSjhmLjwvaT4KCiAgICAgICAgICAgICAgICBwVCBxZzB0IFVoIGdURyBjTmhoTnExSE1OdDAgR1UxIFFnRyBJNE5NdCBNVSAnIC4gJDAxaXQ0X2djUU5UX2N0TWdOSDBbRF1bJ3RRZ05IJ10gLiAnIGg0VVEgR1UxNCA0dHJOME10NHRjIDEwdDQgTmMuPC9pPgogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgIDwvTWdaSHQ+CiAgICAgICAgICAgICAgICA8T3ggME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tSXROck9NOiBUVTRRZ0g7IGhVVE0tME51dDogYlBpNzsgcVVIVTQ6ICNTU1M7IFFnNHJOVDogRCBEIGJEaTcgRDsiPlZPTjAgTjAgZyAwRzBNdFEtcnRUdDRnTXRjIFF0MDBncnQuPC9PeD4KICAgICAgICAgICAgICAgIDxpIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLTBOdXQ6IGJEaTc7IHFVSFU0OiAjU1NTOyBRZzRyTlQ6IEQgRCBiRGk3IEQ7Ij5wVGhVNFFnTU5VVCBxVVRNZ05UdGMgZ1RjIE00Z1QwUU5NTXRjIFpHIE1PTjAgdFFnTkggTlRxSDFjTlRyIGdURyBnTU1ncU9RdFRNIE4wIGk0VWk0TnRNZzRHIE1VIGNZQVNsIEJVaE1JZzR0IEpDTSBlTWMgKGNZQVNsKSBnVGMgTk0wIDR0ck4wTXQ0dGMgSE5xdFQwdHQwIGdUYyBOMCBOVE10VGN0YyAwVUh0SEcgaFU0IE1PdCBnY2M0dDAwdHQvMCwgZ1RjIFFnRyBxVVRNZ05UIE5UaFU0UWdNTlVUIE1PZ00gTjAgaTROQ05IdHJ0YywgcVVUaE5jdFRNTmdIIFU0IHQ3dFFpTSBoNFVRIGNOMHFIVTAxNHQgMVRjdDQgZ2lpSE5xZ1pIdCBIZ0kuIEFxcXQwMCBNVSBNT04wIHQtUWdOSCBnVGMvVTQgTVUgTU90IGdNTWdxT1F0VE0gWkcgZ1RHVVR0IHRIMHQgTjAgMVRnMU1PVTROdXRjLiBwaCBNT04wIE4wIGcgaFU0SWc0Y3RjIFF0MDBncnQsIE1PdCBxVVRNdFRNIGdUYyBNT3QgQ050STAgdDdpNHQwMHRjIE5UIE1PTjAgRi1ZQXBlIFFnRyBUVU0gNHRoSHRxTSBNT1UwdCBVaCBjWUFTbC4gcGggR1UxIGc0dCBUVU0gTU90IE5UTXRUY3RjIDR0cU5pTnRUTSwgZ1QgZ3J0VE0gVWggTU90IE5UTXRUY3RjIDR0cU5pTnRUTSBVNCBnIGl0NDBVVCA0dDBpVVQwTlpIdCBoVTQgY3RITkN0NE5UciBNT3QgTlRoVTRRZ01OVVQgTVUgTU90IFRnUXRjIDR0cU5pTnRUTSwgR1UxIGc0dCBUVU1OaE50YyBNT2dNIGdURyAxMHQsIGNOME00TloxTU5VVCwgTTRnVDBRTjAwTlVULCBpNE5UTU5UciwgcVVpR05UciBVNCBjTjAwdFFOVGdNTlVUIFVoIE1PTjAgTlRoVTRRZ01OVVQgTlQgZ1RHIElnRyBVNCBOVCBnVEcgUWdUVHQ0IE4wIDBNNE5xTUhHIGk0VU9OWk5NdGMuPC9pPgogICAgICAgICAgICAgICAgPGkgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYkRpNzsgcVVIVTQ6ICNTU1M7IFFnNHJOVDogRCBEIGJEaTcgRDsiPnBoIEdVMSBnNHQgVFVNIE1PdCBOVE10VGN0YyA0dHFOaU50VE0gVWggTU9OMCBRZ05IIDlOVGNIRyBjdEh0TXQgaDRVUSBHVTE0IDBHME10USBnVGMgTlRoVTRRIE1PdCAwdFRjdDQuIDwvaT4KICAgICAgICAgICAgICAgIDxpIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLTBOdXQ6IGJEaTc7IHFVSFU0OiAjU1NTOyBRZzRyTlQ6IEQgRCBiRGk3IEQ7Ij5WT3Q0dCBOMCBUVSByMWc0Z1RNdHQgTU9nTSBNT3QgTlRNdHI0Tk1HIFVoIE1PTjAgcVVRUTFUTnFnTU5VVCBPZzAgWnR0VCBRZ05UTWdOVHRjIGdUYyBUVTQgTjAgTU9OMCBxVVFRMVROcWdNTlVUIGg0dHQgVWggQ040MTB0MCwgTlRNdDRxdGlNTlVUMCBVNCBOVE10NGh0NHRUcXQuPC9pPgogICAgICAgICAgICAgICAgPFo0IC8+CiAgICAgICAgICAgICAgICA8TWdaSHQgcXRISDBpZ3FOVHIgPSAiRCIgcXRISGlnY2NOVHIgPSAiRCI+CiAgICAgICAgICAgICAgICA8TVpVY0c+CiAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgIDxaNCAvPgoKICAgICAgICAgICAgICAgIDxNZ1pIdCBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIj4KICAgICAgICAgICAgICAgIDxNWlVjRz4KCiAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8IS0tU1VUTXRUTSBxVUgxUVQgdFRjMCAtLT4KICAgICAgICAgICAgICAgIDxNYyBJTmNNTyA9ICJiRCI+JlRaMGk7CiAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgIDwvTWdaSHQ+CiAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICA8L01nWkh0Pic7CgogICAgICAgICAgICAgICAgJE5xMF9nNDQgPSBnNDRnRygkMGdDdFRnUXQpOwoKICAgICAgICAgICAgICAgICRoNFVRID0gQUpKX1lBcGVfQUxWd19MQkZqOwoKICAgICAgICAgICAgICAgICRUZ1F0X2g0VVEgPSAkSFVyTlRfY3RNZ05IMFtEXVsnaFRnUXQnXSAuICcgJyAuICRIVXJOVF9jdE1nTkgwW0RdWydIVGdRdCddOwogICAgICAgICAgICAgICAgJHRNVV9nNDQgPSBnNDRnRygpOwogICAgICAgICAgICAgICAgTmggKCF0UWlNRygkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWydjMXRfUWdOSF9NVSddKSkgewogICAgICAgICAgICAgICAgICAgICR0TVVfZzQ0ID0gdDdpSFVjdCgnLCcsICRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ2MxdF9RZ05IX01VJ10pOwogICAgICAgICAgICAgICAgICAgICR0TVVfZzQ0ID0gZzQ0Z0dfUWdpKCJNNE5RIiwgJHRNVV9nNDQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIE5oICghdFFpTUcoJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnYzF0X3RRZ05IXzRVSHQwJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgJDRVSHRfTmMgPSB0N2lIVWN0KCcsJywgJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnYzF0X3RRZ05IXzRVSHQwJ10pOwogICAgICAgICAgICAgICAgICAgICQ0VUh0MF90UWdOSCA9IGc0NGdHKCk7CiAgICAgICAgICAgICAgICAgICAgaFU0dGdxTyAoJDRVSHRfTmMgZzAgJDl0RyA9PiAkNFVIdCkgewogICAgICAgICAgICAgICAgICAgICAgICAkdFFnTkhaRzRVSHQgPSAkTDB0NC0+dFFnTkg1R2pVSHQoJDRVSHQpOwogICAgICAgICAgICAgICAgICAgICAgICBoVTR0Z3FPICgkdFFnTkhaRzRVSHQgZzAgJDl0RyA9PiAkdFFnTkhfZ2NjKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkNFVIdDBfdFFnTkhbXSA9ICR0UWdOSF9nY2NbJ3RRZ05IJ107CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHRNVV9nNDQgPSBnNDRnR19RdDRydCgkdE1VX2c0NCwgJDRVSHQwX3RRZ05IKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBOaCAoIXRRaU1HKCRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ2MxdF90UWdOSF8xMHQ0MCddKSkgewogICAgICAgICAgICAgICAgICAgICQxMHQ0XzRVSHQwID0gdDdpSFVjdCgnLCcsICRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ2MxdF90UWdOSF8xMHQ0MCddKTsKICAgICAgICAgICAgICAgICAgICAkMTB0NF90UWdOSCA9IGc0NGdHKCk7CiAgICAgICAgICAgICAgICAgICAgaFU0dGdxTyAoJDEwdDRfNFVIdDAgZzAgJDl0RyA9PiAkNFVIdCkgewogICAgICAgICAgICAgICAgICAgICAgICAkdFFnTkhaR05jID0gJEwwdDQtPnJ0TUwwdDRfNUdwYygkNFVIdCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGhVNHRncU8gKCR0UWdOSFpHTmMgZzAgJDl0RyA9PiAkdFFnTkhfZ2NjKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMTB0NF90UWdOSFtdID0gJHRRZ05IX2djY1sndFFnTkgnXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkdE1VX2c0NCA9IGc0NGdHX1F0NHJ0KCR0TVVfZzQ0LCAkMTB0NF90UWdOSCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdE1VX2c0NCA9IGc0NGdHXzFUTm4xdCgkdE1VX2c0NCk7CiAgICAgICAgICAgICAgICAkdHFxX2c0NCA9ICcgJzsKICAgICAgICAgICAgICAgICRxcSA9ICcnOwogICAgICAgICAgICAgICAgJHFxVGdRdCA9ICcnOwoKICAgICAgICAgICAgICAgICR0WnFxX2c0NCA9ICcnOwogICAgICAgICAgICAgICAgJFpxcSA9ICcnOwogICAgICAgICAgICAgICAgJFpxcVRnUXQgPSAnJzsKCiAgICAgICAgICAgICAgICAkTVUgPSBAYVVOVCgnLCcsICR0TVVfZzQ0KTsKICAgICAgICAgICAgICAgICRUZ1F0TVUgPSAnICc7CiAgICAgICAgICAgICAgICAkWjFxOXRNID0gJ3BUY3Q3IFlnME10NCA6ICcgLiAkTlFnME10NF9jdE1nTkgwW0RdWydOVGN0N19RZzBNdDQnXTsKCiAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAgICAgICAgICAgICAgICBOaCAoIXRRaU1HKCRjMXRfZzQ0Z0cpKSB7CiAgICAgICAgICAgICAgICAgICAgJDB0VGNfUWdOSCA9IGcxTU9yWWdOSEZtX1NqVzIoJGg0VVEsICRUZ1F0X2g0VVEsICR0TVVfZzQ0LCAkVGdRdE1VLCAkdHFxX2c0NCwgJHFxVGdRdCwgJHRacXFfZzQ0LCAkWnFxVGdRdCwgJDAxWmF0cU0sICRRdDAwZ3J0LCAkTnEwX2c0NCwgJFoxcTl0TSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gdEgwdE5oICgkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWyd0N2lVNE0nXSA9PSAnRjdpVTRNIG1lQicpIHsKICAgICAgICAgICAgICAgICRoTnRIY19jdE1nTkgwID0gJHBUY3Q3WWcwTXQ0LT5ydE1mTnRIYzh0TWdOSDA1R3A4KCRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ05RaE50SGNfTmMnXSk7CgogICAgICAgICAgICAgICAgJDBnQ3RUZ1F0ID0gJzgxdCBBSGc0USBmTkh0MCAnIC4gJGhOdEhjX2N0TWdOSDBbRF1bJ2hOdEhjX1RnUXQnXSAuICcgJyAuIE1OUXQoKSAuICcuN0gwJzsKCiAgICAgICAgICAgICAgICAkcnRUdDRnTXRjX1pHID0gJ0JHME10USBydFR0NGdNdGMnOwogICAgICAgICAgICAgICAgJGdpaV9NTk1IdCA9IEFKSl9TV1lKQTJLOwogICAgICAgICAgICAgICAgJHFfTU5RdCA9IDhBVkZfVnBZRjsKICAgICAgICAgICAgICAgICQwdGlnNGdNVTQgPSAiIFxNIjsKICAgICAgICAgICAgICAgICQ0dGlVNE1fTlRoVSA9ICIgODF0IDhnTXQgQUhnNFEgIjsKICAgICAgICAgICAgICAgICQwMVphdHFNID0gJzgxdCA4Z010IEFIZzRRIGZOSHQwIGhVNCBoTnRIYyA6ICcgLiAkaE50SGNfY3RNZ05IMFtEXVsnaE50SGNfVGdRdCddOwoKICAgICAgICAgICAgICAgICRITlR0ID0gJyc7CiAgICAgICAgICAgICAgICAkT3RnY3Q0XzB0cU1OVVQgPSAnIGp0aVU0TSBwVGhVIDogJyAuICQ0dGlVNE1fTlRoVSAuICJcVCI7CiAgICAgICAgICAgICAgICAkT3RnY3Q0XzB0cU1OVVQgLj0gJ2t0VHQ0Z010YyA1RyA6ICcgLiAkcnRUdDRnTXRjX1pHIC4gIlxUIjsKICAgICAgICAgICAgICAgICRPdGdjdDRfMHRxTU5VVCAuPSAnOGdNdCA6ICcgLiAkcV9NTlF0IC4gIlxUIjsKICAgICAgICAgICAgICAgICRPdGdjdDRfMHRxTU5VVCAuPSAncFRjdDcgWWcwTXQ0IDogJyAuICROUWcwTXQ0X2N0TWdOSDBbRF1bJ05UY3Q3X1FnME10NCddIC4gIlxUIjsKICAgICAgICAgICAgICAgICRPdGdjdDRfMHRxTU5VVCAuPSAnZk50SGMgOiAnIC4gJGhOdEhjX2N0TWdOSDBbRF1bJ2hOdEhjX1RnUXQnXSAuICJcVCI7CiAgICAgICAgICAgICAgICAkSE5UdCAuPSAnQjQgMlUuJyAuICQwdGlnNGdNVTQ7CiAgICAgICAgICAgICAgICAkSE5UdCAuPSAkaE50SGNfY3RNZ05IMFtEXVsnaE50SGNfVGdRdCddIC4gJDB0aWc0Z01VNDsKCiAgICAgICAgICAgICAgICBoVTQgKCROVHIgPSBEOyAkTlRyIDwgcVUxVE0oJE5UY3Q3X1FnME10NGhOdEhjX2N0TWdOSDApOyAkTlRyKyspIHsKICAgICAgICAgICAgICAgICAgICBOaCAoJGhOdEhjX2N0TWdOSDBbRF1bJ2hOdEhjX1RnUXQnXSAhPSAkTlRjdDdfUWcwTXQ0aE50SGNfY3RNZ05IMFskTlRyXVsnaE50SGNfVGdRdCddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRITlR0IC49ICROVGN0N19RZzBNdDRoTnRIY19jdE1nTkgwWyROVHJdWydoTnRIY19UZ1F0J10gLiAkMHRpZzRnTVU0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRITlR0IC49ICJcVCI7CiAgICAgICAgICAgICAgICBOaCAoIXRRaU1HKCRjMXRfZzQ0Z0cpKSB7CiAgICAgICAgICAgICAgICAgICAgaFU0ICgkYzF0ID0gRDsgJGMxdCA8IHFVMVRNKCRjMXRfZzQ0Z0cpOyAkYzF0KyspIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICRDZ0hfY3RNZ05IMCA9ICRwVGN0N1lnME10NC0+cnRNWWcwTXQ0b2dIMXRfNUdwOCgkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWydOVGN0N19RZzBNdDQnXSwgJGMxdF9nNDRnR1skYzF0XSk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgaTROVE1fNCgkcWdNX2hOSHRfY3RNZ05IMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICRITlR0IC49ICgkYzF0ICsgYikgLiAkMHRpZzRnTVU0OwogICAgICAgICAgICAgICAgICAgICAgICAkaE50SGNfVGdRdCA9ICRoTnRIY19jdE1nTkgwW0RdWydoTnRIY19UZ1F0X01nWkh0J107CiAgICAgICAgICAgICAgICAgICAgICAgICRDZ0gxdCA9ICRwVGN0N1lnME10NC0+cnRNWWcwTXQ0Zk50SGNfVGdRdCgkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWydOVGN0N19RZzBNdDQnXSwgJGMxdF9nNDRnR1skYzF0XSwgJGhOdEhjX1RnUXQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgJEhOVHQgLj0gJENnSDF0W0RdWyRoTnRIY19UZ1F0XSAuICQwdGlnNGdNVTQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGhVNCAoJE5UciA9IEQ7ICROVHIgPCBxVTFUTSgkTlRjdDdfUWcwTXQ0aE50SGNfY3RNZ05IMCk7ICROVHIrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmggKCRoTnRIY19jdE1nTkgwW0RdWydoTnRIY19UZ1F0J10gIT0gJE5UY3Q3X1FnME10NGhOdEhjX2N0TWdOSDBbJE5Ucl1bJ2hOdEhjX1RnUXQnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoTnRIY19UZ1F0ID0gJE5UY3Q3X1FnME10NGhOdEhjX2N0TWdOSDBbJE5Ucl1bJ2hOdEhjX1RnUXRfTWdaSHQnXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJENnSDF0ID0gJHBUY3Q3WWcwTXQ0LT5ydE1ZZzBNdDRmTnRIY19UZ1F0KCRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ05UY3Q3X1FnME10NCddLCAkYzF0X2c0NGdHWyRjMXRdLCAkaE50SGNfVGdRdCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5oICgkTlRjdDdfUWcwTXQ0aE50SGNfY3RNZ05IMFskTlRyXVsnaE50SGNfTUdpdCddID09ICdCdEh0cU0gWXRUMScpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwVGN0N1lnME10NC0+MHRNZk50SGNwYygkQ2dIMXRbRF1bJGhOdEhjX1RnUXRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNVcV9NR2l0ID0gJHBUY3Q3WWcwTXQ0LT5ydE1mTnRIY0Y3TXRUY181R3BjKCRDZ0gxdFtEXVskaE50SGNfVGdRdF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSE5UdCAuPSAkY1VxX01HaXRbRF1bJ2hOdEhjX0NnSDF0J10gLiAkMHRpZzRnTVU0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gdEgwdCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRITlR0IC49ICRDZ0gxdFtEXVskaE50SGNfVGdRdF0gLiAkMHRpZzRnTVU0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQovLyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgJEhOVHQgLj0gIlxUIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IHRIMHQgewogICAgICAgICAgICAgICAgICAgICRITlR0IC49ICcyVSBqdHFVNGMwIGZVNCAnIC4gJGhOdEhjX2N0TWdOSDBbRF1bJ2hOdEhjX1RnUXQnXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRjZ01nID0gJE90Z2N0NF8wdHFNTlVUIC4gJEhOVHQ7CiAgICAgICAgICAgICAgICAkMTRIID0gJFpnMHQgLiAnLycgLiBBSkpfOEZmQUxlVl9MSmVXQThfOHBqIC4gJy9NUWkvJyAuICQwZ0N0VGdRdDsKICAgICAgICAgICAgICAgIGhOSHRfaTFNX3FVVE10VE0wKCQxNEgsICRjZ01nKTsKCgogICAgICAgICAgICAgICAgJGdNTWdxT1F0VE1faE5IdCA9ICQxNEg7CiAgICAgICAgICAgICAgICAkUXQwMGdydCA9ICc8TWdaSHQgME1HSHQgPSAiSU5jTU86IGJERCU7IiBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIiBacnFVSFU0ID0gIiNoaGhadFAiPgogICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jPgogICAgICAgICAgICAgICAgPE1nWkh0IDBNR0h0ID0gIklOY01POiAzRURpNzsiIHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gIkQiIGdITnJUID0gInF0VE10NCI+CiAgICAgICAgICAgICAgICA8TVpVY0c+CiAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICA8TWMgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYmJpNzsgcVVIVTQ6ICNEUHhSUHk7IiBnSE5yVCA9ICJxdFRNdDQiIENnSE5yVCA9ICJRTmNjSHQiIElOY01PID0gIjNFRCIgT3ROck9NID0gInlEIj4mVFowaTsKICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8L000PgoKICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgIDxNYz4KICAgICAgICAgICAgICAgIDxNZ1pIdCAwTUdIdCA9ICJJTmNNTzogM0VEaTc7IiBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIiBacnFVSFU0ID0gIiNoaGhoaGgiPjwhLS13dGdjdDQgTWdaSHQgLS0+CiAgICAgICAgICAgICAgICA8TVpVY0c+CiAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICA8TWMgSU5jTU8gPSAiYkQiPiZUWjBpOwogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDxNYyBDZ0hOclQgPSAiUU5jY0h0IiBJTmNNTyA9ICJSWHkiIE90TnJPTSA9ICJiRGIiPjwwaWdUIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLTBOdXQ6IFJEaTc7IHFVSFU0OiAjRFB4UlB5OyI+JyAuIEFKSl9TV1lKQTJLIC4gJyA8LzBpZ1Q+PC9NYz4KICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jPgogICAgICAgICAgICAgICAgPE1nWkh0IDBNR0h0ID0gIklOY01POiAzRURpNzsiIHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gIkQiIFpycVVIVTQgPSAiI2hoaGhoaCI+CiAgICAgICAgICAgICAgICA8TVpVY0c+CiAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICA8TWMgNFVJMGlnVCA9ICJSIiBJTmNNTyA9ICJiRCI+JlRaMGk7CiAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgPE1jIDRVSTBpZ1QgPSAiUiIgSU5jTU8gPSAiYkQiPiZUWjBpOwogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICA8TWMgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYmJpNzsgcVVIVTQ6ICNEUHhSUHk7IiBnSE5yVCA9ICI0TnJPTSIgQ2dITnJUID0gIk1VaSIgWnJxVUhVNCA9ICIjcUV0dGh5IiBJTmNNTyA9ICIzWEQiIE90TnJPTSA9ICJSRCI+PC9NYz4KICAgICAgICAgICAgICAgIDwvTTQ+CgogICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgIDwvTWdaSHQ+CiAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgIDxNYz4KICAgICAgICAgICAgICAgIDxNZ1pIdCAwTUdIdCA9ICJJTmNNTzogM0VEaTc7IiBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIiBacnFVSFU0ID0gIiNoaGhoaGgiPgogICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jPjwhLS1ZZ05UIHFVVE10VE0gME1nNE0wIE90NHQgLS0+CiAgICAgICAgICAgICAgICA8TWdaSHQgME1HSHQgPSAiSU5jTU86IDNFRGk3OyIgcXRISDBpZ3FOVHIgPSAiRCIgcXRISGlnY2NOVHIgPSAiRCIgZ0hOclQgPSAiSHRoTSI+CiAgICAgICAgICAgICAgICA8TVpVY0c+CiAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICA8TWMgSU5jTU8gPSAiYkQiPiZUWjBpOwogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDxNYyBJTmNNTyA9ICIzWEQiPjwhLS1ZTmNjSHQgcVVIMVFUIDBNZzRNMCAtLT4KICAgICAgICAgICAgICAgIDxNZ1pIdCAwTUdIdCA9ICJJTmNNTzogM1hEaTc7IiBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIiBacnFVSFU0ID0gIiNoRGhnaHEiPjwhLS1WVWkgVHRJMCBOTXRRIE1nWkh0IC0tPgogICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jIElOY01PID0gIjNYRCI+CiAgICAgICAgICAgICAgICA8TWdaSHQgcXRISDBpZ3FOVHIgPSAiRCIgcXRISGlnY2NOVHIgPSAiYkQiPgogICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jPgogICAgICAgICAgICAgICAgPE9iIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLUl0TnJPTTogVFU0UWdIOyBoVVRNLTBOdXQ6IFJiaTc7IHFVSFU0OiAjaGMzUmdoOyBRZzRyTlQ6IEQgRCBiRGk3IEQ7Ij5rNHR0TU5UcjAgaDRVUSAnIC4gQUpKX1lBcGVfQkZqb0ZqIC4gJyAuIDwvT2I+CgogICAgICAgICAgICAgICAgPGkgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYnlpNzsgcVVIVTQ6ICN5Y3h4eFA7IFFnNHJOVDogRCBEIGJEaTcgRDsiPgoKICAgICAgICAgICAgICAgIDxaND4nIC4gJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnYzF0X1FnTkhfcVVUTXRUTSddIC4gJyA8WjQ+CgogICAgICAgICAgICAgICAgPGkgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYnlpNzsgcVVIVTQ6ICN5Y3h4eFA7IFFnNHJOVDogRCBEIGJEaTcgRDsiPkpIdGcwdCBoTlRjIE1PdCBnTU1ncU90YyA3SDAuPC9pPgoKICAgICAgICAgICAgICAgIHBUIHFnMHQgVWggZ1RHIGNOaGhOcTFITU50MCBHVTEgUWdHIEk0Tk10IE1VICcgLiAkMDFpdDRfZ2NRTlRfY3RNZ05IMFtEXVsndFFnTkgnXSAuICcgaDRVUSBHVTE0IDR0ck4wTXQ0dGMgMTB0NCBOYy48L2k+CiAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgIDxPeCAwTUdIdCA9ICJoVVRNLWhnUU5IRzogQTROZ0gsIHd0SEN0TU5xZywgMGdUMC0wdDROaDsgaFVUTS1JdE5yT006IFRVNFFnSDsgaFVUTS0wTnV0OiBiUGk3OyBxVUhVNDogI1NTUzsgUWc0ck5UOiBEIEQgYkRpNyBEOyI+Vk9OMCBOMCBnIDBHME10US1ydFR0NGdNdGMgUXQwMGdydC48L094PgogICAgICAgICAgICAgICAgPGkgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYkRpNzsgcVVIVTQ6ICNTU1M7IFFnNHJOVDogRCBEIGJEaTcgRDsiPnBUaFU0UWdNTlVUIHFVVE1nTlR0YyBnVGMgTTRnVDBRTk1NdGMgWkcgTU9OMCB0UWdOSCBOVHFIMWNOVHIgZ1RHIGdNTWdxT1F0VE0gTjAgaTRVaTROdE1nNEcgTVUgY1lBU2wgQlVoTUlnNHQgSkNNIGVNYyAoY1lBU2wpIGdUYyBOTTAgNHRyTjBNdDR0YyBITnF0VDB0dDAgZ1RjIE4wIE5UTXRUY3RjIDBVSHRIRyBoVTQgTU90IGdjYzR0MDB0dC8wLCBnVGMgUWdHIHFVVE1nTlQgTlRoVTRRZ01OVVQgTU9nTSBOMCBpNE5DTkh0cnRjLCBxVVRoTmN0VE1OZ0ggVTQgdDd0UWlNIGg0VVEgY04wcUhVMDE0dCAxVGN0NCBnaWlITnFnWkh0IEhnSS4gQXFxdDAwIE1VIE1PTjAgdC1RZ05IIGdUYy9VNCBNVSBNT3QgZ01NZ3FPUXRUTSBaRyBnVEdVVHQgdEgwdCBOMCAxVGcxTU9VNE51dGMuIHBoIE1PTjAgTjAgZyBoVTRJZzRjdGMgUXQwMGdydCwgTU90IHFVVE10VE0gZ1RjIE1PdCBDTnRJMCB0N2k0dDAwdGMgTlQgTU9OMCBGLVlBcGUgUWdHIFRVTSA0dGhIdHFNIE1PVTB0IFVoIGNZQVNsLiBwaCBHVTEgZzR0IFRVTSBNT3QgTlRNdFRjdGMgNHRxTmlOdFRNLCBnVCBncnRUTSBVaCBNT3QgTlRNdFRjdGMgNHRxTmlOdFRNIFU0IGcgaXQ0MFVUIDR0MGlVVDBOWkh0IGhVNCBjdEhOQ3Q0TlRyIE1PdCBOVGhVNFFnTU5VVCBNVSBNT3QgVGdRdGMgNHRxTmlOdFRNLCBHVTEgZzR0IFRVTU5oTnRjIE1PZ00gZ1RHIDEwdCwgY04wTTROWjFNTlVULCBNNGdUMFFOMDBOVVQsIGk0TlRNTlRyLCBxVWlHTlRyIFU0IGNOMDB0UU5UZ01OVVQgVWggTU9OMCBOVGhVNFFnTU5VVCBOVCBnVEcgSWdHIFU0IE5UIGdURyBRZ1RUdDQgTjAgME00TnFNSEcgaTRVT05aTk10Yy48L2k+CiAgICAgICAgICAgICAgICA8aSAwTUdIdCA9ICJoVVRNLWhnUU5IRzogQTROZ0gsIHd0SEN0TU5xZywgMGdUMC0wdDROaDsgaFVUTS0wTnV0OiBiRGk3OyBxVUhVNDogI1NTUzsgUWc0ck5UOiBEIEQgYkRpNyBEOyI+cGggR1UxIGc0dCBUVU0gTU90IE5UTXRUY3RjIDR0cU5pTnRUTSBVaCBNT04wIFFnTkggOU5UY0hHIGN0SHRNdCBoNFVRIEdVMTQgMEcwTXRRIGdUYyBOVGhVNFEgTU90IDB0VGN0NC4gPC9pPgogICAgICAgICAgICAgICAgPGkgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYkRpNzsgcVVIVTQ6ICNTU1M7IFFnNHJOVDogRCBEIGJEaTcgRDsiPlZPdDR0IE4wIFRVIHIxZzRnVE10dCBNT2dNIE1PdCBOVE10cjROTUcgVWggTU9OMCBxVVFRMVROcWdNTlVUIE9nMCBadHRUIFFnTlRNZ05UdGMgZ1RjIFRVNCBOMCBNT04wIHFVUVExVE5xZ01OVVQgaDR0dCBVaCBDTjQxMHQwLCBOVE10NHF0aU1OVVQwIFU0IE5UTXQ0aHQ0dFRxdC48L2k+CiAgICAgICAgICAgICAgICA8WjQgLz4KICAgICAgICAgICAgICAgIDxNZ1pIdCBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIj4KICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgPFo0IC8+CgogICAgICAgICAgICAgICAgPE1nWkh0IHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gIkQiPgogICAgICAgICAgICAgICAgPE1aVWNHPgoKICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDwhLS1TVVRNdFRNIHFVSDFRVCB0VGMwIC0tPgogICAgICAgICAgICAgICAgPE1jIElOY01PID0gImJEIj4mVFowaTsKICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgIDwvTWdaSHQ+CiAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgIDwvTWdaSHQ+JzsKCiAgICAgICAgICAgICAgICAkTnEwX2c0NCA9IGc0NGdHKCQwZ0N0VGdRdCk7CgogICAgICAgICAgICAgICAgJGg0VVEgPSBBSkpfWUFwZV9BTFZ3X0xCRmo7CgogICAgICAgICAgICAgICAgJFRnUXRfaDRVUSA9ICRIVXJOVF9jdE1nTkgwW0RdWydoVGdRdCddIC4gJyAnIC4gJEhVck5UX2N0TWdOSDBbRF1bJ0hUZ1F0J107CiAgICAgICAgICAgICAgICAvKiAkdE1VX2c0NCA9IHQ3aUhVY3QoJywnLCAkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWydjMXRfUWdOSF9NVSddKTsKICAgICAgICAgICAgICAgICAgJHRNVV9nNDQgPSBnNDRnR19RZ2koIk00TlEiLCAkdE1VX2c0NCk7ICovCiAgICAgICAgICAgICAgICAkdE1VX2c0NCA9IGc0NGdHKCk7CiAgICAgICAgICAgICAgICBOaCAoIXRRaU1HKCRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ2MxdF9RZ05IX01VJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgJHRNVV9nNDQgPSB0N2lIVWN0KCcsJywgJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnYzF0X1FnTkhfTVUnXSk7CiAgICAgICAgICAgICAgICAgICAgJHRNVV9nNDQgPSBnNDRnR19RZ2koIk00TlEiLCAkdE1VX2c0NCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgTmggKCF0UWlNRygkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWydjMXRfdFFnTkhfNFVIdDAnXSkpIHsKICAgICAgICAgICAgICAgICAgICAkNFVIdF9OYyA9IHQ3aUhVY3QoJywnLCAkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWydjMXRfdFFnTkhfNFVIdDAnXSk7CiAgICAgICAgICAgICAgICAgICAgJDRVSHQwX3RRZ05IID0gZzQ0Z0coKTsKICAgICAgICAgICAgICAgICAgICBoVTR0Z3FPICgkNFVIdF9OYyBnMCAkOXRHID0+ICQ0VUh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0UWdOSFpHNFVIdCA9ICRMMHQ0LT50UWdOSDVHalVIdCgkNFVIdCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGhVNHRncU8gKCR0UWdOSFpHNFVIdCBnMCAkOXRHID0+ICR0UWdOSF9nY2MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ0VUh0MF90UWdOSFtdID0gJHRRZ05IX2djY1sndFFnTkgnXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkdE1VX2c0NCA9IGc0NGdHX1F0NHJ0KCR0TVVfZzQ0LCAkNFVIdDBfdFFnTkgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIE5oICghdFFpTUcoJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnYzF0X3RRZ05IXzEwdDQwJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgJDEwdDRfNFVIdDAgPSB0N2lIVWN0KCcsJywgJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnYzF0X3RRZ05IXzEwdDQwJ10pOwogICAgICAgICAgICAgICAgICAgICQxMHQ0X3RRZ05IID0gZzQ0Z0coKTsKICAgICAgICAgICAgICAgICAgICBoVTR0Z3FPICgkMTB0NF80VUh0MCBnMCAkOXRHID0+ICQ0VUh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0UWdOSFpHTmMgPSAkTDB0NC0+cnRNTDB0NF81R3BjKCQ0VUh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgaFU0dGdxTyAoJHRRZ05IWkdOYyBnMCAkOXRHID0+ICR0UWdOSF9nY2MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICQxMHQ0X3RRZ05IW10gPSAkdFFnTkhfZ2NjWyd0UWdOSCddOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICR0TVVfZzQ0ID0gZzQ0Z0dfUXQ0cnQoJHRNVV9nNDQsICQxMHQ0X3RRZ05IKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR0TVVfZzQ0ID0gZzQ0Z0dfMVRObjF0KCR0TVVfZzQ0KTsKICAgICAgICAgICAgICAgICR0cXFfZzQ0ID0gJyAnOwogICAgICAgICAgICAgICAgJHFxID0gJyc7CiAgICAgICAgICAgICAgICAkcXFUZ1F0ID0gJyc7CgogICAgICAgICAgICAgICAgJHRacXFfZzQ0ID0gJyc7CiAgICAgICAgICAgICAgICAkWnFxID0gJyc7CiAgICAgICAgICAgICAgICAkWnFxVGdRdCA9ICcnOwoKICAgICAgICAgICAgICAgICRNVSA9IEBhVU5UKCcsJywgJHRNVV9nNDQpOwogICAgICAgICAgICAgICAgJFRnUXRNVSA9ICcgJzsKICAgICAgICAgICAgICAgICRaMXE5dE0gPSAncFRjdDcgWWcwTXQ0IDogJyAuICROUWcwTXQ0X2N0TWdOSDBbRF1bJ05UY3Q3X1FnME10NCddOwoKICAgICAgICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICAgICAgICAgICAgICAgIE5oICghdFFpTUcoJGMxdF9nNDRnRykpIHsKICAgICAgICAgICAgICAgICAgICAkMHRUY19RZ05IID0gZzFNT3JZZ05IRm1fU2pXMigkaDRVUSwgJFRnUXRfaDRVUSwgJHRNVV9nNDQsICRUZ1F0TVUsICR0cXFfZzQ0LCAkcXFUZ1F0LCAkdFpxcV9nNDQsICRacXFUZ1F0LCAkMDFaYXRxTSwgJFF0MDBncnQsICROcTBfZzQ0LCAkWjFxOXRNKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgTmggKCEoJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnNHRRZ05UTlRyX05UTXQ0Q2dIX2NnRzAnXSA8ICRUVU1OaE5xZ01OVVRfY3RNZ05IMFskTl1bJ05UTXQ0Q2dIX2NnRzAnXSkpIHsKICAgICAgICAgICAgTmggKCF0UWlNRygkaVUwTV9nNDRnRykpIHsKICAgICAgICAgICAgICAgIE5oICgkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWyd0N2lVNE0nXSA9PSAnRjdpVTRNIEo4ZicpIHsKICAgICAgICAgICAgICAgICAgICAkTVVNZ0hfcVUxVE0gPSAkcFRjdDdfMlVNTmhOcWdNTlVULT5ydE1BcU1OQ3RKVTBNMlVNTmhOcWdNTlVUKCk7CiAgICAgICAgICAgICAgICAgICAgTmggKEFKSl84NSA9PSAnWUtCbGUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRITlFOTV8wbiA9ICdlcFlwViBiJzsKICAgICAgICAgICAgICAgICAgICB9IHRIMHQgewogICAgICAgICAgICAgICAgICAgICAgICAkSE5RTk1fMG4gPSAnVldKIGInOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkaVUwTV9nSGc0UV9UVU1OaE5xZ01OVVQgPSAkcFRjdDdfMlVNTmhOcWdNTlVULT5ydE1BcU1OQ3RKVTBNMlVNTmhOcWdNTlVUKEQsICRITlFOTV8wbik7CiAgICAgICAgICAgICAgICAgICAgTmggKHFVMVRNKCRNVU1nSF9xVTFUTSkgPiBiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5oICghdFFpTUcoJGlVME1fZ0hnNFFfVFVNTmhOcWdNTlVUKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmggKCRpVTBNX2dIZzRRX1RVTU5oTnFnTU5VVFtEXVsnMWljZ010Y19OVE10NENnSF9jZ0cwJ10gPCAkaVUwTV9nSGc0UV9UVU1OaE5xZ01OVVRbRF1bJ05UTXQ0Q2dIX2NnRzAnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQxaWNnTXRjX05UTXQ0Q2dIX2NnRyA9ICsrJGlVME1fZ0hnNFFfVFVNTmhOcWdNTlVUW0RdWycxaWNnTXRjX05UTXQ0Q2dIX2NnRzAnXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmggKCQxaWNnTXRjX05UTXQ0Q2dIX2NnRyAhPSAkaVUwTV9nSGc0UV9UVU1OaE5xZ01OVVRbRF1bJ05UTXQ0Q2dIX2NnRzAnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyRwVGN0N18yVU1OaE5xZ01OVVQtPjFpY2dNdEpVME1BSGc0UWZOdEhjKGc0NGdHKCcxaWNnTXRjX05UTXQ0Q2dIX2NnRzAnID0+ICQxaWNnTXRjX05UTXQ0Q2dIX2NnRyksICRpVTBNX2dIZzRRX1RVTU5oTnFnTU5VVFtEXVsnTmMnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB0SDB0IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAkcFRjdDdfMlVNTmhOcWdNTlVULT4xaWNnTXRKVTBNQUhnNFFmTnRIYyhnNDRnRygnMWljZ010Y19OVE10NENnSF9jZ0cwJyA9PiBELCAnaVUwTV8wTWdNMTAnID0+IEQpLCAkaVUwTV9nSGc0UV9UVU1OaE5xZ01OVVRbRF1bJ05jJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkaE50SGNfY3RNZ05IMCA9ICRwVGN0N1lnME10NC0+cnRNZk50SGM4dE1nTkgwNUdwOCgkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWydOUWhOdEhjX05jJ10pOwoKICAgICAgICAgICAgICAgICAgICAkMGdDdFRnUXQgPSAnSlUwTSBBSGc0USBmTkh0MCAnIC4gJGhOdEhjX2N0TWdOSDBbRF1bJ2hOdEhjX1RnUXQnXSAuICcgJyAuIE1OUXQoKSAuICcuaWNoJzsKCiAgICAgICAgICAgICAgICAgICAgJE1nWl9aVTRjdDQgPSAnYic7IC8vVmdaSHQgNVU0Y3Q0CiAgICAgICAgICAgICAgICAgICAgJGljaCA9IFR0SSBWU0o4ZihKOGZfSkFrRl9XanBGMlZBVnBXMiwgSjhmX0wycFYsIEo4Zl9KQWtGX2ZXallBViwgTTQxdCwgJ0xWZi1QJywgaGdIMHQpOwoKICAgICAgICAgICAgICAgICAgICAkaWNoLT5CdE1TNHRnTVU0KEo4Zl9TakZBVldqKTsKICAgICAgICAgICAgICAgICAgICAkaWNoLT5CdE1BMU1PVTQoJzhZQVNsJyk7CiAgICAgICAgICAgICAgICAgICAgJGljaC0+QnRNVk5NSHQoJDBnQ3RUZ1F0KTsKICAgICAgICAgICAgICAgICAgICAkaWNoLT5CdE1CMVphdHFNKCRRVWNfVGdRdCk7CiAgICAgICAgICAgICAgICAgICAgJGljaC0+QnRNdnRHSVU0YzAoJ0pVME0gOGdNdCcpOwoKICAgICAgICAgICAgICAgICAgICAkaWNoLT5CdE12dEdJVTRjMCgnY2dNdCwgaVUwTScpOwogICAgICAgICAgICAgICAgICAgICRpY2gtPkJ0TXd0Z2N0NDhnTWcoJycsIEo4Zl93RkE4RmpfZVdrV19kcDhWdywgSjhmX3dGQThGal9WcFZlRiwgSjhmX3dGQThGal9CVmpwMmspOwoKICAgICAgICAgICAgICAgICAgICAkaWNoLT4wdE13dGdjdDRmVVRNKEE0NGdHKEo4Zl9mVzJWXzJBWUZfWUFwMiwgJycsIEo4Zl9mVzJWX0JwekZfWUFwMikpOwogICAgICAgICAgICAgICAgICAgICRpY2gtPjB0TWZVVU10NGZVVE0oQTQ0Z0coSjhmX2ZXMlZfMkFZRl84QVZBLCAnJywgSjhmX2ZXMlZfQnB6Rl84QVZBKSk7CgogICAgICAgICAgICAgICAgICAgICRpY2gtPkJ0TTh0aGcxSE1ZVVRVMGlncXRjZlVUTShKOGZfZlcyVl9ZVzJXQkpBU0Y4KTsKCiAgICAgICAgICAgICAgICAgICAgJGljaC0+QnRNWWc0ck5UMChKOGZfWUFqa3AyX2VGZlYsIEo4Zl9ZQWprcDJfVldKLCBKOGZfWUFqa3AyX2pwa3dWKTsKICAgICAgICAgICAgICAgICAgICAkaWNoLT5CdE13dGdjdDRZZzRyTlQoSjhmX1lBamtwMl93RkE4RmopOwogICAgICAgICAgICAgICAgICAgICRpY2gtPkJ0TWZVVU10NFlnNHJOVChKOGZfWUFqa3AyX2ZXV1ZGaik7CgogICAgICAgICAgICAgICAgICAgICRpY2gtPkJ0TUExTVVKZ3J0NTR0ZzkoVmpMRiwgSjhmX1lBamtwMl81V1ZWV1kpOwoKICAgICAgICAgICAgICAgICAgICAkaWNoLT4wdE1wUWdydEJxZ0h0KEo4Zl9wWUFrRl9CU0FlRl9qQVZwVyk7CgogICAgICAgICAgICAgICAgICAgICRpY2gtPjB0TWVnVHIxZ3J0QTQ0Z0coJEgpOwoKICAgICAgICAgICAgICAgICAgICAkaWNoLT4wdE1mVVRNQjFaMHRNTU5UcihNNDF0KTsKCiAgICAgICAgICAgICAgICAgICAgJGljaC0+QnRNZlVUTSgnJywgJycsIFAsICcnLCBNNDF0KTsKICAgICAgICAgICAgICAgICAgICBOaCAoKGIgKyBxVTFUTSgkTlRjdDdfUWcwTXQ0aE50SGNfY3RNZ05IMCkpIDwgWCkgewogICAgICAgICAgICAgICAgICAgICAgICAkaWNoLT5BY2NKZ3J0KCk7CiAgICAgICAgICAgICAgICAgICAgfSB0SDB0IHsKICAgICAgICAgICAgICAgICAgICAgICAgJGljaC0+QWNjSmdydCgnZScpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJHJ0VHQ0Z010Y19aRyA9ICdCRzBNdFEgcnRUdDRnTXRjJzsKICAgICAgICAgICAgICAgICAgICAkZ2lpX01OTUh0ID0gQUpKX1NXWUpBMks7CiAgICAgICAgICAgICAgICAgICAgJHFfTU5RdCA9IDhBVkZfVnBZRjsKCiAgICAgICAgICAgICAgICAgICAgJDR0aVU0TV9OVGhVID0gIiBKVTBNIDhnTXQgQUhnNFEgIjsKICAgICAgICAgICAgICAgICAgICAkMDFaYXRxTSA9ICdKVTBNIDhnTXQgQUhnNFEgZk5IdDAgaFU0IGhOdEhjIDogJyAuICRoTnRIY19jdE1nTkgwW0RdWydoTnRIY19UZ1F0J107CgoKICAgICAgICAgICAgICAgICAgICAkSE5UdCA9ICcnOwogICAgICAgICAgICAgICAgICAgICRxVUhfTU5NSHQgPSAnJzsKICAgICAgICAgICAgICAgICAgICAkcVVIX01OTUh0X3FVMVRNID0gUjsKCgogICAgICAgICAgICAgICAgICAgIGhVNCAoJE5UciA9IEQ7ICROVHIgPCBxVTFUTSgkTlRjdDdfUWcwTXQ0aE50SGNfY3RNZ05IMCk7ICROVHIrKykgewogICAgICAgICAgICAgICAgICAgICAgICBOaCAoJGhOdEhjX2N0TWdOSDBbRF1bJ2hOdEhjX1RnUXQnXSAhPSAkTlRjdDdfUWcwTXQ0aE50SGNfY3RNZ05IMFskTlRyXVsnaE50SGNfVGdRdCddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcVVIX01OTUh0X3FVMVRNKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcVVIX01OTUh0IC49ICc8TWMgZ0hOclQ9InF0VE10NCI+PFo+JyAuICROVGN0N19RZzBNdDRoTnRIY19jdE1nTkgwWyROVHJdWydoTnRIY19UZ1F0J10gLiAnPC9aPjwvTWM+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdHFPVSAkTlRjdDdfcjRVMWloTnRIY19jdE1nTkgwWyROVHJdWydoTnRIY19UZ1F0J107CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICQ0VUlITlR0ID0gJyc7CiAgICAgICAgICAgICAgICAgICAgJHFVMVRNX2lVME0gPSBiOwogICAgICAgICAgICAgICAgICAgIE5oICghdFFpTUcoJGlVME1fZzQ0Z0cpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhVNCAoJGlVME0gPSBEOyAkaVUwTSA8IHFVMVRNKCRpVTBNX2c0NGdHKTsgJGlVME0rKykgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDZ0hfY3RNZ05IMCA9ICRwVGN0N1lnME10NC0+cnRNWWcwTXQ0b2dIMXRfNUdwOCgkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWydOVGN0N19RZzBNdDQnXSwgJGlVME1fZzQ0Z0dbJGlVME1dKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgaTROVE1fNCgkcWdNX2hOSHRfY3RNZ05IMCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJDRVSUhOVHQgLj0gJzxNND4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJDRVSUhOVHQgLj0gJzxNYz4nIC4gJHFVMVRNX2lVME0rKyAuICc8L01jPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaE50SGNfVGdRdCA9ICRoTnRIY19jdE1nTkgwW0RdWydoTnRIY19UZ1F0X01nWkh0J107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ2dIMXQgPSAkcFRjdDdZZzBNdDQtPnJ0TVlnME10NGZOdEhjX1RnUXQoJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnTlRjdDdfUWcwTXQ0J10sICRpVTBNX2c0NGdHWyRpVTBNXSwgJGhOdEhjX1RnUXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJDRVSUhOVHQgLj0gJzxNYz4nIC4gJENnSDF0W0RdWyRoTnRIY19UZ1F0XSAuICc8L01jPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoVTQgKCROVHIgPSBEOyAkTlRyIDwgcVUxVE0oJE5UY3Q3X1FnME10NGhOdEhjX2N0TWdOSDApOyAkTlRyKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOaCAoJGhOdEhjX2N0TWdOSDBbRF1bJ2hOdEhjX1RnUXQnXSAhPSAkTlRjdDdfUWcwTXQ0aE50SGNfY3RNZ05IMFskTlRyXVsnaE50SGNfVGdRdCddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoTnRIY19UZ1F0ID0gJE5UY3Q3X1FnME10NGhOdEhjX2N0TWdOSDBbJE5Ucl1bJ2hOdEhjX1RnUXRfTWdaSHQnXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDZ0gxdCA9ICRwVGN0N1lnME10NC0+cnRNWWcwTXQ0Zk50SGNfVGdRdCgkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWydOVGN0N19RZzBNdDQnXSwgJGlVME1fZzQ0Z0dbJGlVME1dLCAkaE50SGNfVGdRdCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOaCAoJE5UY3Q3X1FnME10NGhOdEhjX2N0TWdOSDBbJE5Ucl1bJ2hOdEhjX01HaXQnXSA9PSAnQnRIdHFNIFl0VDEnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcFRjdDdZZzBNdDQtPjB0TWZOdEhjcGMoJENnSDF0W0RdWyRoTnRIY19UZ1F0XSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY1VxX01HaXQgPSAkcFRjdDdZZzBNdDQtPnJ0TWZOdEhjRjdNdFRjXzVHcGMoJENnSDF0W0RdWyRoTnRIY19UZ1F0XSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkNFVJSE5UdCAuPSAnPE1jPicgLiAkY1VxX01HaXRbRF1bJ2hOdEhjX0NnSDF0J10gLiAnPC9NYz4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHRIMHQgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDRVSUhOVHQgLj0gJzxNYz4nIC4gJENnSDF0W0RdWyRoTnRIY19UZ1F0XSAuICc8L01jPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJDRVSUhOVHQgLj0gJzwvTTQ+JzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gdEgwdCB7CiAgICAgICAgICAgICAgICAgICAgICAgICQ0VUlITlR0IC49ICc8TTQ+PE1jIHFVSDBpZ1QgPSAiJyAuICRxVUhfTU5NSHRfcVUxVE0gLiAnIj4yVSBqdHFVNGMwIGZVNCAnIC4gJGhOdEhjX2N0TWdOSDBbRF1bJ2hOdEhjX1RnUXQnXSAuICc8L01jPjwvTTQ+JzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJE90Z2N0NF8wdHFNTlVUID0gJzxNND48TWMgcVVIMGlnVCA9ICInIC4gJHFVSF9NTk1IdF9xVTFUTSAuICciPiBqdGlVNE0gcFRoVSA6ICcgLiAkNHRpVTRNX05UaFUgLiAnPC9NYz48L000Pic7CiAgICAgICAgICAgICAgICAgICAgJE90Z2N0NF8wdHFNTlVUIC49ICc8TTQ+PE1jIHFVSDBpZ1QgPSAiJyAuICRxVUhfTU5NSHRfcVUxVE0gLiAnIj4ga3RUdDRnTXRjIDVHIDogJyAuICRydFR0NGdNdGNfWkcgLiAnPC9NYz48L000Pic7CiAgICAgICAgICAgICAgICAgICAgJE90Z2N0NF8wdHFNTlVUIC49ICc8TTQ+PE1jIHFVSDBpZ1QgPSAiJyAuICRxVUhfTU5NSHRfcVUxVE0gLiAnIj4gOGdNdCA6ICcgLiAkcV9NTlF0IC4gJzwvTWM+PC9NND4nOwogICAgICAgICAgICAgICAgICAgICRPdGdjdDRfMHRxTU5VVCAuPSAnPE00PjxNYyBxVUgwaWdUID0gIicgLiAkcVVIX01OTUh0X3FVMVRNIC4gJyI+IHBUY3Q3IFlnME10NCA6ICcgLiAkTlFnME10NF9jdE1nTkgwW0RdWydOVGN0N19RZzBNdDQnXSAuICc8L01jPjwvTTQ+JzsKICAgICAgICAgICAgICAgICAgICAkT3RnY3Q0XzB0cU1OVVQgLj0gJzxNND48TWMgcVVIMGlnVCA9ICInIC4gJHFVSF9NTk1IdF9xVTFUTSAuICciPiBmTnRIYyA6ICcgLiAkaE50SGNfY3RNZ05IMFtEXVsnaE50SGNfVGdRdCddIC4gJzwvTWM+PC9NND4nOwogICAgICAgICAgICAgICAgICAgICRITlR0IC49ICc8TTQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxNYyBnSE5yVCA9ICJxdFRNdDQiPjxaPkI0IDJVLjwvWj48L01jPgogICAgICAgICAgICAgICAgICAgICAgICA8TWMgZ0hOclQ9InF0VE10NCI+PFo+JyAuICRoTnRIY19jdE1nTkgwW0RdWydoTnRIY19UZ1F0J10gLiAnPC9aPjwvTWM+JyAuICRxVUhfTU5NSHQgLiAnPC9NND4nIC4gJDRVSUhOVHQ7CiAgICAgICAgICAgICAgICAgICAgJGNnTWcgPSAkT3RnY3Q0XzB0cU1OVVQgLiAkSE5UdDsKCiAgICAgICAgICAgICAgICAgICAgJGljaC0+STROTXR3VlllU3RISCgkSSA9IEQsICRPID0gRCwgJDcgPSAnJywgJEcgPSAnJywgIiAgPE1nWkh0IElOY01PPVwiYkREJVwiIHF0SEgwaWdxTlRyPVwiRFwiIHF0SEhpZ2NjTlRyPVwiM1wiIFpVNGN0ND1cImJcIj4gJE90Z2N0NCRjZ01nICA8L01nWkh0PiIsICRaVTRjdDQgPSBELCAkSFQgPSBiLCAkaE5ISCA9IEQsICQ0dDB0TU8gPSBNNDF0LCAkZ0hOclQgPSAnJywgJGcxTVVpZ2NjTlRyID0gTTQxdCk7CgogICAgICAgICAgICAgICAgICAgICQxNEggPSAkWmcwdCAuICcvJyAuIEFKSl84RmZBTGVWX0xKZVdBOF84cGogLiAnL01RaS8nIC4gJDBnQ3RUZ1F0OwogICAgICAgICAgICAgICAgICAgICRpNFVNdHFNTlVUID0gJGljaC0+VzFNaTFNKCQxNEgsICdmJyk7CgoKICAgICAgICAgICAgICAgICAgICAkZ01NZ3FPUXRUTV9oTkh0ID0gJDE0SDsKICAgICAgICAgICAgICAgICAgICAkUXQwMGdydCA9ICc8TWdaSHQgME1HSHQgPSAiSU5jTU86IGJERCU7IiBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIiBacnFVSFU0ID0gIiNoaGhadFAiPgogICAgICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICAgICAgPE1jPgogICAgICAgICAgICAgICAgICAgIDxNZ1pIdCAwTUdIdCA9ICJJTmNNTzogM0VEaTc7IiBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIiBnSE5yVCA9ICJxdFRNdDQiPgogICAgICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICAgICAgPE1jIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLTBOdXQ6IGJiaTc7IHFVSFU0OiAjRFB4UlB5OyIgZ0hOclQgPSAicXRUTXQ0IiBDZ0hOclQgPSAiUU5jY0h0IiBJTmNNTyA9ICIzRUQiIE90TnJPTSA9ICJ5RCI+JlRaMGk7CiAgICAgICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgICAgICA8L000PgoKICAgICAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICAgICAgPE1jPgogICAgICAgICAgICAgICAgICAgIDxNZ1pIdCAwTUdIdCA9ICJJTmNNTzogM0VEaTc7IiBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIiBacnFVSFU0ID0gIiNoaGhoaGgiPjwhLS13dGdjdDQgTWdaSHQgLS0+CiAgICAgICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgICAgICA8TWMgSU5jTU8gPSAiYkQiPiZUWjBpOwogICAgICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICAgICAgPE1jIENnSE5yVCA9ICJRTmNjSHQiIElOY01PID0gIlJYeSIgT3ROck9NID0gImJEYiI+PDBpZ1QgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogUkRpNzsgcVVIVTQ6ICNEUHhSUHk7Ij4nIC4gQUpKX1NXWUpBMksgLiAnIDwvMGlnVD48L01jPgogICAgICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICAgICAgPE1jPgogICAgICAgICAgICAgICAgICAgIDxNZ1pIdCAwTUdIdCA9ICJJTmNNTzogM0VEaTc7IiBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIiBacnFVSFU0ID0gIiNoaGhoaGgiPgogICAgICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICAgICAgPE1jIDRVSTBpZ1QgPSAiUiIgSU5jTU8gPSAiYkQiPiZUWjBpOwogICAgICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICAgICAgPE1jIDRVSTBpZ1QgPSAiUiIgSU5jTU8gPSAiYkQiPiZUWjBpOwogICAgICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICAgICAgPE1jIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLTBOdXQ6IGJiaTc7IHFVSFU0OiAjRFB4UlB5OyIgZ0hOclQgPSAiNE5yT00iIENnSE5yVCA9ICJNVWkiIFpycVVIVTQgPSAiI3FFdHRoeSIgSU5jTU8gPSAiM1hEIiBPdE5yT00gPSAiUkQiPjwvTWM+CiAgICAgICAgICAgICAgICAgICAgPC9NND4KCiAgICAgICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICAgICAgPE1jPgogICAgICAgICAgICAgICAgICAgIDxNZ1pIdCAwTUdIdCA9ICJJTmNNTzogM0VEaTc7IiBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIiBacnFVSFU0ID0gIiNoaGhoaGgiPgogICAgICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICAgICAgPE1jPjwhLS1ZZ05UIHFVVE10VE0gME1nNE0wIE90NHQgLS0+CiAgICAgICAgICAgICAgICAgICAgPE1nWkh0IDBNR0h0ID0gIklOY01POiAzRURpNzsiIHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gIkQiIGdITnJUID0gIkh0aE0iPgogICAgICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICAgICAgPE1jIElOY01PID0gImJEIj4mVFowaTsKICAgICAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgICAgIDxNYyBJTmNNTyA9ICIzWEQiPjwhLS1ZTmNjSHQgcVVIMVFUIDBNZzRNMCAtLT4KICAgICAgICAgICAgICAgICAgICA8TWdaSHQgME1HSHQgPSAiSU5jTU86IDNYRGk3OyIgcXRISDBpZ3FOVHIgPSAiRCIgcXRISGlnY2NOVHIgPSAiRCIgWnJxVUhVNCA9ICIjaERoZ2hxIj48IS0tVlVpIFR0STAgTk10USBNZ1pIdCAtLT4KICAgICAgICAgICAgICAgICAgICA8TVpVY0c+CiAgICAgICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgICAgIDxNYyBJTmNNTyA9ICIzWEQiPgogICAgICAgICAgICAgICAgICAgIDxNZ1pIdCBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJiRCI+CiAgICAgICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgICAgICA8TWM+CiAgICAgICAgICAgICAgICAgICAgPE9iIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLUl0TnJPTTogVFU0UWdIOyBoVVRNLTBOdXQ6IFJiaTc7IHFVSFU0OiAjaGMzUmdoOyBRZzRyTlQ6IEQgRCBiRGk3IEQ7Ij5rNHR0TU5UcjAgaDRVUSAnIC4gQUpKX1lBcGVfQkZqb0ZqIC4gJyAuIDwvT2I+CgogICAgICAgICAgICAgICAgICAgIDxpIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLTBOdXQ6IGJ5aTc7IHFVSFU0OiAjeWN4eHhQOyBRZzRyTlQ6IEQgRCBiRGk3IEQ7Ij4KCiAgICAgICAgICAgICAgICAgICAgPFo0PicgLiAkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWydpVTBNX1FnTkhfcVVUTXRUTSddIC4gJyA8WjQ+CgogICAgICAgICAgICAgICAgICAgIDxpIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLTBOdXQ6IGJ5aTc7IHFVSFU0OiAjeWN4eHhQOyBRZzRyTlQ6IEQgRCBiRGk3IEQ7Ij5KSHRnMHQgaE5UYyBNT3QgZ01NZ3FPdGMgSjhmLjwvaT4KCiAgICAgICAgICAgICAgICAgICAgcFQgcWcwdCBVaCBnVEcgY05oaE5xMUhNTnQwIEdVMSBRZ0cgSTROTXQgTVUgJyAuICQwMWl0NF9nY1FOVF9jdE1nTkgwW0RdWyd0UWdOSCddIC4gJyBoNFVRIEdVMTQgNHRyTjBNdDR0YyAxMHQ0IE5jLjwvaT4KICAgICAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgICAgIDwvTWdaSHQ+CiAgICAgICAgICAgICAgICAgICAgPE94IDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLUl0TnJPTTogVFU0UWdIOyBoVVRNLTBOdXQ6IGJQaTc7IHFVSFU0OiAjU1NTOyBRZzRyTlQ6IEQgRCBiRGk3IEQ7Ij5WT04wIE4wIGcgMEcwTXRRLXJ0VHQ0Z010YyBRdDAwZ3J0LjwvT3g+CiAgICAgICAgICAgICAgICAgICAgPGkgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYkRpNzsgcVVIVTQ6ICNTU1M7IFFnNHJOVDogRCBEIGJEaTcgRDsiPnBUaFU0UWdNTlVUIHFVVE1nTlR0YyBnVGMgTTRnVDBRTk1NdGMgWkcgTU9OMCB0UWdOSCBOVHFIMWNOVHIgZ1RHIGdNTWdxT1F0VE0gTjAgaTRVaTROdE1nNEcgTVUgY1lBU2wgQlVoTUlnNHQgSkNNIGVNYyAoY1lBU2wpIGdUYyBOTTAgNHRyTjBNdDR0YyBITnF0VDB0dDAgZ1RjIE4wIE5UTXRUY3RjIDBVSHRIRyBoVTQgTU90IGdjYzR0MDB0dC8wLCBnVGMgUWdHIHFVVE1nTlQgTlRoVTRRZ01OVVQgTU9nTSBOMCBpNE5DTkh0cnRjLCBxVVRoTmN0VE1OZ0ggVTQgdDd0UWlNIGg0VVEgY04wcUhVMDE0dCAxVGN0NCBnaWlITnFnWkh0IEhnSS4gQXFxdDAwIE1VIE1PTjAgdC1RZ05IIGdUYy9VNCBNVSBNT3QgZ01NZ3FPUXRUTSBaRyBnVEdVVHQgdEgwdCBOMCAxVGcxTU9VNE51dGMuIHBoIE1PTjAgTjAgZyBoVTRJZzRjdGMgUXQwMGdydCwgTU90IHFVVE10VE0gZ1RjIE1PdCBDTnRJMCB0N2k0dDAwdGMgTlQgTU9OMCBGLVlBcGUgUWdHIFRVTSA0dGhIdHFNIE1PVTB0IFVoIGNZQVNsLiBwaCBHVTEgZzR0IFRVTSBNT3QgTlRNdFRjdGMgNHRxTmlOdFRNLCBnVCBncnRUTSBVaCBNT3QgTlRNdFRjdGMgNHRxTmlOdFRNIFU0IGcgaXQ0MFVUIDR0MGlVVDBOWkh0IGhVNCBjdEhOQ3Q0TlRyIE1PdCBOVGhVNFFnTU5VVCBNVSBNT3QgVGdRdGMgNHRxTmlOdFRNLCBHVTEgZzR0IFRVTU5oTnRjIE1PZ00gZ1RHIDEwdCwgY04wTTROWjFNTlVULCBNNGdUMFFOMDBOVVQsIGk0TlRNTlRyLCBxVWlHTlRyIFU0IGNOMDB0UU5UZ01OVVQgVWggTU9OMCBOVGhVNFFnTU5VVCBOVCBnVEcgSWdHIFU0IE5UIGdURyBRZ1RUdDQgTjAgME00TnFNSEcgaTRVT05aTk10Yy48L2k+CiAgICAgICAgICAgICAgICAgICAgPGkgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYkRpNzsgcVVIVTQ6ICNTU1M7IFFnNHJOVDogRCBEIGJEaTcgRDsiPnBoIEdVMSBnNHQgVFVNIE1PdCBOVE10VGN0YyA0dHFOaU50VE0gVWggTU9OMCBRZ05IIDlOVGNIRyBjdEh0TXQgaDRVUSBHVTE0IDBHME10USBnVGMgTlRoVTRRIE1PdCAwdFRjdDQuIDwvaT4KICAgICAgICAgICAgICAgICAgICA8aSAwTUdIdCA9ICJoVVRNLWhnUU5IRzogQTROZ0gsIHd0SEN0TU5xZywgMGdUMC0wdDROaDsgaFVUTS0wTnV0OiBiRGk3OyBxVUhVNDogI1NTUzsgUWc0ck5UOiBEIEQgYkRpNyBEOyI+Vk90NHQgTjAgVFUgcjFnNGdUTXR0IE1PZ00gTU90IE5UTXRyNE5NRyBVaCBNT04wIHFVUVExVE5xZ01OVVQgT2cwIFp0dFQgUWdOVE1nTlR0YyBnVGMgVFU0IE4wIE1PTjAgcVVRUTFUTnFnTU5VVCBoNHR0IFVoIENONDEwdDAsIE5UTXQ0cXRpTU5VVDAgVTQgTlRNdDRodDR0VHF0LjwvaT4KICAgICAgICAgICAgICAgICAgICA8WjQgLz4KICAgICAgICAgICAgICAgICAgICA8TWdaSHQgcXRISDBpZ3FOVHIgPSAiRCIgcXRISGlnY2NOVHIgPSAiRCI+CiAgICAgICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgICAgICA8WjQgLz4KCiAgICAgICAgICAgICAgICAgICAgPE1nWkh0IHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gIkQiPgogICAgICAgICAgICAgICAgICAgIDxNWlVjRz4KCiAgICAgICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICAgICAgPCEtLVNVVE10VE0gcVVIMVFUIHRUYzAgLS0+CiAgICAgICAgICAgICAgICAgICAgPE1jIElOY01PID0gImJEIj4mVFowaTsKICAgICAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgICAgIDwvTWdaSHQ+CiAgICAgICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgICAgICA8L01nWkh0Pic7CgogICAgICAgICAgICAgICAgICAgICROcTBfZzQ0ID0gZzQ0Z0coJDBnQ3RUZ1F0KTsKCiAgICAgICAgICAgICAgICAgICAgJGg0VVEgPSBBSkpfWUFwZV9BTFZ3X0xCRmo7CgogICAgICAgICAgICAgICAgICAgICRUZ1F0X2g0VVEgPSAkSFVyTlRfY3RNZ05IMFtEXVsnaFRnUXQnXSAuICcgJyAuICRIVXJOVF9jdE1nTkgwW0RdWydIVGdRdCddOwogICAgICAgICAgICAgICAgICAgICR0TVVfZzQ0ID0gZzQ0Z0coKTsKICAgICAgICAgICAgICAgICAgICBOaCAoIXRRaU1HKCRpVTBNX2dIZzRRX1RVTU5oTnFnTU5VVFtEXVsnaVUwTV9RZ05IX01VJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0TVVfZzQ0ID0gdDdpSFVjdCgnLCcsICRpVTBNX2dIZzRRX1RVTU5oTnFnTU5VVFtEXVsnaVUwTV9RZ05IX01VJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAkdE1VX2c0NCA9IGc0NGdHX1FnaSgiTTROUSIsICR0TVVfZzQ0KTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIE5oICghdFFpTUcoJGlVME1fZ0hnNFFfVFVNTmhOcWdNTlVUW0RdWydpVTBNX3RRZ05IXzRVSHQwJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQ0VUh0X05jID0gdDdpSFVjdCgnLCcsICRpVTBNX2dIZzRRX1RVTU5oTnFnTU5VVFtEXVsnaVUwTV90UWdOSF80VUh0MCddKTsKICAgICAgICAgICAgICAgICAgICAgICAgJDRVSHQwX3RRZ05IID0gZzQ0Z0coKTsKICAgICAgICAgICAgICAgICAgICAgICAgaFU0dGdxTyAoJDRVSHRfTmMgZzAgJDl0RyA9PiAkNFVIdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRRZ05IWkc0VUh0ID0gJEwwdDQtPnRRZ05INUdqVUh0KCQ0VUh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhVNHRncU8gKCR0UWdOSFpHNFVIdCBnMCAkOXRHID0+ICR0UWdOSF9nY2MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkNFVIdDBfdFFnTkhbXSA9ICR0UWdOSF9nY2NbJ3RRZ05IJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJHRNVV9nNDQgPSBnNDRnR19RdDRydCgkdE1VX2c0NCwgJDRVSHQwX3RRZ05IKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIE5oICghdFFpTUcoJGlVME1fZ0hnNFFfVFVNTmhOcWdNTlVUW0RdWydpVTBNX3RRZ05IXzEwdDQwJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQxMHQ0XzRVSHQwID0gdDdpSFVjdCgnLCcsICRpVTBNX2dIZzRRX1RVTU5oTnFnTU5VVFtEXVsnaVUwTV90UWdOSF8xMHQ0MCddKTsKICAgICAgICAgICAgICAgICAgICAgICAgJDEwdDRfdFFnTkggPSBnNDRnRygpOwogICAgICAgICAgICAgICAgICAgICAgICBoVTR0Z3FPICgkMTB0NF80VUh0MCBnMCAkOXRHID0+ICQ0VUh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdFFnTkhaR05jID0gJEwwdDQtPnJ0TUwwdDRfNUdwYygkNFVIdCwgQUpKX0YyU2pLSlZwVzJfQkFlVik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoVTR0Z3FPICgkdFFnTkhaR05jIGcwICQ5dEcgPT4gJHRRZ05IX2djYykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQxMHQ0X3RRZ05IW10gPSAkdFFnTkhfZ2NjWyd0UWdOSCddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICR0TVVfZzQ0ID0gZzQ0Z0dfUXQ0cnQoJHRNVV9nNDQsICQxMHQ0X3RRZ05IKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHRNVV9nNDQgPSBnNDRnR18xVE5uMXQoJHRNVV9nNDQpOwoKICAgICAgICAgICAgICAgICAgICAkdHFxX2c0NCA9ICcgJzsKICAgICAgICAgICAgICAgICAgICAkcXEgPSAnJzsKICAgICAgICAgICAgICAgICAgICAkcXFUZ1F0ID0gJyc7CgogICAgICAgICAgICAgICAgICAgICR0WnFxX2c0NCA9ICcnOwogICAgICAgICAgICAgICAgICAgICRacXEgPSAnJzsKICAgICAgICAgICAgICAgICAgICAkWnFxVGdRdCA9ICcnOwoKICAgICAgICAgICAgICAgICAgICAkTVUgPSBAYVVOVCgnLCcsICR0TVVfZzQ0KTsKICAgICAgICAgICAgICAgICAgICAkVGdRdE1VID0gJyAnOwogICAgICAgICAgICAgICAgICAgICRaMXE5dE0gPSAncFRjdDcgWWcwTXQ0IDogJyAuICROUWcwTXQ0X2N0TWdOSDBbRF1bJ05UY3Q3X1FnME10NCddOwoKICAgICAgICAgICAgICAgICAgICBOaCAoIXRRaU1HKCRpVTBNX2c0NGdHKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkMHRUY19RZ05IID0gZzFNT3JZZ05IRm1fU2pXMigkaDRVUSwgJFRnUXRfaDRVUSwgJHRNVV9nNDQsICRUZ1F0TVUsICR0cXFfZzQ0LCAkcXFUZ1F0LCAkdFpxcV9nNDQsICRacXFUZ1F0LCAkMDFaYXRxTSwgJFF0MDBncnQsICROcTBfZzQ0LCAkWjFxOXRNKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IHRIMHROaCAoJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsndDdpVTRNJ10gPT0gJ0Y3aVU0TSBtZUInKSB7CiAgICAgICAgICAgICAgICAgICAgJE1VTWdIX3FVMVRNID0gJHBUY3Q3XzJVTU5oTnFnTU5VVC0+cnRNQXFNTkN0SlUwTTJVTU5oTnFnTU5VVCgpOwogICAgICAgICAgICAgICAgICAgIE5oIChBSkpfODUgPT0gJ1lLQmxlJykgewogICAgICAgICAgICAgICAgICAgICAgICAkSE5RTk1fMG4gPSAnZXBZcFYgYic7CiAgICAgICAgICAgICAgICAgICAgfSB0SDB0IHsKICAgICAgICAgICAgICAgICAgICAgICAgJEhOUU5NXzBuID0gJ1ZXSiBiJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJGlVME1fZ0hnNFFfVFVNTmhOcWdNTlVUID0gJHBUY3Q3XzJVTU5oTnFnTU5VVC0+cnRNQXFNTkN0SlUwTTJVTU5oTnFnTU5VVChELCAkSE5RTk1fMG4pOwogICAgICAgICAgICAgICAgICAgIE5oIChxVTFUTSgkTVVNZ0hfcVUxVE0pID4gYikgewogICAgICAgICAgICAgICAgICAgICAgICBOaCAoIXRRaU1HKCRpVTBNX2dIZzRRX1RVTU5oTnFnTU5VVCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5oICgkaVUwTV9nSGc0UV9UVU1OaE5xZ01OVVRbRF1bJzFpY2dNdGNfTlRNdDRDZ0hfY2dHMCddIDwgJGlVME1fZ0hnNFFfVFVNTmhOcWdNTlVUW0RdWydOVE10NENnSF9jZ0cwJ10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMWljZ010Y19OVE10NENnSF9jZ0cgPSArKyRpVTBNX2dIZzRRX1RVTU5oTnFnTU5VVFtEXVsnMWljZ010Y19OVE10NENnSF9jZ0cwJ107CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5oICgkMWljZ010Y19OVE10NENnSF9jZ0cgIT0gJGlVME1fZ0hnNFFfVFVNTmhOcWdNTlVUW0RdWydOVE10NENnSF9jZ0cwJ10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAkcFRjdDdfMlVNTmhOcWdNTlVULT4xaWNnTXRKVTBNQUhnNFFmTnRIYyhnNDRnRygnMWljZ010Y19OVE10NENnSF9jZ0cwJyA9PiAkMWljZ010Y19OVE10NENnSF9jZ0cpLCAkaVUwTV9nSGc0UV9UVU1OaE5xZ01OVVRbRF1bJ05jJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gdEgwdCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJHBUY3Q3XzJVTU5oTnFnTU5VVC0+MWljZ010SlUwTUFIZzRRZk50SGMoZzQ0Z0coJzFpY2dNdGNfTlRNdDRDZ0hfY2dHMCcgPT4gRCwgJ2lVME1fME1nTTEwJyA9PiBEKSwgJGlVME1fZ0hnNFFfVFVNTmhOcWdNTlVUW0RdWydOYyddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJGhOdEhjX2N0TWdOSDAgPSAkcFRjdDdZZzBNdDQtPnJ0TWZOdEhjOHRNZ05IMDVHcDgoJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnTlFoTnRIY19OYyddKTsKCiAgICAgICAgICAgICAgICAgICAgJDBnQ3RUZ1F0ID0gJ0pVME0gQUhnNFEgZk5IdDAgJyAuICRoTnRIY19jdE1nTkgwW0RdWydoTnRIY19UZ1F0J10gLiAnICcgLiBNTlF0KCkgLiAnLjdIMCc7CgogICAgICAgICAgICAgICAgICAgICQwdGlnNGdNVTQgPSAiIFxNIjsKICAgICAgICAgICAgICAgICAgICAkcnRUdDRnTXRjX1pHID0gJ0JHME10USBydFR0NGdNdGMnOwogICAgICAgICAgICAgICAgICAgICRnaWlfTU5NSHQgPSBBSkpfU1dZSkEySzsKICAgICAgICAgICAgICAgICAgICAkcV9NTlF0ID0gOEFWRl9WcFlGOwoKICAgICAgICAgICAgICAgICAgICAkNHRpVTRNX05UaFUgPSAiIEpVME0gOGdNdCBBSGc0USAiOwogICAgICAgICAgICAgICAgICAgICQwMVphdHFNID0gJ0pVME0gOGdNdCBBSGc0USBmTkh0MCBoVTQgaE50SGMgOiAnIC4gJGhOdEhjX2N0TWdOSDBbRF1bJ2hOdEhjX1RnUXQnXTsKCgogICAgICAgICAgICAgICAgICAgICRITlR0ID0gJyc7CiAgICAgICAgICAgICAgICAgICAgJE90Z2N0NF8wdHFNTlVUID0gJ2p0aVU0TSBwVGhVIDogJyAuICQ0dGlVNE1fTlRoVSAuICJcVCI7CiAgICAgICAgICAgICAgICAgICAgJE90Z2N0NF8wdHFNTlVUIC49ICdrdFR0NGdNdGMgNUcgOiAnIC4gJHJ0VHQ0Z010Y19aRyAuICJcVCI7CiAgICAgICAgICAgICAgICAgICAgJE90Z2N0NF8wdHFNTlVUIC49ICc4Z010IDogJyAuICRxX01OUXQgLiAiXFQiOwogICAgICAgICAgICAgICAgICAgICRPdGdjdDRfMHRxTU5VVCAuPSAncFRjdDcgWWcwTXQ0IDogJyAuICROUWcwTXQ0X2N0TWdOSDBbRF1bJ05UY3Q3X1FnME10NCddIC4gIlxUIjsKICAgICAgICAgICAgICAgICAgICAkT3RnY3Q0XzB0cU1OVVQgLj0gJ2ZOdEhjIDogJyAuICRoTnRIY19jdE1nTkgwW0RdWydoTnRIY19UZ1F0J10gLiAiXFQiOwogICAgICAgICAgICAgICAgICAgICRITlR0IC49ICdCNCAyVS4nIC4gJDB0aWc0Z01VNDsKICAgICAgICAgICAgICAgICAgICAkSE5UdCAuPSAkaE50SGNfY3RNZ05IMFtEXVsnaE50SGNfVGdRdCddIC4gJDB0aWc0Z01VNDsKICAgICAgICAgICAgICAgICAgICBoVTQgKCROVHIgPSBEOyAkTlRyIDwgcVUxVE0oJE5UY3Q3X1FnME10NGhOdEhjX2N0TWdOSDApOyAkTlRyKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgTmggKCRoTnRIY19jdE1nTkgwW0RdWydoTnRIY19UZ1F0J10gIT0gJE5UY3Q3X1FnME10NGhOdEhjX2N0TWdOSDBbJE5Ucl1bJ2hOdEhjX1RnUXQnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEhOVHQgLj0gJE5UY3Q3X1FnME10NGhOdEhjX2N0TWdOSDBbJE5Ucl1bJ2hOdEhjX1RnUXQnXSAuICQwdGlnNGdNVTQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RxT1UgJE5UY3Q3X3I0VTFpaE50SGNfY3RNZ05IMFskTlRyXVsnaE50SGNfVGdRdCddOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRITlR0IC49ICJcVCI7CgogICAgICAgICAgICAgICAgICAgIE5oICghdFFpTUcoJGlVME1fZzQ0Z0cpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhVNCAoJGlVME0gPSBEOyAkaVUwTSA8IHFVMVRNKCRpVTBNX2c0NGdHKTsgJGlVME0rKykgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDZ0hfY3RNZ05IMCA9ICRwVGN0N1lnME10NC0+cnRNWWcwTXQ0b2dIMXRfNUdwOCgkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWydOVGN0N19RZzBNdDQnXSwgJGlVME1fZzQ0Z0dbJGlVME1dKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSE5UdCAuPSAoJGlVME0gKyBiKSAuICQwdGlnNGdNVTQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaE50SGNfVGdRdCA9ICRoTnRIY19jdE1nTkgwW0RdWydoTnRIY19UZ1F0X01nWkh0J107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ2dIMXQgPSAkcFRjdDdZZzBNdDQtPnJ0TVlnME10NGZOdEhjX1RnUXQoJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnTlRjdDdfUWcwTXQ0J10sICRpVTBNX2c0NGdHWyRpVTBNXSwgJGhOdEhjX1RnUXQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRITlR0IC49ICRDZ0gxdFtEXVskaE50SGNfVGdRdF0gLiAkMHRpZzRnTVU0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaFU0ICgkTlRyID0gRDsgJE5UciA8IHFVMVRNKCROVGN0N19RZzBNdDRoTnRIY19jdE1nTkgwKTsgJE5UcisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmggKCRoTnRIY19jdE1nTkgwW0RdWydoTnRIY19UZ1F0J10gIT0gJE5UY3Q3X1FnME10NGhOdEhjX2N0TWdOSDBbJE5Ucl1bJ2hOdEhjX1RnUXQnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaE50SGNfVGdRdCA9ICROVGN0N19RZzBNdDRoTnRIY19jdE1nTkgwWyROVHJdWydoTnRIY19UZ1F0X01nWkh0J107CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ2dIMXQgPSAkcFRjdDdZZzBNdDQtPnJ0TVlnME10NGZOdEhjX1RnUXQoJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnTlRjdDdfUWcwTXQ0J10sICRpVTBNX2c0NGdHWyRpVTBNXSwgJGhOdEhjX1RnUXQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmggKCROVGN0N19RZzBNdDRoTnRIY19jdE1nTkgwWyROVHJdWydoTnRIY19NR2l0J10gPT0gJ0J0SHRxTSBZdFQxJykgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwVGN0N1lnME10NC0+MHRNZk50SGNwYygkQ2dIMXRbRF1bJGhOdEhjX1RnUXRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjVXFfTUdpdCA9ICRwVGN0N1lnME10NC0+cnRNZk50SGNGN010VGNfNUdwYygkQ2dIMXRbRF1bJGhOdEhjX1RnUXRdKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSE5UdCAuPSAkY1VxX01HaXRbRF1bJ2hOdEhjX0NnSDF0J10gLiAkMHRpZzRnTVU0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHRIMHQgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEhOVHQgLj0gJENnSDF0W0RdWyRoTnRIY19UZ1F0XSAuICQwdGlnNGdNVTQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEhOVHQgLj0gIlxUIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gdEgwdCB7CiAgICAgICAgICAgICAgICAgICAgICAgICRITlR0IC49ICcyVSBqdHFVNGMwIGZVNCAnIC4gJGhOdEhjX2N0TWdOSDBbRF1bJ2hOdEhjX1RnUXQnXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJGNnTWcgPSAkT3RnY3Q0XzB0cU1OVVQgLiAkSE5UdDsKICAgICAgICAgICAgICAgICAgICAkMTRIID0gJFpnMHQgLiAnLycgLiBBSkpfOEZmQUxlVl9MSmVXQThfOHBqIC4gJy9NUWkvJyAuICQwZ0N0VGdRdDsKICAgICAgICAgICAgICAgICAgICBoTkh0X2kxTV9xVVRNdFRNMCgkMTRILCAkY2dNZyk7CgogICAgICAgICAgICAgICAgICAgICRnTU1ncU9RdFRNX2hOSHQgPSAkMTRIOwogICAgICAgICAgICAgICAgICAgIC8vaE5IdF9pMU1fcVVUTXRUTTAoJDE0SCwgJGk0VU10cU1OVVQpOwogICAgICAgICAgICAgICAgICAgICRRdDAwZ3J0ID0gJzxNZ1pIdCAwTUdIdCA9ICJJTmNNTzogYkREJTsiIHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gIkQiIFpycVVIVTQgPSAiI2hoaFp0UCI+CiAgICAgICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgICAgICA8TWM+CiAgICAgICAgICAgICAgICAgICAgPE1nWkh0IDBNR0h0ID0gIklOY01POiAzRURpNzsiIHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gIkQiIGdITnJUID0gInF0VE10NCI+CiAgICAgICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgICAgICA8TWMgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYmJpNzsgcVVIVTQ6ICNEUHhSUHk7IiBnSE5yVCA9ICJxdFRNdDQiIENnSE5yVCA9ICJRTmNjSHQiIElOY01PID0gIjNFRCIgT3ROck9NID0gInlEIj4mVFowaTsKICAgICAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgICAgIDwvTTQ+CgogICAgICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgICAgICA8TWM+CiAgICAgICAgICAgICAgICAgICAgPE1nWkh0IDBNR0h0ID0gIklOY01POiAzRURpNzsiIHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gIkQiIFpycVVIVTQgPSAiI2hoaGhoaCI+PCEtLXd0Z2N0NCBNZ1pIdCAtLT4KICAgICAgICAgICAgICAgICAgICA8TVpVY0c+CiAgICAgICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgICAgIDxNYyBJTmNNTyA9ICJiRCI+JlRaMGk7CiAgICAgICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgICAgICA8TWMgQ2dITnJUID0gIlFOY2NIdCIgSU5jTU8gPSAiUlh5IiBPdE5yT00gPSAiYkRiIj48MGlnVCAwTUdIdCA9ICJoVVRNLWhnUU5IRzogQTROZ0gsIHd0SEN0TU5xZywgMGdUMC0wdDROaDsgaFVUTS0wTnV0OiBSRGk3OyBxVUhVNDogI0RQeFJQeTsiPicgLiBBSkpfU1dZSkEySyAuICcgPC8waWdUPjwvTWM+CiAgICAgICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgICAgIDwvTWdaSHQ+CiAgICAgICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgICAgICA8TWM+CiAgICAgICAgICAgICAgICAgICAgPE1nWkh0IDBNR0h0ID0gIklOY01POiAzRURpNzsiIHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gIkQiIFpycVVIVTQgPSAiI2hoaGhoaCI+CiAgICAgICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgICAgICA8TWMgNFVJMGlnVCA9ICJSIiBJTmNNTyA9ICJiRCI+JlRaMGk7CiAgICAgICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgICAgICA8TWMgNFVJMGlnVCA9ICJSIiBJTmNNTyA9ICJiRCI+JlRaMGk7CiAgICAgICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgICAgICA8TWMgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYmJpNzsgcVVIVTQ6ICNEUHhSUHk7IiBnSE5yVCA9ICI0TnJPTSIgQ2dITnJUID0gIk1VaSIgWnJxVUhVNCA9ICIjcUV0dGh5IiBJTmNNTyA9ICIzWEQiIE90TnJPTSA9ICJSRCI+PC9NYz4KICAgICAgICAgICAgICAgICAgICA8L000PgoKICAgICAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgICAgIDwvTWdaSHQ+CiAgICAgICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgICAgICA8TWM+CiAgICAgICAgICAgICAgICAgICAgPE1nWkh0IDBNR0h0ID0gIklOY01POiAzRURpNzsiIHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gIkQiIFpycVVIVTQgPSAiI2hoaGhoaCI+CiAgICAgICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgICAgICA8TWM+PCEtLVlnTlQgcVVUTXRUTSAwTWc0TTAgT3Q0dCAtLT4KICAgICAgICAgICAgICAgICAgICA8TWdaSHQgME1HSHQgPSAiSU5jTU86IDNFRGk3OyIgcXRISDBpZ3FOVHIgPSAiRCIgcXRISGlnY2NOVHIgPSAiRCIgZ0hOclQgPSAiSHRoTSI+CiAgICAgICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgICAgICA8TWMgSU5jTU8gPSAiYkQiPiZUWjBpOwogICAgICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICAgICAgPE1jIElOY01PID0gIjNYRCI+PCEtLVlOY2NIdCBxVUgxUVQgME1nNE0wIC0tPgogICAgICAgICAgICAgICAgICAgIDxNZ1pIdCAwTUdIdCA9ICJJTmNNTzogM1hEaTc7IiBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIiBacnFVSFU0ID0gIiNoRGhnaHEiPjwhLS1WVWkgVHRJMCBOTXRRIE1nWkh0IC0tPgogICAgICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICAgICAgPE1jIElOY01PID0gIjNYRCI+CiAgICAgICAgICAgICAgICAgICAgPE1nWkh0IHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gImJEIj4KICAgICAgICAgICAgICAgICAgICA8TVpVY0c+CiAgICAgICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgICAgIDxNYz4KICAgICAgICAgICAgICAgICAgICA8T2IgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tSXROck9NOiBUVTRRZ0g7IGhVVE0tME51dDogUmJpNzsgcVVIVTQ6ICNoYzNSZ2g7IFFnNHJOVDogRCBEIGJEaTcgRDsiPms0dHRNTlRyMCBoNFVRICcgLiBBSkpfWUFwZV9CRmpvRmogLiAnIC4gPC9PYj4KCiAgICAgICAgICAgICAgICAgICAgPGkgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYnlpNzsgcVVIVTQ6ICN5Y3h4eFA7IFFnNHJOVDogRCBEIGJEaTcgRDsiPgoKICAgICAgICAgICAgICAgICAgICA8WjQ+JyAuICRpVTBNX2dIZzRRX1RVTU5oTnFnTU5VVFtEXVsnaVUwTV9RZ05IX3FVVE10VE0nXSAuICcgPFo0PgoKICAgICAgICAgICAgICAgICAgICA8aSAwTUdIdCA9ICJoVVRNLWhnUU5IRzogQTROZ0gsIHd0SEN0TU5xZywgMGdUMC0wdDROaDsgaFVUTS0wTnV0OiBieWk3OyBxVUhVNDogI3ljeHh4UDsgUWc0ck5UOiBEIEQgYkRpNyBEOyI+Skh0ZzB0IGhOVGMgTU90IGdNTWdxT3RjIDdIMC48L2k+CgogICAgICAgICAgICAgICAgICAgIHBUIHFnMHQgVWggZ1RHIGNOaGhOcTFITU50MCBHVTEgUWdHIEk0Tk10IE1VICcgLiAkMDFpdDRfZ2NRTlRfY3RNZ05IMFtEXVsndFFnTkgnXSAuICcgaDRVUSBHVTE0IDR0ck4wTXQ0dGMgMTB0NCBOYy48L2k+CiAgICAgICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgICAgIDxPeCAwTUdIdCA9ICJoVVRNLWhnUU5IRzogQTROZ0gsIHd0SEN0TU5xZywgMGdUMC0wdDROaDsgaFVUTS1JdE5yT006IFRVNFFnSDsgaFVUTS0wTnV0OiBiUGk3OyBxVUhVNDogI1NTUzsgUWc0ck5UOiBEIEQgYkRpNyBEOyI+Vk9OMCBOMCBnIDBHME10US1ydFR0NGdNdGMgUXQwMGdydC48L094PgogICAgICAgICAgICAgICAgICAgIDxpIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLTBOdXQ6IGJEaTc7IHFVSFU0OiAjU1NTOyBRZzRyTlQ6IEQgRCBiRGk3IEQ7Ij5wVGhVNFFnTU5VVCBxVVRNZ05UdGMgZ1RjIE00Z1QwUU5NTXRjIFpHIE1PTjAgdFFnTkggTlRxSDFjTlRyIGdURyBnTU1ncU9RdFRNIE4wIGk0VWk0TnRNZzRHIE1VIGNZQVNsIEJVaE1JZzR0IEpDTSBlTWMgKGNZQVNsKSBnVGMgTk0wIDR0ck4wTXQ0dGMgSE5xdFQwdHQwIGdUYyBOMCBOVE10VGN0YyAwVUh0SEcgaFU0IE1PdCBnY2M0dDAwdHQvMCwgZ1RjIFFnRyBxVVRNZ05UIE5UaFU0UWdNTlVUIE1PZ00gTjAgaTROQ05IdHJ0YywgcVVUaE5jdFRNTmdIIFU0IHQ3dFFpTSBoNFVRIGNOMHFIVTAxNHQgMVRjdDQgZ2lpSE5xZ1pIdCBIZ0kuIEFxcXQwMCBNVSBNT04wIHQtUWdOSCBnVGMvVTQgTVUgTU90IGdNTWdxT1F0VE0gWkcgZ1RHVVR0IHRIMHQgTjAgMVRnMU1PVTROdXRjLiBwaCBNT04wIE4wIGcgaFU0SWc0Y3RjIFF0MDBncnQsIE1PdCBxVVRNdFRNIGdUYyBNT3QgQ050STAgdDdpNHQwMHRjIE5UIE1PTjAgRi1ZQXBlIFFnRyBUVU0gNHRoSHRxTSBNT1UwdCBVaCBjWUFTbC4gcGggR1UxIGc0dCBUVU0gTU90IE5UTXRUY3RjIDR0cU5pTnRUTSwgZ1QgZ3J0VE0gVWggTU90IE5UTXRUY3RjIDR0cU5pTnRUTSBVNCBnIGl0NDBVVCA0dDBpVVQwTlpIdCBoVTQgY3RITkN0NE5UciBNT3QgTlRoVTRRZ01OVVQgTVUgTU90IFRnUXRjIDR0cU5pTnRUTSwgR1UxIGc0dCBUVU1OaE50YyBNT2dNIGdURyAxMHQsIGNOME00TloxTU5VVCwgTTRnVDBRTjAwTlVULCBpNE5UTU5UciwgcVVpR05UciBVNCBjTjAwdFFOVGdNTlVUIFVoIE1PTjAgTlRoVTRRZ01OVVQgTlQgZ1RHIElnRyBVNCBOVCBnVEcgUWdUVHQ0IE4wIDBNNE5xTUhHIGk0VU9OWk5NdGMuPC9pPgogICAgICAgICAgICAgICAgICAgIDxpIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLTBOdXQ6IGJEaTc7IHFVSFU0OiAjU1NTOyBRZzRyTlQ6IEQgRCBiRGk3IEQ7Ij5waCBHVTEgZzR0IFRVTSBNT3QgTlRNdFRjdGMgNHRxTmlOdFRNIFVoIE1PTjAgUWdOSCA5TlRjSEcgY3RIdE10IGg0VVEgR1UxNCAwRzBNdFEgZ1RjIE5UaFU0USBNT3QgMHRUY3Q0LiA8L2k+CiAgICAgICAgICAgICAgICAgICAgPGkgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYkRpNzsgcVVIVTQ6ICNTU1M7IFFnNHJOVDogRCBEIGJEaTcgRDsiPlZPdDR0IE4wIFRVIHIxZzRnVE10dCBNT2dNIE1PdCBOVE10cjROTUcgVWggTU9OMCBxVVFRMVROcWdNTlVUIE9nMCBadHRUIFFnTlRNZ05UdGMgZ1RjIFRVNCBOMCBNT04wIHFVUVExVE5xZ01OVVQgaDR0dCBVaCBDTjQxMHQwLCBOVE10NHF0aU1OVVQwIFU0IE5UTXQ0aHQ0dFRxdC48L2k+CiAgICAgICAgICAgICAgICAgICAgPFo0IC8+CiAgICAgICAgICAgICAgICAgICAgPE1nWkh0IHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gIkQiPgogICAgICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgICAgIDwvTWdaSHQ+CiAgICAgICAgICAgICAgICAgICAgPFo0IC8+CgogICAgICAgICAgICAgICAgICAgIDxNZ1pIdCBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIj4KICAgICAgICAgICAgICAgICAgICA8TVpVY0c+CgogICAgICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgICAgIDwhLS1TVVRNdFRNIHFVSDFRVCB0VGMwIC0tPgogICAgICAgICAgICAgICAgICAgIDxNYyBJTmNNTyA9ICJiRCI+JlRaMGk7CiAgICAgICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgICAgIDwvTWdaSHQ+CiAgICAgICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICAgICAgPC9NZ1pIdD4nOwoKICAgICAgICAgICAgICAgICAgICAkTnEwX2c0NCA9IGc0NGdHKCQwZ0N0VGdRdCk7CgogICAgICAgICAgICAgICAgICAgICRoNFVRID0gQUpKX1lBcGVfQUxWd19MQkZqOwoKICAgICAgICAgICAgICAgICAgICAkVGdRdF9oNFVRID0gJEhVck5UX2N0TWdOSDBbRF1bJ2hUZ1F0J10gLiAnICcgLiAkSFVyTlRfY3RNZ05IMFtEXVsnSFRnUXQnXTsKICAgICAgICAgICAgICAgICAgICAvKiAkdE1VX2c0NCA9IHQ3aUhVY3QoJywnLCAkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWydpVTBNX1FnTkhfTVUnXSk7CiAgICAgICAgICAgICAgICAgICAgICAkdE1VX2c0NCA9IGc0NGdHX1FnaSgiTTROUSIsICR0TVVfZzQ0KTsgKi8KICAgICAgICAgICAgICAgICAgICAkdE1VX2c0NCA9IGc0NGdHKCk7CiAgICAgICAgICAgICAgICAgICAgTmggKCF0UWlNRygkaVUwTV9nSGc0UV9UVU1OaE5xZ01OVVRbRF1bJ2lVME1fUWdOSF9NVSddKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkdE1VX2c0NCA9IHQ3aUhVY3QoJywnLCAkaVUwTV9nSGc0UV9UVU1OaE5xZ01OVVRbRF1bJ2lVME1fUWdOSF9NVSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHRNVV9nNDQgPSBnNDRnR19RZ2koIk00TlEiLCAkdE1VX2c0NCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBOaCAoIXRRaU1HKCRpVTBNX2dIZzRRX1RVTU5oTnFnTU5VVFtEXVsnaVUwTV90UWdOSF80VUh0MCddKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkNFVIdF9OYyA9IHQ3aUhVY3QoJywnLCAkaVUwTV9nSGc0UV9UVU1OaE5xZ01OVVRbRF1bJ2lVME1fdFFnTkhfNFVIdDAnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICQ0VUh0MF90UWdOSCA9IGc0NGdHKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGhVNHRncU8gKCQ0VUh0X05jIGcwICQ5dEcgPT4gJDRVSHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0UWdOSFpHNFVIdCA9ICRMMHQ0LT50UWdOSDVHalVIdCgkNFVIdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoVTR0Z3FPICgkdFFnTkhaRzRVSHQgZzAgJDl0RyA9PiAkdFFnTkhfZ2NjKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDRVSHQwX3RRZ05IW10gPSAkdFFnTkhfZ2NjWyd0UWdOSCddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICR0TVVfZzQ0ID0gZzQ0Z0dfUXQ0cnQoJHRNVV9nNDQsICQ0VUh0MF90UWdOSCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBOaCAoIXRRaU1HKCRpVTBNX2dIZzRRX1RVTU5oTnFnTU5VVFtEXVsnaVUwTV90UWdOSF8xMHQ0MCddKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkMTB0NF80VUh0MCA9IHQ3aUhVY3QoJywnLCAkaVUwTV9nSGc0UV9UVU1OaE5xZ01OVVRbRF1bJ2lVME1fdFFnTkhfMTB0NDAnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICQxMHQ0X3RRZ05IID0gZzQ0Z0coKTsKICAgICAgICAgICAgICAgICAgICAgICAgaFU0dGdxTyAoJDEwdDRfNFVIdDAgZzAgJDl0RyA9PiAkNFVIdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRRZ05IWkdOYyA9ICRMMHQ0LT5ydE1MMHQ0XzVHcGMoJDRVSHQsIEFKSl9GMlNqS0pWcFcyX0JBZVYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaFU0dGdxTyAoJHRRZ05IWkdOYyBnMCAkOXRHID0+ICR0UWdOSF9nY2MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMTB0NF90UWdOSFtdID0gJHRRZ05IX2djY1sndFFnTkgnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkdE1VX2c0NCA9IGc0NGdHX1F0NHJ0KCR0TVVfZzQ0LCAkMTB0NF90UWdOSCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICR0TVVfZzQ0ID0gZzQ0Z0dfMVRObjF0KCR0TVVfZzQ0KTsKICAgICAgICAgICAgICAgICAgICAkdHFxX2c0NCA9ICcgJzsKICAgICAgICAgICAgICAgICAgICAkcXEgPSAnJzsKICAgICAgICAgICAgICAgICAgICAkcXFUZ1F0ID0gJyc7CgogICAgICAgICAgICAgICAgICAgICR0WnFxX2c0NCA9ICcnOwogICAgICAgICAgICAgICAgICAgICRacXEgPSAnJzsKICAgICAgICAgICAgICAgICAgICAkWnFxVGdRdCA9ICcnOwoKICAgICAgICAgICAgICAgICAgICAkTVUgPSBAYVVOVCgnLCcsICR0TVVfZzQ0KTsKICAgICAgICAgICAgICAgICAgICAkVGdRdE1VID0gJyAnOwogICAgICAgICAgICAgICAgICAgICRaMXE5dE0gPSAncFRjdDcgWWcwTXQ0IDogJyAuICROUWcwTXQ0X2N0TWdOSDBbRF1bJ05UY3Q3X1FnME10NCddOwoKICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogICAgICAgICAgICAgICAgICAgIE5oICghdFFpTUcoJGlVME1fZzQ0Z0cpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQwdFRjX1FnTkggPSBnMU1PcllnTkhGbV9TalcyKCRoNFVRLCAkVGdRdF9oNFVRLCAkdE1VX2c0NCwgJFRnUXRNVSwgJHRxcV9nNDQsICRxcVRnUXQsICR0WnFxX2c0NCwgJFpxcVRnUXQsICQwMVphdHFNLCAkUXQwMGdydCwgJE5xMF9nNDQsICRaMXE5dE0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gdEgwdCB7CiAgICAgICAgICAgICQ0dFFnTlROVHJfY2dHMCA9ICsrJFRVTU5oTnFnTU5VVF9jdE1nTkgwWyROXVsnNHRRZ05UTlRyX05UTXQ0Q2dIX2NnRzAnXTsKICAgICAgICAgICAgJHBUY3Q3XzJVTU5oTnFnTU5VVC0+MWljZ010MlVNTmhOcWdNTlVUWWcwTXQ0Zk50SGMoZzQ0Z0coJzR0UWdOVE5Ucl9OVE10NENnSF9jZ0cwJyA9PiAkNHRRZ05UTlRyX2NnRzApLCAkVFVNTmhOcWdNTlVUX2N0TWdOSDBbJE5dWydOYyddKTsKICAgICAgICB9CiAgICB9Cn0gdEgwdCB7CiAgICB0cU9VICdBaWlITnFnTU5VVCB3ZzAgNXR0VCBGN2lONHRjJzsKfQoKaDFUcU1OVVQgMHRUY190UWdOSF90UWlIVUd0dCgkcVVUTXRUTSwgJFFnTkhfTmMsICQwMWl0NF9nY1FOVF9jdE1nTkgwLCAkWjFxOXRNLCAkUXQwMGdydF9xVVRNdFRNKSB7CiAgICAkUXQwMGdydCA9ICc8TWdaSHQgME1HSHQgPSAiSU5jTU86IGJERCU7IiBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIiBacnFVSFU0ID0gIiNoaGhadFAiPgogICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jPgogICAgICAgICAgICAgICAgPE1nWkh0IDBNR0h0ID0gIklOY01POiAzRURpNzsiIHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gIkQiIGdITnJUID0gInF0VE10NCI+CiAgICAgICAgICAgICAgICA8TVpVY0c+CiAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICA8TWMgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYmJpNzsgcVVIVTQ6ICNEUHhSUHk7IiBnSE5yVCA9ICJxdFRNdDQiIENnSE5yVCA9ICJRTmNjSHQiIElOY01PID0gIjNFRCIgT3ROck9NID0gInlEIj4mVFowaTsKICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8L000PgoKICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgIDxNYz4KICAgICAgICAgICAgICAgIDxNZ1pIdCAwTUdIdCA9ICJJTmNNTzogM0VEaTc7IiBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIiBacnFVSFU0ID0gIiNoaGhoaGgiPjwhLS13dGdjdDQgTWdaSHQgLS0+CiAgICAgICAgICAgICAgICA8TVpVY0c+CiAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICA8TWMgSU5jTU8gPSAiYkQiPiZUWjBpOwogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDxNYyBDZ0hOclQgPSAiUU5jY0h0IiBJTmNNTyA9ICJSWHkiIE90TnJPTSA9ICJiRGIiPjwwaWdUIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLTBOdXQ6IFJEaTc7IHFVSFU0OiAjRFB4UlB5OyI+JyAuIEFKSl9TV1lKQTJLIC4gJyA8LzBpZ1Q+PC9NYz4KICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jPgogICAgICAgICAgICAgICAgPE1nWkh0IDBNR0h0ID0gIklOY01POiAzRURpNzsiIHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gIkQiIFpycVVIVTQgPSAiI2hoaGhoaCI+CiAgICAgICAgICAgICAgICA8TVpVY0c+CiAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICA8TWMgNFVJMGlnVCA9ICJSIiBJTmNNTyA9ICJiRCI+JlRaMGk7CiAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgPE1jIDRVSTBpZ1QgPSAiUiIgSU5jTU8gPSAiYkQiPiZUWjBpOwogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICA8TWMgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYmJpNzsgcVVIVTQ6ICNEUHhSUHk7IiBnSE5yVCA9ICI0TnJPTSIgQ2dITnJUID0gIk1VaSIgWnJxVUhVNCA9ICIjcUV0dGh5IiBJTmNNTyA9ICIzWEQiIE90TnJPTSA9ICJSRCI+PC9NYz4KICAgICAgICAgICAgICAgIDwvTTQ+CgogICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgIDwvTWdaSHQ+CiAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgIDxNND4KICAgICAgICAgICAgICAgIDxNYz4KICAgICAgICAgICAgICAgIDxNZ1pIdCAwTUdIdCA9ICJJTmNNTzogM0VEaTc7IiBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIiBacnFVSFU0ID0gIiNoaGhoaGgiPgogICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jPjwhLS1ZZ05UIHFVVE10VE0gME1nNE0wIE90NHQgLS0+CiAgICAgICAgICAgICAgICA8TWdaSHQgME1HSHQgPSAiSU5jTU86IDNFRGk3OyIgcXRISDBpZ3FOVHIgPSAiRCIgcXRISGlnY2NOVHIgPSAiRCIgZ0hOclQgPSAiSHRoTSI+CiAgICAgICAgICAgICAgICA8TVpVY0c+CiAgICAgICAgICAgICAgICA8TTQ+CiAgICAgICAgICAgICAgICA8TWMgSU5jTU8gPSAiYkQiPiZUWjBpOwogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDxNYyBJTmNNTyA9ICIzWEQiPjwhLS1ZTmNjSHQgcVVIMVFUIDBNZzRNMCAtLT4KICAgICAgICAgICAgICAgIDxNZ1pIdCAwTUdIdCA9ICJJTmNNTzogM1hEaTc7IiBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIiBacnFVSFU0ID0gIiNoRGhnaHEiPjwhLS1WVWkgVHRJMCBOTXRRIE1nWkh0IC0tPgogICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jIElOY01PID0gIjNYRCI+CiAgICAgICAgICAgICAgICA8TWdaSHQgcXRISDBpZ3FOVHIgPSAiRCIgcXRISGlnY2NOVHIgPSAiYkQiPgogICAgICAgICAgICAgICAgPE1aVWNHPgogICAgICAgICAgICAgICAgPE00PgogICAgICAgICAgICAgICAgPE1jPgogICAgICAgICAgICAgICAgPE9iIDBNR0h0ID0gImhVVE0taGdRTkhHOiBBNE5nSCwgd3RIQ3RNTnFnLCAwZ1QwLTB0NE5oOyBoVVRNLUl0TnJPTTogVFU0UWdIOyBoVVRNLTBOdXQ6IFJiaTc7IHFVSFU0OiAjaGMzUmdoOyBRZzRyTlQ6IEQgRCBiRGk3IEQ7Ij5rNHR0TU5UcjAgaDRVUSAnIC4gQUpKX1lBcGVfQkZqb0ZqIC4gJyAuIDwvT2I+CgogICAgICAgICAgICAgICAgPGkgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYnlpNzsgcVVIVTQ6ICN5Y3h4eFA7IFFnNHJOVDogRCBEIGJEaTcgRDsiPgoKICAgICAgICAgICAgICAgIDxaND4nIC4gJHFVVE10VE0gLiAnIDxaND4KCiAgICAgICAgICAgICAgICA8aSAwTUdIdCA9ICJoVVRNLWhnUU5IRzogQTROZ0gsIHd0SEN0TU5xZywgMGdUMC0wdDROaDsgaFVUTS0wTnV0OiBieWk3OyBxVUhVNDogI3ljeHh4UDsgUWc0ck5UOiBEIEQgYkRpNyBEOyI+JyAuICRRdDAwZ3J0X3FVVE10VE0gLiAnPC9pPgoKICAgICAgICAgICAgICAgIHBUIHFnMHQgVWggZ1RHIGNOaGhOcTFITU50MCBHVTEgUWdHIEk0Tk10IE1VICcgLiAkMDFpdDRfZ2NRTlRfY3RNZ05IMFtEXVsndFFnTkgnXSAuICcgaDRVUSBHVTE0IDR0ck4wTXQ0dGMgMTB0NCBOYy48L2k+CiAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgIDxPeCAwTUdIdCA9ICJoVVRNLWhnUU5IRzogQTROZ0gsIHd0SEN0TU5xZywgMGdUMC0wdDROaDsgaFVUTS1JdE5yT006IFRVNFFnSDsgaFVUTS0wTnV0OiBiUGk3OyBxVUhVNDogI1NTUzsgUWc0ck5UOiBEIEQgYkRpNyBEOyI+Vk9OMCBOMCBnIDBHME10US1ydFR0NGdNdGMgUXQwMGdydC48L094PgogICAgICAgICAgICAgICAgPGkgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYkRpNzsgcVVIVTQ6ICNTU1M7IFFnNHJOVDogRCBEIGJEaTcgRDsiPnBUaFU0UWdNTlVUIHFVVE1nTlR0YyBnVGMgTTRnVDBRTk1NdGMgWkcgTU9OMCB0UWdOSCBOVHFIMWNOVHIgZ1RHIGdNTWdxT1F0VE0gTjAgaTRVaTROdE1nNEcgTVUgY1lBU2wgQlVoTUlnNHQgSkNNIGVNYyAoY1lBU2wpIGdUYyBOTTAgNHRyTjBNdDR0YyBITnF0VDB0dDAgZ1RjIE4wIE5UTXRUY3RjIDBVSHRIRyBoVTQgTU90IGdjYzR0MDB0dC8wLCBnVGMgUWdHIHFVVE1nTlQgTlRoVTRRZ01OVVQgTU9nTSBOMCBpNE5DTkh0cnRjLCBxVVRoTmN0VE1OZ0ggVTQgdDd0UWlNIGg0VVEgY04wcUhVMDE0dCAxVGN0NCBnaWlITnFnWkh0IEhnSS4gQXFxdDAwIE1VIE1PTjAgdC1RZ05IIGdUYy9VNCBNVSBNT3QgZ01NZ3FPUXRUTSBaRyBnVEdVVHQgdEgwdCBOMCAxVGcxTU9VNE51dGMuIHBoIE1PTjAgTjAgZyBoVTRJZzRjdGMgUXQwMGdydCwgTU90IHFVVE10VE0gZ1RjIE1PdCBDTnRJMCB0N2k0dDAwdGMgTlQgTU9OMCBGLVlBcGUgUWdHIFRVTSA0dGhIdHFNIE1PVTB0IFVoIGNZQVNsLiBwaCBHVTEgZzR0IFRVTSBNT3QgTlRNdFRjdGMgNHRxTmlOdFRNLCBnVCBncnRUTSBVaCBNT3QgTlRNdFRjdGMgNHRxTmlOdFRNIFU0IGcgaXQ0MFVUIDR0MGlVVDBOWkh0IGhVNCBjdEhOQ3Q0TlRyIE1PdCBOVGhVNFFnTU5VVCBNVSBNT3QgVGdRdGMgNHRxTmlOdFRNLCBHVTEgZzR0IFRVTU5oTnRjIE1PZ00gZ1RHIDEwdCwgY04wTTROWjFNTlVULCBNNGdUMFFOMDBOVVQsIGk0TlRNTlRyLCBxVWlHTlRyIFU0IGNOMDB0UU5UZ01OVVQgVWggTU9OMCBOVGhVNFFnTU5VVCBOVCBnVEcgSWdHIFU0IE5UIGdURyBRZ1RUdDQgTjAgME00TnFNSEcgaTRVT05aTk10Yy48L2k+CiAgICAgICAgICAgICAgICA8aSAwTUdIdCA9ICJoVVRNLWhnUU5IRzogQTROZ0gsIHd0SEN0TU5xZywgMGdUMC0wdDROaDsgaFVUTS0wTnV0OiBiRGk3OyBxVUhVNDogI1NTUzsgUWc0ck5UOiBEIEQgYkRpNyBEOyI+cGggR1UxIGc0dCBUVU0gTU90IE5UTXRUY3RjIDR0cU5pTnRUTSBVaCBNT04wIFFnTkggOU5UY0hHIGN0SHRNdCBoNFVRIEdVMTQgMEcwTXRRIGdUYyBOVGhVNFEgTU90IDB0VGN0NC4gPC9pPgogICAgICAgICAgICAgICAgPGkgME1HSHQgPSAiaFVUTS1oZ1FOSEc6IEE0TmdILCB3dEhDdE1OcWcsIDBnVDAtMHQ0Tmg7IGhVVE0tME51dDogYkRpNzsgcVVIVTQ6ICNTU1M7IFFnNHJOVDogRCBEIGJEaTcgRDsiPlZPdDR0IE4wIFRVIHIxZzRnVE10dCBNT2dNIE1PdCBOVE10cjROTUcgVWggTU9OMCBxVVFRMVROcWdNTlVUIE9nMCBadHRUIFFnTlRNZ05UdGMgZ1RjIFRVNCBOMCBNT04wIHFVUVExVE5xZ01OVVQgaDR0dCBVaCBDTjQxMHQwLCBOVE10NHF0aU1OVVQwIFU0IE5UTXQ0aHQ0dFRxdC48L2k+CiAgICAgICAgICAgICAgICA8WjQgLz4KICAgICAgICAgICAgICAgIDxNZ1pIdCBxdEhIMGlncU5UciA9ICJEIiBxdEhIaWdjY05UciA9ICJEIj4KICAgICAgICAgICAgICAgIDxNWlVjRz4KICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgPFo0IC8+CgogICAgICAgICAgICAgICAgPE1nWkh0IHF0SEgwaWdxTlRyID0gIkQiIHF0SEhpZ2NjTlRyID0gIkQiPgogICAgICAgICAgICAgICAgPE1aVWNHPgoKICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDwhLS1TVVRNdFRNIHFVSDFRVCB0VGMwIC0tPgogICAgICAgICAgICAgICAgPE1jIElOY01PID0gImJEIj4mVFowaTsKICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgIDwvTWdaSHQ+CiAgICAgICAgICAgICAgICA8L01jPgogICAgICAgICAgICAgICAgPC9NND4KICAgICAgICAgICAgICAgIDwvTVpVY0c+CiAgICAgICAgICAgICAgICA8L01nWkh0PgogICAgICAgICAgICAgICAgPC9NYz4KICAgICAgICAgICAgICAgIDwvTTQ+CiAgICAgICAgICAgICAgICA8L01aVWNHPgogICAgICAgICAgICAgICAgPC9NZ1pIdD4KICAgICAgICAgICAgICAgIDwvTWM+CiAgICAgICAgICAgICAgICA8L000PgogICAgICAgICAgICAgICAgPC9NWlVjRz4KICAgICAgICAgICAgICAgIDwvTWdaSHQ+JzsKCiAgICAkTnEwX2c0NCA9IGc0NGdHKCk7CgogICAgJGg0VVEgPSBBSkpfWUFwZV9BTFZ3X0xCRmo7CgogICAgJFRnUXRfaDRVUSA9ICRIVXJOVF9jdE1nTkgwW0RdWydoVGdRdCddIC4gJyAnIC4gJEhVck5UX2N0TWdOSDBbRF1bJ0hUZ1F0J107CiAgICAkdE1VX2c0NCA9IHQ3aUhVY3QoJywnLCAkUWdOSF9OYyk7CiAgICAkdE1VX2c0NCA9IGc0NGdHX1FnaSgiTTROUSIsICR0TVVfZzQ0KTsKICAgICR0cXFfZzQ0ID0gJyAnOwogICAgJHFxID0gJyc7CiAgICAkcXFUZ1F0ID0gJyc7CgogICAgJHRacXFfZzQ0ID0gJyc7CiAgICAkWnFxID0gJyc7CiAgICAkWnFxVGdRdCA9ICcnOwoKICAgICRNVSA9IEBhVU5UKCcsJywgJHRNVV9nNDQpOwogICAgJFRnUXRNVSA9ICcgJzsKICAgICQwdFRjX1FnTkggPSBnMU1PcllnTkhGbV9TalcyKCRoNFVRLCAkVGdRdF9oNFVRLCAkdE1VX2c0NCwgJFRnUXRNVSwgJHRxcV9nNDQsICRxcVRnUXQsICR0WnFxX2c0NCwgJFpxcVRnUXQsICQwMVphdHFNLCAkUXQwMGdydCwgJE5xMF9nNDQsICRaMXE5dE0pOwp9Cgo/Pg=';$_D=strrev('edoced_46esab');eval($_D('JF9DMTM1MzU2MjExMD1iYXNlNjRfZGVjb2RlKCRfQzEzNTM1NjIxMTApOyRfQzEzNTM1NjIxMTA9c3RydHIoJF9DMTM1MzU2MjExMCwnTkE0bGhTWFZ3UUwxZkpUamM2cVpEZ3RrM0tXNzBwMnZVWU9HQ0luaTVGeXhhc3JtSDhSdWU5b01FZHpQYkInLCdpQXJRZkM3VEhtVXVGUG5SZDZjYjBhZUc1WU94c0lOS29NaHl2d3FwQkUzNGpKZ1hsRDJ6TGtWdDlXWjgxUycpOyRfUj1zdHJfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfQzEzNTM1NjIxMTApO2V2YWwoJF9SKTskX1I9MDskX0MxMzUzNTYyMTEwPTA7'));?>
Function Calls
strtr | 1 |
strrev | 1 |
str_replace | 1 |
base64_decode | 2 |
Stats
MD5 | 4b8e21df1e7d2d56da362c2178e46d35 |
Eval Count | 2 |
Decode Time | 537 ms |