Merge mozilla-central to inbound. r=merge a=merge CLOSED TREE
authorTiberius Oros <toros@mozilla.com>
Fri, 05 Jan 2018 12:03:34 +0200
changeset 449746 b789397f403800b52e4b1ff88557438895c90df7
parent 449745 c2e9837df73214bd3cadce9a5bc82a4797ea1ebd (current diff)
parent 449690 81362f7306fe413b19fdba27cd0e9a5525d902e1 (diff)
child 449747 888271e96fecc039c677ab2d88e4141528f36160
push id8527
push userCallek@gmail.com
push dateThu, 11 Jan 2018 21:05:50 +0000
treeherdermozilla-beta@95342d212a7a [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge, merge
milestone59.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge mozilla-central to inbound. r=merge a=merge CLOSED TREE
services/sync/tests/tps/test_addon_sanity.js
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -1033,22 +1033,22 @@ function _loadURIWithFlags(browser, uri,
     // createFixupURI throws if it can't create a URI. If that's the case then
     // we still need to pass down the uri because docshell handles this case.
     requiredRemoteType = gMultiProcessBrowser ? E10SUtils.DEFAULT_REMOTE_TYPE
                                               : E10SUtils.NOT_REMOTE;
   }
 
   let mustChangeProcess = requiredRemoteType != currentRemoteType;
   let newFrameloader = false;
-  if (browser.getAttribute("isPreloadBrowser") == "true" && uri != "about:newtab") {
+  if (browser.getAttribute("preloadedState") === "consumed" && uri != "about:newtab") {
     // Leaving about:newtab from a used to be preloaded browser should run the process
     // selecting algorithm again.
     mustChangeProcess = true;
     newFrameloader = true;
-    browser.removeAttribute("isPreloadBrowser");
+    browser.removeAttribute("preloadedState");
   }
 
   // !requiredRemoteType means we're loading in the parent/this process.
   if (!requiredRemoteType) {
     browser.inLoadURI = true;
   }
   try {
     if (!mustChangeProcess) {
@@ -1120,18 +1120,18 @@ function _loadURIWithFlags(browser, uri,
 function LoadInOtherProcess(browser, loadOptions, historyIndex = -1) {
   let tab = gBrowser.getTabForBrowser(browser);
   SessionStore.navigateAndRestore(tab, loadOptions, historyIndex);
 }
 
 // Called when a docshell has attempted to load a page in an incorrect process.
 // This function is responsible for loading the page in the correct process.
 function RedirectLoad({ target: browser, data }) {
-  if (browser.getAttribute("isPreloadBrowser") == "true") {
-    browser.removeAttribute("isPreloadBrowser");
+  if (browser.getAttribute("preloadedState") === "consumed") {
+    browser.removeAttribute("preloadedState");
     data.loadOptions.newFrameloader = true;
   }
 
   if (data.loadOptions.reloadInFreshProcess) {
     // Convert the fresh process load option into a large allocation remote type
     // to use common processing from this point.
     data.loadOptions.remoteType = E10SUtils.LARGE_ALLOCATION_REMOTE_TYPE;
     data.loadOptions.newFrameloader = true;
--- a/browser/base/content/content.js
+++ b/browser/base/content/content.js
@@ -309,17 +309,17 @@ var AboutNetAndCertErrorListener = {
         let now = Date.now();
         let certRange = this._getCertValidityRange();
 
         let approximateDate = now - difference * 1000;
         // If the difference is more than a day, we last fetched the date in the last 5 days,
         // and adjusting the date per the interval would make the cert valid, warn the user:
         if (Math.abs(difference) > 60 * 60 * 24 && (now - lastFetched) <= 60 * 60 * 24 * 5 &&
             certRange.notBefore < approximateDate && certRange.notAfter > approximateDate) {
-          let formatter = Services.intl.createDateTimeFormat(undefined, {
+          let formatter = new Services.intl.DateTimeFormat(undefined, {
             dateStyle: "short"
           });
           let systemDate = formatter.format(new Date());
           // negative difference means local time is behind server time
           approximateDate = formatter.format(new Date(approximateDate));
 
           content.document.getElementById("wrongSystemTime_URL")
             .textContent = content.document.location.hostname;
@@ -345,17 +345,17 @@ var AboutNetAndCertErrorListener = {
           let buildDate = new Date(year, month, day);
           let systemDate = new Date();
 
           // We don't check the notBefore of the cert with the build date,
           // as it is of course almost certain that it is now later than the build date,
           // so we shouldn't exclude the possibility that the cert has become valid
           // since the build date.
           if (buildDate > systemDate && new Date(certRange.notAfter) > buildDate) {
-            let formatter = Services.intl.createDateTimeFormat(undefined, {
+            let formatter = new Services.intl.DateTimeFormat(undefined, {
               dateStyle: "short"
             });
 
             content.document.getElementById("wrongSystemTimeWithoutReference_URL")
               .textContent = content.document.location.hostname;
             content.document.getElementById("wrongSystemTimeWithoutReference_systemDate")
               .textContent = formatter.format(systemDate);
 
--- a/browser/base/content/pageinfo/pageInfo.js
+++ b/browser/base/content/pageinfo/pageInfo.js
@@ -1011,17 +1011,17 @@ function formatNumber(number) {
   return (+number).toLocaleString(); // coerce number to a numeric value before calling toLocaleString()
 }
 
 function formatDate(datestr, unknown) {
   var date = new Date(datestr);
   if (!date.valueOf())
     return unknown;
 
-  const dateTimeFormatter = Services.intl.createDateTimeFormat(undefined, {
+  const dateTimeFormatter = new Services.intl.DateTimeFormat(undefined, {
     dateStyle: "long", timeStyle: "long"
   });
   return dateTimeFormatter.format(date);
 }
 
 function doCopy() {
   if (!gClipboardHelper)
     return;
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -2131,18 +2131,21 @@
             this._preloadedBrowser = null;
 
             // Attach the nsIFormFillController now that we know the browser
             // will be used. If we do that before and the preloaded browser
             // won't be consumed until shutdown then we leak a docShell.
             // Also, we do not need to take care of attaching nsIFormFillControllers
             // in the case that the browser is remote, as remote browsers take
             // care of that themselves.
-            if (browser && this.hasAttribute("autocompletepopup")) {
-              browser.setAttribute("autocompletepopup", this.getAttribute("autocompletepopup"));
+            if (browser) {
+              browser.setAttribute("preloadedState", "consumed");
+              if (this.hasAttribute("autocompletepopup")) {
+                browser.setAttribute("autocompletepopup", this.getAttribute("autocompletepopup"));
+              }
             }
 
             return browser;
           ]]>
         </body>
       </method>
 
       <method name="_isPreloadingEnabled">
@@ -2234,18 +2237,33 @@
               }
               b.presetOpenerWindow(aParams.openerWindow);
             }
 
             if (!aParams.isPreloadBrowser && this.hasAttribute("autocompletepopup")) {
               b.setAttribute("autocompletepopup", this.getAttribute("autocompletepopup"));
             }
 
+            /*
+             * This attribute is meant to describe if the browser is the
+             * preloaded browser. There are 2 defined states: "preloaded" or
+             * "consumed". The order of events goes as follows:
+             *   1. The preloaded browser is created and the 'preloadedState'
+             *      attribute for that browser is set to "preloaded".
+             *   2. When a new tab is opened and it is time to show that
+             *      preloaded browser, the 'preloadedState' attribute for that
+             *      browser is set to "consumed"
+             *   3. When we then navigate away from about:newtab, the "consumed"
+             *      browsers will attempt to switch to a new content process,
+             *      therefore the 'preloadedState' attribute is removed from
+             *      that browser altogether
+             * See more details on Bug 1420285.
+             */
             if (aParams.isPreloadBrowser) {
-              b.setAttribute("isPreloadBrowser", "true");
+              b.setAttribute("preloadedState", "preloaded");
             }
 
             if (this.hasAttribute("selectmenulist"))
               b.setAttribute("selectmenulist", this.getAttribute("selectmenulist"));
 
             if (this.hasAttribute("datetimepicker")) {
               b.setAttribute("datetimepicker", this.getAttribute("datetimepicker"));
             }
--- a/browser/base/content/test/about/browser_aboutCertError.js
+++ b/browser/base/content/test/about/browser_aboutCertError.js
@@ -146,17 +146,17 @@ add_task(async function checkWrongSystem
         text: div.textContent,
         systemDate: systemDateDiv.textContent,
         actualDate: actualDateDiv.textContent,
         learnMoreLink: learnMoreLink.href
       };
     });
   }
 
-  let formatter = Services.intl.createDateTimeFormat(undefined, {
+  let formatter = new Services.intl.DateTimeFormat(undefined, {
     dateStyle: "short"
   });
 
   // pretend we have a positively skewed (ahead) system time
   let serverDate = new Date("2015/10/27");
   let serverDateFmt = formatter.format(serverDate);
   let localDateFmt = formatter.format(new Date());
 
--- a/browser/base/content/test/performance/browser_tabstrip_overflow_underflow_reflows.js
+++ b/browser/base/content/test/performance/browser_tabstrip_overflow_underflow_reflows.js
@@ -45,21 +45,76 @@ add_task(async function() {
     await BrowserTestUtils.waitForEvent(gBrowser.selectedTab, "transitionend",
         false, e => e.propertyName === "max-width");
     await switchDone;
     await BrowserTestUtils.waitForCondition(() => {
       return gBrowser.tabContainer.arrowScrollbox.hasAttribute("scrolledtoend");
     });
   }, EXPECTED_OVERFLOW_REFLOWS, window);
 
-  await withReflowObserver(async function() {
+  Assert.ok(gBrowser.tabContainer.hasAttribute("overflow"),
+            "Tabs should now be overflowed.");
+
+  // Now test that opening and closing a tab while overflowed doesn't cause
+  // us to reflow.
+  await withReflowObserver(async function(dirtyFrame) {
+    let switchDone = BrowserTestUtils.waitForEvent(window, "TabSwitchDone");
+    BrowserOpenTab();
+    await switchDone;
+    await BrowserTestUtils.waitForCondition(() => {
+      return gBrowser.tabContainer.arrowScrollbox.hasAttribute("scrolledtoend");
+    });
+  }, [], window);
+
+  await withReflowObserver(async function(dirtyFrame) {
     let switchDone = BrowserTestUtils.waitForEvent(window, "TabSwitchDone");
-    let transitionPromise =
-      BrowserTestUtils.waitForEvent(gBrowser.selectedTab,
-                                    "transitionend", false,
-                                    e => e.propertyName === "max-width");
     await BrowserTestUtils.removeTab(gBrowser.selectedTab, { animate: true });
-    await transitionPromise;
     await switchDone;
-  }, EXPECTED_UNDERFLOW_REFLOWS, window);
+  }, [], window);
+
+  // At this point, we have an overflowed tab strip, and we've got the last tab
+  // selected. This should mean that the first tab is scrolled out of view.
+  // Let's test that we don't reflow when switching to that first tab.
+  let lastTab = gBrowser.selectedTab;
+  let arrowScrollbox = gBrowser.tabContainer.arrowScrollbox;
+
+  // First, we'll check that the first tab is actually scrolled
+  // at least partially out of view.
+  Assert.ok(arrowScrollbox.scrollPosition > 0,
+            "First tab should be partially scrolled out of view.");
+
+  // Now switch to the first tab. We shouldn't flush layout at all.
+  await withReflowObserver(async function(dirtyFrame) {
+    let firstTab = gBrowser.tabContainer.firstChild;
+    await BrowserTestUtils.switchTab(gBrowser, firstTab);
+    await BrowserTestUtils.waitForCondition(() => {
+      return gBrowser.tabContainer.arrowScrollbox.hasAttribute("scrolledtostart");
+    });
+  }, [], window);
+
+  // Okay, now close the last tab. The tabstrip should stay overflowed, but removing
+  // one more after that should underflow it.
+  await BrowserTestUtils.removeTab(lastTab);
+
+  Assert.ok(gBrowser.tabContainer.hasAttribute("overflow"),
+            "Tabs should still be overflowed.");
+
+  // Depending on the size of the window, it might take one or more tab
+  // removals to put the tab strip out of the overflow state, so we'll just
+  // keep testing removals until that occurs.
+  while (gBrowser.tabContainer.hasAttribute("overflow")) {
+    lastTab = gBrowser.tabContainer.lastElementChild;
+    if (gBrowser.selectedTab !== lastTab) {
+      await BrowserTestUtils.switchTab(gBrowser, lastTab);
+    }
+
+    // ... and make sure we don't flush layout when closing it, and exiting
+    // the overflowed state.
+    await withReflowObserver(async function() {
+      let switchDone = BrowserTestUtils.waitForEvent(window, "TabSwitchDone");
+      await BrowserTestUtils.removeTab(lastTab, { animate: true });
+      await switchDone;
+      await BrowserTestUtils.waitForCondition(() => !lastTab.isConnected);
+    }, EXPECTED_UNDERFLOW_REFLOWS, window);
+  }
 
   await removeAllButFirstTab();
 });
--- a/browser/components/feeds/FeedWriter.js
+++ b/browser/components/feeds/FeedWriter.js
@@ -187,17 +187,17 @@ FeedWriter.prototype = {
 
   __dateFormatter: null,
   get _dateFormatter() {
     if (!this.__dateFormatter) {
       const dtOptions = {
         timeStyle: "short",
         dateStyle: "long"
       };
-      this.__dateFormatter = Services.intl.createDateTimeFormat(undefined, dtOptions);
+      this.__dateFormatter = new Services.intl.DateTimeFormat(undefined, dtOptions);
     }
     return this.__dateFormatter;
   },
 
   /**
    * Returns the feed type.
    */
   __feedType: null,
--- a/browser/components/places/content/places.js
+++ b/browser/components/places/content/places.js
@@ -408,17 +408,17 @@ var PlacesOrganizer = {
    * Populates the restore menu with the dates of the backups available.
    */
   populateRestoreMenu: function PO_populateRestoreMenu() {
     let restorePopup = document.getElementById("fileRestorePopup");
 
     const dtOptions = {
       dateStyle: "long"
     };
-    let dateFormatter = Services.intl.createDateTimeFormat(undefined, dtOptions);
+    let dateFormatter = new Services.intl.DateTimeFormat(undefined, dtOptions);
 
     // Remove existing menu items.  Last item is the restoreFromFile item.
     while (restorePopup.childNodes.length > 1)
       restorePopup.firstChild.remove();
 
     (async function() {
       let backupFiles = await PlacesBackups.getBackupFiles();
       if (backupFiles.length == 0)
--- a/browser/components/places/content/treeView.js
+++ b/browser/components/places/content/treeView.js
@@ -551,29 +551,29 @@ PlacesTreeView.prototype = {
   },
 
   // We use a different formatter for times within the current day,
   // so we cache both a "today" formatter and a general date formatter.
   __todayFormatter: null,
   get _todayFormatter() {
     if (!this.__todayFormatter) {
       const dtOptions = { timeStyle: "short" };
-      this.__todayFormatter = Services.intl.createDateTimeFormat(undefined, dtOptions);
+      this.__todayFormatter = new Services.intl.DateTimeFormat(undefined, dtOptions);
     }
     return this.__todayFormatter;
   },
 
   __dateFormatter: null,
   get _dateFormatter() {
     if (!this.__dateFormatter) {
       const dtOptions = {
         dateStyle: "short",
         timeStyle: "short"
       };
-      this.__dateFormatter = Services.intl.createDateTimeFormat(undefined, dtOptions);
+      this.__dateFormatter = new Services.intl.DateTimeFormat(undefined, dtOptions);
     }
     return this.__dateFormatter;
   },
 
   COLUMN_TYPE_UNKNOWN: 0,
   COLUMN_TYPE_TITLE: 1,
   COLUMN_TYPE_URI: 2,
   COLUMN_TYPE_DATE: 3,
--- a/browser/components/places/tests/chrome/test_treeview_date.xul
+++ b/browser/components/places/tests/chrome/test_treeview_date.xul
@@ -133,17 +133,17 @@
                 if (node.uri == "http://at.midnight.com/" ||
                     node.uri == "http://after.midnight.com/") {
                   dtOptions.dateStyle = undefined;
                 } else if (node.uri != "http://before.midnight.com/") {
                   // Avoid to test spurious uris, due to how the test works
                   // a redirecting uri could be put in the tree while we test.
                   break;
                 }
-                let timeStr = Services.intl.createDateTimeFormat(undefined, dtOptions).format(timeObj);
+                let timeStr = new Services.intl.DateTimeFormat(undefined, dtOptions).format(timeObj);
 
                 is(text, timeStr, "Date format is correct");
                 break;
               case "visitCount":
                 is(text, 1, "Visit count is correct");
                 break;
             }
           }
--- a/browser/components/preferences/cookies.js
+++ b/browser/components/preferences/cookies.js
@@ -486,17 +486,17 @@ var gCookiesWindow = {
         break;
     }
     this._view._rowCount = hostCount.value;
   },
 
   formatExpiresString(aExpires) {
     if (aExpires) {
       var date = new Date(1000 * aExpires);
-      const dateTimeFormatter = Services.intl.createDateTimeFormat(undefined, {
+      const dateTimeFormatter = new Services.intl.DateTimeFormat(undefined, {
         dateStyle: "long", timeStyle: "long"
       });
       return dateTimeFormatter.format(date);
     }
     return this._bundle.getString("expireAtEndOfSession");
   },
 
   _getUserContextString(aUserContextId) {
--- a/browser/extensions/activity-stream/lib/TelemetryFeed.jsm
+++ b/browser/extensions/activity-stream/lib/TelemetryFeed.jsm
@@ -241,17 +241,17 @@ this.TelemetryFeed = class TelemetryFeed
   /**
    * handleNewTabInit - Handle NEW_TAB_INIT, which creates a new session and sets the a flag
    *                    for session.perf based on whether or not this new tab is preloaded
    *
    * @param  {obj} action the Action object
    */
   handleNewTabInit(action) {
     const session = this.addSession(au.getPortIdOfSender(action), action.data.url);
-    session.perf.is_preloaded = action.data.browser.getAttribute("isPreloadBrowser") === "true";
+    session.perf.is_preloaded = action.data.browser.getAttribute("preloadedState") === "preloaded";
   }
 
   /**
    * createPing - Create a ping with common properties
    *
    * @param  {string} id The portID of the session, if a session is relevant (optional)
    * @return {obj}    A telemetry ping
    */
new file mode 100644
--- /dev/null
+++ b/build/debian-packages/python-wheezy.diff
@@ -0,0 +1,149 @@
+diff -u python2.7-2.7.9/debian/changelog python2.7-2.7.9/debian/changelog
+--- python2.7-2.7.9/debian/changelog
++++ python2.7-2.7.9/debian/changelog
+@@ -1,3 +1,17 @@
++python2.7 (2.7.9-2.deb7moz1) wheezy; urgency=medium
++
++  * Mozilla backport for wheezy.
++  * debian/control.in:
++    - Remove gcc 4.9 build dependency, wheezy doesn't have it.
++    - Remove libexpat1-dev dependency from python dev packages. It prevents
++      from co-installing some i386 -dev packages.
++  * debian/rules:
++    - Adapt ar, ranlib and objcopy paths to work on wheezy.
++  * debian/control.in, debian/rules: Don't generate the -doc package, sphinx
++    is too old in wheezy.
++
++ -- Mike Hommey <glandium@mozilla.com>  Fri, 13 Oct 2017 19:20:21 +0900
++
+ python2.7 (2.7.9-2+deb8u1) jessie; urgency=medium
+ 
+   * Backport upstream commit b3ce713fb9beebfff9848cefa0acbd59acc68fe9
+diff -u python2.7-2.7.9/debian/control.in python2.7-2.7.9/debian/control.in
+--- python2.7-2.7.9/debian/control.in
++++ python2.7-2.7.9/debian/control.in
+@@ -3,7 +3,6 @@
+ Priority: optional
+ Maintainer: Matthias Klose <doko@debian.org>
+ Build-Depends: debhelper (>= 5), @bd_dpkgdev@
+-  gcc (>= 4:4.9.2),
+   quilt, autoconf, autotools-dev,
+   lsb-release, sharutils,
+   libreadline-dev, libtinfo-dev, libncursesw5-dev (>= 5.3), @bd_gcc@
+@@ -112,7 +111,7 @@
+ Package: @PVER@-dev
+ Architecture: any
+ Multi-Arch: allowed
+-Depends: @PVER@ (= ${binary:Version}), lib@PVER@-dev (= ${binary:Version}), lib@PVER@ (= ${binary:Version}), libexpat1-dev, ${shlibs:Depends}, ${misc:Depends}
++Depends: @PVER@ (= ${binary:Version}), lib@PVER@-dev (= ${binary:Version}), lib@PVER@ (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends}
+ Recommends: libc6-dev | libc-dev
+ Replaces: @PVER@ (<< 2.7-3)
+ Description: Header files and a static library for Python (v@VER@)
+@@ -127,7 +126,7 @@
+ Architecture: any
+ Multi-Arch: same
+ Pre-Depends: multiarch-support
+-Depends: lib@PVER@-stdlib (= ${binary:Version}), lib@PVER@ (= ${binary:Version}), libexpat1-dev, ${shlibs:Depends}, ${misc:Depends}
++Depends: lib@PVER@-stdlib (= ${binary:Version}), lib@PVER@ (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends}
+ Replaces: @PVER@ (<< 2.7-3), @PVER@-dev (<< 2.7.3-10), @PVER@-minimal (<< 2.7.3-10)
+ Recommends: libc6-dev | libc-dev
+ Description: Header files and a static library for Python (v@VER@)
+@@ -161,27 +160,6 @@
+  IDLE is an Integrated Development Environment for Python (v@VER@).
+  IDLE is written using Tkinter and therefore quite platform-independent.
+ 
+-Package: @PVER@-doc
+-Section: doc
+-Architecture: all
+-Depends: libjs-jquery, libjs-underscore, ${misc:Depends}
+-Suggests: @PVER@
+-Description: Documentation for the high-level object-oriented language Python (v@VER@)
+- These is the official set of documentation for the interactive high-level
+- object-oriented language Python (v@VER@). All documents are provided
+- in HTML format. The package consists of ten documents:
+- .
+-   * What's New in Python@VER@
+-   * Tutorial
+-   * Python Library Reference
+-   * Macintosh Module Reference
+-   * Python Language Reference
+-   * Extending and Embedding Python
+-   * Python/C API Reference
+-   * Installing Python Modules
+-   * Documenting Python
+-   * Distributing Python Modules
+-
+ Package: @PVER@-dbg
+ Section: debug
+ Architecture: any
+diff -u python2.7-2.7.9/debian/rules python2.7-2.7.9/debian/rules
+--- python2.7-2.7.9/debian/rules
++++ python2.7-2.7.9/debian/rules
+@@ -121,8 +121,8 @@
+ CC = $(DEB_HOST_GNU_TYPE)-gcc
+ CXX=$(DEB_HOST_GNU_TYPE)-g++
+ 
+-AR=$(DEB_HOST_GNU_TYPE)-ar
+-RANLIB=$(DEB_HOST_GNU_TYPE)-ranlib
++AR=$(DEB_HOST_GNU_TYPE)-gcc-ar-4.7
++RANLIB=$(DEB_HOST_GNU_TYPE)-gcc-ranlib-4.7
+ 
+ DPKG_CFLAGS  := $(shell dpkg-buildflags --get CPPFLAGS; dpkg-buildflags --get CFLAGS)
+ DPKG_LDFLAGS := $(shell dpkg-buildflags --get LDFLAGS)
+@@ -171,8 +171,6 @@
+       LTO_CFLAGS += -ffat-lto-objects
+     endif
+     EXTRA_OPT_CFLAGS += $(LTO_CFLAGS)
+-    AR=$(DEB_HOST_GNU_TYPE)-gcc-ar
+-    RANLIB=$(DEB_HOST_GNU_TYPE)-gcc-ranlib
+ endif
+ 
+ make_build_target = $(if $(with_pgo),profile-opt)
+@@ -628,7 +626,6 @@
+ 
+ stamps/stamp-doc-html:
+ 	dh_testdir
+-	$(MAKE) -C Doc html
+ 	touch stamps/stamp-doc-html
+ 
+ build-doc: stamps/stamp-patch stamps/stamp-build-doc
+@@ -1215,30 +1212,6 @@
+ 	dh_testdir -i
+ 	dh_testroot -i
+ 
+-	: # $(p_doc) package
+-	dh_installdirs -p$(p_doc) \
+-		usr/share/doc/$(p_base) \
+-		usr/share/doc/$(p_doc)
+-	dh_installdocs -p$(p_doc)
+-	cp -a Doc/build/html $(d_doc)/usr/share/doc/$(p_base)/
+-	rm -f $(d_doc)/usr/share/doc/$(p_base)/html/_static/jquery.js
+-	rm -f $(d_doc)/usr/share/doc/$(p_base)/html/_static/underscore.js
+-	dh_link -p$(p_doc) \
+-		/usr/share/doc/$(p_base)/html \
+-			/usr/share/doc/$(p_doc)/html \
+-		/usr/share/javascript/jquery/jquery.js \
+-			/usr/share/doc/$(p_base)/html/_static/jquery.js \
+-		/usr/share/javascript/underscore/underscore.js \
+-			/usr/share/doc/$(p_base)/html/_static/underscore.js
+-
+-	: # devhelp docs
+-	$(buildd_static)/python debian/pyhtml2devhelp.py \
+-		$(d_doc)/usr/share/doc/$(p_base)/html index.html $(VER) \
+-		> $(d_doc)/usr/share/doc/$(p_base)/html/$(PVER).devhelp
+-	gzip -9v $(d_doc)/usr/share/doc/$(p_base)/html/$(PVER).devhelp
+-	dh_link -p$(p_doc) \
+-		/usr/share/doc/$(p_base)/html /usr/share/devhelp/books/$(PVER)
+-
+ 	for i in $(p_ltst); do \
+ 	  rm -rf debian/$$i/usr/share/doc/$$i; \
+ 	  ln -s $(p_lbase) debian/$$i/usr/share/doc/$$i; \
+@@ -1298,7 +1271,7 @@
+ endif
+ 
+ 	find $(d_ldbg) $(d_ldev) -name '*.a' ! -type l \
+-		| xargs -n 1 $(DEB_HOST_GNU_TYPE)-objcopy -p --remove-section=.gnu.lto_.*
++		| xargs -n 1 objcopy -p --remove-section=.gnu.lto_.*
+ 	dh_strip -a -N$(p_dbg) -N$(p_ldbg) -Xdebug -Xdbg --dbg-package=$(p_dbg)
+ 	cp Tools/gdb/libpython.py $(d_dbg)/usr/lib/debug/usr/bin/$(PVER)-gdb.py
+ 	ln -sf $(PVER)-gdb.py $(d_dbg)/usr/lib/debug/usr/bin/$(PVER)-dbg-gdb.py
--- a/devtools/client/aboutdebugging/test/browser_service_workers.js
+++ b/devtools/client/aboutdebugging/test/browser_service_workers.js
@@ -8,17 +8,17 @@
 const SERVICE_WORKER = URL_ROOT + "service-workers/empty-sw.js";
 const TAB_URL = URL_ROOT + "service-workers/empty-sw.html";
 
 add_task(function* () {
   yield enableServiceWorkerDebugging();
 
   let { tab, document } = yield openAboutDebugging("workers");
 
-  let swTab = yield addTab(TAB_URL);
+  let swTab = yield addTab(TAB_URL, { background: true });
 
   let serviceWorkersElement = getServiceWorkerList(document);
 
   yield waitUntil(() => {
     // Check that the service worker appears in the UI
     let names = [...document.querySelectorAll("#service-workers .target-name")];
     names = names.map(element => element.textContent);
     return names.includes(SERVICE_WORKER);
--- a/devtools/client/aboutdebugging/test/browser_service_workers_fetch_flag.js
+++ b/devtools/client/aboutdebugging/test/browser_service_workers_fetch_flag.js
@@ -7,17 +7,17 @@
 // but http:// is ok with dom.serviceWorkers.testing.enabled turned on.
 const EMPTY_SW_TAB_URL = URL_ROOT + "service-workers/empty-sw.html";
 const FETCH_SW_TAB_URL = URL_ROOT + "service-workers/fetch-sw.html";
 
 function* testBody(url, expecting) {
   yield enableServiceWorkerDebugging();
   let { tab, document } = yield openAboutDebugging("workers");
 
-  let swTab = yield addTab(url);
+  let swTab = yield addTab(url, {background: true});
 
   let serviceWorkersElement = getServiceWorkerList(document);
 
   info("Wait for fetch flag.");
   yield waitUntil(() => {
     let fetchFlags =
       [...document.querySelectorAll("#service-workers .service-worker-fetch-flag")];
     fetchFlags = fetchFlags.map(element => element.textContent);
--- a/devtools/client/aboutdebugging/test/browser_service_workers_push.js
+++ b/devtools/client/aboutdebugging/test/browser_service_workers_push.js
@@ -17,17 +17,17 @@ const TAB_URL = URL_ROOT + "service-work
 add_task(function* () {
   yield enableServiceWorkerDebugging();
   let { tab, document } = yield openAboutDebugging("workers");
 
   // Listen for mutations in the service-workers list.
   let serviceWorkersElement = getServiceWorkerList(document);
 
   // Open a tab that registers a push service worker.
-  let swTab = yield addTab(TAB_URL);
+  let swTab = yield addTab(TAB_URL, { background: true });
 
   info("Make the test page notify us when the service worker sends a message.");
 
   yield ContentTask.spawn(swTab.linkedBrowser, {}, function () {
     let win = content.wrappedJSObject;
     win.navigator.serviceWorker.addEventListener("message", function (event) {
       sendAsyncMessage(event.data);
     });
--- a/devtools/client/aboutdebugging/test/browser_service_workers_push_service.js
+++ b/devtools/client/aboutdebugging/test/browser_service_workers_push_service.js
@@ -53,17 +53,17 @@ add_task(function* () {
   };
 
   let { tab, document } = yield openAboutDebugging("workers");
 
   // Listen for mutations in the service-workers list.
   let serviceWorkersElement = document.getElementById("service-workers");
 
   // Open a tab that registers a push service worker.
-  let swTab = yield addTab(TAB_URL);
+  let swTab = yield addTab(TAB_URL, { background: true });
 
   info("Wait until the service worker appears in about:debugging");
   yield waitUntilServiceWorkerContainer(SERVICE_WORKER, document);
 
   yield waitForServiceWorkerActivation(SERVICE_WORKER, document);
 
   // Wait for the service worker details to update.
   let names = [...document.querySelectorAll("#service-workers .target-name")];
--- a/devtools/client/aboutdebugging/test/browser_service_workers_start.js
+++ b/devtools/client/aboutdebugging/test/browser_service_workers_start.js
@@ -20,17 +20,17 @@ add_task(function* () {
   yield pushPref("dom.serviceWorkers.idle_extended_timeout", SW_TIMEOUT);
 
   let { tab, document } = yield openAboutDebugging("workers");
 
   // Listen for mutations in the service-workers list.
   let serviceWorkersElement = getServiceWorkerList(document);
 
   // Open a tab that registers an empty service worker.
-  let swTab = yield addTab(TAB_URL);
+  let swTab = yield addTab(TAB_URL, { background: true });
 
   // Wait for the service-workers list to update.
   info("Wait until the service worker appears in about:debugging");
   yield waitUntilServiceWorkerContainer(SERVICE_WORKER, document);
 
   info("Ensure that the registration resolved before trying to interact with " +
     "the service worker.");
   yield waitForServiceWorkerRegistered(swTab);
--- a/devtools/client/aboutdebugging/test/browser_service_workers_status.js
+++ b/devtools/client/aboutdebugging/test/browser_service_workers_status.js
@@ -16,17 +16,17 @@ add_task(function* () {
   yield pushPref("dom.serviceWorkers.idle_timeout", SW_TIMEOUT);
   yield pushPref("dom.serviceWorkers.idle_extended_timeout", SW_TIMEOUT);
 
   let { tab, document } = yield openAboutDebugging("workers");
 
   // Listen for mutations in the service-workers list.
   let serviceWorkersElement = getServiceWorkerList(document);
 
-  let swTab = yield addTab(TAB_URL);
+  let swTab = yield addTab(TAB_URL, { background: true });
 
   info("Wait until the service worker appears in about:debugging");
   let container = yield waitUntilServiceWorkerContainer(SERVICE_WORKER, document);
 
   // We should ideally check that the service worker registration goes through the
   // "registering" and "running" steps, but it is difficult to workaround race conditions
   // for a test running on a wide variety of platforms. Due to intermittent failures, we
   // simply check that the registration transitions to "stopped".
--- a/devtools/client/aboutdebugging/test/browser_service_workers_timeout.js
+++ b/devtools/client/aboutdebugging/test/browser_service_workers_timeout.js
@@ -15,17 +15,17 @@ add_task(function* () {
   yield enableServiceWorkerDebugging();
   yield pushPref("dom.serviceWorkers.idle_timeout", SW_TIMEOUT);
   yield pushPref("dom.serviceWorkers.idle_extended_timeout", SW_TIMEOUT);
 
   let { tab, document } = yield openAboutDebugging("workers");
 
   let serviceWorkersElement = getServiceWorkerList(document);
 
-  let swTab = yield addTab(TAB_URL);
+  let swTab = yield addTab(TAB_URL, { background: true });
 
   info("Wait until the service worker appears in about:debugging");
   yield waitUntilServiceWorkerContainer(SERVICE_WORKER, document);
 
   // Ensure that the registration resolved before trying to connect to the sw
   yield waitForServiceWorkerRegistered(swTab);
   ok(true, "Service worker registration resolved");
 
--- a/devtools/client/aboutdebugging/test/browser_service_workers_unregister.js
+++ b/devtools/client/aboutdebugging/test/browser_service_workers_unregister.js
@@ -15,17 +15,17 @@ const SERVICE_WORKER = SCOPE + "empty-sw
 const TAB_URL = SCOPE + "empty-sw.html";
 
 add_task(function* () {
   yield enableServiceWorkerDebugging();
 
   let { tab, document } = yield openAboutDebugging("workers");
 
   // Open a tab that registers an empty service worker.
-  let swTab = yield addTab(TAB_URL);
+  let swTab = yield addTab(TAB_URL, { background: true });
 
   info("Wait until the service worker appears in about:debugging");
   yield waitUntilServiceWorkerContainer(SERVICE_WORKER, document);
 
   yield waitForServiceWorkerActivation(SERVICE_WORKER, document);
 
   info("Ensure that the registration resolved before trying to interact with " +
     "the service worker.");
--- a/dom/animation/test/mozilla/file_restyles.html
+++ b/dom/animation/test/mozilla/file_restyles.html
@@ -1138,16 +1138,108 @@ waitForAllPaints(() => {
     var markers = await observeStyling(5);
     is(markers.length, 0,
        'CSS animation on an out-of-view element with pre-transform should be ' +
        'throttled.');
 
     await ensureElementRemoval(scrollDiv);
   });
 
+  add_task(
+    async function throttling_animations_in_out_of_view_position_absolute_element() {
+      if (!offscreenThrottlingEnabled) {
+        return;
+      }
+
+      var parentDiv = addDiv(null,
+                             { style: 'position: absolute; top: -1000px;' });
+      var targetDiv = addDiv(null,
+                             { style: 'animation: background-color 100s;' });
+      parentDiv.appendChild(targetDiv);
+
+      var animation = targetDiv.getAnimations()[0];
+      await animation.ready;
+
+      var markers = await observeStyling(5);
+      is(markers.length, 0,
+         'CSS animation in an out-of-view position absolute element should ' +
+         'be throttled');
+
+      await ensureElementRemoval(parentDiv);
+    }
+  );
+
+  add_task(
+    async function throttling_animations_on_out_of_view_position_absolute_element() {
+      if (!offscreenThrottlingEnabled) {
+        return;
+      }
+
+      var div = addDiv(null,
+                       { style: 'animation: background-color 100s; ' +
+                                'position: absolute; top: -1000px;' });
+
+      var animation = div.getAnimations()[0];
+      await animation.ready;
+
+      var markers = await observeStyling(5);
+      is(markers.length, 0,
+         'CSS animation on an out-of-view position absolute element should ' +
+         'be throttled');
+
+      await ensureElementRemoval(div);
+    }
+  );
+
+  add_task(
+    async function throttling_animations_in_out_of_view_position_fixed_element() {
+      if (!offscreenThrottlingEnabled) {
+        return;
+      }
+
+      var parentDiv = addDiv(null,
+                             { style: 'position: fixed; top: -1000px;' });
+      var targetDiv = addDiv(null,
+                             { style: 'animation: background-color 100s;' });
+      parentDiv.appendChild(targetDiv);
+
+      var animation = targetDiv.getAnimations()[0];
+      await animation.ready;
+
+      var markers = await observeStyling(5);
+      is(markers.length, 0,
+         'CSS animation on an out-of-view position:fixed element should be ' +
+         'throttled');
+
+      await ensureElementRemoval(parentDiv);
+    }
+  );
+
+  add_task(
+    async function throttling_animations_on_out_of_view_position_fixed_element() {
+      if (!offscreenThrottlingEnabled) {
+        return;
+      }
+
+      var div = addDiv(null,
+                       { style: 'animation: background-color 100s; ' +
+                                'position: fixed; top: -1000px;' });
+
+      var animation = div.getAnimations()[0];
+      await animation.ready;
+
+      var markers = await observeStyling(5);
+      is(markers.length, 0,
+         'CSS animation on an out-of-view position:fixed element should be ' +
+         'throttled');
+
+      await ensureElementRemoval(div);
+    }
+  );
+
   add_task_if_omta_enabled(
     async function no_restyling_for_compositor_animation_on_unrelated_style_change() {
       var div = addDiv(null);
       var animation = div.animate({ opacity: [0, 1] }, 100 * MS_PER_SEC);
 
       await animation.ready;
       ok(SpecialPowers.wrap(animation).isRunningOnCompositor,
          'The opacity animation is running on the compositor');
--- a/dom/base/nsGkAtomList.h
+++ b/dom/base/nsGkAtomList.h
@@ -2245,17 +2245,17 @@ GK_ATOM(mozfixed, "-moz-fixed")
 GK_ATOM(Remote, "remote")
 GK_ATOM(RemoteId, "_remote_id")
 GK_ATOM(RemoteType, "remoteType")
 GK_ATOM(DisplayPort, "_displayport")
 GK_ATOM(DisplayPortMargins, "_displayportmargins")
 GK_ATOM(DisplayPortBase, "_displayportbase")
 GK_ATOM(AsyncScrollLayerCreationFailed, "_asyncscrolllayercreationfailed")
 GK_ATOM(forcemessagemanager, "forcemessagemanager")
-GK_ATOM(isPreloadBrowser, "isPreloadBrowser")
+GK_ATOM(preloadedState, "preloadedState")
 
 // Names for system metrics
 GK_ATOM(scrollbar_start_backward, "scrollbar-start-backward")
 GK_ATOM(scrollbar_start_forward, "scrollbar-start-forward")
 GK_ATOM(scrollbar_end_backward, "scrollbar-end-backward")
 GK_ATOM(scrollbar_end_forward, "scrollbar-end-forward")
 GK_ATOM(scrollbar_thumb_proportional, "scrollbar-thumb-proportional")
 GK_ATOM(overlay_scrollbars, "overlay-scrollbars")
--- a/dom/base/test/browser_aboutnewtab_process_selection.js
+++ b/dom/base/test/browser_aboutnewtab_process_selection.js
@@ -1,9 +1,11 @@
 const TEST_URL = "http://www.example.com/browser/dom/base/test/dummy.html";
+const PRELOADED_STATE = "preloaded";
+const CONSUMED_STATE = "consumed";
 
 var ppmm = Services.ppmm;
 
 add_task(async function(){
   // We want to count processes in this test, so let's disable the pre-allocated process manager.
   await SpecialPowers.pushPrefEnv({"set": [
     ["dom.ipc.processPrelaunch.enabled", false],
     ["dom.ipc.processCount", 10],
@@ -72,8 +74,35 @@ add_task(async function(){
 
   // Make sure the preload browser does not keep any of the new processes alive.
   gBrowser.removePreloadedBrowser();
 
   // Since we kept alive all the processes, we can shut down the ones that do
   // not host any tabs reliably.
   ppmm.releaseCachedProcesses();
 });
+
+add_task(async function preloaded_state_attribute() {
+  // Wait for a preloaded browser to exist, use it, and then create another one
+  await ensurePreloaded(gBrowser);
+  let preloadedTabState = gBrowser._preloadedBrowser.getAttribute("preloadedState");
+  is(preloadedTabState, PRELOADED_STATE, "Sanity check that the first preloaded browser has the correct attribute");
+
+  BrowserOpenTab();
+  await ensurePreloaded(gBrowser);
+
+  // Now check that the tabs have the correct browser attributes set
+  let consumedTabState = gBrowser.selectedBrowser.getAttribute("preloadedState");
+  is(consumedTabState, CONSUMED_STATE, "The opened tab consumed the preloaded browser and updated the attribute");
+
+  preloadedTabState = gBrowser._preloadedBrowser.getAttribute("preloadedState");
+  is(preloadedTabState, PRELOADED_STATE, "The preloaded browser has the correct attribute");
+
+  // Navigate away and check that the attribute has been removed altogether
+  gBrowser.selectedBrowser.loadURI(TEST_URL);
+  let navigatedTabHasState = gBrowser.selectedBrowser.hasAttribute("preloadedState");
+  ok(!navigatedTabHasState, "Correctly removed the preloadState attribute when navigating away");
+
+  // Remove tabs and preloaded browsers
+  await BrowserTestUtils.removeTab(gBrowser.selectedTab);
+  gBrowser.removePreloadedBrowser();
+});
+
--- a/dom/ipc/ContentParent.cpp
+++ b/dom/ipc/ContentParent.cpp
@@ -1131,19 +1131,19 @@ ContentParent::CreateBrowser(const TabCo
   nsIDocShell* docShell = GetOpenerDocShellHelper(aFrameElement);
   TabId openerTabId;
   if (docShell) {
     openerTabId = TabParent::GetTabIdFrom(docShell);
   }
 
   bool isPreloadBrowser = false;
   nsAutoString isPreloadBrowserStr;
-  if (aFrameElement->GetAttr(kNameSpaceID_None, nsGkAtoms::isPreloadBrowser,
+  if (aFrameElement->GetAttr(kNameSpaceID_None, nsGkAtoms::preloadedState,
                              isPreloadBrowserStr)) {
-    isPreloadBrowser = isPreloadBrowserStr.EqualsLiteral("true");
+    isPreloadBrowser = isPreloadBrowserStr.EqualsLiteral("preloaded");
   }
 
   RefPtr<nsIContentParent> constructorSender;
   if (isInContentProcess) {
     MOZ_ASSERT(aContext.IsMozBrowserElement() || aContext.IsJSPlugin());
     constructorSender = CreateContentBridgeParent(aContext, initialPriority,
                                                   openerTabId, tabId);
   } else {
--- a/dom/media/MediaCache.cpp
+++ b/dom/media/MediaCache.cpp
@@ -719,26 +719,28 @@ MediaCache::Flush()
     });
   sThread->Dispatch(r.forget());
 }
 
 void
 MediaCache::CloseStreamsForPrivateBrowsing()
 {
   MOZ_ASSERT(NS_IsMainThread());
-  sThread->Dispatch(
-    NS_NewRunnableFunction("MediaCache::CloseStreamsForPrivateBrowsing",
-                           [self = RefPtr<MediaCache>(this)]() {
-                             AutoLock lock(self->mMonitor);
-                             for (MediaCacheStream* s : self->mStreams) {
-                               if (s->mIsPrivateBrowsing) {
-                                 s->CloseInternal(lock);
-                               }
-                             }
-                           }));
+  sThread->Dispatch(NS_NewRunnableFunction(
+    "MediaCache::CloseStreamsForPrivateBrowsing",
+    [self = RefPtr<MediaCache>(this)]() {
+      AutoLock lock(self->mMonitor);
+      // Copy mStreams since CloseInternal() will change the array.
+      nsTArray<MediaCacheStream*> streams(self->mStreams);
+      for (MediaCacheStream* s : streams) {
+        if (s->mIsPrivateBrowsing) {
+          s->CloseInternal(lock);
+        }
+      }
+    }));
 }
 
 /* static */ RefPtr<MediaCache>
 MediaCache::GetMediaCache(int64_t aContentLength)
 {
   NS_ASSERTION(NS_IsMainThread(), "Only call on main thread");
 
   if (!sThreadInit) {
--- a/gfx/vr/gfxVROculus.cpp
+++ b/gfx/vr/gfxVROculus.cpp
@@ -385,24 +385,24 @@ VROculusSession::Refresh(bool aForceRefr
       // traversal.
       bInvisible = false;
 
       // While we are waiting for either the timeout or a new presentation,
       // fill the HMD with black / no layers.
       if (mSession && mTextureSet) {
         if (!aForceRefresh) {
           // VROculusSession didn't start submitting frames yet.
-          if (!mSubmitThread) {
+          // Or, the VR thread has been shut down already.
+          if (!mSubmitThread || !mSubmitThread->IsActive()) {
             return;
           }
           // ovr_SubmitFrame is running at VR Submit thread,
           // so we post this task to VR Submit thread and let it paint
           // a black frame.
           mDrawBlack = true;
-          MOZ_ASSERT(mSubmitThread->IsActive());
           mSubmitThread->PostTask(NewRunnableMethod<bool>(
             "gfx::VROculusSession::Refresh",
             this,
             &VROculusSession::Refresh, true));
           return;
         }
         ovrLayerEyeFov layer;
         memset(&layer, 0, sizeof(layer));
--- a/layout/generic/nsBlockFrame.cpp
+++ b/layout/generic/nsBlockFrame.cpp
@@ -447,26 +447,16 @@ nsBlockFrame::List(FILE* out, const char
 
 nsresult
 nsBlockFrame::GetFrameName(nsAString& aResult) const
 {
   return MakeFrameName(NS_LITERAL_STRING("Block"), aResult);
 }
 #endif
 
-#ifdef DEBUG
-nsFrameState
-nsBlockFrame::GetDebugStateBits() const
-{
-  // We don't want to include our cursor flag in the bits the
-  // regression tester looks at
-  return nsContainerFrame::GetDebugStateBits() & ~NS_BLOCK_HAS_LINE_CURSOR;
-}
-#endif
-
 void
 nsBlockFrame::InvalidateFrame(uint32_t aDisplayItemKey)
 {
   if (nsSVGUtils::IsInSVGTextSubtree(this)) {
     NS_ASSERTION(GetParent()->IsSVGTextFrame(),
                  "unexpected block frame in SVG text");
     GetParent()->InvalidateFrame();
     return;
--- a/layout/generic/nsBlockFrame.h
+++ b/layout/generic/nsBlockFrame.h
@@ -152,17 +152,16 @@ public:
   void InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey = 0) override;
 
 #ifdef DEBUG_FRAME_DUMP
   void List(FILE* out = stderr, const char* aPrefix = "", uint32_t aFlags = 0) const override;
   nsresult GetFrameName(nsAString& aResult) const override;
 #endif
 
 #ifdef DEBUG
-  nsFrameState GetDebugStateBits() const override;
   const char* LineReflowStatusToString(LineReflowStatus aLineReflowStatus) const;
 #endif
 
 #ifdef ACCESSIBILITY
   mozilla::a11y::AccType AccessibleType() override;
 #endif
 
   // Line cursor methods to speed up line searching in which one query
--- a/layout/generic/nsFrame.cpp
+++ b/layout/generic/nsFrame.cpp
@@ -7806,65 +7806,16 @@ nsIFrame::RootFrameList(nsPresContext* a
     nsIFrame* frame = shell->FrameManager()->GetRootFrame();
     if(frame) {
       frame->List(out, aPrefix);
     }
   }
 }
 #endif
 
-#ifdef DEBUG
-nsFrameState
-nsFrame::GetDebugStateBits() const
-{
-  // We'll ignore these flags for the purposes of comparing frame state:
-  //
-  //   NS_FRAME_EXTERNAL_REFERENCE
-  //     because this is set by the event state manager or the
-  //     caret code when a frame is focused. Depending on whether
-  //     or not the regression tests are run as the focused window
-  //     will make this value vary randomly.
-#define IRRELEVANT_FRAME_STATE_FLAGS NS_FRAME_EXTERNAL_REFERENCE
-
-#define FRAME_STATE_MASK (~(IRRELEVANT_FRAME_STATE_FLAGS))
-
-  return GetStateBits() & FRAME_STATE_MASK;
-}
-
-void
-nsFrame::XMLQuote(nsString& aString)
-{
-  int32_t i, len = aString.Length();
-  for (i = 0; i < len; i++) {
-    char16_t ch = aString.CharAt(i);
-    if (ch == '<') {
-      nsAutoString tmp(NS_LITERAL_STRING("&lt;"));
-      aString.Cut(i, 1);
-      aString.Insert(tmp, i);
-      len += 3;
-      i += 3;
-    }
-    else if (ch == '>') {
-      nsAutoString tmp(NS_LITERAL_STRING("&gt;"));
-      aString.Cut(i, 1);
-      aString.Insert(tmp, i);
-      len += 3;
-      i += 3;
-    }
-    else if (ch == '\"') {
-      nsAutoString tmp(NS_LITERAL_STRING("&quot;"));
-      aString.Cut(i, 1);
-      aString.Insert(tmp, i);
-      len += 5;
-      i += 5;
-    }
-  }
-}
-#endif
-
 bool
 nsIFrame::IsVisibleForPainting(nsDisplayListBuilder* aBuilder) {
   if (!StyleVisibility()->IsVisible())
     return false;
   nsISelection* sel = aBuilder->GetBoundingSelection();
   return !sel || IsVisibleInSelection(sel);
 }
 
@@ -11011,16 +10962,17 @@ nsIFrame::GetPseudoElement(CSSPseudoElem
 static bool
 IsFrameScrolledOutOfView(nsIFrame* aTarget,
                          const nsRect& aTargetRect,
                          nsIFrame* aParent)
 {
   nsIScrollableFrame* scrollableFrame =
     nsLayoutUtils::GetNearestScrollableFrame(aParent,
       nsLayoutUtils::SCROLLABLE_SAME_DOC |
+      nsLayoutUtils::SCROLLABLE_FIXEDPOS_FINDS_ROOT |
       nsLayoutUtils::SCROLLABLE_INCLUDE_HIDDEN);
   if (!scrollableFrame) {
     return false;
   }
 
   nsIFrame *scrollableParent = do_QueryFrame(scrollableFrame);
 
   nsRect transformedRect =
--- a/layout/generic/nsFrame.h
+++ b/layout/generic/nsFrame.h
@@ -489,18 +489,16 @@ public:
   void Trace(const char* aMethod, bool aEnter);
   void Trace(const char* aMethod, bool aEnter, const nsReflowStatus& aStatus);
   void TraceMsg(const char* fmt, ...) MOZ_FORMAT_PRINTF(2, 3);
 
   // Helper function that verifies that each frame in the list has the
   // NS_FRAME_IS_DIRTY bit set
   static void VerifyDirtyBitSet(const nsFrameList& aFrameList);
 
-  static void XMLQuote(nsString& aString);
-
   // Display Reflow Debugging
   static void* DisplayReflowEnter(nsPresContext*          aPresContext,
                                   nsIFrame*                aFrame,
                                   const ReflowInput& aReflowInput);
   static void* DisplayLayoutEnter(nsIFrame* aFrame);
   static void* DisplayIntrinsicISizeEnter(nsIFrame* aFrame,
                                           const char* aType);
   static void* DisplayIntrinsicSizeEnter(nsIFrame* aFrame,
@@ -723,21 +721,16 @@ public:
   // Helper function to return the index in parent of the frame's content
   // object. Returns -1 on error or if the frame doesn't have a content object
   static int32_t ContentIndexInContainer(const nsIFrame* aFrame);
 #endif
 
 #ifdef DEBUG
 public:
   /**
-   * Return the state bits that are relevant to regression tests (that
-   * is, those bits which indicate a real difference when they differ
-   */
-  nsFrameState GetDebugStateBits() const override;
-  /**
    * See if style tree verification is enabled. To enable style tree
    * verification add "styleverifytree:1" to your MOZ_LOG
    * environment variable (any non-zero debug level will work). Or,
    * call SetVerifyStyleTreeEnable with true.
    */
   static bool GetVerifyStyleTreeEnable();
 
   /**
--- a/layout/generic/nsIFrame.h
+++ b/layout/generic/nsIFrame.h
@@ -4545,21 +4545,16 @@ public:
    */
   static void RootFrameList(nsPresContext* aPresContext,
                             FILE* out = stderr, const char* aPrefix = "");
   virtual void DumpFrameTree() const;
   void DumpFrameTreeLimited() const;
 
   virtual nsresult  GetFrameName(nsAString& aResult) const = 0;
 #endif
-
-#ifdef DEBUG
-public:
-  virtual nsFrameState  GetDebugStateBits() const = 0;
-#endif
 };
 
 //----------------------------------------------------------------------
 
 /**
  * AutoWeakFrame can be used to keep a reference to a nsIFrame in a safe way.
  * Whenever an nsIFrame object is deleted, the AutoWeakFrames pointing
  * to it will be cleared.  AutoWeakFrame is for variables on the stack or
--- a/layout/generic/nsTextFrame.cpp
+++ b/layout/generic/nsTextFrame.cpp
@@ -10256,26 +10256,16 @@ nsTextFrame::List(FILE* out, const char*
 
   if (IsSelected()) {
     str += " SELECTED";
   }
   fprintf_stderr(out, "%s\n", str.get());
 }
 #endif
 
-#ifdef DEBUG
-nsFrameState
-nsTextFrame::GetDebugStateBits() const
-{
-  // mask out our emptystate flags; those are just caches
-  return nsFrame::GetDebugStateBits() &
-    ~(TEXT_WHITESPACE_FLAGS | TEXT_REFLOW_FLAGS);
-}
-#endif
-
 void
 nsTextFrame::AdjustOffsetsForBidi(int32_t aStart, int32_t aEnd)
 {
   AddStateBits(NS_FRAME_IS_BIDI);
   if (mContent->HasFlag(NS_HAS_FLOWLENGTH_PROPERTY)) {
     mContent->DeleteProperty(nsGkAtoms::flowlength);
     mContent->UnsetFlags(NS_HAS_FLOWLENGTH_PROPERTY);
   }
--- a/layout/generic/nsTextFrame.h
+++ b/layout/generic/nsTextFrame.h
@@ -167,20 +167,16 @@ public:
 #ifdef DEBUG_FRAME_DUMP
   void List(FILE* out = stderr,
             const char* aPrefix = "",
             uint32_t aFlags = 0) const override;
   nsresult GetFrameName(nsAString& aResult) const override;
   void ToCString(nsCString& aBuf, int32_t* aTotalContentLength) const;
 #endif
 
-#ifdef DEBUG
-  nsFrameState GetDebugStateBits() const override;
-#endif
-
   ContentOffsets CalcContentOffsetsFromFramePoint(const nsPoint& aPoint) override;
   ContentOffsets GetCharacterOffsetAtFramePoint(const nsPoint& aPoint);
 
   /**
    * This is called only on the primary text frame. It indicates that
    * the selection state of the given character range has changed.
    * Text in the range is unconditionally invalidated
    * (Selection::Repaint depends on this).
--- a/layout/moz.build
+++ b/layout/moz.build
@@ -32,12 +32,12 @@ if CONFIG['NS_PRINTING']:
     DIRS += ['printing']
 
 TEST_DIRS += [
     'tools/reftest',
 ]
 
 DIRS += ['build', 'media']
 
-if CONFIG['MOZ_DEBUG']:
+if CONFIG['MOZ_DEBUG'] and CONFIG['MOZ_WIDGET_TOOLKIT'] != 'android':
     TEST_DIRS += ['tools/layout-debug']
 
 CRASHTEST_MANIFESTS += ['../testing/crashtest/crashtests.list']
--- a/layout/style/ServoBindings.cpp
+++ b/layout/style/ServoBindings.cpp
@@ -1797,44 +1797,43 @@ Gecko_EnsureImageLayersLength(nsStyleIma
 
   aLayers->mLayers.EnsureLengthAtLeast(aLen);
 
   for (size_t i = oldLength; i < aLen; ++i) {
     aLayers->mLayers[i].Initialize(aLayerType);
   }
 }
 
+template <typename StyleType>
+static void
+EnsureStyleAutoArrayLength(StyleType* aArray, size_t aLen)
+{
+  size_t oldLength = aArray->Length();
+
+  aArray->EnsureLengthAtLeast(aLen);
+
+  for (size_t i = oldLength; i < aLen; ++i) {
+    (*aArray)[i].SetInitialValues();
+  }
+}
+
 void
 Gecko_EnsureStyleAnimationArrayLength(void* aArray, size_t aLen)
 {
   auto base =
     static_cast<nsStyleAutoArray<StyleAnimation>*>(aArray);
-
-  size_t oldLength = base->Length();
-
-  base->EnsureLengthAtLeast(aLen);
-
-  for (size_t i = oldLength; i < aLen; ++i) {
-    (*base)[i].SetInitialValues();
-  }
+  EnsureStyleAutoArrayLength(base, aLen);
 }
 
 void
 Gecko_EnsureStyleTransitionArrayLength(void* aArray, size_t aLen)
 {
   auto base =
     reinterpret_cast<nsStyleAutoArray<StyleTransition>*>(aArray);
-
-  size_t oldLength = base->Length();
-
-  base->EnsureLengthAtLeast(aLen);
-
-  for (size_t i = oldLength; i < aLen; ++i) {
-    (*base)[i].SetInitialValues();
-  }
+  EnsureStyleAutoArrayLength(base, aLen);
 }
 
 void
 Gecko_ClearWillChange(nsStyleDisplay* aDisplay, size_t aLength)
 {
   aDisplay->mWillChange.Clear();
   aDisplay->mWillChange.SetCapacity(aLength);
 }
--- a/layout/style/nsAnimationManager.cpp
+++ b/layout/style/nsAnimationManager.cpp
@@ -417,24 +417,24 @@ class MOZ_STACK_CLASS ServoCSSAnimationB
 public:
   explicit ServoCSSAnimationBuilder(const ServoStyleContext* aStyleContext)
     : mStyleContext(aStyleContext)
   {
     MOZ_ASSERT(aStyleContext);
   }
 
   bool BuildKeyframes(nsPresContext* aPresContext,
-                      const StyleAnimation& aSrc,
+                      nsAtom* aName,
+                      const nsTimingFunction& aTimingFunction,
                       nsTArray<Keyframe>& aKeyframes)
   {
     ServoStyleSet* styleSet = aPresContext->StyleSet()->AsServo();
     MOZ_ASSERT(styleSet);
-    const nsTimingFunction& timingFunction = aSrc.GetTimingFunction();
-    return styleSet->GetKeyframesForName(aSrc.GetName(),
-                                         timingFunction,
+    return styleSet->GetKeyframesForName(aName,
+                                         aTimingFunction,
                                          aKeyframes);
   }
   void SetKeyframes(KeyframeEffectReadOnly& aEffect,
                     nsTArray<Keyframe>&& aKeyframes)
   {
     aEffect.SetKeyframes(Move(aKeyframes), mStyleContext);
   }
 
@@ -488,29 +488,30 @@ public:
     : mStyleContext(aStyleContext)
     , mTarget(aTarget)
   {
     MOZ_ASSERT(aStyleContext);
     MOZ_ASSERT(aTarget.mElement);
   }
 
   bool BuildKeyframes(nsPresContext* aPresContext,
-                      const StyleAnimation& aSrc,
+                      nsAtom* aName,
+                      const nsTimingFunction& aTimingFunction,
                       nsTArray<Keyframe>& aKeyframs);
   void SetKeyframes(KeyframeEffectReadOnly& aEffect,
                     nsTArray<Keyframe>&& aKeyframes)
   {
     aEffect.SetKeyframes(Move(aKeyframes), mStyleContext);
   }
 
   void NotifyNewOrRemovedAnimation(const Animation&) {}
 
 private:
   nsTArray<Keyframe> BuildAnimationFrames(nsPresContext* aPresContext,
-                                          const StyleAnimation& aSrc,
+                                          const nsTimingFunction& aTimingFunction,
                                           const nsCSSKeyframesRule* aRule);
   Maybe<ComputedTimingFunction> GetKeyframeTimingFunction(
     nsPresContext* aPresContext,
     nsCSSKeyframeRule* aKeyframeRule,
     const Maybe<ComputedTimingFunction>& aInheritedTimingFunction);
   nsTArray<PropertyValuePair> GetKeyframePropertyValues(
     nsPresContext* aPresContext,
     nsCSSKeyframeRule* aKeyframeRule,
@@ -584,40 +585,47 @@ UpdateOldAnimationPropertiesWithNew(
 
 // Returns a new animation set up with given StyleAnimation.
 // Or returns an existing animation matching StyleAnimation's name updated
 // with the new StyleAnimation.
 template<class BuilderType>
 static already_AddRefed<CSSAnimation>
 BuildAnimation(nsPresContext* aPresContext,
                const NonOwningAnimationTarget& aTarget,
-               const StyleAnimation& aSrc,
+               const nsStyleDisplay& aStyleDisplay,
+               uint32_t animIdx,
                BuilderType& aBuilder,
                nsAnimationManager::CSSAnimationCollection* aCollection)
 {
   MOZ_ASSERT(aPresContext);
 
+  nsAtom* animationName = aStyleDisplay.GetAnimationName(animIdx);
   nsTArray<Keyframe> keyframes;
-  if (!aBuilder.BuildKeyframes(aPresContext, aSrc, keyframes)) {
+  if (!aBuilder.BuildKeyframes(aPresContext,
+                               animationName,
+                               aStyleDisplay.GetAnimationTimingFunction(animIdx),
+                               keyframes)) {
     return nullptr;
   }
 
-  TimingParams timing = TimingParamsFromCSSParams(aSrc.GetDuration(),
-                                                  aSrc.GetDelay(),
-                                                  aSrc.GetIterationCount(),
-                                                  aSrc.GetDirection(),
-                                                  aSrc.GetFillMode());
+  TimingParams timing =
+    TimingParamsFromCSSParams(aStyleDisplay.GetAnimationDuration(animIdx),
+                              aStyleDisplay.GetAnimationDelay(animIdx),
+                              aStyleDisplay.GetAnimationIterationCount(animIdx),
+                              aStyleDisplay.GetAnimationDirection(animIdx),
+                              aStyleDisplay.GetAnimationFillMode(animIdx));
 
   bool isStylePaused =
-    aSrc.GetPlayState() == NS_STYLE_ANIMATION_PLAY_STATE_PAUSED;
+    aStyleDisplay.GetAnimationPlayState(animIdx) ==
+      NS_STYLE_ANIMATION_PLAY_STATE_PAUSED;
 
   // Find the matching animation with animation name in the old list
   // of animations and remove the matched animation from the list.
   RefPtr<CSSAnimation> oldAnim =
-    PopExistingAnimation(aSrc.GetName(), aCollection);
+    PopExistingAnimation(animationName, aCollection);
 
   if (oldAnim) {
     // Copy over the start times and (if still paused) pause starts
     // for each animation (matching on name only) that was also in the
     // old list of animations.
     // This means that we honor dynamic changes, which isn't what the
     // spec says to do, but WebKit seems to honor at least some of
     // them.  See
@@ -637,18 +645,17 @@ BuildAnimation(nsPresContext* aPresConte
   KeyframeEffectParams effectOptions;
   RefPtr<KeyframeEffectReadOnly> effect =
     new KeyframeEffectReadOnly(aPresContext->Document(), target, timing,
                                effectOptions);
 
   aBuilder.SetKeyframes(*effect, Move(keyframes));
 
   RefPtr<CSSAnimation> animation =
-    new CSSAnimation(aPresContext->Document()->GetScopeObject(),
-                     aSrc.GetName());
+    new CSSAnimation(aPresContext->Document()->GetScopeObject(), animationName);
   animation->SetOwningElement(
     OwningElementRef(*aTarget.mElement, aTarget.mPseudoType));
 
   animation->SetTimelineNoUpdate(aTarget.mElement->OwnerDoc()->Timeline());
   animation->SetEffectNoUpdate(effect);
 
   if (isStylePaused) {
     animation->PauseFromStyle();
@@ -658,37 +665,39 @@ BuildAnimation(nsPresContext* aPresConte
 
   aBuilder.NotifyNewOrRemovedAnimation(*animation);
 
   return animation.forget();
 }
 
 bool
 GeckoCSSAnimationBuilder::BuildKeyframes(nsPresContext* aPresContext,
-                                         const StyleAnimation& aSrc,
+                                         nsAtom* aName,
+                                         const nsTimingFunction& aTimingFunction,
                                          nsTArray<Keyframe>& aKeyframes)
 {
   MOZ_ASSERT(aPresContext);
   MOZ_ASSERT(aPresContext->StyleSet()->IsGecko());
 
   nsCSSKeyframesRule* rule =
-    aPresContext->StyleSet()->AsGecko()->KeyframesRuleForName(aSrc.GetName());
+    aPresContext->StyleSet()->AsGecko()->KeyframesRuleForName(aName);
   if (!rule) {
     return false;
   }
 
-  aKeyframes = BuildAnimationFrames(aPresContext, aSrc, rule);
+  aKeyframes = BuildAnimationFrames(aPresContext, aTimingFunction, rule);
 
   return true;
 }
 
 nsTArray<Keyframe>
-GeckoCSSAnimationBuilder::BuildAnimationFrames(nsPresContext* aPresContext,
-                                               const StyleAnimation& aSrc,
-                                               const nsCSSKeyframesRule* aRule)
+GeckoCSSAnimationBuilder::BuildAnimationFrames(
+  nsPresContext* aPresContext,
+  const nsTimingFunction& aTimingFunction,
+  const nsCSSKeyframesRule* aRule)
 {
   // Ideally we'd like to build up a set of Keyframe objects that more-or-less
   // reflect the keyframes as-specified in the @keyframes rule(s) so that
   // authors get something intuitive when they call anim.effect.getKeyframes().
   //
   // That, however, proves to be difficult because the way CSS declarations are
   // processed differs from how we are able to represent keyframes as
   // JavaScript objects in the Web Animations API.
@@ -728,17 +737,17 @@ GeckoCSSAnimationBuilder::BuildAnimation
   // for that matter) we resolve values on @keyframes down to computed values
   // (thereby expanding shorthands and variable references) and then pick up the
   // last value for each longhand property at each offset.
 
   // FIXME: There is a pending spec change to make multiple @keyframes
   // rules with the same name cascade but we don't support that yet.
 
   Maybe<ComputedTimingFunction> inheritedTimingFunction =
-    ConvertTimingFunction(aSrc.GetTimingFunction());
+    ConvertTimingFunction(aTimingFunction);
 
   // First, make up Keyframe objects for each rule
   nsTArray<Keyframe> keyframes;
   nsCSSPropertyIDSet animatedProperties;
 
   for (auto ruleIdx = 0, ruleEnd = aRule->StyleRuleCount();
        ruleIdx != ruleEnd; ++ruleIdx) {
     css::Rule* cssRule = aRule->GetStyleRuleAt(ruleIdx);
@@ -1004,38 +1013,36 @@ GeckoCSSAnimationBuilder::FillInMissingK
     }
   }
 }
 
 template<class BuilderType>
 static nsAnimationManager::OwningCSSAnimationPtrArray
 BuildAnimations(nsPresContext* aPresContext,
                 const NonOwningAnimationTarget& aTarget,
-                const nsStyleAutoArray<StyleAnimation>& aStyleAnimations,
-                uint32_t aStyleAnimationNameCount,
+                const nsStyleDisplay& aStyleDisplay,
                 BuilderType& aBuilder,
                 nsAnimationManager::CSSAnimationCollection* aCollection)
 {
   nsAnimationManager::OwningCSSAnimationPtrArray result;
 
-  for (size_t animIdx = aStyleAnimationNameCount; animIdx-- != 0;) {
-    const StyleAnimation& src = aStyleAnimations[animIdx];
-
+  for (size_t animIdx = aStyleDisplay.mAnimationNameCount; animIdx-- != 0;) {
     // CSS Animations whose animation-name does not match a @keyframes rule do
     // not generate animation events. This includes when the animation-name is
     // "none" which is represented by an empty name in the StyleAnimation.
     // Since such animations neither affect style nor dispatch events, we do
     // not generate a corresponding CSSAnimation for them.
-    if (src.GetName() == nsGkAtoms::_empty) {
+    if (aStyleDisplay.GetAnimationName(animIdx) == nsGkAtoms::_empty) {
       continue;
     }
 
     RefPtr<CSSAnimation> dest = BuildAnimation(aPresContext,
                                                aTarget,
-                                               src,
+                                               aStyleDisplay,
+                                               animIdx,
                                                aBuilder,
                                                aCollection);
     if (!dest) {
       continue;
     }
 
     dest->SetAnimationIndex(static_cast<uint64_t>(animIdx));
     result.AppendElement(dest);
@@ -1121,18 +1128,17 @@ nsAnimationManager::DoUpdateAnimations(
 
   nsAutoAnimationMutationBatch mb(aTarget.mElement->OwnerDoc());
 
   // Build the updated animations list, extracting matching animations from
   // the existing collection as we go.
   OwningCSSAnimationPtrArray newAnimations;
   newAnimations = BuildAnimations(mPresContext,
                                   aTarget,
-                                  aStyleDisplay.mAnimations,
-                                  aStyleDisplay.mAnimationNameCount,
+                                  aStyleDisplay,
                                   aBuilder,
                                   collection);
 
   if (newAnimations.IsEmpty()) {
     if (collection) {
       collection->Destroy();
     }
     return;
--- a/layout/style/nsStyleStruct.h
+++ b/layout/style/nsStyleStruct.h
@@ -2255,21 +2255,16 @@ struct StyleTransition
   // Delay and Duration are in milliseconds
 
   const nsTimingFunction& GetTimingFunction() const { return mTimingFunction; }
   float GetDelay() const { return mDelay; }
   float GetDuration() const { return mDuration; }
   nsCSSPropertyID GetProperty() const { return mProperty; }
   nsAtom* GetUnknownProperty() const { return mUnknownProperty; }
 
-  float GetCombinedDuration() const {
-    // http://dev.w3.org/csswg/css-transitions/#combined-duration
-    return std::max(mDuration, 0.0f) + mDelay;
-  }
-
   void SetTimingFunction(const nsTimingFunction& aTimingFunction)
     { mTimingFunction = aTimingFunction; }
   void SetDelay(float aDelay) { mDelay = aDelay; }
   void SetDuration(float aDuration) { mDuration = aDuration; }
   void SetProperty(nsCSSPropertyID aProperty)
     {
       NS_ASSERTION(aProperty != eCSSProperty_UNKNOWN &&
                    aProperty != eCSSPropertyExtra_variable,
@@ -2605,29 +2600,86 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsSt
 
   // The number of elements in mTransitions that are not from repeating
   // a list due to another property being longer.
   uint32_t mTransitionTimingFunctionCount,
            mTransitionDurationCount,
            mTransitionDelayCount,
            mTransitionPropertyCount;
 
+  nsCSSPropertyID GetTransitionProperty(uint32_t aIndex) const
+  {
+    return mTransitions[aIndex % mTransitionPropertyCount].GetProperty();
+  }
+  float GetTransitionDelay(uint32_t aIndex) const
+  {
+    return mTransitions[aIndex % mTransitionDelayCount].GetDelay();
+  }
+  float GetTransitionDuration(uint32_t aIndex) const
+  {
+    return mTransitions[aIndex % mTransitionDurationCount].GetDuration();
+  }
+  const nsTimingFunction& GetTransitionTimingFunction(uint32_t aIndex) const
+  {
+    return mTransitions[aIndex % mTransitionTimingFunctionCount].GetTimingFunction();
+  }
+  float GetTransitionCombinedDuration(uint32_t aIndex) const
+  {
+    // https://drafts.csswg.org/css-transitions/#transition-combined-duration
+    return
+      std::max(mTransitions[aIndex % mTransitionDurationCount].GetDuration(),
+               0.0f)
+        + mTransitions[aIndex % mTransitionDelayCount].GetDelay();
+  }
+
   nsStyleAutoArray<mozilla::StyleAnimation> mAnimations; // [reset]
 
   // The number of elements in mAnimations that are not from repeating
   // a list due to another property being longer.
   uint32_t mAnimationTimingFunctionCount,
            mAnimationDurationCount,
            mAnimationDelayCount,
            mAnimationNameCount,
            mAnimationDirectionCount,
            mAnimationFillModeCount,
            mAnimationPlayStateCount,
            mAnimationIterationCountCount;
 
+  nsAtom* GetAnimationName(uint32_t aIndex) const
+  {
+    return mAnimations[aIndex % mAnimationNameCount].GetName();
+  }
+  float GetAnimationDelay(uint32_t aIndex) const
+  {
+    return mAnimations[aIndex % mAnimationDelayCount].GetDelay();
+  }
+  float GetAnimationDuration(uint32_t aIndex) const
+  {
+    return mAnimations[aIndex % mAnimationDurationCount].GetDuration();
+  }
+  mozilla::dom::PlaybackDirection GetAnimationDirection(uint32_t aIndex) const
+  {
+    return mAnimations[aIndex % mAnimationDirectionCount].GetDirection();
+  }
+  mozilla::dom::FillMode GetAnimationFillMode(uint32_t aIndex) const
+  {
+    return mAnimations[aIndex % mAnimationFillModeCount].GetFillMode();
+  }
+  uint8_t GetAnimationPlayState(uint32_t aIndex) const
+  {
+    return mAnimations[aIndex % mAnimationPlayStateCount].GetPlayState();
+  }
+  float GetAnimationIterationCount(uint32_t aIndex) const
+  {
+    return mAnimations[aIndex % mAnimationIterationCountCount].GetIterationCount();
+  }
+  const nsTimingFunction& GetAnimationTimingFunction(uint32_t aIndex) const
+  {
+    return mAnimations[aIndex % mAnimationTimingFunctionCount].GetTimingFunction();
+  }
 
   // The threshold used for extracting a shape from shape-outside: <image>.
   float mShapeImageThreshold = 0.0f; // [reset]
 
   mozilla::StyleShapeSource mShapeOutside; // [reset]
 
   bool IsBlockInsideStyle() const {
     return mozilla::StyleDisplay::Block == mDisplay ||
--- a/layout/style/nsTransitionManager.cpp
+++ b/layout/style/nsTransitionManager.cpp
@@ -517,17 +517,17 @@ nsTransitionManager::StyleContextChanged
   }
 
   // NOTE: Things in this function (and ConsiderInitiatingTransition)
   // should never call PeekStyleData because we don't preserve gotten
   // structs across reframes.
 
   // Return sooner (before the startedAny check below) for the most
   // common case: no transitions specified or running.
-  const nsStyleDisplay *disp = newStyleContext->StyleDisplay();
+  const nsStyleDisplay* disp = newStyleContext->StyleDisplay();
   CSSPseudoElementType pseudoType = newStyleContext->GetPseudoType();
   if (pseudoType != CSSPseudoElementType::NotPseudo) {
     if (pseudoType != CSSPseudoElementType::before &&
         pseudoType != CSSPseudoElementType::after) {
       return;
     }
 
     NS_ASSERTION((pseudoType == CSSPseudoElementType::before &&
@@ -540,17 +540,17 @@ nsTransitionManager::StyleContextChanged
     // :before or :after is attached to.
     aElement = aElement->GetParent()->AsElement();
   }
 
   CSSTransitionCollection* collection =
     CSSTransitionCollection::GetAnimationCollection(aElement, pseudoType);
   if (!collection &&
       disp->mTransitionPropertyCount == 1 &&
-      disp->mTransitions[0].GetCombinedDuration() <= 0.0f) {
+      disp->GetTransitionCombinedDuration(0) <= 0.0f) {
     return;
   }
 
   MOZ_ASSERT(mPresContext->RestyleManager()->IsGecko(),
              "ServoRestyleManager should not use nsTransitionManager "
              "for transitions");
   if (collection &&
       collection->mCheckGeneration ==
@@ -593,17 +593,17 @@ nsTransitionManager::StyleContextChanged
   }
 
   nsAutoAnimationMutationBatch mb(aElement->OwnerDoc());
 
   DebugOnly<bool> startedAny = false;
   // We don't have to update transitions if display:none, although we will
   // cancel them after restyling.
   if (!afterChangeStyle->IsInDisplayNoneSubtree()) {
-    startedAny = DoUpdateTransitions(disp,
+    startedAny = DoUpdateTransitions(*disp,
                                      aElement,
                                      afterChangeStyle->GetPseudoType(),
                                      collection,
                                      aOldStyleContext->AsGecko(),
                                      afterChangeStyle->AsGecko());
   }
 
   MOZ_ASSERT(!startedAny || collection,
@@ -642,79 +642,77 @@ nsTransitionManager::UpdateTransitions(
 {
   if (!mPresContext->IsDynamic()) {
     // For print or print preview, ignore transitions.
     return false;
   }
 
   CSSTransitionCollection* collection =
     CSSTransitionCollection::GetAnimationCollection(aElement, aPseudoType);
-  const nsStyleDisplay *disp =
+  const nsStyleDisplay* disp =
       aNewStyle->ComputedData()->GetStyleDisplay();
-  return DoUpdateTransitions(disp,
+  return DoUpdateTransitions(*disp,
                              aElement, aPseudoType,
                              collection,
                              aOldStyle, aNewStyle);
 }
 
 template<typename StyleType>
 bool
 nsTransitionManager::DoUpdateTransitions(
-  const nsStyleDisplay* aDisp,
+  const nsStyleDisplay& aDisp,
   dom::Element* aElement,
   CSSPseudoElementType aPseudoType,
   CSSTransitionCollection*& aElementTransitions,
   StyleType aOldStyle,
   StyleType aNewStyle)
 {
-  MOZ_ASSERT(aDisp, "Null nsStyleDisplay");
   MOZ_ASSERT(!aElementTransitions ||
              aElementTransitions->mElement == aElement, "Element mismatch");
 
   // Per http://lists.w3.org/Archives/Public/www-style/2009Aug/0109.html
   // I'll consider only the transitions from the number of items in
   // 'transition-property' on down, and later ones will override earlier
   // ones (tracked using |whichStarted|).
   bool startedAny = false;
   nsCSSPropertyIDSet whichStarted;
-  for (uint32_t i = aDisp->mTransitionPropertyCount; i-- != 0; ) {
-    const StyleTransition& t = aDisp->mTransitions[i];
+  for (uint32_t i = aDisp.mTransitionPropertyCount; i-- != 0; ) {
     // Check the combined duration (combination of delay and duration)
     // first, since it defaults to zero, which means we can ignore the
     // transition.
-    if (t.GetCombinedDuration() > 0.0f) {
+    if (aDisp.GetTransitionCombinedDuration(i) > 0.0f) {
       // We might have something to transition.  See if any of the
       // properties in question changed and are animatable.
       // FIXME: Would be good to find a way to share code between this
       // interpretation of transition-property and the one below.
-      nsCSSPropertyID property = t.GetProperty();
+      nsCSSPropertyID property = aDisp.GetTransitionProperty(i);
       if (property == eCSSPropertyExtra_no_properties ||
           property == eCSSPropertyExtra_variable ||
           property == eCSSProperty_UNKNOWN) {
         // Nothing to do, but need to exclude this from cases below.
       } else if (property == eCSSPropertyExtra_all_properties) {
         for (nsCSSPropertyID p = nsCSSPropertyID(0);
              p < eCSSProperty_COUNT_no_shorthands;
              p = nsCSSPropertyID(p + 1)) {
-          ConsiderInitiatingTransition(p, t, aElement, aPseudoType,
+          ConsiderInitiatingTransition(p, aDisp, i, aElement, aPseudoType,
                                        aElementTransitions,
                                        aOldStyle, aNewStyle,
                                        &startedAny, &whichStarted);
         }
       } else if (nsCSSProps::IsShorthand(property)) {
         CSSPROPS_FOR_SHORTHAND_SUBPROPERTIES(subprop, property,
                                              CSSEnabledState::eForAllContent)
         {
-          ConsiderInitiatingTransition(*subprop, t, aElement, aPseudoType,
+          ConsiderInitiatingTransition(*subprop, aDisp, i, aElement, aPseudoType,
                                        aElementTransitions,
                                        aOldStyle, aNewStyle,
                                        &startedAny, &whichStarted);
         }
       } else {
-        ConsiderInitiatingTransition(property, t, aElement, aPseudoType,
+        ConsiderInitiatingTransition(property, aDisp, i, aElement, aPseudoType,
                                      aElementTransitions,
                                      aOldStyle, aNewStyle,
                                      &startedAny, &whichStarted);
       }
     }
   }
 
   // Stop any transitions for properties that are no longer in
@@ -723,24 +721,23 @@ nsTransitionManager::DoUpdateTransitions
   // for properties that just changed (and are still in the set of
   // properties to transition), but for which we didn't just start the
   // transition.  This can happen delay and duration are both zero, or
   // because the new value is not interpolable.
   // Note that we also do the latter set of work in
   // nsTransitionManager::PruneCompletedTransitions.
   if (aElementTransitions) {
     bool checkProperties =
-      aDisp->mTransitions[0].GetProperty() != eCSSPropertyExtra_all_properties;
+      aDisp.GetTransitionProperty(0) != eCSSPropertyExtra_all_properties;
     nsCSSPropertyIDSet allTransitionProperties;
     if (checkProperties) {
-      for (uint32_t i = aDisp->mTransitionPropertyCount; i-- != 0; ) {
-        const StyleTransition& t = aDisp->mTransitions[i];
+      for (uint32_t i = aDisp.mTransitionPropertyCount; i-- != 0; ) {
         // FIXME: Would be good to find a way to share code between this
         // interpretation of transition-property and the one above.
-        nsCSSPropertyID property = t.GetProperty();
+        nsCSSPropertyID property = aDisp.GetTransitionProperty(i);
         if (property == eCSSPropertyExtra_no_properties ||
             property == eCSSPropertyExtra_variable ||
             property == eCSSProperty_UNKNOWN) {
           // Nothing to do, but need to exclude this from cases below.
         } else if (property == eCSSPropertyExtra_all_properties) {
           for (nsCSSPropertyID p = nsCSSPropertyID(0);
                p < eCSSProperty_COUNT_no_shorthands;
                p = nsCSSPropertyID(p + 1)) {
@@ -854,17 +851,18 @@ IsTransitionable(nsCSSPropertyID aProper
   // FIXME: This should also exclude discretely-animated properties.
   return nsCSSProps::kAnimTypeTable[aProperty] != eStyleAnimType_None;
 }
 
 template<typename StyleType>
 void
 nsTransitionManager::ConsiderInitiatingTransition(
   nsCSSPropertyID aProperty,
-  const StyleTransition& aTransition,
+  const nsStyleDisplay& aStyleDisplay,
+  uint32_t transitionIdx,
   dom::Element* aElement,
   CSSPseudoElementType aPseudoType,
   CSSTransitionCollection*& aElementTransitions,
   StyleType aOldStyle,
   StyleType aNewStyle,
   bool* aStartedAny,
   nsCSSPropertyIDSet* aWhichStarted)
 {
@@ -967,19 +965,20 @@ nsTransitionManager::ConsiderInitiatingT
         // |aElementTransitions| is now a dangling pointer!
         aElementTransitions = nullptr;
       }
       // GetAnimationRule already called RestyleForAnimation.
     }
     return;
   }
 
-  const nsTimingFunction &tf = aTransition.GetTimingFunction();
-  float delay = aTransition.GetDelay();
-  float duration = aTransition.GetDuration();
+  const nsTimingFunction &tf =
+    aStyleDisplay.GetTransitionTimingFunction(transitionIdx);
+  float delay = aStyleDisplay.GetTransitionDelay(transitionIdx);
+  float duration = aStyleDisplay.GetTransitionDuration(transitionIdx);
   if (duration < 0.0) {
     // The spec says a negative duration is treated as zero.
     duration = 0.0;
   }
 
   AnimationValue startForReversingTest = startValue;
   double reversePortion = 1.0;
 
--- a/layout/style/nsTransitionManager.h
+++ b/layout/style/nsTransitionManager.h
@@ -425,26 +425,27 @@ protected:
     OwningCSSTransitionPtrArray;
 
   // Update transitions. This will start new transitions,
   // replace existing transitions, and stop existing transitions
   // as needed. aDisp and aElement must be non-null.
   // aElementTransitions is the collection of current transitions, and it
   // could be a nullptr if we don't have any transitions.
   template<typename StyleType> bool
-  DoUpdateTransitions(const nsStyleDisplay* aDisp,
+  DoUpdateTransitions(const nsStyleDisplay& aDisp,
                       mozilla::dom::Element* aElement,
                       mozilla::CSSPseudoElementType aPseudoType,
                       CSSTransitionCollection*& aElementTransitions,
                       StyleType aOldStyle,
                       StyleType aNewStyle);
 
   template<typename StyleType> void
   ConsiderInitiatingTransition(nsCSSPropertyID aProperty,
-                               const mozilla::StyleTransition& aTransition,
+                               const nsStyleDisplay& aStyleDisplay,
+                               uint32_t transitionIdx,
                                mozilla::dom::Element* aElement,
                                mozilla::CSSPseudoElementType aPseudoType,
                                CSSTransitionCollection*& aElementTransitions,
                                StyleType aOldStyle,
                                StyleType aNewStyle,
                                bool* aStartedAny,
                                nsCSSPropertyIDSet* aWhichStarted);
 
--- a/mobile/android/app/build.gradle
+++ b/mobile/android/app/build.gradle
@@ -22,16 +22,22 @@ android {
         testApplicationId 'org.mozilla.roboexample.test'
         testInstrumentationRunner 'org.mozilla.gecko.FennecInstrumentationTestRunner'
         // Used by Robolectric based tests; see TestRunner.
         buildConfigField 'String', 'BUILD_DIR', "\"${project.buildDir}\""
 
         vectorDrawables.useSupportLibrary = true
     }
 
+    aaptOptions {
+        // The omnijar is already a compressed file itself and Gecko expects it to be
+        // STORED within the APK rather than DEFLATED.
+        noCompress 'ja'
+    }
+
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_7
         targetCompatibility JavaVersion.VERSION_1_7
     }
 
     dexOptions {
         javaMaxHeapSize "2g"
         jumboMode = true
--- a/mobile/android/installer/package-manifest.in
+++ b/mobile/android/installer/package-manifest.in
@@ -169,19 +169,16 @@
 @BINPATH@/components/imglib2.xpt
 @BINPATH@/components/inspector.xpt
 @BINPATH@/components/intl.xpt
 @BINPATH@/components/jar.xpt
 @BINPATH@/components/jsdebugger.xpt
 @BINPATH@/components/jsdownloads.xpt
 @BINPATH@/components/jsinspector.xpt
 @BINPATH@/components/layout_base.xpt
-#ifdef MOZ_DEBUG
-@BINPATH@/components/layout_debug.xpt
-#endif
 #ifdef NS_PRINTING
 @BINPATH@/components/layout_printing.xpt
 #endif
 @BINPATH@/components/layout_xul_tree.xpt
 @BINPATH@/components/layout_xul.xpt
 @BINPATH@/components/locale.xpt
 @BINPATH@/components/mimetype.xpt
 @BINPATH@/components/mozfind.xpt
--- a/mobile/locales/search/list.json
+++ b/mobile/locales/search/list.json
@@ -176,26 +176,16 @@
       }
     },
     "en-US": {
       "default": {
         "visibleDefaultEngines": [
           "google", "yahoo", "bing", "amazondotcom", "ddg", "twitter", "wikipedia"
         ]
       },
-      "US": {
-        "visibleDefaultEngines": [
-          "yahoo", "google-nocodes", "bing", "amazondotcom", "ddg", "twitter", "wikipedia"
-        ]
-      },
-      "CA": {
-        "visibleDefaultEngines": [
-          "google-nocodes", "yahoo", "bing", "amazondotcom", "ddg", "twitter", "wikipedia"
-        ]
-      },
       "experimental-hidden": {
         "visibleDefaultEngines": [
           "amazon-ca", "amazon-au", "google-2018", "duckduckgo"
         ]
       }
     },
     "en-ZA": {
       "default": {
--- 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(1523486113350000);
+static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1523571010092000);
--- a/security/manager/ssl/nsSTSPreloadList.errors
+++ b/security/manager/ssl/nsSTSPreloadList.errors
@@ -1,23 +1,24 @@
 00220022.net: could not connect to host
 01100010011001010111001101110100.com: could not connect to host
 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
+1000serien.com: 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
 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
-404forest.com: could not connect to host
+4-it.de: 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
 4d2.xyz: could not connect to host
 4loc.us: could not connect to host
 4x4.lk: could not connect to host
 517vpn.cn: could not connect to host
 52neptune.com: could not connect to host
@@ -38,62 +39,57 @@ 9ss6.com: could not connect to host
 aaronmcguire.me: could not connect to host
 abloop.com: could not connect to host
 abolition.co: could not connect to host
 accwing.com: could not connect to host
 achterhoekseveiligheidsbeurs.nl: could not connect to host
 acrossgw.com: could not connect to host
 ad-disruptio.fr: could not connect to host
 adamdixon.co.uk: could not connect to host
+adec-emsa.ae: could not connect to host
 adventureally.com: could not connect to host
 aevpn.org: could not connect to host
 affily.io: could not connect to host
+afterstack.net: could not connect to host
 aiicy.org: could not connect to host
 aim-consultants.com: could not connect to host
-aintevenmad.ch: could not connect to host
 akiba-server.info: could not connect to host
 akita-stream.com: could not connect to host
 akoww.de: could not connect to host
 akul.co.in: could not connect to host
 al-f.net: could not connect to host
 alasta.info: could not connect to host
 alauda-home.de: could not connect to host
 alcatraz.online: could not connect to host
 alcnutrition.com: could not connect to host
 alexandernorth.ch: could not connect to host
 alexberts.ch: could not connect to host
 alexei.su: could not connect to host
 alexey-shamara.ru: could not connect to host
-alexismeza.com: could not connect to host
-alexismeza.com.mx: could not connect to host
-alexismeza.dk: could not connect to host
-alexismeza.es: could not connect to host
-alexismeza.nl: could not connect to host
 alexmol.tk: could not connect to host
 alexperry.io: could not connect to host
 alilialili.ga: could not connect to host
+alkamitech.com: could not connect to host
 alldm.ru: could not connect to host
 allscammers.exposed: could not connect to host
+almavios.com: could not connect to host
 altahrim.net: could not connect to host
 amdouglas.uk: could not connect to host
 ameho.me: could not connect to host
 americandistribuidora.com: could not connect to host
 americkykongres.cz: could not connect to host
-ameza.co.uk: could not connect to host
-ameza.com.mx: could not connect to host
-ameza.io: could not connect to host
-ameza.me: could not connect to host
-ameza.net: could not connect to host
 amua.fr: could not connect to host
 amunoz.org: could not connect to host
+anacreon.de: 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
+andrewrdaws.com: could not connect to host
 andromedacenter.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
@@ -107,26 +103,29 @@ 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
+asisee.co.il: could not connect to host
+asisee.photography: 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
 astraalivankila.net: 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
 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
 authsrv.nl.eu.org: could not connect to host
 autostop-occasions.be: could not connect to host
@@ -145,43 +144,44 @@ baka.network: could not connect to host
 balonmano.co: could not connect to host
 bandally.net: could not connect to host
 bandarifamily.com: could not connect to host
 bannisbierblog.de: could not connect to host
 barbate.fr: could not connect to host
 barracuda.blog: could not connect to host
 barreaudenice.com: could not connect to host
 bbdos.ru: could not connect to host
+bbnx.net: could not connect to host
+bdikaros-network.net: could not connect to host
 bdsmxxxpics.com: could not connect to host
 bdvg.org: could not connect to host
 bearden.io: could not connect to host
 beasel.biz: could not connect to host
 bellavistaoutdoor.com: could not connect to host
 belpbleibtbelp.ch: could not connect to host
 benjamin-horvath.com: could not connect to host
 benjamin-suess.de: could not connect to host
 benzou-space.com: could not connect to host
 berduri.com: could not connect to host
 berthelier.me: could not connect to host
+beslider.com: could not connect to host
 besthotsales.com: could not connect to host
-betterlifemakers.com: could not connect to host
 bey.io: could not connect to host
 bfrailwayclub.cf: could not connect to host
 bie.edu: [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]
 bigerbio.com: could not connect to host
 bilimoe.com: could not connect to host
 binam.center: could not connect to host
 bingcheung.com: could not connect to host
 binimo.com: could not connect to host
 binsp.net: could not connect to host
 bip.gov.sa: could not connect to host
 bitcoin-class.com: could not connect to host
 bitcoin-daijin.com: could not connect to host
 bitcoinjpn.com: could not connect to host
-bitenose.com: could not connect to host
 bitmaincare.com.ua: could not connect to host
 bitmaincare.ru: could not connect to host
 bitmessage.ch: could not connect to host
 bityes.org: could not connect to host
 bizeau.ch: could not connect to host
 bjgongyi.com: could not connect to host
 bjtxl.cn: could not connect to host
 blackdiam.net: could not connect to host
@@ -193,70 +193,72 @@ blokuhaka.fr: could not connect to host
 bluefuzz.nl: could not connect to host
 blumen-garage.de: could not connect to host
 bm-i.ch: could not connect to host
 bodrumfarm.com: could not connect to host
 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
+boof.com: 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
 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
 brandonwalker.me: could not connect to host
 breathingblanket.com: could not connect to host
 brightonchilli.org.uk: could not connect to host
 brio-ukraine.store: could not connect to host
 brookframework.org: could not connect to host
 brrr.fr: could not connect to host
 bruckner.li: could not connect to host
+brunner.ninja: 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
 btserv.de: 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
 businessfurs.info: could not connect to host
 businessmodeler.se: could not connect to host
 buyshoe.org: could not connect to host
+bvalle.com: 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
 camda.online: could not connect to host
 campingcarlovers.com: 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
-catalogoreina.com: could not connect to host
 caughtredhanded.co.nz: could not connect to host
 cctld.com: could not connect to host
-cdeck.net: 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
 cencalvia.org: could not connect to host
 centos.pub: could not connect to host
 centrallead.net: could not connect to host
-cerebelo.info: 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
 chaouby.com: 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
@@ -266,71 +268,65 @@ chiropracticwpb.com: could not connect t
 chloe.re: 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
 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
 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
-clubmate.rocks: could not connect to host
 clycat.ru: 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
-cocaine.ninja: could not connect to host
 coccolebenessere.it: could not connect to host
 coco-cool.fr: could not connect to host
 code.fm: could not connect to host
 codenlife.xyz: could not connect to host
 codercross.com: could not connect to host
 codeversetech.com: could not connect to host
 codewiz.xyz: could not connect to host
 colleencornez.com: could not connect to host
-comalia.com: could not connect to host
 commania.co.kr: could not connect to host
 complt.xyz: could not connect to host
 comprehensiveihc.com: could not connect to host
 conception.sk: could not connect to host
 conniesacademy.com: could not connect to host
 construct-trust.com: could not connect to host
-controltickets.com.br: could not connect to host
 corecdn.org: could not connect to host
 corinnanese.de: could not connect to host
 correct.horse: could not connect to host
 cosmeticosdelivery.com.br: could not connect to host
 cosplayer.com: could not connect to host
 coumoul.fr: could not connect to host
 cousincouples.com: could not connect to host
 cpaneltips.com: could not connect to host
 crackpfer.de: could not connect to host
 crackslut.eu: could not connect to host
-crapouill.es: could not connect to host
-creative-coder.de: 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
 csgo77.com: could not connect to host
 cspeti.hu: 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
@@ -351,28 +347,25 @@ 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
 deepcreampie.com: could not connect to host
+deepsouthsounds.com: 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
-deux.solutions: could not connect to host
-deuxsol.co: could not connect to host
-deuxsol.com: could not connect to host
-deuxsolutions.com: could not connect to host
 dev-talk.eu: could not connect to host
 devafterdark.com: could not connect to host
 devcu.net: could not connect to host
 developersclub.website: could not connect to host
 devkid.net: could not connect to host
 devops.moe: could not connect to host
 dhl-smart.ch: could not connect to host
 dhub.xyz: could not connect to host
@@ -381,37 +374,38 @@ diceduels.com: could not connect to host
 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
 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
 distinctivephotography.com.au: could not connect to host
 ditch.ch: could not connect to host
 dixmag.com: could not connect to host
 dlyl888.com: could not connect to host
 dobrev.family: 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
+domfee.com: could not connect to host
 dostavkakurierom.ru: could not connect to host
 doyoulyft.com: could not connect to host
 doze-cloud.tech: could not connect to host
 drdim.ru: could not connect to host
 dreaming.solutions: could not connect to host
-dreizwosechs.de: could not connect to host
 driving-lessons.co.uk: could not connect to host
 drivinghorror.com: could not connect to host
 drixn.cn: could not connect to host
 drixn.info: could not connect to host
 drixn.net: could not connect to host
 drizz.com.br: could not connect to host
 drogoz.moe: could not connect to host
 dronexpertos.com: could not connect to host
@@ -444,43 +438,42 @@ elia.cloud: 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
 eltransportquevolem.org: could not connect to host
 emilyjohnson.ga: could not connect to host
 empese.com: could not connect to host
 emrenovation.com: could not connect to host
-envygeeks.io: 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
 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
-evio.com: could not connect to host
 exo.do: 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
 faithwatch.org: could not connect to host
 falkus.net: could not connect to host
 fallenangeldrinks.eu: could not connect to host
+fameuxhosting.co.uk: could not connect to host
 familie-sander.rocks: could not connect to host
 fancy-bridge.com: could not connect to host
 faretravel.co.uk: could not connect to host
 farm24.co.uk: could not connect to host
 fastaim.de: could not connect to host
 fastbackmbg.be: could not connect to host
 fed51.com: could not connect to host
 feedstringer.com: could not connect to host
@@ -493,23 +486,23 @@ ficklenote.net: could not connect to hos
 fifieldtech.com: 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
-fixate.ru: 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
 flopy.club: could not connect to host
 flow.su: could not connect to host
+flucky.xyz: 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
 forcamp.ga: could not connect to host
 formersessalaries.com: could not connect to host
 forsyththeatre.com: could not connect to host
 fortuna-loessnitz.de: could not connect to host
@@ -524,17 +517,16 @@ franckyz.com: could not connect to host
 fransallen.com: could not connect to host
 franzt.ovh: could not connect to host
 fredliang.cn: could not connect to host
 fredtec.ru: could not connect to host
 freejidi.com: could not connect to host
 freelansir.com: could not connect to host
 freshcode.nl: could not connect to host
 frickenate.com: could not connect to host
-friller.com.au: could not connect to host
 frodriguez.xyz: could not connect to host
 frolov.net: could not connect to host
 fromlemaytoz.com: could not connect to host
 frosty-gaming.xyz: could not connect to host
 frp-roleplay.de: could not connect to host
 frusky.net: could not connect to host
 fs-gamenet.de: could not connect to host
 fsfi.is: could not connect to host
@@ -544,18 +536,16 @@ fuckcf.cf: could not connect to host
 fugle.de: could not connect to host
 fuitedeau.ch: could not connect to host
 fukuko.biz: could not connect to host
 fukuko.xyz: could not connect to host
 fun9.cc: could not connect to host
 fun99.cc: could not connect to host
 funksteckdosen24.de: could not connect to host
 futos.de: could not connect to host
-fuwafuwa.moe: could not connect to host
-fyol.pw: could not connect to host
 g1jeu.com: could not connect to host
 g4w.co: could not connect to host
 gabriel.to: could not connect to host
 gabriele-kluge.de: could not connect to host
 gafachi.com: could not connect to host
 gaichanh.com: could not connect to host
 gaiserik.com: could not connect to host
 gala.kiev.ua: could not connect to host
@@ -570,23 +560,21 @@ gasnews.net: 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
-gee.is: could not connect to host
 gehrke.nrw: could not connect to host
 geigr.de: could not connect to host
 generationnext.pl: could not connect to host
 geneve.guide: could not connect to host
 genossen.ru: could not connect to host
-gentoo-blog.de: could not connect to host
 georgescarryout.com: could not connect to host
 geri.be: could not connect to host
 getfilterlive.org: could not connect to host
 getgeek.dk: could not connect to host
 getgeek.ee: could not connect to host
 getgeek.es: could not connect to host
 getgeek.fi: could not connect to host
 getgeek.fr: could not connect to host
@@ -604,17 +592,19 @@ 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
 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
 godrealms.com: could not connect to host
 goiaspropaganda.com.br: could not connect to host
 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
@@ -623,32 +613,30 @@ granth.io: could not connect to host
 gratisonlinesex.com: 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
 greybit.net: 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
-guillaumeperrin.io: 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
 hackbarth.guru: could not connect to host
 hackbubble.me: 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
-happyagain.se: 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
 hdy.nz: could not connect to host
@@ -666,39 +654,34 @@ henriknoerr.com: could not connect to ho
 hentai.design: could not connect to host
 hentaimaster.net: could not connect to host
 here.ml: could not connect to host
 heribe-maruo.com: could not connect to host
 heroin.org.uk: could not connect to host
 hetmeisjeachterpauw.nl: could not connect to host
 hexobind.com: could not connect to host
 hfi.me: could not connect to host
-hg71805.com: could not connect to host
-hg71807.com: could not connect to host
-hg71813.com: could not connect to host
-hg71833.com: could not connect to host
 hg71851.com: could not connect to host
 hg71857.com: could not connect to host
 hg881.com: could not connect to host
 hill.selfip.net: could not connect to host
 hintermeier-rae.at: could not connect to host
-hiraku.me: could not connect to host
 hirte-digital.de: could not connect to host
 hitrek.ml: could not connect to host
-hoahau.org: could not connect to host
 hohm.in: could not connect to host
 holidayincotswolds.co.uk: could not connect to host
 homoglyph.net: could not connect to host
 hong.io: could not connect to host
 hoodoo.io: could not connect to host
 hoodoo.tech: could not connect to host
 hoowhen.cn: could not connect to host
 hopglass.eu: could not connect to host
 hopglass.net: could not connect to host
 horvathd.eu: could not connect to host
+howardtyson.com: could not connect to host
 hozinga.de: could not connect to host
 hr98.tk: could not connect to host
 hserver.top: could not connect to host
 hudingyuan.cn: could not connect to host
 huiser.nl: could not connect to host
 hukkatavara.com: could not connect to host
 hunger.im: could not connect to host
 huwjones.me: could not connect to host
@@ -738,16 +721,17 @@ intelldynamics.com: could not connect to
 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
 irinkeby.nu: could not connect to host
 isamiok.com: could not connect to host
 iservicio.mx: could not connect to host
+isisfighters.info: 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
 itspawned.com: could not connect to host
 ivanpolchenko.com: could not connect to host
@@ -782,86 +766,84 @@ juliawebber.co.za: could not connect to 
 jumbopan.com: could not connect to host
 jumbopan.net: could not connect to host
 just-pools.co.za: could not connect to host
 justinharrison.ca: could not connect to host
 justmy.website: could not connect to host
 justzz.xyz: could not connect to host
 juventusmania1897.com: could not connect to host
 kaasbijwijn.nl: could not connect to host
-kabus.org: could not connect to host
 kaibol.com: could not connect to host
 kaika-facilitymanagement.de: could not connect to host
 kamitech.ch: could not connect to host
 kanganer.com: could not connect to host
 kangzaber.com: could not connect to host
-kantorosobisty.pl: could not connect to host
 kapo.info: could not connect to host
 karamna.com: could not connect to host
 karanlyons.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
-kayscs.com: could not connect to host
 kelm.me: 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
 kieranweightman.me: could not connect to host
 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
 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
+kodakit.com: could not connect to host
 kollawat.me: could not connect to host
 kongbaofang.com: could not connect to host
 konicaprinterdriver.com: could not connect to host
 konventseliten.se: could not connect to host
-kooponline.eu: could not connect to host
 kopfsalat.eu: could not connect to host
 kotorimusic.ga: could not connect to host
-kowshiksundararajan.com: could not connect to host
 kozmik.co: could not connect to host
 kriptosec.com: 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
 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
+labfox.de: 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
 lacasabelucci.com: could not connect to host
 lacasseroy.com: could not connect to host
 ladylikeit.com: could not connect to host
 lafr4nc3.xyz: 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
 lavapot.com: could not connect to host
+lazerus.net: 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
 legal.farm: could not connect to host
@@ -895,60 +877,61 @@ linux.sb: could not connect to host
 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
 liukang.tech: could not connect to host
 llvm.us: could not connect to host
 lobosdomain.no-ip.info: could not connect to host
+localhorst.xyz: 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
+lonasdigital.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
 lukasunger.cz: could not connect to host
 lukasunger.net: could not connect to host
-luminancy.com: could not connect to host
 luom.net: could not connect to host
 luxonetwork.com: could not connect to host
+lyonl.com: 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
 maidofhonorcleaning.net: could not connect to host
+maik-mahlow.de: could not connect to host
 mailon.ga: could not connect to host
-makeyourank.com: could not connect to host
 malesbdsm.com: could not connect to host
 malgraph.net: could not connect to host
+malkaso.com.ua: could not connect to host
 marcelmarnitz.com: could not connect to host
 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.blue: could not connect to host
 mastodon.expert: could not connect to host
 mastodon.my: 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
-maxtruxa.com: could not connect to host
 maynardnetworks.com: could not connect to host
 mbdrogenbos-usedcars.be: could not connect to host
 mbsec.net: could not connect to host
 mbwemmel-usedcars.be: could not connect to host
 mcdanieldevelopmentservices.com: could not connect to host
 mcsa-usa.org: could not connect to host
 mcsnovatamabayan.com: could not connect to host
 me-dc.com: could not connect to host
@@ -972,16 +955,17 @@ mhjuma.com: could not connect to host
 michaelsulzer.com: could not connect to host
 michaelsulzer.eu: could not connect to host
 mikes.tk: could not connect to host
 mingy.ddns.net: could not connect to host
 minitruckin.net: could not connect to host
 mintosherbs.com: could not connect to host
 mkfs.fr: could not connect to host
 mm13.at: could not connect to host
+mmstick.tk: could not connect to host
 modded-minecraft-server-list.com: could not connect to host
 moderntld.net: could not connect to host
 moe-max.jp: could not connect to host
 moeyi.xyz: could not connect to host
 mongla168.net: could not connect to host
 mongla88.net: could not connect to host
 monitori.ng: could not connect to host
 monloyer.quebec: could not connect to host
@@ -1005,16 +989,17 @@ 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
+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
@@ -1025,49 +1010,48 @@ nba2k.com.cn: could not connect to host
 nbalive.cn: could not connect to host
 ncdesigns-studio.com: could not connect to host
 neartothesky.com: could not connect to host
 nedcf.org.uk: could not connect to host
 neel.ch: could not connect to host
 neer.io: could not connect to host
 negativecurvature.net: could not connect to host
 nephy.jp: could not connect to host
+nestone.ru: 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
 nienfun.com: could not connect to host
+nigger.racing: could not connect to host
 nikksno.io: could not connect to host
 nikolasbradshaw.com: could not connect to host
-ninofink.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
-nodari.com.ar: could not connect to host
-nodariweb.com.ar: could not connect to host
 nodeselect.com: could not connect to host
 nonemu.ninja: could not connect to host
 norad.sytes.net: could not connect to host
 notarobot.fr: could not connect to host
 note7forever.com: could not connect to host
 notesforpebble.com: could not connect to host
 notevencode.com: could not connect to host
+notinglife.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
-nup.pw: could not connect to host
 nyanpasu.tv: could not connect to host
 obdolbacca.ru: 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
@@ -1078,16 +1062,17 @@ onewebdev.info: could not connect to hos
 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
 opium.io: could not connect to host
 oreka.online: could not connect to host
 oscsdp.cz: could not connect to host
 osmanlitorunu.com: could not connect to host
+oswaldsmillaudio.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
 paichai.space: could not connect to host
 panasca.is: could not connect to host
 panascais.co: could not connect to host
@@ -1096,16 +1081,17 @@ 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
 panascais.pw: could not connect to host
 panascais.site: could not connect to host
 panascais.tech: could not connect to host
 panascais.us: could not connect to host
 pandapsy.com: could not connect to host
+paragon.edu: could not connect to host
 pardnoy.com: could not connect to host
 parodybit.net: 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
 patrickbusch.net: could not connect to host
 patrickneuro.de: could not connect to host
 paulbramhall.uk: could not connect to host
@@ -1113,58 +1099,59 @@ paulchen.at: 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
 pcmr.info: could not connect to host
 pcvirusclear.com: could not connect to host
 pear2pear.de: could not connect to host
-pensanisso.com: could not connect to host
+peirong.me: 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
 persson.me: could not connect to host
 petlife.od.ua: could not connect to host
 peuf.shop: could not connect to host
 peykezamin.ir: could not connect to host
 phdwuda.com: could not connect to host
 phil.tw: could not connect to host
 philippa.cool: could not connect to host
 picallo.es: could not connect to host
 picone.com.au: could not connect to host
 pierrejeansuau.fr: could not connect to host
 pimspage.nl: could not connect to host
 pinebaylibrary.org: could not connect to host
+pivotanimation.org: could not connect to host
 piwko.co: could not connect to host
 pixelgliders.de: could not connect to host
 plaasprodukte.com: could not connect to host
 placefade.com: could not connect to host
 planbox.info: could not connect to host
 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
 pointagri.com: could not connect to host
 polit.im: could not connect to host
 ponteencima.com: could not connect to host
-ponzi.life: could not connect to host
 poolinstallers.co.za: could not connect to host
+postpot.co.kr: 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
 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
@@ -1176,26 +1163,27 @@ psncardplus.nl: could not connect to hos
 psncardplus.se: could not connect to host
 psychintervention.com: could not connect to host
 publimepa.it: could not connect to host
 pugilares.com.pl: could not connect to host
 puhe.se: could not connect to host
 pypa.io: could not connect to host
 pythia.nz: could not connect to host
 qforum.org: could not connect to host
+qikan.net: could not connect to host
 qldformulaford.org: could not connect to host
 qnatek.org: could not connect to host
 qoqo.us: could not connect to host
 qrforex.com: could not connect to host
 qrlfinancial.com: could not connect to host
 qscloud.de: could not connect to host
 qto.net: could not connect to host
 quay.net: could not connect to host
 r40.us: could not connect to host
-rabbitvcactus.eu: could not connect to host
+ra.co.ke: could not connect to host
 rackblue.com: could not connect to host
 rainbin.com: could not connect to host
 rally-vysledky.cz: could not connect to host
 ranos.org: could not connect to host
 rapdogg.com: could not connect to host
 ravse.dk: could not connect to host
 raxion.cf: could not connect to host
 rcoliveira.com: could not connect to host
@@ -1208,27 +1196,26 @@ 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
 reqognize.com: could not connect to host
+request-trent.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
 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]
 rngmeme.com: could not connect to host
-rob.uk.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
@@ -1248,35 +1235,34 @@ 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
 s0923.com: 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
-salon.io: 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
 sarindia.com: could not connect to host
 sarindia.de: could not connect to host
 sarndipity.com: could not connect to host
+satragreen.com: could not connect to host
 saudeintimadamulher.com.br: could not connect to host
 sbiewald.de: could not connect to host
 schaafenstrasse.koeln: could not connect to host
 schatmeester.be: could not connect to host
 sciencemonster.co.uk: could not connect to host
 scottainslie.me.uk: could not connect to host
 scripthost.org: could not connect to host
 scriptjunkie.us: could not connect to host
 sctm.at: could not connect to host
 seceye.cn: could not connect to host
 secitem.de: could not connect to host
-secretpanties.com: could not connect to host
 sectest.ml: could not connect to host
 secure-automotive-cloud.com: could not connect to host
 secure-automotive-cloud.org: could not connect to host
 secureindia.co: could not connect to host
 secureobscure.com: could not connect to host
 security.xn--q9jyb4c: could not connect to host
 securityprimes.in: could not connect to host
 securitysoapbox.com: could not connect to host
@@ -1285,34 +1271,33 @@ securoswiss.ch: could not connect to hos
 seefirm.com: could not connect to host
 seen.life: could not connect to host
 seleondar.ru: could not connect to host
 self-signed.com: could not connect to host
 selfmade4u.de: could not connect to host
 selfserverx.com: could not connect to host
 sellmoretires.com: could not connect to host
 seoscribe.net: could not connect to host
-seproco.com: could not connect to host
 servecrypt.com: could not connect to host
 servecrypt.net: could not connect to host
 server-essentials.com: could not connect to host
 serverlauget.no: could not connect to host
 servfefe.com: 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
 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
+shellshock.eu: could not connect to host
 sheying.tm: could not connect to host
 shirakaba-cc.com: 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
@@ -1372,55 +1357,56 @@ 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
 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
-student.andover.edu: could not connect to host
 stupendous.net: could not connect to host
 stylle.me: could not connect to host
 sudo.im: could not connect to host
 sudosu.fr: could not connect to host
 sulek.eu: 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
-superbowlkneel.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
 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
+tattvaayoga.com: could not connect to host
 tcpweb.net: could not connect to host
 tdsb.cf: could not connect to host
 tdsbhack.tk: could not connect to host
 tearoy.faith: could not connect to host
 tebieer.com: could not connect to host
 techask.it: could not connect to host
 techpit.us: could not connect to host
 telekollektiv.org: could not connect to host
 tenispopular.com: could not connect to host
 terra-x.net: could not connect to host
 terrax.net: could not connect to host
 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
+thecuriousdev.com: 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
 thefox.com.fr: could not connect to host
 thefrk.xyz: 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
 thermique.ch: could not connect to host
 thesehighsandlows.com: could not connect to host
@@ -1429,16 +1415,17 @@ thewebdexter.com: could not connect to h
 thierryhayoz.ch: could not connect to host
 thinkcash.nl: could not connect to host
 threv.net: could not connect to host
 thunderfield-boat.co.uk: could not connect to host
 tianxicaipiao.win: could not connect to host
 tianxicp.com: could not connect to host
 timco.cloud: could not connect to host
 tink.network: could not connect to host
+tmconnects.com: 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
@@ -1446,22 +1433,23 @@ topnotchendings.com: could not connect t
 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
-tradiz.org: could not connect to host
 traffictigers.com: 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
+trentmaydew.com: 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
 tucidi.net: could not connect to host
 tucnak.eu: could not connect to host
 tumelum.de: could not connect to host
 tupizm.com: could not connect to host
@@ -1492,55 +1480,55 @@ urcentral.org: could not connect to host
 uscp8.com: could not connect to host
 usportsgo.com: could not connect to host
 uwesander.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]
 uygindir.ml: could not connect to host
 vaaddress.co: could not connect to host
 vacationfund.co: could not connect to host
 vadik.me: could not connect to host
 vaeplatform.com: could not connect to host
-vaioswolke.xyz: could not connect to host
 valaeris.de: could not connect to host
 valecnatechnika.cz: could not connect to host
 valenhub.com: could not connect to host
 valenhub.es: could not connect to host
 vanderstraeten.dynv6.net: could not connect to host
 varela-electricite.fr: could not connect to host
 vayaport.com: could not connect to host
+vbh2o.com: could not connect to host
 veilletechno-it.info: could not connect to host
 velen.io: could not connect to host
 venturavwparts.com: could not connect to host
 verdeandco.co.uk: could not connect to host
 versfin.net: could not connect to host
 veryyounglesbians.com: could not connect to host
 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
-virtualcustoms.tech: 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
 vlogge.com: could not connect to host
 voeux.io: could not connect to host
 vogt.tech: could not connect to host
 volcain.io: could not connect to host
 vorlif.org: could not connect to host
 votresiteweb.ch: could not connect to host
 vrtouring.org: could not connect to host
 vsx.ch: could not connect to host
 vumetric.com: could not connect to host
 vxapps.com: could not connect to host
 w4.no: could not connect to host
+w4nvu.org: could not connect to host
 wabifoggynuts.com: could not connect to host
+wadidi.com: could not connect to host
 waixingrenfuli.vip: could not connect to host
 wanashi.com: could not connect to host
 wanda76.com: could not connect to host
 wanda78.com: could not connect to host
 wanda79.com: could not connect to host
 wanda96.com: could not connect to host
 wanda97.com: could not connect to host
 wanda98.com: could not connect to host
@@ -1556,17 +1544,16 @@ 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
-weed.ren: 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
@@ -1610,42 +1597,41 @@ xia100.xyz: could not connect to host
 xianguocy.com: could not connect to host
 xing.ml: could not connect to host
 xmiui.com: 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
 xpwn.cz: could not connect to host
 xqin.net: 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
 yabrt.cn: could not connect to host
 yahoo.ax: could not connect to host
 yarchives.jp: could not connect to host
 yaucy.win: could not connect to host
-ybresson.com: could not connect to host
 yd.io: could not connect to host
 yellowcar.website: 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
 yobst.tk: could not connect to host
 yoga.is-an-engineer.com: could not connect to host
 yotilabs.com: could not connect to host
-youmonit.me: could not connect to host
 yourznc.com: could not connect to host
 yousite.by: 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
@@ -1656,16 +1642,17 @@ 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
 zudomc.me: could not connect to host
 zuefle.net: could not connect to host
 zuehlcke.de: could not connect to host
 zuviel.space: could not connect to host
 zwy.me: could not connect to host
@@ -1713,22 +1700,21 @@ 123test.fr: did not receive HSTS header
 126ium.moe: could not connect to host
 127011-networks.ch: did not receive HSTS header
 12vpn.org: could not connect to host
 12vpnchina.com: could not connect to host
 1391kj.com: did not receive HSTS header
 1396.cc: could not connect to host
 1536.cf: could not connect to host
 163pwd.com: could not connect to host
-166166.com: could not connect to host
 16deza.com: did not receive HSTS header
 16packets.com: could not connect to host
 173vpn.cn: could not connect to host
 173vpns.com: did not receive HSTS header
-173vpnv.com: did not receive HSTS header
+173vpnv.com: could not connect to host
 188betwarriors.co.uk: could not connect to host
 188trafalgar.ca: did not receive HSTS header
 195gm.com: could not connect to host
 1a-jva.de: could not connect to host
 1atic.com: could not connect to host
 1co-jp.net: did not receive HSTS header
 1cover.com: could not connect to host
 1k8b.com: could not connect to host
@@ -1750,27 +1736,27 @@ 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
 33drugstore.com: did not receive HSTS header
-341.mg: did not receive HSTS header
+341.mg: could not connect to host
 3555aa.com: could not connect to host
 35792.de: could not connect to host
 360gradus.com: did not receive HSTS header
 365.or.jp: could not connect to host
 368mibn.com: could not connect to host
 3778xl.com: did not receive HSTS header
 38sihu.com: could not connect to host
 39sihu.com: could not connect to host
@@ -2010,32 +1996,32 @@ alariel.de: did not receive HSTS header
 alarme-gps.ch: could not connect to host
 alarmegps.ch: could not connect to host
 alarmsystemreviews.com: did not receive HSTS header
 alaundeil.xyz: could not connect to host
 albanien.guide: could not connect to host
 alberguecimballa.es: could not connect to host
 albertbogdanowicz.pl: did not receive HSTS header
 albertopimienta.com: did not receive HSTS header
+alcantarafleuriste.com: did not receive HSTS header
 alcazaar.com: could not connect to host
-alecpapierniak.com: did not receive HSTS header
 alecvannoten.be: did not receive HSTS header
 alenan.org: could not connect to host
 alessandroz.pro: could not connect to host
 alethearose.com: did not receive HSTS header
 alexandre.sh: did not receive HSTS header
 alexdodge.ca: could not connect to host
 alexkidd.de: did not receive HSTS header
 alfa24.pro: could not connect to host
 alfredxing.com: did not receive HSTS header
 alistairpialek.com: max-age too low: 86400
 alittlebitcheeky.com: did not receive HSTS header
 aljaspod.net: did not receive HSTS header
 aljmz.com: could not connect to host
-alkami.com: did not receive HSTS header
+alkami.com: could not connect to host
 all-subtitles.com: could not connect to host
 all.tf: could not connect to host
 all4os.com: did not receive HSTS header
 alldaymonitoring.com: could not connect to host
 allegro-inc.com: did not receive HSTS header
 allinnote.com: could not connect to host
 allmbw.com: could not connect to host
 allmystery.de: did not receive HSTS header
@@ -2118,16 +2104,17 @@ androled.fr: max-age too low: 5184000
 androoz.se: could not connect to host
 andyclark.io: could not connect to host
 andymartin.cc: could not connect to host
 andyuk.org: did not receive HSTS header
 anfsanchezo.co: could not connect to host
 anfsanchezo.me: could not connect to host
 angeloroberto.ch: did not receive HSTS header
 anghami.com: did not receive HSTS header
+anglesya.win: did not receive HSTS header
 anglictinatabor.cz: could not connect to host
 angryroute.com: could not connect to host
 animal-nature-human.com: did not receive HSTS header
 anime1video.tk: could not connect to host
 animeday.ml: could not connect to host
 animesfusion.com.br: could not connect to host
 animurecs.com: did not receive HSTS header
 aniplus.cf: could not connect to host
@@ -2333,21 +2320,18 @@ 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
@@ -2407,17 +2391,16 @@ banchethai.com: could not connect to hos
 bandb.xyz: could not connect to host
 bandrcrafts.com: did not receive HSTS header
 bangzafran.com: did not receive HSTS header
 bankmilhas.com.br: did not receive HSTS header
 banksaround.com: did not receive HSTS header
 banqingdiao.com: could not connect to host
 baobaobooks.net: did not receive HSTS header
 baobeiglass.com: did not receive HSTS header
-barbarafeldman.com: did not receive HSTS header
 barcel.com.mx: max-age too low: 86400
 barely.sexy: did not receive HSTS header
 barrelhead.org: could not connect to host
 barrut.me: did not receive HSTS header
 barshout.co.uk: could not connect to host
 barss.io: could not connect to host
 bartbania.com: did not receive HSTS header
 barunisystems.com: could not connect to host
@@ -2513,16 +2496,17 @@ betafive.net: could not connect to host
 betakah.net: could not connect to host
 betcafearena.ro: did not receive HSTS header
 bethanyduke.com: did not receive HSTS header
 bethditto.com: did not receive HSTS header
 betnet.fr: could not connect to host
 betobaccofree.gov: could not connect to host
 betplanning.it: did not receive HSTS header
 bets.de: did not receive HSTS header
+betterlifemakers.com: max-age too low: 200
 bettween.com: did not receive HSTS header
 betz.ro: did not receive HSTS header
 beulahtabernacle.com: could not connect to host
 bevapehappy.com: did not receive HSTS header
 bewerbungsfibel.de: did not receive HSTS header
 beyond-edge.com: could not connect to host
 beyuna.co.uk: did not receive HSTS header
 beyuna.eu: did not receive HSTS header
@@ -2712,17 +2696,16 @@ branchtrack.com: did not receive HSTS he
 branchzero.com: did not receive HSTS header
 brandnewdays.nl: could not connect to host
 brandon.so: could not connect to host
 brandons.site: did not receive HSTS header
 brandred.net: could not connect to host
 brandspray.com: could not connect to host
 brasilien.guide: could not connect to host
 brasilmorar.com: could not connect to host
-bravehearts.org.au: did not receive HSTS header
 bravz.de: could not connect to host
 brenden.net.au: could not connect to host
 bress.cloud: could not connect to host
 brettpemberton.xyz: did not receive HSTS header
 brickoo.com: could not connect to host
 brickyardbuffalo.com: did not receive HSTS header
 bridholm.se: could not connect to host
 brightstarkids.co.uk: did not receive HSTS header
@@ -2742,17 +2725,16 @@ 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
 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
@@ -2801,17 +2783,16 @@ busold.ws: could not connect to host
 bustimes.org.uk: did not receive HSTS header
 butchersworkshop.com: did not receive HSTS header
 butian518.com: did not receive HSTS header
 buttercoin.com: could not connect to host
 butterfieldstraining.com: did not receive HSTS header
 buvinghausen.com: max-age too low: 86400
 buybaby.eu: did not receive HSTS header
 buyfox.de: did not receive HSTS header
-buynowdepot.com: did not receive HSTS header
 buzzconcert.com: could not connect to host
 buzztelco.com.au: did not receive HSTS header
 bw81.xyz: could not connect to host
 bwear4all.de: could not connect to host
 by4cqb.cn: could not connect to host
 bydisk.com: could not connect to host
 bynumlaw.net: did not receive HSTS header
 bypassed.bid: could not connect to host
@@ -3063,17 +3044,16 @@ 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
-cinema5.ru: did not receive HSTS header
 cintdirect.com: could not connect to host
 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
 cityoflaurel.org: did not receive HSTS header
 cium.ru: could not connect to host
@@ -3141,16 +3121,17 @@ cmc-versand.de: did not receive HSTS hea
 cmci.dk: did not receive HSTS header
 cmsbattle.com: could not connect to host
 cmscafe.ru: did not receive HSTS header
 cmso-cal.com: could not connect to host
 cncn.us: did not receive HSTS header
 co-driversphoto.se: could not connect to host
 coach-sportif.paris: could not connect to host
 cobrax.net: could not connect to host
+cocalc.com: did not receive HSTS header
 cocktailfuture.fr: could not connect to host
 cocolovesdaddy.com: could not connect to host
 codabix.com: did not receive HSTS header
 codabix.de: could not connect to host
 codabix.net: could not connect to host
 code-35.com: could not connect to host
 code-digsite.com: could not connect to host
 code-judge.tk: did not receive HSTS header
@@ -3213,16 +3194,17 @@ comparetravelinsurance.com.au: did not r
 compassionate-biology.com: could not connect to host
 compiledworks.com: could not connect to host
 completesportperformance.com: did not receive HSTS header
 completionist.audio: could not connect to host
 complymd.com: did not receive HSTS header
 compsmag.com: did not receive HSTS header
 compucorner.com.mx: could not connect to host
 computertal.de: could not connect to host
+comyuno.com: did not receive HSTS header
 concentrade.de: did not receive HSTS header
 concord-group.co.jp: did not receive HSTS header
 confirm365.com: could not connect to host
 conflux.tw: did not receive HSTS header
 conformal.com: could not connect to host
 confucio.cl: did not receive HSTS header
 congz.me: could not connect to host
 conjugacao.com.br: did not receive HSTS header
@@ -3304,16 +3286,17 @@ crazifyngers.com: could not connect to h
 crazy-crawler.de: did not receive HSTS header
 crazycen.com: did not receive HSTS header
 crazycraftland.de: could not connect to host
 crazycraftland.net: did not receive HSTS header
 crazyhotseeds.com: did not receive HSTS header
 crbug.com: did not receive HSTS header (error ignored - included regardless)
 creaescola.com: did not receive HSTS header
 create-test-publish.co.uk: could not connect to host
+creative-coder.de: did not receive HSTS header
 creativeapple.ltd: did not receive HSTS header
 creativeartifice.com: did not receive HSTS header
 creativephysics.ml: could not connect to host
 creativeplayuk.com: did not receive HSTS header
 crecket.me: could not connect to host
 creditclear.com.au: did not receive HSTS header
 crendontech.com: could not connect to host
 crestoncottage.com: could not connect to host
@@ -3504,16 +3487,17 @@ 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: could not connect to host
 ddepot.us: did not receive HSTS header
 deadsoul.net: max-age too low: 0
+dealbanana.fi: did not receive HSTS header
 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
 decesus.com: could not connect to host
@@ -3606,16 +3590,17 @@ 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
@@ -3800,17 +3785,16 @@ 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
 dunea.nl: did not receive HSTS header
 dungi.org: could not connect to host
 duole30.com: did not receive HSTS header
 duongpho.com: did not receive HSTS header
 duskopy.top: could not connect to host
-dutchessuganda.com: did not receive HSTS header
 dutchrank.com: did not receive HSTS header
 duuu.ch: could not connect to host
 dycem-ns.com: did not receive HSTS header
 dycontrol.de: could not connect to host
 dylanscott.com.au: did not receive HSTS header
 dymersion.com: did not receive HSTS header
 dynamic-innovations.net: could not connect to host
 dynamize.solutions: did not receive HSTS header
@@ -3837,17 +3821,16 @@ earthsystemprediction.gov: did not recei
 easez.net: did not receive HSTS header
 easthokkaido-5airport.jp: did not receive HSTS header
 easychiller.org: could not connect to host
 easykonto.de: could not connect to host
 easyplane.it: did not receive HSTS header
 eatlowcarb.de: did not receive HSTS header
 eatvisor.co.uk: could not connect to host
 eauclairecommerce.com: could not connect to host
-eaucube.com: did not receive HSTS header
 ebankcbt.com: could not connect to host
 ebcs-solutions.com: did not receive HSTS header
 ebecs.com: did not receive HSTS header
 ebertek.com: did not receive HSTS header
 ebiografia.com: did not receive HSTS header
 ebiografias.com.br: could not connect to host
 ebolsa.com.br: did not receive HSTS header
 ebolsas.com.br: did not receive HSTS header
@@ -3879,17 +3862,16 @@ edelsteincosmetic.com: did not receive H
 eden-mobility.co.uk: did not receive HSTS header
 eden-noel.at: could not connect to host
 edenaya.com: did not receive HSTS header
 edgereinvent.com: did not receive HSTS header
 ediscomp.sk: did not receive HSTS header
 edissecurity.sk: did not receive HSTS header
 edix.ru: could not connect to host
 edk.com.tr: did not receive HSTS header
-edlinus.cn: did not receive HSTS header
 edmodo.com: did not receive HSTS header
 edpubs.gov: did not receive HSTS header
 eduardnikolenko.ru: could not connect to host
 educatio.tech: could not connect to host
 educourse.ga: could not connect to host
 eduvance.in: did not receive HSTS header
 eengezinswoning-in-alphen-aan-den-rijn-kopen.nl: could not connect to host
 eengezinswoning-in-de-friese-meren-kopen.nl: could not connect to host
@@ -3912,16 +3894,17 @@ egge.com: max-age too low: 0
 egit.co: could not connect to host
 ego-world.org: could not connect to host
 ehealthcounselor.com: could not connect to host
 ehipaadev.com: could not connect to host
 ehito.ovh: could not connect to host
 ehrenamt-skpfcw.de: could not connect to host
 eicfood.com: could not connect to host
 eidolonhost.com: did not receive HSTS header
+eifelindex.de: did not receive HSTS header
 eigo.work: could not connect to host
 einhorn.space: could not connect to host
 ekbanden.nl: could not connect to host
 eksik.com: did not receive HSTS header
 el-soul.com: did not receive HSTS header
 elaintehtaat.fi: could not connect to host
 elan-organics.com: did not receive HSTS header
 elanguest.pl: could not connect to host
@@ -3953,17 +3936,17 @@ elohna.ch: did not receive HSTS header
 elpay.kz: did not receive HSTS header
 elpo.xyz: could not connect to host
 elsamakhin.com: could not connect to host
 elsemanario.com: did not receive HSTS header
 elsitar.com: could not connect to host
 email.lookout.com: could not connect to host
 email2rss.net: could not connect to host
 emanatepixels.com: could not connect to host
-emanga.su: could not connect to host
+emanga.su: did not receive HSTS header
 embroidered-stuff.com: could not connect to host
 emeldi-commerce.com: max-age too low: 0
 emesolutions.net: did not receive HSTS header
 emiele.com.br: could not connect to host
 emilyhorsman.com: did not receive HSTS header
 eminovic.me: could not connect to host
 emjainteractive.com: did not receive HSTS header
 emjimadhu.com: could not connect to host
@@ -4612,16 +4595,17 @@ 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
@@ -4669,41 +4653,42 @@ google: could not connect to host (error
 googlemail.com: did not receive HSTS header (error ignored - included regardless)
 googleplex.com: did not receive HSTS header (error ignored - included regardless)
 googley.fr: max-age too low: 0
 goolok.com: could not connect to host
 gootlijsten.nl: did not receive HSTS header
 goozz.nl: did not receive HSTS header
 gopay.cz: did not receive HSTS header
 gopokego.cz: could not connect to host
-gorgiaxx.com: did not receive HSTS header
+gorgiaxx.com: could not connect to host
 gorilla-gym.site: could not connect to host
 gorillow.com: could not connect to host
 gosharewood.com: did not receive HSTS header
 goshop.cz: did not receive HSTS header
 gostream.asia: did not receive HSTS header
 gotgenes.com: could not connect to host
 goto.google.com: did not receive HSTS header (error ignored - included regardless)
 goto.msk.ru: did not receive HSTS header
 gotobrno.cz: did not receive HSTS header
 gotocloud.ru: did not receive HSTS header
 gotowned.org: max-age too low: 0
 gotspot.com: could not connect to host
 gottcode.org: did not receive HSTS header
+gottfriedfeyen.com: did not receive HSTS header
 gourmettia.com: did not receive HSTS header
 gouv.ovh: did not receive HSTS header
 gov.ax: could not connect to host
 goverage.org: did not receive HSTS header
 govillemo.ca: did not receive HSTS header
 gparent.org: did not receive HSTS header
 gpo.gov: did not receive HSTS header
 gpstuner.com: did not receive HSTS header
 graavaapi.elasticbeanstalk.com: could not connect to host
 gracebaking.com: max-age too low: 86400
-gracechurchpc.net: did not receive HSTS header
+gracechurchpc.net: max-age too low: 2592000
 gracesofgrief.com: could not connect to host
 grachtenpandverkopen.nl: could not connect to host
 grafitec.ru: did not receive HSTS header
 grana.com: did not receive HSTS header
 grandchamproofing.com: did not receive HSTS header
 grandlinecsk.ru: did not receive HSTS header
 grandmascookieblog.com: did not receive HSTS header
 grantedby.me: max-age too low: 0
@@ -4863,17 +4848,18 @@ haobo1111.com: could not connect to host
 haobo222.com: could not connect to host
 haobo2222.com: could not connect to host
 haobo4444.com: could not connect to host
 haobo5555.com: could not connect to host
 haobo6666.com: could not connect to host
 haobo7777.com: could not connect to host
 haomwei.com: could not connect to host
 haoyugao.com: could not connect to host
-haozi.me: could not connect to host
+haozi.me: did not receive HSTS header
+happist.com: did not receive HSTS header
 happix.nl: did not receive HSTS header
 happycoder.net: did not receive HSTS header
 happyfabric.me: did not receive HSTS header
 happygastro.com: could not connect to host
 harambe.site: could not connect to host
 harbourweb.net: did not receive HSTS header
 hardline.xyz: could not connect to host
 haribosupermix.com: could not connect to host
@@ -4883,17 +4869,17 @@ harmonycosmetic.com: max-age too low: 30
 harristony.com: could not connect to host
 hartlep.eu: could not connect to host
 hartmancpa.com: did not receive HSTS header
 harvestrenewal.org: did not receive HSTS header
 harz.cloud: could not connect to host
 has.vision: could not connect to host
 hash-list.com: could not connect to host
 hasilocke.de: did not receive HSTS header
-hasinase.de: did not receive HSTS header
+hasinase.de: could not connect to host
 haste.ch: could not connect to host
 hastherebeenamassshooting.today: could not connect to host
 hatoko.net: could not connect to host
 haufschild.de: could not connect to host
 haurumcraft.net: could not connect to host
 hausarzt-stader-str.de: did not receive HSTS header
 haveeruexaminer.com: could not connect to host
 havenmoon.com: could not connect to host
@@ -4983,22 +4969,22 @@ highsurf-miyazaki.com: could not connect
 hightower.eu: could not connect to host
 highvelocitydesign.com: could not connect to host
 hiisukun.com: could not connect to host
 hiitcentre.com: did not receive HSTS header
 hikariempire.com: could not connect to host
 hilinemerchandising.com: did not receive HSTS header
 hillcity.org.nz: did not receive HSTS header
 hilnu.tk: could not connect to host
-himens.com: did not receive HSTS header
 hinkel-sohn.de: did not receive HSTS header
 hintergedanken.com: did not receive HSTS header
 hipercultura.com: did not receive HSTS header
 hiphopconvention.nl: could not connect to host
 hipnos.net: did not receive HSTS header
+hiraku.me: did not receive HSTS header
 hirefitness.co.uk: did not receive HSTS header
 hirevets.gov: did not receive HSTS header
 hirokilog.com: could not connect to host
 hititgunesi-tr.com: did not receive HSTS header
 hitoy.org: did not receive HSTS header
 hittipps.com: did not receive HSTS header
 hiv.gov: did not receive HSTS header
 hlyue.com: did not receive HSTS header
@@ -5161,17 +5147,16 @@ iemb.tk: did not receive HSTS header
 ierna.com: did not receive HSTS header
 ies-italia.it: did not receive HSTS header
 ies.id.lv: could not connect to host
 ievgenialehner.com: did not receive HSTS header
 ifad.org: did not receive HSTS header
 ifastuniversity.com: did not receive HSTS header
 ifleurs.com: could not connect to host
 ifx.ee: could not connect to host
-igd.chat: did not receive HSTS header
 igforums.com: could not connect to host
 igiftcards.nl: did not receive HSTS header
 ignatisd.gr: did not receive HSTS header
 igule.net: could not connect to host
 ihotel.io: did not receive HSTS header
 ihrlotto.de: could not connect to host
 ihrnationalrat.ch: could not connect to host
 ihsbsd.me: could not connect to host
@@ -5244,40 +5229,41 @@ infinitude.me.uk: could not connect to h
 infinitude.xyz: could not connect to host
 infinitudecloud.com: could not connect to host
 infinitusgaming.eu: could not connect to host
 infinity-freedom.com: could not connect to host
 infinity-freedom.de: could not connect to host
 infinity-lifestyle.de: could not connect to host
 inflatadays.co.uk: could not connect to host
 inflation.ml: could not connect to host
-influo.com: did not receive HSTS header
 info-sys.tk: could not connect to host
 infoduv.fr: did not receive HSTS header
 infogrfx.com: did not receive HSTS header
 inforichjapan.com: did not receive HSTS header
 informaticapremium.com: did not receive HSTS header
 infosec.rip: could not connect to host
 infosoph.org: could not connect to host
 infotics.es: did not receive HSTS header
 infranix.eu: max-age too low: 7360000
 infura.co.th: could not connect to host
 ingesol.fr: did not receive HSTS header
 inhelix.com: could not connect to host
+inima.org: did not receive HSTS header
 injertoshorticolas.com: did not receive HSTS header
 injigo.com: did not receive HSTS header
 injust.cf: could not connect to host
 injust.ga: could not connect to host
 injust.gq: could not connect to host
 injust.ml: could not connect to host
 injust.tk: could not connect to host
 inked-guy.de: could not connect to host
 inkedguy.de: could not connect to host
 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
 insite-feedback.com: could not connect to host
 inspire-av.com: did not receive HSTS header
@@ -5442,17 +5428,16 @@ jamesbywater.uk: could not connect to ho
 jamesconroyfinn.com: did not receive HSTS header
 jamescostian.com: could not connect to host
 jamesdoell.com: could not connect to host
 jamesdoylephoto.com: did not receive HSTS header
 jamesf.xyz: could not connect to host
 jamesforman.co.nz: did not receive HSTS header
 jameshale.me: did not receive HSTS header
 jamesmaurer.com: did not receive HSTS header
-jamesmorrison.me: did not receive HSTS header
 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
@@ -5549,27 +5534,26 @@ jisaku-homepage.com: did not receive HST
 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: could not connect to host
+jm06.com: did not receive HSTS header
 jm22.com: could not connect to host
 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
 jobshq.com: did not receive HSTS header
 jobss.co.uk: did not receive HSTS header
 joelgonewild.com: did not receive HSTS header
-joeysmith.com: did not receive HSTS header
 johannes-sprink.de: could not connect to host
 johnbrownphotography.ch: did not receive HSTS header
 johncardell.com: did not receive HSTS header
 johners.me: could not connect to host
 johngaltgroup.com: did not receive HSTS header
 johnhgaunt.com: did not receive HSTS header
 johnmcgovern.com: max-age too low: 43200
 johnrom.com: did not receive HSTS header
@@ -5773,16 +5757,17 @@ kitsta.com: could not connect to host
 kiwiirc.com: max-age too low: 5256000
 kiyo.space: could not connect to host
 kizil.net: could not connect to host
 kj1391.com: did not receive HSTS header
 kj1397.com: did not receive HSTS header
 kjaermaxi.me: did not receive HSTS header
 kjg-bachrain.de: could not connect to host
 klas.or.id: did not receive HSTS header
+klausbrinch.dk: did not receive HSTS header
 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
@@ -5840,32 +5825,32 @@ 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
 krizevackapajdasija.hr: could not connect to host
-krizevci.info: did not receive HSTS header
 krmela.com: did not receive HSTS header
 kroetenfuchs.de: could not connect to host
 kroodle.nl: did not receive HSTS header
 kruegerrand-wert.de: did not receive HSTS header
 krunut.com: did not receive HSTS header
 krypteia.org: could not connect to host
 kryptomech.com: could not connect to host
 ksfh-mail.de: could not connect to host
 kstan.me: could not connect to host
 ksukelife.com: did not receive HSTS header
 kswriter.com: could not connect to host
 kuba.guide: could not connect to host
 kucom.it: could not connect to host
 kudo.co.id: did not receive HSTS header
 kueulangtahunanak.net: could not connect to host
+kujadin.de: did not receive HSTS header
 kum.com: could not connect to host
 kummerlaender.eu: did not receive HSTS header
 kupelne-ptacek.sk: did not receive HSTS header
 kuppingercole.com: did not receive HSTS header
 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
@@ -5895,16 +5880,17 @@ labrasaq8.com: did not receive HSTS head
 labs.directory: could not connect to host
 labs.moscow: did not receive HSTS header
 lacarpesaintaubinoise.fr: did not receive HSTS header
 lacaverne.nl: could not connect to host
 lacentral.com: did not receive HSTS header
 lachlankidson.net: did not receive HSTS header
 lacledeslan.ninja: could not connect to host
 lacocinadelila.com: did not receive HSTS header
+lacuevadechauvet.com: did not receive HSTS header
 ladylucks.co.uk: did not receive HSTS header
 laemen.com: did not receive HSTS header
 laemen.nl: could not connect to host
 laf.in.net: could not connect to host
 lagalerievirtuelle.fr: did not receive HSTS header
 lagier.xyz: could not connect to host
 lagoza.name: could not connect to host
 lainchan.org: did not receive HSTS header
@@ -6016,17 +6002,16 @@ lgiswa.com.au: did not receive HSTS head
 lgrs.com.au: did not receive HSTS header
 lgts.se: could not connect to host
 liaillustr.at: did not receive HSTS header
 liam-w.com: did not receive HSTS header
 liamjack.fr: could not connect to host
 lianye.in: could not connect to host
 lianyexiuchang.in: could not connect to host
 liaoshuma.com: could not connect to host
-liaronce.win: did not receive HSTS header
 libanco.com: could not connect to host
 libertyrp.org: did not receive HSTS header
 libfte.org: did not receive HSTS header
 library.linode.com: did not receive HSTS header
 librechan.net: could not connect to host
 libreduca.com: could not connect to host
 lichess4545.com: did not receive HSTS header
 lichess4545.tv: did not receive HSTS header
@@ -6035,17 +6020,17 @@ liebach.me: did not receive HSTS header
 liemen.net: did not receive HSTS header
 life-time.nl: did not receive HSTS header
 lifecoach.tw: did not receive HSTS header
 lifecoachproviders.com: did not receive HSTS header
 lifeguard.aecom.com: did not receive HSTS header
 lifeinitsownway.com: could not connect to host
 lifeng.us: did not receive HSTS header
 lifeskillsdirect.com: did not receive HSTS header
-lifetimemoneymachine.com: could not connect to host
+lifetimemoneymachine.com: did not receive HSTS header
 lightarmory.com: could not connect to host
 lightning-ashe.com: did not receive HSTS header
 lightnovelsekai.com: did not receive HSTS header
 lightpaste.com: could not connect to host
 lightworx.io: did not receive HSTS header
 lila.pink: did not receive HSTS header
 lillepuu.com: did not receive HSTS header
 lillpopp.eu: did not receive HSTS header
@@ -6074,17 +6059,16 @@ linorman1997.me: could not connect to ho
 linux-mint.cz: could not connect to host
 linuxandstuff.de: could not connect to host
 linuxeyecandy.com: could not connect to host
 linuxfixed.it: could not connect to host
 linuxforyou.com: could not connect to host
 linuxgeek.ro: could not connect to host
 linuxmint.cz: could not connect to host
 linuxmonitoring.net: did not receive HSTS header
-lipo.lol: did not receive HSTS header
 liquid.solutions: did not receive HSTS header
 liquorsanthe.in: could not connect to host
 lisaco.de: could not connect to host
 lisbongold.com: did not receive HSTS header
 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
@@ -6141,17 +6125,16 @@ longboarding-ulm.de: could not connect t
 look-at-my.site: could not connect to host
 lookatmysco.re: did not receive HSTS header
 lookout.com: did not receive HSTS header
 looktothestars.org: did not receive HSTS header
 lookupclose.com: did not receive HSTS header
 lookzook.com: did not receive HSTS header
 loongsg.xyz: could not connect to host
 lordjevington.co.uk: could not connect to host
-lost.host: did not receive HSTS header
 lostg.com: did not receive HSTS header
 lostinsecurity.com: could not connect to host
 lostinweb.eu: could not connect to host
 lothai.re: did not receive HSTS header
 lothuytinhsi.com: could not connect to host
 lotos-ag.ch: did not receive HSTS header
 lotsencafe.de: did not receive HSTS header
 lotuscloud.org: could not connect to host
@@ -6178,16 +6161,17 @@ ltbytes.com: could not connect to host
 ltechnologygroup.com: did not receive HSTS header
 ltu.social: could not connect to host
 lucas-garte.com: did not receive HSTS header
 lucaterzini.com: could not connect to host
 luclu7.pw: could not connect to host
 ludwig.click: did not receive HSTS header
 lufthansaexperts.com: max-age too low: 2592000
 luis-checa.com: could not connect to host
+lukasoppermann.com: did not receive HSTS header
 lukaszdolan.com: did not receive HSTS header
 lukeng.me: could not connect to host
 lukonet.com: did not receive HSTS header
 luludapomerania.com: could not connect to host
 lumd.me: could not connect to host
 lumi.do: did not receive HSTS header
 lumi.pw: could not connect to host
 lunarift.com: could not connect to host
@@ -6232,17 +6216,17 @@ macdj.tk: could not connect to host
 macedopesca.com.br: did not receive HSTS header
 macgeneral.de: did not receive HSTS header
 mach1club.com: did not receive HSTS header
 macsandcheesedreams.com: could not connect to host
 madars.org: did not receive HSTS header
 maddin.ga: could not connect to host
 madebyfalcon.co.uk: did not receive HSTS header
 madebymagnitude.com: did not receive HSTS header
-madeinorder.com: could not connect to host
+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
@@ -6264,16 +6248,17 @@ maintainerheaven.ch: could not connect t
 maisalto.ind.br: could not connect to host
 majesnix.org: did not receive HSTS header
 majncloud.tk: could not connect to host
 make-pizza.info: could not connect to host
 makedonien.guide: could not connect to host
 makeitdynamic.com: could not connect to host
 makerstuff.net: did not receive HSTS header
 makeshiftco.de: did not receive HSTS header
+makeyourank.com: max-age too low: 200
 maldiverna.guide: could not connect to host
 maleexcel.com: did not receive HSTS header
 malena.com.ua: did not receive HSTS header
 malerversand.de: did not receive HSTS header
 malfait.nl: could not connect to host
 maljaars-media.nl: could not connect to host
 malmstroms-co.se: could not connect to host
 maltes.website: could not connect to host
@@ -6288,17 +6273,16 @@ mammothmail.org: could not connect to ho
 mammut.space: could not connect to host
 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
-manageprojects.com: did not receive HSTS header
 manantial.mx: did not receive HSTS header
 mandpress.com: did not receive HSTS header
 mangazuki.co: did not receive HSTS header
 maniadeprazer.com.br: could not connect to host
 manifestbin.com: did not receive HSTS header
 manitasicily.com: did not receive HSTS header
 manningbrothers.com: did not receive HSTS header
 manns-solutions.com: did not receive HSTS header
@@ -6421,30 +6405,30 @@ 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
-meadowfen.farm: could not connect to host
 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
 mediacru.sh: could not connect to host
 mediafinancelab.org: did not receive HSTS header
 mediamag.am: max-age too low: 0
 mediastorm.us: could not connect to host
 mediawikicn.org: could not connect to host
 medienservice-fritz.de: did not receive HSTS header
+medifi.com: did not receive HSTS header
 medirich.co: could not connect to host
 meditek-dv.ru: did not receive HSTS header
 mediterenopmaandag.nl: did not receive HSTS header
 medm-test.com: could not connect to host
 medzinenews.com: did not receive HSTS header
 meedoennoordkop.nl: did not receive HSTS header
 meedoenzaanstad.nl: did not receive HSTS header
 meetfinch.com: could not connect to host
@@ -6495,17 +6479,17 @@ metin2blog.de: did not receive HSTS head
 metis.pw: could not connect to host
 metrans-spedition.de: could not connect to host
 metricaid.com: did not receive HSTS header
 metzgerei-birkenhof.de: could not connect to host
 meucosmetico.com.br: could not connect to host
 meuemail.pro: could not connect to host
 mexbt.com: could not connect to host
 mexicanbusinessweb.mx: did not receive HSTS header
-mexicansbook.ru: could not connect to host
+mexicansbook.ru: did not receive HSTS header
 mfcatalin.com: could not connect to host
 mfedderke.com: could not connect to host
 mgdigital.fr: did not receive HSTS header
 mgiay.com: did not receive HSTS header
 mh-bloemen.co.jp: could not connect to host
 mhdsyarif.com: did not receive HSTS header
 mhealthdemocamp.com: could not connect to host
 mhertel.com: did not receive HSTS header
@@ -6580,16 +6564,17 @@ minecraft-forums.ga: could not connect t
 minecraft-forums.gq: could not connect to host
 minecraftforum.ch: could not connect to host
 minecraftforums.cf: could not connect to host
 minecraftforums.gq: could not connect to host
 minecraftforums.ml: could not connect to host
 minecraftserverz.com: could not connect to host
 minecraftvoter.com: could not connect to host
 mineover.es: could not connect to host
+minesouls.fr: did not receive HSTS header
 mingo.nl: max-age too low: 2592000
 minh.at: could not connect to host
 mini-piraten.de: did not receive HSTS header
 minikneet.nl: could not connect to host
 minimaliston.com: did not receive HSTS header
 minimoo.se: could not connect to host
 minis-hip.de: max-age too low: 172800
 minkondom.nu: did not receive HSTS header
@@ -6689,17 +6674,17 @@ monitaure.io: could not connect to host
 monitman.com: did not receive HSTS header
 monsieurbureau.com: did not receive HSTS header
 montanacures.org: could not connect to host
 montanwerk.de: did not receive HSTS header
 montonicms.com: could not connect to host
 moon.lc: could not connect to host
 moonless.net: could not connect to host
 moonloupe.com: could not connect to host
-moosemanstudios.com: did not receive HSTS header
+moosemanstudios.com: could not connect to host
 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
@@ -6827,17 +6812,17 @@ mypension.ca: could not connect to host
 myphonebox.de: could not connect to host
 myraytech.net: did not receive HSTS header
 myrig.net: could not connect to host
 myrsa.in: did not receive HSTS header
 mysecretrewards.com: could not connect to host
 myspa.asia: did not receive HSTS header
 mystery-science-theater-3000.de: did not receive HSTS header
 mysteryblog.de: did not receive HSTS header
-mythlogic.com: could not connect to host
+mythlogic.com: did not receive HSTS header
 mythslegendscollection.com: did not receive HSTS header
 mytweeps.com: did not receive HSTS header
 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
@@ -7010,17 +6995,17 @@ nnote.net: did not receive HSTS header
 nnya.cat: could not connect to host
 no-ip.cz: did not receive HSTS header
 no17sifangjie.cc: could not connect to host
 nocallaghan.com: could not connect to host
 noclegi-online.pl: did not receive HSTS header
 noctinus.tk: could not connect to host
 node-core-app.com: could not connect to host
 nodebrewery.com: could not connect to host
-nodelab-it.de: did not receive HSTS header
+nodelab-it.de: could not connect to host
 nodespin.com: could not connect to host
 nodetemple.com: could not connect to host
 nodi.at: did not receive HSTS header
 noexpect.org: could not connect to host
 noima.com: did not receive HSTS header
 nolag.host: did not receive HSTS header
 nolberg.net: did not receive HSTS header
 nolimitsbook.de: did not receive HSTS header
@@ -7091,16 +7076,17 @@ null.cat: did not receive HSTS header
 null.tips: could not connect to host
 nullpoint.at: did not receive HSTS header
 nullpro.com: could not connect to host
 numericacu.com: did not receive HSTS header
 numero-di-telefono.it: could not connect to host
 numista.com: did not receive HSTS header
 nuos.org: could not connect to host
 nuovamoda.al: did not receive HSTS header
+nup.pw: did not receive HSTS header
 nurserybook.co: did not receive HSTS header
 nusatrip-api.com: did not receive HSTS header
 nutricuerpo.com: did not receive HSTS header
 nutritionculture.com: could not connect to host
 nutsandboltsmedia.com: did not receive HSTS header
 nwa.xyz: could not connect to host
 nweb.co.nz: could not connect to host
 nwork.media: could not connect to host
@@ -7197,16 +7183,17 @@ onionsburg.com: could not connect to hos
 online-casino.eu: did not receive HSTS header
 online-pr.at: did not receive HSTS header
 online-wetten.de: did not receive HSTS header
 online.swedbank.se: did not receive HSTS header
 onlinecompliance.org: did not receive HSTS header
 onlinedemo.hu: could not connect to host
 onlinedeposit.us: could not connect to host
 onlinekasino.de: did not receive HSTS header
+onlinepokerspelen.be: did not receive HSTS header
 onlinepollsph.com: could not connect to host
 onlineschadestaat.nl: did not receive HSTS header
 onlinespielothek.com: did not receive HSTS header
 onlinewetten.de: could not connect to host
 only-roses.co.uk: did not receive HSTS header
 only-roses.com: did not receive HSTS header
 onlyshopstation.com: did not receive HSTS header
 onlyzero.net: could not connect to host
@@ -7229,16 +7216,17 @@ open-to-repair.fr: max-age too low: 8640
 openas.org: could not connect to host
 openconcept.no: did not receive HSTS header
 opendesk.cc: did not receive HSTS header
 opengateway.fr: did not receive HSTS header
 openmind-shop.de: did not receive HSTS header
 openmtbmap.org: did not receive HSTS header
 openpriv.pw: could not connect to host
 openprovider.nl: did not receive HSTS header
+openrtv.com: did not receive HSTS header
 openshift.redhat.com: did not receive HSTS header
 opensourcehouse.net: could not connect to host
 openspace.xxx: did not receive HSTS header
 opensrd.com: could not connect to host
 openssf.org: could not connect to host
 openxmpp.com: could not connect to host
 opim.ca: did not receive HSTS header
 opioids.gov: could not connect to host
@@ -7256,16 +7244,17 @@ oracaodocredo.com.br: could not connect 
 orbiosales.com: could not connect to host
 orbitcom.de: did not receive HSTS header
 orbograph-hrcm.com: could not connect to host
 order.one: could not connect to host
 ordereat.fr: could not connect to host
 orderlounge.de: did not receive HSTS header
 organic-superfood.net: could not connect to host
 organisationsberatung-jacobi.de: did not receive HSTS header
+originalmockups.com: did not receive HSTS header
 originpc.com: did not receive HSTS header
 orioncustompcs.com: could not connect to host
 orionfcu.com: did not receive HSTS header
 orionrebellion.com: did not receive HSTS header
 orleika.ml: could not connect to host
 oroweatorganic.com: could not connect to host
 orthodoxy.lt: did not receive HSTS header
 osaiyuwu.com: could not connect to host
@@ -7436,16 +7425,17 @@ peissen.com: [Exception... "Component re
 pekkapikkarainen.fi: did not receive HSTS header
 pekkarik.ru: could not connect to host
 peliculasaudiolatinoonline.com: could not connect to host
 peliseries24.com: did not receive HSTS header
 pemberton.at: did not receive HSTS header
 pengui.uk: could not connect to host
 penguinclientsystem.com: did not receive HSTS header
 pennylane.me.uk: did not receive HSTS header
+pensanisso.com: max-age too low: 2592000
 pentagram.me: did not receive HSTS header
 pentano.net: could not connect to host
 people-mozilla.org: could not connect to host
 peperiot.com: did not receive HSTS header
 pepperhead.com: did not receive HSTS header
 pepperworldhotshop.de: did not receive HSTS header
 pepsicoemployeepreferencesurvey.com: did not receive HSTS header
 perdel.cn: did not receive HSTS header
@@ -7518,16 +7508,17 @@ pieterjangeeroms.me: could not connect t
 piggott.me.uk: did not receive HSTS header
 pilgermaske.org: did not receive HSTS header
 piligrimname.com: could not connect to host
 pillowandpepper.com: did not receive HSTS header
 pimpmymac.ru: did not receive HSTS header
 pims.global: did not receive HSTS header
 pinkyf.com: could not connect to host
 pippen.io: could not connect to host
+pips.rocks: did not receive HSTS header
 pir9.com: did not receive HSTS header
 pirata.ga: did not receive HSTS header
 piratebit.tech: could not connect to host
 piratedb.com: could not connect to host
 piratedot.com: could not connect to host
 piratelist.online: could not connect to host
 piratenlogin.de: could not connect to host
 pirateproxy.pe: could not connect to host
@@ -7585,16 +7576,17 @@ pluff.nl: did not receive HSTS header
 plur.com.au: did not receive HSTS header
 plus-digital.net: did not receive HSTS header
 plus-u.com.au: did not receive HSTS header
 plus.sandbox.google.com: did not receive HSTS header (error ignored - included regardless)
 plut.org: did not receive HSTS header
 plymouthsoftplay.co.uk: could not connect to host
 pm13-media.cz: could not connect to host
 pmac.pt: could not connect to host
+pmemanager.fr: did not receive HSTS header
 pmnts.io: could not connect to host
 pnukee.com: did not receive HSTS header
 po.gl: did not receive HSTS header
 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
@@ -7606,17 +7598,16 @@ 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
 policeiwitness.sg: could not connect to host
 polimat.org: could not connect to host
 politically-incorrect.xyz: could not connect to host
 politiewervingshop.nl: did not receive HSTS header
 politologos.org: did not receive HSTS header
-polkam.go.id: max-age too low: 0
 polycoise.com: could not connect to host
 polycrypt.us: could not connect to host
 polypho.nyc: could not connect to host
 pompefunebrilariviera.it: could not connect to host
 pompompoes.com: could not connect to host
 pontokay.com.br: could not connect to host
 pontualcomp.com: could not connect to host
 pony.today: did not receive HSTS header
@@ -7668,16 +7659,17 @@ prefontaine.name: could not connect to h
 prego-shop.de: did not receive HSTS header
 preissler.co.uk: could not connect to host
 prelist.org: did not receive HSTS header
 prelogica.com.br: did not receive HSTS header
 prepandgo-euro.com: could not connect to host
 preppertactics.com: did not receive HSTS header
 presidentials2016.com: could not connect to host
 press-anime-nenkan.com: did not receive HSTS header
+press-presse.ca: did not receive HSTS header
 pressenews.net: did not receive HSTS header
 pressfreedomfoundation.org: did not receive HSTS header
 prettygrouse.com: did not receive HSTS header
 prettyphotoart.de: did not receive HSTS header
 pretzlaff.info: did not receive HSTS header
 preworkout.me: could not connect to host
 prezola.com: did not receive HSTS header
 prgslab.net: could not connect to host
@@ -7923,16 +7915,17 @@ reddit.com: did not receive HSTS header
 rede.ca: did not receive HSTS header
 redhorsemountainranch.com: did not receive HSTS header
 redicabo.de: could not connect to host
 redirectman.com: did not receive HSTS header
 redlatam.org: did not receive HSTS header
 redmbk.com: did not receive HSTS header
 redner.cc: did not receive HSTS header
 rednertv.de: did not receive HSTS header
+redoakmedia.net: did not receive HSTS header
 redports.org: could not connect to host
 redra.ws: did not receive HSTS header
 redy.host: did not receive HSTS header
 referenten.org: did not receive HSTS header
 refitplanner.com: did not receive HSTS header
 reg.ru: did not receive HSTS header
 regaloaks.com: did not receive HSTS header
 regalpalms.com: did not receive HSTS header
@@ -8304,29 +8297,31 @@ secondary-survivor.com: could not connec
 secondary-survivor.help: could not connect to host
 secondary-survivor.net: could not connect to host
 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: 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
 securita.eu: did not receive HSTS header
 security-carpet.com: could not connect to host
 security-thoughts.org: could not connect to host
+security.google.com: did not receive HSTS header (error ignored - included regardless)
 securityarena.com: did not receive HSTS header
 securitybsides.pl: did not receive HSTS header
 securityglance.com: could not connect to host
 securityinet.biz: did not receive HSTS header
 securityinet.net: did not receive HSTS header
 securityinet.org.il: did not receive HSTS header
 securiviera.ch: did not receive HSTS header
 sedoexpert.nl: could not connect to host
@@ -8340,16 +8335,17 @@ sehenderson.com: did not receive HSTS he
 seiko-dojo.com: could not connect to host
 seiler-bad.de: did not receive HSTS header
 seizoushokoyuubangou.com: did not receive HSTS header
 sektor.team: could not connect to host
 selecadm.name: could not connect to host
 selectary.com: could not connect to host
 selectcertifiedautos.com: did not receive HSTS header
 selectruckscalltrackingreports.com: could not connect to host
+selfdefenserx.com: did not receive HSTS header
 selfie-france.fr: could not connect to host
 selldorado.com: could not connect to host
 sellercritic.com: did not receive HSTS header
 sello.com: did not receive HSTS header
 sellocdn.com: could not connect to host
 sellservs.co.za: could not connect to host
 semaf.at: max-age too low: 86400
 semantheme.fr: did not receive HSTS header
@@ -8449,17 +8445,16 @@ shindorei.fr: could not connect to host
 shinebijoux.com.br: could not connect to host
 shinju.moe: could not connect to host
 shiona.xyz: could not connect to host
 shipinsight.com: did not receive HSTS header
 shipmile.com: did not receive HSTS header
 shipping24h.com: did not receive HSTS header
 shirosaki.org: could not connect to host
 shishkin.link: did not receive HSTS header
-shishkin.us: did not receive HSTS header
 shitfest.info: did not receive HSTS header
 shitposting.life: could not connect to host
 shm-forum.org.uk: could not connect to host
 shocksrv.com: did not receive HSTS header
 shooshosha.com: could not connect to host
 shopherbal.co.za: did not receive HSTS header
 shopontarget.com: did not receive HSTS header
 shoppeno5.com: did not receive HSTS header
@@ -8530,17 +8525,17 @@ sitennisclub.com: did not receive HSTS h
 siterip.org: could not connect to host
 sites.google.com: did not receive HSTS header (error ignored - included regardless)
 sitesforward.com: did not receive HSTS header
 sitesten.com: did not receive HSTS header
 sittinginoblivion.com: did not receive HSTS header
 sizingservers.be: did not receive HSTS header
 skandiabanken.no: did not receive HSTS header
 ski-insurance.com.au: did not receive HSTS header
-skidstresser.com: did not receive HSTS header
+skidstresser.com: could not connect to host
 skiinstructor.services: did not receive HSTS header
 skillproxy.com: could not connect to host
 skillproxy.net: could not connect to host
 skillproxy.org: could not connect to host
 skk.io: could not connect to host
 skoda-clever-lead.de: could not connect to host
 skoda-nurdiebesten.de: did not receive HSTS header
 skoda-service-team-cup.de: did not receive HSTS header
@@ -8595,17 +8590,17 @@ smet.us: could not connect to host
 smexpt.com: did not receive HSTS header
 smileawei.com: did not receive HSTS header
 smimea.com: could not connect to host
 smirkingwhorefromhighgarden.pro: could not connect to host
 smittix.co.uk: did not receive HSTS header
 smkn1lengkong.sch.id: did not receive HSTS header
 smksi2.com: could not connect to host
 smksultanismail2.com: did not receive HSTS header
-smkw.com: did not receive HSTS header
+smol.cat: did not receive HSTS header
 smove.sg: did not receive HSTS header
 smplix.com: could not connect to host
 smtp.bz: did not receive HSTS header
 smusg.com: did not receive HSTS header
 smzsq.com: did not receive HSTS header
 snailing.org: could not connect to host
 snakehosting.dk: did not receive HSTS header
 snapworks.net: did not receive HSTS header
@@ -9077,16 +9072,17 @@ tel-dithmarschen.de: did not receive HST
 teleallarme.ch: could not connect to host
 telefisk.org: did not receive HSTS header
 telefonnummer.online: could not connect to host
 telefoonnummerinfo.nl: could not connect to host
 telescam.com: could not connect to host
 teletechnology.in: did not receive HSTS header
 teletra.ru: could not connect to host
 tellingua.com: did not receive HSTS header
+temasa.net: did not receive HSTS header
 temehu.com: did not receive HSTS header
 tempcraft.net: could not connect to host
 tempo.co: did not receive HSTS header
 tempodecolheita.com.br: could not connect to host
 tendertool.nl: could not connect to host
 tenerife-villas.com: did not receive HSTS header
 tengroup.com: max-age too low: 0
 tenni.xyz: could not connect to host
@@ -9208,17 +9204,16 @@ theweilai.com: did not receive HSTS head
 theworkingeye.nl: could not connect to host
 thewp.pro: could not connect to host
 thezonders.com: did not receive HSTS header
 thgros.fr: could not connect to host
 thierfreund.de: could not connect to host
 thinkcoding.de: could not connect to host
 thinkcoding.org: could not connect to host
 thinkdo.jp: could not connect to host
-thinkingplanet.net: did not receive HSTS header
 thinlyveiledcontempt.com: could not connect to host
 thirdpartytrade.com: did not receive HSTS header
 thirty5.net: did not receive HSTS header
 thisisacompletetest.ga: could not connect to host
 thisisforager.com: could not connect to host
 thiswasalreadymyusername.tk: could not connect to host
 thiswebhost.com: did not receive HSTS header
 thkb.net: could not connect to host
@@ -9264,42 +9259,40 @@ timeatlas.com: did not receive HSTS head
 timesavingplugins.com: could not connect to host
 timesavingplugins.net: could not connect to host
 timeserver0.de: could not connect to host
 timeserver1.de: could not connect to host
 timeserver2.de: could not connect to host
 timeserver3.de: could not connect to host
 timestamp.io: did not receive HSTS header
 timhjalpen.se: could not connect to host
-timnash.co.uk: did not receive HSTS header
+timnash.co.uk: max-age too low: 2592000
 timotrans.de: did not receive HSTS header
 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
 titties.ml: could not connect to host
 tjc.wiki: could not connect to host
 tjeckien.guide: could not connect to host
 tkappertjedemetamorfose.nl: could not connect to host
 tkarstens.de: did not receive HSTS header
 tkonstantopoulos.tk: could not connect to host
-tlach.cz: did not receive HSTS header
 tlcdn.net: could not connect to host
 tlo.hosting: could not connect to host
 tlo.link: could not connect to host
 tlo.network: could not connect to host
 tls.li: could not connect to host
 tlsbv.nl: did not receive HSTS header
 tlshost.net: could not connect to host
 tm-solutions.eu: could not connect to host
@@ -9319,17 +9312,16 @@ tobiasmathes.com: could not connect to h
 tobiasmathes.name: could not connect to host
 tobiasofficial.at: could not connect to host
 tobiassachs.cf: could not connect to host
 tobiassachs.tk: could not connect to host
 todapolitica.com: did not receive HSTS header
 todesschaf.org: could not connect to host
 todo.is: did not receive HSTS header
 todobazar.es: could not connect to host
-todoscomciro.com: did not receive HSTS header
 tofu.im: could not connect to host
 togelonlinecommunity.com: did not receive HSTS header
 toka.sg: did not receive HSTS header
 tokenloan.com: could not connect to host
 tokoone.com: did not receive HSTS header
 tokotamz.net: could not connect to host
 tokotimbangandigitalmurah.web.id: did not receive HSTS header
 tokoyo.biz: could not connect to host
@@ -9385,17 +9377,16 @@ tourpeer.com: did not receive HSTS heade
 toxme.se: did not receive HSTS header
 toyotamotala.se: could not connect to host
 tpbcdn.com: could not connect to host
 tpe-edu.com: could not connect to host
 tpms4u.at: did not receive HSTS header
 tppdebate.org: did not receive HSTS header
 tracetracker.com: did not receive HSTS header
 tracker-gps.ch: could not connect to host
-trackmeet.io: did not receive HSTS header
 tracktivity.com.au: could not connect to host
 trade-smart.ru: could not connect to host
 tradingcentre.com.au: did not receive HSTS header
 tradinghope.com: could not connect to host
 traditional-knowledge.tk: did not receive HSTS header
 trafficquality.org: could not connect to host
 traindb.nl: did not receive HSTS header
 training4girls.ru: could not connect to host
@@ -9526,17 +9517,17 @@ tyroproducts.eu: did not receive HSTS he
 tyroremotes.eu: did not receive HSTS header
 tyroremotes.no: did not receive HSTS header
 tyskland.guide: could not connect to host
 tzappa.net: could not connect to host
 u-blox.com: max-age too low: 0
 uadp.pw: did not receive HSTS header
 uber.com.au: did not receive HSTS header
 uberfunction.com: did not receive HSTS header
-ubicloud.de: could not connect to host
+ubicloud.de: did not receive HSTS header
 ublox.com: did not receive HSTS header
 ubuntuhot.com: did not receive HSTS header
 uddi.ng: did not receive HSTS header
 uefeng.com: did not receive HSTS header
 uega.net: did not receive HSTS header
 ufgaming.com: did not receive HSTS header
 ufotable.uk: could not connect to host
 ugisgutless.com: did not receive HSTS header
@@ -9603,17 +9594,17 @@ unisyssecurity.com: did not receive HSTS
 uniteasia.org: did not receive HSTS header
 unitlabs.net: could not connect to host
 unitrade-425.co.za: did not receive HSTS header
 university4industry.com: did not receive HSTS header
 univz.com: could not connect to host
 unixtime.pro: could not connect to host
 unknownbreakup.com: did not receive HSTS header
 unknownphenomena.net: could not connect to host
-unleash.pw: max-age too low: 7889231
+unleash.pw: max-age too low: 2592000
 unplugg3r.dk: could not connect to host
 unravel.ie: could not connect to host
 unsupervised.ca: did not receive HSTS header
 unsystem.net: could not connect to host
 unwiredbrain.com: could not connect to host
 unwomen.is: did not receive HSTS header
 unyq.me: did not receive HSTS header
 uonstaffhub.com: could not connect to host
@@ -9625,17 +9616,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
 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
 uscitizenship.info: did not receive HSTS header
@@ -9827,16 +9817,17 @@ volkden.com: could not connect to host
 vomitb.in: did not receive HSTS header
 vonavy-cukor.sk: could not connect to host
 vonavycukor.sk: could not connect to host
 vooreenveiligthuis.nl: did not receive HSTS header
 voorjou.com: did not receive HSTS header
 vorangerie.com: could not connect to host
 vortexhobbies.com: did not receive HSTS header
 vosjesweb.nl: could not connect to host
+vowsy.club: did not receive HSTS header
 vox.vg: did not receive HSTS header
 vpip.net: could not connect to host
 vpl.me: did not receive HSTS header
 vpls.co.th: max-age too low: 0
 vpls.com: did not receive HSTS header
 vpls.net: max-age too low: 0
 vplssolutions.com: did not receive HSTS header
 vpn-byen.dk: did not receive HSTS header
@@ -9903,17 +9894,16 @@ warrencreative.com: did not receive HSTS
 warsentech.com: could not connect to host
 warsh.moe: did not receive HSTS header
 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
@@ -10129,17 +10119,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
@@ -10353,16 +10343,17 @@ zahyantechnologies.com: did not receive 
 zakoncontrol.com: did not receive HSTS header
 zamorano.edu: could not connect to host
 zamos.ru: max-age too low: 0
 zaneweb.org: could not connect to host
 zao.fi: could not connect to host
 zaoshanghao-dajia.rhcloud.com: could not connect to host
 zap.yt: did not receive HSTS header
 zarooba.com: could not connect to host
+zary.me: did not receive HSTS header
 zavca.com: did not receive HSTS header
 zbasenem.pl: did not receive HSTS header
 zbigniewgalucki.eu: did not receive HSTS header
 zdravotnickasluzba.eu: could not connect to host
 zdrowiepaleo.pl: did not receive HSTS header
 zebbra.ro: did not receive HSTS header
 zebrababy.cn: could not connect to host
 zebry.nl: could not connect to host
@@ -10423,16 +10414,17 @@ zking.ga: could not connect to host
 zlcp.com: did not receive HSTS header
 zmsastro.co.za: could not connect to host
 zmy.im: could not connect to host
 znacite.com: did not receive HSTS header
 znd.jp: did not receive HSTS header
 zocken.com: did not receive HSTS header
 zoe.vc: could not connect to host
 zohar.link: could not connect to host
+zohar.wang: did not receive HSTS header
 zolotoy-standart.com.ua: did not receive HSTS header
 zomiac.pp.ua: could not connect to host
 zoneminder.com: did not receive HSTS header
 zoners.si: did not receive HSTS header
 zonky.io: could not connect to host
 zoo24.de: did not receive HSTS header
 zoofaeth.de: did not receive HSTS header
 zoomingin.net: max-age too low: 5184000
--- 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(1525905299167000);
+const PRTime gPreloadListExpirationTime = INT64_C(1525990195432000);
 %%
 0-1.party, 1
 0.me.uk, 1
 0005pay.com, 1
 0010100.net, 1
 00220022.net, 1
 007-preisvergleich.de, 1
 00881919.com, 1
@@ -137,16 +137,17 @@ 1464424382.rsc.cdn77.org, 1
 14it.de, 1
 14x3.de, 1
 15-10.com, 1
 1511774230.rsc.cdn77.org, 1
 1590284872.rsc.cdn77.org, 1
 1600esplanade.com, 1
 16164f.com, 1
 1644091933.rsc.cdn77.org, 1
+166166.com, 1
 174.net.nz, 1
 1750studios.com, 0
 17hats.com, 1
 1844329061.rsc.cdn77.org, 1
 188522.com, 0
 18888msc.com, 1
 1888zr.com, 1
 188dv.com, 1
@@ -1207,29 +1208,29 @@ alb-flirt.de, 1
 albbounce.co.uk, 1
 albersdruck.de, 1
 albertathome.org, 1
 albertify.xyz, 1
 albion2.org, 1
 alboweb.nl, 1
 albuic.tk, 1
 alca31.com, 1
-alcantarafleuriste.com, 1
 alcatelonetouch.us, 1
 alcatraz.online, 1
 alchemia.co.il, 1
 alchimic.ch, 1
 alcnutrition.com, 1
 alcorao.org, 1
 aldes.co.za, 1
 aldien.com.br, 1
 aldorr.net, 1
 aldous-huxley.com, 1
 aleax.me, 1
 alecpap.com, 1
+alecpapierniak.com, 1
 alecrust.com, 1
 aleksejjocic.tk, 1
 aleksib.fi, 1
 alela.fr, 1
 aleph.land, 1
 alertaenlinea.gov, 1
 alertboxx.com, 1
 alertonline.nl, 1
@@ -1693,17 +1694,16 @@ anetaben.nl, 1
 anextraordinaryday.net, 1
 anfenglish.com, 1
 angel-body.com, 1
 angelic47.com, 1
 angelinahair.com, 1
 angeloventuri.com, 1
 anginf.de, 1
 anglertanke.de, 1
-anglesya.win, 1
 anglictina-sojcak.cz, 1
 anglictinasojcak.cz, 1
 anglingactive.co.uk, 1
 angrapa.ru, 1
 angristan.fr, 1
 angrut.com, 1
 angry.im, 1
 angrydragonproductions.com, 1
@@ -2578,31 +2578,34 @@ 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
@@ -2833,16 +2836,17 @@ banri.me, 1
 banxehoi.com, 1
 baofengtech.com, 1
 baosuckhoedoisong.net, 1
 baptistboard.com, 1
 baptiste-destombes.fr, 1
 baptiste-peugnez.fr, 1
 bar-harcourt.com, 1
 barans2239.com, 1
+barbarafeldman.com, 1
 barbarians.com, 1
 barbaros.info, 1
 barbate.fr, 1
 barbershop-harmony.org, 1
 barbosha.ru, 1
 barbu.family, 1
 barburas.com, 1
 barclays.net, 1
@@ -3291,17 +3295,16 @@ betshoot.com, 1
 betsonlinefree.com.au, 1
 betsyshilling.com, 1
 bett1.de, 1
 better-bounce.co.uk, 1
 better.fyi, 1
 betterbabyshop.com.au, 1
 bettercrypto.org, 1
 betterhelp.com, 1
-betterlifemakers.com, 1
 betterna.me, 1
 betterscience.org, 1
 bettertest.it, 1
 betterworldinternational.org, 1
 bettflaschen.ch, 1
 bettingbusiness.ru, 1
 bettolinokitchen.com, 1
 bettrlifeapp.com, 1
@@ -4268,16 +4271,17 @@ brau-ingenieur.de, 1
 braudoktor.de, 1
 brauingenieur.de, 1
 braunsteinpc.com, 1
 braunwarth.info, 1
 brava.bg, 1
 brave-foods.ch, 1
 brave-foods.com, 1
 brave.com, 1
+bravehearts.org.au, 1
 braviskindenjeugd.nl, 1
 bravisziekenhuis.nl, 1
 brazilian.dating, 1
 brazillens.com, 1
 brb.city, 1
 brck.nl, 1
 brd.ro, 1
 breadandlife.org, 1
@@ -4445,16 +4449,17 @@ 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
@@ -4608,16 +4613,17 @@ buydissertations.com, 1
 buyerdocs.com, 1
 buyessay.org, 1
 buyessays.net, 1
 buyessayscheap.com, 1
 buyharpoon.com, 1
 buyinginvestmentproperty.com, 1
 buyingsellingflorida.com, 1
 buymindhack.com, 1
+buynowdepot.com, 0
 buypapercheap.net, 1
 buyseo.store, 1
 buyshoe.org, 1
 buytheway.co.za, 1
 buzz.tools, 1
 buzzconf.io, 1
 buzzdeck.com, 1
 buzzprint.it, 1
@@ -5667,16 +5673,17 @@ cigoteket.se, 1
 cima-idf.fr, 1
 cimballa.com, 1
 cimfax.com, 1
 cinafilm.com, 1
 cine-music.de, 1
 cine.to, 1
 cinefilia.tk, 1
 cinefilzonen.se, 1
+cinema5.ru, 0
 cinemaclub.co, 1
 cinemysticism.com, 1
 ciner.is, 1
 cinerama.com.br, 1
 cinnabon.com, 1
 cinq-elements.com, 1
 cinq-elements.fr, 1
 cinq-elements.net, 1
@@ -5987,17 +5994,16 @@ coam.co, 1
 coastline.net.au, 1
 coatl-industries.com, 1
 cobalt.io, 1
 cobaltgp.com, 1
 cobaltlp.com, 1
 cobracastles.co.uk, 1
 cocaine-import.agency, 1
 cocaine.ninja, 1
-cocalc.com, 1
 coccinellaskitchen.com, 1
 coccinellaskitchen.de, 1
 coccinellaskitchen.it, 1
 coccolebenessere.it, 1
 cocinoyo.com, 1
 cock.li, 1
 cockedey.in, 1
 cocker.cc, 0
@@ -6259,17 +6265,16 @@ computerbase.de, 1
 computeremergency.com.au, 0
 computerhilfe-feucht.de, 1
 computernetwerkwestland.nl, 1
 computerslotopschool.nl, 1
 computersystems.guru, 0
 comssa.org.au, 1
 comunidadmontepinar.es, 1
 comw.cc, 1
-comyuno.com, 1
 conalcorp.com, 1
 conaudisa.com, 0
 concept-web.ch, 1
 conceptatelier.de, 1
 conception.sk, 1
 concertengine.com, 1
 concerto.amsterdam, 1
 conciliumnotaire.ca, 1
@@ -6597,17 +6602,16 @@ crea.bg, 1
 crea.me, 1
 creadstudy.com, 1
 creamcastles.co.uk, 1
 create-ls.jp, 1
 create-together.nl, 1
 createursdefilms.com, 1
 creation-contemporaine.com, 1
 creations-edita.com, 1
-creative-coder.de, 1
 creative-wave.fr, 1
 creativebites.de, 1
 creativecaptiv.es, 1
 creativecommons.cl, 1
 creativecommons.gr, 1
 creativecommons.org, 1
 creativecommonscatpictures.com, 1
 creativedigital.co.nz, 1
@@ -6754,17 +6758,17 @@ cscau.com, 1
 cselzer.com, 0
 csengle.de, 1
 csfd.cz, 1
 csfloors.co.uk, 1
 csfm.com, 1
 csgo.help, 1
 csgo.su, 1
 csgo77.com, 1
-csgogamers.com, 1
+csgogamers.com, 0
 csgohandouts.com, 1
 csgotwister.com, 1
 csharpmarc.net, 1
 cshopify.com, 1
 csilies.de, 1
 csinfo.us, 1
 csinterstargeneve.ch, 1
 cskentertainment.co.uk, 1
@@ -7382,17 +7386,16 @@ deai-life.biz, 1
 deaktualisierung.org, 0
 dealapp.nl, 1
 dealbanana.at, 1
 dealbanana.be, 1
 dealbanana.ch, 1
 dealbanana.co.uk, 1
 dealbanana.com, 1
 dealbanana.de, 1
-dealbanana.fi, 1
 dealbanana.fr, 1
 dealbanana.it, 1
 dealbanana.se, 1
 dealcruiser.nl, 1
 dealinflatables.co.uk, 1
 dealpass.no, 1
 deamuseum.org, 1
 deanbank.com, 1
@@ -7818,17 +7821,16 @@ 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
@@ -8620,16 +8622,17 @@ duriaux-dentiste.ch, 1
 durys.be, 1
 dusmomente.com, 1
 dustri.org, 1
 dustycloth.com, 1
 dustygroove.com, 1
 dustyspokesbnb.ca, 1
 dutch.desi, 1
 dutch1.nl, 1
+dutchessuganda.com, 1
 dutchrank.nl, 1
 dutchwanderers.nl, 1
 dutchweballiance.nl, 1
 dutyfreeonboard.com, 1
 duyao.de, 0
 dv189.com, 1
 dvbris.co.uk, 1
 dvbris.com, 1
@@ -8772,16 +8775,17 @@ eat-the-world.ch, 1
 eatery.co.il, 1
 eatfitoutlet.com.br, 1
 eaton-works.com, 1
 eatry.io, 1
 eatsleeprepeat.net, 1
 eatson.com, 1
 eattherich.us, 1
 eatz.com, 1
+eaucube.com, 1
 eauxdespleiades.ch, 1
 eb-net.de, 1
 eb7.jp, 1
 ebanking.indovinabank.com.vn, 1
 ebankingabersicher.ch, 1
 ebankingbutsecure.ch, 1
 ebankingentoutesecurite.ch, 1
 ebankingmasicuro.ch, 1
@@ -8880,16 +8884,17 @@ edisonchee.com, 1
 edisonlee55.com, 1
 edisonluiz.com, 1
 edisonnissanparts.com, 1
 edit.yahoo.com, 0
 edited.de, 1
 edition-bambou.com, 1
 edition-sonblom.de, 1
 editoraacademiacrista.com.br, 1
+edlinus.cn, 1
 edmundcelis.com, 1
 edoss.co.za, 1
 edp-collaborative.com, 1
 edsh.de, 1
 edsm.net, 1
 edstep.com, 1
 edtech-hub.com, 1
 edtechwebb.com, 1
@@ -8989,17 +8994,16 @@ ehrlichesbier.de, 1
 ehuber.info, 1
 eichel.eu, 1
 eichornenterprises.com, 1
 eickemeyer.nl, 1
 eickhof.co, 1
 eickhof.us, 1
 eickhofcolumbaria.com, 1
 eidolons.org, 1
-eifelindex.de, 1
 eiga-movie.com, 1
 eigenbubi.de, 1
 eighty-aid.com, 1
 eightyfour.ca, 1
 eigpropertyauctions.co.uk, 1
 eilhan.com, 1
 eimacs.com, 1
 eimanavicius.lt, 1
@@ -9428,17 +9432,17 @@ epilis.gr, 1
 epiphyte.network, 1
 epistas.com, 1
 epistas.de, 1
 epitesz.co, 1
 epiteugma.com, 1
 epizentrum.work, 1
 epizentrum.works, 1
 epmcentroitalia.it, 1
-epoch.com, 0
+epoch.com, 1
 epolitiker.com, 1
 epos-distributor.co.uk, 1
 eposbirmingham.co.uk, 1
 eposbrighton.co.uk, 1
 eposbristol.co.uk, 1
 eposcardiff.co.uk, 1
 eposcloud.net, 1
 eposkent.co.uk, 1
@@ -11883,17 +11887,16 @@ glamour4you.de, 1
 glasen-hardt.de, 1
 glasfaser-im-hanseviertel.de, 1
 glasgestaltung.biz, 1
 glasner.photo, 1
 glass.google.com, 1
 glasschmuck-millefiori.de, 1
 glavsudexpertiza.ru, 1
 glazedmag.fr, 1
-glbg.eu, 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
@@ -12082,17 +12085,16 @@ gotech.com.eg, 0
 gothamlimo.com, 1
 gothic.dating, 1
 gotirupati.com, 0
 goto.google.com, 1
 goto.world, 1
 gotomi.info, 1
 gotoxy.at, 1
 gottfridsberg.org, 1
-gottfriedfeyen.com, 1
 goubi.me, 1
 goudenharynck.be, 1
 gouforit.com, 1
 goukon.ru, 1
 gouldcooksey.com, 1
 goup.co, 1
 goup.com.tr, 1
 gouptime.ml, 1
@@ -12626,17 +12628,16 @@ hanxv.pw, 1
 hanys.xyz, 1
 hanzubon.jp, 1
 hao-zhang.com, 1
 haogoodair.ca, 1
 haozhang.org, 1
 hapijs.cn, 1
 hapissl.com, 1
 hapivm.com, 1
-happist.com, 0
 happyagain.de, 1
 happyagain.se, 1
 happyandrelaxeddogs.eu, 0
 happybounce.co.uk, 1
 happycarb.de, 1
 happydoq.ch, 1
 happygadget.me, 1
 happykidscastles.co.uk, 1
@@ -13117,16 +13118,17 @@ hill.selfip.net, 1
 hillebrand.io, 1
 hillsboroccpa.org, 1
 hilnu.com, 1
 hilti.ee, 0
 hilti.kz, 0
 hilti.lv, 0
 hiltonarubabeachservices.com, 1
 hiltonhyland.com, 1
+himens.com, 1
 hindmanfuneralhomes.com, 1
 hingle.me, 1
 hinrich.de, 1
 hintergrundbewegung.de, 1
 hinterhofbu.de, 1
 hintermeier-rae.at, 1
 hinterposemuckel.de, 1
 hintss.pw, 1
@@ -13138,17 +13140,16 @@ hippomovers.com, 1
 hippopotamuses.org, 1
 hips.com, 1
 hipstercat.fr, 1
 hiqfleet.co.uk, 1
 hiqfranchise.co.uk, 1
 hiqhub.co.uk, 1
 hiqonline.co.uk, 1
 hirake55.com, 1
-hiraku.me, 1
 hiratake.xyz, 1
 hire-a-coder.de, 1
 hireabouncycastle.net, 1
 hiresteve.ca, 1
 hiresuccessstaffing.com, 1
 hiretech.com, 1
 hirezzportal.com, 1
 hirotaka.org, 1
@@ -13591,17 +13592,17 @@ hunger.im, 1
 hunter.io, 1
 huntingdonbouncers.co.uk, 1
 huntingdonlifesciences.com, 1
 huntshomeinspections.com, 1
 huongquynh.com, 1
 hup.hu, 1
 hupp.se, 1
 hurd.is, 1
-huren.nl, 0
+huren.nl, 1
 huroji.com, 1
 hurricanelabs.com, 0
 husakbau.at, 1
 hushfile.it, 1
 husic.net, 1
 husky.xyz, 1
 huskyduvercors.com, 1
 huskyinc.us, 1
@@ -13857,16 +13858,17 @@ ifsac.org, 1
 ifsclist.com, 1
 ifsr.de, 1
 iftrue.de, 1
 ifxnet.com, 1
 ifxor.com, 1
 ifyou.live, 1
 iga-semi.jp, 1
 igamingforums.com, 1
+igd.chat, 1
 igglabs.com, 1
 iggprivate.com, 1
 iggsoft.com, 1
 iggsoftware.com, 1
 igi.codes, 1
 igiftcards.de, 1
 igimusic.com, 1
 igk.nz, 1
@@ -14144,16 +14146,17 @@ infinitybas.com, 1
 infinityengine.org, 1
 infinityepos.co.uk, 1
 infirmieredevie.ch, 1
 inflatablehire-scotland.co.uk, 1
 inflatablesny.com, 1
 inflatamania.com, 1
 inflexsys.com, 1
 influencerchampions.com, 1
+influo.com, 1
 influxus.com, 0
 infmed.com, 1
 info-bay.com, 1
 info-beamer.com, 1
 info-d-74.com, 1
 info-screen.me, 1
 info-screw.com, 1
 infocity-tech.fr, 1
@@ -14194,33 +14197,31 @@ inglesnarede.com.br, 1
 ingo-schlueter.de, 1
 ingoschlueter.de, 1
 ingresscode.cn, 1
 inhaltsangabe.de, 1
 inheritestate.com, 1
 inhive.group, 1
 inhouseents.co.uk, 1
 iniiter.com, 1
-inima.org, 1
 inios.fr, 0
 inishbofin.ie, 1
 initq.net, 1
 initramfs.io, 1
 initrd.net, 1
 inixal.com, 1
 injust.eu.org, 1
 injust.me, 1
 ink.horse, 1
 inkable.com.au, 1
 inkbunny.net, 0
 inkhor.se, 1
 inkontriamoci.com, 1
 inksay.com, 1
 inkthemes.com, 1
-inkvisual.tk, 1
 inline-sport.cz, 1
 inlink.ee, 1
 inmaps.xyz, 1
 inmateintake.com, 1
 inme.ga, 1
 inmobillium.fr, 1
 inmusrv.de, 1
 innerfence.com, 1
@@ -14879,16 +14880,17 @@ jamesheald.com, 1
 jameshemmings.co.uk, 1
 jameshost.net, 1
 jameshunt.us, 0
 jamesj.me, 1
 jamesknd.uk, 0
 jamesmarsh.net, 1
 jamesmcdonald.com, 0
 jamesmilazzo.com, 1
+jamesmorrison.me, 1
 jamesrains.com, 1
 jamesrussellward.co.uk, 1
 jamessmith.me.uk, 1
 jameswarp.com, 1
 jamhost.org, 1
 jamielinux.com, 1
 jamiemagee.co.uk, 1
 jamiemagee.dk, 1
@@ -15254,16 +15256,17 @@ joelmarkhamphotography.com.au, 1
 joelmunch.com, 1
 joepitt.co.uk, 0
 joerg-wellpott.de, 1
 joerss.at, 1
 joespaintingpgh.com, 1
 joestead.codes, 1
 joetyson.io, 1
 joetyson.me, 1
+joeysmith.com, 1
 jogi-server.de, 1
 jogorama.com.br, 0
 johanbissemattsson.se, 0
 johand.io, 1
 johanli.com, 1
 johannaojanen.com, 1
 johannes-bauer.com, 1
 johannes-zinke.de, 1
@@ -16096,17 +16099,17 @@ kiragameforum.net, 1
 kirainmoe.com, 1
 kiraku.co, 1
 kirbear.com, 1
 kirche-dortmund-ost.de, 1
 kirchen-im-web.de, 1
 kirchengemeinde-markt-erlbach.de, 1
 kircp.com, 1
 kirei.se, 1
-kirig.ph, 1
+kirig.ph, 0
 kirill.ws, 1
 kirillpokrovsky.de, 1
 kirinas.com, 1
 kirkovsky.com, 1
 kirrie.pe.kr, 1
 kirsch-gestaltung.de, 1
 kirschbaum.me, 1
 kirstenbos.ca, 1
@@ -16165,17 +16168,16 @@ kl-diaetist.dk, 1
 klaim.us, 1
 klamathrestoration.gov, 1
 klanggut.at, 1
 klares-licht.de, 1
 klarika.com, 1
 klarmobil-empfehlen.de, 1
 klasfauseweh.de, 1
 klatschreime.de, 1
-klausbrinch.dk, 1
 klausimas.lt, 1
 klaver.it, 1
 klaw.xyz, 1
 kle.cz, 1
 kleaning.by, 1
 kleberstoff.xyz, 1
 klebetape.de, 1
 kledingrekken.nl, 1
@@ -16445,16 +16447,17 @@ kriptosec.com, 1
 krislamoureux.com, 1
 krismurray.co.uk, 1
 krisstarkey.co.uk, 1
 krist.club, 1
 kristikala.nl, 1
 kristinbailey.com, 1
 kristofdv.be, 1
 krizek.cc, 1
+krizevci.info, 1
 krk-media.pl, 0
 krmeni.cz, 1
 krokedil.se, 1
 krokodent.de, 1
 kromamoveis.com.br, 1
 kromonos.net, 1
 kronaw.it, 1
 krony.de, 1
@@ -16510,17 +16513,16 @@ kuechenplan.online, 1
 kuechenprofi-group.de, 1
 kuehndel.org, 1
 kuehnel-bs.de, 1
 kuehnel-online.eu, 1
 kuehnel.org, 1
 kuemmerlin.eu, 1
 kuemmling.eu, 1
 kuhn-elektrotechnik.de, 1
-kujadin.de, 1
 kukal.cz, 1
 kuketz-blog.de, 1
 kuketz-security.de, 1
 kuko-crews.org, 1
 kulde.net, 1
 kulivps.com, 1
 kultmobil.se, 1
 kuma.es, 1
@@ -16654,17 +16656,16 @@ lachlan.com, 1
 lacicloud.net, 1
 lacigf.org, 1
 laclaque.ch, 1
 lacledelareussite.com, 1
 lacledeslan.com, 0
 lacledor.ch, 1
 laclefdor.ch, 1
 lacliniquefinanciere.com, 1
-lacuevadechauvet.com, 1
 lacyc3.eu, 1
 ladbroke.net, 1
 lady-2.jp, 1
 ladybugjam.com, 1
 ladylikeit.com, 1
 laextra.mx, 1
 lafayette-rushford.com, 1
 lafeemam.fr, 1
@@ -17212,16 +17213,17 @@ liangbp.com, 1
 lianwen.kim, 1
 lianye1.cc, 1
 lianye2.cc, 1
 lianye3.cc, 1
 lianye4.cc, 1
 lianye5.cc, 1
 lianye6.cc, 1
 liaozheqi.cn, 1
+liaronce.win, 1
 liautard.fr, 1
 lib64.net, 1
 libbitcoin.org, 1
 libble.eu, 1
 libdeer.so, 1
 liberapay.com, 1
 libertas-tech.com, 1
 libmpq.org, 1
@@ -17408,16 +17410,17 @@ linvx.org, 1
 linx.li, 1
 linx.net, 1
 linxmind.eu, 1
 linzgau.de, 1
 lionlyrics.com, 1
 lionsdeal.com, 1
 lipartydepot.com, 1
 lipex.com, 1
+lipo.lol, 1
 lipoabaltimore.org, 1
 liqd.net, 1
 liquid.cz, 1
 liquidcomm.net, 1
 liquidhost.co, 1
 liquidinternet.co, 1
 liquidradio.pro, 1
 lirion.de, 1
@@ -17706,16 +17709,17 @@ loqyu.co, 1
 lordgun.com, 1
 lordofthebrick.com, 1
 lore.azurewebsites.net, 1
 lorenadumitrascu.ro, 1
 loritaboegl.de, 1
 losebellyfat.pro, 1
 losless.fr, 1
 loss.no, 1
+lost.host, 1
 lostandcash.com, 1
 lostarq.com, 1
 lostingames.de, 1
 lostkeys.co.uk, 1
 lostserver.com, 1
 lostwithdan.com, 1
 loteks.de, 1
 lothlorien.ca, 1
@@ -17855,17 +17859,16 @@ luk.earth, 1
 luk.photo, 1
 lukas-oppermann.de, 1
 lukas-schauer.de, 1
 lukas.im, 1
 lukas2511.de, 1
 lukasberan.com, 1
 lukasberan.cz, 1
 lukasfunk.com, 1
-lukasoppermann.com, 1
 lukasoppermann.de, 1
 lukasschauer.de, 1
 lukasschick.de, 1
 lukasunger.cz, 1
 lukasunger.net, 1
 lukaszorn.de, 1
 lukasztkacz.com, 1
 lukatz.de, 1
@@ -18148,17 +18151,16 @@ majkyto.cz, 1
 makaleci.com, 1
 makeaboldmove.com, 1
 makedin.net, 1
 makeit-so.de, 1
 makem-bounce.co.uk, 1
 makemejob.com, 1
 makenaiyo-fx.com, 1
 makeuplove.nl, 1
-makeyourank.com, 1
 makeyourlaws.org, 1
 makinen.ru, 1
 makino.games, 1
 makkusu.photo, 1
 makowitz.cz, 1
 maktoob.search.yahoo.com, 0
 maku.edu.tr, 1
 malachiteauth.com, 1
@@ -18218,16 +18220,17 @@ 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
 manager-efficacement.com, 1
 manager.linode.com, 0
 managewp.org, 1
 manalu.cz, 1
 manatees.net, 1
 manav-it.de, 1
 manavgabhawala.com, 1
 manawill.jp, 1
@@ -18715,16 +18718,17 @@ mdsave.com, 1
 mdwftw.com, 1
 mdx.no, 1
 mdxdave.de, 1
 mdxn.org, 1
 me-center.com, 1
 me-dc.com, 1
 me-groups.com, 1
 me.net.nz, 1
+meadowfen.farm, 1
 meadowviewfarms.org, 1
 mealgoo.com, 1
 mealz.com, 0
 meanevo.com, 0
 meany.xyz, 1
 meap.xyz, 1
 measuretwice.com, 1
 measureyourpenis.today, 1
@@ -18769,17 +18773,16 @@ mediawin.pl, 1
 medic-world.com, 1
 medicalcountermeasures.gov, 1
 medicinesfast.com, 0
 medicinia.com.br, 1
 medicinskavranje.edu.rs, 1
 medicocompetente.it, 1
 medicoresponde.com.br, 1
 medifab.online, 1
-medifi.com, 1
 medireport.fr, 1
 medium.com, 1
 mediumraw.org, 1
 mediweed.tk, 1
 medlineplus.gov, 1
 medo64.com, 1
 medovea.ru, 1
 medpics.com, 1
@@ -19019,17 +19022,17 @@ meusigno.com, 1
 mevo.xyz, 1
 mevs.cz, 1
 mexican.dating, 1
 mexicanjokes.net, 1
 mexicom.org, 1
 mexior.nl, 1
 meyeraviation.com, 1
 mf-fischer.de, 1
-mfgod.com, 0
+mfgod.com, 1
 mfiles.pl, 1
 mflodin.se, 1
 mfrsgb45.org, 1
 mft.global, 1
 mfxbe.de, 1
 mghiorzi.com.ar, 0
 mgknet.com, 1
 mgoessel.de, 1
@@ -19232,17 +19235,16 @@ minecraftforum.de, 1
 minecraftforum.ovh, 1
 minecrell.net, 1
 minei.me, 1
 minenash.com, 1
 minepay.net, 1
 minepic.org, 1
 minepod.fr, 1
 minerstat.com, 1
-minesouls.fr, 1
 minez-nightswatch.com, 0
 minf3-games.de, 1
 mingming.info, 1
 mingram.net, 1
 mingwah.ch, 1
 mingy.ddns.net, 1
 mingyueli.com, 1
 minhanossasenhora.com.br, 1
@@ -19746,17 +19748,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, 0
+mpreserver.com, 1
 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
@@ -20328,17 +20330,17 @@ nargileh.nl, 1
 narindal.ch, 1
 narko.space, 1
 narmos.ch, 1
 naro.se, 1
 narodsovety.ru, 1
 naroska.name, 1
 narrativasdigitais.pt, 1
 narrenverein-wolkenschieber.de, 1
-narthollis.net, 1
+narthollis.net, 0
 nasarawanewsonline.com, 1
 nasbi.pl, 1
 nasbnation.com, 1
 nascher.org, 0
 nasmocopati.com, 1
 nasrsolar.com, 1
 nassi.me, 1
 nastoletni.pl, 1
@@ -21232,17 +21234,16 @@ numero-aleatorio.com, 1
 numero1.ch, 1
 numerossanos.com.ar, 1
 numis.tech, 1
 numm.fr, 1
 numwave.nl, 1
 nunnenmacher.net, 1
 nunnun.jp, 1
 nunomoura.com, 1
-nup.pw, 1
 nupef.org.br, 1
 nuquery.com, 1
 nuriacamaras.com, 1
 nursejj.com, 1
 nurses.dating, 1
 nurture.be, 1
 nuryahan.com.br, 1
 nusku.biz, 1
@@ -21603,17 +21604,16 @@ onlinecasino.vlaanderen, 1
 onlinecasinobluebook.com, 1
 onlinecensorship.org, 1
 onlinecollegeessay.com, 1
 onlinefashion.it, 1
 onlinelegalmarketing.com, 1
 onlinelegalmedia.com, 1
 onlinelighting.com.au, 1
 onlinemarketingtraining.co.uk, 1
-onlinepokerspelen.be, 1
 onlinerollout.de, 1
 onlinestoreninjas.com, 1
 onlineth.com, 0
 onlinetravelmoney.co.uk, 1
 onlineweblearning.com, 1
 onlylebanon.net, 1
 onmaps.de, 1
 onmarketbookbuilds.com, 1
@@ -21695,17 +21695,16 @@ opennippon.com, 1
 opennippon.ru, 1
 openpictures.ch, 1
 openquery.com.au, 1
 openrainbow.com, 1
 openrainbow.net, 1
 openrainbow.org, 1
 openrealestate.co, 1
 openresty.com, 1
-openrtv.com, 1
 opensource-cms.nl, 1
 opensourcedmind.eu, 1
 openspa.webhop.info, 1
 openssl.org, 1
 openstem.com.au, 1
 openstreetmap.is, 1
 opentexon.com, 1
 opentrack.info, 1
@@ -21791,17 +21790,16 @@ organix.ma, 1
 orgasmium.com, 1
 orhideous.name, 1
 orians.eu, 1
 oribia.net, 1
 oricejoc.com, 0
 orientalart.nl, 1
 origami.to, 1
 origamika.com, 1
-originalmockups.com, 1
 originalniknihy.cz, 1
 orimex-mebel.ru, 1
 orion-universe.com, 1
 oriongames.eu, 1
 orkestar-krizevci.hr, 1
 orlandoprojects.com, 1
 orleika.io, 1
 orlives.de, 0
@@ -22447,17 +22445,16 @@ pengi.me, 1
 pengisatelier.net, 1
 pennergold.net, 1
 pennyapp.io, 1
 pennyparkerpaper.com, 1
 penrithapartments.com.au, 1
 pensacolawinterfest.org, 1
 pensador.com, 1
 pensador.info, 1
-pensanisso.com, 1
 pensioenfonds-ey.nl, 1
 pension-veldzigt.nl, 1
 pension-waldesruh.de, 1
 pensiunealido.ro, 1
 pentandra.com, 1
 pentest.blog, 1
 pentest.nl, 1
 pentesterlab.com, 1
@@ -22794,17 +22791,16 @@ pinterest.co.uk, 1
 pinterest.com, 1
 pinterest.de, 1
 pinterest.engineering, 1
 pinterest.ie, 1
 pinterest.info, 1
 pinterest.jp, 1
 pioche.ovh, 1
 pipenny.net, 1
-pips.rocks, 1
 piranil.com, 1
 pirate.trade, 1
 pirateahoy.eu, 1
 piratebayproxy.tf, 1
 piraten-basel.ch, 1
 piraten-bv-nord.de, 1
 piratepay.io, 1
 piratepay.ir, 1
@@ -23008,17 +23004,16 @@ pm-partners-management-dev.azurewebsites
 pm13.cz, 1
 pm13.org, 1
 pmalaty.com, 1
 pmarques.info, 1
 pmbc.org, 1
 pmbremer.de, 1
 pmconference.ch, 1
 pmctire.com, 1
-pmemanager.fr, 1
 pmessage.ch, 1
 pmg-offshore-company.com, 1
 pmg-purchase.com, 1
 pmg-purchase.net, 1
 pmklaassen.com, 1
 pmoreau.org, 1
 pmp-art.com, 1
 pmponline.de, 1
@@ -23085,16 +23080,17 @@ policedriver.com, 1
 polis.or.at, 1
 polis.to, 0
 polish.directory, 1
 polit.im, 1
 politeiaudesa.org, 1
 politic.org.ua, 1
 politik-bei-uns.de, 1
 polizeiwallis.ch, 1
+polkam.go.id, 0
 pollet-ghijs.be, 1
 pollet-ghys.be, 1
 polletmera.com, 1
 pollingplace.uk, 1
 pollpodium.nl, 1
 polsport.live, 1
 poly-fast.com, 1
 polyfill.io, 1
@@ -23340,17 +23336,16 @@ preparedcapital.com, 1
 preparetheword.com, 0
 presbee.com, 1
 prescotonline.co.uk, 1
 prescriptionrex.com, 1
 present-m.com, 1
 presentesdegrife.com.br, 1
 president.bg, 1
 prespanok.sk, 1
-press-presse.ca, 1
 presscenter.jp, 1
 presses.ch, 1
 pressography.org, 1
 pressrush.com, 1
 pressureradio.com, 1
 prestburyscouts.org.uk, 1
 prestige-car-location.ch, 1
 prestige-portal.com, 1
@@ -23848,17 +23843,17 @@ qlrace.com, 0
 qm-marzahnnordwest.de, 1
 qnatek.org, 1
 qochealth.com, 1
 qoohoot.com, 1
 qoqo.us, 1
 qotw.net, 1
 qq-navi.com, 1
 qqj.net, 1
-qqvips.com, 1
+qqvips.com, 0
 qrcontagion.com, 1
 qrforex.com, 1
 qrlfinancial.com, 1
 qrpth.eu, 1
 qscloud.de, 1
 qtl.me, 1
 qto.com, 1
 qto.net, 1
@@ -24306,17 +24301,16 @@ rediske.me, 1
 redit.com, 1
 redivis.com, 1
 redizoo.com, 1
 redletter.link, 1
 redlink.de, 1
 redneragenturen.org, 1
 rednoseday.com, 1
 rednsx.org, 1
-redoakmedia.net, 1
 redperegrine.com, 1
 redprice.by, 1
 redshield.co, 1
 redshiftcybersecurity.co.za, 1
 redshiftlabs.com.au, 1
 redshoeswalking.net, 1
 redsicom.com, 1
 redstickfestival.org, 1
@@ -25826,17 +25820,16 @@ sech.me, 1
 secitem.at, 1
 secitem.de, 1
 secitem.eu, 1
 secnews.gr, 1
 secomo.org, 1
 seconfig.sytes.net, 1
 secpatrol.de, 1
 secretar.is, 1
-secretnation.net, 1
 secretofanah.com, 1
 secretpanties.com, 1
 secretsanta.fr, 1
 secretserveronline.com, 1
 secretum.tech, 1
 sectelligence.nl, 1
 sectest.ml, 1
 sectio-aurea.org, 1
@@ -25949,17 +25942,16 @@ selectel.ru, 1
 selectorders.com, 1
 selegiline.com, 1
 selent.me, 1
 seleondar.ru, 1
 self-evident.org, 1
 self-signed.com, 1
 self.nu, 1
 selfassess.govt.nz, 1
-selfdefenserx.com, 1
 selfdestruct.net, 1
 selfhosters.com, 1
 selfici.com, 1
 selfici.cz, 1
 selfishness.com, 1
 selfloath.in, 1
 selfmade4u.de, 1
 selfserverx.com, 0
@@ -26302,16 +26294,17 @@ shipard.com, 1
 shipard.cz, 1
 shipcloud.io, 1
 shirakaba-cc.com, 1
 shiroki-k.net, 1
 shirt2go.shop, 1
 shirtsofholland.com, 1
 shiseki.top, 1
 shishamania.de, 1
+shishkin.us, 1
 shishlik.net, 1
 shitagi-shop.com, 1
 shitbeast.institute, 1
 shitmybradsays.com, 1
 shitposts.se, 1
 shitproductions.org, 1
 shitsta.in, 1
 shk.im, 1
@@ -26910,19 +26903,19 @@ smiledirectsales.com, 1
 smilessoftplay.co.uk, 1
 smime.io, 1
 smimea.info, 1
 smipty.cn, 1
 smipty.com, 1
 smit.com.ua, 1
 smith.is, 1
 smithandcanova.co.uk, 1
+smkw.com, 0
 sml.lc, 1
 smm.im, 1
-smol.cat, 1
 smoo.st, 1
 smoothgesturesplus.com, 1
 smoothics.at, 1
 smoothics.com, 1
 smoothics.eu, 1
 smoothics.mobi, 1
 smoothics.net, 1
 smorgasblog.ie, 1
@@ -28649,17 +28642,16 @@ teleogistic.net, 1
 telepass.me, 1
 telling.xyz, 1
 telly.site, 1
 tellygames.com, 1
 teloo.pl, 1
 telos-analytics.com, 1
 telugu4u.net, 1
 tem.li, 1
-temasa.net, 1
 temizmama.com, 1
 temp.pm, 1
 tempdomain.ml, 1
 template-parks.com, 1
 templateinvaders.com, 1
 temptraining.ru, 0
 tempus-aquilae.de, 1
 tenable.com.au, 1
@@ -29100,16 +29092,17 @@ thierrybasset.ch, 1
 thierryhayoz.ch, 1
 thijsslop.nl, 1
 thijsvanderveen.net, 1
 thingies.site, 1
 thinkcash.nl, 1
 thinkheaddesign.com, 1
 thinkindifferent.net, 1
 thinkingandcomputing.com, 1
+thinkingplanet.net, 1
 thinklikeanentrepreneur.com, 1
 thinkmarketing.ca, 1
 thinkquality.nl, 1
 thinkrealty.com, 1
 thinkswap.com, 1
 thinktux.net, 1
 thirdworld.moe, 1
 thiry-automobiles.net, 1
@@ -29299,16 +29292,17 @@ 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
@@ -29350,16 +29344,17 @@ tkanemoto.com, 1
 tkat.ch, 1
 tkgpm.com, 1
 tkjg.fi, 1
 tkn.me, 1
 tkn.tokyo, 1
 tkts.cl, 1
 tkusano.jp, 1
 tkw01536.de, 1
+tlach.cz, 1
 tlca.org, 1
 tlcnet.info, 1
 tlehseasyads.com, 1
 tlo.xyz, 1
 tloxygen.com, 1
 tls-proxy.de, 1
 tls.builders, 1
 tls.care, 1
@@ -29432,16 +29427,17 @@ toccoig.com, 1
 tochi-urikata.net, 1
 todaciencia.com, 1
 todamateria.com.br, 1
 todaymeow.com, 1
 todocracy.com, 1
 todoescine.com, 1
 todoist.com, 1
 todon.fr, 1
+todoscomciro.com, 1
 todosrv.com, 1
 toeglhofer.at, 1
 toeightycountries.com, 1
 tofa-koeln.de, 1
 tofe.io, 1
 tofilmhub.com, 1
 togech.jp, 1
 togetter.com, 1
@@ -29720,16 +29716,17 @@ tracetracker.no, 1
 tracfinancialservices.com, 1
 tracinsurance.com, 1
 track.plus, 1
 trackchair.com, 1
 trackdays4fun.com, 1
 trackdomains.com, 1
 trackersimulator.org, 1
 trackeye.dk, 1
+trackmeet.io, 1
 trackrecordpro.co.uk, 1
 tractorpumps.com, 1
 trade.gov.uk, 1
 tradedesk.co.za, 1
 tradeinvent.co.uk, 1
 trademan.ky, 1
 traderjoe-cloud.de, 1
 tradietrove.com.au, 1
@@ -30474,16 +30471,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
@@ -31177,17 +31175,16 @@ voter-info.uk, 1
 votercircle.com, 1
 voterstartingpoint.uk, 1
 votocek.cz, 1
 votockova.cz, 1
 votoot.com, 1
 votre-site-internet.ch, 1
 votresiteweb.ch, 1
 vow.vn, 1
-vowsy.club, 1
 voxfilmeonline.net, 1
 voxml.com, 1
 voxographe.com, 0
 voyage-martinique.fr, 1
 voyageforum.com, 1
 voyagesaufildespages.be, 1
 voyageschine.com, 1
 voyagesdetective.fr, 1
@@ -31387,16 +31384,17 @@ 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
@@ -32050,17 +32048,17 @@ wm-talk.net, 1
 wmaccess.com, 1
 wmawri.com, 1
 wmfusercontent.org, 1
 wmkowa.de, 1
 wmustore.com, 1
 wnmed.com.au, 1
 wnu.com, 1
 wo-ist-elvira.net, 1
-wo2forum.nl, 0
+wo2forum.nl, 1
 wobble.ninja, 1
 wobblywotnotz.co.uk, 1
 wochennummern.de, 1
 wod-stavby.cz, 1
 wodboss.com, 1
 wodinaz.com, 1
 wodka-division.de, 1
 woelkchen.me, 1
@@ -33087,17 +33085,16 @@ zandcell.com, 1
 zanthra.com, 1
 zaoext.com, 1
 zapier.com, 1
 zappbuildapps.com, 0
 zaratan.fr, 1
 zargaripour.com, 1
 zarmarket.org, 1
 zarpo.com.br, 1
-zary.me, 1
 zaufanatrzeciastrona.pl, 1
 zavec.com.ec, 1
 zavetaji.lv, 1
 zawo-electric.de, 1
 zbchen.com, 1
 zberger.com, 1
 zbetcheck.in, 1
 zbp.at, 0
@@ -33249,17 +33246,16 @@ zlima12.com, 1
 zmk.fr, 1
 znation.nl, 1
 zning.net.cn, 1
 zobraz.cz, 1
 zockenbiszumumfallen.de, 1
 zodiacohouses.com, 1
 zoeller.me, 1
 zohar.shop, 1
-zohar.wang, 1
 zoigl.club, 1
 zojadravai.com, 1
 zoki.art, 1
 zokster.net, 1
 zollihood.ch, 1
 zolokar.xyz, 1
 zombiesecured.com, 1
 zomerschoen.nl, 1
--- a/services/sync/Weave.js
+++ b/services/sync/Weave.js
@@ -9,18 +9,17 @@ const Cu = Components.utils;
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "FileUtils",
                                   "resource://gre/modules/FileUtils.jsm");
 XPCOMUtils.defineLazyGetter(this, "Utils", () => {
   return Cu.import("resource://services-sync/util.js", {}).Utils;
 });
 
-const SYNC_PREFS_BRANCH = "services.sync.";
-
+XPCOMUtils.defineLazyPreferenceGetter(this, "syncUsername", "services.sync.username");
 
 /**
  * Sync's XPCOM service.
  *
  * It is named "Weave" for historical reasons.
  *
  * It's worth noting how Sync is lazily loaded. We register a timer that
  * loads Sync a few seconds after app startup. This is so Sync does not
@@ -123,18 +122,17 @@ WeaveService.prototype = {
    * Whether Sync appears to be enabled.
    *
    * This returns true if we have an associated FxA account
    *
    * It does *not* perform a robust check to see if the client is working.
    * For that, you'll want to check Weave.Status.checkSetup().
    */
   get enabled() {
-    let prefs = Services.prefs.getBranch(SYNC_PREFS_BRANCH);
-    return prefs.prefHasUserValue("username");
+    return !!syncUsername;
   }
 };
 
 function AboutWeaveLog() {}
 AboutWeaveLog.prototype = {
   classID: Components.ID("{d28f8a0b-95da-48f4-b712-caf37097be41}"),
 
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutModule,
--- a/services/sync/tests/tps/all_tests.json
+++ b/services/sync/tests/tps/all_tests.json
@@ -16,17 +16,16 @@
     "test_bug575423.js",
     "test_bug546807.js",
     "test_history_collision.js",
     "test_privbrw_passwords.js",
     "test_privbrw_tabs.js",
     "test_bookmarks_in_same_named_folder.js",
     "test_client_wipe.js",
     "test_special_tabs.js",
-    "test_addon_sanity.js",
     "test_addon_restartless_xpi.js",
     "test_addon_nonrestartless_xpi.js",
     "test_addon_reconciling.js",
     "test_addon_wipe.js",
     "test_existing_bookmarks.js"
   ]
 }
 
--- a/services/sync/tests/tps/test_addon_nonrestartless_xpi.js
+++ b/services/sync/tests/tps/test_addon_nonrestartless_xpi.js
@@ -25,29 +25,33 @@ var phases = {
   "phase16": "profile2"
 };
 
 const id = "unsigned-xpi@tests.mozilla.org";
 
 Phase("phase01", [
   [Addons.verifyNot, [id]],
   [Addons.install, [id]],
-  [Sync]
+  [Sync],
+  [Addons.skipValidation] // Validation disabled due to bug 1427835
 ]);
 Phase("phase02", [
   [Addons.verify, [id], STATE_ENABLED],
-  [Sync]
+  [Sync],
+  [Addons.skipValidation] // Validation disabled due to bug 1427835
 ]);
 Phase("phase03", [
   [Addons.verifyNot, [id]],
-  [Sync]
+  [Sync],
+  [Addons.skipValidation] // Validation disabled due to bug 1427835
 ]);
 Phase("phase04", [
   [Addons.verify, [id], STATE_ENABLED],
-  [Sync]
+  [Sync],
+  [Addons.skipValidation] // Validation disabled due to bug 1427835
 ]);
 
 // Now we disable the add-on
 Phase("phase05", [
   [EnsureTracking],
   [Addons.setEnabled, [id], STATE_DISABLED],
   [Sync],
   [Addons.skipValidation] // Validation disabled due to bug 1380472
@@ -67,43 +71,51 @@ Phase("phase08", [
   [Sync],
   [Addons.skipValidation] // Validation disabled due to bug 1380472
 ]);
 
 // Now we re-enable it again.
 Phase("phase09", [
   [EnsureTracking],
   [Addons.setEnabled, [id], STATE_ENABLED],
-  [Sync]
+  [Sync],
+  [Addons.skipValidation] // Validation disabled due to bug 1427835
 ]);
 Phase("phase10", [
   [Addons.verify, [id], STATE_ENABLED],
-  [Sync]
+  [Sync],
+  [Addons.skipValidation] // Validation disabled due to bug 1427835
 ]);
 Phase("phase11", [
   [Addons.verify, [id], STATE_DISABLED],
-  [Sync]
+  [Sync],
+  [Addons.skipValidation] // Validation disabled due to bug 1427835
 ]);
 Phase("phase12", [
   [Addons.verify, [id], STATE_ENABLED],
-  [Sync]
+  [Sync],
+  [Addons.skipValidation] // Validation disabled due to bug 1427835
 ]);
 
 // And we uninstall it
 
 Phase("phase13", [
   [EnsureTracking],
   [Addons.verify, [id], STATE_ENABLED],
   [Addons.uninstall, [id]],
-  [Sync]
+  [Sync],
+  [Addons.skipValidation] // Validation disabled due to bug 1427835
 ]);
 Phase("phase14", [
   [Addons.verifyNot, [id]],
-  [Sync]
+  [Sync],
+  [Addons.skipValidation] // Validation disabled due to bug 1427835
 ]);
 Phase("phase15", [
   [Addons.verify, [id], STATE_ENABLED],
-  [Sync]
+  [Sync],
+  [Addons.skipValidation] // Validation disabled due to bug 1427835
 ]);
 Phase("phase16", [
   [Addons.verifyNot, [id]],
-  [Sync]
+  [Sync],
+  [Addons.skipValidation] // Validation disabled due to bug 1427835
 ]);
deleted file mode 100644
--- a/services/sync/tests/tps/test_addon_sanity.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/*
- * The list of phases mapped to their corresponding profiles.  The object
- * here must be in strict JSON format, as it will get parsed by the Python
- * testrunner (no single quotes, extra comma's, etc).
- */
-
-EnableEngines(["addons"]);
-
-var phases = { "phase1": "profile1",
-               "phase2": "profile1" };
-
-const id = "unsigned-xpi@tests.mozilla.org";
-
-Phase("phase1", [
-  [Addons.install, [id]],
-  // Non-restartless add-on shouldn't be found after install.
-  [Addons.verifyNot, [id]],
-
-  // But it should be marked for Sync.
-  [Sync]
-]);
-
-Phase("phase2", [
-  // Add-on should be present after restart
-  [Addons.verify, [id], STATE_ENABLED],
-  [Sync] // Sync to ensure everything is initialized enough for the addon validator to run
-]);
--- a/servo/.taskcluster.yml
+++ b/servo/.taskcluster.yml
@@ -6,29 +6,32 @@ metadata:
     and embedded use.
   owner: '{{ event.head.user.email }}'
   source: '{{ event.head.repo.url }}'
 tasks:
   - provisionerId: '{{ taskcluster.docker.provisionerId }}'
     workerType: '{{ taskcluster.docker.workerType }}'
     extra:
       github:
-        events: []
+        events:
+          - pull_request.opened
+          - pull_request.reopened
+          - pull_request.synchronize
     payload:
       maxRunTime: 3600
-      image: servobrowser/servo-linux-dev
+      image: 'servobrowser/servo-linux-dev:servo-linux-build-deps-2017-06-30'
       command:
         - /bin/bash
         - '--login'
         - '-c'
         - '-x'
         - >-
           git clone {{event.head.repo.url}} servo &&
           cd servo &&
           git config advice.detachedHead false &&
           git checkout {{event.head.sha}} &&
           etc/ci/taskcluster-test.sh
     metadata:
       name: linux-tests
       description: Run Linux tests.
       owner: '{{ event.head.user.email }}'
       source: '{{ event.head.repo.url }}'
-
+allowPullRequests: public
--- a/servo/components/gfx/platform/freetype/android/font_list.rs
+++ b/servo/components/gfx/platform/freetype/android/font_list.rs
@@ -198,17 +198,17 @@ impl FontList {
             aliases: aliases
         })
     }
 
     // Fonts expected to exist in Android devices.
     // Only used in the unlikely case where no font xml mapping files are found.
     fn fallback_font_families() -> Vec<FontFamily> {
         let alternatives = [
-            ("san-serif", "Roboto-Regular.ttf"),
+            ("sans-serif", "Roboto-Regular.ttf"),
             ("Droid Sans", "DroidSans.ttf"),
         ];
 
         alternatives.iter().filter(|item| {
             Path::new(&Self::font_absolute_path(item.1)).exists()
         }).map(|item| {
             FontFamily {
                 name: item.0.into(),
--- a/servo/components/style/properties/gecko.mako.rs
+++ b/servo/components/style/properties/gecko.mako.rs
@@ -2943,18 +2943,18 @@ fn static_assert() {
 <%def name="impl_copy_animation_or_transition_value(type, ident, gecko_ffi_name)">
     #[allow(non_snake_case)]
     pub fn copy_${type}_${ident}_from(&mut self, other: &Self) {
         self.gecko.m${type.capitalize()}s.ensure_len(other.gecko.m${type.capitalize()}s.len());
 
         let count = other.gecko.m${type.capitalize()}${gecko_ffi_name}Count;
         self.gecko.m${type.capitalize()}${gecko_ffi_name}Count = count;
 
-        let iter = self.gecko.m${type.capitalize()}s.iter_mut().zip(
-            other.gecko.m${type.capitalize()}s.iter().take(count as usize).cycle()
+        let iter = self.gecko.m${type.capitalize()}s.iter_mut().take(count as usize).zip(
+            other.gecko.m${type.capitalize()}s.iter()
         );
 
         for (ours, others) in iter {
             ours.m${gecko_ffi_name} = others.m${gecko_ffi_name};
         }
     }
 
     #[allow(non_snake_case)]
@@ -2977,17 +2977,17 @@ fn static_assert() {
               I::IntoIter: ExactSizeIterator + Clone
     {
         let v = v.into_iter();
         debug_assert!(v.len() != 0);
         let input_len = v.len();
         self.gecko.m${type.capitalize()}s.ensure_len(input_len);
 
         self.gecko.m${type.capitalize()}${gecko_ffi_name}Count = input_len as u32;
-        for (gecko, servo) in self.gecko.m${type.capitalize()}s.iter_mut().zip(v.cycle()) {
+        for (gecko, servo) in self.gecko.m${type.capitalize()}s.iter_mut().take(input_len as usize).zip(v) {
             gecko.m${gecko_ffi_name} = servo.seconds() * 1000.;
         }
     }
     #[allow(non_snake_case)]
     pub fn ${type}_${ident}_at(&self, index: usize)
         -> longhands::${type}_${ident}::computed_value::SingleComputedValue {
         use values::computed::Time;
         Time::from_seconds(self.gecko.m${type.capitalize()}s[index].m${gecko_ffi_name} / 1000.)
@@ -3002,17 +3002,17 @@ fn static_assert() {
               I::IntoIter: ExactSizeIterator + Clone
     {
         let v = v.into_iter();
         debug_assert!(v.len() != 0);
         let input_len = v.len();
         self.gecko.m${type.capitalize()}s.ensure_len(input_len);
 
         self.gecko.m${type.capitalize()}TimingFunctionCount = input_len as u32;
-        for (gecko, servo) in self.gecko.m${type.capitalize()}s.iter_mut().zip(v.cycle()) {
+        for (gecko, servo) in self.gecko.m${type.capitalize()}s.iter_mut().take(input_len as usize).zip(v) {
             gecko.mTimingFunction = servo.into();
         }
     }
     ${impl_animation_or_transition_count(type, 'timing_function', 'TimingFunction')}
     ${impl_copy_animation_or_transition_value(type, 'timing_function', 'TimingFunction')}
     pub fn ${type}_timing_function_at(&self, index: usize)
         -> longhands::${type}_timing_function::computed_value::SingleComputedValue {
         self.gecko.m${type.capitalize()}s[index].mTimingFunction.into()
@@ -3059,17 +3059,17 @@ fn static_assert() {
         let v = v.into_iter();
 
         debug_assert!(v.len() != 0);
         let input_len = v.len();
         self.gecko.mAnimations.ensure_len(input_len);
 
         self.gecko.mAnimation${gecko_ffi_name}Count = input_len as u32;
 
-        for (gecko, servo) in self.gecko.mAnimations.iter_mut().zip(v.cycle()) {
+        for (gecko, servo) in self.gecko.mAnimations.iter_mut().take(input_len as usize).zip(v) {
             let result = match servo {
                 % for value in keyword.gecko_values():
                     Keyword::${to_camel_case(value)} =>
                         structs::${keyword.gecko_constant(value)} ${keyword.maybe_cast(cast_type)},
                 % endfor
             };
             gecko.m${gecko_ffi_name} = result;
         }
@@ -3293,17 +3293,18 @@ fn static_assert() {
     ${impl_css_url('_moz_binding', 'mBinding')}
 
     ${impl_transition_time_value('delay', 'Delay')}
     ${impl_transition_time_value('duration', 'Duration')}
     ${impl_transition_timing_function()}
 
     pub fn transition_combined_duration_at(&self, index: usize) -> f32 {
         // https://drafts.csswg.org/css-transitions/#transition-combined-duration
-        self.gecko.mTransitions[index].mDuration.max(0.0) + self.gecko.mTransitions[index].mDelay
+        self.gecko.mTransitions[index % self.gecko.mTransitionDurationCount as usize].mDuration.max(0.0)
+            + self.gecko.mTransitions[index % self.gecko.mTransitionDelayCount as usize].mDelay
     }
 
     pub fn set_transition_property<I>(&mut self, v: I)
         where I: IntoIterator<Item = longhands::transition_property::computed_value::single_value::T>,
               I::IntoIter: ExactSizeIterator
     {
         use gecko_bindings::structs::nsCSSPropertyID::eCSSPropertyExtra_no_properties;
 
@@ -3327,17 +3328,17 @@ fn static_assert() {
         }
     }
 
     /// Returns whether there are any transitions specified.
     pub fn specifies_transitions(&self) -> bool {
         use gecko_bindings::structs::nsCSSPropertyID::eCSSPropertyExtra_all_properties;
         if self.gecko.mTransitionPropertyCount == 1 &&
             self.gecko.mTransitions[0].mProperty == eCSSPropertyExtra_all_properties &&
-            self.gecko.mTransitions[0].mDuration.max(0.0) + self.gecko.mTransitions[0].mDelay <= 0.0f32 {
+            self.transition_combined_duration_at(0) <= 0.0f32 {
             return false;
         }
 
         self.gecko.mTransitionPropertyCount > 0
     }
 
     pub fn transition_property_at(&self, index: usize)
         -> longhands::transition_property::computed_value::SingleComputedValue {
@@ -3384,17 +3385,25 @@ fn static_assert() {
 
     pub fn reset_transition_property(&mut self, other: &Self) {
         self.copy_transition_property_from(other)
     }
 
     ${impl_transition_count('property', 'Property')}
 
     pub fn animations_equals(&self, other: &Self) -> bool {
-        unsafe { bindings::Gecko_StyleAnimationsEquals(&self.gecko.mAnimations, &other.gecko.mAnimations) }
+        return self.gecko.mAnimationNameCount == other.gecko.mAnimationNameCount
+            && self.gecko.mAnimationDelayCount == other.gecko.mAnimationDelayCount
+            && self.gecko.mAnimationDirectionCount == other.gecko.mAnimationDirectionCount
+            && self.gecko.mAnimationDurationCount == other.gecko.mAnimationDurationCount
+            && self.gecko.mAnimationFillModeCount == other.gecko.mAnimationFillModeCount
+            && self.gecko.mAnimationIterationCountCount == other.gecko.mAnimationIterationCountCount
+            && self.gecko.mAnimationPlayStateCount == other.gecko.mAnimationPlayStateCount
+            && self.gecko.mAnimationTimingFunctionCount == other.gecko.mAnimationTimingFunctionCount
+            && unsafe { bindings::Gecko_StyleAnimationsEquals(&self.gecko.mAnimations, &other.gecko.mAnimations) }
     }
 
     pub fn set_animation_name<I>(&mut self, v: I)
         where I: IntoIterator<Item = longhands::animation_name::computed_value::single_value::T>,
               I::IntoIter: ExactSizeIterator
     {
         let v = v.into_iter();
         debug_assert!(v.len() != 0);
@@ -3451,17 +3460,17 @@ fn static_assert() {
 
         let v = v.into_iter();
 
         debug_assert_ne!(v.len(), 0);
         let input_len = v.len();
         self.gecko.mAnimations.ensure_len(input_len);
 
         self.gecko.mAnimationIterationCountCount = input_len as u32;
-        for (gecko, servo) in self.gecko.mAnimations.iter_mut().zip(v.cycle()) {
+        for (gecko, servo) in self.gecko.mAnimations.iter_mut().take(input_len as usize).zip(v) {
             match servo {
                 AnimationIterationCount::Number(n) => gecko.mIterationCount = n,
                 AnimationIterationCount::Infinite => gecko.mIterationCount = f32::INFINITY,
             }
         }
     }
 
     pub fn animation_iteration_count_at(
--- a/servo/components/style/properties/properties.mako.rs
+++ b/servo/components/style/properties/properties.mako.rs
@@ -682,24 +682,16 @@ impl LonghandId {
     /// So we classify properties into "early" and "other", such that the only
     /// dependencies can be from "other" to "early".
     ///
     /// Unfortunately, it’s not easy to check that this classification is
     /// correct.
     fn is_early_property(&self) -> bool {
         matches!(*self,
             % if product == 'gecko':
-            // We need to know the number of animations / transition-properties
-            // before setting the rest of the related longhands, see #15923.
-            //
-            // FIXME(emilio): Looks to me that we could just do this in Gecko
-            // instead of making them early properties. Indeed, the spec
-            // mentions _used_ values, not computed values, so this looks wrong.
-            LonghandId::AnimationName |
-            LonghandId::TransitionProperty |
 
             // Needed to properly compute the writing mode, to resolve logical
             // properties, and similar stuff. In this block instead of along
             // `WritingMode` and `Direction` just for convenience, since it's
             // Gecko-only (for now at least).
             //
             // see WritingMode::new.
             LonghandId::TextOrientation |
--- a/servo/components/style/values/specified/box.rs
+++ b/servo/components/style/values/specified/box.rs
@@ -548,28 +548,18 @@ impl Parse for Contain {
         input: &mut Parser<'i, 't>
     ) -> Result<Contain, ParseError<'i>> {
         let mut result = Contain::empty();
         while let Ok(name) = input.try(|i| i.expect_ident_cloned()) {
             let flag = match_ignore_ascii_case! { &name,
                 "layout" => Some(Contain::LAYOUT),
                 "style" => Some(Contain::STYLE),
                 "paint" => Some(Contain::PAINT),
-                "strict" => {
-                    if result.is_empty() {
-                        return Ok(Contain::STRICT | Contain::STRICT_BITS)
-                    }
-                    None
-                },
-                "none" => {
-                    if result.is_empty() {
-                        return Ok(result)
-                    }
-                    None
-                },
+                "strict" if result.is_empty() => return Ok(Contain::STRICT | Contain::STRICT_BITS),
+                "none" if result.is_empty() => return Ok(result),
                 _ => None
             };
 
             let flag = match flag {
                 Some(flag) if !result.contains(flag) => flag,
                 _ => return Err(input.new_custom_error(SelectorParseErrorKind::UnexpectedIdent(name)))
             };
             result.insert(flag);
--- a/taskcluster/ci/config.yml
+++ b/taskcluster/ci/config.yml
@@ -36,16 +36,17 @@ treeherder:
         'tc-L10n-Rpk': 'Localized Repackaged Repacks executed by Taskcluster'
         'tc-BM-L10n': 'Beetmover for locales executed by Taskcluster'
         'tc-BMR-L10n': 'Beetmover repackages for locales executed by Taskcluster'
         'c-Up': 'Balrog submission of complete updates'
         'tc-cs': 'Checksum signing executed by Taskcluster'
         'tc-rs': 'Repackage signing executed by Taskcluster'
         'tc-BMcs': 'Beetmover checksums, executed by Taskcluster'
         'Aries': 'Aries Device Image'
+        'Deb7': 'Packages for Debian 7'
         'Nexus 5-L': 'Nexus 5-L Device Image'
         'I': 'Docker Image Builds'
         'TL': 'Toolchain builds for Linux 64-bits'
         'TM': 'Toolchain builds for OSX'
         'TMW': 'Toolchain builds for Windows MinGW'
         'TW32': 'Toolchain builds for Windows 32-bits'
         'TW64': 'Toolchain builds for Windows 64-bits'
         'Searchfox': 'Searchfox builds'
--- a/taskcluster/ci/docker-image/kind.yml
+++ b/taskcluster/ci/docker-image/kind.yml
@@ -1,30 +1,37 @@
 # 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/.
 
 loader: taskgraph.loader.transform:loader
 
+kind-dependencies:
+  - packages
+
 transforms:
   - taskgraph.transforms.docker_image:transforms
   - taskgraph.transforms.task:transforms
 
 # make a task for each docker-image we might want.  For the moment, since we
 # write artifacts for each, these are whitelisted, but ideally that will change
 # (to use subdirectory clones of the proper directory), at which point we can
 # generate tasks for every docker image in the directory, secure in the
 # knowledge that unnecessary images will be omitted from the target task graph
 jobs:
   desktop1604-test:
     symbol: I(dt16t)
   desktop-build:
     symbol: I(db)
   valgrind-build:
     symbol: I(vb)
+  toolchain-build:
+    symbol: I(toolchain)
+    packages:
+      - deb7-python
   lint:
     symbol: I(lnt)
   android-build:
     symbol: I(agb)
   index-task:
     symbol: I(idx)
   funsize-update-generator:
     symbol: I(pg)
new file mode 100644
--- /dev/null
+++ b/taskcluster/ci/packages/kind.yml
@@ -0,0 +1,28 @@
+# 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/.
+
+loader: taskgraph.loader.transform:loader
+
+transforms:
+  - taskgraph.transforms.try_job:transforms
+  - taskgraph.transforms.job:transforms
+  - taskgraph.transforms.task:transforms
+
+jobs:
+  deb7-python:
+    description: "Python backport for Debian wheezy"
+    treeherder:
+      kind: build
+      platform: packages/opt
+      symbol: Deb7(python)
+      tier: 1
+    worker-type: aws-provisioner-v1/gecko-{level}-b-linux
+    worker:
+      max-run-time: 1800
+    run:
+      using: debian-package
+      dsc: "http://snapshot.debian.org/archive/debian/20160813T164221Z/pool/main/p/python2.7/python2.7_2.7.9-2+deb8u1.dsc"
+      dsc-sha256: 274c293e7156edf59cb9f0a9d8cedcd94fa801df35adf39b8a9f3d776a250ead
+      patch: python-wheezy.diff
+      pre-build-command: debian/rules control-file
new file mode 100644
--- /dev/null
+++ b/taskcluster/docker/toolchain-build/Dockerfile
@@ -0,0 +1,102 @@
+FROM debian:wheezy-20171210
+MAINTAINER Mike Hommey <mhommey@mozilla.com>
+
+### Add worker user and setup its workspace.
+RUN mkdir /builds && \
+    groupadd -g 500 worker && \
+    useradd -u 500 -g 500 -d /builds/worker -s /bin/bash -m worker && \
+    mkdir -p /builds/worker/workspace && \
+    chown -R worker:worker /builds
+
+# Declare default working folder
+WORKDIR /builds/worker
+
+VOLUME /builds/worker/checkouts
+VOLUME /builds/worker/workspace
+VOLUME /builds/worker/tooltool-cache
+
+# Set variable normally configured at login, by the shells parent process, these
+# are taken from GNU su manual
+ENV HOME=/builds/worker \
+    SHELL=/bin/bash \
+    USER=worker \
+    LOGNAME=worker \
+    HOSTNAME=taskcluster-worker \
+    DEBIAN_FRONTEND=noninteractive
+
+# Set a default command useful for debugging
+CMD ["/bin/bash", "--login"]
+
+# Set apt sources list to a snapshot.
+RUN for s in debian_wheezy debian_wheezy-updates debian_wheezy-backports debian-security_wheezy/updates; do \
+      echo "deb http://snapshot.debian.org/archive/${s%_*}/20171210T214726Z/ ${s#*_} main"; \
+    done > /etc/apt/sources.list
+
+RUN apt-get -o Acquire::Check-Valid-Until=false update -q && \
+    apt-get install -yyq --no-install-recommends \
+      apt-transport-https \
+      ca-certificates
+
+# %ARG DOCKER_IMAGE_PACKAGES
+RUN for task in $DOCKER_IMAGE_PACKAGES; do \
+      echo "deb [trusted=yes] https://queue.taskcluster.net/v1/task/$task/runs/0/artifacts/public/build/ debian/" >> /etc/apt/sources.list; \
+    done
+
+RUN dpkg --add-architecture i386
+
+RUN apt-get -o Acquire::Check-Valid-Until=false update -q && \
+    apt-get install -yyq --no-install-recommends \
+      autoconf \
+      automake \
+      bison \
+      build-essential \
+      curl \
+      flex \
+      gawk \
+      gcc-multilib \
+      git \
+      gnupg \
+      libtool \
+      make \
+      p7zip-full \
+      procps \
+      pxz/wheezy-backports \
+      python-dev \
+      python-pip \
+      python-setuptools \
+      python-virtualenv \
+      subversion \
+      tar \
+      unzip \
+      uuid \
+      wget \
+      xz-utils \
+      zip \
+    && \
+    apt-get clean
+
+# %include python/mozbuild/mozbuild/action/tooltool.py
+COPY topsrcdir/python/mozbuild/mozbuild/action/tooltool.py /setup/tooltool.py
+
+# %include testing/mozharness/external_tools/robustcheckout.py
+COPY topsrcdir/testing/mozharness/external_tools/robustcheckout.py /usr/local/mercurial/robustcheckout.py
+
+# %include taskcluster/docker/recipes/common.sh
+COPY topsrcdir/taskcluster/docker/recipes/common.sh /setup/common.sh
+
+# %include taskcluster/docker/recipes/install-mercurial.sh
+COPY topsrcdir/taskcluster/docker/recipes/install-mercurial.sh /setup/install-mercurial.sh
+
+# %include taskcluster/docker/recipes/debian-build-system-setup.sh
+COPY topsrcdir/taskcluster/docker/recipes/debian-build-system-setup.sh /setup/system-setup.sh
+
+RUN bash /setup/system-setup.sh
+
+# Add pip configuration, among other things.
+# %include taskcluster/docker/recipes/dot-config
+COPY topsrcdir/taskcluster/docker/recipes/dot-config /builds/worker/.config
+
+# %include taskcluster/docker/recipes/run-task
+COPY topsrcdir/taskcluster/docker/recipes/run-task /builds/worker/bin/run-task
+
+RUN chown -R worker:worker /builds/worker/bin && chmod 755 /builds/worker/bin/*
--- a/taskcluster/docs/kinds.rst
+++ b/taskcluster/docs/kinds.rst
@@ -343,8 +343,12 @@ Dummy tasks to consolidate balrog depend
 
 post-beetmover-dummy
 --------------------
 Dummy tasks to consolidate beetmover dependencies to avoid taskcluster limits on number of dependencies per task.
 
 post-beetmover-checksums-dummy
 ------------------------------
 Dummy tasks to consolidate beetmover-checksums dependencies to avoid taskcluster limits on number of dependencies per task.
+
+packages
+--------
+Tasks used to build packages for use in docker images.
--- a/taskcluster/docs/transforms.rst
+++ b/taskcluster/docs/transforms.rst
@@ -139,16 +139,17 @@ following ``run-using`` are available
 
   * ``buildbot``
   * ``hazard``
   * ``mach``
   * ``mozharness``
   * ``mozharness-test``
   * ``run-task``
   * ``spidermonkey`` or ``spidermonkey-package`` or ``spidermonkey-mozjs-crate`` or ``spidermonkey-rust-bindings``
+  * ``debian-package``
   * ``toolchain-script``
 
 
 Task Descriptions
 -----------------
 
 Every kind needs to create tasks, and all of those tasks have some things in
 common.  They all run on one of a small set of worker implementations, each
--- a/taskcluster/taskgraph/transforms/docker_image.py
+++ b/taskcluster/taskgraph/transforms/docker_image.py
@@ -36,34 +36,60 @@ docker_image_schema = Schema({
     Optional('job-from'): basestring,
 
     # Arguments to use for the Dockerfile.
     Optional('args'): {basestring: basestring},
 
     # Name of the docker image definition under taskcluster/docker, when
     # different from the docker image name.
     Optional('definition'): basestring,
+
+    # List of package tasks this docker image depends on.
+    Optional('packages'): [basestring],
 })
 
 
 @transforms.add
 def validate(config, tasks):
     for task in tasks:
         yield validate_schema(
             docker_image_schema, task,
             "In docker image {!r}:".format(task.get('name', 'unknown')))
 
 
 @transforms.add
 def fill_template(config, tasks):
+    available_packages = {}
+    for task in config.kind_dependencies_tasks:
+        if task.kind != 'packages':
+            continue
+        name = task.label.replace('packages-', '')
+        for route in task.task.get('routes', []):
+            if route.startswith('index.') and '.hash.' in route:
+                available_packages[name] = route
+                break
     for task in tasks:
         image_name = task.pop('name')
         job_symbol = task.pop('symbol')
         args = task.pop('args', {})
         definition = task.pop('definition', image_name)
+        packages = task.pop('packages', [])
+
+        for p in packages:
+            if p not in available_packages:
+                raise Exception('Missing package job for {}-{}: {}'.format(
+                    config.kind, image_name, p))
+
+        # Generating the context hash relies on arguments being set, so we
+        # set this now, although it's not the final value (it's a
+        # task-reference value, see further below). We add the package routes
+        # containing a hash to get the overall docker image hash, so changes
+        # to packages will be reflected in the docker image hash.
+        args['DOCKER_IMAGE_PACKAGES'] = ' '.join('<{}>'.format(p)
+                                                 for p in packages)
 
         context_path = os.path.join('taskcluster', 'docker', definition)
         context_hash = generate_context_hash(
             GECKO, context_path, image_name, args)
 
         description = 'Build the docker image {} for use by dependent tasks'.format(
             image_name)
 
@@ -126,18 +152,30 @@ def fill_template(config, tasks):
                 'chain-of-trust': True,
                 'docker-in-docker': True,
                 'taskcluster-proxy': True,
                 'max-run-time': 7200,
             },
         }
 
         for k, v in args.items():
-            taskdesc['worker']['env'][k] = v
+            if k == 'DOCKER_IMAGE_PACKAGES':
+                taskdesc['worker']['env'][k] = {'task-reference': v}
+            else:
+                taskdesc['worker']['env'][k] = v
 
+        if packages:
+            deps = taskdesc.setdefault('dependencies', {})
+            digest_data = [context_hash]
+            for p in sorted(packages):
+                deps[p] = 'packages-{}'.format(p)
+                digest_data.append(available_packages[p])
+            kwargs = {'digest_data': digest_data}
+        else:
+            kwargs = {'digest': context_hash}
         add_optimization(
             config, taskdesc,
             cache_type="docker-images.v1",
             cache_name=image_name,
-            digest=context_hash,
+            **kwargs
         )
 
         yield taskdesc
new file mode 100644
--- /dev/null
+++ b/taskcluster/taskgraph/transforms/job/debian_package.py
@@ -0,0 +1,138 @@
+# 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/.
+"""
+Support for running spidermonkey jobs via dedicated scripts
+"""
+
+from __future__ import absolute_import, print_function, unicode_literals
+
+import os
+
+from taskgraph.util.schema import Schema
+from voluptuous import Optional, Required
+
+from taskgraph.transforms.job import run_job_using
+from taskgraph.transforms.job.common import add_public_artifacts
+
+from taskgraph.util.hash import hash_paths
+from taskgraph import GECKO
+from taskgraph.util.cached_tasks import add_optimization
+
+run_schema = Schema({
+    Required('using'): 'debian-package',
+    # Debian distribution
+    Optional('dist'): basestring,
+
+    # Date of the snapshot (from snapshot.debian.org) to use, in the format
+    # YYYYMMDDTHHMMSSZ. The same date is used for the base docker-image name
+    # (only the YYYYMMDD part).
+    Optional('snapshot'): basestring,
+
+    # URL of the source control (.dsc) file to build.
+    Required('dsc'): basestring,
+
+    # SHA256 of the source control (.dsc) file.
+    Required('dsc-sha256'): basestring,
+
+    # Patch to apply to the extracted source.
+    Optional('patch'): basestring,
+
+    # Command to run before dpkg-buildpackage.
+    Optional('pre-build-command'): basestring,
+})
+
+
+@run_job_using("docker-worker", "debian-package", schema=run_schema)
+def docker_worker_debian_package(config, job, taskdesc):
+    run = job['run']
+    run.setdefault('dist', 'wheezy')
+    run.setdefault('snapshot', '20171210T214726Z')
+
+    worker = taskdesc['worker']
+    worker['artifacts'] = []
+    worker['docker-image'] = 'debian:{dist}-{date}'.format(
+        dist=run['dist'],
+        date=run['snapshot'][:8])
+
+    add_public_artifacts(config, job, taskdesc, path='/tmp/artifacts')
+
+    dsc_file = os.path.basename(run['dsc'])
+    package = dsc_file[:dsc_file.index('_')]
+
+    adjust = ''
+    if 'patch' in run:
+        # We can't depend on docker images, so we don't have robustcheckout
+        # or run-task to get a checkout. So for this one file we'd need
+        # from a checkout, download it.
+        adjust += ('curl -sL {head_repo}/raw-file/{head_rev}'
+                   '/build/debian-packages/{patch} | patch -p1 && ').format(
+            head_repo=config.params['head_repository'],
+            head_rev=config.params['head_rev'],
+            patch=run['patch'],
+        )
+    if 'pre-build-command' in run:
+        adjust += run['pre-build-command'] + ' && '
+
+    # We can't depend on docker images (since docker images depend on packages),
+    # so we inline the whole script here.
+    worker['command'] = [
+        'sh',
+        '-x',
+        '-c',
+        # Fill /etc/apt/sources.list with the relevant snapshot repository.
+        'echo "deb http://snapshot.debian.org/archive/debian'
+        '/{snapshot}/ {dist} main" > /etc/apt/sources.list && '
+        'echo "deb http://snapshot.debian.org/archive/debian'
+        '/{snapshot}/ {dist}-updates main" >> /etc/apt/sources.list && '
+        'echo "deb http://snapshot.debian.org/archive/debian-security'
+        '/{snapshot}/ {dist}/updates main" >> /etc/apt/sources.list && '
+        # Install the base utilities required to build debian packages.
+        'apt-get update -o Acquire::Check-Valid-Until=false -q && '
+        'apt-get install -yyq fakeroot build-essential devscripts apt-utils && '
+        'cd /tmp && '
+        # Get, validate and extract the package source.
+        'dget -d -u {dsc} && '
+        'echo "{dsc_sha256}  {dsc_file}" | sha256sum -c && '
+        'dpkg-source -x {dsc_file} {package} && '
+        'cd {package} && '
+        # Optionally apply patch and/or pre-build command.
+        '{adjust}'
+        # Install the necessary build dependencies.
+        'mk-build-deps -i -r debian/control -t "apt-get -yyq --no-install-recommends" && '
+        # Build the package
+        'DEB_BUILD_OPTIONS="parallel=$(nproc) nocheck" dpkg-buildpackage && '
+        # Copy the artifacts
+        'mkdir -p {artifacts}/debian && '
+        'dcmd cp ../{package}_*.changes {artifacts}/debian/ && '
+        'cd {artifacts} && '
+        # Make the artifacts directory usable as an APT repository.
+        'apt-ftparchive sources debian | gzip -c9 > debian/Sources.gz && '
+        'apt-ftparchive packages debian | gzip -c9 > debian/Packages.gz && '
+        'apt-ftparchive release -o APT::FTPArchive::Release::Codename={dist} debian > Release && '
+        'mv Release debian/'
+        .format(
+            package=package,
+            snapshot=run['snapshot'],
+            dist=run['dist'],
+            dsc=run['dsc'],
+            dsc_file=dsc_file,
+            dsc_sha256=run['dsc-sha256'],
+            adjust=adjust,
+            artifacts='/tmp/artifacts',
+        )
+    ]
+
+    name = taskdesc['label'].replace('{}-'.format(config.kind), '', 1)
+    files = [
+        # This file
+        'taskcluster/taskgraph/transforms/job/debian_package.py',
+    ]
+    if 'patch' in run:
+        files.append('build/debian-packages/{}'.format(run['patch']))
+    data = [hash_paths(GECKO, files)]
+    for k in ('snapshot', 'dist', 'dsc-sha256', 'pre-build-command'):
+        if k in run:
+            data.append(run[k])
+    add_optimization(config, taskdesc, cache_type='packages.v1',
+                     cache_name=name, digest_data=data)
--- a/testing/config/mozbase_requirements.txt
+++ b/testing/config/mozbase_requirements.txt
@@ -1,8 +1,10 @@
+../tools/mozterm
+
 ../mozbase/manifestparser
 ../mozbase/mozcrash
 ../mozbase/mozdebug
 ../mozbase/mozdevice
 ../mozbase/mozfile
 ../mozbase/mozhttpd
 ../mozbase/mozinfo
 ../mozbase/mozinstall
@@ -10,10 +12,8 @@
 ../mozbase/mozlog
 ../mozbase/moznetwork
 ../mozbase/mozprocess
 ../mozbase/mozprofile
 ../mozbase/mozrunner
 ../mozbase/mozscreenshot
 ../mozbase/moztest
 ../mozbase/mozversion
-
-../tools/mozterm
new file mode 100644
--- /dev/null
+++ b/testing/config/mozbase_source_requirements.txt
@@ -0,0 +1,19 @@
+../../python/mozterm
+
+../mozbase/manifestparser
+../mozbase/mozcrash
+../mozbase/mozdebug
+../mozbase/mozdevice
+../mozbase/mozfile
+../mozbase/mozhttpd
+../mozbase/mozinfo
+../mozbase/mozinstall
+../mozbase/mozleak
+../mozbase/mozlog
+../mozbase/moznetwork
+../mozbase/mozprocess
+../mozbase/mozprofile
+../mozbase/mozrunner
+../mozbase/mozscreenshot
+../mozbase/moztest
+../mozbase/mozversion
--- a/testing/mozbase/mozlog/setup.py
+++ b/testing/mozbase/mozlog/setup.py
@@ -2,30 +2,35 @@
 # 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/.
 
 from __future__ import absolute_import
 
 from setuptools import setup, find_packages
 
 PACKAGE_NAME = 'mozlog'
-PACKAGE_VERSION = '3.6'
+PACKAGE_VERSION = '3.7'
+DEPS = [
+    'blessings>=1.3',
+    'mozterm',
+    'six >= 1.10.0',
+]
+
 
 setup(name=PACKAGE_NAME,
       version=PACKAGE_VERSION,
       description="Robust log handling specialized for logging in the Mozilla universe",
       long_description="see https://firefox-source-docs.mozilla.org/mozbase/index.html",
       author='Mozilla Automation and Testing Team',
       author_email='tools@lists.mozilla.org',
       url='https://wiki.mozilla.org/Auto-tools/Projects/Mozbase',
       license='MPL 1.1/GPL 2.0/LGPL 2.1',
       packages=find_packages(),
       zip_safe=False,
-      install_requires=['blessings >= 1.3',
-                        'six >= 1.10.0'],
+      install_requires=DEPS,
       tests_require=['mozfile'],
       platforms=['Any'],
       classifiers=['Development Status :: 4 - Beta',
                    'Environment :: Console',
                    'Intended Audience :: Developers',
                    'License :: OSI Approved :: Mozilla Public License 1.1 (MPL 1.1)',
                    'Operating System :: OS Independent',
                    'Programming Language :: Python :: 2.7',
--- a/testing/mozharness/mozharness/mozilla/testing/talos.py
+++ b/testing/mozharness/mozharness/mozilla/testing/talos.py
@@ -366,16 +366,18 @@ class Talos(TestingMixin, MercurialScrip
             options.extend(['--%s' % key, value])
         # configure profiling options
         options.extend(self.query_gecko_profile_options())
         # extra arguments
         if args is not None:
             options += args
         if 'talos_extra_options' in self.config:
             options += self.config['talos_extra_options']
+        if self.config.get('code_coverage', False):
+            options.extend(['--code-coverage'])
         return options
 
     def populate_webroot(self):
         """Populate the production test slaves' webroots"""
         self.talos_path = os.path.join(
             self.query_abs_dirs()['abs_work_dir'], 'tests', 'talos'
         )
 
@@ -573,17 +575,17 @@ class Talos(TestingMixin, MercurialScrip
                 'tests',
                 'config',
                 'mozbase_requirements.txt'
             )
         else:
             mozbase_requirements = os.path.join(
                 os.path.dirname(self.talos_path),
                 'config',
-                'mozbase_requirements.txt'
+                'mozbase_source_requirements.txt'
             )
         self.register_virtualenv_module(
             requirements=[mozbase_requirements],
             two_pass=True,
             editable=True,
         )
         # require pip >= 1.5 so pip will prefer .whl files to install
         super(Talos, self).create_virtualenv(
--- a/testing/talos/talos/cmdline.py
+++ b/testing/talos/talos/cmdline.py
@@ -175,15 +175,21 @@ def create_parser(mach_interface=False):
     debug_options.add_argument('--debug', action='store_true',
                                help='Enable the debugger. Not specifying a --debugger option will'
                                     'result in the default debugger being used.')
     debug_options.add_argument('--debugger', default=None,
                                help='Name of debugger to use.')
     debug_options.add_argument('--debugger-args', default=None, metavar='params',
                                help='Command-line arguments to pass to the debugger itself; split'
                                     'as the Bourne shell would.')
+    add_arg('--code-coverage', action="store_true",
+            dest='code_coverage',
+            help='Remove any existing ccov gcda output files after browser'
+                 ' initialization but before starting the tests. NOTE:'
+                 ' Currently only supported in production.')
+
     add_logging_group(parser)
     return parser
 
 
 def parse_args(argv=None):
     parser = create_parser()
     return parser.parse_args(argv)
--- a/testing/talos/talos/ffsetup.py
+++ b/testing/talos/talos/ffsetup.py
@@ -3,16 +3,17 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 """
 Set up a browser environment before running a test.
 """
 from __future__ import absolute_import, print_function
 
 import os
+import shutil
 import tempfile
 
 import mozfile
 import mozinfo
 import mozrunner
 from mozlog import get_proxy_logger
 from mozprocess import ProcessHandlerMixin
 from mozprofile.profile import Profile
@@ -180,31 +181,113 @@ class FFSetup(object):
                                               self.browser_config,
                                               self.test_config)
             self.gecko_profile.update_env(self.env)
 
     def clean(self):
         try:
             mozfile.remove(self._tmp_dir)
         except Exception as e:
-            print("Exception while removing profile directory: %s" % self._tmp_dir)
-            print(e)
+            LOG.info("Exception while removing profile directory: %s" % self._tmp_dir)
+            LOG.info(e)
 
         if self.gecko_profile:
             self.gecko_profile.clean()
 
+    def collect_or_clean_ccov(self, clean=False):
+        # NOTE: Currently only supported when running in production
+        if not self.browser_config.get('develop', False):
+            # first see if we an find any ccov files at the ccov output dirs
+            if clean:
+                LOG.info("Cleaning ccov files before starting the talos test")
+            else:
+                LOG.info("Collecting ccov files that were generated during the talos test")
+            gcov_prefix = os.getenv('GCOV_PREFIX', None)
+            js_ccov_dir = os.getenv('JS_CODE_COVERAGE_OUTPUT_DIR', None)
+            gcda_archive_folder_name = 'gcda-archive'
+            _gcda_files_found = []
+
+            for _ccov_env in [gcov_prefix, js_ccov_dir]:
+                if _ccov_env is not None:
+                    # ccov output dir env vars exist; now search for gcda files to remove
+                    _ccov_path = os.path.abspath(_ccov_env)
+                    if os.path.exists(_ccov_path):
+                        # now walk through and look for gcda files
+                        LOG.info("Recursive search for gcda files in: %s" % _ccov_path)
+                        for root, dirs, files in os.walk(_ccov_path):
+                            for next_file in files:
+                                if next_file.endswith(".gcda"):
+                                    # don't want to move or delete files in our 'gcda-archive'
+                                    if root.find(gcda_archive_folder_name) == -1:
+                                        _gcda_files_found.append(os.path.join(root, next_file))
+                    else:
+                        LOG.info("The ccov env var path doesn't exist: %s" % str(_ccov_path))
+
+            # now  clean or collect gcda files accordingly
+            if clean:
+                # remove ccov data
+                LOG.info("Found %d gcda files to clean. Deleting..." % (len(_gcda_files_found)))
+                for _gcda in _gcda_files_found:
+                    try:
+                        mozfile.remove(_gcda)
+                    except Exception as e:
+                        LOG.info("Exception while removing file: %s" % _gcda)
+                        LOG.info(e)
+                LOG.info("Finished cleaning ccov gcda files")
+            else:
+                # copy gcda files to archive folder to be collected later
+                gcda_archive_top = os.path.join(gcov_prefix,
+                                                gcda_archive_folder_name,
+                                                self.test_config['name'])
+                LOG.info("Found %d gcda files to collect. Moving to gcda archive %s"
+                         % (len(_gcda_files_found), str(gcda_archive_top)))
+                if not os.path.exists(gcda_archive_top):
+                    try:
+                        os.makedirs(gcda_archive_top)
+                    except OSError:
+                        LOG.critical("Unable to make gcda archive folder %s" % gcda_archive_top)
+                for _gcda in _gcda_files_found:
+                    # want to copy the existing directory strucutre but put it under archive-dir
+                    # need to remove preceeding '/' from _gcda file name so can join the path
+                    gcda_archive_file = os.path.join(gcov_prefix,
+                                                     gcda_archive_folder_name,
+                                                     self.test_config['name'],
+                                                     _gcda.strip(gcov_prefix + "//"))
+                    gcda_archive_dest = os.path.dirname(gcda_archive_file)
+
+                    # create archive folder, mirroring structure
+                    if not os.path.exists(gcda_archive_dest):
+                        try:
+                            os.makedirs(gcda_archive_dest)
+                        except OSError:
+                            LOG.critical("Unable to make archive folder %s" % gcda_archive_dest)
+                    # now copy the file there
+                    try:
+                        shutil.copy(_gcda, gcda_archive_dest)
+                    except Exception as e:
+                        LOG.info("Error copying %s to %s" % (str(_gcda), str(gcda_archive_dest)))
+                        LOG.info(e)
+                LOG.info("Finished collecting ccov gcda files. Copied to: %s" % gcda_archive_top)
+
     def __enter__(self):
         LOG.info('Initialising browser for %s test...'
                  % self.test_config['name'])
         self._init_env()
         self._init_profile()
         try:
             if not self.debug_mode and self.test_config['name'] != "damp":
                 self._run_profile()
         except:
             self.clean()
             raise
         self._init_gecko_profile()
         LOG.info('Browser initialized.')
+        # remove ccov files before actual tests start
+        if self.browser_config.get('code_coverage', False):
+            # if the Firefox build was instrumented for ccov, initializing the browser
+            # will have caused ccov to output some gcda files; in order to have valid
+            # ccov data for the talos test we want to remove these files before starting
+            # the actual talos test(s)
+            self.collect_or_clean_ccov(clean=True)
         return self
 
     def __exit__(self, type, value, tb):
         self.clean()
--- a/testing/talos/talos/run_tests.py
+++ b/testing/talos/talos/run_tests.py
@@ -113,16 +113,28 @@ def run_tests(config, browser_config):
     # instance
     if browser_config['develop']:
         browser_config['extra_args'] = '--no-remote'
 
     # Pass subtests filter argument via a preference
     if browser_config['subtests']:
         browser_config['preferences']['talos.subtests'] = browser_config['subtests']
 
+    # If --code-coverage files are expected, set flag in browser config so ffsetup knows
+    # that it needs to delete any ccov files resulting from browser initialization
+    # NOTE: This is only supported in production; local setup of ccov folders and
+    # data collection not supported yet, so if attempting to run with --code-coverage
+    # flag locally, that is not supported yet
+    if config.get('code_coverage', False):
+        if browser_config['develop']:
+            raise TalosError('Aborting: talos --code-coverage flag is only '
+                             'supported in production')
+        else:
+            browser_config['code_coverage'] = True
+
     # set defaults
     testdate = config.get('testdate', '')
 
     # get the process name from the path to the browser
     if not browser_config['process']:
         browser_config['process'] = \
             os.path.basename(browser_config['browser_path'])
 
--- a/testing/talos/talos/ttest.py
+++ b/testing/talos/talos/ttest.py
@@ -286,10 +286,15 @@ class TTest(object):
         # include global (cross-cycle) counters
         test_results.all_counter_results.extend(
             [{key: value} for key, value in global_counters.items()]
         )
         for c in test_results.all_counter_results:
             for key, value in c.items():
                 LOG.debug('COUNTER %r: %s' % (key, value))
 
+        # if running against a code-coverage instrumented build, move the
+        # produced gcda files to a folder where they will be collected later
+        if browser_config.get('code_coverage', False):
+            setup.collect_or_clean_ccov()
+
         # return results
         return test_results
--- a/toolkit/components/browser/nsWebBrowser.cpp
+++ b/toolkit/components/browser/nsWebBrowser.cpp
@@ -1749,30 +1749,30 @@ DrawPaintedLayer(PaintedLayer* aLayer,
 
   ColorPattern color(ToDeviceColor(*static_cast<nscolor*>(aCallbackData)));
   nsIntRect dirtyRect = aRegionToDraw.GetBounds();
   aDrawTarget.FillRect(
     Rect(dirtyRect.x, dirtyRect.y, dirtyRect.width, dirtyRect.height), color);
 }
 
 void
-nsWebBrowser::WindowRaised(nsIWidget* aWidget)
+nsWebBrowser::WindowActivated()
 {
 #if defined(DEBUG_smaug)
   nsCOMPtr<nsIDocument> document = mDocShell->GetDocument();
   nsAutoString documentURI;
   document->GetDocumentURI(documentURI);
   printf("nsWebBrowser::NS_ACTIVATE %p %s\n", (void*)this,
          NS_ConvertUTF16toUTF8(documentURI).get());
 #endif
   Activate();
 }
 
 void
-nsWebBrowser::WindowLowered(nsIWidget* aWidget)
+nsWebBrowser::WindowDeactivated()
 {
 #if defined(DEBUG_smaug)
   nsCOMPtr<nsIDocument> document = mDocShell->GetDocument();
   nsAutoString documentURI;
   document->GetDocumentURI(documentURI);
   printf("nsWebBrowser::NS_DEACTIVATE %p %s\n", (void*)this,
          NS_ConvertUTF16toUTF8(documentURI).get());
 #endif
--- a/toolkit/components/browser/nsWebBrowser.h
+++ b/toolkit/components/browser/nsWebBrowser.h
@@ -113,18 +113,18 @@ protected:
   // XXXbz why are these NS_IMETHOD?  They're not interface methods!
   NS_IMETHOD SetDocShell(nsIDocShell* aDocShell);
   NS_IMETHOD EnsureDocShellTreeOwner();
   NS_IMETHOD BindListener(nsISupports* aListener, const nsIID& aIID);
   NS_IMETHOD UnBindListener(nsISupports* aListener, const nsIID& aIID);
   NS_IMETHOD EnableGlobalHistory(bool aEnable);
 
   // nsIWidgetListener
-  virtual void WindowRaised(nsIWidget* aWidget);
-  virtual void WindowLowered(nsIWidget* aWidget);
+  virtual void WindowActivated() override;
+  virtual void WindowDeactivated() override;
   virtual bool PaintWindow(nsIWidget* aWidget,
                            mozilla::LayoutDeviceIntRegion aRegion) override;
 
 protected:
   RefPtr<nsDocShellTreeOwner> mDocShellTreeOwner;
   nsCOMPtr<nsIDocShell> mDocShell;
   nsCOMPtr<nsIInterfaceRequestor> mDocShellAsReq;
   nsCOMPtr<nsIBaseWindow> mDocShellAsWin;
--- a/toolkit/components/mozintl/mozIMozIntl.idl
+++ b/toolkit/components/mozintl/mozIMozIntl.idl
@@ -36,10 +36,10 @@
  */
 [scriptable, uuid(7f63279a-1a29-4ae6-9e7a-dc9684a23530)]
 interface mozIMozIntl : nsISupports
 {
   jsval getCalendarInfo([optional] in jsval locales);
   jsval getDisplayNames([optional] in jsval locales, [optional] in jsval options);
   jsval getLocaleInfo([optional] in jsval locales);
 
-  jsval createDateTimeFormat([optional] in jsval locales, [optional] in jsval options);
+  readonly attribute jsval DateTimeFormat;
 };
--- a/toolkit/components/mozintl/mozIntl.js
+++ b/toolkit/components/mozintl/mozIntl.js
@@ -64,37 +64,41 @@ class MozIntl {
   getLocaleInfo(locales, ...args) {
     if (!this._cache.hasOwnProperty("getLocaleInfo")) {
       mozIntlHelper.addGetLocaleInfo(this._cache);
     }
 
     return this._cache.getLocaleInfo(getLocales(locales), ...args);
   }
 
-  createDateTimeFormat(locales, options, ...args) {
+  get DateTimeFormat() {
     if (!this._cache.hasOwnProperty("DateTimeFormat")) {
       mozIntlHelper.addDateTimeFormatConstructor(this._cache);
     }
 
-    let resolvedLocales =
-      this._cache.DateTimeFormat.supportedLocalesOf(getLocales(locales));
+    let DateTimeFormat = this._cache.DateTimeFormat;
 
-    if (options) {
-      if (options.dateStyle || options.timeStyle) {
-        options.pattern = osPrefs.getDateTimePattern(
-          getDateTimePatternStyle(options.dateStyle),
-          getDateTimePatternStyle(options.timeStyle),
-          resolvedLocales[0]);
-      } else {
-        // make sure that user doesn't pass a pattern explicitly
-        options.pattern = undefined;
+    class MozDateTimeFormat extends this._cache.DateTimeFormat {
+      constructor(locales, options, ...args) {
+        let resolvedLocales = DateTimeFormat.supportedLocalesOf(getLocales(locales));
+        if (options) {
+          if (options.dateStyle || options.timeStyle) {
+            options.pattern = osPrefs.getDateTimePattern(
+              getDateTimePatternStyle(options.dateStyle),
+              getDateTimePatternStyle(options.timeStyle),
+              resolvedLocales[0]);
+          } else {
+            // make sure that user doesn't pass a pattern explicitly
+            options.pattern = undefined;
+          }
+        }
+        super(resolvedLocales, options, ...args);
       }
     }
-
-    return new this._cache.DateTimeFormat(resolvedLocales, options, ...args);
+    return MozDateTimeFormat;
   }
 }
 
 MozIntl.prototype.classID = Components.ID("{35ec195a-e8d0-4300-83af-c8a2cc84b4a3}");
 MozIntl.prototype.QueryInterface = XPCOMUtils.generateQI([Ci.mozIMozIntl, Ci.nsISupports]);
 
 var components = [MozIntl];
 this.NSGetFactory = XPCOMUtils.generateNSGetFactory(components);
--- a/toolkit/components/mozintl/test/test_mozintl.js
+++ b/toolkit/components/mozintl/test/test_mozintl.js
@@ -1,26 +1,48 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 Components.utils.import("resource://gre/modules/Services.jsm");
 
 function run_test() {
   test_methods_presence();
   test_methods_calling();
+  test_constructors();
 
   ok(true);
 }
 
 function test_methods_presence() {
   equal(Services.intl.getCalendarInfo instanceof Function, true);
   equal(Services.intl.getDisplayNames instanceof Function, true);
   equal(Services.intl.getLocaleInfo instanceof Function, true);
-  equal(Services.intl.createDateTimeFormat instanceof Function, true);
+  equal(Services.intl.getLocaleInfo instanceof Object, true);
 }
 
 function test_methods_calling() {
   Services.intl.getCalendarInfo("pl");
   Services.intl.getDisplayNames("ar");
   Services.intl.getLocaleInfo("de");
-  Services.intl.createDateTimeFormat("fr");
+  new Services.intl.DateTimeFormat("fr");
   ok(true);
 }
+
+function test_constructors() {
+  let dtf = new Intl.DateTimeFormat();
+  let dtf2 = new Services.intl.DateTimeFormat();
+
+  equal(typeof dtf, typeof dtf2);
+
+  Assert.throws(() => {
+    // This is an observable difference between Intl and mozIntl.
+    //
+    // Old ECMA402 APIs (edition 1 and 2) allowed for constructors to be called
+    // as functions.
+    // Starting from ed.3 all new constructors are throwing when called without |new|.
+    //
+    // All MozIntl APIs do not implement the legacy behavior and throw
+    // when called without |new|.
+    //
+    // For more information see https://github.com/tc39/ecma402/pull/84 .
+    Services.intl.DateTimeFormat();
+  }, /class constructors must be invoked with |new|/);
+}
--- a/toolkit/components/passwordmgr/LoginManagerContent.jsm
+++ b/toolkit/components/passwordmgr/LoginManagerContent.jsm
@@ -469,34 +469,36 @@ var LoginManagerContent = {
   stateForDocument(document) {
     let loginFormState = this.loginFormStateByDocument.get(document);
     if (!loginFormState) {
       loginFormState = {
         /**
          * Keeps track of filled fields and values.
          */
         fillsByRootElement: new WeakMap(),
-        loginFormRootElements: new Set(),
+        loginFormRootElements: new WeakSet(),
       };
       this.loginFormStateByDocument.set(document, loginFormState);
     }
     return loginFormState;
   },
 
   /**
    * Compute whether there is an insecure login form on any frame of the current page, and
    * notify the parent process. This is used to control whether insecure password UI appears.
    */
   _detectInsecureFormLikes(topWindow) {
     log("_detectInsecureFormLikes", topWindow.location.href);
 
     // Returns true if this window or any subframes have insecure login forms.
     let hasInsecureLoginForms = (thisWindow) => {
       let doc = thisWindow.document;
-      let hasLoginForm = this.stateForDocument(doc).loginFormRootElements.size > 0;
+      let rootElsWeakSet = this.stateForDocument(doc).loginFormRootElements;
+      let hasLoginForm = ChromeUtils.nondeterministicGetWeakSetKeys(rootElsWeakSet)
+                                    .filter(el => el.isConnected).length > 0;
       return (hasLoginForm && !thisWindow.isSecureContext) ||
              Array.some(thisWindow.frames,
                         frame => hasInsecureLoginForms(frame));
     };
 
     let messageManager = messageManagerFromWindow(topWindow);
     messageManager.sendAsyncMessage("RemoteLogins:insecureLoginFormPresent", {
       hasInsecureLoginForms: hasInsecureLoginForms(topWindow),
@@ -875,21 +877,27 @@ var LoginManagerContent = {
    * To avoid multiple notifications for the same FormLike, this currently
    * avoids capturing when dealing with a real <form> which are ideally already
    * using a submit event.
    *
    * @param {Document} document being navigated
    */
   _onNavigation(aDocument) {
     let state = this.stateForDocument(aDocument);
-    let loginFormRootElements = state.loginFormRootElements;
-    log("_onNavigation: state:", state, "loginFormRootElements size:", loginFormRootElements.size,
+    let rootElsWeakSet = state.loginFormRootElements;
+    let weakLoginFormRootElements = ChromeUtils.nondeterministicGetWeakSetKeys(rootElsWeakSet);
+
+    log("_onNavigation: state:", state, "loginFormRootElements approx size:", weakLoginFormRootElements.length,
         "document:", aDocument);
 
-    for (let formRoot of state.loginFormRootElements) {
+    for (let formRoot of weakLoginFormRootElements) {
+      if (!formRoot.isConnected) {
+        continue;
+      }
+
       if (formRoot instanceof Ci.nsIDOMHTMLFormElement) {
         // For now only perform capture upon navigation for FormLike's without
         // a <form> to avoid capture from both an earlyformsubmit and
         // navigation for the same "form".
         log("Ignoring navigation for the form root to avoid multiple prompts " +
             "since it was for a real <form>");
         continue;
       }
@@ -1435,17 +1443,17 @@ function UserAutoCompleteResult(aSearchS
   }
 
   this._showInsecureFieldWarning = (!isSecure && LoginHelper.showInsecureFieldWarning) ? 1 : 0;
   this.searchString = aSearchString;
   this.logins = matchingLogins.sort(loginSort);
   this.matchCount = matchingLogins.length + this._showInsecureFieldWarning;
   this._messageManager = messageManager;
   this._stringBundle = Services.strings.createBundle("chrome://passwordmgr/locale/passwordmgr.properties");
-  this._dateAndTimeFormatter = Services.intl.createDateTimeFormat(undefined, { dateStyle: "medium" });
+  this._dateAndTimeFormatter = new Services.intl.DateTimeFormat(undefined, { dateStyle: "medium" });
 
   this._isPasswordField = isPasswordField;
 
   this._duplicateUsernames = findDuplicates(matchingLogins);
 
   if (this.matchCount > 0) {
     this.searchResult = Ci.nsIAutoCompleteResult.RESULT_SUCCESS;
     this.defaultIndex = 0;
--- a/toolkit/components/passwordmgr/LoginManagerContextMenu.jsm
+++ b/toolkit/components/passwordmgr/LoginManagerContextMenu.jsm
@@ -186,12 +186,12 @@ var LoginManagerContextMenu = {
 };
 
 XPCOMUtils.defineLazyGetter(LoginManagerContextMenu, "_stringBundle", function() {
   return Services.strings.
          createBundle("chrome://passwordmgr/locale/passwordmgr.properties");
 });
 
 XPCOMUtils.defineLazyGetter(LoginManagerContextMenu, "dateAndTimeFormatter", function() {
-  return Services.intl.createDateTimeFormat(undefined, {
+  return new Services.intl.DateTimeFormat(undefined, {
     dateStyle: "medium"
   });
 });
--- a/toolkit/components/passwordmgr/content/passwordManager.js
+++ b/toolkit/components/passwordmgr/content/passwordManager.js
@@ -55,19 +55,19 @@ let signonReloadDisplay = {
           break;
       }
       Services.obs.notifyObservers(null, "passwordmgr-dialog-updated");
     }
   }
 };
 
 // Formatter for localization.
-let dateFormatter = Services.intl.createDateTimeFormat(undefined,
+let dateFormatter = new Services.intl.DateTimeFormat(undefined,
                       { dateStyle: "medium" });
-let dateAndTimeFormatter = Services.intl.createDateTimeFormat(undefined,
+let dateAndTimeFormatter = new Services.intl.DateTimeFormat(undefined,
                              { dateStyle: "medium",
                                timeStyle: "short" });
 
 function Startup() {
   // be prepared to reload the display if anything changes
   Services.obs.addObserver(signonReloadDisplay, "passwordmgr-storage-changed");
 
   signonsTree = document.getElementById("signonsTree");
--- a/toolkit/components/passwordmgr/test/mochitest/test_password_field_autocomplete.html
+++ b/toolkit/components/passwordmgr/test/mochitest/test_password_field_autocomplete.html
@@ -129,17 +129,17 @@ async function reinitializeForm(index) {
   uname = $_(index, "uname");
   pword = $_(index, "pword");
   uname.value = "";
   pword.value = "";
   pword.focus();
 }
 
 function generateDateString(date) {
-  let dateAndTimeFormatter = Services.intl.createDateTimeFormat(undefined,
+  let dateAndTimeFormatter = new Services.intl.DateTimeFormat(undefined,
                              { dateStyle: "medium" });
   return dateAndTimeFormatter.format(date);
 }
 
 const DATE_NOW_STRING = generateDateString(new Date());
 
 // Check for expected username/password in form.
 function checkACFormPasswordField(expectedPassword) {
--- a/toolkit/components/passwordmgr/test/unit/test_context_menu.js
+++ b/toolkit/components/passwordmgr/test/unit/test_context_menu.js
@@ -97,17 +97,17 @@ function checkLoginItems(logins, items) 
         duplicates.add(login.username);
       }
       seen.add(login.username);
     }
     return duplicates;
   }
   let duplicates = findDuplicates(logins);
 
-  let dateAndTimeFormatter = Services.intl.createDateTimeFormat(undefined,
+  let dateAndTimeFormatter = new Services.intl.DateTimeFormat(undefined,
                              { dateStyle: "medium" });
   for (let login of logins) {
     if (login.username && !duplicates.has(login.username)) {
       // If login is not duplicate and we can't find an item for it, fail.
       if (!items.find(item => item.label == login.username)) {
         return false;
       }
       continue;
--- a/toolkit/components/passwordmgr/test/unit/test_user_autocomplete_result.js
+++ b/toolkit/components/passwordmgr/test/unit/test_user_autocomplete_result.js
@@ -19,17 +19,17 @@ matchingLogins.push(new nsLoginInfo("htt
 
 matchingLogins.push(new nsLoginInfo("http://mochi.test:8888", "http://autocomplete:8888", null,
                                     "testuser3", "testpass3", "uname", "pword"));
 
 matchingLogins.push(new nsLoginInfo("http://mochi.test:8888", "http://autocomplete:8888", null,
                                     "zzzuser4", "zzzpass4", "uname", "pword"));
 
 let meta = matchingLogins[0].QueryInterface(Ci.nsILoginMetaInfo);
-let dateAndTimeFormatter = Services.intl.createDateTimeFormat(undefined,
+let dateAndTimeFormatter = new Services.intl.DateTimeFormat(undefined,
                             { dateStyle: "medium" });
 let time = dateAndTimeFormatter.format(new Date(meta.timePasswordChanged));
 const LABEL_NO_USERNAME = "No username (" + time + ")";
 
 let expectedResults = [
   {
     insecureFieldWarningEnabled: true,
     insecureAutoFillFormsEnabled: true,
--- a/toolkit/components/payments/res/mixins/ObservedPropertiesMixin.js
+++ b/toolkit/components/payments/res/mixins/ObservedPropertiesMixin.js
@@ -27,17 +27,17 @@ function ObservedPropertiesMixin(superCl
         }
         // Convert attribute names from kebab-case to camelCase properties
         Object.defineProperty(this, name.replace(/-([a-z])/g, ($0, $1) => $1.toUpperCase()), {
           configurable: true,
           get() {
             return this.getAttribute(name);
           },
           set(value) {
-            if (value === null || value === undefined) {
+            if (value === null || value === undefined || value === false) {
               this.removeAttribute(name);
             } else {
               this.setAttribute(name, value);
             }
           },
         });
       }
     }
--- a/toolkit/components/places/PlacesRemoteTabsAutocompleteProvider.jsm
+++ b/toolkit/components/places/PlacesRemoteTabsAutocompleteProvider.jsm
@@ -111,18 +111,17 @@ Services.obs.addObserver(observe, "weave
 Services.prefs.addObserver(PREF_SHOW_REMOTE_ICONS, observe);
 observe(null, "nsPref:changed", PREF_SHOW_REMOTE_ICONS);
 
 // This public object is a static singleton.
 this.PlacesRemoteTabsAutocompleteProvider = {
   // a promise that resolves with an array of matching remote tabs.
   getMatches(searchString) {
     // If Sync isn't configured we bail early.
-    if (Weave === null ||
-        !Services.prefs.prefHasUserValue("services.sync.username")) {
+    if (!weaveXPCService.ready || !weaveXPCService.enabled) {
       return Promise.resolve([]);
     }
 
     let re = new RegExp(escapeRegExp(searchString), "i");
     let matches = [];
     let { tabs, clients } = ensureItems();
     for (let [url, { clientId, tab }] of tabs) {
       let title = tab.title;
--- a/toolkit/content/aboutTelemetry.js
+++ b/toolkit/content/aboutTelemetry.js
@@ -419,17 +419,17 @@ var PingPicker = {
     const today = new Date();
     today.setHours(0, 0, 0, 0);
     const yesterday = new Date(today);
     yesterday.setDate(today.getDate() - 1);
 
     for (let p of this._archivedPings) {
       pingTypes.add(p.type);
       const pingDate = new Date(p.timestampCreated);
-      const datetimeText = Services.intl.createDateTimeFormat(undefined, {
+      const datetimeText = new Services.intl.DateTimeFormat(undefined, {
           dateStyle: "short",
           timeStyle: "medium"
         }).format(pingDate);
       const pingName = `${datetimeText}, ${p.type}`;
 
       let option = document.createElement("option");
       let content = document.createTextNode(pingName);
       option.appendChild(content);
@@ -1455,32 +1455,39 @@ var Search = {
     adjustHeaderState();
     Array.from(document.querySelectorAll("section")).forEach((section) => {
       section.classList.toggle("active", section.id == "home-section");
     });
   },
 
   homeSearch(text) {
     changeUrlSearch(text);
+    removeSearchSectionTitles();
     if (text === "") {
       this.resetHome();
       return;
     }
     document.getElementById("main").classList.add("search");
     let title = bundle.formatStringFromName("resultsForSearch", [text], 1);
     adjustHeaderState(title);
     let noSearchResults = true;
     Array.from(document.querySelectorAll("section")).forEach((section) => {
       if (section.id == "home-section" || section.id == "raw-payload-section") {
         section.classList.remove("active");
         return;
       }
       section.classList.add("active");
       let sectionHidden = this.search(text, section);
-      if (noSearchResults && !sectionHidden) {
+      if (!sectionHidden) {
+        let sectionTitle = document.querySelector(`.category[value="${section.id}"] .category-name`).textContent;
+        let sectionDataDiv = document.querySelector(`#${section.id}.has-data.active .data`);
+        let titleDiv = document.createElement("h1");
+        titleDiv.classList.add("data", "search-section-title");
+        titleDiv.textContent = sectionTitle;
+        section.insertBefore(titleDiv, sectionDataDiv);
         noSearchResults = false;
       }
     });
     this.updateNoResults(text, noSearchResults);
   }
 };
 
 /*
@@ -1869,32 +1876,40 @@ function displayProcessesSelector(select
     "keyed-histograms-section",
     "events-section"
   ];
   let processes = document.getElementById("processes");
   processes.hidden = !whitelist.includes(selectedSection);
 }
 
 function refreshSearch() {
+  removeSearchSectionTitles();
   let selectedSection = document.querySelector(".category.selected").getAttribute("value");
   let search = document.getElementById("search");
   if (!Search.blacklist.includes(selectedSection)) {
     Search.search(search.value);
   }
 }
 
 function adjustSearchState() {
+  removeSearchSectionTitles();
   let selectedSection = document.querySelector(".category.selected").getAttribute("value");
   let search = document.getElementById("search");
   search.value = "";
   search.hidden = Search.blacklist.includes(selectedSection);
   document.getElementById("no-search-results").classList.add("hidden");
   Search.search(""); // reinitialize search state.
 }
 
+function removeSearchSectionTitles() {
+    for (let sectionTitleDiv of Array.from(document.getElementsByClassName("search-section-title"))) {
+        sectionTitleDiv.remove();
+    }
+}
+
 function adjustSection() {
   let selectedCategory = document.querySelector(".category.selected");
   if (!selectedCategory.classList.contains("has-data")) {
     PingPicker._showStructuredPingData();
   }
 }
 
 function adjustHeaderState(title = null) {
--- a/toolkit/crashreporter/content/crashes.js
+++ b/toolkit/crashreporter/content/crashes.js
@@ -68,18 +68,18 @@ function populateReportList() {
     document.getElementById("reportList").style.display = "none";
     document.getElementById("noReports").style.display = "block";
     return;
   }
 
   var dateFormatter;
   var timeFormatter;
   try {
-    dateFormatter = Services.intl.createDateTimeFormat(undefined, { dateStyle: "short" });
-    timeFormatter = Services.intl.createDateTimeFormat(undefined, { timeStyle: "short" });
+    dateFormatter = new Services.intl.DateTimeFormat(undefined, { dateStyle: "short" });
+    timeFormatter = new Services.intl.DateTimeFormat(undefined, { timeStyle: "short" });
   } catch (e) {
     // XXX Fallback to be removed once bug 1215247 is complete
     // and the Intl API is available on all platforms.
     dateFormatter = {
       format(date) {
         return date.toLocaleDateString();
       }
     };
--- a/toolkit/mozapps/downloads/DownloadUtils.jsm
+++ b/toolkit/mozapps/downloads/DownloadUtils.jsm
@@ -344,17 +344,17 @@ this.DownloadUtils = {
     // Figure out when today begins
     let today = new Date(aNow.getFullYear(), aNow.getMonth(), aNow.getDate());
 
     let dateTimeCompact;
     let dateTimeFull;
 
     // Figure out if the time is from today, yesterday, this week, etc.
     if (aDate >= today) {
-      let dts = Services.intl.createDateTimeFormat(undefined, {
+      let dts = new Services.intl.DateTimeFormat(undefined, {
         timeStyle: "short"
       });
       dateTimeCompact = dts.format(aDate);
     } else if (today - aDate < (MS_PER_DAY)) {
       // After yesterday started, show yesterday
       dateTimeCompact = gBundle.GetStringFromName(gStr.yesterday);
     } else if (today - aDate < (6 * MS_PER_DAY)) {
       // After last week started, show day of week
@@ -364,17 +364,17 @@ this.DownloadUtils = {
       dateTimeCompact = aDate.toLocaleString(undefined, {
                           month: "long",
                           day: "numeric"
       });
     }
 
     const dtOptions = { dateStyle: "long", timeStyle: "short" };
     dateTimeFull =
-      Services.intl.createDateTimeFormat(undefined, dtOptions).format(aDate);
+      new Services.intl.DateTimeFormat(undefined, dtOptions).format(aDate);
 
     return [dateTimeCompact, dateTimeFull];
   },
 
   /**
    * Get the appropriate display host string for a URI string depending on if
    * the URI has an eTLD + 1, is an IP address, a local file, or other protocol
    *
--- a/toolkit/mozapps/downloads/tests/unit/test_DownloadUtils.js
+++ b/toolkit/mozapps/downloads/tests/unit/test_DownloadUtils.js
@@ -73,37 +73,37 @@ function testAllGetReadableDates() {
   const today_11_30     = new Date(2000, 11, 31, 11, 30, 15);
   const today_12_30     = new Date(2000, 11, 31, 12, 30, 15);
   const yesterday_11_30 = new Date(2000, 11, 30, 11, 30, 15);
   const yesterday_12_30 = new Date(2000, 11, 30, 12, 30, 15);
   const twodaysago      = new Date(2000, 11, 29, 11, 30, 15);
   const sixdaysago      = new Date(2000, 11, 25, 11, 30, 15);
   const sevendaysago    = new Date(2000, 11, 24, 11, 30, 15);
 
-  let cDtf = Services.intl.createDateTimeFormat;
+  let cDtf = Services.intl.DateTimeFormat;
 
   testGetReadableDates(today_11_30,
-                       cDtf(undefined, {timeStyle: "short"}).format(today_11_30));
+                       (new cDtf(undefined, {timeStyle: "short"})).format(today_11_30));
   testGetReadableDates(today_12_30,
-                       cDtf(undefined, {timeStyle: "short"}).format(today_12_30));
+                       (new cDtf(undefined, {timeStyle: "short"})).format(today_12_30));
 
   testGetReadableDates(yesterday_11_30, "Yesterday");
   testGetReadableDates(yesterday_12_30, "Yesterday");
   testGetReadableDates(twodaysago,
                        twodaysago.toLocaleDateString(undefined, { weekday: "long" }));
   testGetReadableDates(sixdaysago,
                        sixdaysago.toLocaleDateString(undefined, { weekday: "long" }));
   testGetReadableDates(sevendaysago,
                        sevendaysago.toLocaleDateString(undefined, { month: "long" }) + " " +
                        sevendaysago.getDate().toString().padStart(2, "0"));
 
   let [, dateTimeFull] = DownloadUtils.getReadableDates(today_11_30);
 
   const dtOptions = { dateStyle: "long", timeStyle: "short" };
-  Assert.equal(dateTimeFull, cDtf(undefined, dtOptions).format(today_11_30));
+  Assert.equal(dateTimeFull, (new cDtf(undefined, dtOptions)).format(today_11_30));
 }
 
 function run_test() {
   testConvertByteUnits(-1, "-1", "bytes");
   testConvertByteUnits(1, _("1"), "bytes");
   testConvertByteUnits(42, _("42"), "bytes");
   testConvertByteUnits(123, _("123"), "bytes");
   testConvertByteUnits(1024, _("1.0"), "KB");
--- a/xpcom/threads/nsThreadUtils.cpp
+++ b/xpcom/threads/nsThreadUtils.cpp
@@ -35,19 +35,26 @@ NS_IMPL_ISUPPORTS(IdlePeriod, nsIIdlePer
 
 NS_IMETHODIMP
 IdlePeriod::GetIdlePeriodHint(TimeStamp* aIdleDeadline)
 {
   *aIdleDeadline = TimeStamp();
   return NS_OK;
 }
 
+// NS_IMPL_NAMED_* relies on the mName field, which is not present on
+// release or beta. Instead, fall back to using "Runnable" for all
+// runnables.
+#ifdef RELEASE_OR_BETA
+NS_IMPL_ISUPPORTS(Runnable, nsIRunnable, nsINamed)
+#else
 NS_IMPL_NAMED_ADDREF(Runnable, mName)
 NS_IMPL_NAMED_RELEASE(Runnable, mName)
 NS_IMPL_QUERY_INTERFACE(Runnable, nsIRunnable, nsINamed)
+#endif
 
 NS_IMETHODIMP
 Runnable::Run()
 {
   // Do nothing
   return NS_OK;
 }