Merge mozilla-inbound to mozilla-central r=merge a=merge
authorDorel Luca <dluca@mozilla.com>
Mon, 08 Jan 2018 11:56:10 +0200
changeset 398170 ca379fcca95b1f4a3744242ea8647004b99b3507
parent 398165 d8739955d2432581b443ba4aac48abeaece65ac3 (diff)
parent 398169 9b1af0e28db1d102c8479e042f19fa3aea0db539 (current diff)
child 398176 304cc4493479e669d088f49b1256343c451704c3
child 398216 aadd5f8ff804944238dc8872fea4c853484733b4
push id33210
push userdluca@mozilla.com
push dateMon, 08 Jan 2018 09:56:34 +0000
treeherdermozilla-central@ca379fcca95b [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge, merge
milestone59.0a1
first release with
nightly linux32
ca379fcca95b / 59.0a1 / 20180108100050 / files
nightly linux64
ca379fcca95b / 59.0a1 / 20180108100050 / files
nightly mac
ca379fcca95b / 59.0a1 / 20180108100050 / files
nightly win32
ca379fcca95b / 59.0a1 / 20180108100050 / files
nightly win64
ca379fcca95b / 59.0a1 / 20180108100050 / files
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
releases
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge mozilla-inbound to mozilla-central r=merge a=merge
--- a/devtools/client/webconsole/new-console-output/test/mochitest/browser.ini
+++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser.ini
@@ -160,16 +160,19 @@ support-files =
   test-trackingprotection-securityerrors.html
   test-webconsole-error-observer.html
   test-websocket.html
   test-websocket.js
   testscript.js
   !/devtools/client/netmonitor/test/sjs_cors-test-server.sjs
   !/image/test/mochitest/blue.png
   !/devtools/client/framework/test/shared-head.js
+  !/devtools/client/shared/test/test-actor.js
+  !/devtools/client/shared/test/test-actor-registry.js
+
 [browser_console.js]
 skip-if = true # Bug 1406060
 [browser_console_addonsdk_loader_exception.js]
 skip-if = true # Bug 1406060
 [browser_console_clear_method.js]
 skip-if = true # Bug 1406060
 [browser_console_consolejsm_output.js]
 skip-if = true # Bug 1406060
@@ -275,18 +278,16 @@ skip-if = true #	Bug 1405333
 [browser_webconsole_external_script_errors.js]
 [browser_webconsole_file_uri.js]
 skip-if = true #	Bug 1404382
 [browser_webconsole_filter_scroll.js]
 skip-if = true #	Bug 1404392
 [browser_webconsole_filters.js]
 [browser_webconsole_filters_persist.js]
 [browser_webconsole_highlighter_console_helper.js]
-skip-if = true #	Bug 1404853
-# old console skip-if = true # Requires direct access to content nodes
 [browser_webconsole_history_arrow_keys.js]
 [browser_webconsole_hpkp_invalid-headers.js]
 skip-if = true #	Bug 1405340
 # old console skip-if = (os == 'win' && bits == 64) # Bug 1390001
 [browser_webconsole_hsts_invalid-headers.js]
 skip-if = true #	Bug 1405341
 # old console skip-if = e10s # Bug 1042253 - webconsole e10s tests
 [browser_webconsole_iframe_wrong_hud.js]
--- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_highlighter_console_helper.js
+++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_highlighter_console_helper.js
@@ -1,108 +1,79 @@
-/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that the $0 console helper works as intended. See Bug 653531.
 
 "use strict";
 
-var inspector, h1, outputNode;
+const TEST_URI = `data:text/html;charset=utf-8,
+<head>
+  <title>Inspector Tree Selection Test</title>
+</head>
+<body>
+  <div>
+    <h1>Inspector Tree Selection Test</h1>
+    <p>This is some example text</p>
+    <p>${loremIpsum()}</p>
+  </div>
+  <div>
+    <p>${loremIpsum()}</p>
+  </div>
+</body>`.replace("\n", "");
 
-function createDocument() {
-  let doc = content.document;
-  let div = doc.createElement("div");
-  h1 = doc.createElement("h1");
-  let p1 = doc.createElement("p");
-  let p2 = doc.createElement("p");
-  let div2 = doc.createElement("div");
-  let p3 = doc.createElement("p");
-  doc.title = "Inspector Tree Selection Test";
-  h1.textContent = "Inspector Tree Selection Test";
-  p1.textContent = "This is some example text";
-  p2.textContent = "Lorem ipsum dolor sit amet, consectetur adipisicing " +
-    "elit, sed do eiusmod tempor incididunt ut labore et dolore magna " +
-    "aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco " +
-    "laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure " +
-    "dolor in reprehenderit in voluptate velit esse cillum dolore eu " +
-    "fugiat nulla pariatur. Excepteur sint occaecat cupidatat non " +
-    "proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
-  p3.textContent = "Lorem ipsum dolor sit amet, consectetur adipisicing " +
-    "elit, sed do eiusmod tempor incididunt ut labore et dolore magna " +
-    "aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco " +
-    "laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure " +
-    "dolor in reprehenderit in voluptate velit esse cillum dolore eu " +
-    "fugiat nulla pariatur. Excepteur sint occaecat cupidatat non " +
-    "proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
-  div.appendChild(h1);
-  div.appendChild(p1);
-  div.appendChild(p2);
-  div2.appendChild(p3);
-  doc.body.appendChild(div);
-  doc.body.appendChild(div2);
-  setupHighlighterTests();
-}
+add_task(async function () {
+  const toolbox = await openNewTabAndToolbox(TEST_URI, "inspector");
+  const inspector = toolbox.getPanel("inspector");
 
-function setupHighlighterTests() {
-  ok(h1, "we have the header node");
-  openInspector().then(runSelectionTests);
-}
-
-var runSelectionTests = Task.async(function* (aInspector) {
-  inspector = aInspector;
+  await registerTestActor(toolbox.target.client);
+  let testActor = await getTestActor(toolbox);
 
   let onPickerStarted = inspector.toolbox.once("picker-started");
   inspector.toolbox.highlighterUtils.startPicker();
-  yield onPickerStarted;
+  await onPickerStarted;
 
-  info("Picker mode started, now clicking on H1 to select that node");
-  h1.scrollIntoView();
-  let onPickerStopped = inspector.toolbox.once("picker-stopped");
+  info("Picker mode started, now clicking on <h1> to select that node");
+  let onPickerStopped = toolbox.once("picker-stopped");
   let onInspectorUpdated = inspector.once("inspector-updated");
-  EventUtils.synthesizeMouseAtCenter(h1, {}, content);
-  yield onPickerStopped;
-  yield onInspectorUpdated;
 
-  info("Picker mode stopped, H1 selected, now switching to the console");
-  let hud = yield openConsole(gBrowser.selectedTab);
+  testActor.synthesizeMouse({
+    selector: "h1",
+    center: true,
+    options: {}
+  });
 
-  performWebConsoleTests(hud);
-});
+  await onPickerStopped;
+  await onInspectorUpdated;
 
-function performWebConsoleTests(hud) {
-  let jsterm = hud.jsterm;
-  outputNode = hud.outputNode;
+  info("Picker mode stopped, <h1> selected, now switching to the console");
+  const hud = await openConsole();
+  const {jsterm} = hud;
 
   jsterm.clearOutput();
-  jsterm.execute("$0", onNodeOutput);
 
-  function onNodeOutput(node) {
-    isnot(node.textContent.indexOf("<h1>"), -1, "correct output for $0");
+  let onEvaluationResult = waitForMessage(hud, "<h1>");
+  jsterm.execute("$0");
+  await onEvaluationResult;
+  ok(true, "correct output for $0");
 
-    jsterm.clearOutput();
-    jsterm.execute("$0.textContent = 'bug653531'", onNodeUpdate);
-  }
+  jsterm.clearOutput();
 
-  function onNodeUpdate(node) {
-    isnot(node.textContent.indexOf("bug653531"), -1,
-          "correct output for $0.textContent");
-    is(inspector.selection.node.textContent, "bug653531",
-       "node successfully updated");
+  const newH1Content = "newH1Content";
+  let onAssignmentResult = waitForMessage(hud, "<h1>");
+  jsterm.execute(`$0.textContent = "${newH1Content}";$0`);
+  await onAssignmentResult;
 
-    inspector = h1 = outputNode = null;
-    gBrowser.removeCurrentTab();
-    finishTest();
-  }
-}
-
-function test() {
-  waitForExplicitFinish();
+  ok(true, "correct output for $0 after setting $0.textContent");
+  const {textContent} = await testActor.getNodeInfo("h1");
+  is(textContent, newH1Content, "node successfully updated");
+});
 
-  gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
-  gBrowser.selectedBrowser.addEventListener("load", function () {
-    waitForFocus(createDocument, content);
-  }, {capture: true, once: true});
-
-  BrowserTestUtils.loadURI(gBrowser.selectedBrowser,
-    "data:text/html;charset=utf-8,test for highlighter helper in web console");
+function loremIpsum() {
+  return `Lorem ipsum dolor sit amet, consectetur adipisicing
+elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
+laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure
+dolor in reprehenderit in voluptate velit esse cillum dolore eu
+fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
+proident, sunt in culpa qui officia deserunt mollit anim id est laborum.`
+  .replace("\n", "");
 }
--- a/devtools/client/webconsole/new-console-output/test/mochitest/head.js
+++ b/devtools/client/webconsole/new-console-output/test/mochitest/head.js
@@ -2,16 +2,21 @@
 /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 /* import-globals-from ../../../../framework/test/shared-head.js */
 /* eslint no-unused-vars: [2, {"vars": "local"}] */
 
 "use strict";
 
+// Import helpers registering the test-actor in remote targets
+Services.scriptloader.loadSubScript(
+  "chrome://mochitests/content/browser/devtools/client/shared/test/test-actor-registry.js",
+  this);
+
 // shared-head.js handles imports, constants, and utility functions
 // Load the shared-head file first.
 Services.scriptloader.loadSubScript(
   "chrome://mochitests/content/browser/devtools/client/framework/test/shared-head.js",
   this);
 
 var {HUDService} = require("devtools/client/webconsole/hudservice");
 var WCUL10n = require("devtools/client/webconsole/webconsole-l10n");
--- a/dom/media/ChannelMediaResource.cpp
+++ b/dom/media/ChannelMediaResource.cpp
@@ -25,17 +25,17 @@ mozilla::LazyLogModule gMediaResourceLog
 namespace mozilla {
 
 ChannelMediaResource::ChannelMediaResource(MediaResourceCallback* aCallback,
                                            nsIChannel* aChannel,
                                            nsIURI* aURI,
                                            bool aIsPrivateBrowsing)
   : BaseMediaResource(aCallback, aChannel, aURI)
   , mCacheStream(this, aIsPrivateBrowsing)
-  , mSuspendAgent(mCacheStream, !aChannel /*aSuspended*/)
+  , mSuspendAgent(mCacheStream)
 {
 }
 
 ChannelMediaResource::~ChannelMediaResource()
 {
   MOZ_ASSERT(mClosed);
   MOZ_ASSERT(!mChannel);
   MOZ_ASSERT(!mListener);
@@ -646,23 +646,20 @@ ChannelMediaResource::Suspend(bool aClos
 
   MediaDecoderOwner* owner = mCallback->GetMediaOwner();
   MOZ_DIAGNOSTIC_ASSERT(owner);
   dom::HTMLMediaElement* element = owner->GetMediaElement();
   MOZ_DIAGNOSTIC_ASSERT(element);
 
   if (mChannel && aCloseImmediately && mIsTransportSeekable) {
     CloseChannel();
-    element->DownloadSuspended();
   }
 
   if (mSuspendAgent.Suspend()) {
-    if (mChannel) {
-      element->DownloadSuspended();
-    }
+    element->DownloadSuspended();
   }
 }
 
 void
 ChannelMediaResource::Resume()
 {
   NS_ASSERTION(NS_IsMainThread(), "Don't call on non-main thread");
 
--- a/dom/media/ChannelMediaResource.h
+++ b/dom/media/ChannelMediaResource.h
@@ -18,19 +18,18 @@ namespace mozilla {
 
 /**
  * This class is responsible for managing the suspend count and report suspend
  * status of channel.
  **/
 class ChannelSuspendAgent
 {
 public:
-  ChannelSuspendAgent(MediaCacheStream& aCacheStream, bool aSuspended)
+  explicit ChannelSuspendAgent(MediaCacheStream& aCacheStream)
     : mCacheStream(aCacheStream)
-    , mSuspendCount(aSuspended ? 1 : 0)
   {
   }
 
   // True when the channel has been suspended or needs to be suspended.
   bool IsSuspended();
 
   // Return true when the channel is logically suspended, i.e. the suspend
   // count goes from 0 to 1.
@@ -45,17 +44,17 @@ public:
   void Revoke();
 
 private:
   // Only suspends channel but not changes the suspend count.
   void SuspendInternal();
 
   nsIChannel* mChannel = nullptr;
   MediaCacheStream& mCacheStream;
-  uint32_t mSuspendCount;
+  uint32_t mSuspendCount = 0;
   bool mIsChannelSuspended = false;
 };
 
 DDLoggedTypeDeclNameAndBase(ChannelMediaResource, BaseMediaResource);
 
 /**
  * This is the MediaResource implementation that wraps Necko channels.
  * Much of its functionality is actually delegated to MediaCache via
--- a/dom/media/MediaCache.cpp
+++ b/dom/media/MediaCache.cpp
@@ -2869,57 +2869,42 @@ MediaCacheStream::Init(int64_t aContentL
 void
 MediaCacheStream::InitAsClone(MediaCacheStream* aOriginal)
 {
   MOZ_ASSERT(!mMediaCache, "Has been initialized.");
   MOZ_ASSERT(aOriginal->mMediaCache, "Don't clone an uninitialized stream.");
 
   // Use the same MediaCache as our clone.
   mMediaCache = aOriginal->mMediaCache;
-  // This needs to be done before OpenStream() to avoid data race.
-  mClientSuspended = true;
-  // Cloned streams are initially suspended, since there is no channel open
-  // initially for a clone.
-  mCacheSuspended = true;
-  mChannelEnded = true;
-
   OwnerThread()->Dispatch(
     NS_NewRunnableFunction("MediaCacheStream::InitAsClone", [
       this,
       aOriginal,
       r1 = RefPtr<ChannelMediaResource>(mClient),
       r2 = RefPtr<ChannelMediaResource>(aOriginal->mClient)
     ]() { InitAsCloneInternal(aOriginal); }));
 }
 
 void
 MediaCacheStream::InitAsCloneInternal(MediaCacheStream* aOriginal)
 {
   MOZ_ASSERT(OwnerThread()->IsOnCurrentThread());
-  AutoLock lock(aOriginal->mMediaCache->Monitor());
+  AutoLock lock(mMediaCache->Monitor());
 
+  // Download data and notify events if necessary. Note the order is important
+  // in order to mimic the behavior of data being downloaded from the channel.
+
+  // Step 1: copy/download data from the original stream.
   mResourceID = aOriginal->mResourceID;
-
-  // Grab cache blocks from aOriginal as readahead blocks for our stream
   mStreamLength = aOriginal->mStreamLength;
   mIsTransportSeekable = aOriginal->mIsTransportSeekable;
   mDownloadStatistics = aOriginal->mDownloadStatistics;
   mDownloadStatistics.Stop();
 
-  // Notify the client that we have new data so the decoder has a chance to
-  // compute 'canplaythrough' and buffer ranges.
-  mClient->CacheClientNotifyDataReceived();
-
-  if (aOriginal->mDidNotifyDataEnded &&
-      NS_SUCCEEDED(aOriginal->mNotifyDataEndedStatus)) {
-    mNotifyDataEndedStatus = aOriginal->mNotifyDataEndedStatus;
-    mDidNotifyDataEnded = true;
-    mClient->CacheClientNotifyDataEnded(mNotifyDataEndedStatus);
-  }
-
+  // Grab cache blocks from aOriginal as readahead blocks for our stream
   for (uint32_t i = 0; i < aOriginal->mBlocks.Length(); ++i) {
     int32_t cacheBlockIndex = aOriginal->mBlocks[i];
     if (cacheBlockIndex < 0)
       continue;
 
     while (i >= mBlocks.Length()) {
       mBlocks.AppendElement(-1);
     }
@@ -2929,18 +2914,36 @@ MediaCacheStream::InitAsCloneInternal(Me
   }
 
   // Copy the partial block.
   mChannelOffset = aOriginal->mChannelOffset;
   memcpy(mPartialBlockBuffer.get(),
          aOriginal->mPartialBlockBuffer.get(),
          BLOCK_SIZE);
 
+  // Step 2: notify the client that we have new data so the decoder has a chance
+  // to compute 'canplaythrough' and buffer ranges.
+  mClient->CacheClientNotifyDataReceived();
+
+  // Step 3: notify download ended if necessary.
+  if (aOriginal->mDidNotifyDataEnded &&
+      NS_SUCCEEDED(aOriginal->mNotifyDataEndedStatus)) {
+    mNotifyDataEndedStatus = aOriginal->mNotifyDataEndedStatus;
+    mDidNotifyDataEnded = true;
+    mClient->CacheClientNotifyDataEnded(mNotifyDataEndedStatus);
+  }
+
+  // Step 4: notify download is suspended by the cache.
+  mClientSuspended = true;
+  mCacheSuspended = true;
+  mChannelEnded = true;
+  mClient->CacheClientSuspend();
+
+  // Step 5: add the stream to be managed by the cache.
   mMediaCache->OpenStream(lock, this, true /* aIsClone */);
-
   // Wake up the reader which is waiting for the cloned data.
   lock.NotifyAll();
 }
 
 nsIEventTarget*
 MediaCacheStream::OwnerThread() const
 {
   return mMediaCache->OwnerThread();
--- a/media/mp4parse-rust/mp4parse-cargo.patch
+++ b/media/mp4parse-rust/mp4parse-cargo.patch
@@ -1,55 +1,50 @@
 diff --git a/media/libstagefright/binding/mp4parse/Cargo.toml b/media/libstagefright/binding/mp4parse/Cargo.toml
 index ff9422c..814c4c6 100644
 --- a/media/libstagefright/binding/mp4parse/Cargo.toml
 +++ b/media/libstagefright/binding/mp4parse/Cargo.toml
-@@ -20,19 +20,12 @@ exclude = [
+@@ -20,18 +20,12 @@ exclude = [
  ]
  
 -[badges]
 -travis-ci = { repository = "https://github.com/mozilla/mp4parse-rust" }
  
  [dependencies]
  byteorder = "1.0.0"
--afl = { version = "0.1.1", optional = true }
--afl-plugin = { version = "0.1.1", optional = true }
+-afl = { version = "0.3", optional = true }
 -abort_on_panic = { version = "1.0.0", optional = true }
  bitreader = { version = "0.3.0" }
  num-traits = "0.1.37"
--mp4parse_fallible = { git = "https://github.com/alfredoyang/mp4parse_fallible", optional = true }
-+mp4parse_fallible = { path = "../mp4parse_fallible", optional = true }
+ mp4parse_fallible = { version = "0.0.1", optional = true }
  
  [dev-dependencies]
  test-assembler = "0.1.2"
  
 -[features]
--fuzz = ["afl", "afl-plugin", "abort_on_panic"]
- # Somewhat heavy-handed, but we want at least -Z force-overflow-checks=on.
- [profile.release]
- debug-assertions = true
+-fuzz = ["afl", "abort_on_panic"]
 diff --git a/media/libstagefright/binding/mp4parse_capi/Cargo.toml b/media/libstagefright/binding/mp4parse_capi/Cargo.toml
 index a30e045..a965f06 100644
 --- a/media/libstagefright/binding/mp4parse_capi/Cargo.toml
 +++ b/media/libstagefright/binding/mp4parse_capi/Cargo.toml
 @@ -18,20 +18,13 @@ exclude = [
    "*.mp4",
  ]
-
+ 
 -[badges]
 -travis-ci = { repository = "https://github.com/mozilla/mp4parse-rust" }
 +build = false
-
+ 
  [dependencies]
  byteorder = "1.0.0"
-
+ 
  # To enable fallible memory allocation, add 'features = ["mp4parse_fallible"]'
  # in mp4parse brace.
--mp4parse = {version = "0.9.0", path = "../mp4parse"}
-+mp4parse = {version = "0.9.0", path = "../mp4parse", features = ["mp4parse_fallible"]}
+-mp4parse = {version = "0.9.1", path = "../mp4parse"}
++mp4parse = {version = "0.9.1", path = "../mp4parse", features = ["mp4parse_fallible"]}
  num-traits = "0.1.37"
-
+ 
 -[build-dependencies]
--cbindgen = "0.1.30"
+-cbindgen = "0.3.1"
 -
 -[features]
 -fuzz = ["mp4parse/fuzz"]
 -
--- a/media/mp4parse-rust/mp4parse.h
+++ b/media/mp4parse-rust/mp4parse.h
@@ -39,17 +39,16 @@ typedef enum {
   MP4PARSE_STATUS_OOM = 6,
 } Mp4parseStatus;
 
 typedef enum {
   MP4PARSE_TRACK_TYPE_VIDEO = 0,
   MP4PARSE_TRACK_TYPE_AUDIO = 1,
 } Mp4parseTrackType;
 
-struct Mp4parseParser;
 typedef struct Mp4parseParser Mp4parseParser;
 
 typedef struct {
   uint64_t fragment_duration;
 } Mp4parseFragmentInfo;
 
 typedef struct {
   uint64_t start_offset;
--- a/media/mp4parse-rust/mp4parse/Cargo.toml
+++ b/media/mp4parse-rust/mp4parse/Cargo.toml
@@ -1,11 +1,11 @@
 [package]
 name = "mp4parse"
-version = "0.9.0"
+version = "0.9.1"
 authors = [
   "Ralph Giles <giles@mozilla.com>",
   "Matthew Gregan <kinetik@flim.org>",
   "Alfredo Yang <ayang@mozilla.com>",
 ]
 
 description = "Parser for ISO base media file format (mp4)"
 documentation = "https://docs.rs/mp4parse/"
@@ -19,13 +19,13 @@ exclude = [
   "*.mp4",
 ]
 
 
 [dependencies]
 byteorder = "1.0.0"
 bitreader = { version = "0.3.0" }
 num-traits = "0.1.37"
-mp4parse_fallible = { path = "../mp4parse_fallible", optional = true }
+mp4parse_fallible = { version = "0.0.1", optional = true }
 
 [dev-dependencies]
 test-assembler = "0.1.2"
 
--- a/media/mp4parse-rust/mp4parse/src/lib.rs
+++ b/media/mp4parse-rust/mp4parse/src/lib.rs
@@ -1,15 +1,13 @@
 //! Module for parsing ISO Base Media Format aka video/mp4 streams.
 
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
-#![cfg_attr(feature = "fuzz", feature(plugin))]
-#![cfg_attr(feature = "fuzz", plugin(afl_plugin))]
 #[cfg(feature = "fuzz")]
 extern crate afl;
 
 extern crate byteorder;
 extern crate bitreader;
 extern crate num_traits;
 use byteorder::{ReadBytesExt, WriteBytesExt};
 use bitreader::{BitReader, ReadInto};
@@ -1373,17 +1371,18 @@ fn read_flac_metadata<T: Read>(src: &mut
 fn find_descriptor(data: &[u8], esds: &mut ES_Descriptor) -> Result<()> {
     // Tags for elementary stream description
     const ESDESCR_TAG: u8          = 0x03;
     const DECODER_CONFIG_TAG: u8   = 0x04;
     const DECODER_SPECIFIC_TAG: u8 = 0x05;
 
     let mut remains = data;
 
-    while !remains.is_empty() {
+    // Descriptor length should be more than 2 bytes.
+    while remains.len() > 2 {
         let des = &mut Cursor::new(remains);
         let tag = des.read_u8()?;
 
         let mut end: u32 = 0;   // It's u8 without declaration type that is incorrect.
         // MSB of extend_or_len indicates more bytes, up to 4 bytes.
         for _ in 0..4 {
             let extend_or_len = des.read_u8()?;
             end = (end << 7) + (extend_or_len & 0x7F) as u32;
@@ -1417,17 +1416,17 @@ fn find_descriptor(data: &[u8], esds: &m
         remains = &remains[end as usize .. remains.len()];
     }
 
     Ok(())
 }
 
 fn read_ds_descriptor(data: &[u8], esds: &mut ES_Descriptor) -> Result<()> {
     let frequency_table =
-        vec![(0x1, 96000), (0x1, 88200), (0x2, 64000), (0x3, 48000),
+        vec![(0x0, 96000), (0x1, 88200), (0x2, 64000), (0x3, 48000),
              (0x4, 44100), (0x5, 32000), (0x6, 24000), (0x7, 22050),
              (0x8, 16000), (0x9, 12000), (0xa, 11025), (0xb, 8000),
              (0xc, 7350)];
 
     let bit_reader = &mut BitReader::new(data);
 
     let mut audio_object_type: u16 = ReadInto::read(bit_reader, 5)?;
 
--- a/media/mp4parse-rust/mp4parse/src/tests.rs
+++ b/media/mp4parse-rust/mp4parse/src/tests.rs
@@ -1102,16 +1102,38 @@ fn read_esds_invalid_descriptor() {
     let mut stream = iter.next_box().unwrap().unwrap();
 
     match super::read_esds(&mut stream) {
         Err(Error::InvalidData(s)) => assert_eq!(s, "Invalid descriptor."),
         _ => panic!("unexpected result with invalid descriptor"),
     }
 }
 
+#[test]
+fn read_esds_redundant_descriptor() {
+    // the '2' at the end is redundant data.
+    let esds =
+        vec![  3, 25,   0, 1, 0, 4, 19, 64,
+              21,  0,   0, 0, 0, 0,  0,  0,
+               0,  1, 119, 0, 5, 2, 18, 16,
+               6,  1,   2,
+            ];
+
+    let mut stream = make_box(BoxSize::Auto, b"esds", |s| {
+        s.B32(0) // reserved
+         .append_bytes(esds.as_slice())
+    });
+    let mut iter = super::BoxIter::new(&mut stream);
+    let mut stream = iter.next_box().unwrap().unwrap();
+
+    match super::read_esds(&mut stream) {
+        Ok(esds) => assert_eq!(esds.audio_codec, super::CodecType::AAC),
+        _ => panic!("unexpected result with invalid descriptor"),
+    }
+}
 
 #[test]
 fn read_invalid_pssh() {
     // invalid pssh header length
     let pssh =
         vec![
                               0x00, 0x00, 0x00, 0x01, 0x70,
             0x73, 0x73, 0x68, 0x01, 0x00, 0x00, 0x00, 0x10,
--- a/media/mp4parse-rust/mp4parse_capi/Cargo.toml
+++ b/media/mp4parse-rust/mp4parse_capi/Cargo.toml
@@ -1,11 +1,11 @@
 [package]
 name = "mp4parse_capi"
-version = "0.9.0"
+version = "0.9.1"
 authors = [
   "Ralph Giles <giles@mozilla.com>",
   "Matthew Gregan <kinetik@flim.org>",
   "Alfredo Yang <ayang@mozilla.com>",
 ]
 
 description = "Parser for ISO base media file format (mp4)"
 documentation = "https://docs.rs/mp4parse_capi/"
@@ -20,11 +20,11 @@ exclude = [
 
 build = false
 
 [dependencies]
 byteorder = "1.0.0"
 
 # To enable fallible memory allocation, add 'features = ["mp4parse_fallible"]'
 # in mp4parse brace.
-mp4parse = {version = "0.9.0", path = "../mp4parse", features = ["mp4parse_fallible"]}
+mp4parse = {version = "0.9.1", path = "../mp4parse", features = ["mp4parse_fallible"]}
 num-traits = "0.1.37"
 
--- a/media/mp4parse-rust/update-rust.sh
+++ b/media/mp4parse-rust/update-rust.sh
@@ -1,13 +1,13 @@
 #!/bin/sh -e
 # Script to update mp4parse-rust sources to latest upstream
 
 # Default version.
-VER=d129e35848895220bae98084c17a7425a3369e0e
+VER=ec45de038401d060d826ed87d71e4c67b33a8db3
 
 # Accept version or commit from the command line.
 if test -n "$1"; then
   VER=$1
 fi
 
 echo "Fetching sources..."
 rm -rf _upstream
--- a/netwerk/ipc/ChannelEventQueue.cpp
+++ b/netwerk/ipc/ChannelEventQueue.cpp
@@ -35,22 +35,22 @@ void
 ChannelEventQueue::FlushQueue()
 {
   // Events flushed could include destruction of channel (and our own
   // destructor) unless we make sure its refcount doesn't drop to 0 while this
   // method is running.
   nsCOMPtr<nsISupports> kungFuDeathGrip(mOwner);
   mozilla::Unused << kungFuDeathGrip; // Not used in this function
 
-  // Prevent flushed events from flushing the queue recursively
+#ifdef DEBUG
   {
     MutexAutoLock lock(mMutex);
-    MOZ_ASSERT(!mFlushing);
-    mFlushing = true;
+    MOZ_ASSERT(mFlushing);
   }
+#endif // DEBUG
 
   bool needResumeOnOtherThread = false;
 
   while (true) {
     UniquePtr<ChannelEvent> event;
     {
       MutexAutoLock lock(mMutex);
       event.reset(TakeEvent());
@@ -132,18 +132,19 @@ ChannelEventQueue::ResumeInternal()
 
   // Resuming w/o suspend: error in debug mode, ignore in build
   MOZ_ASSERT(mSuspendCount > 0);
   if (mSuspendCount <= 0) {
     return;
   }
 
   if (!--mSuspendCount) {
-    if (mEventQueue.IsEmpty()) {
-      // Nothing in queue to flush, simply clear the flag.
+    if (mEventQueue.IsEmpty() || !!mForcedCount) {
+      // Nothing in queue to flush or waiting for AutoEventEnqueuer to
+      // finish the force enqueue period, simply clear the flag.
       mSuspended = false;
       return;
     }
 
     // Hold a strong reference of mOwner to avoid the channel release
     // before CompleteResume was executed.
     class CompleteResumeRunnable : public CancelableRunnable
     {
--- a/netwerk/ipc/ChannelEventQueue.h
+++ b/netwerk/ipc/ChannelEventQueue.h
@@ -313,16 +313,21 @@ ChannelEventQueue::MaybeFlushQueue()
   // Don't flush if forced queuing on, we're already being flushed, or
   // suspended, or there's nothing to flush
   bool flushQueue = false;
 
   {
     MutexAutoLock lock(mMutex);
     flushQueue = !mForcedCount && !mFlushing && !mSuspended &&
                  !mEventQueue.IsEmpty();
+
+    // Only one thread is allowed to run FlushQueue at a time.
+    if (flushQueue) {
+      mFlushing = true;
+    }
   }
 
   if (flushQueue) {
     FlushQueue();
   }
 }
 
 // Ensures that RunOrEnqueue() will be collecting events during its lifetime
--- a/security/manager/ssl/StaticHPKPins.h
+++ b/security/manager/ssl/StaticHPKPins.h
@@ -1155,9 +1155,9 @@ static const TransportSecurityPreload kP
   { "za.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
   { "zh.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
 };
 
 // Pinning Preload List Length = 482;
 
 static const int32_t kUnknownId = -1;
 
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1523732767537000);
+static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1523818828361000);
--- a/security/manager/ssl/nsSTSPreloadList.errors
+++ b/security/manager/ssl/nsSTSPreloadList.errors
@@ -4,16 +4,17 @@ 06se.com: could not connect to host
 07733.win: could not connect to host
 0day.su: could not connect to host
 0i0.nl: could not connect to host
 0x90.in: could not connect to host
 10gb.io: could not connect to host
 135vv.com: could not connect to host
 13826145000.com: could not connect to host
 1395kj.com: could not connect to host
+13th-dover.uk: could not connect to host
 1nian.vip: could not connect to host
 1q365a.com: could not connect to host
 24hrs.shopping: could not connect to host
 28spots.net: could not connect to host
 314chan.org: could not connect to host
 41844.de: could not connect to host
 439191.com: could not connect to host
 47tech.com: could not connect to host
@@ -76,17 +77,20 @@ americandistribuidora.com: could not con
 americkykongres.cz: could not connect to host
 amua.fr: could not connect to host
 amunoz.org: could not connect to host
 anastasia-shamara.ru: could not connect to host
 andiplusben.com: could not connect to host
 andreas-kluge.eu: could not connect to host
 andreaskluge.eu: could not connect to host
 andrei-coman.com: could not connect to host
+andrewdaws.co: could not connect to host
 andrewdaws.info: could not connect to host
+andrewdaws.me: could not connect to host
+andrewdaws.tv: could not connect to host
 andrewrdaws.com: could not connect to host
 andronika.net: could not connect to host
 angrydragonproductions.com: could not connect to host
 annetaan.fi: could not connect to host
 annonasoftware.com: could not connect to host
 answers-online.ru: could not connect to host
 anttitenhunen.com: could not connect to host
 anyways.at: could not connect to host
@@ -103,25 +107,25 @@ arent.kz: could not connect to host
 argh.io: could not connect to host
 arksan.com.tr: could not connect to host
 armenians.online: could not connect to host
 arne-petersen.net: could not connect to host
 arresttracker.com: could not connect to host
 articaexports.com: could not connect to host
 artisense.de: could not connect to host
 artisticedgegranite.net: could not connect to host
-asdyx.de: could not connect to host
 askmagicconch.com: could not connect to host
 asphaltfruehling.de: could not connect to host
 asral7.com: could not connect to host
 assdecoeur.org: could not connect to host
 asthon.cn: could not connect to host
 astral.gq: could not connect to host
 asuhe.xyz: could not connect to host
 at1.co: could not connect to host
+athena-garage.co.uk: could not connect to host
 athi.pl: could not connect to host
 atrevillot.com: could not connect to host
 aufmerksamkeitsstudie.com: could not connect to host
 ausec.ch: could not connect to host
 austinsutphin.com: could not connect to host
 australiancattle.dog: could not connect to host
 authint.com: could not connect to host
 authland.com: could not connect to host
@@ -197,16 +201,17 @@ bodrumfarm.com: could not connect to hos
 bolwerk.com.br: could not connect to host
 bomberus.de: could not connect to host
 bonesserver.com: could not connect to host
 bonobo.cz: could not connect to host
 bootikexpress.fr: could not connect to host
 boozinyan.com: could not connect to host
 borisbesemer.com: could not connect to host
 bosabosa.org: could not connect to host
+bouncourseplanner.net: could not connect to host
 bqcp.net: could not connect to host
 brage.info: could not connect to host
 braintensive.com: could not connect to host
 brandontaylor-black.com: could not connect to host
 branw.xyz: could not connect to host
 breathingblanket.com: could not connect to host
 briangarcia.ga: could not connect to host
 brightonchilli.org.uk: could not connect to host
@@ -214,85 +219,92 @@ brio-ukraine.store: could not connect to
 brookframework.org: could not connect to host
 brrr.fr: could not connect to host
 bruckner.li: could not connect to host
 brynnan.nl: could not connect to host
 bsalyzer.com: could not connect to host
 bsktweetup.info: could not connect to host
 bslim-e-boutique.com: could not connect to host
 bsuess.de: could not connect to host
-btxiaobai.com: could not connect to host
 bugginslab.co.uk: could not connect to host
 bugsmashed.com: could not connect to host
 buka.jp: could not connect to host
+bupu.ml: could not connect to host
 businessfurs.info: could not connect to host
 businessmodeler.se: could not connect to host
 buyshoe.org: could not connect to host
 bvexplained.co.uk: could not connect to host
 by1898.com: could not connect to host
 bypass.kr: could not connect to host
 byteshift.ca: could not connect to host
 cafesg.net: could not connect to host
 caipai.fm: could not connect to host
 cais.de: could not connect to host
 calculatoaresecondhand.xyz: could not connect to host
 callabs.net: could not connect to host
 callsigns.ca: could not connect to host
-camaya.net: could not connect to host
 camda.online: could not connect to host
 campingcarlovers.com: could not connect to host
 canarymod.net: could not connect to host
 cancelmyprofile.com: could not connect to host
 caps.is: could not connect to host
 cardloan-manual.net: could not connect to host
 carloshmm.stream: could not connect to host
 carlovanwyk.com: could not connect to host
 casinoreal.com: could not connect to host
 caughtredhanded.co.nz: could not connect to host
 cctld.com: could not connect to host
 cdnk39.com: could not connect to host
 cee.io: could not connect to host
 cegfw.com: could not connect to host
+ceml.ch: could not connect to host
 cencalvia.org: could not connect to host
 centos.pub: could not connect to host
 centrallead.net: could not connect to host
 cgtx.us: could not connect to host
 challengeskins.com: could not connect to host
 championnat-romand-cuisiniers-amateurs.ch: could not connect to host
+champserver.net: could not connect to host
 chaouby.com: could not connect to host
 charbonnel.eu: could not connect to host
 charonsecurity.com: could not connect to host
 cheesefusion.com: could not connect to host
 chenapartment.com: could not connect to host
 childrendeservebetter.org: could not connect to host
 china-line.org: could not connect to host
 chinternet.xyz: could not connect to host
 chiphell.com: could not connect to host
 chiropracticwpb.com: could not connect to host
 chloe.re: could not connect to host
+chmurakotori.ml: could not connect to host
 chosenplaintext.org: could not connect to host
 christianhoffmann.info: could not connect to host
 christophersole.com: could not connect to host
 chromaryu.net: could not connect to host
 chua.family: could not connect to host
 chziyue.com: could not connect to host
 cima-idf.fr: could not connect to host
 cinemysticism.com: could not connect to host
 cipher.land: could not connect to host
 cjr.host: could not connect to host
 cjtkfan.club: could not connect to host
 clearchatsandbox.com: could not connect to host
 clearviewwealthprojector.com.au: could not connect to host
 clintonbloodworth.com: could not connect to host
-clochix.net: could not connect to host
 cloudbleed.info: could not connect to host
 cloudimproved.com: could not connect to host
 cloudimprovedtest.com: could not connect to host
 clownish.co.il: could not connect to host
 clycat.ru: could not connect to host
+cmacacias.ch: could not connect to host
+cmcressy.ch: could not connect to host
+cmlachapelle.ch: could not connect to host
+cmlancy.ch: could not connect to host
+cmlignon.ch: could not connect to host
+cmplainpalais.ch: could not connect to host
 cms-weble.jp: could not connect to host
 cnlic.com: could not connect to host
 cnwage.com: could not connect to host
 co-yutaka.com: could not connect to host
 cobaltlp.com: could not connect to host
 coccolebenessere.it: could not connect to host
 coco-cool.fr: could not connect to host
 codenlife.xyz: could not connect to host
@@ -317,54 +329,53 @@ crackpfer.de: could not connect to host
 crackslut.eu: could not connect to host
 creative-wave.fr: could not connect to host
 creativecommonscatpictures.com: could not connect to host
 cristianhares.com: could not connect to host
 criticalaim.com: could not connect to host
 crox.co: could not connect to host
 cryptopartynewcastle.org: could not connect to host
 crystalmachine.net: could not connect to host
+csgo.help: could not connect to host
 csgo77.com: could not connect to host
 cspeti.hu: could not connect to host
 ctj.im: could not connect to host
 cuonic.com: could not connect to host
 customfilmworks.com: could not connect to host
-cvjd.me: could not connect to host
 cyber-computer.club: could not connect to host
 cyberpeace.nl: could not connect to host
 cyberstatus.de: could not connect to host
 cypherpunk.ws: could not connect to host
 czlx.co: could not connect to host
 d-bood.site: could not connect to host
 d8studio.net: could not connect to host
 daltonedwards.me: could not connect to host
 dam74.com.ar: could not connect to host
 daniel-stahl.net: could not connect to host
 danielthompson.info: could not connect to host
 darkdestiny.ch: could not connect to host
 darlo.co.uk: could not connect to host
 data-detox.com: could not connect to host
 datorb.com: could not connect to host
-davidgreig.uk: could not connect to host
 davidscherzer.at: could not connect to host
 davidstuff.net: could not connect to host
 davros.eu: could not connect to host
 davros.ru: could not connect to host
 dawnson.is: could not connect to host
 day.vip: could not connect to host
 days.one: could not connect to host
 dbcom.ru: could not connect to host
 dbox.ga: could not connect to host
 dden.website: could not connect to host
 dden.xyz: could not connect to host
 de-servers.de: could not connect to host
 decoyrouting.com: could not connect to host
+deep.club: could not connect to host
 deepcreampie.com: could not connect to host
 deepsouthsounds.com: could not connect to host
-deepspace.dedyn.io: could not connect to host
 deloittequant.com: could not connect to host
 deprobe.pro: could not connect to host
 derchris.me: could not connect to host
 derivativeshub.pro: could not connect to host
 dermacarecomplex.com: could not connect to host
 detecte-fuite.ch: could not connect to host
 detecte.ch: could not connect to host
 detectefuite.ch: could not connect to host
@@ -382,27 +393,25 @@ dicgaming.net: could not connect to host
 dick.red: could not connect to host
 didierlaumen.be: could not connect to host
 diemogebhardt.com: could not connect to host
 dieser.me: could not connect to host
 diggable.co: could not connect to host
 digihyp.ch: could not connect to host
 digioccumss.ddns.net: could not connect to host
 digitalhurricane.io: could not connect to host
-digitalrxcloud.com: could not connect to host
 diguass.us: could not connect to host
 dijks.com: could not connect to host
 dirtycat.ru: could not connect to host
 disability.gov: could not connect to host
 disadattamentolavorativo.it: could not connect to host
 disco-crazy-world.de: could not connect to host
 discoveryballoon.org: could not connect to host
 distinctivephotography.com.au: could not connect to host
 ditch.ch: could not connect to host
-diversity-spielzeug.de: could not connect to host
 dixmag.com: could not connect to host
 dlitz.net: could not connect to host
 dlld.com: could not connect to host
 dlyl888.com: could not connect to host
 dobrisan.ro: could not connect to host
 dojifish.space: could not connect to host
 dolphin-hosting.com: could not connect to host
 domengrad.ru: could not connect to host
@@ -432,21 +441,22 @@ duo.money: could not connect to host
 durangoenergyllc.com: could not connect to host
 dwnld.me: could not connect to host
 e-mak.eu: could not connect to host
 e-wishlist.net: could not connect to host
 eatfitoutlet.com.br: could not connect to host
 eatry.io: could not connect to host
 ectora.com: could not connect to host
 edgecustomersportal.com: could not connect to host
-eduif.nl: could not connect to host
 eeb98.com: could not connect to host
+egbert.net: could not connect to host
+egg-ortho.ch: could not connect to host
 ehuber.info: could not connect to host
 einsatzstiefel.info: could not connect to host
-elarvee.xyz: could not connect to host
+eladgames.com: could not connect to host
 elbetech.net: could not connect to host
 eldisagjapi.com: could not connect to host
 elementarywave.com: could not connect to host
 elenorsmadness.org: could not connect to host
 eliott.be: could not connect to host
 elisabeth-strunz.de: could not connect to host
 elonbase.com: could not connect to host
 elsword.moe: could not connect to host
@@ -454,28 +464,28 @@ eltransportquevolem.org: could not conne
 emilyjohnson.ga: could not connect to host
 empese.com: could not connect to host
 emrenovation.com: could not connect to host
 engg.ca: could not connect to host
 er-music.com: could not connect to host
 eriser.fr: could not connect to host
 erkaelderbarenaaben.dk: could not connect to host
 erspro.net: could not connect to host
+erwinwensveen.nl: could not connect to host
 esailinggear.com: could not connect to host
 estoic.net: could not connect to host
 ethiobaba.com: could not connect to host
 euexia.fr: could not connect to host
 eurostrategy.vn.ua: could not connect to host
 ev-zertifikate.de: could not connect to host
 evankurniawan.com: could not connect to host
 eveshaiwu.com: could not connect to host
 evileden.com: could not connect to host
 exo.do: could not connect to host
 extendwings.com: could not connect to host
-extreme-players.com: could not connect to host
 eytosh.net: could not connect to host
 f8842.com: could not connect to host
 faber.org.ru: could not connect to host
 fabian-kluge.de: could not connect to host
 facebook.ax: could not connect to host
 facilitrak.com: could not connect to host
 factureenlinea.com: could not connect to host
 fafatiger.com: could not connect to host
@@ -493,32 +503,27 @@ fastbackmbg.be: could not connect to hos
 fed51.com: could not connect to host
 feedstringer.com: could not connect to host
 feirlane.org: could not connect to host
 fengyadi.com: could not connect to host
 feras-alhajjaji.com: could not connect to host
 fetclips.se: could not connect to host
 fhg90.com: could not connect to host
 ficklenote.net: could not connect to host
-fierman.eu: could not connect to host
-fierman.net: could not connect to host
-fierman.us: could not connect to host
 fifieldtech.com: could not connect to host
-figuurzagers.nl: could not connect to host
 fileio.io: could not connect to host
 findmybottleshop.com.au: could not connect to host
 finstererlebnis.de: could not connect to host
 firebaseio.com: could not connect to host
 firexarxa.de: could not connect to host
 fix-the-timeline.com: could not connect to host
 fix-the-timeline.org: could not connect to host
 fixmyglitch.com: could not connect to host
 fixthetimeline.com: could not connect to host
 fixthetimeline.org: could not connect to host
-flam.io: could not connect to host
 flow.su: could not connect to host
 flugplatz-edvc.de: could not connect to host
 flygpost.com: could not connect to host
 flyingdoggy.net: could not connect to host
 focalforest.com: could not connect to host
 folioapp.io: could not connect to host
 forcamp.ga: could not connect to host
 formersessalaries.com: could not connect to host
@@ -575,16 +580,18 @@ gala.kiev.ua: could not connect to host
 gam3rs.de: could not connect to host
 game-gentle.com: could not connect to host
 gameswitchers.uk: could not connect to host
 gametium.com: could not connect to host
 gametium.es: could not connect to host
 gamishou.fr: could not connect to host
 gasbarkenora.com: could not connect to host
 gasnews.net: could not connect to host
+gautham.it: could not connect to host
+gautham.pro: could not connect to host
 gaygeeks.de: could not connect to host
 gchoic.com: could not connect to host
 gdb-tutorial.net: could not connect to host
 gdevpenze.ru: could not connect to host
 gdhzcgs.com: could not connect to host
 gdz-otvety.com: could not connect to host
 ge1.me: could not connect to host
 gehrke.nrw: could not connect to host
@@ -608,17 +615,16 @@ getwarden.net: could not connect to host
 gevaulug.fr: could not connect to host
 gfoss.gr: could not connect to host
 gfournier.ca: could not connect to host
 gglks.com: could not connect to host
 ggss.cf: could not connect to host
 gifzilla.net: could not connect to host
 gina-architektur.design: could not connect to host
 git.co: could not connect to host
-gitstuff.tk: could not connect to host
 glasner.photo: could not connect to host
 glutenfreelife.co.nz: could not connect to host
 gm-assicurazioni.it: could not connect to host
 gmantra.org: could not connect to host
 gmanukyan.com: could not connect to host
 gmind.ovh: could not connect to host
 gnom.me: could not connect to host
 gnosticjade.net: could not connect to host
@@ -628,52 +634,52 @@ google: could not connect to host
 google.ax: could not connect to host
 goranrango.ch: could not connect to host
 gottfridsberg.org: could not connect to host
 gozadentro.com: could not connect to host
 gozel.com.tr: could not connect to host
 gradsm-ci.net: could not connect to host
 granth.io: could not connect to host
 gratisonlinesex.com: could not connect to host
-greenpartyofnewmilford.org: could not connect to host
 greg.red: could not connect to host
 gregmartyn.com: could not connect to host
 greuel.online: could not connect to host
 greve.xyz: could not connect to host
 gritte.net: could not connect to host
 grossmisconduct.news: could not connect to host
 gugaltika-ipb.org: could not connect to host
+gurochan.ch: could not connect to host
 gus.moe: could not connect to host
 gvchannel.xyz: could not connect to host
 gvt2.com: could not connect to host
 gvt3.com: could not connect to host
 h2cdn.cloud: could not connect to host
 h3artbl33d.nl: could not connect to host
 habeo.si: could not connect to host
+hack.club: could not connect to host
 hackbarth.guru: could not connect to host
 hackbubble.me: could not connect to host
+hacker.club: could not connect to host
 hakugin.me: could not connect to host
 halcyonsbastion.com: could not connect to host
 halkyon.net: could not connect to host
 handinhandfoundation.org.uk: could not connect to host
 hapijs.cn: could not connect to host
 harrypottereditor.net: could not connect to host
 hasabig.wang: could not connect to host
 hasalittle.wang: could not connect to host
 hashplex.com: could not connect to host
 haze.network: could not connect to host
 hbbet.com: could not connect to host
 hbvip.com: could not connect to host
-hdfgroup.org: could not connect to host
 hdy.nz: could not connect to host
 hearty.ink: could not connect to host
 heavenlysmokenc.com: could not connect to host
 heisenberg.co: could not connect to host
 hejsupport.se: could not connect to host
-hekeki.com: could not connect to host
 hellofilters.com: could not connect to host
 hellomouse.tk: could not connect to host
 helpantiaging.com: could not connect to host
 helpekwendenihospital.com: could not connect to host
 helsingfors.guide: could not connect to host
 hemdal.se: could not connect to host
 henriknoerr.com: could not connect to host
 hentai.design: could not connect to host
@@ -726,17 +732,16 @@ idol-bikes.ru: could not connect to host
 idtechnowizard.com: could not connect to host
 iemb.cf: could not connect to host
 ifoss.me: could not connect to host
 ifxnet.com: could not connect to host
 ikenmeyer.com: could not connect to host
 ikenmeyer.eu: could not connect to host
 ikzoekeengoedkopeauto.nl: could not connect to host
 ileat.com: could not connect to host
-image.tf: could not connect to host
 immersionwealth.com: could not connect to host
 imperdintechnologies.com: could not connect to host
 increasetestosteronelevels.org: could not connect to host
 inexpensivecomputers.net: could not connect to host
 informatik.zone: could not connect to host
 infoworm.org: could not connect to host
 injust.me: could not connect to host
 inondation.ch: could not connect to host
@@ -747,46 +752,45 @@ instaquiz.ru: could not connect to host
 instasex.ch: could not connect to host
 intarweb.ca: could not connect to host
 intelldynamics.com: could not connect to host
 interviewpipeline.co.uk: could not connect to host
 investorloanshub.com: could not connect to host
 ip.or.at: could not connect to host
 iphonechina.net: could not connect to host
 iplantom.com: could not connect to host
-ipsec.pl: could not connect to host
 irinkeby.nu: could not connect to host
 isamiok.com: could not connect to host
 isocom.eu: could not connect to host
 isopres.de: could not connect to host
 itad.top: could not connect to host
 itpro-mg.de: could not connect to host
 its-schindler.de: could not connect to host
 itsatrap.nl: could not connect to host
 ivanpolchenko.com: could not connect to host
 j0ng.xyz: could not connect to host
-jabjab.de: could not connect to host
 jaimechanaga.com: could not connect to host
 jaion.ml: could not connect to host
 jakincode.army: could not connect to host
 jamesheald.com: could not connect to host
 janssen.fm: could not connect to host
 japan4you.org: could not connect to host
 jaredfraser.com: could not connect to host
 javascriptlab.fr: could not connect to host
 jccars-occasions.be: could not connect to host
 jccrew.org: could not connect to host
 jcraft.us: could not connect to host
-jd1.de: could not connect to host
 jean-remy.ch: could not connect to host
 jeffersonregan.org: could not connect to host
 jens.hk: could not connect to host
+jeproteste.info: could not connect to host
 jettlarue.com: could not connect to host
 jhburton.co.uk: could not connect to host
 jiaqiang.vip: could not connect to host
+jigsawdevelopments.com: could not connect to host
 jmoreau.ddns.net: could not connect to host
 jobmedic.com: could not connect to host
 joecod.es: could not connect to host
 joetyson.io: could not connect to host
 johngo.tk: could not connect to host
 jonathansanchez.pro: could not connect to host
 js88.sg: could not connect to host
 jsc7776.com: could not connect to host
@@ -811,16 +815,17 @@ karamna.com: could not connect to host
 karanlyons.com: could not connect to host
 kartacha.com: could not connect to host
 karuneshjohri.com: could not connect to host
 katzen.me: could not connect to host
 kawaii.io: could not connect to host
 kawaiiku.com: could not connect to host
 kawaiiku.de: could not connect to host
 kayipmurekkep.com: could not connect to host
+keakon.net: could not connect to host
 kelm.me: could not connect to host
 kenyons.info: could not connect to host
 kepkonyvtar.hu: could not connect to host
 kevindekoninck.com: could not connect to host
 keyserver.sexy: could not connect to host
 kgb.us: could not connect to host
 kidbacker.com: could not connect to host
 kiedys.net: could not connect to host
@@ -828,17 +833,16 @@ kieranweightman.me: could not connect to
 kievradio.com: could not connect to host
 kinepolis-studio.ga: could not connect to host
 kingbird.me: could not connect to host
 kingclass.cn: could not connect to host
 kirill.ws: could not connect to host
 kj1396.net: could not connect to host
 kjchernov.info: could not connect to host
 kjoglum.me: could not connect to host
-kleinblogje.nl: could not connect to host
 klingeletest.de: could not connect to host
 kngk-azs.ru: could not connect to host
 knightsweep.com: could not connect to host
 knip.ch: could not connect to host
 knownsec.cf: could not connect to host
 koalapress.fr: could not connect to host
 kollawat.me: could not connect to host
 kongbaofang.com: could not connect to host
@@ -848,17 +852,17 @@ kopfsalat.eu: could not connect to host
 kotorimusic.ga: could not connect to host
 kozmik.co: could not connect to host
 kriptosec.com: could not connect to host
 ksero.center: could not connect to host
 kteen.info: could not connect to host
 ktube.yt: could not connect to host
 kuechenplan.online: could not connect to host
 kuko-crews.org: could not connect to host
-kydara.com: could not connect to host
+kutukupret.com: could not connect to host
 kyle.place: could not connect to host
 kylebaldw.in: could not connect to host
 kylling.io: could not connect to host
 kyujin-office.net: could not connect to host
 l18.io: could not connect to host
 laboutiquemarocaineduconvoyeur.com: could not connect to host
 laboutiquemarocaineduconvoyeur.ma: could not connect to host
 lacasa.fr: could not connect to host
@@ -867,16 +871,17 @@ lacasseroy.com: could not connect to hos
 ladylikeit.com: could not connect to host
 lafr4nc3.xyz: could not connect to host
 lakewoodcomputerservices.com: could not connect to host
 landell.ml: could not connect to host
 lanonfire.com: could not connect to host
 lathamlabs.com: could not connect to host
 lathamlabs.net: could not connect to host
 lathamlabs.org: could not connect to host
+latour-managedcare.ch: could not connect to host
 lavapot.com: could not connect to host
 lazulu.com: could not connect to host
 lbrls.tk: could not connect to host
 lcti.biz: could not connect to host
 ldcraft.pw: could not connect to host
 lebal.se: could not connect to host
 leebiblestudycentre.net: could not connect to host
 leebiblestudycentre.org: could not connect to host
@@ -911,35 +916,38 @@ linuxcode.net: could not connect to host
 linvx.org: could not connect to host
 lissabon.guide: could not connect to host
 littlelundgrenladies.com: could not connect to host
 littleservice.cn: could not connect to host
 litz.ca: could not connect to host
 litzenberger.ca: could not connect to host
 liukang.tech: could not connect to host
 livi.co: could not connect to host
+livnev.me: could not connect to host
+livnev.xyz: could not connect to host
+lknw.de: could not connect to host
 llvm.us: could not connect to host
 lobosdomain.no-ip.info: could not connect to host
 locker3.com: could not connect to host
 logcat.info: could not connect to host
 logic8.ml: could not connect to host
 logimagine.com: could not connect to host
 loothole.com: could not connect to host
 loqyu.co: could not connect to host
 losebellyfat.pro: could not connect to host
 loveandloyalty.se: could not connect to host
+lovelive.us: could not connect to host
 lowt.us: could not connect to host
 loyaltech.ch: could not connect to host
 ltransferts.com: could not connect to host
-lubot.net: could not connect to host
 lukasunger.cz: could not connect to host
 lukasunger.net: could not connect to host
 luom.net: could not connect to host
 luxonetwork.com: could not connect to host
-lvmoo.com: could not connect to host
+lymia.moe: could not connect to host
 m4570.xyz: could not connect to host
 m4g.ru: could not connect to host
 maartenterpstra.xyz: could not connect to host
 machbach.net: could not connect to host
 macustar.eu: could not connect to host
 madeintucson.org: could not connect to host
 magnacumlaude.co: could not connect to host
 maik-mahlow.de: could not connect to host
@@ -950,16 +958,17 @@ marcelmarnitz.com: could not connect to 
 marche-nordic-jorat.ch: could not connect to host
 mare92.cz: could not connect to host
 marketingdesignu.cz: could not connect to host
 martynhare.co.uk: could not connect to host
 martynhare.uk: could not connect to host
 marxist.party: could not connect to host
 mastodon.expert: could not connect to host
 mastodon.my: could not connect to host
+mathieui.net: could not connect to host
 mathijskingma.nl: could not connect to host
 mattia98.org: could not connect to host
 mattli.us: could not connect to host
 mattwb65.com: could not connect to host
 maynardnetworks.com: could not connect to host
 mb-is.info: could not connect to host
 mbdrogenbos-usedcars.be: could not connect to host
 mbsec.net: could not connect to host
@@ -1007,65 +1016,65 @@ moparcraft.org: could not connect to hos
 mordrum.com: could not connect to host
 morfitronik.pl: could not connect to host
 mosaique-lachenaie.fr: could not connect to host
 moskva.guide: could not connect to host
 motomorgen.com: could not connect to host
 motorbiketourhanoi.com: could not connect to host
 mountainadventureseminars.com: could not connect to host
 moving-pixtures.de: could not connect to host
+movio.ga: could not connect to host
 mowalls.net: could not connect to host
 mozzilla.cz: could not connect to host
 mpserver12.org: could not connect to host
 mrafrohead.com: could not connect to host
 mrizzio.com: could not connect to host
 mrliu.me: could not connect to host
 mtn.cc: could not connect to host
 munduch.cz: could not connect to host
 muslimbanter.co.za: could not connect to host
 mybeautyjobs.de: could not connect to host
 mycamda.com: could not connect to host
 mycustomwriting.com: could not connect to host
 myfappening.org: could not connect to host
+mygallery.homelinux.net: could not connect to host
 myicare.org: could not connect to host
 mykeepsake.xyz: could not connect to host
 mynewleaf.co: could not connect to host
 myrent.quebec: could not connect to host
 mytravelblog.de: could not connect to host
 mzlog.win: could not connect to host
 n0099.cf: could not connect to host
 naano.org: could not connect to host
-nanogi.ga: could not connect to host
 naphex.rocks: could not connect to host
-narada.com.ua: could not connect to host
 narodsovety.ru: could not connect to host
 nba2k.cn: could not connect to host
 nba2k.com.cn: could not connect to host
 nbalive.cn: could not connect to host
 ncdesigns-studio.com: could not connect to host
 nedcf.org.uk: could not connect to host
 neer.io: could not connect to host
 negativecurvature.net: could not connect to host
 nejnamc.org: could not connect to host
 nella-project.org: could not connect to host
 nella.io: could not connect to host
 nellacms.com: could not connect to host
 nellacms.org: could not connect to host
 nellafw.org: could not connect to host
 nephy.jp: could not connect to host
 nestone.ru: could not connect to host
-netnik.de: could not connect to host
 nevadafiber.net: could not connect to host
 newcityinfo.info: could not connect to host
 nexgeneration-solutions.com: could not connect to host
 nexusbyte.de: could not connect to host
 nexuscorporation.in: could not connect to host
 nfluence.org: could not connect to host
 ngtoys.com.br: could not connect to host
 nico.st: could not connect to host
+niedersetz.de: could not connect to host
 nienfun.com: could not connect to host
 nikksno.io: could not connect to host
 nikolasbradshaw.com: could not connect to host
 niouininon.eu: could not connect to host
 nirada.info: could not connect to host
 nishikino-maki.com: could not connect to host
 niva.synology.me: could not connect to host
 nkadvertising.online: could not connect to host
@@ -1078,39 +1087,42 @@ notesforpebble.com: could not connect to
 notevencode.com: could not connect to host
 novascan.net: could not connect to host
 nowremindme.com: could not connect to host
 nsbfalconacademy.org: could not connect to host
 nudel.ninja: could not connect to host
 nulltime.net: could not connect to host
 nunnun.jp: could not connect to host
 nyanpasu.tv: could not connect to host
+nyxi.eu: could not connect to host
 obdolbacca.ru: could not connect to host
 oberam.de: could not connect to host
 oberhof.co: could not connect to host
 oblikdom.pro: could not connect to host
 oblondata.io: could not connect to host
 off-the-clock.us: could not connect to host
 offgames.pro: could not connect to host
 office-ruru.com: could not connect to host
 oliverspringer.eu: could not connect to host
 omnibot.tv: could not connect to host
 onewebdev.info: could not connect to host
 onstud.com: could not connect to host
 onwie.fr: could not connect to host
 ooeste.com: could not connect to host
 openintelligence.uk: could not connect to host
+openmirrors.cf: could not connect to host
 opium.io: could not connect to host
 oscsdp.cz: could not connect to host
 osmanlitorunu.com: could not connect to host
 otinane.eu: could not connect to host
 ourchoice2016.com: could not connect to host
 outetc.com: could not connect to host
 owlscrap.ru: could not connect to host
 oxynux.xyz: could not connect to host
+padovani.de: could not connect to host
 paichai.space: could not connect to host
 panasca.is: could not connect to host
 panascais.co: could not connect to host
 panascais.com: could not connect to host
 panascais.de: could not connect to host
 panascais.eu: could not connect to host
 panascais.host: could not connect to host
 panascais.me: could not connect to host
@@ -1122,23 +1134,21 @@ pandapsy.com: could not connect to host
 pardnoy.com: could not connect to host
 passrhce.com: could not connect to host
 passrhcsa.com: could not connect to host
 pastie.se: could not connect to host
 patbatesremodeling.com: could not connect to host
 patrickbusch.net: could not connect to host
 patrickneuro.de: could not connect to host
 paulbramhall.uk: could not connect to host
-paulomonteiro.pt: could not connect to host
 paulrudge.codes: could not connect to host
 paulshir.com: could not connect to host
 paulshir.is: could not connect to host
 paymon.tj: could not connect to host
 paypod.org: could not connect to host
-pclob.gov: could not connect to host
 pcmr.info: could not connect to host
 pcvirusclear.com: could not connect to host
 pear2pear.de: could not connect to host
 peirong.me: could not connect to host
 pengisatelier.net: could not connect to host
 persjrp.ca: could not connect to host
 persoform.ch: could not connect to host
 persson.im: could not connect to host
@@ -1165,27 +1175,31 @@ playsharp.com: could not connect to host
 plussizereviews.com: could not connect to host
 pmbremer.de: could not connect to host
 pnsc.is: could not connect to host
 pogs.us: could not connect to host
 pointagri.com: could not connect to host
 polit.im: could not connect to host
 ponteencima.com: could not connect to host
 poolinstallers.co.za: could not connect to host
+potbar.com: could not connect to host
+potlytics.com: could not connect to host
 pouets.ovh: could not connect to host
 powerentertainment.tv: could not connect to host
 poy-tech.com: could not connect to host
 prepaid-cards.xyz: could not connect to host
 princessbackpack.de: could not connect to host
 printsos.com: could not connect to host
 prism-communication.com: could not connect to host
 privacymanatee.com: could not connect to host
 privcloud.org: could not connect to host
 proactive.run: could not connect to host
+programsupport300procent.com: could not connect to host
 progressivecfo.co.nz: could not connect to host
+projectasterk.com: could not connect to host
 projectx.top: could not connect to host
 prokop.ovh: could not connect to host
 propmag.co: could not connect to host
 provitacare.com: could not connect to host
 proxydesk.eu: could not connect to host
 prpsss.com: could not connect to host
 pruikshop.nl: could not connect to host
 prytkov.com: could not connect to host
@@ -1229,57 +1243,57 @@ realcli.com: could not connect to host
 realraghavgupta.com: could not connect to host
 realwoo.com: could not connect to host
 reevu.net: could not connect to host
 regendevices.eu: could not connect to host
 regio-salland.nl: could not connect to host
 reignsphere.net: could not connect to host
 reismil.ch: could not connect to host
 rentbrowser.com: could not connect to host
-reporting.gov: could not connect to host
+report-incident.de: could not connect to host
 reqognize.com: could not connect to host
 research.md: could not connect to host
 ressl.ch: could not connect to host
 retcor.net: could not connect to host
 reth.ch: could not connect to host
 retube.ga: could not connect to host
 reykjavik.guide: could not connect to host
-rhymeswithmogul.com: could not connect to host
 ribopierre.fr: could not connect to host
 riceglue.com: could not connect to host
 richeza.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 119"  data: no]
 rj-onderneemt.nl: could not connect to host
 rngmeme.com: could not connect to host
 robi-net.it: could not connect to host
 robomonkey.org: could not connect to host
 robust.ga: could not connect to host
 rocketgnomes.com: could not connect to host
 rodehutskors.net: could not connect to host
 rofrank.space: could not connect to host
 rohanbassett.com: could not connect to host
 romanticvillas.com.au: could not connect to host
 ronghexx.com: could not connect to host
 roolevoi.ru: could not connect to host
+rospa100.com: could not connect to host
 rotterdamjazz.info: could not connect to host
 royzez.com: could not connect to host
 rozalynne-dawn.ga: could not connect to host
 rpasafrica.com: could not connect to host
 rs-devdemo.host: could not connect to host
 rsldb.com: could not connect to host
 rtc.fun: could not connect to host
-ruanmi.de: could not connect to host
 rubendv.be: could not connect to host
 ruhr3.de: could not connect to host
 ruht.ro: could not connect to host
 runcarina.com: could not connect to host
 rundumcolumn.xyz: could not connect to host
 runementors.com: could not connect to host
 ruudkoot.nl: could not connect to host
 rzegroup.com: could not connect to host
 s0923.com: could not connect to host
+s3n.se: could not connect to host
 sa.net: could not connect to host
 saferedirectlink.com: could not connect to host
 sallysubs.com: could not connect to host
 salzamt.tk: could not connect to host
 samaritan.tech: could not connect to host
 sanatrans.com: could not connect to host
 santojuken.co.jp: could not connect to host
 sarindia.com: could not connect to host
@@ -1319,41 +1333,40 @@ servecrypt.com: could not connect to hos
 server-essentials.com: could not connect to host
 serverlauget.no: could not connect to host
 servfefe.com: could not connect to host
 servpanel.de: could not connect to host
 seryovpn.com: could not connect to host
 sesha.co.za: could not connect to host
 sgtsnookums.net: could not connect to host
 shadex.net: could not connect to host
+shadiku.com: could not connect to host
 shadowplus.net: could not connect to host
 shadowrocket.net: could not connect to host
 shanxiapark.com: could not connect to host
 sharevari.com: could not connect to host
 shavingks.com: could not connect to host
 sheying.tm: could not connect to host
 shirakaba-cc.com: could not connect to host
-shiroki-k.net: could not connect to host
+shobhanayogsadan.com: could not connect to host
 shoppingreview.org: could not connect to host
 shortpath.com: could not connect to host
 shortr.li: could not connect to host
 shred.ch: could not connect to host
 shredoptics.ch: could not connect to host
 shuzicai.cn: could not connect to host
 shymeck.pw: could not connect to host
 siebens.net: could not connect to host
 signosquecombinam.com.br: could not connect to host
 sikatehtaat.fi: could not connect to host
 siku.pro: could not connect to host
-silentmode.com: could not connect to host
 silvistefi.com: could not connect to host
 simbolo.co.uk: could not connect to host
 simonkjellberg.com: could not connect to host
 simplerses.com: could not connect to host
-simplymozzo.se: could not connect to host
 sims4hub.ga: could not connect to host
 siqi.wang: could not connect to host
 skarox.ru: could not connect to host
 sky-aroma.com: could not connect to host
 skylocker.net: could not connect to host
 skylocker.nl: could not connect to host
 sl1pkn07.wtf: could not connect to host
 slovoice.org: could not connect to host
@@ -1366,17 +1379,16 @@ socialworkout.com: could not connect to 
 socialworkout.net: could not connect to host
 socialworkout.org: could not connect to host
 socialworkout.tv: could not connect to host
 socketize.com: could not connect to host
 sojingle.net: could not connect to host
 solidtuesday.com: could not connect to host
 sonafe.info: could not connect to host
 sortaweird.net: could not connect to host
-soulema.com: could not connect to host
 soundhunter.xyz: could not connect to host
 sowingseasons.com: could not connect to host
 sowncloud.de: could not connect to host
 spanien.guide: could not connect to host
 sphinx.network: could not connect to host
 spicywombat.com: could not connect to host
 split.is: could not connect to host
 sportsmanadvisor.com: could not connect to host
@@ -1391,38 +1403,34 @@ stamonicatourandtravel.com: could not co
 statgram.me: could not connect to host
 static-assets.io: could not connect to host
 static.hosting: could not connect to host
 statusbot.io: could not connect to host
 steffi-in-australien.com: could not connect to host
 steven-bennett.com: could not connect to host
 stickswag.cf: could not connect to host
 stilettomoda.com.br: could not connect to host
-stitthappens.com: could not connect to host
 stonemanbrasil.com.br: could not connect to host
 stpip.com: could not connect to host
 streams.dyndns.org: could not connect to host
 stressfreehousehold.com: could not connect to host
 stupendous.net: could not connect to host
 stylle.me: could not connect to host
-stytt.com: could not connect to host
 sudo.im: could not connect to host
 sudosu.fr: could not connect to host
+suitocracy.com: could not connect to host
 sulek.eu: could not connect to host
 summer.ga: could not connect to host
 suneilpatel.com: could not connect to host
 sunfireshop.com.br: could not connect to host
 sunxchina.com: could not connect to host
 superpase.com: could not connect to host
-surasak.io: could not connect to host
-surasak.org: could not connect to host
 susconam.org: could not connect to host
 suspiciousdarknet.xyz: could not connect to host
 sussexwebdesigns.com: could not connect to host
-suts.co.uk: could not connect to host
 swaggerdile.com: could not connect to host
 t3rror.net: could not connect to host
 takusan.ru: could not connect to host
 talktwincities.com: could not connect to host
 tangyue.date: could not connect to host
 tangzhao.net: could not connect to host
 tcpweb.net: could not connect to host
 tdsb.cf: could not connect to host
@@ -1439,80 +1447,83 @@ testovaci.ml: could not connect to host
 tetsai.com: could not connect to host
 the-digitale.com: could not connect to host
 the-finance-blog.com: could not connect to host
 the-gist.io: could not connect to host
 thedarkartsandcrafts.com: could not connect to host
 theevergreen.me: could not connect to host
 thefox.co: could not connect to host
 thefrk.xyz: could not connect to host
+thelefthand.org: could not connect to host
 thenrdhrd.nl: could not connect to host
 theprincegame.com: could not connect to host
 theprivacysolution.com: could not connect to host
 thequillmagazine.org: could not connect to host
 thermique.ch: could not connect to host
 thesehighsandlows.com: could not connect to host
 theserver201.tk: could not connect to host
 thewebdexter.com: could not connect to host
 thierryhayoz.ch: could not connect to host
 thinkcash.nl: could not connect to host
 thompsonfamily.cloud: could not connect to host
-threv.net: could not connect to host
 tianxicaipiao.win: could not connect to host
 tianxicp.com: could not connect to host
+tiffnix.com: could not connect to host
 timco.cloud: could not connect to host
 tink.network: could not connect to host
 tnb-plattform.de: could not connect to host
 todosrv.com: could not connect to host
 tokoindo.top: could not connect to host
 tollsjekk.no: could not connect to host
-tomatenaufdenaugen.de: could not connect to host
 tomm.yt: could not connect to host
 tommounsey.com: could not connect to host
 topdetoxcleanse.com: could not connect to host
 topnotchendings.com: could not connect to host
 tor2web.org: could not connect to host
 totallynotaserver.com: could not connect to host
 totalsystemcare.com: could not connect to host
 totch.de: could not connect to host
 totot.net: could not connect to host
 touch-up-net.com: could not connect to host
 toxicip.com: could not connect to host
 tpblist.xyz: could not connect to host
 trajano.net: could not connect to host
 transcendmotor.sg: could not connect to host
-traumhuetten.de: could not connect to host
 travotion.com: could not connect to host
 treker.us: could not connect to host
 tristanfarkas.one: could not connect to host
 trynowrinkleseyeserum.com: could not connect to host
 tsaro.io: could not connect to host
 tsurezurematome.ga: could not connect to host
+tu6.pm: could not connect to host
 tucidi.net: could not connect to host
 tucnak.eu: could not connect to host
+tucuxi.org: could not connect to host
 tumelum.de: could not connect to host
 tupizm.com: could not connect to host
 turkiet.guide: could not connect to host
 turn-sticks.com: could not connect to host
+tursiae.org: could not connect to host
 tuxhound.org: could not connect to host
 twinkieman.com: could not connect to host
 twiri.net: could not connect to host
 twitter.ax: could not connect to host
 twotube.ie: could not connect to host
 tykoon.com: could not connect to host
 tyler.rs: could not connect to host
 tyleromeara.com: could not connect to host
 tzwe.com: could not connect to host
 ubi.gg: could not connect to host
 ubicv.com: could not connect to host
 uborcare.com: could not connect to host
 udo-luetkemeier.de: could not connect to host
 ueu.me: could not connect to host
 uggedal.com: could not connect to host
 uicchy.com: could not connect to host
+ulti.gq: could not connect to host
 umsapi.com: could not connect to host
 unefuite.ch: could not connect to host
 unhu.fr: could not connect to host
 uni2share.com: could not connect to host
 unicorn.li: could not connect to host
 uploadbro.com: could not connect to host
 urcentral.org: could not connect to host
 uscp8.com: could not connect to host
@@ -1540,24 +1551,24 @@ veryyounglesbians.com: could not connect
 vgatest.nl: could not connect to host
 vicenage.com: could not connect to host
 videorullen.se: could not connect to host
 videov.tk: could not connect to host
 vidister.de: could not connect to host
 vikasbabyworld.de: could not connect to host
 vimeosucks.nyc: could not connect to host
 vinetalk.net: could not connect to host
+vishwashantiyoga.com: could not connect to host
 visionthroughknowledge.com: could not connect to host
 visiontree.eu: could not connect to host
 vkino.com: could not connect to host
 vkirichenko.name: could not connect to host
 vlogge.com: could not connect to host
 voeux.io: could not connect to host
 vogt.tech: could not connect to host
-void-zero.com: could not connect to host
 volcain.io: could not connect to host
 vorlif.org: could not connect to host
 votocek.cz: could not connect to host
 votockova.cz: could not connect to host
 votresiteweb.ch: could not connect to host
 vrtak-cz.net: could not connect to host
 vrtouring.org: could not connect to host
 vsx.ch: could not connect to host
@@ -1588,16 +1599,19 @@ webbson.net: could not connect to host
 webcatechism.com: could not connect to host
 webhackspro.com: could not connect to host
 webproject.rocks: could not connect to host
 webspotter.nl: could not connect to host
 webtar.info: could not connect to host
 webtech.com.br: could not connect to host
 webthings.com.br: could not connect to host
 wecanvisit.com: could not connect to host
+weebsr.us: could not connect to host
+weed.ren: could not connect to host
+week.report: could not connect to host
 weiler.xyz: could not connect to host
 wejumall.com: could not connect to host
 wekibe.de: could not connect to host
 welby.cat: could not connect to host
 wereldplanner.nl: could not connect to host
 werhatunsverraten.eu: could not connect to host
 wespeakgeek.co.za: could not connect to host
 wetthost.com: could not connect to host
@@ -1641,17 +1655,16 @@ xeonlab.de: could not connect to host
 xia100.xyz: could not connect to host
 xianguocy.com: could not connect to host
 xing.ml: could not connect to host
 xn--8mr166hf6s.xn--fiqs8s: could not connect to host
 xn--erklderbarenben-slbh.dk: could not connect to host
 xn--srenpind-54a.dk: could not connect to host
 xn--t8j2a3042d.xyz: could not connect to host
 xn--xz1a.jp: could not connect to host
-xn--y8j148r.xn--q9jyb4c: could not connect to host
 xn--yj8h0m.ws: could not connect to host
 xn--ykrp42k.com: could not connect to host
 xoda.pw: could not connect to host
 xplore-dna.net: could not connect to host
 xpwn.cz: could not connect to host
 xuntaosms.com: could not connect to host
 xwaretech.info: could not connect to host
 y3451.com: could not connect to host
@@ -1664,60 +1677,60 @@ yellowcar.website: could not connect to 
 yemekbaz.az: could not connect to host
 yesfone.com.br: could not connect to host
 yffengshi.ml: could not connect to host
 yggdar.ga: could not connect to host
 yhori.xyz: could not connect to host
 yibin0831.com: could not connect to host
 ying299.com: could not connect to host
 ying299.net: could not connect to host
+ylk.io: could not connect to host
 yobst.tk: could not connect to host
 yoga.is-an-engineer.com: could not connect to host
 yotilabs.com: could not connect to host
 yourznc.com: could not connect to host
 yousite.by: could not connect to host
-youtous.me: could not connect to host
 yude.ml: could not connect to host
 yugege.cf: could not connect to host
 yum.beer: could not connect to host
 yux.fr: could not connect to host
 zachbolinger.com: could not connect to host
 zajazd.biz: could not connect to host
 zaoext.com: could not connect to host
 zbchen.com: could not connect to host
+zby.io: could not connect to host
 zeitzer-turngala.de: could not connect to host
 zenghx.tk: could not connect to host
 zero-x-baadf00d.com: could not connect to host
 zerosource.net: could not connect to host
 zhangfangzhou.com: could not connect to host
 zhangsir.net: could not connect to host
 zhaochen.xyz: could not connect to host
 zhenmeish.com: could not connect to host
 zhiin.net: could not connect to host
 zhikin.com: could not connect to host
 zhoujiashu.com: could not connect to host
 zobraz.cz: could not connect to host
 zokster.net: could not connect to host
 ztytian.com: could not connect to host
-zuckerfloh.de: could not connect to host
 zudomc.me: could not connect to host
 zuefle.net: could not connect to host
 zuehlcke.de: could not connect to host
 zukix.com: could not connect to host
 zuviel.space: could not connect to host
 zwy.me: could not connect to host
 zxtcode.com: could not connect to host
 zyx.im: could not connect to host
 zzw.ca: could not connect to host
 00001.am: did not receive HSTS header
 00002.am: did not receive HSTS header
 0005.com: could not connect to host
 0005aa.com: could not connect to host
 007sascha.de: did not receive HSTS header
-020wifi.nl: could not connect to host
+020wifi.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 119"  data: no]
 0222aa.com: did not receive HSTS header
 048.ag: could not connect to host
 050508.com: could not connect to host
 0f.io: could not connect to host
 0fl.com: did not receive HSTS header
 0g.org.uk: could not connect to host
 0o0.ooo: could not connect to host
 0p.no: did not receive HSTS header
@@ -1783,17 +1796,17 @@ 25daysof.io: could not connect to host
 2859cc.com: could not connect to host
 2acbi-asso.fr: did not receive HSTS header
 2bizi.ru: could not connect to host
 2brokegirls.org: could not connect to host
 2carpros.com: did not receive HSTS header
 2intermediate.co.uk: did not receive HSTS header
 2or3.tk: could not connect to host
 2smart4food.com: did not receive HSTS header
-2ss.jp: could not connect to host
+2ss.jp: did not receive HSTS header
 300651.ru: did not receive HSTS header
 300mbmovie24.com: could not connect to host
 300mbmovies4u.cc: could not connect to host
 301.website: could not connect to host
 302.nyc: could not connect to host
 314166.com: could not connect to host
 32ph.com: could not connect to host
 33836.com: did not receive HSTS header
@@ -1940,16 +1953,17 @@ acuve.jp: could not connect to host
 ada.is: max-age too low: 2592000
 adajwells.me: could not connect to host
 adambryant.ca: could not connect to host
 adamricheimer.com: could not connect to host
 adamwk.com: did not receive HSTS header
 adastra.re: could not connect to host
 adboos.com: could not connect to host
 addaxpetroleum.com: could not connect to host
+addcrazy.com: did not receive HSTS header
 addvocate.com: could not connect to host
 adelevie.com: could not connect to host
 adelinlydia-coach.com: did not receive HSTS header
 adequatetechnology.com: could not connect to host
 aderal.io: could not connect to host
 adesa-asesoria.com: did not receive HSTS header
 adfa-1.com: could not connect to host
 adhosting.nl: did not receive HSTS header
@@ -1992,16 +2006,17 @@ afmchandler.com: did not receive HSTS he
 afp548.tk: could not connect to host
 after.im: did not receive HSTS header
 afvallendoeje.nu: could not connect to host
 afyou.co.kr: could not connect to host
 afzco.asia: did not receive HSTS header
 agalaxyfarfaraway.co.uk: could not connect to host
 agatheetraphael.fr: could not connect to host
 agbremen.de: did not receive HSTS header
+agenciagriff.com: did not receive HSTS header
 agentseeker.ca: could not connect to host
 agevio.com: could not connect to host
 agonswim.com: could not connect to host
 agrias.com.br: did not receive HSTS header
 agrimap.com: did not receive HSTS header
 agro-id.gov.ua: did not receive HSTS header
 agtv.com.br: did not receive HSTS header
 ahabingo.com: did not receive HSTS header
@@ -2248,17 +2263,17 @@ aran.me.uk: could not connect to host
 arboineuropa.nl: did not receive HSTS header
 arboleda-hurtado.com: could not connect to host
 arbu.eu: max-age too low: 2419200
 ardao.me: did not receive HSTS header
 ardorlabs.se: could not connect to host
 arewedubstepyet.com: did not receive HSTS header
 argennon.xyz: could not connect to host
 arguggi.co.uk: could not connect to host
-ariacreations.net: did not receive HSTS header
+ariacreations.net: could not connect to host
 arislight.com: could not connect to host
 arkadiyt.com: did not receive HSTS header
 arlen.io: could not connect to host
 arlen.se: could not connect to host
 armingrodon.de: max-age too low: 0
 armor.com: did not receive HSTS header
 armored.ninja: could not connect to host
 armory.consulting: could not connect to host
@@ -2281,17 +2296,17 @@ arthan.me: could not connect to host
 artifex21.com: could not connect to host
 artifex21.fr: could not connect to host
 artiming.com: could not connect to host
 artisavotins.com: could not connect to host
 artisphere.ch: did not receive HSTS header
 artistnetwork.nl: did not receive HSTS header
 arto.bg: did not receive HSTS header
 arturkohut.com: could not connect to host
-artyland.ru: did not receive HSTS header
+artyland.ru: could not connect to host
 arvamus.eu: could not connect to host
 arzaroth.com: did not receive HSTS header
 as.se: could not connect to host
 as9178.net: could not connect to host
 asahikoji.net: could not connect to host
 asasuou.pw: could not connect to host
 asc16.com: could not connect to host
 ascamso.com: could not connect to host
@@ -2320,29 +2335,29 @@ athaliasoft.com: could not connect to ho
 athenelive.com: could not connect to host
 athensbusinessresources.us: did not receive HSTS header
 athul.xyz: could not connect to host
 atlex.nl: did not receive HSTS header
 atlseccon.com: did not receive HSTS header
 atomic.menu: could not connect to host
 atomik.pro: could not connect to host
 atop.io: could not connect to host
+attendantdesign.com: did not receive HSTS header
 attic118.com: could not connect to host
 attimidesigns.com: did not receive HSTS header
 attogproductions.com: could not connect to host
 au-pair24.de: did not receive HSTS header
 au.search.yahoo.com: max-age too low: 172800
 aubiosales.com: could not connect to host
 aucubin.moe: could not connect to host
 audiovisualdevices.com.au: did not receive HSTS header
 auditmatrix.com: did not receive HSTS header
 augias.org: could not connect to host
 augrandinquisiteur.com: did not receive HSTS header
 aujapan.ru: could not connect to host
-aulo.in: did not receive HSTS header
 aurainfosec.com: did not receive HSTS header
 aurainfosec.com.au: did not receive HSTS header
 auraredeye.com: could not connect to host
 auraredshield.com: could not connect to host
 aurora-terraria.org: did not receive HSTS header
 auroratownshipfd.org: could not connect to host
 aurugs.com: did not receive HSTS header
 ausnah.me: could not connect to host
@@ -2373,18 +2388,21 @@ av.de: did not receive HSTS header
 avadatravel.com: did not receive HSTS header
 avantmfg.com: did not receive HSTS header
 avec-ou-sans-ordonnance.fr: could not connect to host
 aveling-adventure.co.uk: did not receive HSTS header
 avepol.cz: did not receive HSTS header
 avepol.eu: did not receive HSTS header
 aviacao.pt: did not receive HSTS header
 aviodeals.com: could not connect to host
+avmo.pw: did not receive HSTS header
 avqueen.cn: could not connect to host
+avso.pw: did not receive HSTS header
 avus-automobile.com: did not receive HSTS header
+avxo.pw: did not receive HSTS header
 awanderlustadventure.com: did not receive HSTS header
 awg-mode.de: did not receive HSTS header
 aww.moe: did not receive HSTS header
 axado.com.br: did not receive HSTS header
 axelchv.fr: did not receive HSTS header
 axeny.com: did not receive HSTS header
 axg.io: did not receive HSTS header
 axolsoft.com: max-age too low: 10540800
@@ -2502,21 +2520,20 @@ beavers.io: could not connect to host
 bebeefy.uk: could not connect to host
 bebesurdoue.com: could not connect to host
 bedabox.com: max-age too low: 0
 bedeta.de: could not connect to host
 bedreid.dk: did not receive HSTS header
 bedrijvenadministratie.nl: could not connect to host
 beerboutique.com.br: could not connect to host
 beetleroadstories.com: could not connect to host
-beforesunrise.de: did not receive HSTS header
 befundup.com: could not connect to host
 behere.be: could not connect to host
 beholdthehurricane.com: could not connect to host
-beier.io: could not connect to host
+beier.io: did not receive HSTS header
 beikeil.de: max-age too low: 86400
 belairsewvac.com: could not connect to host
 belewpictures.com: could not connect to host
 belgien.guide: could not connect to host
 belize-firmengruendung.com: could not connect to host
 belliash.eu.org: did not receive HSTS header
 belltower.io: could not connect to host
 belmontprom.com: could not connect to host
@@ -2626,16 +2643,17 @@ bitconcepts.co.uk: could not connect to 
 biteoftech.com: did not receive HSTS header
 bitf.ly: could not connect to host
 bitfactory.ws: could not connect to host
 bitfarm-archiv.com: did not receive HSTS header
 bitfarm-archiv.de: did not receive HSTS header
 bitheus.com: could not connect to host
 bithosting.io: did not receive HSTS header
 bitlish.com: max-age too low: 86400
+bitmon.net: did not receive HSTS header
 bitnet.io: did not receive HSTS header
 bitrage.de: could not connect to host
 bitraum.io: could not connect to host
 bitsafe.systems: did not receive HSTS header
 bitvigor.com: did not receive HSTS header
 bitwrought.net: could not connect to host
 bivsi.com: could not connect to host
 bizcms.com: did not receive HSTS header
@@ -2781,16 +2799,18 @@ brunohenc.from.hr: could not connect to 
 brunoonline.co.uk: could not connect to host
 bryn.xyz: could not connect to host
 bs12v.ru: did not receive HSTS header
 bsdtips.com: could not connect to host
 bsklabels.com: did not receive HSTS header
 btc-e.com: did not receive HSTS header
 btcdlc.com: could not connect to host
 btcpot.ltd: did not receive HSTS header
+btio.pw: did not receive HSTS header
+btxiaobai.com: did not receive HSTS header
 buben.tech: did not receive HSTS header
 bubulazi.com: did not receive HSTS header
 bubulazy.com: did not receive HSTS header
 buch-cuber.de: max-age too low: 0
 buchheld.at: did not receive HSTS header
 bucket.tk: could not connect to host
 budgetthostels.nl: did not receive HSTS header
 budskap.eu: could not connect to host
@@ -2879,16 +2899,17 @@ bytesatwork.eu: could not connect to hos
 bytesund.biz: could not connect to host
 byurudraw.pics: could not connect to host
 c-rickroll-v.pw: could not connect to host
 c0rn3j.com: did not receive HSTS header
 c1yd3i.me: could not connect to host
 c2lab.net: did not receive HSTS header
 c3-compose.com: could not connect to host
 c3b.info: could not connect to host
+c3ie.com: did not receive HSTS header
 cabsites.com: could not connect to host
 cabusar.fr: did not receive HSTS header
 caconnect.org: could not connect to host
 cadao.me: did not receive HSTS header
 caesreon.com: could not connect to host
 cafe-murr.de: could not connect to host
 cafe-scientifique.org.ec: could not connect to host
 cafe-service.ru: did not receive HSTS header
@@ -3060,16 +3081,17 @@ chib.chat: could not connect to host
 chihiro.xyz: did not receive HSTS header
 chijiokeindustries.co.uk: could not connect to host
 childcaresolutionscny.org: did not receive HSTS header
 chirgui.eu: could not connect to host
 chlouis.net: could not connect to host
 chm.vn: did not receive HSTS header
 chodobien.com: could not connect to host
 choiralberta.ca: could not connect to host
+chonghe.org: did not receive HSTS header
 chontalpa.pw: could not connect to host
 chordso.com: could not connect to host
 choruscrowd.com: could not connect to host
 chotu.net: could not connect to host
 chris-web.info: could not connect to host
 chrisandsarahinasia.com: did not receive HSTS header
 chrisbrakebill.com: could not connect to host
 chrisbrown.id.au: could not connect to host
@@ -3077,44 +3099,45 @@ chrisfaber.com: could not connect to hos
 chriskirchner.de: did not receive HSTS header
 chriskyrouac.com: could not connect to host
 chrisopperwall.com: did not receive HSTS header
 chrisself.xyz: did not receive HSTS header
 christiaandruif.nl: could not connect to host
 christianbro.gq: could not connect to host
 christina-quast.de: did not receive HSTS header
 christophercolumbusfoundation.gov: could not connect to host
-christophheich.me: could not connect to host
+christophheich.me: did not receive HSTS header
 chrisupjohn.com: could not connect to host
 chrisvicmall.com: did not receive HSTS header
 chrome: could not connect to host
 chrome-devtools-frontend.appspot.com: did not receive HSTS header (error ignored - included regardless)
 chrome.google.com: did not receive HSTS header (error ignored - included regardless)
 chrst.ph: could not connect to host
 chs.us: did not receive HSTS header
 chua.cf: could not connect to host
-chuckame.fr: did not receive HSTS header
 chulado.com: did not receive HSTS header
 churchux.co: did not receive HSTS header
 churrasqueirafacil.com.br: could not connect to host
 ci-labo.com.tw: max-age too low: 7889238
 cidr.ml: could not connect to host
 cienbeaute-lidl.fr: did not receive HSTS header
 cigarblogs.net: could not connect to host
 cigi.site: could not connect to host
 ciicutini.ro: did not receive HSTS header
 cim2b.de: could not connect to host
 cimalando.eu: could not connect to host
 cinartelorgu.com: did not receive HSTS header
 cintdirect.com: could not connect to host
+cio.gov: did not receive HSTS header
 cioconference.co.nz: could not connect to host
 ciplanutrition.com: did not receive HSTS header
 ciscohomeanalytics.com: could not connect to host
 ciscommerce.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 119"  data: no]
 citiagent.cz: could not connect to host
+citizenscience.gov: did not receive HSTS header
 cityoflaurel.org: did not receive HSTS header
 cium.ru: could not connect to host
 cjcaron.org: could not connect to host
 claimit.ml: could not connect to host
 clan-ww.com: did not receive HSTS header
 clara-baumert.de: could not connect to host
 claralabs.com: did not receive HSTS header
 clarity-c2ced.appspot.com: did not receive HSTS header
@@ -3310,17 +3333,16 @@ coroasdefloresonline.com.br: could not c
 corozanu.ro: did not receive HSTS header
 corpoatletico.com.br: could not connect to host
 corporateencryption.com: could not connect to host
 corporatesubscriptions.com.au: did not receive HSTS header
 correctpaardbatterijnietje.nl: did not receive HSTS header
 corruption-mc.net: could not connect to host
 corruption-rsps.net: could not connect to host
 corruption-server.net: could not connect to host
-cosmiatria.pe: did not receive HSTS header
 costow.club: could not connect to host
 coughlan.de: did not receive HSTS header
 count.sh: could not connect to host
 couponcodeq.com: could not connect to host
 couragewhispers.ca: could not connect to host
 coursdeprogrammation.com: could not connect to host
 coursella.com: did not receive HSTS header
 covenantbank.net: could not connect to host
@@ -3536,18 +3558,17 @@ dccode.gov: could not connect to host
 dccoffeeproducts.com: did not receive HSTS header
 dccraft.net: could not connect to host
 dcl.re: did not receive HSTS header
 dcpower.eu: max-age too low: 600
 dctxf.com: did not receive HSTS header
 dcuofriends.net: could not connect to host
 dcurt.is: did not receive HSTS header
 dcw.io: did not receive HSTS header
-ddatsh.com: did not receive HSTS header
-ddepot.us: did not receive HSTS header
+ddatsh.com: could not connect to host
 deadsoul.net: max-age too low: 0
 debank.tv: did not receive HSTS header
 debatch.se: could not connect to host
 debian-vhost.de: did not receive HSTS header
 debiton.dk: could not connect to host
 debtkit.co.uk: did not receive HSTS header
 debtprotectionreporting.com: did not receive HSTS header
 decafu.co: could not connect to host
@@ -3640,17 +3661,16 @@ diagnosia.com: did not receive HSTS head
 diagonale-deco.fr: did not receive HSTS header
 diamondcare.com.br: could not connect to host
 dianlujitao.com: did not receive HSTS header
 diannaobos.com: did not receive HSTS header
 dicando.com: could not connect to host
 dicelab.co.uk: could not connect to host
 dicionariofinanceiro.com: did not receive HSTS header
 dicionariopopular.com: did not receive HSTS header
-dicoding.com: did not receive HSTS header
 dieb.photo: could not connect to host
 diejanssens.net: did not receive HSTS header
 dierenkruiden.nl: could not connect to host
 diewebstube.de: could not connect to host
 diezel.com: could not connect to host
 diferenca.com: did not receive HSTS header
 digired.xyz: could not connect to host
 digitalbank.kz: could not connect to host
@@ -3706,20 +3726,18 @@ dkniss.de: could not connect to host
 dl.google.com: did not receive HSTS header (error ignored - included regardless)
 dlc.viasinc.com: could not connect to host
 dlemper.de: did not receive HSTS header
 dmcibulldog.com: did not receive HSTS header
 dmix.ca: could not connect to host
 dmtry.me: did not receive HSTS header
 dmwall.cn: could not connect to host
 dmz.ninja: could not connect to host
-dns-control.eu: did not receive HSTS header
 dns.google.com: did not receive HSTS header (error ignored - included regardless)
 dnsbird.net: could not connect to host
-dnscrypt.org: did not receive HSTS header
 dnsknowledge.com: did not receive HSTS header
 do-do.tk: could not connect to host
 doak.io: could not connect to host
 dobet.in: could not connect to host
 docid.io: could not connect to host
 docket.news: could not connect to host
 doclot.io: did not receive HSTS header
 docset.io: could not connect to host
@@ -3732,17 +3750,16 @@ dogespeed.ga: could not connect to host
 dogfi.sh: did not receive HSTS header
 doggieholic.net: could not connect to host
 dognlife.com: could not connect to host
 dogoodbehappyllc.com: did not receive HSTS header
 dohosting.ru: could not connect to host
 dojin.nagoya: did not receive HSTS header
 dokan.online: did not receive HSTS header
 doked.io: could not connect to host
-doleta.gov: did not receive HSTS header
 dolevik.com: could not connect to host
 dollarstore24.com: could not connect to host
 dollywiki.co.uk: could not connect to host
 dolphin-cloud.com: could not connect to host
 dolphincorp.co.uk: did not receive HSTS header
 dolphinswithlasers.com: could not connect to host
 domaine-aigoual-cevennes.com: did not receive HSTS header
 domainelaremejeanne.com: did not receive HSTS header
@@ -3825,17 +3842,16 @@ drostschocolates.com: did not receive HS
 drtroyhendrickson.com: could not connect to host
 drumbandesperanto.nl: did not receive HSTS header
 drupal123.com: could not connect to host
 dryan.com: did not receive HSTS header
 drycreekapiary.com: could not connect to host
 ds-christiansen.de: could not connect to host
 dshiv.io: could not connect to host
 dtub.co: could not connect to host
-dualias.xyz: did not receive HSTS header
 dubik.su: did not receive HSTS header
 ducohosting.com: max-age too low: 2592000
 dudesunderwear.com.br: could not connect to host
 duelysthub.com: could not connect to host
 duerls.de: did not receive HSTS header
 dukec.me: did not receive HSTS header
 dullsir.com: could not connect to host
 dune.io: did not receive HSTS header
@@ -4032,27 +4048,29 @@ enecoshop.nl: did not receive HSTS heade
 enefan.jp: could not connect to host
 engelwerbung.com: did not receive HSTS header
 enginsight.com: did not receive HSTS header
 englishyamal.ru: did not receive HSTS header
 enigmacpt.com: did not receive HSTS header
 enigmail.net: did not receive HSTS header
 enjen.net: did not receive HSTS header
 enjoymayfield.com: max-age too low: 0
+enlightenment.org: did not receive HSTS header
 enteente.club: could not connect to host
 enteente.space: could not connect to host
 enteente.xyz: could not connect to host
 enterdev.co: did not receive HSTS header
 enterprisecarclub.co.uk: did not receive HSTS header
 entersynapse.com: did not receive HSTS header
 entourneebeetle.com: could not connect to host
 entrepreneur.or.id: did not receive HSTS header
 enum.eu.org: could not connect to host
 enumify.com: could not connect to host
 enviapresentes.com.br: could not connect to host
+enviaya.com.mx: did not receive HSTS header
 envygeeks.com: could not connect to host
 eol34.com: could not connect to host
 eoldb.org: could not connect to host
 epanurse.com: could not connect to host
 ephry.com: could not connect to host
 epicmc.games: could not connect to host
 epoxate.com: could not connect to host
 eq8.net.au: could not connect to host
@@ -4110,17 +4128,17 @@ etangs-magazine.com: could not connect t
 etaoinwu.tk: could not connect to host
 etdonline.co.uk: could not connect to host
 eternitylove.us: could not connect to host
 eth9.net: could not connect to host
 etheria-software.tk: did not receive HSTS header
 ethicalexploiting.com: did not receive HSTS header
 ethicall.org.uk: did not receive HSTS header
 ethil-faer.fr: could not connect to host
-etk2000.com: could not connect to host
+etk2000.com: did not receive HSTS header
 etmirror.top: could not connect to host
 etmirror.xyz: could not connect to host
 etoto.pl: did not receive HSTS header
 etproxy.tech: could not connect to host
 etrker.com: did not receive HSTS header
 ets2mp.de: did not receive HSTS header
 etsysecure.com: could not connect to host
 ettebiz.com: did not receive HSTS header
@@ -4153,17 +4171,17 @@ evilsay.com: could not connect to host
 evin.ml: could not connect to host
 evites.me: could not connect to host
 evoludis.net: did not receive HSTS header
 evomon.com: could not connect to host
 evossd.tk: could not connect to host
 evowl.com: could not connect to host
 ewallet-optimizer.com: did not receive HSTS header
 ewex.org: could not connect to host
-excelgum.ca: could not connect to host
+excelgum.ca: did not receive HSTS header
 exfiles.cz: did not receive HSTS header
 exgravitus.com: could not connect to host
 exno.co: could not connect to host
 exousiakaidunamis.xyz: could not connect to host
 expertmile.com: did not receive HSTS header
 expo-designers.com: did not receive HSTS header
 expressfinance.co.za: did not receive HSTS header
 extrathemeshowcase.net: could not connect to host
@@ -4246,17 +4264,16 @@ fatzebra.com.au: max-age too low: 0
 fayolle.info: did not receive HSTS header
 fbox.li: could not connect to host
 fckd.net: did not receive HSTS header
 fcsic.gov: max-age too low: 2592000
 fdj.im: could not connect to host
 fdt.name: did not receive HSTS header
 feard.space: could not connect to host
 federalregister.gov: did not receive HSTS header
-federalreserve.gov: did not receive HSTS header
 fedo.moe: could not connect to host
 feedthebot.com: did not receive HSTS header
 feedthefuture.gov: did not receive HSTS header
 feezmodo.com: did not receive HSTS header
 fefore.com: did not receive HSTS header
 fegans.org.uk: did not receive HSTS header
 felisslovakia.sk: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 119"  data: no]
 feliwyn.fr: did not receive HSTS header
@@ -4326,17 +4343,16 @@ fitshop.com.br: could not connect to hos
 fitsw.com: did not receive HSTS header
 five.vn: did not receive HSTS header
 fivestarsitters.com: did not receive HSTS header
 fivestepfunnels.com: could not connect to host
 fivezerocreative.com: did not receive HSTS header
 fixico-staging.nl: could not connect to host
 fixingdns.com: could not connect to host
 fixtectools.co.za: could not connect to host
-fixvoltage.ru: did not receive HSTS header
 fjruiz.es: did not receive HSTS header
 fkcovering.be: could not connect to host
 fl0000.com: did not receive HSTS header
 fl010.com: did not receive HSTS header
 fl0111.com: did not receive HSTS header
 fl0222.com: did not receive HSTS header
 fl0333.com: did not receive HSTS header
 fl0555.com: did not receive HSTS header
@@ -4399,32 +4415,34 @@ foreignexchangeresource.com: did not rec
 forestfinance.fr: did not receive HSTS header
 foreveralone.io: could not connect to host
 forewordreviews.com: did not receive HSTS header
 forex-dan.com: did not receive HSTS header
 forgix.com: could not connect to host
 formazioneopen.it: could not connect to host
 formula.cf: could not connect to host
 forplanetsake.com: could not connect to host
+fortesanshop.it: did not receive HSTS header
 forty2.eu: did not receive HSTS header
 forus.be: could not connect to host
 fossewaygardencentre.co.uk: did not receive HSTS header
 fotiu.com: could not connect to host
 fotocerita.net: could not connect to host
 fotogiraffe.ru: could not connect to host
 fotografosexpertos.com: did not receive HSTS header
 fotopasja.info: could not connect to host
 fourchin.net: could not connect to host
 fourwheelpartloanssimple.com: did not receive HSTS header
 foxdev.io: did not receive HSTS header
 foxelbox.com: did not receive HSTS header
 foxley-farm.co.uk: did not receive HSTS header
 foxley-seeds.co.uk: did not receive HSTS header
 foxleyseeds.co.uk: could not connect to host
 foxtrot.pw: could not connect to host
+fpc.gov: did not receive HSTS header
 fr33d0m.link: could not connect to host
 fragilesolar.cf: could not connect to host
 fralef.me: did not receive HSTS header
 francevpn.xyz: could not connect to host
 francois-vidit.com: did not receive HSTS header
 frangor.info: did not receive HSTS header
 frankierprofi.de: did not receive HSTS header
 franta.biz: did not receive HSTS header
@@ -4581,16 +4599,17 @@ geoffreyrichard.com: did not receive HST
 geopals.net: did not receive HSTS header
 geoponika.gr: did not receive HSTS header
 george-brighton.co.uk: could not connect to host
 georgebrighton.co.uk: could not connect to host
 georgesonarthurs.com.au: did not receive HSTS header
 gereja.ga: could not connect to host
 gerencianet.com.br: did not receive HSTS header
 gereon.ch: could not connect to host
+geschmackspiloten.de: did not receive HSTS header
 gesiwista.net: could not connect to host
 gesunde-smoothies.de: did not receive HSTS header
 get-cctv.com: could not connect to host
 get-refer.com: did not receive HSTS header
 get.zenpayroll.com: did not receive HSTS header
 getable.com: did not receive HSTS header
 getblys.com.au: did not receive HSTS header
 getbooks.co.il: did not receive HSTS header
@@ -4646,23 +4665,23 @@ gingali.de: did not receive HSTS header
 ginijony.com: did not receive HSTS header
 gintenreiter-photography.com: did not receive HSTS header
 giogadesign.com: did not receive HSTS header
 gipsamsfashion.com: could not connect to host
 gipsic.com: did not receive HSTS header
 gis3m.org: did not receive HSTS header
 gistfy.com: could not connect to host
 git-stuff.tk: could not connect to host
-github.party: could not connect to host
 givemyanswer.com: could not connect to host
 gizzo.sk: could not connect to host
 glass.google.com: did not receive HSTS header (error ignored - included regardless)
 glasslikes.com: did not receive HSTS header
 glbg.eu: did not receive HSTS header
 glentakahashi.com: could not connect to host
+glittersjabloon.nl: did not receive HSTS header
 glitzmirror.com: could not connect to host
 global-adult-webcams.com: did not receive HSTS header
 globalado.com: could not connect to host
 globalbridge-japan.com: did not receive HSTS header
 globalexpert.co.nz: could not connect to host
 globalinsights.xyz: could not connect to host
 globalittech.com: could not connect to host
 globalmusic.ga: could not connect to host
@@ -4988,17 +5007,16 @@ helgakristoffer.wedding: could not conne
 helloworldhost.com: did not receive HSTS header
 hellscanyonraft.com: did not receive HSTS header
 helpadmin.net: could not connect to host
 helpium.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 119"  data: no]
 helpmebuild.com: did not receive HSTS header
 hemlockhillscabinrentals.com: did not receive HSTS header
 hencagon.com: could not connect to host
 hendersonrealestatepros.com: did not receive HSTS header
-hepteract.us: could not connect to host
 herbertmouwen.nl: could not connect to host
 here4funpartysolutions.ie: did not receive HSTS header
 heritagedentistry.ca: did not receive HSTS header
 herpaderp.net: could not connect to host
 herrenfahrt.com: did not receive HSTS header
 herzbotschaft.de: did not receive HSTS header
 hetmer.com: did not receive HSTS header
 hetmer.cz: did not receive HSTS header
@@ -5165,16 +5183,17 @@ iapws.com: did not receive HSTS header
 iban.is: could not connect to host
 ibarf.nl: did not receive HSTS header
 ibase.com: did not receive HSTS header
 ibenchu.com: did not receive HSTS header
 ibestreview.com: did not receive HSTS header
 ibnuwebhost.com: could not connect to host
 icabanken.se: did not receive HSTS header
 icaforsakring.se: did not receive HSTS header
+icasnetwork.com: did not receive HSTS header
 ice.yt: could not connect to host
 icepink.com.br: could not connect to host
 icewoman.net: did not receive HSTS header
 icfl.com.br: could not connect to host
 ich-find-den-g.net: could not connect to host
 ich-mach-druck.eu: did not receive HSTS header
 ichnichtskaufmann.de: could not connect to host
 ichoosebtec.com: did not receive HSTS header
@@ -5317,16 +5336,17 @@ inkstory.gr: did not receive HSTS header
 inksupply.com: did not receive HSTS header
 inkvisual.tk: did not receive HSTS header
 inleaked.com: could not connect to host
 inmyarea.com: max-age too low: 0
 innophate-security.nl: could not connect to host
 inplacers.ru: did not receive HSTS header
 inquisitive.io: could not connect to host
 insane-bullets.com: could not connect to host
+insho.fashion: did not receive HSTS header
 insite-feedback.com: could not connect to host
 inspire-av.com: did not receive HSTS header
 inspiroinc.com: could not connect to host
 instacart.com: did not receive HSTS header
 instant-hack.com: did not receive HSTS header
 instantdev.io: could not connect to host
 institutoflordelavida.com: could not connect to host
 instruktor.io: could not connect to host
@@ -5498,17 +5518,17 @@ jami.am: could not connect to host
 jamourtney.com: could not connect to host
 jan-cermak.cz: did not receive HSTS header
 jan-daniels.de: did not receive HSTS header
 jan-roenspies.de: could not connect to host
 jan27.org: did not receive HSTS header
 janario.me: could not connect to host
 janbrodda.de: max-age too low: 2592000
 jangho.me: could not connect to host
-janking.de: could not connect to host
+janking.de: did not receive HSTS header
 jannyrijneveld.nl: did not receive HSTS header
 janus-engineering.de: did not receive HSTS header
 japaripark.com: could not connect to host
 japlex.com: could not connect to host
 jaqen.ch: could not connect to host
 jaredbates.net: did not receive HSTS header
 jarnail.ca: did not receive HSTS header
 jaroslavtrsek.cz: did not receive HSTS header
@@ -5593,17 +5613,16 @@ jinshavip.com: did not receive HSTS head
 jirav.io: could not connect to host
 jisaku-homepage.com: did not receive HSTS header
 jitsi.org: did not receive HSTS header
 jiyue.com: did not receive HSTS header
 jjf.org.au: did not receive HSTS header
 jka.io: did not receive HSTS header
 jkb.pics: could not connect to host
 jkbuster.com: could not connect to host
-jkng.eu: could not connect to host
 jko.works: could not connect to host
 jm06.com: did not receive HSTS header
 jm22.com: did not receive HSTS header
 jmbelloteau.com: did not receive HSTS header
 jmdekker.it: could not connect to host
 jn1.me: did not receive HSTS header
 joakimalgroy.com: could not connect to host
 jobflyapp.com: could not connect to host
@@ -5618,17 +5637,16 @@ johngaltgroup.com: did not receive HSTS 
 johnhgaunt.com: did not receive HSTS header
 johnmcgovern.com: max-age too low: 43200
 johnrom.com: did not receive HSTS header
 johnverkerk.com: could not connect to host
 jointoweb.com: could not connect to host
 jonas-keidel.de: did not receive HSTS header
 jonasgroth.se: did not receive HSTS header
 jonathan.ir: could not connect to host
-jonathandowning.uk: did not receive HSTS header
 jonathanreyes.com: did not receive HSTS header
 jondarby.com: did not receive HSTS header
 jongha.me: could not connect to host
 jonn.me: could not connect to host
 jonnichols.info: did not receive HSTS header
 jonsno.ws: could not connect to host
 joostbovee.nl: could not connect to host
 jordanstrustcompany.cn: could not connect to host
@@ -5772,16 +5790,17 @@ kialo.com: did not receive HSTS header
 kickass-proxies.org: could not connect to host
 kickass.al: could not connect to host
 kickasstorrents.gq: did not receive HSTS header
 kickstart.com.pk: did not receive HSTS header
 kid-dachau.de: did not receive HSTS header
 kidkat.cn: could not connect to host
 kiel-media.de: did not receive HSTS header
 kieranjones.uk: did not receive HSTS header
+kikuzuki.org: max-age too low: 0
 kimana.pe: could not connect to host
 kimberg.co.uk: could not connect to host
 kimpost.org: could not connect to host
 kina.guide: could not connect to host
 kinderly.co.uk: did not receive HSTS header
 kinderwagen-test24.de: could not connect to host
 kindlyfire.com: could not connect to host
 kindof.ninja: could not connect to host
@@ -5828,17 +5847,17 @@ klauwd.com: could not connect to host
 klaxn.org: could not connect to host
 klean-ritekc.com: did not receive HSTS header
 kleertjesvoordelig.nl: could not connect to host
 kleinerarchitekturfuehrer.de: could not connect to host
 klempnershop.eu: did not receive HSTS header
 kleppe.co: could not connect to host
 kletterkater.com: did not receive HSTS header
 klicktojob.de: could not connect to host
-kloentrup.de: max-age too low: 604800
+kloentrup.de: did not receive HSTS header
 klunkergarten.org: could not connect to host
 knapen.io: max-age too low: 604800
 knccloud.com: could not connect to host
 knigadel.com: did not receive HSTS header
 knightsbridgegroup.org: could not connect to host
 knowdebt.org: did not receive HSTS header
 knowledgesnap.com: could not connect to host
 knowledgesnapsites.com: could not connect to host
@@ -5877,17 +5896,17 @@ koukni.cz: did not receive HSTS header
 kourpe.online: could not connect to host
 kousaku.jp: did not receive HSTS header
 kpdyer.com: did not receive HSTS header
 kprog.net: could not connect to host
 kraigwalker.com: could not connect to host
 kralik.xyz: could not connect to host
 kravelindo-adventure.com: could not connect to host
 krayx.com: max-age too low: 0
-kream.io: did not receive HSTS header
+kream.io: could not connect to host
 kreavis.com: did not receive HSTS header
 kreb.io: could not connect to host
 kredietpaspoort.nl: did not receive HSTS header
 kredite.sale: could not connect to host
 krestanskydarek.cz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 119"  data: no]
 kriegt.es: did not receive HSTS header
 kristjanrang.eu: did not receive HSTS header
 kristofferkoch.com: could not connect to host
@@ -5916,17 +5935,17 @@ kura.io: could not connect to host
 kurehun.org: could not connect to host
 kuro346.moe: could not connect to host
 kurtmclester.com: did not receive HSTS header
 kurz.pw: could not connect to host
 kurzonline.com.br: could not connect to host
 kweddingplanning.com: did not receive HSTS header
 kwok.tv: could not connect to host
 kwondratsch.com: could not connect to host
-kxind.cn: did not receive HSTS header
+kxind.cn: could not connect to host
 kyanite.co: could not connect to host
 kylapps.com: did not receive HSTS header
 kyochon.fr: could not connect to host
 kzjnet.com: could not connect to host
 l-rickroll-i.pw: could not connect to host
 la-flora-negra.de: could not connect to host
 la-grande-jaugue.fr: did not receive HSTS header
 la-retraite-info.com: did not receive HSTS header
@@ -5964,16 +5983,17 @@ lampl.info: did not receive HSTS header
 lana.swedbank.se: did not receive HSTS header
 lanauzedesigns.com: did not receive HSTS header
 lanboll.com: could not connect to host
 lancehoteis.com: did not receive HSTS header
 lancehoteis.com.br: did not receive HSTS header
 land-links.org: did not receive HSTS header
 landgoedverkopen.nl: could not connect to host
 landhuisverkopen.nl: could not connect to host
+landinfo.no: max-age too low: 86400
 landscape.canonical.com: max-age too low: 2592000
 landscapingmedic.com: did not receive HSTS header
 langenbach.rocks: could not connect to host
 langendries.eu: could not connect to host
 langhun.me: did not receive HSTS header
 laniakean.com: could not connect to host
 lanseyujie.com: max-age too low: 2592000
 lansinoh.co.uk: did not receive HSTS header
@@ -6132,16 +6152,17 @@ lisbongold.com: did not receive HSTS hea
 lisgade.dk: could not connect to host
 listafirmelor.com: could not connect to host
 listage.ovh: did not receive HSTS header
 litespeed.io: could not connect to host
 little.pw: did not receive HSTS header
 littlefreelibrary.org: did not receive HSTS header
 littleqiu.net: could not connect to host
 liujunyang.com: did not receive HSTS header
+livecards.es: did not receive HSTS header
 livedemo.io: could not connect to host
 livej.am: could not connect to host
 liverewrite.com: could not connect to host
 liviababynet.com.br: could not connect to host
 livrariahugodesaovitor.com.br: did not receive HSTS header
 lixiang.one: could not connect to host
 lixingcong.com: could not connect to host
 lkp111138.me: could not connect to host
@@ -6243,17 +6264,17 @@ luoe.ml: could not connect to host
 luoxiao.im: could not connect to host
 luripump.se: could not connect to host
 lusis.fr: did not receive HSTS header
 lusis.net: did not receive HSTS header
 lustrumxi.nl: could not connect to host
 luther.fi: did not receive HSTS header
 luxinmo.com: did not receive HSTS header
 luxus-russen.de: did not receive HSTS header
-luzeshomologadas.com.br: did not receive HSTS header
+luzeshomologadas.com.br: could not connect to host
 luzfaltex.com: did not receive HSTS header
 lycly.top: could not connect to host
 lydia-und-simon.de: could not connect to host
 lydiagorstein.com: could not connect to host
 lyonelkaufmann.ch: did not receive HSTS header
 lyuba.fr: could not connect to host
 lzahq.tech: did not receive HSTS header
 lzkill.com: did not receive HSTS header
@@ -6283,17 +6304,16 @@ madebyfalcon.co.uk: did not receive HSTS
 madebymagnitude.com: did not receive HSTS header
 madeinorder.com: did not receive HSTS header
 mademoiselle-emma.be: did not receive HSTS header
 mademoiselle-emma.fr: did not receive HSTS header
 maderwin.com: did not receive HSTS header
 madesoftware.com.br: did not receive HSTS header
 mafamane.com: could not connect to host
 mafiareturns.com: max-age too low: 2592000
-magazin3513.com: did not receive HSTS header
 magenx.com: did not receive HSTS header
 magia360.com: did not receive HSTS header
 magneticanvil.com: did not receive HSTS header
 mahamed91.pw: could not connect to host
 mahfouzadedimeji.com: did not receive HSTS header
 maidofhonorcleaning.net: max-age too low: 200
 mail-settings.google.com: did not receive HSTS header (error ignored - included regardless)
 mail.google.com: did not receive HSTS header (error ignored - included regardless)
@@ -6327,17 +6347,16 @@ malwaretips.com: did not receive HSTS he
 malwre.io: could not connect to host
 malya.fr: could not connect to host
 mamaison.io: could not connect to host
 mamaxi.org: did not receive HSTS header
 mammothmail.com: could not connect to host
 mammothmail.net: could not connect to host
 mammothmail.org: could not connect to host
 mammut.space: could not connect to host
-mamout.xyz: did not receive HSTS header
 manaboutahor.se: did not receive HSTS header
 manage.zenpayroll.com: did not receive HSTS header
 manage4all.com: could not connect to host
 manageall.de: could not connect to host
 manageforall.com: could not connect to host
 manageforall.de: could not connect to host
 managemynetsuite.com: did not receive HSTS header
 manantial.mx: did not receive HSTS header
@@ -6349,16 +6368,17 @@ manitasicily.com: did not receive HSTS h
 manningbrothers.com: did not receive HSTS header
 manns-solutions.com: did not receive HSTS header
 manns-solutions.ru: did not receive HSTS header
 mannsolutions.co.uk: did not receive HSTS header
 mansfieldplacevt.com: did not receive HSTS header
 manshop24.com: could not connect to host
 mansion-note.com: did not receive HSTS header
 manududu.com.br: did not receive HSTS header
+manufacturing.gov: did not receive HSTS header
 maomaofuli.vip: could not connect to host
 maosi.xin: did not receive HSTS header
 maple5.com: did not receive HSTS header
 mapresidentielle.fr: could not connect to host
 marabumadrid.com: did not receive HSTS header
 marcelparra.com: could not connect to host
 marchagen.nl: did not receive HSTS header
 marco01809.net: could not connect to host
@@ -6468,16 +6488,17 @@ mcdonalds.ru: did not receive HSTS heade
 mcga.media: could not connect to host
 mclab.su: could not connect to host
 mclist.it: could not connect to host
 mclyr.com: did not receive HSTS header
 mcmillansedationdentistry.com: did not receive HSTS header
 mcooperlaw.com: did not receive HSTS header
 mcuexchange.com: did not receive HSTS header
 mdfnet.se: did not receive HSTS header
+mdkr.nl: did not receive HSTS header
 mdscomp.net: did not receive HSTS header
 meadowfenfarm.com: could not connect to host
 meamod.com: max-age too low: 0
 meat-education.com: could not connect to host
 mebio.us: could not connect to host
 mecenat-cassous.com: did not receive HSTS header
 mechmk1.me: did not receive HSTS header
 medallia.io: could not connect to host
@@ -6599,17 +6620,17 @@ mikeburns.com: could not connect to host
 mikedugan.org: did not receive HSTS header
 mikeg.de: did not receive HSTS header
 mikek.work: did not receive HSTS header
 mikeology.org: could not connect to host
 mikepair.net: could not connect to host
 mikii.club: could not connect to host
 mikk.cz: could not connect to host
 miku.be: could not connect to host
-miku.hatsune.my: max-age too low: 5184000
+miku.hatsune.my: did not receive HSTS header
 mikusinec.com: could not connect to host
 milang.xyz: could not connect to host
 milatrans.pl: did not receive HSTS header
 milcoresonline.com: could not connect to host
 milesgeek.com: did not receive HSTS header
 military-portal.cz: did not receive HSTS header
 militarycarlot.com: did not receive HSTS header
 millenniumweb.com: max-age too low: 86400
@@ -6747,16 +6768,17 @@ moosemanstudios.com: could not connect t
 moov.is: could not connect to host
 moparisthebest.biz: could not connect to host
 moparisthebest.info: could not connect to host
 moparscape.org: did not receive HSTS header
 mopsuite.club: could not connect to host
 mor.cloud: could not connect to host
 mor.gl: could not connect to host
 morethanadream.lv: could not connect to host
+morethandigital.info: did not receive HSTS header
 morganestes.com: max-age too low: 0
 morningcalculation.com: could not connect to host
 morninglory.com: max-age too low: 2592000
 mornings.com: did not receive HSTS header
 morotech.com.br: did not receive HSTS header
 morpheusx.at: could not connect to host
 morpheusxaut.net: could not connect to host
 morpork.xyz: could not connect to host
@@ -6789,17 +6811,17 @@ mredsanders.net: did not receive HSTS he
 mrettich.org: did not receive HSTS header
 mrhee.com: did not receive HSTS header
 mrksk.com: did not receive HSTS header
 mrning.com: did not receive HSTS header
 mrnonz.com: max-age too low: 0
 mrpopat.in: did not receive HSTS header
 mrs-shop.com: did not receive HSTS header
 mrsbairds.com: max-age too low: 86400
-msc-seereisen.net: could not connect to host
+msc-seereisen.net: max-age too low: 0
 mstd.tokyo: did not receive HSTS header
 mstdn-tech.jp: could not connect to host
 mszaki.com: did not receive HSTS header
 mt.me.uk: could not connect to host
 mtamaki.com: could not connect to host
 mtcgf.com: did not receive HSTS header
 mtdn.jp: could not connect to host
 mtg-esport.de: did not receive HSTS header
@@ -6887,16 +6909,17 @@ mytweeps.com: did not receive HSTS heade
 myweb360.de: did not receive HSTS header
 myzone.com: did not receive HSTS header
 n-rickroll-e.pw: could not connect to host
 n0psled.nl: could not connect to host
 n2x.in: could not connect to host
 n4l.pw: could not connect to host
 n8ch.net: could not connect to host
 nabru.co.uk: did not receive HSTS header
+nabu-bad-nauheim.de: did not receive HSTS header
 nabytko.cz: could not connect to host
 nacktetatsachen.at: did not receive HSTS header
 nadia.pt: could not connect to host
 nagios.by: did not receive HSTS header
 nagoya-kyuyo.com: could not connect to host
 naiharngym.com: did not receive HSTS header
 najedlo.sk: could not connect to host
 nakamastreamingcommunity.com: could not connect to host
@@ -6909,16 +6932,17 @@ namacindia.com: did not receive HSTS hea
 namaho.com: could not connect to host
 named.ga: could not connect to host
 nametaken-cloud.duckdns.org: could not connect to host
 namethatbone.com: could not connect to host
 namorico.me: could not connect to host
 nan.ci: did not receive HSTS header
 nan.zone: could not connect to host
 nandex.org: could not connect to host
+nani.io: did not receive HSTS header
 naniki.co.uk: did not receive HSTS header
 nanogeneinc.com: could not connect to host
 nanokamo.com: did not receive HSTS header
 nanrenba.net: could not connect to host
 nansay.cn: could not connect to host
 nanto.eu: could not connect to host
 narodniki.com: did not receive HSTS header
 narviz.com: did not receive HSTS header
@@ -6967,17 +6991,17 @@ neofelhz.space: could not connect to hos
 neonisi.com: could not connect to host
 neonnuke.tech: did not receive HSTS header
 neosolution.ca: did not receive HSTS header
 nepustil.net: did not receive HSTS header
 nerd42.de: could not connect to host
 neris.io: could not connect to host
 nerpa-club.ru: did not receive HSTS header
 nestedquotes.ca: could not connect to host
-net-navi.cc: could not connect to host
+net-navi.cc: did not receive HSTS header
 net4it.de: did not receive HSTS header
 netbox.cc: could not connect to host
 netbrief.ml: did not receive HSTS header
 netherwind.eu: did not receive HSTS header
 netlilo.com: could not connect to host
 netloanusa.com: could not connect to host
 netmagik.com: did not receive HSTS header
 netprofile.com.au: could not connect to host
@@ -7196,17 +7220,17 @@ offshoremarineparts.com: did not receive
 oficinadocelular.com.br: could not connect to host
 ofo2.com: did not receive HSTS header
 oganek.ie: could not connect to host
 oganime.com: could not connect to host
 ogogoshop.com: could not connect to host
 ohling.org: could not connect to host
 ohm2013.org: could not connect to host
 ohsocool.org: could not connect to host
-ohyooo.com: could not connect to host
+ohyooo.com: did not receive HSTS header
 oiepoie.nl: could not connect to host
 oishioffice.com: did not receive HSTS header
 ojls.co: could not connect to host
 okane.love: could not connect to host
 okok-rent.com: could not connect to host
 okok.rent: could not connect to host
 okutama.in.th: could not connect to host
 olafnorge.de: did not receive HSTS header
@@ -7332,18 +7356,18 @@ osp.cx: could not connect to host
 ossan-kobe-gourmet.com: did not receive HSTS header
 ossbinaries.com: could not connect to host
 osteammate.com: could not connect to host
 ostendorf.com: did not receive HSTS header
 osticketawesome.com: did not receive HSTS header
 oswaldmattgroup.com: did not receive HSTS header
 otakuworld.de: could not connect to host
 othercode.nl: could not connect to host
-othermedia.cc: could not connect to host
-otherstuff.nl: could not connect to host
+othermedia.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 119"  data: no]
+otherstuff.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 119"  data: no]
 otichi.com: did not receive HSTS header
 otokonna.com: did not receive HSTS header
 otrsdemo.hu: did not receive HSTS header
 ottospora.nl: could not connect to host
 ourbank.com: did not receive HSTS header
 outdooradventures.pro: did not receive HSTS header
 outdoorproducts.com: did not receive HSTS header
 outreachbuddy.com: could not connect to host
@@ -7409,16 +7433,17 @@ papalytics.com: could not connect to hos
 papeda.net: could not connect to host
 papelariadante.com.br: could not connect to host
 papercard.co.uk: did not receive HSTS header
 papercrunch.io: could not connect to host
 paperwallets.io: did not receive HSTS header
 papierniak.net: could not connect to host
 papygeek.com: could not connect to host
 parabhairavayoga.com: max-age too low: 0
+paragon.com.sg: did not receive HSTS header
 parent5446.us: could not connect to host
 parentmail.co.uk: did not receive HSTS header
 parfum-baza.ru: could not connect to host
 paris-cyber.fr: did not receive HSTS header
 parisvox.info: did not receive HSTS header
 parithy.net: could not connect to host
 parkingplus.co.il: could not connect to host
 parkrocker.com: max-age too low: 604800
@@ -7506,17 +7531,17 @@ pepsicoemployeepreferencesurvey.com: did
 perdel.cn: did not receive HSTS header
 perfect-radiant-wrinkles.com: could not connect to host
 perfectionis.me: could not connect to host
 perfectseourl.com: did not receive HSTS header
 performaterm.ro: could not connect to host
 performous.org: could not connect to host
 perfumista.vn: did not receive HSTS header
 periscopeliveweb.com: could not connect to host
-perlwork.nl: could not connect to host
+perlwork.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 119"  data: no]
 pernatie.ru: could not connect to host
 perplex.nl: did not receive HSTS header
 perroud.pro: did not receive HSTS header
 personalcommunicationsecurity.com: could not connect to host
 personaldatabasen.no: could not connect to host
 personalinjurylist.com: did not receive HSTS header
 personalizedtouch.co: could not connect to host
 perthdevicelab.com: did not receive HSTS header
@@ -7654,16 +7679,17 @@ pocketsix.com: could not connect to host
 pocloud.homelinux.net: could not connect to host
 podiumsdiskussion.org: did not receive HSTS header
 poiema.com.sg: did not receive HSTS header
 poinsot.beer: could not connect to host
 pointeringles.com: could not connect to host
 pointpro.de: did not receive HSTS header
 pokeduel.me: did not receive HSTS header
 pokomichi.com: did not receive HSTS header
+pol-expo.ru: did not receive HSTS header
 pol.in.th: could not connect to host
 polarityschule.com: did not receive HSTS header
 pole.net.nz: could not connect to host
 polen.guide: could not connect to host
 poles4pilots.com: did not receive HSTS header
 policeiwitness.sg: could not connect to host
 polimat.org: could not connect to host
 politically-incorrect.xyz: could not connect to host
@@ -7679,28 +7705,29 @@ pontualcomp.com: could not connect to ho
 pony.today: could not connect to host
 ponythread.com: did not receive HSTS header
 poolsandstuff.com: did not receive HSTS header
 poon.tech: could not connect to host
 popi.se: did not receive HSTS header
 popkins.ml: could not connect to host
 poris.web.id: could not connect to host
 porno-gif.ru: did not receive HSTS header
-pornstars.me: could not connect to host
+pornstars.me: did not receive HSTS header
 portalm.tk: could not connect to host
 portalplatform.net: could not connect to host
 portaluniversalista.org: could not connect to host
 portalzine.de: did not receive HSTS header
 poshpak.com: max-age too low: 86400
 postcodewise.co.uk: did not receive HSTS header
 posterspy.com: did not receive HSTS header
 postscheduler.org: could not connect to host
 posylka.de: did not receive HSTS header
 potatoheads.net: could not connect to host
 potsky.com: did not receive HSTS header
+pouet.it: did not receive HSTS header
 pourmesloisirs.com: did not receive HSTS header
 poussinooz.fr: could not connect to host
 povitria.net: could not connect to host
 power-l.ch: did not receive HSTS header
 power-of-interest.com: did not receive HSTS header
 power99press.com: did not receive HSTS header
 poweroff.win: could not connect to host
 powerplannerapp.com: could not connect to host
@@ -7789,16 +7816,17 @@ proximato.com: could not connect to host
 proxybay.al: could not connect to host
 proxybay.club: could not connect to host
 proxybay.info: did not receive HSTS header
 proxybay.top: did not receive HSTS header
 proxydesk.net: could not connect to host
 proxyowl.pw: could not connect to host
 proxyrox.com: could not connect to host
 proxyweb.us: did not receive HSTS header
+prstatic.com: did not receive HSTS header
 prxio.date: could not connect to host
 prxio.site: could not connect to host
 pscleaningsolutions.co.uk: could not connect to host
 pshostpk.com: did not receive HSTS header
 psicologia.co.ve: could not connect to host
 pstudio.me: did not receive HSTS header
 psw.academy: could not connect to host
 psw.consulting: could not connect to host
@@ -7842,16 +7870,17 @@ pzme.me: could not connect to host
 q-rickroll-u.pw: could not connect to host
 q2.si: did not receive HSTS header
 q8mp3.me: did not receive HSTS header
 qbik.de: did not receive HSTS header
 qbnt.ca: could not connect to host
 qccqld.org.au: could not connect to host
 qiannews.net: could not connect to host
 qiliang.wang: did not receive HSTS header
+qimiao.io: did not receive HSTS header
 qingxuan.info: could not connect to host
 qinxi1992.com: could not connect to host
 qionglu.pw: did not receive HSTS header
 qipp.com: did not receive HSTS header
 qirinus.com: could not connect to host
 qixxit.de: did not receive HSTS header
 qldconservation.org: could not connect to host
 qonqa.de: did not receive HSTS header
@@ -8194,17 +8223,17 @@ ruqu.nl: could not connect to host
 rusadmin.biz: did not receive HSTS header
 ruska-modra.cz: did not receive HSTS header
 ruskamodra.cz: did not receive HSTS header
 rusl.me: could not connect to host
 russmarshall.com: could not connect to host
 rustfanatic.com: did not receive HSTS header
 ruxit.com: did not receive HSTS header
 rw-solutions.tech: could not connect to host
-rww.name: max-age too low: 0
+rww.name: could not connect to host
 rxprep.com: did not receive HSTS header
 rxt.social: could not connect to host
 rxv.cc: could not connect to host
 ryansmithphotography.com: did not receive HSTS header
 ryanteck.uk: did not receive HSTS header
 rylin.net: did not receive HSTS header
 ryssland.guide: could not connect to host
 s-d-v.ch: could not connect to host
@@ -8364,17 +8393,17 @@ secondary-survivor.net: could not connec
 secondarysurvivor.help: could not connect to host
 secondarysurvivorportal.com: could not connect to host
 secondarysurvivorportal.help: could not connect to host
 secondbyte.nl: could not connect to host
 secondpay.nl: could not connect to host
 secondspace.ca: could not connect to host
 secretnation.net: did not receive HSTS header
 sectia22.ro: did not receive HSTS header
-sectun.com: could not connect to host
+sectun.com: did not receive HSTS header
 secur3.us: did not receive HSTS header
 secure-games.us: could not connect to host
 secure.link: did not receive HSTS header
 securechat4.me: could not connect to host
 securedevelop.net: could not connect to host
 securefuture.nl: did not receive HSTS header
 secureradio.net: could not connect to host
 securesuisse.ch: could not connect to host
@@ -8538,16 +8567,17 @@ sianimacion.com: could not connect to ho
 sichere-kartenakzeptanz.de: could not connect to host
 siciliadigitale.pro: could not connect to host
 siddhant.me: max-age too low: 0
 sifls.com: could not connect to host
 sifreuret.com: could not connect to host
 signoracle.com: could not connect to host
 sijimi.cn: could not connect to host
 sikayetvar.com: did not receive HSTS header
+silaslova-ekb.ru: did not receive HSTS header
 silent.live: could not connect to host
 silentcircle.com: did not receive HSTS header
 silentcircle.org: could not connect to host
 silentlink.io: could not connect to host
 silicagelpackets.ca: did not receive HSTS header
 silver-drachenkrieger.de: did not receive HSTS header
 silverhome.ninja: could not connect to host
 silverpvp.com: could not connect to host
@@ -8618,17 +8648,17 @@ skyveo.ml: did not receive HSTS header
 skyway.capital: did not receive HSTS header
 slanterns.net: could not connect to host
 slash-dev.de: did not receive HSTS header
 slashand.co: could not connect to host
 slashdesign.it: did not receive HSTS header
 slashem.me: did not receive HSTS header
 slattery.co: could not connect to host
 slauber.de: did not receive HSTS header
-sleeklounge.com: could not connect to host
+sleeklounge.com: did not receive HSTS header
 sleep10.com: could not connect to host
 sleepstar.com.mt: did not receive HSTS header
 slicketl.com: did not receive HSTS header
 slightfuture.click: could not connect to host
 slightfuture.com: did not receive HSTS header
 slix.io: could not connect to host
 slope.haus: could not connect to host
 slopeedge.com: did not receive HSTS header
@@ -8719,17 +8749,16 @@ sorensen-online.com: could not connect t
 sosaka.ml: could not connect to host
 sosiolog.com: did not receive HSTS header
 sotor.de: did not receive HSTS header
 soucorneteiro.com.br: could not connect to host
 soulfulglamour.uk: could not connect to host
 soundforsound.co.uk: did not receive HSTS header
 sourcelair.com: did not receive HSTS header
 sourcitec.com: did not receive HSTS header
-southcoastkitesurf.co.uk: did not receive HSTS header
 southcoastswords.com: did not receive HSTS header
 southernjamusa.com: did not receive HSTS header
 southgale.condos: could not connect to host
 southside-crew.club: could not connect to host
 southworcestershiregpservices.co.uk: could not connect to host
 souvik.me: did not receive HSTS header
 souyar.de: could not connect to host
 souyar.net: could not connect to host
@@ -8874,39 +8903,39 @@ stmbgr.com: could not connect to host
 stn.me.uk: did not receive HSTS header
 stockseyeserum.com: could not connect to host
 stocktrade.de: could not connect to host
 stoffe-monster.de: did not receive HSTS header
 stoick.me: could not connect to host
 stole-my.bike: could not connect to host
 stole-my.tv: could not connect to host
 stonecutterscommunity.com: could not connect to host
+stopbreakupnow.org: did not receive HSTS header
 stopwoodfin.org: could not connect to host
 storbritannien.guide: could not connect to host
 storecove.com: did not receive HSTS header
 storeden.com: did not receive HSTS header
 storefrontify.com: did not receive HSTS header
-storiesofhealth.org: could not connect to host
+storiesofhealth.org: did not receive HSTS header
 storillo.com: did not receive HSTS header
 stormhub.org: could not connect to host
 stormyyd.com: did not receive HSTS header
 stqry.com: did not receive HSTS header
 str0.at: did not receive HSTS header
 strasweb.fr: did not receive HSTS header
 strbt.de: could not connect to host
 strchr.com: did not receive HSTS header
 stream.pub: could not connect to host
 streamingmagazin.de: could not connect to host
 strictlysudo.com: could not connect to host
 strife.tk: could not connect to host
 strila.me: could not connect to host
 strivephysmed.com: did not receive HSTS header
 stroeercrm.de: could not connect to host
 strongest-privacy.com: could not connect to host
-strozik.de: did not receive HSTS header
 stuartbaxter.co: could not connect to host
 student-scientist.org: did not receive HSTS header
 studentrdh.com: did not receive HSTS header
 studentresearcher.org: did not receive HSTS header
 studentshare.net: max-age too low: 0
 studentskydenik.cz: could not connect to host
 studenttravel.cz: did not receive HSTS header
 studinf.xyz: could not connect to host
@@ -9039,16 +9068,17 @@ talheim-records.ca: could not connect to
 talk.google.com: did not receive HSTS header (error ignored - included regardless)
 talkitup.mx: could not connect to host
 talkitup.online: did not receive HSTS header
 talklifestyle.nl: could not connect to host
 tallr.se: could not connect to host
 tallshoe.com: could not connect to host
 tamex.xyz: could not connect to host
 tandarts-haarlem.nl: did not receive HSTS header
+tandem-trade.ru: did not receive HSTS header
 tangel.me: could not connect to host
 tangibilizing.com: could not connect to host
 taniesianie.pl: did not receive HSTS header
 tankfreunde.de: did not receive HSTS header
 tante-bugil.net: could not connect to host
 tantotiempo.de: did not receive HSTS header
 tanze-jetzt.de: could not connect to host
 taotuba.net: did not receive HSTS header
@@ -9335,16 +9365,17 @@ timotrans.de: did not receive HSTS heade
 timotrans.eu: did not receive HSTS header
 timowi.de: could not connect to host
 timowi.net: could not connect to host
 timschubert.net: max-age too low: 172800
 timvandekamp.nl: did not receive HSTS header
 timwittenberg.com: could not connect to host
 tinchbear.xyz: could not connect to host
 tindewen.net: could not connect to host
+tintenprofi.de: max-age too low: 6307200
 tipsyk.ru: could not connect to host
 tiredofeating.com: could not connect to host
 tiremoni.ch: did not receive HSTS header
 tirex.media: did not receive HSTS header
 titanlab.de: could not connect to host
 titanleaf.com: could not connect to host
 titouan.co: did not receive HSTS header
 tittarpuls.se: could not connect to host
@@ -9685,17 +9716,16 @@ upldr.pw: could not connect to host
 uporoops.com: could not connect to host
 uprotect.it: could not connect to host
 upstats.eu: could not connect to host
 uptic.net: did not receive HSTS header
 ur-lauber.de: did not receive HSTS header
 urandom.eu.org: did not receive HSTS header
 urban-garden.lt: could not connect to host
 urban-garden.lv: could not connect to host
-urbanstylestaging.com: did not receive HSTS header
 urbpic.com: could not connect to host
 url0.eu: did not receive HSTS header
 urlchomp.com: did not receive HSTS header
 urphp.com: could not connect to host
 us-immigration.com: did not receive HSTS header
 usaab.org: did not receive HSTS header
 usbirthcertificate.com: could not connect to host
 usbtypeccompliant.com: could not connect to host
@@ -9921,16 +9951,17 @@ vrijstaandhuis-in-zuidplas-kopen.nl: cou
 vrijstaandhuis-in-zwartewaterland-kopen.nl: could not connect to host
 vrijstaandhuisverkopen.nl: could not connect to host
 vrobert.fr: could not connect to host
 vsc-don-stocksport.de: did not receive HSTS header
 vsestiralnie.com: did not receive HSTS header
 vvl.me: did not receive HSTS header
 vxml.club: could not connect to host
 vxstream-sandbox.com: did not receive HSTS header
+vybeministry.org: did not receive HSTS header
 vyncke.org: max-age too low: 2678400
 vyvybean.cf: could not connect to host
 vyvygen.com: did not receive HSTS header
 vzk.io: could not connect to host
 w2gshop.com.br: could not connect to host
 w4a.fr: could not connect to host
 w4xzr.top: could not connect to host
 w4xzr.xyz: could not connect to host
@@ -9965,16 +9996,17 @@ warrencreative.com: did not receive HSTS
 warsentech.com: could not connect to host
 warsh.moe: could not connect to host
 warumsuchen.at: max-age too low: 0
 watchium.com: did not receive HSTS header
 waterforlife.net.au: did not receive HSTS header
 waterpoint.com.br: could not connect to host
 watersportmarkt.net: did not receive HSTS header
 watsonhall.uk: could not connect to host
+wattechweb.com: did not receive HSTS header
 wave.is: could not connect to host
 wavefloatrooms.com: did not receive HSTS header
 wavefrontsystemstech.com: could not connect to host
 wear2work.nl: did not receive HSTS header
 weaverhairextensions.nl: could not connect to host
 web-industry.fr: could not connect to host
 web-insider.net: could not connect to host
 web-vision.de: did not receive HSTS header
@@ -10018,17 +10050,17 @@ webwork.pw: could not connect to host
 webypass.xyz: could not connect to host
 wecanfindit.co.za: could not connect to host
 weddingenvelopes.co.uk: did not receive HSTS header
 weddingibiza.nl: could not connect to host
 weekly.fyi: could not connect to host
 wegenaer.nl: could not connect to host
 weiyuz.com: max-age too low: 6585555
 welkers.org: could not connect to host
-wellastore.ru: did not receive HSTS header
+wellastore.ru: could not connect to host
 wellcomp.com.br: did not receive HSTS header
 wellies.com.au: max-age too low: 7889238
 wellness.so: could not connect to host
 wellproducedwines.com: did not receive HSTS header
 welpy.com: could not connect to host
 weltentreff.com: could not connect to host
 weltmeisterschaft.net: could not connect to host
 weme.eu: could not connect to host
@@ -10097,17 +10129,17 @@ winfield.me.uk: did not receive HSTS hea
 winged.io: could not connect to host
 wingos.net: could not connect to host
 wingumd.net: could not connect to host
 winpack.cf: could not connect to host
 winpack.eu.org: could not connect to host
 winsec.nl: could not connect to host
 winshiplending.com: did not receive HSTS header
 wintercircle.co: did not receive HSTS header
-wipc.net: did not receive HSTS header
+wipc.net: could not connect to host
 wipply.com: did not receive HSTS header
 wirc.gr: could not connect to host
 wiseloan.com: did not receive HSTS header
 wishcert.com: could not connect to host
 wispapp.com: did not receive HSTS header
 withgoogle.com: did not receive HSTS header (error ignored - included regardless)
 withmy.beer: could not connect to host
 withustrading.com: could not connect to host
@@ -10189,17 +10221,17 @@ www-1117.com: could not connect to host
 www-39988.com: did not receive HSTS header
 www-507.net: could not connect to host
 www-746.com: could not connect to host
 www-771122.com: did not receive HSTS header
 www-8003.com: did not receive HSTS header
 www-88599.com: did not receive HSTS header
 www-9995.com: did not receive HSTS header
 www-djbet.com: did not receive HSTS header
-www-jinshavip.com: could not connect to host
+www-jinshavip.com: did not receive HSTS header
 www.cueup.com: could not connect to host
 www.cyveillance.com: did not receive HSTS header
 www.developer.mydigipass.com: could not connect to host
 www.elanex.biz: did not receive HSTS header
 www.gamesdepartment.co.uk: did not receive HSTS header
 www.gmail.com: did not receive HSTS header (error ignored - included regardless)
 www.googlemail.com: did not receive HSTS header (error ignored - included regardless)
 www.gpo.gov: did not receive HSTS header
--- a/security/manager/ssl/nsSTSPreloadList.inc
+++ b/security/manager/ssl/nsSTSPreloadList.inc
@@ -3,17 +3,17 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /*****************************************************************************/
 /* This is an automatically generated file. If you're not                    */
 /* nsSiteSecurityService.cpp, you shouldn't be #including it.     */
 /*****************************************************************************/
 
 #include <stdint.h>
-const PRTime gPreloadListExpirationTime = INT64_C(1526151954713000);
+const PRTime gPreloadListExpirationTime = INT64_C(1526238015543000);
 %%
 0-1.party, 1
 0.me.uk, 1
 0005pay.com, 1
 0010100.net, 1
 00220022.net, 1
 007-preisvergleich.de, 1
 00881919.com, 1
@@ -798,17 +798,16 @@ adapt.de, 1
 adapti.de, 1
 adaptivemechanics.edu.au, 1
 adawolfa.cz, 1
 adayinthelifeof.nl, 1
 adblock.ovh, 1
 adblockextreme.com, 1
 adblockextreme.net, 1
 adblockextreme.org, 1
-addcrazy.com, 1
 addeekt.com, 1
 adderall.space, 1
 addicional.com, 1
 addictively.com, 1
 addiko.net, 1
 addones.net, 1
 addstar.jp, 0
 addtoany.com, 1
@@ -998,17 +997,16 @@ afva.net, 1
 ag-websolutions.de, 1
 agalliasis.ch, 1
 agamsecurity.ch, 1
 agate.pw, 1
 agdalieso.com.ba, 1
 ageg.ca, 1
 agenciadeempregosdourados.com.br, 1
 agenciafiscal.pe, 1
-agenciagriff.com, 1
 agencymanager.be, 1
 agenda-loto.net, 0
 agenda21senden.de, 1
 agent-grow.com, 1
 agent6.com.au, 1
 agentprocessing.com, 1
 agfmedia.com, 1
 agglo-sion.ch, 1
@@ -2408,17 +2406,16 @@ atomism.com, 1
 atorcidabrasileira.com.br, 1
 atplonline.co, 1
 atracaosexshop.com.br, 1
 atraining.ru, 1
 atraverscugy.ch, 1
 atrevillot.com, 1
 atrinik.org, 1
 atte.fi, 1
-attendantdesign.com, 1
 attilagyorffy.com, 1
 attilavandervelde.nl, 1
 attitudes-bureaux.fr, 1
 attogtech.com, 1
 attorney.org.il, 1
 attwood.org, 1
 atulhost.com, 1
 atviras.lt, 0
@@ -2457,16 +2454,17 @@ augenblicke-blog.de, 1
 augiero.it, 1
 augmentable.de, 1
 august.black, 1
 augustian-life.cz, 1
 augustiner-kantorei-erfurt.de, 1
 augustiner-kantorei.de, 1
 aukaraoke.su, 1
 aulaschrank.gq, 1
+aulo.in, 0
 aunali1.com, 1
 auntie-eileens.com.au, 1
 auplidespages.fr, 1
 aur.rocks, 1
 aureus.pw, 1
 auri.ga, 1
 auricblue.com, 1
 auriko-games.de, 1
@@ -2572,34 +2570,31 @@ averam.net, 1
 averen.co.uk, 1
 avg.club, 1
 avi9526.pp.ua, 1
 aviationstrategy.aero, 1
 avid.blue, 1
 avidcruiser.com, 1
 aviv.nyc, 1
 avmemo.com, 1
-avmo.pw, 1
 avmoo.com, 1
 avnet.ws, 1
 avocode.com, 1
 avonlearningcampus.com, 1
 avotoma.com, 1
 avova.de, 1
 avpres.net, 1
-avso.pw, 1
 avsox.com, 1
 avspot.net, 1
 avticket.ru, 0
 avtoforex.ru, 1
 avtogara-isperih.com, 1
 avtosept.by, 1
 avtovokzaly.ru, 1
 avvcorda.com, 1
-avxo.pw, 1
 awan.tech, 1
 awaremi-tai.com, 1
 awaro.net, 0
 awbouncycastlehire.com, 1
 awccanadianpharmacy.com, 0
 awei.pub, 1
 awen.me, 1
 awesomebouncycastles.co.uk, 1
@@ -3072,16 +3067,17 @@ beeswax-orgone.com, 1
 beetgroup.id, 1
 beethoveninlove.com, 1
 beetman.net, 1
 beeutifulparties.co.uk, 1
 beexfit.com, 1
 beezkneezcastles.co.uk, 1
 beeznest.com, 1
 befoodsafe.gov, 1
+beforesunrise.de, 1
 beframed.ch, 1
 befundonline.de, 1
 begabungsfoerderung.info, 1
 begbie.com, 1
 beginner.nl, 1
 behamzdarma.cz, 1
 behoerden-online-dienste.de, 1
 beichtgenerator.de, 0
@@ -3591,17 +3587,16 @@ bitmaincare.com.ua, 1
 bitmaincare.ru, 1
 bitmainwarranty.com, 1
 bitmainwarranty.com.ua, 1
 bitmainwarranty.ru, 1
 bitmessage.ch, 1
 bitmex.com, 1
 bitminter.com, 1
 bitmoe.com, 1
-bitmon.net, 1
 bitok.com, 1
 bitplay.space, 1
 bitpod.de, 1
 bitpoll.de, 1
 bitpoll.org, 1
 bitpumpe.net, 1
 bitref.com, 1
 bitroll.com, 1
@@ -4440,28 +4435,26 @@ bsw-solution.de, 1
 bt123.xyz, 1
 bta.lv, 0
 btc2secure.com, 1
 btcarmory.com, 1
 btcgo.nl, 1
 btcontract.com, 1
 btcpop.co, 1
 btcycle.org, 1
-btio.pw, 1
 btku.org, 1
 btnissanparts.com, 1
 btorrent.xyz, 1
 btrb.ml, 1
 btserv.de, 1
 btsoft.eu, 1
 btsow.com, 1
 btth.pl, 1
 btth.tv, 1
 btth.xyz, 1
-btxiaobai.com, 1
 bubba.cc, 1
 bubblegumblog.com, 1
 bubblespetspa.com, 1
 bubblinghottubs.co.uk, 1
 bubblybouncers.co.uk, 1
 bubhub.io, 1
 buch-angucken.de, 1
 buck.com, 1
@@ -4684,17 +4677,16 @@ c-rtx.com, 1
 c-shock.org, 1
 c-webdesign.net, 1
 c-world.co.uk, 1
 c.cc, 1
 c16t.uk, 1
 c2design.it, 1
 c2o-library.net, 1
 c2o2.xyz, 1
-c3ie.com, 1
 c3vo.de, 1
 c3w.at, 1
 c4.hk, 1
 c4539.com, 1
 c4k3.net, 1
 c7dn.com, 1
 ca-key.de, 1
 ca-terminal-multiservices.fr, 1
@@ -4736,17 +4728,17 @@ cafesg.net, 1
 caffeinatedcode.com, 1
 cainhosting.com, 0
 caipai.fm, 1
 cairnterrier.com.br, 1
 cais.de, 1
 caitcs.com, 1
 caizx.com, 0
 caja-pdf.es, 1
-cajio.ru, 0
+cajio.ru, 1
 cajunuk.co.uk, 1
 cake-time.co.uk, 1
 cakestart.net, 1
 caketoindia.com, 1
 cakingandbaking.com, 1
 cal.goip.de, 1
 cal9000.com, 1
 calaad.net, 1
@@ -5536,17 +5528,16 @@ chocolatesandhealth.com, 1
 chocolatier-tristan.ch, 1
 chocotough.nl, 0
 chocoweb.net, 1
 chodocu.com, 1
 choe.fi, 1
 choisirmonerp.com, 1
 chokladfantasi.net, 1
 chon.io, 1
-chonghe.org, 1
 chook.as, 1
 choosemypc.net, 1
 chopperforums.com, 1
 chorkley.co.uk, 1
 chorkley.com, 1
 chorkley.me, 1
 chorkley.uk, 1
 chorleiterverband.de, 1
@@ -5628,16 +5619,17 @@ chronoproject.com, 1
 chronoshop.cz, 1
 chrpaul.de, 1
 chrstn.eu, 1
 chsh.moe, 1
 chsterz.de, 1
 chua.family, 1
 chuchote-moi.fr, 1
 chuck.ovh, 1
+chuckame.fr, 1
 chun.pro, 1
 chunche.net, 1
 chunk.science, 1
 chupadelfrasco.com, 1
 churchlinkpro.com, 1
 churchthemes.com, 1
 churchwebcanada.ca, 1
 churchwebsupport.com, 1
@@ -5677,17 +5669,16 @@ ciner.is, 1
 cinerama.com.br, 1
 cinnabon.com, 1
 cinq-elements.com, 1
 cinq-elements.fr, 1
 cinq-elements.net, 1
 cinsects.de, 1
 cinteo.com, 1
 cinto.cc, 1
-cio.gov, 1
 cioscloud.com, 1
 cip.md, 1
 cipartyhire.co.uk, 1
 cipher.co.th, 1
 cipher.land, 1
 cipherboy.com, 1
 cipherli.st, 1
 ciphersuite.info, 1
@@ -5703,26 +5694,25 @@ cirfi.com, 1
 ciri.com.co, 1
 cirope.com, 1
 cirrohost.com, 1
 cirrus0.de, 1
 cirugiasplasticas.com.mx, 1
 cirujanooral.com, 1
 cirurgicagervasio.com.br, 1
 cirurgicalucena.com.br, 1
-ciscodude.net, 0
+ciscodude.net, 1
 cisoaid.com, 1
 ciss.ltd, 1
 cisy.me, 1
 citationgurus.com, 1
 citcuit.in, 1
 citimarinestore.com, 1
 citizen-cam.de, 1
 citizensbankal.com, 1
-citizenscience.gov, 1
 citizensleague.org, 1
 citizenspact.eu, 1
 citizing.org, 1
 citra-emu.org, 1
 citrusui.me, 1
 cittadesign.com, 0
 citton.com.br, 1
 citya.com, 1
@@ -6464,16 +6454,17 @@ corytyburski.com, 1
 corzntin.fr, 1
 cosirex.com, 1
 coslinker.com, 1
 cosmeticappraisal.com, 1
 cosmeticasimple.com, 1
 cosmeticos-naturales.com, 1
 cosmeticosdelivery.com.br, 1
 cosmeticosnet.com.br, 1
+cosmiatria.pe, 1
 cosmodacollection.com, 1
 cosmofunnel.com, 1
 cosmoluziluminacion.com, 1
 cosmundi.de, 1
 cosni.co, 1
 cosplayer.com, 1
 cospol.ch, 1
 costa-rica-reisen.ch, 1
@@ -7351,16 +7342,17 @@ dckd.nl, 1
 dclaisse.fr, 1
 dcmt.co, 1
 dcrdev.com, 1
 dd.art.pl, 1
 ddel.de, 1
 dden.ca, 0
 dden.website, 1
 dden.xyz, 1
+ddepot.us, 1
 ddfreedish.site, 0
 ddhosted.com, 1
 ddmeportal.com, 1
 ddns-anbieter.de, 1
 ddocu.me, 1
 ddos-mitigation.co.uk, 1
 ddos-mitigation.info, 1
 ddracepro.net, 1
@@ -7818,16 +7810,17 @@ dicionario.org, 1
 dicionariodegirias.com.br, 1
 dicionariodelatim.com.br, 1
 dicionariodenomesproprios.com.br, 1
 dicionariodesimbolos.com.br, 1
 dicionarioetimologico.com.br, 1
 dick.red, 1
 dickieslife.com, 1
 dickpics.ru, 1
+dicoding.com, 1
 didacte.com, 1
 didche.net, 1
 diddens.de, 1
 didierlaumen.be, 1
 didikhari.web.id, 1
 die-besten-weisheiten.de, 1
 die-blahuts.de, 1
 die-borts.ch, 1
@@ -8123,20 +8116,22 @@ dn42.us, 1
 dna.li, 1
 dnc.org.nz, 1
 dndtools.net, 1
 dne.lu, 1
 dnfc.rocks, 1
 dnmaze.com, 1
 dnmlab.it, 1
 dnplegal.com, 1
+dns-control.eu, 1
 dns-manager.info, 1
 dns.google.com, 1
 dns8.online, 1
 dnsbird.org, 1
+dnscrypt.org, 1
 dnscurve.io, 1
 dnshallinta.fi, 1
 dnslog.com, 1
 dnsman.se, 1
 dnstwister.report, 1
 do-it.cz, 1
 do-prod.com, 1
 do.gd, 1
@@ -8546,16 +8541,17 @@ dtg-fonds.net, 1
 dtk-vom-chausseehaus.de, 1
 dtnx.eu, 1
 dtnx.net, 1
 dtnx.org, 1
 dtp-mstdn.jp, 1
 dtuaarsfest.dk, 1
 dtx.sk, 1
 dualascent.com, 1
+dualias.xyz, 0
 duan.li, 1
 dubaieveningsafari.com, 1
 dublin-traceroute.net, 1
 dubrovnik-dental.clinic, 1
 dubrovskiy.net, 1
 dubrovskiy.pro, 1
 ducalendars.com, 1
 duch.cloud, 1
@@ -9338,17 +9334,16 @@ enijew.com, 1
 enixgaming.com, 1
 enjoyphoneblog.it, 1
 enjoystudio.ro, 1
 enlatte.com, 1
 enlazaresbueno.cl, 1
 enlighten10x.ga, 1
 enlightened.si, 1
 enlightenedhr.com, 1
-enlightenment.org, 1
 enloestatebank.com, 1
 ennea-mediation.fr, 1
 enness.co.uk, 1
 ennori.jp, 1
 enoou.com, 1
 enorekcah.com, 1
 enot32.ru, 1
 enotecastore.it, 1
@@ -9381,17 +9376,16 @@ entropia.de, 0
 entryboss.cc, 1
 entrypoint.sh, 1
 enuchi.jp, 1
 envant.co.uk, 1
 envelope.co.nz, 1
 enveloppenopmaat.nl, 1
 envescent.com, 1
 enviam.de, 1
-enviaya.com.mx, 1
 environment.ai, 1
 environmentkirklees.org, 1
 enviroprobasements.com, 1
 envoyglobal.com, 1
 envygeeks.io, 1
 eocservices.co.uk, 1
 eoitek.com, 1
 eolme.ml, 1
@@ -9942,17 +9936,17 @@ extrapagetab.com, 1
 extratorrent.cool, 1
 extratorrent.fyi, 1
 extratorrent.red, 1
 extratorrent.world, 1
 extreme-gaming.de, 1
 extreme-gaming.us, 1
 extreme-players.com, 1
 extreme-players.de, 1
-extrememanual.net, 0
+extrememanual.net, 1
 exvs.org, 1
 eydesignguidelines.com, 1
 eyecandy.gr, 1
 eyeglasses.com, 0
 eyelashconcept.com, 1
 eyeonid.com, 1
 eyep.me, 1
 eyes-berg.ch, 1
@@ -10231,16 +10225,17 @@ feastr-dev.de, 1
 feastr.de, 1
 feastr.io, 1
 featherweightlabs.com, 1
 featuredmen.com, 1
 fecik.sk, 1
 fed51.com, 1
 federalinvestments.gov, 1
 federaljobs.gov, 1
+federalreserve.gov, 1
 federicomigliavacca.it, 1
 fedinvest.gov, 1
 fedjobs.gov, 1
 fedn.it, 1
 fedorahosted.org, 1
 fedoramagazine.org, 1
 fedorapeople.org, 1
 fedramp.gov, 1
@@ -10538,16 +10533,17 @@ fixeaider.com, 1
 fixel.express, 1
 fixforce.nl, 1
 fixhotsauce.com, 1
 fixmyalarmpanel.co.uk, 1
 fixmycomputerdude.com, 1
 fixmyglitch.com, 1
 fixthetimeline.com, 1
 fixthetimeline.org, 1
+fixvoltage.ru, 1
 fizz.buzz, 0
 fj.search.yahoo.com, 0
 fj.simple.com, 0
 fjharcu.com, 1
 fjugstad.com, 1
 fkcdn.de, 1
 fkfev.de, 1
 fktpm.ru, 1
@@ -10807,17 +10803,16 @@ forrestheller.com, 1
 forro.info, 1
 forsakringsarkivet.se, 1
 forschbach-janssen.de, 1
 forsec.nl, 1
 forstbetrieb-hennecke.de, 1
 forstprodukte.de, 1
 forsyththeatre.com, 1
 forteggz.nl, 1
-fortesanshop.it, 1
 fortnine.ca, 1
 fortran.io, 1
 fortress.no, 1
 fortress.sk, 1
 fortricks.in, 1
 fortuna-loessnitz.de, 1
 fortuna-s.com, 1
 fortworth.ch, 1
@@ -10874,17 +10869,16 @@ foxes.no, 1
 foxhound.com.br, 1
 foxing.club, 1
 foxmay.co.uk, 1
 foxontheinter.net, 1
 foxphotography.ch, 1
 foxquill.com, 1
 foxterrier.com.br, 1
 foxyslut.com, 1
-fpc.gov, 1
 fpersona.com, 1
 fpki.sh, 1
 fptravelling.com, 1
 fpy.cz, 1
 fr.search.yahoo.com, 0
 fr0zenbits.io, 1
 fr33tux.org, 1
 frack.nl, 1
@@ -11656,17 +11650,16 @@ gernert-server.de, 1
 gero.io, 1
 gerritcodereview.com, 1
 gers-authentique.com, 1
 gerum.dynv6.net, 1
 gerwinvanderkamp.nl, 1
 ges-bo.de, 1
 geschenkly.de, 1
 geschmacksache.online, 1
-geschmackspiloten.de, 1
 geschwinder.net, 1
 gestormensajeria.com, 1
 get-asterisk.ru, 1
 get-erp.ru, 1
 get-it-live.com, 1
 get-it-live.de, 1
 get-link.info, 1
 get-on.bid, 1
@@ -11838,16 +11831,17 @@ girsa.org, 1
 girvas.ru, 1
 gisgov.be, 1
 gistr.io, 1
 git.co, 1
 git.market, 1
 gitep.org.uk, 1
 gitesdeshautescourennes.com, 1
 github.com, 1
+github.party, 0
 gitla.in, 1
 gitstuff.tk, 1
 gittigidiyor.com, 1
 gittr.ch, 1
 giunchi.net, 1
 giuseppemacario.men, 1
 givastar.com, 1
 giveattheoffice.org, 0
@@ -11886,17 +11880,16 @@ glazedmag.fr, 1
 glcastlekings.co.uk, 1
 gleanview.com, 1
 glencarbide.com, 1
 glendarraghbouncycastles.co.uk, 1
 glenhuntlyapartments.com.au, 1
 glidingshop.cz, 1
 glidingshop.de, 1
 glidingshop.eu, 1
-glittersjabloon.nl, 1
 glloq.org, 1
 glob-coin.com, 1
 global-lights.ma, 1
 global-office.com, 1
 global-village.koeln, 1
 global.hr, 1
 globalchokepoints.org, 1
 globalcomix.com, 1
@@ -12956,16 +12949,17 @@ henry.gg, 1
 henryphan.com, 0
 hentai.design, 1
 hentaimaster.net, 1
 hentschke-bau.de, 1
 hentschke-betonfertigteilwerk.de, 1
 hentschke-invest.de, 1
 heppler.net, 1
 heptafrogs.de, 1
+hepteract.us, 1
 heptner24.de, 1
 her25.com, 1
 herbal-id.com, 1
 herbandpat.org, 1
 herberichfamily.com, 1
 herbert.io, 1
 herbweb.net, 1
 herbweb.org, 1
@@ -13714,17 +13708,16 @@ ibron.co, 0
 ibsafrica.co.za, 1
 ibsglobal.co.za, 1
 ibwc.gov, 1
 ic-lighting.com.au, 1
 ic3.gov, 1
 icafecash.com, 1
 icanhasht.ml, 1
 icarlos.net, 1
-icasnetwork.com, 1
 icbemp.gov, 1
 iccpublisher.com, 1
 icebat.dyndns.org, 1
 iceberg.academy, 1
 icebound.cc, 1
 icebound.win, 1
 icecars.net, 1
 iceloch.com, 1
@@ -14243,17 +14236,16 @@ inpas.co.uk, 1
 ins1gn1a.com, 1
 insane.zone, 1
 insblauehinein.nl, 1
 inschrijfformulier.com, 1
 inscript.pl, 1
 insertcoins.net, 1
 insgesamt.net, 1
 inshapenutrition.com.br, 1
-insho.fashion, 0
 insideaudit.com, 1
 insidethefirewall.tk, 1
 insightera.co.th, 1
 insighti.com, 1
 insighti.eu, 1
 insighti.org, 1
 insighti.sk, 1
 insinuator.net, 1
@@ -15158,16 +15150,17 @@ jjj.blog, 1
 jjspartyhire.co.uk, 1
 jjspartytime.co.uk, 1
 jjvanoorschot.nl, 1
 jk-entertainment.biz, 1
 jkchocolate.com, 1
 jkest.cc, 1
 jkinteriorspa.com, 1
 jkirsche.com, 1
+jkng.eu, 1
 jkrippen.com, 1
 jlhmedia.com, 1
 jlkhosting.com, 1
 jlponsetto.com, 1
 jlr-luxembourg.com, 1
 jltctech.com, 1
 jm-bea.net, 1
 jmalarcon.es, 1
@@ -15296,16 +15289,17 @@ jomp16.tk, 1
 jonandnoraswedding.com, 1
 jonarcher.info, 1
 jonas-thelemann.de, 1
 jonas-wenk.de, 1
 jonaskjodt.com, 1
 jonaswitmer.ch, 1
 jonathan-apps.com, 1
 jonathancarter.org, 1
+jonathandowning.uk, 1
 jonathandupree.com, 1
 jonathanmassacand.ch, 1
 jonathansanchez.pro, 1
 jonathanschle.de, 1
 jonathanwisdom.com, 1
 jondevin.com, 1
 jonesborostatebank.com, 0
 jonferwerda.net, 1
@@ -16008,17 +16002,16 @@ kienlen.org, 1
 kieranweightman.me, 1
 kiesuwkerstkaart.nl, 1
 kievradio.com, 1
 kiffmarks.com, 1
 kigmbh.com, 1
 kikbb.com, 1
 kiki-voice.jp, 1
 kiku.pw, 1
-kikuzuki.org, 0
 kilerd.me, 1
 kilianvalkhof.com, 1
 kill-paff.com, 1
 killaraapartments.com.au, 1
 killerit.in, 1
 killerrobots.com, 1
 killymoonbouncycastles.com, 1
 kilobyte22.de, 1
@@ -16714,17 +16707,16 @@ lancelafontaine.com, 1
 lanceyip.com, 1
 lancork.net, 1
 lancyvbc.ch, 1
 land.nrw, 0
 landbetweenthelakes.us, 1
 landell.ml, 1
 landflair-magazin.de, 1
 landhaus-christmann.de, 1
-landinfo.no, 1
 landofelves.net, 1
 landyparts.nl, 1
 lanetix.com, 1
 lang-php.com, 1
 langatang.com, 1
 langbein.org, 1
 langguth.io, 1
 langkahteduh.com, 1
@@ -17461,17 +17453,16 @@ liuboznaiko.eu, 1
 liud.im, 1
 liudon.org, 1
 liukang.tech, 1
 liul.in, 1
 liushuyu.tk, 1
 liv3ly.com, 1
 livebetterwith.com, 1
 livecards.co.uk, 1
-livecards.es, 1
 livecards.eu, 1
 livecards.it, 1
 livedesign.at, 1
 livedesign24.de, 1
 liveflightapp.com, 1
 liveforspeed.se, 1
 livejasmin.dk, 1
 livekaarten.be, 1
@@ -17550,17 +17541,17 @@ localblock.co.za, 1
 localbouncycastle.com, 1
 localdecor.com.br, 1
 localhorst.xyz, 1
 localspot.pl, 1
 locapos.com, 1
 locatorplus.gov, 1
 locauxrama.fr, 1
 locchat.com, 1
-locker.email, 0
+locker.email, 1
 locker3.com, 1
 lockify.com, 1
 lockpick.nl, 1
 lockpicks.se, 1
 lockr.io, 1
 locksport.org.nz, 1
 locomore.com, 1
 lodash.com, 0
@@ -18055,16 +18046,17 @@ mafia.network, 1
 mafiaforum.de, 1
 mafiapenguin.club, 1
 mafiasi.de, 1
 magasindejouets.com, 1
 magasinsalledebain.be, 1
 magasinsalledebain.fr, 1
 magasinsalledebains.be, 1
 magasinsalledebains.fr, 1
+magazin3513.com, 1
 magazinedabeleza.net, 1
 magazinedotreino.com.br, 1
 magdic.eu, 1
 magebankin.com, 1
 magenbrot.net, 0
 magenda.sk, 1
 magentaize.net, 1
 magentapinkinteriors.co.uk, 1
@@ -18198,16 +18190,17 @@ mamastore.eu, 1
 mamiecouscous.com, 1
 mammals.net, 1
 mammaw.com, 1
 mammeitalianeavienna.com, 1
 mammooc.org, 1
 mamochka.org.ua, 1
 mamospienas.lt, 1
 mamot.fr, 0
+mamout.xyz, 1
 man3s.jp, 1
 manage.cm, 1
 manage4all.de, 1
 management-companie.ro, 1
 management-ethics.com, 1
 managementboek.nl, 1
 managementfeedback.com, 1
 manageprojects.com, 0
@@ -18249,17 +18242,16 @@ manowarus.com, 1
 mansdell.net, 1
 mantor.org, 0
 manualscollection.com, 1
 manuel-herrmann.de, 1
 manuel-schefczyk.de, 1
 manueldopheide.com, 1
 manueli.de, 1
 manuelrueger.de, 1
-manufacturing.gov, 1
 manuscript.com, 1
 manutd.org.np, 1
 manuth.life, 1
 manutrol.com.br, 1
 manwithavan.co.uk, 1
 manyetikboya.com, 1
 manyiu.com, 1
 manyue.org, 1
@@ -18686,17 +18678,16 @@ md5file.com, 1
 md5hashing.net, 1
 mdbouncycastlehirelondon.co.uk, 1
 mdcloudpracticesolutions.com, 1
 mdcloudps.com, 1
 mdek.at, 1
 mdewendt.de, 1
 mdf-bis.com, 1
 mdiv.pl, 1
-mdkr.nl, 1
 mdma.net, 1
 mdmed.clinic, 1
 mdoering.de, 1
 mdosch.de, 1
 mdpraha.cz, 1
 mdsave.com, 1
 mdwftw.com, 1
 mdx.no, 1
@@ -19625,17 +19616,16 @@ morchstore.com, 1
 mordor.io, 0
 mordrum.com, 1
 moreapp.co.uk, 1
 morenci.ch, 1
 morepay.cn, 1
 moreserviceleads.com, 1
 morespacestorage.com.au, 1
 moresw.com, 1
-morethandigital.info, 1
 morfitronik.pl, 1
 morganino.eu, 1
 morganino.it, 1
 morgansleisure.co.uk, 1
 moritz-baestlein.de, 1
 moritztremmel.de, 1
 moriz.de, 1
 moriz.net, 1
@@ -19732,17 +19722,17 @@ mpi-sa.fr, 1
 mpintaamalabanna.it, 1
 mplanetphl.fr, 1
 mplant.io, 1
 mplicka.cz, 1
 mplusm.eu, 1
 mpn.poker, 1
 mpnpokertour.com, 1
 mpodraza.pl, 1
-mpreserver.com, 1
+mpreserver.com, 0
 mpserver12.org, 1
 mpsgarage.com.au, 1
 mpsoundcraft.com, 1
 mpy.ovh, 1
 mr-anderson.org, 1
 mr-labo.jp, 1
 mr-nachhilfe.de, 1
 mr-wolf.nl, 1
@@ -20222,17 +20212,16 @@ n2servers.com, 1
 n3twork.net, 1
 n4v.eu, 1
 n6a.net, 1
 na.hn, 1
 naam.me, 1
 naano.org, 1
 nabaleka.com, 1
 nabankco.com, 1
-nabu-bad-nauheim.de, 1
 nachsendeauftrag.net, 1
 nachsenden.info, 1
 nachtmuziek.info, 1
 nacin.com, 1
 nacktwanderfreunde.de, 1
 nacyklo.cz, 1
 nadaquenosepas.com, 1
 nadejeproninu.cz, 1
@@ -20284,17 +20273,16 @@ naminam.de, 1
 namrs.net, 1
 namu.moe, 1
 namu.wiki, 1
 nanami.moe, 1
 nanarose.ch, 1
 nanch.com, 1
 nanderson.me, 1
 nanfangstone.com, 1
-nani.io, 1
 nankiseamansclub.com, 1
 nanogi.ga, 1
 nanotechnologist.com, 1
 nanovolt.nl, 1
 nanpuyue.com, 1
 nanubo.com, 1
 nanubo.de, 1
 naoar.com, 1
@@ -22079,17 +22067,16 @@ parachute70.com, 1
 paradiesgirls.ch, 1
 paradigi.com.br, 1
 paradise-engineer.com, 1
 paradise-engineering.com, 1
 paradise-engineers.com, 1
 paradiselost.com, 1
 paradisenazarene.com, 1
 paradoxdesigns.org, 1
-paragon.com.sg, 1
 paragon.edu, 1
 paragonie.com, 0
 paragreen.net, 1
 parakranov.ru, 1
 paranoidmode.com, 1
 paranoidpenguin.net, 1
 paranoxer.hu, 1
 parasitologyclub.org, 1
@@ -22159,17 +22146,17 @@ pascal-bourhis.com, 1
 pascal-bourhis.net, 1
 pascal-kannchen.de, 1
 pascal-wittmann.de, 1
 pascaline-jouis.fr, 1
 pascalleguern.com, 1
 pascalmathis.com, 1
 pascalmathis.me, 1
 pascalmathis.net, 1
-pascalspoerri.ch, 1
+pascalspoerri.ch, 0
 pass.org.my, 1
 passfoto-deinfoto.ch, 1
 passieposse.nl, 1
 passionatefoodie.co.uk, 1
 passionatehorsemanship.com, 1
 passionpictures.eu, 1
 passions-art.com, 1
 passphrase.today, 1
@@ -23046,17 +23033,16 @@ pojer.me, 1
 pokalsocial.de, 1
 pokefarm.com, 1
 pokeinthe.io, 1
 pokemondb.net, 1
 pokemontabletopadventures.com, 1
 pokemori.jp, 1
 pokepon.center, 1
 pokl.cz, 1
-pol-expo.ru, 1
 polaire.org, 1
 polandb2b.directory, 1
 pole-emotion.ch, 1
 poleacademie.com, 1
 poleartschool.com, 0
 policedriver.com, 1
 polis.or.at, 1
 polis.to, 0
@@ -23205,17 +23191,16 @@ potlytics.com, 1
 potolok.am, 1
 potomania.cz, 1
 potpourrifestival.de, 1
 potrillionaires.com, 1
 potterscraftcider.com, 1
 pottersheartministry.org, 1
 pottshome.co.uk, 1
 potworowski.de, 1
-pouet.it, 1
 pouets.ovh, 1
 poupatempo.org, 1
 pourlesenfants.info, 1
 pourout.org, 1
 povareschka.ru, 1
 povesham.tk, 1
 powdersnow.top, 1
 power-coonies.de, 1
@@ -23588,17 +23573,16 @@ proxybay.la, 1
 proxybay.one, 1
 proxybay.tv, 1
 proxydesk.eu, 1
 proxyportal.me, 1
 proxyportal.net, 1
 proxyportal.org, 1
 proymaganadera.com, 1
 prpsss.com, 1
-prstatic.com, 1
 prt.in.th, 1
 prtimes.com, 1
 prtpe.com, 1
 pruikshop.nl, 1
 pruma.com.br, 1
 prvikvadrat.hr, 1
 pryspry.com, 1
 prytkov.com, 1
@@ -23801,17 +23785,16 @@ qetic.co.jp, 1
 qewc.com, 1
 qforum.org, 1
 qgustavor.tk, 1
 qhse-professionals.nl, 1
 qianalysis.com, 1
 qifu.me, 1
 qifu.org.cn, 1
 qikan.net, 1
-qimiao.io, 1
 qingpat.com, 1
 qingpei.me, 0
 qionouu.cn, 1
 qitarabutrans.com, 1
 qits.de, 0
 qivonline.pt, 1
 qiwi.be, 1
 qixi.biz, 1
@@ -26418,17 +26401,16 @@ siirtutkusu.com, 1
 sijmenschoon.nl, 1
 sikatehtaat.fi, 1
 sikevux.se, 1
 sikko.biz, 1
 siku-shop.ch, 1
 siku.pro, 1
 silashes.com, 1
 silashes.ru, 1
-silaslova-ekb.ru, 1
 silentexplosion.de, 1
 silentkernel.fr, 0
 silentmode.com, 1
 silentundo.org, 1
 siliconchip.me, 1
 silkebaekken.no, 1
 sillisalaatti.fi, 1
 sillysnapz.co.uk, 1
@@ -27192,16 +27174,17 @@ sourcecode.love, 1
 sourcely.net, 1
 sourceway.de, 1
 souris.ch, 1
 sous-surveillance.net, 1
 southafrican.dating, 1
 southambouncycastle.co.uk, 1
 southamerican.dating, 1
 southbankregister.com.au, 1
+southcoastkitesurf.co.uk, 1
 southernmost.us, 1
 southernutahinfluencers.com, 1
 southlakenissanparts.com, 1
 southmelbourne.apartments, 1
 southmorangtownhouses.com.au, 1
 southside-crew.com, 1
 southside-tuning-day.de, 1
 southwaymotors.com, 1
@@ -27749,17 +27732,16 @@ stonedworms.de, 1
 stonefusion.org.uk, 1
 stonehammerhead.org, 1
 stonemain.eu, 1
 stonemanbrasil.com.br, 1
 stonewuu.com, 1
 stony.com, 1
 stonystratford.org, 1
 stopakwardhandshakes.org, 1
-stopbreakupnow.org, 1
 stopbullying.gov, 1
 stopfraud.gov, 1
 stopthethyroidmadness.com, 1
 stordbatlag.no, 1
 store-host.com, 1
 store10.de, 0
 storedsafe.com, 1
 storgom.ua, 0
@@ -27819,16 +27801,17 @@ stripe.com, 1
 striptizer.tk, 1
 strm.hu, 1
 strobeltobias.de, 1
 strobeto.de, 1
 strobotti.com, 1
 stroginohelp.ru, 1
 strom.family, 1
 strongrandom.com, 0
+strozik.de, 1
 structurally.net, 1
 strugee.net, 1
 strutta.me, 1
 struxureon.com, 1
 strydom.me.uk, 1
 stt.wiki, 1
 stuartbell.co.uk, 1
 stuarts.xyz, 1
@@ -28343,17 +28326,16 @@ tam7t.com, 1
 tamasszabo.net, 1
 tamchunho.com, 1
 tamindir.com, 1
 tammy.pro, 1
 tampabaybusinesslistings.com, 1
 tanak3n.xyz, 1
 tancredi.nl, 1
 tandblekningidag.com, 1
-tandem-trade.ru, 1
 tangiblesecurity.com, 1
 tango-cats.de, 1
 tango-ouest.com, 1
 tangoalpha.co.uk, 1
 tangyue.date, 1
 tangzhao.net, 1
 tanhit.com, 1
 taniku-succulent.com, 1
@@ -29272,17 +29254,16 @@ tink.network, 1
 tinker.career, 1
 tinkerboard.org, 1
 tinkertry.com, 1
 tinte24.de, 1
 tintencenter.com, 1
 tintenfix.net, 1
 tintenfux.de, 1
 tintenland.de, 1
-tintenprofi.de, 1
 tinyhousefinance.com.au, 1
 tinylan.com, 1
 tinyspeck.com, 1
 tinyssh.com, 1
 tinyssh.org, 1
 tinytownsoftplay.co.uk, 1
 tinyvpn.net, 1
 tinyvpn.org, 1
@@ -30448,16 +30429,17 @@ urban-karuizawa.co.jp, 1
 urban.melbourne, 1
 urbanesecurity.com, 1
 urbanfi.sh, 1
 urbanguerillas.de, 1
 urbanietz-immobilien.de, 1
 urbanmelbourne.info, 1
 urbannewsservice.com, 1
 urbansparrow.in, 1
+urbanstylestaging.com, 1
 urbanwildlifealliance.org, 1
 urbexdk.nl, 1
 urcentral.com, 1
 urcentral.net, 1
 urcentral.org, 1
 ureka.org, 1
 urgences-valais.ch, 1
 uripura.de, 1
@@ -31209,17 +31191,16 @@ vvdbronckhorst.nl, 1
 vw-touranclub.cz, 1
 vwbusje.com, 1
 vwittich.de, 1
 vwoforangeparts.com, 1
 vwsoft.de, 1
 vww-8522.com, 1
 vxapps.com, 1
 vxst.org, 1
-vybeministry.org, 1
 vyber-odhadce.cz, 1
 vyberodhadce.cz, 1
 vyplnto.cz, 1
 vyshivanochka.in.ua, 1
 vysko.cz, 1
 vyskocil.eu, 1
 vyvygen.org, 1
 vyzner.cz, 1
@@ -31358,17 +31339,16 @@ watchweasel.com, 1
 waterfedpole.com, 1
 waterleeftinbeek.nl, 1
 watermonitor.gov, 1
 watersb.org, 1
 waterschaplimburg.nl, 1
 watertrails.io, 1
 waterworkscondos.com, 1
 watsonwork.me, 1
-wattechweb.com, 1
 wave-ola.es, 1
 wavesboardshop.com, 1
 wavesoftime.com, 1
 waveum.com, 1
 wawak.pl, 1
 waxdramatic.com, 1
 waylaydesign.com, 1
 wayne.cloud, 0
--- a/servo/Cargo.lock
+++ b/servo/Cargo.lock
@@ -3562,17 +3562,17 @@ dependencies = [
  "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "uuid 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "webdriver 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "webrender"
 version = "0.56.1"
-source = "git+https://github.com/servo/webrender#92959212d069eace3cf1c5f939458108de4432b5"
+source = "git+https://github.com/servo/webrender#a21197eb1e427730c7bec6eec07bc6cc352d452e"
 dependencies = [
  "app_units 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "bincode 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "bitflags 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-graphics 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-text 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -3590,17 +3590,17 @@ dependencies = [
  "thread_profiler 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "time 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
  "webrender_api 0.56.1 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "webrender_api"
 version = "0.56.1"
-source = "git+https://github.com/servo/webrender#92959212d069eace3cf1c5f939458108de4432b5"
+source = "git+https://github.com/servo/webrender#a21197eb1e427730c7bec6eec07bc6cc352d452e"
 dependencies = [
  "app_units 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "bincode 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "bitflags 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-graphics 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "dwrote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
--- a/servo/components/canvas/webgl_thread.rs
+++ b/servo/components/canvas/webgl_thread.rs
@@ -482,17 +482,17 @@ impl<VR: WebVRRenderHandler + 'static, O
     }
 
     /// Helper function to create a `webrender_api::ImageDescriptor`.
     fn image_descriptor(size: Size2D<i32>, alpha: bool) -> webrender_api::ImageDescriptor {
         webrender_api::ImageDescriptor {
             width: size.width as u32,
             height: size.height as u32,
             stride: None,
-            format: if alpha { webrender_api::ImageFormat::BGRA8 } else { webrender_api::ImageFormat::RGB8 },
+            format: webrender_api::ImageFormat::BGRA8,
             offset: 0,
             is_opaque: !alpha,
         }
     }
 
     /// Helper function to create a `webrender_api::ImageData::External` instance.
     fn external_image_data(context_id: WebGLContextId) -> webrender_api::ImageData {
         let data = webrender_api::ExternalImageData {
--- a/servo/components/layout/block.rs
+++ b/servo/components/layout/block.rs
@@ -24,19 +24,19 @@
 //! available here:
 //!
 //!   http://dev.w3.org/csswg/css-sizing/
 
 #![deny(unsafe_code)]
 
 use app_units::{Au, MAX_AU};
 use context::LayoutContext;
-use display_list_builder::{BlockFlowDisplayListBuilding, BorderPaintingMode};
-use display_list_builder::{DisplayListBuildState, StackingContextCollectionFlags};
-use display_list_builder::StackingContextCollectionState;
+use display_list::{BlockFlowDisplayListBuilding, BorderPaintingMode};
+use display_list::{DisplayListBuildState, StackingContextCollectionFlags};
+use display_list::StackingContextCollectionState;
 use euclid::{Point2D, Rect, SideOffsets2D, Size2D};
 use floats::{ClearType, FloatKind, Floats, PlacementInfo};
 use flow::{BaseFlow, EarlyAbsolutePositionInfo, Flow, FlowClass, ForceNonfloatedFlag, GetBaseFlow};
 use flow::{ImmutableFlowUtils, LateAbsolutePositionInfo, OpaqueFlow, FragmentationContext, FlowFlags};
 use flow_list::FlowList;
 use fragment::{CoordinateSystem, Fragment, FragmentBorderBoxIterator, Overflow, FragmentFlags};
 use gfx_traits::print_tree::PrintTree;
 use incremental::RelayoutMode;
new file mode 100644
--- /dev/null
+++ b/servo/components/layout/display_list/background.rs
@@ -0,0 +1,549 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//! Calculations for CSS images and CSS backgrounds.
+
+#![deny(unsafe_code)]
+
+// FIXME(rust-lang/rust#26264): Remove GenericEndingShape and GenericGradientItem.
+
+use app_units::Au;
+use display_list::ToGfxColor;
+use euclid::{Point2D, Size2D, Vector2D};
+use gfx::display_list;
+use model::MaybeAuto;
+use style::values::computed::{Angle, GradientItem};
+use style::values::computed::{LengthOrPercentage, LengthOrPercentageOrAuto, Percentage};
+use style::values::computed::Position;
+use style::values::computed::image::{EndingShape, LineDirection};
+use style::values::generics::background::BackgroundSize;
+use style::values::generics::image::{Circle, Ellipse, ShapeExtent};
+use style::values::generics::image::EndingShape as GenericEndingShape;
+use style::values::generics::image::GradientItem as GenericGradientItem;
+use style::values::specified::background::RepeatKeyword;
+use style::values::specified::position::{X, Y};
+use webrender_api::GradientStop;
+
+/// A helper data structure for gradients.
+#[derive(Clone, Copy)]
+struct StopRun {
+    start_offset: f32,
+    end_offset: f32,
+    start_index: usize,
+    stop_count: usize,
+}
+
+/// For a given area and an image compute how big the
+/// image should be displayed on the background.
+pub fn compute_background_image_size(
+    bg_size: BackgroundSize<LengthOrPercentageOrAuto>,
+    bounds_size: Size2D<Au>,
+    intrinsic_size: Option<Size2D<Au>>,
+) -> Size2D<Au> {
+    match intrinsic_size {
+        None => match bg_size {
+            BackgroundSize::Cover | BackgroundSize::Contain => bounds_size,
+            BackgroundSize::Explicit { width, height } => Size2D::new(
+                MaybeAuto::from_style(width, bounds_size.width)
+                    .specified_or_default(bounds_size.width),
+                MaybeAuto::from_style(height, bounds_size.height)
+                    .specified_or_default(bounds_size.height),
+            ),
+        },
+        Some(own_size) => {
+            // If `image_aspect_ratio` < `bounds_aspect_ratio`, the image is tall; otherwise, it is
+            // wide.
+            let image_aspect_ratio = own_size.width.to_f32_px() / own_size.height.to_f32_px();
+            let bounds_aspect_ratio =
+                bounds_size.width.to_f32_px() / bounds_size.height.to_f32_px();
+            match (bg_size, image_aspect_ratio < bounds_aspect_ratio) {
+                (BackgroundSize::Contain, false) | (BackgroundSize::Cover, true) => Size2D::new(
+                    bounds_size.width,
+                    bounds_size.width.scale_by(image_aspect_ratio.recip()),
+                ),
+                (BackgroundSize::Contain, true) | (BackgroundSize::Cover, false) => Size2D::new(
+                    bounds_size.height.scale_by(image_aspect_ratio),
+                    bounds_size.height,
+                ),
+                (
+                    BackgroundSize::Explicit {
+                        width,
+                        height: LengthOrPercentageOrAuto::Auto,
+                    },
+                    _,
+                ) => {
+                    let width = MaybeAuto::from_style(width, bounds_size.width)
+                        .specified_or_default(own_size.width);
+                    Size2D::new(width, width.scale_by(image_aspect_ratio.recip()))
+                },
+                (
+                    BackgroundSize::Explicit {
+                        width: LengthOrPercentageOrAuto::Auto,
+                        height,
+                    },
+                    _,
+                ) => {
+                    let height = MaybeAuto::from_style(height, bounds_size.height)
+                        .specified_or_default(own_size.height);
+                    Size2D::new(height.scale_by(image_aspect_ratio), height)
+                },
+                (BackgroundSize::Explicit { width, height }, _) => Size2D::new(
+                    MaybeAuto::from_style(width, bounds_size.width)
+                        .specified_or_default(own_size.width),
+                    MaybeAuto::from_style(height, bounds_size.height)
+                        .specified_or_default(own_size.height),
+                ),
+            }
+        },
+    }
+}
+
+fn tile_image_round(
+    position: &mut Au,
+    size: &mut Au,
+    absolute_anchor_origin: Au,
+    image_size: &mut Au,
+) {
+    if *size == Au(0) || *image_size == Au(0) {
+        *position = Au(0);
+        *size = Au(0);
+        return;
+    }
+
+    let number_of_tiles = (size.to_f32_px() / image_size.to_f32_px()).round().max(1.0);
+    *image_size = *size / (number_of_tiles as i32);
+    tile_image(position, size, absolute_anchor_origin, *image_size);
+}
+
+fn tile_image_spaced(
+    position: &mut Au,
+    size: &mut Au,
+    tile_spacing: &mut Au,
+    absolute_anchor_origin: Au,
+    image_size: Au,
+) {
+    if *size == Au(0) || image_size == Au(0) {
+        *position = Au(0);
+        *size = Au(0);
+        *tile_spacing = Au(0);
+        return;
+    }
+
+    // Per the spec, if the space available is not enough for two images, just tile as
+    // normal but only display a single tile.
+    if image_size * 2 >= *size {
+        tile_image(position, size, absolute_anchor_origin, image_size);
+        *tile_spacing = Au(0);
+        *size = image_size;
+        return;
+    }
+
+    // Take the box size, remove room for two tiles on the edges, and then calculate how many
+    // other tiles fit in between them.
+    let size_remaining = *size - (image_size * 2);
+    let num_middle_tiles = (size_remaining.to_f32_px() / image_size.to_f32_px()).floor() as i32;
+
+    // Allocate the remaining space as padding between tiles. background-position is ignored
+    // as per the spec, so the position is just the box origin. We are also ignoring
+    // background-attachment here, which seems unspecced when combined with
+    // background-repeat: space.
+    let space_for_middle_tiles = image_size * num_middle_tiles;
+    *tile_spacing = (size_remaining - space_for_middle_tiles) / (num_middle_tiles + 1);
+}
+
+/// Tile an image
+fn tile_image(position: &mut Au, size: &mut Au, absolute_anchor_origin: Au, image_size: Au) {
+    // Avoid division by zero below!
+    // Images with a zero width or height are not displayed.
+    // Therefore the positions do not matter and can be left unchanged.
+    // NOTE: A possible optimization is not to build
+    // display items in this case at all.
+    if image_size == Au(0) {
+        return;
+    }
+
+    let delta_pixels = absolute_anchor_origin - *position;
+    let image_size_px = image_size.to_f32_px();
+    let tile_count = ((delta_pixels.to_f32_px() + image_size_px - 1.0) / image_size_px).floor();
+    let offset = image_size * (tile_count as i32);
+    let new_position = absolute_anchor_origin - offset;
+    *size = *position - new_position + *size;
+    *position = new_position;
+}
+
+/// For either the x or the y axis ajust various values to account for tiling.
+///
+/// This is done separately for both axes because the repeat keywords may differ.
+pub fn tile_image_axis(
+    repeat: RepeatKeyword,
+    position: &mut Au,
+    size: &mut Au,
+    tile_size: &mut Au,
+    tile_spacing: &mut Au,
+    offset: Au,
+    clip_origin: Au,
+    clip_size: Au,
+) {
+    let absolute_anchor_origin = *position + offset;
+    match repeat {
+        RepeatKeyword::NoRepeat => {
+            *position += offset;
+            *size = *tile_size;
+        },
+        RepeatKeyword::Repeat => {
+            *position = clip_origin;
+            *size = clip_size;
+            tile_image(position, size, absolute_anchor_origin, *tile_size);
+        },
+        RepeatKeyword::Space => {
+            tile_image_spaced(
+                position,
+                size,
+                tile_spacing,
+                absolute_anchor_origin,
+                *tile_size,
+            );
+            let combined_tile_size = *tile_size + *tile_spacing;
+            *position = clip_origin;
+            *size = clip_size;
+            tile_image(position, size, absolute_anchor_origin, combined_tile_size);
+        },
+        RepeatKeyword::Round => {
+            tile_image_round(position, size, absolute_anchor_origin, tile_size);
+            *position = clip_origin;
+            *size = clip_size;
+            tile_image(position, size, absolute_anchor_origin, *tile_size);
+        },
+    }
+}
+
+/// Determines the radius of a circle if it was not explictly provided.
+/// <https://drafts.csswg.org/css-images-3/#typedef-size>
+fn convert_circle_size_keyword(
+    keyword: ShapeExtent,
+    size: &Size2D<Au>,
+    center: &Point2D<Au>,
+) -> Size2D<Au> {
+    let radius = match keyword {
+        ShapeExtent::ClosestSide | ShapeExtent::Contain => {
+            let dist = get_distance_to_sides(size, center, ::std::cmp::min);
+            ::std::cmp::min(dist.width, dist.height)
+        },
+        ShapeExtent::FarthestSide => {
+            let dist = get_distance_to_sides(size, center, ::std::cmp::max);
+            ::std::cmp::max(dist.width, dist.height)
+        },
+        ShapeExtent::ClosestCorner => get_distance_to_corner(size, center, ::std::cmp::min),
+        ShapeExtent::FarthestCorner | ShapeExtent::Cover => {
+            get_distance_to_corner(size, center, ::std::cmp::max)
+        },
+    };
+    Size2D::new(radius, radius)
+}
+
+/// Returns the radius for an ellipse with the same ratio as if it was matched to the sides.
+fn get_ellipse_radius<F>(size: &Size2D<Au>, center: &Point2D<Au>, cmp: F) -> Size2D<Au>
+where
+    F: Fn(Au, Au) -> Au,
+{
+    let dist = get_distance_to_sides(size, center, cmp);
+    Size2D::new(
+        dist.width.scale_by(::std::f32::consts::FRAC_1_SQRT_2 * 2.0),
+        dist.height
+            .scale_by(::std::f32::consts::FRAC_1_SQRT_2 * 2.0),
+    )
+}
+
+/// Determines the radius of an ellipse if it was not explictly provided.
+/// <https://drafts.csswg.org/css-images-3/#typedef-size>
+fn convert_ellipse_size_keyword(
+    keyword: ShapeExtent,
+    size: &Size2D<Au>,
+    center: &Point2D<Au>,
+) -> Size2D<Au> {
+    match keyword {
+        ShapeExtent::ClosestSide | ShapeExtent::Contain => {
+            get_distance_to_sides(size, center, ::std::cmp::min)
+        },
+        ShapeExtent::FarthestSide => get_distance_to_sides(size, center, ::std::cmp::max),
+        ShapeExtent::ClosestCorner => get_ellipse_radius(size, center, ::std::cmp::min),
+        ShapeExtent::FarthestCorner | ShapeExtent::Cover => {
+            get_ellipse_radius(size, center, ::std::cmp::max)
+        },
+    }
+}
+
+fn convert_gradient_stops(gradient_items: &[GradientItem], total_length: Au) -> Vec<GradientStop> {
+    // Determine the position of each stop per CSS-IMAGES § 3.4.
+
+    // Only keep the color stops, discard the color interpolation hints.
+    let mut stop_items = gradient_items
+        .iter()
+        .filter_map(|item| match *item {
+            GenericGradientItem::ColorStop(ref stop) => Some(*stop),
+            _ => None,
+        })
+        .collect::<Vec<_>>();
+
+    assert!(stop_items.len() >= 2);
+
+    // Run the algorithm from
+    // https://drafts.csswg.org/css-images-3/#color-stop-syntax
+
+    // Step 1:
+    // If the first color stop does not have a position, set its position to 0%.
+    {
+        let first = stop_items.first_mut().unwrap();
+        if first.position.is_none() {
+            first.position = Some(LengthOrPercentage::Percentage(Percentage(0.0)));
+        }
+    }
+    // If the last color stop does not have a position, set its position to 100%.
+    {
+        let last = stop_items.last_mut().unwrap();
+        if last.position.is_none() {
+            last.position = Some(LengthOrPercentage::Percentage(Percentage(1.0)));
+        }
+    }
+
+    // Step 2: Move any stops placed before earlier stops to the
+    // same position as the preceding stop.
+    let mut last_stop_position = stop_items.first().unwrap().position.unwrap();
+    for stop in stop_items.iter_mut().skip(1) {
+        if let Some(pos) = stop.position {
+            if position_to_offset(last_stop_position, total_length) >
+                position_to_offset(pos, total_length)
+            {
+                stop.position = Some(last_stop_position);
+            }
+            last_stop_position = stop.position.unwrap();
+        }
+    }
+
+    // Step 3: Evenly space stops without position.
+    // Note: Remove the + 2 if fix_gradient_stops is changed.
+    let mut stops = Vec::with_capacity(stop_items.len() + 2);
+    let mut stop_run = None;
+    for (i, stop) in stop_items.iter().enumerate() {
+        let offset = match stop.position {
+            None => {
+                if stop_run.is_none() {
+                    // Initialize a new stop run.
+                    // `unwrap()` here should never fail because this is the beginning of
+                    // a stop run, which is always bounded by a length or percentage.
+                    let start_offset =
+                        position_to_offset(stop_items[i - 1].position.unwrap(), total_length);
+                    // `unwrap()` here should never fail because this is the end of
+                    // a stop run, which is always bounded by a length or percentage.
+                    let (end_index, end_stop) = stop_items[(i + 1)..]
+                        .iter()
+                        .enumerate()
+                        .find(|&(_, ref stop)| stop.position.is_some())
+                        .unwrap();
+                    let end_offset = position_to_offset(end_stop.position.unwrap(), total_length);
+                    stop_run = Some(StopRun {
+                        start_offset: start_offset,
+                        end_offset: end_offset,
+                        start_index: i - 1,
+                        stop_count: end_index,
+                    })
+                }
+
+                let stop_run = stop_run.unwrap();
+                let stop_run_length = stop_run.end_offset - stop_run.start_offset;
+                stop_run.start_offset +
+                    stop_run_length * (i - stop_run.start_index) as f32 /
+                        ((2 + stop_run.stop_count) as f32)
+            },
+            Some(position) => {
+                stop_run = None;
+                position_to_offset(position, total_length)
+            },
+        };
+        assert!(offset.is_finite());
+        stops.push(GradientStop {
+            offset: offset,
+            color: stop.color.to_gfx_color(),
+        })
+    }
+    stops
+}
+
+pub fn convert_linear_gradient(
+    size: Size2D<Au>,
+    stops: &[GradientItem],
+    direction: LineDirection,
+    repeating: bool,
+) -> display_list::Gradient {
+    let angle = match direction {
+        LineDirection::Angle(angle) => angle.radians(),
+        LineDirection::Horizontal(x) => match x {
+            X::Left => Angle::Deg(270.).radians(),
+            X::Right => Angle::Deg(90.).radians(),
+        },
+        LineDirection::Vertical(y) => match y {
+            Y::Top => Angle::Deg(0.).radians(),
+            Y::Bottom => Angle::Deg(180.).radians(),
+        },
+        LineDirection::Corner(horizontal, vertical) => {
+            // This the angle for one of the diagonals of the box. Our angle
+            // will either be this one, this one + PI, or one of the other
+            // two perpendicular angles.
+            let atan = (size.height.to_f32_px() / size.width.to_f32_px()).atan();
+            match (horizontal, vertical) {
+                (X::Right, Y::Bottom) => ::std::f32::consts::PI - atan,
+                (X::Left, Y::Bottom) => ::std::f32::consts::PI + atan,
+                (X::Right, Y::Top) => atan,
+                (X::Left, Y::Top) => -atan,
+            }
+        },
+    };
+
+    // Get correct gradient line length, based on:
+    // https://drafts.csswg.org/css-images-3/#linear-gradients
+    let dir = Point2D::new(angle.sin(), -angle.cos());
+
+    let line_length =
+        (dir.x * size.width.to_f32_px()).abs() + (dir.y * size.height.to_f32_px()).abs();
+
+    let inv_dir_length = 1.0 / (dir.x * dir.x + dir.y * dir.y).sqrt();
+
+    // This is the vector between the center and the ending point; i.e. half
+    // of the distance between the starting point and the ending point.
+    let delta = Vector2D::new(
+        Au::from_f32_px(dir.x * inv_dir_length * line_length / 2.0),
+        Au::from_f32_px(dir.y * inv_dir_length * line_length / 2.0),
+    );
+
+    // This is the length of the gradient line.
+    let length = Au::from_f32_px((delta.x.to_f32_px() * 2.0).hypot(delta.y.to_f32_px() * 2.0));
+
+    let mut stops = convert_gradient_stops(stops, length);
+
+    // Only clamped gradients need to be fixed because in repeating gradients
+    // there is no "first" or "last" stop because they repeat infinitly in
+    // both directions, so the rendering is always correct.
+    if !repeating {
+        fix_gradient_stops(&mut stops);
+    }
+
+    let center = Point2D::new(size.width / 2, size.height / 2);
+
+    display_list::Gradient {
+        start_point: center - delta,
+        end_point: center + delta,
+        stops: stops,
+        repeating: repeating,
+    }
+}
+
+pub fn convert_radial_gradient(
+    size: Size2D<Au>,
+    stops: &[GradientItem],
+    shape: EndingShape,
+    center: Position,
+    repeating: bool,
+) -> display_list::RadialGradient {
+    let center = Point2D::new(
+        center.horizontal.to_used_value(size.width),
+        center.vertical.to_used_value(size.height),
+    );
+    let radius = match shape {
+        GenericEndingShape::Circle(Circle::Radius(length)) => {
+            let length = Au::from(length);
+            Size2D::new(length, length)
+        },
+        GenericEndingShape::Circle(Circle::Extent(extent)) => {
+            convert_circle_size_keyword(extent, &size, &center)
+        },
+        GenericEndingShape::Ellipse(Ellipse::Radii(x, y)) => {
+            Size2D::new(x.to_used_value(size.width), y.to_used_value(size.height))
+        },
+        GenericEndingShape::Ellipse(Ellipse::Extent(extent)) => {
+            convert_ellipse_size_keyword(extent, &size, &center)
+        },
+    };
+
+    let mut stops = convert_gradient_stops(stops, radius.width);
+    // Repeating gradients have no last stops that can be ignored. So
+    // fixup is not necessary but may actually break the gradient.
+    if !repeating {
+        fix_gradient_stops(&mut stops);
+    }
+
+    display_list::RadialGradient {
+        center: center,
+        radius: radius,
+        stops: stops,
+        repeating: repeating,
+    }
+}
+
+#[inline]
+/// Duplicate the first and last stops if necessary.
+///
+/// Explanation by pyfisch:
+/// If the last stop is at the same position as the previous stop the
+/// last color is ignored by webrender. This differs from the spec
+/// (I think so). The  implementations of Chrome and Firefox seem
+/// to have the same problem but work fine if the position of the last
+/// stop is smaller than 100%. (Otherwise they ignore the last stop.)
+///
+/// Similarly the first stop is duplicated if it is not placed
+/// at the start of the virtual gradient ray.
+fn fix_gradient_stops(stops: &mut Vec<GradientStop>) {
+    if stops.first().unwrap().offset > 0.0 {
+        let color = stops.first().unwrap().color;
+        stops.insert(
+            0,
+            GradientStop {
+                offset: 0.0,
+                color: color,
+            },
+        )
+    }
+    if stops.last().unwrap().offset < 1.0 {
+        let color = stops.last().unwrap().color;
+        stops.push(GradientStop {
+            offset: 1.0,
+            color: color,
+        })
+    }
+}
+
+/// Returns the the distance to the nearest or farthest corner depending on the comperator.
+fn get_distance_to_corner<F>(size: &Size2D<Au>, center: &Point2D<Au>, cmp: F) -> Au
+where
+    F: Fn(Au, Au) -> Au,
+{
+    let dist = get_distance_to_sides(size, center, cmp);
+    Au::from_f32_px(dist.width.to_f32_px().hypot(dist.height.to_f32_px()))
+}
+
+/// Returns the distance to the nearest or farthest sides depending on the comparator.
+///
+/// The first return value is horizontal distance the second vertical distance.
+fn get_distance_to_sides<F>(size: &Size2D<Au>, center: &Point2D<Au>, cmp: F) -> Size2D<Au>
+where
+    F: Fn(Au, Au) -> Au,
+{
+    let top_side = center.y;
+    let right_side = size.width - center.x;
+    let bottom_side = size.height - center.y;
+    let left_side = center.x;
+    Size2D::new(cmp(left_side, right_side), cmp(top_side, bottom_side))
+}
+
+fn position_to_offset(position: LengthOrPercentage, total_length: Au) -> f32 {
+    if total_length == Au(0) {
+        return 0.0;
+    }
+    match position {
+        LengthOrPercentage::Length(l) => l.to_i32_au() as f32 / total_length.0 as f32,
+        LengthOrPercentage::Percentage(percentage) => percentage.0 as f32,
+        LengthOrPercentage::Calc(calc) => {
+            calc.to_used_value(Some(total_length)).unwrap().0 as f32 / total_length.0 as f32
+        },
+    }
+}
rename from servo/components/layout/display_list_builder.rs
rename to servo/components/layout/display_list/builder.rs
--- a/servo/components/layout/display_list_builder.rs
+++ b/servo/components/layout/display_list/builder.rs
@@ -9,16 +9,19 @@
 //! paint.
 
 #![deny(unsafe_code)]
 
 use app_units::{Au, AU_PER_PX};
 use block::{BlockFlow, BlockStackingContextType};
 use canvas_traits::canvas::{CanvasMsg, FromLayoutMsg};
 use context::LayoutContext;
+use display_list::background::{compute_background_image_size, tile_image_axis};
+use display_list::background::{convert_linear_gradient, convert_radial_gradient};
+use display_list::webrender_helpers::{ToBorderRadius, ToMixBlendMode, ToRectF, ToTransformStyle};
 use euclid::{Point2D, Rect, SideOffsets2D, Size2D, Transform3D, TypedRect, TypedSize2D, Vector2D};
 use flex::FlexFlow;
 use flow::{BaseFlow, Flow, FlowFlags};
 use flow_ref::FlowRef;
 use fnv::FnvHashMap;
 use fragment::{CanvasFragmentSource, CoordinateSystem, Fragment, ScannedTextFragmentInfo};
 use fragment::SpecificFragmentInfo;
 use gfx::display_list;
@@ -59,35 +62,27 @@ use style::computed_values::pointer_even
 use style::computed_values::position::T as StylePosition;
 use style::computed_values::visibility::T as Visibility;
 use style::logical_geometry::{LogicalMargin, LogicalPoint, LogicalRect, LogicalSize, WritingMode};
 use style::properties::ComputedValues;
 use style::properties::longhands::border_image_repeat::computed_value::RepeatKeyword;
 use style::properties::style_structs;
 use style::servo::restyle_damage::ServoRestyleDamage;
 use style::values::{Either, RGBA};
-use style::values::computed::{Angle, Gradient, GradientItem, LengthOrPercentage, Percentage};
-use style::values::computed::{LengthOrPercentageOrAuto, NumberOrPercentage, Position};
+use style::values::computed::{Gradient, NumberOrPercentage};
 use style::values::computed::effects::SimpleShadow;
-use style::values::computed::image::{EndingShape, LineDirection};
 use style::values::generics::background::BackgroundSize;
 use style::values::generics::effects::Filter;
-use style::values::generics::image::{Circle, Ellipse, EndingShape as GenericEndingShape};
-use style::values::generics::image::{GradientItem as GenericGradientItem, GradientKind};
-use style::values::generics::image::{Image, ShapeExtent};
-use style::values::generics::image::PaintWorklet;
-use style::values::specified::background::RepeatKeyword as BackgroundRepeatKeyword;
-use style::values::specified::position::{X, Y};
+use style::values::generics::image::{GradientKind, Image, PaintWorklet};
 use style_traits::CSSPixel;
 use style_traits::ToCss;
 use style_traits::cursor::Cursor;
 use table_cell::CollapsedBordersForCell;
-use webrender_api::{ClipId, ClipMode, ColorF, ComplexClipRegion, GradientStop, LineStyle};
+use webrender_api::{ClipId, ClipMode, ColorF, ComplexClipRegion, LineStyle};
 use webrender_api::{LocalClip, RepeatMode, ScrollPolicy, ScrollSensitivity, StickyOffsetBounds};
-use webrender_helpers::{ToBorderRadius, ToMixBlendMode, ToRectF, ToTransformStyle};
 
 trait ResolvePercentage {
     fn resolve(&self, length: u32) -> u32;
 }
 
 impl ResolvePercentage for NumberOrPercentage {
     fn resolve(&self, length: u32) -> u32 {
         match *self {
@@ -520,22 +515,16 @@ impl<'a> DisplayListBuildState<'a> {
             list.push(item);
         }
     }
 }
 
 /// The logical width of an insertion point: at the moment, a one-pixel-wide line.
 const INSERTION_POINT_LOGICAL_WIDTH: Au = Au(1 * AU_PER_PX);
 
-pub enum IdType {
-    StackingContext,
-    OverflowClip,
-    CSSClip,
-}
-
 pub trait FragmentDisplayListBuilding {
     fn collect_stacking_contexts_for_blocklike_fragment(
         &mut self,
         state: &mut StackingContextCollectionState,
     ) -> bool;
 
     /// Adds the display items necessary to paint the background of this fragment to the display
     /// list if necessary.
@@ -716,17 +705,17 @@ pub trait FragmentDisplayListBuilding {
         &self,
         id: StackingContextId,
         base_flow: &BaseFlow,
         scroll_policy: ScrollPolicy,
         context_type: StackingContextType,
         parent_clipping_and_scrolling: ClippingAndScrolling,
     ) -> StackingContext;
 
-    fn unique_id(&self, id_type: IdType) -> u64;
+    fn unique_id(&self) -> u64;
 
     fn fragment_type(&self) -> FragmentType;
 }
 
 fn handle_overlapping_radii(size: &Size2D<Au>, radii: &BorderRadii<Au>) -> BorderRadii<Au> {
     // No two corners' border radii may add up to more than the length of the edge
     // between them. To prevent that, all radii are scaled down uniformly.
     fn scale_factor(radius_a: Au, radius_b: Au, edge_length: Au) -> f32 {
@@ -819,333 +808,16 @@ fn build_inner_border_box_for_border_rec
     let mut inner_border_box = *border_box;
     inner_border_box.origin.x += border_widths.left;
     inner_border_box.origin.y += border_widths.top;
     inner_border_box.size.width -= border_widths.right + border_widths.left;
     inner_border_box.size.height -= border_widths.bottom + border_widths.top;
     inner_border_box
 }
 
-fn convert_gradient_stops(gradient_items: &[GradientItem], total_length: Au) -> Vec<GradientStop> {
-    // Determine the position of each stop per CSS-IMAGES § 3.4.
-
-    // Only keep the color stops, discard the color interpolation hints.
-    let mut stop_items = gradient_items
-        .iter()
-        .filter_map(|item| match *item {
-            GenericGradientItem::ColorStop(ref stop) => Some(*stop),
-            _ => None,
-        })
-        .collect::<Vec<_>>();
-
-    assert!(stop_items.len() >= 2);
-
-    // Run the algorithm from
-    // https://drafts.csswg.org/css-images-3/#color-stop-syntax
-
-    // Step 1:
-    // If the first color stop does not have a position, set its position to 0%.
-    {
-        let first = stop_items.first_mut().unwrap();
-        if first.position.is_none() {
-            first.position = Some(LengthOrPercentage::Percentage(Percentage(0.0)));
-        }
-    }
-    // If the last color stop does not have a position, set its position to 100%.
-    {
-        let last = stop_items.last_mut().unwrap();
-        if last.position.is_none() {
-            last.position = Some(LengthOrPercentage::Percentage(Percentage(1.0)));
-        }
-    }
-
-    // Step 2: Move any stops placed before earlier stops to the
-    // same position as the preceding stop.
-    let mut last_stop_position = stop_items.first().unwrap().position.unwrap();
-    for stop in stop_items.iter_mut().skip(1) {
-        if let Some(pos) = stop.position {
-            if position_to_offset(last_stop_position, total_length) >
-                position_to_offset(pos, total_length)
-            {
-                stop.position = Some(last_stop_position);
-            }
-            last_stop_position = stop.position.unwrap();
-        }
-    }
-
-    // Step 3: Evenly space stops without position.
-    // Note: Remove the + 2 if fix_gradient_stops is changed.
-    let mut stops = Vec::with_capacity(stop_items.len() + 2);
-    let mut stop_run = None;
-    for (i, stop) in stop_items.iter().enumerate() {
-        let offset = match stop.position {
-            None => {
-                if stop_run.is_none() {
-                    // Initialize a new stop run.
-                    // `unwrap()` here should never fail because this is the beginning of
-                    // a stop run, which is always bounded by a length or percentage.
-                    let start_offset =
-                        position_to_offset(stop_items[i - 1].position.unwrap(), total_length);
-                    // `unwrap()` here should never fail because this is the end of
-                    // a stop run, which is always bounded by a length or percentage.
-                    let (end_index, end_stop) = stop_items[(i + 1)..]
-                        .iter()
-                        .enumerate()
-                        .find(|&(_, ref stop)| stop.position.is_some())
-                        .unwrap();
-                    let end_offset = position_to_offset(end_stop.position.unwrap(), total_length);
-                    stop_run = Some(StopRun {
-                        start_offset: start_offset,
-                        end_offset: end_offset,
-                        start_index: i - 1,
-                        stop_count: end_index,
-                    })
-                }
-
-                let stop_run = stop_run.unwrap();
-                let stop_run_length = stop_run.end_offset - stop_run.start_offset;
-                stop_run.start_offset +
-                    stop_run_length * (i - stop_run.start_index) as f32 /
-                        ((2 + stop_run.stop_count) as f32)
-            },
-            Some(position) => {
-                stop_run = None;
-                position_to_offset(position, total_length)
-            },
-        };
-        assert!(offset.is_finite());
-        stops.push(GradientStop {
-            offset: offset,
-            color: stop.color.to_gfx_color(),
-        })
-    }
-    stops
-}
-
-fn convert_linear_gradient(
-    size: Size2D<Au>,
-    stops: &[GradientItem],
-    direction: LineDirection,
-    repeating: bool,
-) -> display_list::Gradient {
-    let angle = match direction {
-        LineDirection::Angle(angle) => angle.radians(),
-        LineDirection::Horizontal(x) => match x {
-            X::Left => Angle::Deg(270.).radians(),
-            X::Right => Angle::Deg(90.).radians(),
-        },
-        LineDirection::Vertical(y) => match y {
-            Y::Top => Angle::Deg(0.).radians(),
-            Y::Bottom => Angle::Deg(180.).radians(),
-        },
-        LineDirection::Corner(horizontal, vertical) => {
-            // This the angle for one of the diagonals of the box. Our angle
-            // will either be this one, this one + PI, or one of the other
-            // two perpendicular angles.
-            let atan = (size.height.to_f32_px() / size.width.to_f32_px()).atan();
-            match (horizontal, vertical) {
-                (X::Right, Y::Bottom) => f32::consts::PI - atan,
-                (X::Left, Y::Bottom) => f32::consts::PI + atan,
-                (X::Right, Y::Top) => atan,
-                (X::Left, Y::Top) => -atan,
-            }
-        },
-    };
-
-    // Get correct gradient line length, based on:
-    // https://drafts.csswg.org/css-images-3/#linear-gradients
-    let dir = Point2D::new(angle.sin(), -angle.cos());
-
-    let line_length =
-        (dir.x * size.width.to_f32_px()).abs() + (dir.y * size.height.to_f32_px()).abs();
-
-    let inv_dir_length = 1.0 / (dir.x * dir.x + dir.y * dir.y).sqrt();
-
-    // This is the vector between the center and the ending point; i.e. half
-    // of the distance between the starting point and the ending point.
-    let delta = Vector2D::new(
-        Au::from_f32_px(dir.x * inv_dir_length * line_length / 2.0),
-        Au::from_f32_px(dir.y * inv_dir_length * line_length / 2.0),
-    );
-
-    // This is the length of the gradient line.
-    let length = Au::from_f32_px((delta.x.to_f32_px() * 2.0).hypot(delta.y.to_f32_px() * 2.0));
-
-    let mut stops = convert_gradient_stops(stops, length);
-
-    // Only clamped gradients need to be fixed because in repeating gradients
-    // there is no "first" or "last" stop because they repeat infinitly in
-    // both directions, so the rendering is always correct.
-    if !repeating {
-        fix_gradient_stops(&mut stops);
-    }
-
-    let center = Point2D::new(size.width / 2, size.height / 2);
-
-    display_list::Gradient {
-        start_point: center - delta,
-        end_point: center + delta,
-        stops: stops,
-        repeating: repeating,
-    }
-}
-
-fn convert_radial_gradient(
-    size: Size2D<Au>,
-    stops: &[GradientItem],
-    shape: EndingShape,
-    center: Position,
-    repeating: bool,
-) -> display_list::RadialGradient {
-    let center = Point2D::new(
-        center.horizontal.to_used_value(size.width),
-        center.vertical.to_used_value(size.height),
-    );
-    let radius = match shape {
-        GenericEndingShape::Circle(Circle::Radius(length)) => {
-            let length = Au::from(length);
-            Size2D::new(length, length)
-        },
-        GenericEndingShape::Circle(Circle::Extent(extent)) => {
-            convert_circle_size_keyword(extent, &size, &center)
-        },
-        GenericEndingShape::Ellipse(Ellipse::Radii(x, y)) => {
-            Size2D::new(x.to_used_value(size.width), y.to_used_value(size.height))
-        },
-        GenericEndingShape::Ellipse(Ellipse::Extent(extent)) => {
-            convert_ellipse_size_keyword(extent, &size, &center)
-        },
-    };
-
-    let mut stops = convert_gradient_stops(stops, radius.width);
-    // Repeating gradients have no last stops that can be ignored. So
-    // fixup is not necessary but may actually break the gradient.
-    if !repeating {
-        fix_gradient_stops(&mut stops);
-    }
-
-    display_list::RadialGradient {
-        center: center,
-        radius: radius,
-        stops: stops,
-        repeating: repeating,
-    }
-}
-
-#[inline]
-/// Duplicate the first and last stops if necessary.
-///
-/// Explanation by pyfisch:
-/// If the last stop is at the same position as the previous stop the
-/// last color is ignored by webrender. This differs from the spec
-/// (I think so). The  implementations of Chrome and Firefox seem
-/// to have the same problem but work fine if the position of the last
-/// stop is smaller than 100%. (Otherwise they ignore the last stop.)
-///
-/// Similarly the first stop is duplicated if it is not placed
-/// at the start of the virtual gradient ray.
-fn fix_gradient_stops(stops: &mut Vec<GradientStop>) {
-    if stops.first().unwrap().offset > 0.0 {
-        let color = stops.first().unwrap().color;
-        stops.insert(
-            0,
-            GradientStop {
-                offset: 0.0,
-                color: color,
-            },
-        )
-    }
-    if stops.last().unwrap().offset < 1.0 {
-        let color = stops.last().unwrap().color;
-        stops.push(GradientStop {
-            offset: 1.0,
-            color: color,
-        })
-    }
-}
-
-/// Returns the the distance to the nearest or farthest corner depending on the comperator.
-fn get_distance_to_corner<F>(size: &Size2D<Au>, center: &Point2D<Au>, cmp: F) -> Au
-where
-    F: Fn(Au, Au) -> Au,
-{
-    let dist = get_distance_to_sides(size, center, cmp);
-    Au::from_f32_px(dist.width.to_f32_px().hypot(dist.height.to_f32_px()))
-}
-
-/// Returns the distance to the nearest or farthest sides depending on the comparator.
-///
-/// The first return value is horizontal distance the second vertical distance.
-fn get_distance_to_sides<F>(size: &Size2D<Au>, center: &Point2D<Au>, cmp: F) -> Size2D<Au>
-where
-    F: Fn(Au, Au) -> Au,
-{
-    let top_side = center.y;
-    let right_side = size.width - center.x;
-    let bottom_side = size.height - center.y;
-    let left_side = center.x;
-    Size2D::new(cmp(left_side, right_side), cmp(top_side, bottom_side))
-}
-
-/// Returns the radius for an ellipse with the same ratio as if it was matched to the sides.
-fn get_ellipse_radius<F>(size: &Size2D<Au>, center: &Point2D<Au>, cmp: F) -> Size2D<Au>
-where
-    F: Fn(Au, Au) -> Au,
-{
-    let dist = get_distance_to_sides(size, center, cmp);
-    Size2D::new(
-        dist.width.scale_by(::std::f32::consts::FRAC_1_SQRT_2 * 2.0),
-        dist.height
-            .scale_by(::std::f32::consts::FRAC_1_SQRT_2 * 2.0),
-    )
-}
-
-/// Determines the radius of a circle if it was not explictly provided.
-/// <https://drafts.csswg.org/css-images-3/#typedef-size>
-fn convert_circle_size_keyword(
-    keyword: ShapeExtent,
-    size: &Size2D<Au>,
-    center: &Point2D<Au>,
-) -> Size2D<Au> {
-    let radius = match keyword {
-        ShapeExtent::ClosestSide | ShapeExtent::Contain => {
-            let dist = get_distance_to_sides(size, center, ::std::cmp::min);
-            ::std::cmp::min(dist.width, dist.height)
-        },
-        ShapeExtent::FarthestSide => {
-            let dist = get_distance_to_sides(size, center, ::std::cmp::max);
-            ::std::cmp::max(dist.width, dist.height)
-        },
-        ShapeExtent::ClosestCorner => get_distance_to_corner(size, center, ::std::cmp::min),
-        ShapeExtent::FarthestCorner | ShapeExtent::Cover => {
-            get_distance_to_corner(size, center, ::std::cmp::max)
-        },
-    };
-    Size2D::new(radius, radius)
-}
-
-/// Determines the radius of an ellipse if it was not explictly provided.
-/// <https://drafts.csswg.org/css-images-3/#typedef-size>
-fn convert_ellipse_size_keyword(
-    keyword: ShapeExtent,
-    size: &Size2D<Au>,
-    center: &Point2D<Au>,
-) -> Size2D<Au> {
-    match keyword {
-        ShapeExtent::ClosestSide | ShapeExtent::Contain => {
-            get_distance_to_sides(size, center, ::std::cmp::min)
-        },
-        ShapeExtent::FarthestSide => get_distance_to_sides(size, center, ::std::cmp::max),
-        ShapeExtent::ClosestCorner => get_ellipse_radius(size, center, ::std::cmp::min),
-        ShapeExtent::FarthestCorner | ShapeExtent::Cover => {
-            get_ellipse_radius(size, center, ::std::cmp::max)
-        },
-    }
-}
-
 /// Subtract offsets from a bounding box.
 ///
 /// As an example if the bounds are the border-box and the border
 /// is provided as offsets the result will be the padding-box.
 fn calculate_inner_bounds(mut bounds: Rect<Au>, offsets: SideOffsets2D<Au>) -> Rect<Au> {
     bounds.origin.x += offsets.left;
     bounds.origin.y += offsets.top;
     bounds.size.width -= offsets.horizontal();
@@ -1166,204 +838,16 @@ fn calculate_inner_border_radii(
     radii.top_left.height = cmp::max(Au(0), radii.top_left.height - offsets.top);
     radii.top_right.height = cmp::max(Au(0), radii.top_right.height - offsets.top);
 
     radii.bottom_left.height = cmp::max(Au(0), radii.bottom_left.height - offsets.bottom);
     radii.bottom_right.height = cmp::max(Au(0), radii.bottom_right.height - offsets.bottom);
     radii
 }
 
-/// For a given area and an image compute how big the
-/// image should be displayed on the background.
-fn compute_background_image_size(
-    bg_size: BackgroundSize<LengthOrPercentageOrAuto>,
-    bounds_size: Size2D<Au>,
-    intrinsic_size: Option<Size2D<Au>>,
-) -> Size2D<Au> {
-    match intrinsic_size {
-        None => match bg_size {
-            BackgroundSize::Cover | BackgroundSize::Contain => bounds_size,
-            BackgroundSize::Explicit { width, height } => Size2D::new(
-                MaybeAuto::from_style(width, bounds_size.width)
-                    .specified_or_default(bounds_size.width),
-                MaybeAuto::from_style(height, bounds_size.height)
-                    .specified_or_default(bounds_size.height),
-            ),
-        },
-        Some(own_size) => {
-            // If `image_aspect_ratio` < `bounds_aspect_ratio`, the image is tall; otherwise, it is
-            // wide.
-            let image_aspect_ratio = own_size.width.to_f32_px() / own_size.height.to_f32_px();
-            let bounds_aspect_ratio =
-                bounds_size.width.to_f32_px() / bounds_size.height.to_f32_px();
-            match (bg_size, image_aspect_ratio < bounds_aspect_ratio) {
-                (BackgroundSize::Contain, false) | (BackgroundSize::Cover, true) => Size2D::new(
-                    bounds_size.width,
-                    bounds_size.width.scale_by(image_aspect_ratio.recip()),
-                ),
-
-                (BackgroundSize::Contain, true) | (BackgroundSize::Cover, false) => Size2D::new(
-                    bounds_size.height.scale_by(image_aspect_ratio),
-                    bounds_size.height,
-                ),
-
-                (
-                    BackgroundSize::Explicit {
-                        width,
-                        height: LengthOrPercentageOrAuto::Auto,
-                    },
-                    _,
-                ) => {
-                    let width = MaybeAuto::from_style(width, bounds_size.width)
-                        .specified_or_default(own_size.width);
-                    Size2D::new(width, width.scale_by(image_aspect_ratio.recip()))
-                },
-
-                (
-                    BackgroundSize::Explicit {
-                        width: LengthOrPercentageOrAuto::Auto,
-                        height,
-                    },
-                    _,
-                ) => {
-                    let height = MaybeAuto::from_style(height, bounds_size.height)
-                        .specified_or_default(own_size.height);
-                    Size2D::new(height.scale_by(image_aspect_ratio), height)
-                },
-
-                (BackgroundSize::Explicit { width, height }, _) => Size2D::new(
-                    MaybeAuto::from_style(width, bounds_size.width)
-                        .specified_or_default(own_size.width),
-                    MaybeAuto::from_style(height, bounds_size.height)
-                        .specified_or_default(own_size.height),
-                ),
-            }
-        },
-    }
-}
-
-fn tile_image_round(
-    position: &mut Au,
-    size: &mut Au,
-    absolute_anchor_origin: Au,
-    image_size: &mut Au,
-) {
-    if *size == Au(0) || *image_size == Au(0) {
-        *position = Au(0);
-        *size = Au(0);
-        return;
-    }
-
-    let number_of_tiles = (size.to_f32_px() / image_size.to_f32_px()).round().max(1.0);
-    *image_size = *size / (number_of_tiles as i32);
-    tile_image(position, size, absolute_anchor_origin, *image_size);
-}
-
-fn tile_image_spaced(
-    position: &mut Au,
-    size: &mut Au,
-    tile_spacing: &mut Au,
-    absolute_anchor_origin: Au,
-    image_size: Au,
-) {
-    if *size == Au(0) || image_size == Au(0) {
-        *position = Au(0);
-        *size = Au(0);
-        *tile_spacing = Au(0);
-        return;
-    }
-
-    // Per the spec, if the space available is not enough for two images, just tile as
-    // normal but only display a single tile.
-    if image_size * 2 >= *size {
-        tile_image(position, size, absolute_anchor_origin, image_size);
-        *tile_spacing = Au(0);
-        *size = image_size;
-        return;
-    }
-
-    // Take the box size, remove room for two tiles on the edges, and then calculate how many
-    // other tiles fit in between them.
-    let size_remaining = *size - (image_size * 2);
-    let num_middle_tiles = (size_remaining.to_f32_px() / image_size.to_f32_px()).floor() as i32;
-
-    // Allocate the remaining space as padding between tiles. background-position is ignored
-    // as per the spec, so the position is just the box origin. We are also ignoring
-    // background-attachment here, which seems unspecced when combined with
-    // background-repeat: space.
-    let space_for_middle_tiles = image_size * num_middle_tiles;
-    *tile_spacing = (size_remaining - space_for_middle_tiles) / (num_middle_tiles + 1);
-}
-
-/// Tile an image
-fn tile_image(position: &mut Au, size: &mut Au, absolute_anchor_origin: Au, image_size: Au) {
-    // Avoid division by zero below!
-    // Images with a zero width or height are not displayed.
-    // Therefore the positions do not matter and can be left unchanged.
-    // NOTE: A possible optimization is not to build
-    // display items in this case at all.
-    if image_size == Au(0) {
-        return;
-    }
-
-    let delta_pixels = absolute_anchor_origin - *position;
-    let image_size_px = image_size.to_f32_px();
-    let tile_count = ((delta_pixels.to_f32_px() + image_size_px - 1.0) / image_size_px).floor();
-    let offset = image_size * (tile_count as i32);
-    let new_position = absolute_anchor_origin - offset;
-    *size = *position - new_position + *size;
-    *position = new_position;
-}
-
-/// For either the x or the y axis ajust various values to account for tiling.
-///
-/// This is done separately for both axes because the repeat keywords may differ.
-fn tile_image_axis(
-    repeat: BackgroundRepeatKeyword,
-    position: &mut Au,
-    size: &mut Au,
-    tile_size: &mut Au,
-    tile_spacing: &mut Au,
-    offset: Au,
-    clip_origin: Au,
-    clip_size: Au,
-) {
-    let absolute_anchor_origin = *position + offset;
-    match repeat {
-        BackgroundRepeatKeyword::NoRepeat => {
-            *position += offset;
-            *size = *tile_size;
-        },
-        BackgroundRepeatKeyword::Repeat => {
-            *position = clip_origin;
-            *size = clip_size;
-            tile_image(position, size, absolute_anchor_origin, *tile_size);
-        },
-        BackgroundRepeatKeyword::Space => {
-            tile_image_spaced(
-                position,
-                size,
-                tile_spacing,
-                absolute_anchor_origin,
-                *tile_size,
-            );
-            let combined_tile_size = *tile_size + *tile_spacing;
-            *position = clip_origin;
-            *size = clip_size;
-            tile_image(position, size, absolute_anchor_origin, combined_tile_size);
-        },
-        BackgroundRepeatKeyword::Round => {
-            tile_image_round(position, size, absolute_anchor_origin, tile_size);
-            *position = clip_origin;
-            *size = clip_size;
-            tile_image(position, size, absolute_anchor_origin, *tile_size);
-        },
-    }
-}
-
 impl FragmentDisplayListBuilding for Fragment {
     fn collect_stacking_contexts_for_blocklike_fragment(
         &mut self,
         state: &mut StackingContextCollectionState,
     ) -> bool {
         match self.specific {
             SpecificFragmentInfo::InlineBlock(ref mut block_flow) => {
                 let block_flow = FlowRef::deref_mut(&mut block_flow.flow_ref);
@@ -1902,58 +1386,49 @@ impl FragmentDisplayListBuilding for Fra
                             colors.left.to_gfx_color(),
                         ),
                         style: border_style,
                         radius: build_border_radius(&bounds, border_style_struct),
                     }),
                 })));
             },
             Either::Second(Image::Gradient(ref gradient)) => {
-                match gradient.kind {
+                let border_widths = border.to_physical(style.writing_mode);
+                let details = match gradient.kind {
                     GradientKind::Linear(angle_or_corner) => {
-                        let grad = convert_linear_gradient(
-                            bounds.size,
-                            &gradient.items[..],
-                            angle_or_corner,
-                            gradient.repeating,
-                        );
-
-                        state.add_display_item(DisplayItem::Border(Box::new(BorderDisplayItem {
-                            base: base,
-                            border_widths: border.to_physical(style.writing_mode),
-                            details: BorderDetails::Gradient(display_list::GradientBorder {
-                                gradient: grad,
-
-                                // TODO(gw): Support border-image-outset
-                                outset: SideOffsets2D::zero(),
-                            }),
-                        })));
+                        BorderDetails::Gradient(display_list::GradientBorder {
+                            gradient: convert_linear_gradient(
+                                bounds.size,
+                                &gradient.items[..],
+                                angle_or_corner,
+                                gradient.repeating,
+                            ),
+                            // TODO(gw): Support border-image-outset
+                            outset: SideOffsets2D::zero(),
+                        })
                     },
                     GradientKind::Radial(shape, center, _angle) => {
-                        let grad = convert_radial_gradient(
-                            bounds.size,
-                            &gradient.items[..],
-                            shape,
-                            center,
-                            gradient.repeating,
-                        );
-                        state.add_display_item(DisplayItem::Border(Box::new(BorderDisplayItem {
-                            base: base,
-                            border_widths: border.to_physical(style.writing_mode),
-                            details: BorderDetails::RadialGradient(
-                                display_list::RadialGradientBorder {
-                                    gradient: grad,
-
-                                    // TODO(gw): Support border-image-outset
-                                    outset: SideOffsets2D::zero(),
-                                },
+                        BorderDetails::RadialGradient(display_list::RadialGradientBorder {
+                            gradient: convert_radial_gradient(
+                                bounds.size,
+                                &gradient.items[..],
+                                shape,
+                                center,
+                                gradient.repeating,
                             ),
-                        })));
+                            // TODO(gw): Support border-image-outset
+                            outset: SideOffsets2D::zero(),
+                        })
                     },
-                }
+                };
+                state.add_display_item(DisplayItem::Border(Box::new(BorderDisplayItem {
+                    base,
+                    border_widths,
+                    details,
+                })));
             },
             Either::Second(Image::PaintWorklet(ref paint_worklet)) => {
                 // TODO: this size should be increased by border-image-outset
                 let size = self.border_box.size.to_physical(style.writing_mode);
                 let webrender_image =
                     self.get_webrender_image_for_paint_worklet(state, style, paint_worklet, size);
                 if let Some(webrender_image) = webrender_image {
                     let corners = &border_style_struct.border_image_slice.offsets;
@@ -2791,22 +2266,19 @@ impl FragmentDisplayListBuilding for Fra
 
         state.add_display_item(DisplayItem::Line(Box::new(LineDisplayItem {
             base: base,
             color: color.to_gfx_color(),
             style: LineStyle::Solid,
         })));
     }
 
-    fn unique_id(&self, id_type: IdType) -> u64 {
+    fn unique_id(&self) -> u64 {
         let fragment_type = self.fragment_type();
-        let id = match id_type {
-            IdType::StackingContext | IdType::OverflowClip => self.node.id() as usize,
-            IdType::CSSClip => self as *const _ as usize,
-        };
+        let id = self.node.id() as usize;
         combine_id_with_fragment_type(id, fragment_type) as u64
     }
 
     fn fragment_type(&self) -> FragmentType {
         match self.pseudo {
             PseudoElementType::Normal => FragmentType::FragmentBody,
             PseudoElementType::Before(_) => FragmentType::BeforePseudoContent,
             PseudoElementType::After(_) => FragmentType::AfterPseudoContent,
@@ -3260,17 +2732,17 @@ impl BlockFlowDisplayListBuilding for Bl
         if !has_scrolling_overflow {
             return;
         }
 
         // If we already have a scroll root for this flow, just return. This can happen
         // when fragments map to more than one flow, such as in the case of table
         // wrappers. We just accept the first scroll root in that case.
         let new_clip_scroll_node_id = ClipId::new(
-            self.fragment.unique_id(IdType::OverflowClip),
+            self.fragment.unique_id(),
             state.pipeline_id.to_webrender(),
         );
 
         let sensitivity = if StyleOverflow::Hidden == self.fragment.style.get_box().overflow_x &&
             StyleOverflow::Hidden == self.fragment.style.get_box().overflow_y
         {
             ScrollSensitivity::Script
         } else {
@@ -3706,38 +3178,16 @@ impl ComputedValuesCursorUtility for Com
         ) {
             (PointerEvents::None, _) => None,
             (PointerEvents::Auto, cursor::Keyword::Auto) => Some(default_cursor),
             (PointerEvents::Auto, cursor::Keyword::Cursor(cursor)) => Some(cursor),
         }
     }
 }
 
-// A helper data structure for gradients.
-#[derive(Clone, Copy)]
-struct StopRun {
-    start_offset: f32,
-    end_offset: f32,
-    start_index: usize,
-    stop_count: usize,
-}
-
-fn position_to_offset(position: LengthOrPercentage, total_length: Au) -> f32 {
-    if total_length == Au(0) {
-        return 0.0;
-    }
-    match position {
-        LengthOrPercentage::Length(l) => l.to_i32_au() as f32 / total_length.0 as f32,
-        LengthOrPercentage::Percentage(percentage) => percentage.0 as f32,
-        LengthOrPercentage::Calc(calc) => {
-            calc.to_used_value(Some(total_length)).unwrap().0 as f32 / total_length.0 as f32
-        },
-    }
-}
-
 /// Adjusts `content_rect` as necessary for the given spread, and blur so that the resulting
 /// bounding rect contains all of a shadow's ink.
 fn shadow_bounds(content_rect: &Rect<Au>, blur: Au, spread: Au) -> Rect<Au> {
     let inflation = spread + blur * BLUR_INFLATION_FACTOR;
     content_rect.inflate(inflation, inflation)
 }
 
 /// Adjusts borders as appropriate to account for a fragment's status as the
new file mode 100644
--- /dev/null
+++ b/servo/components/layout/display_list/mod.rs
@@ -0,0 +1,18 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+pub use self::builder::BlockFlowDisplayListBuilding;
+pub use self::builder::BorderPaintingMode;
+pub use self::builder::DisplayListBuildState;
+pub use self::builder::FlexFlowDisplayListBuilding;
+pub use self::builder::InlineFlowDisplayListBuilding;
+pub use self::builder::ListItemFlowDisplayListBuilding;
+pub use self::builder::StackingContextCollectionFlags;
+pub use self::builder::StackingContextCollectionState;
+pub use self::builder::ToGfxColor;
+pub use self::webrender_helpers::WebRenderDisplayListConverter;
+
+mod background;
+mod builder;
+mod webrender_helpers;
rename from servo/components/layout/webrender_helpers.rs
rename to servo/components/layout/display_list/webrender_helpers.rs
--- a/servo/components/layout/flex.rs
+++ b/servo/components/layout/flex.rs
@@ -4,18 +4,18 @@
 
 //! Layout for elements with a CSS `display` property of `flex`.
 
 #![deny(unsafe_code)]
 
 use app_units::{Au, MAX_AU};
 use block::{AbsoluteAssignBSizesTraversal, BlockFlow, MarginsMayCollapseFlag};
 use context::LayoutContext;
-use display_list_builder::{DisplayListBuildState, FlexFlowDisplayListBuilding};
-use display_list_builder::StackingContextCollectionState;
+use display_list::{DisplayListBuildState, FlexFlowDisplayListBuilding};
+use display_list::StackingContextCollectionState;
 use euclid::Point2D;
 use floats::FloatKind;
 use flow::{Flow, FlowClass, GetBaseFlow, ImmutableFlowUtils, OpaqueFlow, FlowFlags};
 use fragment::{Fragment, FragmentBorderBoxIterator, Overflow};
 use layout_debug;
 use model::{AdjoiningMargins, CollapsibleMargins};
 use model::{IntrinsicISizes, MaybeAuto, SizeConstraint};
 use std::cmp::{max, min};
--- a/servo/components/layout/flow.rs
+++ b/servo/components/layout/flow.rs
@@ -23,17 +23,17 @@
 //! * `InlineFlow`: A flow that establishes an inline context. It has a flat list of child
 //!   fragments/flows that are subject to inline layout and line breaking and structs to represent
 //!   line breaks and mapping to CSS boxes, for the purpose of handling `getClientRects()` and
 //!   similar methods.
 
 use app_units::Au;
 use block::{BlockFlow, FormattingContextType};
 use context::LayoutContext;
-use display_list_builder::{DisplayListBuildState, StackingContextCollectionState};
+use display_list::{DisplayListBuildState, StackingContextCollectionState};
 use euclid::{Transform3D, Point2D, Vector2D, Rect, Size2D};
 use flex::FlexFlow;
 use floats::{Floats, SpeculatedFloatPlacement};
 use flow_list::{FlowList, FlowListIterator, MutFlowListIterator};
 use flow_ref::{FlowRef, WeakFlowRef};
 use fragment::{CoordinateSystem, Fragment, FragmentBorderBoxIterator, Overflow};
 use gfx::display_list::ClippingAndScrolling;
 use gfx_traits::StackingContextId;
--- a/servo/components/layout/inline.rs
+++ b/servo/components/layout/inline.rs
@@ -3,18 +3,18 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #![deny(unsafe_code)]
 
 use ServoArc;
 use app_units::{Au, MIN_AU};
 use block::AbsoluteAssignBSizesTraversal;
 use context::LayoutContext;
-use display_list_builder::{DisplayListBuildState, InlineFlowDisplayListBuilding};
-use display_list_builder::StackingContextCollectionState;
+use display_list::{DisplayListBuildState, InlineFlowDisplayListBuilding};
+use display_list::StackingContextCollectionState;
 use euclid::{Point2D, Size2D};
 use floats::{FloatKind, Floats, PlacementInfo};
 use flow::{BaseFlow, Flow, FlowClass, ForceNonfloatedFlag};
 use flow::{FlowFlags, EarlyAbsolutePositionInfo, GetBaseFlow, OpaqueFlow};
 use flow_ref::FlowRef;
 use fragment::{CoordinateSystem, Fragment, FragmentBorderBoxIterator, Overflow};
 use fragment::FragmentFlags;
 use fragment::SpecificFragmentInfo;
--- a/servo/components/layout/lib.rs
+++ b/servo/components/layout/lib.rs
@@ -46,17 +46,17 @@ extern crate webrender_api;
 #[macro_use]
 pub mod layout_debug;
 
 pub mod animation;
 mod block;
 pub mod construct;
 pub mod context;
 pub mod data;
-pub mod display_list_builder;
+pub mod display_list;
 mod flex;
 mod floats;
 pub mod flow;
 mod flow_list;
 pub mod flow_ref;
 mod fragment;
 mod generated_content;
 pub mod incremental;
@@ -74,17 +74,16 @@ mod table;
 mod table_caption;
 mod table_cell;
 mod table_colgroup;
 mod table_row;
 mod table_rowgroup;
 mod table_wrapper;
 mod text;
 pub mod traversal;
-pub mod webrender_helpers;
 pub mod wrapper;
 
 // For unit tests:
 pub use fragment::Fragment;
 pub use fragment::SpecificFragmentInfo;
 pub use self::data::LayoutData;
 
 // We can't use servo_arc for everything in layout, because the Flow stuff uses
--- a/servo/components/layout/list_item.rs
+++ b/servo/components/layout/list_item.rs
@@ -5,18 +5,18 @@
 //! Layout for elements with a CSS `display` property of `list-item`. These elements consist of a
 //! block and an extra inline fragment for the marker.
 
 #![deny(unsafe_code)]
 
 use app_units::Au;
 use block::BlockFlow;
 use context::{LayoutContext, with_thread_local_font_context};
-use display_list_builder::{DisplayListBuildState, ListItemFlowDisplayListBuilding};
-use display_list_builder::StackingContextCollectionState;
+use display_list::{DisplayListBuildState, ListItemFlowDisplayListBuilding};
+use display_list::StackingContextCollectionState;
 use euclid::Point2D;
 use floats::FloatKind;
 use flow::{Flow, FlowClass, OpaqueFlow};
 use fragment::{CoordinateSystem, Fragment, FragmentBorderBoxIterator, GeneratedContentInfo};
 use fragment::Overflow;
 use generated_content;
 use inline::InlineFlow;
 use style::computed_values::list_style_type::T as ListStyleType;
--- a/servo/components/layout/multicol.rs
+++ b/servo/components/layout/multicol.rs
@@ -5,17 +5,17 @@
 //! CSS Multi-column layout http://dev.w3.org/csswg/css-multicol/
 
 #![deny(unsafe_code)]
 
 use ServoArc;
 use app_units::Au;
 use block::BlockFlow;
 use context::LayoutContext;
-use display_list_builder::{DisplayListBuildState, StackingContextCollectionState};
+use display_list::{DisplayListBuildState, StackingContextCollectionState};
 use euclid::{Point2D, Vector2D};
 use floats::FloatKind;
 use flow::{Flow, FlowClass, OpaqueFlow, FragmentationContext, GetBaseFlow};
 use fragment::{Fragment, FragmentBorderBoxIterator, Overflow};
 use gfx_traits::print_tree::PrintTree;
 use std::cmp::{min, max};
 use std::fmt;
 use std::sync::Arc;
--- a/servo/components/layout/sequential.rs
+++ b/servo/components/layout/sequential.rs
@@ -1,17 +1,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 //! Implements sequential traversals over the DOM and flow trees.
 
 use app_units::Au;
 use context::LayoutContext;
-use display_list_builder::{DisplayListBuildState, StackingContextCollectionState};
+use display_list::{DisplayListBuildState, StackingContextCollectionState};
 use euclid::{Point2D, Vector2D};
 use floats::SpeculatedFloatPlacement;
 use flow::{Flow, ImmutableFlowUtils, FlowFlags, GetBaseFlow};
 use fragment::{FragmentBorderBoxIterator, CoordinateSystem};
 use generated_content::ResolveGeneratedContent;
 use incremental::RelayoutMode;
 use servo_config::opts;
 use style::servo::restyle_damage::ServoRestyleDamage;
--- a/servo/components/layout/table.rs
+++ b/servo/components/layout/table.rs
@@ -5,18 +5,18 @@
 //! CSS table formatting contexts.
 
 #![deny(unsafe_code)]
 
 use app_units::Au;
 use block::{BlockFlow, CandidateBSizeIterator, ISizeAndMarginsComputer};
 use block::{ISizeConstraintInput, ISizeConstraintSolution};
 use context::LayoutContext;
-use display_list_builder::{BlockFlowDisplayListBuilding, BorderPaintingMode};
-use display_list_builder::{DisplayListBuildState, StackingContextCollectionFlags, StackingContextCollectionState};
+use display_list::{BlockFlowDisplayListBuilding, BorderPaintingMode};
+use display_list::{DisplayListBuildState, StackingContextCollectionFlags, StackingContextCollectionState};
 use euclid::Point2D;
 use flow::{BaseFlow, EarlyAbsolutePositionInfo, Flow, FlowClass, ImmutableFlowUtils, GetBaseFlow, OpaqueFlow};
 use flow_list::MutFlowListIterator;
 use fragment::{Fragment, FragmentBorderBoxIterator, Overflow};
 use gfx_traits::print_tree::PrintTree;
 use layout_debug;
 use model::{IntrinsicISizes, IntrinsicISizesContribution, MaybeAuto};
 use std::cmp;
--- a/servo/components/layout/table_caption.rs
+++ b/servo/components/layout/table_caption.rs
@@ -4,18 +4,18 @@
 
 //! CSS table formatting contexts.
 
 #![deny(unsafe_code)]
 
 use app_units::Au;
 use block::BlockFlow;
 use context::LayoutContext;
-use display_list_builder::{BlockFlowDisplayListBuilding, DisplayListBuildState};
-use display_list_builder::{StackingContextCollectionFlags, StackingContextCollectionState};
+use display_list::{BlockFlowDisplayListBuilding, DisplayListBuildState};
+use display_list::{StackingContextCollectionFlags, StackingContextCollectionState};
 use euclid::Point2D;
 use flow::{Flow, FlowClass, OpaqueFlow};
 use fragment::{Fragment, FragmentBorderBoxIterator, Overflow};
 use gfx_traits::print_tree::PrintTree;
 use std::fmt;
 use style::logical_geometry::LogicalSize;
 use style::properties::ComputedValues;
 
--- a/servo/components/layout/table_cell.rs
+++ b/servo/components/layout/table_cell.rs
@@ -4,19 +4,19 @@
 
 //! CSS table formatting contexts.
 
 #![deny(unsafe_code)]
 
 use app_units::Au;
 use block::{BlockFlow, ISizeAndMarginsComputer, MarginsMayCollapseFlag};
 use context::LayoutContext;
-use display_list_builder::{BlockFlowDisplayListBuilding, BorderPaintingMode};
-use display_list_builder::{DisplayListBuildState, StackingContextCollectionFlags};
-use display_list_builder::StackingContextCollectionState;
+use display_list::{BlockFlowDisplayListBuilding, BorderPaintingMode};
+use display_list::{DisplayListBuildState, StackingContextCollectionFlags};
+use display_list::StackingContextCollectionState;
 use euclid::{Point2D, Rect, SideOffsets2D, Size2D};
 use flow::{Flow, FlowClass, FlowFlags, GetBaseFlow, OpaqueFlow};
 use fragment::{Fragment, FragmentBorderBoxIterator, Overflow};
 use gfx_traits::print_tree::PrintTree;
 use layout_debug;
 use model::MaybeAuto;
 use script_layout_interface::wrapper_traits::ThreadSafeLayoutNode;
 use std::fmt;
--- a/servo/components/layout/table_colgroup.rs
+++ b/servo/components/layout/table_colgroup.rs
@@ -3,17 +3,17 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 //! CSS table formatting contexts.
 
 #![deny(unsafe_code)]
 
 use app_units::Au;
 use context::LayoutContext;
-use display_list_builder::{DisplayListBuildState, StackingContextCollectionState};
+use display_list::{DisplayListBuildState, StackingContextCollectionState};
 use euclid::Point2D;
 use flow::{BaseFlow, Flow, FlowClass, ForceNonfloatedFlag, OpaqueFlow};
 use fragment::{Fragment, FragmentBorderBoxIterator, Overflow, SpecificFragmentInfo};
 use layout_debug;
 use std::cmp::max;
 use std::fmt;
 use style::logical_geometry::LogicalSize;
 use style::properties::ComputedValues;
--- a/servo/components/layout/table_row.rs
+++ b/servo/components/layout/table_row.rs
@@ -4,19 +4,19 @@
 
 //! CSS table formatting contexts.
 
 #![deny(unsafe_code)]
 
 use app_units::Au;
 use block::{BlockFlow, ISizeAndMarginsComputer};
 use context::LayoutContext;
-use display_list_builder::{BlockFlowDisplayListBuilding, BorderPaintingMode};
-use display_list_builder::{DisplayListBuildState, StackingContextCollectionFlags};
-use display_list_builder::StackingContextCollectionState;
+use display_list::{BlockFlowDisplayListBuilding, BorderPaintingMode};
+use display_list::{DisplayListBuildState, StackingContextCollectionFlags};
+use display_list::StackingContextCollectionState;
 use euclid::Point2D;
 use flow::{EarlyAbsolutePositionInfo, Flow, FlowClass, ImmutableFlowUtils, GetBaseFlow, OpaqueFlow};
 use flow_list::MutFlowListIterator;
 use fragment::{Fragment, FragmentBorderBoxIterator, Overflow};
 use gfx_traits::print_tree::PrintTree;
 use layout_debug;
 use model::MaybeAuto;
 use serde::{Serialize, Serializer};
--- a/servo/components/layout/table_rowgroup.rs
+++ b/servo/components/layout/table_rowgroup.rs
@@ -4,18 +4,18 @@
 
 //! CSS table formatting contexts.
 
 #![deny(unsafe_code)]
 
 use app_units::Au;
 use block::{BlockFlow, ISizeAndMarginsComputer};
 use context::LayoutContext;
-use display_list_builder::{BlockFlowDisplayListBuilding, DisplayListBuildState};
-use display_list_builder::{StackingContextCollectionFlags, StackingContextCollectionState};
+use display_list::{BlockFlowDisplayListBuilding, DisplayListBuildState};
+use display_list::{StackingContextCollectionFlags, StackingContextCollectionState};
 use euclid::Point2D;
 use flow::{Flow, FlowClass, OpaqueFlow};
 use fragment::{Fragment, FragmentBorderBoxIterator, Overflow};
 use gfx_traits::print_tree::PrintTree;
 use layout_debug;
 use serde::{Serialize, Serializer};
 use std::fmt;
 use std::iter::{IntoIterator, Iterator, Peekable};
--- a/servo/components/layout/table_wrapper.rs
+++ b/servo/components/layout/table_wrapper.rs
@@ -12,18 +12,18 @@
 //! Hereafter this document is referred to as INTRINSIC.
 
 #![deny(unsafe_code)]
 
 use app_units::Au;
 use block::{AbsoluteNonReplaced, BlockFlow, FloatNonReplaced, ISizeAndMarginsComputer, ISizeConstraintInput};
 use block::{ISizeConstraintSolution, MarginsMayCollapseFlag};
 use context::LayoutContext;
-use display_list_builder::{BlockFlowDisplayListBuilding, DisplayListBuildState, StackingContextCollectionFlags};
-use display_list_builder::StackingContextCollectionState;
+use display_list::{BlockFlowDisplayListBuilding, DisplayListBuildState, StackingContextCollectionFlags};
+use display_list::StackingContextCollectionState;
 use euclid::Point2D;
 use floats::FloatKind;
 use flow::{Flow, FlowClass, ImmutableFlowUtils, FlowFlags, OpaqueFlow};
 use fragment::{Fragment, FragmentBorderBoxIterator, Overflow};
 use gfx_traits::print_tree::PrintTree;
 use model::MaybeAuto;
 use std::cmp::{max, min};
 use std::fmt;
--- a/servo/components/layout/traversal.rs
+++ b/servo/components/layout/traversal.rs
@@ -1,17 +1,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 //! Traversals over the DOM and flow trees, running the layout computations.
 
 use construct::FlowConstructor;
 use context::LayoutContext;
-use display_list_builder::DisplayListBuildState;
+use display_list::DisplayListBuildState;
 use flow::{FlowFlags, Flow, GetBaseFlow, ImmutableFlowUtils};
 use script_layout_interface::wrapper_traits::{LayoutNode, ThreadSafeLayoutNode};
 use servo_config::opts;
 use style::context::{SharedStyleContext, StyleContext};
 use style::data::ElementData;
 use style::dom::{NodeInfo, TElement, TNode};
 use style::selector_parser::RestyleDamage;
 use style::servo::restyle_damage::ServoRestyleDamage;
--- a/servo/components/layout_thread/lib.rs
+++ b/servo/components/layout_thread/lib.rs
@@ -64,29 +64,28 @@ use gfx_traits::{Epoch, node_id_from_cli
 use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
 use ipc_channel::router::ROUTER;
 use layout::animation;
 use layout::construct::ConstructionResult;
 use layout::context::LayoutContext;
 use layout::context::RegisteredPainter;
 use layout::context::RegisteredPainters;
 use layout::context::malloc_size_of_persistent_local_context;
-use layout::display_list_builder::ToGfxColor;
+use layout::display_list::{ToGfxColor, WebRenderDisplayListConverter};
 use layout::flow::{Flow, GetBaseFlow, ImmutableFlowUtils, MutableOwnedFlowUtils};
 use layout::flow_ref::FlowRef;
 use layout::incremental::{LayoutDamageComputation, RelayoutMode, SpecialRestyleDamage};
 use layout::layout_debug;
 use layout::parallel;
 use layout::query::{LayoutRPCImpl, LayoutThreadData, process_content_box_request, process_content_boxes_request};
 use layout::query::{process_margin_style_query, process_node_overflow_request, process_resolved_style_request};
 use layout::query::{process_node_geometry_request, process_node_scroll_area_request};
 use layout::query::{process_node_scroll_root_id_request, process_offset_parent_query};
 use layout::sequential;
 use layout::traversal::{ComputeStackingRelativePositions, PreorderFlowTraversal, RecalcStyleAndConstructFlows};
-use layout::webrender_helpers::WebRenderDisplayListConverter;
 use layout::wrapper::LayoutNodeLayoutData;
 use layout_traits::LayoutThreadFactory;
 use libc::c_void;
 use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
 use metrics::{PaintTimeMetrics, ProfilerMetadataFactory, ProgressiveWebMetric};
 use msg::constellation_msg::PipelineId;
 use msg::constellation_msg::TopLevelBrowsingContextId;
 use net_traits::image_cache::{ImageCache, UsePlaceholder};
--- a/servo/components/net/image_cache.rs
+++ b/servo/components/net/image_cache.rs
@@ -29,26 +29,16 @@ use webrender_api;
 /// MAYBE(Yoric):
 ///     * For faster lookups, it might be useful to store the LoadKey in the
 ///       DOM once we have performed a first load.
 
 // ======================================================================
 // Helper functions.
 // ======================================================================
 
-fn convert_format(format: PixelFormat) -> webrender_api::ImageFormat {
-    match format {
-        PixelFormat::K8 | PixelFormat::KA8 => {
-            panic!("Not support by webrender yet");
-        }
-        PixelFormat::RGB8 => webrender_api::ImageFormat::RGB8,
-        PixelFormat::BGRA8 => webrender_api::ImageFormat::BGRA8,
-    }
-}
-
 fn decode_bytes_sync(key: LoadKey, bytes: &[u8]) -> DecoderMsg {
     let image = load_from_memory(bytes);
     DecoderMsg {
         key: key,
         image: image
     }
 }
 
@@ -58,75 +48,76 @@ fn get_placeholder_image(webrender_api: 
     file.read_to_end(&mut image_data)?;
     let mut image = load_from_memory(&image_data).unwrap();
     set_webrender_image_key(webrender_api, &mut image);
     Ok(Arc::new(image))
 }
 
 fn set_webrender_image_key(webrender_api: &webrender_api::RenderApi, image: &mut Image) {
     if image.id.is_some() { return; }
-    let format = convert_format(image.format);
     let mut bytes = Vec::new();
-    bytes.extend_from_slice(&*image.bytes);
-    if format == webrender_api::ImageFormat::BGRA8 {
-        premultiply(bytes.as_mut_slice());
-    }
+    let is_opaque = match image.format {
+        PixelFormat::BGRA8 => {
+            bytes.extend_from_slice(&*image.bytes);
+            premultiply(bytes.as_mut_slice())
+        }
+        PixelFormat::RGB8 => {
+            for bgr in image.bytes.chunks(3) {
+                bytes.extend_from_slice(&[
+                    bgr[2],
+                    bgr[1],
+                    bgr[0],
+                    0xff
+                ]);
+            }
+
+            true
+        }
+        PixelFormat::K8 | PixelFormat::KA8 => {
+            panic!("Not support by webrender yet");
+        }
+    };
     let descriptor = webrender_api::ImageDescriptor {
         width: image.width,
         height: image.height,
         stride: None,
-        format: format,
+        format: webrender_api::ImageFormat::BGRA8,
         offset: 0,
-        is_opaque: is_image_opaque(format, &bytes),
+        is_opaque,
     };
     let data = webrender_api::ImageData::new(bytes);
     let image_key = webrender_api.generate_image_key();
     let mut updates = webrender_api::ResourceUpdates::new();
     updates.add_image(image_key, descriptor, data, None);
     webrender_api.update_resources(updates);
     image.id = Some(image_key);
 }
 
-// TODO(gw): This is a port of the old is_image_opaque code from WR.
-//           Consider using SIMD to speed this up if it shows in profiles.
-fn is_image_opaque(format: webrender_api::ImageFormat, bytes: &[u8]) -> bool {
-    match format {
-        webrender_api::ImageFormat::BGRA8 => {
-            let mut is_opaque = true;
-            for i in 0..(bytes.len() / 4) {
-                if bytes[i * 4 + 3] != 255 {
-                    is_opaque = false;
-                    break;
-                }
-            }
-            is_opaque
-        }
-        webrender_api::ImageFormat::RGB8 => true,
-        webrender_api::ImageFormat::RG8 => true,
-        webrender_api::ImageFormat::A8 => false,
-        webrender_api::ImageFormat::Invalid | webrender_api::ImageFormat::RGBAF32 => unreachable!(),
-    }
-}
-
-fn premultiply(data: &mut [u8]) {
+// Returns true if the image was found to be
+// completely opaque.
+fn premultiply(data: &mut [u8]) -> bool {
+    let mut is_opaque = true;
     let length = data.len();
 
     let mut i = 0;
     while i < length {
         let b = data[i + 0] as u32;
         let g = data[i + 1] as u32;
         let r = data[i + 2] as u32;
         let a = data[i + 3] as u32;
 
         data[i + 0] = (b * a / 255) as u8;
         data[i + 1] = (g * a / 255) as u8;
         data[i + 2] = (r * a / 255) as u8;
 
         i += 4;
+        is_opaque = is_opaque && a == 255;
     }
+
+    is_opaque
 }
 
 // ======================================================================
 // Aux structs and enums.
 // ======================================================================
 
 // Represents all the currently pending loads/decodings. For
 // performance reasons, loads are indexed by a dedicated load key.
--- a/servo/components/script/dom/bindings/str.rs
+++ b/servo/components/script/dom/bindings/str.rs
@@ -297,16 +297,30 @@ impl DOMString {
     }
 
     /// A valid week string should be like {YYYY}-W{WW}, such as "2017-W52"
     /// YYYY must be four or more digits, WW both must be two digits
     /// https://html.spec.whatwg.org/multipage/#valid-week-string
     pub fn is_valid_week_string(&self) -> bool {
         parse_week_string(&*self.0).is_ok()
     }
+
+    /// A valid normalized local date and time string should be "{date}T{time}"
+    /// where date and time are both valid, and the time string must be as short as possible
+    /// https://html.spec.whatwg.org/multipage/#valid-normalised-local-date-and-time-string
+    pub fn convert_valid_normalized_local_date_and_time_string(&mut self) -> Result<(), ()> {
+        let ((year, month, day), (hour, minute, second)) = parse_local_date_and_time_string(&*self.0)?;
+        if second == 0.0 {
+            self.0 = format!("{:04}-{:02}-{:02}T{:02}:{:02}", year, month, day, hour, minute);
+        } else {
+            self.0 = format!("{:04}-{:02}-{:02}T{:02}:{:02}:{}", year, month, day, hour, minute, second);
+        }
+        Ok(())
+    }
+
 }
 
 impl Borrow<str> for DOMString {
     #[inline]
     fn borrow(&self) -> &str {
         &self.0
     }
 }
@@ -536,16 +550,94 @@ fn parse_date_component(value: &str) -> 
     if day_int == 0 || day_int > max_day {
         return Err(());
     }
 
     // Step 6
     Ok((year_int, month_int, day_int))
 }
 
+/// https://html.spec.whatwg.org/multipage/#parse-a-time-component
+fn parse_time_component(value: &str) -> Result<(u32, u32, f32), ()> {
+    // Step 1
+    let mut iterator = value.split(':');
+    let hour = iterator.next().ok_or(())?;
+    if hour.len() != 2 {
+        return Err(());
+    }
+    let hour_int = hour.parse::<u32>().map_err(|_| ())?;
+
+    // Step 2
+    if hour_int > 23 {
+        return Err(());
+    }
+
+    // Step 3, 4
+    let minute = iterator.next().ok_or(())?;
+    if minute.len() != 2 {
+        return Err(());
+    }
+    let minute_int = minute.parse::<u32>().map_err(|_| ())?;
+
+    // Step 5
+    if minute_int > 59 {
+        return Err(());
+    }
+
+    // Step 6, 7
+    let second_float = match iterator.next() {
+        Some(second) => {
+            let mut second_iterator = second.split('.');
+            if second_iterator.next().ok_or(())?.len() != 2 {
+                return Err(());
+            }
+            match second_iterator.next() {
+                Some(second_last) => {
+                    if second_last.len() > 3 {
+                        return Err(());
+                    }
+                },
+                None => {}
+            }
+
+            second.parse::<f32>().map_err(|_| ())?
+        },
+        None => 0.0
+    };
+
+    // Step 8
+    Ok((hour_int, minute_int, second_float))
+}
+
+// https://html.spec.whatwg.org/multipage/#parse-a-local-date-and-time-string
+fn parse_local_date_and_time_string(value: &str) ->  Result<((u32, u32, u32), (u32, u32, f32)), ()> {
+    // Step 1, 2, 4
+    let mut iterator = if value.contains('T') {
+        value.split('T')
+    } else {
+        value.split(' ')
+    };
+
+    // Step 3
+    let date = iterator.next().ok_or(())?;
+    let date_tuple = parse_date_component(date)?;
+
+    // Step 5
+    let time = iterator.next().ok_or(())?;
+    let time_tuple = parse_time_component(time)?;
+
+    // Step 6
+    if iterator.next().is_some() {
+        return Err(());
+    }
+
+    // Step 7, 8, 9
+    Ok((date_tuple, time_tuple))
+}
+
 fn max_day_in_month(year_num: u32, month_num: u32) -> Result<u32, ()> {
     match month_num {
         1|3|5|7|8|10|12 => Ok(31),
         4|6|9|11 => Ok(30),
         2 => {
             if is_leap_year(year_num) {
                 Ok(29)
             } else {
--- a/servo/components/script/dom/htmlinputelement.rs
+++ b/servo/components/script/dom/htmlinputelement.rs
@@ -991,29 +991,29 @@ impl HTMLInputElement {
                 let mut textinput = self.textinput.borrow_mut();
                 let content = textinput.single_line_content_mut();
                 content.strip_newlines();
                 content.strip_leading_and_trailing_ascii_whitespace();
             }
             InputType::Date => {
                 let mut textinput = self.textinput.borrow_mut();
                 if !textinput.single_line_content().is_valid_date_string() {
-                    *textinput.single_line_content_mut() = "".into();
+                    textinput.single_line_content_mut().clear();
                 }
             }
             InputType::Month => {
                 let mut textinput = self.textinput.borrow_mut();
                 if !textinput.single_line_content().is_valid_month_string() {
-                    *textinput.single_line_content_mut() = "".into();
+                    textinput.single_line_content_mut().clear();
                 }
             }
             InputType::Week => {
                 let mut textinput = self.textinput.borrow_mut();
                 if !textinput.single_line_content().is_valid_week_string() {
-                    *textinput.single_line_content_mut() = "".into();
+                    textinput.single_line_content_mut().clear();
                 }
             }
             InputType::Color => {
                 let mut textinput = self.textinput.borrow_mut();
 
                 let is_valid = {
                     let content = textinput.single_line_content();
                     let mut chars = content.chars();
@@ -1029,18 +1029,25 @@ impl HTMLInputElement {
                     content.make_ascii_lowercase();
                 } else {
                     textinput.set_content("#000000".into());
                 }
             }
             InputType::Time => {
                 let mut textinput = self.textinput.borrow_mut();
 
-                if ! textinput.single_line_content().is_valid_time_string() {
-                    *textinput.single_line_content_mut() = "".into();
+                if !textinput.single_line_content().is_valid_time_string() {
+                    textinput.single_line_content_mut().clear();
+                }
+            }
+            InputType::DatetimeLocal => {
+                let mut textinput = self.textinput.borrow_mut();
+                if textinput.single_line_content_mut()
+                    .convert_valid_normalized_local_date_and_time_string().is_err() {
+                        textinput.single_line_content_mut().clear();
                 }
             }
             // TODO: Implement more value sanitization algorithms for different types of inputs
             _ => ()
         }
     }
 }
 
--- a/testing/web-platform/tests/tools/lint/lint.py
+++ b/testing/web-platform/tests/tools/lint/lint.py
@@ -717,17 +717,18 @@ def output_error_count(error_count):
 def changed_files(wpt_root):
     revish = testfiles.get_revish(revish=None)
     changed, _ = testfiles.files_changed(revish, set(), include_uncommitted=True, include_new=True)
     return [os.path.relpath(item, wpt_root) for item in changed]
 
 
 def lint_paths(kwargs, wpt_root):
     if kwargs.get("paths"):
-        paths = kwargs["paths"]
+        r = os.path.realpath(wpt_root)
+        paths = [os.path.relpath(os.path.realpath(x), r) for x in kwargs["paths"]]
     elif kwargs["all"]:
         paths = list(all_filesystem_paths(wpt_root))
     else:
         changed_paths = changed_files(wpt_root)
         force_all = False
         # If we changed the lint itself ensure that we retest everything
         for path in changed_paths:
             path = path.replace(os.path.sep, "/")
new file mode 100644
--- /dev/null
+++ b/third_party/rust/mp4parse_fallible/.cargo-checksum.json
@@ -0,0 +1,1 @@
+{"files":{".travis.yml":"9f13da6fb5b7189d5b0e8c0435d28a7d35899e708fd579a7e6b73fc74c3d6acf","Cargo.toml":"7e0306d977c63a491bea39dde354455f23c7eb283abf874d0122a664bbc082d3","README":"1ff38c3749ba83c9b364c6bb35b95525dd956449ec7386a50faf8fcfdd5a7de4","lib.rs":"3c54447b497f808ab7fa7659f1379acf4c5c3def37fc4cc7778281273b84eabb"},"package":"6626c2aef76eb8f984eef02e475883d3fe9112e114720446c5810fc5f045cd30"}
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/third_party/rust/mp4parse_fallible/.travis.yml
@@ -0,0 +1,18 @@
+language: rust
+rust:
+  - stable
+  - nightly
+
+addons:
+  apt:
+    sources:
+      - ubuntu-toolchain-r-test
+    packages:
+      - g++-5
+
+env:
+  global:
+    - CXX=g++-5
+
+script:
+  - cargo test --all --verbose
new file mode 100644
--- /dev/null
+++ b/third_party/rust/mp4parse_fallible/Cargo.toml
@@ -0,0 +1,26 @@
+# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
+#
+# When uploading crates to the registry Cargo will automatically
+# "normalize" Cargo.toml files for maximal compatibility
+# with all versions of Cargo and also rewrite `path` dependencies
+# to registry (e.g. crates.io) dependencies
+#
+# If you believe there's an error in this file please file an
+# issue against the rust-lang/cargo repository. If you're
+# editing this file be aware that the upstream Cargo.toml
+# will likely look very different (and much more reasonable)
+
+[package]
+name = "mp4parse_fallible"
+version = "0.0.1"
+authors = ["The Servo Project Developers"]
+description = "Fallible replacement for Vec"
+documentation = "https://docs.rs/mp4parse_fallible/"
+license = "MPL-2.0"
+repository = "https://github.com/mozilla/mp4parse_fallible"
+
+[lib]
+name = "mp4parse_fallible"
+path = "lib.rs"
+[badges.travis-ci]
+repository = "https://github.com/mozilla/mp4parse_fallible"
new file mode 100644
--- /dev/null
+++ b/third_party/rust/mp4parse_fallible/README
@@ -0,0 +1,7 @@
+This is from https://github.com/servo/servo/tree/master/components/fallible
+with modificaion for mp4 demuxer.
+
+The purpose of this crate is to solve infallible memory allocation problem
+which causes OOM easily on win32. This is more like a temporary solution.
+Once rust supports fallible memory allocation in its stdlib, this can be
+retired.
new file mode 100644
--- /dev/null
+++ b/third_party/rust/mp4parse_fallible/lib.rs
@@ -0,0 +1,92 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use std::mem;
+use std::vec::Vec;
+
+extern "C" {
+    fn realloc(ptr: *mut u8, bytes: usize) -> *mut u8;
+    fn malloc(bytes: usize) -> *mut u8;
+}
+
+pub trait FallibleVec<T> {
+    /// Append |val| to the end of |vec|.  Returns Ok(()) on success,
+    /// Err(()) if it fails, which can only be due to lack of memory.
+    fn try_push(&mut self, value: T) -> Result<(), ()>;
+
+    /// Expand the vector size. Return Ok(()) on success, Err(()) if it
+    /// fails.
+    fn try_reserve(&mut self, new_cap: usize) -> Result<(), ()>;
+}
+
+/////////////////////////////////////////////////////////////////
+// Vec
+
+impl<T> FallibleVec<T> for Vec<T> {
+    #[inline]
+    fn try_push(&mut self, val: T) -> Result<(), ()> {
+        if self.capacity() == self.len() {
+            let old_cap: usize = self.capacity();
+            let new_cap: usize
+                = if old_cap == 0 { 4 } else { old_cap.checked_mul(2).ok_or(()) ? };
+
+            try_extend_vec(self, new_cap)?;
+            debug_assert!(self.capacity() > self.len());
+        }
+        self.push(val);
+        Ok(())
+    }
+
+    #[inline]
+    fn try_reserve(&mut self, cap: usize) -> Result<(), ()> {
+        let new_cap = cap + self.capacity();
+        try_extend_vec(self, new_cap)?;
+        debug_assert!(self.capacity() == new_cap);
+        Ok(())
+    }
+}
+
+#[inline(never)]
+#[cold]
+fn try_extend_vec<T>(vec: &mut Vec<T>, new_cap: usize) -> Result<(), ()> {
+    let old_ptr = vec.as_mut_ptr();
+    let old_len = vec.len();
+
+    let old_cap: usize = vec.capacity();
+
+    if old_cap >= new_cap {
+        return Ok(());
+    }
+
+    let new_size_bytes
+        = new_cap.checked_mul(mem::size_of::<T>()).ok_or(()) ? ;
+
+    let new_ptr = unsafe {
+        if old_cap == 0 {
+            malloc(new_size_bytes)
+        } else {
+            realloc(old_ptr as *mut u8, new_size_bytes)
+        }
+    };
+
+    if new_ptr.is_null() {
+        return Err(());
+    }
+
+    let new_vec = unsafe {
+        Vec::from_raw_parts(new_ptr as *mut T, old_len, new_cap)
+    };
+
+    mem::forget(mem::replace(vec, new_vec));
+    Ok(())
+}
+
+#[test]
+fn oom_test() {
+    let mut vec: Vec<char> = Vec::new();
+    match vec.try_reserve(std::usize::MAX) {
+        Ok(_) => panic!("it should be OOM"),
+        _ => (),
+    }
+}
--- a/toolkit/library/gtest/rust/Cargo.lock
+++ b/toolkit/library/gtest/rust/Cargo.lock
@@ -565,17 +565,17 @@ dependencies = [
  "cubeb 0.3.0",
  "cubeb-backend 0.2.0",
  "cubeb-core 0.1.0",
  "cubeb-pulse 0.0.1",
  "encoding_c 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "encoding_glue 0.1.0",
  "geckoservo 0.0.1",
  "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "mp4parse_capi 0.9.0",
+ "mp4parse_capi 0.9.1",
  "netwerk_helper 0.0.1",
  "nserror 0.1.0",
  "nsstring 0.1.0",
  "rust_url_capi 0.0.1",
  "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "u2fhid 0.1.0",
  "webrender_bindings 0.1.0",
 ]
@@ -800,40 +800,41 @@ dependencies = [
  "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "net2 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "mp4parse"
-version = "0.9.0"
+version = "0.9.1"
 dependencies = [
  "bitreader 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "mp4parse_fallible 0.0.1",
+ "mp4parse_fallible 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "mp4parse-gtest"
 version = "0.1.0"
 
 [[package]]
 name = "mp4parse_capi"
-version = "0.9.0"
+version = "0.9.1"
 dependencies = [
  "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "mp4parse 0.9.0",
+ "mp4parse 0.9.1",
  "num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "mp4parse_fallible"
 version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "net2"
 version = "0.2.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cfg-if 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1621,16 +1622,17 @@ dependencies = [
 "checksum libudev 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ea626d3bdf40a1c5aee3bcd4f40826970cae8d80a8fec934c82a63840094dcfe"
 "checksum log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "880f77541efa6e5cc74e76910c9884d9859683118839d6a1dc3b11e63512565b"
 "checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376"
 "checksum memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "148fab2e51b4f1cfc66da2a7c32981d1d3c083a803978268bb11fe4b86925e7a"
 "checksum memmap 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "46f3c7359028b31999287dae4e5047ddfe90a23b7dca2282ce759b491080c99b"
 "checksum mio 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9e965267d4d58496fc4f740e9861118367f13570cadf66316ed2c3f2f14d87c7"
 "checksum mio-uds 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1731a873077147b626d89cc6c2a0db6288d607496c5d10c0cfcf3adc697ec673"
 "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919"
+"checksum mp4parse_fallible 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6626c2aef76eb8f984eef02e475883d3fe9112e114720446c5810fc5f045cd30"
 "checksum net2 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)" = "3a80f842784ef6c9a958b68b7516bc7e35883c614004dd94959a4dca1b716c09"
 "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2"
 "checksum nom 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b8c256fd9471521bcb84c3cdba98921497f1a331cbc15b8030fc63b82050ce"
 "checksum num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "d1452e8b06e448a07f0e6ebb0bb1d92b8890eea63288c0b627331d53514d0fba"
 "checksum num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "cacfcab5eb48250ee7d0c7896b51a2c5eec99c1feea5f32025635f5ae4b00070"
 "checksum num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "514f0d73e64be53ff320680ca671b64fe3fb91da01e1ae2ddc99eb51d453b20d"
 "checksum ordered-float 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "da12c96037889ae0be29dd2bdd260e5a62a7df24e6466d5a15bb8131c1c200a8"
 "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37"
--- a/toolkit/library/rust/Cargo.lock
+++ b/toolkit/library/rust/Cargo.lock
@@ -564,17 +564,17 @@ dependencies = [
  "cubeb 0.3.0",
  "cubeb-backend 0.2.0",
  "cubeb-core 0.1.0",
  "cubeb-pulse 0.0.1",
  "encoding_c 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "encoding_glue 0.1.0",
  "geckoservo 0.0.1",
  "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "mp4parse_capi 0.9.0",
+ "mp4parse_capi 0.9.1",
  "netwerk_helper 0.0.1",
  "nserror 0.1.0",
  "nsstring 0.1.0",
  "rust_url_capi 0.0.1",
  "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "u2fhid 0.1.0",
  "webrender_bindings 0.1.0",
 ]
@@ -799,36 +799,37 @@ dependencies = [
  "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "net2 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "mp4parse"
-version = "0.9.0"
+version = "0.9.1"
 dependencies = [
  "bitreader 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "mp4parse_fallible 0.0.1",
+ "mp4parse_fallible 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "mp4parse_capi"
-version = "0.9.0"
+version = "0.9.1"
 dependencies = [
  "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "mp4parse 0.9.0",
+ "mp4parse 0.9.1",
  "num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "mp4parse_fallible"
 version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "net2"
 version = "0.2.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cfg-if 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1633,16 +1634,17 @@ dependencies = [
 "checksum libudev 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ea626d3bdf40a1c5aee3bcd4f40826970cae8d80a8fec934c82a63840094dcfe"
 "checksum log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "880f77541efa6e5cc74e76910c9884d9859683118839d6a1dc3b11e63512565b"
 "checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376"
 "checksum memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "148fab2e51b4f1cfc66da2a7c32981d1d3c083a803978268bb11fe4b86925e7a"
 "checksum memmap 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "46f3c7359028b31999287dae4e5047ddfe90a23b7dca2282ce759b491080c99b"
 "checksum mio 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9e965267d4d58496fc4f740e9861118367f13570cadf66316ed2c3f2f14d87c7"
 "checksum mio-uds 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1731a873077147b626d89cc6c2a0db6288d607496c5d10c0cfcf3adc697ec673"
 "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919"
+"checksum mp4parse_fallible 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6626c2aef76eb8f984eef02e475883d3fe9112e114720446c5810fc5f045cd30"
 "checksum net2 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)" = "3a80f842784ef6c9a958b68b7516bc7e35883c614004dd94959a4dca1b716c09"
 "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2"
 "checksum nom 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b8c256fd9471521bcb84c3cdba98921497f1a331cbc15b8030fc63b82050ce"
 "checksum num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "d1452e8b06e448a07f0e6ebb0bb1d92b8890eea63288c0b627331d53514d0fba"
 "checksum num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "cacfcab5eb48250ee7d0c7896b51a2c5eec99c1feea5f32025635f5ae4b00070"
 "checksum num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "514f0d73e64be53ff320680ca671b64fe3fb91da01e1ae2ddc99eb51d453b20d"
 "checksum ordered-float 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "da12c96037889ae0be29dd2bdd260e5a62a7df24e6466d5a15bb8131c1c200a8"
 "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37"