@ 2015-04-16T21:30:38Z <?php
/**
*
* Note that this file is used by the crm project track interface. Make note of that before changing anything.
*
*/
function get_task_statuses($in_options=array()) {
$options = array_merge(
array(
"use_keys"=>false,
"display_field"=>"display",
"value_field"=>"value"
),
$in_options
);
$statuses = array(
array("On Hold", "On Hold"),
array("Awaiting Action", "Awaiting Action"),
array("In Progress", "In Progress"),
array("Duplicate", "Duplicate"),
array("Not a Bug", "Not a Bug"),
array("Obsolete", "Obsolete"),
array("Completed", "Completed"),
array("Completed & Closed", "Completed & Closed")
);
if($options["use_keys"]) {
$keyed_statuses = array();
for($i = 0; $i < count($statuses); $i++) {
$keyed_statuses[] = array(
$options["value_field"]=>$statuses[$i][0],
$options["display_field"]=>$statuses[$i][1]
);
}
return $keyed_statuses;
}
else {
return $statuses;
}
}
function get_task_status_x_color() {
return array(
"On Hold"=>"#F1A7EE",
"In Progress"=>"#21F8F0",
"Awaiting Action"=>"#E8F100",
"Completed"=>"#09F872",
"Closed"=>"#F57474"
);
}
function get_task_priorities($in_options=array()) {
$options = array_merge(
array(
"use_keys"=>false,
"display_field"=>"display",
"value_field"=>"value"
),
$in_options
);
$priorities = array(
array("High", "High"),
array("Moderate", "Moderate"),
array("Low", "Low")
);
if($options["use_keys"]) {
$keyed_priorities = array();
for($i = 0; $i < count($priorities); $i++) {
$keyed_priorities[] = array(
$options["value_field"]=>$priorities[$i][0],
$options["display_field"]=>$priorities[$i][1]
);
}
return $keyed_priorities;
}
else {
return $priorities;
}
}
function get_task_types($in_options=array()) {
$options = array_merge(
array(
"use_keys"=>false,
"display_field"=>"display",
"value_field"=>"value"
),
$in_options
);
$types = array(
array("Design", "Design"),
array("Documentation", "Documentation"),
array("Enhancement", "Enhancement"),
array("Implementation", "Implementation"),
array("Import", "Import"),
array("Modification", "Modification"),
array("Move", "Move"),
array("Security", "Security"),
array("Testing", "Testing")
);
if($options["use_keys"]) {
$keyed_priorities = array();
for($i = 0; $i < count($types); $i++) {
$keyed_priorities[] = array(
$options["value_field"]=>$types[$i][0],
$options["display_field"]=>$types[$i][1]
);
}
return $keyed_priorities;
}
else {
return $types;
}
}
function get_bug_types($in_options=array()) {
$options = array_merge(
array(
"use_keys"=>false,
"display_field"=>"display",
"value_field"=>"value"
),
$in_options
);
$types = array(
array("Modification", "Modification"),
array("Error", "Error"),
array("Fatal Error", "Fatal Error"),
array("Enhancement", "Enhancement"),
array("Logical", "Logical"),
array("Update", "Update"),
array("Idea", "Idea"),
array("Uptrak Error", "Uptrak Error")
);
if($options["use_keys"]) {
$keyed_priorities = array();
for($i = 0; $i < count($types); $i++) {
$keyed_priorities[] = array(
$options["value_field"]=>$types[$i][0],
$options["display_field"]=>$types[$i][1]
);
}
return $keyed_priorities;
}
else {
return $types;
}
}
/*
* This function will determine what email to send based on the records given to us.
*/
function send_task_email($old_task, $new_task) {
global $commonDB, $concept_db, $session;
$crm_db = clone($commonDB);
$crm_db->select_database("allofe_crm");
if ($new_task["category"] == 1) {
$category = 'Bug';
}
else if ($new_task["category"] == 2) {
$category = 'Task';
}
else {
$category = $new_task["category"];
}
$assigned_to_user_id = $new_task["assigned_to_user_id"];
$user_id = $session->get("user_id");
$following_users = ($new_task["following_user_ids"] == NULL) ? array() : explode(',',$new_task["following_user_ids"]);
$send_assigned_email = $send_status_email = $comment_change = $url_change = false;
//Send email to assigned user when task is created
if($new_task["newtask"]) {
if ($new_task['status'] != "Completed") {
$send_assigned_email = true;
$send_status_email = true;
}
}
else {
//Send email to assigned users and following users when task changes hands
if ($assigned_to_user_id != $old_task["assigned_to_user_id"]) {
$send_assigned_email = true;
$send_status_email = true;
}
//Send email to all users if task changes statuses
if ($new_task["status"] != $old_task["status"]) {
$send_status_email = true;
}
//Send email to all users when comments are changed
if ($old_task["comments"] && $new_task["comments"]) {
if(is_string($old_task["comments"]) && $new_task["comments"] !== $old_task["comments"]) {
//sort both of the task's comments to verify that a change isn't in how they are sorted.
function commentsCompare($a, $b)
{
if ($a['date'] == $b['date']) {
if ($a['username'] == $b['username']) {
if ($a['comment'] == $b['comment']) {
return 0;
}
return ($a['comment'] < $b['comment']) ? -1 : 1;
}
return ($a['username'] < $b['username']) ? -1 : 1;
}
return ($a['date'] < $b['date']) ? -1 : 1;
}
$new_comments = json_decode($new_task["comments"], true);
$old_comments = json_decode($old_task["comments"], true);
usort($new_comments, "commentsCompare");
usort($old_comments, "commentsCompare");
$new_task["comments"] = json_encode($new_comments);
$old_task["comments"] = json_encode($old_comments);
if ($new_task["comments"] !== $old_task["comments"]) {
$comment_change = true;
$send_status_email = true;
}
}
}
//Determine which items in the comments have been changed/added
if ($comment_change) {
$new_comments = json_decode($new_task["comments"], true);
$old_comments = json_decode($old_task["comments"], true);
$num_old_comments = count($old_comments);
$num_new_comments = count($new_comments);
for ($i = 0; $i < ($num_old_comments <= $num_new_comments ? $num_old_comments : $num_new_comments); $i++) {
if (!$new_comments[$i]) {
break;
}
if ($new_comments[$i]["username"] !== $old_comments[$i]["username"]) {
$new_comments[$i]["bold"] = true;
}
if ($new_comments[$i]["date"] !== $old_comments[$i]["date"]) {
$new_comments[$i]["bold"] = true;
}
if ($new_comments[$i]["comment"] !== $old_comments[$i]["comment"]) {
$new_comments[$i]["bold"] = true;
}
}
for ($i = $num_old_comments; $i < $num_new_comments; $i++) {
$new_comments[$i]["bold"] = true;
}
$new_task["comments"] = json_encode($new_comments);
$old_task["comments"] = json_encode($old_comments);
}
//Send email to all users when git_urls are changed
if (is_string($old_task["git_urls"]) && $new_task["git_urls"] !== $old_task["git_urls"]) {
$url_change = true;
$send_status_email = true;
}
$bolded_urls = array();
//Determine which items in the git_urls have been changed/added
if ($url_change) {
$new_urls = json_decode($new_task["git_urls"], true);
$old_urls = json_decode($old_task["git_urls"], true);
$num_new_urls = count($new_urls);
$num_old_urls = count($old_urls);
for ($i = 0; $i < ($num_old_urls <= $num_new_urls ? $num_old_urls : $num_new_urls); $i++) {
if ($new_urls[$i] !== $old_urls[$i]) {
$bolded_urls[] = true;
}
else {
$bolded_urls[] = false;
}
}
for ($i = $num_old_urls; $i < $num_new_urls; $i++) {
$bolded_urls[] = true;
}
}
}
if($send_assigned_email || $send_status_email) {
//Gets names and emails of all active users
$results = $commonDB->query("
SELECT user_id,first_name,last_name, email
FROM users
WHERE status = 1"
);
$emails = $names = array();
while($record = $results->fetch_next_associative()) {
$names[$record["user_id"]] = $record["last_name"].", ".$record["first_name"];
$emails[$record["user_id"]] = $record["email"];
}
$user_name = ($names[$user_id]) ? $names[$user_id] : " a Root User";
//Creates contents of email
$email_content = array();
$email_content[] = "<b>Category:</b> ". $category;
$email_content[] = "<b>Assigned To:</b> ". $names[$assigned_to_user_id];
$email_content[] = "<b>Status:</b> " . $new_task["status"];
$email_content[] = "<b>Priority:</b> " . (($new_task["priority"]) ? $new_task["priority"] : "None");
$email_content[] = "<b>Type:</b> " . $new_task["type"];
$email_content[] = "<b>Project:</b> " . $new_task["project_name"];
if ($new_task["due_date"] && strtoupper($new_task["due_date"]) !== "NULL" && $new_task["due_date"] !== NULL) {
$email_content[] = "<b>Due Date:</b>" . date("n/j/Y", strtotime($new_task["due_date"]));
}
if($new_task["date_completed"] && strtoupper($new_task["date_completed"]) !== "NULL" && $new_task["date_completed"] !== NULL) {
$email_content[] = "<b>Completion Date:</b>" . date("n/j/Y", strtotime($new_task["date_completed"]));
}
if($new_task["system_implementation_id"]) {
$system_implementation_name = $commonDB->plookup(
"system_implementation_name",
"system_implementation",
"system_implementation_id = ?",
$new_task["system_implementation_id"]
);
$email_content[] = "<b>System Implementation:</b> " . $system_implementation_name;
}
if($new_task["crm_company_id"]) {
$crm_company_name = $crm_db->plookup(
"name",
"crm_companies",
"crm_company_id = ?",
$new_task["crm_company_id"]
);
$email_content[] = "<b>CRM Company:</b> " . $crm_company_name;
}
if($new_task["allofe_product_id"]) {
$allofe_product_name = $concept_db->plookup(
"name",
"allofe_products",
"product_id = ?",
$new_task["allofe_product_id"]
);
$email_content[] = "<b>AllofE Product:</b> " . $allofe_product_name;
}
if($new_task["crm_project_track_id"]) {
$crm_project_name = $crm_db->plookup(
"name",
"crm_project_tracks",
"crm_project_track_id = ?",
$new_task["crm_project_track_id"]
);
$email_content[] = "<b>CRM Project:</b> " . $crm_project_name;
}
if ($new_task["newtask"]) {
$creator_name = $user_name;
}
else {
$creator_name = ($names[$old_task["create_user_id"]]) ? $names[$old_task["create_user_id"]] : "Root User";
}
$email_content[] = "<b>Creator:</b> ". $creator_name;
$email_content[] = "<b>Short Description:</b> " . $new_task["short_description"];
$email_content[] = "<br/><u><b>Long Description</b></u>" . html_entity_decode($new_task["long_description"]);
$comments = array();
if($new_task["comments"]) {
$comments_json = json_decode($new_task["comments"], true);
//inline functions not available in earlier versions of php
function commentStatusCompare($a, $b) {
if ($a["date"] == $b["date"]) {
if($a["comment"]=="(Completed & Closed)" || $a["comment"]=="(Completed)")
return -1;
else
return 1;
}
return ($a["date"] > $b["date"]) ? -1 : 1;
}
usort($comments_json, "commentStatusCompare");//it is used once here
foreach($comments_json as $comment) {
if ($comment["bold"]) {
$comments[] = "<b>" . date("n/j/Y", strtotime($comment["date"])) . " - " . $comment["username"] . ":<br/><i>" . $comment["comment"]."</i></b>";
}
else {
$comments[] = date("n/j/Y", strtotime($comment["date"])) . " - " . $comment["username"] . ":<br/><i>" . $comment["comment"]."</i>";
}
}
}
if($comments) {
$email_content[] = "<u><b>Comments</b></u><br/>" . implode("<br/>", $comments);
}
$git_urls = "";
if ($new_task["git_urls"]) {
$git_urls_json = json_decode($new_task["git_urls"],true);
$index = 0;
foreach($git_urls_json as $git) {
if ($bolded_urls[$index]) {
$git_urls = $git_urls . "<br/><b>" . $git . "</b>";
}
else {
$git_urls = $git_urls . "<br/>" . $git;
}
$index++;
}
$email_content[] = "<br/><u><b>Git Urls</b></u><br/>" . $git_urls;
}
$email_text = implode("<br/>",$email_content);
//Send email notifying user of new task if they have an email and are not the user that assigned the task
if ($send_assigned_email) {
if ($emails[$assigned_to_user_id] && $assigned_to_user_id != $user_id) {
$m = new Mail();
$m->content_type = "text/html";
$m->To($emails[$assigned_to_user_id]);
$m->From($category."s <tasks@allofe.net>");
$m->Subject("New ".$category." Assignment: ". $new_task["short_description"] . " --".$category." ID #" .$new_task["task_id"]);
$m->Body(rtrim(chunk_split(base64_encode(
"The following ".$category." has been assigned to you by <b>" . $user_name . ":</b><br/><br/>". stripslashes($email_text)
))),"text/html");
$m->ctencoding = "base64";
$m->Send();
}
//Removes user from following users array so they don't receive 2 emails
unset($following_users[array_search($assigned_to_user_id,$following_users)]);
}
//Sends status emails to all users that are following the task, excluding the current user
if($send_status_email && !empty($following_users)) {
foreach($following_users as $following_user_id) {
if ($emails[$following_user_id] && $following_user_id != $user_id) {
$m = new Mail();
$m->content_type = "text/html";
$m->To($emails[$following_user_id]);
$m->From($category."s Tracking<tasks@allofe.net>");
$m->Subject($category." Status Report: " . $new_task["short_description"] . " --".$category." ID #" .$new_task["task_id"]);
$m->Body(rtrim(chunk_split(base64_encode(
"The following task has been updated by <b>" . $user_name . ":</b><br/><br/>".stripslashes($email_text)
))),"text/html");
$m->ctencoding = "base64";
$m->Send();
}
}
}
}
}
//Establishing email for reminder
function send_reminder_email($old_task, $new_task){
global $commonDB, $session;
if ($new_task["category"] == 1) {
$category = 'Bug';
}
else if ($new_task["category"] == 2) {
$category = 'Task';
}
else {
$category = $new_task["category"];
}
//look up emails
$emails = array();
$names = array();
$results = $commonDB->pquery(
"SELECT user_id,first_name,last_name, email, email_on FROM users WHERE user_id in (?,?,?)",
array($new_task["assigned_to_user_id"], $old_task["create_user_id"], $session->stored_data["user_id"])
);
while($record = $results->fetch_next_associative()) {
$names[$record["user_id"]] = $record["last_name"].", ".$record["first_name"];
$emails[$record["user_id"]] = $record["email"];
}
$email_text =
"Type: " . $new_task["type"] . "<br/>"
. "Priority: " . (($new_task["priority"])? $new_task["priority"] : "None") . "<br/>"
. "Status: " . $new_task["status"] . "<br/>"
. "Short Description: ". $new_task["short_description"]."<br/>"
. "Long Description: <br/>".$new_task["long_description"]."<br/>"
. "Due Date: ". $new_task['due_date']. "<br/>"
. "Creator: ". ($names[$old_task["create_user_id"]] ? $names[$old_task["create_user_id"]] : "N/A"). "<br/>"
. "Assigned To: ". $names[$new_task["assigned_to_user_id"]];
$m = new Mail();
$m->content_type = "text/html";
$m->To($emails[$new_task["assigned_to_user_id"]]);
$m->From("tasks Tracking<tasks@allofe.net>");
$m->Subject("REMINDER: ".$project_name." ".$category." Status Report --".$category." ID #" . $new_task["task_id"] . " Status: " . $new_task["status"]);
$m->Body(rtrim(chunk_split(base64_encode(
$category." ID: ".$new_task["task_id"]. "<br/>". stripslashes($email_text)
))),"text/html");
$m->ctencoding = "base64";
$m->delaySend($new_task['send_by_date']);
$batch_email_id = $m->Send();
return $batch_email_id;
}
?>
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.6 0.013 0.010 18.28 8.3.5 0.015 0.003 17.86 8.3.4 0.012 0.003 18.85 8.3.3 0.013 0.003 19.05 8.3.2 0.004 0.004 20.50 8.3.1 0.005 0.003 21.85 8.3.0 0.003 0.007 19.21 8.2.18 0.010 0.006 16.75 8.2.17 0.000 0.015 22.96 8.2.16 0.007 0.007 21.93 8.2.15 0.005 0.003 24.18 8.2.14 0.000 0.008 24.66 8.2.13 0.004 0.004 26.16 8.2.12 0.004 0.004 19.83 8.2.11 0.011 0.000 19.58 8.2.10 0.011 0.000 17.63 8.2.9 0.000 0.008 19.17 8.2.8 0.006 0.003 17.97 8.2.7 0.007 0.003 17.63 8.2.6 0.003 0.009 18.16 8.2.5 0.005 0.005 18.07 8.2.4 0.008 0.000 18.47 8.2.3 0.003 0.006 18.14 8.2.2 0.004 0.004 17.72 8.2.1 0.004 0.004 18.03 8.2.0 0.008 0.000 17.67 8.1.28 0.012 0.004 25.92 8.1.27 0.000 0.009 19.02 8.1.26 0.004 0.004 26.35 8.1.25 0.000 0.008 28.09 8.1.24 0.003 0.006 19.59 8.1.23 0.004 0.008 19.32 8.1.22 0.000 0.009 17.88 8.1.21 0.000 0.009 18.77 8.1.20 0.006 0.003 17.35 8.1.19 0.003 0.005 17.35 8.1.18 0.005 0.003 18.10 8.1.17 0.005 0.005 20.23 8.1.16 0.004 0.004 22.18 8.1.15 0.008 0.000 19.00 8.1.14 0.004 0.004 17.46 8.1.13 0.000 0.007 17.91 8.1.12 0.005 0.002 17.46 8.1.11 0.004 0.004 17.60 8.1.10 0.004 0.004 17.43 8.1.9 0.004 0.004 17.56 8.1.8 0.003 0.005 17.59 8.1.7 0.002 0.005 17.54 8.1.6 0.000 0.009 17.66 8.1.5 0.004 0.004 17.66 8.1.4 0.004 0.004 17.51 8.1.3 0.000 0.008 17.69 8.1.2 0.003 0.006 17.60 8.1.1 0.000 0.008 17.46 8.1.0 0.005 0.003 17.53 8.0.30 0.008 0.000 18.77 8.0.29 0.004 0.004 16.75 8.0.28 0.000 0.007 18.54 8.0.27 0.004 0.004 17.24 8.0.26 0.000 0.007 18.55 8.0.25 0.004 0.004 17.05 8.0.24 0.004 0.004 16.95 8.0.23 0.000 0.007 17.07 8.0.22 0.007 0.000 16.94 8.0.21 0.000 0.007 16.96 8.0.20 0.004 0.004 17.05 8.0.19 0.003 0.005 16.95 8.0.18 0.005 0.003 16.92 8.0.17 0.000 0.008 17.06 8.0.16 0.007 0.000 17.07 8.0.15 0.003 0.006 16.96 8.0.14 0.005 0.002 17.02 8.0.13 0.003 0.006 13.36 8.0.12 0.004 0.004 16.97 8.0.11 0.004 0.004 16.96 8.0.10 0.004 0.004 17.02 8.0.9 0.004 0.004 16.95 8.0.8 0.008 0.008 16.92 8.0.7 0.000 0.008 16.97 8.0.6 0.004 0.004 17.09 8.0.5 0.003 0.006 17.11 8.0.3 0.011 0.011 17.17 8.0.2 0.012 0.008 17.40 8.0.1 0.004 0.004 17.07 8.0.0 0.007 0.011 16.87 7.4.33 0.003 0.003 15.03 7.4.32 0.000 0.006 16.68 7.4.30 0.003 0.003 16.54 7.4.29 0.000 0.007 16.64 7.4.28 0.000 0.009 16.59 7.4.27 0.004 0.004 16.48 7.4.26 0.004 0.004 16.53 7.4.25 0.000 0.008 16.66 7.4.24 0.005 0.003 16.72 7.4.23 0.004 0.004 16.44 7.4.22 0.011 0.007 16.61 7.4.21 0.010 0.007 16.63 7.4.20 0.007 0.000 16.73 7.4.16 0.006 0.011 16.55 7.4.15 0.016 0.009 17.40 7.4.14 0.011 0.012 17.86 7.4.13 0.016 0.005 16.46 7.4.12 0.009 0.009 16.60 7.4.11 0.013 0.007 16.59 7.4.10 0.007 0.010 16.57 7.4.9 0.003 0.015 16.50 7.4.8 0.000 0.019 16.63 7.4.7 0.016 0.006 16.42 7.4.6 0.009 0.009 16.52 7.4.5 0.006 0.003 16.46 7.4.4 0.003 0.019 16.59 7.4.3 0.013 0.010 16.76 7.4.0 0.009 0.009 14.74 7.3.33 0.000 0.006 13.36 7.3.32 0.013 0.000 13.43 7.3.31 0.003 0.004 16.24 7.3.30 0.005 0.003 16.38 7.3.29 0.006 0.003 16.25 7.3.28 0.007 0.012 16.36 7.3.27 0.012 0.006 17.40 7.3.26 0.012 0.006 16.38 7.3.25 0.012 0.007 16.51 7.3.24 0.009 0.013 16.50 7.3.23 0.016 0.003 16.45 7.3.21 0.007 0.011 16.70 7.3.20 0.004 0.021 19.39 7.3.19 0.011 0.006 16.68 7.3.18 0.003 0.014 16.47 7.3.17 0.012 0.008 16.39 7.3.16 0.003 0.013 16.48 7.3.1 0.010 0.010 16.20 7.3.0 0.000 0.012 16.32 7.2.33 0.015 0.004 16.64 7.2.32 0.005 0.014 16.63 7.2.31 0.013 0.006 16.65 7.2.30 0.013 0.003 16.55 7.2.29 0.003 0.015 16.59 7.2.13 0.012 0.003 16.68 7.2.12 0.003 0.013 16.47 7.2.11 0.004 0.011 16.64 7.2.10 0.003 0.012 16.77 7.2.9 0.003 0.013 16.63 7.2.8 0.004 0.007 16.89 7.2.7 0.004 0.011 16.79 7.2.6 0.002 0.012 16.69 7.2.5 0.004 0.011 16.68 7.2.4 0.004 0.007 16.52 7.2.3 0.006 0.009 16.36 7.2.2 0.004 0.011 16.42 7.2.1 0.003 0.006 16.65 7.2.0 0.007 0.009 18.00 7.1.25 0.000 0.017 15.52 7.1.20 0.004 0.008 15.35 7.1.10 0.020 0.009 16.15 7.1.7 0.003 0.005 16.92 7.1.6 0.003 0.009 19.46 7.1.5 0.003 0.016 16.54 7.1.0 0.007 0.073 22.35 7.0.20 0.022 0.004 14.92 7.0.14 0.010 0.027 22.09 7.0.10 0.010 0.043 20.13 7.0.9 0.023 0.080 20.05 7.0.8 0.000 0.063 20.09 7.0.7 0.007 0.083 20.06 7.0.6 0.007 0.077 20.05 7.0.5 0.020 0.077 20.57 7.0.4 0.007 0.083 20.13 7.0.3 0.013 0.077 20.13 7.0.2 0.013 0.080 20.23 7.0.1 0.003 0.050 19.95 7.0.0 0.007 0.057 20.07 5.6.25 0.010 0.053 20.67 5.6.24 0.003 0.083 20.73 5.6.23 0.010 0.077 20.69 5.6.22 0.000 0.087 20.68 5.6.21 0.007 0.077 20.69 5.6.20 0.027 0.063 21.14 5.6.19 0.010 0.063 21.17 5.6.18 0.003 0.053 21.08 5.6.17 0.010 0.047 21.07 5.6.16 0.017 0.077 21.23 5.6.15 0.017 0.070 21.18 5.6.14 0.007 0.050 21.08 5.6.13 0.010 0.050 21.14 5.6.12 0.003 0.053 21.24 5.6.11 0.013 0.077 21.06 5.6.10 0.020 0.070 21.22 5.6.9 0.017 0.077 21.04 5.6.8 0.013 0.067 20.59 5.6.7 0.010 0.080 20.61 5.6.6 0.013 0.077 20.52 5.6.5 0.007 0.080 20.55 5.6.4 0.003 0.043 20.52 5.6.3 0.013 0.073 20.52 5.6.2 0.010 0.040 20.61 5.6.1 0.013 0.067 20.52 5.6.0 0.013 0.073 20.57 5.5.38 0.003 0.043 20.45 5.5.37 0.010 0.073 20.57 5.5.36 0.010 0.083 20.43 5.5.35 0.010 0.083 20.50 5.5.34 0.010 0.077 20.88 5.5.33 0.003 0.057 20.90 5.5.32 0.007 0.043 20.94 5.5.31 0.010 0.037 20.98 5.5.30 0.000 0.080 21.02 5.5.29 0.007 0.090 20.88 5.5.28 0.007 0.050 20.95 5.5.27 0.013 0.087 20.99 5.5.26 0.010 0.080 20.91 5.5.25 0.007 0.047 20.58 5.5.24 0.000 0.053 20.31 5.5.23 0.000 0.077 20.41 5.5.22 0.010 0.077 20.38 5.5.21 0.013 0.073 20.38 5.5.20 0.010 0.040 20.36 5.5.19 0.020 0.050 20.32 5.5.18 0.003 0.050 20.36 5.5.16 0.010 0.050 20.25 5.5.15 0.010 0.087 20.28 5.5.14 0.017 0.070 20.41 5.5.13 0.007 0.070 20.23 5.5.12 0.003 0.067 20.27 5.5.11 0.007 0.047 20.34 5.5.10 0.007 0.047 20.20 5.5.9 0.000 0.073 20.27 5.5.8 0.007 0.070 20.24 5.5.7 0.007 0.080 20.18 5.5.6 0.003 0.047 20.18 5.5.5 0.013 0.070 20.28 5.5.4 0.027 0.060 20.27 5.5.3 0.003 0.080 20.25 5.5.2 0.003 0.080 20.20 5.5.1 0.003 0.073 20.17 5.5.0 0.007 0.060 20.22 5.4.45 0.000 0.087 19.57 5.4.44 0.007 0.070 19.23 5.4.43 0.010 0.040 19.41 5.4.42 0.010 0.080 19.55 5.4.41 0.010 0.073 19.29 5.4.40 0.003 0.080 19.10 5.4.39 0.013 0.060 19.16 5.4.38 0.003 0.063 19.24 5.4.37 0.007 0.067 19.07 5.4.36 0.007 0.077 19.18 5.4.35 0.007 0.067 19.02 5.4.34 0.013 0.070 18.96 5.4.32 0.007 0.077 19.09 5.4.31 0.003 0.077 19.10 5.4.30 0.003 0.077 19.27 5.4.29 0.000 0.067 19.09 5.4.28 0.010 0.080 19.12 5.4.27 0.007 0.043 19.01 5.4.26 0.007 0.080 19.00 5.4.25 0.003 0.067 19.16 5.4.24 0.010 0.040 19.17 5.4.23 0.003 0.077 19.04 5.4.22 0.003 0.077 19.08 5.4.21 0.003 0.090 19.08 5.4.20 0.003 0.060 19.13 5.4.19 0.007 0.060 18.94 5.4.18 0.010 0.073 19.09 5.4.17 0.013 0.040 18.93 5.4.16 0.020 0.053 18.98 5.4.15 0.000 0.080 19.11 5.4.14 0.007 0.047 16.43 5.4.13 0.010 0.073 16.46 5.4.12 0.013 0.067 16.51 5.4.11 0.013 0.070 16.48 5.4.10 0.010 0.067 16.60 5.4.9 0.003 0.080 16.42 5.4.8 0.003 0.043 16.46 5.4.7 0.003 0.077 16.39 5.4.6 0.003 0.057 16.46 5.4.5 0.007 0.043 16.45 5.4.4 0.013 0.070 16.45 5.4.3 0.003 0.070 16.45 5.4.2 0.007 0.043 16.39 5.4.1 0.003 0.037 16.42 5.4.0 0.000 0.040 15.87
preferences:dark mode live preview
78 ms | 400 KiB | 5 Q