Your IP : 216.73.216.176


Current Path : /home/semix18/public_html/pogtech.pl/app/core/
Upload File :
Current File : /home/semix18/public_html/pogtech.pl/app/core/generate.class.php

<?php /*windu.org core*/
class generate
{
    public static function sqlDatetime($timestemp = null)
	{
		if(is_null($timestemp)){$timestemp = @strtotime('now');}
	    $time = @date('Y-m-d H:i:s',$timestemp);
	    return $time; 
	}
	public static function sqlDate($timestemp = null) {
		if(is_null($timestemp)){$timestemp = strtotime('now');}
	    $time = date('Y-m-d',$timestemp);
	    return $time; 
	}
	public static function showDatatime($datatime, $addDecorators = true, $onlyStringShow = false) {
		$time = date('d.m.Y H:i',strtotime($datatime));
		$now = strtotime('now');
		$nowDiff = $now - strtotime($datatime);
		
		if ($addDecorators) {
			if ($nowDiff<=60) {
				$timeAddon = '<span class="badge badge-important transparent-md">'.$nowDiff.' s</span>';
			}elseif ($nowDiff<=3600){
				$timeAddon = '<span class="badge badge-warning transparent-md">'.intval(($nowDiff/60)).' min</span>';
			}elseif ($nowDiff<=(24*3600)){
				$timeAddon = '<span class="badge badge-info transparent-md">'.intval(($nowDiff/(3600))).' h</span>';
			}else{
				$timeAddon = '<span class="badge">'.intval(($nowDiff/(24*3600))).' d</span>';
			}
			
			$time = explode(' ',$time);
			if ($onlyStringShow) {
				$time = '<span class="silver">'.$timeAddon.'</span> ';
			}else{
				$time = $time[0].' <span class="silver">'.$time[1].' '.$timeAddon.'</span> ';
			}
	
		}
		return $time; 
	}
    public static function showDate($datatime) {
		$time = date('d.m.Y',strtotime($datatime));
	    return $time; 
	}	
	public static function ip(){
		if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])){$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];} 
		else {$ip = $_SERVER['REMOTE_ADDR'];} 

		return $ip; 
	}		
	public static function randomCode($length=8,$level=3){
	   list($usec, $sec) = explode(' ', microtime());
	   srand((float) $sec + ((float) $usec * 100000));
	
	   $validchars[1] = "0123456789";
	   $validchars[2] = "abcdfghjkmnpqrstvwxyz";
	   $validchars[3] = "0123456789abcdfghjkmnpqrstvwxyz";
	   $validchars[4] = "0123456789abcdfghjkmnpqrstvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	   $validchars[5] = "0123456789_!@#$%&*()-=+/abcdfghjkmnpqrstvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_!@#$%&*()-=+/";
	
	   $code  = "";
	   $counter = 0;
	
	   while ($counter < $length)
	   {
	     $actChar = substr($validchars[$level], rand(0, strlen($validchars[$level])-1), 1);
	     $code .= $actChar;
	     $counter++;
	   }
	   return $code;	
	}
	public static function ekey($table,$colum = 'ekey',$length=12,$level=2){
		$db = new $table();
		$ekey = null;
	
		while ($db->fetchCount("{$colum}='{$ekey}'") > 0 or $ekey == null) {
			$ekey = self::randomCode($length,$level);
		}
		return $ekey;
	}

	public static function urlKey($baseString,$table,$colum = 'urlKey',$length=50){
		$db = new $table();
		$forbiddenValues=array('admin','do','order','payment');

		$urlKeyWork = self::prepareUrlKey($baseString);
		$counter = 0;
	
		while ($db->fetchRow("{$colum} = '{$urlKeyWork}'") != null or in_array($urlKeyWork, $forbiddenValues)) {
			$addonLenght = 1;
			$counter = $counter+1;
			
			if($counter>=12){
				$addonLenght=$addonLenght+1;
				$counter=0;
			}
			$urlKeyWork =$urlKeyWork.'-'.self::randomCode($addonLenght,1);
		}
		$urlKeyWork = substr($urlKeyWork, 0, $length);
		$urlKeyWork = rtrim($urlKeyWork,'-');
		return $urlKeyWork;
	}	
	public static function prepareUrlKey($baseString){
		$urlKey = self::clean($baseString);
		$urlKey = strtolower($urlKey);
		
		if ($urlKey==null) {
			$urlKey=self::randomCode(12,2);
		}
		$urlKeyWork = str_replace(' ', '-', $urlKey);
		$urlKeyWork = str_replace('.', '-', $urlKeyWork);
		$urlKeyWork = str_replace(',', '-', $urlKeyWork);
		$urlKeyWork = str_replace('@', '-', $urlKeyWork);
		$urlKeyWork = str_replace('---', '-', $urlKeyWork);
		$urlKeyWork = str_replace('--', '-', $urlKeyWork);
		
		return $urlKeyWork;
	}

	public static function replaceChars($data) {
		$needles = array("ó", "ą", "ę", "ś", "ć", "ń", "ż", "ź", "ł", "Ó", "Ą", "Ę", "Ś", "Ć", "Ń", "Ż", "Ź", "Ł");
		$replace = array("o", "a", "e", "s", "c", "n", "z", "z", "l", "O", "A", "E", "S", "C", "N", "Z", "Z", "L");
		$data = str_replace($needles,$replace,$data);
		return $data;
	}	
	public static function clean($data) {
		$data = self::replaceChars($data);
		$data =  preg_replace("/([^a-zA-Z0-9\ \.\-\_])/i","", $data);
		return trim($data," ,;");
	}
    public static function cleanUrl($data) {
        $data = self::replaceChars($data);
        $data =  preg_replace("/([^a-zA-Z0-9\ \.\-\_\&\?\=\/])/i","", $data);
        return trim($data," ,;");
    }
	public static function cleanFileName($data) {
		$data = self::replaceChars($data);
		$data = str_replace(' ', '_', $data);
		$data = preg_replace("/([^a-zA-Z0-9\.\_\-])/i","", $data);
		$data = strtolower($data);
		return trim($data," ,;");
	}
	public static function cleanLinkKey($data) {
		$data = self::replaceChars($data);
		$data = str_replace(' ', '-', $data);
		$data = preg_replace("/([^a-zA-Z0-9\.\_\-\,])/i","", $data);
		$data = strtolower($data);
		return trim($data," ,;");
	}
	public static function cleanClassName($data) {
		$data = self::replaceChars($data);
		$data =  preg_replace("/([^a-zA-Z0-9])/i","", $data);
		
		return trim($data," ,;");
	}
	public static function cleanSQLColumnName($data) {
		$data = self::replaceChars($data);
		$data =  preg_replace("/([^a-zA-Z0-9\_])/i","", $data);
		
		return trim($data," ,;");
	}	
	public static function cleanMessageKey($data) {
		$data = self::replaceChars($data);
		$data =  preg_replace("/([^a-zA-Z0-9\.])/i","", $data);
		return trim($data," ,;");
	}
	public static function prepareGet($value) {
		$value = self::clean($value);
		$value = addslashes($value); 
		return $value;
	}	
	public static function sqlInjesctionStringSecure($value) {
		$value = addslashes($value); 
		return $value;
	}	
	public static function subvalArraySort($a,$subkey,$sort = 'asort') {
		$c = array();
		if (is_array($a)) {
			foreach($a as $k=>$v) {
				$b[$k] = strtolower($v[$subkey]);
			}
			$sort($b);
			foreach($b as $key=>$val) {
				$c[$key] = $a[$key];
			}
		}
		return $c;
	}
	public static function subvalArrayObjectsSort($a,$subkey,$sort = 'asort',$dataTime = FALSE) {
		foreach($a as $k=>$v) {
			$b[$k] = strtolower($v->$subkey);
			if ($dataTime) {
				$b[$k] = strtotime($b[$k]);
			}
		}
		$sort($b);
		foreach($b as $key=>$val) {
			$c[$key] = $a[$key];
		}
		return $c;
	}
			
	public static function compressCSS($css){
		return str_replace('; ',';',str_replace(' }','}',str_replace('{ ','{',str_replace(array("\r\n","\r","\n","\t",'  ','    ','    '),"",preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!','',$css)))));
	}
    //TODO
    public static function compressJS($js){
        return $js;
    }
	public static function clearHtml($data){
		$data = strip_tags($data); 
		return $data;
	}
	public static function clearHtmlNl2Br($data) {
		$data = self::clearHtml($data);
		$data = nl2br($data);

		return $data;		
	}
	public static function returnBytes($val) {
	    $val = trim($val);
	    $last = strtolower($val[strlen($val)-1]);
	    switch($last) {
	        case 'g':
	            $val *= 1024;
	        case 'm':
	            $val *= 1024;
	        case 'k':
	            $val *= 1024;
	    }
	    return $val;
	}	
	public static function getColorsOption() {
	    $cs = array('00', '33', '66', '99', 'CC', 'FF');
	
	    for($i=0; $i<6; $i++) {
	        for($j=0; $j<6; $j++) {
	            for($k=0; $k<6; $k++) {
	                $c = $cs[$i] .$cs[$j] .$cs[$k];
	                $finalArray[] = $c;
	            }
	        }
	    }
	    return $finalArray;
	}
	public static function migrateSQLiteToMySQL($sourceFile,$targetFile,$optionalTableName = '') {
		$sqlite = baseFile::readFile($sourceFile);
		$search  = array('AUTOINCREMENT' ,'DEFAULT CURRENT_TIMESTAMP','DEFAULT (CURRENT_TIMESTAMP)',"'",'"','varchar','null','VARCHAR ','VARCHAR,',     '(NULL)','(`0000-00-00 00:00:00`)','`0000-00-00 00:00:00`','VARCHAR,)',    "VARCHAR)","`,`",",`","`)","`,","(`","from VARCHAR(255)"," lock INTEGER","return VARCHAR(255)"   		,"VARCHAR DEFAULT (0)","datetime DEFAULT NULL",'datatime','NOT NULL','INTEGER PRIMARY KEY ,');
		$replace = array('AUTO_INCREMENT','','',  "`",'' ,'VARCHAR','NULL','VARCHAR(255) ','VARCHAR(255),','NULL',  '',       ''   ,'VARCHAR(255))',"VARCHAR(255))","','",",'","')","',","('","`from` VARCHAR(255)"," `lock` INTEGER","`return` VARCHAR(255)","VARCHAR(255) DEFAULT 0","datetime DEFAULT NULL",'datetime ','','INTEGER PRIMARY KEY AUTO_INCREMENT ,');
		$finalString = str_replace($search, $replace, $sqlite);

		$search  = array('DEFAULT ,','DEFAULT  ,','DEFAULT (0)','DEFAULT,');
		$replace = array(',',',','DEFAULT 0',',');
		$finalString2 = str_replace($search, $replace, $finalString);		
		
		if ($optionalTableName!='') {
			$search  = array('DROP TABLE IF EXISTS ','CREATE TABLE ');
			$replace = array('DROP TABLE IF EXISTS '.$optionalTableName.'.','CREATE TABLE '.$optionalTableName.'.');
			$finalString3 = str_replace($search, $replace, $finalString2);
		}

		baseFile::saveFile($targetFile, $finalString3);
	}
	//add empty rows for charts
	public static function appendChartArrayEmptyRows($objectToAppend,$datatimeKey,$valueKey,$dateDiv,$limit = 0,$defaultValue = 0){
		$cacheKey = md5(serialize($objectToAppend));
		if (cache::fileIsCached('generator', $cacheKey)) {
			return cache::fileRead('generator', $cacheKey);
		}else{
			$oldDivResult = 0;
			foreach ($objectToAppend as $row){
				$actualDivResult = floor(strtotime($row->$datatimeKey)/$dateDiv);
				if ($oldDivResult!=0){
					$subtractionResoult = $actualDivResult-$oldDivResult;
	
					if ($subtractionResoult>1) {
						for ($i = 1; $i < $subtractionResoult; $i++) {
							$newEmptyObject = new stdClass(); 
							$newEmptyObject->$datatimeKey = generate::sqlDatetime(($oldDivResult+$i)*$dateDiv);
							$newEmptyObject->$valueKey = $defaultValue;
							$finalArray[] = $newEmptyObject;
						}
					}
				}	
				$oldDivResult = $actualDivResult;
				$finalArray[] = $row;
	
			}
			if ($limit!=0) {
				$finalArray = array_slice($finalArray,-$limit);
			}
			cache::fileWrite('generator', $cacheKey, $finalArray);
		}	
		
		return $finalArray;
	}
	public static function languagesArray(){
		return array(
				'aa' => 'Afar',
				'ab' => 'Abkhaz',
				'ae' => 'Avestan',
				'af' => 'Afrikaans',
				'ak' => 'Akan',
				'am' => 'Amharic',
				'an' => 'Aragonese',
				'ar' => 'Arabic',
				'as' => 'Assamese',
				'av' => 'Avaric',
				'ay' => 'Aymara',
				'az' => 'Azerbaijani',
				'ba' => 'Bashkir',
				'be' => 'Belarusian',
				'bg' => 'Bulgarian',
				'bh' => 'Bihari',
				'bi' => 'Bislama',
				'bm' => 'Bambara',
				'bn' => 'Bengali',
				'bo' => 'Tibetan Standard, Tibetan, Central',
				'br' => 'Breton',
				'bs' => 'Bosnian',
				'ca' => 'Catalan; Valencian',
				'ce' => 'Chechen',
				'ch' => 'Chamorro',
				'co' => 'Corsican',
				'cr' => 'Cree',
				'cs' => 'Czech',
				'cu' => 'Old Church Slavonic, Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic',
				'cv' => 'Chuvash',
				'cy' => 'Welsh',
				'da' => 'Danish',
				'de' => 'German',
				'dv' => 'Divehi; Dhivehi; Maldivian;',
				'dz' => 'Dzongkha',
				'ee' => 'Ewe',
				'el' => 'Greek, Modern',
				'en' => 'English',
				'eo' => 'Esperanto',
				'es' => 'Spanish; Castilian',
				'et' => 'Estonian',
				'eu' => 'Basque',
				'fa' => 'Persian',
				'ff' => 'Fula; Fulah; Pulaar; Pular',
				'fi' => 'Finnish',
				'fj' => 'Fijian',
				'fo' => 'Faroese',
				'fr' => 'French',
				'fy' => 'Western Frisian',
				'ga' => 'Irish',
				'gd' => 'Scottish Gaelic; Gaelic',
				'gl' => 'Galician',
				'gn' => 'Guaraní',
				'gu' => 'Gujarati',
				'gv' => 'Manx',
				'ha' => 'Hausa',
				'he' => 'Hebrew (modern)',
				'hi' => 'Hindi',
				'ho' => 'Hiri Motu',
				'hr' => 'Croatian',
				'ht' => 'Haitian; Haitian Creole',
				'hu' => 'Hungarian',
				'hy' => 'Armenian',
				'hz' => 'Herero',
				'ia' => 'Interlingua',
				'id' => 'Indonesian',
				'ie' => 'Interlingue',
				'ig' => 'Igbo',
				'ii' => 'Nuosu',
				'ik' => 'Inupiaq',
				'io' => 'Ido',
				'is' => 'Icelandic',
				'it' => 'Italian',
				'iu' => 'Inuktitut',
				'ja' => 'Japanese (ja)',
				'jv' => 'Javanese (jv)',
				'ka' => 'Georgian',
				'kg' => 'Kongo',
				'ki' => 'Kikuyu, Gikuyu',
				'kj' => 'Kwanyama, Kuanyama',
				'kk' => 'Kazakh',
				'kl' => 'Kalaallisut, Greenlandic',
				'km' => 'Khmer',
				'kn' => 'Kannada',
				'ko' => 'Korean',
				'kr' => 'Kanuri',
				'ks' => 'Kashmiri',
				'ku' => 'Kurdish',
				'kv' => 'Komi',
				'kw' => 'Cornish',
				'ky' => 'Kirghiz, Kyrgyz',
				'la' => 'Latin',
				'lb' => 'Luxembourgish, Letzeburgesch',
				'lg' => 'Luganda',
				'li' => 'Limburgish, Limburgan, Limburger',
				'ln' => 'Lingala',
				'lo' => 'Lao',
				'lt' => 'Lithuanian',
				'lu' => 'Luba-Katanga',
				'lv' => 'Latvian',
				'mg' => 'Malagasy',
				'mh' => 'Marshallese',
				'mi' => 'Maori',
				'mk' => 'Macedonian',
				'ml' => 'Malayalam',
				'mn' => 'Mongolian',
				'mr' => 'Marathi (Mara?hi)',
				'ms' => 'Malay',
				'mt' => 'Maltese',
				'my' => 'Burmese',
				'na' => 'Nauru',
				'nb' => 'Norwegian Bokmål',
				'nd' => 'North Ndebele',
				'ne' => 'Nepali',
				'ng' => 'Ndonga',
				'nl' => 'Dutch',
				'nn' => 'Norwegian Nynorsk',
				'no' => 'Norwegian',
				'nr' => 'South Ndebele',
				'nv' => 'Navajo, Navaho',
				'ny' => 'Chichewa; Chewa; Nyanja',
				'oc' => 'Occitan',
				'oj' => 'Ojibwe, Ojibwa',
				'om' => 'Oromo',
				'or' => 'Oriya',
				'os' => 'Ossetian, Ossetic',
				'pa' => 'Panjabi, Punjabi',
				'pi' => 'Pali',
				'pl' => 'Polish',
				'ps' => 'Pashto, Pushto',
				'pt' => 'Portuguese',
				'qu' => 'Quechua',
				'rm' => 'Romansh',
				'rn' => 'Kirundi',
				'ro' => 'Romanian, Moldavian, Moldovan',
				'ru' => 'Russian',
				'rw' => 'Kinyarwanda',
				'sa' => 'Sanskrit (Sa?sk?ta)',
				'sc' => 'Sardinian',
				'sd' => 'Sindhi',
				'se' => 'Northern Sami',
				'sg' => 'Sango',
				'si' => 'Sinhala, Sinhalese',
				'sk' => 'Slovak',
				'sl' => 'Slovene',
				'sm' => 'Samoan',
				'sn' => 'Shona',
				'so' => 'Somali',
				'sq' => 'Albanian',
				'sr' => 'Serbian',
				'ss' => 'Swati',
				'st' => 'Southern Sotho',
				'su' => 'Sundanese',
				'sv' => 'Swedish',
				'sw' => 'Swahili',
				'ta' => 'Tamil',
				'te' => 'Telugu',
				'tg' => 'Tajik',
				'th' => 'Thai',
				'ti' => 'Tigrinya',
				'tk' => 'Turkmen',
				'tl' => 'Tagalog',
				'tn' => 'Tswana',
				'to' => 'Tonga (Tonga Islands)',
				'tr' => 'Turkish',
				'ts' => 'Tsonga',
				'tt' => 'Tatar',
				'tw' => 'Twi',
				'ty' => 'Tahitian',
				'ug' => 'Uighur, Uyghur',
				'uk' => 'Ukrainian',
				'ur' => 'Urdu',
				'uz' => 'Uzbek',
				've' => 'Venda',
				'vi' => 'Vietnamese',
				'vo' => 'Volapük',
				'wa' => 'Walloon',
				'wo' => 'Wolof',
				'xh' => 'Xhosa',
				'yi' => 'Yiddish',
				'yo' => 'Yoruba',
				'za' => 'Zhuang, Chuang',
				'zh' => 'Chinese',
				'zu' => 'Zulu',
		);		
	}
	public static function timezonesArray() {
		return array(
				"Pacific/Midway"=>"(GMT-11:00) Midway Island, Samoa",
				"America/Adak"=>"(GMT-10:00) Hawaii-Aleutian",
				"Etc/GMT+10"=>"(GMT-10:00) Hawaii",
				"Pacific/Marquesas"=>"(GMT-09:30) Marquesas Islands",
				"Pacific/Gambier"=>"(GMT-09:00) Gambier Islands",
				"America/Anchorage"=>"(GMT-09:00) Alaska",
				"America/Ensenada"=>"(GMT-08:00) Tijuana, Baja California",
				"Etc/GMT+8"=>"(GMT-08:00) Pitcairn Islands",
				"America/Los_Angeles"=>"(GMT-08:00) Pacific Time (US & Canada)",
				"America/Denver"=>"(GMT-07:00) Mountain Time (US & Canada)",
				"America/Chihuahua"=>"(GMT-07:00) Chihuahua, La Paz, Mazatlan",
				"America/Dawson_Creek"=>"(GMT-07:00) Arizona",
				"America/Belize"=>"(GMT-06:00) Saskatchewan, Central America",
				"America/Cancun"=>"(GMT-06:00) Guadalajara, Mexico City, Monterrey",
				"Chile/EasterIsland"=>"(GMT-06:00) Easter Island",
				"America/Chicago"=>"(GMT-06:00) Central Time (US & Canada)",
				"America/New_York"=>"(GMT-05:00) Eastern Time (US & Canada)",
				"America/Havana"=>"(GMT-05:00) Cuba",
				"America/Bogota"=>"(GMT-05:00) Bogota, Lima, Quito, Rio Branco",
				"America/Caracas"=>"(GMT-04:30) Caracas",
				"America/Santiago"=>"(GMT-04:00) Santiago",
				"America/La_Paz"=>"(GMT-04:00) La Paz",
				"Atlantic/Stanley"=>"(GMT-04:00) Faukland Islands",
				"America/Campo_Grande"=>"(GMT-04:00) Brazil",
				"America/Goose_Bay"=>"(GMT-04:00) Atlantic Time (Goose Bay)",
				"America/Glace_Bay"=>"(GMT-04:00) Atlantic Time (Canada)",
				"America/St_Johns"=>"(GMT-03:30) Newfoundland",
				"America/Araguaina"=>"(GMT-03:00) UTC-3",
				"America/Montevideo"=>"(GMT-03:00) Montevideo",
				"America/Miquelon"=>"(GMT-03:00) Miquelon, St. Pierre",
				"America/Godthab"=>"(GMT-03:00) Greenland",
				"America/Argentina/Buenos_Aires"=>"(GMT-03:00) Buenos Aires",
				"America/Sao_Paulo"=>"(GMT-03:00) Brasilia",
				"America/Noronha"=>"(GMT-02:00) Mid-Atlantic",
				"Atlantic/Cape_Verde"=>"(GMT-01:00) Cape Verde Is.",
				"Atlantic/Azores"=>"(GMT-01:00) Azores",
				"Europe/Belfast"=>"(GMT) Greenwich Mean Time : Belfast",
				"Europe/Dublin"=>"(GMT) Greenwich Mean Time : Dublin",
				"Europe/Lisbon"=>"(GMT) Greenwich Mean Time : Lisbon",
				"Europe/London"=>"(GMT) Greenwich Mean Time : London",
				"Africa/Abidjan"=>"(GMT) Monrovia, Reykjavik",
				"Europe/Amsterdam"=>"(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna, Warsaw",
				"Europe/Belgrade"=>"(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague",
				"Europe/Brussels"=>"(GMT+01:00) Brussels, Copenhagen, Madrid, Paris",
				"Africa/Algiers"=>"(GMT+01:00) West Central Africa",
				"Africa/Windhoek"=>"(GMT+01:00) Windhoek",
				"Asia/Beirut"=>"(GMT+02:00) Beirut",
				"Africa/Cairo"=>"(GMT+02:00) Cairo",
				"Asia/Gaza"=>"(GMT+02:00) Gaza",
				"Africa/Blantyre"=>"(GMT+02:00) Harare, Pretoria",
				"Asia/Jerusalem"=>"(GMT+02:00) Jerusalem",
				"Europe/Minsk"=>"(GMT+02:00) Minsk",
				"Asia/Damascus"=>"(GMT+02:00) Syria",
				"Europe/Moscow"=>"(GMT+03:00) Moscow, St. Petersburg, Volgograd",
				"Africa/Addis_Ababa"=>"(GMT+03:00) Nairobi",
				"Asia/Tehran"=>"(GMT+03:30) Tehran",
				"Asia/Dubai"=>"(GMT+04:00) Abu Dhabi, Muscat",
				"Asia/Yerevan"=>"(GMT+04:00) Yerevan",
				"Asia/Kabul"=>"(GMT+04:30) Kabul",
				"Asia/Yekaterinburg"=>"(GMT+05:00) Ekaterinburg",
				"Asia/Tashkent"=>"(GMT+05:00) Tashkent",
				"Asia/Kolkata"=>"(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi",
				"Asia/Katmandu"=>"(GMT+05:45) Kathmandu",
				"Asia/Dhaka"=>"(GMT+06:00) Astana, Dhaka",
				"Asia/Novosibirsk"=>"(GMT+06:00) Novosibirsk",
				"Asia/Rangoon"=>"(GMT+06:30) Yangon (Rangoon)",
				"Asia/Bangkok"=>"(GMT+07:00) Bangkok, Hanoi, Jakarta",
				"Asia/Krasnoyarsk"=>"(GMT+07:00) Krasnoyarsk",
				"Asia/Hong_Kong"=>"(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi",
				"Asia/Irkutsk"=>"(GMT+08:00) Irkutsk, Ulaan Bataar",
				"Australia/Perth"=>"(GMT+08:00) Perth",
				"Australia/Eucla"=>"(GMT+08:45) Eucla",
				"Asia/Tokyo"=>"(GMT+09:00) Osaka, Sapporo, Tokyo",
				"Asia/Seoul"=>"(GMT+09:00) Seoul",
				"Asia/Yakutsk"=>"(GMT+09:00) Yakutsk",
				"Australia/Adelaide"=>"(GMT+09:30) Adelaide",
				"Australia/Darwin"=>"(GMT+09:30) Darwin",
				"Australia/Brisbane"=>"(GMT+10:00) Brisbane",
				"Australia/Hobart"=>"(GMT+10:00) Hobart",
				"Asia/Vladivostok"=>"(GMT+10:00) Vladivostok",
				"Australia/Lord_Howe"=>"(GMT+10:30) Lord Howe Island",
				"Etc/GMT-11"=>"(GMT+11:00) Solomon Is., New Caledonia",
				"Asia/Magadan"=>"(GMT+11:00) Magadan",
				"Pacific/Norfolk"=>"(GMT+11:30) Norfolk Island",
				"Asia/Anadyr"=>"(GMT+12:00) Anadyr, Kamchatka",
				"Pacific/Auckland"=>"(GMT+12:00) Auckland, Wellington",
				"Etc/GMT-12"=>"(GMT+12:00) Fiji, Kamchatka, Marshall Is.",
				"Pacific/Chatham"=>"(GMT+12:45) Chatham Islands",
				"Pacific/Tongatapu"=>"(GMT+13:00) Nuku'alofa",
				"Pacific/Kiritimati"=>"(GMT+14:00) Kiritimati");
	}
}
?>