@ 2014-06-16T23:27:28Z <?php
header("Expires: " . gmdate("D, d M Y H:i:s", 0) . " GMT");
// RSS2iCal by Dean Sanvitale @2003
// My version displays one event per item with specific dates for each item
// Code used from RSSiCal Version 0.8.3 by Noel David Jackson (noel@noeljackson.com)
// RSS Parser by Edward Swindelles (ed@readinged.com)
//
//include("rssical/parseRSS.php");
////////////////////////////////////////////////////////////
//RSS Parser included inline for easy distribution
/* Copyright 2002-2003 Edward Swindelles (ed@readinged.com)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* Default settings, you may change them at your whim. See README. */
$rss_cache_path = '';
$rss_default_cache_time = 180;
$rss_debug_mode = true;
/* Private variables, do not change. */
$rss_contents = array();
$rss_cache_age = 0;
$rss_tag = '';
$rss_isItem = false;
$rss_isChannel = false;
$rss_isImage = false;
$rss_isTextInput = false;
$rss_index = 0;
function stream_last_modified($url)
{
if (function_exists('version_compare') && version_compare(phpversion(), '4.3.0') > 0)
{
if (!($fp = @fopen($url, 'r')))
return NULL;
$meta = stream_get_meta_data($fp);
for ($j = 0; isset($meta['wrapper_data'][$j]); $j++)
{
if (strstr(strtolower($meta['wrapper_data'][$j]), 'last-modified'))
{
$modtime = substr($meta['wrapper_data'][$j], 15);
break;
}
}
fclose($fp);
}
else
{
$parts = parse_url($url);
$host = $parts['host'];
$path = $parts['path'];
if (!($fp = @fsockopen($host, 80)))
return NULL;
$req = "HEAD $path HTTP/1.0\r\nUser-Agent: PHP/".phpversion()."\r\nHost: $host:80\r\nAccept: */*\r\n\r\n";
fputs($fp, $req);
while (!feof($fp))
{
$str = fgets($fp, 4096);
if (strstr(strtolower($str), 'last-modified'))
{
$modtime = substr($str, 15);
break;
}
}
fclose($fp);
}
return isset($modtime) ? strtotime($modtime) : time();
}
function parseRSS($url, $cache_file=NULL, $cache_time=NULL)
{
global $rss_contents, $rss_default_cache_time, $rss_isTextInput,
$rss_cache_path, $rss_cache_age, $rss_tag, $rss_isImage,
$rss_isItem, $rss_isChannel, $rss_index, $rss_debug_mode;
$rss_error = '<br /><strong>Error on line %s of '.__FILE__.'</strong>: %s<br />';
if (!function_exists('xml_parser_create'))
{
if ($rss_debug_mode)
printf($rss_error, (__LINE__-3), '<a href="http://www.php.net/manual/en/ref.xml.php">PHP\'s XML Extension</a> is not loaded or available.');
return false;
}
$rss_contents = array();
if (!is_null($cache_file))
{
if (!isset($rss_cache_path) || !strlen($rss_cache_path))
$rss_cache_path = dirname(__FILE__);
$cache_file = str_replace('//', '/', $rss_cache_path.'/'.$cache_file);
if (is_null($cache_time))
$cache_time = $rss_default_cache_time;
$rss_cache_age = file_exists($cache_file) ? ceil((time() - filemtime($cache_file)) / 60) : 0;
$remotemodtime = stream_last_modified($url);
if (is_null($remotemodtime))
{
if ($rss_debug_mode)
printf($rss_error, (__LINE__-4), 'Could not connect to remote RSS file ('.$url.').');
return false;
}
}
if (is_null($cache_file) ||
(!is_null($cache_file) && !file_exists($cache_file)) ||
(!is_null($cache_file) && file_exists($cache_file) && $rss_cache_age > $cache_time && $remotemodtime > ((time()) - ($rss_cache_age * 60))))
{
$rss_tag = '';
$rss_isItem = false;
$rss_isChannel = false;
$rss_index = 0;
$saxparser = @xml_parser_create();
if (!is_resource($saxparser))
{
if ($rss_debug_mode)
printf($rss_error, (__LINE__-4), 'Could not create an instance of <a href="http://www.php.net/manual/en/ref.xml.php">PHP\'s XML parser</a>.');
return false;
}
xml_parser_set_option($saxparser, XML_OPTION_CASE_FOLDING, false);
xml_set_element_handler($saxparser, 'sax_start', 'sax_end');
xml_set_character_data_handler($saxparser, 'sax_data');
if (!($fp = @fopen($url, 'r')))
{
if ($rss_debug_mode)
printf($rss_error, (__LINE__-3), 'Could not connect to remote RSS file ('.$url.').');
return false;
}
while ($data = fread($fp, 4096))
{
$parsedOkay = xml_parse($saxparser, $data, feof($fp));
if (!$parsedOkay && xml_get_error_code($saxparser) != XML_ERROR_NONE)
{
if ($rss_debug_mode)
printf($rss_error, (__LINE__-3), 'File has an XML error (<em>'.xml_error_string(xml_get_error_code($saxparser)).'</em> at line <em>'.xml_get_current_line_number($saxparser).'</em>).');
return false;
}
}
xml_parser_free($saxparser);
fclose($fp);
if (!is_null($cache_file))
{
if (!($cache = @fopen($cache_file, 'w')))
{
if ($rss_debug_mode)
printf($rss_error, (__LINE__-3), 'Could not right to cache file (<em>'.$cache_file.'</em>). The path may be invalid or you may not have write permissions.');
return false;
}
fwrite($cache, serialize($rss_contents));
fclose($cache);
}
}
else
{
if (!($fp = @fopen($cache_file, 'r')))
{
if ($rss_debug_mode)
printf($rss_error, (__LINE__-3), 'Could not read contents of cache file (<em>'.$cache_file.'</em>).');
return false;
}
$rss_contents = unserialize(fread($fp, filesize($cache_file)));
fclose($fp);
}
return $rss_contents;
}
function sax_start($parser, $name, $attribs)
{
global $rss_tag, $rss_isItem, $rss_isChannel, $rss_isImage, $rss_index, $rss_isTextInput;
$rss_tag = $name = strtolower($name);
if ($name == 'channel')
{
$rss_isChannel = true;
$rss_isImage = false;
$rss_isItem = false;
}
elseif ($name == 'image')
{
$rss_isChannel = false;
$rss_isImage = true;
$rss_isItem = false;
}
elseif ($name == 'item')
{
$rss_index++;
$rss_isChannel = false;
$rss_isImage = false;
$rss_isItem = true;
}
elseif ($name == 'textinput')
{
$rss_isChannel = false;
$rss_isImage = false;
$rss_isItem = false;
$rss_isTextInput = true;
}
}
function sax_end($parser, $name){}
function sax_data($parser, $data)
{
global $rss_tag, $rss_isItem, $rss_isChannel, $rss_contents, $rss_isTextInput, $rss_isImage, $rss_index;
if ($data != "\n")
{
if ($rss_isChannel && !$rss_isItem && strlen($data))
(!isset($rss_contents['channel'][$rss_tag]) || !strlen($rss_contents['channel'][$rss_tag])) ?
$rss_contents['channel'][$rss_tag] = $data :
$rss_contents['channel'][$rss_tag].= $data ;
elseif ($rss_isItem && strlen($data))
(!isset($rss_contents[$rss_index-1][$rss_tag]) || !strlen($rss_contents[$rss_index-1][$rss_tag])) ?
$rss_contents[$rss_index-1][$rss_tag] = $data :
$rss_contents[$rss_index-1][$rss_tag].= $data ;
elseif ($rss_isImage && strlen($data))
(!isset($rss_contents['image'][$rss_tag]) || !strlen($rss_contents['image'][$rss_tag])) ?
$rss_contents['image'][$rss_tag] = $data :
$rss_contents['image'][$rss_tag].= $data ;
elseif ($rss_isTextInput && strlen($data))
(!isset($rss_contents['textinput'][$rss_tag]) || !strlen($rss_contents['textinput'][$rss_tag])) ?
$rss_contents['textinput'][$rss_tag] = $data :
$rss_contents['textinput'][$rss_tag].= $data ;
}
}
///////////////////////////////
function getVar($varName, $varDefaultVal) {
global $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_POST_FILES, $HTTP_COOKIE_VARS;
if (isset($HTTP_GET_VARS[$varName])) {
$varVal = $HTTP_GET_VARS[$varName];
}
elseif (isset($HTTP_POST_VARS[$varName])) {
$varVal = $HTTP_POST_VARS[$varName];
}
elseif (isset($HTTP_POST_FILES[$varName])) {
$varVal = $HTTP_POST_FILES[$varName];
}
elseif (isset($HTTP_COOKIE_VARS[$varName])) {
$varVal = $HTTP_COOKIE_VARS[$varName];
}
else {
$varVal = $varDefaultVal;
}
return $varVal;
}
function write_log ($logentry) {
global $logfile;
if (!$logfile) {
$logfile = fopen ("./log.txt", "a");
}
fwrite($logfile, date("m/d/y h:i:s A - ") . $logentry . "\n");
}
function pre_fix($strText) {
$strResult = $strText;
//$strResult = strip_tags($strResult);
$trans_array = array();
for ($i=127; $i<255; $i++) {
$trans_array[chr($i)] = "&#" . $i . ";";
}
$strResult = strtr($strResult, $trans_array);
$strResult = ltrim($strResult);
$strResult = rtrim($strResult);
return $strResult;
}
function fix($data) {
$data = pre_fix($data);
$patterns = array(
'/<br \/>/',
'/<\/p>/',
'/<p.*?>/',
'/(.*?)<a.*? href="(.*?http:\/\/.+?)".*?>(.*?)<\/a>(.*?)/',
'/<code.*?>(.*?)<\/code>/',
'/<img.*?src=".*?".*?[\/]*>/',
'/<blockquote.*?cite="(http:\/\/.+?)".*?>(.*?)<\/blockquote>/',
'/<cite.*?>(.*?)<\/cite>/',
'/<[ou]l*?>(.+?)<\/[ou]l>/',
'/<li*?>(.+?)<\/li>/',
'/<span.*?>(.*?)<\/span>/',
'/<strong.*?>(.*?)<\/strong>/',
'/<b.*?>(.*?)<\/b>/',
'/<em.*?>(.*?)<\/em>/',
'/<i.*?>(.*?)<\/i>/',
'/,/',
'/;/',
'/</',
'/>/',
'/&/',
'/̵[67];/',
'/̶[01];/'
);
$replace = array(
//br and p
"\\n",
"\\n\\n",
"",
//a element
//"\\1\\3 [link: \\2]\\4",
"\\1\\3 [link]\\4",
//code
"\\1",
//img
"[img]\\n",
//cite=,cite
"\\n\\2[cite: \\1]\\n\\n",
"[cite]\\1",
//ul/ol, li
"\\n\\1",
"* \\1\\n",
"\\1",
"\\1",
"\\1",
"\\1",
"\\1",
"\\,",
"\\;",
"<",
">",
"&",
"'",
"\""
);
$data = preg_replace($patterns, $replace, $data);
$data = strip_tags($data);
return $data;
}
$url = getVar("url", "");
if (strlen($url) == 0) {
echo "<HTML>\n";
echo "<HEAD>\n";
echo "<TITLE>RSS2iCal</TITLE>\n";
echo "</HEAD>\n";
echo "<BODY>\n";
echo "View and/or Subscribe to RSS/RDF News Feeds in iCalendar (vCal 2.0) format.<P>\n";
echo "Subscriptions have only been tested with Apple's iCal application.<P>\n";
echo "Once you have subscribed to a news feed in Apple's iCal, iSync can be used to synchronize it with your iPod, Palm, or cell phone.<P>\n";
echo "<HR>\n";
echo "<FORM NAME=\"Form_View\" METHOD=GET ACTION=\"http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "\">\n";
echo "RSS/RDF URL: <INPUT TYPE=TEXT SIZE=50 NAME=\"url\" VALUE=\"http://www.e-queue.com/index.rdf\">\n";
echo "<INPUT TYPE=HIDDEN NAME=\"format\" VALUE=\".ics\">\n";
echo "<INPUT TYPE=SUBMIT VALUE=\"View\">\n";
echo "<INPUT TYPE=BUTTON VALUE=\"Subscribe\" onClick=\"document.Form_Subscribe.url.value = document.Form_View.url.value; document.Form_Subscribe.submit();\">\n";
echo "</FORM>\n";
echo "<FORM NAME=\"Form_Subscribe\" METHOD=GET ACTION=\"webcal://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "\">\n";
echo "<INPUT TYPE=HIDDEN SIZE=50 NAME=\"url\" VALUE=\"http://www.e-queue.com/index.rdf\">\n";
echo "<INPUT TYPE=HIDDEN NAME=\"format\" VALUE=\".ics\">\n";
echo "</FORM>\n";
echo "Links to Common RSS Feeds Converted to iCal format and subscriptions to them:\n";
echo "<UL>\n";
echo "<LI><A HREF=\"http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "?url=http://www.bbc.co.uk/syndication/feeds/news/ukfs_news/front_page/rss091.xml&format=*.ics\">BBC News | Front Page</A> [<A HREF=\"webcal://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "?url=http://www.bbc.co.uk/syndication/feeds/news/ukfs_news/front_page/rss091.xml&format=*.ics\">subscribe</A>]</LI>\n";
echo "<LI><A HREF=\"http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "?url=http://rss.com.com/2547-12-0-20.xml&format=*.ics\">CNET News.com</A> [<A HREF=\"webcal://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "?url=http://rss.com.com/2547-12-0-20.xml&format=*.ics\">subscribe</A>]</LI>\n";
echo "<LI><A HREF=\"http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "?url=http://www.e-queue.com/index.rdf&format=*.ics\">E-Queue</A> [<A HREF=\"webcal://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "?url=http://www.e-queue.com/index.rdf&format=*.ics\">subscribe</A>]</LI>\n";
echo "<LI><A HREF=\"http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "?url=http://maccentral.macworld.com/mnn.cgi&format=*.ics\">MacCentral</A> [<A HREF=\"webcal://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "?url=http://maccentral.macworld.com/mnn.cgi&format=*.ics\">subscribe</A>]</LI>\n";
echo "<LI><A HREF=\"http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "?url=http://www.salon.com/feed/RDF/salon_use.rdf&format=*.ics\">Salon</A> [<A HREF=\"webcal://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "?url=http://www.salon.com/feed/RDF/salon_use.rdf&format=*.ics\">subscribe</A>]</LI>\n";
echo "<LI><A HREF=\"http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "?url=http://slashdot.org/slashdot.rss&format=*.ics\">Slashdot</A> [<A HREF=\"webcal://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "?url=http://slashdot.org/slashdot.rss&format=*.ics\">subscribe</A>]</LI>\n";
echo "<LI><A HREF=\"http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "?url=http://www.wired.com/news_drop/netcenter/netcenter.rdf&format=*.ics\">Wired News</A> [<A HREF=\"webcal://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "?url=http://www.wired.com/news_drop/netcenter/netcenter.rdf&format=*.ics\">subscribe</A>]</LI>\n";
echo "</UL>\n";
echo "</BODY>\n";
echo "</HTML>\n";
}
else {
$url = preg_replace('/http:\/\//', '', $url);
header("Content-type: text/plain");
//header("Content-Disposition: inline; filename=MyiCalFile.ics");
if ($rssData = parseRSS ( "http://$url")) {
$channel_title = fix($rssData["channel"]["title"]);
$channel_description = fix($rssData["channel"]["description"]);
if (strlen($channel_description) == 0) {
$channel_description = $channel_title;
}
$channel_date = pre_fix($rssData["channel"]["dc:date"]);
$channel_pubdate = pre_fix($rssData["channel"]["pubdate"]);
$channel_lastbuilddate = pre_fix($rssData["channel"]["lastbuilddate"]);
if (strlen($channel_pubdate) > 0 && (strlen($channel_date) == 0)) {
$channel_date = $channel_pubdate;
}
if (strlen($channel_lastbuilddate) > 0 && (strlen($channel_date) == 0)) {
$channel_date = $channel_lastbuilddate;
}
echo "BEGIN:VCALENDAR\n";
echo "CALSCALE:GREGORIAN\n";
//echo "X-WR-TIMEZONE;VALUE=TEXT:US/Eastern\n";
echo "METHOD:PUBLISH\n";
echo "PRODID:RSS2iCal 0.0.1\n";
echo "X-WR-CALNAME;VALUE=TEXT:" . $channel_title . "\n";
echo "X-WR-CALDESC;VALUE=TEXT:" . $channel_description . "\n";
//echo "X-WR-RELCALID;VALUE=TEXT:123456789\n";
echo "VERSION:2.0\n";
for ( $i = 0; isset ( $rssData[$i] ); $i++ ) {
$item_title = fix($rssData[$i]["title"]);
$item_link = fix($rssData[$i]["link"]);
if (strlen(fix($rssData[$i]["guid"])) > 0 && (strlen($item_link) == 0)) {
$item_link = fix($rssData[$i]["guid"]);
}
$item_description = fix($rssData[$i]["description"]);
if (strlen(fix($rssData[$i]["content:encoded"])) > 0) {
$item_description = fix($rssData[$i]["content:encoded"]);
}
if ((strlen($item_description) > 0) && (strlen($item_title) == 0)) {
$item_title = substr($item_description, 0, 30) . "...";
}
$item_date = pre_fix($rssData[$i]["dc:date"]);
$item_pubdate = pre_fix($rssData[$i]["pubdate"]);
if (strlen($item_pubdate) > 0 && (strlen($item_date) == 0)) {
$item_date = $item_pubdate;
}
//If we use the channel date, all entries have the same datetime
//This datetime is erroneous because it only applies to the latest item
//For now don't use it. This results in prettier iCal display
//if (strlen($channel_date) > 0 && (strlen($item_date) == 0)) {
//$item_date = $channel_date;
//}
//echo $item_date;
if (strlen($item_date) == 25) {
$strDT = substr($item_date, 5, 2) . "/";
$strDT = $strDT . substr($item_date, 8, 2) . "/";
$strDT = $strDT . substr($item_date, 0, 4) . " ";
$strDT = $strDT . substr($item_date, 11, 8) . " GMT";
//echo "strDT: " . $strDT;
$gmt_offset = substr($item_date, 19, 3);
$gmt_offset = 60 * 60 * $gmt_offset;
//echo "gmt_offset: " . $gmt_offset;
$unix_time = strtotime($strDT) - $gmt_offset;
//echo "unixtime: " . $unix_time;
$item_date = gmdate("Ymd\THis\Z", $unix_time);
}
elseif (strlen($item_date) == 29) {
$item_date = gmdate("Ymd\THis\Z", strtotime($item_date));
}
else {
$item_date = date("Ymd");
}
echo "BEGIN:VEVENT\n";
echo "UID:" . md5($item_link . $item_title) . "\n";
echo "DTSTAMP;VALUE=DATE:$item_date\n";
echo "SUMMARY:" . $item_title . "\n";
if ((strlen($item_link) > 0) && (strlen($item_description) > 0)) {
echo "DESCRIPTION:" . $item_link . "\\n\\n" . $item_description . "\n";
}
elseif (strlen($item_description) > 0) {
echo "DESCRIPTION:" . $item_description . "\n";
}
elseif (strlen($item_link) > 0) {
echo "DESCRIPTION:" . $item_link . "\\n\\n\n";
}
echo "DTSTART;VALUE=DATE:$item_date\n";
echo "DTEND;VALUE=DATE:$item_date\n";
echo "END:VEVENT\n";
}
echo "END:VCALENDAR\n";
}
else {
echo "Unable to parse RSS feed.";
}
}
?>
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
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).
Version System time (s) User time (s) Memory (MiB) 8.3.4 0.010 0.006 19.14 8.3.3 0.012 0.003 19.29 8.3.2 0.000 0.008 20.28 8.3.1 0.004 0.004 23.61 8.3.0 0.004 0.004 19.25 8.2.17 0.009 0.006 22.96 8.2.16 0.009 0.009 20.51 8.2.15 0.005 0.003 24.18 8.2.14 0.005 0.003 24.66 8.2.13 0.000 0.009 26.16 8.2.12 0.004 0.004 22.30 8.2.11 0.006 0.003 20.78 8.2.10 0.009 0.003 18.09 8.2.9 0.003 0.006 19.76 8.2.8 0.004 0.004 17.97 8.2.7 0.003 0.006 18.13 8.2.6 0.009 0.000 18.18 8.2.5 0.003 0.006 18.07 8.2.4 0.006 0.003 18.43 8.2.3 0.005 0.003 18.24 8.2.2 0.000 0.008 17.98 8.2.1 0.004 0.004 18.27 8.2.0 0.005 0.005 17.98 8.1.27 0.004 0.004 22.30 8.1.26 0.008 0.000 26.35 8.1.25 0.005 0.003 28.09 8.1.24 0.000 0.011 22.46 8.1.23 0.011 0.000 22.66 8.1.22 0.008 0.000 17.89 8.1.21 0.004 0.004 19.20 8.1.20 0.005 0.005 17.61 8.1.19 0.006 0.003 17.72 8.1.18 0.006 0.003 18.10 8.1.17 0.005 0.005 18.87 8.1.16 0.000 0.008 19.04 8.1.15 0.003 0.008 18.94 8.1.14 0.000 0.008 17.74 8.1.13 0.004 0.004 17.98 8.1.12 0.008 0.000 17.70 8.1.11 0.010 0.000 17.80 8.1.10 0.000 0.008 17.72 8.1.9 0.000 0.009 17.81 8.1.8 0.003 0.006 17.79 8.1.7 0.004 0.004 17.76 8.1.6 0.003 0.006 17.68 8.1.5 0.000 0.009 17.73 8.1.4 0.004 0.004 17.74 8.1.3 0.000 0.008 17.77 8.1.2 0.003 0.006 17.82 8.1.1 0.004 0.004 17.71 8.1.0 0.004 0.004 17.71 8.0.30 0.005 0.003 20.23 8.0.29 0.006 0.003 17.00 8.0.28 0.000 0.007 18.60 8.0.27 0.004 0.004 17.50 8.0.26 0.000 0.007 17.48 8.0.25 0.004 0.004 17.29 8.0.24 0.004 0.004 17.23 8.0.23 0.004 0.004 17.29 8.0.22 0.000 0.007 17.29 8.0.21 0.004 0.004 17.23 8.0.20 0.003 0.005 17.32 8.0.19 0.000 0.008 17.30 8.0.18 0.008 0.000 17.19 8.0.17 0.004 0.004 17.29 8.0.16 0.008 0.000 17.21 8.0.15 0.000 0.010 17.24 8.0.14 0.008 0.000 17.20 8.0.13 0.008 0.000 13.72 8.0.12 0.004 0.004 17.20 8.0.11 0.000 0.008 17.17 8.0.10 0.004 0.004 17.16 8.0.9 0.003 0.005 17.25 8.0.8 0.003 0.021 17.25 8.0.7 0.004 0.004 17.13 8.0.6 0.004 0.004 17.14 8.0.5 0.004 0.004 17.21 8.0.3 0.011 0.010 17.43 8.0.2 0.010 0.010 17.40 8.0.1 0.008 0.000 17.24 8.0.0 0.015 0.005 17.01 7.4.33 0.000 0.005 15.00 7.4.32 0.000 0.007 16.85 7.4.30 0.000 0.007 16.64 7.4.29 0.008 0.000 16.70 7.4.28 0.003 0.006 16.84 7.4.27 0.000 0.007 16.85 7.4.26 0.007 0.000 16.74 7.4.25 0.004 0.004 16.85 7.4.24 0.006 0.002 16.87 7.4.23 0.004 0.004 16.95 7.4.22 0.006 0.015 16.65 7.4.21 0.009 0.010 16.79 7.4.20 0.002 0.005 16.92 7.4.19 0.004 0.004 16.64 7.4.16 0.004 0.012 16.60 7.4.15 0.006 0.012 17.40 7.4.14 0.013 0.005 17.86 7.4.13 0.009 0.011 16.81 7.4.12 0.008 0.009 16.87 7.4.11 0.013 0.006 16.95 7.4.10 0.006 0.013 16.65 7.4.9 0.014 0.005 16.93 7.4.8 0.010 0.010 19.39 7.4.7 0.010 0.007 16.82 7.4.6 0.008 0.011 16.83 7.4.5 0.003 0.006 16.93 7.4.4 0.011 0.007 16.95 7.4.3 0.008 0.009 16.57 7.4.0 0.009 0.010 15.08 7.3.33 0.003 0.006 13.60 7.3.32 0.003 0.003 13.67 7.3.31 0.008 0.000 16.48 7.3.30 0.005 0.003 16.51 7.3.29 0.000 0.014 16.64 7.3.28 0.008 0.012 16.59 7.3.27 0.011 0.008 17.40 7.3.26 0.011 0.011 16.74 7.3.25 0.012 0.008 16.77 7.3.24 0.012 0.006 16.82 7.3.23 0.016 0.004 16.61 7.3.21 0.015 0.003 16.73 7.3.20 0.011 0.013 19.39 7.3.19 0.008 0.015 16.84 7.3.18 0.009 0.010 16.85 7.3.17 0.011 0.008 16.71 7.3.16 0.009 0.009 16.79 7.3.12 0.008 0.009 15.15 7.3.11 0.004 0.016 15.09 7.3.10 0.004 0.015 14.91 7.3.9 0.008 0.008 15.12 7.3.8 0.007 0.007 15.20 7.3.7 0.006 0.013 15.00 7.3.6 0.006 0.010 15.20 7.3.5 0.000 0.011 15.03 7.3.4 0.009 0.006 15.10 7.3.3 0.009 0.006 14.86 7.3.2 0.009 0.006 16.81 7.3.1 0.003 0.010 16.55 7.3.0 0.000 0.009 16.84 7.2.33 0.012 0.009 17.06 7.2.32 0.012 0.009 17.01 7.2.31 0.015 0.006 17.18 7.2.30 0.007 0.011 16.74 7.2.29 0.016 0.003 16.74 7.2.25 0.007 0.010 15.62 7.2.24 0.007 0.014 15.08 7.2.23 0.010 0.007 15.28 7.2.22 0.000 0.019 15.18 7.2.21 0.000 0.014 14.95 7.2.20 0.003 0.014 15.28 7.2.19 0.003 0.013 15.37 7.2.18 0.007 0.007 15.42 7.2.17 0.006 0.009 15.18 7.2.0 0.000 0.012 19.37 7.1.33 0.006 0.010 15.82 7.1.32 0.003 0.013 15.85 7.1.31 0.000 0.009 15.60 7.1.30 0.005 0.005 15.99 7.1.29 0.008 0.004 15.91 7.1.28 0.004 0.011 15.98 7.1.27 0.003 0.007 15.84 7.1.26 0.003 0.010 15.84 7.1.20 0.011 0.004 15.92 7.1.10 0.007 0.007 18.04 7.1.7 0.000 0.010 17.29 7.1.6 0.010 0.016 19.46 7.1.5 0.006 0.006 17.00 7.1.0 0.003 0.077 22.40 7.0.20 0.004 0.004 16.83 7.0.14 0.000 0.080 21.95 7.0.10 0.000 0.053 20.20 7.0.9 0.013 0.077 20.06 7.0.8 0.030 0.067 20.10 7.0.7 0.007 0.043 20.10 7.0.6 0.010 0.043 20.13 7.0.5 0.037 0.070 20.60 7.0.4 0.007 0.077 20.01 7.0.3 0.007 0.043 20.05 7.0.2 0.007 0.047 20.02 7.0.1 0.003 0.053 20.13 7.0.0 0.007 0.053 20.08 5.6.28 0.000 0.080 21.05 5.6.25 0.020 0.047 20.57 5.6.24 0.010 0.047 20.73 5.6.23 0.003 0.047 20.71 5.6.22 0.003 0.090 20.57 5.6.21 0.007 0.063 20.57 5.6.20 0.003 0.047 21.20 5.6.19 0.007 0.043 21.19 5.6.18 0.013 0.080 21.21 5.6.17 0.003 0.063 21.06 5.6.16 0.003 0.060 21.11 5.6.15 0.003 0.043 21.09 5.6.14 0.013 0.070 21.18 5.6.13 0.000 0.050 21.13 5.6.12 0.010 0.087 21.16 5.6.11 0.013 0.077 21.13 5.6.10 0.010 0.047 21.16 5.6.9 0.003 0.053 21.04 5.6.8 0.007 0.047 20.47 5.6.7 0.010 0.037 20.58 5.6.6 0.010 0.057 20.53 5.6.5 0.010 0.037 20.54 5.6.4 0.010 0.050 20.45 5.6.3 0.000 0.053 20.55 5.6.2 0.013 0.063 20.65 5.6.1 0.003 0.073 20.50 5.6.0 0.013 0.050 20.55 5.5.38 0.010 0.060 20.48 5.5.37 0.010 0.053 20.63 5.5.36 0.013 0.037 20.52 5.5.35 0.010 0.057 20.54 5.5.34 0.023 0.033 20.99 5.5.33 0.007 0.053 21.01 5.5.32 0.010 0.080 20.90 5.5.31 0.003 0.087 20.93 5.5.30 0.010 0.063 20.86 5.5.29 0.007 0.050 21.01 5.5.28 0.007 0.057 21.04 5.5.27 0.003 0.043 21.05 5.5.26 0.007 0.057 20.98 5.5.25 0.000 0.050 20.83 5.5.24 0.003 0.060 20.43 5.5.23 0.010 0.080 20.42 5.5.22 0.020 0.060 20.30 5.5.21 0.010 0.043 20.34 5.5.20 0.010 0.087 20.25 5.5.19 0.013 0.073 20.35 5.5.18 0.007 0.083 20.41 5.5.16 0.003 0.057 20.36 5.5.15 0.010 0.063 20.25 5.5.14 0.003 0.040 20.24 5.5.13 0.013 0.073 20.39 5.5.12 0.013 0.073 20.33 5.5.11 0.010 0.073 20.34 5.5.10 0.000 0.077 20.11 5.5.9 0.007 0.043 20.30 5.5.8 0.013 0.037 20.14 5.5.7 0.007 0.050 20.23 5.5.6 0.013 0.067 20.24 5.5.5 0.010 0.033 20.27 5.5.4 0.007 0.080 20.18 5.5.3 0.010 0.053 20.17 5.5.2 0.003 0.047 20.15 5.5.1 0.007 0.037 20.16 5.5.0 0.007 0.073 20.22 5.4.45 0.010 0.043 19.41 5.4.44 0.013 0.053 19.50 5.4.43 0.020 0.067 19.39 5.4.42 0.010 0.047 19.45 5.4.41 0.007 0.037 19.12 5.4.40 0.007 0.063 19.30 5.4.39 0.013 0.040 19.13 5.4.38 0.007 0.053 19.25 5.4.37 0.007 0.063 19.09 5.4.36 0.007 0.087 19.23 5.4.35 0.010 0.067 19.14 5.4.34 0.010 0.033 19.14 5.4.32 0.007 0.073 19.17 5.4.31 0.003 0.083 19.10 5.4.30 0.010 0.073 18.97 5.4.29 0.000 0.067 19.20 5.4.28 0.003 0.053 19.09 5.4.27 0.020 0.067 19.01 5.4.26 0.007 0.063 19.27 5.4.25 0.010 0.077 19.09 5.4.24 0.007 0.043 18.94 5.4.23 0.003 0.077 19.09 5.4.22 0.003 0.060 19.27 5.4.21 0.003 0.043 19.09 5.4.20 0.007 0.050 18.95 5.4.19 0.010 0.070 19.09 5.4.18 0.010 0.070 19.07 5.4.17 0.003 0.077 19.23 5.4.16 0.000 0.047 19.06 5.4.15 0.003 0.073 18.90 5.4.14 0.003 0.063 16.50 5.4.13 0.010 0.070 16.43 5.4.12 0.010 0.033 16.43 5.4.11 0.010 0.067 16.61 5.4.10 0.003 0.040 16.60 5.4.9 0.003 0.070 16.45 5.4.8 0.007 0.047 16.42 5.4.7 0.007 0.080 16.37 5.4.6 0.003 0.057 16.43 5.4.5 0.007 0.033 16.54 5.4.4 0.010 0.063 16.55 5.4.3 0.007 0.053 16.51 5.4.2 0.010 0.057 16.54 5.4.1 0.013 0.070 16.57 5.4.0 0.010 0.063 15.89 5.3.29 0.003 0.080 14.91 5.3.28 0.000 0.077 14.85 5.3.27 0.003 0.077 14.79 5.3.26 0.003 0.083 14.84 5.3.25 0.003 0.043 14.86 5.3.24 0.003 0.077 14.79 5.3.23 0.010 0.063 14.77 5.3.22 0.013 0.063 14.79 5.3.21 0.010 0.050 14.80 5.3.20 0.003 0.043 14.68 5.3.19 0.010 0.073 14.73 5.3.18 0.013 0.033 14.70 5.3.17 0.000 0.067 14.85 5.3.16 0.003 0.043 14.77 5.3.15 0.007 0.037 14.76 5.3.14 0.010 0.033 14.85 5.3.13 0.010 0.087 14.70 5.3.12 0.010 0.070 14.75 5.3.11 0.007 0.063 14.67 5.3.10 0.003 0.087 14.30 5.3.9 0.000 0.043 14.14 5.3.8 0.010 0.057 14.21 5.3.7 0.013 0.053 14.26 5.3.6 0.003 0.043 14.22 5.3.5 0.003 0.043 14.20 5.3.4 0.003 0.040 14.07 5.3.3 0.010 0.043 14.18 5.3.2 0.007 0.043 13.88 5.3.1 0.003 0.047 13.96 5.3.0 0.007 0.037 13.83
preferences:dark mode live preview
45.95 ms | 400 KiB | 5 Q