Merge m-c to inbound, a=merge CLOSED TREE
authorWes Kocher <wkocher@mozilla.com>
Mon, 11 Sep 2017 15:20:43 -0700
changeset 429705 160cd861b35867ac07bbf0ba0f7d946f2d7bb2d7
parent 429704 5e3f847df8afa6812469b63f561db00930aa27d8 (current diff)
parent 429605 3a6d2e30bbe18b4ed6d3d964afe9c97237f0515d (diff)
child 429706 deef51eb0b7e0b528935f8be1ce8f36912464a1c
push id7761
push userjlund@mozilla.com
push dateFri, 15 Sep 2017 00:19:52 +0000
treeherdermozilla-beta@c38455951db4 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone57.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 m-c to inbound, a=merge CLOSED TREE MozReview-Commit-ID: J2tAqTVxlQv
dom/indexedDB/test/bfcache_iframe1.html
dom/indexedDB/test/bfcache_iframe2.html
dom/media/webspeech/synth/test/file_bfcache_frame.html
dom/media/webspeech/synth/test/file_bfcache_frame2.html
dom/workers/test/WorkerDebugger_frozen_iframe1.html
dom/workers/test/WorkerDebugger_frozen_iframe2.html
dom/workers/test/suspend_iframe.html
mobile/android/app/src/main/res/drawable-nodpi/firstrun_welcome.webp
--- a/browser/components/preferences/in-content/privacy.js
+++ b/browser/components/preferences/in-content/privacy.js
@@ -259,16 +259,25 @@ var gPrivacyPane = {
     let pkiBundle = document.getElementById("pkiBundle");
     appendSearchKeywords("passwordExceptions", [
       bundlePrefs.getString("savedLoginsExceptions_title"),
       bundlePrefs.getString("savedLoginsExceptions_desc2"),
     ]);
     appendSearchKeywords("showPasswords", [
       signonBundle.getString("loginsDescriptionAll2"),
     ]);
+    appendSearchKeywords("cookieExceptions", [
+      bundlePrefs.getString("cookiepermissionstext"),
+    ]);
+    appendSearchKeywords("showCookiesButton", [
+      bundlePrefs.getString("cookiesAll"),
+      bundlePrefs.getString("removeAllCookies.label"),
+      bundlePrefs.getString("removeAllShownCookies.label"),
+      bundlePrefs.getString("removeSelectedCookies.label"),
+    ]);
     appendSearchKeywords("trackingProtectionExceptions", [
       bundlePrefs.getString("trackingprotectionpermissionstitle"),
       bundlePrefs.getString("trackingprotectionpermissionstext2"),
     ]);
     appendSearchKeywords("changeBlockList", [
       bundlePrefs.getString("blockliststitle"),
       bundlePrefs.getString("blockliststext"),
     ]);
--- a/browser/components/preferences/in-content/privacy.xul
+++ b/browser/components/preferences/in-content/privacy.xul
@@ -310,35 +310,49 @@
                     preference="browser.formfill.enable"/>
           <hbox id="cookiesBox">
             <checkbox id="acceptCookies" label="&acceptCookies2.label;"
                       preference="network.cookie.cookieBehavior"
                       accesskey="&acceptCookies2.accesskey;"
                       onsyncfrompreference="return gPrivacyPane.readAcceptCookies();"
                       onsynctopreference="return gPrivacyPane.writeAcceptCookies();"
                       flex="1" />
-            <button id="cookieExceptions"
-                    class="accessory-button"
-                    label="&cookieExceptions.label;" accesskey="&cookieExceptions.accesskey;"
-                    preference="pref.privacy.disable_button.cookie_exceptions"/>
+            <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
+            <hbox>
+              <button id="cookieExceptions"
+                      class="accessory-button"
+                      label="&cookieExceptions.label;" accesskey="&cookieExceptions.accesskey;"
+                      preference="pref.privacy.disable_button.cookie_exceptions"
+                      searchkeywords="&address2.label;
+                                      &block.label;
+                                      &session.label;
+                                      &allow.label;
+                                      &removepermission2.label;
+                                      &removeallpermissions2.label;
+                                      &button.cancel.label;
+                                      &button.ok.label;"/>
+            </hbox>
           </hbox>
           <hbox id="acceptThirdPartyRow"
                 class="indent"
                 align="center">
             <label id="acceptThirdPartyLabel" control="acceptThirdPartyMenu"
                    accesskey="&acceptThirdParty2.pre.accesskey;">&acceptThirdParty2.pre.label;</label>
-            <menulist id="acceptThirdPartyMenu" preference="network.cookie.cookieBehavior"
-            onsyncfrompreference="return gPrivacyPane.readAcceptThirdPartyCookies();"
-            onsynctopreference="return gPrivacyPane.writeAcceptThirdPartyCookies();">
-              <menupopup>
-                <menuitem label="&acceptThirdParty.always.label;" value="always"/>
-                <menuitem label="&acceptThirdParty.visited.label;" value="visited"/>
-                <menuitem label="&acceptThirdParty.never.label;" value="never"/>
-              </menupopup>
-            </menulist>
+            <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
+            <hbox>
+              <menulist id="acceptThirdPartyMenu" preference="network.cookie.cookieBehavior"
+              onsyncfrompreference="return gPrivacyPane.readAcceptThirdPartyCookies();"
+              onsynctopreference="return gPrivacyPane.writeAcceptThirdPartyCookies();">
+                <menupopup>
+                  <menuitem label="&acceptThirdParty.always.label;" value="always"/>
+                  <menuitem label="&acceptThirdParty.visited.label;" value="visited"/>
+                  <menuitem label="&acceptThirdParty.never.label;" value="never"/>
+                </menupopup>
+              </menulist>
+            </hbox>
           </hbox>
           <hbox id="keepRow"
                 class="indent"
                 align="center">
             <label id="keepUntil"
                    control="keepCookiesUntil"
                    accesskey="&keepUntil2.accesskey;">&keepUntil2.label;</label>
             <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
@@ -347,32 +361,49 @@
                         preference="network.cookie.lifetimePolicy">
                 <menupopup>
                   <menuitem label="&expire.label;" value="0"/>
                   <menuitem label="&close.label;" value="2"/>
                 </menupopup>
               </menulist>
             </hbox>
             <spacer flex="1"/>
-            <button id="showCookiesButton"
-                    class="accessory-button"
-                    label="&showCookies.label;" accesskey="&showCookies.accesskey;"
-                    preference="pref.privacy.disable_button.view_cookies"/>
+            <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
+            <hbox>
+              <button id="showCookiesButton"
+                      class="accessory-button"
+                      label="&showCookies.label;"
+                      accesskey="&showCookies.accesskey;"
+                      preference="pref.privacy.disable_button.view_cookies"/>
+            </hbox>
           </hbox>
           <hbox id="clearDataBox"
                 align="center">
             <checkbox id="alwaysClear"
                       preference="privacy.sanitize.sanitizeOnShutdown"
                       label="&clearOnClose.label;"
                       accesskey="&clearOnClose.accesskey;"
                       flex="1" />
-            <button id="clearDataSettings"
-                    class="accessory-button"
-                    label="&clearOnCloseSettings.label;"
-                    accesskey="&clearOnCloseSettings.accesskey;"/>
+            <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
+            <hbox>
+              <button id="clearDataSettings"
+                      class="accessory-button"
+                      label="&clearOnCloseSettings.label;"
+                      accesskey="&clearOnCloseSettings.accesskey;"
+                      searchkeywords="&clearDataSettings2.label;
+                                      &historySection.label;
+                                      &itemHistoryAndDownloads.label;
+                                      &itemCookies.label;
+                                      &itemActiveLogins.label;
+                                      &itemCache.label;
+                                      &itemFormSearchHistory.label;
+                                      &dataSection.label;
+                                      &itemSitePreferences.label;
+                                      &itemOfflineApps.label;"/>
+            </hbox>
           </hbox>
         </vbox>
       </vbox>
     </vbox>
   </deck>
 </groupbox>
 
 <!-- Address Bar -->
--- a/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_placesTitleNoUpdate.js
+++ b/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_placesTitleNoUpdate.js
@@ -18,27 +18,29 @@ add_task(async function test() {
     "onTitleChanged", (uri, title) => uri.spec == TEST_URL, "history");
   let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_URL);
   registerCleanupFunction(async () => {
     await BrowserTestUtils.removeTab(tab);
   });
   info("Wait for a title change notification.");
   await promiseTitleChanged;
   await BrowserTestUtils.waitForCondition(async function() {
-    return (await PlacesUtils.history.fetch(TEST_URL)).title == TITLE_1;
-  }, "The title matches the orignal title after first visit");
+    let entry = await PlacesUtils.history.fetch(TEST_URL);
+    return entry && entry.title == TITLE_1;
+  }, "The title matches the original title after first visit");
 
   promiseTitleChanged = PlacesTestUtils.waitForNotification(
     "onTitleChanged", (uri, title) => uri.spec == TEST_URL, "history");
   await PlacesTestUtils.addVisits({ uri: TEST_URL, title: TITLE_2 });
   info("Wait for a title change notification.");
   await promiseTitleChanged;
   await BrowserTestUtils.waitForCondition(async function() {
-    return (await PlacesUtils.history.fetch(TEST_URL)).title == TITLE_2;
-  }, "The title matches the orignal title after updating visit");
+    let entry = await PlacesUtils.history.fetch(TEST_URL);
+    return entry && entry.title == TITLE_2;
+  }, "The title matches the original title after updating visit");
 
   let privateWin = await BrowserTestUtils.openNewBrowserWindow({private: true});
   registerCleanupFunction(async () => {
     await BrowserTestUtils.closeWindow(privateWin);
   });
   await BrowserTestUtils.openNewForegroundTab(privateWin.gBrowser, TEST_URL);
   // Wait long enough to be sure history didn't set a title.
   await new Promise(resolve => setTimeout(resolve, 1000));
--- a/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_placestitle.js
+++ b/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_placestitle.js
@@ -26,35 +26,38 @@ add_task(async function test() {
     await BrowserTestUtils.closeWindow(win);
   });
 
   let promiseTitleChanged = PlacesTestUtils.waitForNotification(
     "onTitleChanged", (uri, title) => uri.spec == TEST_URL, "history");
   await BrowserTestUtils.openNewForegroundTab(win.gBrowser, TEST_URL);
   await promiseTitleChanged;
   await BrowserTestUtils.waitForCondition(async function() {
-    return (await PlacesUtils.history.fetch(TEST_URL)).title == "No Cookie";
+    let entry = await PlacesUtils.history.fetch(TEST_URL);
+    return entry && entry.title == "No Cookie";
   }, "The page should be loaded without any cookie for the first time");
 
   promiseTitleChanged = PlacesTestUtils.waitForNotification(
     "onTitleChanged", (uri, title) => uri.spec == TEST_URL, "history");
   await BrowserTestUtils.openNewForegroundTab(win.gBrowser, TEST_URL);
   await promiseTitleChanged;
   await BrowserTestUtils.waitForCondition(async function() {
-    return (await PlacesUtils.history.fetch(TEST_URL)).title == "Cookie";
+    let entry = await PlacesUtils.history.fetch(TEST_URL);
+    return entry && entry.title == "Cookie";
   }, "The page should be loaded with a cookie for the second time");
 
   await cleanup();
 
   promiseTitleChanged = PlacesTestUtils.waitForNotification(
     "onTitleChanged", (uri, title) => uri.spec == TEST_URL, "history");
   await BrowserTestUtils.openNewForegroundTab(win.gBrowser, TEST_URL);
   await promiseTitleChanged;
   await BrowserTestUtils.waitForCondition(async function() {
-    return (await PlacesUtils.history.fetch(TEST_URL)).title == "No Cookie";
+    let entry = await PlacesUtils.history.fetch(TEST_URL);
+    return entry && entry.title == "No Cookie";
   }, "The page should be loaded without any cookie again");
 
   // Reopen the page in a private browser window, it should not notify a title
   // change.
   let win2 = await BrowserTestUtils.openNewBrowserWindow({private: true});
   registerCleanupFunction(async () => {
     let promisePBExit = TestUtils.topicObserved("last-pb-context-exited");
     await BrowserTestUtils.closeWindow(win2);
--- a/browser/extensions/onboarding/content/onboarding-tour-agent.js
+++ b/browser/extensions/onboarding/content/onboarding-tour-agent.js
@@ -1,27 +1,27 @@
 /* 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/. */
 
- /* globals Mozilla */
+/* globals Mozilla */
 
+(function() {
 "use strict";
 
-document.addEventListener("Agent:CanSetDefaultBrowserInBackground", () => {
+let onCanSetDefaultBrowserInBackground = () => {
   Mozilla.UITour.getConfiguration("appinfo", config => {
     let canSetInBackGround = config.canSetDefaultBrowserInBackground;
     let btn = document.getElementById("onboarding-tour-default-browser-button");
     btn.setAttribute("data-cansetbg", canSetInBackGround);
     btn.textContent = canSetInBackGround ? btn.getAttribute("data-bg") : btn.getAttribute("data-panel");
   });
-});
+};
 
-document.getElementById("onboarding-overlay")
-  .addEventListener("click", evt => {
+let onClick = evt => {
   switch (evt.target.id) {
     case "onboarding-tour-addons-button":
       Mozilla.UITour.showHighlight("addons");
       break;
     case "onboarding-tour-customize-button":
       Mozilla.UITour.showHighlight("customize");
       break;
     case "onboarding-tour-default-browser-button":
@@ -58,18 +58,32 @@ document.getElementById("onboarding-over
       }
       break;
     case "onboarding-overlay":
     case "onboarding-overlay-close-btn":
       // Dismiss any highlights if a user tries to close the dialog.
       Mozilla.UITour.hideHighlight();
       break;
   }
-  // Dismiss any highlights if a user tries to change to other tours.
-  if (evt.target.classList.contains("onboarding-tour-item")) {
-    Mozilla.UITour.hideHighlight();
+  let classList = evt.target.classList;
+  // On keyboard navigation the target would be .onboarding-tour-item.
+  // On mouse clicking the target would be .onboarding-tour-item-container.
+  if (classList.contains("onboarding-tour-item") || classList.contains("onboarding-tour-item-container")) {
+    Mozilla.UITour.hideHighlight(); // Clean up UITour if a user tries to change to other tours.
+  }
+};
+
+let overlay = document.getElementById("onboarding-overlay");
+overlay.addEventListener("click", onClick);
+overlay.addEventListener("keypress", e => {
+  let { target, key } = e;
+  let classList = target.classList;
+  if ((key == " " || key == "Enter") &&
+      // On keyboard navigation the target would be .onboarding-tour-item.
+      // On mouse clicking the target would be .onboarding-tour-item-container.
+      (classList.contains("onboarding-tour-item") || classList.contains("onboarding-tour-item-container"))) {
+    Mozilla.UITour.hideHighlight(); // Clean up UITour if a user tries to change to other tours.
   }
 });
+document.getElementById("onboarding-overlay-button").addEventListener("Agent:Destroy", () => Mozilla.UITour.hideHighlight());
+document.addEventListener("Agent:CanSetDefaultBrowserInBackground", onCanSetDefaultBrowserInBackground);
 
-document.getElementById("onboarding-overlay-button").addEventListener("Agent:Destroy", () => {
-  Mozilla.UITour.hideHighlight();
-  Mozilla.UITour.hideMenu("urlbar");
-});
+})();
--- a/browser/extensions/onboarding/content/onboarding.css
+++ b/browser/extensions/onboarding/content/onboarding.css
@@ -380,97 +380,97 @@
 
 /* Tour Icons */
 #onboarding-tour-singlesearch,
 #onboarding-notification-bar[data-target-tour-id=onboarding-tour-singlesearch] #onboarding-notification-tour-title::before {
   background-image: url("img/icons_singlesearch.svg");
 }
 
 #onboarding-tour-singlesearch.onboarding-active,
-#onboarding-tour-singlesearch:hover {
+.onboarding-tour-item-container:hover #onboarding-tour-singlesearch {
   background-image: url("img/icons_singlesearch-colored.svg");
 }
 
 #onboarding-tour-private-browsing,
 #onboarding-notification-bar[data-target-tour-id=onboarding-tour-private-browsing] #onboarding-notification-tour-title::before {
   background-image: url("img/icons_private.svg");
 }
 
 #onboarding-tour-private-browsing.onboarding-active,
-#onboarding-tour-private-browsing:hover {
+.onboarding-tour-item-container:hover #onboarding-tour-private-browsing {
   background-image: url("img/icons_private-colored.svg");
 }
 
 #onboarding-tour-addons,
 #onboarding-notification-bar[data-target-tour-id=onboarding-tour-addons] #onboarding-notification-tour-title::before {
   background-image: url("img/icons_addons.svg");
 }
 
 #onboarding-tour-addons.onboarding-active,
-#onboarding-tour-addons:hover {
+.onboarding-tour-item-container:hover #onboarding-tour-addons {
   background-image: url("img/icons_addons-colored.svg");
 }
 
 #onboarding-tour-customize,
 #onboarding-notification-bar[data-target-tour-id=onboarding-tour-customize] #onboarding-notification-tour-title::before {
   background-image: url("img/icons_customize.svg");
 }
 
 #onboarding-tour-customize.onboarding-active,
-#onboarding-tour-customize:hover {
+.onboarding-tour-item-container:hover #onboarding-tour-customize {
   background-image: url("img/icons_customize-colored.svg");
 }
 
 #onboarding-tour-default-browser ,
 #onboarding-notification-bar[data-target-tour-id=onboarding-tour-default-browser] #onboarding-notification-tour-title::before {
   background-image: url("img/icons_default.svg");
 }
 
 #onboarding-tour-default-browser.onboarding-active,
-#onboarding-tour-default-browser:hover {
+.onboarding-tour-item-container:hover #onboarding-tour-default-browser {
   background-image: url("img/icons_default-colored.svg");
 }
 
 #onboarding-tour-sync,
 #onboarding-notification-bar[data-target-tour-id=onboarding-tour-sync] #onboarding-notification-tour-title::before {
   background-image: url("img/icons_sync.svg");
 }
 
 #onboarding-tour-sync.onboarding-active,
-#onboarding-tour-sync:hover {
+.onboarding-tour-item-container:hover #onboarding-tour-sync {
   background-image: url("img/icons_sync-colored.svg");
 }
 
 #onboarding-tour-library,
 #onboarding-notification-bar[data-target-tour-id=onboarding-tour-library] #onboarding-notification-tour-title::before {
   background-image: url("img/icons_library.svg");
 }
 
 #onboarding-tour-library.onboarding-active,
-#onboarding-tour-library:hover {
+.onboarding-tour-item-container:hover #onboarding-tour-library {
   background-image: url("img/icons_library-colored.svg");
 }
 
 #onboarding-tour-performance,
 #onboarding-notification-bar[data-target-tour-id=onboarding-tour-performance] #onboarding-notification-tour-title::before {
   background-image: url("img/icons_performance.svg");
 }
 
 #onboarding-tour-performance.onboarding-active,
-#onboarding-tour-performance:hover {
+.onboarding-tour-item-container:hover #onboarding-tour-performance {
   background-image: url("img/icons_performance-colored.svg");
 }
 
 #onboarding-tour-screenshots,
 #onboarding-notification-bar[data-target-tour-id=onboarding-tour-screenshots] #onboarding-notification-tour-title::before {
   background-image: url("img/icons_screenshots.svg");
 }
 
 #onboarding-tour-screenshots.onboarding-active,
-#onboarding-tour-screenshots:hover {
+.onboarding-tour-item-container:hover #onboarding-tour-screenshots {
   background-image: url("img/icons_screenshots-colored.svg");
 }
 
 a#onboarding-tour-screenshots-button,
 a#onboarding-tour-screenshots-button:hover,
 a#onboarding-tour-screenshots-button:visited {
   color: #fff;
   text-decoration: none;
--- a/browser/extensions/onboarding/test/browser/browser.ini
+++ b/browser/extensions/onboarding/test/browser/browser.ini
@@ -10,8 +10,9 @@ skip-if = debug || os == "mac" # Full ke
 [browser_onboarding_notification_3.js]
 [browser_onboarding_notification_4.js]
 [browser_onboarding_notification_5.js]
 [browser_onboarding_notification_click_auto_complete_tour.js]
 [browser_onboarding_select_default_tour.js]
 [browser_onboarding_skip_tour.js]
 [browser_onboarding_tours.js]
 [browser_onboarding_tourset.js]
+[browser_onboarding_uitour.js]
--- a/browser/extensions/onboarding/test/browser/browser_onboarding_tours.js
+++ b/browser/extensions/onboarding/test/browser/browser_onboarding_tours.js
@@ -20,23 +20,16 @@ function assertTourCompleted(tourId, exp
     } else {
       ok(!item.classList.contains("onboarding-complete"), `Should not set the incomplete #${args.tourId} tour with the complete style`);
       ok(!completedText, "Text label should not be present for an incomplete item");
       ok(!item.hasAttribute("aria-describedby"), "Incomplete item should not have aria-describedby attribute set");
     }
   });
 }
 
-function promisePopupChange(popup, expectedState) {
-  return new Promise(resolve => {
-    let event = expectedState == "open" ? "popupshown" : "popuphidden";
-    popup.addEventListener(event, resolve, { once: true });
-  });
-}
-
 add_task(async function test_set_right_tour_completed_style_on_overlay() {
   resetOnboardingDefaultState();
 
   let tourIds = TOUR_IDs;
   // Mark the tours of even number as completed
   for (let i = 0; i < tourIds.length; ++i) {
     setTourCompletedState(tourIds[i], i % 2 == 0);
   }
@@ -90,84 +83,8 @@ add_task(async function test_click_actio
     let tab = tabs[i];
     await assertOverlaySemantics(tab.linkedBrowser);
     for (let id of tourIds) {
       await assertTourCompleted(id, id == completedTourId, tab.linkedBrowser);
     }
     await BrowserTestUtils.removeTab(tab);
   }
 });
-
-add_task(async function test_clean_up_uitour_on_page_unload() {
-  resetOnboardingDefaultState();
-  await SpecialPowers.pushPrefEnv({set: [
-    ["browser.onboarding.newtour", "singlesearch,customize"],
-  ]});
-
-  let tab = await openTab(ABOUT_NEWTAB_URL);
-  await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
-  await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-button", {}, tab.linkedBrowser);
-  await promiseOnboardingOverlayOpened(tab.linkedBrowser);
-
-  // Trigger UITour showHighlight and showMenu
-  let highlight = document.getElementById("UITourHighlightContainer");
-  let urlbarOpenPromise = promisePopupChange(gURLBar.popup, "open");
-  let highlightOpenPromise = promisePopupChange(highlight, "open");
-  BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-tour-singlesearch", {}, tab.linkedBrowser);
-  BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-tour-singlesearch-button", {}, tab.linkedBrowser);
-  BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-tour-customize", {}, tab.linkedBrowser);
-  BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-tour-customize-button", {}, tab.linkedBrowser);
-  await urlbarOpenPromise;
-  await highlightOpenPromise;
-  is(gURLBar.popup.state, "open", "Should show urlbar popup");
-  is(highlight.state, "open", "Should show UITour highlight");
-  is(highlight.getAttribute("targetName"), "customize", "UITour should highlight customize");
-
-  // Load another page to unload the current page
-  let urlbarClosePromise = promisePopupChange(gURLBar.popup, "closed");
-  let highlightClosePromise = promisePopupChange(highlight, "closed");
-  await BrowserTestUtils.loadURI(tab.linkedBrowser, "http://example.com");
-  await urlbarClosePromise;
-  await highlightClosePromise;
-  is(gURLBar.popup.state, "closed", "Should close urlbar popup after page unloaded");
-  is(highlight.state, "closed", "Should close UITour highlight after page unloaded");
-
-  await BrowserTestUtils.removeTab(tab);
-});
-
-add_task(async function test_clean_up_uitour_on_window_resize() {
-  resetOnboardingDefaultState();
-  await SpecialPowers.pushPrefEnv({set: [
-    ["browser.onboarding.newtour", "singlesearch,customize"],
-  ]});
-
-  let tab = await openTab(ABOUT_NEWTAB_URL);
-  await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
-  await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-button", {}, tab.linkedBrowser);
-  await promiseOnboardingOverlayOpened(tab.linkedBrowser);
-
-  // Trigger UITour showHighlight and showMenu
-  let highlight = document.getElementById("UITourHighlightContainer");
-  let urlbarOpenPromise = promisePopupChange(gURLBar.popup, "open");
-  let highlightOpenPromise = promisePopupChange(highlight, "open");
-  BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-tour-singlesearch", {}, tab.linkedBrowser);
-  BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-tour-singlesearch-button", {}, tab.linkedBrowser);
-  BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-tour-customize", {}, tab.linkedBrowser);
-  BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-tour-customize-button", {}, tab.linkedBrowser);
-  await urlbarOpenPromise;
-  await highlightOpenPromise;
-  is(gURLBar.popup.state, "open", "Should show urlbar popup");
-  is(highlight.state, "open", "Should show UITour highlight");
-  is(highlight.getAttribute("targetName"), "customize", "UITour should highlight customize");
-
-  // Resize window to destroy the onboarding tour
-  const originalWidth = window.innerWidth;
-  let urlbarClosePromise = promisePopupChange(gURLBar.popup, "closed");
-  let highlightClosePromise = promisePopupChange(highlight, "closed");
-  window.innerWidth = 300;
-  await urlbarClosePromise;
-  await highlightClosePromise;
-  is(gURLBar.popup.state, "closed", "Should close urlbar popup after window resized");
-  is(highlight.state, "closed", "Should close UITour highlight after window resized");
-
-  window.innerWidth = originalWidth;
-  await BrowserTestUtils.removeTab(tab);
-});
new file mode 100644
--- /dev/null
+++ b/browser/extensions/onboarding/test/browser/browser_onboarding_uitour.js
@@ -0,0 +1,129 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+requestLongerTimeout(3);
+
+function promisePopupChange(popup, expectedState) {
+  return new Promise(resolve => {
+    let event = expectedState == "open" ? "popupshown" : "popuphidden";
+    popup.addEventListener(event, resolve, { once: true });
+  });
+}
+
+async function promiseOpenOnboardingOverlay(tab) {
+  await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
+  await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-button", {}, tab.linkedBrowser);
+  return promiseOnboardingOverlayOpened(tab.linkedBrowser);
+}
+
+async function triggerCustomizeUITourHighlight(tab) {
+  await promiseOpenOnboardingOverlay(tab);
+  BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-tour-customize", {}, tab.linkedBrowser);
+  BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-tour-customize-button", {}, tab.linkedBrowser);
+}
+
+add_task(async function test_clean_up_uitour_after_navigating_to_other_tour_by_keyboard() {
+  resetOnboardingDefaultState();
+  await SpecialPowers.pushPrefEnv({set: [
+    ["browser.onboarding.newtour", "singlesearch,customize"],
+  ]});
+
+  let tab = await openTab(ABOUT_NEWTAB_URL);
+  await promiseOpenOnboardingOverlay(tab);
+
+  // Navigate to the Customize tour to trigger UITour showHighlight
+  let highlight = document.getElementById("UITourHighlightContainer");
+  let highlightOpenPromise = promisePopupChange(highlight, "open");
+  tab.linkedBrowser.focus(); // Make sure the key event will be fired on the focused page
+  await BrowserTestUtils.synthesizeKey("VK_TAB", {}, tab.linkedBrowser);
+  await BrowserTestUtils.synthesizeKey("VK_TAB", {}, tab.linkedBrowser);
+  await BrowserTestUtils.synthesizeKey("VK_RETURN", {}, tab.linkedBrowser);
+  await BrowserTestUtils.synthesizeKey("VK_TAB", {}, tab.linkedBrowser);
+  await BrowserTestUtils.synthesizeKey("VK_RETURN", {}, tab.linkedBrowser);
+  await highlightOpenPromise;
+  is(highlight.state, "open", "Should show UITour highlight");
+  is(highlight.getAttribute("targetName"), "customize", "UITour should highlight customize");
+
+  // Navigate to the Single-Search tour
+  let highlightClosePromise = promisePopupChange(highlight, "closed");
+  tab.linkedBrowser.focus(); // Make sure the key event will be fired on the focused page
+  await BrowserTestUtils.synthesizeKey("VK_TAB", { shiftKey: true }, tab.linkedBrowser);
+  await BrowserTestUtils.synthesizeKey("VK_TAB", { shiftKey: true }, tab.linkedBrowser);
+  await BrowserTestUtils.synthesizeKey("VK_RETURN", {}, tab.linkedBrowser);
+  await highlightClosePromise;
+  is(highlight.state, "closed", "Should close UITour highlight after navigating to another tour by keyboard");
+  await BrowserTestUtils.removeTab(tab);
+});
+
+add_task(async function test_clean_up_uitour_after_navigating_to_other_tour_by_mouse() {
+  resetOnboardingDefaultState();
+  await SpecialPowers.pushPrefEnv({set: [
+    ["browser.onboarding.newtour", "singlesearch,customize"],
+  ]});
+
+  // Navigate to the Customize tour to trigger UITour showHighlight
+  let highlight = document.getElementById("UITourHighlightContainer");
+  let highlightOpenPromise = promisePopupChange(highlight, "open");
+  let tab = await openTab(ABOUT_NEWTAB_URL);
+  await triggerCustomizeUITourHighlight(tab);
+  await highlightOpenPromise;
+  is(highlight.state, "open", "Should show UITour highlight");
+  is(highlight.getAttribute("targetName"), "customize", "UITour should highlight customize");
+
+  // Navigate to the Single-Search tour
+  let highlightClosePromise = promisePopupChange(highlight, "closed");
+  BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-tour-singlesearch", {}, tab.linkedBrowser);
+  await highlightClosePromise;
+  is(highlight.state, "closed", "Should close UITour highlight after navigating to another tour by mouse");
+  await BrowserTestUtils.removeTab(tab);
+});
+
+add_task(async function test_clean_up_uitour_on_page_unload() {
+  resetOnboardingDefaultState();
+  await SpecialPowers.pushPrefEnv({set: [
+    ["browser.onboarding.newtour", "singlesearch,customize"],
+  ]});
+
+  // Trigger UITour showHighlight
+  let highlight = document.getElementById("UITourHighlightContainer");
+  let highlightOpenPromise = promisePopupChange(highlight, "open");
+  let tab = await openTab(ABOUT_NEWTAB_URL);
+  await triggerCustomizeUITourHighlight(tab);
+  await highlightOpenPromise;
+  is(highlight.state, "open", "Should show UITour highlight");
+  is(highlight.getAttribute("targetName"), "customize", "UITour should highlight customize");
+
+  // Load another page to unload the current page
+  let highlightClosePromise = promisePopupChange(highlight, "closed");
+  await BrowserTestUtils.loadURI(tab.linkedBrowser, "http://example.com");
+  await highlightClosePromise;
+  is(highlight.state, "closed", "Should close UITour highlight after page unloaded");
+  await BrowserTestUtils.removeTab(tab);
+});
+
+add_task(async function test_clean_up_uitour_on_window_resize() {
+  resetOnboardingDefaultState();
+  await SpecialPowers.pushPrefEnv({set: [
+    ["browser.onboarding.newtour", "singlesearch,customize"],
+  ]});
+
+  // Trigger UITour showHighlight
+  let highlight = document.getElementById("UITourHighlightContainer");
+  let highlightOpenPromise = promisePopupChange(highlight, "open");
+  let tab = await openTab(ABOUT_NEWTAB_URL);
+  await triggerCustomizeUITourHighlight(tab);
+  await highlightOpenPromise;
+  is(highlight.state, "open", "Should show UITour highlight");
+  is(highlight.getAttribute("targetName"), "customize", "UITour should highlight customize");
+
+  // Resize window to destroy the onboarding tour
+  const originalWidth = window.innerWidth;
+  let highlightClosePromise = promisePopupChange(highlight, "closed");
+  window.innerWidth = 300;
+  await highlightClosePromise;
+  is(highlight.state, "closed", "Should close UITour highlight after window resized");
+  window.innerWidth = originalWidth;
+  await BrowserTestUtils.removeTab(tab);
+});
--- a/browser/themes/osx/customizableui/panelUI.css
+++ b/browser/themes/osx/customizableui/panelUI.css
@@ -11,16 +11,20 @@
 .restoreallitem > .toolbarbutton-icon {
   display: none;
 }
 
 .subviewbutton {
   padding-inline-start: 18px;
 }
 
+photonpanelmultiview .toolbaritem-combined-buttons > label {
+  padding-inline-start: 42px; /* 18px toolbarbutton padding + 16px icon + 8px label padding start */
+}
+
 .subviewbutton[checked="true"] {
   background-position: top 7px left 4px;
 }
 
 .subviewbutton[checked="true"]:-moz-locale-dir(rtl) {
   background-position: top 7px right 4px;
 }
 
--- a/browser/themes/shared/customizableui/panelUI.inc.css
+++ b/browser/themes/shared/customizableui/panelUI.inc.css
@@ -824,23 +824,23 @@ toolbaritem[cui-areatype="menu-panel"][s
 #appMenu-fxa-container[fxastatus="signedin"] > #appMenu-fxa-status > #appMenu-fxa-label > .toolbarbutton-icon,
 #appMenu-fxa-container:not([fxastatus="signedin"]) > toolbarseparator,
 #appMenu-fxa-container:not([fxastatus="signedin"]) > #appMenu-fxa-icon,
 #appMenu-fxa-container:not([fxastatus="signedin"]) > #appMenu-fxa-status > #appMenu-fxa-avatar {
   display: none;
 }
 
 #appMenu-fxa-container[fxastatus="signedin"] > #appMenu-fxa-status > #appMenu-fxa-label {
-  /* 12px space before the avatar, then 16px for the avatar */
-  padding-inline-start: 28px;
-  margin-inline-start: -28px;
+  /* 18px space before the avatar, then 16px for the avatar */
+  padding-inline-start: 34px;
+  margin-inline-start: -34px;
 }
 
 #appMenu-fxa-container[fxastatus="signedin"] > #appMenu-fxa-status > #appMenu-fxa-avatar {
-  margin-inline-start: 12px;
+  margin-inline-start: 18px;
 }
 
 /* Error states */
 #appMenu-fxa-container[fxastatus="unverified"] > #appMenu-fxa-status > #appMenu-fxa-label,
 #appMenu-fxa-container[fxastatus="login-failed"] > #appMenu-fxa-status > #appMenu-fxa-label {
   list-style-image: url(chrome://browser/skin/warning.svg);
   -moz-image-region: rect(0, 16px, 16px, 0);
 }
--- a/devtools/client/responsive.html/manager.js
+++ b/devtools/client/responsive.html/manager.js
@@ -491,16 +491,18 @@ ResponsiveUI.prototype = {
   onChangePixelRatio(event) {
     let { pixelRatio } = event.data;
     this.updateDPPX(pixelRatio);
   },
 
   onChangeTouchSimulation(event) {
     let { enabled } = event.data;
     this.updateTouchSimulation(enabled);
+    // Used by tests
+    this.emit("touch-simulation-changed");
   },
 
   onContentResize(event) {
     let { width, height } = event.data;
     this.emit("content-resize", {
       width,
       height,
     });
@@ -545,23 +547,24 @@ ResponsiveUI.prototype = {
     if (!userAgent) {
       yield this.emulationFront.clearUserAgentOverride();
       return;
     }
     yield this.emulationFront.setUserAgentOverride(userAgent);
   }),
 
   updateTouchSimulation: Task.async(function* (enabled) {
-    if (!enabled) {
-      yield this.emulationFront.clearTouchEventsOverride();
-      return;
+    let reloadNeeded;
+    if (enabled) {
+      reloadNeeded = yield this.emulationFront.setTouchEventsOverride(
+        Ci.nsIDocShell.TOUCHEVENTS_OVERRIDE_ENABLED
+      );
+    } else {
+      reloadNeeded = yield this.emulationFront.clearTouchEventsOverride();
     }
-    let reloadNeeded = yield this.emulationFront.setTouchEventsOverride(
-      Ci.nsIDocShell.TOUCHEVENTS_OVERRIDE_ENABLED
-    );
     if (reloadNeeded) {
       this.getViewportBrowser().reload();
     }
   }),
 
   /**
    * Helper for tests. Assumes a single viewport for now.
    */
--- a/devtools/client/responsive.html/test/browser/browser_touch_device.js
+++ b/devtools/client/responsive.html/test/browser/browser_touch_device.js
@@ -25,16 +25,17 @@ addDeviceForTest(testDevice);
 addRDMTask(TEST_URL, function* ({ ui, manager }) {
   yield waitStartup(ui);
 
   yield testDefaults(ui);
   yield testChangingDevice(ui);
   yield testResizingViewport(ui, true, false);
   yield testEnableTouchSimulation(ui);
   yield testResizingViewport(ui, false, true);
+  yield testDisableTouchSimulation(ui);
 });
 
 function* waitStartup(ui) {
   let { store } = ui.toolWindow;
 
   // Wait until the viewport has been added and the device list has been loaded
   yield waitUntilState(store, state => state.viewports.length == 1
     && state.devices.listState == Types.deviceListState.LOADED);
@@ -51,27 +52,37 @@ function* testChangingDevice(ui) {
   info("Test Changing Device");
 
   yield selectDevice(ui, testDevice.name);
   yield waitForViewportResizeTo(ui, testDevice.width, testDevice.height);
   yield testTouchEventsOverride(ui, true);
   testViewportDeviceSelectLabel(ui, testDevice.name);
 }
 
-function* testResizingViewport(ui, device, expected) {
-  info(`Test resizing the viewport, device ${device}, expected ${expected}`);
+function* testResizingViewport(ui, device, touch) {
+  info(`Test resizing the viewport, device ${device}, touch ${touch}`);
 
-  let deviceRemoved = once(ui, "device-removed");
+  let deviceRemoved;
+  if (device) {
+    deviceRemoved = once(ui, "device-removed");
+  }
   yield testViewportResize(ui, ".viewport-vertical-resize-handle",
     [-10, -10], [testDevice.width, testDevice.height - 10], [0, -10], ui);
   if (device) {
     yield deviceRemoved;
   }
-  yield testTouchEventsOverride(ui, expected);
+  yield testTouchEventsOverride(ui, touch);
   testViewportDeviceSelectLabel(ui, "no device selected");
 }
 
 function* testEnableTouchSimulation(ui) {
   info("Test enabling touch simulation via button");
 
-  yield enableTouchSimulation(ui);
+  yield toggleTouchSimulation(ui);
   yield testTouchEventsOverride(ui, true);
 }
+
+function* testDisableTouchSimulation(ui) {
+  info("Test disabling touch simulation via button");
+
+  yield toggleTouchSimulation(ui);
+  yield testTouchEventsOverride(ui, false);
+}
--- a/devtools/client/responsive.html/test/browser/browser_touch_simulation.js
+++ b/devtools/client/responsive.html/test/browser/browser_touch_simulation.js
@@ -6,17 +6,17 @@
 // Test global touch simulation button
 
 const TEST_URL = `${URL_ROOT}touch.html`;
 const PREF_DOM_META_VIEWPORT_ENABLED = "dom.meta-viewport.enabled";
 
 addRDMTask(TEST_URL, function* ({ ui }) {
   yield waitBootstrap(ui);
   yield testWithNoTouch(ui);
-  yield enableTouchSimulation(ui);
+  yield toggleTouchSimulation(ui);
   yield testWithTouch(ui);
   yield testWithMetaViewportEnabled(ui);
   yield testWithMetaViewportDisabled(ui);
   testTouchButton(ui);
 });
 
 function* testWithNoTouch(ui) {
   yield injectEventUtils(ui);
--- a/devtools/client/responsive.html/test/browser/head.js
+++ b/devtools/client/responsive.html/test/browser/head.js
@@ -364,22 +364,23 @@ function* testTouchEventsOverride(ui, ex
 function testViewportDeviceSelectLabel(ui, expected) {
   info("Test viewport's device select label");
 
   let select = ui.toolWindow.document.querySelector(".viewport-device-selector");
   is(select.selectedOptions[0].textContent, expected,
      `Device Select value should be: ${expected}`);
 }
 
-function* enableTouchSimulation(ui) {
+function* toggleTouchSimulation(ui) {
   let { document } = ui.toolWindow;
   let touchButton = document.querySelector("#global-touch-simulation-button");
+  let changed = once(ui, "touch-simulation-changed");
   let loaded = waitForViewportLoad(ui);
   touchButton.click();
-  yield loaded;
+  yield Promise.all([ changed, loaded ]);
 }
 
 function* testUserAgent(ui, expected) {
   let ua = yield ContentTask.spawn(ui.getViewportBrowser(), {}, function* () {
     return content.navigator.userAgent;
   });
   is(ua, expected, `UA should be set to ${expected}`);
 }
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -8309,26 +8309,21 @@ nsDocShell::CanSavePresentation(uint32_t
   }
 
   // Avoid doing the work of saving the presentation state in the case where
   // the content viewer cache is disabled.
   if (nsSHistory::GetMaxTotalViewers() == 0) {
     return false;
   }
 
-  // Don't cache the content viewer if we're in a subframe and the subframe
-  // pref is disabled.
-  bool cacheFrames =
-    Preferences::GetBool("browser.sessionhistory.cache_subframes", false);
-  if (!cacheFrames) {
-    nsCOMPtr<nsIDocShellTreeItem> root;
-    GetSameTypeParent(getter_AddRefs(root));
-    if (root && root != this) {
-      return false;  // this is a subframe load
-    }
+  // Don't cache the content viewer if we're in a subframe.
+  nsCOMPtr<nsIDocShellTreeItem> root;
+  GetSameTypeParent(getter_AddRefs(root));
+  if (root && root != this) {
+    return false;  // this is a subframe load
   }
 
   // If the document does not want its presentation cached, then don't.
   nsCOMPtr<nsIDocument> doc = mScriptGlobal->GetExtantDoc();
   return doc && doc->CanSavePresentation(aNewRequest);
 }
 
 void
--- a/docshell/shistory/nsISHistoryInternal.idl
+++ b/docshell/shistory/nsISHistoryInternal.idl
@@ -116,14 +116,28 @@ interface nsISHistoryInternal: nsISuppor
     *        The container to start looking for dynamic entries. Only the
     *        dynamic descendants of the container will be removed. If not given,
     *        all dynamic entries at the index will be removed.
     */
    [noscript, notxpcom] void RemoveDynEntries(in long aIndex,
                                               in nsISHContainer aContainer);
 
    /**
+    * Similar to RemoveDynEntries, but instead of specifying an index, use the
+    * given BFCacheEntry to find the index and remove dynamic entries from the
+    * index.
+    *
+    * The method takes no effect if the bfcache entry is not or no longer hold
+    * by the SHistory instance.
+    *
+    * @param aEntry
+    *        The bfcache entry to look up for index to remove dynamic entries
+    *        from.
+    */
+   [noscript, notxpcom] void RemoveDynEntriesForBFCacheEntry(in nsIBFCacheEntry aEntry);
+
+   /**
     * Removes entries from the history if their docshellID is in
     * aIDs array.
     */
    [noscript, notxpcom] void RemoveEntries(in nsDocshellIDArray aIDs,
                                            in long aStartIndex);
 };
--- a/docshell/shistory/nsSHEntryShared.cpp
+++ b/docshell/shistory/nsSHEntryShared.cpp
@@ -163,76 +163,76 @@ nsSHEntryShared::SetContentViewer(nsICon
   return NS_OK;
 }
 
 nsresult
 nsSHEntryShared::RemoveFromBFCacheSync()
 {
   MOZ_ASSERT(mContentViewer && mDocument, "we're not in the bfcache!");
 
+  // The call to DropPresentationState could drop the last reference, so hold
+  // |this| until RemoveDynEntriesForBFCacheEntry finishes.
+  RefPtr<nsSHEntryShared> kungFuDeathGrip = this;
+
+  // DropPresentationState would clear mContentViewer.
   nsCOMPtr<nsIContentViewer> viewer = mContentViewer;
   DropPresentationState();
 
-  // Warning! The call to DropPresentationState could have dropped the last
-  // reference to this object, so don't access members beyond here.
-
   if (viewer) {
     viewer->Destroy();
   }
 
+  // Now that we've dropped the viewer, we have to clear associated dynamic
+  // subframe entries.
+  nsCOMPtr<nsISHistoryInternal> shistory = do_QueryReferent(mSHistory);
+  if (shistory) {
+    shistory->RemoveDynEntriesForBFCacheEntry(this);
+  }
+
   return NS_OK;
 }
 
-class DestroyViewerEvent : public mozilla::Runnable
-{
-public:
-  DestroyViewerEvent(nsIContentViewer* aViewer, nsIDocument* aDocument)
-    : mozilla::Runnable("DestroyViewerEvent")
-    , mViewer(aViewer)
-    , mDocument(aDocument)
-  {
-  }
-
-  NS_IMETHOD Run() override
-  {
-    if (mViewer) {
-      mViewer->Destroy();
-    }
-    return NS_OK;
-  }
-
-  nsCOMPtr<nsIContentViewer> mViewer;
-  nsCOMPtr<nsIDocument> mDocument;
-};
-
 nsresult
 nsSHEntryShared::RemoveFromBFCacheAsync()
 {
   MOZ_ASSERT(mContentViewer && mDocument, "we're not in the bfcache!");
 
-  // Release the reference to the contentviewer asynchronously so that the
-  // document doesn't get nuked mid-mutation.
-
+  // Check it again to play safe in release builds.
   if (!mDocument) {
     return NS_ERROR_UNEXPECTED;
   }
-  nsCOMPtr<nsIRunnable> evt = new DestroyViewerEvent(mContentViewer, mDocument);
-  nsresult rv = mDocument->Dispatch(mozilla::TaskCategory::Other, evt.forget());
+
+  // DropPresentationState would clear mContentViewer & mDocument. Capture and
+  // release the references asynchronously so that the document doesn't get
+  // nuked mid-mutation.
+  nsCOMPtr<nsIContentViewer> viewer = mContentViewer;
+  nsCOMPtr<nsIDocument> document = mDocument;
+  RefPtr<nsSHEntryShared> self = this;
+  nsresult rv = mDocument->Dispatch(mozilla::TaskCategory::Other,
+    NS_NewRunnableFunction("nsSHEntryShared::RemoveFromBFCacheAsync",
+    [self, viewer, document]() {
+      if (viewer) {
+        viewer->Destroy();
+      }
+
+      nsCOMPtr<nsISHistoryInternal> shistory = do_QueryReferent(self->mSHistory);
+      if (shistory) {
+        shistory->RemoveDynEntriesForBFCacheEntry(self);
+      }
+    }));
+
   if (NS_FAILED(rv)) {
-    NS_WARNING("failed to dispatch DestroyViewerEvent");
+    NS_WARNING("Failed to dispatch RemoveFromBFCacheAsync runnable.");
   } else {
     // Drop presentation. Only do this if we succeeded in posting the event
     // since otherwise the document could be torn down mid-mutation, causing
     // crashes.
     DropPresentationState();
   }
 
-  // Careful! The call to DropPresentationState could have dropped the last
-  // reference to this nsSHEntryShared, so don't access members beyond here.
-
   return NS_OK;
 }
 
 nsresult
 nsSHEntryShared::GetID(uint64_t* aID)
 {
   *aID = mID;
   return NS_OK;
--- a/docshell/shistory/nsSHistory.cpp
+++ b/docshell/shistory/nsSHistory.cpp
@@ -208,17 +208,17 @@ nsSHistory::EvictContentViewerForTransac
   entry->GetAnyContentViewer(getter_AddRefs(ownerEntry),
                              getter_AddRefs(viewer));
   if (viewer) {
     NS_ASSERTION(ownerEntry, "Content viewer exists but its SHEntry is null");
 
     LOG_SHENTRY_SPEC(("Evicting content viewer 0x%p for "
                       "owning SHEntry 0x%p at %s.",
                       viewer.get(), ownerEntry.get(), _spec),
-                     ownerEntry);
+                      ownerEntry);
 
     // Drop the presentation state before destroying the viewer, so that
     // document teardown is able to correctly persist the state.
     ownerEntry->SetContentViewer(nullptr);
     ownerEntry->SyncPresentationState();
     viewer->Destroy();
   }
 
@@ -583,17 +583,17 @@ nsSHistory::GetEntryAtIndex(int32_t aInd
         NOTIFY_LISTENERS(OnIndexChanged, (mIndex))
       }
     }
   }
   return rv;
 }
 
 /* Get the transaction at a given index */
-NS_IMETHODIMP
+nsresult
 nsSHistory::GetTransactionAtIndex(int32_t aIndex, nsISHTransaction** aResult)
 {
   nsresult rv;
   NS_ENSURE_ARG_POINTER(aResult);
 
   if (mLength <= 0 || aIndex < 0 || aIndex >= mLength) {
     return NS_ERROR_FAILURE;
   }
@@ -1285,18 +1285,23 @@ nsSHistory::GloballyEvictContentViewers(
   for (int32_t i = transactions.Length() - 1; i >= sHistoryMaxTotalViewers;
        --i) {
     (transactions[i].mSHistory)->
       EvictContentViewerForTransaction(transactions[i].mTransaction);
   }
 }
 
 nsresult
-nsSHistory::EvictExpiredContentViewerForEntry(nsIBFCacheEntry* aEntry)
+nsSHistory::FindTransactionForBFCache(nsIBFCacheEntry* aEntry,
+                                      nsISHTransaction** aResult,
+                                      int32_t* aResultIndex)
 {
+  *aResult = nullptr;
+  *aResultIndex = -1;
+
   int32_t startIndex = std::max(0, mIndex - nsISHistory::VIEWER_WINDOW);
   int32_t endIndex = std::min(mLength - 1, mIndex + nsISHistory::VIEWER_WINDOW);
   nsCOMPtr<nsISHTransaction> trans;
   GetTransactionAtIndex(startIndex, getter_AddRefs(trans));
 
   int32_t i;
   for (i = startIndex; trans && i <= endIndex; ++i) {
     nsCOMPtr<nsISHEntry> entry;
@@ -1306,25 +1311,39 @@ nsSHistory::EvictExpiredContentViewerFor
     if (entry->HasBFCacheEntry(aEntry)) {
       break;
     }
 
     nsCOMPtr<nsISHTransaction> temp = trans;
     temp->GetNext(getter_AddRefs(trans));
   }
   if (i > endIndex) {
-    return NS_OK;
+    return NS_ERROR_FAILURE;
   }
 
-  if (i == mIndex) {
+  trans.forget(aResult);
+  *aResultIndex = i;
+  return NS_OK;
+}
+
+nsresult
+nsSHistory::EvictExpiredContentViewerForEntry(nsIBFCacheEntry* aEntry)
+{
+  int32_t index;
+  nsCOMPtr<nsISHTransaction> trans;
+  FindTransactionForBFCache(aEntry, getter_AddRefs(trans), &index);
+
+  if (index == mIndex) {
     NS_WARNING("How did the current SHEntry expire?");
     return NS_OK;
   }
 
-  EvictContentViewerForTransaction(trans);
+  if (trans) {
+    EvictContentViewerForTransaction(trans);
+  }
 
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsSHistory::AddToExpirationTracker(nsIBFCacheEntry* aEntry)
 {
   RefPtr<nsSHEntryShared> entry = static_cast<nsSHEntryShared*>(aEntry);
@@ -1581,16 +1600,30 @@ nsSHistory::RemoveDynEntries(int32_t aIn
     AutoTArray<nsID, 16> toBeRemovedEntries;
     GetDynamicChildren(container, toBeRemovedEntries, true);
     if (toBeRemovedEntries.Length()) {
       RemoveEntries(toBeRemovedEntries, aIndex);
     }
   }
 }
 
+void
+nsSHistory::RemoveDynEntriesForBFCacheEntry(nsIBFCacheEntry* aEntry)
+{
+  int32_t index;
+  nsCOMPtr<nsISHTransaction> trans;
+  FindTransactionForBFCache(aEntry, getter_AddRefs(trans), &index);
+  if (trans) {
+    nsCOMPtr<nsISHEntry> entry;
+    trans->GetSHEntry(getter_AddRefs(entry));
+    nsCOMPtr<nsISHContainer> container(do_QueryInterface(entry));
+    RemoveDynEntries(index, container);
+  }
+}
+
 NS_IMETHODIMP
 nsSHistory::UpdateIndex()
 {
   // Update the actual index with the right value.
   if (mIndex != mRequestedIndex && mRequestedIndex != -1) {
     mIndex = mRequestedIndex;
     NOTIFY_LISTENERS(OnIndexChanged, (mIndex))
   }
@@ -1698,17 +1731,17 @@ nsSHistory::LoadNextPossibleEntry(int32_
     return LoadEntry(aNewIndex - 1, aLoadType, aHistCmd);
   }
   if (aNewIndex > mIndex) {
     return LoadEntry(aNewIndex + 1, aLoadType, aHistCmd);
   }
   return NS_ERROR_FAILURE;
 }
 
-NS_IMETHODIMP
+nsresult
 nsSHistory::LoadEntry(int32_t aIndex, long aLoadType, uint32_t aHistCmd)
 {
   if (!mRootDocShell) {
     return NS_ERROR_FAILURE;
   }
 
   nsCOMPtr<nsIURI> nextURI;
   nsCOMPtr<nsISHEntry> prevEntry;
--- a/docshell/shistory/nsSHistory.h
+++ b/docshell/shistory/nsSHistory.h
@@ -78,30 +78,35 @@ public:
   // Otherwise, it comes straight from the pref.
   static uint32_t GetMaxTotalViewers() { return sHistoryMaxTotalViewers; }
 
 private:
   virtual ~nsSHistory();
   friend class nsSHEnumerator;
   friend class nsSHistoryObserver;
 
-  // Could become part of nsIWebNavigation
-  NS_IMETHOD GetTransactionAtIndex(int32_t aIndex, nsISHTransaction** aResult);
+  nsresult GetTransactionAtIndex(int32_t aIndex, nsISHTransaction** aResult);
   nsresult LoadDifferingEntries(nsISHEntry* aPrevEntry, nsISHEntry* aNextEntry,
                                 nsIDocShell* aRootDocShell, long aLoadType,
                                 bool& aDifferenceFound);
   nsresult InitiateLoad(nsISHEntry* aFrameEntry, nsIDocShell* aFrameDS,
                         long aLoadType);
 
-  NS_IMETHOD LoadEntry(int32_t aIndex, long aLoadType, uint32_t aHistCmd);
+  nsresult LoadEntry(int32_t aIndex, long aLoadType, uint32_t aHistCmd);
 
 #ifdef DEBUG
   nsresult PrintHistory();
 #endif
 
+  // Find the transaction for a given bfcache entry. It only looks up between
+  // the range where alive viewers may exist (i.e nsISHistory::VIEWER_WINDOW).
+  nsresult FindTransactionForBFCache(nsIBFCacheEntry* aEntry,
+                                     nsISHTransaction** aResult,
+                                     int32_t* aResultIndex);
+
   // Evict content viewers in this window which don't lie in the "safe" range
   // around aIndex.
   void EvictOutOfRangeWindowContentViewers(int32_t aIndex);
   void EvictContentViewerForTransaction(nsISHTransaction* aTrans);
   static void GloballyEvictContentViewers();
   static void GloballyEvictAllContentViewers();
 
   // Calculates a max number of total
--- a/docshell/test/chrome/bug608669.xul
+++ b/docshell/test/chrome/bug608669.xul
@@ -1,6 +1,14 @@
 <?xml version="1.0"?>
 <?xml-stylesheet href="chrome://global/skin" type="text/css"?>
 <window title="Mozilla Bug 608669 - Blank page"
-  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+  onload="notifyOpener();">
   <description flex="1" value="This window is intentionally left blank"/>
+  <script type="application/javascript">
+  function notifyOpener() {
+    if (opener) {
+      opener.postMessage("load", "*");
+    }
+  }
+  </script>
 </window>
--- a/docshell/test/chrome/test_bug608669.xul
+++ b/docshell/test/chrome/test_bug608669.xul
@@ -13,53 +13,28 @@ https://bugzilla.mozilla.org/show_bug.cg
   <body xmlns="http://www.w3.org/1999/xhtml">
   <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=608669"
      target="_blank">Mozilla Bug 608669</a>
   </body>
 
   <!-- test code goes here -->
   <script type="application/javascript"><![CDATA[
 
-var gOrigMaxTotalViewers = undefined;
-function setCachePref(enabled) {
-  var prefBranch = Components.classes["@mozilla.org/preferences-service;1"]
-                             .getService(Components.interfaces.nsIPrefBranch);
-  if (enabled) {
-    is(typeof gOrigMaxTotalViewers, "undefined", "don't double-enable bfcache");
-    prefBranch.setBoolPref("browser.sessionhistory.cache_subframes", true);
-    gOrigMaxTotalViewers = prefBranch.getIntPref("browser.sessionhistory.max_total_viewers");
-    prefBranch.setIntPref("browser.sessionhistory.max_total_viewers", 10);
-  }
-  else {
-    is(typeof gOrigMaxTotalViewers, "number", "don't double-disable bfcache");
-    prefBranch.setIntPref("browser.sessionhistory.max_total_viewers", gOrigMaxTotalViewers);
-    gOrigMaxTotalViewers = undefined;
-    try {
-      prefBranch.clearUserPref("browser.sessionhistory.cache_subframes");
-    } catch (e) { /* Pref didn't exist, meh */ }
-  }
-}
-
-
 /** Test for Bug 608669 **/
 SimpleTest.waitForExplicitFinish();
 
 addLoadEvent(nextTest);
 
 gen = doTest();
 
 function nextTest() {
   gen.next();
 }
 
 function* doTest() {
-  var container = document.getElementById('container');
-
-  setCachePref(true);
-
   var notificationCount = 0;
   var observer = {
     observe: function(aSubject, aTopic, aData) {
       is(aTopic, "chrome-document-global-created",
          "correct topic");
       is(aData, "null",
          "correct data");
       notificationCount++;
@@ -68,49 +43,36 @@ function* doTest() {
 
   var os = Components.classes["@mozilla.org/observer-service;1"].
     getService(Components.interfaces.nsIObserverService);
   os.addObserver(observer, "chrome-document-global-created");
   os.addObserver(observer, "content-document-global-created");
 
   is(notificationCount, 0, "initial count");
 
-  // create a new iframe
-  var iframe = document.createElement("iframe");
-  container.appendChild(iframe);
-  iframe.contentWindow.x = "y";
-  is(notificationCount, 1, "after created iframe");
-  
-  // Try loading in an iframe
-  iframe.setAttribute("src", "bug608669.xul");
-  iframe.onload = nextTest;
+  // create a new window
+  var testWin = window.open("", "bug 608669", "chrome,width=600,height=600");
+  testWin.x = "y";
+  is(notificationCount, 1, "after created window");
+
+  // Try loading in the window
+  testWin.location = "bug608669.xul";
+  window.onmessage = nextTest;
   yield undefined;
   is(notificationCount, 1, "after first load");
-  is(iframe.contentWindow.x, "y", "reused window");
+  is(testWin.x, "y", "reused window");
 
-  // Try loading again in an iframe
-  iframe.setAttribute("src", "bug608669.xul?x");
-  iframe.onload = nextTest;
+  // Try loading again in the window
+  testWin.location = "bug608669.xul?x";
+  window.onmessage = nextTest;
   yield undefined;
   is(notificationCount, 2, "after second load");
-  is("x" in iframe.contentWindow, false, "didn't reuse window");
+  is("x" in testWin, false, "didn't reuse window");
 
-  // Open a new window using window.open
-  popup = window.open("bug608669.xul", "bug 608669",
-                      "chrome,width=600,height=600");
-  popup.onload = nextTest;
-  yield undefined;
-  is(notificationCount, 3, "after window.open load");
-  popup.close();
+  testWin.close();
 
-  setCachePref(false);
   os.removeObserver(observer, "chrome-document-global-created");
   os.removeObserver(observer, "content-document-global-created");
   SimpleTest.finish();
 }
 
-
-
   ]]></script>
-  <vbox id="container" flex="1">
-    <description>Below will an iframe be added</description>
-  </vbox>
 </window>
new file mode 100644
--- /dev/null
+++ b/docshell/test/navigation/file_bug1364364-1.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <title>title</title>
+  </head>
+  <body onload="loadFramesAndNavigate();">
+    <p id="content"></p>
+    <div id="frameContainer">
+    </div>
+    <script type="application/javascript">
+    function waitForLoad(frame) {
+      return new Promise(r => frame.onload = r);
+    }
+
+    async function loadFramesAndNavigate() {
+      let dynamicFrame = document.createElement("iframe");
+      dynamicFrame.src = "data:text/html,iframe1";
+      document.querySelector("#frameContainer").appendChild(dynamicFrame);
+      await waitForLoad(dynamicFrame);
+      dynamicFrame.src = "data:text/html,iframe2";
+      await waitForLoad(dynamicFrame);
+      dynamicFrame.src = "data:text/html,iframe3";
+      await waitForLoad(dynamicFrame);
+      dynamicFrame.src = "data:text/html,iframe4";
+      await waitForLoad(dynamicFrame);
+      dynamicFrame.src = "data:text/html,iframe5";
+      await waitForLoad(dynamicFrame);
+      location.href = "file_bug1364364-2.html";
+    }
+    </script>
+  </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/docshell/test/navigation/file_bug1364364-2.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <title>title</title>
+  </head>
+  <body onload="notifyOpener();">
+    <script type="application/javascript">
+    function notifyOpener() {
+      opener.postMessage("navigation-done", "*");
+    }
+    </script>
+  </body>
+</html>
--- a/docshell/test/navigation/mochitest.ini
+++ b/docshell/test/navigation/mochitest.ini
@@ -44,30 +44,33 @@ support-files =
   file_triggeringprincipal_iframe_iframe_window_open_frame_a_nav.html
   file_bug1300461.html
   file_bug1300461_redirect.html
   file_bug1300461_redirect.html^headers^
   file_bug1300461_back.html
   file_contentpolicy_block_window.html
   file_bug1326251.html
   file_bug1326251_evict_cache.html
+  file_bug1364364-1.html
+  file_bug1364364-2.html
   file_bug1375833.html
   file_bug1375833-frame1.html
   file_bug1375833-frame2.html
 
 [test_bug13871.html]
 [test_bug270414.html]
 [test_bug278916.html]
 [test_bug279495.html]
 [test_bug344861.html]
 skip-if = toolkit == "android" || toolkit == "windows" # disabled on Windows because of bug 1234520
 [test_bug386782.html]
 [test_bug430624.html]
 [test_bug430723.html]
 skip-if = (toolkit == 'android') || (!debug && (os == 'mac' || os == 'win')) # Bug 874423
+[test_bug1364364.html]
 [test_bug1375833.html]
 [test_child.html]
 [test_grandchild.html]
 [test_not-opener.html]
 [test_opener.html]
 [test_popup-navigates-children.html]
 [test_reserved.html]
 skip-if = (toolkit == 'android') || (debug && e10s) #too slow on Android 4.3 aws only; bug 1030403; bug 1263213 for debug e10s
new file mode 100644
--- /dev/null
+++ b/docshell/test/navigation/test_bug1364364.html
@@ -0,0 +1,56 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=1364364
+-->
+<head>
+  <meta charset="utf-8">
+  <title>Test for Bug 1364364</title>
+  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+  <script type="application/javascript">
+
+  /** Test for Bug 1364364 **/
+  let testWin, testDoc;
+  async function test() {
+    SimpleTest.waitForExplicitFinish();
+    testWin = window.open("file_bug1364364-1.html");
+    await waitForLoad(testWin);
+    testDoc = testWin.document;
+
+    // file_bug1364364-1.html will load a few dynamic iframes and then navigate
+    // top browsing context to file_bug1364364-2.html, which will postMessage
+    // back.
+  }
+
+  function waitForLoad(win) {
+    return new Promise(r => win.addEventListener("load", r, { once: true}));
+  }
+
+  window.addEventListener("message", async function(msg) {
+    if (msg.data == "navigation-done") {
+      is(testWin.history.length, 6, "check history.length");
+
+      // Modify a document in bfcache should cause the cache being dropped tho
+      // RemoveFromBFCacheAsync.
+      testDoc.querySelector("#content").textContent = "modified";
+      await new Promise(r => setTimeout(r, 0));
+
+      is(testWin.history.length, 2, "check history.length after bfcache dropped");
+      testWin.close();
+      SimpleTest.finish();
+    }
+  });
+
+  </script>
+</head>
+<body onload="test();">
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1364364">Mozilla Bug 1364364</a>
+<p id="display"></p>
+<div id="content" style="display: none">
+
+</div>
+<pre id="test">
+</pre>
+</body>
+</html>
rename from dom/indexedDB/test/bfcache_iframe1.html
rename to dom/indexedDB/test/bfcache_page1.html
--- a/dom/indexedDB/test/bfcache_iframe1.html
+++ b/dom/indexedDB/test/bfcache_page1.html
@@ -1,27 +1,27 @@
 <!DOCTYPE html>
 <html>
 <head>
   <script>
-  var request = indexedDB.open(parent.location, 1);
+  var request = indexedDB.open(opener.location, 1);
   request.onupgradeneeded = function(e) {
     var db = e.target.result;
     // This should never be called
     db.onversionchange = function(e) {
       db.transaction(["mystore"]).objectStore("mystore").put({ hello: "fail" }, 42);
     }
     var trans = e.target.transaction;
     if (db.objectStoreNames.contains("mystore")) {
       db.deleteObjectStore("mystore");
     }
     var store = db.createObjectStore("mystore");
     store.add({ hello: "world" }, 42);
     trans.oncomplete = function() {
-      parent.postMessage("go", "http://mochi.test:8888");
+      opener.postMessage("go", "http://mochi.test:8888");
     }
   };
   </script>
 </head>
 <body>
   This is page one.
 </body>
 </html>
rename from dom/indexedDB/test/bfcache_iframe2.html
rename to dom/indexedDB/test/bfcache_page2.html
--- a/dom/indexedDB/test/bfcache_iframe2.html
+++ b/dom/indexedDB/test/bfcache_page2.html
@@ -1,28 +1,28 @@
 <!DOCTYPE html>
 <html>
 <head>
   <script>
   var res = {};
-  var request = indexedDB.open(parent.location, 2);
+  var request = indexedDB.open(opener.location, 2);
   request.onblocked = function() {
     res.blockedFired = true;
   }
   request.onupgradeneeded  = function(e) {
     var db = e.target.result;
     res.version = db.version;
     res.storeCount = db.objectStoreNames.length;
 
     var trans = request.transaction;
     trans.objectStore("mystore").get(42).onsuccess = function(e) {
       res.value = JSON.stringify(e.target.result);
     }
     trans.oncomplete = function() {
-      parent.postMessage(JSON.stringify(res), "http://mochi.test:8888");
+      opener.postMessage(JSON.stringify(res), "http://mochi.test:8888");
     }
   };
 
   </script>
 </head>
 <body>
   This is page two.
 </body>
--- a/dom/indexedDB/test/mochitest.ini
+++ b/dom/indexedDB/test/mochitest.ini
@@ -1,16 +1,16 @@
 # 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/.
 
 [DEFAULT]
 support-files =
-  bfcache_iframe1.html
-  bfcache_iframe2.html
+  bfcache_page1.html
+  bfcache_page2.html
   blob_worker_crash_iframe.html
   error_events_abort_transactions_iframe.html
   event_propagation_iframe.html
   exceptions_in_events_iframe.html
   file.js
   helpers.js
   leaving_page_iframe.html
   third_party_iframe1.html
--- a/dom/indexedDB/test/test_bfcache.html
+++ b/dom/indexedDB/test/test_bfcache.html
@@ -5,63 +5,37 @@
 <html>
 <head>
   <title>Indexed Database Property Test</title>
 
   <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
   <script type="text/javascript">
     /* import-globals-from helpers.js */
-    var gOrigMaxTotalViewers = undefined;
-    function setCachePref(enabled) {
-      if (enabled) {
-        is(typeof gOrigMaxTotalViewers, "undefined",
-           "don't double-enable bfcache");
-        SpecialPowers.setBoolPref("browser.sessionhistory.cache_subframes",
-                                  true);
-        gOrigMaxTotalViewers =
-          SpecialPowers.getIntPref("browser.sessionhistory.max_total_viewers");
-        SpecialPowers.setIntPref("browser.sessionhistory.max_total_viewers",
-                                 10);
-      }
-      else {
-        is(typeof gOrigMaxTotalViewers, "number",
-           "don't double-disable bfcache");
-        SpecialPowers.setIntPref("browser.sessionhistory.max_total_viewers",
-                                 gOrigMaxTotalViewers);
-        gOrigMaxTotalViewers = undefined;
-        try {
-          SpecialPowers.clearUserPref("browser.sessionhistory.cache_subframes");
-        } catch (e) { /* Pref didn't exist, meh */ }
-      }
-    }
 
     function* testSteps()
     {
-      var iframe = $("iframe");
-      setCachePref(true);
       window.onmessage = grabEventAndContinueHandler;
 
-      iframe.src = "bfcache_iframe1.html";
+      let testWin = window.open("bfcache_page1.html", "testWin");
       var event = yield undefined;
       is(event.data, "go", "set up database successfully");
 
-      iframe.src = "bfcache_iframe2.html";
+      testWin.location = "bfcache_page2.html";
       let res = JSON.parse((yield).data);
       is(res.version, 2, "version was set correctly");
       is(res.storeCount, 1, "correct set of stores");
       ok(!("blockedFired" in res), "blocked shouldn't fire");
       is(res.value, JSON.stringify({ hello: "world" }),
          "correct value found in store");
 
-      setCachePref(false);
+      testWin.close();
       finishTest();
     }
   </script>
   <script type="text/javascript" src="helpers.js"></script>
 
 </head>
 
 <body onload="runTest();">
-  <iframe id="iframe"></iframe>
 </body>
 
 </html>
rename from dom/media/webspeech/synth/test/file_bfcache_frame.html
rename to dom/media/webspeech/synth/test/file_bfcache_page1.html
--- a/dom/media/webspeech/synth/test/file_bfcache_frame.html
+++ b/dom/media/webspeech/synth/test/file_bfcache_page1.html
@@ -2,17 +2,17 @@
 <html>
 <head>
   <meta charset="utf-8">
   <script type="application/javascript">
     addEventListener('pageshow', function onshow(evt) {
       var u = new SpeechSynthesisUtterance('hello');
       u.lang = 'it-IT-noend';
       u.addEventListener('start', function() {
-        location = "file_bfcache_frame2.html";
+        location = "file_bfcache_page2.html";
       });
       speechSynthesis.speak(u);
     });
   </script>
 </head>
 <body>
 </body>
 </html>
rename from dom/media/webspeech/synth/test/file_bfcache_frame2.html
rename to dom/media/webspeech/synth/test/file_bfcache_page2.html
--- a/dom/media/webspeech/synth/test/file_bfcache_frame2.html
+++ b/dom/media/webspeech/synth/test/file_bfcache_page2.html
@@ -1,14 +1,14 @@
 <html>
 <script>
 var frameUnloaded = function() {
   var u = new SpeechSynthesisUtterance('hi');
   u.addEventListener('end', function () {
-    parent.ok(true, 'Successfully spoke utterance from new frame.');
-    parent.onDone();
+    opener.ok(true, 'Successfully spoke utterance from new frame.');
+    opener.onDone();
   });
   speechSynthesis.speak(u);
 };
 </script>
 
 <body onpageshow="frameUnloaded()"></body></html>
 
--- a/dom/media/webspeech/synth/test/mochitest.ini
+++ b/dom/media/webspeech/synth/test/mochitest.ini
@@ -1,15 +1,15 @@
 [DEFAULT]
 tags=msg
 subsuite = media
 support-files =
   common.js
-  file_bfcache_frame.html
-  file_bfcache_frame2.html
+  file_bfcache_page1.html
+  file_bfcache_page2.html
   file_setup.html
   file_speech_queue.html
   file_speech_simple.html
   file_speech_cancel.html
   file_speech_error.html
   file_indirect_service_events.html
   file_global_queue.html
   file_global_queue_cancel.html
--- a/dom/media/webspeech/synth/test/test_bfcache.html
+++ b/dom/media/webspeech/synth/test/test_bfcache.html
@@ -8,38 +8,39 @@ https://bugzilla.mozilla.org/show_bug.cg
   <title>Test for Bug 1230533: Test speech is stopped from a window when unloaded</title>
   <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
   <script type="application/javascript" src="common.js"></script>
   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
 </head>
 <body>
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1230533">Mozilla Bug 1230533</a>
 <p id="display"></p>
-<iframe id="testFrame"></iframe>
 <div id="content" style="display: none">
-  
+
 </div>
 <pre id="test">
 <script type="application/javascript">
 
 /** Test for Bug 525444 **/
 
 SimpleTest.waitForExplicitFinish();
-
-var iframe;
+let testWin;
 
 function onDone() {
+  testWin.close();
   SimpleTest.finish();
 }
 
 SpecialPowers.pushPrefEnv({ set: [
   ['media.webspeech.synth.enabled', true],
-  ['media.webspeech.synth.force_global_queue', true],
-  ['browser.sessionhistory.cache_subframes', true],
-  ['browser.sessionhistory.max_total_viewers', 10]] },
+  ['media.webspeech.synth.force_global_queue', true]] },
   function() {
-    loadSpeechTest("file_bfcache_frame.html");
+    testWin = window.open("about:blank", "testWin");
+    testWin.onload = function(e) {
+      waitForVoices(testWin)
+        .then(() => testWin.location = "file_bfcache_page1.html")
+    };
   });
 
 </script>
 </pre>
 </body>
 </html>
rename from dom/workers/test/WorkerDebugger_frozen_iframe1.html
rename to dom/workers/test/WorkerDebugger_frozen_window1.html
--- a/dom/workers/test/WorkerDebugger_frozen_iframe1.html
+++ b/dom/workers/test/WorkerDebugger_frozen_window1.html
@@ -1,15 +1,15 @@
 <!DOCTYPE html>
 <html lang="en">
   <head>
     <meta charset="utf-8">
     <script>
       var worker = new Worker("WorkerDebugger_frozen_worker1.js");
       worker.onmessage = function () {
-        parent.postMessage("ready", "*");
+        opener.postMessage("ready", "*");
       };
     </script>
   </head>
   <body>
     This is page 1.
   </body>
 <html>
rename from dom/workers/test/WorkerDebugger_frozen_iframe2.html
rename to dom/workers/test/WorkerDebugger_frozen_window2.html
--- a/dom/workers/test/WorkerDebugger_frozen_iframe2.html
+++ b/dom/workers/test/WorkerDebugger_frozen_window2.html
@@ -1,15 +1,15 @@
 <!DOCTYPE html>
 <html lang="en">
   <head>
     <meta charset="utf-8">
     <script>
       var worker = new Worker("WorkerDebugger_frozen_worker2.js");
       worker.onmessage = function () {
-        parent.postMessage("ready", "*");
+        opener.postMessage("ready", "*");
       };
     </script>
   </head>
   <body>
     This is page 2.
   </body>
 <html>
new file mode 100644
--- /dev/null
+++ b/dom/workers/test/blank.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <title>Blank</title>
+  </head>
+  <body onload="notifyOnload();">
+    <script type="application/javascript">
+    function notifyOnload() {
+      opener.postMessage({event: 'load'}, '*');
+    }
+    </script>
+  </body>
+</html>
+
--- a/dom/workers/test/chrome.ini
+++ b/dom/workers/test/chrome.ini
@@ -19,18 +19,18 @@ support-files =
   WorkerDebuggerGlobalScope.reportError_childWorker.js
   WorkerDebuggerGlobalScope.reportError_debugger.js
   WorkerDebuggerGlobalScope.reportError_worker.js
   WorkerDebuggerGlobalScope.setImmediate_debugger.js
   WorkerDebuggerGlobalScope.setImmediate_worker.js
   WorkerDebuggerManager_childWorker.js
   WorkerDebuggerManager_worker.js
   WorkerDebugger_childWorker.js
-  WorkerDebugger_frozen_iframe1.html
-  WorkerDebugger_frozen_iframe2.html
+  WorkerDebugger_frozen_window1.html
+  WorkerDebugger_frozen_window2.html
   WorkerDebugger_frozen_worker1.js
   WorkerDebugger_frozen_worker2.js
   WorkerDebugger_promise_debugger.js
   WorkerDebugger_promise_worker.js
   WorkerDebugger_sharedWorker.js
   WorkerDebugger_suspended_debugger.js
   WorkerDebugger_suspended_worker.js
   WorkerDebugger_worker.js
--- a/dom/workers/test/mochitest.ini
+++ b/dom/workers/test/mochitest.ini
@@ -1,12 +1,13 @@
 [DEFAULT]
 support-files =
   WorkerTest_badworker.js
   atob_worker.js
+  blank.html
   bug978260_worker.js
   bug1014466_data1.txt
   bug1014466_data2.txt
   bug1014466_worker.js
   bug1020226_worker.js
   bug1020226_frame.html
   bug998474_worker.js
   bug1063538_worker.js
@@ -51,17 +52,17 @@ support-files =
   promise_worker.js
   recursion_worker.js
   recursiveOnerror_worker.js
   redirect_to_foreign.sjs
   rvals_worker.js
   sharedWorker_console.js
   sharedWorker_sharedWorker.js
   simpleThread_worker.js
-  suspend_iframe.html
+  suspend_window.html
   suspend_worker.js
   terminate_worker.js
   test_csp.html^headers^
   test_csp.js
   referrer_worker.html
   threadErrors_worker1.js
   threadErrors_worker2.js
   threadErrors_worker3.js
--- a/dom/workers/test/multi_sharedWorker_frame.html
+++ b/dom/workers/test/multi_sharedWorker_frame.html
@@ -2,25 +2,41 @@
   Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/
 -->
 <!DOCTYPE HTML>
 <html>
   <head>
     <title>Test for SharedWorker</title>
   </head>
-  <body>
+  <body onload="notifyOpenerLoadEvent();">
     <script type="text/javascript">
       "use strict";
 
+      function postMessageToParentOrOpener(message) {
+        if (parent != window) {
+          parent.postMessage(message, "*");
+        }
+        if (opener) {
+          opener.postMessage(message, "*");
+        }
+      }
+
+      // Used by test_multi_sharedWorker_lifetimes.html
+      function notifyOpenerLoadEvent() {
+        if (opener) {
+          opener.postMessage({event: "load"}, "*");
+        }
+      }
+
       function debug(message) {
         if (typeof(message) != "string") {
           throw new Error("debug() only accepts strings!");
         }
-        parent.postMessage(message, "*");
+        postMessageToParentOrOpener(message);
       }
 
       let worker;
 
       window.addEventListener("message", function(event) {
         if (!worker) {
           worker = new SharedWorker("multi_sharedWorker_sharedWorker.js",
                                     "FrameWorker");
@@ -30,22 +46,22 @@
 
             let data = {
               type: "error",
               message: event.message,
               filename: event.filename,
               lineno: event.lineno,
               isErrorEvent: event instanceof ErrorEvent
             };
-            parent.postMessage(data, "*");
+            postMessageToParentOrOpener(data);
           };
 
           worker.port.onmessage = function(event) {
             debug("Worker message: " + JSON.stringify(event.data));
-            parent.postMessage(event.data, "*");
+            postMessageToParentOrOpener(event.data);
           };
         }
 
         debug("Posting message: " + JSON.stringify(event.data));
         worker.port.postMessage(event.data);
       });
     </script>
   </body>
rename from dom/workers/test/suspend_iframe.html
rename to dom/workers/test/suspend_window.html
--- a/dom/workers/test/test_WorkerDebugger_frozen.xul
+++ b/dom/workers/test/test_WorkerDebugger_frozen.xul
@@ -11,80 +11,69 @@
           src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
   <script type="application/javascript"
           src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/>
   <script type="application/javascript" src="dom_worker_helper.js"/>
 
   <script type="application/javascript">
   <![CDATA[
 
-    const CACHE_SUBFRAMES = "browser.sessionhistory.cache_subframes";
-    const MAX_TOTAL_VIEWERS = "browser.sessionhistory.max_total_viewers";
-
-    const IFRAME1_URL = "WorkerDebugger_frozen_iframe1.html";
-    const IFRAME2_URL = "WorkerDebugger_frozen_iframe2.html";
+    const WINDOW1_URL = "WorkerDebugger_frozen_window1.html";
+    const WINDOW2_URL = "WorkerDebugger_frozen_window2.html";
 
     const WORKER1_URL = "WorkerDebugger_frozen_worker1.js";
     const WORKER2_URL = "WorkerDebugger_frozen_worker2.js";
 
     function test() {
       (async function() {
         SimpleTest.waitForExplicitFinish();
 
-        var oldMaxTotalViewers = SpecialPowers.getIntPref(MAX_TOTAL_VIEWERS);
-
-        SpecialPowers.setBoolPref(CACHE_SUBFRAMES, true);
-        SpecialPowers.setIntPref(MAX_TOTAL_VIEWERS, 10);
-
-        let iframe = $("iframe");
+        SpecialPowers.pushPrefEnv({set:
+          [["browser.sessionhistory.max_total_viewers", 10]]});
 
         let promise = waitForMultiple([
           waitForRegister(WORKER1_URL),
           waitForWindowMessage(window, "ready"),
         ]);
-        iframe.src = IFRAME1_URL;
+        let testWin = window.open(WINDOW1_URL, "testWin");;
         let [dbg1] = await promise;
         is(dbg1.isClosed, false,
            "debugger for worker on page 1 should not be closed");
 
         promise = waitForMultiple([
           waitForUnregister(WORKER1_URL),
           waitForDebuggerClose(dbg1),
           waitForRegister(WORKER2_URL),
           waitForWindowMessage(window, "ready"),
         ]);
-        iframe.src = IFRAME2_URL;
+        testWin.location = WINDOW2_URL;
         let [,, dbg2] = await promise;
         is(dbg1.isClosed, true,
            "debugger for worker on page 1 should be closed");
         is(dbg2.isClosed, false,
            "debugger for worker on page 2 should not be closed");
 
         promise = Promise.all([
           waitForUnregister(WORKER2_URL),
           waitForDebuggerClose(dbg2),
           waitForRegister(WORKER1_URL)
         ]);
-        iframe.contentWindow.history.back();
+        testWin.history.back();
         [,, dbg1] = await promise;
         is(dbg1.isClosed, false,
            "debugger for worker on page 1 should not be closed");
         is(dbg2.isClosed, true,
            "debugger for worker on page 2 should be closed");
 
-        SpecialPowers.clearUserPref(CACHE_SUBFRAMES);
-        SpecialPowers.setIntPref(MAX_TOTAL_VIEWERS, oldMaxTotalViewers);
-
         SimpleTest.finish();
       })();
     }
 
   ]]>
   </script>
 
   <body xmlns="http://www.w3.org/1999/xhtml">
     <p id="display"></p>
     <div id="content" style="display:none;"></div>
     <pre id="test"></pre>
-    <iframe id="iframe"></iframe>
   </body>
   <label id="test-result"/>
 </window>
--- a/dom/workers/test/test_multi_sharedWorker_lifetimes.html
+++ b/dom/workers/test/test_multi_sharedWorker_lifetimes.html
@@ -7,149 +7,134 @@
   <head>
     <title>Test for SharedWorker</title>
     <script src="/tests/SimpleTest/SimpleTest.js"></script>
     <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
       <script class="testbody" type="text/javascript">
         "use strict";
 
         const scrollbarPref = "layout.testing.overlay-scrollbars.always-visible";
-        const bfCacheEnabledPref = "browser.sessionhistory.cache_subframes";
-        const bfCacheDepthPref = "browser.sessionhistory.max_total_viewers";
-        const bfCacheDepth = 10;
+        const viewersPref = "browser.sessionhistory.max_total_viewers";
 
-        const frameRelativeURL = "multi_sharedWorker_frame.html";
+        const windowRelativeURL = "multi_sharedWorker_frame.html";
         const storedData = "0123456789abcdefghijklmnopqrstuvwxyz";
 
         let testGenerator = (function*() {
           SimpleTest.waitForExplicitFinish();
 
-	  // Force scrollbar to always be shown.  The scrollbar setting is
-	  // necessary to avoid the fade-in/fade-out from evicting our document
-	  // from the BF cache below.  If bug 1049277 is fixed, then we can
-	  // stop setting the scrollbar pref here.
-          SpecialPowers.pushPrefEnv({ set: [[scrollbarPref, true]] },
+          // Force scrollbar to always be shown.  The scrollbar setting is
+          // necessary to avoid the fade-in/fade-out from evicting our document
+          // from the BF cache below.  If bug 1049277 is fixed, then we can
+          // stop setting the scrollbar pref here.
+          SpecialPowers.pushPrefEnv({ set: [[scrollbarPref, true],
+                                            [viewersPref, 10]] },
                                     sendToGenerator);
           yield undefined;
 
           window.addEventListener("message", function(event) {
             if (typeof(event.data) == "string") {
               info(event.data);
             } else {
               sendToGenerator(event);
             }
           });
 
-          let frame = document.getElementById("frame");
-          frame.src = frameRelativeURL;
-          frame.onload = sendToGenerator;
-
+          let testWin = window.open(windowRelativeURL, "testWin");
           yield undefined;
 
-          frame = frame.contentWindow;
-          frame.postMessage({ command: "retrieve" }, "*");
+          testWin.postMessage({ command: "retrieve" }, "*");
 
           let event = yield undefined;
           ok(event instanceof MessageEvent, "Got a MessageEvent");
-          is(event.source, frame, "Correct window got the event");
+          is(event.source, testWin, "Correct window got the event");
           is(event.data.type, "result", "Got a result message");
           is(event.data.data, undefined, "No data stored yet");
 
-          frame.postMessage({ command: "store", data: storedData }, "*");
-          frame.postMessage({ command: "retrieve" }, "*");
+          testWin.postMessage({ command: "store", data: storedData }, "*");
+          testWin.postMessage({ command: "retrieve" }, "*");
 
           event = yield undefined;
           ok(event instanceof MessageEvent, "Got a MessageEvent");
-          is(event.source, frame, "Correct window got the event");
+          is(event.source, testWin, "Correct window got the event");
           is(event.data.type, "result", "Got a result message");
           is(event.data.data, storedData, "Got stored data");
 
           // Navigate when the bfcache is disabled.
-          info("Navigating to about:blank");
-          frame = document.getElementById("frame");
-          frame.onload = sendToGenerator;
-          frame.src = "about:blank";
-          frame.contentWindow.document.body.offsetTop;
+          info("Navigating to a blank page");
+          testWin.onunload = function(){};;
+          testWin.location = "blank.html";
+          testWin.document.body.offsetTop;
 
           yield undefined;
 
-          info("Navigating to " + frameRelativeURL);
-          frame.src = frameRelativeURL;
-          frame.contentWindow.document.body.offsetTop;
+          info("Navigating to " + windowRelativeURL);
+          testWin.onunload = function(){};
+          testWin.location = windowRelativeURL;
+          testWin.document.body.offsetTop;
 
           yield undefined;
 
-          frame = frame.contentWindow;
-          frame.postMessage({ command: "retrieve" }, "*");
+          testWin.postMessage({ command: "retrieve" }, "*");
 
           event = yield undefined;
           ok(event instanceof MessageEvent, "Got a MessageEvent");
-          is(event.source, frame, "Correct window got the event");
+          is(event.source, testWin, "Correct window got the event");
           is(event.data.type, "result", "Got a result message");
           is(event.data.data, undefined, "No data stored");
 
-          frame.postMessage({ command: "store", data: storedData }, "*");
-          frame.postMessage({ command: "retrieve" }, "*");
+          testWin.postMessage({ command: "store", data: storedData }, "*");
+          testWin.postMessage({ command: "retrieve" }, "*");
 
           event = yield undefined;
           ok(event instanceof MessageEvent, "Got a MessageEvent");
-          is(event.source, frame, "Correct window got the event");
+          is(event.source, testWin, "Correct window got the event");
           is(event.data.type, "result", "Got a result message");
           is(event.data.data, storedData, "Got stored data");
 
-          info("Enabling '" + bfCacheEnabledPref + "' pref");
-          SpecialPowers.pushPrefEnv({ set: [[bfCacheEnabledPref, true],
-                                            [bfCacheDepthPref, bfCacheDepth]] },
-                                    sendToGenerator);
-          yield undefined;
-
           // Navigate when the bfcache is enabled.
-          frame = document.getElementById("frame");
-          frame.onload = sendToGenerator;
-
-          info("Navigating to about:blank");
-          frame.src = "about:blank";
-          frame.contentWindow.document.body.offsetTop;
+          info("Navigating to a blank page");
+          testWin.location = "blank.html";
+          testWin.document.body.offsetTop;
 
           yield undefined;
 
           for (let i = 0; i < 3; i++) {
             info("Running GC");
             SpecialPowers.exactGC(sendToGenerator);
             yield undefined;
 
+            // It seems using SpecialPowers.executeSoon() would make the
+            // entryGlobal being the TabChildGlobal (and that would make the
+            // baseURI in the location assignment below being incorrect);
+            // setTimeout on the otherhand ensures the entryGlobal is this
+            // window.
             info("Waiting the event queue to clear");
-            SpecialPowers.executeSoon(sendToGenerator);
+            setTimeout(sendToGenerator, 0);
             yield undefined;
           }
 
-          info("Navigating to " + frameRelativeURL);
-          frame.src = frameRelativeURL;
-          frame.contentWindow.document.body.offsetTop;
+          info("Navigating to " + windowRelativeURL);
+          testWin.location = windowRelativeURL;
+          testWin.document.body.offsetTop;
 
           yield undefined;
 
-          frame = frame.contentWindow;
-          frame.postMessage({ command: "retrieve" }, "*");
+          testWin.postMessage({ command: "retrieve" }, "*");
 
           event = yield undefined;
           ok(event instanceof MessageEvent, "Got a MessageEvent");
-          is(event.source, frame, "Correct window got the event");
+          is(event.source, testWin, "Correct window got the event");
           is(event.data.type, "result", "Got a result message");
           is(event.data.data, storedData, "Still have data stored");
 
-          info("Resetting '" + bfCacheEnabledPref + "' pref");
-          SpecialPowers.popPrefEnv(sendToGenerator);
-          yield undefined;
-
           window.removeEventListener("message", sendToGenerator);
 
+          testWin.close();
           SimpleTest.finish();
         })();
 
         let sendToGenerator = testGenerator.next.bind(testGenerator);
 
       </script>
   </head>
   <body onload="testGenerator.next();">
-    <iframe id="frame"></iframe>
   </body>
 </html>
--- a/dom/workers/test/test_onLine.html
+++ b/dom/workers/test/test_onLine.html
@@ -21,17 +21,26 @@ http://creativecommons.org/licenses/publ
 
 <script class="testbody" type="text/javascript">
 
 addLoadEvent(function() {
   var w = new Worker("onLine_worker.js");
 
   w.onmessage = function(e) {
     if (e.data.type === 'ready') {
-      doTest();
+      // XXX Important trick here.
+      //
+      // Setting iosvc.offline would trigger a sync notifyObservers call, and if
+      // there exists a preloaded about:newtab (see tabbrowser._handleNewTab),
+      // that tab will be notified.
+      //
+      // This implies a sync call across different tabGroups, and will hit the
+      // assertion in SchedulerGroup::ValidateAccess(). So use executeSoon to
+      // re-dispatch an unlabeled runnable to the event queue.
+      SpecialPowers.executeSoon(doTest);
     } else if (e.data.type === 'ok') {
       ok(e.data.test, e.data.message);
     } else if (e.data.type === 'finished') {
       SimpleTest.finish();
     }
   }
 
   function doTest() {
--- a/dom/workers/test/test_suspend.html
+++ b/dom/workers/test/test_suspend.html
@@ -9,130 +9,126 @@
   <title>Test for DOM Worker Threads</title>
   <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
 </head>
 <body>
 <p id="display"></p>
 <div id="content" style="display: none"></div>
 <pre id="test">
-<iframe id="workerFrame" src="suspend_iframe.html" onload="subframeLoaded();">
-</iframe>
 <script class="testbody" type="text/javascript">
 
   SimpleTest.waitForExplicitFinish();
 
-  var iframe;
+  const BLANK_URI = location.href.replace("test_suspend.html", "blank.html");
+
   var lastCount;
 
   var suspended = false;
   var resumed = false;
   var finished = false;
 
   var interval;
   var oldMessageCount;
   var waitCount = 0;
 
+  var testWin = window.open("suspend_window.html", "testWin");
+  testWin.onload = testWinLoaded;
+
+  window.addEventListener("message", msg => {
+    if (suspended) {
+      badOnloadCallback();
+    } else {
+      suspendCallback();
+    }
+  })
+
   function finishTest() {
     if (finished) {
       return;
     }
     finished = true;
-    SpecialPowers.flushPrefEnv(function () {
-      iframe.terminateWorker();
-      SimpleTest.finish();
-    });
+    testWin.terminateWorker();
+    testWin.close();
+    SimpleTest.finish();
   }
 
   function waitInterval() {
     if (finished) {
       return;
     }
-    is(String(iframe.location), "about:blank", "Wrong url!");
+    is(testWin.location.href, BLANK_URI, "Wrong url!");
     is(suspended, true, "Not suspended?");
     is(resumed, false, "Already resumed?!");
     is(lastCount, oldMessageCount, "Received a message while suspended!");
     if (++waitCount == 5) {
       clearInterval(interval);
       resumed = true;
-      iframe.history.back();
+      testWin.history.back();
     }
   }
 
   function badOnloadCallback() {
     if (finished) {
       return;
     }
-    ok(false, "We don't want suspend_iframe.html to fire a new load event, we want it to come out of the bfcache!");
+    ok(false, "We don't want suspend_window.html to fire a new load event, we want it to come out of the bfcache!");
     finishTest();
   }
 
   function suspendCallback() {
     if (finished) {
       return;
     }
-    is(String(iframe.location), "about:blank", "Wrong url!");
+    is(testWin.location.href, BLANK_URI, "Wrong url!");
     is(suspended, false, "Already suspended?");
     is(resumed, false, "Already resumed?");
-    SpecialPowers.popPrefEnv(function () {
-      suspended = true;
-      var iframeElement = document.getElementById("workerFrame");
-      iframeElement.onload = badOnloadCallback;
-      oldMessageCount = lastCount;
-      interval = setInterval(waitInterval, 1000);
-    });
+    suspended = true;
+    oldMessageCount = lastCount;
+    interval = setInterval(waitInterval, 1000);
   }
 
   function messageCallback(data) {
     if (finished) {
       return;
     }
 
     if (!suspended) {
       ok(lastCount === undefined || lastCount == data - 1,
          "Got good data, lastCount = " + lastCount + ", data = " + data);
       lastCount = data;
       if (lastCount == 25) {
-        SpecialPowers.pushPrefEnv({"set": [["browser.sessionhistory.cache_subframes", true]]}, function () {
-          iframe.location = "about:blank";
-          // We want suspend_iframe.html to go into bfcache, so we need to flush
-          // out all pending notifications. Otherwise, if they're flushed too
-          // late, they could kick us out of the bfcache again.
-          iframe.document.body.offsetTop;
-        });
+        testWin.location = "blank.html";
+        // We want suspend_window.html to go into bfcache, so we need to flush
+        // out all pending notifications. Otherwise, if they're flushed too
+        // late, they could kick us out of the bfcache again.
+        testWin.document.body.offsetTop;
       }
       return;
     }
 
-    var newLocation =
-      window.location.toString().replace("test_suspend.html",
-                                         "suspend_iframe.html");
-    is(newLocation.indexOf(iframe.location.toString()), 0, "Wrong url!");
+    var newLocation = location.href.replace("test_suspend.html",
+                                            "suspend_window.html");
+    is(testWin.location.href, newLocation, "Wrong url!");
     is(resumed, true, "Got message before resumed!");
     is(lastCount, data - 1, "Missed a message, suspend failed!");
     finishTest();
   }
 
   function errorCallback(data) {
     if (finished) {
       return;
     }
-    ok(false, "Iframe had an error: '" + data + "'");
+    ok(false, "testWin had an error: '" + data + "'");
     finishTest();
   }
 
-  function subframeLoaded() {
+  function testWinLoaded() {
     if (finished) {
       return;
     }
-    var iframeElement = document.getElementById("workerFrame");
-    iframeElement.onload = suspendCallback;
-
-    iframe = iframeElement.contentWindow;
-    ok(iframe, "No iframe?!");
-
-    iframe.startWorker(messageCallback, errorCallback);
+    testWin.startWorker(messageCallback, errorCallback);
   }
 
 </script>
 </pre>
 </body>
 </html>
--- a/editor/libeditor/WSRunObject.cpp
+++ b/editor/libeditor/WSRunObject.cpp
@@ -197,17 +197,18 @@ WSRunObject::InsertBreak(nsCOMPtr<nsINod
                                 afterRun->mEndNode, afterRun->mEndOffset);
       NS_ENSURE_SUCCESS(rv, nullptr);
     } else if (afterRun->mType == WSType::normalWS) {
       // Need to determine if break at front of non-nbsp run.  If so, convert
       // run to nbsp.
       WSPoint thePoint = GetCharAfter(*aInOutParent, *aInOutOffset);
       if (thePoint.mTextNode && nsCRT::IsAsciiSpace(thePoint.mChar)) {
         WSPoint prevPoint = GetCharBefore(thePoint);
-        if (prevPoint.mTextNode && !nsCRT::IsAsciiSpace(prevPoint.mChar)) {
+        if (!prevPoint.mTextNode ||
+            (prevPoint.mTextNode && !nsCRT::IsAsciiSpace(prevPoint.mChar))) {
           // We are at start of non-nbsps.  Convert to a single nbsp.
           nsresult rv = ConvertToNBSP(thePoint);
           NS_ENSURE_SUCCESS(rv, nullptr);
         }
       }
     }
 
     // Handle any changes needed to ws run before inserted br
@@ -638,17 +639,19 @@ WSRunObject::GetWSNodes()
     // we haven't found the start of ws yet.  Keep looking
     nsCOMPtr<nsIContent> priorNode = GetPreviousWSNode(start, wsBoundingParent);
     if (priorNode) {
       if (IsBlockNode(priorNode)) {
         mStartNode = start.node;
         mStartOffset = start.offset;
         mStartReason = WSType::otherBlock;
         mStartReasonNode = priorNode;
-      } else if (RefPtr<Text> textNode = priorNode->GetAsText()) {
+      } else if (priorNode->IsNodeOfType(nsINode::eTEXT) &&
+                 priorNode->IsEditable()) {
+        RefPtr<Text> textNode = priorNode->GetAsText();
         mNodeArray.InsertElementAt(0, textNode);
         const nsTextFragment *textFrag;
         if (!textNode || !(textFrag = textNode->GetText())) {
           return NS_ERROR_NULL_POINTER;
         }
         uint32_t len = textNode->TextLength();
 
         if (len < 1) {
@@ -745,17 +748,19 @@ WSRunObject::GetWSNodes()
     nsCOMPtr<nsIContent> nextNode = GetNextWSNode(end, wsBoundingParent);
     if (nextNode) {
       if (IsBlockNode(nextNode)) {
         // we encountered a new block.  therefore no more ws.
         mEndNode = end.node;
         mEndOffset = end.offset;
         mEndReason = WSType::otherBlock;
         mEndReasonNode = nextNode;
-      } else if (RefPtr<Text> textNode = nextNode->GetAsText()) {
+      } else if (nextNode->IsNodeOfType(nsINode::eTEXT) &&
+                 nextNode->IsEditable()) {
+        RefPtr<Text> textNode = nextNode->GetAsText();
         mNodeArray.AppendElement(textNode);
         const nsTextFragment *textFrag;
         if (!textNode || !(textFrag = textNode->GetText())) {
           return NS_ERROR_NULL_POINTER;
         }
         uint32_t len = textNode->TextLength();
 
         if (len < 1) {
--- a/editor/libeditor/tests/mochitest.ini
+++ b/editor/libeditor/tests/mochitest.ini
@@ -247,16 +247,17 @@ skip-if = toolkit == 'android' # bug 131
 [test_bug1330796.html]
 [test_bug1332876.html]
 [test_bug1352799.html]
 [test_bug1355792.html]
 [test_bug1358025.html]
 [test_bug1361008.html]
 [test_bug1368544.html]
 [test_bug1385905.html]
+[test_bug1394758.html]
 
 [test_CF_HTML_clipboard.html]
 subsuite = clipboard
 [test_composition_event_created_in_chrome.html]
 [test_contenteditable_focus.html]
 [test_documentCharacterSet.html]
 [test_dom_input_event_on_htmleditor.html]
 skip-if = toolkit == 'android' # bug 1054087
new file mode 100644
--- /dev/null
+++ b/editor/libeditor/tests/test_bug1394758.html
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=1394758
+-->
+<head>
+  <title>Test for Bug1394758</title>
+  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+  <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1394758">Mozilla Bug 1394758</a>
+<p id="display"></p>
+<div id="content">
+<div id="editable" contenteditable="true">
+  <span id="span" contenteditable="false">
+    Hello
+  </span>
+  World
+</div>
+</div>
+<pre id="test">
+<script type="application/javascript">
+
+/** Test for Bug 611182 **/
+SimpleTest.waitForExplicitFinish();
+SimpleTest.waitForFocus(function() {
+  var editable = document.getElementById('editable');
+  var span = document.getElementById('span');
+  var beforeSpan = span.textContent;
+
+  editable.focus();
+  window.getSelection().collapse(span.nextSibling, 0);
+
+  synthesizeKey("KEY_ArrowRight", {});
+  synthesizeKey("KEY_ArrowRight", {});
+  synthesizeKey("KEY_ArrowRight", {});
+  synthesizeKey("KEY_Backspace", {});
+  synthesizeKey("KEY_Backspace", {});
+
+  is(span.textContent, beforeSpan,
+     "VK_BACK_SPACE should not modify non-editable area");
+  is(span.nextSibling.textContent.trim(), "rld",
+     "VK_BACK_SPACE should delete first 2 characters");
+
+  synthesizeKey("KEY_Delete", {});
+
+  is(span.textContent, beforeSpan,
+     "VK_DELETE should not modify non-editable area");
+  is(span.nextSibling.textContent.trim(), "ld",
+     "VK_DELETE should delete first character");
+
+  SimpleTest.finish();
+});
+
+</script>
+</pre>
+</body>
+</html>
--- a/layout/base/nsDocumentViewer.cpp
+++ b/layout/base/nsDocumentViewer.cpp
@@ -1502,16 +1502,18 @@ nsDocumentViewer::Open(nsISupports *aSta
       nsCOMPtr<nsIDocShell> shell = do_QueryInterface(item);
       AttachContainerRecurse(shell);
     }
   }
 
   SyncParentSubDocMap();
 
   if (mFocusListener && mDocument) {
+    // The focus listener may have been disconnected.
+    mFocusListener->Init(this);
     mDocument->AddEventListener(NS_LITERAL_STRING("focus"), mFocusListener,
                                 false, false);
     mDocument->AddEventListener(NS_LITERAL_STRING("blur"), mFocusListener,
                                 false, false);
   }
 
   // XXX re-enable image animations once that works correctly
 
--- a/layout/generic/nsFrame.cpp
+++ b/layout/generic/nsFrame.cpp
@@ -2450,17 +2450,16 @@ nsIFrame::BuildDisplayListForStackingCon
         dirtyRect = aBuilder->GetPreserves3DRects();
       }
 
       nsRect untransformedDirtyRect;
       if (nsDisplayTransform::UntransformRect(dirtyRect, overflow, this,
             &untransformedDirtyRect)) {
         dirtyRect = untransformedDirtyRect;
       } else {
-        NS_WARNING("Unable to untransform dirty rect!");
         // This should only happen if the transform is singular, in which case nothing is visible anyway
         dirtyRect.SetEmpty();
       }
     }
     inTransform = true;
   }
 
   bool usingFilter = StyleEffects()->HasFilters();
--- a/layout/painting/nsDisplayList.cpp
+++ b/layout/painting/nsDisplayList.cpp
@@ -2924,16 +2924,36 @@ nsDisplaySolidColorRegion::WriteDebugInf
 {
   aStream << " (rgba "
           << int(mColor.r * 255) << ","
           << int(mColor.g * 255) << ","
           << int(mColor.b * 255) << ","
           << mColor.a << ")";
 }
 
+bool
+nsDisplaySolidColorRegion::CreateWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
+                                                   const StackingContextHelper& aSc,
+                                                   nsTArray<WebRenderParentCommand>& aParentCommands,
+                                                   mozilla::layers::WebRenderLayerManager* aManager,
+                                                   nsDisplayListBuilder* aDisplayListBuilder)
+{
+  for (auto iter = mRegion.RectIter(); !iter.Done(); iter.Next()) {
+    nsRect rect = iter.Get();
+    LayoutDeviceRect layerRects = LayoutDeviceRect::FromAppUnits(
+      rect, mFrame->PresContext()->AppUnitsPerDevPixel());
+    wr::LayoutRect transformedRect = aSc.ToRelativeLayoutRect(layerRects);
+    aBuilder.PushRect(transformedRect,
+                      transformedRect,
+                      wr::ToColorF(ToDeviceColor(mColor)));
+  }
+
+  return true;
+}
+
 static void
 RegisterThemeGeometry(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame,
                       nsITheme::ThemeGeometryType aType)
 {
   if (aBuilder->IsInChromeDocumentOrPopup() && !aBuilder->IsInTransform()) {
     nsIFrame* displayRoot = nsLayoutUtils::GetDisplayRootFrame(aFrame);
     nsPoint offset = aBuilder->IsInSubdocument() ? aBuilder->ToReferenceFrame(aFrame)
                                                  : aFrame->GetOffsetTo(displayRoot);
--- a/layout/painting/nsDisplayList.h
+++ b/layout/painting/nsDisplayList.h
@@ -3113,16 +3113,22 @@ public:
       static_cast<const nsDisplaySolidColorRegionGeometry*>(aGeometry);
     if (mColor == geometry->mColor) {
       aInvalidRegion->Xor(geometry->mRegion, mRegion);
     } else {
       aInvalidRegion->Or(geometry->mRegion.GetBounds(), mRegion.GetBounds());
     }
   }
 
+  virtual bool CreateWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
+                                       const StackingContextHelper& aSc,
+                                       nsTArray<WebRenderParentCommand>& aParentCommands,
+                                       mozilla::layers::WebRenderLayerManager* aManager,
+                                       nsDisplayListBuilder* aDisplayListBuilder) override;
+
   NS_DISPLAY_DECL_NAME("SolidColorRegion", TYPE_SOLID_COLOR_REGION)
 
 protected:
 
   virtual nsRect GetBounds(nsDisplayListBuilder* aBuilder, bool* aSnap) override;
   virtual void Paint(nsDisplayListBuilder* aBuilder, gfxContext* aCtx) override;
   virtual void WriteDebugInfo(std::stringstream& aStream) override;
 
--- a/layout/style/test/test_grid_shorthand_serialization.html
+++ b/layout/style/test/test_grid_shorthand_serialization.html
@@ -21,16 +21,18 @@ var initial_values = {
     gridTemplateColumns: "none",
     gridAutoFlow: "row",
     gridAutoRows: "auto",
     gridAutoColumns: "auto",
     gridRowGap: "0px",
     gridColumnGap: "0px",
 };
 
+const isStylo = SpecialPowers.DOMWindowUtils.isStyledByServo;
+
 // For various specified values of the grid-template subproperties,
 // test the serialization of the shorthand.
 var grid_template_test_cases = [
     {
         gridTemplateColumns: "100px",
         shorthand: "none / 100px",
     },
     {
@@ -63,23 +65,23 @@ var grid_template_test_cases = [
     {
         gridTemplateAreas: "\"a\"",
         gridTemplateRows: "[foo] 20px [bar]",
         shorthand: "[foo] \"a\" 20px [bar]",
     },
     {
         gridTemplateAreas: "\"a\"",
         gridTemplateRows: "[foo] repeat(1, 20px) [bar]",
-        shorthand: "[foo] \"a\" 20px [bar]",
+        shorthand: isStylo ? "" : "[foo] \"a\" 20px [bar]",
     },
     {
         gridTemplateAreas: "\"a a\"",
         gridTemplateColumns: "repeat(2, 100px)",
         gridTemplateRows: "auto",
-        shorthand: "\"a a\" auto / 100px 100px",
+        shorthand: isStylo ? "" : "\"a a\" auto / 100px 100px",
     },
     // Combinations of longhands that make the shorthand non-serializable:
     {
         gridTemplateAreas: "\"a\"",
         gridTemplateRows: "20px 100px",
         shorthand: "",
     },
     {
index fad86a6b9367d42e19eaa39f0e9109a3ae8bee3f..94f3c1ab939ca04837c8f9611e83d0652156c17c
GIT binary patch
literal 52440
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
index d7e8a15bda58089f7eb1a9723051ec3f16605e53..44c64c5a365990c3fd76defeb095d369476d6b79
GIT binary patch
literal 46119
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
B*%tr+
index 861fcd38e48cfa9ce9b36e080ebed4c4596e7041..2966df5298d84a28a09472789d75556be24e7545
GIT binary patch
literal 17783
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%0AJ#!!VAng>2ot31WO88uB+zh>&{-MQt
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
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8b890684dbbb9712e2c31bc9076d079834b1a085
GIT binary patch
literal 12705
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
a9oZ4~PFp)K=XT&1knR<u%Ow|YhW~$SXI4f4
deleted file mode 100644
index f8d4c16b0601c0277de9e529882e61c3b2170fc2..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/mobile/android/app/src/photon/java/org/mozilla/gecko/toolbar/ToolbarDisplayLayout.java
+++ b/mobile/android/app/src/photon/java/org/mozilla/gecko/toolbar/ToolbarDisplayLayout.java
@@ -24,28 +24,32 @@ import org.mozilla.gecko.util.HardwareUt
 import org.mozilla.gecko.util.StringUtils;
 import org.mozilla.gecko.util.ViewUtil;
 import org.mozilla.gecko.widget.themed.ThemedImageButton;
 import org.mozilla.gecko.widget.themed.ThemedLinearLayout;
 import org.mozilla.gecko.widget.themed.ThemedTextView;
 
 import android.content.Context;
 import android.support.annotation.NonNull;
+import android.text.Editable;
 import android.text.Spannable;
 import android.text.SpannableString;
 import android.text.SpannableStringBuilder;
 import android.text.TextUtils;
+import android.text.TextWatcher;
 import android.text.style.ForegroundColorSpan;
 import android.util.AttributeSet;
+import android.util.TypedValue;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.Button;
-import android.widget.ImageButton;
+import android.widget.HorizontalScrollView;
 
 import org.mozilla.gecko.switchboard.SwitchBoard;
+import org.mozilla.gecko.widget.themed.ThemedView;
 
 /**
 * {@code ToolbarDisplayLayout} is the UI for when the toolbar is in
 * display state. It's used to display the state of the currently selected
 * tab. It should always be updated through a single entry point
 * (updateFromTab) and should never track any tab events or gecko messages
 * on its own to keep it as dumb as possible.
 *
@@ -53,18 +57,20 @@ import org.mozilla.gecko.switchboard.Swi
 * when UpdateFlags.PROGRESS is used depending on the current tab state.
 * The progress mode is triggered when the tab is loading a page. Display mode
 * is used otherwise.
 *
 * {@code ToolbarDisplayLayout} is meant to be owned by {@code BrowserToolbar}
 * which is the main event bus for the toolbar subsystem.
 */
 public class ToolbarDisplayLayout extends ThemedLinearLayout {
+    private static final String LOGTAG = "GeckoToolbarDisplayLayout";
 
-    private static final String LOGTAG = "GeckoToolbarDisplayLayout";
+    private static final int MIN_DOMAIN_SCROLL_MARGIN_DP = 10;
+
     private boolean mTrackingProtectionEnabled;
 
     // To be used with updateFromTab() to allow the caller
     // to give enough context for the requested state change.
     enum UpdateFlags {
         TITLE,
         FAVICON,
         PROGRESS,
@@ -92,17 +98,20 @@ public class ToolbarDisplayLayout extend
 
     private final BrowserApp mActivity;
 
     private UIMode mUiMode;
 
     private boolean mIsAttached;
 
     private final ThemedTextView mTitle;
+    private final ThemedView mTitleBackground;
     private final int mTitlePadding;
+    private final HorizontalScrollView mTitleScroll;
+    private final int mMinUrlScrollMargin;
     private ToolbarPrefs mPrefs;
     private OnTitleChangeListener mTitleChangeListener;
 
     private final ThemedImageButton mSiteSecurity;
     private final ThemedImageButton mStop;
     private OnStopListener mStopListener;
 
     private final PageActionLayout mPageActionLayout;
@@ -136,17 +145,38 @@ public class ToolbarDisplayLayout extend
         super(context, attrs);
         setOrientation(HORIZONTAL);
 
         mActivity = (BrowserApp) context;
 
         LayoutInflater.from(context).inflate(R.layout.toolbar_display_layout, this);
 
         mTitle = (ThemedTextView) findViewById(R.id.url_bar_title);
+        mTitleBackground = (ThemedView) findViewById(R.id.url_bar_title_bg);
         mTitlePadding = mTitle.getPaddingRight();
+        mTitleScroll = (HorizontalScrollView) findViewById(R.id.url_bar_title_scroll_view);
+
+        final OnLayoutChangeListener resizeListener = new OnLayoutChangeListener() {
+            @Override
+            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
+                final int oldWidth = oldRight - oldLeft;
+                final int newWidth = right - left;
+
+                if (newWidth != oldWidth) {
+                    scrollTitle();
+                }
+            }
+        };
+        mTitle.addTextChangedListener(new TextChangeListener());
+        mTitle.addOnLayoutChangeListener(resizeListener);
+        mTitleScroll.addOnLayoutChangeListener(resizeListener);
+
+        mMinUrlScrollMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
+                                                              MIN_DOMAIN_SCROLL_MARGIN_DP,
+                                                              getResources().getDisplayMetrics());
 
         mUrlColorSpan = new ForegroundColorSpan(ContextCompat.getColor(context, R.color.url_bar_urltext));
         mPrivateUrlColorSpan = new ForegroundColorSpan(ContextCompat.getColor(context, R.color.url_bar_urltext_private));
         mBlockedColorSpan = new ForegroundColorSpan(ContextCompat.getColor(context, R.color.url_bar_blockedtext));
         mPrivateBlockedColorSpan = new ForegroundColorSpan(ContextCompat.getColor(context, R.color.url_bar_blockedtext_private));
         mDomainColorSpan = new ForegroundColorSpan(ContextCompat.getColor(context, R.color.url_bar_domaintext));
         mPrivateDomainColorSpan = new ForegroundColorSpan(ContextCompat.getColor(context, R.color.url_bar_domaintext_private));
         mCertificateOwnerColorSpan = new ForegroundColorSpan(ContextCompat.getColor(context, R.color.url_bar_certificate_owner));
@@ -163,16 +193,18 @@ public class ToolbarDisplayLayout extend
     }
 
     @Override
     public void setPrivateMode(boolean isPrivate) {
         super.setPrivateMode(isPrivate);
         mSiteSecurity.setPrivateMode(isPrivate);
         mStop.setPrivateMode(isPrivate);
         mPageActionLayout.setPrivateMode(isPrivate);
+        mTitle.setPrivateMode(isPrivate);
+        mTitleBackground.setPrivateMode(isPrivate);
     }
 
     @Override
     public void onAttachedToWindow() {
         super.onAttachedToWindow();
 
         mIsAttached = true;
 
@@ -240,16 +272,17 @@ public class ToolbarDisplayLayout extend
         }
 
         if (flags.contains(UpdateFlags.PROGRESS)) {
             updateProgress(tab);
         }
 
         if (flags.contains(UpdateFlags.PRIVATE_MODE)) {
             mTitle.setPrivateMode(tab.isPrivate());
+            mTitleBackground.setPrivateMode(tab.isPrivate());
         }
     }
 
     void setTitle(CharSequence title) {
         mTitle.setText(title);
 
         if (TextUtils.isEmpty(title)) {
             //  Reset TextDirection to Locale in order to reveal text hint in correct direction
@@ -387,16 +420,63 @@ public class ToolbarDisplayLayout extend
 
         if (mSecurityImageLevel != imageLevel) {
             mSecurityImageLevel = imageLevel;
             mSiteSecurity.setImageLevel(mSecurityImageLevel);
             updatePageActions();
         }
     }
 
+    private void scrollTitle() {
+        final Editable text = mTitle.getEditableText();
+        final int textViewWidth = mTitle.getWidth();
+        final int textWidth = textViewWidth - mTitlePadding;
+        final int scrollViewWidth = mTitleScroll.getWidth();
+        if (textWidth <= scrollViewWidth) {
+            // The text fits within the ScrollView, so nothing to do here...
+            if (textViewWidth > scrollViewWidth) {
+                // ... although if the TextView is sufficiently padded on the right side, it might
+                // push the text out of view on the left side, so scroll to the beginning just to be
+                // on the safe side.
+                mTitleScroll.scrollTo(0, 0);
+            }
+            return;
+        }
+
+        final ForegroundColorSpan spanToCheck =
+                mTitle.isPrivateMode() ? mPrivateDomainColorSpan : mDomainColorSpan;
+        int domainEnd = text.getSpanEnd(spanToCheck);
+        if (domainEnd == -1) {
+            // We're not showing a domain, just scroll to the start of the text.
+            mTitleScroll.scrollTo(0, 0);
+            return;
+        }
+
+        // If we're showing an URL that is larger than the URL bar, we want to align the end of
+        // the domain part with the right side of URL bar, so as to put the focus on the base
+        // domain and avoid phishing attacks using long subdomains that have been crafted to be cut
+        // off at just the right place and then resemble a legitimate base domain.
+        final int domainTextWidth = StringUtils.getTextWidth(text.toString(), 0, domainEnd, mTitle.getPaint());
+        final int overhang = textViewWidth - domainTextWidth;
+        // For optimal alignment, we want to take the fadingEdge into account and align the domain
+        // with the start of the fade out.
+        final int maxFadingEdge = mTitleScroll.getHorizontalFadingEdgeLength();
+
+        // The width of the fadingEdge corresponds to the width of the child view that is overhanging
+        // the ScrollView, clamped by maxFadingEdge.
+        int targetMargin = overhang / 2;
+        targetMargin = Math.min(targetMargin, maxFadingEdge);
+        // Even when there is no fadingEdge, we want to keep a little margin between the domain and
+        // the end of the URL bar, so as to show the first character or so of the path part.
+        targetMargin = Math.max(targetMargin, mMinUrlScrollMargin);
+
+        final int scrollTarget = domainTextWidth + targetMargin - scrollViewWidth;
+        mTitleScroll.scrollTo(scrollTarget, 0);
+    }
+
     private void updateProgress(@NonNull Tab tab) {
         final boolean shouldShowThrobber = tab.getState() == Tab.STATE_LOADING;
 
         updateUiMode(shouldShowThrobber ? UIMode.PROGRESS : UIMode.DISPLAY);
 
         if (Tab.STATE_SUCCESS == tab.getState() && mTrackingProtectionEnabled) {
             mActivity.showTrackingProtectionPromptIfApplicable();
         }
@@ -471,9 +551,22 @@ public class ToolbarDisplayLayout extend
         }
 
         return false;
     }
 
     void destroy() {
         mSiteIdentityPopup.destroy();
     }
+
+    private class TextChangeListener implements TextWatcher {
+        @Override
+        public void afterTextChanged(Editable text) {
+            scrollTitle();
+        }
+
+        @Override
+        public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
+
+        @Override
+        public void onTextChanged(CharSequence s, int start, int before, int count) { }
+    }
 }
--- a/mobile/android/app/src/photon/res/layout/toolbar_display_layout.xml
+++ b/mobile/android/app/src/photon/res/layout/toolbar_display_layout.xml
@@ -21,25 +21,50 @@
         android:id="@+id/site_security"
         style="@style/UrlBar.SiteIdentity"
         android:layout_gravity="center_vertical"
         android:background="@drawable/url_bar_title_bg"
         android:contentDescription="@string/site_security"
         android:src="@drawable/security_mode_icon"
         tools:src="@drawable/ic_lock"/>
 
-    <org.mozilla.gecko.widget.FadedMultiColorTextView
-        android:id="@+id/url_bar_title"
-        style="@style/UrlBar.Title"
+    <FrameLayout
         android:layout_width="match_parent"
-        android:layout_gravity="center_vertical"
-        android:layout_weight="1.0"
-        android:background="@drawable/url_bar_title_bg"
-        gecko:fadeBackgroundColor="@android:color/transparent"
-        gecko:fadeWidth="40dip"/>
+        android:layout_height="match_parent"
+        android:layout_weight="1.0">
+
+        <org.mozilla.gecko.widget.themed.ThemedView
+            android:id="@+id/url_bar_title_bg"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/browser_toolbar_url_height"
+            android:layout_gravity="center_vertical"
+            android:background="@drawable/url_bar_title_bg"/>
+
+        <!-- We need this on a separate layer to avoid fading out the toolbar background as well
+     and we can't use a hardware layer because that causes problems with the snapshot
+     for our toolbar animation.-->
+        <org.mozilla.gecko.widget.FadedHorizontalScrollView
+            android:id="@+id/url_bar_title_scroll_view"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:fillViewport="true"
+            android:scrollbars="none"
+            android:overScrollMode="never"
+            android:layerType="software"
+            gecko:fadeWidth="25dp">
+
+            <org.mozilla.gecko.widget.themed.ThemedTextView
+                android:id="@+id/url_bar_title"
+                style="@style/UrlBar.Title"
+                android:layout_width="wrap_content"
+                android:layout_gravity="center_vertical"/>
+
+        </org.mozilla.gecko.widget.FadedHorizontalScrollView>
+
+    </FrameLayout>
 
     <org.mozilla.gecko.toolbar.PageActionLayout
         android:id="@+id/page_action_layout"
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
         android:orientation="horizontal"
         android:visibility="gone"
         tools:visibility="visible"/>
--- a/mobile/android/base/java/org/mozilla/gecko/customtabs/CustomTabsActivity.java
+++ b/mobile/android/base/java/org/mozilla/gecko/customtabs/CustomTabsActivity.java
@@ -3,17 +3,16 @@
  * 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/. */
 
 package org.mozilla.gecko.customtabs;
 
 import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
-import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.graphics.Bitmap;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Bundle;
 import android.provider.Browser;
 import android.support.annotation.ColorInt;
@@ -50,18 +49,18 @@ import org.mozilla.gecko.permissions.Per
 import org.mozilla.gecko.prompts.Prompt;
 import org.mozilla.gecko.prompts.PromptListItem;
 import org.mozilla.gecko.prompts.PromptService;
 import org.mozilla.gecko.util.ActivityUtils;
 import org.mozilla.gecko.util.Clipboard;
 import org.mozilla.gecko.util.ColorUtil;
 import org.mozilla.gecko.util.GeckoBundle;
 import org.mozilla.gecko.util.IntentUtils;
+import org.mozilla.gecko.util.PackageUtil;
 import org.mozilla.gecko.util.ThreadUtils;
-import org.mozilla.gecko.util.URIUtils;
 import org.mozilla.gecko.widget.GeckoPopupMenu;
 
 import java.util.List;
 
 public class CustomTabsActivity extends AppCompatActivity
                                 implements GeckoMenu.Callback,
                                            GeckoView.ContentListener,
                                            GeckoView.NavigationListener,
@@ -370,20 +369,21 @@ public class CustomTabsActivity extends 
         }
 
         final MenuInflater inflater = new GeckoMenuInflater(this);
         inflater.inflate(R.menu.customtabs_menu, geckoMenu);
 
         // insert default browser name to title of menu-item-Open-In
         final MenuItem openItem = geckoMenu.findItem(R.id.custom_tabs_menu_open_in);
         if (openItem != null) {
-            final Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://"));
-            final ResolveInfo info = getPackageManager()
-                    .resolveActivity(browserIntent, PackageManager.MATCH_DEFAULT_ONLY);
-            final String name = info.loadLabel(getPackageManager()).toString();
+            final ResolveInfo info = PackageUtil.getDefaultBrowser(this);
+
+            final String name = (info == null)
+                    ? getString(R.string.ellipsis)
+                    : info.loadLabel(getPackageManager()).toString();
             openItem.setTitle(getString(R.string.custom_tabs_menu_item_open_in, name));
         }
 
         menuItemControl = geckoMenu.findItem(R.id.custom_tabs_menu_control);
         // on some configurations(ie. Android 5.1.1 + Nexus 5), no idea why the state not be enabled
         // if the Drawable is a LevelListDrawable, then the icon color is incorrect.
         final Drawable icon = menuItemControl.getIcon();
         if (icon != null && !icon.isStateful()) {
--- a/mobile/android/base/java/org/mozilla/gecko/extensions/ExtensionPermissionsHelper.java
+++ b/mobile/android/base/java/org/mozilla/gecko/extensions/ExtensionPermissionsHelper.java
@@ -11,17 +11,16 @@ import org.mozilla.gecko.util.EventCallb
 import org.mozilla.gecko.util.GeckoBundle;
 import org.mozilla.gecko.util.ResourceDrawableUtils;
 import org.mozilla.gecko.R;
 
 import android.app.AlertDialog;
 import android.content.DialogInterface;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.ImageView;
 import android.widget.TextView;
 
 public class ExtensionPermissionsHelper implements BundleEventListener {
     private final Context mContext;
 
@@ -63,17 +62,20 @@ public class ExtensionPermissionsHelper 
                 @Override
                 public void onClick(DialogInterface dialog, int whichButton) {
                     callback.sendSuccess(false);
                 }
             });
 
             final String iconUrl = message.getString("icon");
             if ("DEFAULT".equals(iconUrl)) {
-                headerText.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_extension, 0, 0, 0);
+                final Drawable d = ResourceDrawableUtils.getDrawable(mContext, R.drawable.ic_extension);
+                if (d != null) {
+                    headerText.setCompoundDrawablesWithIntrinsicBounds(d, null, null, null);
+                }
             } else {
                 ResourceDrawableUtils.getDrawable(mContext, iconUrl, new ResourceDrawableUtils.BitmapLoader() {
                         @Override
                         public void onBitmapFound(final Drawable d) {
                             headerText.setCompoundDrawablesWithIntrinsicBounds(d, null, null, null);
                         }
                     });
             }
--- a/mobile/android/base/java/org/mozilla/gecko/toolbar/BrowserToolbar.java
+++ b/mobile/android/base/java/org/mozilla/gecko/toolbar/BrowserToolbar.java
@@ -4,16 +4,17 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 package org.mozilla.gecko.toolbar;
 
 import java.util.ArrayList;
 import java.util.EnumSet;
 import java.util.List;
 
+import android.graphics.Rect;
 import android.support.annotation.Nullable;
 import android.support.v4.content.ContextCompat;
 import org.mozilla.gecko.BrowserApp;
 import org.mozilla.gecko.GeckoSharedPrefs;
 import org.mozilla.gecko.R;
 import org.mozilla.gecko.Tab;
 import org.mozilla.gecko.Tabs;
 import org.mozilla.gecko.Telemetry;
@@ -31,16 +32,17 @@ import org.mozilla.gecko.tabs.TabHistory
 import org.mozilla.gecko.toolbar.ToolbarDisplayLayout.OnStopListener;
 import org.mozilla.gecko.toolbar.ToolbarDisplayLayout.OnTitleChangeListener;
 import org.mozilla.gecko.toolbar.ToolbarDisplayLayout.UpdateFlags;
 import org.mozilla.gecko.util.Clipboard;
 import org.mozilla.gecko.util.HardwareUtils;
 import org.mozilla.gecko.util.MenuUtils;
 import org.mozilla.gecko.util.WindowUtil;
 import org.mozilla.gecko.widget.AnimatedProgressBar;
+import org.mozilla.gecko.widget.TouchDelegateWithReset;
 import org.mozilla.gecko.widget.themed.ThemedImageButton;
 import org.mozilla.gecko.widget.themed.ThemedRelativeLayout;
 
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.Canvas;
 import android.graphics.Paint;
 import android.graphics.drawable.Drawable;
@@ -51,16 +53,17 @@ import android.util.Log;
 import android.view.ContextMenu;
 import android.view.LayoutInflater;
 import android.view.MenuInflater;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewTreeObserver.OnGlobalLayoutListener;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.Button;
+import android.widget.HorizontalScrollView;
 import android.widget.LinearLayout;
 import android.widget.PopupWindow;
 import android.support.annotation.NonNull;
 
 /**
 * {@code BrowserToolbar} is single entry point for users of the toolbar
 * subsystem i.e. this should be the only import outside the 'toolbar'
 * package.
@@ -111,16 +114,17 @@ public abstract class BrowserToolbar ext
     }
 
     protected enum UIMode {
         EDIT,
         DISPLAY
     }
 
     protected final ToolbarDisplayLayout urlDisplayLayout;
+    protected final HorizontalScrollView urlDisplayScroll;
     protected final ToolbarEditLayout urlEditLayout;
     protected final View urlBarEntry;
     protected boolean isSwitchingTabs;
     protected final ThemedImageButton tabsButton;
 
     private AnimatedProgressBar progressBar;
     protected final TabCounter tabsCounter;
     protected final View menuButton;
@@ -181,16 +185,17 @@ public abstract class BrowserToolbar ext
         activity = (BrowserApp) context;
 
         LayoutInflater.from(context).inflate(R.layout.browser_toolbar, this);
 
         Tabs.registerOnTabsChangedListener(this);
         isSwitchingTabs = true;
 
         urlDisplayLayout = (ToolbarDisplayLayout) findViewById(R.id.display_layout);
+        urlDisplayScroll = (HorizontalScrollView) findViewById(R.id.url_bar_title_scroll_view);
         urlBarEntry = findViewById(R.id.url_bar_entry);
         urlEditLayout = (ToolbarEditLayout) findViewById(R.id.edit_layout);
 
         tabsButton = (ThemedImageButton) findViewById(R.id.tabs);
         tabsCounter = (TabCounter) findViewById(R.id.tabs_counter);
         tabsCounter.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
 
         menuButton = findViewById(R.id.menu);
@@ -208,17 +213,37 @@ public abstract class BrowserToolbar ext
         shadowPaint.setStrokeWidth(0.0f);
 
         setUIMode(UIMode.DISPLAY);
 
         prefs = new ToolbarPrefs();
         urlDisplayLayout.setToolbarPrefs(prefs);
         urlEditLayout.setToolbarPrefs(prefs);
 
-        setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {
+        // ScrollViews are allowed to have only one child.
+        final View scrollChild = urlDisplayScroll.getChildAt(0);
+
+        urlDisplayScroll.addOnLayoutChangeListener(new OnLayoutChangeListener() {
+            @Override
+            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
+                final int width = urlDisplayScroll.getWidth();
+                final int height = urlDisplayScroll.getHeight();
+                final int oldWidth = oldRight - oldLeft;
+                final int oldHeight = oldBottom - oldTop;
+
+                if (width != oldWidth || height != oldHeight) {
+                    final Rect r = new Rect();
+                    r.right = width;
+                    r.bottom = height;
+                    urlDisplayScroll.setTouchDelegate(new TouchDelegateWithReset(r, scrollChild));
+                }
+            }
+        });
+
+        scrollChild.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {
             @Override
             public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
                 // Do not show the context menu while editing
                 if (isEditing()) {
                     return;
                 }
 
                 // NOTE: Use MenuUtils.safeSetVisible because some actions might
@@ -251,17 +276,17 @@ public abstract class BrowserToolbar ext
                     menu.findItem(R.id.add_to_launcher).setVisible(false);
                     menu.findItem(R.id.set_as_homepage).setVisible(false);
                     MenuUtils.safeSetVisible(menu, R.id.subscribe, false);
                     MenuUtils.safeSetVisible(menu, R.id.add_search_engine, false);
                 }
             }
         });
 
-        setOnClickListener(new OnClickListener() {
+        scrollChild.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
                 if (activateListener != null) {
                     activateListener.onActivate();
                 }
             }
         });
     }
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/util/PackageUtil.java
@@ -0,0 +1,67 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
+ * 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/. */
+
+package org.mozilla.gecko.util;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ResolveInfo;
+import android.net.Uri;
+import android.support.annotation.NonNull;
+
+import java.util.List;
+
+public class PackageUtil {
+
+    private static final Uri TEST_URI = Uri.parse("https://www.mozilla.org");
+
+    private PackageUtil() {
+    }
+
+    /**
+     * Get information of user's default browser
+     *
+     * @param context
+     * @return information of default browser, null if user hasn't set any default value.
+     */
+    public static ResolveInfo getDefaultBrowser(@NonNull Context context) {
+        final Intent browserIntent = new Intent(Intent.ACTION_VIEW, TEST_URI);
+        final int additionalFlags = 0; // no additional flags
+
+        // this info might be activity picker
+        final ResolveInfo resolveInfo = context.getPackageManager()
+                .resolveActivity(browserIntent, additionalFlags);
+
+        if (resolveInfo == null) {
+            return null;
+        }
+
+        if (!resolveInfo.activityInfo.exported) {
+            return null;
+        }
+
+        final List<ResolveInfo> browsers = resolveBrowsers(context);
+        for (ResolveInfo it : browsers) {
+            if (resolveInfo.activityInfo.packageName.equals(it.activityInfo.packageName)) {
+                return resolveInfo;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Information of activities which could handle a web-page-browsing intent.
+     *
+     * @param context
+     * @return a List of activity's information. If default browser set, the list might only has one item.
+     */
+    private static List<ResolveInfo> resolveBrowsers(@NonNull Context context) {
+        final Intent browserIntent = new Intent(Intent.ACTION_VIEW, TEST_URI);
+        final int additionalFlags = 0; // no additional flags
+
+        return context.getPackageManager().queryIntentActivities(browserIntent, additionalFlags);
+    }
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/widget/FadedHorizontalScrollView.java
@@ -0,0 +1,192 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
+ * 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/. */
+
+package org.mozilla.gecko.widget;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.LinearGradient;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
+import android.graphics.Shader;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.TouchDelegate;
+import android.view.View;
+import android.widget.HorizontalScrollView;
+
+import org.mozilla.gecko.AppConstants.Versions;
+import org.mozilla.gecko.R;
+
+/**
+ * A {@link HorizontalScrollView} implementation with a more efficient fadingEdge drawing strategy
+ * than the built-in version provided by Android. The width of the fade effect can be controlled via
+ * <code>gecko:fadeWidth</code>. To control in how far the fading effect should affect any views
+ * further up in the View hierarchy, place this view or one of its parents onto a separate layer
+ * using <code>android:layerType</code>. Currently, only horizontal fading is supported.
+ * <p>
+ * Additionally, {@link TouchDelegate} support (which isn't provided for in Android's ScrollView
+ * implementation) has been enabled.
+ */
+public class FadedHorizontalScrollView extends HorizontalScrollView {
+    // Width of the fade effect from end of the view.
+    private final int mFadeWidth;
+    private final boolean mPreMarshmallow;
+
+    private final FadePaint mFadePaint;
+    private float mFadeTop;
+    private float mFadeBottom;
+    private boolean mVerticalFadeBordersDirty;
+
+    private boolean mInterceptingTouchEvents;
+
+    public FadedHorizontalScrollView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        mPreMarshmallow = Versions.preMarshmallow;
+
+        mFadePaint = new FadePaint();
+        mVerticalFadeBordersDirty = true;
+        addOnLayoutChangeListener(new OnLayoutChangeListener() {
+            @Override
+            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
+                final int oldHeight = oldBottom - oldTop;
+                if (getHeight() != oldHeight) {
+                    mVerticalFadeBordersDirty = true;
+                }
+            }
+        });
+
+        final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.FadedTextView);
+        mFadeWidth = a.getDimensionPixelSize(R.styleable.FadedTextView_fadeWidth, 0);
+        a.recycle();
+    }
+
+    @Override
+    public int getHorizontalFadingEdgeLength() {
+        return mFadeWidth;
+    }
+
+    @Override
+    public void draw(Canvas canvas) {
+        super.draw(canvas);
+        if (mPreMarshmallow) {
+            // Let our descendants draw their contents first, so we can then fade them out.
+            drawFading(canvas);
+        }
+    }
+
+    @TargetApi(23)
+    @Override
+    public void onDrawForeground(Canvas canvas) {
+        // Our descendants have already painted, so we can draw the fading first to avoid fading out
+        // any scrollbars etc. as well.
+        drawFading(canvas);
+        super.onDrawForeground(canvas);
+    }
+
+    private void drawFading(final Canvas canvas) {
+        // This code here is mostly a condensed version of Android's fadingEdge implementation
+        // in View#draw.
+
+        final int left = getScrollX() + getPaddingLeft();
+        final int right = getScrollX() + getRight() - getLeft() - getPaddingRight();
+
+        // Clip the fade length to prevent the opposing fadingEdges from overlapping each other.
+        int fadeWidth = getHorizontalFadingEdgeLength();
+        if (left + fadeWidth > right - fadeWidth) {
+            fadeWidth = (right - left) / 2;
+        }
+
+        final float effectiveFadeLeft = fadeWidth * getLeftFadingEdgeStrength();
+        final float effectiveFadeRight = fadeWidth * getRightFadingEdgeStrength();
+        final boolean drawLeft = effectiveFadeLeft > 1.0f;
+        final boolean drawRight = effectiveFadeRight > 1.0f;
+
+        if (!drawLeft && !drawRight) {
+            return;
+        }
+
+        if (mVerticalFadeBordersDirty) {
+            updateVerticalFadeBorders();
+        }
+
+        final Matrix matrix = mFadePaint.matrix;
+        final Shader fade = mFadePaint.fade;
+
+        if (drawLeft) {
+            matrix.setScale(1, effectiveFadeLeft);
+            matrix.postRotate(-90);
+            matrix.postTranslate(left, mFadeTop);
+            fade.setLocalMatrix(matrix);
+            mFadePaint.setShader(fade);
+            canvas.drawRect(left, mFadeTop, left + effectiveFadeLeft, mFadeBottom, mFadePaint);
+        }
+
+        if (drawRight) {
+            matrix.setScale(1, effectiveFadeRight);
+            matrix.postRotate(90);
+            matrix.postTranslate(right, mFadeTop);
+            fade.setLocalMatrix(matrix);
+            mFadePaint.setShader(fade);
+            canvas.drawRect(right - effectiveFadeRight, mFadeTop, right, mFadeBottom, mFadePaint);
+        }
+    }
+
+    private void updateVerticalFadeBorders() {
+        final View child = getChildAt(0);
+
+        if (child != null) {
+            mFadeTop = child.getTop() + child.getPaddingTop();
+            mFadeBottom = child.getBottom() - child.getPaddingBottom();
+        } else {
+            mFadeTop = 0;
+            mFadeBottom = 0;
+        }
+
+        mVerticalFadeBordersDirty = false;
+    }
+
+    private class FadePaint extends Paint {
+        public final Matrix matrix;
+        public final Shader fade;
+
+        public FadePaint() {
+            matrix = new Matrix();
+            fade = new LinearGradient(0, 0, 0, 1, 0xFF000000, 0, Shader.TileMode.CLAMP);
+            setShader(fade);
+            setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
+        }
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent(MotionEvent ev) {
+        // Once we intercept an event, this method stops being called until the intercept state
+        // is reset at the start of the following gesture. Therefore we can reset the tracking
+        // variable to false each time this method is being called.
+        mInterceptingTouchEvents = false;
+
+        final boolean intercept = super.onInterceptTouchEvent(ev);
+        if (intercept) {
+            mInterceptingTouchEvents = true;
+        }
+        return intercept;
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent ev) {
+        if (!mInterceptingTouchEvents) {
+            final TouchDelegate touchDelegate = getTouchDelegate();
+            if (touchDelegate != null && touchDelegate.onTouchEvent(ev)) {
+                return true;
+            }
+        }
+
+        return super.onTouchEvent(ev);
+    }
+}
--- a/mobile/android/base/moz.build
+++ b/mobile/android/base/moz.build
@@ -933,16 +933,17 @@ gbjar.sources += ['java/org/mozilla/geck
     'toolbar/ToolbarPrefs.java',
     'trackingprotection/TrackingProtectionPrompt.java',
     'updater/PostUpdateHandler.java',
     'updater/UpdateService.java',
     'updater/UpdateServiceHelper.java',
     'util/ColorUtil.java',
     'util/DrawableUtil.java',
     'util/JavaUtil.java',
+    'util/PackageUtil.java',
     'util/ResourceDrawableUtils.java',
     'util/TouchTargetUtil.java',
     'util/URIUtils.java',
     'util/ViewUtil.java',
     'util/WindowUtil.java',
     'webapps/WebAppActivity.java',
     'webapps/WebAppIndexer.java',
     'webapps/WebAppManifest.java',
@@ -960,16 +961,17 @@ gbjar.sources += ['java/org/mozilla/geck
     'widget/CropImageView.java',
     'widget/DateTimePicker.java',
     'widget/DefaultDoorHanger.java',
     'widget/DefaultItemAnimatorBase.java',
     'widget/DoorHanger.java',
     'widget/DoorhangerConfig.java',
     'widget/EllipsisTextView.java',
     'widget/ExternalIntentDuringPrivateBrowsingPromptFragment.java',
+    'widget/FadedHorizontalScrollView.java',
     'widget/FadedMultiColorTextView.java',
     'widget/FadedSingleColorTextView.java',
     'widget/FadedTextView.java',
     'widget/FaviconView.java',
     'widget/FilledCardView.java',
     'widget/FlowLayout.java',
     'widget/GeckoActionProvider.java',
     'widget/GeckoPopupMenu.java',
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/StringUtils.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/StringUtils.java
@@ -1,15 +1,17 @@
 /* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
  * 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/. */
 
 package org.mozilla.gecko.util;
 
+import android.graphics.Paint;
+import android.graphics.Rect;
 import android.net.Uri;
 import android.support.annotation.NonNull;
 import android.text.TextUtils;
 
 import java.nio.charset.Charset;
 import java.util.Collections;
 import java.util.LinkedHashSet;
 import java.util.List;
@@ -296,9 +298,24 @@ public class StringUtils {
     }
 
     /**
      * Case-insensitive version of {@link String#startsWith(String, int)}.
      */
     public static boolean caseInsensitiveStartsWith(String text, String prefix, int start) {
         return text.regionMatches(true, start, prefix, 0, prefix.length());
     }
+
+    /**
+     * Measures the width of the given substring when rendered using the specified Paint.
+     *
+     * @param text      String to measure and return its width
+     * @param start     Index of the first char in the string to measure
+     * @param end       1 past the last char in the string measure
+     * @param textPaint the paint used to render the text
+     * @return          the width of the specified substring in screen pixels
+     */
+    public static int getTextWidth(final String text, final int start, final int end, final Paint textPaint) {
+        final Rect bounds = new Rect();
+        textPaint.getTextBounds(text, start, end, bounds);
+        return bounds.width();
+    }
 }
\ No newline at end of file
--- a/security/manager/ssl/StaticHPKPins.h
+++ b/security/manager/ssl/StaticHPKPins.h
@@ -1135,9 +1135,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 = 479;
 
 static const int32_t kUnknownId = -1;
 
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1513530813057000);
+static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1513617930722000);
--- a/security/manager/ssl/nsSTSPreloadList.errors
+++ b/security/manager/ssl/nsSTSPreloadList.errors
@@ -6,17 +6,17 @@ 0222aa.com: did not receive HSTS header
 048.ag: could not connect to host
 0f.io: did not receive HSTS header
 0g.org.uk: could not connect to host
 0o0.ooo: could not connect to host
 0p.no: did not receive HSTS header
 0w0.vc: could not connect to host
 0x0a.net: could not connect to host
 0x1337.eu: could not connect to host
-0x44.net: could not connect to host
+0x44.net: did not receive HSTS header
 0x4b0c131e.pub: could not connect to host
 0x539.pw: could not connect to host
 0x90.fi: could not connect to host
 0xa.in: could not connect to host
 0xb612.org: could not connect to host
 0xf00.ch: did not receive HSTS header
 1017scribes.com: could not connect to host
 1018hosting.nl: did not receive HSTS header
@@ -35,16 +35,17 @@ 126ium.moe: could not connect to host
 127011-networks.ch: could not connect to host
 12vpn.org: could not connect to host
 12vpnchina.com: 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
 188betwarriors.co.uk: could not connect to host
 188trafalgar.ca: did not receive HSTS header
 1921958389.rsc.cdn77.org: 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
 1cover.com: could not connect to host
 1k8b.com: could not connect to host
@@ -63,17 +64,17 @@ 24sihu.com: could not connect to host
 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
-2ss.jp: did not receive HSTS header
+2ss.jp: could not connect to host
 300651.ru: did not receive HSTS header
 300m.com: did not receive HSTS header
 300mbmovies4u.cc: could not connect to host
 301.website: could not connect to host
 302.nyc: could not connect to host
 314chan.org: could not connect to host
 32ph.com: could not connect to host
 33338522.com: could not connect to host
@@ -153,17 +154,16 @@ 8522s.com: could not connect to host
 8522t.com: could not connect to host
 8522u.com: could not connect to host
 8522v.com: could not connect to host
 8522w.com: could not connect to host
 8522x.com: could not connect to host
 8522y.com: could not connect to host
 8522z.com: could not connect to host
 88.to: could not connect to host
-8887999.com: did not receive HSTS header
 888lu.co: could not connect to host
 89955.com: could not connect to host
 90smthng.com: could not connect to host
 911911.pw: could not connect to host
 922.be: could not connect to host
 960news.ca: could not connect to host
 9651678.ru: could not connect to host
 99511.fi: did not receive HSTS header
@@ -186,16 +186,17 @@ aaoo.net: could not connect to host
 aapp.space: could not connect to host
 aaron-gustafson.com: did not receive HSTS header
 aaronkimmig.de: could not connect to host
 aati.info: did not receive HSTS header
 abareplace.com: did not receive HSTS header
 abcheck.se: could not connect to host
 abearofsoap.com: could not connect to host
 abecodes.net: did not receive HSTS header
+aberdeenalmeras.com: could not connect to host
 abilitylist.org: did not receive HSTS header
 abioniere.de: could not connect to host
 ablogagency.net: could not connect to host
 abmahnhelfer.de: did not receive HSTS header
 abnarnro.com: could not connect to host
 abona24.pl: max-age too low: 0
 about.ge: did not receive HSTS header
 abouthrm.nl: did not receive HSTS header
@@ -222,16 +223,17 @@ accounts-p.com: could not connect to hos
 acgmoon.org: could not connect to host
 acheirj.com.br: did not receive HSTS header
 acheritage.co.uk: could not connect to host
 acisonline.net: did not receive HSTS header
 acoffeeshops.com: could not connect to host
 acorns.com: did not receive HSTS header
 acr.im: could not connect to host
 acrepairdrippingsprings.com: could not connect to host
+acritelli.com: did not receive HSTS header
 acslimited.co.uk: did not receive HSTS header
 activateplay.com: did not receive HSTS header
 active-escape.com: could not connect to host
 activeweb.top: could not connect to host
 activiti.alfresco.com: did not receive HSTS header
 actu-medias.com: did not receive HSTS header
 acuve.jp: could not connect to host
 ada.is: max-age too low: 2592000
@@ -268,31 +270,33 @@ advancedstudio.ro: did not receive HSTS 
 adver.top: did not receive HSTS header
 adviespuntklokkenluiders.nl: could not connect to host
 adzuna.co.uk: did not receive HSTS header
 aebian.org: could not connect to host
 aemoria.com: could not connect to host
 aerialmediapro.net: could not connect to host
 aes256.ru: could not connect to host
 aether.pw: could not connect to host
+aevpn.net: could not connect to host
 aeyoun.com: did not receive HSTS header
 af-fotografie.net: did not receive HSTS header
 afdkompakt.de: max-age too low: 86400
 aficotroceni.ro: did not receive HSTS header
 afiru.net: could not connect to host
 afp548.tk: could not connect to host
 after.im: did not receive HSTS header
 afvallendoeje.nu: could not connect to host
 afyou.co.kr: could not connect to host
 agalaxyfarfaraway.co.uk: could not connect to host
 agate.pw: did not receive HSTS header
 agatheetraphael.fr: could not connect to host
 agbremen.de: did not receive HSTS header
 agentseeker.ca: did not receive HSTS header
 agevio.com: could not connect to host
+agonswim.com: could not connect to host
 agrimap.com: did not receive HSTS header
 agrios.de: could not connect to host
 agro-id.gov.ua: did not receive HSTS header
 agroglass.com.br: did not receive HSTS header
 agtv.com.br: did not receive HSTS header
 ahabingo.com: did not receive HSTS header
 ahoynetwork.com: did not receive HSTS header
 ahri.ovh: could not connect to host
@@ -328,17 +332,16 @@ aladdin.ie: did not receive HSTS header
 alainwolf.net: could not connect to host
 alanlee.net: could not connect to host
 alanrickmanflipstable.com: could not connect to host
 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: did not receive HSTS header
 alberguecimballa.es: could not connect to host
 albertbogdanowicz.pl: did not receive HSTS header
 albertopimienta.com: did not receive HSTS header
 alcazaar.com: could not connect to host
 alecvannoten.be: did not receive HSTS header
 alenan.org: could not connect to host
 alessandro.pw: did not receive HSTS header
 alethearose.com: did not receive HSTS header
@@ -365,16 +368,17 @@ alldaymonitoring.com: could not connect 
 allemobieleproviders.nl: did not receive HSTS header
 allinnote.com: could not connect to host
 allmbw.com: could not connect to host
 allo-symo.fr: did not receive HSTS header
 allods-zone.ru: could not connect to host
 alloffice.com.ua: did not receive HSTS header
 alloinformatique.net: could not connect to host
 allstarswithus.com: could not connect to host
+alltubedownload.net: could not connect to host
 alpha.irccloud.com: could not connect to host
 alphabit-secure.com: could not connect to host
 alphabuild.io: could not connect to host
 alphagamers.net: did not receive HSTS header
 alphalabs.xyz: could not connect to host
 alphasall.com: could not connect to host
 als-hardware.co.za: did not receive HSTS header
 alt33c3.org: could not connect to host
@@ -439,24 +443,24 @@ andrewmichaud.com: could not connect to 
 andrewmichaud.me: could not connect to host
 andrewregan.me: could not connect to host
 andrewx.net: could not connect to host
 andreypopp.com: could not connect to host
 androidprosmart.com: could not connect to host
 androoz.se: did not receive HSTS header
 androticsdirect.com: did not receive HSTS header
 andyclark.io: could not connect to host
+andycrockett.io: could not connect to host
 andymartin.cc: could not connect to host
 anfsanchezo.co: did not receive HSTS header
 anfsanchezo.me: could not connect to host
 anghami.com: did not receive HSTS header
 anglictinatabor.cz: could not connect to host
 animal-nature-human.com: did not receive HSTS header
 anime1.moe: could not connect to host
-anime1video.tk: could not connect to host
 animeday.ml: could not connect to host
 animesfusion.com.br: could not connect to host
 animesharp.com: could not connect to host
 animurecs.com: did not receive HSTS header
 aniplus.cf: could not connect to host
 aniplus.gq: could not connect to host
 aniplus.ml: could not connect to host
 anitklib.ml: could not connect to host
@@ -539,16 +543,17 @@ ardorlabs.se: could not connect to host
 arewedubstepyet.com: could not connect to host
 argennon.xyz: could not connect to host
 arguggi.co.uk: could not connect to host
 ariacreations.net: did not receive HSTS header
 aristilabs.com: did not receive HSTS header
 arlen.io: could not connect to host
 arlen.se: could not connect to host
 armingrodon.de: max-age too low: 0
+arminpech.de: could not connect to host
 armor.com: did not receive HSTS header
 armored.ninja: could not connect to host
 armory.consulting: could not connect to host
 armory.supplies: could not connect to host
 armsday.com: could not connect to host
 armytricka.cz: did not receive HSTS header
 arod.tk: could not connect to host
 aromaclub.nl: did not receive HSTS header
@@ -598,16 +603,17 @@ astromelody.com: did not receive HSTS he
 asuhe.cc: did not receive HSTS header
 asuhe.win: did not receive HSTS header
 atavio.at: could not connect to host
 atavio.ch: could not connect to host
 atavio.de: did not receive HSTS header
 atbeckett.com: did not receive HSTS header
 atcreform.gov: did not receive HSTS header
 atelier-rk.com: did not receive HSTS header
+atelierdesflammesnoires.fr: could not connect to host
 athaliasoft.com: could not connect to host
 athenelive.com: could not connect to host
 athensbusinessresources.us: could not connect to host
 athul.xyz: could not connect to host
 atlex.nl: did not receive HSTS header
 atlseccon.com: did not receive HSTS header
 atomic.menu: could not connect to host
 atomik.pro: could not connect to host
@@ -668,35 +674,35 @@ awanderlustadventure.com: did not receiv
 awg-mode.de: did not receive HSTS header
 aww.moe: did not receive HSTS header
 awxg.com: could not connect to host
 axado.com.br: did not receive HSTS header
 axeny.com: did not receive HSTS header
 ayahuascaadvisor.com: could not connect to host
 ayuru.info: could not connect to host
 az.search.yahoo.com: did not receive HSTS header
-azazy.net: max-age too low: 2592000
+azazy.net: did not receive HSTS header
 azino777.ru: did not receive HSTS header
 azprep.us: could not connect to host
+azuxul.fr: could not connect to host
 b-landia.net: did not receive HSTS header
 b-rickroll-e.pw: could not connect to host
 b-space.de: did not receive HSTS header
 b303.me: did not receive HSTS header
 b3orion.com: max-age too low: 0
 baby-click.de: could not connect to host
 babybee.ie: could not connect to host
 babybic.hu: did not receive HSTS header
 babycs.house: could not connect to host
 babyhouse.xyz: could not connect to host
 babymasaze.cz: did not receive HSTS header
 babysaying.me: could not connect to host
 bacchanallia.com: could not connect to host
 back-bone.nl: did not receive HSTS header
 backschues.net: did not receive HSTS header
-bad.pet: could not connect to host
 bad.show: could not connect to host
 badcronjob.com: could not connect to host
 badenhard.eu: could not connect to host
 badkamergigant.com: could not connect to host
 badlink.org: could not connect to host
 baff.lu: did not receive HSTS header
 bagiobella.com: max-age too low: 0
 baiduaccount.com: could not connect to host
@@ -726,18 +732,19 @@ bashcode.ninja: could not connect to hos
 basicsolutionsus.com: did not receive HSTS header
 basilisk.io: could not connect to host
 bassh.net: did not receive HSTS header
 baud.ninja: could not connect to host
 baum.ga: could not connect to host
 baumstark.ca: could not connect to host
 baysse.eu: could not connect to host
 bazarstupava.sk: could not connect to host
-bazisszoftver.hu: could not connect to host
+bazisszoftver.hu: did not receive HSTS header
 bb-shiokaze.jp: did not receive HSTS header
+bblove.me: could not connect to host
 bblovess.cn: could not connect to host
 bbnx.net: could not connect to host
 bbrinck.eu: did not receive HSTS header
 bbwdom.xyz: could not connect to host
 bbwfacesitting.xyz: could not connect to host
 bbwfight.xyz: could not connect to host
 bcbsmagentprofile.com: could not connect to host
 bcchack.com: could not connect to host
@@ -763,55 +770,55 @@ beastowner.com: did not receive HSTS hea
 beautyconcept.co: did not receive HSTS header
 beavers.io: could not connect to host
 bebeefy.uk: could not connect to host
 bebesurdoue.com: could not connect to host
 bedabox.com: max-age too low: 0
 bedeta.de: could not connect to host
 bedreid.dk: did not receive HSTS header
 bedrijvenadministratie.nl: did not receive HSTS header
-beelen.fr: could not connect to host
 beerboutique.com.br: did not receive HSTS header
 beetleroadstories.com: could not connect to host
 befundup.com: could not connect to host
 behere.be: could not connect to host
 beholdthehurricane.com: could not connect to host
 beichtgenerator.de: did not receive HSTS header
 beier.io: could not connect to host
 beikeil.de: did not receive HSTS header
 belairsewvac.com: could not connect to host
 belegit.org: could not connect to host
 belewpictures.com: could not connect to host
-belgien.guide: did not receive HSTS header
 belize-firmengruendung.com: could not connect to host
 belliash.eu.org: did not receive HSTS header
 belltower.io: could not connect to host
 belmontprom.com: could not connect to host
 bemyvictim.com: max-age too low: 2678400
 bendechrai.com: did not receive HSTS header
 beneffy.com: did not receive HSTS header
 benjakesjohnson.com: could not connect to host
 benk.press: could not connect to host
 benny003.de: did not receive HSTS header
 benohead.com: did not receive HSTS header
+bentley.link: could not connect to host
 bentphotos.se: could not connect to host
 benwattie.com: did not receive HSTS header
 benzkosmetik.de: did not receive HSTS header
 beourvictim.com: max-age too low: 2678400
 beraru.tk: could not connect to host
+berasavocate.com: could not connect to host
 berger.work: could not connect to host
 berlatih.com: could not connect to host
 berlinleaks.com: could not connect to host
 berrymark.be: max-age too low: 0
-berthelier.me: could not connect to host
 besixdouze.world: could not connect to host
 besnik.de: could not connect to host
 besola.de: did not receive HSTS header
 best-wallpaper.net: did not receive HSTS header
 bestbeards.ca: could not connect to host
+bestbridal.top: could not connect to host
 bestcellular.com: did not receive HSTS header
 besthost.cz: did not receive HSTS header
 bestlashesandbrows.com: did not receive HSTS header
 bestmodels.su: did not receive HSTS header
 bestorangeseo.com: could not connect to host
 bestschools.top: could not connect to host
 betaclean.fr: did not receive HSTS header
 betafive.net: could not connect to host
@@ -930,16 +937,17 @@ blog.torproject.org: max-age too low: 10
 blogabout.ru: did not receive HSTS header
 bloggingwithchildren.com: could not connect to host
 bloglikepro.com: could not connect to host
 bloomzoomy.ru: max-age too low: 172800
 blowjs.com: could not connect to host
 bltc.co: could not connect to host
 blubbablasen.de: could not connect to host
 blucas.org: did not receive HSTS header
+blue-labs.org: could not connect to host
 blue17.co.uk: did not receive HSTS header
 bluecon.eu: could not connect to host
 bluefrag.com: could not connect to host
 blueglobalmedia.com: could not connect to host
 blueliv.com: did not receive HSTS header
 bluescloud.xyz: could not connect to host
 bluetenmeer.com: did not receive HSTS header
 bluketing.com: did not receive HSTS header
@@ -997,16 +1005,17 @@ brainvation.de: did not receive HSTS hea
 bran.cc: could not connect to host
 branchtrack.com: did not receive HSTS header
 brandnewdays.nl: could not connect to host
 brandon.so: could not connect to host
 brandred.net: could not connect to host
 brandspray.com: could not connect to host
 brasilmorar.com: did not receive HSTS header
 bratteng.xyz: could not connect to host
+brava.bg: did not receive HSTS header
 bravz.de: could not connect to host
 bregnedalsystems.dk: did not receive HSTS header
 bremensaki.com: max-age too low: 2592000
 brettabel.com: could not connect to host
 brickoo.com: could not connect to host
 brickyardbuffalo.com: did not receive HSTS header
 bridholm.se: could not connect to host
 brightstarkids.com.au: did not receive HSTS header
@@ -1029,36 +1038,34 @@ bsdug.org: could not connect to host
 bsociabl.com: could not connect to host
 btc-e.com: did not receive HSTS header
 btcdlc.com: could not connect to host
 buben.tech: could not connect to host
 bubulazi.com: did not receive HSTS header
 bubulazy.com: did not receive HSTS header
 buch-cuber.de: did not receive HSTS header
 buchheld.at: did not receive HSTS header
-buck.com: could not connect to host
 bucket.tk: could not connect to host
 budgetthostels.nl: did not receive HSTS header
 budskap.eu: could not connect to host
 buenosairesestetica.com.ar: could not connect to host
 bugtrack.io: could not connect to host
 buhler.pro: did not receive HSTS header
 build.chromium.org: did not receive HSTS header (error ignored - included regardless)
 buildci.asia: could not connect to host
 buildify.co.za: could not connect to host
-buildingclouds.at: did not receive HSTS header
-buildingclouds.ch: did not receive HSTS header
+buildingclouds.at: could not connect to host
+buildingclouds.ch: could not connect to host
 buildingclouds.de: did not receive HSTS header
-buildingclouds.es: did not receive HSTS header
-buildingclouds.eu: did not receive HSTS header
-buildingclouds.fr: did not receive HSTS header
+buildingclouds.es: could not connect to host
+buildingclouds.eu: could not connect to host
+buildingclouds.fr: could not connect to host
 buildsaver.co.za: did not receive HSTS header
 built.by: did not receive HSTS header
 bukatv.cz: could not connect to host
-bulgarien.guide: did not receive HSTS header
 bulkbuy.tech: could not connect to host
 bulletpoint.cz: could not connect to host
 bullterrier.me: could not connect to host
 bulmafox.com: could not connect to host
 bunaken.asia: did not receive HSTS header
 bunbomenu.de: could not connect to host
 bunsenlabs.org: max-age too low: 2592000
 bupu.ml: could not connect to host
@@ -1126,16 +1133,17 @@ c0rn3j.com: did not receive HSTS header
 c1yd3i.me: could not connect to host
 c2o2.xyz: could not connect to host
 c3b.info: could not connect to host
 cabarave.com: could not connect to host
 cabsites.com: could not connect to host
 cabusar.fr: could not connect to host
 caconnect.org: could not connect to host
 cadao.me: did not receive HSTS header
+caesarkabalan.com: could not connect to host
 caesreon.com: could not connect to host
 cafe-murr.de: could not connect to host
 cafe-scientifique.org.ec: could not connect to host
 cafe-service.ru: max-age too low: 10
 caim.cz: did not receive HSTS header
 caizx.com: did not receive HSTS header
 cajapopcorn.com: did not receive HSTS header
 cake.care: could not connect to host
@@ -1208,17 +1216,16 @@ castagnonavocats.com: did not receive HS
 cata.ga: could not connect to host
 catarsisvr.com: could not connect to host
 catinmay.com: did not receive HSTS header
 catnapstudios.com: could not connect to host
 cavaleria.ro: did not receive HSTS header
 caveclan.org: did not receive HSTS header
 cavedevs.de: could not connect to host
 cavedroid.xyz: could not connect to host
-cbdev.de: could not connect to host
 cbengineeringinc.com: did not receive HSTS header
 cbhq.net: could not connect to host
 ccblog.de: did not receive HSTS header
 cctech.ph: could not connect to host
 cd.search.yahoo.com: did not receive HSTS header
 cd0.us: could not connect to host
 cdcpartners.gov: could not connect to host
 cdnb.co: could not connect to host
@@ -1251,23 +1258,23 @@ cganx.org: could not connect to host
 cgerstner.eu: could not connect to host
 cgsshelper.tk: could not connect to host
 chahub.com: could not connect to host
 chainmonitor.com: could not connect to host
 championsofregnum.com: did not receive HSTS header
 chandlerredding.com: did not receive HSTS header
 changetip.com: could not connect to host
 chaos.fail: did not receive HSTS header
+chaoslab.org: could not connect to host
 chaoswebs.net: did not receive HSTS header
 charityclear.com: did not receive HSTS header
 charitystreet.co.uk: could not connect to host
 charlipopkids.com.au: could not connect to host
 charnleyhouse.co.uk: max-age too low: 604800
 charp.eu: could not connect to host
-charta-digitale-vernetzung.de: could not connect to host
 chartpen.com: did not receive HSTS header
 chartstoffarm.de: could not connect to host
 chaska.co.za: did not receive HSTS header
 chat-porc.eu: did not receive HSTS header
 chatbot.me: did not receive HSTS header
 chateauconstellation.ch: did not receive HSTS header
 chatup.cf: could not connect to host
 chcemvediet.sk: max-age too low: 1555200
@@ -1306,17 +1313,16 @@ chrisandsarahinasia.com: did not receive
 chrisbrakebill.com: could not connect to host
 chrisbrown.id.au: could not connect to host
 chrisfaber.com: could not connect to host
 chriskirchner.de: could not connect to host
 chriskyrouac.com: could not connect to host
 chrisopperwall.com: did not receive HSTS header
 christiaandruif.nl: could not connect to host
 christianbro.gq: could not connect to host
-christiesantiques.com: could not connect to host
 christophercolumbusfoundation.gov: could not connect to host
 christophersole.com: could not connect to host
 christophheich.me: could not connect to host
 chrisupjohn.com: could not connect to host
 chrome-devtools-frontend.appspot.com: did not receive HSTS header (error ignored - included regardless)
 chrome.google.com: did not receive HSTS header (error ignored - included regardless)
 chrst.ph: could not connect to host
 chua.cf: could not connect to host
@@ -1416,21 +1422,22 @@ codecontrollers.de: could not connect to
 codeforce.io: could not connect to host
 codeforhakodate.org: did not receive HSTS header
 codelayer.ca: could not connect to host
 codelitmus.com: did not receive HSTS header
 codemonkeyrawks.net: could not connect to host
 codepoet.de: could not connect to host
 codepx.com: did not receive HSTS header
 codercross.com: could not connect to host
+codes.pk: did not receive HSTS header
 codewiththepros.org: could not connect to host
 coffeeetc.co.uk: max-age too low: 7776000
 coffeestrategies.com: max-age too low: 5184000
 cogniflex.com: did not receive HSTS header
-cohesive.io: could not connect to host
+cohesive.io: did not receive HSTS header
 coinbit.trade: did not receive HSTS header
 coindam.com: could not connect to host
 coldhak.ca: could not connect to host
 coldlostsick.net: could not connect to host
 colearnr.com: could not connect to host
 collard.tk: did not receive HSTS header
 collegepulse.org: could not connect to host
 collies.eu: max-age too low: 3
@@ -1485,17 +1492,17 @@ contactbig.com: could not connect to hos
 contactsingapore.sg: did not receive HSTS header
 containerstatistics.com: could not connect to host
 contarkos.xyz: could not connect to host
 contextplatform.com: did not receive HSTS header
 continuumgaming.com: could not connect to host
 controlcenter.gigahost.dk: did not receive HSTS header
 convert.zone: did not receive HSTS header
 cooink.net: could not connect to host
-coolaj86.com: did not receive HSTS header
+coolaj86.com: could not connect to host
 coolchevy.org.ua: did not receive HSTS header
 coole-meister.de: could not connect to host
 coolrc.me: could not connect to host
 cooxa.com: did not receive HSTS header
 copshop.com.br: did not receive HSTS header
 cor-ser.es: could not connect to host
 coralproject.net: did not receive HSTS header
 coralrosado.com.br: did not receive HSTS header
@@ -1520,17 +1527,16 @@ couponcodeq.com: did not receive HSTS he
 couragewhispers.ca: could not connect to host
 coursdeprogrammation.com: could not connect to host
 coursella.com: did not receive HSTS header
 covenantbank.net: could not connect to host
 coverduck.ru: could not connect to host
 cpuvinf.eu.org: could not connect to host
 cr.search.yahoo.com: did not receive HSTS header
 cracking.org: did not receive HSTS header
-crackingking.com: could not connect to host
 crackslut.eu: could not connect to host
 craftbeerbarn.co.uk: could not connect to host
 craftedge.xyz: could not connect to host
 craftmain.eu: could not connect to host
 cranems.com.ua: did not receive HSTS header
 cranioschule.com: did not receive HSTS header
 crate.io: did not receive HSTS header
 cravelyrics.com: could not connect to host
@@ -1545,20 +1551,21 @@ creaescola.com: did not receive HSTS hea
 create-test-publish.co.uk: could not connect to host
 creativephysics.ml: could not connect to host
 creativeplayuk.com: did not receive HSTS header
 crecket.me: could not connect to host
 crendontech.com: could not connect to host
 crestoncottage.com: could not connect to host
 criena.net: did not receive HSTS header
 crimewatch.net.za: could not connect to host
+crimson.no: could not connect to host
 crisissurvivalspecialists.com: could not connect to host
 cristiandeluxe.com: did not receive HSTS header
 crizk.com: could not connect to host
-crockett.io: did not receive HSTS header
+crockett.io: could not connect to host
 croome.no-ip.org: could not connect to host
 crosbug.com: did not receive HSTS header (error ignored - included regardless)
 crosssec.com: did not receive HSTS header
 crow.tw: could not connect to host
 crowd.supply: did not receive HSTS header
 crowdcurity.com: did not receive HSTS header
 crowdjuris.com: could not connect to host
 crows.io: did not receive HSTS header
@@ -1592,17 +1599,16 @@ csgodicegame.com: did not receive HSTS h
 csgoelemental.com: could not connect to host
 csgokings.eu: could not connect to host
 csgoshifter.com: could not connect to host
 csohack.tk: could not connect to host
 cspbuilder.info: could not connect to host
 csru.net: did not receive HSTS header
 cssps.org: could not connect to host
 cssu.in: did not receive HSTS header
-cstkit.com: could not connect to host
 csvape.com: did not receive HSTS header
 ct-status.org: could not connect to host
 ct.search.yahoo.com: did not receive HSTS header
 cthulhuden.com: could not connect to host
 ctj.im: could not connect to host
 cubecart-demo.co.uk: did not receive HSTS header
 cubecart-hosting.co.uk: did not receive HSTS header
 cubecart.net: did not receive HSTS header
@@ -1619,17 +1625,17 @@ cuntflaps.me: could not connect to host
 cuongquach.com: did not receive HSTS header
 curlyroots.com: did not receive HSTS header
 curroapp.com: could not connect to host
 curveweb.co.uk: did not receive HSTS header
 custe.rs: could not connect to host
 customadesign.com: did not receive HSTS header
 cutorrent.com: could not connect to host
 cuvva.insure: did not receive HSTS header
-cvtparking.co.uk: could not connect to host
+cvtparking.co.uk: did not receive HSTS header
 cwage.com: could not connect to host
 cyanogenmod.xxx: could not connect to host
 cyber.cafe: could not connect to host
 cyberlab.kiev.ua: did not receive HSTS header
 cyberpunk.ca: could not connect to host
 cybershambles.com: could not connect to host
 cybersmart.co.uk: did not receive HSTS header
 cycleluxembourg.lu: did not receive HSTS header
@@ -1655,33 +1661,31 @@ dailybits.be: did not receive HSTS heade
 dailystormerpodcasts.com: could not connect to host
 daimadi.com: could not connect to host
 daisuki.pw: could not connect to host
 dakerealestate.com: did not receive HSTS header
 dakrib.net: could not connect to host
 daku.gdn: could not connect to host
 dalingk.co: could not connect to host
 damedrogy.cz: could not connect to host
-damianuv-blog.cz: did not receive HSTS header
+damianuv-blog.cz: could not connect to host
 danbarrett.com.au: did not receive HSTS header
 dancerdates.net: could not connect to host
 daniel-du.com: could not connect to host
 daniel-mosquera.com: could not connect to host
 daniel-steuer.de: could not connect to host
 danielcowie.me: could not connect to host
 danieldk.eu: did not receive HSTS header
 danielheal.net: could not connect to host
 danieliancu.com: could not connect to host
-danieltollot.de: did not receive HSTS header
 danielverlaan.nl: did not receive HSTS header
 danielworthy.com: did not receive HSTS header
 danijobs.com: could not connect to host
 danishenanigans.com: could not connect to host
 dankeblog.com: could not connect to host
-danmark.guide: did not receive HSTS header
 dannycrichton.com: did not receive HSTS header
 danrl.de: could not connect to host
 danwillenberg.com: did not receive HSTS header
 daolerp.xyz: could not connect to host
 daplie.com: did not receive HSTS header
 dargasia.is: could not connect to host
 dario.im: could not connect to host
 dark-x.cf: could not connect to host
@@ -1802,17 +1806,16 @@ deux.solutions: could not connect to hos
 deuxsol.co: could not connect to host
 deuxsol.com: could not connect to host
 deuxsolutions.com: could not connect to host
 deuxvia.com: could not connect to host
 dev-aegon.azurewebsites.net: did not receive HSTS header
 devafterdark.com: could not connect to host
 devcu.com: could not connect to host
 devcu.net: could not connect to host
-develop.cool: could not connect to host
 develop.fitness: could not connect to host
 developersclub.website: could not connect to host
 deviltraxxx.de: could not connect to host
 devincrow.me: could not connect to host
 devisonline.ch: could not connect to host
 devmsg.com: did not receive HSTS header
 devnsec.com: could not connect to host
 devnull.team: could not connect to host
@@ -1828,18 +1831,16 @@ dhpcs.com: did not receive HSTS header
 dhpiggott.net: did not receive HSTS header
 diablotine.rocks: could not connect to host
 dianlujitao.com: did not receive HSTS header
 diannaobos.com: did not receive HSTS header
 dicando.com: max-age too low: 2592000
 dicelab.co.uk: could not connect to host
 dicgaming.net: could not connect to host
 dicionariofinanceiro.com: did not receive HSTS header
-diddens.de: could not connect to host
-didierlaumen.be: did not receive HSTS header
 die-borts.ch: could not connect to host
 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
 digitaldaddy.net: could not connect to host
@@ -1855,17 +1856,16 @@ dinkum.online: could not connect to host
 dipconsultants.com: could not connect to host
 directhskincream.com: could not connect to host
 directorinegocis.cat: could not connect to host
 dirk-weise.de: could not connect to host
 discofitta.com: could not connect to host
 discoveringdocker.com: could not connect to host
 discovery.lookout.com: did not receive HSTS header
 dise-online.de: did not receive HSTS header
-disking.co.uk: could not connect to host
 dislocated.de: did not receive HSTS header
 disruptivelabs.net: could not connect to host
 disruptivelabs.org: could not connect to host
 dissimulo.me: could not connect to host
 distractionco.de: did not receive HSTS header
 ditrutoancau.vn: could not connect to host
 dittvertshus.no: could not connect to host
 diva-ey.com: could not connect to host
@@ -1885,17 +1885,17 @@ dmix.ca: could not connect to host
 dmtry.me: did not receive HSTS header
 dmwall.cn: could not connect to host
 dmz.ninja: could not connect to host
 dndtools.net: could not connect to host
 dns.google.com: did not receive HSTS header (error ignored - included regardless)
 dnsknowledge.com: did not receive HSTS header
 do-do.tk: could not connect to host
 do.search.yahoo.com: did not receive HSTS header
-doak.io: did not receive HSTS header
+doak.io: could not connect to host
 dobet.in: could not connect to host
 docid.io: could not connect to host
 docket.news: could not connect to host
 docset.io: could not connect to host
 docufiel.com: could not connect to host
 docxtemplater.com: did not receive HSTS header
 doesmycodehavebugs.today: could not connect to host
 doeswindowssuckforeveryoneorjustme.com: could not connect to host
@@ -1911,17 +1911,16 @@ dolevik.com: could not connect to host
 dollarstore24.com: could not connect to host
 dollywiki.co.uk: could not connect to host
 dolphin-cloud.com: could not connect to host
 dolphincorp.co.uk: could not connect to host
 dolphinswithlasers.com: did not receive HSTS header
 domaine-aigoual-cevennes.com: did not receive HSTS header
 domaris.de: could not connect to host
 domenicocatelli.com: could not connect to host
-dominikanskarepubliken.guide: did not receive HSTS header
 dominikkulaga.pl: max-age too low: 2592000
 dominioanimal.com: could not connect to host
 dominique-mueller.de: did not receive HSTS header
 don.yokohama: could not connect to host
 donmez.uk: could not connect to host
 donmez.ws: could not connect to host
 donttrustrobots.nl: could not connect to host
 donzelot.co.uk: did not receive HSTS header
@@ -1989,17 +1988,16 @@ drupal123.com: did not receive HSTS head
 drycreekapiary.com: could not connect to host
 ds-christiansen.de: could not connect to host
 dshiv.io: could not connect to host
 dtub.co: could not connect to host
 dualias.xyz: could not connect to host
 dubik.su: did not receive HSTS header
 duerls.de: did not receive HSTS header
 duesee.org: could not connect to host
-dukec.me: could not connect to host
 dullsir.com: did not receive HSTS header
 dungi.org: could not connect to host
 duongpho.com: did not receive HSTS header
 duskopy.top: could not connect to host
 dutchrank.com: did not receive HSTS header
 duuu.ch: could not connect to host
 dycontrol.de: could not connect to host
 dyktig.as: did not receive HSTS header
@@ -2205,20 +2203,21 @@ epicpages.com: could not connect to host
 epoxate.com: could not connect to host
 eq8.net.au: could not connect to host
 eqim.me: could not connect to host
 equate.net.au: did not receive HSTS header
 equatetechnologies.com.au: did not receive HSTS header
 equilibre-yoga-jennifer-will.com: could not connect to host
 erawanarifnugroho.com: did not receive HSTS header
 eressea.xyz: could not connect to host
+erethon.com: could not connect to host
 ergorium.com: did not receive HSTS header
 ergorium.eu: did not receive HSTS header
 ericbond.net: could not connect to host
-erichalv.com: could not connect to host
+erichalv.com: did not receive HSTS header
 ericyl.com: could not connect to host
 eridanus.uk: could not connect to host
 erikwalther.eu: could not connect to host
 eriser.fr: could not connect to host
 ernaehrungsberatung-zurich.ch: could not connect to host
 ernesto.at: could not connect to host
 eromixx.com: did not receive HSTS header
 erotalia.es: could not connect to host
@@ -2244,17 +2243,16 @@ especificosba.com.mx: could not connect 
 espo.com.ua: did not receive HSTS header
 espra.com: could not connect to host
 esquonic.com: could not connect to host
 essenzialeenxovais.com.br: did not receive HSTS header
 essexghosthunters.co.uk: did not receive HSTS header
 estaciona.guru: could not connect to host
 estebanborges.com: did not receive HSTS header
 estilosapeca.com: could not connect to host
-estland.guide: did not receive HSTS header
 et-buchholz.de: could not connect to host
 et180.com: could not connect to host
 etangs-magazine.com: could not connect to host
 etaoinwu.tk: could not connect to host
 etdonline.co.uk: could not connect to host
 eternitylove.us: could not connect to host
 eth9.net: could not connect to host
 ethanfaust.com: could not connect to host
@@ -2409,32 +2407,33 @@ fiftyshadesofluca.ml: could not connect 
 fig.co: did not receive HSTS header
 fightr.co: could not connect to host
 figuurzagers.nl: could not connect to host
 fiksel.info: did not receive HSTS header
 fikt.space: could not connect to host
 filebox.moe: could not connect to host
 filemeal.com: did not receive HSTS header
 filey.co.uk: did not receive HSTS header
+fillo.sk: could not connect to host
 filmesubtitrate2017.online: did not receive HSTS header
 finalgear.com: did not receive HSTS header
 finalvpn.com: could not connect to host
 financieringsportaal.nl: did not receive HSTS header
 finanzkontor.net: could not connect to host
 findigo.fish: could not connect to host
 findingmyname.com: did not receive HSTS header
 findtutorsnearme.com: did not receive HSTS header
 finfev.de: could not connect to host
 fingent.com: did not receive HSTS header
 finiteheap.com: did not receive HSTS header
 finpt.com: did not receive HSTS header
 fiodental.com.br: did not receive HSTS header
 firebaseio-demo.com: could not connect to host
 firebaseio.com: could not connect to host (error ignored - included regardless)
-firebird.io: max-age too low: 0
+firebird.io: could not connect to host
 firefall.rocks: could not connect to host
 firemail.io: could not connect to host
 firenza.org: did not receive HSTS header
 fireorbit.de: did not receive HSTS header
 firmenverzeichnis.nu: could not connect to host
 firstdogonthemoon.com.au: did not receive HSTS header
 firstforex.co.uk: did not receive HSTS header
 firstlook.org: did not receive HSTS header
@@ -2462,16 +2461,17 @@ flareon.net: could not connect to host
 flatbellyreview.com: max-age too low: 2592000
 flawcheck.com: could not connect to host
 fliexer.com: could not connect to host
 flipkey.com: did not receive HSTS header
 flirchi.com: did not receive HSTS header
 flixtor.net: could not connect to host
 floless.co.uk: did not receive HSTS header
 florafiora.com.br: did not receive HSTS header
+florent-tatard.fr: could not connect to host
 florian-lillpopp.de: max-age too low: 10
 florianlillpopp.de: max-age too low: 10
 floridaescapes.co.uk: did not receive HSTS header
 florismouwen.com: did not receive HSTS header
 florispoort.nl: did not receive HSTS header
 flouartistique.ch: could not connect to host
 flow.pe: could not connect to host
 flowersandclouds.com: could not connect to host
@@ -2546,16 +2546,17 @@ freqlabs.com: did not receive HSTS heade
 freshfind.xyz: could not connect to host
 freshlymind.com: did not receive HSTS header
 frezbo.com: could not connect to host
 frforms.com: did not receive HSTS header
 friendica.ch: could not connect to host
 friendlyfiregameshow.com: could not connect to host
 frimons.com: could not connect to host
 froggstack.de: could not connect to host
+front-end.dog: could not connect to host
 frontisme.nl: could not connect to host
 frontmin.com: did not receive HSTS header
 frost-ci.xyz: could not connect to host
 froxlor.support: max-age too low: 0
 frsis2017.com: could not connect to host
 frugro.be: did not receive HSTS header
 fruitusers.com: could not connect to host
 frumious.fyi: could not connect to host
@@ -2564,17 +2565,19 @@ fsinf.at: did not receive HSTS header
 fspphoto.com: could not connect to host
 fstfy.de: could not connect to host
 ftctele.com: could not connect to host
 ftpi.ml: could not connect to host
 fuckbilibili.com: could not connect to host
 fuckgfw233.org: could not connect to host
 fukushima-web.com: did not receive HSTS header
 fulilingyu.info: could not connect to host
+fullmatch.net: did not receive HSTS header
 fullytrained.co.uk: did not receive HSTS header
+funandnatural.shop: max-age too low: 0
 fundacionhijosdelsol.org: could not connect to host
 funi4u.com: could not connect to host
 funkyweddingideas.com.au: could not connect to host
 funrun.com: did not receive HSTS header
 furiffic.com: did not receive HSTS header
 furnation.com: could not connect to host
 furry.be: did not receive HSTS header
 fusedrops.com: could not connect to host
@@ -2649,17 +2652,16 @@ garcinia--cambogia.com: could not connec
 garden.trade: could not connect to host
 gardencarezone.com: could not connect to host
 garfieldairlines.net: did not receive HSTS header
 gatapro.net: could not connect to host
 gatorsa.es: did not receive HSTS header
 gaussorgues.me: could not connect to host
 gbc-radio.nl: did not receive HSTS header
 gc.net: could not connect to host
-gdb-tutorial.net: could not connect to host
 gdegem.org: did not receive HSTS header
 gebn.co.uk: did not receive HSTS header
 gebn.uk: could not connect to host
 gedankenbude.info: could not connect to host
 geekcast.co.uk: did not receive HSTS header
 geeks.lgbt: did not receive HSTS header
 geeky.software: could not connect to host
 geemo.top: could not connect to host
@@ -2739,17 +2741,16 @@ gingali.de: did not receive HSTS header
 gintenreiter-photography.com: did not receive HSTS header
 giogadesign.com: did not receive HSTS header
 gipsamsfashion.com: could not connect to host
 gipsic.com: did not receive HSTS header
 gis3m.org: did not receive HSTS header
 gistfy.com: could not connect to host
 git-stuff.tk: could not connect to host
 github.party: did not receive HSTS header
-gitstuff.tk: could not connect to host
 givemyanswer.com: could not connect to host
 gizzo.sk: could not connect to host
 gl.search.yahoo.com: did not receive HSTS header
 glass.google.com: did not receive HSTS header (error ignored - included regardless)
 glasslikes.com: did not receive HSTS header
 glentakahashi.com: max-age too low: 0
 glitzmirror.com: could not connect to host
 global-adult-webcams.com: did not receive HSTS header
@@ -2845,22 +2846,22 @@ grcnode.co.uk: could not connect to host
 greatnet.de: did not receive HSTS header
 greatsong.net: did not receive HSTS header
 greencardtalent.com: could not connect to host
 greenesting.ch: could not connect to host
 greenesting.com: could not connect to host
 greenhillantiques.co.uk: did not receive HSTS header
 greenvines.com.tw: did not receive HSTS header
 greenvpn.ltd: could not connect to host
+greenvpn.pro: did not receive HSTS header
 greg.red: could not connect to host
 gregmilton.com: could not connect to host
 gregmilton.org: could not connect to host
 gregorytlee.me: could not connect to host
 greiners.net: max-age too low: 0
-grekland.guide: did not receive HSTS header
 gremots.com: could not connect to host
 greplin.com: could not connect to host
 gresb.com: did not receive HSTS header
 gretchelizartistry.com: did not receive HSTS header
 greve.xyz: could not connect to host
 grevesgarten.de: could not connect to host
 greyline.se: could not connect to host
 gribani.com: could not connect to host
@@ -2900,17 +2901,16 @@ gugga.dk: did not receive HSTS header
 guguke.net: did not receive HSTS header
 guilde-vindicta.fr: could not connect to host
 guillaume-leduc.fr: could not connect to host
 guillaumematheron.fr: did not receive HSTS header
 guineafruitcorp.com: could not connect to host
 gulch.in.ua: did not receive HSTS header
 gulenet.com: could not connect to host
 gulfcoast-sandbox.com: could not connect to host
-gulshankumar.net: did not receive HSTS header
 gunnarhafdal.com: did not receive HSTS header
 gunnaro.com: could not connect to host
 guntbert.net: could not connect to host
 guoqiang.info: could not connect to host
 gurom.lv: could not connect to host
 gurusupe.com: could not connect to host
 guso.gq: could not connect to host
 guso.ml: did not receive HSTS header
@@ -2928,34 +2928,37 @@ gxlrx.net: could not connect to host
 gyboche.com: could not connect to host
 gyboche.science: could not connect to host
 gycis.me: could not connect to host
 gylauto.fr: could not connect to host
 gypthecat.com: max-age too low: 604800
 gyz.io: could not connect to host
 h-og.com: could not connect to host
 h-rickroll-n.pw: could not connect to host
+h001.ru: could not connect to host
 h2check.org: could not connect to host
 haarkliniek.com: did not receive HSTS header
 habbo.life: did not receive HSTS header
 habbotalk.nl: could not connect to host
 hablemosdetecnologia.com.ve: could not connect to host
 hac30.com: could not connect to host
 hack.cz: could not connect to host
 hack.li: could not connect to host
+hacker8.cn: could not connect to host
 hackercat.ninja: did not receive HSTS header
 hackerforever.com: did not receive HSTS header
 hackerone-ext-adroll.com: could not connect to host
 hackerpoints.com: did not receive HSTS header
 hackerspace-ntnu.no: did not receive HSTS header
 hackest.org: did not receive HSTS header
 hackit.im: could not connect to host
 hackroyale.xyz: could not connect to host
 hacksnack.io: could not connect to host
 hadaf.pro: could not connect to host
+hadouk.in: could not connect to host
 hadzic.co: could not connect to host
 haeckdesign.com: did not receive HSTS header
 haeckl.eu: did not receive HSTS header
 haf.gr: could not connect to host
 hahayidu.org: could not connect to host
 hainoni.com: did not receive HSTS header
 haitschi.com: could not connect to host
 haitschi.de: did not receive HSTS header
@@ -3026,16 +3029,17 @@ hcs-company.com: did not receive HSTS he
 hcs-company.nl: did not receive HSTS header
 hd-offensive.at: could not connect to host
 hdrboundless.com: could not connect to host
 hdsmigrationtool.com: could not connect to host
 hduin.xyz: could not connect to host
 hdwallpapers.net: did not receive HSTS header
 head-shop.lt: could not connect to host
 head-shop.lv: could not connect to host
+head.org: could not connect to host
 headmates.xyz: could not connect to host
 healthycod.in: could not connect to host
 healtious.com: did not receive HSTS header
 heart.ge: did not receive HSTS header
 heartlandrentals.com: did not receive HSTS header
 hearty.blog: could not connect to host
 hearty.space: could not connect to host
 hearty.tw: did not receive HSTS header
@@ -3051,22 +3055,20 @@ helgakristoffer.com: could not connect t
 helgakristoffer.wedding: could not connect to host
 helloworldhost.com: did not receive HSTS header
 helpadmin.net: could not connect to host
 helpium.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 119"  data: no]
 helpmebuild.com: did not receive HSTS header
 helpmij.cf: did not receive HSTS header
 hemdal.se: could not connect to host
 hencagon.com: could not connect to host
-henriknoerr.com: could not connect to host
 hepteract.us: did not receive HSTS header
 herbandpat.org: could not connect to host
 herbertmouwen.nl: could not connect to host
 heritagedentistry.ca: did not receive HSTS header
-hermes-servizi.it: could not connect to host
 herpaderp.net: could not connect to host
 herrenfahrt.com: did not receive HSTS header
 herzbotschaft.de: did not receive HSTS header
 heutger.net: did not receive HSTS header
 heyfringe.com: could not connect to host
 heyguevara.com: could not connect to host
 heywoodtown.co.uk: could not connect to host
 hfi.me: did not receive HSTS header
@@ -3088,16 +3090,17 @@ hikinggearlab.com: did not receive HSTS 
 hilinemerchandising.com: did not receive HSTS header
 hillcity.org.nz: did not receive HSTS header
 hilnu.tk: could not connect to host
 hintergedanken.com: could not connect to host
 hipercultura.com: did not receive HSTS header
 hiphopconvention.nl: could not connect to host
 hipi.jp: could not connect to host
 hipnos.net: did not receive HSTS header
+hiqhub.co.uk: could not connect to host
 hirefitness.co.uk: did not receive HSTS header
 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
 hjw-kunstwerk.de: could not connect to host
 hlyue.com: did not receive HSTS header
 hm1ch.ovh: could not connect to host
@@ -3148,17 +3151,17 @@ hotchillibox.com: max-age too low: 0
 hotchoc.io: did not receive HSTS header
 hotelaustria-wien.at: did not receive HSTS header
 hotelvictoriaoax-mailing.com: did not receive HSTS header
 hotelvillahermosa-mailing.com: did not receive HSTS header
 hotelvue.nl: could not connect to host
 houkago-step.com: did not receive HSTS header
 housemaadiah.org: did not receive HSTS header
 housingstudents.org.uk: could not connect to host
-howbehealthy.com: could not connect to host
+howbehealthy.com: did not receive HSTS header
 howfargames.com: could not connect to host
 howrandom.org: could not connect to host
 howtocuremysciatica.com: could not connect to host
 hpepub.asia: could not connect to host
 hpepub.com: could not connect to host
 hpepub.org: could not connect to host
 hppub.info: could not connect to host
 hppub.org: could not connect to host
@@ -3242,16 +3245,17 @@ idealmoto.com: did not receive HSTS head
 idealmykonos.com: did not receive HSTS header
 ideaplus.me: did not receive HSTS header
 ideasmeetingpoint.com: could not connect to host
 ideation-inc.co.jp: could not connect to host
 idecode.net: could not connect to host
 idedr.com: could not connect to host
 identitylabs.uk: could not connect to host
 idgsupply.com: did not receive HSTS header
+idinby.dk: did not receive HSTS header
 idisplay.es: did not receive HSTS header
 idlekernel.com: could not connect to host
 idontexist.me: did not receive HSTS header
 ie.search.yahoo.com: did not receive HSTS header
 ieji.de: could not connect to host
 ierna.com: did not receive HSTS header
 ies-italia.it: did not receive HSTS header
 ies.id.lv: could not connect to host
@@ -3260,28 +3264,30 @@ 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
 igforums.com: could not connect to host
 igiftcards.nl: did not receive HSTS header
 ignatisd.gr: did not receive HSTS header
 ignatovich.by: could not connect to host
 ignatovich.me: could not connect to host
+igotoffer.com: did not receive HSTS header
 igule.net: could not connect to host
 ihrlotto.de: could not connect to host
 ihrnationalrat.ch: could not connect to host
 ihsbsd.me: could not connect to host
 ihsbsd.tk: could not connect to host
 iispeed.com: did not receive HSTS header
 ikon.name: did not receive HSTS header
 ikwilguidobellen.nl: could not connect to host
 ilbuongiorno.it: did not receive HSTS header
 ilgi.work: could not connect to host
 ilikerainbows.co: could not connect to host
 ilikerainbows.co.uk: could not connect to host
+ilikfreshweedstores.com: did not receive HSTS header
 ilmconpm.de: did not receive HSTS header
 ilona.graphics: did not receive HSTS header
 iluvscotland.co.uk: max-age too low: 7776000
 imakepoems.net: could not connect to host
 imanolbarba.net: could not connect to host
 ime.moe: could not connect to host
 imim.pw: could not connect to host
 imjiangtao.com: could not connect to host
@@ -3313,17 +3319,16 @@ impulse-clan.de: could not connect to ho
 imu.li: did not receive HSTS header
 imusic.dk: did not receive HSTS header
 inb4.us: could not connect to host
 inbox.li: did not receive HSTS header
 incendiary-arts.com: could not connect to host
 inche-ali.com: did not receive HSTS header
 inchomatic.com: did not receive HSTS header
 indiecert.net: could not connect to host
-indien.guide: did not receive HSTS header
 indoorskiassen.nl: did not receive HSTS header
 indredouglas.me: could not connect to host
 industrybazar.com: did not receive HSTS header
 infcof.com: did not receive HSTS header
 infilock.com: could not connect to host
 infinitude.me.uk: could not connect to host
 infinitude.xyz: could not connect to host
 infinitudecloud.com: could not connect to host
@@ -3360,36 +3365,35 @@ inkedguy.de: could not connect to host
 inkstory.gr: did not receive HSTS header
 inksupply.com: did not receive HSTS header
 inleaked.com: could not connect to host
 inme.ga: could not connect to host
 inmyarea.com: max-age too low: 0
 innophate-security.nl: could not connect to host
 innovation.gov: could not connect to host
 innovativeideaz.org: did not receive HSTS header
-inquisitive.io: could not connect to host
+inquisitive.io: did not receive HSTS header
 insane-bullets.com: could not connect to host
 insane.zone: could not connect to host
 insite-feedback.com: did not receive HSTS header
 inspire-av.com: did not receive HSTS header
 inspiroinc.com: could not connect to host
 instacart.com: did not receive HSTS header
 instant-hack.com: did not receive HSTS header
 instantdev.io: could not connect to host
 instinctiveads.com: did not receive HSTS header
 institutoflordelavida.com: could not connect to host
 instruktor.io: could not connect to host
 intarweb.ca: could not connect to host
-integralblue.com: could not connect to host
 intel.li: could not connect to host
 interboursegeneva.ch: did not receive HSTS header
 interference.io: could not connect to host
 interhosts.co.za: could not connect to host
 interim-cto.de: could not connect to host
-interiordesignsconcept.com: could not connect to host
+interiordesignsconcept.com: did not receive HSTS header
 interleucina.org: did not receive HSTS header
 interlocal.co.uk: could not connect to host
 interlun.com: could not connect to host
 internaldh.com: could not connect to host
 internect.co.za: did not receive HSTS header
 internet-pornografie.de: did not receive HSTS header
 internetcasinos.de: could not connect to host
 internetcensus.org: could not connect to host
@@ -3438,17 +3442,16 @@ iqcn.co: could not connect to host
 iqualtech.com: max-age too low: 7776000
 ir-saitama.com: could not connect to host
 iranianlawschool.com: could not connect to host
 iraqidinar.org: did not receive HSTS header
 irazimina.ru: did not receive HSTS header
 irccloud.com: did not receive HSTS header
 irelandesign.com: did not receive HSTS header
 irisdina.de: did not receive HSTS header
-irland.guide: did not receive HSTS header
 irmtrudjurke.de: did not receive HSTS header
 irugs.ch: did not receive HSTS header
 irugs.co.uk: did not receive HSTS header
 irugs.com.sg: did not receive HSTS header
 irukandjilabs.com: could not connect to host
 is-a-furry.org: did not receive HSTS header
 isabellehogarth.co.uk: could not connect to host
 ischool.co.jp: did not receive HSTS header
@@ -3485,16 +3488,17 @@ itsecurityassurance.pw: could not connec
 itsg-faq.de: could not connect to host
 itshost.ru: could not connect to host
 itu2015.de: could not connect to host
 ius.io: did not receive HSTS header
 iuscommunity.org: could not connect to host
 ivi-fertility.com: max-age too low: 0
 ivi.es: max-age too low: 0
 ivk.website: could not connect to host
+ivklombard.ru: could not connect to host
 ivo.co.za: could not connect to host
 iwannarefill.com: could not connect to host
 iwilcox.me.uk: could not connect to host
 ixec2.tk: could not connect to host
 izdiwho.com: could not connect to host
 izolight.ch: could not connect to host
 izoox.com: did not receive HSTS header
 izzzorgconcerten.nl: could not connect to host
@@ -3504,17 +3508,16 @@ ja-publications.com: did not receive HST
 jabbari.io: did not receive HSTS header
 jackalworks.com: could not connect to host
 jackdoan.com: could not connect to host
 jackfahnestock.com: could not connect to host
 jacobdevans.com: could not connect to host
 jacobparry.ca: did not receive HSTS header
 jagido.de: did not receive HSTS header
 jahliveradio.com: could not connect to host
-jaion.ml: could not connect to host
 jaksi.io: could not connect to host
 jamanji.com.ng: could not connect to host
 james.je: could not connect to host
 jamesandpame.la: could not connect to host
 jamesburton.london: could not connect to host
 jamesbywater.co.uk: could not connect to host
 jamesbywater.com: could not connect to host
 jamesbywater.me: could not connect to host
@@ -3605,48 +3608,48 @@ jingyuesi.com: could not connect to host
 jinshavip.com: did not receive HSTS header
 jirav.io: could not connect to host
 jitsi.org: did not receive HSTS header
 jiyue.com: could not connect to host
 jiyuu-ni.com: could not connect to host
 jiyuu-ni.net: could not connect to host
 jkb.pics: could not connect to host
 jkbuster.com: could not connect to host
+jkchocolate.com: could not connect to host
 jkng.eu: did not receive HSTS header
 jko.works: could not connect to host
 jmdekker.it: could not connect to host
 jmedved.com: did not receive HSTS header
 joakimalgroy.com: could not connect to host
 job-offer.de: did not receive HSTS header
 jobflyapp.com: could not connect to host
 jobshq.com: did not receive HSTS header
 jobss.co.uk: 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
 johnhgaunt.com: did not receive HSTS header
 johnkastler.net: could not connect to host
-johnmh.me: could not connect to host
 johnrom.com: did not receive HSTS header
 johnverkerk.com: could not connect to host
 jointoweb.com: could not connect to host
 jonas-keidel.de: did not receive HSTS header
 jonasgroth.se: did not receive HSTS header
 jonathan.ir: could not connect to host
 jonfor.net: could not connect to host
 jongha.me: could not connect to host
 jonn.me: could not connect to host
 jonnichols.info: did not receive HSTS header
 jonsno.ws: could not connect to host
 joostbovee.nl: did not receive HSTS header
 jordanhamilton.me: could not connect to host
 jordanstrustcompany.cn: could not connect to host
 jordanstrustcompany.ru: could not connect to host
-joretapo.fr: did not receive HSTS header
+joretapo.fr: could not connect to host
 jorgemesa.me: could not connect to host
 josahrens.me: could not connect to host
 josecage.com: could not connect to host
 joshi.su: could not connect to host
 joshstroup.me: could not connect to host
 jotpics.com: could not connect to host
 jottit.com: could not connect to host
 jpaglier.com: could not connect to host
@@ -3656,16 +3659,17 @@ jrc9.ca: did not receive HSTS header
 jrgold.me: could not connect to host
 jrmd.io: could not connect to host
 jrvar.com: could not connect to host
 jsanders.us: did not receive HSTS header
 jsg-technologies.de: did not receive HSTS header
 jualautoclave.com: did not receive HSTS header
 jualssh.com: could not connect to host
 juka.pp.ua: did not receive HSTS header
+juku-info.top: could not connect to host
 juku-wing.jp: could not connect to host
 juliamweber.de: could not connect to host
 julian-kipka.de: could not connect to host
 julian-witusch.de: could not connect to host
 julido.de: did not receive HSTS header
 jumbox.xyz: could not connect to host
 jumbster.com: max-age too low: 2592000
 jumping-duck.com: could not connect to host
@@ -3698,61 +3702,60 @@ kabuabc.com: could not connect to host
 kackscharf.de: could not connect to host
 kadioglumakina.com.tr: did not receive HSTS header
 kaela.design: could not connect to host
 kahopoon.net: could not connect to host
 kaisers.de: did not receive HSTS header
 kaiyuewu.com: could not connect to host
 kalami.nl: could not connect to host
 kaleidomarketing.com: did not receive HSTS header
-kambodja.guide: did not receive HSTS header
 kamcvicit.sk: could not connect to host
 kamikano.com: could not connect to host
 kamikatse.net: could not connect to host
-kanada.guide: did not receive HSTS header
 kaneo-gmbh.de: did not receive HSTS header
 kaniklani.co.za: could not connect to host
 kanscooking.org: did not receive HSTS header
 kany.me: did not receive HSTS header
 kanzlei-wirtschaftsrecht.berlin: did not receive HSTS header
 kaohub.com: could not connect to host
 kaplatz.is: could not connect to host
 kapucini.si: max-age too low: 0
 kaputt.com: could not connect to host
-kapverde.guide: did not receive HSTS header
 karaoketonight.com: could not connect to host
 karloskontana.tk: could not connect to host
 karpanhellas.com: did not receive HSTS header
 karting34.com: did not receive HSTS header
 kashdash.ca: could not connect to host
 katiaetdavid.fr: could not connect to host
+katoju.co.jp: could not connect to host
 katproxy.al: did not receive HSTS header
 katproxy.online: could not connect to host
 katproxy.site: could not connect to host
 katproxy.tech: could not connect to host
 katproxy.top: did not receive HSTS header
 katyl.info: could not connect to host
 kaufkraftkiel.de: could not connect to host
 kausch.at: could not connect to host
 kavinvin.me: could not connect to host
 kawaiiku.com: could not connect to host
 kawaiiku.de: could not connect to host
 kcluster.io: could not connect to host
 kcolford.com: did not receive HSTS header
 kd-plus.pp.ua: could not connect to host
 kdata.it: did not receive HSTS header
 kdm-online.de: did not receive HSTS header
-kearney.io: could not connect to host
 keeley.gq: could not connect to host
 keeley.ml: could not connect to host
 keeleysam.me: could not connect to host
 keepassa.co: could not connect to host
 keepclean.me: could not connect to host
 keepcoalintheground.org: could not connect to host
+kefaloniatoday.com: did not receive HSTS header
 kela.jp: did not receive HSTS header
+kennethlim.me: could not connect to host
 kenvix.com: could not connect to host
 kerangalam.com: did not receive HSTS header
 kerksanders.nl: did not receive HSTS header
 kermadec.blog: could not connect to host
 kermadec.com: could not connect to host
 kermadec.net: could not connect to host
 kernl.us: did not receive HSTS header
 keskeces.com: did not receive HSTS header
@@ -3768,22 +3771,20 @@ kickass.al: could not connect to host
 kickasstorrents.gq: could not connect to host
 kid-dachau.de: did not receive HSTS header
 kidkat.cn: could not connect to host
 kiel-media.de: did not receive HSTS header
 kikura.de: max-age too low: 3600
 killerit.in: could not connect to host
 kimberg.co.uk: could not connect to host
 kimpost.org: could not connect to host
-kina.guide: did not receive HSTS header
 kinderly.co.uk: did not receive HSTS header
 kinderwagen-test24.de: could not connect to host
 kindlyfire.com: could not connect to host
 kindof.ninja: could not connect to host
-kingdomcrc.org: could not connect to host
 kingmanhall.org: could not connect to host
 kinkdr.com: could not connect to host
 kinnon.enterprises: could not connect to host
 kintrip.com: did not receive HSTS header
 kionetworks.com: did not receive HSTS header
 kipin.fr: did not receive HSTS header
 kipira.com: could not connect to host
 kirara.eu: could not connect to host
@@ -3814,22 +3815,23 @@ kleertjesvoordelig.nl: could not connect
 kleinblogje.nl: could not connect to host
 kleinerarchitekturfuehrer.de: could not connect to host
 kleppe.co: could not connect to host
 kletterkater.com: did not receive HSTS header
 klicktojob.de: could not connect to host
 klunkergarten.org: could not connect to host
 knapen.io: max-age too low: 604800
 knccloud.com: could not connect to host
-knigadel.com: could not connect to host
+knegten-agilis.com: could not connect to host
 knight-industries.org: could not connect to host
 knightsbridgegroup.org: could not connect to host
 knowdebt.org: did not receive HSTS header
 knowledgesnap.com: could not connect to host
 knowledgesnapsites.com: could not connect to host
+kode-it.de: could not connect to host
 kodexplorer.ml: could not connect to host
 kodiaklabs.org: could not connect to host
 kodokushi.fr: could not connect to host
 koelbli.ch: did not receive HSTS header
 koen.io: did not receive HSTS header
 koenrouwhorst.nl: did not receive HSTS header
 koenvdheuvel.me: did not receive HSTS header
 koerperimpuls.ch: did not receive HSTS header
@@ -3877,17 +3879,16 @@ krmela.com: did not receive HSTS header
 kroetenfuchs.de: could not connect to host
 kroodle.nl: 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
 kswriter.com: could not connect to host
-kuba.guide: did not receive HSTS header
 kucom.it: did not receive HSTS header
 kuechenplan.online: could not connect to host
 kueulangtahunanak.net: could not connect to host
 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
@@ -3919,16 +3920,17 @@ labs.directory: could not connect to hos
 labs.moscow: did not receive HSTS header
 lacaverne.nl: could not connect to host
 lachlankidson.net: did not receive HSTS header
 lacledeslan.ninja: could not connect to host
 lacocinadelila.com: 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
+laflash.com: could not connect to host
 lafr4nc3.xyz: 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
 laisashop.com.br: did not receive HSTS header
 lakhesis.net: could not connect to host
 lamaland.ru: did not receive HSTS header
@@ -3941,17 +3943,16 @@ lanboll.com: could not connect to host
 lancehoteis.com.br: could not connect to host
 landgoedverkopen.nl: could not connect to host
 landhuisverkopen.nl: could not connect to host
 landscape.canonical.com: max-age too low: 2592000
 landscapingmedic.com: did not receive HSTS header
 langenbach.rocks: could not connect to host
 langendries.eu: could not connect to host
 langhun.me: did not receive HSTS header
-laniakean.com: could not connect to host
 lanzainc.xyz: could not connect to host
 lanzarote-online.info: could not connect to host
 laobox.fr: could not connect to host
 laplaceduvillage.net: could not connect to host
 laquack.com: could not connect to host
 laredsemanario.com: could not connect to host
 lasercloud.ml: could not connect to host
 laserfuchs.de: did not receive HSTS header
@@ -4056,17 +4057,16 @@ lifetimemoneymachine.com: did not receiv
 lightarmory.com: could not connect to host
 lightning-ashe.com: did not receive HSTS header
 lightpaste.com: could not connect to host
 lightworx.io: could not connect to host
 lila.pink: did not receive HSTS header
 lillepuu.com: did not receive HSTS header
 lillpopp.eu: could not connect to host
 lilpwny.com: could not connect to host
-lily-inn.com: could not connect to host
 lilycms.com: could not connect to host
 lim-light.com: did not receive HSTS header
 limalama.eu: max-age too low: 1
 limeyeti.com: could not connect to host
 limiteddata.co.uk: did not receive HSTS header
 limpido.it: could not connect to host
 lincolnwayflorist.com: could not connect to host
 lindberg.io: did not receive HSTS header
@@ -4131,18 +4131,17 @@ lolidunno.com: could not connect to host
 londoncalling.co: did not receive HSTS header
 londonlanguageexchange.com: could not connect to host
 lonerwolf.com: did not receive HSTS header
 longboarding-ulm.de: could not connect to host
 look-at-my.site: could not connect to host
 lookasik.eu: did not receive HSTS header
 lookout.com: did not receive HSTS header
 looktothestars.org: did not receive HSTS header
-lookupclose.com: could not connect to host
-lookyman.net: could not connect to host
+lookupclose.com: did not receive HSTS header
 lookzook.com: did not receive HSTS header
 loongsg.xyz: could not connect to host
 loopstart.org: could not connect to host
 loqyu.co: max-age too low: 2592000
 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
@@ -4172,17 +4171,17 @@ lsp-sports.de: did not receive HSTS head
 lt.search.yahoo.com: did not receive HSTS header
 ltbytes.com: could not connect to host
 ltu.social: did not receive HSTS header
 lu.search.yahoo.com: did not receive HSTS header
 lucas-garte.com: did not receive HSTS header
 lucaterzini.com: could not connect to host
 luclu7.pw: did not receive HSTS header
 ludwig.click: did not receive HSTS header
-ludwiggrill.de: could not connect to host
+ludwiggrill.de: did not receive HSTS header
 lufthansaexperts.com: max-age too low: 2592000
 luis-checa.com: could not connect to host
 lukeistschuld.de: 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
@@ -4248,20 +4247,18 @@ maildragon.com: could not connect to hos
 mailgarant.nl: could not connect to host
 mailhost.it: could not connect to host
 mailing-femprendedores.com: did not receive HSTS header
 mailing-jbgg.com: did not receive HSTS header
 main-street-seo.com: did not receive HSTS header
 maintainerheaven.ch: could not connect to host
 majesnix.org: did not receive HSTS header
 make-pizza.info: could not connect to host
-makedonien.guide: did not receive HSTS header
 makeitdynamic.com: could not connect to host
 makerstuff.net: did not receive HSTS header
-maldiverna.guide: 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
 mallner.me: could not connect to host
 malmstroms-co.se: could not connect to host
 maltes.website: could not connect to host
 malwaretips.com: did not receive HSTS header
@@ -4287,17 +4284,16 @@ manifestbin.com: did not receive HSTS he
 manitasicily.com: did not receive HSTS header
 manningbrothers.com: did not receive HSTS header
 manova.cz: could not connect to host
 manshop24.com: could not connect to host
 mansion-note.com: did not receive HSTS header
 manududu.com.br: could not connect to host
 maomaofuli.vip: could not connect to host
 maple5.com: did not receive HSTS header
-marbinvest.com: did not receive HSTS header
 marcelparra.com: could not connect to host
 marchagen.nl: did not receive HSTS header
 marcianoandtopazio.com: could not connect to host
 marco01809.net: could not connect to host
 marcoececilia.it: did not receive HSTS header
 marcofinke.de: could not connect to host
 marcontrol.com: did not receive HSTS header
 marcosteixeira.tk: could not connect to host
@@ -4336,30 +4332,30 @@ martinp.no: could not connect to host
 martins.im: could not connect to host
 marumagic.com: did not receive HSTS header
 masa-yoga.com: did not receive HSTS header
 masjidtawheed.net: did not receive HSTS header
 maskt.pw: could not connect to host
 massot.eu: did not receive HSTS header
 masterapi.ninja: did not receive HSTS header
 masteringtheterminal.com: did not receive HSTS header
-masterpc.co.uk: could not connect to host
 mastimtibetano.com: could not connect to host
 mastod.life: could not connect to host
 mastodon.direct: could not connect to host
 mastodon.engineering: could not connect to host
 mastodon.my: did not receive HSTS header
 mastodon.pl: could not connect to host
 mastodones.club: could not connect to host
 masty.nl: did not receive HSTS header
 matatall.com: did not receive HSTS header
 matchneedle.com: could not connect to host
 maternalsafety.org: did not receive HSTS header
 mateusmeyer.com.br: could not connect to host
 mathers.ovh: did not receive HSTS header
+matillat.ovh: could not connect to host
 matomeplus.co: could not connect to host
 matrict.com: could not connect to host
 matrip.de: could not connect to host
 matrix.ac: could not connect to host
 matrixcheats.net: could not connect to host
 matsuz.com: could not connect to host
 matt.tf: did not receive HSTS header
 mattandreko.com: did not receive HSTS header
@@ -4372,50 +4368,48 @@ mattsvensson.com: max-age too low: 0
 mattwservices.co.uk: did not receive HSTS header
 matty.digital: did not receive HSTS header
 maultrom.ml: could not connect to host
 maupiknik.com: did not receive HSTS header
 maur.cz: did not receive HSTS header
 maurus-automation.de: did not receive HSTS header
 mavisang.cf: could not connect to host
 mawe.red: could not connect to host
+maximiliankrieg.de: could not connect to host
 maximov.space: could not connect to host
 maxr1998.de: did not receive HSTS header
 maxserver.com: did not receive HSTS header
 maya.mg: could not connect to host
 mazz-tech.com: could not connect to host
 mc81.com: could not connect to host
 mca2017.org: did not receive HSTS header
 mcard.vn: did not receive HSTS header
 mcc.re: could not connect to host
 mccarty.io: could not connect to host
 mcdonalds.ru: did not receive HSTS header
 mcga.media: could not connect to host
 mclab.su: could not connect to host
 mclist.it: could not connect to host
 mctherealm.net: could not connect to host
 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
-meanevo.com: could not connect to host
 meat-education.com: could not connect to host
 mebio.us: did not receive HSTS header
 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
-medireport.fr: could not connect to host
 medirich.co: could not connect to host
 meditek-dv.ru: could not connect to host
 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
 meetings2.com: did not receive HSTS header
@@ -4452,40 +4446,37 @@ meredithkm.info: could not connect to ho
 meritz.rocks: could not connect to host
 mersinunivercity.com: did not receive HSTS header
 merson.me: could not connect to host
 meshlab.co: could not connect to host
 mesmoque.com: could not connect to host
 metagrader.com: could not connect to host
 metasyntactic.xyz: could not connect to host
 metebalci.com: did not receive HSTS header
-meteobox.co: could not connect to host
-meteobox.cz: could not connect to host
-meteobox.mx: could not connect to host
 meteosherbrooke.com: could not connect to host
 meteosky.net: could not connect to host
 meter.md: could not connect to host
 metin2blog.de: did not receive HSTS header
 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
 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
-mf-fischer.de: 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
 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
 mhict.nl: could not connect to host
+mhjuma.com: could not connect to host
 mht-travel.com: could not connect to host
 mhx.pw: could not connect to host
 mi80.com: could not connect to host
 michaeldemuth.com: could not connect to host
 michaelfitzpatrickruth.com: could not connect to host
 michaelmorpurgo.com: did not receive HSTS header
 michaeln.net: did not receive HSTS header
 michaelscrivo.com: did not receive HSTS header
@@ -4624,17 +4615,17 @@ moebel-nagel.de: did not receive HSTS he
 moellers.it: could not connect to host
 moelord.org: could not connect to host
 moen.io: did not receive HSTS header
 mogry.net: could not connect to host
 moho.kr: could not connect to host
 moitur.com: could not connect to host
 mojnet.eu: could not connect to host
 mojnet.net: could not connect to host
-mokhtarmial.com: max-age too low: 2592000
+mokhtarmial.com: did not receive HSTS header
 mols.me: could not connect to host
 molun.net: did not receive HSTS header
 mommel.com: could not connect to host
 mommelonline.de: could not connect to host
 momoka.moe: could not connect to host
 mon-a-lisa.com: did not receive HSTS header
 mona.lu: did not receive HSTS header
 monarca.systems: could not connect to host
@@ -4694,17 +4685,16 @@ mrawe.com: could not connect to host
 mrdani.net: could not connect to host
 mredsanders.net: could not connect to host
 mrettich.org: did not receive HSTS header
 mrhack.cz: did not receive HSTS header
 mrning.com: did not receive HSTS header
 mrnonz.com: max-age too low: 0
 mrpopat.in: did not receive HSTS header
 mrs-shop.com: did not receive HSTS header
-ms-alternativ.de: could not connect to host
 msc-seereisen.net: could not connect to host
 mstd.tokyo: did not receive HSTS header
 mstdn-tech.jp: could not connect to host
 mszaki.com: did not receive HSTS header
 mt.me.uk: could not connect to host
 mt.search.yahoo.com: did not receive HSTS header
 mtamaki.com: could not connect to host
 mtdn.jp: could not connect to host
@@ -4731,16 +4721,17 @@ musicalbim.com.br: could not connect to 
 musikkfondene.no: did not receive HSTS header
 mustika.cf: could not connect to host
 mutamatic.com: could not connect to host
 mutuelle-obligatoire-pme.fr: did not receive HSTS header
 muzykaprzeszladoplay.pl: did not receive HSTS header
 mvanmarketing.nl: did not receive HSTS header
 mvsecurity.nl: could not connect to host
 mw.search.yahoo.com: did not receive HSTS header
+mware-staging.azurewebsites.net: did not receive HSTS header
 mwohlfarth.de: did not receive HSTS header
 my-owncloud.com: could not connect to host
 my-voice.nl: did not receive HSTS header
 my.alfresco.com: did not receive HSTS header
 my.swedbank.se: could not connect to host
 myairshop.gr: could not connect to host
 myandroid.tools: could not connect to host
 myandroidtools.cc: could not connect to host
@@ -4784,17 +4775,16 @@ mystery-science-theater-3000.de: did not
 mythlogic.com: did not receive HSTS header
 mythslegendscollection.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
-n6a.net: could not connect to host
 n8ch.net: could not connect to host
 nabru.co.uk: did not receive HSTS header
 nabytko.cz: could not connect to host
 nacktetatsachen.at: did not receive HSTS header
 nadia.pt: could not connect to host
 nagoya-kyuyo.com: could not connect to host
 naiharngym.com: did not receive HSTS header
 najedlo.sk: could not connect to host
@@ -4819,17 +4809,16 @@ nanrenba.net: could not connect to host
 nansay.cn: could not connect to host
 nanto.eu: could not connect to host
 narada.com.ua: could not connect to host
 nashira.cz: did not receive HSTS header
 natalia-fadeeva.ru: could not connect to host
 natalia.io: could not connect to host
 natalieandjoshua.com: could not connect to host
 natalt.org: did not receive HSTS header
-nathan.io: could not connect to host
 nathanmfarrugia.com: did not receive HSTS header
 nationwidevehiclecontracts.co.uk: did not receive HSTS header
 natural-progesterone.net: could not connect to host
 naturecoaster.com: did not receive HSTS header
 natuurbehangnederland.nl: could not connect to host
 nav.jobs: could not connect to host
 naval.tf: could not connect to host
 navenlle.com: did not receive HSTS header
@@ -4964,25 +4953,23 @@ nolte.work: could not connect to host
 nomorebytes.de: could not connect to host
 nootropicsource.com: did not receive HSTS header
 nope.website: could not connect to host
 nopex.no: could not connect to host
 nopol.de: could not connect to host
 norandom.com: could not connect to host
 norb.at: could not connect to host
 nordlicht.photography: did not receive HSTS header
-norge.guide: did not receive HSTS header
 normankranich.de: could not connect to host
 northcutt.com: did not receive HSTS header
 nosecretshop.com: could not connect to host
 notadd.com: did not receive HSTS header
 notenoughtime.de: could not connect to host
 nothing.net.nz: max-age too low: 7776000
 nothing.org.uk: did not receive HSTS header
-notify.moe: could not connect to host
 notjustbitchy.com: did not receive HSTS header
 nottheonion.net: did not receive HSTS header
 nou.si: could not connect to host
 nouvelle-vague-saint-cast.fr: did not receive HSTS header
 nova-elearning.com: did not receive HSTS header
 novaco.in: max-age too low: 3600
 novacoast.com: did not receive HSTS header
 novatrucking.de: could not connect to host
@@ -4992,17 +4979,16 @@ novurania.com: did not receive HSTS head
 nowak.ninja: did not receive HSTS header
 noworrywp.com: could not connect to host
 nozoe.jp: could not connect to host
 np.search.yahoo.com: did not receive HSTS header
 npm.li: could not connect to host
 npol.de: could not connect to host
 nrechn.de: could not connect to host
 nrizzio.me: could not connect to host
-nstremsdoerfer.ovh: could not connect to host
 nsweb.solutions: could not connect to host
 ntbs.pro: could not connect to host
 ntse.xyz: could not connect to host
 nu3.at: did not receive HSTS header
 nu3.ch: did not receive HSTS header
 nu3.co.uk: could not connect to host
 nu3.com: did not receive HSTS header
 nu3.de: did not receive HSTS header
@@ -5029,17 +5015,16 @@ nusatrip-api.com: did not receive HSTS h
 nutricuerpo.com: did not receive HSTS header
 nutritionculture.com: could not connect to host
 nutsandboltsmedia.com: did not receive HSTS header
 nuttyveg.com: could not connect to host
 nwa.xyz: could not connect to host
 nweb.co.nz: could not connect to host
 nwork.media: could not connect to host
 nyantec.com: did not receive HSTS header
-nyazeeland.guide: did not receive HSTS header
 nycroth.com: could not connect to host
 nyesider.org: could not connect to host
 nyored.com: did not receive HSTS header
 nyphox.net: could not connect to host
 nys-hk.com: could not connect to host
 nysepho.pw: could not connect to host
 nysifclaimcentral.com: did not receive HSTS header
 nystart.no: did not receive HSTS header
@@ -5081,16 +5066,17 @@ ojls.co: could not connect to host
 okane.love: could not connect to host
 okok-rent.com: could not connect to host
 okok.rent: could not connect to host
 okutama.in.th: could not connect to host
 olanderflorist.com: could not connect to host
 olcso-vps-szerver.hu: could not connect to host
 oldchaphome.nl: did not receive HSTS header
 oldoakflorist.com: could not connect to host
+oliveraiedelabastideblanche.fr: could not connect to host
 oliverdunk.com: did not receive HSTS header
 ollehbizev.co.kr: could not connect to host
 ollning.com: could not connect to host
 olswangtrainees.com: could not connect to host
 omacostudio.com: could not connect to host
 omgaanmetidealen.com: could not connect to host
 ominto.com: max-age too low: 0
 omniscimus.net: could not connect to host
@@ -5146,33 +5132,32 @@ ookjesprookje.nl: could not connect to h
 ooooush.co.uk: could not connect to host
 oopsmycase.com: could not connect to host
 oopsorup.com: could not connect to host
 oost.io: could not connect to host
 opatut.de: could not connect to host
 open-mx.de: could not connect to host
 open-to-repair.fr: did not receive HSTS header
 openas.org: could not connect to host
-openblox.org: could not connect to host
 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: [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]
 openprovider.nl: did not receive HSTS header
 openquery.com.au: did not receive HSTS header
 openshift.redhat.com: did not receive HSTS header
 opensourcehouse.net: could not connect to host
 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
 opoleo.com: could not connect to host
 opperwall.net: could not connect to host
-oprechtgezegd.nl: could not connect to host
+opreismetingvoorunicef.nl: could not connect to host
 opsafewinter.net: could not connect to host
 opsbears.com: did not receive HSTS header
 opstacks.com: did not receive HSTS header
 optenhoefel.de: could not connect to host
 optimista.soy: could not connect to host
 optometriepunt.nl: did not receive HSTS header
 optumrxhealthstore.com: could not connect to host
 oracaodocredo.com.br: could not connect to host
@@ -5258,17 +5243,16 @@ palmaville.com: could not connect to hos
 palmer.im: could not connect to host
 pamplona.tv: could not connect to host
 pamsoft.pl: max-age too low: 0
 pan.tips: could not connect to host
 panaceallc.net: could not connect to host
 panama-gbs.com: did not receive HSTS header
 panamaequity.com: did not receive HSTS header
 panamateakforestry.com: did not receive HSTS header
-panascais.net: could not connect to host
 panni.me: could not connect to host
 panoranordic.net: did not receive HSTS header
 pansu.space: could not connect to host
 pants-off.xyz: could not connect to host
 pantsu.cat: did not receive HSTS header
 papalytics.com: could not connect to host
 papeda.net: could not connect to host
 papercard.co.uk: did not receive HSTS header
@@ -5288,17 +5272,16 @@ particonpsplus.it: did not receive HSTS 
 partirkyoto.jp: did not receive HSTS header
 partyhaus.ovh: did not receive HSTS header
 partyvan.eu: could not connect to host
 partyvan.it: could not connect to host
 partyvan.moe: could not connect to host
 partyvan.nl: could not connect to host
 partyvan.se: could not connect to host
 passphrase.today: could not connect to host
-passthepopcorn.me: did not receive HSTS header
 passumpsicbank.com: did not receive HSTS header
 passwd.io: could not connect to host
 passwordbox.com: did not receive HSTS header
 passwordrevelator.net: did not receive HSTS header
 pastaf.com: could not connect to host
 pastdream.xyz: could not connect to host
 paste.linode.com: could not connect to host
 pastebin.linode.com: could not connect to host
@@ -5368,16 +5351,17 @@ perlwork.nl: could not connect to host
 pernatie.ru: could not connect to host
 perplex.nl: did not receive HSTS header
 perroud.pro: did not receive HSTS header
 personalcommunicationsecurity.com: could not connect to host
 personaldatabasen.no: could not connect to host
 personalinjurylist.com: could not connect to host
 personalizedtouch.co: could not connect to host
 perthdevicelab.com: did not receive HSTS header
+pet-life.top: could not connect to host
 pet-nsk.ru: could not connect to host
 petchart.net: could not connect to host
 petersmark.com: could not connect to host
 pethub.com: did not receive HSTS header
 petit.site: could not connect to host
 petplum.com: could not connect to host
 petravdbos.nl: did not receive HSTS header
 petrkrapek.cz: did not receive HSTS header
@@ -5391,16 +5375,17 @@ peytonfarrar.com: did not receive HSTS h
 pfgshop.com.br: did not receive HSTS header
 pflegedienst-gratia.de: max-age too low: 300
 pgpm.io: could not connect to host
 pgtb.be: did not receive HSTS header
 phalconist.com: did not receive HSTS header
 pharmgkb.org: could not connect to host
 phdsupply.com: did not receive HSTS header
 phdwuda.com: could not connect to host
+phelx.de: could not connect to host
 phillmoore.com: did not receive HSTS header
 phillprice.com: could not connect to host
 philpropertygroup.com: could not connect to host
 phoebe.co.nz: did not receive HSTS header
 phoenixlogan.com: could not connect to host
 phonenumberinfo.co.uk: could not connect to host
 phongmay24h.com: could not connect to host
 photoancestry.com: did not receive HSTS header
@@ -5412,16 +5397,17 @@ physicaltherapist.com: did not receive H
 pianetaottica.net: could not connect to host
 pianetaottica.org: could not connect to host
 picardiascr.com: did not receive HSTS header
 pickersurvey.org: could not connect to host
 pickr.co: did not receive HSTS header
 picone.com.au: could not connect to host
 picotronic.biz: could not connect to host
 picscare.co.uk: did not receive HSTS header
+pieterbos.nl: could not connect to host
 pieterjangeeroms.me: could not connect to host
 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
 pin.net.au: did not receive HSTS header
@@ -5456,17 +5442,17 @@ pizzadoc.ch: could not connect to host
 pjbet.mg: did not receive HSTS header
 pk.search.yahoo.com: did not receive HSTS header
 pkschat.com: could not connect to host
 placefade.com: could not connect to host
 placollection.org: could not connect to host
 plaettliaktion.ch: did not receive HSTS header
 planpharmacy.com: could not connect to host
 plass.hamburg: could not connect to host
-plataformadeinformacion.es: did not receive HSTS header
+plataformadeinformacion.es: max-age too low: 300
 platform.lookout.com: could not connect to host
 platomania.eu: did not receive HSTS header
 play.google.com: did not receive HSTS header (error ignored - included regardless)
 playerhunter.com: did not receive HSTS header
 playflick.com: could not connect to host
 playmaker.io: could not connect to host
 playnation.io: could not connect to host
 playsharp.com: could not connect to host
@@ -5483,29 +5469,29 @@ plothost.com: did not receive HSTS heade
 ploup.net: could not connect to host
 pluff.nl: did not receive HSTS header
 pluginsloaded.com: did not receive HSTS header
 plur.com.au: did not receive HSTS header
 pm13-media.cz: could not connect to host
 pmac.pt: could not connect to host
 pmnts.io: could not connect to host
 po.gl: did not receive HSTS header
+pochaneko.com: 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
 pointeringles.com: could not connect to host
 pointiswunderland.de: did not receive HSTS header
 pointpro.de: did not receive HSTS header
 pokeduel.me: did not receive HSTS header
 pol.in.th: could not connect to host
 polarityschule.com: did not receive HSTS header
 pole.net.nz: could not connect to host
-polen.guide: did not receive HSTS header
 policeiwitness.sg: could not connect to host
 polimat.org: could not connect to host
 politically-incorrect.xyz: could not connect to host
 politologos.org: did not receive HSTS header
 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
@@ -5518,17 +5504,16 @@ poolsandstuff.com: did not receive HSTS 
 poon.tech: could not connect to host
 popkins.ml: could not connect to host
 poris.web.id: could not connect to host
 porno-gif.ru: did not receive HSTS header
 pornstars.me: did not receive HSTS header
 portalm.tk: could not connect to host
 portalplatform.net: could not connect to host
 portofacil.com: did not receive HSTS header
-porzgmbh.de: max-age too low: 3600
 poshpak.com: max-age too low: 86400
 postback.io: did not receive HSTS header
 postcodewise.co.uk: did not receive HSTS header
 posterspy.com: did not receive HSTS header
 postscheduler.org: could not connect to host
 posylka.de: did not receive HSTS header
 potatoheads.net: could not connect to host
 potbar.com: could not connect to host
@@ -5556,17 +5541,17 @@ prattpokemon.com: could not connect to h
 praxis-research.info: did not receive HSTS header
 prediksisydney.com: could not connect to host
 preezzie.com: could not connect to host
 prefis.com: did not receive HSTS header
 prefontaine.name: could not connect to host
 prego-shop.de: did not receive HSTS header
 preissler.co.uk: could not connect to host
 prelist.org: did not receive HSTS header
-prepaid-voip.nl: could not connect to host
+prepaid-voip.nl: did not receive HSTS header
 prepandgo-euro.com: could not connect to host
 prescriptiondrugs.com: could not connect to host
 presidentials2016.com: could not connect to host
 press-anime-nenkan.com: did not receive HSTS header
 pressfreedomfoundation.org: did not receive HSTS header
 prettygrouse.com: did not receive HSTS header
 pretzlaff.info: did not receive HSTS header
 preworkout.me: could not connect to host
@@ -5598,16 +5583,17 @@ profusion.io: could not connect to host
 progblog.net: could not connect to host
 progress-technologies.com: could not connect to host
 prohostonline.fi: could not connect to host
 proitconsulting.com.au: could not connect to host
 project-sparks.eu: did not receive HSTS header
 projectascension.io: could not connect to host
 projectdp.net: could not connect to host
 projectmercury.space: could not connect to host
+projectvault.ovh: could not connect to host
 projetoresecia.com: did not receive HSTS header
 promecon-gmbh.de: did not receive HSTS header
 prontocleaners.co.uk: could not connect to host
 prontolight.com: did not receive HSTS header
 prontomovers.co.uk: could not connect to host
 propactrading.com: could not connect to host
 prosocialmachines.com: could not connect to host
 prosoft.sk: did not receive HSTS header
@@ -5631,17 +5617,16 @@ prxio.site: could not connect to host
 prytkov.com: did not receive HSTS header
 ps-provider.co.jp: could not connect to host
 ps4all.nl: could not connect to host
 pshostpk.com: did not receive HSTS header
 psicologia.co.ve: could not connect to host
 psw.academy: could not connect to host
 psw.consulting: could not connect to host
 psychoco.net: could not connect to host
-psydix.org: could not connect to host
 psylab.re: could not connect to host
 ptn.moscow: could not connect to host
 ptonet.com: could not connect to host
 pubkey.is: could not connect to host
 publications.qld.gov.au: did not receive HSTS header
 publicidadnovagrass.com.mx: did not receive HSTS header
 publicspeakingcamps.com: could not connect to host
 puentes.info: could not connect to host
@@ -5685,19 +5670,20 @@ qirinus.com: could not connect to host
 qldconservation.org: could not connect to host
 qonqa.de: did not receive HSTS header
 qop.io: could not connect to host
 qorm.co.uk: did not receive HSTS header
 qqq.gg: could not connect to host
 qr-city.org: did not receive HSTS header
 qrara.net: did not receive HSTS header
 qrlending.com: did not receive HSTS header
+qtxh.net: did not receive HSTS header
 quail.solutions: could not connect to host
 quakerlens.com: did not receive HSTS header
-quality1.com.br: could not connect to host
+quality1.com.br: did not receive HSTS header
 qualityology.com: could not connect to host
 quanglepro.com: could not connect to host
 quantacloud.ch: could not connect to host
 quantenteranik.eu: could not connect to host
 quantum-cloud.xyz: could not connect to host
 quantum-ethics.com: could not connect to host
 quantumcourse.org: did not receive HSTS header
 quebecmailbox.com: could not connect to host
@@ -5721,17 +5707,16 @@ r15.me: did not receive HSTS header
 r3bl.me: did not receive HSTS header
 r40.us: could not connect to host
 ra-schaal.de: could not connect to host
 raajheshkannaa.com: could not connect to host
 rackblue.com: did not receive HSTS header
 radicaleducation.net: could not connect to host
 radtke.bayern: could not connect to host
 rafaelcz.de: could not connect to host
-raiblockscommunity.net: could not connect to host
 raidstone.com: could not connect to host
 raidstone.net: could not connect to host
 raidstone.rocks: could not connect to host
 railjob.cn: could not connect to host
 rainbowbarracuda.com: could not connect to host
 ramarka.de: could not connect to host
 ramon-c.nl: could not connect to host
 ramonj.nl: could not connect to host
@@ -5783,16 +5768,17 @@ rcvd.io: did not receive HSTS header
 rdh.asia: could not connect to host
 rdns.im: did not receive HSTS header
 rdyrda.fr: could not connect to host
 re-customer.net: did not receive HSTS header
 reachr.com: could not connect to host
 reader.ga: could not connect to host
 readmeeatmedrinkme.com: could not connect to host
 readr.pw: could not connect to host
+reaganlibrary.gov: could not connect to host
 reagir43.fr: did not receive HSTS header
 realmic.net: could not connect to host
 realmofespionage.com: could not connect to host
 reaper.rip: could not connect to host
 reardenporn.com: could not connect to host
 rebekaesgabor.online: could not connect to host
 recommended.reviews: could not connect to host
 redable.hosting: could not connect to host
@@ -5842,45 +5828,45 @@ remitatm.com: did not receive HSTS heade
 remodela.com.ve: could not connect to host
 remonttitekniikka.fi: could not connect to host
 remoteham.com: could not connect to host
 rencaijia.com: did not receive HSTS header
 renem.net: max-age too low: 2592000
 rengarenkblog.com: could not connect to host
 renideo.fr: could not connect to host
 renlong.org: did not receive HSTS header
-renrenss.com: did not receive HSTS header
+renrenss.com: could not connect to host
 rentacarcluj.xyz: did not receive HSTS header
 rentbrowsertrain.me: could not connect to host
 rentcarassist.com: could not connect to host
 renteater.com: could not connect to host
 renyiyou.com: could not connect to host
 repaxan.com: could not connect to host
 replacemychina.com: could not connect to host
 reprolife.co.uk: could not connect to host
 res-rheingau.de: did not receive HSTS header
 res42.com: could not connect to host
 reserve-online.net: did not receive HSTS header
 residentsinsurance.co.uk: did not receive HSTS header
 resl20.servehttp.com: could not connect to host
 respice.xyz: could not connect to host
 respostas.com.br: did not receive HSTS header
 restchart.com: did not receive HSTS header
-restioson.me: could not connect to host
 restrealitaet.de: did not receive HSTS header
 returnofwar.com: could not connect to host
 revapost.ch: could not connect to host
 revealdata.com: did not receive HSTS header
 revelaciones.tv: could not connect to host
 revello.org: did not receive HSTS header
 reverie.pw: could not connect to host
 reviewjust.com: did not receive HSTS header
 reviews.anime.my: max-age too low: 5184000
 revtut.net: did not receive HSTS header
 rewardstock.com: max-age too low: 0
+rewopit.net: did not receive HSTS header
 rf.tn: could not connect to host
 rhapsodhy.hu: could not connect to host
 rhdigital.pro: could not connect to host
 rhering.de: could not connect to host
 rhodosdreef.nl: could not connect to host
 riaucybersolution.net: did not receive HSTS header
 richiemail.net: did not receive HSTS header
 richmondsunlight.com: did not receive HSTS header
@@ -5998,21 +5984,20 @@ ruxit.com: did not receive HSTS header
 rw-solutions.tech: could not connect to host
 rw.search.yahoo.com: did not receive HSTS header
 rww.name: max-age too low: 0
 rx-contact.com: could not connect to host
 rxprep.com: did not receive HSTS header
 rxt.social: could not connect to host
 rxv.cc: could not connect to host
 ryanteck.uk: did not receive HSTS header
-rychlikoderi.cz: could not connect to host
 rylin.net: did not receive HSTS header
 s-rickroll-p.pw: could not connect to host
 s.how: could not connect to host
-saabwa.org: could not connect to host
+saabwa.org: did not receive HSTS header
 safelist.eu: did not receive HSTS header
 safematix.com: could not connect to host
 safemovescheme.co.uk: did not receive HSTS header
 safersurfing.eu: did not receive HSTS header
 safewings-nh.nl: did not receive HSTS header
 sagarhandicraft.com: could not connect to host
 sageth.com: max-age too low: 0
 sah3.net: could not connect to host
@@ -6049,16 +6034,17 @@ santing.net: did not receive HSTS header
 santouri.be: could not connect to host
 sarah-beckett-harpist.com: did not receive HSTS header
 sarahsweetlife.com: could not connect to host
 sarahsweger.com: could not connect to host
 sarakas.com: could not connect to host
 sarangsemutbandung.com: could not connect to host
 sarisonproductions.com: did not receive HSTS header
 saruwebshop.co.za: could not connect to host
+sash.pw: could not connect to host
 satanichia.moe: could not connect to host
 satmep.com: did not receive HSTS header
 satoshicrypt.com: did not receive HSTS header
 satriyowibowo.my.id: did not receive HSTS header
 satsukii.moe: did not receive HSTS header
 saturne.tk: could not connect to host
 saturngames.co.uk: did not receive HSTS header
 saucyfox.net: did not receive HSTS header
@@ -6073,30 +6059,30 @@ sawamura-rental.com: did not receive HST
 say-hanabi.com: could not connect to host
 sazima.ru: did not receive HSTS header
 sbox-archives.com: could not connect to host
 sby.de: did not receive HSTS header
 sc4le.com: could not connect to host
 scannabi.com: could not connect to host
 schadegarant.net: could not connect to host
 schauer.so: could not connect to host
+schawe.me: could not connect to host
 schermreparatierotterdam.nl: did not receive HSTS header
 schmitt.ovh: could not connect to host
 schnell-abnehmen.tips: did not receive HSTS header
 schnell-gold.com: could not connect to host
 schooltrends.co.uk: did not receive HSTS header
 schorel.ovh: could not connect to host
 schorelweb.nl: did not receive HSTS header
 schreiber-netzwerk.eu: did not receive HSTS header
 schrodinger.io: could not connect to host
 schroettle.com: did not receive HSTS header
 schulterglatzen-altenwalde.de: could not connect to host
 schultzflorists.com: could not connect to host
 schwarzkopfforyou.de: did not receive HSTS header
-schweiz.guide: did not receive HSTS header
 schweizerbolzonello.net: did not receive HSTS header
 schwetz.net: could not connect to host
 scicasts.com: max-age too low: 7776000
 scienceathome.org: did not receive HSTS header
 scivillage.com: did not receive HSTS header
 sclgroup.cc: did not receive HSTS header
 scooshonline.co.uk: did not receive HSTS header
 scores4schools.com: could not connect to host
@@ -6112,33 +6098,31 @@ scrambler.in: could not connect to host
 scrapings.net: could not connect to host
 screencaster.io: did not receive HSTS header
 screenresolution.space: could not connect to host
 screensaversplanet.com: did not receive HSTS header
 scribbleserver.com: could not connect to host
 scribe.systems: could not connect to host
 scrion.com: could not connect to host
 script.google.com: did not receive HSTS header (error ignored - included regardless)
-scriptenforcer.net: could not connect to host
+scriptenforcer.net: did not receive HSTS header
 scriptict.nl: could not connect to host
 scrollstory.com: did not receive HSTS header
 sdhmanagementgroup.com: could not connect to host
 sdia.ru: could not connect to host
 sdmoscow.ru: could not connect to host
 sdrobs.com: did not receive HSTS header
 sdsl-speedtest.de: could not connect to host
 seans.cc: did not receive HSTS header
 search-one.de: did not receive HSTS header
 seavancouver.com: could not connect to host
 sebastian-bair.de: could not connect to host
 sebastianhampl.de: could not connect to host
 sebster.com: did not receive HSTS header
-sec.gd: could not connect to host
 secandtech.com: could not connect to host
-secboom.com: did not receive HSTS header
 seccom.ch: did not receive HSTS header
 secnet.ga: could not connect to host
 secondary-survivor.com: could not connect to host
 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
@@ -6200,17 +6184,16 @@ sensiblemn.org: could not connect to hos
 sensibus.com: did not receive HSTS header
 seobot.com.au: could not connect to host
 seomobo.com: could not connect to host
 seosanantonioinc.com: did not receive HSTS header
 seowarp.net: did not receive HSTS header
 sepalandseed.com: did not receive HSTS header
 seq.tf: did not receive HSTS header
 serathius.ovh: could not connect to host
-serbien.guide: did not receive HSTS header
 serenitycreams.com: did not receive HSTS header
 serfdom.io: did not receive HSTS header
 serized.pw: could not connect to host
 serverangels.co.uk: could not connect to host
 servercode.ca: did not receive HSTS header
 serverdensity.io: did not receive HSTS header
 servergno.me: did not receive HSTS header
 servermonkey.nl: could not connect to host
@@ -6319,17 +6302,16 @@ simon-pokorny.com: did not receive HSTS 
 simon.butcher.name: max-age too low: 2629743
 simongong.net: did not receive HSTS header
 simpan.id: did not receive HSTS header
 simpleai.net: max-age too low: 600
 simplelearner.com: could not connect to host
 simplepractice.com: did not receive HSTS header
 simplixos.org: could not connect to host
 simply-premium.com: did not receive HSTS header
-simplyfixit.co.uk: did not receive HSTS header
 sin30.net: could not connect to host
 sincai666.com: could not connect to host
 sincron.org: could not connect to host
 sinful.pw: could not connect to host
 singul4rity.com: could not connect to host
 sinneserweiterung.de: could not connect to host
 sinosky.org: did not receive HSTS header
 siriad.com: could not connect to host
@@ -6355,17 +6337,16 @@ skoda-clever-lead.de: could not connect 
 skoda-nurdiebesten.de: did not receive HSTS header
 skotty.io: did not receive HSTS header
 skpdev.net: could not connect to host
 skullhouse.nyc: did not receive HSTS header
 skyasker.cn: could not connect to host
 skyflix.me: could not connect to host
 skyoy.com: did not receive HSTS header
 skyrunners.ch: could not connect to host
-sl1pkn07.wtf: could not connect to host
 slanterns.net: could not connect to host
 slash-dev.de: did not receive HSTS header
 slashand.co: did not receive HSTS header
 slashdesign.it: did not receive HSTS header
 slashem.me: did not receive HSTS header
 slattery.co: could not connect to host
 slauber.de: did not receive HSTS header
 sleep10.com: could not connect to host
@@ -6454,32 +6435,31 @@ soporte.cc: could not connect to host
 sorensen-online.com: could not connect to host
 sosaka.ml: could not connect to host
 sosiolog.com: did not receive HSTS header
 sotor.de: did not receive HSTS header
 soucorneteiro.com.br: could not connect to host
 sougi-review.top: could not connect to host
 soulfulglamour.uk: could not connect to host
 sourcelair.com: did not receive HSTS header
-sourcitec.com: could not connect to host
 southernjamusa.com: did not receive HSTS header
 southgale.condos: could not connect to host
+southmeriden-vfd.org: could not connect to host
 southside-crew.club: could not connect to host
 southworcestershiregpservices.co.uk: could not connect to host
 souyar.de: could not connect to host
 souyar.net: could not connect to host
 souyar.us: could not connect to host
 sovereignshare.com: could not connect to host
 sown.dyndns.org: could not connect to host
 spacedust.xyz: could not connect to host
 spacefish.biz: could not connect to host
 spacehq.org: could not connect to host
 spaggel.nl: could not connect to host
 spamloco.net: did not receive HSTS header
-spanien.guide: did not receive HSTS header
 sparelib.com: max-age too low: 3650
 spark.team: could not connect to host
 sparklingsparklers.com: did not receive HSTS header
 sparsa.army: could not connect to host
 sparta-trade.com: could not connect to host
 spauted.com: could not connect to host
 spdysync.com: could not connect to host
 specialedesigns.com: could not connect to host
@@ -6509,16 +6489,17 @@ spot-events.com: could not connect to ho
 spotifyripper.tk: could not connect to host
 spotlightsrule.ddns.net: could not connect to host
 spr.id.au: did not receive HSTS header
 spreadsheets.google.com: did not receive HSTS header (error ignored - included regardless)
 spresso.me: did not receive HSTS header
 sprk.fitness: did not receive HSTS header
 sproutconnections.com: did not receive HSTS header
 sprutech.de: did not receive HSTS header
+sputnik1net.org: could not connect to host
 square.gs: could not connect to host
 squatldf.org: did not receive HSTS header
 sqzryang.com: did not receive HSTS header
 srcc.fr: could not connect to host
 srevilak.net: did not receive HSTS header
 srmaximo.com: could not connect to host
 srna.sk: could not connect to host
 srpdb.com: did not receive HSTS header
@@ -6563,16 +6544,17 @@ statementinsertsforless.com: did not rec
 stateofexception.io: could not connect to host
 static.or.at: did not receive HSTS header
 staticanime.net: could not connect to host
 stationaryjourney.com: did not receive HSTS header
 stationcharlie.com: did not receive HSTS header
 stationnementdenuit.ca: did not receive HSTS header
 status-sprueche.de: did not receive HSTS header
 statuschecks.net: could not connect to host
+stavros.ovh: could not connect to host
 stayokhotelscdc-mailing.com: could not connect to host
 stcomex.com: did not receive HSTS header
 steelbea.ms: could not connect to host
 stefanovski.io: could not connect to host
 stefanweiser.de: did not receive HSTS header
 stepbystep3d.com: did not receive HSTS header
 stephanierxo.com: did not receive HSTS header
 stephanos.me: could not connect to host
@@ -6580,31 +6562,32 @@ stephenandburns.com: did not receive HST
 stevechekblain.win: did not receive HSTS header
 stevensononthe.net: did not receive HSTS header
 stewartremodelingadvantage.com: could not connect to host
 stforex.com: did not receive HSTS header
 stfw.info: could not connect to host
 sticklerjs.org: could not connect to host
 stigroom.com: could not connect to host
 stillblackhat.id: could not connect to host
+stinkytrashhound.com: could not connect to host
 stirlingpoon.net: could not connect to host
 stirlingpoon.xyz: could not connect to host
 stkbn.com: did not receive HSTS header
+stlucasmuseum.org: could not connect to host
 stmbgr.com: could not connect to host
 stn.me.uk: did not receive HSTS header
 stockseyeserum.com: could not connect to host
 stocktrade.de: could not connect to host
 stoffe-monster.de: did not receive HSTS header
 stoick.me: could not connect to host
 stole-my.bike: could not connect to host
 stole-my.tv: could not connect to host
 stolkschepen.nl: did not receive HSTS header
 stonecutterscommunity.com: could not connect to host
 stopwoodfin.org: could not connect to host
-storbritannien.guide: did not receive HSTS header
 storecove.com: did not receive HSTS header
 storeden.com: did not receive HSTS header
 storefrontify.com: did not receive HSTS header
 storiesofhealth.org: could not connect to host
 storillo.com: did not receive HSTS header
 stormhub.org: could not connect to host
 stqry.com: did not receive HSTS header
 str0.at: did not receive HSTS header
@@ -6648,16 +6631,17 @@ sudo.li: did not receive HSTS header
 sudokian.io: did not receive HSTS header
 suian.or.jp: max-age too low: 86400
 suite73.org: could not connect to host
 sujoydhar.in: did not receive HSTS header
 summitbankofkc.com: did not receive HSTS header
 sumoatm.com: did not receive HSTS header
 sumoscout.de: could not connect to host
 suncountrymarine.com: did not receive HSTS header
+sunflyer.cn: did not receive HSTS header
 sunfulong.me: could not connect to host
 sunnyfruit.ru: could not connect to host
 sunshinepress.org: could not connect to host
 sunyanzi.tk: could not connect to host
 suos.io: could not connect to host
 supcro.com: could not connect to host
 super-erotica.ru: could not connect to host
 super-garciniaslim.com: could not connect to host
@@ -6670,25 +6654,25 @@ supercreepsvideo.com: could not connect 
 supereight.net: did not receive HSTS header
 superiorfloridavacation.com: did not receive HSTS header
 superklima.ro: did not receive HSTS header
 superlandnetwork.de: could not connect to host
 superlentes.com.br: did not receive HSTS header
 supersalescontest.nl: did not receive HSTS header
 superschnappchen.de: could not connect to host
 supersecurefancydomain.com: could not connect to host
-supersu.kr: did not receive HSTS header
 supertramp-dafonseca.com: did not receive HSTS header
 superuser.fi: could not connect to host
 superwally.org: could not connect to host
 suprlink.net: could not connect to host
 supweb.ovh: did not receive HSTS header
 surfeasy.com: did not receive HSTS header
 surfone-leucate.com: did not receive HSTS header
 susc.org.uk: did not receive HSTS header
+sussexwebdesigns.com: could not connect to host
 suzukikenichi.com: did not receive HSTS header
 sv.search.yahoo.com: did not receive HSTS header
 svatba-frantovi.cz: could not connect to host
 svenluijten.com: did not receive HSTS header
 svenskaservern.se: did not receive HSTS header
 svetjakonadlani.cz: did not receive HSTS header
 swdatlantico.pt: could not connect to host
 sweetair.com: did not receive HSTS header
@@ -6820,17 +6804,16 @@ techtraveller.com.au: did not receive HS
 tecnimotos.com: did not receive HSTS header
 tecnogaming.com: did not receive HSTS header
 tecture.de: did not receive HSTS header
 tedovo.com: did not receive HSTS header
 tedxkmitl.com: could not connect to host
 tefl.io: could not connect to host
 tegelsensanitaironline.nl: could not connect to host
 tehotuotanto.net: could not connect to host
-tekiro.com: could not connect to host
 teknologi.or.id: max-age too low: 0
 teknotes.co.uk: could not connect to host
 tekshrek.com: did not receive HSTS header
 tel-dithmarschen.de: did not receive HSTS header
 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
@@ -6842,17 +6825,16 @@ tempus-aquilae.de: could not connect to 
 tendertool.nl: could not connect to host
 tenerife-villas.com: did not receive HSTS header
 tengroup.com: did not receive HSTS header
 tenni.xyz: could not connect to host
 tensei-slime.com: did not receive HSTS header
 tensionup.com: could not connect to host
 tentins.com: could not connect to host
 teos.online: could not connect to host
-tequilazor.com: could not connect to host
 terminalvelocity.co.nz: could not connect to host
 terra.by: did not receive HSTS header
 terrax.berlin: could not connect to host
 terrax.info: could not connect to host
 testandroid.xyz: could not connect to host
 testbawks.com: could not connect to host
 teufelsystem.de: could not connect to host
 teulon.eu: could not connect to host
@@ -6914,17 +6896,16 @@ thehotfix.net: could not connect to host
 theinvisibletrailer.com: could not connect to host
 thejserver.de: could not connect to host
 thelapine.ca: did not receive HSTS header
 themadmechanic.net: could not connect to host
 themanufacturingmarketingagency.com: could not connect to host
 themarble.co: could not connect to host
 themathbehindthe.science: could not connect to host
 themathematician.uk: did not receive HSTS header
-themetacity.com: could not connect to host
 themicrocapital.com: could not connect to host
 themillerslive.com: could not connect to host
 themimitoof.fr: did not receive HSTS header
 themoderate.xyz: could not connect to host
 thenextstep.events: could not connect to host
 theodorejones.info: could not connect to host
 thepartywarehouse.co.uk: did not receive HSTS header
 thepcweb.tk: could not connect to host
@@ -6959,32 +6940,33 @@ thkb.net: could not connect to host
 thomas-ferney.fr: did not receive HSTS header
 thomas-gibertie.fr: did not receive HSTS header
 thomascloud.ddns.net: could not connect to host
 thomasharvey.me: did not receive HSTS header
 thomaskliszowski.fr: did not receive HSTS header
 thomasmeester.nl: did not receive HSTS header
 thomasnet.fr: could not connect to host
 thomasschweizer.net: could not connect to host
+thomspooren.nl: could not connect to host
 thorgames.nl: did not receive HSTS header
 thorncreek.net: did not receive HSTS header
 thriveapproach.co.uk: did not receive HSTS header
 throughthelookingglasslens.co.uk: could not connect to host
 thumbtack.com: did not receive HSTS header
 thundercampaign.com: could not connect to host
 ti.blog.br: could not connect to host
 tibbitshall.ca: did not receive HSTS header
 tickopa.co.uk: could not connect to host
 tickreport.com: did not receive HSTS header
 ticktock.today: did not receive HSTS header
 tictactux.de: could not connect to host
 tidmore.us: could not connect to host
 tie-online.org: did not receive HSTS header
 tiendschuurstraat.nl: could not connect to host
-tiensnet.com: could not connect to host
+tiensnet.com: did not receive HSTS header
 tiernanx.com: could not connect to host
 tierrarp.com: could not connect to host
 tightlineproductions.com: did not receive HSTS header
 tikutiku.pl: could not connect to host
 tildebot.com: could not connect to host
 tiliaze.be: could not connect to host
 tiliaze.biz: could not connect to host
 tiliaze.eu: did not receive HSTS header
@@ -7009,32 +6991,33 @@ timnash.co.uk: did not receive HSTS head
 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
 timvivian.ca: could not connect to host
 timwittenberg.com: could not connect to host
 tinchbear.xyz: could not connect to host
 tindewen.net: could not connect to host
+tinylan.com: could not connect to host
 tioat.net: could not connect to host
 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.host: did not receive HSTS header
 tjc.wiki: could not connect to host
-tjeckien.guide: did not receive HSTS header
 tjullrich.de: could not connect to host
 tkappertjedemetamorfose.nl: could not connect to host
 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: did not receive HSTS header
@@ -7067,31 +7050,32 @@ tollmanz.com: did not receive HSTS heade
 tolud.com: could not connect to host
 tomatenaufdenaugen.de: could not connect to host
 tomaz.eu: could not connect to host
 tomeara.net: could not connect to host
 tomevans.io: could not connect to host
 tomharris.tech: did not receive HSTS header
 tomlankhorst.nl: did not receive HSTS header
 tomli.me: could not connect to host
-tommsy.com: did not receive HSTS header
+tommsy.com: could not connect to host
 tommyads.com: could not connect to host
 tomphill.co.uk: could not connect to host
 tonyfantjr.com: could not connect to host
 toomanypillows.com: could not connect to host
 tooolroc.org: could not connect to host
 top-stage.net: could not connect to host
 topdeskdev.net: could not connect to host
 topmarine.se: could not connect to host
 topnewstoday.org: could not connect to host
 topnotchendings.com: could not connect to host
 toppik.com.br: did not receive HSTS header
 topshelfguild.com: could not connect to host
 torahanytime.com: did not receive HSTS header
 torchl.it: could not connect to host
+toretfaction.net: could not connect to host
 torlock.download: could not connect to host
 torproject.org.uk: could not connect to host
 torrentdownloads.bid: did not receive HSTS header
 torrentz.website: could not connect to host
 torsten-schmitz.net: could not connect to host
 tortugalife.de: could not connect to host
 torv.rocks: did not receive HSTS header
 tosecure.link: could not connect to host
@@ -7138,22 +7122,20 @@ transportal.sk: did not receive HSTS hea
 travality.ru: could not connect to host
 travel-kuban.ru: did not receive HSTS header
 travelinsightswriter.com: could not connect to host
 travelinsurance.co.nz: did not receive HSTS header
 treatprostatewithhifu.com: could not connect to host
 treeby.net: could not connect to host
 treino.blog.br: could not connect to host
 trell.co.in: did not receive HSTS header
-tremoureux.fr: did not receive HSTS header
 trendberry.ru: did not receive HSTS header
 trileg.net: could not connect to host
 trinityaffirmations.com: max-age too low: 0
 trinitycore.org: max-age too low: 2592000
-trior.net: could not connect to host
 tripdelta.com: did not receive HSTS header
 tripinsider.club: did not receive HSTS header
 trixies-wish.nz: could not connect to host
 troi.de: did not receive HSTS header
 trollme.me: could not connect to host
 trollscave.xyz: could not connect to host
 true.ink: did not receive HSTS header
 truebred-labradors.com: could not connect to host
@@ -7175,23 +7157,23 @@ tts.co.nz: did not receive HSTS header
 tuamoronline.com: could not connect to host
 tubbutec.de: did not receive HSTS header
 tubepro.de: did not receive HSTS header
 tubex.ga: could not connect to host
 tucker.wales: could not connect to host
 tunai.id: could not connect to host
 tunca.it: did not receive HSTS header
 tunebitfm.de: could not connect to host
-turkiet.guide: did not receive HSTS header
 turkrock.com: did not receive HSTS header
 turnik-67.ru: could not connect to host
 turniker.ru: could not connect to host
+turnsticks.com: could not connect to host
 turtlementors.com: could not connect to host
 tussengelegenwoningverkopen.nl: could not connect to host
-tuturulianda.com: did not receive HSTS header
+tuturulianda.com: could not connect to host
 tuvalie.com: could not connect to host
 tuxcall.de: could not connect to host
 tuxz.net: did not receive HSTS header
 tv.search.yahoo.com: could not connect to host
 tvtubeflix.com: did not receive HSTS header
 tvz-materijali.com: could not connect to host
 tw2-tools.ga: could not connect to host
 twarog.cc: could not connect to host
@@ -7229,29 +7211,30 @@ txf.pw: could not connect to host
 ty2u.com: did not receive HSTS header
 tyler.rs: could not connect to host
 tyleromeara.com: could not connect to host
 tylian.net: max-age too low: 0
 typeofweb.com: did not receive HSTS header
 typingrevolution.com: did not receive HSTS header
 tyrelius.com: did not receive HSTS header
 tyroproducts.eu: did not receive HSTS header
-tyskland.guide: did not receive HSTS header
 tzappa.net: could not connect to host
+tzwe.com: could not connect to host
 u-blox.com: max-age too low: 0
 u.nu: could not connect to host
 ua.search.yahoo.com: did not receive HSTS header
 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
 ublox.com: did not receive HSTS header
 uega.net: did not receive HSTS header
 ueu.me: could not connect to host
 ufgaming.com: did not receive HSTS header
+ufindme.at: did not receive HSTS header
 ufotable.uk: could not connect to host
 ugo.ninja: could not connect to host
 ugosadventures.com: could not connect to host
 uhm.io: could not connect to host
 ukas.com: did not receive HSTS header
 ukdropshipment.co.uk: could not connect to host
 ukdropshipment.com: could not connect to host
 ukk.dk: did not receive HSTS header
@@ -7259,17 +7242,17 @@ ukrgadget.com: could not connect to host
 ulabox.cat: did not receive HSTS header
 ulabox.es: did not receive HSTS header
 ulmo.dk: could not connect to host
 ulrik.moe: could not connect to host
 ultimate-garcinia-plus.com: could not connect to host
 ultimate-glow-skin.com: could not connect to host
 ultimate-memoryplus.com: could not connect to host
 ultimate-neuroplus.com: could not connect to host
-ultros.io: could not connect to host
+ultros.io: did not receive HSTS header
 umaimise.info: could not connect to host
 umgardi.ca: could not connect to host
 umidev.com: did not receive HSTS header
 umie.cc: did not receive HSTS header
 umwandeln-online.de: did not receive HSTS header
 unart.info: could not connect to host
 unbanthe.net: could not connect to host
 unblockat.tk: could not connect to host
@@ -7290,18 +7273,17 @@ unblockmy.tech: did not receive HSTS hea
 unblockmy.xyz: did not receive HSTS header
 unblockmyproxy.site: could not connect to host
 unblockthe.site: did not receive HSTS header
 unblockthe.top: could not connect to host
 unccdesign.club: could not connect to host
 unclegen.xyz: could not connect to host
 undeadbrains.de: could not connect to host
 under30stravelinsurance.com.au: did not receive HSTS header
-unfiltered.nyc: did not receive HSTS header
-ungern.guide: did not receive HSTS header
+unfiltered.nyc: could not connect to host
 unhu.fr: could not connect to host
 uni-games.com: could not connect to host
 unicooo.com: did not receive HSTS header
 uniformecomgas.com.br: could not connect to host
 unikitty-on-tour.com: could not connect to host
 unionstationapp.com: could not connect to host
 unison.com: did not receive HSTS header
 unisyssecurity.com: did not receive HSTS header
@@ -7411,16 +7393,17 @@ vechkasov.ru: did not receive HSTS heade
 vedatkamer.com: did not receive HSTS header
 vega.dyndns.info: could not connect to host
 veganosonline.com: did not receive HSTS header
 veggiefasting.com: could not connect to host
 veggiesbourg.fr: did not receive HSTS header
 vegis.ro: did not receive HSTS header
 vehent.org: did not receive HSTS header
 vehicleuplift.co.uk: did not receive HSTS header
+velasense.com: could not connect to host
 vemokin.net: did not receive HSTS header
 venicecomputerrepair.com: did not receive HSTS header
 venixplays-stream.ml: could not connect to host
 vennet.fr: did not receive HSTS header
 ventizo.com: did not receive HSTS header
 venturepro.com: did not receive HSTS header
 ventzke.com: did not receive HSTS header
 venzocrm.com: did not receive HSTS header
@@ -7434,17 +7417,16 @@ vetdnacenter.com: did not receive HSTS h
 veterinaire-cazeres-foucault.fr: could not connect to host
 vetmgmt.com: could not connect to host
 veto.fish: could not connect to host
 vfree.org: could not connect to host
 vglimg.com: could not connect to host
 vh.net: could not connect to host
 vhost.co.id: could not connect to host
 viadeux.com: could not connect to host
-vialorran.com: could not connect to host
 viasinc.com: did not receive HSTS header
 vicianovi.cz: could not connect to host
 victorenxovais.com.br: did not receive HSTS header
 vidbuchanan.co.uk: did not receive HSTS header
 viddiaz.com: did not receive HSTS header
 videnskabsklubben.dk: did not receive HSTS header
 videomuz.com: did not receive HSTS header
 videotogel.net: did not receive HSTS header
@@ -7493,17 +7475,16 @@ vizeat.com: did not receive HSTS header
 vizional.com: max-age too low: 0
 vjeff.com: could not connect to host
 vlastimilburian.cz: did not receive HSTS header
 vlora.city: could not connect to host
 vlvvl.com: did not receive HSTS header
 vm0.eu: did not receive HSTS header
 vmgirls.com: could not connect to host
 vmrdev.com: could not connect to host
-vmug.pl: could not connect to host
 voceinveste.com: did not receive HSTS header
 vodpay.com: could not connect to host
 vodpay.net: could not connect to host
 vodpay.org: could not connect to host
 voicesuk.co.uk: did not receive HSTS header
 void-zero.com: max-age too low: 0
 voidpay.com: could not connect to host
 voidpay.net: could not connect to host
@@ -7562,16 +7543,18 @@ wallabag.org: did not receive HSTS heade
 wallet.google.com: did not receive HSTS header (error ignored - included regardless)
 wallsblog.dk: could not connect to host
 walnutgaming.co.uk: could not connect to host
 walterlynnmosley.com: did not receive HSTS header
 wan.pp.ua: could not connect to host
 wanban.io: could not connect to host
 wangjun.me: did not receive HSTS header
 wangkezun.com: could not connect to host
+wangqiliang.cn: did not receive HSTS header
+wangqiliang.org: did not receive HSTS header
 wangqiliang.xn--fiqs8s: could not connect to host
 wangzuan168.cc: did not receive HSTS header
 wanybug.cn: could not connect to host
 wapjt.cn: could not connect to host
 wapt.fr: did not receive HSTS header
 warandpeace.xyz: could not connect to host
 wardsegers.be: did not receive HSTS header
 warehost.de: did not receive HSTS header
@@ -7599,16 +7582,17 @@ web-insider.net: could not connect to ho
 web-redacteuren.nl: did not receive HSTS header
 web-vision.de: did not receive HSTS header
 web4all.fr: did not receive HSTS header
 web4pro.fr: could not connect to host
 webambacht.nl: could not connect to host
 webandwords.com.au: could not connect to host
 webapps.directory: could not connect to host
 webassadors.com: could not connect to host
+webbx.se: did not receive HSTS header
 webchat.domains: did not receive HSTS header
 webdeflect.com: could not connect to host
 webdesign-kronberg.de: did not receive HSTS header
 webdev.mobi: could not connect to host
 webeconomia.it: did not receive HSTS header
 webelement.sk: did not receive HSTS header
 weberjulia.com: could not connect to host
 webfronten.dk: did not receive HSTS header
@@ -7634,16 +7618,17 @@ webtechgadgetry.com: did not receive HST
 webtiles.co.uk: could not connect to host
 webtobesocial.de: could not connect to host
 webuni.hu: did not receive HSTS header
 webwork.pw: could not connect to host
 webypass.xyz: could not connect to host
 wecanfindit.co.za: could not connect to host
 weddingenvelopes.co.uk: did not receive HSTS header
 weddingibiza.nl: could not connect to host
+weed.ren: could not connect to host
 weekly.fyi: could not connect to host
 wegenaer.nl: could not connect to host
 weiji.ga: did not receive HSTS header
 welkers.org: could not connect to host
 wellastore.ru: did not receive HSTS header
 wellcomp.com.br: did not receive HSTS header
 welpy.com: could not connect to host
 weltentreff.com: could not connect to host
@@ -7716,17 +7701,16 @@ wishcert.com: could not connect to host
 withgoogle.com: did not receive HSTS header (error ignored - included regardless)
 withmy.beer: could not connect to host
 withustrading.com: could not connect to host
 withyoutube.com: did not receive HSTS header (error ignored - included regardless)
 wittcher.com: could not connect to host
 wittydonut.com: could not connect to host
 witzemaschine.com: max-age too low: 0
 wiz.biz: could not connect to host
-wje-online.de: could not connect to host
 wlzhiyin.cn: could not connect to host
 wmcuk.net: could not connect to host
 wmfinanz.com: could not connect to host
 wnmm.nl: could not connect to host
 wobblylang.org: could not connect to host
 wochenentwicklung.com: did not receive HSTS header
 wodice.com: could not connect to host
 wohnungsbau-ludwigsburg.de: did not receive HSTS header
@@ -7831,17 +7815,17 @@ xavierbarroso.com: could not connect to 
 xbind.io: could not connect to host
 xcoop.me: could not connect to host
 xdd.io: could not connect to host
 xecure.zone: did not receive HSTS header
 xehoivn.vn: did not receive HSTS header
 xellos.ga: could not connect to host
 xellos.ml: could not connect to host
 xenesisziarovky.sk: could not connect to host
-xett.com: did not receive HSTS header
+xett.com: could not connect to host
 xf-liam.com: did not receive HSTS header
 xfive.de: could not connect to host
 xgusto.com: did not receive HSTS header
 xiaody.me: could not connect to host
 xiaolvmu.com: could not connect to host
 xiaolvmu.me: could not connect to host
 xiaoxiao.im: could not connect to host
 xiazhanjian.com: could not connect to host
@@ -7938,32 +7922,32 @@ yenniferallulli.com: could not connect t
 yenniferallulli.de: could not connect to host
 yenniferallulli.es: did not receive HSTS header
 yenniferallulli.moda: could not connect to host
 yenniferallulli.nl: could not connect to host
 yesdevnull.net: did not receive HSTS header
 yestees.com: did not receive HSTS header
 yetcore.io: could not connect to host
 yetii.net: could not connect to host
-yhong.me: could not connect to host
+yhong.me: did not receive HSTS header
 yhori.xyz: could not connect to host
 yhrd.org: did not receive HSTS header
 yikzu.cn: could not connect to host
 yin.roma.it: did not receive HSTS header
 yingsuo.ltd: could not connect to host
-yingyj.com: could not connect to host
+yingyj.com: did not receive HSTS header
 yinhe12.net: did not receive HSTS header
 yippie.nl: could not connect to host
 yizhu.com: could not connect to host
 yjsoft.me: did not receive HSTS header
 ynode.co: did not receive HSTS header
 ynsn.nl: did not receive HSTS header
 yntongji.com: could not connect to host
 yob.vn: could not connect to host
-yohanesmario.com: did not receive HSTS header
+yohanesmario.com: could not connect to host
 yoiyado.info: could not connect to host
 yokeepo.com: max-age too low: 0
 yoloboatrentals.com: did not receive HSTS header
 yoloprod.fr: did not receive HSTS header
 yoloseo.com: could not connect to host
 yomepre.com: could not connect to host
 yoru.me: did not receive HSTS header
 youcontrol.ru: could not connect to host
@@ -8007,53 +7991,52 @@ zakoncontrol.com: could not connect to h
 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
 zap.yt: did not receive HSTS header
 zarooba.com: could not connect to host
 zary.me: could not connect to host
 zavca.com: did not receive HSTS header
-zavetaji.lv: could not connect to host
 zbigniewgalucki.eu: did not receive HSTS header
 zcon.nl: could not connect to host
 zdravotnickasluzba.eu: could not connect to host
 zebrababy.cn: did not receive HSTS header
 zeedroom.be: did not receive HSTS header
 zefiris.org: did not receive HSTS header
 zefu.ca: could not connect to host
 zehntner.ch: could not connect to host
 zelfmoord.ga: could not connect to host
 zelfstandigemakelaars.net: could not connect to host
 zenghx.tk: could not connect to host
 zenhaiku.com: did not receive HSTS header
+zenlogic.com: could not connect to host
 zenpayroll.com: did not receive HSTS header
 zentraler-kreditausschuss.de: did not receive HSTS header
 zentralwolke.de: did not receive HSTS header
 zera.com.au: could not connect to host
 zerekin.net: did not receive HSTS header
 zeroday.sk: did not receive HSTS header
 zerofox.gq: could not connect to host
 zeroml.ml: could not connect to host
 zerudi.com: did not receive HSTS header
 zett4.me: could not connect to host
 zeytin.pro: could not connect to host
 zh.search.yahoo.com: did not receive HSTS header
 zh1.li: could not connect to host
 zhang.wtf: could not connect to host
 zhangruilin.com: did not receive HSTS header
-zhaochen.xyz: did not receive HSTS header
 zhaojin97.cn: did not receive HSTS header
 zhendingresources.com: did not receive HSTS header
 zhh.in: could not connect to host
 zhihua-lai.com: did not receive HSTS header
 zhuji.com.cn: could not connect to host
 zi0r.com: did not receive HSTS header
 zian.online: could not connect to host
-zicklam.com: did not receive HSTS header
+zicklam.com: could not connect to host
 zigcore.com.br: could not connect to host
 zihao.me: did not receive HSTS header
 zinc-x.com: did not receive HSTS header
 zinenapse.info: could not connect to host
 zippy-download.com: did not receive HSTS header
 zippy-download.de: did not receive HSTS header
 zirtue.io: did not receive HSTS header
 zixo.sk: could not connect to host
@@ -8085,13 +8068,14 @@ zoznamrealit.sk: did not receive HSTS he
 zqhong.com: could not connect to host
 zqjs.tk: could not connect to host
 ztan.tk: could not connect to host
 ztcaoll222.cn: did not receive HSTS header
 zubel.it: did not receive HSTS header
 zuram.net: could not connect to host
 zvncloud.com: did not receive HSTS header
 zwollemagazine.nl: did not receive HSTS header
+zx7r.de: did not receive HSTS header
 zyf.pw: could not connect to host
 zymbit.com: did not receive HSTS header
 zync.ca: did not receive HSTS header
 zypgr.com: did not receive HSTS header
 zyso.org: could not connect to host
--- 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(1515950003821000);
+const PRTime gPreloadListExpirationTime = INT64_C(1516037120985000);
 %%
 0-1.party, 1
 0.me.uk, 1
 00001.am, 1
 00002.am, 1
 0005pay.com, 1
 0010100.net, 1
 007-preisvergleich.de, 1
@@ -114,17 +114,16 @@ 13826145000.com, 1
 1453914078.rsc.cdn77.org, 1
 1464424382.rsc.cdn77.org, 1
 14it.de, 1
 14x3.de, 1
 15-10.com, 1
 1600esplanade.com, 1
 16164f.com, 1
 1644091933.rsc.cdn77.org, 1
-173vpn.cn, 1
 174.net.nz, 1
 1750studios.com, 0
 17hats.com, 1
 1844329061.rsc.cdn77.org, 1
 18888msc.com, 1
 18f.gov, 1
 18f.gsa.gov, 0
 1972969867.rsc.cdn77.org, 1
@@ -373,16 +372,17 @@ 8003pay.com, 1
 8522.com, 1
 8522club.com, 1
 8522cn.com, 1
 8522top.com, 1
 8560.be, 1
 86metro.ru, 1
 87577.com, 1
 8833445.com, 1
+8887999.com, 0
 8888av.co, 1
 888azino.com, 1
 888msc.vip, 1
 888sport.dk, 1
 888sport.it, 1
 88laohu.cc, 1
 8ack.de, 1
 8ackprotect.com, 1
@@ -449,17 +449,16 @@ abc-rz.de, 1
 abc.li, 1
 abcdef.be, 1
 abdullah.pw, 1
 abe-elektro.de, 1
 abe.cloud, 0
 abeestrada.com, 0
 abenteuer-ahnenforschung.de, 1
 abeontech.com, 1
-aberdeenalmeras.com, 1
 aberdeenjudo.co.uk, 1
 abeus.com, 1
 abhisharma.me, 1
 abi-2017.tk, 1
 abi-fvs.de, 1
 abiapp.net, 1
 abigisp.com, 1
 abilitycaresoftware.com, 1
@@ -582,17 +581,16 @@ acme.beer, 1
 acmexyz123.info, 1
 acmle.com, 0
 acnpacific.com, 1
 aconnor.xyz, 1
 acourse.io, 1
 acoustique-tardy.com, 1
 acperu.ch, 1
 acpinformatique.fr, 1
-acritelli.com, 0
 acrossgw.com, 1
 acrylicwifi.com, 1
 acs-chantal.com, 1
 acsc.gov.au, 1
 acsemb.org, 1
 acsihostingsolutions.com, 1
 acsports.ca, 1
 actgruppe.de, 1
@@ -672,17 +670,17 @@ adiponectinsupplement.info, 1
 adiponectinsupplement.net, 1
 adjagu.org, 1
 adlershop.ch, 1
 adlerweb.info, 1
 adme.co.il, 1
 admin.fedoraproject.org, 1
 admin.google.com, 1
 admin.stg.fedoraproject.org, 1
-adminforge.de, 0
+adminforge.de, 1
 administratorserwera.pl, 1
 admino.cz, 1
 adminton.eu, 1
 admody.com, 1
 admongo.gov, 1
 adnot.am, 1
 adnseguros.es, 1
 adoal.net, 1
@@ -764,17 +762,16 @@ aerelon.de, 0
 aerolog.co, 1
 aertel.ie, 1
 aessencia.com.br, 1
 aestheticdr.org, 1
 aesthetics-blog.com, 1
 aestore.by, 1
 aesym.de, 1
 aetherc0r3.eu, 1
-aevpn.net, 1
 aevpn.org, 1
 aextron.com, 1
 aextron.de, 1
 aextron.org, 1
 af-internet.nl, 1
 afavre.io, 1
 afb24.de, 1
 afbeelding.im, 1
@@ -823,17 +820,16 @@ agenda21senden.de, 1
 agent6.com.au, 1
 agfmedia.com, 1
 aggr.pw, 1
 agilebits.com, 1
 agilebits.net, 0
 agileui.com, 1
 agiley.se, 1
 aging.gov, 1
-agonswim.com, 1
 agotnes.com, 1
 agowa.eu, 1
 agowa338.de, 1
 agrarking.com, 1
 agrarking.de, 1
 agrarshop4u.de, 1
 agreor.com, 1
 agrias.com.br, 1
@@ -966,16 +962,17 @@ alanhuang.name, 1
 alaninkenya.org, 1
 alaricfavier.eu, 0
 alarmcomplete.co.uk, 1
 alasta.info, 1
 alastairs-place.net, 1
 alauda-home.de, 1
 alaxyjewellers.co.za, 1
 alb-flirt.de, 1
+albanien.guide, 1
 albersdruck.de, 1
 albertathome.org, 1
 albion2.org, 1
 alboweb.nl, 1
 albuic.tk, 1
 alca31.com, 1
 alcatelonetouch.us, 1
 alcnutrition.com, 1
@@ -1111,17 +1108,16 @@ allsearch.io, 1
 allshousedesigns.com, 1
 alltheducks.com, 1
 allthethings.co.nz, 1
 allthings.me, 1
 allthingsblogging.com, 1
 allthingsfpl.com, 1
 allthingssquared.com, 1
 allthingswild.co.uk, 1
-alltubedownload.net, 1
 alluvion.studio, 1
 almatinki.com, 1
 almavios.com, 1
 almstrom.org, 1
 alnitech.com, 0
 aloalabs.com, 1
 alocato.com, 1
 alpca.org, 1
@@ -1337,17 +1333,16 @@ androidtelefony.cz, 1
 androidzone.me, 1
 androled.fr, 1
 andromedacenter.com, 1
 andruvision.cz, 1
 andsat.org, 1
 andschwa.com, 1
 anduril.de, 1
 anduril.eu, 1
-andycrockett.io, 1
 andymoore.info, 1
 andyuk.org, 1
 andzia.art.pl, 1
 anecuni-club.com, 1
 anecuni-rec.com, 1
 anedot-sandbox.com, 1
 anedot.com, 1
 anedot.space, 1
@@ -1374,16 +1369,17 @@ animaemundi.be, 1
 animal-liberation.com, 1
 animal-rights.com, 1
 animalnet.de, 0
 animalstropic.com, 1
 animationsmusicales.ch, 1
 anime.my, 0
 anime1.me, 1
 anime1.top, 1
+anime1video.tk, 1
 animeai.com, 1
 animefluxxx.com, 1
 animorphsfanforum.com, 1
 anipassion.com, 1
 anisekai.com, 1
 anita-mukorom.hu, 1
 anitaalbersen.nl, 1
 anitube-nocookie.ch, 1
@@ -1701,17 +1697,16 @@ arlen.tv, 1
 arlenarmageddon.com, 1
 arlet.click, 1
 armadaquadrat.com, 1
 armandsdiscount.com, 1
 armarinhovirtual.com.br, 1
 armazemdaminiatura.com.br, 1
 armenians.online, 1
 armil.it, 1
-arminpech.de, 1
 armleads.com, 1
 armstrongsengineering.com, 1
 army24.cz, 1
 armyofbane.com, 1
 armyprodej.cz, 1
 arnaudb.net, 1
 arnaudfeld.de, 1
 arnaudminable.net, 1
@@ -1888,17 +1883,16 @@ atchleylab.org, 1
 atds.ch, 1
 atease-salon.jp, 1
 ateli.com, 1
 atelier-coiffure.ch, 1
 atelier-naruby.cz, 1
 atelier-viennois-cannes.fr, 1
 atelieraphelion.com, 1
 atelierdefrancais.ch, 1
-atelierdesflammesnoires.fr, 1
 ateliernaruby.cz, 1
 ateliernihongo.ch, 1
 ateliersantgervasi.com, 1
 atencionbimbo.com, 1
 atg.soy, 1
 atgoetschel.ch, 1
 atgseed.co.uk, 1
 atgseed.uk, 1
@@ -2136,17 +2130,16 @@ azlk-team.ru, 1
 azlo.com, 1
 azort.com, 1
 azrazalea.net, 1
 azso.pro, 1
 aztrix.me, 1
 azu-l.com, 1
 azu-l.jp, 1
 azun.pl, 1
-azuxul.fr, 1
 azzag.co.uk, 1
 azzorti.com, 1
 b-b-law.com, 1
 b-boom.nl, 1
 b-cyclesshop.ch, 1
 b-pi.duckdns.org, 1
 b-root-force.de, 1
 b-services.net, 1
@@ -2189,16 +2182,17 @@ backscattering.de, 1
 backschues.com, 1
 backsideverbier.ch, 1
 backterris.com, 1
 backyardbbqbash.com, 1
 bacon-monitoring.org, 1
 bacontreeconsulting.com, 1
 bacula.jp, 1
 bad.horse, 1
+bad.pet, 1
 badam.co, 1
 badbee.cc, 1
 badf00d.de, 1
 badges.fedoraproject.org, 1
 badges.stg.fedoraproject.org, 1
 badhusky.com, 1
 badoo.com, 1
 badrequest.me, 1
@@ -2391,17 +2385,16 @@ bazos.cz, 1
 bazos.sk, 1
 bazziergraphik.com, 1
 bbb1991.me, 1
 bbdos.ru, 1
 bbgeschenke.ch, 1
 bbimarketing.com, 1
 bbka.org.uk, 1
 bbkworldwide.jp, 1
-bblove.me, 1
 bbuio.com, 1
 bbw-wrestling.com, 1
 bbw.dating, 1
 bbwcs.co.uk, 1
 bbwf.de, 1
 bbwfacesitting.us, 1
 bbwteens.org, 1
 bc-bd.org, 1
@@ -2469,16 +2462,17 @@ beekbier.nl, 1
 beekeeper.blog, 1
 beekeeper.clothing, 1
 beekeeper.supplies, 1
 beekeeper.supply, 1
 beekeeper.tools, 1
 beekeeping.clothing, 1
 beekeeping.tools, 1
 beeksnetwork.nl, 1
+beelen.fr, 1
 beepan.com, 0
 beercandle.com, 1
 beergazetteer.com, 1
 beerians.com, 1
 beerradar.no, 1
 beerradar.party, 1
 beersandco.ch, 1
 beersconf.com, 1
@@ -2511,16 +2505,17 @@ belarto.nl, 1
 belarto.pl, 1
 belastingdienst-in-beeld.nl, 1
 belastingmiddeling.nl, 1
 belcompany.nl, 0
 belfastlocks.com, 1
 belfasttechservices.co.uk, 1
 belge.rs, 1
 belgers.com, 1
+belgien.guide, 1
 belhopro.be, 1
 belics.com, 1
 belien-tweedehandswagens.be, 1
 believablebook.com, 0
 bellavistaoutdoor.com, 1
 belloy.ch, 1
 belloy.net, 1
 belly-button-piercings.com, 1
@@ -2569,23 +2564,21 @@ benmatthews.com.au, 1
 benmillett.us, 0
 benni1.eu, 1
 bennink.me, 1
 benno.frl, 1
 bennythink.com, 1
 benschnarr.com, 1
 benscobie.com, 1
 bentertain.de, 1
-bentley.link, 1
 bentrask.com, 1
 benzou-space.com, 1
 beoordelingen.be, 1
 bep362.vn, 1
 beranovi.com, 1
-berasavocate.com, 1
 beraten-entwickeln-steuern.de, 1
 berdu.id, 1
 berduri.com, 1
 bergenhave.nl, 1
 bergland-seefeld.at, 1
 bergstoneware.com, 1
 berlin-flirt.de, 1
 berlin-kohlefrei.de, 1
@@ -2607,26 +2600,26 @@ bernhardluginbuehl.com, 1
 bernieware.de, 1
 berr.yt, 1
 berra.se, 1
 berry.cat, 1
 bersierservices.ch, 1
 bersotavocats.fr, 1
 berst.cz, 1
 berthabailey.com, 1
+berthelier.me, 1
 bertholdsson.com, 1
 bertoliniodontoiatria.it, 1
 bertrand.bio, 1
 beryl.net, 1
 bespokestraps.com, 1
 best-wedding-quotes.com, 1
 best10websitebuilders.com, 1
 bestbestbitcoin.com, 1
 bestbrakes.com, 1
-bestbridal.top, 1
 bestbyte.com.br, 1
 bestellipticalmachinereview.info, 1
 bestessaycheap.com, 1
 bestessayhelp.com, 1
 bestfitnesswatchreview.info, 1
 bestgiftever.ca, 1
 bestgifts4you.com, 1
 bestlashesandbrows.hu, 1
@@ -3074,17 +3067,16 @@ bloodsports.org, 1
 bloomnbud.com, 1
 bls-fiduciaire.be, 1
 bltc.co.uk, 1
 bltc.com, 1
 bltc.net, 1
 bltc.org, 1
 bltc.org.uk, 1
 blubberladen.de, 1
-blue-labs.org, 1
 blue-leaf81.net, 1
 blue42.net, 1
 bluebill.net, 1
 bluecards.eu, 1
 bluechilli.com, 1
 bluecon.ninja, 1
 blued.moe, 1
 blueflare.org, 1
@@ -3354,17 +3346,16 @@ brashear.me, 1
 brasilbombas.com.br, 1
 brasserie-mino.fr, 1
 brasspipedreams.org, 1
 bratislava-airport-taxi.com, 1
 bratteng.me, 0
 bratvanov.com, 1
 brauingenieur.de, 1
 braunsteinpc.com, 1
-brava.bg, 1
 brave-foods.ch, 1
 brave-foods.com, 1
 brave.com, 1
 braviskindenjeugd.nl, 1
 bravisziekenhuis.nl, 1
 brazilian.dating, 1
 brazillens.com, 1
 brb.city, 1
@@ -3507,16 +3498,17 @@ btserv.de, 1
 btsoft.eu, 1
 btsow.com, 1
 btxiaobai.com, 1
 bubba.cc, 1
 bubblegumblog.com, 1
 bubblespetspa.com, 1
 bubhub.io, 1
 buch-angucken.de, 1
+buck.com, 1
 buckmulligans.com, 1
 buckypaper.com, 1
 budaev-shop.ru, 1
 buddhistische-weisheiten.org, 1
 buddlycrafts.com, 1
 buderus-family.be, 1
 budger.nl, 1
 budgetalk.com, 1
@@ -3552,16 +3544,17 @@ buildkite.com, 1
 builtwith.com, 1
 buka.jp, 1
 bukkenfan.jp, 1
 bul3seas.eu, 1
 bulario.com, 1
 bulbcompare.com, 1
 bulbgenie.com, 1
 buldogueingles.com.br, 1
+bulgarien.guide, 1
 bulkcandystore.com, 1
 bulkingtime.com, 1
 bulktrade.de, 1
 bulkwholesalesweets.co.uk, 1
 bullbits.com, 1
 bulldog-hosting.de, 1
 bulledair-savons.ch, 1
 bullettags.com, 1
@@ -3719,17 +3712,16 @@ cackette.com, 1
 cadetsge.ch, 1
 cadmail.nl, 1
 cadman.pw, 1
 cadooz.com, 1
 cadorama.fr, 1
 cadoth.net, 1
 cadusilva.com, 1
 caerostris.com, 1
-caesarkabalan.com, 1
 cafechesscourt.com, 1
 cafefresco.pe, 1
 cafelandia.net, 1
 cafeobscura.nl, 1
 caferagazzi.de, 1
 caffeinatedcode.com, 1
 cainhosting.com, 0
 caipai.fm, 1
@@ -4014,16 +4006,17 @@ cavalierkingcharlesspaniel.com.br, 1
 cave-reynard.ch, 1
 cavern.tv, 1
 cavzodiaco.com.br, 1
 caylercapital.com, 1
 cazes.info, 1
 cbamo.org, 1
 cbbank.com, 1
 cbd.supply, 1
+cbdev.de, 1
 cbecrft.net, 1
 cbintermountainrealty.com, 1
 cbr-xml-daily.ru, 1
 cbw.sh, 1
 cc-brantomois.fr, 1
 ccac.gov, 1
 ccayearbook.com, 1
 ccgn.co, 1
@@ -4198,17 +4191,16 @@ channellife.com.au, 1
 chanoyu-gakkai.jp, 1
 chantalguggenbuhl.ch, 1
 chanz.com, 1
 chaos-inc.de, 1
 chaos.run, 1
 chaoschemnitz.de, 1
 chaosdorf.de, 1
 chaosfield.at, 1
-chaoslab.org, 1
 chaospott.de, 1
 chaoticlaw.com, 1
 chaouby.com, 1
 chaplain.co, 1
 charbonnel.eu, 1
 charcoalvenice.com, 1
 charge.co, 1
 chargejuice.com, 1
@@ -4224,16 +4216,17 @@ charlierogers.co.uk, 1
 charlierogers.com, 1
 charlotte-touati.ch, 1
 charlottesvillegolfcommunities.com, 1
 charmander.me, 1
 charmingsaul.com, 1
 charmyadesara.com, 1
 charonsecurity.com, 1
 charr.xyz, 1
+charta-digitale-vernetzung.de, 1
 charteroak.org, 1
 chartsy.de, 1
 charuru.moe, 1
 chasafilli.ch, 1
 chaseganey.com, 1
 chat-libera.org, 1
 chat-senza-registrazione.net, 1
 chat.cz, 1
@@ -4416,16 +4409,17 @@ christiangehring.org, 1
 christianhoffmann.info, 1
 christianhospitaltank.org, 1
 christianliebel.com, 1
 christianpusch.de, 1
 christians.dating, 1
 christiansayswords.com, 1
 christianscholz.de, 1
 christianscholz.eu, 1
+christiesantiques.com, 1
 christina-quast.de, 1
 christmascard.be, 1
 christoph-conrads.name, 1
 christophebarbezat.ch, 1
 christopherburg.com, 1
 christopherl.com, 1
 christopherpritchard.co.uk, 1
 christophertruncer.com, 1
@@ -4792,17 +4786,16 @@ codepoints.net, 1
 codepref.com, 1
 codepult.com, 1
 codera.co.uk, 1
 codercy.com, 1
 codereview.appspot.com, 0
 codereview.chromium.org, 0
 coderhangout.com, 1
 coderme.com, 1
-codes.pk, 1
 codesplain.in, 1
 codesport.io, 1
 codestudies.net, 1
 codesyncro.com, 1
 codeux.com, 1
 codeux.info, 1
 codeux.net, 1
 codeversetech.com, 1
@@ -5224,16 +5217,17 @@ cppan.org, 1
 cpqcol.gov.co, 1
 cprnearme.com, 1
 cptoon.com, 1
 cpvmatch.eu, 1
 cpy.pt, 1
 cqchome.com, 1
 cqn.ch, 1
 cracker.in.th, 1
+crackingking.com, 0
 crackle.io, 1
 crackorsquad.in, 1
 crackpfer.de, 1
 crackstation.net, 1
 cradlepointecm.com, 1
 craftandbuild.de, 1
 craftcms.com, 0
 craftcommerce.com, 1
@@ -5310,17 +5304,16 @@ crepererum.net, 1
 crescent.gr.jp, 1
 crestasantos.com, 1
 cretdupuy.com, 1
 creusalp.ch, 1
 crge.eu, 1
 criadorespet.com.br, 1
 criminal-attorney.ru, 1
 criminal.enterprises, 1
-crimson.no, 1
 crisp.chat, 1
 crisp.im, 1
 cristarta.com, 1
 cristianhares.com, 1
 critcola.com, 1
 critical.today, 0
 criticalaim.com, 1
 criticalsurveys.co.uk, 1
@@ -5694,25 +5687,27 @@ danielkratz.com, 1
 danielmarquard.com, 1
 danielmoch.com, 1
 danielmostertman.com, 1
 danielmostertman.nl, 1
 danielrozenberg.com, 1
 danielsblog.org, 1
 danielstach.cz, 1
 danielthompson.info, 1
+danieltollot.de, 1
 danielvoogsgerd.nl, 1
 danielzuzevich.com, 1
 danilapisarev.com, 1
 danjesensky.com, 1
 dank.ninja, 1
 dankim.de, 0
 dankredues.com, 1
 danla.nl, 1
 danmaby.com, 1
+danmark.guide, 1
 danminkevitch.com, 1
 danny.fm, 1
 dannyrohde.de, 1
 danonsecurity.com, 1
 danotage.tv, 1
 danoz.net, 1
 danpiel.net, 0
 danscomp.com, 1
@@ -6179,16 +6174,17 @@ dev-talk.net, 1
 dev-tek.de, 1
 devalps.eu, 1
 devb.nl, 1
 devct.cz, 1
 devdesco.com, 1
 devdom.io, 1
 devdoodle.net, 1
 devel.cz, 1
+develop.cool, 1
 developer.mydigipass.com, 0
 developerfair.com, 1
 developermail.io, 1
 developers.facebook.com, 0
 developfx.com, 1
 developmentaid.org, 1
 developmentsites.melbourne, 1
 develux.com, 1
@@ -6285,16 +6281,18 @@ dicionariodenomesproprios.com.br, 1
 dicionariodesimbolos.com.br, 1
 dicionarioetimologico.com.br, 1
 dicionariopopular.com, 1
 dick.red, 1
 dickieslife.com, 1
 dicoding.com, 1
 didacte.com, 1
 didche.net, 1
+diddens.de, 1
+didierlaumen.be, 1
 die-besten-weisheiten.de, 1
 die-blahuts.de, 1
 die-gruenen-teufel.de, 1
 die-partei-reutlingen.de, 1
 die-sinlosen.de, 1
 die-speisekammer-reutlingen.de, 1
 dieb.photo, 1
 diedrich.co, 0
@@ -6426,27 +6424,28 @@ disc.uz, 1
 discha.net, 1
 disciples.io, 1
 discipul.nl, 1
 disclosure.io, 1
 disco-crazy-world.de, 1
 disconformity.net, 1
 discord-chan.net, 1
 discordapp.com, 1
-discotek.club, 1
+discotek.club, 0
 discountmetaux.fr, 1
 discover-mercure.com, 1
 discoverhealthage.com, 0
 discoverrsv.com, 1
 discoveryballoon.org, 1
 discoveryottawa.ca, 1
 discoveryrom.org, 1
 disinclined.org, 1
 disinisharing.com, 1
 diskbit.com, 1
+disking.co.uk, 1
 disorderboutique.com, 1
 disposable.link, 1
 disrupters.ch, 1
 dissectcyber.com, 1
 dissertationhelp.com, 1
 dissidence.ovh, 1
 dist.torproject.org, 0
 distinctivephotography.com.au, 1
@@ -6615,16 +6614,17 @@ domains.google.com, 1
 domainsilk.com, 1
 domainstaff.com, 1
 domaxpoker.com, 1
 domenic.me, 1
 domesticcleaners.co.uk, 1
 domfee.com, 1
 domhaase.me, 1
 dominationgame.co.uk, 1
+dominikanskarepubliken.guide, 1
 dominioanimal.com.br, 1
 dominoknihy.cz, 1
 dominomatrix.com, 1
 dommascate.com.br, 1
 domodeco.fr, 1
 domodedovo.travel, 1
 domprojects.com, 1
 domscripting.com, 1
@@ -6896,16 +6896,17 @@ dugnet.io, 1
 dugnet.net, 1
 dugnet.org, 1
 dugnet.tech, 1
 dugunedavet.com, 1
 duh.se, 1
 duijf.info, 1
 duijfathome.nl, 1
 dukan-recepty.ru, 1
+dukec.me, 1
 dukegat.de, 1
 dukesatqueens.com, 1
 duks.com.br, 1
 dukun.de, 1
 dulei.si, 1
 dullapp.com, 1
 dumax.xyz, 1
 dumbeartech.com, 1
@@ -7624,17 +7625,16 @@ equipsupply.com, 1
 equitee.co, 1
 equityflows.com, 1
 er-music.com, 1
 er.tl, 1
 erad.fr, 1
 erasmusplusrooms.com, 1
 erdethamburgeronsdag.no, 1
 erepublik-deutschland.de, 1
-erethon.com, 1
 erf-neuilly.com, 1
 ergo-open.de, 1
 ergovita.com.br, 1
 ergovitanet.com.br, 1
 eriador.io, 1
 ericabrahamsen.net, 1
 ericairwin.com, 1
 ericdiao.com, 1
@@ -7761,16 +7761,17 @@ estafallando.es, 1
 estafallando.mx, 1
 estaleiro.org, 1
 estan.cn, 1
 estateczech-eu.ru, 1
 estcequonmetenprodaujourdhui.info, 1
 esteam.se, 1
 esteticanorte.com.br, 1
 estilopack-loja.com.br, 1
+estland.guide, 1
 estoic.net, 1
 estoniantrade.ee, 1
 estonoentraenelexamen.com, 1
 estoqueinformatica.com.br, 1
 estrietoit.com, 0
 eswap.cz, 1
 etaes.eu, 1
 etalent.net, 1
@@ -8405,17 +8406,16 @@ filewall.de, 1
 filhodohomem.com, 1
 filhomes.ph, 1
 fili.org, 1
 filip-prochazka.com, 1
 filippo.io, 1
 filleritemsindia.com, 1
 fillitupchallenge.eu, 1
 fillmysuitca.se, 1
-fillo.sk, 1
 film-tutorial.com, 1
 film.photography, 1
 film.photos, 1
 filmatiporno.xxx, 1
 filme-online.eu.com, 1
 filme-onlines.com, 1
 filmreviewonline.com, 1
 filmserver.de, 1
@@ -8590,17 +8590,16 @@ floffi.media, 1
 flokinet.is, 1
 floobits.com, 1
 flood.io, 1
 floorball-haunwoehr.de, 1
 flooringnightmares.com, 1
 floort.net, 0
 flopix.net, 0
 florence.uk.net, 1
-florent-tatard.fr, 1
 florentynadawn.co.uk, 1
 florian-bachelet.fr, 1
 florian-schlachter.de, 1
 florian-thie.de, 1
 floriankarmen.com, 1
 floriankeller.de, 1
 florianmitrea.uk, 1
 florianschmitt.ca, 1
@@ -8994,17 +8993,16 @@ frogsonamission.de, 1
 froh.co.jp, 0
 frokenblomma.se, 1
 frolov.net, 1
 frolova.org, 1
 fromix.de, 1
 fromlemaytoz.com, 1
 fromscratch.rocks, 1
 fromthesoutherncross.com, 1
-front-end.dog, 1
 fronteers.nl, 0
 frontline.cloud, 1
 frontline6.com, 1
 fropky.com, 1
 frostbytes.net, 1
 frostwarning.com, 1
 frosty-gaming.xyz, 1
 frothy.coffee, 1
@@ -9061,21 +9059,19 @@ fukuko.xyz, 1
 fukuoka-cityliner.jp, 1
 fuli.am, 1
 fuliwang.info, 1
 fuliwang.us, 1
 fuliydys.com, 1
 fullautomotivo.com.br, 1
 fullbundle.com, 1
 fullhub.ru, 1
-fullmatch.net, 1
 fumblers.ca, 1
 fumerolles.ch, 1
 fumiware.com, 1
-funandnatural.shop, 1
 funatic.nl, 1
 funchestra.at, 0
 functions-online.com, 1
 fundays.nl, 1
 fundchan.com, 1
 fundeego.com, 1
 funderburg.me, 1
 fundingempire.com, 1
@@ -9297,16 +9293,17 @@ gbl.selfip.net, 1
 gc-mc.de, 1
 gc.gy, 1
 gchoic.com, 1
 gchp.ie, 1
 gchq.wtf, 1
 gcs-ventures.com, 1
 gcsepod.com, 1
 gdax.com, 1
+gdb-tutorial.net, 1
 gdevpenze.ru, 1
 gdgrzeszow.pl, 1
 gdiary.net, 1
 gdoce.es, 1
 gdutnic.com, 1
 gdv.me, 1
 gdz-otvety.com, 1
 gdz-spishy.com, 1
@@ -9582,16 +9579,17 @@ girlsgenerationgoods.com, 1
 girlsgonesporty.com, 1
 girlsnet.work, 1
 girsa.org, 1
 girvas.ru, 1
 gistr.io, 1
 git.co, 1
 git.market, 1
 github.com, 1
+gitstuff.tk, 1
 gittr.ch, 1
 giunchi.net, 1
 giuseppemacario.men, 1
 givastar.com, 1
 giveattheoffice.org, 0
 giveme.online, 1
 given2.com, 1
 giverang.com, 1
@@ -9901,25 +9899,25 @@ greengoblindev.com, 1
 greenpartyofnewmilford.org, 1
 greenpeace-magazin.de, 1
 greenpeace.berlin, 1
 greenroach.ru, 1
 greensdictofslang.com, 1
 greensolid.biz, 1
 greensquare.tk, 1
 greenteamtwente.nl, 1
-greenvpn.pro, 1
 greger.me, 1
 greggsfoundation.org.uk, 1
 gregmartyn.com, 1
 gregoirow.be, 1
 gregorians.org, 1
 gregorykelleher.com, 1
 gregoryrealestategroup.com, 1
 gregorywiest.com, 1
+grekland.guide, 1
 grepmaste.rs, 1
 grepular.com, 1
 gresak.io, 1
 grettogeek.com, 1
 greuel.online, 1
 grey.house, 1
 greybit.net, 1
 greyhash.se, 1
@@ -10047,16 +10045,17 @@ guillaumeperrin.io, 1
 guillemaud.me, 1
 guiltypleasuresroleplaying.com, 1
 guim.co.uk, 1
 guinea-pig.co, 1
 guineapigmustach.es, 1
 guitarmarketing.com, 0
 gulenbase.no, 1
 gulleyperformancecenter.com, 1
+gulshankumar.net, 1
 gummibande.noip.me, 1
 gunhunter.com, 1
 guniram.com, 1
 gunwatch.co.uk, 1
 guphi.net, 0
 gurkan.in, 1
 gurmel.ru, 1
 gurochan.ch, 1
@@ -10102,17 +10101,16 @@ gz-architekten.de, 1
 gz-benz.com, 1
 gz-bmw.com, 1
 gza.jp, 1
 gzitech.com, 1
 gzitech.net, 1
 gzom.ru, 1
 gzpblog.com, 1
 h-jo.net, 1
-h001.ru, 1
 h09.eu, 1
 h11.io, 1
 h11.moe, 1
 h2s-design.de, 1
 h2u.tv, 1
 h3artbl33d.nl, 1
 h3x.jp, 1
 h3z.jp, 1
@@ -10132,17 +10130,16 @@ hackbubble.me, 1
 hackcraft.net, 1
 hackenkunjeleren.nl, 1
 hackenturet.dk, 1
 hacker.club, 1
 hacker.deals, 1
 hacker.one, 1
 hacker.parts, 1
 hacker1.com, 1
-hacker8.cn, 1
 hackerchai.com, 1
 hackernet.se, 1
 hackerone-ext-content.com, 1
 hackerone-user-content.com, 1
 hackerone.com, 1
 hackerone.net, 1
 hackerstxt.org, 1
 hackgins.com, 1
@@ -10150,17 +10147,16 @@ hackingand.coffee, 1
 hackingdh.com, 1
 hackmd.io, 1
 hackmeplz.com, 1
 hackthissite.org, 1
 hacktivis.me, 1
 hackyourfaceoff.com, 1
 hadaly.fr, 1
 hadleighswimmingclub.co.uk, 1
-hadouk.in, 1
 hadrons.org, 1
 haefligermedia.ch, 1
 haehnlein.at, 1
 haemmerle.net, 1
 haens.li, 1
 hafniatimes.com, 1
 haiboxu.com, 1
 hail2u.net, 1
@@ -10363,17 +10359,16 @@ hdfgroup.org, 1
 hdguru.com, 1
 hdhoang.space, 1
 hdm.io, 1
 hdrsource.com, 1
 hdrtranscon.com, 1
 hds-lan.de, 1
 hdserver.info, 1
 hdy.nz, 1
-head.org, 1
 headjapan.com, 1
 headlinepublishing.be, 1
 headshotharp.de, 1
 health-match.com.au, 1
 health.graphics, 1
 healthcare.gov, 0
 healtheffectsofasbestos.com, 1
 healthfoam.com, 1
@@ -10483,16 +10478,17 @@ hendyisaac.com, 1
 hengelsportdeal.com, 1
 henhenlu.com, 1
 henkverlinde.com, 0
 hennadesigns.org, 1
 hennecke-forstbetrieb.de, 1
 henneke.me, 1
 hennymerkel.com, 1
 henok.eu, 1
+henriknoerr.com, 1
 henriksen.is, 1
 henrikwelk.de, 1
 henrock.net, 1
 henry.gg, 1
 henryphan.com, 0
 hentai.design, 1
 hentaimaster.net, 1
 hentschke-bau.de, 1
@@ -10510,16 +10506,17 @@ herculex.fi, 1
 herds.eu, 1
 herdserv.de, 1
 here.ml, 1
 herebedragons.io, 1
 herecsrymy.cz, 1
 heribe-maruo.com, 1
 hermanbrouwer.nl, 1
 hermes-net.de, 1
+hermes-servizi.it, 1
 herni-kupony.cz, 1
 herocentral.de, 1
 heroicpixel.com, 1
 heroin.org.uk, 1
 heroku.com, 1
 herr-webdesign.de, 1
 herrderzeit.de, 1
 herringsresidence.be, 1
@@ -10640,17 +10637,16 @@ hinterposemuckel.de, 1
 hintss.pw, 1
 hiphop.ren, 1
 hippies.com.br, 1
 hippomovers.com, 1
 hippopotamuses.org, 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
 hirokilog.com, 1
 hirotaka.org, 1
 hirte-digital.de, 1
@@ -11162,17 +11158,16 @@ idemo.in, 1
 idensys.nl, 1
 identifyme.net, 1
 identity-hash.online, 1
 identitytheft.gov, 1
 idexxpublicationportal.com, 1
 idgard.de, 1
 idhosts.co.id, 1
 idid.tk, 1
-idinby.dk, 1
 idiopolis.org, 1
 idiotentruppe.de, 1
 idmanagement.gov, 1
 idmobile.co.uk, 1
 idndx.com, 1
 idoc24.com, 1
 idol-bikes.ru, 1
 idolf.dk, 1
@@ -11220,17 +11215,16 @@ iggsoftware.com, 1
 igi.codes, 1
 igiftcards.de, 1
 igimusic.com, 1
 igk.de, 1
 igm-be.ch, 1
 ignace72.eu, 1
 ignat.by, 1
 ignitedmindz.in, 1
-igotoffer.com, 0
 igrivi.com, 1
 igsmgmt.com, 1
 iguana.com.ec, 1
 ih8sn0w.com, 1
 ihkk.net, 1
 ihollaback.org, 1
 ihopeit.works, 1
 ihostup.net, 1
@@ -11265,17 +11259,16 @@ ilamparas.com.co, 1
 ilamparas.com.ve, 1
 ilamparas.mx, 1
 ilard.fr, 1
 ilazycat.com, 1
 ile-kalorii.pl, 1
 ileat.com, 1
 ilektronika-farmakeia-online.gr, 1
 ilhansubasi.com, 1
-ilikfreshweedstores.com, 1
 illambias.ch, 1
 illegalpornography.me, 1
 illich.cz, 1
 illicitart.ca, 1
 illjinx.info, 1
 illorenese.fr, 1
 illuminationis.com, 1
 illusionephemere.com, 1
@@ -11406,16 +11399,17 @@ indesit-training.com, 1
 index-games.com, 1
 index-mp3.com, 1
 indian-elephant.com, 1
 indianaffairs.gov, 0
 indiawise.co.uk, 1
 indicateurs-flash.fr, 1
 indiegame.space, 1
 indiemods.com, 1
+indien.guide, 1
 indievelopment.nl, 1
 indigosakura.com, 1
 indilens.com, 1
 inditip.com, 1
 indochina.io, 1
 indogermanstartup.com, 1
 indogermantrade.de, 1
 indostar303.com, 1
@@ -11561,16 +11555,17 @@ institut-confucius-montpellier.org, 1
 institutolancaster.com, 1
 institutulcultural.ro, 1
 instrumart.ru, 1
 insurance321.com, 1
 int-ext-design.fr, 1
 int-ma.in, 1
 intafe.co.jp, 1
 integraelchen.de, 1
+integralblue.com, 1
 integralkk.com, 1
 integrationinc.com, 0
 integraxor.com.tw, 1
 integrity.gov, 1
 integrityingovernmentidaho.com, 1
 integrogroup.com, 1
 integromat.com, 1
 intelbet.es, 1
@@ -11740,16 +11735,17 @@ irinkeby.nu, 1
 iriomote.com, 1
 iris-design.info, 1
 iris-insa.com, 1
 irische-segenswuensche.info, 1
 irish.dating, 1
 irishmusic.nu, 1
 irisjieun.com, 1
 irland-firma.com, 1
+irland.guide, 1
 irmag.ru, 1
 irmgard-woelfle.de, 1
 irmgardkoch.com, 1
 irodorinet.com, 1
 iroise.ch, 1
 iron-guard.net, 1
 ironcarnival.com, 1
 irondaleirregulars.com, 1
@@ -11932,17 +11928,16 @@ ivi-fertilite.fr, 1
 ivi-fruchtbarkeit.de, 1
 ivi.com.ar, 1
 ivi.com.pa, 1
 ivi.mx, 1
 ivi.net.br, 1
 ivi.pt, 1
 ivinet.cl, 1
 ivitalia.it, 1
-ivklombard.ru, 1
 ivor.io, 1
 ivor.is, 1
 ivorvanhese.com, 1
 ivorvanhese.nl, 1
 ivpn.net, 1
 ivvl.ru, 1
 ivyshop.com.br, 1
 ivystech.com, 1
@@ -12015,16 +12010,17 @@ jaegerlacke.de, 1
 jagerman.com, 1
 jaguarlandrover-asse.be, 1
 jaguarlandrover-occasions.be, 1
 jahanaisamu.com, 1
 jahner.xyz, 1
 jahofmann.de, 1
 jailbreakingisnotacrime.org, 1
 jaimechanaga.com, 1
+jaion.ml, 1
 jaispirit.com, 1
 jaitnetworking.com, 0
 jakarta.dating, 1
 jake.eu.org, 1
 jake.ml, 1
 jake.nom.za, 1
 jakecurtis.de, 1
 jakeguild.com, 1
@@ -12290,17 +12286,16 @@ jiripudil.cz, 1
 jisaku-homepage.com, 1
 jiveiaktivno.bg, 1
 jixun.moe, 1
 jiyusu.com, 1
 jjf.org.au, 1
 jjj.blog, 1
 jjvanoorschot.nl, 1
 jka.io, 1
-jkchocolate.com, 1
 jkirsche.com, 1
 jkrippen.com, 1
 jlhmedia.com, 1
 jlkhosting.com, 1
 jlr-luxembourg.com, 1
 jm-bea.net, 1
 jmarciniak.it, 1
 jmb.lc, 1
@@ -12368,16 +12363,17 @@ johannes.wtf, 1
 johnblackbourn.com, 1
 johndong.net, 0
 johnfulgenzi.com, 1
 johngallias.com, 1
 johnguant.com, 1
 johnmalloneemd.com, 0
 johnmcgovern.com, 1
 johnmcintosh.pro, 1
+johnmh.me, 1
 johnmichel.org, 1
 johnmorganpartnership.co.uk, 1
 johnnybet.com, 1
 johnnybsecure.com, 1
 johnroach.io, 1
 johnroberts.me, 1
 johnrockefeller.net, 1
 johnsegovia.com, 1
@@ -12521,17 +12517,16 @@ judc-ge.ch, 1
 judoprodeti.cz, 1
 judosaintdenis.fr, 1
 juegosycodigos.mx, 1
 juergen-elbert.de, 1
 juergenhecht.de, 1
 jugendsuenden.info, 1
 juhakoho.com, 1
 juice.codes, 1
-juku-info.top, 1
 julegoerke.de, 1
 julian-weigle.de, 1
 juliangonggrijp.com, 1
 julianickel.de, 1
 julianmeyer.de, 1
 juliansimioni.com, 1
 julianskitchen.ch, 1
 julianvmodesto.com, 1
@@ -12666,21 +12661,23 @@ kalian.cz, 1
 kalifornien-tourismus.de, 1
 kall.is, 1
 kallies-net.de, 1
 kalmar.com, 1
 kaloix.de, 1
 kaltenbrunner.it, 1
 kalterersee.ch, 1
 kamalame.co, 1
+kambodja.guide, 1
 kamikaichimaru.com, 1
 kamitech.ch, 1
 kamixa.se, 1
 kana.me, 1
 kanaanonline.org, 1
+kanada.guide, 1
 kanaete-uranai.com, 1
 kanagawachuo-hospital.jp, 1
 kanal-tv-haensch.de, 1
 kanar.nl, 1
 kandalife.com, 1
 kandec.co.jp, 1
 kanehusky.com, 1
 kanganer.com, 1
@@ -12706,16 +12703,17 @@ kanuvu.de, 1
 kanzashi.com, 1
 kanzlei-sixt.de, 1
 kap-genial.de, 1
 kapo.info, 1
 kappit.dk, 1
 kapseli.net, 1
 kaptadata.com, 1
 kaptamedia.com, 1
+kapverde.guide, 1
 karabas.com, 1
 karabijnhaken.nl, 0
 karachi.dating, 1
 karamna.com, 1
 karamomo.net, 1
 karanjthakkar.com, 1
 karanlyons.com, 1
 karateka.org, 1
@@ -12768,17 +12766,16 @@ katekligys.com, 1
 katemarsh.com, 1
 katericke.com, 1
 kathardt.de, 1
 kati-raumplaner.de, 1
 katiechai.xyz, 1
 katja-nikolic-design.de, 1
 katka.info, 1
 katnunn.co.uk, 1
-katoju.co.jp, 1
 katrinjanke.de, 1
 kattelans.eu, 1
 kattenfun.be, 1
 kattenfun.nl, 1
 katzen.me, 1
 kau-boys.com, 1
 kau-boys.de, 1
 kaufberatung.community, 1
@@ -12812,33 +12809,33 @@ kc-holzfaeller.de, 1
 kc5mpk.com, 1
 kcptun.com, 1
 kcsordparticipation.org, 1
 kd.net.nz, 1
 kdex.de, 1
 kdyby.org, 1
 ke7tlf.us, 1
 keaneokelley.com, 1
+kearney.io, 1
 keartanddesign.com, 1
 keaysmillwork.com, 1
 keb.com.au, 1
 keb.net.au, 1
 kedarastudios.com, 1
 kedibizworx.com, 1
 keechain.io, 1
 keeleysam.com, 1
 keepa.com, 1
 keepaa.com, 1
 keeperapp.com, 1
 keeperklan.com, 0
 keepersecurity.com, 1
 keepiteasy.eu, 1
 keeweb.info, 1
 keezin.ga, 1
-kefaloniatoday.com, 1
 keganthorrez.com, 1
 kehlenbach.net, 1
 keifel.de, 1
 kein-design.de, 1
 kein-fidget-spinner-werden.de, 1
 keinefilterblase.de, 1
 keisaku.org, 1
 keishiando.com, 1
@@ -12867,17 +12864,16 @@ kendra.io, 1
 kendu.si, 1
 kengilmour.com, 1
 kenguntokku.jp, 1
 kenkoelectric.com, 0
 kennedy.ie, 1
 kenners.org, 1
 kennethaasan.no, 1
 kennethferguson.com, 1
-kennethlim.me, 1
 kenny-peck.com, 1
 keno.im, 1
 kenoschwalb.com, 1
 kenrogers.co, 1
 kentacademiestrust.org.uk, 1
 kentec.net, 1
 kenterlis.gr, 1
 kenyons.info, 1
@@ -12991,26 +12987,28 @@ kilogram.nl, 1
 kilometertje.nl, 1
 kimana.pe, 1
 kimiris.com, 1
 kimmel.com, 1
 kimmel.in, 1
 kimoota.net, 0
 kimotodental.com, 1
 kimsufi-jordi.tk, 1
+kina.guide, 1
 kinderbasar-luhe.de, 1
 kinderbuecher-kostenlos.de, 1
 kinderopvangengeltjes.nl, 1
 kindleworth.com, 1
 kinepolis-studio.ga, 1
 kineto.space, 1
 kingant.net, 1
 kinganywhere.eu, 1
 kingbird.me, 1
 kingclass.cn, 1
+kingdomcrc.org, 1
 kinglaksa.com, 0
 kingofshooting.com, 1
 kingopen.cn, 1
 kingpincages.com, 1
 kingqueen.org.uk, 1
 kingstclinic.com, 1
 kingtecservices.com, 1
 kini24.ru, 1
@@ -13144,24 +13142,24 @@ klva.cz, 1
 km-net.pl, 1
 kmashworth.co.uk, 1
 kmkz.jp, 1
 kn007.net, 1
 knaake.net, 1
 knab-networks.com, 1
 knapp.noip.me, 1
 kncg.pw, 1
-knegten-agilis.com, 1
 knep.me, 1
 kngk-azs.ru, 1
 kngk-group.ru, 1
 kngk-transavto.ru, 1
 kngk.org, 1
 kngkng.com, 1
 kniga.market, 1
+knigadel.com, 1
 knightsblog.de, 1
 knightsbridge.net, 1
 knip.ch, 1
 knot-store.com, 1
 knowledgehook.com, 1
 knowlevillagecc.co.uk, 1
 knthost.com, 1
 knutur.is, 1
@@ -13173,17 +13171,16 @@ koalas.org, 1
 kobezda.net, 1
 kobieta.guru, 1
 kobofarm.com, 1
 koboldcraft.ch, 1
 kobolya.hu, 1
 kodak-ism.com, 1
 kodakit.com, 1
 kodden.com.br, 1
-kode-it.de, 1
 kode.ch, 1
 koebbes.de, 1
 koelnmafia.de, 1
 koenigsbrunner-tafel.de, 1
 koerper-wie-seele.de, 0
 koertner-muth.com, 1
 koertner-muth.de, 1
 koethen-markt.de, 1
@@ -13370,16 +13367,17 @@ kts-thueringen.de, 1
 ktsee.eu.org, 1
 ktube.yt, 1
 ku.io, 1
 kualo.co.uk, 1
 kualo.com, 1
 kualo.in, 1
 kuaza.com, 1
 kub.hr, 1
+kuba.guide, 1
 kubik-rubik.de, 0
 kubiwa.net, 1
 kubkprf.ru, 1
 kubusadvocaten.nl, 1
 kuchentraum.eu, 1
 kucheryavenkovn.ru, 1
 kucnibudzet.com, 1
 kueche-co.de, 1
@@ -13512,17 +13510,16 @@ ladbroke.net, 1
 ladylucks.co.uk, 1
 laextra.mx, 1
 lafayette-rushford.com, 1
 lafeemam.fr, 1
 lafillepolyvalente.ca, 1
 lafillepolyvalente.com, 1
 lafka.org, 1
 lafkor.de, 1
-laflash.com, 1
 laforetenchantee.ch, 1
 lafosseobservatoire.be, 1
 lagarderob.ru, 0
 lagerauftrag.info, 1
 laglab.org, 1
 laguiadelvaron.com, 1
 laguinguette.fr, 1
 lahora.com.ec, 1
@@ -13563,16 +13560,17 @@ landbetweenthelakes.us, 1
 landofelves.net, 1
 langatang.com, 1
 langbein.org, 1
 langguth.io, 1
 langkahteduh.com, 1
 langly.fr, 0
 languageterminal.com, 1
 langworth.com, 1
+laniakean.com, 1
 lanna.io, 1
 lannainnovation.com, 1
 lanre.org, 1
 lanroamer.de, 1
 lansechensilu.com, 1
 lansinoh.co.uk, 1
 lantian.pub, 1
 lanuovariviera.it, 1
@@ -14044,16 +14042,17 @@ likegeeks.com, 1
 likehifi.de, 1
 likemovies.de, 1
 likenosis.com, 1
 lilaccakeboutique.com, 1
 lilapmedia.com, 1
 liliang13.com, 1
 lilismartinis.com, 1
 lily-bearing.com, 1
+lily-inn.com, 1
 lilyfarmfreshskincare.com, 1
 lilygreen.co.za, 1
 limawi.io, 1
 limeburst.net, 1
 limeres.com, 1
 limereslaw.com, 1
 limitededitioncomputers.com, 1
 limitededitionsolutions.com, 1
@@ -14365,16 +14364,17 @@ lookart.ch, 1
 lookastic.co.uk, 1
 lookastic.com, 1
 lookastic.de, 1
 lookastic.es, 1
 lookastic.fr, 1
 lookastic.mx, 1
 lookastic.ru, 1
 lookatmysco.re, 1
+lookyman.net, 1
 loony.info, 1
 loophost.com.br, 0
 loopower.com, 1
 loothole.com, 1
 loovto.net, 1
 loperetti.ch, 1
 loqu8.com, 1
 lordofthebrick.com, 1
@@ -14395,17 +14395,17 @@ lotw.de, 1
 lou.lt, 1
 louange-reconvilier.ch, 1
 loucanfixit.com, 1
 louduniverse.net, 1
 louisvillecarguys.com, 1
 louisvillevmug.info, 1
 loune.net, 1
 love-schna.jp, 1
-love4taylor.eu.org, 0
+love4taylor.eu.org, 1
 loveandadoreboutique.com, 1
 loveandloyalty.se, 1
 loveislandgames.com, 1
 loveismore.de, 0
 loveismore.es, 0
 loveismore.eu, 0
 loveismore.fr, 0
 loveismore.it, 0
@@ -14733,31 +14733,33 @@ maisvitaminas.com.br, 1
 maitrechaton.fr, 1
 majahoidja.ee, 1
 majaweb.cz, 1
 majemedia.com, 1
 majid.info, 1
 majncloud.tk, 1
 makaleci.com, 1
 makedin.net, 1
+makedonien.guide, 1
 makeit-so.de, 1
 makenaiyo-fx.com, 1
 makeshiftco.de, 1
 makeuplove.nl, 1
 makeyourank.com, 1
 makeyourlaws.org, 1
 makinen.ru, 1
 makkusu.photo, 1
 makowitz.cz, 1
 maktoob.search.yahoo.com, 0
 malamutedoalasca.com.br, 1
 malash.me, 1
 malasuk.com, 1
 malaysia.search.yahoo.com, 0
 malaysian.dating, 1
+maldiverna.guide, 1
 maleexcel.com, 1
 malenyflorist.com.au, 1
 malesbdsm.com, 1
 malgraph.net, 1
 maliar.fr, 1
 malibubeachrecoverycenter.com, 1
 malikussa.id, 1
 malinator.net, 0
@@ -14848,16 +14850,17 @@ map4erfurt.de, 1
 map4jena.de, 1
 mapasmundi.com.br, 1
 mapblender.com, 1
 maplanetebeaute.fr, 1
 mapletime.com, 1
 mapresidentielle.fr, 1
 maquinariaspesadas.org, 1
 marakovits.net, 1
+marbinvest.com, 1
 marble.com, 1
 marbogardenlidkoping.se, 1
 marc-schlagenhauf.de, 1
 marcaudefroy.com, 1
 marcbuehlmann.com, 1
 marcdorka.de, 1
 marceau.ovh, 1
 marcel-preuss.de, 1
@@ -15012,16 +15015,17 @@ mastd.onl, 1
 mastellone.us, 1
 master-net.org, 1
 mastercardpac.com, 1
 masterdemolitioninc.com, 1
 masterdigitale.com, 1
 masterhaus.bg, 1
 masterofallscience.com, 1
 masterofbytes.ch, 1
+masterpc.co.uk, 1
 masters.black, 1
 mastersthesiswriting.com, 1
 masterstuff.de, 1
 mastichor.info, 1
 mastiffingles.com.br, 1
 masto.io, 1
 mastodon.at, 1
 mastodon.blue, 0
@@ -15046,17 +15050,16 @@ mathhire.org, 1
 mathiasbynens.be, 1
 mathiasgarbe.de, 1
 mathieuguimond.com, 1
 mathieui.net, 1
 mathijskingma.nl, 1
 maths.network, 1
 mathspace.co, 1
 matildajaneclothing.com, 1
-matillat.ovh, 1
 matjaz.it, 1
 matlabjo.ir, 1
 matlss.com, 1
 matrixmedia.ro, 1
 mattandyana.com, 1
 mattberryman.com, 1
 mattbsg.xyz, 1
 mattcarr.net, 0
@@ -15110,17 +15113,16 @@ maxicore.co.za, 1
 maxima.at, 1
 maximdeboiserie.be, 1
 maximdens.be, 1
 maximeferon.fr, 1
 maximelouet.me, 1
 maximilian-graf.de, 1
 maximilian-greger.com, 1
 maximiliankaul.de, 1
-maximiliankrieg.de, 1
 maxims-travel.com, 1
 maxipcalls.com, 1
 maxkaul.de, 1
 maxmachine.ind.br, 1
 maxmilton.com, 1
 maxtruxa.com, 1
 maxwaellenergie.de, 1
 maxwell-english.co.jp, 0
@@ -15201,32 +15203,34 @@ mcynews.com, 1
 mcyukon.com, 1
 md5file.com, 1
 md5hashing.net, 1
 mdcloudpracticesolutions.com, 1
 mdcloudps.com, 1
 mdek.at, 1
 mdewendt.de, 1
 mdf-bis.com, 1
+mdkr.nl, 1
 mdma.net, 1
 mdmed.clinic, 1
 mdns.eu, 1
 mdosch.de, 1
 mdpraha.cz, 1
 mdsave.com, 1
 mdwftw.com, 1
 mdx.no, 1
 mdxn.org, 1
 me-center.com, 1
 me-dc.com, 1
 me-groups.com, 1
 me.net.nz, 1
 meadowviewfarms.org, 1
 mealgoo.com, 1
 mealz.com, 1
+meanevo.com, 1
 meany.xyz, 1
 meap.xyz, 1
 measuretwice.com, 1
 measureyourpenis.today, 1
 meat.org.uk, 1
 meathealth.com, 1
 mecanicadom.com, 1
 mecanicoautomotriz.org, 1
@@ -15253,16 +15257,17 @@ mediawiki.org, 1
 mediawin.pl, 1
 medic-world.com, 1
 medicinesfast.com, 0
 medicinia.com.br, 1
 medicocompetente.it, 1
 medicoresponde.com.br, 1
 medifab.online, 1
 medifi.com, 1
+medireport.fr, 1
 mediterenopmaandag.nl, 1
 medium.com, 1
 mediumraw.org, 1
 mediweed.tk, 1
 medlineplus.gov, 1
 medo64.com, 1
 medovea.ru, 1
 medpics.com, 1
@@ -15418,19 +15423,22 @@ metacoda.com, 1
 metacode.biz, 1
 metadatawiki.com, 1
 metaether.net, 1
 metalsculpture.co.uk, 1
 metapeen.nl, 1
 metasquare.com.au, 1
 metasquare.nyc, 1
 meteenonline.nl, 1
+meteobox.co, 1
+meteobox.cz, 1
 meteobox.de, 1
 meteobox.es, 1
 meteobox.fr, 1
+meteobox.mx, 1
 meteobox.pl, 1
 meteobox.sk, 1
 meteorapp.space, 1
 meteosmit.it, 1
 meterhost.com, 1
 methamphetamine.co.uk, 1
 methylone.com, 1
 metin2sepeti.com, 1
@@ -15446,33 +15454,33 @@ meucosmetico.com.br, 1
 meulike.us, 1
 meusigno.com, 1
 mevo.xyz, 1
 mevs.cz, 1
 mexican.dating, 1
 mexicom.org, 1
 mexior.nl, 1
 meyeraviation.com, 1
+mf-fischer.de, 1
 mfiles.pl, 1
 mflodin.se, 1
 mfrsgb45.org, 1
 mft.global, 1
 mfxbe.de, 1
 mghiorzi.com.ar, 0
 mgiay.com, 1
 mgknet.com, 1
 mgoessel.de, 1
 mgrossklaus.de, 1
 mgrt.net, 1
 mgsisk.com, 1
 mhalfter.de, 1
 mhatlaw.com, 1
 mheistermann.de, 1
 mhermans.nl, 1
-mhjuma.com, 1
 mhmfoundationrepair.com, 1
 mi-beratung.de, 1
 mi-so-ji.com, 1
 mia.to, 1
 miagexport.com, 1
 miamicityballet.org, 1
 mianfei-vpn.com, 1
 miaowo.org, 1
@@ -16076,16 +16084,17 @@ mrksk.com, 1
 mrliu.me, 1
 mrmoregame.de, 1
 mrs-labo.jp, 1
 mrsbairds.com, 1
 mrserge.lv, 1
 mrsk.me, 1
 mrstat.co.uk, 1
 mrx.one, 1
+ms-alternativ.de, 1
 msa-aesch.ch, 1
 mscc.org, 1
 mscenter.cf, 1
 mschuessler.org, 1
 msebera.cz, 1
 msgallery.tk, 1
 msh100.uk, 1
 mshemailmarketer.com.au, 1
@@ -16229,17 +16238,16 @@ muzeumkomiksu.eu, 1
 muzgra.in, 1
 muzi.cz, 1
 mv-wohnen.de, 1
 mvbits.com, 1
 mvnet.com.br, 1
 mvno.io, 1
 mvp-stars.com, 1
 mwainc.org, 1
-mware-staging.azurewebsites.net, 1
 mwavuli.co.ke, 1
 mwba.org, 1
 mwe.st, 1
 mwtdev.se, 1
 mww.moe, 1
 mx.org.ua, 1
 mx.search.yahoo.com, 0
 mx5international.com, 1
@@ -16445,16 +16453,17 @@ mzorn.photography, 1
 n-pix.com, 0
 n-soft.info, 1
 n-un.de, 1
 n0099.cf, 0
 n0paste.tk, 0
 n2servers.com, 1
 n3twork.net, 1
 n4v.eu, 1
+n6a.net, 1
 naam.me, 1
 nabankco.com, 1
 nabu-bad-nauheim.de, 1
 nachsendeauftrag.net, 1
 nachsenden.info, 1
 nachtmuziek.info, 1
 nacin.com, 1
 nacyklo.cz, 1
@@ -16546,16 +16555,17 @@ natanaelys.com, 0
 natation-nsh.com, 1
 natatorium.org, 1
 natecraun.net, 1
 natenom.com, 1
 natenom.de, 1
 natenom.name, 1
 nathaliebaron.ch, 1
 nathaliebaroncoaching.ch, 1
+nathan.io, 1
 nathankonopinski.com, 1
 nathansmetana.com, 1
 nationalcentereg.org, 1
 nationalcrimecheck.com.au, 1
 nationalmap.gov, 1
 nationalpriorities.org, 1
 nationaltaxprep.com, 1
 nativs.ch, 1
@@ -17157,16 +17167,17 @@ nordic-survival.de, 1
 nordiccasinocommunity.com, 1
 nordinfo.fi, 1
 nordnetz-hamburg.de, 1
 nordor.homeip.net, 1
 nordseeblicke.de, 1
 nordwaldzendo.de, 1
 noref.tk, 1
 noreply.mx, 1
+norge.guide, 1
 normaculta.com.br, 1
 normalady.com, 1
 norman-preusser-gmbh.de, 1
 normanbauer.com, 1
 norrkemi.se, 1
 norrliden.de, 1
 norskpensjon.no, 1
 north.supply, 1
@@ -17210,16 +17221,17 @@ notbolaget.se, 1
 notboring.co.uk, 1
 notcompletelycorrect.com, 1
 note7forever.com, 1
 notesforpebble.com, 1
 notevencode.com, 1
 noticia.do, 1
 noticiasdehumor.com, 1
 notificami.com, 1
+notify.moe, 1
 notinglife.com, 1
 notjustvacs.com, 1
 notnize.net, 1
 notnl.com, 1
 notoriousdev.com, 1
 notrecourrier.net, 1
 nottres.com, 1
 notypiesni.sk, 0
@@ -17266,16 +17278,17 @@ nsfw-story.com, 1
 nshost.ro, 1
 nsm.ee, 1
 nsm.stat.no, 1
 nso.ie, 1
 nsp.ua, 1
 nspeaks.com, 1
 nst-maroc.com, 1
 nstd.net, 1
+nstremsdoerfer.ovh, 1
 nsure.us, 1
 nsworks.com, 1
 ntotten.com, 1
 ntppool.org, 1
 ntzwrk.org, 1
 nu-pogodi.net, 1
 nu3tion.com, 1
 nu3tion.cz, 1
@@ -17339,16 +17352,17 @@ nwerc.party, 1
 nwgh.org, 0
 nwk1.com, 1
 nwra.com, 1
 nwwc.dk, 1
 nwwnetwork.net, 1
 nxinfo.ch, 1
 nyan.it, 1
 nyanpasu.tv, 1
+nyazeeland.guide, 1
 nycoyote.org, 1
 nyffo.com, 1
 nyiad.edu, 1
 nyip.co.uk, 1
 nyip.edu, 1
 nyloc.de, 1
 nylonfeetporn.com, 1
 nymphetomania.net, 1
@@ -17510,17 +17524,16 @@ oldtimer-trifft-flugplatz.de, 1
 olegon.ru, 1
 olegs.be, 1
 oleksii.name, 1
 oleodecopayba.com.br, 1
 olgiati.org, 1
 olightstore.com, 1
 olightstore.ro, 1
 oliver-pietsch.de, 0
-oliveraiedelabastideblanche.fr, 1
 oliverfaircliff.com, 1
 olivernaraki.com, 1
 oliverniebuhr.de, 1
 olivierlemoal.fr, 1
 olivierpieters.be, 1
 olivlabs.com, 1
 olizeite.ch, 1
 ollie.io, 1
@@ -17652,16 +17665,17 @@ open-freax.fr, 1
 open-future.be, 1
 open-infrastructure.net, 1
 open-letters.de, 1
 open-mesh.org, 1
 open-sauce-recipes.co.uk, 1
 open.gl, 1
 openacademies.com, 1
 openacte.ch, 1
+openblox.org, 1
 openbsd.id, 1
 openconcept.no, 1
 openconnect.com.au, 1
 opendataincubator.eu, 1
 openevic.info, 1
 openfir.st, 1
 opengg.me, 1
 openings.ninja, 1
@@ -17703,17 +17717,17 @@ oportho.com.br, 1
 opp.ag, 1
 oppaiti.me, 1
 oppejoud.ee, 1
 opportunis.me, 1
 opportunitycorps.org, 1
 opposer.me, 1
 opq.pw, 1
 oprbox.com, 1
-opreismetingvoorunicef.nl, 0
+oprechtgezegd.nl, 1
 opsmate.com, 0
 opsnotepad.com, 1
 optik-trosdorff.de, 1
 optimalsetup.com, 1
 optimist.bg, 1
 optimumwebdesigns.com, 1
 optimus.io, 1
 optimuscrime.net, 1
@@ -17962,16 +17976,17 @@ pan.digital, 1
 panasca.is, 1
 panascais.co, 1
 panascais.com, 1
 panascais.de, 1
 panascais.eu, 1
 panascais.host, 1
 panascais.io, 1
 panascais.me, 1
+panascais.net, 1
 panascais.pw, 1
 panascais.site, 1
 panascais.tech, 1
 panascais.us, 1
 panaxis.ch, 1
 panda.tf, 1
 pandemicflu.gov, 1
 pandoraflora.com, 1
@@ -18088,16 +18103,17 @@ passpilot.co.uk, 1
 passport.yandex.by, 1
 passport.yandex.com, 1
 passport.yandex.com.tr, 1
 passport.yandex.kz, 1
 passport.yandex.ru, 1
 passport.yandex.ua, 1
 passrhce.com, 1
 passrhcsa.com, 1
+passthepopcorn.me, 1
 passvau.lt, 1
 passwd.one, 1
 passwd.org, 1
 password-checker.de, 1
 password.codes, 1
 password.consulting, 1
 password.work, 1
 passwords.google.com, 0
@@ -18355,17 +18371,16 @@ perspektivwechsel-coaching.de, 1
 persson.im, 1
 persson.me, 1
 perucasestoril.com.br, 1
 pervacio.hu, 1
 perzeidi.hr, 1
 pestalozzishop.com.br, 1
 pestici.de, 1
 pet-hotel-mura.net, 1
-pet-life.top, 1
 petabits.de, 1
 petangen.se, 1
 petbooking.it, 1
 petcarvers.com, 1
 petelew.is, 1
 peter.org.ua, 1
 peterandjoelle.co.uk, 1
 peterboers.info, 1
@@ -18424,17 +18439,16 @@ pharmafoto.ch, 1
 pharmaphoto.ch, 1
 pharmapolitics.com, 1
 pharynks.com, 1
 phasme-2016.com, 1
 phcimages.com, 1
 phcmembers.com, 1
 phcnetworks.net, 1
 phcorner.net, 1
-phelx.de, 1
 phenomeno-porto.com, 1
 phenomeno.nl, 1
 phenomenoporto.com, 1
 phenomenoporto.nl, 1
 phget.com, 1
 phi-works.com, 1
 phialo.de, 1
 phil-phillies.com, 1
@@ -18554,17 +18568,16 @@ pieq.eu.org, 1
 pier28.com, 1
 piercraft.com, 1
 pierre-denoblens.net, 1
 pierre-schmitz.com, 1
 pierrefv.com, 1
 pierrejeansuau.fr, 1
 pietawittermans.nl, 1
 pietechsf.com, 1
-pieterbos.nl, 1
 pieterhordijk.com, 1
 pietz.uk, 1
 pigritia.de, 1
 pijuice.com, 1
 pikeitservices.com.au, 1
 pikmy.com, 1
 pileofgarbage.net, 1
 piliszek.net, 1
@@ -18792,17 +18805,16 @@ pneuhaus-lemp.ch, 1
 pnmhomecheckup.com, 1
 pnona.cz, 1
 pnsc.is, 1
 pnukee.com, 1
 pnut.io, 0
 pnyxnet.com, 1
 poba.fr, 1
 pocatellonissanparts.com, 1
-pochaneko.com, 1
 pocketfullofapps.com, 1
 pocketinsure.com, 1
 pocketmemories.net, 1
 pocobelli.ch, 1
 podcast.style, 1
 podemos.info, 1
 podia.com.gr, 1
 podshrink.de, 1
@@ -18827,16 +18839,17 @@ pokemontabletopadventures.com, 1
 pokemori.jp, 1
 pokepon.center, 1
 pokl.cz, 1
 pol-expo.ru, 1
 polaire.org, 1
 pole-emotion.ch, 1
 poleacademie.com, 1
 poleartschool.com, 0
+polen.guide, 1
 poles4pilots.com, 1
 policedriver.com, 1
 polis.or.at, 1
 polis.to, 0
 polit.im, 1
 politic.org.ua, 1
 politiewervingshop.nl, 1
 politik-bei-uns.de, 1
@@ -18909,16 +18922,17 @@ portalzine.de, 1
 portefeuillesignalen.nl, 1
 portercup.com, 1
 portofrotterdam.com, 1
 portosonline.pl, 1
 portraitsystem.biz, 1
 portugalsko.net, 1
 portvaletickets.com, 1
 porybox.com, 1
+porzgmbh.de, 1
 posaunenchor-senden.de, 1
 poseidonwaterproofing.com, 1
 poshsecurity.com, 1
 positionus.io, 1
 positive.com.cy, 1
 positivesobrietyinstitute.com, 1
 posobota.cz, 1
 post-darwinian.com, 1
@@ -19161,17 +19175,16 @@ projectarmy.net, 0
 projectasterk.com, 1
 projectbenson.com, 0
 projectblackbook.us, 1
 projectnom.com, 1
 projectsecretidentity.com, 1
 projectsecretidentity.org, 1
 projectte.ch, 1
 projectunity.io, 1
-projectvault.ovh, 1
 projekt-umbriel.de, 1
 projektik.cz, 1
 projektzentrisch.de, 1
 prok.pw, 1
 prokop.ovh, 1
 prolan.pw, 1
 promedicalapplications.com, 1
 prometheanfire.net, 1
@@ -19283,16 +19296,17 @@ psychedelia.com, 1
 psychedelics.org, 1
 psychiatrie-betreuung.ch, 1
 psychic-healer-mariya-i-petrova-boyankinska-b-borovan-bg.com, 1
 psychintervention.com, 1
 psycho-lobby.com, 1
 psycho.space, 1
 psychoactive.com, 1
 psychotherapie-kp.de, 1
+psydix.org, 1
 psyk.yt, 0
 psylab.cc, 1
 psylab.vip, 1
 pt-server.de, 1
 ptbi.org.pl, 1
 ptbx.co, 1
 pterodactylus.cz, 1
 ptgoldensun.com, 1
@@ -19458,17 +19472,16 @@ qscloud.de, 1
 qtl.me, 1
 qto.com, 1
 qto.net, 1
 qtpass.org, 1
 qtpower.co.uk, 1
 qtpower.net, 1
 qtpower.org, 1
 qtvr.com, 1
-qtxh.net, 1
 quackerswaterproofing.com, 1
 quaedam.org, 1
 quaggan.co, 1
 quai10.org, 0
 quakelive.dk, 0
 qualityedgarsolutions.com, 1
 qualityhomesystems.com, 1
 qualityofcourse.com, 0
@@ -19582,16 +19595,17 @@ rafaelmagalhaesweb.com, 1
 rafey.xyz, 1
 rafting-japan.com, 1
 rage-overload.ch, 1
 rage.rip, 1
 rage4.com, 1
 raghavdua.in, 1
 ragingserenity.com, 1
 rahamasin.eu, 1
+raiblockscommunity.net, 1
 raiffeisen-kosovo.com, 1
 railgun.ac, 1
 railgun.com.cn, 1
 railyardurgentcare.com, 1
 rainbin.com, 1
 rainbowbay.org, 1
 rainbowstore.com.au, 1
 rainforest.engineering, 1
@@ -19722,17 +19736,16 @@ readism.io, 1
 readityourself.net, 1
 readonly.de, 1
 readouble.com, 0
 readtldr.com, 1
 readydok.com, 1
 readysell.net, 1
 readytongue.com, 1
 readytowear.es, 1
-reaganlibrary.gov, 1
 real-bits.com, 1
 real-compare.com, 1
 real-it.nl, 1
 realcapoeira.ru, 1
 realestateonehowell.com, 1
 realgarant-shop.de, 0
 realhorsegirls.net, 1
 realitea.co.uk, 1
@@ -20000,16 +20013,17 @@ responsibledisclosure.nl, 0
 ressl.ch, 1
 restaurace-klokocka.cz, 1
 restaurant-mangal.ch, 1
 restaurant-rosengarten.at, 1
 restaurantesimonetti.com.br, 1
 restaurantmangal.ch, 1
 rester-a-domicile.ch, 1
 rester-autonome-chez-soi.ch, 1
+restioson.me, 1
 restoran-radovce.me, 1
 restoreresearchstudy.com, 1
 restoruns.com, 1
 restrito.org, 1
 resursedigitale.ro, 1
 retcor.net, 1
 retetenoi.net, 1
 reth.ch, 1
@@ -20042,17 +20056,16 @@ review.info, 1
 revisionnotes.xyz, 1
 revistapequenosolhares.com.br, 1
 revivalinhisword.com, 1
 revivingtheredeemed.org, 1
 revlect.com, 1
 revolt.tv, 1
 revthefox.co.uk, 1
 rewardingexcellence.com, 1
-rewopit.net, 1
 rewrite3.com, 1
 rex.st, 1
 rex.tc, 1
 reykjavik.guide, 1
 rezept-planer.de, 1
 rezexpert.com, 1
 rezosup.net, 1
 rezosup.org, 1
@@ -20536,16 +20549,17 @@ rxbn.de, 1
 rxbusiness.com, 1
 ryan-goldstein.com, 1
 ryanbritton.com, 1
 ryanhowell.io, 1
 ryankearney.com, 1
 ryanmcdonough.co.uk, 1
 ryansmithphotography.com, 1
 ryazan-region.ru, 1
+rychlikoderi.cz, 1
 rylore.com, 1
 rynekpierwotny.pl, 1
 rythgs.co, 0
 ryuu.es, 1
 rzegroup.com, 1
 s-c.se, 1
 s-cubed.net, 1
 s-d-v.ch, 1
@@ -20773,17 +20787,16 @@ sarindia.com, 1
 sarindia.de, 1
 sarink.eu, 1
 sarkarikhoj.com, 1
 sarkisozleri.us, 1
 sarndipity.com, 1
 saro.me, 1
 sarumtechnologies.com, 1
 sas-snowboarding.sk, 1
-sash.pw, 1
 sashaokun.com, 1
 sashascollections.com, 1
 saskpension.com, 1
 sastd.com, 1
 sasyabapi.com, 1
 sat.rent, 1
 sat4all.com, 1
 satai.dk, 1
@@ -20870,17 +20883,16 @@ schaafenstrasse.koeln, 1
 schachburg.de, 1
 schadevergoedingen.eu, 1
 schallert.com, 1
 schamlosharmlos.de, 1
 schaper-sport.com, 1
 schatmeester.be, 1
 schatzibaers.de, 1
 schau-rein.co.at, 1
-schawe.me, 1
 schd.io, 1
 scheduleme.io, 1
 scheemadigital.com, 1
 scheidtweiler.de, 1
 scheinlichter.de, 1
 schelberts.de, 1
 schenkes.de, 1
 scherfke.de, 1
@@ -20966,16 +20978,17 @@ schutznetze24.de, 1
 schutzwerk.com, 1
 schwabenhaus-ka.de, 1
 schwarzegar.de, 1
 schwarzer.it, 1
 schwarzhenri.ch, 1
 schwarztrade.cz, 1
 schwarzwald-flirt.de, 1
 schwarzwaldcon.de, 1
+schweiz.guide, 1
 schwinabart.com, 1
 schwinger.me, 1
 schwuppengrillen.de, 1
 science-questions.org, 1
 science-texts.de, 1
 science360.gov, 1
 sciencebase.gov, 1
 sciencemonster.co.uk, 1
@@ -21079,18 +21092,20 @@ sebastian-schmidt.me, 1
 sebastian.expert, 1
 sebastianblade.com, 1
 sebastianboegl.de, 1
 sebastiensenechal.com, 1
 sebi.org, 1
 sec-mails.de, 1
 sec-wiki.com, 1
 sec.ec, 1
+sec.gd, 1
 sec3ure.co.uk, 1
 secanje.nl, 1
+secboom.com, 1
 seccomp.ru, 1
 secctexasgiving.org, 0
 secgui.de, 1
 sech.me, 1
 secitem.at, 1
 secitem.de, 1
 secnews.gr, 1
 secomo.org, 1
@@ -21281,16 +21296,17 @@ seppelec.com, 1
 septakkordeon.de, 1
 septillion.cn, 1
 septs.pw, 1
 sequencing.com, 1
 sequiturs.com, 1
 sera.jp, 1
 serafin.tech, 1
 serbanpaun.ro, 1
+serbien.guide, 1
 sereema.com, 1
 serenaden.at, 1
 serf.io, 1
 sergeyreznikov.com, 1
 sergije-stanic.me, 1
 sergiosantoro.it, 1
 serienstream.to, 1
 serigraphs.co.uk, 1
@@ -21743,16 +21759,17 @@ simpletax.ca, 1
 simplexgame.net, 1
 simplexsupport.com, 0
 simplia.cz, 1
 simplicitypvp.net, 1
 simplidesigns.nl, 1
 simplycharlottemason.com, 1
 simplycloud.de, 1
 simplyenak.com, 1
+simplyfixit.co.uk, 1
 simplyhelen.de, 1
 simplymozzo.se, 1
 simplystudio.com, 1
 simpte.com, 1
 simpul.nl, 1
 sims4hub.ga, 1
 simsnieuws.nl, 1
 simtin-net.de, 1
@@ -21898,16 +21915,17 @@ skynetnetwork.eu.org, 1
 skynetz.tk, 1
 skypoker.com, 1
 skyris.co, 1
 skysuite.nl, 1
 skyvault.io, 1
 skyveo.ml, 1
 skyway.capital, 1
 sl0.us, 1
+sl1pkn07.wtf, 1
 slack-files.com, 1
 slack.com, 1
 sladic.si, 0
 slainvet.net, 1
 slamdjapan.com, 1
 slamix.nl, 1
 slane.cn, 1
 slangbellor.com, 1
@@ -22281,28 +22299,28 @@ soundsecurity.io, 1
 soundtalks.be, 1
 soundtalks.com, 1
 sour.is, 1
 souravsaha.com, 1
 sourcebox.be, 1
 sourcecode.love, 1
 sourcely.net, 1
 sourceway.de, 1
+sourcitec.com, 1
 souris.ch, 1
 sous-surveillance.net, 1
 southafrican.dating, 1
 southamerican.dating, 1
 southbankregister.com.au, 1
 southcoastkitesurf.co.uk, 1
 southcoastswords.com, 1
 southernmost.us, 1
 southernutahinfluencers.com, 1
 southlakenissanparts.com, 1
 southmelbourne.apartments, 1
-southmeriden-vfd.org, 1
 southmorangtownhouses.com.au, 1
 southside-crew.com, 1
 southside-tuning-day.de, 1
 southwaymotors.com, 1
 southwestrda.org.uk, 1
 souvik.me, 1
 soved.eu, 1
 sowingseasons.com, 1
@@ -22322,16 +22340,17 @@ spacemo.com, 1
 spacepage.be, 1
 spaceweather.live, 1
 spaceweatherlive.com, 1
 spackova.cz, 1
 spacountryexplorer.org.au, 1
 spam.lol, 1
 spamwc.de, 1
 spangehlassociates.com, 1
+spanien.guide, 1
 sparkasse.de, 1
 sparkbase.cn, 1
 sparkforautism.org, 1
 sparklebastard.com, 1
 sparkwood.org, 1
 sparmedo.de, 1
 spartaconsulting.fi, 1
 spartantheatre.org, 1
@@ -22448,17 +22467,16 @@ spron.in, 1
 spru