3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * PHP URI Library * * A PHP library for working with URI's. Requires PHP 5.3.7 or later. Replaces * and extends PHP's parse_url() * * Originally inspired by P Guardiario's work. * * @author Nicholas Jordon * @link https://github.com/ProjectCleverWeb/PHP-URI * @copyright 2014 Nicholas Jordon - All Rights Reserved * @version 1.0.0 RC2 * @license http://opensource.org/licenses/MIT * @see http://en.wikipedia.org/wiki/URI_scheme */ namespace {class uri extends \uri\main{}}namespace uri{abstract class main{ public $error; public $input; private $object; private $chain; private $authority; private $domain; private $fqdn; private $fragment; private $host; private $protocol; private $pass; private $password; private $path; private $port; private $query; private $scheme; private $scheme_name; private $scheme_symbols; private $user; private $username; public function __construct($input){$this->input=$input;$this->object=\uri\parser::parse($input);if(!empty($this->object->host)){\uri\generate::authority($this->object);\uri\generate::aliases($this->object);$this->chain=new \uri\chain($this->object);$this->authority=&$this->object->authority;$this->domain=&$this->object->domain;$this->fqdn=&$this->object->fqdn;$this->fragment=&$this->object->fragment;$this->host=&$this->object->host;$this->protocol=&$this->object->protocol;$this->pass=&$this->object->pass;$this->password=&$this->object->password;$this->path=&$this->object->path;$this->port=&$this->object->port;$this->query=&$this->object->query;$this->scheme=&$this->object->scheme;$this->scheme_name=&$this->object->scheme_name;$this->scheme_symbols=&$this->object->scheme_symbols;$this->user=&$this->object->user;$this->username=&$this->object->username;}else {$this->error='Input could not be parsed as a URI';}} public function __toString(){return \uri\generate::string($this->object);} public function __invoke(){return \uri\generate::string($this->object);} public function __get($name){if(isset($this->object->$name)){\uri\generate::scheme($this->object);\uri\generate::authority($this->object);return $this->object->$name;}else {$this->_err('UNDEFINED',debug_backtrace(),$name);return NULL;}} public function __set($name,$value){if(isset($this->object->$name)&&$name!='authority'){\uri\actions::modify($this->object,'replace',$name,$value);return $value;}else {$this->_err('FORBIDDEN',debug_backtrace(),$name);return NULL;}} public function __isset($name){\uri\generate::scheme($this->object);\uri\generate::authority($this->object);return !empty($this->object->$name);} public function __unset($name){if(isset($this->object->$name)&&$name!='host'&&$name!='authority'){\uri\actions::modify($this->object,'replace',$name,'');return TRUE;}elseif(isset($this->object->$name)){$this->_err('FORBIDDEN',debug_backtrace(),$name);}else {$this->_err('UNDEFINED',debug_backtrace(),$name);}return FALSE;} public function str(){return \uri\generate::string($this->object);} public function to_string(){return \uri\generate::string($this->object);} public function p_str(){echo \uri\generate::string($this->object);} public function arr(){$arr=array('authority'=>$this->object->authority,'fragment'=>$this->object->fragment,'host'=>$this->object->host,'pass'=>$this->object->pass,'path'=>$this->object->path,'port'=>$this->object->port,'query'=>$this->object->query,'scheme'=>$this->object->scheme,'scheme_name'=>$this->object->scheme_name,'scheme_symbols'=>$this->object->scheme_symbols,'user'=>$this->object->user,);$arr['domain']=&$arr['host'];$arr['fqdn']=&$arr['host'];$arr['password']=&$arr['pass'];$arr['protocol']=&$arr['scheme'];$arr['username']=&$arr['user'];ksort($arr);return $arr;} public function to_array(){return $this->arr();} public function path_info(){return \uri\generate::path_info($this->object);} public function query_arr(){return \uri\generate::query_array($this->object);} public function replace($section,$str){return \uri\actions::modify($this->object,'replace',$section,$str);} public function prepend($section,$str){return \uri\actions::modify($this->object,'prepend',$section,$str);} public function append($section,$str){return \uri\actions::modify($this->object,'append',$section,$str);} public function query_add($key,$value){return \uri\query::add($this->object,$key,$value);} public function query_replace($key,$value){\uri\query::replace($this->object,$key,$value);} public function query_remove($key){\uri\query::remove($this->object,$key);} public function query_exists($key){return \uri\query::exists($this->object,$key);} public function query_get($key){return \uri\query::get($this->object,$key);} public function query_rename($key,$new_key){return \uri\query::rename($this->object,$key,$new_key);} public function chain(){return $this->chain;} public function reset(){$this->__construct($this->input);} private function _err($type,$trace,$name){$fmt='Undifined property via <code>%1$s::%2$s()</code>: Property <code>%3$s</code> cannot be unset in <b>%4$s</b> on line <b>%5$s</b>. Error triggered';if($type=='FORBIDDEN'){$fmt='Forbidden property via <code>%1$s::%2$s()</code>: Property <code>%3$s</code> cannot be unset in <b>%4$s</b> on line <b>%5$s</b>. Error triggered';}trigger_error(sprintf($fmt,$trace[0]['class'],$trace[0]['function'],$name,$trace[0]['file'],$trace[0]['line']),E_USER_NOTICE);}}class parser{const REGEX='/^(([a-z]+)?(\:\/\/|\:|\/\/))?(?:([a-z0-9$_\.\+!\*\'\(\),;&=\-]+)(?:\:([a-z0-9$_\.\+!\*\'\(\),;&=\-]*))?@)?((?:\d{3}.\d{3}.\d{3}.\d{3})|(?:[a-z0-9\-_]+(?:\.[a-z0-9\-_]+)*))(?:\:([0-9]+))?((?:\:|\/)[a-z0-9\-_\/\.]+)?(?:\?([a-z0-9$_\.\+!\*\'\(\),;:@&=\-%]*))?(?:#([a-z0-9\-_]*))?/i'; public static function parse($uri){if(!is_string($uri)){return FALSE;}$parsed=self::regex_parse($uri);if(empty($parsed)){$parsed=array_fill(1,10,'');}return (object)array('scheme'=>$parsed[1],'scheme_name'=>$parsed[2],'scheme_symbols'=>$parsed[3],'user'=>$parsed[4],'pass'=>$parsed[5],'host'=>$parsed[6],'port'=>$parsed[7],'path'=>$parsed[8],'query'=>$parsed[9],'fragment'=>$parsed[10],);} private static function regex_parse($uri){preg_match_all(self::REGEX,$uri,$parsed,PREG_SET_ORDER);if(!isset($parsed[0][6])){return FALSE;}return $parsed[0]+array_fill(0,11,'');}}class modify{ public static function scheme_name(&$object,$action,$str){$org=$object->scheme_name;\uri\actions::callback($object,$action,__FUNCTION__,$str);if(!(preg_match('/\A[a-z]{1,10}\Z/',$object->scheme_name)||empty($str))){$object->scheme_name=$org;return FALSE;}elseif(empty($object->scheme_symbols)){$object->scheme_symbols='://';}return \uri\generate::string($object);} public static function scheme_symbols(&$object,$action,$str){$org=$object->scheme_symbols;\uri\actions::callback($object,$action,__FUNCTION__,$str);if(!(preg_match('/\A(:)?([\/]{2,3})?\Z/',$object->scheme_symbols)||empty($str))){$object->scheme_symbols=$org;return FALSE;}return \uri\generate::string($object);} public static function scheme(&$object,$action,$str){$org=array($object->scheme,$object->scheme_name,$object->scheme_symbols);\uri\actions::callback($object,$action,__FUNCTION__,$str);if(empty($object->scheme)){$object->scheme=$object->scheme_name=$object->scheme_symbols='';}else {preg_match('/\A([a-z]{1,10})?(\:|:\/\/|\/\/|:\/\/\/)\Z/i',$object->scheme,$matches);if(empty($matches[1])&&empty($matches[2])){$object->scheme=$org[0];$object->scheme_name=$org[1];$object->scheme_symbols=$org[2];return FALSE;}else {$matches=$matches+array('','','');$object->scheme=$matches[0];$object->scheme_name=$matches[1];$object->scheme_symbols=$matches[2];}}return \uri\generate::string($object);} public static function protocol(&$object,$action,$str){return self::scheme($object,$action,$str);} public static function user(&$object,$action,$str){$str=rawurlencode($str);\uri\actions::callback($object,$action,__FUNCTION__,$str);return \uri\generate::string($object);} public static function username(&$object,$action,$str){return self::user($object,$action,$str);} public static function pass(&$object,$action,$str){$str=rawurlencode($str);\uri\actions::callback($object,$action,__FUNCTION__,$str);return \uri\generate::string($object);} public static function password(&$object,$action,$str){return self::pass($object,$action,$str);} public static function host(&$object,$action,$str){$org=$object->host;\uri\actions::callback($object,$action,__FUNCTION__,$str);if((!preg_match('/\A(([a-z0-9_]([a-z0-9\-_]+)?)\.)+[a-z0-9]([a-z0-9\-]+)?\Z/i',$object->host)&&!preg_match('/\A([0-9]\.){3}[0-9]\Z/i',$object->host))){$object->host=$org;return FALSE;}return \uri\generate::string($object);} public static function domain(&$object,$action,$str){return self::host($object,$action,$str);} public static function fqdn(&$object,$action,$str){return self::host($object,$action,$str);} public static function port(&$object,$action,$str){$org=$object->port;if(isset($str[0])&&$str[0]==':'){$str=substr($str,1);}\uri\actions::callback($object,$action,__FUNCTION__,$str);if(!(preg_match('/\A[0-9]{0,5}\Z/',$object->port)||empty($str))){$object->port=$org;return FALSE;}return \uri\generate::string($object);} public static function path(&$object,$action,$str){\uri\actions::callback($object,$action,__FUNCTION__,$str);return \uri\generate::string($object);} public static function query(&$object,$action,$str){if(isset($str[0])&&$str[0]=='?'){$str=substr($str,1);}\uri\actions::callback($object,$action,__FUNCTION__,$str);return \uri\generate::string($object);} public static function fragment(&$object,$action,$str){if(isset($str[0])&&$str[0]=='#'){$str=substr($str,1);}$str=urlencode($str);\uri\actions::callback($object,$action,__FUNCTION__,$str);return \uri\generate::string($object);}}class actions{ public static function modify(&$object,$action,$section,$str){settype($section,'string');settype($str,'string');$section=strtolower($section);if(is_callable(array('\\uri\\modify',$section))){return call_user_func_array(array('\\uri\\modify',$section),array(&$object,$action,$str));}else {return FALSE;}} public static function callback(&$object,$action,$section,$str){switch($action){case 'replace':$object->$section=$str;break;case 'prepend':$object->$section=$str.$object->$section;break;case 'append':$object->$section=$object->$section.$str;}}}class generate{ public static function aliases(&$object){$object->protocol=&$object->scheme;$object->username=&$object->user;$object->password=&$object->pass;$object->domain=&$object->host;$object->fqdn=&$object->host;} public static function scheme(&$object){$object->scheme=$object->scheme_name.$object->scheme_symbols;} public static function authority(&$object){$str_arr=array($object->user);if(empty($object->user)==FALSE&&empty($object->pass)){$str_arr[]='@';}elseif(!empty($object->user)){$str_arr[]=':'.$object->pass.'@';}$str_arr[]=$object->host;if(!empty($object->port)){$str_arr[]=':'.$object->port;}$object->authority=implode('',$str_arr);} public static function string(&$object){self::scheme($object);self::authority($object);$str_arr=array($object->scheme,$object->authority,$object->path);if(!empty($object->query)){$str_arr[]='?'.$object->query;}if(!empty($object->fragment)){$str_arr[]='#'.$object->fragment;}return implode('',$str_arr);} public static function path_info(&$object){$defaults=array('dirname'=>'','basename'=>'','extension'=>'','filename'=>'','array'=>array());$info=pathinfo($object->path)+$defaults;$info['array']=array_values(array_filter(explode('/',$object->path)));ksort($info);return $info;} public static function query_array(&$object){parse_str($object->query,$return);return (array)$return;}}class query{ public static function add(&$object,$key,$value){$qarray=\uri\generate::query_array($object);} public static function replace(&$object,$key,$value){$qarray=\uri\generate::query_array($object);} public static function remove(&$object,$key){$qarray=\uri\generate::query_array($object);} public static function exists(&$object,$key){$qarray=\uri\generate::query_array($object);} public static function get(&$object,$key){$qarray=\uri\generate::query_array($object);} public static function rename(&$object,$key,$new_key){$qarray=\uri\generate::query_array($object);}}class chain{ private $object; public function __construct(&$object){$this->object=&$object;return $this;} public function p_str(){echo \uri\generate::string($this->object);return $this;} public function replace($section,$str){\uri\actions::modify($this->object,'replace',$section,$str);return $this;} public function prepend($section,$str){\uri\actions::modify($this->object,'prepend',$section,$str);return $this;} public function append($section,$str){\uri\actions::modify($this->object,'append',$section,$str);return $this;}}} namespace { $uri = new uri('ftp://jdoe:pass1234@my-server.com/public_html'); foreach (range(1,10000) as $test_num) { $uri->chain()-> replace('SCHEME_NAME', 'ftps')-> replace('PORT', '22')-> replace('USER', 'admin')-> replace('PASS', 'secure-pass-123'); } echo $uri; }

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.60.0000.01618.40
8.3.50.0230.00622.05
8.3.40.0070.01419.00
8.3.30.0060.00919.39
8.3.20.0000.00820.29
8.3.10.0090.00021.83
8.3.00.0050.00518.03
8.2.180.0120.00618.12
8.2.170.0210.00022.96
8.2.160.0150.00020.46
8.2.150.0040.00424.18
8.2.140.0030.00624.66
8.2.130.0030.00526.16
8.2.120.0090.00620.88
8.2.110.0030.00621.00
8.2.100.0090.00518.15
8.2.90.0030.00619.52
8.2.80.0030.00618.00
8.2.70.0060.00317.88
8.2.60.0000.00918.29
8.2.50.0060.00318.07
8.2.40.0030.00619.94
8.2.30.0000.00818.54
8.2.20.0000.00818.03
8.2.10.0040.00418.35
8.2.00.0030.00617.97
8.1.280.0030.01225.92
8.1.270.0060.00323.87
8.1.260.0050.00326.35
8.1.250.0060.00328.09
8.1.240.0000.00921.30
8.1.230.0090.00319.41
8.1.220.0000.00817.89
8.1.210.0040.00818.77
8.1.200.0050.00517.60
8.1.190.0040.00417.48
8.1.180.0040.00418.10
8.1.170.0000.00818.71
8.1.160.0040.00422.16
8.1.150.0000.00818.95
8.1.140.0030.00517.57
8.1.130.0080.00018.11
8.1.120.0040.00417.68
8.1.110.0040.00417.62
8.1.100.0000.00717.52
8.1.90.0000.00817.60
8.1.80.0040.00417.61
8.1.70.0040.00417.44
8.1.60.0030.00617.78
8.1.50.0040.00417.64
8.1.40.0040.00417.67
8.1.30.0030.00617.71
8.1.20.0040.00417.71
8.1.10.0030.00617.66
8.1.00.0030.00617.56
8.0.300.0000.00818.77
8.0.290.0030.00516.88
8.0.280.0040.00418.73
8.0.270.0000.00717.48
8.0.260.0000.00717.44
8.0.250.0000.00717.30
8.0.240.0070.00017.27
8.0.230.0000.00817.29
8.0.220.0050.00217.12
8.0.210.0030.00317.14
8.0.200.0060.00317.20
8.0.190.0060.00317.25
8.0.180.0040.00417.11
8.0.170.0040.00417.24
8.0.160.0040.00417.23
8.0.150.0030.00617.12
8.0.140.0060.00317.11
8.0.130.0040.00413.56
8.0.120.0000.00817.14
8.0.110.0030.00617.18
8.0.100.0040.00417.16
8.0.90.0060.00317.15
8.0.80.0090.00617.11
8.0.70.0000.00917.23
8.0.60.0080.00017.20
8.0.50.0050.00317.05
8.0.30.0080.01317.40
8.0.20.0100.01117.44
8.0.10.0040.00417.12
8.0.00.0130.00717.10
7.4.330.0000.07515.01
7.4.320.0030.07817.20
7.4.300.0030.07517.39
7.4.290.0030.07817.44
7.4.280.0030.07817.37
7.4.270.0030.07917.43
7.4.260.0030.07617.25
7.4.250.0100.07117.27
7.4.240.0050.07617.36
7.4.230.0070.07417.36
7.4.220.0070.16317.48
7.4.210.0130.17017.26
7.4.200.0000.07917.36
7.4.160.0100.13517.28
7.4.150.0160.14517.40
7.4.140.0130.13717.86
7.4.130.0080.14117.11
7.4.120.0100.13617.34
7.4.110.0030.22617.18
7.4.100.0090.17217.09
7.4.90.0170.13617.37
7.4.80.0070.18219.39
7.4.70.0210.20017.23
7.4.60.0060.20717.30
7.4.50.0000.08217.21
7.4.40.0070.15617.34
7.4.30.0030.14117.23
7.4.10.0080.17815.61
7.4.00.0050.14915.56
7.3.330.0000.08214.04
7.3.320.0070.07513.85
7.3.310.0030.07716.96
7.3.300.0030.07817.12
7.3.290.0100.13117.13
7.3.280.0130.16617.10
7.3.270.0160.12917.43
7.3.260.0100.12817.05
7.3.250.0100.19817.35
7.3.240.0160.13917.29
7.3.230.0190.12317.41
7.3.210.0130.12417.07
7.3.200.0070.16019.39
7.3.190.0060.22017.34
7.3.180.0090.16717.00
7.3.170.0130.12817.34
7.3.160.0100.13117.33
7.3.130.0100.20315.80
7.3.120.0110.15515.50
7.3.110.0070.18615.64
7.3.100.0070.16715.23
7.3.90.0030.15715.48
7.3.80.0030.14315.62
7.3.70.0050.14915.49
7.3.60.0030.18815.61
7.3.50.0080.15015.67
7.3.40.0020.18015.62
7.3.30.0030.17015.58
7.3.20.0070.15916.71
7.3.10.0050.14516.92
7.3.00.0070.15716.83
7.2.330.0130.17117.43
7.2.320.0160.18717.17
7.2.310.0100.17717.20
7.2.300.0160.17617.54
7.2.290.0090.16517.39
7.2.260.0080.22015.72
7.2.250.0070.19215.91
7.2.240.0070.16115.85
7.2.230.0100.15715.88
7.2.220.0050.19615.80
7.2.210.0050.19615.83
7.2.200.0080.15015.70
7.2.190.0050.19315.75
7.2.180.0080.17615.65
7.2.170.0070.16015.91
7.2.160.0000.18415.64
7.2.150.0050.16717.12
7.2.140.0070.15617.01
7.2.130.0030.16516.98
7.2.120.0050.15517.08
7.2.110.0070.15117.07
7.2.100.0030.20817.21
7.2.90.0050.17117.09
7.2.80.0050.15817.22
7.2.70.0030.17216.99
7.2.60.0020.16917.11
7.2.50.0030.15117.08
7.2.40.0050.16617.20
7.2.30.0030.16917.21
7.2.20.0020.17317.17
7.2.10.0020.14717.27
7.2.00.0030.13817.83
7.1.330.0020.18715.76
7.1.320.0030.23716.06
7.1.310.0070.16815.90
7.1.300.0030.18416.13
7.1.290.0070.20215.97
7.1.280.0000.21415.98
7.1.270.0050.17816.02
7.1.260.0070.17316.03
7.1.250.0050.21216.14
7.1.240.0020.20315.98
7.1.230.0020.20716.08
7.1.220.0030.21416.15
7.1.210.0030.21816.09
7.1.200.0030.20315.81
7.1.190.0070.18016.00
7.1.180.0020.19416.13
7.1.170.0100.21415.97
7.1.160.0050.18616.10
7.1.150.0020.21915.97
7.1.140.0020.20216.00
7.1.130.0030.17116.04
7.1.120.0070.21015.85
7.1.110.0080.18316.04
7.1.100.0040.17216.80
7.1.90.0020.17115.98
7.1.80.0070.17016.21
7.1.70.0040.15316.36
7.1.60.0030.15316.62
7.1.50.0070.16116.56
7.1.40.0070.20016.01
7.1.30.0020.19116.02
7.1.20.0070.18415.97
7.1.10.0020.17815.97
7.1.00.0040.22418.13
7.0.330.0050.18415.74
7.0.320.0020.17615.51
7.0.310.0020.19315.58
7.0.300.0030.21415.66
7.0.290.0050.18315.42
7.0.280.0070.19615.76
7.0.270.0050.17115.56
7.0.260.0030.20615.67
7.0.250.0050.19215.63
7.0.240.0050.22415.72
7.0.230.0050.20015.80
7.0.220.0030.19615.56
7.0.210.0050.22415.56
7.0.200.0010.17616.11
7.0.190.0020.17315.65
7.0.180.0070.19215.60
7.0.170.0030.18515.65
7.0.160.0070.20815.58
7.0.150.0100.22915.75
7.0.140.0060.21517.80
7.0.130.0080.23115.76
7.0.120.0030.18715.71
7.0.110.0100.17915.68
7.0.100.0060.20017.28
7.0.90.0070.16917.29
7.0.80.0040.19217.11
7.0.70.0100.19117.44
7.0.60.0030.17317.33
7.0.50.0060.17717.46
7.0.40.0090.18315.80
7.0.30.0070.20215.66
7.0.20.0020.17815.86
7.0.10.0040.17815.89
7.0.00.0030.20815.83
5.6.400.0120.39715.95
5.6.390.0020.40716.18
5.6.380.0020.39316.21
5.6.370.0050.36515.99
5.6.360.0000.35716.27
5.6.350.0030.37916.07
5.6.340.0030.38516.01
5.6.330.0050.38115.76
5.6.320.0050.40516.27
5.6.310.0050.38515.96
5.6.300.0070.38416.04
5.6.290.0050.37216.08
5.6.280.0010.33718.22
5.6.270.0030.35116.17
5.6.260.0070.42816.16
5.6.250.0060.36618.11
5.6.240.0040.35218.05
5.6.230.0080.34318.06
5.6.220.0040.35018.05
5.6.210.0110.34718.12
5.6.200.0080.36418.16
5.6.190.0080.33218.21
5.6.180.0080.36918.07
5.6.170.0040.37118.20
5.6.160.0070.36018.11
5.6.150.0070.37118.11
5.6.140.0110.35718.27
5.6.130.0060.37818.21
5.6.120.0040.39118.12
5.6.110.0060.34118.13
5.6.100.0110.36818.09
5.6.90.0070.30718.14
5.6.80.0040.35817.85
5.6.70.0060.36217.82
5.6.60.0070.37117.92
5.6.50.0030.38917.93
5.6.40.0060.34917.92
5.6.30.0030.39817.86
5.6.20.0060.34217.88
5.6.10.0080.35817.84
5.6.00.0040.34717.90
5.5.380.0040.32717.92
5.5.370.0160.33117.97
5.5.360.0080.34317.92
5.5.350.0070.36517.88
5.5.340.0030.36018.04
5.5.330.0090.38018.05
5.5.320.0010.37918.07
5.5.310.0100.34918.07
5.5.300.0070.33318.09
5.5.290.0020.40118.16
5.5.280.0060.33418.08
5.5.270.0100.35518.08
5.5.260.0030.36718.12
5.5.250.0090.34117.95
5.5.240.0080.38217.85
5.5.230.0070.40417.86
5.5.220.0070.33917.72
5.5.210.0060.34617.78
5.5.200.0060.35517.63
5.5.190.0020.36717.82
5.5.180.0100.36117.77
5.5.170.0070.39015.66
5.5.160.0040.37217.86
5.5.150.0060.39217.78
5.5.140.0090.41417.70
5.5.130.0100.35617.86
5.5.120.0070.38817.94
5.5.110.0080.33917.87
5.5.100.0060.39517.77
5.5.90.0060.37817.78
5.5.80.0060.36917.67
5.5.70.0100.31817.70
5.5.60.0060.34417.76
5.5.50.0070.34017.64
5.5.40.0060.39217.80
5.5.30.0090.38117.73
5.5.20.0040.37017.82
5.5.10.0070.33317.88
5.5.00.0090.39817.87
5.4.450.0060.36415.39
5.4.440.0110.35415.48
5.4.430.0040.39415.51
5.4.420.0070.38615.49
5.4.410.0070.35415.32
5.4.400.0020.35815.36
5.4.390.0030.32115.36
5.4.380.0070.37415.18
5.4.370.0060.35315.33
5.4.360.0070.39615.28
5.4.350.0030.36315.26
5.4.340.0020.35915.37
5.4.330.0030.42012.67
5.4.320.0070.37315.36
5.4.310.0070.39015.34
5.4.300.0060.38115.32
5.4.290.0030.33315.30
5.4.280.0060.34415.29
5.4.270.0020.32415.29
5.4.260.0080.36715.15
5.4.250.0220.35915.35
5.4.240.0060.37615.19
5.4.230.0040.38315.33
5.4.220.0040.38615.24
5.4.210.0030.39015.29
5.4.200.0070.37415.41
5.4.190.0040.35115.23
5.4.180.0030.39115.33
5.4.170.0070.35215.28
5.4.160.0040.37715.39
5.4.150.0060.39015.32
5.4.140.0070.32214.38
5.4.130.0040.40414.45
5.4.120.0100.33514.42
5.4.110.0060.35214.45
5.4.100.0110.38414.46
5.4.90.0020.38114.32
5.4.80.0110.32814.49
5.4.70.0080.39614.38
5.4.60.0090.37314.43
5.4.50.0030.32914.50
5.4.40.0080.35414.43
5.4.30.0070.32114.38
5.4.20.0040.34414.47
5.4.10.0030.36514.45
5.4.00.0160.36914.25
5.3.290.0090.51313.79
5.3.280.0060.48313.71
5.3.270.0060.46613.73
5.3.260.0060.48513.80
5.3.250.0070.49613.73
5.3.240.0030.47613.71
5.3.230.0070.45013.71
5.3.220.0090.42213.71
5.3.210.0080.46113.75
5.3.200.0030.48813.74
5.3.190.0080.49913.78
5.3.180.0030.49913.72
5.3.170.0120.49113.80
5.3.160.0030.46713.78
5.3.150.0040.44313.72
5.3.140.0070.46713.67
5.3.130.0020.42113.73
5.3.120.0070.47613.59
5.3.110.0080.52613.73
5.3.100.0010.42213.53
5.3.90.0040.46413.60
5.3.80.0010.45613.44
5.3.70.0010.44713.42
5.3.60.0070.48813.48
5.3.50.0060.46313.46
5.3.40.0080.49613.47
5.3.30.0040.42513.50
5.3.20.0010.43713.35
5.3.10.0000.44313.31
5.3.00.0040.38213.25

preferences:
51.13 ms | 401 KiB | 5 Q